[
  {
    "path": ".dockerignore",
    "content": "# Node modules（前端本地开发产物，Docker 构建时会重新安装）\nfrontend/node_modules\nfrontend/.next\n\n# Python 虚拟环境\n.venv\n__pycache__\n*.pyc\n\n# 日志和临时文件\n*.log\n.DS_Store\n\n# Git\n.git\n.gitignore\n\n# IDE\n.idea\n.vscode\n\n# Docker 相关（避免嵌套）\ndocker/.env\n"
  },
  {
    "path": ".github/workflows/docker-build.yml",
    "content": "name: Build and Push Docker Images\n\non:\n  push:\n    tags:\n      - 'v*'  # 只在推送 v 开头的 tag 时触发（如 v1.0.0）\n  workflow_dispatch:  # 手动触发\n\n# 并发控制：同一分支只保留最新的构建，取消之前正在运行的\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: true\n\nenv:\n  REGISTRY: docker.io\n  IMAGE_PREFIX: yyhuni\n\npermissions:\n  contents: write\n\njobs:\n  # AMD64 构建（原生 x64 runner）\n  build-amd64:\n    runs-on: ubuntu-latest\n    strategy:\n      matrix:\n        include:\n          - image: xingrin-server\n            dockerfile: docker/server/Dockerfile\n            context: .\n          - image: xingrin-frontend\n            dockerfile: docker/frontend/Dockerfile\n            context: .\n          - image: xingrin-worker\n            dockerfile: docker/worker/Dockerfile\n            context: .\n          - image: xingrin-nginx\n            dockerfile: docker/nginx/Dockerfile\n            context: .\n          - image: xingrin-agent\n            dockerfile: docker/agent/Dockerfile\n            context: .\n          - image: xingrin-postgres\n            dockerfile: docker/postgres/Dockerfile\n            context: docker/postgres\n\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n\n      - name: Free disk space\n        run: |\n          sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc /opt/hostedtoolcache/CodeQL\n          sudo docker image prune -af\n\n      - name: Generate SSL certificates for nginx build\n        if: matrix.image == 'xingrin-nginx'\n        run: |\n          mkdir -p docker/nginx/ssl\n          openssl req -x509 -nodes -days 365 -newkey rsa:2048 \\\n            -keyout docker/nginx/ssl/privkey.pem \\\n            -out docker/nginx/ssl/fullchain.pem \\\n            -subj \"/CN=localhost\"\n\n      - name: Set up Docker Buildx\n        uses: docker/setup-buildx-action@v3\n\n      - name: Login to Docker Hub\n        uses: docker/login-action@v3\n        with:\n          username: ${{ secrets.DOCKERHUB_USERNAME }}\n          password: ${{ secrets.DOCKERHUB_TOKEN }}\n\n      - name: Get version\n        id: version\n        run: |\n          if [[ $GITHUB_REF == refs/tags/* ]]; then\n            echo \"VERSION=${GITHUB_REF#refs/tags/}\" >> $GITHUB_OUTPUT\n          else\n            echo \"VERSION=dev-$(git rev-parse --short HEAD)\" >> $GITHUB_OUTPUT\n          fi\n\n      - name: Build and push AMD64\n        uses: docker/build-push-action@v5\n        with:\n          context: ${{ matrix.context }}\n          file: ${{ matrix.dockerfile }}\n          platforms: linux/amd64\n          push: true\n          tags: ${{ env.IMAGE_PREFIX }}/${{ matrix.image }}:${{ steps.version.outputs.VERSION }}-amd64\n          build-args: IMAGE_TAG=${{ steps.version.outputs.VERSION }}\n          cache-from: type=registry,ref=${{ env.IMAGE_PREFIX }}/${{ matrix.image }}:cache-amd64\n          cache-to: type=registry,ref=${{ env.IMAGE_PREFIX }}/${{ matrix.image }}:cache-amd64,mode=max\n          provenance: false\n          sbom: false\n\n  # ARM64 构建（原生 ARM64 runner）\n  build-arm64:\n    runs-on: ubuntu-22.04-arm\n    strategy:\n      matrix:\n        include:\n          - image: xingrin-server\n            dockerfile: docker/server/Dockerfile\n            context: .\n          - image: xingrin-frontend\n            dockerfile: docker/frontend/Dockerfile\n            context: .\n          - image: xingrin-worker\n            dockerfile: docker/worker/Dockerfile\n            context: .\n          - image: xingrin-nginx\n            dockerfile: docker/nginx/Dockerfile\n            context: .\n          - image: xingrin-agent\n            dockerfile: docker/agent/Dockerfile\n            context: .\n          - image: xingrin-postgres\n            dockerfile: docker/postgres/Dockerfile\n            context: docker/postgres\n\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n\n      - name: Generate SSL certificates for nginx build\n        if: matrix.image == 'xingrin-nginx'\n        run: |\n          mkdir -p docker/nginx/ssl\n          openssl req -x509 -nodes -days 365 -newkey rsa:2048 \\\n            -keyout docker/nginx/ssl/privkey.pem \\\n            -out docker/nginx/ssl/fullchain.pem \\\n            -subj \"/CN=localhost\"\n\n      - name: Set up Docker Buildx\n        uses: docker/setup-buildx-action@v3\n\n      - name: Login to Docker Hub\n        uses: docker/login-action@v3\n        with:\n          username: ${{ secrets.DOCKERHUB_USERNAME }}\n          password: ${{ secrets.DOCKERHUB_TOKEN }}\n\n      - name: Get version\n        id: version\n        run: |\n          if [[ $GITHUB_REF == refs/tags/* ]]; then\n            echo \"VERSION=${GITHUB_REF#refs/tags/}\" >> $GITHUB_OUTPUT\n          else\n            echo \"VERSION=dev-$(git rev-parse --short HEAD)\" >> $GITHUB_OUTPUT\n          fi\n\n      - name: Build and push ARM64\n        uses: docker/build-push-action@v5\n        with:\n          context: ${{ matrix.context }}\n          file: ${{ matrix.dockerfile }}\n          platforms: linux/arm64\n          push: true\n          tags: ${{ env.IMAGE_PREFIX }}/${{ matrix.image }}:${{ steps.version.outputs.VERSION }}-arm64\n          build-args: IMAGE_TAG=${{ steps.version.outputs.VERSION }}\n          cache-from: type=registry,ref=${{ env.IMAGE_PREFIX }}/${{ matrix.image }}:cache-arm64\n          cache-to: type=registry,ref=${{ env.IMAGE_PREFIX }}/${{ matrix.image }}:cache-arm64,mode=max\n          provenance: false\n          sbom: false\n\n  # 合并多架构 manifest\n  merge-manifests:\n    runs-on: ubuntu-latest\n    needs: [build-amd64, build-arm64]\n    strategy:\n      matrix:\n        image:\n          - xingrin-server\n          - xingrin-frontend\n          - xingrin-worker\n          - xingrin-nginx\n          - xingrin-agent\n          - xingrin-postgres\n    steps:\n      - name: Login to Docker Hub\n        uses: docker/login-action@v3\n        with:\n          username: ${{ secrets.DOCKERHUB_USERNAME }}\n          password: ${{ secrets.DOCKERHUB_TOKEN }}\n\n      - name: Get version\n        id: version\n        run: |\n          if [[ $GITHUB_REF == refs/tags/* ]]; then\n            echo \"VERSION=${GITHUB_REF#refs/tags/}\" >> $GITHUB_OUTPUT\n            echo \"IS_RELEASE=true\" >> $GITHUB_OUTPUT\n          else\n            echo \"VERSION=dev-$(git rev-parse --short HEAD)\" >> $GITHUB_OUTPUT\n            echo \"IS_RELEASE=false\" >> $GITHUB_OUTPUT\n          fi\n\n      - name: Create and push multi-arch manifest\n        run: |\n          VERSION=${{ steps.version.outputs.VERSION }}\n          IMAGE=${{ env.IMAGE_PREFIX }}/${{ matrix.image }}\n          \n          docker manifest create ${IMAGE}:${VERSION} \\\n            ${IMAGE}:${VERSION}-amd64 \\\n            ${IMAGE}:${VERSION}-arm64\n          docker manifest push ${IMAGE}:${VERSION}\n          \n          if [[ \"${{ steps.version.outputs.IS_RELEASE }}\" == \"true\" ]]; then\n            docker manifest create ${IMAGE}:latest \\\n              ${IMAGE}:${VERSION}-amd64 \\\n              ${IMAGE}:${VERSION}-arm64\n            docker manifest push ${IMAGE}:latest\n          fi\n\n  # 更新 VERSION 文件\n  update-version:\n    runs-on: ubuntu-latest\n    needs: merge-manifests\n    if: startsWith(github.ref, 'refs/tags/v')\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v4\n        with:\n          fetch-depth: 0  # 获取完整历史，用于判断 tag 所在分支\n          token: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Determine source branch and version\n        id: branch\n        run: |\n          VERSION=\"${GITHUB_REF#refs/tags/}\"\n          \n          # 查找包含此 tag 的分支\n          BRANCHES=$(git branch -r --contains ${{ github.ref_name }})\n          echo \"Branches containing tag: $BRANCHES\"\n          \n          # 判断 tag 来自哪个分支\n          if echo \"$BRANCHES\" | grep -q \"origin/main\"; then\n            TARGET_BRANCH=\"main\"\n            UPDATE_LATEST=\"true\"\n          elif echo \"$BRANCHES\" | grep -q \"origin/dev\"; then\n            TARGET_BRANCH=\"dev\"\n            UPDATE_LATEST=\"false\"\n          else\n            echo \"Warning: Tag not found in main or dev branch, defaulting to main\"\n            TARGET_BRANCH=\"main\"\n            UPDATE_LATEST=\"false\"\n          fi\n          \n          echo \"BRANCH=$TARGET_BRANCH\" >> $GITHUB_OUTPUT\n          echo \"VERSION=$VERSION\" >> $GITHUB_OUTPUT\n          echo \"UPDATE_LATEST=$UPDATE_LATEST\" >> $GITHUB_OUTPUT\n          echo \"Will update VERSION on branch: $TARGET_BRANCH\"\n\n      - name: Checkout target branch\n        run: |\n          git checkout ${{ steps.branch.outputs.BRANCH }}\n\n      - name: Update VERSION file\n        run: |\n          VERSION=\"${{ steps.branch.outputs.VERSION }}\"\n          echo \"$VERSION\" > VERSION\n          echo \"Updated VERSION to $VERSION on branch ${{ steps.branch.outputs.BRANCH }}\"\n\n      - name: Commit and push\n        run: |\n          git config user.name \"github-actions[bot]\"\n          git config user.email \"github-actions[bot]@users.noreply.github.com\"\n          git add VERSION\n          git diff --staged --quiet || git commit -m \"chore: bump version to ${{ steps.branch.outputs.VERSION }}\"\n          git push origin ${{ steps.branch.outputs.BRANCH }}\n"
  },
  {
    "path": ".gitignore",
    "content": "# ============================\n# 操作系统相关文件\n# ============================\n.DS_Store\n.DS_Store?\n._*\n.Spotlight-V100\n.Trashes\nehthumbs.db\nThumbs.db\n\n# ============================\n# 前端 (Next.js/Node.js) 相关\n# ============================\n# 依赖目录\nfront-back/node_modules/\nfront-back/.pnpm-store/\n\n# Next.js 构建产物\nfront-back/.next/\nfront-back/out/\nfront-back/dist/\n\n# 环境变量文件\nfront-back/.env\nfront-back/.env.local\nfront-back/.env.development.local\nfront-back/.env.test.local\nfront-back/.env.production.local\n\n# 运行时和缓存\nfront-back/.turbo/\nfront-back/.swc/\nfront-back/.eslintcache\nfront-back/.tsbuildinfo\n\n# ============================\n# 后端 (Python/Django) 相关\n# ============================\n# Python 虚拟环境\n.venv/\nvenv/\nenv/\nENV/\n\n# Python 编译文件\n*.pyc\n*.pyo\n*.pyd\n__pycache__/\n*.py[cod]\n*$py.class\n\n# Django 相关\nbackend/db.sqlite3\nbackend/db.sqlite3-journal\nbackend/media/\nbackend/staticfiles/\nbackend/.env\nbackend/.env.local\n\n# Python 测试和覆盖率\n.pytest_cache/\n.coverage\nhtmlcov/\n*.cover\n.hypothesis/\n\n# ============================\n# 后端 (Go) 相关\n# ============================\n# 编译产物\nbackend/bin/\nbackend/dist/\nbackend/*.exe\nbackend/*.exe~\nbackend/*.dll\nbackend/*.so\nbackend/*.dylib\n\n# 测试相关\nbackend/*.test\nbackend/*.out\nbackend/*.prof\n\n# Go workspace 文件\nbackend/go.work\nbackend/go.work.sum\n\n# Go 依赖管理\nbackend/vendor/\n\n# ============================\n# IDE 和编辑器相关\n# ============================\n.vscode/\n.idea/\n.cursor/\n.claude/\n.kiro/\n.playwright-mcp/\n*.swp\n*.swo\n*~\n\n# ============================\n# Docker 相关\n# ============================\ndocker/.env\ndocker/.env.local\n\n# SSL 证书和私钥（不应提交）\ndocker/nginx/ssl/*.pem\ndocker/nginx/ssl/*.key\ndocker/nginx/ssl/*.crt\n\n# ============================\n# 日志文件和扫描结果\n# ============================\n*.log\nlogs/\nresults/\n\n# 开发脚本运行时文件（进程 ID 和启动日志）\nbackend/scripts/dev/.pids/\n\n# ============================\n# 临时文件\n# ============================\ntmp/\ntemp/\n.cache/\n\nHGETALL\nKEYS\nvuln_scan/input_endpoints.txt\nopen-in-v0"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\n我们作为成员、贡献者和维护者，承诺让社区中的每个人都能在没有骚扰的环境中参与项目，不论年龄、体型、可见或不可见残障、族裔、性别特征、性别认同和表达、经验水平、教育程度、社会经济地位、国籍、外貌、种族、宗教或性取向。\n\n我们承诺以开放、友善、多元和尊重的方式参与社区建设。\n\n## Our Standards\n\n积极行为示例：\n\n- 以尊重和建设性的方式给出反馈\n- 对不同观点和经验保持开放态度\n- 真诚接受合理批评并持续改进\n- 以社区整体利益为先\n\n不可接受的行为包括：\n\n- 人身攻击、侮辱、歧视或骚扰言论\n- 恶意挑衅、持续性争吵或破坏讨论秩序\n- 发布他人私人信息\n- 其他在专业环境中不适当的行为\n\n## Enforcement Responsibilities\n\n维护者有责任公平、及时地澄清和执行社区行为标准，并可对任何不当行为采取适当且公正的纠正措施。\n\n## Scope\n\n本行为准则适用于所有项目空间，也适用于代表项目参与公共场合的行为，包括使用官方邮箱、社交账号或在活动中作为项目代表发言。\n\n## Enforcement\n\n如果你遇到骚扰、辱骂或其他不可接受的行为，请联系维护者：`poem@admin.com`。\n\n所有投诉都会被审查并得到适当回应。\n\n## Attribution\n\n本行为准则参考 Contributor Covenant，并根据本项目需要进行了简化整理。\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing to XingRin\n\n感谢你愿意为 XingRin 做出贡献。\n\n## 贡献方式\n\n- 提交 Bug 报告\n- 提出功能建议或产品想法\n- 改进文档、安装流程和示例\n- 提交代码修复或新功能 Pull Request\n\n## 开始之前\n\n在开始较大改动前，建议先创建 Issue 说明背景、目标和实现方向，避免重复工作。\n\n对于小修复、文档修正和明显 Bug，也欢迎直接提交 Pull Request。\n\n## Pull Request 建议\n\n- 保持改动聚焦，避免把无关修改混在一个 PR 中\n- 尽量补充必要的说明、截图或复现步骤\n- 如果涉及安全相关行为，请明确测试范围和授权前提\n- 与现有代码风格、命名和目录结构保持一致\n\n## Issue 建议\n\n提交 Issue 时，建议附上：\n\n- 使用场景\n- 复现步骤\n- 实际结果与预期结果\n- 日志、截图或错误信息\n- 运行环境信息\n\n## 许可证约定\n\n提交 Pull Request 即表示你确认：\n\n- 你有权提交这些代码、文档或资源\n- 你的贡献将以本仓库当前使用的 [MIT License](./LICENSE) 发布\n\n## 社区协作\n\n参与社区前，请先阅读 [Code of Conduct](./CODE_OF_CONDUCT.md)。\n\n感谢你的时间、想法和贡献。\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2025-2026 yyhuni\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "<h1 align=\"center\">XingRin - 星环</h1>\n\n<p align=\"center\">\n  <b>开源攻击面管理平台 (ASM) | 面向授权安全测试与防御研究的资产发现与安全自动化系统</b>\n</p>\n\n<p align=\"center\">\n  <b>持续维护中</b>：由于现在架构，代码对于ai开发来说，演化进度难度很高，代码原生分布式能力弱，为了适应项目的长期发展，正在进行新一代架构重构，后端采用 Go 语言为核心，其强大的分布式能力是目前最优解，当前版本暂停维护，Issue、建议和 PR 都欢迎提交，旧项目的所有建议，都会逐步迁移到新版本。预计5-6月份上线新仓库，欢迎入群等待。\n</p>\n\n\n<p align=\"center\">\n  <a href=\"https://github.com/yyhuni/xingrin/stargazers\"><img src=\"https://img.shields.io/github/stars/yyhuni/xingrin?style=flat-square&logo=github\" alt=\"GitHub stars\"></a>\n  <a href=\"https://github.com/yyhuni/xingrin/network/members\"><img src=\"https://img.shields.io/github/forks/yyhuni/xingrin?style=flat-square&logo=github\" alt=\"GitHub forks\"></a>\n  <a href=\"https://github.com/yyhuni/xingrin/issues\"><img src=\"https://img.shields.io/github/issues/yyhuni/xingrin?style=flat-square&logo=github\" alt=\"GitHub issues\"></a>\n  <a href=\"https://github.com/yyhuni/xingrin/blob/main/LICENSE\"><img src=\"https://img.shields.io/github/license/yyhuni/xingrin?style=flat-square\" alt=\"License\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"#功能特性\">功能特性</a> •\n  <a href=\"#全局资产搜索\">资产搜索</a> •\n  <a href=\"#快速开始\">快速开始</a> •\n  <a href=\"#文档\">文档</a> •\n  <a href=\"#反馈与贡献\">反馈与贡献</a>\n</p>\n\n<p align=\"center\">\n  <sub>关键词: Open Source | ASM | 攻击面管理 | 授权安全测试 | 防御研究 | 资产发现 | 资产搜索 | 安全自动化 | 风险检测 | 子域名枚举 | EASM</sub>\n</p>\n\n---\n## 在线 Demo\n\n **[https://xingrin.vercel.app/](https://xingrin.vercel.app/)**\n\n> 仅用于 UI 展示，未接入后端数据库\n\n> XingRin 聚焦 **自有资产管理、授权安全测试与防御研究** 场景，帮助安全团队对互联网暴露面进行持续发现、监控与分析。\n\n---\n\n<p align=\"center\">\n  <b>现代化 UI</b>\n</p>\n\n<p align=\"center\">\n  <img src=\"docs/screenshots/light.png\" alt=\"Light Mode\" width=\"24%\">\n  <img src=\"docs/screenshots/bubblegum.png\" alt=\"Bubblegum\" width=\"24%\">\n  <img src=\"docs/screenshots/cosmic-night.png\" alt=\"Cosmic Night\" width=\"24%\">\n  <img src=\"docs/screenshots/quantum-rose.png\" alt=\"Quantum Rose\" width=\"24%\">\n</p>\n\n## 文档\n\n- [技术文档](./docs/README.md) - 技术文档导航（持续完善中）\n- [快速开始](./docs/quick-start.md) - 一键安装和部署指南\n- [版本管理](./docs/version-management.md) - Git Tag 驱动的自动化版本管理系统\n- [安全检测模板架构](./docs/nuclei-template-architecture.md) - 检测模板仓库的存储与同步\n- [字典文件架构](./docs/wordlist-architecture.md) - 字典文件的存储与同步\n- [扫描流程架构](./docs/scan-flow-architecture.md) - 完整扫描流程与工具编排\n- [贡献指南](./CONTRIBUTING.md) - Issue、Pull Request 与贡献约定\n- [安全策略](./SECURITY.md) - 漏洞报告与安全响应流程\n- [行为准则](./CODE_OF_CONDUCT.md) - 社区协作行为规范\n\n\n---\n\n## 功能特性\n\n### 扫描能力\n\n| 功能 | 状态 | 工具 | 说明 |\n|------|------|------|------|\n| 子域名扫描 | 已完成 | Subfinder, Amass, PureDNS | 被动收集 + 主动枚举，聚合 50+ 数据源 |\n| 端口扫描 | 已完成 | Naabu | 自定义端口范围 |\n| 站点发现 | 已完成 | HTTPX | HTTP 探测，自动获取标题、状态码、技术栈 |\n| 指纹识别 | 已完成 | XingFinger | 2.7W+ 指纹规则，多源指纹库 |\n| URL 收集 | 已完成 | Waymore, Katana | 历史数据 + 主动爬取 |\n| 目录扫描 | 已完成 | FFUF | 高效探测，智能字典 |\n| 安全检测 | 已完成 | Nuclei, Dalfox | 9000+ 检测模板，覆盖常见 Web 风险与配置问题 |\n| 站点截图 | 已完成 | Playwright | WebP 高压缩存储 |\n\n### 平台能力\n\n| 功能 | 状态 | 说明 |\n|------|------|------|\n| 目标管理 | 已完成 | 多层级组织，支持域名/IP 目标 |\n| 资产快照 | 已完成 | 扫描结果对比，追踪资产变化 |\n| 黑名单过滤 | 已完成 | 全局 + Target 级，支持通配符/CIDR |\n| 定时任务 | 已完成 | Cron 表达式，自动化周期扫描 |\n| 分布式扫描 | 已完成 | 多 Worker 节点，负载感知调度 |\n| 全局搜索 | 已完成 | 表达式语法，多字段组合查询 |\n| 通知推送 | 已完成 | 企业微信、Telegram、Discord |\n| API 密钥管理 | 已完成 | 可视化配置各数据源 API Key |\n\n### 扫描流程架构\n\n完整的扫描流程包括：子域名发现、端口扫描、站点发现、指纹识别、URL 收集、目录扫描、安全检测等阶段\n\n```mermaid\nflowchart LR\n    START[\"开始扫描\"]\n    \n    subgraph STAGE1[\"阶段 1: 资产发现\"]\n        direction TB\n        SUB[\"子域名发现<br/>subfinder, amass, puredns\"]\n        PORT[\"端口扫描<br/>naabu\"]\n        SITE[\"站点识别<br/>httpx\"]\n        FINGER[\"指纹识别<br/>xingfinger\"]\n        SUB --> PORT --> SITE --> FINGER\n    end\n    \n    subgraph STAGE2[\"阶段 2: 深度分析\"]\n        direction TB\n        URL[\"URL 收集<br/>waymore, katana\"]\n        DIR[\"目录扫描<br/>ffuf\"]\n        SCREENSHOT[\"站点截图<br/>playwright\"]\n    end\n    \n    subgraph STAGE3[\"阶段 3: 安全检测\"]\n        VULN[\"安全检测<br/>nuclei, dalfox\"]\n    end\n    \n    FINISH[\"扫描完成\"]\n    \n    START --> STAGE1\n    FINGER --> STAGE2\n    STAGE2 --> STAGE3\n    STAGE3 --> FINISH\n    \n    style START fill:#34495e,stroke:#2c3e50,stroke-width:2px,color:#fff\n    style FINISH fill:#27ae60,stroke:#229954,stroke-width:2px,color:#fff\n    style STAGE1 fill:#3498db,stroke:#2980b9,stroke-width:2px,color:#fff\n    style STAGE2 fill:#9b59b6,stroke:#8e44ad,stroke-width:2px,color:#fff\n    style STAGE3 fill:#e67e22,stroke:#d35400,stroke-width:2px,color:#fff\n    style SUB fill:#5dade2,stroke:#3498db,stroke-width:1px,color:#fff\n    style PORT fill:#5dade2,stroke:#3498db,stroke-width:1px,color:#fff\n    style SITE fill:#5dade2,stroke:#3498db,stroke-width:1px,color:#fff\n    style FINGER fill:#5dade2,stroke:#3498db,stroke-width:1px,color:#fff\n    style URL fill:#bb8fce,stroke:#9b59b6,stroke-width:1px,color:#fff\n    style DIR fill:#bb8fce,stroke:#9b59b6,stroke-width:1px,color:#fff\n    style SCREENSHOT fill:#bb8fce,stroke:#9b59b6,stroke-width:1px,color:#fff\n    style VULN fill:#f0b27a,stroke:#e67e22,stroke-width:1px,color:#fff\n```\n\n详细说明请查看 [扫描流程架构文档](./docs/scan-flow-architecture.md)\n\n### 分布式架构\n- **多节点扫描** - 支持部署多个 Worker 节点，横向扩展扫描能力\n- **本地节点** - 零配置，安装即自动注册本地 Docker Worker\n- **远程节点** - SSH 一键部署远程 VPS 作为扫描节点\n- **负载感知调度** - 实时感知节点负载，自动分发任务到最优节点\n- **节点监控** - 实时心跳检测，CPU/内存/磁盘状态监控\n- **断线重连** - 节点离线自动检测，恢复后自动重新接入\n\n```mermaid\nflowchart TB\n    subgraph MASTER[\"主服务器 (Master Server)\"]\n        direction TB\n        \n        REDIS[\"Redis 负载缓存\"]\n        \n        subgraph SCHEDULER[\"任务调度器 (Task Distributor)\"]\n            direction TB\n            SUBMIT[\"接收扫描任务\"]\n            SELECT[\"负载感知选择\"]\n            DISPATCH[\"智能分发\"]\n            \n            SUBMIT --> SELECT\n            SELECT --> DISPATCH\n        end\n        \n        REDIS -.负载数据.-> SELECT\n    end\n    \n    subgraph WORKERS[\"Worker 节点集群\"]\n        direction TB\n        \n        W1[\"Worker 1 (本地)<br/>CPU: 45% | MEM: 60%\"]\n        W2[\"Worker 2 (远程)<br/>CPU: 30% | MEM: 40%\"]\n        W3[\"Worker N (远程)<br/>CPU: 90% | MEM: 85%\"]\n    end\n    \n    DISPATCH -->|任务分发| W1\n    DISPATCH -->|任务分发| W2\n    DISPATCH -->|高负载跳过| W3\n    \n    W1 -.心跳上报.-> REDIS\n    W2 -.心跳上报.-> REDIS\n    W3 -.心跳上报.-> REDIS\n```\n\n### 全局资产搜索\n- **多类型搜索** - 支持 Website 和 Endpoint 两种资产类型\n- **表达式语法** - 支持 `=`（模糊）、`==`（精确）、`!=`（不等于）操作符\n- **逻辑组合** - 支持 `&&` (AND) 和 `||` (OR) 逻辑组合\n- **多字段查询** - 支持 host、url、title、tech、status、body、header 字段\n- **CSV 导出** - 流式导出全部搜索结果，无数量限制\n\n#### 搜索语法示例\n\n```bash\n# 基础搜索\nhost=\"api\"                    # host 包含 \"api\"\nstatus==\"200\"                 # 状态码精确等于 200\ntech=\"nginx\"                  # 技术栈包含 nginx\n\n# 组合搜索\nhost=\"api\" && status==\"200\"   # host 包含 api 且状态码为 200\ntech=\"vue\" || tech=\"react\"    # 技术栈包含 vue 或 react\n\n# 复杂查询\nhost=\"admin\" && tech=\"php\" && status==\"200\"\nurl=\"/api/v1\" && status!=\"404\"\n```\n\n### 可视化界面\n- **数据统计** - 资产/漏洞统计仪表盘\n- **实时通知** - WebSocket 消息推送\n- **通知推送** - 实时企业微信，tg，discard消息推送服务\n\n---\n\n## 快速开始\n\n### 环境要求\n\n- **操作系统**: Ubuntu 20.04+ / Debian 11+ \n- **系统架构**: AMD64 (x86_64) / ARM64 (aarch64)\n- **硬件**: 2核 4G 内存起步，20GB+ 磁盘空间\n\n### 一键安装\n\n```bash\n# 克隆项目\ngit clone https://github.com/yyhuni/xingrin.git\ncd xingrin\n\n# 安装并启动（生产模式）\nsudo ./install.sh\n\n# 中国大陆用户推荐使用镜像加速（第三方加速服务可能会失效，不保证长期可用）\nsudo ./install.sh --mirror\n```\n\n> **--mirror 参数说明**\n> - 自动配置 Docker 镜像加速（国内镜像源）\n> - 加速 Git 仓库克隆（Nuclei 模板等）\n\n### 访问服务\n\n- **Web 界面**: `https://ip:8083` \n- **默认账号**: admin / admin（首次登录后请修改密码）\n\n### 常用命令\n\n```bash\n# 启动服务\nsudo ./start.sh\n\n# 停止服务\nsudo ./stop.sh\n\n# 重启服务\nsudo ./restart.sh\n\n# 卸载\nsudo ./uninstall.sh\n```\n\n## 反馈与贡献\n\n- **发现 Bug、想法或改进建议**：欢迎提交 [Issue](https://github.com/yyhuni/xingrin/issues)\n- **想直接参与开发**：欢迎发起 Pull Request，提交前建议先阅读 [贡献指南](./CONTRIBUTING.md)\n- **安全问题反馈**：请优先阅读 [安全策略](./SECURITY.md)，避免公开披露未修复漏洞\n\n## 联系\n- 微信公众号: **塔罗安全学苑**\n- 微信群去公众号底下的菜单，有个交流群，点击就可以看到了，链接过期可以私信我拉你\n\n<img src=\"docs/wechat-qrcode.png\" alt=\"微信公众号\" width=\"200\">\n\n### 关注公众号免费领取指纹库\n\n| 指纹库 | 数量 |\n|--------|------|\n| ehole.json | 21,977 |\n| ARL.yaml | 9,264 |\n| goby.json | 7,086 |\n| FingerprintHub.json | 3,147 |\n\n> 关注公众号回复「指纹」即可获取\n\n## 赞助支持\n\n如果这个项目对你有帮助，谢谢请我能喝杯蜜雪冰城，你的star和赞助是我免费更新的动力\n\n<p>\n  <img src=\"docs/wx_pay.jpg\" alt=\"微信支付\" width=\"200\">\n  <img src=\"docs/zfb_pay.jpg\" alt=\"支付宝\" width=\"200\">\n</p>\n\n\n\n## 安全与合规说明\n\n**重要：请在使用前仔细阅读**\n\n1. 本项目面向**授权安全测试**、**防御研究**与**自有资产攻击面管理**场景\n2. 使用者必须确保已获得目标系统、数据和环境的**明确合法授权**\n3. 请勿将本项目用于任何未经授权的扫描、入侵、破坏或其他违法行为\n4. 使用者应自行确认其行为符合所在地区法律法规、合同义务和组织政策\n5. 项目维护者**不对滥用行为负责**\n\n使用本工具即表示您同意：\n- 仅在合法授权范围内使用\n- 遵守所在地区的法律法规\n- 承担因滥用产生的一切后果\n\n## Star History\n\n如果这个项目对你有帮助，请给一个 Star 支持一下！\n\n[![Star History Chart](https://api.star-history.com/svg?repos=yyhuni/xingrin&type=Date)](https://star-history.com/#yyhuni/xingrin&Date)\n\n## 许可证\n\n本项目采用 [MIT License](LICENSE)。\n\nMIT 许可证允许商业和非商业使用、修改、分发与私有部署，但要求保留原始版权和许可证声明。\n\n请注意：开源许可证授予的是代码使用、修改和分发权限，并不构成对任何未经授权安全测试或违法行为的许可。使用者仍需自行确保其用途合法、合规且已获得明确授权。\n"
  },
  {
    "path": "SECURITY.md",
    "content": "# Security Policy\n\n## Supported Versions\n\n安全修复优先面向以下范围：\n\n| Version | Supported |\n| --- | --- |\n| `main` 最新提交 | ✅ |\n| 最新稳定发布 | ✅ |\n| 历史旧版本 | ⚠️ 仅在风险较高且易于回补时评估 |\n\n## Reporting a Vulnerability\n\n如果你发现了潜在安全漏洞，请不要直接公开提交未修复细节。\n\n建议的报告方式：\n\n1. 通过 GitHub 私密安全报告功能提交（如果仓库已开启）\n2. 或发送邮件至 `poem@admin.com`\n\n提交时建议包含：\n\n- 漏洞类型与影响范围\n- 复现步骤或最小 PoC\n- 受影响版本、环境与配置\n- 可能的修复建议（如果有）\n\n## Response Process\n\n- 我会尽快确认收到报告\n- 我会评估影响范围、可复现性和修复优先级\n- 修复完成后，会在合适时间通过提交记录、Release 或公告说明\n\n感谢你以负责任的方式帮助改进 XingRin 的安全性。\n"
  },
  {
    "path": "VERSION",
    "content": "v1.5.8\n"
  },
  {
    "path": "backend/.gitignore",
    "content": "# Python\n__pycache__/\n*.py[cod]\n*$py.class\n*.so\n.Python\n*.egg-info/\ndist/\nbuild/\n.hypothesis/  # Hypothesis 属性测试缓存\n\n# 虚拟环境\nvenv/\nenv/\nENV/\n\n# Django\n*.log\ndb.sqlite3\ndb.sqlite3-journal\n/media\n/staticfiles\n\n# 运行时文件（Flower、PID）\n/var/*\n!/var/.gitkeep\nflower.db\npids/\nscript/dev/.pids/\n\n# 扫描结果和日志（后端数据）\n/results/*\n!/results/.gitkeep\n/logs/*\n!/logs/.gitkeep\n\n# 环境变量（敏感信息）\n.env\n.env.development\n.env.production\n.env.staging\n# 只提交模板文件：.env.*.example\n\n# IDE\n.vscode/\n.idea/\n*.swp\n*.swo\n*~\n\n# macOS\n.DS_Store\n"
  },
  {
    "path": "backend/apps/__init__.py",
    "content": ""
  },
  {
    "path": "backend/apps/asset/__init__.py",
    "content": ""
  },
  {
    "path": "backend/apps/asset/apps.py",
    "content": "from django.apps import AppConfig\n\n\nclass AssetConfig(AppConfig):\n    default_auto_field = 'django.db.models.BigAutoField'\n    name = 'apps.asset'\n"
  },
  {
    "path": "backend/apps/asset/dtos/__init__.py",
    "content": "\"\"\"Asset DTOs - 数据传输对象\"\"\"\n\n# 资产模块 DTOs\nfrom .asset import (\n    SubdomainDTO,\n    WebSiteDTO,\n    IPAddressDTO,\n    DirectoryDTO,\n    PortDTO,\n    EndpointDTO,\n)\n\n# 快照模块 DTOs\nfrom .snapshot import (\n    SubdomainSnapshotDTO,\n)\n\n__all__ = [\n    # 资产模块\n    'SubdomainDTO',\n    'WebSiteDTO',\n    'IPAddressDTO',\n    'DirectoryDTO',\n    'PortDTO',\n    'EndpointDTO',\n    # 快照模块\n    'SubdomainSnapshotDTO',\n]\n"
  },
  {
    "path": "backend/apps/asset/dtos/asset/__init__.py",
    "content": "\"\"\"Asset DTOs - 数据传输对象\"\"\"\n\nfrom .subdomain_dto import SubdomainDTO\nfrom .ip_address_dto import IPAddressDTO\nfrom .port_dto import PortDTO\nfrom .website_dto import WebSiteDTO\nfrom .directory_dto import DirectoryDTO\nfrom .host_port_mapping_dto import HostPortMappingDTO\nfrom .endpoint_dto import EndpointDTO\nfrom .vulnerability_dto import VulnerabilityDTO\n\n__all__ = [\n    'SubdomainDTO',\n    'IPAddressDTO',\n    'PortDTO',\n    'WebSiteDTO',\n    'DirectoryDTO',\n    'HostPortMappingDTO',\n    'EndpointDTO',\n    'VulnerabilityDTO',\n]\n"
  },
  {
    "path": "backend/apps/asset/dtos/asset/directory_dto.py",
    "content": "\"\"\"Directory DTO\"\"\"\n\nfrom dataclasses import dataclass\nfrom typing import Optional\n\n\n@dataclass\nclass DirectoryDTO:\n    \"\"\"目录数据传输对象\"\"\"\n    target_id: int\n    url: str\n    status: Optional[int] = None\n    content_length: Optional[int] = None\n    words: Optional[int] = None\n    lines: Optional[int] = None\n    content_type: str = ''\n    duration: Optional[int] = None\n"
  },
  {
    "path": "backend/apps/asset/dtos/asset/endpoint_dto.py",
    "content": "\"\"\"Endpoint DTO\"\"\"\n\nfrom dataclasses import dataclass\nfrom typing import Optional, List\n\n\n@dataclass\nclass EndpointDTO:\n    \"\"\"端点 DTO - 资产表数据传输对象\"\"\"\n    target_id: int\n    url: str\n    host: Optional[str] = None\n    title: Optional[str] = None\n    status_code: Optional[int] = None\n    content_length: Optional[int] = None\n    webserver: Optional[str] = None\n    response_body: Optional[str] = None\n    content_type: Optional[str] = None\n    tech: Optional[List[str]] = None\n    vhost: Optional[bool] = None\n    location: Optional[str] = None\n    matched_gf_patterns: Optional[List[str]] = None\n    response_headers: Optional[str] = None\n    \n    def __post_init__(self):\n        if self.tech is None:\n            self.tech = []\n        if self.matched_gf_patterns is None:\n            self.matched_gf_patterns = []\n"
  },
  {
    "path": "backend/apps/asset/dtos/asset/host_port_mapping_dto.py",
    "content": "\"\"\"HostPortMapping DTO\"\"\"\n\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass HostPortMappingDTO:\n    \"\"\"主机端口映射 DTO（资产表）\"\"\"\n    target_id: int\n    host: str\n    ip: str\n    port: int\n"
  },
  {
    "path": "backend/apps/asset/dtos/asset/ip_address_dto.py",
    "content": "\"\"\"IPAddress DTO\"\"\"\n\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass IPAddressDTO:\n    \"\"\"\n    IP地址数据传输对象\n    \n    只包含 IP 自身的信息，不包含关联关系。\n    关联关系通过 SubdomainIPAssociationDTO 管理。\n    \"\"\"\n    ip: str\n    protocol_version: str = ''\n    is_private: bool = False\n    reverse_pointer: str = ''\n"
  },
  {
    "path": "backend/apps/asset/dtos/asset/port_dto.py",
    "content": "\"\"\"Port DTO\"\"\"\n\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass PortDTO:\n    \"\"\"端口数据传输对象\"\"\"\n    ip_address_id: int\n    number: int\n    service_name: str = ''\n    target_id: int = None\n    scan_id: int = None\n"
  },
  {
    "path": "backend/apps/asset/dtos/asset/subdomain_dto.py",
    "content": "\"\"\"Subdomain DTO\"\"\"\n\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass SubdomainDTO:\n    \"\"\"\n    子域名 DTO（纯资产表）\n    \n    用于传递子域名资产数据，只包含资产本身的信息。\n    扫描相关信息存储在快照表中。\n    \"\"\"\n    name: str\n    target_id: int  # 必填：子域名必须属于某个目标\n"
  },
  {
    "path": "backend/apps/asset/dtos/asset/vulnerability_dto.py",
    "content": "\"\"\"Vulnerability DTO\"\"\"\n\nfrom dataclasses import dataclass, field\nfrom typing import Optional, Dict, Any\nfrom decimal import Decimal\n\n\n@dataclass\nclass VulnerabilityDTO:\n    \"\"\"漏洞数据传输对象（资产表用）\"\"\"\n    target_id: int\n    url: str\n    vuln_type: str\n    severity: str\n    source: str = \"\"\n    cvss_score: Optional[Decimal] = None\n    description: str = \"\"\n    raw_output: Dict[str, Any] = field(default_factory=dict)\n"
  },
  {
    "path": "backend/apps/asset/dtos/asset/website_dto.py",
    "content": "\"\"\"WebSite DTO\"\"\"\n\nfrom dataclasses import dataclass\nfrom typing import List, Optional\n\n\n@dataclass\nclass WebSiteDTO:\n    \"\"\"网站数据传输对象\"\"\"\n    target_id: int\n    url: str\n    host: str = ''\n    title: str = ''\n    status_code: Optional[int] = None\n    content_length: Optional[int] = None\n    location: str = ''\n    webserver: str = ''\n    content_type: str = ''\n    tech: List[str] = None\n    response_body: str = ''\n    vhost: Optional[bool] = None\n    created_at: str = None\n    response_headers: str = ''\n    \n    def __post_init__(self):\n        if self.tech is None:\n            self.tech = []\n"
  },
  {
    "path": "backend/apps/asset/dtos/snapshot/__init__.py",
    "content": "\"\"\"Snapshot DTOs\"\"\"\n\nfrom .subdomain_snapshot_dto import SubdomainSnapshotDTO\nfrom .host_port_mapping_snapshot_dto import HostPortMappingSnapshotDTO\nfrom .website_snapshot_dto import WebsiteSnapshotDTO\nfrom .directory_snapshot_dto import DirectorySnapshotDTO\nfrom .endpoint_snapshot_dto import EndpointSnapshotDTO\nfrom .vulnerability_snapshot_dto import VulnerabilitySnapshotDTO\n\n__all__ = [\n    'SubdomainSnapshotDTO',\n    'HostPortMappingSnapshotDTO',\n    'WebsiteSnapshotDTO',\n    'DirectorySnapshotDTO',\n    'EndpointSnapshotDTO',\n    'VulnerabilitySnapshotDTO',\n]\n"
  },
  {
    "path": "backend/apps/asset/dtos/snapshot/directory_snapshot_dto.py",
    "content": "\"\"\"Directory Snapshot DTO\"\"\"\n\nfrom dataclasses import dataclass\nfrom typing import Optional\nfrom apps.asset.dtos.asset import DirectoryDTO\n\n\n@dataclass\nclass DirectorySnapshotDTO:\n    \"\"\"\n    目录快照数据传输对象\n    \n    用于保存扫描过程中发现的目录信息到快照表\n    \n    注意：target_id 只用于传递数据和转换为资产 DTO，不会保存到快照表中。\n    快照只属于 scan。\n    \"\"\"\n    scan_id: int\n    target_id: int  # 仅用于传递数据，不保存到数据库\n    url: str\n    status: Optional[int] = None\n    content_length: Optional[int] = None\n    words: Optional[int] = None\n    lines: Optional[int] = None\n    content_type: str = ''\n    duration: Optional[int] = None\n    \n    def to_asset_dto(self) -> DirectoryDTO:\n        \"\"\"\n        转换为资产 DTO（用于同步到资产表）\n        \n        注意：去除 scan_id 字段，因为资产表不需要\n        \n        Returns:\n            DirectoryDTO: 资产表 DTO\n        \"\"\"\n        return DirectoryDTO(\n            target_id=self.target_id,\n            url=self.url,\n            status=self.status,\n            content_length=self.content_length,\n            words=self.words,\n            lines=self.lines,\n            content_type=self.content_type,\n            duration=self.duration\n        )\n"
  },
  {
    "path": "backend/apps/asset/dtos/snapshot/endpoint_snapshot_dto.py",
    "content": "\"\"\"EndpointSnapshot DTO\"\"\"\n\nfrom dataclasses import dataclass\nfrom typing import List, Optional\n\n\n@dataclass\nclass EndpointSnapshotDTO:\n    \"\"\"\n    端点快照 DTO\n    \n    注意：target_id 只用于传递数据和转换为资产 DTO，不会保存到快照表中。\n    快照只属于 scan。\n    \"\"\"\n    scan_id: int\n    target_id: int  # 必填，用于同步到资产表\n    url: str\n    host: str = ''  # 主机名（域名或IP地址）\n    title: str = ''\n    status_code: Optional[int] = None\n    content_length: Optional[int] = None\n    location: str = ''\n    webserver: str = ''\n    content_type: str = ''\n    tech: List[str] = None\n    response_body: str = ''\n    vhost: Optional[bool] = None\n    matched_gf_patterns: List[str] = None\n    response_headers: str = ''\n    \n    def __post_init__(self):\n        if self.tech is None:\n            self.tech = []\n        if self.matched_gf_patterns is None:\n            self.matched_gf_patterns = []\n    \n    def to_asset_dto(self):\n        \"\"\"\n        转换为资产 DTO（用于同步到资产表）\n        \n        Returns:\n            EndpointDTO: 资产表 DTO（移除 scan_id）\n        \"\"\"\n        from apps.asset.dtos.asset import EndpointDTO\n        \n        return EndpointDTO(\n            target_id=self.target_id,\n            url=self.url,\n            host=self.host,\n            title=self.title,\n            status_code=self.status_code,\n            content_length=self.content_length,\n            webserver=self.webserver,\n            response_body=self.response_body,\n            content_type=self.content_type,\n            tech=self.tech if self.tech else [],\n            vhost=self.vhost,\n            location=self.location,\n            matched_gf_patterns=self.matched_gf_patterns if self.matched_gf_patterns else [],\n            response_headers=self.response_headers,\n        )\n"
  },
  {
    "path": "backend/apps/asset/dtos/snapshot/host_port_mapping_snapshot_dto.py",
    "content": "\"\"\"HostPortMappingSnapshot DTO\"\"\"\n\nfrom dataclasses import dataclass\nfrom typing import Optional\n\n\n@dataclass\nclass HostPortMappingSnapshotDTO:\n    \"\"\"主机端口映射快照 DTO\"\"\"\n    scan_id: int\n    host: str\n    ip: str\n    port: int\n    target_id: Optional[int] = None  # 冗余字段，用于同步到资产表\n    \n    def to_asset_dto(self):\n        \"\"\"\n        转换为资产 DTO（用于同步到资产表）\n        \n        Returns:\n            HostPortMappingDTO: 资产表 DTO（移除 scan_id）\n        \"\"\"\n        from apps.asset.dtos.asset import HostPortMappingDTO\n        \n        if self.target_id is None:\n            raise ValueError(\"target_id 不能为 None，无法同步到资产表\")\n        \n        return HostPortMappingDTO(\n            target_id=self.target_id,\n            host=self.host,\n            ip=self.ip,\n            port=self.port\n        )\n"
  },
  {
    "path": "backend/apps/asset/dtos/snapshot/subdomain_snapshot_dto.py",
    "content": "\"\"\"SubdomainSnapshot DTO\"\"\"\n\nfrom dataclasses import dataclass\nfrom typing import TYPE_CHECKING\n\nif TYPE_CHECKING:\n    from apps.asset.dtos import SubdomainDTO\n\n\n@dataclass\nclass SubdomainSnapshotDTO:\n    \"\"\"\n    子域名快照 DTO\n    \n    用于传递快照数据，包含完整的业务上下文信息。\n    快照表记录每次扫描的历史数据。\n    \"\"\"\n    name: str\n    scan_id: int  # 必填：快照必须关联扫描任务\n    target_id: int  # 必填：目标ID（用于转换为资产 DTO）\n    \n    def to_asset_dto(self) -> 'SubdomainDTO':\n        \"\"\"\n        转换为资产 DTO（用于保存到资产表）\n        \n        Returns:\n            SubdomainDTO: 资产 DTO（不包含 scan_id）\n        \n        Note:\n            资产表只存储核心数据，扫描上下文（scan_id）不保存到资产表。\n            target_id 已经包含在 DTO 中，无需额外传参。\n        \"\"\"\n        from apps.asset.dtos import SubdomainDTO\n        return SubdomainDTO(name=self.name, target_id=self.target_id)\n"
  },
  {
    "path": "backend/apps/asset/dtos/snapshot/vulnerability_snapshot_dto.py",
    "content": "\"\"\"VulnerabilitySnapshot DTO\"\"\"\n\nfrom dataclasses import dataclass, field\nfrom typing import Optional, Dict, Any\nfrom decimal import Decimal\n\n\n@dataclass\nclass VulnerabilitySnapshotDTO:\n    \"\"\"漏洞快照 DTO\n\n    对应 VulnerabilitySnapshot 模型，用于在 Service/Task 之间传递漏洞结果数据。\n\n    设计与其他快照 DTO 一致：\n    - scan_id: 只属于快照表\n    - target_id: 只用于转换为资产 DTO，不直接存入快照表\n    \"\"\"\n\n    scan_id: int\n    target_id: int  # 仅用于传递数据和生成资产 DTO，不保存到快照表\n    url: str\n    vuln_type: str\n    severity: str\n    source: str = \"\"\n    cvss_score: Optional[Decimal] = None\n    description: str = \"\"\n    raw_output: Dict[str, Any] = field(default_factory=dict)\n\n    def to_asset_dto(self):\n        \"\"\"转换为漏洞资产 DTO（用于同步到 Vulnerability 表）。\"\"\"\n        from apps.asset.dtos.asset import VulnerabilityDTO\n\n        return VulnerabilityDTO(\n            target_id=self.target_id,\n            url=self.url,\n            vuln_type=self.vuln_type,\n            severity=self.severity,\n            source=self.source,\n            cvss_score=self.cvss_score,\n            description=self.description,\n            raw_output=self.raw_output,\n        )\n"
  },
  {
    "path": "backend/apps/asset/dtos/snapshot/website_snapshot_dto.py",
    "content": "\"\"\"WebsiteSnapshot DTO\"\"\"\n\nfrom dataclasses import dataclass\nfrom typing import List, Optional\n\n\n@dataclass\nclass WebsiteSnapshotDTO:\n    \"\"\"\n    网站快照 DTO\n    \n    注意：target_id 只用于传递数据和转换为资产 DTO，不会保存到快照表中。\n    快照只属于 scan，target 信息通过 scan.target 获取。\n    \"\"\"\n    scan_id: int\n    target_id: int  # 必填，用于同步到资产表\n    url: str\n    host: str\n    title: str = ''\n    status_code: Optional[int] = None  # 统一命名：status -> status_code\n    content_length: Optional[int] = None\n    location: str = ''\n    webserver: str = ''  # 统一命名：web_server -> webserver\n    content_type: str = ''\n    tech: List[str] = None\n    response_body: str = ''\n    vhost: Optional[bool] = None\n    response_headers: str = ''\n    \n    def __post_init__(self):\n        if self.tech is None:\n            self.tech = []\n    \n    def to_asset_dto(self):\n        \"\"\"\n        转换为资产 DTO（用于同步到资产表）\n        \n        Returns:\n            WebSiteDTO: 资产表 DTO（移除 scan_id）\n        \"\"\"\n        from apps.asset.dtos.asset import WebSiteDTO\n        \n        return WebSiteDTO(\n            target_id=self.target_id,\n            url=self.url,\n            host=self.host,\n            title=self.title,\n            status_code=self.status_code,\n            content_length=self.content_length,\n            location=self.location,\n            webserver=self.webserver,\n            content_type=self.content_type,\n            tech=self.tech if self.tech else [],\n            response_body=self.response_body,\n            vhost=self.vhost,\n            response_headers=self.response_headers,\n        )\n"
  },
  {
    "path": "backend/apps/asset/migrations/0001_initial.py",
    "content": "# Generated by Django 5.2.7 on 2026-01-06 00:55\n\nimport django.contrib.postgres.fields\nimport django.contrib.postgres.indexes\nimport django.core.validators\nimport django.db.models.deletion\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    initial = True\n\n    dependencies = [\n        ('scan', '0001_initial'),\n        ('targets', '0001_initial'),\n    ]\n\n    operations = [\n        migrations.CreateModel(\n            name='AssetStatistics',\n            fields=[\n                ('id', models.AutoField(primary_key=True, serialize=False)),\n                ('total_targets', models.IntegerField(default=0, help_text='目标总数')),\n                ('total_subdomains', models.IntegerField(default=0, help_text='子域名总数')),\n                ('total_ips', models.IntegerField(default=0, help_text='IP地址总数')),\n                ('total_endpoints', models.IntegerField(default=0, help_text='端点总数')),\n                ('total_websites', models.IntegerField(default=0, help_text='网站总数')),\n                ('total_vulns', models.IntegerField(default=0, help_text='漏洞总数')),\n                ('total_assets', models.IntegerField(default=0, help_text='总资产数（子域名+IP+端点+网站）')),\n                ('prev_targets', models.IntegerField(default=0, help_text='上次目标总数')),\n                ('prev_subdomains', models.IntegerField(default=0, help_text='上次子域名总数')),\n                ('prev_ips', models.IntegerField(default=0, help_text='上次IP地址总数')),\n                ('prev_endpoints', models.IntegerField(default=0, help_text='上次端点总数')),\n                ('prev_websites', models.IntegerField(default=0, help_text='上次网站总数')),\n                ('prev_vulns', models.IntegerField(default=0, help_text='上次漏洞总数')),\n                ('prev_assets', models.IntegerField(default=0, help_text='上次总资产数')),\n                ('updated_at', models.DateTimeField(auto_now=True, help_text='最后更新时间')),\n            ],\n            options={\n                'verbose_name': '资产统计',\n                'verbose_name_plural': '资产统计',\n                'db_table': 'asset_statistics',\n            },\n        ),\n        migrations.CreateModel(\n            name='StatisticsHistory',\n            fields=[\n                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('date', models.DateField(help_text='统计日期', unique=True)),\n                ('total_targets', models.IntegerField(default=0, help_text='目标总数')),\n                ('total_subdomains', models.IntegerField(default=0, help_text='子域名总数')),\n                ('total_ips', models.IntegerField(default=0, help_text='IP地址总数')),\n                ('total_endpoints', models.IntegerField(default=0, help_text='端点总数')),\n                ('total_websites', models.IntegerField(default=0, help_text='网站总数')),\n                ('total_vulns', models.IntegerField(default=0, help_text='漏洞总数')),\n                ('total_assets', models.IntegerField(default=0, help_text='总资产数')),\n                ('created_at', models.DateTimeField(auto_now_add=True, help_text='创建时间')),\n                ('updated_at', models.DateTimeField(auto_now=True, help_text='更新时间')),\n            ],\n            options={\n                'verbose_name': '统计历史',\n                'verbose_name_plural': '统计历史',\n                'db_table': 'statistics_history',\n                'ordering': ['-date'],\n                'indexes': [models.Index(fields=['date'], name='statistics__date_1d29cd_idx')],\n            },\n        ),\n        migrations.CreateModel(\n            name='Directory',\n            fields=[\n                ('id', models.AutoField(primary_key=True, serialize=False)),\n                ('url', models.CharField(help_text='完整请求 URL', max_length=2000)),\n                ('status', models.IntegerField(blank=True, help_text='HTTP 响应状态码', null=True)),\n                ('content_length', models.BigIntegerField(blank=True, help_text='响应体字节大小（Content-Length 或实际长度）', null=True)),\n                ('words', models.IntegerField(blank=True, help_text='响应体中单词数量（按空格分割）', null=True)),\n                ('lines', models.IntegerField(blank=True, help_text='响应体行数（按换行符分割）', null=True)),\n                ('content_type', models.CharField(blank=True, default='', help_text='响应头 Content-Type 值', max_length=200)),\n                ('duration', models.BigIntegerField(blank=True, help_text='请求耗时（单位：纳秒）', null=True)),\n                ('created_at', models.DateTimeField(auto_now_add=True, help_text='创建时间')),\n                ('target', models.ForeignKey(help_text='所属的扫描目标', on_delete=django.db.models.deletion.CASCADE, related_name='directories', to='targets.target')),\n            ],\n            options={\n                'verbose_name': '目录',\n                'verbose_name_plural': '目录',\n                'db_table': 'directory',\n                'ordering': ['-created_at'],\n                'indexes': [models.Index(fields=['-created_at'], name='directory_created_2cef03_idx'), models.Index(fields=['target'], name='directory_target__e310c8_idx'), models.Index(fields=['url'], name='directory_url_ba40cd_idx'), models.Index(fields=['status'], name='directory_status_40bbe6_idx'), django.contrib.postgres.indexes.GinIndex(fields=['url'], name='directory_url_trgm_idx', opclasses=['gin_trgm_ops'])],\n                'constraints': [models.UniqueConstraint(fields=('target', 'url'), name='unique_directory_url_target')],\n            },\n        ),\n        migrations.CreateModel(\n            name='DirectorySnapshot',\n            fields=[\n                ('id', models.AutoField(primary_key=True, serialize=False)),\n                ('url', models.CharField(help_text='目录URL', max_length=2000)),\n                ('status', models.IntegerField(blank=True, help_text='HTTP状态码', null=True)),\n                ('content_length', models.BigIntegerField(blank=True, help_text='内容长度', null=True)),\n                ('words', models.IntegerField(blank=True, help_text='响应体中单词数量（按空格分割）', null=True)),\n                ('lines', models.IntegerField(blank=True, help_text='响应体行数（按换行符分割）', null=True)),\n                ('content_type', models.CharField(blank=True, default='', help_text='响应头 Content-Type 值', max_length=200)),\n                ('duration', models.BigIntegerField(blank=True, help_text='请求耗时（单位：纳秒）', null=True)),\n                ('created_at', models.DateTimeField(auto_now_add=True, help_text='创建时间')),\n                ('scan', models.ForeignKey(help_text='所属的扫描任务', on_delete=django.db.models.deletion.CASCADE, related_name='directory_snapshots', to='scan.scan')),\n            ],\n            options={\n                'verbose_name': '目录快照',\n                'verbose_name_plural': '目录快照',\n                'db_table': 'directory_snapshot',\n                'ordering': ['-created_at'],\n                'indexes': [models.Index(fields=['scan'], name='directory_s_scan_id_c45900_idx'), models.Index(fields=['url'], name='directory_s_url_b4b72b_idx'), models.Index(fields=['status'], name='directory_s_status_e9f57e_idx'), models.Index(fields=['content_type'], name='directory_s_content_45e864_idx'), models.Index(fields=['-created_at'], name='directory_s_created_eb9d27_idx'), django.contrib.postgres.indexes.GinIndex(fields=['url'], name='dir_snap_url_trgm', opclasses=['gin_trgm_ops'])],\n                'constraints': [models.UniqueConstraint(fields=('scan', 'url'), name='unique_directory_per_scan_snapshot')],\n            },\n        ),\n        migrations.CreateModel(\n            name='Endpoint',\n            fields=[\n                ('id', models.AutoField(primary_key=True, serialize=False)),\n                ('url', models.TextField(help_text='最终访问的完整URL')),\n                ('host', models.CharField(blank=True, default='', help_text='主机名（域名或IP地址）', max_length=253)),\n                ('location', models.TextField(blank=True, default='', help_text='重定向地址（HTTP 3xx 响应头 Location）')),\n                ('created_at', models.DateTimeField(auto_now_add=True, help_text='创建时间')),\n                ('title', models.TextField(blank=True, default='', help_text='网页标题（HTML <title> 标签内容）')),\n                ('webserver', models.TextField(blank=True, default='', help_text='服务器类型（HTTP 响应头 Server 值）')),\n                ('response_body', models.TextField(blank=True, default='', help_text='HTTP响应体')),\n                ('content_type', models.TextField(blank=True, default='', help_text='响应类型（HTTP Content-Type 响应头）')),\n                ('tech', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), blank=True, default=list, help_text='技术栈（服务器/框架/语言等）', size=None)),\n                ('status_code', models.IntegerField(blank=True, help_text='HTTP状态码', null=True)),\n                ('content_length', models.IntegerField(blank=True, help_text='响应体大小（单位字节）', null=True)),\n                ('vhost', models.BooleanField(blank=True, help_text='是否支持虚拟主机', null=True)),\n                ('matched_gf_patterns', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), blank=True, default=list, help_text='匹配的GF模式列表，用于识别敏感端点（如api, debug, config等）', size=None)),\n                ('response_headers', models.TextField(blank=True, default='', help_text='原始HTTP响应头')),\n                ('target', models.ForeignKey(help_text='所属的扫描目标（主关联字段，表示所属关系，不能为空）', on_delete=django.db.models.deletion.CASCADE, related_name='endpoints', to='targets.target')),\n            ],\n            options={\n                'verbose_name': '端点',\n                'verbose_name_plural': '端点',\n                'db_table': 'endpoint',\n                'ordering': ['-created_at'],\n                'indexes': [models.Index(fields=['-created_at'], name='endpoint_created_44fe9c_idx'), models.Index(fields=['target'], name='endpoint_target__7f9065_idx'), models.Index(fields=['url'], name='endpoint_url_30f66e_idx'), models.Index(fields=['host'], name='endpoint_host_5b4cc8_idx'), models.Index(fields=['status_code'], name='endpoint_status__5d4fdd_idx'), models.Index(fields=['title'], name='endpoint_title_29e26c_idx'), django.contrib.postgres.indexes.GinIndex(fields=['tech'], name='endpoint_tech_2bfa7c_gin'), django.contrib.postgres.indexes.GinIndex(fields=['response_headers'], name='endpoint_resp_headers_trgm_idx', opclasses=['gin_trgm_ops']), django.contrib.postgres.indexes.GinIndex(fields=['url'], name='endpoint_url_trgm_idx', opclasses=['gin_trgm_ops']), django.contrib.postgres.indexes.GinIndex(fields=['title'], name='endpoint_title_trgm_idx', opclasses=['gin_trgm_ops'])],\n                'constraints': [models.UniqueConstraint(fields=('url', 'target'), name='unique_endpoint_url_target')],\n            },\n        ),\n        migrations.CreateModel(\n            name='EndpointSnapshot',\n            fields=[\n                ('id', models.AutoField(primary_key=True, serialize=False)),\n                ('url', models.TextField(help_text='端点URL')),\n                ('host', models.CharField(blank=True, default='', help_text='主机名（域名或IP地址）', max_length=253)),\n                ('title', models.TextField(blank=True, default='', help_text='页面标题')),\n                ('status_code', models.IntegerField(blank=True, help_text='HTTP状态码', null=True)),\n                ('content_length', models.IntegerField(blank=True, help_text='内容长度', null=True)),\n                ('location', models.TextField(blank=True, default='', help_text='重定向位置')),\n                ('webserver', models.TextField(blank=True, default='', help_text='Web服务器')),\n                ('content_type', models.TextField(blank=True, default='', help_text='内容类型')),\n                ('tech', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), blank=True, default=list, help_text='技术栈', size=None)),\n                ('response_body', models.TextField(blank=True, default='', help_text='HTTP响应体')),\n                ('vhost', models.BooleanField(blank=True, help_text='虚拟主机标志', null=True)),\n                ('matched_gf_patterns', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), blank=True, default=list, help_text='匹配的GF模式列表', size=None)),\n                ('response_headers', models.TextField(blank=True, default='', help_text='原始HTTP响应头')),\n                ('created_at', models.DateTimeField(auto_now_add=True, help_text='创建时间')),\n                ('scan', models.ForeignKey(help_text='所属的扫描任务', on_delete=django.db.models.deletion.CASCADE, related_name='endpoint_snapshots', to='scan.scan')),\n            ],\n            options={\n                'verbose_name': '端点快照',\n                'verbose_name_plural': '端点快照',\n                'db_table': 'endpoint_snapshot',\n                'ordering': ['-created_at'],\n                'indexes': [models.Index(fields=['scan'], name='endpoint_sn_scan_id_6ac9a7_idx'), models.Index(fields=['url'], name='endpoint_sn_url_205160_idx'), models.Index(fields=['host'], name='endpoint_sn_host_577bfd_idx'), models.Index(fields=['title'], name='endpoint_sn_title_516a05_idx'), models.Index(fields=['status_code'], name='endpoint_sn_status__83efb0_idx'), models.Index(fields=['webserver'], name='endpoint_sn_webserv_66be83_idx'), models.Index(fields=['-created_at'], name='endpoint_sn_created_21fb5b_idx'), django.contrib.postgres.indexes.GinIndex(fields=['tech'], name='endpoint_sn_tech_0d0752_gin'), django.contrib.postgres.indexes.GinIndex(fields=['response_headers'], name='ep_snap_resp_hdr_trgm', opclasses=['gin_trgm_ops']), django.contrib.postgres.indexes.GinIndex(fields=['url'], name='ep_snap_url_trgm', opclasses=['gin_trgm_ops']), django.contrib.postgres.indexes.GinIndex(fields=['title'], name='ep_snap_title_trgm', opclasses=['gin_trgm_ops'])],\n                'constraints': [models.UniqueConstraint(fields=('scan', 'url'), name='unique_endpoint_per_scan_snapshot')],\n            },\n        ),\n        migrations.CreateModel(\n            name='HostPortMapping',\n            fields=[\n                ('id', models.AutoField(primary_key=True, serialize=False)),\n                ('host', models.CharField(help_text='主机名（域名或IP）', max_length=1000)),\n                ('ip', models.GenericIPAddressField(help_text='IP地址')),\n                ('port', models.IntegerField(help_text='端口号（1-65535）', validators=[django.core.validators.MinValueValidator(1, message='端口号必须大于等于1'), django.core.validators.MaxValueValidator(65535, message='端口号必须小于等于65535')])),\n                ('created_at', models.DateTimeField(auto_now_add=True, help_text='创建时间')),\n                ('target', models.ForeignKey(help_text='所属的扫描目标', on_delete=django.db.models.deletion.CASCADE, related_name='host_port_mappings', to='targets.target')),\n            ],\n            options={\n                'verbose_name': '主机端口映射',\n                'verbose_name_plural': '主机端口映射',\n                'db_table': 'host_port_mapping',\n                'ordering': ['-created_at'],\n                'indexes': [models.Index(fields=['target'], name='host_port_m_target__943e9b_idx'), models.Index(fields=['host'], name='host_port_m_host_f78363_idx'), models.Index(fields=['ip'], name='host_port_m_ip_2e6f02_idx'), models.Index(fields=['port'], name='host_port_m_port_9fb9ff_idx'), models.Index(fields=['host', 'ip'], name='host_port_m_host_3ce245_idx'), models.Index(fields=['-created_at'], name='host_port_m_created_11cd22_idx')],\n                'constraints': [models.UniqueConstraint(fields=('target', 'host', 'ip', 'port'), name='unique_target_host_ip_port')],\n            },\n        ),\n        migrations.CreateModel(\n            name='HostPortMappingSnapshot',\n            fields=[\n                ('id', models.AutoField(primary_key=True, serialize=False)),\n                ('host', models.CharField(help_text='主机名（域名或IP）', max_length=1000)),\n                ('ip', models.GenericIPAddressField(help_text='IP地址')),\n                ('port', models.IntegerField(help_text='端口号（1-65535）', validators=[django.core.validators.MinValueValidator(1, message='端口号必须大于等于1'), django.core.validators.MaxValueValidator(65535, message='端口号必须小于等于65535')])),\n                ('created_at', models.DateTimeField(auto_now_add=True, help_text='创建时间')),\n                ('scan', models.ForeignKey(help_text='所属的扫描任务（主关联）', on_delete=django.db.models.deletion.CASCADE, related_name='host_port_mapping_snapshots', to='scan.scan')),\n            ],\n            options={\n                'verbose_name': '主机端口映射快照',\n                'verbose_name_plural': '主机端口映射快照',\n                'db_table': 'host_port_mapping_snapshot',\n                'ordering': ['-created_at'],\n                'indexes': [models.Index(fields=['scan'], name='host_port_m_scan_id_50ba0b_idx'), models.Index(fields=['host'], name='host_port_m_host_e99054_idx'), models.Index(fields=['ip'], name='host_port_m_ip_54818c_idx'), models.Index(fields=['port'], name='host_port_m_port_ed7b48_idx'), models.Index(fields=['host', 'ip'], name='host_port_m_host_8a463a_idx'), models.Index(fields=['scan', 'host'], name='host_port_m_scan_id_426fdb_idx'), models.Index(fields=['-created_at'], name='host_port_m_created_fb28b8_idx')],\n                'constraints': [models.UniqueConstraint(fields=('scan', 'host', 'ip', 'port'), name='unique_scan_host_ip_port_snapshot')],\n            },\n        ),\n        migrations.CreateModel(\n            name='Subdomain',\n            fields=[\n                ('id', models.AutoField(primary_key=True, serialize=False)),\n                ('name', models.CharField(help_text='子域名名称', max_length=1000)),\n                ('created_at', models.DateTimeField(auto_now_add=True, help_text='创建时间')),\n                ('target', models.ForeignKey(help_text='所属的扫描目标（主关联字段，表示所属关系，不能为空）', on_delete=django.db.models.deletion.CASCADE, related_name='subdomains', to='targets.target')),\n            ],\n            options={\n                'verbose_name': '子域名',\n                'verbose_name_plural': '子域名',\n                'db_table': 'subdomain',\n                'ordering': ['-created_at'],\n                'indexes': [models.Index(fields=['-created_at'], name='subdomain_created_e187a8_idx'), models.Index(fields=['name', 'target'], name='subdomain_name_60e1d0_idx'), models.Index(fields=['target'], name='subdomain_target__e409f0_idx'), models.Index(fields=['name'], name='subdomain_name_d40ba7_idx'), django.contrib.postgres.indexes.GinIndex(fields=['name'], name='subdomain_name_trgm_idx', opclasses=['gin_trgm_ops'])],\n                'constraints': [models.UniqueConstraint(fields=('name', 'target'), name='unique_subdomain_name_target')],\n            },\n        ),\n        migrations.CreateModel(\n            name='SubdomainSnapshot',\n            fields=[\n                ('id', models.AutoField(primary_key=True, serialize=False)),\n                ('name', models.CharField(help_text='子域名名称', max_length=1000)),\n                ('created_at', models.DateTimeField(auto_now_add=True, help_text='创建时间')),\n                ('scan', models.ForeignKey(help_text='所属的扫描任务', on_delete=django.db.models.deletion.CASCADE, related_name='subdomain_snapshots', to='scan.scan')),\n            ],\n            options={\n                'verbose_name': '子域名快照',\n                'verbose_name_plural': '子域名快照',\n                'db_table': 'subdomain_snapshot',\n                'ordering': ['-created_at'],\n                'indexes': [models.Index(fields=['scan'], name='subdomain_s_scan_id_68c253_idx'), models.Index(fields=['name'], name='subdomain_s_name_2da42b_idx'), models.Index(fields=['-created_at'], name='subdomain_s_created_d2b48e_idx'), django.contrib.postgres.indexes.GinIndex(fields=['name'], name='subdomain_snap_name_trgm', opclasses=['gin_trgm_ops'])],\n                'constraints': [models.UniqueConstraint(fields=('scan', 'name'), name='unique_subdomain_per_scan_snapshot')],\n            },\n        ),\n        migrations.CreateModel(\n            name='Vulnerability',\n            fields=[\n                ('id', models.AutoField(primary_key=True, serialize=False)),\n                ('url', models.CharField(help_text='漏洞所在的URL', max_length=2000)),\n                ('vuln_type', models.CharField(help_text='漏洞类型（如 xss, sqli）', max_length=100)),\n                ('severity', models.CharField(choices=[('unknown', '未知'), ('info', '信息'), ('low', '低'), ('medium', '中'), ('high', '高'), ('critical', '危急')], default='unknown', help_text='严重性（未知/信息/低/中/高/危急）', max_length=20)),\n                ('source', models.CharField(blank=True, default='', help_text='来源工具（如 dalfox, nuclei, crlfuzz）', max_length=50)),\n                ('cvss_score', models.DecimalField(blank=True, decimal_places=1, help_text='CVSS 评分（0.0-10.0）', max_digits=3, null=True)),\n                ('description', models.TextField(blank=True, default='', help_text='漏洞描述')),\n                ('raw_output', models.JSONField(blank=True, default=dict, help_text='工具原始输出')),\n                ('created_at', models.DateTimeField(auto_now_add=True, help_text='创建时间')),\n                ('target', models.ForeignKey(help_text='所属的扫描目标', on_delete=django.db.models.deletion.CASCADE, related_name='vulnerabilities', to='targets.target')),\n            ],\n            options={\n                'verbose_name': '漏洞',\n                'verbose_name_plural': '漏洞',\n                'db_table': 'vulnerability',\n                'ordering': ['-created_at'],\n                'indexes': [models.Index(fields=['target'], name='vulnerabili_target__755a02_idx'), models.Index(fields=['vuln_type'], name='vulnerabili_vuln_ty_3010cd_idx'), models.Index(fields=['severity'], name='vulnerabili_severit_1a798b_idx'), models.Index(fields=['source'], name='vulnerabili_source_7c7552_idx'), models.Index(fields=['url'], name='vulnerabili_url_4dcc4d_idx'), models.Index(fields=['-created_at'], name='vulnerabili_created_e25ff7_idx')],\n            },\n        ),\n        migrations.CreateModel(\n            name='VulnerabilitySnapshot',\n            fields=[\n                ('id', models.AutoField(primary_key=True, serialize=False)),\n                ('url', models.CharField(help_text='漏洞所在的URL', max_length=2000)),\n                ('vuln_type', models.CharField(help_text='漏洞类型（如 xss, sqli）', max_length=100)),\n                ('severity', models.CharField(choices=[('unknown', '未知'), ('info', '信息'), ('low', '低'), ('medium', '中'), ('high', '高'), ('critical', '危急')], default='unknown', help_text='严重性（未知/信息/低/中/高/危急）', max_length=20)),\n                ('source', models.CharField(blank=True, default='', help_text='来源工具（如 dalfox, nuclei, crlfuzz）', max_length=50)),\n                ('cvss_score', models.DecimalField(blank=True, decimal_places=1, help_text='CVSS 评分（0.0-10.0）', max_digits=3, null=True)),\n                ('description', models.TextField(blank=True, default='', help_text='漏洞描述')),\n                ('raw_output', models.JSONField(blank=True, default=dict, help_text='工具原始输出')),\n                ('created_at', models.DateTimeField(auto_now_add=True, help_text='创建时间')),\n                ('scan', models.ForeignKey(help_text='所属的扫描任务', on_delete=django.db.models.deletion.CASCADE, related_name='vulnerability_snapshots', to='scan.scan')),\n            ],\n            options={\n                'verbose_name': '漏洞快照',\n                'verbose_name_plural': '漏洞快照',\n                'db_table': 'vulnerability_snapshot',\n                'ordering': ['-created_at'],\n                'indexes': [models.Index(fields=['scan'], name='vulnerabili_scan_id_7b81c9_idx'), models.Index(fields=['url'], name='vulnerabili_url_11a707_idx'), models.Index(fields=['vuln_type'], name='vulnerabili_vuln_ty_6b90ee_idx'), models.Index(fields=['severity'], name='vulnerabili_severit_4eae0d_idx'), models.Index(fields=['source'], name='vulnerabili_source_968b1f_idx'), models.Index(fields=['-created_at'], name='vulnerabili_created_53a12e_idx')],\n            },\n        ),\n        migrations.CreateModel(\n            name='WebSite',\n            fields=[\n                ('id', models.AutoField(primary_key=True, serialize=False)),\n                ('url', models.TextField(help_text='最终访问的完整URL')),\n                ('host', models.CharField(blank=True, default='', help_text='主机名（域名或IP地址）', max_length=253)),\n                ('location', models.TextField(blank=True, default='', help_text='重定向地址（HTTP 3xx 响应头 Location）')),\n                ('created_at', models.DateTimeField(auto_now_add=True, help_text='创建时间')),\n                ('title', models.TextField(blank=True, default='', help_text='网页标题（HTML <title> 标签内容）')),\n                ('webserver', models.TextField(blank=True, default='', help_text='服务器类型（HTTP 响应头 Server 值）')),\n                ('response_body', models.TextField(blank=True, default='', help_text='HTTP响应体')),\n                ('content_type', models.TextField(blank=True, default='', help_text='响应类型（HTTP Content-Type 响应头）')),\n                ('tech', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), blank=True, default=list, help_text='技术栈（服务器/框架/语言等）', size=None)),\n                ('status_code', models.IntegerField(blank=True, help_text='HTTP状态码', null=True)),\n                ('content_length', models.IntegerField(blank=True, help_text='响应体大小（单位字节）', null=True)),\n                ('vhost', models.BooleanField(blank=True, help_text='是否支持虚拟主机', null=True)),\n                ('response_headers', models.TextField(blank=True, default='', help_text='原始HTTP响应头')),\n                ('target', models.ForeignKey(help_text='所属的扫描目标（主关联字段，表示所属关系，不能为空）', on_delete=django.db.models.deletion.CASCADE, related_name='websites', to='targets.target')),\n            ],\n            options={\n                'verbose_name': '站点',\n                'verbose_name_plural': '站点',\n                'db_table': 'website',\n                'ordering': ['-created_at'],\n                'indexes': [models.Index(fields=['-created_at'], name='website_created_c9cfd2_idx'), models.Index(fields=['url'], name='website_url_b18883_idx'), models.Index(fields=['host'], name='website_host_996b50_idx'), models.Index(fields=['target'], name='website_target__2a353b_idx'), models.Index(fields=['title'], name='website_title_c2775b_idx'), models.Index(fields=['status_code'], name='website_status__51663d_idx'), django.contrib.postgres.indexes.GinIndex(fields=['tech'], name='website_tech_e3f0cb_gin'), django.contrib.postgres.indexes.GinIndex(fields=['response_headers'], name='website_resp_headers_trgm_idx', opclasses=['gin_trgm_ops']), django.contrib.postgres.indexes.GinIndex(fields=['url'], name='website_url_trgm_idx', opclasses=['gin_trgm_ops']), django.contrib.postgres.indexes.GinIndex(fields=['title'], name='website_title_trgm_idx', opclasses=['gin_trgm_ops'])],\n                'constraints': [models.UniqueConstraint(fields=('url', 'target'), name='unique_website_url_target')],\n            },\n        ),\n        migrations.CreateModel(\n            name='WebsiteSnapshot',\n            fields=[\n                ('id', models.AutoField(primary_key=True, serialize=False)),\n                ('url', models.TextField(help_text='站点URL')),\n                ('host', models.CharField(blank=True, default='', help_text='主机名（域名或IP地址）', max_length=253)),\n                ('title', models.TextField(blank=True, default='', help_text='页面标题')),\n                ('status_code', models.IntegerField(blank=True, help_text='HTTP状态码', null=True)),\n                ('content_length', models.BigIntegerField(blank=True, help_text='内容长度', null=True)),\n                ('location', models.TextField(blank=True, default='', help_text='重定向位置')),\n                ('webserver', models.TextField(blank=True, default='', help_text='Web服务器')),\n                ('content_type', models.TextField(blank=True, default='', help_text='内容类型')),\n                ('tech', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), blank=True, default=list, help_text='技术栈', size=None)),\n                ('response_body', models.TextField(blank=True, default='', help_text='HTTP响应体')),\n                ('vhost', models.BooleanField(blank=True, help_text='虚拟主机标志', null=True)),\n                ('response_headers', models.TextField(blank=True, default='', help_text='原始HTTP响应头')),\n                ('created_at', models.DateTimeField(auto_now_add=True, help_text='创建时间')),\n                ('scan', models.ForeignKey(help_text='所属的扫描任务', on_delete=django.db.models.deletion.CASCADE, related_name='website_snapshots', to='scan.scan')),\n            ],\n            options={\n                'verbose_name': '网站快照',\n                'verbose_name_plural': '网站快照',\n                'db_table': 'website_snapshot',\n                'ordering': ['-created_at'],\n                'indexes': [models.Index(fields=['scan'], name='website_sna_scan_id_26b6dc_idx'), models.Index(fields=['url'], name='website_sna_url_801a70_idx'), models.Index(fields=['host'], name='website_sna_host_348fe1_idx'), models.Index(fields=['title'], name='website_sna_title_b1a5ee_idx'), models.Index(fields=['-created_at'], name='website_sna_created_2c149a_idx'), django.contrib.postgres.indexes.GinIndex(fields=['tech'], name='website_sna_tech_3d6d2f_gin'), django.contrib.postgres.indexes.GinIndex(fields=['response_headers'], name='ws_snap_resp_hdr_trgm', opclasses=['gin_trgm_ops']), django.contrib.postgres.indexes.GinIndex(fields=['url'], name='ws_snap_url_trgm', opclasses=['gin_trgm_ops']), django.contrib.postgres.indexes.GinIndex(fields=['title'], name='ws_snap_title_trgm', opclasses=['gin_trgm_ops'])],\n                'constraints': [models.UniqueConstraint(fields=('scan', 'url'), name='unique_website_per_scan_snapshot')],\n            },\n        ),\n    ]\n"
  },
  {
    "path": "backend/apps/asset/migrations/0002_create_search_views.py",
    "content": "\"\"\"\n创建资产搜索物化视图（使用 pg_ivm 增量维护）\n\n这些视图用于资产搜索功能，提供高性能的全文搜索能力。\n\"\"\"\n\nfrom django.db import migrations\n\n\nclass Migration(migrations.Migration):\n    \"\"\"创建资产搜索所需的增量物化视图\"\"\"\n\n    dependencies = [\n        ('asset', '0001_initial'),\n    ]\n\n    operations = [\n        # 1. 确保 pg_ivm 扩展已安装\n        migrations.RunSQL(\n            sql=\"CREATE EXTENSION IF NOT EXISTS pg_ivm;\",\n            reverse_sql=\"DROP EXTENSION IF EXISTS pg_ivm;\",\n        ),\n        \n        # 2. 创建 Website 搜索视图\n        # 注意：pg_ivm 不支持 ArrayField，所以 tech 字段需要从原表 JOIN 获取\n        migrations.RunSQL(\n            sql=\"\"\"\n                SELECT pgivm.create_immv('asset_search_view', $$\n                    SELECT \n                        w.id,\n                        w.url,\n                        w.host,\n                        w.title,\n                        w.status_code,\n                        w.response_headers,\n                        w.response_body,\n                        w.content_type,\n                        w.content_length,\n                        w.webserver,\n                        w.location,\n                        w.vhost,\n                        w.created_at,\n                        w.target_id\n                    FROM website w\n                $$);\n            \"\"\",\n            reverse_sql=\"DROP TABLE IF EXISTS asset_search_view CASCADE;\",\n        ),\n        \n        # 3. 创建 Endpoint 搜索视图\n        migrations.RunSQL(\n            sql=\"\"\"\n                SELECT pgivm.create_immv('endpoint_search_view', $$\n                    SELECT \n                        e.id,\n                        e.url,\n                        e.host,\n                        e.title,\n                        e.status_code,\n                        e.response_headers,\n                        e.response_body,\n                        e.content_type,\n                        e.content_length,\n                        e.webserver,\n                        e.location,\n                        e.vhost,\n                        e.created_at,\n                        e.target_id\n                    FROM endpoint e\n                $$);\n            \"\"\",\n            reverse_sql=\"DROP TABLE IF EXISTS endpoint_search_view CASCADE;\",\n        ),\n        \n        # 4. 为搜索视图创建索引（加速查询）\n        migrations.RunSQL(\n            sql=[\n                # Website 搜索视图索引\n                \"CREATE INDEX IF NOT EXISTS asset_search_view_host_idx ON asset_search_view (host);\",\n                \"CREATE INDEX IF NOT EXISTS asset_search_view_url_idx ON asset_search_view (url);\",\n                \"CREATE INDEX IF NOT EXISTS asset_search_view_title_idx ON asset_search_view (title);\",\n                \"CREATE INDEX IF NOT EXISTS asset_search_view_status_idx ON asset_search_view (status_code);\",\n                \"CREATE INDEX IF NOT EXISTS asset_search_view_created_idx ON asset_search_view (created_at DESC);\",\n                # Endpoint 搜索视图索引\n                \"CREATE INDEX IF NOT EXISTS endpoint_search_view_host_idx ON endpoint_search_view (host);\",\n                \"CREATE INDEX IF NOT EXISTS endpoint_search_view_url_idx ON endpoint_search_view (url);\",\n                \"CREATE INDEX IF NOT EXISTS endpoint_search_view_title_idx ON endpoint_search_view (title);\",\n                \"CREATE INDEX IF NOT EXISTS endpoint_search_view_status_idx ON endpoint_search_view (status_code);\",\n                \"CREATE INDEX IF NOT EXISTS endpoint_search_view_created_idx ON endpoint_search_view (created_at DESC);\",\n            ],\n            reverse_sql=[\n                \"DROP INDEX IF EXISTS asset_search_view_host_idx;\",\n                \"DROP INDEX IF EXISTS asset_search_view_url_idx;\",\n                \"DROP INDEX IF EXISTS asset_search_view_title_idx;\",\n                \"DROP INDEX IF EXISTS asset_search_view_status_idx;\",\n                \"DROP INDEX IF EXISTS asset_search_view_created_idx;\",\n                \"DROP INDEX IF EXISTS endpoint_search_view_host_idx;\",\n                \"DROP INDEX IF EXISTS endpoint_search_view_url_idx;\",\n                \"DROP INDEX IF EXISTS endpoint_search_view_title_idx;\",\n                \"DROP INDEX IF EXISTS endpoint_search_view_status_idx;\",\n                \"DROP INDEX IF EXISTS endpoint_search_view_created_idx;\",\n            ],\n        ),\n    ]\n"
  },
  {
    "path": "backend/apps/asset/migrations/0003_add_screenshot_models.py",
    "content": "# Generated by Django 5.2.7 on 2026-01-07 02:21\n\nimport django.db.models.deletion\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('asset', '0002_create_search_views'),\n        ('scan', '0001_initial'),\n        ('targets', '0001_initial'),\n    ]\n\n    operations = [\n        migrations.CreateModel(\n            name='Screenshot',\n            fields=[\n                ('id', models.AutoField(primary_key=True, serialize=False)),\n                ('url', models.TextField(help_text='截图对应的 URL')),\n                ('image', models.BinaryField(help_text='截图 WebP 二进制数据（压缩后）')),\n                ('created_at', models.DateTimeField(auto_now_add=True, help_text='创建时间')),\n                ('updated_at', models.DateTimeField(auto_now=True, help_text='更新时间')),\n                ('target', models.ForeignKey(help_text='所属目标', on_delete=django.db.models.deletion.CASCADE, related_name='screenshots', to='targets.target')),\n            ],\n            options={\n                'verbose_name': '截图',\n                'verbose_name_plural': '截图',\n                'db_table': 'screenshot',\n                'ordering': ['-created_at'],\n                'indexes': [models.Index(fields=['target'], name='screenshot_target__2f01f6_idx'), models.Index(fields=['-created_at'], name='screenshot_created_c0ad4b_idx')],\n                'constraints': [models.UniqueConstraint(fields=('target', 'url'), name='unique_screenshot_per_target')],\n            },\n        ),\n        migrations.CreateModel(\n            name='ScreenshotSnapshot',\n            fields=[\n                ('id', models.AutoField(primary_key=True, serialize=False)),\n                ('url', models.TextField(help_text='截图对应的 URL')),\n                ('image', models.BinaryField(help_text='截图 WebP 二进制数据（压缩后）')),\n                ('created_at', models.DateTimeField(auto_now_add=True, help_text='创建时间')),\n                ('scan', models.ForeignKey(help_text='所属的扫描任务', on_delete=django.db.models.deletion.CASCADE, related_name='screenshot_snapshots', to='scan.scan')),\n            ],\n            options={\n                'verbose_name': '截图快照',\n                'verbose_name_plural': '截图快照',\n                'db_table': 'screenshot_snapshot',\n                'ordering': ['-created_at'],\n                'indexes': [models.Index(fields=['scan'], name='screenshot__scan_id_fb8c4d_idx'), models.Index(fields=['-created_at'], name='screenshot__created_804117_idx')],\n                'constraints': [models.UniqueConstraint(fields=('scan', 'url'), name='unique_screenshot_per_scan_snapshot')],\n            },\n        ),\n    ]\n"
  },
  {
    "path": "backend/apps/asset/migrations/0004_add_status_code_to_screenshot.py",
    "content": "# Generated by Django 5.2.7 on 2026-01-07 13:29\n\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('asset', '0003_add_screenshot_models'),\n    ]\n\n    operations = [\n        migrations.AddField(\n            model_name='screenshot',\n            name='status_code',\n            field=models.SmallIntegerField(blank=True, help_text='HTTP 响应状态码', null=True),\n        ),\n        migrations.AddField(\n            model_name='screenshotsnapshot',\n            name='status_code',\n            field=models.SmallIntegerField(blank=True, help_text='HTTP 响应状态码', null=True),\n        ),\n    ]\n"
  },
  {
    "path": "backend/apps/asset/migrations/__init__.py",
    "content": ""
  },
  {
    "path": "backend/apps/asset/models/__init__.py",
    "content": "# 导入所有模型，确保Django能发现它们\n\n# 业务模型\nfrom .asset_models import (\n    Subdomain,\n    WebSite,\n    Endpoint,\n    Directory,\n    HostPortMapping,\n    Vulnerability,\n)\n\n# 快照模型\nfrom .snapshot_models import (\n    SubdomainSnapshot,\n    WebsiteSnapshot,\n    DirectorySnapshot,\n    HostPortMappingSnapshot,\n    EndpointSnapshot,\n    VulnerabilitySnapshot,\n)\n\n# 截图模型\nfrom .screenshot_models import (\n    Screenshot,\n    ScreenshotSnapshot,\n)\n\n# 统计模型\nfrom .statistics_models import AssetStatistics, StatisticsHistory\n\n# 导出所有模型供外部导入\n__all__ = [\n    # 业务模型\n    'Subdomain',\n    'WebSite', \n    'Endpoint',\n    'Directory',\n    'HostPortMapping',\n    'Vulnerability',\n    # 快照模型\n    'SubdomainSnapshot',\n    'WebsiteSnapshot', \n    'DirectorySnapshot',\n    'HostPortMappingSnapshot',\n    'EndpointSnapshot',\n    'VulnerabilitySnapshot',\n    # 截图模型\n    'Screenshot',\n    'ScreenshotSnapshot',\n    # 统计模型\n    'AssetStatistics',\n    'StatisticsHistory',\n]\n"
  },
  {
    "path": "backend/apps/asset/models/asset_models.py",
    "content": "\nfrom django.db import models\nfrom django.contrib.postgres.fields import ArrayField\nfrom django.contrib.postgres.indexes import GinIndex\nfrom django.core.validators import MinValueValidator, MaxValueValidator\n\n\nclass Subdomain(models.Model):\n    \"\"\"\n    子域名模型（纯资产表）\n    \n    设计特点：\n    - 只存储子域名资产信息\n    - 与其他资产表（IPAddress、Port）无直接关联\n    - 扫描历史记录存储在 SubdomainSnapshot 快照表中\n    \"\"\"\n\n    id = models.AutoField(primary_key=True)\n    target = models.ForeignKey(\n        'targets.Target',  # 使用字符串引用避免循环导入\n        on_delete=models.CASCADE,\n        related_name='subdomains',\n        help_text='所属的扫描目标（主关联字段，表示所属关系，不能为空）'\n    )\n    name = models.CharField(max_length=1000, help_text='子域名名称')\n    created_at = models.DateTimeField(auto_now_add=True, help_text='创建时间')\n\n    class Meta:\n        db_table = 'subdomain'\n        verbose_name = '子域名'\n        verbose_name_plural = '子域名'\n        ordering = ['-created_at']\n        indexes = [\n            models.Index(fields=['-created_at']),\n            models.Index(fields=['name', 'target']),  # 复合索引，优化 get_by_names_and_target_id 批量查询\n            models.Index(fields=['target']),     # 优化从target_id快速查找下面的子域名\n            models.Index(fields=['name']),            # 优化从name快速查找子域名，搜索场景\n            # pg_trgm GIN 索引，支持 LIKE '%keyword%' 模糊搜索\n            GinIndex(\n                name='subdomain_name_trgm_idx',\n                fields=['name'],\n                opclasses=['gin_trgm_ops']\n            ),\n        ]\n        constraints = [\n            # 普通唯一约束：name + target 组合唯一\n            models.UniqueConstraint(\n                fields=['name', 'target'],\n                name='unique_subdomain_name_target'\n            )\n        ]\n\n    def __str__(self):\n        return str(self.name or f'Subdomain {self.id}')\n\n\nclass Endpoint(models.Model):\n    \"\"\"端点模型\"\"\"\n\n    id = models.AutoField(primary_key=True)\n    target = models.ForeignKey(\n        'targets.Target',  # 使用字符串引用\n        on_delete=models.CASCADE,\n        related_name='endpoints',\n        help_text='所属的扫描目标（主关联字段，表示所属关系，不能为空）'\n    )\n    \n    url = models.TextField(help_text='最终访问的完整URL')\n    host = models.CharField(\n        max_length=253,\n        blank=True,\n        default='',\n        help_text='主机名（域名或IP地址）'\n    )\n    location = models.TextField(\n        blank=True,\n        default='',\n        help_text='重定向地址（HTTP 3xx 响应头 Location）'\n    )\n    created_at = models.DateTimeField(auto_now_add=True, help_text='创建时间')\n    title = models.TextField(\n        blank=True,\n        default='',\n        help_text='网页标题（HTML <title> 标签内容）'\n    )\n    webserver = models.TextField(\n        blank=True,\n        default='',\n        help_text='服务器类型（HTTP 响应头 Server 值）'\n    )\n    response_body = models.TextField(\n        blank=True,\n        default='',\n        help_text='HTTP响应体'\n    )\n    content_type = models.TextField(\n        blank=True,\n        default='',\n        help_text='响应类型（HTTP Content-Type 响应头）'\n    )\n    tech = ArrayField(\n        models.CharField(max_length=100),\n        blank=True,\n        default=list,\n        help_text='技术栈（服务器/框架/语言等）'\n    )\n    status_code = models.IntegerField(\n        null=True,\n        blank=True,\n        help_text='HTTP状态码'\n    )\n    content_length = models.IntegerField(\n        null=True,\n        blank=True,\n        help_text='响应体大小（单位字节）'\n    )\n    vhost = models.BooleanField(\n        null=True,\n        blank=True,\n        help_text='是否支持虚拟主机'\n    )\n    matched_gf_patterns = ArrayField(\n        models.CharField(max_length=100),\n        blank=True,\n        default=list,\n        help_text='匹配的GF模式列表，用于识别敏感端点（如api, debug, config等）'\n    )\n    response_headers = models.TextField(\n        blank=True,\n        default='',\n        help_text='原始HTTP响应头'\n    )\n\n    class Meta:\n        db_table = 'endpoint'\n        verbose_name = '端点'\n        verbose_name_plural = '端点'\n        ordering = ['-created_at']\n        indexes = [\n            models.Index(fields=['-created_at']),\n            models.Index(fields=['target']),       # 优化从 target_id快速查找下面的端点（主关联字段）\n            models.Index(fields=['url']),          # URL索引，优化查询性能\n            models.Index(fields=['host']),         # host索引，优化根据主机名查询\n            models.Index(fields=['status_code']),  # 状态码索引，优化筛选\n            models.Index(fields=['title']),        # title索引，优化智能过滤搜索\n            GinIndex(fields=['tech']),             # GIN索引，优化 tech 数组字段的 __contains 查询\n            # pg_trgm GIN 索引，支持 LIKE '%keyword%' 模糊搜索\n            GinIndex(\n                name='endpoint_resp_headers_trgm_idx',\n                fields=['response_headers'],\n                opclasses=['gin_trgm_ops']\n            ),\n            GinIndex(\n                name='endpoint_url_trgm_idx',\n                fields=['url'],\n                opclasses=['gin_trgm_ops']\n            ),\n            GinIndex(\n                name='endpoint_title_trgm_idx',\n                fields=['title'],\n                opclasses=['gin_trgm_ops']\n            ),\n        ]\n        constraints = [\n            # 普通唯一约束：url + target 组合唯一\n            models.UniqueConstraint(\n                fields=['url', 'target'],\n                name='unique_endpoint_url_target'\n            )\n        ]\n\n    def __str__(self):\n        return str(self.url or f'Endpoint {self.id}')\n\n\nclass WebSite(models.Model):\n    \"\"\"站点模型\"\"\"\n\n    id = models.AutoField(primary_key=True)\n    target = models.ForeignKey(\n        'targets.Target',  # 使用字符串引用\n        on_delete=models.CASCADE,\n        related_name='websites',\n        help_text='所属的扫描目标（主关联字段，表示所属关系，不能为空）'\n    )\n\n    url = models.TextField(help_text='最终访问的完整URL')\n    host = models.CharField(\n        max_length=253,\n        blank=True,\n        default='',\n        help_text='主机名（域名或IP地址）'\n    )\n    location = models.TextField(\n        blank=True,\n        default='',\n        help_text='重定向地址（HTTP 3xx 响应头 Location）'\n    )\n    created_at = models.DateTimeField(auto_now_add=True, help_text='创建时间')\n    title = models.TextField(\n        blank=True,\n        default='',\n        help_text='网页标题（HTML <title> 标签内容）'\n    )\n    webserver = models.TextField(\n        blank=True,\n        default='',\n        help_text='服务器类型（HTTP 响应头 Server 值）'\n    )\n    response_body = models.TextField(\n        blank=True,\n        default='',\n        help_text='HTTP响应体'\n    )\n    content_type = models.TextField(\n        blank=True,\n        default='',\n        help_text='响应类型（HTTP Content-Type 响应头）'\n    )\n    tech = ArrayField(\n        models.CharField(max_length=100),\n        blank=True,\n        default=list,\n        help_text='技术栈（服务器/框架/语言等）'\n    )\n    status_code = models.IntegerField(\n        null=True,\n        blank=True,\n        help_text='HTTP状态码'\n    )\n    content_length = models.IntegerField(\n        null=True,\n        blank=True,\n        help_text='响应体大小（单位字节）'\n    )\n    vhost = models.BooleanField(\n        null=True,\n        blank=True,\n        help_text='是否支持虚拟主机'\n    )\n    response_headers = models.TextField(\n        blank=True,\n        default='',\n        help_text='原始HTTP响应头'\n    )\n\n    class Meta:\n        db_table = 'website'\n        verbose_name = '站点'\n        verbose_name_plural = '站点'\n        ordering = ['-created_at']\n        indexes = [\n            models.Index(fields=['-created_at']),\n            models.Index(fields=['url']),  # URL索引，优化查询性能\n            models.Index(fields=['host']),  # host索引，优化根据主机名查询\n            models.Index(fields=['target']),     # 优化从 target_id快速查找下面的站点\n            models.Index(fields=['title']),      # title索引，优化智能过滤搜索\n            models.Index(fields=['status_code']),  # 状态码索引，优化智能过滤搜索\n            GinIndex(fields=['tech']),  # GIN索引，优化 tech 数组字段的 __contains 查询\n            # pg_trgm GIN 索引，支持 LIKE '%keyword%' 模糊搜索\n            GinIndex(\n                name='website_resp_headers_trgm_idx',\n                fields=['response_headers'],\n                opclasses=['gin_trgm_ops']\n            ),\n            GinIndex(\n                name='website_url_trgm_idx',\n                fields=['url'],\n                opclasses=['gin_trgm_ops']\n            ),\n            GinIndex(\n                name='website_title_trgm_idx',\n                fields=['title'],\n                opclasses=['gin_trgm_ops']\n            ),\n        ]\n        constraints = [\n            # 普通唯一约束：url + target 组合唯一\n            models.UniqueConstraint(\n                fields=['url', 'target'],\n                name='unique_website_url_target'\n            )\n        ]\n\n    def __str__(self):\n        return str(self.url or f'Website {self.id}')\n\n\nclass Directory(models.Model):\n    \"\"\"\n    目录模型\n    \"\"\"\n\n    id = models.AutoField(primary_key=True)\n    target = models.ForeignKey(\n        'targets.Target',\n        on_delete=models.CASCADE,\n        related_name='directories',\n        help_text='所属的扫描目标'\n    )\n    \n    url = models.CharField(\n        null=False,\n        blank=False,\n        max_length=2000,\n        help_text='完整请求 URL'\n    )\n    status = models.IntegerField(\n        null=True,\n        blank=True,\n        help_text='HTTP 响应状态码'\n    )\n    content_length = models.BigIntegerField(\n        null=True,\n        blank=True,\n        help_text='响应体字节大小（Content-Length 或实际长度）'\n    )\n    words = models.IntegerField(\n        null=True,\n        blank=True,\n        help_text='响应体中单词数量（按空格分割）'\n    )\n    lines = models.IntegerField(\n        null=True,\n        blank=True,\n        help_text='响应体行数（按换行符分割）'\n    )\n    content_type = models.CharField(\n        max_length=200,\n        blank=True,\n        default='',\n        help_text='响应头 Content-Type 值'\n    )\n    duration = models.BigIntegerField(\n        null=True,\n        blank=True,\n        help_text='请求耗时（单位：纳秒）'\n    )\n    \n    created_at = models.DateTimeField(auto_now_add=True, help_text='创建时间')\n\n    class Meta:\n        db_table = 'directory'\n        verbose_name = '目录'\n        verbose_name_plural = '目录'\n        ordering = ['-created_at']\n        indexes = [\n            models.Index(fields=['-created_at']),\n            models.Index(fields=['target']),     # 优化从target_id快速查找下面的目录\n            models.Index(fields=['url']),        # URL索引，优化搜索和唯一约束\n            models.Index(fields=['status']),     # 状态码索引，优化筛选\n            # pg_trgm GIN 索引，支持 LIKE '%keyword%' 模糊搜索\n            GinIndex(\n                name='directory_url_trgm_idx',\n                fields=['url'],\n                opclasses=['gin_trgm_ops']\n            ),\n        ]\n        constraints = [\n            # 普通唯一约束：target + url 组合唯一\n            models.UniqueConstraint(\n                fields=['target', 'url'],\n                name='unique_directory_url_target'\n            ),\n        ]\n\n    def __str__(self):\n        return str(self.url or f'Directory {self.id}')\n\n\nclass HostPortMapping(models.Model):\n    \"\"\"\n    主机端口映射表\n    \n    设计特点：\n    - 存储主机（host）、IP、端口的三元映射关系\n    - 只关联 target_id，不关联其他资产表\n    - target + host + ip + port 组成复合唯一约束\n    \"\"\"\n\n    id = models.AutoField(primary_key=True)\n    \n    # ==================== 关联字段 ====================\n    target = models.ForeignKey(\n        'targets.Target',\n        on_delete=models.CASCADE,\n        related_name='host_port_mappings',\n        help_text='所属的扫描目标'\n    )\n    \n    # ==================== 核心字段 ====================\n    host = models.CharField(\n        max_length=1000,\n        blank=False,\n        help_text='主机名（域名或IP）'\n    )\n    ip = models.GenericIPAddressField(\n        blank=False,\n        help_text='IP地址'\n    )\n    port = models.IntegerField(\n        blank=False,\n        validators=[\n            MinValueValidator(1, message='端口号必须大于等于1'),\n            MaxValueValidator(65535, message='端口号必须小于等于65535')\n        ],\n        help_text='端口号（1-65535）'\n    )\n    \n    # ==================== 时间字段 ====================\n    created_at = models.DateTimeField(\n        auto_now_add=True,\n        help_text='创建时间'\n    )\n\n    class Meta:\n        db_table = 'host_port_mapping'\n        verbose_name = '主机端口映射'\n        verbose_name_plural = '主机端口映射'\n        ordering = ['-created_at']\n        indexes = [\n            models.Index(fields=['target']),           # 优化按目标查询\n            models.Index(fields=['host']),             # 优化按主机名查询\n            models.Index(fields=['ip']),               # 优化按IP查询\n            models.Index(fields=['port']),             # 优化按端口查询\n            models.Index(fields=['host', 'ip']),       # 优化组合查询\n            models.Index(fields=['-created_at']),   # 优化时间排序\n        ]\n        constraints = [\n            # 复合唯一约束：target + host + ip + port 组合唯一\n            models.UniqueConstraint(\n                fields=['target', 'host', 'ip', 'port'],\n                name='unique_target_host_ip_port'\n            ),\n        ]\n\n    def __str__(self):\n        return f'{self.host} ({self.ip}:{self.port})'\n\n\nclass Vulnerability(models.Model):\n    \"\"\"\n    漏洞模型（资产表）\n    \n    存储发现的漏洞资产，与 Target 关联。\n    扫描历史记录存储在 VulnerabilitySnapshot 快照表中。\n    \"\"\"\n    \n    # 延迟导入避免循环引用\n    from apps.common.definitions import VulnSeverity\n\n    id = models.AutoField(primary_key=True)\n    target = models.ForeignKey(\n        'targets.Target',\n        on_delete=models.CASCADE,\n        related_name='vulnerabilities',\n        help_text='所属的扫描目标'\n    )\n    \n    # ==================== 核心字段 ====================\n    url = models.CharField(max_length=2000, help_text='漏洞所在的URL')\n    vuln_type = models.CharField(max_length=100, help_text='漏洞类型（如 xss, sqli）')\n    severity = models.CharField(\n        max_length=20,\n        choices=VulnSeverity.choices,\n        default=VulnSeverity.UNKNOWN,\n        help_text='严重性（未知/信息/低/中/高/危急）'\n    )\n    source = models.CharField(max_length=50, blank=True, default='', help_text='来源工具（如 dalfox, nuclei, crlfuzz）')\n    cvss_score = models.DecimalField(max_digits=3, decimal_places=1, null=True, blank=True, help_text='CVSS 评分（0.0-10.0）')\n    description = models.TextField(blank=True, default='', help_text='漏洞描述')\n    raw_output = models.JSONField(blank=True, default=dict, help_text='工具原始输出')\n    \n    # ==================== 时间字段 ====================\n    created_at = models.DateTimeField(auto_now_add=True, help_text='创建时间')\n\n    class Meta:\n        db_table = 'vulnerability'\n        verbose_name = '漏洞'\n        verbose_name_plural = '漏洞'\n        ordering = ['-created_at']\n        indexes = [\n            models.Index(fields=['target']),\n            models.Index(fields=['vuln_type']),\n            models.Index(fields=['severity']),\n            models.Index(fields=['source']),\n            models.Index(fields=['url']),          # url索引，优化智能过滤搜索\n            models.Index(fields=['-created_at']),\n        ]\n\n    def __str__(self):\n        return f'{self.vuln_type} - {self.url[:50]}'\n"
  },
  {
    "path": "backend/apps/asset/models/screenshot_models.py",
    "content": "from django.db import models\n\n\nclass ScreenshotSnapshot(models.Model):\n    \"\"\"\n    截图快照\n    \n    记录：某次扫描中捕获的网站截图\n    \"\"\"\n\n    id = models.AutoField(primary_key=True)\n    scan = models.ForeignKey(\n        'scan.Scan',\n        on_delete=models.CASCADE,\n        related_name='screenshot_snapshots',\n        help_text='所属的扫描任务'\n    )\n    url = models.TextField(help_text='截图对应的 URL')\n    status_code = models.SmallIntegerField(null=True, blank=True, help_text='HTTP 响应状态码')\n    image = models.BinaryField(help_text='截图 WebP 二进制数据（压缩后）')\n    created_at = models.DateTimeField(auto_now_add=True, help_text='创建时间')\n\n    class Meta:\n        db_table = 'screenshot_snapshot'\n        verbose_name = '截图快照'\n        verbose_name_plural = '截图快照'\n        ordering = ['-created_at']\n        indexes = [\n            models.Index(fields=['scan']),\n            models.Index(fields=['-created_at']),\n        ]\n        constraints = [\n            models.UniqueConstraint(\n                fields=['scan', 'url'],\n                name='unique_screenshot_per_scan_snapshot'\n            ),\n        ]\n\n    def __str__(self):\n        return f'{self.url} (Scan #{self.scan_id})'\n\n\nclass Screenshot(models.Model):\n    \"\"\"\n    截图资产\n    \n    存储：目标的最新截图（从快照同步）\n    \"\"\"\n\n    id = models.AutoField(primary_key=True)\n    target = models.ForeignKey(\n        'targets.Target',\n        on_delete=models.CASCADE,\n        related_name='screenshots',\n        help_text='所属目标'\n    )\n    url = models.TextField(help_text='截图对应的 URL')\n    status_code = models.SmallIntegerField(null=True, blank=True, help_text='HTTP 响应状态码')\n    image = models.BinaryField(help_text='截图 WebP 二进制数据（压缩后）')\n    created_at = models.DateTimeField(auto_now_add=True, help_text='创建时间')\n    updated_at = models.DateTimeField(auto_now=True, help_text='更新时间')\n\n    class Meta:\n        db_table = 'screenshot'\n        verbose_name = '截图'\n        verbose_name_plural = '截图'\n        ordering = ['-created_at']\n        indexes = [\n            models.Index(fields=['target']),\n            models.Index(fields=['-created_at']),\n        ]\n        constraints = [\n            models.UniqueConstraint(\n                fields=['target', 'url'],\n                name='unique_screenshot_per_target'\n            ),\n        ]\n\n    def __str__(self):\n        return f'{self.url} (Target #{self.target_id})'\n"
  },
  {
    "path": "backend/apps/asset/models/snapshot_models.py",
    "content": "from django.db import models\nfrom django.contrib.postgres.fields import ArrayField\nfrom django.contrib.postgres.indexes import GinIndex\nfrom django.core.validators import MinValueValidator, MaxValueValidator\n\n\nclass SubdomainSnapshot(models.Model):\n    \"\"\"子域名快照\"\"\"\n\n    id = models.AutoField(primary_key=True)\n    scan = models.ForeignKey(\n        'scan.Scan',\n        on_delete=models.CASCADE,\n        related_name='subdomain_snapshots',\n        help_text='所属的扫描任务'\n    )\n    \n    name = models.CharField(max_length=1000, help_text='子域名名称')\n    created_at = models.DateTimeField(auto_now_add=True, help_text='创建时间')\n    \n    class Meta:\n        db_table = 'subdomain_snapshot'\n        verbose_name = '子域名快照'\n        verbose_name_plural = '子域名快照'\n        ordering = ['-created_at']\n        indexes = [\n            models.Index(fields=['scan']),\n            models.Index(fields=['name']),\n            models.Index(fields=['-created_at']),\n            # pg_trgm GIN 索引，支持 LIKE '%keyword%' 模糊搜索\n            GinIndex(\n                name='subdomain_snap_name_trgm',\n                fields=['name'],\n                opclasses=['gin_trgm_ops']\n            ),\n        ]\n        constraints = [\n            # 唯一约束：同一次扫描中，同一个子域名只能记录一次\n            models.UniqueConstraint(\n                fields=['scan', 'name'],\n                name='unique_subdomain_per_scan_snapshot'\n            ),\n        ]\n\n    def __str__(self):\n        return f'{self.name} (Scan #{self.scan_id})'\n\nclass WebsiteSnapshot(models.Model):\n    \"\"\"\n    网站快照\n    \n    记录：某次扫描中发现的网站\n    \"\"\"\n\n    id = models.AutoField(primary_key=True)\n    scan = models.ForeignKey(\n        'scan.Scan',\n        on_delete=models.CASCADE,\n        related_name='website_snapshots',\n        help_text='所属的扫描任务'\n    )\n    \n    # 扫描结果数据\n    url = models.TextField(help_text='站点URL')\n    host = models.CharField(max_length=253, blank=True, default='', help_text='主机名（域名或IP地址）')\n    title = models.TextField(blank=True, default='', help_text='页面标题')\n    status_code = models.IntegerField(null=True, blank=True, help_text='HTTP状态码')\n    content_length = models.BigIntegerField(null=True, blank=True, help_text='内容长度')\n    location = models.TextField(blank=True, default='', help_text='重定向位置')\n    webserver = models.TextField(blank=True, default='', help_text='Web服务器')\n    content_type = models.TextField(blank=True, default='', help_text='内容类型')\n    tech = ArrayField(\n        models.CharField(max_length=100),\n        blank=True,\n        default=list,\n        help_text='技术栈'\n    )\n    response_body = models.TextField(blank=True, default='', help_text='HTTP响应体')\n    vhost = models.BooleanField(null=True, blank=True, help_text='虚拟主机标志')\n    response_headers = models.TextField(\n        blank=True,\n        default='',\n        help_text='原始HTTP响应头'\n    )\n    created_at = models.DateTimeField(auto_now_add=True, help_text='创建时间')\n\n    class Meta:\n        db_table = 'website_snapshot'\n        verbose_name = '网站快照'\n        verbose_name_plural = '网站快照'\n        ordering = ['-created_at']\n        indexes = [\n            models.Index(fields=['scan']),\n            models.Index(fields=['url']),\n            models.Index(fields=['host']),  # host索引，优化根据主机名查询\n            models.Index(fields=['title']),  # title索引，优化标题搜索\n            models.Index(fields=['-created_at']),\n            GinIndex(fields=['tech']),  # GIN索引，优化数组字段查询\n            # pg_trgm GIN 索引，支持 LIKE '%keyword%' 模糊搜索\n            GinIndex(\n                name='ws_snap_resp_hdr_trgm',\n                fields=['response_headers'],\n                opclasses=['gin_trgm_ops']\n            ),\n            GinIndex(\n                name='ws_snap_url_trgm',\n                fields=['url'],\n                opclasses=['gin_trgm_ops']\n            ),\n            GinIndex(\n                name='ws_snap_title_trgm',\n                fields=['title'],\n                opclasses=['gin_trgm_ops']\n            ),\n        ]\n        constraints = [\n            # 唯一约束：同一次扫描中，同一个URL只能记录一次\n            models.UniqueConstraint(\n                fields=['scan', 'url'],\n                name='unique_website_per_scan_snapshot'\n            ),\n        ]\n\n    def __str__(self):\n        return f'{self.url} (Scan #{self.scan_id})'\n\n\nclass DirectorySnapshot(models.Model):\n    \"\"\"\n    目录快照\n    \n    记录：某次扫描中发现的目录\n    \"\"\"\n\n    id = models.AutoField(primary_key=True)\n    scan = models.ForeignKey(\n        'scan.Scan',\n        on_delete=models.CASCADE,\n        related_name='directory_snapshots',\n        help_text='所属的扫描任务'\n    )\n    \n    # 扫描结果数据\n    url = models.CharField(max_length=2000, help_text='目录URL')\n    status = models.IntegerField(null=True, blank=True, help_text='HTTP状态码')\n    content_length = models.BigIntegerField(null=True, blank=True, help_text='内容长度')\n    words = models.IntegerField(null=True, blank=True, help_text='响应体中单词数量（按空格分割）')\n    lines = models.IntegerField(null=True, blank=True, help_text='响应体行数（按换行符分割）')\n    content_type = models.CharField(max_length=200, blank=True, default='', help_text='响应头 Content-Type 值')\n    duration = models.BigIntegerField(null=True, blank=True, help_text='请求耗时（单位：纳秒）')\n    created_at = models.DateTimeField(auto_now_add=True, help_text='创建时间')\n\n    class Meta:\n        db_table = 'directory_snapshot'\n        verbose_name = '目录快照'\n        verbose_name_plural = '目录快照'\n        ordering = ['-created_at']\n        indexes = [\n            models.Index(fields=['scan']),\n            models.Index(fields=['url']),\n            models.Index(fields=['status']),  # 状态码索引，优化筛选\n            models.Index(fields=['content_type']),  # content_type索引，优化内容类型搜索\n            models.Index(fields=['-created_at']),\n            # pg_trgm GIN 索引，支持 LIKE '%keyword%' 模糊搜索\n            GinIndex(\n                name='dir_snap_url_trgm',\n                fields=['url'],\n                opclasses=['gin_trgm_ops']\n            ),\n        ]\n        constraints = [\n            # 唯一约束：同一次扫描中，同一个目录URL只能记录一次\n            models.UniqueConstraint(\n                fields=['scan', 'url'],\n                name='unique_directory_per_scan_snapshot'\n            ),\n        ]\n\n    def __str__(self):\n        return f'{self.url} (Scan #{self.scan_id})'\n\n\nclass HostPortMappingSnapshot(models.Model):\n    \"\"\"\n    主机端口映射快照表\n    \n    设计特点：\n    - 存储某次扫描中发现的主机（host）、IP、端口的三元映射关系\n    - 主关联 scan_id，记录扫描历史\n    - scan + host + ip + port 组成复合唯一约束\n    \"\"\"\n\n    id = models.AutoField(primary_key=True)\n    \n    # ==================== 关联字段 ====================\n    scan = models.ForeignKey(\n        'scan.Scan',\n        on_delete=models.CASCADE,\n        related_name='host_port_mapping_snapshots',\n        help_text='所属的扫描任务（主关联）'\n    )\n    \n    # ==================== 核心字段 ====================\n    host = models.CharField(\n        max_length=1000,\n        blank=False,\n        help_text='主机名（域名或IP）'\n    )\n    ip = models.GenericIPAddressField(\n        blank=False,\n        help_text='IP地址'\n    )\n    port = models.IntegerField(\n        blank=False,\n        validators=[\n            MinValueValidator(1, message='端口号必须大于等于1'),\n            MaxValueValidator(65535, message='端口号必须小于等于65535')\n        ],\n        help_text='端口号（1-65535）'\n    )\n    \n    # ==================== 时间字段 ====================\n    created_at = models.DateTimeField(\n        auto_now_add=True,\n        help_text='创建时间'\n    )\n\n    class Meta:\n        db_table = 'host_port_mapping_snapshot'\n        verbose_name = '主机端口映射快照'\n        verbose_name_plural = '主机端口映射快照'\n        ordering = ['-created_at']\n        indexes = [\n            models.Index(fields=['scan']),             # 优化按扫描查询\n            models.Index(fields=['host']),             # 优化按主机名查询\n            models.Index(fields=['ip']),               # 优化按IP查询\n            models.Index(fields=['port']),             # 优化按端口查询\n            models.Index(fields=['host', 'ip']),       # 优化组合查询\n            models.Index(fields=['scan', 'host']),     # 优化扫描+主机查询\n            models.Index(fields=['-created_at']),   # 优化时间排序\n        ]\n        constraints = [\n            # 复合唯一约束：同一次扫描中，scan + host + ip + port 组合唯一\n            models.UniqueConstraint(\n                fields=['scan', 'host', 'ip', 'port'],\n                name='unique_scan_host_ip_port_snapshot'\n            ),\n        ]\n\n    def __str__(self):\n        return f'{self.host} ({self.ip}:{self.port}) [Scan #{self.scan_id}]'\n\n\nclass EndpointSnapshot(models.Model):\n    \"\"\"\n    端点快照\n    \n    记录：某次扫描中发现的端点\n    \"\"\"\n\n    id = models.AutoField(primary_key=True)\n    scan = models.ForeignKey(\n        'scan.Scan',\n        on_delete=models.CASCADE,\n        related_name='endpoint_snapshots',\n        help_text='所属的扫描任务'\n    )\n    \n    # 扫描结果数据\n    url = models.TextField(help_text='端点URL')\n    host = models.CharField(\n        max_length=253,\n        blank=True,\n        default='',\n        help_text='主机名（域名或IP地址）'\n    )\n    title = models.TextField(blank=True, default='', help_text='页面标题')\n    status_code = models.IntegerField(null=True, blank=True, help_text='HTTP状态码')\n    content_length = models.IntegerField(null=True, blank=True, help_text='内容长度')\n    location = models.TextField(blank=True, default='', help_text='重定向位置')\n    webserver = models.TextField(blank=True, default='', help_text='Web服务器')\n    content_type = models.TextField(blank=True, default='', help_text='内容类型')\n    tech = ArrayField(\n        models.CharField(max_length=100),\n        blank=True,\n        default=list,\n        help_text='技术栈'\n    )\n    response_body = models.TextField(blank=True, default='', help_text='HTTP响应体')\n    vhost = models.BooleanField(null=True, blank=True, help_text='虚拟主机标志')\n    matched_gf_patterns = ArrayField(\n        models.CharField(max_length=100),\n        blank=True,\n        default=list,\n        help_text='匹配的GF模式列表'\n    )\n    response_headers = models.TextField(\n        blank=True,\n        default='',\n        help_text='原始HTTP响应头'\n    )\n    created_at = models.DateTimeField(auto_now_add=True, help_text='创建时间')\n\n    class Meta:\n        db_table = 'endpoint_snapshot'\n        verbose_name = '端点快照'\n        verbose_name_plural = '端点快照'\n        ordering = ['-created_at']\n        indexes = [\n            models.Index(fields=['scan']),\n            models.Index(fields=['url']),\n            models.Index(fields=['host']),  # host索引，优化根据主机名查询\n            models.Index(fields=['title']),  # title索引，优化标题搜索\n            models.Index(fields=['status_code']),  # 状态码索引，优化筛选\n            models.Index(fields=['webserver']),  # webserver索引，优化服务器搜索\n            models.Index(fields=['-created_at']),\n            GinIndex(fields=['tech']),  # GIN索引，优化数组字段查询\n            # pg_trgm GIN 索引，支持 LIKE '%keyword%' 模糊搜索\n            GinIndex(\n                name='ep_snap_resp_hdr_trgm',\n                fields=['response_headers'],\n                opclasses=['gin_trgm_ops']\n            ),\n            GinIndex(\n                name='ep_snap_url_trgm',\n                fields=['url'],\n                opclasses=['gin_trgm_ops']\n            ),\n            GinIndex(\n                name='ep_snap_title_trgm',\n                fields=['title'],\n                opclasses=['gin_trgm_ops']\n            ),\n        ]\n        constraints = [\n            # 唯一约束：同一次扫描中，同一个URL只能记录一次\n            models.UniqueConstraint(\n                fields=['scan', 'url'],\n                name='unique_endpoint_per_scan_snapshot'\n            ),\n        ]\n\n    def __str__(self):\n        return f'{self.url} (Scan #{self.scan_id})'\n\n\nclass VulnerabilitySnapshot(models.Model):\n    \"\"\"\n    漏洞快照\n    \n    记录：某次扫描中发现的漏洞\n    \"\"\"\n    \n    # 延迟导入避免循环引用\n    from apps.common.definitions import VulnSeverity\n\n    id = models.AutoField(primary_key=True)\n    scan = models.ForeignKey(\n        'scan.Scan',\n        on_delete=models.CASCADE,\n        related_name='vulnerability_snapshots',\n        help_text='所属的扫描任务'\n    )\n    \n    # ==================== 核心字段 ====================\n    url = models.CharField(max_length=2000, help_text='漏洞所在的URL')\n    vuln_type = models.CharField(max_length=100, help_text='漏洞类型（如 xss, sqli）')\n    severity = models.CharField(\n        max_length=20,\n        choices=VulnSeverity.choices,\n        default=VulnSeverity.UNKNOWN,\n        help_text='严重性（未知/信息/低/中/高/危急）'\n    )\n    source = models.CharField(max_length=50, blank=True, default='', help_text='来源工具（如 dalfox, nuclei, crlfuzz）')\n    cvss_score = models.DecimalField(max_digits=3, decimal_places=1, null=True, blank=True, help_text='CVSS 评分（0.0-10.0）')\n    description = models.TextField(blank=True, default='', help_text='漏洞描述')\n    raw_output = models.JSONField(blank=True, default=dict, help_text='工具原始输出')\n    \n    # ==================== 时间字段 ====================\n    created_at = models.DateTimeField(auto_now_add=True, help_text='创建时间')\n\n    class Meta:\n        db_table = 'vulnerability_snapshot'\n        verbose_name = '漏洞快照'\n        verbose_name_plural = '漏洞快照'\n        ordering = ['-created_at']\n        indexes = [\n            models.Index(fields=['scan']),\n            models.Index(fields=['url']),  # url索引，优化URL搜索\n            models.Index(fields=['vuln_type']),\n            models.Index(fields=['severity']),\n            models.Index(fields=['source']),\n            models.Index(fields=['-created_at']),\n        ]\n\n    def __str__(self):\n        return f'{self.vuln_type} - {self.url[:50]} (Scan #{self.scan_id})'"
  },
  {
    "path": "backend/apps/asset/models/statistics_models.py",
    "content": "from django.db import models\n\n\nclass AssetStatistics(models.Model):\n    \"\"\"\n    资产统计表\n    \n    存储预聚合的全局统计数据，避免仪表盘实时 COUNT 大表。\n    由定时任务（Prefect Flow）定期刷新。\n    \"\"\"\n\n    id = models.AutoField(primary_key=True)\n    \n    # ==================== 当前统计字段 ====================\n    total_targets = models.IntegerField(default=0, help_text='目标总数')\n    total_subdomains = models.IntegerField(default=0, help_text='子域名总数')\n    total_ips = models.IntegerField(default=0, help_text='IP地址总数')\n    total_endpoints = models.IntegerField(default=0, help_text='端点总数')\n    total_websites = models.IntegerField(default=0, help_text='网站总数')\n    total_vulns = models.IntegerField(default=0, help_text='漏洞总数')\n    total_assets = models.IntegerField(default=0, help_text='总资产数（子域名+IP+端点+网站）')\n    \n    # ==================== 上次统计字段（用于计算趋势）====================\n    prev_targets = models.IntegerField(default=0, help_text='上次目标总数')\n    prev_subdomains = models.IntegerField(default=0, help_text='上次子域名总数')\n    prev_ips = models.IntegerField(default=0, help_text='上次IP地址总数')\n    prev_endpoints = models.IntegerField(default=0, help_text='上次端点总数')\n    prev_websites = models.IntegerField(default=0, help_text='上次网站总数')\n    prev_vulns = models.IntegerField(default=0, help_text='上次漏洞总数')\n    prev_assets = models.IntegerField(default=0, help_text='上次总资产数')\n    \n    # ==================== 时间字段 ====================\n    updated_at = models.DateTimeField(auto_now=True, help_text='最后更新时间')\n\n    class Meta:\n        db_table = 'asset_statistics'\n        verbose_name = '资产统计'\n        verbose_name_plural = '资产统计'\n\n    def __str__(self):\n        return f'AssetStatistics (updated: {self.updated_at})'\n\n    @classmethod\n    def get_or_create_singleton(cls) -> 'AssetStatistics':\n        \"\"\"获取或创建单例统计记录\"\"\"\n        obj, _ = cls.objects.get_or_create(pk=1)\n        return obj\n\n\nclass StatisticsHistory(models.Model):\n    \"\"\"\n    统计历史表（用于折线图）\n    \n    每天记录一条快照，用于展示趋势。\n    由定时任务在刷新统计时自动写入。\n    \"\"\"\n    \n    date = models.DateField(unique=True, help_text='统计日期')\n    \n    # 各类资产数量\n    total_targets = models.IntegerField(default=0, help_text='目标总数')\n    total_subdomains = models.IntegerField(default=0, help_text='子域名总数')\n    total_ips = models.IntegerField(default=0, help_text='IP地址总数')\n    total_endpoints = models.IntegerField(default=0, help_text='端点总数')\n    total_websites = models.IntegerField(default=0, help_text='网站总数')\n    total_vulns = models.IntegerField(default=0, help_text='漏洞总数')\n    total_assets = models.IntegerField(default=0, help_text='总资产数')\n    \n    created_at = models.DateTimeField(auto_now_add=True, help_text='创建时间')\n    updated_at = models.DateTimeField(auto_now=True, help_text='更新时间')\n    \n    class Meta:\n        db_table = 'statistics_history'\n        verbose_name = '统计历史'\n        verbose_name_plural = '统计历史'\n        ordering = ['-date']\n        indexes = [\n            models.Index(fields=['date']),\n        ]\n    \n    def __str__(self):\n        return f'StatisticsHistory ({self.date})'\n"
  },
  {
    "path": "backend/apps/asset/repositories/__init__.py",
    "content": "\"\"\"Asset Repositories - 数据访问层\"\"\"\n\n# 资产模块 Repositories\nfrom .asset import (\n    DjangoSubdomainRepository,\n    DjangoWebSiteRepository,\n    DjangoDirectoryRepository,\n    DjangoHostPortMappingRepository,\n    DjangoEndpointRepository,\n)\n\n# 快照模块 Repositories\nfrom .snapshot import (\n    DjangoSubdomainSnapshotRepository,\n    DjangoHostPortMappingSnapshotRepository,\n    DjangoWebsiteSnapshotRepository,\n    DjangoDirectorySnapshotRepository,\n    DjangoEndpointSnapshotRepository,\n)\n\n# 统计模块 Repository\nfrom .statistics_repository import AssetStatisticsRepository\n\n__all__ = [\n    # 资产模块\n    'DjangoSubdomainRepository',\n    'DjangoWebSiteRepository',\n    'DjangoDirectoryRepository',\n    'DjangoHostPortMappingRepository',\n    'DjangoEndpointRepository',\n    # 快照模块\n    'DjangoSubdomainSnapshotRepository',\n    'DjangoHostPortMappingSnapshotRepository',\n    'DjangoWebsiteSnapshotRepository',\n    'DjangoDirectorySnapshotRepository',\n    'DjangoEndpointSnapshotRepository',\n    # 统计模块\n    'AssetStatisticsRepository',\n]\n\n\n"
  },
  {
    "path": "backend/apps/asset/repositories/asset/__init__.py",
    "content": "\"\"\"Asset Repositories - 数据访问层\"\"\"\n\nfrom .subdomain_repository import DjangoSubdomainRepository\nfrom .website_repository import DjangoWebSiteRepository\nfrom .directory_repository import DjangoDirectoryRepository\nfrom .host_port_mapping_repository import DjangoHostPortMappingRepository\nfrom .endpoint_repository import DjangoEndpointRepository\n\n__all__ = [\n    'DjangoSubdomainRepository',\n    'DjangoWebSiteRepository',\n    'DjangoDirectoryRepository',\n    'DjangoHostPortMappingRepository',\n    'DjangoEndpointRepository',\n]\n"
  },
  {
    "path": "backend/apps/asset/repositories/asset/directory_repository.py",
    "content": "\"\"\"\nDjango ORM 实现的 Directory Repository\n\"\"\"\n\nimport logging\nfrom typing import List, Iterator\nfrom django.db import transaction\n\nfrom apps.asset.models.asset_models import Directory\nfrom apps.asset.dtos import DirectoryDTO\nfrom apps.common.decorators import auto_ensure_db_connection\nfrom apps.common.utils import deduplicate_for_bulk\n\nlogger = logging.getLogger(__name__)\n\n\n@auto_ensure_db_connection\nclass DjangoDirectoryRepository:\n    \"\"\"Django ORM 实现的 Directory Repository\"\"\"\n\n    def bulk_upsert(self, items: List[DirectoryDTO]) -> int:\n        \"\"\"\n        批量创建或更新 Directory（upsert）\n        \n        存在则更新所有字段，不存在则创建。\n        使用 Django 原生 update_conflicts。\n        \n        注意：自动按模型唯一约束去重，保留最后一条记录。\n        \n        Args:\n            items: Directory DTO 列表\n            \n        Returns:\n            int: 处理的记录数\n        \"\"\"\n        if not items:\n            return 0\n        \n        try:\n            # 自动按模型唯一约束去重\n            unique_items = deduplicate_for_bulk(items, Directory)\n            \n            # 直接从 DTO 字段构建 Model\n            directories = [\n                Directory(\n                    target_id=item.target_id,\n                    url=item.url,\n                    status=item.status,\n                    content_length=item.content_length,\n                    words=item.words,\n                    lines=item.lines,\n                    content_type=item.content_type or '',\n                    duration=item.duration\n                )\n                for item in unique_items\n            ]\n            \n            with transaction.atomic():\n                Directory.objects.bulk_create(\n                    directories,\n                    update_conflicts=True,\n                    unique_fields=['target', 'url'],\n                    update_fields=[\n                        'status', 'content_length', 'words',\n                        'lines', 'content_type', 'duration'\n                    ],\n                    batch_size=1000\n                )\n            \n            logger.debug(f\"批量 upsert Directory 成功: {len(unique_items)} 条\")\n            return len(unique_items)\n                \n        except Exception as e:\n            logger.error(f\"批量 upsert Directory 失败: {e}\")\n            raise\n\n    def bulk_create_ignore_conflicts(self, items: List[DirectoryDTO]) -> int:\n        \"\"\"\n        批量创建 Directory（存在即跳过）\n        \n        与 bulk_upsert 不同，此方法不会更新已存在的记录。\n        适用于批量添加场景，只提供 URL，没有其他字段数据。\n        \n        注意：自动按模型唯一约束去重，保留最后一条记录。\n        \n        Args:\n            items: Directory DTO 列表\n            \n        Returns:\n            int: 处理的记录数\n        \"\"\"\n        if not items:\n            return 0\n        \n        try:\n            # 自动按模型唯一约束去重\n            unique_items = deduplicate_for_bulk(items, Directory)\n            \n            directories = [\n                Directory(\n                    target_id=item.target_id,\n                    url=item.url,\n                    status=item.status,\n                    content_length=item.content_length,\n                    words=item.words,\n                    lines=item.lines,\n                    content_type=item.content_type or '',\n                    duration=item.duration\n                )\n                for item in unique_items\n            ]\n            \n            with transaction.atomic():\n                Directory.objects.bulk_create(\n                    directories,\n                    ignore_conflicts=True,\n                    batch_size=1000\n                )\n            \n            logger.debug(f\"批量创建 Directory 成功（ignore_conflicts）: {len(unique_items)} 条\")\n            return len(unique_items)\n                \n        except Exception as e:\n            logger.error(f\"批量创建 Directory 失败: {e}\")\n            raise\n\n    def count_by_target(self, target_id: int) -> int:\n        \"\"\"统计目标下的目录总数\"\"\"\n        return Directory.objects.filter(target_id=target_id).count()\n\n    def get_all(self):\n        \"\"\"获取所有目录\"\"\"\n        return Directory.objects.all().order_by('-created_at')\n\n    def get_by_target(self, target_id: int):\n        \"\"\"获取目标下的所有目录\"\"\"\n        return Directory.objects.filter(target_id=target_id).order_by('-created_at')\n\n    def get_urls_for_export(self, target_id: int, batch_size: int = 1000) -> Iterator[str]:\n        \"\"\"流式导出目标下的所有目录 URL\"\"\"\n        try:\n            queryset = (\n                Directory.objects\n                .filter(target_id=target_id)\n                .values_list('url', flat=True)\n                .order_by('url')\n                .iterator(chunk_size=batch_size)\n            )\n            for url in queryset:\n                yield url\n        except Exception as e:\n            logger.error(\"流式导出目录 URL 失败 - Target ID: %s, 错误: %s\", target_id, e)\n            raise\n\n    def iter_raw_data_for_export(\n        self, \n        target_id: int,\n        batch_size: int = 1000\n    ) -> Iterator[dict]:\n        \"\"\"\n        流式获取原始数据用于 CSV 导出\n        \n        Args:\n            target_id: 目标 ID\n            batch_size: 每批数据量\n        \n        Yields:\n            包含所有目录字段的字典\n        \"\"\"\n        qs = (\n            Directory.objects\n            .filter(target_id=target_id)\n            .values(\n                'url', 'status', 'content_length', 'words',\n                'lines', 'content_type', 'duration', 'created_at'\n            )\n            .order_by('url')\n        )\n        \n        for row in qs.iterator(chunk_size=batch_size):\n            yield row\n"
  },
  {
    "path": "backend/apps/asset/repositories/asset/endpoint_repository.py",
    "content": "\"\"\"Endpoint Repository - Django ORM 实现\"\"\"\n\nimport logging\nfrom typing import List, Iterator\n\nfrom apps.asset.models import Endpoint\nfrom apps.asset.dtos.asset import EndpointDTO\nfrom apps.common.decorators import auto_ensure_db_connection\nfrom apps.common.utils import deduplicate_for_bulk\nfrom django.db import transaction\n\nlogger = logging.getLogger(__name__)\n\n\n@auto_ensure_db_connection\nclass DjangoEndpointRepository:\n    \"\"\"端点 Repository - 负责端点表的数据访问\"\"\"\n    \n    def bulk_upsert(self, items: List[EndpointDTO]) -> int:\n        \"\"\"\n        批量创建或更新端点（upsert）\n        \n        存在则更新所有字段，不存在则创建。\n        使用 Django 原生 update_conflicts。\n        \n        注意：自动按模型唯一约束去重，保留最后一条记录。\n        \n        Args:\n            items: 端点 DTO 列表\n            \n        Returns:\n            int: 处理的记录数\n        \"\"\"\n        if not items:\n            return 0\n        \n        try:\n            # 自动按模型唯一约束去重\n            unique_items = deduplicate_for_bulk(items, Endpoint)\n            \n            # 直接从 DTO 字段构建 Model\n            endpoints = [\n                Endpoint(\n                    target_id=item.target_id,\n                    url=item.url,\n                    host=item.host or '',\n                    title=item.title or '',\n                    status_code=item.status_code,\n                    content_length=item.content_length,\n                    webserver=item.webserver or '',\n                    response_body=item.response_body or '',\n                    content_type=item.content_type or '',\n                    tech=item.tech if item.tech else [],\n                    vhost=item.vhost,\n                    location=item.location or '',\n                    matched_gf_patterns=item.matched_gf_patterns if item.matched_gf_patterns else [],\n                    response_headers=item.response_headers if item.response_headers else ''\n                )\n                for item in unique_items\n            ]\n            \n            with transaction.atomic():\n                Endpoint.objects.bulk_create(\n                    endpoints,\n                    update_conflicts=True,\n                    unique_fields=['url', 'target'],\n                    update_fields=[\n                        'host', 'title', 'status_code', 'content_length',\n                        'webserver', 'response_body', 'content_type', 'tech',\n                        'vhost', 'location', 'matched_gf_patterns', 'response_headers'\n                    ],\n                    batch_size=1000\n                )\n            \n            logger.debug(f\"批量 upsert 端点成功: {len(unique_items)} 条\")\n            return len(unique_items)\n                \n        except Exception as e:\n            logger.error(f\"批量 upsert 端点失败: {e}\")\n            raise\n    \n    def get_all(self):\n        \"\"\"获取所有端点（全局查询）\"\"\"\n        return Endpoint.objects.all().order_by('-created_at')\n    \n    def get_by_target(self, target_id: int):\n        \"\"\"\n        获取目标下的所有端点\n        \n        Args:\n            target_id: 目标 ID\n            \n        Returns:\n            QuerySet: 端点查询集\n        \"\"\"\n        return Endpoint.objects.filter(target_id=target_id).order_by('-created_at')\n    \n    def count_by_target(self, target_id: int) -> int:\n        \"\"\"\n        统计目标下的端点数量\n        \n        Args:\n            target_id: 目标 ID\n            \n        Returns:\n            int: 端点数量\n        \"\"\"\n        return Endpoint.objects.filter(target_id=target_id).count()\n\n    def bulk_create_ignore_conflicts(self, items: List[EndpointDTO]) -> int:\n        \"\"\"\n        批量创建端点（存在即跳过）\n        \n        与 bulk_upsert 不同，此方法不会更新已存在的记录。\n        适用于快速扫描场景，只提供 URL，没有其他字段数据。\n        \n        注意：自动按模型唯一约束去重，保留最后一条记录。\n        \n        Args:\n            items: 端点 DTO 列表\n            \n        Returns:\n            int: 处理的记录数\n        \"\"\"\n        if not items:\n            return 0\n        \n        try:\n            # 自动按模型唯一约束去重\n            unique_items = deduplicate_for_bulk(items, Endpoint)\n            \n            # 直接从 DTO 字段构建 Model\n            endpoints = [\n                Endpoint(\n                    target_id=item.target_id,\n                    url=item.url,\n                    host=item.host or '',\n                    title=item.title or '',\n                    status_code=item.status_code,\n                    content_length=item.content_length,\n                    webserver=item.webserver or '',\n                    response_body=item.response_body or '',\n                    content_type=item.content_type or '',\n                    tech=item.tech if item.tech else [],\n                    vhost=item.vhost,\n                    location=item.location or '',\n                    matched_gf_patterns=item.matched_gf_patterns if item.matched_gf_patterns else [],\n                    response_headers=item.response_headers if item.response_headers else ''\n                )\n                for item in unique_items\n            ]\n            \n            with transaction.atomic():\n                Endpoint.objects.bulk_create(\n                    endpoints,\n                    ignore_conflicts=True,\n                    batch_size=1000\n                )\n            \n            logger.debug(f\"批量创建端点成功（ignore_conflicts）: {len(unique_items)} 条\")\n            return len(unique_items)\n                \n        except Exception as e:\n            logger.error(f\"批量创建端点失败: {e}\")\n            raise\n\n    def iter_raw_data_for_export(\n        self, \n        target_id: int,\n        batch_size: int = 1000\n    ) -> Iterator[dict]:\n        \"\"\"\n        流式获取原始数据用于 CSV 导出\n        \n        Args:\n            target_id: 目标 ID\n            batch_size: 每批数据量\n        \n        Yields:\n            包含所有端点字段的字典\n        \"\"\"\n        qs = (\n            Endpoint.objects\n            .filter(target_id=target_id)\n            .values(\n                'url', 'host', 'location', 'title', 'status_code',\n                'content_length', 'content_type', 'webserver', 'tech',\n                'response_body', 'response_headers', 'vhost', 'matched_gf_patterns', 'created_at'\n            )\n            .order_by('url')\n        )\n        \n        for row in qs.iterator(chunk_size=batch_size):\n            yield row\n"
  },
  {
    "path": "backend/apps/asset/repositories/asset/host_port_mapping_repository.py",
    "content": "\"\"\"HostPortMapping Repository - Django ORM 实现\"\"\"\n\nimport logging\nfrom typing import List, Iterator, Dict, Optional\n\nfrom django.db.models import QuerySet, Min\n\nfrom apps.asset.models.asset_models import HostPortMapping\nfrom apps.asset.dtos.asset import HostPortMappingDTO\nfrom apps.common.decorators import auto_ensure_db_connection\nfrom apps.common.utils import deduplicate_for_bulk\n\nlogger = logging.getLogger(__name__)\n\n\n@auto_ensure_db_connection\nclass DjangoHostPortMappingRepository:\n    \"\"\"HostPortMapping Repository - Django ORM 实现\n    \n    职责：纯数据访问，不包含业务逻辑\n    \"\"\"\n\n    def bulk_create_ignore_conflicts(self, items: List[HostPortMappingDTO]) -> int:\n        \"\"\"\n        批量创建主机端口关联（忽略冲突）\n        \n        注意：自动按模型唯一约束去重，保留最后一条记录。\n        \n        Args:\n            items: 主机端口关联 DTO 列表\n        \n        Returns:\n            int: 实际创建的记录数\n        \"\"\"\n        try:\n            logger.debug(\"准备批量创建主机端口关联 - 数量: %d\", len(items))\n            \n            if not items:\n                logger.debug(\"主机端口关联为空，跳过创建\")\n                return 0\n            \n            # 自动按模型唯一约束去重\n            unique_items = deduplicate_for_bulk(items, HostPortMapping)\n                \n            records = [\n                HostPortMapping(\n                    target_id=item.target_id,\n                    host=item.host,\n                    ip=item.ip,\n                    port=item.port\n                )\n                for item in unique_items\n            ]\n            \n            created = HostPortMapping.objects.bulk_create(\n                records, \n                ignore_conflicts=True\n            )\n            \n            created_count = len(created) if created else 0\n            logger.debug(\"主机端口关联创建完成 - 数量: %d\", created_count)\n            \n            return created_count\n            \n        except Exception as e:\n            logger.error(\n                \"批量创建主机端口关联失败 - 数量: %d, 错误: %s\",\n                len(items),\n                str(e),\n                exc_info=True\n            )\n            raise\n\n    def get_for_export(self, target_id: int, batch_size: int = 1000):\n        queryset = (\n            HostPortMapping.objects\n            .filter(target_id=target_id)\n            .order_by(\"host\", \"port\")\n            .values(\"host\", \"port\")\n            .iterator(chunk_size=batch_size)\n        )\n        for item in queryset:\n            yield item\n\n    def get_ips_for_export(self, target_id: int, batch_size: int = 1000) -> Iterator[str]:\n        \"\"\"流式导出目标下的所有唯一 IP 地址。\"\"\"\n        queryset = (\n            HostPortMapping.objects\n            .filter(target_id=target_id)\n            .values_list(\"ip\", flat=True)\n            .distinct()\n            .order_by(\"ip\")\n            .iterator(chunk_size=batch_size)\n        )\n        for ip in queryset:\n            yield ip\n\n    def get_queryset_by_target(self, target_id: int) -> QuerySet:\n        \"\"\"获取目标下的 QuerySet\"\"\"\n        return HostPortMapping.objects.filter(target_id=target_id)\n\n    def get_all_queryset(self) -> QuerySet:\n        \"\"\"获取所有记录的 QuerySet\"\"\"\n        return HostPortMapping.objects.all()\n\n    def get_queryset_by_ip(self, ip: str, target_id: Optional[int] = None) -> QuerySet:\n        \"\"\"获取指定 IP 的 QuerySet\"\"\"\n        qs = HostPortMapping.objects.filter(ip=ip)\n        if target_id:\n            qs = qs.filter(target_id=target_id)\n        return qs\n\n    def iter_raw_data_for_export(\n        self, \n        target_id: int,\n        batch_size: int = 1000\n    ) -> Iterator[dict]:\n        \"\"\"\n        流式获取原始数据用于 CSV 导出\n        \n        Args:\n            target_id: 目标 ID\n            batch_size: 每批数据量\n        \n        Yields:\n            {\n                'ip': '192.168.1.1',\n                'host': 'example.com',\n                'port': 80,\n                'created_at': datetime\n            }\n        \"\"\"\n        qs = (\n            HostPortMapping.objects\n            .filter(target_id=target_id)\n            .values('ip', 'host', 'port', 'created_at')\n            .order_by('ip', 'host', 'port')\n        )\n        \n        for row in qs.iterator(chunk_size=batch_size):\n            yield row\n"
  },
  {
    "path": "backend/apps/asset/repositories/asset/subdomain_repository.py",
    "content": "\"\"\"Subdomain Repository - Django ORM 实现\"\"\"\n\nimport logging\nfrom typing import List, Iterator\n\nfrom django.db import transaction\n\nfrom apps.asset.models.asset_models import Subdomain\nfrom apps.asset.dtos import SubdomainDTO\nfrom apps.common.decorators import auto_ensure_db_connection\nfrom apps.common.utils import deduplicate_for_bulk\n\nlogger = logging.getLogger(__name__)\n\n\n@auto_ensure_db_connection\nclass DjangoSubdomainRepository:\n    \"\"\"基于 Django ORM 的子域名仓储实现\"\"\"\n\n    def bulk_create_ignore_conflicts(self, items: List[SubdomainDTO]) -> None:\n        \"\"\"\n        批量创建子域名，忽略冲突\n        \n        注意：自动按模型唯一约束去重，保留最后一条记录。\n        \n        Args:\n            items: 子域名 DTO 列表\n        \"\"\"\n        if not items:\n            return\n\n        try:\n            # 自动按模型唯一约束去重\n            unique_items = deduplicate_for_bulk(items, Subdomain)\n            \n            subdomain_objects = [\n                Subdomain(\n                    name=item.name,\n                    target_id=item.target_id,\n                )\n                for item in unique_items\n            ]\n\n            with transaction.atomic():\n                Subdomain.objects.bulk_create(\n                    subdomain_objects,\n                    ignore_conflicts=True,\n                )\n\n            logger.debug(f\"成功处理 {len(unique_items)} 条子域名记录\")\n\n        except Exception as e:\n            logger.error(f\"批量插入子域名失败: {e}\")\n            raise\n    \n    def get_all(self):\n        \"\"\"获取所有子域名\"\"\"\n        return Subdomain.objects.all().order_by('-created_at')\n\n    def get_by_target(self, target_id: int):\n        \"\"\"获取目标下的所有子域名\"\"\"\n        return Subdomain.objects.filter(target_id=target_id).order_by('-created_at')\n    \n    def count_by_target(self, target_id: int) -> int:\n        \"\"\"统计目标下的域名数量\"\"\"\n        return Subdomain.objects.filter(target_id=target_id).count()\n    \n    def get_domains_for_export(self, target_id: int, batch_size: int = 1000) -> Iterator[str]:\n        \"\"\"流式导出域名\"\"\"\n        queryset = Subdomain.objects.filter(\n            target_id=target_id\n        ).only('name').iterator(chunk_size=batch_size)\n        \n        for subdomain in queryset:\n            yield subdomain.name\n    \n    def get_by_names_and_target_id(self, names: set, target_id: int) -> dict:\n        \"\"\"根据域名列表和目标ID批量查询 Subdomain\"\"\"\n        subdomains = Subdomain.objects.filter(\n            name__in=names,\n            target_id=target_id\n        ).only('id', 'name')\n        \n        return {sd.name: sd for sd in subdomains}\n\n    def iter_raw_data_for_export(\n        self, \n        target_id: int,\n        batch_size: int = 1000\n    ) -> Iterator[dict]:\n        \"\"\"\n        流式获取原始数据用于 CSV 导出\n        \n        Args:\n            target_id: 目标 ID\n            batch_size: 每批数据量\n        \n        Yields:\n            {'name': 'sub.example.com', 'created_at': datetime}\n        \"\"\"\n        qs = (\n            Subdomain.objects\n            .filter(target_id=target_id)\n            .values('name', 'created_at')\n            .order_by('name')\n        )\n        \n        for row in qs.iterator(chunk_size=batch_size):\n            yield row\n"
  },
  {
    "path": "backend/apps/asset/repositories/asset/website_repository.py",
    "content": "\"\"\"\nDjango ORM 实现的 WebSite Repository\n\"\"\"\n\nimport logging\nfrom typing import List, Generator, Optional, Iterator\nfrom django.db import transaction\n\nfrom apps.asset.models.asset_models import WebSite\nfrom apps.asset.dtos import WebSiteDTO\nfrom apps.common.decorators import auto_ensure_db_connection\nfrom apps.common.utils import deduplicate_for_bulk\n\nlogger = logging.getLogger(__name__)\n\n\n@auto_ensure_db_connection\nclass DjangoWebSiteRepository:\n    \"\"\"Django ORM 实现的 WebSite Repository\"\"\"\n\n    def bulk_upsert(self, items: List[WebSiteDTO]) -> int:\n        \"\"\"\n        批量创建或更新 WebSite（upsert）\n        \n        存在则更新所有字段，不存在则创建。\n        使用 Django 原生 update_conflicts。\n        \n        注意：自动按模型唯一约束去重，保留最后一条记录。\n        \n        Args:\n            items: WebSite DTO 列表\n            \n        Returns:\n            int: 处理的记录数\n        \"\"\"\n        if not items:\n            return 0\n        \n        try:\n            # 自动按模型唯一约束去重\n            unique_items = deduplicate_for_bulk(items, WebSite)\n            \n            # 直接从 DTO 字段构建 Model\n            websites = [\n                WebSite(\n                    target_id=item.target_id,\n                    url=item.url,\n                    host=item.host or '',\n                    location=item.location or '',\n                    title=item.title or '',\n                    webserver=item.webserver or '',\n                    response_body=item.response_body or '',\n                    content_type=item.content_type or '',\n                    tech=item.tech if item.tech else [],\n                    status_code=item.status_code,\n                    content_length=item.content_length,\n                    vhost=item.vhost,\n                    response_headers=item.response_headers if item.response_headers else ''\n                )\n                for item in unique_items\n            ]\n            \n            with transaction.atomic():\n                WebSite.objects.bulk_create(\n                    websites,\n                    update_conflicts=True,\n                    unique_fields=['url', 'target'],\n                    update_fields=[\n                        'host', 'location', 'title', 'webserver',\n                        'response_body', 'content_type', 'tech',\n                        'status_code', 'content_length', 'vhost', 'response_headers'\n                    ],\n                    batch_size=1000\n                )\n            \n            logger.debug(f\"批量 upsert WebSite 成功: {len(unique_items)} 条\")\n            return len(unique_items)\n                \n        except Exception as e:\n            logger.error(f\"批量 upsert WebSite 失败: {e}\")\n            raise\n\n    def get_urls_for_export(self, target_id: int, batch_size: int = 1000) -> Generator[str, None, None]:\n        \"\"\"\n        流式导出目标下的所有站点 URL\n        \"\"\"\n        try:\n            queryset = WebSite.objects.filter(\n                target_id=target_id\n            ).values_list('url', flat=True).iterator(chunk_size=batch_size)\n            \n            for url in queryset:\n                yield url\n        except Exception as e:\n            logger.error(f\"流式导出站点 URL 失败 - Target ID: {target_id}, 错误: {e}\")\n            raise\n\n    def get_all(self):\n        \"\"\"获取所有网站\"\"\"\n        return WebSite.objects.all().order_by('-created_at')\n\n    def get_by_target(self, target_id: int):\n        \"\"\"获取目标下的所有网站\"\"\"\n        return WebSite.objects.filter(target_id=target_id).order_by('-created_at')\n\n    def count_by_target(self, target_id: int) -> int:\n        \"\"\"统计目标下的站点总数\"\"\"\n        return WebSite.objects.filter(target_id=target_id).count()\n\n    def get_by_url(self, url: str, target_id: int) -> Optional[int]:\n        \"\"\"根据 URL 和 target_id 查找站点 ID\"\"\"\n        website = WebSite.objects.filter(url=url, target_id=target_id).first()\n        return website.id if website else None\n\n    def bulk_create_ignore_conflicts(self, items: List[WebSiteDTO]) -> int:\n        \"\"\"\n        批量创建 WebSite（存在即跳过）\n        \n        注意：自动按模型唯一约束去重，保留最后一条记录。\n        \"\"\"\n        if not items:\n            return 0\n        \n        try:\n            # 自动按模型唯一约束去重\n            unique_items = deduplicate_for_bulk(items, WebSite)\n            \n            websites = [\n                WebSite(\n                    target_id=item.target_id,\n                    url=item.url,\n                    host=item.host or '',\n                    location=item.location or '',\n                    title=item.title or '',\n                    webserver=item.webserver or '',\n                    response_body=item.response_body or '',\n                    content_type=item.content_type or '',\n                    tech=item.tech if item.tech else [],\n                    status_code=item.status_code,\n                    content_length=item.content_length,\n                    vhost=item.vhost,\n                    response_headers=item.response_headers if item.response_headers else ''\n                )\n                for item in unique_items\n            ]\n            \n            with transaction.atomic():\n                WebSite.objects.bulk_create(\n                    websites,\n                    ignore_conflicts=True,\n                    batch_size=1000\n                )\n            \n            logger.debug(f\"批量创建 WebSite 成功（ignore_conflicts）: {len(unique_items)} 条\")\n            return len(unique_items)\n                \n        except Exception as e:\n            logger.error(f\"批量创建 WebSite 失败: {e}\")\n            raise\n\n    def iter_raw_data_for_export(\n        self, \n        target_id: int,\n        batch_size: int = 1000\n    ) -> Iterator[dict]:\n        \"\"\"\n        流式获取原始数据用于 CSV 导出\n        \n        Args:\n            target_id: 目标 ID\n            batch_size: 每批数据量\n        \n        Yields:\n            包含所有网站字段的字典\n        \"\"\"\n        qs = (\n            WebSite.objects\n            .filter(target_id=target_id)\n            .values(\n                'url', 'host', 'location', 'title', 'status_code',\n                'content_length', 'content_type', 'webserver', 'tech',\n                'response_body', 'response_headers', 'vhost', 'created_at'\n            )\n            .order_by('url')\n        )\n        \n        for row in qs.iterator(chunk_size=batch_size):\n            yield row\n"
  },
  {
    "path": "backend/apps/asset/repositories/snapshot/__init__.py",
    "content": "\"\"\"Snapshot Repositories - 数据访问层\"\"\"\n\nfrom .subdomain_snapshot_repository import DjangoSubdomainSnapshotRepository\nfrom .host_port_mapping_snapshot_repository import DjangoHostPortMappingSnapshotRepository\nfrom .website_snapshot_repository import DjangoWebsiteSnapshotRepository\nfrom .directory_snapshot_repository import DjangoDirectorySnapshotRepository\nfrom .endpoint_snapshot_repository import DjangoEndpointSnapshotRepository\nfrom .vulnerability_snapshot_repository import DjangoVulnerabilitySnapshotRepository\n\n__all__ = [\n    'DjangoSubdomainSnapshotRepository',\n    'DjangoHostPortMappingSnapshotRepository', \n    'DjangoWebsiteSnapshotRepository',\n    'DjangoDirectorySnapshotRepository',\n    'DjangoEndpointSnapshotRepository',\n    'DjangoVulnerabilitySnapshotRepository',\n]\n"
  },
  {
    "path": "backend/apps/asset/repositories/snapshot/directory_snapshot_repository.py",
    "content": "\"\"\"Directory Snapshot Repository - 目录快照数据访问层\"\"\"\n\nimport logging\nfrom typing import List, Iterator\nfrom django.db import transaction\n\nfrom apps.asset.models import DirectorySnapshot\nfrom apps.asset.dtos.snapshot import DirectorySnapshotDTO\nfrom apps.common.decorators import auto_ensure_db_connection\nfrom apps.common.utils import deduplicate_for_bulk\n\nlogger = logging.getLogger(__name__)\n\n\n@auto_ensure_db_connection\nclass DjangoDirectorySnapshotRepository:\n    \"\"\"\n    目录快照仓储（Django ORM 实现）\n    \n    负责目录快照表的数据访问操作\n    \"\"\"\n    \n    def save_snapshots(self, items: List[DirectorySnapshotDTO]) -> None:\n        \"\"\"\n        批量保存目录快照记录\n        \n        使用 ignore_conflicts 策略，如果快照已存在（相同 scan + url）则跳过\n        \n        注意：会自动按 (scan_id, url) 去重，保留最后一条记录。\n        \n        Args:\n            items: 目录快照 DTO 列表\n        \n        Raises:\n            ValueError: items 为空\n            Exception: 数据库操作失败\n        \"\"\"\n        if not items:\n            logger.warning(\"目录快照列表为空，跳过保存\")\n            return\n        \n        try:\n            # 根据模型唯一约束自动去重\n            unique_items = deduplicate_for_bulk(items, DirectorySnapshot)\n            \n            # 转换为 Django 模型对象\n            snapshot_objects = [\n                DirectorySnapshot(\n                    scan_id=item.scan_id,\n                    url=item.url,\n                    status=item.status,\n                    content_length=item.content_length,\n                    words=item.words,\n                    lines=item.lines,\n                    content_type=item.content_type,\n                    duration=item.duration\n                )\n                for item in unique_items\n            ]\n            \n            with transaction.atomic():\n                # 批量插入，忽略冲突\n                # 如果 scan + url 已存在，跳过\n                DirectorySnapshot.objects.bulk_create(\n                    snapshot_objects,\n                    ignore_conflicts=True\n                )\n            \n            logger.debug(\"成功保存 %d 条目录快照记录\", len(unique_items))\n            \n        except Exception as e:\n            logger.error(\n                \"批量保存目录快照失败 - 数量: %d, 错误: %s\",\n                len(items),\n                str(e),\n                exc_info=True\n            )\n            raise\n    \n    def get_by_scan(self, scan_id: int):\n        return DirectorySnapshot.objects.filter(scan_id=scan_id).order_by('-created_at')\n\n    def get_all(self):\n        return DirectorySnapshot.objects.all().order_by('-created_at')\n\n    def iter_raw_data_for_export(\n        self, \n        scan_id: int,\n        batch_size: int = 1000\n    ) -> Iterator[dict]:\n        \"\"\"\n        流式获取原始数据用于 CSV 导出\n        \n        Args:\n            scan_id: 扫描 ID\n            batch_size: 每批数据量\n        \n        Yields:\n            包含所有目录字段的字典\n        \"\"\"\n        qs = (\n            DirectorySnapshot.objects\n            .filter(scan_id=scan_id)\n            .values(\n                'url', 'status', 'content_length', 'words',\n                'lines', 'content_type', 'duration', 'created_at'\n            )\n            .order_by('url')\n        )\n        \n        for row in qs.iterator(chunk_size=batch_size):\n            yield row\n"
  },
  {
    "path": "backend/apps/asset/repositories/snapshot/endpoint_snapshot_repository.py",
    "content": "\"\"\"EndpointSnapshot Repository - Django ORM 实现\"\"\"\n\nimport logging\nfrom typing import List, Iterator\n\nfrom apps.asset.models.snapshot_models import EndpointSnapshot\nfrom apps.asset.dtos.snapshot import EndpointSnapshotDTO\nfrom apps.common.decorators import auto_ensure_db_connection\nfrom apps.common.utils import deduplicate_for_bulk\n\nlogger = logging.getLogger(__name__)\n\n\n@auto_ensure_db_connection\nclass DjangoEndpointSnapshotRepository:\n    \"\"\"端点快照 Repository - 负责端点快照表的数据访问\"\"\"\n\n    def save_snapshots(self, items: List[EndpointSnapshotDTO]) -> None:\n        \"\"\"\n        保存端点快照\n        \n        注意：会自动按 (scan_id, url) 去重，保留最后一条记录。\n        \n        Args:\n            items: 端点快照 DTO 列表\n        \n        Note:\n            - 保存完整的快照数据\n            - 基于唯一约束 (scan + url) 自动去重\n        \"\"\"\n        try:\n            logger.debug(\"准备保存端点快照 - 数量: %d\", len(items))\n            \n            if not items:\n                logger.debug(\"端点快照为空，跳过保存\")\n                return\n            \n            # 根据模型唯一约束自动去重\n            unique_items = deduplicate_for_bulk(items, EndpointSnapshot)\n                \n            # 构建快照对象\n            snapshots = []\n            for item in unique_items:\n                snapshots.append(EndpointSnapshot(\n                    scan_id=item.scan_id,\n                    url=item.url,\n                    host=item.host if item.host else '',\n                    title=item.title,\n                    status_code=item.status_code,\n                    content_length=item.content_length,\n                    location=item.location,\n                    webserver=item.webserver,\n                    content_type=item.content_type,\n                    tech=item.tech if item.tech else [],\n                    response_body=item.response_body,\n                    vhost=item.vhost,\n                    matched_gf_patterns=item.matched_gf_patterns if item.matched_gf_patterns else [],\n                    response_headers=item.response_headers if item.response_headers else ''\n                ))\n            \n            # 批量创建（忽略冲突，基于唯一约束去重）\n            EndpointSnapshot.objects.bulk_create(\n                snapshots, \n                ignore_conflicts=True\n            )\n            \n            logger.debug(\"端点快照保存成功 - 数量: %d\", len(snapshots))\n            \n        except Exception as e:\n            logger.error(\n                \"保存端点快照失败 - 数量: %d, 错误: %s\",\n                len(items),\n                str(e),\n                exc_info=True\n            )\n            raise\n    \n    def get_by_scan(self, scan_id: int):\n        return EndpointSnapshot.objects.filter(scan_id=scan_id).order_by('-created_at')\n\n    def get_all(self):\n        return EndpointSnapshot.objects.all().order_by('-created_at')\n\n    def iter_raw_data_for_export(\n        self, \n        scan_id: int,\n        batch_size: int = 1000\n    ) -> Iterator[dict]:\n        \"\"\"\n        流式获取原始数据用于 CSV 导出\n        \n        Args:\n            scan_id: 扫描 ID\n            batch_size: 每批数据量\n        \n        Yields:\n            包含所有端点字段的字典\n        \"\"\"\n        qs = (\n            EndpointSnapshot.objects\n            .filter(scan_id=scan_id)\n            .values(\n                'url', 'host', 'location', 'title', 'status_code',\n                'content_length', 'content_type', 'webserver', 'tech',\n                'response_body', 'response_headers', 'vhost', 'matched_gf_patterns', 'created_at'\n            )\n            .order_by('url')\n        )\n        \n        for row in qs.iterator(chunk_size=batch_size):\n            yield row\n"
  },
  {
    "path": "backend/apps/asset/repositories/snapshot/host_port_mapping_snapshot_repository.py",
    "content": "\"\"\"HostPortMappingSnapshot Repository - Django ORM 实现\"\"\"\n\nimport logging\nfrom typing import List, Iterator\n\nfrom apps.asset.models.snapshot_models import HostPortMappingSnapshot\nfrom apps.asset.dtos.snapshot import HostPortMappingSnapshotDTO\nfrom apps.common.decorators import auto_ensure_db_connection\nfrom apps.common.utils import deduplicate_for_bulk\n\nlogger = logging.getLogger(__name__)\n\n\n@auto_ensure_db_connection\nclass DjangoHostPortMappingSnapshotRepository:\n    \"\"\"HostPortMappingSnapshot Repository - Django ORM 实现，负责主机端口映射快照表的数据访问\"\"\"\n\n    def save_snapshots(self, items: List[HostPortMappingSnapshotDTO]) -> None:\n        \"\"\"\n        保存主机端口关联快照\n        \n        注意：会自动按 (scan_id, host, ip, port) 去重，保留最后一条记录。\n        \n        Args:\n            items: 主机端口关联快照 DTO 列表\n        \n        Note:\n            - 保存完整的快照数据\n            - 基于唯一约束 (scan + host + ip + port) 自动去重\n        \"\"\"\n        try:\n            logger.debug(\"准备保存主机端口关联快照 - 数量: %d\", len(items))\n            \n            if not items:\n                logger.debug(\"主机端口关联快照为空，跳过保存\")\n                return\n            \n            # 根据模型唯一约束自动去重\n            unique_items = deduplicate_for_bulk(items, HostPortMappingSnapshot)\n                \n            # 构建快照对象\n            snapshots = []\n            for item in unique_items:\n                snapshots.append(HostPortMappingSnapshot(\n                    scan_id=item.scan_id,\n                    host=item.host,\n                    ip=item.ip,\n                    port=item.port\n                ))\n            \n            # 批量创建（忽略冲突，基于唯一约束去重）\n            HostPortMappingSnapshot.objects.bulk_create(\n                snapshots, \n                ignore_conflicts=True\n            )\n            \n            logger.debug(\"主机端口关联快照保存成功 - 数量: %d\", len(snapshots))\n            \n        except Exception as e:\n            logger.error(\n                \"保存主机端口关联快照失败 - 数量: %d, 错误: %s\",\n                len(items),\n                str(e),\n                exc_info=True\n            )\n            raise\n    \n    def get_ip_aggregation_by_scan(self, scan_id: int, filter_query: str = None):\n        from django.db.models import Min\n        from apps.common.utils.filter_utils import apply_filters\n\n        qs = HostPortMappingSnapshot.objects.filter(scan_id=scan_id)\n        \n        # 应用智能过滤\n        if filter_query:\n            field_mapping = {\n                'ip': 'ip',\n                'port': 'port',\n                'host': 'host',\n            }\n            qs = apply_filters(qs, filter_query, field_mapping)\n\n        ip_aggregated = (\n            qs\n            .values('ip')\n            .annotate(\n                created_at=Min('created_at')\n            )\n            .order_by('-created_at')\n        )\n\n        results = []\n        for item in ip_aggregated:\n            ip = item['ip']\n            mappings = (\n                HostPortMappingSnapshot.objects\n                .filter(scan_id=scan_id, ip=ip)\n                .values('host', 'port')\n                .distinct()\n            )\n\n            hosts = sorted({m['host'] for m in mappings})\n            ports = sorted({m['port'] for m in mappings})\n\n            results.append({\n                'ip': ip,\n                'hosts': hosts,\n                'ports': ports,\n                'created_at': item['created_at'],\n            })\n\n        return results\n\n    def get_all_ip_aggregation(self, filter_query: str = None):\n        \"\"\"获取所有 IP 聚合数据\"\"\"\n        from django.db.models import Min\n        from apps.common.utils.filter_utils import apply_filters\n\n        qs = HostPortMappingSnapshot.objects.all()\n        \n        # 应用智能过滤\n        if filter_query:\n            field_mapping = {\n                'ip': 'ip',\n                'port': 'port',\n                'host': 'host',\n            }\n            qs = apply_filters(qs, filter_query, field_mapping)\n\n        ip_aggregated = (\n            qs\n            .values('ip')\n            .annotate(created_at=Min('created_at'))\n            .order_by('-created_at')\n        )\n\n        results = []\n        for item in ip_aggregated:\n            ip = item['ip']\n            mappings = (\n                HostPortMappingSnapshot.objects\n                .filter(ip=ip)\n                .values('host', 'port')\n                .distinct()\n            )\n            hosts = sorted({m['host'] for m in mappings})\n            ports = sorted({m['port'] for m in mappings})\n            results.append({\n                'ip': ip,\n                'hosts': hosts,\n                'ports': ports,\n                'created_at': item['created_at'],\n            })\n        return results\n\n    def get_ips_for_export(self, scan_id: int, batch_size: int = 1000) -> Iterator[str]:\n        \"\"\"流式导出扫描下的所有唯一 IP 地址。\"\"\"\n        queryset = (\n            HostPortMappingSnapshot.objects\n            .filter(scan_id=scan_id)\n            .values_list(\"ip\", flat=True)\n            .distinct()\n            .order_by(\"ip\")\n            .iterator(chunk_size=batch_size)\n        )\n        for ip in queryset:\n            yield ip\n\n    def iter_raw_data_for_export(\n        self, \n        scan_id: int,\n        batch_size: int = 1000\n    ) -> Iterator[dict]:\n        \"\"\"\n        流式获取原始数据用于 CSV 导出\n        \n        Args:\n            scan_id: 扫描 ID\n            batch_size: 每批数据量\n        \n        Yields:\n            {\n                'ip': '192.168.1.1',\n                'host': 'example.com',\n                'port': 80,\n                'created_at': datetime\n            }\n        \"\"\"\n        qs = (\n            HostPortMappingSnapshot.objects\n            .filter(scan_id=scan_id)\n            .values('ip', 'host', 'port', 'created_at')\n            .order_by('ip', 'host', 'port')\n        )\n        \n        for row in qs.iterator(chunk_size=batch_size):\n            yield row\n"
  },
  {
    "path": "backend/apps/asset/repositories/snapshot/subdomain_snapshot_repository.py",
    "content": "\"\"\"Django ORM 实现的 SubdomainSnapshot Repository\"\"\"\n\nimport logging\nfrom typing import List, Iterator\n\nfrom apps.asset.models.snapshot_models import SubdomainSnapshot\nfrom apps.asset.dtos import SubdomainSnapshotDTO\nfrom apps.common.decorators import auto_ensure_db_connection\nfrom apps.common.utils import deduplicate_for_bulk\n\nlogger = logging.getLogger(__name__)\n\n\n@auto_ensure_db_connection\nclass DjangoSubdomainSnapshotRepository:\n    \"\"\"子域名快照 Repository - 负责子域名快照表的数据访问\"\"\"\n\n    def save_subdomain_snapshots(self, items: List[SubdomainSnapshotDTO]) -> None:\n        \"\"\"\n        保存子域名快照\n        \n        注意：会自动按 (scan_id, name) 去重，保留最后一条记录。\n        \n        Args:\n            items: 子域名快照 DTO 列表\n        \n        Note:\n            - 保存完整的快照数据\n            - 基于唯一约束自动去重（忽略冲突）\n        \"\"\"\n        try:\n            logger.debug(\"准备保存子域名快照 - 数量: %d\", len(items))\n            \n            if not items:\n                logger.debug(\"子域名快照为空，跳过保存\")\n                return\n            \n            # 根据模型唯一约束自动去重\n            unique_items = deduplicate_for_bulk(items, SubdomainSnapshot)\n                \n            # 构建快照对象\n            snapshots = []\n            for item in unique_items:\n                snapshots.append(SubdomainSnapshot(\n                    scan_id=item.scan_id,\n                    name=item.name,\n                ))\n            \n            # 批量创建（忽略冲突，基于唯一约束去重）\n            SubdomainSnapshot.objects.bulk_create(snapshots, ignore_conflicts=True)\n            \n            logger.debug(\"子域名快照保存成功 - 数量: %d\", len(snapshots))\n            \n        except Exception as e:\n            logger.error(\n                \"保存子域名快照失败 - 数量: %d, 错误: %s\",\n                len(items),\n                str(e),\n                exc_info=True\n            )\n            raise\n    \n    def get_by_scan(self, scan_id: int):\n        return SubdomainSnapshot.objects.filter(scan_id=scan_id).order_by('-created_at')\n\n    def get_all(self):\n        return SubdomainSnapshot.objects.all().order_by('-created_at')\n\n    def iter_raw_data_for_export(\n        self, \n        scan_id: int,\n        batch_size: int = 1000\n    ) -> Iterator[dict]:\n        \"\"\"\n        流式获取原始数据用于 CSV 导出\n        \n        Args:\n            scan_id: 扫描 ID\n            batch_size: 每批数据量\n        \n        Yields:\n            {'name': 'sub.example.com', 'created_at': datetime}\n        \"\"\"\n        qs = (\n            SubdomainSnapshot.objects\n            .filter(scan_id=scan_id)\n            .values('name', 'created_at')\n            .order_by('name')\n        )\n        \n        for row in qs.iterator(chunk_size=batch_size):\n            yield row\n"
  },
  {
    "path": "backend/apps/asset/repositories/snapshot/vulnerability_snapshot_repository.py",
    "content": "\"\"\"Vulnerability Snapshot Repository - 漏洞快照数据访问层\"\"\"\n\nimport logging\nfrom typing import List\n\nfrom django.db import transaction\n\nfrom apps.asset.models import VulnerabilitySnapshot\nfrom apps.asset.dtos.snapshot import VulnerabilitySnapshotDTO\nfrom apps.common.decorators import auto_ensure_db_connection\nfrom apps.common.utils import deduplicate_for_bulk\n\nlogger = logging.getLogger(__name__)\n\n\n@auto_ensure_db_connection\nclass DjangoVulnerabilitySnapshotRepository:\n    \"\"\"漏洞快照仓储（Django ORM 实现）\"\"\"\n\n    def save_snapshots(self, items: List[VulnerabilitySnapshotDTO]) -> None:\n        \"\"\"批量保存漏洞快照记录。\n\n        使用 ``ignore_conflicts`` 策略，如果快照已存在则跳过。\n        具体唯一约束由数据库模型控制。\n        \n        注意：会自动按唯一约束字段去重，保留最后一条记录。\n        \"\"\"\n        if not items:\n            logger.warning(\"漏洞快照列表为空，跳过保存\")\n            return\n\n        try:\n            # 根据模型唯一约束自动去重\n            unique_items = deduplicate_for_bulk(items, VulnerabilitySnapshot)\n            \n            snapshot_objects = [\n                VulnerabilitySnapshot(\n                    scan_id=item.scan_id,\n                    url=item.url,\n                    vuln_type=item.vuln_type,\n                    severity=item.severity,\n                    source=item.source,\n                    cvss_score=item.cvss_score,\n                    description=item.description,\n                    raw_output=item.raw_output,\n                )\n                for item in unique_items\n            ]\n\n            with transaction.atomic():\n                VulnerabilitySnapshot.objects.bulk_create(\n                    snapshot_objects,\n                    ignore_conflicts=True,\n                )\n\n            logger.debug(\"成功保存 %d 条漏洞快照记录\", len(unique_items))\n\n        except Exception as e:\n            logger.error(\n                \"批量保存漏洞快照失败 - 数量: %d, 错误: %s\",\n                len(items),\n                str(e),\n                exc_info=True,\n            )\n            raise\n\n    def get_by_scan(self, scan_id: int):\n        \"\"\"按扫描任务获取漏洞快照 QuerySet。\"\"\"\n        return VulnerabilitySnapshot.objects.filter(scan_id=scan_id).order_by(\"-created_at\")\n\n    def get_all(self):\n        return VulnerabilitySnapshot.objects.all().order_by('-created_at')\n"
  },
  {
    "path": "backend/apps/asset/repositories/snapshot/website_snapshot_repository.py",
    "content": "\"\"\"WebsiteSnapshot Repository - Django ORM 实现\"\"\"\n\nimport logging\nfrom typing import List, Iterator\n\nfrom apps.asset.models.snapshot_models import WebsiteSnapshot\nfrom apps.asset.dtos.snapshot import WebsiteSnapshotDTO\nfrom apps.common.decorators import auto_ensure_db_connection\nfrom apps.common.utils import deduplicate_for_bulk\n\nlogger = logging.getLogger(__name__)\n\n\n@auto_ensure_db_connection\nclass DjangoWebsiteSnapshotRepository:\n    \"\"\"网站快照 Repository - 负责网站快照表的数据访问\"\"\"\n\n    def save_snapshots(self, items: List[WebsiteSnapshotDTO]) -> None:\n        \"\"\"\n        保存网站快照\n        \n        注意：会自动按 (scan_id, url) 去重，保留最后一条记录。\n        \n        Args:\n            items: 网站快照 DTO 列表\n        \n        Note:\n            - 保存完整的快照数据\n            - 基于唯一约束 (scan + subdomain + url) 自动去重\n        \"\"\"\n        try:\n            logger.debug(\"准备保存网站快照 - 数量: %d\", len(items))\n            \n            if not items:\n                logger.debug(\"网站快照为空，跳过保存\")\n                return\n            \n            # 根据模型唯一约束自动去重\n            unique_items = deduplicate_for_bulk(items, WebsiteSnapshot)\n                \n            # 构建快照对象\n            snapshots = []\n            for item in unique_items:\n                snapshots.append(WebsiteSnapshot(\n                    scan_id=item.scan_id,\n                    url=item.url,\n                    host=item.host,\n                    title=item.title,\n                    status_code=item.status_code,\n                    content_length=item.content_length,\n                    location=item.location,\n                    webserver=item.webserver,\n                    content_type=item.content_type,\n                    tech=item.tech if item.tech else [],\n                    response_body=item.response_body,\n                    vhost=item.vhost,\n                    response_headers=item.response_headers if item.response_headers else ''\n                ))\n            \n            # 批量创建（忽略冲突，基于唯一约束去重）\n            WebsiteSnapshot.objects.bulk_create(\n                snapshots, \n                ignore_conflicts=True\n            )\n            \n            logger.debug(\"网站快照保存成功 - 数量: %d\", len(snapshots))\n            \n        except Exception as e:\n            logger.error(\n                \"保存网站快照失败 - 数量: %d, 错误: %s\",\n                len(items),\n                str(e),\n                exc_info=True\n            )\n            raise\n    \n    def get_by_scan(self, scan_id: int):\n        return WebsiteSnapshot.objects.filter(scan_id=scan_id).order_by('-created_at')\n\n    def get_all(self):\n        return WebsiteSnapshot.objects.all().order_by('-created_at')\n\n    def iter_raw_data_for_export(\n        self, \n        scan_id: int,\n        batch_size: int = 1000\n    ) -> Iterator[dict]:\n        \"\"\"\n        流式获取原始数据用于 CSV 导出\n        \n        Args:\n            scan_id: 扫描 ID\n            batch_size: 每批数据量\n        \n        Yields:\n            包含所有网站字段的字典\n        \"\"\"\n        qs = (\n            WebsiteSnapshot.objects\n            .filter(scan_id=scan_id)\n            .values(\n                'url', 'host', 'location', 'title', 'status_code',\n                'content_length', 'content_type', 'webserver', 'tech',\n                'response_body', 'response_headers', 'vhost', 'created_at'\n            )\n            .order_by('url')\n        )\n        \n        for row in qs.iterator(chunk_size=batch_size):\n            yield row\n"
  },
  {
    "path": "backend/apps/asset/repositories/statistics_repository.py",
    "content": "\"\"\"资产统计 Repository\"\"\"\nimport logging\nfrom datetime import date, timedelta\nfrom typing import Optional, List\n\nfrom apps.asset.models import AssetStatistics, StatisticsHistory\n\nlogger = logging.getLogger(__name__)\n\n\nclass AssetStatisticsRepository:\n    \"\"\"\n    资产统计数据访问层\n    \n    职责：\n    - 读取/更新预聚合的统计数据\n    \"\"\"\n\n    def get_statistics(self) -> Optional[AssetStatistics]:\n        \"\"\"\n        获取统计数据\n        \n        Returns:\n            统计数据对象，不存在则返回 None\n        \"\"\"\n        return AssetStatistics.objects.first()\n\n    def get_or_create_statistics(self) -> AssetStatistics:\n        \"\"\"\n        获取或创建统计数据（单例）\n        \n        Returns:\n            统计数据对象\n        \"\"\"\n        return AssetStatistics.get_or_create_singleton()\n\n    def update_statistics(\n        self,\n        total_targets: int,\n        total_subdomains: int,\n        total_ips: int,\n        total_endpoints: int,\n        total_websites: int,\n        total_vulns: int,\n    ) -> AssetStatistics:\n        \"\"\"\n        更新统计数据\n        \n        Args:\n            total_targets: 目标总数\n            total_subdomains: 子域名总数\n            total_ips: IP 总数\n            total_endpoints: 端点总数\n            total_websites: 网站总数\n            total_vulns: 漏洞总数\n        \n        Returns:\n            更新后的统计数据对象\n        \"\"\"\n        stats = self.get_or_create_statistics()\n        \n        # 1. 保存当前值到 prev_* 字段\n        stats.prev_targets = stats.total_targets\n        stats.prev_subdomains = stats.total_subdomains\n        stats.prev_ips = stats.total_ips\n        stats.prev_endpoints = stats.total_endpoints\n        stats.prev_websites = stats.total_websites\n        stats.prev_vulns = stats.total_vulns\n        stats.prev_assets = stats.total_assets\n        \n        # 2. 更新当前值\n        stats.total_targets = total_targets\n        stats.total_subdomains = total_subdomains\n        stats.total_ips = total_ips\n        stats.total_endpoints = total_endpoints\n        stats.total_websites = total_websites\n        stats.total_vulns = total_vulns\n        stats.total_assets = total_subdomains + total_ips + total_endpoints + total_websites\n        stats.save()\n        \n        logger.info(\n            \"更新资产统计: targets=%d, subdomains=%d, ips=%d, endpoints=%d, websites=%d, vulns=%d, assets=%d\",\n            total_targets, total_subdomains, total_ips, total_endpoints, total_websites, total_vulns, stats.total_assets\n        )\n        return stats\n\n    def save_daily_snapshot(self, stats: AssetStatistics) -> StatisticsHistory:\n        \"\"\"\n        保存每日统计快照（幂等，每天只存一条）\n        \n        Args:\n            stats: 当前统计数据\n        \n        Returns:\n            历史记录对象\n        \"\"\"\n        history, created = StatisticsHistory.objects.update_or_create(\n            date=date.today(),\n            defaults={\n                'total_targets': stats.total_targets,\n                'total_subdomains': stats.total_subdomains,\n                'total_ips': stats.total_ips,\n                'total_endpoints': stats.total_endpoints,\n                'total_websites': stats.total_websites,\n                'total_vulns': stats.total_vulns,\n                'total_assets': stats.total_assets,\n            }\n        )\n        action = \"创建\" if created else \"更新\"\n        logger.info(f\"{action}统计快照: date={history.date}, assets={history.total_assets}\")\n        return history\n\n    def get_history(self, days: int = 7) -> List[StatisticsHistory]:\n        \"\"\"\n        获取历史统计数据（用于折线图）\n        \n        Args:\n            days: 获取最近多少天的数据，默认 7 天\n        \n        Returns:\n            历史记录列表，按日期升序\n        \"\"\"\n        start_date = date.today() - timedelta(days=days - 1)\n        return list(\n            StatisticsHistory.objects\n            .filter(date__gte=start_date)\n            .order_by('date')\n        )\n"
  },
  {
    "path": "backend/apps/asset/serializers.py",
    "content": "from rest_framework import serializers\nfrom .models import Subdomain, WebSite, Directory, HostPortMapping, Endpoint, Vulnerability\nfrom .models.snapshot_models import (\n    SubdomainSnapshot,\n    WebsiteSnapshot,\n    DirectorySnapshot,\n    EndpointSnapshot,\n    VulnerabilitySnapshot,\n)\nfrom .models.screenshot_models import Screenshot, ScreenshotSnapshot\n\n\n# 注意：IPAddress 和 Port 模型已被重构为 HostPortMapping\n# 以下是基于新架构的序列化器实现\n\n# class PortSerializer(serializers.ModelSerializer):\n#     \"\"\"端口序列化器\"\"\"\n#     \n#     class Meta:\n#         model = Port\n#         fields = ['number', 'service_name', 'description', 'is_uncommon']\n\n\nclass SubdomainSerializer(serializers.ModelSerializer):\n    \"\"\"子域名序列化器\"\"\"\n    \n    class Meta:\n        model = Subdomain\n        fields = [\n            'id', 'name', 'created_at', 'target'\n        ]\n        read_only_fields = ['id', 'created_at']\n\n\nclass SubdomainListSerializer(serializers.ModelSerializer):\n    \"\"\"子域名列表序列化器（用于扫描详情）\"\"\"\n    \n    # 注意：Subdomain 模型已简化，只保留核心字段\n    # cname, is_cdn, cdn_name 等字段已移至 SubdomainSnapshot\n    # ports 和 ip_addresses 关系已被重构为 HostPortMapping\n    \n    class Meta:\n        model = Subdomain\n        fields = [\n            'id', 'name', 'created_at'\n        ]\n        read_only_fields = ['id', 'created_at']\n\n\n# class IPAddressListSerializer(serializers.ModelSerializer):\n#     \"\"\"IP 地址列表序列化器\"\"\"\n#\n#     subdomain = serializers.CharField(source='subdomain.name', allow_blank=True, default='')\n#     created_at = serializers.DateTimeField(read_only=True)\n#     ports = PortSerializer(many=True, read_only=True)\n#\n#     class Meta:\n#         model = IPAddress\n#         fields = [\n#             'id',\n#             'ip',\n#             'subdomain',\n#             'reverse_pointer',\n#             'created_at',\n#             'ports',\n#         ]\n#         read_only_fields = fields\n\n\nclass WebSiteSerializer(serializers.ModelSerializer):\n    \"\"\"站点序列化器（目标详情页）\"\"\"\n    \n    subdomain = serializers.CharField(source='subdomain.name', allow_blank=True, default='')\n    responseHeaders = serializers.CharField(source='response_headers', read_only=True)  # 原始HTTP响应头\n    \n    class Meta:\n        model = WebSite\n        fields = [\n            'id',\n            'url',\n            'host',\n            'location', \n            'title',\n            'webserver',\n            'content_type',\n            'status_code',\n            'content_length',\n            'response_body',\n            'tech',\n            'vhost',\n            'responseHeaders',  # HTTP响应头\n            'subdomain',\n            'created_at',\n        ]\n        read_only_fields = fields\n\n\nclass VulnerabilitySerializer(serializers.ModelSerializer):\n    \"\"\"漏洞资产序列化器（按目标查看漏洞资产）。\"\"\"\n\n    class Meta:\n        model = Vulnerability\n        fields = [\n            'id',\n            'target',\n            'url',\n            'vuln_type',\n            'severity',\n            'source',\n            'cvss_score',\n            'description',\n            'raw_output',\n            'created_at',\n        ]\n        read_only_fields = fields\n\n\nclass VulnerabilitySnapshotSerializer(serializers.ModelSerializer):\n    \"\"\"漏洞快照序列化器（用于扫描历史漏洞列表）。\"\"\"\n\n    class Meta:\n        model = VulnerabilitySnapshot\n        fields = [\n            'id',\n            'url',\n            'vuln_type',\n            'severity',\n            'source',\n            'cvss_score',\n            'description',\n            'raw_output',\n            'created_at',\n        ]\n        read_only_fields = fields\n\n\nclass EndpointListSerializer(serializers.ModelSerializer):\n    \"\"\"端点列表序列化器（用于目标端点列表页）\"\"\"\n\n    # GF 匹配模式（gf-patterns 工具匹配的敏感 URL 模式）\n    gfPatterns = serializers.ListField(\n        child=serializers.CharField(),\n        source='matched_gf_patterns',\n        read_only=True,\n    )\n    responseHeaders = serializers.CharField(source='response_headers', read_only=True)  # 原始HTTP响应头\n\n    class Meta:\n        model = Endpoint\n        fields = [\n            'id',\n            'url',\n            'location',\n            'status_code',\n            'title',\n            'content_length',\n            'content_type',\n            'webserver',\n            'response_body',\n            'tech',\n            'vhost',\n            'responseHeaders',  # HTTP响应头\n            'gfPatterns',\n            'created_at',\n        ]\n        read_only_fields = fields\n\n\nclass DirectorySerializer(serializers.ModelSerializer):\n    \"\"\"目录序列化器\"\"\"\n    \n    created_at = serializers.DateTimeField(read_only=True)\n    \n    class Meta:\n        model = Directory\n        fields = [\n            'id',\n            'url',\n            'status',\n            'content_length',\n            'words',\n            'lines',\n            'content_type',\n            'duration',\n            'created_at',\n        ]\n        read_only_fields = fields\n\n\nclass IPAddressAggregatedSerializer(serializers.Serializer):\n    \"\"\"\n    IP 地址聚合序列化器\n    \n    基于 HostPortMapping 模型，按 IP 聚合显示：\n    - ip: IP 地址\n    - hosts: 该 IP 关联的所有主机名列表\n    - ports: 该 IP 关联的所有端口列表\n    - created_at: 创建时间\n    \"\"\"\n    ip = serializers.IPAddressField(read_only=True)\n    hosts = serializers.ListField(child=serializers.CharField(), read_only=True)\n    ports = serializers.ListField(child=serializers.IntegerField(), read_only=True)\n    created_at = serializers.DateTimeField(read_only=True)\n\n\n# ==================== 快照序列化器 ====================\n\nclass SubdomainSnapshotSerializer(serializers.ModelSerializer):\n    \"\"\"子域名快照序列化器（用于扫描历史）\"\"\"\n    \n    class Meta:\n        model = SubdomainSnapshot\n        fields = ['id', 'name', 'created_at']\n        read_only_fields = fields\n\n\nclass WebsiteSnapshotSerializer(serializers.ModelSerializer):\n    \"\"\"网站快照序列化器（用于扫描历史）\"\"\"\n    \n    subdomain_name = serializers.CharField(source='subdomain.name', read_only=True)\n    responseHeaders = serializers.CharField(source='response_headers', read_only=True)  # 原始HTTP响应头\n    \n    class Meta:\n        model = WebsiteSnapshot\n        fields = [\n            'id',\n            'url',\n            'location',\n            'title',\n            'webserver',\n            'content_type',\n            'status_code',\n            'content_length',\n            'response_body',\n            'tech',\n            'vhost',\n            'responseHeaders',  # HTTP响应头\n            'subdomain_name',\n            'created_at',\n        ]\n        read_only_fields = fields\n\n\nclass DirectorySnapshotSerializer(serializers.ModelSerializer):\n    \"\"\"目录快照序列化器（用于扫描历史）\"\"\"\n    \n    class Meta:\n        model = DirectorySnapshot\n        fields = [\n            'id',\n            'url',\n            'status',\n            'content_length',\n            'words',\n            'lines',\n            'content_type',\n            'duration',\n            'created_at',\n        ]\n        read_only_fields = fields\n\n\nclass EndpointSnapshotSerializer(serializers.ModelSerializer):\n    \"\"\"端点快照序列化器（用于扫描历史）\"\"\"\n\n    # GF 匹配模式（gf-patterns 工具匹配的敏感 URL 模式）\n    gfPatterns = serializers.ListField(\n        child=serializers.CharField(),\n        source='matched_gf_patterns',\n        read_only=True,\n    )\n    responseHeaders = serializers.CharField(source='response_headers', read_only=True)  # 原始HTTP响应头\n\n    class Meta:\n        model = EndpointSnapshot\n        fields = [\n            'id',\n            'url',\n            'host',\n            'location',\n            'title',\n            'webserver',\n            'content_type',\n            'status_code',\n            'content_length',\n            'response_body',\n            'tech',\n            'vhost',\n            'responseHeaders',  # HTTP响应头\n            'gfPatterns',\n            'created_at',\n        ]\n        read_only_fields = fields\n\n\n# ==================== 截图序列化器 ====================\n\nclass ScreenshotListSerializer(serializers.ModelSerializer):\n    \"\"\"截图资产列表序列化器（不包含 image 字段）\"\"\"\n    \n    class Meta:\n        model = Screenshot\n        fields = ['id', 'url', 'status_code', 'created_at', 'updated_at']\n        read_only_fields = fields\n\n\nclass ScreenshotSnapshotListSerializer(serializers.ModelSerializer):\n    \"\"\"截图快照列表序列化器（不包含 image 字段）\"\"\"\n    \n    class Meta:\n        model = ScreenshotSnapshot\n        fields = ['id', 'url', 'status_code', 'created_at']\n        read_only_fields = fields\n"
  },
  {
    "path": "backend/apps/asset/services/__init__.py",
    "content": "\"\"\"Asset Services - 业务逻辑层\"\"\"\n\n# 资产模块 Services\nfrom .asset import (\n    SubdomainService,\n    WebSiteService,\n    DirectoryService,\n    HostPortMappingService,\n    EndpointService,\n    VulnerabilityService,\n)\n\n# 快照模块 Services\nfrom .snapshot import (\n    SubdomainSnapshotsService,\n    HostPortMappingSnapshotsService,\n    WebsiteSnapshotsService,\n    DirectorySnapshotsService,\n    EndpointSnapshotsService,\n    VulnerabilitySnapshotsService,\n)\n\n# 统计模块 Service\nfrom .statistics_service import AssetStatisticsService\n\n__all__ = [\n    # 资产模块\n    'SubdomainService',\n    'WebSiteService',\n    'DirectoryService',\n    'HostPortMappingService',\n    'EndpointService',\n    'VulnerabilityService',\n    # 快照模块\n    'SubdomainSnapshotsService',\n    'HostPortMappingSnapshotsService',\n    'WebsiteSnapshotsService',\n    'DirectorySnapshotsService',\n    'EndpointSnapshotsService',\n    'VulnerabilitySnapshotsService',\n    # 统计模块\n    'AssetStatisticsService',\n]\n"
  },
  {
    "path": "backend/apps/asset/services/asset/__init__.py",
    "content": "\"\"\"Asset Services - 资产模块的业务逻辑层\"\"\"\n\nfrom .subdomain_service import SubdomainService\nfrom .website_service import WebSiteService\nfrom .directory_service import DirectoryService\nfrom .host_port_mapping_service import HostPortMappingService\nfrom .endpoint_service import EndpointService\nfrom .vulnerability_service import VulnerabilityService\n\n__all__ = [\n    'SubdomainService',\n    'WebSiteService',\n    'DirectoryService',\n    'HostPortMappingService',\n    'EndpointService',\n    'VulnerabilityService',\n]\n"
  },
  {
    "path": "backend/apps/asset/services/asset/directory_service.py",
    "content": "\"\"\"Directory Service - 目录业务逻辑层\"\"\"\n\nimport logging\nfrom typing import List, Iterator, Optional\n\nfrom apps.asset.repositories import DjangoDirectoryRepository\nfrom apps.asset.dtos import DirectoryDTO\nfrom apps.common.validators import is_valid_url, is_url_match_target\nfrom apps.common.utils.filter_utils import apply_filters\n\nlogger = logging.getLogger(__name__)\n\n\nclass DirectoryService:\n    \"\"\"目录业务逻辑层\"\"\"\n    \n    # 智能过滤字段映射\n    FILTER_FIELD_MAPPING = {\n        'url': 'url',\n        'status': 'status',\n    }\n    \n    def __init__(self, repository=None):\n        \"\"\"初始化目录服务\"\"\"\n        self.repo = repository or DjangoDirectoryRepository()\n    \n    def bulk_upsert(self, directory_dtos: List[DirectoryDTO]) -> int:\n        \"\"\"\n        批量创建或更新目录（upsert）\n        \n        存在则更新所有字段，不存在则创建。\n        \n        Args:\n            directory_dtos: DirectoryDTO 列表\n            \n        Returns:\n            int: 处理的记录数\n        \"\"\"\n        if not directory_dtos:\n            return 0\n        \n        try:\n            return self.repo.bulk_upsert(directory_dtos)\n        except Exception as e:\n            logger.error(f\"批量 upsert 目录失败: {e}\")\n            raise\n    \n    def bulk_create_urls(self, target_id: int, target_name: str, target_type: str, urls: List[str]) -> int:\n        \"\"\"\n        批量创建目录（仅 URL，使用 ignore_conflicts）\n        \n        验证 URL 格式和匹配，过滤无效/不匹配 URL，去重后批量创建。\n        已存在的记录会被跳过。\n        \n        Args:\n            target_id: 目标 ID\n            target_name: 目标名称（用于匹配验证）\n            target_type: 目标类型 ('domain', 'ip', 'cidr')\n            urls: URL 列表\n            \n        Returns:\n            int: 实际创建的记录数\n        \"\"\"\n        if not urls:\n            return 0\n        \n        # 过滤有效 URL 并去重\n        valid_urls = []\n        seen = set()\n        \n        for url in urls:\n            if not isinstance(url, str):\n                continue\n            url = url.strip()\n            if not url or url in seen:\n                continue\n            if not is_valid_url(url):\n                continue\n            \n            # 匹配验证（前端已阻止不匹配的提交，后端作为双重保障）\n            if not is_url_match_target(url, target_name, target_type):\n                continue\n            \n            seen.add(url)\n            valid_urls.append(url)\n        \n        if not valid_urls:\n            return 0\n        \n        # 获取创建前的数量\n        count_before = self.repo.count_by_target(target_id)\n        \n        # 创建 DTO 列表并批量创建\n        directory_dtos = [\n            DirectoryDTO(url=url, target_id=target_id)\n            for url in valid_urls\n        ]\n        self.repo.bulk_create_ignore_conflicts(directory_dtos)\n        \n        # 获取创建后的数量\n        count_after = self.repo.count_by_target(target_id)\n        return count_after - count_before\n    \n    def get_directories_by_target(self, target_id: int, filter_query: Optional[str] = None):\n        \"\"\"获取目标下的所有目录\"\"\"\n        queryset = self.repo.get_by_target(target_id)\n        if filter_query:\n            queryset = apply_filters(queryset, filter_query, self.FILTER_FIELD_MAPPING)\n        return queryset\n    \n    def get_all(self, filter_query: Optional[str] = None):\n        \"\"\"获取所有目录\"\"\"\n        queryset = self.repo.get_all()\n        if filter_query:\n            queryset = apply_filters(queryset, filter_query, self.FILTER_FIELD_MAPPING)\n        return queryset\n\n    def iter_directory_urls_by_target(self, target_id: int, chunk_size: int = 1000) -> Iterator[str]:\n        \"\"\"流式获取目标下的所有目录 URL\"\"\"\n        return self.repo.get_urls_for_export(target_id=target_id, batch_size=chunk_size)\n\n    def iter_raw_data_for_csv_export(self, target_id: int) -> Iterator[dict]:\n        \"\"\"\n        流式获取原始数据用于 CSV 导出\n        \n        Args:\n            target_id: 目标 ID\n        \n        Yields:\n            原始数据字典\n        \"\"\"\n        return self.repo.iter_raw_data_for_export(target_id=target_id)\n\n\n__all__ = ['DirectoryService']\n"
  },
  {
    "path": "backend/apps/asset/services/asset/endpoint_service.py",
    "content": "\"\"\"\nEndpoint 服务层\n\n处理 URL/端点相关的业务逻辑\n\"\"\"\n\nimport logging\nfrom typing import List, Iterator, Optional\n\nfrom apps.asset.dtos.asset import EndpointDTO\nfrom apps.asset.repositories.asset import DjangoEndpointRepository\nfrom apps.common.validators import is_valid_url, is_url_match_target\nfrom apps.common.utils.filter_utils import apply_filters\n\nlogger = logging.getLogger(__name__)\n\n\nclass EndpointService:\n    \"\"\"\n    Endpoint 服务类\n    \n    提供 Endpoint（URL/端点）相关的业务逻辑\n    \"\"\"\n    \n    # 智能过滤字段映射\n    FILTER_FIELD_MAPPING = {\n        'url': 'url',\n        'host': 'host',\n        'title': 'title',\n        'status_code': 'status_code',\n        'tech': 'tech',\n    }\n    \n    def __init__(self):\n        \"\"\"初始化 Endpoint 服务\"\"\"\n        self.repo = DjangoEndpointRepository()\n    \n    def bulk_upsert(self, endpoints: List[EndpointDTO]) -> int:\n        \"\"\"\n        批量创建或更新端点（upsert）\n        \n        存在则更新所有字段，不存在则创建。\n        \n        Args:\n            endpoints: 端点数据列表\n            \n        Returns:\n            int: 处理的记录数\n        \"\"\"\n        if not endpoints:\n            return 0\n        \n        try:\n            return self.repo.bulk_upsert(endpoints)\n        except Exception as e:\n            logger.error(f\"批量 upsert 端点失败: {e}\")\n            raise\n    \n    def bulk_create_urls(self, target_id: int, target_name: str, target_type: str, urls: List[str]) -> int:\n        \"\"\"\n        批量创建端点（仅 URL，使用 ignore_conflicts）\n        \n        验证 URL 格式和匹配，过滤无效/不匹配 URL，去重后批量创建。\n        已存在的记录会被跳过。\n        \n        Args:\n            target_id: 目标 ID\n            target_name: 目标名称（用于匹配验证）\n            target_type: 目标类型 ('domain', 'ip', 'cidr')\n            urls: URL 列表\n            \n        Returns:\n            int: 实际创建的记录数\n        \"\"\"\n        if not urls:\n            return 0\n        \n        # 过滤有效 URL 并去重\n        valid_urls = []\n        seen = set()\n        \n        for url in urls:\n            if not isinstance(url, str):\n                continue\n            url = url.strip()\n            if not url or url in seen:\n                continue\n            if not is_valid_url(url):\n                continue\n            \n            # 匹配验证（前端已阻止不匹配的提交，后端作为双重保障）\n            if not is_url_match_target(url, target_name, target_type):\n                continue\n            \n            seen.add(url)\n            valid_urls.append(url)\n        \n        if not valid_urls:\n            return 0\n        \n        # 获取创建前的数量\n        count_before = self.repo.count_by_target(target_id)\n        \n        # 创建 DTO 列表并批量创建\n        endpoint_dtos = [\n            EndpointDTO(url=url, target_id=target_id)\n            for url in valid_urls\n        ]\n        self.repo.bulk_create_ignore_conflicts(endpoint_dtos)\n        \n        # 获取创建后的数量\n        count_after = self.repo.count_by_target(target_id)\n        return count_after - count_before\n    \n    def get_endpoints_by_target(self, target_id: int, filter_query: Optional[str] = None):\n        \"\"\"获取目标下的所有端点\"\"\"\n        queryset = self.repo.get_by_target(target_id)\n        if filter_query:\n            queryset = apply_filters(queryset, filter_query, self.FILTER_FIELD_MAPPING, json_array_fields=['tech'])\n        return queryset\n    \n    def count_endpoints_by_target(self, target_id: int) -> int:\n        \"\"\"\n        统计目标下的端点数量\n        \n        Args:\n            target_id: 目标 ID\n            \n        Returns:\n            int: 端点数量\n        \"\"\"\n        return self.repo.count_by_target(target_id)\n\n    def get_all(self, filter_query: Optional[str] = None):\n        \"\"\"获取所有端点（全局查询）\"\"\"\n        queryset = self.repo.get_all()\n        if filter_query:\n            queryset = apply_filters(queryset, filter_query, self.FILTER_FIELD_MAPPING, json_array_fields=['tech'])\n        return queryset\n    \n    def iter_endpoint_urls_by_target(self, target_id: int, chunk_size: int = 1000) -> Iterator[str]:\n        \"\"\"流式获取目标下的所有端点 URL，用于导出。\"\"\"\n        queryset = self.repo.get_by_target(target_id)\n        for url in queryset.values_list('url', flat=True).iterator(chunk_size=chunk_size):\n            yield url\n\n    def iter_raw_data_for_csv_export(self, target_id: int) -> Iterator[dict]:\n        \"\"\"\n        流式获取原始数据用于 CSV 导出\n        \n        Args:\n            target_id: 目标 ID\n        \n        Yields:\n            原始数据字典\n        \"\"\"\n        return self.repo.iter_raw_data_for_export(target_id=target_id)\n"
  },
  {
    "path": "backend/apps/asset/services/asset/host_port_mapping_service.py",
    "content": "\"\"\"HostPortMapping Service - 业务逻辑层\"\"\"\n\nimport logging\nfrom typing import List, Iterator, Optional, Dict\n\nfrom django.db.models import Min\n\nfrom apps.asset.repositories.asset import DjangoHostPortMappingRepository\nfrom apps.asset.dtos.asset import HostPortMappingDTO\nfrom apps.common.utils.filter_utils import apply_filters\n\nlogger = logging.getLogger(__name__)\n\n\nclass HostPortMappingService:\n    \"\"\"主机端口映射服务 - 负责主机端口映射数据的业务逻辑\n    \n    职责：\n    - 业务逻辑处理（过滤、聚合）\n    - 调用 Repository 进行数据访问\n    \"\"\"\n    \n    # 智能过滤字段映射\n    FILTER_FIELD_MAPPING = {\n        'ip': 'ip',\n        'port': 'port',\n        'host': 'host',\n    }\n    \n    def __init__(self):\n        self.repo = DjangoHostPortMappingRepository()\n    \n    def bulk_create_ignore_conflicts(self, items: List[HostPortMappingDTO]) -> int:\n        \"\"\"\n        批量创建主机端口映射（忽略冲突）\n        \n        Args:\n            items: 主机端口映射 DTO 列表\n        \n        Returns:\n            int: 实际创建的记录数\n        \n        Note:\n            使用数据库唯一约束 + ignore_conflicts 自动去重\n        \"\"\"\n        try:\n            logger.debug(\"Service: 准备批量创建主机端口映射 - 数量: %d\", len(items))\n            \n            created_count = self.repo.bulk_create_ignore_conflicts(items)\n            \n            logger.info(\"Service: 主机端口映射创建成功 - 数量: %d\", created_count)\n            \n            return created_count\n            \n        except Exception as e:\n            logger.error(\n                \"Service: 批量创建主机端口映射失败 - 数量: %d, 错误: %s\",\n                len(items),\n                str(e),\n                exc_info=True\n            )\n            raise\n\n    def iter_host_port_by_target(self, target_id: int, batch_size: int = 1000):\n        return self.repo.get_for_export(target_id=target_id, batch_size=batch_size)\n\n    def get_ip_aggregation_by_target(\n        self, \n        target_id: int, \n        filter_query: Optional[str] = None\n    ) -> List[Dict]:\n        \"\"\"获取目标下的 IP 聚合数据\n        \n        Args:\n            target_id: 目标 ID\n            filter_query: 智能过滤语法字符串\n        \n        Returns:\n            聚合后的 IP 数据列表\n        \"\"\"\n        # 从 Repository 获取基础 QuerySet\n        qs = self.repo.get_queryset_by_target(target_id)\n        \n        # Service 层应用过滤逻辑\n        if filter_query:\n            qs = apply_filters(qs, filter_query, self.FILTER_FIELD_MAPPING)\n        \n        # Service 层处理聚合逻辑\n        return self._aggregate_by_ip(qs, filter_query, target_id=target_id)\n\n    def get_all_ip_aggregation(self, filter_query: Optional[str] = None) -> List[Dict]:\n        \"\"\"获取所有 IP 聚合数据（全局查询）\n        \n        Args:\n            filter_query: 智能过滤语法字符串\n        \n        Returns:\n            聚合后的 IP 数据列表\n        \"\"\"\n        # 从 Repository 获取基础 QuerySet\n        qs = self.repo.get_all_queryset()\n        \n        # Service 层应用过滤逻辑\n        if filter_query:\n            qs = apply_filters(qs, filter_query, self.FILTER_FIELD_MAPPING)\n        \n        # Service 层处理聚合逻辑\n        return self._aggregate_by_ip(qs, filter_query)\n\n    def _aggregate_by_ip(\n        self, \n        qs, \n        filter_query: Optional[str] = None,\n        target_id: Optional[int] = None\n    ) -> List[Dict]:\n        \"\"\"按 IP 聚合数据\n        \n        Args:\n            qs: 已过滤的 QuerySet\n            filter_query: 过滤条件（用于子查询）\n            target_id: 目标 ID（用于子查询限定范围）\n        \n        Returns:\n            聚合后的数据列表\n        \"\"\"\n        ip_aggregated = (\n            qs\n            .values('ip')\n            .annotate(created_at=Min('created_at'))\n            .order_by('-created_at')\n        )\n\n        results = []\n        for item in ip_aggregated:\n            ip = item['ip']\n            \n            # 获取该 IP 的所有 host 和 port（也需要应用过滤条件）\n            mappings_qs = self.repo.get_queryset_by_ip(ip, target_id=target_id)\n            if filter_query:\n                mappings_qs = apply_filters(mappings_qs, filter_query, self.FILTER_FIELD_MAPPING)\n            \n            mappings = mappings_qs.values('host', 'port').distinct()\n            hosts = sorted({m['host'] for m in mappings})\n            ports = sorted({m['port'] for m in mappings})\n            \n            results.append({\n                'ip': ip,\n                'hosts': hosts,\n                'ports': ports,\n                'created_at': item['created_at'],\n            })\n        \n        return results\n\n    def iter_ips_by_target(self, target_id: int, batch_size: int = 1000) -> Iterator[str]:\n        \"\"\"流式获取目标下的所有唯一 IP 地址。\"\"\"\n        return self.repo.get_ips_for_export(target_id=target_id, batch_size=batch_size)\n\n    def iter_raw_data_for_csv_export(self, target_id: int) -> Iterator[dict]:\n        \"\"\"\n        流式获取原始数据用于 CSV 导出\n        \n        Args:\n            target_id: 目标 ID\n        \n        Yields:\n            原始数据字典 {ip, host, port, created_at}\n        \"\"\"\n        return self.repo.iter_raw_data_for_export(target_id=target_id)\n"
  },
  {
    "path": "backend/apps/asset/services/asset/subdomain_service.py",
    "content": "import logging\nfrom typing import List, Dict, Optional\nfrom dataclasses import dataclass\n\nfrom apps.asset.repositories import DjangoSubdomainRepository\nfrom apps.asset.dtos import SubdomainDTO\nfrom apps.common.validators import is_valid_domain\nfrom apps.common.utils.filter_utils import apply_filters\n\nlogger = logging.getLogger(__name__)\n\n\n@dataclass\nclass BulkCreateResult:\n    \"\"\"批量创建结果\"\"\"\n    created_count: int\n    skipped_count: int\n    invalid_count: int\n    mismatched_count: int\n    total_received: int\n\n\nclass SubdomainService:\n    \"\"\"子域名业务逻辑层\"\"\"\n    \n    # 智能过滤字段映射\n    FILTER_FIELD_MAPPING = {\n        'name': 'name',\n    }\n    \n    def __init__(self, repository=None):\n        \"\"\"\n        初始化子域名服务\n        \n        Args:\n            repository: 子域名仓储实例（用于依赖注入）\n        \"\"\"\n        self.repo = repository or DjangoSubdomainRepository()\n    \n    # ==================== 查询操作 ====================\n    \n    def get_all(self, filter_query: Optional[str] = None):\n        \"\"\"\n        获取所有子域名\n        \n        Args:\n            filter_query: 智能过滤语法字符串\n        \n        Returns:\n            QuerySet: 子域名查询集\n        \"\"\"\n        logger.debug(\"获取所有子域名\")\n        queryset = self.repo.get_all()\n        if filter_query:\n            queryset = apply_filters(queryset, filter_query, self.FILTER_FIELD_MAPPING)\n        return queryset\n    \n    def get_subdomains_by_target(self, target_id: int, filter_query: Optional[str] = None):\n        \"\"\"\n        获取目标下的子域名\n        \n        Args:\n            target_id: 目标 ID\n            filter_query: 智能过滤语法字符串\n        \n        Returns:\n            QuerySet: 子域名查询集\n        \"\"\"\n        queryset = self.repo.get_by_target(target_id)\n        if filter_query:\n            queryset = apply_filters(queryset, filter_query, self.FILTER_FIELD_MAPPING)\n        return queryset\n\n    def count_subdomains_by_target(self, target_id: int) -> int:\n        \"\"\"\n        统计目标下的子域名数量\n        \n        Args:\n            target_id: 目标 ID\n        \n        Returns:\n            int: 子域名数量\n        \"\"\"\n        logger.debug(\"统计目标下子域名数量 - Target ID: %d\", target_id)\n        return self.repo.count_by_target(target_id)\n    \n    def get_by_names_and_target_id(self, names: set, target_id: int) -> dict:\n        \"\"\"\n        根据域名列表和目标ID批量查询子域名\n        \n        Args:\n            names: 域名集合\n            target_id: 目标 ID\n        \n        Returns:\n            dict: {域名: Subdomain对象}\n        \"\"\"\n        logger.debug(\"批量查询子域名 - 数量: %d, Target ID: %d\", len(names), target_id)\n        return self.repo.get_by_names_and_target_id(names, target_id)\n    \n    def get_subdomain_names_by_target(self, target_id: int) -> List[str]:\n        \"\"\"\n        获取目标下的所有子域名名称\n        \n        Args:\n            target_id: 目标 ID\n        \n        Returns:\n            List[str]: 子域名名称列表\n        \"\"\"\n        logger.debug(\"获取目标下所有子域名 - Target ID: %d\", target_id)\n        return list(self.repo.get_domains_for_export(target_id=target_id))\n    \n    def iter_subdomain_names_by_target(self, target_id: int, chunk_size: int = 1000):\n        \"\"\"\n        流式获取目标下的所有子域名名称（内存优化）\n        \n        Args:\n            target_id: 目标 ID\n            chunk_size: 批次大小\n        \n        Yields:\n            str: 子域名名称\n        \"\"\"\n        logger.debug(\"流式获取目标下所有子域名 - Target ID: %d, 批次大小: %d\", target_id, chunk_size)\n        return self.repo.get_domains_for_export(target_id=target_id, batch_size=chunk_size)\n\n    def iter_raw_data_for_csv_export(self, target_id: int):\n        \"\"\"\n        流式获取原始数据用于 CSV 导出\n        \n        Args:\n            target_id: 目标 ID\n        \n        Yields:\n            原始数据字典 {name, created_at}\n        \"\"\"\n        return self.repo.iter_raw_data_for_export(target_id=target_id)\n\n    # ==================== 创建操作 ====================\n\n    def bulk_create_ignore_conflicts(self, items: List[SubdomainDTO]) -> None:\n        \"\"\"\n        批量创建子域名，忽略冲突\n        \n        Args:\n            items: 子域名 DTO 列表\n        \n        Note:\n            使用 ignore_conflicts 策略，重复记录会被跳过\n        \"\"\"\n        logger.debug(\"批量创建子域名 - 数量: %d\", len(items))\n        return self.repo.bulk_create_ignore_conflicts(items)\n\n    def bulk_create_subdomains(\n        self,\n        target_id: int,\n        target_name: str,\n        subdomains: List[str]\n    ) -> BulkCreateResult:\n        \"\"\"\n        批量创建子域名（带验证）\n        \n        Args:\n            target_id: 目标 ID\n            target_name: 目标域名（用于匹配验证）\n            subdomains: 子域名列表\n        \n        Returns:\n            BulkCreateResult: 创建结果统计\n        \"\"\"\n        total_received = len(subdomains)\n        target_name = target_name.lower().strip()\n        \n        def is_subdomain_match(subdomain: str) -> bool:\n            \"\"\"验证子域名是否匹配目标域名\"\"\"\n            if subdomain == target_name:\n                return True\n            if subdomain.endswith('.' + target_name):\n                return True\n            return False\n        \n        # 过滤有效的子域名\n        valid_subdomains = []\n        invalid_count = 0\n        mismatched_count = 0\n        \n        for subdomain in subdomains:\n            if not isinstance(subdomain, str) or not subdomain.strip():\n                continue\n            \n            subdomain = subdomain.lower().strip()\n            \n            # 验证格式\n            if not is_valid_domain(subdomain):\n                invalid_count += 1\n                continue\n            \n            # 验证匹配\n            if not is_subdomain_match(subdomain):\n                mismatched_count += 1\n                continue\n            \n            valid_subdomains.append(subdomain)\n        \n        # 去重\n        unique_subdomains = list(set(valid_subdomains))\n        duplicate_count = len(valid_subdomains) - len(unique_subdomains)\n        \n        if not unique_subdomains:\n            return BulkCreateResult(\n                created_count=0,\n                skipped_count=duplicate_count,\n                invalid_count=invalid_count,\n                mismatched_count=mismatched_count,\n                total_received=total_received,\n            )\n        \n        # 获取创建前的数量\n        count_before = self.repo.count_by_target(target_id)\n        \n        # 创建 DTO 列表并批量创建\n        subdomain_dtos = [\n            SubdomainDTO(name=name, target_id=target_id)\n            for name in unique_subdomains\n        ]\n        self.repo.bulk_create_ignore_conflicts(subdomain_dtos)\n        \n        # 获取创建后的数量\n        count_after = self.repo.count_by_target(target_id)\n        created_count = count_after - count_before\n        \n        # 计算因数据库冲突跳过的数量\n        db_skipped = len(unique_subdomains) - created_count\n        \n        return BulkCreateResult(\n            created_count=created_count,\n            skipped_count=duplicate_count + db_skipped,\n            invalid_count=invalid_count,\n            mismatched_count=mismatched_count,\n            total_received=total_received,\n        )\n\n\n__all__ = ['SubdomainService', 'BulkCreateResult']\n"
  },
  {
    "path": "backend/apps/asset/services/asset/vulnerability_service.py",
    "content": "\"\"\"Vulnerability Service - 漏洞资产业务逻辑层\"\"\"\n\nimport logging\nfrom typing import List, Optional\n\nfrom apps.asset.models import Vulnerability\nfrom apps.asset.dtos.asset import VulnerabilityDTO\nfrom apps.common.decorators import auto_ensure_db_connection\nfrom apps.common.utils import deduplicate_for_bulk\nfrom apps.common.utils.filter_utils import apply_filters\n\nlogger = logging.getLogger(__name__)\n\n\n@auto_ensure_db_connection\nclass VulnerabilityService:\n    \"\"\"漏洞资产服务\n\n    当前提供基础的批量创建能力，使用 ignore_conflicts 依赖数据库唯一约束去重。\n    \"\"\"\n    \n    # 智能过滤字段映射\n    FILTER_FIELD_MAPPING = {\n        'type': 'vuln_type',\n        'severity': 'severity',\n        'source': 'source',\n        'url': 'url',\n    }\n\n    def bulk_create_ignore_conflicts(self, items: List[VulnerabilityDTO]) -> None:\n        \"\"\"批量创建漏洞资产记录，忽略冲突。\n\n        注意：会自动按 (target_id, url, vuln_type, source) 去重，保留最后一条记录。\n\n        Note:\n            - 是否去重取决于模型上的唯一/部分唯一约束；\n            - 当前 Vulnerability 模型未定义唯一约束，因此会保留全部记录。\n        \"\"\"\n        if not items:\n            logger.debug(\"漏洞资产列表为空，跳过保存\")\n            return\n\n        try:\n            # 根据模型唯一约束自动去重（如果模型没有唯一约束则跳过）\n            unique_items = deduplicate_for_bulk(items, Vulnerability)\n            \n            vulns = [\n                Vulnerability(\n                    target_id=item.target_id,\n                    url=item.url,\n                    vuln_type=item.vuln_type,\n                    severity=item.severity,\n                    source=item.source,\n                    cvss_score=item.cvss_score,\n                    description=item.description,\n                    raw_output=item.raw_output,\n                )\n                for item in unique_items\n            ]\n\n            Vulnerability.objects.bulk_create(vulns, ignore_conflicts=True)\n            logger.info(\"漏洞资产保存成功 - 数量: %d\", len(vulns))\n\n        except Exception as e:\n            logger.error(\n                \"批量保存漏洞资产失败 - 数量: %d, 错误: %s\",\n                len(items),\n                str(e),\n                exc_info=True,\n            )\n            raise\n\n    # ==================== 查询方法 ====================\n\n    def get_all(self, filter_query: Optional[str] = None):\n        \"\"\"获取所有漏洞 QuerySet（用于全局漏洞列表）。\n\n        Args:\n            filter_query: 智能过滤语法字符串\n\n        Returns:\n            QuerySet[Vulnerability]: 所有漏洞，按创建时间倒序\n        \"\"\"\n        queryset = Vulnerability.objects.all().order_by(\"-created_at\")\n        if filter_query:\n            queryset = apply_filters(queryset, filter_query, self.FILTER_FIELD_MAPPING)\n        return queryset\n\n    def get_vulnerabilities_by_target(self, target_id: int, filter_query: Optional[str] = None):\n        \"\"\"按目标获取漏洞 QuerySet（用于分页）。\n\n        Args:\n            target_id: 目标 ID\n            filter_query: 智能过滤语法字符串\n\n        Returns:\n            QuerySet[Vulnerability]: 目标下的所有漏洞，按创建时间倒序\n        \"\"\"\n        queryset = Vulnerability.objects.filter(target_id=target_id).order_by(\"-created_at\")\n        if filter_query:\n            queryset = apply_filters(queryset, filter_query, self.FILTER_FIELD_MAPPING)\n        return queryset\n\n    def count_by_target(self, target_id: int) -> int:\n        \"\"\"统计目标下的漏洞数量。\"\"\"\n        return Vulnerability.objects.filter(target_id=target_id).count()\n"
  },
  {
    "path": "backend/apps/asset/services/asset/website_service.py",
    "content": "\"\"\"WebSite Service - 网站业务逻辑层\"\"\"\n\nimport logging\nfrom typing import List, Iterator, Optional\n\nfrom apps.asset.repositories import DjangoWebSiteRepository\nfrom apps.asset.dtos import WebSiteDTO\nfrom apps.common.validators import is_valid_url, is_url_match_target\nfrom apps.common.utils.filter_utils import apply_filters\n\nlogger = logging.getLogger(__name__)\n\n\nclass WebSiteService:\n    \"\"\"网站业务逻辑层\"\"\"\n    \n    # 智能过滤字段映射\n    FILTER_FIELD_MAPPING = {\n        'url': 'url',\n        'host': 'host',\n        'title': 'title',\n        'status_code': 'status_code',\n        'tech': 'tech',\n    }\n    \n    def __init__(self, repository=None):\n        \"\"\"初始化网站服务\"\"\"\n        self.repo = repository or DjangoWebSiteRepository()\n    \n    def bulk_upsert(self, website_dtos: List[WebSiteDTO]) -> int:\n        \"\"\"\n        批量创建或更新网站（upsert）\n        \n        存在则更新所有字段，不存在则创建。\n        \n        Args:\n            website_dtos: WebSiteDTO 列表\n            \n        Returns:\n            int: 处理的记录数\n        \"\"\"\n        if not website_dtos:\n            return 0\n        \n        try:\n            return self.repo.bulk_upsert(website_dtos)\n        except Exception as e:\n            logger.error(f\"批量 upsert 网站失败: {e}\")\n            raise\n    \n    def bulk_create_urls(self, target_id: int, target_name: str, target_type: str, urls: List[str]) -> int:\n        \"\"\"\n        批量创建网站（仅 URL，使用 ignore_conflicts）\n        \n        验证 URL 格式和匹配，过滤无效/不匹配 URL，去重后批量创建。\n        已存在的记录会被跳过。\n        \n        Args:\n            target_id: 目标 ID\n            target_name: 目标名称（用于匹配验证）\n            target_type: 目标类型 ('domain', 'ip', 'cidr')\n            urls: URL 列表\n            \n        Returns:\n            int: 实际创建的记录数\n        \"\"\"\n        if not urls:\n            return 0\n        \n        # 过滤有效 URL 并去重\n        valid_urls = []\n        seen = set()\n        \n        for url in urls:\n            if not isinstance(url, str):\n                continue\n            url = url.strip()\n            if not url or url in seen:\n                continue\n            if not is_valid_url(url):\n                continue\n            \n            # 匹配验证（前端已阻止不匹配的提交，后端作为双重保障）\n            if not is_url_match_target(url, target_name, target_type):\n                continue\n            \n            seen.add(url)\n            valid_urls.append(url)\n        \n        if not valid_urls:\n            return 0\n        \n        # 获取创建前的数量\n        count_before = self.repo.count_by_target(target_id)\n        \n        # 创建 DTO 列表并批量创建\n        website_dtos = [\n            WebSiteDTO(url=url, target_id=target_id)\n            for url in valid_urls\n        ]\n        self.repo.bulk_create_ignore_conflicts(website_dtos)\n        \n        # 获取创建后的数量\n        count_after = self.repo.count_by_target(target_id)\n        return count_after - count_before\n    \n    def get_websites_by_target(self, target_id: int, filter_query: Optional[str] = None):\n        \"\"\"获取目标下的所有网站\"\"\"\n        queryset = self.repo.get_by_target(target_id)\n        if filter_query:\n            queryset = apply_filters(queryset, filter_query, self.FILTER_FIELD_MAPPING, json_array_fields=['tech'])\n        return queryset\n    \n    def get_all(self, filter_query: Optional[str] = None):\n        \"\"\"获取所有网站\"\"\"\n        queryset = self.repo.get_all()\n        if filter_query:\n            queryset = apply_filters(queryset, filter_query, self.FILTER_FIELD_MAPPING, json_array_fields=['tech'])\n        return queryset\n    \n    def get_by_url(self, url: str, target_id: int) -> int:\n        \"\"\"根据 URL 和 target_id 查找网站 ID\"\"\"\n        return self.repo.get_by_url(url=url, target_id=target_id)\n    \n    def iter_website_urls_by_target(self, target_id: int, chunk_size: int = 1000):\n        \"\"\"流式获取目标下的所有站点 URL\"\"\"\n        return self.repo.get_urls_for_export(target_id=target_id, batch_size=chunk_size)\n\n    def iter_raw_data_for_csv_export(self, target_id: int) -> Iterator[dict]:\n        \"\"\"\n        流式获取原始数据用于 CSV 导出\n        \n        Args:\n            target_id: 目标 ID\n        \n        Yields:\n            原始数据字典\n        \"\"\"\n        return self.repo.iter_raw_data_for_export(target_id=target_id)\n\n\n__all__ = ['WebSiteService']\n"
  },
  {
    "path": "backend/apps/asset/services/playwright_screenshot_service.py",
    "content": "\"\"\"\nPlaywright 截图服务\n\n使用 Playwright 异步批量捕获网站截图\n\"\"\"\nimport asyncio\nimport logging\nfrom typing import Optional, AsyncGenerator\n\nlogger = logging.getLogger(__name__)\n\n\nclass PlaywrightScreenshotService:\n    \"\"\"Playwright 截图服务 - 异步多 Page 并发截图\"\"\"\n    \n    # 内置默认值（不暴露给用户）\n    DEFAULT_VIEWPORT_WIDTH = 1920\n    DEFAULT_VIEWPORT_HEIGHT = 1080\n    DEFAULT_TIMEOUT = 30000  # 毫秒\n    DEFAULT_JPEG_QUALITY = 85\n    \n    def __init__(\n        self,\n        viewport_width: int = DEFAULT_VIEWPORT_WIDTH,\n        viewport_height: int = DEFAULT_VIEWPORT_HEIGHT,\n        timeout: int = DEFAULT_TIMEOUT,\n        concurrency: int = 5\n    ):\n        \"\"\"\n        初始化 Playwright 截图服务\n        \n        Args:\n            viewport_width: 视口宽度（像素）\n            viewport_height: 视口高度（像素）\n            timeout: 页面加载超时时间（毫秒）\n            concurrency: 并发截图数\n        \"\"\"\n        self.viewport_width = viewport_width\n        self.viewport_height = viewport_height\n        self.timeout = timeout\n        self.concurrency = concurrency\n    \n    async def capture_screenshot(self, url: str, page) -> tuple[Optional[bytes], Optional[int]]:\n        \"\"\"\n        捕获单个 URL 的截图\n        \n        Args:\n            url: 目标 URL\n            page: Playwright Page 对象\n        \n        Returns:\n            (screenshot_bytes, status_code) 元组\n            - screenshot_bytes: JPEG 格式的截图字节数据，失败返回 None\n            - status_code: HTTP 响应状态码，失败返回 None\n        \"\"\"\n        status_code = None\n        try:\n            # 尝试加载页面，即使返回错误状态码也继续截图\n            try:\n                response = await page.goto(url, timeout=self.timeout, wait_until='networkidle')\n                if response:\n                    status_code = response.status\n            except Exception as goto_error:\n                # 页面加载失败（4xx/5xx 或其他错误），但页面可能已部分渲染\n                # 仍然尝试截图以捕获错误页面\n                logger.debug(\"页面加载异常但尝试截图: %s, 错误: %s\", url, str(goto_error)[:50])\n            \n            # 尝试截图（即使 goto 失败）\n            screenshot_bytes = await page.screenshot(\n                type='jpeg',\n                quality=self.DEFAULT_JPEG_QUALITY,\n                full_page=False\n            )\n            return (screenshot_bytes, status_code)\n        except asyncio.TimeoutError:\n            logger.warning(\"截图超时: %s\", url)\n            return (None, None)\n        except Exception as e:\n            logger.warning(\"截图失败: %s, 错误: %s\", url, str(e)[:100])\n            return (None, None)\n    \n    async def _capture_with_semaphore(\n        self,\n        url: str,\n        context,\n        semaphore: asyncio.Semaphore\n    ) -> tuple[str, Optional[bytes], Optional[int]]:\n        \"\"\"\n        使用信号量控制并发的截图任务\n        \n        Args:\n            url: 目标 URL\n            context: Playwright BrowserContext\n            semaphore: 并发控制信号量\n        \n        Returns:\n            (url, screenshot_bytes, status_code) 元组\n        \"\"\"\n        async with semaphore:\n            page = await context.new_page()\n            try:\n                screenshot_bytes, status_code = await self.capture_screenshot(url, page)\n                return (url, screenshot_bytes, status_code)\n            finally:\n                await page.close()\n    \n    async def capture_batch(\n        self,\n        urls: list[str]\n    ) -> AsyncGenerator[tuple[str, Optional[bytes], Optional[int]], None]:\n        \"\"\"\n        批量捕获截图（异步生成器）\n        \n        使用单个 BrowserContext + 多 Page 并发模式\n        通过 Semaphore 控制并发数\n        \n        Args:\n            urls: URL 列表\n        \n        Yields:\n            (url, screenshot_bytes, status_code) 元组\n        \"\"\"\n        if not urls:\n            return\n        \n        from playwright.async_api import async_playwright\n        \n        async with async_playwright() as p:\n            # 启动浏览器（headless 模式）\n            browser = await p.chromium.launch(\n                headless=True,\n                args=[\n                    '--no-sandbox',\n                    '--disable-setuid-sandbox',\n                    '--disable-dev-shm-usage',\n                    '--disable-gpu'\n                ]\n            )\n            \n            try:\n                # 创建单个 context\n                context = await browser.new_context(\n                    viewport={\n                        'width': self.viewport_width,\n                        'height': self.viewport_height\n                    },\n                    ignore_https_errors=True,\n                    user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'\n                )\n                \n                # 使用 Semaphore 控制并发\n                semaphore = asyncio.Semaphore(self.concurrency)\n                \n                # 创建所有任务\n                tasks = [\n                    self._capture_with_semaphore(url, context, semaphore)\n                    for url in urls\n                ]\n                \n                # 使用 as_completed 实现流式返回\n                for coro in asyncio.as_completed(tasks):\n                    result = await coro\n                    yield result\n                \n                await context.close()\n                \n            finally:\n                await browser.close()\n    \n    async def capture_batch_collect(\n        self,\n        urls: list[str]\n    ) -> list[tuple[str, Optional[bytes], Optional[int]]]:\n        \"\"\"\n        批量捕获截图（收集所有结果）\n        \n        Args:\n            urls: URL 列表\n        \n        Returns:\n            [(url, screenshot_bytes, status_code), ...] 列表\n        \"\"\"\n        results = []\n        async for result in self.capture_batch(urls):\n            results.append(result)\n        return results\n"
  },
  {
    "path": "backend/apps/asset/services/screenshot_service.py",
    "content": "\"\"\"\n截图服务\n\n负责截图的压缩、保存和同步\n\"\"\"\nimport io\nimport logging\nimport os\nfrom typing import Optional\n\nfrom PIL import Image\n\nlogger = logging.getLogger(__name__)\n\n\nclass ScreenshotService:\n    \"\"\"截图服务 - 负责压缩、保存和同步\"\"\"\n    \n    def __init__(self, max_width: int = 800, target_kb: int = 100):\n        \"\"\"\n        初始化截图服务\n        \n        Args:\n            max_width: 最大宽度（像素）\n            target_kb: 目标文件大小（KB）\n        \"\"\"\n        self.max_width = max_width\n        self.target_kb = target_kb\n    \n    def compress_screenshot(self, image_path: str) -> Optional[bytes]:\n        \"\"\"\n        压缩截图为 WebP 格式\n        \n        Args:\n            image_path: PNG 截图文件路径\n        \n        Returns:\n            压缩后的 WebP 二进制数据，失败返回 None\n        \"\"\"\n        if not os.path.exists(image_path):\n            logger.warning(f\"截图文件不存在: {image_path}\")\n            return None\n        \n        try:\n            with Image.open(image_path) as img:\n                return self._compress_image(img)\n        except Exception as e:\n            logger.error(f\"压缩截图失败: {image_path}, 错误: {e}\")\n            return None\n    \n    def compress_from_bytes(self, image_bytes: bytes) -> Optional[bytes]:\n        \"\"\"\n        从字节数据压缩截图为 WebP 格式\n        \n        Args:\n            image_bytes: JPEG/PNG 图片字节数据\n        \n        Returns:\n            压缩后的 WebP 二进制数据，失败返回 None\n        \"\"\"\n        if not image_bytes:\n            return None\n        \n        try:\n            img = Image.open(io.BytesIO(image_bytes))\n            return self._compress_image(img)\n        except Exception as e:\n            logger.error(f\"从字节压缩截图失败: {e}\")\n            return None\n    \n    def _compress_image(self, img: Image.Image) -> Optional[bytes]:\n        \"\"\"\n        压缩 PIL Image 对象为 WebP 格式\n        \n        Args:\n            img: PIL Image 对象\n        \n        Returns:\n            压缩后的 WebP 二进制数据\n        \"\"\"\n        try:\n            if img.mode in ('RGBA', 'P'):\n                img = img.convert('RGB')\n            \n            width, height = img.size\n            if width > self.max_width:\n                ratio = self.max_width / width\n                new_size = (self.max_width, int(height * ratio))\n                img = img.resize(new_size, Image.Resampling.LANCZOS)\n            \n            quality = 80\n            while quality >= 10:\n                buffer = io.BytesIO()\n                img.save(buffer, format='WEBP', quality=quality, method=6)\n                if len(buffer.getvalue()) <= self.target_kb * 1024:\n                    return buffer.getvalue()\n                quality -= 10\n            \n            return buffer.getvalue()\n        except Exception as e:\n            logger.error(f\"压缩图片失败: {e}\")\n            return None\n    \n    def save_screenshot_snapshot(\n        self,\n        scan_id: int,\n        url: str,\n        image_data: bytes,\n        status_code: int | None = None\n    ) -> bool:\n        \"\"\"\n        保存截图快照到 ScreenshotSnapshot 表\n        \n        Args:\n            scan_id: 扫描 ID\n            url: 截图对应的 URL\n            image_data: 压缩后的图片二进制数据\n            status_code: HTTP 响应状态码\n        \n        Returns:\n            是否保存成功\n        \"\"\"\n        from apps.asset.models import ScreenshotSnapshot\n        \n        try:\n            ScreenshotSnapshot.objects.update_or_create(\n                scan_id=scan_id,\n                url=url,\n                defaults={'image': image_data, 'status_code': status_code}\n            )\n            return True\n        except Exception as e:\n            logger.error(f\"保存截图快照失败: scan_id={scan_id}, url={url}, 错误: {e}\")\n            return False\n    \n    def sync_screenshots_to_asset(self, scan_id: int, target_id: int) -> int:\n        \"\"\"\n        将扫描的截图快照同步到资产表\n        \n        Args:\n            scan_id: 扫描 ID\n            target_id: 目标 ID\n        \n        Returns:\n            同步的截图数量\n        \"\"\"\n        from apps.asset.models import Screenshot, ScreenshotSnapshot\n        \n        snapshots = ScreenshotSnapshot.objects.filter(scan_id=scan_id)\n        count = 0\n        \n        for snapshot in snapshots:\n            try:\n                Screenshot.objects.update_or_create(\n                    target_id=target_id,\n                    url=snapshot.url,\n                    defaults={\n                        'image': snapshot.image,\n                        'status_code': snapshot.status_code\n                    }\n                )\n                count += 1\n            except Exception as e:\n                logger.error(f\"同步截图到资产表失败: url={snapshot.url}, 错误: {e}\")\n        \n        logger.info(f\"同步截图完成: scan_id={scan_id}, target_id={target_id}, 数量={count}\")\n        return count\n    \n    def process_and_save_screenshot(self, scan_id: int, url: str, image_path: str) -> bool:\n        \"\"\"\n        处理并保存截图（压缩 + 保存快照）\n        \n        Args:\n            scan_id: 扫描 ID\n            url: 截图对应的 URL\n            image_path: PNG 截图文件路径\n        \n        Returns:\n            是否处理成功\n        \"\"\"\n        image_data = self.compress_screenshot(image_path)\n        if image_data is None:\n            return False\n        \n        return self.save_screenshot_snapshot(scan_id, url, image_data)\n"
  },
  {
    "path": "backend/apps/asset/services/search_service.py",
    "content": "\"\"\"\n资产搜索服务\n\n提供资产搜索的核心业务逻辑：\n- 从物化视图查询数据\n- 支持表达式语法解析\n- 支持 =（模糊）、==（精确）、!=（不等于）操作符\n- 支持 && (AND) 和 || (OR) 逻辑组合\n- 支持 Website 和 Endpoint 两种资产类型\n\"\"\"\n\nimport logging\nimport re\nfrom typing import Optional, List, Dict, Any, Tuple, Literal, Iterator\n\nfrom django.db import connection\n\nlogger = logging.getLogger(__name__)\n\n# 支持的字段映射（前端字段名 -> 数据库字段名）\nFIELD_MAPPING = {\n    'host': 'host',\n    'url': 'url',\n    'title': 'title',\n    'tech': 'tech',\n    'status': 'status_code',\n    'body': 'response_body',\n    'header': 'response_headers',\n}\n\n# 数组类型字段\nARRAY_FIELDS = {'tech'}\n\n# 资产类型到视图名的映射\nVIEW_MAPPING = {\n    'website': 'asset_search_view',\n    'endpoint': 'endpoint_search_view',\n}\n\n# 资产类型到原表名的映射（用于 JOIN 获取数组字段）\n# ⚠️ 重要：pg_ivm 不支持 ArrayField，所有数组字段必须从原表 JOIN 获取\nTABLE_MAPPING = {\n    'website': 'website',\n    'endpoint': 'endpoint',\n}\n\n# 有效的资产类型\nVALID_ASSET_TYPES = {'website', 'endpoint'}\n\n# Website 查询字段（v=视图，t=原表）\n# ⚠️ 注意：t.tech 从原表获取，因为 pg_ivm 不支持 ArrayField\nWEBSITE_SELECT_FIELDS = \"\"\"\n    v.id,\n    v.url,\n    v.host,\n    v.title,\n    t.tech,  -- ArrayField，从 website 表 JOIN 获取\n    v.status_code,\n    v.response_headers,\n    v.response_body,\n    v.content_type,\n    v.content_length,\n    v.webserver,\n    v.location,\n    v.vhost,\n    v.created_at,\n    v.target_id\n\"\"\"\n\n# Endpoint 查询字段\n# ⚠️ 注意：t.tech 和 t.matched_gf_patterns 从原表获取，因为 pg_ivm 不支持 ArrayField\nENDPOINT_SELECT_FIELDS = \"\"\"\n    v.id,\n    v.url,\n    v.host,\n    v.title,\n    t.tech,  -- ArrayField，从 endpoint 表 JOIN 获取\n    v.status_code,\n    v.response_headers,\n    v.response_body,\n    v.content_type,\n    v.content_length,\n    v.webserver,\n    v.location,\n    v.vhost,\n    t.matched_gf_patterns,  -- ArrayField，从 endpoint 表 JOIN 获取\n    v.created_at,\n    v.target_id\n\"\"\"\n\n\nclass SearchQueryParser:\n    \"\"\"\n    搜索查询解析器\n    \n    支持语法：\n    - field=\"value\"     模糊匹配（ILIKE %value%）\n    - field==\"value\"    精确匹配\n    - field!=\"value\"    不等于\n    - &&                AND 连接\n    - ||                OR 连接\n    - ()                分组（暂不支持嵌套）\n    \n    示例：\n    - host=\"api\" && tech=\"nginx\"\n    - tech=\"vue\" || tech=\"react\"\n    - status==\"200\" && host!=\"test\"\n    \"\"\"\n    \n    # 匹配单个条件: field=\"value\" 或 field==\"value\" 或 field!=\"value\"\n    CONDITION_PATTERN = re.compile(r'(\\w+)\\s*(==|!=|=)\\s*\"([^\"]*)\"')\n    \n    @classmethod\n    def parse(cls, query: str) -> Tuple[str, List[Any]]:\n        \"\"\"\n        解析查询字符串，返回 SQL WHERE 子句和参数\n        \n        Args:\n            query: 搜索查询字符串\n        \n        Returns:\n            (where_clause, params) 元组\n        \"\"\"\n        if not query or not query.strip():\n            return \"1=1\", []\n        \n        query = query.strip()\n        \n        # 检查是否包含操作符语法，如果不包含则作为 host 模糊搜索\n        if not cls.CONDITION_PATTERN.search(query):\n            # 裸文本，默认作为 host 模糊搜索（v 是视图别名）\n            return \"v.host ILIKE %s\", [f\"%{query}%\"]\n        \n        # 按 || 分割为 OR 组\n        or_groups = cls._split_by_or(query)\n        \n        if len(or_groups) == 1:\n            # 没有 OR，直接解析 AND 条件\n            return cls._parse_and_group(or_groups[0])\n        \n        # 多个 OR 组\n        or_clauses = []\n        all_params = []\n        \n        for group in or_groups:\n            clause, params = cls._parse_and_group(group)\n            if clause and clause != \"1=1\":\n                or_clauses.append(f\"({clause})\")\n                all_params.extend(params)\n        \n        if not or_clauses:\n            return \"1=1\", []\n        \n        return \" OR \".join(or_clauses), all_params\n    \n    @classmethod\n    def _split_by_or(cls, query: str) -> List[str]:\n        \"\"\"按 || 分割查询，但忽略引号内的 ||\"\"\"\n        parts = []\n        current = \"\"\n        in_quotes = False\n        i = 0\n        \n        while i < len(query):\n            char = query[i]\n            \n            if char == '\"':\n                in_quotes = not in_quotes\n                current += char\n            elif not in_quotes and i + 1 < len(query) and query[i:i+2] == '||':\n                if current.strip():\n                    parts.append(current.strip())\n                current = \"\"\n                i += 1  # 跳过第二个 |\n            else:\n                current += char\n            \n            i += 1\n        \n        if current.strip():\n            parts.append(current.strip())\n        \n        return parts if parts else [query]\n    \n    @classmethod\n    def _parse_and_group(cls, group: str) -> Tuple[str, List[Any]]:\n        \"\"\"解析 AND 组（用 && 连接的条件）\"\"\"\n        # 移除外层括号\n        group = group.strip()\n        if group.startswith('(') and group.endswith(')'):\n            group = group[1:-1].strip()\n        \n        # 按 && 分割\n        parts = cls._split_by_and(group)\n        \n        and_clauses = []\n        all_params = []\n        \n        for part in parts:\n            clause, params = cls._parse_condition(part.strip())\n            if clause:\n                and_clauses.append(clause)\n                all_params.extend(params)\n        \n        if not and_clauses:\n            return \"1=1\", []\n        \n        return \" AND \".join(and_clauses), all_params\n    \n    @classmethod\n    def _split_by_and(cls, query: str) -> List[str]:\n        \"\"\"按 && 分割查询，但忽略引号内的 &&\"\"\"\n        parts = []\n        current = \"\"\n        in_quotes = False\n        i = 0\n        \n        while i < len(query):\n            char = query[i]\n            \n            if char == '\"':\n                in_quotes = not in_quotes\n                current += char\n            elif not in_quotes and i + 1 < len(query) and query[i:i+2] == '&&':\n                if current.strip():\n                    parts.append(current.strip())\n                current = \"\"\n                i += 1  # 跳过第二个 &\n            else:\n                current += char\n            \n            i += 1\n        \n        if current.strip():\n            parts.append(current.strip())\n        \n        return parts if parts else [query]\n    \n    @classmethod\n    def _parse_condition(cls, condition: str) -> Tuple[Optional[str], List[Any]]:\n        \"\"\"\n        解析单个条件\n        \n        Returns:\n            (sql_clause, params) 或 (None, []) 如果解析失败\n        \"\"\"\n        # 移除括号\n        condition = condition.strip()\n        if condition.startswith('(') and condition.endswith(')'):\n            condition = condition[1:-1].strip()\n        \n        match = cls.CONDITION_PATTERN.match(condition)\n        if not match:\n            logger.warning(f\"无法解析条件: {condition}\")\n            return None, []\n        \n        field, operator, value = match.groups()\n        field = field.lower()\n        \n        # 验证字段\n        if field not in FIELD_MAPPING:\n            logger.warning(f\"未知字段: {field}\")\n            return None, []\n        \n        db_field = FIELD_MAPPING[field]\n        is_array = field in ARRAY_FIELDS\n        \n        # 根据操作符生成 SQL\n        if operator == '=':\n            # 模糊匹配\n            return cls._build_like_condition(db_field, value, is_array)\n        elif operator == '==':\n            # 精确匹配\n            return cls._build_exact_condition(db_field, value, is_array)\n        elif operator == '!=':\n            # 不等于\n            return cls._build_not_equal_condition(db_field, value, is_array)\n        \n        return None, []\n    \n    @classmethod\n    def _build_like_condition(cls, field: str, value: str, is_array: bool) -> Tuple[str, List[Any]]:\n        \"\"\"构建模糊匹配条件\"\"\"\n        if is_array:\n            # 数组字段：检查数组中是否有元素包含该值（从原表 t 获取）\n            return f\"EXISTS (SELECT 1 FROM unnest(t.{field}) AS elem WHERE elem ILIKE %s)\", [f\"%{value}%\"]\n        elif field == 'status_code':\n            # 状态码是整数，模糊匹配转为精确匹配\n            try:\n                return f\"v.{field} = %s\", [int(value)]\n            except ValueError:\n                return f\"v.{field}::text ILIKE %s\", [f\"%{value}%\"]\n        else:\n            return f\"v.{field} ILIKE %s\", [f\"%{value}%\"]\n    \n    @classmethod\n    def _build_exact_condition(cls, field: str, value: str, is_array: bool) -> Tuple[str, List[Any]]:\n        \"\"\"构建精确匹配条件\"\"\"\n        if is_array:\n            # 数组字段：检查数组中是否包含该精确值（从原表 t 获取）\n            return f\"%s = ANY(t.{field})\", [value]\n        elif field == 'status_code':\n            # 状态码是整数\n            try:\n                return f\"v.{field} = %s\", [int(value)]\n            except ValueError:\n                return f\"v.{field}::text = %s\", [value]\n        else:\n            return f\"v.{field} = %s\", [value]\n    \n    @classmethod\n    def _build_not_equal_condition(cls, field: str, value: str, is_array: bool) -> Tuple[str, List[Any]]:\n        \"\"\"构建不等于条件\"\"\"\n        if is_array:\n            # 数组字段：检查数组中不包含该值（从原表 t 获取）\n            return f\"NOT (%s = ANY(t.{field}))\", [value]\n        elif field == 'status_code':\n            try:\n                return f\"(v.{field} IS NULL OR v.{field} != %s)\", [int(value)]\n            except ValueError:\n                return f\"(v.{field} IS NULL OR v.{field}::text != %s)\", [value]\n        else:\n            return f\"(v.{field} IS NULL OR v.{field} != %s)\", [value]\n\n\nAssetType = Literal['website', 'endpoint']\n\n\nclass AssetSearchService:\n    \"\"\"资产搜索服务\"\"\"\n    \n    def search(\n        self, \n        query: str, \n        asset_type: AssetType = 'website',\n        limit: Optional[int] = None\n    ) -> List[Dict[str, Any]]:\n        \"\"\"\n        搜索资产\n        \n        Args:\n            query: 搜索查询字符串\n            asset_type: 资产类型 ('website' 或 'endpoint')\n            limit: 最大返回数量（可选）\n        \n        Returns:\n            List[Dict]: 搜索结果列表\n        \"\"\"\n        where_clause, params = SearchQueryParser.parse(query)\n        \n        # 根据资产类型选择视图、原表和字段\n        view_name = VIEW_MAPPING.get(asset_type, 'asset_search_view')\n        table_name = TABLE_MAPPING.get(asset_type, 'website')\n        select_fields = ENDPOINT_SELECT_FIELDS if asset_type == 'endpoint' else WEBSITE_SELECT_FIELDS\n        \n        # JOIN 原表获取数组字段（tech, matched_gf_patterns）\n        sql = f\"\"\"\n            SELECT {select_fields}\n            FROM {view_name} v\n            JOIN {table_name} t ON v.id = t.id\n            WHERE {where_clause}\n            ORDER BY v.created_at DESC\n        \"\"\"\n        \n        # 添加 LIMIT\n        if limit is not None and limit > 0:\n            sql += f\" LIMIT {int(limit)}\"\n        \n        try:\n            with connection.cursor() as cursor:\n                cursor.execute(sql, params)\n                columns = [col[0] for col in cursor.description]\n                results = []\n                \n                for row in cursor.fetchall():\n                    result = dict(zip(columns, row))\n                    results.append(result)\n                \n                return results\n        except Exception as e:\n            logger.error(f\"搜索查询失败: {e}, SQL: {sql}, params: {params}\")\n            raise\n    \n    def count(self, query: str, asset_type: AssetType = 'website', statement_timeout_ms: int = 300000) -> int:\n        \"\"\"\n        统计搜索结果数量\n        \n        Args:\n            query: 搜索查询字符串\n            asset_type: 资产类型 ('website' 或 'endpoint')\n            statement_timeout_ms: SQL 语句超时时间（毫秒），默认 5 分钟\n        \n        Returns:\n            int: 结果总数\n        \"\"\"\n        where_clause, params = SearchQueryParser.parse(query)\n        \n        # 根据资产类型选择视图和原表\n        view_name = VIEW_MAPPING.get(asset_type, 'asset_search_view')\n        table_name = TABLE_MAPPING.get(asset_type, 'website')\n        \n        # JOIN 原表以支持数组字段查询\n        sql = f\"SELECT COUNT(*) FROM {view_name} v JOIN {table_name} t ON v.id = t.id WHERE {where_clause}\"\n        \n        try:\n            with connection.cursor() as cursor:\n                # 为导出设置更长的超时时间（仅影响当前会话）\n                cursor.execute(f\"SET LOCAL statement_timeout = {statement_timeout_ms}\")\n                cursor.execute(sql, params)\n                return cursor.fetchone()[0]\n        except Exception as e:\n            logger.error(f\"统计查询失败: {e}\")\n            raise\n    \n    def search_iter(\n        self, \n        query: str, \n        asset_type: AssetType = 'website',\n        batch_size: int = 1000,\n        statement_timeout_ms: int = 300000\n    ) -> Iterator[Dict[str, Any]]:\n        \"\"\"\n        流式搜索资产（使用分批查询，内存友好）\n        \n        Args:\n            query: 搜索查询字符串\n            asset_type: 资产类型 ('website' 或 'endpoint')\n            batch_size: 每批获取的数量\n            statement_timeout_ms: SQL 语句超时时间（毫秒），默认 5 分钟\n        \n        Yields:\n            Dict: 单条搜索结果\n        \"\"\"\n        where_clause, params = SearchQueryParser.parse(query)\n        \n        # 根据资产类型选择视图、原表和字段\n        view_name = VIEW_MAPPING.get(asset_type, 'asset_search_view')\n        table_name = TABLE_MAPPING.get(asset_type, 'website')\n        select_fields = ENDPOINT_SELECT_FIELDS if asset_type == 'endpoint' else WEBSITE_SELECT_FIELDS\n        \n        # 使用 OFFSET/LIMIT 分批查询（Django 不支持命名游标）\n        offset = 0\n        \n        try:\n            while True:\n                # JOIN 原表获取数组字段\n                sql = f\"\"\"\n                    SELECT {select_fields}\n                    FROM {view_name} v\n                    JOIN {table_name} t ON v.id = t.id\n                    WHERE {where_clause}\n                    ORDER BY v.created_at DESC\n                    LIMIT {batch_size} OFFSET {offset}\n                \"\"\"\n                \n                with connection.cursor() as cursor:\n                    # 为导出设置更长的超时时间（仅影响当前会话）\n                    cursor.execute(f\"SET LOCAL statement_timeout = {statement_timeout_ms}\")\n                    cursor.execute(sql, params)\n                    columns = [col[0] for col in cursor.description]\n                    rows = cursor.fetchall()\n                \n                if not rows:\n                    break\n                \n                for row in rows:\n                    yield dict(zip(columns, row))\n                \n                # 如果返回的行数少于 batch_size，说明已经是最后一批\n                if len(rows) < batch_size:\n                    break\n                \n                offset += batch_size\n                \n        except Exception as e:\n            logger.error(f\"流式搜索查询失败: {e}, SQL: {sql}, params: {params}\")\n            raise\n"
  },
  {
    "path": "backend/apps/asset/services/snapshot/__init__.py",
    "content": "\"\"\"Snapshot Services - 快照服务\"\"\"\n\nfrom .subdomain_snapshots_service import SubdomainSnapshotsService\nfrom .host_port_mapping_snapshots_service import HostPortMappingSnapshotsService\nfrom .website_snapshots_service import WebsiteSnapshotsService\nfrom .directory_snapshots_service import DirectorySnapshotsService\nfrom .endpoint_snapshots_service import EndpointSnapshotsService\nfrom .vulnerability_snapshots_service import VulnerabilitySnapshotsService\n\n__all__ = [\n    'SubdomainSnapshotsService',\n    'HostPortMappingSnapshotsService',\n    'WebsiteSnapshotsService',\n    'DirectorySnapshotsService',\n    'EndpointSnapshotsService',\n    'VulnerabilitySnapshotsService',\n]\n"
  },
  {
    "path": "backend/apps/asset/services/snapshot/directory_snapshots_service.py",
    "content": "\"\"\"Directory Snapshots Service - 业务逻辑层\"\"\"\n\nimport logging\nfrom typing import List, Iterator\n\nfrom apps.asset.repositories.snapshot import DjangoDirectorySnapshotRepository\nfrom apps.asset.services.asset import DirectoryService\nfrom apps.asset.dtos.snapshot import DirectorySnapshotDTO\n\nlogger = logging.getLogger(__name__)\n\n\nclass DirectorySnapshotsService:\n    \"\"\"目录快照服务 - 统一管理快照和资产同步\"\"\"\n    \n    def __init__(self):\n        self.snapshot_repo = DjangoDirectorySnapshotRepository()\n        self.asset_service = DirectoryService()\n    \n    def save_and_sync(self, items: List[DirectorySnapshotDTO]) -> None:\n        \"\"\"\n        保存目录快照并同步到资产表（统一入口）\n        \n        流程：\n        1. 保存到快照表（完整记录，包含 scan_id）\n        2. 同步到资产表（去重，不包含 scan_id）\n        \n        Args:\n            items: 目录快照 DTO 列表（必须包含 target_id）\n        \n        Raises:\n            Exception: 数据库操作失败\n        \"\"\"\n        if not items:\n            return\n        \n        # 检查 Scan 是否仍存在（防止删除后竞态写入）\n        scan_id = items[0].scan_id\n        from apps.scan.repositories import DjangoScanRepository\n        if not DjangoScanRepository().exists(scan_id):\n            logger.warning(\"Scan 已删除，跳过目录快照保存 - scan_id=%s, 数量=%d\", scan_id, len(items))\n            return\n        \n        try:\n            logger.debug(\"保存目录快照并同步到资产表 - 数量: %d\", len(items))\n            \n            # 步骤 1: 保存到快照表\n            logger.debug(\"步骤 1: 保存到快照表\")\n            self.snapshot_repo.save_snapshots(items)\n            \n            # 步骤 2: 转换为资产 DTO 并保存到资产表（upsert）\n            # - 新记录：插入资产表\n            # - 已存在的记录：更新字段（created_at 不更新，保留创建时间）\n            logger.debug(\"步骤 2: 同步到资产表（通过 Service 层，upsert）\")\n            asset_items = [item.to_asset_dto() for item in items]\n            \n            self.asset_service.bulk_upsert(asset_items)\n            \n            logger.info(\"目录快照和资产数据保存成功 - 数量: %d\", len(items))\n            \n        except Exception as e:\n            logger.error(\n                \"保存目录快照失败 - 数量: %d, 错误: %s\",\n                len(items),\n                str(e),\n                exc_info=True\n            )\n            raise\n    \n    # 智能过滤字段映射\n    FILTER_FIELD_MAPPING = {\n        'url': 'url',\n        'status': 'status',\n        'content_type': 'content_type',\n    }\n    \n    def get_by_scan(self, scan_id: int, filter_query: str = None):\n        from apps.common.utils.filter_utils import apply_filters\n        \n        queryset = self.snapshot_repo.get_by_scan(scan_id)\n        if filter_query:\n            queryset = apply_filters(queryset, filter_query, self.FILTER_FIELD_MAPPING)\n        return queryset\n\n    def get_all(self, filter_query: str = None):\n        \"\"\"获取所有目录快照\"\"\"\n        from apps.common.utils.filter_utils import apply_filters\n        \n        queryset = self.snapshot_repo.get_all()\n        if filter_query:\n            queryset = apply_filters(queryset, filter_query, self.FILTER_FIELD_MAPPING)\n        return queryset\n\n    def iter_directory_urls_by_scan(self, scan_id: int, chunk_size: int = 1000) -> Iterator[str]:\n        \"\"\"流式获取某次扫描下的所有目录 URL。\"\"\"\n        queryset = self.snapshot_repo.get_by_scan(scan_id)\n        for snapshot in queryset.iterator(chunk_size=chunk_size):\n            yield snapshot.url\n\n    def iter_raw_data_for_csv_export(self, scan_id: int) -> Iterator[dict]:\n        \"\"\"\n        流式获取原始数据用于 CSV 导出\n        \n        Args:\n            scan_id: 扫描 ID\n        \n        Yields:\n            原始数据字典\n        \"\"\"\n        return self.snapshot_repo.iter_raw_data_for_export(scan_id=scan_id)\n"
  },
  {
    "path": "backend/apps/asset/services/snapshot/endpoint_snapshots_service.py",
    "content": "\"\"\"Endpoint Snapshots Service - 业务逻辑层\"\"\"\n\nimport logging\nfrom typing import List, Iterator\n\nfrom apps.asset.repositories.snapshot import DjangoEndpointSnapshotRepository\nfrom apps.asset.services.asset import EndpointService\nfrom apps.asset.dtos.snapshot import EndpointSnapshotDTO\n\nlogger = logging.getLogger(__name__)\n\n\nclass EndpointSnapshotsService:\n    \"\"\"端点快照服务 - 统一管理快照和资产同步\"\"\"\n    \n    def __init__(self):\n        self.snapshot_repo = DjangoEndpointSnapshotRepository()\n        self.asset_service = EndpointService()\n    \n    def save_and_sync(self, items: List[EndpointSnapshotDTO]) -> None:\n        \"\"\"\n        保存端点快照并同步到资产表（统一入口）\n        \n        流程：\n        1. 保存到快照表（完整记录）\n        2. 同步到资产表（去重）\n        \n        Args:\n            items: 端点快照 DTO 列表（必须包含 target_id）\n        \n        Raises:\n            ValueError: 如果 items 中的 target_id 为 None\n            Exception: 数据库操作失败\n        \"\"\"\n        if not items:\n            return\n        \n        # 检查 Scan 是否仍存在（防止删除后竞态写入）\n        scan_id = items[0].scan_id\n        from apps.scan.repositories import DjangoScanRepository\n        if not DjangoScanRepository().exists(scan_id):\n            logger.warning(\"Scan 已删除，跳过端点快照保存 - scan_id=%s, 数量=%d\", scan_id, len(items))\n            return\n        \n        try:\n            logger.debug(\"保存端点快照并同步到资产表 - 数量: %d\", len(items))\n            \n            # 步骤 1: 保存到快照表\n            logger.debug(\"步骤 1: 保存到快照表\")\n            self.snapshot_repo.save_snapshots(items)\n            \n            # 步骤 2: 转换为资产 DTO 并保存到资产表\n            # 使用 upsert：新记录插入，已存在的记录更新\n            logger.debug(\"步骤 2: 同步到资产表（通过 Service 层）\")\n            asset_items = [item.to_asset_dto() for item in items]\n            \n            self.asset_service.bulk_upsert(asset_items)\n            \n            logger.info(\"端点快照和资产数据保存成功 - 数量: %d\", len(items))\n            \n        except Exception as e:\n            logger.error(\n                \"保存端点快照失败 - 数量: %d, 错误: %s\",\n                len(items),\n                str(e),\n                exc_info=True\n            )\n            raise\n    \n    # 智能过滤字段映射\n    FILTER_FIELD_MAPPING = {\n        'url': 'url',\n        'host': 'host',\n        'title': 'title',\n        'status_code': 'status_code',\n        'webserver': 'webserver',\n        'tech': 'tech',\n    }\n    \n    def get_by_scan(self, scan_id: int, filter_query: str = None):\n        from apps.common.utils.filter_utils import apply_filters\n        \n        queryset = self.snapshot_repo.get_by_scan(scan_id)\n        if filter_query:\n            queryset = apply_filters(queryset, filter_query, self.FILTER_FIELD_MAPPING)\n        return queryset\n\n    def get_all(self, filter_query: str = None):\n        \"\"\"获取所有端点快照\"\"\"\n        from apps.common.utils.filter_utils import apply_filters\n        \n        queryset = self.snapshot_repo.get_all()\n        if filter_query:\n            queryset = apply_filters(queryset, filter_query, self.FILTER_FIELD_MAPPING)\n        return queryset\n\n    def iter_endpoint_urls_by_scan(self, scan_id: int, chunk_size: int = 1000) -> Iterator[str]:\n        \"\"\"流式获取某次扫描下的所有端点 URL。\"\"\"\n        queryset = self.snapshot_repo.get_by_scan(scan_id)\n        for snapshot in queryset.iterator(chunk_size=chunk_size):\n            yield snapshot.url\n\n    def iter_raw_data_for_csv_export(self, scan_id: int) -> Iterator[dict]:\n        \"\"\"\n        流式获取原始数据用于 CSV 导出\n        \n        Args:\n            scan_id: 扫描 ID\n        \n        Yields:\n            原始数据字典\n        \"\"\"\n        return self.snapshot_repo.iter_raw_data_for_export(scan_id=scan_id)\n"
  },
  {
    "path": "backend/apps/asset/services/snapshot/host_port_mapping_snapshots_service.py",
    "content": "\"\"\"HostPortMapping Snapshots Service - 业务逻辑层\"\"\"\n\nimport logging\nfrom typing import List, Iterator\n\nfrom apps.asset.repositories.snapshot import DjangoHostPortMappingSnapshotRepository\nfrom apps.asset.services.asset import HostPortMappingService\nfrom apps.asset.dtos.snapshot import HostPortMappingSnapshotDTO\n\nlogger = logging.getLogger(__name__)\n\n\nclass HostPortMappingSnapshotsService:\n    \"\"\"HostPortMapping Snapshots Service - 统一管理快照和资产同步\"\"\"\n    \n    def __init__(self):\n        self.snapshot_repo = DjangoHostPortMappingSnapshotRepository()\n        self.asset_service = HostPortMappingService()\n    \n    def save_and_sync(self, items: List[HostPortMappingSnapshotDTO]) -> None:\n        \"\"\"\n        保存主机端口关联快照并同步到资产表（统一入口）\n        \n        流程：\n        1. 保存到快照表（完整记录，包含 scan_id）\n        2. 同步到资产表（去重，不包含 scan_id）\n        \n        Args:\n            items: 主机端口关联快照 DTO 列表（必须包含 target_id）\n        \n        Note:\n            target_id 已经包含在 DTO 中，无需额外传参。\n        \"\"\"\n        logger.debug(\"保存主机端口关联快照 - 数量: %d\", len(items))\n        \n        if not items:\n            logger.debug(\"快照数据为空，跳过保存\")\n            return\n        \n        # 检查 Scan 是否仍存在（防止删除后竞态写入）\n        scan_id = items[0].scan_id\n        from apps.scan.repositories import DjangoScanRepository\n        if not DjangoScanRepository().exists(scan_id):\n            logger.warning(\"Scan 已删除，跳过主机端口快照保存 - scan_id=%s, 数量=%d\", scan_id, len(items))\n            return\n        \n        try:\n            # 步骤 1: 保存到快照表\n            logger.debug(\"步骤 1: 保存到快照表\")\n            self.snapshot_repo.save_snapshots(items)\n            \n            # 步骤 2: 转换为资产 DTO 并保存到资产表\n            # 注意：去重是通过数据库的 UNIQUE 约束 + ignore_conflicts 实现的\n            # - 新记录：插入资产表\n            # - 已存在的记录：自动跳过\n            logger.debug(\"步骤 2: 同步到资产表（通过 Service 层）\")\n            asset_items = [item.to_asset_dto() for item in items]\n            \n            self.asset_service.bulk_create_ignore_conflicts(asset_items)\n            \n            logger.info(\"主机端口关联快照和资产数据保存成功 - 数量: %d\", len(items))\n            \n        except Exception as e:\n            logger.error(\n                \"保存主机端口关联快照失败 - 数量: %d, 错误: %s\",\n                len(items),\n                str(e),\n                exc_info=True\n            )\n            raise\n    \n    def get_ip_aggregation_by_scan(self, scan_id: int, filter_query: str = None):\n        return self.snapshot_repo.get_ip_aggregation_by_scan(scan_id, filter_query=filter_query)\n\n    def get_all_ip_aggregation(self, filter_query: str = None):\n        \"\"\"获取所有 IP 聚合数据\"\"\"\n        return self.snapshot_repo.get_all_ip_aggregation(filter_query=filter_query)\n\n    def iter_ips_by_scan(self, scan_id: int, batch_size: int = 1000) -> Iterator[str]:\n        \"\"\"流式获取某次扫描下的所有唯一 IP 地址。\"\"\"\n        return self.snapshot_repo.get_ips_for_export(scan_id=scan_id, batch_size=batch_size)\n\n    def iter_raw_data_for_csv_export(self, scan_id: int) -> Iterator[dict]:\n        \"\"\"\n        流式获取原始数据用于 CSV 导出\n        \n        Args:\n            scan_id: 扫描 ID\n        \n        Yields:\n            原始数据字典 {ip, host, port, created_at}\n        \"\"\"\n        return self.snapshot_repo.iter_raw_data_for_export(scan_id=scan_id)\n"
  },
  {
    "path": "backend/apps/asset/services/snapshot/subdomain_snapshots_service.py",
    "content": "import logging\nfrom typing import List, Iterator\n\nfrom apps.asset.dtos import SubdomainSnapshotDTO\nfrom apps.asset.repositories import DjangoSubdomainSnapshotRepository\n\nlogger = logging.getLogger(__name__)\n\n\nclass SubdomainSnapshotsService:\n    \"\"\"子域名快照服务 - 负责子域名快照数据的业务逻辑\"\"\"\n    \n    def __init__(self):\n        self.subdomain_snapshot_repo = DjangoSubdomainSnapshotRepository()\n    \n    def save_and_sync(self, items: List[SubdomainSnapshotDTO]) -> None:\n        \"\"\"\n        保存子域名快照并同步到资产表（统一入口）\n        \n        流程：\n        1. 保存到快照表（完整记录，包含 scan_id）\n        2. 同步到资产表（去重，不包含 scan_id）\n        \n        Args:\n            items: 子域名快照 DTO 列表（包含 target_id）\n        \n        Note:\n            target_id 已经包含在 DTO 中，无需额外传参。\n        \"\"\"\n        logger.debug(\"保存子域名快照 - 数量: %d\", len(items))\n        \n        if not items:\n            logger.debug(\"快照数据为空，跳过保存\")\n            return\n        \n        # 检查 Scan 是否仍存在（防止删除后竞态写入）\n        scan_id = items[0].scan_id\n        from apps.scan.repositories import DjangoScanRepository\n        if not DjangoScanRepository().exists(scan_id):\n            logger.warning(\"Scan 已删除，跳过快照保存 - scan_id=%s, 数量=%d\", scan_id, len(items))\n            return\n        \n        try:\n            # 步骤 1: 保存到快照表\n            logger.debug(\"步骤 1: 保存到快照表\")\n            self.subdomain_snapshot_repo.save_subdomain_snapshots(items)\n            \n            # 步骤 2: 转换为资产 DTO 并保存到资产表（通过数据库唯一约束自动去重）\n            # 注意：去重是通过数据库的 UNIQUE 约束 + ignore_conflicts 实现的\n            # - 新子域名：插入资产表\n            # - 已存在的子域名：自动跳过（不更新，因为资产表只记录核心数据）\n            asset_items = [item.to_asset_dto() for item in items]\n            \n            from apps.asset.services import SubdomainService\n            subdomain_service = SubdomainService()\n            subdomain_service.bulk_create_ignore_conflicts(asset_items)\n            \n            logger.info(\"子域名快照和业务数据保存成功 - 数量: %d\", len(items))\n            \n        except Exception as e:\n            logger.error(\n                \"保存子域名快照失败 - 数量: %d, 错误: %s\",\n                len(items),\n                str(e),\n                exc_info=True\n            )\n            raise\n    \n    # 智能过滤字段映射\n    FILTER_FIELD_MAPPING = {\n        'name': 'name',\n    }\n    \n    def get_by_scan(self, scan_id: int, filter_query: str = None):\n        from apps.common.utils.filter_utils import apply_filters\n        \n        queryset = self.subdomain_snapshot_repo.get_by_scan(scan_id)\n        if filter_query:\n            queryset = apply_filters(queryset, filter_query, self.FILTER_FIELD_MAPPING)\n        return queryset\n\n    def get_all(self, filter_query: str = None):\n        \"\"\"获取所有子域名快照\"\"\"\n        from apps.common.utils.filter_utils import apply_filters\n        \n        queryset = self.subdomain_snapshot_repo.get_all()\n        if filter_query:\n            queryset = apply_filters(queryset, filter_query, self.FILTER_FIELD_MAPPING)\n        return queryset\n\n    def iter_subdomain_names_by_scan(self, scan_id: int, chunk_size: int = 1000) -> Iterator[str]:\n        queryset = self.subdomain_snapshot_repo.get_by_scan(scan_id)\n        for snapshot in queryset.iterator(chunk_size=chunk_size):\n            yield snapshot.name\n\n    def iter_raw_data_for_csv_export(self, scan_id: int) -> Iterator[dict]:\n        \"\"\"\n        流式获取原始数据用于 CSV 导出\n        \n        Args:\n            scan_id: 扫描 ID\n        \n        Yields:\n            原始数据字典 {name, created_at}\n        \"\"\"\n        return self.subdomain_snapshot_repo.iter_raw_data_for_export(scan_id=scan_id)"
  },
  {
    "path": "backend/apps/asset/services/snapshot/vulnerability_snapshots_service.py",
    "content": "\"\"\"Vulnerability Snapshots Service - 业务逻辑层\"\"\"\n\nimport logging\nfrom typing import List, Iterator\n\nfrom apps.asset.repositories.snapshot import DjangoVulnerabilitySnapshotRepository\nfrom apps.asset.services.asset.vulnerability_service import VulnerabilityService\nfrom apps.asset.dtos.snapshot import VulnerabilitySnapshotDTO\n\nlogger = logging.getLogger(__name__)\n\n\nclass VulnerabilitySnapshotsService:\n    \"\"\"漏洞快照服务 - 统一管理快照和资产同步。\n\n    流程与 Website/Directory 等保持一致：\n    1. 保存到 VulnerabilitySnapshot 快照表（包含 scan_id）\n    2. 转为 VulnerabilityDTO 并同步到 Vulnerability 资产表（基于 target_id）\n    \"\"\"\n\n    def __init__(self):\n        self.snapshot_repo = DjangoVulnerabilitySnapshotRepository()\n        self.asset_service = VulnerabilityService()\n\n    def save_and_sync(self, items: List[VulnerabilitySnapshotDTO]) -> None:\n        \"\"\"保存漏洞快照并同步到漏洞资产表。\"\"\"\n        if not items:\n            return\n        \n        # 检查 Scan 是否仍存在（防止删除后竞态写入）\n        scan_id = items[0].scan_id\n        from apps.scan.repositories import DjangoScanRepository\n        if not DjangoScanRepository().exists(scan_id):\n            logger.warning(\"Scan 已删除，跳过漏洞快照保存 - scan_id=%s, 数量=%d\", scan_id, len(items))\n            return\n        \n        try:\n            logger.debug(\"保存漏洞快照并同步到资产表 - 数量: %d\", len(items))\n\n            # 步骤 1: 保存到快照表\n            logger.debug(\"步骤 1: 保存到漏洞快照表\")\n            self.snapshot_repo.save_snapshots(items)\n\n            # 步骤 2: 转换为资产 DTO 并保存到资产表\n            logger.debug(\"步骤 2: 同步到漏洞资产表\")\n            asset_items = [item.to_asset_dto() for item in items]\n            self.asset_service.bulk_create_ignore_conflicts(asset_items)\n\n            logger.info(\"漏洞快照和资产数据保存成功 - 数量: %d\", len(items))\n            \n            # 步骤 3: 发布漏洞保存信号（通知等模块可监听）\n            from apps.common.signals import vulnerabilities_saved\n            vulnerabilities_saved.send(\n                sender=self.__class__,\n                items=items,\n                scan_id=scan_id,\n                target_id=items[0].target_id if items else None\n            )\n\n        except Exception as e:\n            logger.error(\n                \"保存漏洞快照失败 - 数量: %d, 错误: %s\",\n                len(items),\n                str(e),\n                exc_info=True,\n            )\n            raise\n\n    # 智能过滤字段映射\n    FILTER_FIELD_MAPPING = {\n        'type': 'vuln_type',\n        'url': 'url',\n        'severity': 'severity',\n        'source': 'source',\n    }\n\n    def get_by_scan(self, scan_id: int, filter_query: str = None):\n        \"\"\"按扫描任务获取所有漏洞快照。\"\"\"\n        from apps.common.utils.filter_utils import apply_filters\n        \n        queryset = self.snapshot_repo.get_by_scan(scan_id)\n        if filter_query:\n            queryset = apply_filters(queryset, filter_query, self.FILTER_FIELD_MAPPING)\n        return queryset\n\n    def get_all(self, filter_query: str = None):\n        \"\"\"获取所有漏洞快照\"\"\"\n        from apps.common.utils.filter_utils import apply_filters\n        \n        queryset = self.snapshot_repo.get_all()\n        if filter_query:\n            queryset = apply_filters(queryset, filter_query, self.FILTER_FIELD_MAPPING)\n        return queryset\n\n    def iter_vuln_urls_by_scan(self, scan_id: int, chunk_size: int = 1000) -> Iterator[str]:\n        \"\"\"流式获取某次扫描下的所有漏洞 URL。\"\"\"\n        queryset = self.snapshot_repo.get_by_scan(scan_id)\n        for snapshot in queryset.iterator(chunk_size=chunk_size):\n            yield snapshot.url\n"
  },
  {
    "path": "backend/apps/asset/services/snapshot/website_snapshots_service.py",
    "content": "\"\"\"Website Snapshots Service - 业务逻辑层\"\"\"\n\nimport logging\nfrom typing import List, Iterator\n\nfrom apps.asset.repositories.snapshot import DjangoWebsiteSnapshotRepository\nfrom apps.asset.services.asset import WebSiteService\nfrom apps.asset.dtos.snapshot import WebsiteSnapshotDTO\n\nlogger = logging.getLogger(__name__)\n\n\nclass WebsiteSnapshotsService:\n    \"\"\"网站快照服务 - 统一管理快照和资产同步\"\"\"\n    \n    def __init__(self):\n        self.snapshot_repo = DjangoWebsiteSnapshotRepository()\n        self.asset_service = WebSiteService()\n    \n    def save_and_sync(self, items: List[WebsiteSnapshotDTO]) -> None:\n        \"\"\"\n        保存网站快照并同步到资产表（统一入口）\n        \n        流程：\n        1. 保存到快照表（完整记录，包含 scan_id）\n        2. 同步到资产表（去重，不包含 scan_id）\n        \n        Args:\n            items: 网站快照 DTO 列表（必须包含 target_id）\n        \n        Raises:\n            ValueError: 如果 items 中的 target_id 为 None\n            Exception: 数据库操作失败\n        \"\"\"\n        if not items:\n            return\n        \n        # 检查 Scan 是否仍存在（防止删除后竞态写入）\n        scan_id = items[0].scan_id\n        from apps.scan.repositories import DjangoScanRepository\n        if not DjangoScanRepository().exists(scan_id):\n            logger.warning(\"Scan 已删除，跳过网站快照保存 - scan_id=%s, 数量=%d\", scan_id, len(items))\n            return\n        \n        try:\n            logger.debug(\"保存网站快照并同步到资产表 - 数量: %d\", len(items))\n            \n            # 步骤 1: 保存到快照表\n            logger.debug(\"步骤 1: 保存到快照表\")\n            self.snapshot_repo.save_snapshots(items)\n            \n            # 步骤 2: 转换为资产 DTO 并保存到资产表（upsert）\n            # - 新记录：插入资产表\n            # - 已存在的记录：更新字段（created_at 不更新，保留创建时间）\n            logger.debug(\"步骤 2: 同步到资产表（通过 Service 层，upsert）\")\n            asset_items = [item.to_asset_dto() for item in items]\n            \n            self.asset_service.bulk_upsert(asset_items)\n            \n            logger.info(\"网站快照和资产数据保存成功 - 数量: %d\", len(items))\n            \n        except Exception as e:\n            logger.error(\n                \"保存网站快照失败 - 数量: %d, 错误: %s\",\n                len(items),\n                str(e),\n                exc_info=True\n            )\n            raise\n    \n    # 智能过滤字段映射\n    FILTER_FIELD_MAPPING = {\n        'url': 'url',\n        'host': 'host',\n        'title': 'title',\n        'status_code': 'status_code',\n        'webserver': 'webserver',\n        'tech': 'tech',\n    }\n    \n    def get_by_scan(self, scan_id: int, filter_query: str = None):\n        from apps.common.utils.filter_utils import apply_filters\n        \n        queryset = self.snapshot_repo.get_by_scan(scan_id)\n        if filter_query:\n            queryset = apply_filters(queryset, filter_query, self.FILTER_FIELD_MAPPING)\n        return queryset\n\n    def get_all(self, filter_query: str = None):\n        \"\"\"获取所有网站快照\"\"\"\n        from apps.common.utils.filter_utils import apply_filters\n        \n        queryset = self.snapshot_repo.get_all()\n        if filter_query:\n            queryset = apply_filters(queryset, filter_query, self.FILTER_FIELD_MAPPING)\n        return queryset\n\n    def iter_website_urls_by_scan(self, scan_id: int, chunk_size: int = 1000) -> Iterator[str]:\n        \"\"\"流式获取某次扫描下的所有站点 URL（按创建时间倒序）。\"\"\"\n        queryset = self.snapshot_repo.get_by_scan(scan_id)\n        for snapshot in queryset.iterator(chunk_size=chunk_size):\n            yield snapshot.url\n\n    def iter_raw_data_for_csv_export(self, scan_id: int) -> Iterator[dict]:\n        \"\"\"\n        流式获取原始数据用于 CSV 导出\n        \n        Args:\n            scan_id: 扫描 ID\n        \n        Yields:\n            原始数据字典\n        \"\"\"\n        return self.snapshot_repo.iter_raw_data_for_export(scan_id=scan_id)\n"
  },
  {
    "path": "backend/apps/asset/services/statistics_service.py",
    "content": "\"\"\"资产统计 Service\"\"\"\nimport logging\nfrom typing import Optional\n\nfrom django.db.models import Count\n\nfrom apps.asset.repositories import AssetStatisticsRepository\nfrom apps.asset.models import (\n    AssetStatistics,\n    StatisticsHistory,\n    Subdomain,\n    WebSite,\n    Endpoint,\n    HostPortMapping,\n    Vulnerability,\n)\nfrom apps.targets.models import Target\nfrom apps.scan.models import Scan\n\nlogger = logging.getLogger(__name__)\n\n\nclass AssetStatisticsService:\n    \"\"\"\n    资产统计服务\n    \n    职责：\n    - 获取统计数据\n    - 刷新统计数据（供定时任务调用）\n    \"\"\"\n\n    def __init__(self):\n        self.repo = AssetStatisticsRepository()\n\n    def get_statistics(self) -> dict:\n        \"\"\"\n        获取统计数据\n        \n        Returns:\n            统计数据字典\n        \"\"\"\n        stats = self.repo.get_statistics()\n        \n        if stats is None:\n            # 如果没有统计数据，返回默认值\n            return {\n                'total_targets': 0,\n                'total_subdomains': 0,\n                'total_ips': 0,\n                'total_endpoints': 0,\n                'total_websites': 0,\n                'total_vulns': 0,\n                'total_assets': 0,\n                'running_scans': Scan.objects.filter(status='running').count(),\n                'updated_at': None,\n                # 变化值\n                'change_targets': 0,\n                'change_subdomains': 0,\n                'change_ips': 0,\n                'change_endpoints': 0,\n                'change_websites': 0,\n                'change_vulns': 0,\n                'change_assets': 0,\n                'vuln_by_severity': self._get_vuln_by_severity(),\n            }\n        \n        # 运行中的扫描数量实时查询（数量小，无需缓存）\n        running_scans = Scan.objects.filter(status='running').count()\n        \n        return {\n            'total_targets': stats.total_targets,\n            'total_subdomains': stats.total_subdomains,\n            'total_ips': stats.total_ips,\n            'total_endpoints': stats.total_endpoints,\n            'total_websites': stats.total_websites,\n            'total_vulns': stats.total_vulns,\n            'total_assets': stats.total_assets,\n            'running_scans': running_scans,\n            'updated_at': stats.updated_at,\n            # 变化值 = 当前值 - 上次值\n            'change_targets': stats.total_targets - stats.prev_targets,\n            'change_subdomains': stats.total_subdomains - stats.prev_subdomains,\n            'change_ips': stats.total_ips - stats.prev_ips,\n            'change_endpoints': stats.total_endpoints - stats.prev_endpoints,\n            'change_websites': stats.total_websites - stats.prev_websites,\n            'change_vulns': stats.total_vulns - stats.prev_vulns,\n            'change_assets': stats.total_assets - stats.prev_assets,\n            # 漏洞严重程度分布\n            'vuln_by_severity': self._get_vuln_by_severity(),\n        }\n    \n    def _get_vuln_by_severity(self) -> dict:\n        \"\"\"获取按严重程度统计的漏洞数量\"\"\"\n        result = Vulnerability.objects.values('severity').annotate(count=Count('id'))\n        severity_map = {item['severity']: item['count'] for item in result}\n        return {\n            'critical': severity_map.get('critical', 0),\n            'high': severity_map.get('high', 0),\n            'medium': severity_map.get('medium', 0),\n            'low': severity_map.get('low', 0),\n            'info': severity_map.get('info', 0),\n        }\n\n    def refresh_statistics(self) -> AssetStatistics:\n        \"\"\"\n        刷新统计数据（执行实际 COUNT 查询）\n        \n        供定时任务调用，不建议在接口中直接调用。\n        \n        Returns:\n            更新后的统计数据对象\n        \"\"\"\n        logger.info(\"开始刷新资产统计...\")\n        \n        # 执行 COUNT 查询\n        total_targets = Target.objects.filter(deleted_at__isnull=True).count()\n        total_subdomains = Subdomain.objects.count()\n        total_ips = HostPortMapping.objects.values('ip').distinct().count()\n        total_endpoints = Endpoint.objects.count()\n        total_websites = WebSite.objects.count()\n        total_vulns = Vulnerability.objects.count()\n        \n        # 更新统计表\n        stats = self.repo.update_statistics(\n            total_targets=total_targets,\n            total_subdomains=total_subdomains,\n            total_ips=total_ips,\n            total_endpoints=total_endpoints,\n            total_websites=total_websites,\n            total_vulns=total_vulns,\n        )\n        \n        # 保存每日快照（用于折线图）\n        self.repo.save_daily_snapshot(stats)\n        \n        logger.info(\"资产统计刷新完成\")\n        return stats\n\n    def get_statistics_history(self, days: int = 7) -> list[dict]:\n        \"\"\"\n        获取历史统计数据（用于折线图）\n        \n        Args:\n            days: 获取最近多少天的数据，默认 7 天\n        \n        Returns:\n            历史数据列表，每项包含 date 和各统计字段\n        \"\"\"\n        history = self.repo.get_history(days=days)\n        return [\n            {\n                'date': h.date.isoformat(),\n                'totalTargets': h.total_targets,\n                'totalSubdomains': h.total_subdomains,\n                'totalIps': h.total_ips,\n                'totalEndpoints': h.total_endpoints,\n                'totalWebsites': h.total_websites,\n                'totalVulns': h.total_vulns,\n                'totalAssets': h.total_assets,\n            }\n            for h in history\n        ]\n"
  },
  {
    "path": "backend/apps/asset/urls.py",
    "content": "\"\"\"\nAsset 应用 URL 配置\n\"\"\"\n\nfrom django.urls import path, include\nfrom rest_framework.routers import DefaultRouter\nfrom .views import (\n    SubdomainViewSet,\n    WebSiteViewSet,\n    DirectoryViewSet,\n    VulnerabilityViewSet,\n    AssetStatisticsViewSet,\n    AssetSearchView,\n    AssetSearchExportView,\n    EndpointViewSet,\n    HostPortMappingViewSet,\n    ScreenshotViewSet,\n)\n\n# 创建 DRF 路由器\nrouter = DefaultRouter()\n\n# 注册 ViewSet\nrouter.register(r'subdomains', SubdomainViewSet, basename='subdomain')\nrouter.register(r'websites', WebSiteViewSet, basename='website')\nrouter.register(r'directories', DirectoryViewSet, basename='directory')\nrouter.register(r'endpoints', EndpointViewSet, basename='endpoint')\nrouter.register(r'ip-addresses', HostPortMappingViewSet, basename='ip-address')\nrouter.register(r'vulnerabilities', VulnerabilityViewSet, basename='vulnerability')\nrouter.register(r'screenshots', ScreenshotViewSet, basename='screenshot')\nrouter.register(r'statistics', AssetStatisticsViewSet, basename='asset-statistics')\n\nurlpatterns = [\n    path('assets/', include(router.urls)),\n    path('assets/search/', AssetSearchView.as_view(), name='asset-search'),\n    path('assets/search/export/', AssetSearchExportView.as_view(), name='asset-search-export'),\n]\n"
  },
  {
    "path": "backend/apps/asset/views/__init__.py",
    "content": "\"\"\"\nAsset 应用视图模块\n\n重新导出所有视图类以保持向后兼容\n\"\"\"\n\nfrom .asset_views import (\n    AssetStatisticsViewSet,\n    SubdomainViewSet,\n    WebSiteViewSet,\n    DirectoryViewSet,\n    EndpointViewSet,\n    HostPortMappingViewSet,\n    VulnerabilityViewSet,\n    SubdomainSnapshotViewSet,\n    WebsiteSnapshotViewSet,\n    DirectorySnapshotViewSet,\n    EndpointSnapshotViewSet,\n    HostPortMappingSnapshotViewSet,\n    VulnerabilitySnapshotViewSet,\n    ScreenshotViewSet,\n    ScreenshotSnapshotViewSet,\n)\nfrom .search_views import AssetSearchView, AssetSearchExportView\n\n__all__ = [\n    'AssetStatisticsViewSet',\n    'SubdomainViewSet',\n    'WebSiteViewSet',\n    'DirectoryViewSet',\n    'EndpointViewSet',\n    'HostPortMappingViewSet',\n    'VulnerabilityViewSet',\n    'SubdomainSnapshotViewSet',\n    'WebsiteSnapshotViewSet',\n    'DirectorySnapshotViewSet',\n    'EndpointSnapshotViewSet',\n    'HostPortMappingSnapshotViewSet',\n    'VulnerabilitySnapshotViewSet',\n    'ScreenshotViewSet',\n    'ScreenshotSnapshotViewSet',\n    'AssetSearchView',\n    'AssetSearchExportView',\n]\n"
  },
  {
    "path": "backend/apps/asset/views/asset_views.py",
    "content": "import logging\nfrom rest_framework import viewsets, status, filters\nfrom rest_framework.decorators import action\nfrom rest_framework.response import Response\nfrom apps.common.response_helpers import success_response, error_response\nfrom apps.common.error_codes import ErrorCodes\nfrom rest_framework.request import Request\nfrom rest_framework.exceptions import NotFound, ValidationError as DRFValidationError\nfrom django.core.exceptions import ValidationError, ObjectDoesNotExist\nfrom django.db import DatabaseError, IntegrityError, OperationalError\n\nfrom ..serializers import (\n    SubdomainListSerializer, WebSiteSerializer, DirectorySerializer, \n    VulnerabilitySerializer, EndpointListSerializer, IPAddressAggregatedSerializer,\n    SubdomainSnapshotSerializer, WebsiteSnapshotSerializer, DirectorySnapshotSerializer,\n    EndpointSnapshotSerializer, VulnerabilitySnapshotSerializer\n)\nfrom ..services import (\n    SubdomainService, WebSiteService, DirectoryService, \n    VulnerabilityService, AssetStatisticsService, EndpointService, HostPortMappingService\n)\nfrom ..services.snapshot import (\n    SubdomainSnapshotsService, WebsiteSnapshotsService, DirectorySnapshotsService,\n    EndpointSnapshotsService, HostPortMappingSnapshotsService, VulnerabilitySnapshotsService\n)\nfrom apps.common.pagination import BasePagination\n\nlogger = logging.getLogger(__name__)\n\n\nclass AssetStatisticsViewSet(viewsets.ViewSet):\n    \"\"\"\n    资产统计 API\n    \n    提供仪表盘所需的统计数据（预聚合，读取缓存表）\n    \"\"\"\n    \n    def __init__(self, **kwargs):\n        super().__init__(**kwargs)\n        self.service = AssetStatisticsService()\n    \n    def list(self, request):\n        \"\"\"\n        获取资产统计数据\n        \n        GET /assets/statistics/\n        \n        返回:\n        - totalTargets: 目标总数\n        - totalSubdomains: 子域名总数\n        - totalIps: IP 总数\n        - totalEndpoints: 端点总数\n        - totalWebsites: 网站总数\n        - totalVulns: 漏洞总数\n        - totalAssets: 总资产数\n        - runningScans: 运行中的扫描数\n        - updatedAt: 统计更新时间\n        \"\"\"\n        try:\n            stats = self.service.get_statistics()\n            return success_response(data={\n                'totalTargets': stats['total_targets'],\n                'totalSubdomains': stats['total_subdomains'],\n                'totalIps': stats['total_ips'],\n                'totalEndpoints': stats['total_endpoints'],\n                'totalWebsites': stats['total_websites'],\n                'totalVulns': stats['total_vulns'],\n                'totalAssets': stats['total_assets'],\n                'runningScans': stats['running_scans'],\n                'updatedAt': stats['updated_at'],\n                # 变化值\n                'changeTargets': stats['change_targets'],\n                'changeSubdomains': stats['change_subdomains'],\n                'changeIps': stats['change_ips'],\n                'changeEndpoints': stats['change_endpoints'],\n                'changeWebsites': stats['change_websites'],\n                'changeVulns': stats['change_vulns'],\n                'changeAssets': stats['change_assets'],\n                # 漏洞严重程度分布\n                'vulnBySeverity': stats['vuln_by_severity'],\n            })\n        except (DatabaseError, OperationalError) as e:\n            logger.exception(\"获取资产统计数据失败\")\n            return error_response(\n                code=ErrorCodes.SERVER_ERROR,\n                message='Failed to get statistics',\n                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR\n            )\n\n    @action(detail=False, methods=['get'], url_path='history')\n    def history(self, request: Request):\n        \"\"\"\n        获取统计历史数据（用于折线图）\n        \n        GET /assets/statistics/history/?days=7\n        \n        Query Parameters:\n            days: 获取最近多少天的数据，默认 7，最大 90\n        \n        Returns:\n            历史数据列表\n        \"\"\"\n        try:\n            days_param = request.query_params.get('days', '7')\n            try:\n                days = int(days_param)\n            except (ValueError, TypeError):\n                days = 7\n            days = min(max(days, 1), 90)  # 限制在 1-90 天\n            \n            history = self.service.get_statistics_history(days=days)\n            return success_response(data=history)\n        except (DatabaseError, OperationalError) as e:\n            logger.exception(\"获取统计历史数据失败\")\n            return error_response(\n                code=ErrorCodes.SERVER_ERROR,\n                message='Failed to get history data',\n                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR\n            )\n\n\n# 注意：IPAddress 模型已被重构为 HostPortMapping\n# IPAddressViewSet 已删除，需要根据新架构重新实现\n\n\nclass SubdomainViewSet(viewsets.ModelViewSet):\n    \"\"\"子域名管理 ViewSet\n    \n    支持两种访问方式：\n    1. 嵌套路由：GET /api/targets/{target_pk}/subdomains/\n    2. 独立路由：GET /api/subdomains/（全局查询）\n    \n    支持智能过滤语法（filter 参数）：\n    - name=\"api\"         子域名模糊匹配\n    - name==\"api.example.com\"  精确匹配\n    - 多条件空格分隔     AND 关系\n    \"\"\"\n    \n    serializer_class = SubdomainListSerializer\n    pagination_class = BasePagination\n    filter_backends = [filters.OrderingFilter]\n    ordering = ['-created_at']\n    \n    def __init__(self, **kwargs):\n        super().__init__(**kwargs)\n        self.service = SubdomainService()\n    \n    def get_queryset(self):\n        \"\"\"根据是否有 target_pk 参数决定查询范围，支持智能过滤\"\"\"\n        target_pk = self.kwargs.get('target_pk')\n        filter_query = self.request.query_params.get('filter', None)\n        \n        if target_pk:\n            return self.service.get_subdomains_by_target(target_pk, filter_query=filter_query)\n        return self.service.get_all(filter_query=filter_query)\n\n    @action(detail=False, methods=['post'], url_path='bulk-create')\n    def bulk_create(self, request, **kwargs):\n        \"\"\"批量创建子域名\n        \n        POST /api/targets/{target_pk}/subdomains/bulk-create/\n        \n        请求体:\n        {\n            \"subdomains\": [\"sub1.example.com\", \"sub2.example.com\"]\n        }\n        \n        响应:\n        {\n            \"data\": {\n                \"createdCount\": 10,\n                \"skippedCount\": 2,\n                \"invalidCount\": 1,\n                \"mismatchedCount\": 1,\n                \"totalReceived\": 14\n            }\n        }\n        \"\"\"\n        from apps.targets.models import Target\n        \n        target_pk = self.kwargs.get('target_pk')\n        if not target_pk:\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='Must create subdomains under a target',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        \n        # 获取目标\n        try:\n            target = Target.objects.get(pk=target_pk)\n        except Target.DoesNotExist:\n            return error_response(\n                code=ErrorCodes.NOT_FOUND,\n                message='Target not found',\n                status_code=status.HTTP_404_NOT_FOUND\n            )\n        \n        # 验证目标类型必须为域名\n        if target.type != Target.TargetType.DOMAIN:\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='Only domain type targets support subdomain import',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        \n        # 获取请求体中的子域名列表\n        subdomains = request.data.get('subdomains', [])\n        if not subdomains or not isinstance(subdomains, list):\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='Request body cannot be empty or invalid format',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        \n        # 调用 service 层处理\n        try:\n            result = self.service.bulk_create_subdomains(\n                target_id=int(target_pk),\n                target_name=target.name,\n                subdomains=subdomains\n            )\n        except Exception as e:\n            logger.exception(\"批量创建子域名失败\")\n            return error_response(\n                code=ErrorCodes.SERVER_ERROR,\n                message='Server internal error',\n                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR\n            )\n        \n        return success_response(data={\n            'createdCount': result.created_count,\n            'skippedCount': result.skipped_count,\n            'invalidCount': result.invalid_count,\n            'mismatchedCount': result.mismatched_count,\n            'totalReceived': result.total_received,\n        })\n\n    @action(detail=False, methods=['get'], url_path='export')\n    def export(self, request, **kwargs):\n        \"\"\"导出子域名为 CSV 格式\n        \n        CSV 列：name, created_at\n        \"\"\"\n        from apps.common.utils import create_csv_export_response, format_datetime\n        \n        target_pk = self.kwargs.get('target_pk')\n        if not target_pk:\n            raise DRFValidationError('必须在目标下导出')\n        \n        data_iterator = self.service.iter_raw_data_for_csv_export(target_id=target_pk)\n        \n        headers = ['name', 'created_at']\n        formatters = {'created_at': format_datetime}\n        \n        return create_csv_export_response(\n            data_iterator=data_iterator,\n            headers=headers,\n            filename=f\"target-{target_pk}-subdomains.csv\",\n            field_formatters=formatters\n        )\n\n    @action(detail=False, methods=['post'], url_path='bulk-delete')\n    def bulk_delete(self, request, **kwargs):\n        \"\"\"批量删除子域名\n        \n        POST /api/assets/subdomains/bulk-delete/\n        \n        请求体: {\"ids\": [1, 2, 3]}\n        响应: {\"deletedCount\": 3}\n        \"\"\"\n        ids = request.data.get('ids', [])\n        if not ids or not isinstance(ids, list):\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='ids is required and must be a list',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        \n        try:\n            from ..models import Subdomain\n            deleted_count, _ = Subdomain.objects.filter(id__in=ids).delete()\n            return success_response(data={'deletedCount': deleted_count})\n        except Exception as e:\n            logger.exception(\"批量删除子域名失败\")\n            return error_response(\n                code=ErrorCodes.SERVER_ERROR,\n                message='Failed to delete subdomains',\n                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR\n            )\n\n\nclass WebSiteViewSet(viewsets.ModelViewSet):\n    \"\"\"站点管理 ViewSet\n    \n    支持两种访问方式：\n    1. 嵌套路由：GET /api/targets/{target_pk}/websites/\n    2. 独立路由：GET /api/websites/（全局查询）\n    \n    支持智能过滤语法（filter 参数）：\n    - url=\"api\"          URL 模糊匹配\n    - host=\"example\"     主机名模糊匹配\n    - title=\"login\"      标题模糊匹配\n    - status=\"200,301\"   状态码多值匹配\n    - tech=\"nginx\"       技术栈匹配（数组字段）\n    - 多条件空格分隔     AND 关系\n    \"\"\"\n    \n    serializer_class = WebSiteSerializer\n    pagination_class = BasePagination\n    filter_backends = [filters.OrderingFilter]\n    ordering = ['-created_at']\n    \n    def __init__(self, **kwargs):\n        super().__init__(**kwargs)\n        self.service = WebSiteService()\n    \n    def get_queryset(self):\n        \"\"\"根据是否有 target_pk 参数决定查询范围，支持智能过滤\"\"\"\n        target_pk = self.kwargs.get('target_pk')\n        filter_query = self.request.query_params.get('filter', None)\n        \n        if target_pk:\n            return self.service.get_websites_by_target(target_pk, filter_query=filter_query)\n        return self.service.get_all(filter_query=filter_query)\n\n    @action(detail=False, methods=['post'], url_path='bulk-create')\n    def bulk_create(self, request, **kwargs):\n        \"\"\"批量创建网站\n        \n        POST /api/targets/{target_pk}/websites/bulk-create/\n        \n        请求体:\n        {\n            \"urls\": [\"https://example.com\", \"https://test.com\"]\n        }\n        \n        响应:\n        {\n            \"data\": {\n                \"createdCount\": 10\n            }\n        }\n        \"\"\"\n        from apps.targets.models import Target\n        \n        target_pk = self.kwargs.get('target_pk')\n        if not target_pk:\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='Must create websites under a target',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        \n        # 获取目标\n        try:\n            target = Target.objects.get(pk=target_pk)\n        except Target.DoesNotExist:\n            return error_response(\n                code=ErrorCodes.NOT_FOUND,\n                message='Target not found',\n                status_code=status.HTTP_404_NOT_FOUND\n            )\n        \n        # 获取请求体中的 URL 列表\n        urls = request.data.get('urls', [])\n        if not urls or not isinstance(urls, list):\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='Request body cannot be empty or invalid format',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        \n        # 调用 service 层处理\n        try:\n            created_count = self.service.bulk_create_urls(\n                target_id=int(target_pk),\n                target_name=target.name,\n                target_type=target.type,\n                urls=urls\n            )\n        except Exception as e:\n            logger.exception(\"批量创建网站失败\")\n            return error_response(\n                code=ErrorCodes.SERVER_ERROR,\n                message='Server internal error',\n                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR\n            )\n        \n        return success_response(data={\n            'createdCount': created_count,\n        })\n\n    @action(detail=False, methods=['get'], url_path='export')\n    def export(self, request, **kwargs):\n        \"\"\"导出网站为 CSV 格式\n        \n        CSV 列：url, host, location, title, status_code, content_length, content_type, webserver, tech, response_body, response_headers, vhost, created_at\n        \"\"\"\n        from apps.common.utils import create_csv_export_response, format_datetime, format_list_field\n        \n        target_pk = self.kwargs.get('target_pk')\n        if not target_pk:\n            raise DRFValidationError('必须在目标下导出')\n        \n        data_iterator = self.service.iter_raw_data_for_csv_export(target_id=target_pk)\n        \n        headers = [\n            'url', 'host', 'location', 'title', 'status_code',\n            'content_length', 'content_type', 'webserver', 'tech',\n            'response_body', 'response_headers', 'vhost', 'created_at'\n        ]\n        formatters = {\n            'created_at': format_datetime,\n            'tech': lambda x: format_list_field(x, separator=','),\n        }\n        \n        return create_csv_export_response(\n            data_iterator=data_iterator,\n            headers=headers,\n            filename=f\"target-{target_pk}-websites.csv\",\n            field_formatters=formatters\n        )\n\n    @action(detail=False, methods=['post'], url_path='bulk-delete')\n    def bulk_delete(self, request, **kwargs):\n        \"\"\"批量删除网站\n        \n        POST /api/assets/websites/bulk-delete/\n        \n        请求体: {\"ids\": [1, 2, 3]}\n        响应: {\"deletedCount\": 3}\n        \"\"\"\n        ids = request.data.get('ids', [])\n        if not ids or not isinstance(ids, list):\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='ids is required and must be a list',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        \n        try:\n            from ..models import WebSite\n            deleted_count, _ = WebSite.objects.filter(id__in=ids).delete()\n            return success_response(data={'deletedCount': deleted_count})\n        except Exception as e:\n            logger.exception(\"批量删除网站失败\")\n            return error_response(\n                code=ErrorCodes.SERVER_ERROR,\n                message='Failed to delete websites',\n                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR\n            )\n\n\nclass DirectoryViewSet(viewsets.ModelViewSet):\n    \"\"\"目录管理 ViewSet\n    \n    支持两种访问方式：\n    1. 嵌套路由：GET /api/targets/{target_pk}/directories/\n    2. 独立路由：GET /api/directories/（全局查询）\n    \n    支持智能过滤语法（filter 参数）：\n    - url=\"admin\"        URL 模糊匹配\n    - status=\"200,301\"   状态码多值匹配\n    - 多条件空格分隔     AND 关系\n    \"\"\"\n    \n    serializer_class = DirectorySerializer\n    pagination_class = BasePagination\n    filter_backends = [filters.OrderingFilter]\n    ordering = ['-created_at']\n    \n    def __init__(self, **kwargs):\n        super().__init__(**kwargs)\n        self.service = DirectoryService()\n    \n    def get_queryset(self):\n        \"\"\"根据是否有 target_pk 参数决定查询范围，支持智能过滤\"\"\"\n        target_pk = self.kwargs.get('target_pk')\n        filter_query = self.request.query_params.get('filter', None)\n        \n        if target_pk:\n            return self.service.get_directories_by_target(target_pk, filter_query=filter_query)\n        return self.service.get_all(filter_query=filter_query)\n\n    @action(detail=False, methods=['post'], url_path='bulk-create')\n    def bulk_create(self, request, **kwargs):\n        \"\"\"批量创建目录\n        \n        POST /api/targets/{target_pk}/directories/bulk-create/\n        \n        请求体:\n        {\n            \"urls\": [\"https://example.com/admin\", \"https://example.com/api\"]\n        }\n        \n        响应:\n        {\n            \"data\": {\n                \"createdCount\": 10\n            }\n        }\n        \"\"\"\n        from apps.targets.models import Target\n        \n        target_pk = self.kwargs.get('target_pk')\n        if not target_pk:\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='Must create directories under a target',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        \n        # 获取目标\n        try:\n            target = Target.objects.get(pk=target_pk)\n        except Target.DoesNotExist:\n            return error_response(\n                code=ErrorCodes.NOT_FOUND,\n                message='Target not found',\n                status_code=status.HTTP_404_NOT_FOUND\n            )\n        \n        # 获取请求体中的 URL 列表\n        urls = request.data.get('urls', [])\n        if not urls or not isinstance(urls, list):\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='Request body cannot be empty or invalid format',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        \n        # 调用 service 层处理\n        try:\n            created_count = self.service.bulk_create_urls(\n                target_id=int(target_pk),\n                target_name=target.name,\n                target_type=target.type,\n                urls=urls\n            )\n        except Exception as e:\n            logger.exception(\"批量创建目录失败\")\n            return error_response(\n                code=ErrorCodes.SERVER_ERROR,\n                message='Server internal error',\n                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR\n            )\n        \n        return success_response(data={\n            'createdCount': created_count,\n        })\n\n    @action(detail=False, methods=['get'], url_path='export')\n    def export(self, request, **kwargs):\n        \"\"\"导出目录为 CSV 格式\n        \n        CSV 列：url, status, content_length, words, lines, content_type, duration, created_at\n        \"\"\"\n        from apps.common.utils import create_csv_export_response, format_datetime\n        \n        target_pk = self.kwargs.get('target_pk')\n        if not target_pk:\n            raise DRFValidationError('必须在目标下导出')\n        \n        data_iterator = self.service.iter_raw_data_for_csv_export(target_id=target_pk)\n        \n        headers = [\n            'url', 'status', 'content_length', 'words',\n            'lines', 'content_type', 'duration', 'created_at'\n        ]\n        formatters = {\n            'created_at': format_datetime,\n        }\n        \n        return create_csv_export_response(\n            data_iterator=data_iterator,\n            headers=headers,\n            filename=f\"target-{target_pk}-directories.csv\",\n            field_formatters=formatters\n        )\n\n    @action(detail=False, methods=['post'], url_path='bulk-delete')\n    def bulk_delete(self, request, **kwargs):\n        \"\"\"批量删除目录\n        \n        POST /api/assets/directories/bulk-delete/\n        \n        请求体: {\"ids\": [1, 2, 3]}\n        响应: {\"deletedCount\": 3}\n        \"\"\"\n        ids = request.data.get('ids', [])\n        if not ids or not isinstance(ids, list):\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='ids is required and must be a list',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        \n        try:\n            from ..models import Directory\n            deleted_count, _ = Directory.objects.filter(id__in=ids).delete()\n            return success_response(data={'deletedCount': deleted_count})\n        except Exception as e:\n            logger.exception(\"批量删除目录失败\")\n            return error_response(\n                code=ErrorCodes.SERVER_ERROR,\n                message='Failed to delete directories',\n                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR\n            )\n\n\nclass EndpointViewSet(viewsets.ModelViewSet):\n    \"\"\"端点管理 ViewSet\n    \n    支持两种访问方式：\n    1. 嵌套路由：GET /api/targets/{target_pk}/endpoints/\n    2. 独立路由：GET /api/endpoints/（全局查询）\n    \n    支持智能过滤语法（filter 参数）：\n    - url=\"api\"          URL 模糊匹配\n    - host=\"example\"     主机名模糊匹配\n    - title=\"login\"      标题模糊匹配\n    - status=\"200,301\"   状态码多值匹配\n    - tech=\"nginx\"       技术栈匹配（数组字段）\n    - 多条件空格分隔     AND 关系\n    \"\"\"\n    \n    serializer_class = EndpointListSerializer\n    pagination_class = BasePagination\n    filter_backends = [filters.OrderingFilter]\n    ordering = ['-created_at']\n    \n    def __init__(self, **kwargs):\n        super().__init__(**kwargs)\n        self.service = EndpointService()\n    \n    def get_queryset(self):\n        \"\"\"根据是否有 target_pk 参数决定查询范围，支持智能过滤\"\"\"\n        target_pk = self.kwargs.get('target_pk')\n        filter_query = self.request.query_params.get('filter', None)\n        \n        if target_pk:\n            return self.service.get_endpoints_by_target(target_pk, filter_query=filter_query)\n        return self.service.get_all(filter_query=filter_query)\n\n    @action(detail=False, methods=['post'], url_path='bulk-create')\n    def bulk_create(self, request, **kwargs):\n        \"\"\"批量创建端点\n        \n        POST /api/targets/{target_pk}/endpoints/bulk-create/\n        \n        请求体:\n        {\n            \"urls\": [\"https://example.com/api/v1\", \"https://example.com/api/v2\"]\n        }\n        \n        响应:\n        {\n            \"data\": {\n                \"createdCount\": 10\n            }\n        }\n        \"\"\"\n        from apps.targets.models import Target\n        \n        target_pk = self.kwargs.get('target_pk')\n        if not target_pk:\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='Must create endpoints under a target',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        \n        # 获取目标\n        try:\n            target = Target.objects.get(pk=target_pk)\n        except Target.DoesNotExist:\n            return error_response(\n                code=ErrorCodes.NOT_FOUND,\n                message='Target not found',\n                status_code=status.HTTP_404_NOT_FOUND\n            )\n        \n        # 获取请求体中的 URL 列表\n        urls = request.data.get('urls', [])\n        if not urls or not isinstance(urls, list):\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='Request body cannot be empty or invalid format',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        \n        # 调用 service 层处理\n        try:\n            created_count = self.service.bulk_create_urls(\n                target_id=int(target_pk),\n                target_name=target.name,\n                target_type=target.type,\n                urls=urls\n            )\n        except Exception as e:\n            logger.exception(\"批量创建端点失败\")\n            return error_response(\n                code=ErrorCodes.SERVER_ERROR,\n                message='Server internal error',\n                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR\n            )\n        \n        return success_response(data={\n            'createdCount': created_count,\n        })\n\n    @action(detail=False, methods=['get'], url_path='export')\n    def export(self, request, **kwargs):\n        \"\"\"导出端点为 CSV 格式\n        \n        CSV 列：url, host, location, title, status_code, content_length, content_type, webserver, tech, response_body, response_headers, vhost, matched_gf_patterns, created_at\n        \"\"\"\n        from apps.common.utils import create_csv_export_response, format_datetime, format_list_field\n        \n        target_pk = self.kwargs.get('target_pk')\n        if not target_pk:\n            raise DRFValidationError('必须在目标下导出')\n        \n        data_iterator = self.service.iter_raw_data_for_csv_export(target_id=target_pk)\n        \n        headers = [\n            'url', 'host', 'location', 'title', 'status_code',\n            'content_length', 'content_type', 'webserver', 'tech',\n            'response_body', 'response_headers', 'vhost', 'matched_gf_patterns', 'created_at'\n        ]\n        formatters = {\n            'created_at': format_datetime,\n            'tech': lambda x: format_list_field(x, separator=','),\n            'matched_gf_patterns': lambda x: format_list_field(x, separator=','),\n        }\n        \n        return create_csv_export_response(\n            data_iterator=data_iterator,\n            headers=headers,\n            filename=f\"target-{target_pk}-endpoints.csv\",\n            field_formatters=formatters\n        )\n\n    @action(detail=False, methods=['post'], url_path='bulk-delete')\n    def bulk_delete(self, request, **kwargs):\n        \"\"\"批量删除端点\n        \n        POST /api/assets/endpoints/bulk-delete/\n        \n        请求体: {\"ids\": [1, 2, 3]}\n        响应: {\"deletedCount\": 3}\n        \"\"\"\n        ids = request.data.get('ids', [])\n        if not ids or not isinstance(ids, list):\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='ids is required and must be a list',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        \n        try:\n            from ..models import Endpoint\n            deleted_count, _ = Endpoint.objects.filter(id__in=ids).delete()\n            return success_response(data={'deletedCount': deleted_count})\n        except Exception as e:\n            logger.exception(\"批量删除端点失败\")\n            return error_response(\n                code=ErrorCodes.SERVER_ERROR,\n                message='Failed to delete endpoints',\n                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR\n            )\n\n\nclass HostPortMappingViewSet(viewsets.ModelViewSet):\n    \"\"\"主机端口映射管理 ViewSet（IP 地址聚合视图）\n    \n    支持两种访问方式：\n    1. 嵌套路由：GET /api/targets/{target_pk}/ip-addresses/\n    2. 独立路由：GET /api/ip-addresses/（全局查询）\n    \n    返回按 IP 聚合的数据，每个 IP 显示其关联的所有 hosts 和 ports\n    \n    支持智能过滤语法（filter 参数）：\n    - ip=\"192.168\"       IP 模糊匹配\n    - port=\"80,443\"      端口多值匹配\n    - host=\"api\"         主机名模糊匹配\n    - 多条件空格分隔     AND 关系\n    \n    注意：由于返回的是聚合数据（字典列表），不支持 DRF SearchFilter\n    \"\"\"\n    \n    serializer_class = IPAddressAggregatedSerializer\n    pagination_class = BasePagination\n    \n    # 智能过滤字段映射\n    FILTER_FIELD_MAPPING = {\n        'ip': 'ip',\n        'port': 'port',\n        'host': 'host',\n    }\n    \n    def __init__(self, **kwargs):\n        super().__init__(**kwargs)\n        self.service = HostPortMappingService()\n    \n    def get_queryset(self):\n        \"\"\"根据是否有 target_pk 参数决定查询范围，返回按 IP 聚合的数据\n        \n        支持智能过滤语法（filter 参数）\n        \"\"\"\n        target_pk = self.kwargs.get('target_pk')\n        filter_query = self.request.query_params.get('filter', None)\n        \n        if target_pk:\n            return self.service.get_ip_aggregation_by_target(target_pk, filter_query=filter_query)\n        return self.service.get_all_ip_aggregation(filter_query=filter_query)\n\n    @action(detail=False, methods=['get'], url_path='export')\n    def export(self, request, **kwargs):\n        \"\"\"导出 IP 地址为 CSV 格式\n        \n        CSV 列：ip, host, port, created_at\n        \"\"\"\n        from apps.common.utils import create_csv_export_response, format_datetime\n        \n        target_pk = self.kwargs.get('target_pk')\n        if not target_pk:\n            raise DRFValidationError('必须在目标下导出')\n        \n        # 获取流式数据迭代器\n        data_iterator = self.service.iter_raw_data_for_csv_export(target_id=target_pk)\n        \n        # CSV 表头和格式化器\n        headers = ['ip', 'host', 'port', 'created_at']\n        formatters = {\n            'created_at': format_datetime\n        }\n        \n        return create_csv_export_response(\n            data_iterator=data_iterator,\n            headers=headers,\n            filename=f\"target-{target_pk}-ip-addresses.csv\",\n            field_formatters=formatters\n        )\n\n    @action(detail=False, methods=['post'], url_path='bulk-delete')\n    def bulk_delete(self, request, **kwargs):\n        \"\"\"批量删除 IP 地址映射\n        \n        POST /api/assets/ip-addresses/bulk-delete/\n        \n        请求体: {\"ips\": [\"192.168.1.1\", \"10.0.0.1\"]}\n        响应: {\"deletedCount\": 3}\n        \n        注意：由于 IP 地址是聚合显示的，删除时传入 IP 列表，\n        会删除该 IP 下的所有 host:port 映射记录\n        \"\"\"\n        ips = request.data.get('ips', [])\n        if not ips or not isinstance(ips, list):\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='ips is required and must be a list',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        \n        try:\n            from ..models import HostPortMapping\n            deleted_count, _ = HostPortMapping.objects.filter(ip__in=ips).delete()\n            return success_response(data={'deletedCount': deleted_count})\n        except Exception as e:\n            logger.exception(\"批量删除 IP 地址映射失败\")\n            return error_response(\n                code=ErrorCodes.SERVER_ERROR,\n                message='Failed to delete ip addresses',\n                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR\n            )\n\n\nclass VulnerabilityViewSet(viewsets.ModelViewSet):\n    \"\"\"漏洞资产管理 ViewSet（只读）\n    \n    支持两种访问方式：\n    1. 嵌套路由：GET /api/targets/{target_pk}/vulnerabilities/\n    2. 独立路由：GET /api/vulnerabilities/（全局查询）\n    \n    支持智能过滤语法（filter 参数）：\n    - type=\"xss\"         漏洞类型模糊匹配\n    - severity=\"high\"    严重程度匹配\n    - source=\"nuclei\"    来源工具匹配\n    - url=\"api\"          URL 模糊匹配\n    - 多条件空格分隔     AND 关系\n    \"\"\"\n    \n    serializer_class = VulnerabilitySerializer\n    pagination_class = BasePagination\n    filter_backends = [filters.OrderingFilter]\n    ordering = ['-created_at']\n    \n    def __init__(self, **kwargs):\n        super().__init__(**kwargs)\n        self.service = VulnerabilityService()\n    \n    def get_queryset(self):\n        \"\"\"根据是否有 target_pk 参数决定查询范围，支持智能过滤\"\"\"\n        target_pk = self.kwargs.get('target_pk')\n        filter_query = self.request.query_params.get('filter', None)\n        \n        if target_pk:\n            return self.service.get_vulnerabilities_by_target(target_pk, filter_query=filter_query)\n        return self.service.get_all(filter_query=filter_query)\n\n\n# ==================== 快照 ViewSet（Scan 嵌套路由） ====================\n\nclass SubdomainSnapshotViewSet(viewsets.ModelViewSet):\n    \"\"\"子域名快照 ViewSet - 嵌套路由：GET /api/scans/{scan_pk}/subdomains/\n    \n    支持智能过滤语法（filter 参数）：\n    - name=\"api\"         子域名模糊匹配\n    - name==\"api.example.com\"  精确匹配\n    - name!=\"test\"       排除匹配\n    \"\"\"\n    \n    serializer_class = SubdomainSnapshotSerializer\n    pagination_class = BasePagination\n    filter_backends = [filters.OrderingFilter]\n    ordering_fields = ['name', 'created_at']\n    ordering = ['-created_at']\n    \n    def __init__(self, **kwargs):\n        super().__init__(**kwargs)\n        self.service = SubdomainSnapshotsService()\n    \n    def get_queryset(self):\n        scan_pk = self.kwargs.get('scan_pk')\n        filter_query = self.request.query_params.get('filter', None)\n        \n        if scan_pk:\n            return self.service.get_by_scan(scan_pk, filter_query=filter_query)\n        return self.service.get_all(filter_query=filter_query)\n\n    @action(detail=False, methods=['get'], url_path='export')\n    def export(self, request, **kwargs):\n        \"\"\"导出子域名快照为 CSV 格式\n        \n        CSV 列：name, created_at\n        \"\"\"\n        from apps.common.utils import create_csv_export_response, format_datetime\n        \n        scan_pk = self.kwargs.get('scan_pk')\n        if not scan_pk:\n            raise DRFValidationError('必须在扫描下导出')\n        \n        data_iterator = self.service.iter_raw_data_for_csv_export(scan_id=scan_pk)\n        \n        headers = ['name', 'created_at']\n        formatters = {'created_at': format_datetime}\n        \n        return create_csv_export_response(\n            data_iterator=data_iterator,\n            headers=headers,\n            filename=f\"scan-{scan_pk}-subdomains.csv\",\n            field_formatters=formatters\n        )\n\n\nclass WebsiteSnapshotViewSet(viewsets.ModelViewSet):\n    \"\"\"网站快照 ViewSet - 嵌套路由：GET /api/scans/{scan_pk}/websites/\n    \n    支持智能过滤语法（filter 参数）：\n    - url=\"api\"          URL 模糊匹配\n    - host=\"example\"     主机名模糊匹配\n    - title=\"login\"      标题模糊匹配\n    - status=\"200\"       状态码匹配\n    - webserver=\"nginx\"  服务器类型匹配\n    - tech=\"php\"         技术栈匹配\n    \"\"\"\n    \n    serializer_class = WebsiteSnapshotSerializer\n    pagination_class = BasePagination\n    filter_backends = [filters.OrderingFilter]\n    ordering = ['-created_at']\n    \n    def __init__(self, **kwargs):\n        super().__init__(**kwargs)\n        self.service = WebsiteSnapshotsService()\n    \n    def get_queryset(self):\n        scan_pk = self.kwargs.get('scan_pk')\n        filter_query = self.request.query_params.get('filter', None)\n        \n        if scan_pk:\n            return self.service.get_by_scan(scan_pk, filter_query=filter_query)\n        return self.service.get_all(filter_query=filter_query)\n\n    @action(detail=False, methods=['get'], url_path='export')\n    def export(self, request, **kwargs):\n        \"\"\"导出网站快照为 CSV 格式\n        \n        CSV 列：url, host, location, title, status_code, content_length, content_type, webserver, tech, response_body, response_headers, vhost, created_at\n        \"\"\"\n        from apps.common.utils import create_csv_export_response, format_datetime, format_list_field\n        \n        scan_pk = self.kwargs.get('scan_pk')\n        if not scan_pk:\n            raise DRFValidationError('必须在扫描下导出')\n        \n        data_iterator = self.service.iter_raw_data_for_csv_export(scan_id=scan_pk)\n        \n        headers = [\n            'url', 'host', 'location', 'title', 'status_code',\n            'content_length', 'content_type', 'webserver', 'tech',\n            'response_body', 'response_headers', 'vhost', 'created_at'\n        ]\n        formatters = {\n            'created_at': format_datetime,\n            'tech': lambda x: format_list_field(x, separator=','),\n        }\n        \n        return create_csv_export_response(\n            data_iterator=data_iterator,\n            headers=headers,\n            filename=f\"scan-{scan_pk}-websites.csv\",\n            field_formatters=formatters\n        )\n\n\nclass DirectorySnapshotViewSet(viewsets.ModelViewSet):\n    \"\"\"目录快照 ViewSet - 嵌套路由：GET /api/scans/{scan_pk}/directories/\n    \n    支持智能过滤语法（filter 参数）：\n    - url=\"admin\"        URL 模糊匹配\n    - status=\"200\"       状态码匹配\n    - content_type=\"html\" 内容类型匹配\n    \"\"\"\n    \n    serializer_class = DirectorySnapshotSerializer\n    pagination_class = BasePagination\n    filter_backends = [filters.OrderingFilter]\n    ordering = ['-created_at']\n    \n    def __init__(self, **kwargs):\n        super().__init__(**kwargs)\n        self.service = DirectorySnapshotsService()\n    \n    def get_queryset(self):\n        scan_pk = self.kwargs.get('scan_pk')\n        filter_query = self.request.query_params.get('filter', None)\n        \n        if scan_pk:\n            return self.service.get_by_scan(scan_pk, filter_query=filter_query)\n        return self.service.get_all(filter_query=filter_query)\n\n    @action(detail=False, methods=['get'], url_path='export')\n    def export(self, request, **kwargs):\n        \"\"\"导出目录快照为 CSV 格式\n        \n        CSV 列：url, status, content_length, words, lines, content_type, duration, created_at\n        \"\"\"\n        from apps.common.utils import create_csv_export_response, format_datetime\n        \n        scan_pk = self.kwargs.get('scan_pk')\n        if not scan_pk:\n            raise DRFValidationError('必须在扫描下导出')\n        \n        data_iterator = self.service.iter_raw_data_for_csv_export(scan_id=scan_pk)\n        \n        headers = [\n            'url', 'status', 'content_length', 'words',\n            'lines', 'content_type', 'duration', 'created_at'\n        ]\n        formatters = {\n            'created_at': format_datetime,\n        }\n        \n        return create_csv_export_response(\n            data_iterator=data_iterator,\n            headers=headers,\n            filename=f\"scan-{scan_pk}-directories.csv\",\n            field_formatters=formatters\n        )\n\n\nclass EndpointSnapshotViewSet(viewsets.ModelViewSet):\n    \"\"\"端点快照 ViewSet - 嵌套路由：GET /api/scans/{scan_pk}/endpoints/\n    \n    支持智能过滤语法（filter 参数）：\n    - url=\"api\"          URL 模糊匹配\n    - host=\"example\"     主机名模糊匹配\n    - title=\"login\"      标题模糊匹配\n    - status=\"200\"       状态码匹配\n    - webserver=\"nginx\"  服务器类型匹配\n    - tech=\"php\"         技术栈匹配\n    \"\"\"\n    \n    serializer_class = EndpointSnapshotSerializer\n    pagination_class = BasePagination\n    filter_backends = [filters.OrderingFilter]\n    ordering = ['-created_at']\n    \n    def __init__(self, **kwargs):\n        super().__init__(**kwargs)\n        self.service = EndpointSnapshotsService()\n    \n    def get_queryset(self):\n        scan_pk = self.kwargs.get('scan_pk')\n        filter_query = self.request.query_params.get('filter', None)\n        \n        if scan_pk:\n            return self.service.get_by_scan(scan_pk, filter_query=filter_query)\n        return self.service.get_all(filter_query=filter_query)\n\n    @action(detail=False, methods=['get'], url_path='export')\n    def export(self, request, **kwargs):\n        \"\"\"导出端点快照为 CSV 格式\n        \n        CSV 列：url, host, location, title, status_code, content_length, content_type, webserver, tech, response_body, response_headers, vhost, matched_gf_patterns, created_at\n        \"\"\"\n        from apps.common.utils import create_csv_export_response, format_datetime, format_list_field\n        \n        scan_pk = self.kwargs.get('scan_pk')\n        if not scan_pk:\n            raise DRFValidationError('必须在扫描下导出')\n        \n        data_iterator = self.service.iter_raw_data_for_csv_export(scan_id=scan_pk)\n        \n        headers = [\n            'url', 'host', 'location', 'title', 'status_code',\n            'content_length', 'content_type', 'webserver', 'tech',\n            'response_body', 'response_headers', 'vhost', 'matched_gf_patterns', 'created_at'\n        ]\n        formatters = {\n            'created_at': format_datetime,\n            'tech': lambda x: format_list_field(x, separator=','),\n            'matched_gf_patterns': lambda x: format_list_field(x, separator=','),\n        }\n        \n        return create_csv_export_response(\n            data_iterator=data_iterator,\n            headers=headers,\n            filename=f\"scan-{scan_pk}-endpoints.csv\",\n            field_formatters=formatters\n        )\n\n\nclass HostPortMappingSnapshotViewSet(viewsets.ModelViewSet):\n    \"\"\"主机端口映射快照 ViewSet - 嵌套路由：GET /api/scans/{scan_pk}/ip-addresses/\n    \n    支持智能过滤语法（filter 参数）：\n    - ip=\"192.168\"       IP 模糊匹配\n    - port=\"80\"          端口匹配\n    - host=\"api\"         主机名模糊匹配\n    \n    注意：由于返回的是聚合数据（字典列表），过滤在 Service 层处理\n    \"\"\"\n    \n    serializer_class = IPAddressAggregatedSerializer\n    pagination_class = BasePagination\n    \n    def __init__(self, **kwargs):\n        super().__init__(**kwargs)\n        self.service = HostPortMappingSnapshotsService()\n    \n    def get_queryset(self):\n        scan_pk = self.kwargs.get('scan_pk')\n        filter_query = self.request.query_params.get('filter', None)\n        \n        if scan_pk:\n            return self.service.get_ip_aggregation_by_scan(scan_pk, filter_query=filter_query)\n        return self.service.get_all_ip_aggregation(filter_query=filter_query)\n\n    @action(detail=False, methods=['get'], url_path='export')\n    def export(self, request, **kwargs):\n        \"\"\"导出 IP 地址为 CSV 格式\n        \n        CSV 列：ip, host, port, created_at\n        \"\"\"\n        from apps.common.utils import create_csv_export_response, format_datetime\n        \n        scan_pk = self.kwargs.get('scan_pk')\n        if not scan_pk:\n            raise DRFValidationError('必须在扫描下导出')\n        \n        # 获取流式数据迭代器\n        data_iterator = self.service.iter_raw_data_for_csv_export(scan_id=scan_pk)\n        \n        # CSV 表头和格式化器\n        headers = ['ip', 'host', 'port', 'created_at']\n        formatters = {\n            'created_at': format_datetime\n        }\n        \n        return create_csv_export_response(\n            data_iterator=data_iterator,\n            headers=headers,\n            filename=f\"scan-{scan_pk}-ip-addresses.csv\",\n            field_formatters=formatters\n        )\n\n\nclass VulnerabilitySnapshotViewSet(viewsets.ModelViewSet):\n    \"\"\"漏洞快照 ViewSet - 嵌套路由：GET /api/scans/{scan_pk}/vulnerabilities/\n    \n    支持智能过滤语法（filter 参数）：\n    - type=\"xss\"         漏洞类型模糊匹配\n    - url=\"api\"          URL 模糊匹配\n    - severity=\"high\"    严重程度匹配\n    - source=\"nuclei\"    来源工具匹配\n    \"\"\"\n    \n    serializer_class = VulnerabilitySnapshotSerializer\n    pagination_class = BasePagination\n    filter_backends = [filters.OrderingFilter]\n    ordering = ['-created_at']\n    \n    def __init__(self, **kwargs):\n        super().__init__(**kwargs)\n        self.service = VulnerabilitySnapshotsService()\n    \n    def get_queryset(self):\n        scan_pk = self.kwargs.get('scan_pk')\n        filter_query = self.request.query_params.get('filter', None)\n        \n        if scan_pk:\n            return self.service.get_by_scan(scan_pk, filter_query=filter_query)\n        return self.service.get_all(filter_query=filter_query)\n\n\n# ==================== 截图 ViewSet ====================\n\nclass ScreenshotViewSet(viewsets.ModelViewSet):\n    \"\"\"截图资产 ViewSet\n    \n    支持两种访问方式：\n    1. 嵌套路由：GET /api/targets/{target_pk}/screenshots/\n    2. 独立路由：GET /api/screenshots/（全局查询）\n    \n    支持智能过滤语法（filter 参数）：\n    - url=\"example\"      URL 模糊匹配\n    \"\"\"\n    \n    from ..serializers import ScreenshotListSerializer\n    \n    serializer_class = ScreenshotListSerializer\n    pagination_class = BasePagination\n    filter_backends = [filters.OrderingFilter]\n    ordering = ['-created_at']\n    \n    def get_queryset(self):\n        \"\"\"根据是否有 target_pk 参数决定查询范围\"\"\"\n        from ..models import Screenshot\n        \n        target_pk = self.kwargs.get('target_pk')\n        filter_query = self.request.query_params.get('filter', None)\n        \n        queryset = Screenshot.objects.all()\n        if target_pk:\n            queryset = queryset.filter(target_id=target_pk)\n        \n        if filter_query:\n            # 简单的 URL 模糊匹配\n            queryset = queryset.filter(url__icontains=filter_query)\n        \n        return queryset.order_by('-created_at')\n    \n    @action(detail=True, methods=['get'], url_path='image')\n    def image(self, request, pk=None, **kwargs):\n        \"\"\"获取截图图片\n        \n        GET /api/assets/screenshots/{id}/image/\n        \n        返回 WebP 格式的图片二进制数据\n        \"\"\"\n        from django.http import HttpResponse\n        from ..models import Screenshot\n        \n        try:\n            screenshot = Screenshot.objects.get(pk=pk)\n            if not screenshot.image:\n                return error_response(\n                    code=ErrorCodes.NOT_FOUND,\n                    message='Screenshot image not found',\n                    status_code=status.HTTP_404_NOT_FOUND\n                )\n            \n            response = HttpResponse(screenshot.image, content_type='image/webp')\n            response['Content-Disposition'] = f'inline; filename=\"screenshot_{pk}.webp\"'\n            return response\n        except Screenshot.DoesNotExist:\n            return error_response(\n                code=ErrorCodes.NOT_FOUND,\n                message='Screenshot not found',\n                status_code=status.HTTP_404_NOT_FOUND\n            )\n    \n    @action(detail=False, methods=['post'], url_path='bulk-delete')\n    def bulk_delete(self, request, **kwargs):\n        \"\"\"批量删除截图\n        \n        POST /api/assets/screenshots/bulk-delete/\n        \n        请求体: {\"ids\": [1, 2, 3]}\n        响应: {\"deletedCount\": 3}\n        \"\"\"\n        ids = request.data.get('ids', [])\n        if not ids or not isinstance(ids, list):\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='ids is required and must be a list',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        \n        try:\n            from ..models import Screenshot\n            deleted_count, _ = Screenshot.objects.filter(id__in=ids).delete()\n            return success_response(data={'deletedCount': deleted_count})\n        except Exception as e:\n            logger.exception(\"批量删除截图失败\")\n            return error_response(\n                code=ErrorCodes.SERVER_ERROR,\n                message='Failed to delete screenshots',\n                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR\n            )\n\n\nclass ScreenshotSnapshotViewSet(viewsets.ModelViewSet):\n    \"\"\"截图快照 ViewSet - 嵌套路由：GET /api/scans/{scan_pk}/screenshots/\n    \n    支持智能过滤语法（filter 参数）：\n    - url=\"example\"      URL 模糊匹配\n    \"\"\"\n    \n    from ..serializers import ScreenshotSnapshotListSerializer\n    \n    serializer_class = ScreenshotSnapshotListSerializer\n    pagination_class = BasePagination\n    filter_backends = [filters.OrderingFilter]\n    ordering = ['-created_at']\n    \n    def get_queryset(self):\n        \"\"\"根据 scan_pk 参数查询\"\"\"\n        from ..models import ScreenshotSnapshot\n        \n        scan_pk = self.kwargs.get('scan_pk')\n        filter_query = self.request.query_params.get('filter', None)\n        \n        queryset = ScreenshotSnapshot.objects.all()\n        if scan_pk:\n            queryset = queryset.filter(scan_id=scan_pk)\n        \n        if filter_query:\n            # 简单的 URL 模糊匹配\n            queryset = queryset.filter(url__icontains=filter_query)\n        \n        return queryset.order_by('-created_at')\n    \n    @action(detail=True, methods=['get'], url_path='image')\n    def image(self, request, pk=None, **kwargs):\n        \"\"\"获取截图快照图片\n        \n        GET /api/scans/{scan_pk}/screenshots/{id}/image/\n        \n        返回 WebP 格式的图片二进制数据\n        \"\"\"\n        from django.http import HttpResponse\n        from ..models import ScreenshotSnapshot\n        \n        try:\n            screenshot = ScreenshotSnapshot.objects.get(pk=pk)\n            if not screenshot.image:\n                return error_response(\n                    code=ErrorCodes.NOT_FOUND,\n                    message='Screenshot image not found',\n                    status_code=status.HTTP_404_NOT_FOUND\n                )\n            \n            response = HttpResponse(screenshot.image, content_type='image/webp')\n            response['Content-Disposition'] = f'inline; filename=\"screenshot_snapshot_{pk}.webp\"'\n            return response\n        except ScreenshotSnapshot.DoesNotExist:\n            return error_response(\n                code=ErrorCodes.NOT_FOUND,\n                message='Screenshot snapshot not found',\n                status_code=status.HTTP_404_NOT_FOUND\n            )\n"
  },
  {
    "path": "backend/apps/asset/views/search_views.py",
    "content": "\"\"\"\n资产搜索 API 视图\n\n提供资产搜索的 REST API 接口：\n- GET /api/assets/search/ - 搜索资产\n- GET /api/assets/search/export/ - 导出搜索结果为 CSV\n\n搜索语法：\n- field=\"value\"     模糊匹配（ILIKE %value%）\n- field==\"value\"    精确匹配\n- field!=\"value\"    不等于\n- &&                AND 连接\n- ||                OR 连接\n\n支持的字段：\n- host: 主机名\n- url: URL\n- title: 标题\n- tech: 技术栈\n- status: 状态码\n- body: 响应体\n- header: 响应头\n\n支持的资产类型：\n- website: 站点（默认）\n- endpoint: 端点\n\"\"\"\n\nimport logging\nimport json\nfrom datetime import datetime\nfrom urllib.parse import urlparse, urlunparse\nfrom rest_framework import status\nfrom rest_framework.views import APIView\nfrom rest_framework.request import Request\nfrom django.db import connection\n\nfrom apps.common.response_helpers import success_response, error_response\nfrom apps.common.error_codes import ErrorCodes\nfrom apps.asset.services.search_service import AssetSearchService, VALID_ASSET_TYPES\n\nlogger = logging.getLogger(__name__)\n\n\nclass AssetSearchView(APIView):\n    \"\"\"\n    资产搜索 API\n    \n    GET /api/assets/search/\n    \n    Query Parameters:\n        q: 搜索查询表达式\n        asset_type: 资产类型 ('website' 或 'endpoint'，默认 'website')\n        page: 页码（从 1 开始，默认 1）\n        pageSize: 每页数量（默认 10，最大 100）\n    \n    示例查询：\n        ?q=host=\"api\" && tech=\"nginx\"\n        ?q=tech=\"vue\" || tech=\"react\"&asset_type=endpoint\n        ?q=status==\"200\" && host!=\"test\"\n    \n    Response:\n        {\n            \"results\": [...],\n            \"total\": 100,\n            \"page\": 1,\n            \"pageSize\": 10,\n            \"totalPages\": 10,\n            \"assetType\": \"website\"\n        }\n    \"\"\"\n    \n    def __init__(self, **kwargs):\n        super().__init__(**kwargs)\n        self.service = AssetSearchService()\n    \n    def _parse_headers(self, headers_data) -> dict:\n        \"\"\"解析响应头为字典\"\"\"\n        if not headers_data:\n            return {}\n        try:\n            return json.loads(headers_data)\n        except (json.JSONDecodeError, TypeError):\n            result = {}\n            for line in str(headers_data).split('\\n'):\n                if ':' in line:\n                    key, value = line.split(':', 1)\n                    result[key.strip()] = value.strip()\n            return result\n    \n    def _format_result(self, result: dict, vulnerabilities_by_url: dict, asset_type: str) -> dict:\n        \"\"\"格式化单个搜索结果\"\"\"\n        url = result.get('url', '')\n        vulns = vulnerabilities_by_url.get(url, [])\n        \n        # 基础字段（Website 和 Endpoint 共有）\n        formatted = {\n            'id': result.get('id'),\n            'url': url,\n            'host': result.get('host', ''),\n            'title': result.get('title', ''),\n            'technologies': result.get('tech', []) or [],\n            'statusCode': result.get('status_code'),\n            'contentLength': result.get('content_length'),\n            'contentType': result.get('content_type', ''),\n            'webserver': result.get('webserver', ''),\n            'location': result.get('location', ''),\n            'vhost': result.get('vhost'),\n            'responseHeaders': self._parse_headers(result.get('response_headers')),\n            'responseBody': result.get('response_body', ''),\n            'createdAt': result.get('created_at').isoformat() if result.get('created_at') else None,\n            'targetId': result.get('target_id'),\n        }\n        \n        # Website 特有字段：漏洞关联\n        if asset_type == 'website':\n            formatted['vulnerabilities'] = [\n                {\n                    'id': v.get('id'),\n                    'name': v.get('vuln_type', ''),\n                    'vulnType': v.get('vuln_type', ''),\n                    'severity': v.get('severity', 'info'),\n                }\n                for v in vulns\n            ]\n        \n        # Endpoint 特有字段\n        if asset_type == 'endpoint':\n            formatted['matchedGfPatterns'] = result.get('matched_gf_patterns', []) or []\n        \n        return formatted\n    \n    def _get_vulnerabilities_by_url_prefix(self, website_urls: list) -> dict:\n        \"\"\"\n        根据 URL 前缀批量查询漏洞数据\n        \n        漏洞 URL 是 website URL 的子路径，使用前缀匹配：\n        - website.url: https://example.com/path?query=1\n        - vulnerability.url: https://example.com/path/api/users\n        \n        Args:\n            website_urls: website URL 列表，格式为 [(url, target_id), ...]\n        \n        Returns:\n            dict: {website_url: [vulnerability_list]}\n        \"\"\"\n        if not website_urls:\n            return {}\n        \n        try:\n            with connection.cursor() as cursor:\n                # 构建 OR 条件：每个 website URL（去掉查询参数）作为前缀匹配\n                conditions = []\n                params = []\n                url_mapping = {}  # base_url -> original_url\n                \n                for url, target_id in website_urls:\n                    if not url or target_id is None:\n                        continue\n                    # 使用 urlparse 去掉查询参数和片段，只保留 scheme://netloc/path\n                    parsed = urlparse(url)\n                    base_url = urlunparse((parsed.scheme, parsed.netloc, parsed.path, '', '', ''))\n                    url_mapping[base_url] = url\n                    conditions.append(\"(v.url LIKE %s AND v.target_id = %s)\")\n                    params.extend([base_url + '%', target_id])\n                \n                if not conditions:\n                    return {}\n                \n                where_clause = \" OR \".join(conditions)\n                \n                sql = f\"\"\"\n                    SELECT v.id, v.vuln_type, v.severity, v.url, v.target_id\n                    FROM vulnerability v\n                    WHERE {where_clause}\n                    ORDER BY \n                        CASE v.severity \n                            WHEN 'critical' THEN 1 \n                            WHEN 'high' THEN 2 \n                            WHEN 'medium' THEN 3 \n                            WHEN 'low' THEN 4 \n                            ELSE 5 \n                        END\n                \"\"\"\n                cursor.execute(sql, params)\n                \n                # 获取所有漏洞\n                all_vulns = []\n                for row in cursor.fetchall():\n                    all_vulns.append({\n                        'id': row[0],\n                        'vuln_type': row[1],\n                        'name': row[1],\n                        'severity': row[2],\n                        'url': row[3],\n                        'target_id': row[4],\n                    })\n                \n                # 按原始 website URL 分组（用于返回结果）\n                result = {url: [] for url, _ in website_urls}\n                for vuln in all_vulns:\n                    vuln_url = vuln['url']\n                    # 找到匹配的 website URL（最长前缀匹配）\n                    for website_url, target_id in website_urls:\n                        parsed = urlparse(website_url)\n                        base_url = urlunparse((parsed.scheme, parsed.netloc, parsed.path, '', '', ''))\n                        if vuln_url.startswith(base_url) and vuln['target_id'] == target_id:\n                            result[website_url].append(vuln)\n                            break\n                \n                return result\n        except Exception as e:\n            logger.error(f\"批量查询漏洞失败: {e}\")\n            return {}\n    \n    def get(self, request: Request):\n        \"\"\"搜索资产\"\"\"\n        # 获取搜索查询\n        query = request.query_params.get('q', '').strip()\n        \n        if not query:\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='Search query (q) is required',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        \n        # 获取并验证资产类型\n        asset_type = request.query_params.get('asset_type', 'website').strip().lower()\n        if asset_type not in VALID_ASSET_TYPES:\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message=f'Invalid asset_type. Must be one of: {\", \".join(VALID_ASSET_TYPES)}',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        \n        # 获取分页参数\n        try:\n            page = int(request.query_params.get('page', 1))\n            page_size = int(request.query_params.get('pageSize', 10))\n        except (ValueError, TypeError):\n            page = 1\n            page_size = 10\n        \n        # 限制分页参数\n        page = max(1, page)\n        page_size = min(max(1, page_size), 100)\n        \n        # 获取总数和搜索结果\n        total = self.service.count(query, asset_type)\n        total_pages = (total + page_size - 1) // page_size if total > 0 else 1\n        offset = (page - 1) * page_size\n        \n        all_results = self.service.search(query, asset_type)\n        results = all_results[offset:offset + page_size]\n        \n        # 批量查询漏洞数据（仅 Website 类型需要）\n        vulnerabilities_by_url = {}\n        if asset_type == 'website':\n            website_urls = [(r.get('url'), r.get('target_id')) for r in results if r.get('url') and r.get('target_id')]\n            vulnerabilities_by_url = self._get_vulnerabilities_by_url_prefix(website_urls) if website_urls else {}\n        \n        # 格式化结果\n        formatted_results = [self._format_result(r, vulnerabilities_by_url, asset_type) for r in results]\n        \n        return success_response(data={\n            'results': formatted_results,\n            'total': total,\n            'page': page,\n            'pageSize': page_size,\n            'totalPages': total_pages,\n            'assetType': asset_type,\n        })\n\n\nclass AssetSearchExportView(APIView):\n    \"\"\"\n    资产搜索导出 API\n    \n    GET /api/assets/search/export/\n    \n    Query Parameters:\n        q: 搜索查询表达式\n        asset_type: 资产类型 ('website' 或 'endpoint'，默认 'website')\n    \n    Response:\n        CSV 文件（带 Content-Length，支持浏览器显示下载进度）\n    \"\"\"\n    \n    def __init__(self, **kwargs):\n        super().__init__(**kwargs)\n        self.service = AssetSearchService()\n    \n    def _get_headers_and_formatters(self, asset_type: str):\n        \"\"\"获取 CSV 表头和格式化器\"\"\"\n        from apps.common.utils import format_datetime, format_list_field\n        \n        if asset_type == 'website':\n            headers = ['url', 'host', 'title', 'status_code', 'content_type', 'content_length', \n                      'webserver', 'location', 'tech', 'vhost', 'created_at']\n        else:\n            headers = ['url', 'host', 'title', 'status_code', 'content_type', 'content_length',\n                      'webserver', 'location', 'tech', 'matched_gf_patterns', 'vhost', 'created_at']\n        \n        formatters = {\n            'created_at': format_datetime,\n            'tech': lambda x: format_list_field(x, separator='; '),\n            'matched_gf_patterns': lambda x: format_list_field(x, separator='; '),\n            'vhost': lambda x: 'true' if x else ('false' if x is False else ''),\n        }\n        \n        return headers, formatters\n    \n    def get(self, request: Request):\n        \"\"\"导出搜索结果为 CSV（带 Content-Length，支持下载进度显示）\"\"\"\n        from apps.common.utils import create_csv_export_response\n        \n        # 获取搜索查询\n        query = request.query_params.get('q', '').strip()\n        \n        if not query:\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='Search query (q) is required',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        \n        # 获取并验证资产类型\n        asset_type = request.query_params.get('asset_type', 'website').strip().lower()\n        if asset_type not in VALID_ASSET_TYPES:\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message=f'Invalid asset_type. Must be one of: {\", \".join(VALID_ASSET_TYPES)}',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        \n        # 检查是否有结果（快速检查，避免空导出）\n        total = self.service.count(query, asset_type)\n        if total == 0:\n            return error_response(\n                code=ErrorCodes.NOT_FOUND,\n                message='No results to export',\n                status_code=status.HTTP_404_NOT_FOUND\n            )\n        \n        # 获取表头和格式化器\n        headers, formatters = self._get_headers_and_formatters(asset_type)\n        \n        # 生成文件名\n        timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')\n        filename = f'search_{asset_type}_{timestamp}.csv'\n        \n        # 使用通用导出工具\n        data_iterator = self.service.search_iter(query, asset_type)\n        return create_csv_export_response(\n            data_iterator=data_iterator,\n            headers=headers,\n            filename=filename,\n            field_formatters=formatters,\n            show_progress=True  # 显示下载进度\n        )\n"
  },
  {
    "path": "backend/apps/common/__init__.py",
    "content": "\"\"\"\n通用工具模块\n\n提供各种共享的工具类和函数\n\"\"\"\n\nfrom .normalizer import normalize_domain, normalize_ip, normalize_cidr, normalize_target\nfrom .validators import validate_domain, validate_ip, validate_cidr, detect_target_type\n\n__all__ = [\n    # 规范化工具\n    'normalize_domain',\n    'normalize_ip',\n    'normalize_cidr',\n    'normalize_target',\n    \n    # 验证器\n    'validate_domain',\n    'validate_ip',\n    'validate_cidr',\n    'detect_target_type',\n]\n\n"
  },
  {
    "path": "backend/apps/common/apps.py",
    "content": "from django.apps import AppConfig\n\n\nclass CommonConfig(AppConfig):\n    default_auto_field = 'django.db.models.BigAutoField'\n    name = 'apps.common'  # 因为在 apps/ 目录下\n    \n    def ready(self):\n        \"\"\"应用就绪时调用\"\"\"\n        pass\n"
  },
  {
    "path": "backend/apps/common/authentication.py",
    "content": "from rest_framework.authentication import SessionAuthentication\n\n\nclass CsrfExemptSessionAuthentication(SessionAuthentication):\n    \"\"\"\n    前后端分离项目使用的 Session 认证\n    禁用 CSRF 检查，因为 CSRF 主要防护的是同源页面表单提交\n    前后端分离项目通过 CORS 控制跨域访问，不需要 CSRF\n    \"\"\"\n\n    def enforce_csrf(self, request):\n        # 不执行 CSRF 检查\n        return\n"
  },
  {
    "path": "backend/apps/common/container_bootstrap.py",
    "content": "\"\"\"\n容器启动引导模块\n\n提供动态任务容器的通用初始化功能：\n- 从 Server 配置中心获取配置\n- 设置环境变量\n- 初始化 Django 环境\n\n使用方式：\n    from apps.common.container_bootstrap import fetch_config_and_setup_django\n    fetch_config_and_setup_django()  # 必须在 Django 导入之前调用\n\"\"\"\nimport os\nimport sys\nimport requests\nimport logging\nimport urllib3\n\n# 禁用自签名证书的 SSL 警告（远程 Worker 场景）\nurllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)\n\nlogger = logging.getLogger(__name__)\n\n\ndef fetch_config_and_setup_django():\n    \"\"\"\n    从配置中心获取配置并初始化 Django\n    \n    Note:\n        必须在 Django 导入之前调用此函数\n    \"\"\"\n    server_url = os.environ.get(\"SERVER_URL\")\n    if not server_url:\n        print(\"[ERROR] 缺少 SERVER_URL 环境变量\", file=sys.stderr)\n        sys.exit(1)\n    \n    # 通过环境变量声明 Worker 身份（本地/远程）\n    is_local = os.environ.get(\"IS_LOCAL\", \"false\").lower() == \"true\"\n    config_url = f\"{server_url}/api/workers/config/?is_local={str(is_local).lower()}\"\n    print(f\"[CONFIG] 正在从配置中心获取配置: {config_url}\")\n    print(f\"[CONFIG] IS_LOCAL={is_local}\")\n    try:\n        # 构建请求头（包含 Worker API Key）\n        headers = {}\n        worker_api_key = os.environ.get(\"WORKER_API_KEY\", \"\")\n        if worker_api_key:\n            headers[\"X-Worker-API-Key\"] = worker_api_key\n        \n        # verify=False: 远程 Worker 通过 HTTPS 访问时可能使用自签名证书\n        resp = requests.get(config_url, headers=headers, timeout=10, verify=False)\n        resp.raise_for_status()\n        config = resp.json()\n        \n        # 数据库配置（必需）\n        db_host = config['db']['host']\n        db_port = config['db']['port']\n        db_name = config['db']['name']\n        db_user = config['db']['user']\n        \n        os.environ.setdefault(\"DB_HOST\", db_host)\n        os.environ.setdefault(\"DB_PORT\", db_port)\n        os.environ.setdefault(\"DB_NAME\", db_name)\n        os.environ.setdefault(\"DB_USER\", db_user)\n        os.environ.setdefault(\"DB_PASSWORD\", config['db']['password'])\n        \n        # 日志配置\n        os.environ.setdefault(\"LOG_DIR\", config['paths']['logs'])\n        os.environ.setdefault(\"LOG_LEVEL\", config['logging']['level'])\n        os.environ.setdefault(\"ENABLE_COMMAND_LOGGING\", str(config['logging']['enableCommandLogging']).lower())\n        os.environ.setdefault(\"DEBUG\", str(config['debug']))\n        \n        print(f\"[CONFIG] ✓ 配置获取成功\")\n        print(f\"[CONFIG]   DB_HOST: {db_host}\")\n        print(f\"[CONFIG]   DB_PORT: {db_port}\")\n        print(f\"[CONFIG]   DB_NAME: {db_name}\")\n        print(f\"[CONFIG]   DB_USER: {db_user}\")\n        \n    except Exception as e:\n        print(f\"[ERROR] 获取配置失败: {config_url} - {e}\", file=sys.stderr)\n        sys.exit(1)\n    \n    # 初始化 Django\n    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')\n    import django\n    django.setup()\n    \n    return config\n"
  },
  {
    "path": "backend/apps/common/decorators/__init__.py",
    "content": "\"\"\"\n通用装饰器模块\n\n提供可在整个项目中复用的装饰器\n\"\"\"\n\nfrom .db_connection import (\n    ensure_db_connection,\n    auto_ensure_db_connection,\n    async_check_and_reconnect,\n    ensure_db_connection_async,\n)\n\n__all__ = [\n    'ensure_db_connection',\n    'auto_ensure_db_connection',\n    'async_check_and_reconnect',\n    'ensure_db_connection_async',\n]\n"
  },
  {
    "path": "backend/apps/common/decorators/db_connection.py",
    "content": "\"\"\"\n数据库连接装饰器\n\n提供自动数据库连接健康检查的装饰器，确保长时间运行的任务中数据库连接不会失效。\n\n主要功能：\n- @auto_ensure_db_connection: 类装饰器，自动为所有公共方法添加连接检查\n- @ensure_db_connection: 方法装饰器，单独为某个方法添加连接检查\n\n使用场景：\n- Repository 层的数据库操作\n- Service 层需要确保数据库连接的操作\n- 任何需要数据库连接健康检查的类或方法\n\"\"\"\n\nimport logging\nimport functools\nimport time\nfrom django.db import connection\nfrom asgiref.sync import sync_to_async\n\nlogger = logging.getLogger(__name__)\n\n\ndef ensure_db_connection(method):\n    \"\"\"\n    方法装饰器：自动确保数据库连接健康\n    \n    在方法执行前自动检查数据库连接，如果连接失效则自动重连。\n    \n    使用场景：\n    - 需要单独装饰某个方法时使用\n    - 通常建议使用类装饰器 @auto_ensure_db_connection\n    \n    示例：\n        @ensure_db_connection\n        def my_method(self):\n            # 会自动检查连接健康\n            ...\n    \"\"\"\n    @functools.wraps(method)\n    def wrapper(self, *args, **kwargs):\n        _check_and_reconnect()\n        return method(self, *args, **kwargs)\n    return wrapper\n\n\ndef auto_ensure_db_connection(cls):\n    \"\"\"\n    类装饰器：自动给所有公共方法添加数据库连接检查\n    \n    自动为类中所有公共方法（不以 _ 开头的方法）添加 @ensure_db_connection 装饰器。\n    \n    特性：\n    - 自动装饰所有公共方法\n    - 跳过私有方法（以 _ 开头）\n    - 跳过类方法和静态方法\n    - 跳过已经装饰过的方法\n    \n    使用方式：\n        @auto_ensure_db_connection\n        class MyRepository:\n            def bulk_create(self, items):\n                # 自动添加连接检查\n                ...\n            \n            def query(self, filters):\n                # 自动添加连接检查\n                ...\n            \n            def _private_method(self):\n                # 不会添加装饰器\n                ...\n    \n    优势：\n    - 无需为每个方法手动添加装饰器\n    - 减少代码重复\n    - 降低遗漏风险\n    \"\"\"\n    for attr_name in dir(cls):\n        # 跳过私有方法和魔术方法\n        if attr_name.startswith('_'):\n            continue\n        \n        attr = getattr(cls, attr_name)\n        \n        # 只装饰可调用的实例方法\n        if callable(attr) and not isinstance(attr, (staticmethod, classmethod)):\n            # 检查是否已经被装饰过（避免重复装饰）\n            if not hasattr(attr, '_db_connection_ensured'):\n                wrapped = ensure_db_connection(attr)\n                wrapped._db_connection_ensured = True\n                setattr(cls, attr_name, wrapped)\n    \n    return cls\n\n\ndef _check_and_reconnect(max_retries=5):\n    \"\"\"\n    检查数据库连接健康状态，必要时使用指数退避重新连接\n    \n    策略：\n    1. 尝试执行简单查询测试连接\n    2. 如果失败，使用指数退避策略重试（最多5次）\n    3. 每次重试的等待时间：2^attempt 秒 (1s, 2s, 4s, 8s, 16s)\n    \n    异常处理：\n    - 连接失效时自动重连\n    - 记录警告日志和重试信息\n    - 忽略关闭连接时的错误\n    - 达到最大重试次数后抛出异常\n    \"\"\"\n    last_error = None\n    \n    for attempt in range(max_retries):\n        try:\n            connection.ensure_connection()\n            with connection.cursor() as cursor:\n                cursor.execute(\"SELECT 1\")\n                cursor.fetchone()\n            \n            # 连接成功\n            if attempt > 0:\n                logger.info(f\"数据库重连成功 (尝试 {attempt + 1}/{max_retries})\")\n            return\n            \n        except Exception as e:\n            last_error = e\n            logger.warning(\n                f\"数据库连接检查失败 (尝试 {attempt + 1}/{max_retries}): {e}\"\n            )\n            \n            # 关闭失效的连接\n            try:\n                connection.close()\n            except Exception:\n                pass  # 忽略关闭时的错误\n            \n            # 如果还有重试机会，使用指数退避等待\n            if attempt < max_retries - 1:\n                delay = 2 ** attempt  # 指数退避: 1, 2, 4, 8, 16 秒\n                logger.info(f\"等待 {delay} 秒后重试...\")\n                time.sleep(delay)\n            else:\n                # 最后一次尝试也失败，抛出异常\n                logger.error(\n                    f\"数据库重连失败，已达最大重试次数 ({max_retries})\"\n                )\n                raise last_error\n\n\nasync def async_check_and_reconnect(max_retries=5):\n    await sync_to_async(_check_and_reconnect, thread_sensitive=True)(max_retries=max_retries)\n\n\ndef ensure_db_connection_async(method):\n    @functools.wraps(method)\n    async def wrapper(*args, **kwargs):\n        await async_check_and_reconnect()\n        return await method(*args, **kwargs)\n    return wrapper\n\n\n__all__ = [\n    'ensure_db_connection',\n    'auto_ensure_db_connection',\n    'async_check_and_reconnect',\n    'ensure_db_connection_async',\n]\n"
  },
  {
    "path": "backend/apps/common/definitions.py",
    "content": "from django.db import models\n\n\nclass ScanStatus(models.TextChoices):\n    \"\"\"扫描任务状态枚举\"\"\"\n    CANCELLED = 'cancelled', '已取消'\n    COMPLETED = 'completed', '已完成'\n    FAILED = 'failed', '失败'\n    INITIATED = 'initiated', '初始化'\n    RUNNING = 'running', '运行中'\n\n\nclass VulnSeverity(models.TextChoices):\n    \"\"\"漏洞严重性枚举\"\"\"\n    UNKNOWN = 'unknown', '未知'\n    INFO = 'info', '信息'\n    LOW = 'low', '低'\n    MEDIUM = 'medium', '中'\n    HIGH = 'high', '高'\n    CRITICAL = 'critical', '危急'\n"
  },
  {
    "path": "backend/apps/common/error_codes.py",
    "content": "\"\"\"\n标准化错误码定义\n\n采用简化方案（参考 Stripe、GitHub 等大厂做法）：\n- 只定义 5-10 个通用错误码\n- 未知错误使用通用错误码\n- 错误码格式：大写字母和下划线组成\n\"\"\"\n\n\nclass ErrorCodes:\n    \"\"\"标准化错误码\n    \n    只定义通用错误码，其他错误使用通用消息。\n    这是 Stripe、GitHub 等大厂的标准做法。\n    \n    错误码格式规范：\n    - 使用大写字母和下划线\n    - 简洁明了，易于理解\n    - 前端通过错误码映射到 i18n 键\n    \"\"\"\n    \n    # 通用错误码（8 个）\n    VALIDATION_ERROR = 'VALIDATION_ERROR'      # 输入验证失败\n    NOT_FOUND = 'NOT_FOUND'                    # 资源未找到\n    PERMISSION_DENIED = 'PERMISSION_DENIED'    # 权限不足\n    SERVER_ERROR = 'SERVER_ERROR'              # 服务器内部错误\n    BAD_REQUEST = 'BAD_REQUEST'                # 请求格式错误\n    CONFLICT = 'CONFLICT'                      # 资源冲突（如重复创建）\n    UNAUTHORIZED = 'UNAUTHORIZED'              # 未认证\n    RATE_LIMITED = 'RATE_LIMITED'              # 请求过于频繁\n"
  },
  {
    "path": "backend/apps/common/exception_handlers.py",
    "content": "\"\"\"\n自定义异常处理器\n\n统一处理 DRF 异常，确保错误响应格式一致\n\"\"\"\n\nfrom rest_framework.views import exception_handler\nfrom rest_framework import status\nfrom rest_framework.exceptions import AuthenticationFailed, NotAuthenticated\n\nfrom apps.common.response_helpers import error_response\nfrom apps.common.error_codes import ErrorCodes\n\n\ndef custom_exception_handler(exc, context):\n    \"\"\"\n    自定义异常处理器\n    \n    处理认证相关异常，返回统一格式的错误响应\n    \"\"\"\n    # 先调用 DRF 默认的异常处理器\n    response = exception_handler(exc, context)\n    \n    if response is not None:\n        # 处理 401 未认证错误\n        if response.status_code == status.HTTP_401_UNAUTHORIZED:\n            return error_response(\n                code=ErrorCodes.UNAUTHORIZED,\n                message='Authentication required',\n                status_code=status.HTTP_401_UNAUTHORIZED\n            )\n        \n        # 处理 403 权限不足错误\n        if response.status_code == status.HTTP_403_FORBIDDEN:\n            return error_response(\n                code=ErrorCodes.PERMISSION_DENIED,\n                message='Permission denied',\n                status_code=status.HTTP_403_FORBIDDEN\n            )\n    \n    # 处理 NotAuthenticated 和 AuthenticationFailed 异常\n    if isinstance(exc, (NotAuthenticated, AuthenticationFailed)):\n        return error_response(\n            code=ErrorCodes.UNAUTHORIZED,\n            message='Authentication required',\n            status_code=status.HTTP_401_UNAUTHORIZED\n        )\n    \n    return response\n"
  },
  {
    "path": "backend/apps/common/management/commands/db_health_check.py",
    "content": "\"\"\"\n数据库健康检查管理命令\n\n使用方法:\npython manage.py db_health_check                              # 基础延迟测试（5次）\npython manage.py db_health_check --test-count=10              # 指定测试次数\npython manage.py db_health_check --reconnect                  # 强制重连后测试\npython manage.py db_health_check --stats                      # 显示连接统计信息\npython manage.py db_health_check --api-test                   # 测试实际API查询性能\npython manage.py db_health_check --monitor                    # 监控数据库服务器性能指标\npython manage.py db_health_check --db=other                   # 指定数据库别名\npython manage.py db_health_check --api-test --test-count=10   # API性能测试10次\npython manage.py db_health_check --reconnect --api-test       # 重连后进行API测试\n\n示例:\n# 快速延迟检查\npython manage.py db_health_check --test-count=3\n\n# 完整性能分析\npython manage.py db_health_check --api-test --stats --test-count=5\n\n# 数据库服务器监控\npython manage.py db_health_check --monitor\n\"\"\"\n\nimport time\nimport logging\nfrom django.core.management.base import BaseCommand\nfrom django.db import connection, connections\nfrom django.conf import settings\n\nlogger = logging.getLogger(__name__)\n\n\nclass Command(BaseCommand):\n    \"\"\"Django管理命令：数据库健康检查\"\"\"\n    \n    help = '检查数据库连接健康状态'\n    \n    def add_arguments(self, parser):\n        parser.add_argument(\n            '--reconnect',\n            action='store_true',\n            help='强制重新连接数据库',\n        )\n        parser.add_argument(\n            '--stats',\n            action='store_true',\n            help='显示连接统计信息',\n        )\n        parser.add_argument(\n            '--db',\n            type=str,\n            default='default',\n            help='指定数据库别名（默认: default）',\n        )\n        parser.add_argument(\n            '--test-count',\n            type=int,\n            default=5,\n            help='延迟测试次数（默认: 5）',\n        )\n        parser.add_argument(\n            '--api-test',\n            action='store_true',\n            help='测试实际API查询性能',\n        )\n        parser.add_argument(\n            '--monitor',\n            action='store_true',\n            help='监控数据库服务器性能指标',\n        )\n    \n    def handle(self, *args, **options):\n        db_alias = options['db']\n        test_count = options['test_count']\n        \n        self.stdout.write(f\"正在测试数据库 '{db_alias}' 连接...\")\n        \n        # 获取数据库连接\n        db_connection = connections[db_alias]\n        \n        if options['reconnect']:\n            self.stdout.write(\"强制重新连接数据库...\")\n            try:\n                db_connection.close()\n                db_connection.ensure_connection()\n                self.stdout.write(self.style.SUCCESS(\"✓ 重连成功\"))\n            except Exception as e:\n                self.stdout.write(self.style.ERROR(f\"✗ 重连失败: {e}\"))\n                return\n        \n        # 测试数据库延迟\n        if options['monitor']:\n            self.monitor_database_performance(db_connection)\n        elif options['api_test']:\n            self.test_api_performance(test_count)\n        else:\n            self.test_database_latency(db_connection, test_count)\n        \n        if options['stats']:\n            self.show_connection_stats(db_connection)\n    \n    def test_database_latency(self, db_connection, test_count):\n        \"\"\"测试数据库延迟\"\"\"\n        self.stdout.write(f\"\\n开始延迟测试（{test_count} 次）...\")\n        \n        latencies = []\n        successful_tests = 0\n        connection_times = []\n        query_times = []\n        \n        for i in range(test_count):\n            try:\n                # 测试连接建立时间\n                conn_start = time.time()\n                db_connection.ensure_connection()\n                conn_end = time.time()\n                conn_time = (conn_end - conn_start) * 1000\n                connection_times.append(conn_time)\n                \n                # 测试查询执行时间\n                query_start = time.time()\n                with db_connection.cursor() as cursor:\n                    cursor.execute(\"SELECT 1\")\n                    result = cursor.fetchone()\n                query_end = time.time()\n                query_time = (query_end - query_start) * 1000\n                query_times.append(query_time)\n                \n                total_time = conn_time + query_time\n                latencies.append(total_time)\n                successful_tests += 1\n                \n                self.stdout.write(f\"  测试 {i+1}: 总计{total_time:.2f}ms (连接:{conn_time:.2f}ms + 查询:{query_time:.2f}ms) ✓\")\n                \n            except Exception as e:\n                self.stdout.write(f\"  测试 {i+1}: 失败 - {e}\")\n        \n        # 计算统计信息\n        if latencies:\n            avg_latency = sum(latencies) / len(latencies)\n            min_latency = min(latencies)\n            max_latency = max(latencies)\n            \n            avg_conn_time = sum(connection_times) / len(connection_times)\n            avg_query_time = sum(query_times) / len(query_times)\n            \n            self.stdout.write(f\"\\n延迟统计:\")\n            self.stdout.write(f\"  成功测试: {successful_tests}/{test_count}\")\n            self.stdout.write(f\"  平均总延迟: {avg_latency:.2f}ms\")\n            self.stdout.write(f\"  平均连接时间: {avg_conn_time:.2f}ms\")\n            self.stdout.write(f\"  平均查询时间: {avg_query_time:.2f}ms\")\n            self.stdout.write(f\"  最小延迟: {min_latency:.2f}ms\")\n            self.stdout.write(f\"  最大延迟: {max_latency:.2f}ms\")\n            \n            # 分析延迟来源\n            if avg_conn_time > avg_query_time * 2:\n                self.stdout.write(self.style.WARNING(\"  分析: 连接建立是主要延迟来源\"))\n            elif avg_query_time > avg_conn_time * 2:\n                self.stdout.write(self.style.WARNING(\"  分析: 查询执行是主要延迟来源\"))\n            else:\n                self.stdout.write(\"  分析: 连接和查询延迟相当\")\n            \n            # 延迟评估\n            if avg_latency < 10:\n                self.stdout.write(self.style.SUCCESS(\"  评估: 延迟很低，连接优秀\"))\n            elif avg_latency < 50:\n                self.stdout.write(self.style.SUCCESS(\"  评估: 延迟较低，连接良好\"))\n            elif avg_latency < 200:\n                self.stdout.write(self.style.WARNING(\"  评估: 延迟中等，连接可接受\"))\n            else:\n                self.stdout.write(self.style.ERROR(\"  评估: 延迟较高，可能影响性能\"))\n        else:\n            self.stdout.write(self.style.ERROR(\"所有测试都失败了\"))\n    \n    def test_api_performance(self, test_count):\n        \"\"\"测试实际API查询性能\"\"\"\n        self.stdout.write(f\"\\n开始API性能测试（{test_count} 次）...\")\n        \n        # 导入必要的模块\n        from apps.scan.models import Scan\n        from apps.engine.models import ScanEngine\n        from apps.targets.models import Target\n        from django.db.models import Count\n        \n        api_latencies = []\n        successful_tests = 0\n        \n        for i in range(test_count):\n            try:\n                start_time = time.time()\n                \n                # 测试多种查询类型\n                \n                # 1. 简单查询 - 引擎列表\n                engines = list(ScanEngine.objects.all()[:10])\n                \n                # 2. 复杂查询 - 扫描列表（即使没有数据也会执行复杂的JOIN）\n                scan_queryset = Scan.objects.select_related(\n                    'target', 'engine'\n                ).annotate(\n                    subdomains_count=Count('subdomains', distinct=True),\n                    endpoints_count=Count('endpoints', distinct=True),\n                    ips_count=Count('ip_addresses', distinct=True)\n                ).order_by('-id')[:10]\n                scan_list = list(scan_queryset)\n                \n                # 3. 目标查询\n                targets = list(Target.objects.all()[:10])\n                \n                end_time = time.time()\n                latency_ms = (end_time - start_time) * 1000\n                api_latencies.append(latency_ms)\n                successful_tests += 1\n                \n                self.stdout.write(f\"  API测试 {i+1}: {latency_ms:.2f}ms ✓ (引擎:{len(engines)}, 扫描:{len(scan_list)}, 目标:{len(targets)})\")\n                \n            except Exception as e:\n                self.stdout.write(f\"  API测试 {i+1}: 失败 - {e}\")\n        \n        # 计算API查询统计信息\n        if api_latencies:\n            avg_latency = sum(api_latencies) / len(api_latencies)\n            min_latency = min(api_latencies)\n            max_latency = max(api_latencies)\n            \n            self.stdout.write(f\"\\nAPI查询统计:\")\n            self.stdout.write(f\"  成功测试: {successful_tests}/{test_count}\")\n            self.stdout.write(f\"  平均延迟: {avg_latency:.2f}ms\")\n            self.stdout.write(f\"  最小延迟: {min_latency:.2f}ms\")\n            self.stdout.write(f\"  最大延迟: {max_latency:.2f}ms\")\n            \n            # 与简单查询对比\n            simple_query_avg = 150  # 基于之前的测试结果\n            overhead = avg_latency - simple_query_avg\n            self.stdout.write(f\"  业务逻辑开销: {overhead:.2f}ms\")\n            \n            # 性能评估\n            if avg_latency < 500:\n                self.stdout.write(self.style.SUCCESS(\"  评估: API响应速度良好\"))\n            elif avg_latency < 1000:\n                self.stdout.write(self.style.WARNING(\"  评估: API响应速度一般\"))\n            else:\n                self.stdout.write(self.style.ERROR(\"  评估: API响应速度较慢，需要优化\"))\n        else:\n            self.stdout.write(self.style.ERROR(\"所有API测试都失败了\"))\n    \n    def monitor_database_performance(self, db_connection):\n        \"\"\"监控数据库服务器性能指标\"\"\"\n        self.stdout.write(f\"\\n开始监控数据库性能指标...\")\n        \n        try:\n            with db_connection.cursor() as cursor:\n                # 1. 数据库基本信息\n                self.stdout.write(f\"\\n=== 数据库基本信息 ===\")\n                cursor.execute(\"SELECT version();\")\n                version = cursor.fetchone()[0]\n                self.stdout.write(f\"PostgreSQL版本: {version}\")\n                \n                cursor.execute(\"SELECT current_database();\")\n                db_name = cursor.fetchone()[0]\n                self.stdout.write(f\"当前数据库: {db_name}\")\n                \n                # 2. 连接信息\n                self.stdout.write(f\"\\n=== 连接状态 ===\")\n                cursor.execute(\"\"\"\n                    SELECT count(*) as total_connections,\n                           count(*) FILTER (WHERE state = 'active') as active_connections,\n                           count(*) FILTER (WHERE state = 'idle') as idle_connections\n                    FROM pg_stat_activity;\n                \"\"\")\n                conn_stats = cursor.fetchone()\n                self.stdout.write(f\"总连接数: {conn_stats[0]}\")\n                self.stdout.write(f\"活跃连接: {conn_stats[1]}\")\n                self.stdout.write(f\"空闲连接: {conn_stats[2]}\")\n                \n                # 3. 数据库大小\n                self.stdout.write(f\"\\n=== 数据库大小 ===\")\n                cursor.execute(\"\"\"\n                    SELECT pg_size_pretty(pg_database_size(current_database())) as db_size;\n                \"\"\")\n                db_size = cursor.fetchone()[0]\n                self.stdout.write(f\"数据库大小: {db_size}\")\n                \n                # 4. 表统计信息\n                self.stdout.write(f\"\\n=== 主要表统计 ===\")\n                cursor.execute(\"\"\"\n                    SELECT schemaname, relname, \n                           n_tup_ins as inserts,\n                           n_tup_upd as updates,\n                           n_tup_del as deletes,\n                           n_live_tup as live_rows,\n                           n_dead_tup as dead_rows\n                    FROM pg_stat_user_tables \n                    WHERE schemaname = 'public'\n                    ORDER BY n_live_tup DESC\n                    LIMIT 10;\n                \"\"\")\n                tables = cursor.fetchall()\n                if tables:\n                    for table in tables:\n                        self.stdout.write(f\"  {table[1]}: {table[5]} 行 (插入:{table[2]}, 更新:{table[3]}, 删除:{table[4]}, 死行:{table[6]})\")\n                else:\n                    self.stdout.write(\"  暂无表统计数据\")\n                \n                # 5. 慢查询统计\n                self.stdout.write(f\"\\n=== 查询性能统计 ===\")\n                cursor.execute(\"\"\"\n                    SELECT query,\n                           calls,\n                           total_time,\n                           mean_time,\n                           rows\n                    FROM pg_stat_statements \n                    WHERE query NOT LIKE '%pg_stat_statements%'\n                    ORDER BY mean_time DESC \n                    LIMIT 5;\n                \"\"\")\n                try:\n                    slow_queries = cursor.fetchall()\n                    if slow_queries:\n                        for i, query in enumerate(slow_queries, 1):\n                            self.stdout.write(f\"  {i}. 平均耗时: {query[3]:.2f}ms, 调用次数: {query[1]}\")\n                            self.stdout.write(f\"     查询: {query[0][:100]}...\")\n                    else:\n                        self.stdout.write(\"  未找到查询统计（可能未启用pg_stat_statements扩展）\")\n                except Exception:\n                    self.stdout.write(\"  查询统计不可用（需要pg_stat_statements扩展）\")\n                \n                # 6. 锁信息\n                self.stdout.write(f\"\\n=== 锁状态 ===\")\n                cursor.execute(\"\"\"\n                    SELECT mode, count(*) \n                    FROM pg_locks \n                    GROUP BY mode \n                    ORDER BY count(*) DESC;\n                \"\"\")\n                locks = cursor.fetchall()\n                total_locks = sum(lock[1] for lock in locks)\n                self.stdout.write(f\"总锁数量: {total_locks}\")\n                for lock in locks:\n                    self.stdout.write(f\"  {lock[0]}: {lock[1]} 个\")\n                \n                # 7. 缓存命中率\n                self.stdout.write(f\"\\n=== 缓存性能 ===\")\n                cursor.execute(\"\"\"\n                    SELECT \n                        sum(heap_blks_read) as heap_read,\n                        sum(heap_blks_hit) as heap_hit,\n                        sum(heap_blks_hit) / (sum(heap_blks_hit) + sum(heap_blks_read)) * 100 as cache_hit_ratio\n                    FROM pg_statio_user_tables;\n                \"\"\")\n                cache_stats = cursor.fetchone()\n                if cache_stats[0] and cache_stats[1]:\n                    self.stdout.write(f\"缓存命中率: {cache_stats[2]:.2f}%\")\n                    self.stdout.write(f\"磁盘读取: {cache_stats[0]} 块\")\n                    self.stdout.write(f\"缓存命中: {cache_stats[1]} 块\")\n                else:\n                    self.stdout.write(\"缓存统计: 暂无数据\")\n                \n                # 8. 检查点和WAL\n                self.stdout.write(f\"\\n=== WAL和检查点 ===\")\n                cursor.execute(\"\"\"\n                    SELECT \n                        checkpoints_timed,\n                        checkpoints_req,\n                        checkpoint_write_time,\n                        checkpoint_sync_time\n                    FROM pg_stat_bgwriter;\n                \"\"\")\n                bgwriter = cursor.fetchone()\n                self.stdout.write(f\"定时检查点: {bgwriter[0]}\")\n                self.stdout.write(f\"请求检查点: {bgwriter[1]}\")\n                self.stdout.write(f\"检查点写入时间: {bgwriter[2]}ms\")\n                self.stdout.write(f\"检查点同步时间: {bgwriter[3]}ms\")\n                \n                # 9. 当前活跃查询\n                self.stdout.write(f\"\\n=== 当前活跃查询 ===\")\n                cursor.execute(\"\"\"\n                    SELECT pid, \n                           application_name,\n                           state,\n                           query_start,\n                           now() - query_start as duration,\n                           left(query, 100) as query_preview\n                    FROM pg_stat_activity \n                    WHERE state = 'active' \n                    AND query NOT LIKE '%pg_stat_activity%'\n                    ORDER BY query_start;\n                \"\"\")\n                active_queries = cursor.fetchall()\n                if active_queries:\n                    for query in active_queries:\n                        self.stdout.write(f\"  PID {query[0]} ({query[1]}): 运行 {query[4]}\")\n                        self.stdout.write(f\"    查询: {query[5]}...\")\n                else:\n                    self.stdout.write(\"  当前无活跃查询\")\n                \n        except Exception as e:\n            self.stdout.write(self.style.ERROR(f\"监控失败: {e}\"))\n    \n    def show_connection_stats(self, db_connection):\n        \"\"\"显示连接统计信息\"\"\"\n        self.stdout.write(f\"\\n连接信息:\")\n        \n        # 基本连接信息\n        settings_dict = db_connection.settings_dict\n        self.stdout.write(f\"  数据库类型: {db_connection.vendor}\")\n        self.stdout.write(f\"  主机: {settings_dict.get('HOST', 'localhost')}\")\n        self.stdout.write(f\"  端口: {settings_dict.get('PORT', '5432')}\")\n        self.stdout.write(f\"  数据库名: {settings_dict.get('NAME', '')}\")\n        self.stdout.write(f\"  用户: {settings_dict.get('USER', '')}\")\n        \n        # 连接配置\n        conn_max_age = settings_dict.get('CONN_MAX_AGE', 0)\n        self.stdout.write(f\"  连接最大存活时间: {conn_max_age}秒\")\n        \n        # 查询统计\n        if hasattr(db_connection, 'queries'):\n            query_count = len(db_connection.queries)\n            if query_count > 0:\n                total_time = sum(float(q['time']) for q in db_connection.queries)\n                self.stdout.write(f\"  查询次数: {query_count}\")\n                self.stdout.write(f\"  总查询时间: {total_time:.4f}秒\")\n        \n        # 连接状态\n        is_connected = hasattr(db_connection, 'connection') and db_connection.connection is not None\n        self.stdout.write(f\"  连接状态: {'已连接' if is_connected else '未连接'}\")\n"
  },
  {
    "path": "backend/apps/common/management/commands/db_monitor.py",
    "content": "\"\"\"\n简化的数据库性能监控命令\n\n专注于可能导致查询延迟的关键指标\n\"\"\"\n\nimport time\nfrom django.core.management.base import BaseCommand\nfrom django.db import connections\n\n\nclass Command(BaseCommand):\n    \"\"\"简化的数据库性能监控\"\"\"\n    \n    help = '监控数据库性能关键指标'\n    \n    def add_arguments(self, parser):\n        parser.add_argument(\n            '--interval',\n            type=int,\n            default=5,\n            help='监控间隔（秒，默认: 5）',\n        )\n        parser.add_argument(\n            '--count',\n            type=int,\n            default=3,\n            help='监控次数（默认: 3）',\n        )\n    \n    def handle(self, *args, **options):\n        interval = options['interval']\n        count = options['count']\n        \n        self.stdout.write(\"🔍 数据库性能监控开始...\")\n        \n        for i in range(count):\n            if i > 0:\n                time.sleep(interval)\n            \n            self.stdout.write(f\"\\n=== 第 {i+1} 次监控 ===\")\n            self.monitor_key_metrics()\n    \n    def monitor_key_metrics(self):\n        \"\"\"监控关键性能指标\"\"\"\n        db_connection = connections['default']\n        \n        try:\n            with db_connection.cursor() as cursor:\n                # 1. 连接和活动状态\n                cursor.execute(\"\"\"\n                    SELECT \n                        count(*) as total_connections,\n                        count(*) FILTER (WHERE state = 'active') as active,\n                        count(*) FILTER (WHERE state = 'idle') as idle,\n                        count(*) FILTER (WHERE state = 'idle in transaction') as idle_in_trans,\n                        count(*) FILTER (WHERE wait_event_type IS NOT NULL) as waiting\n                    FROM pg_stat_activity;\n                \"\"\")\n                conn_stats = cursor.fetchone()\n                self.stdout.write(f\"连接: 总计{conn_stats[0]} | 活跃{conn_stats[1]} | 空闲{conn_stats[2]} | 事务中{conn_stats[3]} | 等待{conn_stats[4]}\")\n                \n                # 2. 锁等待情况\n                cursor.execute(\"\"\"\n                    SELECT \n                        count(*) as total_locks,\n                        count(*) FILTER (WHERE NOT granted) as waiting_locks\n                    FROM pg_locks;\n                \"\"\")\n                lock_stats = cursor.fetchone()\n                if lock_stats[1] > 0:\n                    self.stdout.write(self.style.WARNING(f\"🔒 锁: 总计{lock_stats[0]} | 等待{lock_stats[1]}\"))\n                else:\n                    self.stdout.write(f\"🔒 锁: 总计{lock_stats[0]} | 等待{lock_stats[1]}\")\n                \n                # 3. 长时间运行的查询\n                cursor.execute(\"\"\"\n                    SELECT \n                        pid,\n                        application_name,\n                        now() - query_start as duration,\n                        state,\n                        left(query, 60) as query_preview\n                    FROM pg_stat_activity \n                    WHERE state = 'active' \n                    AND query_start < now() - interval '1 second'\n                    AND query NOT LIKE '%pg_stat_activity%'\n                    ORDER BY query_start;\n                \"\"\")\n                long_queries = cursor.fetchall()\n                if long_queries:\n                    self.stdout.write(self.style.WARNING(f\"⏱️  长查询 ({len(long_queries)} 个):\"))\n                    for query in long_queries:\n                        self.stdout.write(f\"   PID {query[0]} ({query[1]}): {query[2]} - {query[4]}...\")\n                else:\n                    self.stdout.write(\"⏱️  长查询: 无\")\n                \n                # 4. 缓存命中率\n                cursor.execute(\"\"\"\n                    SELECT \n                        sum(heap_blks_hit) as cache_hits,\n                        sum(heap_blks_read) as disk_reads,\n                        CASE \n                            WHEN sum(heap_blks_hit) + sum(heap_blks_read) = 0 THEN 0\n                            ELSE round(sum(heap_blks_hit) * 100.0 / (sum(heap_blks_hit) + sum(heap_blks_read)), 2)\n                        END as hit_ratio\n                    FROM pg_statio_user_tables;\n                \"\"\")\n                cache_stats = cursor.fetchone()\n                if cache_stats[0] or cache_stats[1]:\n                    hit_ratio = cache_stats[2] or 0\n                    if hit_ratio < 95:\n                        self.stdout.write(self.style.WARNING(f\"💾 缓存命中率: {hit_ratio}% (缓存:{cache_stats[0]}, 磁盘:{cache_stats[1]})\"))\n                    else:\n                        self.stdout.write(f\"💾 缓存命中率: {hit_ratio}% (缓存:{cache_stats[0]}, 磁盘:{cache_stats[1]})\")\n                else:\n                    self.stdout.write(\"💾 缓存: 暂无统计数据\")\n                \n                # 5. 检查点活动（尝试获取，如果失败则跳过）\n                try:\n                    cursor.execute(\"SELECT * FROM pg_stat_bgwriter LIMIT 1;\")\n                    bgwriter_cols = [desc[0] for desc in cursor.description]\n                    \n                    if 'checkpoints_timed' in bgwriter_cols:\n                        cursor.execute(\"\"\"\n                            SELECT \n                                checkpoints_timed,\n                                checkpoints_req,\n                                checkpoint_write_time,\n                                checkpoint_sync_time\n                            FROM pg_stat_bgwriter;\n                        \"\"\")\n                        bgwriter = cursor.fetchone()\n                        total_checkpoints = bgwriter[0] + bgwriter[1]\n                        if bgwriter[2] > 10000 or bgwriter[3] > 5000:\n                            self.stdout.write(self.style.WARNING(f\"📝 检查点: 总计{total_checkpoints} | 写入{bgwriter[2]}ms | 同步{bgwriter[3]}ms\"))\n                        else:\n                            self.stdout.write(f\"📝 检查点: 总计{total_checkpoints} | 写入{bgwriter[2]}ms | 同步{bgwriter[3]}ms\")\n                    else:\n                        self.stdout.write(\"📝 检查点: 统计不可用\")\n                except Exception:\n                    self.stdout.write(\"📝 检查点: 统计不可用\")\n                \n                # 6. 数据库大小变化\n                cursor.execute(\"SELECT pg_database_size(current_database());\")\n                db_size = cursor.fetchone()[0]\n                db_size_mb = round(db_size / 1024 / 1024, 2)\n                self.stdout.write(f\"💿 数据库大小: {db_size_mb} MB\")\n                \n                # 7. 测试查询延迟\n                start_time = time.time()\n                cursor.execute(\"SELECT 1\")\n                cursor.fetchone()\n                query_latency = (time.time() - start_time) * 1000\n                \n                if query_latency > 500:\n                    self.stdout.write(self.style.ERROR(f\"⚡ 查询延迟: {query_latency:.2f}ms (高)\"))\n                elif query_latency > 200:\n                    self.stdout.write(self.style.WARNING(f\"⚡ 查询延迟: {query_latency:.2f}ms (中)\"))\n                else:\n                    self.stdout.write(f\"⚡ 查询延迟: {query_latency:.2f}ms (正常)\")\n                \n        except Exception as e:\n            self.stdout.write(self.style.ERROR(f\"监控失败: {e}\"))\n"
  },
  {
    "path": "backend/apps/common/management/commands/init_admin.py",
    "content": "\"\"\"\n初始化 admin 用户\n用法: python manage.py init_admin [--password <password>]\n\"\"\"\nimport os\nfrom django.core.management.base import BaseCommand\nfrom django.contrib.auth import get_user_model\n\nUser = get_user_model()\n\nDEFAULT_USERNAME = 'admin'\nDEFAULT_PASSWORD = 'admin'  # 默认密码，建议首次登录后修改\n\n\nclass Command(BaseCommand):\n    help = '初始化 admin 用户'\n\n    def add_arguments(self, parser):\n        parser.add_argument(\n            '--password',\n            type=str,\n            default=os.getenv('ADMIN_PASSWORD', DEFAULT_PASSWORD),\n            help='admin 用户密码 (默认: admin 或 ADMIN_PASSWORD 环境变量)'\n        )\n        parser.add_argument(\n            '--force',\n            action='store_true',\n            help='强制重置密码（如果用户已存在）'\n        )\n\n    def handle(self, *args, **options):\n        password = options['password']\n        force = options['force']\n\n        try:\n            user = User.objects.get(username=DEFAULT_USERNAME)\n            if force:\n                user.set_password(password)\n                user.save()\n                self.stdout.write(\n                    self.style.SUCCESS(f'✓ admin 用户密码已重置')\n                )\n            else:\n                self.stdout.write(\n                    self.style.WARNING(f'⚠ admin 用户已存在，跳过创建（使用 --force 重置密码）')\n                )\n        except User.DoesNotExist:\n            User.objects.create_superuser(\n                username=DEFAULT_USERNAME,\n                email='admin@localhost',\n                password=password\n            )\n            self.stdout.write(\n                self.style.SUCCESS(f'✓ admin 用户创建成功')\n            )\n            self.stdout.write(\n                self.style.WARNING(f'  用户名: {DEFAULT_USERNAME}')\n            )\n            self.stdout.write(\n                self.style.WARNING(f'  密码: {password}')\n            )\n            self.stdout.write(\n                self.style.WARNING(f'  ⚠ 请首次登录后修改密码!')\n            )\n"
  },
  {
    "path": "backend/apps/common/migrations/0001_initial.py",
    "content": "# Generated by Django 5.2.7 on 2026-01-06 00:55\n\nimport django.db.models.deletion\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    initial = True\n\n    dependencies = [\n        ('targets', '0001_initial'),\n    ]\n\n    operations = [\n        migrations.CreateModel(\n            name='BlacklistRule',\n            fields=[\n                ('id', models.AutoField(primary_key=True, serialize=False)),\n                ('pattern', models.CharField(help_text='规则模式，如 *.gov, 10.0.0.0/8, 192.168.1.1', max_length=255)),\n                ('rule_type', models.CharField(choices=[('domain', '域名'), ('ip', 'IP地址'), ('cidr', 'CIDR范围'), ('keyword', '关键词')], help_text='规则类型：domain, ip, cidr', max_length=20)),\n                ('scope', models.CharField(choices=[('global', '全局规则'), ('target', 'Target规则')], db_index=True, help_text='作用域：global 或 target', max_length=20)),\n                ('description', models.CharField(blank=True, default='', help_text='规则描述', max_length=500)),\n                ('created_at', models.DateTimeField(auto_now_add=True)),\n                ('target', models.ForeignKey(blank=True, help_text='关联的 Target（仅 scope=target 时有值）', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='blacklist_rules', to='targets.target')),\n            ],\n            options={\n                'db_table': 'blacklist_rule',\n                'ordering': ['-created_at'],\n                'indexes': [models.Index(fields=['scope', 'rule_type'], name='blacklist_r_scope_6ff77f_idx'), models.Index(fields=['target', 'scope'], name='blacklist_r_target__191441_idx')],\n                'constraints': [models.UniqueConstraint(fields=('pattern', 'scope', 'target'), name='unique_blacklist_rule')],\n            },\n        ),\n    ]\n"
  },
  {
    "path": "backend/apps/common/migrations/__init__.py",
    "content": ""
  },
  {
    "path": "backend/apps/common/models/__init__.py",
    "content": "\"\"\"Common models\"\"\"\nfrom apps.common.models.blacklist import BlacklistRule\n\n__all__ = ['BlacklistRule']\n"
  },
  {
    "path": "backend/apps/common/models/blacklist.py",
    "content": "\"\"\"黑名单规则模型\"\"\"\nfrom django.db import models\n\n\nclass BlacklistRule(models.Model):\n    \"\"\"黑名单规则模型\n    \n    用于存储黑名单过滤规则，支持域名、IP、CIDR 三种类型。\n    支持两层作用域：全局规则和 Target 级规则。\n    \"\"\"\n    \n    class RuleType(models.TextChoices):\n        DOMAIN = 'domain', '域名'\n        IP = 'ip', 'IP地址'\n        CIDR = 'cidr', 'CIDR范围'\n        KEYWORD = 'keyword', '关键词'\n    \n    class Scope(models.TextChoices):\n        GLOBAL = 'global', '全局规则'\n        TARGET = 'target', 'Target规则'\n    \n    id = models.AutoField(primary_key=True)\n    pattern = models.CharField(\n        max_length=255, \n        help_text='规则模式，如 *.gov, 10.0.0.0/8, 192.168.1.1'\n    )\n    rule_type = models.CharField(\n        max_length=20, \n        choices=RuleType.choices,\n        help_text='规则类型：domain, ip, cidr'\n    )\n    scope = models.CharField(\n        max_length=20, \n        choices=Scope.choices, \n        db_index=True,\n        help_text='作用域：global 或 target'\n    )\n    target = models.ForeignKey(\n        'targets.Target',\n        on_delete=models.CASCADE,\n        null=True, \n        blank=True,\n        related_name='blacklist_rules',\n        help_text='关联的 Target（仅 scope=target 时有值）'\n    )\n    description = models.CharField(\n        max_length=500, \n        blank=True, \n        default='', \n        help_text='规则描述'\n    )\n    created_at = models.DateTimeField(auto_now_add=True)\n    \n    class Meta:\n        db_table = 'blacklist_rule'\n        indexes = [\n            models.Index(fields=['scope', 'rule_type']),\n            models.Index(fields=['target', 'scope']),\n        ]\n        constraints = [\n            models.UniqueConstraint(\n                fields=['pattern', 'scope', 'target'],\n                name='unique_blacklist_rule'\n            ),\n        ]\n        ordering = ['-created_at']\n    \n    def __str__(self):\n        if self.scope == self.Scope.TARGET and self.target:\n            return f\"[{self.scope}:{self.target_id}] {self.pattern}\"\n        return f\"[{self.scope}] {self.pattern}\"\n"
  },
  {
    "path": "backend/apps/common/normalizer.py",
    "content": "import re\n\n# 预编译正则表达式，避免每次调用时重新编译\nIP_PATTERN = re.compile(r'^[\\d.:]+$')\n\n\ndef normalize_domain(domain: str) -> str:\n    \"\"\"\n    规范化域名\n    - 去除首尾空格\n    - 转换为小写\n    - 移除末尾的点\n    \n    Args:\n        domain: 原始域名\n        \n    Returns:\n        规范化后的域名\n        \n    Raises:\n        ValueError: 域名为空或只包含空格\n    \"\"\"\n    if not domain or not domain.strip():\n        raise ValueError(\"域名不能为空\")\n    \n    normalized = domain.strip().lower()\n    \n    # 移除末尾的点\n    if normalized.endswith('.'):\n        normalized = normalized.rstrip('.')\n    \n    return normalized\n\n\ndef normalize_ip(ip: str) -> str:\n    \"\"\"\n    规范化 IP 地址\n    - 去除首尾空格\n    - IP 地址不转小写（保持原样）\n    \n    Args:\n        ip: 原始 IP 地址\n        \n    Returns:\n        规范化后的 IP 地址\n        \n    Raises:\n        ValueError: IP 地址为空或只包含空格\n    \"\"\"\n    if not ip or not ip.strip():\n        raise ValueError(\"IP 地址不能为空\")\n    \n    return ip.strip()\n\n\ndef normalize_cidr(cidr: str) -> str:\n    \"\"\"\n    规范化 CIDR\n    - 去除首尾空格\n    - CIDR 不转小写（保持原样）\n    \n    Args:\n        cidr: 原始 CIDR\n        \n    Returns:\n        规范化后的 CIDR\n        \n    Raises:\n        ValueError: CIDR 为空或只包含空格\n    \"\"\"\n    if not cidr or not cidr.strip():\n        raise ValueError(\"CIDR 不能为空\")\n    \n    return cidr.strip()\n\n\ndef normalize_target(target: str) -> str:\n    \"\"\"\n    规范化目标名称（统一入口）\n    根据目标格式自动选择合适的规范化函数\n    \n    Args:\n        target: 原始目标名称\n        \n    Returns:\n        规范化后的目标名称\n        \n    Raises:\n        ValueError: 目标为空或只包含空格\n    \"\"\"\n    if not target or not target.strip():\n        raise ValueError(\"目标名称不能为空\")\n    \n    # 先去除首尾空格\n    trimmed = target.strip()\n    \n    # 如果包含 /，按 CIDR 处理\n    if '/' in trimmed:\n        return normalize_cidr(trimmed)\n    \n    # 如果是纯数字、点、冒号组成，按 IP 处理\n    if IP_PATTERN.match(trimmed):\n        return normalize_ip(trimmed)\n    \n    # 否则按域名处理\n    return normalize_domain(trimmed)\n"
  },
  {
    "path": "backend/apps/common/pagination.py",
    "content": "\"\"\"\n自定义分页器，匹配前端响应格式\n\"\"\"\nfrom rest_framework.pagination import PageNumberPagination\nfrom rest_framework.response import Response\n\n\nclass BasePagination(PageNumberPagination):\n    \"\"\"\n    基础分页器，统一返回格式\n    \n    响应格式：\n    {\n        \"results\": [...],\n        \"total\": 100,\n        \"page\": 1,\n        \"pageSize\": 10,\n        \"totalPages\": 10\n    }\n    \"\"\"\n    page_size = 10  # 默认每页 10 条\n    page_size_query_param = 'pageSize'  # 允许客户端自定义每页数量\n    max_page_size = 1000  # 最大每页数量限制\n    \n    def get_paginated_response(self, data):\n        \"\"\"自定义响应格式\"\"\"\n        return Response({\n            'results': data,  # 数据列表\n            'total': self.page.paginator.count,  # 总记录数\n            'page': self.page.number,  # 当前页码（从 1 开始）\n            'page_size': self.page.paginator.per_page,  # 实际使用的每页大小\n            'total_pages': self.page.paginator.num_pages  # 总页数\n        })\n\n"
  },
  {
    "path": "backend/apps/common/permissions.py",
    "content": "\"\"\"\n集中式权限管理\n\n实现三类端点的认证逻辑：\n1. 公开端点（无需认证）：登录、登出、获取当前用户状态\n2. Worker 端点（API Key 认证）：注册、配置、心跳、回调、资源同步\n3. 业务端点（Session 认证）：其他所有 API\n\"\"\"\n\nimport re\nimport logging\nfrom django.conf import settings\nfrom rest_framework.permissions import BasePermission\n\nlogger = logging.getLogger(__name__)\n\n# 公开端点白名单（无需任何认证）\nPUBLIC_ENDPOINTS = [\n    r'^/api/auth/login/$',\n    r'^/api/auth/logout/$',\n    r'^/api/auth/me/$',\n]\n\n# Worker API 端点（需要 API Key 认证）\n# 包括：注册、配置、心跳、回调、资源同步（字典下载）\nWORKER_ENDPOINTS = [\n    r'^/api/workers/register/$',\n    r'^/api/workers/config/$',\n    r'^/api/workers/\\d+/heartbeat/$',\n    r'^/api/callbacks/',\n    # 资源同步端点（Worker 需要下载字典文件）\n    r'^/api/wordlists/download/$',\n    # 注意：指纹导出 API 使用 Session 认证（前端用户导出用）\n    # Worker 通过数据库直接获取指纹数据，不需要 HTTP API\n]\n\n\nclass IsAuthenticatedOrPublic(BasePermission):\n    \"\"\"\n    自定义权限类：\n    - 白名单内的端点公开访问\n    - Worker 端点需要 API Key 认证\n    - 其他端点需要 Session 认证\n    \"\"\"\n    \n    def has_permission(self, request, view):\n        path = request.path\n        \n        # 检查是否在公开白名单内\n        for pattern in PUBLIC_ENDPOINTS:\n            if re.match(pattern, path):\n                return True\n        \n        # 检查是否是 Worker 端点\n        for pattern in WORKER_ENDPOINTS:\n            if re.match(pattern, path):\n                return self._check_worker_api_key(request)\n        \n        # 其他路径需要 Session 认证\n        return request.user and request.user.is_authenticated\n    \n    def _check_worker_api_key(self, request):\n        \"\"\"验证 Worker API Key\"\"\"\n        api_key = request.headers.get('X-Worker-API-Key')\n        expected_key = getattr(settings, 'WORKER_API_KEY', None)\n        \n        if not expected_key:\n            # 未配置 API Key 时，拒绝所有 Worker 请求\n            logger.warning(\"WORKER_API_KEY 未配置，拒绝 Worker 请求\")\n            return False\n        \n        if not api_key:\n            logger.warning(f\"Worker 请求缺少 X-Worker-API-Key Header: {request.path}\")\n            return False\n        \n        if api_key != expected_key:\n            logger.warning(f\"Worker API Key 无效: {request.path}\")\n            return False\n        \n        return True\n"
  },
  {
    "path": "backend/apps/common/prefect_django_setup.py",
    "content": "\"\"\"\nPrefect Flow Django 环境初始化模块\n\n在所有 Prefect Flow 文件开头导入此模块即可自动配置 Django 环境\n\"\"\"\n\nimport os\nimport sys\n\n\ndef setup_django_for_prefect():\n    \"\"\"\n    为 Prefect Flow 配置 Django 环境\n    \n    此函数会：\n    1. 添加项目根目录到 Python 路径\n    2. 设置 DJANGO_SETTINGS_MODULE 环境变量\n    3. 调用 django.setup() 初始化 Django\n    4. 关闭旧的数据库连接，确保使用新连接\n    \n    使用方式：\n        from apps.common.prefect_django_setup import setup_django_for_prefect\n        setup_django_for_prefect()\n    \"\"\"\n    # 获取项目根目录（backend 目录）\n    current_dir = os.path.dirname(os.path.abspath(__file__))\n    backend_dir = os.path.join(current_dir, '../..')\n    backend_dir = os.path.abspath(backend_dir)\n    \n    # 添加到 Python 路径\n    if backend_dir not in sys.path:\n        sys.path.insert(0, backend_dir)\n    \n    # 配置 Django\n    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')\n    \n    # 初始化 Django\n    import django\n    django.setup()\n    \n    # 关闭所有旧的数据库连接，确保 Worker 进程使用新连接\n    # 解决 \"server closed the connection unexpectedly\" 问题\n    from django.db import connections\n    connections.close_all()\n\n\ndef close_old_db_connections():\n    \"\"\"\n    关闭旧的数据库连接\n    \n    在长时间运行的任务中调用此函数，可以确保使用有效的数据库连接。\n    适用于：\n    - Flow 开始前\n    - Task 开始前\n    - 长时间空闲后恢复操作前\n    \"\"\"\n    from django.db import connections\n    connections.close_all()\n\n\n# 自动执行初始化（导入即生效）\nsetup_django_for_prefect()\n"
  },
  {
    "path": "backend/apps/common/response_helpers.py",
    "content": "\"\"\"\n标准化 API 响应辅助函数\n\n遵循行业标准（RFC 9457 Problem Details）和大厂实践（Google、Stripe、GitHub）：\n- 成功响应只包含数据，不包含 message 字段\n- 错误响应使用机器可读的错误码，前端映射到 i18n 消息\n\"\"\"\nfrom typing import Any, Dict, List, Optional, Union\n\nfrom rest_framework import status\nfrom rest_framework.response import Response\n\n\ndef success_response(\n    data: Optional[Union[Dict[str, Any], List[Any]]] = None,\n    status_code: int = status.HTTP_200_OK\n) -> Response:\n    \"\"\"\n    标准化成功响应\n    \n    直接返回数据，不做包装，符合 Stripe/GitHub 等大厂标准。\n    \n    Args:\n        data: 响应数据（dict 或 list）\n        status_code: HTTP 状态码，默认 200\n    \n    Returns:\n        Response: DRF Response 对象\n    \n    Examples:\n        # 单个资源\n        >>> success_response(data={'id': 1, 'name': 'Test'})\n        {'id': 1, 'name': 'Test'}\n        \n        # 操作结果\n        >>> success_response(data={'count': 3, 'scans': [...]})\n        {'count': 3, 'scans': [...]}\n        \n        # 创建资源\n        >>> success_response(data={'id': 1}, status_code=201)\n    \"\"\"\n    # 注意：不能使用 data or {}，因为空列表 [] 会被转换为 {}\n    if data is None:\n        data = {}\n    return Response(data, status=status_code)\n\n\ndef error_response(\n    code: str,\n    message: Optional[str] = None,\n    details: Optional[List[Dict[str, Any]]] = None,\n    status_code: int = status.HTTP_400_BAD_REQUEST\n) -> Response:\n    \"\"\"\n    标准化错误响应\n    \n    Args:\n        code: 错误码（如 'VALIDATION_ERROR', 'NOT_FOUND'）\n              格式：大写字母和下划线组成\n        message: 开发者调试信息（非用户显示）\n        details: 详细错误信息（如字段级验证错误）\n        status_code: HTTP 状态码，默认 400\n    \n    Returns:\n        Response: DRF Response 对象\n    \n    Examples:\n        # 简单错误\n        >>> error_response(code='NOT_FOUND', status_code=404)\n        {'error': {'code': 'NOT_FOUND'}}\n        \n        # 带调试信息\n        >>> error_response(\n        ...     code='VALIDATION_ERROR',\n        ...     message='Invalid input data',\n        ...     details=[{'field': 'name', 'message': 'Required'}]\n        ... )\n        {'error': {'code': 'VALIDATION_ERROR', 'message': '...', 'details': [...]}}\n    \"\"\"\n    error_body: Dict[str, Any] = {'code': code}\n    \n    if message:\n        error_body['message'] = message\n    \n    if details:\n        error_body['details'] = details\n    \n    return Response({'error': error_body}, status=status_code)\n"
  },
  {
    "path": "backend/apps/common/serializers/__init__.py",
    "content": "\"\"\"Common serializers\"\"\"\nfrom .blacklist_serializers import (\n    BlacklistRuleSerializer,\n    GlobalBlacklistRuleSerializer,\n    TargetBlacklistRuleSerializer,\n)\n\n__all__ = [\n    'BlacklistRuleSerializer',\n    'GlobalBlacklistRuleSerializer',\n    'TargetBlacklistRuleSerializer',\n]\n"
  },
  {
    "path": "backend/apps/common/serializers/blacklist_serializers.py",
    "content": "\"\"\"黑名单规则序列化器\"\"\"\nfrom rest_framework import serializers\n\nfrom apps.common.models import BlacklistRule\nfrom apps.common.utils import detect_rule_type\n\n\nclass BlacklistRuleSerializer(serializers.ModelSerializer):\n    \"\"\"黑名单规则序列化器\"\"\"\n    \n    class Meta:\n        model = BlacklistRule\n        fields = [\n            'id',\n            'pattern',\n            'rule_type',\n            'scope',\n            'target',\n            'description',\n            'created_at',\n        ]\n        read_only_fields = ['id', 'rule_type', 'created_at']\n    \n    def validate_pattern(self, value):\n        \"\"\"验证规则模式\"\"\"\n        if not value or not value.strip():\n            raise serializers.ValidationError(\"规则模式不能为空\")\n        return value.strip()\n    \n    def create(self, validated_data):\n        \"\"\"创建规则时自动识别规则类型\"\"\"\n        pattern = validated_data.get('pattern', '')\n        validated_data['rule_type'] = detect_rule_type(pattern)\n        return super().create(validated_data)\n    \n    def update(self, instance, validated_data):\n        \"\"\"更新规则时重新识别规则类型\"\"\"\n        if 'pattern' in validated_data:\n            pattern = validated_data['pattern']\n            validated_data['rule_type'] = detect_rule_type(pattern)\n        return super().update(instance, validated_data)\n\n\nclass GlobalBlacklistRuleSerializer(BlacklistRuleSerializer):\n    \"\"\"全局黑名单规则序列化器\"\"\"\n    \n    class Meta(BlacklistRuleSerializer.Meta):\n        fields = ['id', 'pattern', 'rule_type', 'description', 'created_at']\n        read_only_fields = ['id', 'rule_type', 'created_at']\n    \n    def create(self, validated_data):\n        \"\"\"创建全局规则\"\"\"\n        validated_data['scope'] = BlacklistRule.Scope.GLOBAL\n        validated_data['target'] = None\n        return super().create(validated_data)\n\n\nclass TargetBlacklistRuleSerializer(BlacklistRuleSerializer):\n    \"\"\"Target 黑名单规则序列化器\"\"\"\n    \n    class Meta(BlacklistRuleSerializer.Meta):\n        fields = ['id', 'pattern', 'rule_type', 'description', 'created_at']\n        read_only_fields = ['id', 'rule_type', 'created_at']\n    \n    def create(self, validated_data):\n        \"\"\"创建 Target 规则（target_id 由 view 设置）\"\"\"\n        validated_data['scope'] = BlacklistRule.Scope.TARGET\n        return super().create(validated_data)\n"
  },
  {
    "path": "backend/apps/common/services/__init__.py",
    "content": "\"\"\"\n通用服务模块\n\n提供系统级别的公共服务，包括：\n- SystemLogService: 系统日志读取服务\n- BlacklistService: 黑名单过滤服务\n\n注意：FilterService 已移至 apps.common.utils.filter_utils\n推荐使用: from apps.common.utils.filter_utils import apply_filters\n\"\"\"\n\nfrom .system_log_service import SystemLogService\nfrom .blacklist_service import BlacklistService\n\n__all__ = [\n    'SystemLogService',\n    'BlacklistService',\n]\n"
  },
  {
    "path": "backend/apps/common/services/blacklist_service.py",
    "content": "\"\"\"\n黑名单规则管理服务\n\n负责黑名单规则的 CRUD 操作（数据库层面）。\n过滤逻辑请使用 apps.common.utils.BlacklistFilter。\n\n架构说明：\n- Model: BlacklistRule (apps.common.models.blacklist)\n- Service: BlacklistService (本文件) - 规则 CRUD\n- Utils: BlacklistFilter (apps.common.utils.blacklist_filter) - 过滤逻辑\n- View: GlobalBlacklistView, TargetViewSet.blacklist\n\"\"\"\n\nimport logging\nfrom typing import List, Dict, Any, Optional\n\nfrom django.db.models import QuerySet\n\nfrom apps.common.utils import detect_rule_type\n\nlogger = logging.getLogger(__name__)\n\n\ndef _normalize_patterns(patterns: List[str]) -> List[str]:\n    \"\"\"\n    规范化规则列表：去重 + 过滤空行\n    \n    Args:\n        patterns: 原始规则列表\n        \n    Returns:\n        List[str]: 去重后的规则列表（保持顺序）\n    \"\"\"\n    return list(dict.fromkeys(filter(None, (p.strip() for p in patterns))))\n\n\nclass BlacklistService:\n    \"\"\"\n    黑名单规则管理服务\n    \n    只负责规则的 CRUD 操作，不包含过滤逻辑。\n    过滤逻辑请使用 BlacklistFilter 工具类。\n    \"\"\"\n    \n    def get_global_rules(self) -> QuerySet:\n        \"\"\"\n        获取全局黑名单规则列表\n        \n        Returns:\n            QuerySet: 全局规则查询集\n        \"\"\"\n        from apps.common.models import BlacklistRule\n        return BlacklistRule.objects.filter(scope=BlacklistRule.Scope.GLOBAL)\n    \n    def get_target_rules(self, target_id: int) -> QuerySet:\n        \"\"\"\n        获取 Target 级黑名单规则列表\n        \n        Args:\n            target_id: Target ID\n            \n        Returns:\n            QuerySet: Target 级规则查询集\n        \"\"\"\n        from apps.common.models import BlacklistRule\n        return BlacklistRule.objects.filter(\n            scope=BlacklistRule.Scope.TARGET,\n            target_id=target_id\n        )\n    \n    def get_rules(self, target_id: Optional[int] = None) -> List:\n        \"\"\"\n        获取黑名单规则（全局 + Target 级）\n        \n        Args:\n            target_id: Target ID，用于加载 Target 级规则\n            \n        Returns:\n            List[BlacklistRule]: 规则列表\n        \"\"\"\n        from apps.common.models import BlacklistRule\n        \n        # 加载全局规则\n        rules = list(BlacklistRule.objects.filter(scope=BlacklistRule.Scope.GLOBAL))\n        \n        # 加载 Target 级规则\n        if target_id:\n            target_rules = BlacklistRule.objects.filter(\n                scope=BlacklistRule.Scope.TARGET,\n                target_id=target_id\n            )\n            rules.extend(target_rules)\n        \n        return rules\n    \n    def replace_global_rules(self, patterns: List[str]) -> Dict[str, Any]:\n        \"\"\"\n        全量替换全局黑名单规则（PUT 语义）\n        \n        Args:\n            patterns: 新的规则模式列表\n            \n        Returns:\n            Dict: {'count': int} 最终规则数量\n        \"\"\"\n        from apps.common.models import BlacklistRule\n        \n        count = self._replace_rules(\n            patterns=patterns,\n            scope=BlacklistRule.Scope.GLOBAL,\n            target=None\n        )\n        \n        logger.info(\"全量替换全局黑名单规则: %d 条\", count)\n        return {'count': count}\n    \n    def replace_target_rules(self, target, patterns: List[str]) -> Dict[str, Any]:\n        \"\"\"\n        全量替换 Target 级黑名单规则（PUT 语义）\n        \n        Args:\n            target: Target 对象\n            patterns: 新的规则模式列表\n            \n        Returns:\n            Dict: {'count': int} 最终规则数量\n        \"\"\"\n        from apps.common.models import BlacklistRule\n        \n        count = self._replace_rules(\n            patterns=patterns,\n            scope=BlacklistRule.Scope.TARGET,\n            target=target\n        )\n        \n        logger.info(\"全量替换 Target 黑名单规则: %d 条 (Target: %s)\", count, target.name)\n        return {'count': count}\n    \n    def _replace_rules(self, patterns: List[str], scope: str, target=None) -> int:\n        \"\"\"\n        内部方法：全量替换规则\n        \n        Args:\n            patterns: 规则模式列表\n            scope: 规则作用域 (GLOBAL/TARGET)\n            target: Target 对象（仅 TARGET 作用域需要）\n            \n        Returns:\n            int: 最终规则数量\n        \"\"\"\n        from apps.common.models import BlacklistRule\n        from django.db import transaction\n        \n        patterns = _normalize_patterns(patterns)\n        \n        with transaction.atomic():\n            # 1. 删除旧规则\n            delete_filter = {'scope': scope}\n            if target:\n                delete_filter['target'] = target\n            BlacklistRule.objects.filter(**delete_filter).delete()\n            \n            # 2. 创建新规则\n            if patterns:\n                rules = [\n                    BlacklistRule(\n                        pattern=pattern,\n                        rule_type=detect_rule_type(pattern),\n                        scope=scope,\n                        target=target\n                    )\n                    for pattern in patterns\n                ]\n                BlacklistRule.objects.bulk_create(rules)\n        \n        return len(patterns)\n"
  },
  {
    "path": "backend/apps/common/services/system_log_service.py",
    "content": "\"\"\"\n系统日志服务模块\n\n提供系统日志的读取功能，支持：\n- 从日志目录读取日志文件\n- 限制返回行数，防止内存溢出\n- 列出可用的日志文件\n\"\"\"\n\nimport fnmatch\nimport logging\nimport os\nimport subprocess\nfrom datetime import datetime, timezone\nfrom typing import TypedDict\n\n\nlogger = logging.getLogger(__name__)\n\n\nclass LogFileInfo(TypedDict):\n    \"\"\"日志文件信息\"\"\"\n    filename: str\n    category: str  # 'system' | 'error' | 'performance' | 'container'\n    size: int\n    modifiedAt: str  # ISO 8601 格式\n\n\nclass SystemLogService:\n    \"\"\"\n    系统日志服务类\n    \n    负责读取系统日志文件，支持从容器内路径或宿主机挂载路径读取日志。\n    \"\"\"\n    \n    # 日志文件分类规则\n    CATEGORY_RULES = [\n        ('xingrin.log', 'system'),\n        ('xingrin_error.log', 'error'),\n        ('performance.log', 'performance'),\n        ('container_*.log', 'container'),\n    ]\n    \n    def __init__(self):\n        # 日志目录路径\n        self.log_dir = \"/opt/xingrin/logs\"\n        self.default_file = \"xingrin.log\"  # 默认日志文件\n        self.default_lines = 200           # 默认返回行数\n        self.max_lines = 10000             # 最大返回行数限制\n        self.timeout_seconds = 3           # tail 命令超时时间\n\n    def _categorize_file(self, filename: str) -> str | None:\n        \"\"\"\n        根据文件名判断日志分类\n        \n        Returns:\n            分类名称，如果不是日志文件则返回 None\n        \"\"\"\n        for pattern, category in self.CATEGORY_RULES:\n            if fnmatch.fnmatch(filename, pattern):\n                return category\n        return None\n\n    def _validate_filename(self, filename: str) -> bool:\n        \"\"\"\n        验证文件名是否合法（防止路径遍历攻击）\n        \n        Args:\n            filename: 要验证的文件名\n            \n        Returns:\n            bool: 文件名是否合法\n        \"\"\"\n        # 不允许包含路径分隔符\n        if '/' in filename or '\\\\' in filename:\n            return False\n        # 不允许 .. 路径遍历\n        if '..' in filename:\n            return False\n        # 必须是已知的日志文件类型\n        return self._categorize_file(filename) is not None\n\n    def get_log_files(self) -> list[LogFileInfo]:\n        \"\"\"\n        获取所有可用的日志文件列表\n        \n        Returns:\n            日志文件信息列表，按分类和文件名排序\n        \"\"\"\n        files: list[LogFileInfo] = []\n        \n        if not os.path.isdir(self.log_dir):\n            logger.warning(\"日志目录不存在: %s\", self.log_dir)\n            return files\n        \n        for filename in os.listdir(self.log_dir):\n            filepath = os.path.join(self.log_dir, filename)\n            \n            # 只处理文件，跳过目录\n            if not os.path.isfile(filepath):\n                continue\n            \n            # 判断分类\n            category = self._categorize_file(filename)\n            if category is None:\n                continue\n            \n            # 获取文件信息\n            try:\n                stat = os.stat(filepath)\n                modified_at = datetime.fromtimestamp(\n                    stat.st_mtime, tz=timezone.utc\n                ).isoformat()\n                \n                files.append({\n                    'filename': filename,\n                    'category': category,\n                    'size': stat.st_size,\n                    'modifiedAt': modified_at,\n                })\n            except OSError as e:\n                logger.warning(\"获取文件信息失败 %s: %s\", filepath, e)\n                continue\n        \n        # 排序：按分类优先级（system > error > performance > container），然后按文件名\n        category_order = {'system': 0, 'error': 1, 'performance': 2, 'container': 3}\n        files.sort(key=lambda f: (category_order.get(f['category'], 99), f['filename']))\n        \n        return files\n\n    def get_logs_content(self, filename: str | None = None, lines: int | None = None) -> str:\n        \"\"\"\n        获取系统日志内容\n        \n        Args:\n            filename: 日志文件名，默认为 xingrin.log\n            lines: 返回的日志行数，默认 200 行，最大 10000 行\n            \n        Returns:\n            str: 日志内容，每行以换行符分隔，保持原始顺序\n            \n        Raises:\n            ValueError: 文件名不合法\n            FileNotFoundError: 日志文件不存在\n        \"\"\"\n        # 文件名处理\n        if filename is None:\n            filename = self.default_file\n        \n        # 验证文件名\n        if not self._validate_filename(filename):\n            raise ValueError(f\"无效的文件名: {filename}\")\n        \n        # 构建完整路径\n        log_file = os.path.join(self.log_dir, filename)\n        \n        # 检查文件是否存在\n        if not os.path.isfile(log_file):\n            raise FileNotFoundError(f\"日志文件不存在: {filename}\")\n        \n        # 参数校验和默认值处理\n        if lines is None:\n            lines = self.default_lines\n\n        lines = int(lines)\n        if lines < 1:\n            lines = 1\n        if lines > self.max_lines:\n            lines = self.max_lines\n\n        # 使用 tail 命令读取日志文件末尾内容\n        cmd = [\"tail\", \"-n\", str(lines), log_file]\n\n        result = subprocess.run(\n            cmd,\n            capture_output=True,\n            text=True,\n            timeout=self.timeout_seconds,\n            check=False,\n        )\n\n        if result.returncode != 0:\n            logger.warning(\n                \"tail command failed: returncode=%s stderr=%s\",\n                result.returncode,\n                (result.stderr or \"\").strip(),\n            )\n\n        # 直接返回原始内容，保持文件中的顺序\n        return result.stdout or \"\"\n"
  },
  {
    "path": "backend/apps/common/signals.py",
    "content": "\"\"\"通用信号定义\n\n定义项目中使用的自定义信号，用于解耦各模块之间的通信。\n\n使用方式：\n1. 发布信号：signal.send(sender=SomeClass, **kwargs)\n2. 接收信号：@receiver(signal) def handler(sender, **kwargs): ...\n\"\"\"\n\nfrom django.dispatch import Signal\n\n\n# ==================== 漏洞相关信号 ====================\n\n# 漏洞保存完成信号\n# 参数：\n#   - items: List[VulnerabilitySnapshotDTO] 保存的漏洞列表\n#   - scan_id: int 扫描任务ID\n#   - target_id: int 目标ID\nvulnerabilities_saved = Signal()\n\n\n# ==================== Worker 相关信号 ====================\n\n# Worker 删除失败信号（只在失败时发送）\n# 参数：\n#   - worker_name: str Worker 名称\n#   - message: str 失败原因\nworker_delete_failed = Signal()\n\n# 所有 Worker 高负载信号\n# 参数：\n#   - worker_name: str 被选中的 Worker 名称\n#   - cpu: float CPU 使用率\n#   - mem: float 内存使用率\nall_workers_high_load = Signal()\n"
  },
  {
    "path": "backend/apps/common/urls.py",
    "content": "\"\"\"\n通用模块 URL 配置\n\n路由说明：\n- /api/health/       健康检查接口（无需认证）\n- /api/auth/*        认证相关接口（登录、登出、用户信息）\n- /api/system/*      系统管理接口（日志查看等）\n- /api/blacklist/*   黑名单管理接口\n\"\"\"\n\nfrom django.urls import path\n\nfrom .views import (\n    LoginView, LogoutView, MeView, ChangePasswordView,\n    SystemLogsView, SystemLogFilesView, HealthCheckView,\n    GlobalBlacklistView,\n    VersionView, CheckUpdateView,\n)\n\nurlpatterns = [\n    # 健康检查（无需认证）\n    path('health/', HealthCheckView.as_view(), name='health-check'),\n    \n    # 认证相关\n    path('auth/login/', LoginView.as_view(), name='auth-login'),\n    path('auth/logout/', LogoutView.as_view(), name='auth-logout'),\n    path('auth/me/', MeView.as_view(), name='auth-me'),\n    path('auth/change-password/', ChangePasswordView.as_view(), name='auth-change-password'),\n    \n    # 系统管理\n    path('system/logs/', SystemLogsView.as_view(), name='system-logs'),\n    path('system/logs/files/', SystemLogFilesView.as_view(), name='system-log-files'),\n    path('system/version/', VersionView.as_view(), name='system-version'),\n    path('system/check-update/', CheckUpdateView.as_view(), name='system-check-update'),\n    \n    # 黑名单管理（PUT 全量替换模式）\n    path('blacklist/rules/', GlobalBlacklistView.as_view(), name='blacklist-rules'),\n]\n"
  },
  {
    "path": "backend/apps/common/utils/__init__.py",
    "content": "\"\"\"Common utilities\"\"\"\n\nfrom .dedup import deduplicate_for_bulk, get_unique_fields\nfrom .hash import (\n    calc_file_sha256,\n    calc_stream_sha256,\n    safe_calc_file_sha256,\n    is_file_hash_match,\n)\nfrom .csv_utils import (\n    generate_csv_rows,\n    format_list_field,\n    format_datetime,\n    create_csv_export_response,\n    UTF8_BOM,\n)\nfrom .blacklist_filter import (\n    BlacklistFilter,\n    detect_rule_type,\n    extract_host,\n)\n\n__all__ = [\n    'deduplicate_for_bulk',\n    'get_unique_fields',\n    'calc_file_sha256',\n    'calc_stream_sha256',\n    'safe_calc_file_sha256',\n    'is_file_hash_match',\n    'generate_csv_rows',\n    'format_list_field',\n    'format_datetime',\n    'create_csv_export_response',\n    'UTF8_BOM',\n    'BlacklistFilter',\n    'detect_rule_type',\n    'extract_host',\n]\n"
  },
  {
    "path": "backend/apps/common/utils/blacklist_filter.py",
    "content": "\"\"\"\n黑名单过滤工具\n\n提供域名、IP、CIDR、关键词的黑名单匹配功能。\n纯工具类，不涉及数据库操作。\n\n支持的规则类型：\n    1. 域名精确匹配: example.com\n       - 规则: example.com\n       - 匹配: example.com\n       - 不匹配: sub.example.com, other.com\n    \n    2. 域名后缀匹配: *.example.com\n       - 规则: *.example.com\n       - 匹配: sub.example.com, a.b.example.com, example.com\n       - 不匹配: other.com, example.com.cn\n    \n    3. 关键词匹配: *cdn*\n       - 规则: *cdn*\n       - 匹配: cdn.example.com, a.cdn.b.com, mycdn123.com\n       - 不匹配: example.com (不包含 cdn)\n    \n    4. IP 精确匹配: 192.168.1.1\n       - 规则: 192.168.1.1\n       - 匹配: 192.168.1.1\n       - 不匹配: 192.168.1.2\n    \n    5. CIDR 范围匹配: 192.168.0.0/24\n       - 规则: 192.168.0.0/24\n       - 匹配: 192.168.0.1, 192.168.0.255\n       - 不匹配: 192.168.1.1\n\n使用方式：\n    from apps.common.utils import BlacklistFilter\n    \n    # 创建过滤器（传入规则列表）\n    rules = BlacklistRule.objects.filter(...)\n    filter = BlacklistFilter(rules)\n    \n    # 检查单个目标\n    if filter.is_allowed('http://example.com'):\n        process(url)\n    \n    # 流式处理\n    for url in urls:\n        if filter.is_allowed(url):\n            process(url)\n\"\"\"\n\nimport ipaddress\nimport logging\nfrom typing import List, Optional\nfrom urllib.parse import urlparse\n\nfrom apps.common.validators import is_valid_ip, validate_cidr\n\nlogger = logging.getLogger(__name__)\n\n\ndef detect_rule_type(pattern: str) -> str:\n    \"\"\"\n    自动识别规则类型\n    \n    支持的模式：\n    - 域名精确匹配: example.com\n    - 域名后缀匹配: *.example.com\n    - 关键词匹配: *cdn* (匹配包含 cdn 的域名)\n    - IP 精确匹配: 192.168.1.1\n    - CIDR 范围: 192.168.0.0/24\n    \n    Args:\n        pattern: 规则模式字符串\n        \n    Returns:\n        str: 规则类型 ('domain', 'ip', 'cidr', 'keyword')\n    \"\"\"\n    if not pattern:\n        return 'domain'\n    \n    pattern = pattern.strip()\n    \n    # 检查关键词模式: *keyword* (前后都有星号，中间无点)\n    if pattern.startswith('*') and pattern.endswith('*') and len(pattern) > 2:\n        keyword = pattern[1:-1]\n        # 关键词中不能有点（否则可能是域名模式）\n        if '.' not in keyword:\n            return 'keyword'\n    \n    # 检查 CIDR（包含 /）\n    if '/' in pattern:\n        try:\n            validate_cidr(pattern)\n            return 'cidr'\n        except ValueError:\n            pass\n    \n    # 检查 IP（去掉通配符前缀后验证）\n    clean_pattern = pattern.lstrip('*').lstrip('.')\n    if is_valid_ip(clean_pattern):\n        return 'ip'\n    \n    # 默认为域名\n    return 'domain'\n\n\ndef extract_host(target: str) -> str:\n    \"\"\"\n    从目标字符串中提取主机名\n    \n    支持：\n    - 纯域名：example.com\n    - 纯 IP：192.168.1.1\n    - URL：http://example.com/path\n    \n    Args:\n        target: 目标字符串\n        \n    Returns:\n        str: 提取的主机名\n    \"\"\"\n    if not target:\n        return ''\n    \n    target = target.strip()\n    \n    # 如果是 URL，提取 hostname\n    if '://' in target:\n        try:\n            parsed = urlparse(target)\n            return parsed.hostname or target\n        except Exception:\n            return target\n    \n    return target\n\n\nclass BlacklistFilter:\n    \"\"\"\n    黑名单过滤器\n    \n    预编译规则，提供高效的匹配功能。\n    \"\"\"\n    \n    def __init__(self, rules: List):\n        \"\"\"\n        初始化过滤器\n        \n        Args:\n            rules: BlacklistRule 对象列表\n        \"\"\"\n        from apps.common.models import BlacklistRule\n        \n        # 预解析：按类型分类 + CIDR 预编译\n        self._domain_rules = []  # (pattern, is_wildcard, suffix)\n        self._ip_rules = set()   # 精确 IP 用 set，O(1) 查找\n        self._cidr_rules = []    # (pattern, network_obj)\n        self._keyword_rules = [] # 关键词列表（小写）\n        \n        # 去重：跨 scope 可能有重复规则\n        seen_patterns = set()\n        \n        for rule in rules:\n            if rule.pattern in seen_patterns:\n                continue\n            seen_patterns.add(rule.pattern)\n            if rule.rule_type == BlacklistRule.RuleType.DOMAIN:\n                pattern = rule.pattern.lower()\n                if pattern.startswith('*.'):\n                    self._domain_rules.append((pattern, True, pattern[1:]))\n                else:\n                    self._domain_rules.append((pattern, False, None))\n            elif rule.rule_type == BlacklistRule.RuleType.IP:\n                self._ip_rules.add(rule.pattern)\n            elif rule.rule_type == BlacklistRule.RuleType.CIDR:\n                try:\n                    network = ipaddress.ip_network(rule.pattern, strict=False)\n                    self._cidr_rules.append((rule.pattern, network))\n                except ValueError:\n                    pass\n            elif rule.rule_type == BlacklistRule.RuleType.KEYWORD:\n                # *cdn* -> cdn\n                keyword = rule.pattern[1:-1].lower()\n                self._keyword_rules.append(keyword)\n    \n    def is_allowed(self, target: str) -> bool:\n        \"\"\"\n        检查目标是否通过过滤\n        \n        Args:\n            target: 要检查的目标（域名/IP/URL）\n            \n        Returns:\n            bool: True 表示通过（不在黑名单），False 表示被过滤\n        \"\"\"\n        if not target:\n            return True\n        \n        host = extract_host(target)\n        if not host:\n            return True\n        \n        # 先判断输入类型，再走对应分支\n        if is_valid_ip(host):\n            return self._check_ip_rules(host)\n        else:\n            return self._check_domain_rules(host)\n    \n    def _check_domain_rules(self, host: str) -> bool:\n        \"\"\"检查域名规则（精确匹配 + 后缀匹配 + 关键词匹配）\"\"\"\n        host_lower = host.lower()\n        \n        # 1. 域名规则（精确 + 后缀）\n        for pattern, is_wildcard, suffix in self._domain_rules:\n            if is_wildcard:\n                if host_lower.endswith(suffix) or host_lower == pattern[2:]:\n                    return False\n            else:\n                if host_lower == pattern:\n                    return False\n        \n        # 2. 关键词匹配（字符串 in 操作，O(n*m)）\n        for keyword in self._keyword_rules:\n            if keyword in host_lower:\n                return False\n        \n        return True\n    \n    def _check_ip_rules(self, host: str) -> bool:\n        \"\"\"检查 IP 规则（精确匹配 + CIDR）\"\"\"\n        # 1. IP 精确匹配（O(1)）\n        if host in self._ip_rules:\n            return False\n        \n        # 2. CIDR 匹配\n        if self._cidr_rules:\n            try:\n                ip_obj = ipaddress.ip_address(host)\n                for _, network in self._cidr_rules:\n                    if ip_obj in network:\n                        return False\n            except ValueError:\n                pass\n        \n        return True\n    \n\n"
  },
  {
    "path": "backend/apps/common/utils/csv_utils.py",
    "content": "\"\"\"CSV 导出工具模块\n\n提供流式 CSV 生成功能，支持：\n- UTF-8 BOM（Excel 兼容）\n- RFC 4180 规范转义\n- 流式生成（内存友好）\n- 带 Content-Length 的文件响应（支持浏览器下载进度显示）\n\"\"\"\n\nimport csv\nimport io\nimport os\nimport tempfile\nimport logging\nfrom datetime import datetime\nfrom typing import Iterator, Dict, Any, List, Callable, Optional\n\nfrom django.http import FileResponse, StreamingHttpResponse\n\nlogger = logging.getLogger(__name__)\n\n# UTF-8 BOM，确保 Excel 正确识别编码\nUTF8_BOM = '\\ufeff'\n\n\ndef generate_csv_rows(\n    data_iterator: Iterator[Dict[str, Any]],\n    headers: List[str],\n    field_formatters: Optional[Dict[str, Callable]] = None\n) -> Iterator[str]:\n    \"\"\"\n    流式生成 CSV 行\n    \n    Args:\n        data_iterator: 数据迭代器，每个元素是一个字典\n        headers: CSV 表头列表\n        field_formatters: 字段格式化函数字典，key 为字段名，value 为格式化函数\n    \n    Yields:\n        CSV 行字符串（包含换行符）\n    \n    Example:\n        >>> data = [{'ip': '192.168.1.1', 'hosts': ['a.com', 'b.com']}]\n        >>> headers = ['ip', 'hosts']\n        >>> formatters = {'hosts': format_list_field}\n        >>> for row in generate_csv_rows(iter(data), headers, formatters):\n        ...     print(row, end='')\n    \"\"\"\n    # 输出 BOM + 表头\n    output = io.StringIO()\n    writer = csv.writer(output, quoting=csv.QUOTE_MINIMAL)\n    writer.writerow(headers)\n    yield UTF8_BOM + output.getvalue()\n    \n    # 输出数据行\n    for row_data in data_iterator:\n        output = io.StringIO()\n        writer = csv.writer(output, quoting=csv.QUOTE_MINIMAL)\n        \n        row = []\n        for header in headers:\n            value = row_data.get(header, '')\n            if field_formatters and header in field_formatters:\n                value = field_formatters[header](value)\n            row.append(value if value is not None else '')\n        \n        writer.writerow(row)\n        yield output.getvalue()\n\n\ndef format_list_field(values: List, separator: str = ';') -> str:\n    \"\"\"\n    将列表字段格式化为分号分隔的字符串\n    \n    Args:\n        values: 值列表\n        separator: 分隔符，默认为分号\n    \n    Returns:\n        分隔符连接的字符串\n    \n    Example:\n        >>> format_list_field(['a.com', 'b.com'])\n        'a.com;b.com'\n        >>> format_list_field([80, 443])\n        '80;443'\n        >>> format_list_field([])\n        ''\n        >>> format_list_field(None)\n        ''\n    \"\"\"\n    if not values:\n        return ''\n    return separator.join(str(v) for v in values)\n\n\ndef format_datetime(dt: Optional[datetime]) -> str:\n    \"\"\"\n    格式化日期时间为字符串（转换为本地时区）\n    \n    Args:\n        dt: datetime 对象或 None\n    \n    Returns:\n        格式化的日期时间字符串，格式为 YYYY-MM-DD HH:MM:SS（本地时区）\n    \n    Example:\n        >>> from datetime import datetime\n        >>> format_datetime(datetime(2024, 1, 15, 10, 30, 0))\n        '2024-01-15 10:30:00'\n        >>> format_datetime(None)\n        ''\n    \"\"\"\n    if dt is None:\n        return ''\n    if isinstance(dt, str):\n        return dt\n    \n    # 转换为本地时区（从 Django settings 获取）\n    from django.utils import timezone\n    if timezone.is_aware(dt):\n        dt = timezone.localtime(dt)\n    \n    return dt.strftime('%Y-%m-%d %H:%M:%S')\n\n\ndef create_csv_export_response(\n    data_iterator: Iterator[Dict[str, Any]],\n    headers: List[str],\n    filename: str,\n    field_formatters: Optional[Dict[str, Callable]] = None,\n    show_progress: bool = True\n) -> FileResponse | StreamingHttpResponse:\n    \"\"\"\n    创建 CSV 导出响应\n    \n    根据 show_progress 参数选择响应类型：\n    - True: 使用临时文件 + FileResponse，带 Content-Length（浏览器显示下载进度）\n    - False: 使用 StreamingHttpResponse（内存更友好，但无下载进度）\n    \n    Args:\n        data_iterator: 数据迭代器，每个元素是一个字典\n        headers: CSV 表头列表\n        filename: 下载文件名（如 \"export_2024.csv\"）\n        field_formatters: 字段格式化函数字典\n        show_progress: 是否显示下载进度（默认 True）\n    \n    Returns:\n        FileResponse 或 StreamingHttpResponse\n    \n    Example:\n        >>> data_iter = service.iter_data()\n        >>> headers = ['url', 'host', 'created_at']\n        >>> formatters = {'created_at': format_datetime}\n        >>> response = create_csv_export_response(\n        ...     data_iter, headers, 'websites.csv', formatters\n        ... )\n        >>> return response\n    \"\"\"\n    if show_progress:\n        return _create_file_response(data_iterator, headers, filename, field_formatters)\n    else:\n        return _create_streaming_response(data_iterator, headers, filename, field_formatters)\n\n\ndef _create_file_response(\n    data_iterator: Iterator[Dict[str, Any]],\n    headers: List[str],\n    filename: str,\n    field_formatters: Optional[Dict[str, Callable]] = None\n) -> FileResponse:\n    \"\"\"\n    创建带 Content-Length 的文件响应（支持浏览器下载进度）\n    \n    实现方式：先写入临时文件，再返回 FileResponse\n    \"\"\"\n    # 创建临时文件\n    temp_file = tempfile.NamedTemporaryFile(\n        mode='w', \n        suffix='.csv', \n        delete=False, \n        encoding='utf-8'\n    )\n    temp_path = temp_file.name\n    \n    try:\n        # 流式写入 CSV 数据到临时文件\n        for row in generate_csv_rows(data_iterator, headers, field_formatters):\n            temp_file.write(row)\n        temp_file.close()\n        \n        # 获取文件大小\n        file_size = os.path.getsize(temp_path)\n        \n        # 创建文件响应\n        response = FileResponse(\n            open(temp_path, 'rb'),\n            content_type='text/csv; charset=utf-8',\n            as_attachment=True,\n            filename=filename\n        )\n        response['Content-Length'] = file_size\n        \n        # 设置清理回调：响应完成后删除临时文件\n        original_close = response.file_to_stream.close\n        def close_and_cleanup():\n            original_close()\n            try:\n                os.unlink(temp_path)\n            except OSError:\n                pass\n        response.file_to_stream.close = close_and_cleanup\n        \n        return response\n        \n    except Exception as e:\n        # 清理临时文件\n        try:\n            temp_file.close()\n        except:\n            pass\n        try:\n            os.unlink(temp_path)\n        except OSError:\n            pass\n        logger.error(f\"创建 CSV 导出响应失败: {e}\")\n        raise\n\n\ndef _create_streaming_response(\n    data_iterator: Iterator[Dict[str, Any]],\n    headers: List[str],\n    filename: str,\n    field_formatters: Optional[Dict[str, Callable]] = None\n) -> StreamingHttpResponse:\n    \"\"\"\n    创建流式响应（无 Content-Length，内存更友好）\n    \"\"\"\n    response = StreamingHttpResponse(\n        generate_csv_rows(data_iterator, headers, field_formatters),\n        content_type='text/csv; charset=utf-8'\n    )\n    response['Content-Disposition'] = f'attachment; filename=\"{filename}\"'\n    return response\n"
  },
  {
    "path": "backend/apps/common/utils/dedup.py",
    "content": "\"\"\"\n批量数据去重工具\n\n用于 bulk_create 前的批次内去重，避免 PostgreSQL ON CONFLICT 错误。\n自动从 Django 模型读取唯一约束字段，无需手动指定。\n\"\"\"\n\nimport logging\nfrom typing import List, TypeVar, Tuple, Optional\n\nfrom django.db import models\n\nlogger = logging.getLogger(__name__)\n\nT = TypeVar('T')\n\n\ndef get_unique_fields(model: type[models.Model]) -> Optional[Tuple[str, ...]]:\n    \"\"\"\n    从 Django 模型获取唯一约束字段\n    \n    按优先级查找：\n    1. Meta.constraints 中的 UniqueConstraint\n    2. Meta.unique_together\n    \n    Args:\n        model: Django 模型类\n        \n    Returns:\n        唯一约束字段元组，如果没有则返回 None\n    \"\"\"\n    meta = model._meta\n    \n    # 1. 优先查找 UniqueConstraint\n    for constraint in getattr(meta, 'constraints', []):\n        if isinstance(constraint, models.UniqueConstraint):\n            # 跳过条件约束（partial unique）\n            if getattr(constraint, 'condition', None) is None:\n                return tuple(constraint.fields)\n    \n    # 2. 回退到 unique_together\n    unique_together = getattr(meta, 'unique_together', None)\n    if unique_together:\n        # unique_together 可能是 (('a', 'b'),) 或 ('a', 'b')\n        if unique_together and isinstance(unique_together[0], (list, tuple)):\n            return tuple(unique_together[0])\n        return tuple(unique_together)\n    \n    return None\n\n\ndef deduplicate_for_bulk(items: List[T], model: type[models.Model]) -> List[T]:\n    \"\"\"\n    根据模型唯一约束对数据去重\n    \n    自动从模型读取唯一约束字段，生成去重 key。\n    保留最后一条记录（后面的数据通常是更新的）。\n    \n    Args:\n        items: 待去重的数据列表（DTO 或 Model 对象）\n        model: Django 模型类（用于读取唯一约束）\n        \n    Returns:\n        去重后的数据列表\n        \n    Example:\n        # 自动从 Endpoint 模型读取唯一约束 (url, target)\n        unique_items = deduplicate_for_bulk(items, Endpoint)\n    \"\"\"\n    if not items:\n        return items\n    \n    unique_fields = get_unique_fields(model)\n    if unique_fields is None:\n        # 模型没有唯一约束，无需去重\n        logger.debug(f\"{model.__name__} 没有唯一约束，跳过去重\")\n        return items\n    \n    # 处理外键字段名（target -> target_id）\n    def make_key(item: T) -> tuple:\n        key_parts = []\n        for field in unique_fields:\n            # 尝试 field_id（外键）和 field 两种形式\n            value = getattr(item, f'{field}_id', None)\n            if value is None:\n                value = getattr(item, field, None)\n            key_parts.append(value)\n        return tuple(key_parts)\n    \n    # 使用字典去重，保留最后一条\n    seen = {}\n    for item in items:\n        key = make_key(item)\n        seen[key] = item\n    \n    unique_items = list(seen.values())\n    \n    if len(unique_items) < len(items):\n        logger.debug(f\"{model.__name__} 去重: {len(items)} -> {len(unique_items)} 条\")\n    \n    return unique_items\n"
  },
  {
    "path": "backend/apps/common/utils/filter_utils.py",
    "content": "\"\"\"智能过滤工具 - 通用查询语法解析和 Django ORM 查询构建\n\n支持的语法：\n- field=\"value\"     模糊匹配（包含）\n- field==\"value\"    精确匹配\n- field!=\"value\"    不等于\n\n逻辑运算符：\n- AND: && 或 and 或 空格（默认）\n- OR:  || 或 or\n\n示例：\n    type=\"xss\" || type=\"sqli\"           # OR\n    type=\"xss\" or type=\"sqli\"           # OR（等价）\n    severity=\"high\" && source=\"nuclei\"  # AND\n    severity=\"high\" source=\"nuclei\"     # AND（空格默认为 AND）\n    severity=\"high\" and source=\"nuclei\" # AND（等价）\n\n使用示例：\n    from apps.common.utils.filter_utils import apply_filters\n    \n    field_mapping = {'ip': 'ip', 'port': 'port', 'host': 'host'}\n    queryset = apply_filters(queryset, 'ip=\"192\" || port=\"80\"', field_mapping)\n\"\"\"\n\nimport re\nimport logging\nfrom dataclasses import dataclass\nfrom typing import List, Dict, Optional, Union\nfrom enum import Enum\n\nfrom django.db.models import QuerySet, Q, F, Func, CharField\nfrom django.db.models.functions import Cast\n\nlogger = logging.getLogger(__name__)\n\n\nclass ArrayToString(Func):\n    \"\"\"PostgreSQL array_to_string 函数\"\"\"\n    function = 'array_to_string'\n    template = \"%(function)s(%(expressions)s, ',')\"\n    output_field = CharField()\n\n\nclass LogicalOp(Enum):\n    \"\"\"逻辑运算符\"\"\"\n    AND = 'AND'\n    OR = 'OR'\n\n\n@dataclass\nclass ParsedFilter:\n    \"\"\"解析后的过滤条件\"\"\"\n    field: str      # 字段名\n    operator: str   # 操作符: '=', '==', '!='\n    value: str      # 原始值\n\n\n@dataclass\nclass FilterGroup:\n    \"\"\"过滤条件组（带逻辑运算符）\"\"\"\n    filter: ParsedFilter\n    logical_op: LogicalOp  # 与前一个条件的逻辑关系\n\n\nclass QueryParser:\n    \"\"\"查询语法解析器\n    \n    支持 ||/or (OR) 和 &&/and/空格 (AND) 逻辑运算符\n    \"\"\"\n    \n    # 正则匹配: field=\"value\", field==\"value\", field!=\"value\"\n    FILTER_PATTERN = re.compile(r'(\\w+)(==|!=|=)\"([^\"]*)\"')\n    \n    # 逻辑运算符模式（带空格）\n    OR_PATTERN = re.compile(r'\\s*(\\|\\||(?<![a-zA-Z])or(?![a-zA-Z]))\\s*', re.IGNORECASE)\n    AND_PATTERN = re.compile(r'\\s*(&&|(?<![a-zA-Z])and(?![a-zA-Z]))\\s*', re.IGNORECASE)\n    \n    @classmethod\n    def parse(cls, query_string: str) -> List[FilterGroup]:\n        \"\"\"解析查询语法字符串\n        \n        Args:\n            query_string: 查询语法字符串\n        \n        Returns:\n            解析后的过滤条件组列表\n        \n        Examples:\n            >>> QueryParser.parse('type=\"xss\" || type=\"sqli\"')\n            [FilterGroup(filter=..., logical_op=AND),  # 第一个默认 AND\n             FilterGroup(filter=..., logical_op=OR)]\n        \"\"\"\n        if not query_string or not query_string.strip():\n            return []\n        \n        # 第一步：提取所有过滤条件并用占位符替换，保护引号内的空格\n        filters_found = []\n        placeholder_pattern = '__FILTER_{}__'\n        \n        def replace_filter(match):\n            idx = len(filters_found)\n            filters_found.append(match.group(0))\n            return placeholder_pattern.format(idx)\n        \n        # 先用正则提取所有 field=\"value\" 形式的条件\n        protected = cls.FILTER_PATTERN.sub(replace_filter, query_string)\n        \n        # 标准化逻辑运算符\n        # 先处理 || 和 or -> __OR__\n        normalized = cls.OR_PATTERN.sub(' __OR__ ', protected)\n        # 再处理 && 和 and -> __AND__\n        normalized = cls.AND_PATTERN.sub(' __AND__ ', normalized)\n        \n        # 分词：按空格分割，保留逻辑运算符标记\n        tokens = normalized.split()\n        \n        groups = []\n        pending_op = LogicalOp.AND  # 默认 AND\n        \n        for token in tokens:\n            if token == '__OR__':\n                pending_op = LogicalOp.OR\n            elif token == '__AND__':\n                pending_op = LogicalOp.AND\n            elif token.startswith('__FILTER_') and token.endswith('__'):\n                # 还原占位符为原始过滤条件\n                try:\n                    idx = int(token[9:-2])  # 提取索引\n                    original_filter = filters_found[idx]\n                    match = cls.FILTER_PATTERN.match(original_filter)\n                    if match:\n                        field, operator, value = match.groups()\n                        groups.append(FilterGroup(\n                            filter=ParsedFilter(\n                                field=field.lower(),\n                                operator=operator,\n                                value=value\n                            ),\n                            logical_op=pending_op if groups else LogicalOp.AND\n                        ))\n                        pending_op = LogicalOp.AND  # 重置为默认 AND\n                except (ValueError, IndexError):\n                    pass\n            # 其他 token 忽略（无效输入）\n        \n        return groups\n\n\nclass QueryBuilder:\n    \"\"\"Django ORM 查询构建器\n    \n    将解析后的过滤条件转换为 Django ORM 查询，支持 AND/OR 逻辑\n    \"\"\"\n    \n    @classmethod\n    def build_query(\n        cls,\n        queryset: QuerySet,\n        filter_groups: List[FilterGroup],\n        field_mapping: Dict[str, str],\n        json_array_fields: List[str] = None\n    ) -> QuerySet:\n        \"\"\"构建 Django ORM 查询\n        \n        Args:\n            queryset: Django QuerySet\n            filter_groups: 解析后的过滤条件组列表\n            field_mapping: 字段映射\n            json_array_fields: JSON 数组字段列表（使用 __contains 查询）\n        \n        Returns:\n            过滤后的 QuerySet\n        \"\"\"\n        if not filter_groups:\n            return queryset\n        \n        json_array_fields = json_array_fields or []\n        \n        # 收集需要 annotate 的数组模糊搜索字段\n        array_fuzzy_fields = set()\n        \n        # 第一遍：检查是否有数组模糊匹配\n        for group in filter_groups:\n            f = group.filter\n            db_field = field_mapping.get(f.field)\n            if db_field and db_field in json_array_fields and f.operator == '=':\n                array_fuzzy_fields.add(db_field)\n        \n        # 对数组模糊搜索字段做 annotate\n        for field in array_fuzzy_fields:\n            annotate_name = f'{field}_text'\n            queryset = queryset.annotate(**{annotate_name: ArrayToString(F(field))})\n        \n        # 构建 Q 对象\n        combined_q = None\n        \n        for group in filter_groups:\n            f = group.filter\n            \n            # 字段映射\n            db_field = field_mapping.get(f.field)\n            if not db_field:\n                logger.debug(f\"忽略未知字段: {f.field}\")\n                continue\n            \n            # 判断是否为 JSON 数组字段\n            is_json_array = db_field in json_array_fields\n            \n            # 构建单个条件的 Q 对象\n            q = cls._build_single_q(db_field, f.operator, f.value, is_json_array)\n            if q is None:\n                continue\n            \n            # 组合 Q 对象\n            if combined_q is None:\n                combined_q = q\n            elif group.logical_op == LogicalOp.OR:\n                combined_q = combined_q | q\n            else:  # AND\n                combined_q = combined_q & q\n        \n        if combined_q is not None:\n            return queryset.filter(combined_q)\n        return queryset\n    \n    @classmethod\n    def _build_single_q(cls, field: str, operator: str, value: str, is_json_array: bool = False) -> Optional[Q]:\n        \"\"\"构建单个条件的 Q 对象\"\"\"\n        if is_json_array:\n            if operator == '==':\n                # 精确匹配：数组中包含完全等于 value 的元素\n                return Q(**{f'{field}__contains': [value]})\n            elif operator == '!=':\n                # 不包含：数组中不包含完全等于 value 的元素\n                return ~Q(**{f'{field}__contains': [value]})\n            else:  # '=' 模糊匹配\n                # 使用 annotate 后的字段进行模糊搜索\n                # 字段已在 build_query 中通过 ArrayToString 转换为文本\n                annotate_name = f'{field}_text'\n                return Q(**{f'{annotate_name}__icontains': value})\n        \n        if operator == '!=':\n            return cls._build_not_equal_q(field, value)\n        elif operator == '==':\n            return cls._build_exact_q(field, value)\n        else:  # '='\n            return cls._build_fuzzy_q(field, value)\n    \n    @classmethod\n    def _try_convert_to_int(cls, value: str) -> Optional[int]:\n        \"\"\"尝试将值转换为整数\"\"\"\n        try:\n            return int(value.strip())\n        except (ValueError, TypeError):\n            return None\n    \n    @classmethod\n    def _build_fuzzy_q(cls, field: str, value: str) -> Q:\n        \"\"\"模糊匹配: 包含\"\"\"\n        return Q(**{f'{field}__icontains': value})\n    \n    @classmethod\n    def _build_exact_q(cls, field: str, value: str) -> Q:\n        \"\"\"精确匹配\"\"\"\n        int_val = cls._try_convert_to_int(value)\n        if int_val is not None:\n            return Q(**{f'{field}__exact': int_val})\n        return Q(**{f'{field}__exact': value})\n    \n    @classmethod\n    def _build_not_equal_q(cls, field: str, value: str) -> Q:\n        \"\"\"不等于\"\"\"\n        int_val = cls._try_convert_to_int(value)\n        if int_val is not None:\n            return ~Q(**{f'{field}__exact': int_val})\n        return ~Q(**{f'{field}__exact': value})\n\n\ndef apply_filters(\n    queryset: QuerySet,\n    query_string: str,\n    field_mapping: Dict[str, str],\n    json_array_fields: List[str] = None\n) -> QuerySet:\n    \"\"\"应用过滤条件到 QuerySet\n    \n    Args:\n        queryset: Django QuerySet\n        query_string: 查询语法字符串\n        field_mapping: 字段映射\n        json_array_fields: JSON 数组字段列表（使用 __contains 查询）\n    \n    Returns:\n        过滤后的 QuerySet\n    \n    Examples:\n        # OR 查询\n        apply_filters(qs, 'type=\"xss\" || type=\"sqli\"', mapping)\n        apply_filters(qs, 'type=\"xss\" or type=\"sqli\"', mapping)\n        \n        # AND 查询\n        apply_filters(qs, 'severity=\"high\" && source=\"nuclei\"', mapping)\n        apply_filters(qs, 'severity=\"high\" source=\"nuclei\"', mapping)\n        \n        # 混合查询\n        apply_filters(qs, 'type=\"xss\" || type=\"sqli\" && severity=\"high\"', mapping)\n        \n        # JSON 数组字段查询\n        apply_filters(qs, 'implies=\"PHP\"', mapping, json_array_fields=['implies'])\n    \"\"\"\n    if not query_string or not query_string.strip():\n        return queryset\n    \n    try:\n        filter_groups = QueryParser.parse(query_string)\n        if not filter_groups:\n            logger.debug(f\"未解析到有效过滤条件: {query_string}\")\n            return queryset\n        \n        logger.debug(f\"解析过滤条件: {filter_groups}\")\n        return QueryBuilder.build_query(\n            queryset, \n            filter_groups, \n            field_mapping,\n            json_array_fields=json_array_fields\n        )\n    \n    except Exception as e:\n        logger.warning(f\"过滤解析错误: {e}, query: {query_string}\")\n        return queryset  # 静默降级\n"
  },
  {
    "path": "backend/apps/common/utils/hash.py",
    "content": "\"\"\"通用文件 hash 计算与校验工具\n\n提供 SHA-256 哈希计算和校验功能，用于：\n- 字典文件上传时计算 hash\n- Worker 侧本地缓存校验\n\"\"\"\n\nimport hashlib\nimport logging\nfrom typing import Optional, BinaryIO\n\nlogger = logging.getLogger(__name__)\n\n# 默认分块大小：64KB（兼顾内存和性能）\nDEFAULT_CHUNK_SIZE = 65536\n\n\ndef calc_file_sha256(file_path: str, chunk_size: int = DEFAULT_CHUNK_SIZE) -> str:\n    \"\"\"计算文件的 SHA-256 哈希值\n\n    Args:\n        file_path: 文件绝对路径\n        chunk_size: 分块读取大小（字节），默认 64KB\n\n    Returns:\n        str: SHA-256 十六进制字符串（64 字符）\n\n    Raises:\n        FileNotFoundError: 文件不存在\n        OSError: 文件读取失败\n    \"\"\"\n    hasher = hashlib.sha256()\n    with open(file_path, \"rb\") as f:\n        for chunk in iter(lambda: f.read(chunk_size), b\"\"):\n            hasher.update(chunk)\n    return hasher.hexdigest()\n\n\ndef calc_stream_sha256(stream: BinaryIO, chunk_size: int = DEFAULT_CHUNK_SIZE) -> str:\n    \"\"\"从二进制流计算 SHA-256（用于边写边算）\n\n    Args:\n        stream: 可读取的二进制流（如 UploadedFile.chunks()）\n        chunk_size: 分块大小\n\n    Returns:\n        str: SHA-256 十六进制字符串\n    \"\"\"\n    hasher = hashlib.sha256()\n    for chunk in iter(lambda: stream.read(chunk_size), b\"\"):\n        hasher.update(chunk)\n    return hasher.hexdigest()\n\n\ndef safe_calc_file_sha256(file_path: str) -> Optional[str]:\n    \"\"\"安全计算文件 SHA-256（异常时返回 None）\n\n    Args:\n        file_path: 文件绝对路径\n\n    Returns:\n        str | None: SHA-256 十六进制字符串，或 None（文件不存在/读取失败）\n    \"\"\"\n    try:\n        return calc_file_sha256(file_path)\n    except FileNotFoundError:\n        logger.warning(\"计算 hash 失败：文件不存在 - %s\", file_path)\n        return None\n    except OSError as exc:\n        logger.warning(\"计算 hash 失败：读取错误 - %s: %s\", file_path, exc)\n        return None\n\n\ndef is_file_hash_match(file_path: str, expected_hash: str) -> bool:\n    \"\"\"校验文件 hash 是否与期望值匹配\n\n    Args:\n        file_path: 文件绝对路径\n        expected_hash: 期望的 SHA-256 十六进制字符串\n\n    Returns:\n        bool: True 表示匹配，False 表示不匹配或计算失败\n    \"\"\"\n    if not expected_hash:\n        # 期望值为空，视为\"无法校验\"，返回 False 让调用方决定是否重新下载\n        return False\n\n    actual_hash = safe_calc_file_sha256(file_path)\n    if actual_hash is None:\n        return False\n\n    return actual_hash.lower() == expected_hash.lower()\n"
  },
  {
    "path": "backend/apps/common/validators.py",
    "content": "\"\"\"域名、IP、端口、URL 和目标验证工具函数\"\"\"\nimport ipaddress\nimport logging\nfrom urllib.parse import urlparse\n\nimport validators\n\nlogger = logging.getLogger(__name__)\n\n\ndef validate_domain(domain: str) -> None:\n    \"\"\"\n    验证域名格式（使用 validators 库）\n    \n    Args:\n        domain: 域名字符串（应该已经规范化）\n        \n    Raises:\n        ValueError: 域名格式无效\n    \"\"\"\n    if not domain:\n        raise ValueError(\"域名不能为空\")\n    \n    # 使用 validators 库验证域名格式\n    # 支持国际化域名（IDN）和各种边界情况\n    if not validators.domain(domain):\n        raise ValueError(f\"域名格式无效: {domain}\")\n\n\ndef is_valid_domain(domain: str) -> bool:\n    \"\"\"\n    判断是否为有效域名（不抛异常）\n    \n    Args:\n        domain: 域名字符串\n        \n    Returns:\n        bool: 是否为有效域名\n    \"\"\"\n    if not domain or len(domain) > 253:\n        return False\n    return bool(validators.domain(domain))\n\n\ndef validate_ip(ip: str) -> None:\n    \"\"\"\n    验证 IP 地址格式（支持 IPv4 和 IPv6）\n    \n    Args:\n        ip: IP 地址字符串（应该已经规范化）\n        \n    Raises:\n        ValueError: IP 地址格式无效\n    \"\"\"\n    if not ip:\n        raise ValueError(\"IP 地址不能为空\")\n    \n    try:\n        ipaddress.ip_address(ip)\n    except ValueError:\n        raise ValueError(f\"IP 地址格式无效: {ip}\")\n\n\ndef is_valid_ip(ip: str) -> bool:\n    \"\"\"\n    判断是否为有效 IP 地址（不抛异常）\n    \n    Args:\n        ip: IP 地址字符串\n        \n    Returns:\n        bool: 是否为有效 IP 地址\n    \"\"\"\n    if not ip:\n        return False\n    try:\n        ipaddress.ip_address(ip)\n        return True\n    except ValueError:\n        return False\n\n\ndef validate_cidr(cidr: str) -> None:\n    \"\"\"\n    验证 CIDR 格式（支持 IPv4 和 IPv6）\n    \n    Args:\n        cidr: CIDR 字符串（应该已经规范化）\n        \n    Raises:\n        ValueError: CIDR 格式无效\n    \"\"\"\n    if not cidr:\n        raise ValueError(\"CIDR 不能为空\")\n    \n    try:\n        ipaddress.ip_network(cidr, strict=False)\n    except ValueError:\n        raise ValueError(f\"CIDR 格式无效: {cidr}\")\n\n\ndef detect_target_type(name: str) -> str:\n    \"\"\"\n    检测目标类型（不做规范化，只验证）\n    \n    Args:\n        name: 目标名称（应该已经规范化）\n        \n    Returns:\n        str: 目标类型 ('domain', 'ip', 'cidr') - 使用 Target.TargetType 枚举值\n        \n    Raises:\n        ValueError: 如果无法识别目标类型\n    \"\"\"\n    # 在函数内部导入模型，避免 AppRegistryNotReady 错误\n    from apps.targets.models import Target\n\n    if not name:\n        raise ValueError(\"目标名称不能为空\")\n    \n    # 检查是否是 CIDR 格式（包含 /）\n    if '/' in name:\n        validate_cidr(name)\n        return Target.TargetType.CIDR\n    \n    # 检查是否是 IP 地址\n    try:\n        validate_ip(name)\n        return Target.TargetType.IP\n    except ValueError:\n        pass\n    \n    # 检查是否是合法域名\n    try:\n        validate_domain(name)\n        return Target.TargetType.DOMAIN\n    except ValueError:\n        pass\n    \n    # 无法识别的格式\n    raise ValueError(f\"无法识别的目标格式: {name}，必须是域名、IP地址或CIDR范围\")\n\n\ndef validate_port(port: any) -> tuple[bool, int | None]:\n    \"\"\"\n    验证并转换端口号\n    \n    Args:\n        port: 待验证的端口号（可能是字符串、整数或其他类型）\n    \n    Returns:\n        tuple: (is_valid, port_number)\n            - is_valid: 端口是否有效\n            - port_number: 有效时为整数端口号，无效时为 None\n    \n    验证规则：\n        1. 必须能转换为整数\n        2. 必须在 1-65535 范围内\n    \n    示例：\n        >>> is_valid, port_num = validate_port(8080)\n        >>> is_valid, port_num\n        (True, 8080)\n        \n        >>> is_valid, port_num = validate_port(\"invalid\")\n        >>> is_valid, port_num\n        (False, None)\n    \"\"\"\n    try:\n        port_num = int(port)\n        if 1 <= port_num <= 65535:\n            return True, port_num\n        else:\n            logger.warning(\"端口号超出有效范围 (1-65535): %d\", port_num)\n            return False, None\n    except (ValueError, TypeError):\n        logger.warning(\"端口号格式错误，无法转换为整数: %s\", port)\n        return False, None\n\n\n# ==================== URL 验证函数 ====================\n\ndef validate_url(url: str) -> None:\n    \"\"\"\n    验证 URL 格式，必须包含 scheme（http:// 或 https://）\n    \n    Args:\n        url: URL 字符串\n        \n    Raises:\n        ValueError: URL 格式无效或缺少 scheme\n    \"\"\"\n    if not url:\n        raise ValueError(\"URL 不能为空\")\n    \n    # 检查是否包含 scheme\n    if not url.startswith('http://') and not url.startswith('https://'):\n        raise ValueError(\"URL 必须包含协议（http:// 或 https://）\")\n    \n    try:\n        parsed = urlparse(url)\n        if not parsed.hostname:\n            raise ValueError(\"URL 必须包含主机名\")\n    except Exception:\n        raise ValueError(f\"URL 格式无效: {url}\")\n\n\ndef is_valid_url(url: str, max_length: int = 2000) -> bool:\n    \"\"\"\n    判断是否为有效 URL（不抛异常）\n    \n    Args:\n        url: URL 字符串\n        max_length: URL 最大长度，默认 2000\n        \n    Returns:\n        bool: 是否为有效 URL\n    \"\"\"\n    if not url or len(url) > max_length:\n        return False\n    try:\n        validate_url(url)\n        return True\n    except ValueError:\n        return False\n\n\ndef is_url_match_target(url: str, target_name: str, target_type: str) -> bool:\n    \"\"\"\n    判断 URL 是否匹配目标\n    \n    Args:\n        url: URL 字符串\n        target_name: 目标名称（域名、IP 或 CIDR）\n        target_type: 目标类型 ('domain', 'ip', 'cidr')\n        \n    Returns:\n        bool: 是否匹配\n    \"\"\"\n    try:\n        parsed = urlparse(url)\n        hostname = parsed.hostname\n        if not hostname:\n            return False\n        \n        hostname = hostname.lower()\n        target_name = target_name.lower()\n        \n        if target_type == 'domain':\n            # 域名类型：hostname 等于 target_name 或以 .target_name 结尾\n            return hostname == target_name or hostname.endswith('.' + target_name)\n        \n        elif target_type == 'ip':\n            # IP 类型：hostname 必须完全等于 target_name\n            return hostname == target_name\n        \n        elif target_type == 'cidr':\n            # CIDR 类型：hostname 必须是 IP 且在 CIDR 范围内\n            try:\n                ip = ipaddress.ip_address(hostname)\n                network = ipaddress.ip_network(target_name, strict=False)\n                return ip in network\n            except ValueError:\n                # hostname 不是有效 IP\n                return False\n        \n        return False\n    except Exception:\n        return False\n\n\ndef detect_input_type(input_str: str) -> str:\n    \"\"\"\n    检测输入类型（用于快速扫描输入解析）\n    \n    Args:\n        input_str: 输入字符串（应该已经 strip）\n        \n    Returns:\n        str: 输入类型 ('url', 'domain', 'ip', 'cidr')\n    \"\"\"\n    if not input_str:\n        raise ValueError(\"输入不能为空\")\n    \n    # 1. 包含 :// 一定是 URL\n    if '://' in input_str:\n        return 'url'\n    \n    # 2. 包含 / 需要判断是 CIDR 还是 URL（缺少 scheme）\n    if '/' in input_str:\n        # CIDR 格式: IP/prefix，如 10.0.0.0/8\n        parts = input_str.split('/')\n        if len(parts) == 2:\n            ip_part, prefix_part = parts\n            # 如果斜杠后是纯数字且在 0-32 范围内，检查是否是 CIDR\n            if prefix_part.isdigit() and 0 <= int(prefix_part) <= 32:\n                ip_parts = ip_part.split('.')\n                if len(ip_parts) == 4 and all(p.isdigit() for p in ip_parts):\n                    return 'cidr'\n        # 不是 CIDR，视为 URL（缺少 scheme，后续验证会报错）\n        return 'url'\n    \n    # 3. 检查是否是 IP 地址\n    try:\n        ipaddress.ip_address(input_str)\n        return 'ip'\n    except ValueError:\n        pass\n    \n    # 4. 默认为域名\n    return 'domain'\n"
  },
  {
    "path": "backend/apps/common/views/__init__.py",
    "content": "\"\"\"\n通用模块视图导出\n\n包含：\n- 健康检查视图：Docker 健康检查\n- 认证相关视图：登录、登出、用户信息、修改密码\n- 系统日志视图：实时日志查看\n- 黑名单视图：全局黑名单规则管理\n- 版本视图：系统版本和更新检查\n\"\"\"\n\nfrom .health_views import HealthCheckView\nfrom .auth_views import LoginView, LogoutView, MeView, ChangePasswordView\nfrom .system_log_views import SystemLogsView, SystemLogFilesView\nfrom .blacklist_views import GlobalBlacklistView\nfrom .version_views import VersionView, CheckUpdateView\n\n__all__ = [\n    'HealthCheckView',\n    'LoginView', 'LogoutView', 'MeView', 'ChangePasswordView',\n    'SystemLogsView', 'SystemLogFilesView',\n    'GlobalBlacklistView',\n    'VersionView', 'CheckUpdateView',\n]\n"
  },
  {
    "path": "backend/apps/common/views/auth_views.py",
    "content": "\"\"\"\n认证相关视图\n使用 Django 内置认证系统，支持 Session 认证\n\"\"\"\nimport logging\nfrom django.contrib.auth import authenticate, login, logout, update_session_auth_hash\nfrom django.views.decorators.csrf import csrf_exempt\nfrom django.utils.decorators import method_decorator\nfrom rest_framework import status\nfrom rest_framework.views import APIView\nfrom rest_framework.response import Response\nfrom rest_framework.permissions import AllowAny\n\nfrom apps.common.response_helpers import success_response, error_response\nfrom apps.common.error_codes import ErrorCodes\n\nlogger = logging.getLogger(__name__)\n\n\n@method_decorator(csrf_exempt, name='dispatch')\nclass LoginView(APIView):\n    \"\"\"\n    用户登录\n    POST /api/auth/login/\n    \"\"\"\n    authentication_classes = []  # 禁用认证（绕过 CSRF）\n    permission_classes = [AllowAny]\n    \n    def post(self, request):\n        username = request.data.get('username')\n        password = request.data.get('password')\n        \n        if not username or not password:\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='Username and password are required',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        \n        user = authenticate(request, username=username, password=password)\n        \n        if user is not None:\n            login(request, user)\n            logger.info(f\"用户 {username} 登录成功\")\n            return success_response(\n                data={\n                    'user': {\n                        'id': user.id,\n                        'username': user.username,\n                        'isStaff': user.is_staff,\n                        'isSuperuser': user.is_superuser,\n                    }\n                }\n            )\n        else:\n            logger.warning(f\"用户 {username} 登录失败：用户名或密码错误\")\n            return error_response(\n                code=ErrorCodes.UNAUTHORIZED,\n                message='Invalid username or password',\n                status_code=status.HTTP_401_UNAUTHORIZED\n            )\n\n\n@method_decorator(csrf_exempt, name='dispatch')\nclass LogoutView(APIView):\n    \"\"\"\n    用户登出\n    POST /api/auth/logout/\n    \"\"\"\n    authentication_classes = []  # 禁用认证（绕过 CSRF）\n    permission_classes = [AllowAny]\n    \n    def post(self, request):\n        # 从 session 获取用户名用于日志\n        user_id = request.session.get('_auth_user_id')\n        if user_id:\n            from django.contrib.auth import get_user_model\n            User = get_user_model()\n            try:\n                user = User.objects.get(pk=user_id)\n                username = user.username\n                logout(request)\n                logger.info(f\"用户 {username} 已登出\")\n            except User.DoesNotExist:\n                logout(request)\n        else:\n            logout(request)\n        return success_response()\n\n\n@method_decorator(csrf_exempt, name='dispatch')\nclass MeView(APIView):\n    \"\"\"\n    获取当前用户信息\n    GET /api/auth/me/\n    \"\"\"\n    authentication_classes = []  # 禁用认证（绕过 CSRF）\n    permission_classes = [AllowAny]\n    \n    def get(self, request):\n        # 从 session 获取用户\n        from django.contrib.auth import get_user_model\n        User = get_user_model()\n        \n        user_id = request.session.get('_auth_user_id')\n        if user_id:\n            try:\n                user = User.objects.get(pk=user_id)\n                return success_response(\n                    data={\n                        'authenticated': True,\n                        'user': {\n                            'id': user.id,\n                            'username': user.username,\n                            'isStaff': user.is_staff,\n                            'isSuperuser': user.is_superuser,\n                        }\n                    }\n                )\n            except User.DoesNotExist:\n                pass\n        \n        return success_response(\n            data={\n                'authenticated': False,\n                'user': None\n            }\n        )\n\n\n@method_decorator(csrf_exempt, name='dispatch')\nclass ChangePasswordView(APIView):\n    \"\"\"\n    修改密码\n    POST /api/auth/change-password/\n    \"\"\"\n    \n    def post(self, request):\n        # 使用全局权限类验证，request.user 已经是认证用户\n        user = request.user\n        \n        # CamelCaseParser 将 oldPassword -> old_password\n        old_password = request.data.get('old_password')\n        new_password = request.data.get('new_password')\n        \n        if not old_password or not new_password:\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='Old password and new password are required',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        \n        if not user.check_password(old_password):\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='Old password is incorrect',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        \n        user.set_password(new_password)\n        user.save()\n        \n        # 更新 session，避免用户被登出\n        update_session_auth_hash(request, user)\n        \n        logger.info(f\"用户 {user.username} 已修改密码\")\n        return success_response()\n"
  },
  {
    "path": "backend/apps/common/views/blacklist_views.py",
    "content": "\"\"\"全局黑名单 API 视图\"\"\"\nimport logging\n\nfrom rest_framework import status\nfrom rest_framework.views import APIView\nfrom rest_framework.permissions import IsAuthenticated\n\nfrom apps.common.response_helpers import success_response, error_response\nfrom apps.common.services import BlacklistService\n\nlogger = logging.getLogger(__name__)\n\n\nclass GlobalBlacklistView(APIView):\n    \"\"\"\n    全局黑名单规则 API\n    \n    Endpoints:\n    - GET /api/blacklist/rules/ - 获取全局黑名单列表\n    - PUT /api/blacklist/rules/ - 全量替换规则（文本框保存场景）\n    \n    设计说明：\n    - 使用 PUT 全量替换模式，适合\"文本框每行一个规则\"的前端场景\n    - 用户编辑文本框 -> 点击保存 -> 后端全量替换\n    \n    架构：MVS 模式\n    - View: 参数验证、响应格式化\n    - Service: 业务逻辑（BlacklistService）\n    - Model: 数据持久化（BlacklistRule）\n    \"\"\"\n    \n    permission_classes = [IsAuthenticated]\n    \n    def __init__(self, **kwargs):\n        super().__init__(**kwargs)\n        self.blacklist_service = BlacklistService()\n    \n    def get(self, request):\n        \"\"\"\n        获取全局黑名单规则列表\n        \n        返回格式：\n        {\n            \"patterns\": [\"*.gov\", \"*.edu\", \"10.0.0.0/8\"]\n        }\n        \"\"\"\n        rules = self.blacklist_service.get_global_rules()\n        patterns = list(rules.values_list('pattern', flat=True))\n        return success_response(data={'patterns': patterns})\n    \n    def put(self, request):\n        \"\"\"\n        全量替换全局黑名单规则\n        \n        请求格式：\n        {\n            \"patterns\": [\"*.gov\", \"*.edu\", \"10.0.0.0/8\"]\n        }\n        \n        或者空数组清空所有规则：\n        {\n            \"patterns\": []\n        }\n        \"\"\"\n        patterns = request.data.get('patterns', [])\n        \n        # 兼容字符串输入（换行分隔）\n        if isinstance(patterns, str):\n            patterns = [p for p in patterns.split('\\n') if p.strip()]\n        \n        if not isinstance(patterns, list):\n            return error_response(\n                code='VALIDATION_ERROR',\n                message='patterns 必须是数组'\n            )\n        \n        # 调用 Service 层全量替换\n        result = self.blacklist_service.replace_global_rules(patterns)\n        \n        return success_response(data=result)\n"
  },
  {
    "path": "backend/apps/common/views/health_views.py",
    "content": "\"\"\"\n健康检查视图\n\n提供 Docker 健康检查端点，无需认证。\n\"\"\"\n\nfrom rest_framework.views import APIView\nfrom rest_framework.response import Response\nfrom rest_framework.permissions import AllowAny\n\n\nclass HealthCheckView(APIView):\n    \"\"\"\n    健康检查端点\n    \n    GET /api/health/\n    \n    返回服务状态，用于 Docker 健康检查。\n    此端点无需认证。\n    \"\"\"\n    permission_classes = [AllowAny]\n    \n    def get(self, request):\n        return Response({'status': 'ok'})\n"
  },
  {
    "path": "backend/apps/common/views/system_log_views.py",
    "content": "\"\"\"\n系统日志视图模块\n\n提供系统日志的 REST API 接口，供前端实时查看系统运行日志。\n\"\"\"\n\nimport logging\n\nfrom django.utils.decorators import method_decorator\nfrom django.views.decorators.csrf import csrf_exempt\nfrom rest_framework import status\nfrom rest_framework.response import Response\nfrom rest_framework.views import APIView\n\nfrom apps.common.response_helpers import success_response, error_response\nfrom apps.common.error_codes import ErrorCodes\nfrom apps.common.services.system_log_service import SystemLogService\n\n\nlogger = logging.getLogger(__name__)\n\n\n@method_decorator(csrf_exempt, name=\"dispatch\")\nclass SystemLogFilesView(APIView):\n    \"\"\"\n    日志文件列表 API 视图\n    \n    GET /api/system/logs/files/\n        获取所有可用的日志文件列表\n        \n    Response:\n        {\n            \"files\": [\n                {\n                    \"filename\": \"xingrin.log\",\n                    \"category\": \"system\",\n                    \"size\": 1048576,\n                    \"modifiedAt\": \"2025-01-15T10:30:00+00:00\"\n                },\n                ...\n            ]\n        }\n    \"\"\"\n\n    def __init__(self, **kwargs):\n        super().__init__(**kwargs)\n        self.service = SystemLogService()\n\n    def get(self, request):\n        \"\"\"获取日志文件列表\"\"\"\n        try:\n            files = self.service.get_log_files()\n            return success_response(data={\"files\": files})\n        except Exception:\n            logger.exception(\"获取日志文件列表失败\")\n            return error_response(\n                code=ErrorCodes.SERVER_ERROR,\n                message='Failed to get log files',\n                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR\n            )\n\n\n@method_decorator(csrf_exempt, name=\"dispatch\")\nclass SystemLogsView(APIView):\n    \"\"\"\n    系统日志 API 视图\n    \n    GET /api/system/logs/\n        获取系统日志内容\n        \n    Query Parameters:\n        file (str, optional): 日志文件名，默认 xingrin.log\n        lines (int, optional): 返回的日志行数，默认 200，最大 10000\n        \n    Response:\n        {\n            \"content\": \"日志内容字符串...\"\n        }\n    \"\"\"\n\n    def __init__(self, **kwargs):\n        super().__init__(**kwargs)\n        self.service = SystemLogService()\n\n    def get(self, request):\n        \"\"\"\n        获取系统日志\n        \n        支持通过 file 和 lines 参数控制返回内容。\n        \"\"\"\n        try:\n            # 解析参数\n            filename = request.query_params.get(\"file\")\n            lines_raw = request.query_params.get(\"lines\")\n            lines = int(lines_raw) if lines_raw is not None else None\n\n            # 调用服务获取日志内容\n            content = self.service.get_logs_content(filename=filename, lines=lines)\n            return success_response(data={\"content\": content})\n        except ValueError as e:\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message=str(e) if 'file' in str(e).lower() else 'lines must be an integer',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        except FileNotFoundError as e:\n            return error_response(\n                code=ErrorCodes.NOT_FOUND,\n                message=str(e),\n                status_code=status.HTTP_404_NOT_FOUND\n            )\n        except Exception:\n            logger.exception(\"获取系统日志失败\")\n            return error_response(\n                code=ErrorCodes.SERVER_ERROR,\n                message='Failed to get system logs',\n                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR\n            )\n"
  },
  {
    "path": "backend/apps/common/views/version_views.py",
    "content": "\"\"\"\n系统版本相关视图\n\"\"\"\n\nimport logging\nfrom pathlib import Path\n\nimport requests\nfrom rest_framework.request import Request\nfrom rest_framework.response import Response\nfrom rest_framework.views import APIView\n\nfrom apps.common.error_codes import ErrorCodes\nfrom apps.common.response_helpers import error_response, success_response\n\nlogger = logging.getLogger(__name__)\n\n# GitHub 仓库信息\nGITHUB_REPO = \"yyhuni/xingrin\"\nGITHUB_API_URL = f\"https://api.github.com/repos/{GITHUB_REPO}/releases/latest\"\nGITHUB_RELEASES_URL = f\"https://github.com/{GITHUB_REPO}/releases\"\n\n\ndef get_current_version() -> str:\n    \"\"\"读取当前版本号\"\"\"\n    import os\n\n    # 方式1：从环境变量读取（Docker 容器中推荐）\n    version = os.environ.get('IMAGE_TAG', '')\n    if version:\n        return version\n\n    # 方式2：从文件读取（开发环境）\n    possible_paths = [\n        Path('/app/VERSION'),\n        Path(__file__).parent.parent.parent.parent.parent / 'VERSION',\n    ]\n\n    for path in possible_paths:\n        try:\n            return path.read_text(encoding='utf-8').strip()\n        except (FileNotFoundError, OSError):\n            continue\n\n    return \"unknown\"\n\n\ndef compare_versions(current: str, latest: str) -> bool:\n    \"\"\"\n    比较版本号，判断是否有更新\n\n    Returns:\n        True 表示有更新可用\n    \"\"\"\n    def parse_version(v: str) -> tuple:\n        v = v.lstrip('v')\n        parts = v.split('.')\n        result = []\n        for part in parts:\n            if '-' in part:\n                num, _ = part.split('-', 1)\n                result.append(int(num))\n            else:\n                result.append(int(part))\n        return tuple(result)\n\n    try:\n        return parse_version(latest) > parse_version(current)\n    except (ValueError, AttributeError):\n        return False\n\n\nclass VersionView(APIView):\n    \"\"\"获取当前系统版本\"\"\"\n\n    def get(self, _request: Request) -> Response:\n        \"\"\"获取当前版本信息\"\"\"\n        return success_response(data={\n            'version': get_current_version(),\n            'github_repo': GITHUB_REPO,\n        })\n\n\nclass CheckUpdateView(APIView):\n    \"\"\"检查系统更新\"\"\"\n\n    def get(self, _request: Request) -> Response:\n        \"\"\"\n        检查是否有新版本\n\n        Returns:\n            - current_version: 当前版本\n            - latest_version: 最新版本\n            - has_update: 是否有更新\n            - release_url: 发布页面 URL\n            - release_notes: 更新说明（如果有）\n        \"\"\"\n        current_version = get_current_version()\n\n        try:\n            response = requests.get(\n                GITHUB_API_URL,\n                headers={'Accept': 'application/vnd.github.v3+json'},\n                timeout=10\n            )\n\n            if response.status_code == 404:\n                return success_response(data={\n                    'current_version': current_version,\n                    'latest_version': current_version,\n                    'has_update': False,\n                    'release_url': GITHUB_RELEASES_URL,\n                    'release_notes': None,\n                })\n\n            response.raise_for_status()\n            release_data = response.json()\n\n            latest_version = release_data.get('tag_name', current_version)\n            has_update = compare_versions(current_version, latest_version)\n\n            return success_response(data={\n                'current_version': current_version,\n                'latest_version': latest_version,\n                'has_update': has_update,\n                'release_url': release_data.get('html_url', GITHUB_RELEASES_URL),\n                'release_notes': release_data.get('body'),\n                'published_at': release_data.get('published_at'),\n            })\n\n        except requests.RequestException as e:\n            logger.warning(\"检查更新失败: %s\", e)\n            return error_response(\n                code=ErrorCodes.SERVER_ERROR,\n                message=\"无法连接到 GitHub，请稍后重试\",\n            )\n"
  },
  {
    "path": "backend/apps/common/websocket_auth.py",
    "content": "\"\"\"\nWebSocket 认证基类\n\n提供需要认证的 WebSocket Consumer 基类\n\"\"\"\n\nimport logging\nfrom channels.generic.websocket import AsyncWebsocketConsumer\n\nlogger = logging.getLogger(__name__)\n\n\nclass AuthenticatedWebsocketConsumer(AsyncWebsocketConsumer):\n    \"\"\"\n    需要认证的 WebSocket Consumer 基类\n    \n    子类应该重写 on_connect() 方法实现具体的连接逻辑\n    \"\"\"\n    \n    async def connect(self):\n        \"\"\"\n        连接时验证用户认证状态\n        \n        未认证时使用 close(code=4001) 拒绝连接\n        \"\"\"\n        user = self.scope.get('user')\n        \n        if not user or not user.is_authenticated:\n            logger.warning(\n                f\"WebSocket 连接被拒绝：用户未认证 - Path: {self.scope.get('path')}\"\n            )\n            await self.close(code=4001)\n            return\n        \n        # 调用子类的连接逻辑\n        await self.on_connect()\n    \n    async def on_connect(self):\n        \"\"\"\n        子类实现具体的连接逻辑\n        \n        默认实现：接受连接\n        \"\"\"\n        await self.accept()\n"
  },
  {
    "path": "backend/apps/engine/__init__.py",
    "content": ""
  },
  {
    "path": "backend/apps/engine/apps.py",
    "content": "import os\nfrom django.apps import AppConfig\n\n\nclass EngineConfig(AppConfig):\n    default_auto_field = 'django.db.models.BigAutoField'\n    name = 'apps.engine'\n    verbose_name = '扫描引擎'\n    \n    def ready(self):\n        \"\"\"应用就绪时启动定时调度器\"\"\"\n        # 只在主进程中启动调度器（避免 autoreload 重复启动）\n        # 检查是否在 runserver 的 autoreload 子进程中\n        if os.environ.get('RUN_MAIN') == 'true' or not self._is_runserver():\n            # 只在 Server 容器中启动调度器（Worker 容器不需要）\n            if not os.environ.get('SERVER_URL'):  # Worker 容器有 SERVER_URL\n                self._start_scheduler()\n    \n    def _is_runserver(self):\n        \"\"\"检查是否通过 runserver 启动\"\"\"\n        import sys\n        return 'runserver' in sys.argv\n    \n    def _start_scheduler(self):\n        \"\"\"启动调度器\"\"\"\n        try:\n            from apps.engine.scheduler import start_scheduler\n            start_scheduler()\n        except Exception as e:\n            import logging\n            logger = logging.getLogger(__name__)\n            logger.warning(f\"调度器启动失败: {e}\")\n"
  },
  {
    "path": "backend/apps/engine/consumers/__init__.py",
    "content": "\"\"\"\nEngine WebSocket Consumers\n\"\"\"\nfrom .worker_deploy_consumer import WorkerDeployConsumer\n\n__all__ = ['WorkerDeployConsumer']\n"
  },
  {
    "path": "backend/apps/engine/consumers/worker_deploy_consumer.py",
    "content": "\"\"\"\nWebSocket Consumer - Worker 交互式终端 (使用 PTY)\n\"\"\"\n\nimport json\nimport logging\nimport asyncio\nimport os\nfrom asgiref.sync import sync_to_async\n\nfrom django.conf import settings\n\nfrom apps.common.websocket_auth import AuthenticatedWebsocketConsumer\nfrom apps.engine.services import WorkerService\n\nlogger = logging.getLogger(__name__)\n\n\nclass WorkerDeployConsumer(AuthenticatedWebsocketConsumer):\n    \"\"\"\n    Worker 交互式终端 WebSocket Consumer\n    \n    使用 paramiko invoke_shell 实现真正的交互式终端\n    \"\"\"\n    \n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.ssh_client = None\n        self.shell = None\n        self.worker = None\n        self.read_task = None\n        self.worker_service = WorkerService()\n    \n    async def on_connect(self):\n        \"\"\"连接时加入对应 Worker 的组并自动建立 SSH 连接（已通过认证）\"\"\"\n        self.worker_id = self.scope['url_route']['kwargs']['worker_id']\n        self.group_name = f'worker_deploy_{self.worker_id}'\n        \n        await self.channel_layer.group_add(self.group_name, self.channel_name)\n        await self.accept()\n        \n        logger.info(f\"终端已连接 - Worker: {self.worker_id}\")\n        \n        # 自动建立 SSH 连接\n        await self._auto_ssh_connect()\n    \n    async def disconnect(self, close_code):\n        \"\"\"断开时清理资源\"\"\"\n        if self.read_task:\n            self.read_task.cancel()\n        if self.shell:\n            try:\n                self.shell.close()\n            except Exception:\n                pass\n        if self.ssh_client:\n            try:\n                self.ssh_client.close()\n            except Exception:\n                pass\n        \n        await self.channel_layer.group_discard(self.group_name, self.channel_name)\n        logger.info(f\"终端已断开 - Worker: {self.worker_id}\")\n    \n    async def receive(self, text_data=None, bytes_data=None):\n        \"\"\"接收客户端消息\"\"\"\n        if bytes_data:\n            # 二进制数据直接发送到 shell\n            if self.shell:\n                await asyncio.to_thread(self.shell.send, bytes_data)\n            return\n        \n        if not text_data:\n            return\n            \n        try:\n            data = json.loads(text_data)\n            msg_type = data.get('type')\n            \n            if msg_type == 'resize':\n                cols = data.get('cols', 80)\n                rows = data.get('rows', 24)\n                if self.shell:\n                    await asyncio.to_thread(self.shell.resize_pty, cols, rows)\n                    \n            elif msg_type == 'input':\n                # 终端输入\n                if self.shell:\n                    text = data.get('data', '')\n                    await asyncio.to_thread(self.shell.send, text)\n                    \n            elif msg_type == 'deploy':\n                # 执行部署脚本（后台运行）\n                await self._run_deploy_script()\n                \n            elif msg_type == 'attach':\n                # 查看部署进度（attach 到 tmux 会话）\n                await self._attach_deploy_session()\n                \n            elif msg_type == 'uninstall':\n                # 执行卸载脚本（后台运行）\n                await self._run_uninstall_script()\n                \n        except json.JSONDecodeError:\n            # 可能是普通文本输入\n            if self.shell and text_data:\n                await asyncio.to_thread(self.shell.send, text_data)\n        except Exception as e:\n            logger.error(f\"处理消息错误: {e}\")\n    \n    async def _auto_ssh_connect(self):\n        \"\"\"自动从数据库读取密码并连接\"\"\"\n        logger.info(f\"[SSH] 开始自动连接 - Worker ID: {self.worker_id}\")\n        # 通过服务层获取 Worker 节点\n        # thread_sensitive=False 确保在新线程中运行，避免数据库连接问题\n        self.worker = await sync_to_async(self.worker_service.get_worker, thread_sensitive=False)(self.worker_id)\n        logger.info(f\"[SSH] Worker 查询结果: {self.worker}\")\n\n        if not self.worker:\n            await self.send(text_data=json.dumps({\n                'type': 'error',\n                'message': 'Worker 不存在'\n            }))\n            return\n            \n        if not self.worker.password:\n            await self.send(text_data=json.dumps({\n                'type': 'error',\n                'message': '未配置 SSH 密码，请先编辑节点信息'\n            }))\n            return\n            \n        # 使用默认终端大小\n        await self._ssh_connect(self.worker.password, 80, 24)\n    \n    async def _ssh_connect(self, password: str, cols: int = 80, rows: int = 24):\n        \"\"\"建立 SSH 连接并启动交互式 shell (使用 tmux 持久化会话)\"\"\"\n        try:\n            import paramiko\n        except ImportError:\n            await self.send(text_data=json.dumps({\n                'type': 'error', \n                'message': '服务器缺少 paramiko 库'\n            }))\n            return\n        \n        # self.worker 已在 _auto_ssh_connect 中查询\n        try:\n            ssh = paramiko.SSHClient()\n            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())\n            \n            await asyncio.to_thread(\n                ssh.connect,\n                self.worker.ip_address,\n                port=self.worker.ssh_port,\n                username=self.worker.username,\n                password=password,\n                timeout=30\n            )\n            \n            self.ssh_client = ssh\n            \n            # 启动交互式 shell（连接时不做 tmux 安装，仅提供普通 shell）\n            self.shell = await asyncio.to_thread(\n                ssh.invoke_shell,\n                term='xterm-256color',\n                width=cols,\n                height=rows\n            )\n            \n            # 发送连接成功消息\n            logger.info(f\"[SSH] 准备发送 connected 消息 - Worker: {self.worker_id}\")\n            await self.send(text_data=json.dumps({\n                'type': 'connected'\n            }))\n            logger.info(f\"[SSH] connected 消息已发送 - Worker: {self.worker_id}\")\n            \n            # 启动读取任务\n            self.read_task = asyncio.create_task(self._read_shell_output())\n            \n            logger.info(f\"[SSH] Shell 已连接，读取任务已启动 - Worker: {self.worker_id}\")\n            \n        except paramiko.AuthenticationException:\n            logger.error(f\"[SSH] 认证失败 - Worker: {self.worker_id}\")\n            await self.send(text_data=json.dumps({\n                'type': 'error',\n                'message': '认证失败，密码错误'\n            }))\n        except Exception as e:\n            logger.error(f\"[SSH] 连接失败 - Worker: {self.worker_id}, Error: {e}\")\n            await self.send(text_data=json.dumps({\n                'type': 'error',\n                'message': f'连接失败: {str(e)}'\n            }))\n    \n    async def _read_shell_output(self):\n        \"\"\"持续读取 shell 输出并发送到客户端\"\"\"\n        try:\n            while self.shell and not self.shell.closed:\n                if self.shell.recv_ready():\n                    data = await asyncio.to_thread(self.shell.recv, 4096)\n                    if data:\n                        await self.send(bytes_data=data)\n                else:\n                    await asyncio.sleep(0.01)\n        except asyncio.CancelledError:\n            pass\n        except Exception as e:\n            logger.error(f\"读取 shell 输出错误: {e}\")\n    \n    async def _run_deploy_script(self):\n        \"\"\"运行部署脚本（在 tmux 会话中执行，支持断线续连）\n        \n        流程：\n        1. 通过 SFTP 上传脚本到远程服务器\n        2. 使用 exec_command 静默执行（不在交互式终端回显）\n        3. 通过 WebSocket 发送结果到前端显示\n        \"\"\"\n        if not self.ssh_client:\n            return\n        \n        from apps.engine.services.deploy_service import (\n            get_bootstrap_script, \n            get_deploy_script, \n            get_start_agent_script\n        )\n        \n        # 优先使用 settings 中配置的对外访问主机（PUBLIC_HOST）拼接 Django URL\n        public_host = getattr(settings, 'PUBLIC_HOST', '').strip()\n        server_port = getattr(settings, 'SERVER_PORT', '8888')\n\n        if not public_host:\n            error_msg = (\n                \"未配置 PUBLIC_HOST，请在 docker/.env 中设置对外访问 IP/域名 \"\n                \"(PUBLIC_HOST) 并重启服务后再执行远程部署\"\n            )\n            logger.error(error_msg)\n            await self.send(text_data=json.dumps({\n                'type': 'error',\n                'message': error_msg,\n            }))\n            return\n\n        # 远程 Worker 通过 nginx HTTPS 访问（nginx 反代到后端 8888）\n        # 使用 https://{PUBLIC_HOST}:{PUBLIC_PORT} 而不是直连 8888 端口\n        public_port = getattr(settings, 'PUBLIC_PORT', '8083')\n        heartbeat_api_url = f\"https://{public_host}:{public_port}\"\n\n        session_name = f'xingrin_deploy_{self.worker_id}'\n        remote_script_path = '/tmp/xingrin_deploy.sh'\n        \n        # 获取外置脚本内容\n        bootstrap_script = get_bootstrap_script()\n        deploy_script = get_deploy_script()\n        start_script = get_start_agent_script(\n            heartbeat_api_url=heartbeat_api_url,\n            worker_id=self.worker_id\n        )\n        \n        # 合并脚本\n        combined_script = f\"\"\"#!/bin/bash\nset -e\n\n# ==================== 阶段 1: 环境初始化 ====================\n{bootstrap_script}\n\n# ==================== 阶段 2: 安装 Docker ====================\n{deploy_script}\n\n# ==================== 阶段 3: 启动 Agent ====================\n{start_script}\n\necho \"SUCCESS\"\n\"\"\"\n        \n        # 更新状态为 deploying\n        await sync_to_async(self.worker_service.update_status)(self.worker_id, 'deploying')\n        \n        # 发送开始提示\n        start_msg = \"\\r\\n\\033[36m[XingRin] 正在准备部署...\\033[0m\\r\\n\"\n        await self.send(bytes_data=start_msg.encode())\n        \n        try:\n            # 1. 上传脚本\n            sftp = await asyncio.to_thread(self.ssh_client.open_sftp)\n            with sftp.file(remote_script_path, 'w') as f:\n                f.write(combined_script)\n            sftp.chmod(remote_script_path, 0o755)\n            await asyncio.to_thread(sftp.close)\n            \n            # 2. 静默执行部署命令（使用 exec_command，不会回显到终端）\n            deploy_cmd = f\"\"\"\n# 确保 tmux 安装\nif ! command -v tmux >/dev/null 2>&1; then\n    if command -v apt-get >/dev/null 2>&1; then\n        sudo apt-get update -qq && sudo apt-get install -y -qq tmux >/dev/null 2>&1\n    fi\nfi\n\n# 检查脚本是否存在\nif [ ! -f \"{remote_script_path}\" ]; then\n    echo \"SCRIPT_NOT_FOUND\"\n    exit 1\nfi\n\n# 启动 tmux 会话\nif command -v tmux >/dev/null 2>&1; then\n    tmux kill-session -t {session_name} 2>/dev/null || true\n    # 使用 bash 执行脚本，确保环境正确\n    tmux new-session -d -s {session_name} \"bash {remote_script_path}; echo '部署完成，按回车退出'; read\"\n    # 验证会话是否创建成功\n    sleep 0.5\n    if tmux has-session -t {session_name} 2>/dev/null; then\n        echo \"SUCCESS\"\n    else\n        echo \"SESSION_CREATE_FAILED\"\n    fi\nelse\n    echo \"TMUX_NOT_FOUND\"\nfi\n\"\"\"\n            stdin, stdout, stderr = await asyncio.to_thread(\n                self.ssh_client.exec_command, deploy_cmd\n            )\n            result = await asyncio.to_thread(stdout.read)\n            result = result.decode().strip()\n            \n            # 3. 发送结果到前端终端显示\n            if \"SUCCESS\" in result:\n                # 部署任务已在后台启动，保持 deploying 状态\n                # 只有当心跳上报成功后才会变成 deployed（通过 heartbeat API 自动更新）\n                success_msg = (\n                    \"\\r\\n\\033[32m✓ 部署任务已在后台启动\\033[0m\\r\\n\"\n                    f\"\\033[90m  会话: {session_name}\\033[0m\\r\\n\"\n                    \"\\r\\n\"\n                    \"\\033[36m点击 [查看进度] 按钮查看部署输出\\033[0m\\r\\n\"\n                    f\"\\033[90m或手动执行: tmux attach -t {session_name}\\033[0m\\r\\n\"\n                    \"\\r\\n\"\n                )\n            else:\n                # 获取更多错误信息\n                err = await asyncio.to_thread(stderr.read)\n                err_msg = err.decode().strip() if err else \"\"\n                success_msg = f\"\\r\\n\\033[31m✗ 部署启动失败\\033[0m\\r\\n\\033[90m结果: {result}\\r\\n错误: {err_msg}\\033[0m\\r\\n\"\n            \n            await self.send(bytes_data=success_msg.encode())\n            \n        except Exception as e:\n            error_msg = f\"\\033[31m✗ 部署失败: {str(e)}\\033[0m\\r\\n\"\n            await self.send(bytes_data=error_msg.encode())\n            logger.error(f\"部署脚本执行失败: {e}\")\n    \n    async def _run_uninstall_script(self):\n        \"\"\"在远程主机上执行 Worker 卸载脚本\n\n        逻辑：\n        1. 通过服务层读取本地 worker-uninstall.sh 内容\n        2. 上传到远程 /tmp/xingrin_uninstall.sh 并赋予执行权限\n        3. 使用 exec_command 以 bash 执行脚本\n        4. 将执行结果摘要写回前端终端\n        \"\"\"\n        if not self.ssh_client:\n            return\n\n        from apps.engine.services.deploy_service import get_uninstall_script\n\n        uninstall_script = get_uninstall_script()\n        remote_script_path = '/tmp/xingrin_uninstall.sh'\n\n        start_msg = \"\\r\\n\\033[36m[XingRin] 正在执行 Worker 卸载...\\033[0m\\r\\n\"\n        await self.send(bytes_data=start_msg.encode())\n\n        try:\n            # 上传卸载脚本\n            sftp = await asyncio.to_thread(self.ssh_client.open_sftp)\n            with sftp.file(remote_script_path, 'w') as f:\n                f.write(uninstall_script)\n            sftp.chmod(remote_script_path, 0o755)\n            await asyncio.to_thread(sftp.close)\n\n            # 执行卸载脚本\n            cmd = f\"bash {remote_script_path}\"\n            stdin, stdout, stderr = await asyncio.to_thread(\n                self.ssh_client.exec_command, cmd\n            )\n            out = await asyncio.to_thread(stdout.read)\n            err = await asyncio.to_thread(stderr.read)\n\n            # 转换换行符为终端格式 (\\n -> \\r\\n)\n            output_text = out.decode().strip().replace('\\n', '\\r\\n') if out else \"\"\n            error_text = err.decode().strip().replace('\\n', '\\r\\n') if err else \"\"\n\n            # 简单判断是否成功（退出码 + 关键字）\n            exit_status = stdout.channel.recv_exit_status()\n            if exit_status == 0:\n                # 卸载成功，重置状态为 pending\n                await sync_to_async(self.worker_service.update_status)(self.worker_id, 'pending')\n                # 删除 Redis 中的心跳数据\n                from apps.engine.services.worker_load_service import worker_load_service\n                worker_load_service.delete_load(self.worker_id)\n                # 发送状态更新到前端\n                await self.send(text_data=json.dumps({\n                    'type': 'status',\n                    'status': 'pending'  # 卸载后变为待部署状态\n                }))\n                msg = \"\\r\\n\\033[32m✓ 节点卸载完成\\033[0m\\r\\n\"\n                if output_text:\n                    msg += f\"\\033[90m{output_text}\\033[0m\\r\\n\"\n            else:\n                msg = \"\\r\\n\\033[31m✗ Worker 卸载失败\\033[0m\\r\\n\"\n                if output_text:\n                    msg += f\"\\033[90m输出: {output_text}\\033[0m\\r\\n\"\n                if error_text:\n                    msg += f\"\\033[90m错误: {error_text}\\033[0m\\r\\n\"\n\n            await self.send(bytes_data=msg.encode())\n\n        except Exception as e:\n            error_msg = f\"\\033[31m✗ 卸载执行异常: {str(e)}\\033[0m\\r\\n\"\n            await self.send(bytes_data=error_msg.encode())\n            logger.error(f\"卸载脚本执行失败: {e}\")\n    \n    async def _attach_deploy_session(self):\n        \"\"\"Attach 到部署会话查看进度\"\"\"\n        if not self.shell or not self.ssh_client:\n            return\n        \n        session_name = f'xingrin_deploy_{self.worker_id}'\n        \n        # 先静默检查会话是否存在\n        check_cmd = f\"tmux has-session -t {session_name} 2>/dev/null && echo EXISTS || echo NOT_EXISTS\"\n        stdin, stdout, stderr = await asyncio.to_thread(\n            self.ssh_client.exec_command, check_cmd\n        )\n        result = await asyncio.to_thread(stdout.read)\n        result = result.decode().strip()\n        \n        if \"EXISTS\" in result:\n            # 会话存在，直接 attach\n            await asyncio.to_thread(self.shell.send, f\"tmux attach -t {session_name}\\n\")\n        else:\n            # 会话不存在，发送提示\n            msg = \"\\r\\n\\033[33m没有正在运行的部署任务\\033[0m\\r\\n\\033[90m请先点击 [执行部署] 按钮启动部署\\033[0m\\r\\n\\r\\n\"\n            await self.send(bytes_data=msg.encode())\n    \n    # Channel Layer 消息处理\n    async def terminal_output(self, event):\n        if self.shell:\n            await asyncio.to_thread(self.shell.send, event['content'])\n    \n    async def deploy_status(self, event):\n        await self.send(text_data=json.dumps({\n            'type': 'status',\n            'status': event['status'],\n            'message': event.get('message', '')\n        }))\n"
  },
  {
    "path": "backend/apps/engine/management/__init__.py",
    "content": ""
  },
  {
    "path": "backend/apps/engine/management/commands/__init__.py",
    "content": ""
  },
  {
    "path": "backend/apps/engine/management/commands/init_default_engine.py",
    "content": "\"\"\"\n初始化默认扫描引擎\n\n用法：\n  python manage.py init_default_engine              # 只创建不存在的引擎（不覆盖已有）\n  python manage.py init_default_engine --force      # 强制覆盖所有引擎配置\n  python manage.py init_default_engine --force-sub  # 只覆盖子引擎，保留 full scan\n  \n  cd /root/my-vulun-scan/docker\n  docker compose exec server python backend/manage.py init_default_engine --force\n\n功能：\n- 读取 engine_config_example.yaml 作为默认配置\n- 创建 full scan（默认引擎）+ 各扫描类型的子引擎\n- 默认不覆盖已有配置，加 --force 才会覆盖\n- 加 --force-sub 只覆盖子引擎配置，保留用户自定义的 full scan\n\"\"\"\n\nfrom django.core.management.base import BaseCommand\nfrom io import StringIO\nfrom pathlib import Path\n\nfrom ruamel.yaml import YAML\n\nfrom apps.engine.models import ScanEngine\n\n\nclass Command(BaseCommand):\n    help = '初始化默认扫描引擎配置（默认不覆盖已有，加 --force 强制覆盖）'\n\n    def add_arguments(self, parser):\n        parser.add_argument(\n            '--force',\n            action='store_true',\n            help='强制覆盖已有的引擎配置（包括 full scan 和子引擎）',\n        )\n        parser.add_argument(\n            '--force-sub',\n            action='store_true',\n            help='只覆盖子引擎配置，保留 full scan（升级时使用）',\n        )\n\n    def handle(self, *args, **options):\n        force = options.get('force', False)\n        force_sub = options.get('force_sub', False)\n        \n        # 读取默认配置文件\n        config_path = Path(__file__).resolve().parent.parent.parent.parent / 'scan' / 'configs' / 'engine_config_example.yaml'\n        \n        if not config_path.exists():\n            self.stdout.write(self.style.ERROR(f'配置文件不存在: {config_path}'))\n            return\n        \n        with open(config_path, 'r', encoding='utf-8') as f:\n            default_config = f.read()\n\n        # 使用 ruamel.yaml 解析，保留注释\n        yaml_parser = YAML()\n        yaml_parser.preserve_quotes = True\n        try:\n            config_dict = yaml_parser.load(default_config) or {}\n        except Exception as e:\n            self.stdout.write(self.style.ERROR(f'引擎配置 YAML 解析失败: {e}'))\n            return\n\n        # 1) full scan：保留完整配置\n        engine = ScanEngine.objects.filter(name='full scan').first()\n        if engine:\n            if force:\n                engine.configuration = default_config\n                engine.save()\n                self.stdout.write(self.style.SUCCESS(f'✓ 扫描引擎 full scan 配置已更新 (ID: {engine.id})'))\n            else:\n                self.stdout.write(self.style.WARNING(f'  ⊘ full scan 已存在，跳过（使用 --force 覆盖）'))\n        else:\n            engine = ScanEngine.objects.create(\n                name='full scan',\n                configuration=default_config,\n            )\n            self.stdout.write(self.style.SUCCESS(f'✓ 扫描引擎 full scan 已创建 (ID: {engine.id})'))\n\n        # 2) 为每个扫描类型生成一个「单一扫描类型」的子引擎\n        #    例如：subdomain_discovery, port_scan, ...\n        from apps.scan.configs.command_templates import get_supported_scan_types\n\n        supported_scan_types = set(get_supported_scan_types())\n\n        for scan_type, scan_cfg in config_dict.items():\n            # 只处理受支持且结构为 {tools: {...}} 的扫描类型\n            if scan_type not in supported_scan_types:\n                continue\n            if not isinstance(scan_cfg, dict):\n                continue\n            # subdomain_discovery 使用 4 阶段新结构（无 tools 字段），其他扫描类型仍要求有 tools\n            if scan_type != 'subdomain_discovery' and 'tools' not in scan_cfg:\n                continue\n\n            # 构造只包含当前扫描类型配置的 YAML（保留注释）\n            single_config = {scan_type: scan_cfg}\n            try:\n                stream = StringIO()\n                yaml_parser.dump(single_config, stream)\n                single_yaml = stream.getvalue()\n            except Exception as e:\n                self.stdout.write(self.style.ERROR(f'生成子引擎 {scan_type} 配置失败: {e}'))\n                continue\n\n            engine_name = f\"{scan_type}\"\n            sub_engine = ScanEngine.objects.filter(name=engine_name).first()\n            if sub_engine:\n                # force 或 force_sub 都会覆盖子引擎\n                if force or force_sub:\n                    sub_engine.configuration = single_yaml\n                    sub_engine.save()\n                    self.stdout.write(self.style.SUCCESS(\n                        f'  ✓ 子引擎 {engine_name} 配置已更新 (ID: {sub_engine.id})'\n                    ))\n                else:\n                    self.stdout.write(self.style.WARNING(\n                        f'  ⊘ {engine_name} 已存在，跳过（使用 --force 覆盖）'\n                    ))\n            else:\n                sub_engine = ScanEngine.objects.create(\n                    name=engine_name,\n                    configuration=single_yaml,\n                )\n                self.stdout.write(self.style.SUCCESS(\n                    f'  ✓ 子引擎 {engine_name} 已创建 (ID: {sub_engine.id})'\n                ))\n"
  },
  {
    "path": "backend/apps/engine/management/commands/init_fingerprints.py",
    "content": "\"\"\"初始化内置指纹库\n\n- EHole 指纹: ehole.json -> 导入到数据库\n- Goby 指纹: goby.json -> 导入到数据库\n- Wappalyzer 指纹: wappalyzer.json -> 导入到数据库\n- Fingers 指纹: fingers_http.json -> 导入到数据库\n- FingerPrintHub 指纹: fingerprinthub_web.json -> 导入到数据库\n- ARL 指纹: ARL.yaml -> 导入到数据库\n\n可重复执行：如果数据库已有数据则跳过，只在空库时导入。\n\"\"\"\n\nimport json\nimport logging\nfrom pathlib import Path\n\nimport yaml\nfrom django.conf import settings\nfrom django.core.management.base import BaseCommand\n\nfrom apps.engine.models import (\n    EholeFingerprint,\n    GobyFingerprint,\n    WappalyzerFingerprint,\n    FingersFingerprint,\n    FingerPrintHubFingerprint,\n    ARLFingerprint,\n)\nfrom apps.engine.services.fingerprints import (\n    EholeFingerprintService,\n    GobyFingerprintService,\n    WappalyzerFingerprintService,\n    FingersFingerprintService,\n    FingerPrintHubFingerprintService,\n    ARLFingerprintService,\n)\n\n\nlogger = logging.getLogger(__name__)\n\n\n# 内置指纹配置\nDEFAULT_FINGERPRINTS = [\n    {\n        \"type\": \"ehole\",\n        \"filename\": \"ehole.json\",\n        \"model\": EholeFingerprint,\n        \"service\": EholeFingerprintService,\n        \"data_key\": \"fingerprint\",  # JSON 中指纹数组的 key\n        \"file_format\": \"json\",\n    },\n    {\n        \"type\": \"goby\",\n        \"filename\": \"goby.json\",\n        \"model\": GobyFingerprint,\n        \"service\": GobyFingerprintService,\n        \"data_key\": None,  # Goby 是数组格式，直接使用整个 JSON\n        \"file_format\": \"json\",\n    },\n    {\n        \"type\": \"wappalyzer\",\n        \"filename\": \"wappalyzer.json\",\n        \"model\": WappalyzerFingerprint,\n        \"service\": WappalyzerFingerprintService,\n        \"data_key\": \"apps\",  # Wappalyzer 使用 apps 对象\n        \"file_format\": \"json\",\n    },\n    {\n        \"type\": \"fingers\",\n        \"filename\": \"fingers_http.json\",\n        \"model\": FingersFingerprint,\n        \"service\": FingersFingerprintService,\n        \"data_key\": None,  # Fingers 是数组格式\n        \"file_format\": \"json\",\n    },\n    {\n        \"type\": \"fingerprinthub\",\n        \"filename\": \"fingerprinthub_web.json\",\n        \"model\": FingerPrintHubFingerprint,\n        \"service\": FingerPrintHubFingerprintService,\n        \"data_key\": None,  # FingerPrintHub 是数组格式\n        \"file_format\": \"json\",\n    },\n    {\n        \"type\": \"arl\",\n        \"filename\": \"ARL.yaml\",\n        \"model\": ARLFingerprint,\n        \"service\": ARLFingerprintService,\n        \"data_key\": None,  # ARL 是 YAML 数组格式\n        \"file_format\": \"yaml\",\n    },\n]\n\n\nclass Command(BaseCommand):\n    help = \"初始化内置指纹库\"\n\n    def handle(self, *args, **options):\n        project_base = Path(settings.BASE_DIR).parent  # /app/backend -> /app\n        fingerprints_dir = project_base / \"backend\" / \"fingerprints\"\n\n        initialized = 0\n        skipped = 0\n        failed = 0\n\n        for item in DEFAULT_FINGERPRINTS:\n            fp_type = item[\"type\"]\n            filename = item[\"filename\"]\n            model = item[\"model\"]\n            service_class = item[\"service\"]\n            data_key = item[\"data_key\"]\n            file_format = item.get(\"file_format\", \"json\")\n\n            # 检查数据库是否已有数据\n            existing_count = model.objects.count()\n            if existing_count > 0:\n                self.stdout.write(self.style.SUCCESS(\n                    f\"[{fp_type}] 数据库已有 {existing_count} 条记录，跳过初始化\"\n                ))\n                skipped += 1\n                continue\n\n            # 查找源文件\n            src_path = fingerprints_dir / filename\n            if not src_path.exists():\n                self.stdout.write(self.style.WARNING(\n                    f\"[{fp_type}] 未找到内置指纹文件: {src_path}，跳过\"\n                ))\n                failed += 1\n                continue\n\n            # 读取并解析文件（支持 JSON 和 YAML）\n            try:\n                with open(src_path, \"r\", encoding=\"utf-8\") as f:\n                    if file_format == \"yaml\":\n                        file_data = yaml.safe_load(f)\n                    else:\n                        file_data = json.load(f)\n            except (json.JSONDecodeError, yaml.YAMLError, OSError) as exc:\n                self.stdout.write(self.style.ERROR(\n                    f\"[{fp_type}] 读取指纹文件失败: {exc}\"\n                ))\n                failed += 1\n                continue\n\n            # 提取指纹数据（根据不同格式处理）\n            fingerprints = self._extract_fingerprints(file_data, data_key, fp_type)\n            if not fingerprints:\n                self.stdout.write(self.style.WARNING(\n                    f\"[{fp_type}] 指纹文件中没有有效数据，跳过\"\n                ))\n                failed += 1\n                continue\n\n            # 使用 Service 批量导入\n            try:\n                service = service_class()\n                result = service.batch_create_fingerprints(fingerprints)\n                created = result.get(\"created\", 0)\n                failed_count = result.get(\"failed\", 0)\n\n                self.stdout.write(self.style.SUCCESS(\n                    f\"[{fp_type}] 导入成功: 创建 {created} 条，失败 {failed_count} 条\"\n                ))\n                initialized += 1\n            except Exception as exc:\n                self.stdout.write(self.style.ERROR(\n                    f\"[{fp_type}] 导入失败: {exc}\"\n                ))\n                failed += 1\n                continue\n\n        self.stdout.write(self.style.SUCCESS(\n            f\"指纹初始化完成: 成功 {initialized}, 已存在跳过 {skipped}, 失败 {failed}\"\n        ))\n\n    def _extract_fingerprints(self, json_data, data_key, fp_type):\n        \"\"\"\n        根据不同格式提取指纹数据，兼容数组和对象两种格式\n        \n        支持的格式：\n        - 数组格式: [...] 或 {\"key\": [...]}\n        - 对象格式: {...} 或 {\"key\": {...}} -> 转换为 [{\"name\": k, ...v}]\n        \"\"\"\n        # 获取目标数据\n        if data_key is None:\n            # 直接使用整个 JSON\n            target = json_data\n        else:\n            # 从指定 key 获取，支持多个可能的 key（如 apps/technologies）\n            if data_key == \"apps\":\n                target = json_data.get(\"apps\") or json_data.get(\"technologies\") or {}\n            else:\n                target = json_data.get(data_key, [])\n        \n        # 根据数据类型处理\n        if isinstance(target, list):\n            # 已经是数组格式，直接返回\n            return target\n        elif isinstance(target, dict):\n            # 对象格式，转换为数组 [{\"name\": key, ...value}]\n            return [{\"name\": name, **data} if isinstance(data, dict) else {\"name\": name}\n                    for name, data in target.items()]\n        \n        return []\n"
  },
  {
    "path": "backend/apps/engine/management/commands/init_nuclei_templates.py",
    "content": "\"\"\"初始化 Nuclei 模板仓库\n\n项目安装后执行此命令，自动创建官方模板仓库记录。\n\n使用方式：\n    python manage.py init_nuclei_templates           # 只创建记录（检测本地已有仓库）\n    python manage.py init_nuclei_templates --sync    # 创建并同步（git clone）\n\"\"\"\n\nimport logging\nimport subprocess\nfrom pathlib import Path\n\nfrom django.conf import settings\nfrom django.core.management.base import BaseCommand\nfrom django.utils import timezone\n\nfrom apps.engine.models import NucleiTemplateRepo\nfrom apps.engine.services import NucleiTemplateRepoService\n\nlogger = logging.getLogger(__name__)\n\n\n# 默认仓库配置\nDEFAULT_REPOS = [\n    {\n        \"name\": \"nuclei-templates\",\n        \"repo_url\": \"https://github.com/projectdiscovery/nuclei-templates.git\",\n        \"description\": \"Nuclei 官方模板仓库，包含数千个漏洞检测模板\",\n    },\n]\n\n\ndef get_local_commit_hash(local_path: Path) -> str:\n    \"\"\"获取本地 Git 仓库的 commit hash\"\"\"\n    if not (local_path / \".git\").is_dir():\n        return \"\"\n    result = subprocess.run(\n        [\"git\", \"-C\", str(local_path), \"rev-parse\", \"HEAD\"],\n        check=False,\n        stdout=subprocess.PIPE,\n        stderr=subprocess.PIPE,\n        text=True,\n    )\n    return result.stdout.strip() if result.returncode == 0 else \"\"\n\n\nclass Command(BaseCommand):\n    help = \"初始化 Nuclei 模板仓库（创建官方模板仓库记录）\"\n\n    def add_arguments(self, parser):\n        parser.add_argument(\n            \"--sync\",\n            action=\"store_true\",\n            help=\"创建后立即同步（git clone），首次需要较长时间\",\n        )\n        parser.add_argument(\n            \"--force\",\n            action=\"store_true\",\n            help=\"强制重新创建（删除已存在的同名仓库）\",\n        )\n\n    def handle(self, *args, **options):\n        do_sync = options.get(\"sync\", False)\n        force = options.get(\"force\", False)\n\n        service = NucleiTemplateRepoService()\n        base_dir = Path(getattr(settings, \"NUCLEI_TEMPLATES_REPOS_BASE_DIR\", \"/opt/xingrin/nuclei-repos\"))\n        \n        created = 0\n        skipped = 0\n        synced = 0\n\n        for repo_config in DEFAULT_REPOS:\n            name = repo_config[\"name\"]\n            repo_url = repo_config[\"repo_url\"]\n\n            # 检查是否已存在\n            existing = NucleiTemplateRepo.objects.filter(name=name).first()\n\n            if existing:\n                if force:\n                    self.stdout.write(self.style.WARNING(\n                        f\"[{name}] 强制模式，删除已存在的仓库记录\"\n                    ))\n                    service.remove_local_path_dir(existing)\n                    existing.delete()\n                else:\n                    self.stdout.write(self.style.SUCCESS(\n                        f\"[{name}] 已存在，跳过创建\"\n                    ))\n                    skipped += 1\n\n                    # 如果需要同步且已存在，也执行同步\n                    if do_sync and existing.id:\n                        try:\n                            result = service.refresh_repo(existing.id)\n                            self.stdout.write(self.style.SUCCESS(\n                                f\"[{name}] 同步完成: {result.get('action', 'unknown')}, \"\n                                f\"commit={result.get('commitHash', 'N/A')[:8]}\"\n                            ))\n                            synced += 1\n                        except Exception as e:\n                            self.stdout.write(self.style.ERROR(\n                                f\"[{name}] 同步失败: {e}\"\n                            ))\n                    continue\n\n            # 创建新仓库记录\n            try:\n                # 检查本地是否已有仓库（由 install.sh 预下载）\n                local_path = base_dir / name\n                local_commit = get_local_commit_hash(local_path)\n                \n                repo = NucleiTemplateRepo.objects.create(\n                    name=name,\n                    repo_url=repo_url,\n                    local_path=str(local_path) if local_commit else \"\",\n                    commit_hash=local_commit,\n                    last_synced_at=timezone.now() if local_commit else None,\n                )\n                \n                if local_commit:\n                    self.stdout.write(self.style.SUCCESS(\n                        f\"[{name}] 创建成功（检测到本地仓库）: commit={local_commit[:8]}\"\n                    ))\n                else:\n                    self.stdout.write(self.style.SUCCESS(\n                        f\"[{name}] 创建成功: id={repo.id}\"\n                    ))\n                created += 1\n\n                # 如果本地没有仓库且需要同步\n                if not local_commit and do_sync:\n                    try:\n                        self.stdout.write(self.style.WARNING(\n                            f\"[{name}] 正在同步（首次可能需要几分钟）...\"\n                        ))\n                        result = service.refresh_repo(repo.id)\n                        self.stdout.write(self.style.SUCCESS(\n                            f\"[{name}] 同步完成: {result.get('action', 'unknown')}, \"\n                            f\"commit={result.get('commitHash', 'N/A')[:8]}\"\n                        ))\n                        synced += 1\n                    except Exception as e:\n                        self.stdout.write(self.style.ERROR(\n                            f\"[{name}] 同步失败: {e}\"\n                        ))\n\n            except Exception as e:\n                self.stdout.write(self.style.ERROR(\n                    f\"[{name}] 创建失败: {e}\"\n                ))\n\n        self.stdout.write(self.style.SUCCESS(\n            f\"\\n初始化完成: 创建 {created}, 跳过 {skipped}, 同步 {synced}\"\n        ))\n"
  },
  {
    "path": "backend/apps/engine/management/commands/init_wordlists.py",
    "content": "\"\"\"初始化所有内置字典 Wordlist 记录\n\n内置字典从镜像内 /app/backend/wordlist/ 复制到运行时目录 /opt/xingrin/wordlists/：\n- 目录扫描默认字典: dir_default.txt\n- 子域名爆破默认字典: subdomains-top1million-110000.txt\n\n可重复执行：如果已存在同名记录且文件有效则跳过，只在缺失或文件丢失时创建/修复。\n\"\"\"\n\nimport logging\nimport shutil\nfrom pathlib import Path\n\nfrom django.conf import settings\nfrom django.core.management.base import BaseCommand\n\nfrom apps.common.utils import safe_calc_file_sha256\nfrom apps.engine.models import Wordlist\n\n\nlogger = logging.getLogger(__name__)\n\n\nDEFAULT_WORDLISTS = [\n    {\n        \"name\": \"dir_default.txt\",\n        \"filename\": \"dir_default.txt\",\n        \"description\": \"内置默认目录字典\",\n    },\n    {\n        \"name\": \"subdomains-top1million-110000.txt\",\n        \"filename\": \"subdomains-top1million-110000.txt\",\n        \"description\": \"内置默认子域名字典\",\n    },\n]\n\n\nclass Command(BaseCommand):\n    help = \"初始化所有内置字典 Wordlist 记录\"\n\n    def handle(self, *args, **options):\n        project_base = Path(settings.BASE_DIR).parent  # /app/backend -> /app\n        base_wordlist_dir = project_base / \"backend\" / \"wordlist\"\n        runtime_base_dir = Path(getattr(settings, \"WORDLISTS_BASE_PATH\", \"/opt/xingrin/wordlists\"))\n        runtime_base_dir.mkdir(parents=True, exist_ok=True)\n\n        initialized = 0\n        skipped = 0\n        failed = 0\n\n        for item in DEFAULT_WORDLISTS:\n            name = item[\"name\"]\n            filename = item[\"filename\"]\n            description = item[\"description\"]\n\n            existing = Wordlist.objects.filter(name=name).first()\n            if existing:\n                file_path = existing.file_path or \"\"\n                file_hash = getattr(existing, 'file_hash', '') or ''\n                if file_path and Path(file_path).exists() and file_hash:\n                    # 记录、文件、hash 都在，直接跳过\n                    self.stdout.write(self.style.SUCCESS(\n                        f\"[{name}] 已存在且文件有效，跳过初始化 (file_path={file_path})\"\n                    ))\n                    skipped += 1\n                    continue\n                elif file_path and Path(file_path).exists() and not file_hash:\n                    # 文件在但 hash 缺失，需要补算\n                    self.stdout.write(self.style.WARNING(\n                        f\"[{name}] 记录已存在但缺少 file_hash，将补算并更新\"\n                    ))\n                else:\n                    self.stdout.write(self.style.WARNING(\n                        f\"[{name}] 记录已存在但物理文件丢失，将重新创建文件路径并修复记录\"\n                    ))\n\n            src_path = base_wordlist_dir / filename\n            dest_path = runtime_base_dir / filename\n\n            if not src_path.exists():\n                self.stdout.write(self.style.WARNING(\n                    f\"[{name}] 未找到内置字典文件: {src_path}，跳过\"\n                ))\n                failed += 1\n                continue\n\n            try:\n                shutil.copy2(src_path, dest_path)\n            except OSError as exc:\n                self.stdout.write(self.style.WARNING(\n                    f\"[{name}] 复制内置字典到运行目录失败: {exc}\"\n                ))\n                failed += 1\n                continue\n\n            # 统计文件大小和行数\n            try:\n                file_size = dest_path.stat().st_size\n            except OSError:\n                file_size = 0\n\n            line_count = 0\n            try:\n                with dest_path.open(\"rb\") as f:\n                    for _ in f:\n                        line_count += 1\n            except OSError:\n                logger.warning(\"统计字典行数失败: %s\", src_path)\n\n            # 计算文件 hash\n            file_hash = safe_calc_file_sha256(str(dest_path)) or \"\"\n\n            # 如果之前已有记录则更新，否则创建新记录\n            if existing:\n                existing.file_path = str(dest_path)\n                existing.file_size = file_size\n                existing.line_count = line_count\n                existing.file_hash = file_hash\n                existing.description = existing.description or description\n                existing.save(update_fields=[\n                    \"file_path\",\n                    \"file_size\",\n                    \"line_count\",\n                    \"file_hash\",\n                    \"description\",\n                    \"updated_at\",\n                ])\n                wordlist = existing\n                action = \"更新\"\n            else:\n                wordlist = Wordlist.objects.create(\n                    name=name,\n                    description=description,\n                    file_path=str(dest_path),\n                    file_size=file_size,\n                    line_count=line_count,\n                    file_hash=file_hash,\n                )\n                action = \"创建\"\n\n            initialized += 1\n            hash_preview = (wordlist.file_hash[:16] + \"...\") if wordlist.file_hash else \"N/A\"\n            self.stdout.write(self.style.SUCCESS(\n                f\"[{name}] {action}字典记录成功: id={wordlist.id}, size={wordlist.file_size}, lines={wordlist.line_count}, hash={hash_preview}\"\n            ))\n\n        self.stdout.write(self.style.SUCCESS(\n            f\"初始化完成: 成功 {initialized}, 已存在跳过 {skipped}, 文件缺失 {failed}\"\n        ))\n"
  },
  {
    "path": "backend/apps/engine/migrations/0001_initial.py",
    "content": "# Generated by Django 5.2.7 on 2026-01-06 00:55\n\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    initial = True\n\n    dependencies = [\n    ]\n\n    operations = [\n        migrations.CreateModel(\n            name='NucleiTemplateRepo',\n            fields=[\n                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('name', models.CharField(help_text='仓库名称，用于前端展示和配置引用', max_length=200, unique=True)),\n                ('repo_url', models.CharField(help_text='Git 仓库地址', max_length=500)),\n                ('local_path', models.CharField(blank=True, default='', help_text='本地工作目录绝对路径', max_length=500)),\n                ('commit_hash', models.CharField(blank=True, default='', help_text='最后同步的 Git commit hash，用于 Worker 版本校验', max_length=40)),\n                ('last_synced_at', models.DateTimeField(blank=True, help_text='最后一次成功同步时间', null=True)),\n                ('created_at', models.DateTimeField(auto_now_add=True, help_text='创建时间')),\n                ('updated_at', models.DateTimeField(auto_now=True, help_text='更新时间')),\n            ],\n            options={\n                'verbose_name': 'Nuclei 模板仓库',\n                'verbose_name_plural': 'Nuclei 模板仓库',\n                'db_table': 'nuclei_template_repo',\n            },\n        ),\n        migrations.CreateModel(\n            name='ARLFingerprint',\n            fields=[\n                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('name', models.CharField(help_text='指纹名称', max_length=300, unique=True)),\n                ('rule', models.TextField(help_text='匹配规则表达式')),\n                ('created_at', models.DateTimeField(auto_now_add=True)),\n            ],\n            options={\n                'verbose_name': 'ARL 指纹',\n                'verbose_name_plural': 'ARL 指纹',\n                'db_table': 'arl_fingerprint',\n                'ordering': ['-created_at'],\n                'indexes': [models.Index(fields=['name'], name='arl_fingerp_name_c3a305_idx'), models.Index(fields=['-created_at'], name='arl_fingerp_created_ed1060_idx')],\n            },\n        ),\n        migrations.CreateModel(\n            name='EholeFingerprint',\n            fields=[\n                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('cms', models.CharField(help_text='产品/CMS名称', max_length=200)),\n                ('method', models.CharField(default='keyword', help_text='匹配方式', max_length=200)),\n                ('location', models.CharField(default='body', help_text='匹配位置', max_length=200)),\n                ('keyword', models.JSONField(default=list, help_text='关键词列表')),\n                ('is_important', models.BooleanField(default=False, help_text='是否重点资产')),\n                ('type', models.CharField(blank=True, default='-', help_text='分类', max_length=100)),\n                ('created_at', models.DateTimeField(auto_now_add=True)),\n            ],\n            options={\n                'verbose_name': 'EHole 指纹',\n                'verbose_name_plural': 'EHole 指纹',\n                'db_table': 'ehole_fingerprint',\n                'ordering': ['-created_at'],\n                'indexes': [models.Index(fields=['cms'], name='ehole_finge_cms_72ca2c_idx'), models.Index(fields=['method'], name='ehole_finge_method_17f0db_idx'), models.Index(fields=['location'], name='ehole_finge_locatio_7bb82b_idx'), models.Index(fields=['type'], name='ehole_finge_type_ca2bce_idx'), models.Index(fields=['is_important'], name='ehole_finge_is_impo_d56e64_idx'), models.Index(fields=['-created_at'], name='ehole_finge_created_d862b0_idx')],\n                'constraints': [models.UniqueConstraint(fields=('cms', 'method', 'location'), name='unique_ehole_fingerprint')],\n            },\n        ),\n        migrations.CreateModel(\n            name='FingerPrintHubFingerprint',\n            fields=[\n                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('fp_id', models.CharField(help_text='指纹ID', max_length=200, unique=True)),\n                ('name', models.CharField(help_text='指纹名称', max_length=300)),\n                ('author', models.CharField(blank=True, default='', help_text='作者', max_length=200)),\n                ('tags', models.CharField(blank=True, default='', help_text='标签', max_length=500)),\n                ('severity', models.CharField(blank=True, default='info', help_text='严重程度', max_length=50)),\n                ('metadata', models.JSONField(blank=True, default=dict, help_text='元数据')),\n                ('http', models.JSONField(default=list, help_text='HTTP 匹配规则')),\n                ('source_file', models.CharField(blank=True, default='', help_text='来源文件', max_length=500)),\n                ('created_at', models.DateTimeField(auto_now_add=True)),\n            ],\n            options={\n                'verbose_name': 'FingerPrintHub 指纹',\n                'verbose_name_plural': 'FingerPrintHub 指纹',\n                'db_table': 'fingerprinthub_fingerprint',\n                'ordering': ['-created_at'],\n                'indexes': [models.Index(fields=['fp_id'], name='fingerprint_fp_id_df467f_idx'), models.Index(fields=['name'], name='fingerprint_name_95b6fb_idx'), models.Index(fields=['author'], name='fingerprint_author_80f54b_idx'), models.Index(fields=['severity'], name='fingerprint_severit_f70422_idx'), models.Index(fields=['-created_at'], name='fingerprint_created_bec16c_idx')],\n            },\n        ),\n        migrations.CreateModel(\n            name='FingersFingerprint',\n            fields=[\n                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('name', models.CharField(help_text='指纹名称', max_length=300, unique=True)),\n                ('link', models.URLField(blank=True, default='', help_text='相关链接', max_length=500)),\n                ('rule', models.JSONField(default=list, help_text='匹配规则数组')),\n                ('tag', models.JSONField(default=list, help_text='标签数组')),\n                ('focus', models.BooleanField(default=False, help_text='是否重点关注')),\n                ('default_port', models.JSONField(blank=True, default=list, help_text='默认端口数组')),\n                ('created_at', models.DateTimeField(auto_now_add=True)),\n            ],\n            options={\n                'verbose_name': 'Fingers 指纹',\n                'verbose_name_plural': 'Fingers 指纹',\n                'db_table': 'fingers_fingerprint',\n                'ordering': ['-created_at'],\n                'indexes': [models.Index(fields=['name'], name='fingers_fin_name_952de0_idx'), models.Index(fields=['link'], name='fingers_fin_link_4c6b7f_idx'), models.Index(fields=['focus'], name='fingers_fin_focus_568c7f_idx'), models.Index(fields=['-created_at'], name='fingers_fin_created_46fc91_idx')],\n            },\n        ),\n        migrations.CreateModel(\n            name='GobyFingerprint',\n            fields=[\n                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('name', models.CharField(help_text='产品名称', max_length=300, unique=True)),\n                ('logic', models.CharField(help_text='逻辑表达式', max_length=500)),\n                ('rule', models.JSONField(default=list, help_text='规则数组')),\n                ('created_at', models.DateTimeField(auto_now_add=True)),\n            ],\n            options={\n                'verbose_name': 'Goby 指纹',\n                'verbose_name_plural': 'Goby 指纹',\n                'db_table': 'goby_fingerprint',\n                'ordering': ['-created_at'],\n                'indexes': [models.Index(fields=['name'], name='goby_finger_name_82084c_idx'), models.Index(fields=['logic'], name='goby_finger_logic_a63226_idx'), models.Index(fields=['-created_at'], name='goby_finger_created_50e000_idx')],\n            },\n        ),\n        migrations.CreateModel(\n            name='ScanEngine',\n            fields=[\n                ('id', models.AutoField(primary_key=True, serialize=False)),\n                ('name', models.CharField(help_text='引擎名称', max_length=200, unique=True)),\n                ('configuration', models.CharField(blank=True, default='', help_text='引擎配置，yaml 格式', max_length=10000)),\n                ('created_at', models.DateTimeField(auto_now_add=True, help_text='创建时间')),\n                ('updated_at', models.DateTimeField(auto_now=True, help_text='更新时间')),\n            ],\n            options={\n                'verbose_name': '扫描引擎',\n                'verbose_name_plural': '扫描引擎',\n                'db_table': 'scan_engine',\n                'ordering': ['-created_at'],\n                'indexes': [models.Index(fields=['-created_at'], name='scan_engine_created_da4870_idx')],\n            },\n        ),\n        migrations.CreateModel(\n            name='WappalyzerFingerprint',\n            fields=[\n                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('name', models.CharField(help_text='应用名称', max_length=300, unique=True)),\n                ('cats', models.JSONField(default=list, help_text='分类 ID 数组')),\n                ('cookies', models.JSONField(blank=True, default=dict, help_text='Cookie 检测规则')),\n                ('headers', models.JSONField(blank=True, default=dict, help_text='HTTP Header 检测规则')),\n                ('script_src', models.JSONField(blank=True, default=list, help_text='脚本 URL 正则数组')),\n                ('js', models.JSONField(blank=True, default=list, help_text='JavaScript 变量检测规则')),\n                ('implies', models.JSONField(blank=True, default=list, help_text='依赖关系数组')),\n                ('meta', models.JSONField(blank=True, default=dict, help_text='HTML meta 标签检测规则')),\n                ('html', models.JSONField(blank=True, default=list, help_text='HTML 内容正则数组')),\n                ('description', models.TextField(blank=True, default='', help_text='应用描述')),\n                ('website', models.URLField(blank=True, default='', help_text='官网链接', max_length=500)),\n                ('cpe', models.CharField(blank=True, default='', help_text='CPE 标识符', max_length=300)),\n                ('created_at', models.DateTimeField(auto_now_add=True)),\n            ],\n            options={\n                'verbose_name': 'Wappalyzer 指纹',\n                'verbose_name_plural': 'Wappalyzer 指纹',\n                'db_table': 'wappalyzer_fingerprint',\n                'ordering': ['-created_at'],\n                'indexes': [models.Index(fields=['name'], name='wappalyzer__name_63c669_idx'), models.Index(fields=['website'], name='wappalyzer__website_88de1c_idx'), models.Index(fields=['cpe'], name='wappalyzer__cpe_30c761_idx'), models.Index(fields=['-created_at'], name='wappalyzer__created_8e6c21_idx')],\n            },\n        ),\n        migrations.CreateModel(\n            name='Wordlist',\n            fields=[\n                ('id', models.AutoField(primary_key=True, serialize=False)),\n                ('name', models.CharField(help_text='字典名称，唯一', max_length=200, unique=True)),\n                ('description', models.CharField(blank=True, default='', help_text='字典描述', max_length=200)),\n                ('file_path', models.CharField(help_text='后端保存的字典文件绝对路径', max_length=500)),\n                ('file_size', models.BigIntegerField(default=0, help_text='文件大小（字节）')),\n                ('line_count', models.IntegerField(default=0, help_text='字典行数')),\n                ('file_hash', models.CharField(blank=True, default='', help_text='文件 SHA-256 哈希，用于缓存校验', max_length=64)),\n                ('created_at', models.DateTimeField(auto_now_add=True, help_text='创建时间')),\n                ('updated_at', models.DateTimeField(auto_now=True, help_text='更新时间')),\n            ],\n            options={\n                'verbose_name': '字典文件',\n                'verbose_name_plural': '字典文件',\n                'db_table': 'wordlist',\n                'ordering': ['-created_at'],\n                'indexes': [models.Index(fields=['-created_at'], name='wordlist_created_4afb02_idx')],\n            },\n        ),\n        migrations.CreateModel(\n            name='WorkerNode',\n            fields=[\n                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('name', models.CharField(help_text='节点名称', max_length=100)),\n                ('ip_address', models.GenericIPAddressField(help_text='IP 地址（本地节点为 127.0.0.1）')),\n                ('ssh_port', models.IntegerField(default=22, help_text='SSH 端口')),\n                ('username', models.CharField(default='root', help_text='SSH 用户名', max_length=50)),\n                ('password', models.CharField(blank=True, default='', help_text='SSH 密码', max_length=200)),\n                ('is_local', models.BooleanField(default=False, help_text='是否为本地节点（Docker 容器内）')),\n                ('status', models.CharField(choices=[('pending', '待部署'), ('deploying', '部署中'), ('online', '在线'), ('offline', '离线'), ('updating', '更新中'), ('outdated', '版本过低')], default='pending', help_text='状态: pending/deploying/online/offline', max_length=20)),\n                ('created_at', models.DateTimeField(auto_now_add=True)),\n                ('updated_at', models.DateTimeField(auto_now=True)),\n            ],\n            options={\n                'verbose_name': 'Worker 节点',\n                'db_table': 'worker_node',\n                'ordering': ['-created_at'],\n                'constraints': [models.UniqueConstraint(condition=models.Q(('is_local', False)), fields=('ip_address',), name='unique_remote_worker_ip'), models.UniqueConstraint(fields=('name',), name='unique_worker_name')],\n            },\n        ),\n    ]\n"
  },
  {
    "path": "backend/apps/engine/migrations/__init__.py",
    "content": ""
  },
  {
    "path": "backend/apps/engine/models/__init__.py",
    "content": "\"\"\"Engine Models\n\n导出所有 Engine 模块的 Models\n\"\"\"\n\nfrom .engine import WorkerNode, ScanEngine, Wordlist, NucleiTemplateRepo\nfrom .fingerprints import (\n    EholeFingerprint,\n    GobyFingerprint,\n    WappalyzerFingerprint,\n    FingersFingerprint,\n    FingerPrintHubFingerprint,\n    ARLFingerprint,\n)\n\n__all__ = [\n    # 核心 Models\n    \"WorkerNode\",\n    \"ScanEngine\",\n    \"Wordlist\",\n    \"NucleiTemplateRepo\",\n    # 指纹 Models\n    \"EholeFingerprint\",\n    \"GobyFingerprint\",\n    \"WappalyzerFingerprint\",\n    \"FingersFingerprint\",\n    \"FingerPrintHubFingerprint\",\n    \"ARLFingerprint\",\n]\n"
  },
  {
    "path": "backend/apps/engine/models/engine.py",
    "content": "\"\"\"Engine 模块核心 Models\n\n包含 WorkerNode, ScanEngine, Wordlist, NucleiTemplateRepo\n\"\"\"\n\nfrom django.db import models\n\n\nclass WorkerNode(models.Model):\n    \"\"\"Worker 节点模型 - 分布式扫描执行器\"\"\"\n    \n    # 状态选项（前后端统一）\n    STATUS_CHOICES = [\n        ('pending', '待部署'),\n        ('deploying', '部署中'),\n        ('online', '在线'),\n        ('offline', '离线'),\n        ('updating', '更新中'),\n        ('outdated', '版本过低'),\n    ]\n    \n    name = models.CharField(max_length=100, help_text='节点名称')\n    # 本地节点会自动填入 127.0.0.1 或容器 IP\n    ip_address = models.GenericIPAddressField(help_text='IP 地址（本地节点为 127.0.0.1）')\n    ssh_port = models.IntegerField(default=22, help_text='SSH 端口')\n    username = models.CharField(max_length=50, default='root', help_text='SSH 用户名')\n    password = models.CharField(max_length=200, blank=True, default='', help_text='SSH 密码')\n    \n    # 本地节点标记（Docker 容器内的 Worker）\n    is_local = models.BooleanField(default=False, help_text='是否为本地节点（Docker 容器内）')\n    \n    # 状态（前后端统一）\n    status = models.CharField(\n        max_length=20, \n        choices=STATUS_CHOICES, \n        default='pending', \n        help_text='状态: pending/deploying/online/offline'\n    )\n    \n    # 心跳数据存储在 Redis（worker:load:{id}），不再使用数据库字段\n    \n    created_at = models.DateTimeField(auto_now_add=True)\n    updated_at = models.DateTimeField(auto_now=True)\n    \n    class Meta:\n        db_table = 'worker_node'\n        verbose_name = 'Worker 节点'\n        ordering = ['-created_at']\n        constraints = [\n            # 远程节点 IP 唯一（本地节点不限制，因为都是 127.0.0.1）\n            models.UniqueConstraint(\n                fields=['ip_address'],\n                condition=models.Q(is_local=False),\n                name='unique_remote_worker_ip'\n            ),\n            # 名称全局唯一\n            models.UniqueConstraint(\n                fields=['name'],\n                name='unique_worker_name'\n            ),\n        ]\n    \n    def __str__(self):\n        if self.is_local:\n            return f\"{self.name} (本地)\"\n        return f\"{self.name} ({self.ip_address or '未知'})\"\n\n\nclass ScanEngine(models.Model):\n    \"\"\"扫描引擎模型\"\"\"\n    \n    id = models.AutoField(primary_key=True)\n    name = models.CharField(max_length=200, unique=True, help_text='引擎名称')\n    configuration = models.CharField(max_length=10000, blank=True, default='', help_text='引擎配置，yaml 格式')\n    created_at = models.DateTimeField(auto_now_add=True, help_text='创建时间')\n    updated_at = models.DateTimeField(auto_now=True, help_text='更新时间')\n\n    class Meta:\n        db_table = 'scan_engine'\n        verbose_name = '扫描引擎'\n        verbose_name_plural = '扫描引擎'\n        ordering = ['-created_at']\n        indexes = [\n            models.Index(fields=['-created_at']),\n        ]\n\n    def __str__(self):\n        return str(self.name or f'ScanEngine {self.id}')\n\n\nclass Wordlist(models.Model):\n    \"\"\"字典文件模型\"\"\"\n\n    id = models.AutoField(primary_key=True)\n    name = models.CharField(max_length=200, unique=True, help_text='字典名称，唯一')\n    description = models.CharField(max_length=200, blank=True, default='', help_text='字典描述')\n    file_path = models.CharField(max_length=500, help_text='后端保存的字典文件绝对路径')\n    file_size = models.BigIntegerField(default=0, help_text='文件大小（字节）')\n    line_count = models.IntegerField(default=0, help_text='字典行数')\n    file_hash = models.CharField(max_length=64, blank=True, default='', help_text='文件 SHA-256 哈希，用于缓存校验')\n    created_at = models.DateTimeField(auto_now_add=True, help_text='创建时间')\n    updated_at = models.DateTimeField(auto_now=True, help_text='更新时间')\n\n    class Meta:\n        db_table = 'wordlist'\n        verbose_name = '字典文件'\n        verbose_name_plural = '字典文件'\n        ordering = ['-created_at']\n        indexes = [\n            models.Index(fields=['-created_at']),\n        ]\n\n    def __str__(self) -> str:\n        return self.name\n\n\nclass NucleiTemplateRepo(models.Model):\n    \"\"\"Nuclei 模板 Git 仓库模型（多仓库）\"\"\"\n\n    name = models.CharField(max_length=200, unique=True, help_text=\"仓库名称，用于前端展示和配置引用\")\n    repo_url = models.CharField(max_length=500, help_text=\"Git 仓库地址\")\n    local_path = models.CharField(max_length=500, blank=True, default='', help_text=\"本地工作目录绝对路径\")\n    commit_hash = models.CharField(max_length=40, blank=True, default='', help_text=\"最后同步的 Git commit hash，用于 Worker 版本校验\")\n    last_synced_at = models.DateTimeField(null=True, blank=True, help_text=\"最后一次成功同步时间\")\n    created_at = models.DateTimeField(auto_now_add=True, help_text=\"创建时间\")\n    updated_at = models.DateTimeField(auto_now=True, help_text=\"更新时间\")\n\n    class Meta:\n        db_table = \"nuclei_template_repo\"\n        verbose_name = \"Nuclei 模板仓库\"\n        verbose_name_plural = \"Nuclei 模板仓库\"\n\n    def __str__(self) -> str:  # pragma: no cover - 简单表示\n        return f\"NucleiTemplateRepo({self.id}, {self.name})\"\n"
  },
  {
    "path": "backend/apps/engine/models/fingerprints.py",
    "content": "\"\"\"指纹相关 Models\n\n包含 EHole、Goby、Wappalyzer 等指纹格式的数据模型\n\"\"\"\n\nfrom django.db import models\n\n\nclass GobyFingerprint(models.Model):\n    \"\"\"Goby 格式指纹规则\n    \n    Goby 使用逻辑表达式和规则数组进行匹配：\n    - logic: 逻辑表达式，如 \"a||b\", \"(a&&b)||c\"\n    - rule: 规则数组，每条规则包含 label, feature, is_equal\n    \"\"\"\n    \n    name = models.CharField(max_length=300, unique=True, help_text='产品名称')\n    logic = models.CharField(max_length=500, help_text='逻辑表达式')\n    rule = models.JSONField(default=list, help_text='规则数组')\n    created_at = models.DateTimeField(auto_now_add=True)\n    \n    class Meta:\n        db_table = 'goby_fingerprint'\n        verbose_name = 'Goby 指纹'\n        verbose_name_plural = 'Goby 指纹'\n        ordering = ['-created_at']\n        indexes = [\n            models.Index(fields=['name']),\n            models.Index(fields=['logic']),\n            models.Index(fields=['-created_at']),\n        ]\n    \n    def __str__(self) -> str:\n        return f\"{self.name} ({self.logic})\"\n\n\nclass EholeFingerprint(models.Model):\n    \"\"\"EHole 格式指纹规则（字段与 ehole.json 一致）\"\"\"\n    \n    cms = models.CharField(max_length=200, help_text='产品/CMS名称')\n    method = models.CharField(max_length=200, default='keyword', help_text='匹配方式')\n    location = models.CharField(max_length=200, default='body', help_text='匹配位置')\n    keyword = models.JSONField(default=list, help_text='关键词列表')\n    is_important = models.BooleanField(default=False, help_text='是否重点资产')\n    type = models.CharField(max_length=100, blank=True, default='-', help_text='分类')\n    created_at = models.DateTimeField(auto_now_add=True)\n    \n    class Meta:\n        db_table = 'ehole_fingerprint'\n        verbose_name = 'EHole 指纹'\n        verbose_name_plural = 'EHole 指纹'\n        ordering = ['-created_at']\n        indexes = [\n            # 搜索过滤字段索引\n            models.Index(fields=['cms']),\n            models.Index(fields=['method']),\n            models.Index(fields=['location']),\n            models.Index(fields=['type']),\n            models.Index(fields=['is_important']),\n            # 排序字段索引\n            models.Index(fields=['-created_at']),\n        ]\n        constraints = [\n            # 唯一约束：cms + method + location 组合不能重复\n            models.UniqueConstraint(\n                fields=['cms', 'method', 'location'],\n                name='unique_ehole_fingerprint'\n            ),\n        ]\n    \n    def __str__(self) -> str:\n        return f\"{self.cms} ({self.method}@{self.location})\"\n\n\nclass WappalyzerFingerprint(models.Model):\n    \"\"\"Wappalyzer 格式指纹规则\n    \n    Wappalyzer 支持多种检测方式：cookies, headers, scriptSrc, js, meta, html 等\n    \"\"\"\n    \n    name = models.CharField(max_length=300, unique=True, help_text='应用名称')\n    cats = models.JSONField(default=list, help_text='分类 ID 数组')\n    cookies = models.JSONField(default=dict, blank=True, help_text='Cookie 检测规则')\n    headers = models.JSONField(default=dict, blank=True, help_text='HTTP Header 检测规则')\n    script_src = models.JSONField(default=list, blank=True, help_text='脚本 URL 正则数组')\n    js = models.JSONField(default=list, blank=True, help_text='JavaScript 变量检测规则')\n    implies = models.JSONField(default=list, blank=True, help_text='依赖关系数组')\n    meta = models.JSONField(default=dict, blank=True, help_text='HTML meta 标签检测规则')\n    html = models.JSONField(default=list, blank=True, help_text='HTML 内容正则数组')\n    description = models.TextField(blank=True, default='', help_text='应用描述')\n    website = models.URLField(max_length=500, blank=True, default='', help_text='官网链接')\n    cpe = models.CharField(max_length=300, blank=True, default='', help_text='CPE 标识符')\n    created_at = models.DateTimeField(auto_now_add=True)\n    \n    class Meta:\n        db_table = 'wappalyzer_fingerprint'\n        verbose_name = 'Wappalyzer 指纹'\n        verbose_name_plural = 'Wappalyzer 指纹'\n        ordering = ['-created_at']\n        indexes = [\n            models.Index(fields=['name']),\n            models.Index(fields=['website']),\n            models.Index(fields=['cpe']),\n            models.Index(fields=['-created_at']),\n        ]\n    \n    def __str__(self) -> str:\n        return f\"{self.name}\"\n\n\nclass FingersFingerprint(models.Model):\n    \"\"\"Fingers 格式指纹规则 (fingers_http.json)\n    \n    使用正则表达式和标签进行匹配，支持 favicon hash、header、body 等多种检测方式\n    \"\"\"\n    \n    name = models.CharField(max_length=300, unique=True, help_text='指纹名称')\n    link = models.URLField(max_length=500, blank=True, default='', help_text='相关链接')\n    rule = models.JSONField(default=list, help_text='匹配规则数组')\n    tag = models.JSONField(default=list, help_text='标签数组')\n    focus = models.BooleanField(default=False, help_text='是否重点关注')\n    default_port = models.JSONField(default=list, blank=True, help_text='默认端口数组')\n    created_at = models.DateTimeField(auto_now_add=True)\n    \n    class Meta:\n        db_table = 'fingers_fingerprint'\n        verbose_name = 'Fingers 指纹'\n        verbose_name_plural = 'Fingers 指纹'\n        ordering = ['-created_at']\n        indexes = [\n            models.Index(fields=['name']),\n            models.Index(fields=['link']),\n            models.Index(fields=['focus']),\n            models.Index(fields=['-created_at']),\n        ]\n    \n    def __str__(self) -> str:\n        return f\"{self.name}\"\n\n\nclass FingerPrintHubFingerprint(models.Model):\n    \"\"\"FingerPrintHub 格式指纹规则 (fingerprinthub_web.json)\n    \n    基于 nuclei 模板格式，使用 HTTP 请求和响应特征进行匹配\n    \"\"\"\n    \n    fp_id = models.CharField(max_length=200, unique=True, help_text='指纹ID')\n    name = models.CharField(max_length=300, help_text='指纹名称')\n    author = models.CharField(max_length=200, blank=True, default='', help_text='作者')\n    tags = models.CharField(max_length=500, blank=True, default='', help_text='标签')\n    severity = models.CharField(max_length=50, blank=True, default='info', help_text='严重程度')\n    metadata = models.JSONField(default=dict, blank=True, help_text='元数据')\n    http = models.JSONField(default=list, help_text='HTTP 匹配规则')\n    source_file = models.CharField(max_length=500, blank=True, default='', help_text='来源文件')\n    created_at = models.DateTimeField(auto_now_add=True)\n    \n    class Meta:\n        db_table = 'fingerprinthub_fingerprint'\n        verbose_name = 'FingerPrintHub 指纹'\n        verbose_name_plural = 'FingerPrintHub 指纹'\n        ordering = ['-created_at']\n        indexes = [\n            models.Index(fields=['fp_id']),\n            models.Index(fields=['name']),\n            models.Index(fields=['author']),\n            models.Index(fields=['severity']),\n            models.Index(fields=['-created_at']),\n        ]\n    \n    def __str__(self) -> str:\n        return f\"{self.name} ({self.fp_id})\"\n\n\nclass ARLFingerprint(models.Model):\n    \"\"\"ARL 格式指纹规则 (ARL.yaml)\n    \n    使用简单的 name + rule 表达式格式\n    \"\"\"\n    \n    name = models.CharField(max_length=300, unique=True, help_text='指纹名称')\n    rule = models.TextField(help_text='匹配规则表达式')\n    created_at = models.DateTimeField(auto_now_add=True)\n    \n    class Meta:\n        db_table = 'arl_fingerprint'\n        verbose_name = 'ARL 指纹'\n        verbose_name_plural = 'ARL 指纹'\n        ordering = ['-created_at']\n        indexes = [\n            models.Index(fields=['name']),\n            models.Index(fields=['-created_at']),\n        ]\n    \n    def __str__(self) -> str:\n        return f\"{self.name}\"\n"
  },
  {
    "path": "backend/apps/engine/repositories/__init__.py",
    "content": "\"\"\"Engine Repositories 模块\n\n提供 ScanEngine、WorkerNode、Wordlist、NucleiRepo 等数据访问层实现\n\"\"\"\n\nfrom .django_engine_repository import DjangoEngineRepository\nfrom .django_worker_repository import DjangoWorkerRepository\nfrom .django_wordlist_repository import DjangoWordlistRepository\nfrom .nuclei_repo_repository import NucleiTemplateRepository, TemplateFileRepository\n\n__all__ = [\n    \"DjangoEngineRepository\",\n    \"DjangoWorkerRepository\",\n    \"DjangoWordlistRepository\",\n    \"NucleiTemplateRepository\",\n    \"TemplateFileRepository\",\n]\n"
  },
  {
    "path": "backend/apps/engine/repositories/django_engine_repository.py",
    "content": "\"\"\"\nScanEngine 数据访问层 Django ORM 实现\n\n基于 Django ORM 的 ScanEngine Repository 实现类\n\"\"\"\n\nimport logging\n\nfrom ..models import ScanEngine\nfrom apps.common.decorators import auto_ensure_db_connection\n\nlogger = logging.getLogger(__name__)\n\n\n@auto_ensure_db_connection\nclass DjangoEngineRepository:\n    \"\"\"基于 Django ORM 的 ScanEngine 数据访问层实现\"\"\"\n    \n    def get_all(self):\n        \"\"\"获取所有扫描引擎查询集\"\"\"\n        return ScanEngine.objects.all().order_by('-created_at')  # type: ignore\n    \n    def get_by_id(self, engine_id: int) -> ScanEngine | None:\n        \"\"\"\n        根据 ID 获取扫描引擎\n        \n        Args:\n            engine_id: 引擎 ID\n        \n        Returns:\n            ScanEngine 对象或 None\n        \"\"\"\n        try:\n            return ScanEngine.objects.get(id=engine_id)  # type: ignore\n        except ScanEngine.DoesNotExist:  # type: ignore\n            logger.warning(\"ScanEngine 不存在 - Engine ID: %s\", engine_id)\n            return None\n\n\n__all__ = ['DjangoEngineRepository']\n"
  },
  {
    "path": "backend/apps/engine/repositories/django_wordlist_repository.py",
    "content": "\"\"\"Wordlist 数据访问层 Django ORM 实现\n\n基于 Django ORM 的 Wordlist Repository 实现类\n\"\"\"\n\nimport logging\n\nfrom apps.engine.models import Wordlist\nfrom apps.common.decorators import auto_ensure_db_connection\n\n\nlogger = logging.getLogger(__name__)\n\n\n@auto_ensure_db_connection\nclass DjangoWordlistRepository:\n    \"\"\"基于 Django ORM 的 Wordlist 数据访问层实现\"\"\"\n\n    def get_queryset(self):\n        \"\"\"获取字典查询集\"\"\"\n        return Wordlist.objects.all().order_by(\"-created_at\")\n\n    def get_by_id(self, wordlist_id: int) -> Wordlist | None:\n        \"\"\"根据 ID 获取字典\"\"\"\n        try:\n            return Wordlist.objects.get(id=wordlist_id)\n        except Wordlist.DoesNotExist:\n            logger.warning(\"Wordlist 不存在 - ID: %s\", wordlist_id)\n            return None\n\n    def get_by_name(self, name: str) -> Wordlist | None:\n        try:\n            return Wordlist.objects.get(name=name)\n        except Wordlist.DoesNotExist:\n            logger.warning(\"Wordlist 不存在 - 名称: %s\", name)\n            return None\n\n    def create(self, **kwargs) -> Wordlist:\n        \"\"\"创建字典记录\"\"\"\n        return Wordlist.objects.create(**kwargs)\n\n    def delete(self, wordlist_id: int) -> bool:\n        \"\"\"删除字典记录\"\"\"\n        wordlist = self.get_by_id(wordlist_id)\n        if not wordlist:\n            return False\n        wordlist.delete()\n        return True\n\n\n__all__ = [\"DjangoWordlistRepository\"]\n"
  },
  {
    "path": "backend/apps/engine/repositories/django_worker_repository.py",
    "content": "\"\"\"\nWorkerNode 数据访问层 Django ORM 实现\n\n基于 Django ORM 的 WorkerNode Repository 实现类\n\"\"\"\n\nimport logging\nfrom typing import Any\n\nfrom django.utils import timezone\n\nfrom apps.engine.models import WorkerNode\nfrom apps.common.decorators import auto_ensure_db_connection\n\nlogger = logging.getLogger(__name__)\n\n\n@auto_ensure_db_connection\nclass DjangoWorkerRepository:\n    \"\"\"基于 Django ORM 的 WorkerNode 数据访问层实现\"\"\"\n\n    def get_by_id(self, worker_id: int) -> WorkerNode | None:\n        \"\"\"根据 ID 获取 Worker 节点\"\"\"\n        try:\n            return WorkerNode.objects.get(id=worker_id)\n        except WorkerNode.DoesNotExist:\n            logger.warning(\"WorkerNode 不存在 - ID: %s\", worker_id)\n            return None\n\n    def get_all(self):\n        \"\"\"获取所有 Worker 节点的查询集\"\"\"\n        return WorkerNode.objects.all().order_by(\"-created_at\")\n\n    def update_status(self, worker_id: int, status: str) -> bool:\n        \"\"\"更新 Worker 节点状态\"\"\"\n        worker = self.get_by_id(worker_id)\n        if not worker:\n            return False\n\n        worker.status = status\n        worker.save(update_fields=[\"status\"])\n        logger.info(\"Worker %s 状态更新为: %s\", worker_id, status)\n        return True\n\n\n    def delete_by_id(self, worker_id: int) -> bool:\n        \"\"\"根据 ID 删除 Worker 节点\"\"\"\n        worker = self.get_by_id(worker_id)\n        if not worker:\n            return False\n\n        worker.delete()\n        logger.info(\"Worker %s 已删除\", worker_id)\n        return True\n\n    def get_or_create_by_name(\n        self, \n        name: str, \n        is_local: bool = True\n    ) -> tuple[WorkerNode, bool]:\n        \"\"\"\n        根据名称获取或创建 Worker 节点\n        \n        用于本地 Worker 自注册。\n        \n        Args:\n            name: Worker 名称\n            is_local: 是否为本地节点\n            \n        Returns:\n            (worker, created) 元组\n        \"\"\"\n        import socket\n        \n        # 尝试获取本机 IP\n        try:\n            hostname = socket.gethostname()\n            ip_address = socket.gethostbyname(hostname)\n        except Exception:\n            ip_address = '127.0.0.1'\n        \n        worker, created = WorkerNode.objects.get_or_create(\n            name=name,\n            defaults={\n                'ip_address': ip_address,\n                'is_local': is_local,\n                'status': 'offline',  # 等待心跳上报后自动变为 online\n            }\n        )\n        \n        if created:\n            logger.info(\"本地 Worker 注册成功: %s (IP: %s)\", name, ip_address)\n        else:\n            logger.debug(\"本地 Worker 已存在: %s\", name)\n        \n        return worker, created\n\n\n__all__ = [\"DjangoWorkerRepository\"]\n"
  },
  {
    "path": "backend/apps/engine/repositories/nuclei_repo_repository.py",
    "content": "\"\"\"Nuclei 模板仓库 Repository 层\n\n本模块包含两个 Repository 类，负责数据访问：\n\n1. NucleiTemplateRepository\n   - 职责：ORM 操作，按 ID 查询仓库配置\n   - 被 Service 层调用，不直接被 View 调用\n\n2. TemplateFileRepository\n   - 职责：文件系统操作，读取模板目录树和文件内容（只读）\n   - 按仓库的 local_path 构建，一个仓库对应一个实例\n\n调用链路：\n    View → Service → Repository → Model/FileSystem\n\"\"\"\n\nfrom __future__ import annotations\n\nimport os\nfrom pathlib import Path\nfrom typing import Dict, List, Optional\n\nfrom apps.common.decorators import auto_ensure_db_connection\nfrom apps.engine.models import NucleiTemplateRepo\n\n\n@auto_ensure_db_connection\nclass NucleiTemplateRepository:\n    \"\"\"Nuclei 模板仓库 ORM Repository\n\n    负责与 NucleiTemplateRepo 模型交互，提供按 ID 查询功能。\n    CRUD 操作由 DRF ModelViewSet 默认实现，这里只保留 Service 需要的查询方法。\n    \"\"\"\n\n    def get_by_id(self, repo_id: int) -> Optional[NucleiTemplateRepo]:\n        \"\"\"根据 ID 获取仓库对象\n\n        Args:\n            repo_id: 仓库 ID\n\n        Returns:\n            NucleiTemplateRepo 对象，不存在返回 None\n        \"\"\"\n        try:\n            return NucleiTemplateRepo.objects.get(id=repo_id)\n        except NucleiTemplateRepo.DoesNotExist:\n            return None\n\n\nclass TemplateFileRepository:\n    \"\"\"模板文件系统 Repository（只读）\n\n    负责读取指定根目录下的 Nuclei 模板文件。\n    每个仓库克隆到本地后，用这个类来读取目录树和文件内容。\n\n    Attributes:\n        root: 仓库本地根目录路径（即 git clone 的目标目录）\n    \"\"\"\n\n    def __init__(self, root: Path) -> None:\n        \"\"\"初始化文件系统 Repository\n\n        Args:\n            root: 仓库本地根目录路径（会自动转换为绝对路径）\n        \"\"\"\n        # 确保存储的是绝对路径\n        self.root = root.resolve()\n\n    def get_tree(self) -> List[Dict]:\n        \"\"\"获取模板目录树结构\n\n        遍历 root 目录，构建树形结构，只包含：\n        - 文件夹节点\n        - .yaml / .yml 文件节点\n\n        Returns:\n            树形结构列表，格式如下：\n            [\n                {\n                    \"type\": \"folder\",\n                    \"name\": \"nuclei-templates\",\n                    \"path\": \"\",\n                    \"children\": [\n                        {\"type\": \"folder\", \"name\": \"http\", \"path\": \"http\", \"children\": [...]},\n                        {\"type\": \"file\", \"name\": \"example.yaml\", \"path\": \"http/example.yaml\"}\n                    ]\n                }\n            ]\n        \"\"\"\n        # self.root 在 __init__ 中已确保是绝对路径\n        root_dir = self.root\n\n        # 根节点\n        root_node: Dict = {\n            \"type\": \"folder\",\n            \"name\": root_dir.name or \"root\",\n            \"path\": \"\",\n            \"children\": [],\n        }\n\n        # 目录不存在时返回空树\n        if not root_dir.exists() or not root_dir.is_dir():\n            return [root_node]\n\n        # 用于快速查找父节点\n        path_to_node: Dict[Path, Dict] = {root_dir: root_node}\n\n        # 遍历目录树\n        for dirpath, dirnames, filenames in os.walk(root_dir):\n            current_dir = Path(dirpath)\n            parent_node = path_to_node.get(current_dir)\n            if parent_node is None:\n                continue\n\n            # 添加子目录节点（按名称排序）\n            for dirname in sorted(dirnames):\n                child_fs_path = current_dir / dirname\n                rel = child_fs_path.relative_to(root_dir)\n                api_path = rel.as_posix()  # 使用 POSIX 风格路径（前端友好）\n\n                node: Dict = {\n                    \"type\": \"folder\",\n                    \"name\": dirname,\n                    \"path\": api_path,\n                    \"children\": [],\n                }\n                parent_node.setdefault(\"children\", []).append(node)\n                path_to_node[child_fs_path] = node\n\n            # 添加模板文件节点（仅 .yaml / .yml，按名称排序）\n            for filename in sorted(filenames):\n                if not (filename.endswith(\".yaml\") or filename.endswith(\".yml\")):\n                    continue\n\n                file_fs_path = current_dir / filename\n                rel = file_fs_path.relative_to(root_dir)\n                api_path = rel.as_posix()\n\n                file_node: Dict = {\n                    \"type\": \"file\",\n                    \"name\": filename,\n                    \"path\": api_path,\n                }\n                parent_node.setdefault(\"children\", []).append(file_node)\n\n        return [root_node]\n\n    def get_file_content(self, rel_path: str) -> Optional[Dict]:\n        \"\"\"根据相对路径获取模板文件内容\n\n        Args:\n            rel_path: 相对于 root 的路径，如 \"http/cves/CVE-2021-1234.yaml\"\n\n        Returns:\n            成功时返回：\n            {\n                \"path\": \"http/cves/CVE-2021-1234.yaml\",\n                \"name\": \"CVE-2021-1234.yaml\",\n                \"content\": \"id: CVE-2021-1234\\ninfo:\\n  name: ...\"\n            }\n            失败时返回 None（路径无效、文件不存在、读取失败等）\n        \"\"\"\n        # 清理路径\n        rel_path = (rel_path or \"\").strip().lstrip(\"/\")\n        if not rel_path:\n            return None\n\n        # self.root 在 __init__ 中已确保是绝对路径\n        base_dir = self.root\n        # 拼接后 resolve() 确保解析 .. 等相对路径符号（防止目录遍历攻击）\n        target_path = (base_dir / rel_path).resolve()\n\n        # 防止目录遍历攻击：确保目标路径在 base_dir 内\n        try:\n            target_path.relative_to(base_dir)\n        except ValueError:\n            return None\n\n        # 检查文件是否存在\n        if not target_path.is_file():\n            return None\n\n        # 读取文件内容\n        try:\n            content = target_path.read_text(encoding=\"utf-8\", errors=\"replace\")\n        except OSError:\n            return None\n\n        return {\n            \"path\": rel_path,\n            \"name\": target_path.name,\n            \"content\": content,\n        }\n\n\n__all__ = [\"NucleiTemplateRepository\", \"TemplateFileRepository\"]\n"
  },
  {
    "path": "backend/apps/engine/routing.py",
    "content": "\"\"\"\nWorker WebSocket 路由配置\n\"\"\"\n\nfrom django.urls import path\nfrom .consumers import WorkerDeployConsumer\n\nwebsocket_urlpatterns = [\n    path('ws/workers/<int:worker_id>/deploy/', WorkerDeployConsumer.as_asgi()),\n]\n"
  },
  {
    "path": "backend/apps/engine/scheduler.py",
    "content": "\"\"\"\nAPScheduler 定时任务调度器\n\n替代 Prefect Work Pool，用于触发定时任务。\n实际任务执行通过 task_distributor 分发到各 Worker。\n\"\"\"\nimport logging\nfrom apscheduler.schedulers.background import BackgroundScheduler\nfrom apscheduler.triggers.cron import CronTrigger\nfrom apscheduler.triggers.interval import IntervalTrigger\nfrom django.conf import settings\n\nlogger = logging.getLogger(__name__)\n\n# 全局调度器实例\n_scheduler: BackgroundScheduler | None = None\n\n\ndef get_scheduler() -> BackgroundScheduler:\n    \"\"\"获取调度器实例\"\"\"\n    global _scheduler\n    if _scheduler is None:\n        _scheduler = BackgroundScheduler(\n            timezone=settings.TIME_ZONE,\n            job_defaults={\n                'coalesce': True,  # 合并错过的任务\n                'max_instances': 1,  # 同一任务最多同时运行1个实例\n                'misfire_grace_time': 60 * 5,  # 错过5分钟内仍然执行\n            }\n        )\n    return _scheduler\n\n\ndef start_scheduler():\n    \"\"\"启动调度器并注册所有定时任务\"\"\"\n    scheduler = get_scheduler()\n    \n    if scheduler.running:\n        logger.info(\"调度器已在运行\")\n        return\n    \n    # 注册定时任务\n    _register_scheduled_jobs(scheduler)\n    \n    # 启动调度器\n    scheduler.start()\n    logger.info(\"✓ APScheduler 定时调度器已启动\")\n\n\ndef shutdown_scheduler():\n    \"\"\"关闭调度器\"\"\"\n    global _scheduler\n    if _scheduler and _scheduler.running:\n        _scheduler.shutdown(wait=False)\n        logger.info(\"APScheduler 调度器已关闭\")\n    _scheduler = None\n\n\ndef _register_scheduled_jobs(scheduler: BackgroundScheduler):\n    \"\"\"注册所有定时任务\"\"\"\n    \n    # 1. 定时扫描任务（检查并执行到期的定时扫描）\n    scheduler.add_job(\n        _trigger_scheduled_scans,\n        trigger=IntervalTrigger(minutes=1),  # 每分钟检查并触发到期任务\n        id='scheduled_scans',\n        name='定时扫描任务',\n        replace_existing=True,\n    )\n    logger.info(\"  - 已注册: 定时扫描任务（每分钟）\")\n    \n    # 2. 资产统计刷新（每小时）\n    scheduler.add_job(\n        _trigger_statistics_refresh,\n        trigger=CronTrigger(minute=0),  # 每小时整点\n        id='statistics_refresh',\n        name='资产统计刷新',\n        replace_existing=True,\n    )\n    logger.info(\"  - 已注册: 资产统计刷新（每小时）\")\n    \n    # 3. 扫描结果清理（每天凌晨3点）\n    scheduler.add_job(\n        _trigger_cleanup,\n        trigger=CronTrigger(hour=3, minute=0),\n        id='scan_cleanup',\n        name='扫描结果清理',\n        replace_existing=True,\n    )\n    logger.info(\"  - 已注册: 扫描结果清理（每天 03:00）\")\n    \n    # 注意：搜索物化视图刷新已迁移到 pg_ivm 增量维护，无需定时任务\n\n\ndef _trigger_scheduled_scans():\n    \"\"\"触发到期的定时扫描任务\"\"\"\n    try:\n        from apps.scan.services.scheduled_scan_service import ScheduledScanService\n        \n        service = ScheduledScanService()\n        triggered_count = service.trigger_due_scans()\n        \n        if triggered_count > 0:\n            logger.info(f\"定时扫描: 已触发 {triggered_count} 个任务\")\n            \n    except Exception as e:\n        logger.error(f\"定时扫描任务执行失败: {e}\", exc_info=True)\n\n\ndef _trigger_statistics_refresh():\n    \"\"\"触发资产统计刷新\"\"\"\n    try:\n        from apps.asset.services.statistics_service import AssetStatisticsService\n        \n        service = AssetStatisticsService()\n        service.refresh_statistics()\n        \n        logger.info(\"资产统计刷新完成\")\n        \n    except Exception as e:\n        logger.error(f\"资产统计刷新失败: {e}\", exc_info=True)\n\n\ndef _trigger_cleanup():\n    \"\"\"触发扫描结果清理（分发到各 Worker）\"\"\"\n    try:\n        from apps.engine.services.task_distributor import TaskDistributor\n        \n        distributor = TaskDistributor()\n        results = distributor.execute_cleanup_on_all_workers()\n        \n        logger.info(f\"扫描清理任务已分发到 {len(results)} 个 Worker\")\n        \n    except Exception as e:\n        logger.error(f\"扫描清理任务分发失败: {e}\", exc_info=True)\n"
  },
  {
    "path": "backend/apps/engine/serializers/__init__.py",
    "content": "\"\"\"\nEngine Serializers\n\"\"\"\nfrom .worker_serializer import WorkerNodeSerializer\nfrom .engine_serializer import ScanEngineSerializer\nfrom .wordlist_serializer import WordlistSerializer\nfrom .nuclei_template_repo_serializer import NucleiTemplateRepoSerializer\n\n__all__ = [\n    \"WorkerNodeSerializer\",\n    \"ScanEngineSerializer\",\n    \"WordlistSerializer\",\n    \"NucleiTemplateRepoSerializer\",\n]\n"
  },
  {
    "path": "backend/apps/engine/serializers/engine_serializer.py",
    "content": "\"\"\"\n扫描引擎序列化器\n\"\"\"\nfrom rest_framework import serializers\nfrom apps.engine.models import ScanEngine\n\n\nclass ScanEngineSerializer(serializers.ModelSerializer):\n    \"\"\"扫描引擎序列化器\"\"\"\n    \n    class Meta:\n        model = ScanEngine\n        fields = [\n            'id',\n            'name',\n            'configuration',\n            'created_at',\n            'updated_at',\n        ]\n        read_only_fields = ['id', 'created_at', 'updated_at']\n    \n    def to_representation(self, instance):\n        \"\"\"自定义序列化输出\"\"\"\n        data = super().to_representation(instance)\n        # 确保 configuration 字段存在且不为 null\n        if data.get('configuration') is None:\n            data['configuration'] = ''\n        return data\n    \n    def validate_name(self, value):\n        \"\"\"验证引擎名称\"\"\"\n        if not value.strip():\n            raise serializers.ValidationError(\"引擎名称不能为空\")\n        return value.strip()\n    \n    def validate_configuration(self, value):\n        \"\"\"验证 YAML 配置\"\"\"\n        if value:\n            # 可以在这里添加 YAML 格式验证\n            import yaml\n            try:\n                yaml.safe_load(value)\n            except yaml.YAMLError as e:\n                raise serializers.ValidationError(f\"YAML 格式错误: {str(e)}\")\n        return value\n"
  },
  {
    "path": "backend/apps/engine/serializers/fingerprints/__init__.py",
    "content": "\"\"\"指纹管理 Serializers\n\n导出所有指纹相关的 Serializer 类\n\"\"\"\n\nfrom .ehole import EholeFingerprintSerializer\nfrom .goby import GobyFingerprintSerializer\nfrom .wappalyzer import WappalyzerFingerprintSerializer\nfrom .fingers import FingersFingerprintSerializer\nfrom .fingerprinthub import FingerPrintHubFingerprintSerializer\nfrom .arl import ARLFingerprintSerializer\n\n__all__ = [\n    \"EholeFingerprintSerializer\",\n    \"GobyFingerprintSerializer\",\n    \"WappalyzerFingerprintSerializer\",\n    \"FingersFingerprintSerializer\",\n    \"FingerPrintHubFingerprintSerializer\",\n    \"ARLFingerprintSerializer\",\n]\n"
  },
  {
    "path": "backend/apps/engine/serializers/fingerprints/arl.py",
    "content": "\"\"\"ARL 指纹 Serializer\"\"\"\n\nfrom rest_framework import serializers\n\nfrom apps.engine.models import ARLFingerprint\n\n\nclass ARLFingerprintSerializer(serializers.ModelSerializer):\n    \"\"\"ARL 指纹序列化器\n    \n    字段映射:\n    - name: 指纹名称 (必填, 唯一)\n    - rule: 匹配规则表达式 (必填)\n    \"\"\"\n    \n    class Meta:\n        model = ARLFingerprint\n        fields = ['id', 'name', 'rule', 'created_at']\n        read_only_fields = ['id', 'created_at']\n    \n    def validate_name(self, value):\n        \"\"\"校验 name 字段\"\"\"\n        if not value or not value.strip():\n            raise serializers.ValidationError(\"name 字段不能为空\")\n        return value.strip()\n    \n    def validate_rule(self, value):\n        \"\"\"校验 rule 字段\"\"\"\n        if not value or not value.strip():\n            raise serializers.ValidationError(\"rule 字段不能为空\")\n        return value.strip()\n"
  },
  {
    "path": "backend/apps/engine/serializers/fingerprints/ehole.py",
    "content": "\"\"\"EHole 指纹 Serializer\"\"\"\n\nfrom rest_framework import serializers\n\nfrom apps.engine.models import EholeFingerprint\n\n\nclass EholeFingerprintSerializer(serializers.ModelSerializer):\n    \"\"\"EHole 指纹序列化器\"\"\"\n    \n    class Meta:\n        model = EholeFingerprint\n        fields = ['id', 'cms', 'method', 'location', 'keyword', \n                  'is_important', 'type', 'created_at']\n        read_only_fields = ['id', 'created_at']\n    \n    def validate_cms(self, value):\n        \"\"\"校验 cms 字段\"\"\"\n        if not value or not value.strip():\n            raise serializers.ValidationError(\"cms 字段不能为空\")\n        return value.strip()\n    \n    def validate_keyword(self, value):\n        \"\"\"校验 keyword 字段\"\"\"\n        if not isinstance(value, list):\n            raise serializers.ValidationError(\"keyword 必须是数组\")\n        return value\n"
  },
  {
    "path": "backend/apps/engine/serializers/fingerprints/fingerprinthub.py",
    "content": "\"\"\"FingerPrintHub 指纹 Serializer\"\"\"\n\nfrom rest_framework import serializers\n\nfrom apps.engine.models import FingerPrintHubFingerprint\n\n\nclass FingerPrintHubFingerprintSerializer(serializers.ModelSerializer):\n    \"\"\"FingerPrintHub 指纹序列化器\n    \n    字段映射:\n    - fp_id: 指纹ID (必填, 唯一)\n    - name: 指纹名称 (必填)\n    - author: 作者 (可选)\n    - tags: 标签字符串 (可选)\n    - severity: 严重程度 (可选, 默认 'info')\n    - metadata: 元数据 JSON (可选)\n    - http: HTTP 匹配规则数组 (必填)\n    - source_file: 来源文件 (可选)\n    \"\"\"\n    \n    class Meta:\n        model = FingerPrintHubFingerprint\n        fields = ['id', 'fp_id', 'name', 'author', 'tags', 'severity',\n                  'metadata', 'http', 'source_file', 'created_at']\n        read_only_fields = ['id', 'created_at']\n    \n    def validate_fp_id(self, value):\n        \"\"\"校验 fp_id 字段\"\"\"\n        if not value or not value.strip():\n            raise serializers.ValidationError(\"fp_id 字段不能为空\")\n        return value.strip()\n    \n    def validate_name(self, value):\n        \"\"\"校验 name 字段\"\"\"\n        if not value or not value.strip():\n            raise serializers.ValidationError(\"name 字段不能为空\")\n        return value.strip()\n    \n    def validate_http(self, value):\n        \"\"\"校验 http 字段\"\"\"\n        if not isinstance(value, list):\n            raise serializers.ValidationError(\"http 必须是数组\")\n        return value\n    \n    def validate_metadata(self, value):\n        \"\"\"校验 metadata 字段\"\"\"\n        if not isinstance(value, dict):\n            raise serializers.ValidationError(\"metadata 必须是对象\")\n        return value\n"
  },
  {
    "path": "backend/apps/engine/serializers/fingerprints/fingers.py",
    "content": "\"\"\"Fingers 指纹 Serializer\"\"\"\n\nfrom rest_framework import serializers\n\nfrom apps.engine.models import FingersFingerprint\n\n\nclass FingersFingerprintSerializer(serializers.ModelSerializer):\n    \"\"\"Fingers 指纹序列化器\n    \n    字段映射:\n    - name: 指纹名称 (必填, 唯一)\n    - link: 相关链接 (可选)\n    - rule: 匹配规则数组 (必填)\n    - tag: 标签数组 (可选)\n    - focus: 是否重点关注 (可选, 默认 False)\n    - default_port: 默认端口数组 (可选)\n    \"\"\"\n    \n    class Meta:\n        model = FingersFingerprint\n        fields = ['id', 'name', 'link', 'rule', 'tag', 'focus', \n                  'default_port', 'created_at']\n        read_only_fields = ['id', 'created_at']\n    \n    def validate_name(self, value):\n        \"\"\"校验 name 字段\"\"\"\n        if not value or not value.strip():\n            raise serializers.ValidationError(\"name 字段不能为空\")\n        return value.strip()\n    \n    def validate_rule(self, value):\n        \"\"\"校验 rule 字段\"\"\"\n        if not isinstance(value, list):\n            raise serializers.ValidationError(\"rule 必须是数组\")\n        return value\n    \n    def validate_tag(self, value):\n        \"\"\"校验 tag 字段\"\"\"\n        if not isinstance(value, list):\n            raise serializers.ValidationError(\"tag 必须是数组\")\n        return value\n    \n    def validate_default_port(self, value):\n        \"\"\"校验 default_port 字段\"\"\"\n        if not isinstance(value, list):\n            raise serializers.ValidationError(\"default_port 必须是数组\")\n        return value\n"
  },
  {
    "path": "backend/apps/engine/serializers/fingerprints/goby.py",
    "content": "\"\"\"Goby 指纹 Serializer\"\"\"\n\nfrom rest_framework import serializers\n\nfrom apps.engine.models import GobyFingerprint\n\n\nclass GobyFingerprintSerializer(serializers.ModelSerializer):\n    \"\"\"Goby 指纹序列化器\"\"\"\n    \n    class Meta:\n        model = GobyFingerprint\n        fields = ['id', 'name', 'logic', 'rule', 'created_at']\n        read_only_fields = ['id', 'created_at']\n    \n    def validate_name(self, value):\n        \"\"\"校验 name 字段\"\"\"\n        if not value or not value.strip():\n            raise serializers.ValidationError(\"name 字段不能为空\")\n        return value.strip()\n    \n    def validate_rule(self, value):\n        \"\"\"校验 rule 字段\"\"\"\n        if not isinstance(value, list):\n            raise serializers.ValidationError(\"rule 必须是数组\")\n        return value\n"
  },
  {
    "path": "backend/apps/engine/serializers/fingerprints/wappalyzer.py",
    "content": "\"\"\"Wappalyzer 指纹 Serializer\"\"\"\n\nfrom rest_framework import serializers\n\nfrom apps.engine.models import WappalyzerFingerprint\n\n\nclass WappalyzerFingerprintSerializer(serializers.ModelSerializer):\n    \"\"\"Wappalyzer 指纹序列化器\"\"\"\n    \n    class Meta:\n        model = WappalyzerFingerprint\n        fields = [\n            'id', 'name', 'cats', 'cookies', 'headers', 'script_src',\n            'js', 'implies', 'meta', 'html', 'description', 'website',\n            'cpe', 'created_at'\n        ]\n        read_only_fields = ['id', 'created_at']\n    \n    def validate_name(self, value):\n        \"\"\"校验 name 字段\"\"\"\n        if not value or not value.strip():\n            raise serializers.ValidationError(\"name 字段不能为空\")\n        return value.strip()\n"
  },
  {
    "path": "backend/apps/engine/serializers/nuclei_template_repo_serializer.py",
    "content": "\"\"\"Nuclei 模板仓库序列化器\n\n用于 DRF ModelViewSet 的 CRUD 操作，将 NucleiTemplateRepo 模型序列化为 JSON。\n\n字段说明：\n- id: 仓库 ID（只读，自动生成）\n- name: 仓库名称，用于前端展示\n- repo_url: Git 仓库地址，如 https://github.com/projectdiscovery/nuclei-templates.git\n- local_path: 本地克隆路径（只读，由后端自动生成）\n- last_synced_at: 最后同步时间（只读）\n- created_at: 创建时间（只读）\n- updated_at: 更新时间（只读）\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom rest_framework import serializers\n\nfrom apps.engine.models import NucleiTemplateRepo\n\n\nclass NucleiTemplateRepoSerializer(serializers.ModelSerializer):\n    \"\"\"Nuclei 模板仓库序列化器\n\n    用于仓库的 CRUD API 响应。\n    \"\"\"\n\n    class Meta:\n        model = NucleiTemplateRepo\n        fields = [\n            \"id\",           # 仓库 ID（只读）\n            \"name\",         # 仓库名称\n            \"repo_url\",     # Git 仓库地址\n            \"local_path\",   # 本地克隆路径（只读）\n            \"commit_hash\",  # 最后同步的 commit hash（只读）\n            \"last_synced_at\",  # 最后同步时间（只读）\n            \"created_at\",   # 创建时间（只读）\n            \"updated_at\",   # 更新时间（只读）\n        ]\n        read_only_fields = [\n            \"id\",\n            \"local_path\",      # 由后端根据 name 自动生成\n            \"commit_hash\",     # 由 refresh 操作更新\n            \"last_synced_at\",  # 由 refresh 操作更新\n            \"created_at\",\n            \"updated_at\",\n        ]\n\n\n__all__ = [\"NucleiTemplateRepoSerializer\"]\n"
  },
  {
    "path": "backend/apps/engine/serializers/wordlist_serializer.py",
    "content": "\"\"\"字典文件序列化器\"\"\"\n\nfrom rest_framework import serializers\n\nfrom apps.engine.models import Wordlist\n\n\nclass WordlistSerializer(serializers.ModelSerializer):\n    \"\"\"字典文件序列化器\"\"\"\n\n    class Meta:\n        model = Wordlist\n        fields = [\n            \"id\",\n            \"name\",\n            \"description\",\n            \"file_path\",\n            \"file_size\",\n            \"line_count\",\n            \"file_hash\",\n            \"created_at\",\n            \"updated_at\",\n        ]\n        read_only_fields = [\n            \"id\",\n            \"file_path\",\n            \"file_size\",\n            \"line_count\",\n            \"file_hash\",\n            \"created_at\",\n            \"updated_at\",\n        ]\n"
  },
  {
    "path": "backend/apps/engine/serializers/worker_serializer.py",
    "content": "\"\"\"\nWorker 节点序列化器\n\"\"\"\nfrom rest_framework import serializers\nfrom apps.engine.models import WorkerNode\n\n\nclass WorkerNodeSerializer(serializers.ModelSerializer):\n    \"\"\"\n    Worker 节点序列化器\n    \n    优化：通过 context['loads'] 传入批量查询的 Redis 数据，避免 N+1 查询\n    \"\"\"\n    \n    # 密码只写（不返回给前端）\n    password = serializers.CharField(write_only=True, required=False, allow_blank=True)\n    \n    # 状态（数据库存储 + Redis 心跳补充判断）\n    status = serializers.SerializerMethodField()\n    \n    # 负载数据（从 Redis 读取）\n    info = serializers.SerializerMethodField()\n    \n    class Meta:\n        model = WorkerNode\n        fields = ['id', 'name', 'ip_address', 'ssh_port', 'username', 'status', \n                  'is_local', 'info', 'created_at', 'updated_at', 'password']\n        read_only_fields = ['id', 'status', 'is_local', 'info', 'created_at', 'updated_at']\n    \n    def _get_load_from_context(self, worker_id: int) -> dict | None:\n        \"\"\"从 context 获取预加载的负载数据\"\"\"\n        loads = self.context.get('loads', {})\n        return loads.get(worker_id)\n    \n    def get_status(self, obj) -> str:\n        \"\"\"\n        获取状态（前后端统一）：\n        - pending/deploying: 直接返回数据库值\n        - online/offline: 通过 Redis 心跳动态判断\n        \"\"\"\n        # pending 和 deploying 直接返回\n        if obj.status in ('pending', 'deploying'):\n            return obj.status\n        \n        # online/offline 通过 Redis 心跳判断\n        # 优先从 context 获取（批量查询）\n        load = self._get_load_from_context(obj.id)\n        if load is not None:\n            return 'online'\n        \n        # 回退：单独查询 Redis\n        from apps.engine.services.worker_load_service import worker_load_service\n        if worker_load_service.is_online(obj.id):\n            return 'online'\n        return 'offline'\n    \n    def get_info(self, obj) -> dict | None:\n        \"\"\"获取负载数据\n        \n        注意：返回的字典键名使用 camelCase，因为 djangorestframework_camel_case\n        只转换序列化器字段名，不会递归转换 SerializerMethodField 返回的嵌套字典\n        \"\"\"\n        # 优先从 context 获取（批量查询）\n        load = self._get_load_from_context(obj.id)\n        if load is not None:\n            return {\n                'cpuPercent': load.get('cpu', 0),\n                'memoryPercent': load.get('mem', 0),\n            }\n        \n        # 回退：单独查询 Redis\n        from apps.engine.services.worker_load_service import worker_load_service\n        load = worker_load_service.get_load(obj.id)\n        if load:\n            return {\n                'cpuPercent': load.get('cpu', 0),\n                'memoryPercent': load.get('mem', 0),\n            }\n        return None\n    \n    def create(self, validated_data):\n        \"\"\"创建时保存密码\"\"\"\n        return super().create(validated_data)\n    \n    def update(self, instance, validated_data):\n        \"\"\"更新时，如果密码为空则不更新密码\"\"\"\n        password = validated_data.get('password', '')\n        if not password:\n            validated_data.pop('password', None)\n        return super().update(instance, validated_data)\n"
  },
  {
    "path": "backend/apps/engine/services/__init__.py",
    "content": "\"\"\"\nEngine 服务层\n\"\"\"\n\nfrom .engine_service import EngineService\nfrom .worker_service import WorkerService\nfrom .wordlist_service import WordlistService\nfrom .nuclei_template_repo_service import NucleiTemplateRepoService\nfrom .deploy_service import (\n    get_bootstrap_script,\n    get_deploy_script,\n    get_start_agent_script,\n    get_uninstall_script,\n)\n\n__all__ = [\n    \"EngineService\",\n    \"WorkerService\",\n    \"WordlistService\",\n    \"NucleiTemplateRepoService\",\n    \"get_bootstrap_script\",\n    \"get_deploy_script\",\n    \"get_start_agent_script\",\n    \"get_uninstall_script\",\n]\n"
  },
  {
    "path": "backend/apps/engine/services/deploy_service.py",
    "content": "\"\"\"\n远程节点部署脚本服务\n\n脚本文件位置：backend/scripts/worker-deploy/\n- bootstrap.sh: 环境初始化（安装基础依赖）\n- install.sh: 安装 Docker + 拉取镜像\n- uninstall.sh: 卸载脚本\n- start-agent.sh: 启动 agent 容器\n- agent.sh: 心跳上报（在容器内运行）\n\n新架构说明：\n- 远程节点只需安装 Docker 和运行 agent\n- 扫描任务由主服务器通过 SSH docker run 执行\n\"\"\"\n\nfrom pathlib import Path\nfrom django.conf import settings\n\n# 脚本目录\nSCRIPTS_DIR = Path(__file__).parent.parent.parent.parent / \"scripts\" / \"worker-deploy\"\n\n\ndef _read_script(filename: str) -> str:\n    \"\"\"读取脚本文件内容\"\"\"\n    script_path = SCRIPTS_DIR / filename\n    if script_path.exists():\n        return script_path.read_text()\n    else:\n        raise FileNotFoundError(f\"脚本文件不存在: {script_path}\")\n\n\ndef get_bootstrap_script() -> str:\n    \"\"\"获取环境初始化脚本\"\"\"\n    return _read_script(\"bootstrap.sh\")\n\n\ndef get_deploy_script() -> str:\n    \"\"\"获取安装脚本（安装 Docker + 拉取镜像）\"\"\"\n    script = _read_script(\"install.sh\")\n    # 注入镜像版本配置（确保远程节点使用相同版本）\n    docker_user = getattr(settings, 'DOCKER_USER', 'yyhuni')\n    image_tag = settings.IMAGE_TAG  # 必须有值，settings.py 启动时已校验\n    version_export = f'export DOCKER_USER=\"{docker_user}\"\\nexport IMAGE_TAG=\"{image_tag}\"\\n'\n    # 在 set -e 后插入版本配置\n    script = script.replace('set -e\\n', f'set -e\\n\\n{version_export}', 1)\n    return script\n\n\ndef get_uninstall_script() -> str:\n    \"\"\"获取卸载脚本\"\"\"\n    return _read_script(\"uninstall.sh\")\n\n\ndef get_start_agent_script(\n    heartbeat_api_url: str = None,\n    worker_id: int = None\n) -> str:\n    \"\"\"\n    获取 agent 启动脚本\n    \n    :param heartbeat_api_url: 心跳上报地址\n    :param worker_id: Worker ID\n    \"\"\"\n    script = _read_script(\"start-agent.sh\")\n    \n    # 替换变量\n    script = script.replace(\"{{HEARTBEAT_API_URL}}\", heartbeat_api_url or '')\n    script = script.replace(\"{{WORKER_ID}}\", str(worker_id) if worker_id else '')\n    script = script.replace(\"{{WORKER_API_KEY}}\", getattr(settings, 'WORKER_API_KEY', ''))\n    \n    # 注入镜像版本配置（确保远程节点使用相同版本）\n    docker_user = getattr(settings, 'DOCKER_USER', 'yyhuni')\n    image_tag = settings.IMAGE_TAG  # 必须有值，settings.py 启动时已校验\n    version_export = f'export DOCKER_USER=\"{docker_user}\"\\nexport IMAGE_TAG=\"{image_tag}\"\\n'\n    # 在 set -e 后插入版本配置\n    script = script.replace('set -e\\n', f'set -e\\n\\n{version_export}', 1)\n    \n    return script\n"
  },
  {
    "path": "backend/apps/engine/services/engine_service.py",
    "content": "\"\"\"\nScanEngine 业务逻辑服务层（Service）\n\n负责扫描引擎相关的业务逻辑处理\n\"\"\"\n\nimport logging\n\nfrom ..models import ScanEngine\nfrom ..repositories import DjangoEngineRepository\n\nlogger = logging.getLogger(__name__)\n\n\nclass EngineService:\n    \"\"\"ScanEngine 业务逻辑服务\"\"\"\n    \n    def __init__(self):\n        \"\"\"初始化服务，注入 Repository 依赖\"\"\"\n        self.repo = DjangoEngineRepository()\n    \n    def get_engine(self, engine_id: int) -> ScanEngine | None:\n        \"\"\"\n        获取扫描引擎\n        \n        Args:\n            engine_id: 引擎 ID\n        \n        Returns:\n            ScanEngine 对象或 None\n        \"\"\"\n        return self.repo.get_by_id(engine_id)\n    \n    def get_all_engines(self):\n        \"\"\"获取所有扫描引擎查询集\"\"\"\n        return self.repo.get_all()\n\n\n__all__ = ['EngineService']\n"
  },
  {
    "path": "backend/apps/engine/services/fingerprints/__init__.py",
    "content": "\"\"\"指纹管理 Services\n\n导出所有指纹相关的 Service 类\n\"\"\"\n\nfrom .base import BaseFingerprintService\nfrom .ehole import EholeFingerprintService\nfrom .goby import GobyFingerprintService\nfrom .wappalyzer import WappalyzerFingerprintService\nfrom .fingers_service import FingersFingerprintService\nfrom .fingerprinthub_service import FingerPrintHubFingerprintService\nfrom .arl_service import ARLFingerprintService\n\n__all__ = [\n    \"BaseFingerprintService\",\n    \"EholeFingerprintService\",\n    \"GobyFingerprintService\",\n    \"WappalyzerFingerprintService\",\n    \"FingersFingerprintService\",\n    \"FingerPrintHubFingerprintService\",\n    \"ARLFingerprintService\",\n]\n"
  },
  {
    "path": "backend/apps/engine/services/fingerprints/arl_service.py",
    "content": "\"\"\"ARL 指纹管理 Service\n\n实现 ARL 格式指纹的校验、转换和导出逻辑\n支持 YAML 格式的导入导出\n\"\"\"\n\nimport logging\nimport yaml\n\nfrom apps.engine.models import ARLFingerprint\nfrom .base import BaseFingerprintService\n\nlogger = logging.getLogger(__name__)\n\n\nclass ARLFingerprintService(BaseFingerprintService):\n    \"\"\"ARL 指纹管理服务（继承基类，实现 ARL 特定逻辑）\"\"\"\n    \n    model = ARLFingerprint\n    \n    def validate_fingerprint(self, item: dict) -> bool:\n        \"\"\"\n        校验单条 ARL 指纹\n        \n        校验规则：\n        - name 字段必须存在且非空\n        - rule 字段必须存在且非空\n        \n        Args:\n            item: 单条指纹数据\n            \n        Returns:\n            bool: 是否有效\n        \"\"\"\n        name = item.get('name', '')\n        rule = item.get('rule', '')\n        return bool(name and str(name).strip()) and bool(rule and str(rule).strip())\n    \n    def to_model_data(self, item: dict) -> dict:\n        \"\"\"\n        转换 ARL YAML 格式为 Model 字段\n        \n        Args:\n            item: 原始 ARL YAML 数据\n            \n        Returns:\n            dict: Model 字段数据\n        \"\"\"\n        return {\n            'name': str(item.get('name', '')).strip(),\n            'rule': str(item.get('rule', '')).strip(),\n        }\n    \n    def get_export_data(self) -> list:\n        \"\"\"\n        获取导出数据（ARL 格式 - 数组，用于 YAML 导出）\n        \n        Returns:\n            list: ARL 格式的数据（数组格式）\n            [\n                {\"name\": \"...\", \"rule\": \"...\"},\n                ...\n            ]\n        \"\"\"\n        fingerprints = self.model.objects.all()\n        return [\n            {\n                'name': fp.name,\n                'rule': fp.rule,\n            }\n            for fp in fingerprints\n        ]\n    \n    def export_to_yaml(self, output_path: str) -> int:\n        \"\"\"\n        导出所有指纹到 YAML 文件\n        \n        Args:\n            output_path: 输出文件路径\n            \n        Returns:\n            int: 导出的指纹数量\n        \"\"\"\n        data = self.get_export_data()\n        with open(output_path, 'w', encoding='utf-8') as f:\n            yaml.dump(data, f, allow_unicode=True, default_flow_style=False, sort_keys=False)\n        count = len(data)\n        logger.info(\"导出 ARL 指纹文件: %s, 数量: %d\", output_path, count)\n        return count\n    \n    def parse_yaml_import(self, yaml_content: str) -> list:\n        \"\"\"\n        解析 YAML 格式的导入内容\n        \n        Args:\n            yaml_content: YAML 格式的字符串内容\n            \n        Returns:\n            list: 解析后的指纹数据列表\n            \n        Raises:\n            ValueError: 当 YAML 格式无效时\n        \"\"\"\n        try:\n            data = yaml.safe_load(yaml_content)\n            if not isinstance(data, list):\n                raise ValueError(\"ARL YAML 文件必须是数组格式\")\n            return data\n        except yaml.YAMLError as e:\n            raise ValueError(f\"无效的 YAML 格式: {e}\")\n"
  },
  {
    "path": "backend/apps/engine/services/fingerprints/base.py",
    "content": "\"\"\"指纹管理基类 Service\n\n提供通用的批量操作和缓存逻辑，供 EHole/Goby/Wappalyzer 等子类继承\n\"\"\"\n\nimport json\nimport logging\nfrom typing import Any\n\nlogger = logging.getLogger(__name__)\n\n\nclass BaseFingerprintService:\n    \"\"\"指纹管理基类 Service，提供通用的批量操作和缓存逻辑\"\"\"\n    \n    model = None  # 子类必须指定\n    BATCH_SIZE = 1000  # 每批处理数量\n    \n    def validate_fingerprint(self, item: dict) -> bool:\n        \"\"\"\n        校验单条指纹，子类必须实现\n        \n        Args:\n            item: 单条指纹数据\n            \n        Returns:\n            bool: 是否有效\n        \"\"\"\n        raise NotImplementedError(\"子类必须实现 validate_fingerprint 方法\")\n    \n    def validate_fingerprints(self, raw_data: list) -> tuple[list, list]:\n        \"\"\"\n        批量校验指纹数据\n        \n        Args:\n            raw_data: 原始指纹数据列表\n            \n        Returns:\n            tuple: (valid_items, invalid_items)\n        \"\"\"\n        valid, invalid = [], []\n        for item in raw_data:\n            if self.validate_fingerprint(item):\n                valid.append(item)\n            else:\n                invalid.append(item)\n        return valid, invalid\n    \n    def to_model_data(self, item: dict) -> dict:\n        \"\"\"\n        转换为 Model 字段，子类必须实现\n        \n        Args:\n            item: 原始指纹数据\n            \n        Returns:\n            dict: Model 字段数据\n        \"\"\"\n        raise NotImplementedError(\"子类必须实现 to_model_data 方法\")\n\n    def bulk_create(self, fingerprints: list) -> int:\n        \"\"\"\n        批量创建指纹记录（已校验的数据）\n        \n        Args:\n            fingerprints: 已校验的指纹数据列表\n            \n        Returns:\n            int: 成功创建数量\n        \"\"\"\n        if not fingerprints:\n            return 0\n        \n        objects = [self.model(**self.to_model_data(item)) for item in fingerprints]\n        created = self.model.objects.bulk_create(objects, ignore_conflicts=True)\n        return len(created)\n    \n    def batch_create_fingerprints(self, raw_data: list) -> dict:\n        \"\"\"\n        完整流程：分批校验 + 批量创建\n        \n        Args:\n            raw_data: 原始指纹数据列表\n            \n        Returns:\n            dict: {'created': int, 'failed': int}\n        \"\"\"\n        total_created = 0\n        total_failed = 0\n        \n        for i in range(0, len(raw_data), self.BATCH_SIZE):\n            batch = raw_data[i:i + self.BATCH_SIZE]\n            valid, invalid = self.validate_fingerprints(batch)\n            total_created += self.bulk_create(valid)\n            total_failed += len(invalid)\n        \n        logger.info(\n            \"批量创建指纹完成: created=%d, failed=%d, total=%d\",\n            total_created, total_failed, len(raw_data)\n        )\n        return {'created': total_created, 'failed': total_failed}\n    \n    def get_export_data(self) -> dict:\n        \"\"\"\n        获取导出数据，子类必须实现\n        \n        Returns:\n            dict: 导出的 JSON 数据\n        \"\"\"\n        raise NotImplementedError(\"子类必须实现 get_export_data 方法\")\n    \n    def export_to_file(self, output_path: str) -> int:\n        \"\"\"\n        导出所有指纹到 JSON 文件\n        \n        Args:\n            output_path: 输出文件路径\n            \n        Returns:\n            int: 导出的指纹数量\n        \"\"\"\n        data = self.get_export_data()\n        with open(output_path, 'w', encoding='utf-8') as f:\n            json.dump(data, f, ensure_ascii=False)\n        count = len(data.get('fingerprint', []))\n        logger.info(\"导出指纹文件: %s, 数量: %d\", output_path, count)\n        return count\n    \n    def get_fingerprint_version(self) -> str:\n        \"\"\"\n        获取指纹库版本标识（用于缓存校验）\n        \n        Returns:\n            str: 版本标识，格式 \"{count}_{latest_timestamp}\"\n        \n        版本变化场景：\n        - 新增记录 → count 变化\n        - 删除记录 → count 变化\n        - 清空全部 → count 变为 0\n        \"\"\"\n        count = self.model.objects.count()\n        latest = self.model.objects.order_by('-created_at').first()\n        latest_ts = int(latest.created_at.timestamp()) if latest else 0\n        return f\"{count}_{latest_ts}\"\n"
  },
  {
    "path": "backend/apps/engine/services/fingerprints/ehole.py",
    "content": "\"\"\"EHole 指纹管理 Service\n\n实现 EHole 格式指纹的校验、转换和导出逻辑\n\"\"\"\n\nfrom apps.engine.models import EholeFingerprint\nfrom .base import BaseFingerprintService\n\n\nclass EholeFingerprintService(BaseFingerprintService):\n    \"\"\"EHole 指纹管理服务（继承基类，实现 EHole 特定逻辑）\"\"\"\n    \n    model = EholeFingerprint\n    \n    def validate_fingerprint(self, item: dict) -> bool:\n        \"\"\"\n        校验单条 EHole 指纹\n        \n        校验规则：\n        - cms 字段必须存在且非空\n        - keyword 字段必须是数组\n        \n        Args:\n            item: 单条指纹数据\n            \n        Returns:\n            bool: 是否有效\n        \"\"\"\n        cms = item.get('cms', '')\n        keyword = item.get('keyword')\n        return bool(cms and str(cms).strip()) and isinstance(keyword, list)\n    \n    def to_model_data(self, item: dict) -> dict:\n        \"\"\"\n        转换 EHole JSON 格式为 Model 字段\n        \n        字段映射：\n        - isImportant (JSON) → is_important (Model)\n        \n        Args:\n            item: 原始 EHole JSON 数据\n            \n        Returns:\n            dict: Model 字段数据\n        \"\"\"\n        return {\n            'cms': str(item.get('cms', '')).strip(),\n            'method': item.get('method', 'keyword'),\n            'location': item.get('location', 'body'),\n            'keyword': item.get('keyword', []),\n            'is_important': item.get('isImportant', False),\n            'type': item.get('type', '-'),\n        }\n    \n    def get_export_data(self) -> dict:\n        \"\"\"\n        获取导出数据（EHole JSON 格式）\n        \n        Returns:\n            dict: EHole 格式的 JSON 数据\n            {\n                \"fingerprint\": [\n                    {\"cms\": \"...\", \"method\": \"...\", \"location\": \"...\", \n                     \"keyword\": [...], \"isImportant\": false, \"type\": \"...\"},\n                    ...\n                ],\n                \"version\": \"1000_1703836800\"\n            }\n        \"\"\"\n        fingerprints = self.model.objects.all()\n        data = []\n        for fp in fingerprints:\n            data.append({\n                'cms': fp.cms,\n                'method': fp.method,\n                'location': fp.location,\n                'keyword': fp.keyword,\n                'isImportant': fp.is_important,  # 转回 JSON 格式\n                'type': fp.type,\n            })\n        return {\n            'fingerprint': data,\n            'version': self.get_fingerprint_version(),\n        }\n"
  },
  {
    "path": "backend/apps/engine/services/fingerprints/fingerprinthub_service.py",
    "content": "\"\"\"FingerPrintHub 指纹管理 Service\n\n实现 FingerPrintHub 格式指纹的校验、转换和导出逻辑\n\"\"\"\n\nfrom apps.engine.models import FingerPrintHubFingerprint\nfrom .base import BaseFingerprintService\n\n\nclass FingerPrintHubFingerprintService(BaseFingerprintService):\n    \"\"\"FingerPrintHub 指纹管理服务（继承基类，实现 FingerPrintHub 特定逻辑）\"\"\"\n    \n    model = FingerPrintHubFingerprint\n    \n    def validate_fingerprint(self, item: dict) -> bool:\n        \"\"\"\n        校验单条 FingerPrintHub 指纹\n        \n        校验规则：\n        - id 字段必须存在且非空\n        - info 字段必须存在且包含 name\n        - http 字段必须是数组\n        \n        Args:\n            item: 单条指纹数据\n            \n        Returns:\n            bool: 是否有效\n        \"\"\"\n        fp_id = item.get('id', '')\n        info = item.get('info', {})\n        http = item.get('http')\n        \n        if not fp_id or not str(fp_id).strip():\n            return False\n        if not isinstance(info, dict) or not info.get('name'):\n            return False\n        if not isinstance(http, list):\n            return False\n        \n        return True\n    \n    def to_model_data(self, item: dict) -> dict:\n        \"\"\"\n        转换 FingerPrintHub JSON 格式为 Model 字段\n        \n        字段映射（嵌套结构转扁平）：\n        - id (JSON) → fp_id (Model)\n        - info.name (JSON) → name (Model)\n        - info.author (JSON) → author (Model)\n        - info.tags (JSON) → tags (Model)\n        - info.severity (JSON) → severity (Model)\n        - info.metadata (JSON) → metadata (Model)\n        - http (JSON) → http (Model)\n        - _source_file (JSON) → source_file (Model)\n        \n        Args:\n            item: 原始 FingerPrintHub JSON 数据\n            \n        Returns:\n            dict: Model 字段数据\n        \"\"\"\n        info = item.get('info', {})\n        return {\n            'fp_id': str(item.get('id', '')).strip(),\n            'name': str(info.get('name', '')).strip(),\n            'author': info.get('author', ''),\n            'tags': info.get('tags', ''),\n            'severity': info.get('severity', 'info'),\n            'metadata': info.get('metadata', {}),\n            'http': item.get('http', []),\n            'source_file': item.get('_source_file', ''),\n        }\n    \n    def get_export_data(self) -> list:\n        \"\"\"\n        获取导出数据（FingerPrintHub JSON 格式 - 数组）\n        \n        Returns:\n            list: FingerPrintHub 格式的 JSON 数据（数组格式）\n            [\n                {\n                    \"id\": \"...\",\n                    \"info\": {\"name\": \"...\", \"author\": \"...\", \"tags\": \"...\", \n                             \"severity\": \"...\", \"metadata\": {...}},\n                    \"http\": [...],\n                    \"_source_file\": \"...\"\n                },\n                ...\n            ]\n        \"\"\"\n        fingerprints = self.model.objects.all()\n        data = []\n        for fp in fingerprints:\n            item = {\n                'id': fp.fp_id,\n                'info': {\n                    'name': fp.name,\n                    'author': fp.author,\n                    'tags': fp.tags,\n                    'severity': fp.severity,\n                    'metadata': fp.metadata,\n                },\n                'http': fp.http,\n            }\n            # 只有当 source_file 非空时才添加该字段\n            if fp.source_file:\n                item['_source_file'] = fp.source_file\n            data.append(item)\n        return data\n"
  },
  {
    "path": "backend/apps/engine/services/fingerprints/fingers_service.py",
    "content": "\"\"\"Fingers 指纹管理 Service\n\n实现 Fingers 格式指纹的校验、转换和导出逻辑\n\"\"\"\n\nfrom apps.engine.models import FingersFingerprint\nfrom .base import BaseFingerprintService\n\n\nclass FingersFingerprintService(BaseFingerprintService):\n    \"\"\"Fingers 指纹管理服务（继承基类，实现 Fingers 特定逻辑）\"\"\"\n    \n    model = FingersFingerprint\n    \n    def validate_fingerprint(self, item: dict) -> bool:\n        \"\"\"\n        校验单条 Fingers 指纹\n        \n        校验规则：\n        - name 字段必须存在且非空\n        - rule 字段必须是数组\n        \n        Args:\n            item: 单条指纹数据\n            \n        Returns:\n            bool: 是否有效\n        \"\"\"\n        name = item.get('name', '')\n        rule = item.get('rule')\n        return bool(name and str(name).strip()) and isinstance(rule, list)\n    \n    def to_model_data(self, item: dict) -> dict:\n        \"\"\"\n        转换 Fingers JSON 格式为 Model 字段\n        \n        字段映射：\n        - default_port (JSON) → default_port (Model)\n        \n        Args:\n            item: 原始 Fingers JSON 数据\n            \n        Returns:\n            dict: Model 字段数据\n        \"\"\"\n        return {\n            'name': str(item.get('name', '')).strip(),\n            'link': item.get('link', ''),\n            'rule': item.get('rule', []),\n            'tag': item.get('tag', []),\n            'focus': item.get('focus', False),\n            'default_port': item.get('default_port', []),\n        }\n    \n    def get_export_data(self) -> list:\n        \"\"\"\n        获取导出数据（Fingers JSON 格式 - 数组）\n        \n        Returns:\n            list: Fingers 格式的 JSON 数据（数组格式）\n            [\n                {\"name\": \"...\", \"link\": \"...\", \"rule\": [...], \"tag\": [...], \n                 \"focus\": false, \"default_port\": [...]},\n                ...\n            ]\n        \"\"\"\n        fingerprints = self.model.objects.all()\n        data = []\n        for fp in fingerprints:\n            item = {\n                'name': fp.name,\n                'link': fp.link,\n                'rule': fp.rule,\n                'tag': fp.tag,\n            }\n            # 只有当 focus 为 True 时才添加该字段（保持与原始格式一致）\n            if fp.focus:\n                item['focus'] = fp.focus\n            # 只有当 default_port 非空时才添加该字段\n            if fp.default_port:\n                item['default_port'] = fp.default_port\n            data.append(item)\n        return data\n"
  },
  {
    "path": "backend/apps/engine/services/fingerprints/goby.py",
    "content": "\"\"\"Goby 指纹管理 Service\n\n实现 Goby 格式指纹的校验、转换和导出逻辑\n\"\"\"\n\nfrom apps.engine.models import GobyFingerprint\nfrom .base import BaseFingerprintService\n\n\nclass GobyFingerprintService(BaseFingerprintService):\n    \"\"\"Goby 指纹管理服务（继承基类，实现 Goby 特定逻辑）\"\"\"\n    \n    model = GobyFingerprint\n    \n    def validate_fingerprint(self, item: dict) -> bool:\n        \"\"\"\n        校验单条 Goby 指纹\n        \n        支持两种格式：\n        1. 标准格式: {\"name\": \"...\", \"logic\": \"...\", \"rule\": [...]}\n        2. JSONL 格式: {\"product\": \"...\", \"rule\": \"...\"}\n        \n        Args:\n            item: 单条指纹数据\n            \n        Returns:\n            bool: 是否有效\n        \"\"\"\n        # 标准格式：name + logic + rule(数组)\n        name = item.get('name', '')\n        if name and item.get('logic') is not None and isinstance(item.get('rule'), list):\n            return bool(str(name).strip())\n        \n        # JSONL 格式：product + rule(字符串)\n        product = item.get('product', '')\n        rule = item.get('rule', '')\n        return bool(product and str(product).strip() and rule and str(rule).strip())\n    \n    def to_model_data(self, item: dict) -> dict:\n        \"\"\"\n        转换 Goby JSON 格式为 Model 字段\n        \n        支持两种输入格式：\n        1. 标准格式: {\"name\": \"...\", \"logic\": \"...\", \"rule\": [...]}\n        2. JSONL 格式: {\"product\": \"...\", \"rule\": \"...\"}\n        \n        Args:\n            item: 原始 Goby JSON 数据\n            \n        Returns:\n            dict: Model 字段数据\n        \"\"\"\n        # 标准格式\n        if 'name' in item and isinstance(item.get('rule'), list):\n            return {\n                'name': str(item.get('name', '')).strip(),\n                'logic': item.get('logic', ''),\n                'rule': item.get('rule', []),\n            }\n        \n        # JSONL 格式：将 rule 字符串转为单元素数组\n        return {\n            'name': str(item.get('product', '')).strip(),\n            'logic': 'or',  # JSONL 格式默认 or 逻辑\n            'rule': [item.get('rule', '')] if item.get('rule') else [],\n        }\n    \n    def get_export_data(self) -> list:\n        \"\"\"\n        获取导出数据（Goby JSON 格式 - 数组）\n        \n        Returns:\n            list: Goby 格式的 JSON 数据（数组格式）\n            [\n                {\"name\": \"...\", \"logic\": \"...\", \"rule\": [...]},\n                ...\n            ]\n        \"\"\"\n        fingerprints = self.model.objects.all()\n        return [\n            {\n                'name': fp.name,\n                'logic': fp.logic,\n                'rule': fp.rule,\n            }\n            for fp in fingerprints\n        ]\n"
  },
  {
    "path": "backend/apps/engine/services/fingerprints/wappalyzer.py",
    "content": "\"\"\"Wappalyzer 指纹管理 Service\n\n实现 Wappalyzer 格式指纹的校验、转换和导出逻辑\n\"\"\"\n\nfrom apps.engine.models import WappalyzerFingerprint\nfrom .base import BaseFingerprintService\n\n\nclass WappalyzerFingerprintService(BaseFingerprintService):\n    \"\"\"Wappalyzer 指纹管理服务（继承基类，实现 Wappalyzer 特定逻辑）\"\"\"\n    \n    model = WappalyzerFingerprint\n    \n    def validate_fingerprint(self, item: dict) -> bool:\n        \"\"\"\n        校验单条 Wappalyzer 指纹\n        \n        校验规则：\n        - name 字段必须存在且非空（从 apps 对象的 key 传入）\n        \n        Args:\n            item: 单条指纹数据\n            \n        Returns:\n            bool: 是否有效\n        \"\"\"\n        name = item.get('name', '')\n        return bool(name and str(name).strip())\n    \n    def to_model_data(self, item: dict) -> dict:\n        \"\"\"\n        转换 Wappalyzer JSON 格式为 Model 字段\n        \n        字段映射：\n        - scriptSrc (JSON) → script_src (Model)\n        \n        Args:\n            item: 原始 Wappalyzer JSON 数据\n            \n        Returns:\n            dict: Model 字段数据\n        \"\"\"\n        return {\n            'name': str(item.get('name', '')).strip(),\n            'cats': item.get('cats', []),\n            'cookies': item.get('cookies', {}),\n            'headers': item.get('headers', {}),\n            'script_src': item.get('scriptSrc', []),  # JSON: scriptSrc -> Model: script_src\n            'js': item.get('js', []),\n            'implies': item.get('implies', []),\n            'meta': item.get('meta', {}),\n            'html': item.get('html', []),\n            'description': item.get('description', ''),\n            'website': item.get('website', ''),\n            'cpe': item.get('cpe', ''),\n        }\n    \n    def get_export_data(self) -> dict:\n        \"\"\"\n        获取导出数据（Wappalyzer JSON 格式）\n        \n        Returns:\n            dict: Wappalyzer 格式的 JSON 数据\n            {\n                \"apps\": {\n                    \"AppName\": {\"cats\": [...], \"cookies\": {...}, ...},\n                    ...\n                }\n            }\n        \"\"\"\n        fingerprints = self.model.objects.all()\n        apps = {}\n        for fp in fingerprints:\n            app_data = {}\n            if fp.cats:\n                app_data['cats'] = fp.cats\n            if fp.cookies:\n                app_data['cookies'] = fp.cookies\n            if fp.headers:\n                app_data['headers'] = fp.headers\n            if fp.script_src:\n                app_data['scriptSrc'] = fp.script_src  # Model: script_src -> JSON: scriptSrc\n            if fp.js:\n                app_data['js'] = fp.js\n            if fp.implies:\n                app_data['implies'] = fp.implies\n            if fp.meta:\n                app_data['meta'] = fp.meta\n            if fp.html:\n                app_data['html'] = fp.html\n            if fp.description:\n                app_data['description'] = fp.description\n            if fp.website:\n                app_data['website'] = fp.website\n            if fp.cpe:\n                app_data['cpe'] = fp.cpe\n            apps[fp.name] = app_data\n        return {'apps': apps}\n"
  },
  {
    "path": "backend/apps/engine/services/nuclei_template_repo_service.py",
    "content": "\"\"\"Nuclei 模板仓库业务 Service 层\n\n本模块封装 Nuclei 多仓库的核心业务逻辑：\n\n1. Git 同步（refresh_repo）\n   - 首次调用：git clone --depth 1\n   - 后续调用：git pull --ff-only\n   - 自动更新 last_synced_at 和 local_path\n\n2. 模板只读浏览\n   - get_template_tree: 获取目录树结构\n   - get_template_content: 获取单个模板文件内容\n\n注意：仓库的 CRUD 操作由 DRF ModelViewSet 默认实现，不在 Service 层处理。\n\n调用链路：\n    View.refresh() → Service.refresh_repo() → subprocess(git)\n    View.templates_tree() → Service.get_template_tree() → Repository.get_tree()\n    View.templates_content() → Service.get_template_content() → Repository.get_file_content()\n\n配置项（settings.py）：\n    NUCLEI_TEMPLATES_REPOS_BASE_DIR: 仓库本地存储根目录，默认 /opt/xingrin/nuclei-repos\n\"\"\"\n\nfrom __future__ import annotations\n\nimport logging\nimport shutil\nfrom pathlib import Path\nfrom typing import Any, Dict, List, Optional\n\nfrom django.conf import settings\nfrom django.core.exceptions import ValidationError\nfrom django.utils import timezone\n\nfrom apps.engine.repositories import NucleiTemplateRepository, TemplateFileRepository\n\n\nlogger = logging.getLogger(__name__)\n\n\nclass NucleiTemplateRepoService:\n    \"\"\"Nuclei 多仓库业务 Service\n\n    负责 Git 同步和模板只读浏览逻辑。\n    通过依赖注入 Repository，方便单元测试。\n\n    Attributes:\n        repo: NucleiTemplateRepository 实例，用于 ORM 操作\n    \"\"\"\n\n    def __init__(self, repository: NucleiTemplateRepository | None = None) -> None:\n        \"\"\"初始化 Service\n\n        Args:\n            repository: 可选，注入 NucleiTemplateRepository 实例（用于测试）\n        \"\"\"\n        self.repo = repository or NucleiTemplateRepository()\n\n    # ==================== 内部辅助方法 ====================\n\n    def _get_repo_obj(self, repo_id: int):\n        \"\"\"获取仓库对象\n\n        Args:\n            repo_id: 仓库 ID\n\n        Returns:\n            NucleiTemplateRepo 对象\n\n        Raises:\n            ValidationError: 仓库不存在时抛出\n        \"\"\"\n        obj = self.repo.get_by_id(repo_id)\n        if not obj:\n            raise ValidationError(\"仓库不存在\")\n        return obj\n\n    def _get_base_dir(self) -> Path:\n        \"\"\"获取仓库本地存储根目录\n\n        从 settings.NUCLEI_TEMPLATES_REPOS_BASE_DIR 读取，默认 /opt/xingrin/nuclei-repos。\n        如果目录不存在会自动创建。\n\n        Returns:\n            根目录 Path 对象\n        \"\"\"\n        base_dir = getattr(settings, \"NUCLEI_TEMPLATES_REPOS_BASE_DIR\", \"/opt/xingrin/nuclei-repos\")\n        path = Path(base_dir).resolve()\n        path.mkdir(parents=True, exist_ok=True)\n        return path\n\n    def remove_local_path_dir(self, repo_obj) -> None:\n        \"\"\"删除与仓库关联的本地目录（如果存在）\n\n        只会删除位于 NUCLEI_TEMPLATES_REPOS_BASE_DIR 下的目录，避免误删其它路径。\n\n        Args:\n            repo_obj: NucleiTemplateRepo 实例\n        \"\"\"\n        raw = (getattr(repo_obj, \"local_path\", \"\") or \"\").strip()\n        if not raw:\n            return\n\n        base_dir = self._get_base_dir()\n        path = Path(raw).expanduser().resolve()\n\n        # 仅允许删除 base_dir 下的子目录\n        try:\n            path.relative_to(base_dir)\n        except ValueError:\n            return\n\n        if not path.exists() or not path.is_dir():\n            return\n\n        try:\n            shutil.rmtree(path)\n        except OSError:\n            # 删除失败时记录日志但不阻塞主流程\n            logger.warning(\"删除 nuclei 本地目录失败: %s\", path, exc_info=True)\n\n    def ensure_local_path(self, repo_obj) -> Path:\n        \"\"\"确保仓库的本地路径存在并返回 Path\n\n        规则：\n        - 如果 repo.local_path 已有值：\n          - 展开 ~ 并 resolve() 为绝对路径\n        - 如果尚未设置：\n          - 使用 baseDir/nameSlug 生成目录，例如：\n            /opt/xingrin/nuclei-repos/di-san-fang-mo-ban\n          - 如果 name 不可 slugify，则退化为 repo-<id>\n\n        任何情况下都会保证目标目录已创建。\n\n        Args:\n            repo_obj: NucleiTemplateRepo 实例\n\n        Returns:\n            本地目录的绝对 Path\n        \"\"\"\n        from django.utils.text import slugify\n\n        # 已有 local_path，直接规范化为绝对路径\n        if getattr(repo_obj, \"local_path\", None):\n            path = Path(repo_obj.local_path).expanduser().resolve()\n        else:\n            base_dir = self._get_base_dir()\n            # 根据仓库名称生成 slug，避免中文/空格等问题\n            raw_name = (repo_obj.name or \"\").strip()\n            slug = slugify(raw_name) if raw_name else \"\"\n            if not slug:\n                slug = f\"repo-{repo_obj.id}\"\n            path = (base_dir / slug).resolve()\n            repo_obj.local_path = str(path)\n            repo_obj.save(update_fields=[\"local_path\"])\n\n        path.mkdir(parents=True, exist_ok=True)\n        return path\n\n    # ==================== Git 同步 ====================\n\n    def refresh_repo(self, repo_id: int) -> Dict[str, Any]:\n        \"\"\"同步仓库（Git clone 或 pull）\n\n        根据 local_path 是否存在 .git 目录判断：\n        - 不存在：执行 git clone --depth 1（浅克隆，节省空间）\n        - 存在：执行 git pull --ff-only（快进合并）\n\n        同步成功后会更新数据库中的 last_synced_at 和 local_path。\n\n        Args:\n            repo_id: 仓库 ID\n\n        Returns:\n            {\n                \"repoId\": 1,\n                \"action\": \"clone\" | \"pull\",\n                \"localPath\": \"/opt/xingrin/nuclei-repos/my-templates\",\n                \"stdout\": \"...\",\n                \"stderr\": \"...\"\n            }\n\n        Raises:\n            ValidationError: 仓库不存在\n            RuntimeError: Git 命令执行失败\n        \"\"\"\n        import subprocess\n\n        obj = self._get_repo_obj(repo_id)\n\n        # 确保本地路径已生成并为绝对路径\n        local_path = self.ensure_local_path(obj)\n\n        git_dir = local_path / \".git\"\n        cmd: List[str]\n        action: str\n\n        # 直接使用原始 URL（不再使用 Git 加速）\n        repo_url = obj.repo_url\n\n        # 判断是 clone 还是 pull\n        if git_dir.is_dir():\n            # 检查远程地址是否变化\n            current_remote = subprocess.run(\n                [\"git\", \"-C\", str(local_path), \"remote\", \"get-url\", \"origin\"],\n                check=False,\n                stdout=subprocess.PIPE,\n                stderr=subprocess.PIPE,\n                text=True,\n            )\n            current_url = current_remote.stdout.strip() if current_remote.returncode == 0 else \"\"\n            \n            # 检查是否需要重新 clone\n            if current_url != repo_url:\n                # 远程地址变化，删除旧目录重新 clone\n                logger.info(\"nuclei 模板仓库 %s 远程地址变化，重新 clone: %s -> %s\", obj.id, current_url, repo_url)\n                shutil.rmtree(local_path)\n                local_path.mkdir(parents=True, exist_ok=True)\n                cmd = [\"git\", \"clone\", \"--depth\", \"1\", repo_url, str(local_path)]\n                action = \"clone\"\n            else:\n                # 已有仓库且地址未变，执行 pull\n                cmd = [\"git\", \"-C\", str(local_path), \"pull\", \"--ff-only\"]\n                action = \"pull\"\n        else:\n            # 新仓库，执行 clone\n            if local_path.exists() and not local_path.is_dir():\n                raise RuntimeError(f\"本地路径已存在且不是目录: {local_path}\")\n            # --depth 1 浅克隆，只获取最新提交，节省空间和时间\n            cmd = [\"git\", \"clone\", \"--depth\", \"1\", repo_url, str(local_path)]\n            action = \"clone\"\n\n        # 执行 Git 命令\n        result = subprocess.run(\n            cmd,\n            check=False,\n            stdout=subprocess.PIPE,\n            stderr=subprocess.PIPE,\n            text=True,\n        )\n\n        # 检查执行结果\n        if result.returncode != 0:\n            logger.warning(\"nuclei 模板仓库 %s git %s 失败: %s\", obj.id, action, result.stderr.strip())\n            raise RuntimeError(\"Git 同步失败\")\n\n        # 获取当前 commit hash\n        commit_result = subprocess.run(\n            [\"git\", \"-C\", str(local_path), \"rev-parse\", \"HEAD\"],\n            check=False,\n            stdout=subprocess.PIPE,\n            stderr=subprocess.PIPE,\n            text=True,\n        )\n        commit_hash = commit_result.stdout.strip() if commit_result.returncode == 0 else \"\"\n\n        # 同步成功，更新数据库（包含 commit_hash）\n        obj.last_synced_at = timezone.now()\n        obj.local_path = str(local_path)\n        obj.commit_hash = commit_hash\n        obj.save(update_fields=[\"last_synced_at\", \"local_path\", \"commit_hash\"])\n\n        logger.info(\n            \"nuclei 模板仓库 %s git %s 成功, commit=%s\",\n            obj.id, action, commit_hash[:8] if commit_hash else \"N/A\"\n        )\n\n        return {\n            \"repoId\": obj.id,\n            \"action\": action,\n            \"localPath\": str(local_path),\n            \"commitHash\": commit_hash,\n            \"stdout\": result.stdout,\n            \"stderr\": result.stderr,\n        }\n\n    # ==================== 模板树与内容（只读） ====================\n\n    def _get_fs_repo(self, repo_id: int) -> TemplateFileRepository:\n        \"\"\"获取文件系统 Repository 实例\n\n        Args:\n            repo_id: 仓库 ID\n\n        Returns:\n            TemplateFileRepository 实例\n\n        Raises:\n            ValidationError: 仓库不存在\n        \"\"\"\n        obj = self._get_repo_obj(repo_id)\n        # 确保本地路径已生成并为绝对路径\n        root = self.ensure_local_path(obj)\n        # 传入绝对路径给 Repository\n        return TemplateFileRepository(root=root)\n\n    def get_template_tree(self, repo_id: int) -> List[Dict[str, Any]]:\n        \"\"\"获取仓库的模板目录树\n\n        Args:\n            repo_id: 仓库 ID\n\n        Returns:\n            目录树结构，详见 TemplateFileRepository.get_tree()\n        \"\"\"\n        fs_repo = self._get_fs_repo(repo_id)\n        return fs_repo.get_tree()\n\n    def get_template_content(self, repo_id: int, rel_path: str) -> Optional[Dict[str, Any]]:\n        \"\"\"获取单个模板文件内容\n\n        Args:\n            repo_id: 仓库 ID\n            rel_path: 相对路径，如 \"http/cves/CVE-2021-1234.yaml\"\n\n        Returns:\n            文件内容，详见 TemplateFileRepository.get_file_content()\n            文件不存在或读取失败返回 None\n        \"\"\"\n        fs_repo = self._get_fs_repo(repo_id)\n        return fs_repo.get_file_content(rel_path)\n\n\n__all__ = [\"NucleiTemplateRepoService\"]\n"
  },
  {
    "path": "backend/apps/engine/services/task_distributor.py",
    "content": "\"\"\"\n负载感知任务分发器\n\n根据 Worker 负载动态分发任务，支持本地和远程 Worker。\n\n核心逻辑：\n1. 查询所有在线 Worker 的负载（从心跳数据）\n2. 选择负载最低的 Worker（可能是本地或远程）\n3. 本地 Worker：直接执行 docker run\n4. 远程 Worker：通过 SSH 执行 docker run\n5. 任务执行完自动销毁容器（--rm）\n\n镜像版本管理：\n- 版本锁定：使用 settings.IMAGE_TAG 确保 server 和 worker 版本一致\n- 预拉取策略：安装时预拉取镜像，执行时使用 --pull=missing\n- 本地开发：可通过 TASK_EXECUTOR_IMAGE 环境变量指向本地镜像\n\n环境变量注入：\n- Worker 容器不使用 env_file，通过 docker run -e 动态注入\n- 只注入 SERVER_URL，容器启动后从配置中心获取完整配置\n- 本地 Worker：SERVER_URL = http://server:{port}（Docker 内部网络）\n- 远程 Worker：SERVER_URL = http://{public_host}:{port}（公网地址）\n\n任务启动流程：\n1. Server 调用 execute_scan_flow() 等方法提交任务\n2. select_best_worker() 从 Redis 读取心跳数据，选择负载最低的节点\n3. _build_docker_command() 构建完整的 docker run 命令：\n   - 设置网络（本地加入 Docker 网络，远程不指定）\n   - 注入环境变量（-e SERVER_URL=...）\n   - 挂载结果和日志目录（-v）\n   - 指定执行脚本（python -m apps.scan.scripts.xxx）\n4. _execute_docker_command() 执行命令：\n   - 本地：subprocess.run() 直接执行\n   - 远程：paramiko SSH 执行\n5. docker run -d 立即返回容器 ID，任务在后台执行\n\n特点：\n- 负载感知：任务优先分发到最空闲的机器\n- 统一调度：本地和远程 Worker 使用相同的选择逻辑\n- 资源隔离：每个任务独立容器\n- 按需创建：空闲时零占用\n- 版本一致：所有节点使用相同版本的 worker 镜像\n\"\"\"\n\nimport logging\nimport time\nfrom typing import Optional, Dict, Any\n\nimport paramiko\nfrom django.conf import settings\n\nfrom apps.engine.models import WorkerNode\n\nlogger = logging.getLogger(__name__)\n\n\nclass TaskDistributor:\n    \"\"\"\n    负载感知任务分发器\n    \n    根据 Worker 负载自动选择最优节点执行任务。\n    - 本地 Worker (is_local=True)：直接执行 docker 命令\n    - 远程 Worker (is_local=False)：通过 SSH 执行 docker 命令\n    \n    负载均衡策略：\n    - 心跳间隔：3 秒（Agent 上报到 Redis）\n    - 任务间隔：6 秒（确保心跳已更新）\n    - 高负载阈值：85%（CPU 或内存超过则跳过）\n    - 在线判断：Redis TTL（15秒过期视为离线）\n    \"\"\"\n    \n    # 上次任务提交时间（类级别，所有实例共享）\n    _last_submit_time: float = 0\n    \n    def __init__(self):\n        self.docker_image = settings.TASK_EXECUTOR_IMAGE\n        if not self.docker_image:\n            raise ValueError(\"TASK_EXECUTOR_IMAGE 未配置，请确保 IMAGE_TAG 环境变量已设置\")\n        # 统一使用 /opt/xingrin 下的路径\n        self.logs_mount = \"/opt/xingrin/logs\"\n        self.submit_interval = getattr(settings, 'TASK_SUBMIT_INTERVAL', 5)\n    \n    def get_online_workers(self) -> list[WorkerNode]:\n        \"\"\"\n        获取所有在线的 Worker\n        \n        判断条件：\n        - status in ('online', 'offline') 表示已部署\n        - Redis 中有心跳数据（TTL 未过期）\n        \"\"\"\n        from apps.engine.services.worker_load_service import worker_load_service\n        \n        # 1. 获取所有已部署的节点（online/offline 表示已部署）\n        workers = WorkerNode.objects.filter(status__in=['online', 'offline'])\n        \n        # 2. 过滤出 Redis 中有心跳数据的（在线）\n        online_workers = []\n        for worker in workers:\n            if worker_load_service.is_online(worker.id):\n                online_workers.append(worker)\n        \n        return online_workers\n    \n    def select_best_worker(self) -> Optional[WorkerNode]:\n        \"\"\"\n        选择负载最低的在线 Worker\n        \n        选择策略：\n        - 从 Redis 读取实时负载数据\n        - CPU 权重 70%，内存权重 30%\n        - 排除 CPU > 85% 或 内存 > 85% 的机器\n        \n        Returns:\n            最优 Worker，如果没有可用的返回 None\n        \"\"\"\n        from apps.engine.services.worker_load_service import worker_load_service\n        \n        workers = self.get_online_workers()\n        \n        if not workers:\n            logger.warning(\"没有可用的在线 Worker\")\n            return None\n        \n        # 从 Redis 批量获取负载数据\n        worker_ids = [w.id for w in workers]\n        loads = worker_load_service.get_all_loads(worker_ids)\n        \n        # 计算每个 Worker 的负载分数\n        scored_workers = []\n        high_load_workers = []  # 高负载 Worker（降级备选）\n        \n        for worker in workers:\n            # 从 Redis 获取负载数据\n            load = loads.get(worker.id)\n            if not load:\n                # Redis 无数据，跳过该节点（不应该发生，因为 get_online_workers 已过滤）\n                logger.warning(f\"Worker {worker.name} 无负载数据，跳过\")\n                continue\n            \n            cpu = load.get('cpu', 0)\n            mem = load.get('mem', 0)\n            \n            # 加权分数（越低越好）\n            score = cpu * 0.7 + mem * 0.3\n            \n            # 区分正常和高负载（阈值降到 85%，更保守）\n            if cpu > 85 or mem > 85:\n                high_load_workers.append((worker, score, cpu, mem))\n                logger.debug(\n                    \"高负载 Worker: %s (CPU: %.1f%%, MEM: %.1f%%)\",\n                    worker.name, cpu, mem\n                )\n            else:\n                scored_workers.append((worker, score, cpu, mem))\n        \n        # 降级策略：如果没有正常负载的，循环等待后重新检测\n        if not scored_workers:\n            if high_load_workers:\n                # 高负载等待参数（默认每 60 秒检测一次，最多 10 次）\n                high_load_wait = getattr(settings, 'HIGH_LOAD_WAIT_SECONDS', 60)\n                high_load_max_retries = getattr(settings, 'HIGH_LOAD_MAX_RETRIES', 10)\n                \n                # 开始等待前发送高负载通知\n                high_load_workers.sort(key=lambda x: x[1])\n                _, _, first_cpu, first_mem = high_load_workers[0]\n                from apps.common.signals import all_workers_high_load\n                all_workers_high_load.send(\n                    sender=self.__class__,\n                    worker_name=\"所有节点\",\n                    cpu=first_cpu,\n                    mem=first_mem\n                )\n                \n                for retry in range(high_load_max_retries):\n                    logger.warning(\n                        \"所有 Worker 高负载，等待 %d 秒后重试... (%d/%d)\",\n                        high_load_wait, retry + 1, high_load_max_retries\n                    )\n                    time.sleep(high_load_wait)\n                    \n                    # 重新获取负载数据\n                    loads = worker_load_service.get_all_loads(worker_ids)\n                    \n                    # 重新评估\n                    scored_workers = []\n                    high_load_workers = []\n                    \n                    for worker in workers:\n                        load = loads.get(worker.id)\n                        if not load:\n                            continue\n                        \n                        cpu = load.get('cpu', 0)\n                        mem = load.get('mem', 0)\n                        score = cpu * 0.7 + mem * 0.3\n                        \n                        if cpu > 85 or mem > 85:\n                            high_load_workers.append((worker, score, cpu, mem))\n                        else:\n                            scored_workers.append((worker, score, cpu, mem))\n                    \n                    # 如果有正常负载的 Worker，跳出循环\n                    if scored_workers:\n                        logger.info(\"检测到正常负载 Worker，结束等待\")\n                        break\n                \n                # 超时或仍然高负载，选择负载最低的\n                if not scored_workers and high_load_workers:\n                    high_load_workers.sort(key=lambda x: x[1])\n                    best_worker, _, cpu, mem = high_load_workers[0]\n                    \n                    logger.warning(\n                        \"等待超时，强制分发到高负载 Worker: %s (CPU: %.1f%%, MEM: %.1f%%)\",\n                        best_worker.name, cpu, mem\n                    )\n                    return best_worker\n                    return best_worker\n            else:\n                logger.warning(\"没有可用的 Worker\")\n                return None\n        \n        # 选择分数最低的\n        scored_workers.sort(key=lambda x: x[1])\n        best_worker, score, cpu, mem = scored_workers[0]\n        \n        logger.info(\n            \"选择 Worker: %s (CPU: %.1f%%, MEM: %.1f%%, Score: %.1f)\",\n            best_worker.name, cpu, mem, score\n        )\n        \n        return best_worker\n    \n    def _wait_for_submit_interval(self):\n        \"\"\"\n        等待任务提交间隔（后台线程中执行，不阻塞 API）\n        \n        确保连续任务提交之间有足够的间隔，让心跳有时间更新负载数据。\n        如果距上次提交已超过间隔，则不等待。\n        \"\"\"\n        if TaskDistributor._last_submit_time > 0:\n            elapsed = time.time() - TaskDistributor._last_submit_time\n            if elapsed < self.submit_interval:\n                time.sleep(self.submit_interval - elapsed)\n        TaskDistributor._last_submit_time = time.time()\n    \n    def _build_docker_command(\n        self,\n        worker: WorkerNode,\n        script_module: str,\n        script_args: Dict[str, Any],\n    ) -> str:\n        \"\"\"\n        构建 docker run 命令\n        \n        容器只需要 SERVER_URL，启动后从配置中心获取完整配置。\n        \n        Args:\n            worker: 目标 Worker（用于区分本地/远程网络）\n            script_module: 脚本模块路径（如 apps.scan.scripts.run_initiate_scan）\n            script_args: 脚本参数（会转换为命令行参数）\n        \n        Returns:\n            完整的 docker run 命令\n        \"\"\"\n        import shlex\n        \n        # 根据 Worker 类型确定网络和 Server 地址\n        if worker.is_local:\n            # 本地：加入 Docker 网络，使用内部服务名\n            network_arg = f\"--network {settings.DOCKER_NETWORK_NAME}\"\n            server_url = f\"http://server:{settings.SERVER_PORT}\"\n        else:\n            # 远程：通过 Nginx 反向代理访问（HTTPS，不直连 8888 端口）\n            network_arg = \"\"\n            server_url = f\"https://{settings.PUBLIC_HOST}:{settings.PUBLIC_PORT}\"\n        \n        # 挂载路径（统一挂载 /opt/xingrin，扫描工具在 /opt/xingrin-tools/bin 不受影响）\n        host_xingrin_dir = \"/opt/xingrin\"\n        \n        # 环境变量：SERVER_URL + IS_LOCAL，其他配置容器启动时从配置中心获取\n        # IS_LOCAL 用于 Worker 向配置中心声明身份，决定返回的数据库地址\n        # Prefect 本地模式配置：启用 ephemeral server（本地临时服务器）\n        is_local_str = \"true\" if worker.is_local else \"false\"\n        env_vars = [\n            f\"-e SERVER_URL={shlex.quote(server_url)}\",\n            f\"-e IS_LOCAL={is_local_str}\",\n            f\"-e WORKER_API_KEY={shlex.quote(settings.WORKER_API_KEY)}\",  # Worker API 认证密钥\n            \"-e PREFECT_HOME=/tmp/.prefect\",  # 设置 Prefect 数据目录到可写位置\n            \"-e PREFECT_SERVER_EPHEMERAL_ENABLED=true\",  # 启用 ephemeral server（本地临时服务器）\n            \"-e PREFECT_SERVER_EPHEMERAL_STARTUP_TIMEOUT_SECONDS=120\",  # 增加启动超时时间\n            \"-e PREFECT_SERVER_DATABASE_CONNECTION_URL=sqlite+aiosqlite:////tmp/.prefect/prefect.db\",  # 使用 /tmp 下的 SQLite\n            \"-e PREFECT_LOGGING_LEVEL=WARNING\",  # 日志级别（减少 DEBUG 噪音）\n        ]\n        \n        # 挂载卷（统一挂载整个 /opt/xingrin 目录）\n        volumes = [\n            f\"-v {host_xingrin_dir}:{host_xingrin_dir}\",\n        ]\n        \n        # 构建命令行参数\n        # 使用 shlex.quote 处理特殊字符，确保参数在 shell 中正确解析\n        args_str = \" \".join([f\"--{k}={shlex.quote(str(v))}\" for k, v in script_args.items()])\n        \n        # 日志文件路径（容器内），保留最近 10000 行\n        log_file = f\"{self.logs_mount}/container_{script_module.split('.')[-1]}.log\"\n        \n        # 构建内部命令（日志轮转 + 执行脚本）\n        inner_cmd = f'tail -n 10000 {log_file} > {log_file}.tmp 2>/dev/null; mv {log_file}.tmp {log_file} 2>/dev/null; python -m {script_module} {args_str} >> {log_file} 2>&1'\n        \n        # 完整命令\n        # 镜像拉取策略：--pull=missing\n        # - 本地 Worker：install.sh 已预拉取镜像，直接使用本地版本\n        # - 远程 Worker：deploy 时已预拉取镜像，直接使用本地版本\n        # - 避免每次任务都检查 Docker Hub，提升性能和稳定性\n        # OOM 优先级：--oom-score-adj=1000 让 Worker 在内存不足时优先被杀\n        # - 范围 -1000 到 1000，值越大越容易被 OOM Killer 选中\n        # - 保护 server/nginx/frontend 等核心服务，确保 Web 界面可用\n        cmd = f'''docker run --rm -d --pull=missing {network_arg} \\\\\n            --oom-score-adj=1000 \\\\\n            {' '.join(env_vars)} \\\\\n            {' '.join(volumes)} \\\\\n            {self.docker_image} \\\\\n            sh -c \"{inner_cmd}\"'''\n        \n        return cmd\n    \n    def _execute_docker_command(\n        self,\n        worker: WorkerNode,\n        docker_cmd: str,\n    ) -> tuple[bool, str]:\n        \"\"\"\n        在 Worker 上执行 docker run 命令\n        \n        docker run -d 会立即返回容器 ID，无需等待任务完成。\n        \n        Args:\n            worker: 目标 Worker\n            docker_cmd: docker run 命令\n        \n        Returns:\n            (success, container_id) 元组\n        \"\"\"\n        logger.info(\"准备执行 Docker 命令 - Worker: %s, Local: %s\", worker.name, worker.is_local)\n        logger.info(\"Docker 命令: %s\", docker_cmd[:200] + '...' if len(docker_cmd) > 200 else docker_cmd)\n        \n        if worker.is_local:\n            return self._execute_local_docker(docker_cmd)\n        else:\n            return self._execute_ssh_docker(worker, docker_cmd)\n    \n    def _execute_local_docker(\n        self,\n        docker_cmd: str,\n    ) -> tuple[bool, str]:\n        \"\"\"\n        在本地执行 docker run 命令\n        \n        docker run -d 立即返回容器 ID。\n        \"\"\"\n        import subprocess\n        logger.info(\"开始执行本地 Docker 命令...\")\n        try:\n            result = subprocess.run(\n                docker_cmd,\n                shell=True,\n                capture_output=True,\n                text=True,\n            )\n            \n            if result.returncode != 0:\n                logger.error(\n                    \"本地 Docker 执行失败 - Exit: %d, Stderr: %s, Stdout: %s\",\n                    result.returncode, result.stderr[:500], result.stdout[:500]\n                )\n                return False, result.stderr\n            \n            container_id = result.stdout.strip()\n            logger.info(\"本地 Docker 执行成功 - Container ID: %s\", container_id[:12] if container_id else 'N/A')\n            return True, container_id\n            \n        except Exception as e:\n            logger.error(\"本地 Docker 执行异常: %s\", e, exc_info=True)\n            return False, f\"执行异常: {e}\"\n    \n    def _execute_ssh_docker(\n        self,\n        worker: WorkerNode,\n        docker_cmd: str,\n    ) -> tuple[bool, str]:\n        \"\"\"\n        在远程 Worker 上通过 SSH 执行 docker run 命令\n        \n        docker run -d 立即返回容器 ID，无需长时间等待。\n        \n        Args:\n            worker: 目标 Worker\n            docker_cmd: docker run 命令\n        \n        Returns:\n            (success, container_id) 元组\n        \"\"\"\n        ssh = None\n        logger.info(\"开始 SSH Docker 执行 - Worker: %s (%s:%d)\", worker.name, worker.ip_address, worker.ssh_port)\n        try:\n            ssh = paramiko.SSHClient()\n            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())\n            \n            # 连接（SSH 连接超时 10 秒足够）\n            ssh.connect(\n                hostname=worker.ip_address,\n                port=worker.ssh_port,\n                username=worker.username,\n                password=worker.password if worker.password else None,\n                timeout=10,\n            )\n            logger.debug(\"SSH 连接成功 - Worker: %s\", worker.name)\n            \n            # 执行 docker run（-d 模式立即返回）\n            stdin, stdout, stderr = ssh.exec_command(docker_cmd)\n            exit_code = stdout.channel.recv_exit_status()\n            \n            output = stdout.read().decode().strip()\n            error = stderr.read().decode().strip()\n            \n            if exit_code != 0:\n                logger.error(\n                    \"SSH Docker 执行失败 - Worker: %s, Exit: %d, Stderr: %s, Stdout: %s\",\n                    worker.name, exit_code, error[:500], output[:500]\n                )\n                return False, error\n            \n            logger.info(\"SSH Docker 执行成功 - Worker: %s, Container ID: %s\", worker.name, output[:12] if output else 'N/A')\n            return True, output\n            \n        except paramiko.AuthenticationException as e:\n            logger.error(\"SSH 认证失败 - Worker: %s, Error: %s\", worker.name, e)\n            return False, f\"认证失败: {e}\"\n        except paramiko.SSHException as e:\n            logger.error(\"SSH 连接错误 - Worker: %s, Error: %s\", worker.name, e)\n            return False, f\"SSH 错误: {e}\"\n        except Exception as e:\n            logger.error(\"SSH Docker 执行异常 - Worker: %s, Error: %s\", worker.name, e)\n            return False, f\"执行异常: {e}\"\n        finally:\n            if ssh:\n                ssh.close()\n    \n    def execute_scan_flow(\n        self,\n        scan_id: int,\n        target_name: str,\n        target_id: int,\n        scan_workspace_dir: str,\n        engine_name: str,\n        scheduled_scan_name: str | None = None,\n    ) -> tuple[bool, str, Optional[str], Optional[int]]:\n        \"\"\"\n        在远程或本地 Worker 上执行扫描 Flow\n        \n        Args:\n            scan_id: 扫描任务 ID\n            target_name: 目标名称\n            target_id: 目标 ID\n            scan_workspace_dir: 扫描工作目录\n            engine_name: 引擎名称\n            scheduled_scan_name: 定时扫描任务名称（可选）\n        \n        Returns:\n            (success, message, container_id, worker_id) 元组\n        \n        Note:\n            engine_config 由 Flow 内部通过 scan_id 查询数据库获取\n        \"\"\"\n        logger.info(\"=\"*60)\n        logger.info(\"execute_scan_flow 开始\")\n        logger.info(\"  scan_id: %s\", scan_id)\n        logger.info(\"  target_name: %s\", target_name)\n        logger.info(\"  target_id: %s\", target_id)\n        logger.info(\"  scan_workspace_dir: %s\", scan_workspace_dir)\n        logger.info(\"  engine_name: %s\", engine_name)\n        logger.info(\"  docker_image: %s\", self.docker_image)\n        logger.info(\"=\"*60)\n        \n        # 1. 等待提交间隔（后台线程执行，不阻塞 API）\n        logger.info(\"等待提交间隔...\")\n        self._wait_for_submit_interval()\n        logger.info(\"提交间隔等待完成\")\n        \n        # 2. 选择最佳 Worker\n        worker = self.select_best_worker()\n        if not worker:\n            return False, \"没有可用的 Worker\", None, None\n        \n        # 3. 构建 docker run 命令\n        script_args = {\n            'scan_id': scan_id,\n            'target_name': target_name,\n            'target_id': target_id,\n            'scan_workspace_dir': scan_workspace_dir,\n            'engine_name': engine_name,\n        }\n        if scheduled_scan_name:\n            script_args['scheduled_scan_name'] = scheduled_scan_name\n        \n        docker_cmd = self._build_docker_command(\n            worker=worker,\n            script_module='apps.scan.scripts.run_initiate_scan',\n            script_args=script_args,\n        )\n        \n        logger.info(\n            \"提交扫描任务到 Worker: %s - Scan ID: %d, Target: %s\",\n            worker.name, scan_id, target_name\n        )\n        \n        # 4. 执行 docker run（本地直接执行，远程通过 SSH）\n        success, output = self._execute_docker_command(worker, docker_cmd)\n        \n        if success:\n            container_id = output[:12] if output else None\n            logger.info(\n                \"扫描任务已提交 - Scan ID: %d, Worker: %s, Container: %s\",\n                scan_id, worker.name, container_id\n            )\n            return True, f\"任务已提交到 {worker.name}\", container_id, worker.id\n        else:\n            logger.error(\n                \"扫描任务提交失败 - Scan ID: %d, Worker: %s, Error: %s\",\n                scan_id, worker.name, output\n            )\n            return False, output, None, None\n    \n    def execute_cleanup_on_all_workers(\n        self,\n        retention_days: int = 7,\n    ) -> list[dict]:\n        \"\"\"\n        在所有 Worker 上执行清理任务\n        \n        Args:\n            retention_days: 保留天数，默认7天\n            \n        Returns:\n            各 Worker 的执行结果列表\n        \"\"\"\n        results = []\n        \n        # 获取所有在线的 Worker\n        workers = self.get_online_workers()\n        if not workers:\n            logger.warning(\"没有可用的 Worker 执行清理任务\")\n            return results\n        \n        logger.info(f\"开始在 {len(workers)} 个 Worker 上执行清理任务\")\n        \n        for worker in workers:\n            try:\n                # 构建 docker run 命令（清理过期扫描结果目录）\n                script_args = {\n                    'results_dir': '/opt/xingrin/results',\n                    'retention_days': retention_days,\n                }\n                \n                docker_cmd = self._build_docker_command(\n                    worker=worker,\n                    script_module='apps.scan.scripts.run_cleanup',\n                    script_args=script_args,\n                )\n                \n                # 执行清理命令\n                success, output = self._execute_docker_command(worker, docker_cmd)\n                \n                results.append({\n                    'worker_id': worker.id,\n                    'worker_name': worker.name,\n                    'success': success,\n                    'output': output[:500] if output else None,\n                })\n                \n                if success:\n                    logger.info(f\"✓ Worker {worker.name} 清理任务已启动\")\n                else:\n                    logger.warning(f\"✗ Worker {worker.name} 清理任务启动失败: {output}\")\n                    \n            except Exception as e:\n                logger.error(f\"Worker {worker.name} 清理任务执行异常: {e}\")\n                results.append({\n                    'worker_id': worker.id,\n                    'worker_name': worker.name,\n                    'success': False,\n                    'error': str(e),\n                })\n        \n        return results\n\n    def execute_delete_task(\n        self,\n        task_type: str,\n        ids: list[int],\n    ) -> tuple[bool, str, str | None]:\n        \"\"\"\n        分发删除任务到最优 Worker\n        \n        统一入口，根据 task_type 选择对应的删除脚本执行。\n        \n        Args:\n            task_type: 任务类型 ('targets', 'organizations', 'scans')\n            ids: 要删除的 ID 列表\n            \n        Returns:\n            (success, message, container_id) 元组\n        \"\"\"\n        import json\n        \n        # 映射任务类型到脚本\n        script_map = {\n            'targets': 'apps.targets.scripts.run_delete_targets',\n            'organizations': 'apps.targets.scripts.run_delete_organizations',\n            'scans': 'apps.scan.scripts.run_delete_scans',\n        }\n        \n        # 映射任务类型到参数名\n        param_map = {\n            'targets': 'target_ids',\n            'organizations': 'organization_ids',\n            'scans': 'scan_ids',\n        }\n        \n        if task_type not in script_map:\n            return False, f\"不支持的任务类型: {task_type}\", None\n        \n        # 选择最佳 Worker\n        worker = self.select_best_worker()\n        if not worker:\n            return False, \"没有可用的 Worker\", None\n        \n        # 构建参数（ID 列表需要 JSON 序列化）\n        script_args = {\n            param_map[task_type]: json.dumps(ids),\n        }\n        \n        # 构建 docker run 命令\n        docker_cmd = self._build_docker_command(\n            worker=worker,\n            script_module=script_map[task_type],\n            script_args=script_args,\n        )\n        \n        logger.info(\n            \"分发删除任务 - 类型: %s, 数量: %d, Worker: %s\",\n            task_type, len(ids), worker.name\n        )\n        \n        # 执行命令\n        success, output = self._execute_docker_command(worker, docker_cmd)\n        \n        if success:\n            container_id = output.strip() if output else None\n            logger.info(\n                \"✓ 删除任务已分发 - 类型: %s, Container: %s\",\n                task_type, container_id\n            )\n            return True, f\"任务已提交到 {worker.name}\", container_id\n        else:\n            logger.error(\n                \"✗ 删除任务分发失败 - 类型: %s, Error: %s\",\n                task_type, output\n            )\n            return False, output, None\n\n\n# 单例\n_distributor: Optional[TaskDistributor] = None\n\n\ndef get_task_distributor() -> TaskDistributor:\n    \"\"\"获取任务分发器单例\"\"\"\n    global _distributor\n    if _distributor is None:\n        _distributor = TaskDistributor()\n    return _distributor\n\n\n"
  },
  {
    "path": "backend/apps/engine/services/wordlist_service.py",
    "content": "\"\"\"Wordlist 业务逻辑服务层（Service）\n\n负责字典文件相关的业务逻辑处理\n\"\"\"\n\nimport hashlib\nimport logging\nimport os\nimport time\nfrom typing import Optional\n\nfrom django.conf import settings\nfrom django.core.exceptions import ValidationError\nfrom django.core.files.uploadedfile import UploadedFile\n\nfrom apps.common.utils import safe_calc_file_sha256\nfrom apps.engine.models import Wordlist\nfrom apps.engine.repositories import DjangoWordlistRepository\n\n\nlogger = logging.getLogger(__name__)\n\n\nclass WordlistService:\n    \"\"\"字典文件业务逻辑服务\"\"\"\n\n    def __init__(self) -> None:\n        \"\"\"初始化服务，注入 Repository 依赖\"\"\"\n        self.repo = DjangoWordlistRepository()\n\n    def get_queryset(self):\n        \"\"\"获取字典列表查询集\"\"\"\n        return self.repo.get_queryset()\n\n    def get_wordlist(self, wordlist_id: int) -> Optional[Wordlist]:\n        \"\"\"根据 ID 获取字典\"\"\"\n        return self.repo.get_by_id(wordlist_id)\n\n    def get_wordlist_by_name(self, name: str) -> Optional[Wordlist]:\n        name = (name or \"\").strip()\n        if not name:\n            return None\n        return self.repo.get_by_name(name)\n\n    def create_wordlist(\n        self,\n        name: str,\n        description: str,\n        uploaded_file: UploadedFile,\n    ) -> Wordlist:\n        \"\"\"创建字典文件记录并保存物理文件\"\"\"\n\n        name = (name or \"\").strip()\n        if not name:\n            raise ValidationError(\"字典名称不能为空\")\n\n        if self._exists_by_name(name):\n            raise ValidationError(\"已存在同名字典\")\n\n        base_dir = getattr(settings, \"WORDLISTS_BASE_PATH\", \"/opt/xingrin/wordlists\")\n        storage_dir = base_dir\n        os.makedirs(storage_dir, exist_ok=True)\n\n        # 按原始文件名保存（做最小清洗），同名上传时覆盖旧文件\n        original_name = os.path.basename(uploaded_file.name or \"wordlist.txt\")\n        # 仅清理路径分隔符，保留空格等字符，避免目录穿越\n        safe_name = original_name.replace(\"/\", \"_\").replace(\"\\\\\", \"_\") or \"wordlist.txt\"\n        # 如果没有扩展名，补一个 .txt，方便识别\n        base, ext = os.path.splitext(safe_name)\n        if not ext:\n            safe_name = f\"{base}.txt\"\n\n        full_path = os.path.join(storage_dir, safe_name)\n\n        # 边写边算 hash\n        hasher = hashlib.sha256()\n        with open(full_path, \"wb+\") as dest:\n            for chunk in uploaded_file.chunks():\n                dest.write(chunk)\n                hasher.update(chunk)\n        file_hash = hasher.hexdigest()\n\n        try:\n            file_size = os.path.getsize(full_path)\n        except OSError:\n            file_size = 0\n\n        line_count = 0\n        try:\n            with open(full_path, \"rb\") as f:\n                for _ in f:\n                    line_count += 1\n        except OSError:\n            logger.warning(\"统计字典行数失败: %s\", full_path)\n\n        wordlist = self.repo.create(\n            name=name,\n            description=description or \"\",\n            file_path=full_path,\n            file_size=file_size,\n            line_count=line_count,\n            file_hash=file_hash,\n        )\n\n        logger.info(\n            \"创建字典: id=%s, name=%s, size=%s, lines=%s, hash=%s\",\n            wordlist.id,\n            wordlist.name,\n            wordlist.file_size,\n            wordlist.line_count,\n            wordlist.file_hash[:16] + \"...\" if wordlist.file_hash else \"N/A\",\n        )\n        return wordlist\n\n    def delete_wordlist(self, wordlist_id: int) -> bool:\n        \"\"\"删除字典记录及对应的物理文件\"\"\"\n        wordlist: Optional[Wordlist] = self.repo.get_by_id(wordlist_id)\n        if not wordlist:\n            return False\n\n        file_path = wordlist.file_path\n        if file_path:\n            try:\n                if os.path.exists(file_path):\n                    os.remove(file_path)\n            except OSError as exc:\n                logger.warning(\"删除字典文件失败: %s - %s\", file_path, exc)\n\n        return self.repo.delete(wordlist_id)\n\n    def _exists_by_name(self, name: str) -> bool:\n        \"\"\"判断是否存在同名的字典\"\"\"\n        return self.repo.get_queryset().filter(name=name).exists()\n\n    def get_wordlist_content(self, wordlist_id: int) -> Optional[str]:\n        \"\"\"获取字典文件内容\"\"\"\n        wordlist = self.repo.get_by_id(wordlist_id)\n        if not wordlist or not wordlist.file_path:\n            return None\n\n        try:\n            with open(wordlist.file_path, \"r\", encoding=\"utf-8\", errors=\"replace\") as f:\n                return f.read()\n        except OSError as exc:\n            logger.warning(\"读取字典文件失败: %s - %s\", wordlist.file_path, exc)\n            return None\n\n    def update_wordlist_content(self, wordlist_id: int, content: str) -> Optional[Wordlist]:\n        \"\"\"更新字典文件内容并重新计算 hash\"\"\"\n        wordlist = self.repo.get_by_id(wordlist_id)\n        if not wordlist or not wordlist.file_path:\n            return None\n\n        try:\n            # 写入新内容\n            with open(wordlist.file_path, \"w\", encoding=\"utf-8\") as f:\n                f.write(content)\n\n            # 重新计算统计信息\n            file_size = os.path.getsize(wordlist.file_path)\n            line_count = content.count(\"\\n\") + (1 if content and not content.endswith(\"\\n\") else 0)\n            file_hash = safe_calc_file_sha256(wordlist.file_path) or \"\"\n\n            # 更新记录\n            wordlist.file_size = file_size\n            wordlist.line_count = line_count\n            wordlist.file_hash = file_hash\n            wordlist.save(update_fields=[\"file_size\", \"line_count\", \"file_hash\", \"updated_at\"])\n\n            logger.info(\n                \"更新字典内容: id=%s, name=%s, size=%s, lines=%s, hash=%s\",\n                wordlist.id,\n                wordlist.name,\n                wordlist.file_size,\n                wordlist.line_count,\n                wordlist.file_hash[:16] + \"...\" if wordlist.file_hash else \"N/A\",\n            )\n            return wordlist\n        except OSError as exc:\n            logger.error(\"写入字典文件失败: %s - %s\", wordlist.file_path, exc)\n            return None\n\n\n__all__ = [\"WordlistService\"]\n"
  },
  {
    "path": "backend/apps/engine/services/worker_load_service.py",
    "content": "\"\"\"\nWorker 负载服务（Redis）\n\n存储结构：\n- worker:load:{worker_id} - Hash: {cpu, mem, updated}\n- TTL: 60 秒（超时自动清理）\n\"\"\"\n\nimport logging\nfrom typing import Optional, Dict, Any\nfrom datetime import datetime\n\nimport redis\nfrom django.conf import settings\n\nlogger = logging.getLogger(__name__)\n\n\nclass WorkerLoadService:\n    \"\"\"Worker 负载数据服务（基于 Redis）\"\"\"\n    \n    # Key 前缀\n    KEY_PREFIX = \"worker:load:\"\n    \n    # 数据过期时间（秒）- 超过此时间未更新视为离线\n    # 心跳间隔 3 秒，TTL 设为 15 秒（5 次心跳容错）\n    TTL_SECONDS = 15\n    \n    def __init__(self):\n        self._redis: Optional[redis.Redis] = None\n    \n    @property\n    def redis(self) -> redis.Redis:\n        \"\"\"懒加载 Redis 连接\"\"\"\n        if self._redis is None:\n            self._redis = redis.Redis(\n                host=settings.REDIS_HOST,\n                port=settings.REDIS_PORT,\n                db=settings.REDIS_DB,\n                decode_responses=True,\n            )\n        return self._redis\n    \n    def _key(self, worker_id: int) -> str:\n        \"\"\"生成 Redis key\"\"\"\n        return f\"{self.KEY_PREFIX}{worker_id}\"\n    \n    def update_load(self, worker_id: int, cpu_percent: float, memory_percent: float) -> bool:\n        \"\"\"\n        更新 Worker 负载数据\n        \n        Args:\n            worker_id: Worker ID\n            cpu_percent: CPU 使用率\n            memory_percent: 内存使用率\n        \n        Returns:\n            是否成功\n        \"\"\"\n        try:\n            key = self._key(worker_id)\n            data = {\n                \"cpu\": cpu_percent,\n                \"mem\": memory_percent,\n                \"updated\": datetime.now().isoformat(),\n            }\n            \n            # 使用 pipeline 原子操作\n            pipe = self.redis.pipeline()\n            pipe.hset(key, mapping=data)\n            pipe.expire(key, self.TTL_SECONDS)\n            pipe.execute()\n            \n            return True\n        except Exception as e:\n            logger.error(f\"更新 Worker 负载失败 - ID: {worker_id}: {e}\")\n            return False\n    \n    def get_load(self, worker_id: int) -> Optional[Dict[str, Any]]:\n        \"\"\"\n        获取 Worker 负载数据\n        \n        Returns:\n            {\"cpu\": float, \"mem\": float, \"updated\": str} 或 None\n        \"\"\"\n        try:\n            key = self._key(worker_id)\n            data = self.redis.hgetall(key)\n            \n            if not data:\n                return None\n            \n            return {\n                \"cpu\": float(data.get(\"cpu\", 0)),\n                \"mem\": float(data.get(\"mem\", 0)),\n                \"updated\": data.get(\"updated\", \"\"),\n            }\n        except Exception as e:\n            logger.error(f\"获取 Worker 负载失败 - ID: {worker_id}: {e}\")\n            return None\n    \n    def get_all_loads(self, worker_ids: list[int]) -> Dict[int, Dict[str, Any]]:\n        \"\"\"\n        批量获取 Worker 负载数据\n        \n        Args:\n            worker_ids: Worker ID 列表\n        \n        Returns:\n            {worker_id: {\"cpu\": float, \"mem\": float}} 字典\n        \"\"\"\n        result = {}\n        \n        try:\n            pipe = self.redis.pipeline()\n            for worker_id in worker_ids:\n                pipe.hgetall(self._key(worker_id))\n            \n            responses = pipe.execute()\n            \n            for worker_id, data in zip(worker_ids, responses):\n                if data:\n                    result[worker_id] = {\n                        \"cpu\": float(data.get(\"cpu\", 0)),\n                        \"mem\": float(data.get(\"mem\", 0)),\n                    }\n        except Exception as e:\n            logger.error(f\"批量获取 Worker 负载失败: {e}\")\n        \n        return result\n    \n    def delete_load(self, worker_id: int) -> bool:\n        \"\"\"删除 Worker 负载数据\"\"\"\n        try:\n            self.redis.delete(self._key(worker_id))\n            return True\n        except Exception as e:\n            logger.error(f\"删除 Worker 负载失败 - ID: {worker_id}: {e}\")\n            return False\n    \n    def is_online(self, worker_id: int) -> bool:\n        \"\"\"检查 Worker 是否在线（Redis 中有数据且未过期）\"\"\"\n        return self.redis.exists(self._key(worker_id)) > 0\n\n\n# 单例\nworker_load_service = WorkerLoadService()\n"
  },
  {
    "path": "backend/apps/engine/services/worker_service.py",
    "content": "\"\"\"\nWorkerNode 业务逻辑服务层（Service）\n\n负责 Worker 节点相关的业务逻辑处理\n\"\"\"\n\nimport logging\nfrom typing import Any\n\nfrom apps.engine.repositories import DjangoWorkerRepository\n\nlogger = logging.getLogger(__name__)\n\n\nclass WorkerService:\n    \"\"\"Worker 节点业务逻辑服务\"\"\"\n\n    def __init__(self) -> None:\n        \"\"\"初始化服务，注入 Repository 依赖\"\"\"\n        self.repo = DjangoWorkerRepository()\n\n    # ==================== 查询 ====================\n\n    def get_worker(self, worker_id: int):\n        \"\"\"根据 ID 获取 Worker 节点\"\"\"\n        return self.repo.get_by_id(worker_id)\n\n    def get_all_workers(self):\n        \"\"\"获取所有 Worker 节点查询集\"\"\"\n        return self.repo.get_all()\n\n    # ==================== 状态更新 ====================\n\n    def update_status(self, worker_id: int, status: str) -> bool:\n        \"\"\"更新 Worker 节点状态\n        \n        Args:\n            worker_id: Worker ID\n            status: 状态 (pending/deploying/online/offline)\n        \"\"\"\n        return self.repo.update_status(worker_id, status)\n\n\n    def delete_worker(self, worker_id: int) -> bool:\n        \"\"\"删除 Worker 节点\"\"\"\n        return self.repo.delete_by_id(worker_id)\n\n    # ==================== 自注册 ====================\n\n    def register_worker(self, name: str, is_local: bool = True):\n        \"\"\"\n        注册 Worker 节点（本地 Worker 自注册用）\n        \n        幂等操作：已存在则返回现有节点。\n        \n        Args:\n            name: Worker 名称\n            is_local: 是否为本地节点\n            \n        Returns:\n            (WorkerNode, created) 元组\n        \"\"\"\n        return self.repo.get_or_create_by_name(\n            name=name,\n            is_local=is_local\n        )\n\n    def remote_uninstall(\n        self, \n        worker_id: int,\n        ip_address: str, \n        ssh_port: int, \n        username: str, \n        password: str | None\n    ) -> tuple[bool, str]:\n        \"\"\"\n        在远程主机上执行卸载脚本\n        \n        Args:\n            worker_id: Worker ID（仅用于日志）\n            ip_address: SSH 主机地址\n            ssh_port: SSH 端口\n            username: SSH 用户名\n            password: SSH 密码\n            \n        Returns:\n            (success, message) 元组\n        \"\"\"\n        if not password:\n            return False, \"未配置 SSH 密码，跳过远程卸载\"\n        \n        try:\n            import paramiko\n            from apps.engine.services.deploy_service import get_uninstall_script\n            \n            ssh = paramiko.SSHClient()\n            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())\n            \n            logger.info(f\"[卸载] 正在连接 {ip_address}...\")\n            ssh.connect(\n                ip_address,\n                port=ssh_port,\n                username=username,\n                password=password,\n                timeout=30\n            )\n            \n            # 上传卸载脚本\n            uninstall_script = get_uninstall_script()\n            remote_script_path = '/tmp/xingrin_uninstall.sh'\n            \n            sftp = ssh.open_sftp()\n            with sftp.file(remote_script_path, 'w') as f:\n                f.write(uninstall_script)\n            sftp.chmod(remote_script_path, 0o755)\n            sftp.close()\n            \n            # 执行卸载脚本\n            logger.info(f\"[卸载] 正在执行卸载脚本...\")\n            stdin, stdout, stderr = ssh.exec_command(f\"bash {remote_script_path}\")\n            exit_status = stdout.channel.recv_exit_status()\n            \n            ssh.close()\n            \n            if exit_status == 0:\n                logger.info(f\"[卸载] Worker {worker_id} 远程卸载成功\")\n                return True, \"远程卸载成功\"\n            else:\n                error = stderr.read().decode().strip()\n                logger.warning(f\"[卸载] Worker {worker_id} 远程卸载失败: {error}\")\n                return False, f\"远程卸载失败: {error}\"\n                \n        except Exception as e:\n            logger.warning(f\"[卸载] Worker {worker_id} 远程卸载异常: {e}\")\n            return False, f\"远程卸载异常: {str(e)}\"\n\n    def execute_remote_command(\n        self,\n        ip_address: str,\n        ssh_port: int,\n        username: str,\n        password: str | None,\n        command: str\n    ) -> tuple[bool, str]:\n        \"\"\"\n        在远程主机上执行命令\n        \n        Args:\n            ip_address: SSH 主机地址\n            ssh_port: SSH 端口\n            username: SSH 用户名\n            password: SSH 密码\n            command: 要执行的命令\n            \n        Returns:\n            (success, message) 元组\n        \"\"\"\n        if not password:\n            return False, \"未配置 SSH 密码\"\n        \n        try:\n            import paramiko\n            \n            ssh = paramiko.SSHClient()\n            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())\n            \n            ssh.connect(\n                ip_address,\n                port=ssh_port,\n                username=username,\n                password=password,\n                timeout=30\n            )\n            \n            stdin, stdout, stderr = ssh.exec_command(command, timeout=120)\n            exit_status = stdout.channel.recv_exit_status()\n            \n            ssh.close()\n            \n            if exit_status == 0:\n                return True, stdout.read().decode().strip()\n            else:\n                error = stderr.read().decode().strip()\n                return False, error\n                \n        except Exception as e:\n            return False, str(e)\n\n\n__all__ = [\"WorkerService\"]\n"
  },
  {
    "path": "backend/apps/engine/urls.py",
    "content": "from django.urls import path, include\nfrom rest_framework.routers import DefaultRouter\n\nfrom .views import (\n    ScanEngineViewSet,\n    WorkerNodeViewSet,\n    WordlistViewSet,\n    NucleiTemplateRepoViewSet,\n)\nfrom .views.fingerprints import (\n    EholeFingerprintViewSet,\n    GobyFingerprintViewSet,\n    WappalyzerFingerprintViewSet,\n    FingersFingerprintViewSet,\n    FingerPrintHubFingerprintViewSet,\n    ARLFingerprintViewSet,\n)\n\n\n# 创建路由器\nrouter = DefaultRouter()\nrouter.register(r\"engines\", ScanEngineViewSet, basename=\"engine\")\nrouter.register(r\"workers\", WorkerNodeViewSet, basename=\"worker\")\nrouter.register(r\"wordlists\", WordlistViewSet, basename=\"wordlist\")\nrouter.register(r\"nuclei/repos\", NucleiTemplateRepoViewSet, basename=\"nuclei-repos\")\n# 指纹管理\nrouter.register(r\"fingerprints/ehole\", EholeFingerprintViewSet, basename=\"ehole-fingerprint\")\nrouter.register(r\"fingerprints/goby\", GobyFingerprintViewSet, basename=\"goby-fingerprint\")\nrouter.register(r\"fingerprints/wappalyzer\", WappalyzerFingerprintViewSet, basename=\"wappalyzer-fingerprint\")\nrouter.register(r\"fingerprints/fingers\", FingersFingerprintViewSet, basename=\"fingers-fingerprint\")\nrouter.register(r\"fingerprints/fingerprinthub\", FingerPrintHubFingerprintViewSet, basename=\"fingerprinthub-fingerprint\")\nrouter.register(r\"fingerprints/arl\", ARLFingerprintViewSet, basename=\"arl-fingerprint\")\n\nurlpatterns = [\n    path(\"\", include(router.urls)),\n]\n\n"
  },
  {
    "path": "backend/apps/engine/views/__init__.py",
    "content": "\"\"\"Engine Views\"\"\"\nfrom .worker_views import WorkerNodeViewSet\nfrom .engine_views import ScanEngineViewSet\nfrom .wordlist_views import WordlistViewSet\nfrom .nuclei_template_repo_views import NucleiTemplateRepoViewSet\n\n__all__ = [\n    \"WorkerNodeViewSet\",\n    \"ScanEngineViewSet\",\n    \"WordlistViewSet\",\n    \"NucleiTemplateRepoViewSet\",\n]\n"
  },
  {
    "path": "backend/apps/engine/views/engine_views.py",
    "content": "\"\"\"\n扫描引擎 Views\n\"\"\"\nfrom rest_framework import viewsets\n\nfrom apps.engine.serializers import ScanEngineSerializer\nfrom apps.engine.services import EngineService\n\n\nclass ScanEngineViewSet(viewsets.ModelViewSet):\n    \"\"\"\n    扫描引擎 ViewSet\n    \n    自动提供完整的 CRUD 操作：\n    - GET /api/engines/ - 获取引擎列表\n    - POST /api/engines/ - 创建新引擎\n    - GET /api/engines/{id}/ - 获取引擎详情\n    - PUT /api/engines/{id}/ - 更新引擎\n    - PATCH /api/engines/{id}/ - 部分更新引擎\n    - DELETE /api/engines/{id}/ - 删除引擎\n    \"\"\"\n    \n    serializer_class = ScanEngineSerializer\n\n    def __init__(self, **kwargs):\n        super().__init__(**kwargs)\n        self.engine_service = EngineService()\n\n    def get_queryset(self):\n        \"\"\"通过服务层获取查询集\"\"\"\n        return self.engine_service.get_all_engines()\n"
  },
  {
    "path": "backend/apps/engine/views/fingerprints/__init__.py",
    "content": "\"\"\"指纹管理 ViewSets\n\n导出所有指纹相关的 ViewSet 类\n\"\"\"\n\nfrom .base import BaseFingerprintViewSet\nfrom .ehole import EholeFingerprintViewSet\nfrom .goby import GobyFingerprintViewSet\nfrom .wappalyzer import WappalyzerFingerprintViewSet\nfrom .fingers import FingersFingerprintViewSet\nfrom .fingerprinthub import FingerPrintHubFingerprintViewSet\nfrom .arl import ARLFingerprintViewSet\n\n__all__ = [\n    \"BaseFingerprintViewSet\",\n    \"EholeFingerprintViewSet\",\n    \"GobyFingerprintViewSet\",\n    \"WappalyzerFingerprintViewSet\",\n    \"FingersFingerprintViewSet\",\n    \"FingerPrintHubFingerprintViewSet\",\n    \"ARLFingerprintViewSet\",\n]\n"
  },
  {
    "path": "backend/apps/engine/views/fingerprints/arl.py",
    "content": "\"\"\"ARL 指纹管理 ViewSet\"\"\"\n\nimport yaml\nfrom django.http import HttpResponse\nfrom rest_framework.decorators import action\nfrom rest_framework.exceptions import ValidationError\n\nfrom apps.common.pagination import BasePagination\nfrom apps.common.response_helpers import success_response\nfrom apps.engine.models import ARLFingerprint\nfrom apps.engine.serializers.fingerprints import ARLFingerprintSerializer\nfrom apps.engine.services.fingerprints import ARLFingerprintService\n\nfrom .base import BaseFingerprintViewSet\n\n\nclass ARLFingerprintViewSet(BaseFingerprintViewSet):\n    \"\"\"ARL 指纹管理 ViewSet\n    \n    继承自 BaseFingerprintViewSet，提供以下 API：\n    \n    标准 CRUD（ModelViewSet）：\n    - GET    /                  列表查询（分页）\n    - POST   /                  创建单条\n    - GET    /{id}/             获取详情\n    - PUT    /{id}/             更新\n    - DELETE /{id}/             删除\n    \n    批量操作（继承自基类）：\n    - POST   /batch_create/     批量创建（JSON body）\n    - POST   /import_file/      文件导入（multipart/form-data，支持 YAML）\n    - POST   /bulk-delete/      批量删除\n    - POST   /delete-all/       删除所有\n    - GET    /export/           导出下载（YAML 格式）\n    \n    智能过滤语法（filter 参数）：\n    - name=\"word\"        模糊匹配 name 字段\n    - name==\"WordPress\"  精确匹配\n    - rule=\"body=\"       按规则内容筛选\n    \"\"\"\n    \n    queryset = ARLFingerprint.objects.all()\n    serializer_class = ARLFingerprintSerializer\n    pagination_class = BasePagination\n    service_class = ARLFingerprintService\n    \n    # 排序配置\n    ordering_fields = ['created_at', 'name']\n    ordering = ['-created_at']\n    \n    # ARL 过滤字段映射\n    FILTER_FIELD_MAPPING = {\n        'name': 'name',\n        'rule': 'rule',\n    }\n    \n    def parse_import_data(self, json_data) -> list:\n        \"\"\"\n        解析 ARL 格式的导入数据（JSON 格式）\n        \n        输入格式：[{...}, {...}] 数组格式\n        返回：指纹列表\n        \"\"\"\n        if isinstance(json_data, list):\n            return json_data\n        return []\n    \n    def get_export_filename(self) -> str:\n        \"\"\"导出文件名\"\"\"\n        return 'ARL.yaml'\n    \n    @action(detail=False, methods=['post'])\n    def import_file(self, request):\n        \"\"\"\n        文件导入（支持 YAML 和 JSON 格式）\n        POST /api/engine/fingerprints/arl/import_file/\n        \n        请求格式：multipart/form-data\n        - file: YAML 或 JSON 文件\n        \n        返回：同 batch_create\n        \"\"\"\n        file = request.FILES.get('file')\n        if not file:\n            raise ValidationError('缺少文件')\n        \n        filename = file.name.lower()\n        content = file.read().decode('utf-8')\n        \n        try:\n            if filename.endswith('.yaml') or filename.endswith('.yml'):\n                # YAML 格式\n                fingerprints = yaml.safe_load(content)\n            else:\n                # JSON 格式\n                import json\n                fingerprints = json.loads(content)\n        except (yaml.YAMLError, json.JSONDecodeError) as e:\n            raise ValidationError(f'无效的文件格式: {e}')\n        \n        if not isinstance(fingerprints, list):\n            raise ValidationError('文件内容必须是数组格式')\n        \n        if not fingerprints:\n            raise ValidationError('文件中没有有效的指纹数据')\n        \n        result = self.get_service().batch_create_fingerprints(fingerprints)\n        return success_response(data=result)\n    \n    @action(detail=False, methods=['get'])\n    def export(self, request):\n        \"\"\"\n        导出指纹（YAML 格式）\n        GET /api/engine/fingerprints/arl/export/\n        \n        返回：YAML 文件下载\n        \"\"\"\n        data = self.get_service().get_export_data()\n        content = yaml.dump(data, allow_unicode=True, default_flow_style=False, sort_keys=False)\n        response = HttpResponse(content, content_type='application/x-yaml')\n        response['Content-Disposition'] = f'attachment; filename=\"{self.get_export_filename()}\"'\n        return response\n"
  },
  {
    "path": "backend/apps/engine/views/fingerprints/base.py",
    "content": "\"\"\"指纹管理基类 ViewSet\n\n提供通用的 CRUD 和批量操作，供 EHole/Goby/Wappalyzer 等子类继承\n\"\"\"\n\nimport json\nimport logging\n\nfrom django.http import HttpResponse\nfrom rest_framework import viewsets, status, filters\nfrom rest_framework.decorators import action\nfrom rest_framework.response import Response\nfrom rest_framework.exceptions import ValidationError\n\nfrom apps.common.pagination import BasePagination\nfrom apps.common.response_helpers import success_response\nfrom apps.common.utils.filter_utils import apply_filters\n\nlogger = logging.getLogger(__name__)\n\n\nclass BaseFingerprintViewSet(viewsets.ModelViewSet):\n    \"\"\"指纹管理基类 ViewSet，供 EHole/Goby/Wappalyzer 等子类继承\n    \n    提供的 API：\n    \n    标准 CRUD（继承自 ModelViewSet）：\n    - GET    /                  列表查询（分页 + 智能过滤）\n    - POST   /                  创建单条\n    - GET    /{id}/             获取详情\n    - PUT    /{id}/             更新\n    - DELETE /{id}/             删除\n    \n    批量操作（本类实现）：\n    - POST   /batch_create/     批量创建（JSON body）\n    - POST   /import_file/      文件导入（multipart/form-data，适合 10MB+ 大文件）\n    - POST   /bulk-delete/      批量删除\n    - POST   /delete-all/       删除所有\n    - GET    /export/           导出下载\n    \n    智能过滤语法（filter 参数）：\n    - field=\"value\"      模糊匹配（包含）\n    - field==\"value\"     精确匹配\n    - 多条件空格分隔     AND 关系\n    - || 或 or           OR 关系\n    \n    子类必须实现：\n    - service_class      Service 类\n    - parse_import_data  解析导入数据格式\n    - get_export_filename 导出文件名\n    \"\"\"\n    \n    pagination_class = BasePagination\n    filter_backends = [filters.OrderingFilter]\n    ordering = ['-created_at']\n    \n    # 子类必须指定\n    service_class = None  # Service 类\n    \n    # 智能过滤字段映射，子类必须覆盖\n    FILTER_FIELD_MAPPING = {}\n    \n    # JSON 数组字段列表（使用 __contains 查询），子类可覆盖\n    JSON_ARRAY_FIELDS = []\n    \n    def get_queryset(self):\n        \"\"\"支持智能过滤语法\"\"\"\n        queryset = super().get_queryset()\n        filter_query = self.request.query_params.get('filter', None)\n        if filter_query:\n            queryset = apply_filters(\n                queryset, \n                filter_query, \n                self.FILTER_FIELD_MAPPING,\n                json_array_fields=getattr(self, 'JSON_ARRAY_FIELDS', [])\n            )\n        return queryset\n    \n    def get_service(self):\n        \"\"\"获取 Service 实例\"\"\"\n        if self.service_class is None:\n            raise NotImplementedError(\"子类必须指定 service_class\")\n        return self.service_class()\n    \n    def parse_import_data(self, json_data: dict) -> list:\n        \"\"\"\n        解析导入数据，子类必须实现\n        \n        Args:\n            json_data: 解析后的 JSON 数据\n            \n        Returns:\n            list: 指纹数据列表\n        \"\"\"\n        raise NotImplementedError(\"子类必须实现 parse_import_data 方法\")\n    \n    def get_export_filename(self) -> str:\n        \"\"\"\n        导出文件名，子类必须实现\n        \n        Returns:\n            str: 文件名\n        \"\"\"\n        raise NotImplementedError(\"子类必须实现 get_export_filename 方法\")\n\n    @action(detail=False, methods=['post'])\n    def batch_create(self, request):\n        \"\"\"\n        批量创建指纹规则\n        POST /api/engine/fingerprints/{type}/batch_create/\n        \n        请求格式：\n        {\n            \"fingerprints\": [\n                {\"cms\": \"WordPress\", \"method\": \"keyword\", ...},\n                ...\n            ]\n        }\n        \n        返回：\n        {\n            \"created\": 2,\n            \"failed\": 0\n        }\n        \"\"\"\n        fingerprints = request.data.get('fingerprints', [])\n        if not fingerprints:\n            raise ValidationError('fingerprints 不能为空')\n        if not isinstance(fingerprints, list):\n            raise ValidationError('fingerprints 必须是数组')\n        \n        result = self.get_service().batch_create_fingerprints(fingerprints)\n        return success_response(data=result, status_code=status.HTTP_201_CREATED)\n    \n    @action(detail=False, methods=['post'])\n    def import_file(self, request):\n        \"\"\"\n        文件导入（适合大文件，10MB+）\n        POST /api/engine/fingerprints/{type}/import_file/\n        \n        请求格式：multipart/form-data\n        - file: JSON 文件（支持标准 JSON 和 JSONL 格式）\n        \n        返回：同 batch_create\n        \"\"\"\n        file = request.FILES.get('file')\n        if not file:\n            raise ValidationError('缺少文件')\n        \n        try:\n            content = file.read().decode('utf-8')\n            json_data = self._parse_json_content(content)\n        except json.JSONDecodeError as e:\n            raise ValidationError(f'无效的 JSON 格式: {e}')\n        except UnicodeDecodeError as e:\n            raise ValidationError(f'文件编码错误: {e}')\n        \n        fingerprints = self.parse_import_data(json_data)\n        if not fingerprints:\n            raise ValidationError('文件中没有有效的指纹数据')\n        \n        result = self.get_service().batch_create_fingerprints(fingerprints)\n        return success_response(data=result, status_code=status.HTTP_201_CREATED)\n    \n    def _parse_json_content(self, content: str):\n        \"\"\"\n        解析 JSON 内容，支持标准 JSON 和 JSONL 格式\n        \n        Args:\n            content: 文件内容字符串\n            \n        Returns:\n            解析后的数据（list 或 dict）\n        \"\"\"\n        content = content.strip()\n        \n        # 尝试标准 JSON 解析\n        try:\n            return json.loads(content)\n        except json.JSONDecodeError:\n            pass\n        \n        # 尝试 JSONL 格式（每行一个 JSON 对象）\n        lines = content.split('\\n')\n        result = []\n        for i, line in enumerate(lines):\n            line = line.strip()\n            if not line:\n                continue\n            try:\n                result.append(json.loads(line))\n            except json.JSONDecodeError as e:\n                raise json.JSONDecodeError(f'第 {i + 1} 行解析失败: {e.msg}', e.doc, e.pos)\n        \n        if not result:\n            raise json.JSONDecodeError('文件为空或格式无效', content, 0)\n        \n        return result\n    \n    @action(detail=False, methods=['post'], url_path='bulk-delete')\n    def bulk_delete(self, request):\n        \"\"\"\n        批量删除\n        POST /api/engine/fingerprints/{type}/bulk-delete/\n        \n        请求格式：{\"ids\": [1, 2, 3]}\n        返回：{\"deleted\": 3}\n        \"\"\"\n        ids = request.data.get('ids', [])\n        if not ids:\n            raise ValidationError('ids 不能为空')\n        if not isinstance(ids, list):\n            raise ValidationError('ids 必须是数组')\n        \n        deleted_count = self.queryset.model.objects.filter(id__in=ids).delete()[0]\n        return success_response(data={'deleted': deleted_count})\n    \n    @action(detail=False, methods=['post'], url_path='delete-all')\n    def delete_all(self, request):\n        \"\"\"\n        删除所有指纹\n        POST /api/engine/fingerprints/{type}/delete-all/\n        \n        返回：{\"deleted\": 1000}\n        \"\"\"\n        deleted_count = self.queryset.model.objects.all().delete()[0]\n        return success_response(data={'deleted': deleted_count})\n    \n    @action(detail=False, methods=['get'])\n    def export(self, request):\n        \"\"\"\n        导出指纹（前端下载）\n        GET /api/engine/fingerprints/{type}/export/\n        \n        返回：JSON 文件下载\n        \"\"\"\n        data = self.get_service().get_export_data()\n        content = json.dumps(data, ensure_ascii=False, indent=2)\n        response = HttpResponse(content, content_type='application/json')\n        response['Content-Disposition'] = f'attachment; filename=\"{self.get_export_filename()}\"'\n        return response\n"
  },
  {
    "path": "backend/apps/engine/views/fingerprints/ehole.py",
    "content": "\"\"\"EHole 指纹管理 ViewSet\"\"\"\n\nfrom apps.common.pagination import BasePagination\nfrom apps.engine.models import EholeFingerprint\nfrom apps.engine.serializers.fingerprints import EholeFingerprintSerializer\nfrom apps.engine.services.fingerprints import EholeFingerprintService\n\nfrom .base import BaseFingerprintViewSet\n\n\nclass EholeFingerprintViewSet(BaseFingerprintViewSet):\n    \"\"\"EHole 指纹管理 ViewSet\n    \n    继承自 BaseFingerprintViewSet，提供以下 API：\n    \n    标准 CRUD（ModelViewSet）：\n    - GET    /                  列表查询（分页）\n    - POST   /                  创建单条\n    - GET    /{id}/             获取详情\n    - PUT    /{id}/             更新\n    - DELETE /{id}/             删除\n    \n    批量操作（继承自基类）：\n    - POST   /batch_create/     批量创建（JSON body）\n    - POST   /import_file/      文件导入（multipart/form-data）\n    - POST   /bulk-delete/      批量删除\n    - POST   /delete-all/       删除所有\n    - GET    /export/           导出下载\n    \n    智能过滤语法（filter 参数）：\n    - cms=\"word\"         模糊匹配 cms 字段\n    - cms==\"WordPress\"   精确匹配\n    - type=\"CMS\"         按类型筛选\n    - method=\"keyword\"   按匹配方式筛选\n    - location=\"body\"    按匹配位置筛选\n    \"\"\"\n    \n    queryset = EholeFingerprint.objects.all()\n    serializer_class = EholeFingerprintSerializer\n    pagination_class = BasePagination\n    service_class = EholeFingerprintService\n    \n    # 排序配置\n    ordering_fields = ['created_at', 'cms']\n    ordering = ['-created_at']\n    \n    # EHole 过滤字段映射\n    FILTER_FIELD_MAPPING = {\n        'cms': 'cms',\n        'method': 'method',\n        'location': 'location',\n        'type': 'type',\n        'isImportant': 'is_important',\n    }\n    \n    def parse_import_data(self, json_data: dict) -> list:\n        \"\"\"\n        解析 EHole JSON 格式的导入数据\n        \n        输入格式：{\"fingerprint\": [...]}\n        返回：指纹列表\n        \"\"\"\n        return json_data.get('fingerprint', [])\n    \n    def get_export_filename(self) -> str:\n        \"\"\"导出文件名\"\"\"\n        return 'ehole.json'\n"
  },
  {
    "path": "backend/apps/engine/views/fingerprints/fingerprinthub.py",
    "content": "\"\"\"FingerPrintHub 指纹管理 ViewSet\"\"\"\n\nfrom apps.common.pagination import BasePagination\nfrom apps.engine.models import FingerPrintHubFingerprint\nfrom apps.engine.serializers.fingerprints import FingerPrintHubFingerprintSerializer\nfrom apps.engine.services.fingerprints import FingerPrintHubFingerprintService\n\nfrom .base import BaseFingerprintViewSet\n\n\nclass FingerPrintHubFingerprintViewSet(BaseFingerprintViewSet):\n    \"\"\"FingerPrintHub 指纹管理 ViewSet\n    \n    继承自 BaseFingerprintViewSet，提供以下 API：\n    \n    标准 CRUD（ModelViewSet）：\n    - GET    /                  列表查询（分页）\n    - POST   /                  创建单条\n    - GET    /{id}/             获取详情\n    - PUT    /{id}/             更新\n    - DELETE /{id}/             删除\n    \n    批量操作（继承自基类）：\n    - POST   /batch_create/     批量创建（JSON body）\n    - POST   /import_file/      文件导入（multipart/form-data）\n    - POST   /bulk-delete/      批量删除\n    - POST   /delete-all/       删除所有\n    - GET    /export/           导出下载\n    \n    智能过滤语法（filter 参数）：\n    - name=\"word\"        模糊匹配 name 字段\n    - fp_id==\"xxx\"       精确匹配指纹ID\n    - author=\"xxx\"       按作者筛选\n    - severity=\"info\"    按严重程度筛选\n    - tags=\"cms\"         按标签筛选\n    \"\"\"\n    \n    queryset = FingerPrintHubFingerprint.objects.all()\n    serializer_class = FingerPrintHubFingerprintSerializer\n    pagination_class = BasePagination\n    service_class = FingerPrintHubFingerprintService\n    \n    # 排序配置\n    ordering_fields = ['created_at', 'name', 'severity']\n    ordering = ['-created_at']\n    \n    # FingerPrintHub 过滤字段映射\n    FILTER_FIELD_MAPPING = {\n        'fp_id': 'fp_id',\n        'name': 'name',\n        'author': 'author',\n        'tags': 'tags',\n        'severity': 'severity',\n        'source_file': 'source_file',\n    }\n    \n    # JSON 数组字段（使用 __contains 查询）\n    JSON_ARRAY_FIELDS = ['http']\n    \n    def parse_import_data(self, json_data) -> list:\n        \"\"\"\n        解析 FingerPrintHub JSON 格式的导入数据\n        \n        输入格式：[{...}, {...}] 数组格式\n        返回：指纹列表\n        \"\"\"\n        if isinstance(json_data, list):\n            return json_data\n        return []\n    \n    def get_export_filename(self) -> str:\n        \"\"\"导出文件名\"\"\"\n        return 'fingerprinthub_web.json'\n"
  },
  {
    "path": "backend/apps/engine/views/fingerprints/fingers.py",
    "content": "\"\"\"Fingers 指纹管理 ViewSet\"\"\"\n\nfrom apps.common.pagination import BasePagination\nfrom apps.engine.models import FingersFingerprint\nfrom apps.engine.serializers.fingerprints import FingersFingerprintSerializer\nfrom apps.engine.services.fingerprints import FingersFingerprintService\n\nfrom .base import BaseFingerprintViewSet\n\n\nclass FingersFingerprintViewSet(BaseFingerprintViewSet):\n    \"\"\"Fingers 指纹管理 ViewSet\n    \n    继承自 BaseFingerprintViewSet，提供以下 API：\n    \n    标准 CRUD（ModelViewSet）：\n    - GET    /                  列表查询（分页）\n    - POST   /                  创建单条\n    - GET    /{id}/             获取详情\n    - PUT    /{id}/             更新\n    - DELETE /{id}/             删除\n    \n    批量操作（继承自基类）：\n    - POST   /batch_create/     批量创建（JSON body）\n    - POST   /import_file/      文件导入（multipart/form-data）\n    - POST   /bulk-delete/      批量删除\n    - POST   /delete-all/       删除所有\n    - GET    /export/           导出下载\n    \n    智能过滤语法（filter 参数）：\n    - name=\"word\"        模糊匹配 name 字段\n    - name==\"WordPress\"  精确匹配\n    - tag=\"cms\"          按标签筛选\n    - focus=\"true\"       按重点关注筛选\n    \"\"\"\n    \n    queryset = FingersFingerprint.objects.all()\n    serializer_class = FingersFingerprintSerializer\n    pagination_class = BasePagination\n    service_class = FingersFingerprintService\n    \n    # 排序配置\n    ordering_fields = ['created_at', 'name']\n    ordering = ['-created_at']\n    \n    # Fingers 过滤字段映射\n    FILTER_FIELD_MAPPING = {\n        'name': 'name',\n        'link': 'link',\n        'focus': 'focus',\n    }\n    \n    # JSON 数组字段（使用 __contains 查询）\n    JSON_ARRAY_FIELDS = ['tag', 'rule', 'default_port']\n    \n    def parse_import_data(self, json_data) -> list:\n        \"\"\"\n        解析 Fingers JSON 格式的导入数据\n        \n        输入格式：[{...}, {...}] 数组格式\n        返回：指纹列表\n        \"\"\"\n        if isinstance(json_data, list):\n            return json_data\n        return []\n    \n    def get_export_filename(self) -> str:\n        \"\"\"导出文件名\"\"\"\n        return 'fingers_http.json'\n"
  },
  {
    "path": "backend/apps/engine/views/fingerprints/goby.py",
    "content": "\"\"\"Goby 指纹管理 ViewSet\"\"\"\n\nfrom apps.common.pagination import BasePagination\nfrom apps.engine.models import GobyFingerprint\nfrom apps.engine.serializers.fingerprints import GobyFingerprintSerializer\nfrom apps.engine.services.fingerprints import GobyFingerprintService\n\nfrom .base import BaseFingerprintViewSet\n\n\nclass GobyFingerprintViewSet(BaseFingerprintViewSet):\n    \"\"\"Goby 指纹管理 ViewSet\n    \n    继承自 BaseFingerprintViewSet，提供以下 API：\n    \n    标准 CRUD（ModelViewSet）：\n    - GET    /                  列表查询（分页）\n    - POST   /                  创建单条\n    - GET    /{id}/             获取详情\n    - PUT    /{id}/             更新\n    - DELETE /{id}/             删除\n    \n    批量操作（继承自基类）：\n    - POST   /batch_create/     批量创建（JSON body）\n    - POST   /import_file/      文件导入（multipart/form-data）\n    - POST   /bulk-delete/      批量删除\n    - POST   /delete-all/       删除所有\n    - GET    /export/           导出下载\n    \n    智能过滤语法（filter 参数）：\n    - name=\"word\"        模糊匹配 name 字段\n    - name==\"ProductName\" 精确匹配\n    \"\"\"\n    \n    queryset = GobyFingerprint.objects.all()\n    serializer_class = GobyFingerprintSerializer\n    pagination_class = BasePagination\n    service_class = GobyFingerprintService\n    \n    # 排序配置\n    ordering_fields = ['created_at', 'name']\n    ordering = ['-created_at']\n    \n    # Goby 过滤字段映射\n    FILTER_FIELD_MAPPING = {\n        'name': 'name',\n        'logic': 'logic',\n    }\n    \n    def parse_import_data(self, json_data) -> list:\n        \"\"\"\n        解析 Goby JSON 格式的导入数据\n        \n        Goby 格式是数组格式：[{...}, {...}, ...]\n        \n        输入格式：[{\"name\": \"...\", \"logic\": \"...\", \"rule\": [...]}, ...]\n        返回：指纹列表\n        \"\"\"\n        if isinstance(json_data, list):\n            return json_data\n        return []\n    \n    def get_export_filename(self) -> str:\n        \"\"\"导出文件名\"\"\"\n        return 'goby.json'\n"
  },
  {
    "path": "backend/apps/engine/views/fingerprints/wappalyzer.py",
    "content": "\"\"\"Wappalyzer 指纹管理 ViewSet\"\"\"\n\nfrom apps.common.pagination import BasePagination\nfrom apps.engine.models import WappalyzerFingerprint\nfrom apps.engine.serializers.fingerprints import WappalyzerFingerprintSerializer\nfrom apps.engine.services.fingerprints import WappalyzerFingerprintService\n\nfrom .base import BaseFingerprintViewSet\n\n\nclass WappalyzerFingerprintViewSet(BaseFingerprintViewSet):\n    \"\"\"Wappalyzer 指纹管理 ViewSet\n    \n    继承自 BaseFingerprintViewSet，提供以下 API：\n    \n    标准 CRUD（ModelViewSet）：\n    - GET    /                  列表查询（分页）\n    - POST   /                  创建单条\n    - GET    /{id}/             获取详情\n    - PUT    /{id}/             更新\n    - DELETE /{id}/             删除\n    \n    批量操作（继承自基类）：\n    - POST   /batch_create/     批量创建（JSON body）\n    - POST   /import_file/      文件导入（multipart/form-data）\n    - POST   /bulk-delete/      批量删除\n    - POST   /delete-all/       删除所有\n    - GET    /export/           导出下载\n    \n    智能过滤语法（filter 参数）：\n    - name=\"word\"        模糊匹配 name 字段\n    - name==\"AppName\"    精确匹配\n    \"\"\"\n    \n    queryset = WappalyzerFingerprint.objects.all()\n    serializer_class = WappalyzerFingerprintSerializer\n    pagination_class = BasePagination\n    service_class = WappalyzerFingerprintService\n    \n    # 排序配置\n    ordering_fields = ['created_at', 'name']\n    ordering = ['-created_at']\n    \n    # Wappalyzer 过滤字段映射\n    # 注意：implies 是 JSON 数组字段，使用 __contains 查询\n    FILTER_FIELD_MAPPING = {\n        'name': 'name',\n        'description': 'description',\n        'website': 'website',\n        'cpe': 'cpe',\n        'implies': 'implies',  # JSON 数组字段\n    }\n    \n    # JSON 数组字段列表（使用 __contains 查询）\n    JSON_ARRAY_FIELDS = ['implies']\n    \n    def parse_import_data(self, json_data: dict) -> list:\n        \"\"\"\n        解析 Wappalyzer JSON 格式的导入数据\n        \n        Wappalyzer 格式是 apps 对象格式：{\"apps\": {\"AppName\": {...}, ...}}\n        \n        输入格式：{\"apps\": {\"1C-Bitrix\": {\"cats\": [...], ...}, ...}}\n        返回：指纹列表（每个 app 转换为带 name 字段的 dict）\n        \"\"\"\n        apps = json_data.get('apps', {})\n        fingerprints = []\n        for name, data in apps.items():\n            item = {'name': name, **data}\n            fingerprints.append(item)\n        return fingerprints\n    \n    def get_export_filename(self) -> str:\n        \"\"\"导出文件名\"\"\"\n        return 'wappalyzer.json'\n"
  },
  {
    "path": "backend/apps/engine/views/nuclei_template_repo_views.py",
    "content": "\"\"\"Nuclei 模板仓库 View 层（HTTP 接口）\n\n本模块提供 Nuclei 多仓库管理的 REST API，基于 DRF ModelViewSet。\n\nAPI 列表：\n==========\n\n仓库 CRUD（ModelViewSet 默认实现）：\n- GET    /api/nuclei/repos/              获取仓库列表\n- POST   /api/nuclei/repos/              创建仓库\n- GET    /api/nuclei/repos/{id}/         获取仓库详情\n- PUT    /api/nuclei/repos/{id}/         更新仓库\n- DELETE /api/nuclei/repos/{id}/         删除仓库\n\n自定义 Action：\n- POST   /api/nuclei/repos/{id}/refresh/           手动 Git 同步（clone/pull）\n- GET    /api/nuclei/repos/{id}/templates/tree/    获取当前本地模板目录树（不自动同步）\n- GET    /api/nuclei/repos/{id}/templates/content/ 获取单个模板内容（只读）\n\n调用链路：\n    HTTP Request → View → Service → Repository → Model/FileSystem\n\"\"\"\n\nfrom __future__ import annotations\n\nimport logging\n\nfrom django.core.exceptions import ValidationError\nfrom rest_framework import status, viewsets\nfrom rest_framework.decorators import action\nfrom rest_framework.request import Request\nfrom rest_framework.response import Response\n\nfrom apps.common.response_helpers import success_response, error_response\nfrom apps.common.error_codes import ErrorCodes\nfrom apps.engine.models import NucleiTemplateRepo\nfrom apps.engine.serializers import NucleiTemplateRepoSerializer\nfrom apps.engine.services import NucleiTemplateRepoService\n\n\nlogger = logging.getLogger(__name__)\n\n\nclass NucleiTemplateRepoViewSet(viewsets.ModelViewSet):\n    \"\"\"Nuclei 模板 Git 仓库 ViewSet\n\n    继承 ModelViewSet，自动获得 CRUD 能力：\n    - list: 获取仓库列表\n    - create: 创建仓库\n    - retrieve: 获取仓库详情\n    - update: 更新仓库\n    - destroy: 删除仓库\n\n    额外提供三个自定义 Action（见下方方法）。\n\n    Attributes:\n        queryset: 默认查询集，按创建时间倒序\n        serializer_class: 序列化器类\n        service: Service 层实例，处理业务逻辑\n    \"\"\"\n\n    # DRF ModelViewSet 配置\n    queryset = NucleiTemplateRepo.objects.all().order_by(\"-created_at\")\n    serializer_class = NucleiTemplateRepoSerializer\n\n    def __init__(self, *args, **kwargs) -> None:  # type: ignore[override]\n        \"\"\"初始化 ViewSet，创建 Service 实例\"\"\"\n        super().__init__(*args, **kwargs)\n        self.service = NucleiTemplateRepoService()\n\n    def perform_create(self, serializer) -> None:  # type: ignore[override]\n        \"\"\"创建仓库时初始化本地路径目录\n\n        设计原则：第一次创建仓库就确定好 local_path，后续所有 Git 拉取和模板读取\n        都复用这个固定目录，避免运行时才临时决定路径。\n        \"\"\"\n        instance = serializer.save()\n        # 初始化并持久化 local_path，同时在文件系统中创建对应目录\n        self.service.ensure_local_path(instance)\n\n    def perform_destroy(self, instance: NucleiTemplateRepo) -> None:  # type: ignore[override]\n        \"\"\"删除仓库时同时清理本地目录\n\n        前端在 /tools/nuclei/ 点击删除时：\n        - 这里会先尝试删除 instance.local_path 对应的目录\n        - 然后调用父类逻辑删除数据库记录\n        \"\"\"\n        # 清理本地目录（最佳努力，不影响主流程）\n        self.service.remove_local_path_dir(instance)\n        super().perform_destroy(instance)\n\n    # ==================== 自定义 Action: Git 同步 ====================\n\n    @action(detail=True, methods=[\"post\"], url_path=\"refresh\")\n    def refresh(self, request: Request, pk: str | None = None) -> Response:\n        \"\"\"手动触发 Git 同步\n\n        POST /api/nuclei/repos/{id}/refresh/\n\n        执行 git clone（首次）或 git pull（后续）。\n        同步成功后更新 last_synced_at。\n\n        Returns:\n            200: {\"message\": \"刷新成功\", \"result\": {...}}\n            400: {\"message\": \"无效的仓库 ID\"} 或 {\"message\": \"仓库不存在\"}\n            500: {\"message\": \"刷新仓库失败\"}\n        \"\"\"\n        # 解析仓库 ID\n        try:\n            repo_id = int(pk) if pk is not None else None\n        except (TypeError, ValueError):\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='Invalid repository ID',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n\n        # 调用 Service 层\n        try:\n            result = self.service.refresh_repo(repo_id)\n        except ValidationError as exc:\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message=str(exc),\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        except Exception as exc:  # noqa: BLE001\n            logger.error(\"刷新 Nuclei 模板仓库失败: %s\", exc, exc_info=True)\n            return error_response(\n                code=ErrorCodes.SERVER_ERROR,\n                message=f'Refresh failed: {exc}',\n                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR\n            )\n\n        return success_response(data={'result': result})\n\n    # ==================== 自定义 Action: 模板只读浏览 ====================\n\n    @action(detail=True, methods=[\"get\"], url_path=\"templates/tree\")\n    def templates_tree(self, request: Request, pk: str | None = None) -> Response:\n        \"\"\"获取模板目录树\n\n        GET /api/nuclei/repos/{id}/templates/tree/\n\n        只读取当前本地仓库目录，不主动触发 Git 同步。\n        如需拉取远端最新内容，请先调用 POST /api/nuclei/repos/{id}/refresh/。\n\n        返回的树形结构包含所有文件夹和 .yaml/.yml 文件。\n\n        Returns:\n            200: {\"roots\": [{type, name, path, children}, ...]}\n            400: {\"message\": \"无效的仓库 ID\"} 或 {\"message\": \"仓库不存在\"}\n            500: {\"message\": \"获取模板目录树失败\"}\n        \"\"\"\n        # 解析仓库 ID\n        try:\n            repo_id = int(pk) if pk is not None else None\n        except (TypeError, ValueError):\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='Invalid repository ID',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n\n        # 调用 Service 层，仅从当前本地目录读取目录树\n        try:\n            roots = self.service.get_template_tree(repo_id)\n        except ValidationError as exc:\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message=str(exc),\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        except Exception as exc:  # noqa: BLE001\n            logger.error(\"获取 Nuclei 模板目录树失败: %s\", exc, exc_info=True)\n            return error_response(\n                code=ErrorCodes.SERVER_ERROR,\n                message='Failed to get template tree',\n                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR\n            )\n\n        return success_response(data={'roots': roots})\n\n    @action(detail=True, methods=[\"get\"], url_path=\"templates/content\")\n    def templates_content(self, request: Request, pk: str | None = None) -> Response:\n        \"\"\"获取单个模板文件内容\n\n        GET /api/nuclei/repos/{id}/templates/content/?path=http/example.yaml\n\n        Query Parameters:\n            path: 模板相对路径，如 \"http/cves/CVE-2021-1234.yaml\"\n\n        Returns:\n            200: {\"path\": \"...\", \"name\": \"...\", \"content\": \"...\"}\n            400: {\"message\": \"无效的仓库 ID\"} 或 {\"message\": \"缺少 path 参数\"}\n            404: {\"message\": \"模板不存在或无法读取\"}\n            500: {\"message\": \"获取模板内容失败\"}\n        \"\"\"\n        # 解析仓库 ID\n        try:\n            repo_id = int(pk) if pk is not None else None\n        except (TypeError, ValueError):\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='Invalid repository ID',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n\n        # 解析 path 参数\n        rel_path = (request.query_params.get(\"path\", \"\") or \"\").strip()\n        if not rel_path:\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='Missing path parameter',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n\n        # 调用 Service 层\n        try:\n            result = self.service.get_template_content(repo_id, rel_path)\n        except ValidationError as exc:\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message=str(exc),\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        except Exception as exc:  # noqa: BLE001\n            logger.error(\"获取 Nuclei 模板内容失败: %s\", exc, exc_info=True)\n            return error_response(\n                code=ErrorCodes.SERVER_ERROR,\n                message='Failed to get template content',\n                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR\n            )\n\n        # 文件不存在\n        if result is None:\n            return error_response(\n                code=ErrorCodes.NOT_FOUND,\n                message='Template not found or unreadable',\n                status_code=status.HTTP_404_NOT_FOUND\n            )\n        return success_response(data=result)\n"
  },
  {
    "path": "backend/apps/engine/views/wordlist_views.py",
    "content": "\"\"\"字典管理 API Views\"\"\"\n\nimport os\n\nfrom django.core.exceptions import ValidationError\nfrom django.http import FileResponse\nfrom rest_framework import status, viewsets\nfrom rest_framework.decorators import action\nfrom rest_framework.response import Response\n\nfrom apps.common.pagination import BasePagination\nfrom apps.common.response_helpers import success_response, error_response\nfrom apps.common.error_codes import ErrorCodes\nfrom apps.engine.serializers.wordlist_serializer import WordlistSerializer\nfrom apps.engine.services.wordlist_service import WordlistService\n\n\nclass WordlistViewSet(viewsets.ViewSet):\n    \"\"\"字典管理 ViewSet\"\"\"\n\n    pagination_class = BasePagination\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.service = WordlistService()\n\n    @property\n    def paginator(self):\n        \"\"\"懒加载分页器实例\"\"\"\n        if not hasattr(self, \"_paginator\"):\n            if self.pagination_class is None:\n                self._paginator = None\n            else:\n                self._paginator = self.pagination_class()\n        return self._paginator\n\n    def list(self, request):\n        \"\"\"获取字典列表\"\"\"\n        queryset = self.service.get_queryset()\n        page = self.paginator.paginate_queryset(queryset, request, view=self)\n        serializer = WordlistSerializer(page, many=True)\n        return self.paginator.get_paginated_response(serializer.data)\n\n    def create(self, request):\n        \"\"\"上传并创建字典记录\"\"\"\n        name = (request.data.get(\"name\", \"\") or \"\").strip()\n        description = request.data.get(\"description\", \"\") or \"\"\n        uploaded_file = request.FILES.get(\"file\")\n\n        if not uploaded_file:\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='Missing wordlist file',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n\n        try:\n            wordlist = self.service.create_wordlist(\n                name=name,\n                description=description,\n                uploaded_file=uploaded_file,\n            )\n        except ValidationError as exc:\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message=str(exc),\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n\n        serializer = WordlistSerializer(wordlist)\n        return success_response(data=serializer.data, status_code=status.HTTP_201_CREATED)\n\n    def destroy(self, request, pk=None):\n        \"\"\"删除字典记录\"\"\"\n        try:\n            wordlist_id = int(pk)\n        except (TypeError, ValueError):\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='Invalid ID',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n\n        success = self.service.delete_wordlist(wordlist_id)\n        if not success:\n            return error_response(\n                code=ErrorCodes.NOT_FOUND,\n                status_code=status.HTTP_404_NOT_FOUND\n            )\n\n        return Response(status=status.HTTP_204_NO_CONTENT)\n\n    @action(detail=False, methods=[\"get\"], url_path=\"download\")\n    def download(self, request):\n        \"\"\"通过字典名称下载文件内容\n\n        Query 参数：\n        - wordlist: 字典名称，对应 Wordlist.name（唯一）\n        \"\"\"\n        name = (request.query_params.get(\"wordlist\", \"\") or \"\").strip()\n        if not name:\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='Missing parameter: wordlist',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n\n        wordlist = self.service.get_wordlist_by_name(name)\n        if not wordlist:\n            return error_response(\n                code=ErrorCodes.NOT_FOUND,\n                message='Wordlist not found',\n                status_code=status.HTTP_404_NOT_FOUND\n            )\n\n        file_path = wordlist.file_path\n        if not file_path or not os.path.exists(file_path):\n            return error_response(\n                code=ErrorCodes.NOT_FOUND,\n                message='Wordlist file not found',\n                status_code=status.HTTP_404_NOT_FOUND\n            )\n\n        filename = os.path.basename(file_path)\n        response = FileResponse(open(file_path, \"rb\"), as_attachment=True, filename=filename)\n        return response\n\n    @action(detail=True, methods=[\"get\", \"put\"], url_path=\"content\")\n    def content(self, request, pk=None):\n        \"\"\"获取或更新字典文件内容\n\n        GET: 返回字典文件的文本内容\n        PUT: 更新字典文件内容，重新计算 hash\n        \"\"\"\n        try:\n            wordlist_id = int(pk)\n        except (TypeError, ValueError):\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='Invalid ID',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n\n        if request.method == \"GET\":\n            content = self.service.get_wordlist_content(wordlist_id)\n            if content is None:\n                return error_response(\n                    code=ErrorCodes.NOT_FOUND,\n                    message='Wordlist not found or file unreadable',\n                    status_code=status.HTTP_404_NOT_FOUND\n                )\n            return success_response(data={\"content\": content})\n\n        elif request.method == \"PUT\":\n            content = request.data.get(\"content\")\n            if content is None:\n                return error_response(\n                    code=ErrorCodes.VALIDATION_ERROR,\n                    message='Missing content parameter',\n                    status_code=status.HTTP_400_BAD_REQUEST\n                )\n\n            wordlist = self.service.update_wordlist_content(wordlist_id, content)\n            if not wordlist:\n                return error_response(\n                    code=ErrorCodes.NOT_FOUND,\n                    message='Wordlist not found or update failed',\n                    status_code=status.HTTP_404_NOT_FOUND\n                )\n\n            serializer = WordlistSerializer(wordlist)\n            return success_response(data=serializer.data)\n"
  },
  {
    "path": "backend/apps/engine/views/worker_views.py",
    "content": "\"\"\"\nWorker 节点 Views\n\"\"\"\nimport os\nimport threading\nimport logging\n\nfrom rest_framework import viewsets, status\nfrom rest_framework.decorators import action\nfrom rest_framework.response import Response\n\nfrom apps.common.response_helpers import success_response, error_response\nfrom apps.common.error_codes import ErrorCodes\nfrom apps.engine.serializers import WorkerNodeSerializer\nfrom apps.engine.services import WorkerService\nfrom apps.common.signals import worker_delete_failed\n\nlogger = logging.getLogger(__name__)\n\n\nclass WorkerNodeViewSet(viewsets.ModelViewSet):\n    \"\"\"\n    Worker 节点 ViewSet\n    \n    HTTP API:\n    - GET /api/workers/ - 获取节点列表\n    - POST /api/workers/ - 创建节点\n    - DELETE /api/workers/{id}/ - 删除节点（同时执行远程卸载）\n    - POST /api/workers/{id}/heartbeat/ - 心跳上报\n    \n    部署通过 WebSocket 终端进行:\n    - ws://host/ws/workers/{id}/deploy/\n    \"\"\"\n    \n    serializer_class = WorkerNodeSerializer\n\n    def __init__(self, **kwargs):\n        super().__init__(**kwargs)\n        self.worker_service = WorkerService()\n\n    def get_queryset(self):\n        \"\"\"通过服务层获取 Worker 查询集\"\"\"\n        return self.worker_service.get_all_workers()\n    \n    def get_serializer_context(self):\n        \"\"\"传入批量查询的 Redis 负载数据，避免 N+1 查询\"\"\"\n        context = super().get_serializer_context()\n        \n        # 仅在 list 操作时批量预加载\n        if self.action == 'list':\n            from apps.engine.services.worker_load_service import worker_load_service\n            queryset = self.get_queryset()\n            worker_ids = list(queryset.values_list('id', flat=True))\n            context['loads'] = worker_load_service.get_all_loads(worker_ids)\n        \n        return context\n    \n    def destroy(self, request, *args, **kwargs):\n        \"\"\"\n        删除 Worker 节点\n        \n        流程：\n        1. 后台线程执行远程卸载脚本\n        2. 卸载完成后删除数据库记录\n        3. 发送通知\n        \"\"\"\n        worker = self.get_object()\n        \n        # 在主线程中提取所有需要的数据（避免后台线程访问 ORM 对象）\n        worker_id = worker.id\n        worker_name = worker.name\n        ip_address = worker.ip_address\n        ssh_port = worker.ssh_port\n        username = worker.username\n        password = worker.password\n        \n        # 1. 删除 Redis 中的负载数据\n        from apps.engine.services.worker_load_service import worker_load_service\n        worker_load_service.delete_load(worker_id)\n        \n        # 2. 删除数据库记录（立即生效，前端刷新时不会再看到）\n        self.worker_service.delete_worker(worker_id)\n        \n        def _async_remote_uninstall():\n            \"\"\"后台执行远程卸载\"\"\"\n            try:\n                success, message = self.worker_service.remote_uninstall(\n                    worker_id=worker_id,\n                    ip_address=ip_address,\n                    ssh_port=ssh_port,\n                    username=username,\n                    password=password\n                )\n                if success:\n                    logger.info(f\"Worker {worker_name} 远程卸载成功\")\n                else:\n                    logger.warning(f\"Worker {worker_name} 远程卸载: {message}\")\n                    # 卸载失败时发送通知\n                    worker_delete_failed.send(\n                        sender=self.__class__,\n                        worker_name=worker_name,\n                        message=message\n                    )\n            except Exception as e:\n                logger.error(f\"Worker {worker_name} 远程卸载失败: {e}\")\n                worker_delete_failed.send(\n                    sender=self.__class__,\n                    worker_name=worker_name,\n                    message=str(e)\n                )\n        \n        # 2. 后台线程执行远程卸载（不阻塞响应）\n        threading.Thread(target=_async_remote_uninstall, daemon=True).start()\n        \n        # 3. 立即返回成功\n        return success_response(\n            data={'name': worker_name}\n        )\n    \n    @action(detail=True, methods=['post'])\n    def heartbeat(self, request, pk=None):\n        \"\"\"\n        接收心跳上报（写 Redis，首次心跳更新部署状态，检查版本）\n        \n        请求体:\n        {\n            \"cpu_percent\": 50.0,\n            \"memory_percent\": 60.0,\n            \"version\": \"v1.0.9\"\n        }\n        \n        返回:\n        {\n            \"status\": \"ok\",\n            \"need_update\": true/false,\n            \"server_version\": \"v1.0.19\"\n        }\n        \n        状态流转:\n        ┌─────────────────────────────────────────────────────────────────────┐\n        │ 场景                        │ 状态变化                              │\n        ├─────────────────────────────┼───────────────────────────────────────┤\n        │ 首次心跳                    │ pending/deploying → online            │\n        │ 远程 Worker 版本不匹配      │ online → updating → (更新成功) online │\n        │ 远程 Worker 更新失败        │ updating → outdated                   │\n        │ 本地 Worker 版本不匹配      │ online → outdated (需手动 update.sh)  │\n        │ 版本匹配                    │ updating/outdated → online            │\n        └─────────────────────────────┴───────────────────────────────────────┘\n        \"\"\"\n        from apps.engine.services.worker_load_service import worker_load_service\n        from django.conf import settings\n        \n        worker = self.get_object()\n        info = request.data if request.data else {}\n        \n        # 1. 写入 Redis（实时负载数据，TTL=60秒）\n        cpu = info.get('cpu_percent', 0)\n        mem = info.get('memory_percent', 0)\n        worker_load_service.update_load(worker.id, cpu, mem)\n        \n        # 2. 首次心跳：更新状态为 online\n        if worker.status not in ('online', 'offline'):\n            worker.status = 'online'\n            worker.save(update_fields=['status'])\n        \n        # 3. 版本检查：比较 agent 版本与 server 版本\n        agent_version = info.get('version', '')\n        server_version = settings.IMAGE_TAG  # Server 当前版本\n        need_update = False\n        \n        if agent_version and agent_version != 'unknown':\n            # 版本不匹配时通知 agent 更新\n            need_update = agent_version != server_version\n            if need_update:\n                logger.info(\n                    f\"Worker {worker.name} 版本不匹配: agent={agent_version}, server={server_version}\"\n                )\n                \n                # 远程 Worker：服务端主动通过 SSH 触发更新\n                if not worker.is_local and worker.ip_address:\n                    self._trigger_remote_agent_update(worker, server_version)\n                else:\n                    # 本地 Worker 版本不匹配：标记为 outdated\n                    # 需要用户手动执行 update.sh 更新\n                    if worker.status != 'outdated':\n                        worker.status = 'outdated'\n                        worker.save(update_fields=['status'])\n            else:\n                # 版本匹配，确保状态为 online\n                if worker.status in ('updating', 'outdated'):\n                    worker.status = 'online'\n                    worker.save(update_fields=['status'])\n        \n        return success_response(\n            data={\n                'status': 'ok',\n                'needUpdate': need_update,\n                'serverVersion': server_version\n            }\n        )\n    \n    def _trigger_remote_agent_update(self, worker, target_version: str):\n        \"\"\"\n        通过 SSH 触发远程 agent 更新（后台执行，不阻塞心跳响应）\n        \n        使用 Redis 锁防止重复触发（同一 worker 60秒内只触发一次）\n        \"\"\"\n        import redis\n        from django.conf import settings as django_settings\n        \n        redis_url = f\"redis://{django_settings.REDIS_HOST}:{django_settings.REDIS_PORT}/{django_settings.REDIS_DB}\"\n        redis_client = redis.from_url(redis_url)\n        lock_key = f\"agent_update_lock:{worker.id}\"\n        \n        # 尝试获取锁（60秒过期，防止重复触发）\n        if not redis_client.set(lock_key, \"1\", nx=True, ex=60):\n            logger.debug(f\"Worker {worker.name} 更新已在进行中，跳过\")\n            return\n        \n        # 获取锁成功，设置状态为 updating\n        self._set_worker_status(worker.id, 'updating')\n        \n        # 提取数据避免后台线程访问 ORM\n        worker_id = worker.id\n        worker_name = worker.name\n        ip_address = worker.ip_address\n        ssh_port = worker.ssh_port\n        username = worker.username\n        password = worker.password\n        \n        def _async_update():\n            try:\n                logger.info(f\"开始远程更新 Worker {worker_name} 到 {target_version}\")\n                \n                # 构建更新命令：拉取新镜像并重启 agent\n                docker_user = getattr(django_settings, 'DOCKER_USER', 'yyhuni')\n                update_cmd = f'''\n                    docker pull {docker_user}/xingrin-agent:{target_version} && \\\n                    docker stop xingrin-agent 2>/dev/null || true && \\\n                    docker rm xingrin-agent 2>/dev/null || true && \\\n                    docker run -d --pull=always \\\n                        --name xingrin-agent \\\n                        --restart always \\\n                        -e HEARTBEAT_API_URL=\"https://{django_settings.PUBLIC_HOST}:{getattr(django_settings, 'PUBLIC_PORT', '8083')}\" \\\n                        -e WORKER_ID=\"{worker_id}\" \\\n                        -e IMAGE_TAG=\"{target_version}\" \\\n                        -v /proc:/host/proc:ro \\\n                        {docker_user}/xingrin-agent:{target_version}\n                '''\n                \n                success, message = self.worker_service.execute_remote_command(\n                    ip_address=ip_address,\n                    ssh_port=ssh_port,\n                    username=username,\n                    password=password,\n                    command=update_cmd\n                )\n                \n                if success:\n                    logger.info(f\"Worker {worker_name} 远程更新成功\")\n                    # 更新成功后，新 agent 心跳会自动把状态改回 online\n                else:\n                    logger.warning(f\"Worker {worker_name} 远程更新失败: {message}\")\n                    # 更新失败，标记为 outdated\n                    self._set_worker_status(worker_id, 'outdated')\n                    \n            except Exception as e:\n                logger.error(f\"Worker {worker_name} 远程更新异常: {e}\")\n                self._set_worker_status(worker_id, 'outdated')\n            finally:\n                # 释放锁\n                redis_client.delete(lock_key)\n        \n        # 后台执行，不阻塞心跳响应\n        threading.Thread(target=_async_update, daemon=True).start()\n    \n    def _set_worker_status(self, worker_id: int, status: str):\n        \"\"\"更新 Worker 状态（用于后台线程）\"\"\"\n        try:\n            from apps.engine.models import WorkerNode\n            WorkerNode.objects.filter(id=worker_id).update(status=status)\n        except Exception as e:\n            logger.error(f\"更新 Worker {worker_id} 状态失败: {e}\")\n    \n    @action(detail=False, methods=['post'])\n    def register(self, request):\n        \"\"\"\n        Worker 自注册 API\n        \n        本地 Worker 启动时调用此接口注册自己。\n        如果同名节点已存在，返回现有记录；否则创建新记录。\n        \n        请求体:\n        {\n            \"name\": \"Local-Scan-Worker\",\n            \"is_local\": true\n        }\n        \n        返回:\n        {\n            \"worker_id\": 1,\n            \"name\": \"Local-Scan-Worker\",\n            \"created\": false  # true 表示新创建，false 表示已存在\n        }\n        \"\"\"\n        name = request.data.get('name')\n        is_local = request.data.get('is_local', True)\n        \n        if not name:\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='Missing name parameter',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        \n        worker, created = self.worker_service.register_worker(\n            name=name,\n            is_local=is_local\n        )\n        \n        return success_response(\n            data={\n                'workerId': worker.id,\n                'name': worker.name,\n                'created': created\n            }\n        )\n    \n    @action(detail=False, methods=['get'])\n    def config(self, request):\n        \"\"\"\n        获取任务容器配置（配置中心 API）\n        \n        Worker 启动时调用此接口获取完整配置，实现配置中心化管理。\n        Worker 通过 IS_LOCAL 环境变量声明身份，请求时带上 ?is_local=true/false 参数。\n        \n        请求参数:\n            is_local: true/false - Worker 是否为本地节点（Docker 网络内）\n        \n        返回:\n        {\n            \"db\": {\"host\": \"...\", \"port\": \"...\", ...},\n            \"paths\": {\"results\": \"...\", \"logs\": \"...\"}\n        }\n        \n        配置逻辑:\n            - 本地 Worker (is_local=true): db_host=postgres\n            - 远程 Worker (is_local=false): db_host=PUBLIC_HOST\n        \"\"\"\n        from django.conf import settings\n        import logging\n        logger = logging.getLogger(__name__)\n        \n        # 从请求参数获取 Worker 身份（由 Worker 自己声明）\n        # 不再依赖 IP 判断，避免不同网络环境下的兼容性问题\n        is_local_param = request.query_params.get('is_local', '').lower()\n        is_local_worker = is_local_param == 'true'\n        \n        # 根据请求来源返回不同的数据库地址\n        db_host = settings.DATABASES['default']['HOST']\n        _is_internal_db = db_host in ('postgres', 'localhost', '127.0.0.1')\n        \n        logger.info(\n            \"Worker 配置请求 - is_local_param: %s, is_local_worker: %s, db_host: %s, is_internal_db: %s\",\n            is_local_param, is_local_worker, db_host, _is_internal_db\n        )\n        \n        if _is_internal_db:\n            # 本地数据库场景\n            if is_local_worker:\n                # 本地 Worker：直接用 Docker 内部服务名\n                worker_db_host = 'postgres'\n            else:\n                # 远程 Worker：通过公网 IP 访问\n                public_host = settings.PUBLIC_HOST\n                if public_host in ('server', 'localhost', '127.0.0.1'):\n                    logger.warning(\"远程 Worker 请求配置，但 PUBLIC_HOST=%s 不是有效的公网地址\", public_host)\n                worker_db_host = public_host\n        else:\n            # 远程数据库场景：所有 Worker 都用 DB_HOST\n            worker_db_host = db_host\n        \n        logger.info(\"返回 Worker 配置 - db_host: %s\", worker_db_host)\n        \n        return success_response(\n            data={\n                'db': {\n                    'host': worker_db_host,\n                    'port': str(settings.DATABASES['default']['PORT']),\n                    'name': settings.DATABASES['default']['NAME'],\n                    'user': settings.DATABASES['default']['USER'],\n                    'password': settings.DATABASES['default']['PASSWORD'],\n                },\n                'paths': {\n                    'results': getattr(settings, 'CONTAINER_RESULTS_MOUNT', '/opt/xingrin/results'),\n                    'logs': getattr(settings, 'CONTAINER_LOGS_MOUNT', '/opt/xingrin/logs'),\n                },\n                'logging': {\n                    'level': os.getenv('LOG_LEVEL', 'INFO'),\n                    'enableCommandLogging': os.getenv('ENABLE_COMMAND_LOGGING', 'true').lower() == 'true',\n                },\n                'debug': settings.DEBUG,\n            }\n        )\n"
  },
  {
    "path": "backend/apps/scan/__init__.py",
    "content": ""
  },
  {
    "path": "backend/apps/scan/apps.py",
    "content": "from django.apps import AppConfig\n\n\nclass ScanConfig(AppConfig):\n    \"\"\"扫描应用配置类\"\"\"\n    default_auto_field = 'django.db.models.BigAutoField'\n    name = 'apps.scan'\n    \n    def ready(self):\n        \"\"\"应用启动时注册信号接收器\"\"\"\n        # 导入接收器模块以注册信号处理函数\n        from apps.scan.notifications import receivers  # noqa: F401"
  },
  {
    "path": "backend/apps/scan/configs/command_templates.py",
    "content": "\"\"\"\n扫描工具命令模板（简化版，不使用 Jinja2）\n\n使用 Python 原生字符串格式化，零依赖。\n\"\"\"\n\nfrom django.conf import settings\n\n# ==================== 路径配置 ====================\nSCAN_TOOLS_BASE_PATH = getattr(settings, 'SCAN_TOOLS_BASE_PATH', '/usr/local/bin')\n\n# ==================== 子域名发现 ====================\n\nSUBDOMAIN_DISCOVERY_COMMANDS = {\n    'subfinder': {\n        # 使用所有数据源（包括付费源，只要配置了 API key）\n        # -all       使用所有数据源（slow 但全面）\n        # -v         显示详细输出，包括使用的数据源（调试用）\n        # 注意：不要加 -recursive，它会排除不支持递归的源（如 fofa）\n        'base': \"subfinder -d {domain} -all -o '{output_file}' -v\",\n        'optional': {\n            'threads': '-t {threads}',              # 控制并发 goroutine 数\n            'provider_config': \"-pc '{provider_config}'\",  # Provider 配置文件路径\n        }\n    },\n    \n    'sublist3r': {\n        'base': \"python3 '/usr/local/share/Sublist3r/sublist3r.py' -d {domain} -o '{output_file}'\",\n        'optional': {\n            'threads': '-t {threads}'\n        }\n    },\n    \n    'assetfinder': {\n        'base': \"assetfinder --subs-only {domain} > '{output_file}'\",\n    },\n    \n    # === 主动字典爆破 ===\n    'subdomain_bruteforce': {\n        # 使用字典对目标域名进行 DNS 爆破\n        # -d 目标域名，-w 字典文件，-o 输出文件\n        'base': \"puredns bruteforce '{wordlist}' {domain} -r /app/backend/resources/resolvers.txt --write '{output_file}' --quiet\",\n        'optional': {},\n    },\n    \n    # === DNS 存活验证（最终统一验证）===\n    'subdomain_resolve': {\n        # 验证子域名是否能解析（存活验证）\n        # 输入文件为候选子域列表，输出为存活子域列表\n        'base': \"puredns resolve '{input_file}' -r /app/backend/resources/resolvers.txt --write '{output_file}' --wildcard-tests 50 --wildcard-batch 1000000 --quiet\",\n        'optional': {},\n    },\n    \n    # === 变异生成 + 存活验证（流式管道，避免 OOM）===\n    'subdomain_permutation_resolve': {\n        # 流式管道：dnsgen 生成变异域名 | puredns resolve 验证存活\n        # 不落盘中间文件，避免内存爆炸；不做通配符过滤\n        'base': \"cat '{input_file}' | dnsgen - | puredns resolve -r /app/backend/resources/resolvers.txt --write '{output_file}' --wildcard-tests 50 --wildcard-batch 1000000 --quiet\",\n        'optional': {},\n    },\n}\n\n\n# ==================== 端口扫描 ====================\n\nPORT_SCAN_COMMANDS = {\n    'naabu_active': {\n        'base': \"naabu -exclude-cdn -warm-up-time 5 -verify -list '{domains_file}' -json -silent\",\n        'optional': {\n            'threads': '-c {threads}',\n            'ports': '-p {ports}',\n            'top_ports': '-top-ports {top_ports}',\n            'rate': '-rate {rate}'\n        }\n    },\n    \n    'naabu_passive': {\n        'base': \"naabu -list '{domains_file}' -passive -json -silent\"\n    },\n}\n\n\n# ==================== 站点扫描 ====================\n\nSITE_SCAN_COMMANDS = {\n    'httpx': {\n        'base': (\n            \"'{scan_tools_base}/httpx' -l '{url_file}' \"\n            '-status-code -content-type -content-length '\n            '-location -title -server '\n            '-tech-detect -cdn -vhost '\n            '-include-response '\n            '-rstr 2000 '\n            '-random-agent -no-color -json -silent'\n        ),\n        'optional': {\n            'threads': '-threads {threads}',\n            'rate_limit': '-rate-limit {rate_limit}',\n            'request_timeout': '-timeout {request_timeout}',\n            'retries': '-retries {retries}'\n        }\n    },\n}\n\n\n# ==================== 目录扫描 ====================\n\nDIRECTORY_SCAN_COMMANDS = {\n    'ffuf': {\n        'base': \"'{scan_tools_base}/ffuf' -u '{url}FUZZ' -se -ac -sf -json -w '{wordlist}'\",  \n        'optional': {\n            'delay': '-p {delay}',\n            'threads': '-t {threads}',\n            'request_timeout': '-timeout {request_timeout}',\n            'match_codes': '-mc {match_codes}',\n            'rate': '-rate {rate}'\n        }\n    },\n}\n\n\n# ==================== URL 获取 ====================\n\nURL_FETCH_COMMANDS = {\n    'waymore': {\n        'base': \"waymore -i {domain_name} -mode U -oU '{output_file}'\",\n        'input_type': 'domain_name'\n    },\n    \n    'katana': {\n        'base': (\n            \"katana -list '{sites_file}' -o '{output_file}' \"\n            '-jc '                   # 开启 JavaScript 爬取 + 自动解析 .js 文件里的所有端点（最重要）\n            '-xhr '                  # 额外从 JS 中提取 XHR/Fetch 请求的 API 路径（再多挖 10-20% 隐藏接口）\n            '-kf all '               # 在每个目录下自动 fuzz 所有已知敏感文件（.env、.git、backup、config、ds_store 等 5000+ 条）\n            '-fs rdn '               # 智能过滤相对重复+噪声路径（分页、?id=1/2/3 这类垃圾全干掉，输出极干净）\n            '-H \"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36\" '  # 固定一个正常 UA（Katana 默认会随机，但固定更低调）\n            '-silent '               # 安静模式（终端不输出进度条，只出 URL）\n        ),\n        'optional': {\n            'depth': '-d {depth}',                      # 爬取最大深度（平衡深度与时间，默认 3，推荐 5）\n            'threads': '-c {threads}',                  # 全局并发数（极低并发最像真人，推荐 10）\n            'rate_limit': '-rl {rate_limit}',           # 全局硬限速：每秒最多 N 个请求（WAF 几乎不报警，推荐 30）\n            'random_delay': '-rd {random_delay}',       # 每次请求之间随机延迟 N 秒（再加一层人性化，推荐 1）\n            'retry': '-retry {retry}',                  # 失败请求自动重试次数（网络抖动不丢包，推荐 2）\n            'request_timeout': '-timeout {request_timeout}'  # 单请求超时秒数（防卡死，推荐 12）\n        },\n        'input_type': 'sites_file'\n    },\n    \n    'uro': {\n        'base': \"uro -i '{input_file}' -o '{output_file}'\",\n        'optional': {\n            'whitelist': '-w {whitelist}',      # 只保留指定扩展名的 URL（空格分隔）\n            'blacklist': '-b {blacklist}',      # 排除指定扩展名的 URL（空格分隔）\n            'filters': '-f {filters}'           # 额外的过滤规则（空格分隔）\n        }\n    },\n    \n    'httpx': {\n        'base': (\n            \"'{scan_tools_base}/httpx' -l '{url_file}' \"\n            '-status-code -content-type -content-length '\n            '-location -title -server '\n            '-tech-detect -cdn -vhost '\n            '-include-response '\n            '-rstr 2000 '\n            '-random-agent -no-color -json -silent'\n        ),\n        'optional': {\n            'threads': '-threads {threads}',\n            'rate_limit': '-rate-limit {rate_limit}',\n            'request_timeout': '-timeout {request_timeout}',\n            'retries': '-retries {retries}'\n        }\n    },\n}\n\nVULN_SCAN_COMMANDS = {\n    'dalfox_xss': {\n        'base': (\n            'dalfox --silence --no-color --no-spinner '\n            '--skip-bav '\n            \"file '{endpoints_file}' \"\n            '--waf-evasion '\n            '--format json'\n        ),\n        'optional': {\n            'only_poc': '--only-poc {only_poc}',\n            'ignore_return': '--ignore-return {ignore_return}',\n            'blind_xss_server': '-b {blind_xss_server}',\n            'delay': '--delay {delay}',\n            'request_timeout': '--timeout {request_timeout}',\n            # 是否追加 UA 头，由 user_agent 是否存在决定\n            'user_agent': '--user-agent \"{user_agent}\"',\n            'worker': '--worker {worker}',\n        },\n        'input_type': 'endpoints_file',\n    },\n    'nuclei': {\n        # nuclei 漏洞扫描\n        # -j: JSON 输出（每行一条完整 JSON）\n        # -silent: 静默模式\n        # -l: 输入 URL 列表文件\n        # -t: 模板目录路径（支持多个仓库，多次 -t 由 template_args 直接拼接）\n        'base': \"nuclei -j -silent -l '{endpoints_file}' {template_args}\",\n        'optional': {\n            'concurrency': '-c {concurrency}',           # 并发数（默认 25）\n            'rate_limit': '-rl {rate_limit}',            # 每秒请求数限制\n            'request_timeout': '-timeout {request_timeout}',  # 请求超时秒数\n            'bulk_size': '-bs {bulk_size}',              # 批量处理大小\n            'retries': '-retries {retries}',             # 重试次数\n            'severity': '-severity {severity}',          # 过滤严重性（info,low,medium,high,critical）\n            'tags': '-tags {tags}',                      # 过滤标签\n            'exclude_tags': '-etags {exclude_tags}',     # 排除标签\n        },\n        'input_type': 'endpoints_file',\n    },\n}\n\n\n# ==================== 指纹识别 ====================\n\nFINGERPRINT_DETECT_COMMANDS = {\n    'xingfinger': {\n        # 流式输出模式（不使用 -o，输出到 stdout）\n        # -l: URL 列表文件输入\n        # -s: 静默模式，只输出命中结果\n        # --json: JSON 格式输出（每行一条）\n        'base': \"xingfinger -l '{urls_file}' -s --json\",\n        'optional': {\n            # 自定义指纹库路径\n            'ehole': '--ehole {ehole}',\n            'goby': '--goby {goby}',\n            'wappalyzer': '--wappalyzer {wappalyzer}',\n            'fingers': '--fingers {fingers}',\n            'fingerprinthub': '--fingerprint {fingerprinthub}',\n            'arl': '--arl {arl}',\n        }\n    },\n}\n\n\n# ==================== 工具映射 ====================\n\nCOMMAND_TEMPLATES = {\n    'subdomain_discovery': SUBDOMAIN_DISCOVERY_COMMANDS,\n    'port_scan': PORT_SCAN_COMMANDS,\n    'site_scan': SITE_SCAN_COMMANDS,\n    'fingerprint_detect': FINGERPRINT_DETECT_COMMANDS,\n    'directory_scan': DIRECTORY_SCAN_COMMANDS,\n    'url_fetch': URL_FETCH_COMMANDS,\n    'vuln_scan': VULN_SCAN_COMMANDS,\n    'screenshot': {},  # 使用 Python 原生库（Playwright），无命令模板\n}\n\n# ==================== 扫描类型配置 ====================\n\n# 执行阶段定义（按顺序执行）\n# Stage 1: 资产发现 - 子域名 → 端口 → 站点探测 → 指纹识别\n# Stage 2: URL 收集 - URL 获取 + 目录扫描（并行）\n# Stage 3: 截图 - 在 URL 收集完成后执行，捕获更多发现的页面\n# Stage 4: 漏洞扫描 - 最后执行\nEXECUTION_STAGES = [\n    {\n        'mode': 'sequential',\n        'flows': ['subdomain_discovery', 'port_scan', 'site_scan', 'fingerprint_detect']\n    },\n    {\n        'mode': 'parallel',\n        'flows': ['url_fetch', 'directory_scan']\n    },\n    {\n        'mode': 'sequential',\n        'flows': ['screenshot']\n    },\n    {\n        'mode': 'sequential',\n        'flows': ['vuln_scan']\n    },\n]\n\n\ndef get_supported_scan_types():\n    \"\"\"\n    获取支持的扫描类型\n    \n    Returns:\n        list: 支持的扫描类型列表（从 COMMAND_TEMPLATES 的 keys 获取）\n    \"\"\"\n    return list(COMMAND_TEMPLATES.keys())\n\n\ndef get_command_template(scan_type: str, tool_name: str) -> dict:\n    \"\"\"\n    获取工具的命令模板\n    \n    Args:\n        scan_type: 扫描类型\n        tool_name: 工具名称\n    \n    Returns:\n        命令模板字典，如果未找到则返回 None\n    \"\"\"\n    templates = COMMAND_TEMPLATES.get(scan_type, {})\n    return templates.get(tool_name)\n"
  },
  {
    "path": "backend/apps/scan/configs/engine_config_example.yaml",
    "content": "# 引擎配置\n#\n# 参数命名：统一用中划线（如 rate-limit），系统自动转换为下划线\n# 必需参数：enabled（是否启用）\n# 可选参数：timeout（超时秒数，默认 auto 自动计算）\n\nsubdomain_discovery:\n  # ==================== 子域名发现 ====================\n  # Stage 1: 被动收集（并行） - 必选，至少启用一个工具\n  # Stage 2: 字典爆破（可选） - 使用字典暴力枚举子域名\n  # Stage 3: 变异生成 + 验证（可选） - 基于已发现域名生成变异，流式验证存活\n  # Stage 4: DNS 存活验证（可选） - 验证所有候选域名是否能解析\n  # === Stage 1: 被动收集工具（并行执行）===\n  passive_tools:\n    subfinder:\n      enabled: true\n      timeout: 3600      # 1小时\n      # threads: 10      # 并发 goroutine 数\n      \n    sublist3r:\n      enabled: true\n      timeout: 3600\n      # threads: 50      # 线程数\n    \n    assetfinder:\n      enabled: true\n      timeout: 3600\n\n  # === Stage 2: 主动字典爆破（可选）===\n  bruteforce:\n    enabled: false\n    subdomain_bruteforce:\n      # timeout: auto                    # 自动根据字典行数计算\n      wordlist-name: subdomains-top1million-110000.txt    # 对应「字典管理」中的 Wordlist.name\n\n  # === Stage 3: 变异生成 + 存活验证（可选）===\n  permutation:\n    enabled: true\n    subdomain_permutation_resolve:\n      timeout: 7200\n\n  # === Stage 4: DNS 存活验证（可选）===\n  resolve:\n    enabled: true\n    subdomain_resolve:\n      timeout: auto    # 自动根据候选子域数量计算\n\nport_scan:\n  # ==================== 端口扫描 ====================\n  tools:\n    naabu_active:\n      enabled: true\n      # timeout: auto    # 自动计算（目标数 × 端口数 × 0.5秒），范围 60秒 ~ 2天\n      threads: 200       # 并发连接数（默认 5）\n      # ports: 1-65535   # 扫描端口范围（默认 1-65535）\n      top-ports: 100     # 扫描 nmap top 100 端口\n      rate: 50           # 扫描速率\n      \n    naabu_passive:\n      enabled: true\n      # timeout: auto    # 被动扫描通常较快\n\nsite_scan:\n  # ==================== 站点扫描 ====================\n  tools:\n    httpx:\n      enabled: true\n      # timeout: auto        # 自动计算（每个 URL 约 1 秒）\n      # threads: 50          # 并发线程数（默认 50）\n      # rate-limit: 150      # 每秒请求数（默认 150）\n      # request-timeout: 10  # 单个请求超时秒数（默认 10）\n      # retries: 2           # 请求失败重试次数\n\nfingerprint_detect:\n  # ==================== 指纹识别 ====================\n  # 在 站点扫描 后串行执行，识别 WebSite 的技术栈\n  tools:\n    xingfinger:\n      enabled: true\n      fingerprint-libs: [ehole, goby, wappalyzer, fingers, fingerprinthub, arl]  # 默认启动全部指纹库\n\ndirectory_scan:\n  # ==================== 目录扫描 ====================\n  tools:\n    ffuf:\n      enabled: true\n      # timeout: auto                     # 自动计算（字典行数 × 0.02秒），范围 60秒 ~ 2小时\n      max-workers: 5                      # 并发扫描站点数（默认 5）\n      wordlist-name: dir_default.txt      # 对应「字典管理」中的 Wordlist.name\n      delay: 0.1-2.0                      # 请求间隔，支持范围随机（如 \"0.1-2.0\"）\n      threads: 10                         # 并发线程数（默认 40）\n      request-timeout: 10                 # HTTP 请求超时秒数（默认 10）\n      match-codes: 200,201,301,302,401,403  # 匹配的 HTTP 状态码\n      # rate: 0                           # 每秒请求数（默认 0 不限制）\n\nscreenshot:\n  # ==================== 网站截图 ====================\n  # 使用 Playwright 对网站进行截图，保存为 WebP 格式\n  # 在 Stage 2 与 url_fetch、directory_scan 并行执行\n  tools:\n    playwright:\n      enabled: true\n      concurrency: 5                        # 并发截图数（默认 5）\n      url_sources: [websites]               # URL 来源，当前对website截图，还可以用 [websites, endpoints]\n\nurl_fetch:\n  # ==================== URL 获取 ====================\n  tools:\n    waymore:\n      enabled: true\n      timeout: 3600      # 固定 1 小时（按域名输入）\n    \n    katana:\n      enabled: true\n      # timeout: auto    # 自动计算（根据站点数量）\n      depth: 5           # 爬取最大深度（默认 3）\n      threads: 10        # 全局并发数\n      rate-limit: 30     # 每秒最多请求数\n      random-delay: 1    # 请求间随机延迟秒数\n      retry: 2           # 失败重试次数\n      request-timeout: 12  # 单请求超时秒数\n    \n    uro:\n      enabled: true\n      # timeout: auto    # 自动计算（每 100 个 URL 约 1 秒），范围 30 ~ 300 秒\n      # whitelist:       # 只保留指定扩展名\n      #   - php\n      #   - asp\n      # blacklist:       # 排除指定扩展名（静态资源）\n      #   - jpg\n      #   - png\n      #   - css\n      # filters:         # 额外过滤规则\n      #   - hasparams    # 只保留有参数的 URL\n      #   - vuln         # 只保留可能有漏洞的 URL\n    \n    httpx:\n      enabled: true\n      # timeout: auto        # 自动计算（每个 URL 约 1 秒）\n      # threads: 50          # 并发线程数（默认 50）\n      # rate-limit: 150      # 每秒请求数（默认 150）\n      # request-timeout: 10  # 单个请求超时秒数（默认 10）\n      # retries: 2           # 请求失败重试次数\n\nvuln_scan:\n  # ==================== 漏洞扫描 ====================\n  tools:\n    dalfox_xss:\n      enabled: true\n      # timeout: auto        # 自动计算（endpoints 行数 × 100 秒）\n      request-timeout: 10  # 单个请求超时秒数\n      only-poc: r            # 只输出 POC 结果（r: 反射型）\n      ignore-return: \"302,404,403\"  # 忽略的返回码\n      delay: 50            # 请求间隔（毫秒）\n      worker: 30             # worker 数量\n      user-agent: \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36\"\n      # blind-xss-server: xxx  # 盲打 XSS 回连服务地址\n\n    nuclei:\n      enabled: true\n      # timeout: auto        # 自动计算（根据 endpoints 行数）\n      template-repo-names:   # 模板仓库列表，对应「Nuclei 模板」中的仓库名\n        - nuclei-templates\n        # - nuclei-custom    # 可追加自定义仓库\n      concurrency: 25        # 并发数（默认 25）\n      rate-limit: 150        # 每秒请求数限制（默认 150）\n      request-timeout: 5     # 单个请求超时秒数（默认 5）\n      severity: medium,high,critical  # 只扫描中高危\n      # tags: cve,rce        # 只使用指定标签的模板\n"
  },
  {
    "path": "backend/apps/scan/flows/__init__.py",
    "content": "\"\"\"Prefect Flows（编排层）\n\n注意：大部分 Flow 已迁移到 scripts/ 目录作为普通脚本执行\n\"\"\"\n\nfrom .initiate_scan_flow import initiate_scan_flow\nfrom .subdomain_discovery_flow import subdomain_discovery_flow\nfrom .fingerprint_detect_flow import fingerprint_detect_flow\n\n__all__ = [\n    'initiate_scan_flow',\n    'subdomain_discovery_flow',\n    'fingerprint_detect_flow',\n]\n"
  },
  {
    "path": "backend/apps/scan/flows/directory_scan_flow.py",
    "content": "\"\"\"\n目录扫描 Flow\n\n负责编排目录扫描的完整流程\n\n架构：\n- Flow 负责编排多个原子 Task\n- 支持并发执行扫描工具（使用 ThreadPoolTaskRunner）\n- 每个 Task 可独立重试\n- 配置由 YAML 解析\n\"\"\"\n\nimport hashlib\nimport logging\nimport subprocess\nfrom datetime import datetime\nfrom pathlib import Path\nfrom typing import List, Tuple\n\nfrom prefect import flow\n\nfrom apps.scan.handlers.scan_flow_handlers import (\n    on_scan_flow_completed,\n    on_scan_flow_failed,\n    on_scan_flow_running,\n)\nfrom apps.scan.tasks.directory_scan import (\n    export_sites_task,\n    run_and_stream_save_directories_task,\n)\nfrom apps.scan.utils import (\n    build_scan_command,\n    ensure_wordlist_local,\n    user_log,\n    wait_for_system_load,\n)\n\nlogger = logging.getLogger(__name__)\n\n# 默认最大并发数\nDEFAULT_MAX_WORKERS = 5\n\n\ndef calculate_directory_scan_timeout(\n    tool_config: dict,\n    base_per_word: float = 1.0,\n    min_timeout: int = 60,\n) -> int:\n    \"\"\"\n    根据字典行数计算目录扫描超时时间\n\n    计算公式：超时时间 = 字典行数 × 每个单词基础时间\n    超时范围：最小 60 秒，无上限\n\n    Args:\n        tool_config: 工具配置字典，包含 wordlist 路径\n        base_per_word: 每个单词的基础时间（秒），默认 1.0秒\n        min_timeout: 最小超时时间（秒），默认 60秒\n\n    Returns:\n        int: 计算出的超时时间（秒）\n    \"\"\"\n    import os\n\n    wordlist_path = tool_config.get('wordlist')\n    if not wordlist_path:\n        logger.warning(\"工具配置中未指定 wordlist，使用默认超时: %d秒\", min_timeout)\n        return min_timeout\n\n    wordlist_path = os.path.expanduser(wordlist_path)\n\n    if not os.path.exists(wordlist_path):\n        logger.warning(\"字典文件不存在: %s，使用默认超时: %d秒\", wordlist_path, min_timeout)\n        return min_timeout\n\n    try:\n        result = subprocess.run(\n            ['wc', '-l', wordlist_path],\n            capture_output=True,\n            text=True,\n            check=True\n        )\n        line_count = int(result.stdout.strip().split()[0])\n        timeout = max(min_timeout, int(line_count * base_per_word))\n\n        logger.info(\n            \"目录扫描超时计算 - 字典: %s, 行数: %d, 基础时间: %.3f秒/词, 计算超时: %d秒\",\n            wordlist_path, line_count, base_per_word, timeout\n        )\n        return timeout\n\n    except (subprocess.CalledProcessError, ValueError, IndexError) as e:\n        logger.error(\"计算超时时间失败: %s\", e)\n        return min_timeout\n\n\ndef _get_max_workers(tool_config: dict, default: int = DEFAULT_MAX_WORKERS) -> int:\n    \"\"\"从单个工具配置中获取 max_workers 参数\"\"\"\n    if not isinstance(tool_config, dict):\n        return default\n\n    max_workers = tool_config.get('max_workers') or tool_config.get('max-workers')\n    if isinstance(max_workers, int) and max_workers > 0:\n        return max_workers\n    return default\n\n\ndef _export_site_urls(\n    target_id: int,\n    directory_scan_dir: Path\n) -> Tuple[str, int]:\n    \"\"\"\n    导出目标下的所有站点 URL 到文件\n\n    Args:\n        target_id: 目标 ID\n        directory_scan_dir: 目录扫描目录\n\n    Returns:\n        tuple: (sites_file, site_count)\n    \"\"\"\n    logger.info(\"Step 1: 导出目标的所有站点 URL\")\n\n    sites_file = str(directory_scan_dir / 'sites.txt')\n    export_result = export_sites_task(\n        target_id=target_id,\n        output_file=sites_file,\n        batch_size=1000\n    )\n\n    site_count = export_result['total_count']\n    logger.info(\n        \"✓ 站点 URL 导出完成 - 文件: %s, 数量: %d\",\n        export_result['output_file'],\n        site_count\n    )\n\n    if site_count == 0:\n        logger.warning(\"目标下没有站点，无法执行目录扫描\")\n\n    return export_result['output_file'], site_count\n\n\ndef _generate_log_filename(\n    tool_name: str,\n    site_url: str,\n    directory_scan_dir: Path\n) -> Path:\n    \"\"\"生成唯一的日志文件名（使用 URL 的 hash 确保并发时不会冲突）\"\"\"\n    url_hash = hashlib.md5(\n        site_url.encode(),\n        usedforsecurity=False\n    ).hexdigest()[:8]\n    timestamp = datetime.now().strftime('%Y%m%d_%H%M%S_%f')\n    return directory_scan_dir / f\"{tool_name}_{url_hash}_{timestamp}.log\"\n\n\ndef _prepare_tool_wordlist(tool_name: str, tool_config: dict) -> bool:\n    \"\"\"准备工具的字典文件，返回是否成功\"\"\"\n    wordlist_name = tool_config.get('wordlist_name')\n    if not wordlist_name:\n        return True\n\n    try:\n        local_wordlist_path = ensure_wordlist_local(wordlist_name)\n        tool_config['wordlist'] = local_wordlist_path\n        return True\n    except Exception as exc:\n        logger.error(\"为工具 %s 准备字典失败: %s\", tool_name, exc)\n        return False\n\n\ndef _build_scan_params(\n    tool_name: str,\n    tool_config: dict,\n    sites: List[str],\n    directory_scan_dir: Path,\n    site_timeout: int\n) -> Tuple[List[dict], List[str]]:\n    \"\"\"构建所有站点的扫描参数，返回 (scan_params_list, failed_sites)\"\"\"\n    scan_params_list = []\n    failed_sites = []\n\n    for idx, site_url in enumerate(sites, 1):\n        try:\n            command = build_scan_command(\n                tool_name=tool_name,\n                scan_type='directory_scan',\n                command_params={'url': site_url},\n                tool_config=tool_config\n            )\n            log_file = _generate_log_filename(tool_name, site_url, directory_scan_dir)\n            scan_params_list.append({\n                'idx': idx,\n                'site_url': site_url,\n                'command': command,\n                'log_file': str(log_file),\n                'timeout': site_timeout\n            })\n        except Exception as e:\n            logger.error(\n                \"✗ [%d/%d] 构建 %s 命令失败: %s - 站点: %s\",\n                idx, len(sites), tool_name, e, site_url\n            )\n            failed_sites.append(site_url)\n\n    return scan_params_list, failed_sites\n\n\ndef _execute_batch(\n    batch_params: List[dict],\n    tool_name: str,\n    scan_id: int,\n    target_id: int,\n    directory_scan_dir: Path,\n    total_sites: int\n) -> Tuple[int, List[str]]:\n    \"\"\"执行一批扫描任务，返回 (directories_found, failed_sites)\"\"\"\n    directories_found = 0\n    failed_sites = []\n\n    # 提交任务\n    futures = []\n    for params in batch_params:\n        future = run_and_stream_save_directories_task.submit(\n            cmd=params['command'],\n            tool_name=tool_name,\n            scan_id=scan_id,\n            target_id=target_id,\n            site_url=params['site_url'],\n            cwd=str(directory_scan_dir),\n            shell=True,\n            batch_size=1000,\n            timeout=params['timeout'],\n            log_file=params['log_file']\n        )\n        futures.append((params['idx'], params['site_url'], future))\n\n    # 等待结果\n    for idx, site_url, future in futures:\n        try:\n            result = future.result()\n            dirs_count = result.get('created_directories', 0)\n            directories_found += dirs_count\n            logger.info(\n                \"✓ [%d/%d] 站点扫描完成: %s - 发现 %d 个目录\",\n                idx, total_sites, site_url, dirs_count\n            )\n        except Exception as exc:\n            failed_sites.append(site_url)\n            if 'timeout' in str(exc).lower():\n                logger.warning(\n                    \"⚠️ [%d/%d] 站点扫描超时: %s - 错误: %s\",\n                    idx, total_sites, site_url, exc\n                )\n            else:\n                logger.error(\n                    \"✗ [%d/%d] 站点扫描失败: %s - 错误: %s\",\n                    idx, total_sites, site_url, exc\n                )\n\n    return directories_found, failed_sites\n\n\ndef _run_scans_concurrently(\n    enabled_tools: dict,\n    sites_file: str,\n    directory_scan_dir: Path,\n    scan_id: int,\n    target_id: int,\n) -> Tuple[int, int, List[str]]:\n    \"\"\"\n    并发执行目录扫描任务\n\n    Returns:\n        tuple: (total_directories, processed_sites, failed_sites)\n    \"\"\"\n    # 读取站点列表\n    sites: List[str] = []\n    with open(sites_file, 'r', encoding='utf-8') as f:\n        sites = [line.strip() for line in f if line.strip()]\n\n    if not sites:\n        logger.warning(\"站点列表为空\")\n        return 0, 0, []\n\n    logger.info(\n        \"准备并发扫描 %d 个站点，使用工具: %s\",\n        len(sites), ', '.join(enabled_tools.keys())\n    )\n\n    total_directories = 0\n    processed_sites_count = 0\n    failed_sites: List[str] = []\n\n    for tool_name, tool_config in enabled_tools.items():\n        max_workers = _get_max_workers(tool_config)\n\n        logger.info(\"=\" * 60)\n        logger.info(\"使用工具: %s (并发模式, max_workers=%d)\", tool_name, max_workers)\n        logger.info(\"=\" * 60)\n        user_log(scan_id, \"directory_scan\", f\"Running {tool_name}\")\n\n        # 准备字典文件\n        if not _prepare_tool_wordlist(tool_name, tool_config):\n            failed_sites.extend(sites)\n            continue\n\n        # 计算超时时间\n        site_timeout = tool_config.get('timeout', 300)\n        if site_timeout == 'auto':\n            site_timeout = calculate_directory_scan_timeout(tool_config)\n            logger.info(\"✓ 工具 %s 动态计算 timeout: %d秒\", tool_name, site_timeout)\n\n        # 构建扫描参数\n        scan_params_list, build_failed = _build_scan_params(\n            tool_name, tool_config, sites, directory_scan_dir, site_timeout\n        )\n        failed_sites.extend(build_failed)\n\n        if not scan_params_list:\n            logger.warning(\"没有有效的扫描任务\")\n            continue\n\n        # 分批执行\n        total_tasks = len(scan_params_list)\n        logger.info(\"开始分批执行 %d 个扫描任务（每批 %d 个）...\", total_tasks, max_workers)\n\n        last_progress_percent = 0\n        tool_directories = 0\n        tool_processed = 0\n\n        for batch_start in range(0, total_tasks, max_workers):\n            batch_end = min(batch_start + max_workers, total_tasks)\n            batch_params = scan_params_list[batch_start:batch_end]\n            batch_num = batch_start // max_workers + 1\n\n            logger.info(\n                \"执行第 %d 批任务（%d-%d/%d）...\",\n                batch_num, batch_start + 1, batch_end, total_tasks\n            )\n\n            dirs_found, batch_failed = _execute_batch(\n                batch_params, tool_name, scan_id, target_id,\n                directory_scan_dir, len(sites)\n            )\n\n            total_directories += dirs_found\n            tool_directories += dirs_found\n            tool_processed += len(batch_params) - len(batch_failed)\n            processed_sites_count += len(batch_params) - len(batch_failed)\n            failed_sites.extend(batch_failed)\n\n            # 进度里程碑：每 20% 输出一次\n            current_progress = int((batch_end / total_tasks) * 100)\n            if current_progress >= last_progress_percent + 20:\n                user_log(\n                    scan_id, \"directory_scan\",\n                    f\"Progress: {batch_end}/{total_tasks} sites scanned\"\n                )\n                last_progress_percent = (current_progress // 20) * 20\n\n        logger.info(\n            \"✓ 工具 %s 执行完成 - 已处理站点: %d/%d, 发现目录: %d\",\n            tool_name, tool_processed, total_tasks, tool_directories\n        )\n        user_log(\n            scan_id, \"directory_scan\",\n            f\"{tool_name} completed: found {tool_directories} directories\"\n        )\n\n    if failed_sites:\n        logger.warning(\"部分站点扫描失败: %d/%d\", len(failed_sites), len(sites))\n\n    logger.info(\n        \"✓ 并发目录扫描执行完成 - 成功: %d/%d, 失败: %d, 总目录数: %d\",\n        processed_sites_count, len(sites), len(failed_sites), total_directories\n    )\n\n    return total_directories, processed_sites_count, failed_sites\n\n\n@flow(\n    name=\"directory_scan\",\n    log_prints=True,\n    on_running=[on_scan_flow_running],\n    on_completion=[on_scan_flow_completed],\n    on_failure=[on_scan_flow_failed],\n)\ndef directory_scan_flow(\n    scan_id: int,\n    target_name: str,\n    target_id: int,\n    scan_workspace_dir: str,\n    enabled_tools: dict\n) -> dict:\n    \"\"\"\n    目录扫描 Flow\n\n    主要功能：\n        1. 从 target 获取所有站点的 URL\n        2. 对每个站点 URL 执行目录扫描（支持 ffuf 等工具）\n        3. 流式保存扫描结果到数据库 Directory 表\n\n    Args:\n        scan_id: 扫描任务 ID\n        target_name: 目标名称\n        target_id: 目标 ID\n        scan_workspace_dir: 扫描工作空间目录\n        enabled_tools: 启用的工具配置字典\n\n    Returns:\n        dict: 扫描结果\n    \"\"\"\n    try:\n        wait_for_system_load(context=\"directory_scan_flow\")\n\n        logger.info(\n            \"开始目录扫描 - Scan ID: %s, Target: %s, Workspace: %s\",\n            scan_id, target_name, scan_workspace_dir\n        )\n        user_log(scan_id, \"directory_scan\", \"Starting directory scan\")\n\n        # 参数验证\n        if scan_id is None:\n            raise ValueError(\"scan_id 不能为空\")\n        if not target_name:\n            raise ValueError(\"target_name 不能为空\")\n        if target_id is None:\n            raise ValueError(\"target_id 不能为空\")\n        if not scan_workspace_dir:\n            raise ValueError(\"scan_workspace_dir 不能为空\")\n        if not enabled_tools:\n            raise ValueError(\"enabled_tools 不能为空\")\n\n        # Step 0: 创建工作目录\n        from apps.scan.utils import setup_scan_directory\n        directory_scan_dir = setup_scan_directory(scan_workspace_dir, 'directory_scan')\n\n        # Step 1: 导出站点 URL\n        sites_file, site_count = _export_site_urls(target_id, directory_scan_dir)\n\n        if site_count == 0:\n            logger.warning(\"跳过目录扫描：没有站点可扫描 - Scan ID: %s\", scan_id)\n            user_log(scan_id, \"directory_scan\", \"Skipped: no sites to scan\", \"warning\")\n            return {\n                'success': True,\n                'scan_id': scan_id,\n                'target': target_name,\n                'scan_workspace_dir': scan_workspace_dir,\n                'sites_file': sites_file,\n                'site_count': 0,\n                'total_directories': 0,\n                'processed_sites': 0,\n                'failed_sites_count': 0,\n                'executed_tasks': ['export_sites']\n            }\n\n        # Step 2: 工具配置信息\n        logger.info(\"Step 2: 工具配置信息\")\n        tool_info = [\n            f\"{name}(max_workers={_get_max_workers(cfg)})\"\n            for name, cfg in enabled_tools.items()\n        ]\n        logger.info(\"✓ 启用工具: %s\", ', '.join(tool_info))\n\n        # Step 3: 并发执行扫描\n        logger.info(\"Step 3: 并发执行扫描工具并实时保存结果\")\n        total_directories, processed_sites, failed_sites = _run_scans_concurrently(\n            enabled_tools=enabled_tools,\n            sites_file=sites_file,\n            directory_scan_dir=directory_scan_dir,\n            scan_id=scan_id,\n            target_id=target_id,\n        )\n\n        if processed_sites == 0 and site_count > 0:\n            logger.warning(\n                \"所有站点扫描均失败 - 总站点数: %d, 失败数: %d\",\n                site_count, len(failed_sites)\n            )\n\n        logger.info(\"✓ 目录扫描完成 - 发现目录: %d\", total_directories)\n        user_log(\n            scan_id, \"directory_scan\",\n            f\"directory_scan completed: found {total_directories} directories\"\n        )\n\n        return {\n            'success': True,\n            'scan_id': scan_id,\n            'target': target_name,\n            'scan_workspace_dir': scan_workspace_dir,\n            'sites_file': sites_file,\n            'site_count': site_count,\n            'total_directories': total_directories,\n            'processed_sites': processed_sites,\n            'failed_sites_count': len(failed_sites),\n            'executed_tasks': ['export_sites', 'run_and_stream_save_directories']\n        }\n\n    except Exception as e:\n        logger.exception(\"目录扫描失败: %s\", e)\n        raise\n"
  },
  {
    "path": "backend/apps/scan/flows/fingerprint_detect_flow.py",
    "content": "\"\"\"\n指纹识别 Flow\n\n负责编排指纹识别的完整流程\n\n架构：\n- Flow 负责编排多个原子 Task\n- 在 site_scan 后串行执行\n- 使用 xingfinger 工具识别技术栈\n- 流式处理输出，批量更新数据库\n\"\"\"\n\nimport logging\nfrom datetime import datetime\nfrom pathlib import Path\n\nfrom prefect import flow\n\nfrom apps.scan.handlers.scan_flow_handlers import (\n    on_scan_flow_completed,\n    on_scan_flow_failed,\n    on_scan_flow_running,\n)\nfrom apps.scan.tasks.fingerprint_detect import (\n    export_urls_for_fingerprint_task,\n    run_xingfinger_and_stream_update_tech_task,\n)\nfrom apps.scan.utils import build_scan_command, user_log, wait_for_system_load\nfrom apps.scan.utils.fingerprint_helpers import get_fingerprint_paths\n\nlogger = logging.getLogger(__name__)\n\n\ndef calculate_fingerprint_detect_timeout(\n    url_count: int,\n    base_per_url: float = 10.0,\n    min_timeout: int = 300\n) -> int:\n    \"\"\"\n    根据 URL 数量计算超时时间\n\n    公式：超时时间 = URL 数量 × 每 URL 基础时间\n    最小值：300秒，无上限\n\n    Args:\n        url_count: URL 数量\n        base_per_url: 每 URL 基础时间（秒），默认 10秒\n        min_timeout: 最小超时时间（秒），默认 300秒\n\n    Returns:\n        int: 计算出的超时时间（秒）\n    \"\"\"\n    return max(min_timeout, int(url_count * base_per_url))\n\n\n\n\n\ndef _export_urls(\n    target_id: int,\n    fingerprint_dir: Path,\n    source: str = 'website'\n) -> tuple[str, int]:\n    \"\"\"\n    导出 URL 到文件\n\n    Args:\n        target_id: 目标 ID\n        fingerprint_dir: 指纹识别目录\n        source: 数据源类型\n\n    Returns:\n        tuple: (urls_file, total_count)\n    \"\"\"\n    logger.info(\"Step 1: 导出 URL 列表 (source=%s)\", source)\n\n    urls_file = str(fingerprint_dir / 'urls.txt')\n    export_result = export_urls_for_fingerprint_task(\n        target_id=target_id,\n        output_file=urls_file,\n        source=source,\n        batch_size=1000\n    )\n\n    total_count = export_result['total_count']\n    logger.info(\n        \"✓ URL 导出完成 - 文件: %s, 数量: %d\",\n        export_result['output_file'],\n        total_count\n    )\n\n    return export_result['output_file'], total_count\n\n\ndef _run_fingerprint_detect(\n    enabled_tools: dict,\n    urls_file: str,\n    url_count: int,\n    fingerprint_dir: Path,\n    scan_id: int,\n    target_id: int,\n    source: str\n) -> tuple[dict, list]:\n    \"\"\"\n    执行指纹识别任务\n\n    Args:\n        enabled_tools: 已启用的工具配置字典\n        urls_file: URL 文件路径\n        url_count: URL 总数\n        fingerprint_dir: 指纹识别目录\n        scan_id: 扫描任务 ID\n        target_id: 目标 ID\n        source: 数据源类型\n\n    Returns:\n        tuple: (tool_stats, failed_tools)\n    \"\"\"\n    tool_stats = {}\n    failed_tools = []\n\n    for tool_name, tool_config in enabled_tools.items():\n        # 1. 获取指纹库路径\n        lib_names = tool_config.get('fingerprint_libs', ['ehole'])\n        fingerprint_paths = get_fingerprint_paths(lib_names)\n\n        if not fingerprint_paths:\n            reason = f\"没有可用的指纹库: {lib_names}\"\n            logger.warning(reason)\n            failed_tools.append({'tool': tool_name, 'reason': reason})\n            continue\n\n        # 2. 将指纹库路径合并到 tool_config（用于命令构建）\n        tool_config_with_paths = {**tool_config, **fingerprint_paths}\n\n        # 3. 构建命令\n        try:\n            command = build_scan_command(\n                tool_name=tool_name,\n                scan_type='fingerprint_detect',\n                command_params={'urls_file': urls_file},\n                tool_config=tool_config_with_paths\n            )\n        except Exception as e:\n            reason = f\"命令构建失败: {e}\"\n            logger.error(\"构建 %s 命令失败: %s\", tool_name, e)\n            failed_tools.append({'tool': tool_name, 'reason': reason})\n            continue\n\n        # 4. 计算超时时间\n        timeout = calculate_fingerprint_detect_timeout(url_count)\n\n        # 5. 生成日志文件路径\n        timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')\n        log_file = fingerprint_dir / f\"{tool_name}_{timestamp}.log\"\n\n        logger.info(\n            \"开始执行 %s 指纹识别 - URL数: %d, 超时: %ds, 指纹库: %s\",\n            tool_name, url_count, timeout, list(fingerprint_paths.keys())\n        )\n        user_log(scan_id, \"fingerprint_detect\", f\"Running {tool_name}: {command}\")\n\n        # 6. 执行扫描任务\n        try:\n            result = run_xingfinger_and_stream_update_tech_task(\n                cmd=command,\n                tool_name=tool_name,\n                scan_id=scan_id,\n                target_id=target_id,\n                source=source,\n                cwd=str(fingerprint_dir),\n                timeout=timeout,\n                log_file=str(log_file),\n                batch_size=100\n            )\n\n            tool_stats[tool_name] = {\n                'command': command,\n                'result': result,\n                'timeout': timeout,\n                'fingerprint_libs': list(fingerprint_paths.keys())\n            }\n\n            tool_updated = result.get('updated_count', 0)\n            logger.info(\n                \"✓ 工具 %s 执行完成 - 处理记录: %d, 更新: %d, 未找到: %d\",\n                tool_name,\n                result.get('processed_records', 0),\n                tool_updated,\n                result.get('not_found_count', 0)\n            )\n            user_log(\n                scan_id, \"fingerprint_detect\",\n                f\"{tool_name} completed: identified {tool_updated} fingerprints\"\n            )\n\n        except Exception as exc:\n            reason = str(exc)\n            failed_tools.append({'tool': tool_name, 'reason': reason})\n            logger.error(\"工具 %s 执行失败: %s\", tool_name, exc, exc_info=True)\n            user_log(scan_id, \"fingerprint_detect\", f\"{tool_name} failed: {reason}\", \"error\")\n\n    if failed_tools:\n        logger.warning(\n            \"以下指纹识别工具执行失败: %s\",\n            ', '.join([f['tool'] for f in failed_tools])\n        )\n\n    return tool_stats, failed_tools\n\n\n@flow(\n    name=\"fingerprint_detect\",\n    log_prints=True,\n    on_running=[on_scan_flow_running],\n    on_completion=[on_scan_flow_completed],\n    on_failure=[on_scan_flow_failed],\n)\ndef fingerprint_detect_flow(\n    scan_id: int,\n    target_name: str,\n    target_id: int,\n    scan_workspace_dir: str,\n    enabled_tools: dict\n) -> dict:\n    \"\"\"\n    指纹识别 Flow\n\n    主要功能：\n        1. 从数据库导出目标下所有 WebSite URL 到文件\n        2. 使用 xingfinger 进行技术栈识别\n        3. 解析结果并更新 WebSite.tech 字段（合并去重）\n\n    工作流程：\n        Step 0: 创建工作目录\n        Step 1: 导出 URL 列表\n        Step 2: 解析配置，获取启用的工具\n        Step 3: 执行 xingfinger 并解析结果\n\n    Args:\n        scan_id: 扫描任务 ID\n        target_name: 目标名称\n        target_id: 目标 ID\n        scan_workspace_dir: 扫描工作空间目录\n        enabled_tools: 启用的工具配置（xingfinger）\n\n    Returns:\n        dict: 扫描结果\n    \"\"\"\n    try:\n        # 负载检查：等待系统资源充足\n        wait_for_system_load(context=\"fingerprint_detect_flow\")\n\n        logger.info(\n            \"开始指纹识别 - Scan ID: %s, Target: %s, Workspace: %s\",\n            scan_id, target_name, scan_workspace_dir\n        )\n        user_log(scan_id, \"fingerprint_detect\", \"Starting fingerprint detection\")\n\n        # 参数验证\n        if scan_id is None:\n            raise ValueError(\"scan_id 不能为空\")\n        if not target_name:\n            raise ValueError(\"target_name 不能为空\")\n        if target_id is None:\n            raise ValueError(\"target_id 不能为空\")\n        if not scan_workspace_dir:\n            raise ValueError(\"scan_workspace_dir 不能为空\")\n\n        # 数据源类型（当前只支持 website）\n        source = 'website'\n\n        # Step 0: 创建工作目录\n        from apps.scan.utils import setup_scan_directory\n        fingerprint_dir = setup_scan_directory(scan_workspace_dir, 'fingerprint_detect')\n\n        # Step 1: 导出 URL（支持懒加载）\n        urls_file, url_count = _export_urls(target_id, fingerprint_dir, source)\n\n        if url_count == 0:\n            logger.warning(\"跳过指纹识别：没有 URL 可扫描 - Scan ID: %s\", scan_id)\n            user_log(scan_id, \"fingerprint_detect\", \"Skipped: no URLs to scan\", \"warning\")\n            return _build_empty_result(scan_id, target_name, scan_workspace_dir, urls_file)\n\n        # Step 2: 工具配置信息\n        logger.info(\"Step 2: 工具配置信息\")\n        logger.info(\"✓ 启用工具: %s\", ', '.join(enabled_tools.keys()))\n\n        # Step 3: 执行指纹识别\n        logger.info(\"Step 3: 执行指纹识别\")\n        tool_stats, failed_tools = _run_fingerprint_detect(\n            enabled_tools=enabled_tools,\n            urls_file=urls_file,\n            url_count=url_count,\n            fingerprint_dir=fingerprint_dir,\n            scan_id=scan_id,\n            target_id=target_id,\n            source=source\n        )\n\n        # 动态生成已执行的任务列表\n        executed_tasks = ['export_urls_for_fingerprint']\n        executed_tasks.extend([f'run_xingfinger ({tool})' for tool in tool_stats])\n\n        # 汇总所有工具的结果\n        total_processed = sum(\n            stats['result'].get('processed_records', 0) for stats in tool_stats.values()\n        )\n        total_updated = sum(\n            stats['result'].get('updated_count', 0) for stats in tool_stats.values()\n        )\n        total_created = sum(\n            stats['result'].get('created_count', 0) for stats in tool_stats.values()\n        )\n        total_snapshots = sum(\n            stats['result'].get('snapshot_count', 0) for stats in tool_stats.values()\n        )\n\n        # 记录 Flow 完成\n        logger.info(\"✓ 指纹识别完成 - 识别指纹: %d\", total_updated)\n        user_log(\n            scan_id, \"fingerprint_detect\",\n            f\"fingerprint_detect completed: identified {total_updated} fingerprints\"\n        )\n\n        successful_tools = [\n            name for name in enabled_tools\n            if name not in [f['tool'] for f in failed_tools]\n        ]\n\n        return {\n            'success': True,\n            'scan_id': scan_id,\n            'target': target_name,\n            'scan_workspace_dir': scan_workspace_dir,\n            'urls_file': urls_file,\n            'url_count': url_count,\n            'processed_records': total_processed,\n            'updated_count': total_updated,\n            'created_count': total_created,\n            'snapshot_count': total_snapshots,\n            'executed_tasks': executed_tasks,\n            'tool_stats': {\n                'total': len(enabled_tools),\n                'successful': len(successful_tools),\n                'failed': len(failed_tools),\n                'successful_tools': successful_tools,\n                'failed_tools': failed_tools,\n                'details': tool_stats\n            }\n        }\n\n    except ValueError as e:\n        logger.error(\"配置错误: %s\", e)\n        raise\n    except RuntimeError as e:\n        logger.error(\"运行时错误: %s\", e)\n        raise\n    except Exception as e:\n        logger.exception(\"指纹识别失败: %s\", e)\n        raise\n\n\ndef _build_empty_result(\n    scan_id: int,\n    target_name: str,\n    scan_workspace_dir: str,\n    urls_file: str\n) -> dict:\n    \"\"\"构建空结果（无 URL 可扫描时）\"\"\"\n    return {\n        'success': True,\n        'scan_id': scan_id,\n        'target': target_name,\n        'scan_workspace_dir': scan_workspace_dir,\n        'urls_file': urls_file,\n        'url_count': 0,\n        'processed_records': 0,\n        'updated_count': 0,\n        'created_count': 0,\n        'snapshot_count': 0,\n        'executed_tasks': ['export_urls_for_fingerprint'],\n        'tool_stats': {\n            'total': 0,\n            'successful': 0,\n            'failed': 0,\n            'successful_tools': [],\n            'failed_tools': [],\n            'details': {}\n        }\n    }\n"
  },
  {
    "path": "backend/apps/scan/flows/initiate_scan_flow.py",
    "content": "\"\"\"\n扫描初始化 Flow\n\n负责编排扫描任务的初始化流程\n\n职责：\n- 使用 FlowOrchestrator 解析 YAML 配置\n- 在 Prefect Flow 中执行子 Flow（Subflow）\n- 按照 YAML 顺序编排工作流\n- 不包含具体业务逻辑（由 Tasks 和 FlowOrchestrator 实现）\n\n架构：\n- Flow: Prefect 编排层（本文件）\n- FlowOrchestrator: 配置解析和执行计划（apps/scan/services/）\n- Tasks: 执行层（apps/scan/tasks/）\n- Handlers: 状态管理（apps/scan/handlers/）\n\"\"\"\n\n# Django 环境初始化（导入即生效）\n# 注意：动态扫描容器应使用 run_initiate_scan.py 启动，以便在导入前设置环境变量\nfrom apps.common.prefect_django_setup import setup_django_for_prefect\n\nfrom prefect import flow, task\nfrom pathlib import Path\nimport logging\n\nfrom apps.scan.handlers import (\n    on_initiate_scan_flow_running,\n    on_initiate_scan_flow_completed,\n    on_initiate_scan_flow_failed,\n)\nfrom prefect.futures import wait\nfrom apps.scan.utils import setup_scan_workspace\nfrom apps.scan.orchestrators import FlowOrchestrator\n\nlogger = logging.getLogger(__name__)\n\n\n@task(name=\"run_subflow\")\ndef _run_subflow_task(scan_type: str, flow_func, flow_kwargs: dict):\n    \"\"\"包装子 Flow 的 Task，用于在并行阶段并发执行子 Flow。\"\"\"\n    logger.info(\"开始执行子 Flow: %s\", scan_type)\n    return flow_func(**flow_kwargs)\n\n\n@flow(\n    name='initiate_scan',\n    description='扫描任务初始化流程',\n    log_prints=True,\n    on_running=[on_initiate_scan_flow_running],\n    on_completion=[on_initiate_scan_flow_completed],\n    on_failure=[on_initiate_scan_flow_failed],\n)\ndef initiate_scan_flow(\n    scan_id: int,\n    target_name: str,\n    target_id: int,\n    scan_workspace_dir: str,\n    engine_name: str,\n    scheduled_scan_name: str | None = None,\n) -> dict:\n    \"\"\"\n    初始化扫描任务（动态工作流编排）\n    \n    根据 YAML 配置动态编排工作流：\n    - 从数据库获取 engine_config (YAML)\n    - 检测启用的扫描类型\n    - 按照定义的阶段执行：\n      Stage 1: Discovery (顺序执行)\n        - subdomain_discovery\n        - port_scan\n        - site_scan\n      Stage 2: Analysis (并行执行)\n        - url_fetch\n        - directory_scan\n    \n    Args:\n        scan_id: 扫描任务 ID\n        target_name: 目标名称\n        target_id: 目标 ID\n        scan_workspace_dir: Scan 工作空间目录路径\n        engine_name: 引擎名称（用于显示）\n        scheduled_scan_name: 定时扫描任务名称（可选，用于通知显示）\n    \n    Returns:\n        dict: 执行结果摘要\n    \n    Raises:\n        ValueError: 参数验证失败或配置无效\n        RuntimeError: 执行失败\n    \"\"\"\n    try:\n        # ==================== 参数验证 ====================\n        if not scan_id:\n            raise ValueError(\"scan_id is required\")\n        if not scan_workspace_dir:\n            raise ValueError(\"scan_workspace_dir is required\")\n        if not engine_name:\n            raise ValueError(\"engine_name is required\")\n        \n        \n        logger.info(\"=\"*60)\n        logger.info(\"开始初始化扫描任务\")\n        logger.info(f\"Scan ID: {scan_id}\")\n        logger.info(f\"Target: {target_name}\")\n        logger.info(f\"Engine: {engine_name}\")\n        logger.info(f\"Workspace: {scan_workspace_dir}\")\n        logger.info(\"=\"*60)\n        \n        # ==================== Task 1: 创建 Scan 工作空间 ====================\n        scan_workspace_path = setup_scan_workspace(scan_workspace_dir)\n        \n        # ==================== Task 2: 获取引擎配置 ====================\n        from apps.scan.models import Scan\n        scan = Scan.objects.get(id=scan_id)\n        engine_config = scan.yaml_configuration\n        \n        # 使用 engine_names 进行显示\n        display_engine_name = ', '.join(scan.engine_names) if scan.engine_names else engine_name\n        \n        # ==================== Task 3: 解析配置，生成执行计划 ====================\n        orchestrator = FlowOrchestrator(engine_config)\n        \n        # FlowOrchestrator 已经解析了所有工具配置\n        enabled_tools_by_type = orchestrator.enabled_tools_by_type\n        \n        logger.info(\"执行计划生成成功\")\n        logger.info(f\"扫描类型: {' → '.join(orchestrator.scan_types)}\")\n        logger.info(f\"总共 {len(orchestrator.scan_types)} 个 Flow\")\n        \n        # ==================== 初始化阶段进度 ====================\n        # 在解析完配置后立即初始化，此时已有完整的 scan_types 列表\n        from apps.scan.services import ScanService\n        scan_service = ScanService()\n        scan_service.init_stage_progress(scan_id, orchestrator.scan_types)\n        logger.info(f\"✓ 初始化阶段进度 - Stages: {orchestrator.scan_types}\")\n        \n        # ==================== 更新 Target 最后扫描时间 ====================\n        # 在开始扫描时更新，表示\"最后一次扫描开始时间\"\n        from apps.targets.services import TargetService\n        target_service = TargetService()\n        target_service.update_last_scanned_at(target_id)\n        logger.info(f\"✓ 更新 Target 最后扫描时间 - Target ID: {target_id}\")\n        \n        # ==================== Task 3: 执行 Flow（动态阶段执行）====================\n        # 注意：各阶段状态更新由 scan_flow_handlers.py 自动处理（running/completed/failed）\n        executed_flows = []\n        results = {}\n        \n        # 通用执行参数\n        flow_kwargs = {\n            'scan_id': scan_id,\n            'target_name': target_name,\n            'target_id': target_id,\n            'scan_workspace_dir': str(scan_workspace_path)\n        }\n\n        def record_flow_result(scan_type, result=None, error=None):\n            \"\"\"\n            统一的结果记录函数\n            \n            Args:\n                scan_type: 扫描类型名称\n                result: 执行结果（成功时）\n                error: 异常对象（失败时）\n            \"\"\"\n            if error:\n                # 失败处理：记录错误但不抛出异常，让扫描继续执行后续阶段\n                error_msg = f\"{scan_type} 执行失败: {str(error)}\"\n                logger.warning(error_msg)\n                executed_flows.append(f\"{scan_type} (失败)\")\n                results[scan_type] = {'success': False, 'error': str(error)}\n                # 不再抛出异常，让扫描继续\n            else:\n                # 成功处理\n                executed_flows.append(scan_type)\n                results[scan_type] = result\n                logger.info(f\"✓ {scan_type} 执行成功\")\n\n        def get_valid_flows(flow_names):\n            \"\"\"\n            获取有效的 Flow 函数列表，并为每个 Flow 准备专属参数\n            \n            Args:\n                flow_names: 扫描类型名称列表\n                \n            Returns:\n                list: [(scan_type, flow_func, flow_specific_kwargs), ...] 有效的函数列表\n            \"\"\"\n            valid_flows = []\n            for scan_type in flow_names:\n                flow_func = orchestrator.get_flow_function(scan_type)\n                if flow_func:\n                    # 为每个 Flow 准备专属的参数（包含对应的 enabled_tools）\n                    flow_specific_kwargs = dict(flow_kwargs)\n                    flow_specific_kwargs['enabled_tools'] = enabled_tools_by_type.get(scan_type, {})\n                    valid_flows.append((scan_type, flow_func, flow_specific_kwargs))\n                else:\n                    logger.warning(f\"跳过未实现的 Flow: {scan_type}\")\n            return valid_flows\n\n        # ---------------------------------------------------------\n        # 动态阶段执行（基于 FlowOrchestrator 定义）\n        # ---------------------------------------------------------\n        for mode, enabled_flows in orchestrator.get_execution_stages():\n            if mode == 'sequential':\n                # 顺序执行\n                logger.info(\"=\"*60)\n                logger.info(f\"顺序执行阶段: {', '.join(enabled_flows)}\")\n                logger.info(\"=\"*60)\n                for scan_type, flow_func, flow_specific_kwargs in get_valid_flows(enabled_flows):\n                    logger.info(\"=\"*60)\n                    logger.info(f\"执行 Flow: {scan_type}\")\n                    logger.info(\"=\"*60)\n                    try:\n                        result = flow_func(**flow_specific_kwargs)\n                        record_flow_result(scan_type, result=result)\n                    except Exception as e:\n                        record_flow_result(scan_type, error=e)\n                    \n            elif mode == 'parallel':\n                # 并行执行阶段：通过 Task 包装子 Flow，并使用 Prefect TaskRunner 并发运行\n                logger.info(\"=\"*60)\n                logger.info(f\"并行执行阶段: {', '.join(enabled_flows)}\")\n                logger.info(\"=\"*60)\n                futures = []\n\n                # 提交所有并行子 Flow 任务\n                for scan_type, flow_func, flow_specific_kwargs in get_valid_flows(enabled_flows):\n                    logger.info(\"=\"*60)\n                    logger.info(f\"提交并行子 Flow 任务: {scan_type}\")\n                    logger.info(\"=\"*60)\n                    future = _run_subflow_task.submit(\n                        scan_type=scan_type,\n                        flow_func=flow_func,\n                        flow_kwargs=flow_specific_kwargs,\n                    )\n                    futures.append((scan_type, future))\n\n                # 等待所有并行子 Flow 完成\n                if futures:\n                    wait([f for _, f in futures])\n\n                    # 检查结果（复用统一的结果处理逻辑）\n                    for scan_type, future in futures:\n                        try:\n                            result = future.result()\n                            record_flow_result(scan_type, result=result)\n                        except Exception as e:\n                            record_flow_result(scan_type, error=e)\n\n        # ==================== 完成 ====================\n        logger.info(\"=\"*60)\n        logger.info(\"✓ 扫描任务初始化完成\")\n        logger.info(f\"执行的 Flow: {', '.join(executed_flows)}\")\n        logger.info(\"=\"*60)\n        \n        # ==================== 返回结果 ====================\n        return {\n            'success': True,\n            'scan_id': scan_id,\n            'target': target_name,\n            'scan_workspace_dir': str(scan_workspace_path),\n            'executed_flows': executed_flows,\n            'results': results\n        }\n        \n    except ValueError as e:\n        # 参数错误\n        logger.error(\"参数错误: %s\", e)\n        raise\n    except RuntimeError as e:\n        # 执行失败\n        logger.error(\"运行时错误: %s\", e)\n        raise\n    except OSError as e:\n        # 文件系统错误（工作空间创建失败）\n        logger.error(\"文件系统错误: %s\", e)\n        raise\n    except Exception as e:\n        # 其他未预期错误\n        logger.exception(\"初始化扫描任务失败: %s\", e)\n        # 注意：失败状态更新由 Prefect State Handlers 自动处理\n        raise\n"
  },
  {
    "path": "backend/apps/scan/flows/port_scan_flow.py",
    "content": "\"\"\"\n端口扫描 Flow\n\n负责编排端口扫描的完整流程\n\n架构：\n- Flow 负责编排多个原子 Task\n- 支持串行执行扫描工具（流式处理）\n- 每个 Task 可独立重试\n- 配置由 YAML 解析\n\"\"\"\n\nimport logging\nimport subprocess\nfrom datetime import datetime\nfrom pathlib import Path\n\nfrom prefect import flow\n\nfrom apps.scan.handlers.scan_flow_handlers import (\n    on_scan_flow_completed,\n    on_scan_flow_failed,\n    on_scan_flow_running,\n)\nfrom apps.scan.tasks.port_scan import (\n    export_hosts_task,\n    run_and_stream_save_ports_task,\n)\nfrom apps.scan.utils import build_scan_command, user_log, wait_for_system_load\n\nlogger = logging.getLogger(__name__)\n\n\ndef calculate_port_scan_timeout(\n    tool_config: dict,\n    file_path: str,\n    base_per_pair: float = 0.5\n) -> int:\n    \"\"\"\n    根据目标数量和端口数量计算超时时间\n\n    计算公式：超时时间 = 目标数 × 端口数 × base_per_pair\n    超时范围：60秒 ~ 无上限\n\n    Args:\n        tool_config: 工具配置字典，包含端口配置（ports, top-ports等）\n        file_path: 目标文件路径（域名/IP列表）\n        base_per_pair: 每个\"端口-目标对\"的基础时间（秒），默认 0.5秒\n\n    Returns:\n        int: 计算出的超时时间（秒），最小 60 秒\n    \"\"\"\n    try:\n        result = subprocess.run(\n            ['wc', '-l', file_path],\n            capture_output=True,\n            text=True,\n            check=True\n        )\n        target_count = int(result.stdout.strip().split()[0])\n        port_count = _parse_port_count(tool_config)\n        total_work = target_count * port_count\n        timeout = max(60, int(total_work * base_per_pair))\n\n        logger.info(\n            \"计算端口扫描 timeout - 目标数: %d, 端口数: %d, 总工作量: %d, 超时: %d秒\",\n            target_count, port_count, total_work, timeout\n        )\n        return timeout\n\n    except Exception as e:\n        logger.warning(\"计算 timeout 失败: %s，使用默认值 600秒\", e)\n        return 600\n\n\ndef _parse_port_count(tool_config: dict) -> int:\n    \"\"\"\n    从工具配置中解析端口数量\n\n    优先级：\n    1. top-ports: N  → 返回 N\n    2. ports: \"80,443,8080\"  → 返回逗号分隔的数量\n    3. ports: \"1-1000\"  → 返回范围的大小\n    4. ports: \"1-65535\"  → 返回 65535\n    5. 默认  → 返回 100（naabu 默认扫描 top 100）\n\n    Args:\n        tool_config: 工具配置字典\n\n    Returns:\n        int: 端口数量\n    \"\"\"\n    # 检查 top-ports 配置\n    if 'top-ports' in tool_config:\n        top_ports = tool_config['top-ports']\n        if isinstance(top_ports, int) and top_ports > 0:\n            return top_ports\n        logger.warning(\"top-ports 配置无效: %s，使用默认值\", top_ports)\n\n    # 检查 ports 配置\n    if 'ports' in tool_config:\n        ports_str = str(tool_config['ports']).strip()\n\n        # 逗号分隔的端口列表：80,443,8080\n        if ',' in ports_str:\n            return len([p.strip() for p in ports_str.split(',') if p.strip()])\n\n        # 端口范围：1-1000\n        if '-' in ports_str:\n            try:\n                start, end = ports_str.split('-', 1)\n                start_port = int(start.strip())\n                end_port = int(end.strip())\n                if 1 <= start_port <= end_port <= 65535:\n                    return end_port - start_port + 1\n                logger.warning(\"端口范围无效: %s，使用默认值\", ports_str)\n            except ValueError:\n                logger.warning(\"端口范围解析失败: %s，使用默认值\", ports_str)\n\n        # 单个端口\n        try:\n            port = int(ports_str)\n            if 1 <= port <= 65535:\n                return 1\n        except ValueError:\n            logger.warning(\"端口配置解析失败: %s，使用默认值\", ports_str)\n\n    # 默认值：naabu 默认扫描 top 100 端口\n    return 100\n\n\n\n\n\ndef _export_hosts(target_id: int, port_scan_dir: Path) -> tuple[str, int, str]:\n    \"\"\"\n    导出主机列表到文件\n\n    根据 Target 类型自动决定导出内容：\n    - DOMAIN: 从 Subdomain 表导出子域名\n    - IP: 直接写入 target.name\n    - CIDR: 展开 CIDR 范围内的所有 IP\n\n    Args:\n        target_id: 目标 ID\n        port_scan_dir: 端口扫描目录\n\n    Returns:\n        tuple: (hosts_file, host_count, target_type)\n    \"\"\"\n    logger.info(\"Step 1: 导出主机列表\")\n\n    hosts_file = str(port_scan_dir / 'hosts.txt')\n    export_result = export_hosts_task(\n        target_id=target_id,\n        output_file=hosts_file,\n    )\n\n    host_count = export_result['total_count']\n    target_type = export_result.get('target_type', 'unknown')\n\n    logger.info(\n        \"✓ 主机列表导出完成 - 类型: %s, 文件: %s, 数量: %d\",\n        target_type, export_result['output_file'], host_count\n    )\n\n    if host_count == 0:\n        logger.warning(\"目标下没有可扫描的主机，无法执行端口扫描\")\n\n    return export_result['output_file'], host_count, target_type\n\n\ndef _run_scans_sequentially(\n    enabled_tools: dict,\n    domains_file: str,\n    port_scan_dir: Path,\n    scan_id: int,\n    target_id: int,\n    target_name: str\n) -> tuple[dict, int, list, list]:\n    \"\"\"\n    串行执行端口扫描任务\n\n    Args:\n        enabled_tools: 已启用的工具配置字典\n        domains_file: 域名文件路径\n        port_scan_dir: 端口扫描目录\n        scan_id: 扫描任务 ID\n        target_id: 目标 ID\n        target_name: 目标名称（用于错误日志）\n\n    Returns:\n        tuple: (tool_stats, processed_records, successful_tool_names, failed_tools)\n    \"\"\"\n    tool_stats = {}\n    processed_records = 0\n    failed_tools = []\n\n    for tool_name, tool_config in enabled_tools.items():\n        # 构建命令\n        try:\n            command = build_scan_command(\n                tool_name=tool_name,\n                scan_type='port_scan',\n                command_params={'domains_file': domains_file},\n                tool_config=tool_config\n            )\n        except Exception as e:\n            reason = f\"命令构建失败: {e}\"\n            logger.error(\"构建 %s 命令失败: %s\", tool_name, e)\n            failed_tools.append({'tool': tool_name, 'reason': reason})\n            continue\n\n        # 获取超时时间\n        config_timeout = tool_config['timeout']\n        if config_timeout == 'auto':\n            config_timeout = calculate_port_scan_timeout(tool_config, str(domains_file))\n            logger.info(\"✓ 工具 %s 动态计算 timeout: %d秒\", tool_name, config_timeout)\n\n        # 生成日志文件路径\n        timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')\n        log_file = port_scan_dir / f\"{tool_name}_{timestamp}.log\"\n\n        logger.info(\"开始执行 %s 扫描（超时: %d秒）...\", tool_name, config_timeout)\n        user_log(scan_id, \"port_scan\", f\"Running {tool_name}: {command}\")\n\n        # 执行扫描任务\n        try:\n            result = run_and_stream_save_ports_task(\n                cmd=command,\n                tool_name=tool_name,\n                scan_id=scan_id,\n                target_id=target_id,\n                cwd=str(port_scan_dir),\n                shell=True,\n                batch_size=1000,\n                timeout=config_timeout,\n                log_file=str(log_file)\n            )\n\n            tool_stats[tool_name] = {\n                'command': command,\n                'result': result,\n                'timeout': config_timeout\n            }\n            tool_records = result.get('processed_records', 0)\n            processed_records += tool_records\n            logger.info(\"✓ 工具 %s 流式处理完成 - 记录数: %d\", tool_name, tool_records)\n            user_log(scan_id, \"port_scan\", f\"{tool_name} completed: found {tool_records} ports\")\n\n        except subprocess.TimeoutExpired:\n            reason = f\"timeout after {config_timeout}s\"\n            failed_tools.append({'tool': tool_name, 'reason': reason})\n            logger.warning(\n                \"⚠️ 工具 %s 执行超时 - 超时配置: %d秒\\n\"\n                \"注意：超时前已解析的端口数据已保存到数据库，但扫描未完全完成。\",\n                tool_name, config_timeout\n            )\n            user_log(scan_id, \"port_scan\", f\"{tool_name} failed: {reason}\", \"error\")\n        except Exception as exc:\n            reason = str(exc)\n            failed_tools.append({'tool': tool_name, 'reason': reason})\n            logger.error(\"工具 %s 执行失败: %s\", tool_name, exc, exc_info=True)\n            user_log(scan_id, \"port_scan\", f\"{tool_name} failed: {reason}\", \"error\")\n\n    if failed_tools:\n        logger.warning(\n            \"以下扫描工具执行失败: %s\",\n            ', '.join([f['tool'] for f in failed_tools])\n        )\n\n    if not tool_stats:\n        error_details = \"; \".join([f\"{f['tool']}: {f['reason']}\" for f in failed_tools])\n        logger.warning(\"所有端口扫描工具均失败 - 目标: %s, 失败工具: %s\", target_name, error_details)\n        return {}, 0, [], failed_tools\n\n    successful_tool_names = [\n        name for name in enabled_tools\n        if name not in [f['tool'] for f in failed_tools]\n    ]\n\n    logger.info(\n        \"✓ 串行端口扫描执行完成 - 成功: %d/%d (成功: %s, 失败: %s)\",\n        len(tool_stats), len(enabled_tools),\n        ', '.join(successful_tool_names) if successful_tool_names else '无',\n        ', '.join([f['tool'] for f in failed_tools]) if failed_tools else '无'\n    )\n\n    return tool_stats, processed_records, successful_tool_names, failed_tools\n\n\n@flow(\n    name=\"port_scan\",\n    log_prints=True,\n    on_running=[on_scan_flow_running],\n    on_completion=[on_scan_flow_completed],\n    on_failure=[on_scan_flow_failed],\n)\ndef port_scan_flow(\n    scan_id: int,\n    target_name: str,\n    target_id: int,\n    scan_workspace_dir: str,\n    enabled_tools: dict\n) -> dict:\n    \"\"\"\n    端口扫描 Flow\n\n    主要功能：\n        1. 扫描目标域名/IP 的开放端口\n        2. 保存 host + ip + port 三元映射到 HostPortMapping 表\n\n    输出资产：\n        - HostPortMapping：主机端口映射（host + ip + port 三元组）\n\n    工作流程：\n        Step 0: 创建工作目录\n        Step 1: 导出域名列表到文件（供扫描工具使用）\n        Step 2: 解析配置，获取启用的工具\n        Step 3: 串行执行扫描工具，运行端口扫描工具并实时解析输出到数据库\n\n    Args:\n        scan_id: 扫描任务 ID\n        target_name: 域名\n        target_id: 目标 ID\n        scan_workspace_dir: Scan 工作空间目录\n        enabled_tools: 启用的工具配置字典\n\n    Returns:\n        dict: 扫描结果\n\n    Raises:\n        ValueError: 配置错误\n        RuntimeError: 执行失败\n    \"\"\"\n    try:\n        wait_for_system_load(context=\"port_scan_flow\")\n\n        if scan_id is None:\n            raise ValueError(\"scan_id 不能为空\")\n        if not target_name:\n            raise ValueError(\"target_name 不能为空\")\n        if target_id is None:\n            raise ValueError(\"target_id 不能为空\")\n        if not scan_workspace_dir:\n            raise ValueError(\"scan_workspace_dir 不能为空\")\n        if not enabled_tools:\n            raise ValueError(\"enabled_tools 不能为空\")\n\n        logger.info(\n            \"开始端口扫描 - Scan ID: %s, Target: %s, Workspace: %s\",\n            scan_id, target_name, scan_workspace_dir\n        )\n        user_log(scan_id, \"port_scan\", \"Starting port scan\")\n\n        # Step 0: 创建工作目录\n        from apps.scan.utils import setup_scan_directory\n        port_scan_dir = setup_scan_directory(scan_workspace_dir, 'port_scan')\n\n        # Step 1: 导出主机列表\n        hosts_file, host_count, target_type = _export_hosts(target_id, port_scan_dir)\n\n        if host_count == 0:\n            logger.warning(\"跳过端口扫描：没有主机可扫描 - Scan ID: %s\", scan_id)\n            user_log(scan_id, \"port_scan\", \"Skipped: no hosts to scan\", \"warning\")\n            return {\n                'success': True,\n                'scan_id': scan_id,\n                'target': target_name,\n                'scan_workspace_dir': scan_workspace_dir,\n                'hosts_file': hosts_file,\n                'host_count': 0,\n                'target_type': target_type,\n                'processed_records': 0,\n                'executed_tasks': ['export_hosts'],\n                'tool_stats': {\n                    'total': 0,\n                    'successful': 0,\n                    'failed': 0,\n                    'successful_tools': [],\n                    'failed_tools': [],\n                    'details': {}\n                }\n            }\n\n        # Step 2: 工具配置信息\n        logger.info(\"Step 2: 工具配置信息\")\n        logger.info(\"✓ 启用工具: %s\", ', '.join(enabled_tools.keys()))\n\n        # Step 3: 串行执行扫描工具\n        logger.info(\"Step 3: 串行执行扫描工具\")\n        tool_stats, processed_records, successful_tool_names, failed_tools = _run_scans_sequentially(\n            enabled_tools=enabled_tools,\n            domains_file=hosts_file,\n            port_scan_dir=port_scan_dir,\n            scan_id=scan_id,\n            target_id=target_id,\n            target_name=target_name\n        )\n\n        logger.info(\"✓ 端口扫描完成 - 发现端口: %d\", processed_records)\n        user_log(scan_id, \"port_scan\", f\"port_scan completed: found {processed_records} ports\")\n\n        executed_tasks = ['export_hosts', 'parse_config']\n        executed_tasks.extend([f'run_and_stream_save_ports ({tool})' for tool in tool_stats])\n\n        return {\n            'success': True,\n            'scan_id': scan_id,\n            'target': target_name,\n            'scan_workspace_dir': scan_workspace_dir,\n            'hosts_file': hosts_file,\n            'host_count': host_count,\n            'target_type': target_type,\n            'processed_records': processed_records,\n            'executed_tasks': executed_tasks,\n            'tool_stats': {\n                'total': len(tool_stats) + len(failed_tools),\n                'successful': len(successful_tool_names),\n                'failed': len(failed_tools),\n                'successful_tools': successful_tool_names,\n                'failed_tools': failed_tools,\n                'details': tool_stats\n            }\n        }\n\n    except ValueError as e:\n        logger.error(\"配置错误: %s\", e)\n        raise\n    except RuntimeError as e:\n        logger.error(\"运行时错误: %s\", e)\n        raise\n    except Exception as e:\n        logger.exception(\"端口扫描失败: %s\", e)\n        raise\n"
  },
  {
    "path": "backend/apps/scan/flows/screenshot_flow.py",
    "content": "\"\"\"\n截图 Flow\n\n负责编排截图的完整流程：\n1. 从数据库获取 URL 列表（websites 和/或 endpoints）\n2. 批量截图并保存快照\n3. 同步到资产表\n\n支持两种模式：\n1. 传统模式（向后兼容）：使用 target_id 从数据库获取 URL\n2. Provider 模式：使用 TargetProvider 从任意数据源获取 URL\n\"\"\"\n\nimport logging\nfrom typing import Optional\n\nfrom prefect import flow\n\nfrom apps.scan.handlers.scan_flow_handlers import (\n    on_scan_flow_completed,\n    on_scan_flow_failed,\n    on_scan_flow_running,\n)\nfrom apps.scan.providers import TargetProvider\nfrom apps.scan.services.target_export_service import DataSource, get_urls_with_fallback\nfrom apps.scan.tasks.screenshot import capture_screenshots_task\nfrom apps.scan.utils import user_log, wait_for_system_load\n\nlogger = logging.getLogger(__name__)\n\n# URL 来源到 DataSource 的映射\n_SOURCE_MAPPING = {\n    'websites': DataSource.WEBSITE,\n    'endpoints': DataSource.ENDPOINT,\n}\n\n\ndef _parse_screenshot_config(enabled_tools: dict) -> dict:\n    \"\"\"解析截图配置\"\"\"\n    playwright_config = enabled_tools.get('playwright', {})\n    return {\n        'concurrency': playwright_config.get('concurrency', 5),\n        'url_sources': playwright_config.get('url_sources', ['websites'])\n    }\n\n\ndef _map_url_sources_to_data_sources(url_sources: list[str]) -> list[str]:\n    \"\"\"将配置中的 url_sources 映射为 DataSource 常量\"\"\"\n    sources = []\n    for source in url_sources:\n        if source in _SOURCE_MAPPING:\n            sources.append(_SOURCE_MAPPING[source])\n        else:\n            logger.warning(\"未知的 URL 来源: %s，跳过\", source)\n\n    # 添加默认回退（从 subdomain 构造）\n    sources.append(DataSource.DEFAULT)\n    return sources\n\n\ndef _collect_urls_from_provider(provider: TargetProvider) -> tuple[list[str], str, list[str]]:\n    \"\"\"从 Provider 收集 URL\"\"\"\n    logger.info(\"使用 Provider 模式获取 URL - Provider: %s\", type(provider).__name__)\n    urls = list(provider.iter_urls())\n\n    blacklist_filter = provider.get_blacklist_filter()\n    if blacklist_filter:\n        urls = [url for url in urls if blacklist_filter.is_allowed(url)]\n\n    return urls, 'provider', ['provider']\n\n\ndef _collect_urls_from_database(\n    target_id: int,\n    url_sources: list[str]\n) -> tuple[list[str], str, list[str]]:\n    \"\"\"从数据库收集 URL（带黑名单过滤和回退）\"\"\"\n    data_sources = _map_url_sources_to_data_sources(url_sources)\n    result = get_urls_with_fallback(target_id, sources=data_sources)\n    return result['urls'], result['source'], result['tried_sources']\n\n\ndef _build_empty_result(scan_id: int, target_name: str) -> dict:\n    \"\"\"构建空结果\"\"\"\n    return {\n        'success': True,\n        'scan_id': scan_id,\n        'target': target_name,\n        'total_urls': 0,\n        'successful': 0,\n        'failed': 0,\n        'synced': 0\n    }\n\n\n@flow(\n    name=\"screenshot\",\n    log_prints=True,\n    on_running=[on_scan_flow_running],\n    on_completion=[on_scan_flow_completed],\n    on_failure=[on_scan_flow_failed],\n)\ndef screenshot_flow(\n    scan_id: int,\n    target_name: str,\n    target_id: int,\n    scan_workspace_dir: str,\n    enabled_tools: dict,\n    provider: Optional[TargetProvider] = None\n) -> dict:\n    \"\"\"\n    截图 Flow\n\n    支持两种模式：\n    1. 传统模式（向后兼容）：使用 target_id 从数据库获取 URL\n    2. Provider 模式：使用 TargetProvider 从任意数据源获取 URL\n\n    Args:\n        scan_id: 扫描任务 ID\n        target_name: 目标名称\n        target_id: 目标 ID\n        scan_workspace_dir: 扫描工作空间目录\n        enabled_tools: 启用的工具配置\n        provider: TargetProvider 实例（新模式，可选）\n\n    Returns:\n        截图结果字典\n    \"\"\"\n    try:\n        # 负载检查：等待系统资源充足\n        wait_for_system_load(context=\"screenshot_flow\")\n\n        mode = 'Provider' if provider else 'Legacy'\n        logger.info(\n            \"开始截图扫描 - Scan ID: %s, Target: %s, Mode: %s\",\n            scan_id, target_name, mode\n        )\n        user_log(scan_id, \"screenshot\", \"Starting screenshot capture\")\n\n        # Step 1: 解析配置\n        config = _parse_screenshot_config(enabled_tools)\n        concurrency = config['concurrency']\n        logger.info(\"截图配置 - 并发: %d, URL来源: %s\", concurrency, config['url_sources'])\n\n        # Step 2: 收集 URL 列表\n        if provider is not None:\n            urls, source_info, tried_sources = _collect_urls_from_provider(provider)\n        else:\n            urls, source_info, tried_sources = _collect_urls_from_database(\n                target_id, config['url_sources']\n            )\n\n        logger.info(\n            \"URL 收集完成 - 来源: %s, 数量: %d, 尝试过: %s\",\n            source_info, len(urls), tried_sources\n        )\n\n        if not urls:\n            logger.warning(\"没有可截图的 URL，跳过截图任务\")\n            user_log(scan_id, \"screenshot\", \"Skipped: no URLs to capture\", \"warning\")\n            return _build_empty_result(scan_id, target_name)\n\n        user_log(\n            scan_id, \"screenshot\",\n            f\"Found {len(urls)} URLs to capture (source: {source_info})\"\n        )\n\n        # Step 3: 批量截图\n        logger.info(\"批量截图 - %d 个 URL\", len(urls))\n        capture_result = capture_screenshots_task(\n            urls=urls,\n            scan_id=scan_id,\n            target_id=target_id,\n            config={'concurrency': concurrency}\n        )\n\n        # Step 4: 同步到资产表\n        logger.info(\"同步截图到资产表\")\n        from apps.asset.services.screenshot_service import ScreenshotService\n        synced = ScreenshotService().sync_screenshots_to_asset(scan_id, target_id)\n\n        total = capture_result['total']\n        successful = capture_result['successful']\n        failed = capture_result['failed']\n\n        logger.info(\n            \"✓ 截图完成 - 总数: %d, 成功: %d, 失败: %d, 同步: %d\",\n            total, successful, failed, synced\n        )\n        user_log(\n            scan_id, \"screenshot\",\n            f\"Screenshot completed: {successful}/{total} captured, {synced} synced\"\n        )\n\n        return {\n            'success': True,\n            'scan_id': scan_id,\n            'target': target_name,\n            'total_urls': total,\n            'successful': successful,\n            'failed': failed,\n            'synced': synced\n        }\n\n    except Exception:\n        logger.exception(\"截图 Flow 失败\")\n        user_log(scan_id, \"screenshot\", \"Screenshot failed\", \"error\")\n        raise\n"
  },
  {
    "path": "backend/apps/scan/flows/site_scan_flow.py",
    "content": "\"\"\"\n站点扫描 Flow\n\n负责编排站点扫描的完整流程\n\n架构：\n- Flow 负责编排多个原子 Task\n- 支持串行执行扫描工具（流式处理）\n- 每个 Task 可独立重试\n- 配置由 YAML 解析\n\"\"\"\n\nimport logging\nimport subprocess\nfrom dataclasses import dataclass\nfrom datetime import datetime\nfrom pathlib import Path\nfrom typing import Optional\n\nfrom prefect import flow\n\n# Django 环境初始化（导入即生效）\nfrom apps.common.prefect_django_setup import setup_django_for_prefect  # noqa: F401\nfrom apps.scan.handlers.scan_flow_handlers import (\n    on_scan_flow_completed,\n    on_scan_flow_failed,\n    on_scan_flow_running,\n)\nfrom apps.scan.tasks.site_scan import (\n    export_site_urls_task,\n    run_and_stream_save_websites_task,\n)\nfrom apps.scan.utils import build_scan_command, user_log, wait_for_system_load\n\nlogger = logging.getLogger(__name__)\n\n\n@dataclass\nclass ScanContext:\n    \"\"\"扫描上下文，封装扫描参数\"\"\"\n    scan_id: int\n    target_id: int\n    target_name: str\n    site_scan_dir: Path\n    urls_file: str\n    total_urls: int\n\n\ndef _count_file_lines(file_path: str) -> int:\n    \"\"\"使用 wc -l 统计文件行数\"\"\"\n    try:\n        result = subprocess.run(\n            ['wc', '-l', file_path],\n            capture_output=True,\n            text=True,\n            check=True\n        )\n        return int(result.stdout.strip().split()[0])\n    except (subprocess.CalledProcessError, ValueError, IndexError) as e:\n        logger.warning(\"wc -l 计算行数失败: %s，返回 0\", e)\n        return 0\n\n\ndef _calculate_timeout_by_line_count(\n    file_path: str,\n    base_per_time: int = 1,\n    min_timeout: int = 60\n) -> int:\n    \"\"\"\n    根据文件行数计算 timeout\n\n    Args:\n        file_path: 要统计行数的文件路径\n        base_per_time: 每行的基础时间（秒），默认1秒\n        min_timeout: 最小超时时间（秒），默认60秒\n\n    Returns:\n        int: 计算出的超时时间（秒），不低于 min_timeout\n    \"\"\"\n    line_count = _count_file_lines(file_path)\n    timeout = max(line_count * base_per_time, min_timeout)\n\n    logger.info(\n        \"timeout 自动计算: 文件=%s, 行数=%d, 每行时间=%d秒, timeout=%d秒\",\n        file_path, line_count, base_per_time, timeout\n    )\n    return timeout\n\n\ndef _export_site_urls(\n    target_id: int,\n    site_scan_dir: Path\n) -> tuple[str, int, int]:\n    \"\"\"\n    导出站点 URL 到文件\n\n    Args:\n        target_id: 目标 ID\n        site_scan_dir: 站点扫描目录\n\n    Returns:\n        tuple: (urls_file, total_urls, association_count)\n    \"\"\"\n    logger.info(\"Step 1: 导出站点URL列表\")\n\n    urls_file = str(site_scan_dir / 'site_urls.txt')\n    export_result = export_site_urls_task(\n        target_id=target_id,\n        output_file=urls_file,\n        batch_size=1000\n    )\n\n    total_urls = export_result['total_urls']\n    association_count = export_result['association_count']\n\n    logger.info(\n        \"✓ 站点URL导出完成 - 文件: %s, URL数量: %d, 关联数: %d\",\n        export_result['output_file'], total_urls, association_count\n    )\n\n    if total_urls == 0:\n        logger.warning(\"目标下没有可用的站点URL，无法执行站点扫描\")\n\n    return export_result['output_file'], total_urls, association_count\n\n\ndef _get_tool_timeout(tool_config: dict, urls_file: str) -> int:\n    \"\"\"获取工具超时时间（支持 'auto' 动态计算）\"\"\"\n    config_timeout = tool_config.get('timeout', 300)\n\n    if config_timeout == 'auto':\n        return _calculate_timeout_by_line_count(urls_file, base_per_time=1)\n\n    dynamic_timeout = _calculate_timeout_by_line_count(urls_file, base_per_time=1)\n    return max(dynamic_timeout, config_timeout)\n\n\ndef _execute_single_tool(\n    tool_name: str,\n    tool_config: dict,\n    ctx: ScanContext\n) -> Optional[dict]:\n    \"\"\"\n    执行单个扫描工具\n\n    Returns:\n        成功返回结果字典，失败返回 None\n    \"\"\"\n    # 构建命令\n    try:\n        command = build_scan_command(\n            tool_name=tool_name,\n            scan_type='site_scan',\n            command_params={'url_file': ctx.urls_file},\n            tool_config=tool_config\n        )\n    except (ValueError, KeyError) as e:\n        logger.error(\"构建 %s 命令失败: %s\", tool_name, e)\n        return None\n\n    timeout = _get_tool_timeout(tool_config, ctx.urls_file)\n    timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')\n    log_file = ctx.site_scan_dir / f\"{tool_name}_{timestamp}.log\"\n\n    logger.info(\n        \"开始执行 %s 站点扫描 - URL数: %d, 超时: %ds\",\n        tool_name, ctx.total_urls, timeout\n    )\n    user_log(ctx.scan_id, \"site_scan\", f\"Running {tool_name}: {command}\")\n\n    try:\n        result = run_and_stream_save_websites_task(\n            cmd=command,\n            tool_name=tool_name,\n            scan_id=ctx.scan_id,\n            target_id=ctx.target_id,\n            cwd=str(ctx.site_scan_dir),\n            shell=True,\n            timeout=timeout,\n            log_file=str(log_file)\n        )\n\n        tool_created = result.get('created_websites', 0)\n        skipped = result.get('skipped_no_subdomain', 0) + result.get('skipped_failed', 0)\n\n        logger.info(\n            \"✓ 工具 %s 完成 - 处理: %d, 创建: %d, 跳过: %d\",\n            tool_name, result.get('processed_records', 0), tool_created, skipped\n        )\n        user_log(\n            ctx.scan_id, \"site_scan\",\n            f\"{tool_name} completed: found {tool_created} websites\"\n        )\n\n        return {'command': command, 'result': result, 'timeout': timeout}\n\n    except subprocess.TimeoutExpired:\n        logger.warning(\n            \"⚠️ 工具 %s 执行超时 - 超时配置: %d秒 (超时前数据已保存)\",\n            tool_name, timeout\n        )\n        user_log(\n            ctx.scan_id, \"site_scan\",\n            f\"{tool_name} failed: timeout after {timeout}s\", \"error\"\n        )\n    except (OSError, RuntimeError) as exc:\n        logger.error(\"工具 %s 执行失败: %s\", tool_name, exc, exc_info=True)\n        user_log(ctx.scan_id, \"site_scan\", f\"{tool_name} failed: {exc}\", \"error\")\n\n    return None\n\n\ndef _run_scans_sequentially(\n    enabled_tools: dict,\n    ctx: ScanContext\n) -> tuple[dict, int, list, list]:\n    \"\"\"\n    串行执行站点扫描任务\n\n    Returns:\n        tuple: (tool_stats, processed_records, successful_tools, failed_tools)\n    \"\"\"\n    tool_stats = {}\n    processed_records = 0\n    failed_tools = []\n\n    for tool_name, tool_config in enabled_tools.items():\n        result = _execute_single_tool(tool_name, tool_config, ctx)\n\n        if result:\n            tool_stats[tool_name] = result\n            processed_records += result['result'].get('processed_records', 0)\n        else:\n            failed_tools.append({'tool': tool_name, 'reason': '执行失败'})\n\n    if failed_tools:\n        logger.warning(\n            \"以下扫描工具执行失败: %s\",\n            ', '.join(f['tool'] for f in failed_tools)\n        )\n\n    if not tool_stats:\n        logger.warning(\n            \"所有站点扫描工具均失败 - 目标: %s\", ctx.target_name\n        )\n        return {}, 0, [], failed_tools\n\n    successful_tools = [\n        name for name in enabled_tools\n        if name not in {f['tool'] for f in failed_tools}\n    ]\n\n    logger.info(\n        \"✓ 站点扫描执行完成 - 成功: %d/%d\",\n        len(tool_stats), len(enabled_tools)\n    )\n\n    return tool_stats, processed_records, successful_tools, failed_tools\n\n\ndef _build_empty_result(\n    scan_id: int,\n    target_name: str,\n    scan_workspace_dir: str,\n    urls_file: str,\n    association_count: int\n) -> dict:\n    \"\"\"构建空结果（无 URL 可扫描时）\"\"\"\n    return {\n        'success': True,\n        'scan_id': scan_id,\n        'target': target_name,\n        'scan_workspace_dir': scan_workspace_dir,\n        'urls_file': urls_file,\n        'total_urls': 0,\n        'association_count': association_count,\n        'processed_records': 0,\n        'created_websites': 0,\n        'skipped_no_subdomain': 0,\n        'skipped_failed': 0,\n        'executed_tasks': ['export_site_urls'],\n        'tool_stats': {\n            'total': 0,\n            'successful': 0,\n            'failed': 0,\n            'successful_tools': [],\n            'failed_tools': [],\n            'details': {}\n        }\n    }\n\n\ndef _aggregate_tool_results(tool_stats: dict) -> tuple[int, int, int]:\n    \"\"\"汇总工具结果\"\"\"\n    total_created = sum(\n        s['result'].get('created_websites', 0) for s in tool_stats.values()\n    )\n    total_skipped_no_subdomain = sum(\n        s['result'].get('skipped_no_subdomain', 0) for s in tool_stats.values()\n    )\n    total_skipped_failed = sum(\n        s['result'].get('skipped_failed', 0) for s in tool_stats.values()\n    )\n    return total_created, total_skipped_no_subdomain, total_skipped_failed\n\n\ndef _validate_flow_params(\n    scan_id: int,\n    target_name: str,\n    target_id: int,\n    scan_workspace_dir: str\n) -> None:\n    \"\"\"验证 Flow 参数\"\"\"\n    if scan_id is None:\n        raise ValueError(\"scan_id 不能为空\")\n    if not target_name:\n        raise ValueError(\"target_name 不能为空\")\n    if target_id is None:\n        raise ValueError(\"target_id 不能为空\")\n    if not scan_workspace_dir:\n        raise ValueError(\"scan_workspace_dir 不能为空\")\n\n\n@flow(\n    name=\"site_scan\",\n    log_prints=True,\n    on_running=[on_scan_flow_running],\n    on_completion=[on_scan_flow_completed],\n    on_failure=[on_scan_flow_failed],\n)\ndef site_scan_flow(\n    scan_id: int,\n    target_name: str,\n    target_id: int,\n    scan_workspace_dir: str,\n    enabled_tools: dict\n) -> dict:\n    \"\"\"\n    站点扫描 Flow\n\n    主要功能：\n        1. 从target获取所有子域名与其对应的端口号，拼接成URL写入文件\n        2. 用httpx进行批量请求并实时保存到数据库（流式处理）\n\n    Args:\n        scan_id: 扫描任务 ID\n        target_name: 目标名称\n        target_id: 目标 ID\n        scan_workspace_dir: 扫描工作空间目录\n        enabled_tools: 启用的工具配置字典\n\n    Returns:\n        dict: 扫描结果\n\n    Raises:\n        ValueError: 配置错误\n        RuntimeError: 执行失败\n    \"\"\"\n    try:\n        wait_for_system_load(context=\"site_scan_flow\")\n\n        logger.info(\n            \"开始站点扫描 - Scan ID: %s, Target: %s, Workspace: %s\",\n            scan_id, target_name, scan_workspace_dir\n        )\n\n        _validate_flow_params(scan_id, target_name, target_id, scan_workspace_dir)\n        user_log(scan_id, \"site_scan\", \"Starting site scan\")\n\n        # Step 0: 创建工作目录\n        from apps.scan.utils import setup_scan_directory\n        site_scan_dir = setup_scan_directory(scan_workspace_dir, 'site_scan')\n\n        # Step 1: 导出站点 URL\n        urls_file, total_urls, association_count = _export_site_urls(\n            target_id, site_scan_dir\n        )\n\n        if total_urls == 0:\n            logger.warning(\"跳过站点扫描：没有站点 URL 可扫描 - Scan ID: %s\", scan_id)\n            user_log(scan_id, \"site_scan\", \"Skipped: no site URLs to scan\", \"warning\")\n            return _build_empty_result(\n                scan_id, target_name, scan_workspace_dir, urls_file, association_count\n            )\n\n        # Step 2: 工具配置信息\n        logger.info(\"✓ 启用工具: %s\", ', '.join(enabled_tools))\n\n        # Step 3: 串行执行扫描工具\n        ctx = ScanContext(\n            scan_id=scan_id,\n            target_id=target_id,\n            target_name=target_name,\n            site_scan_dir=site_scan_dir,\n            urls_file=urls_file,\n            total_urls=total_urls\n        )\n\n        tool_stats, processed_records, successful_tools, failed_tools = \\\n            _run_scans_sequentially(enabled_tools, ctx)\n\n        # 汇总结果\n        executed_tasks = ['export_site_urls', 'parse_config']\n        executed_tasks.extend(\n            f'run_and_stream_save_websites ({tool})' for tool in tool_stats\n        )\n\n        total_created, total_skipped_no_sub, total_skipped_failed = \\\n            _aggregate_tool_results(tool_stats)\n\n        logger.info(\"✓ 站点扫描完成 - 创建站点: %d\", total_created)\n        user_log(\n            scan_id, \"site_scan\",\n            f\"site_scan completed: found {total_created} websites\"\n        )\n\n        return {\n            'success': True,\n            'scan_id': scan_id,\n            'target': target_name,\n            'scan_workspace_dir': scan_workspace_dir,\n            'urls_file': urls_file,\n            'total_urls': total_urls,\n            'association_count': association_count,\n            'processed_records': processed_records,\n            'created_websites': total_created,\n            'skipped_no_subdomain': total_skipped_no_sub,\n            'skipped_failed': total_skipped_failed,\n            'executed_tasks': executed_tasks,\n            'tool_stats': {\n                'total': len(enabled_tools),\n                'successful': len(successful_tools),\n                'failed': len(failed_tools),\n                'successful_tools': successful_tools,\n                'failed_tools': failed_tools,\n                'details': tool_stats\n            }\n        }\n\n    except ValueError:\n        raise\n    except RuntimeError:\n        raise\n"
  },
  {
    "path": "backend/apps/scan/flows/subdomain_discovery_flow.py",
    "content": "\"\"\"\n子域名发现扫描 Flow\n\n负责编排子域名发现扫描的完整流程\n\n架构：\n- Flow 负责编排多个原子 Task\n- 支持并行执行扫描工具\n- 每个 Task 可独立重试\n- 配置由 YAML 解析\n\n增强流程（4 阶段）：\n    Stage 1: 被动收集（并行） - 必选\n    Stage 2: 字典爆破（可选） - 子域名字典爆破\n    Stage 3: 变异生成 + 验证（可选） - dnsgen + 通用存活验证\n    Stage 4: DNS 存活验证（可选） - 通用存活验证\n\n各阶段可灵活开关，最终结果根据实际执行的阶段动态决定\n\"\"\"\n\nimport logging\nimport subprocess\nimport uuid\nfrom dataclasses import dataclass, field\nfrom datetime import datetime\nfrom pathlib import Path\nfrom typing import Optional\n\nfrom prefect import flow\n\n# Django 环境初始化（导入即生效，pylint: disable=unused-import）\nfrom apps.common.prefect_django_setup import setup_django_for_prefect  # noqa: F401\nfrom apps.common.normalizer import normalize_domain\nfrom apps.common.validators import validate_domain\nfrom apps.engine.services.wordlist_service import WordlistService\nfrom apps.scan.handlers.scan_flow_handlers import (\n    on_scan_flow_completed,\n    on_scan_flow_failed,\n    on_scan_flow_running,\n)\nfrom apps.scan.utils import (\n    build_scan_command,\n    ensure_wordlist_local,\n    user_log,\n    wait_for_system_load,\n)\n\nlogger = logging.getLogger(__name__)\n\n# 泛解析检测配置\n_SAMPLE_MULTIPLIER = 100  # 采样数量 = 原文件 × 100\n_EXPANSION_THRESHOLD = 50  # 膨胀阈值 = 原文件 × 50\n_SAMPLE_TIMEOUT = 7200  # 采样超时 2 小时\n\n\n@dataclass\nclass ScanContext:\n    \"\"\"扫描上下文，用于在各阶段间传递状态\"\"\"\n    scan_id: int\n    target_id: int\n    domain_name: str\n    result_dir: Path\n    timestamp: str\n    current_result: str = \"\"\n    executed_tasks: list = field(default_factory=list)\n    failed_tools: list = field(default_factory=list)\n    successful_tools: list = field(default_factory=list)\n\n\ndef _validate_and_normalize_target(target_name: str) -> str:\n    \"\"\"验证并规范化目标域名\"\"\"\n    try:\n        normalized_target = normalize_domain(target_name)\n        validate_domain(normalized_target)\n        logger.debug(\"域名验证通过: %s -> %s\", target_name, normalized_target)\n        return normalized_target\n    except ValueError as e:\n        raise ValueError(f\"无效的目标域名: {target_name} - {e}\") from e\n\n\ndef _count_lines(file_path: str) -> int:\n    \"\"\"统计文件非空行数\"\"\"\n    try:\n        with open(file_path, 'r', encoding='utf-8', errors='ignore') as f:\n            return sum(1 for line in f if line.strip())\n    except OSError as e:\n        logger.warning(\"统计文件行数失败: %s - %s\", file_path, e)\n        return 0\n\n\ndef _merge_files(file_list: list, output_file: str) -> str:\n    \"\"\"合并多个文件并去重\"\"\"\n    domains = set()\n    for f in file_list:\n        if f and Path(f).exists():\n            with open(f, 'r', encoding='utf-8', errors='ignore') as fp:\n                for line in fp:\n                    line = line.strip()\n                    if line:\n                        domains.add(line)\n\n    with open(output_file, 'w', encoding='utf-8') as fp:\n        for domain in sorted(domains):\n            fp.write(domain + '\\n')\n\n    logger.info(\"合并完成: %d 个域名 -> %s\", len(domains), output_file)\n    return output_file\n\n\ndef _calculate_auto_timeout(file_path: str, multiplier: int = 3, default: int = 3600) -> int:\n    \"\"\"根据文件行数计算超时时间\"\"\"\n    try:\n        with open(file_path, 'rb') as f:\n            line_count = sum(1 for _ in f)\n        return line_count * multiplier if line_count > 0 else default\n    except OSError:\n        return default\n\n\ndef _run_single_tool(\n    tool_name: str,\n    tool_config: dict,\n    command_params: dict,\n    result_dir: Path,\n    scan_id: Optional[int] = None,\n    scan_type: str = 'subdomain_discovery'\n) -> str:\n    \"\"\"运行单个扫描工具，返回输出文件路径，失败返回空字符串\"\"\"\n    from apps.scan.tasks.subdomain_discovery import run_subdomain_discovery_task\n\n    timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')\n    short_uuid = uuid.uuid4().hex[:4]\n    output_file = str(result_dir / f\"{tool_name}_{timestamp}_{short_uuid}.txt\")\n    command_params['output_file'] = output_file\n\n    try:\n        command = build_scan_command(\n            tool_name=tool_name,\n            scan_type=scan_type,\n            command_params=command_params,\n            tool_config=tool_config\n        )\n    except (ValueError, KeyError) as e:\n        logger.error(\"构建 %s 命令失败: %s\", tool_name, e)\n        return \"\"\n\n    timeout = tool_config.get('timeout', 3600)\n    if timeout == 'auto':\n        timeout = 3600\n\n    logger.info(\"执行 %s: %s\", tool_name, command)\n    if scan_id:\n        user_log(scan_id, scan_type, f\"Running {tool_name}: {command}\")\n\n    try:\n        result = run_subdomain_discovery_task(\n            tool=tool_name,\n            command=command,\n            timeout=timeout,\n            output_file=output_file\n        )\n        return result if result else \"\"\n    except (subprocess.TimeoutExpired, OSError) as e:\n        logger.warning(\"%s 执行失败: %s\", tool_name, e)\n        return \"\"\n\n\ndef _run_scans_parallel(\n    enabled_tools: dict,\n    domain_name: str,\n    result_dir: Path,\n    scan_id: int,\n    provider_config_path: Optional[str] = None\n) -> tuple[list, list, list]:\n    \"\"\"并行运行所有启用的子域名扫描工具\"\"\"\n    from apps.scan.tasks.subdomain_discovery import run_subdomain_discovery_task\n\n    timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')\n    futures = {}\n    failed_tools = []\n\n    for tool_name, tool_config in enabled_tools.items():\n        short_uuid = uuid.uuid4().hex[:4]\n        output_file = str(result_dir / f\"{tool_name}_{timestamp}_{short_uuid}.txt\")\n\n        command_params = {'domain': domain_name, 'output_file': output_file}\n        if tool_name == 'subfinder' and provider_config_path:\n            command_params['provider_config'] = provider_config_path\n\n        try:\n            command = build_scan_command(\n                tool_name=tool_name,\n                scan_type='subdomain_discovery',\n                command_params=command_params,\n                tool_config=tool_config\n            )\n        except (ValueError, KeyError) as e:\n            logger.error(\"构建 %s 命令失败: %s\", tool_name, e)\n            failed_tools.append({'tool': tool_name, 'reason': f'命令构建失败: {e}'})\n            continue\n\n        timeout = tool_config.get('timeout', 600)\n        if timeout == 'auto':\n            timeout = 600\n            logger.info(\"✓ 工具 %s 使用默认 timeout: %d秒\", tool_name, timeout)\n\n        logger.debug(\"提交任务 - 工具: %s, 超时: %ds, 输出: %s\", tool_name, timeout, output_file)\n        user_log(scan_id, \"subdomain_discovery\", f\"Running {tool_name}: {command}\")\n\n        future = run_subdomain_discovery_task.submit(\n            tool=tool_name,\n            command=command,\n            timeout=timeout,\n            output_file=output_file\n        )\n        futures[tool_name] = future\n\n    if not futures:\n        logger.warning(\"所有扫描工具均无法启动 - 目标: %s\", domain_name)\n        return [], [{'tool': 'all', 'reason': '所有工具均无法启动'}], []\n\n    result_files = []\n    for tool_name, future in futures.items():\n        try:\n            result = future.result()\n            if result:\n                result_files.append(result)\n                logger.info(\"✓ 扫描工具 %s 执行成功: %s\", tool_name, result)\n                user_log(scan_id, \"subdomain_discovery\", f\"{tool_name} completed\")\n            else:\n                failed_tools.append({'tool': tool_name, 'reason': '未生成结果文件'})\n                logger.warning(\"⚠️ 扫描工具 %s 未生成结果文件\", tool_name)\n                user_log(scan_id, \"subdomain_discovery\", f\"{tool_name} failed: no output\", \"error\")\n        except (subprocess.TimeoutExpired, OSError) as e:\n            failed_tools.append({'tool': tool_name, 'reason': str(e)})\n            logger.warning(\"⚠️ 扫描工具 %s 执行失败: %s\", tool_name, e)\n            user_log(scan_id, \"subdomain_discovery\", f\"{tool_name} failed: {e}\", \"error\")\n\n    successful_tools = [name for name in futures if name not in [f['tool'] for f in failed_tools]]\n\n    logger.info(\n        \"✓ 扫描工具并行执行完成 - 成功: %d/%d\",\n        len(result_files), len(futures)\n    )\n\n    return result_files, failed_tools, successful_tools\n\n\ndef _generate_provider_config(result_dir: Path, scan_id: int) -> Optional[str]:\n    \"\"\"为 subfinder 生成第三方数据源配置\"\"\"\n    try:\n        from apps.scan.services.subfinder_provider_config_service import (\n            SubfinderProviderConfigService,\n        )\n        config_path = SubfinderProviderConfigService().generate(str(result_dir))\n        if config_path:\n            logger.info(\"Provider 配置文件已生成: %s\", config_path)\n            user_log(scan_id, \"subdomain_discovery\", \"Provider config generated for subfinder\")\n        return config_path\n    except (ImportError, OSError) as e:\n        logger.warning(\"生成 Provider 配置文件失败: %s\", e)\n        return None\n\n\ndef _run_stage1_passive(ctx: ScanContext, enabled_tools: dict, provider_config: Optional[str]):\n    \"\"\"Stage 1: 被动收集（并行）\"\"\"\n    if not enabled_tools:\n        return\n\n    logger.info(\"=\" * 40)\n    logger.info(\"Stage 1: 被动收集（并行）\")\n    logger.info(\"=\" * 40)\n    logger.info(\"启用工具: %s\", ', '.join(enabled_tools.keys()))\n    user_log(\n        ctx.scan_id, \"subdomain_discovery\",\n        f\"Stage 1: passive collection ({', '.join(enabled_tools.keys())})\"\n    )\n\n    result_files, failed, successful = _run_scans_parallel(\n        enabled_tools=enabled_tools,\n        domain_name=ctx.domain_name,\n        result_dir=ctx.result_dir,\n        scan_id=ctx.scan_id,\n        provider_config_path=provider_config\n    )\n\n    ctx.failed_tools.extend(failed)\n    ctx.successful_tools.extend(successful)\n    ctx.executed_tasks.extend([f'passive ({tool})' for tool in successful])\n\n    # 合并结果\n    ctx.current_result = str(ctx.result_dir / f\"subs_passive_{ctx.timestamp}.txt\")\n    if result_files:\n        ctx.current_result = _merge_files(result_files, ctx.current_result)\n        ctx.executed_tasks.append('merge_passive')\n    else:\n        Path(ctx.current_result).touch()\n\n\ndef _run_stage2_bruteforce(ctx: ScanContext, bruteforce_config: dict):\n    \"\"\"Stage 2: 字典爆破（可选）\"\"\"\n    if not bruteforce_config.get('enabled', False):\n        return\n\n    logger.info(\"=\" * 40)\n    logger.info(\"Stage 2: 字典爆破\")\n    logger.info(\"=\" * 40)\n    user_log(ctx.scan_id, \"subdomain_discovery\", \"Stage 2: bruteforce\")\n\n    tool_config = bruteforce_config.get('subdomain_bruteforce', {})\n    wordlist_name = tool_config.get('wordlist_name', 'dns_wordlist.txt')\n\n    try:\n        local_wordlist_path = ensure_wordlist_local(wordlist_name)\n\n        # 计算 timeout\n        timeout_value = tool_config.get('timeout', 3600)\n        if timeout_value == 'auto':\n            wordlist = WordlistService().get_wordlist_by_name(wordlist_name)\n            line_count = getattr(wordlist, 'line_count', None) if wordlist else None\n            if line_count is None:\n                line_count = _calculate_auto_timeout(local_wordlist_path, 1, 0)\n            timeout_value = int(line_count) * 3 if line_count else 3600\n            tool_config = {**tool_config, 'timeout': timeout_value}\n\n        result = _run_single_tool(\n            tool_name='subdomain_bruteforce',\n            tool_config=tool_config,\n            command_params={'domain': ctx.domain_name, 'wordlist': local_wordlist_path},\n            result_dir=ctx.result_dir,\n            scan_id=ctx.scan_id\n        )\n\n        if result:\n            ctx.current_result = _merge_files(\n                [ctx.current_result, result],\n                str(ctx.result_dir / f\"subs_merged_{ctx.timestamp}.txt\")\n            )\n            ctx.successful_tools.append('subdomain_bruteforce')\n            ctx.executed_tasks.append('bruteforce')\n            logger.info(\"✓ subdomain_bruteforce 执行完成\")\n            user_log(ctx.scan_id, \"subdomain_discovery\", \"subdomain_bruteforce completed\")\n        else:\n            ctx.failed_tools.append({'tool': 'subdomain_bruteforce', 'reason': '执行失败'})\n            logger.warning(\"⚠️ subdomain_bruteforce 执行失败\")\n            user_log(ctx.scan_id, \"subdomain_discovery\", \"subdomain_bruteforce failed\", \"error\")\n\n    except (ValueError, OSError) as exc:\n        ctx.failed_tools.append({'tool': 'subdomain_bruteforce', 'reason': str(exc)})\n        logger.warning(\"字典准备失败，跳过字典爆破: %s\", exc)\n        user_log(ctx.scan_id, \"subdomain_discovery\", f\"subdomain_bruteforce failed: {exc}\", \"error\")\n\n\ndef _run_stage3_permutation(ctx: ScanContext, permutation_config: dict):\n    \"\"\"Stage 3: 变异生成 + 验证（可选）\"\"\"\n    if not permutation_config.get('enabled', False):\n        return\n\n    logger.info(\"=\" * 40)\n    logger.info(\"Stage 3: 变异生成 + 存活验证（流式管道）\")\n    logger.info(\"=\" * 40)\n    user_log(ctx.scan_id, \"subdomain_discovery\", \"Stage 3: permutation + resolve\")\n\n    tool_config = permutation_config.get('subdomain_permutation_resolve', {})\n    before_count = _count_lines(ctx.current_result)\n\n    sample_size = before_count * _SAMPLE_MULTIPLIER\n    max_allowed = before_count * _EXPANSION_THRESHOLD\n    sample_output = str(ctx.result_dir / f\"subs_permuted_sample_{ctx.timestamp}.txt\")\n\n    sample_cmd = (\n        f\"cat {ctx.current_result} | dnsgen - | head -n {sample_size} | \"\n        f\"puredns resolve -r /app/backend/resources/resolvers.txt \"\n        f\"--write {sample_output} --wildcard-tests 50 --wildcard-batch 1000000 --quiet\"\n    )\n\n    logger.info(\n        \"泛解析采样检测: 原文件 %d 个, 采样 %d 个, 阈值 %d 个\",\n        before_count, sample_size, max_allowed\n    )\n\n    try:\n        subprocess.run(\n            sample_cmd,\n            shell=True,  # noqa: S602\n            timeout=_SAMPLE_TIMEOUT,\n            check=False,\n            capture_output=True\n        )\n        sample_count = _count_lines(sample_output) if Path(sample_output).exists() else 0\n\n        logger.info(\n            \"采样结果: %d 个域名存活 (原文件: %d, 阈值: %d)\",\n            sample_count, before_count, max_allowed\n        )\n\n        if sample_count > max_allowed:\n            ratio = sample_count / before_count if before_count > 0 else sample_count\n            logger.warning(\n                \"跳过变异: 采样检测到泛解析 (%d > %d, 膨胀率 %.1fx)\",\n                sample_count, max_allowed, ratio\n            )\n            ctx.failed_tools.append({\n                'tool': 'subdomain_permutation_resolve',\n                'reason': f\"采样检测到泛解析 (膨胀率 {ratio:.1f}x)\"\n            })\n            user_log(\n                ctx.scan_id, \"subdomain_discovery\",\n                f\"subdomain_permutation_resolve skipped: wildcard (ratio {ratio:.1f}x)\",\n                \"warning\"\n            )\n            return\n\n        # 采样通过，执行完整变异\n        logger.info(\"采样检测通过，执行完整变异...\")\n        result = _run_single_tool(\n            tool_name='subdomain_permutation_resolve',\n            tool_config=tool_config,\n            command_params={'input_file': ctx.current_result},\n            result_dir=ctx.result_dir,\n            scan_id=ctx.scan_id\n        )\n\n        if result:\n            ctx.current_result = _merge_files(\n                [ctx.current_result, result],\n                str(ctx.result_dir / f\"subs_with_permuted_{ctx.timestamp}.txt\")\n            )\n            ctx.successful_tools.append('subdomain_permutation_resolve')\n            ctx.executed_tasks.append('permutation')\n            logger.info(\"✓ subdomain_permutation_resolve 执行完成\")\n            user_log(ctx.scan_id, \"subdomain_discovery\", \"subdomain_permutation_resolve completed\")\n        else:\n            ctx.failed_tools.append({'tool': 'subdomain_permutation_resolve', 'reason': '执行失败'})\n            logger.warning(\"⚠️ subdomain_permutation_resolve 执行失败\")\n            user_log(\n                ctx.scan_id, \"subdomain_discovery\",\n                \"subdomain_permutation_resolve failed\", \"error\"\n            )\n\n    except subprocess.TimeoutExpired:\n        ctx.failed_tools.append({'tool': 'subdomain_permutation_resolve', 'reason': '采样检测超时'})\n        logger.warning(\"采样检测超时 (%d秒)，跳过变异\", _SAMPLE_TIMEOUT)\n        user_log(\n            ctx.scan_id, \"subdomain_discovery\",\n            \"subdomain_permutation_resolve failed: timeout\", \"error\"\n        )\n    except OSError as e:\n        ctx.failed_tools.append({'tool': 'subdomain_permutation_resolve', 'reason': f'采样检测失败: {e}'})\n        logger.warning(\"采样检测失败: %s，跳过变异\", e)\n        user_log(ctx.scan_id, \"subdomain_discovery\", f\"subdomain_permutation_resolve failed: {e}\", \"error\")\n\n\ndef _run_stage4_resolve(ctx: ScanContext, resolve_config: dict):\n    \"\"\"Stage 4: DNS 存活验证（可选）\"\"\"\n    if not resolve_config.get('enabled', False):\n        return\n\n    logger.info(\"=\" * 40)\n    logger.info(\"Stage 4: DNS 存活验证\")\n    logger.info(\"=\" * 40)\n    user_log(ctx.scan_id, \"subdomain_discovery\", \"Stage 4: DNS resolve\")\n\n    tool_config = resolve_config.get('subdomain_resolve', {})\n\n    # 动态计算 timeout\n    timeout_value = tool_config.get('timeout', 3600)\n    if timeout_value == 'auto':\n        timeout_value = _calculate_auto_timeout(ctx.current_result, 3, 3600)\n        tool_config = {**tool_config, 'timeout': timeout_value}\n\n    result = _run_single_tool(\n        tool_name='subdomain_resolve',\n        tool_config=tool_config,\n        command_params={'input_file': ctx.current_result},\n        result_dir=ctx.result_dir,\n        scan_id=ctx.scan_id\n    )\n\n    if result:\n        ctx.current_result = result\n        ctx.successful_tools.append('subdomain_resolve')\n        ctx.executed_tasks.append('resolve')\n        logger.info(\"✓ subdomain_resolve 执行完成\")\n        user_log(ctx.scan_id, \"subdomain_discovery\", \"subdomain_resolve completed\")\n    else:\n        ctx.failed_tools.append({'tool': 'subdomain_resolve', 'reason': '执行失败'})\n        logger.warning(\"⚠️ subdomain_resolve 执行失败\")\n        user_log(ctx.scan_id, \"subdomain_discovery\", \"subdomain_resolve failed\", \"error\")\n\n\ndef _save_to_database(ctx: ScanContext) -> int:\n    \"\"\"Final: 保存到数据库\"\"\"\n    from apps.scan.tasks.subdomain_discovery import merge_and_validate_task, save_domains_task\n\n    logger.info(\"=\" * 40)\n    logger.info(\"Final: 保存到数据库\")\n    logger.info(\"=\" * 40)\n\n    final_file = merge_and_validate_task(\n        result_files=[ctx.current_result],\n        result_dir=str(ctx.result_dir)\n    )\n\n    save_result = save_domains_task(\n        domains_file=final_file,\n        scan_id=ctx.scan_id,\n        target_id=ctx.target_id\n    )\n\n    ctx.executed_tasks.append('save_domains')\n    return save_result.get('processed_records', 0)\n\n\ndef _empty_result(scan_id: int, target: str, scan_workspace_dir: str) -> dict:\n    \"\"\"返回空结果\"\"\"\n    return {\n        'success': True,\n        'scan_id': scan_id,\n        'target': target,\n        'scan_workspace_dir': scan_workspace_dir,\n        'total': 0,\n        'executed_tasks': [],\n        'tool_stats': {\n            'total': 0,\n            'successful': 0,\n            'failed': 0,\n            'successful_tools': [],\n            'failed_tools': []\n        }\n    }\n\n\n@flow(\n    name=\"subdomain_discovery\",\n    log_prints=True,\n    on_running=[on_scan_flow_running],\n    on_completion=[on_scan_flow_completed],\n    on_failure=[on_scan_flow_failed],\n)\ndef subdomain_discovery_flow(\n    scan_id: int,\n    target_name: str,\n    target_id: int,\n    scan_workspace_dir: str,\n    enabled_tools: dict\n) -> dict:\n    \"\"\"子域名发现扫描流程\n\n    工作流程（4 阶段）：\n        Stage 1: 被动收集（并行） - 必选\n        Stage 2: 字典爆破（可选） - 子域名字典爆破\n        Stage 3: 变异生成 + 验证（可选） - dnsgen + 通用存活验证\n        Stage 4: DNS 存活验证（可选） - 通用存活验证\n        Final: 保存到数据库\n\n    注意：\n        - 子域名发现只对 DOMAIN 类型目标有意义\n        - IP 和 CIDR 类型目标会自动跳过\n    \"\"\"\n    try:\n        wait_for_system_load(context=\"subdomain_discovery_flow\")\n\n        # 参数验证\n        if scan_id is None:\n            raise ValueError(\"scan_id 不能为空\")\n        if target_id is None:\n            raise ValueError(\"target_id 不能为空\")\n        if not scan_workspace_dir:\n            raise ValueError(\"scan_workspace_dir 不能为空\")\n        if enabled_tools is None:\n            raise ValueError(\"enabled_tools 不能为空\")\n\n        if not target_name:\n            logger.warning(\"未提供目标域名，跳过子域名发现扫描\")\n            return _empty_result(scan_id, '', scan_workspace_dir)\n\n        # 检查 Target 类型\n        from apps.targets.models import Target\n        from apps.targets.services import TargetService\n\n        target = TargetService().get_target(target_id)\n        if target and target.type != Target.TargetType.DOMAIN:\n            logger.info(\n                \"跳过子域名发现扫描: Target 类型为 %s (ID=%d)，仅适用于域名类型\",\n                target.type, target_id\n            )\n            return _empty_result(scan_id, target_name, scan_workspace_dir)\n\n        # 验证并规范化目标域名\n        try:\n            domain_name = _validate_and_normalize_target(target_name)\n        except ValueError as e:\n            logger.warning(\"目标域名无效，跳过子域名发现扫描: %s\", e)\n            return _empty_result(scan_id, target_name, scan_workspace_dir)\n\n        # 准备工作目录\n        from apps.scan.utils import setup_scan_directory\n        result_dir = setup_scan_directory(scan_workspace_dir, 'subdomain_discovery')\n\n        logger.info(\n            \"开始子域名发现扫描 - Scan ID: %s, Domain: %s, Workspace: %s\",\n            scan_id, domain_name, scan_workspace_dir\n        )\n        user_log(scan_id, \"subdomain_discovery\", f\"Starting subdomain discovery for {domain_name}\")\n\n        # 解析配置\n        scan_config = enabled_tools\n        passive_tools = scan_config.get('passive_tools', {})\n        bruteforce_config = scan_config.get('bruteforce', {})\n        permutation_config = scan_config.get('permutation', {})\n        resolve_config = scan_config.get('resolve', {})\n\n        enabled_passive_tools = {\n            k: v for k, v in passive_tools.items()\n            if v.get('enabled', True)\n        }\n\n        # 创建扫描上下文\n        ctx = ScanContext(\n            scan_id=scan_id,\n            target_id=target_id,\n            domain_name=domain_name,\n            result_dir=result_dir,\n            timestamp=datetime.now().strftime('%Y%m%d_%H%M%S')\n        )\n\n        # 生成 Provider 配置\n        provider_config = _generate_provider_config(result_dir, scan_id)\n\n        # 执行各阶段\n        _run_stage1_passive(ctx, enabled_passive_tools, provider_config)\n        _run_stage2_bruteforce(ctx, bruteforce_config)\n        _run_stage3_permutation(ctx, permutation_config)\n        _run_stage4_resolve(ctx, resolve_config)\n\n        # 保存到数据库\n        processed_domains = _save_to_database(ctx)\n\n        logger.info(\"✓ 子域名发现扫描完成\")\n        user_log(\n            scan_id, \"subdomain_discovery\",\n            f\"subdomain_discovery completed: found {processed_domains} subdomains\"\n        )\n\n        # 计算工具总数\n        total_tools = len(enabled_passive_tools)\n        if bruteforce_config.get('enabled', False):\n            total_tools += 1\n        if permutation_config.get('enabled', False):\n            total_tools += 1\n        if resolve_config.get('enabled', False):\n            total_tools += 1\n\n        return {\n            'success': True,\n            'scan_id': scan_id,\n            'target': domain_name,\n            'scan_workspace_dir': scan_workspace_dir,\n            'total': processed_domains,\n            'executed_tasks': ctx.executed_tasks,\n            'tool_stats': {\n                'total': total_tools,\n                'successful': len(ctx.successful_tools),\n                'failed': len(ctx.failed_tools),\n                'successful_tools': ctx.successful_tools,\n                'failed_tools': ctx.failed_tools\n            }\n        }\n\n    except ValueError as e:\n        logger.error(\"配置错误: %s\", e)\n        raise\n    except RuntimeError as e:\n        logger.error(\"运行时错误: %s\", e)\n        raise\n"
  },
  {
    "path": "backend/apps/scan/flows/url_fetch/__init__.py",
    "content": "\"\"\"\nURL Fetch Flow 模块\n\n提供 URL 获取相关的 Flow：\n- url_fetch_flow: 主 Flow（按输入类型编排 + 统一后处理）\n- domain_name_url_fetch_flow: 基于 domain_name（来自 target_name）输入的 URL 获取子 Flow（如 waymore）\n- sites_url_fetch_flow: 基于 sites_file 输入的 URL 获取子 Flow（如 katana 等爬虫）\n\"\"\"\n\nfrom .main_flow import url_fetch_flow\nfrom .domain_name_url_fetch_flow import domain_name_url_fetch_flow\nfrom .sites_url_fetch_flow import sites_url_fetch_flow\n\n__all__ = [\n    'url_fetch_flow',\n    'domain_name_url_fetch_flow',\n    'sites_url_fetch_flow',\n]\n"
  },
  {
    "path": "backend/apps/scan/flows/url_fetch/domain_name_url_fetch_flow.py",
    "content": "\"\"\"\n基于 Target 根域名的 URL 被动收集 Flow\n\n用于 waymore 等被动收集工具：\n- 输入：Target 的根域名（target_name，如 example.com）\n- 工具会自动从第三方源（Wayback Machine、Common Crawl 等）查询该域名及其子域名的历史 URL\n- 不需要遍历子域名列表，工具内部会处理 *.example.com\n\n注意：\n- 此 Flow 只对 DOMAIN 类型 Target 有效\n- IP 和 CIDR 类型会自动跳过（被动收集工具不支持）\n\"\"\"\n\n# Django 环境初始化\nfrom apps.common.prefect_django_setup import setup_django_for_prefect\n\nimport logging\nimport uuid\nfrom datetime import datetime\nfrom pathlib import Path\nfrom typing import Dict\n\nfrom prefect import flow\n\nfrom apps.common.validators import validate_domain\nfrom apps.scan.tasks.url_fetch import run_url_fetcher_task\nfrom apps.scan.utils import build_scan_command\n\n\nlogger = logging.getLogger(__name__)\n\n\n@flow(name=\"domain_name_url_fetch_flow\", log_prints=True)\ndef domain_name_url_fetch_flow(\n    scan_id: int,\n    target_id: int,\n    target_name: str,\n    output_dir: str,\n    domain_name_tools: Dict[str, dict],\n) -> dict:\n    \"\"\"\n    基于 Target 根域名执行 URL 被动收集（当前主要用于 waymore）\n\n    执行流程：\n    1. 校验 Target 类型（IP/CIDR 类型跳过）\n    2. 使用传入的工具列表对根域名执行被动收集\n    3. 工具内部会自动查询该域名及其子域名的历史 URL\n    4. 汇总结果文件列表\n    \n    Args:\n        scan_id: 扫描 ID\n        target_id: 目标 ID\n        target_name: Target 根域名（如 example.com），不是子域名列表\n        output_dir: 输出目录\n        domain_name_tools: 被动收集工具配置（如 waymore）\n    \n    注意：\n    - 此 Flow 只对 DOMAIN 类型 Target 有效\n    - IP 和 CIDR 类型会自动跳过（waymore 等工具不支持）\n    - 工具会自动收集 *.target_name 的所有历史 URL，无需遍历子域名\n    \"\"\"\n    from apps.scan.utils import user_log\n    \n    try:\n        output_path = Path(output_dir)\n        output_path.mkdir(parents=True, exist_ok=True)\n\n        # 检查 Target 类型，IP/CIDR 类型跳过\n        from apps.targets.services import TargetService\n        from apps.targets.models import Target\n        \n        target_service = TargetService()\n        target = target_service.get_target(target_id)\n        \n        if target and target.type != Target.TargetType.DOMAIN:\n            logger.info(\n                \"跳过 domain_name URL 获取: Target 类型为 %s (ID=%d, Name=%s)，waymore 等工具仅适用于域名类型\",\n                target.type, target_id, target_name\n            )\n            return {\n                \"success\": True,\n                \"result_files\": [],\n                \"failed_tools\": [],\n                \"successful_tools\": [],\n            }\n\n        # 复用公共域名校验逻辑，确保 target_name 是合法域名\n        validate_domain(target_name)\n\n        logger.info(\n            \"开始基于 domain_name 的 URL 获取 - Target: %s, Tools: %s\",\n            target_name,\n            \", \".join(domain_name_tools.keys()) if domain_name_tools else \"无\",\n        )\n\n        futures: dict[str, object] = {}\n        failed_tools: list[dict] = []\n\n        # 提交所有基于域名的 URL 获取任务\n        for tool_name, tool_config in domain_name_tools.items():\n            timestamp = datetime.now().strftime(\"%Y%m%d_%H%M%S\")\n            short_uuid = uuid.uuid4().hex[:4]\n            output_file = str(output_path / f\"{tool_name}_{timestamp}_{short_uuid}.txt\")\n\n            command_params = {\n                \"domain_name\": target_name,\n                \"output_file\": output_file,\n            }\n\n            try:\n                command = build_scan_command(\n                    tool_name=tool_name,\n                    scan_type=\"url_fetch\",\n                    command_params=command_params,\n                    tool_config=tool_config,\n                )\n            except Exception as e:\n                logger.error(\"构建 %s 命令失败: %s\", tool_name, e)\n                failed_tools.append({\"tool\": tool_name, \"reason\": f\"命令构建失败: {e}\"})\n                continue\n\n            # 计算超时时间：domain_name 模式下，没有行数统计，auto 使用固定超时\n            raw_timeout = tool_config.get(\"timeout\", 3600)\n            timeout = 3600\n            if isinstance(raw_timeout, str) and raw_timeout == \"auto\":\n                timeout = 3600\n                logger.info(\n                    \"工具 %s 使用固定自动超时: %d 秒 (domain_name 模式)\",\n                    tool_name,\n                    timeout,\n                )\n            else:\n                try:\n                    timeout = int(raw_timeout)\n                except (TypeError, ValueError):\n                    logger.warning(\n                        \"工具 %s 的 timeout 配置无效(%s)，将使用默认 3600 秒\",\n                        tool_name,\n                        raw_timeout,\n                    )\n                    timeout = 3600\n\n            logger.info(\n                \"提交任务 - 工具: %s, domain_name: %s, 超时: %d秒\",\n                tool_name,\n                target_name,\n                timeout,\n            )\n\n            # 记录工具开始执行日志\n            user_log(scan_id, \"url_fetch\", f\"Running {tool_name}: {command}\")\n\n            future = run_url_fetcher_task.submit(\n                tool_name=tool_name,\n                command=command,\n                timeout=timeout,\n                output_file=output_file,\n            )\n            futures[tool_name] = future\n\n        result_files: list[str] = []\n        successful_tools: list[str] = []\n\n        # 收集执行结果\n        for tool_name, future in futures.items():\n            try:\n                result = future.result()\n                if result and result.get(\"success\"):\n                    result_files.append(result[\"output_file\"])\n                    successful_tools.append(tool_name)\n                    url_count = result.get(\"url_count\", 0)\n                    logger.info(\n                        \"✓ 工具 %s 执行成功 - 发现 URL: %d\",\n                        tool_name,\n                        url_count,\n                    )\n                    user_log(scan_id, \"url_fetch\", f\"{tool_name} completed: found {url_count} urls\")\n                else:\n                    reason = \"未生成结果或无有效 URL\"\n                    failed_tools.append(\n                        {\n                            \"tool\": tool_name,\n                            \"reason\": reason,\n                        }\n                    )\n                    logger.warning(\"⚠️ 工具 %s 未生成有效结果\", tool_name)\n                    user_log(scan_id, \"url_fetch\", f\"{tool_name} failed: {reason}\", \"error\")\n            except Exception as e:\n                reason = str(e)\n                failed_tools.append({\"tool\": tool_name, \"reason\": reason})\n                logger.warning(\"⚠️ 工具 %s 执行失败: %s\", tool_name, e)\n                user_log(scan_id, \"url_fetch\", f\"{tool_name} failed: {reason}\", \"error\")\n\n        logger.info(\n            \"基于 domain_name 的 URL 获取完成 - 成功工具: %s, 失败工具: %s\",\n            successful_tools or \"无\",\n            [f[\"tool\"] for f in failed_tools] or \"无\",\n        )\n\n        return {\n            \"success\": True,\n            \"result_files\": result_files,\n            \"failed_tools\": failed_tools,\n            \"successful_tools\": successful_tools,\n        }\n\n    except Exception as e:\n        logger.error(\"domain_name URL 获取失败: %s\", e, exc_info=True)\n        return {\n            \"success\": False,\n            \"result_files\": [],\n            \"failed_tools\": [\n                {\"tool\": \"domain_name_url_fetch_flow\", \"reason\": str(e)},\n            ],\n            \"successful_tools\": [],\n        }\n"
  },
  {
    "path": "backend/apps/scan/flows/url_fetch/main_flow.py",
    "content": "\"\"\"\nURL Fetch 主 Flow\n\n负责编排不同输入类型的 URL 获取子 Flow（domain_name / sites_file），以及统一的后处理（uro 去重、httpx 验证）\n\n架构：\n- 调用 domain_name_url_fetch_flow（domain_name 输入）和 sites_url_fetch_flow（sites_file 输入）\n- 合并多个子 Flow 的结果\n- 统一进行 uro 去重（如果启用）\n- 统一进行 httpx 验证（如果启用）\n\"\"\"\n\nimport logging\nfrom datetime import datetime\nfrom pathlib import Path\n\nfrom prefect import flow\n\nfrom apps.scan.handlers.scan_flow_handlers import (\n    on_scan_flow_completed,\n    on_scan_flow_failed,\n    on_scan_flow_running,\n)\nfrom apps.scan.utils import user_log, wait_for_system_load\n\nfrom .domain_name_url_fetch_flow import domain_name_url_fetch_flow\nfrom .sites_url_fetch_flow import sites_url_fetch_flow\nfrom .utils import calculate_timeout_by_line_count\n\nlogger = logging.getLogger(__name__)\n\n\n# ==================== 工具分类配置 ====================\n# 使用 target_name (domain_name) 作为输入的 URL 获取工具\nDOMAIN_NAME_TOOLS = {'waymore'}\n# 使用 sites_file 作为输入的 URL 获取工具\nSITES_FILE_TOOLS = {'katana'}\n# 后处理工具：不参与获取，用于清理和验证\nPOST_PROCESS_TOOLS = {'uro', 'httpx'}\n\n\ndef _classify_tools(enabled_tools: dict) -> tuple[dict, dict, dict, dict]:\n    \"\"\"\n    将启用的工具按输入类型分类\n\n    Returns:\n        tuple: (domain_name_tools, sites_file_tools, uro_config, httpx_config)\n    \"\"\"\n    domain_name_tools: dict = {}\n    sites_file_tools: dict = {}\n    uro_config = None\n    httpx_config = None\n\n    for tool_name, tool_config in enabled_tools.items():\n        if tool_name in DOMAIN_NAME_TOOLS:\n            domain_name_tools[tool_name] = tool_config\n        elif tool_name in SITES_FILE_TOOLS:\n            sites_file_tools[tool_name] = tool_config\n        elif tool_name == 'uro':\n            uro_config = tool_config\n        elif tool_name == 'httpx':\n            httpx_config = tool_config\n        else:\n            logger.warning(\"未知工具类型: %s，跳过\", tool_name)\n\n    return domain_name_tools, sites_file_tools, uro_config, httpx_config\n\n\ndef _merge_and_deduplicate_urls(result_files: list, url_fetch_dir: Path) -> tuple[str, int]:\n    \"\"\"合并并去重 URL\"\"\"\n    from apps.scan.tasks.url_fetch import merge_and_deduplicate_urls_task\n\n    merged_file = merge_and_deduplicate_urls_task(\n        result_files=result_files,\n        result_dir=str(url_fetch_dir)\n    )\n\n    # 统计唯一 URL 数量\n    unique_url_count = 0\n    if Path(merged_file).exists():\n        with open(merged_file, 'r', encoding='utf-8') as f:\n            unique_url_count = sum(1 for line in f if line.strip())\n\n    logger.info(\n        \"✓ URL 合并去重完成 - 合并文件: %s, 唯一 URL 数: %d\",\n        merged_file, unique_url_count\n    )\n\n    return merged_file, unique_url_count\n\n\ndef _clean_urls_with_uro(\n    merged_file: str,\n    uro_config: dict,\n    url_fetch_dir: Path\n) -> tuple[str, int, int]:\n    \"\"\"使用 uro 清理合并后的 URL 列表\"\"\"\n    from apps.scan.tasks.url_fetch import clean_urls_task\n\n    raw_timeout = uro_config.get('timeout', 60)\n    whitelist = uro_config.get('whitelist')\n    blacklist = uro_config.get('blacklist')\n    filters = uro_config.get('filters')\n\n    # 计算超时时间\n    if isinstance(raw_timeout, str) and raw_timeout == 'auto':\n        timeout = calculate_timeout_by_line_count(\n            tool_config=uro_config,\n            file_path=merged_file,\n            base_per_time=1,\n            min_timeout=60,\n        )\n        logger.info(\"uro 自动计算超时时间(按行数，每行 1 秒，最小 60 秒): %d 秒\", timeout)\n    else:\n        try:\n            timeout = int(raw_timeout)\n        except (TypeError, ValueError):\n            logger.warning(\"uro timeout 配置无效(%s)，使用默认 60 秒\", raw_timeout)\n            timeout = 60\n\n    result = clean_urls_task(\n        input_file=merged_file,\n        output_dir=str(url_fetch_dir),\n        timeout=timeout,\n        whitelist=whitelist,\n        blacklist=blacklist,\n        filters=filters\n    )\n\n    if result['success']:\n        return result['output_file'], result['output_count'], result['removed_count']\n\n    logger.warning(\"uro 清理失败: %s，使用原始合并文件\", result.get('error', '未知错误'))\n    return merged_file, result['input_count'], 0\n\n\ndef _validate_and_stream_save_urls(\n    merged_file: str,\n    httpx_config: dict,\n    url_fetch_dir: Path,\n    scan_id: int,\n    target_id: int\n) -> int:\n    \"\"\"使用 httpx 验证 URL 存活并流式保存到数据库\"\"\"\n    from apps.scan.utils import build_scan_command\n    from apps.scan.tasks.url_fetch import run_and_stream_save_urls_task\n\n    logger.info(\"开始使用 httpx 验证 URL 存活状态...\")\n\n    # 统计待验证的 URL 数量\n    try:\n        with open(merged_file, 'r', encoding='utf-8') as f:\n            url_count = sum(1 for _ in f)\n        logger.info(\"待验证 URL 数量: %d\", url_count)\n    except OSError as e:\n        logger.error(\"读取 URL 文件失败: %s\", e)\n        return 0\n\n    if url_count == 0:\n        logger.warning(\"没有需要验证的 URL\")\n        return 0\n\n    # 构建 httpx 命令\n    command_params = {'url_file': merged_file}\n\n    try:\n        command = build_scan_command(\n            tool_name='httpx',\n            scan_type='url_fetch',\n            command_params=command_params,\n            tool_config=httpx_config\n        )\n    except (ValueError, KeyError) as e:\n        logger.error(\"构建 httpx 命令失败: %s\", e)\n        logger.warning(\"降级处理：将直接保存所有 URL（不验证存活）\")\n        return _save_urls_to_database(merged_file, scan_id, target_id)\n\n    # 计算超时时间\n    raw_timeout = httpx_config.get('timeout', 'auto')\n    if isinstance(raw_timeout, str) and raw_timeout == 'auto':\n        # 按 URL 行数计算超时时间：每行 3 秒，最小 60 秒\n        timeout = max(60, url_count * 3)\n        logger.info(\n            \"自动计算 httpx 超时时间(按行数，每行 3 秒，最小 60 秒): url_count=%d, timeout=%d 秒\",\n            url_count, timeout\n        )\n    else:\n        try:\n            timeout = int(raw_timeout)\n        except (TypeError, ValueError):\n            timeout = 3600\n        logger.info(\"使用配置的 httpx 超时时间: %d 秒\", timeout)\n\n    # 生成日志文件路径\n    timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')\n    log_file = url_fetch_dir / f\"httpx_validation_{timestamp}.log\"\n\n    # 流式执行\n    result = run_and_stream_save_urls_task(\n        cmd=command,\n        tool_name='httpx',\n        scan_id=scan_id,\n        target_id=target_id,\n        cwd=str(url_fetch_dir),\n        shell=True,\n        timeout=timeout,\n        log_file=str(log_file)\n    )\n\n    saved = result.get('saved_urls', 0)\n    logger.info(\n        \"✓ httpx 验证完成 - 存活 URL: %d (%.1f%%)\",\n        saved, (saved / url_count * 100) if url_count > 0 else 0\n    )\n    return saved\n\n\ndef _save_urls_to_database(merged_file: str, scan_id: int, target_id: int) -> int:\n    \"\"\"保存 URL 到数据库（不验证存活）\"\"\"\n    from apps.scan.tasks.url_fetch import save_urls_task\n\n    result = save_urls_task(\n        urls_file=merged_file,\n        scan_id=scan_id,\n        target_id=target_id\n    )\n\n    saved_count = result.get('saved_urls', 0)\n    logger.info(\"✓ URL 保存完成 - 保存数量: %d\", saved_count)\n\n    return saved_count\n\n\n@flow(\n    name=\"url_fetch\",\n    log_prints=True,\n    on_running=[on_scan_flow_running],\n    on_completion=[on_scan_flow_completed],\n    on_failure=[on_scan_flow_failed],\n)\ndef url_fetch_flow(\n    scan_id: int,\n    target_name: str,\n    target_id: int,\n    scan_workspace_dir: str,\n    enabled_tools: dict\n) -> dict:\n    \"\"\"\n    URL 获取主 Flow\n\n    执行流程：\n    1. 准备工作目录\n    2. 按输入类型分类工具（domain_name / sites_file / 后处理）\n    3. 并行执行子 Flow\n       - domain_name_url_fetch_flow: 基于 domain_name（来自 target_name）执行 URL 获取（如 waymore）\n       - sites_url_fetch_flow: 基于 sites_file 执行爬虫（如 katana 等）\n    4. 合并所有子 Flow 的结果并去重\n    5. uro 去重（如果启用）\n    6. httpx 验证（如果启用）\n\n    Args:\n        scan_id: 扫描 ID\n        target_name: 目标名称\n        target_id: 目标 ID\n        scan_workspace_dir: 扫描工作目录\n        enabled_tools: 启用的工具配置\n\n    Returns:\n        dict: 扫描结果\n    \"\"\"\n    try:\n        # 负载检查：等待系统资源充足\n        wait_for_system_load(context=\"url_fetch_flow\")\n\n        logger.info(\n            \"开始 URL 获取扫描 - Scan ID: %s, Target: %s, Workspace: %s\",\n            scan_id, target_name, scan_workspace_dir\n        )\n        user_log(scan_id, \"url_fetch\", \"Starting URL fetch\")\n\n        # Step 1: 准备工作目录\n        from apps.scan.utils import setup_scan_directory\n        url_fetch_dir = setup_scan_directory(scan_workspace_dir, 'url_fetch')\n\n        # Step 2: 分类工具（按输入类型）\n        domain_name_tools, sites_file_tools, uro_config, httpx_config = _classify_tools(enabled_tools)\n\n        logger.info(\n            \"工具分类 - domain_name: %s, sites_file: %s, uro: %s, httpx: %s\",\n            list(domain_name_tools.keys()) or '无',\n            list(sites_file_tools.keys()) or '无',\n            '启用' if uro_config else '未启用',\n            '启用' if httpx_config else '未启用'\n        )\n\n        # 检查是否有获取工具\n        if not domain_name_tools and not sites_file_tools:\n            raise ValueError(\n                \"URL Fetch 流程需要至少启用一个 URL 获取工具（如 waymore, katana）。\"\n                \"httpx 和 uro 仅用于后处理，不能单独使用。\"\n            )\n\n        # Step 3: 执行子 Flow\n        all_result_files = []\n        all_failed_tools = []\n        all_successful_tools = []\n\n        # 3a: 基于 domain_name 的 URL 被动收集（如 waymore）\n        if domain_name_tools:\n            tn_result = domain_name_url_fetch_flow(\n                scan_id=scan_id,\n                target_id=target_id,\n                target_name=target_name,\n                output_dir=str(url_fetch_dir),\n                domain_name_tools=domain_name_tools,\n            )\n            all_result_files.extend(tn_result.get('result_files', []))\n            all_failed_tools.extend(tn_result.get('failed_tools', []))\n            all_successful_tools.extend(tn_result.get('successful_tools', []))\n\n        # 3b: 爬虫（以 sites_file 为输入）\n        if sites_file_tools:\n            crawl_result = sites_url_fetch_flow(\n                scan_id=scan_id,\n                target_id=target_id,\n                target_name=target_name,\n                output_dir=str(url_fetch_dir),\n                enabled_tools=sites_file_tools\n            )\n            all_result_files.extend(crawl_result.get('result_files', []))\n            all_failed_tools.extend(crawl_result.get('failed_tools', []))\n            all_successful_tools.extend(crawl_result.get('successful_tools', []))\n\n        # 检查是否有成功的工具\n        if not all_result_files:\n            error_details = \"; \".join([\n                \"%s: %s\" % (f['tool'], f['reason']) for f in all_failed_tools\n            ])\n            logger.warning(\"所有 URL 获取工具均失败 - 目标: %s, 失败详情: %s\", target_name, error_details)\n            return {\n                'success': True,\n                'scan_id': scan_id,\n                'target': target_name,\n                'unique_url_count': 0,\n                'valid_url_count': 0,\n                'failed_tools': all_failed_tools,\n                'successful_tools': [],\n                'message': '所有 URL 获取工具均无结果'\n            }\n\n        # Step 4: 合并并去重 URL\n        merged_file, _ = _merge_and_deduplicate_urls(\n            result_files=all_result_files,\n            url_fetch_dir=url_fetch_dir\n        )\n\n        # Step 5: 使用 uro 清理 URL（如果启用）\n        url_file_for_validation = merged_file\n        if uro_config and uro_config.get('enabled', False):\n            url_file_for_validation, _, _ = _clean_urls_with_uro(\n                merged_file=merged_file,\n                uro_config=uro_config,\n                url_fetch_dir=url_fetch_dir\n            )\n\n        # Step 6: 使用 httpx 验证存活并保存（如果启用）\n        if httpx_config and httpx_config.get('enabled', False):\n            saved_count = _validate_and_stream_save_urls(\n                merged_file=url_file_for_validation,\n                httpx_config=httpx_config,\n                url_fetch_dir=url_fetch_dir,\n                scan_id=scan_id,\n                target_id=target_id\n            )\n        else:\n            saved_count = _save_urls_to_database(\n                merged_file=url_file_for_validation,\n                scan_id=scan_id,\n                target_id=target_id\n            )\n\n        # 记录 Flow 完成\n        logger.info(\"✓ URL 获取完成 - 保存 endpoints: %d\", saved_count)\n        user_log(scan_id, \"url_fetch\", \"url_fetch completed: found %d endpoints\" % saved_count)\n\n        # 构建已执行的任务列表\n        executed_tasks = ['setup_directory', 'classify_tools']\n        if domain_name_tools:\n            executed_tasks.append('domain_name_url_fetch_flow')\n        if sites_file_tools:\n            executed_tasks.append('sites_url_fetch_flow')\n        executed_tasks.append('merge_and_deduplicate')\n        if uro_config and uro_config.get('enabled', False):\n            executed_tasks.append('uro_clean')\n        if httpx_config and httpx_config.get('enabled', False):\n            executed_tasks.append('httpx_validation_and_save')\n        else:\n            executed_tasks.append('save_urls')\n\n        return {\n            'success': True,\n            'scan_id': scan_id,\n            'target': target_name,\n            'scan_workspace_dir': scan_workspace_dir,\n            'total': saved_count,\n            'executed_tasks': executed_tasks,\n            'tool_stats': {\n                'total': len(domain_name_tools) + len(sites_file_tools),\n                'successful': len(all_successful_tools),\n                'failed': len(all_failed_tools),\n                'successful_tools': all_successful_tools,\n                'failed_tools': [f['tool'] for f in all_failed_tools]\n            }\n        }\n\n    except Exception as e:\n        logger.error(\"URL 获取扫描失败: %s\", e, exc_info=True)\n        raise\n"
  },
  {
    "path": "backend/apps/scan/flows/url_fetch/sites_url_fetch_flow.py",
    "content": "\"\"\"\nURL 爬虫 Flow\n\n主动爬取网站页面，提取 URL 和 JS 端点\n工具：katana, gospider, hakrawler 等\n输入：sites_file（站点 URL 列表）\n\"\"\"\n\n# Django 环境初始化\nfrom apps.common.prefect_django_setup import setup_django_for_prefect\n\nimport logging\nfrom pathlib import Path\n\nfrom prefect import flow\n\nfrom .utils import run_tools_parallel\n\nlogger = logging.getLogger(__name__)\n\n\ndef _export_sites_file(target_id: int, scan_id: int, target_name: str, output_dir: Path) -> tuple[str, int]:\n    \"\"\"\n    导出站点 URL 列表到文件\n    \n    懒加载模式：如果 WebSite 表为空，根据 Target 类型生成默认 URL\n    \n    Args:\n        target_id: 目标 ID\n        scan_id: 扫描 ID\n        target_name: 目标名称（用于懒加载）\n        output_dir: 输出目录\n        \n    Returns:\n        tuple: (file_path, count)\n    \"\"\"\n    from apps.scan.tasks.url_fetch import export_sites_task\n    \n    output_file = str(output_dir / \"sites.txt\")\n    result = export_sites_task(\n        output_file=output_file,\n        target_id=target_id,\n        scan_id=scan_id\n    )\n    \n    count = result['asset_count']\n    if count > 0:\n        logger.info(\"✓ 站点列表导出完成 - 数量: %d\", count)\n    else:\n        logger.warning(\"站点列表为空，爬虫可能无法正常工作\")\n    \n    return output_file, count\n\n\n@flow(name=\"sites_url_fetch_flow\", log_prints=True)\ndef sites_url_fetch_flow(\n    scan_id: int,\n    target_id: int,\n    target_name: str,\n    output_dir: str,\n    enabled_tools: dict\n) -> dict:\n    \"\"\"\n    URL 爬虫子 Flow\n    \n    执行流程：\n    1. 导出站点 URL 列表（sites_file）\n    2. 并行执行爬虫工具\n    3. 返回结果文件列表\n    \n    Args:\n        scan_id: 扫描 ID\n        target_id: 目标 ID\n        target_name: 目标名称\n        output_dir: 输出目录\n        enabled_tools: 启用的爬虫工具配置\n        \n    Returns:\n        dict: {\n            'success': bool,\n            'result_files': list,\n            'failed_tools': list,\n            'successful_tools': list,\n            'sites_count': int\n        }\n    \"\"\"\n    try:\n        output_path = Path(output_dir)\n        \n        logger.info(\n            \"开始 URL 爬虫 - Target: %s, Tools: %s\",\n            target_name, ', '.join(enabled_tools.keys())\n        )\n        \n        # Step 1: 导出站点 URL 列表\n        sites_file, sites_count = _export_sites_file(\n            target_id=target_id,\n            scan_id=scan_id,\n            target_name=target_name,\n            output_dir=output_path\n        )\n        \n        # 默认值模式下，即使原本没有站点，也会有默认 URL 作为输入\n        if sites_count == 0:\n            logger.warning(\"没有可用的站点，跳过爬虫\")\n            return {\n                'success': True,\n                'result_files': [],\n                'failed_tools': [],\n                'successful_tools': [],\n                'sites_count': 0\n            }\n        \n        # Step 2: 并行执行爬虫工具\n        result_files, failed_tools, successful_tools = run_tools_parallel(\n            tools=enabled_tools,\n            input_file=sites_file,\n            input_type=\"sites_file\",\n            output_dir=output_path,\n            scan_id=scan_id\n        )\n        \n        logger.info(\n            \"✓ 爬虫完成 - 成功: %d/%d, 结果文件: %d\",\n            len(successful_tools), len(enabled_tools), len(result_files)\n        )\n        \n        return {\n            'success': True,\n            'result_files': result_files,\n            'failed_tools': failed_tools,\n            'successful_tools': successful_tools,\n            'sites_count': sites_count\n        }\n        \n    except Exception as e:\n        logger.error(\"URL 爬虫失败: %s\", e, exc_info=True)\n        return {\n            'success': False,\n            'result_files': [],\n            'failed_tools': [{'tool': 'sites_url_fetch_flow', 'reason': str(e)}],\n            'successful_tools': [],\n            'sites_count': 0\n        }\n"
  },
  {
    "path": "backend/apps/scan/flows/url_fetch/utils.py",
    "content": "\"\"\"\nURL Fetch 共享工具函数\n\"\"\"\n\nimport logging\nimport subprocess\nimport uuid\nfrom datetime import datetime\nfrom pathlib import Path\n\nfrom apps.scan.utils import build_scan_command\n\nlogger = logging.getLogger(__name__)\n\n\ndef calculate_timeout_by_line_count(\n    tool_config: dict,\n    file_path: str,\n    base_per_time: int = 1,\n    min_timeout: int = 60,\n) -> int:\n    \"\"\"\n    根据文件行数自动计算超时时间\n    \n    Args:\n        tool_config: 工具配置（保留参数，未来可能用于更复杂的计算）\n        file_path: 输入文件路径\n        base_per_time: 每行的基础时间（秒）\n        min_timeout: 最小超时时间（秒），默认60秒\n        \n    Returns:\n        int: 计算出的超时时间（秒），不低于 min_timeout\n    \"\"\"\n    try:\n        result = subprocess.run(\n            ['wc', '-l', file_path],\n            capture_output=True,\n            text=True,\n            check=True,\n        )\n        line_count = int(result.stdout.strip().split()[0])\n        timeout = max(line_count * base_per_time, min_timeout)\n        logger.info(\n            \"timeout 自动计算: 文件=%s, 行数=%d, 每行时间=%d秒, 最小值=%d秒, timeout=%d秒\",\n            file_path,\n            line_count,\n            base_per_time,\n            min_timeout,\n            timeout,\n        )\n        return timeout\n    except Exception as e:\n        logger.warning(\"wc -l 计算行数失败: %s，将使用默认 timeout: %d秒\", e, min_timeout)\n        return min_timeout\n\n\ndef prepare_tool_execution(\n    tool_name: str,\n    tool_config: dict,\n    input_file: str,\n    input_type: str,\n    output_dir: Path,\n    scan_type: str = \"url_fetch\"\n) -> dict:\n    \"\"\"\n    准备单个工具的执行参数\n    \n    Args:\n        tool_name: 工具名称\n        tool_config: 工具配置\n        input_file: 输入文件路径\n        input_type: 输入类型（domains_file 或 sites_file）\n        output_dir: 输出目录\n        scan_type: 扫描类型\n        \n    Returns:\n        dict: 执行参数，包含 command, input_file, output_file, timeout\n              或包含 error 键表示失败\n    \"\"\"\n    # 1. 统计输入文件行数\n    try:\n        with open(input_file, 'r') as f:\n            input_count = sum(1 for _ in f)\n        logger.info(\"工具 %s - 输入类型: %s, 数量: %d\", tool_name, input_type, input_count)\n    except Exception as e:\n        return {\"error\": f\"读取输入文件失败: {e}\"}\n\n    # 2. 生成输出文件路径（带时间戳和短 UUID 后缀）\n    timestamp = datetime.now().strftime(\"%Y%m%d_%H%M%S\")\n    short_uuid = uuid.uuid4().hex[:4]\n    output_file = str(output_dir / f\"{tool_name}_{timestamp}_{short_uuid}.txt\")\n\n    # 3. 构建命令\n    command_params = {\n        input_type: input_file,\n        \"output_file\": output_file,\n    }\n\n    try:\n        command = build_scan_command(\n            tool_name=tool_name,\n            scan_type=scan_type,\n            command_params=command_params,\n            tool_config=tool_config,\n        )\n    except Exception as e:\n        logger.error(\"构建 %s 命令失败: %s\", tool_name, e)\n        return {\"error\": f\"命令构建失败: {e}\"}\n\n    # 4. 计算超时时间（支持 auto 和显式整数）\n    raw_timeout = tool_config.get(\"timeout\", 3600)\n    timeout = 3600\n    \n    if isinstance(raw_timeout, str) and raw_timeout == \"auto\":\n        try:\n            # katana / waymore 每个站点需要更长时间\n            base_per_time = 360 if tool_name in (\"katana\", \"waymore\") else 1\n            timeout = calculate_timeout_by_line_count(\n                tool_config=tool_config,\n                file_path=input_file,\n                base_per_time=base_per_time,\n            )\n        except Exception as e:\n            logger.warning(\n                \"工具 %s 自动计算 timeout 失败，将使用默认 3600 秒: %s\",\n                tool_name,\n                e,\n            )\n            timeout = 3600\n    else:\n        try:\n            timeout = int(raw_timeout)\n        except (TypeError, ValueError):\n            logger.warning(\n                \"工具 %s 的 timeout 配置无效(%s)，将使用默认 3600 秒\",\n                tool_name,\n                raw_timeout,\n            )\n            timeout = 3600\n\n    # 5. 返回执行参数\n    return {\n        \"command\": command,\n        \"input_file\": input_file,\n        \"input_type\": input_type,\n        \"output_file\": output_file,\n        \"timeout\": timeout,\n    }\n\n\ndef run_tools_parallel(\n    tools: dict,\n    input_file: str,\n    input_type: str,\n    output_dir: Path,\n    scan_id: int\n) -> tuple[list, list, list]:\n    \"\"\"\n    并行执行工具列表\n    \n    Args:\n        tools: 工具配置字典 {tool_name: tool_config}\n        input_file: 输入文件路径\n        input_type: 输入类型\n        output_dir: 输出目录\n        scan_id: 扫描任务 ID（用于记录日志）\n        \n    Returns:\n        tuple: (result_files, failed_tools, successful_tool_names)\n    \"\"\"\n    from apps.scan.tasks.url_fetch import run_url_fetcher_task\n    from apps.scan.utils import user_log\n\n    futures: dict[str, object] = {}\n    failed_tools: list[dict] = []\n\n    # 提交所有工具的并行任务\n    for tool_name, tool_config in tools.items():\n        exec_params = prepare_tool_execution(\n            tool_name=tool_name,\n            tool_config=tool_config,\n            input_file=input_file,\n            input_type=input_type,\n            output_dir=output_dir,\n        )\n\n        if \"error\" in exec_params:\n            failed_tools.append({\"tool\": tool_name, \"reason\": exec_params[\"error\"]})\n            continue\n\n        logger.info(\n            \"提交任务 - 工具: %s, 输入: %s, 超时: %d秒\",\n            tool_name,\n            input_type,\n            exec_params[\"timeout\"],\n        )\n\n        # 记录工具开始执行日志\n        user_log(scan_id, \"url_fetch\", f\"Running {tool_name}: {exec_params['command']}\")\n\n        # 提交并行任务\n        future = run_url_fetcher_task.submit(\n            tool_name=tool_name,\n            command=exec_params[\"command\"],\n            timeout=exec_params[\"timeout\"],\n            output_file=exec_params[\"output_file\"],\n        )\n        futures[tool_name] = future\n\n    # 收集执行结果\n    result_files = []\n    for tool_name, future in futures.items():\n        try:\n            result = future.result()\n            if result and result['success']:\n                result_files.append(result['output_file'])\n                url_count = result['url_count']\n                logger.info(\n                    \"✓ 工具 %s 执行成功 - 发现 URL: %d\",\n                    tool_name, url_count\n                )\n                user_log(scan_id, \"url_fetch\", f\"{tool_name} completed: found {url_count} urls\")\n            else:\n                reason = '未生成结果或无有效URL'\n                failed_tools.append({\n                    'tool': tool_name,\n                    'reason': reason\n                })\n                logger.warning(\"⚠️ 工具 %s 未生成有效结果\", tool_name)\n                user_log(scan_id, \"url_fetch\", f\"{tool_name} failed: {reason}\", \"error\")\n        except Exception as e:\n            reason = str(e)\n            failed_tools.append({\n                'tool': tool_name,\n                'reason': reason\n            })\n            logger.warning(\"⚠️ 工具 %s 执行失败: %s\", tool_name, e)\n            user_log(scan_id, \"url_fetch\", f\"{tool_name} failed: {reason}\", \"error\")\n\n    # 计算成功的工具列表\n    failed_tool_names = [f['tool'] for f in failed_tools]\n    successful_tool_names = [\n        name for name in tools.keys()\n        if name not in failed_tool_names\n    ]\n\n    return result_files, failed_tools, successful_tool_names\n"
  },
  {
    "path": "backend/apps/scan/flows/vuln_scan/__init__.py",
    "content": "\"\"\"vuln_scan Flow 模块\n\n包含漏洞扫描相关的 Flow：\n- vuln_scan_flow: 主 Flow（编排各类漏洞扫描子 Flow）\n- endpoints_vuln_scan_flow: 基于 endpoints_file 的漏洞扫描子 Flow（Dalfox 等）\n\"\"\"\n\nfrom .main_flow import vuln_scan_flow\nfrom .endpoints_vuln_scan_flow import endpoints_vuln_scan_flow\n\n__all__ = [\n    \"vuln_scan_flow\",\n    \"endpoints_vuln_scan_flow\",\n]\n"
  },
  {
    "path": "backend/apps/scan/flows/vuln_scan/endpoints_vuln_scan_flow.py",
    "content": "from apps.common.prefect_django_setup import setup_django_for_prefect\n\nimport logging\nfrom datetime import datetime\nfrom pathlib import Path\nfrom typing import Dict\n\nfrom prefect import flow\n\nfrom apps.scan.handlers.scan_flow_handlers import (\n    on_scan_flow_running,\n    on_scan_flow_completed,\n    on_scan_flow_failed,\n)\nfrom apps.scan.utils import build_scan_command, ensure_nuclei_templates_local, user_log\nfrom apps.scan.tasks.vuln_scan import (\n    export_endpoints_task,\n    run_vuln_tool_task,\n    run_and_stream_save_dalfox_vulns_task,\n    run_and_stream_save_nuclei_vulns_task,\n)\nfrom .utils import calculate_timeout_by_line_count\n\n\nlogger = logging.getLogger(__name__)\n\n\n\n\n\n@flow(\n    name=\"endpoints_vuln_scan_flow\",\n    log_prints=True,\n)\ndef endpoints_vuln_scan_flow(\n    scan_id: int,\n    target_name: str,\n    target_id: int,\n    scan_workspace_dir: str,\n    enabled_tools: Dict[str, dict],\n) -> dict:\n    \"\"\"基于 Endpoint 的漏洞扫描 Flow（串行执行 Dalfox 等工具）。\"\"\"\n    try:\n        if scan_id is None:\n            raise ValueError(\"scan_id 不能为空\")\n        if not target_name:\n            raise ValueError(\"target_name 不能为空\")\n        if target_id is None:\n            raise ValueError(\"target_id 不能为空\")\n        if not scan_workspace_dir:\n            raise ValueError(\"scan_workspace_dir 不能为空\")\n        if not enabled_tools:\n            raise ValueError(\"enabled_tools 不能为空\")\n\n        from apps.scan.utils import setup_scan_directory\n        vuln_scan_dir = setup_scan_directory(scan_workspace_dir, 'vuln_scan')\n        endpoints_file = vuln_scan_dir / \"input_endpoints.txt\"\n\n        # Step 1: 导出 Endpoint URL\n        export_result = export_endpoints_task(\n            target_id=target_id,\n            output_file=str(endpoints_file),\n        )\n        total_endpoints = export_result.get(\"total_count\", 0)\n\n        if total_endpoints == 0 or not endpoints_file.exists() or endpoints_file.stat().st_size == 0:\n            logger.warning(\"目标下没有可用 Endpoint，跳过漏洞扫描\")\n            return {\n                \"success\": True,\n                \"scan_id\": scan_id,\n                \"target\": target_name,\n                \"scan_workspace_dir\": scan_workspace_dir,\n                \"endpoints_file\": str(endpoints_file),\n                \"endpoint_count\": 0,\n                \"executed_tools\": [],\n                \"tool_results\": {},\n            }\n\n        logger.info(\"Endpoint 导出完成，共 %d 条，开始执行漏洞扫描\", total_endpoints)\n\n        tool_results: Dict[str, dict] = {}\n\n        # Step 2: 并行执行每个漏洞扫描工具（目前主要是 Dalfox）\n        # 1）先为每个工具 submit Prefect Task，让 Worker 并行调度\n        # 2）再统一收集各自的结果，组装成 tool_results\n        tool_futures: Dict[str, dict] = {}\n\n        for tool_name, tool_config in enabled_tools.items():\n            # Nuclei 需要先确保本地模板存在（支持多个模板仓库）\n            template_args = \"\"\n            if tool_name == \"nuclei\":\n                repo_names = tool_config.get(\"template_repo_names\")\n                if not repo_names or not isinstance(repo_names, (list, tuple)):\n                    logger.error(\"Nuclei 配置缺少 template_repo_names（数组），跳过\")\n                    continue\n                template_paths = []\n                try:\n                    for repo_name in repo_names:\n                        path = ensure_nuclei_templates_local(repo_name)\n                        template_paths.append(path)\n                        logger.info(\"Nuclei 模板路径 [%s]: %s\", repo_name, path)\n                except Exception as e:\n                    logger.error(\"获取 Nuclei 模板失败: %s，跳过 nuclei 扫描\", e)\n                    continue\n                template_args = \" \".join(f\"-t {p}\" for p in template_paths)\n\n            # 构建命令参数\n            command_params = {\"endpoints_file\": str(endpoints_file)}\n            if template_args:\n                command_params[\"template_args\"] = template_args\n\n            command = build_scan_command(\n                tool_name=tool_name,\n                scan_type=\"vuln_scan\",\n                command_params=command_params,\n                tool_config=tool_config,\n            )\n\n            raw_timeout = tool_config.get(\"timeout\", 600)\n\n            if isinstance(raw_timeout, str) and raw_timeout == \"auto\":\n                # timeout=auto 时，根据 endpoints_file 行数自动计算超时时间\n                # Dalfox: 每行 100 秒，Nuclei: 每行 30 秒\n                base_per_time = 30 if tool_name == \"nuclei\" else 100\n                timeout = calculate_timeout_by_line_count(\n                    tool_config=tool_config,\n                    file_path=str(endpoints_file),\n                    base_per_time=base_per_time,\n                )\n            else:\n                try:\n                    timeout = int(raw_timeout)\n                except (TypeError, ValueError) as e:\n                    raise ValueError(\n                        f\"工具 {tool_name} 的 timeout 配置无效: {raw_timeout!r}\"\n                    ) from e\n\n            timestamp = datetime.now().strftime(\"%Y%m%d_%H%M%S\")\n            log_file = vuln_scan_dir / f\"{tool_name}_{timestamp}.log\"\n\n            # Dalfox XSS 使用流式任务，一边解析一边保存漏洞结果\n            if tool_name == \"dalfox_xss\":\n                logger.info(\"开始执行漏洞扫描工具 %s（流式保存漏洞结果，已提交任务）\", tool_name)\n                user_log(scan_id, \"vuln_scan\", f\"Running {tool_name}: {command}\")\n                future = run_and_stream_save_dalfox_vulns_task.submit(\n                    cmd=command,\n                    tool_name=tool_name,\n                    scan_id=scan_id,\n                    target_id=target_id,\n                    cwd=str(vuln_scan_dir),\n                    shell=True,\n                    batch_size=1,\n                    timeout=timeout,\n                    log_file=str(log_file),\n                )\n\n                tool_futures[tool_name] = {\n                    \"future\": future,\n                    \"command\": command,\n                    \"timeout\": timeout,\n                    \"log_file\": str(log_file),\n                    \"mode\": \"streaming\",\n                }\n            elif tool_name == \"nuclei\":\n                # Nuclei 使用流式任务\n                logger.info(\"开始执行漏洞扫描工具 %s（流式保存漏洞结果，已提交任务）\", tool_name)\n                user_log(scan_id, \"vuln_scan\", f\"Running {tool_name}: {command}\")\n                future = run_and_stream_save_nuclei_vulns_task.submit(\n                    cmd=command,\n                    tool_name=tool_name,\n                    scan_id=scan_id,\n                    target_id=target_id,\n                    cwd=str(vuln_scan_dir),\n                    shell=True,\n                    batch_size=1,\n                    timeout=timeout,\n                    log_file=str(log_file),\n                )\n\n                tool_futures[tool_name] = {\n                    \"future\": future,\n                    \"command\": command,\n                    \"timeout\": timeout,\n                    \"log_file\": str(log_file),\n                    \"mode\": \"streaming\",\n                }\n            else:\n                # 其他工具仍使用非流式执行逻辑\n                logger.info(\"开始执行漏洞扫描工具 %s（已提交任务）\", tool_name)\n                user_log(scan_id, \"vuln_scan\", f\"Running {tool_name}: {command}\")\n                future = run_vuln_tool_task.submit(\n                    tool_name=tool_name,\n                    command=command,\n                    timeout=timeout,\n                    log_file=str(log_file),\n                )\n\n                tool_futures[tool_name] = {\n                    \"future\": future,\n                    \"command\": command,\n                    \"timeout\": timeout,\n                    \"log_file\": str(log_file),\n                    \"mode\": \"normal\",\n                }\n\n        # 统一收集所有工具的执行结果\n        for tool_name, meta in tool_futures.items():\n            future = meta[\"future\"]\n            try:\n                result = future.result()\n\n                if meta[\"mode\"] == \"streaming\":\n                    created_vulns = result.get(\"created_vulns\", 0)\n                    tool_results[tool_name] = {\n                        \"command\": meta[\"command\"],\n                        \"timeout\": meta[\"timeout\"],\n                        \"processed_records\": result.get(\"processed_records\"),\n                        \"created_vulns\": created_vulns,\n                        \"command_log_file\": meta[\"log_file\"],\n                    }\n                    logger.info(\"✓ 工具 %s 执行完成 - 漏洞: %d\", tool_name, created_vulns)\n                    user_log(scan_id, \"vuln_scan\", f\"{tool_name} completed: found {created_vulns} vulnerabilities\")\n                else:\n                    tool_results[tool_name] = {\n                        \"command\": meta[\"command\"],\n                        \"timeout\": meta[\"timeout\"],\n                        \"duration\": result.get(\"duration\"),\n                        \"returncode\": result.get(\"returncode\"),\n                        \"command_log_file\": result.get(\"command_log_file\"),\n                    }\n                    logger.info(\"✓ 工具 %s 执行完成 - returncode=%s\", tool_name, result.get(\"returncode\"))\n                    user_log(scan_id, \"vuln_scan\", f\"{tool_name} completed\")\n            except Exception as e:\n                reason = str(e)\n                logger.error(\"工具 %s 执行失败: %s\", tool_name, e, exc_info=True)\n                user_log(scan_id, \"vuln_scan\", f\"{tool_name} failed: {reason}\", \"error\")\n\n        return {\n            \"success\": True,\n            \"scan_id\": scan_id,\n            \"target\": target_name,\n            \"scan_workspace_dir\": scan_workspace_dir,\n            \"endpoints_file\": str(endpoints_file),\n            \"endpoint_count\": total_endpoints,\n            \"executed_tools\": list(enabled_tools.keys()),\n            \"tool_results\": tool_results,\n        }\n\n    except Exception as e:\n        logger.exception(\"Endpoint 漏洞扫描失败: %s\", e)\n        raise\n"
  },
  {
    "path": "backend/apps/scan/flows/vuln_scan/main_flow.py",
    "content": "\"\"\"\n漏洞扫描主 Flow\n\"\"\"\nimport logging\nfrom typing import Dict, Tuple\n\nfrom prefect import flow\n\nfrom apps.scan.handlers.scan_flow_handlers import (\n    on_scan_flow_running,\n    on_scan_flow_completed,\n    on_scan_flow_failed,\n)\nfrom apps.scan.configs.command_templates import get_command_template\nfrom apps.scan.utils import user_log, wait_for_system_load\nfrom .endpoints_vuln_scan_flow import endpoints_vuln_scan_flow\n\n\nlogger = logging.getLogger(__name__)\n\n\ndef _classify_vuln_tools(enabled_tools: Dict[str, dict]) -> Tuple[Dict[str, dict], Dict[str, dict]]:\n    \"\"\"根据命令模板中的 input_type 对漏洞扫描工具进行分类。\n\n    当前支持：\n    - endpoints_file: 以端点列表文件为输入（例如 Dalfox XSS）\n    预留：\n    - 其他 input_type 将被归类到 other_tools，暂不处理。\n    \"\"\"\n    endpoints_tools: Dict[str, dict] = {}\n    other_tools: Dict[str, dict] = {}\n\n    for tool_name, tool_config in enabled_tools.items():\n        template = get_command_template(\"vuln_scan\", tool_name) or {}\n        input_type = template.get(\"input_type\", \"endpoints_file\")\n\n        if input_type == \"endpoints_file\":\n            endpoints_tools[tool_name] = tool_config\n        else:\n            other_tools[tool_name] = tool_config\n\n    return endpoints_tools, other_tools\n\n\n@flow(\n    name=\"vuln_scan\",\n    log_prints=True,\n    on_running=[on_scan_flow_running],\n    on_completion=[on_scan_flow_completed],\n    on_failure=[on_scan_flow_failed],\n)\ndef vuln_scan_flow(\n    scan_id: int,\n    target_name: str,\n    target_id: int,\n    scan_workspace_dir: str,\n    enabled_tools: Dict[str, dict],\n) -> dict:\n    \"\"\"漏洞扫描主 Flow：串行编排各类漏洞扫描子 Flow。\n\n    支持工具：\n    - dalfox_xss: XSS 漏洞扫描（流式保存）\n    - nuclei: 通用漏洞扫描（流式保存，支持模板 commit hash 同步）\n    \"\"\"\n    try:\n        # 负载检查：等待系统资源充足\n        wait_for_system_load(context=\"vuln_scan_flow\")\n\n        if scan_id is None:\n            raise ValueError(\"scan_id 不能为空\")\n        if not target_name:\n            raise ValueError(\"target_name 不能为空\")\n        if target_id is None:\n            raise ValueError(\"target_id 不能为空\")\n        if not scan_workspace_dir:\n            raise ValueError(\"scan_workspace_dir 不能为空\")\n        if not enabled_tools:\n            raise ValueError(\"enabled_tools 不能为空\")\n\n        logger.info(\"开始漏洞扫描 - Scan ID: %s, Target: %s\", scan_id, target_name)\n        user_log(scan_id, \"vuln_scan\", \"Starting vulnerability scan\")\n\n        # Step 1: 分类工具\n        endpoints_tools, other_tools = _classify_vuln_tools(enabled_tools)\n\n        logger.info(\n            \"漏洞扫描工具分类 - endpoints_file: %s, 其他: %s\",\n            list(endpoints_tools.keys()) or \"无\",\n            list(other_tools.keys()) or \"无\",\n        )\n\n        if other_tools:\n            logger.warning(\n                \"存在暂不支持输入类型的漏洞扫描工具，将被忽略: %s\",\n                list(other_tools.keys()),\n            )\n\n        if not endpoints_tools:\n            raise ValueError(\"漏洞扫描需要至少启用一个以 endpoints_file 为输入的工具（如 dalfox_xss、nuclei）。\")\n\n        # Step 2: 执行 Endpoint 漏洞扫描子 Flow（串行）\n        endpoint_result = endpoints_vuln_scan_flow(\n            scan_id=scan_id,\n            target_name=target_name,\n            target_id=target_id,\n            scan_workspace_dir=scan_workspace_dir,\n            enabled_tools=endpoints_tools,\n        )\n\n        # 记录 Flow 完成\n        total_vulns = sum(\n            r.get(\"created_vulns\", 0) \n            for r in endpoint_result.get(\"tool_results\", {}).values()\n        )\n        logger.info(\"✓ 漏洞扫描完成 - 新增漏洞: %d\", total_vulns)\n        user_log(scan_id, \"vuln_scan\", f\"vuln_scan completed: found {total_vulns} vulnerabilities\")\n\n        # 目前只有一个子 Flow，直接返回其结果\n        return endpoint_result\n\n    except Exception as e:\n        logger.exception(\"漏洞扫描主 Flow 失败: %s\", e)\n        raise\n"
  },
  {
    "path": "backend/apps/scan/flows/vuln_scan/utils.py",
    "content": "\"\"\"\nVuln Scan 共享工具函数\n\"\"\"\n\nimport logging\nimport subprocess\n\nlogger = logging.getLogger(__name__)\n\n\ndef calculate_timeout_by_line_count(\n    tool_config: dict,\n    file_path: str,\n    base_per_time: int = 1,\n    min_timeout: int = 600,\n) -> int:\n    \"\"\"\n    根据文件行数自动计算超时时间\n\n    Args:\n        tool_config: 工具配置（保留参数，未来可能用于更复杂的计算）\n        file_path: 输入文件路径\n        base_per_time: 每行的基础时间（秒）\n        min_timeout: 最小超时时间（秒），默认600秒（10分钟）\n\n    Returns:\n        int: 计算出的超时时间（秒），不低于 min_timeout\n    \"\"\"\n    try:\n        result = subprocess.run(\n            [\"wc\", \"-l\", file_path],\n            capture_output=True,\n            text=True,\n            check=True,\n        )\n        line_count = int(result.stdout.strip().split()[0])\n        timeout = max(line_count * base_per_time, min_timeout)\n        logger.info(\n            \"timeout 自动计算: 文件=%s, 行数=%d, 每行时间=%d秒, 最小值=%d秒, timeout=%d秒\",\n            file_path,\n            line_count,\n            base_per_time,\n            min_timeout,\n            timeout,\n        )\n        return timeout\n    except Exception as e:\n        logger.warning(\"wc -l 计算行数失败: %s，使用最小超时: %d秒\", e, min_timeout)\n        return min_timeout\n"
  },
  {
    "path": "backend/apps/scan/handlers/__init__.py",
    "content": "\"\"\"Prefect Flow 状态处理器\n\n当前架构使用 Docker + SSH 执行任务，不使用 Prefect Server。\ndocker stop 会触发 on_failure 处理器。\n\"\"\"\n\nfrom .initiate_scan_flow_handlers import (\n    on_initiate_scan_flow_running,\n    on_initiate_scan_flow_completed,\n    on_initiate_scan_flow_failed,\n)\n\nfrom .scan_flow_handlers import (\n    on_scan_flow_running,\n    on_scan_flow_completed,\n    on_scan_flow_failed,\n)\n\n__all__ = [\n    # 初始化扫描流程处理器\n    'on_initiate_scan_flow_running',\n    'on_initiate_scan_flow_completed',\n    'on_initiate_scan_flow_failed',\n    # 通用扫描流程处理器\n    'on_scan_flow_running',\n    'on_scan_flow_completed',\n    'on_scan_flow_failed',\n]\n"
  },
  {
    "path": "backend/apps/scan/handlers/initiate_scan_flow_handlers.py",
    "content": "\"\"\"\ninitiate_scan_flow 状态处理器\n\n负责 initiate_scan_flow 生命周期的状态同步：\n- on_running: Flow 开始运行时更新扫描状态为 RUNNING\n- on_completion: Flow 成功完成时更新扫描状态为 COMPLETED\n- on_failure: Flow 失败时更新扫描状态为 FAILED（包括超时、异常、docker stop 等）\n\n策略：快速失败（Fail-Fast）\n- 任何子任务失败都会导致 Flow 失败\n- Flow 成功 = 所有任务成功\n\"\"\"\n\nimport logging\nfrom prefect import Flow\nfrom prefect.client.schemas import FlowRun, State\n\nlogger = logging.getLogger(__name__)\n\n\n\ndef on_initiate_scan_flow_running(flow: Flow, flow_run: FlowRun, state: State) -> None:\n    \"\"\"\n    initiate_scan_flow 开始运行时的回调\n    \n    职责：更新 Scan 状态为 RUNNING + 发送通知\n    \n    触发时机：\n    - Prefect Flow 状态变为 Running 时自动触发\n    - 在 Flow 函数体执行之前调用\n    \n    Args:\n        flow: Prefect Flow 对象\n        flow_run: Flow 运行实例\n        state: Flow 当前状态\n    \"\"\"\n    logger.info(\"🚀 initiate_scan_flow_running 回调开始运行 - Flow Run: %s\", flow_run.id)\n    \n    scan_id = flow_run.parameters.get('scan_id')\n    target_name = flow_run.parameters.get('target_name')\n    engine_name = flow_run.parameters.get('engine_name')\n    scheduled_scan_name = flow_run.parameters.get('scheduled_scan_name')\n    \n    if not scan_id:\n        logger.warning(\n            \"Flow 参数中缺少 scan_id，跳过状态更新 - Flow Run: %s\",\n            flow_run.id\n        )\n        return\n    \n    def _update_running_status():\n        from apps.scan.services import ScanService\n        from apps.common.definitions import ScanStatus\n        \n        service = ScanService()\n        success = service.update_status(\n            scan_id, \n            ScanStatus.RUNNING\n        )\n        \n        if success:\n            logger.info(\n                \"✓ Flow 状态回调：扫描状态已更新为 RUNNING - Scan ID: %s, Flow Run: %s\",\n                scan_id,\n                flow_run.id\n            )\n        else:\n            logger.error(\n                \"✗ Flow 状态回调：更新扫描状态失败 - Scan ID: %s\",\n                scan_id\n            )\n        return success\n    \n    # 执行状态更新（Repository 层已有 @auto_ensure_db_connection 保证连接可靠性）\n    _update_running_status()\n    \n    # 发送通知\n    logger.info(\"准备发送扫描开始通知 - Scan ID: %s, Target: %s\", scan_id, target_name)\n    try:\n        from apps.scan.notifications import create_notification, NotificationLevel, NotificationCategory\n        \n        # 根据是否为定时扫描构建不同的标题和消息\n        if scheduled_scan_name:\n            title = f\"⏰ {target_name} 扫描开始\"\n            message = f\"定时任务：{scheduled_scan_name}\\n引擎：{engine_name}\"\n        else:\n            title = f\"{target_name} 扫描开始\"\n            message = f\"引擎：{engine_name}\"\n        \n        create_notification(\n            title=title,\n            message=message,\n            level=NotificationLevel.MEDIUM,\n            category=NotificationCategory.SCAN\n        )\n        logger.info(\"✓ 扫描开始通知已发送 - Scan ID: %s, Target: %s\", scan_id, target_name)\n    except Exception as e:\n        logger.error(f\"发送扫描开始通知失败 - Scan ID: {scan_id}: {e}\", exc_info=True)\n\n\ndef on_initiate_scan_flow_completed(flow: Flow, flow_run: FlowRun, state: State) -> None:\n    \"\"\"\n    initiate_scan_flow 成功完成时的回调\n    \n    职责：更新 Scan 状态为 COMPLETED\n    \n    触发时机：\n    - Prefect Flow 正常执行完成时自动触发\n    - 在 Flow 函数体返回之后调用\n    \n    策略：快速失败（Fail-Fast）\n    - Flow 成功完成 = 所有任务成功 → COMPLETED\n    - Flow 执行失败 = 有任务失败 → FAILED (由 on_failed 处理)\n    \n    竞态条件处理：\n    - 如果用户已手动取消（状态已是 CANCELLED），保持终态，不覆盖\n    \n    Args:\n        flow: Prefect Flow 对象\n        flow_run: Flow 运行实例\n        state: Flow 当前状态\n    \"\"\"\n    logger.info(\"✅ initiate_scan_flow_completed 回调开始运行 - Flow Run: %s\", flow_run.id)\n    \n    scan_id = flow_run.parameters.get('scan_id')\n    target_name = flow_run.parameters.get('target_name')\n    engine_name = flow_run.parameters.get('engine_name')\n    \n    if not scan_id:\n        return\n    \n    def _update_completed_status():\n        from apps.scan.services import ScanService\n        from apps.common.definitions import ScanStatus\n        from django.utils import timezone\n        \n        service = ScanService()\n        \n        # 仅在运行中时更新为 COMPLETED；其他状态保持不变\n        completed_updated = service.update_status_if_match(\n            scan_id=scan_id,\n            current_status=ScanStatus.RUNNING,\n            new_status=ScanStatus.COMPLETED,\n            stopped_at=timezone.now()\n        )\n        \n        if completed_updated:\n            logger.info(\n                \"✓ Flow 状态回调：扫描状态已原子更新为 COMPLETED - Scan ID: %s, Flow Run: %s\",\n                scan_id,\n                flow_run.id\n            )\n            return service.update_cached_stats(scan_id)\n        else:\n            logger.info(\n                \"ℹ️ Flow 状态回调：状态未更新（可能已是终态）- Scan ID: %s, Flow Run: %s\",\n                scan_id,\n                flow_run.id\n            )\n        return None\n    \n    # 执行状态更新并获取统计数据\n    stats = _update_completed_status()\n    \n    # 注意：物化视图刷新已迁移到 pg_ivm 增量维护，无需手动标记刷新\n    \n    # 发送通知（包含统计摘要）\n    logger.info(\"准备发送扫描完成通知 - Scan ID: %s, Target: %s\", scan_id, target_name)\n    try:\n        from apps.scan.notifications import create_notification, NotificationLevel, NotificationCategory\n        \n        # 构建通知消息\n        message = f\"引擎：{engine_name}\"\n        if stats:\n            results = []\n            results.append(f\"子域名: {stats.get('subdomains', 0)}\")\n            results.append(f\"站点: {stats.get('websites', 0)}\")\n            results.append(f\"IP: {stats.get('ips', 0)}\")\n            results.append(f\"端点: {stats.get('endpoints', 0)}\")\n            results.append(f\"目录: {stats.get('directories', 0)}\")\n            vulns_total = stats.get('vulns_total', 0)\n            if vulns_total > 0:\n                results.append(f\"漏洞: {vulns_total} (严重:{stats.get('vulns_critical', 0)} 高:{stats.get('vulns_high', 0)} 中:{stats.get('vulns_medium', 0)} 低:{stats.get('vulns_low', 0)})\")\n            else:\n                results.append(\"漏洞: 0\")\n            message += f\"\\n结果：{' | '.join(results)}\"\n        \n        create_notification(\n            title=f\"{target_name} 扫描完成\",\n            message=message,\n            level=NotificationLevel.MEDIUM,\n            category=NotificationCategory.SCAN\n        )\n        logger.info(\"✓ 扫描完成通知已发送 - Scan ID: %s, Target: %s\", scan_id, target_name)\n    except Exception as e:\n        logger.error(f\"发送扫描完成通知失败 - Scan ID: {scan_id}: {e}\", exc_info=True)\n\n\ndef on_initiate_scan_flow_failed(flow: Flow, flow_run: FlowRun, state: State) -> None:\n    \"\"\"\n    initiate_scan_flow 失败时的回调\n    \n    职责：更新 Scan 状态为 FAILED，并记录错误信息\n    \n    触发时机：\n    - Prefect Flow 执行失败或抛出异常时自动触发\n    - Flow 超时、任务失败等所有失败场景都会触发此回调\n    \n    竞态条件处理：\n    - 如果用户已手动取消（状态已是 CANCELLED），保持终态，不覆盖\n    \n    Args:\n        flow: Prefect Flow 对象\n        flow_run: Flow 运行实例\n        state: Flow 当前状态（包含错误信息）\n    \"\"\"\n    logger.info(\"❌ initiate_scan_flow_failed 回调开始运行 - Flow Run: %s\", flow_run.id)\n    \n    scan_id = flow_run.parameters.get('scan_id')\n    target_name = flow_run.parameters.get('target_name')\n    engine_name = flow_run.parameters.get('engine_name')\n    \n    if not scan_id:\n        return\n    \n    def _update_failed_status():\n        from apps.scan.services import ScanService\n        from apps.common.definitions import ScanStatus\n        from django.utils import timezone\n        \n        service = ScanService()\n        \n        # 提取错误信息\n        error_message = str(state.message) if state.message else \"Flow 执行失败\"\n        \n        # 仅在运行中时更新为 FAILED；其他状态保持不变\n        failed_updated = service.update_status_if_match(\n            scan_id=scan_id,\n            current_status=ScanStatus.RUNNING,\n            new_status=ScanStatus.FAILED,\n            stopped_at=timezone.now()\n        )\n        \n        if failed_updated:\n            # 成功更新（正常失败流程）\n            logger.error(\n                \"✗ Flow 状态回调：扫描状态已原子更新为 FAILED - Scan ID: %s, Flow Run: %s, 错误: %s\",\n                scan_id,\n                flow_run.id,\n                error_message\n            )\n            # 更新缓存统计数据（终态）\n            service.update_cached_stats(scan_id)\n        else:\n            logger.warning(\n                \"⚠️ Flow 状态回调：未更新任何记录（可能已被其他进程处理）- Scan ID: %s, Flow Run: %s\",\n                scan_id,\n                flow_run.id\n            )\n        return True\n    \n    # 执行状态更新\n    _update_failed_status()\n    \n    # 发送通知\n    logger.info(\"准备发送扫描失败通知 - Scan ID: %s, Target: %s\", scan_id, target_name)\n    try:\n        from apps.scan.notifications import create_notification, NotificationLevel, NotificationCategory\n        error_message = str(state.message) if state.message else \"未知错误\"\n        message = f\"引擎：{engine_name}\\n错误：{error_message}\"\n        create_notification(\n            title=f\"{target_name} 扫描失败\",\n            message=message,\n            level=NotificationLevel.HIGH,\n            category=NotificationCategory.SCAN\n        )\n        logger.info(\"✓ 扫描失败通知已发送 - Scan ID: %s, Target: %s\", scan_id, target_name)\n    except Exception as e:\n        logger.error(f\"发送扫描失败通知失败 - Scan ID: {scan_id}: {e}\", exc_info=True)\n"
  },
  {
    "path": "backend/apps/scan/handlers/scan_flow_handlers.py",
    "content": "\"\"\"\n扫描流程处理器\n\n负责处理扫描流程（端口扫描、子域名发现等）的状态变化和通知\n\n职责：\n- 更新各阶段的进度状态（running/completed/failed）\n- 发送扫描阶段的通知\n- 记录 Flow 性能指标\n\"\"\"\n\nimport logging\nfrom prefect import Flow\nfrom prefect.client.schemas import FlowRun, State\n\nfrom apps.scan.utils.performance import FlowPerformanceTracker\nfrom apps.scan.utils import user_log\n\nlogger = logging.getLogger(__name__)\n\n# 存储每个 flow_run 的性能追踪器\n_flow_trackers: dict[str, FlowPerformanceTracker] = {}\n\n\ndef _get_stage_from_flow_name(flow_name: str) -> str | None:\n    \"\"\"\n    从 Flow name 获取对应的 stage\n    \n    Flow name 直接作为 stage（与 engine_config 的 key 一致）\n    排除主 Flow（initiate_scan）\n    \"\"\"\n    # 排除主 Flow，它不是阶段 Flow\n    if flow_name == 'initiate_scan':\n        return None\n    return flow_name\n\n\ndef on_scan_flow_running(flow: Flow, flow_run: FlowRun, state: State) -> None:\n    \"\"\"\n    扫描流程开始运行时的回调\n    \n    职责：\n    - 更新阶段进度为 running\n    - 发送扫描开始通知\n    - 启动性能追踪\n    \n    Args:\n        flow: Prefect Flow 对象\n        flow_run: Flow 运行实例\n        state: Flow 当前状态\n    \"\"\"\n    logger.info(\"🚀 扫描流程开始运行 - Flow: %s, Run ID: %s\", flow.name, flow_run.id)\n    \n    # 提取流程参数\n    flow_params = flow_run.parameters or {}\n    scan_id = flow_params.get('scan_id')\n    target_name = flow_params.get('target_name', 'unknown')\n    target_id = flow_params.get('target_id')\n    \n    # 启动性能追踪\n    if scan_id:\n        tracker = FlowPerformanceTracker(flow.name, scan_id)\n        tracker.start(target_id=target_id, target_name=target_name)\n        _flow_trackers[str(flow_run.id)] = tracker\n    \n    # 更新阶段进度\n    stage = _get_stage_from_flow_name(flow.name)\n    if scan_id and stage:\n        try:\n            from apps.scan.services import ScanService\n            service = ScanService()\n            service.start_stage(scan_id, stage)\n            logger.info(f\"✓ 阶段进度已更新为 running - Scan ID: {scan_id}, Stage: {stage}\")\n        except Exception as e:\n            logger.error(f\"更新阶段进度失败 - Scan ID: {scan_id}, Stage: {stage}: {e}\")\n\n\ndef on_scan_flow_completed(flow: Flow, flow_run: FlowRun, state: State) -> None:\n    \"\"\"\n    扫描流程完成时的回调\n    \n    职责：\n    - 更新阶段进度为 completed\n    - 发送扫描完成通知（可选）\n    - 记录性能指标\n    \n    Args:\n        flow: Prefect Flow 对象\n        flow_run: Flow 运行实例\n        state: Flow 当前状态\n    \"\"\"\n    logger.info(\"✅ 扫描流程完成 - Flow: %s, Run ID: %s\", flow.name, flow_run.id)\n    \n    # 提取流程参数\n    flow_params = flow_run.parameters or {}\n    scan_id = flow_params.get('scan_id')\n    \n    # 获取 flow result\n    result = None\n    try:\n        result = state.result() if state.result else None\n    except Exception:\n        pass\n    \n    # 记录性能指标\n    tracker = _flow_trackers.pop(str(flow_run.id), None)\n    if tracker:\n        tracker.finish(success=True)\n    \n    # 更新阶段进度\n    stage = _get_stage_from_flow_name(flow.name)\n    if scan_id and stage:\n        try:\n            from apps.scan.services import ScanService\n            service = ScanService()\n            # 从 flow result 中提取 detail（如果有）\n            detail = None\n            if isinstance(result, dict):\n                detail = result.get('detail')\n            service.complete_stage(scan_id, stage, detail)\n            logger.info(f\"✓ 阶段进度已更新为 completed - Scan ID: {scan_id}, Stage: {stage}\")\n            # 每个阶段完成后刷新缓存统计，便于前端实时看到增量\n            try:\n                service.update_cached_stats(scan_id)\n                logger.info(\"✓ 阶段完成后已刷新缓存统计 - Scan ID: %s\", scan_id)\n            except Exception as e:\n                logger.error(\"阶段完成后刷新缓存统计失败 - Scan ID: %s, 错误: %s\", scan_id, e)\n        except Exception as e:\n            logger.error(f\"更新阶段进度失败 - Scan ID: {scan_id}, Stage: {stage}: {e}\")\n\n\ndef on_scan_flow_failed(flow: Flow, flow_run: FlowRun, state: State) -> None:\n    \"\"\"\n    扫描流程失败时的回调\n    \n    职责：\n    - 更新阶段进度为 failed\n    - 发送扫描失败通知\n    - 记录性能指标（含错误信息）\n    - 写入 ScanLog 供前端显示\n    \n    Args:\n        flow: Prefect Flow 对象\n        flow_run: Flow 运行实例\n        state: Flow 当前状态\n    \"\"\"\n    logger.info(\"❌ 扫描流程失败 - Flow: %s, Run ID: %s\", flow.name, flow_run.id)\n    \n    # 提取流程参数\n    flow_params = flow_run.parameters or {}\n    scan_id = flow_params.get('scan_id')\n    target_name = flow_params.get('target_name', 'unknown')\n    \n    # 提取错误信息\n    error_message = str(state.message) if state.message else \"未知错误\"\n    \n    # 写入 ScanLog 供前端显示\n    stage = _get_stage_from_flow_name(flow.name)\n    if scan_id and stage:\n        user_log(scan_id, stage, f\"Failed: {error_message}\", \"error\")\n    \n    # 记录性能指标（失败情况）\n    tracker = _flow_trackers.pop(str(flow_run.id), None)\n    if tracker:\n        tracker.finish(success=False, error_message=error_message)\n    \n    # 更新阶段进度\n    stage = _get_stage_from_flow_name(flow.name)\n    if scan_id and stage:\n        try:\n            from apps.scan.services import ScanService\n            service = ScanService()\n            service.fail_stage(scan_id, stage, error_message)\n            logger.info(f\"✓ 阶段进度已更新为 failed - Scan ID: {scan_id}, Stage: {stage}\")\n        except Exception as e:\n            logger.error(f\"更新阶段进度失败 - Scan ID: {scan_id}, Stage: {stage}: {e}\")\n    \n    # 发送通知\n    try:\n        from apps.scan.notifications import create_notification, NotificationLevel\n        message = f\"任务：{flow.name}\\n状态：执行失败\\n错误：{error_message}\"\n        create_notification(\n            title=target_name,\n            message=message,\n            level=NotificationLevel.HIGH\n        )\n        logger.error(f\"✓ 扫描失败通知已发送 - Target: {target_name}, Flow: {flow.name}, Error: {error_message}\")\n    except Exception as e:\n        logger.error(f\"发送扫描失败通知失败 - Flow: {flow.name}: {e}\")\n"
  },
  {
    "path": "backend/apps/scan/management/__init__.py",
    "content": ""
  },
  {
    "path": "backend/apps/scan/migrations/0001_initial.py",
    "content": "# Generated by Django 5.2.7 on 2026-01-06 00:55\n\nimport django.contrib.postgres.fields\nimport django.db.models.deletion\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    initial = True\n\n    dependencies = [\n        ('engine', '0001_initial'),\n        ('targets', '0001_initial'),\n    ]\n\n    operations = [\n        migrations.CreateModel(\n            name='NotificationSettings',\n            fields=[\n                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('discord_enabled', models.BooleanField(default=False, help_text='是否启用 Discord 通知')),\n                ('discord_webhook_url', models.URLField(blank=True, default='', help_text='Discord Webhook URL')),\n                ('categories', models.JSONField(default=dict, help_text='各分类通知开关，如 {\"scan\": true, \"vulnerability\": true, \"asset\": true, \"system\": false}')),\n                ('created_at', models.DateTimeField(auto_now_add=True)),\n                ('updated_at', models.DateTimeField(auto_now=True)),\n            ],\n            options={\n                'verbose_name': '通知设置',\n                'verbose_name_plural': '通知设置',\n                'db_table': 'notification_settings',\n            },\n        ),\n        migrations.CreateModel(\n            name='SubfinderProviderSettings',\n            fields=[\n                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('providers', models.JSONField(default=dict, help_text='各 Provider 的 API Key 配置')),\n                ('created_at', models.DateTimeField(auto_now_add=True)),\n                ('updated_at', models.DateTimeField(auto_now=True)),\n            ],\n            options={\n                'verbose_name': 'Subfinder Provider 配置',\n                'verbose_name_plural': 'Subfinder Provider 配置',\n                'db_table': 'subfinder_provider_settings',\n            },\n        ),\n        migrations.CreateModel(\n            name='Notification',\n            fields=[\n                ('id', models.AutoField(primary_key=True, serialize=False)),\n                ('category', models.CharField(choices=[('scan', '扫描任务'), ('vulnerability', '漏洞发现'), ('asset', '资产发现'), ('system', '系统消息')], db_index=True, default='system', help_text='通知分类', max_length=20)),\n                ('level', models.CharField(choices=[('low', '低'), ('medium', '中'), ('high', '高'), ('critical', '严重')], db_index=True, default='low', help_text='通知级别', max_length=20)),\n                ('title', models.CharField(help_text='通知标题', max_length=200)),\n                ('message', models.CharField(help_text='通知内容', max_length=2000)),\n                ('created_at', models.DateTimeField(auto_now_add=True, help_text='创建时间')),\n                ('is_read', models.BooleanField(default=False, help_text='是否已读')),\n                ('read_at', models.DateTimeField(blank=True, help_text='阅读时间', null=True)),\n            ],\n            options={\n                'verbose_name': '通知',\n                'verbose_name_plural': '通知',\n                'db_table': 'notification',\n                'ordering': ['-created_at'],\n                'indexes': [models.Index(fields=['-created_at'], name='notificatio_created_c430f0_idx'), models.Index(fields=['category', '-created_at'], name='notificatio_categor_df0584_idx'), models.Index(fields=['level', '-created_at'], name='notificatio_level_0e5d12_idx'), models.Index(fields=['is_read', '-created_at'], name='notificatio_is_read_518ce0_idx')],\n            },\n        ),\n        migrations.CreateModel(\n            name='Scan',\n            fields=[\n                ('id', models.AutoField(primary_key=True, serialize=False)),\n                ('engine_ids', django.contrib.postgres.fields.ArrayField(base_field=models.IntegerField(), default=list, help_text='引擎 ID 列表', size=None)),\n                ('engine_names', models.JSONField(default=list, help_text='引擎名称列表，如 [\"引擎A\", \"引擎B\"]')),\n                ('yaml_configuration', models.TextField(default='', help_text='YAML 格式的扫描配置')),\n                ('created_at', models.DateTimeField(auto_now_add=True, help_text='任务创建时间')),\n                ('stopped_at', models.DateTimeField(blank=True, help_text='扫描结束时间', null=True)),\n                ('status', models.CharField(choices=[('cancelled', '已取消'), ('completed', '已完成'), ('failed', '失败'), ('initiated', '初始化'), ('running', '运行中')], db_index=True, default='initiated', help_text='任务状态', max_length=20)),\n                ('results_dir', models.CharField(blank=True, default='', help_text='结果存储目录', max_length=100)),\n                ('container_ids', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), blank=True, default=list, help_text='容器 ID 列表（Docker Container ID）', size=None)),\n                ('error_message', models.CharField(blank=True, default='', help_text='错误信息', max_length=2000)),\n                ('deleted_at', models.DateTimeField(blank=True, db_index=True, help_text='删除时间（NULL表示未删除）', null=True)),\n                ('progress', models.IntegerField(default=0, help_text='扫描进度 0-100')),\n                ('current_stage', models.CharField(blank=True, default='', help_text='当前扫描阶段', max_length=50)),\n                ('stage_progress', models.JSONField(default=dict, help_text='各阶段进度详情')),\n                ('cached_subdomains_count', models.IntegerField(default=0, help_text='缓存的子域名数量')),\n                ('cached_websites_count', models.IntegerField(default=0, help_text='缓存的网站数量')),\n                ('cached_endpoints_count', models.IntegerField(default=0, help_text='缓存的端点数量')),\n                ('cached_ips_count', models.IntegerField(default=0, help_text='缓存的IP地址数量')),\n                ('cached_directories_count', models.IntegerField(default=0, help_text='缓存的目录数量')),\n                ('cached_vulns_total', models.IntegerField(default=0, help_text='缓存的漏洞总数')),\n                ('cached_vulns_critical', models.IntegerField(default=0, help_text='缓存的严重漏洞数量')),\n                ('cached_vulns_high', models.IntegerField(default=0, help_text='缓存的高危漏洞数量')),\n                ('cached_vulns_medium', models.IntegerField(default=0, help_text='缓存的中危漏洞数量')),\n                ('cached_vulns_low', models.IntegerField(default=0, help_text='缓存的低危漏洞数量')),\n                ('stats_updated_at', models.DateTimeField(blank=True, help_text='统计数据最后更新时间', null=True)),\n                ('target', models.ForeignKey(help_text='扫描目标', on_delete=django.db.models.deletion.CASCADE, related_name='scans', to='targets.target')),\n                ('worker', models.ForeignKey(blank=True, help_text='执行扫描的 Worker 节点', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='scans', to='engine.workernode')),\n            ],\n            options={\n                'verbose_name': '扫描任务',\n                'verbose_name_plural': '扫描任务',\n                'db_table': 'scan',\n                'ordering': ['-created_at'],\n            },\n        ),\n        migrations.CreateModel(\n            name='ScanLog',\n            fields=[\n                ('id', models.BigAutoField(primary_key=True, serialize=False)),\n                ('level', models.CharField(choices=[('info', 'Info'), ('warning', 'Warning'), ('error', 'Error')], default='info', help_text='日志级别', max_length=10)),\n                ('content', models.TextField(help_text='日志内容')),\n                ('created_at', models.DateTimeField(auto_now_add=True, db_index=True, help_text='创建时间')),\n                ('scan', models.ForeignKey(help_text='关联的扫描任务', on_delete=django.db.models.deletion.CASCADE, related_name='logs', to='scan.scan')),\n            ],\n            options={\n                'verbose_name': '扫描日志',\n                'verbose_name_plural': '扫描日志',\n                'db_table': 'scan_log',\n                'ordering': ['created_at'],\n            },\n        ),\n        migrations.CreateModel(\n            name='ScheduledScan',\n            fields=[\n                ('id', models.AutoField(primary_key=True, serialize=False)),\n                ('name', models.CharField(help_text='任务名称', max_length=200)),\n                ('engine_ids', django.contrib.postgres.fields.ArrayField(base_field=models.IntegerField(), default=list, help_text='引擎 ID 列表', size=None)),\n                ('engine_names', models.JSONField(default=list, help_text='引擎名称列表，如 [\"引擎A\", \"引擎B\"]')),\n                ('yaml_configuration', models.TextField(default='', help_text='YAML 格式的扫描配置')),\n                ('cron_expression', models.CharField(default='0 2 * * *', help_text='Cron 表达式，格式：分 时 日 月 周', max_length=100)),\n                ('is_enabled', models.BooleanField(db_index=True, default=True, help_text='是否启用')),\n                ('run_count', models.IntegerField(default=0, help_text='已执行次数')),\n                ('last_run_time', models.DateTimeField(blank=True, help_text='上次执行时间', null=True)),\n                ('next_run_time', models.DateTimeField(blank=True, help_text='下次执行时间', null=True)),\n                ('created_at', models.DateTimeField(auto_now_add=True, help_text='创建时间')),\n                ('updated_at', models.DateTimeField(auto_now=True, help_text='更新时间')),\n                ('organization', models.ForeignKey(blank=True, help_text='扫描组织（设置后执行时动态获取组织下所有目标）', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='scheduled_scans', to='targets.organization')),\n                ('target', models.ForeignKey(blank=True, help_text='扫描单个目标（与 organization 二选一）', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='scheduled_scans', to='targets.target')),\n            ],\n            options={\n                'verbose_name': '定时扫描任务',\n                'verbose_name_plural': '定时扫描任务',\n                'db_table': 'scheduled_scan',\n                'ordering': ['-created_at'],\n            },\n        ),\n        migrations.AddIndex(\n            model_name='scan',\n            index=models.Index(fields=['-created_at'], name='scan_created_0bb6c7_idx'),\n        ),\n        migrations.AddIndex(\n            model_name='scan',\n            index=models.Index(fields=['target'], name='scan_target__718b9d_idx'),\n        ),\n        migrations.AddIndex(\n            model_name='scan',\n            index=models.Index(fields=['deleted_at', '-created_at'], name='scan_deleted_eb17e8_idx'),\n        ),\n        migrations.AddIndex(\n            model_name='scanlog',\n            index=models.Index(fields=['scan', 'created_at'], name='scan_log_scan_id_c4814a_idx'),\n        ),\n        migrations.AddIndex(\n            model_name='scheduledscan',\n            index=models.Index(fields=['-created_at'], name='scheduled_s_created_9b9c2e_idx'),\n        ),\n        migrations.AddIndex(\n            model_name='scheduledscan',\n            index=models.Index(fields=['is_enabled', '-created_at'], name='scheduled_s_is_enab_23d660_idx'),\n        ),\n        migrations.AddIndex(\n            model_name='scheduledscan',\n            index=models.Index(fields=['name'], name='scheduled_s_name_bf332d_idx'),\n        ),\n    ]\n"
  },
  {
    "path": "backend/apps/scan/migrations/0002_add_cached_screenshots_count.py",
    "content": "# Generated by Django 5.2.7 on 2026-01-07 14:03\n\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('scan', '0001_initial'),\n    ]\n\n    operations = [\n        migrations.AddField(\n            model_name='scan',\n            name='cached_screenshots_count',\n            field=models.IntegerField(default=0, help_text='缓存的截图数量'),\n        ),\n    ]\n"
  },
  {
    "path": "backend/apps/scan/migrations/0003_add_wecom_fields.py",
    "content": "# Generated manually for WeCom notification support\n\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('scan', '0002_add_cached_screenshots_count'),\n    ]\n\n    operations = [\n        migrations.AddField(\n            model_name='notificationsettings',\n            name='wecom_enabled',\n            field=models.BooleanField(default=False, help_text='是否启用企业微信通知'),\n        ),\n        migrations.AddField(\n            model_name='notificationsettings',\n            name='wecom_webhook_url',\n            field=models.URLField(blank=True, default='', help_text='企业微信机器人 Webhook URL'),\n        ),\n    ]\n"
  },
  {
    "path": "backend/apps/scan/migrations/__init__.py",
    "content": ""
  },
  {
    "path": "backend/apps/scan/models/__init__.py",
    "content": "\"\"\"Scan Models - 统一导出\"\"\"\n\nfrom .scan_models import Scan, SoftDeleteManager\nfrom .scan_log_model import ScanLog\nfrom .scheduled_scan_model import ScheduledScan\nfrom .subfinder_provider_settings_model import SubfinderProviderSettings\n\n# 兼容旧名称（已废弃，请使用 SubfinderProviderSettings）\nProviderSettings = SubfinderProviderSettings\n\n__all__ = [\n    'Scan',\n    'ScanLog',\n    'ScheduledScan',\n    'SoftDeleteManager',\n    'SubfinderProviderSettings',\n    'ProviderSettings',  # 兼容旧名称\n]\n"
  },
  {
    "path": "backend/apps/scan/models/scan_log_model.py",
    "content": "\"\"\"扫描日志模型\"\"\"\n\nfrom django.db import models\n\n\nclass ScanLog(models.Model):\n    \"\"\"扫描日志模型\"\"\"\n    \n    class Level(models.TextChoices):\n        INFO = 'info', 'Info'\n        WARNING = 'warning', 'Warning'\n        ERROR = 'error', 'Error'\n    \n    id = models.BigAutoField(primary_key=True)\n    scan = models.ForeignKey(\n        'Scan',\n        on_delete=models.CASCADE,\n        related_name='logs',\n        db_index=True,\n        help_text='关联的扫描任务'\n    )\n    level = models.CharField(\n        max_length=10,\n        choices=Level.choices,\n        default=Level.INFO,\n        help_text='日志级别'\n    )\n    content = models.TextField(help_text='日志内容')\n    created_at = models.DateTimeField(auto_now_add=True, db_index=True, help_text='创建时间')\n    \n    class Meta:\n        db_table = 'scan_log'\n        verbose_name = '扫描日志'\n        verbose_name_plural = '扫描日志'\n        ordering = ['created_at']\n        indexes = [\n            models.Index(fields=['scan', 'created_at']),\n        ]\n    \n    def __str__(self):\n        return f\"[{self.level}] {self.content[:50]}\"\n"
  },
  {
    "path": "backend/apps/scan/models/scan_models.py",
    "content": "\"\"\"扫描相关模型\"\"\"\n\nfrom django.db import models\nfrom django.contrib.postgres.fields import ArrayField\n\nfrom apps.common.definitions import ScanStatus\n\n\nclass SoftDeleteManager(models.Manager):\n    \"\"\"软删除管理器：默认只返回未删除的记录\"\"\"\n    \n    def get_queryset(self):\n        return super().get_queryset().filter(deleted_at__isnull=True)\n\n\nclass Scan(models.Model):\n    \"\"\"扫描任务模型\"\"\"\n\n    id = models.AutoField(primary_key=True)\n\n    target = models.ForeignKey('targets.Target', on_delete=models.CASCADE, related_name='scans', help_text='扫描目标')\n\n    # 多引擎支持字段\n    engine_ids = ArrayField(\n        models.IntegerField(),\n        default=list,\n        help_text='引擎 ID 列表'\n    )\n    engine_names = models.JSONField(\n        default=list,\n        help_text='引擎名称列表，如 [\"引擎A\", \"引擎B\"]'\n    )\n    yaml_configuration = models.TextField(\n        default='',\n        help_text='YAML 格式的扫描配置'\n    )\n\n    created_at = models.DateTimeField(auto_now_add=True, help_text='任务创建时间')\n    stopped_at = models.DateTimeField(null=True, blank=True, help_text='扫描结束时间')\n\n    status = models.CharField(\n        max_length=20,\n        choices=ScanStatus.choices,\n        default=ScanStatus.INITIATED,\n        db_index=True,\n        help_text='任务状态'\n    )\n\n    results_dir = models.CharField(max_length=100, blank=True, default='', help_text='结果存储目录')\n\n    container_ids = ArrayField(\n        models.CharField(max_length=100),\n        blank=True,\n        default=list,\n        help_text='容器 ID 列表（Docker Container ID）'\n    )\n    \n    worker = models.ForeignKey(\n        'engine.WorkerNode',\n        on_delete=models.SET_NULL,\n        related_name='scans',\n        null=True,\n        blank=True,\n        help_text='执行扫描的 Worker 节点'\n    )\n\n    error_message = models.CharField(max_length=2000, blank=True, default='', help_text='错误信息')\n\n    # ==================== 软删除字段 ====================\n    deleted_at = models.DateTimeField(null=True, blank=True, db_index=True, help_text='删除时间（NULL表示未删除）')\n\n    # ==================== 管理器 ====================\n    objects = SoftDeleteManager()  # 默认管理器：只返回未删除的记录\n    all_objects = models.Manager()  # 全量管理器：包括已删除的记录（用于硬删除）\n\n    # ==================== 进度跟踪字段 ====================\n    progress = models.IntegerField(default=0, help_text='扫描进度 0-100')\n    current_stage = models.CharField(max_length=50, blank=True, default='', help_text='当前扫描阶段')\n    stage_progress = models.JSONField(default=dict, help_text='各阶段进度详情')\n\n    # ==================== 缓存统计字段 ====================\n    cached_subdomains_count = models.IntegerField(default=0, help_text='缓存的子域名数量')\n    cached_websites_count = models.IntegerField(default=0, help_text='缓存的网站数量')\n    cached_endpoints_count = models.IntegerField(default=0, help_text='缓存的端点数量')\n    cached_ips_count = models.IntegerField(default=0, help_text='缓存的IP地址数量')\n    cached_directories_count = models.IntegerField(default=0, help_text='缓存的目录数量')\n    cached_screenshots_count = models.IntegerField(default=0, help_text='缓存的截图数量')\n    cached_vulns_total = models.IntegerField(default=0, help_text='缓存的漏洞总数')\n    cached_vulns_critical = models.IntegerField(default=0, help_text='缓存的严重漏洞数量')\n    cached_vulns_high = models.IntegerField(default=0, help_text='缓存的高危漏洞数量')\n    cached_vulns_medium = models.IntegerField(default=0, help_text='缓存的中危漏洞数量')\n    cached_vulns_low = models.IntegerField(default=0, help_text='缓存的低危漏洞数量')\n    stats_updated_at = models.DateTimeField(null=True, blank=True, help_text='统计数据最后更新时间')\n\n    class Meta:\n        db_table = 'scan'\n        verbose_name = '扫描任务'\n        verbose_name_plural = '扫描任务'\n        ordering = ['-created_at']\n        indexes = [\n            models.Index(fields=['-created_at']),\n            models.Index(fields=['target']),\n            models.Index(fields=['deleted_at', '-created_at']),\n        ]\n\n    def __str__(self):\n        return f\"Scan #{self.id} - {self.target.name}\"\n"
  },
  {
    "path": "backend/apps/scan/models/scheduled_scan_model.py",
    "content": "\"\"\"定时扫描任务模型\"\"\"\n\nfrom django.db import models\nfrom django.contrib.postgres.fields import ArrayField\n\n\nclass ScheduledScan(models.Model):\n    \"\"\"定时扫描任务模型\"\"\"\n    \n    id = models.AutoField(primary_key=True)\n    \n    name = models.CharField(max_length=200, help_text='任务名称')\n    \n    engine_ids = ArrayField(\n        models.IntegerField(),\n        default=list,\n        help_text='引擎 ID 列表'\n    )\n    engine_names = models.JSONField(\n        default=list,\n        help_text='引擎名称列表，如 [\"引擎A\", \"引擎B\"]'\n    )\n    yaml_configuration = models.TextField(\n        default='',\n        help_text='YAML 格式的扫描配置'\n    )\n    \n    organization = models.ForeignKey(\n        'targets.Organization',\n        on_delete=models.CASCADE,\n        related_name='scheduled_scans',\n        null=True,\n        blank=True,\n        help_text='扫描组织（设置后执行时动态获取组织下所有目标）'\n    )\n    \n    target = models.ForeignKey(\n        'targets.Target',\n        on_delete=models.CASCADE,\n        related_name='scheduled_scans',\n        null=True,\n        blank=True,\n        help_text='扫描单个目标（与 organization 二选一）'\n    )\n    \n    cron_expression = models.CharField(\n        max_length=100,\n        default='0 2 * * *',\n        help_text='Cron 表达式，格式：分 时 日 月 周'\n    )\n    \n    is_enabled = models.BooleanField(default=True, db_index=True, help_text='是否启用')\n    \n    run_count = models.IntegerField(default=0, help_text='已执行次数')\n    last_run_time = models.DateTimeField(null=True, blank=True, help_text='上次执行时间')\n    next_run_time = models.DateTimeField(null=True, blank=True, help_text='下次执行时间')\n    \n    created_at = models.DateTimeField(auto_now_add=True, help_text='创建时间')\n    updated_at = models.DateTimeField(auto_now=True, help_text='更新时间')\n    \n    class Meta:\n        db_table = 'scheduled_scan'\n        verbose_name = '定时扫描任务'\n        verbose_name_plural = '定时扫描任务'\n        ordering = ['-created_at']\n        indexes = [\n            models.Index(fields=['-created_at']),\n            models.Index(fields=['is_enabled', '-created_at']),\n            models.Index(fields=['name']),\n        ]\n    \n    def __str__(self):\n        return f\"ScheduledScan #{self.id} - {self.name}\"\n"
  },
  {
    "path": "backend/apps/scan/models/subfinder_provider_settings_model.py",
    "content": "\"\"\"Subfinder Provider 配置模型（单例模式）\n\n用于存储 subfinder 第三方数据源的 API Key 配置\n\"\"\"\n\nfrom django.db import models\n\n\nclass SubfinderProviderSettings(models.Model):\n    \"\"\"\n    Subfinder Provider 配置（单例模式）\n    存储第三方数据源的 API Key 配置，用于 subfinder 子域名发现\n    \n    支持的 Provider:\n    - fofa: email + api_key (composite)\n    - censys: api_id + api_secret (composite)\n    - hunter, shodan, zoomeye, securitytrails, threatbook, quake: api_key (single)\n    \"\"\"\n    \n    providers = models.JSONField(\n        default=dict,\n        help_text='各 Provider 的 API Key 配置'\n    )\n    \n    created_at = models.DateTimeField(auto_now_add=True)\n    updated_at = models.DateTimeField(auto_now=True)\n    \n    class Meta:\n        db_table = 'subfinder_provider_settings'\n        verbose_name = 'Subfinder Provider 配置'\n        verbose_name_plural = 'Subfinder Provider 配置'\n    \n    DEFAULT_PROVIDERS = {\n        'fofa': {'enabled': False, 'email': '', 'api_key': ''},\n        'hunter': {'enabled': False, 'api_key': ''},\n        'shodan': {'enabled': False, 'api_key': ''},\n        'censys': {'enabled': False, 'api_id': '', 'api_secret': ''},\n        'zoomeye': {'enabled': False, 'api_key': ''},\n        'securitytrails': {'enabled': False, 'api_key': ''},\n        'threatbook': {'enabled': False, 'api_key': ''},\n        'quake': {'enabled': False, 'api_key': ''},\n    }\n    \n    def save(self, *args, **kwargs):\n        self.pk = 1\n        super().save(*args, **kwargs)\n    \n    @classmethod\n    def get_instance(cls) -> 'SubfinderProviderSettings':\n        \"\"\"获取或创建单例实例\"\"\"\n        obj, _ = cls.objects.get_or_create(\n            pk=1,\n            defaults={'providers': cls.DEFAULT_PROVIDERS.copy()}\n        )\n        return obj\n    \n    def get_provider_config(self, provider: str) -> dict:\n        \"\"\"获取指定 Provider 的配置\"\"\"\n        return self.providers.get(provider, self.DEFAULT_PROVIDERS.get(provider, {}))\n    \n    def is_provider_enabled(self, provider: str) -> bool:\n        \"\"\"检查指定 Provider 是否启用\"\"\"\n        config = self.get_provider_config(provider)\n        return config.get('enabled', False)\n"
  },
  {
    "path": "backend/apps/scan/notifications/__init__.py",
    "content": "\"\"\"极简通知系统\"\"\"\n\nfrom .types import NotificationLevel, NotificationCategory\nfrom .models import Notification\nfrom .services import create_notification\n\n__all__ = [\n    'NotificationLevel',\n    'NotificationCategory',\n    'Notification',\n    'create_notification'\n]\n"
  },
  {
    "path": "backend/apps/scan/notifications/consumers.py",
    "content": "\"\"\"\nWebSocket Consumer - 通知实时推送\n\"\"\"\n\nimport json\nimport logging\nimport asyncio\n\nfrom apps.common.websocket_auth import AuthenticatedWebsocketConsumer\n\nlogger = logging.getLogger(__name__)\n\n\nclass NotificationConsumer(AuthenticatedWebsocketConsumer):\n    \"\"\"\n    通知 WebSocket Consumer\n    \n    处理客户端连接、断开和通知推送\n    使用 Redis Channel Layer 订阅通知\n    支持心跳保活机制\n    \"\"\"\n    \n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.heartbeat_task = None  # 心跳任务\n    \n    async def on_connect(self):\n        \"\"\"\n        客户端连接时调用（已通过认证）\n        加入通知广播组\n        \"\"\"\n        # 通知组名（所有客户端共享）\n        self.group_name = 'notifications'\n        \n        # 加入组\n        await self.channel_layer.group_add(\n            self.group_name,\n            self.channel_name\n        )\n        \n        # 接受 WebSocket 连接\n        await self.accept()\n        \n        # 发送连接成功消息\n        await self.send(text_data=json.dumps({\n            'type': 'connected',\n            'message': '连接成功'\n        }, ensure_ascii=False))\n        \n        # 启动服务端心跳（可选：防止中间件超时）\n        # self.heartbeat_task = asyncio.create_task(self._heartbeat_loop())\n        \n        logger.debug(f\"WebSocket 连接已建立 - Channel: {self.channel_name}\")\n    \n    async def disconnect(self, close_code):\n        \"\"\"\n        客户端断开时调用\n        离开通知广播组\n        \"\"\"\n        # 取消心跳任务\n        if self.heartbeat_task and not self.heartbeat_task.done():\n            self.heartbeat_task.cancel()\n            try:\n                await self.heartbeat_task\n            except asyncio.CancelledError:\n                pass\n        \n        # 离开组\n        await self.channel_layer.group_discard(\n            self.group_name,\n            self.channel_name\n        )\n        \n        logger.debug(f\"WebSocket 连接已断开 - Channel: {self.channel_name}, Code: {close_code}\")\n    \n    async def receive(self, text_data):\n        \"\"\"\n        接收客户端消息\n        当前实现不需要处理客户端消息，保留以备扩展\n        \"\"\"\n        try:\n            data = json.loads(text_data)\n            message_type = data.get('type')\n            \n            # 心跳响应\n            if message_type == 'ping':\n                await self.send(text_data=json.dumps({\n                    'type': 'pong',\n                    'message': '心跳响应'\n                }, ensure_ascii=False))\n                logger.debug(f\"心跳响应 - Channel: {self.channel_name}\")\n                \n        except json.JSONDecodeError as e:\n            logger.warning(f\"解析客户端消息失败 - Channel: {self.channel_name}: {e}\")\n        except Exception as e:\n            logger.error(f\"处理客户端消息异常 - Channel: {self.channel_name}: {e}\", exc_info=True)\n    \n    async def notification_message(self, event):\n        \"\"\"\n        接收来自 Channel Layer 的通知消息\n        转发给 WebSocket 客户端\n        \n        Args:\n            event: 消息事件，包含通知数据\n        \"\"\"\n        try:\n            # 构造发送给客户端的消息\n            message = {\n                'type': 'notification',\n                'id': event['id'],\n                'category': event.get('category', 'system'),\n                'title': event['title'],\n                'message': event['message'],\n                'level': event['level'],\n                'created_at': event['created_at']\n            }\n            \n            # 发送给客户端\n            await self.send(text_data=json.dumps(message, ensure_ascii=False))\n            \n            logger.debug(f\"通知已推送 - Channel: {self.channel_name}, ID: {event['id']}\")\n            \n        except Exception as e:\n            logger.error(f\"推送通知失败 - Channel: {self.channel_name}: {e}\", exc_info=True)\n    \n    async def _heartbeat_loop(self):\n        \"\"\"\n        服务端主动心跳循环（可选）\n        定期向客户端发送 ping 消息，保持连接活跃\n        防止中间件或防火墙断开长时间无活动的连接\n        \n        注意：通常客户端心跳就足够了，这是额外的保险措施\n        \"\"\"\n        try:\n            while True:\n                await asyncio.sleep(45)  # 每 45 秒发送一次心跳\n                await self.send(text_data=json.dumps({\n                    'type': 'ping',\n                    'message': '服务端心跳'\n                }, ensure_ascii=False))\n                logger.debug(f\"服务端心跳已发送 - Channel: {self.channel_name}\")\n        except asyncio.CancelledError:\n            logger.debug(f\"心跳循环已取消 - Channel: {self.channel_name}\")\n        except Exception as e:\n            logger.error(f\"心跳循环异常 - Channel: {self.channel_name}: {e}\", exc_info=True)\n"
  },
  {
    "path": "backend/apps/scan/notifications/models.py",
    "content": "\"\"\"通知系统数据模型\"\"\"\n\nimport logging\nfrom datetime import timedelta\n\nfrom django.db import models\nfrom django.utils import timezone\n\nfrom .types import NotificationCategory, NotificationLevel\n\nlogger = logging.getLogger(__name__)\n\n\nclass NotificationSettings(models.Model):\n    \"\"\"\n    通知设置（单例模型）\n    存储 Discord webhook 配置和各分类的通知开关\n    \"\"\"\n\n    # Discord 配置\n    discord_enabled = models.BooleanField(default=False, help_text='是否启用 Discord 通知')\n    discord_webhook_url = models.URLField(blank=True, default='', help_text='Discord Webhook URL')\n\n    # 企业微信配置\n    wecom_enabled = models.BooleanField(default=False, help_text='是否启用企业微信通知')\n    wecom_webhook_url = models.URLField(blank=True, default='', help_text='企业微信机器人 Webhook URL')\n\n    # 分类开关（使用 JSONField 存储）\n    categories = models.JSONField(\n        default=dict,\n        help_text='各分类通知开关，如 {\"scan\": true, \"vulnerability\": true, \"asset\": true, \"system\": false}'\n    )\n\n    # 时间信息\n    created_at = models.DateTimeField(auto_now_add=True)\n    updated_at = models.DateTimeField(auto_now=True)\n\n    class Meta:\n        db_table = 'notification_settings'\n        verbose_name = '通知设置'\n        verbose_name_plural = '通知设置'\n\n    def save(self, *args, **kwargs):\n        self.pk = 1  # 单例模式\n        super().save(*args, **kwargs)\n\n    @classmethod\n    def get_instance(cls) -> 'NotificationSettings':\n        \"\"\"获取或创建单例实例\"\"\"\n        obj, _ = cls.objects.get_or_create(\n            pk=1,\n            defaults={\n                'discord_enabled': False,\n                'discord_webhook_url': '',\n                'categories': {\n                    'scan': True,\n                    'vulnerability': True,\n                    'asset': True,\n                    'system': False,\n                }\n            }\n        )\n        return obj\n\n    def is_category_enabled(self, category: str) -> bool:\n        \"\"\"检查指定分类是否启用通知\"\"\"\n        return self.categories.get(category, False)\n\n\nclass Notification(models.Model):\n    \"\"\"通知模型\"\"\"\n\n    id = models.AutoField(primary_key=True)\n\n    category = models.CharField(\n        max_length=20,\n        choices=NotificationCategory.choices,\n        default=NotificationCategory.SYSTEM,\n        db_index=True,\n        help_text='通知分类'\n    )\n\n    level = models.CharField(\n        max_length=20,\n        choices=NotificationLevel.choices,\n        default=NotificationLevel.LOW,\n        db_index=True,\n        help_text='通知级别'\n    )\n\n    title = models.CharField(max_length=200, help_text='通知标题')\n    message = models.CharField(max_length=2000, help_text='通知内容')\n\n    created_at = models.DateTimeField(auto_now_add=True, help_text='创建时间')\n\n    is_read = models.BooleanField(default=False, help_text='是否已读')\n    read_at = models.DateTimeField(null=True, blank=True, help_text='阅读时间')\n\n    class Meta:\n        db_table = 'notification'\n        verbose_name = '通知'\n        verbose_name_plural = '通知'\n        ordering = ['-created_at']\n        indexes = [\n            models.Index(fields=['-created_at']),\n            models.Index(fields=['category', '-created_at']),\n            models.Index(fields=['level', '-created_at']),\n            models.Index(fields=['is_read', '-created_at']),\n        ]\n\n    def __str__(self):\n        return f\"{self.get_level_display()} - {self.title}\"\n\n    @classmethod\n    def cleanup_old_notifications(cls) -> int:\n        \"\"\"清理超过15天的旧通知\"\"\"\n        cutoff_date = timezone.now() - timedelta(days=15)\n        deleted_count, _ = cls.objects.filter(created_at__lt=cutoff_date).delete()\n        return deleted_count or 0\n\n    def save(self, *args, **kwargs):\n        \"\"\"重写save方法，在创建新通知时自动清理旧通知\"\"\"\n        is_new = self.pk is None\n        super().save(*args, **kwargs)\n\n        if is_new:\n            try:\n                deleted_count = self.__class__.cleanup_old_notifications()\n                if deleted_count > 0:\n                    logger.info(\"自动清理了 %d 条超过15天的旧通知\", deleted_count)\n            except Exception:\n                logger.warning(\"通知自动清理失败\", exc_info=True)\n"
  },
  {
    "path": "backend/apps/scan/notifications/receivers.py",
    "content": "\"\"\"信号接收器 - 处理通知相关的信号\n\n监听各种信号并发送相应的通知。\n\"\"\"\n\nimport logging\nfrom django.dispatch import receiver\n\nfrom apps.common.signals import vulnerabilities_saved, worker_delete_failed, all_workers_high_load\nfrom apps.scan.notifications import create_notification, NotificationLevel, NotificationCategory\n\nlogger = logging.getLogger(__name__)\n\n\n@receiver(vulnerabilities_saved)\ndef on_vulnerabilities_saved(sender, items, scan_id, target_id, **kwargs):\n    \"\"\"漏洞保存完成后的通知处理\n    \n    为每个漏洞发送详细通知\n    \"\"\"\n    if not items:\n        return\n    \n    # 获取目标名称\n    target_name = \"未知目标\"\n    if target_id:\n        try:\n            from apps.targets.models import Target\n            target = Target.objects.filter(id=target_id).first()\n            if target:\n                target_name = target.name\n        except Exception:\n            pass\n    \n    # 严重程度映射\n    severity_level_map = {\n        'critical': NotificationLevel.CRITICAL,\n        'high': NotificationLevel.HIGH,\n        'medium': NotificationLevel.MEDIUM,\n        'low': NotificationLevel.LOW,\n    }\n    \n    for vuln in items:\n        try:\n            severity = vuln.severity or 'unknown'\n            \n            # 构建漏洞详情消息\n            message = f\"漏洞：{vuln.vuln_type}\\n\"\n            message += f\"程度：{severity}\\n\"\n            message += f\"目标：{target_name}\\n\"\n            message += f\"URL：{vuln.url}\"\n            if vuln.source:\n                message += f\"\\n来源：{vuln.source}\"\n            if vuln.description:\n                message += f\"\\n描述：{vuln.description}\"\n            \n            # 根据漏洞严重程度设置通知级别\n            level = severity_level_map.get(severity.lower(), NotificationLevel.MEDIUM)\n            \n            create_notification(\n                title=f\"{vuln.vuln_type}\",\n                message=message,\n                level=level,\n                category=NotificationCategory.VULNERABILITY\n            )\n            \n        except Exception as e:\n            logger.error(\"发送漏洞通知失败 - url=%s: %s\", vuln.url, e, exc_info=True)\n    \n    logger.info(\"漏洞通知已发送 - scan_id=%s, 数量=%d\", scan_id, len(items))\n\n\n@receiver(worker_delete_failed)\ndef on_worker_delete_failed(sender, worker_name, message, **kwargs):\n    \"\"\"Worker 删除失败时的通知处理\"\"\"\n    create_notification(\n        title=\"Worker 删除警告\",\n        message=f\"节点 {worker_name} 已从数据库删除，但远程卸载失败: {message}\",\n        level=NotificationLevel.MEDIUM,\n        category=NotificationCategory.SYSTEM\n    )\n    logger.warning(\"Worker 删除失败通知已发送 - worker=%s, message=%s\", worker_name, message)\n\n\n@receiver(all_workers_high_load)\ndef on_all_workers_high_load(sender, worker_name, cpu, mem, **kwargs):\n    \"\"\"所有 Worker 高负载时的通知处理\"\"\"\n    create_notification(\n        title=\"系统负载较高\",\n        message=f\"所有节点负载较高（最低负载节点 CPU: {cpu:.1f}%, 内存: {mem:.1f}%），系统将等待最多 10 分钟后分发任务，扫描速度可能受影响\",\n        level=NotificationLevel.MEDIUM,\n        category=NotificationCategory.SYSTEM\n    )\n    logger.warning(\"高负载通知已发送 - cpu=%.1f%%, mem=%.1f%%\", cpu, mem)\n"
  },
  {
    "path": "backend/apps/scan/notifications/repositories.py",
    "content": "\"\"\"通知系统仓储层模块\"\"\"\n\nimport logging\nfrom dataclasses import dataclass\nfrom typing import Optional\n\nfrom django.db.models import QuerySet\nfrom django.utils import timezone\n\nfrom apps.common.decorators import auto_ensure_db_connection\n\nfrom .models import Notification, NotificationSettings\n\nlogger = logging.getLogger(__name__)\n\n\n@dataclass\nclass NotificationSettingsData:\n    \"\"\"通知设置更新数据\"\"\"\n\n    discord_enabled: bool\n    discord_webhook_url: str\n    categories: dict[str, bool]\n    wecom_enabled: bool = False\n    wecom_webhook_url: str = ''\n\n\n@auto_ensure_db_connection\nclass NotificationSettingsRepository:\n    \"\"\"通知设置仓储层\"\"\"\n\n    def get_settings(self) -> NotificationSettings:\n        \"\"\"获取通知设置单例\"\"\"\n        return NotificationSettings.get_instance()\n\n    def update_settings(self, data: NotificationSettingsData) -> NotificationSettings:\n        \"\"\"更新通知设置\"\"\"\n        settings = NotificationSettings.get_instance()\n        settings.discord_enabled = data.discord_enabled\n        settings.discord_webhook_url = data.discord_webhook_url\n        settings.wecom_enabled = data.wecom_enabled\n        settings.wecom_webhook_url = data.wecom_webhook_url\n        settings.categories = data.categories\n        settings.save()\n        return settings\n\n    def is_category_enabled(self, category: str) -> bool:\n        \"\"\"检查指定分类是否启用\"\"\"\n        return self.get_settings().is_category_enabled(category)\n\n\n@auto_ensure_db_connection\nclass DjangoNotificationRepository:\n    \"\"\"通知数据仓储层\"\"\"\n\n    def get_filtered(\n        self,\n        level: Optional[str] = None,\n        unread: Optional[bool] = None\n    ) -> QuerySet[Notification]:\n        \"\"\"\n        获取过滤后的通知列表\n\n        Args:\n            level: 通知级别过滤\n            unread: 已读状态过滤 (True=未读, False=已读, None=全部)\n        \"\"\"\n        queryset = Notification.objects.all()\n\n        if level:\n            queryset = queryset.filter(level=level)\n\n        if unread is True:\n            queryset = queryset.filter(is_read=False)\n        elif unread is False:\n            queryset = queryset.filter(is_read=True)\n\n        return queryset.order_by(\"-created_at\")\n\n    def get_unread_count(self) -> int:\n        \"\"\"获取未读通知数量\"\"\"\n        return Notification.objects.filter(is_read=False).count()\n\n    def mark_all_as_read(self) -> int:\n        \"\"\"标记所有通知为已读，返回更新数量\"\"\"\n        return Notification.objects.filter(is_read=False).update(\n            is_read=True,\n            read_at=timezone.now(),\n        )\n\n    def create(\n        self,\n        title: str,\n        message: str,\n        level: str,\n        category: str = 'system'\n    ) -> Notification:\n        \"\"\"创建新通知\"\"\"\n        return Notification.objects.create(\n            category=category,\n            level=level,\n            title=title,\n            message=message,\n        )\n"
  },
  {
    "path": "backend/apps/scan/notifications/routing.py",
    "content": "\"\"\"\nWebSocket 路由配置\n\"\"\"\n\nfrom django.urls import path\n\n# 延迟导入，避免循环依赖\nfrom .consumers import NotificationConsumer\n\nwebsocket_urlpatterns = [\n    path('ws/notifications/', NotificationConsumer.as_asgi()),\n]\n"
  },
  {
    "path": "backend/apps/scan/notifications/serializers.py",
    "content": "\"\"\"通知序列化器\"\"\"\n\nfrom rest_framework import serializers\n\nfrom .models import Notification\n\n\nclass NotificationSerializer(serializers.ModelSerializer):\n    class Meta:\n        model = Notification\n        fields = [\n            'id',\n            'category',\n            'title',\n            'message',\n            'level',\n            'is_read',\n            'created_at',\n            'read_at',\n        ]\n"
  },
  {
    "path": "backend/apps/scan/notifications/services.py",
    "content": "\"\"\"通知服务 - 支持数据库存储和 WebSocket 实时推送\"\"\"\n\nimport logging\nimport time\nimport requests\nimport urllib3\nfrom .models import Notification, NotificationSettings\nfrom .types import NotificationLevel, NotificationCategory\nfrom .repositories import DjangoNotificationRepository, NotificationSettingsRepository\n\n# 禁用自签名证书的 SSL 警告（远程 Worker 回调场景）\nurllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)\n\nlogger = logging.getLogger(__name__)\n\n\n# ============================================================\n# 外部推送渠道抽象\n# ============================================================\n\n# Discord Embed 颜色映射（使用字符串 key，因为 model 字段存储的是字符串）\nDISCORD_COLORS = {\n    'low': 0x3498db,       # 蓝色\n    'medium': 0xf39c12,    # 橙色\n    'high': 0xe74c3c,      # 红色\n    'critical': 0x9b59b6,  # 紫色\n}\n\n# 分类 emoji（使用字符串 key）\nCATEGORY_EMOJI = {\n    'scan': '🔍',\n    'vulnerability': '⚠️',\n    'asset': '🌐',\n    'system': '⚙️',\n}\n\n\ndef push_to_external_channels(notification: Notification) -> None:\n    \"\"\"\n    推送通知到外部渠道（Discord、Slack 等）\n    \n    根据用户设置决定推送到哪些渠道。\n    目前支持：Discord\n    未来可扩展：Slack、Telegram、Email 等\n    \n    Args:\n        notification: 通知对象\n    \"\"\"\n    settings = NotificationSettings.get_instance()\n    \n    # 检查分类是否启用\n    if not settings.is_category_enabled(notification.category):\n        logger.debug(f\"分类 {notification.category} 未启用外部推送\")\n        return\n    \n    # Discord 渠道\n    if settings.discord_enabled and settings.discord_webhook_url:\n        try:\n            _send_discord(notification, settings.discord_webhook_url)\n        except Exception as e:\n            logger.warning(f\"Discord 推送失败: {e}\")\n    \n    # 企业微信渠道\n    if settings.wecom_enabled and settings.wecom_webhook_url:\n        try:\n            _send_wecom(notification, settings.wecom_webhook_url)\n        except Exception as e:\n            logger.warning(f\"企业微信推送失败: {e}\")\n\n\ndef _send_discord(notification: Notification, webhook_url: str) -> bool:\n    \"\"\"发送到 Discord Webhook\"\"\"\n    try:\n        color = DISCORD_COLORS.get(notification.level, 0x95a5a6)\n        emoji = CATEGORY_EMOJI.get(notification.category, '📢')\n        \n        embed = {\n            'title': f\"{emoji} {notification.title}\",\n            'description': notification.message,\n            'color': color,\n            'footer': {\n                'text': f\"级别: {notification.get_level_display()} | 分类: {notification.get_category_display()}\"\n            },\n            'timestamp': notification.created_at.isoformat(),\n        }\n        \n        response = requests.post(\n            webhook_url,\n            json={'embeds': [embed]},\n            timeout=10\n        )\n        \n        if response.status_code in (200, 204):\n            logger.info(f\"Discord 通知发送成功 - {notification.title}\")\n            return True\n        else:\n            logger.warning(f\"Discord 发送失败 - 状态码: {response.status_code}\")\n            return False\n            \n    except requests.RequestException as e:\n        logger.error(f\"Discord 网络错误: {e}\")\n        return False\n\n\ndef _send_wecom(notification: Notification, webhook_url: str) -> bool:\n    \"\"\"发送到企业微信机器人 Webhook\"\"\"\n    try:\n        emoji = CATEGORY_EMOJI.get(notification.category, '📢')\n\n        # 企业微信 Markdown 格式\n        content = f\"\"\"**{emoji} {notification.title}**\n> 级别：{notification.get_level_display()}\n> 分类：{notification.get_category_display()}\n\n{notification.message}\"\"\"\n\n        payload = {\n            'msgtype': 'markdown',\n            'markdown': {'content': content}\n        }\n\n        response = requests.post(webhook_url, json=payload, timeout=10)\n\n        if response.status_code == 200:\n            result = response.json()\n            if result.get('errcode') == 0:\n                logger.info(f\"企业微信通知发送成功 - {notification.title}\")\n                return True\n            logger.warning(f\"企业微信发送失败 - errcode: {result.get('errcode')}, errmsg: {result.get('errmsg')}\")\n            return False\n\n        logger.warning(f\"企业微信发送失败 - 状态码: {response.status_code}\")\n        return False\n\n    except requests.RequestException as e:\n        logger.error(f\"企业微信网络错误: {e}\")\n        return False\n\n\n# ============================================================\n# 设置服务\n# ============================================================\n\nclass NotificationSettingsService:\n    \"\"\"通知设置服务\"\"\"\n    \n    def __init__(self, repository: NotificationSettingsRepository | None = None):\n        self.repo = repository or NotificationSettingsRepository()\n    \n    def get_settings(self) -> dict:\n        \"\"\"获取通知设置（前端格式）\"\"\"\n        settings = self.repo.get_settings()\n        return {\n            'discord': {\n                'enabled': settings.discord_enabled,\n                'webhookUrl': settings.discord_webhook_url,\n            },\n            'wecom': {\n                'enabled': settings.wecom_enabled,\n                'webhookUrl': settings.wecom_webhook_url,\n            },\n            'categories': settings.categories,\n        }\n    \n    def update_settings(self, data: dict) -> dict:\n        \"\"\"更新通知设置\n\n        注意：DRF CamelCaseJSONParser 会将前端的 webhookUrl 转换为 webhook_url\n        \"\"\"\n        discord_data = data.get('discord', {})\n        wecom_data = data.get('wecom', {})\n        categories = data.get('categories', {})\n\n        # CamelCaseJSONParser 转换后的字段名是 webhook_url\n        discord_webhook_url = discord_data.get('webhook_url', '')\n        wecom_webhook_url = wecom_data.get('webhook_url', '')\n\n        settings = self.repo.update_settings(\n            discord_enabled=discord_data.get('enabled', False),\n            discord_webhook_url=discord_webhook_url,\n            wecom_enabled=wecom_data.get('enabled', False),\n            wecom_webhook_url=wecom_webhook_url,\n            categories=categories,\n        )\n\n        return {\n            'discord': {\n                'enabled': settings.discord_enabled,\n                'webhookUrl': settings.discord_webhook_url,\n            },\n            'wecom': {\n                'enabled': settings.wecom_enabled,\n                'webhookUrl': settings.wecom_webhook_url,\n            },\n            'categories': settings.categories,\n        }\n\n\nclass NotificationService:\n    \"\"\"通知业务服务，封装常用查询与更新操作\"\"\"\n\n    def __init__(self, repository: DjangoNotificationRepository | None = None):\n        self.repo = repository or DjangoNotificationRepository()\n\n    def get_notifications(self, level: str | None = None, unread: bool | None = None):\n        return self.repo.get_filtered(level=level, unread=unread)\n\n    def get_unread_count(self) -> int:\n        return self.repo.get_unread_count()\n\n    def mark_all_as_read(self) -> int:\n        return self.repo.mark_all_as_read()\n\n\ndef create_notification(\n    title: str,\n    message: str,\n    level: NotificationLevel = NotificationLevel.LOW,\n    category: NotificationCategory = NotificationCategory.SYSTEM\n) -> Notification:\n    \"\"\"\n    创建通知记录并实时推送\n    \n    增强的重试机制：\n    - 最多重试 3 次\n    - 每次重试前强制关闭并重建数据库连接\n    - 重试间隔：1秒 → 2秒 → 3秒\n    - 针对连接错误进行特殊处理\n    \n    Args:\n        title: 通知标题\n        message: 通知消息\n        level: 通知级别\n        category: 通知分类\n        \n    Returns:\n        Notification: 创建的通知对象\n        \n    Raises:\n        Exception: 重试3次后仍然失败\n    \"\"\"\n    from django.db import connection\n    from psycopg2 import OperationalError, InterfaceError\n\n    repo = DjangoNotificationRepository()\n\n    max_retries = 3\n    last_exception = None\n    \n    for attempt in range(1, max_retries + 1):\n        try:\n            # 强制关闭旧连接并重建（每次尝试都重建）\n            if attempt > 1:\n                logger.debug(f\"重试创建通知 ({attempt}/{max_retries}) - {title}\")\n            \n            connection.close()\n            connection.ensure_connection()\n            \n            # 测试连接是否真的可用\n            connection.cursor().execute(\"SELECT 1\")\n            \n            # 1. 写入数据库（通过仓储层统一访问 ORM）\n            notification = repo.create(\n                title=title,\n                message=message,\n                level=level,\n                category=category,\n            )\n            \n            # 2. WebSocket 实时推送（推送失败不影响通知创建）\n            try:\n                _push_to_websocket(notification)\n            except Exception as push_error:\n                logger.warning(f\"WebSocket 推送失败，但通知已创建 - {title}: {push_error}\")\n            \n            # 3. 外部渠道推送（Discord/Slack 等，推送失败不影响通知创建）\n            try:\n                push_to_external_channels(notification)\n            except Exception as external_error:\n                logger.warning(f\"外部渠道推送失败，但通知已创建 - {title}: {external_error}\")\n            \n            if attempt > 1:\n                logger.info(f\"✓ 通知创建成功（重试 {attempt-1} 次后） - {title}\")\n            else:\n                logger.debug(f\"通知已创建并推送 - {title}\")\n            \n            return notification\n            \n        except (OperationalError, InterfaceError) as e:\n            # 数据库连接错误，需要重试\n            last_exception = e\n            error_msg = str(e)\n            logger.warning(\n                f\"数据库连接错误 ({attempt}/{max_retries}) - {title}: {error_msg[:100]}\"\n            )\n            \n            if attempt < max_retries:\n                # 指数退避：1秒、2秒、3秒\n                sleep_time = attempt\n                logger.debug(f\"等待 {sleep_time} 秒后重试...\")\n                time.sleep(sleep_time)\n            else:\n                logger.error(\n                    f\"创建通知失败 - 数据库连接问题（已重试 {max_retries} 次） - {title}: {error_msg}\"\n                )\n                \n        except Exception as e:\n            # 其他错误，不重试直接抛出\n            last_exception = e\n            error_str = str(e).lower()\n            \n            if 'connection' in error_str or 'closed' in error_str:\n                logger.error(f\"创建通知失败 - 连接相关错误 - {title}: {e}\")\n            else:\n                logger.error(f\"创建通知失败 - {title}: {e}\")\n            \n            # 非连接错误，直接抛出不重试\n            raise\n    \n    # 所有重试都失败了\n    error_msg = f\"创建通知失败 - 已重试 {max_retries} 次仍然失败 - {title}\"\n    logger.error(error_msg)\n    raise RuntimeError(error_msg) from last_exception\n\n\ndef _push_to_websocket(notification: Notification) -> None:\n    \"\"\"\n    推送通知到 WebSocket 客户端\n    \n    - 在 Server 容器中：直接通过 Channel Layer 推送\n    - 在 Worker 容器中：通过 API 回调让 Server 推送（因为 Worker 无法访问 Redis）\n    \"\"\"\n    import os\n    \n    # 检测是否在 Worker 容器中（有 SERVER_URL 环境变量）\n    server_url = os.environ.get(\"SERVER_URL\")\n    \n    if server_url:\n        # Worker 容器：通过 API 回调\n        _push_via_api_callback(notification, server_url)\n    else:\n        # Server 容器：直接推送\n        _push_via_channel_layer(notification)\n\n\ndef _push_via_api_callback(notification: Notification, server_url: str) -> None:\n    \"\"\"\n    通过 HTTP 回调推送通知（Worker → Server 跨容器通信）\n    \n    注意：这不是同进程内的 service 调用 view，而是 Worker 容器\n    通过 HTTP 请求 Server 容器的 /api/callbacks/notification/ 接口。\n    Worker 无法直接访问 Redis，需要由 Server 代为推送 WebSocket。\n    \"\"\"\n    import os\n    import requests\n    \n    try:\n        callback_url = f\"{server_url}/api/callbacks/notification/\"\n        data = {\n            'id': notification.id,\n            'category': notification.category,\n            'title': notification.title,\n            'message': notification.message,\n            'level': notification.level,\n            'created_at': notification.created_at.isoformat()\n        }\n        \n        # 构建请求头（包含 Worker API Key）\n        headers = {'Content-Type': 'application/json'}\n        worker_api_key = os.environ.get(\"WORKER_API_KEY\", \"\")\n        if worker_api_key:\n            headers[\"X-Worker-API-Key\"] = worker_api_key\n        \n        # verify=False: 远程 Worker 回调 Server 时可能使用自签名证书\n        resp = requests.post(callback_url, json=data, headers=headers, timeout=5, verify=False)\n        resp.raise_for_status()\n        \n        logger.debug(f\"通知回调推送成功 - ID: {notification.id}\")\n        \n    except Exception as e:\n        logger.warning(f\"通知回调推送失败 - ID: {notification.id}: {e}\")\n\n\ndef _push_via_channel_layer(notification: Notification) -> None:\n    \"\"\"通过 Channel Layer 直接推送通知（Server 容器使用）\"\"\"\n    try:\n        logger.debug(f\"开始推送通知到 WebSocket - ID: {notification.id}\")\n        \n        from asgiref.sync import async_to_sync\n        from channels.layers import get_channel_layer\n        \n        # 获取 Channel Layer\n        channel_layer = get_channel_layer()\n        \n        if channel_layer is None:\n            logger.warning(\"Channel Layer 未配置，跳过 WebSocket 推送\")\n            return\n        \n        # 构造通知数据\n        data = {\n            'type': 'notification.message',  # 对应 Consumer 的 notification_message 方法\n            'id': notification.id,\n            'category': notification.category,\n            'title': notification.title,\n            'message': notification.message,\n            'level': notification.level,\n            'created_at': notification.created_at.isoformat()\n        }\n        \n        # 发送到通知组（所有连接的客户端）\n        async_to_sync(channel_layer.group_send)(\n            'notifications',  # 组名\n            data\n        )\n        \n        logger.debug(f\"通知推送成功 - ID: {notification.id}\")\n        \n    except ImportError as e:\n        logger.warning(f\"Channels 模块未安装，跳过 WebSocket 推送: {e}\")\n    except Exception as e:\n        logger.warning(f\"WebSocket 推送失败 - ID: {notification.id}: {e}\", exc_info=True)\n"
  },
  {
    "path": "backend/apps/scan/notifications/types.py",
    "content": "\"\"\"通知系统类型定义\"\"\"\n\nfrom django.db import models\n\n\nclass NotificationLevel(models.TextChoices):\n    \"\"\"通知级别\"\"\"\n    LOW = 'low', '低'\n    MEDIUM = 'medium', '中'\n    HIGH = 'high', '高'\n    CRITICAL = 'critical', '严重'\n\n\nclass NotificationCategory(models.TextChoices):\n    \"\"\"通知分类\"\"\"\n    SCAN = 'scan', '扫描任务'\n    VULNERABILITY = 'vulnerability', '漏洞发现'\n    ASSET = 'asset', '资产发现'\n    SYSTEM = 'system', '系统消息'\n"
  },
  {
    "path": "backend/apps/scan/notifications/urls.py",
    "content": "\"\"\"\n通知系统 URL 配置\n\"\"\"\n\nfrom django.urls import path\nfrom . import views\nfrom .views import (\n    NotificationCollectionView,\n    NotificationMarkAllAsReadView,\n    NotificationUnreadCountView,\n)\n\napp_name = 'notifications'\n\nurlpatterns = [\n    # 通知列表\n    path('', NotificationCollectionView.as_view(), name='list'),\n\n    # 未读数量\n    path('unread-count/', NotificationUnreadCountView.as_view(), name='unread-count'),\n\n    # 标记全部已读\n    path('mark-all-as-read/', NotificationMarkAllAsReadView.as_view(), name='mark-all-as-read'),\n]\n\n# WebSocket 实时通知路由在 routing.py 中定义：ws://host/ws/notifications/\n"
  },
  {
    "path": "backend/apps/scan/notifications/views.py",
    "content": "\"\"\"\n通知系统视图 - REST API 和测试接口\n\"\"\"\n\nimport logging\nfrom typing import Any\nfrom django.http import JsonResponse\nfrom django.utils import timezone\nfrom rest_framework import status\nfrom rest_framework.decorators import api_view\nfrom rest_framework.request import Request\nfrom rest_framework.response import Response\nfrom rest_framework.views import APIView\n\nfrom apps.common.pagination import BasePagination\nfrom apps.common.response_helpers import success_response, error_response\nfrom apps.common.error_codes import ErrorCodes\nfrom .models import Notification\nfrom .serializers import NotificationSerializer\nfrom .types import NotificationLevel\nfrom .services import NotificationService, NotificationSettingsService\n\nlogger = logging.getLogger(__name__)\n\n\n\n\n\ndef _parse_bool(value: str | None) -> bool | None:\n    \"\"\"解析字符串为布尔值\n    \n    Args:\n        value: 字符串值，支持 '1', 'true', 'yes' 为 True；'0', 'false', 'no' 为 False\n        \n    Returns:\n        布尔值，或 None（如果无法解析）\n    \"\"\"\n    if value is None:\n        return None\n    value = str(value).strip().lower()\n    if value in {'1', 'true', 'yes'}:\n        return True\n    if value in {'0', 'false', 'no'}:\n        return False\n    return None\n\n\n\nclass NotificationCollectionView(APIView):\n    \"\"\"通知列表\n    \n    支持的方法：\n    - GET: 获取通知列表（支持分页和过滤）\n    \"\"\"\n    pagination_class = BasePagination\n\n    def get(self, request: Request) -> Response:\n        \"\"\"\n        获取通知列表\n        \n        URL: GET /api/notifications/?page=1&pageSize=20&level=info&unread=true\n        \n        查询参数:\n        - page: 页码（默认 1）\n        - pageSize: 每页数量（默认 10，最大 1000）\n        - level: 通知级别过滤（low/medium/high）\n        - unread: 是否未读（true/false）\n        \n        返回:\n        - results: 通知列表\n        - total: 总记录数\n        - page: 当前页码\n        - page_size: 每页大小\n        - total_pages: 总页数\n        \"\"\"\n        service = NotificationService()\n\n        # 按级别过滤\n        level_param = request.query_params.get('level')\n        level_filter = level_param if level_param in NotificationLevel.values else None\n\n        # 按已读状态过滤\n        # unread=true: 仅未读  unread=false: 仅已读  unread=None: 全部\n        unread_param = _parse_bool(request.query_params.get('unread'))\n\n        queryset = service.get_notifications(level=level_filter, unread=unread_param)\n        \n        # 使用通用分页器\n        paginator = self.pagination_class()\n        page_obj = paginator.paginate_queryset(queryset, request)\n        serializer = NotificationSerializer(page_obj, many=True)\n        return paginator.get_paginated_response(serializer.data)\n\n\nclass NotificationUnreadCountView(APIView):\n    \"\"\"获取未读通知数量\n    \n    URL: GET /api/notifications/unread-count/\n    \n    功能:\n    - 返回当前未读通知的数量\n    \n    返回:\n    - count: 未读通知数量\n    \"\"\"\n\n    def get(self, request: Request) -> Response:\n        \"\"\"获取未读通知数量\"\"\"\n        service = NotificationService()\n        count = service.get_unread_count()\n        return success_response(data={'count': count})\n\n\nclass NotificationMarkAllAsReadView(APIView):\n    \"\"\"标记全部通知为已读\n    \n    URL: POST /api/notifications/mark-all-as-read/\n    \n    功能:\n    - 将所有未读通知标记为已读\n    - 更新 read_at 时间戳\n    \n    返回:\n    - updated: 更新的通知数量\n    \"\"\"\n\n    def post(self, request: Request) -> Response:\n        \"\"\"标记全部通知为已读\"\"\"\n        service = NotificationService()\n        updated = service.mark_all_as_read()\n        return success_response(data={'updated': updated})\n\n\nclass NotificationSettingsView(APIView):\n    \"\"\"通知设置 API\n    \n    URL: /api/settings/notifications/\n    \n    支持的方法：\n    - GET: 获取当前通知设置\n    - PUT: 更新通知设置\n    \"\"\"\n    \n    def get(self, request: Request) -> Response:\n        \"\"\"获取通知设置\"\"\"\n        service = NotificationSettingsService()\n        settings = service.get_settings()\n        return success_response(data=settings)\n    \n    def put(self, request: Request) -> Response:\n        \"\"\"更新通知设置\"\"\"\n        service = NotificationSettingsService()\n        settings = service.update_settings(request.data)\n        return success_response(data=settings)\n\n\n# ============================================\n# Worker 回调 API\n# ============================================\n\n@api_view(['POST'])\n# 权限由全局 IsAuthenticatedOrPublic 处理，/api/callbacks/* 需要 Worker API Key 认证\ndef notification_callback(request):\n    \"\"\"\n    接收 Worker 的通知推送请求\n    \n    Worker 容器无法直接访问 Redis，通过此 API 回调让 Server 推送 WebSocket。\n    需要 Worker API Key 认证（X-Worker-API-Key Header）。\n    \n    POST /api/callbacks/notification/\n    {\n        \"id\": 1,\n        \"category\": \"scan\",\n        \"title\": \"扫描开始\",\n        \"message\": \"...\",\n        \"level\": \"info\",\n        \"created_at\": \"2025-01-01T00:00:00\"\n    }\n    \"\"\"\n    try:\n        data = request.data\n        \n        # 验证必要字段\n        required_fields = ['id', 'category', 'title', 'message', 'level', 'created_at']\n        for field in required_fields:\n            if field not in data:\n                return error_response(\n                    code=ErrorCodes.VALIDATION_ERROR,\n                    message=f'Missing field: {field}',\n                    status_code=status.HTTP_400_BAD_REQUEST\n                )\n        \n        # 推送到 WebSocket\n        _push_notification_to_websocket(data)\n        \n        logger.debug(f\"回调通知推送成功 - ID: {data['id']}, Title: {data['title']}\")\n        return success_response(data={'status': 'ok'})\n        \n    except Exception as e:\n        logger.error(f\"回调通知处理失败: {e}\", exc_info=True)\n        return error_response(\n            code=ErrorCodes.SERVER_ERROR,\n            message=str(e),\n            status_code=status.HTTP_500_INTERNAL_SERVER_ERROR\n        )\n\n\ndef _push_notification_to_websocket(data: dict):\n    \"\"\"推送通知到 WebSocket（Server 端使用）\"\"\"\n    from asgiref.sync import async_to_sync\n    from channels.layers import get_channel_layer\n    \n    channel_layer = get_channel_layer()\n    if channel_layer is None:\n        logger.warning(\"Channel Layer 未配置，跳过 WebSocket 推送\")\n        return\n    \n    # 构造通知数据\n    ws_data = {\n        'type': 'notification.message',\n        'id': data['id'],\n        'category': data['category'],\n        'title': data['title'],\n        'message': data['message'],\n        'level': data['level'],\n        'created_at': data['created_at']\n    }\n    \n    # 发送到通知组\n    async_to_sync(channel_layer.group_send)(\n        'notifications',\n        ws_data\n    )\n"
  },
  {
    "path": "backend/apps/scan/orchestrators/__init__.py",
    "content": "\"\"\"\n工作流编排器模块\n\n提供工作流编排相关的类和函数\n\"\"\"\n\nfrom .flow_orchestrator import FlowOrchestrator\n\n__all__ = [\n    'FlowOrchestrator',\n]\n"
  },
  {
    "path": "backend/apps/scan/orchestrators/flow_orchestrator.py",
    "content": "\"\"\"\n工作流编排器\n\n职责：\n- 解析 YAML 配置\n- 检测扫描类型\n- 提供 Flow 函数映射\n- 生成执行计划\n\n注意：本类只负责准备和解析，不执行 Flow\nFlow 的执行由 initiate_scan_flow (Prefect @flow) 负责\n\"\"\"\n\nimport logging\nimport yaml\nfrom typing import Dict, List, Optional, Callable, Any\n\nfrom apps.scan.configs.command_templates import get_supported_scan_types, EXECUTION_STAGES\n\nlogger = logging.getLogger(__name__)\n\n\nclass FlowOrchestrator:\n    \"\"\"\n    工作流编排器\n    \n    负责解析 YAML 配置并生成执行计划，不执行具体的 Flow\n    \"\"\"\n    \n    def __init__(self, engine_config: str):\n        \"\"\"\n        初始化编排器\n        \n        Args:\n            engine_config: YAML 格式的引擎配置字符串\n        \n        Raises:\n            ValueError: 配置为空或解析失败\n        \"\"\"\n        if not engine_config or not engine_config.strip():\n            raise ValueError(\"引擎配置不能为空\")\n        \n        try:\n            self.config = yaml.safe_load(engine_config) or {}\n        except yaml.YAMLError as e:\n            logger.error(f\"引擎配置解析失败: {e}\")\n            raise ValueError(f\"引擎配置解析失败: {e}\")\n        \n        if not self.config:\n            raise ValueError(\"引擎配置为空\")\n        \n        # 检测启用的扫描类型\n        self.scan_types = self._detect_scan_types()\n        \n        # 解析所有扫描类型的工具配置\n        from apps.scan.utils.config_parser import parse_enabled_tools_from_dict\n        self.enabled_tools_by_type = {}\n        for scan_type in self.scan_types:\n            try:\n                enabled_tools = parse_enabled_tools_from_dict(\n                    scan_type=scan_type,\n                    parsed_config=self.config\n                )\n                if enabled_tools:\n                    self.enabled_tools_by_type[scan_type] = enabled_tools\n                    logger.debug(f\"✓ {scan_type}: {len(enabled_tools)} 个启用工具\")\n            except Exception as e:\n                logger.error(f\"解析 {scan_type} 工具配置失败: {e}\")\n                raise\n        \n        logger.info(f\"✓ FlowOrchestrator 初始化完成，{len(self.enabled_tools_by_type)} 个扫描类型有启用的工具\")\n    \n    def _parse_config(self, engine_config: str) -> Dict:\n        \"\"\"\n        解析 YAML 配置\n        \n        Args:\n            engine_config: YAML 格式字符串\n        \n        Returns:\n            dict: 解析后的配置字典\n        \n        Raises:\n            ValueError: 配置为空或解析失败\n        \"\"\"\n        if not engine_config:\n            raise ValueError(\"引擎配置为空，请提供有效的 YAML 配置\")\n        \n        try:\n            config = yaml.safe_load(engine_config)\n            if not config:\n                raise ValueError(\"YAML 配置解析结果为空\")\n            \n            logger.info(f\"YAML 配置解析成功，检测到的 key: {list(config.keys())}\")\n            return config\n            \n        except yaml.YAMLError as e:\n            raise ValueError(f\"YAML 配置解析失败: {e}\")\n    \n    def _detect_scan_types(self) -> List[str]:\n        \"\"\"\n        检测配置中已启用的扫描类型（按 YAML 顺序）\n        \n        Returns:\n            list: 已启用的扫描类型列表\n        \n        Raises:\n            ValueError: 未检测到有效的扫描类型\n        \"\"\"\n        # 保持 YAML 中的顺序，且只包含已启用的类型\n        supported_scan_types = get_supported_scan_types()\n        scan_types = [\n            key for key in self.config.keys() \n            if key in supported_scan_types and self.is_scan_type_enabled(key)\n        ]\n        \n        if not scan_types:\n            raise ValueError(\n                f\"未检测到已启用的扫描类型。\\n\"\n                f\"配置中的 key: {list(self.config.keys())}\\n\"\n                f\"支持的扫描类型: {supported_scan_types}\"\n            )\n        \n        logger.info(f\"检测到已启用的扫描类型（按顺序）: {scan_types}\")\n        return scan_types\n    \n    def is_scan_type_enabled(self, scan_type: str) -> bool:\n        \"\"\"\n        判断指定扫描类型是否启用（存在配置且有启用的工具）\n        \n        Args:\n            scan_type: 扫描类型\n            \n        Returns:\n            bool: 是否启用\n        \"\"\"\n        if scan_type not in self.config:\n            return False\n            \n        scan_config = self.config.get(scan_type, {})\n        \n        # 子域名发现使用 passive_tools 结构\n        if scan_type == 'subdomain_discovery':\n            passive_tools = scan_config.get('passive_tools', {})\n            for tool_config in passive_tools.values():\n                if isinstance(tool_config, dict) and tool_config.get('enabled', False):\n                    return True\n            return False\n        \n        # 其他扫描类型（包括 screenshot）：检查 tools\n        tools = scan_config.get('tools', {})\n        for tool_config in tools.values():\n            if isinstance(tool_config, dict) and tool_config.get('enabled', False):\n                return True\n                \n        return False\n\n    def get_execution_stages(self):\n        \"\"\"\n        迭代器：获取所有执行阶段\n        \n        Yields:\n            tuple: (mode, enabled_flows)\n            - mode: 执行模式（'sequential' 或 'parallel'）\n            - enabled_flows: 该阶段中已启用的扫描类型列表\n            \n        Example:\n            for mode, flows in orchestrator.get_execution_stages():\n                if mode == 'sequential':\n                    for flow in flows:\n                        execute_flow(flow)\n                else:  # parallel\n                    execute_parallel(flows)\n        \"\"\"\n        for stage in EXECUTION_STAGES:\n            # 筛选出已启用的流程\n            enabled_flows = [\n                flow for flow in stage['flows'] \n                if flow in self.scan_types\n            ]\n            \n            # 只返回有启用流程的阶段\n            if enabled_flows:\n                logger.debug(f\"阶段 {stage['mode']}: {enabled_flows}\")\n                yield stage['mode'], enabled_flows\n\n    def get_flow_function(self, scan_type: str) -> Optional[Callable]:\n        \"\"\"\n        获取指定扫描类型的 Flow 函数（延迟导入）\n        \n        Args:\n            scan_type: 扫描类型\n        \n        Returns:\n            Callable: Flow 函数，如果未实现则返回 None\n        \"\"\"\n        if scan_type == 'subdomain_discovery':\n            from apps.scan.flows.subdomain_discovery_flow import subdomain_discovery_flow\n            return subdomain_discovery_flow\n        \n        elif scan_type == 'port_scan':\n            from apps.scan.flows.port_scan_flow import port_scan_flow\n            return port_scan_flow\n        \n        elif scan_type == 'site_scan':\n            from apps.scan.flows.site_scan_flow import site_scan_flow\n            return site_scan_flow\n        \n        elif scan_type == 'fingerprint_detect':\n            from apps.scan.flows.fingerprint_detect_flow import fingerprint_detect_flow\n            return fingerprint_detect_flow\n        \n        elif scan_type == 'directory_scan':\n            from apps.scan.flows.directory_scan_flow import directory_scan_flow\n            return directory_scan_flow\n\n        elif scan_type == 'url_fetch':\n            from apps.scan.flows.url_fetch import url_fetch_flow\n            return url_fetch_flow\n        \n        elif scan_type == 'vuln_scan':\n            from apps.scan.flows.vuln_scan import vuln_scan_flow\n            return vuln_scan_flow\n        \n        elif scan_type == 'screenshot':\n            from apps.scan.flows.screenshot_flow import screenshot_flow\n            return screenshot_flow\n        \n        else:\n            logger.warning(f\"未实现的扫描类型: {scan_type}\")\n            return None\n\n"
  },
  {
    "path": "backend/apps/scan/providers/__init__.py",
    "content": "\"\"\"\n扫描目标提供者模块\n\n提供统一的目标获取接口，支持多种数据源：\n- DatabaseTargetProvider: 从数据库查询（完整扫描）\n- ListTargetProvider: 使用内存列表（快速扫描阶段1）\n- SnapshotTargetProvider: 从快照表读取（快速扫描阶段2+）\n- PipelineTargetProvider: 使用管道输出（Phase 2）\n\n使用方式：\n    from apps.scan.providers import (\n        DatabaseTargetProvider,\n        ListTargetProvider,\n        SnapshotTargetProvider,\n        ProviderContext\n    )\n    \n    # 数据库模式（完整扫描）\n    provider = DatabaseTargetProvider(target_id=123)\n    \n    # 列表模式（快速扫描阶段1）\n    context = ProviderContext(target_id=1, scan_id=100)\n    provider = ListTargetProvider(\n        targets=[\"a.test.com\"],\n        context=context\n    )\n    \n    # 快照模式（快速扫描阶段2+）\n    context = ProviderContext(target_id=1, scan_id=100)\n    provider = SnapshotTargetProvider(\n        scan_id=100,\n        snapshot_type=\"subdomain\",\n        context=context\n    )\n    \n    # 使用 Provider\n    for host in provider.iter_hosts():\n        scan(host)\n\"\"\"\n\nfrom .base import TargetProvider, ProviderContext\nfrom .list_provider import ListTargetProvider\nfrom .database_provider import DatabaseTargetProvider\nfrom .snapshot_provider import SnapshotTargetProvider, SnapshotType\nfrom .pipeline_provider import PipelineTargetProvider, StageOutput\n\n__all__ = [\n    'TargetProvider',\n    'ProviderContext',\n    'ListTargetProvider',\n    'DatabaseTargetProvider',\n    'SnapshotTargetProvider',\n    'SnapshotType',\n    'PipelineTargetProvider',\n    'StageOutput',\n]\n"
  },
  {
    "path": "backend/apps/scan/providers/base.py",
    "content": "\"\"\"\n扫描目标提供者基础模块\n\n定义 ProviderContext 数据类和 TargetProvider 抽象基类。\n\"\"\"\n\nimport ipaddress\nimport logging\nfrom abc import ABC, abstractmethod\nfrom dataclasses import dataclass\nfrom typing import TYPE_CHECKING, Iterator, Optional\n\nif TYPE_CHECKING:\n    from apps.common.utils import BlacklistFilter\n\nlogger = logging.getLogger(__name__)\n\n\n@dataclass\nclass ProviderContext:\n    \"\"\"\n    Provider 上下文，携带元数据\n\n    Attributes:\n        target_id: 关联的 Target ID（用于结果保存），None 表示临时扫描（不保存）\n        scan_id: 扫描任务 ID\n    \"\"\"\n    target_id: Optional[int] = None\n    scan_id: Optional[int] = None\n\n\nclass TargetProvider(ABC):\n    \"\"\"\n    扫描目标提供者抽象基类\n\n    职责：\n    - 提供扫描目标（域名、IP、URL 等）的迭代器\n    - 提供黑名单过滤器\n    - 携带上下文信息（target_id, scan_id 等）\n    - 自动展开 CIDR（子类无需关心）\n\n    使用方式：\n        provider = create_target_provider(target_id=123)\n        for host in provider.iter_hosts():\n            print(host)\n    \"\"\"\n\n    def __init__(self, context: Optional[ProviderContext] = None):\n        self._context = context or ProviderContext()\n\n    @property\n    def context(self) -> ProviderContext:\n        \"\"\"返回 Provider 上下文\"\"\"\n        return self._context\n\n    @staticmethod\n    def _expand_host(host: str) -> Iterator[str]:\n        \"\"\"\n        展开主机（如果是 CIDR 则展开为多个 IP，否则直接返回）\n\n        示例：\n            \"192.168.1.0/30\" → \"192.168.1.1\", \"192.168.1.2\"\n            \"192.168.1.1\" → \"192.168.1.1\"\n            \"example.com\" → \"example.com\"\n        \"\"\"\n        from apps.common.validators import detect_target_type\n        from apps.targets.models import Target\n\n        host = host.strip()\n        if not host:\n            return\n\n        try:\n            target_type = detect_target_type(host)\n\n            if target_type == Target.TargetType.CIDR:\n                network = ipaddress.ip_network(host, strict=False)\n                if network.num_addresses == 1:\n                    yield str(network.network_address)\n                else:\n                    yield from (str(ip) for ip in network.hosts())\n            elif target_type in (Target.TargetType.IP, Target.TargetType.DOMAIN):\n                yield host\n        except ValueError as e:\n            logger.warning(\"跳过无效的主机格式 '%s': %s\", host, str(e))\n\n    def iter_hosts(self) -> Iterator[str]:\n        \"\"\"迭代主机列表（域名/IP），自动展开 CIDR\"\"\"\n        for host in self._iter_raw_hosts():\n            yield from self._expand_host(host)\n\n    @abstractmethod\n    def _iter_raw_hosts(self) -> Iterator[str]:\n        \"\"\"迭代原始主机列表（可能包含 CIDR），子类实现\"\"\"\n        pass\n\n    @abstractmethod\n    def iter_urls(self) -> Iterator[str]:\n        \"\"\"迭代 URL 列表\"\"\"\n        pass\n\n    @abstractmethod\n    def get_blacklist_filter(self) -> Optional['BlacklistFilter']:\n        \"\"\"获取黑名单过滤器，返回 None 表示不过滤\"\"\"\n        pass\n\n    @property\n    def target_id(self) -> Optional[int]:\n        \"\"\"返回关联的 target_id，临时扫描返回 None\"\"\"\n        return self._context.target_id\n\n    @property\n    def scan_id(self) -> Optional[int]:\n        \"\"\"返回关联的 scan_id\"\"\"\n        return self._context.scan_id\n"
  },
  {
    "path": "backend/apps/scan/providers/database_provider.py",
    "content": "\"\"\"\n数据库目标提供者模块\n\n提供基于数据库查询的目标提供者实现。\n\"\"\"\n\nimport logging\nfrom typing import TYPE_CHECKING, Iterator, Optional\n\nfrom .base import ProviderContext, TargetProvider\n\nif TYPE_CHECKING:\n    from apps.common.utils import BlacklistFilter\n\nlogger = logging.getLogger(__name__)\n\n\nclass DatabaseTargetProvider(TargetProvider):\n    \"\"\"\n    数据库目标提供者 - 从 Target 表及关联资产表查询\n\n    数据来源：\n    - iter_hosts(): 根据 Target 类型返回域名/IP\n    - iter_urls(): WebSite/Endpoint 表，带回退链\n\n    使用方式：\n        provider = DatabaseTargetProvider(target_id=123)\n        for host in provider.iter_hosts():\n            scan(host)\n    \"\"\"\n\n    def __init__(self, target_id: int, context: Optional[ProviderContext] = None):\n        ctx = context or ProviderContext()\n        ctx.target_id = target_id\n        super().__init__(ctx)\n        self._blacklist_filter: Optional['BlacklistFilter'] = None\n\n    def iter_hosts(self) -> Iterator[str]:\n        \"\"\"从数据库查询主机列表，自动展开 CIDR 并应用黑名单过滤\"\"\"\n        blacklist = self.get_blacklist_filter()\n\n        for host in self._iter_raw_hosts():\n            for expanded_host in self._expand_host(host):\n                if not blacklist or blacklist.is_allowed(expanded_host):\n                    yield expanded_host\n\n    def _iter_raw_hosts(self) -> Iterator[str]:\n        \"\"\"从数据库查询原始主机列表（可能包含 CIDR）\"\"\"\n        from apps.asset.services.asset.subdomain_service import SubdomainService\n        from apps.targets.models import Target\n        from apps.targets.services import TargetService\n\n        target = TargetService().get_target(self.target_id)\n        if not target:\n            logger.warning(\"Target ID %d 不存在\", self.target_id)\n            return\n\n        if target.type == Target.TargetType.DOMAIN:\n            yield target.name\n            for domain in SubdomainService().iter_subdomain_names_by_target(\n                target_id=self.target_id,\n                chunk_size=1000\n            ):\n                if domain != target.name:\n                    yield domain\n\n        elif target.type in (Target.TargetType.IP, Target.TargetType.CIDR):\n            yield target.name\n\n    def iter_urls(self) -> Iterator[str]:\n        \"\"\"从数据库查询 URL 列表，使用回退链：Endpoint → WebSite → Default\"\"\"\n        from apps.scan.services.target_export_service import (\n            DataSource,\n            _iter_urls_with_fallback,\n        )\n\n        blacklist = self.get_blacklist_filter()\n\n        for url, _ in _iter_urls_with_fallback(\n            target_id=self.target_id,\n            sources=[DataSource.ENDPOINT, DataSource.WEBSITE, DataSource.DEFAULT],\n            blacklist_filter=blacklist\n        ):\n            yield url\n\n    def get_blacklist_filter(self) -> Optional['BlacklistFilter']:\n        \"\"\"获取黑名单过滤器（延迟加载）\"\"\"\n        if self._blacklist_filter is None:\n            from apps.common.services import BlacklistService\n            from apps.common.utils import BlacklistFilter\n            rules = BlacklistService().get_rules(self.target_id)\n            self._blacklist_filter = BlacklistFilter(rules)\n        return self._blacklist_filter\n"
  },
  {
    "path": "backend/apps/scan/providers/list_provider.py",
    "content": "\"\"\"\n列表目标提供者模块\n\n提供基于内存列表的目标提供者实现。\n\"\"\"\n\nfrom typing import Iterator, Optional, List\n\nfrom .base import TargetProvider, ProviderContext\n\n\nclass ListTargetProvider(TargetProvider):\n    \"\"\"\n    列表目标提供者 - 直接使用内存中的列表\n    \n    用于快速扫描、临时扫描等场景，只扫描用户指定的目标。\n    \n    特点：\n    - 不查询数据库\n    - 不应用黑名单过滤（用户明确指定的目标）\n    - 不关联 target_id（由调用方负责创建 Target）\n    - 自动检测输入类型（URL/域名/IP/CIDR）\n    - 自动展开 CIDR\n    \n    使用方式：\n        # 快速扫描：用户提供目标，自动识别类型\n        provider = ListTargetProvider(targets=[\n            \"example.com\",              # 域名\n            \"192.168.1.0/24\",           # CIDR（自动展开）\n            \"https://api.example.com\"   # URL\n        ])\n        for host in provider.iter_hosts():\n            scan(host)\n    \"\"\"\n    \n    def __init__(\n        self,\n        targets: Optional[List[str]] = None,\n        context: Optional[ProviderContext] = None\n    ):\n        \"\"\"\n        初始化列表目标提供者\n        \n        Args:\n            targets: 目标列表（自动识别类型：URL/域名/IP/CIDR）\n            context: Provider 上下文\n        \"\"\"\n        from apps.common.validators import detect_input_type\n        \n        ctx = context or ProviderContext()\n        super().__init__(ctx)\n        \n        # 自动分类目标\n        self._hosts = []\n        self._urls = []\n        \n        if targets:\n            for target in targets:\n                target = target.strip()\n                if not target:\n                    continue\n                \n                try:\n                    input_type = detect_input_type(target)\n                    if input_type == 'url':\n                        self._urls.append(target)\n                    else:\n                        # domain/ip/cidr 都作为 host\n                        self._hosts.append(target)\n                except ValueError:\n                    # 无法识别类型，默认作为 host\n                    self._hosts.append(target)\n    \n    def _iter_raw_hosts(self) -> Iterator[str]:\n        \"\"\"迭代原始主机列表（可能包含 CIDR）\"\"\"\n        yield from self._hosts\n    \n    def iter_urls(self) -> Iterator[str]:\n        \"\"\"迭代 URL 列表\"\"\"\n        yield from self._urls\n    \n    def get_blacklist_filter(self) -> None:\n        \"\"\"列表模式不使用黑名单过滤\"\"\"\n        return None\n"
  },
  {
    "path": "backend/apps/scan/providers/pipeline_provider.py",
    "content": "\"\"\"\n管道目标提供者模块\n\n提供基于管道阶段输出的目标提供者实现。\n用于 Phase 2 管道模式的阶段间数据传递。\n\"\"\"\n\nfrom dataclasses import dataclass, field\nfrom typing import Iterator, Optional, List, Dict, Any\n\nfrom .base import TargetProvider, ProviderContext\n\n\n@dataclass\nclass StageOutput:\n    \"\"\"\n    阶段输出数据\n    \n    用于在管道阶段之间传递数据。\n    \n    Attributes:\n        hosts: 主机列表（域名/IP）\n        urls: URL 列表\n        new_targets: 新发现的目标列表\n        stats: 统计信息\n        success: 是否成功\n        error: 错误信息\n    \"\"\"\n    hosts: List[str] = field(default_factory=list)\n    urls: List[str] = field(default_factory=list)\n    new_targets: List[str] = field(default_factory=list)\n    stats: Dict[str, Any] = field(default_factory=dict)\n    success: bool = True\n    error: Optional[str] = None\n\n\nclass PipelineTargetProvider(TargetProvider):\n    \"\"\"\n    管道目标提供者 - 使用上一阶段的输出\n    \n    用于 Phase 2 管道模式的阶段间数据传递。\n    \n    特点：\n    - 不查询数据库\n    - 不应用黑名单过滤（数据已在上一阶段过滤）\n    - 直接使用 StageOutput 中的数据\n    \n    使用方式（Phase 2）：\n        stage1_output = stage1.run(input)\n        provider = PipelineTargetProvider(\n            previous_output=stage1_output,\n            target_id=123\n        )\n        for host in provider.iter_hosts():\n            stage2.scan(host)\n    \"\"\"\n    \n    def __init__(\n        self,\n        previous_output: StageOutput,\n        target_id: Optional[int] = None,\n        context: Optional[ProviderContext] = None\n    ):\n        \"\"\"\n        初始化管道目标提供者\n        \n        Args:\n            previous_output: 上一阶段的输出\n            target_id: 可选，关联到某个 Target（用于保存结果）\n            context: Provider 上下文\n        \"\"\"\n        ctx = context or ProviderContext(target_id=target_id)\n        super().__init__(ctx)\n        self._previous_output = previous_output\n    \n    def _iter_raw_hosts(self) -> Iterator[str]:\n        \"\"\"迭代上一阶段输出的原始主机（可能包含 CIDR）\"\"\"\n        yield from self._previous_output.hosts\n    \n    def iter_urls(self) -> Iterator[str]:\n        \"\"\"迭代上一阶段输出的 URL\"\"\"\n        yield from self._previous_output.urls\n    \n    def get_blacklist_filter(self) -> None:\n        \"\"\"管道传递的数据已经过滤过了\"\"\"\n        return None\n    \n    @property\n    def previous_output(self) -> StageOutput:\n        \"\"\"返回上一阶段的输出\"\"\"\n        return self._previous_output\n"
  },
  {
    "path": "backend/apps/scan/providers/snapshot_provider.py",
    "content": "\"\"\"\n快照目标提供者模块\n\n提供基于快照表的目标提供者实现。\n用于快速扫描的阶段间数据传递。\n\"\"\"\n\nimport logging\nfrom typing import Iterator, Optional, Literal\n\nfrom .base import TargetProvider, ProviderContext\n\nlogger = logging.getLogger(__name__)\n\n# 快照类型定义\nSnapshotType = Literal[\"subdomain\", \"website\", \"endpoint\", \"host_port\"]\n\n\nclass SnapshotTargetProvider(TargetProvider):\n    \"\"\"\n    快照目标提供者 - 从快照表读取本次扫描的数据\n    \n    用于快速扫描的阶段间数据传递，解决精确扫描控制问题。\n    \n    核心价值：\n    - 只返回本次扫描（scan_id）发现的资产\n    - 避免扫描历史数据（DatabaseTargetProvider 会扫描所有历史资产）\n    \n    特点：\n    - 通过 scan_id 过滤快照表\n    - 不应用黑名单过滤（数据已在上一阶段过滤）\n    - 支持多种快照类型（subdomain/website/endpoint/host_port）\n    \n    使用场景：\n        # 快速扫描流程\n        用户输入: a.test.com\n        创建 Target: test.com (id=1)\n        创建 Scan: scan_id=100\n        \n        # 阶段1: 子域名发现\n        provider = ListTargetProvider(\n            targets=[\"a.test.com\"],\n            context=ProviderContext(target_id=1, scan_id=100)\n        )\n        # 发现: b.a.test.com, c.a.test.com\n        # 保存: SubdomainSnapshot(scan_id=100) + Subdomain(target_id=1)\n        \n        # 阶段2: 端口扫描\n        provider = SnapshotTargetProvider(\n            scan_id=100,\n            snapshot_type=\"subdomain\",\n            context=ProviderContext(target_id=1, scan_id=100)\n        )\n        # 只返回: b.a.test.com, c.a.test.com（本次扫描发现的）\n        # 不返回: www.test.com, api.test.com（历史数据）\n        \n        # 阶段3: 网站扫描\n        provider = SnapshotTargetProvider(\n            scan_id=100,\n            snapshot_type=\"host_port\",\n            context=ProviderContext(target_id=1, scan_id=100)\n        )\n        # 只返回本次扫描发现的 IP:Port\n    \"\"\"\n    \n    def __init__(\n        self,\n        scan_id: int,\n        snapshot_type: SnapshotType,\n        context: Optional[ProviderContext] = None\n    ):\n        \"\"\"\n        初始化快照目标提供者\n        \n        Args:\n            scan_id: 扫描任务 ID（必需）\n            snapshot_type: 快照类型\n                - \"subdomain\": 子域名快照（SubdomainSnapshot）\n                - \"website\": 网站快照（WebsiteSnapshot）\n                - \"endpoint\": 端点快照（EndpointSnapshot）\n                - \"host_port\": 主机端口映射快照（HostPortMappingSnapshot）\n            context: Provider 上下文\n        \"\"\"\n        ctx = context or ProviderContext()\n        ctx.scan_id = scan_id\n        super().__init__(ctx)\n        self._scan_id = scan_id\n        self._snapshot_type = snapshot_type\n    \n    def _iter_raw_hosts(self) -> Iterator[str]:\n        \"\"\"\n        从快照表迭代主机列表\n        \n        根据 snapshot_type 选择不同的快照表：\n        - subdomain: SubdomainSnapshot.name\n        - host_port: HostPortMappingSnapshot.host (返回 host:port 格式，不经过验证)\n        \"\"\"\n        if self._snapshot_type == \"subdomain\":\n            from apps.asset.services.snapshot import SubdomainSnapshotsService\n            service = SubdomainSnapshotsService()\n            yield from service.iter_subdomain_names_by_scan(\n                scan_id=self._scan_id,\n                chunk_size=1000\n            )\n        \n        elif self._snapshot_type == \"host_port\":\n            # host_port 类型不使用 _iter_raw_hosts，直接在 iter_hosts 中处理\n            # 这里返回空，避免被基类的 iter_hosts 调用\n            return\n        \n        else:\n            # 其他类型暂不支持 iter_hosts\n            logger.warning(\n                \"快照类型 '%s' 不支持 iter_hosts，返回空迭代器\",\n                self._snapshot_type\n            )\n            return\n    \n    def iter_hosts(self) -> Iterator[str]:\n        \"\"\"\n        迭代主机列表\n        \n        对于 host_port 类型，返回 host:port 格式，不经过 CIDR 展开验证\n        \"\"\"\n        if self._snapshot_type == \"host_port\":\n            # host_port 类型直接返回 host:port，不经过 _expand_host 验证\n            from apps.asset.services.snapshot import HostPortMappingSnapshotsService\n            service = HostPortMappingSnapshotsService()\n            queryset = service.get_by_scan(scan_id=self._scan_id)\n            for mapping in queryset.iterator(chunk_size=1000):\n                yield f\"{mapping.host}:{mapping.port}\"\n        else:\n            # 其他类型使用基类的 iter_hosts（会调用 _iter_raw_hosts 并展开 CIDR）\n            yield from super().iter_hosts()\n    \n    def iter_urls(self) -> Iterator[str]:\n        \"\"\"\n        从快照表迭代 URL 列表\n        \n        根据 snapshot_type 选择不同的快照表：\n        - website: WebsiteSnapshot.url\n        - endpoint: EndpointSnapshot.url\n        \"\"\"\n        if self._snapshot_type == \"website\":\n            from apps.asset.services.snapshot import WebsiteSnapshotsService\n            service = WebsiteSnapshotsService()\n            yield from service.iter_website_urls_by_scan(\n                scan_id=self._scan_id,\n                chunk_size=1000\n            )\n        \n        elif self._snapshot_type == \"endpoint\":\n            from apps.asset.services.snapshot import EndpointSnapshotsService\n            service = EndpointSnapshotsService()\n            # 从快照表获取端点 URL\n            queryset = service.get_by_scan(scan_id=self._scan_id)\n            for endpoint in queryset.iterator(chunk_size=1000):\n                yield endpoint.url\n        \n        else:\n            # 其他类型暂不支持 iter_urls\n            logger.warning(\n                \"快照类型 '%s' 不支持 iter_urls，返回空迭代器\",\n                self._snapshot_type\n            )\n            return\n    \n    def get_blacklist_filter(self) -> None:\n        \"\"\"快照数据已在上一阶段过滤过了\"\"\"\n        return None\n    \n    @property\n    def snapshot_type(self) -> SnapshotType:\n        \"\"\"返回快照类型\"\"\"\n        return self._snapshot_type\n"
  },
  {
    "path": "backend/apps/scan/providers/tests/__init__.py",
    "content": "\"\"\"\n扫描目标提供者测试模块\n\"\"\"\n"
  },
  {
    "path": "backend/apps/scan/providers/tests/test_common_properties.py",
    "content": "\"\"\"\n通用属性测试\n\n包含跨多个 Provider 的通用属性测试：\n- Property 4: Context Propagation\n- Property 5: Non-Database Provider Blacklist Filter\n- Property 7: CIDR Expansion Consistency\n\"\"\"\n\nimport pytest\nfrom hypothesis import given, strategies as st, settings\nfrom ipaddress import IPv4Network\n\nfrom apps.scan.providers import (\n    ProviderContext,\n    ListTargetProvider,\n    DatabaseTargetProvider,\n    PipelineTargetProvider,\n    SnapshotTargetProvider\n)\nfrom apps.scan.providers.pipeline_provider import StageOutput\n\n\nclass TestContextPropagation:\n    \"\"\"\n    Property 4: Context Propagation\n    \n    *For any* ProviderContext，传入 Provider 构造函数后，\n    Provider 的 target_id 和 scan_id 属性应该与 context 中的值一致。\n    \n    **Validates: Requirements 1.3, 1.5, 7.4, 7.5**\n    \"\"\"\n    \n    @given(\n        target_id=st.integers(min_value=1, max_value=10000),\n        scan_id=st.integers(min_value=1, max_value=10000)\n    )\n    @settings(max_examples=100)\n    def test_property_4_list_provider_context_propagation(self, target_id, scan_id):\n        \"\"\"\n        Property 4: Context Propagation (ListTargetProvider)\n        \n        Feature: scan-target-provider, Property 4: Context Propagation\n        **Validates: Requirements 1.3, 1.5, 7.4, 7.5**\n        \"\"\"\n        ctx = ProviderContext(target_id=target_id, scan_id=scan_id)\n        provider = ListTargetProvider(targets=[\"example.com\"], context=ctx)\n        \n        assert provider.target_id == target_id\n        assert provider.scan_id == scan_id\n        assert provider.context.target_id == target_id\n        assert provider.context.scan_id == scan_id\n    \n    @given(\n        target_id=st.integers(min_value=1, max_value=10000),\n        scan_id=st.integers(min_value=1, max_value=10000)\n    )\n    @settings(max_examples=100)\n    def test_property_4_database_provider_context_propagation(self, target_id, scan_id):\n        \"\"\"\n        Property 4: Context Propagation (DatabaseTargetProvider)\n        \n        Feature: scan-target-provider, Property 4: Context Propagation\n        **Validates: Requirements 1.3, 1.5, 7.4, 7.5**\n        \"\"\"\n        ctx = ProviderContext(target_id=999, scan_id=scan_id)\n        # DatabaseTargetProvider 会覆盖 context 中的 target_id\n        provider = DatabaseTargetProvider(target_id=target_id, context=ctx)\n        \n        assert provider.target_id == target_id  # 使用构造函数参数\n        assert provider.scan_id == scan_id  # 使用 context 中的值\n        assert provider.context.target_id == target_id\n        assert provider.context.scan_id == scan_id\n    \n    @given(\n        target_id=st.integers(min_value=1, max_value=10000),\n        scan_id=st.integers(min_value=1, max_value=10000)\n    )\n    @settings(max_examples=100)\n    def test_property_4_pipeline_provider_context_propagation(self, target_id, scan_id):\n        \"\"\"\n        Property 4: Context Propagation (PipelineTargetProvider)\n        \n        Feature: scan-target-provider, Property 4: Context Propagation\n        **Validates: Requirements 1.3, 1.5, 7.4, 7.5**\n        \"\"\"\n        ctx = ProviderContext(target_id=target_id, scan_id=scan_id)\n        stage_output = StageOutput(hosts=[\"example.com\"])\n        provider = PipelineTargetProvider(previous_output=stage_output, context=ctx)\n        \n        assert provider.target_id == target_id\n        assert provider.scan_id == scan_id\n        assert provider.context.target_id == target_id\n        assert provider.context.scan_id == scan_id\n    \n    @given(\n        target_id=st.integers(min_value=1, max_value=10000),\n        scan_id=st.integers(min_value=1, max_value=10000)\n    )\n    @settings(max_examples=100)\n    def test_property_4_snapshot_provider_context_propagation(self, target_id, scan_id):\n        \"\"\"\n        Property 4: Context Propagation (SnapshotTargetProvider)\n        \n        Feature: scan-target-provider, Property 4: Context Propagation\n        **Validates: Requirements 1.3, 1.5, 7.4, 7.5**\n        \"\"\"\n        ctx = ProviderContext(target_id=target_id, scan_id=999)\n        # SnapshotTargetProvider 会覆盖 context 中的 scan_id\n        provider = SnapshotTargetProvider(\n            scan_id=scan_id,\n            snapshot_type=\"subdomain\",\n            context=ctx\n        )\n        \n        assert provider.target_id == target_id  # 使用 context 中的值\n        assert provider.scan_id == scan_id  # 使用构造函数参数\n        assert provider.context.target_id == target_id\n        assert provider.context.scan_id == scan_id\n\n\nclass TestNonDatabaseProviderBlacklistFilter:\n    \"\"\"\n    Property 5: Non-Database Provider Blacklist Filter\n    \n    *For any* ListTargetProvider 或 PipelineTargetProvider 实例，\n    get_blacklist_filter() 方法应该返回 None。\n    \n    **Validates: Requirements 3.4, 9.4, 9.5**\n    \"\"\"\n    \n    @given(targets=st.lists(st.text(min_size=1, max_size=20), max_size=10))\n    @settings(max_examples=100)\n    def test_property_5_list_provider_no_blacklist(self, targets):\n        \"\"\"\n        Property 5: Non-Database Provider Blacklist Filter (ListTargetProvider)\n        \n        Feature: scan-target-provider, Property 5: Non-Database Provider Blacklist Filter\n        **Validates: Requirements 3.4, 9.4, 9.5**\n        \"\"\"\n        provider = ListTargetProvider(targets=targets)\n        assert provider.get_blacklist_filter() is None\n    \n    @given(hosts=st.lists(st.text(min_size=1, max_size=20), max_size=10))\n    @settings(max_examples=100)\n    def test_property_5_pipeline_provider_no_blacklist(self, hosts):\n        \"\"\"\n        Property 5: Non-Database Provider Blacklist Filter (PipelineTargetProvider)\n        \n        Feature: scan-target-provider, Property 5: Non-Database Provider Blacklist Filter\n        **Validates: Requirements 3.4, 9.4, 9.5**\n        \"\"\"\n        stage_output = StageOutput(hosts=hosts)\n        provider = PipelineTargetProvider(previous_output=stage_output)\n        assert provider.get_blacklist_filter() is None\n    \n    def test_property_5_snapshot_provider_no_blacklist(self):\n        \"\"\"\n        Property 5: Non-Database Provider Blacklist Filter (SnapshotTargetProvider)\n        \n        Feature: scan-target-provider, Property 5: Non-Database Provider Blacklist Filter\n        **Validates: Requirements 3.4, 9.4, 9.5**\n        \"\"\"\n        provider = SnapshotTargetProvider(scan_id=1, snapshot_type=\"subdomain\")\n        assert provider.get_blacklist_filter() is None\n\n\nclass TestCIDRExpansionConsistency:\n    \"\"\"\n    Property 7: CIDR Expansion Consistency\n    \n    *For any* CIDR 字符串（如 \"192.168.1.0/24\"），所有 Provider 的 iter_hosts() \n    方法应该将其展开为相同的单个 IP 地址列表。\n    \n    **Validates: Requirements 1.1, 3.6**\n    \"\"\"\n    \n    @given(\n        # 生成小的 CIDR 范围以避免测试超时\n        network_prefix=st.integers(min_value=1, max_value=254),\n        cidr_suffix=st.integers(min_value=28, max_value=30)  # /28 = 16 IPs, /30 = 4 IPs\n    )\n    @settings(max_examples=50, deadline=None)\n    def test_property_7_cidr_expansion_consistency(self, network_prefix, cidr_suffix):\n        \"\"\"\n        Property 7: CIDR Expansion Consistency\n        \n        Feature: scan-target-provider, Property 7: CIDR Expansion Consistency\n        **Validates: Requirements 1.1, 3.6**\n        \n        For any CIDR string, all Providers should expand it to the same IP list.\n        \"\"\"\n        cidr = f\"192.168.{network_prefix}.0/{cidr_suffix}\"\n        \n        # 计算预期的 IP 列表\n        network = IPv4Network(cidr, strict=False)\n        # 排除网络地址和广播地址\n        expected_ips = [str(ip) for ip in network.hosts()]\n        \n        # 如果 CIDR 太小（/31 或 /32），使用所有地址\n        if not expected_ips:\n            expected_ips = [str(ip) for ip in network]\n        \n        # ListTargetProvider\n        list_provider = ListTargetProvider(targets=[cidr])\n        list_result = list(list_provider.iter_hosts())\n        \n        # PipelineTargetProvider\n        stage_output = StageOutput(hosts=[cidr])\n        pipeline_provider = PipelineTargetProvider(previous_output=stage_output)\n        pipeline_result = list(pipeline_provider.iter_hosts())\n        \n        # 验证：所有 Provider 展开的结果应该一致\n        assert list_result == expected_ips, f\"ListProvider CIDR expansion mismatch for {cidr}\"\n        assert pipeline_result == expected_ips, f\"PipelineProvider CIDR expansion mismatch for {cidr}\"\n        assert list_result == pipeline_result, f\"Providers produce different results for {cidr}\"\n    \n    def test_cidr_expansion_with_multiple_cidrs(self):\n        \"\"\"测试多个 CIDR 的展开一致性\"\"\"\n        cidrs = [\"192.168.1.0/30\", \"10.0.0.0/30\"]\n        \n        # 计算预期结果\n        expected_ips = []\n        for cidr in cidrs:\n            network = IPv4Network(cidr, strict=False)\n            expected_ips.extend([str(ip) for ip in network.hosts()])\n        \n        # ListTargetProvider\n        list_provider = ListTargetProvider(targets=cidrs)\n        list_result = list(list_provider.iter_hosts())\n        \n        # PipelineTargetProvider\n        stage_output = StageOutput(hosts=cidrs)\n        pipeline_provider = PipelineTargetProvider(previous_output=stage_output)\n        pipeline_result = list(pipeline_provider.iter_hosts())\n        \n        # 验证\n        assert list_result == expected_ips\n        assert pipeline_result == expected_ips\n        assert list_result == pipeline_result\n    \n    def test_mixed_hosts_and_cidrs(self):\n        \"\"\"测试混合主机和 CIDR 的处理\"\"\"\n        targets = [\"example.com\", \"192.168.1.0/30\", \"test.com\"]\n        \n        # 计算预期结果\n        network = IPv4Network(\"192.168.1.0/30\", strict=False)\n        cidr_ips = [str(ip) for ip in network.hosts()]\n        expected = [\"example.com\"] + cidr_ips + [\"test.com\"]\n        \n        # ListTargetProvider\n        list_provider = ListTargetProvider(targets=targets)\n        list_result = list(list_provider.iter_hosts())\n        \n        # 验证\n        assert list_result == expected\n"
  },
  {
    "path": "backend/apps/scan/providers/tests/test_database_provider.py",
    "content": "\"\"\"\nDatabaseTargetProvider 属性测试\n\nProperty 7: DatabaseTargetProvider Blacklist Application\n*For any* 带有黑名单规则的 target_id，DatabaseTargetProvider 的 iter_hosts() 和 iter_urls() \n应该过滤掉匹配黑名单规则的目标。\n\n**Validates: Requirements 2.3, 10.1, 10.2, 10.3**\n\"\"\"\n\nimport pytest\nfrom unittest.mock import patch, MagicMock\nfrom hypothesis import given, strategies as st, settings\n\nfrom apps.scan.providers.database_provider import DatabaseTargetProvider\nfrom apps.scan.providers.base import ProviderContext\n\n\n# 生成有效域名的策略\ndef valid_domain_strategy():\n    \"\"\"生成有效的域名\"\"\"\n    label = st.text(\n        alphabet=st.characters(whitelist_categories=('L',), min_codepoint=97, max_codepoint=122),\n        min_size=2,\n        max_size=10\n    )\n    return st.builds(\n        lambda a, b, c: f\"{a}.{b}.{c}\",\n        label, label, st.sampled_from(['com', 'net', 'org', 'io'])\n    )\n\n\nclass MockBlacklistFilter:\n    \"\"\"模拟黑名单过滤器\"\"\"\n    \n    def __init__(self, blocked_patterns: list):\n        self.blocked_patterns = blocked_patterns\n    \n    def is_allowed(self, target: str) -> bool:\n        \"\"\"检查目标是否被允许（不在黑名单中）\"\"\"\n        for pattern in self.blocked_patterns:\n            if pattern in target:\n                return False\n        return True\n\n\nclass TestDatabaseTargetProviderProperties:\n    \"\"\"DatabaseTargetProvider 属性测试类\"\"\"\n    \n    @given(\n        hosts=st.lists(valid_domain_strategy(), min_size=1, max_size=20),\n        blocked_keyword=st.text(\n            alphabet=st.characters(whitelist_categories=('L',), min_codepoint=97, max_codepoint=122),\n            min_size=2,\n            max_size=5\n        )\n    )\n    @settings(max_examples=100)\n    def test_property_7_blacklist_filters_hosts(self, hosts, blocked_keyword):\n        \"\"\"\n        Property 7: DatabaseTargetProvider Blacklist Application (hosts)\n        \n        Feature: scan-target-provider, Property 7: DatabaseTargetProvider Blacklist Application\n        **Validates: Requirements 2.3, 10.1, 10.2, 10.3**\n        \n        For any set of hosts and a blacklist keyword, the provider should filter out\n        all hosts containing the blocked keyword.\n        \"\"\"\n        # 创建模拟的黑名单过滤器\n        mock_filter = MockBlacklistFilter([blocked_keyword])\n        \n        # 创建 provider 并注入模拟的黑名单过滤器\n        provider = DatabaseTargetProvider(target_id=1)\n        provider._blacklist_filter = mock_filter\n        \n        # 模拟 Target 和 SubdomainService\n        mock_target = MagicMock()\n        mock_target.type = 'domain'\n        mock_target.name = hosts[0] if hosts else 'example.com'\n        \n        with patch('apps.targets.services.TargetService') as mock_target_service, \\\n             patch('apps.asset.services.asset.subdomain_service.SubdomainService') as mock_subdomain_service:\n            \n            mock_target_service.return_value.get_target.return_value = mock_target\n            mock_subdomain_service.return_value.iter_subdomain_names_by_target.return_value = iter(hosts[1:] if len(hosts) > 1 else [])\n            \n            # 获取结果\n            result = list(provider.iter_hosts())\n            \n            # 验证：所有结果都不包含被阻止的关键词\n            for host in result:\n                assert blocked_keyword not in host, f\"Host '{host}' should be filtered by blacklist keyword '{blocked_keyword}'\"\n            \n            # 验证：所有不包含关键词的主机都应该在结果中\n            if hosts:\n                all_hosts = [hosts[0]] + [h for h in hosts[1:] if h != hosts[0]]\n                expected_allowed = [h for h in all_hosts if blocked_keyword not in h]\n            else:\n                expected_allowed = []\n            \n            assert set(result) == set(expected_allowed)\n\n\nclass TestDatabaseTargetProviderUnit:\n    \"\"\"DatabaseTargetProvider 单元测试类\"\"\"\n    \n    def test_target_id_in_context(self):\n        \"\"\"测试 target_id 正确设置到上下文中\"\"\"\n        provider = DatabaseTargetProvider(target_id=123)\n        assert provider.target_id == 123\n        assert provider.context.target_id == 123\n    \n    def test_context_propagation(self):\n        \"\"\"测试上下文传递\"\"\"\n        ctx = ProviderContext(scan_id=789)\n        provider = DatabaseTargetProvider(target_id=123, context=ctx)\n        \n        assert provider.target_id == 123  # target_id 被覆盖\n        assert provider.scan_id == 789\n    \n    def test_blacklist_filter_lazy_loading(self):\n        \"\"\"测试黑名单过滤器延迟加载\"\"\"\n        provider = DatabaseTargetProvider(target_id=123)\n        \n        # 初始时 _blacklist_filter 为 None\n        assert provider._blacklist_filter is None\n        \n        # 模拟 BlacklistService\n        with patch('apps.common.services.BlacklistService') as mock_service, \\\n             patch('apps.common.utils.BlacklistFilter') as mock_filter_class:\n            \n            mock_service.return_value.get_rules.return_value = []\n            mock_filter_instance = MagicMock()\n            mock_filter_class.return_value = mock_filter_instance\n            \n            # 第一次调用\n            result1 = provider.get_blacklist_filter()\n            assert result1 == mock_filter_instance\n            \n            # 第二次调用应该返回缓存的实例\n            result2 = provider.get_blacklist_filter()\n            assert result2 == mock_filter_instance\n            \n            # BlacklistService 只应该被调用一次\n            mock_service.return_value.get_rules.assert_called_once_with(123)\n    \n    def test_nonexistent_target_returns_empty(self):\n        \"\"\"测试不存在的 target 返回空迭代器\"\"\"\n        provider = DatabaseTargetProvider(target_id=99999)\n        \n        with patch('apps.targets.services.TargetService') as mock_service, \\\n             patch('apps.common.services.BlacklistService') as mock_blacklist_service:\n            \n            mock_service.return_value.get_target.return_value = None\n            mock_blacklist_service.return_value.get_rules.return_value = []\n            \n            result = list(provider.iter_hosts())\n            assert result == []\n"
  },
  {
    "path": "backend/apps/scan/providers/tests/test_list_provider.py",
    "content": "\"\"\"\nListTargetProvider 属性测试\n\nProperty 1: ListTargetProvider Round-Trip\n*For any* 主机列表和 URL 列表，创建 ListTargetProvider 后迭代 iter_hosts() 和 iter_urls() \n应该返回与输入相同的元素（顺序相同）。\n\n**Validates: Requirements 3.1, 3.2**\n\"\"\"\n\nimport pytest\nfrom hypothesis import given, strategies as st, settings, assume\n\nfrom apps.scan.providers.list_provider import ListTargetProvider\nfrom apps.scan.providers.base import ProviderContext\n\n\n# 生成有效域名的策略\ndef valid_domain_strategy():\n    \"\"\"生成有效的域名\"\"\"\n    # 生成简单的域名格式: subdomain.domain.tld\n    label = st.text(\n        alphabet=st.characters(whitelist_categories=('L',), min_codepoint=97, max_codepoint=122),\n        min_size=2,\n        max_size=10\n    )\n    return st.builds(\n        lambda a, b, c: f\"{a}.{b}.{c}\",\n        label, label, st.sampled_from(['com', 'net', 'org', 'io'])\n    )\n\n# 生成有效 IP 地址的策略\ndef valid_ip_strategy():\n    \"\"\"生成有效的 IPv4 地址\"\"\"\n    octet = st.integers(min_value=1, max_value=254)\n    return st.builds(\n        lambda a, b, c, d: f\"{a}.{b}.{c}.{d}\",\n        octet, octet, octet, octet\n    )\n\n# 组合策略：域名或 IP\nhost_strategy = st.one_of(valid_domain_strategy(), valid_ip_strategy())\n\n# 生成有效 URL 的策略\ndef valid_url_strategy():\n    \"\"\"生成有效的 URL\"\"\"\n    domain = valid_domain_strategy()\n    return st.builds(\n        lambda d, path: f\"https://{d}/{path}\" if path else f\"https://{d}\",\n        domain,\n        st.one_of(\n            st.just(\"\"),\n            st.text(\n                alphabet=st.characters(whitelist_categories=('L',), min_codepoint=97, max_codepoint=122),\n                min_size=1,\n                max_size=10\n            )\n        )\n    )\n\nurl_strategy = valid_url_strategy()\n\n\nclass TestListTargetProviderProperties:\n    \"\"\"ListTargetProvider 属性测试类\"\"\"\n    \n    @given(hosts=st.lists(host_strategy, max_size=50))\n    @settings(max_examples=100)\n    def test_property_1_hosts_round_trip(self, hosts):\n        \"\"\"\n        Property 1: ListTargetProvider Round-Trip (hosts)\n        \n        Feature: scan-target-provider, Property 1: ListTargetProvider Round-Trip\n        **Validates: Requirements 3.1, 3.2**\n        \n        For any host list, creating a ListTargetProvider and iterating iter_hosts()\n        should return the same elements in the same order.\n        \"\"\"\n        # ListTargetProvider 使用 targets 参数，自动分类为 hosts/urls\n        provider = ListTargetProvider(targets=hosts)\n        result = list(provider.iter_hosts())\n        assert result == hosts\n    \n    @given(urls=st.lists(url_strategy, max_size=50))\n    @settings(max_examples=100)\n    def test_property_1_urls_round_trip(self, urls):\n        \"\"\"\n        Property 1: ListTargetProvider Round-Trip (urls)\n        \n        Feature: scan-target-provider, Property 1: ListTargetProvider Round-Trip\n        **Validates: Requirements 3.1, 3.2**\n        \n        For any URL list, creating a ListTargetProvider and iterating iter_urls()\n        should return the same elements in the same order.\n        \"\"\"\n        # ListTargetProvider 使用 targets 参数，自动分类为 hosts/urls\n        provider = ListTargetProvider(targets=urls)\n        result = list(provider.iter_urls())\n        assert result == urls\n    \n    @given(\n        hosts=st.lists(host_strategy, max_size=30),\n        urls=st.lists(url_strategy, max_size=30)\n    )\n    @settings(max_examples=100)\n    def test_property_1_combined_round_trip(self, hosts, urls):\n        \"\"\"\n        Property 1: ListTargetProvider Round-Trip (combined)\n        \n        Feature: scan-target-provider, Property 1: ListTargetProvider Round-Trip\n        **Validates: Requirements 3.1, 3.2**\n        \n        For any combination of hosts and URLs, both should round-trip correctly.\n        \"\"\"\n        # 合并 hosts 和 urls，ListTargetProvider 会自动分类\n        combined = hosts + urls\n        provider = ListTargetProvider(targets=combined)\n        \n        hosts_result = list(provider.iter_hosts())\n        urls_result = list(provider.iter_urls())\n        \n        assert hosts_result == hosts\n        assert urls_result == urls\n\n\nclass TestListTargetProviderUnit:\n    \"\"\"ListTargetProvider 单元测试类\"\"\"\n    \n    def test_empty_lists(self):\n        \"\"\"测试空列表返回空迭代器 - Requirements 3.5\"\"\"\n        provider = ListTargetProvider()\n        assert list(provider.iter_hosts()) == []\n        assert list(provider.iter_urls()) == []\n    \n    def test_blacklist_filter_returns_none(self):\n        \"\"\"测试黑名单过滤器返回 None - Requirements 3.4\"\"\"\n        provider = ListTargetProvider(targets=[\"example.com\"])\n        assert provider.get_blacklist_filter() is None\n    \n    def test_target_id_association(self):\n        \"\"\"测试 target_id 关联 - Requirements 3.3\"\"\"\n        ctx = ProviderContext(target_id=123)\n        provider = ListTargetProvider(targets=[\"example.com\"], context=ctx)\n        assert provider.target_id == 123\n    \n    def test_context_propagation(self):\n        \"\"\"测试上下文传递\"\"\"\n        ctx = ProviderContext(target_id=456, scan_id=789)\n        provider = ListTargetProvider(targets=[\"example.com\"], context=ctx)\n        \n        assert provider.target_id == 456\n        assert provider.scan_id == 789\n"
  },
  {
    "path": "backend/apps/scan/providers/tests/test_pipeline_provider.py",
    "content": "\"\"\"\nPipelineTargetProvider 属性测试\n\nProperty 3: PipelineTargetProvider Round-Trip\n*For any* StageOutput 对象，PipelineTargetProvider 的 iter_hosts() 和 iter_urls() \n应该返回与 StageOutput 中 hosts 和 urls 列表相同的元素。\n\n**Validates: Requirements 5.1, 5.2**\n\"\"\"\n\nimport pytest\nfrom hypothesis import given, strategies as st, settings\n\nfrom apps.scan.providers.pipeline_provider import PipelineTargetProvider, StageOutput\nfrom apps.scan.providers.base import ProviderContext\n\n\n# 生成有效域名的策略\ndef valid_domain_strategy():\n    \"\"\"生成有效的域名\"\"\"\n    label = st.text(\n        alphabet=st.characters(whitelist_categories=('L',), min_codepoint=97, max_codepoint=122),\n        min_size=2,\n        max_size=10\n    )\n    return st.builds(\n        lambda a, b, c: f\"{a}.{b}.{c}\",\n        label, label, st.sampled_from(['com', 'net', 'org', 'io'])\n    )\n\n# 生成有效 IP 地址的策略\ndef valid_ip_strategy():\n    \"\"\"生成有效的 IPv4 地址\"\"\"\n    octet = st.integers(min_value=1, max_value=254)\n    return st.builds(\n        lambda a, b, c, d: f\"{a}.{b}.{c}.{d}\",\n        octet, octet, octet, octet\n    )\n\n# 组合策略：域名或 IP\nhost_strategy = st.one_of(valid_domain_strategy(), valid_ip_strategy())\n\n# 生成有效 URL 的策略\ndef valid_url_strategy():\n    \"\"\"生成有效的 URL\"\"\"\n    domain = valid_domain_strategy()\n    return st.builds(\n        lambda d, path: f\"https://{d}/{path}\" if path else f\"https://{d}\",\n        domain,\n        st.one_of(\n            st.just(\"\"),\n            st.text(\n                alphabet=st.characters(whitelist_categories=('L',), min_codepoint=97, max_codepoint=122),\n                min_size=1,\n                max_size=10\n            )\n        )\n    )\n\nurl_strategy = valid_url_strategy()\n\n\nclass TestPipelineTargetProviderProperties:\n    \"\"\"PipelineTargetProvider 属性测试类\"\"\"\n    \n    @given(hosts=st.lists(host_strategy, max_size=50))\n    @settings(max_examples=100)\n    def test_property_3_hosts_round_trip(self, hosts):\n        \"\"\"\n        Property 3: PipelineTargetProvider Round-Trip (hosts)\n        \n        Feature: scan-target-provider, Property 3: PipelineTargetProvider Round-Trip\n        **Validates: Requirements 5.1, 5.2**\n        \n        For any StageOutput with hosts, PipelineTargetProvider should return\n        the same hosts in the same order.\n        \"\"\"\n        stage_output = StageOutput(hosts=hosts)\n        provider = PipelineTargetProvider(previous_output=stage_output)\n        result = list(provider.iter_hosts())\n        assert result == hosts\n    \n    @given(urls=st.lists(url_strategy, max_size=50))\n    @settings(max_examples=100)\n    def test_property_3_urls_round_trip(self, urls):\n        \"\"\"\n        Property 3: PipelineTargetProvider Round-Trip (urls)\n        \n        Feature: scan-target-provider, Property 3: PipelineTargetProvider Round-Trip\n        **Validates: Requirements 5.1, 5.2**\n        \n        For any StageOutput with urls, PipelineTargetProvider should return\n        the same urls in the same order.\n        \"\"\"\n        stage_output = StageOutput(urls=urls)\n        provider = PipelineTargetProvider(previous_output=stage_output)\n        result = list(provider.iter_urls())\n        assert result == urls\n    \n    @given(\n        hosts=st.lists(host_strategy, max_size=30),\n        urls=st.lists(url_strategy, max_size=30)\n    )\n    @settings(max_examples=100)\n    def test_property_3_combined_round_trip(self, hosts, urls):\n        \"\"\"\n        Property 3: PipelineTargetProvider Round-Trip (combined)\n        \n        Feature: scan-target-provider, Property 3: PipelineTargetProvider Round-Trip\n        **Validates: Requirements 5.1, 5.2**\n        \n        For any StageOutput with both hosts and urls, both should round-trip correctly.\n        \"\"\"\n        stage_output = StageOutput(hosts=hosts, urls=urls)\n        provider = PipelineTargetProvider(previous_output=stage_output)\n        \n        hosts_result = list(provider.iter_hosts())\n        urls_result = list(provider.iter_urls())\n        \n        assert hosts_result == hosts\n        assert urls_result == urls\n\n\nclass TestPipelineTargetProviderUnit:\n    \"\"\"PipelineTargetProvider 单元测试类\"\"\"\n    \n    def test_empty_stage_output(self):\n        \"\"\"测试空 StageOutput 返回空迭代器 - Requirements 5.5\"\"\"\n        stage_output = StageOutput()\n        provider = PipelineTargetProvider(previous_output=stage_output)\n        \n        assert list(provider.iter_hosts()) == []\n        assert list(provider.iter_urls()) == []\n    \n    def test_blacklist_filter_returns_none(self):\n        \"\"\"测试黑名单过滤器返回 None - Requirements 5.3\"\"\"\n        stage_output = StageOutput(hosts=[\"example.com\"])\n        provider = PipelineTargetProvider(previous_output=stage_output)\n        assert provider.get_blacklist_filter() is None\n    \n    def test_target_id_association(self):\n        \"\"\"测试 target_id 关联 - Requirements 5.4\"\"\"\n        stage_output = StageOutput(hosts=[\"example.com\"])\n        provider = PipelineTargetProvider(previous_output=stage_output, target_id=123)\n        assert provider.target_id == 123\n    \n    def test_context_propagation(self):\n        \"\"\"测试上下文传递\"\"\"\n        ctx = ProviderContext(target_id=456, scan_id=789)\n        stage_output = StageOutput(hosts=[\"example.com\"])\n        provider = PipelineTargetProvider(previous_output=stage_output, context=ctx)\n        \n        assert provider.target_id == 456\n        assert provider.scan_id == 789\n    \n    def test_previous_output_property(self):\n        \"\"\"测试 previous_output 属性\"\"\"\n        stage_output = StageOutput(hosts=[\"example.com\"], urls=[\"https://example.com\"])\n        provider = PipelineTargetProvider(previous_output=stage_output)\n        \n        assert provider.previous_output is stage_output\n        assert provider.previous_output.hosts == [\"example.com\"]\n        assert provider.previous_output.urls == [\"https://example.com\"]\n    \n    def test_stage_output_with_metadata(self):\n        \"\"\"测试带元数据的 StageOutput\"\"\"\n        stage_output = StageOutput(\n            hosts=[\"example.com\"],\n            urls=[\"https://example.com\"],\n            new_targets=[\"new.example.com\"],\n            stats={\"count\": 1},\n            success=True,\n            error=None\n        )\n        provider = PipelineTargetProvider(previous_output=stage_output)\n        \n        assert list(provider.iter_hosts()) == [\"example.com\"]\n        assert list(provider.iter_urls()) == [\"https://example.com\"]\n        assert provider.previous_output.new_targets == [\"new.example.com\"]\n        assert provider.previous_output.stats == {\"count\": 1}\n"
  },
  {
    "path": "backend/apps/scan/providers/tests/test_snapshot_provider.py",
    "content": "\"\"\"\nSnapshotTargetProvider 单元测试\n\"\"\"\n\nimport pytest\nfrom unittest.mock import Mock, patch\n\nfrom apps.scan.providers import SnapshotTargetProvider, ProviderContext\n\n\nclass TestSnapshotTargetProvider:\n    \"\"\"SnapshotTargetProvider 测试类\"\"\"\n    \n    def test_init_with_scan_id_and_type(self):\n        \"\"\"测试初始化\"\"\"\n        provider = SnapshotTargetProvider(\n            scan_id=100,\n            snapshot_type=\"subdomain\"\n        )\n        \n        assert provider.scan_id == 100\n        assert provider.snapshot_type == \"subdomain\"\n        assert provider.target_id is None  # 默认 context\n    \n    def test_init_with_context(self):\n        \"\"\"测试带 context 初始化\"\"\"\n        ctx = ProviderContext(target_id=1, scan_id=100)\n        provider = SnapshotTargetProvider(\n            scan_id=100,\n            snapshot_type=\"subdomain\",\n            context=ctx\n        )\n        \n        assert provider.scan_id == 100\n        assert provider.target_id == 1\n        assert provider.snapshot_type == \"subdomain\"\n    \n    @patch('apps.asset.services.snapshot.SubdomainSnapshotsService')\n    def test_iter_hosts_subdomain(self, mock_service_class):\n        \"\"\"测试从子域名快照迭代主机\"\"\"\n        # Mock service\n        mock_service = Mock()\n        mock_service.iter_subdomain_names_by_scan.return_value = iter([\n            \"a.example.com\",\n            \"b.example.com\"\n        ])\n        mock_service_class.return_value = mock_service\n        \n        # 创建 provider\n        provider = SnapshotTargetProvider(\n            scan_id=100,\n            snapshot_type=\"subdomain\"\n        )\n        \n        # 迭代主机\n        hosts = list(provider.iter_hosts())\n        \n        assert hosts == [\"a.example.com\", \"b.example.com\"]\n        mock_service.iter_subdomain_names_by_scan.assert_called_once_with(\n            scan_id=100,\n            chunk_size=1000\n        )\n    \n    @patch('apps.asset.services.snapshot.HostPortMappingSnapshotsService')\n    def test_iter_hosts_host_port(self, mock_service_class):\n        \"\"\"测试从主机端口映射快照迭代主机\"\"\"\n        # Mock queryset\n        mock_mapping1 = Mock()\n        mock_mapping1.host = \"example.com\"\n        mock_mapping1.port = 80\n        \n        mock_mapping2 = Mock()\n        mock_mapping2.host = \"example.com\"\n        mock_mapping2.port = 443\n        \n        mock_queryset = Mock()\n        mock_queryset.iterator.return_value = iter([mock_mapping1, mock_mapping2])\n        \n        # Mock service\n        mock_service = Mock()\n        mock_service.get_by_scan.return_value = mock_queryset\n        mock_service_class.return_value = mock_service\n        \n        # 创建 provider\n        provider = SnapshotTargetProvider(\n            scan_id=100,\n            snapshot_type=\"host_port\"\n        )\n        \n        # 迭代主机\n        hosts = list(provider.iter_hosts())\n        \n        assert hosts == [\"example.com:80\", \"example.com:443\"]\n        mock_service.get_by_scan.assert_called_once_with(scan_id=100)\n    \n    @patch('apps.asset.services.snapshot.WebsiteSnapshotsService')\n    def test_iter_urls_website(self, mock_service_class):\n        \"\"\"测试从网站快照迭代 URL\"\"\"\n        # Mock service\n        mock_service = Mock()\n        mock_service.iter_website_urls_by_scan.return_value = iter([\n            \"http://example.com\",\n            \"https://example.com\"\n        ])\n        mock_service_class.return_value = mock_service\n        \n        # 创建 provider\n        provider = SnapshotTargetProvider(\n            scan_id=100,\n            snapshot_type=\"website\"\n        )\n        \n        # 迭代 URL\n        urls = list(provider.iter_urls())\n        \n        assert urls == [\"http://example.com\", \"https://example.com\"]\n        mock_service.iter_website_urls_by_scan.assert_called_once_with(\n            scan_id=100,\n            chunk_size=1000\n        )\n    \n    @patch('apps.asset.services.snapshot.EndpointSnapshotsService')\n    def test_iter_urls_endpoint(self, mock_service_class):\n        \"\"\"测试从端点快照迭代 URL\"\"\"\n        # Mock queryset\n        mock_endpoint1 = Mock()\n        mock_endpoint1.url = \"http://example.com/api/v1\"\n        \n        mock_endpoint2 = Mock()\n        mock_endpoint2.url = \"http://example.com/api/v2\"\n        \n        mock_queryset = Mock()\n        mock_queryset.iterator.return_value = iter([mock_endpoint1, mock_endpoint2])\n        \n        # Mock service\n        mock_service = Mock()\n        mock_service.get_by_scan.return_value = mock_queryset\n        mock_service_class.return_value = mock_service\n        \n        # 创建 provider\n        provider = SnapshotTargetProvider(\n            scan_id=100,\n            snapshot_type=\"endpoint\"\n        )\n        \n        # 迭代 URL\n        urls = list(provider.iter_urls())\n        \n        assert urls == [\"http://example.com/api/v1\", \"http://example.com/api/v2\"]\n        mock_service.get_by_scan.assert_called_once_with(scan_id=100)\n    \n    def test_iter_hosts_unsupported_type(self):\n        \"\"\"测试不支持的快照类型（iter_hosts）\"\"\"\n        provider = SnapshotTargetProvider(\n            scan_id=100,\n            snapshot_type=\"website\"  # website 不支持 iter_hosts\n        )\n        \n        hosts = list(provider.iter_hosts())\n        assert hosts == []\n    \n    def test_iter_urls_unsupported_type(self):\n        \"\"\"测试不支持的快照类型（iter_urls）\"\"\"\n        provider = SnapshotTargetProvider(\n            scan_id=100,\n            snapshot_type=\"subdomain\"  # subdomain 不支持 iter_urls\n        )\n        \n        urls = list(provider.iter_urls())\n        assert urls == []\n    \n    def test_get_blacklist_filter(self):\n        \"\"\"测试黑名单过滤器（快照模式不使用黑名单）\"\"\"\n        provider = SnapshotTargetProvider(\n            scan_id=100,\n            snapshot_type=\"subdomain\"\n        )\n        \n        assert provider.get_blacklist_filter() is None\n    \n    def test_context_propagation(self):\n        \"\"\"测试上下文传递\"\"\"\n        ctx = ProviderContext(target_id=456, scan_id=789)\n        provider = SnapshotTargetProvider(\n            scan_id=100,  # 会被 context 覆盖\n            snapshot_type=\"subdomain\",\n            context=ctx\n        )\n        \n        assert provider.target_id == 456\n        assert provider.scan_id == 100  # scan_id 在 __init__ 中被设置\n"
  },
  {
    "path": "backend/apps/scan/repositories/__init__.py",
    "content": "\"\"\"\nScan Repositories 模块\n\n提供 Scan 模型的数据访问层实现\n其他模型的 Repository 应从各自的 app 导入\n\"\"\"\n\n# Django ORM 实现\nfrom .django_scan_repository import DjangoScanRepository\nfrom .scheduled_scan_repository import DjangoScheduledScanRepository, ScheduledScanDTO\n\n# 为了向后兼容，保留 ScanRepository 别名\nScanRepository = DjangoScanRepository\n\n__all__ = [\n    # 实现类\n    'DjangoScanRepository',\n    'DjangoScheduledScanRepository',\n    'ScheduledScanDTO',\n    # 向后兼容别名\n    'ScanRepository',\n]\n\n"
  },
  {
    "path": "backend/apps/scan/repositories/django_scan_repository.py",
    "content": "\"\"\"\nScan 数据访问层 Django ORM 实现\n\n基于 Django ORM 的 Scan Repository 实现类\n\"\"\"\n\nfrom __future__ import annotations\n\nimport logging\nfrom typing import List, Tuple, Dict\nfrom datetime import datetime\n\nfrom django.db import transaction, DatabaseError\nfrom django.db.models import QuerySet, F, Value, Func, Count\nfrom django.utils import timezone\n\nfrom apps.scan.models import Scan\nfrom apps.targets.models import Target\nfrom apps.common.definitions import ScanStatus\nfrom apps.common.decorators import auto_ensure_db_connection\n\nlogger = logging.getLogger(__name__)\n\n\n@auto_ensure_db_connection\nclass DjangoScanRepository:\n    \"\"\"基于 Django ORM 的 Scan 数据访问层实现\"\"\"\n    \n    # ==================== 基础 CRUD 操作 ====================\n    \n    \n    def get_by_id(self,\n        scan_id: int, \n        prefetch_relations: bool = False,\n        for_update: bool = False\n    ) -> Scan | None:\n        \"\"\"\n        根据 ID 获取扫描任务\n        \n        Args:\n            scan_id: 扫描任务 ID\n            prefetch_relations: 是否预加载关联对象（target, worker）\n                              默认 False，只在需要展示关联信息时设为 True\n            for_update: 是否加锁（用于更新场景）\n        \n        Returns:\n            Scan 对象或 None\n        \"\"\"\n        try:\n            # 根据是否需要更新来决定是否加锁\n            if for_update:\n                queryset = Scan.objects.select_for_update()  # type: ignore  # pylint: disable=no-member\n            else:\n                queryset = Scan.objects  # type: ignore  # pylint: disable=no-member\n            \n            # 预加载关联对象（性能优化：默认不加载）\n            if prefetch_relations:\n                queryset = queryset.select_related('target', 'worker')\n            \n            return queryset.get(id=scan_id)\n        except Scan.DoesNotExist:  # type: ignore  # pylint: disable=no-member\n            logger.warning(\"Scan 不存在 - Scan ID: %s\", scan_id)\n            return None\n    \n    \n    def get_by_id_for_update(self, scan_id: int) -> Scan | None:\n        \"\"\"\n        根据 ID 获取扫描任务（加锁）\n        \n        用于需要更新的场景，避免并发冲突。\n        不预加载关联对象，保持查询最小化，提高加锁性能。\n        \n        Args:\n            scan_id: 扫描任务 ID\n        \n        Returns:\n            Scan 对象或 None\n        \n        Note:\n            - 使用默认的阻塞模式（等待锁释放）\n            - 不包含关联对象（target, worker），如需关联对象请使用 get_by_id()\n        \"\"\"\n        try:\n            return Scan.objects.select_for_update().get(id=scan_id)  # type: ignore  # pylint: disable=no-member\n        except Scan.DoesNotExist:  # type: ignore  # pylint: disable=no-member\n            logger.warning(\"Scan 不存在 - Scan ID: %s\", scan_id)\n            return None\n    \n    \n    def exists(self, scan_id: int) -> bool:\n        \"\"\"\n        检查扫描任务是否存在\n        \n        Args:\n            scan_id: 扫描任务 ID\n        \n        Returns:\n            是否存在\n        \"\"\"\n        return Scan.objects.filter(id=scan_id).exists()\n    \n    \n    def create(self,\n        target: Target,\n        engine_ids: List[int],\n        engine_names: List[str],\n        yaml_configuration: str,\n        results_dir: str,\n        status: ScanStatus = ScanStatus.INITIATED\n    ) -> Scan:\n        \"\"\"\n        创建扫描任务\n        \n        Args:\n            target: 扫描目标\n            engine_ids: 引擎 ID 列表\n            engine_names: 引擎名称列表\n            yaml_configuration: YAML 格式的扫描配置\n            results_dir: 结果目录\n            status: 初始状态\n        \n        Returns:\n            创建的 Scan 对象\n        \"\"\"\n        scan = Scan(\n            target=target,\n            engine_ids=engine_ids,\n            engine_names=engine_names,\n            yaml_configuration=yaml_configuration,\n            results_dir=results_dir,\n            status=status,\n            container_ids=[]\n        )\n        scan.save()\n        logger.debug(\"创建 Scan - ID: %s, Target: %s\", scan.id, target.name)\n        return scan\n    \n    \n    def bulk_create(self, scans: List[Scan]) -> List[Scan]:\n        \"\"\"\n        批量创建扫描任务\n        \n        Args:\n            scans: Scan 对象列表\n        \n        Returns:\n            创建的 Scan 对象列表\n        \"\"\"\n        created_scans = Scan.objects.bulk_create(scans)  # type: ignore  # pylint: disable=no-member\n        logger.debug(\"批量创建 Scan - 数量: %d\", len(created_scans))\n        return created_scans\n    \n    \n    def soft_delete_by_ids(self, scan_ids: List[int]) -> int:\n        \"\"\"\n        根据 ID 列表批量软删除 Scan\n        \n        Args:\n            scan_ids: Scan ID 列表\n        \n        Returns:\n            软删除的记录数\n        \"\"\"\n        try:\n            updated_count = (\n                Scan.objects\n                .filter(id__in=scan_ids)\n                .update(deleted_at=timezone.now())\n            )\n            logger.debug(\n                \"批量软删除 Scan 成功 - Count: %s, 更新记录: %s\",\n                len(scan_ids),\n                updated_count\n            )\n            return updated_count\n        except Exception as e:\n            logger.error(\n                \"批量软删除 Scan 失败 - IDs: %s, 错误: %s\",\n                scan_ids,\n                e\n            )\n            raise\n\n    def hard_delete_by_ids(self, scan_ids: List[int]) -> Tuple[int, Dict[str, int]]:\n        \"\"\"\n        根据 ID 列表硬删除 Scan（使用数据库级 CASCADE）\n        \n        Args:\n            scan_ids: Scan ID 列表\n        \n        Returns:\n            (删除的记录数, 删除详情字典)\n        \"\"\"\n        try:\n            batch_size = 1000\n            total_deleted = 0\n            \n            logger.debug(f\"开始批量删除 {len(scan_ids)} 个 Scan（数据库 CASCADE）...\")\n            \n            for i in range(0, len(scan_ids), batch_size):\n                batch_ids = scan_ids[i:i + batch_size]\n                count, _ = Scan.all_objects.filter(id__in=batch_ids).delete()\n                total_deleted += count\n                logger.debug(f\"批次删除完成: {len(batch_ids)} 个 Scan，删除 {count} 条记录\")\n            \n            deleted_details = {\n                'scans': len(scan_ids),\n                'total': total_deleted,\n                'note': 'Database CASCADE - detailed stats unavailable'\n            }\n            \n            logger.debug(\n                \"批量硬删除成功（CASCADE）- Scan数: %s, 总删除记录: %s\",\n                len(scan_ids),\n                total_deleted\n            )\n            \n            return total_deleted, deleted_details\n        \n        except Exception as e:\n            logger.error(\n                \"批量硬删除失败（CASCADE）- Scan数: %s, 错误: %s\",\n                len(scan_ids),\n                str(e),\n                exc_info=True\n            )\n            raise\n    \n\n    \n    # ==================== 查询操作 ====================\n    \n    \n    def get_all(self, prefetch_relations: bool = True) -> QuerySet[Scan]:\n        \"\"\"\n        获取所有扫描任务\n        \n        Args:\n            prefetch_relations: 是否预加载关联对象（target, worker）\n        \n        Returns:\n            Scan QuerySet\n        \"\"\"\n        queryset = Scan.objects.all()  # type: ignore  # pylint: disable=no-member\n        if prefetch_relations:\n            queryset = queryset.select_related('target', 'worker')\n        return queryset.order_by('-created_at')\n    \n    \n    def get_statistics(self) -> dict:\n        \"\"\"\n        获取扫描任务统计数据\n        \n        Returns:\n            统计数据字典\n        \n        Note:\n            使用缓存字段聚合，性能优异\n        \"\"\"\n        from django.db.models import Sum\n        \n        # 基础统计\n        total_scans = Scan.objects.count()  # type: ignore  # pylint: disable=no-member\n        \n        # 按状态统计\n        running_scans = Scan.objects.filter(status='running').count()  # type: ignore  # pylint: disable=no-member\n        completed_scans = Scan.objects.filter(status='completed').count()  # type: ignore  # pylint: disable=no-member\n        failed_scans = Scan.objects.filter(status='failed').count()  # type: ignore  # pylint: disable=no-member\n        \n        # 使用缓存字段聚合统计（只统计已完成的扫描）\n        aggregated = Scan.objects.filter(status='completed').aggregate(  # type: ignore  # pylint: disable=no-member\n            total_vulns=Sum('cached_vulns_total'),\n            total_subdomains=Sum('cached_subdomains_count'),\n            total_endpoints=Sum('cached_endpoints_count'),\n            total_websites=Sum('cached_websites_count'),\n            total_ips=Sum('cached_ips_count'),\n        )\n        \n        total_vulns = aggregated['total_vulns'] or 0\n        total_subdomains = aggregated['total_subdomains'] or 0\n        total_endpoints = aggregated['total_endpoints'] or 0\n        total_websites = aggregated['total_websites'] or 0\n        total_ips = aggregated['total_ips'] or 0\n        \n        return {\n            'total': total_scans,\n            'running': running_scans,\n            'completed': completed_scans,\n            'failed': failed_scans,\n            'total_vulns': total_vulns,\n            'total_subdomains': total_subdomains,\n            'total_endpoints': total_endpoints,\n            'total_websites': total_websites,\n            'total_ips': total_ips,\n            'total_assets': total_subdomains + total_endpoints + total_websites + total_ips,\n        }\n    \n    \n    \n    # ==================== 状态更新操作 ====================\n    \n    \n    @transaction.atomic\n    def update_status(self,\n        scan_id: int,\n        status: ScanStatus,\n        error_message: str | None = None,\n        stopped_at: datetime | None = None\n    ) -> bool:\n        \"\"\"\n        更新扫描任务状态\n        \n        Args:\n            scan_id: 扫描任务 ID\n            status: 新状态\n            error_message: 错误消息（可选）\n            stopped_at: 结束时间（可选，由调用方决定是否传递）\n        \n        Returns:\n            是否更新成功\n        \n        Note:\n            Repository 层不判断业务状态,只负责数据更新\n            created_at 是自动设置的，不需要手动传递\n        \"\"\"\n        scan = self.get_by_id_for_update(scan_id)\n        if not scan:\n            return False\n        \n        scan.status = status\n        \n        if error_message:\n            if len(error_message) > 2000:\n                scan.error_message = error_message[:1980] + \"... (已截断)\"\n                logger.warning(\n                    \"错误信息过长（%d 字符），已截断 - Scan ID: %s\",\n                    len(error_message), scan_id\n                )\n            else:\n                scan.error_message = error_message\n        \n        # 根据传递的参数更新时间戳（由调用方决定）\n        if stopped_at is not None:\n            scan.stopped_at = stopped_at\n        \n        scan.save()\n        logger.debug(\n            \"更新 Scan 状态 - ID: %s, 状态: %s\",\n            scan_id,\n            ScanStatus(status).label\n        )\n        return True\n    \n    \n    def append_container_id(self, scan_id: int, container_id: str) -> bool:\n        \"\"\"\n        追加容器 ID 到 container_ids 数组（并发安全）\n        \n        使用 PostgreSQL 的 array_append 函数在数据库层面进行原子操作，\n        避免并发场景下的 Race Condition。\n        \n        Args:\n            scan_id: 扫描任务 ID\n            container_id: Docker 容器 ID\n        \n        Returns:\n            是否追加成功\n        \n        Note:\n            - 使用 F 表达式和 ArrayAppend 确保并发安全\n            - 生成的 SQL: UPDATE scan SET container_ids = array_append(container_ids, ?)\n        \"\"\"\n        try:\n            container_field = Scan._meta.get_field('container_ids')\n            updated_count = Scan.objects.filter(id=scan_id).update(  # type: ignore\n                container_ids=Func(\n                    F('container_ids'),\n                    Value(container_id),\n                    function='ARRAY_APPEND',\n                    output_field=container_field\n                )\n            )\n            \n            if updated_count > 0:\n                logger.debug(\"追加容器 ID - Scan ID: %s, Container ID: %s\", scan_id, container_id)\n                return True\n            else:\n                logger.warning(\"Scan 不存在，无法追加容器 ID - Scan ID: %s\", scan_id)\n                return False\n        except DatabaseError as e:\n            logger.error(\"追加容器 ID 失败 - Scan ID: %s, 错误: %s\", scan_id, e)\n            return False\n    \n    \n    def update_worker(self, scan_id: int, worker_id: int) -> bool:\n        \"\"\"\n        更新扫描任务的 Worker ID\n        \n        Args:\n            scan_id: 扫描任务 ID\n            worker_id: Worker 节点 ID\n        \n        Returns:\n            是否更新成功\n        \"\"\"\n        try:\n            updated_count = Scan.objects.filter(id=scan_id).update(worker_id=worker_id)  # type: ignore\n            \n            if updated_count > 0:\n                logger.debug(\"更新 Worker ID - Scan ID: %s, Worker ID: %s\", scan_id, worker_id)\n                return True\n            else:\n                logger.warning(\"Scan 不存在，无法更新 Worker ID - Scan ID: %s\", scan_id)\n                return False\n        except DatabaseError as e:\n            logger.error(\"更新 Worker ID 失败 - Scan ID: %s, 错误: %s\", scan_id, e)\n            return False\n    \n    \n    def update_cached_stats(self, scan_id: int) -> dict | None:\n        \"\"\"\n        更新扫描任务的缓存统计数据\n        \n        使用 Django ORM 聚合查询，避免原生 SQL，保持数据库抽象\n        \n        Args:\n            scan_id: 扫描任务 ID\n        \n        Returns:\n            成功返回统计数据字典，失败返回 None\n        \"\"\"\n        try:\n            from apps.asset.models import VulnerabilitySnapshot\n\n            scan = self.get_by_id(scan_id, prefetch_relations=False)\n            if not scan:\n                logger.error(\"Scan 不存在，无法更新缓存统计数据 - Scan ID: %s\", scan_id)\n                return None\n            \n            # 统计快照数据（用于扫描历史）\n            # IP 数量需要按 IP 去重统计\n            ips_count = scan.host_port_mapping_snapshots.values('ip').distinct().count()\n\n            # 漏洞统计：按扫描维度基于 VulnerabilitySnapshot 聚合\n            vuln_qs = VulnerabilitySnapshot.objects.filter(scan_id=scan_id)\n            total_vulns = vuln_qs.count()\n\n            severity_stats = {\n                'critical': 0,\n                'high': 0,\n                'medium': 0,\n                'low': 0,\n            }\n\n            for row in vuln_qs.values('severity').annotate(count=Count('id')):\n                sev = (row.get('severity') or '').lower()\n                count = row.get('count') or 0\n                if sev in severity_stats:\n                    severity_stats[sev] = count\n            \n            stats = {\n                'subdomains': scan.subdomain_snapshots.count(),\n                'websites': scan.website_snapshots.count(), \n                'endpoints': scan.endpoint_snapshots.count(),\n                'ips': ips_count,\n                'directories': scan.directory_snapshots.count(),\n                'screenshots': scan.screenshot_snapshots.count(),\n                'vulns_total': total_vulns,\n                'vulns_critical': severity_stats['critical'],\n                'vulns_high': severity_stats['high'],\n                'vulns_medium': severity_stats['medium'],\n                'vulns_low': severity_stats['low'],\n            }\n            \n            # 批量更新字段（使用 cached_ 前缀的字段名）\n            cached_stats = {\n                'cached_subdomains_count': stats['subdomains'],\n                'cached_websites_count': stats['websites'], \n                'cached_endpoints_count': stats['endpoints'],\n                'cached_ips_count': stats['ips'],\n                'cached_directories_count': stats['directories'],\n                'cached_screenshots_count': stats['screenshots'],\n                'cached_vulns_total': stats['vulns_total'],\n                'cached_vulns_critical': stats['vulns_critical'],\n                'cached_vulns_high': stats['vulns_high'],\n                'cached_vulns_medium': stats['vulns_medium'],\n                'cached_vulns_low': stats['vulns_low'],\n                'stats_updated_at': timezone.now()\n            }\n            \n            for field, value in cached_stats.items():\n                setattr(scan, field, value)\n            \n            scan.save(update_fields=list(cached_stats.keys()))\n            \n            logger.debug(\"更新缓存统计数据成功 - Scan ID: %s\", scan_id)\n            return stats\n        except DatabaseError as e:\n            logger.exception(\"数据库错误：更新缓存统计数据失败 - Scan ID: %s\", scan_id)\n            return None\n        except Exception as e:\n            logger.error(\"更新缓存统计数据失败 - Scan ID: %s, 错误: %s\", scan_id, e)\n            return None\n    \n    \n    def update_status_if_match(self,\n        scan_id: int,\n        current_status: ScanStatus,\n        new_status: ScanStatus,\n        stopped_at: datetime | None = None\n    ) -> bool:\n        \"\"\"\n        条件更新扫描状态（原子操作）\n        \n        仅当扫描状态匹配 current_status 时才更新为 new_status。\n        这是一个原子操作，用于处理并发场景下的状态更新。\n        \n        Args:\n            scan_id: 扫描ID\n            current_status: 当前期望的状态\n            new_status: 要更新到的新状态\n            stopped_at: 停止时间（可选）\n        \n        Returns:\n            bool: 是否更新成功（True=更新了记录，False=未更新）\n        \"\"\"\n        try:\n            update_fields = {\n                'status': new_status,\n            }\n            \n            if stopped_at:\n                update_fields['stopped_at'] = stopped_at\n            \n            # 原子操作：只有状态匹配时才更新\n            updated = Scan.objects.filter(\n                id=scan_id,\n                status=current_status\n            ).update(**update_fields)\n            \n            if updated > 0:\n                logger.debug(\n                    \"条件更新扫描状态成功 - Scan ID: %s, %s → %s\",\n                    scan_id,\n                    current_status.value,\n                    new_status.value\n                )\n                return True\n            else:\n                logger.debug(\n                    \"条件更新扫描状态跳过（状态不匹配） - Scan ID: %s, 期望: %s, 目标: %s\",\n                    scan_id,\n                    current_status.value,\n                    new_status.value\n                )\n                return False\n                \n        except Exception as e:\n            logger.error(\n                \"条件更新扫描状态失败 - Scan ID: %s, %s → %s, 错误: %s\",\n                scan_id,\n                current_status.value,\n                new_status.value,\n                e\n            )\n            return False\n    \n    \n    def update_progress(\n        self,\n        scan_id: int,\n        progress: int | None = None,\n        current_stage: str | None = None,\n        stage_progress: dict | None = None\n    ) -> bool:\n        \"\"\"\n        更新扫描进度信息\n        \n        Args:\n            scan_id: 扫描任务 ID\n            progress: 进度百分比 0-100（可选）\n            current_stage: 当前阶段（可选）\n            stage_progress: 各阶段详情（可选）\n        \n        Returns:\n            是否更新成功\n        \"\"\"\n        try:\n            update_fields = {}\n            \n            if progress is not None:\n                update_fields['progress'] = progress\n            \n            if current_stage is not None:\n                update_fields['current_stage'] = current_stage\n            \n            if stage_progress is not None:\n                update_fields['stage_progress'] = stage_progress\n            \n            if not update_fields:\n                return True  # 无需更新\n            \n            updated = Scan.objects.filter(id=scan_id).update(**update_fields)\n            \n            if updated > 0:\n                logger.debug(\n                    \"更新扫描进度 - Scan ID: %s, progress: %s, stage: %s\",\n                    scan_id,\n                    progress,\n                    current_stage\n                )\n                return True\n            else:\n                logger.warning(\"Scan 不存在，无法更新进度 - Scan ID: %s\", scan_id)\n                return False\n                \n        except Exception as e:\n            logger.error(\n                \"更新扫描进度失败 - Scan ID: %s, 错误: %s\",\n                scan_id,\n                e\n            )\n            return False\n\n\n# 导出接口\n__all__ = ['DjangoScanRepository']\n"
  },
  {
    "path": "backend/apps/scan/repositories/scheduled_scan_repository.py",
    "content": "\"\"\"\n定时扫描任务 Repository\n\n数据访问层：负责 ScheduledScan 模型的 CRUD 操作\n\"\"\"\nimport logging\nfrom typing import List, Optional, Tuple, Dict\nfrom dataclasses import dataclass\nfrom datetime import datetime\n\nfrom django.db import transaction\nfrom django.utils import timezone\n\nfrom apps.common.decorators import auto_ensure_db_connection\nfrom apps.scan.models import ScheduledScan\n\n\nlogger = logging.getLogger(__name__)\n\n\n@dataclass\nclass ScheduledScanDTO:\n    \"\"\"定时扫描 DTO\n    \n    扫描模式（二选一）：\n    - 组织扫描：设置 organization_id，执行时动态获取组织下所有目标\n    - 目标扫描：设置 target_id，扫描单个目标\n    - organization_id 优先级高于 target_id\n    \"\"\"\n    id: Optional[int] = None\n    name: str = ''\n    engine_ids: List[int] = None  # 多引擎支持\n    engine_names: List[str] = None  # 引擎名称列表\n    yaml_configuration: str = ''  # YAML 格式的扫描配置\n    organization_id: Optional[int] = None  # 组织扫描模式\n    target_id: Optional[int] = None  # 目标扫描模式\n    cron_expression: Optional[str] = None\n    is_enabled: bool = True\n    run_count: int = 0\n    last_run_time: Optional[datetime] = None\n    next_run_time: Optional[datetime] = None\n    created_at: Optional[datetime] = None\n    updated_at: Optional[datetime] = None\n    \n    def __post_init__(self):\n        if self.engine_ids is None:\n            self.engine_ids = []\n        if self.engine_names is None:\n            self.engine_names = []\n\n\n@auto_ensure_db_connection\nclass DjangoScheduledScanRepository:\n    \"\"\"\n    定时扫描任务 Repository\n    \n    职责：\n    - CRUD 操作\n    - 查询封装\n    - 不包含业务逻辑\n    \"\"\"\n    \n    def get_by_id(self, scheduled_scan_id: int) -> Optional[ScheduledScan]:\n        \"\"\"根据 ID 查询定时扫描任务\"\"\"\n        try:\n            return ScheduledScan.objects.select_related('organization', 'target').get(id=scheduled_scan_id)\n        except ScheduledScan.DoesNotExist:\n            return None\n    \n    def get_queryset(self):\n        \"\"\"\n        获取所有定时扫描任务的查询集\n        \n        Returns:\n            QuerySet\n        \"\"\"\n        return ScheduledScan.objects.select_related('organization', 'target').order_by('-created_at')\n\n    def get_all(self, page: int = 1, page_size: int = 10) -> Tuple[List[ScheduledScan], int]:\n        \"\"\"\n        分页查询所有定时扫描任务\n        \n        Returns:\n            (定时扫描列表, 总数)\n        \"\"\"\n        queryset = self.get_queryset()\n        total = queryset.count()\n        \n        offset = (page - 1) * page_size\n        scheduled_scans = list(queryset[offset:offset + page_size])\n        \n        return scheduled_scans, total\n    \n    def get_enabled(self) -> List[ScheduledScan]:\n        \"\"\"获取所有启用的定时扫描任务\"\"\"\n        return list(\n            ScheduledScan.objects.select_related('target')\n            .filter(is_enabled=True)\n            .order_by('-created_at')\n        )\n    \n    def create(self, dto: ScheduledScanDTO) -> ScheduledScan:\n        \"\"\"\n        创建定时扫描任务\n        \n        Args:\n            dto: 定时扫描 DTO\n        \n        Returns:\n            创建的 ScheduledScan 对象\n        \"\"\"\n        with transaction.atomic():\n            scheduled_scan = ScheduledScan.objects.create(\n                name=dto.name,\n                engine_ids=dto.engine_ids,\n                engine_names=dto.engine_names,\n                yaml_configuration=dto.yaml_configuration,\n                organization_id=dto.organization_id,  # 组织扫描模式\n                target_id=dto.target_id if not dto.organization_id else None,  # 目标扫描模式\n                cron_expression=dto.cron_expression,\n                is_enabled=dto.is_enabled,\n            )\n            \n            scan_mode = \"organization\" if dto.organization_id else \"target\"\n            logger.info(\"创建定时扫描任务 - ID: %s, Name: %s, Mode: %s\", scheduled_scan.id, scheduled_scan.name, scan_mode)\n            return scheduled_scan\n    \n    def update(self, scheduled_scan_id: int, dto: ScheduledScanDTO) -> Optional[ScheduledScan]:\n        \"\"\"\n        更新定时扫描任务\n        \n        Args:\n            scheduled_scan_id: 定时扫描 ID\n            dto: 更新的数据\n        \n        Returns:\n            更新后的 ScheduledScan 对象，不存在返回 None\n        \"\"\"\n        try:\n            with transaction.atomic():\n                scheduled_scan = ScheduledScan.objects.select_for_update().get(id=scheduled_scan_id)\n                \n                # 更新基本字段\n                if dto.name:\n                    scheduled_scan.name = dto.name\n                if dto.engine_ids is not None:\n                    scheduled_scan.engine_ids = dto.engine_ids\n                if dto.engine_names is not None:\n                    scheduled_scan.engine_names = dto.engine_names\n                if dto.yaml_configuration is not None:\n                    scheduled_scan.yaml_configuration = dto.yaml_configuration\n                if dto.cron_expression is not None:\n                    scheduled_scan.cron_expression = dto.cron_expression\n                if dto.is_enabled is not None:\n                    scheduled_scan.is_enabled = dto.is_enabled\n                if dto.next_run_time is not None:\n                    scheduled_scan.next_run_time = dto.next_run_time\n                \n                # 切换扫描模式\n                if dto.organization_id is not None:\n                    # 切换到组织扫描模式\n                    scheduled_scan.organization_id = dto.organization_id\n                    scheduled_scan.target_id = None  # 清空目标\n                elif dto.target_id is not None:\n                    # 切换到目标扫描模式\n                    scheduled_scan.organization_id = None  # 清空组织\n                    scheduled_scan.target_id = dto.target_id\n                \n                scheduled_scan.save()\n                \n                scan_mode = \"organization\" if scheduled_scan.organization_id else \"target\"\n                logger.info(\"更新定时扫描任务 - ID: %s, Mode: %s\", scheduled_scan_id, scan_mode)\n                return scheduled_scan\n                \n        except ScheduledScan.DoesNotExist:\n            logger.warning(\"定时扫描任务不存在 - ID: %s\", scheduled_scan_id)\n            return None\n    \n    def update_next_run_time(self, scheduled_scan_id: int, next_run_time: datetime) -> bool:\n        \"\"\"更新下次执行时间\"\"\"\n        updated = ScheduledScan.objects.filter(id=scheduled_scan_id).update(\n            next_run_time=next_run_time\n        )\n        return updated > 0\n    \n    def increment_run_count(self, scheduled_scan_id: int) -> bool:\n        \"\"\"增加执行次数并更新上次执行时间\"\"\"\n        from django.db.models import F\n        updated = ScheduledScan.objects.filter(id=scheduled_scan_id).update(\n            run_count=F('run_count') + 1,\n            last_run_time=timezone.now()\n        )\n        return updated > 0\n    \n    def toggle_enabled(self, scheduled_scan_id: int, enabled: bool) -> bool:\n        \"\"\"切换启用状态\"\"\"\n        updated = ScheduledScan.objects.filter(id=scheduled_scan_id).update(\n            is_enabled=enabled\n        )\n        return updated > 0\n    \n    def hard_delete(self, scheduled_scan_id: int) -> bool:\n        \"\"\"删除定时扫描任务\"\"\"\n        deleted, _ = ScheduledScan.objects.filter(id=scheduled_scan_id).delete()\n        if deleted > 0:\n            logger.info(\"硬删除定时扫描任务 - ID: %s\", scheduled_scan_id)\n        return deleted > 0\n"
  },
  {
    "path": "backend/apps/scan/scripts/__init__.py",
    "content": ""
  },
  {
    "path": "backend/apps/scan/scripts/run_cleanup.py",
    "content": "#!/usr/bin/env python\n\"\"\"\n清理任务脚本\n\n用于动态容器执行清理任务，目前支持：\n- results: 清理过期的扫描结果目录\n\n如需添加其他清理任务，添加对应的 cleanup_xxx() 函数即可。\n\n注意：此脚本只做文件清理，不需要 Django 环境。\n\"\"\"\nimport argparse\nimport shutil\nimport logging\nfrom datetime import datetime, timedelta\nfrom pathlib import Path\n\nlogging.basicConfig(\n    level=logging.INFO,\n    format='[%(asctime)s] [%(levelname)s] %(message)s',\n    datefmt='%Y-%m-%d %H:%M:%S'\n)\nlogger = logging.getLogger(__name__)\n\n\ndef cleanup_results(results_dir: str, retention_days: int) -> dict:\n    \"\"\"\n    清理过期的扫描结果目录\n    \n    Args:\n        results_dir: 扫描结果根目录\n        retention_days: 保留天数\n        \n    Returns:\n        清理统计信息\n    \"\"\"\n    results_path = Path(results_dir)\n    if not results_path.exists():\n        logger.warning(f\"扫描结果目录不存在: {results_dir}\")\n        return {'deleted': 0, 'failed': 0, 'skipped': 0}\n    \n    cutoff_date = datetime.now() - timedelta(days=retention_days)\n    stats = {'deleted': 0, 'failed': 0, 'skipped': 0, 'freed_bytes': 0}\n    \n    logger.info(f\"开始清理扫描结果 - 目录: {results_dir}, 保留天数: {retention_days}\")\n    logger.info(f\"清理截止时间: {cutoff_date}\")\n    \n    for item in results_path.iterdir():\n        if not item.is_dir():\n            continue\n        \n        # 只处理 scan_ 开头的目录\n        if not item.name.startswith('scan_'):\n            stats['skipped'] += 1\n            continue\n        \n        try:\n            # 获取目录修改时间\n            mtime = datetime.fromtimestamp(item.stat().st_mtime)\n            \n            if mtime < cutoff_date:\n                # 计算目录大小\n                dir_size = sum(f.stat().st_size for f in item.rglob('*') if f.is_file())\n                \n                # 删除目录\n                shutil.rmtree(item)\n                stats['deleted'] += 1\n                stats['freed_bytes'] += dir_size\n                \n                logger.info(f\"  已删除: {item.name} (修改时间: {mtime}, 大小: {dir_size / 1024 / 1024:.2f} MB)\")\n            else:\n                stats['skipped'] += 1\n                \n        except Exception as e:\n            logger.error(f\"  删除失败: {item.name} - {e}\")\n            stats['failed'] += 1\n    \n    logger.info(f\"清理完成 - 删除: {stats['deleted']}, 失败: {stats['failed']}, 跳过: {stats['skipped']}\")\n    logger.info(f\"释放空间: {stats['freed_bytes'] / 1024 / 1024:.2f} MB\")\n    \n    return stats\n\n\ndef main():\n    parser = argparse.ArgumentParser(description=\"清理任务\")\n    parser.add_argument(\"--results_dir\", type=str, default=\"/opt/xingrin/results\", help=\"扫描结果目录\")\n    parser.add_argument(\"--retention_days\", type=int, default=7, help=\"保留天数\")\n    \n    args = parser.parse_args()\n    \n    stats = cleanup_results(args.results_dir, args.retention_days)\n    \n    print(f\"清理完成: {stats}\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "backend/apps/scan/scripts/run_delete_scans.py",
    "content": "#!/usr/bin/env python\n\"\"\"\n扫描硬删除脚本\n\n用于动态容器执行，硬删除已软删除的扫描及其关联数据。\n\"\"\"\nimport sys\nimport argparse\nimport json\nimport logging\nfrom apps.common.container_bootstrap import fetch_config_and_setup_django\n\nlogging.basicConfig(\n    level=logging.INFO,\n    format='[%(asctime)s] [%(levelname)s] %(message)s',\n    datefmt='%Y-%m-%d %H:%M:%S'\n)\nlogger = logging.getLogger(__name__)\n\n\ndef hard_delete_scans(scan_ids: list[int]) -> dict:\n    \"\"\"\n    硬删除扫描\n    \n    Args:\n        scan_ids: 扫描 ID 列表\n        \n    Returns:\n        删除统计信息\n    \"\"\"\n    from apps.scan.services import ScanService\n    \n    service = ScanService()\n    \n    try:\n        deleted_count, details = service.hard_delete_scans(scan_ids)\n        \n        logger.info(f\"✓ 硬删除完成 - 删除数量: {deleted_count}\")\n        logger.info(f\"  详情: {details}\")\n        \n        return {\n            'success': True,\n            'deleted_count': deleted_count,\n            'details': details,\n        }\n        \n    except Exception as e:\n        logger.error(f\"硬删除失败: {e}\", exc_info=True)\n        return {\n            'success': False,\n            'error': str(e),\n        }\n\n\ndef main():\n    parser = argparse.ArgumentParser(description=\"硬删除扫描\")\n    parser.add_argument(\"--scan_ids\", type=str, required=True, help=\"扫描 ID 列表 (JSON)\")\n    \n    args = parser.parse_args()\n    \n    # 解析 scan_ids\n    scan_ids = json.loads(args.scan_ids)\n    \n    logger.info(f\"开始硬删除 {len(scan_ids)} 个扫描\")\n    \n    # 获取配置并初始化 Django\n    fetch_config_and_setup_django()\n    \n    # 执行删除\n    result = hard_delete_scans(scan_ids)\n    \n    print(f\"删除完成: {result}\")\n    \n    if not result.get('success'):\n        sys.exit(1)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "backend/apps/scan/scripts/run_initiate_scan.py",
    "content": "#!/usr/bin/env python\n\"\"\"\n扫描任务启动脚本\n\n用于动态扫描容器启动时执行。\n必须在 Django 导入之前获取配置并设置环境变量。\n\"\"\"\nimport argparse\nimport sys\nimport os\nimport traceback\n\n\ndef diagnose_prefect_environment():\n    \"\"\"诊断 Prefect 运行环境，输出详细信息用于排查问题\"\"\"\n    print(\"\\n\" + \"=\"*60)\n    print(\"Prefect 环境诊断\")\n    print(\"=\"*60)\n    \n    # 1. 检查 Prefect 相关环境变量\n    print(\"\\n[诊断] Prefect 环境变量:\")\n    prefect_vars = [\n        'PREFECT_HOME',\n        'PREFECT_API_URL',\n        'PREFECT_SERVER_EPHEMERAL_ENABLED',\n        'PREFECT_SERVER_EPHEMERAL_STARTUP_TIMEOUT_SECONDS',\n        'PREFECT_SERVER_DATABASE_CONNECTION_URL',\n        'PREFECT_LOGGING_LEVEL',\n        'PREFECT_DEBUG_MODE',\n    ]\n    for var in prefect_vars:\n        value = os.environ.get(var, 'NOT SET')\n        print(f\"  {var}={value}\")\n    \n    # 2. 检查 PREFECT_HOME 目录\n    prefect_home = os.environ.get('PREFECT_HOME', os.path.expanduser('~/.prefect'))\n    print(f\"\\n[诊断] PREFECT_HOME 目录: {prefect_home}\")\n    if os.path.exists(prefect_home):\n        print(f\"  ✓ 目录存在\")\n        print(f\"  可写: {os.access(prefect_home, os.W_OK)}\")\n        try:\n            files = os.listdir(prefect_home)\n            print(f\"  文件列表: {files[:10]}{'...' if len(files) > 10 else ''}\")\n        except Exception as e:\n            print(f\"  ✗ 无法列出文件: {e}\")\n    else:\n        print(f\"  目录不存在，尝试创建...\")\n        try:\n            os.makedirs(prefect_home, exist_ok=True)\n            print(f\"  ✓ 创建成功\")\n        except Exception as e:\n            print(f\"  ✗ 创建失败: {e}\")\n    \n    # 3. 检查 uvicorn 是否可用\n    print(f\"\\n[诊断] uvicorn 可用性:\")\n    import shutil\n    uvicorn_path = shutil.which('uvicorn')\n    if uvicorn_path:\n        print(f\"  ✓ uvicorn 路径: {uvicorn_path}\")\n    else:\n        print(f\"  ✗ uvicorn 不在 PATH 中\")\n        print(f\"  PATH: {os.environ.get('PATH', 'NOT SET')}\")\n    \n    # 4. 检查 Prefect 版本\n    print(f\"\\n[诊断] Prefect 版本:\")\n    try:\n        import prefect\n        print(f\"  ✓ prefect=={prefect.__version__}\")\n    except Exception as e:\n        print(f\"  ✗ 无法导入 prefect: {e}\")\n    \n    # 5. 检查 SQLite 支持\n    print(f\"\\n[诊断] SQLite 支持:\")\n    try:\n        import sqlite3\n        print(f\"  ✓ sqlite3 版本: {sqlite3.sqlite_version}\")\n        # 测试创建数据库\n        test_db = os.path.join(prefect_home, 'test.db')\n        conn = sqlite3.connect(test_db)\n        conn.execute('CREATE TABLE IF NOT EXISTS test (id INTEGER)')\n        conn.close()\n        os.remove(test_db)\n        print(f\"  ✓ SQLite 读写测试通过\")\n    except Exception as e:\n        print(f\"  ✗ SQLite 测试失败: {e}\")\n    \n    # 6. 检查端口绑定能力\n    print(f\"\\n[诊断] 端口绑定测试:\")\n    try:\n        import socket\n        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n        sock.bind(('127.0.0.1', 0))\n        port = sock.getsockname()[1]\n        sock.close()\n        print(f\"  ✓ 可以绑定 127.0.0.1 端口 (测试端口: {port})\")\n    except Exception as e:\n        print(f\"  ✗ 端口绑定失败: {e}\")\n    \n    # 7. 检查内存情况\n    print(f\"\\n[诊断] 系统资源:\")\n    try:\n        import psutil\n        mem = psutil.virtual_memory()\n        print(f\"  内存总量: {mem.total / 1024 / 1024:.0f} MB\")\n        print(f\"  可用内存: {mem.available / 1024 / 1024:.0f} MB\")\n        print(f\"  内存使用率: {mem.percent}%\")\n    except ImportError:\n        print(f\"  psutil 未安装，跳过内存检查\")\n    except Exception as e:\n        print(f\"  ✗ 资源检查失败: {e}\")\n    \n    print(\"\\n\" + \"=\"*60)\n    print(\"诊断完成\")\n    print(\"=\"*60 + \"\\n\")\n\n\ndef main():\n    print(\"=\"*60)\n    print(\"run_initiate_scan.py 启动\")\n    print(f\"  Python: {sys.version}\")\n    print(f\"  CWD: {os.getcwd()}\")\n    print(f\"  SERVER_URL: {os.environ.get('SERVER_URL', 'NOT SET')}\")\n    print(\"=\"*60)\n    \n    # 1. 从配置中心获取配置并初始化 Django（必须在 Django 导入之前）\n    print(\"[1/4] 从配置中心获取配置...\")\n    try:\n        from apps.common.container_bootstrap import fetch_config_and_setup_django\n        fetch_config_and_setup_django()\n        print(\"[1/4] ✓ 配置获取成功\")\n    except Exception as e:\n        print(f\"[1/4] ✗ 配置获取失败: {e}\")\n        traceback.print_exc()\n        sys.exit(1)\n    \n    # 2. 解析命令行参数\n    print(\"[2/4] 解析命令行参数...\")\n    parser = argparse.ArgumentParser(description=\"执行扫描初始化 Flow\")\n    parser.add_argument(\"--scan_id\", type=int, required=True, help=\"扫描任务 ID\")\n    parser.add_argument(\"--target_name\", type=str, required=True, help=\"目标名称\")\n    parser.add_argument(\"--target_id\", type=int, required=True, help=\"目标 ID\")\n    parser.add_argument(\"--scan_workspace_dir\", type=str, required=True, help=\"扫描工作目录\")\n    parser.add_argument(\"--engine_name\", type=str, required=True, help=\"引擎名称\")\n    parser.add_argument(\"--scheduled_scan_name\", type=str, default=None, help=\"定时扫描任务名称（可选）\")\n    \n    args = parser.parse_args()\n    print(f\"[2/4] ✓ 参数解析成功:\")\n    print(f\"       scan_id: {args.scan_id}\")\n    print(f\"       target_name: {args.target_name}\")\n    print(f\"       target_id: {args.target_id}\")\n    print(f\"       scan_workspace_dir: {args.scan_workspace_dir}\")\n    print(f\"       engine_name: {args.engine_name}\")\n    print(f\"       scheduled_scan_name: {args.scheduled_scan_name}\")\n    \n    # 2.5. 运行 Prefect 环境诊断（仅在 DEBUG 模式下）\n    if os.environ.get('DEBUG', '').lower() == 'true':\n        diagnose_prefect_environment()\n    \n    # 3. 现在可以安全导入 Django 相关模块\n    print(\"[3/4] 导入 initiate_scan_flow...\")\n    try:\n        from apps.scan.flows.initiate_scan_flow import initiate_scan_flow\n        print(\"[3/4] ✓ 导入成功\")\n    except Exception as e:\n        print(f\"[3/4] ✗ 导入失败: {e}\")\n        traceback.print_exc()\n        sys.exit(1)\n    \n    # 4. 执行 Flow\n    print(\"[4/4] 执行 initiate_scan_flow...\")\n    try:\n        result = initiate_scan_flow(\n            scan_id=args.scan_id,\n            target_name=args.target_name,\n            target_id=args.target_id,\n            scan_workspace_dir=args.scan_workspace_dir,\n            engine_name=args.engine_name,\n            scheduled_scan_name=args.scheduled_scan_name,\n        )\n        print(\"[4/4] ✓ Flow 执行完成\")\n        print(f\"结果: {result}\")\n    except Exception as e:\n        print(f\"[4/4] ✗ Flow 执行失败: {e}\")\n        traceback.print_exc()\n        sys.exit(1)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "backend/apps/scan/scripts/run_scheduled_scan.py",
    "content": ""
  },
  {
    "path": "backend/apps/scan/serializers/__init__.py",
    "content": "\"\"\"Scan Serializers - 统一导出\"\"\"\n\nfrom .mixins import ScanConfigValidationMixin\nfrom .scan_serializers import (\n    ScanSerializer,\n    ScanHistorySerializer,\n    QuickScanSerializer,\n    InitiateScanSerializer,\n)\nfrom .scan_log_serializers import ScanLogSerializer\nfrom .scheduled_scan_serializers import (\n    ScheduledScanSerializer,\n    CreateScheduledScanSerializer,\n    UpdateScheduledScanSerializer,\n    ToggleScheduledScanSerializer,\n)\nfrom .subfinder_provider_settings_serializers import SubfinderProviderSettingsSerializer\n\n# 兼容旧名称\nProviderSettingsSerializer = SubfinderProviderSettingsSerializer\n\n__all__ = [\n    # Mixins\n    'ScanConfigValidationMixin',\n    # Scan\n    'ScanSerializer',\n    'ScanHistorySerializer',\n    'QuickScanSerializer',\n    'InitiateScanSerializer',\n    # ScanLog\n    'ScanLogSerializer',\n    # Scheduled Scan\n    'ScheduledScanSerializer',\n    'CreateScheduledScanSerializer',\n    'UpdateScheduledScanSerializer',\n    'ToggleScheduledScanSerializer',\n    # Subfinder Provider Settings\n    'SubfinderProviderSettingsSerializer',\n    'ProviderSettingsSerializer',  # 兼容旧名称\n]\n"
  },
  {
    "path": "backend/apps/scan/serializers/mixins.py",
    "content": "\"\"\"序列化器通用 Mixin 和工具类\"\"\"\n\nfrom rest_framework import serializers\nimport yaml\n\n\nclass DuplicateKeyLoader(yaml.SafeLoader):\n    \"\"\"自定义 YAML Loader，检测重复 key\"\"\"\n    pass\n\n\ndef _check_duplicate_keys(loader, node, deep=False):\n    \"\"\"检测 YAML mapping 中的重复 key\"\"\"\n    mapping = {}\n    for key_node, value_node in node.value:\n        key = loader.construct_object(key_node, deep=deep)\n        if key in mapping:\n            raise yaml.constructor.ConstructorError(\n                \"while constructing a mapping\", node.start_mark,\n                f\"发现重复的配置项 '{key}'，后面的配置会覆盖前面的配置，请删除重复项\", key_node.start_mark\n            )\n        mapping[key] = loader.construct_object(value_node, deep=deep)\n    return mapping\n\n\nDuplicateKeyLoader.add_constructor(\n    yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG,\n    _check_duplicate_keys\n)\n\n\nclass ScanConfigValidationMixin:\n    \"\"\"扫描配置验证 Mixin\"\"\"\n    \n    def validate_configuration(self, value):\n        \"\"\"验证 YAML 配置格式\"\"\"\n        if not value or not value.strip():\n            raise serializers.ValidationError(\"configuration 不能为空\")\n        \n        try:\n            yaml.load(value, Loader=DuplicateKeyLoader)\n        except yaml.YAMLError as e:\n            raise serializers.ValidationError(f\"无效的 YAML 格式: {str(e)}\")\n        \n        return value\n    \n    def validate_engine_ids(self, value):\n        \"\"\"验证引擎 ID 列表\"\"\"\n        if not value:\n            raise serializers.ValidationError(\"engine_ids 不能为空，请至少选择一个扫描引擎\")\n        return value\n    \n    def validate_engine_names(self, value):\n        \"\"\"验证引擎名称列表\"\"\"\n        if not value:\n            raise serializers.ValidationError(\"engine_names 不能为空\")\n        return value\n"
  },
  {
    "path": "backend/apps/scan/serializers/scan_log_serializers.py",
    "content": "\"\"\"扫描日志序列化器\"\"\"\n\nfrom rest_framework import serializers\n\nfrom ..models import ScanLog\n\n\nclass ScanLogSerializer(serializers.ModelSerializer):\n    \"\"\"扫描日志序列化器\"\"\"\n    \n    class Meta:\n        model = ScanLog\n        fields = ['id', 'level', 'content', 'created_at']\n"
  },
  {
    "path": "backend/apps/scan/serializers/scan_serializers.py",
    "content": "\"\"\"扫描任务序列化器\"\"\"\n\nfrom rest_framework import serializers\n\nfrom ..models import Scan\nfrom .mixins import ScanConfigValidationMixin\n\n\nclass ScanSerializer(serializers.ModelSerializer):\n    \"\"\"扫描任务序列化器\"\"\"\n    target_name = serializers.SerializerMethodField()\n    \n    class Meta:\n        model = Scan\n        fields = [\n            'id', 'target', 'target_name', 'engine_ids', 'engine_names',\n            'created_at', 'stopped_at', 'status', 'results_dir',\n            'container_ids', 'error_message'\n        ]\n        read_only_fields = [\n            'id', 'created_at', 'stopped_at', 'results_dir',\n            'container_ids', 'error_message', 'status'\n        ]\n    \n    def get_target_name(self, obj):\n        return obj.target.name if obj.target else None\n\n\nclass ScanHistorySerializer(serializers.ModelSerializer):\n    \"\"\"扫描历史列表序列化器\"\"\"\n    \n    target_name = serializers.CharField(source='target.name', read_only=True)\n    worker_name = serializers.CharField(source='worker.name', read_only=True, allow_null=True)\n    summary = serializers.SerializerMethodField()\n    progress = serializers.IntegerField(read_only=True)\n    current_stage = serializers.CharField(read_only=True)\n    stage_progress = serializers.JSONField(read_only=True)\n    \n    class Meta:\n        model = Scan\n        fields = [\n            'id', 'target', 'target_name', 'engine_ids', 'engine_names', \n            'worker_name', 'created_at', 'status', 'error_message', 'summary', \n            'progress', 'current_stage', 'stage_progress', 'yaml_configuration'\n        ]\n    \n    def get_summary(self, obj):\n        summary = {\n            'subdomains': obj.cached_subdomains_count or 0,\n            'websites': obj.cached_websites_count or 0,\n            'endpoints': obj.cached_endpoints_count or 0,\n            'ips': obj.cached_ips_count or 0,\n            'directories': obj.cached_directories_count or 0,\n            'screenshots': obj.cached_screenshots_count or 0,\n        }\n        summary['vulnerabilities'] = {\n            'total': obj.cached_vulns_total or 0,\n            'critical': obj.cached_vulns_critical or 0,\n            'high': obj.cached_vulns_high or 0,\n            'medium': obj.cached_vulns_medium or 0,\n            'low': obj.cached_vulns_low or 0,\n        }\n        return summary\n\n\nclass QuickScanSerializer(ScanConfigValidationMixin, serializers.Serializer):\n    \"\"\"快速扫描序列化器\"\"\"\n    \n    MAX_BATCH_SIZE = 5000\n    \n    targets = serializers.ListField(\n        child=serializers.DictField(),\n        help_text='目标列表，每个目标包含 name 字段'\n    )\n    configuration = serializers.CharField(required=True, help_text='YAML 格式的扫描配置')\n    engine_ids = serializers.ListField(child=serializers.IntegerField(), required=True)\n    engine_names = serializers.ListField(child=serializers.CharField(), required=True)\n    \n    def validate_targets(self, value):\n        if not value:\n            raise serializers.ValidationError(\"目标列表不能为空\")\n        if len(value) > self.MAX_BATCH_SIZE:\n            raise serializers.ValidationError(\n                f\"快速扫描最多支持 {self.MAX_BATCH_SIZE} 个目标，当前提交了 {len(value)} 个\"\n            )\n        for idx, target in enumerate(value):\n            if 'name' not in target:\n                raise serializers.ValidationError(f\"第 {idx + 1} 个目标缺少 name 字段\")\n            if not target['name']:\n                raise serializers.ValidationError(f\"第 {idx + 1} 个目标的 name 不能为空\")\n        return value\n\n\nclass InitiateScanSerializer(ScanConfigValidationMixin, serializers.Serializer):\n    \"\"\"发起扫描任务序列化器\"\"\"\n    \n    configuration = serializers.CharField(required=True, help_text='YAML 格式的扫描配置')\n    engine_ids = serializers.ListField(child=serializers.IntegerField(), required=True)\n    engine_names = serializers.ListField(child=serializers.CharField(), required=True)\n    organization_id = serializers.IntegerField(required=False, allow_null=True)\n    target_id = serializers.IntegerField(required=False, allow_null=True)\n    \n    def validate(self, data):\n        organization_id = data.get('organization_id')\n        target_id = data.get('target_id')\n        \n        if not organization_id and not target_id:\n            raise serializers.ValidationError('必须提供 organization_id 或 target_id 其中之一')\n        if organization_id and target_id:\n            raise serializers.ValidationError('organization_id 和 target_id 只能提供其中之一')\n        \n        return data\n"
  },
  {
    "path": "backend/apps/scan/serializers/scheduled_scan_serializers.py",
    "content": "\"\"\"定时扫描序列化器\"\"\"\n\nfrom rest_framework import serializers\n\nfrom ..models import ScheduledScan\nfrom .mixins import ScanConfigValidationMixin\n\n\nclass ScheduledScanSerializer(serializers.ModelSerializer):\n    \"\"\"定时扫描任务序列化器（用于列表和详情）\"\"\"\n    \n    organization_id = serializers.IntegerField(source='organization.id', read_only=True, allow_null=True)\n    organization_name = serializers.CharField(source='organization.name', read_only=True, allow_null=True)\n    target_id = serializers.IntegerField(source='target.id', read_only=True, allow_null=True)\n    target_name = serializers.CharField(source='target.name', read_only=True, allow_null=True)\n    scan_mode = serializers.SerializerMethodField()\n    \n    class Meta:\n        model = ScheduledScan\n        fields = [\n            'id', 'name',\n            'engine_ids', 'engine_names',\n            'organization_id', 'organization_name',\n            'target_id', 'target_name',\n            'scan_mode',\n            'cron_expression',\n            'is_enabled',\n            'run_count', 'last_run_time', 'next_run_time',\n            'created_at', 'updated_at'\n        ]\n        read_only_fields = [\n            'id', 'run_count',\n            'last_run_time', 'next_run_time',\n            'created_at', 'updated_at'\n        ]\n    \n    def get_scan_mode(self, obj):\n        return 'organization' if obj.organization_id else 'target'\n\n\nclass CreateScheduledScanSerializer(ScanConfigValidationMixin, serializers.Serializer):\n    \"\"\"创建定时扫描任务序列化器\"\"\"\n    \n    name = serializers.CharField(max_length=200, help_text='任务名称')\n    configuration = serializers.CharField(required=True, help_text='YAML 格式的扫描配置')\n    engine_ids = serializers.ListField(child=serializers.IntegerField(), required=True)\n    engine_names = serializers.ListField(child=serializers.CharField(), required=True)\n    organization_id = serializers.IntegerField(required=False, allow_null=True)\n    target_id = serializers.IntegerField(required=False, allow_null=True)\n    cron_expression = serializers.CharField(max_length=100, default='0 2 * * *')\n    is_enabled = serializers.BooleanField(default=True)\n    \n    def validate(self, data):\n        organization_id = data.get('organization_id')\n        target_id = data.get('target_id')\n        \n        if not organization_id and not target_id:\n            raise serializers.ValidationError('必须提供 organization_id 或 target_id 其中之一')\n        if organization_id and target_id:\n            raise serializers.ValidationError('organization_id 和 target_id 只能提供其中之一')\n        \n        return data\n\n\nclass UpdateScheduledScanSerializer(serializers.Serializer):\n    \"\"\"更新定时扫描任务序列化器\"\"\"\n    \n    name = serializers.CharField(max_length=200, required=False)\n    engine_ids = serializers.ListField(child=serializers.IntegerField(), required=False)\n    organization_id = serializers.IntegerField(required=False, allow_null=True)\n    target_id = serializers.IntegerField(required=False, allow_null=True)\n    cron_expression = serializers.CharField(max_length=100, required=False)\n    is_enabled = serializers.BooleanField(required=False)\n    \n    def validate_engine_ids(self, value):\n        if value is not None and not value:\n            raise serializers.ValidationError(\"engine_ids 不能为空\")\n        return value\n\n\nclass ToggleScheduledScanSerializer(serializers.Serializer):\n    \"\"\"切换定时扫描启用状态序列化器\"\"\"\n    \n    is_enabled = serializers.BooleanField(help_text='是否启用')\n"
  },
  {
    "path": "backend/apps/scan/serializers/subfinder_provider_settings_serializers.py",
    "content": "\"\"\"Subfinder Provider 配置序列化器\"\"\"\n\nfrom rest_framework import serializers\n\n\nclass SubfinderProviderSettingsSerializer(serializers.Serializer):\n    \"\"\"Subfinder Provider 配置序列化器\n    \n    支持的 Provider:\n    - fofa: email + api_key (composite)\n    - censys: api_id + api_secret (composite)\n    - hunter, shodan, zoomeye, securitytrails, threatbook, quake: api_key (single)\n    \n    注意：djangorestframework-camel-case 会自动处理 camelCase <-> snake_case 转换\n    所以这里统一使用 snake_case\n    \"\"\"\n    \n    VALID_PROVIDERS = {\n        'fofa', 'hunter', 'shodan', 'censys', \n        'zoomeye', 'securitytrails', 'threatbook', 'quake'\n    }\n    \n    def to_internal_value(self, data):\n        \"\"\"验证并转换输入数据\"\"\"\n        if not isinstance(data, dict):\n            raise serializers.ValidationError('Expected a dictionary')\n        \n        result = {}\n        for provider, config in data.items():\n            if provider not in self.VALID_PROVIDERS:\n                continue\n            \n            if not isinstance(config, dict):\n                continue\n            \n            db_config = {'enabled': bool(config.get('enabled', False))}\n            \n            if provider == 'fofa':\n                db_config['email'] = str(config.get('email', ''))\n                db_config['api_key'] = str(config.get('api_key', ''))\n            elif provider == 'censys':\n                db_config['api_id'] = str(config.get('api_id', ''))\n                db_config['api_secret'] = str(config.get('api_secret', ''))\n            else:\n                db_config['api_key'] = str(config.get('api_key', ''))\n            \n            result[provider] = db_config\n        \n        return result\n    \n    def to_representation(self, instance):\n        \"\"\"输出数据（数据库格式，camel-case 中间件会自动转换）\"\"\"\n        if isinstance(instance, dict):\n            return instance\n        return instance.providers if hasattr(instance, 'providers') else {}\n"
  },
  {
    "path": "backend/apps/scan/services/__init__.py",
    "content": "\"\"\"\n扫描服务模块\n\n提供各种扫描任务的服务功能\n\n架构：\n- ScanService: 主服务（协调者）\n- ScanCreationService: 创建服务\n- ScanStateService: 状态管理服务\n- ScanControlService: 控制服务\n- ScanStatsService: 统计服务\n\"\"\"\n\nfrom .scan_service import ScanService\nfrom .scan_creation_service import ScanCreationService\nfrom .scan_state_service import ScanStateService\nfrom .scan_control_service import ScanControlService\nfrom .scan_stats_service import ScanStatsService\nfrom .scheduled_scan_service import ScheduledScanService\nfrom .target_export_service import (\n    TargetExportService,\n    create_export_service,\n    export_urls_with_fallback,\n    DataSource,\n)\n\n__all__ = [\n    'ScanService',           # 主入口（向后兼容）\n    'ScanCreationService',\n    'ScanStateService',\n    'ScanControlService',\n    'ScanStatsService',\n    'ScheduledScanService',\n    'TargetExportService',   # 目标导出服务\n    'create_export_service',\n    'export_urls_with_fallback',\n    'DataSource',\n]\n\n"
  },
  {
    "path": "backend/apps/scan/services/quick_scan_service.py",
    "content": "\"\"\"\n快速扫描服务\n\n负责解析用户输入（URL、域名、IP、CIDR）并创建对应的资产数据\n\"\"\"\n\nimport logging\nfrom dataclasses import dataclass\nfrom typing import Optional, Literal, List, Dict, Any\nfrom urllib.parse import urlparse\n\nfrom django.db import transaction\n\nfrom apps.common.validators import validate_url, detect_input_type, validate_domain, validate_ip, validate_cidr, is_valid_ip\nfrom apps.targets.services.target_service import TargetService\nfrom apps.targets.models import Target\nfrom apps.asset.dtos import WebSiteDTO\nfrom apps.asset.dtos.asset import EndpointDTO\nfrom apps.asset.repositories.asset.website_repository import DjangoWebSiteRepository\nfrom apps.asset.repositories.asset.endpoint_repository import DjangoEndpointRepository\n\nlogger = logging.getLogger(__name__)\n\n\n@dataclass\nclass ParsedInputDTO:\n    \"\"\"\n    解析输入 DTO\n    \n    只在快速扫描流程中使用\n    \"\"\"\n    original_input: str\n    input_type: Literal['url', 'domain', 'ip', 'cidr']\n    target_name: str                              # host/domain/ip/cidr\n    target_type: Literal['domain', 'ip', 'cidr']\n    website_url: Optional[str] = None             # 根 URL（scheme://host[:port]）\n    endpoint_url: Optional[str] = None            # 完整 URL（含路径）\n    is_valid: bool = True\n    error: Optional[str] = None\n    line_number: Optional[int] = None\n\n\nclass QuickScanService:\n    \"\"\"快速扫描服务 - 解析输入并创建资产\"\"\"\n    \n    def __init__(self):\n        self.target_service = TargetService()\n        self.website_repo = DjangoWebSiteRepository()\n        self.endpoint_repo = DjangoEndpointRepository()\n    \n    def parse_inputs(self, inputs: List[str]) -> List[ParsedInputDTO]:\n        \"\"\"\n        解析多行输入\n        \n        Args:\n            inputs: 输入字符串列表（每行一个）\n            \n        Returns:\n            解析结果列表（跳过空行）\n        \"\"\"\n        results = []\n        for line_number, input_str in enumerate(inputs, start=1):\n            input_str = input_str.strip()\n            \n            # 空行跳过\n            if not input_str:\n                continue\n            \n            try:\n                # 检测输入类型\n                input_type = detect_input_type(input_str)\n                \n                if input_type == 'url':\n                    dto = self._parse_url_input(input_str, line_number)\n                else:\n                    dto = self._parse_target_input(input_str, input_type, line_number)\n                \n                results.append(dto)\n            except ValueError as e:\n                # 解析失败，记录错误\n                results.append(ParsedInputDTO(\n                    original_input=input_str,\n                    input_type='domain',  # 默认类型\n                    target_name=input_str,\n                    target_type='domain',\n                    is_valid=False,\n                    error=str(e),\n                    line_number=line_number\n                ))\n        \n        return results\n    \n    def _parse_url_input(self, url_str: str, line_number: int) -> ParsedInputDTO:\n        \"\"\"\n        解析 URL 输入\n        \n        Args:\n            url_str: URL 字符串\n            line_number: 行号\n            \n        Returns:\n            ParsedInputDTO\n        \"\"\"\n        # 验证 URL 格式\n        validate_url(url_str)\n        \n        # 使用标准库解析\n        parsed = urlparse(url_str)\n        \n        host = parsed.hostname  # 不含端口\n        has_path = parsed.path and parsed.path != '/'\n        \n        # 构建 root_url: scheme://host[:port]\n        root_url = f\"{parsed.scheme}://{parsed.netloc}\"\n        \n        # 检测 host 类型（domain 或 ip）\n        target_type = 'ip' if is_valid_ip(host) else 'domain'\n        \n        return ParsedInputDTO(\n            original_input=url_str,\n            input_type='url',\n            target_name=host,\n            target_type=target_type,\n            website_url=root_url,\n            endpoint_url=url_str if has_path else None,\n            line_number=line_number\n        )\n    \n    def _parse_target_input(\n        self, \n        input_str: str, \n        input_type: str, \n        line_number: int\n    ) -> ParsedInputDTO:\n        \"\"\"\n        解析非 URL 输入（domain/ip/cidr）\n        \n        Args:\n            input_str: 输入字符串\n            input_type: 输入类型\n            line_number: 行号\n            \n        Returns:\n            ParsedInputDTO\n        \"\"\"\n        # 验证格式\n        if input_type == 'domain':\n            validate_domain(input_str)\n            target_type = 'domain'\n        elif input_type == 'ip':\n            validate_ip(input_str)\n            target_type = 'ip'\n        elif input_type == 'cidr':\n            validate_cidr(input_str)\n            target_type = 'cidr'\n        else:\n            raise ValueError(f\"未知的输入类型: {input_type}\")\n        \n        return ParsedInputDTO(\n            original_input=input_str,\n            input_type=input_type,\n            target_name=input_str,\n            target_type=target_type,\n            website_url=None,\n            endpoint_url=None,\n            line_number=line_number\n        )\n    \n    @transaction.atomic\n    def process_quick_scan(\n        self, \n        inputs: List[str],\n        engine_id: int\n    ) -> Dict[str, Any]:\n        \"\"\"\n        处理快速扫描请求\n        \n        Args:\n            inputs: 输入字符串列表\n            engine_id: 扫描引擎 ID\n            \n        Returns:\n            处理结果字典\n        \"\"\"\n        # 1. 解析输入\n        parsed_inputs = self.parse_inputs(inputs)\n        \n        # 分离有效和无效输入\n        valid_inputs = [p for p in parsed_inputs if p.is_valid]\n        invalid_inputs = [p for p in parsed_inputs if not p.is_valid]\n        \n        if not valid_inputs:\n            return {\n                'targets': [],\n                'target_stats': {'created': 0, 'reused': 0, 'failed': len(invalid_inputs)},\n                'asset_stats': {'websites_created': 0, 'endpoints_created': 0},\n                'errors': [\n                    {'line_number': p.line_number, 'input': p.original_input, 'error': p.error}\n                    for p in invalid_inputs\n                ]\n            }\n        \n        # 2. 创建资产\n        asset_result = self.create_assets_from_parsed_inputs(valid_inputs)\n        \n        # 3. 返回结果\n        return {\n            'targets': asset_result['targets'],\n            'target_stats': asset_result['target_stats'],\n            'asset_stats': asset_result['asset_stats'],\n            'errors': [\n                {'line_number': p.line_number, 'input': p.original_input, 'error': p.error}\n                for p in invalid_inputs\n            ]\n        }\n    \n    def create_assets_from_parsed_inputs(\n        self, \n        parsed_inputs: List[ParsedInputDTO]\n    ) -> Dict[str, Any]:\n        \"\"\"\n        从解析结果创建资产\n        \n        Args:\n            parsed_inputs: 解析结果列表（只包含有效输入）\n            \n        Returns:\n            创建结果字典\n        \"\"\"\n        # 1. 收集所有 target 数据（内存操作，去重）\n        targets_data = {}\n        for dto in parsed_inputs:\n            if dto.target_name not in targets_data:\n                targets_data[dto.target_name] = {'name': dto.target_name, 'type': dto.target_type}\n        \n        targets_list = list(targets_data.values())\n        \n        # 2. 批量创建 Target（复用现有方法）\n        target_result = self.target_service.batch_create_targets(targets_list)\n        \n        # 3. 查询刚创建的 Target，建立 name → id 映射\n        target_names = [d['name'] for d in targets_list]\n        targets = Target.objects.filter(name__in=target_names)\n        target_id_map = {t.name: t.id for t in targets}\n        \n        # 4. 收集 Website DTO（内存操作，去重）\n        website_dtos = []\n        seen_websites = set()\n        for dto in parsed_inputs:\n            if dto.website_url and dto.website_url not in seen_websites:\n                seen_websites.add(dto.website_url)\n                target_id = target_id_map.get(dto.target_name)\n                if target_id:\n                    website_dtos.append(WebSiteDTO(\n                        target_id=target_id,\n                        url=dto.website_url,\n                        host=dto.target_name\n                    ))\n        \n        # 5. 批量创建 Website（存在即跳过）\n        websites_created = 0\n        if website_dtos:\n            websites_created = self.website_repo.bulk_create_ignore_conflicts(website_dtos)\n        \n        # 6. 收集 Endpoint DTO（内存操作，去重）\n        endpoint_dtos = []\n        seen_endpoints = set()\n        for dto in parsed_inputs:\n            if dto.endpoint_url and dto.endpoint_url not in seen_endpoints:\n                seen_endpoints.add(dto.endpoint_url)\n                target_id = target_id_map.get(dto.target_name)\n                if target_id:\n                    endpoint_dtos.append(EndpointDTO(\n                        target_id=target_id,\n                        url=dto.endpoint_url,\n                        host=dto.target_name\n                    ))\n        \n        # 7. 批量创建 Endpoint（存在即跳过）\n        endpoints_created = 0\n        if endpoint_dtos:\n            endpoints_created = self.endpoint_repo.bulk_create_ignore_conflicts(endpoint_dtos)\n        \n        return {\n            'targets': list(targets),\n            'target_stats': {\n                'created': target_result['created_count'],\n                'reused': 0,  # bulk_create 无法区分新建和复用\n                'failed': target_result['failed_count']\n            },\n            'asset_stats': {\n                'websites_created': websites_created,\n                'endpoints_created': endpoints_created\n            }\n        }\n"
  },
  {
    "path": "backend/apps/scan/services/scan_control_service.py",
    "content": "\"\"\"\n扫描控制服务\n\n职责：\n- 停止扫描（docker kill 强制杀死）\n- 删除扫描（两阶段删除）\n\"\"\"\n\nimport logging\nimport threading\nfrom typing import Dict, List\nfrom django.db import transaction, connection\nfrom django.db.utils import DatabaseError, OperationalError\nfrom django.core.exceptions import ObjectDoesNotExist\nfrom django.utils import timezone\n\nfrom apps.common.definitions import ScanStatus\nfrom apps.scan.repositories import DjangoScanRepository\n\nlogger = logging.getLogger(__name__)\n\n\nclass ScanControlService:\n    \"\"\"\n    扫描控制服务\n    \n    职责：\n    - 停止扫描（取消 Flow Run）\n    - 删除扫描（两阶段删除）\n    - 批量操作\n    \"\"\"\n    \n    def __init__(self):\n        \"\"\"\n        初始化服务\n        \"\"\"\n        self.scan_repo = DjangoScanRepository()\n\n    def _stop_containers(\n        self, \n        container_ids: List[str],\n        worker_id: int,\n    ) -> int:\n        \"\"\"\n        在指定 Worker 上停止 Docker 容器\n        \n        Args:\n            container_ids: 容器 ID 列表\n            worker_id: Worker 节点 ID\n            \n        Returns:\n            成功停止的数量\n        \"\"\"\n        if not container_ids:\n            return 0\n        \n        from apps.engine.models import WorkerNode\n        \n        try:\n            worker = WorkerNode.objects.get(id=worker_id)\n        except WorkerNode.DoesNotExist:\n            logger.error(f\"Worker 不存在: {worker_id}\")\n            return 0\n        \n        # 构建 docker kill 命令（强制杀死，避免进程不响应 SIGTERM）\n        container_ids_str = ' '.join(container_ids)\n        docker_cmd = f\"docker kill {container_ids_str} 2>/dev/null || true\"\n        \n        stopped_count = 0\n        \n        if worker.is_local:\n            # 本地执行\n            import subprocess\n            try:\n                result = subprocess.run(\n                    docker_cmd,\n                    shell=True,\n                    capture_output=True,\n                    text=True,\n                    timeout=30\n                )\n                # 统计成功停止的容器数（输出的每一行是一个成功停止的容器 ID）\n                if result.stdout:\n                    stopped_count = len(result.stdout.strip().split('\\n'))\n                logger.info(f\"本地 docker kill 完成: {stopped_count}/{len(container_ids)}\")\n            except Exception as e:\n                logger.error(f\"本地 docker kill 失败: {e}\")\n        else:\n            # 远程通过 SSH 执行\n            import paramiko\n            ssh = None\n            try:\n                ssh = paramiko.SSHClient()\n                ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())\n                ssh.connect(\n                    hostname=worker.ip_address,\n                    port=worker.ssh_port,\n                    username=worker.username,\n                    password=worker.password if worker.password else None,\n                    timeout=10,\n                )\n                \n                stdin, stdout, stderr = ssh.exec_command(docker_cmd, timeout=30)\n                output = stdout.read().decode().strip()\n                if output:\n                    stopped_count = len(output.split('\\n'))\n                logger.info(f\"SSH docker kill 完成 - Worker: {worker.name}, 数量: {stopped_count}/{len(container_ids)}\")\n            except Exception as e:\n                logger.error(f\"SSH docker kill 失败 - Worker: {worker.name}: {e}\")\n            finally:\n                if ssh:\n                    ssh.close()\n        \n        return stopped_count\n\n    def delete_scans_two_phase(self, scan_ids: List[int]) -> dict:\n        \"\"\"\n        两阶段删除扫描任务\n        \n        流程：\n        1. 软删除：立即更新 deleted_at 字段（同步，快速）\n        2. 后台异步：停止容器 + 分发硬删除任务（不阻塞 API）\n        \n        Args:\n            scan_ids: 扫描任务 ID 列表\n            \n        Returns:\n            删除结果统计\n        \"\"\"\n        # 1. 获取要删除的 Scan 信息\n        scans = list(self.scan_repo.get_all(prefetch_relations=False).filter(id__in=scan_ids))\n        if not scans:\n            raise ValueError(\"未找到要删除的 Scan\")\n            \n        scan_names = [f\"Scan #{s.id}\" for s in scans]\n        existing_ids = [s.id for s in scans]\n        \n        # 2. 收集需要停止的容器信息（同步收集，异步执行）\n        containers_by_worker: Dict[int, List[str]] = {}\n        for scan in scans:\n            if scan.status in [ScanStatus.RUNNING, ScanStatus.INITIATED]:\n                if scan.container_ids and scan.worker_id:\n                    if scan.worker_id not in containers_by_worker:\n                        containers_by_worker[scan.worker_id] = []\n                    containers_by_worker[scan.worker_id].extend(scan.container_ids)\n        \n        # 3. 第一阶段：软删除（同步，快速）\n        soft_count = self.scan_repo.soft_delete_by_ids(existing_ids)\n        logger.info(f\"✓ 软删除完成: {soft_count} 个 Scan\")\n        \n        # 4. 第二阶段：后台异步执行停止容器 + 硬删除（不阻塞 API）\n        thread = threading.Thread(\n            target=self._async_cleanup_and_hard_delete,\n            args=(existing_ids, containers_by_worker),\n            daemon=True,\n        )\n        thread.start()\n            \n        return {\n            'soft_deleted_count': soft_count,\n            'scan_names': scan_names,\n            'hard_delete_scheduled': True,\n        }\n    \n    def _async_cleanup_and_hard_delete(\n        self,\n        scan_ids: List[int],\n        containers_by_worker: Dict[int, List[str]]\n    ):\n        \"\"\"\n        后台线程：停止容器 + 分发硬删除任务\n        \"\"\"\n        # 后台线程需要新的数据库连接\n        connection.close()\n        \n        # 1. 停止容器\n        if containers_by_worker:\n            total_containers = sum(len(c) for c in containers_by_worker.values())\n            logger.info(f\"🛑 后台停止容器 - Worker 数量: {len(containers_by_worker)}, 容器数量: {total_containers}\")\n            stopped_count = 0\n            for worker_id, container_ids in containers_by_worker.items():\n                try:\n                    count = self._stop_containers(container_ids, worker_id)\n                    stopped_count += count\n                except Exception as e:\n                    logger.warning(f\"停止容器时出错 - Worker ID {worker_id}: {e}\")\n            logger.info(f\"✓ 已停止 {stopped_count}/{total_containers} 个容器\")\n        \n        # 2. 分发硬删除任务\n        try:\n            from apps.engine.services.task_distributor import get_task_distributor\n            \n            distributor = get_task_distributor()\n            success, message, container_id = distributor.execute_delete_task(\n                task_type='scans',\n                ids=scan_ids\n            )\n            \n            if success:\n                logger.info(f\"✓ 硬删除任务已分发 - Container: {container_id}\")\n            else:\n                logger.warning(f\"硬删除任务分发失败: {message}\")\n            \n        except Exception as e:\n            logger.error(f\"❌ 分发删除任务失败: {e}\", exc_info=True)\n    \n    def stop_scan(self, scan_id: int) -> tuple[bool, int]:\n        \"\"\"\n        主动停止扫描任务（用户发起）\n        \n        工作流程：\n        1. 验证扫描状态（只能停止 RUNNING/INITIATED）\n        2. 通过 docker kill 强制终止容器\n        3. 立即更新状态为 CANCELLED（终态）\n        \n        Args:\n            scan_id: 扫描任务 ID\n        \n        Returns:\n            (是否成功, 停止的容器数量)\n        \n        并发安全：\n            使用数据库行锁（select_for_update）防止并发修改，\n            避免用户重复点击导致的重复操作\n        \"\"\"\n        try:\n            # 1. 在事务内获取扫描对象、检查状态、更新状态（加锁，防止并发）\n            with transaction.atomic():\n                # 使用 select_for_update() 加行锁，防止并发修改\n                scan = self.scan_repo.get_by_id_for_update(scan_id)\n                if not scan:\n                    logger.error(\"Scan 不存在 - Scan ID: %s\", scan_id)\n                    return False, 0\n                \n                # 2. 验证状态（只能停止 RUNNING/INITIATED）\n                if scan.status not in [ScanStatus.RUNNING, ScanStatus.INITIATED]:\n                    logger.warning(\n                        \"无法停止扫描：当前状态为 %s - Scan ID: %s\",\n                        ScanStatus(scan.status).label,\n                        scan_id\n                    )\n                    return False, 0\n                \n                # 3. 获取容器 ID 列表和 Worker ID（在锁内读取，确保数据一致性）\n                container_ids = scan.container_ids or []\n                worker_id = scan.worker_id\n                \n                # 4. 立即更新状态为 CANCELLED（终态）\n                scan.status = ScanStatus.CANCELLED\n                scan.stopped_at = timezone.now()\n                scan.error_message = \"用户手动取消扫描\"\n                scan.save(update_fields=['status', 'stopped_at', 'error_message'])\n                logger.info(\"✓ 已更新状态为 CANCELLED（事务内）- Scan ID: %s\", scan_id)\n                \n                # 5. 更新阶段进度：running → cancelled, pending → cancelled\n                from apps.scan.services.scan_state_service import ScanStateService\n                state_service = ScanStateService()\n                state_service.cancel_running_stages(scan_id, final_status=\"cancelled\")\n        \n            # 事务结束，锁释放\n            # 后续耗时操作在事务外执行，避免长时间持有锁\n            \n            # 6. 停止 Docker 容器（通过 SSH/本地执行 docker stop）\n            stopped_count = 0\n            if container_ids and worker_id:\n                try:\n                    stopped_count = self._stop_containers(container_ids, worker_id)\n                    logger.info(\n                        \"✓ 已停止 %d/%d 个容器 - Scan ID: %s\",\n                        stopped_count, len(container_ids), scan_id\n                    )\n                except Exception as e:\n                    logger.error(\"停止容器失败: %s\", e)\n                    # 容器停止失败不影响取消结果，状态已经更新为 CANCELLED\n            elif not worker_id:\n                logger.warning(\"无 Worker 信息，跳过容器停止 - Scan ID: %s\", scan_id)\n            else:\n                logger.info(\"无关联容器需要停止 - Scan ID: %s\", scan_id)\n            \n            return True, stopped_count\n            \n        except (DatabaseError, OperationalError) as e:\n            logger.exception(\"数据库错误：停止扫描失败 - Scan ID: %s\", scan_id)\n            raise\n        except ObjectDoesNotExist:\n            logger.error(\"Scan 不存在 - Scan ID: %s\", scan_id)\n            return False, 0\n\n\n# 导出接口\n__all__ = ['ScanControlService']\n"
  },
  {
    "path": "backend/apps/scan/services/scan_creation_service.py",
    "content": "\"\"\"\n扫描创建服务\n\n职责：\n- 准备扫描参数\n- 创建 Scan 记录\n- 通过负载感知分发器在最优 Worker 上执行任务（支持本地和远程）\n\"\"\"\n\nimport uuid\nimport logging\nimport threading\nfrom typing import List, Tuple\nfrom datetime import datetime\nfrom pathlib import Path\nfrom django.conf import settings\nfrom django.db import transaction, connection\nfrom django.db.utils import DatabaseError, IntegrityError, OperationalError\nfrom django.core.exceptions import ValidationError, ObjectDoesNotExist\n\nfrom apps.scan.models import Scan\nfrom apps.scan.repositories import DjangoScanRepository\nfrom apps.scan.utils.config_merger import merge_engine_configs, ConfigConflictError\nfrom apps.targets.repositories import DjangoTargetRepository, DjangoOrganizationRepository\nfrom apps.engine.repositories import DjangoEngineRepository\nfrom apps.targets.models import Target\nfrom apps.engine.models import ScanEngine\nfrom apps.common.definitions import ScanStatus\nfrom apps.engine.services.task_distributor import get_task_distributor\n\nlogger = logging.getLogger(__name__)\n\n\nclass ScanCreationService:\n    \"\"\"\n    扫描创建服务\n    \n    职责：\n    - 准备扫描参数\n    - 创建 Scan 记录\n    - 通过负载感知分发器在最优 Worker 上执行任务\n    - 处理创建过程中的错误\n    \"\"\"\n    \n    def __init__(self):\n        \"\"\"\n        初始化服务\n        Note:\n            移除了依赖注入，因为：\n            1. 项目没有单元测试需求\n            2. 不会更换数据库实现\n            3. 所有调用都是直接实例化\n            4. 减少不必要的复杂度\n        \"\"\"\n        self.scan_repo = DjangoScanRepository()\n        self.target_repo = DjangoTargetRepository()\n        self.organization_repo = DjangoOrganizationRepository()\n        self.engine_repo = DjangoEngineRepository()\n    \n    def prepare_initiate_scan(\n        self,\n        organization_id: int | None = None,\n        target_id: int | None = None,\n        engine_id: int | None = None\n    ) -> tuple[List[Target], ScanEngine]:\n        \"\"\"\n        准备扫描任务所需的数据\n        \n        职责：\n            1. 参数验证（必填项、互斥参数）\n            2. 资源查询（Engine、Organization、Target）\n            3. 业务逻辑判断（组织下是否有目标）\n            4. 返回准备好的目标列表和扫描引擎\n        \n        Args:\n            organization_id: 组织ID（可选）\n            target_id: 目标ID（可选）\n            engine_id: 扫描引擎ID（必填）\n        \n        Returns:\n            (目标列表, 扫描引擎对象) - 供 create_scans 方法使用\n        \n        Raises:\n            ValidationError: 参数验证失败或业务规则不满足\n            ObjectDoesNotExist: 资源不存在（Organization/Target/ScanEngine）\n        \n        Note:\n            - organization_id 和 target_id 必须二选一\n            - 如果提供 organization_id，返回该组织下所有目标\n            - 如果提供 target_id，返回单个目标列表\n        \"\"\"\n        # 1. 参数验证\n        if not engine_id:\n            raise ValidationError('缺少必填参数: engine_id')\n        \n        if not organization_id and not target_id:\n            raise ValidationError('必须提供 organization_id 或 target_id 其中之一')\n        \n        if organization_id and target_id:\n            raise ValidationError('organization_id 和 target_id 只能提供其中之一')\n        \n        # 2. 查询扫描引擎（通过 Repository 层）\n        engine = self.engine_repo.get_by_id(engine_id)\n        if not engine:\n            logger.error(\"扫描引擎不存在 - Engine ID: %s\", engine_id)\n            raise ObjectDoesNotExist(f'ScanEngine ID {engine_id} 不存在')\n        \n        # 3. 根据参数获取目标列表\n        targets = []\n        \n        if organization_id:\n            # 根据组织ID获取所有目标（通过 Repository 层）\n            organization = self.organization_repo.get_by_id(organization_id)\n            if not organization:\n                logger.error(\"组织不存在 - Organization ID: %s\", organization_id)\n                raise ObjectDoesNotExist(f'Organization ID {organization_id} 不存在')\n            \n            targets = self.organization_repo.get_targets(organization_id)\n            \n            if not targets:\n                raise ValidationError(f'组织 ID {organization_id} 下没有目标')\n            \n            logger.debug(\n                \"准备发起扫描 - 组织: %s, 目标数量: %d, 引擎: %s\",\n                organization.name,\n                len(targets),\n                engine.name\n            )\n        else:\n            # 根据目标ID获取单个目标（通过 Repository 层）\n            target = self.target_repo.get_by_id(target_id)\n            if not target:\n                logger.error(\"目标不存在 - Target ID: %s\", target_id)\n                raise ObjectDoesNotExist(f'Target ID {target_id} 不存在')\n            \n            targets = [target]\n            \n            logger.debug(\n                \"准备发起扫描 - 目标: %s, 引擎: %s\",\n                target.name,\n                engine.name\n            )\n        \n        return targets, engine\n    \n    def prepare_initiate_scan_multi_engine(\n        self,\n        organization_id: int | None = None,\n        target_id: int | None = None,\n        engine_ids: List[int] | None = None\n    ) -> Tuple[List[Target], str, List[str], List[int]]:\n        \"\"\"\n        准备多引擎扫描任务所需的数据\n        \n        职责：\n            1. 参数验证（必填项、互斥参数）\n            2. 资源查询（Engines、Organization、Target）\n            3. 合并引擎配置（检测冲突）\n            4. 返回准备好的目标列表、合并配置和引擎信息\n        \n        Args:\n            organization_id: 组织ID（可选）\n            target_id: 目标ID（可选）\n            engine_ids: 扫描引擎ID列表（必填）\n        \n        Returns:\n            (目标列表, 合并配置, 引擎名称列表, 引擎ID列表) - 供 create_scans 方法使用\n        \n        Raises:\n            ValidationError: 参数验证失败或业务规则不满足\n            ObjectDoesNotExist: 资源不存在（Organization/Target/ScanEngine）\n            ConfigConflictError: 引擎配置存在冲突\n        \n        Note:\n            - organization_id 和 target_id 必须二选一\n            - 如果提供 organization_id，返回该组织下所有目标\n            - 如果提供 target_id，返回单个目标列表\n        \"\"\"\n        # 1. 参数验证\n        if not engine_ids:\n            raise ValidationError('缺少必填参数: engine_ids')\n        \n        if not organization_id and not target_id:\n            raise ValidationError('必须提供 organization_id 或 target_id 其中之一')\n        \n        if organization_id and target_id:\n            raise ValidationError('organization_id 和 target_id 只能提供其中之一')\n        \n        # 2. 查询所有扫描引擎\n        engines = []\n        for engine_id in engine_ids:\n            engine = self.engine_repo.get_by_id(engine_id)\n            if not engine:\n                logger.error(\"扫描引擎不存在 - Engine ID: %s\", engine_id)\n                raise ObjectDoesNotExist(f'ScanEngine ID {engine_id} 不存在')\n            engines.append(engine)\n        \n        # 3. 合并引擎配置（可能抛出 ConfigConflictError）\n        engine_configs = [(e.name, e.configuration or '') for e in engines]\n        merged_configuration = merge_engine_configs(engine_configs)\n        engine_names = [e.name for e in engines]\n        \n        logger.debug(\n            \"引擎配置合并成功 - 引擎: %s\",\n            ', '.join(engine_names)\n        )\n        \n        # 4. 根据参数获取目标列表\n        targets = []\n        \n        if organization_id:\n            # 根据组织ID获取所有目标\n            organization = self.organization_repo.get_by_id(organization_id)\n            if not organization:\n                logger.error(\"组织不存在 - Organization ID: %s\", organization_id)\n                raise ObjectDoesNotExist(f'Organization ID {organization_id} 不存在')\n            \n            targets = self.organization_repo.get_targets(organization_id)\n            \n            if not targets:\n                raise ValidationError(f'组织 ID {organization_id} 下没有目标')\n            \n            logger.debug(\n                \"准备发起扫描 - 组织: %s, 目标数量: %d, 引擎: %s\",\n                organization.name,\n                len(targets),\n                ', '.join(engine_names)\n            )\n        else:\n            # 根据目标ID获取单个目标\n            target = self.target_repo.get_by_id(target_id)\n            if not target:\n                logger.error(\"目标不存在 - Target ID: %s\", target_id)\n                raise ObjectDoesNotExist(f'Target ID {target_id} 不存在')\n            \n            targets = [target]\n            \n            logger.debug(\n                \"准备发起扫描 - 目标: %s, 引擎: %s\",\n                target.name,\n                ', '.join(engine_names)\n            )\n        \n        return targets, merged_configuration, engine_names, engine_ids\n    \n    def _generate_scan_workspace_dir(self) -> str:\n        \"\"\"\n        生成 Scan 工作空间目录路径\n        \n        职责：\n        - 生成唯一的 Scan 级别工作空间目录路径字符串\n        - 不创建实际目录（由 Flow 层负责）\n        \n        Returns:\n            Scan 工作空间目录路径字符串\n        \n        格式：{SCAN_RESULTS_DIR}/scan_{timestamp}_{uuid8}/\n        示例：/data/scans/scan_20231104_152030_a3f2b7e9/\n        \n        Raises:\n            ValueError: 如果 SCAN_RESULTS_DIR 未设置或为空\n        \n        Note:\n            使用秒级时间戳 + 8 位 UUID 确保路径唯一性\n            冲突概率：同一秒内创建 1000 个扫描，冲突概率 < 0.01%\n        \"\"\"\n        timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')\n        unique_id = uuid.uuid4().hex[:8]  # 8 位十六进制UUID (4,294,967,296 种可能)\n        \n        # 从 settings 获取，保持配置统一\n        base_dir = getattr(settings, 'SCAN_RESULTS_DIR', None)\n        if not base_dir:\n            error_msg = \"SCAN_RESULTS_DIR 未设置，无法创建扫描工作空间\"\n            logger.error(error_msg)\n            raise ValueError(error_msg)\n        \n        scan_workspace_dir = str(Path(base_dir) / f\"scan_{timestamp}_{unique_id}\")\n        return scan_workspace_dir\n    \n    def create_scans(\n        self,\n        targets: List[Target],\n        engine_ids: List[int],\n        engine_names: List[str],\n        yaml_configuration: str,\n        scheduled_scan_name: str | None = None\n    ) -> List[Scan]:\n        \"\"\"\n        为多个目标批量创建扫描任务，后台异步分发到 Worker\n        \n        Args:\n            targets: 目标列表\n            engine_ids: 引擎 ID 列表\n            engine_names: 引擎名称列表\n            yaml_configuration: YAML 格式的扫描配置\n            scheduled_scan_name: 定时扫描任务名称（可选，用于通知显示）\n        \n        Returns:\n            创建的 Scan 对象列表（立即返回，不等待分发完成）\n        \n        流程：\n            1. 同步：批量创建 Scan 记录（快速）\n            2. 异步：后台线程通过 TaskDistributor 分发任务到 Workers\n        \"\"\"\n        # 第一步：准备批量创建的数据\n        scans_to_create = []\n        \n        for target in targets:\n            try:\n                scan_workspace_dir = self._generate_scan_workspace_dir()\n                scan = Scan(\n                    target=target,\n                    engine_ids=engine_ids,\n                    engine_names=engine_names,\n                    yaml_configuration=yaml_configuration,\n                    results_dir=scan_workspace_dir,\n                    status=ScanStatus.INITIATED,\n                    container_ids=[],\n                )\n                scans_to_create.append(scan)\n            except (ValidationError, ValueError) as e:\n                logger.error(\n                    \"准备扫描任务数据失败 - Target: %s, 错误: %s\",\n                    target.name, e\n                )\n                continue\n        \n        if not scans_to_create:\n            logger.warning(\"没有需要创建的扫描任务\")\n            return []\n        \n        # 第二步：使用事务批量创建（同步，快速）\n        created_scans = []\n        try:\n            with transaction.atomic():\n                created_scans = self.scan_repo.bulk_create(scans_to_create)\n                logger.info(\"批量创建扫描记录成功 - 数量: %d\", len(created_scans))\n        except (DatabaseError, IntegrityError) as e:\n            logger.exception(\"数据库错误：批量创建扫描记录失败 - 错误: %s\", e)\n            return []\n        except ValidationError as e:\n            logger.error(\"验证错误：扫描任务数据无效 - 错误: %s\", e)\n            return []\n        \n        # 第三步：分发任务到 Workers\n        # 使用第一个引擎名称作为显示名称，或者合并显示\n        display_engine_name = ', '.join(engine_names) if engine_names else ''\n        scan_data = [\n            {\n                'scan_id': scan.id,\n                'target_name': scan.target.name,\n                'target_id': scan.target.id,\n                'results_dir': scan.results_dir,\n                'engine_name': display_engine_name,\n                'scheduled_scan_name': scheduled_scan_name,\n            }\n            for scan in created_scans\n        ]\n        \n        # 后台线程异步分发（不阻塞 API/调度器）\n        thread = threading.Thread(\n            target=self._distribute_scans_to_workers,\n            args=(scan_data,),\n            daemon=True,\n        )\n        thread.start()\n        logger.info(\"扫描任务已创建，后台分发中 - 数量: %d\", len(created_scans))\n        \n        return created_scans\n    \n    def _distribute_scans_to_workers(self, scan_data: List[dict]):\n        \"\"\"\n        后台线程：分发扫描任务到 Workers\n        \n        Args:\n            scan_data: 扫描任务数据列表\n        \"\"\"\n        logger.info(\"=\"*60)\n        logger.info(\"开始分发扫描任务到 Workers - 数量: %d\", len(scan_data))\n        logger.info(\"=\"*60)\n        \n        # 后台线程需要新的数据库连接\n        connection.close()\n        logger.info(\"已关闭旧数据库连接，准备获取新连接\")\n        \n        distributor = get_task_distributor()\n        logger.info(\"TaskDistributor 初始化完成\")\n        \n        scan_repo = DjangoScanRepository()\n        logger.info(\"ScanRepository 初始化完成\")\n        \n        for data in scan_data:\n            scan_id = data['scan_id']\n            logger.info(\"-\"*40)\n            logger.info(\"准备分发扫描任务 - Scan ID: %s, Target: %s\", scan_id, data['target_name'])\n            try:\n                logger.info(\"调用 distributor.execute_scan_flow...\")\n                success, message, container_id, worker_id = distributor.execute_scan_flow(\n                    scan_id=scan_id,\n                    target_name=data['target_name'],\n                    target_id=data['target_id'],\n                    scan_workspace_dir=data['results_dir'],\n                    engine_name=data['engine_name'],\n                    scheduled_scan_name=data.get('scheduled_scan_name'),\n                )\n                \n                logger.info(\n                    \"execute_scan_flow 返回 - success: %s, message: %s, container_id: %s, worker_id: %s\",\n                    success, message, container_id, worker_id\n                )\n                \n                if success:\n                    if container_id:\n                        scan_repo.append_container_id(scan_id, container_id)\n                        logger.info(\"已记录 container_id: %s\", container_id)\n                    if worker_id:\n                        scan_repo.update_worker(scan_id, worker_id)\n                        logger.info(\"已记录 worker_id: %s\", worker_id)\n                    logger.info(\n                        \"✓ 扫描任务已提交 - Scan ID: %s, Worker: %s\",\n                        scan_id, worker_id\n                    )\n                else:\n                    logger.error(\"execute_scan_flow 返回失败 - message: %s\", message)\n                    raise Exception(message)\n                    \n            except Exception as e:\n                logger.error(\"提交扫描任务失败 - Scan ID: %s, 错误: %s\", scan_id, e)\n                logger.exception(\"详细堆栈:\")\n                try:\n                    scan_repo.update_status(\n                        scan_id,\n                        ScanStatus.FAILED,\n                        error_message=f'提交任务失败: {e}',\n                    )\n                except (DatabaseError, OperationalError) as save_error:\n                    logger.error(\"更新状态失败 - Scan ID: %s, 错误: %s\", scan_id, save_error)\n\n\n# 导出接口\n__all__ = ['ScanCreationService']\n"
  },
  {
    "path": "backend/apps/scan/services/scan_service.py",
    "content": "\"\"\"\n扫描任务服务\n\n负责 Scan 模型的所有业务逻辑\n\"\"\"\n\nfrom __future__ import annotations\n\nimport logging\nimport uuid\nfrom typing import Dict, List, TYPE_CHECKING\nfrom datetime import datetime\nfrom pathlib import Path\nfrom django.conf import settings\nfrom django.db import transaction\nfrom django.db.utils import DatabaseError, IntegrityError, OperationalError\nfrom django.core.exceptions import ValidationError, ObjectDoesNotExist\n\nfrom apps.scan.models import Scan\nfrom apps.scan.repositories import DjangoScanRepository\nfrom apps.targets.repositories import DjangoTargetRepository, DjangoOrganizationRepository\nfrom apps.engine.repositories import DjangoEngineRepository\nfrom apps.targets.models import Target\nfrom apps.engine.models import ScanEngine\nfrom apps.common.definitions import ScanStatus\n\nlogger = logging.getLogger(__name__)\n\n\nclass ScanService:\n    \"\"\"\n    扫描任务服务（协调者）\n    \n    职责：\n    - 协调各个子服务\n    - 提供统一的公共接口\n    - 保持向后兼容\n    \n    注意：\n    - 具体业务逻辑已拆分到子服务\n    - 本类主要负责委托和协调\n    \"\"\"\n    \n    # 终态集合：这些状态一旦设置，不应该被覆盖\n    FINAL_STATUSES = {\n        ScanStatus.COMPLETED,\n        ScanStatus.FAILED,\n        ScanStatus.CANCELLED\n    }\n    \n    def __init__(self):\n        \"\"\"\n        初始化服务\n        \"\"\"\n        # 初始化子服务\n        from apps.scan.services.scan_creation_service import ScanCreationService\n        from apps.scan.services.scan_state_service import ScanStateService\n        from apps.scan.services.scan_control_service import ScanControlService\n        from apps.scan.services.scan_stats_service import ScanStatsService\n        \n        self.creation_service = ScanCreationService()\n        self.state_service = ScanStateService()\n        self.control_service = ScanControlService()\n        self.stats_service = ScanStatsService()\n        \n        # 保留 ScanRepository（用于 get_scan 方法）\n        self.scan_repo = DjangoScanRepository()\n    \n    def get_scan(self, scan_id: int, prefetch_relations: bool) -> Scan | None:\n        \"\"\"\n        获取扫描任务（包含关联对象）\n        \n        自动预加载 engine 和 target，避免 N+1 查询问题\n        \n        Args:\n            scan_id: 扫描任务 ID\n        \n        Returns:\n            Scan 对象（包含 engine 和 target）或 None\n        \"\"\"\n        return self.scan_repo.get_by_id(scan_id, prefetch_relations)\n    \n    def get_all_scans(self, prefetch_relations: bool = True):\n        return self.scan_repo.get_all(prefetch_relations=prefetch_relations)\n    \n    def prepare_initiate_scan(\n        self,\n        organization_id: int | None = None,\n        target_id: int | None = None,\n        engine_id: int | None = None\n    ) -> tuple[List[Target], ScanEngine]:\n        \"\"\"\n        为创建扫描任务做准备，返回所需的目标列表和扫描引擎\n        \"\"\"\n        return self.creation_service.prepare_initiate_scan(\n            organization_id, target_id, engine_id\n        )\n    \n    def prepare_initiate_scan_multi_engine(\n        self,\n        organization_id: int | None = None,\n        target_id: int | None = None,\n        engine_ids: List[int] | None = None\n    ) -> tuple[List[Target], str, List[str], List[int]]:\n        \"\"\"\n        为创建多引擎扫描任务做准备\n        \n        Returns:\n            (目标列表, 合并配置, 引擎名称列表, 引擎ID列表)\n        \"\"\"\n        return self.creation_service.prepare_initiate_scan_multi_engine(\n            organization_id, target_id, engine_ids\n        )\n    \n    def create_scans(\n        self,\n        targets: List[Target],\n        engine_ids: List[int],\n        engine_names: List[str],\n        yaml_configuration: str,\n        scheduled_scan_name: str | None = None\n    ) -> List[Scan]:\n        \"\"\"批量创建扫描任务（委托给 ScanCreationService）\"\"\"\n        return self.creation_service.create_scans(\n            targets, engine_ids, engine_names, yaml_configuration, scheduled_scan_name\n        )\n    \n    # ==================== 状态管理方法（委托给 ScanStateService） ====================\n    \n    def update_status(\n        self, \n        scan_id: int, \n        status: ScanStatus, \n        error_message: str | None = None,\n        stopped_at: datetime | None = None\n    ) -> bool:\n        \"\"\"更新 Scan 状态（委托给 ScanStateService）\"\"\"\n        return self.state_service.update_status(\n            scan_id, status, error_message, stopped_at\n        )\n    \n    def update_status_if_match(\n        self,\n        scan_id: int,\n        current_status: ScanStatus,\n        new_status: ScanStatus,\n        stopped_at: datetime | None = None\n    ) -> bool:\n        \"\"\"条件更新 Scan 状态（委托给 ScanStateService）\"\"\"\n        return self.state_service.update_status_if_match(\n            scan_id, current_status, new_status, stopped_at\n        )\n    \n    def update_cached_stats(self, scan_id: int) -> dict | None:\n        \"\"\"更新缓存统计数据（委托给 ScanStateService），返回统计数据字典\"\"\"\n        return self.state_service.update_cached_stats(scan_id)\n    \n    # ==================== 进度跟踪方法（委托给 ScanStateService） ====================\n    \n    def init_stage_progress(self, scan_id: int, stages: list[str]) -> bool:\n        \"\"\"初始化阶段进度（委托给 ScanStateService）\"\"\"\n        return self.state_service.init_stage_progress(scan_id, stages)\n    \n    def start_stage(self, scan_id: int, stage: str) -> bool:\n        \"\"\"开始执行某个阶段（委托给 ScanStateService）\"\"\"\n        return self.state_service.start_stage(scan_id, stage)\n    \n    def complete_stage(self, scan_id: int, stage: str, detail: str | None = None) -> bool:\n        \"\"\"完成某个阶段（委托给 ScanStateService）\"\"\"\n        return self.state_service.complete_stage(scan_id, stage, detail)\n    \n    def fail_stage(self, scan_id: int, stage: str, error: str | None = None) -> bool:\n        \"\"\"标记某个阶段失败（委托给 ScanStateService）\"\"\"\n        return self.state_service.fail_stage(scan_id, stage, error)\n    \n    def cancel_running_stages(self, scan_id: int, final_status: str = \"cancelled\") -> bool:\n        \"\"\"取消所有正在运行的阶段（委托给 ScanStateService）\"\"\"\n        return self.state_service.cancel_running_stages(scan_id, final_status)\n    \n    # TODO：待接入\n    def add_command_to_scan(self, scan_id: int, stage_name: str, tool_name: str, command: str) -> bool:\n        \"\"\"\n        增量添加命令到指定扫描阶段\n        \n        Args:\n            scan_id: 扫描任务ID\n            stage_name: 阶段名称（如 'subdomain_discovery', 'port_scan'）\n            tool_name: 工具名称\n            command: 执行命令\n            \n        Returns:\n            bool: 是否成功添加\n        \"\"\"\n        try:\n            scan = self.get_scan(scan_id, prefetch_relations=False)\n            if not scan:\n                logger.error(f\"扫描任务不存在: {scan_id}\")\n                return False\n            \n            stage_progress = scan.stage_progress or {}\n            \n            # 确保指定阶段存在\n            if stage_name not in stage_progress:\n                stage_progress[stage_name] = {'status': 'running', 'commands': []}\n            \n            # 确保 commands 列表存在\n            if 'commands' not in stage_progress[stage_name]:\n                stage_progress[stage_name]['commands'] = []\n            \n            # 增量添加命令\n            command_entry = f\"{tool_name}: {command}\"\n            stage_progress[stage_name]['commands'].append(command_entry)\n            \n            scan.stage_progress = stage_progress\n            scan.save(update_fields=['stage_progress'])\n            \n            command_count = len(stage_progress[stage_name]['commands'])\n            logger.info(f\"✓ 记录命令: {stage_name}.{tool_name} (总计: {command_count})\")\n            return True\n            \n        except Exception as e:\n            logger.error(f\"记录命令失败: {e}\")\n            return False\n    \n    # ==================== 删除和控制方法（委托给 ScanControlService） ====================\n    \n    def delete_scans_two_phase(self, scan_ids: List[int]) -> dict:\n        \"\"\"两阶段删除扫描任务（委托给 ScanControlService）\"\"\"\n        return self.control_service.delete_scans_two_phase(scan_ids)\n    \n    def stop_scan(self, scan_id: int) -> tuple[bool, int]:\n        \"\"\"停止扫描任务（委托给 ScanControlService）\"\"\"\n        return self.control_service.stop_scan(scan_id)\n    \n    def hard_delete_scans(self, scan_ids: List[int]) -> tuple[int, Dict[str, int]]:\n        \"\"\"\n        硬删除扫描任务（真正删除数据）\n        \n        用于 Worker 容器中执行，删除已软删除的扫描及其关联数据。\n        \n        Args:\n            scan_ids: 扫描任务 ID 列表\n            \n        Returns:\n            (删除数量, 详情字典)\n        \"\"\"\n        return self.scan_repo.hard_delete_by_ids(scan_ids)\n    \n    # ==================== 统计方法（委托给 ScanStatsService） ====================\n    \n    def get_statistics(self) -> dict:\n        \"\"\"获取扫描统计数据（委托给 ScanStatsService）\"\"\"\n        return self.stats_service.get_statistics()\n    \n\n\n# 导出接口\n__all__ = ['ScanService']\n"
  },
  {
    "path": "backend/apps/scan/services/scan_state_service.py",
    "content": "\"\"\"\n扫描状态管理服务\n\n职责：\n- 更新扫描状态\n- 条件状态更新（乐观锁）\n- 更新缓存统计数据\n\"\"\"\n\nimport logging\nfrom datetime import datetime\nfrom django.db.utils import DatabaseError, OperationalError\nfrom django.core.exceptions import ObjectDoesNotExist\n\nfrom apps.common.definitions import ScanStatus\nfrom apps.scan.repositories import DjangoScanRepository\n\nlogger = logging.getLogger(__name__)\n\n\nclass ScanStateService:\n    \"\"\"\n    扫描状态管理服务\n    \n    职责：\n    - 更新扫描状态\n    - 条件状态更新（乐观锁）\n    - 更新缓存统计数据\n    - 状态验证\n    \"\"\"\n    \n    def __init__(self):\n        \"\"\"\n        初始化服务\n        \"\"\"\n        self.repo = DjangoScanRepository()\n    \n    def update_status(\n        self, \n        scan_id: int, \n        status: ScanStatus, \n        error_message: str | None = None,\n        stopped_at: datetime | None = None\n    ) -> bool:\n        \"\"\"\n        更新 Scan 状态\n        \n        Args:\n            scan_id: 扫描任务 ID\n            status: 新状态\n            error_message: 错误消息（可选）\n            stopped_at: 结束时间（可选）\n        \n        Returns:\n            是否更新成功\n        \n        Note:\n            created_at 是自动设置的，不需要手动传递\n        \"\"\"\n        try:\n            result = self.repo.update_status(\n                scan_id, \n                status, \n                error_message,\n                stopped_at=stopped_at\n            )\n            if result:\n                logger.debug(\n                    \"更新 Scan 状态成功 - Scan ID: %s, 状态: %s\", \n                    scan_id, \n                    ScanStatus(status).label\n                )\n            return result\n        except (DatabaseError, OperationalError) as e:\n            logger.exception(\"数据库错误：更新 Scan 状态失败 - Scan ID: %s\", scan_id)\n            raise  # 数据库错误应该向上传播\n        except ObjectDoesNotExist:\n            logger.error(\"Scan 不存在 - Scan ID: %s\", scan_id)\n            return False\n    \n    def update_status_if_match(\n        self,\n        scan_id: int,\n        current_status: ScanStatus,\n        new_status: ScanStatus,\n        stopped_at: datetime | None = None\n    ) -> bool:\n        \"\"\"\n        条件更新 Scan 状态（原子操作）\n        \n        仅当扫描状态匹配 current_status 时才更新为 new_status。\n        这是一个原子操作，用于处理并发场景下的状态更新。\n        \n        Args:\n            scan_id: 扫描任务 ID\n            current_status: 当前期望的状态\n            new_status: 要更新到的新状态\n            stopped_at: 结束时间（可选）\n        \n        Returns:\n            是否更新成功（True=更新了记录，False=未更新或状态不匹配）\n        \n        Note:\n            此方法通过 Repository 层执行原子操作，适用于需要条件更新的场景\n        \"\"\"\n        try:\n            result = self.repo.update_status_if_match(\n                scan_id=scan_id,\n                current_status=current_status,\n                new_status=new_status,\n                stopped_at=stopped_at\n            )\n            if result:\n                logger.debug(\n                    \"条件更新 Scan 状态成功 - Scan ID: %s, %s → %s\",\n                    scan_id,\n                    current_status.value,\n                    new_status.value\n                )\n            return result\n        except (DatabaseError, OperationalError) as e:\n            logger.exception(\n                \"数据库错误：条件更新 Scan 状态失败 - Scan ID: %s\",\n                scan_id\n            )\n            raise\n        except Exception as e:\n            logger.error(\n                \"条件更新 Scan 状态失败 - Scan ID: %s, 错误: %s\",\n                scan_id,\n                e\n            )\n            return False\n    \n    def update_cached_stats(self, scan_id: int) -> dict | None:\n        \"\"\"\n        更新扫描任务的缓存统计数据\n        \n        使用 Repository 层进行数据访问，符合分层架构规范\n        \n        Args:\n            scan_id: 扫描任务 ID\n        \n        Returns:\n            成功返回统计数据字典，失败返回 None\n        \n        Note:\n            应该在扫描进入终态时调用，更新缓存的统计字段以提升查询性能\n        \"\"\"\n        try:\n            # 通过 Repository 层更新统计数据\n            result = self.repo.update_cached_stats(scan_id)\n            if result:\n                logger.debug(\"更新缓存统计数据成功 - Scan ID: %s\", scan_id)\n            return result\n        except (DatabaseError, OperationalError) as e:\n            logger.exception(\"数据库错误：更新缓存统计数据失败 - Scan ID: %s\", scan_id)\n            return None\n        except Exception as e:\n            logger.error(\"更新缓存统计数据失败 - Scan ID: %s, 错误: %s\", scan_id, e)\n            return None\n    \n    def update_progress(\n        self,\n        scan_id: int,\n        progress: int | None = None,\n        current_stage: str | None = None,\n        stage_progress: dict | None = None\n    ) -> bool:\n        \"\"\"\n        更新扫描进度信息\n        \n        Args:\n            scan_id: 扫描任务 ID\n            progress: 进度百分比 0-100（可选）\n            current_stage: 当前阶段（可选）\n            stage_progress: 各阶段详情（可选）\n        \n        Returns:\n            是否更新成功\n        \"\"\"\n        try:\n            result = self.repo.update_progress(\n                scan_id,\n                progress=progress,\n                current_stage=current_stage,\n                stage_progress=stage_progress\n            )\n            if result:\n                logger.debug(\n                    \"更新扫描进度成功 - Scan ID: %s, stage: %s\",\n                    scan_id,\n                    current_stage\n                )\n            return result\n        except (DatabaseError, OperationalError) as e:\n            logger.exception(\"数据库错误：更新扫描进度失败 - Scan ID: %s\", scan_id)\n            return False\n        except Exception as e:\n            logger.error(\"更新扫描进度失败 - Scan ID: %s, 错误: %s\", scan_id, e)\n            return False\n    \n    def init_stage_progress(self, scan_id: int, stages: list[str]) -> bool:\n        \"\"\"\n        初始化阶段进度（所有阶段设为 pending）\n        \n        Args:\n            scan_id: 扫描任务 ID\n            stages: 阶段列表，如 ['subdomain_discovery', 'port_scan', ...]\n                   顺序与 engine_config 配置和 Flow 执行顺序一致\n        \n        Returns:\n            是否初始化成功\n        \"\"\"\n        stage_progress = {\n            stage: {\"status\": \"pending\", \"order\": idx}\n            for idx, stage in enumerate(stages)\n        }\n        return self.update_progress(\n            scan_id,\n            progress=0,\n            stage_progress=stage_progress\n        )\n    \n    def start_stage(self, scan_id: int, stage: str) -> bool:\n        \"\"\"\n        开始执行某个阶段\n        \n        Args:\n            scan_id: 扫描任务 ID\n            stage: 阶段名称\n        \n        Returns:\n            是否更新成功\n        \"\"\"\n        from datetime import datetime\n        \n        # 从数据库获取当前进度状态\n        scan = self.repo.get_by_id(scan_id)\n        if not scan:\n            logger.warning(f\"start_stage: Scan not found - ID: {scan_id}\")\n            return False\n        \n        stage_progress = scan.stage_progress or {}\n        \n        # 保留原有的 order 字段\n        existing = stage_progress.get(stage, {})\n        order = existing.get(\"order\", 0)\n        \n        # 如果阶段已经是 cancelled 状态，不要启动\n        if existing.get(\"status\") == \"cancelled\":\n            logger.info(f\"start_stage: 阶段已取消，跳过 - Scan ID: {scan_id}, Stage: {stage}\")\n            return True\n        \n        stage_progress[stage] = {\n            \"status\": \"running\",\n            \"order\": order,\n            \"started_at\": datetime.now().isoformat()\n        }\n        \n        # 计算进度百分比\n        total_stages = len(stage_progress)\n        completed = sum(1 for s in stage_progress.values() if s.get(\"status\") == \"completed\")\n        progress = int((completed / total_stages) * 100) if total_stages > 0 else 0\n        \n        return self.update_progress(\n            scan_id,\n            progress=progress,\n            current_stage=stage,\n            stage_progress=stage_progress\n        )\n    \n    def complete_stage(\n        self,\n        scan_id: int,\n        stage: str,\n        detail: str | None = None\n    ) -> bool:\n        \"\"\"\n        完成某个阶段\n        \n        Args:\n            scan_id: 扫描任务 ID\n            stage: 阶段名称\n            detail: 完成详情（可选）\n        \n        Returns:\n            是否更新成功\n        \"\"\"\n        from datetime import datetime\n        \n        # 从数据库获取当前进度状态\n        scan = self.repo.get_by_id(scan_id)\n        if not scan:\n            logger.warning(f\"complete_stage: Scan not found - ID: {scan_id}\")\n            return False\n        \n        stage_progress = scan.stage_progress or {}\n        \n        existing = stage_progress.get(stage, {})\n        order = existing.get(\"order\", 0)\n        started_at = existing.get(\"started_at\")\n        \n        # 如果阶段已经是 cancelled 状态，不要覆盖为 completed\n        if existing.get(\"status\") == \"cancelled\":\n            logger.info(f\"complete_stage: 阶段已取消，跳过 - Scan ID: {scan_id}, Stage: {stage}\")\n            return True\n        \n        duration = 0  # 默认 0，避免 null\n        if started_at:\n            try:\n                start_time = datetime.fromisoformat(started_at)\n                duration = int((datetime.now() - start_time).total_seconds())\n            except (ValueError, TypeError):\n                logger.warning(f\"complete_stage: 无法解析 started_at - Stage: {stage}, Value: {started_at}\")\n        else:\n            logger.error(f\"complete_stage: started_at 缺失 - Scan ID: {scan_id}, Stage: {stage}\")\n        \n        stage_progress[stage] = {\n            \"status\": \"completed\",\n            \"order\": order,\n            \"duration\": duration,\n        }\n        if detail:\n            stage_progress[stage][\"detail\"] = detail\n        \n        # 计算进度百分比\n        total_stages = len(stage_progress)\n        completed = sum(1 for s in stage_progress.values() if s.get(\"status\") == \"completed\")\n        progress = int((completed / total_stages) * 100) if total_stages > 0 else 0\n        \n        # 如果全部完成，进度设为 100\n        if completed == total_stages:\n            progress = 100\n        \n        return self.update_progress(\n            scan_id,\n            progress=progress,\n            current_stage=\"\" if completed == total_stages else stage,\n            stage_progress=stage_progress\n        )\n    \n    def fail_stage(\n        self,\n        scan_id: int,\n        stage: str,\n        error: str | None = None\n    ) -> bool:\n        \"\"\"\n        标记某个阶段失败\n        \n        Args:\n            scan_id: 扫描任务 ID\n            stage: 阶段名称\n            error: 错误信息（可选）\n        \n        Returns:\n            是否更新成功\n        \"\"\"\n        # 从数据库获取当前进度状态\n        scan = self.repo.get_by_id(scan_id)\n        if not scan:\n            logger.warning(f\"fail_stage: Scan not found - ID: {scan_id}\")\n            return False\n        \n        stage_progress = scan.stage_progress or {}\n        \n        # 保留原有的 order 字段\n        existing = stage_progress.get(stage, {})\n        order = existing.get(\"order\", 0)\n        \n        # 如果阶段已经是 cancelled 状态，不要覆盖为 failed\n        # （用户手动停止时会先标记为 cancelled，docker kill 后触发的 on_failed 不应覆盖）\n        if existing.get(\"status\") == \"cancelled\":\n            logger.info(f\"fail_stage: 阶段已取消，跳过 - Scan ID: {scan_id}, Stage: {stage}\")\n            return True\n        \n        stage_progress[stage] = {\n            \"status\": \"failed\",\n            \"order\": order,\n            \"error\": error\n        }\n        \n        return self.update_progress(\n            scan_id,\n            current_stage=stage,\n            stage_progress=stage_progress\n        )\n    \n    def cancel_running_stages(self, scan_id: int, final_status: str = \"cancelled\") -> bool:\n        \"\"\"\n        标记所有未完成的阶段（扫描被取消时调用）\n        \n        将所有 running 状态的阶段标记为 final_status，\n        将所有 pending 状态的阶段标记为 skipped\n        \n        Args:\n            scan_id: 扫描任务 ID\n            final_status: running 阶段的最终状态\n        \n        Returns:\n            是否更新成功\n        \"\"\"\n        try:\n            scan = self.repo.get_by_id(scan_id)\n            if not scan or not scan.stage_progress:\n                return False\n            \n            stage_progress = scan.stage_progress\n            updated = False\n            \n            for stage, info in stage_progress.items():\n                status = info.get(\"status\")\n                order = info.get(\"order\", 0)\n                \n                if status == \"running\":\n                    # 正在运行的阶段标记为 final_status\n                    stage_progress[stage] = {\n                        \"status\": final_status,\n                        \"order\": order,\n                    }\n                    updated = True\n                elif status == \"pending\":\n                    # 未开始的阶段统一标记为 cancelled\n                    stage_progress[stage] = {\n                        \"status\": \"cancelled\",\n                        \"order\": order,\n                    }\n                    updated = True\n            \n            if updated:\n                self.update_progress(\n                    scan_id,\n                    current_stage=\"\",\n                    stage_progress=stage_progress\n                )\n            \n            return True\n        except Exception as e:\n            logger.error(\"取消阶段进度失败 - Scan ID: %s, 错误: %s\", scan_id, e)\n            return False\n\n\n# 导出接口\n__all__ = ['ScanStateService']\n"
  },
  {
    "path": "backend/apps/scan/services/scan_stats_service.py",
    "content": "\"\"\"\n扫描统计服务\n\n职责：\n- 获取扫描统计数据\n- 数据聚合查询\n\"\"\"\n\nimport logging\nfrom django.db.utils import DatabaseError, OperationalError\n\nfrom apps.scan.repositories import DjangoScanRepository\n\nlogger = logging.getLogger(__name__)\n\n\nclass ScanStatsService:\n    \"\"\"\n    扫描统计服务\n    \n    职责：\n    - 统计数据查询\n    - 数据聚合\n    \"\"\"\n    \n    def __init__(self):\n        \"\"\"\n        初始化服务\n        \"\"\"\n        self.scan_repo = DjangoScanRepository()\n    \n    def get_statistics(self) -> dict:\n        \"\"\"\n        获取扫描任务统计数据\n        \n        Returns:\n            统计数据字典\n        \n        Raises:\n            DatabaseError: 数据库错误\n        \n        Note:\n            使用 Repository 层的聚合查询，性能优异\n        \"\"\"\n        try:\n            statistics = self.scan_repo.get_statistics()\n            logger.debug(\"获取扫描统计数据成功 - 总数: %d\", statistics['total'])\n            return statistics\n        except (DatabaseError, OperationalError) as e:\n            logger.exception(\"数据库错误：获取扫描统计数据失败\")\n            raise\n\n\n# 导出接口\n__all__ = ['ScanStatsService']\n"
  },
  {
    "path": "backend/apps/scan/services/scheduled_scan_service.py",
    "content": "\"\"\"\n定时扫描任务 Service\n\n业务逻辑层：\n- 管理定时扫描任务的 CRUD\n- 计算下次执行时间\n- APScheduler 会每分钟检查 next_run_time，到期任务通过 task_distributor 分发\n\"\"\"\nimport logging\nfrom typing import List, Optional, Tuple\nfrom datetime import datetime\n\nfrom django.core.exceptions import ValidationError\n\nfrom apps.scan.models import ScheduledScan\nfrom apps.scan.repositories import DjangoScheduledScanRepository, ScheduledScanDTO\nfrom apps.scan.utils.config_merger import merge_engine_configs, ConfigConflictError\nfrom apps.engine.repositories import DjangoEngineRepository\nfrom apps.targets.services import TargetService\n\n\nlogger = logging.getLogger(__name__)\n\n\nclass ScheduledScanService:\n    \"\"\"\n    定时扫描任务服务\n    \n    职责：\n    - 定时扫描任务的 CRUD 操作\n    - 调度逻辑处理（基于 next_run_time）\n    \"\"\"\n    \n    def __init__(self):\n        self.repo = DjangoScheduledScanRepository()\n        self.engine_repo = DjangoEngineRepository()\n        self.target_service = TargetService()\n    \n    # ==================== 查询方法 ====================\n    \n    def get_by_id(self, scheduled_scan_id: int) -> Optional[ScheduledScan]:\n        \"\"\"根据 ID 获取定时扫描任务\"\"\"\n        return self.repo.get_by_id(scheduled_scan_id)\n    \n    def get_queryset(self):\n        \"\"\"获取所有定时扫描任务的查询集\"\"\"\n        return self.repo.get_queryset()\n\n    def get_all(self, page: int = 1, page_size: int = 10) -> Tuple[List[ScheduledScan], int]:\n        \"\"\"分页获取所有定时扫描任务\"\"\"\n        return self.repo.get_all(page, page_size)\n    \n    # ==================== 创建方法 ====================\n    \n    def create(self, dto: ScheduledScanDTO) -> ScheduledScan:\n        \"\"\"\n        创建定时扫描任务（使用引擎 ID 合并配置）\n        \n        流程：\n        1. 验证参数\n        2. 合并引擎配置\n        3. 创建数据库记录\n        4. 计算并设置 next_run_time\n        \n        Args:\n            dto: 定时扫描 DTO\n        \n        Returns:\n            创建的 ScheduledScan 对象\n        \n        Raises:\n            ValidationError: 参数验证失败\n            ConfigConflictError: 引擎配置冲突\n        \"\"\"\n        # 1. 验证参数\n        self._validate_create_dto(dto)\n        \n        # 2. 合并引擎配置\n        engines = []\n        engine_names = []\n        for engine_id in dto.engine_ids:\n            engine = self.engine_repo.get_by_id(engine_id)\n            if engine:\n                engines.append((engine.name, engine.configuration or ''))\n                engine_names.append(engine.name)\n        \n        merged_configuration = merge_engine_configs(engines)\n        \n        # 设置 DTO 的合并配置和引擎名称\n        dto.engine_names = engine_names\n        dto.yaml_configuration = merged_configuration\n        \n        # 3. 创建数据库记录\n        scheduled_scan = self.repo.create(dto)\n        \n        # 4. 如果有 cron 表达式且已启用，计算下次执行时间\n        if scheduled_scan.cron_expression and scheduled_scan.is_enabled:\n            next_run_time = self._calculate_next_run_time(scheduled_scan)\n            if next_run_time:\n                self.repo.update_next_run_time(scheduled_scan.id, next_run_time)\n                scheduled_scan.next_run_time = next_run_time\n        \n        logger.info(\n            \"创建定时扫描任务 - ID: %s, 名称: %s, 下次执行: %s\",\n            scheduled_scan.id, scheduled_scan.name, scheduled_scan.next_run_time\n        )\n        \n        return scheduled_scan\n    \n    def create_with_configuration(self, dto: ScheduledScanDTO) -> ScheduledScan:\n        \"\"\"\n        创建定时扫描任务（直接使用前端传递的配置）\n        \n        流程：\n        1. 验证参数\n        2. 直接使用 dto.yaml_configuration\n        3. 创建数据库记录\n        4. 计算并设置 next_run_time\n        \n        Args:\n            dto: 定时扫描 DTO（必须包含 yaml_configuration）\n        \n        Returns:\n            创建的 ScheduledScan 对象\n        \n        Raises:\n            ValidationError: 参数验证失败\n        \"\"\"\n        # 1. 验证参数\n        self._validate_create_dto_with_configuration(dto)\n        \n        # 2. 创建数据库记录（直接使用 dto 中的配置）\n        scheduled_scan = self.repo.create(dto)\n        \n        # 3. 如果有 cron 表达式且已启用，计算下次执行时间\n        if scheduled_scan.cron_expression and scheduled_scan.is_enabled:\n            next_run_time = self._calculate_next_run_time(scheduled_scan)\n            if next_run_time:\n                self.repo.update_next_run_time(scheduled_scan.id, next_run_time)\n                scheduled_scan.next_run_time = next_run_time\n        \n        logger.info(\n            \"创建定时扫描任务 - ID: %s, 名称: %s, 下次执行: %s\",\n            scheduled_scan.id, scheduled_scan.name, scheduled_scan.next_run_time\n        )\n        \n        return scheduled_scan\n    \n    def _validate_create_dto(self, dto: ScheduledScanDTO) -> None:\n        \"\"\"验证创建 DTO（使用引擎 ID）\"\"\"\n        # 基础验证\n        self._validate_base_dto(dto)\n        \n        if not dto.engine_ids:\n            raise ValidationError('必须选择扫描引擎')\n        \n        # 验证所有引擎是否存在\n        for engine_id in dto.engine_ids:\n            if not self.engine_repo.get_by_id(engine_id):\n                raise ValidationError(f'扫描引擎 ID {engine_id} 不存在')\n    \n    def _validate_create_dto_with_configuration(self, dto: ScheduledScanDTO) -> None:\n        \"\"\"验证创建 DTO（使用前端传递的配置）\"\"\"\n        # 基础验证\n        self._validate_base_dto(dto)\n        \n        if not dto.yaml_configuration:\n            raise ValidationError('配置不能为空')\n    \n    def _validate_base_dto(self, dto: ScheduledScanDTO) -> None:\n        \"\"\"验证 DTO 的基础字段（公共逻辑）\"\"\"\n        from apps.targets.repositories import DjangoOrganizationRepository\n        \n        if not dto.name:\n            raise ValidationError('任务名称不能为空')\n        \n        # 验证扫描模式（organization_id 和 target_id 互斥）\n        if not dto.organization_id and not dto.target_id:\n            raise ValidationError('必须选择组织或扫描目标')\n        \n        if dto.organization_id and dto.target_id:\n            raise ValidationError('组织扫描和目标扫描只能选择其中一种')\n        \n        # 组织扫描模式：验证组织是否存在\n        if dto.organization_id:\n            org_repo = DjangoOrganizationRepository()\n            if not org_repo.get_by_id(dto.organization_id):\n                raise ValidationError(f'组织 ID {dto.organization_id} 不存在')\n        \n        # 目标扫描模式：验证目标是否存在\n        if dto.target_id:\n            if not self.target_service.get_by_id(dto.target_id):\n                raise ValidationError(f'目标 ID {dto.target_id} 不存在')\n        \n        # 验证 cron 表达式格式（简单校验）\n        if dto.cron_expression:\n            parts = dto.cron_expression.split()\n            if len(parts) != 5:\n                raise ValidationError('Cron 表达式格式错误，需要 5 个部分：分 时 日 月 周')\n    \n    # ==================== 更新方法 ====================\n    \n    def update(self, scheduled_scan_id: int, dto: ScheduledScanDTO) -> Optional[ScheduledScan]:\n        \"\"\"\n        更新定时扫描任务\n        \n        Args:\n            scheduled_scan_id: 定时扫描 ID\n            dto: 更新的数据\n        \n        Returns:\n            更新后的 ScheduledScan 对象\n        \n        Raises:\n            ConfigConflictError: 引擎配置冲突\n        \"\"\"\n        existing = self.repo.get_by_id(scheduled_scan_id)\n        if not existing:\n            return None\n        \n        # 如果引擎变更，重新合并配置\n        if dto.engine_ids is not None:\n            engines = []\n            engine_names = []\n            for engine_id in dto.engine_ids:\n                engine = self.engine_repo.get_by_id(engine_id)\n                if engine:\n                    engines.append((engine.name, engine.configuration or ''))\n                    engine_names.append(engine.name)\n            \n            merged_configuration = merge_engine_configs(engines)\n            dto.engine_names = engine_names\n            dto.yaml_configuration = merged_configuration\n        \n        # 更新数据库记录\n        scheduled_scan = self.repo.update(scheduled_scan_id, dto)\n        if not scheduled_scan:\n            return None\n        \n        # 如果 cron 表达式或启用状态变化，重新计算 next_run_time\n        cron_changed = dto.cron_expression is not None and dto.cron_expression != existing.cron_expression\n        enabled_changed = dto.is_enabled is not None and dto.is_enabled != existing.is_enabled\n        \n        if cron_changed or enabled_changed:\n            if scheduled_scan.is_enabled and scheduled_scan.cron_expression:\n                next_run_time = self._calculate_next_run_time(scheduled_scan)\n                self.repo.update_next_run_time(scheduled_scan.id, next_run_time)\n                scheduled_scan.next_run_time = next_run_time\n            else:\n                # 禁用或无 cron 表达式，清空下次执行时间\n                self.repo.update_next_run_time(scheduled_scan.id, None)\n                scheduled_scan.next_run_time = None\n        \n        return scheduled_scan\n    \n    # ==================== 启用/禁用方法 ====================\n    \n    def toggle_enabled(self, scheduled_scan_id: int, enabled: bool) -> bool:\n        \"\"\"\n        切换定时扫描任务的启用状态\n        \n        Args:\n            scheduled_scan_id: 定时扫描 ID\n            enabled: 是否启用\n        \n        Returns:\n            是否成功\n        \"\"\"\n        scheduled_scan = self.repo.get_by_id(scheduled_scan_id)\n        if not scheduled_scan:\n            return False\n        \n        # 更新数据库\n        if not self.repo.toggle_enabled(scheduled_scan_id, enabled):\n            return False\n        \n        # 更新 next_run_time\n        if enabled and scheduled_scan.cron_expression:\n            next_run_time = self._calculate_next_run_time(scheduled_scan)\n            self.repo.update_next_run_time(scheduled_scan_id, next_run_time)\n        else:\n            self.repo.update_next_run_time(scheduled_scan_id, None)\n        \n        logger.info(\"切换定时扫描状态 - ID: %s, Enabled: %s\", scheduled_scan_id, enabled)\n        return True\n    \n    def record_run(self, scheduled_scan_id: int) -> bool:\n        \"\"\"\n        记录一次执行（增加执行次数、更新上次执行时间、计算下次执行时间）\n        \n        Args:\n            scheduled_scan_id: 定时扫描 ID\n        \n        Returns:\n            是否成功\n        \"\"\"\n        # 1. 增加执行次数并更新上次执行时间\n        if not self.repo.increment_run_count(scheduled_scan_id):\n            return False\n        \n        # 2. 计算并更新下次执行时间\n        scheduled_scan = self.repo.get_by_id(scheduled_scan_id)\n        if scheduled_scan and scheduled_scan.cron_expression:\n            next_run_time = self._calculate_next_run_time(scheduled_scan)\n            if next_run_time:\n                self.repo.update_next_run_time(scheduled_scan_id, next_run_time)\n        \n        return True\n    \n    # ==================== 删除方法 ====================\n    \n    def delete(self, scheduled_scan_id: int) -> bool:\n        \"\"\"\n        删除定时扫描任务\n        \n        Args:\n            scheduled_scan_id: 定时扫描 ID\n        \n        Returns:\n            是否成功\n        \"\"\"\n        return self.repo.hard_delete(scheduled_scan_id)\n    \n    # ==================== 定时触发（APScheduler 调用）====================\n    \n    def trigger_due_scans(self) -> int:\n        \"\"\"\n        检查并触发所有到期的定时扫描任务\n        \n        由 APScheduler 每分钟调用一次，检查 next_run_time <= now 的任务\n        \n        Returns:\n            触发的任务数量\n        \"\"\"\n        from django.utils import timezone\n        from croniter import croniter\n        \n        now = timezone.now()\n        triggered_count = 0\n        \n        # 获取所有启用且到期的定时扫描\n        due_scans = ScheduledScan.objects.filter(\n            is_enabled=True,\n            next_run_time__lte=now,\n        )\n        \n        for scheduled_scan in due_scans:\n            try:\n                # 1. 先计算并更新下次执行时间（防止重复触发）\n                # 这样即使触发过程耗时较长，下一次 APScheduler 调用也不会再次查询到这个任务\n                cron = croniter(scheduled_scan.cron_expression, now)\n                next_run = cron.get_next(datetime)\n                self.repo.update_next_run_time(scheduled_scan.id, next_run)\n                \n                # 2. 触发扫描\n                self._trigger_scan_now(scheduled_scan)\n                \n                # 3. 更新执行记录（run_count + 1, last_run_time = now）\n                self.repo.increment_run_count(scheduled_scan.id)\n                \n                triggered_count += 1\n                logger.info(\n                    \"定时扫描已触发 - ID: %s, 名称: %s, 下次执行: %s\",\n                    scheduled_scan.id, scheduled_scan.name, next_run\n                )\n                \n            except Exception as e:\n                logger.error(\n                    \"定时扫描触发失败 - ID: %s, Error: %s\",\n                    scheduled_scan.id, e\n                )\n                # 注意：即使触发失败，next_run_time 已更新，任务会在下次计划时间重试\n                # 这是合理的行为：避免失败任务被无限重试\n        \n        return triggered_count\n    \n    # ==================== 内部方法 ====================\n    \n    def _trigger_scan_now(self, scheduled_scan: ScheduledScan) -> int:\n        \"\"\"\n        立即触发扫描（支持组织扫描和目标扫描两种模式）\n        \n        复用 ScanService 的逻辑，与 API 调用保持一致。\n        使用存储的 yaml_configuration 而不是重新合并。\n        \"\"\"\n        from apps.scan.services.scan_service import ScanService\n        \n        scan_service = ScanService()\n        \n        # 1. 准备扫描所需数据（使用存储的多引擎配置）\n        targets, _, _, _ = scan_service.prepare_initiate_scan_multi_engine(\n            organization_id=scheduled_scan.organization_id,\n            target_id=scheduled_scan.target_id,\n            engine_ids=scheduled_scan.engine_ids\n        )\n        \n        # 2. 创建扫描任务，使用存储的合并配置\n        created_scans = scan_service.create_scans(\n            targets=targets,\n            engine_ids=scheduled_scan.engine_ids,\n            engine_names=scheduled_scan.engine_names,\n            yaml_configuration=scheduled_scan.yaml_configuration,\n            scheduled_scan_name=scheduled_scan.name\n        )\n        \n        logger.info(\n            \"定时扫描已触发 - ScheduledScan ID: %s, 创建扫描数: %d\",\n            scheduled_scan.id, len(created_scans)\n        )\n        return len(created_scans)\n    \n    # ==================== 辅助方法 ====================\n    \n    def _calculate_next_run_time(self, scheduled_scan: ScheduledScan) -> Optional[datetime]:\n        \"\"\"\n        计算下次执行时间\n        \n        Args:\n            scheduled_scan: 定时扫描对象\n        \n        Returns:\n            下次执行时间，once 类型返回 None\n        \"\"\"\n        from croniter import croniter\n        from django.utils import timezone\n        \n        cron_expr = scheduled_scan.cron_expression\n        if not cron_expr:\n            return None\n        \n        try:\n            cron = croniter(cron_expr, timezone.now())\n            return cron.get_next(datetime)\n        except Exception as e:\n            logger.error(\"计算下次执行时间失败: %s\", e)\n            return None\n"
  },
  {
    "path": "backend/apps/scan/services/subfinder_provider_config_service.py",
    "content": "\"\"\"Subfinder Provider 配置文件生成服务\n\n负责生成 subfinder 的 provider-config.yaml 配置文件\n\"\"\"\n\nimport logging\nimport os\nfrom pathlib import Path\nfrom typing import Optional\n\nimport yaml\n\nfrom ..models import SubfinderProviderSettings\n\nlogger = logging.getLogger(__name__)\n\n\nclass SubfinderProviderConfigService:\n    \"\"\"Subfinder Provider 配置文件生成服务\"\"\"\n    \n    # Provider 格式定义\n    PROVIDER_FORMATS = {\n        'fofa': {'type': 'composite', 'format': '{email}:{api_key}'},\n        'censys': {'type': 'composite', 'format': '{api_id}:{api_secret}'},\n        'hunter': {'type': 'single', 'field': 'api_key'},\n        'shodan': {'type': 'single', 'field': 'api_key'},\n        'zoomeye': {'type': 'single', 'field': 'api_key'},\n        'securitytrails': {'type': 'single', 'field': 'api_key'},\n        'threatbook': {'type': 'single', 'field': 'api_key'},\n        'quake': {'type': 'single', 'field': 'api_key'},\n    }\n    \n    def generate(self, output_dir: str) -> Optional[str]:\n        \"\"\"\n        生成 provider-config.yaml 文件\n        \n        Args:\n            output_dir: 输出目录路径\n            \n        Returns:\n            生成的配置文件路径，如果没有启用的 provider 则返回 None\n        \"\"\"\n        settings = SubfinderProviderSettings.get_instance()\n        \n        config = {}\n        has_enabled = False\n        \n        for provider, format_info in self.PROVIDER_FORMATS.items():\n            provider_config = settings.providers.get(provider, {})\n            \n            if not provider_config.get('enabled'):\n                config[provider] = []\n                continue\n            \n            value = self._build_provider_value(provider, provider_config)\n            if value:\n                config[provider] = [value]  # 单个 key 放入数组\n                has_enabled = True\n                logger.debug(f\"Provider {provider} 已启用\")\n            else:\n                config[provider] = []\n        \n        # 检查是否有任何启用的 provider\n        if not has_enabled:\n            logger.info(\"没有启用的 Provider，跳过配置文件生成\")\n            return None\n        \n        # 确保输出目录存在\n        output_path = Path(output_dir) / 'provider-config.yaml'\n        output_path.parent.mkdir(parents=True, exist_ok=True)\n        \n        # 写入 YAML 文件（使用默认列表格式，和 subfinder 一致）\n        with open(output_path, 'w', encoding='utf-8') as f:\n            yaml.dump(config, f, default_flow_style=False, allow_unicode=True)\n        \n        # 设置文件权限为 600（仅所有者可读写）\n        os.chmod(output_path, 0o600)\n        \n        logger.info(f\"Provider 配置文件已生成: {output_path}\")\n        return str(output_path)\n    \n    def _build_provider_value(self, provider: str, config: dict) -> Optional[str]:\n        \"\"\"根据 provider 格式规则构建配置值\n        \n        Args:\n            provider: provider 名称\n            config: provider 配置字典\n            \n        Returns:\n            构建的配置值字符串，如果配置不完整则返回 None\n        \"\"\"\n        format_info = self.PROVIDER_FORMATS.get(provider)\n        if not format_info:\n            return None\n        \n        if format_info['type'] == 'composite':\n            # 复合格式：需要多个字段\n            format_str = format_info['format']\n            try:\n                # 提取格式字符串中的字段名\n                # 例如 '{email}:{api_key}' -> ['email', 'api_key']\n                import re\n                fields = re.findall(r'\\{(\\w+)\\}', format_str)\n                \n                # 检查所有字段是否都有值\n                values = {}\n                for field in fields:\n                    value = config.get(field, '').strip()\n                    if not value:\n                        logger.debug(f\"Provider {provider} 缺少字段 {field}\")\n                        return None\n                    values[field] = value\n                \n                return format_str.format(**values)\n            except (KeyError, ValueError) as e:\n                logger.warning(f\"构建 {provider} 配置值失败: {e}\")\n                return None\n        else:\n            # 单字段格式\n            field = format_info['field']\n            value = config.get(field, '').strip()\n            if not value:\n                logger.debug(f\"Provider {provider} 缺少字段 {field}\")\n                return None\n            return value\n    \n    def cleanup(self, config_path: str) -> None:\n        \"\"\"清理配置文件\n        \n        Args:\n            config_path: 配置文件路径\n        \"\"\"\n        try:\n            if config_path and Path(config_path).exists():\n                Path(config_path).unlink()\n                logger.debug(f\"已清理配置文件: {config_path}\")\n        except Exception as e:\n            logger.warning(f\"清理配置文件失败: {config_path} - {e}\")\n"
  },
  {
    "path": "backend/apps/scan/services/target_export_service.py",
    "content": "\"\"\"\n目标导出服务\n\n提供统一的目标提取和文件导出功能，支持：\n- URL 导出（纯导出，不做隐式回退）\n- 默认 URL 生成（独立方法）\n- 带回退链的 URL 导出（用例层编排）\n- 域名/IP 导出（用于端口扫描）\n- 黑名单过滤集成\n\"\"\"\n\nimport ipaddress\nimport logging\nfrom pathlib import Path\nfrom typing import Dict, Any, Optional, List, Iterator, Tuple\n\nfrom django.db.models import QuerySet\n\nfrom apps.common.utils import BlacklistFilter\n\nlogger = logging.getLogger(__name__)\n\n\nclass DataSource:\n    \"\"\"数据源类型常量\"\"\"\n    ENDPOINT = \"endpoint\"\n    WEBSITE = \"website\"\n    HOST_PORT = \"host_port\"\n    DEFAULT = \"default\"\n\n\ndef create_export_service(target_id: int) -> 'TargetExportService':\n    \"\"\"\n    工厂函数：创建带黑名单过滤的导出服务\n    \n    Args:\n        target_id: 目标 ID，用于加载黑名单规则\n        \n    Returns:\n        TargetExportService: 配置好黑名单过滤器的导出服务实例\n    \"\"\"\n    from apps.common.services import BlacklistService\n    \n    rules = BlacklistService().get_rules(target_id)\n    blacklist_filter = BlacklistFilter(rules)\n    return TargetExportService(blacklist_filter=blacklist_filter)\n\n\ndef _iter_default_urls_from_target(\n    target_id: int,\n    blacklist_filter: Optional[BlacklistFilter] = None\n) -> Iterator[str]:\n    \"\"\"\n    内部生成器：从 Target 本身生成默认 URL\n    \n    根据 Target 类型生成 URL：\n    - DOMAIN: http(s)://domain\n    - IP: http(s)://ip\n    - CIDR: 展开为所有 IP 的 http(s)://ip\n    - URL: 直接使用目标 URL\n    \n    Args:\n        target_id: 目标 ID\n        blacklist_filter: 黑名单过滤器\n        \n    Yields:\n        str: URL\n    \"\"\"\n    from apps.targets.services import TargetService\n    from apps.targets.models import Target\n    \n    target_service = TargetService()\n    target = target_service.get_target(target_id)\n    \n    if not target:\n        logger.warning(\"Target ID %d 不存在，无法生成默认 URL\", target_id)\n        return\n    \n    target_name = target.name\n    target_type = target.type\n    \n    # 根据 Target 类型生成 URL\n    if target_type == Target.TargetType.DOMAIN:\n        urls = [f\"http://{target_name}\", f\"https://{target_name}\"]\n    elif target_type == Target.TargetType.IP:\n        urls = [f\"http://{target_name}\", f\"https://{target_name}\"]\n    elif target_type == Target.TargetType.CIDR:\n        try:\n            network = ipaddress.ip_network(target_name, strict=False)\n            urls = []\n            for ip in network.hosts():\n                urls.extend([f\"http://{ip}\", f\"https://{ip}\"])\n            # /32 或 /128 特殊处理\n            if not urls:\n                ip = str(network.network_address)\n                urls = [f\"http://{ip}\", f\"https://{ip}\"]\n        except ValueError as e:\n            logger.error(\"CIDR 解析失败: %s - %s\", target_name, e)\n            return\n    elif target_type == Target.TargetType.URL:\n        urls = [target_name]\n    else:\n        logger.warning(\"不支持的 Target 类型: %s\", target_type)\n        return\n    \n    # 过滤并产出\n    for url in urls:\n        if blacklist_filter and not blacklist_filter.is_allowed(url):\n            continue\n        yield url\n\n\ndef _iter_urls_with_fallback(\n    target_id: int,\n    sources: List[str],\n    blacklist_filter: Optional[BlacklistFilter] = None,\n    batch_size: int = 1000,\n    tried_sources: Optional[List[str]] = None\n) -> Iterator[Tuple[str, str]]:\n    \"\"\"\n    内部生成器：流式产出 URL（带回退链）\n    \n    按 sources 顺序尝试每个数据源，直到有数据返回。\n    \n    回退逻辑：\n    - 数据源有数据且通过过滤 → 产出 URL，停止回退\n    - 数据源有数据但全被过滤 → 不回退，停止（避免意外暴露）\n    - 数据源为空 → 继续尝试下一个\n    \n    Args:\n        target_id: 目标 ID\n        sources: 数据源优先级列表\n        blacklist_filter: 黑名单过滤器\n        batch_size: 批次大小\n        tried_sources: 可选，用于记录尝试过的数据源（外部传入列表，会被修改）\n        \n    Yields:\n        Tuple[str, str]: (url, source) - URL 和来源标识\n    \"\"\"\n    from apps.asset.models import Endpoint, WebSite\n    \n    for source in sources:\n        if tried_sources is not None:\n            tried_sources.append(source)\n        \n        has_output = False  # 是否有输出（通过过滤的）\n        has_raw_data = False  # 是否有原始数据（过滤前）\n        \n        if source == DataSource.DEFAULT:\n            # 默认 URL 生成（从 Target 本身构造，复用共用生成器）\n            for url in _iter_default_urls_from_target(target_id, blacklist_filter):\n                has_raw_data = True\n                has_output = True\n                yield url, source\n            \n            # 检查是否有原始数据（需要单独判断，因为生成器可能被过滤后为空）\n            if not has_raw_data:\n                # 再次检查 Target 是否存在\n                from apps.targets.services import TargetService\n                target = TargetService().get_target(target_id)\n                has_raw_data = target is not None\n            \n            if has_raw_data:\n                if not has_output:\n                    logger.info(\"%s 有数据但全被黑名单过滤，不回退\", source)\n                return\n            continue\n        \n        # 构建对应数据源的 queryset\n        if source == DataSource.ENDPOINT:\n            queryset = Endpoint.objects.filter(target_id=target_id).values_list('url', flat=True)\n        elif source == DataSource.WEBSITE:\n            queryset = WebSite.objects.filter(target_id=target_id).values_list('url', flat=True)\n        else:\n            logger.warning(\"未知的数据源类型: %s，跳过\", source)\n            continue\n        \n        for url in queryset.iterator(chunk_size=batch_size):\n            if url:\n                has_raw_data = True\n                if blacklist_filter and not blacklist_filter.is_allowed(url):\n                    continue\n                has_output = True\n                yield url, source\n        \n        # 有原始数据就停止（不管是否被过滤）\n        if has_raw_data:\n            if not has_output:\n                logger.info(\"%s 有数据但全被黑名单过滤，不回退\", source)\n            return\n        \n        logger.info(\"%s 为空，尝试下一个数据源\", source)\n\n\ndef get_urls_with_fallback(\n    target_id: int,\n    sources: List[str],\n    batch_size: int = 1000\n) -> Dict[str, Any]:\n    \"\"\"\n    带回退链的 URL 获取用例函数（返回列表）\n    \n    按 sources 顺序尝试每个数据源，直到有数据返回。\n    \n    Args:\n        target_id: 目标 ID\n        sources: 数据源优先级列表，如 [\"website\", \"endpoint\", \"default\"]\n        batch_size: 批次大小\n        \n    Returns:\n        dict: {\n            'success': bool,\n            'urls': List[str],\n            'total_count': int,\n            'source': str,  # 实际使用的数据源\n            'tried_sources': List[str],  # 尝试过的数据源\n        }\n    \"\"\"\n    from apps.common.services import BlacklistService\n    \n    rules = BlacklistService().get_rules(target_id)\n    blacklist_filter = BlacklistFilter(rules)\n    \n    urls = []\n    actual_source = 'none'\n    tried_sources = []\n    \n    for url, source in _iter_urls_with_fallback(target_id, sources, blacklist_filter, batch_size, tried_sources):\n        urls.append(url)\n        actual_source = source\n    \n    if urls:\n        logger.info(\"从 %s 获取 %d 条 URL\", actual_source, len(urls))\n    else:\n        logger.warning(\"所有数据源都为空，无法获取 URL\")\n    \n    return {\n        'success': True,\n        'urls': urls,\n        'total_count': len(urls),\n        'source': actual_source,\n        'tried_sources': tried_sources,\n    }\n\n\ndef export_urls_with_fallback(\n    target_id: int,\n    output_file: str,\n    sources: List[str],\n    batch_size: int = 1000\n) -> Dict[str, Any]:\n    \"\"\"\n    带回退链的 URL 导出用例函数（写入文件）\n    \n    按 sources 顺序尝试每个数据源，直到有数据返回。\n    流式写入，内存占用 O(1)。\n    \n    Args:\n        target_id: 目标 ID\n        output_file: 输出文件路径\n        sources: 数据源优先级列表，如 [\"endpoint\", \"website\", \"default\"]\n        batch_size: 批次大小\n        \n    Returns:\n        dict: {\n            'success': bool,\n            'output_file': str,\n            'total_count': int,\n            'source': str,  # 实际使用的数据源\n            'tried_sources': List[str],  # 尝试过的数据源\n        }\n    \"\"\"\n    from apps.common.services import BlacklistService\n    \n    rules = BlacklistService().get_rules(target_id)\n    blacklist_filter = BlacklistFilter(rules)\n    \n    output_path = Path(output_file)\n    output_path.parent.mkdir(parents=True, exist_ok=True)\n    \n    total_count = 0\n    actual_source = 'none'\n    tried_sources = []\n    \n    with open(output_path, 'w', encoding='utf-8', buffering=8192) as f:\n        for url, source in _iter_urls_with_fallback(target_id, sources, blacklist_filter, batch_size, tried_sources):\n            f.write(f\"{url}\\n\")\n            total_count += 1\n            actual_source = source\n            \n            if total_count % 10000 == 0:\n                logger.info(\"已导出 %d 个 URL...\", total_count)\n    \n    if total_count > 0:\n        logger.info(\"从 %s 导出 %d 条 URL 到 %s\", actual_source, total_count, output_file)\n    else:\n        logger.warning(\"所有数据源都为空，无法导出 URL\")\n    \n    return {\n        'success': True,\n        'output_file': str(output_path),\n        'total_count': total_count,\n        'source': actual_source,\n        'tried_sources': tried_sources,\n    }\n\n\nclass TargetExportService:\n    \"\"\"\n    目标导出服务 - 提供统一的目标提取和文件导出功能\n    \n    使用方式：\n        # 方式 1：使用用例函数（推荐）\n        from apps.scan.services.target_export_service import export_urls_with_fallback, DataSource\n        \n        result = export_urls_with_fallback(\n            target_id=1,\n            output_file='/path/to/output.txt',\n            sources=[DataSource.ENDPOINT, DataSource.WEBSITE, DataSource.DEFAULT]\n        )\n        \n        # 方式 2：直接使用 Service（纯导出，不带回退）\n        export_service = create_export_service(target_id)\n        result = export_service.export_urls(target_id, output_path, queryset)\n    \"\"\"\n    \n    def __init__(self, blacklist_filter: Optional[BlacklistFilter] = None):\n        \"\"\"\n        初始化导出服务\n        \n        Args:\n            blacklist_filter: 黑名单过滤器，None 表示禁用过滤\n        \"\"\"\n        self.blacklist_filter = blacklist_filter\n    \n    def export_urls(\n        self,\n        target_id: int,\n        output_path: str,\n        queryset: QuerySet,\n        url_field: str = 'url',\n        batch_size: int = 1000\n    ) -> Dict[str, Any]:\n        \"\"\"\n        纯 URL 导出函数 - 只负责将 queryset 数据写入文件\n        \n        不做任何隐式回退或默认 URL 生成。\n        \n        Args:\n            target_id: 目标 ID\n            output_path: 输出文件路径\n            queryset: 数据源 queryset（由调用方构建，应为 values_list flat=True）\n            url_field: URL 字段名（用于黑名单过滤）\n            batch_size: 批次大小\n            \n        Returns:\n            dict: {\n                'success': bool,\n                'output_file': str,\n                'total_count': int,        # 实际写入数量\n                'queryset_count': int,     # 原始数据数量（迭代计数）\n                'filtered_count': int,     # 被黑名单过滤的数量\n            }\n            \n        Raises:\n            IOError: 文件写入失败\n        \"\"\"\n        output_file = Path(output_path)\n        output_file.parent.mkdir(parents=True, exist_ok=True)\n        \n        logger.info(\"开始导出 URL - target_id=%s, output=%s\", target_id, output_path)\n        \n        total_count = 0\n        filtered_count = 0\n        queryset_count = 0\n        \n        try:\n            with open(output_file, 'w', encoding='utf-8', buffering=8192) as f:\n                for url in queryset.iterator(chunk_size=batch_size):\n                    queryset_count += 1\n                    if url:\n                        # 黑名单过滤\n                        if self.blacklist_filter and not self.blacklist_filter.is_allowed(url):\n                            filtered_count += 1\n                            continue\n                        f.write(f\"{url}\\n\")\n                        total_count += 1\n                        \n                        if total_count % 10000 == 0:\n                            logger.info(\"已导出 %d 个 URL...\", total_count)\n        except IOError as e:\n            logger.error(\"文件写入失败: %s - %s\", output_path, e)\n            raise\n        \n        if filtered_count > 0:\n            logger.info(\"黑名单过滤: 过滤 %d 个 URL\", filtered_count)\n        \n        logger.info(\n            \"✓ URL 导出完成 - 写入: %d, 原始: %d, 过滤: %d, 文件: %s\",\n            total_count, queryset_count, filtered_count, output_path\n        )\n        \n        return {\n            'success': True,\n            'output_file': str(output_file),\n            'total_count': total_count,\n            'queryset_count': queryset_count,\n            'filtered_count': filtered_count,\n        }\n\n    def generate_default_urls(\n        self,\n        target_id: int,\n        output_path: str\n    ) -> Dict[str, Any]:\n        \"\"\"\n        默认 URL 生成器\n        \n        根据 Target 类型生成默认 URL：\n        - DOMAIN: http(s)://domain\n        - IP: http(s)://ip\n        - CIDR: 展开为所有 IP 的 http(s)://ip\n        - URL: 直接使用目标 URL\n        \n        Args:\n            target_id: 目标 ID\n            output_path: 输出文件路径\n            \n        Returns:\n            dict: {\n                'success': bool,\n                'output_file': str,\n                'total_count': int,\n            }\n        \"\"\"\n        output_file = Path(output_path)\n        output_file.parent.mkdir(parents=True, exist_ok=True)\n        \n        logger.info(\"生成默认 URL - target_id=%d\", target_id)\n        \n        total_urls = 0\n        \n        with open(output_file, 'w', encoding='utf-8', buffering=8192) as f:\n            for url in _iter_default_urls_from_target(target_id, self.blacklist_filter):\n                f.write(f\"{url}\\n\")\n                total_urls += 1\n                \n                if total_urls % 10000 == 0:\n                    logger.info(\"已生成 %d 个 URL...\", total_urls)\n        \n        logger.info(\"✓ 默认 URL 生成完成 - 数量: %d\", total_urls)\n        \n        return {\n            'success': True,\n            'output_file': str(output_file),\n            'total_count': total_urls,\n        }\n\n    def export_hosts(\n        self,\n        target_id: int,\n        output_path: str,\n        batch_size: int = 1000\n    ) -> Dict[str, Any]:\n        \"\"\"\n        主机列表导出函数（用于端口扫描）\n        \n        根据 Target 类型选择导出逻辑：\n        - DOMAIN: 从 Subdomain 表流式导出子域名\n        - IP: 直接写入 IP 地址\n        - CIDR: 展开为所有主机 IP\n        \n        Args:\n            target_id: 目标 ID\n            output_path: 输出文件路径\n            batch_size: 批次大小\n            \n        Returns:\n            dict: {\n                'success': bool,\n                'output_file': str,\n                'total_count': int,\n                'target_type': str\n            }\n        \"\"\"\n        from apps.targets.services import TargetService\n        from apps.targets.models import Target\n\n        output_file = Path(output_path)\n        output_file.parent.mkdir(parents=True, exist_ok=True)\n        \n        # 获取 Target 信息\n        target_service = TargetService()\n        target = target_service.get_target(target_id)\n        \n        if not target:\n            raise ValueError(f\"Target ID {target_id} 不存在\")\n        \n        target_type = target.type\n        target_name = target.name\n        \n        logger.info(\n            \"开始导出主机列表 - Target ID: %d, Name: %s, Type: %s, 输出文件: %s\",\n            target_id, target_name, target_type, output_path\n        )\n        \n        total_count = 0\n        \n        if target_type == Target.TargetType.DOMAIN:\n            total_count = self._export_domains(target_id, target_name, output_file, batch_size)\n            type_desc = \"域名\"\n            \n        elif target_type == Target.TargetType.IP:\n            total_count = self._export_ip(target_name, output_file)\n            type_desc = \"IP\"\n            \n        elif target_type == Target.TargetType.CIDR:\n            total_count = self._export_cidr(target_name, output_file)\n            type_desc = \"CIDR IP\"\n            \n        else:\n            raise ValueError(f\"不支持的目标类型: {target_type}\")\n        \n        logger.info(\n            \"✓ 主机列表导出完成 - 类型: %s, 总数: %d, 文件: %s\",\n            type_desc, total_count, output_path\n        )\n        \n        return {\n            'success': True,\n            'output_file': str(output_file),\n            'total_count': total_count,\n            'target_type': target_type\n        }\n    \n    def _export_domains(\n        self,\n        target_id: int,\n        target_name: str,\n        output_path: Path,\n        batch_size: int\n    ) -> int:\n        \"\"\"导出域名类型目标的根域名 + 子域名\"\"\"\n        from apps.asset.services.asset.subdomain_service import SubdomainService\n        \n        subdomain_service = SubdomainService()\n        domain_iterator = subdomain_service.iter_subdomain_names_by_target(\n            target_id=target_id,\n            chunk_size=batch_size\n        )\n        \n        total_count = 0\n        written_domains = set()  # 去重（子域名表可能已包含根域名）\n        \n        with open(output_path, 'w', encoding='utf-8', buffering=8192) as f:\n            # 1. 先写入根域名\n            if self._should_write_target(target_name):\n                f.write(f\"{target_name}\\n\")\n                written_domains.add(target_name)\n                total_count += 1\n            \n            # 2. 再写入子域名（跳过已写入的根域名）\n            for domain_name in domain_iterator:\n                if domain_name in written_domains:\n                    continue\n                if self._should_write_target(domain_name):\n                    f.write(f\"{domain_name}\\n\")\n                    written_domains.add(domain_name)\n                    total_count += 1\n                    \n                    if total_count % 10000 == 0:\n                        logger.info(\"已导出 %d 个域名...\", total_count)\n        \n        return total_count\n    \n    def _export_ip(self, target_name: str, output_path: Path) -> int:\n        \"\"\"导出 IP 类型目标\"\"\"\n        if self._should_write_target(target_name):\n            with open(output_path, 'w', encoding='utf-8') as f:\n                f.write(f\"{target_name}\\n\")\n            return 1\n        return 0\n    \n    def _export_cidr(self, target_name: str, output_path: Path) -> int:\n        \"\"\"导出 CIDR 类型目标，展开为每个 IP\"\"\"\n        network = ipaddress.ip_network(target_name, strict=False)\n        total_count = 0\n        \n        with open(output_path, 'w', encoding='utf-8', buffering=8192) as f:\n            for ip in network.hosts():\n                ip_str = str(ip)\n                if self._should_write_target(ip_str):\n                    f.write(f\"{ip_str}\\n\")\n                    total_count += 1\n                    \n                    if total_count % 10000 == 0:\n                        logger.info(\"已导出 %d 个 IP...\", total_count)\n        \n        # /32 或 /128 特殊处理\n        if total_count == 0:\n            ip_str = str(network.network_address)\n            if self._should_write_target(ip_str):\n                with open(output_path, 'w', encoding='utf-8') as f:\n                    f.write(f\"{ip_str}\\n\")\n                total_count = 1\n        \n        return total_count\n    \n    def _should_write_target(self, target: str) -> bool:\n        \"\"\"检查目标是否应该写入（通过黑名单过滤）\"\"\"\n        if self.blacklist_filter:\n            return self.blacklist_filter.is_allowed(target)\n        return True\n"
  },
  {
    "path": "backend/apps/scan/tasks/__init__.py",
    "content": "\"\"\"\n扫描任务模块\n\n包含：\n- Prefect Tasks: 具体操作的执行单元\n\n架构说明：\n- Flow（flows/）编排 Tasks（tasks/）\n- Tasks 负责具体操作，Flow 负责编排\n\"\"\"\n\n# 子域名发现任务（已重构为多个子任务）\nfrom .subdomain_discovery import (\n    run_subdomain_discovery_task,\n    merge_and_validate_task,\n    save_domains_task,\n)\n\n# 指纹识别任务\nfrom .fingerprint_detect import (\n    export_urls_for_fingerprint_task,\n    run_xingfinger_and_stream_update_tech_task,\n)\n\n# 注意：\n# - subdomain_discovery_task 已重构为多个子任务（subdomain_discovery/）\n# - finalize_scan_task 已废弃（Handler 统一管理状态）\n# - initiate_scan_task 已迁移到 flows/initiate_scan_flow.py\n# - cleanup_old_scans_task 已迁移到 flows（cleanup_old_scans_flow）\n# - create_scan_workspace_task 已删除，直接使用 setup_scan_workspace()\n\n__all__ = [\n    # 子域名发现任务\n    'run_subdomain_discovery_task',\n    'merge_and_validate_task',\n    'save_domains_task',\n    # 指纹识别任务\n    'export_urls_for_fingerprint_task',\n    'run_xingfinger_and_stream_update_tech_task',\n]\n"
  },
  {
    "path": "backend/apps/scan/tasks/directory_scan/__init__.py",
    "content": "\"\"\"\n目录扫描任务\n\n主要任务：\n- export_sites_task：导出站点列表到文件\n- run_and_stream_save_directories_task：流式运行目录扫描并实时保存结果\n\"\"\"\n\nfrom .export_sites_task import export_sites_task\nfrom .run_and_stream_save_directories_task import run_and_stream_save_directories_task\n\n__all__ = [\n    'export_sites_task',\n    'run_and_stream_save_directories_task',\n]\n"
  },
  {
    "path": "backend/apps/scan/tasks/directory_scan/export_sites_task.py",
    "content": "\"\"\"\n导出站点 URL 到 TXT 文件的 Task\n\n支持两种模式：\n1. 传统模式（向后兼容）：使用 target_id 从数据库导出\n2. Provider 模式：使用 TargetProvider 从任意数据源导出\n\n数据源: WebSite.url → Default\n\"\"\"\nimport logging\nfrom typing import Optional\nfrom pathlib import Path\nfrom prefect import task\n\nfrom apps.scan.services.target_export_service import (\n    export_urls_with_fallback,\n    DataSource,\n)\nfrom apps.scan.providers import TargetProvider\n\nlogger = logging.getLogger(__name__)\n\n\n@task(name=\"export_sites\")\ndef export_sites_task(\n    target_id: Optional[int] = None,\n    output_file: str = \"\",\n    provider: Optional[TargetProvider] = None,\n    batch_size: int = 1000,\n) -> dict:\n    \"\"\"\n    导出目标下的所有站点 URL 到 TXT 文件\n\n    支持两种模式：\n    1. 传统模式（向后兼容）：传入 target_id，从数据库导出\n    2. Provider 模式：传入 provider，从任意数据源导出\n\n    数据源优先级（回退链，仅传统模式）：\n    1. WebSite 表 - 站点级别 URL\n    2. 默认生成 - 根据 Target 类型生成 http(s)://target_name\n\n    Args:\n        target_id: 目标 ID（传统模式，向后兼容）\n        output_file: 输出文件路径（绝对路径）\n        provider: TargetProvider 实例（新模式）\n        batch_size: 每次读取的批次大小，默认 1000\n\n    Returns:\n        dict: {\n            'success': bool,\n            'output_file': str,\n            'total_count': int\n        }\n\n    Raises:\n        ValueError: 参数错误\n        IOError: 文件写入失败\n    \"\"\"\n    # 参数验证：至少提供一个\n    if target_id is None and provider is None:\n        raise ValueError(\"必须提供 target_id 或 provider 参数之一\")\n    \n    # Provider 模式：使用 TargetProvider 导出\n    if provider is not None:\n        logger.info(\"使用 Provider 模式 - Provider: %s\", type(provider).__name__)\n        return _export_with_provider(output_file, provider)\n    \n    # 传统模式：使用 export_urls_with_fallback\n    logger.info(\"使用传统模式 - Target ID: %d\", target_id)\n    result = export_urls_with_fallback(\n        target_id=target_id,\n        output_file=output_file,\n        sources=[DataSource.WEBSITE, DataSource.DEFAULT],\n        batch_size=batch_size,\n    )\n    \n    logger.info(\n        \"站点 URL 导出完成 - source=%s, count=%d\",\n        result['source'], result['total_count']\n    )\n    \n    # 保持返回值格式不变（向后兼容）\n    return {\n        'success': result['success'],\n        'output_file': result['output_file'],\n        'total_count': result['total_count'],\n    }\n\n\ndef _export_with_provider(output_file: str, provider: TargetProvider) -> dict:\n    \"\"\"使用 Provider 导出 URL\"\"\"\n    output_path = Path(output_file)\n    output_path.parent.mkdir(parents=True, exist_ok=True)\n    \n    total_count = 0\n    blacklist_filter = provider.get_blacklist_filter()\n    \n    with open(output_path, 'w', encoding='utf-8', buffering=8192) as f:\n        for url in provider.iter_urls():\n            # 应用黑名单过滤（如果有）\n            if blacklist_filter and not blacklist_filter.is_allowed(url):\n                continue\n            \n            f.write(f\"{url}\\n\")\n            total_count += 1\n            \n            if total_count % 1000 == 0:\n                logger.info(\"已导出 %d 个 URL...\", total_count)\n    \n    logger.info(\"✓ URL 导出完成 - 总数: %d, 文件: %s\", total_count, str(output_path))\n    \n    return {\n        'success': True,\n        'output_file': str(output_path),\n        'total_count': total_count,\n    }\n"
  },
  {
    "path": "backend/apps/scan/tasks/directory_scan/run_and_stream_save_directories_task.py",
    "content": "\"\"\"\n基于 execute_stream 的流式目录扫描任务\n\n主要功能：\n    1. 实时执行目录扫描命令（如 ffuf）\n    2. 流式处理命令输出，实时解析为 Directory 记录\n    3. 批量保存到数据库\n    4. 避免生成大量临时文件，提高效率\n\n数据流向：\n    命令执行 → 流式输出 → 实时解析 → 批量保存 → 数据库\n    \n    输入：扫描命令及参数\n    输出：Directory 记录\n\n优化策略：\n    - 使用 execute_stream 实时处理输出\n    - 流式处理避免内存溢出\n    - 批量操作减少数据库交互\n\"\"\"\n\nimport logging\nimport json\nimport subprocess\nimport time\nfrom pathlib import Path\nfrom prefect import task\nfrom typing import Generator, Optional, TYPE_CHECKING\nfrom django.db import IntegrityError, OperationalError, DatabaseError\nfrom psycopg2 import InterfaceError\nfrom dataclasses import dataclass\n\nfrom apps.asset.dtos.snapshot import DirectorySnapshotDTO\nfrom apps.scan.utils import execute_stream\n\n# 类型检查时导入，运行时不导入（避免循环依赖）\nif TYPE_CHECKING:\n    from apps.asset.services.snapshot import DirectorySnapshotsService\n\nlogger = logging.getLogger(__name__)\n\n\n@dataclass\nclass ServiceSet:\n    \"\"\"\n    Service 集合，用于依赖注入\n    \n    提供目录扫描所需的 Service 实例，便于测试时注入 Mock 对象\n    \"\"\"\n    snapshot: \"DirectorySnapshotsService\"\n    \n    @classmethod\n    def create_default(cls) -> \"ServiceSet\":\n        \"\"\"创建默认的 Service 集合\"\"\"\n        from apps.asset.services.snapshot import DirectorySnapshotsService\n        return cls(\n            snapshot=DirectorySnapshotsService()\n        )\n\n\ndef _parse_and_validate_line(line: str) -> Optional[dict]:\n    \"\"\"\n    解析并验证单行 JSON 数据\n    \n    Args:\n        line: 单行输出数据\n    \n    Returns:\n        Optional[dict]: 有效的 ffuf 扫描记录，或 None 如果验证失败\n    \n    验证步骤：\n        1. 解析 JSON 格式\n        2. 验证数据类型为字典\n        3. 验证必要字段（url）\n    \"\"\"\n    try:\n        # 步骤 1: 解析 JSON\n        try:\n            line_data = json.loads(line, strict=False)\n        except json.JSONDecodeError:\n            # logger.debug(\"跳过非 JSON 行: %s\", line)\n            return None\n        \n        # 步骤 2: 验证数据类型\n        if not isinstance(line_data, dict):\n            logger.debug(\"跳过非字典数据\")\n            return None\n        \n        # 步骤 3: 验证必要字段\n        if not line_data.get('url'):\n            logger.info(\"URL 为空，跳过 - 数据: %s\", str(line_data)[:200])\n            return None\n        \n        # 返回有效记录\n        return {\n            'url': line_data['url'],\n            'status': line_data.get('status'),\n            'length': line_data.get('length'),\n            'words': line_data.get('words'),\n            'lines': line_data.get('lines'),\n            'content_type': line_data.get('content-type', ''),\n            'duration': line_data.get('duration')\n        }\n    \n    except Exception:\n        logger.info(\"跳过无法解析的行: %s\", line[:100])\n        return None\n\n\ndef _parse_ffuf_stream_output(\n    cmd: str,\n    tool_name: str,\n    cwd: Optional[str] = None,\n    shell: bool = False,\n    timeout: Optional[int] = None,\n    log_file: Optional[str] = None\n) -> Generator[dict, None, None]:\n    \"\"\"\n    流式解析 ffuf 目录扫描命令输出\n    \n    基于 execute_stream 实时处理 ffuf 命令的 stdout，将每行 JSON 输出\n    转换为 Directory 记录格式\n    \n    Args:\n        cmd: ffuf 目录扫描命令\n        cwd: 工作目录\n        shell: 是否使用 shell 执行\n        timeout: 命令执行超时时间（秒），None 表示不设置超时\n    \n    Yields:\n        dict: 每次 yield 一条解析后的目录记录\n    \"\"\"\n    logger.info(\"开始流式解析 ffuf 目录扫描命令输出 - 命令: %s\", cmd)\n    \n    total_lines = 0\n    error_lines = 0\n    valid_records = 0\n    \n    try:\n        # 使用 execute_stream 获取实时输出流（带工具名、超时控制和日志文件）\n        for line in execute_stream(cmd=cmd, tool_name=tool_name, cwd=cwd, shell=shell, timeout=timeout, log_file=log_file):\n            total_lines += 1\n            \n            # 解析并验证单行数据\n            record = _parse_and_validate_line(line)\n            if record is None:\n                error_lines += 1\n                continue\n            \n            valid_records += 1\n            # yield 一条有效记录\n            yield record\n            \n            # 每处理 1000 条记录输出一次进度\n            if valid_records % 1000 == 0:\n                logger.info(\"已解析 %d 条有效记录...\", valid_records)\n                \n    except subprocess.TimeoutExpired as e:\n        # 超时异常：简洁输出，不显示堆栈\n        error_msg = f\"流式解析命令输出超时 - 命令执行超过 {timeout} 秒\"\n        logger.warning(error_msg)  # 超时是可预期的\n        raise RuntimeError(error_msg) from e\n    except Exception as e:\n        # 其他异常：输出详细堆栈以便调试\n        logger.error(\"流式解析命令输出失败: %s\", e, exc_info=True)\n        raise\n    \n    logger.info(\n        \"流式解析完成 - 总行数: %d, 有效记录: %d, 错误行数: %d\", \n        total_lines, valid_records, error_lines\n    )\n\n\ndef _save_batch_with_retry(\n    batch: list,\n    scan_id: int,\n    target_id: int,\n    batch_num: int,\n    services: ServiceSet,\n    max_retries: int = 3\n) -> dict:\n    \"\"\"\n    保存一个批次的目录扫描结果（带重试机制）\n    \n    Args:\n        batch: 数据批次\n        scan_id: 扫描任务ID\n        target_id: 目标ID\n        batch_num: 批次编号\n        services: Service 集合（必须，依赖注入）\n        max_retries: 最大重试次数\n    \n    Returns:\n        dict: {\n            'success': bool,\n            'created_directories': int\n        }\n    \"\"\"\n    for attempt in range(max_retries):\n        try:\n            count = _save_batch(batch, scan_id, target_id, batch_num, services)\n            return {\n                'success': True,\n                'created_directories': count\n            }\n        \n        except IntegrityError as e:\n            # 数据完整性错误，不应重试\n            logger.error(\"批次 %d 数据完整性错误，跳过: %s\", batch_num, str(e)[:100])\n            return {\n                'success': False,\n                'created_directories': 0\n            }\n        \n        except (OperationalError, DatabaseError, InterfaceError) as e:\n            # 数据库连接/操作错误，可重试\n            if attempt < max_retries - 1:\n                wait_time = 2 ** attempt  # 指数退避: 1s, 2s, 4s\n                logger.warning(\n                    \"批次 %d 保存失败（第 %d 次尝试），%d秒后重试: %s\",\n                    batch_num, attempt + 1, wait_time, str(e)[:100]\n                )\n                time.sleep(wait_time)\n            else:\n                logger.error(\"批次 %d 保存失败（已重试 %d 次）: %s\", batch_num, max_retries, e)\n                return {\n                    'success': False,\n                    'created_directories': 0\n                }\n        \n        except Exception as e:\n            # 其他未知错误 - 检查是否为连接问题\n            error_str = str(e).lower()\n            if 'connection' in error_str and attempt < max_retries - 1:\n                logger.warning(\n                    \"批次 %d 连接相关错误（尝试 %d/%d）: %s，Repository 装饰器会自动重连\",\n                    batch_num, attempt + 1, max_retries, str(e)\n                )\n                time.sleep(2)\n            else:\n                logger.error(\"批次 %d 未知错误: %s\", batch_num, e, exc_info=True)\n                return {\n                    'success': False,\n                    'created_directories': 0\n                }\n    \n    return {\n        'success': False,\n        'created_directories': 0\n    }\n\n\ndef _save_batch(\n    batch: list,\n    scan_id: int,\n    target_id: int,\n    batch_num: int,\n    services: ServiceSet\n) -> int:\n    \"\"\"\n    保存一个批次的数据到数据库（使用快照 Service）\n    \n    数据关系链：\n        Target → DirectorySnapshot (待创建) → Directory (自动同步)\n    \n    处理流程：\n        1. 构建 DirectorySnapshotDTO：包含 scan_id 和 target_id\n        2. 调用快照 Service：save_and_sync() 自动保存快照并同步到资产表\n    \n    Args:\n        batch: 数据批次，list of dict\n        scan_id: 扫描任务 ID\n        target_id: 目标 ID\n        batch_num: 批次编号（用于日志）\n        services: Service 集合（依赖注入）\n    \n    Returns:\n        int: 创建的记录数\n    \"\"\"\n    if not batch:\n        logger.debug(\"批次 %d 为空，跳过处理\", batch_num)\n        return 0\n    \n    # ========== Step 1: 准备 DirectorySnapshot 数据（内存操作，无需事务）==========\n    # 使用列表推导式构建 DTO 列表\n    snapshot_items = [\n        DirectorySnapshotDTO(\n            scan_id=scan_id,\n            target_id=target_id,\n            url=record['url'],\n            status=record.get('status'),\n            content_length=record.get('length'),\n            words=record.get('words'),\n            lines=record.get('lines'),\n            content_type=record.get('content_type', ''),\n            duration=record.get('duration')\n        )\n        for record in batch\n    ]\n    \n    # ========== Step 2: 保存快照并同步到资产表（通过快照 Service）==========\n    if snapshot_items:\n        services.snapshot.save_and_sync(snapshot_items)\n    \n    return len(snapshot_items)\n\n\n@task(\n    name='run_and_stream_save_directories',\n    retries=0,\n    log_prints=True\n)\ndef run_and_stream_save_directories_task(\n    cmd: str,\n    tool_name: str,\n    scan_id: int,\n    target_id: int,\n    site_url: str,\n    cwd: Optional[str] = None,\n    shell: bool = False,\n    batch_size: int = 1000,\n    timeout: Optional[int] = None,\n    log_file: Optional[str] = None\n) -> dict:\n    \"\"\"\n    执行 ffuf 目录扫描命令并流式保存结果到数据库\n    \n    该任务将：\n    1. 通过 site_url 查找对应的 WebSite 对象\n    2. 流式解析 ffuf 输出（JSON 格式）\n    3. 批量保存到 Directory 表\n    \n    Args:\n        cmd: ffuf 目录扫描命令\n        scan_id: 扫描任务 ID\n        target_id: 目标 ID\n        site_url: 当前站点 URL\n        cwd: 工作目录（可选）\n        shell: 是否使用 shell 执行（默认 False）\n        batch_size: 批量保存大小（默认1000）\n        timeout: 命令执行超时时间（秒），None 表示不设置超时\n    \n    Returns:\n        dict: {\n            'processed_records': int,  # 处理的记录总数\n            'created_directories': int,  # 创建的目录记录数\n            'site_url': str  # 当前站点 URL\n        }\n    \n    Raises:\n        ValueError: 参数验证失败\n        RuntimeError: 命令执行或数据库操作失败\n        subprocess.TimeoutExpired: 命令执行超时\n    \"\"\"\n    logger.info(\n        \"开始执行流式目录扫描任务 - site_url=%s, 超时=%s秒\", \n        site_url, timeout if timeout else '无限制'\n    )\n    \n    data_generator = None\n    \n    try:\n        # 1. 初始化服务\n        services = ServiceSet.create_default()\n        \n        # 2. 初始化资源（不再需要查找 WebSite，Directory 直接关联 Target）\n        data_generator = _parse_ffuf_stream_output(cmd=cmd, tool_name=tool_name, cwd=cwd, shell=shell, timeout=timeout, log_file=log_file)\n        \n        # 3. 流式处理记录并分批保存\n        total_records = 0\n        batch_num = 0\n        failed_batches = []\n        batch = []\n        total_created = 0\n        \n        for record in data_generator:\n            batch.append(record)\n            total_records += 1\n            \n            # 达到批次大小，执行保存\n            if len(batch) >= batch_size:\n                batch_num += 1\n                result = _save_batch_with_retry(\n                    batch, scan_id, target_id, batch_num, services\n                )\n                \n                total_created += result.get('created_directories', 0)\n                \n                if not result['success']:\n                    failed_batches.append(batch_num)\n                \n                batch = []  # 清空批次\n                \n                # 每20个批次输出进度\n                if batch_num % 20 == 0:\n                    logger.info(\n                        \"进度: 已处理 %d 批次，%d 条记录\", \n                        batch_num, total_records\n                    )\n        \n        # 保存最后一批\n        if batch:\n            batch_num += 1\n            result = _save_batch_with_retry(\n                batch, scan_id, target_id, batch_num, services\n            )\n            total_created += result.get('created_directories', 0)\n            \n            if not result['success']:\n                failed_batches.append(batch_num)\n        \n        # 检查失败批次\n        if failed_batches:\n            logger.warning(\n                \"部分批次保存失败 - 站点: %s, 失败批次: %s\",\n                site_url, failed_batches\n            )\n        \n        logger.info(\n            \"✓ 流式保存完成 - 站点: %s, 处理记录: %d（%d 批次），创建目录: %d\",\n            site_url, total_records, batch_num, total_created\n        )\n        \n        return {\n            'processed_records': total_records,\n            'created_directories': total_created,\n            'site_url': site_url\n        }\n        \n    except subprocess.TimeoutExpired:\n        # 超时异常直接向上传播，保留异常类型\n        logger.warning(\n            \"⚠️ 目录扫描任务超时 - site_url=%s, 超时=%s秒\",\n            site_url, timeout\n        )\n        raise\n    \n    except Exception as e:\n        error_msg = f\"流式执行目录扫描任务失败: {e}\"\n        logger.error(error_msg, exc_info=True)\n        raise RuntimeError(error_msg) from e\n    \n    finally:\n        # 清理资源\n        if data_generator is not None:\n            try:\n                data_generator.close()\n                logger.debug(\"已关闭数据生成器\")\n            except Exception as gen_close_error:\n                logger.error(\"关闭生成器时出错: %s\", gen_close_error)\n"
  },
  {
    "path": "backend/apps/scan/tasks/fingerprint_detect/__init__.py",
    "content": "\"\"\"\n指纹识别任务模块\n\n包含：\n- export_urls_for_fingerprint_task: 导出 URL 到文件\n- run_xingfinger_and_stream_update_tech_task: 流式执行 xingfinger 并更新 tech\n\"\"\"\n\nfrom .export_urls_task import export_urls_for_fingerprint_task\nfrom .run_xingfinger_task import run_xingfinger_and_stream_update_tech_task\n\n__all__ = [\n    'export_urls_for_fingerprint_task',\n    'run_xingfinger_and_stream_update_tech_task',\n]\n"
  },
  {
    "path": "backend/apps/scan/tasks/fingerprint_detect/export_urls_task.py",
    "content": "\"\"\"\n导出 URL 任务\n\n支持两种模式：\n1. 传统模式（向后兼容）：使用 target_id 从数据库导出\n2. Provider 模式：使用 TargetProvider 从任意数据源导出\n\n用于指纹识别前导出目标下的 URL 到文件\n\"\"\"\n\nimport logging\nfrom typing import Optional\nfrom pathlib import Path\n\nfrom prefect import task\n\nfrom apps.scan.services.target_export_service import (\n    export_urls_with_fallback,\n    DataSource,\n)\nfrom apps.scan.providers import TargetProvider, DatabaseTargetProvider\n\nlogger = logging.getLogger(__name__)\n\n\n@task(name=\"export_urls_for_fingerprint\")\ndef export_urls_for_fingerprint_task(\n    target_id: Optional[int] = None,\n    output_file: str = \"\",\n    source: str = 'website',  # 保留参数，兼容旧调用（实际值由回退链决定）\n    provider: Optional[TargetProvider] = None,\n    batch_size: int = 1000\n) -> dict:\n    \"\"\"\n    导出目标下的 URL 到文件（用于指纹识别）\n    \n    支持两种模式：\n    1. 传统模式（向后兼容）：传入 target_id，从数据库导出\n    2. Provider 模式：传入 provider，从任意数据源导出\n    \n    数据源优先级（回退链，仅传统模式）：\n    1. WebSite 表 - 站点级别 URL\n    2. 默认生成 - 根据 Target 类型生成 http(s)://target_name\n    \n    Args:\n        target_id: 目标 ID（传统模式，向后兼容）\n        output_file: 输出文件路径\n        source: 数据源类型（保留参数，兼容旧调用，实际值由回退链决定）\n        provider: TargetProvider 实例（新模式）\n        batch_size: 批量读取大小\n    \n    Returns:\n        dict: {'output_file': str, 'total_count': int, 'source': str}\n    \"\"\"\n    # 参数验证：至少提供一个\n    if target_id is None and provider is None:\n        raise ValueError(\"必须提供 target_id 或 provider 参数之一\")\n    \n    # Provider 模式：使用 TargetProvider 导出\n    if provider is not None:\n        logger.info(\"使用 Provider 模式 - Provider: %s\", type(provider).__name__)\n        return _export_with_provider(output_file, provider)\n    \n    # 传统模式：使用 export_urls_with_fallback\n    logger.info(\"使用传统模式 - Target ID: %d\", target_id)\n    result = export_urls_with_fallback(\n        target_id=target_id,\n        output_file=output_file,\n        sources=[DataSource.WEBSITE, DataSource.DEFAULT],\n        batch_size=batch_size,\n    )\n    \n    logger.info(\n        \"指纹识别 URL 导出完成 - source=%s, count=%d\",\n        result['source'], result['total_count']\n    )\n    \n    # 返回实际使用的数据源（不再固定为 \"website\"）\n    return {\n        'output_file': result['output_file'],\n        'total_count': result['total_count'],\n        'source': result['source'],\n    }\n\n\ndef _export_with_provider(output_file: str, provider: TargetProvider) -> dict:\n    \"\"\"使用 Provider 导出 URL\"\"\"\n    output_path = Path(output_file)\n    output_path.parent.mkdir(parents=True, exist_ok=True)\n    \n    total_count = 0\n    blacklist_filter = provider.get_blacklist_filter()\n    \n    with open(output_path, 'w', encoding='utf-8', buffering=8192) as f:\n        for url in provider.iter_urls():\n            # 应用黑名单过滤（如果有）\n            if blacklist_filter and not blacklist_filter.is_allowed(url):\n                continue\n            \n            f.write(f\"{url}\\n\")\n            total_count += 1\n            \n            if total_count % 1000 == 0:\n                logger.info(\"已导出 %d 个 URL...\", total_count)\n    \n    logger.info(\"✓ URL 导出完成 - 总数: %d, 文件: %s\", total_count, str(output_path))\n    \n    return {\n        'output_file': str(output_path),\n        'total_count': total_count,\n        'source': 'provider',\n    }\n"
  },
  {
    "path": "backend/apps/scan/tasks/fingerprint_detect/run_xingfinger_task.py",
    "content": "\"\"\"\nxingfinger 执行任务\n\n流式执行 xingfinger 命令并实时更新 tech 字段\n\"\"\"\n\nimport json\nimport logging\nimport subprocess\nfrom typing import Optional, Generator\nfrom urllib.parse import urlparse\n\nfrom django.db import connection\nfrom prefect import task\n\nfrom apps.scan.utils import execute_stream\nfrom apps.asset.dtos.snapshot import WebsiteSnapshotDTO\nfrom apps.asset.repositories.snapshot import DjangoWebsiteSnapshotRepository\n\nlogger = logging.getLogger(__name__)\n\n\ndef parse_xingfinger_line(line: str) -> dict | None:\n    \"\"\"\n    解析 xingfinger 单行 JSON 输出\n    \n    xingfinger 输出格式：\n    {\"url\": \"...\", \"cms\": \"...\", \"server\": \"BWS/1.1\", \"status_code\": 200, \"length\": 642831, \"title\": \"...\"}\n    \n    Returns:\n        dict: 包含 url, techs, server, title, status_code, content_length 的字典\n        None: 解析失败或 URL 为空时\n    \"\"\"\n    try:\n        item = json.loads(line)\n        url = item.get('url', '').strip()\n        \n        if not url:\n            return None\n        \n        # cms 字段按逗号分割，去除空白\n        cms = item.get('cms', '')\n        techs = [t.strip() for t in cms.split(',') if t.strip()] if cms else []\n        \n        return {\n            'url': url,\n            'techs': techs,\n            'server': item.get('server', ''),\n            'title': item.get('title', ''),\n            'status_code': item.get('status_code'),\n            'content_length': item.get('length'),\n        }\n        \n    except json.JSONDecodeError:\n        return None\n\n\ndef bulk_merge_website_fields(\n    records: list[dict],\n    target_id: int\n) -> dict:\n    \"\"\"\n    批量合并更新 WebSite 字段（PostgreSQL 原生 SQL）\n    \n    合并策略：\n    - tech：数组合并去重\n    - title, webserver, status_code, content_length：只在原值为空/NULL 时更新\n    \n    如果 URL 对应的记录不存在，会自动创建新记录。\n    \n    Args:\n        records: 解析后的记录列表，每个包含 {url, techs, server, title, status_code, content_length}\n        target_id: 目标 ID\n    \n    Returns:\n        dict: {'updated_count': int, 'created_count': int}\n    \"\"\"\n    from apps.asset.models import WebSite\n    table_name = WebSite._meta.db_table\n    \n    updated_count = 0\n    created_count = 0\n    \n    with connection.cursor() as cursor:\n        for record in records:\n            url = record['url']\n            techs = record.get('techs', [])\n            server = record.get('server', '') or ''\n            title = record.get('title', '') or ''\n            status_code = record.get('status_code')\n            content_length = record.get('content_length')\n            \n            # 先尝试更新（合并策略）\n            update_sql = f\"\"\"\n                UPDATE {table_name}\n                SET \n                    tech = (SELECT ARRAY(SELECT DISTINCT unnest(\n                        COALESCE(tech, ARRAY[]::varchar[]) || %s::varchar[]\n                    ))),\n                    title = CASE WHEN title = '' OR title IS NULL THEN %s ELSE title END,\n                    webserver = CASE WHEN webserver = '' OR webserver IS NULL THEN %s ELSE webserver END,\n                    status_code = CASE WHEN status_code IS NULL THEN %s ELSE status_code END,\n                    content_length = CASE WHEN content_length IS NULL THEN %s ELSE content_length END\n                WHERE url = %s AND target_id = %s\n            \"\"\"\n            \n            cursor.execute(update_sql, [techs, title, server, status_code, content_length, url, target_id])\n            \n            if cursor.rowcount > 0:\n                updated_count += cursor.rowcount\n            else:\n                # 记录不存在，创建新记录\n                try:\n                    # 从 URL 提取 host\n                    parsed = urlparse(url)\n                    host = parsed.hostname or ''\n                    \n                    # 插入新记录（带冲突处理）\n                    insert_sql = f\"\"\"\n                        INSERT INTO {table_name} (\n                            target_id, url, host, location, title, webserver, \n                            response_body, content_type, tech, status_code, content_length,\n                            response_headers, created_at\n                        )\n                        VALUES (%s, %s, %s, '', %s, %s, '', '', %s::varchar[], %s, %s, '', NOW())\n                        ON CONFLICT (target_id, url) DO UPDATE SET\n                            tech = (SELECT ARRAY(SELECT DISTINCT unnest(\n                                COALESCE({table_name}.tech, ARRAY[]::varchar[]) || EXCLUDED.tech\n                            ))),\n                            title = CASE WHEN {table_name}.title = '' OR {table_name}.title IS NULL THEN EXCLUDED.title ELSE {table_name}.title END,\n                            webserver = CASE WHEN {table_name}.webserver = '' OR {table_name}.webserver IS NULL THEN EXCLUDED.webserver ELSE {table_name}.webserver END,\n                            status_code = CASE WHEN {table_name}.status_code IS NULL THEN EXCLUDED.status_code ELSE {table_name}.status_code END,\n                            content_length = CASE WHEN {table_name}.content_length IS NULL THEN EXCLUDED.content_length ELSE {table_name}.content_length END\n                    \"\"\"\n                    cursor.execute(insert_sql, [target_id, url, host, title, server, techs, status_code, content_length])\n                    created_count += 1\n                    \n                except Exception as e:\n                    logger.warning(\"创建 WebSite 记录失败 (url=%s): %s\", url, e)\n    \n    return {\n        'updated_count': updated_count,\n        'created_count': created_count\n    }\n\n\ndef _parse_xingfinger_stream_output(\n    cmd: str,\n    tool_name: str,\n    cwd: Optional[str] = None,\n    timeout: Optional[int] = None,\n    log_file: Optional[str] = None\n) -> Generator[dict, None, None]:\n    \"\"\"\n    流式解析 xingfinger 命令输出\n    \n    基于 execute_stream 实时处理 xingfinger 命令的 stdout，将每行 JSON 输出\n    转换为完整字段字典\n    \"\"\"\n    logger.info(\"开始流式解析 xingfinger 命令输出 - 命令: %s\", cmd)\n    \n    total_lines = 0\n    valid_records = 0\n    \n    try:\n        for line in execute_stream(cmd=cmd, tool_name=tool_name, cwd=cwd, shell=True, timeout=timeout, log_file=log_file):\n            total_lines += 1\n            \n            # 解析单行 JSON\n            result = parse_xingfinger_line(line)\n            if result is None:\n                continue\n            \n            valid_records += 1\n            yield result\n            \n            # 每处理 500 条记录输出一次进度\n            if valid_records % 500 == 0:\n                logger.info(\"已解析 %d 条有效记录...\", valid_records)\n                \n    except subprocess.TimeoutExpired as e:\n        error_msg = f\"xingfinger 命令执行超时 - 超过 {timeout} 秒\"\n        logger.warning(error_msg)\n        raise RuntimeError(error_msg) from e\n    except Exception as e:\n        logger.error(\"流式解析 xingfinger 输出失败: %s\", e, exc_info=True)\n        raise\n    \n    logger.info(\"流式解析完成 - 总行数: %d, 有效记录: %d\", total_lines, valid_records)\n\n\n@task(name=\"run_xingfinger_and_stream_update_tech\")\ndef run_xingfinger_and_stream_update_tech_task(\n    cmd: str,\n    tool_name: str,\n    scan_id: int,\n    target_id: int,\n    source: str,\n    cwd: str,\n    timeout: int,\n    log_file: str,\n    batch_size: int = 100\n) -> dict:\n    \"\"\"\n    流式执行 xingfinger 命令，保存快照并合并更新资产表\n    \n    处理流程：\n    1. 流式执行 xingfinger 命令\n    2. 实时解析 JSON 输出（完整字段）\n    3. 累积到 batch_size 条后批量处理：\n       - 保存快照（WebsiteSnapshot）\n       - 合并更新资产表（WebSite）\n    \n    合并策略：\n    - tech：数组合并去重\n    - title, webserver, status_code, content_length：只在原值为空时更新\n    \n    Returns:\n        dict: {\n            'processed_records': int,\n            'updated_count': int,\n            'created_count': int,\n            'snapshot_count': int,\n            'batch_count': int\n        }\n    \"\"\"\n    logger.info(\n        \"开始执行 xingfinger - scan_id=%s, target_id=%s, timeout=%s秒\",\n        scan_id, target_id, timeout\n    )\n    \n    data_generator = None\n    snapshot_repo = DjangoWebsiteSnapshotRepository()\n    \n    try:\n        # 初始化统计\n        processed_records = 0\n        updated_count = 0\n        created_count = 0\n        snapshot_count = 0\n        batch_count = 0\n        \n        # 当前批次的记录列表\n        batch_records = []\n        \n        # 流式处理\n        data_generator = _parse_xingfinger_stream_output(\n            cmd=cmd,\n            tool_name=tool_name,\n            cwd=cwd,\n            timeout=timeout,\n            log_file=log_file\n        )\n        \n        for record in data_generator:\n            processed_records += 1\n            batch_records.append(record)\n            \n            # 达到批次大小，执行批量处理\n            if len(batch_records) >= batch_size:\n                batch_count += 1\n                result = _process_batch(\n                    batch_records, scan_id, target_id, batch_count, snapshot_repo\n                )\n                updated_count += result['updated_count']\n                created_count += result['created_count']\n                snapshot_count += result['snapshot_count']\n                \n                # 清空批次\n                batch_records = []\n        \n        # 处理最后一批\n        if batch_records:\n            batch_count += 1\n            result = _process_batch(\n                batch_records, scan_id, target_id, batch_count, snapshot_repo\n            )\n            updated_count += result['updated_count']\n            created_count += result['created_count']\n            snapshot_count += result['snapshot_count']\n        \n        logger.info(\n            \"✓ xingfinger 执行完成 - 处理: %d, 更新: %d, 创建: %d, 快照: %d, 批次: %d\",\n            processed_records, updated_count, created_count, snapshot_count, batch_count\n        )\n        \n        return {\n            'processed_records': processed_records,\n            'updated_count': updated_count,\n            'created_count': created_count,\n            'snapshot_count': snapshot_count,\n            'batch_count': batch_count\n        }\n        \n    except subprocess.TimeoutExpired:\n        logger.warning(\"⚠️ xingfinger 执行超时 - target_id=%s, timeout=%s秒\", target_id, timeout)\n        raise\n    except Exception as e:\n        error_msg = f\"xingfinger 执行失败: {e}\"\n        logger.error(error_msg, exc_info=True)\n        raise RuntimeError(error_msg) from e\n    finally:\n        # 清理资源\n        if data_generator is not None:\n            try:\n                data_generator.close()\n            except Exception as e:\n                logger.debug(\"关闭生成器时出错: %s\", e)\n\n\ndef _process_batch(\n    records: list[dict],\n    scan_id: int,\n    target_id: int,\n    batch_num: int,\n    snapshot_repo: DjangoWebsiteSnapshotRepository\n) -> dict:\n    \"\"\"\n    处理一个批次的数据：保存快照 + 合并更新资产表\n    \n    Args:\n        records: 解析后的记录列表\n        scan_id: 扫描任务 ID\n        target_id: 目标 ID\n        batch_num: 批次编号\n        snapshot_repo: 快照仓库\n    \n    Returns:\n        dict: {'updated_count': int, 'created_count': int, 'snapshot_count': int}\n    \"\"\"\n    # 1. 构建快照 DTO 列表\n    snapshot_dtos = []\n    for record in records:\n        # 从 URL 提取 host\n        parsed = urlparse(record['url'])\n        host = parsed.hostname or ''\n        \n        dto = WebsiteSnapshotDTO(\n            scan_id=scan_id,\n            target_id=target_id,\n            url=record['url'],\n            host=host,\n            title=record.get('title', '') or '',\n            status_code=record.get('status_code'),\n            content_length=record.get('content_length'),\n            webserver=record.get('server', '') or '',\n            tech=record.get('techs', []),\n        )\n        snapshot_dtos.append(dto)\n    \n    # 2. 保存快照\n    snapshot_count = 0\n    if snapshot_dtos:\n        try:\n            snapshot_repo.save_snapshots(snapshot_dtos)\n            snapshot_count = len(snapshot_dtos)\n        except Exception as e:\n            logger.warning(\"批次 %d 保存快照失败: %s\", batch_num, e)\n    \n    # 3. 合并更新资产表\n    merge_result = bulk_merge_website_fields(records, target_id)\n    \n    logger.debug(\n        \"批次 %d 完成 - 更新: %d, 创建: %d, 快照: %d\",\n        batch_num, merge_result['updated_count'], merge_result['created_count'], snapshot_count\n    )\n    \n    return {\n        'updated_count': merge_result['updated_count'],\n        'created_count': merge_result['created_count'],\n        'snapshot_count': snapshot_count\n    }\n"
  },
  {
    "path": "backend/apps/scan/tasks/port_scan/__init__.py",
    "content": "\"\"\"\n端口扫描相关 Tasks\n\n提供端口扫描流程所需的原子化任务\n\"\"\"\n\nfrom .export_hosts_task import export_hosts_task\nfrom .run_and_stream_save_ports_task import run_and_stream_save_ports_task\nfrom .types import PortScanRecord\n\n__all__ = [\n    'export_hosts_task',\n    'run_and_stream_save_ports_task',\n    'PortScanRecord',\n]"
  },
  {
    "path": "backend/apps/scan/tasks/port_scan/export_hosts_task.py",
    "content": "\"\"\"\n导出主机列表到 TXT 文件的 Task\n\n支持两种模式：\n1. 传统模式（向后兼容）：使用 target_id 从数据库导出\n2. Provider 模式：使用 TargetProvider 从任意数据源导出\n\n根据 Target 类型决定导出内容：\n- DOMAIN: 从 Subdomain 表导出子域名\n- IP: 直接写入 target.name\n- CIDR: 展开 CIDR 范围内的所有 IP\n\"\"\"\nimport logging\nfrom pathlib import Path\nfrom typing import Optional\n\nfrom prefect import task\n\nfrom apps.scan.providers import DatabaseTargetProvider, TargetProvider\n\nlogger = logging.getLogger(__name__)\n\n\n@task(name=\"export_hosts\")\ndef export_hosts_task(\n    output_file: str,\n    target_id: Optional[int] = None,\n    provider: Optional[TargetProvider] = None,\n) -> dict:\n    \"\"\"\n    导出主机列表到 TXT 文件\n\n    支持两种模式：\n    1. 传统模式（向后兼容）：传入 target_id，从数据库导出\n    2. Provider 模式：传入 provider，从任意数据源导出\n\n    根据 Target 类型自动决定导出内容：\n    - DOMAIN: 从 Subdomain 表导出子域名（流式处理，支持 10万+ 域名）\n    - IP: 直接写入 target.name（单个 IP）\n    - CIDR: 展开 CIDR 范围内的所有可用 IP\n\n    Args:\n        output_file: 输出文件路径（绝对路径）\n        target_id: 目标 ID（传统模式，向后兼容）\n        provider: TargetProvider 实例（新模式）\n\n    Returns:\n        dict: {\n            'success': bool,\n            'output_file': str,\n            'total_count': int,\n            'target_type': str  # 仅传统模式返回\n        }\n\n    Raises:\n        ValueError: 参数错误（target_id 和 provider 都未提供）\n        IOError: 文件写入失败\n    \"\"\"\n    if target_id is None and provider is None:\n        raise ValueError(\"必须提供 target_id 或 provider 参数之一\")\n\n    # 向后兼容：如果没有提供 provider，使用 target_id 创建 DatabaseTargetProvider\n    use_legacy_mode = provider is None\n    if use_legacy_mode:\n        logger.info(\"使用传统模式 - Target ID: %d\", target_id)\n        provider = DatabaseTargetProvider(target_id=target_id)\n    else:\n        logger.info(\"使用 Provider 模式 - Provider: %s\", type(provider).__name__)\n\n    # 确保输出目录存在\n    output_path = Path(output_file)\n    output_path.parent.mkdir(parents=True, exist_ok=True)\n\n    # 使用 Provider 导出主机列表（iter_hosts 内部已处理黑名单过滤）\n    total_count = 0\n\n    with open(output_path, 'w', encoding='utf-8', buffering=8192) as f:\n        for host in provider.iter_hosts():\n            f.write(f\"{host}\\n\")\n            total_count += 1\n\n            if total_count % 1000 == 0:\n                logger.info(\"已导出 %d 个主机...\", total_count)\n\n    logger.info(\"✓ 主机列表导出完成 - 总数: %d, 文件: %s\", total_count, str(output_path))\n\n    result = {\n        'success': True,\n        'output_file': str(output_path),\n        'total_count': total_count,\n    }\n\n    # 传统模式：保持返回值格式不变（向后兼容）\n    if use_legacy_mode:\n        from apps.targets.services import TargetService\n        target = TargetService().get_target(target_id)\n        result['target_type'] = target.type if target else 'unknown'\n\n    return result\n"
  },
  {
    "path": "backend/apps/scan/tasks/port_scan/run_and_stream_save_ports_task.py",
    "content": "\"\"\"\n基于 stream_command 的流式端口扫描任务（简化版）\n\n主要功能：\n    1. 实时执行端口扫描命令（如 naabu）\n    2. 流式处理命令输出，实时解析为 PortScanRecord\n    3. 批量保存到数据库（HostPortAssociation + HostPortAssociationSnapshot）\n    4. 避免生成大量临时文件，提高效率\n\n数据流向：\n    命令执行 → 流式输出 → 实时解析 → 批量保存 → 数据库\n    \n    输入：扫描命令及参数\n    输出：HostPortAssociation（资产表）+ HostPortAssociationSnapshot（快照表）\n\n优化策略：\n    - 使用 stream_command 实时处理输出\n    - 直接存储 host + ip + port 组合，不维护复杂关系\n    - 流式处理避免内存溢出\n    - 批量操作减少数据库交互\n\"\"\"\n\nimport logging\nimport json\nimport subprocess\nimport time\nfrom asyncio import CancelledError\nfrom pathlib import Path\nfrom prefect import task\nfrom typing import Generator, List, Optional, TYPE_CHECKING\nfrom django.db import IntegrityError, OperationalError, DatabaseError\nfrom psycopg2 import InterfaceError\nfrom dataclasses import dataclass\n\nfrom .types import PortScanRecord\nfrom apps.scan.utils import execute_stream\nfrom apps.common.validators import validate_port\nfrom apps.common.definitions import ScanStatus\nfrom apps.scan.models import Scan\n\n# 类型检查时导入，运行时不导入（避免循环依赖）\nif TYPE_CHECKING:\n    from apps.asset.services.snapshot import HostPortMappingSnapshotsService\n\nlogger = logging.getLogger(__name__)\n\n\n@dataclass\nclass ServiceSet:\n    \"\"\"\n    Service 集合，用于依赖注入\n    \n    提供所有需要的 Service 实例，便于测试时注入 Mock 对象\n    \"\"\"\n    snapshot: \"HostPortMappingSnapshotsService\"\n    \n    @classmethod\n    def create_default(cls) -> \"ServiceSet\":\n        \"\"\"创建默认的 Service 集合\"\"\"\n        from apps.asset.services.snapshot import HostPortMappingSnapshotsService\n        return cls(\n            snapshot=HostPortMappingSnapshotsService()\n        )\n\n\ndef _save_batch_with_retry(\n    batch: list,\n    scan_id: int,\n    target_id: int,\n    batch_num: int,\n    services: ServiceSet,\n    max_retries: int = 3\n) -> dict:\n    \"\"\"\n    保存一个批次的端口扫描结果（带重试机制）\n    \n    Args:\n        batch: 数据批次\n        scan_id: 扫描任务ID\n        target_id: 目标ID\n        batch_num: 批次编号\n        services: Service 集合（必须，包含 HostPortAssociationSnapshotsService）\n        max_retries: 最大重试次数\n    \n    Returns:\n        dict: {'success': bool}\n    \"\"\"\n    for attempt in range(max_retries):\n        try:\n            result = _save_batch(batch, scan_id, target_id, batch_num, services)\n            return result  # {'success': True}\n        \n        except IntegrityError as e:\n            # 数据完整性错误，不应重试（IntegrityError 是 DatabaseError 的子类，需先处理）\n            logger.error(\"批次 %d 数据完整性错误，跳过: %s\", batch_num, str(e)[:100])\n            return {'success': False}\n        \n        except (OperationalError, DatabaseError) as e:\n            # 数据库连接/操作错误，可重试\n            if attempt < max_retries - 1:\n                wait_time = 2 ** attempt  # 指数退避: 1s, 2s, 4s\n                logger.warning(\n                    \"批次 %d 保存失败（第 %d 次尝试），%d秒后重试: %s\",\n                    batch_num, attempt + 1, wait_time, str(e)[:100]\n                )\n                time.sleep(wait_time)\n            else:\n                logger.error(\"批次 %d 保存失败（已重试 %d 次）: %s\", batch_num, max_retries, e)\n                return {'success': False}\n        \n        except Exception as e:\n            # 其他未知错误\n            logger.error(\"批次 %d 未知错误: %s\", batch_num, e, exc_info=True)\n            return {'success': False}\n    \n    return {'success': False}\n\n\ndef _save_batch(\n    batch: list, \n    scan_id: int, \n    target_id: int, \n    batch_num: int, \n    services: ServiceSet  # Service集合（依赖注入）\n) -> dict:\n    \"\"\"\n    保存一个批次的端口扫描数据到数据库（使用 Service 架构）\n    \n    数据存储：\n        使用 HostPortAssociationSnapshotsService.save_and_sync()\n        自动保存到快照表并同步到资产表\n    \n    处理流程：\n        1. 构建 HostPortAssociationSnapshotDTO 列表\n        2. 调用 service.save_and_sync() 统一处理\n           - 保存到快照表（scan_id）\n           - 同步到资产表（target_id）\n    \n    Args:\n        batch: 数据批次，list of {'host', 'ip', 'port'}\n        scan_id: 扫描任务 ID\n        target_id: 目标 ID\n        batch_num: 批次编号（用于日志）\n        services: Service 集合（包含 HostPortAssociationSnapshotsService）\n    \n    Returns:\n        dict: {'success': bool}\n    \n    Raises:\n        TypeError: batch 参数类型错误\n        IntegrityError: 数据完整性错误\n        OperationalError: 数据库操作错误\n        DatabaseError: 其他数据库错误\n    \n    Note:\n        此函数不包含重试逻辑，由外层 _save_batch_with_retry 负责重试\n    \n    Strategy:\n        使用 bulk_create + ignore_conflicts\n        - 新记录：插入\n        - 重复记录：忽略（不更新）\n    \"\"\"\n    from apps.asset.dtos.snapshot import HostPortMappingSnapshotDTO\n    \n    # 参数验证\n    if not isinstance(batch, list):\n        raise TypeError(f\"batch 必须是 list 类型，实际: {type(batch).__name__}\")\n    \n    if not batch:\n        logger.debug(\"批次 %d 为空，跳过处理\", batch_num)\n        return {'success': True}\n    \n    # 构建 DTO 列表（包含完整的业务上下文）\n    items = [\n        HostPortMappingSnapshotDTO(\n            scan_id=scan_id,\n            target_id=target_id,  # 包含 target_id 用于同步到资产表\n            host=record['host'],\n            ip=record['ip'],\n            port=record['port']\n        )\n        for record in batch\n    ]\n    \n    # 调用 Service 统一处理（保存快照 + 同步资产）\n    # DTO 已包含 target_id，无需额外传参\n    services.snapshot.save_and_sync(items)\n    \n    logger.debug(\"批次 %d: 已处理 %d 条记录\", batch_num, len(batch))\n    \n    return {'success': True}\n\ndef _parse_and_validate_line(line: str) -> Optional[PortScanRecord]:\n    \"\"\"\n    解析并验证单行 JSON 数据\n    \n    Args:\n        line: 单行输出数据\n    \n    Returns:\n        Optional[PortScanRecord]: 有效的端口扫描记录，或 None 如果验证失败\n    \n    验证步骤：\n        1. 解析 JSON 格式\n        2. 验证数据类型为字典\n        3. 提取必要字段（host, ip, port）\n        4. 验证字段不为空\n        5. 验证端口号有效性\n    \"\"\"\n    try:\n        # 步骤 1: 解析 JSON\n        try:\n            line_data = json.loads(line, strict=False)\n        except json.JSONDecodeError:\n            # logger.info(\"跳过非 JSON 行: %s\", line)\n            return None\n        \n        # 步骤 2: 验证数据类型\n        if not isinstance(line_data, dict):\n            logger.info(\"跳过非字典数据\")\n            return None\n        \n        # 步骤 3: 提取必要字段\n        host = line_data.get('host', '').strip()\n        ip = line_data.get('ip', '').strip()\n        port = line_data.get('port')\n        \n        logger.debug(\"解析到的主机名: %s, IP: %s, 端口: %s\", host, ip, port)\n\n        if not host and ip:\n            host = ip\n            logger.debug(\"主机名为空，使用 IP 作为 host\")\n\n\n        # 步骤 4: 验证字段不为空\n        if not host or not ip or port is None:\n            logger.info(\"跳过缺少必要字段的记录\")\n            return None\n        \n        # 步骤 5: 验证端口号有效性\n        is_valid, port_num = validate_port(port)\n        if not is_valid:\n            return None\n        \n        # 返回有效记录\n        return {\n            'host': host,\n            'ip': ip,\n            'port': port_num,\n        }\n    \n    except Exception:\n        logger.info(\"跳过无法解析的行: %s\", line[:100])\n        return None\n\n\ndef _parse_naabu_stream_output(\n    cmd: str,\n    tool_name: str,\n    cwd: Optional[str] = None,\n    shell: bool = False,\n    timeout: Optional[int] = None,\n    log_file: Optional[str] = None\n) -> Generator[PortScanRecord, None, None]:\n    \"\"\"\n    流式解析 naabu 端口扫描命令输出\n    \n    基于 stream_command 实时处理 naabu 命令的 stdout，将每行 JSON 输出\n    转换为 PortScanRecord 格式，沿用现有字段校验逻辑\n    \n    Args:\n        cmd: naabu 端口扫描命令（如: \"naabu -l domains.txt -json\"）\n        tool_name: 工具名称（如: \"naabu\"）\n        cwd: 工作目录\n        shell: 是否使用 shell 执行\n        timeout: 命令执行超时时间（秒），None 表示不设置超时\n        log_file: 日志文件路径（可选）\n    \n    Yields:\n        PortScanRecord: 每次 yield 一条解析后的端口记录，格式：\n        {\n            'host': str,   # 域名\n            'ip': str,     # IP地址  \n            'port': int,   # 端口号\n        }\n    \"\"\"\n    logger.info(\"开始流式解析 naabu 端口扫描命令输出 - 命令: %s\", cmd)\n    \n    total_lines = 0\n    error_lines = 0\n    last_log_time = time.time()  # 添加：记录上次日志时间\n    \n    try:\n        # 使用 execute_stream 获取实时输出流（带工具名、超时控制和日志文件）\n        for line in execute_stream(cmd=cmd, tool_name=tool_name, cwd=cwd, shell=shell, timeout=timeout, log_file=log_file):\n            total_lines += 1\n            \n            try:\n                # 解析并验证单行数据\n                record = _parse_and_validate_line(line)\n                if record is None:\n                    error_lines += 1\n                    continue\n                \n                # yield 一条有效记录\n                yield record\n                \n                # 添加：每100条记录输出一次处理速度统计\n                if total_lines % 100 == 0:\n                    current_time = time.time()\n                    elapsed = current_time - last_log_time\n                    logger.info(\n                        \"流式处理进度 - 已处理: %d 行, 有效记录: %d, 错误: %d, 速度: %.1f 行/秒\",\n                        total_lines, total_lines - error_lines, error_lines, 100 / elapsed if elapsed > 0 else 0\n                    )\n                    last_log_time = current_time\n            \n            except (json.JSONDecodeError, ValueError, KeyError):\n                # 数据解析错误（可恢复）：记录信息但继续处理后续数据\n                error_lines += 1\n                logger.info(\"跳过无法解析的行: %s\", line)\n                continue\n                \n    except subprocess.TimeoutExpired as e:\n        # 超时异常：简洁输出，不显示堆栈\n        error_msg = f\"流式解析命令输出超时 - 命令执行超过 {timeout} 秒\"\n        logger.warning(error_msg)  # 超时是可预期的\n        raise RuntimeError(error_msg) from e\n    \n    except (IOError, OSError) as e:\n        # IO错误（致命）：无法继续读取数据流\n        logger.error(\"流式解析IO错误: %s\", e, exc_info=True)\n        raise RuntimeError(f\"流式解析IO错误: {e}\") from e\n    \n    except (BrokenPipeError, ConnectionError) as e:\n        # 连接错误（致命）：进程异常终止或管道断开\n        logger.error(\"流式解析连接错误（进程可能异常终止）: %s\", e, exc_info=True)\n        raise RuntimeError(f\"流式解析连接错误: {e}\") from e\n    \n    except Exception as e:\n        # 未预期的异常：输出详细堆栈以便调试\n        logger.error(\n            \"流式解析命令输出失败（未预期的异常）: %s\",\n            e, exc_info=True\n        )\n        raise\n    \n    logger.info(\n        \"流式解析完成 - 总行数: %d, 错误行数: %d\", \n        total_lines, error_lines,\n    )\n\n\ndef _validate_task_parameters(cmd: str, target_id: int, scan_id: int, cwd: Optional[str]) -> None:\n    \"\"\"\n    验证任务参数的有效性\n    \n    Args:\n        cmd: 扫描命令\n        target_id: 目标ID\n        scan_id: 扫描ID\n        cwd: 工作目录\n        \n    Raises:\n        ValueError: 参数验证失败\n    \"\"\"\n    if not cmd or not cmd.strip():\n        raise ValueError(\"扫描命令不能为空\")\n    \n    if target_id is None:\n        raise ValueError(\"target_id 不能为 None，必须指定目标ID\")\n        \n    if scan_id is None:\n        raise ValueError(\"scan_id 不能为 None，必须指定扫描ID\")\n    \n    # 验证工作目录（如果指定）\n    if cwd and not Path(cwd).exists():\n        raise ValueError(f\"工作目录不存在: {cwd}\")\n\n\ndef _accumulate_batch_stats(total_stats: dict, batch_result: dict) -> None:\n    \"\"\"\n    累加批次统计信息\n    \n    Args:\n        total_stats: 总统计信息字典\n        batch_result: 批次结果字典\n    \"\"\"\n    total_stats['created_ips'] += batch_result.get('created_ips', 0)\n    total_stats['created_ports'] += batch_result.get('created_ports', 0)\n    total_stats['skipped_no_subdomain'] += batch_result.get('skipped_no_subdomain', 0)\n    total_stats['skipped_no_ip'] += batch_result.get('skipped_no_ip', 0)\n\n\ndef _process_batch(\n    batch: list,\n    scan_id: int,\n    target_id: int,\n    batch_num: int,\n    total_stats: dict,\n    failed_batches: list,\n    services: ServiceSet\n) -> None:\n    \"\"\"\n    处理单个批次\n    \n    Args:\n        batch: 数据批次\n        scan_id: 扫描ID\n        target_id: 目标ID\n        batch_num: 批次编号\n        total_stats: 总统计信息\n        failed_batches: 失败批次列表\n        services: Service 集合（必须，依赖注入）\n    \"\"\"\n    result = _save_batch_with_retry(\n        batch, scan_id, target_id, batch_num, services\n    )\n    \n    # 累计统计信息（失败时可能有部分数据已保存）\n    _accumulate_batch_stats(total_stats, result)\n    \n    if not result['success']:\n        failed_batches.append(batch_num)\n        logger.warning(\n            \"批次 %d 保存失败，但已累计统计信息：创建IP=%d, 创建端口=%d\",\n            batch_num, result.get('created_ips', 0), result.get('created_ports', 0)\n        )\n\n\ndef _process_records_in_batches(\n    data_generator,\n    scan_id: int,\n    target_id: int,\n    batch_size: int,\n    services: ServiceSet\n) -> dict:\n    \"\"\"\n    流式处理记录并分批保存\n    \n    Args:\n        data_generator: 数据生成器\n        scan_id: 扫描ID\n        target_id: 目标ID\n        batch_size: 批次大小\n        services: Service 集合（必须，依赖注入）\n        \n    Returns:\n        dict: 处理统计信息\n        \n    Raises:\n        RuntimeError: 存在失败批次时抛出\n        subprocess.TimeoutExpired: 命令执行超时（部分数据已保存）\n    \n    Note:\n        如果发生超时，已处理的数据会被保留在数据库中，\n        但扫描任务会被标记为失败。这是预期行为。\n    \"\"\"\n    total_records = 0\n    batch_num = 0\n    failed_batches = []\n    batch = []\n    cancel_check_interval = 50  # 每处理50条检查一次取消信号\n    \n    # 统计信息\n    total_stats = {\n        'created_ips': 0,\n        'created_ports': 0,\n        'skipped_no_subdomain': 0,\n        'skipped_no_ip': 0\n    }\n    \n    # 流式读取生成器并分批保存\n    # 注意：如果超时，subprocess.TimeoutExpired 会从 data_generator 中抛出\n    # 此时已处理的数据已经保存到数据库\n    for record in data_generator:\n        # 周期性检查取消信号，协作式终止\n        if cancel_check_interval > 0 and (total_records % cancel_check_interval == 0):\n            _raise_if_cancelled(scan_id)\n\n        batch.append(record)\n        total_records += 1\n        \n        # 达到批次大小，执行保存\n        if len(batch) >= batch_size:\n            batch_num += 1\n            _process_batch(batch, scan_id, target_id, batch_num, total_stats, failed_batches, services)\n            batch = []  # 清空批次\n            \n            # 每20个批次输出进度\n            if batch_num % 20 == 0:\n                logger.info(\"进度: 已处理 %d 批次，%d 条记录\", batch_num, total_records)\n    \n    # 保存最后一批\n    if batch:\n        batch_num += 1\n        _process_batch(batch, scan_id, target_id, batch_num, total_stats, failed_batches, services)\n\n    # 最后再检查一次取消信号，避免在尾部卡住\n    _raise_if_cancelled(scan_id)\n    \n    # 检查失败批次\n    if failed_batches:\n        error_msg = (\n            f\"流式保存端口扫描结果时出现失败批次，处理记录: {total_records}，\"\n            f\"失败批次: {failed_batches}\"\n        )\n        logger.warning(error_msg)  # 超时是可预期的\n        raise RuntimeError(error_msg)\n    \n    return {\n        'processed_records': total_records,\n        'batch_count': batch_num,\n        **total_stats\n    }\n\n\ndef _build_final_result(stats: dict) -> dict:\n    \"\"\"\n    构建最终结果并输出日志\n    \n    Args:\n        stats: 处理统计信息\n        \n    Returns:\n        dict: 最终结果\n    \"\"\"\n    logger.info(\n        \"✓ 流式保存完成 - 处理记录: %d（%d 批次），创建IP: %d，创建端口: %d，跳过（无域名）: %d，跳过（无IP）: %d\",\n        stats['processed_records'], stats['batch_count'], stats['created_ips'], stats['created_ports'], \n        stats['skipped_no_subdomain'], stats['skipped_no_ip']\n    )\n    \n    # 如果没有创建任何记录，给出明确提示\n    if stats['created_ips'] == 0 and stats['created_ports'] == 0:\n        logger.warning(\n            \"⚠️  没有创建任何记录！可能原因：1) 域名不在数据库中 2) 命令输出格式问题 3) 重复数据被忽略\"\n        )\n    \n    return {\n        'processed_records': stats['processed_records'],\n        'created_ips': stats['created_ips'],\n        'created_ports': stats['created_ports'],\n        'skipped_no_subdomain': stats['skipped_no_subdomain'],\n        'skipped_no_ip': stats['skipped_no_ip']\n    }\n\n\ndef _cleanup_resources(data_generator) -> None:\n    \"\"\"\n    清理任务资源\n    \n    Args:\n        data_generator: 数据生成器（可以为 None）\n    \n    Note:\n        此函数设计为幂等且安全：\n        - 可以多次调用\n        - 接受 None 值\n        - 捕获所有异常，不会导致 finally 块失败\n    \"\"\"\n    # 确保生成器被正确关闭\n    if data_generator is None:\n        logger.debug(\"数据生成器为 None，无需清理\")\n        return\n    \n    try:\n        data_generator.close()\n        logger.debug(\"✓ 已成功关闭数据生成器\")\n    except StopIteration:\n        # 生成器已经正常结束，这是预期行为\n        logger.debug(\"数据生成器已正常结束\")\n    except GeneratorExit:\n        # 生成器已经被关闭，这是预期行为\n        logger.debug(\"数据生成器已被关闭\")\n    except Exception as gen_close_error:\n        # 未预期的错误：记录但不抛出，避免掩盖原始异常\n        logger.error(\n            \"⚠️ 关闭生成器时出错（此错误不会影响任务结果）: %s\",\n            gen_close_error,\n            exc_info=True\n        )\n\n\n@task(\n    name='run_and_stream_save_ports',\n    retries=0,\n    log_prints=True\n)\ndef run_and_stream_save_ports_task(\n    cmd: str,\n    tool_name: str,\n    scan_id: int,\n    target_id: int,\n    cwd: Optional[str] = None,\n    shell: bool = False,\n    batch_size: int = 1000,\n    timeout: Optional[int] = None,\n    log_file: Optional[str] = None\n) -> dict:\n    \"\"\"\n    执行端口扫描命令并流式保存结果到数据库\n    \n    该任务将：\n    1. 验证输入参数\n    2. 初始化资源（缓存、生成器）\n    3. 流式处理记录并分批保存\n    4. 构建并返回结果统计\n    \n    Args:\n        cmd: 端口扫描命令（如: \"naabu -l domains.txt -json\"）\n        tool_name: 工具名称（如: \"naabu\"）\n        scan_id: 扫描任务 ID\n        target_id: 目标 ID\n        cwd: 工作目录（可选）\n        shell: 是否使用 shell 执行（默认 False）\n        batch_size: 批量保存大小（默认1000）\n        timeout: 命令执行超时时间（秒），None 表示不设置超时\n        log_file: 日志文件路径（可选）\n    \n    Returns:\n        dict: {\n            'processed_records': int,  # 处理的记录总数\n            'created_ips': int,        # 创建的IP记录数\n            'created_ports': int,      # 创建的端口记录数\n            'skipped_no_subdomain': int,  # 因域名不存在跳过的记录数\n            'skipped_no_ip': int,      # 因IP不存在跳过的记录数\n        }\n    \n    Raises:\n        ValueError: 参数验证失败\n        RuntimeError: 命令执行或数据库操作失败\n        subprocess.TimeoutExpired: 命令执行超时\n    \n    Performance:\n        - 流式处理，实时解析命令输出\n        - 内存占用恒定（只存储一个 batch）\n        - 复用现有的批次保存和重试逻辑\n        - 使用事务确保数据一致性\n    \"\"\"\n    logger.info(\n        \"开始执行流式端口扫描任务 - target_id=%s, 超时=%s秒, 命令: %s\", \n        target_id, timeout if timeout else '无限制', cmd\n    )\n    \n    data_generator = None\n    \n    try:\n        # 1. 验证参数\n        _validate_task_parameters(cmd, target_id, scan_id, cwd)\n        \n        # 2. 初始化资源\n        data_generator = _parse_naabu_stream_output(cmd, tool_name, cwd, shell, timeout, log_file)\n        services = ServiceSet.create_default()\n        \n        # 3. 流式处理记录并分批保存\n        stats = _process_records_in_batches(\n            data_generator, scan_id, target_id, batch_size, services\n        )\n        \n        # 4. 构建最终结果\n        return _build_final_result(stats)\n    \n    except CancelledError:\n        # Prefect 取消信号：终止任务并标记为取消（让上层 handler 触发状态更新）\n        logger.warning(\n            \"⚠️ 端口扫描任务检测到取消信号，正在终止 - scan_id=%s, target_id=%s\",\n            scan_id, target_id\n        )\n        raise\n\n    except subprocess.TimeoutExpired:\n        # 超时异常：部分数据已保存，但扫描未完成\n        # 这是预期行为：流式处理会实时保存已解析的数据\n        logger.warning(\n            \"⚠️ 端口扫描任务超时 - target_id=%s, 超时=%s秒\\n\"\n            \"注意：超时前已解析的数据已保存到数据库，但扫描未完全完成。\\n\"\n            \"建议：增加超时时间或减少扫描目标数量。\",\n            target_id, timeout\n        )\n        raise  # 直接重新抛出，保留异常类型\n    \n    except Exception as e:\n        error_msg = f\"流式执行端口扫描任务失败: {e}\"\n        logger.error(error_msg, exc_info=True)\n        raise RuntimeError(error_msg) from e\n    \n    finally:\n        # 5. 清理资源\n        _cleanup_resources(data_generator)\n\n\ndef _raise_if_cancelled(scan_id: int) -> None:\n    \"\"\"检测扫描是否已请求取消，若已取消则抛出 CancelledError 以触发 Prefect 取消流程。\"\"\"\n    status = Scan.objects.filter(id=scan_id).values_list(\"status\", flat=True).first()\n    if status == ScanStatus.CANCELLED:\n        logger.warning(\"检测到取消信号，终止端口扫描 - scan_id=%s\", scan_id)\n        raise CancelledError()\n"
  },
  {
    "path": "backend/apps/scan/tasks/port_scan/types.py",
    "content": "\"\"\"\n端口扫描相关类型定义\n\n定义端口扫描流程中的数据结构，确保类型安全\n\"\"\"\n\nfrom typing import TypedDict\n\n\nclass PortScanRecord(TypedDict):\n    \"\"\"\n    端口扫描记录类型定义\n    \n    说明：\n        这是端口扫描的标准输出格式，包含：\n        - host: 被扫描的域名\n        - ip: 域名解析后的 IP 地址（扫描工具自动解析）\n        - port: 发现的开放端口\n    \n    用途：\n        - 解析器输出：parse_naabu_result_task\n        - 保存器输入：save_ports_task\n    \n    注意：\n        IP 是端口扫描的必然产物，因为：\n        1. 扫描工具需要先解析域名到 IP\n        2. 端口属于 IP，而非域名\n        3. 同一域名可能有多个 IP\n    \"\"\"\n    host: str   # 域名（如：www.example.com）\n    ip: str     # IP 地址（如：1.1.1.1）\n    port: int   # 端口号（如：80, 443, 22）\n"
  },
  {
    "path": "backend/apps/scan/tasks/screenshot/__init__.py",
    "content": "\"\"\"\n截图任务模块\n\n包含截图相关的所有任务：\n- capture_screenshots_task: 批量截图任务\n\"\"\"\n\nfrom .capture_screenshots_task import capture_screenshots_task\n\n__all__ = [\n    'capture_screenshots_task',\n]\n"
  },
  {
    "path": "backend/apps/scan/tasks/screenshot/capture_screenshots_task.py",
    "content": "\"\"\"\n批量截图任务\n\n使用 Playwright 批量捕获网站截图，压缩后保存到数据库\n\"\"\"\nimport asyncio\nimport logging\nimport time\nfrom prefect import task\n\nlogger = logging.getLogger(__name__)\n\n\ndef _run_async(coro):\n    \"\"\"\n    在同步环境中运行异步协程\n    \n    Args:\n        coro: 异步协程\n    \n    Returns:\n        协程执行结果\n    \"\"\"\n    try:\n        loop = asyncio.get_event_loop()\n    except RuntimeError:\n        loop = asyncio.new_event_loop()\n        asyncio.set_event_loop(loop)\n    \n    return loop.run_until_complete(coro)\n\n\ndef _save_screenshot_with_retry(\n    screenshot_service,\n    scan_id: int,\n    url: str,\n    webp_data: bytes,\n    status_code: int | None = None,\n    max_retries: int = 3\n) -> bool:\n    \"\"\"\n    保存截图到数据库（带重试机制）\n    \n    Args:\n        screenshot_service: ScreenshotService 实例\n        scan_id: 扫描 ID\n        url: URL\n        webp_data: WebP 图片数据\n        status_code: HTTP 响应状态码\n        max_retries: 最大重试次数\n    \n    Returns:\n        是否保存成功\n    \"\"\"\n    for attempt in range(max_retries):\n        try:\n            if screenshot_service.save_screenshot_snapshot(scan_id, url, webp_data, status_code):\n                return True\n            # save 返回 False，等待后重试\n            if attempt < max_retries - 1:\n                wait_time = 2 ** attempt  # 指数退避：1s, 2s, 4s\n                logger.warning(\n                    \"保存截图失败（第 %d 次尝试），%d秒后重试: %s\",\n                    attempt + 1, wait_time, url\n                )\n                time.sleep(wait_time)\n        except Exception as e:\n            if attempt < max_retries - 1:\n                wait_time = 2 ** attempt\n                logger.warning(\n                    \"保存截图异常（第 %d 次尝试），%d秒后重试: %s, 错误: %s\",\n                    attempt + 1, wait_time, url, str(e)[:100]\n                )\n                time.sleep(wait_time)\n            else:\n                logger.error(\"保存截图失败（已重试 %d 次）: %s\", max_retries, url)\n    \n    return False\n\n\nasync def _capture_and_save_screenshots(\n    urls: list[str],\n    scan_id: int,\n    concurrency: int\n) -> dict:\n    \"\"\"\n    异步批量截图并保存\n    \n    Args:\n        urls: URL 列表\n        scan_id: 扫描 ID\n        concurrency: 并发数\n    \n    Returns:\n        统计信息字典\n    \"\"\"\n    from asgiref.sync import sync_to_async\n    from apps.asset.services.playwright_screenshot_service import PlaywrightScreenshotService\n    from apps.asset.services.screenshot_service import ScreenshotService\n    \n    # 初始化服务\n    playwright_service = PlaywrightScreenshotService(concurrency=concurrency)\n    screenshot_service = ScreenshotService()\n    \n    # 包装同步的保存函数为异步\n    async_save_with_retry = sync_to_async(_save_screenshot_with_retry, thread_sensitive=True)\n    \n    # 统计\n    total = len(urls)\n    successful = 0\n    failed = 0\n    \n    logger.info(\"开始批量截图 - URL数: %d, 并发数: %d\", total, concurrency)\n    \n    # 批量截图\n    async for url, screenshot_bytes, status_code in playwright_service.capture_batch(urls):\n        if screenshot_bytes is None:\n            failed += 1\n            continue\n        \n        # 压缩为 WebP\n        webp_data = screenshot_service.compress_from_bytes(screenshot_bytes)\n        if webp_data is None:\n            logger.warning(\"压缩截图失败: %s\", url)\n            failed += 1\n            continue\n        \n        # 保存到数据库（带重试，使用 sync_to_async）\n        if await async_save_with_retry(screenshot_service, scan_id, url, webp_data, status_code):\n            successful += 1\n            if successful % 10 == 0:\n                logger.info(\"截图进度: %d/%d 成功\", successful, total)\n        else:\n            failed += 1\n    \n    return {\n        'total': total,\n        'successful': successful,\n        'failed': failed\n    }\n\n\n@task(name='capture_screenshots', retries=0)\ndef capture_screenshots_task(\n    urls: list[str],\n    scan_id: int,\n    target_id: int,\n    config: dict\n) -> dict:\n    \"\"\"\n    批量截图任务\n    \n    Args:\n        urls: URL 列表\n        scan_id: 扫描 ID\n        target_id: 目标 ID（用于日志）\n        config: 截图配置\n            - concurrency: 并发数（默认 5）\n    \n    Returns:\n        dict: {\n            'total': int,      # 总 URL 数\n            'successful': int, # 成功截图数\n            'failed': int      # 失败数\n        }\n    \"\"\"\n    if not urls:\n        logger.info(\"URL 列表为空，跳过截图任务\")\n        return {'total': 0, 'successful': 0, 'failed': 0}\n    \n    concurrency = config.get('concurrency', 5)\n    \n    logger.info(\n        \"开始截图任务 - scan_id=%d, target_id=%d, URL数=%d, 并发=%d\",\n        scan_id, target_id, len(urls), concurrency\n    )\n    \n    try:\n        result = _run_async(_capture_and_save_screenshots(\n            urls=urls,\n            scan_id=scan_id,\n            concurrency=concurrency\n        ))\n        \n        logger.info(\n            \"✓ 截图任务完成 - 总数: %d, 成功: %d, 失败: %d\",\n            result['total'], result['successful'], result['failed']\n        )\n        \n        return result\n        \n    except Exception as e:\n        logger.error(\"截图任务失败: %s\", e, exc_info=True)\n        raise RuntimeError(f\"截图任务失败: {e}\") from e\n"
  },
  {
    "path": "backend/apps/scan/tasks/site_scan/__init__.py",
    "content": "\"\"\"\n站点扫描任务模块\n\n包含站点扫描相关的所有任务：\n- export_site_urls_task: 导出站点URL到文件\n- run_and_stream_save_websites_task: 流式运行httpx扫描并实时保存结果\n\"\"\"\n\nfrom .export_site_urls_task import export_site_urls_task\nfrom .run_and_stream_save_websites_task import run_and_stream_save_websites_task\n\n__all__ = [\n    'export_site_urls_task',\n    'run_and_stream_save_websites_task',\n]\n"
  },
  {
    "path": "backend/apps/scan/tasks/site_scan/export_site_urls_task.py",
    "content": "\"\"\"\n导出站点URL到文件的Task\n\n支持两种模式：\n1. 传统模式（向后兼容）：使用 target_id 从数据库导出\n2. Provider 模式：使用 TargetProvider 从任意数据源导出\n\n特殊逻辑：\n- 80 端口：只生成 HTTP URL（省略端口号）\n- 443 端口：只生成 HTTPS URL（省略端口号）\n- 其他端口：生成 HTTP 和 HTTPS 两个URL（带端口号）\n\"\"\"\nimport logging\nfrom typing import Optional\nfrom pathlib import Path\nfrom prefect import task\n\nfrom apps.asset.services import HostPortMappingService\nfrom apps.scan.services.target_export_service import create_export_service\nfrom apps.common.services import BlacklistService\nfrom apps.common.utils import BlacklistFilter\nfrom apps.scan.providers import TargetProvider, DatabaseTargetProvider, ProviderContext\n\nlogger = logging.getLogger(__name__)\n\n\ndef _generate_urls_from_port(host: str, port: int) -> list[str]:\n    \"\"\"\n    根据端口生成 URL 列表\n    \n    - 80 端口：只生成 HTTP URL（省略端口号）\n    - 443 端口：只生成 HTTPS URL（省略端口号）\n    - 其他端口：生成 HTTP 和 HTTPS 两个URL（带端口号）\n    \"\"\"\n    if port == 80:\n        return [f\"http://{host}\"]\n    elif port == 443:\n        return [f\"https://{host}\"]\n    else:\n        return [f\"http://{host}:{port}\", f\"https://{host}:{port}\"]\n\n\n@task(name=\"export_site_urls\")\ndef export_site_urls_task(\n    output_file: str,\n    target_id: Optional[int] = None,\n    provider: Optional[TargetProvider] = None,\n    batch_size: int = 1000\n) -> dict:\n    \"\"\"\n    导出目标下的所有站点URL到文件\n    \n    支持两种模式：\n    1. 传统模式（向后兼容）：传入 target_id，从 HostPortMapping 表导出\n    2. Provider 模式：传入 provider，从任意数据源导出\n    \n    传统模式特殊逻辑：\n    - 80 端口：只生成 HTTP URL（省略端口号）\n    - 443 端口：只生成 HTTPS URL（省略端口号）\n    - 其他端口：生成 HTTP 和 HTTPS 两个URL（带端口号）\n    \n    回退逻辑（仅传统模式）：\n    - 如果 HostPortMapping 为空，使用 generate_default_urls() 生成默认 URL\n    \n    Args:\n        output_file: 输出文件路径（绝对路径）\n        target_id: 目标ID（传统模式，向后兼容）\n        provider: TargetProvider 实例（新模式）\n        batch_size: 每次处理的批次大小\n        \n    Returns:\n        dict: {\n            'success': bool,\n            'output_file': str,\n            'total_urls': int,\n            'association_count': int,  # 主机端口关联数量（仅传统模式）\n            'source': str,  # 数据来源: \"host_port\" | \"default\" | \"provider\"\n        }\n        \n    Raises:\n        ValueError: 参数错误\n        IOError: 文件写入失败\n    \"\"\"\n    # 参数验证：至少提供一个\n    if target_id is None and provider is None:\n        raise ValueError(\"必须提供 target_id 或 provider 参数之一\")\n    \n    # 向后兼容：如果没有提供 provider，使用传统模式\n    if provider is None:\n        logger.info(\"使用传统模式 - Target ID: %d, 输出文件: %s\", target_id, output_file)\n        return _export_site_urls_legacy(target_id, output_file, batch_size)\n    \n    # Provider 模式\n    logger.info(\"使用 Provider 模式 - Provider: %s, 输出文件: %s\", type(provider).__name__, output_file)\n    \n    # 确保输出目录存在\n    output_path = Path(output_file)\n    output_path.parent.mkdir(parents=True, exist_ok=True)\n    \n    # 使用 Provider 导出 URL 列表\n    total_urls = 0\n    blacklist_filter = provider.get_blacklist_filter()\n    \n    with open(output_path, 'w', encoding='utf-8', buffering=8192) as f:\n        for url in provider.iter_urls():\n            # 应用黑名单过滤（如果有）\n            if blacklist_filter and not blacklist_filter.is_allowed(url):\n                continue\n            \n            f.write(f\"{url}\\n\")\n            total_urls += 1\n            \n            if total_urls % 1000 == 0:\n                logger.info(\"已导出 %d 个URL...\", total_urls)\n    \n    logger.info(\"✓ URL导出完成 - 总数: %d, 文件: %s\", total_urls, str(output_path))\n    \n    return {\n        'success': True,\n        'output_file': str(output_path),\n        'total_urls': total_urls,\n        'source': 'provider',\n    }\n\n\ndef _export_site_urls_legacy(target_id: int, output_file: str, batch_size: int) -> dict:\n    \"\"\"\n    传统模式：从 HostPortMapping 表导出 URL\n    \n    保持原有逻辑不变，确保向后兼容\n    \"\"\"\n    logger.info(\"开始统计站点URL - Target ID: %d, 输出文件: %s\", target_id, output_file)\n    \n    # 确保输出目录存在\n    output_path = Path(output_file)\n    output_path.parent.mkdir(parents=True, exist_ok=True)\n    \n    # 获取规则并创建过滤器\n    blacklist_filter = BlacklistFilter(BlacklistService().get_rules(target_id))\n    \n    # 直接查询 HostPortMapping 表，按 host 排序\n    service = HostPortMappingService()\n    associations = service.iter_host_port_by_target(\n        target_id=target_id,\n        batch_size=batch_size,\n    )\n    \n    total_urls = 0\n    association_count = 0\n    filtered_count = 0\n    \n    # 流式写入文件（特殊端口逻辑）\n    with open(output_path, 'w', encoding='utf-8', buffering=8192) as f:\n        for assoc in associations:\n            association_count += 1\n            host = assoc['host']\n            port = assoc['port']\n            \n            # 先校验 host，通过了再生成 URL\n            if not blacklist_filter.is_allowed(host):\n                filtered_count += 1\n                continue\n            \n            # 根据端口号生成URL\n            for url in _generate_urls_from_port(host, port):\n                f.write(f\"{url}\\n\")\n                total_urls += 1\n            \n            if association_count % 1000 == 0:\n                logger.info(\"已处理 %d 条关联，生成 %d 个URL...\", association_count, total_urls)\n    \n    if filtered_count > 0:\n        logger.info(\"黑名单过滤: 过滤 %d 条关联\", filtered_count)\n    \n    logger.info(\n        \"✓ 站点URL导出完成 - 关联数: %d, 总URL数: %d, 文件: %s\",\n        association_count, total_urls, str(output_path)\n    )\n    \n    # 判断数据来源\n    source = \"host_port\"\n    \n    # 数据存在但全被过滤，不回退\n    if association_count > 0 and total_urls == 0:\n        logger.info(\"HostPortMapping 有 %d 条数据，但全被黑名单过滤，不回退\", association_count)\n        return {\n            'success': True,\n            'output_file': str(output_path),\n            'total_urls': 0,\n            'association_count': association_count,\n            'source': source,\n        }\n    \n    # 数据源为空，回退到默认 URL 生成\n    if total_urls == 0:\n        logger.info(\"HostPortMapping 为空，使用默认 URL 生成\")\n        export_service = create_export_service(target_id)\n        result = export_service.generate_default_urls(target_id, str(output_path))\n        total_urls = result['total_count']\n        source = \"default\"\n    \n    return {\n        'success': True,\n        'output_file': str(output_path),\n        'total_urls': total_urls,\n        'association_count': association_count,\n        'source': source,\n    }\n"
  },
  {
    "path": "backend/apps/scan/tasks/site_scan/run_and_stream_save_websites_task.py",
    "content": "\"\"\"\n基于 execute_stream 的流式站点扫描任务\n\n主要功能：\n    1. 实时执行站点扫描命令（httpx）\n    2. 流式处理命令输出，实时解析为 HttpxRecord\n    3. 批量保存到数据库，复用现有的字段校验与统计逻辑\n    4. 避免生成大量临时文件，提高效率\n\n数据流向：\n    命令执行 → 流式输出 → 实时解析 → 批量保存 → 数据库\n    \n    输入：扫描命令及参数\n    输出：WebSite 记录\n\n优化策略：\n    - 使用 execute_stream 实时处理输出\n    - 复用现有的 _save_batch_with_retry 逻辑\n    - 流式处理避免内存溢出\n    - 批量操作减少数据库交互\n\"\"\"\n\nimport logging\nimport json\nimport subprocess\nimport time\nfrom pathlib import Path\nfrom prefect import task\nfrom typing import Generator, Optional, Dict, Any, TYPE_CHECKING\nfrom django.db import IntegrityError, OperationalError, DatabaseError\nfrom dataclasses import dataclass\nfrom urllib.parse import urlparse, urlunparse\nfrom psycopg2 import InterfaceError\n\nfrom apps.asset.dtos.snapshot import WebsiteSnapshotDTO\n\nfrom apps.scan.utils import execute_stream\n\n# 类型检查时导入，运行时不导入（避免循环依赖）\nif TYPE_CHECKING:\n    from apps.asset.services.snapshot import WebsiteSnapshotsService\n\nlogger = logging.getLogger(__name__)\n\n\n@dataclass\nclass ServiceSet:\n    \"\"\"\n    Service 集合，用于依赖注入\n    \n    提供所有需要的 Service 实例，便于测试时注入 Mock 对象\n    \"\"\"\n    snapshot: \"WebsiteSnapshotsService\"\n    \n    @classmethod\n    def create_default(cls) -> 'ServiceSet':\n        \"\"\"创建默认的 Service 集合\"\"\"\n        from apps.asset.services.snapshot import WebsiteSnapshotsService\n        return cls(\n            snapshot=WebsiteSnapshotsService()\n        )\n\n\ndef _sanitize_string(value: str) -> str:\n    \"\"\"\n    清理字符串中的 NUL 字符和其他不可打印字符\n    \n    PostgreSQL 不允许字符串字段包含 NUL (0x00) 字符\n    \"\"\"\n    if not value:\n        return value\n    # 移除 NUL 字符\n    return value.replace('\\x00', '')\n\n\ndef normalize_url(url: str) -> str:\n    \"\"\"\n    标准化 URL，移除默认端口号\n    \n    处理规则：\n    - HTTPS 协议的 443 端口 → 移除端口号\n    - HTTP 协议的 80 端口 → 移除端口号\n    - 其他端口 → 保留端口号\n    \n    Args:\n        url: 原始 URL（如 https://www.example.com:443）\n    \n    Returns:\n        str: 标准化后的 URL（如 https://www.example.com）\n    \n    Examples:\n        >>> normalize_url('https://www.example.com:443')\n        'https://www.example.com'\n        >>> normalize_url('http://www.example.com:80')\n        'http://www.example.com'\n        >>> normalize_url('https://www.example.com:8443')\n        'https://www.example.com:8443'\n    \"\"\"\n    try:\n        parsed = urlparse(url)\n        \n        # 检查是否需要移除端口号\n        should_remove_port = (\n            (parsed.scheme == 'https' and parsed.port == 443) or\n            (parsed.scheme == 'http' and parsed.port == 80)\n        )\n        \n        if should_remove_port:\n            # 重建 URL，不包含端口号\n            # netloc 可能是 'domain:port' 格式，需要只保留 hostname\n            netloc = parsed.hostname or parsed.netloc.split(':')[0]\n            normalized = urlunparse((\n                parsed.scheme,\n                netloc,\n                parsed.path,\n                parsed.params,\n                parsed.query,\n                parsed.fragment\n            ))\n            return normalized\n        \n        # 不需要修改，返回原 URL\n        return url\n        \n    except Exception as e:\n        # 解析失败，返回原 URL\n        logger.debug(\"URL 标准化失败: %s，使用原始 URL: %s\", e, url)\n        return url\n\n\ndef _extract_hostname(url: str) -> str:\n    \"\"\"\n    从 URL 提取主机名\n    \n    Args:\n        url: URL 字符串\n    \n    Returns:\n        str: 提取的主机名（小写）\n    \"\"\"\n    try:\n        if url:\n            parsed = urlparse(url)\n            if parsed.hostname:\n                return parsed.hostname\n            # 降级方案：手动提取\n            return url.replace('http://', '').replace('https://', '').split('/')[0].split(':')[0]\n        return ''\n    except Exception as e:\n        logger.debug(\"提取主机名失败: %s\", e)\n        return ''\n\n\nclass HttpxRecord:\n    \"\"\"httpx 扫描记录数据类\"\"\"\n    \n    def __init__(self, data: Dict[str, Any]):\n        self.url = _sanitize_string(data.get('url', ''))\n        self.input = _sanitize_string(data.get('input', ''))\n        self.title = _sanitize_string(data.get('title', ''))\n        self.status_code = data.get('status_code')  # int，不需要清理\n        self.content_length = data.get('content_length')  # int，不需要清理\n        self.content_type = _sanitize_string(data.get('content_type', ''))\n        self.location = _sanitize_string(data.get('location', ''))\n        self.webserver = _sanitize_string(data.get('webserver', ''))\n        self.response_body = _sanitize_string(data.get('body', ''))\n        self.tech = [_sanitize_string(t) for t in data.get('tech', []) if isinstance(t, str)]  # 列表中的字符串也需要清理\n        self.vhost = data.get('vhost')  # bool，不需要清理\n        self.failed = data.get('failed', False)  # bool，不需要清理\n        self.response_headers = _sanitize_string(data.get('raw_header', ''))\n        \n        # 从 URL 中提取主机名（优先使用 httpx 返回的 host，否则自动提取）\n        httpx_host = _sanitize_string(data.get('host', ''))\n        self.host = httpx_host if httpx_host else _extract_hostname(self.url)\n\n\ndef _save_batch_with_retry(\n    batch: list,\n    scan_id: int,\n    target_id: int,\n    batch_num: int,\n    services: ServiceSet,\n    max_retries: int = 3\n) -> dict:\n    \"\"\"\n    保存一个批次的数据（带重试机制）\n    \n    Args:\n        batch: 要保存的记录批次\n        scan_id: 扫描任务ID\n        target_id: 目标ID\n        batch_num: 批次编号\n        services: Service 集合（必须，依赖注入）\n        max_retries: 最大重试次数\n    \n    Returns:\n        dict: {\n            'success': bool,\n            'created_websites': int,\n            'skipped_failed': int\n        }\n    \"\"\"\n    for attempt in range(max_retries):\n        try:\n            stats = _save_batch(batch, scan_id, target_id, batch_num, services)\n            return {\n                'success': True,\n                'created_websites': stats.get('created_websites', 0),\n                'skipped_failed': stats.get('skipped_failed', 0)\n            }\n        \n        except IntegrityError as e:\n            # 数据完整性错误，不应重试（IntegrityError 是 DatabaseError 的子类，需先处理）\n            logger.error(\"批次 %d 数据完整性错误，跳过: %s\", batch_num, str(e)[:100])\n            return {\n                'success': False,\n                'created_websites': 0,\n                'skipped_failed': 0\n            }\n        \n        except (OperationalError, DatabaseError, InterfaceError) as e:\n            # 数据库级错误（连接中断、表结构不匹配等）：按指数退避重试，最终失败时抛出异常让 Flow 失败\n            if attempt < max_retries - 1:\n                wait_time = 2 ** attempt\n                logger.warning(\n                    \"批次 %d 保存失败（第 %d 次尝试），%d秒后重试: %s\",\n                    batch_num, attempt + 1, wait_time, str(e)[:100]\n                )\n                time.sleep(wait_time)\n            else:\n                logger.error(\n                    \"批次 %d 保存失败（已重试 %d 次），将终止任务: %s\",\n                    batch_num,\n                    max_retries,\n                    e,\n                    exc_info=True,\n                )\n                # 让上层 Task 感知失败，从而标记整个扫描为失败\n                raise\n\n        except Exception as e:\n            # 其他未知异常也不再吞掉，直接抛出以便 Flow 标记为失败\n            logger.error(\"批次 %d 未知错误: %s\", batch_num, e, exc_info=True)\n            raise\n\n    # 理论上不会走到这里，保留兜底返回值以满足类型约束\n    return {\n        'success': False,\n        'created_websites': 0,\n        'skipped_failed': 0\n    }\n\n\ndef _save_batch(\n    batch: list, \n    scan_id: int, \n    target_id: int, \n    batch_num: int, \n    services: ServiceSet\n) -> dict:\n    \"\"\"\n    保存一个批次的数据到数据库（使用快照 Service）\n    \n    数据关系链：\n        Subdomain (已存在) → WebsiteSnapshot (待创建) → WebSite (自动同步)\n    \n    处理流程：\n        1. 查询 Subdomain：根据域名批量查询（LRU缓存）\n        2. 构建 WebsiteSnapshotDTO：包含 scan_id 和 target_id\n        3. 调用快照 Service：save_and_sync() 自动保存快照并同步到资产表\n    \n    Args:\n        batch: 数据批次，list of HttpxRecord\n        scan_id: 扫描任务 ID\n        target_id: 目标 ID\n        batch_num: 批次编号（用于日志）\n        services: Service 集合（依赖注入）\n    \n    Returns:\n        dict: 包含创建和跳过记录的统计信息\n    \n    Raises:\n        TypeError: batch 参数类型错误\n        IntegrityError: 数据完整性错误\n        OperationalError: 数据库操作错误\n        DatabaseError: 其他数据库错误\n    \n    Note:\n        此函数不包含重试逻辑，由外层 _save_batch_with_retry 负责重试\n    \"\"\"\n    # 参数验证\n    if not isinstance(batch, list):\n        raise TypeError(f\"batch 必须是 list 类型，实际: {type(batch).__name__}\")\n    \n    if not batch:\n        logger.debug(\"批次 %d 为空，跳过处理\", batch_num)\n        return {\n            'created_websites': 0,\n            'skipped_failed': 0\n        }\n    \n    # 统计变量\n    skipped_failed = 0\n    \n    # ========== Step 1: 准备 WebsiteSnapshot 数据（内存操作，无需事务）==========\n    snapshot_items = []\n    \n    for record in batch:\n        # 跳过失败的请求\n        if record.failed:\n            skipped_failed += 1\n            continue\n        \n        try:\n            # 使用 input 字段（原始扫描的 URL）而不是 url 字段（重定向后的 URL）\n            # 原因：避免多个不同的输入 URL 重定向到同一个 URL 时产生唯一约束冲突\n            # 例如：http://example.com 和 https://example.com 都重定向到 https://example.com\n            # 如果使用 record.url，两条记录会有相同的 url，导致数据库冲突\n            # 如果使用 record.input，两条记录保留原始输入，不会冲突\n            normalized_url = normalize_url(record.input) if record.input else normalize_url(record.url)\n            \n            # 提取 host 字段（域名或IP地址）\n            host = record.host if record.host else ''\n            \n            # 创建 WebsiteSnapshot DTO\n            snapshot_dto = WebsiteSnapshotDTO(\n                scan_id=scan_id,\n                target_id=target_id,  # 主关联字段\n                url=normalized_url,  # 保存原始输入 URL（归一化后）\n                host=host,  # 主机名（域名或IP地址）\n                location=record.location if record.location else '',\n                title=record.title if record.title else '',\n                webserver=record.webserver if record.webserver else '',\n                response_body=record.response_body if record.response_body else '',\n                content_type=record.content_type if record.content_type else '',\n                tech=record.tech if isinstance(record.tech, list) else [],\n                status_code=record.status_code,\n                content_length=record.content_length,\n                vhost=record.vhost,\n                response_headers=record.response_headers if record.response_headers else '',\n            )\n            \n            snapshot_items.append(snapshot_dto)\n                    \n        except Exception as e:\n            logger.error(\"处理记录失败: %s，错误: %s\", record.url, e)\n            continue\n    \n    # ========== Step 2: 保存快照并同步到资产表（通过快照 Service）==========\n    if snapshot_items:\n        services.snapshot.save_and_sync(snapshot_items)\n    \n    return {\n        'created_websites': len(snapshot_items),\n        'skipped_failed': skipped_failed\n    }\n\ndef _parse_and_validate_line(line: str) -> Optional[HttpxRecord]:\n    \"\"\"\n    解析并验证单行 JSON 数据\n    \n    Args:\n        line: 单行输出数据\n    \n    Returns:\n        Optional[HttpxRecord]: 有效的 httpx 扫描记录，或 None 如果验证失败\n    \n    验证步骤：\n        1. 清理 NUL 字符\n        2. 解析 JSON 格式\n        3. 验证数据类型为字典\n        4. 创建 HttpxRecord 对象\n        5. 验证必要字段（url）\n    \"\"\"\n    try:\n        # 步骤 1: 清理 NUL 字符后再解析 JSON\n        line = _sanitize_string(line)\n        \n        # 步骤 2: 解析 JSON\n        try:\n            line_data = json.loads(line, strict=False)\n        except json.JSONDecodeError:\n            return None\n        \n        # 步骤 3: 验证数据类型\n        if not isinstance(line_data, dict):\n            logger.info(\"跳过非字典数据\")\n            return None\n        \n        # 步骤 4: 创建记录\n        record = HttpxRecord(line_data)\n        \n        # 步骤 5: 验证必要字段\n        if not record.url:\n            logger.info(\"URL 为空，跳过 - 数据: %s\", str(line_data)[:200])\n            return None\n        \n        # 返回有效记录\n        return record\n    \n    except Exception:\n        logger.info(\"跳过无法解析的行: %s\", line[:100] if line else 'empty')\n        return None\n\n\ndef _parse_httpx_stream_output(\n    cmd: str,\n    tool_name: str,\n    cwd: Optional[str] = None,\n    shell: bool = False,\n    timeout: Optional[int] = None,\n    log_file: Optional[str] = None\n) -> Generator[HttpxRecord, None, None]:\n    \"\"\"\n    流式解析 httpx 站点扫描命令输出\n    \n    基于 execute_stream 实时处理 httpx 命令的 stdout，将每行 JSON 输出\n    转换为 HttpxRecord 格式，沿用现有字段校验逻辑\n    \n    Args:\n        cmd: httpx 站点扫描命令\n        cwd: 工作目录\n        shell: 是否使用 shell 执行\n        timeout: 命令执行超时时间（秒），None 表示不设置超时\n    \n    Yields:\n        HttpxRecord: 每次 yield 一条解析后的站点记录\n    \"\"\"\n    logger.info(\"开始流式解析 httpx 站点扫描命令输出 - 命令: %s\", cmd)\n    \n    total_lines = 0\n    error_lines = 0\n    valid_records = 0\n    \n    try:\n        # 使用 execute_stream 获取实时输出流（带工具名、超时控制和日志文件）\n        for line in execute_stream(cmd=cmd, tool_name=tool_name, cwd=cwd, shell=shell, timeout=timeout, log_file=log_file):\n            total_lines += 1\n            \n            # 解析并验证单行数据\n            record = _parse_and_validate_line(line)\n            if record is None:\n                error_lines += 1\n                continue\n            \n            valid_records += 1\n            # yield 一条有效记录\n            yield record\n            \n            # 每处理 5 条记录输出一次进度\n            if valid_records % 5 == 0:\n                logger.info(\"已解析 %d 条有效记录...\", valid_records)\n                \n    except subprocess.TimeoutExpired as e:\n        # 超时异常：简洁输出，不显示堆栈\n        error_msg = f\"流式解析命令输出超时 - 命令执行超过 {timeout} 秒\"\n        logger.warning(error_msg)  # 超时是可预期的\n        raise RuntimeError(error_msg) from e\n    except Exception as e:\n        # 其他异常：输出详细堆栈以便调试\n        logger.error(\"流式解析命令输出失败: %s\", e, exc_info=True)\n        raise\n    \n    logger.info(\n        \"流式解析完成 - 总行数: %d, 有效记录: %d, 错误行数: %d\", \n        total_lines, valid_records, error_lines\n    )\n\n\ndef _validate_task_parameters(cmd: str, target_id: int, scan_id: int, cwd: Optional[str]) -> None:\n    \"\"\"\n    验证任务参数的有效性\n    \n    Args:\n        cmd: 扫描命令\n        target_id: 目标ID\n        scan_id: 扫描ID\n        cwd: 工作目录\n        \n    Raises:\n        ValueError: 参数验证失败\n    \"\"\"\n    if not cmd or not cmd.strip():\n        raise ValueError(\"扫描命令不能为空\")\n    \n    if target_id is None:\n        raise ValueError(\"target_id 不能为 None，必须指定目标ID\")\n        \n    if scan_id is None:\n        raise ValueError(\"scan_id 不能为 None，必须指定扫描ID\")\n    \n    # 验证工作目录（如果指定）\n    if cwd and not Path(cwd).exists():\n        raise ValueError(f\"工作目录不存在: {cwd}\")\n\n\ndef _accumulate_batch_stats(total_stats: dict, batch_result: dict) -> None:\n    \"\"\"\n    累加批次统计信息\n    \n    Args:\n        total_stats: 总统计信息字典\n        batch_result: 批次结果字典\n    \"\"\"\n    total_stats['created_websites'] += batch_result.get('created_websites', 0)\n    total_stats['skipped_failed'] += batch_result.get('skipped_failed', 0)\n\n\ndef _process_batch(\n    batch: list,\n    scan_id: int,\n    target_id: int,\n    batch_num: int,\n    total_stats: dict,\n    failed_batches: list,\n    services: ServiceSet\n) -> None:\n    \"\"\"\n    处理单个批次\n    \n    Args:\n        batch: 数据批次\n        scan_id: 扫描ID\n        target_id: 目标ID\n        batch_num: 批次编号\n        total_stats: 总统计信息\n        failed_batches: 失败批次列表\n        services: Service 集合（必须，依赖注入）\n    \"\"\"\n    result = _save_batch_with_retry(\n        batch, scan_id, target_id, batch_num, services\n    )\n    \n    # 累计统计信息（失败时可能有部分数据已保存）\n    _accumulate_batch_stats(total_stats, result)\n    \n    if not result['success']:\n        failed_batches.append(batch_num)\n        logger.warning(\n            \"批次 %d 保存失败，但已累计统计信息：创建站点=%d\",\n            batch_num, result.get('created_websites', 0)\n        )\n\n\ndef _process_records_in_batches(\n    data_generator,\n    scan_id: int,\n    target_id: int,\n    batch_size: int,\n    services: ServiceSet\n) -> dict:\n    \"\"\"\n    流式处理记录并分批保存\n    \n    Args:\n        data_generator: 数据生成器\n        scan_id: 扫描ID\n        target_id: 目标ID\n        batch_size: 批次大小\n        services: Service 集合（必须，依赖注入）\n        \n    Returns:\n        dict: 处理统计信息\n        \n    Raises:\n        RuntimeError: 存在失败批次时抛出\n    \"\"\"\n    total_records = 0\n    batch_num = 0\n    failed_batches = []\n    batch = []\n    \n    # 统计信息\n    total_stats = {\n        'created_websites': 0,\n        'skipped_failed': 0\n    }\n    \n    # 流式读取生成器并分批保存\n    for record in data_generator:\n        batch.append(record)\n        total_records += 1\n        \n        # 达到批次大小，执行保存\n        if len(batch) >= batch_size:\n            batch_num += 1\n            _process_batch(batch, scan_id, target_id, batch_num, total_stats, failed_batches, services)\n            batch = []  # 清空批次\n            \n            # 每 2 个批次输出进度\n            if batch_num % 2 == 0:\n                logger.info(\"进度: 已处理 %d 批次，%d 条记录\", batch_num, total_records)\n    \n    # 保存最后一批\n    if batch:\n        batch_num += 1\n        _process_batch(batch, scan_id, target_id, batch_num, total_stats, failed_batches, services)\n    \n    # 检查失败批次\n    if failed_batches:\n        error_msg = (\n            f\"流式保存站点扫描结果时出现失败批次，处理记录: {total_records}，\"\n            f\"失败批次: {failed_batches}\"\n        )\n        logger.warning(error_msg)  # 超时是可预期的\n        raise RuntimeError(error_msg)\n    \n    return {\n        'processed_records': total_records,\n        'batch_count': batch_num,\n        **total_stats\n    }\n\n\ndef _build_final_result(stats: dict) -> dict:\n    \"\"\"\n    构建最终结果并输出日志\n    \n    Args:\n        stats: 处理统计信息\n        \n    Returns:\n        dict: 最终结果\n    \"\"\"\n    logger.info(\n        \"✓ 流式保存完成 - 处理记录: %d（%d 批次），创建站点: %d，跳过（失败）: %d\",\n        stats['processed_records'], stats['batch_count'], stats['created_websites'],\n        stats['skipped_failed']\n    )\n    \n    # 如果没有创建任何记录，给出明确提示\n    if stats['created_websites'] == 0:\n        logger.warning(\n            \"⚠️  没有创建任何站点记录！可能原因：1) 域名不在数据库中 2) 命令输出格式问题 3) 重复数据被忽略 4) 所有请求都失败\"\n        )\n    \n    return {\n        'processed_records': stats['processed_records'],\n        'created_websites': stats['created_websites'],\n        'skipped_failed': stats['skipped_failed']\n    }\n\n\ndef _cleanup_resources(data_generator) -> None:\n    \"\"\"\n    清理任务资源\n    \n    Args:\n        data_generator: 数据生成器\n    \"\"\"\n    # 注：LRUCache 是局部变量，函数结束时会自动释放，无需手动 clear()\n    \n    # 确保生成器被正确关闭\n    if data_generator is not None:\n        try:\n            data_generator.close()\n            logger.debug(\"已关闭数据生成器\")\n        except Exception as gen_close_error:\n            logger.error(\"关闭生成器时出错: %s\", gen_close_error)\n\n\n@task(name='run_and_stream_save_websites', retries=0)\ndef run_and_stream_save_websites_task(\n    cmd: str,\n    tool_name: str,\n    scan_id: int,\n    target_id: int,\n    cwd: Optional[str] = None,\n    shell: bool = False,\n    batch_size: int = 10,\n    timeout: Optional[int] = None,\n    log_file: Optional[str] = None\n) -> dict:\n    \"\"\"\n    执行 httpx 站点扫描命令并流式保存结果到数据库\n    \n    该任务将：\n    1. 验证输入参数\n    2. 初始化资源（缓存、生成器）\n    3. 流式处理记录并分批保存\n    4. 构建并返回结果统计\n    \n    Args:\n        cmd: httpx 站点扫描命令\n        scan_id: 扫描任务 ID\n        target_id: 目标 ID\n        cwd: 工作目录（可选）\n        shell: 是否使用 shell 执行（默认 False）\n        batch_size: 批量保存大小（默认1000）\n        timeout: 命令执行超时时间（秒），None 表示不设置超时\n    \n    Returns:\n        dict: {\n            'processed_records': int,  # 处理的记录总数\n            'created_websites': int,   # 创建的站点记录数\n            'skipped_failed': int,     # 因请求失败跳过的记录数\n        }\n    \n    Raises:\n        ValueError: 参数验证失败\n        RuntimeError: 命令执行或数据库操作失败\n        subprocess.TimeoutExpired: 命令执行超时\n    \n    Performance:\n        - 流式处理，实时解析命令输出\n        - 内存占用恒定（只存储一个 batch）\n        - 复用现有的批次保存和重试逻辑\n        - 使用事务确保数据一致性\n    \"\"\"\n    logger.info(\n        \"开始执行流式站点扫描任务 - target_id=%s, 超时=%s秒, 命令: %s\", \n        target_id, timeout if timeout else '无限制', cmd\n    )\n    \n    data_generator = None\n    \n    try:\n        # 1. 验证参数\n        _validate_task_parameters(cmd, target_id, scan_id, cwd)\n        \n        # 2. 初始化资源\n        data_generator = _parse_httpx_stream_output(cmd, tool_name, cwd, shell, timeout, log_file)\n        services = ServiceSet.create_default()\n        \n        # 3. 流式处理记录并分批保存\n        stats = _process_records_in_batches(\n            data_generator, scan_id, target_id, batch_size, services\n        )\n        \n        # 4. 构建最终结果\n        return _build_final_result(stats)\n        \n    except subprocess.TimeoutExpired:\n        # 超时异常直接向上传播，保留异常类型\n        logger.warning(\n            \"⚠️ 站点扫描任务超时 - target_id=%s, 超时=%s秒\",\n            target_id, timeout\n        )\n        raise  # 直接重新抛出，不包装\n    \n    except Exception as e:\n        error_msg = f\"流式执行站点扫描任务失败: {e}\"\n        logger.error(error_msg, exc_info=True)\n        raise RuntimeError(error_msg) from e\n    \n    finally:\n        # 5. 清理资源\n        _cleanup_resources(data_generator)\n"
  },
  {
    "path": "backend/apps/scan/tasks/subdomain_discovery/__init__.py",
    "content": "\"\"\"\n子域名发现任务模块\n\n包含子域名扫描流程的 Prefect Tasks：\n- run_subdomain_discovery_task: 运行单个子域名发现工具（可并行）\n- merge_and_validate_task: 合并、解析并验证域名（一体化高性能）\n- save_domains_task: 保存到数据库\n\n架构优势：\n- 每个 task 单一职责，可独立重试\n- 支持并行执行扫描工具\n- 流式处理 + 正则验证，性能提升 50-100 倍\n- Flow 层编排，逻辑清晰\n\"\"\"\n\nfrom .run_subdomain_discovery_task import run_subdomain_discovery_task\nfrom .merge_and_validate_task import merge_and_validate_task\nfrom .save_domains_task import save_domains_task\n\n__all__ = [\n    'run_subdomain_discovery_task',\n    'merge_and_validate_task',\n    'save_domains_task',\n]\n"
  },
  {
    "path": "backend/apps/scan/tasks/subdomain_discovery/merge_and_validate_task.py",
    "content": "\"\"\"\n合并并去重域名任务\n\n合并 merge + parse + validate 三个步骤,优化性能:\n- 单命令实现(LC_ALL=C sort -u)\n- C语言级性能,单进程高效\n- 无临时文件,零额外开销\n- 支持千万级数据处理\n\n性能优势:\n- LC_ALL=C 字节序比较(比locale快20-30%)\n- 单进程直接处理多文件(无管道开销)\n- 内存占用恒定(~50MB for 50万域名)\n- 50万域名处理时间:~0.5秒(相比 Python 提升 ~67%)\n\nNote:\n    - 工具(amass/subfinder)输出已标准化(小写,无空行)\n    - sort -u 自动处理去重和排序\n    - 无需额外过滤,性能最优\n\"\"\"\n\nimport logging\nimport subprocess\nimport uuid\nfrom datetime import datetime\nfrom pathlib import Path\nfrom typing import List\n\nfrom prefect import task\n\nlogger = logging.getLogger(__name__)\n\n\ndef _count_file_lines(file_path: str) -> int:\n    \"\"\"使用 wc -l 统计文件行数，失败时返回 0\"\"\"\n    try:\n        result = subprocess.run(\n            [\"wc\", \"-l\", file_path],\n            check=True,\n            capture_output=True,\n            text=True,\n        )\n        return int(result.stdout.strip().split()[0])\n    except (subprocess.CalledProcessError, ValueError, IndexError):\n        return 0\n\n\ndef _calculate_timeout(total_lines: int) -> int:\n    \"\"\"根据总行数计算超时时间（每行约 0.1 秒，最少 600 秒）\"\"\"\n    if total_lines <= 0:\n        return 3600\n    return max(600, int(total_lines * 0.1))\n\n\ndef _validate_input_files(result_files: List[str]) -> List[str]:\n    \"\"\"验证输入文件存在性，返回有效文件列表\"\"\"\n    valid_files = []\n    for file_path_str in result_files:\n        file_path = Path(file_path_str)\n        if file_path.exists():\n            valid_files.append(str(file_path))\n        else:\n            logger.warning(\"结果文件不存在: %s\", file_path)\n    return valid_files\n\n\n@task(name='merge_and_deduplicate', retries=1, log_prints=True)\ndef merge_and_validate_task(result_files: List[str], result_dir: str) -> str:\n    \"\"\"\n    合并扫描结果并去重（高性能流式处理）\n\n    使用 LC_ALL=C sort -u 直接处理多文件，排序去重一步完成。\n\n    Args:\n        result_files: 结果文件路径列表\n        result_dir: 结果目录\n\n    Returns:\n        去重后的域名文件路径\n\n    Raises:\n        RuntimeError: 处理失败\n    \"\"\"\n    logger.info(\"开始合并并去重 %d 个结果文件\", len(result_files))\n\n    valid_files = _validate_input_files(result_files)\n    if not valid_files:\n        raise RuntimeError(\"所有结果文件都不存在\")\n\n    # 生成输出文件路径\n    timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')\n    short_uuid = uuid.uuid4().hex[:4]\n    merged_file = Path(result_dir) / f\"merged_{timestamp}_{short_uuid}.txt\"\n\n    # 计算超时时间\n    total_lines = sum(_count_file_lines(f) for f in valid_files)\n    timeout = _calculate_timeout(total_lines)\n    logger.info(\"合并去重: 输入总行数=%d, timeout=%d秒\", total_lines, timeout)\n\n    # 执行合并去重命令\n    cmd = f\"LC_ALL=C sort -u {' '.join(valid_files)} -o {merged_file}\"\n    logger.debug(\"执行命令: %s\", cmd)\n\n    try:\n        subprocess.run(cmd, shell=True, check=True, timeout=timeout)\n    except subprocess.TimeoutExpired as exc:\n        raise RuntimeError(\"合并去重超时，请检查数据量或系统资源\") from exc\n    except subprocess.CalledProcessError as exc:\n        raise RuntimeError(f\"系统命令执行失败: {exc.stderr or exc}\") from exc\n\n    # 验证输出文件\n    if not merged_file.exists():\n        raise RuntimeError(\"合并文件未被创建\")\n\n    unique_count = _count_file_lines(str(merged_file))\n    if unique_count == 0:\n        # 降级为 Python 统计\n        with open(merged_file, 'r', encoding='utf-8') as f:\n            unique_count = sum(1 for _ in f)\n\n    if unique_count == 0:\n        raise RuntimeError(\"未找到任何有效域名\")\n\n    file_size_kb = merged_file.stat().st_size / 1024\n    logger.info(\"✓ 合并去重完成 - 去重后: %d 个域名, 文件大小: %.2f KB\", unique_count, file_size_kb)\n\n    return str(merged_file)\n"
  },
  {
    "path": "backend/apps/scan/tasks/subdomain_discovery/run_subdomain_discovery_task.py",
    "content": "\"\"\"\n运行扫描工具任务\n\n负责运行单个子域名扫描工具（subfinder、sublist3r 等）\n\"\"\"\n\nimport logging\nfrom pathlib import Path\nfrom prefect import task\nfrom apps.scan.utils import execute_and_wait\n\nlogger = logging.getLogger(__name__)\n\n\n@task(\n    name='run_subdomain_discovery',\n    retries=0,  # 显式禁用重试\n    log_prints=True\n)\ndef run_subdomain_discovery_task(\n    tool: str,\n    command: str,\n    timeout: int,\n    output_file: str\n) -> str:\n    \"\"\"\n    运行单个子域名发现工具\n    \n    Args:\n        tool: 子域名发现工具名称（用于日志）\n        command: 完整的扫描命令（已由 Flow 层使用命令构建器生成）\n        timeout: 命令执行超时时间（秒）\n        output_file: 输出文件完整路径（由 Flow 层生成，包含目录和文件名）\n    \n    Returns:\n        str: 结果文件路径\n    \n    Raises:\n        ValueError: 参数验证失败\n        RuntimeError: 扫描执行失败\n    \n    Note:\n        - 扫描结果通过工具的 -o 参数写入结果文件\n        - 使用通用的 run_scan_command 函数执行扫描\n        - 日志文件统一随 workspace 管理，默认保留 7 天自动清理\n        - 文件命名格式：{tool}_{timestamp}_{uuid4}.txt\n        - 示例：subfinder_20250116_142200_a3f2.txt, subfinder_20250116_142200_a3f2.log\n    \"\"\"\n    # 准备路径\n    output_file_path = Path(output_file)\n    log_file = str(output_file_path.with_suffix('.log'))\n    \n    # 使用通用的扫描命令执行器\n    try:\n        result = execute_and_wait(\n            tool_name=tool,\n            command=command,\n            timeout=timeout,\n            log_file=log_file  # 明确指定日志文件路径\n        )\n\n        # 验证输出文件是否生成\n        if not output_file_path.exists():\n            logger.warning(\n                \"扫描工具 %s 未生成结果文件: %s (returncode: %d)\",\n                tool, str(output_file_path), result['returncode']  # 强制转换为字符串\n            )\n            return \"\"\n        \n        # 检查文件大小\n        file_size = output_file_path.stat().st_size\n        if file_size == 0:\n            logger.warning(\"扫描工具 %s 生成的结果文件为空: %s\", tool, output_file_path)\n            return \"\"  # 空文件视为无效结果，与未生成文件的行为一致\n        \n        logger.info(\n            \"✓ 扫描完成: %s - 结果文件: %s (%.2f KB)\",\n            tool, str(output_file_path), file_size / 1024  # 使用绝对路径\n        )\n        \n        # 返回结果文件路径\n        return str(output_file_path)\n        \n    except RuntimeError:\n        # 直接向上抛出（已在 execute_and_wait 中记录日志）\n        raise\n    except Exception as e:\n        error_msg = f\"扫描工具 {tool} 执行异常: {e}\"\n        logger.error(error_msg, exc_info=True)\n        raise\n"
  },
  {
    "path": "backend/apps/scan/tasks/subdomain_discovery/save_domains_task.py",
    "content": "\"\"\"\n保存域名任务\n\n负责将验证后的域名批量保存到数据库\n\"\"\"\n\nimport logging\nimport time\nfrom pathlib import Path\nfrom prefect import task\nfrom typing import List\nfrom dataclasses import dataclass\nfrom django.db import IntegrityError, OperationalError, DatabaseError\n\nfrom apps.asset.services.snapshot import SubdomainSnapshotsService\nfrom apps.common.validators import validate_domain\n\nlogger = logging.getLogger(__name__)\n\n\n@dataclass\nclass ServiceSet:\n    \"\"\"\n    Service 集合，用于依赖注入\n    \n    封装所有需要的 Service 实例，便于测试和管理。\n    \"\"\"\n    snapshot: SubdomainSnapshotsService\n    \n    @classmethod\n    def create_default(cls) -> 'ServiceSet':\n        \"\"\"创建默认的 Service 集合\"\"\"\n        return cls(\n            snapshot=SubdomainSnapshotsService()\n        )\n\n\n@task(\n    name='save_domains',\n    retries=0,\n    log_prints=True\n)\ndef save_domains_task(\n    domains_file: str,\n    scan_id: int,\n    target_id: int = None,\n    batch_size: int = 1000\n) -> dict:\n    \"\"\"\n    流式批量保存域名到数据库\n    \n    Args:\n        domains_file: 域名文件路径（流式读取）\n        scan_id: 扫描任务 ID\n        target_id: 目标 ID（可选）\n        batch_size: 批量保存大小\n    \n    Returns:\n        dict: {\n            'processed_records': int  # 处理的域名总数（不是实际创建数）\n        }\n    \n    Raises:\n        ValueError: 参数验证失败（target_id为None或路径不是文件）\n        FileNotFoundError: 域名文件不存在\n        RuntimeError: 数据库操作失败\n        IOError: 文件读取失败\n    \n    Performance:\n        - 流式读取文件，边读边保存\n        - 内存占用恒定（只存储一个 batch）\n        - 默认batch_size=1000(平衡性能和内存)\n        - 批次失败自动重试\n    \n    Note:\n        由于使用 ignore_conflicts，无法返回实际创建的数量\n    \"\"\"\n    logger.info(\"开始从文件流式保存域名到数据库: %s\", domains_file)\n    \n    # 参数验证\n    if target_id is None:\n        raise ValueError(\"target_id 不能为 None，必须指定目标ID\")\n    \n    # 文件验证\n    file_path = Path(domains_file)\n    if not file_path.exists():\n        raise FileNotFoundError(f\"域名文件不存在: {domains_file}\")\n    if not file_path.is_file():\n        raise ValueError(f\"路径不是文件: {domains_file}\")\n    \n    batch_num = 0\n    failed_batches = []  # 记录失败的批次\n    total_domains = 0  # 总域名数\n    \n    # 初始化 Service 集合（依赖注入）\n    services = ServiceSet.create_default()\n    \n    try:\n        # 流式读取并分批保存\n        batch = []\n        \n        with open(domains_file, 'r', encoding='utf-8') as f:\n            for line in f:\n                domain = line.strip()\n                \n                # 验证域名格式（包含空行检查）\n                try:\n                    validate_domain(domain)\n                except ValueError as e:\n                    logger.warning(\"跳过无效域名: %s - %s\", domain, e)\n                    continue\n                \n                # 只有通过验证的域名才添加到批次和计数\n                # 注意：不在此处过滤黑名单，最大化资产发现\n                batch.append(domain)\n                total_domains += 1\n                \n                # 达到批次大小，执行保存\n                if len(batch) >= batch_size:\n                    batch_num += 1\n                    result = _save_batch_with_retry(batch, scan_id, target_id, batch_num, services)\n                    if not result['success']:\n                        failed_batches.append(batch_num)\n                        logger.warning(\"批次 %d 保存失败，已记录\", batch_num)\n                    \n                    batch = []  # 清空批次\n                    \n                    # 每20个批次输出进度(减少日志开销)\n                    if batch_num % 20 == 0:\n                        logger.info(\"进度: 已处理 %d 批次，%d 个域名\", batch_num, total_domains)\n            \n            # 保存最后一批（可能不足 batch_size）\n            if batch:\n                batch_num += 1\n                result = _save_batch_with_retry(batch, scan_id, target_id, batch_num, services)\n                if not result['success']:\n                    failed_batches.append(batch_num)\n        \n        # 输出最终统计\n        if failed_batches:\n            error_msg = (\n                f\"保存域名时出现失败批次，处理域名: {total_domains}，\"\n                f\"失败批次: {failed_batches}\"\n            )\n            logger.error(error_msg)\n            raise RuntimeError(error_msg)\n        \n        logger.info(\"✓ 保存完成 - 处理域名: %d（%d 批次）\", total_domains, batch_num)\n        \n        return {\n            'processed_records': total_domains\n        }\n        \n    except (IntegrityError, OperationalError, DatabaseError) as e:\n        error_msg = f\"数据库操作失败: {e}\"\n        logger.error(error_msg)\n        raise RuntimeError(error_msg) from e\n    \n    except IOError as e:\n        error_msg = f\"文件读取失败: {e}\"\n        logger.error(error_msg)\n        raise RuntimeError(error_msg) from e\n    \n    except Exception as e:\n        error_msg = f\"保存域名失败: {e}\"\n        logger.error(error_msg, exc_info=True)\n        raise\n\n\ndef _save_batch_with_retry(\n    batch: List[str], \n    scan_id: int, \n    target_id: int, \n    batch_num: int, \n    services: ServiceSet,\n    max_retries: int = 3\n) -> dict:\n    \"\"\"\n    保存一个批次的域名（带重试机制）\n    \n    Args:\n        batch: 域名批次\n        scan_id: 扫描ID\n        target_id: 目标ID\n        batch_num: 批次编号\n        services: Service 集合（依赖注入）\n        max_retries: 最大重试次数\n    \n    Returns:\n        dict: {'success': bool}\n    \n    Strategy:\n        使用 bulk_create + ignore_conflicts\n        - 新域名：插入 (INSERT)\n        - 重复域名：忽略（不更新，因为没有探测数据）\n    \"\"\"\n    # 调试日志：记录传入的参数\n    logger.info(f\"[调试] _save_batch_with_retry 接收的参数: scan_id={scan_id}, target_id={target_id}, batch_size={len(batch)}\")\n    \n    # 使用快照 DTO（包含完整的业务上下文）\n    from apps.asset.dtos import SubdomainSnapshotDTO\n    items = [\n        SubdomainSnapshotDTO(\n            name=domain,\n            scan_id=scan_id,\n            target_id=target_id  # 包含 target_id\n        )\n        for domain in batch\n    ]\n    \n    # 调试日志：记录第一个DTO的内容\n    if items:\n        first_item = items[0]\n        logger.info(f\"[调试] 第一个 SubdomainSnapshotDTO: name={first_item.name}, scan_id={first_item.scan_id}, target_id={first_item.target_id}\")\n    \n    for attempt in range(max_retries):\n        try:\n            # DTO 已包含 target_id，无需额外传参\n            services.snapshot.save_and_sync(items)\n            logger.debug(\"批次 %d: 已处理 %d 个域名\", batch_num, len(batch))\n            return {'success': True}\n        \n        except (OperationalError, DatabaseError) as e:\n            # 数据库连接/操作错误，可重试\n            if attempt < max_retries - 1:\n                wait_time = 2 ** attempt  # 指数退避: 1s, 2s, 4s\n                logger.warning(\"批次 %d 保存失败（第 %d 次尝试），%d秒后重试: %s\", \n                             batch_num, attempt + 1, wait_time, str(e)[:100])\n                time.sleep(wait_time)\n            else:\n                logger.error(\"批次 %d 保存失败（已重试 %d 次）: %s\", batch_num, max_retries, e)\n                return {'success': False}\n        \n        except IntegrityError as e:\n            # 数据完整性错误，不应重试\n            logger.error(\"批次 %d 数据完整性错误，跳过: %s\", batch_num, str(e)[:100])\n            return {'success': False}\n        \n        except Exception as e:\n            # 其他未知错误\n            logger.error(\"批次 %d 未知错误: %s\", batch_num, e, exc_info=True)\n            return {'success': False}\n    \n    return {'success': False}\n"
  },
  {
    "path": "backend/apps/scan/tasks/tests/test_task_backward_compatibility.py",
    "content": "\"\"\"\nTask 向后兼容性测试\n\nProperty 8: Task Backward Compatibility\n*For any* 任务调用，当仅提供 target_id 参数时，任务应该创建 DatabaseTargetProvider \n并使用它进行数据访问，行为与改造前一致。\n\n**Validates: Requirements 6.1, 6.2, 6.4, 6.5**\n\"\"\"\n\nimport tempfile\nimport pytest\nfrom pathlib import Path\nfrom unittest.mock import patch, MagicMock\nfrom hypothesis import given, strategies as st, settings\n\nfrom apps.scan.tasks.port_scan.export_hosts_task import export_hosts_task\nfrom apps.scan.tasks.site_scan.export_site_urls_task import export_site_urls_task\nfrom apps.scan.providers import ListTargetProvider\n\n\n# 生成有效域名的策略\ndef valid_domain_strategy():\n    \"\"\"生成有效的域名\"\"\"\n    label = st.text(\n        alphabet=st.characters(whitelist_categories=('L',), min_codepoint=97, max_codepoint=122),\n        min_size=2,\n        max_size=10\n    )\n    return st.builds(\n        lambda a, b, c: f\"{a}.{b}.{c}\",\n        label, label, st.sampled_from(['com', 'net', 'org', 'io'])\n    )\n\n\nclass TestExportHostsTaskBackwardCompatibility:\n    \"\"\"export_hosts_task 向后兼容性测试\"\"\"\n    \n    @given(\n        target_id=st.integers(min_value=1, max_value=1000),\n        hosts=st.lists(valid_domain_strategy(), min_size=1, max_size=10)\n    )\n    @settings(max_examples=50, deadline=None)\n    def test_property_8_legacy_mode_creates_database_provider(self, target_id, hosts):\n        \"\"\"\n        Property 8: Task Backward Compatibility (export_hosts_task)\n        \n        Feature: scan-target-provider, Property 8: Task Backward Compatibility\n        **Validates: Requirements 6.1, 6.2, 6.4, 6.5**\n        \n        For any target_id, when calling export_hosts_task with only target_id,\n        it should create a DatabaseTargetProvider and use it for data access.\n        \"\"\"\n        with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.txt') as f:\n            output_file = f.name\n        \n        try:\n            # Mock Target 和 SubdomainService\n            mock_target = MagicMock()\n            mock_target.type = 'domain'\n            mock_target.name = hosts[0]\n            \n            with patch('apps.scan.tasks.port_scan.export_hosts_task.DatabaseTargetProvider') as mock_provider_class, \\\n                 patch('apps.targets.services.TargetService') as mock_target_service:\n                \n                # 创建 mock provider 实例\n                mock_provider = MagicMock()\n                mock_provider.iter_hosts.return_value = iter(hosts)\n                mock_provider.get_blacklist_filter.return_value = None\n                mock_provider_class.return_value = mock_provider\n                \n                # Mock TargetService\n                mock_target_service.return_value.get_target.return_value = mock_target\n                \n                # 调用任务（传统模式：只传 target_id）\n                result = export_hosts_task(\n                    output_file=output_file,\n                    target_id=target_id\n                )\n                \n                # 验证：应该创建了 DatabaseTargetProvider\n                mock_provider_class.assert_called_once_with(target_id=target_id)\n                \n                # 验证：返回值包含必需字段\n                assert result['success'] is True\n                assert result['output_file'] == output_file\n                assert result['total_count'] == len(hosts)\n                assert 'target_type' in result  # 传统模式应该返回 target_type\n                \n                # 验证：文件内容正确\n                with open(output_file, 'r') as f:\n                    lines = [line.strip() for line in f.readlines()]\n                    assert lines == hosts\n        \n        finally:\n            Path(output_file).unlink(missing_ok=True)\n    \n    def test_legacy_mode_with_provider_parameter(self):\n        \"\"\"测试当同时提供 target_id 和 provider 时，provider 优先\"\"\"\n        with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.txt') as f:\n            output_file = f.name\n        \n        try:\n            hosts = ['example.com', 'test.com']\n            provider = ListTargetProvider(targets=hosts)\n            \n            # 调用任务（同时提供 target_id 和 provider）\n            result = export_hosts_task(\n                output_file=output_file,\n                target_id=123,  # 应该被忽略\n                provider=provider\n            )\n            \n            # 验证：使用了 provider\n            assert result['success'] is True\n            assert result['total_count'] == len(hosts)\n            assert 'target_type' not in result  # Provider 模式不返回 target_type\n            \n            # 验证：文件内容正确\n            with open(output_file, 'r') as f:\n                lines = [line.strip() for line in f.readlines()]\n                assert lines == hosts\n        \n        finally:\n            Path(output_file).unlink(missing_ok=True)\n    \n    def test_error_when_no_parameters(self):\n        \"\"\"测试当 target_id 和 provider 都未提供时抛出错误\"\"\"\n        with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.txt') as f:\n            output_file = f.name\n        \n        try:\n            with pytest.raises(ValueError, match=\"必须提供 target_id 或 provider 参数之一\"):\n                export_hosts_task(output_file=output_file)\n        \n        finally:\n            Path(output_file).unlink(missing_ok=True)\n\n\nclass TestExportSiteUrlsTaskBackwardCompatibility:\n    \"\"\"export_site_urls_task 向后兼容性测试\"\"\"\n    \n    def test_property_8_legacy_mode_uses_traditional_logic(self):\n        \"\"\"\n        Property 8: Task Backward Compatibility (export_site_urls_task)\n        \n        Feature: scan-target-provider, Property 8: Task Backward Compatibility\n        **Validates: Requirements 6.1, 6.2, 6.4, 6.5**\n        \n        When calling export_site_urls_task with only target_id,\n        it should use the traditional logic (_export_site_urls_legacy).\n        \"\"\"\n        with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.txt') as f:\n            output_file = f.name\n        \n        try:\n            target_id = 123\n            \n            # Mock HostPortMappingService\n            mock_associations = [\n                {'host': 'example.com', 'port': 80},\n                {'host': 'test.com', 'port': 443},\n            ]\n            \n            with patch('apps.scan.tasks.site_scan.export_site_urls_task.HostPortMappingService') as mock_service_class, \\\n                 patch('apps.scan.tasks.site_scan.export_site_urls_task.BlacklistService') as mock_blacklist_service:\n                \n                # Mock HostPortMappingService\n                mock_service = MagicMock()\n                mock_service.iter_host_port_by_target.return_value = iter(mock_associations)\n                mock_service_class.return_value = mock_service\n                \n                # Mock BlacklistService\n                mock_blacklist = MagicMock()\n                mock_blacklist.get_rules.return_value = []\n                mock_blacklist_service.return_value = mock_blacklist\n                \n                # 调用任务（传统模式：只传 target_id）\n                result = export_site_urls_task(\n                    output_file=output_file,\n                    target_id=target_id\n                )\n                \n                # 验证：返回值包含传统模式的字段\n                assert result['success'] is True\n                assert result['output_file'] == output_file\n                assert result['total_urls'] == 2  # 80 端口生成 1 个 URL，443 端口生成 1 个 URL\n                assert 'association_count' in result  # 传统模式应该返回 association_count\n                assert result['association_count'] == 2\n                assert result['source'] == 'host_port'\n                \n                # 验证：文件内容正确\n                with open(output_file, 'r') as f:\n                    lines = [line.strip() for line in f.readlines()]\n                    assert 'http://example.com' in lines\n                    assert 'https://test.com' in lines\n        \n        finally:\n            Path(output_file).unlink(missing_ok=True)\n    \n    def test_provider_mode_uses_provider_logic(self):\n        \"\"\"测试当提供 provider 时使用 Provider 模式\"\"\"\n        with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.txt') as f:\n            output_file = f.name\n        \n        try:\n            urls = ['https://example.com', 'https://test.com']\n            provider = ListTargetProvider(targets=urls)\n            \n            # 调用任务（Provider 模式）\n            result = export_site_urls_task(\n                output_file=output_file,\n                provider=provider\n            )\n            \n            # 验证：使用了 provider\n            assert result['success'] is True\n            assert result['total_urls'] == len(urls)\n            assert 'association_count' not in result  # Provider 模式不返回 association_count\n            assert result['source'] == 'provider'\n            \n            # 验证：文件内容正确\n            with open(output_file, 'r') as f:\n                lines = [line.strip() for line in f.readlines()]\n                assert lines == urls\n        \n        finally:\n            Path(output_file).unlink(missing_ok=True)\n    \n    def test_error_when_no_parameters(self):\n        \"\"\"测试当 target_id 和 provider 都未提供时抛出错误\"\"\"\n        with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.txt') as f:\n            output_file = f.name\n        \n        try:\n            with pytest.raises(ValueError, match=\"必须提供 target_id 或 provider 参数之一\"):\n                export_site_urls_task(output_file=output_file)\n        \n        finally:\n            Path(output_file).unlink(missing_ok=True)\n"
  },
  {
    "path": "backend/apps/scan/tasks/url_fetch/__init__.py",
    "content": "\"\"\"\nURL 获取任务模块\n\n包含 URL 获取相关的所有原子任务：\n- export_sites_task: 导出站点 URL 列表（用于 katana 等爬虫）\n- run_url_fetcher_task: 执行 URL 获取工具\n- merge_and_deduplicate_urls_task: 合并去重 URL\n- clean_urls_task: 使用 uro 清理 URL\n- save_urls_task: 保存 URL 到数据库\n- run_and_stream_save_urls_task: 流式验证并保存存活的 URL\n\"\"\"\n\nfrom .export_sites_task import export_sites_task\nfrom .run_url_fetcher_task import run_url_fetcher_task\nfrom .merge_and_deduplicate_urls_task import merge_and_deduplicate_urls_task\nfrom .clean_urls_task import clean_urls_task\nfrom .save_urls_task import save_urls_task\nfrom .run_and_stream_save_urls_task import run_and_stream_save_urls_task\n\n__all__ = [\n    'export_sites_task',\n    'run_url_fetcher_task',\n    'merge_and_deduplicate_urls_task',\n    'clean_urls_task',\n    'save_urls_task',\n    'run_and_stream_save_urls_task',\n]\n"
  },
  {
    "path": "backend/apps/scan/tasks/url_fetch/clean_urls_task.py",
    "content": "\"\"\"\nURL 清理任务\n\n使用 uro 工具清理合并后的 URL 列表：\n- 去除重复和相似的 URL\n- 根据扩展名过滤（whitelist/blacklist）\n- 智能过滤无效 URL\n\"\"\"\n\nimport logging\nimport subprocess\nfrom pathlib import Path\nfrom datetime import datetime\nfrom prefect import task\nfrom typing import Optional\n\nfrom apps.scan.utils import execute_and_wait\n\nlogger = logging.getLogger(__name__)\n\n\n@task(\n    name='clean_urls_with_uro',\n    retries=1,\n    log_prints=True\n)\ndef clean_urls_task(\n    input_file: str,\n    output_dir: str,\n    timeout: int = 60,\n    whitelist: Optional[list] = None,\n    blacklist: Optional[list] = None,\n    filters: Optional[list] = None\n) -> dict:\n    \"\"\"\n    使用 uro 清理 URL 列表\n    \n    Args:\n        input_file: 输入的 URL 文件路径\n        output_dir: 输出目录\n        timeout: 超时时间（秒）\n        whitelist: 只保留指定扩展名的 URL\n        blacklist: 排除指定扩展名的 URL\n        filters: 额外的过滤规则\n        \n    Returns:\n        dict: {\n            'success': bool,\n            'output_file': str,\n            'input_count': int,\n            'output_count': int,\n            'removed_count': int\n        }\n    \"\"\"\n    input_path = Path(input_file)\n    output_path = Path(output_dir)\n    \n    # 1. 验证输入文件\n    if not input_path.exists():\n        logger.error(\"输入文件不存在: %s\", input_file)\n        return {\n            'success': False,\n            'output_file': input_file,\n            'input_count': 0,\n            'output_count': 0,\n            'removed_count': 0,\n            'error': '输入文件不存在'\n        }\n    \n    # 2. 统计输入 URL 数量\n    try:\n        result = subprocess.run(\n            ['wc', '-l', str(input_path)],\n            capture_output=True,\n            text=True,\n            check=True\n        )\n        input_count = int(result.stdout.strip().split()[0])\n    except Exception as e:\n        logger.warning(\"统计输入文件行数失败: %s\", e)\n        input_count = 0\n        with open(input_path, 'r') as f:\n            input_count = sum(1 for line in f if line.strip())\n    \n    if input_count == 0:\n        logger.warning(\"输入文件为空，跳过 uro 清理\")\n        return {\n            'success': True,\n            'output_file': input_file,\n            'input_count': 0,\n            'output_count': 0,\n            'removed_count': 0\n        }\n    \n    logger.info(\"开始 uro 清理 - 输入 URL 数: %d\", input_count)\n    \n    # 3. 生成输出文件路径\n    timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')\n    output_file = output_path / f\"urls_cleaned_{timestamp}.txt\"\n    \n    # 4. 构建 uro 命令\n    cmd_parts = ['uro', '-i', str(input_path), '-o', str(output_file)]\n    \n    if whitelist:\n        cmd_parts.extend(['-w'] + [str(w) for w in whitelist])\n    \n    if blacklist:\n        cmd_parts.extend(['-b'] + [str(b) for b in blacklist])\n    \n    if filters:\n        cmd_parts.extend(['-f'] + [str(f) for f in filters])\n    \n    # 5. 构建命令字符串\n    command = ' '.join(cmd_parts)\n    log_file = str(output_path / f\"uro_{timestamp}.log\")\n    \n    logger.debug(\"uro 命令: %s\", command)\n    \n    # 6. 使用 execute_and_wait 执行（会自动发送通知）\n    try:\n        result = execute_and_wait(\n            tool_name='uro',\n            command=command,\n            timeout=timeout,\n            log_file=log_file\n        )\n        \n        if result['returncode'] != 0:\n            logger.warning(\n                \"uro 返回非零状态码: %d\",\n                result['returncode']\n            )\n            # uro 可能正常完成但返回非零，检查输出文件\n            if not output_file.exists():\n                return {\n                    'success': False,\n                    'output_file': input_file,\n                    'input_count': input_count,\n                    'output_count': input_count,\n                    'removed_count': 0,\n                    'error': f'uro 执行失败 (returncode: {result[\"returncode\"]})'\n                }\n                \n    except RuntimeError as e:\n        # execute_and_wait 超时或执行失败会抛出 RuntimeError\n        logger.error(\"uro 执行失败: %s\", e)\n        return {\n            'success': False,\n            'output_file': input_file,\n            'input_count': input_count,\n            'output_count': input_count,\n            'removed_count': 0,\n            'error': str(e)\n        }\n    except Exception as e:\n        logger.error(\"uro 执行异常: %s\", e)\n        return {\n            'success': False,\n            'output_file': input_file,\n            'input_count': input_count,\n            'output_count': input_count,\n            'removed_count': 0,\n            'error': str(e)\n        }\n    \n    # 7. 统计清理后的 URL 数量\n    output_count = 0\n    if output_file.exists():\n        try:\n            result = subprocess.run(\n                ['wc', '-l', str(output_file)],\n                capture_output=True,\n                text=True,\n                check=True\n            )\n            output_count = int(result.stdout.strip().split()[0])\n        except Exception:\n            with open(output_file, 'r') as f:\n                output_count = sum(1 for line in f if line.strip())\n    else:\n        logger.warning(\"uro 未生成输出文件，使用原始文件\")\n        return {\n            'success': False,\n            'output_file': input_file,\n            'input_count': input_count,\n            'output_count': input_count,\n            'removed_count': 0,\n            'error': '未生成输出文件'\n        }\n    \n    removed_count = input_count - output_count\n    \n    logger.info(\n        \"✓ uro 清理完成 - 输入: %d, 输出: %d, 移除: %d (%.1f%%)\",\n        input_count, output_count, removed_count,\n        (removed_count / input_count * 100) if input_count > 0 else 0\n    )\n    \n    return {\n        'success': True,\n        'output_file': str(output_file),\n        'input_count': input_count,\n        'output_count': output_count,\n        'removed_count': removed_count\n    }\n"
  },
  {
    "path": "backend/apps/scan/tasks/url_fetch/export_sites_task.py",
    "content": "\"\"\"\n导出站点 URL 列表任务\n\n支持两种模式：\n1. 传统模式（向后兼容）：使用 target_id 从数据库导出\n2. Provider 模式：使用 TargetProvider 从任意数据源导出\n\n数据源: WebSite.url → Default（用于 katana 等爬虫工具）\n\"\"\"\n\nimport logging\nfrom typing import Optional\nfrom pathlib import Path\nfrom prefect import task\n\nfrom apps.scan.services.target_export_service import (\n    export_urls_with_fallback,\n    DataSource,\n)\nfrom apps.scan.providers import TargetProvider, DatabaseTargetProvider\n\nlogger = logging.getLogger(__name__)\n\n\n@task(\n    name='export_sites_for_url_fetch',\n    retries=1,\n    log_prints=True\n)\ndef export_sites_task(\n    output_file: str,\n    target_id: Optional[int] = None,\n    scan_id: Optional[int] = None,\n    provider: Optional[TargetProvider] = None,\n    batch_size: int = 1000\n) -> dict:\n    \"\"\"\n    导出站点 URL 列表到文件（用于 katana 等爬虫工具）\n    \n    支持两种模式：\n    1. 传统模式（向后兼容）：传入 target_id，从数据库导出\n    2. Provider 模式：传入 provider，从任意数据源导出\n    \n    数据源优先级（回退链，仅传统模式）：\n    1. WebSite 表 - 站点级别 URL\n    2. 默认生成 - 根据 Target 类型生成 http(s)://target_name\n    \n    Args:\n        output_file: 输出文件路径\n        target_id: 目标 ID（传统模式，向后兼容）\n        scan_id: 扫描 ID（保留参数，兼容旧调用）\n        provider: TargetProvider 实例（新模式）\n        batch_size: 批次大小（内存优化）\n        \n    Returns:\n        dict: {\n            'output_file': str,  # 输出文件路径\n            'asset_count': int,  # 资产数量\n        }\n        \n    Raises:\n        ValueError: 参数错误\n        RuntimeError: 执行失败\n    \"\"\"\n    # 参数验证：至少提供一个\n    if target_id is None and provider is None:\n        raise ValueError(\"必须提供 target_id 或 provider 参数之一\")\n    \n    # Provider 模式：使用 TargetProvider 导出\n    if provider is not None:\n        logger.info(\"使用 Provider 模式 - Provider: %s\", type(provider).__name__)\n        return _export_with_provider(output_file, provider)\n    \n    # 传统模式：使用 export_urls_with_fallback\n    logger.info(\"使用传统模式 - Target ID: %d\", target_id)\n    result = export_urls_with_fallback(\n        target_id=target_id,\n        output_file=output_file,\n        sources=[DataSource.WEBSITE, DataSource.DEFAULT],\n        batch_size=batch_size,\n    )\n    \n    logger.info(\n        \"站点 URL 导出完成 - source=%s, count=%d\",\n        result['source'], result['total_count']\n    )\n    \n    # 保持返回值格式不变（向后兼容）\n    return {\n        'output_file': result['output_file'],\n        'asset_count': result['total_count'],\n    }\n\n\ndef _export_with_provider(output_file: str, provider: TargetProvider) -> dict:\n    \"\"\"使用 Provider 导出 URL\"\"\"\n    output_path = Path(output_file)\n    output_path.parent.mkdir(parents=True, exist_ok=True)\n    \n    total_count = 0\n    blacklist_filter = provider.get_blacklist_filter()\n    \n    with open(output_path, 'w', encoding='utf-8', buffering=8192) as f:\n        for url in provider.iter_urls():\n            # 应用黑名单过滤（如果有）\n            if blacklist_filter and not blacklist_filter.is_allowed(url):\n                continue\n            \n            f.write(f\"{url}\\n\")\n            total_count += 1\n            \n            if total_count % 1000 == 0:\n                logger.info(\"已导出 %d 个 URL...\", total_count)\n    \n    logger.info(\"✓ URL 导出完成 - 总数: %d, 文件: %s\", total_count, str(output_path))\n    \n    return {\n        'output_file': str(output_path),\n        'asset_count': total_count,\n    }\n"
  },
  {
    "path": "backend/apps/scan/tasks/url_fetch/merge_and_deduplicate_urls_task.py",
    "content": "\"\"\"\n合并并去重 URL 任务\n\n合并多个工具的输出文件，去重并验证 URL 格式\n性能优化：使用系统命令处理大文件\n\"\"\"\n\nimport logging\nimport uuid\nimport subprocess\nfrom pathlib import Path\nfrom datetime import datetime\nfrom prefect import task\nfrom typing import List\n\nlogger = logging.getLogger(__name__)\n\n\n@task(\n    name='merge_and_deduplicate_urls',\n    retries=1,\n    log_prints=True\n)\ndef merge_and_deduplicate_urls_task(\n    result_files: List[str],\n    result_dir: str\n) -> str:\n    \"\"\"\n    合并扫描结果并去重（高性能流式处理）\n    \n    流程：\n    1. 使用 LC_ALL=C sort -u 直接处理多文件\n    2. 排序去重一步完成\n    3. 返回去重后的 URL 文件路径\n    \n    Args:\n        result_files: 结果文件路径列表\n        result_dir: 结果目录\n    \n    Returns:\n        str: 去重后的 URL 文件路径\n    \n    Raises:\n        RuntimeError: 处理失败\n    \"\"\"\n    logger.info(\"开始合并并去重 %d 个结果文件（系统命令优化）\", len(result_files))\n\n    result_path = Path(result_dir)\n\n    # 验证文件存在性\n    valid_files = []\n    for file_path_str in result_files:\n        file_path = Path(file_path_str)\n        if file_path.exists():\n            valid_files.append(str(file_path))\n        else:\n            logger.warning(\"结果文件不存在: %s\", file_path)\n\n    if not valid_files:\n        raise RuntimeError(\"所有结果文件都不存在\")\n\n    # 生成输出文件路径\n    timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')\n    short_uuid = uuid.uuid4().hex[:4]\n    merged_file = result_path / f\"merged_{timestamp}_{short_uuid}.txt\"\n\n    try:\n        # 使用系统命令一步完成: 排序去重\n        cmd = f\"LC_ALL=C sort -u {' '.join(valid_files)} -o {merged_file}\"\n        logger.debug(\"执行命令: %s\", cmd)\n\n        # 按输入文件总行数动态计算超时时间\n        total_lines = 0\n        for file_path in valid_files:\n            try:\n                line_count_proc = subprocess.run(\n                    [\"wc\", \"-l\", file_path],\n                    check=True,\n                    capture_output=True,\n                    text=True,\n                )\n                total_lines += int(line_count_proc.stdout.strip().split()[0])\n            except (subprocess.CalledProcessError, ValueError, IndexError):\n                continue\n\n        timeout = 3600\n        if total_lines > 0:\n            # 按行数线性计算：每行约 0.1 秒\n            base_per_line = 0.1\n            est = int(total_lines * base_per_line)\n            timeout = max(600, est)\n\n        logger.info(\n            \"URL 合并去重 timeout 自动计算: 输入总行数=%d, timeout=%d秒\",\n            total_lines,\n            timeout,\n        )\n\n        result = subprocess.run(\n            cmd,\n            shell=True,\n            check=True,\n            timeout=timeout\n        )\n\n        logger.debug(\"✓ 合并去重完成\")\n\n        # 统计结果\n        if not merged_file.exists():\n            raise RuntimeError(\"合并文件未被创建\")\n\n        # 优先使用 wc -l 统计行数，大文件性能更好\n        try:\n            line_count_proc = subprocess.run(\n                [\"wc\", \"-l\", str(merged_file)],\n                check=True,\n                capture_output=True,\n                text=True,\n            )\n            unique_count = int(line_count_proc.stdout.strip().split()[0])\n        except (subprocess.CalledProcessError, ValueError, IndexError) as e:\n            logger.warning(\n                \"wc -l 统计失败（文件: %s），降级为 Python 逐行统计 - 错误: %s\",\n                merged_file,\n                e,\n            )\n            unique_count = 0\n            with open(merged_file, \"r\", encoding=\"utf-8\") as file_obj:\n                for _ in file_obj:\n                    unique_count += 1\n\n        if unique_count == 0:\n            raise RuntimeError(\"未找到任何有效 URL\")\n\n        file_size = merged_file.stat().st_size\n\n        logger.info(\n            \"✓ 合并去重完成 - 去重后: %d 个 URL, 文件大小: %.2f KB\",\n            unique_count,\n            file_size / 1024,\n        )\n\n        return str(merged_file)\n\n    except subprocess.TimeoutExpired:\n        error_msg = \"合并去重超时（>60分钟），请检查数据量或系统资源\"\n        logger.warning(error_msg)  # 超时是可预期的\n        raise RuntimeError(error_msg)\n\n    except subprocess.CalledProcessError as e:\n        error_msg = f\"系统命令执行失败: {e.stderr if e.stderr else str(e)}\"\n        logger.error(error_msg)\n        raise RuntimeError(error_msg) from e\n\n    except IOError as e:\n        error_msg = f\"文件读写失败: {e}\"\n        logger.error(error_msg)\n        raise RuntimeError(error_msg) from e\n\n    except Exception as e:\n        error_msg = f\"合并去重失败: {e}\"\n        logger.error(error_msg, exc_info=True)\n        raise\n"
  },
  {
    "path": "backend/apps/scan/tasks/url_fetch/run_and_stream_save_urls_task.py",
    "content": "\"\"\"\n基于 execute_stream 的流式 URL 验证任务\n\n主要功能：\n    1. 实时执行 httpx 命令验证 URL\n    2. 流式处理命令输出，解析 URL 信息\n    3. 批量保存到数据库（Endpoint 表）\n    4. 避免一次性加载所有 URL 到内存\n\n数据流向：\n    httpx 命令执行 → 流式输出 → 实时解析 → 批量保存 → Endpoint 表\n    \n优化策略：\n    - 使用 execute_stream 实时处理输出\n    - 流式处理避免内存溢出\n    - 批量操作减少数据库交互\n    - 保存所有有效 URL（包括 4xx/5xx，便于安全分析）\n\"\"\"\n\nimport logging\nimport json\nimport subprocess\nimport time\nfrom pathlib import Path\nfrom prefect import task\nfrom typing import Generator, Optional, Dict, Any\nfrom django.db import IntegrityError, OperationalError, DatabaseError\nfrom psycopg2 import InterfaceError\nfrom dataclasses import dataclass\nfrom urllib.parse import urlparse\n\nfrom apps.asset.services.snapshot import EndpointSnapshotsService\nfrom apps.scan.utils import execute_stream\n\nlogger = logging.getLogger(__name__)\n\n\n@dataclass\nclass ServiceSet:\n    \"\"\"\n    Service 集合，用于依赖注入\n    \n    提供 URL 验证所需的 Service 实例\n    \"\"\"\n    snapshot: EndpointSnapshotsService\n    \n    @classmethod\n    def create_default(cls) -> \"ServiceSet\":\n        \"\"\"创建默认的 Service 集合\"\"\"\n        return cls(\n            snapshot=EndpointSnapshotsService()\n        )\n\n\ndef _sanitize_string(value: str) -> str:\n    \"\"\"\n    清理字符串中的 NUL 字符和其他不可打印字符\n    \n    PostgreSQL 不允许字符串字段包含 NUL (0x00) 字符\n    \"\"\"\n    if not value:\n        return value\n    # 移除 NUL 字符\n    return value.replace('\\x00', '')\n\n\ndef _extract_hostname(url: str) -> str:\n    \"\"\"\n    从 URL 提取主机名\n    \n    Args:\n        url: URL 字符串\n    \n    Returns:\n        str: 提取的主机名（小写）\n    \"\"\"\n    try:\n        if url:\n            parsed = urlparse(url)\n            if parsed.hostname:\n                return parsed.hostname\n            # 降级方案：手动提取\n            return url.replace('http://', '').replace('https://', '').split('/')[0].split(':')[0]\n        return ''\n    except Exception as e:\n        logger.debug(\"提取主机名失败: %s\", e)\n        return ''\n\n\nclass HttpxRecord:\n    \"\"\"httpx 扫描记录数据类\"\"\"\n    \n    def __init__(self, data: Dict[str, Any]):\n        self.url = _sanitize_string(data.get('url', ''))\n        self.input = _sanitize_string(data.get('input', ''))\n        self.title = _sanitize_string(data.get('title', ''))\n        self.status_code = data.get('status_code')  # int，不需要清理\n        self.content_length = data.get('content_length')  # int，不需要清理\n        self.content_type = _sanitize_string(data.get('content_type', ''))\n        self.location = _sanitize_string(data.get('location', ''))\n        self.webserver = _sanitize_string(data.get('webserver', ''))\n        self.response_body = _sanitize_string(data.get('body', ''))\n        self.tech = [_sanitize_string(t) for t in data.get('tech', []) if isinstance(t, str)]  # 列表中的字符串也需要清理\n        self.vhost = data.get('vhost')  # bool，不需要清理\n        self.failed = data.get('failed', False)  # bool，不需要清理\n        self.response_headers = _sanitize_string(data.get('raw_header', ''))\n        \n        # 从 URL 中提取主机名（优先使用 httpx 返回的 host，否则自动提取）\n        httpx_host = _sanitize_string(data.get('host', ''))\n        self.host = httpx_host if httpx_host else _extract_hostname(self.url)\n\n\ndef _parse_and_validate_line(line: str) -> Optional[HttpxRecord]:\n    \"\"\"\n    解析并验证单行 httpx JSON 输出\n    \n    Args:\n        line: 单行输出数据\n    \n    Returns:\n        Optional[HttpxRecord]: 有效的 httpx 记录，或 None 如果验证失败\n    \"\"\"\n    try:\n        # 清理 NUL 字符后再解析 JSON\n        line = _sanitize_string(line)\n        \n        # 解析 JSON\n        try:\n            line_data = json.loads(line, strict=False)\n        except json.JSONDecodeError:\n            return None\n        \n        # 验证数据类型\n        if not isinstance(line_data, dict):\n            logger.info(\"跳过非字典数据\")\n            return None\n        \n        # 创建记录\n        record = HttpxRecord(line_data)\n        \n        # 验证必要字段\n        if not record.url:\n            logger.info(\"URL 为空，跳过 - 数据: %s\", str(line_data)[:200])\n            return None\n        \n        return record\n    \n    except Exception:\n        logger.info(\"跳过无法解析的行: %s\", line[:100] if line else 'empty')\n        return None\n\n\ndef _parse_httpx_stream_output(\n    cmd: str,\n    tool_name: str,\n    cwd: Optional[str] = None,\n    shell: bool = False,\n    timeout: Optional[int] = None,\n    log_file: Optional[str] = None\n) -> Generator[HttpxRecord, None, None]:\n    \"\"\"\n    流式解析 httpx 命令输出\n    \n    Args:\n        cmd: httpx 命令\n        tool_name: 工具名称（'httpx'）\n        cwd: 工作目录\n        shell: 是否使用 shell 执行\n        timeout: 命令执行超时时间（秒）\n        log_file: 日志文件路径\n    \n    Yields:\n        HttpxRecord: 每次 yield 一条存活的 URL 记录\n    \"\"\"\n    logger.info(\"开始流式解析 httpx 输出 - 命令: %s\", cmd)\n    \n    total_lines = 0\n    error_lines = 0\n    valid_records = 0\n    \n    try:\n        # 使用 execute_stream 获取实时输出流\n        for line in execute_stream(\n            cmd=cmd, \n            tool_name=tool_name, \n            cwd=cwd, \n            shell=shell, \n            timeout=timeout, \n            log_file=log_file\n        ):\n            total_lines += 1\n            \n            # 解析并验证单行数据\n            record = _parse_and_validate_line(line)\n            if record is None:\n                error_lines += 1\n                continue\n            \n            valid_records += 1\n            # yield 一条有效记录（存活的 URL）\n            yield record\n            \n            # 每处理 100 条记录输出一次进度\n            if valid_records % 100 == 0:\n                logger.info(\"已解析 %d 条存活的 URL...\", valid_records)\n                \n    except subprocess.TimeoutExpired as e:\n        error_msg = f\"流式解析命令输出超时 - 命令执行超过 {timeout} 秒\"\n        logger.warning(error_msg)  # 超时是可预期的，使用 warning 级别\n        raise RuntimeError(error_msg) from e\n    except Exception as e:\n        logger.error(\"流式解析命令输出失败: %s\", e, exc_info=True)\n        raise\n    \n    logger.info(\n        \"流式解析完成 - 总行数: %d, 存活 URL: %d, 无效/死链: %d\", \n        total_lines, valid_records, error_lines\n    )\n\n\ndef _validate_task_parameters(cmd: str, target_id: int, scan_id: int, cwd: Optional[str]) -> None:\n    \"\"\"\n    验证任务参数的有效性\n    \n    Args:\n        cmd: 扫描命令\n        target_id: 目标ID\n        scan_id: 扫描ID\n        cwd: 工作目录\n        \n    Raises:\n        ValueError: 参数验证失败\n    \"\"\"\n    if not cmd or not cmd.strip():\n        raise ValueError(\"扫描命令不能为空\")\n    \n    if target_id is None:\n        raise ValueError(\"target_id 不能为 None，必须指定目标ID\")\n        \n    if scan_id is None:\n        raise ValueError(\"scan_id 不能为 None，必须指定扫描ID\")\n    \n    # 验证工作目录（如果指定）\n    if cwd and not Path(cwd).exists():\n        raise ValueError(f\"工作目录不存在: {cwd}\")\n\n\ndef _build_final_result(stats: dict) -> dict:\n    \"\"\"\n    构建最终结果并输出日志\n    \n    Args:\n        stats: 处理统计信息\n        \n    Returns:\n        dict: 最终结果\n    \"\"\"\n    logger.info(\n        \"✓ URL 验证任务完成 - 处理记录: %d（%d 批次），创建端点: %d，跳过（失败）: %d\",\n        stats['processed_records'], stats['batch_count'], stats['created_endpoints'],\n        stats['skipped_failed']\n    )\n    \n    # 如果没有创建任何记录，给出明确提示\n    if stats['created_endpoints'] == 0:\n        logger.warning(\n            \"⚠️  没有创建任何端点记录！可能原因：1) 命令输出格式问题 2) 重复数据被忽略 3) 所有请求都失败\"\n        )\n    \n    return {\n        'processed_records': stats['processed_records'],\n        'created_endpoints': stats['created_endpoints'],\n        'skipped_failed': stats['skipped_failed']\n    }\n\n\ndef _cleanup_resources(data_generator) -> None:\n    \"\"\"\n    清理任务资源\n    \n    Args:\n        data_generator: 数据生成器\n    \"\"\"\n    # 确保生成器被正确关闭\n    if data_generator is not None:\n        try:\n            data_generator.close()\n            logger.debug(\"已关闭数据生成器\")\n        except Exception as gen_close_error:\n            logger.error(\"关闭生成器时出错: %s\", gen_close_error)\n\n\ndef _save_batch_with_retry(\n    batch: list,\n    scan_id: int,\n    target_id: int,\n    batch_num: int,\n    services: ServiceSet,\n    max_retries: int = 3\n) -> dict:\n    \"\"\"\n    保存一个批次的 URL（带重试机制）\n    \n    Args:\n        batch: 数据批次\n        scan_id: 扫描任务ID\n        target_id: 目标ID\n        batch_num: 批次编号\n        services: Service 集合\n        max_retries: 最大重试次数\n    \n    Returns:\n        dict: {\n            'success': bool,\n            'created_endpoints': int,\n            'skipped_failed': int\n        }\n    \"\"\"\n    for attempt in range(max_retries):\n        try:\n            stats = _save_batch(batch, scan_id, target_id, batch_num, services)\n            return {\n                'success': True,\n                'created_endpoints': stats.get('created_endpoints', 0),\n                'skipped_failed': stats.get('skipped_failed', 0)\n            }\n\n        except IntegrityError as e:\n            # 唯一约束等数据完整性错误通常意味着重复数据，这里记录错误但不让整个扫描失败\n            logger.error(\"批次 %d 数据完整性错误，跳过: %s\", batch_num, str(e)[:100])\n            return {\n                'success': False,\n                'created_endpoints': 0,\n                'skipped_failed': 0\n            }\n\n        except (OperationalError, DatabaseError, InterfaceError) as e:\n            # 数据库级错误（连接中断、表结构不匹配等）：按指数退避重试，最终失败时抛出异常让 Flow 失败\n            if attempt < max_retries - 1:\n                wait_time = 2 ** attempt\n                logger.warning(\n                    \"批次 %d 保存失败（第 %d 次尝试），%d秒后重试: %s\",\n                    batch_num, attempt + 1, wait_time, str(e)[:100]\n                )\n                time.sleep(wait_time)\n            else:\n                logger.error(\n                    \"批次 %d 保存失败（已重试 %d 次），将终止任务: %s\",\n                    batch_num,\n                    max_retries,\n                    e,\n                    exc_info=True,\n                )\n                # 让上层 Task 感知失败，从而标记整个扫描为失败\n                raise\n\n        except Exception as e:\n            # 其他未知异常也不再吞掉，直接抛出以便 Flow 标记为失败\n            logger.error(\"批次 %d 未知错误: %s\", batch_num, e, exc_info=True)\n            raise\n\n    # 理论上不会走到这里，保留兜底返回值以满足类型约束\n    return {\n        'success': False,\n        'created_endpoints': 0,\n        'skipped_failed': 0\n    }\n\n\ndef _save_batch(\n    batch: list,\n    scan_id: int,\n    target_id: int,\n    batch_num: int,\n    services: ServiceSet\n) -> dict:\n    \"\"\"\n    保存一个批次的数据到数据库\n    \n    Args:\n        batch: 数据批次，list of HttpxRecord\n        scan_id: 扫描任务 ID\n        target_id: 目标 ID\n        batch_num: 批次编号\n        services: Service 集合\n    \n    Returns:\n        dict: 包含创建和跳过记录的统计信息\n    \"\"\"\n    # 参数验证\n    if not isinstance(batch, list):\n        raise TypeError(f\"batch 必须是 list 类型，实际: {type(batch).__name__}\")\n    \n    if not batch:\n        logger.debug(\"批次 %d 为空，跳过处理\", batch_num)\n        return {\n            'created_endpoints': 0,\n            'skipped_failed': 0\n        }\n    \n    # 统计变量\n    skipped_failed = 0\n    \n    # 批量构造 Endpoint 快照 DTO\n    from apps.asset.dtos.snapshot import EndpointSnapshotDTO\n    \n    snapshots = []\n    for record in batch:\n        # 跳过失败的请求\n        if record.failed:\n            skipped_failed += 1\n            continue\n        \n        try:\n            # Endpoint URL 直接使用原始值，不做标准化\n            # 原因：Endpoint URL 来自 waymore/katana，包含路径和参数，标准化可能改变含义\n            url = record.input if record.input else record.url\n            \n            # 提取 host 字段（域名或IP地址）\n            host = record.host if record.host else ''\n            \n            dto = EndpointSnapshotDTO(\n                scan_id=scan_id,\n                target_id=target_id,\n                url=url,\n                host=host,\n                title=record.title if record.title else '',\n                status_code=record.status_code,\n                content_length=record.content_length,\n                location=record.location if record.location else '',\n                webserver=record.webserver if record.webserver else '',\n                content_type=record.content_type if record.content_type else '',\n                tech=record.tech if isinstance(record.tech, list) else [],\n                response_body=record.response_body if record.response_body else '',\n                vhost=record.vhost if record.vhost else False,\n                matched_gf_patterns=[],\n                response_headers=record.response_headers if record.response_headers else '',\n            )\n            snapshots.append(dto)\n        except Exception as e:\n            logger.error(\"处理记录失败: %s，错误: %s\", record.url, e)\n            continue\n    \n    if snapshots:\n        try:\n            # 通过快照服务统一保存快照并同步到资产表\n            services.snapshot.save_and_sync(snapshots)\n            count = len(snapshots)\n            logger.info(\n                \"批次 %d: 保存了 %d 个存活的 URL（共 %d 个，跳过失败: %d）\",\n                batch_num, count, len(batch), skipped_failed\n            )\n            return {\n                'created_endpoints': count,\n                'skipped_failed': skipped_failed\n            }\n        except Exception as e:\n            logger.error(\"批次 %d 批量保存失败: %s\", batch_num, e)\n            raise\n    \n    return {\n        'created_endpoints': 0,\n        'skipped_failed': skipped_failed\n    }\n\n\ndef _accumulate_batch_stats(total_stats: dict, batch_result: dict) -> None:\n    \"\"\"\n    累加批次统计信息\n    \n    Args:\n        total_stats: 总统计信息字典\n        batch_result: 批次结果字典\n    \"\"\"\n    total_stats['created_endpoints'] += batch_result.get('created_endpoints', 0)\n    total_stats['skipped_failed'] += batch_result.get('skipped_failed', 0)\n\n\ndef _process_batch(\n    batch: list,\n    scan_id: int,\n    target_id: int,\n    batch_num: int,\n    total_stats: dict,\n    failed_batches: list,\n    services: ServiceSet\n) -> None:\n    \"\"\"\n    处理单个批次\n    \n    Args:\n        batch: 数据批次\n        scan_id: 扫描ID\n        target_id: 目标ID\n        batch_num: 批次编号\n        total_stats: 总统计信息\n        failed_batches: 失败批次列表\n        services: Service 集合（必须，依赖注入）\n    \"\"\"\n    result = _save_batch_with_retry(\n        batch, scan_id, target_id, batch_num, services\n    )\n    \n    # 累计统计信息（失败时可能有部分数据已保存）\n    _accumulate_batch_stats(total_stats, result)\n    \n    if not result['success']:\n        failed_batches.append(batch_num)\n        logger.warning(\n            \"批次 %d 保存失败，但已累计统计信息：创建端点=%d\",\n            batch_num, result.get('created_endpoints', 0)\n        )\n\n\ndef _process_records_in_batches(\n    data_generator,\n    scan_id: int,\n    target_id: int,\n    batch_size: int,\n    services: ServiceSet\n) -> dict:\n    \"\"\"\n    流式处理记录并分批保存\n    \n    Args:\n        data_generator: 数据生成器\n        scan_id: 扫描ID\n        target_id: 目标ID\n        batch_size: 批次大小\n        services: Service 集合\n        \n    Returns:\n        dict: 处理统计信息\n        \n    Raises:\n        RuntimeError: 存在失败批次时抛出\n    \"\"\"\n    total_records = 0\n    batch_num = 0\n    failed_batches = []\n    batch = []\n    \n    # 统计信息\n    total_stats = {\n        'created_endpoints': 0,\n        'skipped_failed': 0\n    }\n    \n    # 流式读取生成器并分批保存\n    for record in data_generator:\n        batch.append(record)\n        total_records += 1\n        \n        # 达到批次大小，执行保存\n        if len(batch) >= batch_size:\n            batch_num += 1\n            _process_batch(batch, scan_id, target_id, batch_num, total_stats, failed_batches, services)\n            batch = []  # 清空批次\n            \n            # 每 10 个批次输出进度\n            if batch_num % 10 == 0:\n                logger.info(\"进度: 已处理 %d 批次，%d 条记录\", batch_num, total_records)\n    \n    # 保存最后一批\n    if batch:\n        batch_num += 1\n        _process_batch(batch, scan_id, target_id, batch_num, total_stats, failed_batches, services)\n    \n    # 检查失败批次\n    if failed_batches:\n        error_msg = (\n            f\"流式保存 URL 验证结果时出现失败批次，处理记录: {total_records}，\"\n            f\"失败批次: {failed_batches}\"\n        )\n        logger.warning(error_msg)\n        raise RuntimeError(error_msg)\n    \n    return {\n        'processed_records': total_records,\n        'batch_count': batch_num,\n        **total_stats\n    }\n\n\n@task(name=\"run_and_stream_save_urls\", retries=0)\ndef run_and_stream_save_urls_task(\n    cmd: str,\n    tool_name: str,\n    scan_id: int,\n    target_id: int,\n    cwd: Optional[str] = None,\n    shell: bool = False,\n    batch_size: int = 100,\n    timeout: Optional[int] = None,\n    log_file: Optional[str] = None\n) -> dict:\n    \"\"\"\n    执行 httpx 验证并流式保存存活的 URL\n    \n    该任务将：\n    1. 验证输入参数\n    2. 初始化资源（缓存、生成器）\n    3. 流式处理记录并分批保存\n    4. 构建并返回结果统计\n    \n    Args:\n        cmd: httpx 命令\n        tool_name: 工具名称（'httpx'）\n        scan_id: 扫描任务 ID\n        target_id: 目标 ID\n        cwd: 工作目录（可选）\n        shell: 是否使用 shell 执行（默认 False）\n        batch_size: 批次大小（默认 500）\n        timeout: 超时时间（秒）\n        log_file: 日志文件路径\n    \n    Returns:\n        dict: {\n            'processed_records': int,  # 处理的记录总数\n            'created_endpoints': int,  # 创建的端点记录数\n            'skipped_failed': int,     # 因请求失败跳过的记录数\n        }\n    \n    Raises:\n        ValueError: 参数验证失败\n        RuntimeError: 命令执行或数据库操作失败\n        subprocess.TimeoutExpired: 命令执行超时\n    \"\"\"\n    logger.info(\n        \"开始执行流式 URL 验证任务 - target_id=%s, 超时=%s秒, 命令: %s\",\n        target_id, timeout if timeout else '无限制', cmd\n    )\n    \n    data_generator = None\n    \n    try:\n        # 1. 验证参数\n        _validate_task_parameters(cmd, target_id, scan_id, cwd)\n        \n        # 2. 初始化资源\n        data_generator = _parse_httpx_stream_output(\n            cmd, tool_name, cwd, shell, timeout, log_file\n        )\n        services = ServiceSet.create_default()\n        \n        # 3. 流式处理记录并分批保存\n        stats = _process_records_in_batches(\n            data_generator, scan_id, target_id, batch_size, services\n        )\n        \n        # 4. 构建最终结果\n        return _build_final_result(stats)\n        \n    except subprocess.TimeoutExpired:\n        # 超时异常直接向上传播，保留异常类型\n        logger.warning(\n            \"⚠️ URL 验证任务超时 - target_id=%s, 超时=%s秒\",\n            target_id, timeout\n        )\n        raise  # 直接重新抛出，不包装\n    \n    except Exception as e:\n        error_msg = f\"流式执行 URL 验证任务失败: {e}\"\n        logger.error(error_msg, exc_info=True)\n        raise RuntimeError(error_msg) from e\n    \n    finally:\n        # 5. 清理资源\n        _cleanup_resources(data_generator)\n"
  },
  {
    "path": "backend/apps/scan/tasks/url_fetch/run_url_fetcher_task.py",
    "content": "\"\"\"\n执行 URL 获取工具任务\n\n负责运行单个 URL 获取工具（waymore、katana 等）。\n\n注意：\n- 输入文件（domains_file 或 sites_file）和命令的构建在 Flow 层完成\n- 任务内部只负责执行已经构建好的命令并校验 / 统计结果\n\"\"\"\n\nimport logging\nfrom pathlib import Path\nfrom prefect import task\nfrom apps.scan.utils import execute_and_wait\n\nlogger = logging.getLogger(__name__)\n\n\n@task(\n    name='run_url_fetcher',\n    retries=0,  # 不重试，工具本身会处理\n    log_prints=True\n)\ndef run_url_fetcher_task(\n    tool_name: str,\n    command: str,\n    timeout: int,\n    output_file: str\n) -> dict:\n    \"\"\"\n    执行单个 URL 获取工具\n    \n    Args:\n        tool_name: 工具名称\n        command: 完整的命令字符串（由 Flow 层使用命令构建器生成）\n        timeout: 命令执行超时时间（秒）\n        output_file: 输出文件完整路径\n        \n    Returns:\n        dict: {\n            'tool': str,  # 工具名称\n            'output_file': str,  # 输出文件路径\n            'url_count': int,  # 发现的 URL 数量\n            'target_count': int,  # 处理的目标数量（占位，始终为 1）\n            'success': bool\n        }\n    \"\"\"\n    output_file_path = Path(output_file)\n    log_file = str(output_file_path.with_suffix('.log'))\n\n    try:\n        logger.info(\"开始执行 URL 获取工具 %s\", tool_name)\n\n        # 使用通用命令执行器\n        result = execute_and_wait(\n            tool_name=tool_name,\n            command=command,\n            timeout=timeout,\n            log_file=log_file\n        )\n\n        # 验证输出文件是否生成\n        if not output_file_path.exists():\n            logger.warning(\n                \"URL 获取工具 %s 未生成结果文件: %s (returncode: %d)\",\n                tool_name, str(output_file_path), result['returncode']\n            )\n            return {\n                'tool': tool_name,\n                'output_file': output_file,\n                'url_count': 0,\n                'target_count': 0,\n                'success': False\n            }\n\n        # 检查文件大小\n        file_size = output_file_path.stat().st_size\n        if file_size == 0:\n            logger.warning(\"URL 获取工具 %s 生成的结果文件为空: %s\", tool_name, output_file_path)\n            return {\n                'tool': tool_name,\n                'output_file': output_file,\n                'url_count': 0,\n                'target_count': 0,\n                'success': False\n            }\n\n        # 统计 URL 数量（不在此处去重，全局去重交由 merge_and_deduplicate_urls_task 处理）\n        final_count = 0\n        with open(output_file, 'r') as f:\n            final_count = sum(1 for line in f if line.strip())\n\n        logger.info(\n            \"✓ URL 获取工具 %s 完成 - 结果文件: %s (URL 数量: %d)\",\n            tool_name, str(output_file_path), final_count\n        )\n\n        return {\n            'tool': tool_name,\n            'output_file': output_file,\n            'url_count': final_count,\n            'target_count': 1,\n            'success': final_count > 0\n        }\n\n    except RuntimeError:\n        # 直接向上抛出（execute_and_wait 已记录详细日志）\n        raise\n    except Exception as e:\n        error_msg = f\"URL 获取工具 {tool_name} 执行异常: {e}\"\n        logger.error(error_msg, exc_info=True)\n        raise\n"
  },
  {
    "path": "backend/apps/scan/tasks/url_fetch/save_urls_task.py",
    "content": "\"\"\"\n保存 URL 到数据库任务\n\n批量保存发现的 URL 到 Endpoint 表\n支持批量插入和去重\n\"\"\"\n\nimport logging\nfrom pathlib import Path\nfrom prefect import task\nfrom typing import List, Optional\nfrom urllib.parse import urlparse\nfrom dataclasses import dataclass\n\nlogger = logging.getLogger(__name__)\n\n\n@dataclass\nclass ParsedURL:\n    \"\"\"解析后的 URL 数据\"\"\"\n    url: str\n    domain: str\n    path: str\n    query: Optional[str]\n    method: str = 'GET'  # 默认方法\n\n\ndef _parse_url(url: str) -> Optional[ParsedURL]:\n    \"\"\"\n    解析 URL 提取各个组件\n    \n    Args:\n        url: 完整 URL\n        \n    Returns:\n        ParsedURL 或 None（如果解析失败）\n    \"\"\"\n    try:\n        # 确保有协议\n        if not url.startswith(('http://', 'https://')):\n            url = f'http://{url}'\n        \n        parsed = urlparse(url)\n        \n        # 提取域名\n        domain = parsed.netloc\n        if not domain:\n            return None\n        \n        # 提取路径（默认为 /）\n        path = parsed.path if parsed.path else '/'\n        \n        # 提取查询参数\n        query = parsed.query if parsed.query else None\n        \n        # 重建完整 URL（标准化）\n        scheme = parsed.scheme if parsed.scheme else 'http'\n        full_url = f\"{scheme}://{domain}{path}\"\n        if query:\n            full_url = f\"{full_url}?{query}\"\n        \n        return ParsedURL(\n            url=full_url,\n            domain=domain,\n            path=path,\n            query=query\n        )\n    except Exception as e:\n        logger.debug(f\"解析 URL 失败 {url}: {e}\")\n        return None\n\n\n@task(\n    name='save_urls',\n    retries=1,\n    log_prints=True\n)\ndef save_urls_task(\n    urls_file: str,\n    scan_id: int,\n    target_id: int,\n    batch_size: int = 1000\n) -> dict:\n    \"\"\"\n    保存 URL 到数据库\n    \n    Args:\n        urls_file: URL 文件路径\n        scan_id: 扫描 ID\n        target_id: 目标 ID\n        batch_size: 批次大小\n        \n    Returns:\n        dict: {\n            'saved_urls': int,  # 保存的 URL 数量\n            'total_urls': int,  # 总 URL 数量\n            'skipped_urls': int  # 跳过的 URL 数量\n        }\n    \"\"\"\n    try:\n        logger.info(f\"开始保存 URL 到数据库 - 扫描ID: {scan_id}, 目标ID: {target_id}\")\n        \n        # 导入快照服务和 DTO\n        from apps.asset.services.snapshot import EndpointSnapshotsService\n        from apps.asset.dtos.snapshot import EndpointSnapshotDTO\n        \n        # 创建快照服务（统一负责快照 + 资产双写）\n        snapshots_service = EndpointSnapshotsService()\n        \n        # 按批次流式读取并解析 URL，避免一次性加载全部到内存\n        total_urls = 0\n        invalid_urls = 0\n        valid_urls = 0\n        saved_count = 0\n        skipped_count = 0\n        batch_index = 0\n        current_batch: list[EndpointSnapshotDTO] = []\n\n        with open(urls_file, 'r') as f:\n            for line in f:\n                url = line.strip()\n                if not url:\n                    continue\n\n                total_urls += 1\n\n                # 解析 URL\n                parsed = _parse_url(url)\n                if not parsed:\n                    invalid_urls += 1\n                    continue\n\n                valid_urls += 1\n                current_batch.append(\n                    EndpointSnapshotDTO(\n                        scan_id=scan_id,\n                        url=parsed.url,\n                        host=parsed.domain,  # 设置 host 字段\n                        target_id=target_id,  # 用于同步到资产表\n                    )\n                )\n\n                # 达到批次大小时写入数据库\n                if len(current_batch) >= batch_size:\n                    batch_index += 1\n                    try:\n                        snapshots_service.save_and_sync(current_batch)\n                        created_count = len(current_batch)\n                        saved_count += created_count\n                        logger.debug(f\"批次 {batch_index}: 保存 {created_count} 个 URL\")\n                    except Exception as e:\n                        logger.error(f\"批量保存失败（批次 {batch_index}）: {e}\")\n                        skipped_count += len(current_batch)\n                    finally:\n                        current_batch = []\n\n        # 处理最后不足一个批次的 URL\n        if current_batch:\n            batch_index += 1\n            try:\n                snapshots_service.save_and_sync(current_batch)\n                created_count = len(current_batch)\n                saved_count += created_count\n                logger.debug(f\"批次 {batch_index}: 保存 {created_count} 个 URL\")\n            except Exception as e:\n                logger.error(f\"批量保存失败（批次 {batch_index}）: {e}\")\n                skipped_count += len(current_batch)\n\n        if valid_urls == 0:\n            logger.warning(\"没有有效的 URL 需要保存\")\n            return {\n                'saved_urls': 0,\n                'total_urls': total_urls,\n                'skipped_urls': invalid_urls,\n            }\n\n        logger.info(\n            \"准备保存 %d 个有效 URL（总计: %d，无效: %d）\",\n            valid_urls,\n            total_urls,\n            invalid_urls,\n        )\n\n        # 计算最终跳过的数量（包括无效 URL 和保存失败的 URL）\n        final_skipped = total_urls - saved_count\n        \n        logger.info(\n            f\"✓ URL 保存完成 - 保存: {saved_count}, \"\n            f\"跳过: {final_skipped}（包括重复和无效）, 总计: {total_urls}\"\n        )\n        \n        return {\n            'saved_urls': saved_count,\n            'total_urls': total_urls,\n            'skipped_urls': final_skipped\n        }\n        \n    except Exception as e:\n        logger.error(f\"保存 URL 失败: {e}\", exc_info=True)\n        raise RuntimeError(f\"保存 URL 失败: {e}\") from e\n"
  },
  {
    "path": "backend/apps/scan/tasks/vuln_scan/__init__.py",
    "content": "\"\"\"漏洞扫描任务模块\n\n包含：\n- export_endpoints_task: 导出端点 URL 到文件\n- run_vuln_tool_task: 执行漏洞扫描工具（非流式）\n- run_and_stream_save_dalfox_vulns_task: Dalfox 流式执行并保存漏洞结果\n- run_and_stream_save_nuclei_vulns_task: Nuclei 流式执行并保存漏洞结果\n\"\"\"\n\nfrom .export_endpoints_task import export_endpoints_task\nfrom .run_vuln_tool_task import run_vuln_tool_task\nfrom .run_and_stream_save_dalfox_vulns_task import run_and_stream_save_dalfox_vulns_task\nfrom .run_and_stream_save_nuclei_vulns_task import run_and_stream_save_nuclei_vulns_task\n\n__all__ = [\n    \"export_endpoints_task\",\n    \"run_vuln_tool_task\",\n    \"run_and_stream_save_dalfox_vulns_task\",\n    \"run_and_stream_save_nuclei_vulns_task\",\n]\n"
  },
  {
    "path": "backend/apps/scan/tasks/vuln_scan/export_endpoints_task.py",
    "content": "\"\"\"导出 Endpoint URL 到文件的 Task\n\n支持两种模式：\n1. 传统模式（向后兼容）：使用 target_id 从数据库导出\n2. Provider 模式：使用 TargetProvider 从任意数据源导出\n\n数据源优先级（回退链，仅传统模式）：\n1. Endpoint.url - 最精细的 URL（含路径、参数等）\n2. WebSite.url - 站点级别 URL\n3. 默认生成 - 根据 Target 类型生成 http(s)://target_name\n\"\"\"\n\nimport logging\nfrom typing import Dict, Optional\nfrom pathlib import Path\n\nfrom prefect import task\n\nfrom apps.scan.services.target_export_service import (\n    export_urls_with_fallback,\n    DataSource,\n)\nfrom apps.scan.providers import TargetProvider, DatabaseTargetProvider\n\nlogger = logging.getLogger(__name__)\n\n\n@task(name=\"export_endpoints\")\ndef export_endpoints_task(\n    target_id: Optional[int] = None,\n    output_file: str = \"\",\n    provider: Optional[TargetProvider] = None,\n    batch_size: int = 1000,\n) -> Dict[str, object]:\n    \"\"\"导出目标下的所有 Endpoint URL 到文本文件。\n\n    支持两种模式：\n    1. 传统模式（向后兼容）：传入 target_id，从数据库导出\n    2. Provider 模式：传入 provider，从任意数据源导出\n\n    数据源优先级（回退链，仅传统模式）：\n    1. Endpoint 表 - 最精细的 URL（含路径、参数等）\n    2. WebSite 表 - 站点级别 URL\n    3. 默认生成 - 根据 Target 类型生成 http(s)://target_name\n\n    Args:\n        target_id: 目标 ID（传统模式，向后兼容）\n        output_file: 输出文件路径（绝对路径）\n        provider: TargetProvider 实例（新模式）\n        batch_size: 每次从数据库迭代的批大小\n\n    Returns:\n        dict: {\n            \"success\": bool,\n            \"output_file\": str,\n            \"total_count\": int,\n            \"source\": str,  # 数据来源: \"endpoint\" | \"website\" | \"default\" | \"none\" | \"provider\"\n        }\n    \"\"\"\n    # 参数验证：至少提供一个\n    if target_id is None and provider is None:\n        raise ValueError(\"必须提供 target_id 或 provider 参数之一\")\n    \n    # Provider 模式：使用 TargetProvider 导出\n    if provider is not None:\n        logger.info(\"使用 Provider 模式 - Provider: %s\", type(provider).__name__)\n        return _export_with_provider(output_file, provider)\n    \n    # 传统模式：使用 export_urls_with_fallback\n    logger.info(\"使用传统模式 - Target ID: %d\", target_id)\n    result = export_urls_with_fallback(\n        target_id=target_id,\n        output_file=output_file,\n        sources=[DataSource.ENDPOINT, DataSource.WEBSITE, DataSource.DEFAULT],\n        batch_size=batch_size,\n    )\n    \n    logger.info(\n        \"URL 导出完成 - source=%s, count=%d, tried=%s\",\n        result['source'], result['total_count'], result['tried_sources']\n    )\n    \n    return {\n        \"success\": result['success'],\n        \"output_file\": result['output_file'],\n        \"total_count\": result['total_count'],\n        \"source\": result['source'],\n    }\n\n\ndef _export_with_provider(output_file: str, provider: TargetProvider) -> Dict[str, object]:\n    \"\"\"使用 Provider 导出 URL\"\"\"\n    output_path = Path(output_file)\n    output_path.parent.mkdir(parents=True, exist_ok=True)\n    \n    total_count = 0\n    blacklist_filter = provider.get_blacklist_filter()\n    \n    with open(output_path, 'w', encoding='utf-8', buffering=8192) as f:\n        for url in provider.iter_urls():\n            # 应用黑名单过滤（如果有）\n            if blacklist_filter and not blacklist_filter.is_allowed(url):\n                continue\n            \n            f.write(f\"{url}\\n\")\n            total_count += 1\n            \n            if total_count % 1000 == 0:\n                logger.info(\"已导出 %d 个 URL...\", total_count)\n    \n    logger.info(\"✓ URL 导出完成 - 总数: %d, 文件: %s\", total_count, str(output_path))\n    \n    return {\n        \"success\": True,\n        \"output_file\": str(output_path),\n        \"total_count\": total_count,\n        \"source\": \"provider\",\n    }\n"
  },
  {
    "path": "backend/apps/scan/tasks/vuln_scan/run_and_stream_save_dalfox_vulns_task.py",
    "content": "\"\"\"基于 execute_stream 的 Dalfox XSS 漏洞流式扫描任务\n\n主要功能：\n    1. 实时执行 Dalfox 漏洞扫描命令\n    2. 流式处理命令输出，解析为统一的漏洞记录\n    3. 批量保存到 VulnerabilitySnapshot 表\n    4. 避免生成大量临时文件，提高效率\n\n数据流向：\n    命令执行 → 流式输出 → 实时解析 → 批量保存 → 数据库\n\n注意：\n    Dalfox 的 JSON 输出为数组形式：首行为 '['，每条记录一行，行尾带逗号，末行为 ']'\n    本任务在解析阶段会：\n        - 跳过 '['、']' 等控制行\n        - 去掉每条记录末尾的逗号，再做 json 解析\n\"\"\"\n\nimport logging\nimport json\nimport subprocess\nimport time\nfrom asyncio import CancelledError\nfrom pathlib import Path\nfrom dataclasses import dataclass\nfrom typing import Generator, Optional, TYPE_CHECKING\n\nfrom prefect import task\nfrom django.db import IntegrityError, OperationalError, DatabaseError\nfrom psycopg2 import InterfaceError\n\nfrom apps.common.definitions import VulnSeverity, ScanStatus\nfrom apps.asset.dtos.snapshot import VulnerabilitySnapshotDTO\nfrom apps.scan.utils import execute_stream\nfrom apps.scan.models import Scan\n\nif TYPE_CHECKING:\n    from apps.asset.services.snapshot import VulnerabilitySnapshotsService\n\nlogger = logging.getLogger(__name__)\n\n\n@dataclass\nclass ServiceSet:\n    \"\"\"Service 集合，用于依赖注入\n\n    提供漏洞扫描所需的 Service 实例，便于测试时注入 Mock 对象。\n    \"\"\"\n\n    snapshot: \"VulnerabilitySnapshotsService\"\n\n    @classmethod\n    def create_default(cls) -> \"ServiceSet\":\n        \"\"\"创建默认的 Service 集合\"\"\"\n        from apps.asset.services.snapshot import VulnerabilitySnapshotsService\n\n        return cls(snapshot=VulnerabilitySnapshotsService())\n\n\ndef _validate_task_parameters(cmd: str, target_id: int, scan_id: int, cwd: Optional[str]) -> None:\n    \"\"\"验证任务参数的有效性。\"\"\"\n    if not cmd or not cmd.strip():\n        raise ValueError(\"扫描命令不能为空\")\n\n    if target_id is None:\n        raise ValueError(\"target_id 不能为 None，必须指定目标ID\")\n\n    if scan_id is None:\n        raise ValueError(\"scan_id 不能为 None，必须指定扫描ID\")\n\n    if cwd and not Path(cwd).exists():\n        raise ValueError(f\"工作目录不存在: {cwd}\")\n\n\ndef _map_severity(raw: Optional[str]) -> str:\n    \"\"\"将 Dalfox 的严重性字符串映射为内部 VulnSeverity。\"\"\"\n    value = (raw or \"\").strip().lower()\n    mapping = {\n        \"info\": VulnSeverity.INFO,\n        \"information\": VulnSeverity.INFO,\n        \"low\": VulnSeverity.LOW,\n        \"medium\": VulnSeverity.MEDIUM,\n        \"med\": VulnSeverity.MEDIUM,\n        \"high\": VulnSeverity.HIGH,\n        \"critical\": VulnSeverity.CRITICAL,\n    }\n    return mapping.get(value, VulnSeverity.UNKNOWN)\n\n\ndef _parse_and_validate_line(line: str) -> Optional[dict]:\n    \"\"\"解析并验证单行 Dalfox JSON 输出。\n\n    处理步骤：\n        1. 去除首尾空白\n        2. 跳过 '['、']' 等数组控制行\n        3. 去掉行尾逗号\n        4. 解析 JSON 并验证必要字段\n    \"\"\"\n    try:\n        raw = line.strip()\n        if not raw:\n            return None\n\n        # 跳过数组控制行\n        if raw in (\"[\", \"]\", \"],\"):\n            return None\n\n        # 去掉尾部逗号\n        if raw.endswith(\",\"):\n            raw = raw[:-1].rstrip()\n\n        try:\n            data = json.loads(raw, strict=False)\n        except json.JSONDecodeError:\n            # logger.info(\"跳过非 JSON 行: %s\", raw)\n            return None\n\n        if not isinstance(data, dict):\n            logger.info(\"跳过非字典数据\")\n            return None\n\n        # Dalfox 输出中的 URL 字段为 data\n        url = (data.get(\"data\") or \"\").strip()\n        if not url:\n            logger.info(\"跳过缺少 URL 的记录\")\n            return None\n\n        severity = _map_severity(data.get(\"severity\"))\n\n        # 漏洞类型：根据 type 字段区分 XSS 类型\n        # R=Reflected, S=Stored, V=Verified\n        type_code = data.get(\"type\", \"\")\n        type_map = {\"R\": \"xss-reflected\", \"S\": \"xss-stored\", \"V\": \"xss-verified\"}\n        vuln_type = type_map.get(type_code, \"xss\")\n\n        # 简化描述：只用 message_str，完整信息在 raw_output\n        description = data.get(\"message_str\") or \"\"\n\n        return {\n            \"url\": url,\n            \"vuln_type\": vuln_type,\n            \"severity\": severity,\n            \"source\": \"dalfox\",\n            \"cvss_score\": None,\n            \"description\": description,\n            \"raw_output\": data,  # 存储解析后的 dict，而不是原始字符串\n        }\n\n    except Exception:\n        logger.info(\"跳过无法解析的行: %s\", line[:100])\n        return None\n\n\ndef _parse_dalfox_stream_output(\n    cmd: str,\n    tool_name: str,\n    cwd: Optional[str] = None,\n    shell: bool = False,\n    timeout: Optional[int] = None,\n    log_file: Optional[str] = None,\n) -> Generator[dict, None, None]:\n    \"\"\"流式解析 Dalfox 漏洞扫描命令输出。\"\"\"\n    logger.info(\"开始流式解析 Dalfox 漏洞扫描命令输出 - 命令: %s\", cmd)\n\n    total_lines = 0\n    error_lines = 0\n    valid_records = 0\n\n    try:\n        for line in execute_stream(\n            cmd=cmd,\n            tool_name=tool_name,\n            cwd=cwd,\n            shell=shell,\n            timeout=timeout,\n            log_file=log_file,\n        ):\n            total_lines += 1\n\n            record = _parse_and_validate_line(line)\n            if record is None:\n                error_lines += 1\n                continue\n\n            valid_records += 1\n            yield record\n\n            if valid_records % 100 == 0:\n                logger.info(\"已解析 %d 条有效漏洞记录...\", valid_records)\n\n    except subprocess.TimeoutExpired as e:\n        error_msg = f\"流式解析命令输出超时 - 命令执行超过 {timeout} 秒\"\n        logger.warning(error_msg)\n        raise RuntimeError(error_msg) from e\n    except Exception as e:\n        logger.error(\"流式解析 Dalfox 命令输出失败: %s\", e, exc_info=True)\n        raise\n\n    logger.info(\n        \"流式解析完成 - 总行数: %d, 有效记录: %d, 错误行数: %d\",\n        total_lines,\n        valid_records,\n        error_lines,\n    )\n\n\ndef _save_batch(\n    batch: list,\n    scan_id: int,\n    target_id: int,\n    batch_num: int,\n    services: ServiceSet,\n) -> int:\n    \"\"\"保存一个批次的漏洞记录到数据库（使用快照 Service，同步到资产表）。\"\"\"\n    if not batch:\n        logger.debug(\"批次 %d 为空，跳过处理\", batch_num)\n        return 0\n\n    snapshot_items = []\n    for record in batch:\n        try:\n            dto = VulnerabilitySnapshotDTO(\n                scan_id=scan_id,\n                target_id=target_id,\n                url=record[\"url\"],\n                vuln_type=record[\"vuln_type\"],\n                severity=str(record[\"severity\"]),\n                source=record[\"source\"],\n                cvss_score=record.get(\"cvss_score\"),\n                description=record.get(\"description\", \"\"),\n                raw_output=record.get(\"raw_output\", \"\"),\n            )\n            snapshot_items.append(dto)\n        except Exception as e:\n            logger.error(\"构建漏洞快照 DTO 失败: %s，记录: %s\", e, str(record)[:200])\n            continue\n\n    if snapshot_items:\n        services.snapshot.save_and_sync(snapshot_items)\n\n    logger.info(\"批次 %d: 保存了 %d 条漏洞记录（共 %d 条）\", batch_num, len(snapshot_items), len(batch))\n    return len(snapshot_items)\n\n\ndef _save_batch_with_retry(\n    batch: list,\n    scan_id: int,\n    target_id: int,\n    batch_num: int,\n    services: ServiceSet,\n    max_retries: int = 3,\n) -> dict:\n    \"\"\"保存一个批次的漏洞记录（带重试机制）。\"\"\"\n    for attempt in range(max_retries):\n        try:\n            created = _save_batch(batch, scan_id, target_id, batch_num, services)\n            return {\"success\": True, \"created_vulns\": created}\n\n        except IntegrityError as e:\n            logger.error(\"批次 %d 数据完整性错误，跳过: %s\", batch_num, str(e)[:100])\n            return {\"success\": False, \"created_vulns\": 0}\n\n        except (OperationalError, DatabaseError, InterfaceError) as e:\n            if attempt < max_retries - 1:\n                wait_time = 2 ** attempt\n                logger.warning(\n                    \"批次 %d 保存失败（第 %d 次尝试），%d秒后重试: %s\",\n                    batch_num,\n                    attempt + 1,\n                    wait_time,\n                    str(e)[:100],\n                )\n                time.sleep(wait_time)\n            else:\n                logger.error(\"批次 %d 保存失败（已重试 %d 次）: %s\", batch_num, max_retries, e)\n                return {\"success\": False, \"created_vulns\": 0}\n\n        except Exception as e:\n            logger.error(\"批次 %d 未知错误: %s\", batch_num, e, exc_info=True)\n            return {\"success\": False, \"created_vulns\": 0}\n\n    return {\"success\": False, \"created_vulns\": 0}\n\n\ndef _accumulate_batch_stats(total_stats: dict, batch_result: dict) -> None:\n    \"\"\"累加批次统计信息。\"\"\"\n    total_stats[\"created_vulns\"] += batch_result.get(\"created_vulns\", 0)\n\n\ndef _process_batch(\n    batch: list,\n    scan_id: int,\n    target_id: int,\n    batch_num: int,\n    total_stats: dict,\n    failed_batches: list,\n    services: ServiceSet,\n) -> None:\n    \"\"\"处理单个批次。\"\"\"\n    result = _save_batch_with_retry(batch, scan_id, target_id, batch_num, services)\n    _accumulate_batch_stats(total_stats, result)\n\n    if not result[\"success\"]:\n        failed_batches.append(batch_num)\n        logger.warning(\n            \"批次 %d 保存失败，但已累计统计信息：创建漏洞=%d\",\n            batch_num,\n            result.get(\"created_vulns\", 0),\n        )\n\n\ndef _process_records_in_batches(\n    data_generator,\n    scan_id: int,\n    target_id: int,\n    batch_size: int,\n    services: ServiceSet,\n) -> dict:\n    \"\"\"流式处理记录并分批保存。\"\"\"\n    total_records = 0\n    batch_num = 0\n    failed_batches = []\n    batch = []\n    cancel_check_interval = 50  # 每处理50条检查一次取消信号\n\n    total_stats = {\"created_vulns\": 0}\n\n    for record in data_generator:\n        if cancel_check_interval > 0 and (total_records % cancel_check_interval == 0):\n            _raise_if_cancelled(scan_id)\n\n        batch.append(record)\n        total_records += 1\n\n        if len(batch) >= batch_size:\n            batch_num += 1\n            _process_batch(batch, scan_id, target_id, batch_num, total_stats, failed_batches, services)\n            batch = []\n\n            if batch_num % 20 == 0:\n                logger.info(\"进度: 已处理 %d 批次，%d 条记录\", batch_num, total_records)\n\n    if batch:\n        batch_num += 1\n        _process_batch(batch, scan_id, target_id, batch_num, total_stats, failed_batches, services)\n\n    _raise_if_cancelled(scan_id)\n\n    if failed_batches:\n        error_msg = (\n            f\"流式保存漏洞扫描结果时出现失败批次，处理记录: {total_records}，\"\n            f\"失败批次: {failed_batches}\"\n        )\n        logger.warning(error_msg)\n        raise RuntimeError(error_msg)\n\n    return {\n        \"processed_records\": total_records,\n        \"batch_count\": batch_num,\n        **total_stats,\n    }\n\n\ndef _build_final_result(stats: dict) -> dict:\n    \"\"\"构建最终结果并输出日志。\"\"\"\n    logger.info(\n        \"✓ Dalfox 流式保存完成 - 处理记录: %d（%d 批次），创建漏洞: %d\",\n        stats[\"processed_records\"],\n        stats[\"batch_count\"],\n        stats[\"created_vulns\"],\n    )\n\n    if stats[\"created_vulns\"] == 0:\n        logger.warning(\n            \"⚠️  没有创建任何漏洞记录！可能原因：1) Dalfox 未发现漏洞 2) 输出格式问题 3) 重复数据被忽略\"\n        )\n\n    return {\n        \"processed_records\": stats[\"processed_records\"],\n        \"created_vulns\": stats[\"created_vulns\"],\n    }\n\n\ndef _cleanup_resources(data_generator) -> None:\n    \"\"\"清理任务资源。\"\"\"\n    if data_generator is None:\n        return\n\n    try:\n        data_generator.close()\n        logger.debug(\"已关闭数据生成器\")\n    except Exception as gen_close_error:\n        logger.error(\"关闭生成器时出错: %s\", gen_close_error)\n\n\n@task(\n    name=\"run_and_stream_save_dalfox_vulns\",\n    retries=0,\n    log_prints=True,\n)\ndef run_and_stream_save_dalfox_vulns_task(\n    cmd: str,\n    tool_name: str,\n    scan_id: int,\n    target_id: int,\n    cwd: Optional[str] = None,\n    shell: bool = False,\n    batch_size: int = 1, # Dalfox 漏洞结果本来就不会特别多，可以改小点实时写入\n    timeout: Optional[int] = None,\n    log_file: Optional[str] = None,\n) -> dict:\n    \"\"\"执行 Dalfox 漏洞扫描命令并流式保存结果到数据库。\"\"\"\n    logger.info(\n        \"开始执行 Dalfox 流式漏洞扫描任务 - target_id=%s, 超时=%s秒, 命令: %s\",\n        target_id,\n        timeout if timeout else \"无限制\",\n        cmd,\n    )\n\n    data_generator = None\n\n    try:\n        _validate_task_parameters(cmd, target_id, scan_id, cwd)\n\n        data_generator = _parse_dalfox_stream_output(\n            cmd=cmd,\n            tool_name=tool_name,\n            cwd=cwd,\n            shell=shell,\n            timeout=timeout,\n            log_file=log_file,\n        )\n        services = ServiceSet.create_default()\n\n        stats = _process_records_in_batches(\n            data_generator,\n            scan_id,\n            target_id,\n            batch_size,\n            services,\n        )\n\n        return _build_final_result(stats)\n\n    except CancelledError:\n        logger.warning(\n            \"⚠️ Dalfox 漏洞扫描任务检测到取消信号，正在终止 - scan_id=%s, target_id=%s\",\n            scan_id,\n            target_id,\n        )\n        raise\n\n    except subprocess.TimeoutExpired:\n        logger.warning(\n            \"⚠️ Dalfox 漏洞扫描任务超时 - target_id=%s, 超时=%s秒。超时前已解析的数据已保存到数据库。\",\n            target_id,\n            timeout,\n        )\n        raise\n\n    except Exception as e:\n        error_msg = f\"流式执行 Dalfox 漏洞扫描任务失败: {e}\"\n        logger.error(error_msg, exc_info=True)\n        raise RuntimeError(error_msg) from e\n\n    finally:\n        _cleanup_resources(data_generator)\n\n\ndef _raise_if_cancelled(scan_id: int) -> None:\n    \"\"\"检测扫描是否已请求取消，若是则抛出 CancelledError 以触发 Prefect 取消流程。\"\"\"\n    status = Scan.objects.filter(id=scan_id).values_list(\"status\", flat=True).first()\n    if status == ScanStatus.CANCELLED:\n        logger.warning(\"检测到取消信号，终止 Dalfox 漏洞扫描 - scan_id=%s\", scan_id)\n        raise CancelledError()\n"
  },
  {
    "path": "backend/apps/scan/tasks/vuln_scan/run_and_stream_save_nuclei_vulns_task.py",
    "content": "\"\"\"基于 execute_stream 的 Nuclei 漏洞流式扫描任务\n\n主要功能：\n    1. 实时执行 Nuclei 漏洞扫描命令\n    2. 流式处理命令输出，解析为统一的漏洞记录\n    3. 批量保存到 VulnerabilitySnapshot 表\n    4. 避免生成大量临时文件，提高效率\n\n数据流向：\n    命令执行 → 流式输出 → 实时解析 → 批量保存 → 数据库\n\n注意：\n    Nuclei 的 JSON 输出（-j 参数）为每行一条完整 JSON 对象。\n\"\"\"\n\nimport logging\nimport json\nimport subprocess\nimport time\nfrom asyncio import CancelledError\nfrom pathlib import Path\nfrom dataclasses import dataclass\nfrom typing import Generator, Optional, TYPE_CHECKING\n\nfrom prefect import task\nfrom django.db import IntegrityError, OperationalError, DatabaseError\nfrom psycopg2 import InterfaceError\n\nfrom apps.common.definitions import VulnSeverity, ScanStatus\nfrom apps.asset.dtos.snapshot import VulnerabilitySnapshotDTO\nfrom apps.scan.utils import execute_stream\nfrom apps.scan.models import Scan\n\nif TYPE_CHECKING:\n    from apps.asset.services.snapshot import VulnerabilitySnapshotsService\n\nlogger = logging.getLogger(__name__)\n\n\n@dataclass\nclass ServiceSet:\n    \"\"\"Service 集合，用于依赖注入\"\"\"\n\n    snapshot: \"VulnerabilitySnapshotsService\"\n\n    @classmethod\n    def create_default(cls) -> \"ServiceSet\":\n        \"\"\"创建默认的 Service 集合\"\"\"\n        from apps.asset.services.snapshot import VulnerabilitySnapshotsService\n\n        return cls(snapshot=VulnerabilitySnapshotsService())\n\n\ndef _validate_task_parameters(cmd: str, target_id: int, scan_id: int, cwd: Optional[str]) -> None:\n    \"\"\"验证任务参数的有效性。\"\"\"\n    if not cmd or not cmd.strip():\n        raise ValueError(\"扫描命令不能为空\")\n\n    if target_id is None:\n        raise ValueError(\"target_id 不能为 None，必须指定目标ID\")\n\n    if scan_id is None:\n        raise ValueError(\"scan_id 不能为 None，必须指定扫描ID\")\n\n    if cwd and not Path(cwd).exists():\n        raise ValueError(f\"工作目录不存在: {cwd}\")\n\n\ndef _map_severity(raw: Optional[str]) -> str:\n    \"\"\"将 Nuclei 的严重性字符串映射为内部 VulnSeverity。\"\"\"\n    value = (raw or \"\").strip().lower()\n    mapping = {\n        \"info\": VulnSeverity.INFO,\n        \"information\": VulnSeverity.INFO,\n        \"low\": VulnSeverity.LOW,\n        \"medium\": VulnSeverity.MEDIUM,\n        \"high\": VulnSeverity.HIGH,\n        \"critical\": VulnSeverity.CRITICAL,\n    }\n    return mapping.get(value, VulnSeverity.UNKNOWN)\n\n\ndef _parse_and_validate_line(line: str) -> Optional[dict]:\n    \"\"\"解析并验证单行 Nuclei JSON 输出。\n\n    Nuclei JSON 输出格式（每行一条完整 JSON）：\n    {\n        \"template\": \"dns/caa-fingerprint.yaml\",\n        \"template-id\": \"caa-fingerprint\",\n        \"info\": {\n            \"name\": \"CAA Record\",\n            \"severity\": \"info\",\n            \"description\": \"...\",\n            \"tags\": [\"dns\", \"caa\"],\n            \"classification\": {\"cve-id\": null, \"cwe-id\": [\"cwe-200\"]}\n        },\n        \"host\": \"test.yyhuni.rest\",\n        \"matched-at\": \"test.yyhuni.rest\",\n        \"type\": \"dns\",\n        \"timestamp\": \"2025-12-04T17:33:31.903288+08:00\",\n        \"matcher-status\": true\n    }\n    \"\"\"\n    try:\n        raw = line.strip()\n        if not raw:\n            return None\n\n        try:\n            # strict=False 允许 JSON 中包含控制字符（如换行符、制表符等）\n            # Nuclei 输出的 response 字段可能包含原始 HTTP 响应，其中有控制字符\n            data = json.loads(raw, strict=False)\n        except json.JSONDecodeError:\n            # logger.info(\"跳过非 JSON 行: %s\", raw)\n            return None\n\n        if not isinstance(data, dict):\n            logger.info(\"跳过非字典数据\")\n            return None\n\n        # 提取 info 字段\n        info = data.get(\"info\", {})\n        if not isinstance(info, dict):\n            info = {}\n\n        # URL: 优先用 matched-at，其次用 host\n        url = data.get(\"matched-at\") or data.get(\"host\") or \"\"\n        if not url:\n            logger.info(\"跳过缺少 URL 的记录: %s\", data.get(\"template-id\", \"unknown\"))\n            return None\n\n        # 严重性\n        severity = _map_severity(info.get(\"severity\"))\n\n        # 漏洞类型：使用 template-id 作为类型标识\n        vuln_type = data.get(\"template-id\", \"unknown\")\n\n        # 简化描述：只用 info.name，完整信息在 raw_output\n        description = info.get(\"name\", \"\")\n\n        return {\n            \"url\": url,\n            \"vuln_type\": vuln_type,\n            \"severity\": severity,\n            \"source\": \"nuclei\",\n            \"cvss_score\": None,\n            \"description\": description,\n            \"raw_output\": data,  # 存储解析后的 dict，而不是原始字符串\n        }\n\n    except Exception:\n        logger.info(\"跳过无法解析的行: %s\", line[:100])\n        return None\n\n\ndef _parse_nuclei_stream_output(\n    cmd: str,\n    tool_name: str,\n    cwd: Optional[str] = None,\n    shell: bool = False,\n    timeout: Optional[int] = None,\n    log_file: Optional[str] = None,\n) -> Generator[dict, None, None]:\n    \"\"\"流式解析 Nuclei 漏洞扫描命令输出。\"\"\"\n    logger.info(\"开始流式解析 Nuclei 漏洞扫描命令输出 - 命令: %s\", cmd)\n\n    total_lines = 0\n    error_lines = 0\n    valid_records = 0\n\n    try:\n        for line in execute_stream(\n            cmd=cmd,\n            tool_name=tool_name,\n            cwd=cwd,\n            shell=shell,\n            timeout=timeout,\n            log_file=log_file,\n        ):\n            total_lines += 1\n\n            record = _parse_and_validate_line(line)\n            if record is None:\n                error_lines += 1\n                continue\n\n            valid_records += 1\n            yield record\n\n            if valid_records % 100 == 0:\n                logger.info(\"已解析 %d 条有效漏洞记录...\", valid_records)\n\n    except subprocess.TimeoutExpired as e:\n        error_msg = f\"流式解析命令输出超时 - 命令执行超过 {timeout} 秒\"\n        logger.warning(error_msg)\n        raise RuntimeError(error_msg) from e\n    except Exception as e:\n        logger.error(\"流式解析 Nuclei 命令输出失败: %s\", e, exc_info=True)\n        raise\n\n    logger.info(\n        \"流式解析完成 - 总行数: %d, 有效记录: %d, 错误行数: %d\",\n        total_lines,\n        valid_records,\n        error_lines,\n    )\n\n\ndef _save_batch(\n    batch: list,\n    scan_id: int,\n    target_id: int,\n    batch_num: int,\n    services: ServiceSet,\n) -> int:\n    \"\"\"保存一个批次的漏洞记录到数据库。\"\"\"\n    if not batch:\n        logger.debug(\"批次 %d 为空，跳过处理\", batch_num)\n        return 0\n\n    snapshot_items = []\n    for record in batch:\n        try:\n            dto = VulnerabilitySnapshotDTO(\n                scan_id=scan_id,\n                target_id=target_id,\n                url=record[\"url\"],\n                vuln_type=record[\"vuln_type\"],\n                severity=str(record[\"severity\"]),\n                source=record[\"source\"],\n                cvss_score=record.get(\"cvss_score\"),\n                description=record.get(\"description\", \"\"),\n                raw_output=record.get(\"raw_output\", \"\"),\n            )\n            snapshot_items.append(dto)\n        except Exception as e:\n            logger.error(\"构建漏洞快照 DTO 失败: %s，记录: %s\", e, str(record)[:200])\n            continue\n\n    if snapshot_items:\n        services.snapshot.save_and_sync(snapshot_items)\n\n    logger.info(\"批次 %d: 保存了 %d 条漏洞记录（共 %d 条）\", batch_num, len(snapshot_items), len(batch))\n    return len(snapshot_items)\n\n\ndef _save_batch_with_retry(\n    batch: list,\n    scan_id: int,\n    target_id: int,\n    batch_num: int,\n    services: ServiceSet,\n    max_retries: int = 3,\n) -> dict:\n    \"\"\"保存一个批次的漏洞记录（带重试机制）。\"\"\"\n    for attempt in range(max_retries):\n        try:\n            created = _save_batch(batch, scan_id, target_id, batch_num, services)\n            return {\"success\": True, \"created_vulns\": created}\n\n        except IntegrityError as e:\n            logger.error(\"批次 %d 数据完整性错误，跳过: %s\", batch_num, str(e)[:100])\n            return {\"success\": False, \"created_vulns\": 0}\n\n        except (OperationalError, DatabaseError, InterfaceError) as e:\n            if attempt < max_retries - 1:\n                wait_time = 2 ** attempt\n                logger.warning(\n                    \"批次 %d 保存失败（第 %d 次尝试），%d秒后重试: %s\",\n                    batch_num,\n                    attempt + 1,\n                    wait_time,\n                    str(e)[:100],\n                )\n                time.sleep(wait_time)\n            else:\n                logger.error(\"批次 %d 保存失败（已重试 %d 次）: %s\", batch_num, max_retries, e)\n                return {\"success\": False, \"created_vulns\": 0}\n\n        except Exception as e:\n            logger.error(\"批次 %d 未知错误: %s\", batch_num, e, exc_info=True)\n            return {\"success\": False, \"created_vulns\": 0}\n\n    return {\"success\": False, \"created_vulns\": 0}\n\n\ndef _accumulate_batch_stats(total_stats: dict, batch_result: dict) -> None:\n    \"\"\"累加批次统计信息。\"\"\"\n    total_stats[\"created_vulns\"] += batch_result.get(\"created_vulns\", 0)\n\n\ndef _process_batch(\n    batch: list,\n    scan_id: int,\n    target_id: int,\n    batch_num: int,\n    total_stats: dict,\n    failed_batches: list,\n    services: ServiceSet,\n) -> None:\n    \"\"\"处理单个批次。\"\"\"\n    result = _save_batch_with_retry(batch, scan_id, target_id, batch_num, services)\n    _accumulate_batch_stats(total_stats, result)\n\n    if not result[\"success\"]:\n        failed_batches.append(batch_num)\n        logger.warning(\n            \"批次 %d 保存失败，但已累计统计信息：创建漏洞=%d\",\n            batch_num,\n            result.get(\"created_vulns\", 0),\n        )\n\n\ndef _process_records_in_batches(\n    data_generator,\n    scan_id: int,\n    target_id: int,\n    batch_size: int,\n    services: ServiceSet,\n) -> dict:\n    \"\"\"流式处理记录并分批保存。\"\"\"\n    total_records = 0\n    batch_num = 0\n    failed_batches = []\n    batch = []\n    cancel_check_interval = 50  # 每处理50条检查一次取消信号\n\n    total_stats = {\"created_vulns\": 0}\n\n    for record in data_generator:\n        if cancel_check_interval > 0 and (total_records % cancel_check_interval == 0):\n            _raise_if_cancelled(scan_id)\n\n        batch.append(record)\n        total_records += 1\n\n        if len(batch) >= batch_size:\n            batch_num += 1\n            _process_batch(batch, scan_id, target_id, batch_num, total_stats, failed_batches, services)\n            batch = []\n\n            if batch_num % 20 == 0:\n                logger.info(\"进度: 已处理 %d 批次，%d 条记录\", batch_num, total_records)\n\n    if batch:\n        batch_num += 1\n        _process_batch(batch, scan_id, target_id, batch_num, total_stats, failed_batches, services)\n\n    _raise_if_cancelled(scan_id)\n\n    if failed_batches:\n        error_msg = (\n            f\"流式保存漏洞扫描结果时出现失败批次，处理记录: {total_records}，\"\n            f\"失败批次: {failed_batches}\"\n        )\n        logger.warning(error_msg)\n        raise RuntimeError(error_msg)\n\n    return {\n        \"processed_records\": total_records,\n        \"batch_count\": batch_num,\n        **total_stats,\n    }\n\n\ndef _build_final_result(stats: dict) -> dict:\n    \"\"\"构建最终结果并输出日志。\"\"\"\n    logger.info(\n        \"✓ Nuclei 流式保存完成 - 处理记录: %d（%d 批次），创建漏洞: %d\",\n        stats[\"processed_records\"],\n        stats[\"batch_count\"],\n        stats[\"created_vulns\"],\n    )\n\n    if stats[\"created_vulns\"] == 0:\n        logger.warning(\n            \"⚠️  没有创建任何漏洞记录！可能原因：1) Nuclei 未发现漏洞 2) 输出格式问题 3) 重复数据被忽略\"\n        )\n\n    return {\n        \"processed_records\": stats[\"processed_records\"],\n        \"created_vulns\": stats[\"created_vulns\"],\n    }\n\n\ndef _cleanup_resources(data_generator) -> None:\n    \"\"\"清理任务资源。\"\"\"\n    if data_generator is None:\n        return\n\n    try:\n        data_generator.close()\n        logger.debug(\"已关闭数据生成器\")\n    except Exception as gen_close_error:\n        logger.error(\"关闭生成器时出错: %s\", gen_close_error)\n\n\n@task(\n    name=\"run_and_stream_save_nuclei_vulns\",\n    retries=0,\n    log_prints=True,\n)\ndef run_and_stream_save_nuclei_vulns_task(\n    cmd: str,\n    tool_name: str,\n    scan_id: int,\n    target_id: int,\n    cwd: Optional[str] = None,\n    shell: bool = False,\n    batch_size: int = 10,  # Nuclei 结果可能较多，适当增大批次\n    timeout: Optional[int] = None,\n    log_file: Optional[str] = None,\n) -> dict:\n    \"\"\"执行 Nuclei 漏洞扫描命令并流式保存结果到数据库。\"\"\"\n    logger.info(\n        \"开始执行 Nuclei 流式漏洞扫描任务 - target_id=%s, 超时=%s秒, 命令: %s\",\n        target_id,\n        timeout if timeout else \"无限制\",\n        cmd,\n    )\n\n    data_generator = None\n\n    try:\n        _validate_task_parameters(cmd, target_id, scan_id, cwd)\n\n        data_generator = _parse_nuclei_stream_output(\n            cmd=cmd,\n            tool_name=tool_name,\n            cwd=cwd,\n            shell=shell,\n            timeout=timeout,\n            log_file=log_file,\n        )\n        services = ServiceSet.create_default()\n\n        stats = _process_records_in_batches(\n            data_generator,\n            scan_id,\n            target_id,\n            batch_size,\n            services,\n        )\n\n        return _build_final_result(stats)\n\n    except CancelledError:\n        logger.warning(\n            \"⚠️ Nuclei 漏洞扫描任务检测到取消信号，正在终止 - scan_id=%s, target_id=%s\",\n            scan_id,\n            target_id,\n        )\n        raise\n\n    except subprocess.TimeoutExpired:\n        logger.warning(\n            \"⚠️ Nuclei 漏洞扫描任务超时 - target_id=%s, 超时=%s秒。超时前已解析的数据已保存到数据库。\",\n            target_id,\n            timeout,\n        )\n        raise\n\n    except Exception as e:\n        error_msg = f\"流式执行 Nuclei 漏洞扫描任务失败: {e}\"\n        logger.error(error_msg, exc_info=True)\n        raise RuntimeError(error_msg) from e\n\n    finally:\n        _cleanup_resources(data_generator)\n\n\ndef _raise_if_cancelled(scan_id: int) -> None:\n    \"\"\"检测扫描是否已请求取消，若是则抛出 CancelledError 以触发 Prefect 取消流程。\"\"\"\n    status = Scan.objects.filter(id=scan_id).values_list(\"status\", flat=True).first()\n    if status == ScanStatus.CANCELLED:\n        logger.warning(\"检测到取消信号，终止 Nuclei 漏洞扫描 - scan_id=%s\", scan_id)\n        raise CancelledError()\n"
  },
  {
    "path": "backend/apps/scan/tasks/vuln_scan/run_vuln_tool_task.py",
    "content": "\"\"\"执行漏洞扫描工具任务\n\n负责运行单个漏洞扫描工具（目前主要是 Dalfox XSS）。\n\n注意：\n- 命令构建在 Flow 层完成，这里只负责执行已经构建好的命令\n- 使用通用 execute_and_wait 统一管理超时和日志\n\"\"\"\n\nimport logging\nfrom typing import Dict\n\nfrom prefect import task\n\nfrom apps.scan.utils import execute_and_wait\n\nlogger = logging.getLogger(__name__)\n\n\n@task(\n    name=\"run_vuln_tool\",\n    retries=0,\n    log_prints=True,\n)\ndef run_vuln_tool_task(\n    tool_name: str,\n    command: str,\n    timeout: int,\n    log_file: str | None = None,\n) -> Dict[str, object]:\n    \"\"\"执行单个漏洞扫描工具。\n\n    Args:\n        tool_name: 工具名称（如 \"dalfox_xss\"）\n        command: 完整命令字符串（由 Flow 层构建）\n        timeout: 命令执行超时时间（秒）\n        log_file: 日志文件路径\n\n    Returns:\n        dict: execute_and_wait 的返回结果字典，并附加 tool 字段。\n    \"\"\"\n    try:\n        logger.info(\"开始执行漏洞扫描工具 %s\", tool_name)\n\n        result = execute_and_wait(\n            tool_name=tool_name,\n            command=command,\n            timeout=timeout,\n            log_file=log_file,\n        )\n\n        # 保持与 execute_and_wait 一致的字段，并额外附加工具名\n        return {\n            \"tool\": tool_name,\n            **result,\n        }\n\n    except RuntimeError:\n        # execute_and_wait 已经记录详细日志，这里直接向上抛出\n        raise\n    except Exception as e:\n        error_msg = f\"漏洞扫描工具 {tool_name} 执行异常: {e}\"\n        logger.error(error_msg, exc_info=True)\n        raise\n"
  },
  {
    "path": "backend/apps/scan/urls.py",
    "content": "from django.urls import path, include\nfrom rest_framework.routers import DefaultRouter\nfrom .views import ScanViewSet, ScheduledScanViewSet, ScanLogListView, SubfinderProviderSettingsView\nfrom .notifications.views import notification_callback\nfrom apps.asset.views import (\n    SubdomainSnapshotViewSet, WebsiteSnapshotViewSet, DirectorySnapshotViewSet,\n    EndpointSnapshotViewSet, HostPortMappingSnapshotViewSet, VulnerabilitySnapshotViewSet,\n    ScreenshotSnapshotViewSet\n)\n\n# 创建路由器\nrouter = DefaultRouter()\n\n# 注册 ViewSet\nrouter.register(r'scans', ScanViewSet, basename='scan')\nrouter.register(r'scheduled-scans', ScheduledScanViewSet, basename='scheduled-scan')\n\n# Scan 下的嵌套快照路由\nscan_subdomains_list = SubdomainSnapshotViewSet.as_view({'get': 'list'})\nscan_subdomains_export = SubdomainSnapshotViewSet.as_view({'get': 'export'})\nscan_websites_list = WebsiteSnapshotViewSet.as_view({'get': 'list'})\nscan_websites_export = WebsiteSnapshotViewSet.as_view({'get': 'export'})\nscan_directories_list = DirectorySnapshotViewSet.as_view({'get': 'list'})\nscan_directories_export = DirectorySnapshotViewSet.as_view({'get': 'export'})\nscan_endpoints_list = EndpointSnapshotViewSet.as_view({'get': 'list'})\nscan_endpoints_export = EndpointSnapshotViewSet.as_view({'get': 'export'})\nscan_ip_addresses_list = HostPortMappingSnapshotViewSet.as_view({'get': 'list'})\nscan_ip_addresses_export = HostPortMappingSnapshotViewSet.as_view({'get': 'export'})\nscan_vulnerabilities_list = VulnerabilitySnapshotViewSet.as_view({'get': 'list'})\nscan_screenshots_list = ScreenshotSnapshotViewSet.as_view({'get': 'list'})\nscan_screenshots_image = ScreenshotSnapshotViewSet.as_view({'get': 'image'})\n\nurlpatterns = [\n    path('', include(router.urls)),\n    # Worker 回调 API\n    path('callbacks/notification/', notification_callback, name='notification-callback'),\n    # API Key 配置\n    path('settings/api-keys/', SubfinderProviderSettingsView.as_view(), name='subfinder-provider-settings'),\n    # 扫描日志 API\n    path('scans/<int:scan_id>/logs/', ScanLogListView.as_view(), name='scan-logs-list'),\n    # 嵌套路由：/api/scans/{scan_pk}/xxx/\n    path('scans/<int:scan_pk>/subdomains/', scan_subdomains_list, name='scan-subdomains-list'),\n    path('scans/<int:scan_pk>/subdomains/export/', scan_subdomains_export, name='scan-subdomains-export'),\n    path('scans/<int:scan_pk>/websites/', scan_websites_list, name='scan-websites-list'),\n    path('scans/<int:scan_pk>/websites/export/', scan_websites_export, name='scan-websites-export'),\n    path('scans/<int:scan_pk>/directories/', scan_directories_list, name='scan-directories-list'),\n    path('scans/<int:scan_pk>/directories/export/', scan_directories_export, name='scan-directories-export'),\n    path('scans/<int:scan_pk>/endpoints/', scan_endpoints_list, name='scan-endpoints-list'),\n    path('scans/<int:scan_pk>/endpoints/export/', scan_endpoints_export, name='scan-endpoints-export'),\n    path('scans/<int:scan_pk>/ip-addresses/', scan_ip_addresses_list, name='scan-ip-addresses-list'),\n    path('scans/<int:scan_pk>/ip-addresses/export/', scan_ip_addresses_export, name='scan-ip-addresses-export'),\n    path('scans/<int:scan_pk>/vulnerabilities/', scan_vulnerabilities_list, name='scan-vulnerabilities-list'),\n    path('scans/<int:scan_pk>/screenshots/', scan_screenshots_list, name='scan-screenshots-list'),\n    path('scans/<int:scan_pk>/screenshots/<int:pk>/image/', scan_screenshots_image, name='scan-screenshots-image'),\n]\n\n"
  },
  {
    "path": "backend/apps/scan/utils/__init__.py",
    "content": "\"\"\"\n扫描模块工具包\n\n提供扫描相关的工具函数。\n\"\"\"\n\nfrom . import config_parser\nfrom .command_builder import build_scan_command\nfrom .command_executor import execute_and_wait, execute_stream\nfrom .directory_cleanup import remove_directory\nfrom .nuclei_helpers import ensure_nuclei_templates_local\nfrom .performance import CommandPerformanceTracker, FlowPerformanceTracker\nfrom .system_load import check_system_load, wait_for_system_load\nfrom .user_logger import user_log\nfrom .wordlist_helpers import ensure_wordlist_local\nfrom .workspace_utils import setup_scan_directory, setup_scan_workspace\n\n__all__ = [\n    # 目录清理\n    'remove_directory',\n    # 工作空间\n    'setup_scan_workspace',\n    'setup_scan_directory',\n    # 命令构建\n    'build_scan_command',\n    # 命令执行\n    'execute_and_wait',\n    'execute_stream',\n    # 系统负载\n    'wait_for_system_load',\n    'check_system_load',\n    # 字典文件\n    'ensure_wordlist_local',\n    # Nuclei 模板\n    'ensure_nuclei_templates_local',\n    # 性能监控\n    'FlowPerformanceTracker',\n    'CommandPerformanceTracker',\n    # 扫描日志\n    'user_log',\n    # 配置解析\n    'config_parser',\n]\n"
  },
  {
    "path": "backend/apps/scan/utils/command_builder.py",
    "content": "\"\"\"\n简化的命令构建工具\n使用 Python 原生 f-string 和条件拼接，零依赖，性能更好。\n\"\"\"\n\nimport logging\nfrom typing import Dict, Any\n\nlogger = logging.getLogger(__name__)\n\n\ndef build_scan_command(\n    tool_name: str,\n    scan_type: str,\n    command_params: Dict[str, Any],\n    tool_config: Dict[str, Any]\n) -> str:\n    \"\"\"\n    构建扫描工具命令（使用 f-string）\n    \n    Args:\n        tool_name: 工具名称（如 'subfinder'）\n        scan_type: 扫描类型（如 'subdomain_discovery'）\n        command_params: 命令占位符参数\n            - domain: 目标域名\n            - domains_file: 域名列表文件（用于端口扫描）\n            - url_file: URL列表文件（用于站点扫描）\n            - target_file: 目标文件路径（通用）\n            - output_file: 输出文件路径\n        tool_config: 工具配置参数（包含可选参数）\n            - threads: 线程数\n            - timeout: 超时时间（秒）\n            - 其他可选参数...\n    \n    Returns:\n        完整的命令字符串\n    \n    Example:\n        >>> build_scan_command(\n        ...     tool_name='subfinder',\n        ...     scan_type='subdomain_discovery',\n        ...     command_params={'domain': 'example.com', 'output_file': '/tmp/out.txt'},\n        ...     tool_config={'threads': 10}\n        ... )\n        'subfinder -d example.com -o /tmp/out.txt -silent -t 10'\n    \"\"\"\n    from apps.scan.configs.command_templates import get_command_template, SCAN_TOOLS_BASE_PATH\n    \n    # 获取命令模板\n    template = get_command_template(scan_type, tool_name)\n    if not template:\n        raise ValueError(f\"未找到工具 {tool_name} 的命令模板（扫描类型: {scan_type}）\")\n    \n    # 合并所有参数，并将中划线统一转成下划线\n    # 规范约定：\n    #   - 配置文件（YAML）：参数名用中划线，贴近 CLI 原生参数（如 rate-limit, request-timeout）\n    #   - 模板文件（Python）：参数名用下划线，符合 str.format() 占位符语法要求\n    #   - 此处自动转换：rate-limit → rate_limit\n    def normalize_key(k):\n        return k.replace('-', '_') if isinstance(k, str) else k\n    \n    all_params = {\n        'scan_tools_base': SCAN_TOOLS_BASE_PATH,\n        **{normalize_key(k): v for k, v in command_params.items()},\n        **{normalize_key(k): v for k, v in tool_config.items()}\n    }\n\n    # nuclei 特殊处理：要求 template_args 必填（支持多 -t），避免格式化缺失\n    if tool_name == \"nuclei\":\n        if not all_params.get(\"template_args\"):\n            raise ValueError(\"nuclei 命令构建缺少 template_args（请检查模板仓库列表配置）\")\n    \n    try:\n        # 1. 构建基础命令\n        base_command = template['base'].format(**all_params)\n        \n        # 2. 拼接可选参数\n        optional_parts = []\n        for param_name, flag_template in template.get('optional', {}).items():\n            # 检查参数是否存在且有值\n            if param_name in all_params and all_params[param_name]:\n                optional_parts.append(flag_template.format(**all_params))\n        \n        # 3. 组合完整命令\n        full_command = base_command\n        if optional_parts:\n            full_command += ' ' + ' '.join(optional_parts)\n        \n        # 4. 清理多余空白\n        import re\n        cleaned_command = re.sub(r'\\s+', ' ', full_command).strip()\n        \n        return cleaned_command\n        \n    except KeyError as e:\n        raise ValueError(\n            f\"命令构建失败：缺少必需参数 {e}\\n\"\n            f\"模板: {template}\\n\"\n            f\"提供的参数: {list(all_params.keys())}\"\n        )\n    except Exception as e:\n        raise ValueError(\n            f\"命令构建失败: {e}\\n\"\n            f\"模板: {template}\\n\"\n            f\"提供的参数: {list(all_params.keys())}\"\n        )\n"
  },
  {
    "path": "backend/apps/scan/utils/command_executor.py",
    "content": "\"\"\"\n命令执行器\n\n统一管理所有命令执行方式：\n- execute_and_wait(): 等待式执行，适合输出到文件的工具\n- execute_stream(): 流式执行，适合实时处理输出的工具\n\n性能监控：\n- 自动记录命令执行耗时、内存使用\n- 输出到 performance logger\n\"\"\"\n\nimport logging\nimport os\nimport re\nimport signal\nimport subprocess\nimport threading\nimport time\nfrom collections import deque\nfrom datetime import datetime\nfrom pathlib import Path\nfrom typing import Dict, Any, Optional, Generator\n\nfrom django.conf import settings\n\ntry:\n    # 可选依赖：用于根据 CPU / 内存负载做动态并发控制\n    import psutil\nexcept ImportError:  # 运行环境缺少 psutil 时降级为无动态负载控制\n    psutil = None\n\nlogger = logging.getLogger(__name__)\n\n# 延迟导入，避免循环依赖\ndef _get_command_tracker(tool_name: str, command: str):\n    \"\"\"获取命令性能追踪器（延迟导入）\"\"\"\n    from apps.scan.utils.performance import CommandPerformanceTracker\n    return CommandPerformanceTracker(tool_name, command)\n\n# 常量定义\nGRACEFUL_SHUTDOWN_TIMEOUT = 5  # 进程优雅退出的超时时间（秒）\nMAX_LOG_TAIL_LINES = 1000  # 日志文件读取的最大行数\n\n# 命令日志配置（从环境变量读取）\n# ENABLE_COMMAND_LOGGING=true: 输出所有内容（命令输出+错误）到log_file_path\n# ENABLE_COMMAND_LOGGING=false: 只输出错误到log_file_path\nENABLE_COMMAND_LOGGING = getattr(settings, 'ENABLE_COMMAND_LOGGING', True)\n\n# 动态并发控制阈值（可在 Django settings 中覆盖）\nSCAN_CPU_HIGH = getattr(settings, 'SCAN_CPU_HIGH', 90.0)   # CPU 高水位（百分比）\nSCAN_MEM_HIGH = getattr(settings, 'SCAN_MEM_HIGH', 80.0)   # 内存高水位（百分比）\nSCAN_LOAD_CHECK_INTERVAL = getattr(settings, 'SCAN_LOAD_CHECK_INTERVAL', 180)  # 负载检查间隔（秒）\nSCAN_COMMAND_STARTUP_DELAY = getattr(settings, 'SCAN_COMMAND_STARTUP_DELAY', 5)  # 命令启动前等待（秒）\n\n_ACTIVE_COMMANDS = 0\n_ACTIVE_COMMANDS_LOCK = threading.Lock()\n\n\ndef _wait_for_system_load() -> None:\n    \"\"\"根据当前机器 CPU/内存负载，决定是否暂缓启动新的外部命令。\"\"\"\n    \n    # 1. 先强制等待，让之前启动的命令有时间消耗资源，避免并发启动导致延迟OOM\n    if SCAN_COMMAND_STARTUP_DELAY > 0:\n        time.sleep(SCAN_COMMAND_STARTUP_DELAY)\n    \n    # 2. 再检查系统负载\n    if psutil is None:\n        raise ImportError(\"psutil 未安装，无法进行负载感知控制\")\n\n    while True:\n        cpu = psutil.cpu_percent(interval=0.5)\n        mem = psutil.virtual_memory().percent\n\n        if cpu < SCAN_CPU_HIGH and mem < SCAN_MEM_HIGH:\n            return\n\n        logger.info(\n            \"系统负载较高，任务将排队执行，防止oom: cpu=%.1f%% (阈值 %.1f%%), mem=%.1f%% (阈值 %.1f%%)\",\n            cpu,\n            SCAN_CPU_HIGH,\n            mem,\n            SCAN_MEM_HIGH,\n        )\n        time.sleep(SCAN_LOAD_CHECK_INTERVAL)\n\n\nclass CommandExecutor:\n    \"\"\"\n    统一的命令执行器\n    \n    提供两种执行模式：\n    1. execute_and_wait() - 等待式执行（适合文件输出）\n    2. execute_stream() - 流式执行（适合实时处理）\n    \"\"\"\n    \n    def _write_command_start_header(self, log_file: Path, tool_name: str, command: str, timeout: Optional[int] = None):\n        \"\"\"\n        在命令开始时写入头部信息\n        \"\"\"\n        if not ENABLE_COMMAND_LOGGING:\n            return\n        \n        try:\n            with open(log_file, 'w', encoding='utf-8') as f:\n                f.write(f\"$ {command}\\n\")\n                f.write(f\"{'='*60}\\n\")\n                f.write(f\"# 工具: {tool_name}\\n\")\n                f.write(f\"# 开始时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\\n\")\n                if timeout is not None:\n                    f.write(f\"# 超时限制: {timeout}秒\\n\")\n                f.write(f\"# 状态: 执行中...\\n\")\n                f.write(f\"{'='*60}\\n\\n\")\n        except Exception as e:\n            logger.error(f\"写入命令开始信息失败: {e}\")\n    \n    def _write_command_end_footer(self, log_file: Path, tool_name: str, duration: float, returncode: int, success: bool):\n        \"\"\"\n        在命令结束时追加尾部信息\n        \"\"\"\n        if not ENABLE_COMMAND_LOGGING:\n            return\n        \n        try:\n            with open(log_file, 'a', encoding='utf-8') as f:\n                f.write(f\"\\n{'='*60}\\n\")\n                f.write(f\"# 结束时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\\n\")\n                f.write(f\"# 执行耗时: {duration:.2f}秒\\n\")\n                f.write(f\"# 退出码: {returncode}\\n\")\n                f.write(f\"# 状态: {'✓ 成功' if success else '✗ 失败'}\\n\")\n                f.write(f\"{'='*60}\\n\")\n            \n            logger.info(f\"📝 {tool_name} 日志: {log_file} (耗时: {duration:.2f}秒)\")\n        except Exception as e:\n            logger.error(f\"写入命令结束信息失败: {e}\")\n    \n    def _clean_output_line(self, line: str, suffix_char: Optional[str] = None) -> Optional[str]:\n        \"\"\"\n        统一的输出行清理处理\n        \n        处理顺序：\n        1. 去除首尾空白\n        2. 跳过空行\n        3. 处理字面转义字符串（如 \\\\x0d\\\\x0a）\n        4. 移除 ANSI 转义序列\n        5. 清理控制字符\n        6. 移除指定后缀字符\n        \n        Args:\n            line: 原始输出行\n            suffix_char: 要移除的末尾字符\n            \n        Returns:\n            清理后的行内容，如果是空行则返回 None\n        \"\"\"\n        # 1. 去除行首尾的空白字符\n        line = line.strip()\n        \n        # 2. 跳过空行\n        if not line:\n            return None\n        \n        # 3. 处理字面转义字符串（罕见但可能存在）\n        # 处理常见的字面转义序列\n        escape_mappings = {\n            '\\\\x0d\\\\x0a': '\\n',    # Windows 换行符字面量\n            '\\\\x0a': '\\n',         # Unix 换行符字面量\n            '\\\\x0d': '\\r',         # 回车符字面量\n            '\\\\r\\\\n': '\\n',        # 常见的转义表示\n            '\\\\n': '\\n',           # 换行符转义\n            '\\\\r': '\\r',           # 回车符转义\n            '\\\\t': '\\t',           # 制表符转义\n        }\n        \n        for literal, actual in escape_mappings.items():\n            if literal in line:\n                line = line.replace(literal, actual)\n        \n        # 4. 移除 ANSI 转义序列（颜色、格式等控制字符）\n        ansi_escape = re.compile(r'\\x1B(?:[@-Z\\\\-_]|\\[[0-?]*[ -/]*[@-~])')\n        line = ansi_escape.sub('', line)\n        \n        # 5. 清理控制字符\n        line = line.replace('\\x00', '')  # 移除 NUL 字符\n        line = line.replace('\\r', '')    # 移除回车符\n        line = line.replace('\\b', '')    # 移除退格符\n        line = line.replace('\\f', '')    # 移除换页符\n        line = line.replace('\\v', '')    # 移除垂直制表符\n        \n        # 6. 再次去除空白（清理后可能产生新的空白）\n        line = line.strip()\n        if not line:\n            return None\n        \n        # 7. 如果指定了后缀字符，移除末尾的后缀字符\n        if suffix_char and line.endswith(suffix_char):\n            line = line[:-1].strip()\n            if not line:\n                return None\n        \n        return line\n\n    def _kill_process_tree(self, process: subprocess.Popen) -> None:\n        \"\"\"\n        强制终止进程树\n        \n        当使用 shell=True 时，process.pid 是 shell 的 PID。\n        如果不杀掉整个进程组，shell 的子进程（实际工具）会变成孤儿进程继续运行。\n        \"\"\"\n        if process.poll() is not None:\n            return\n\n        try:\n            # 尝试杀掉进程组（需要进程启动时设置 start_new_session=True）\n            os.killpg(os.getpgid(process.pid), signal.SIGKILL)\n            logger.debug(f\"已终止进程组: PGID={process.pid}\")\n        except ProcessLookupError:\n            pass  # 进程已不存在\n        except Exception as e:\n            logger.warning(f\"终止进程组失败 ({e})，尝试普通 kill\")\n            try:\n                process.kill()\n            except Exception:\n                pass\n\n    def execute_and_wait(\n        self,\n        tool_name: str,\n        command: str,\n        timeout: int,\n        log_file: Optional[str] = None\n    ) -> Dict[str, Any]:\n        \"\"\"\n        等待式执行：启动命令并等待完成\n        \n        适用场景：工具输出到文件（如 subfinder -o output.txt）\n        \n        Args:\n            tool_name: 工具名称（用于日志）\n            command: 完整的扫描命令（包含输出文件参数）\n            timeout: 超时时间（秒）\n            log_file: 日志文件路径（可选，None 表示丢弃 stderr）\n        \n        Returns:\n            dict: {\n                'success': bool,         # 命令是否成功执行（returncode == 0）\n                'returncode': int,       # 命令退出码\n                'log_file': str | None   # 日志文件路径\n            }\n        \n        Raises:\n            ValueError: 参数验证失败\n            RuntimeError: 执行失败或超时\n        \"\"\"\n        global _ACTIVE_COMMANDS\n\n        # 验证参数\n        if not tool_name:\n            raise ValueError(\"工具名称不能为空\")\n        if not command:\n            raise ValueError(\"扫描命令不能为空\")\n        if timeout <= 0:\n            raise ValueError(f\"超时时间必须大于0: {timeout}\")\n        \n        \n        logger.info(\"开始运行扫描工具: %s\", tool_name)\n        \n        # 准备日志文件\n        log_file_path = Path(log_file) if log_file else None\n        \n        # 记录开始时间（用于计算执行时间）\n        start_time = datetime.now()\n        \n        # 初始化性能追踪器\n        perf_tracker = _get_command_tracker(tool_name, command)\n        perf_tracker.start()\n        \n        process = None\n        log_file_handle = None\n        acquired_slot = False  # 标记是否已增加全局活动命令计数\n        \n        try:\n            # 在启动新的外部命令之前，先根据 CPU/内存负载判断是否需要等待\n            _wait_for_system_load()\n\n            acquired_slot = True\n            if _ACTIVE_COMMANDS_LOCK:\n                with _ACTIVE_COMMANDS_LOCK:\n                    _ACTIVE_COMMANDS += 1\n                    current_active = _ACTIVE_COMMANDS\n            else:\n                current_active = 0\n            logger.info(\n                \"登记活动命令计数: tool=%s, active=%d\",\n                tool_name,\n                current_active,\n            )\n            \n            logger.debug(\"执行命令: %s\", command)\n            if log_file_path:\n                logger.debug(\"日志文件: %s\", log_file_path)\n            else:\n                logger.debug(\"日志输出: 丢弃\")\n            \n            # 准备输出流\n            stdout_target = subprocess.DEVNULL\n            stderr_target = subprocess.DEVNULL\n            \n            if log_file_path:\n                # 先写入命令开始信息\n                if ENABLE_COMMAND_LOGGING:\n                    self._write_command_start_header(log_file_path, tool_name, command, timeout)\n                \n                # 以追加模式打开日志文件\n                log_file_handle = open(log_file_path, 'a', encoding='utf-8', buffering=1)\n                if ENABLE_COMMAND_LOGGING:\n                    stdout_target = log_file_handle\n                    stderr_target = subprocess.STDOUT\n                else:\n                    stderr_target = log_file_handle\n\n            # 启动进程\n            # 使用 start_new_session=True 创建新会话，使子进程成为新进程组的首领\n            # 这样我们可以通过 killpg 杀掉整个进程树\n            process = subprocess.Popen(\n                command,\n                stdin=subprocess.DEVNULL,\n                shell=True,\n                stdout=stdout_target,\n                stderr=stderr_target,\n                text=True,\n                start_new_session=True\n            )\n            \n            # 设置进程 PID 用于性能追踪\n            perf_tracker.set_pid(process.pid)\n            \n            # 等待完成\n            process.communicate(timeout=timeout)\n            \n            # 检查执行结果\n            returncode = process.returncode\n            success = (returncode == 0)\n            \n            # 计算执行时间\n            duration = (datetime.now() - start_time).total_seconds()\n            \n            # 追加命令结束信息（如果开启且有日志文件）\n            if log_file_path and ENABLE_COMMAND_LOGGING:\n                self._write_command_end_footer(log_file_path, tool_name, duration, returncode, success)\n            command_log_file = str(log_file_path) if log_file_path else None\n            \n            if not success:\n                # 命令执行失败，尝试读取错误日志\n                error_output = \"\"\n                if log_file_path:\n                    error_output = self._read_log_tail(log_file_path, max_lines=MAX_LOG_TAIL_LINES)\n                logger.warning(\n                    \"扫描工具 %s 返回非零状态码: %d (执行时间: %.2f秒)\",\n                    tool_name, returncode, duration\n                )\n                if error_output:\n                    for line in error_output.strip().split('\\n'):\n                        if line.strip():\n                            logger.warning(\"%s\", line)\n            else:\n                logger.info(\"✓ 扫描工具 %s 执行完成 (执行时间: %.2f秒)\", tool_name, duration)\n            \n            # 记录性能日志\n            perf_tracker.finish(success=success, duration=duration, timeout=timeout)\n            \n            return {\n                'success': success,\n                'returncode': returncode,\n                'log_file': str(log_file_path) if log_file_path else None,\n                'command_log_file': command_log_file,\n                'duration': duration\n            }\n            \n        except subprocess.TimeoutExpired as e:\n            # 计算超时时的执行时间\n            duration = (datetime.now() - start_time).total_seconds()\n            \n            # 追加超时结束信息\n            if log_file_path and ENABLE_COMMAND_LOGGING:\n                self._write_command_end_footer(log_file_path, tool_name, duration, -1, False)\n            \n            # 记录性能日志（超时）\n            perf_tracker.finish(success=False, duration=duration, timeout=timeout, is_timeout=True)\n            \n            error_msg = f\"扫描工具 {tool_name} 执行超时（{timeout}秒，实际执行: {duration:.2f}秒）\"\n            logger.error(error_msg)\n            if log_file_path and log_file_path.exists():\n                logger.debug(\"超时日志已保存: %s\", log_file_path)\n            raise RuntimeError(error_msg) from e\n        \n        except subprocess.SubprocessError as e:\n            error_msg = f\"扫描工具 {tool_name} 执行失败: {e}\"\n            logger.error(error_msg)\n            raise RuntimeError(error_msg) from e\n            \n        except Exception as e:\n            # 捕获所有异常（包括 Prefect 取消引发的 CancelledError 等）\n            # 确保在 finally 块中清理进程\n            error_msg = f\"扫描工具 {tool_name} 执行异常（可能是被中断）: {e}\"\n            logger.error(error_msg, exc_info=True)\n            raise\n            \n        finally:\n            # 关键修复：确保进程树被清理\n            if process:\n                self._kill_process_tree(process)\n                \n            # 关闭文件句柄\n            if log_file_handle:\n                try:\n                    log_file_handle.close()\n                except Exception:\n                    pass\n            \n            if acquired_slot:\n                if _ACTIVE_COMMANDS_LOCK:\n                    with _ACTIVE_COMMANDS_LOCK:\n                        if _ACTIVE_COMMANDS > 0:\n                            _ACTIVE_COMMANDS -= 1\n                        current_active = _ACTIVE_COMMANDS\n                else:\n                    current_active = 0\n                logger.info(\n                    \"释放活动命令计数: tool=%s, active=%d\",\n                    tool_name,\n                    current_active,\n                )\n    \n    def execute_stream(\n        self,\n        cmd: str,\n        tool_name: str,\n        cwd: Optional[str] = None,\n        shell: bool = False,\n        encoding: str = 'utf-8',\n        suffix_char: Optional[str] = None,\n        timeout: Optional[int] = None,\n        log_file: Optional[str] = None\n    ) -> Generator[str, None, None]:\n        \"\"\"\n        流式执行：逐行返回输出\n        \n        适用场景：工具流式输出 JSON（如 naabu -json）\n        \n        Args:\n            cmd: 要执行的命令\n            tool_name: 工具名称（用于日志记录）\n            cwd: 工作目录\n            shell: 是否使用 shell 执行\n            encoding: 编码格式\n            suffix_char: 末尾后缀字符（用于移除）\n            timeout: 命令执行超时时间（秒），None 表示不设置超时\n            log_file: 日志文件路径（可选）\n        \n        Yields:\n            str: 每行输出的内容（已处理：去空白、去ANSI、去后缀）\n            \n        Raises:\n            subprocess.TimeoutExpired: 命令执行超时\n        \"\"\"\n        \n        global _ACTIVE_COMMANDS\n\n        # 记录开始时间（用于命令日志）\n        start_time = datetime.now()\n        acquired_slot = False\n        \n        # 初始化性能追踪器\n        perf_tracker = _get_command_tracker(tool_name, cmd)\n        perf_tracker.start()\n        \n        # 准备日志文件路径\n        log_file_path = Path(log_file) if log_file else None\n        if log_file_path:\n            logger.debug(f\"日志文件: {log_file_path}\")\n        else:\n            logger.debug(\"日志输出: 丢弃\")\n        \n        # 根据是否使用shell来格式化命令\n        command = cmd if shell else cmd.split()\n        \n        # 日志文件句柄\n        log_file_handle = None\n\n        # 启动子进程，根据日志策略决定输出方向\n        if log_file_path:\n            # 先写入命令开始信息\n            if ENABLE_COMMAND_LOGGING:\n                self._write_command_start_header(log_file_path, tool_name, cmd, timeout)\n            \n            # 以追加模式打开日志文件（开始信息已写入）\n            log_file_handle = open(log_file_path, 'a', encoding='utf-8', buffering=1)\n            \n            stdout_target = subprocess.PIPE\n            stderr_target = log_file_handle\n            if ENABLE_COMMAND_LOGGING:\n                stderr_target = subprocess.STDOUT\n            \n            if not acquired_slot:\n                # 日志模式下，在真正启动进程前做一次负载检查，并登记活动命令计数\n                _wait_for_system_load()\n                acquired_slot = True\n                if _ACTIVE_COMMANDS_LOCK:\n                    with _ACTIVE_COMMANDS_LOCK:\n                        _ACTIVE_COMMANDS += 1\n                        current_active = _ACTIVE_COMMANDS\n                else:\n                    current_active = 0\n                logger.info(\n                    \"登记活动命令计数: tool=%s, active=%d\",\n                    tool_name,\n                    current_active,\n                )\n            \n            process = subprocess.Popen(\n                command,\n                stdin=subprocess.DEVNULL,\n                stdout=stdout_target,\n                stderr=stderr_target,\n                cwd=cwd,\n                universal_newlines=True,\n                encoding=encoding,\n                shell=shell,\n                start_new_session=True  # 关键：创建新进程组\n            )\n        else:\n            # 无日志文件：正常流式输出\n            if not acquired_slot:\n                # 非日志模式，同样在启动进程前做一次负载检查，并登记活动命令计数\n                _wait_for_system_load()\n                acquired_slot = True\n                if _ACTIVE_COMMANDS_LOCK:\n                    with _ACTIVE_COMMANDS_LOCK:\n                        _ACTIVE_COMMANDS += 1\n                        current_active = _ACTIVE_COMMANDS\n                else:\n                    current_active = 0\n                logger.info(\n                    \"登记活动命令计数: tool=%s, active=%d\",\n                    tool_name,\n                    current_active,\n                )\n            \n            process = subprocess.Popen(\n                command,\n                stdin=subprocess.DEVNULL,\n                stdout=subprocess.PIPE,\n                stderr=subprocess.STDOUT,\n                cwd=cwd,\n                universal_newlines=True,\n                encoding=encoding,\n                shell=shell,\n                start_new_session=True  # 关键：创建新进程组\n            )\n        \n        # 设置进程 PID 用于性能追踪\n        perf_tracker.set_pid(process.pid)\n            \n        # 超时控制：使用 Timer 在指定时间后终止进程\n        timed_out_event = threading.Event()\n            \n        def _kill_when_timeout():\n            timed_out_event.set()\n            if process.poll() is None:  # 进程还在运行\n                logger.warning(f\"命令执行超时（{timeout}秒），正在终止进程: {cmd}\")\n                self._kill_process_tree(process)  # 使用新的终止方法\n            \n        timer = None\n        if timeout is not None:\n            timer = threading.Timer(timeout, _kill_when_timeout)\n            timer.start()\n\n        try:\n            # 逐行读取进程输出\n            stdout = process.stdout\n            assert stdout is not None, \"stdout should not be None when stdout=PIPE\"\n            \n            for line in iter(lambda: stdout.readline(), ''):\n                if not line:\n                    break\n                \n                # 统一字符处理\n                cleaned_line = self._clean_output_line(line, suffix_char)\n                if cleaned_line is None:\n                    continue  # 跳过空行\n                line = cleaned_line\n                \n                # 如果开启命令日志且有日志文件，同时写入日志文件\n                if log_file_handle and ENABLE_COMMAND_LOGGING:\n                    log_file_handle.write(line + '\\n')\n                    log_file_handle.flush()\n                \n                # 直接返回行内容，由调用者负责解析\n                yield line\n        \n        finally:\n            # 1. 停止定时器（如果还没触发）\n            if timer:\n                timer.cancel()\n                timer.join(timeout=0.1)  # 等待 timer 线程完全结束，避免悬挂\n            \n            # 2. 清理进程资源\n            exit_code = None\n            \n            if timed_out_event.is_set():\n                # 超时情况：定时器已经处理了进程终止，只需获取退出码\n                logger.debug(\"进程已被超时定时器终止，等待进程结束\")\n                try:\n                    exit_code = process.wait(timeout=1.0)  # 等待进程完全退出\n                except subprocess.TimeoutExpired:\n                    logger.warning(\"进程在超时后仍未退出，强制终止\")\n                    self._kill_process_tree(process)\n                    exit_code = -1\n            else:\n                # 正常结束：等待进程自然结束\n                # 如果是被外部中断（如 CancelledError），poll() 应为 None，需要 kill\n                if process.poll() is None:\n                    logger.info(f\"流式执行被中断，清理进程: {tool_name}\")\n                    self._kill_process_tree(process)\n                \n                try:\n                    exit_code = process.wait(timeout=GRACEFUL_SHUTDOWN_TIMEOUT)\n                except subprocess.TimeoutExpired:\n                    logger.warning(\n                        \"程序未能在%d秒内自然结束，强制终止: %s\",\n                        GRACEFUL_SHUTDOWN_TIMEOUT, cmd\n                    )\n                    self._kill_process_tree(process)\n                    exit_code = -2\n            \n            # 3. 关闭进程流\n            if process.stdout:\n                process.stdout.close()\n            if process.stderr:\n                process.stderr.close()\n            \n            # 4. 关闭日志文件句柄\n            if log_file_handle:\n                log_file_handle.close()\n            \n            # 5. 追加命令结束信息（如果开启且有日志文件）\n            duration = (datetime.now() - start_time).total_seconds()\n            success = not timed_out_event.is_set() and (exit_code == 0 if exit_code is not None else True)\n            \n            if log_file_path and ENABLE_COMMAND_LOGGING:\n                # 追加结束信息到日志文件末尾\n                self._write_command_end_footer(log_file_path, tool_name, duration, exit_code or 0, success)\n            \n            # 6. 记录性能日志\n            perf_tracker.finish(success=success, duration=duration, timeout=timeout, is_timeout=timed_out_event.is_set())\n            \n            if acquired_slot:\n                if _ACTIVE_COMMANDS_LOCK:\n                    with _ACTIVE_COMMANDS_LOCK:\n                        if _ACTIVE_COMMANDS > 0:\n                            _ACTIVE_COMMANDS -= 1\n                        current_active = _ACTIVE_COMMANDS\n                else:\n                    current_active = 0\n                logger.info(\n                    \"释放活动命令计数: tool=%s, active=%d\",\n                    tool_name,\n                    current_active,\n                )\n    \n    def _read_log_tail(self, log_file: Path, max_lines: int = MAX_LOG_TAIL_LINES) -> str:\n        \"\"\"\n        读取日志文件的末尾部分（常量内存实现）\n\n        使用 seek 从文件末尾往前读取，避免将整个文件加载到内存。\n\n        Args:\n            log_file: 日志文件路径\n            max_lines: 最大读取行数\n\n        Returns:\n            日志内容（字符串），读取失败返回错误提示\n        \"\"\"\n        if not log_file.exists():\n            logger.debug(\"日志文件不存在: %s\", log_file)\n            return \"\"\n\n        file_size = log_file.stat().st_size\n        if file_size == 0:\n            logger.debug(\"日志文件为空: %s\", log_file)\n            return \"\"\n\n        # 每次读取的块大小（8KB，足够容纳大多数日志行）\n        chunk_size = 8192\n\n        def decode_line(line_bytes: bytes) -> str:\n            \"\"\"解码单行：优先 UTF-8，失败则降级 latin-1\"\"\"\n            try:\n                return line_bytes.decode('utf-8')\n            except UnicodeDecodeError:\n                return line_bytes.decode('latin-1', errors='replace')\n\n        try:\n            with open(log_file, 'rb') as f:\n                lines_found: deque[bytes] = deque()\n                remaining = b''\n                position = file_size\n\n                while position > 0 and len(lines_found) < max_lines:\n                    read_size = min(chunk_size, position)\n                    position -= read_size\n\n                    f.seek(position)\n                    chunk = f.read(read_size) + remaining\n                    parts = chunk.split(b'\\n')\n\n                    # 最前面的部分可能不完整，留到下次处理\n                    remaining = parts[0]\n\n                    # 其余部分是完整的行（从后往前收集，用 appendleft 保持顺序）\n                    for part in reversed(parts[1:]):\n                        if len(lines_found) >= max_lines:\n                            break\n                        lines_found.appendleft(part)\n\n                # 处理文件开头的行\n                if remaining and len(lines_found) < max_lines:\n                    lines_found.appendleft(remaining)\n\n                return '\\n'.join(decode_line(line) for line in lines_found)\n\n        except PermissionError as e:\n            logger.warning(\"日志文件权限不足 (%s): %s\", log_file, e)\n            return \"(无法读取日志文件: 权限不足)\"\n        except IOError as e:\n            logger.warning(\"日志文件读取IO错误 (%s): %s\", log_file, e)\n            return f\"(无法读取日志文件: IO错误 - {e})\"\n        except Exception as e:\n            logger.warning(\"读取日志文件失败 (%s): %s\", log_file, e, exc_info=True)\n            return f\"(无法读取日志文件: {type(e).__name__} - {e})\"\n\n\n# 单例实例\n_executor = CommandExecutor()\n\n\n# 快捷函数\ndef execute_and_wait(\n    tool_name: str,\n    command: str,\n    timeout: int,\n    log_file: Optional[str] = None\n) -> Dict[str, Any]:\n    \"\"\"\n    等待式执行命令（快捷函数）\n    \n    适用场景：工具输出到文件（如 subfinder -o output.txt）\n    \n    Args:\n        tool_name: 工具名称\n        command: 扫描命令（包含输出文件参数）\n        timeout: 超时时间（秒）\n        log_file: 日志文件路径（可选）\n    \n    Returns:\n        执行结果字典（包含 duration 字段）\n    \n    Raises:\n        RuntimeError: 执行失败或超时\n    \"\"\"\n    return _executor.execute_and_wait(tool_name, command, timeout, log_file)\n\n\ndef execute_stream(\n    cmd: str,\n    tool_name: str,\n    cwd: Optional[str] = None,\n    shell: bool = False,\n    encoding: str = 'utf-8',\n    suffix_char: Optional[str] = None,\n    timeout: Optional[int] = None,\n    log_file: Optional[str] = None\n) -> Generator[str, None, None]:\n    \"\"\"\n    流式执行命令（快捷函数）\n    \n    适用场景：工具流式输出 JSON（如 naabu -json）\n    \n    Args:\n        cmd: 要执行的命令\n        tool_name: 工具名称\n        cwd: 工作目录\n        shell: 是否使用 shell 执行\n        encoding: 编码格式\n        suffix_char: 末尾后缀字符\n        timeout: 命令执行超时时间（秒）\n        log_file: 日志文件路径（可选）\n    \n    Yields:\n        str: 每行输出的内容\n        \n    Raises:\n        subprocess.TimeoutExpired: 命令执行超时\n    \"\"\"\n    return _executor.execute_stream(cmd, tool_name, cwd, shell, encoding, suffix_char, timeout, log_file)\n"
  },
  {
    "path": "backend/apps/scan/utils/config_merger.py",
    "content": "\"\"\"\n配置合并工具模块\n\n提供多引擎 YAML 配置的冲突检测和合并功能。\n\"\"\"\n\nfrom typing import List, Tuple\n\nimport yaml\n\n\nclass ConfigConflictError(Exception):\n    \"\"\"配置冲突异常\n    \n    当两个或多个引擎定义相同的顶层扫描类型键时抛出。\n    \"\"\"\n    \n    def __init__(self, conflicts: List[Tuple[str, str, str]]):\n        \"\"\"\n        参数:\n            conflicts: (键, 引擎1名称, 引擎2名称) 元组列表\n        \"\"\"\n        self.conflicts = conflicts\n        msg = \"; \".join([f\"{k} 同时存在于「{e1}」和「{e2}」\" for k, e1, e2 in conflicts])\n        super().__init__(f\"扫描类型冲突: {msg}\")\n\n\ndef merge_engine_configs(engines: List[Tuple[str, str]]) -> str:\n    \"\"\"\n    合并多个引擎的 YAML 配置。\n    \n    参数:\n        engines: (引擎名称, 配置YAML) 元组列表\n    \n    返回:\n        合并后的 YAML 字符串\n    \n    异常:\n        ConfigConflictError: 当顶层键冲突时\n    \"\"\"\n    if not engines:\n        return \"\"\n    \n    if len(engines) == 1:\n        return engines[0][1]\n    \n    # 追踪每个顶层键属于哪个引擎\n    key_to_engine: dict[str, str] = {}\n    conflicts: List[Tuple[str, str, str]] = []\n    \n    for engine_name, config_yaml in engines:\n        if not config_yaml or not config_yaml.strip():\n            continue\n            \n        try:\n            parsed = yaml.safe_load(config_yaml)\n        except yaml.YAMLError:\n            # 无效 YAML 跳过\n            continue\n            \n        if not isinstance(parsed, dict):\n            continue\n            \n        # 检查顶层键冲突\n        for key in parsed.keys():\n            if key in key_to_engine:\n                conflicts.append((key, key_to_engine[key], engine_name))\n            else:\n                key_to_engine[key] = engine_name\n    \n    if conflicts:\n        raise ConfigConflictError(conflicts)\n    \n    # 无冲突，用双换行符连接配置\n    configs = []\n    for _, config_yaml in engines:\n        if config_yaml and config_yaml.strip():\n            configs.append(config_yaml.strip())\n    \n    return \"\\n\\n\".join(configs)\n"
  },
  {
    "path": "backend/apps/scan/utils/config_parser.py",
    "content": "\"\"\"\n配置解析器\n\n负责解析引擎配置（YAML）并提取启用的工具及其配置。\n\n架构说明：\n- 命令模板：在 command_templates.py 中定义（基础命令 + 可选参数映射）\n- 工具配置：从引擎配置（engine_config YAML 字符串）读取\n- 无默认配置文件：所有配置必须在引擎配置中提供\n\n核心函数：\n- parse_enabled_tools_from_dict(): 解析并过滤启用的工具，返回工具配置字典\n\n返回格式：\n- {'subfinder': {'enabled': True, 'threads': 10, 'timeout': 600}}\n- timeout 是必需参数，支持整数或 'auto'（由具体 Flow 处理）\n\"\"\"\n\nimport logging\nfrom typing import Dict, Any\n\nlogger = logging.getLogger(__name__)\n\n\ndef _normalize_config_keys(config: Dict[str, Any]) -> Dict[str, Any]:\n    \"\"\"\n    将配置字典的 key 中划线转换为下划线\n    \n    规范约定：\n    - 配置文件统一用中划线（贴近 CLI 参数风格）\n    - 代码里统一用下划线（Python 标识符规范）\n    - 此处自动转换：rate-limit → rate_limit\n    \n    Args:\n        config: 原始配置字典\n        \n    Returns:\n        key 已转换的新字典\n        \n    Raises:\n        ValueError: 配置为 None 或非字典类型时抛出\n    \"\"\"\n    if config is None:\n        raise ValueError(\"配置不能为空（None），请检查 YAML 格式，确保冒号后有配置内容或使用 {} 表示空配置\")\n    if not isinstance(config, dict):\n        raise ValueError(f\"配置格式错误：期望 dict，实际 {type(config).__name__}\")\n    return {\n        k.replace('-', '_') if isinstance(k, str) else k: v\n        for k, v in config.items()\n    }\n\n\ndef _parse_subdomain_discovery_config(scan_config: Dict[str, Any]) -> Dict[str, Any]:\n    \"\"\"\n    解析子域名发现配置（4阶段流程）\n    \n    配置格式：\n        {\n            'passive_tools': {'subfinder': {...}, ...},\n            'bruteforce': {'enabled': True, 'subdomain_bruteforce': {...}},\n            'permutation': {'enabled': True, 'subdomain_permutation_resolve': {...}},\n            'resolve': {'enabled': True, 'subdomain_resolve': {...}}\n        }\n    \n    Args:\n        scan_config: subdomain_discovery 的配置字典\n    \n    Returns:\n        配置字典，供 Flow 使用\n    \"\"\"\n    if 'passive_tools' not in scan_config:\n        logger.warning(\"子域名发现配置缺少 passive_tools\")\n        return {}\n    \n    result = {}\n    \n    # Stage 1: 被动收集工具\n    passive_tools = scan_config.get('passive_tools', {})\n    enabled_passive = {}\n    for name, config in passive_tools.items():\n        if isinstance(config, dict) and config.get('enabled', False):\n            enabled_passive[name] = _normalize_config_keys(config)\n    result['passive_tools'] = enabled_passive\n    \n    # Stage 2: 字典爆破（可选）\n    bruteforce = scan_config.get('bruteforce', {})\n    if bruteforce.get('enabled', False):\n        # 转换内部工具配置的 key\n        normalized_bruteforce = _normalize_config_keys(bruteforce)\n        if 'subdomain_bruteforce' in normalized_bruteforce:\n            normalized_bruteforce['subdomain_bruteforce'] = _normalize_config_keys(\n                normalized_bruteforce['subdomain_bruteforce']\n            )\n        result['bruteforce'] = normalized_bruteforce\n    \n    # Stage 3: 变异生成（可选）\n    permutation = scan_config.get('permutation', {})\n    if permutation.get('enabled', False):\n        normalized_permutation = _normalize_config_keys(permutation)\n        if 'subdomain_permutation_resolve' in normalized_permutation:\n            normalized_permutation['subdomain_permutation_resolve'] = _normalize_config_keys(\n                normalized_permutation['subdomain_permutation_resolve']\n            )\n        result['permutation'] = normalized_permutation\n    \n    # Stage 4: 存活验证（可选）\n    resolve = scan_config.get('resolve', {})\n    if resolve.get('enabled', False):\n        normalized_resolve = _normalize_config_keys(resolve)\n        if 'subdomain_resolve' in normalized_resolve:\n            normalized_resolve['subdomain_resolve'] = _normalize_config_keys(\n                normalized_resolve['subdomain_resolve']\n            )\n        result['resolve'] = normalized_resolve\n    \n    logger.info(\n        f\"子域名发现: passive={len(enabled_passive)}, \"\n        f\"bruteforce={'bruteforce' in result}, \"\n        f\"permutation={'permutation' in result}, \"\n        f\"resolve={'resolve' in result}\"\n    )\n    return result\n\n\ndef parse_enabled_tools_from_dict(\n    scan_type: str,\n    parsed_config: Dict[str, Any]\n) -> Dict[str, Dict[str, Any]]:\n    \"\"\"\n    从解析后的配置字典中获取启用的工具及其配置\n    \n    Args:\n        scan_type: 扫描类型 (subdomain_discovery, port_scan, site_scan, directory_scan)\n        parsed_config: 已解析的配置字典\n    \n    Returns:\n        启用的工具配置字典 {tool_name: tool_config}\n        对于 subdomain_discovery，返回完整的配置结构（支持4阶段增强流程）\n    \n    Raises:\n        ValueError: 配置格式错误或必需参数缺失/无效时抛出\n    \"\"\"\n    if not parsed_config:\n        logger.warning(f\"配置字典为空 - scan_type: {scan_type}\")\n        return {}\n    \n    if scan_type not in parsed_config:\n        logger.warning(f\"配置中未找到扫描类型: {scan_type}\")\n        return {}\n    \n    scan_config = parsed_config[scan_type]\n    \n    # 子域名发现支持增强配置格式（4阶段）\n    if scan_type == 'subdomain_discovery':\n        return _parse_subdomain_discovery_config(scan_config)\n    \n    if 'tools' not in scan_config:\n        logger.warning(f\"扫描类型 {scan_type} 未配置任何工具\")\n        return {}\n    \n    tools = scan_config['tools']\n    \n    # 过滤出启用的工具\n    enabled_tools = {}\n    for name, config in tools.items():\n        if not isinstance(config, dict):\n            raise ValueError(f\"工具 {name} 配置格式错误：期望 dict，实际 {type(config).__name__}\")\n        \n        # 检查是否启用（默认为 False）\n        enabled_value = config.get('enabled', False)\n        \n        # 验证 enabled 字段类型\n        if not isinstance(enabled_value, bool):\n            raise ValueError(\n                f\"工具 {name} 的 enabled 字段类型错误：期望 bool，实际 {type(enabled_value).__name__}\"\n            )\n        \n        if enabled_value:\n            # timeout 默认为 'auto'，由具体 Flow 自动计算\n            timeout_value = config.get('timeout', 'auto')\n            \n            # 验证 timeout 值的有效性\n            if timeout_value != 'auto':\n                if isinstance(timeout_value, int):\n                    if timeout_value <= 0:\n                        raise ValueError(f\"工具 {name} 的 timeout 参数无效（{timeout_value}），必须大于0\")\n                else:\n                    raise ValueError(\n                        f\"工具 {name} 的 timeout 参数类型错误：期望 int 或 'auto'，实际 {type(timeout_value).__name__}\"\n                    )\n            \n            # 将配置 key 中划线转为下划线，统一给下游代码使用\n            normalized_config = _normalize_config_keys(config)\n            normalized_config['timeout'] = timeout_value  # 确保 timeout 存在\n            enabled_tools[name] = normalized_config\n    \n    logger.info(f\"扫描类型: {scan_type}, 启用工具: {len(enabled_tools)}/{len(tools)}\")\n    \n    return enabled_tools\n"
  },
  {
    "path": "backend/apps/scan/utils/directory_cleanup.py",
    "content": "\"\"\"\n目录清理工具模块\n\n提供通用的目录清理功能\n\"\"\"\n\nimport logging\nimport shutil\nfrom pathlib import Path\n\nlogger = logging.getLogger(__name__)\n\n\ndef remove_directory(directory: str) -> bool:\n    \"\"\"\n    删除目录及其所有内容\n    \n    Args:\n        directory: 目录路径\n    \n    Returns:\n        是否删除成功\n    \n    Warning:\n        此函数会永久删除目录及其所有内容，请谨慎使用！\n    \n    Example:\n        >>> remove_directory('/path/to/directory')\n        True\n    \"\"\"\n    if not directory:\n        logger.warning(\"目录路径为空，跳过删除\")\n        return False\n    \n    try:\n        dir_path = Path(directory)\n        \n        if not dir_path.exists():\n            logger.warning(\"目录不存在，无需删除 - Path: %s\", directory)\n            return True\n        \n        # 删除整个目录\n        shutil.rmtree(dir_path)\n        \n        logger.info(\"✓ 目录已删除 - Path: %s\", directory)\n        return True\n        \n    except PermissionError as e:\n        logger.error(\"权限不足，无法删除目录 - Path: %s, 错误: %s\", directory, e)\n        return False\n        \n    except Exception as e:  # noqa: BLE001\n        logger.exception(\"删除目录失败 - Path: %s, 错误: %s\", directory, e)\n        return False\n\n\n__all__ = [\n    'remove_directory',\n]\n\n"
  },
  {
    "path": "backend/apps/scan/utils/fingerprint_helpers.py",
    "content": "\"\"\"指纹文件本地缓存工具\n\n提供 Worker 侧的指纹文件缓存和版本校验功能，用于：\n- 指纹识别扫描 (fingerprint_detect_flow)\n\"\"\"\n\nimport json\nimport logging\nimport os\n\nfrom django.conf import settings\n\nlogger = logging.getLogger(__name__)\n\n\n# 指纹库映射：lib_name → ensure_func_name\nFINGERPRINT_LIB_MAP = {\n    'ehole': 'ensure_ehole_fingerprint_local',\n    'goby': 'ensure_goby_fingerprint_local',\n    'wappalyzer': 'ensure_wappalyzer_fingerprint_local',\n    'fingers': 'ensure_fingers_fingerprint_local',\n    'fingerprinthub': 'ensure_fingerprinthub_fingerprint_local',\n    'arl': 'ensure_arl_fingerprint_local',\n}\n\n\ndef ensure_ehole_fingerprint_local() -> str:\n    \"\"\"\n    确保本地存在最新的 EHole 指纹文件（带缓存）\n    \n    流程：\n    1. 获取当前指纹库版本\n    2. 检查缓存文件是否存在且版本匹配\n    3. 版本不匹配则重新导出\n    \n    Returns:\n        str: 本地指纹文件路径\n    \n    使用场景：\n        Worker 执行扫描任务前调用，获取最新指纹文件路径\n    \"\"\"\n    from apps.engine.services.fingerprints import EholeFingerprintService\n    \n    service = EholeFingerprintService()\n    current_version = service.get_fingerprint_version()\n    \n    # 缓存目录和文件\n    base_dir = getattr(settings, 'FINGERPRINTS_BASE_PATH', '/opt/xingrin/fingerprints')\n    os.makedirs(base_dir, exist_ok=True)\n    cache_file = os.path.join(base_dir, 'ehole.json')\n    version_file = os.path.join(base_dir, 'ehole.version')\n    \n    # 检查缓存版本\n    cached_version = None\n    if os.path.exists(version_file):\n        try:\n            with open(version_file, 'r') as f:\n                cached_version = f.read().strip()\n        except OSError as e:\n            logger.warning(\"读取版本文件失败: %s\", e)\n    \n    # 版本匹配，直接返回缓存\n    if cached_version == current_version and os.path.exists(cache_file):\n        logger.info(\"EHole 指纹文件缓存有效（版本匹配）: %s\", cache_file)\n        return cache_file\n    \n    # 版本不匹配，重新导出\n    logger.info(\n        \"EHole 指纹文件需要更新: cached=%s, current=%s\",\n        cached_version, current_version\n    )\n    count = service.export_to_file(cache_file)\n    \n    # 写入版本文件\n    try:\n        with open(version_file, 'w') as f:\n            f.write(current_version)\n    except OSError as e:\n        logger.warning(\"写入版本文件失败: %s\", e)\n    \n    logger.info(\"EHole 指纹文件已更新: %s\", cache_file)\n    return cache_file\n\n\ndef ensure_goby_fingerprint_local() -> str:\n    \"\"\"\n    确保本地存在最新的 Goby 指纹文件（带缓存）\n    \n    Returns:\n        str: 本地指纹文件路径\n    \"\"\"\n    from apps.engine.services.fingerprints import GobyFingerprintService\n    \n    service = GobyFingerprintService()\n    current_version = service.get_fingerprint_version()\n    \n    # 缓存目录和文件\n    base_dir = getattr(settings, 'FINGERPRINTS_BASE_PATH', '/opt/xingrin/fingerprints')\n    os.makedirs(base_dir, exist_ok=True)\n    cache_file = os.path.join(base_dir, 'goby.json')\n    version_file = os.path.join(base_dir, 'goby.version')\n    \n    # 检查缓存版本\n    cached_version = None\n    if os.path.exists(version_file):\n        try:\n            with open(version_file, 'r') as f:\n                cached_version = f.read().strip()\n        except OSError as e:\n            logger.warning(\"读取 Goby 版本文件失败: %s\", e)\n    \n    # 版本匹配，直接返回缓存\n    if cached_version == current_version and os.path.exists(cache_file):\n        logger.info(\"Goby 指纹文件缓存有效（版本匹配）: %s\", cache_file)\n        return cache_file\n    \n    # 版本不匹配，重新导出\n    logger.info(\n        \"Goby 指纹文件需要更新: cached=%s, current=%s\",\n        cached_version, current_version\n    )\n    # Goby 导出格式是数组，直接写入\n    data = service.get_export_data()\n    with open(cache_file, 'w', encoding='utf-8') as f:\n        json.dump(data, f, ensure_ascii=False)\n    \n    # 写入版本文件\n    try:\n        with open(version_file, 'w') as f:\n            f.write(current_version)\n    except OSError as e:\n        logger.warning(\"写入 Goby 版本文件失败: %s\", e)\n    \n    logger.info(\"Goby 指纹文件已更新: %s\", cache_file)\n    return cache_file\n\n\ndef ensure_wappalyzer_fingerprint_local() -> str:\n    \"\"\"\n    确保本地存在最新的 Wappalyzer 指纹文件（带缓存）\n    \n    Returns:\n        str: 本地指纹文件路径\n    \"\"\"\n    from apps.engine.services.fingerprints import WappalyzerFingerprintService\n    \n    service = WappalyzerFingerprintService()\n    current_version = service.get_fingerprint_version()\n    \n    # 缓存目录和文件\n    base_dir = getattr(settings, 'FINGERPRINTS_BASE_PATH', '/opt/xingrin/fingerprints')\n    os.makedirs(base_dir, exist_ok=True)\n    cache_file = os.path.join(base_dir, 'wappalyzer.json')\n    version_file = os.path.join(base_dir, 'wappalyzer.version')\n    \n    # 检查缓存版本\n    cached_version = None\n    if os.path.exists(version_file):\n        try:\n            with open(version_file, 'r') as f:\n                cached_version = f.read().strip()\n        except OSError as e:\n            logger.warning(\"读取 Wappalyzer 版本文件失败: %s\", e)\n    \n    # 版本匹配，直接返回缓存\n    if cached_version == current_version and os.path.exists(cache_file):\n        logger.info(\"Wappalyzer 指纹文件缓存有效（版本匹配）: %s\", cache_file)\n        return cache_file\n    \n    # 版本不匹配，重新导出\n    logger.info(\n        \"Wappalyzer 指纹文件需要更新: cached=%s, current=%s\",\n        cached_version, current_version\n    )\n    # Wappalyzer 导出格式是 {\"apps\": {...}}\n    data = service.get_export_data()\n    with open(cache_file, 'w', encoding='utf-8') as f:\n        json.dump(data, f, ensure_ascii=False)\n    \n    # 写入版本文件\n    try:\n        with open(version_file, 'w') as f:\n            f.write(current_version)\n    except OSError as e:\n        logger.warning(\"写入 Wappalyzer 版本文件失败: %s\", e)\n    \n    logger.info(\"Wappalyzer 指纹文件已更新: %s\", cache_file)\n    return cache_file\n\n\ndef get_fingerprint_paths(lib_names: list) -> dict:\n    \"\"\"\n    获取多个指纹库的本地路径\n    \n    Args:\n        lib_names: 指纹库名称列表，如 ['ehole', 'goby']\n        \n    Returns:\n        dict: {lib_name: local_path}，如 {'ehole': '/opt/xingrin/fingerprints/ehole.json'}\n        \n    示例：\n        paths = get_fingerprint_paths(['ehole'])\n        # {'ehole': '/opt/xingrin/fingerprints/ehole.json'}\n    \"\"\"\n    paths = {}\n    for lib_name in lib_names:\n        if lib_name not in FINGERPRINT_LIB_MAP:\n            logger.warning(\"不支持的指纹库: %s，跳过\", lib_name)\n            continue\n        \n        ensure_func_name = FINGERPRINT_LIB_MAP[lib_name]\n        # 获取当前模块中的函数\n        ensure_func = globals().get(ensure_func_name)\n        if ensure_func is None:\n            logger.warning(\"指纹库 %s 的导出函数 %s 未实现，跳过\", lib_name, ensure_func_name)\n            continue\n        \n        try:\n            paths[lib_name] = ensure_func()\n        except Exception as e:\n            logger.error(\"获取指纹库 %s 路径失败: %s\", lib_name, e)\n            continue\n    \n    return paths\n\n\ndef ensure_fingers_fingerprint_local() -> str:\n    \"\"\"\n    确保本地存在最新的 Fingers 指纹文件（带缓存）\n    \n    Returns:\n        str: 本地指纹文件路径\n    \"\"\"\n    from apps.engine.services.fingerprints import FingersFingerprintService\n    \n    service = FingersFingerprintService()\n    current_version = service.get_fingerprint_version()\n    \n    # 缓存目录和文件\n    base_dir = getattr(settings, 'FINGERPRINTS_BASE_PATH', '/opt/xingrin/fingerprints')\n    os.makedirs(base_dir, exist_ok=True)\n    cache_file = os.path.join(base_dir, 'fingers.json')\n    version_file = os.path.join(base_dir, 'fingers.version')\n    \n    # 检查缓存版本\n    cached_version = None\n    if os.path.exists(version_file):\n        try:\n            with open(version_file, 'r') as f:\n                cached_version = f.read().strip()\n        except OSError as e:\n            logger.warning(\"读取 Fingers 版本文件失败: %s\", e)\n    \n    # 版本匹配，直接返回缓存\n    if cached_version == current_version and os.path.exists(cache_file):\n        logger.info(\"Fingers 指纹文件缓存有效（版本匹配）: %s\", cache_file)\n        return cache_file\n    \n    # 版本不匹配，重新导出\n    logger.info(\n        \"Fingers 指纹文件需要更新: cached=%s, current=%s\",\n        cached_version, current_version\n    )\n    data = service.get_export_data()\n    with open(cache_file, 'w', encoding='utf-8') as f:\n        json.dump(data, f, ensure_ascii=False)\n    \n    # 写入版本文件\n    try:\n        with open(version_file, 'w') as f:\n            f.write(current_version)\n    except OSError as e:\n        logger.warning(\"写入 Fingers 版本文件失败: %s\", e)\n    \n    logger.info(\"Fingers 指纹文件已更新: %s\", cache_file)\n    return cache_file\n\n\ndef ensure_fingerprinthub_fingerprint_local() -> str:\n    \"\"\"\n    确保本地存在最新的 FingerPrintHub 指纹文件（带缓存）\n    \n    Returns:\n        str: 本地指纹文件路径\n    \"\"\"\n    from apps.engine.services.fingerprints import FingerPrintHubFingerprintService\n    \n    service = FingerPrintHubFingerprintService()\n    current_version = service.get_fingerprint_version()\n    \n    # 缓存目录和文件\n    base_dir = getattr(settings, 'FINGERPRINTS_BASE_PATH', '/opt/xingrin/fingerprints')\n    os.makedirs(base_dir, exist_ok=True)\n    cache_file = os.path.join(base_dir, 'fingerprinthub.json')\n    version_file = os.path.join(base_dir, 'fingerprinthub.version')\n    \n    # 检查缓存版本\n    cached_version = None\n    if os.path.exists(version_file):\n        try:\n            with open(version_file, 'r') as f:\n                cached_version = f.read().strip()\n        except OSError as e:\n            logger.warning(\"读取 FingerPrintHub 版本文件失败: %s\", e)\n    \n    # 版本匹配，直接返回缓存\n    if cached_version == current_version and os.path.exists(cache_file):\n        logger.info(\"FingerPrintHub 指纹文件缓存有效（版本匹配）: %s\", cache_file)\n        return cache_file\n    \n    # 版本不匹配，重新导出\n    logger.info(\n        \"FingerPrintHub 指纹文件需要更新: cached=%s, current=%s\",\n        cached_version, current_version\n    )\n    data = service.get_export_data()\n    with open(cache_file, 'w', encoding='utf-8') as f:\n        json.dump(data, f, ensure_ascii=False)\n    \n    # 写入版本文件\n    try:\n        with open(version_file, 'w') as f:\n            f.write(current_version)\n    except OSError as e:\n        logger.warning(\"写入 FingerPrintHub 版本文件失败: %s\", e)\n    \n    logger.info(\"FingerPrintHub 指纹文件已更新: %s\", cache_file)\n    return cache_file\n\n\ndef ensure_arl_fingerprint_local() -> str:\n    \"\"\"\n    确保本地存在最新的 ARL 指纹文件（带缓存）\n    \n    Returns:\n        str: 本地指纹文件路径（YAML 格式）\n    \"\"\"\n    import yaml\n    from apps.engine.services.fingerprints import ARLFingerprintService\n    \n    service = ARLFingerprintService()\n    current_version = service.get_fingerprint_version()\n    \n    # 缓存目录和文件\n    base_dir = getattr(settings, 'FINGERPRINTS_BASE_PATH', '/opt/xingrin/fingerprints')\n    os.makedirs(base_dir, exist_ok=True)\n    cache_file = os.path.join(base_dir, 'arl.yaml')\n    version_file = os.path.join(base_dir, 'arl.version')\n    \n    # 检查缓存版本\n    cached_version = None\n    if os.path.exists(version_file):\n        try:\n            with open(version_file, 'r') as f:\n                cached_version = f.read().strip()\n        except OSError as e:\n            logger.warning(\"读取 ARL 版本文件失败: %s\", e)\n    \n    # 版本匹配，直接返回缓存\n    if cached_version == current_version and os.path.exists(cache_file):\n        logger.info(\"ARL 指纹文件缓存有效（版本匹配）: %s\", cache_file)\n        return cache_file\n    \n    # 版本不匹配，重新导出\n    logger.info(\n        \"ARL 指纹文件需要更新: cached=%s, current=%s\",\n        cached_version, current_version\n    )\n    data = service.get_export_data()\n    with open(cache_file, 'w', encoding='utf-8') as f:\n        yaml.dump(data, f, allow_unicode=True, default_flow_style=False)\n    \n    # 写入版本文件\n    try:\n        with open(version_file, 'w') as f:\n            f.write(current_version)\n    except OSError as e:\n        logger.warning(\"写入 ARL 版本文件失败: %s\", e)\n    \n    logger.info(\"ARL 指纹文件已更新: %s\", cache_file)\n    return cache_file\n\n\n__all__ = [\n    \"ensure_ehole_fingerprint_local\",\n    \"ensure_goby_fingerprint_local\",\n    \"ensure_wappalyzer_fingerprint_local\",\n    \"ensure_fingers_fingerprint_local\",\n    \"ensure_fingerprinthub_fingerprint_local\",\n    \"ensure_arl_fingerprint_local\",\n    \"get_fingerprint_paths\",\n    \"FINGERPRINT_LIB_MAP\",\n]\n"
  },
  {
    "path": "backend/apps/scan/utils/nuclei_helpers.py",
    "content": "\"\"\"Nuclei 模板 Worker 侧工具函数\n\n提供 Worker 侧确保本地模板与 Server 版本一致的功能。\n\n使用 Git commit hash 做版本校验：\n- 从数据库获取 Server 的 commit_hash\n- 检查本地仓库的 commit hash 是否一致\n- 不一致则 git fetch + git checkout 到指定 commit\n\n调用示例：\n    template_path = ensure_nuclei_templates_local(\"nuclei-templates\")\n    # 返回本地模板目录路径，可直接用于 nuclei -t 参数\n\"\"\"\n\nimport logging\nimport subprocess\nfrom pathlib import Path\nfrom typing import Optional\n\nfrom django.conf import settings\n\nfrom apps.engine.models import NucleiTemplateRepo\n\nlogger = logging.getLogger(__name__)\n\n\ndef get_local_commit_hash(local_path: Path) -> Optional[str]:\n    \"\"\"获取本地 Git 仓库的当前 commit hash\n\n    Args:\n        local_path: 本地仓库路径\n\n    Returns:\n        commit hash 字符串，失败返回 None\n    \"\"\"\n    if not (local_path / \".git\").is_dir():\n        return None\n\n    result = subprocess.run(\n        [\"git\", \"-C\", str(local_path), \"rev-parse\", \"HEAD\"],\n        check=False,\n        stdout=subprocess.PIPE,\n        stderr=subprocess.PIPE,\n        text=True,\n    )\n    if result.returncode == 0:\n        return result.stdout.strip()\n    return None\n\n\ndef git_clone(repo_url: str, local_path: Path) -> bool:\n    \"\"\"Git clone 仓库\n\n    Args:\n        repo_url: 仓库 URL\n        local_path: 本地路径\n\n    Returns:\n        是否成功\n    \"\"\"\n    logger.info(\"正在 clone 模板仓库: %s -> %s\", repo_url, local_path)\n    result = subprocess.run(\n        [\"git\", \"clone\", \"--depth\", \"1\", repo_url, str(local_path)],\n        check=False,\n        stdout=subprocess.PIPE,\n        stderr=subprocess.PIPE,\n        text=True,\n    )\n    if result.returncode != 0:\n        logger.error(\"git clone 失败: %s\", result.stderr.strip())\n        return False\n    return True\n\n\ndef git_fetch_and_checkout(local_path: Path, commit_hash: str) -> bool:\n    \"\"\"Git fetch 并 checkout 到指定 commit\n\n    Args:\n        local_path: 本地仓库路径\n        commit_hash: 目标 commit hash\n\n    Returns:\n        是否成功\n    \"\"\"\n    logger.info(\"正在同步模板到 commit: %s\", commit_hash[:8])\n\n    # 先 unshallow（如果是浅克隆）\n    subprocess.run(\n        [\"git\", \"-C\", str(local_path), \"fetch\", \"--unshallow\"],\n        check=False,\n        stdout=subprocess.PIPE,\n        stderr=subprocess.PIPE,\n    )\n\n    # fetch origin\n    fetch_result = subprocess.run(\n        [\"git\", \"-C\", str(local_path), \"fetch\", \"origin\"],\n        check=False,\n        stdout=subprocess.PIPE,\n        stderr=subprocess.PIPE,\n        text=True,\n    )\n    if fetch_result.returncode != 0:\n        logger.error(\"git fetch 失败: %s\", fetch_result.stderr.strip())\n        return False\n\n    # checkout 到指定 commit\n    checkout_result = subprocess.run(\n        [\"git\", \"-C\", str(local_path), \"checkout\", commit_hash],\n        check=False,\n        stdout=subprocess.PIPE,\n        stderr=subprocess.PIPE,\n        text=True,\n    )\n    if checkout_result.returncode != 0:\n        logger.error(\"git checkout 失败: %s\", checkout_result.stderr.strip())\n        return False\n\n    return True\n\n\ndef ensure_nuclei_templates_local(repo_name: str) -> str:\n    \"\"\"确保 Worker 本地模板与 Server 版本一致\n\n    根据仓库名称查询数据库，获取 repo_url 和 commit_hash，\n    然后确保本地仓库存在且版本与 Server 一致。\n\n    Args:\n        repo_name: 模板仓库名称，对应 NucleiTemplateRepo.name\n\n    Returns:\n        本地模板目录的绝对路径\n\n    Raises:\n        ValueError: 仓库不存在\n        RuntimeError: Git 操作失败\n    \"\"\"\n    # 从数据库查询仓库记录\n    repo = NucleiTemplateRepo.objects.filter(name=repo_name).first()\n    if not repo:\n        raise ValueError(f\"未找到模板仓库: {repo_name}，请先在「Nuclei 模板」中添加并同步\")\n\n    repo_url = repo.repo_url\n    expected_hash = repo.commit_hash\n\n    if not repo_url:\n        raise ValueError(f\"模板仓库 {repo_name} 缺少 repo_url\")\n\n    # 本地存储路径\n    base_dir = getattr(settings, \"NUCLEI_TEMPLATES_REPOS_BASE_DIR\", \"/opt/xingrin/nuclei-repos\")\n    local_path = Path(base_dir) / repo_name.replace(\" \", \"-\").lower()\n    local_path.mkdir(parents=True, exist_ok=True)\n\n    # 检查本地是否有 .git 目录\n    if not (local_path / \".git\").is_dir():\n        # 首次：git clone\n        if not git_clone(repo_url, local_path):\n            raise RuntimeError(f\"无法 clone 模板仓库: {repo_name}\")\n    else:\n        # 已有仓库：检查 commit hash\n        local_hash = get_local_commit_hash(local_path)\n\n        if expected_hash and local_hash != expected_hash:\n            # commit 不一致：同步到 Server 版本\n            logger.info(\n                \"本地模板版本不一致: local=%s, server=%s\",\n                (local_hash or \"N/A\")[:8],\n                expected_hash[:8],\n            )\n            if not git_fetch_and_checkout(local_path, expected_hash):\n                raise RuntimeError(f\"无法同步模板仓库到指定版本: {repo_name}\")\n        elif not expected_hash:\n            # Server 没有 commit_hash（未同步过），保持本地版本\n            logger.warning(\"模板仓库 %s 在 Server 端未同步，使用本地版本\", repo_name)\n        else:\n            logger.info(\"本地模板版本一致: %s\", local_hash[:8] if local_hash else \"N/A\")\n\n    return str(local_path)\n\n\n__all__ = [\"ensure_nuclei_templates_local\"]\n"
  },
  {
    "path": "backend/apps/scan/utils/performance.py",
    "content": "\"\"\"\n性能监控工具模块\n\n提供 Flow 层的性能监控能力\n\n功能：\n1. Flow 性能监控 - 记录整体流程耗时、系统资源（CPU/内存）\n2. 定时采样 - 每 N 秒记录一次系统资源状态\n\n使用方式：\n    # Flow 层（在 handlers 中使用）\n    from apps.scan.utils.performance import FlowPerformanceTracker\n    tracker = FlowPerformanceTracker(flow_name, scan_id)\n    tracker.start()\n    # ... 执行流程 ...\n    tracker.finish(success=True, result=result)\n\"\"\"\n\nimport logging\nimport threading\nimport time\nfrom dataclasses import dataclass\nfrom typing import Optional\n\ntry:\n    import psutil\nexcept ImportError:\n    psutil = None\n\n# 性能日志使用专门的 logger\nperf_logger = logging.getLogger('performance')\n\n# 采样间隔（秒）\nSAMPLE_INTERVAL = 30\n\n\ndef _get_system_stats() -> dict:\n    \"\"\"\n    获取当前系统资源状态\n    \n    Returns:\n        dict: {'cpu_percent': float, 'memory_gb': float, 'memory_percent': float}\n    \"\"\"\n    if not psutil:\n        return {'cpu_percent': 0.0, 'memory_gb': 0.0, 'memory_percent': 0.0}\n    \n    try:\n        cpu_percent = psutil.cpu_percent(interval=0.1)\n        memory = psutil.virtual_memory()\n        memory_gb = memory.used / (1024 ** 3)\n        memory_percent = memory.percent  # psutil 直接提供内存使用百分比\n        return {\n            'cpu_percent': cpu_percent,\n            'memory_gb': memory_gb,\n            'memory_percent': memory_percent\n        }\n    except Exception:\n        return {'cpu_percent': 0.0, 'memory_gb': 0.0, 'memory_percent': 0.0}\n\n\n@dataclass\nclass FlowPerformanceMetrics:\n    \"\"\"Flow 性能指标\"\"\"\n    flow_name: str\n    scan_id: int\n    target_id: Optional[int] = None\n    target_name: Optional[str] = None\n    \n    # 时间指标\n    start_time: float = 0.0\n    end_time: float = 0.0\n    duration_seconds: float = 0.0\n    \n    # 系统资源指标\n    cpu_start: float = 0.0\n    cpu_end: float = 0.0\n    cpu_peak: float = 0.0\n    memory_gb_start: float = 0.0\n    memory_gb_end: float = 0.0\n    memory_gb_peak: float = 0.0\n    memory_percent_start: float = 0.0\n    memory_percent_end: float = 0.0\n    memory_percent_peak: float = 0.0\n    \n    # 执行结果\n    success: bool = False\n    error_message: Optional[str] = None\n\n\nclass FlowPerformanceTracker:\n    \"\"\"\n    Flow 性能追踪器\n    \n    用于追踪 Prefect Flow 的执行性能，包括：\n    - 执行耗时\n    - 系统 CPU 和内存使用\n    - 定时采样（每 30 秒）\n    \n    使用方式：\n        tracker = FlowPerformanceTracker(\"directory_scan\", scan_id=1)\n        tracker.start(target_id=1, target_name=\"example.com\")\n        # ... flow 执行 ...\n        tracker.finish(success=True, result={'created_count': 100})\n    \"\"\"\n    \n    def __init__(self, flow_name: str, scan_id: int):\n        self.metrics = FlowPerformanceMetrics(\n            flow_name=flow_name,\n            scan_id=scan_id\n        )\n        self._sampler_thread: Optional[threading.Thread] = None\n        self._stop_event = threading.Event()\n        self._samples: list[dict] = []\n    \n    def start(\n        self, \n        target_id: Optional[int] = None, \n        target_name: Optional[str] = None\n    ) -> None:\n        \"\"\"开始追踪\"\"\"\n        self.metrics.start_time = time.time()\n        self.metrics.target_id = target_id\n        self.metrics.target_name = target_name\n        \n        # 记录初始系统状态\n        stats = _get_system_stats()\n        self.metrics.cpu_start = stats['cpu_percent']\n        self.metrics.memory_gb_start = stats['memory_gb']\n        self.metrics.memory_percent_start = stats['memory_percent']\n        self.metrics.cpu_peak = stats['cpu_percent']\n        self.metrics.memory_gb_peak = stats['memory_gb']\n        self.metrics.memory_percent_peak = stats['memory_percent']\n        \n        # 记录开始日志\n        perf_logger.info(\n            \"📊 Flow 开始 - %s, scan_id=%d, 系统: CPU %.1f%%, 内存 %.1fGB(%.1f%%)\",\n            self.metrics.flow_name,\n            self.metrics.scan_id,\n            stats['cpu_percent'],\n            stats['memory_gb'],\n            stats['memory_percent']\n        )\n        \n        # 启动采样线程\n        self._stop_event.clear()\n        self._sampler_thread = threading.Thread(\n            target=self._sample_loop,\n            daemon=True,\n            name=f\"perf-sampler-{self.metrics.flow_name}-{self.metrics.scan_id}\"\n        )\n        self._sampler_thread.start()\n    \n    def _sample_loop(self) -> None:\n        \"\"\"定时采样循环\"\"\"\n        elapsed = 0\n        while not self._stop_event.wait(timeout=SAMPLE_INTERVAL):\n            elapsed += SAMPLE_INTERVAL\n            stats = _get_system_stats()\n            \n            # 更新峰值\n            if stats['cpu_percent'] > self.metrics.cpu_peak:\n                self.metrics.cpu_peak = stats['cpu_percent']\n            if stats['memory_gb'] > self.metrics.memory_gb_peak:\n                self.metrics.memory_gb_peak = stats['memory_gb']\n            if stats['memory_percent'] > self.metrics.memory_percent_peak:\n                self.metrics.memory_percent_peak = stats['memory_percent']\n            \n            # 记录采样\n            self._samples.append({\n                'elapsed': elapsed,\n                'cpu': stats['cpu_percent'],\n                'memory_gb': stats['memory_gb'],\n                'memory_percent': stats['memory_percent']\n            })\n            \n            # 输出采样日志\n            perf_logger.info(\n                \"📊 Flow 执行中 - %s [%ds], 系统: CPU %.1f%%, 内存 %.1fGB(%.1f%%)\",\n                self.metrics.flow_name,\n                elapsed,\n                stats['cpu_percent'],\n                stats['memory_gb'],\n                stats['memory_percent']\n            )\n    \n    def finish(\n        self,\n        success: bool = True,\n        error_message: Optional[str] = None\n    ) -> None:\n        \"\"\"\n        结束追踪并记录性能日志\n        \n        Args:\n            success: 是否成功\n            error_message: 错误信息\n        \"\"\"\n        # 停止采样线程\n        self._stop_event.set()\n        if self._sampler_thread and self._sampler_thread.is_alive():\n            self._sampler_thread.join(timeout=1.0)\n        \n        # 记录结束时间和状态\n        self.metrics.end_time = time.time()\n        self.metrics.duration_seconds = self.metrics.end_time - self.metrics.start_time\n        self.metrics.success = success\n        self.metrics.error_message = error_message\n        \n        # 记录结束时的系统状态\n        stats = _get_system_stats()\n        self.metrics.cpu_end = stats['cpu_percent']\n        self.metrics.memory_gb_end = stats['memory_gb']\n        self.metrics.memory_percent_end = stats['memory_percent']\n        \n        # 更新峰值（最后一次采样）\n        if stats['cpu_percent'] > self.metrics.cpu_peak:\n            self.metrics.cpu_peak = stats['cpu_percent']\n        if stats['memory_gb'] > self.metrics.memory_gb_peak:\n            self.metrics.memory_gb_peak = stats['memory_gb']\n        if stats['memory_percent'] > self.metrics.memory_percent_peak:\n            self.metrics.memory_percent_peak = stats['memory_percent']\n        \n        # 记录结束日志\n        status = \"✓\" if success else \"✗\"\n        perf_logger.info(\n            \"📊 Flow 结束 - %s %s, scan_id=%d, 耗时: %.1fs, \"\n            \"CPU: %.1f%%→%.1f%%(峰值%.1f%%), 内存: %.1fGB(%.1f%%)→%.1fGB(%.1f%%)(峰值%.1fGB/%.1f%%)\",\n            self.metrics.flow_name,\n            status,\n            self.metrics.scan_id,\n            self.metrics.duration_seconds,\n            self.metrics.cpu_start,\n            self.metrics.cpu_end,\n            self.metrics.cpu_peak,\n            self.metrics.memory_gb_start,\n            self.metrics.memory_percent_start,\n            self.metrics.memory_gb_end,\n            self.metrics.memory_percent_end,\n            self.metrics.memory_gb_peak,\n            self.metrics.memory_percent_peak\n        )\n        \n        if not success and error_message:\n            perf_logger.warning(\n                \"📊 Flow 失败原因 - %s: %s\",\n                self.metrics.flow_name,\n                error_message\n            )\n\n\ndef _get_process_stats(pid: int) -> dict:\n    \"\"\"\n    获取指定进程及其子进程的资源使用（类似 htop 显示）\n    \n    Args:\n        pid: 进程 ID\n    \n    Returns:\n        dict: {\n            'cpu_percent': float,  # 进程 CPU 使用率\n            'memory_mb': float,    # 进程内存使用 (MB)\n            'memory_percent': float  # 进程内存占比\n        }\n    \"\"\"\n    if not psutil:\n        return {'cpu_percent': 0.0, 'memory_mb': 0.0, 'memory_percent': 0.0}\n    \n    try:\n        process = psutil.Process(pid)\n        \n        # 获取进程及所有子进程\n        children = process.children(recursive=True)\n        all_processes = [process] + children\n        \n        total_cpu = 0.0\n        total_memory = 0\n        \n        for p in all_processes:\n            try:\n                # CPU 百分比计算：\n                # - interval=0 使用上次调用的缓存值（需要先调用过一次初始化）\n                # - 如果没有缓存值，会返回 0.0\n                # - 这避免了每次采样都等待 0.1 秒的问题\n                cpu_percent = p.cpu_percent()\n                total_cpu += cpu_percent\n                \n                mem_info = p.memory_info()\n                total_memory += mem_info.rss  # RSS: Resident Set Size\n            except (psutil.NoSuchProcess, psutil.AccessDenied):\n                continue\n        \n        # 转换为 MB\n        memory_mb = total_memory / (1024 * 1024)\n        # 计算内存占比\n        total_mem = psutil.virtual_memory().total\n        memory_percent = (total_memory / total_mem) * 100 if total_mem > 0 else 0.0\n        \n        return {\n            'cpu_percent': total_cpu,\n            'memory_mb': memory_mb,\n            'memory_percent': memory_percent\n        }\n    except (psutil.NoSuchProcess, psutil.AccessDenied):\n        return {'cpu_percent': 0.0, 'memory_mb': 0.0, 'memory_percent': 0.0}\n    except Exception:\n        return {'cpu_percent': 0.0, 'memory_mb': 0.0, 'memory_percent': 0.0}\n\n\nclass CommandPerformanceTracker:\n    \"\"\"\n    命令执行性能追踪器\n    \n    用于追踪单个命令的执行性能，包括：\n    - 执行耗时\n    - 进程级 CPU 和内存使用（类似 htop）\n    - 系统整体资源状态\n    \n    使用方式：\n        tracker = CommandPerformanceTracker(\"ffuf\", command=\"ffuf -u http://...\")\n        tracker.start()\n        tracker.set_pid(process.pid)  # 进程启动后设置 PID\n        # ... 执行命令 ...\n        tracker.finish(success=True, duration=45.2)\n    \"\"\"\n    \n    def __init__(self, tool_name: str, command: str = \"\"):\n        self.tool_name = tool_name\n        self.command = command\n        self.start_time: float = 0.0\n        self.pid: Optional[int] = None\n        # 系统级资源\n        self.sys_cpu_start: float = 0.0\n        self.sys_memory_gb_start: float = 0.0\n        self.sys_memory_percent_start: float = 0.0\n        # 进程级资源峰值\n        self.proc_cpu_peak: float = 0.0\n        self.proc_memory_mb_peak: float = 0.0\n        self.proc_memory_percent_peak: float = 0.0\n    \n    def start(self) -> None:\n        \"\"\"开始追踪，记录初始系统状态\"\"\"\n        self.start_time = time.time()\n        stats = _get_system_stats()\n        self.sys_cpu_start = stats['cpu_percent']\n        self.sys_memory_gb_start = stats['memory_gb']\n        self.sys_memory_percent_start = stats['memory_percent']\n        \n        # 截断过长的命令\n        cmd_display = self.command[:200] + \"...\" if len(self.command) > 200 else self.command\n        \n        perf_logger.info(\n            \"📊 命令开始 - %s, 系统: CPU %.1f%%, 内存 %.1fGB(%.1f%%), 命令: %s\",\n            self.tool_name,\n            self.sys_cpu_start,\n            self.sys_memory_gb_start,\n            self.sys_memory_percent_start,\n            cmd_display\n        )\n    \n    def set_pid(self, pid: int) -> None:\n        \"\"\"\n        设置要追踪的进程 PID\n        \n        Args:\n            pid: 进程 ID\n        \"\"\"\n        self.pid = pid\n        # 初始化 CPU 采样（psutil 需要先调用一次）\n        # CPU 百分比计算需要两次调用之间的时间间隔，第一次调用是初始化\n        if psutil and pid:\n            try:\n                process = psutil.Process(pid)\n                # 第一次调用初始化 CPU 计算基准\n                process.cpu_percent()\n                # 为所有子进程也初始化 CPU 计算\n                for child in process.children(recursive=True):\n                    try:\n                        child.cpu_percent()\n                    except (psutil.NoSuchProcess, psutil.AccessDenied):\n                        pass\n            except (psutil.NoSuchProcess, psutil.AccessDenied):\n                pass\n    \n    def sample(self) -> dict:\n        \"\"\"\n        采样当前进程资源使用（可选，用于长时间运行的命令）\n        \n        Returns:\n            dict: 进程资源使用情况\n        \"\"\"\n        if not self.pid:\n            return {'cpu_percent': 0.0, 'memory_mb': 0.0, 'memory_percent': 0.0}\n        \n        stats = _get_process_stats(self.pid)\n        \n        # 更新峰值\n        if stats['cpu_percent'] > self.proc_cpu_peak:\n            self.proc_cpu_peak = stats['cpu_percent']\n        if stats['memory_mb'] > self.proc_memory_mb_peak:\n            self.proc_memory_mb_peak = stats['memory_mb']\n        if stats['memory_percent'] > self.proc_memory_percent_peak:\n            self.proc_memory_percent_peak = stats['memory_percent']\n        \n        return stats\n    \n    def finish(\n        self,\n        success: bool = True,\n        duration: Optional[float] = None,\n        timeout: Optional[int] = None,\n        is_timeout: bool = False\n    ) -> None:\n        \"\"\"\n        结束追踪并记录性能日志\n        \n        Args:\n            success: 是否成功\n            duration: 执行耗时（秒），如果不传则自动计算\n            timeout: 超时配置（秒）\n            is_timeout: 是否超时\n        \"\"\"\n        # 计算耗时\n        if duration is None:\n            duration = time.time() - self.start_time\n        \n        # 获取结束时的系统状态\n        sys_stats = _get_system_stats()\n        \n        # 获取进程最终资源使用（如果进程还在）\n        proc_stats = {'cpu_percent': 0.0, 'memory_mb': 0.0, 'memory_percent': 0.0}\n        if self.pid:\n            proc_stats = _get_process_stats(self.pid)\n            # 更新峰值\n            if proc_stats['cpu_percent'] > self.proc_cpu_peak:\n                self.proc_cpu_peak = proc_stats['cpu_percent']\n            if proc_stats['memory_mb'] > self.proc_memory_mb_peak:\n                self.proc_memory_mb_peak = proc_stats['memory_mb']\n            if proc_stats['memory_percent'] > self.proc_memory_percent_peak:\n                self.proc_memory_percent_peak = proc_stats['memory_percent']\n        \n        status = \"✓\" if success else (\"⏱ 超时\" if is_timeout else \"✗\")\n        \n        # 截断过长的命令\n        cmd_display = self.command[:200] + \"...\" if len(self.command) > 200 else self.command\n        \n        # 日志格式：进程资源 + 系统资源\n        if self.pid and (self.proc_cpu_peak > 0 or self.proc_memory_mb_peak > 0):\n            perf_logger.info(\n                \"📊 命令结束 - %s %s, 耗时: %.2fs%s, \"\n                \"进程: CPU %.1f%%(峰值), 内存 %.1fMB(%.1f%%峰值), \"\n                \"系统: CPU %.1f%%→%.1f%%, 内存 %.1fGB(%.1f%%)→%.1fGB(%.1f%%), \"\n                \"命令: %s\",\n                self.tool_name,\n                status,\n                duration,\n                f\", 超时配置: {timeout}s\" if timeout else \"\",\n                self.proc_cpu_peak,\n                self.proc_memory_mb_peak,\n                self.proc_memory_percent_peak,\n                self.sys_cpu_start,\n                sys_stats['cpu_percent'],\n                self.sys_memory_gb_start,\n                self.sys_memory_percent_start,\n                sys_stats['memory_gb'],\n                sys_stats['memory_percent'],\n                cmd_display\n            )\n        else:\n            # 没有进程级数据，只显示系统级\n            perf_logger.info(\n                \"📊 命令结束 - %s %s, 耗时: %.2fs%s, \"\n                \"系统: CPU %.1f%%→%.1f%%, 内存 %.1fGB(%.1f%%)→%.1fGB(%.1f%%), \"\n                \"命令: %s\",\n                self.tool_name,\n                status,\n                duration,\n                f\", 超时配置: {timeout}s\" if timeout else \"\",\n                self.sys_cpu_start,\n                sys_stats['cpu_percent'],\n                self.sys_memory_gb_start,\n                self.sys_memory_percent_start,\n                sys_stats['memory_gb'],\n                sys_stats['memory_percent'],\n                cmd_display\n            )\n"
  },
  {
    "path": "backend/apps/scan/utils/system_load.py",
    "content": "\"\"\"\n系统负载检查工具\n\n提供统一的系统负载检查功能，用于：\n- Flow 入口处检查系统资源是否充足\n- 防止在高负载时启动新的扫描任务\n\"\"\"\n\nimport logging\nimport time\n\nimport psutil\nfrom django.conf import settings\n\nlogger = logging.getLogger(__name__)\n\n# 动态并发控制阈值（可在 Django settings 中覆盖）\nSCAN_CPU_HIGH: float = getattr(settings, 'SCAN_CPU_HIGH', 90.0)\nSCAN_MEM_HIGH: float = getattr(settings, 'SCAN_MEM_HIGH', 80.0)\nSCAN_LOAD_CHECK_INTERVAL: int = getattr(settings, 'SCAN_LOAD_CHECK_INTERVAL', 180)\n\n\ndef _get_current_load() -> tuple[float, float]:\n    \"\"\"获取当前 CPU 和内存使用率\"\"\"\n    return psutil.cpu_percent(interval=0.5), psutil.virtual_memory().percent\n\n\ndef wait_for_system_load(\n    cpu_threshold: float = SCAN_CPU_HIGH,\n    mem_threshold: float = SCAN_MEM_HIGH,\n    check_interval: int = SCAN_LOAD_CHECK_INTERVAL,\n    context: str = \"task\"\n) -> None:\n    \"\"\"\n    等待系统负载降到阈值以下\n\n    在高负载时阻塞等待，直到 CPU 和内存都低于阈值。\n    用于 Flow 入口处，防止在资源紧张时启动新任务。\n    \"\"\"\n    while True:\n        cpu, mem = _get_current_load()\n\n        if cpu < cpu_threshold and mem < mem_threshold:\n            logger.debug(\n                \"[%s] 系统负载正常: cpu=%.1f%%, mem=%.1f%%\",\n                context, cpu, mem\n            )\n            return\n\n        logger.info(\n            \"[%s] 系统负载较高，等待资源释放: \"\n            \"cpu=%.1f%% (阈值 %.1f%%), mem=%.1f%% (阈值 %.1f%%)\",\n            context, cpu, cpu_threshold, mem, mem_threshold\n        )\n        time.sleep(check_interval)\n\n\ndef check_system_load(\n    cpu_threshold: float = SCAN_CPU_HIGH,\n    mem_threshold: float = SCAN_MEM_HIGH\n) -> dict:\n    \"\"\"\n    检查当前系统负载（非阻塞）\n\n    Returns:\n        dict: cpu_percent, mem_percent, cpu_threshold, mem_threshold, is_overloaded\n    \"\"\"\n    cpu, mem = _get_current_load()\n\n    return {\n        'cpu_percent': cpu,\n        'mem_percent': mem,\n        'cpu_threshold': cpu_threshold,\n        'mem_threshold': mem_threshold,\n        'is_overloaded': cpu >= cpu_threshold or mem >= mem_threshold,\n    }\n\n"
  },
  {
    "path": "backend/apps/scan/utils/user_logger.py",
    "content": "\"\"\"\n扫描日志记录器\n\n提供统一的日志记录接口，用于在 Flow 中记录用户可见的扫描进度日志。\n\n特性：\n- 简单的函数式 API\n- 只写入数据库（ScanLog 表），不写 Python logging\n- 错误容忍（数据库失败不影响扫描执行）\n\n职责分离：\n- user_log: 用户可见日志（写数据库，前端展示）\n- logger: 开发者日志（写日志文件/控制台，调试用）\n\n使用示例：\n    from apps.scan.utils import user_log\n    \n    # 用户日志（写数据库）\n    user_log(scan_id, \"port_scan\", \"Starting port scan\")\n    user_log(scan_id, \"port_scan\", \"naabu completed: found 120 ports\")\n    \n    # 开发者日志（写日志文件）\n    logger.info(\"✓ 工具 %s 执行完成 - 记录数: %d\", tool_name, count)\n\"\"\"\n\nimport logging\nfrom django.db import DatabaseError\n\nlogger = logging.getLogger(__name__)\n\n\ndef user_log(scan_id: int, stage: str, message: str, level: str = \"info\"):\n    \"\"\"\n    记录用户可见的扫描日志（只写数据库）\n    \n    Args:\n        scan_id: 扫描任务 ID\n        stage: 阶段名称，如 \"port_scan\", \"site_scan\"\n        message: 日志消息\n        level: 日志级别，默认 \"info\"，可选 \"warning\", \"error\"\n        \n    数据库 content 格式: \"[{stage}] {message}\"\n    \"\"\"\n    formatted = f\"[{stage}] {message}\"\n    \n    try:\n        from apps.scan.models import ScanLog\n        ScanLog.objects.create(\n            scan_id=scan_id,\n            level=level,\n            content=formatted\n        )\n    except DatabaseError as e:\n        logger.error(\"ScanLog write failed - scan_id=%s, error=%s\", scan_id, e)\n    except Exception as e:\n        logger.error(\"ScanLog write unexpected error - scan_id=%s, error=%s\", scan_id, e)\n"
  },
  {
    "path": "backend/apps/scan/utils/wordlist_helpers.py",
    "content": "\"\"\"字典文件本地缓存与校验工具\n\n提供 worker 侧的字典文件下载和 hash 校验功能，用于：\n- 目录扫描 (directory_scan_flow)\n- 子域名爆破 (subdomain_discovery_flow)\n\"\"\"\n\nimport logging\nimport os\nimport ssl\nfrom pathlib import Path\nfrom urllib import request as urllib_request\nfrom urllib import parse as urllib_parse\n\nfrom django.conf import settings\n\nfrom apps.common.utils import is_file_hash_match\nfrom apps.engine.services import WordlistService\n\nlogger = logging.getLogger(__name__)\n\n\ndef ensure_wordlist_local(wordlist_name: str) -> str:\n    \"\"\"确保本地存在指定字典文件，并返回本地路径\n\n    流程：\n    1. 从 DB 查询 Wordlist 记录\n    2. 计算本地缓存路径\n    3. 如果本地文件存在且 hash 匹配，直接返回路径\n    4. 否则从后端 API 下载最新文件\n\n    Args:\n        wordlist_name: 字典名称（对应 Wordlist.name）\n\n    Returns:\n        str: 本地字典文件绝对路径\n\n    Raises:\n        ValueError: 字典不存在或参数无效\n        RuntimeError: 下载失败\n    \"\"\"\n    if not wordlist_name:\n        raise ValueError(\"wordlist_name 不能为空\")\n\n    service = WordlistService()\n    wordlist = service.get_wordlist_by_name(wordlist_name)\n    if not wordlist:\n        raise ValueError(f\"未找到名称为 '{wordlist_name}' 的字典，请在「字典管理」中先创建\")\n\n    # 计算本地缓存路径\n    backend_path = Path(wordlist.file_path)\n    base_dir = getattr(settings, 'WORDLISTS_BASE_PATH', '/opt/xingrin/wordlists')\n    storage_dir = Path(base_dir)\n    storage_dir.mkdir(parents=True, exist_ok=True)\n    local_path = storage_dir / backend_path.name\n\n    # 获取期望的 hash（可能为空，表示老数据）\n    expected_hash = getattr(wordlist, 'file_hash', '') or ''\n\n    # 如果本地文件存在，进行 hash 校验\n    if local_path.exists():\n        if expected_hash:\n            # 有 hash，进行校验\n            if is_file_hash_match(str(local_path), expected_hash):\n                logger.info(\"本地字典文件有效（hash 匹配）: %s\", local_path)\n                return str(local_path)\n            else:\n                logger.info(\"本地字典文件 hash 不匹配，将重新下载: %s\", local_path)\n        else:\n            # 无 hash（老数据），保持旧逻辑：直接复用\n            logger.info(\"本地已存在字典文件（无 hash 校验）: %s\", local_path)\n            return str(local_path)\n\n    # 从后端下载字典\n    # 优先使用 SERVER_URL 环境变量（动态容器中传递），否则使用 settings 配置\n    server_url = os.getenv('SERVER_URL', '').strip()\n    if server_url:\n        api_base = f\"{server_url.rstrip('/')}/api\"\n    else:\n        public_host = getattr(settings, 'PUBLIC_HOST', '').strip()\n        if not public_host:\n            raise RuntimeError(\n                \"无法确定 Django API 地址：请配置 SERVER_URL 或 PUBLIC_HOST 环境变量\"\n            )\n        # 远程 Worker 通过 nginx HTTPS 访问，不再直连 8888\n        public_port = getattr(settings, 'PUBLIC_PORT', '8083')\n        api_base = f\"https://{public_host}:{public_port}/api\"\n    query = urllib_parse.urlencode({'wordlist': wordlist_name})\n    download_url = f\"{api_base.rstrip('/')}/wordlists/download/?{query}\"\n\n    logger.info(\"从后端下载字典: %s -> %s\", download_url, local_path)\n\n    try:\n        # 创建不验证 SSL 的上下文（远程 Worker 可能使用自签名证书）\n        ssl_context = ssl.create_default_context()\n        ssl_context.check_hostname = False\n        ssl_context.verify_mode = ssl.CERT_NONE\n        \n        # 创建带 API Key 的请求\n        req = urllib_request.Request(download_url)\n        worker_api_key = os.getenv('WORKER_API_KEY', '')\n        if worker_api_key:\n            req.add_header('X-Worker-API-Key', worker_api_key)\n        \n        with urllib_request.urlopen(req, context=ssl_context) as resp:\n            if resp.status != 200:\n                raise RuntimeError(f\"下载字典失败，HTTP {resp.status}\")\n            data = resp.read()\n    except Exception as exc:\n        logger.error(\"下载字典失败: %s\", exc)\n        raise RuntimeError(f\"下载字典失败: {exc}\") from exc\n\n    with open(local_path, 'wb') as f:\n        f.write(data)\n\n    logger.info(\"字典下载完成并保存到: %s\", local_path)\n    return str(local_path)\n\n\n__all__ = [\"ensure_wordlist_local\"]\n"
  },
  {
    "path": "backend/apps/scan/utils/workspace_utils.py",
    "content": "\"\"\"\n工作空间工具模块\n\n提供统一的扫描工作目录创建和验证功能\n\"\"\"\n\nfrom pathlib import Path\nimport logging\n\nlogger = logging.getLogger(__name__)\n\n\ndef setup_scan_workspace(scan_workspace_dir: str) -> Path:\n    \"\"\"\n    创建 Scan 根工作空间目录\n    \n    Args:\n        scan_workspace_dir: 工作空间目录路径\n        \n    Returns:\n        Path: 创建的目录路径\n        \n    Raises:\n        RuntimeError: 目录创建失败或不可写\n    \"\"\"\n    workspace_path = Path(scan_workspace_dir)\n    \n    try:\n        workspace_path.mkdir(parents=True, exist_ok=True)\n    except OSError as e:\n        raise RuntimeError(f\"创建工作空间失败: {scan_workspace_dir} - {e}\") from e\n    \n    # 验证可写\n    _verify_writable(workspace_path)\n    \n    logger.info(\"✓ Scan 工作空间已创建: %s\", workspace_path)\n    return workspace_path\n\n\ndef setup_scan_directory(scan_workspace_dir: str, subdir: str) -> Path:\n    \"\"\"\n    创建扫描子目录\n    \n    Args:\n        scan_workspace_dir: 根工作空间目录\n        subdir: 子目录名称（如 'fingerprint_detect', 'site_scan'）\n        \n    Returns:\n        Path: 创建的子目录路径\n        \n    Raises:\n        RuntimeError: 目录创建失败或不可写\n    \"\"\"\n    scan_dir = Path(scan_workspace_dir) / subdir\n    \n    try:\n        scan_dir.mkdir(parents=True, exist_ok=True)\n    except OSError as e:\n        raise RuntimeError(f\"创建扫描目录失败: {scan_dir} - {e}\") from e\n    \n    # 验证可写\n    _verify_writable(scan_dir)\n    \n    logger.info(\"✓ 扫描目录已创建: %s\", scan_dir)\n    return scan_dir\n\n\ndef _verify_writable(path: Path) -> None:\n    \"\"\"\n    验证目录可写\n    \n    Args:\n        path: 目录路径\n        \n    Raises:\n        RuntimeError: 目录不可写\n    \"\"\"\n    test_file = path / \".test_write\"\n    try:\n        test_file.touch()\n        test_file.unlink()\n    except OSError as e:\n        raise RuntimeError(f\"目录不可写: {path} - {e}\") from e\n"
  },
  {
    "path": "backend/apps/scan/views/__init__.py",
    "content": "\"\"\"Scan Views - 统一导出\"\"\"\n\nfrom .scan_views import ScanViewSet\nfrom .scheduled_scan_views import ScheduledScanViewSet\nfrom .scan_log_views import ScanLogListView\nfrom .subfinder_provider_settings_views import SubfinderProviderSettingsView\n\n__all__ = [\n    'ScanViewSet',\n    'ScheduledScanViewSet',\n    'ScanLogListView',\n    'SubfinderProviderSettingsView',\n]\n"
  },
  {
    "path": "backend/apps/scan/views/scan_log_views.py",
    "content": "\"\"\"\n扫描日志 API\n\n提供扫描日志查询接口，支持游标分页用于增量轮询。\n\"\"\"\n\nfrom rest_framework.views import APIView\nfrom rest_framework.response import Response\n\nfrom apps.scan.models import ScanLog\nfrom apps.scan.serializers import ScanLogSerializer\n\n\nclass ScanLogListView(APIView):\n    \"\"\"\n    GET /scans/{scan_id}/logs/\n    \n    游标分页 API，用于增量查询日志\n    \n    查询参数：\n    - afterId: 只返回此 ID 之后的日志（用于增量轮询，避免时间戳重复导致的重复日志）\n    - limit: 返回数量限制（默认 200，最大 1000）\n    \n    返回：\n    - results: 日志列表\n    - hasMore: 是否还有更多日志\n    \"\"\"\n    \n    def get(self, request, scan_id: int):\n        # 参数解析\n        after_id = request.query_params.get('afterId')\n        try:\n            limit = min(int(request.query_params.get('limit', 200)), 1000)\n        except (ValueError, TypeError):\n            limit = 200\n        \n        # 查询日志（按 ID 排序，ID 是自增的，保证顺序一致）\n        queryset = ScanLog.objects.filter(scan_id=scan_id).order_by('id')\n        \n        # 游标过滤（使用 ID 而非时间戳，避免同一时间戳多条日志导致重复）\n        if after_id:\n            try:\n                queryset = queryset.filter(id__gt=int(after_id))\n            except (ValueError, TypeError):\n                pass\n        \n        # 限制返回数量（多取一条用于判断 hasMore）\n        logs = list(queryset[:limit + 1])\n        has_more = len(logs) > limit\n        if has_more:\n            logs = logs[:limit]\n        \n        return Response({\n            'results': ScanLogSerializer(logs, many=True).data,\n            'hasMore': has_more,\n        })\n"
  },
  {
    "path": "backend/apps/scan/views/scan_views.py",
    "content": "from rest_framework import viewsets, status\nfrom rest_framework.decorators import action\nfrom rest_framework.response import Response\nfrom rest_framework.exceptions import NotFound, APIException\nfrom rest_framework.filters import SearchFilter\nfrom django_filters.rest_framework import DjangoFilterBackend\nfrom django.core.exceptions import ObjectDoesNotExist, ValidationError\nfrom django.db.utils import DatabaseError, IntegrityError, OperationalError\nimport logging\n\nfrom apps.common.response_helpers import success_response, error_response\nfrom apps.common.error_codes import ErrorCodes\nfrom apps.scan.utils.config_merger import ConfigConflictError\n\nlogger = logging.getLogger(__name__)\n\nfrom ..models import Scan, ScheduledScan\nfrom ..serializers import (\n    ScanSerializer, ScanHistorySerializer, QuickScanSerializer,\n    InitiateScanSerializer, ScheduledScanSerializer, CreateScheduledScanSerializer,\n    UpdateScheduledScanSerializer, ToggleScheduledScanSerializer\n)\nfrom ..services.scan_service import ScanService\nfrom ..services.scheduled_scan_service import ScheduledScanService\nfrom ..repositories import ScheduledScanDTO\nfrom apps.targets.services.target_service import TargetService\nfrom apps.targets.services.organization_service import OrganizationService\nfrom apps.engine.services.engine_service import EngineService\nfrom apps.common.definitions import ScanStatus\nfrom apps.common.pagination import BasePagination\n\n\nclass ScanViewSet(viewsets.ModelViewSet):\n    \"\"\"扫描任务视图集\"\"\"\n    serializer_class = ScanSerializer\n    pagination_class = BasePagination\n    filter_backends = [DjangoFilterBackend, SearchFilter]\n    filterset_fields = ['target']  # 支持 ?target=123 过滤\n    search_fields = ['target__name']  # 按目标名称搜索\n    \n    def get_queryset(self):\n        \"\"\"优化查询集，提升API性能\n        \n        查询优化策略：\n        - select_related: 预加载 target 和 engine（一对一/多对一关系，使用 JOIN）\n        - 移除 prefetch_related: 避免加载大量资产数据到内存\n        - order_by: 按创建时间降序排列（最新创建的任务排在最前面）\n        \n        性能优化原理：\n        - 列表页：使用缓存统计字段（cached_*_count），避免实时 COUNT 查询\n        - 序列化器：严格验证缓存字段，确保数据一致性\n        - 分页场景：每页只显示10条记录，查询高效\n        - 避免大数据加载：不再预加载所有关联的资产数据\n        \"\"\"\n        # 只保留必要的 select_related，移除所有 prefetch_related\n        scan_service = ScanService()\n        queryset = scan_service.get_all_scans(prefetch_relations=True)\n        \n        return queryset\n    \n    def get_serializer_class(self):\n        \"\"\"根据不同的 action 返回不同的序列化器\n        \n        - list action: 使用 ScanHistorySerializer（包含 summary 和 progress）\n        - retrieve action: 使用 ScanHistorySerializer（包含 summary 和 progress）\n        - 其他 action: 使用标准的 ScanSerializer\n        \"\"\"\n        if self.action in ['list', 'retrieve']:\n            return ScanHistorySerializer\n        return ScanSerializer\n\n    def destroy(self, request, *args, **kwargs):\n        \"\"\"\n        删除单个扫描任务（两阶段删除）\n        \n        1. 软删除：立即对用户不可见\n        2. 硬删除：后台异步执行\n        \"\"\"\n        try:\n            scan = self.get_object()\n            scan_service = ScanService()\n            result = scan_service.delete_scans_two_phase([scan.id])\n            \n            return success_response(\n                data={\n                    'scanId': scan.id,\n                    'deletedCount': result['soft_deleted_count'],\n                    'deletedScans': result['scan_names']\n                }\n            )\n            \n        except Scan.DoesNotExist:\n            return error_response(\n                code=ErrorCodes.NOT_FOUND,\n                status_code=status.HTTP_404_NOT_FOUND\n            )\n        except ValueError as e:\n            return error_response(\n                code=ErrorCodes.NOT_FOUND,\n                message=str(e),\n                status_code=status.HTTP_404_NOT_FOUND\n            )\n        except Exception as e:\n            logger.exception(\"删除扫描任务时发生错误\")\n            return error_response(\n                code=ErrorCodes.SERVER_ERROR,\n                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR\n            )\n    \n    @action(detail=False, methods=['post'])\n    def quick(self, request):\n        \"\"\"\n        快速扫描接口\n        \n        功能：\n        1. 接收目标列表和 YAML 配置\n        2. 自动解析输入（支持 URL、域名、IP、CIDR）\n        3. 批量创建 Target、Website、Endpoint 资产\n        4. 立即发起批量扫描\n        \n        请求参数：\n        {\n            \"targets\": [{\"name\": \"example.com\"}, {\"name\": \"https://example.com/api\"}],\n            \"configuration\": \"subdomain_discovery:\\n  enabled: true\\n  ...\",\n            \"engine_ids\": [1, 2],  // 可选，用于记录\n            \"engine_names\": [\"引擎A\", \"引擎B\"]  // 可选，用于记录\n        }\n        \n        支持的输入格式：\n        - 域名: example.com\n        - IP: 192.168.1.1\n        - CIDR: 10.0.0.0/8\n        - URL: https://example.com/api/v1\n        \"\"\"\n        from ..services.quick_scan_service import QuickScanService\n        \n        serializer = QuickScanSerializer(data=request.data)\n        serializer.is_valid(raise_exception=True)\n        \n        targets_data = serializer.validated_data['targets']\n        configuration = serializer.validated_data['configuration']\n        engine_ids = serializer.validated_data.get('engine_ids', [])\n        engine_names = serializer.validated_data.get('engine_names', [])\n        \n        try:\n            # 提取输入字符串列表\n            inputs = [t['name'] for t in targets_data]\n            \n            # 1. 使用 QuickScanService 解析输入并创建资产\n            quick_scan_service = QuickScanService()\n            result = quick_scan_service.process_quick_scan(inputs, engine_ids[0] if engine_ids else None)\n            \n            targets = result['targets']\n            \n            if not targets:\n                return error_response(\n                    code=ErrorCodes.VALIDATION_ERROR,\n                    message='No valid targets for scanning',\n                    details=result.get('errors', []),\n                    status_code=status.HTTP_400_BAD_REQUEST\n                )\n            \n            # 2. 直接使用前端传递的配置创建扫描\n            scan_service = ScanService()\n            created_scans = scan_service.create_scans(\n                targets=targets,\n                engine_ids=engine_ids,\n                engine_names=engine_names,\n                yaml_configuration=configuration\n            )\n            \n            # 检查是否成功创建扫描任务\n            if not created_scans:\n                return error_response(\n                    code=ErrorCodes.VALIDATION_ERROR,\n                    message='No scan tasks were created. All targets may already have active scans.',\n                    details={\n                        'targetStats': result['target_stats'],\n                        'assetStats': result['asset_stats'],\n                        'errors': result.get('errors', [])\n                    },\n                    status_code=status.HTTP_422_UNPROCESSABLE_ENTITY\n                )\n            \n            # 序列化返回结果\n            scan_serializer = ScanSerializer(created_scans, many=True)\n            \n            return success_response(\n                data={\n                    'count': len(created_scans),\n                    'targetStats': result['target_stats'],\n                    'assetStats': result['asset_stats'],\n                    'errors': result.get('errors', []),\n                    'scans': scan_serializer.data\n                },\n                status_code=status.HTTP_201_CREATED\n            )\n            \n        except ValidationError as e:\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message=str(e),\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        except Exception as e:\n            logger.exception(\"快速扫描启动失败\")\n            return error_response(\n                code=ErrorCodes.SERVER_ERROR,\n                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR\n            )\n\n    @action(detail=False, methods=['post'])\n    def initiate(self, request):\n        \"\"\"\n        发起扫描任务\n        \n        请求参数:\n        - organization_id: 组织ID (int, 可选)\n        - target_id: 目标ID (int, 可选)\n        - configuration: YAML 配置字符串 (str, 必填)\n        - engine_ids: 扫描引擎ID列表 (list[int], 必填)\n        - engine_names: 引擎名称列表 (list[str], 必填)\n        \n        注意: organization_id 和 target_id 二选一\n        \n        返回:\n        - 扫描任务详情（单个或多个）\n        \"\"\"\n        # 使用 serializer 验证请求数据\n        serializer = InitiateScanSerializer(data=request.data)\n        serializer.is_valid(raise_exception=True)\n        \n        # 获取验证后的数据\n        organization_id = serializer.validated_data.get('organization_id')\n        target_id = serializer.validated_data.get('target_id')\n        configuration = serializer.validated_data['configuration']\n        engine_ids = serializer.validated_data['engine_ids']\n        engine_names = serializer.validated_data['engine_names']\n        \n        try:\n            # 获取目标列表\n            scan_service = ScanService()\n            \n            if organization_id:\n                from apps.targets.repositories import DjangoOrganizationRepository\n                org_repo = DjangoOrganizationRepository()\n                organization = org_repo.get_by_id(organization_id)\n                if not organization:\n                    raise ObjectDoesNotExist(f'Organization ID {organization_id} 不存在')\n                targets = org_repo.get_targets(organization_id)\n                if not targets:\n                    raise ValidationError(f'组织 ID {organization_id} 下没有目标')\n            else:\n                from apps.targets.repositories import DjangoTargetRepository\n                target_repo = DjangoTargetRepository()\n                target = target_repo.get_by_id(target_id)\n                if not target:\n                    raise ObjectDoesNotExist(f'Target ID {target_id} 不存在')\n                targets = [target]\n            \n            # 直接使用前端传递的配置创建扫描\n            created_scans = scan_service.create_scans(\n                targets=targets,\n                engine_ids=engine_ids,\n                engine_names=engine_names,\n                yaml_configuration=configuration\n            )\n            \n            # 检查是否成功创建扫描任务\n            if not created_scans:\n                return error_response(\n                    code=ErrorCodes.VALIDATION_ERROR,\n                    message='No scan tasks were created. All targets may already have active scans.',\n                    status_code=status.HTTP_422_UNPROCESSABLE_ENTITY\n                )\n            \n            # 序列化返回结果\n            scan_serializer = ScanSerializer(created_scans, many=True)\n            \n            return success_response(\n                data={\n                    'count': len(created_scans),\n                    'scans': scan_serializer.data\n                },\n                status_code=status.HTTP_201_CREATED\n            )\n            \n        except ObjectDoesNotExist as e:\n            # 资源不存在错误（由 service 层抛出）\n            return error_response(\n                code=ErrorCodes.NOT_FOUND,\n                message=str(e),\n                status_code=status.HTTP_404_NOT_FOUND\n            )\n        \n        except ValidationError as e:\n            # 参数验证错误（由 service 层抛出）\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message=str(e),\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        \n        except (DatabaseError, IntegrityError, OperationalError):\n            # 数据库错误\n            return error_response(\n                code=ErrorCodes.SERVER_ERROR,\n                message='Database error',\n                status_code=status.HTTP_503_SERVICE_UNAVAILABLE\n            )\n\n    # 所有快照相关的 action 和 export 已迁移到 asset/views.py 中的快照 ViewSet\n    # GET /api/scans/{id}/subdomains/ -> SubdomainSnapshotViewSet\n    # GET /api/scans/{id}/subdomains/export/ -> SubdomainSnapshotViewSet.export\n    # GET /api/scans/{id}/websites/ -> WebsiteSnapshotViewSet\n    # GET /api/scans/{id}/websites/export/ -> WebsiteSnapshotViewSet.export\n    # GET /api/scans/{id}/directories/ -> DirectorySnapshotViewSet\n    # GET /api/scans/{id}/directories/export/ -> DirectorySnapshotViewSet.export\n    # GET /api/scans/{id}/endpoints/ -> EndpointSnapshotViewSet\n    # GET /api/scans/{id}/endpoints/export/ -> EndpointSnapshotViewSet.export\n    # GET /api/scans/{id}/ip-addresses/ -> HostPortMappingSnapshotViewSet\n    # GET /api/scans/{id}/ip-addresses/export/ -> HostPortMappingSnapshotViewSet.export\n    # GET /api/scans/{id}/vulnerabilities/ -> VulnerabilitySnapshotViewSet\n\n    @action(detail=False, methods=['post', 'delete'], url_path='bulk-delete')\n    def bulk_delete(self, request):\n        \"\"\"\n        批量删除扫描记录\n        \n        请求参数:\n        - ids: 扫描ID列表 (list[int], 必填)\n        \n        示例请求:\n        POST /api/scans/bulk-delete/\n        {\n            \"ids\": [1, 2, 3]\n        }\n        \n        返回:\n        - message: 成功消息\n        - deletedCount: 实际删除的记录数\n        \n        注意:\n        - 使用级联删除，会同时删除关联的子域名、端点等数据\n        - 只删除存在的记录，不存在的ID会被忽略\n        \"\"\"\n        ids = request.data.get('ids', [])\n        \n        # 参数验证\n        if not ids:\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='Missing required parameter: ids',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        \n        if not isinstance(ids, list):\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='ids must be an array',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        \n        if not all(isinstance(i, int) for i in ids):\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message='All elements in ids array must be integers',\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        \n        try:\n            # 使用 Service 层批量删除（两阶段删除）\n            scan_service = ScanService()\n            result = scan_service.delete_scans_two_phase(ids)\n            \n            return success_response(\n                data={\n                    'deletedCount': result['soft_deleted_count'],\n                    'deletedScans': result['scan_names']\n                }\n            )\n            \n        except ValueError as e:\n            # 未找到记录\n            return error_response(\n                code=ErrorCodes.NOT_FOUND,\n                message=str(e),\n                status_code=status.HTTP_404_NOT_FOUND\n            )\n            \n        except Exception as e:\n            logger.exception(\"批量删除扫描任务时发生错误\")\n            return error_response(\n                code=ErrorCodes.SERVER_ERROR,\n                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR\n            )\n    \n    @action(detail=False, methods=['get'])\n    def statistics(self, request):\n        \"\"\"\n        获取扫描统计数据\n        \n        返回扫描任务的汇总统计信息，用于仪表板和扫描历史页面。\n        使用缓存字段聚合查询，性能优异。\n        \n        返回:\n        - total: 总扫描次数\n        - running: 运行中的扫描数量\n        - completed: 已完成的扫描数量\n        - failed: 失败的扫描数量\n        - totalVulns: 总共发现的漏洞数量\n        - totalSubdomains: 总共发现的子域名数量\n        - totalEndpoints: 总共发现的端点数量\n        - totalAssets: 总资产数\n        \"\"\"\n        try:\n            # 使用 Service 层获取统计数据\n            scan_service = ScanService()\n            stats = scan_service.get_statistics()\n            \n            return success_response(\n                data={\n                    'total': stats['total'],\n                    'running': stats['running'],\n                    'completed': stats['completed'],\n                    'failed': stats['failed'],\n                    'totalVulns': stats['total_vulns'],\n                    'totalSubdomains': stats['total_subdomains'],\n                    'totalEndpoints': stats['total_endpoints'],\n                    'totalWebsites': stats['total_websites'],\n                    'totalAssets': stats['total_assets'],\n                }\n            )\n        \n        except (DatabaseError, OperationalError):\n            return error_response(\n                code=ErrorCodes.SERVER_ERROR,\n                message='Database error',\n                status_code=status.HTTP_503_SERVICE_UNAVAILABLE\n            )\n    \n    @action(detail=True, methods=['post'])\n    def stop(self, request, pk=None):  # pylint: disable=unused-argument\n        \"\"\"\n        停止扫描任务\n        \n        URL: POST /api/scans/{id}/stop/\n        \n        功能:\n        - 终止正在运行或初始化的扫描任务\n        - 更新扫描状态为 CANCELLED\n        \n        状态限制:\n        - 只能停止 RUNNING 或 INITIATED 状态的扫描\n        - 已完成、失败或取消的扫描无法停止\n        \n        返回:\n        - message: 成功消息\n        - revokedTaskCount: 取消的 Flow Run 数量\n        \"\"\"\n        try:\n            # 使用 Service 层处理停止逻辑\n            scan_service = ScanService()\n            success, revoked_count = scan_service.stop_scan(scan_id=pk)\n            \n            if not success:\n                # 检查是否是状态不允许的问题\n                scan = scan_service.get_scan(scan_id=pk, prefetch_relations=False)\n                if scan and scan.status not in [ScanStatus.RUNNING, ScanStatus.INITIATED]:\n                    return error_response(\n                        code=ErrorCodes.BAD_REQUEST,\n                        message=f'Cannot stop scan: current status is {ScanStatus(scan.status).label}',\n                        status_code=status.HTTP_400_BAD_REQUEST\n                    )\n                # 其他失败原因\n                return error_response(\n                    code=ErrorCodes.SERVER_ERROR,\n                    status_code=status.HTTP_500_INTERNAL_SERVER_ERROR\n                )\n            \n            return success_response(\n                data={'revokedTaskCount': revoked_count}\n            )\n        \n        except ObjectDoesNotExist:\n            return error_response(\n                code=ErrorCodes.NOT_FOUND,\n                message=f'Scan ID {pk} not found',\n                status_code=status.HTTP_404_NOT_FOUND\n            )\n        \n        except (DatabaseError, IntegrityError, OperationalError):\n            return error_response(\n                code=ErrorCodes.SERVER_ERROR,\n                message='Database error',\n                status_code=status.HTTP_503_SERVICE_UNAVAILABLE\n            )\n"
  },
  {
    "path": "backend/apps/scan/views/scheduled_scan_views.py",
    "content": "\"\"\"\n定时扫描任务视图集\n\n独立文件，避免 views.py 文件过大\n\"\"\"\nfrom rest_framework import viewsets, status\nfrom rest_framework.decorators import action\nfrom rest_framework.response import Response\nfrom rest_framework.filters import SearchFilter\nfrom django.core.exceptions import ValidationError\nimport logging\n\nfrom ..models import ScheduledScan\nfrom ..serializers import (\n    ScheduledScanSerializer, CreateScheduledScanSerializer,\n    UpdateScheduledScanSerializer, ToggleScheduledScanSerializer\n)\nfrom ..services.scheduled_scan_service import ScheduledScanService\nfrom ..repositories import ScheduledScanDTO\nfrom ..utils.config_merger import ConfigConflictError\nfrom apps.common.pagination import BasePagination\nfrom apps.common.response_helpers import success_response, error_response\nfrom apps.common.error_codes import ErrorCodes\n\n\nlogger = logging.getLogger(__name__)\n\n\nclass ScheduledScanViewSet(viewsets.ModelViewSet):\n    \"\"\"\n    定时扫描任务视图集\n    \n    API 端点：\n    - GET    /scheduled-scans/           获取定时扫描列表\n    - POST   /scheduled-scans/           创建定时扫描\n    - GET    /scheduled-scans/{id}/      获取定时扫描详情\n    - PUT    /scheduled-scans/{id}/      更新定时扫描\n    - DELETE /scheduled-scans/{id}/      删除定时扫描\n    - POST   /scheduled-scans/{id}/toggle/   切换启用状态\n    \n    查询参数：\n    - target_id: 按目标 ID 过滤\n    - organization_id: 按组织 ID 过滤\n    - search: 按名称搜索\n    \"\"\"\n    \n    queryset = ScheduledScan.objects.all().order_by('-created_at')\n    serializer_class = ScheduledScanSerializer\n    pagination_class = BasePagination\n    filter_backends = [SearchFilter]\n    search_fields = ['name']\n    \n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.service = ScheduledScanService()\n    \n    def get_queryset(self):\n        \"\"\"支持按 target_id 和 organization_id 过滤\"\"\"\n        queryset = super().get_queryset()\n        target_id = self.request.query_params.get('target_id')\n        organization_id = self.request.query_params.get('organization_id')\n        \n        if target_id:\n            queryset = queryset.filter(target_id=target_id)\n        if organization_id:\n            queryset = queryset.filter(organization_id=organization_id)\n        \n        return queryset\n    \n    def get_serializer_class(self):\n        \"\"\"根据 action 返回不同的序列化器\"\"\"\n        if self.action == 'create':\n            return CreateScheduledScanSerializer\n        elif self.action in ['update', 'partial_update']:\n            return UpdateScheduledScanSerializer\n        elif self.action == 'toggle':\n            return ToggleScheduledScanSerializer\n        return ScheduledScanSerializer\n    \n    def create(self, request, *args, **kwargs):\n        \"\"\"创建定时扫描任务\"\"\"\n        serializer = self.get_serializer(data=request.data)\n        serializer.is_valid(raise_exception=True)\n        \n        try:\n            data = serializer.validated_data\n            dto = ScheduledScanDTO(\n                name=data['name'],\n                engine_ids=data.get('engine_ids', []),\n                engine_names=data.get('engine_names', []),\n                yaml_configuration=data['configuration'],\n                organization_id=data.get('organization_id'),\n                target_id=data.get('target_id'),\n                cron_expression=data.get('cron_expression', '0 2 * * *'),\n                is_enabled=data.get('is_enabled', True),\n            )\n            \n            scheduled_scan = self.service.create_with_configuration(dto)\n            response_serializer = ScheduledScanSerializer(scheduled_scan)\n            \n            return success_response(\n                data=response_serializer.data,\n                status_code=status.HTTP_201_CREATED\n            )\n        except ValidationError as e:\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message=str(e),\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n    \n    def update(self, request, *args, **kwargs):\n        \"\"\"更新定时扫描任务\"\"\"\n        instance = self.get_object()\n        serializer = self.get_serializer(data=request.data)\n        serializer.is_valid(raise_exception=True)\n        \n        try:\n            data = serializer.validated_data\n            dto = ScheduledScanDTO(\n                name=data.get('name'),\n                engine_ids=data.get('engine_ids'),\n                organization_id=data.get('organization_id'),\n                target_id=data.get('target_id'),\n                cron_expression=data.get('cron_expression'),\n                is_enabled=data.get('is_enabled'),\n            )\n            \n            scheduled_scan = self.service.update(instance.id, dto)\n            response_serializer = ScheduledScanSerializer(scheduled_scan)\n            \n            return success_response(data=response_serializer.data)\n        except ConfigConflictError as e:\n            return error_response(\n                code='CONFIG_CONFLICT',\n                message=str(e),\n                details=[\n                    {'key': k, 'engines': [e1, e2]} \n                    for k, e1, e2 in e.conflicts\n                ],\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n        except ValidationError as e:\n            return error_response(\n                code=ErrorCodes.VALIDATION_ERROR,\n                message=str(e),\n                status_code=status.HTTP_400_BAD_REQUEST\n            )\n    \n    def destroy(self, request, *args, **kwargs):\n        \"\"\"删除定时扫描任务\"\"\"\n        instance = self.get_object()\n        scan_id = instance.id\n        name = instance.name\n        \n        if self.service.delete(scan_id):\n            return success_response(data={'id': scan_id, 'name': name})\n        return error_response(\n            code=ErrorCodes.SERVER_ERROR,\n            message='Failed to delete scheduled scan',\n            status_code=status.HTTP_500_INTERNAL_SERVER_ERROR\n        )\n    \n    @action(detail=True, methods=['post'])\n    def toggle(self, request, pk=None):\n        \"\"\"切换定时扫描任务的启用状态\"\"\"\n        serializer = ToggleScheduledScanSerializer(data=request.data)\n        serializer.is_valid(raise_exception=True)\n        \n        is_enabled = serializer.validated_data['is_enabled']\n        \n        if self.service.toggle_enabled(int(pk), is_enabled):\n            scheduled_scan = self.get_object()\n            response_serializer = ScheduledScanSerializer(scheduled_scan)\n            \n            return success_response(data=response_serializer.data)\n        \n        return error_response(\n            code=ErrorCodes.NOT_FOUND,\n            message=f'Scheduled scan with ID {pk} not found or operation failed',\n            status_code=status.HTTP_404_NOT_FOUND\n        )\n    \n"
  },
  {
    "path": "backend/apps/scan/views/subfinder_provider_settings_views.py",
    "content": "\"\"\"Subfinder Provider 配置视图\"\"\"\n\nimport logging\nfrom rest_framework import status\nfrom rest_framework.views import APIView\nfrom rest_framework.response import Response\n\nfrom ..models import SubfinderProviderSettings\nfrom ..serializers import SubfinderProviderSettingsSerializer\n\nlogger = logging.getLogger(__name__)\n\n\nclass SubfinderProviderSettingsView(APIView):\n    \"\"\"Subfinder Provider 配置视图\n    \n    GET /api/settings/api-keys/ - 获取配置\n    PUT /api/settings/api-keys/ - 更新配置\n    \"\"\"\n    \n    def get(self, request):\n        \"\"\"获取 Subfinder Provider 配置\"\"\"\n        settings = SubfinderProviderSettings.get_instance()\n        serializer = SubfinderProviderSettingsSerializer(settings.providers)\n        return Response(serializer.data)\n    \n    def put(self, request):\n        \"\"\"更新 Subfinder Provider 配置\"\"\"\n        serializer = SubfinderProviderSettingsSerializer(data=request.data)\n        serializer.is_valid(raise_exception=True)\n        \n        settings = SubfinderProviderSettings.get_instance()\n        settings.providers.update(serializer.validated_data)\n        settings.save()\n        \n        logger.info(\"Subfinder Provider 配置已更新\")\n        \n        return Response(SubfinderProviderSettingsSerializer(settings.providers).data)\n"
  },
  {
    "path": "backend/apps/targets/__init__.py",
    "content": ""
  },
  {
    "path": "backend/apps/targets/apps.py",
    "content": "from django.apps import AppConfig\n\n\nclass TargetsConfig(AppConfig):\n    default_auto_field = 'django.db.models.BigAutoField'\n    name = 'apps.targets'\n    verbose_name = '扫描目标管理'\n"
  },
  {
    "path": "backend/apps/targets/migrations/0001_initial.py",
    "content": "# Generated by Django 5.2.7 on 2026-01-06 00:55\n\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    initial = True\n\n    dependencies = [\n    ]\n\n    operations = [\n        migrations.CreateModel(\n            name='Target',\n            fields=[\n                ('id', models.AutoField(primary_key=True, serialize=False)),\n                ('name', models.CharField(blank=True, default='', help_text='目标标识（域名/IP/CIDR）', max_length=300)),\n                ('type', models.CharField(choices=[('domain', '域名'), ('ip', 'IP地址'), ('cidr', 'CIDR范围')], db_index=True, default='domain', help_text='目标类型', max_length=20)),\n                ('created_at', models.DateTimeField(auto_now_add=True, help_text='创建时间')),\n                ('last_scanned_at', models.DateTimeField(blank=True, help_text='最后扫描时间', null=True)),\n                ('deleted_at', models.DateTimeField(blank=True, db_index=True, help_text='删除时间（NULL表示未删除）', null=True)),\n            ],\n            options={\n                'verbose_name': '扫描目标',\n                'verbose_name_plural': '扫描目标',\n                'db_table': 'target',\n                'ordering': ['-created_at'],\n                'indexes': [models.Index(fields=['type'], name='target_type_36a73c_idx'), models.Index(fields=['-created_at'], name='target_created_67f489_idx'), models.Index(fields=['deleted_at', '-created_at'], name='target_deleted_9fc9da_idx'), models.Index(fields=['deleted_at', 'type'], name='target_deleted_306a89_idx'), models.Index(fields=['name'], name='target_name_f1c641_idx')],\n                'constraints': [models.UniqueConstraint(condition=models.Q(('deleted_at__isnull', True)), fields=('name',), name='unique_target_name_active')],\n            },\n        ),\n        migrations.CreateModel(\n            name='Organization',\n            fields=[\n                ('id', models.AutoField(primary_key=True, serialize=False)),\n                ('name', models.CharField(blank=True, default='', help_text='组织名称', max_length=300)),\n                ('description', models.CharField(blank=True, default='', help_text='组织描述', max_length=1000)),\n                ('created_at', models.DateTimeField(auto_now_add=True, help_text='创建时间')),\n                ('deleted_at', models.DateTimeField(blank=True, db_index=True, help_text='删除时间（NULL表示未删除）', null=True)),\n                ('targets', models.ManyToManyField(blank=True, help_text='所属目标列表', related_name='organizations', to='targets.target')),\n            ],\n            options={\n                'verbose_name': '组织',\n                'verbose_name_plural': '组织',\n                'db_table': 'organization',\n                'ordering': ['-created_at'],\n                'indexes': [models.Index(fields=['-created_at'], name='organizatio_created_012eac_idx'), models.Index(fields=['deleted_at', '-created_at'], name='organizatio_deleted_2c604f_idx'), models.Index(fields=['name'], name='organizatio_name_bcc2ee_idx')],\n                'constraints': [models.UniqueConstraint(condition=models.Q(('deleted_at__isnull', True)), fields=('name',), name='unique_organization_name_active')],\n            },\n        ),\n    ]\n"
  },
  {
    "path": "backend/apps/targets/migrations/__init__.py",
    "content": ""
  },
  {
    "path": "backend/apps/targets/models.py",
    "content": "from django.db import models\nfrom django.utils import timezone\n\n\nclass SoftDeleteManager(models.Manager):\n    \"\"\"软删除管理器：默认只返回未删除的记录\"\"\"\n    \n    def get_queryset(self):\n        return super().get_queryset().filter(deleted_at__isnull=True)\n\n\nclass Organization(models.Model):\n    \"\"\"组织模型\"\"\"\n\n    id = models.AutoField(primary_key=True)\n    name = models.CharField(max_length=300, blank=True, default='', help_text='组织名称')\n    description = models.CharField(max_length=1000, blank=True, default='', help_text='组织描述')\n    created_at = models.DateTimeField(auto_now_add=True, help_text='创建时间')\n    \n    # ==================== 软删除字段 ====================\n    deleted_at = models.DateTimeField(null=True, blank=True, db_index=True, help_text='删除时间（NULL表示未删除）')\n\n    targets = models.ManyToManyField(\n        'Target',\n        related_name='organizations',\n        blank=True,\n        help_text='所属目标列表'\n    )\n    \n    # ==================== 管理器 ====================\n    objects = SoftDeleteManager()  # 默认管理器：只返回未删除的记录\n    all_objects = models.Manager()  # 全量管理器：包括已删除的记录（用于硬删除）\n\n    class Meta:\n        db_table = 'organization'\n        verbose_name = '组织'\n        verbose_name_plural = '组织'\n        ordering = ['-created_at']\n        # 部分唯一约束：只对未删除记录生效\n        constraints = [\n            models.UniqueConstraint(\n                fields=['name'],\n                condition=models.Q(deleted_at__isnull=True),\n                name='unique_organization_name_active'\n            ),\n        ]\n        indexes = [\n            models.Index(fields=['-created_at']),\n            models.Index(fields=['deleted_at', '-created_at']),  # 软删除 + 时间索引\n            models.Index(fields=['name']),  # 优化 name 搜索\n        ]\n\n    def __str__(self):\n        return str(self.name or f'Organization {self.id}')\n\n\nclass Target(models.Model):\n    \"\"\"扫描目标模型\n\n    核心模型，存储要扫描的目标信息。\n    支持多种类型：域名、IP地址、CIDR范围等。\n    \"\"\"\n\n    # ==================== 类型定义 ====================\n    class TargetType(models.TextChoices):\n        DOMAIN = 'domain', '域名'\n        IP = 'ip', 'IP地址'\n        CIDR = 'cidr', 'CIDR范围'\n\n    # ==================== 基本字段 ====================\n    id = models.AutoField(primary_key=True)\n    name = models.CharField(max_length=300, blank=True, default='', help_text='目标标识（域名/IP/CIDR）')\n\n    type = models.CharField(\n        max_length=20,\n        choices=TargetType.choices,\n        default=TargetType.DOMAIN,\n        db_index=True,\n        help_text='目标类型'\n    )\n\n    # ==================== 时间戳 ====================\n    created_at = models.DateTimeField(auto_now_add=True, help_text='创建时间')\n    last_scanned_at = models.DateTimeField(null=True, blank=True, help_text='最后扫描时间')\n    \n    # ==================== 软删除字段 ====================\n    deleted_at = models.DateTimeField(null=True, blank=True, db_index=True, help_text='删除时间（NULL表示未删除）')\n    \n    # ==================== 管理器 ====================\n    objects = SoftDeleteManager()  # 默认管理器：只返回未删除的记录\n    all_objects = models.Manager()  # 全量管理器：包括已删除的记录（用于硬删除）\n\n    class Meta:\n        db_table = 'target'\n        verbose_name = '扫描目标'\n        verbose_name_plural = '扫描目标'\n        ordering = ['-created_at']\n        # 部分唯一约束：只对未删除记录生效\n        constraints = [\n            models.UniqueConstraint(\n                fields=['name'],\n                condition=models.Q(deleted_at__isnull=True),\n                name='unique_target_name_active'\n            ),\n        ]\n        indexes = [\n            models.Index(fields=['type']),\n            models.Index(fields=['-created_at']),\n            models.Index(fields=['deleted_at', '-created_at']),  # 软删除 + 时间索引\n            models.Index(fields=['deleted_at', 'type']),  # 软删除 + 类型索引\n            models.Index(fields=['name']),  # 优化 name 搜索\n        ]\n\n    def __str__(self):\n        return str(self.name or f'Target {self.id}')\n"
  },
  {
    "path": "backend/apps/targets/repositories/__init__.py",
    "content": "\"\"\"\nTarget Repositories 模块\n\n提供 Target 和 Organization 数据访问层\n\"\"\"\n\nfrom .django_target_repository import DjangoTargetRepository\nfrom .django_organization_repository import DjangoOrganizationRepository\n\n__all__ = [\n    'DjangoTargetRepository',\n    'DjangoOrganizationRepository',\n]\n"
  },
  {
    "path": "backend/apps/targets/repositories/django_organization_repository.py",
    "content": "\"\"\"\nOrganization Django ORM 仓储实现\n\n使用 Django ORM 实现组织数据访问\n\"\"\"\n\nimport logging\nfrom typing import List, Tuple, Dict\nfrom django.db.models import Count\nfrom django.utils import timezone\n\nfrom ..models import Organization, Target\nfrom apps.common.decorators import auto_ensure_db_connection\nfrom apps.common.utils import deduplicate_for_bulk\n\nlogger = logging.getLogger(__name__)\n\n\n@auto_ensure_db_connection\nclass DjangoOrganizationRepository:\n    \"\"\"Organization Django ORM 仓储实现\"\"\"\n    \n    def bulk_add_targets(self, organization_id: int, targets: List[Target]) -> None:\n        \"\"\"\n        批量添加目标到组织\n        \n        注意：会自动按 (organization_id, target_id) 去重，保留最后一条记录。\n        \n        Args:\n            organization_id: 组织 ID\n            targets: Target 对象列表\n        \"\"\"\n        if not targets:\n            return\n            \n        # 使用 through model 批量插入，避免 N 次 add()\n        ThroughModel = Organization.targets.through\n        \n        # 按 target_id 去重，避免批次内重复\n        seen = {}\n        for t in targets:\n            seen[t.id] = t\n        unique_targets = list(seen.values())\n        \n        if len(unique_targets) < len(targets):\n            logger.debug(f\"Organization-Target 关联去重: {len(targets)} -> {len(unique_targets)} 条\")\n        \n        relations = [\n            ThroughModel(organization_id=organization_id, target_id=t.id)\n            for t in unique_targets\n        ]\n        \n        # 根据 through model 唯一约束自动去重\n        unique_relations = deduplicate_for_bulk(relations, ThroughModel)\n        \n        try:\n            # 使用 ignore_conflicts 忽略已存在的关联\n            ThroughModel.objects.bulk_create(unique_relations, ignore_conflicts=True)\n        except Exception as e:\n            logger.error(f\"批量关联目标失败: {e}\")\n            raise\n\n    def get_by_id(self, organization_id: int) -> Organization | None:\n        \"\"\"\n        根据 ID 获取组织\n        \n        Args:\n            organization_id: 组织 ID\n        \n        Returns:\n            Organization 对象或 None\n        \"\"\"\n        try:\n            return Organization.objects.get(id=organization_id)\n        except Organization.DoesNotExist:\n            logger.warning(\"组织不存在 - Organization ID: %s\", organization_id)\n            return None\n    \n    def get_names_by_ids(self, organization_ids: List[int]) -> List[Tuple[int, str]]:\n        \"\"\"\n        根据 ID 列表获取组织的 ID 和名称\n        \n        Args:\n            organization_ids: 组织 ID 列表\n        \n        Returns:\n            [(id, name), ...] 元组列表\n        \"\"\"\n        return list(\n            Organization.objects\n            .filter(id__in=organization_ids)\n            .values_list('id', 'name')\n        )\n    \n    def soft_delete_by_ids(self, organization_ids: List[int]) -> int:\n        \"\"\"\n        根据 ID 列表批量软删除组织\n        \n        Args:\n            organization_ids: 组织 ID 列表\n        \n        Returns:\n            软删除的记录数\n        \n        Note:\n            - 使用软删除：只标记为已删除，不真正删除数据库记录\n            - 保留所有关联数据，可恢复\n            - 不会影响关联的目标（多对多关系保持不变）\n        \"\"\"\n        try:\n            updated_count = (\n                Organization.objects\n                .filter(id__in=organization_ids)\n                .update(deleted_at=timezone.now())\n            )\n            logger.debug(\n                \"批量软删除组织成功 - Count: %s, 更新记录: %s\",\n                len(organization_ids),\n                updated_count\n            )\n            return updated_count\n        except Exception as e:\n            logger.error(\n                \"批量软删除组织失败 - IDs: %s, 错误: %s\",\n                organization_ids,\n                e\n            )\n            raise\n    \n    def get_targets(self, organization_id: int) -> List[Target]:\n        \"\"\"\n        获取组织下的所有目标\n        \n        Args:\n            organization_id: 组织 ID\n        \n        Returns:\n            Target 对象列表\n        \"\"\"\n        organization = self.get_by_id(organization_id)\n        if not organization:\n            return []\n        return list(organization.targets.all())\n    \n    def get_all(self):\n        \"\"\"\n        获取所有组织\n        \n        Returns:\n            QuerySet: 组织查询集\n        \"\"\"\n        return Organization.objects.all()\n    \n    def get_all_with_stats(self):\n        \"\"\"\n        获取所有组织并预计算目标数量\n        \n        Returns:\n            QuerySet: 带统计信息的组织查询集\n        \"\"\"\n        return (\n            Organization.objects\n            .annotate(target_count=Count('targets'))\n            .order_by('-created_at')\n        )\n    \n    def get_by_ids(self, organization_ids: List[int]) -> List[Organization]:\n        \"\"\"\n        根据 ID 列表获取组织（只返回未删除的）\n        \n        Args:\n            organization_ids: 组织 ID 列表\n        \n        Returns:\n            Organization 对象列表\n        \"\"\"\n        return list(Organization.objects.filter(id__in=organization_ids))\n    \n    def hard_delete_by_ids(self, organization_ids: List[int]) -> Tuple[int, Dict[str, int]]:\n        \"\"\"\n        根据 ID 列表硬删除组织（真正删除数据）\n        \n        Args:\n            organization_ids: 组织 ID 列表\n        \n        Returns:\n            (删除的记录数, 删除详情字典)\n        \n        Note:\n            - 硬删除：从数据库中永久删除\n            - 使用 Django CASCADE 自动删除中间表 organization_targets 的关联记录\n            - 不会删除关联的 Target（多对多关系）\n            - ⚠️ 不可恢复\n            - @auto_ensure_db_connection 自动重试数据库连接失败\n        \"\"\"\n        try:\n            # 使用 all_objects 管理器，可以删除已软删除的记录\n            deleted_count, deleted_details = (\n                Organization.all_objects\n                .filter(id__in=organization_ids)\n                .delete()\n            )\n            \n            logger.debug(\n                \"硬删除组织成功 - Count: %s, 删除记录数: %s, 详情: %s\",\n                len(organization_ids),\n                deleted_count,\n                deleted_details\n            )\n            \n            return deleted_count, deleted_details\n            \n        except Exception as e:\n            logger.error(\n                \"硬删除组织失败 - IDs: %s, 错误: %s\",\n                organization_ids,\n                e\n            )\n            raise\n    \n"
  },
  {
    "path": "backend/apps/targets/repositories/django_target_repository.py",
    "content": "\"\"\"\nTarget Django ORM 仓储实现\n\n使用 Django ORM 实现目标数据访问\n\"\"\"\n\nimport logging\nfrom typing import List, Tuple, Dict\nfrom django.db import transaction, IntegrityError, OperationalError, DatabaseError\nfrom django.utils import timezone\n\nfrom ..models import Target\nfrom apps.common.decorators import auto_ensure_db_connection\nfrom apps.common.utils import deduplicate_for_bulk\n\nlogger = logging.getLogger(__name__)\n\n\n@auto_ensure_db_connection\nclass DjangoTargetRepository:\n    \"\"\"Target Django ORM 仓储实现\"\"\"\n    \n    def count_by_ids(self, target_ids: List[int]) -> int:\n        \"\"\"\n        统计给定 ID 列表中存在的目标数量\n        \n        Args:\n            target_ids: 目标 ID 列表\n        \n        Returns:\n            存在的目标数量\n        \"\"\"\n        if not target_ids:\n            return 0\n        return Target.objects.filter(id__in=target_ids).count()\n    \n    def get_by_ids(self, target_ids: List[int]) -> List[Target]:\n        \"\"\"\n        根据 ID 列表批量获取目标\n        \n        Args:\n            target_ids: 目标 ID 列表\n        \n        Returns:\n            Target 对象列表\n        \"\"\"\n        if not target_ids:\n            return []\n        return list(Target.objects.filter(id__in=target_ids))\n    \n    def bulk_create_ignore_conflicts(self, targets: List[Target]) -> None:\n        \"\"\"\n        批量创建目标，忽略冲突\n        \n        注意：会自动按 name 去重，保留最后一条记录。\n        \n        Args:\n            targets: Target 对象列表\n        \"\"\"\n        if not targets:\n            return\n        \n        try:\n            # 根据模型唯一约束自动去重\n            unique_targets = deduplicate_for_bulk(targets, Target)\n            \n            Target.objects.bulk_create(unique_targets, ignore_conflicts=True)\n        except Exception as e:\n            logger.error(f\"批量创建目标失败: {e}\")\n            raise\n\n    def get_by_names(self, names: List[str]) -> List[Target]:\n        \"\"\"\n        根据名称列表批量获取目标\n        \n        Args:\n            names: 目标名称列表\n            \n        Returns:\n            Target 对象列表\n        \"\"\"\n        if not names:\n            return []\n        return list(Target.objects.filter(name__in=names))\n\n    def get_by_id(self, target_id: int) -> Target | None:\n        \"\"\"\n        根据 ID 获取目标\n        \n        Args:\n            target_id: 目标 ID\n        \n        Returns:\n            Target 对象或 None\n        \"\"\"\n        try:\n            return Target.objects.get(id=target_id)\n        except Target.DoesNotExist:\n            logger.warning(\"目标不存在 - Target ID: %s\", target_id)\n            return None\n    \n    def get_names_by_ids(self, target_ids: List[int]) -> List[Tuple[int, str]]:\n        \"\"\"\n        根据 ID 列表获取目标的 ID 和名称\n        \n        Args:\n            target_ids: 目标 ID 列表\n        \n        Returns:\n            [(id, name), ...] 元组列表\n        \"\"\"\n        return list(\n            Target.objects\n            .filter(id__in=target_ids)\n            .values_list('id', 'name')\n        )\n    \n    def soft_delete_by_ids(self, target_ids: List[int]) -> int:\n        \"\"\"\n        根据 ID 列表批量软删除目标\n        \n        Args:\n            target_ids: 目标 ID 列表\n        \n        Returns:\n            软删除的记录数\n        \n        Note:\n            - 使用软删除：只标记为已删除，不真正删除数据库记录\n            - 保留所有关联数据，可恢复\n        \"\"\"\n        try:\n            updated_count = (\n                Target.objects\n                .filter(id__in=target_ids)\n                .update(deleted_at=timezone.now())\n            )\n            logger.debug(\n                \"批量软删除目标成功 - Count: %s, 更新记录: %s\",\n                len(target_ids),\n                updated_count\n            )\n            return updated_count\n        except Exception as e:\n            logger.error(\n                \"批量软删除目标失败 - IDs: %s, 错误: %s\",\n                target_ids,\n                e\n            )\n            raise\n    \n    def get_all(self):\n        \"\"\"\n        获取所有目标\n        \n        Returns:\n            QuerySet: 目标查询集\n        \"\"\"\n        return Target.objects.prefetch_related('organizations').all()\n    \n    def get_or_create(self, name: str, target_type: str):\n        \"\"\"\n        获取或创建目标\n        \n        Args:\n            name: 目标名称\n            target_type: 目标类型\n        \n        Returns:\n            (Target对象, 是否新创建的布尔值)\n        \"\"\"\n        return Target.objects.get_or_create(\n            name=name,\n            defaults={'type': target_type}\n        )\n    \n    def hard_delete_by_ids(self, target_ids: List[int]) -> Tuple[int, Dict[str, int]]:\n        \"\"\"\n        根据 ID 列表硬删除目标（使用数据库级 CASCADE）\n        \n        Args:\n            target_ids: 目标 ID 列表\n        \n        Returns:\n            (删除的记录数, 删除详情字典)\n        \n        Strategy:\n            使用数据库级 CASCADE 删除，性能最优\n        \n        Note:\n            - 硬删除：从数据库中永久删除\n            - 数据库自动处理所有外键级联删除\n            - 不触发 Django 信号（pre_delete/post_delete）\n        \"\"\"\n        try:\n            batch_size = 1000  # 每批处理1000个目标\n            total_deleted = 0\n            \n            logger.debug(f\"开始批量删除 {len(target_ids)} 个目标（数据库 CASCADE）...\")\n            \n            # 分批处理目标ID，避免单次删除过多\n            for i in range(0, len(target_ids), batch_size):\n                batch_ids = target_ids[i:i + batch_size]\n                \n                # 直接删除目标，数据库自动级联删除所有关联数据\n                count, _ = Target.all_objects.filter(id__in=batch_ids).delete()\n                total_deleted += count\n                \n                logger.debug(f\"批次删除完成: {len(batch_ids)} 个目标，删除 {count} 条记录\")\n            \n            # 由于使用数据库 CASCADE，无法获取详细统计\n            deleted_details = {\n                'targets': len(target_ids),\n                'total': total_deleted,\n                'note': 'Database CASCADE - detailed stats unavailable'\n            }\n            \n            logger.debug(\n                \"批量硬删除成功（CASCADE）- 目标数: %s, 总删除记录: %s\",\n                len(target_ids),\n                total_deleted\n            )\n            \n            return total_deleted, deleted_details\n        \n        except Exception as e:\n            logger.error(\n                \"批量硬删除失败（CASCADE）- 目标数: %s, 错误: %s\",\n                len(target_ids),\n                str(e),\n                exc_info=True\n            )\n            raise\n    \n    def update_last_scanned_at(self, target_id: int, scanned_at) -> bool:\n        \"\"\"\n        更新目标的最后扫描时间\n        \n        Args:\n            target_id: 目标 ID\n            scanned_at: 扫描时间\n        \n        Returns:\n            是否更新成功\n        \"\"\"\n        try:\n            updated = Target.objects.filter(id=target_id).update(last_scanned_at=scanned_at)\n            return updated > 0\n        except Exception as e:\n            logger.error(\"更新最后扫描时间失败 - Target ID: %s, 错误: %s\", target_id, e)\n            return False\n"
  },
  {
    "path": "backend/apps/targets/scripts/__init__.py",
    "content": ""
  },
  {
    "path": "backend/apps/targets/scripts/run_delete_organizations.py",
    "content": "#!/usr/bin/env python\n\"\"\"\n组织硬删除脚本\n\n用于动态容器执行，硬删除已软删除的组织及其关联数据。\n\"\"\"\nimport sys\nimport argparse\nimport json\nimport logging\nfrom apps.common.container_bootstrap import fetch_config_and_setup_django\n\nlogging.basicConfig(\n    level=logging.INFO,\n    format='[%(asctime)s] [%(levelname)s] %(message)s',\n    datefmt='%Y-%m-%d %H:%M:%S'\n)\nlogger = logging.getLogger(__name__)\n\n\ndef hard_delete_organizations(organization_ids: list[int]) -> dict:\n    \"\"\"\n    硬删除组织\n    \n    Args:\n        organization_ids: 组织 ID 列表\n        \n    Returns:\n        删除统计信息\n    \"\"\"\n    from apps.targets.services import OrganizationService\n    \n    service = OrganizationService()\n    \n    try:\n        deleted_count, details = service.hard_delete_organizations(organization_ids)\n        \n        logger.info(f\"✓ 硬删除完成 - 删除数量: {deleted_count}\")\n        logger.info(f\"  详情: {details}\")\n        \n        return {\n            'success': True,\n            'deleted_count': deleted_count,\n            'details': details,\n        }\n        \n    except Exception as e:\n        logger.error(f\"硬删除失败: {e}\", exc_info=True)\n        return {\n            'success': False,\n            'error': str(e),\n        }\n\n\ndef main():\n    parser = argparse.ArgumentParser(description=\"硬删除组织\")\n    parser.add_argument(\"--organization_ids\", type=str, required=True, help=\"组织 ID 列表 (JSON)\")\n    \n    args = parser.parse_args()\n    \n    # 解析 organization_ids\n    organization_ids = json.loads(args.organization_ids)\n    \n    logger.info(f\"开始硬删除 {len(organization_ids)} 个组织\")\n    \n    # 获取配置并初始化 Django\n    fetch_config_and_setup_django()\n    \n    # 执行删除\n    result = hard_delete_organizations(organization_ids)\n    \n    print(f\"删除完成: {result}\")\n    \n    if not result.get('success'):\n        sys.exit(1)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "backend/apps/targets/scripts/run_delete_targets.py",
    "content": "#!/usr/bin/env python\n\"\"\"\n目标硬删除脚本\n\n用于动态容器执行，硬删除已软删除的目标。\n\"\"\"\nimport sys\nimport argparse\nimport json\nimport logging\nfrom apps.common.container_bootstrap import fetch_config_and_setup_django\n\nlogging.basicConfig(\n    level=logging.INFO,\n    format='[%(asctime)s] [%(levelname)s] %(message)s',\n    datefmt='%Y-%m-%d %H:%M:%S'\n)\nlogger = logging.getLogger(__name__)\n\n\ndef hard_delete_targets(target_ids: list[int]) -> dict:\n    \"\"\"\n    硬删除目标\n    \n    Args:\n        target_ids: 目标 ID 列表\n        \n    Returns:\n        删除统计信息\n    \"\"\"\n    from apps.targets.services import TargetService\n    \n    service = TargetService()\n    \n    try:\n        deleted_count, details = service.hard_delete_targets(target_ids)\n        \n        logger.info(f\"✓ 硬删除完成 - 删除数量: {deleted_count}\")\n        logger.info(f\"  详情: {details}\")\n        \n        return {\n            'success': True,\n            'deleted_count': deleted_count,\n            'details': details,\n        }\n        \n    except Exception as e:\n        logger.error(f\"硬删除失败: {e}\", exc_info=True)\n        return {\n            'success': False,\n            'error': str(e),\n        }\n\n\ndef main():\n    parser = argparse.ArgumentParser(description=\"硬删除目标\")\n    parser.add_argument(\"--target_ids\", type=str, required=True, help=\"目标 ID 列表 (JSON)\")\n    \n    args = parser.parse_args()\n    \n    # 解析 target_ids\n    target_ids = json.loads(args.target_ids)\n    \n    logger.info(f\"开始硬删除 {len(target_ids)} 个目标\")\n    \n    # 获取配置并初始化 Django\n    fetch_config_and_setup_django()\n    \n    # 执行删除\n    result = hard_delete_targets(target_ids)\n    \n    print(f\"删除完成: {result}\")\n    \n    if not result.get('success'):\n        sys.exit(1)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "backend/apps/targets/serializers.py",
    "content": "from rest_framework import serializers\nfrom django.db import IntegrityError\nfrom django.db.models import Count\nfrom .models import Organization, Target\nfrom apps.common.normalizer import normalize_target\nfrom apps.common.validators import detect_target_type\nfrom apps.asset.models import Vulnerability\n\n\nclass SimpleOrganizationSerializer(serializers.ModelSerializer):\n    \"\"\"\n    简化版组织序列化器 - 用于嵌套在其他序列化器中\n    \n    注意事项:\n    1. 只包含基本字段 (id, name)，不嵌套 targets\n    2. 避免循环引用：Organization ↔ Target 是多对多关系\n       如果双向嵌套会导致无限递归\n    3. 适用场景：\n       - 在 TargetSerializer 中显示所属组织列表\n       - 在其他需要显示组织基本信息的地方\n    \"\"\"\n    class Meta:\n        model = Organization\n        fields = ['id', 'name']\n\n\nclass TargetSerializer(serializers.ModelSerializer):\n    \"\"\"\n    目标序列化器\n    \n    性能优化说明:\n    1. 使用嵌套序列化器 SimpleOrganizationSerializer 显示关联的组织\n    2. ⚠️ 重要：ViewSet 必须使用 prefetch_related('organizations')\n       否则会产生 N+1 查询问题：\n       - 没有预加载：100 个目标 = 1 + 100 = 101 次查询\n       - 正确预加载：100 个目标 = 1 + 1 = 2 次查询\n    \n    已优化的视图:\n    - TargetViewSet: queryset = Target.objects.prefetch_related('organizations')\n    - OrganizationViewSet.targets(): queryset.prefetch_related('organizations')\n    \"\"\"\n    organizations = SimpleOrganizationSerializer(many=True, read_only=True)\n    \n    class Meta:\n        model = Target\n        fields = ['id', 'name', 'type', 'created_at', 'last_scanned_at', 'organizations']\n        read_only_fields = ['id', 'created_at', 'type']\n    \n    def create(self, validated_data):\n        \"\"\"创建目标时自动规范化、检测目标类型\"\"\"\n        name = validated_data.get('name', '')\n        try:\n            # 1. 规范化\n            normalized_name = normalize_target(name)\n            # 2. 验证并检测类型\n            target_type = detect_target_type(normalized_name)\n            # 3. 写入\n            validated_data['name'] = normalized_name\n            validated_data['type'] = target_type\n            \n            return super().create(validated_data)\n        except ValueError as e:\n            raise serializers.ValidationError({'name': str(e)})\n        except IntegrityError:\n            # 处理唯一性约束冲突\n            raise serializers.ValidationError({\n                'name': f'目标 \"{normalized_name}\" 已存在'\n            })\n    \n    def update(self, instance, validated_data):\n        \"\"\"更新目标时，如果 name 变化则重新规范化和检测类型\"\"\"\n        # 如果 name 发生变化，重新规范化和检测类型\n        if 'name' in validated_data and validated_data['name'] != instance.name:\n            try:\n                # 1. 规范化\n                normalized_name = normalize_target(validated_data['name'])\n                # 2. 验证并检测类型\n                target_type = detect_target_type(normalized_name)\n                # 3. 写入\n                validated_data['name'] = normalized_name\n                validated_data['type'] = target_type\n            except ValueError as e:\n                raise serializers.ValidationError({'name': str(e)})\n        \n        try:\n            return super().update(instance, validated_data)\n        except IntegrityError:\n            # 处理唯一性约束冲突\n            raise serializers.ValidationError({\n                'name': f'目标 \"{validated_data.get(\"name\", instance.name)}\" 已存在'\n            })\n\n\nclass TargetDetailSerializer(serializers.ModelSerializer):\n    \"\"\"\n    目标详情序列化器 - 包含统计数据\n    \n    用于单个目标详情页面（只读），包含各类资产的统计数量\n    \n    Note:\n        - 此序列化器只用于 retrieve action（只读操作）\n        - 不包含 create/update 方法，因为详情页不需要修改功能\n        - 所有字段都是只读的，包括 name\n    \"\"\"\n    organizations = SimpleOrganizationSerializer(many=True, read_only=True)\n    summary = serializers.SerializerMethodField()\n    \n    class Meta:\n        model = Target\n        fields = ['id', 'name', 'type', 'created_at', 'last_scanned_at', 'organizations', 'summary']\n        read_only_fields = ['id', 'name', 'type', 'created_at', 'last_scanned_at', 'summary']\n    \n    def get_summary(self, obj):\n        \"\"\"计算目标资产统计数据\n        \n        统计该目标下的资产数量：\n        - subdomains: 子域名数量\n        - websites: 网站数量\n        - endpoints: 端点数量\n        - ips: IP地址数量\n        - directories: 目录数量\n        - screenshots: 截图数量\n        - vulnerabilities: 漏洞统计（暂时返回 0，待后续实现）\n        \n        性能说明：\n        - 使用 .count() 查询获取统计数据\n        - 每个统计字段执行一次数据库查询\n        - 不使用 annotate 预聚合的原因：多个 Count(distinct=True) 在大数据量时性能较差\n        - 对于详情页单条记录，直接 .count() 查询性能可接受\n        - ips 统计使用 distinct() 去重，因为 HostPortMapping 中同一 IP 可能有多个端口\n        \"\"\"\n        # 基础资产统计（直接使用关联关系 count）\n        subdomains_count = obj.subdomains.count()\n        websites_count = obj.websites.count()\n        endpoints_count = obj.endpoints.count()\n        ips_count = obj.host_port_mappings.values('ip').distinct().count()\n        directories_count = obj.directories.count()\n        screenshots_count = obj.screenshots.count()\n\n        # 漏洞统计：按目标维度实时统计 Vulnerability 资产表\n        vuln_qs = obj.vulnerabilities.all()\n\n        total = vuln_qs.count()\n\n        severity_stats = {\n            'critical': 0,\n            'high': 0,\n            'medium': 0,\n            'low': 0,\n        }\n\n        for row in vuln_qs.values('severity').annotate(count=Count('id')):\n            sev = row['severity'] or ''\n            count = row['count'] or 0\n            if sev in severity_stats:\n                severity_stats[sev] = count\n\n        return {\n            'subdomains': subdomains_count,\n            'websites': websites_count,\n            'endpoints': endpoints_count,\n            'ips': ips_count,\n            'directories': directories_count,\n            'screenshots': screenshots_count,\n            'vulnerabilities': {\n                'total': total,\n                **severity_stats,\n            }\n        }\n\n\nclass OrganizationSerializer(serializers.ModelSerializer):\n    # 使用 IntegerField 接收由 annotate 预计算的 target_count\n    # 避免 N+1 查询问题（在 ViewSet 的 get_queryset 中使用 annotate 预计算）\n    target_count = serializers.IntegerField(read_only=True)\n    \n    class Meta:\n        model = Organization\n        fields = ['id', 'name', 'description', 'created_at', 'target_count']\n        read_only_fields = ['id', 'created_at', 'target_count']\n\n\nclass BatchCreateTargetSerializer(serializers.Serializer):\n    \"\"\"\n    批量创建目标的序列化器\n    \n    安全限制：\n    - 最多支持 5000 个目标的批量创建\n    - 防止恶意用户提交大量数据导致服务器过载\n    \"\"\"\n    \n    # 批量创建的最大数量限制\n    MAX_BATCH_SIZE = 5000\n    \n    # 目标列表\n    targets = serializers.ListField(\n        child=serializers.DictField(),\n        help_text='目标列表，每个目标包含 name 字段（type 会自动检测）'\n    )\n    \n    # 可选：关联的组织ID\n    organization_id = serializers.IntegerField(\n        required=False,\n        allow_null=True,\n        help_text='可选：关联到指定组织的ID'\n    )\n    \n    def validate_targets(self, value):\n        \"\"\"验证目标列表\"\"\"\n        if not value:\n            raise serializers.ValidationError(\"目标列表不能为空\")\n        \n        # 检查数量限制，防止服务器过载\n        if len(value) > self.MAX_BATCH_SIZE:\n            raise serializers.ValidationError(\n                f\"批量创建最多支持 {self.MAX_BATCH_SIZE} 个目标，当前提交了 {len(value)} 个\"\n            )\n        \n        # 验证每个目标的必填字段\n        for idx, target in enumerate(value):\n            if 'name' not in target:\n                raise serializers.ValidationError(f\"第 {idx + 1} 个目标缺少 name 字段\")\n            if not target['name']:\n                raise serializers.ValidationError(f\"第 {idx + 1} 个目标的 name 不能为空\")\n        \n        return value\n    \n"
  },
  {
    "path": "backend/apps/targets/services/__init__.py",
    "content": "\"\"\"Target Services\"\"\"\n\nfrom .target_service import TargetService\n\n__all__ = ['TargetService']\n"
  },
  {
    "path": "backend/apps/targets/services/organization_service.py",
    "content": "\"\"\"\nOrganization 业务逻辑服务层（Service）\n\n负责组织相关的业务逻辑处理\n\"\"\"\n\nimport logging\nfrom typing import List, Tuple, Dict\n\nfrom ..models import Organization\nfrom ..repositories.django_organization_repository import DjangoOrganizationRepository\n\nlogger = logging.getLogger(__name__)\n\n\nclass OrganizationService:\n    \"\"\"Organization 业务逻辑服务\"\"\"\n    \n    def __init__(self):\n        \"\"\"初始化服务，注入 Repository 依赖\"\"\"\n        self.repo = DjangoOrganizationRepository()\n    \n    # ==================== 查询操作 ====================\n    \n    def get_organization(self, organization_id: int) -> Organization | None:\n        \"\"\"\n        获取组织\n        \n        Args:\n            organization_id: 组织 ID\n        \n        Returns:\n            Organization 对象或 None\n        \"\"\"\n        return self.repo.get_by_id(organization_id)\n    \n    \n    def get_all(self):\n        \"\"\"\n        获取所有组织\n        \n        Returns:\n            QuerySet: 组织查询集\n        \"\"\"\n        return self.repo.get_all()\n    \n    def get_all_with_stats(self):\n        \"\"\"\n        获取所有组织（带统计信息）\n        \n        Returns:\n            QuerySet: 带统计信息的组织查询集\n        \"\"\"\n        return self.repo.get_all_with_stats()\n    \n    # ==================== 创建操作 ====================\n    \n    def bulk_add_targets(self, organization_id: int, targets: List) -> None:\n        \"\"\"\n        批量添加目标到组织\n        \n        Args:\n            organization_id: 组织 ID\n            targets: Target 对象列表\n        \"\"\"\n        logger.debug(\"批量关联目标到组织 - Org ID: %s, Targets: %s\", organization_id, len(targets))\n        self.repo.bulk_add_targets(organization_id, targets)\n\n    # ==================== 删除操作 ====================\n    \n    def delete_organizations_two_phase(self, organization_ids: List[int]) -> Dict:\n        \"\"\"\n        两阶段删除组织（业务方法）\n        \n        Args:\n            organization_ids: 组织 ID 列表\n        \n        Returns:\n            {\n                'soft_deleted_count': int,\n                'hard_delete_scheduled': bool\n            }\n        \n        Raises:\n            ValueError: 未找到要删除的组织\n        \n        Note:\n            - 阶段 1：软删除（立即），用户立即看不到数据\n            - 阶段 2：硬删除（后台），真正删除数据和中间表\n        \"\"\"\n        \n        # 0. 先获取组织名称（用于返回给前端）\n        org_names = [name for _, name in self.repo.get_names_by_ids(organization_ids)]\n        \n        # 1. 软删除（如果 ID 不存在，update 返回 0）\n        soft_count = self.soft_delete_organizations(organization_ids)\n        \n        # 2. 检查是否有记录被删除\n        if soft_count == 0:\n            raise ValueError(\"未找到要删除的组织\")\n        \n        logger.info(f\"✓ 软删除完成: {soft_count} 个组织\")\n        \n        # 3. 使用 task_distributor 分发硬删除任务到 Worker\n        try:\n            from apps.engine.services.task_distributor import get_task_distributor\n            \n            distributor = get_task_distributor()\n            success, message, container_id = distributor.execute_delete_task(\n                task_type='organizations',\n                ids=organization_ids\n            )\n            \n            if success:\n                logger.info(f\"✓ 硬删除任务已分发 - Container: {container_id}\")\n            else:\n                logger.warning(f\"硬删除任务分发失败: {message}\")\n            \n        except Exception as e:\n            logger.error(f\"❌ 分发删除任务失败: {e}\", exc_info=True)\n            logger.warning(\"硬删除可能未成功提交，请检查 Worker 状态\")\n        \n        return {\n            'soft_deleted_count': soft_count,\n            'organization_names': org_names,\n            'hard_delete_scheduled': True\n        }\n    \n    def soft_delete_organizations(self, organization_ids: List[int]) -> int:\n        \"\"\"\n        软删除组织\n        \n        Args:\n            organization_ids: 组织 ID 列表\n        \n        Returns:\n            软删除的记录数\n        \n        Note:\n            - 返回值是实际更新的记录数，不是传入的 ID 数量\n            - 如果某些 ID 不存在，返回值会小于传入的 ID 数量\n        \"\"\"\n        logger.info(\"软删除 %d 个组织\", len(organization_ids))\n        \n        try:\n            deleted_count = self.repo.soft_delete_by_ids(organization_ids)\n            logger.info(\"✓ 软删除成功 - 数量: %d\", deleted_count)\n            return deleted_count\n        except Exception as e:\n            logger.error(\"软删除失败: %s\", e)\n            raise\n    \n    def hard_delete_organizations(self, organization_ids: List[int]) -> Tuple[int, Dict[str, int]]:\n        \"\"\"\n        硬删除组织（真正删除数据，使用 Django CASCADE）\n        \n        Args:\n            organization_ids: 组织 ID 列表\n        \n        Returns:\n            (删除的记录数, 删除详情字典)\n        \n        Note:\n            - 从数据库中永久删除\n            - Django CASCADE 自动删除 organization_targets 中间表记录\n            - 不会删除关联的 Target（多对多）\n        \"\"\"\n        logger.info(\"硬删除 %d 个组织\", len(organization_ids))\n        \n        try:\n            deleted_count, deleted_details = self.repo.hard_delete_by_ids(organization_ids)\n            logger.info(\"✓ 硬删除成功 - 数量: %d, 删除记录数: %d\", len(organization_ids), deleted_count)\n            return deleted_count, deleted_details\n        except Exception as e:\n            logger.error(\"❌ 硬删除失败 - IDs: %s, 错误: %s\", organization_ids, e)\n            raise\n"
  },
  {
    "path": "backend/apps/targets/services/target_service.py",
    "content": "\"\"\"\nTarget 业务逻辑服务层（Service）\n\n负责目标相关的业务逻辑处理\n\"\"\"\n\nimport logging\nfrom typing import List, Tuple, Dict, Any, Optional\n\nfrom django.db import transaction\n\nfrom ..models import Target\nfrom ..repositories.django_target_repository import DjangoTargetRepository\n\nlogger = logging.getLogger(__name__)\n\n\nclass TargetService:\n    \"\"\"Target 业务逻辑服务\"\"\"\n    \n    def __init__(self):\n        \"\"\"初始化服务，注入 Repository 依赖\"\"\"\n        self.repo = DjangoTargetRepository()\n    \n    # ==================== 查询方法 ====================\n    \n    def count_existing_ids(self, target_ids: List[int]) -> int:\n        \"\"\"\n        统计给定 ID 列表中实际存在的目标数量\n        \n        Args:\n            target_ids: 目标 ID 列表\n        \n        Returns:\n            存在的目标数量\n        \"\"\"\n        return self.repo.count_by_ids(target_ids)\n    \n    # ==================== 查询操作 ====================\n    \n    def get_target(self, target_id: int) -> Target | None:\n        \"\"\"\n        获取目标\n        \n        Args:\n            target_id: 目标 ID\n        \n        Returns:\n            Target 对象或 None\n        \"\"\"\n        return self.repo.get_by_id(target_id)\n    \n    def get_by_id(self, target_id: int) -> Target | None:\n        \"\"\"\n        根据 ID 获取目标（get_target 别名）\n        \n        Args:\n            target_id: 目标 ID\n        \n        Returns:\n            Target 对象或 None\n        \"\"\"\n        return self.repo.get_by_id(target_id)\n    \n    \n    def get_all(self):\n        \"\"\"\n        获取所有目标\n        \n        Returns:\n            QuerySet: 目标查询集\n        \"\"\"\n        return self.repo.get_all()\n    \n    def get_targets_by_names(self, names: List[str]) -> List[Target]:\n        \"\"\"\n        根据名称批量获取目标\n        \n        Args:\n            names: 目标名称列表\n            \n        Returns:\n            Target 对象列表\n        \"\"\"\n        return self.repo.get_by_names(names)\n\n    def update_last_scanned_at(self, target_id: int) -> bool:\n        \"\"\"\n        更新目标的最后扫描时间\n        \n        Args:\n            target_id: 目标 ID\n        \n        Returns:\n            是否更新成功\n        \"\"\"\n        from django.utils import timezone\n        return self.repo.update_last_scanned_at(target_id, timezone.now())\n    \n    # ==================== 创建操作 ====================\n    \n    def batch_create_targets(\n        self,\n        targets_data: List[Dict[str, Any]],\n        organization_id: Optional[int] = None\n    ) -> Dict[str, Any]:\n        \"\"\"\n        批量创建目标\n        \n        Args:\n            targets_data: 目标数据列表，每个元素包含 name 字段\n            organization_id: 可选，关联到指定组织的 ID\n        \n        Returns:\n            {\n                'created_count': int,  # 处理的目标数量\n                'failed_count': int,\n                'failed_targets': List[Dict],\n                'message': str\n            }\n        \n        Performance:\n            使用 bulk_create(ignore_conflicts=True) 直接创建，无需先查询。\n            1000个目标：~30ms\n        \"\"\"\n        from apps.targets.models import Target\n        from apps.common.normalizer import normalize_target\n        from apps.common.validators import detect_target_type\n        from .organization_service import OrganizationService\n        \n        # ==================== 步骤 1：预处理数据 ====================\n        # 目的：规范化目标名称、检测类型、去重、过滤无效数据\n        valid_targets_map = {}  # {name: type}\n        failed_targets = []\n        \n        for data in targets_data:\n            name = data.get('name')\n            if not name:\n                continue\n                \n            try:\n                norm_name = normalize_target(name)\n                t_type = detect_target_type(norm_name)\n                valid_targets_map[norm_name] = t_type\n            except ValueError as e:\n                failed_targets.append({'name': name, 'reason': str(e)})\n\n        if not valid_targets_map:\n            return {\n                'created_count': 0,\n                'failed_count': len(failed_targets),\n                'failed_targets': failed_targets,\n                'message': \"没有有效的目标\"\n            }\n\n        # 验证组织是否存在\n        if organization_id:\n            org_service = OrganizationService()\n            organization = org_service.get_organization(organization_id)\n            if not organization:\n                raise ValueError(f'组织 ID {organization_id} 不存在')\n\n        target_names = list(valid_targets_map.keys())\n        \n        with transaction.atomic():\n            # ==================== 步骤 2：批量创建 Target（忽略冲突）====================\n            target_objs = [\n                Target(name=name, type=t_type) \n                for name, t_type in valid_targets_map.items()\n            ]\n            self.repo.bulk_create_ignore_conflicts(target_objs)\n            \n            # ==================== 步骤 3：处理关联组织 ====================\n            if organization_id:\n                # 重新查询获取所有涉及的 Target 对象（含 ID）\n                all_targets = self.repo.get_by_names(target_names)\n                org_service = OrganizationService()\n                org_service.bulk_add_targets(organization_id, all_targets)\n\n            # ==================== 懒加载模式：不预创建任何资产 ====================\n            # Subdomain/Website/Endpoint 将在各扫描流程中按需创建\n        \n        created_count = len(valid_targets_map)\n        \n        logger.info(\n            \"批量创建目标完成（懒加载模式）- 处理: %d, 失败: %d\",\n            created_count, len(failed_targets)\n        )\n        \n        return {\n            'created_count': created_count,\n            'failed_count': len(failed_targets),\n            'failed_targets': failed_targets,\n            'message': f\"成功处理 {created_count} 个目标\"\n        }\n    \n    # ==================== 删除操作 ====================\n    \n    def delete_targets_two_phase(self, target_ids: List[int]) -> Dict:\n        \"\"\"\n        两阶段删除目标（业务方法）\n        \n        Args:\n            target_ids: 目标 ID 列表\n        \n        Returns:\n            {\n                'soft_deleted_count': int,\n                'hard_delete_scheduled': bool\n            }\n        \n        Raises:\n            ValueError: 未找到要删除的目标\n        \n        Note:\n            - 阶段 1：软删除（立即），用户立即看不到数据\n            - 阶段 2：硬删除（后台），真正删除数据和关联\n        \"\"\"\n        \n        # 0. 先获取目标名称（用于返回给前端）\n        target_names = [name for _, name in self.repo.get_names_by_ids(target_ids)]\n        \n        # 1. 软删除（如果 ID 不存在，update 返回 0）\n        soft_count = self.soft_delete_targets(target_ids)\n        \n        # 2. 检查是否有记录被删除\n        if soft_count == 0:\n            raise ValueError(\"未找到要删除的目标\")\n        \n        logger.info(f\"✓ 软删除完成: {soft_count} 个目标\")\n        \n        # 3. 使用 task_distributor 分发硬删除任务到 Worker\n        try:\n            from apps.engine.services.task_distributor import get_task_distributor\n            \n            distributor = get_task_distributor()\n            success, message, container_id = distributor.execute_delete_task(\n                task_type='targets',\n                ids=target_ids\n            )\n            \n            if success:\n                logger.info(f\"✓ 硬删除任务已分发 - Container: {container_id}\")\n            else:\n                logger.warning(f\"硬删除任务分发失败: {message}\")\n            \n        except Exception as e:\n            logger.error(f\"❌ 分发删除任务失败: {e}\", exc_info=True)\n            logger.warning(\"硬删除可能未成功提交，请检查 Worker 状态\")\n        \n        return {\n            'soft_deleted_count': soft_count,\n            'target_names': target_names,\n            'hard_delete_scheduled': True\n        }\n    \n    def soft_delete_targets(self, target_ids: List[int]) -> int:\n        \"\"\"\n        软删除目标\n        \n        Args:\n            target_ids: 目标 ID 列表\n        \n        Returns:\n            软删除的记录数\n        \n        Note:\n            - 返回值是实际更新的记录数，不是传入的 ID 数量\n            - 如果某些 ID 不存在，返回值会小于传入的 ID 数量\n        \"\"\"\n        logger.info(\"软删除 %d 个目标\", len(target_ids))\n        \n        try:\n            deleted_count = self.repo.soft_delete_by_ids(target_ids)\n            logger.info(\"✓ 软删除成功 - 数量: %d\", deleted_count)\n            return deleted_count\n        except Exception as e:\n            logger.error(\"软删除失败: %s\", e)\n            raise\n    \n    def hard_delete_targets(self, target_ids: List[int]) -> Tuple[int, Dict[str, int]]:\n        \"\"\"\n        硬删除目标（真正删除数据）- 使用数据库级 CASCADE\n        \n        Args:\n            target_ids: 目标 ID 列表\n        \n        Returns:\n            (删除的记录数, 删除详情字典)\n        \n        Strategy:\n            使用数据库级 CASCADE 删除，性能最优\n        \n        Note:\n            - 硬删除：从数据库中永久删除\n            - 数据库自动级联删除所有关联数据\n            - 不触发 Django 信号（pre_delete/post_delete）\n        \"\"\"\n        logger.debug(\"准备硬删除目标（CASCADE）- Count: %s, IDs: %s\", len(target_ids), target_ids)\n        \n        deleted_count, details = self.repo.hard_delete_by_ids(target_ids)\n        \n        logger.info(\n            \"硬删除目标成功（CASCADE）- Count: %s, 删除记录数: %s\",\n            len(target_ids),\n            deleted_count\n        )\n        \n        return deleted_count, details\n"
  },
  {
    "path": "backend/apps/targets/urls.py",
    "content": "from django.urls import path, include\nfrom rest_framework.routers import DefaultRouter\nfrom .views import OrganizationViewSet, TargetViewSet\nfrom apps.asset.views import (\n    SubdomainViewSet, WebSiteViewSet, DirectoryViewSet,\n    EndpointViewSet, HostPortMappingViewSet, VulnerabilityViewSet,\n    ScreenshotViewSet\n)\n\n# 创建路由器\nrouter = DefaultRouter()\n\n# 注册 ViewSet\nrouter.register(r'organizations', OrganizationViewSet, basename='organization')\nrouter.register(r'targets', TargetViewSet, basename='target')\n\n# Target 下的嵌套资产路由\ntarget_subdomains_list = SubdomainViewSet.as_view({'get': 'list'})\ntarget_subdomains_export = SubdomainViewSet.as_view({'get': 'export'})\ntarget_subdomains_bulk_create = SubdomainViewSet.as_view({'post': 'bulk_create'})\ntarget_websites_list = WebSiteViewSet.as_view({'get': 'list'})\ntarget_websites_export = WebSiteViewSet.as_view({'get': 'export'})\ntarget_websites_bulk_create = WebSiteViewSet.as_view({'post': 'bulk_create'})\ntarget_directories_list = DirectoryViewSet.as_view({'get': 'list'})\ntarget_directories_export = DirectoryViewSet.as_view({'get': 'export'})\ntarget_directories_bulk_create = DirectoryViewSet.as_view({'post': 'bulk_create'})\ntarget_endpoints_list = EndpointViewSet.as_view({'get': 'list'})\ntarget_endpoints_export = EndpointViewSet.as_view({'get': 'export'})\ntarget_endpoints_bulk_create = EndpointViewSet.as_view({'post': 'bulk_create'})\ntarget_ip_addresses_list = HostPortMappingViewSet.as_view({'get': 'list'})\ntarget_ip_addresses_export = HostPortMappingViewSet.as_view({'get': 'export'})\ntarget_vulnerabilities_list = VulnerabilityViewSet.as_view({'get': 'list'})\ntarget_screenshots_list = ScreenshotViewSet.as_view({'get': 'list'})\ntarget_screenshots_bulk_delete = ScreenshotViewSet.as_view({'post': 'bulk_delete'})\n\nurlpatterns = [\n    path('', include(router.urls)),\n    # 嵌套路由：/api/targets/{target_pk}/xxx/\n    path('targets/<int:target_pk>/subdomains/', target_subdomains_list, name='target-subdomains-list'),\n    path('targets/<int:target_pk>/subdomains/export/', target_subdomains_export, name='target-subdomains-export'),\n    path('targets/<int:target_pk>/subdomains/bulk-create/', target_subdomains_bulk_create, name='target-subdomains-bulk-create'),\n    path('targets/<int:target_pk>/websites/', target_websites_list, name='target-websites-list'),\n    path('targets/<int:target_pk>/websites/export/', target_websites_export, name='target-websites-export'),\n    path('targets/<int:target_pk>/websites/bulk-create/', target_websites_bulk_create, name='target-websites-bulk-create'),\n    path('targets/<int:target_pk>/directories/', target_directories_list, name='target-directories-list'),\n    path('targets/<int:target_pk>/directories/export/', target_directories_export, name='target-directories-export'),\n    path('targets/<int:target_pk>/directories/bulk-create/', target_directories_bulk_create, name='target-directories-bulk-create'),\n    path('targets/<int:target_pk>/endpoints/', target_endpoints_list, name='target-endpoints-list'),\n    path('targets/<int:target_pk>/endpoints/export/', target_endpoints_export, name='target-endpoints-export'),\n    path('targets/<int:target_pk>/endpoints/bulk-create/', target_endpoints_bulk_create, name='target-endpoints-bulk-create'),\n    path('targets/<int:target_pk>/ip-addresses/', target_ip_addresses_list, name='target-ip-addresses-list'),\n    path('targets/<int:target_pk>/ip-addresses/export/', target_ip_addresses_export, name='target-ip-addresses-export'),\n    path('targets/<int:target_pk>/vulnerabilities/', target_vulnerabilities_list, name='target-vulnerabilities-list'),\n    path('targets/<int:target_pk>/screenshots/', target_screenshots_list, name='target-screenshots-list'),\n    path('targets/<int:target_pk>/screenshots/bulk-delete/', target_screenshots_bulk_delete, name='target-screenshots-bulk-delete'),\n]\n"
  },
  {
    "path": "backend/apps/targets/views.py",
    "content": "import logging\nfrom rest_framework import viewsets, status, filters\nfrom rest_framework.decorators import action\nfrom rest_framework.response import Response\nfrom rest_framework.exceptions import ValidationError, NotFound, APIException\nfrom django.db import transaction\nfrom django.db.models import Count\nfrom .models import Organization, Target\nfrom .serializers import OrganizationSerializer, TargetSerializer, TargetDetailSerializer, BatchCreateTargetSerializer\nfrom .services.target_service import TargetService\nfrom .services.organization_service import OrganizationService\nfrom apps.common.pagination import BasePagination\nfrom apps.common.response_helpers import success_response\nfrom apps.common.models import BlacklistRule\nfrom apps.common.serializers import TargetBlacklistRuleSerializer\n\nlogger = logging.getLogger(__name__)\n\n\nclass OrganizationViewSet(viewsets.ModelViewSet):\n    \"\"\"组织管理 - 增删改查\"\"\"\n    serializer_class = OrganizationSerializer\n    pagination_class = BasePagination\n    filter_backends = [filters.SearchFilter, filters.OrderingFilter]\n    search_fields = ['name']\n    ordering = ['-created_at']\n    \n    def __init__(self, **kwargs):\n        super().__init__(**kwargs)\n        self.org_service = OrganizationService()\n    \n    def get_queryset(self):\n        \"\"\"优化查询,预计算目标数量，避免 N+1 查询\"\"\"\n        return self.org_service.get_all_with_stats()\n    \n    @action(detail=True, methods=['get'])\n    def targets(self, request, pk=None):\n        \"\"\"\n        获取组织的目标列表\n        GET /api/organizations/{id}/targets/?page=1&pageSize=10\n        \"\"\"\n        organization = self.get_object()\n        \n        # 获取组织的目标（优化：使用 prefetch_related 预加载 organizations，避免 N+1 查询）\n        queryset = organization.targets.prefetch_related('organizations').all()\n        \n        # 使用分页器\n        paginator = self.paginator\n        page = paginator.paginate_queryset(queryset, request, view=self)\n        \n        if page is not None:\n            serializer = TargetSerializer(page, many=True)\n            return paginator.get_paginated_response(serializer.data)\n        \n        # 如果没有分页参数，抛出异常\n        raise ValidationError('必须提供分页参数 page 和 pageSize')\n    \n    @action(detail=True, methods=['post'])\n    def unlink_targets(self, request, pk=None):\n        \"\"\"\n        解除组织与目标的关联\n        POST /api/organizations/{id}/unlink_targets/\n        \n        请求格式：\n        {\n            \"target_ids\": [1, 2, 3]\n        }\n        \n        返回：\n        {\n            \"unlinked_count\": 3,\n            \"message\": \"成功解除 3 个目标的关联\"\n        }\n        \n        注意：此操作只解除关联关系，不会删除目标本身\n        \"\"\"\n        organization = self.get_object()\n        target_ids = request.data.get('target_ids', [])\n        \n        if not target_ids:\n            raise ValidationError('目标ID列表不能为空')\n        \n        if not isinstance(target_ids, list):\n            raise ValidationError('target_ids 必须是数组')\n        \n        # 使用事务保护\n        with transaction.atomic():\n            # 验证目标是否存在且属于该组织（只查询 ID，避免加载完整对象）\n            existing_target_ids = list(\n                organization.targets.filter(id__in=target_ids).values_list('id', flat=True)\n            )\n            existing_count = len(existing_target_ids)\n            \n            if existing_count == 0:\n                raise ValidationError('未找到要解除关联的目标')\n            \n            # 批量解除关联（直接使用 ID，避免查询对象）\n            organization.targets.remove(*existing_target_ids)\n        \n        return success_response(data={\n            'unlinkedCount': existing_count\n        })\n    \n    def destroy(self, request, *args, **kwargs):\n        \"\"\"\n        删除单个组织（复用批量删除逻辑）\n        \n        DELETE /api/organizations/{id}/\n        \n        功能:\n        - 复用 bulk_delete 的两阶段删除逻辑\n        - 立即返回 200 OK，软删除完成，硬删除在后台执行\n        \n        返回:\n        - 200 OK: 软删除完成，硬删除已在后台启动\n        - 404 Not Found: 组织不存在\n        \n        注意:\n        - 两阶段删除：软删除（立即）+ 硬删除（后台任务）\n        - 硬删除会清理 organization_targets 中间表\n        - 不会删除关联的 Target（多对多关系）\n        \"\"\"\n        try:\n            organization = self.get_object()\n            \n            # 直接调用 Service 层的业务方法（软删除 + 分发硬删除任务）\n            result = self.org_service.delete_organizations_two_phase([organization.id])\n            \n            return success_response(data={\n                'organizationId': organization.id,\n                'organizationName': organization.name,\n                'deletedCount': result['soft_deleted_count'],\n                'deletedOrganizations': result['organization_names']\n            })\n        \n        except Organization.DoesNotExist:\n            raise NotFound('组织不存在')\n        except ValueError as e:\n            raise NotFound(str(e))\n        except Exception as e:\n            logger.exception(\"删除组织时发生错误\")\n            raise APIException('服务器错误，请稍后重试')\n    \n    @action(detail=False, methods=['post', 'delete'], url_path='bulk-delete')\n    def bulk_delete(self, request):\n        \"\"\"\n        批量删除组织（两阶段删除）\n        \n        POST/DELETE /api/organizations/bulk-delete/\n        \n        请求格式:\n        {\n            \"ids\": [1, 2, 3]\n        }\n        \n        功能:\n        - 阶段 1：立即软删除（用户立即看不到数据）\n        - 阶段 2：后台硬删除（真正删除数据和中间表）\n        \n        返回:\n        - 200 OK: 删除成功\n        - 400 Bad Request: 参数错误\n        - 404 Not Found: 未找到要删除的组织\n        \n        注意:\n        - 软删除：用户立即看不到\n        - 硬删除：清理数据库和 organization_targets 中间表\n        - 不会删除关联的 Target（多对多关系）\n        - 硬删除任务通过 task_distributor 分发到动态容器执行\n        \"\"\"\n        ids = request.data.get('ids', [])\n        \n        # 参数验证\n        if not ids:\n            raise ValidationError('缺少必填参数: ids')\n        if not isinstance(ids, list):\n            raise ValidationError('ids 必须是数组')\n        if not all(isinstance(i, int) for i in ids):\n            raise ValidationError('ids 数组中的所有元素必须是整数')\n        \n        try:\n            # 调用 Service 层的业务方法（软删除 + 分发硬删除任务）\n            result = self.org_service.delete_organizations_two_phase(ids)\n            \n            return success_response(data={\n                'deletedCount': result['soft_deleted_count'],\n                'deletedOrganizations': result['organization_names']\n            })\n        \n        except ValueError as e:\n            raise NotFound(str(e))\n        except Exception as e:\n            logger.exception(\"删除组织时发生错误\")\n            raise APIException('服务器错误，请稍后重试')\n\n\nclass TargetViewSet(viewsets.ModelViewSet):\n    \"\"\"\n    目标管理 - 增删改查\n    \n    性能优化说明:\n    1. 使用 prefetch_related('organizations') 预加载关联的组织\n    2. 配合 TargetSerializer 中的嵌套序列化器 SimpleOrganizationSerializer\n    3. 避免 N+1 查询问题：\n       - 优化前：100 个目标 = 1 + 100 = 101 次查询\n       - 优化后：100 个目标 = 1 + 1 = 2 次查询\n    \n    ⚠️ 重要：如果在其他地方使用 TargetSerializer，必须确保查询时使用了\n    prefetch_related('organizations')，否则仍会产生 N+1 查询\n    \"\"\"\n    serializer_class = TargetSerializer\n    pagination_class = BasePagination\n    filter_backends = [filters.SearchFilter, filters.OrderingFilter]\n    search_fields = ['name']\n    ordering = ['-created_at']\n    \n    def __init__(self, **kwargs):\n        super().__init__(**kwargs)\n        self.target_service = TargetService()\n    \n    def get_queryset(self):\n        \"\"\"获取目标查询集\n        \n        注意：不在这里使用 .annotate() 预聚合统计数据\n        \n        原因：\n        - 列表页（list action）：需要分页 + 高性能统计\n        - 详情页（retrieve action）：只需要一条记录的统计\n        \n        统计策略：\n        - 列表页：在 serializer 中用 .count() 单次查询（高性能）\n        - 详情页：同样用 .count() 单次查询\n        \n        ⚠️ 为什么不用 .annotate():\n        - 原因：多个 Count(distinct=True) 在大数据量时很慢（特别是目录数据）\n        \"\"\"\n        # 列表和详情都使用相同的查询集（详情页的统计交给 serializer 用 .count()）\n        return self.target_service.get_all()\n    \n    def get_serializer_class(self):\n        \"\"\"根据不同的 action 返回不同的序列化器\n        \n        - retrieve action: 使用 TargetDetailSerializer（包含 summary 统计数据）\n        - 其他 action: 使用标准的 TargetSerializer\n        \"\"\"\n        if self.action == 'retrieve':\n            return TargetDetailSerializer\n        return TargetSerializer\n    \n    def destroy(self, request, *args, **kwargs):\n        \"\"\"\n        删除单个目标（复用批量删除逻辑）\n        \n        DELETE /api/targets/{id}/\n        \n        功能:\n        - 复用 bulk_delete 的两阶段删除逻辑\n        - 立即返回 200 OK，软删除完成，硬删除在后台执行\n        \n        返回:\n        - 200 OK: 软删除完成，硬删除已在后台启动\n        - 404 Not Found: 目标不存在\n        \n        注意:\n        - 两阶段删除：软删除（立即）+ 硬删除（后台任务）\n        - 硬删除会使用分批删除策略处理大数据量\n        \"\"\"\n        try:\n            target = self.get_object()\n            \n            # 直接调用 Service 层的业务方法（软删除 + 分发硬删除任务）\n            result = self.target_service.delete_targets_two_phase([target.id])\n            \n            return success_response(data={\n                'targetId': target.id,\n                'targetName': target.name,\n                'deletedCount': result['soft_deleted_count']\n            })\n        \n        except Target.DoesNotExist:\n            raise NotFound('目标不存在')\n        except ValueError as e:\n            raise NotFound(str(e))\n        except Exception as e:\n            logger.exception(\"删除目标时发生错误\")\n            raise APIException('服务器错误，请稍后重试')\n    \n    @action(detail=False, methods=['post', 'delete'], url_path='bulk-delete')\n    def bulk_delete(self, request):\n        \"\"\"\n        批量删除目标（两阶段删除策略）\n        \n        POST/DELETE /api/targets/bulk-delete/\n        \n        请求格式:\n        {\n            \"ids\": [1, 2, 3]\n        }\n        \n        两阶段删除策略：\n        1. 阶段 1（立即）：软删除目标，用户立即看不到数据\n        2. 阶段 2（后台）：硬删除任务，真正清理数据\n        \n        功能:\n        - 立即软删除：用户立即看不到数据（响应快）\n        - 后台硬删除：使用分批删除策略处理大数据量\n        \n        返回:\n        - 200 OK: 删除成功\n        - 400 Bad Request: 参数错误\n        - 404 Not Found: 未找到目标\n        \n        注意:\n        - 软删除：数据可恢复（deleted_at 不为 NULL）\n        - 硬删除：数据不可恢复（真正从数据库删除）\n        - 硬删除任务通过 task_distributor 分发到动态容器执行\n        \"\"\"\n        ids = request.data.get('ids', [])\n        \n        # 参数验证\n        if not ids:\n            raise ValidationError('缺少必填参数: ids')\n        if not isinstance(ids, list):\n            raise ValidationError('ids 必须是数组')\n        if not all(isinstance(i, int) for i in ids):\n            raise ValidationError('ids 数组中的所有元素必须是整数')\n        \n        try:\n            # 调用 Service 层的业务方法（软删除 + 分发硬删除任务）\n            result = self.target_service.delete_targets_two_phase(ids)\n            \n            return success_response(data={\n                'deletedCount': result['soft_deleted_count'],\n                'deletedTargets': result['target_names']\n            })\n        \n        except ValueError as e:\n            raise NotFound(str(e))\n        except Exception as e:\n            logger.exception(\"删除目标时发生错误\")\n            raise APIException('服务器错误，请稍后重试')\n    \n    @action(detail=False, methods=['post'])\n    def batch_create(self, request):\n        \"\"\"\n        批量创建目标\n        POST /api/targets/batch_create/\n        \n        请求格式：\n        {\n            \"targets\": [\n                {\"name\": \"example.com\"},\n                {\"name\": \"192.168.1.1\"},\n                {\"name\": \"192.168.1.0/24\"}\n            ],\n            \"organization_id\": 1  // 可选，关联到指定组织\n        }\n        \n        限制：\n        - 最多支持 1000 个目标的批量创建\n        - type 会根据 name 自动检测（域名/IP/CIDR）\n        \n        返回：\n        {\n            \"created_count\": 2,\n            \"failed_count\": 0,\n            \"failed_targets\": [\n                {\"name\": \"xxx\", \"reason\": \"无法识别的目标格式\"}\n            ],\n            \"message\": \"成功创建 2 个目标\"\n        }\n        \"\"\"\n        # 1. 参数验证\n        serializer = BatchCreateTargetSerializer(data=request.data)\n        serializer.is_valid(raise_exception=True)\n        \n        targets_data = serializer.validated_data['targets']\n        organization_id = serializer.validated_data.get('organization_id')\n        \n        # 2. 调用 Service 层处理业务逻辑\n        try:\n            result = self.target_service.batch_create_targets(\n                targets_data=targets_data,\n                organization_id=organization_id\n            )\n        except ValueError as e:\n            raise ValidationError(str(e))\n        \n        # 3. 返回响应\n        return success_response(data=result, status_code=status.HTTP_201_CREATED)\n    \n    # subdomains action 已迁移到 SubdomainViewSet 嵌套路由\n    # GET /api/targets/{id}/subdomains/ -> SubdomainViewSet\n\n    # vulnerabilities action 已迁移到 VulnerabilityViewSet 嵌套路由\n    # GET /api/targets/{id}/vulnerabilities/ -> VulnerabilityViewSet\n\n    # 所有资产相关的 action 和 export 已迁移到 asset/views.py 中的各 ViewSet\n    # GET /api/targets/{id}/subdomains/ -> SubdomainViewSet\n    # GET /api/targets/{id}/subdomains/export/ -> SubdomainViewSet.export\n    # GET /api/targets/{id}/websites/ -> WebSiteViewSet\n    # GET /api/targets/{id}/websites/export/ -> WebSiteViewSet.export\n    # GET /api/targets/{id}/endpoints/ -> EndpointViewSet\n    # GET /api/targets/{id}/endpoints/export/ -> EndpointViewSet.export\n    # GET /api/targets/{id}/directories/ -> DirectoryViewSet\n    # GET /api/targets/{id}/directories/export/ -> DirectoryViewSet.export\n    # GET /api/targets/{id}/ip-addresses/ -> HostPortMappingViewSet\n    # GET /api/targets/{id}/ip-addresses/export/ -> HostPortMappingViewSet.export\n    # GET /api/targets/{id}/vulnerabilities/ -> VulnerabilityViewSet\n\n    # ==================== 黑名单管理 ====================\n    \n    @action(detail=True, methods=['get', 'put'], url_path='blacklist')\n    def blacklist(self, request, pk=None):\n        \"\"\"\n        Target 黑名单规则管理\n        \n        GET /api/targets/{id}/blacklist/ - 获取 Target 黑名单列表\n        PUT /api/targets/{id}/blacklist/ - 全量替换规则（文本框保存场景）\n        \n        设计说明：\n        - 使用 PUT 全量替换模式，适合\"文本框每行一个规则\"的前端场景\n        - 用户编辑文本框 -> 点击保存 -> 后端全量替换\n        \n        架构：MVS 模式\n        - View: 参数验证、响应格式化\n        - Service: 业务逻辑（BlacklistService）\n        - Model: 数据持久化（BlacklistRule）\n        \"\"\"\n        from apps.common.services import BlacklistService\n        \n        target = self.get_object()\n        blacklist_service = BlacklistService()\n        \n        if request.method == 'GET':\n            # 获取 Target 的黑名单规则\n            rules = blacklist_service.get_target_rules(target.id)\n            patterns = list(rules.values_list('pattern', flat=True))\n            return success_response(data={'patterns': patterns})\n        \n        elif request.method == 'PUT':\n            # 全量替换\n            patterns = request.data.get('patterns', [])\n            \n            if not isinstance(patterns, list):\n                return Response(\n                    {'error': {'code': 'VALIDATION_ERROR', 'message': 'patterns 必须是数组'}},\n                    status=status.HTTP_400_BAD_REQUEST\n                )\n            \n            # 调用 Service 层全量替换\n            result = blacklist_service.replace_target_rules(target, patterns)\n            \n            return success_response(data=result)\n"
  },
  {
    "path": "backend/config/__init__.py",
    "content": "\"\"\"\n配置包初始化\n\n确保 Prefect 配置在 Django 启动时被加载\n\"\"\"\n\n# 延迟导入，避免在 ASGI 启动时出现循环依赖\n# configure_prefect() 会在 Django 应用就绪时自动调用\n\n__all__ = ('configure_prefect',)\n\n"
  },
  {
    "path": "backend/config/asgi.py",
    "content": "\"\"\"\nASGI config for config project.\n\nIt exposes the ASGI callable as a module-level variable named ``application``.\n\nFor more information on this file, see\nhttps://docs.djangoproject.com/en/5.2/howto/deployment/asgi/\n\"\"\"\n\nimport os\n\nfrom django.core.asgi import get_asgi_application\nfrom channels.routing import ProtocolTypeRouter, URLRouter\nfrom channels.auth import AuthMiddlewareStack\n\nos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')\n\n# 初始化 Django ASGI 应用（必须在导入路由之前）\ndjango_asgi_app = get_asgi_application()\n\n# 导入 WebSocket 路由\nfrom apps.scan.notifications.routing import websocket_urlpatterns as notification_ws\nfrom apps.engine.routing import websocket_urlpatterns as worker_ws\n\napplication = ProtocolTypeRouter({\n    'http': django_asgi_app,\n    'websocket': AuthMiddlewareStack(\n        URLRouter(notification_ws + worker_ws)\n    ),\n})\n"
  },
  {
    "path": "backend/config/logging_config.py",
    "content": "\"\"\"\n日志配置模块（改进版 v2）\n\n根据环境（开发/生产）和环境变量配置 Django 日志系统\n\n改进内容：\n1. ✅ 结构化日志 - JSON 格式便于日志分析和监控\n2. ✅ 性能指标日志 - 专门记录性能相关信息\n3. ⚠️  异步日志处理 - 需要额外配置（见下方说明）\n\n环境变量：\n- LOG_LEVEL: 全局日志级别 (DEBUG/INFO/WARNING/ERROR/CRITICAL)\n- LOG_DIR: 日志文件目录（留空则不输出文件）\n\n开发环境特性：\n- 默认 DEBUG 级别\n- 控制台彩色输出\n- 可选文件输出\n\n生产环境特性：\n- 默认 INFO 级别\n- 控制台 + 文件输出（配置 LOG_DIR）\n- 文件自动轮转（10MB，保留5个备份）\n- JSON 结构化日志\n- 性能指标日志\n\n依赖安装：\n- pip install python-json-logger  # JSON 格式化器\n\n异步日志说明：\n- 当前使用标准 RotatingFileHandler（同步写入）\n- 如需异步处理，可使用 logging_config_new.py 中的 QueueHandler 方案\n- 异步方案需要额外的 QueueListener 配置和生命周期管理\n\n设计说明：\n- 直接从环境变量读取配置，避免与 settings.py 循环依赖\n- settings.py 在加载时会调用此模块，此时 settings 对象尚未完全初始化\n- 这是 Django 配置模块的常见模式\n\"\"\"\n\nimport os\nfrom pathlib import Path\n\n\ndef get_logging_config(debug: bool = False):\n    \"\"\"\n    获取日志配置字典\n    \n    Args:\n        debug: 是否为 DEBUG 模式\n    \n    Returns:\n        dict: Django LOGGING 配置字典\n    \"\"\"\n    # 获取日志配置\n    log_level = os.getenv('LOG_LEVEL', 'DEBUG' if debug else 'INFO')\n    log_dir = os.getenv('LOG_DIR', '')\n    \n    # 构建 handlers 配置\n    log_handlers = ['console']\n    logging_handlers = {\n        'console': {\n            'class': 'logging.StreamHandler',\n            'formatter': 'colored' if debug else 'standard',\n            'stream': 'ext://sys.stdout',\n        }\n    }\n    \n    # 如果配置了日志目录，添加文件 handler\n    if log_dir:\n        log_path = Path(log_dir)\n        log_path.mkdir(parents=True, exist_ok=True)\n        \n        # 标准文件日志\n        log_handlers.append('file')\n        logging_handlers['file'] = {\n            'class': 'logging.handlers.RotatingFileHandler',\n            'formatter': 'standard',\n            'filename': str(log_path / 'xingrin.log'),\n            'maxBytes': 100 * 1024 * 1024,  # 100MB\n            'backupCount': 5,\n            'encoding': 'utf-8',\n        }\n        \n        # 错误日志单独记录\n        log_handlers.append('error_file')\n        logging_handlers['error_file'] = {\n            'class': 'logging.handlers.RotatingFileHandler',\n            'formatter': 'standard',\n            'filename': str(log_path / 'xingrin_error.log'),\n            'maxBytes': 100 * 1024 * 1024,  # 100MB\n            'backupCount': 5,\n            'encoding': 'utf-8',\n            'level': 'ERROR',  # 只记录 ERROR 及以上级别\n        }\n        \n        # JSON 结构化日志（暂时关闭，需要时再开启）\n        # log_handlers.append('json_file')\n        # logging_handlers['json_file'] = {\n        #     'class': 'logging.handlers.RotatingFileHandler',\n        #     'formatter': 'json',\n        #     'filename': str(log_path / 'xingrin_json.log'),\n        #     'maxBytes': 100 * 1024 * 1024,  # 100MB\n        #     'backupCount': 5,\n        #     'encoding': 'utf-8',\n        # }\n        \n        # 性能指标日志（可读格式，便于人工查看）\n        logging_handlers['performance_file'] = {\n            'class': 'logging.handlers.RotatingFileHandler',\n            'formatter': 'standard',  # 使用可读格式，不用 JSON\n            'filename': str(log_path / 'performance.log'),\n            'maxBytes': 100 * 1024 * 1024,  # 100MB\n            'backupCount': 5,\n            'encoding': 'utf-8',\n        }\n    \n    # 构建完整的 LOGGING 配置\n    logging_config = {\n        'version': 1,\n        'disable_existing_loggers': False,\n        \n        # 格式化器\n        'formatters': {\n            'standard': {\n                'format': '[%(asctime)s] [%(levelname)s] [%(name)s:%(lineno)d] %(message)s',\n                'datefmt': '%Y-%m-%d %H:%M:%S',\n            },\n            'colored': {\n                'format': '%(log_color)s[%(asctime)s] [%(levelname)s] [%(name)s:%(lineno)d]%(reset)s %(message)s',\n                'datefmt': '%Y-%m-%d %H:%M:%S',\n                '()': 'colorlog.ColoredFormatter',\n                'log_colors': {\n                    'DEBUG': 'cyan',\n                    'INFO': 'green',\n                    'WARNING': 'yellow',\n                    'ERROR': 'red',\n                    'CRITICAL': 'red,bg_white',\n                },\n            },\n            # JSON 格式化器（结构化日志）\n            'json': {\n                '()': 'pythonjsonlogger.jsonlogger.JsonFormatter',\n                'format': '%(asctime)s %(name)s %(levelname)s %(message)s %(pathname)s %(lineno)d',\n                'datefmt': '%Y-%m-%d %H:%M:%S',\n            },\n        },\n        \n        # 处理器\n        'handlers': logging_handlers,\n        \n        # 日志记录器\n        'loggers': {\n            # Django 核心日志\n            'django': {\n                'handlers': log_handlers,\n                'level': 'INFO',  # Django 框架日志，通常不需要 DEBUG\n                'propagate': False,\n            },\n            'django.request': {\n                'handlers': log_handlers,\n                'level': 'WARNING',  # 请求错误日志\n                'propagate': False,\n            },\n            'django.server': {\n                'handlers': log_handlers,\n                'level': 'WARNING',  # Django 开发服务器日志\n                'propagate': False,\n            },\n            'django.db.backends': {\n                'handlers': log_handlers,\n                'level': 'WARNING' if not debug else 'DEBUG',  # SQL 查询日志（开发环境可启用）\n                'propagate': False,\n            },\n            \n\n            \n            # 应用日志 - 扫描模块\n            'apps.scan': {\n                'handlers': log_handlers,\n                'level': log_level,\n                'propagate': False,\n            },\n            \n            # 应用日志 - 其他模块（统一级别）\n            'apps.asset': {\n                'handlers': log_handlers,\n                'level': log_level,\n                'propagate': False,\n            },\n            'apps.targets': {\n                'handlers': log_handlers,\n                'level': log_level,\n                'propagate': False,\n            },\n            'apps.engine': {\n                'handlers': log_handlers,\n                'level': log_level,\n                'propagate': False,\n            },\n            'apps.common': {\n                'handlers': log_handlers,\n                'level': log_level,\n                'propagate': False,\n            },\n            \n            # 第三方库日志控制\n            'websockets': {\n                'handlers': log_handlers,\n                'level': 'WARNING',  # 关闭 WebSocket 的 DEBUG/INFO 日志\n                'propagate': False,\n            },\n            'websockets.client': {\n                'handlers': log_handlers,\n                'level': 'WARNING',  # 关闭 WebSocket 客户端的调试日志\n                'propagate': False,\n            },\n            'httpx': {\n                'handlers': log_handlers,\n                'level': 'WARNING',  # 关闭 HTTP 客户端的详细日志\n                'propagate': False,\n            },\n            'httpcore': {\n                'handlers': log_handlers,\n                'level': 'WARNING',  # 关闭 HTTP 核心库的调试日志\n                'propagate': False,\n            },\n            'httpcore.connection': {\n                'handlers': log_handlers,\n                'level': 'WARNING',  # 关闭 HTTP 连接的调试日志\n                'propagate': False,\n            },\n            'httpcore.http11': {\n                'handlers': log_handlers,\n                'level': 'WARNING',  # 关闭 HTTP/1.1 协议的调试日志\n                'propagate': False,\n            },\n            'prefect': {\n                'handlers': log_handlers,\n                'level': 'INFO',  # Prefect 框架日志保持 INFO 级别\n                'propagate': False,\n            },\n            'apscheduler': {\n                'handlers': log_handlers,\n                'level': 'WARNING',  # 关闭定时任务的 INFO 日志（每分钟执行）\n                'propagate': False,\n            },\n            'apscheduler.scheduler': {\n                'handlers': log_handlers,\n                'level': 'WARNING',\n                'propagate': False,\n            },\n            'apscheduler.executors': {\n                'handlers': log_handlers,\n                'level': 'WARNING',\n                'propagate': False,\n            },\n            'graphviz': {\n                'handlers': log_handlers,\n                'level': 'WARNING',  # 关闭 graphviz 的 DEBUG 日志\n                'propagate': False,\n            },\n            'graphviz._tools': {\n                'handlers': log_handlers,\n                'level': 'WARNING',  # 关闭 graphviz._tools 的 DEBUG 日志\n                'propagate': False,\n            },\n            \n            # Django 框架日志控制\n            'django.db.backends': {\n                'handlers': log_handlers,\n                'level': 'INFO',  # 关闭数据库查询的 DEBUG 日志\n                'propagate': False,\n            },\n            'django.db.backends.schema': {\n                'handlers': log_handlers,\n                'level': 'WARNING',  # 关闭数据库模式的 DEBUG 日志\n                'propagate': False,\n            },\n            'django.utils.autoreload': {\n                'handlers': log_handlers,\n                'level': 'WARNING',  # 关闭自动重载的 DEBUG 日志\n                'propagate': False,\n            },\n            'django.request': {\n                'handlers': log_handlers,\n                'level': 'WARNING',  # 只记录 WARNING 以上的请求日志（错误请求）\n                'propagate': False,\n            },\n            'django.server': {\n                'handlers': log_handlers,\n                'level': 'WARNING',  # 关闭服务器的 INFO 日志（如访问日志）\n                'propagate': False,\n            },\n            \n            # 其他第三方库日志控制\n            'asyncio': {\n                'handlers': log_handlers,\n                'level': 'WARNING',  # 关闭 asyncio 的 DEBUG 日志\n                'propagate': False,\n            },\n            'urllib3': {\n                'handlers': log_handlers,\n                'level': 'WARNING',  # 关闭 urllib3 的详细日志\n                'propagate': False,\n            },\n            'urllib3.connectionpool': {\n                'handlers': log_handlers,\n                'level': 'WARNING',  # 关闭连接池的详细日志\n                'propagate': False,\n            },\n            \n            # 性能指标日志（专门记录性能相关信息）\n            'performance': {\n                'handlers': ['performance_file'] if log_dir else ['console'],\n                'level': 'INFO',\n                'propagate': False,\n            },\n        },\n        \n        # 根日志记录器（兜底配置）\n        'root': {\n            'level': log_level,\n            'handlers': log_handlers,\n        },\n    }\n    \n    return logging_config\n"
  },
  {
    "path": "backend/config/settings.py",
    "content": "\"\"\"\nDjango settings for config project.\n\nGenerated by 'django-admin startproject' using Django 5.2.7.\n\nFor more information on this file, see\nhttps://docs.djangoproject.com/en/5.2/topics/settings/\n\nFor the full list of settings and their values, see\nhttps://docs.djangoproject.com/en/5.2/ref/settings/\n\"\"\"\n\nfrom pathlib import Path\nimport os\nfrom dotenv import load_dotenv\n\n# 加载环境变量\nload_dotenv()\n\n\ndef get_bool_env(key: str, default: bool = False) -> bool:\n    \"\"\"获取布尔值环境变量，兼容多种写法（true/True/TRUE/1/yes）\"\"\"\n    value = os.getenv(key, str(default)).lower()\n    return value in ('true', '1', 'yes', 'on')\n\n# Build paths inside the project like this: BASE_DIR / 'subdir'.\nBASE_DIR = Path(__file__).resolve().parent.parent\n\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/5.2/howto/deployment/checklist/\n\n# SECURITY WARNING: keep the secret key used in production secret!\nSECRET_KEY = os.getenv('SECRET_KEY', 'django-insecure-default-key')\n\n# SECURITY WARNING: don't run with debug turned on in production!\n# 安全优先：默认为 False，开发环境需显式设置 DEBUG=True\nDEBUG = get_bool_env('DEBUG', False)\n\nALLOWED_HOSTS = ['*']\n\n\n# Application definition\n\nINSTALLED_APPS = [\n    'django.contrib.admin',\n    'django.contrib.auth',\n    'django.contrib.contenttypes',\n    'django.contrib.sessions',\n    'django.contrib.messages',\n    'django.contrib.staticfiles',\n    # 第三方应用\n    'rest_framework',\n    'django_filters',  # DRF 过滤器支持\n    'drf_yasg',\n    'corsheaders',\n    'channels',  # WebSocket 支持\n    # 业务应用\n    'apps.common',   # 通用工具\n    'apps.targets',  # 扫描目标管理\n    'apps.scan',     # 扫描任务管理\n    'apps.engine',   # 扫描引擎管理\n    'apps.asset',    # 资产管理\n]\n\nMIDDLEWARE = [\n    'django.middleware.security.SecurityMiddleware',\n    'django.contrib.sessions.middleware.SessionMiddleware',\n    'corsheaders.middleware.CorsMiddleware',  # CORS 中间件（必须在 CommonMiddleware 之前）\n    'django.middleware.common.CommonMiddleware',\n    # 'django.middleware.csrf.CsrfViewMiddleware',  # 已禁用 CSRF 校验\n    'django.contrib.auth.middleware.AuthenticationMiddleware',\n    'django.contrib.messages.middleware.MessageMiddleware',\n    'django.middleware.clickjacking.XFrameOptionsMiddleware',\n]\n\nROOT_URLCONF = 'config.urls'\n\nTEMPLATES = [\n    {\n        'BACKEND': 'django.template.backends.django.DjangoTemplates',\n        'DIRS': [BASE_DIR / 'templates'],  # 添加自定义模板目录\n        'APP_DIRS': True,\n        'OPTIONS': {\n            'context_processors': [\n                'django.template.context_processors.request',\n                'django.contrib.auth.context_processors.auth',\n                'django.contrib.messages.context_processors.messages',\n            ],\n        },\n    },\n]\n\nWSGI_APPLICATION = 'config.wsgi.application'\n\n# ASGI 应用配置（用于 WebSocket）\nASGI_APPLICATION = 'config.asgi.application'\n\n\n# Database - PostgreSQL 配置\n# https://docs.djangoproject.com/en/5.2/ref/settings/#databases\n\nDATABASES = {\n    'default': {\n        'ENGINE': os.getenv('DB_ENGINE', 'django.db.backends.postgresql'),\n        'NAME': os.getenv('DB_NAME', 'xingrin'),\n        'USER': os.getenv('DB_USER', 'postgres'),\n        'PASSWORD': os.getenv('DB_PASSWORD', ''),\n        'HOST': os.getenv('DB_HOST', 'localhost'),\n        'PORT': os.getenv('DB_PORT', '5432'),\n        \n        # 连接池配置：针对长时间扫描任务优化\n        # 说明：\n        # - 0: 每次请求后关闭（适合不稳定的远程连接）\n        # - 60-120: 推荐值（平衡性能和资源占用）\n        # - 300+: 适合长时间任务（减少连接重建开销）\n        # - None: 永久连接（仅适合专用连接池，不推荐）\n        'CONN_MAX_AGE': int(os.getenv('DB_CONN_MAX_AGE', '60')),  # 降低到 60 秒，更快检测失效连接\n        \n        # Django 4.1+ 连接健康检查：每次使用前验证连接是否有效\n        # 解决 \"server closed the connection unexpectedly\" 问题\n        'CONN_HEALTH_CHECKS': True,\n        \n        # PostgreSQL 特定选项 - 针对远程数据库优化\n        'OPTIONS': {\n            'connect_timeout': 30,  # 连接超时 30 秒（远程数据库需要更长时间）\n            'options': '-c statement_timeout=60000 -c idle_in_transaction_session_timeout=300000',  # SQL 语句超时 60 秒，事务空闲超时 5 分钟\n            'keepalives': 1,  # 启用 TCP keepalive\n            'keepalives_idle': 30,  # TCP keepalive 空闲时间 30 秒（更积极地检测断连）\n            'keepalives_interval': 10,  # TCP keepalive 间隔 10 秒\n            'keepalives_count': 5,  # TCP keepalive 重试次数\n            # 性能优化参数\n            'sslmode': 'disable',  # 禁用SSL以减少连接延迟（如果网络安全可控）\n            'application_name': 'xingrin_scanner',  # 标识应用名称，便于监控\n        }\n    }\n}\n\n\n# Password validation\n# https://docs.djangoproject.com/en/5.2/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n    {\n        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',\n    },\n    {\n        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',\n    },\n    {\n        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',\n    },\n    {\n        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',\n    },\n]\n\n\n# Internationalization\n# https://docs.djangoproject.com/en/5.2/topics/i18n/\n\nLANGUAGE_CODE = os.getenv('LANGUAGE_CODE', 'zh-hans')\n\nTIME_ZONE = os.getenv('TIME_ZONE', 'Asia/Shanghai')\n\nUSE_I18N = True\n\nUSE_TZ = True\n\n\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.2/howto/static-files/\n\nSTATIC_URL = 'static/'\n\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.2/ref/settings/#default-auto-field\n\nDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'\n\n# ==================== Worker API Key 配置 ====================\n# Worker 节点认证密钥（从环境变量读取）\nWORKER_API_KEY = os.environ.get('WORKER_API_KEY', '')\n\n# ==================== REST Framework 配置 ====================\nREST_FRAMEWORK = {\n    'DEFAULT_PAGINATION_CLASS': 'apps.common.pagination.BasePagination',  # 使用基础分页器\n    \n    # Session 认证（禁用 CSRF，前后端分离项目通过 CORS 控制跨域）\n    'DEFAULT_AUTHENTICATION_CLASSES': [\n        'apps.common.authentication.CsrfExemptSessionAuthentication',\n    ],\n    \n    # 全局权限配置：默认需要认证，公开端点和 Worker 端点在权限类中单独处理\n    'DEFAULT_PERMISSION_CLASSES': [\n        'apps.common.permissions.IsAuthenticatedOrPublic',\n    ],\n    \n    # 自定义异常处理器：统一 401/403 错误响应格式\n    'EXCEPTION_HANDLER': 'apps.common.exception_handlers.custom_exception_handler',\n    \n    # JSON 命名格式转换：后端 snake_case ↔ 前端 camelCase\n    'DEFAULT_RENDERER_CLASSES': (\n        'djangorestframework_camel_case.render.CamelCaseJSONRenderer',  # 响应数据转换为 camelCase\n        'djangorestframework_camel_case.render.CamelCaseBrowsableAPIRenderer',  # 浏览器 API 也使用 camelCase\n    ),\n    'DEFAULT_PARSER_CLASSES': (\n        'djangorestframework_camel_case.parser.CamelCaseJSONParser',  # 请求数据从 camelCase 转换为 snake_case\n        'djangorestframework_camel_case.parser.CamelCaseFormParser',  # 表单数据也支持转换\n        'djangorestframework_camel_case.parser.CamelCaseMultiPartParser',  # 文件上传支持转换\n    ),\n    \n    # 转换配置\n    'JSON_UNDERSCOREIZE': {\n        'no_underscore_before_number': True,  # 数字前不加下划线 (field1 不会变成 field_1)\n    },\n}\n\n# ==================== CORS 配置 ====================\n# 允许所有来源（前后端分离项目，安全性由认证系统保障）\nCORS_ALLOW_ALL_ORIGINS = os.getenv('CORS_ALLOW_ALL_ORIGINS', 'True').lower() == 'true'\nCORS_ALLOW_CREDENTIALS = True\n# 暴露额外的响应头给前端（Content-Disposition 用于文件下载获取文件名）\nCORS_EXPOSE_HEADERS = ['Content-Disposition']\n\n# ==================== CSRF 配置 ====================\nCSRF_TRUSTED_ORIGINS = os.getenv('CSRF_TRUSTED_ORIGINS', 'http://localhost:3000,http://127.0.0.1:3000').split(',')\n\n# ==================== Session 配置 ====================\nSESSION_COOKIE_AGE = 60 * 60 * 24 * 7  # 7 天\nSESSION_COOKIE_HTTPONLY = True\nSESSION_COOKIE_SAMESITE = 'Lax'  # 跨站请求时发送 cookie\n\n# ==================== 扫描结果存储和清理配置 ====================\n\n# 扫描结果存储目录（智能路径配置）\n_scan_results_dir_env = os.getenv('SCAN_RESULTS_DIR')\nif _scan_results_dir_env:\n    # 使用环境变量指定的路径（支持相对和绝对路径）\n    if os.path.isabs(_scan_results_dir_env):\n        SCAN_RESULTS_DIR = _scan_results_dir_env  # 绝对路径\n    else:\n        SCAN_RESULTS_DIR = str(BASE_DIR / _scan_results_dir_env)  # 相对路径转绝对路径\nelse:\n    # 默认使用项目目录下的 results 文件夹\n    SCAN_RESULTS_DIR = str(BASE_DIR / 'results')\n\n# 扫描结果保留时间（单位：天）\nSCAN_RESULTS_RETENTION_DAYS = int(os.getenv('SCAN_RETENTION_DAYS', '3'))\n\n\n# ==================== Redis 配置 ====================\n# Redis 配置（用于 WebSocket Channel Layer）\nREDIS_HOST = os.getenv('REDIS_HOST', 'localhost')\nREDIS_PORT = int(os.getenv('REDIS_PORT', 6379))\nREDIS_DB = int(os.getenv('REDIS_DB', 0))\n\n# Channels Layer 配置（WebSocket 后端）\nCHANNEL_LAYERS = {\n    'default': {\n        'BACKEND': 'channels_redis.core.RedisChannelLayer',\n        'CONFIG': {\n            'hosts': [(REDIS_HOST, REDIS_PORT)],\n            'capacity': 1500,  # 单个通道最大消息数\n            'expiry': 10,  # 消息过期时间（秒）\n        },\n    },\n}\n\n# ==================== 日志配置 ====================\n# 日志配置说明：\n# 1. 开发环境（DEBUG=True）：\n#    - 默认 DEBUG 级别，输出详细调试信息\n#    - 控制台彩色输出，便于调试\n#    - 可选文件输出（配置 LOG_DIR）\n#\n# 2. 生产环境（DEBUG=False）：\n#    - 默认 INFO 级别，只输出关键信息\n#    - 同时输出到控制台和文件（配置 LOG_DIR）\n#    - 文件自动轮转，避免日志文件过大\n#\n# 3. 环境变量控制：\n#    - LOG_LEVEL: 全局日志级别（DEBUG/INFO/WARNING/ERROR/CRITICAL）\n#    - LOG_DIR: 日志文件目录（留空则不输出文件）\n#\nfrom config.logging_config import get_logging_config\n\nLOGGING = get_logging_config(debug=DEBUG)\n\n# 命令执行日志开关（供 apps.scan.utils.command_executor 使用）\nENABLE_COMMAND_LOGGING = get_bool_env('ENABLE_COMMAND_LOGGING', True)\n\n# ==================== 数据目录配置（统一使用 /opt/xingrin） ====================\n# 所有数据目录统一挂载到 /opt/xingrin，便于管理和备份\n\n# 扫描工具基础路径（worker 容器内，符合 FHS 标准）\n# 使用 /opt/xingrin-tools/bin 隔离项目专用扫描工具，避免与系统工具或 Python 包冲突\nSCAN_TOOLS_BASE_PATH = os.getenv('SCAN_TOOLS_PATH', '/opt/xingrin-tools/bin')\n\n# 字典文件基础路径\nWORDLISTS_BASE_PATH = os.getenv('WORDLISTS_PATH', '/opt/xingrin/wordlists')\n\n# 指纹库基础路径\nFINGERPRINTS_BASE_PATH = os.getenv('FINGERPRINTS_PATH', '/opt/xingrin/fingerprints')\n\n# Nuclei 模板仓库根目录（存放 git clone 的仓库）\nNUCLEI_TEMPLATES_REPOS_BASE_DIR = os.getenv('NUCLEI_TEMPLATES_REPOS_DIR', '/opt/xingrin/nuclei-repos')\n\n# Nuclei 模板基础路径（custom / public 两类模板目录，已废弃，保留兼容）\nNUCLEI_CUSTOM_TEMPLATES_DIR = os.getenv('NUCLEI_CUSTOM_TEMPLATES_DIR', '/opt/xingrin/nuclei-templates/custom')\nNUCLEI_PUBLIC_TEMPLATES_DIR = os.getenv('NUCLEI_PUBLIC_TEMPLATES_DIR', '/opt/xingrin/nuclei-templates/public')\n\n# Nuclei 官方模板仓库地址\nNUCLEI_TEMPLATES_REPO_URL = os.getenv('NUCLEI_TEMPLATES_REPO_URL', 'https://github.com/projectdiscovery/nuclei-templates.git')\n\n# 对外访问主机与端口（供 Worker 访问 Django 使用）\nPUBLIC_HOST = os.getenv('PUBLIC_HOST', 'localhost').strip()\nPUBLIC_PORT = os.getenv('PUBLIC_PORT', '8083').strip()  # 对外 HTTPS 端口\nSERVER_PORT = os.getenv('SERVER_PORT', '8888')\n\n# ============================================\n# 任务分发器配置（负载感知调度）\n# ============================================\n# Docker 镜像版本配置（统一管理，确保所有组件版本一致）\nDOCKER_USER = os.getenv('DOCKER_USER', 'yyhuni')\nIMAGE_TAG = os.getenv('IMAGE_TAG', '')\n\n# 任务执行器镜像配置（task_distributor 用于创建 worker 容器执行扫描任务）\n# \n# 版本一致性说明：\n# - 生产环境：IMAGE_TAG 锁定版本，确保 server 和 worker 版本一致\n# - 开发环境：可通过 TASK_EXECUTOR_IMAGE 环境变量指向本地构建镜像\n# \n# 环境区分逻辑：\n# 1. 主服务器环境：\n#    - 有 IMAGE_TAG 环境变量（从 docker/.env 读取，install.sh 写入）\n#    - 需要 TASK_EXECUTOR_IMAGE 来创建 worker 容器执行任务\n#    - 默认使用 {DOCKER_USER}/xingrin-worker:{IMAGE_TAG}（版本锁定）\n#    - 开发时可设置 TASK_EXECUTOR_IMAGE=本地镜像名 覆盖\n# \n# 2. Worker 容器环境：\n#    - 无 IMAGE_TAG 环境变量（容器启动时未注入）\n#    - 无 .env 文件\n#    - 不需要 TASK_EXECUTOR_IMAGE（worker 只执行任务，不会再创建其他容器）\n#    - 设为空字符串避免 AttributeError，确保 settings 模块正常加载\n# \n# 开发环境配置示例：\n# 在 docker/.env 中添加：TASK_EXECUTOR_IMAGE=docker-agent:test-v1.0.0\nif IMAGE_TAG:\n    # 主服务器场景：构建完整镜像名\n    TASK_EXECUTOR_IMAGE = os.getenv('TASK_EXECUTOR_IMAGE', f'{DOCKER_USER}/xingrin-worker:{IMAGE_TAG}')\nelse:\n    # Worker 容器场景：空值，防止加载错误\n    TASK_EXECUTOR_IMAGE = os.getenv('TASK_EXECUTOR_IMAGE', '')\n\n# 任务提交间隔（秒）- 防止短时间内重复分配到同一节点\n# 应大于心跳间隔（3秒），确保负载数据已更新\nTASK_SUBMIT_INTERVAL = int(os.getenv('TASK_SUBMIT_INTERVAL', '6'))\n\n# 本地 Worker Docker 网络名称（与 docker-compose.yml 中定义的一致）\nDOCKER_NETWORK_NAME = os.getenv('DOCKER_NETWORK_NAME', 'xingrin_network')\n\n# 宿主机挂载源路径（所有节点统一使用固定路径）\n# 部署前需创建：mkdir -p /opt/xingrin\nHOST_RESULTS_DIR = '/opt/xingrin/results'\nHOST_LOGS_DIR = '/opt/xingrin/logs'\nHOST_FINGERPRINTS_DIR = '/opt/xingrin/fingerprints'\nHOST_WORDLISTS_DIR = '/opt/xingrin/wordlists'\n\n# ============================================\n# Worker 配置中心（任务容器从 /api/workers/config/ 获取）\n# ============================================\n# Worker 数据库地址由 worker_views.py 的 config API 动态返回\n# 根据请求来源（本地/远程）返回不同的配置：\n# - 本地 Worker（Docker 网络内）：使用内部服务名 postgres\n# - 远程 Worker（公网访问）：使用 PUBLIC_HOST\n# \n# 注意：Redis 仅在 Server 容器内使用，Worker 不需要直接连接 Redis\n_db_host = DATABASES['default']['HOST']\n_is_internal_db = _db_host in ('postgres', 'localhost', '127.0.0.1')\nWORKER_DB_HOST = os.getenv('WORKER_DB_HOST', _db_host)\n\n# 容器内挂载目标路径（统一使用 /opt/xingrin）\nCONTAINER_RESULTS_MOUNT = '/opt/xingrin/results'\nCONTAINER_LOGS_MOUNT = '/opt/xingrin/logs'\n"
  },
  {
    "path": "backend/config/urls.py",
    "content": "\"\"\"\nURL configuration for config project.\n\nThe `urlpatterns` list routes URLs to views. For more information please see:\n    https://docs.djangoproject.com/en/5.2/topics/http/urls/\nExamples:\nFunction views\n    1. Add an import:  from my_app import views\n    2. Add a URL to urlpatterns:  path('', views.home, name='home')\nClass-based views\n    1. Add an import:  from other_app.views import Home\n    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')\nIncluding another URLconf\n    1. Import the include() function: from django.urls import include, path\n    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))\n\"\"\"\nfrom django.contrib import admin\nfrom django.urls import path, include\nfrom drf_yasg.views import get_schema_view\nfrom drf_yasg import openapi\n\nfrom apps.scan.notifications.views import NotificationSettingsView\n\n# API 文档配置\nschema_view = get_schema_view(\n   openapi.Info(\n      title=\"XingRin API\",\n      default_version='v1',\n      description=\"Web 应用侦察工具 API 文档\",\n   ),\n   public=True,\n)\n\nurlpatterns = [\n    # Django 后台管理\n    path('admin/', admin.site.urls),\n    \n    # API 文档\n    path('api/swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='swagger'),\n    path('api/redoc/', schema_view.with_ui('redoc', cache_timeout=0), name='redoc'),\n    \n    # 业务 API（包含 organizations 和 targets）\n    path('api/', include('apps.targets.urls')),\n    \n    # 扫描 API\n    path('api/', include('apps.scan.urls')),\n    \n    # 引擎 & Worker API\n    path('api/', include('apps.engine.urls')),\n    \n    # 资产 API\n    path('api/', include('apps.asset.urls')),\n    \n    # 通知 API\n    path('api/notifications/', include('apps.scan.notifications.urls')),\n    \n    # 通知设置 API\n    path('api/settings/notifications/', NotificationSettingsView.as_view(), name='notification-settings'),\n    \n    # 认证 API\n    path('api/', include('apps.common.urls')),\n]\n"
  },
  {
    "path": "backend/fingerprints/ARL.yaml",
    "content": "- name: CISCO-RV016-VPN-Router_header\n  rule: header=\"realm=\\\"rv016\"\n- name: Sangfor-Data-Center_header\n  rule: 'header=\"location: ./src/acloglogin.php\"'\n- name: 天融信运维监控平台_header\n  rule: header=\"天融信运维监控平台\"\n- name: Metaswitch-Networks-MetaView-Web_body\n  rule: body=\"content='dcl.metaview.web.client'\" && body=\"src=\\\"dcl.metaview.web.client.nocache.js\\\">\"\n- name: TP-LINK Wireless WR743ND_header\n  rule: header=\"TP-LINK Wireless WR743ND\"\n- name: Handle Proxy_icon_hash\n  rule: icon_hash=\"926501571\"\n- name: MDaemon Webmail_icon_hash\n  rule: icon_hash=\"-766957661\"\n- name: EFM-Networks-ipTIME-T16000_body\n  rule: body=\"src=\\\"/images2/login_title.t16000.gif\\\"\"\n- name: Sangfor-Data-Center_body\n  rule: body=\"acloglogin.php\"\n- name: Jana-Server_header\n  rule: header=\"Jana-Server\"\n- name: Goblin_header\n  rule: header=\"Goblinserver:\"\n- name: ADB Broadband S.p.A. (Network)_icon_hash\n  rule: icon_hash=\"-587741716\"\n- name: TP-LINK VPR400VPN_header\n  rule: header=\"TP-LINK VPR400VPN\"\n- name: Sqreen_header\n  rule: header=\"Sqreen\"\n- name: VMware ESXi_header\n  rule: header=\"VMware ESXi\"\n- name: LabVIEW_header\n  rule: 'header=\"server: labview\" && header=\"LabVIEW\"'\n- name: mingyuanyun-Sales_body\n  rule: body=\"value=\\\"明源售楼管理系统v5.0\\\"\" && body=\"<img id=\\\"erp\\\" src=\\\"/_imgs/login/zs_erp.png\"\n- name: AutoiPacket Webserver_header\n  rule: header=\"AutoiPacket Webserver\"\n- name: Apache-Dubbo_header\n  rule: header=\" basic realm=\\\"dubbo\\\"\"\n- name: 华为_HUAWEI_ASG2050_header\n  rule: header=\"HUAWEI ASG2050\"\n- name: orangehrm_header\n  rule: header=\"orangehrm\"\n- name: Mattermost_header\n  rule: header=\"Mattermost\"\n- name: Lotus-Domino_header\n  rule: header=\"Server:Lotus-Domino\"\n- name: 加速乐CDN_header\n  rule: header=\"加速乐CDN\"\n- name: Craigs CMS_header\n  rule: header=\"Craigs CMS\"\n- name: AXIS-70U_header\n  rule: header=\"AXIS-70U\"\n- name: Entrolink_icon_hash\n  rule: icon_hash=\"1973665246\"\n- name: truVision NVR (interlogix)_icon_hash\n  rule: icon_hash=\"1782271534\"\n- name: phpMoneyBooks_body\n  rule: body=\"href='http://phpmoneybooks.com'>phpmoneybooks\"\n- name: Influxdb_header\n  rule: header=\"X-Influxdb\"\n- name: 致远 M1_icon_hash\n  rule: icon_hash=\"3080850296\"\n- name: 金和 OA_body\n  rule: body=\"金和网络\" && body=\"Jinher Software\"\n- name: eagleeyescctv_body\n  rule: body=\"ip surveillance for your life\" && body=\"/nobody/logindevice.js\" && body=\"IP\n    Surveillance for Your Life\" && body=\"/nobody/loginDevice.js\"\n- name: TP-LINK-TD-8840T_header\n  rule: header=\"realm=\\\"td-8840t\"\n- name: 网旗路由器管理系统_header\n  rule: header=\"网旗路由器管理系统\"\n- name: EFM-Networks-ipTIME-A604V_body\n  rule: body=\"src=\\\"/images2/login_title.a604v.gif\\\"\"\n- name: 致远 M1_body\n  rule: body=\"M1-Server 已启动，您可以使用移动设备登录M1\"\n- name: AliyunOSS_header\n  rule: 'header=\"server: aliyunoss\" && header=\"x-oss-request-id\" && header=\"AliyunOSS\"'\n- name: ChinaTelecomArrearsRecoveryManagementSystem_body\n  rule: body=\"id=\\\"v_login_container\\\"\"\n- name: linksys-am_header\n  rule: header=\"linksys-am\"\n- name: Zyxel ZyWALL_icon_hash\n  rule: icon_hash=\"-484708885\"\n- name: DELL-N2024_body\n  rule: body=\"class=\\\"login_server_default\\\">n2024\"\n- name: AVIOSYS-IP-Camera_body\n  rule: body=\"copyright aviosys\" && body=\"view log\"\n- name: Polycom-SoundPoint_header\n  rule: 'header=\"server: polycom soundpoint ip telephone httpd\"'\n- name: eagleeyescctv_header\n  rule: header=\"avtech\"\n- name: dahua-WP_body\n  rule: body=\"src=\\\"/wpms/asset/common/js/jsencrypt.min.js\\\"\"\n- name: DolphinScheduler_body\n  rule: body=\"let node_env = 'true'\" && body=\"<title>dolphinscheduler</title>\"\n- name: SES-imagotag_body\n  rule: body=\"href=\\\"/xsl/accesspoint.xsl\\\"\"\n- name: sapido-router_body\n  rule: body=\"/etop_home_menu_style.css\" && body=\"/b28n.js\"\n- name: 1C-Bitrix_header\n  rule: header=\"1C-Bitrix\"\n- name: Linksys-Queretaro_header\n  rule: header=\"Linksys-Queretaro\"\n- name: CopAdd400_body\n  rule: body=\"科博安全隔离与信息单向导入系统</span>\" && body=\"page/downloadlinuxclient.is.run\"\n- name: APC_Management_body\n  rule: body=\"This object on the APC Management Web Server is protected\"\n- name: APC_Management_header\n  rule: header=\"APC Management Card\"\n- name: Zenoss_body\n  rule: body=\"/zport/dmd/\"\n- name: AtClose Server_header\n  rule: header=\"AtClose Server\"\n- name: 用友-时空KSOA_body\n  rule: body=\"/images_index/productKSOA.jpg\"\n- name: 08cms_body\n  rule: body=\"content=\\\"08CMS\" && body=\"typeof(_08cms)\"\n- name: B_LINK-APRouter_header\n  rule: header=\"realm=\\\"b-link-aprouter\"\n- name: LeTV-路由器_header\n  rule: header=\"LeTV-路由器\"\n- name: 强讯科技 TalenTel_Log在线录音监听系统_header\n  rule: header=\"强讯科技 TalenTel_Log在线录音监听系统\"\n- name: Lenovo-Printer_body\n  rule: body=\"<frame name=lower  src=\\\"index.files/user.files/index.htm\\\">\"\n- name: Pushgateway_body\n  rule: body=\"<a class=\\\"navbar-brand\\\" href=\\\"#\\\">Pushgateway</a>\"\n- name: Sitecom-NAS_header\n  rule: header=\"realm=\\\"sitecom login enter password (default is sitecom\"\n- name: Exponent-CMS_body\n  rule: body=\"content=\\\"exponent content management system\" && body=\"powered by exponent\n    cms\" && body=\"content=\\\"Exponent Content Management System\" && body=\"Powered by\n    Exponent CMS\"\n- name: 飞鱼星 家用智能路由_title\n  rule: title=\"飞鱼星家用智能路由\"\n- name: Moxa VPort Devices_header\n  rule: header=\"Moxa VPort Devices\"\n- name: Linksys BEFW11S4_header\n  rule: header=\"Linksys BEFW11S4\"\n- name: ZEBRA-GX430t_body\n  rule: body=\"ztc gx430t</h1>\"\n- name: Fortinet-CoyotePoint-Load-Balancer_header\n  rule: 'header=\"server: coyotepoint\"'\n- name: 智能表综合管理系统_body\n  rule: body=\"js/jsCore.js\" && body=\"Ajax_Code/Login.ashx\" && body=\"login.css\"\n- name: 爱信诺开票服务器_body\n  rule: body=\"aisino.kps.console\"\n- name: phpMyBible_body\n  rule: body=\"<div class='chaphead'>\"\n- name: SuperMap-iServer_body\n  rule: body=\"window.location.href=\\\"iserver\\\";\" && body=\"id=\\\"copyright\\\"><a href=\\\"http://www.supermap.com.cn\"\n- name: 用友GRP-U8 新政府会计制度专版_icon_hash\n  rule: icon_hash=\"3995446927\"\n- name: Discuz(康盛)_body\n  rule: body=\"Powered by Discuz!\" && body=\"discuz\"\n- name: DIR-825 web server_header\n  rule: header=\"DIR-825 web server\"\n- name: TPLINK-Camera_body\n  rule: body=\"<frame src=\\\"controlmenu.htm\"\n- name: HG100R-L4_body\n  rule: body=\"nav.rg_str_incorrect_id_password\" && body=\"copyright &copy; 2014 humax\n    co., ltd. all rights reserved\"\n- name: GFSOFT-Akuntansi-2008_body\n  rule: body=\"src=\\\"images/box%20akuntansi%202008.png\\\"\"\n- name: ipTIME-N704A3_body\n  rule: body=\"src =\\\"/images2/login_title.n704a3.gif\\\"\"\n- name: HUAWEI-HG8120C_body\n  rule: body=\"var productname = 'hg8120c'\"\n- name: opsview_header\n  rule: header=\"opsview\"\n- name: Linksys E1200_header\n  rule: header=\"Linksys E1200\"\n- name: XWiki_header\n  rule: header=\"XWiki\"\n- name: IBM WebSphere Portal_header\n  rule: header=\"IBM WebSphere Portal\"\n- name: 畅捷CRM_title\n  rule: title=\"畅捷CRM\"\n- name: Canon-MX410-series_body\n  rule: body=\"nowrap>canon mx410 series</td>\"\n- name: 畅捷CRM_icon_hash\n  rule: icon_hash=\"3226538652\"\n- name: WPB-5000-AP_body\n  rule: body=\"window.location = \\\"./ap/login.html\\\";\"\n- name: IP-Video-embedded-camera_header\n  rule: header=\"basic realm=\\\"camera server\\\"\"\n- name: cakephp_header\n  rule: header=\"CAKEPHP\"\n- name: e-junkie_body\n  rule: body=\"function EJEJC_lc\"\n- name: IWSS-Proxy_header\n  rule: header=\"IWSS\"\n- name: IBM Domino smtpd_header\n  rule: header=\"IBM Domino smtpd\"\n- name: 云时空社会化商业ERP系统_body\n  rule: body=\"img src=\\\"/static/img/yunlogo_home.png\"\n- name: TechBridge云会议_header\n  rule: header=\"TechBridge云会议\"\n- name: TVT NVMS-1000_body\n  rule: body=\"NVMS-1000\"\n- name: 云时空社会化商业ERP系统_title\n  rule: title=\"云时空社会化商业ERP系统\"\n- name: EFM-Networks-ipTIME-A2003NS-MU_body\n  rule: body=\"src=\\\"/images2/login_title.a2003nm.gif\\\"\"\n- name: TP-LINK Wireless WR941ND_header\n  rule: header=\"TP-LINK Wireless WR941ND\"\n- name: ILAS_body\n  rule: body=\"<iframe name=\\\"content\\\"  src=\\\"index_middle.html\\\" frameborder=\\\"auto\"\n    && body=\"<select id=\\\"selprovince\\\"   onchange=\\\"getcity(this.options[this.selectedindex].value\\\">\"\n- name: Micool-Management-System_body\n  rule: body=\"米酷影视 版权所有\" && body=\"name=\\\"keywords\\\" content=\\\"电影,视频大全,在线高清电影,付费电影,免费电影,剧集,电影,在线观看,vip高清电影直播\\\"\"\n    && body=\"bplay.php?play=\"\n- name: InstantCMS_header\n  rule: header=\"InstantCMS\"\n- name: Asterisk_body\n  rule: body=\"asterisk_rawmanPath\"\n- name: Boa-WebServer_header\n  rule: 'header=\"server: boa\"'\n- name: 5iKQ_body\n  rule: body=\"content=\\\"我爱考勤云平台\" && body=\"我爱考勤云平台</span>\" && body=\"<input type=\\\"text\\\"\n    class=\\\"form-control\\\" name=\\\"mobilenumber\\\" value=\\\"\\\" placeholder=\\\"手机号码\\\" />\"\n- name: Hybris_header\n  rule: header=\"Hybris\"\n- name: Eloqua_header\n  rule: header=\"Eloqua\"\n- name: Asterisk_header\n  rule: header=\"Asterisk\"\n- name: hw99-Checking_body\n  rule: body=\"/hwface/script/logincheck.js\"\n- name: Fusemail WEB server_header\n  rule: header=\"Fusemail WEB server\"\n- name: 用友NC_body\n  rule: body=\"logo/images/ufida_nc.png\" && body=\"用友NC\"\n- name: Kerio WinRoute Firewall_header\n  rule: header=\"Kerio WinRoute Firewall\"\n- name: ASUS-RT-AC5300_header\n  rule: header=\"rt-ac5300\"\n- name: ASUS-RT-AC5300_body\n  rule: body=\"<div class=\\\"prod_madelname\\\">rt-ac5300\"\n- name: Intrinsyc-deviceWEB_header\n  rule: header=\"realm=\\\"intrinsyc deviceweb\" && header=\"Intrinsyc deviceWEB\"\n- name: WebSOC知道网站立体监控系统_header\n  rule: header=\"WebSOC知道网站立体监控系统\"\n- name: 安恒玄武盾_header\n  rule: header=\"安恒玄武盾\"\n- name: 新秀文章管理系统_header\n  rule: header=\"新秀文章管理系统\"\n- name: SHARP-XG-C435X_header\n  rule: header=\"realm=\\\"xg-c435x\"\n- name: ActiveHTML_header\n  rule: header=\"activehtml\" && header=\"ActiveHTML\"\n- name: Amazon_icon_hash\n  rule: icon_hash=\"716989053\"\n- name: Dradis-Framework_body\n  rule: body=\"<p class=\\\"copyright\\\">dradis\"\n- name: ZyWALL-USG-50_body\n  rule: body=\"<div class=\\\"model\\\" id=\\\"model\\\" name=\\\"model\\\">zywall usg 50\" && body=\"multi_lingual\"\n    && body=\"model\\\">zywall usg 50\"\n- name: Dradis-Framework_header\n  rule: header=\"_dradis_session=\" && header=\"_dradis_session=\"\n- name: MobileIron MyPhone@Work_header\n  rule: header=\"MobileIron MyPhone@Work\"\n- name: UiN-Meeting_body\n  rule: body=\"uin.plist\"\n- name: Javadoc_header\n  rule: header=\"Javadoc\"\n- name: Tencent-Exmail_body\n  rule: body=\"cgi-bin/getinvestigate?flowid=\" && body=\"cgi-bin/bizmail_portal\" &&\n    body=\"/cgi-bin/getinvestigate?flowid=\" && body=\"/cgi-bin/bizmail_portal\" && body=\"content=\\\"登录腾讯企业邮箱\"\n- name: DVR-Systems-webcam_body\n  rule: body=\"your client does not have permission to get url /index.htm from this\n    server.\\\"\"\n- name: ZLAN_body\n  rule: body=\"href=\\\"http://www.zlmcu.com\\\">zlan\"\n- name: Tencent-Exmail_header\n  rule: header=\"ssl_edition=mail.qq.com\" && header=\"ssl_edition=mail.qq.com\"\n- name: 云业CMS(yunyecms)_body\n  rule: body=\"云业CMS\" && body=\"yunyecms\"\n- name: 云业CMS(yunyecms)_header\n  rule: header=\"云业CMS\" && header=\"yunyecms\"\n- name: Bentley-Systems-ProjectWise_header\n  rule: header=\"bentley.websession=\" && header=\"Bentley.WebSession=\"\n- name: 8cms_body\n  rule: body=\"http://www.itf4.cn\" && body=\"liangjing.org\" && body=\"/tpl/templets\"\n- name: MyfCMS闵益飞内容管理系统_body\n  rule: body=\"MyfCMS闵益飞内容管理系统\"\n- name: NetGear DD-wrt_header\n  rule: header=\"NetGear DD-wrt\"\n- name: Bentley-Systems-ProjectWise_body\n  rule: body=\"href=\\\"projectwise.ico\" && body=\"href=\\\"ProjectWise.ico\"\n- name: TP-LINK Wireless WA7510N_header\n  rule: header=\"TP-LINK Wireless WA7510N\"\n- name: DrayTek-Vigor-Router_body\n  rule: body=\"draytek corp. all rights reserved.\" && body=\"login to the router web\n    configurator\"\n- name: DrayTek-Vigor-Router_header\n  rule: 'header=\"server: vigoraccess web server\" && header=\"realm=\\\"login to the router\n    web configurator\"'\n- name: ALIYUN-RDS-API_body\n  rule: body=\"href=\\\"system!stat.jspa\"\n- name: Apache-Wicket_body\n  rule: body=\"xmlns:wicket=\" && body=\"/org.apache.wicket.\" && body=\"xmlns:wicket=\"\n- name: Mihalism-Multi-Host_body\n  rule: body=\"http://www.mihalism.com/product/mmh/\\\">mihalism multi host\" && body=\"powered\n    by mihalism multi host\" && body=\"content=\\\"mihalism multi host\"\n- name: RAISECOM-ISCOM2608G_body\n  rule: body=\"color=\\\"#000000\\\">iscom2608g\"\n- name: EFM-Networks-ipTIME-A2004R_body\n  rule: body=\"src=\\\"/images2/login_title.a2004r.gif\\\"\"\n- name: Moodle_icon_hash\n  rule: icon_hash=\"-438482901\"\n- name: cnzz_body\n  rule: body=\"cnzz.com/stat.php?id=\"\n- name: Moodle_header\n  rule: header=\"moodlesession=\" && header=\"moodleid_\"\n- name: Moodle_body\n  rule: body=\"title=\\\"moodle\\\" href=\\\"http://moodle.org/\" && body=\"moodle\" && body=\"moodle\\\":\"\n- name: SourceCode-K2_body\n  rule: body=\"document.getelementbyid(\\\"redirectform\\\".action = \\\"../mxworkspace/login.aspx\"\n    && body=\"document.getelementbyid(\\\"redirectform\\\".action = \\\"../workspace/default.aspx\"\n- name: elasticsearch_body\n  rule: body=\"You Know, for Search\"\n- name: Kentico CMS_header\n  rule: header=\"Kentico CMS\"\n- name: SiteServer_body\n  rule: body=\"http://www.siteserver.cn\" && body=\"siteserver cms\" && body=\"http://www.siteserver.cn\"\n    && body=\"T_系统首页模板\"\n- name: NETGEAR DM111P_header\n  rule: header=\"NETGEAR DM111P\"\n- name: SCALANCE W_header\n  rule: header=\"SCALANCE W\"\n- name: TP-LINK R478_header\n  rule: header=\"TP-LINK R478\"\n- name: MyWebsite_header\n  rule: header=\"MyWebsite\"\n- name: Aisino-Telecom_body\n  rule: body=\"<font class=\\\"bottomfont\\\">航天信息股份有限公司 电信行业版\"\n- name: NETGEAR MBR1515_header\n  rule: header=\"NETGEAR MBR1515\"\n- name: Axway-SecureTransport_header\n  rule: header=\"securetransport\" && header=\"SecureTransport\"\n- name: Textcube_header\n  rule: header=\"Textcube\"\n- name: Netposa-Company's-product_body\n  rule: 'body=\"<h1>万解 - 东方网力: </h1>\" && body=\"<span class=\\\"copyright\\\">东方网力科技股份有限公司\"\n    && body=\"<a href=\\\"http://www.netposa.com/\\\">关于我们</a>\" && body=\"<span class=\\\"big\\\">东方网力科技股份有限公司\"'\n- name: DIGI-TransPort-WR11_body\n  rule: body=\"class=\\\"heading\\\">transport wr11\"\n- name: JianHengXinAn-JH-LAS_body\n  rule: body=\"jh-la3600\" && body=\"建恒信安日志审计系统\"\n- name: UC-FAX_body\n  rule: body=\" href=\\\"web/css/faxcss.css\\\"\" && body=\"src=\\\"web/img/log/logo-faxlogin.gif\\\"\"\n- name: DevelopWay DW CMS_header\n  rule: header=\"DevelopWay DW CMS\"\n- name: TP-LINK Wireless WR641G/642G_header\n  rule: header=\"TP-LINK Wireless WR641G/642G\"\n- name: DLink-Internet-Camera_header\n  rule: header=\"d-link internet camera\"\n- name: NETGEAR DGN3500B_header\n  rule: header=\"NETGEAR DGN3500B\"\n- name: itenable_body\n  rule: body=\"/enableq.css\" && body=\"js/checkquestion.js.php\" && body=\"/images/enableq.ico\"\n- name: Npoint_body\n  rule: body=\"content=\\\"n点虚拟主机管理系统\" && body=\"js/ajax_x.js\" && body=\"/inc/usercode.asp?npoint=\"\n- name: 天源迪科和动力优品馆管理平台_header\n  rule: header=\"天源迪科和动力优品馆管理平台\"\n- name: Apache-Guacamole_body\n  rule: body=\"images/guacamole-logo\" && body=\"guacamole - clientless remote desktop\"\n    && body=\"scripts/guac-ui.js\"\n- name: zychr-CMS_body\n  rule: body=\"powered by zychr.com\"\n- name: 中国期刊先知网_body\n  rule: body=\"本系统由<span class=\\\"STYLE1\\\" ><a href=\\\"http://www.firstknow.cn\" && body=\"<img\n    src=\\\"images/logoknow.png\\\"\"\n- name: TP-LINK Wireless WR2543ND_header\n  rule: header=\"TP-LINK Wireless WR2543ND\"\n- name: BOSCH-DIVAR-IP_body\n  rule: body=\"vrmchunk.sethelpname('vrm_monitor'\" && body=\"the requested url '/' was\n    not found on the divar\"\n- name: IBM-Internet-Connection-Server_header\n  rule: 'header=\"server: ibm internet connection server\" && header=\"IBM Internet Connection\n    Server\"'\n- name: Salesforce Commerce Cloud_header\n  rule: header=\"Salesforce Commerce Cloud\"\n- name: Siemens-Juicer_header\n  rule: header=\"basic realm=\\\"mes3500\"\n- name: Surgemail_header\n  rule: header=\"Surgemail\"\n- name: 景腾cms_header\n  rule: header=\"景腾cms\"\n- name: ostec-firebox_body\n  rule: 'body=\"background-image: url(''/icones/fundo_firebox.png''\" && body=\"http://colorzilla.com/\"'\n- name: Virata EmWeb_header\n  rule: header=\"Virata EmWeb\"\n- name: NVS3000综合视频监控平台_body\n  rule: body=\"视频监控\" && body=\"NVS3000综合\" && body=\"login\"\n- name: Byzoro-Security-gateway_body\n  rule: body=\"&nbsp;patrolflow 多业务安全网关\"\n- name: XETUX_body\n  rule: body=\"<title>@XETUX - XPOS / BackEnd</title>\"\n- name: DELL-PowerEdge-T430_header\n  rule: header=\"poweredge-t430\"\n- name: MULTIABNLE-M18_body\n  rule: body=\"<label>打开m18 app， 扫描二维码</label>\"\n- name: DELL-PowerEdge-T430_body\n  rule: body=\"https://user-poweredge-t430:10000\"\n- name: H3C公司产品_body\n  rule: body=\"service@h3c.com\" && body=\"H3C Corporation\" && body=\"icg_helpScript.js\"\n- name: GlobalSign-Cert_body\n  rule: body=\"//seal.globalsign.com/siteseal\"\n- name: Cisco-IronPort_header\n  rule: header=\"cisco ironport\"\n- name: East-Simulation-Account_body\n  rule: body=\"src=\\\"/scripts/eastsimutility.js\\\"\"\n- name: CPPLUS-DVR_header\n  rule: 'header=\"p3p: cp=cao psa our\"'\n- name: LG-43UM7100PLB_body\n  rule: body=\"<modelnumber>43um7100plb</modelnumber>\"\n- name: CodeMirror_header\n  rule: header=\"CodeMirror\"\n- name: MAiPU-MP1800X-50_body\n  rule: body=\"/assets/css/ui-dialog.css\" && body=\"/form/formuserlogin\"\n- name: Finecms_body\n  rule: body=\"content=\\\"FineCMS\"\n- name: ZEVENET-Load-Balance_header\n  rule: header=\"realm=\\\"zen load balancer\"\n- name: 慧林信息安全管理系统_body\n  rule: body=\"用户管理登录\" && body=\"login\" && body=\"images/zh-CN/login_03.gif\"\n- name: chinte-Monitoring_body\n  rule: body=\"src=\\\"images/logo/logo40.png\\\"\"\n- name: Solvonet Device (VoIP)_header\n  rule: header=\"Basic realm=\\\"SOLVONET\\\"\"\n- name: Kerio-WebSTAR_header\n  rule: 'header=\"server: kerio_webstar\" && header=\"4d_webstar\" && header=\"Kerio_WebSTAR\"\n    && header=\"WebSTAR\" && header=\"4D_WebStar\"'\n- name: IDS WEBCAM_header\n  rule: header=\"IDS WEBCAM\"\n- name: ZKECO_header\n  rule: header=\"ZKECO\"\n- name: PHPMyWind_body\n  rule: body=\"phpmywind.com all rights reserved\" && body=\"content=\\\"phpmywind\" &&\n    body=\"phpMyWind.com All Rights Reserved\" && body=\"content=\\\"PHPMyWind\" && body=\"PHPMyWind\"\n- name: Linksys-gateway_header\n  rule: header=\"realm=\\\"linksys gateway\"\n- name: CSmail_body\n  rule: body=\"<frame src=\\\"/mainframe_zh-cn.html\\\" />\"\n- name: VNC-Enterprise-_header\n  rule: 'header=\"server: vnc server enterprise edition\"'\n- name: CSmail_header\n  rule: header=\"CSmail\"\n- name: MathJax_header\n  rule: header=\"MathJax\"\n- name: ewei-Plagform_body\n  rule: body=\"易维平台</h1>\"\n- name: reolink-NVR_body\n  rule: body=\"<a id=\\\"preview_play_balancestream\\\">balanced\"\n- name: Jakarta-Project_body\n  rule: body=\"alt=\\\"the jakarta project\" && body=\"<a href=\\\"http://jakarta.apache.org/\\\">\"\n- name: ownCloud_icon_hash\n  rule: icon_hash=\"-1616115760\"\n- name: ownCloud_header\n  rule: header=\"ownCloud\"\n- name: Uniview-VM8500_body\n  rule: body=\"vm8500-imos110\"\n- name: CancoSoft-asset-Management_body\n  rule: body=\"var path = \\\"/cassets\\\";\"\n- name: Honeywell-Intermec-EasyLAN_body\n  rule: body=\"color=\\\"black\\\" size=\\\"5\\\">intermec easylan\"\n- name: Honeywell-Intermec-EasyLAN_header\n  rule: 'header=\"server: xcd webadmin\"'\n- name: eyoucms_body\n  rule: body=\"powered by eyoucms\" && body=\"name=\\\"generator\\\" content=\\\"eyoucms\"\n- name: NetPort_header\n  rule: 'header=\"server: netport software\" && header=\"power by netport\"'\n- name: ZyXEL-Keenetic_header\n  rule: header=\"realm=\\\"zyxel keenetic\"\n- name: IBM-Watchfire_header\n  rule: 'header=\"set-cookie: watchfiresessionid\"'\n- name: ICEFLOW VPN Router_title\n  rule: title=\"ICEFLOW VPN Router\"\n- name: TP-LINK R470T+_header\n  rule: header=\"TP-LINK R470T+\"\n- name: Dahua_icon_hash\n  rule: icon_hash=\"2828182062\"\n- name: Yii-Framework_body\n  rule: body=\"get started with yii\"\n- name: pcitc-SSLVPN_body\n  rule: body=\"src=\\\"new_style/placeholderfriend.js\\\"\"\n- name: Moxa_NPort_5150A_body\n  rule: body=\"5150A\"\n- name: Linksys LCAM0336OD_header\n  rule: header=\"Linksys LCAM0336OD\"\n- name: Yii-Framework_header\n  rule: header=\"yii_csrf_token\"\n- name: TurboMail 邮件系统_body\n  rule: body=\"TurboMail\" && body=\"mailmain?type=login\"\n- name: 锐捷交换机-睿易_body\n  rule: body=\"cgi-bin/luci\" && body=\"#f47f3e\"\n- name: 西部数码CDN_header\n  rule: header=\"西部数码CDN\"\n- name: DELL-N1148T-ON_body\n  rule: body=\"class=\\\"login_server_default\\\">n1148t-on\"\n- name: SonicWALL-Company's-product_header\n  rule: 'header=\"server: sonicwall\"'\n- name: TRSMAS_header\n  rule: header=\"X-Mas-Server\"\n- name: Moxa_NPort_5150A_header\n  rule: header=\"MoxaHttp\"\n- name: SumoMe_header\n  rule: header=\"SumoMe\"\n- name: Linksys WRV54G_header\n  rule: header=\"Linksys WRV54G\"\n- name: 任子行 任天行网络安全管理系统_header\n  rule: header=\"任子行 任天行网络安全管理系统\"\n- name: 360-TianQing_body\n  rule: body=\"/task/index/detail?id={item.id}\" && body=\"已过期或者未授权，购买请联系4008-136-360\"\n- name: Bicesoft-Super-Custom-Survey-Voting-System_body\n  rule: body=\"href=\\\"images/bicesoft.css\\\"\" && body=\"佰思超强自定义问卷调查系统(bicesoft.com\"\n- name: Yzncms内容管理系统_header\n  rule: header=\"Yzncms内容管理系统\"\n- name: Yoast SEO_header\n  rule: header=\"Yoast SEO\"\n- name: etungtech-routers_body\n  rule: body=\"cgi-bin/cgibox.cgi\" && body=\"./img/logo.jpg\"\n- name: Apache-Airflow_body\n  rule: body=\"src=\\\"/static/pin_100.png\\\"\" && body=\"<span>airflow</span>\"\n- name: FNET HTTP - Freescale Embedded Web Server_header\n  rule: header=\"FNET HTTP - Freescale Embedded Web Server\"\n- name: Kerio-WinRout-Firewall_body\n  rule: body=\"style/bodynonauth.css\" && body=\"/gfx/kerio_logo.gif\"\n- name: NETGEAR DGN2000B_header\n  rule: header=\"NETGEAR DGN2000B\"\n- name: Tenon-iTools_header\n  rule: header=\"itools\" && header=\"mac os x\"\n- name: 乔客建站专家_Joekoe_CMS_body\n  rule: body=\"乔客建站专家_Joekoe_CMS\"\n- name: WEONLYDO-Product_header\n  rule: 'header=\"server: weonlydo\"'\n- name: Kerio-WinRout-Firewall_header\n  rule: header=\"kerio winroute firewall\"\n- name: Ruckus Wireless Router_header\n  rule: header=\"Ruckus Wireless Router\"\n- name: 博库 医院在线考试系统_header\n  rule: header=\"博库 医院在线考试系统\"\n- name: Sonatype Nexus Repository Manager_icon_hash\n  rule: icon_hash=\"-1546574541\"\n- name: Ajenti-Server-Admin-Panel_body\n  rule: body=\"src=\\\"/ajenti:static/\" && body=\"action=\\\"/ajenti:auth\\\"\"\n- name: Hanwha-SRN-K3470S_body\n  rule: body=\"$.nvr.model_name=\\\"srn-k3470s\\\"\"\n- name: Plesk 面板_icon_hash\n  rule: icon_hash=\"4160592263\"\n- name: CISCO-M680_body\n  rule: body=\"alt=\\\"cisco m680\\\"\"\n- name: USP-Secure-Entry-Server_header\n  rule: header=\"secure entry server\"\n- name: dayrui系列产品_body\n  rule: body=\"dayrui/statics\"\n- name: ZoneMinder_body\n  rule: body=\"zoneminder login\" && body=\"ZoneMinder Login\"\n- name: dayrui系列产品_header\n  rule: header=\"dr_ci_session\"\n- name: Linksys-MIR_header\n  rule: header=\"Linksys-MIR\"\n- name: JSEcoin_header\n  rule: header=\"JSEcoin\"\n- name: Doyo建站系统_header\n  rule: header=\"Doyo建站系统\"\n- name: NSFOCUS VPN_header\n  rule: header=\"NSFOCUS VPN\"\n- name: 汉得SRM_title\n  rule: title=\"汉得SRM云平台\"\n- name: Angular IO (AngularJS)_icon_hash\n  rule: icon_hash=\"3039619512\"\n- name: Sitellite_header\n  rule: header=\"Sitellite\"\n- name: Novell-iChain_body\n  rule: body=\"src=\\\"ichainerrors/alertbar.gif\"\n- name: SOPHOS-UTM220_body\n  rule: body=\"var own_status\"\n- name: TRENDnet-TV-IP312PI_header\n  rule: header=\"realm=\\\"tv-ip312pi\"\n- name: Deluge_icon_hash\n  rule: icon_hash=\"944969688\"\n- name: WLCMS_body\n  rule: body=\"WLCMS\"\n- name: NETCORE NR238_header\n  rule: header=\"NETCORE NR238\"\n- name: EFM-Networks-ipTIME-N704M_body\n  rule: body=\"src =\\\"/images2/login_title.n704m.gif\\\"\" && body=\"src =\\\"/images2/login_title.n704mlg.gif\\\"\"\n- name: Novell-iChain_header\n  rule: header=\"host name received is not for this web site\"\n- name: MagicMail_body\n  rule: body=\"/aboutus/magicmail.gif\"\n- name: TP-LINK Wireless WR702N_header\n  rule: header=\"TP-LINK Wireless WR702N\"\n- name: Pimcore_header\n  rule: header=\"Pimcore\"\n- name: Sophos-Cyberoam-Product_body\n  rule: body=\"href=\\\"http://www.cyberoam.com\\\" target=\\\"_blank\\\">www.cyberoam.com\"\n- name: NETCORE-NAC_body\n  rule: body=\"script/netcore.js\" && body=\"./script/logic.js\" && body=\"netis\"\n- name: ifw8-Router_body\n  rule: body=\"/index.htm?page=\" && body=\"images/login-logo.png\" && body=\"www.ifw8.cn\"\n- name: Pc4Uploader_body\n  rule: body=\"powered by pc4uploader\" && body=\"pc4uploader <font color\"\n- name: TP-LINK-Wireless-Router_header\n  rule: header=\"tp-link\" && header=\"wireless\"\n- name: SupeSite_header\n  rule: header=\"supe_sid\"\n- name: UMEye-webcam_body\n  rule: body=\"name=\\\"utbd_v\\\"\"\n- name: TradeRenCRM_body\n  rule: body=\"emlsoft\"\n- name: Yonyou-OA_body\n  rule: body=\"url[(]/images/logon/bg_login.jpg[] repeat-x top\"\n- name: 科迅数字化校园综合管理系统_header\n  rule: header=\"科迅数字化校园综合管理系统\"\n- name: 'Websockets test page (eg: port 5900)_icon_hash'\n  rule: icon_hash=\"-291579889\"\n- name: kamailio-sip-server_header\n  rule: 'header=\"server: kamailio\"'\n- name: JumpServer 堡垒机_icon_hash\n  rule: icon_hash=\"3132337272\"\n- name: VTS-CMS_body\n  rule: body=\"errmag\"\n- name: adikiss ASIK_header\n  rule: header=\"adikiss ASIK\"\n- name: CentOS_header\n  rule: header=\"centos\"\n- name: NetComm-Wireless-Route_body\n  rule: body=\"powered by netcomm\"\n- name: ewebeditor_body\n  rule: body=\"/ewebeditor.htm?\"\n- name: 金合OA_body\n  rule: body=\"Jhsoft.Web.login\" && body=\"PassWord.aspx\"\n- name: PowerLogic_ION_header\n  rule: header=\"Allegro-Software-RomPager\"\n- name: Firefox-Spdy_header\n  rule: header=\"X-Firefox-Spdy\"\n- name: Pinterest_header\n  rule: header=\"Pinterest\"\n- name: 3CX Phone System_icon_hash\n  rule: icon_hash=\"970132176\"\n- name: greencms_header\n  rule: 'header=\"x-powered-by: greencms\"'\n- name: Php-MultiShop_header\n  rule: header=\"Php-MultiShop\"\n- name: Blogger_body\n  rule: body=\"content='blogger\" && body=\"powered by blogger\"\n- name: YIXUNCMS网站建设系统_header\n  rule: header=\"YIXUNCMS网站建设系统\"\n- name: MS-MFC-HttpSvr_body\n  rule: body=\"action=\\\"i.cgi\"\n- name: TamronOS IPTV系统_body\n  rule: body=\"TamronOS\" && body=\"loginbox\" && body=\"tamronos.com\"\n- name: 蓝凌OA(EKP)_body\n  rule: body=\"蓝凌OA\" && body=\"EKP\"\n- name: Linksys Router_header\n  rule: header=\"Linksys Router\"\n- name: Weglot_header\n  rule: header=\"Weglot\"\n- name: 大华城市安防监控系统平台管理_body\n  rule: body=\"attachment_downloadByUrlAtt.action\"\n- name: Timelink_header\n  rule: header=\"Timelink\"\n- name: AdviserLogicCli_body\n  rule: body=\"navigator.serviceworker.register('/adviserlogiccache.js'\"\n- name: iScripts-ReserveLogic_body\n  rule: body=\"powered by <a href=\\\"http://www.iscripts.com/reservelogic/\" && body=\"Powered\n    by <a href=\\\"http://www.iscripts.com/reservelogic/\"\n- name: Siemens-SCALANCE-M875_header\n  rule: header=\"realm=\\\"scalance m875\"\n- name: Rocket Chat_icon_hash\n  rule: icon_hash=\"225632504\"\n- name: Startbbs_header\n  rule: header=\"stb_csrf_cookie\" && header=\"stb_csrf_cookie\"\n- name: Startbbs_body\n  rule: body=\"content=\\\"Startbbs\"\n- name: ARRIS-Touchstone-Router_body\n  rule: body=\"/arris_style.css\"\n- name: SmartSite_header\n  rule: header=\"SmartSite\"\n- name: CoinHive Captcha_header\n  rule: header=\"CoinHive Captcha\"\n- name: DoubleClick for Publishers (DFP)_header\n  rule: header=\"DoubleClick for Publishers (DFP)\"\n- name: Visualware MyConnection Server BusinessCenter_header\n  rule: header=\"Visualware MyConnection Server BusinessCenter\"\n- name: Adobe-CQ5_body\n  rule: body=\"_jcr_content\"\n- name: WPS 部署可视化平台_title\n  rule: title=\"WPS 部署可视化平台\"\n- name: Cherokee_header\n  rule: 'header=\"server: cherokee\" && header=\"Cherokee\"'\n- name: MoinMoin_header\n  rule: header=\"MoinMoin\"\n- name: Cafe24 (Korea)_icon_hash\n  rule: icon_hash=\"1251810433\"\n- name: epygi-QX200_body\n  rule: body=\"epygi        <span class=\\\"product-name\\\">qx200\"\n- name: FITELnet-Router_header\n  rule: 'header=\"server: gr-httpd server\" && header=\"GR-HTTPD Server\"'\n- name: Canon-MX720-series_body\n  rule: body=\"nowrap>canon mx720 series</td>\"\n- name: naxsi_header\n  rule: 'header=\"x-data-origin: naxsi\"'\n- name: TP-LINK-Wireless-Router_body\n  rule: body=\"javascript:gourl('http://www.tp-link.com.cn';\"\n- name: Runda-Supervisory-Platform_body\n  rule: body=\"class=\\\"log_rbox\\\"\"\n- name: OpenVPN_icon_hash\n  rule: icon_hash=\"396533629\"\n- name: ZmCMS通用性企业网站建设管理系统_body\n  rule: body=\"ZmCMS通用性企业网站建设管理系统\"\n- name: Cisco ACE_header\n  rule: header=\"ACE XML Gateway\"\n- name: OpenVPN_header\n  rule: header=\"realm=\\\"openvpn\"\n- name: NETGEAR MBR1210_header\n  rule: header=\"NETGEAR MBR1210\"\n- name: FLIR AX8_header\n  rule: header=\"FLIR AX8\"\n- name: EnGenius-Switch_body\n  rule: body=\"conner_basic conner_gdl\"\n- name: NETGEAR C3000-100NAS_header\n  rule: header=\"NETGEAR C3000-100NAS\"\n- name: WebRAY Web应用防护系统_header\n  rule: header=\"WebRAY Web应用防护系统\"\n- name: IBM-Chassis-management_body\n  rule: body=\",\\\"chassis_name\\\":\"\n- name: fengcms_body\n  rule: body=\"Powered by FengCms\" && body=\"content=\\\"FengCms\"\n- name: Advanced Electron Forum_header\n  rule: header=\"aefsid\"\n- name: fluentd_header\n  rule: header=\"fluentd\"\n- name: Netsys_header\n  rule: header=\"Netsys\"\n- name: CISCO-Prime-Network-Registrar_body\n  rule: body=\"productname=\\\"network registrar\"\n- name: D_Link-DSR-150_body\n  rule: 'body=\"<div class=\\\"floatl txt01\\\">product page: dsr-150\" && body=\"unified\n    services router - dsr-150 </div>\"'\n- name: TP-LINK Wireless G WR340G_header\n  rule: header=\"TP-LINK Wireless G WR340G\"\n- name: Volusion_header\n  rule: header=\"Volusion\"\n- name: Tiger-IP-Connect_header\n  rule: header=\"location network/index.php\"\n- name: Vivotek (Camera)_icon_hash\n  rule: icon_hash=\"-1654229048\"\n- name: Linksys gateway_header\n  rule: header=\"Linksys gateway\"\n- name: InteractiveVirtualShipDisplaySystem_body\n  rule: body=\"交互式虚拟船舶展示系统</a>\"\n- name: YzmCMS_body\n  rule: body=\"YzmCMS\" && body=\"yzm-common.css\"\n- name: PHP-Live_body\n  rule: body=\"powered by <a href='http://www.phplivesupport.com/\"\n- name: Banggoo-ADC_body\n  rule: body=\"content=\\\"banggoo adc \" && body=\"欢迎登录banggoo adc管理界面</div>\"\n- name: YzmCMS_header\n  rule: header=\"YzmCMS\"\n- name: 深信服 waf_body\n  rule: body=\"rsa.js\" && body=\"commonFunction.js\"\n- name: 国泰君安移动终端管理系统_header\n  rule: header=\"国泰君安移动终端管理系统\"\n- name: 厦门快普_body\n  rule: body=\"jKPM6\" && body=\"WebResource.axd\"\n- name: Fortinet-sslvpn_body\n  rule: body=\"/sslvpn/portal.html\"\n- name: Communication-Service-Management-System_body\n  rule: body=\"苏州优亚利电子科技有限公司\"\n- name: Linksys WRT54GP2_header\n  rule: header=\"Linksys WRT54GP2\"\n- name: Moxa AWK_header\n  rule: header=\"Moxa AWK\"\n- name: V2视频会议_header\n  rule: header=\"V2视频会议\"\n- name: ec_cart_header\n  rule: header=\"ec_cart_id\"\n- name: Vigor Router_icon_hash\n  rule: icon_hash=\"104189364\"\n- name: FortiWifi_header\n  rule: header=\"fortiwifi\" && header=\"FortiWifi\"\n- name: IBM-Flex-System-EN2092_body\n  rule: body=\"ibm flex system en2092\"\n- name: Isunor-Order-Management-System_body\n  rule: body=\"var c_name = 'jsessionid';\"\n- name: Reliance-4-Control-Server_header\n  rule: header=\"realm=\\\"reliance 4 control server\"\n- name: Cont Web CMS_header\n  rule: header=\"Cont Web CMS\"\n- name: BigDump_body\n  rule: 'body=\"bigdump: staggered mysql dump importer\" && body=\"BigDump: Staggered\n    MySQL Dump Importer\"'\n- name: Tiger-IP-Connect_body\n  rule: body=\"<link rel=\\\"stylesheet\\\" href=\\\"/include/firedigit.css\\\">\" && body=\"<link\n    rel=\\\"stylesheet\\\" href=\\\"/include/tms.css\\\">\" && body=\"/include/tiger.css\"\n- name: Windows-Business-Server_body\n  rule: body=\"src=\\\"images/sbslogo.gif\" && body=\"href=\\\"/remote\\\">remote web workplace\"\n- name: 任我行CRM_body\n  rule: body=\"CRM_LASTLOGINUSERKEY\"\n- name: Usabilla_header\n  rule: header=\"Usabilla\"\n- name: F5_BIGIP_header\n  rule: header=\"BIGipServer\" && header=\"X-WA-Info\" && header=\"X-PvInfo\"\n- name: BEWARD N100 H.264_header\n  rule: header=\"BEWARD N100 H.264\"\n- name: Cable/DSL-Router_header\n  rule: header=\"realm=\\\"cable/dsl router\"\n- name: 用友GRP-U8(财务系统)_header\n  rule: header=\"用友GRP-U8(财务系统)\"\n- name: Cloodie-HIS_body\n  rule: body=\"src=\\\"/design/common/his.logo.white.svg\\\" alt=\\\"his logo\" && body=\"href=\\\"/design/design/cloodie.css\"\n- name: influxdata-InfluxDB_body\n  rule: body=\"class=\\\"influxdb-version\\\"\"\n- name: Ranzhi-OA_body\n  rule: body=\"/sys/index.php?m=user&f=login&referer=\"\n- name: FEX_header\n  rule: 'header=\"server: fexsrv\" && header=\"fexsrv\"'\n- name: NETGEAR VVG2000_header\n  rule: header=\"NETGEAR VVG2000\"\n- name: FEX_body\n  rule: body=\"href=\\\"mailto:fexmaster@ostc.de\" && body=\"HREF=\\\"mailto:fexmaster@ostc.de\"\n- name: Storeden_header\n  rule: header=\"Storeden\"\n- name: Docker_icon_hash\n  rule: icon_hash=\"1937209448\"\n- name: Docker_header\n  rule: 'header=\"x-docker-registry-version\" && header=\"x-docker-container: nginx\"'\n- name: WebCache_header\n  rule: header=\"WebCache\"\n- name: PCITC-Cameras-and-Surveillance_body\n  rule: body=\"images/slider/banner-gis.png\"\n- name: Univention Portal_icon_hash\n  rule: icon_hash=\"-1697334194\"\n- name: MediPro乡镇政府门户网站系统_body\n  rule: body=\"MediPro乡镇政府门户网站系统\"\n- name: Ruijie-WiFi_body\n  rule: body=\"var apmainpage = 'ap/main.htm\"\n- name: amazon-cloudfront_header\n  rule: header=\"X-Amz-Cf-Id\"\n- name: ADT-IAM_body\n  rule: body=\"content=\\\"tpn,vpn,内网安全,内网控制,主机防护\\\"\"\n- name: EFM-Networks-ipTIME-N2E_body\n  rule: body=\"src =\\\"/images2/login_title.n2e.gif\\\"\"\n- name: Bit-Service_body\n  rule: body=\"xmlpzs/webissue.asp\"\n- name: 方卡在线(Isite)_body\n  rule: body=\"方卡在线\" && body=\"Isite\"\n- name: Hikvision-Video-retrieval_body\n  rule: body=\"海康威视\"\n- name: 大米CMS_body\n  rule: body=\"content=\\\"damicms\" && body=\"content=\\\"大米CMS\"\n- name: PHP-Layers_body\n  rule: body=\"alt=\\\"powered by php layers menu\" && body=\"<!-- end of menu header -\n    php layers menu\" && body=\"<!-- beginning of menu header - php layers menu\"\n- name: GoDaddy Website Builder_header\n  rule: header=\"GoDaddy Website Builder\"\n- name: Siemens-syngo.via_body\n  rule: body=\"class=\\\"backgr\\\" src=\\\"syngo-installation_1024x768.png\"\n- name: Sundray-Firewall_body\n  rule: body=\"help = decodeuricomponent(version_info_ch\"\n- name: Linksys E900_header\n  rule: header=\"Linksys E900\"\n- name: TaskFreak_body\n  rule: body=\"<a href=\\\"http://www.taskfreak.com\\\">taskfreak\"\n- name: tiki-Wiki-CMS_body\n  rule: body=\"jquerytiki = new object\"\n- name: FOXI BIZzz_header\n  rule: header=\"X-Powered-Cms:FOXI BIZzz\"\n- name: 发货100_body\n  rule: body=\"Web Configurator\" && body=\"Powered by 发货100\" && body=\"发货100-虚拟商品自动发货系统\"\n    && body=\"虚拟商品,自动发货,在线支付,付费阅读\"\n- name: Anetwork_header\n  rule: header=\"Anetwork\"\n- name: 网钛文章管理系统_OTCMS_header\n  rule: header=\"网钛文章管理系统_OTCMS\"\n- name: Waterford Server_header\n  rule: header=\"Waterford Server\"\n- name: NETGEAR WGR614SS_header\n  rule: header=\"NETGEAR WGR614SS\"\n- name: PiAware-Skyview_body\n  rule: body=\"alt=\\\"piaware skyview\\\"\"\n- name: Hua-EchoLife-Home-Gateway_header\n  rule: header=\"realm=\\\"echolife home gateway\" && header=\"realm=\\\"echolife hg520s\"\n- name: PulseSecure-SSL-VPN_body\n  rule: body=\"<b>pulse connect secure</b>\"\n- name: 用友TurboCRM_header\n  rule: header=\"用友TurboCRM\"\n- name: OPENDAYLIGHT-Product_body\n  rule: body=\"j_security_check\"\n- name: Linksys WRT600_header\n  rule: header=\"Linksys WRT600\"\n- name: Linksys-Huelva-3-Telepalma_header\n  rule: header=\"Linksys-Huelva-3-Telepalma\"\n- name: Tab-and-Link-Manager_body\n  rule: body=\"<div id=\\\"footer_copyright\\\" class=\\\"shade footer_copyright\\\">powered\n    by <a href=\\\"http://www.wolfshead-solutions.com/ws-products/product-1\"\n- name: TP-LINK Wireless WR740N_header\n  rule: header=\"TP-LINK Wireless WR740N\"\n- name: UPC Ceska Republica (Network)_icon_hash\n  rule: icon_hash=\"1911253822\"\n- name: VOS-VOS2009_body\n  rule: body=\"content=\\\"vos2009, voip, voip运营支撑系统, 软交换\\\"\"\n- name: Centreon_body\n  rule: body=\"generator\\\" content=\\\"centreon - copyright\" && body=\"Generator\\\" content=\\\"Centreon\n    - Copyright\"\n- name: Phpaacms_header\n  rule: header=\"Phpaacms\"\n- name: Cnoa-OA_body\n  rule: body=\"powered by 协众oa\" && body=\"admin@cnoa.cn\" && body=\"powered by cnoa.cn\"\n- name: WebRTU z2_header\n  rule: header=\"WebRTU z2\"\n- name: Ultimate-Bulletin-Board_body\n  rule: body=\"<meta name=\\\"generator\\\" content=\\\"ubb.threads\" && body=\"<a href=\\\"http://www.groupee.com/landing/goto.php?a=ubb.classic\\\">powered\n    by ubb.classic&trade\"\n- name: ISP Manager (Web Hosting Panel)_icon_hash\n  rule: icon_hash=\"-1151675028\"\n- name: Kieback＆Peter DDC_header\n  rule: header=\"Kieback＆Peter DDC\"\n- name: unknown_cms_header\n  rule: header=\"Requestsuccess4ajax\"\n- name: Cisco Linksys WVC80N_header\n  rule: header=\"Cisco Linksys WVC80N\"\n- name: Simbel_header\n  rule: header=\"Simbel\"\n- name: zcncms网站管理系统_header\n  rule: header=\"zcncms网站管理系统\"\n- name: 狂雨小说CMS(KYXSCMS)_body\n  rule: body=\"狂雨小说CMS\" && body=\"KYXSCMS\"\n- name: SanDu-OA_body\n  rule: body=\"青岛叁度信息技术有限公司\"\n- name: 睿博士云办公系统_body\n  rule: body=\"/studentSign/toLogin.di\" && body=\"/user/toUpdatePasswordPage.di\"\n- name: TP-LINK Wireless WR843ND_header\n  rule: header=\"TP-LINK Wireless WR843ND\"\n- name: 狂雨小说CMS(KYXSCMS)_header\n  rule: header=\"狂雨小说CMS\" && header=\"KYXSCMS\"\n- name: fang5173_body\n  rule: body=\"xWin\"\n- name: THUS-plc_body\n  rule: body=\"copyright (c 2003 thus plc\" && body=\"<img src=\\\"thuslogo.gif\\\" width=\"\n- name: Trustwave WebMarshal Proxy_header\n  rule: header=\"Trustwave WebMarshal Proxy\"\n- name: Tandberg Television Web server_header\n  rule: header=\"Tandberg Television Web server\"\n- name: dossm_body\n  rule: body=\"Dossm Global\"\n- name: 35企业邮箱系统_icon_hash\n  rule: icon_hash=\"1676919780\"\n- name: ZyXEL-ES-2108_header\n  rule: header=\"realm=\\\"es-2108\"\n- name: HCL-sametime_body\n  rule: body=\"href=\\\"/chat/sametime192x192.png\"\n- name: Pivot_body\n  rule: body=\"powered bypivot\" && body=\"href=\\\"http://www.pivotlog.net/?ver=pivot\"\n- name: 好视通云会议 FastMeeting_header\n  rule: header=\"好视通云会议 FastMeeting\"\n- name: 宝塔-BT.cn_icon_hash\n  rule: icon_hash=\"3908778213\"\n- name: DELL-N1524P_body\n  rule: body=\"class=\\\"login_server_default\\\">n1524p\"\n- name: LG-55UK6300PLB_body\n  rule: body=\"<modelnumber>55uk6300plb</modelnumber>\"\n- name: H3C-ER5200_header\n  rule: header=\"h3c er5200\"\n- name: Fat-FreeFramework_header\n  rule: header=\"fat-free framework\" && header=\"Fat-Free Framework\"\n- name: paraview-UAMS_body\n  rule: body=\"<!-- <title>派拉统一身份管理系统</title> -->\"\n- name: 宝塔-BT.cn_body\n  rule: body=\"入口校验失败\" && body=\"没有找到站点\" && body=\"可能原因\" && body=\"CDN产品\" && body=\"Web服务\"\n    && body=\"检查端口是否正确\" && body=\"<title>恭喜，站点创建成功\" && body=\"面板系统后台\" && body=\"系统自动生成\"\n    && body=\"扫码登录更安全\" && body=\"bt.cn\" && body=\"/login\" && body=\"站点创建成功\" && body=\"bt.cn\"\n    && body=\"站点创建成功\" && body=\"宝塔\" && body=\"宝塔Linux面板\"\n- name: WebSideStory_body\n  rule: body=\"http://websidestory.com\" && body=\"websidestory code\" && body=\"websidestory,inc.\n    all rights reserved. u.s.patent no. 6,393,479b1\" && body=\"<!-- websidestory html\n    for search -->\"\n- name: 奕桦网上商城YiiWaShopFree_header\n  rule: header=\"奕桦网上商城YiiWaShopFree\"\n- name: 网动云视讯平台_body\n  rule: body=\"/js/roomHeight.js\" && body=\"meetingShow!show.action\"\n- name: Bubble_header\n  rule: header=\"Bubble\"\n- name: Surfilter-SURFNX-Security-Gateway_body\n  rule: body=\"internal/templates/surfilter/images/logo_big.png\" && body=\"/internal/templates/surfilter/css/\"\n- name: 皓峰防火墙_header\n  rule: header=\"皓峰防火墙\"\n- name: 若依_body\n  rule: body=\"ruoyi\" && body=\"若依\" && body=\"login\"\n- name: TP-LINK R4238_header\n  rule: header=\"TP-LINK R4238\"\n- name: axTLS-Embad-Httpd_header\n  rule: 'header=\"server: axhttpd\"'\n- name: 皓峰防火墙_title\n  rule: title=\"皓峰防火墙系统登录\"\n- name: Hisense-Business-Management-Platform_body\n  rule: body=\"src=\\\"up.jpg\\\"\" && body=\"src=\\\"left.jpg\\\"\"\n- name: Bandwidth-Management-Gateway_header\n  rule: header=\"realm=\\\"bandwidth management gateway \"\n- name: Pharos-LPC_header\n  rule: header=\"realm=\\\"pharoslpc\"\n- name: Tiki-wiki CMS_body\n  rule: body=\"jqueryTiki = new Object\"\n- name: ruijie_router_body\n  rule: body=\"Ruijie\"\n- name: Sitecore_header\n  rule: header=\"sitecore cms\"\n- name: MkDocs_header\n  rule: header=\"MkDocs\"\n- name: Advanced Electron Forum_body\n  rule: body=\"Powered By AEF\" && body=\"content=\\\"aef\"\n- name: Mobinat-Wireless-Router_body\n  rule: body=\"http://mobinnet.ir/faq\" && body=\"http://mobinnet.ir/coverage\"\n- name: Barracuda-Spam-Firewall_body\n  rule: body=\"/barracuda.css\" && body=\"http://www.barracudanetworks.com?a=bsf_product\"\n    && body=\"/barracuda.css\" && body=\"http://www.barracudanetworks.com?a=bsf_product\"\n- name: Travix_header\n  rule: header=\"Travix\"\n- name: Cisco-Wireless-LAN-Controller_body\n  rule: body=\"action=\\\"/main_login.html\" && body=\"cisco systems\" && body=\"onclick=\\\"loginaction(\"\n    && body=\"cisco systems login\"\n- name: Sophos-Web-Appliance_body\n  rule: body=\"resources/images/sophos_web.ico\" && body=\"url(resources/images/en/login_swa.jpg\"\n- name: ZikulaCMS_header\n  rule: header=\"ZikulaCMS\"\n- name: PHPMPS分类信息_body\n  rule: body=\"Powered by Phpmps\" && body=\"templates/phpmps/style/index.css\"\n- name: NSFOCUS TDC_header\n  rule: header=\"NSFOCUS TDC\"\n- name: Sophos_Email_Appliance_header\n  rule: header=\"Sophos Email Appliance\"\n- name: NETGEAR R6220_header\n  rule: header=\"NETGEAR R6220\"\n- name: ASUS-RT-AC1300UHP_body\n  rule: body=\"<div class=\\\"prod_madelname\\\">rt-ac1300uhp\"\n- name: PIOLINK-TiFRONT-Product_body\n  rule: body=\"<em>tifront, the security switch\"\n- name: Misskey_header\n  rule: header=\"Misskey\"\n- name: TR069-Client_header\n  rule: 'header=\"realm=\\\"tr069 client\" && header=\"server: tr069\"'\n- name: Franklin Fueling Systems_body\n  rule: body=\"Franklin Fueling Systems\"\n- name: ocportal_header\n  rule: header=\"ocportal\"\n- name: Webmin_icon_hash\n  rule: icon_hash=\"1453890729\" && icon_hash=\"1280907310\" && icon_hash=\"479413330\"\n- name: FourSeasonsVPN_body\n  rule: body=\"imgs/fs-black-box.jpg\"\n- name: Microsoft-ISA-Server_body\n  rule: body=\"the isa server denied the specified uniform resource locator\" && body=\"the\n    server denied the specified uniform resource locator (url. contact the server\n    administrator\"\n- name: PANSITE_header\n  rule: header=\"PANSITE\"\n- name: NETGEAR DGN1000_header\n  rule: header=\"NETGEAR DGN1000\"\n- name: 企智通上网行为管理_header\n  rule: header=\"企智通上网行为管理\"\n- name: gzmwiccard-System_body\n  rule: body=\"抄表器驱动tp1100m\"\n- name: Webmin_body\n  rule: body=\"Webmin\" && body=\"session_login\" && body=\"webmin server on\" && body=\"Webmin\n    server on\"\n- name: october cms_header\n  rule: header=\"october cms\"\n- name: Open Journal Systems_header\n  rule: header=\"Open Journal Systems\"\n- name: LINKSYS RV-042_header\n  rule: header=\"LINKSYS RV-042\"\n- name: ZTE Corporation (Gateway/Appliance)_icon_hash\n  rule: icon_hash=\"459900502\"\n- name: SuperMicro IPMI RMCP_header\n  rule: header=\"SuperMicro IPMI RMCP\"\n- name: huaxunchina-WLAN_body\n  rule: body=\"var url=\\\"resetwebsvr.php?act=reset\\\";\" && body=\"华讯方舟 - 集中无线控制器\"\n- name: Materialize-CSS_body\n  rule: body=\"/materialize.css\" && body=\"/materialize.min.css\" && body=\"materialize/materialize\"\n    && body=\"materialize/css\"\n- name: bzfshop_header\n  rule: header=\"bzfshop\"\n- name: JAlbum_header\n  rule: header=\"JAlbum\"\n- name: Tomcat-Manager-Application_header\n  rule: header=\"tomcat manager application\"\n- name: 1024cms_body\n  rule: body=\"Powered by 1024 CMS\" && body=\"generator\\\" content=\\\"1024 CMS (c)\"\n- name: HuaWei-eSpace-product_header\n  rule: header=\"realm=\\\"enterprise ip phone huawei espace\"\n- name: yii_header\n  rule: header=\"YII_CSRF_TOKEN\"\n- name: vaeThink_header\n  rule: header=\"vaeThink\"\n- name: SeaweedFS_icon_hash\n  rule: icon_hash=\"1210969935\"\n- name: 科荣 AIO 运营管理系统_body\n  rule: body=\"style1/css/ListRange.css\" && body=\"主账套\" && body=\"login.jsp\"\n- name: 新网企业邮_header\n  rule: header=\"新网企业邮\"\n- name: ipTIME-A8004NS-M_body\n  rule: body=\"src=\\\"/images2/login_title.a8004nm.gif\\\"\"\n- name: magicwinmail_header\n  rule: header=\"magicwinmail_default_theme\"\n- name: Miniature-JWS_header\n  rule: header=\"rogatkin's\"\n- name: modernizr_header\n  rule: header=\"modernizr\"\n- name: skywcm_header\n  rule: header=\"skywcm\"\n- name: KPPW_body\n  rule: body=\"content=\\\"kekezu\" && body=\"var siteurl = \" && body=\"skin_path = 'tpl/default',\"\n    && body=\"<img id='imgflag' src=\\\"tpl/default/img/\"\n- name: AirLive-Firmware&Driver_header\n  rule: header=\"airlive airmax5\" && header=\"airlive airmax2\"\n- name: LotWan-Web-accelerator_body\n  rule: body=\"北京华夏创新科技有限公司\"\n- name: Newton_body\n  rule: body=\"name=\\\"group_sn\\\"\"\n- name: 和嘉科技 PEMS_header\n  rule: header=\"和嘉科技 PEMS\"\n- name: 安宁VMX反垃圾网关系统_header\n  rule: header=\"安宁VMX反垃圾网关系统\"\n- name: DSShop_header\n  rule: header=\"DSShop\"\n- name: FishEye_header\n  rule: 'header=\"FESESSIONID=\" && header=\"set-cookie: fesessionid\"'\n- name: miniBB中文版_header\n  rule: header=\"miniBB中文版\"\n- name: BugSnag_header\n  rule: header=\"BugSnag\"\n- name: IPCop-Firewall_body\n  rule: body=\"<!-- ipcop logo row -->\" && body=\"href='https://sourceforge.net/projects/ipcop/\"\n    && body=\"href='http://sf.net/projects/ipcop/\"\n- name: Unbounce_header\n  rule: header=\"Unbounce\"\n- name: IPCop-Firewall_header\n  rule: header=\"IPCop-Firewall\"\n- name: 网御 安全网关_body\n  rule: body=\"安全系统\" && body=\"网御星云\" && body=\"login\"\n- name: FishEye_body\n  rule: body=\"fisheye \" && body=\"fisheye-16.ico\"\n- name: Acunetix_body\n  rule: body=\"acunetix-logo-full-new-black.svg\" && body=\"title>Acunetix</title>\" &&\n    body=\"<acx-root></acx-root>\" && body=\"<html ng-app=\\\"WVS\\\"\"\n- name: Outlook_body\n  rule: body=\"owa/auth\" && body=\"Outlook\" && body=\"logonDiv\"\n- name: DELL-PowerEdge-R820_body\n  rule: body=\"id=\\\"serverinfo\\\"> poweredge r820\"\n- name: YYjiacms_body\n  rule: body=\"YYjiacms\"\n- name: Softbiz-Online-Classifieds_body\n  rule: body=\"http://www.softbizscripts.com/classified-ads-plus-script-features.php\"\n- name: 金蝶政务GSiS_body\n  rule: body=\"/kdgs/script/kdgs.js\"\n- name: Honeywell-IP-AK2_body\n  rule: body=\"class=\\\"ak2word\\\">ip-ak2\"\n- name: Alcatel_Lucent-Enterprise-gateway_body\n  rule: body=\"欢迎登陆alcatel-lucent企业网关<p></p>请输入用户名和密码，3次出错将被锁定<p>\" && body=\"alcatel-lucent\"\n- name: Kedacom-ViewShot_body\n  rule: body=\"background=\\\"image/viewshotuls-di.jpg\"\n- name: Oracle-Enterprise-Performance-Management-System_body\n  rule: body=\"<a href=\\\"workspace/dynamichelp\"\n- name: ThreatConnect-Platform_body\n  rule: body=\"content=\\\"threatconnect\\\" />\"\n- name: USP-Secure-Login-Service_body\n  rule: body=\"<!-- sls javascripts -->\" && body=\"<form action=\\\"auth\\\" method=\\\"post\\\"\n    name=\\\"loginform\\\" onsubmit=\\\"return checkformsubmit(;\\\" >\" && body=\"<input name=\\\"currentrequestedpage\\\"\n    type=\\\"hidden\\\" value=\"\n- name: topfreeweb-Charging_body\n  rule: body=\"background=\\\"images/logbg.jpg\\\"\"\n- name: Teamyar_header\n  rule: header=\"Teamyar\"\n- name: uniview-NVR516_header\n  rule: header=\"realm=\\\"nvr516\"\n- name: FlowWeb_header\n  rule: header=\"FlowWeb\"\n- name: webcamXP_header\n  rule: 'header=\"server: webcamxp 5\"'\n- name: USP-Secure-Login-Service_header\n  rule: header=\"slsstatus\" && header=\"set-cookie scdid_s\"\n- name: NETGEAR PS121v2_header\n  rule: header=\"NETGEAR PS121v2\"\n- name: Daffodil-CRM_body\n  rule: body=\"Powered by Daffodil\" && body=\"Design & Development by Daffodil Software\n    Ltd\"\n- name: Invision-PowerBoard_body\n  rule: body=\"powered by <a href=\\\"http://www.invisionboard.com\"\n- name: ClickShare WebServer_header\n  rule: header=\"ClickShare WebServer\"\n- name: Samsung-Laser-printer_header\n  rule: header=\"samsung m332x\"\n- name: Netgear WAG302v2_header\n  rule: header=\"Netgear WAG302v2\"\n- name: H3C-B5_body\n  rule: body=\"var product_type = \\\"b5\\\"\"\n- name: MRTG_header\n  rule: header=\"realm=\\\"mrtg \"\n- name: Inspectlet_header\n  rule: header=\"Inspectlet\"\n- name: MRTG_body\n  rule: 'body=\"href=\\\"http://oss.oetiker.ch/mrtg/\" && body=\"command line is easier\n    to read using \\\"view page properties\\\" of your browser\" && body=\"mrtg \" && body=\"mrtg\n    \" && body=\"Command line is easier to read using \\\"View Page Properties\\\" of your\n    browser\" && body=\"commandline was: indexmaker\"'\n- name: Acme HTTP Server_header\n  rule: header=\"Acme HTTP Server\"\n- name: Intel-IXDP425_body\n  rule: body=\"intel(r\"\n- name: NETGEAR WNDR3400v2_header\n  rule: header=\"NETGEAR WNDR3400v2\"\n- name: TWCMS_body\n  rule: body=\"href=\\\"/twcms/theme/default/css/global.css\" && body=\"href=\\\"/twcms/theme/default/css/global.css\\\"\"\n- name: Virtualmin_body\n  rule: body=\"<center><a href=/virtualmin-password-recovery/>forgot your virtualmin\n    password?</a></center>\"\n- name: Atlassian_icon_hash\n  rule: icon_hash=\"743365239\" && icon_hash=\"628535358\" && icon_hash=\"705143395\"\n- name: Wowza-Media-Server_body\n  rule: body=\"<html><head><title>wowza media server\"\n- name: 知行EDI_header\n  rule: header=\"知行EDI\"\n- name: Wowza-Media-Server_header\n  rule: header=\"www-authenticate realm=\\\"wowza media systems\"\n- name: 二级域名分发系统_icon_hash\n  rule: icon_hash=\"-2055778861\"\n- name: Webzi_header\n  rule: header=\"Webzi\"\n- name: truVision (NVR)_icon_hash\n  rule: icon_hash=\"-1093172228\"\n- name: CNPOWER-OA(OA8000_body\n  rule: body=\"/oaapp/webobjects/oaapp.woa\"\n- name: Hikvision-iVMS-8700_body\n  rule: body=\"src=\\\"/portal/common/js/commonvar.js\"\n- name: 飞鱼星上网行为管理_body\n  rule: body=\"css/R1Login.css\" && body=\"share.ti_username\" && body=\"login_logo\"\n- name: EDLCMS(易动力)_body\n  rule: body=\"EDLCMS\" && body=\"易动力\"\n- name: U-READER-Digital-Library_body\n  rule: body=\"content=\\\"ureader\" && body=\"class=\\\"login-show-title\\\">dynomedia inc.</p>\"\n- name: D-Link MiniAV_header\n  rule: header=\"D-Link MiniAV\"\n- name: Microsoft-SharePoint_header\n  rule: header=\"microsoftsharepointteamservices\" && header=\"sprequestduration\"\n- name: Microsoft-SharePoint_body\n  rule: body=\"content=\\\"microsoft sharepoint\" && body=\"content=\\\"sharepoint team\"\n    && body=\"id=\\\"msowebpartpage_postbacksource\"\n- name: 畅想之星 非书资源管理平台_header\n  rule: header=\"畅想之星 非书资源管理平台\"\n- name: Wp-Super-Cache_header\n  rule: header=\"Wp-Super-Cache\"\n- name: TeamPass_header\n  rule: header=\"TeamPass\"\n- name: 天玥运维安全网关_body\n  rule: body=\"css/fw/full.css\" && body=\"js/p/login.js\" && body=\"login\"\n- name: Solvonet Device(VoIP)_body\n  rule: body=\"Solvonet Device\" && body=\"VoIP\"\n- name: Netgear-ReadyNAS_header\n  rule: header=\"realm=\\\"readynas admin\"\n- name: 百为路由_body\n  rule: body=\"提交验证的id必须是ctl_submit\"\n- name: JBoss Application Server 7_icon_hash\n  rule: icon_hash=\"937999361\"\n- name: 联想-防火墙_header\n  rule: header=\"联想-防火墙\"\n- name: TopSec SSLVPN_header\n  rule: header=\"TopSec SSLVPN\"\n- name: Adcash_header\n  rule: header=\"Adcash\"\n- name: 明致 OA_icon_hash\n  rule: icon_hash=\"1591287747\"\n- name: yfidea-OA_body\n  rule: body=\"background=\\\"oa/images/index/oalogin.jpg\\\"\"\n- name: Cloudera_header\n  rule: header=\"Cloudera\"\n- name: ACTi_body\n  rule: body=\"ACTi Corporation All Rights Reserved\"\n- name: 帕拉迪统一安全管理和综合审计系统_body\n  rule: body=\"module/image/pldsec.css\"\n- name: ColorMeShop_header\n  rule: header=\"ColorMeShop\"\n- name: Sweetrice_body\n  rule: body=\"content=\\\"sweetrice\" && body=\"powered by <a href=\\\"http://www.basic-cms.org\\\">basic\n    cms sweetrice</a>\"\n- name: WP-Statistics_header\n  rule: header=\"WP-Statistics\"\n- name: MacbookAIR_header\n  rule: header=\"macbook-air\"\n- name: Gargoyle Router Management Utility_icon_hash\n  rule: icon_hash=\"1862132268\"\n- name: TypePad_header\n  rule: header=\"TypePad\"\n- name: dnaTools-dnaLIMS_body\n  rule: body=\"/cgi-bin/dna/password.cgi\"\n- name: ZTE-ZXHN-H268A_body\n  rule: body=\"logintitle\\\">welcome to &#72;&#50;&#54;&#56;&#65;. please login\"\n- name: Gossamer-Forum_body\n  rule: body=\"href=\\\"gforum.cgi?username=\" && body=\"href=\\\"gforum.cgi?username=\"\n- name: NSFOCUS-NIPS_body\n  rule: body=\"/login_logo_nips_zh_cn.png\"\n- name: DELL-PowerEdge-400SC_header\n  rule: header=\"poweredge-400sc\"\n- name: LK-IHC-Controller_body\n  rule: body=\"/images/bg_image_lk.jpg\"\n- name: OneAPM_header\n  rule: header=\"OneAPM\"\n- name: Proxmox-VE_body\n  rule: body=\"class=\\\"boxheadline\\\">proxmox virtual environment\" && body=\"href='http://www.proxmox.com'\n    target='_blank' class=\\\"boxheadline\" && body=\"ext.create('pve.stdworkspace'\"\n- name: AniVN Server_header\n  rule: header=\"AniVN Server\"\n- name: WebSitePro_header\n  rule: header=\"WebSitePro\"\n- name: bet365_icon_hash\n  rule: icon_hash=\"-2116540786\"\n- name: GETSIMPLE-CMS_body\n  rule: body=\"content=\\\"getsimple\" && body=\"powered by getsimple\"\n- name: ipinyou_body\n  rule: body=\"stats.ipinyou.com/\"\n- name: AliyunCDN_body\n  rule: body=\"cdn.aliyuncs.com\"\n- name: OpenMas_body\n  rule: body=\"loginhead\\\"><link href=\\\"app_themes\" && body=\"loginHead\\\"><link href=\\\"App_Themes\"\n- name: SEH-KYOCERA-PrintServer_body\n  rule: body=\"<html><head><meta http-equiv=\\\"content-type\\\" content=\\\"text/html; charset=utf-8\\\">\n    <title>print server homepage</title></head> <frameset cols=\\\"200\"\n- name: AliyunCDN_header\n  rule: header=\"cdn.aliyuncs.com\"\n- name: B2Bbuilder_B2B网站管理系统_中文版本_body\n  rule: body=\"content=\\\"B2Bbuilder\" && body=\"translateButtonId = \\\"B2Bbuilder\"\n- name: Lithium_header\n  rule: header=\"Lithium\"\n- name: HuaWei-Security-Device_body\n  rule: body=\"sweb-internal/resource/\" && body=\"sweb-internal/plat/login/login_new.js\"\n- name: 3D-portrait-integrated-data-gate_body\n  rule: body=\"<body onload=\\\"checkexplorer('/page/login_new'\\\">\"\n- name: BMU_body\n  rule: body=\"版本： espace ecs\"\n- name: Prototype_header\n  rule: header=\"Prototype\"\n- name: CitusCMS_body\n  rule: body=\"Powered by CitusCMS\" && body=\"<strong>CitusCMS</strong>\" && body=\"content=\\\"CitusCMS\"\n- name: Cisco AMP_header\n  rule: header=\"Cisco AMP\"\n- name: Xaraya_header\n  rule: header=\"Xaraya\"\n- name: NETGEAR DG834PNB_header\n  rule: header=\"NETGEAR DG834PNB\"\n- name: 锐捷物联网平台_header\n  rule: header=\"锐捷物联网平台\"\n- name: Digital Keystone (DK)_icon_hash\n  rule: icon_hash=\"-373674173\"\n- name: MOVCMS_header\n  rule: header=\"MOVCMS\"\n- name: Topwalk-UIS_body\n  rule: body=\"<meta http-equiv=\\\"refresh\\\" content=\\\"0;url=/usermainaction.action\\\"\n    />\"\n- name: 教之初在线考试系统_header\n  rule: header=\"教之初在线考试系统\"\n- name: MaticsoftSNS_动软分享社区_body\n  rule: body=\"MaticsoftSNS\" && body=\"maticsoft\" && body=\"/Areas/SNS/\"\n- name: slack-instance_icon_hash\n  rule: icon_hash=\"99395752\"\n- name: Contrexx-CMS_body\n  rule: body=\"powered by Contrexx\" && body=\"content=\\\"Contrexx\"\n- name: EDLM自助提卡系统_header\n  rule: header=\"EDLM自助提卡系统\"\n- name: BrewBlogger_body\n  rule: body=\"developed by <a href=\\\"http://www.zkdigital.com\" && body=\"developed\n    by <a href=\\\"http://www.zkdigital.com\"\n- name: zizhujianzhan_body\n  rule: body=\"content=\\\"模板系统xinnet\" && body=\"href=\\\"msnim:chat?contact=xinnet@hotmail.com\"\n- name: cradlepoint-IBR600LP3_body\n  rule: body=\"cplogin.model = \\\"ibr600lp3\\\";\"\n- name: mobotix_header\n  rule: header=\"MOBOTIX Camera User\"\n- name: mobotix_body\n  rule: body=\"content=\\\"MOBOTIX AG\"\n- name: 创星伟业校园网群_body\n  rule: body=\"javascripts/float.js\" && body=\"vcxvcxv\"\n- name: TeamDoc-FileSystem_body\n  rule: body=\"id=\\\"labellink\\\"\" && body=\"id=\\\"table_01\\\"\"\n- name: Apache Dubbo_header\n  rule: header=\"realm=\\\"dubbo\\\"\" && header=\"Apache Dubbo\"\n- name: kingdee-K3-cloud_body\n  rule: body=\"金蝶国际软件集团有限公司版权所有\" && body=\"var formidafterlogin = '\\\"bos_mainconsolesutra\\\"\"\n    && body=\"class=\\\"kd-div-loading-ct\\\"\"\n- name: ShareThis_header\n  rule: header=\"ShareThis\"\n- name: QQ聊天_body\n  rule: body=\"tencent://message/\"\n- name: Whooshkaa_header\n  rule: header=\"Whooshkaa\"\n- name: SMA Sunny Webbox_header\n  rule: header=\"SMA Sunny Webbox\"\n- name: Intelligence-Parking-Manager-System_body\n  rule: body=\"江西百胜门控设备有限公司::智能停车场管理系统\"\n- name: Open-Blog_body\n  rule: body=\"target=\\\"_blank\\\">open blog\"\n- name: Savant-Web-server_header\n  rule: 'header=\"server: savant\" && header=\"realm=\\\"savant\"'\n- name: Bolt CMS_header\n  rule: header=\"Bolt CMS\"\n- name: Passenger_header\n  rule: header=\"phusion_passenger\"\n- name: phpWebSite_header\n  rule: header=\"phpWebSite\"\n- name: 哈尔滨新中新 金融化一卡通网站查询子系统_header\n  rule: header=\"哈尔滨新中新 金融化一卡通网站查询子系统\"\n- name: TRENDnet-TEW-822DRE_body\n  rule: body=\"tew-822dre\" && body=\"lang_obj.write(\\\"product_description\\\"\"\n- name: Methode_header\n  rule: header=\"Methode\"\n- name: B2Bbuilder_icon_hash\n  rule: icon_hash=\"492941040\"\n- name: ChinaMDM-Mobile-Device-Management_body\n  rule: body=\"innerhtml=\\\"chinamdm移动终端管理系统\" && body=\"justsy/user/searchmenusbyusername/\"\n- name: BlueQuartz_body\n  rule: body=\"value=\\\"copyright (c 2000, cobalt networks\" && body=\"VALUE=\\\"Copyright\n    (C) 2000, Cobalt Networks\"\n- name: MobilityGuard_body\n  rule: body=\"click here for more information about mobilityguard\"\n- name: jsyhit-System_body\n  rule: body=\"content=\\\"仪化产品质量查询系统\\\"\"\n- name: script.aculo.us_header\n  rule: header=\"script.aculo.us\"\n- name: FortiGuard_body\n  rule: body=\"FortiGuard Web Filtering\" && body=\"/XX/YY/ZZ/CI/MGPGHGPGPFGHCDPFGGOGFGEH\"\n- name: QBServer_header\n  rule: header=\"QBServer\"\n- name: WaveIP_body\n  rule: body=\"<td><b>mac</td><td id=\\\"unitmac\"\n- name: NETGEAR DGN2200v2BEZEQ_header\n  rule: header=\"NETGEAR DGN2200v2BEZEQ\"\n- name: Rimes-Cisco_header\n  rule: header=\"Rimes-Cisco\"\n- name: PHPOK_body\n  rule: body=\"powered by phpok.com\" && body=\"content=\\\"phpok\"\n- name: prettyPhoto_header\n  rule: header=\"prettyPhoto\"\n- name: N点虚拟主机管理系统_header\n  rule: header=\"N点虚拟主机管理系统\"\n- name: IMGCms_body\n  rule: body=\"content=\\\"IMGCMS\" && body=\"Powered by IMGCMS\"\n- name: NETGEAR D6200_header\n  rule: header=\"NETGEAR D6200\"\n- name: D_Link-Airlink-IP-webcam_body\n  rule: body=\"bv = navigator.appversion\"\n- name: smc8024l2 switch_header\n  rule: header=\"smc8024l2 switch\"\n- name: MallBuilder_多用户商城管理系统_header\n  rule: header=\"MallBuilder_多用户商城管理系统\"\n- name: Stulz-Klimatechnik_body\n  rule: body=\"<img src=\\\"logo.png\\\" alt=\\\"stulz gmbh klimatechnik\"\n- name: KesionCMS_body\n  rule: body=\"ks_inc/common.js\" && body=\"KesionCMS\" && body=\"/ks_inc/common.js\" &&\n    body=\"publish by kesioncms\"\n- name: 易普拉格 科研管理系统_header\n  rule: header=\"易普拉格 科研管理系统\"\n- name: Hanwha-Camera_body\n  rule: body=\"css/techwin.css\"\n- name: TRENDnet-TEW-823DRU_body\n  rule: body=\"var model = \\\"tew-823dru\\\"\"\n- name: TP_LINK-Omada-Controller_body\n  rule: body=\"content=\\\"width=1300,initial-scale=1,minimal-ui\\\"\"\n- name: Informix_header\n  rule: header=\"Informix\"\n- name: 网宿_header\n  rule: header=\"Cdn Cache Server\" && header=\"WS CDN Server\"\n- name: cradlepoint-IBR650LP2-EU_body\n  rule: body=\"cplogin.model = \\\"ibr650lp2-eu\\\";\"\n- name: TP-LINK Wireless WA750RE_header\n  rule: header=\"TP-LINK Wireless WA750RE\"\n- name: Epson-Printer_header\n  rule: 'header=\"server: epson-http\"'\n- name: KaiBB_body\n  rule: body=\"powered by kaibb\" && body=\"content=\\\"forum powered by kaibb\" && body=\"Powered\n    by KaiBB\" && body=\"content=\\\"Forum powered by KaiBB\"\n- name: Subversion_header\n  rule: header=\"Subversion\"\n- name: JUNIPer-srx550m_body\n  rule: body=\"var modelphpstr = \\\"srx550m\\\"\" && body=\"class=\\\"jweb-title uppercase\\\">\n    - srx550m\"\n- name: zfsoft-Leaingrn_body\n  rule: body=\"href=\\\"/jwglxt/logo/favicon.ico\\\"\"\n- name: Caudium_header\n  rule: 'header=\"caudium\" && header=\"x-got-fish: pike\" && header=\"Caudium\" && header=\"X-Got-Fish:Pike\"'\n- name: Novell Open Enterprise Server_header\n  rule: header=\"Novell Open Enterprise Server\"\n- name: DM Polopoly_header\n  rule: header=\"DM Polopoly\"\n- name: Hingesoft-HZCMS_body\n  rule: body=\"produced by\" && body=\"网站群内容管理系统\"\n- name: SANGFOR-P5100_body\n  rule: body=\"<font color=\\\"white\\\">深信服科技版权所有\" && body=\"p5100\"\n- name: Gallery_body\n  rule: body=\"/gallery/images/gallery.png\"\n- name: xxl-job_body\n  rule: body=\"/static/adminlte/dist/css/AdminLTE.min.css\" && body=\"bower_components/PACE/pace.min.js\"\n- name: Samsung-Router_body\n  rule: body=\"samsung electronics\"\n- name: HttpFS_body\n  rule: body=\"<b>httpfs service</b\"\n- name: SmartCityConstructionProjectManagementSystem_body\n  rule: body=\"id=\\\"sitenametitle\\\">智慧城建项目管理系统</p\"\n- name: PHPEIP-CMS内容管理系统_body\n  rule: body=\"PHPEIP-CMS内容管理系统\"\n- name: BinarySec-Cloud-Defense_header\n  rule: header=\"x-binarysec\" && header=\"x-binarysec-nocache\"\n- name: 启明天玥网络安全审计系统_header\n  rule: header=\"启明天玥网络安全审计系统\"\n- name: Igenus邮件系统_body\n  rule: body=\"iGENUS\" && body=\"login.php\" && body=\"language\"\n- name: Flyspray_body\n  rule: body=\"powered by flyspray\" && body=\"Powered by Flyspray\"\n- name: Cisco-Router_body\n  rule: body=\"router.copyright\" && body=\"cisco_logo_about.png\" && body=\"src='/image/small_bg.jpg'\"\n    && body=\"src=\\\"/images/login_progress.gif\"\n- name: Cisco-Router_header\n  rule: header=\"realm=\\\"pa cisco router\" && header=\"level_1_or_view_access\"\n- name: o2security_vpn_header\n  rule: header=\"client_param=install_active\"\n- name: semcms外贸网站(多语言版)_header\n  rule: header=\"semcms外贸网站(多语言版)\"\n- name: CISCO-CX20_header\n  rule: header=\"CISCO-CX20\"\n- name: D-Link (camera)_icon_hash\n  rule: icon_hash=\"-355305208\" && icon_hash=\"-1897829998\"\n- name: OkoFEN Pellematic_icon_hash\n  rule: icon_hash=\"-625364318\"\n- name: Goodway-Integrated-Management-Information-System_body\n  rule: body=\"option value=\\\"enterprise\\\"\" && body=\"是否域账户登录\"\n- name: NETGEAR-XWN5001_header\n  rule: header=\"netgear xwn5001\"\n- name: shopex_body\n  rule: body=\"content=\\\"shopex\" && body=\"@author litie[aita]shopex.cn\" && body=\"http://www.shopex.cn'\n    target='_blank'\" && body=\"content=\\\"ShopEx\" && body=\"@author litie[aita]shopex.cn\"\n- name: superplaceholder.js_body\n  rule: body=\"superplaceholder.js\" && body=\"superplaceholder.min.js\"\n- name: jQuery Sparklines_header\n  rule: header=\"jQuery Sparklines\"\n- name: 蓝凌 OA_body\n  rule: body=\"sys/ui/extend/theme/default/style/icon.css\" && body=\"sys/ui/extend/theme/default/style/profile.css\"\n    && body=\"蓝凌软件\" && body=\"App_Themes/Login\"\n- name: CradlePoint Technology (Router)_icon_hash\n  rule: icon_hash=\"1466912879\"\n- name: Alcatel_Lucent-OS6865-U12X_body\n  rule: body=\"<span>device os6865-u12x\"\n- name: EFM-Networks-ipTIME-A104R_body\n  rule: body=\"src=\\\"/images2/login_title.a104r.gif\\\"\"\n- name: FW300R_header\n  rule: header=\"FW300R\"\n- name: SinGooCMS_header\n  rule: header=\"SinGooCMS\"\n- name: NETGEAR WNR1000_header\n  rule: header=\"NETGEAR WNR1000\"\n- name: NETGEAR DG834(G)_header\n  rule: header=\"NETGEAR DG834(G)\"\n- name: JYmusic音乐程序_header\n  rule: header=\"JYmusic音乐程序\"\n- name: MessageSolution Enterprise Email Archiving (EEA)_body\n  rule: body=\"MessageSolution\" && body=\"index.jsp\"\n- name: Shopware_header\n  rule: header=\"Shopware\"\n- name: Mobirise_header\n  rule: header=\"Mobirise\"\n- name: w7-OfficialAccounts_body\n  rule: body=\"class=\\\"copyright\\\">powered by <a href=\\\"http://www.we7.cc\\\"><b>微擎</b>\"\n    && body=\"onsubmit=\\\"return formcheck(;\\\" class=\\\"we7-form\\\">\" && body=\"content=\\\"微擎,微信\"\n    && body=\"powered by we7.cc\"\n- name: 泛微OA ecology_header\n  rule: header=\"ecology_JSessionid\"\n- name: 即会通企业版(LiveUC)|视频会议_icon_hash\n  rule: icon_hash=\"3657035475\"\n- name: Informatics-CMS_body\n  rule: body=\"content=\\\"informatics\" && body=\"content=\\\"Informatics\"\n- name: 品德科技医学在线考试系统_body\n  rule: body=\"考试系统\" && body=\"品德\" && body=\"login.aspx\"\n- name: WackoPicko_body\n  rule: body=\"<h2>welcome to wackopicko</h2>\" && body=\"<h1 id=\\\"title\\\"><a href=\\\"/\\\">wackopicko.com</a></h1>\"\n- name: H3C-Firewall_body\n  rule: body=\"class=\\\"dl_margin0\\\" align=\\\"left\\\">web网管用户登录</div>\" && body=\"/php/common/checknum_creat.php?module=config_authnum\"\n- name: WMSN_header\n  rule: header=\"X-Powered-Cms:WMSN\"\n- name: Intelbras-Roteador-ACtion-R1200_body\n  rule: body=\"roteador action r1200</p>\"\n- name: ATEN PN5320 HTTP Server_header\n  rule: header=\"ATEN PN5320 HTTP Server\"\n- name: 惠商+管理系统_title\n  rule: title=\"惠商+管理系统\"\n- name: joinf-ERP_body\n  rule: body=\"<h1>富通天下erp</h1>\"\n- name: TRENDnet-TEW-731BR_body\n  rule: body=\"<font size=4><b>tew-731br\"\n- name: QingYuan-HSSE_body\n  rule: body=\"hsse 系统\"\n- name: MYPAGE Platform_header\n  rule: header=\"MYPAGE Platform\"\n- name: Fbits_header\n  rule: header=\"Fbits\"\n- name: 惠尔顿 远程接入平台_header\n  rule: header=\"惠尔顿 远程接入平台\"\n- name: VisualSVN_header\n  rule: header=\"realm=\\\"visualsvn server\"\n- name: Cisco-Company's-product_body\n  rule: body=\"cisco systems, inc. all rights reserved\"\n- name: ZTE-D401_body\n  rule: body=\"d401</font></div>\"\n- name: StreamVideoEncoder_body\n  rule: body=\"流媒体编码器专业版</span>\"\n- name: CruxCMS_body\n  rule: body=\"Created by CruxCMS\"\n- name: espocrm_header\n  rule: header=\"espocrm\"\n- name: ZyXEL-EMG2926_body\n  rule: body=\"<li class=\\\"modelname\\\">emg2926</li>\"\n- name: 深信服终端检测响应平台EDR_body\n  rule: body=\"SANGFOR终端检测响应平台\"\n- name: chanzhiEPS_header\n  rule: header=\"chanzhiEPS\"\n- name: NETGEAR WNDR4000_header\n  rule: header=\"NETGEAR WNDR4000\"\n- name: Linksys WRT300N_header\n  rule: header=\"Linksys WRT300N\"\n- name: Casbin_body\n  rule: body=\"Casbin\" && body=\"casbin\"\n- name: Jumpserver_body\n  rule: body=\"<script src=\\\"/static/js/jumpserver.js\\\"></script>\"\n- name: linksys rv042_header\n  rule: header=\"linksys rv042\"\n- name: FileNice_body\n  rule: body=\"content=\\\"the fantabulous mechanical eviltwin code machine\" && body=\"filenice/filenice.js\"\n    && body=\"content=\\\"the fantabulous mechanical eviltwin code machine\" && body=\"fileNice/fileNice.js\"\n- name: Mobotix-Camera_header\n  rule: header=\"mobotix camera\"\n- name: cradlepoint-IBR900L_body\n  rule: body=\"cplogin.model = \\\"ibr900l\\\";\"\n- name: 瑞友天翼－应用虚拟化系统_body\n  rule: body=\"DownLoad.XGI\" && body=\"realor.cn\" && body=\"dvLogin\"\n- name: Mobotix-Camera_body\n  rule: body=\"content=\\\"mobotix ag\"\n- name: Founder-Operation-management-and-decision-support-system_body\n  rule: body=\"src=\\\"/portal/img/logo.png\\\"\" && body=\"src=\\\"/desktop/ui/custom/getimage?img=iphoneview.png\\\"\"\n- name: DELL-PowerEdge-M520_body\n  rule: body=\"id=\\\"serverinfo\\\"> poweredge m520\"\n- name: Linksys VPN_header\n  rule: header=\"Linksys VPN\"\n- name: hillston-OperationAndAnalysis_body\n  rule: body=\"/static/css/main.4672616b.chunk.css\"\n- name: cscms_body\n  rule: body=\"cscms\"\n- name: DDNS_header\n  rule: header=\"ddns:\"\n- name: wholeton-VPN_body\n  rule: body=\"images/l_name.jpg\" && body=\"jtpsoft style1\"\n- name: ELOG HTTP_header\n  rule: header=\"ELOG HTTP\"\n- name: Hanwha-XRN-2011_body\n  rule: body=\"$.nvr.model_name=\\\"xrn-2011\\\"\"\n- name: JStorm_body\n  rule: body=\"content=\\\"jstorm\"\n- name: Epson-Printer_body\n  rule: body=\"content=\\\"seiko epson\"\n- name: opencart_中文版_header\n  rule: header=\"opencart_中文版\"\n- name: cisco UCM_body\n  rule: body=\"/ccmadmin/\"\n- name: Allegro RomPager_header\n  rule: header=\"Allegro RomPager\"\n- name: a-blog cms_header\n  rule: header=\"a-blog cms\"\n- name: Microsoft-UrlScan_header\n  rule: header=\"rejected-by-urlscan\"\n- name: CCProxy_header\n  rule: header=\" realm=\\\"ccproxy \" && header=\"Server:CCProxy\"\n- name: Mobile-law-enforcement-terminal_body\n  rule: body=\"src=\\\"images/login/badgezh_cn.png\" && body=\"huadean. all rights \"\n- name: b3log-solo_header\n  rule: header=\"b3log-solo\"\n- name: DUclassified_body\n  rule: body=\"assets/DUclassified.css\"\n- name: 协众OA_body\n  rule: body=\"scripts/cnoa.extra.js\" && body=\"admin@cnoa.cn\" && body=\"Powered by CNOA.CN\"\n- name: NETGEAR-WNR612v3_header\n  rule: header=\"netgear  wnr612v3\"\n- name: XSS平台_header\n  rule: header=\"XSS平台\"\n- name: Inktomi-Search_header\n  rule: header=\"Inktomi Search\"\n- name: Meraki-Network-Device_body\n  rule: body=\"alt=\\\"cisco meraki\\\" src=\\\"img/cisco-meraki.png\\\"\" && body=\"src=\\\"images/cisco-meraki.png\\\"\"\n- name: TQ云呼叫中心_body\n  rule: body=\"tq.cn/floatcard?\"\n- name: Gleez Cms_header\n  rule: header=\"Gleez Cms\"\n- name: NETGEAR R6200v2_header\n  rule: header=\"NETGEAR R6200v2\"\n- name: Smart Ad Server_header\n  rule: header=\"Smart Ad Server\"\n- name: Vicworl_body\n  rule: body=\"powered by vicworl\" && body=\"content=\\\"vicworl\" && body=\"vindex_right_d\"\n    && body=\"Powered by Vicworl\" && body=\"content=\\\"Vicworl\" && body=\"vindex_right_d\"\n- name: Redmine_body\n  rule: body=\"authenticity_token\" && body=\"content=\\\"redmine\" && body=\"powered by\n    <a href=\\\"http://www.redmine.org/\" && body=\"Redmine\" && body=\"authenticity_token\"\n- name: PowerMTA monitoring_icon_hash\n  rule: icon_hash=\"-1788112745\"\n- name: Redmine_icon_hash\n  rule: icon_hash=\"603314\"\n- name: Redmine_header\n  rule: header=\"authenticity_token\" && header=\"content=\\\"redmine\" && header=\"powered\n    by <a href=\\\"http://www.redmine.org/\" && header=\"_redmine_session=\"\n- name: Linksys WAP11_header\n  rule: header=\"Linksys WAP11\"\n- name: GrandTec-X-Guard_header\n  rule: header=\"realm=\\\"walkguard\" && header=\"WalkGuard\"\n- name: MShift_header\n  rule: header=\"dcttype=1;\"\n- name: LG-43UM7510PSB_body\n  rule: body=\"<modelnumber>43um7510psb</modelnumber>\"\n- name: HP-iLO_body\n  rule: body=\"href=\\\"http://www.hp.com/go/ilo\"\n- name: MShift_body\n  rule: body=\"powered by mshift&reg\"\n- name: Icecast Streaming Media Server_icon_hash\n  rule: icon_hash=\"1424295654\"\n- name: 景云网络防病毒系统_body\n  rule: body=\"styles/images/logo.png\" && body=\"login_form\" && body=\"防病毒\"\n- name: VideoSurveillanceManagementPlatform_body\n  rule: body=\" <span>平台采用最新图像化展现技术\"\n- name: Panabit-Panalog_body\n  rule: body=\"img/logo.gif\" && body=\"Maintain\" && body=\"unamexx\" && body=\"img/12.png\"\n    && body=\"id=\\\"codeno\\\"\"\n- name: GS ShopBuilder_header\n  rule: header=\"GS ShopBuilder\"\n- name: BoyowCMS_body\n  rule: body=\"publish by BoyowCMS\"\n- name: Aipstar-Cameras-and-Surveillance_body\n  rule: body=\"window.location.href = \\\"login.html\\\";\"\n- name: EiMTech_header\n  rule: header=\"EiMTech\"\n- name: ManageEngine Applications Manager_header\n  rule: header=\"ManageEngine Applications Manager\"\n- name: NETGEAR JNR1010_header\n  rule: header=\"NETGEAR JNR1010\"\n- name: FiberHome-Product_body\n  rule: body=\"fiberhome systems, inc.\" && body=\"scos_fx@fiberhome.com \"\n- name: ZyXEL-Router_body\n  rule: body=\"<friendlyname>zyxel router</friendlyname>\"\n- name: DERAK.CLOUD_header\n  rule: header=\"DERAK.CLOUD\"\n- name: xcyg-System_body\n  rule: body=\">digital anywhere platform</h2>\"\n- name: 实易智能DNS_header\n  rule: header=\"实易智能DNS\"\n- name: Indico_body\n  rule: body=\"href=\\\"http://cern.ch/indico\" && body=\"href=\\\"http://cern.ch/indico\"\n- name: CDATA-Server_body\n  rule: body=\"var key = evt.keycode?evt.keycode:evt.which\" && body=\"placeholder=\\\"请输入管理员密码\\\"\"\n    && body=\"placeholder=\\\"please enter administrator password\\\"\"\n- name: Indico_header\n  rule: header=\"makacsession\" && header=\"MAKACSESSION\"\n- name: Segment_header\n  rule: header=\"Segment\"\n- name: ASUS-RT-N56U_header\n  rule: header=\"realm=\\\"rt-n56u\"\n- name: ASUS-RT-N56U_body\n  rule: body=\"<div class=\\\"prod_madelname\\\">rt-n56u\" && body=\"class=\\\"prod_madelname\\\"\n    style=\\\"margin-left:78px;\\\">rt-n56u\" && body=\"var product_name='rt-n56u'\"\n- name: TOTO_LINK-N500RDG_body\n  rule: body=\"src =\\\"/images/login_back_n500rdg.gif\\\"\"\n- name: ComersusCart_body\n  rule: body=\"CONTENT=\\\"Powered by Comersus\" && body=\"href=\\\"comersus_showCart.asp\"\n- name: HLK-RM04_header\n  rule: header=\"realm=\\\"hlk-rm04\"\n- name: Mdaweb_header\n  rule: header=\"Mdaweb\"\n- name: Kerio MailServer_header\n  rule: header=\"Kerio MailServer\"\n- name: 信达OA_body\n  rule: body=\"http://www.xdoa.cn</a>\" && body=\"北京创信达科技有限公司\"\n- name: DataLife-Engine_body\n  rule: body=\"content=\\\"datalife engine\" && body=\"content=\\\"DataLife Engine\"\n- name: Ultra-CMDB_body\n  rule: body=\"<span class=\\\"logo-text\\\">matrix</span>\"\n- name: 用友erp-nc_body\n  rule: body=\"/nc/servlet/nc.ui.iufo.login.Index\"\n- name: DataLife-Engine_header\n  rule: header=\"dle_\" && header=\"dle_\"\n- name: Chamilo_header\n  rule: header=\"X-Powered-By:Chamilo\"\n- name: LG HDCP_header\n  rule: header=\"LG HDCP\"\n- name: Chamilo_body\n  rule: body=\"<link href=\\\"http://www.chamilo.org/documentation.php\" && body=\"content=\\\"Chamilo\"\n- name: Linksys ED55E_header\n  rule: header=\"Linksys ED55E\"\n- name: Axis2-Web_body\n  rule: body=\"axis2-web/css/axis-style.css\"\n- name: 唯品会CDN_header\n  rule: header=\"唯品会CDN\"\n- name: We7站群系统_header\n  rule: header=\"We7站群系统\"\n- name: 帆软数据决策系统_body\n  rule: body=\">数据决策系统\" && body=\"ReportServer?op\"\n- name: ManyContacts_header\n  rule: header=\"ManyContacts\"\n- name: Application Security Manager(F5 Networks)_body\n  rule: body=\"Application Security Manager\" && body=\"F5 Networks\"\n- name: Alcatel_Lucent-OS6860-48_body\n  rule: body=\"<span>device os6860-48\"\n- name: Haitian-OA_body\n  rule: body=\"images/myjs.js\" && body=\"mshtml 8.00.6001.19298\"\n- name: Lotus Domino_body\n  rule: body=\"iwaredir.nsf\"\n- name: Sumitomo-Electric-Industries_header\n  rule: header=\"realm=\\\"sumitomo electric industries\"\n- name: Apache JMeter_header\n  rule: header=\"Apache JMeter\"\n- name: 汉潮B2B2C多用户商城系统_header\n  rule: header=\"汉潮B2B2C多用户商城系统\"\n- name: kingsoft-KingGate_body\n  rule: body=\"/src/system/login.php\"\n- name: GL_iNet-Router_body\n  rule: body=\"/cgi-bin/login_cgi?action=checklogin\"\n- name: Intoto-Router_header\n  rule: 'header=\"server: intoto http server \" && header=\"Intoto Http Server\"'\n- name: VTEX Enterprise_header\n  rule: header=\"VTEX Enterprise\"\n- name: WirelessHART-Gateway-Access-Control_header\n  rule: header=\"realm=\\\"wirelesshart gateway access control\"\n- name: Emerson-Network-Power_body\n  rule: body=\"emerson network power\"\n- name: EFM-Networks-ipTIME-N604M_body\n  rule: body=\"src =\\\"/images2/login_title.n604m.gif\\\"\"\n- name: osiris_header\n  rule: header=\"osiris\"\n- name: NETGEAR C7000-100NAS_header\n  rule: header=\"NETGEAR C7000-100NAS\"\n- name: PG-API-Server_header\n  rule: header=\"pg api server\" && header=\"pgapiserv\"\n- name: MKCMS_header\n  rule: header=\"MKCMS\"\n- name: DELL-PowerEdge-R720_body\n  rule: body=\"id=\\\"serverinfo\\\"> poweredge r720\"\n- name: Yongyou-ism_body\n  rule: body=\"sheight*window.screen.deviceydpi\"\n- name: DORG_body\n  rule: body=\"CONTENT=\\\"DORG\"\n- name: TP-Link TL-WR941N_header\n  rule: header=\"TP-Link TL-WR941N\"\n- name: Textpattern CMS_header\n  rule: header=\"Textpattern CMS\"\n- name: aviatek-server_header\n  rule: header=\"aviatek-server\"\n- name: Cybrotech CyBroHttpServer_header\n  rule: header=\"Cybrotech CyBroHttpServer\"\n- name: EMC-Unisphere_body\n  rule: body=\"<script src=\\\"oemmessage.js\"\n- name: Hotjar_header\n  rule: header=\"Hotjar\"\n- name: shoperfa_header\n  rule: header=\"shoperfa\"\n- name: Babel_header\n  rule: header=\"Babel\"\n- name: EasywebCMS_header\n  rule: header=\"Easyweb CMS\"\n- name: AVX Webserver_header\n  rule: header=\"AVX Webserver\"\n- name: Symantec-Endpoint-Protection-Manager_body\n  rule: 'body=\"<div style=\\\"font-family: tahoma, verdana, arial, helvetica, sans-serif;\n    font-size:11px;\\\">version\" && body=\"/portal/about.jsp\" && body=\"<!-- now, if it\n    is ie on windows platform, we check to see which version of jws is installed -->\"\n    && body=\"<tr><td align=\\\"left\\\" style=\\\"font-family:arial; font-size:18pt\\\"><b>symantec\n    endpoint protection manager<br>web access</b></td></tr>\"'\n- name: Symantec-Endpoint-Protection-Manager_header\n  rule: header=\"symantec endpoint protection manager\"\n- name: 太一星晨T-Force NGFW_header\n  rule: header=\"太一星晨T-Force NGFW\"\n- name: McAfee-Web-Gateway_header\n  rule: header=\"mcafee web gateway\"\n- name: Hexo博客_header\n  rule: header=\"Hexo博客\"\n- name: D_Link-DSR-500N_body\n  rule: 'body=\"<div class=\\\"floatl txt01\\\">product page: dsr-500n\" && body=\"unified\n    services router - dsr-500n </div>\"'\n- name: ipTIME-G204_body\n  rule: body=\"src =\\\"/images/login_back_g204.gif\\\"\" && body=\"src=\\\"/images2/login_title.g204.gif\\\"\"\n- name: ZKEACMS(纸壳CMS)_body\n  rule: body=\"ZKEACMS\" && body=\"纸壳CMS\"\n- name: Dynatrace_header\n  rule: header=\"Dynatrace\"\n- name: JET Enterprise_header\n  rule: header=\"JET Enterprise\"\n- name: NSFOCUS NF_header\n  rule: header=\"NSFOCUS NF\"\n- name: Freshmarketer_header\n  rule: header=\"Freshmarketer\"\n- name: Shoutcast Server_icon_hash\n  rule: icon_hash=\"-632583950\"\n- name: DLink-NVR_header\n  rule: header=\"realm=\\\"dnr-\"\n- name: TurboMail_body\n  rule: body=\"powered by turbomail\" && body=\"wzcon1 clearfix\" && body=\"<a href=\\\"http://www.turbomail.org\\\">powered\n    by turbomail</a>\" && body=\"alt=\\\"turbomail 电子邮件系统\\\"/>\" && body=\"Powered by TurboMail\"\n    && body=\"wzcon1 clearfix\"\n- name: ranzhi_header\n  rule: header=\"theme\"\n- name: Atmail-WebMail_body\n  rule: body=\"Powered by Atmail\" && body=\"/index.php/mail/auth/processlogin\" && body=\"<input\n    id=\\\"Mailserverinput\"\n- name: AWS (Ada Web Server)_header\n  rule: header=\"AWS (Ada Web Server)\"\n- name: Yichao-System_body\n  rule: body=\"src=\\\"amy/webos/jpmanager.js\\\"\"\n- name: Xajax_header\n  rule: header=\"Xajax\"\n- name: PhpCMS_body\n  rule: body=\"http://www.phpcms.cn\" && body=\"content=\\\"phpcms\" && body=\"powered by\n    phpcms\" && body=\"data/configs.js\" && body=\"http://www.phpcms.cn\" && body=\"content=\\\"Phpcms\"\n    && body=\"Powered by Phpcms\" && body=\"data/config.js\" && body=\"/index.php?m=content&c=index&a=lists\"\n    && body=\"/index.php?m=content&amp;c=index&amp;a=lists\"\n- name: Huawei Wireless ADSL2+ Router_header\n  rule: header=\"Huawei Wireless ADSL2+ Router\"\n- name: 广联达 Glodon_body\n  rule: body=\"/ConsoleCommon/Content/weebox.css\" && body=\"广联达\"\n- name: Ali-Monitoring-System_body\n  rule: body=\"/monitor/css/monitor.css\" && body=\"href=\\\"/monitor/monitoritem/monitoritemlist.htm\"\n- name: Neusoft-UniPortal_body\n  rule: body=\"ecdomain/unieap/ria/unieap/themes/earth/common/unieap.css\"\n- name: Linksys BEFSR41v4_header\n  rule: header=\"Linksys BEFSR41v4\"\n- name: Amazon EC2_header\n  rule: header=\"Amazon EC2\"\n- name: 孚盟云 CRM_icon_hash\n  rule: icon_hash=\"1533124028\"\n- name: OMEETING OM视频会议_header\n  rule: header=\"OMEETING OM视频会议\"\n- name: 优炫下一代防火墙_header\n  rule: header=\"优炫下一代防火墙\"\n- name: HUAWEI-USG2220_header\n  rule: header=\"usg2220\"\n- name: Dreambox (TV Reciever)_header\n  rule: header=\"Basic realm=\\\"dreambox\\\"\"\n- name: Communique_header\n  rule: header=\"Communique\"\n- name: NETGEAR-JNR1010_header\n  rule: header=\"netgear jnr1010\" && header=\"netgear  jnr1010\"\n- name: AVTECH TemPageR_header\n  rule: header=\"AVTECH TemPageR\"\n- name: Canon-MX920-series_body\n  rule: body=\"nowrap>canon mx920 series</td>\"\n- name: cradlepoint-IBR350_body\n  rule: body=\"cplogin.model = \\\"ibr350\\\";\"\n- name: taocms_body\n  rule: body=\">taoCMS<\"\n- name: arrisi_Touchstone_body\n  rule: body=\"passWithWarnings\"\n- name: DASAN-H150N_header\n  rule: header=\"realm=\\\"h150n tr-069 admin\"\n- name: Cisco UCS Director_header\n  rule: header=\"Cisco UCS Director\"\n- name: Anchiva NGFW_header\n  rule: header=\"Anchiva NGFW\"\n- name: TOTO_LINK-N302R+_body\n  rule: body=\"src =\\\"/images/login_back_zn302rp.gif\\\"\"\n- name: Canon-Printer_header\n  rule: header=\"Canon Http Server\"\n- name: NETGEAR DM111_header\n  rule: header=\"NETGEAR DM111\"\n- name: Yieldlab_header\n  rule: header=\"Yieldlab\"\n- name: Check Point FireWall_header\n  rule: header=\"Check Point FireWall\"\n- name: Dell EMC Data Domain_header\n  rule: header=\"Dell EMC Data Domain\"\n- name: ZKEACMS(纸壳CMS)_header\n  rule: header=\"ZKEACMS\" && header=\"纸壳CMS\"\n- name: enVision_header\n  rule: header=\"Content Interface Corp - enVision\"\n- name: Zinnia_header\n  rule: header=\"Zinnia\"\n- name: NETGEAR WNR618_header\n  rule: header=\"NETGEAR WNR618\"\n- name: Hanwha-SND-6084_body\n  rule: body=\"var defaultfilename = \\\"snd-6084\\\"\"\n- name: TP-LINK Wireless WA854RE_header\n  rule: header=\"TP-LINK Wireless WA854RE\"\n- name: 微普外卖点餐系统_body\n  rule: body=\"Author\\\" content=\\\"微普外卖点餐系统\" && body=\"Powered By 点餐系统\" && body=\"userfiles/shoppics/\"\n- name: Cisco Expert Talks_header\n  rule: header=\"Cisco Expert Talks\"\n- name: 速达V3.NET财务_header\n  rule: header=\"速达V3.NET财务\"\n- name: SAP Conversational AI_icon_hash\n  rule: icon_hash=\"1347937389\"\n- name: 78OA办公系统_header\n  rule: header=\"78OA办公系统\"\n- name: Load Balancer Cisco ACE_header\n  rule: header=\"Cisco ACE\"\n- name: Carel-Data-Server_body\n  rule: body=\"src=\\\"/mpwebcorefn.js\" && body=\"src=\\\"/MPwebCoreFn.js\"\n- name: Rainier-Internet-product_body\n  rule: body=\"<a href=\\\"http://www.rainier.net.cn\\\">北京润尼尔网络科技有限公司\"\n- name: zknet-attendance-management_body\n  rule: body=\"onclick=\\\"showstate(gettext('forgotten password' \" && body=\"zknet\" &&\n    body=\"zksoftware inc.\" && body=\"web考勤管理系统\"\n- name: WellCMS_header\n  rule: header=\"WellCMS\"\n- name: SickBeard_header\n  rule: header=\"SickBeard\"\n- name: Canon-MG5400-series_body\n  rule: body=\"nowrap>canon mg5400 series</td>\"\n- name: Konica-Minolta-Printer_header\n  rule: header=\"lpc http server\"\n- name: Carel-Data-Server_header\n  rule: 'header=\"server: careldataserver\" && header=\"CarelDataServer\"'\n- name: Konica-Minolta-Printer_body\n  rule: body=\"vlink=\\\"#000000\\\" onload=\\\"location.replace('/wcd/index.html';\\\" >\"\n    && body=\"<meta http-equiv=\\\"refresh\\\" content=\\\"0; url=/wcd/js_error.xml\\\">\" &&\n    body=\"<langno>en</langno> </mfp>\"\n- name: Ceph_body\n  rule: body=\"class=\\\"ceph-none-found\\\" rv-hide=\\\"rbd_pools\"\n- name: CISCO-SIPGateway_header\n  rule: 'header=\"server: cisco-sipgateway\"'\n- name: Canon-MX710-series_body\n  rule: body=\"nowrap>canon mx710 series</td>\"\n- name: Kubernetes Dashboard_header\n  rule: header=\"Kubernetes Dashboard\"\n- name: APISIX_body\n  rule: body=\"Apache APISIX Dashboard\"\n- name: Macrosan-MacroSAN_body\n  rule: body=\"macrosan数据存储设备\"\n- name: APISIX_header\n  rule: 'header=\"Server: APISIX\"'\n- name: Adaptec maxView_header\n  rule: header=\"Adaptec maxView\"\n- name: React_icon_hash\n  rule: icon_hash=\"2285244458\"\n- name: Perfectone-VOIP-Phone_body\n  rule: body=\"color=\\\"#ffffff\\\"><b>login voip\" && body=\"onload=\\\"javascript:document.loginform.user.focus(\"\n- name: RemObjects-DXSock_body\n  rule: body=\"content=\\\"remobjects sdk\" && body=\"remobjects software, llc.\"\n- name: Cloudera-Manager_header\n  rule: 'header=\"set-cookie: cloudera_manager_sessionid=\"'\n- name: Django_body\n  rule: body=\"__admin_media_prefix__\" && body=\"csrfmiddlewaretoken\"\n- name: CBSS automated testing_body\n  rule: body=\"<p>copyright&copy cbss 项目组 自动化测试小组</p>\"\n- name: HD-License-plate-recognition-camera_body\n  rule: body=\"<h3 >系统升级</h3>\" && body=\"action=\\\"sysupgrade.php\"\n- name: IBM-IMM_body\n  rule: body=\"<meta http-equiv=\\\"refresh\\\" content=\\\"0;url=/designs/imm/noscript/noscript_en.php\\\"\n    />\" && body=\"ibm.stg.inlinemessage.messagetypes.msg_critical\" && body=\"<meta http-equiv=\\\"refresh\\\"\n    content=\\\"0;url=/designs/imm/noscript/noscript_en.php\\\" />\" && body=\"/ibmdojo/\"\n- name: Waspd_body\n  rule: body=\"pending waspd activities</font>\"\n- name: PHPYUN人才招聘系统_header\n  rule: header=\"PHPYUN人才招聘系统\"\n- name: SONY-SNC-EP521_header\n  rule: header=\"sony network camera snc-ep521\"\n- name: 联软准入_body\n  rule: body=\"网络准入\" && body=\"leagsoft\" && body=\"redirect\"\n- name: mkonlineplayer音乐在线播放_header\n  rule: header=\"mkonlineplayer音乐在线播放\"\n- name: D_Link-DCS-5220bed_header\n  rule: header=\"basic realm=\\\"dcs-5220bed\\\"\"\n- name: TerraGate_header\n  rule: header=\"TerraGate\"\n- name: Wisdom parking management platform_body\n  rule: body=\"content=\\\"智慧停车管理平台\" && body=\"<div class=\\\"login-tit w320 h72\\\">登录账号</div>\"\n- name: Gravity Forms_header\n  rule: header=\"Gravity Forms\"\n- name: CPG Dragonfly_header\n  rule: header=\"CPG Dragonfly\"\n- name: PageCookery-Microblog_body\n  rule: body=\"powered by <a href=\\\"http://pagecookery.com\"\n- name: Schneider-CitectSCADA_body\n  rule: body=\"<meta http-equiv=\\\"refresh\\\" content=\\\"0; url=/citectscada\\\">\" && body=\"content=\\\"start\n    services, start group, the start group, automation, industrial, software engineering,\n    scada, plc, rtu, rockwell, rockwell automation, allen-bradley, allen bradley,\n    allenbradley, citect, citectscada, kingfisher\"\n- name: V2-Video-Conferencing_body\n  rule: body=\"<frame src=\\\"../conference/currentconfaction.do\" && body=\"src=\\\"content.jsp\\\"\"\n- name: SAP-System_header\n  rule: header=\"realm=\\\"sap-system\"\n- name: Cisco-Broadband-Access-Center_header\n  rule: header=\"realm=\\\"cisco_ccsp_cwmp_tcpcr\"\n- name: innotube-Manager_body\n  rule: body=\"images/intro/lin_bottom_nocr.gif\"\n- name: Webbased-PEAR-Package-Manager_body\n  rule: body=\"pear_frontend_web\" && body=\"<img src=\\\"?img=pear\\\" width=\\\"104\\\" height=\\\"50\\\"\n    vspace=\\\"2\\\" hspace=\\\"5\\\" alt=\\\"pear\\\">\"\n- name: STAR CMS_body\n  rule: body=\"content=\\\"STARCMS\" && body=\"<img alt=\\\"STAR CMS\"\n- name: 百度在线web编辑器_body\n  rule: body=\"ueditor.all.js\" && body=\"UE.getEditor\"\n- name: Chorus_header\n  rule: header=\"Chorus\"\n- name: wdCP cloud host management system_icon_hash\n  rule: icon_hash=\"255892555\"\n- name: hispider-Router_body\n  rule: body=\"action=\\\"login.pl\\\" method=\\\"post\\\"  onsubmit=\\\"encryptpasswd(\"\n- name: QPCOM路由器_header\n  rule: header=\"QPCOM路由器\"\n- name: NETGEAR R7100LG_header\n  rule: header=\"NETGEAR R7100LG\"\n- name: Reliable Controls MACH-ProWebCom_header\n  rule: header=\"Reliable Controls MACH-ProWebCom\"\n- name: Moxa-Serial-Device-Server_header\n  rule: header=\"moxahttp\"\n- name: Websociety CMS_header\n  rule: header=\"Websociety CMS\"\n- name: OKI-Printer_header\n  rule: header=\"okidata-httpd\"\n- name: Chevereto_header\n  rule: header=\"Chevereto\"\n- name: SuperMap-GIS_body\n  rule: body=\"北京超图软件股份有限公司\"\n- name: WEB-ERP-Network-System_body\n  rule: body=\"window.location='/www/login.html'\"\n- name: PyroCMS_header\n  rule: header=\"PyroCMS\"\n- name: adslr-NFW_body\n  rule: body=\"href=\\\"/css/cover_admin.css\\\"\"\n- name: ASUS-RT-AC66U_body\n  rule: body=\"class=\\\"prod_madelname\\\" style=\\\"margin-left:78px;\\\">rt-ac66u\" && body=\"prod_madelname\\\">rt-ac66u\"\n    && body=\"class=\\\"prod_madelname\\\" style=\\\"margin-left:78px;\\\">rt-ac66u\"\n- name: RemObjects-DXSock_header\n  rule: header=\"remobjects\"\n- name: ASUS-RT-AC66U_header\n  rule: header=\"rt-ac66u\"\n- name: IPS Community Suite_header\n  rule: header=\"IPS Community Suite\"\n- name: 360-Skyeye_body\n  rule: body=\"/index.bundle.872998a4.js\" && body=\"src=\\\"/static/img/skyeye-logo-big.png\\\">\"\n- name: Linksys Teo_header\n  rule: header=\"Linksys Teo\"\n- name: CWP-ControlPanel_body\n  rule: body=\"href=\\\"/login/cwp_theme/original/img/ico/favicon.ico\\\"\" && body=\"src=\\\"/login/cwp_theme/original/img/new_logo_small.png\\\"\"\n- name: Zyxel-USG20W_body\n  rule: body=\" class=\\\"usg_icon\\\"\"\n- name: SECCN VPN_header\n  rule: header=\"SECCN VPN\"\n- name: 安恒明御运维审计与风险控制系统_header\n  rule: header=\"安恒明御运维审计与风险控制系统\"\n- name: MOBOTIX-M24_body\n  rule: body=\"<span class=\\\"bold featurestypeinfo\\\">m24\"\n- name: Tongda_icon_hash\n  rule: icon_hash=\"-759108386\"\n- name: Hikvision iVMS-8300_header\n  rule: header=\"Hikvision iVMS-8300\"\n- name: DuxShop_header\n  rule: header=\"DuxShop\"\n- name: IW_icon_hash\n  rule: icon_hash=\"896412703\"\n- name: NETGEAR WN2000RPT_header\n  rule: header=\"NETGEAR WN2000RPT\"\n- name: TurboCMS_body\n  rule: body=\"Powered by TurboCMS\" && body=\"/cmsapp/count/newstop_index.jsp?siteid=\"\n- name: LINKSYS-DISCOVERY_header\n  rule: header=\"LINKSYS-DISCOVERY\"\n- name: ForestBlog_header\n  rule: header=\"ForestBlog\"\n- name: HUAWEI TE_header\n  rule: header=\"HUAWEI TE\"\n- name: 78 OA_body\n  rule: body=\"/resource/javascript/system/runtime.min.js\" && body=\"password\"\n- name: NETGEAR-DGN2000_header\n  rule: header=\"netgear dgn2000 \"\n- name: Hillstone-SG-6000_header\n  rule: 'header=\"content-length: 5726\"'\n- name: Blazor_header\n  rule: header=\"Blazor\"\n- name: Coremail_body\n  rule: 'body=\"/coremail/common/\" && body=\"action=\\\"/coremail/index.jsp\" && body=\"fmt_logoalt:\n    \\\"coremail 电子邮件系统\"'\n- name: 中网可信网站权威数据库_body\n  rule: body=\"https://ss.knet.cn/verifyseal.dll\"\n- name: Alternate-Protocol_header\n  rule: header=\"Alternate-Protocol\"\n- name: HP Compact Server_header\n  rule: header=\"HP Compact Server\"\n- name: 金蝶云星空_body\n  rule: body=\"HTML5/content/themes/kdcss.min.css\" && body=\"/ClientBin/Kingdee.BOS.XPF.App.xap\"\n- name: Simple-Phishing-Toolkit_body\n  rule: body=\"<span id=\\\"spt\\\"><a href=\\\"http://www.sptoolkit.com/download/\\\" target=\\\"_blank\\\">\"\n    && body=\"content=\\\"welcome to spt - simple phishing toolkit.  spt is a super simple\n    but powerful phishing toolkit.\\\" />\"\n- name: NetData Embedded HTTP Server_header\n  rule: header=\"NetData Embedded HTTP Server\"\n- name: QNAP NAS Virtualization Station_icon_hash\n  rule: icon_hash=\"-1041180225\"\n- name: SMF论坛_Simple_Machines_Forum_header\n  rule: header=\"SMF论坛_Simple_Machines_Forum\"\n- name: CirCarLife Scada_header\n  rule: header=\"CirCarLife Scada\"\n- name: 天融信僵木蠕监控集中管理平台_header\n  rule: header=\"天融信僵木蠕监控集中管理平台\"\n- name: Rockoa-OA_body\n  rule: body=\"onclick=\\\"loginsubmit(\\\"\" && body=\"信呼开发团队\" && body=\"技术支持：<a href=\\\"http://www.rockoa.com/\\\"\"\n- name: EFM-Networks-ipTIME-N6004R_body\n  rule: body=\"src=\\\"/images2/login_title.n6004r.gif\\\"\"\n- name: Linksys WAG54GX2_header\n  rule: header=\"Linksys WAG54GX2\"\n- name: Quick.Cart_header\n  rule: header=\"Quick.Cart\"\n- name: Hanwha-PRN-4011_body\n  rule: body=\"$.nvr.model_name=\\\"prn-4011\\\"\"\n- name: Linksys EA2700_header\n  rule: header=\"Linksys EA2700\"\n- name: NSFOCUS-WVSS_body\n  rule: body=\"url:'/accounts/treaty/'\" && body=\"nsfocus wvss\"\n- name: Video-Conferencing_body\n  rule: body=\"<a href=http://www.vmediax.com target=\" && body=\"href=\\\"/vr2conf/themes/vidyo/vidyo.css\"\n- name: GearHost_header\n  rule: 'header=\"hosted-with: gearhost\" && header=\"hosted-by: gearhost\" && header=\"GearHost\"'\n- name: 360网神防火墙系统_body\n  rule: body=\"resources/image/logo_header.png\" && body=\"360\" && body=\"网神防火墙系统\"\n- name: Tass-SRJ1303_body\n  rule: body=\"resources/js/utilfunction.js\"\n- name: openWRT Luci_icon_hash\n  rule: icon_hash=\"-675839242\" && icon_hash=\"1941381095\"\n- name: wiserice-System_body\n  rule: body=\"/resources/metronic/scripts/hz-tools.js\" && body=\"<h4>请在下框里画图形来提交登录\"\n- name: PaloAlto-Networks-SSO_body\n  rule: body=\" 2015 palo alto networks, inc. \"\n- name: teradata-Parallel_body\n  rule: body=\"var currentmode ='fittowindowonload\"\n- name: Cisco-VDS_header\n  rule: header=\"cisco-vds\" && header=\"Cisco-VDS\"\n- name: EasyMeeting 会讯通_header\n  rule: header=\"EasyMeeting 会讯通\"\n- name: NETGEAR WN2000RPTv2_header\n  rule: header=\"NETGEAR WN2000RPTv2\"\n- name: Ninja-Web-Server_header\n  rule: header=\"Ninja-Web-Server\"\n- name: ufttt-IOT_body\n  rule: body=\"src=\\\"sdkjs/uftttsdk2.js\\\"\"\n- name: Technicolor / Thomson Speedtouch (Network / ADSL)_icon_hash\n  rule: icon_hash=\"156312019\"\n- name: Twonky Server (Media Streaming)_icon_hash\n  rule: icon_hash=\"-878891718\"\n- name: Tableau_icon_hash\n  rule: icon_hash=\"-1441956789\"\n- name: NETGEAR-R7000+_header\n  rule: header=\"netgear r7000+\"\n- name: HUAWEI-HG8546M_body\n  rule: body=\"var productname = 'hg8546m\" && body=\"var productname = 'hg8546m';\"\n- name: Coremail_icon_hash\n  rule: icon_hash=\"541942600\"\n- name: DIGI-TransPort-WR21_body\n  rule: body=\"class=\\\"heading\\\">transport wr21\"\n- name: HIKVISION-CloudVideo_body\n  rule: body=\"嗨看云视频</p>\"\n- name: HUAWEI-EchoLife-HG850a_body\n  rule: body=\"onkeydown='return onhandlekeydown(event\"\n- name: Open-Source-Ticket-Request-System_body\n  rule: body=\"href=\\\"mailto:otrs@bearingpoint.com\" && body=\"src=\\\"/otrs-web/images/\"\n- name: SANGFOR-ManagementSystem_body\n  rule: body=\"/cgi-bin/login.cgi?requestname=\" && body=\"var msg = '对不起，集中管理平台暂不支持您当前使用的浏览器\"\n    && body=\"var msg = '对不起, '+str+'暂不支持您当前使用的浏览器\"\n- name: OPENedX_header\n  rule: header=\"OPENedX\"\n- name: Ultimus-BPM_body\n  rule: body=\"url=iportal/login.aspx\"\n- name: David-WebBox_header\n  rule: header=\"David-WebBox\"\n- name: BlueCoat-ProxySG_header\n  rule: header=\"bluecoat internet proxy\"\n- name: LINKSYS-E1200_body\n  rule: body=\"linksys e1200\"\n- name: LINKSYS-E1200_header\n  rule: header=\"linksys e1200\"\n- name: OpenWrt_header\n  rule: header=\"realm=\\\"openwrt\"\n- name: xtCommerce_header\n  rule: header=\"xtCommerce\"\n- name: Percona_header\n  rule: header=\"Percona\"\n- name: 第三方国际包裹处理系统(ROMS)_body\n  rule: body=\"第三方国际包裹处理系统\" && body=\"ROMS\"\n- name: XMall_body\n  rule: body=\"xmadmin.exirck.cn\"\n- name: SentCMS_header\n  rule: header=\"SentCMS\"\n- name: PCS-G50-Web-Control_header\n  rule: header=\"realm=\\\"pcs-g50 web control\"\n- name: Aethra-Telecommunications-OS_header\n  rule: header=\"atos\"\n- name: Axence nVision WebAccess HTTP Server_header\n  rule: header=\"Axence nVision WebAccess HTTP Server\"\n- name: 海昌协同办公系统_header\n  rule: header=\"海昌协同办公系统\"\n- name: LPSE_body\n  rule: body=\"href=\\\"/eproc/assets/application.css\"\n- name: AxCMS_net_header\n  rule: header=\"AxCMS.net\"\n- name: SONY-Network-Camera-SNC-f_header\n  rule: header=\"basic realm=\\\"sony network camera snc-f\\\"\"\n- name: Sina-SAE_header\n  rule: header=\"internal.sinaapp.com\"\n- name: Xfinity-Comcast-Business-Gateway_body\n  rule: body=\"comcast business gateway\"\n- name: lynxspring_JENEsys_body\n  rule: body=\"LX JENEsys\"\n- name: TRENDnet-TV-IP551WI_body\n  rule: body=\"(tv-ip551wi</title>\"\n- name: Check-Point-SSL-Network-Extender_header\n  rule: header=\"Check Point SVN foundation\"\n- name: Advert Stream_header\n  rule: header=\"Advert Stream\"\n- name: Symantec-thawte_ssl_cert_body\n  rule: body=\"https://seal.thawte.com/getthawteseal\"\n- name: ZKTECO 百傲瑞达安防管理系统平台_header\n  rule: header=\"ZKTECO 百傲瑞达安防管理系统平台\"\n- name: NETGEAR WGT624v4_header\n  rule: header=\"NETGEAR WGT624v4\"\n- name: ALIBI NVR_icon_hash\n  rule: icon_hash=\"1876585825\"\n- name: wdCP 云主机面板_icon_hash\n  rule: icon_hash=\"1786752597\"\n- name: Tuling-Procurement-Strategy-Management-System_body\n  rule: body=\"长沙图灵科技有限公司\" && body=\"src=\\\"/login/main_body_bg.jpg\\\"\"\n- name: HUAWEI-Secoway-USG2230_header\n  rule: header=\"secoway usg2230\"\n- name: IBM On-Call_header\n  rule: header=\"IBM On-Call\"\n- name: Amazon S3_header\n  rule: header=\"Amazon S3\"\n- name: Skylable-SX_header\n  rule: header=\"Skylable-SX\"\n- name: iAPPS_header\n  rule: header=\"iAPPSCookie\"\n- name: Jirafe_body\n  rule: body=\"jira.webresources\" && body=\"ams-build-number\" && body=\"com.atlassian.plugins\"\n- name: Jirafe_header\n  rule: header=\"atlassian.xsrf.token\"\n- name: Craft CMS_header\n  rule: header=\"Craft CMS\"\n- name: InfiNet Wireless | WANFleX (Network)_icon_hash\n  rule: icon_hash=\"1648531157\"\n- name: EMC-Documentum-Webtop_body\n  rule: body=\"/webtop/index.js\" && body=\"/webtop/webtop/theme/documentum/css/webtop.css\"\n    && body=\"/webtop/index.js\" && body=\"/webtop/webtop/theme/documentum/css/webtop.css\"\n- name: PANTUM-Printer-P3000_body\n  rule: body=\"function gotosn( {location=\\\"/index.html\"\n- name: 帕拉迪Core4A-UTM_icon_hash\n  rule: icon_hash=\"3928629595\"\n- name: 帕拉迪Core4A-UTM_title\n  rule: title=\"帕拉迪Core4A-UTM\"\n- name: VMware Workspace ONE Access_body\n  rule: body=\"VMware Workspace ONE Access\" && body=\"VMware Workspace\" && body=\"Assist\"\n- name: 腾讯 TencentCOS_header\n  rule: header=\"腾讯 TencentCOS\"\n- name: Blazix_header\n  rule: 'header=\"server: blazix java server\" && header=\"Blazix Java Server\"'\n- name: ECJia到家(H5微商城)_header\n  rule: header=\"ECJia到家(H5微商城)\"\n- name: Apache-Spark_body\n  rule: body=\"src=\\\"/static/spark-logo(.*\\.png\\\"\"\n- name: Sina-SAE_body\n  rule: body=\"internal.sinaapp.com\"\n- name: ASUS-RT-AC68P_header\n  rule: header=\"rt-ac68p\"\n- name: topsec-DLP_body\n  rule: body=\"<img src=\\\"static/images/login/loading.gif\\\" /><span id=\\\"message\\\">loading......</span>\"\n- name: linksys-linux_header\n  rule: header=\"linksys-linux\"\n- name: 金智教育人才招聘系统_header\n  rule: header=\"金智教育人才招聘系统\"\n- name: D_Link-DIR-842_body\n  rule: 'body=\"<td><script>i18n(\\\"h\\\", \\\"model name\\\";</script> : dir-842\" && body=\"<h1>dir-842\n    login</h1>\"'\n- name: SimpleHelp (Remote Support)_icon_hash\n  rule: icon_hash=\"1117165781\"\n- name: Elcodi_header\n  rule: header=\"Elcodi\"\n- name: chimee_header\n  rule: header=\"chimee\"\n- name: IP-guard_body\n  rule: body=\"IP-guard\" && body=\"sign/login\"\n- name: Apache-Traffic-Server_header\n  rule: header=\"apachetrafficserver\" && header=\"ApacheTrafficServer\"\n- name: IBM WebSphere Application_header\n  rule: header=\"IBM WebSphere Application\"\n- name: 智慧型電能監控管理系統_header\n  rule: header=\"智慧型電能監控管理系統\"\n- name: ZZZCMS_body\n  rule: body=\"href=\\\"/?brandlist/zzzcms\" && body=\".banner .in_business ul li dd\"\n- name: V2 Conference 视频会议系统_body\n  rule: body=\"window.location.href=\\\"/Conf/index.jsp\\\"\"\n- name: TP-Link 740N_header\n  rule: header=\"TP-Link 740N\"\n- name: Thinker-IntelligentGateway_body\n  rule: body=\"智能网关系统<br>\"\n- name: NOS Router_icon_hash\n  rule: icon_hash=\"-831826827\"\n- name: opencms_body\n  rule: body=\"content=\\\"OpenCms\" && body=\"Powered by OpenCms\"\n- name: TP-LINK Wireless WR941N/942N_header\n  rule: header=\"TP-LINK Wireless WR941N/942N\"\n- name: LiveBOS Manager管理控制平台_icon_hash\n  rule: icon_hash=\"3877875895\"\n- name: 3gmeeting_header\n  rule: header=\"3gmeeting\"\n- name: PaloAlto-GlobalProtect_body\n  rule: body=\"global-protect/login.esp\"\n- name: CISCO_VPN_header\n  rule: header=\"webvpn\"\n- name: PageCookery Microblog_header\n  rule: header=\"PageCookery Microblog\"\n- name: Alcatel_Lucent-OS6860E-24_body\n  rule: body=\"<span>device os6860e-24\"\n- name: LiveBOS Manager管理控制平台_title\n  rule: title=\"LiveBOS控制台\"\n- name: Laravel_body\n  rule: body=\"<title>Laravel</title>\" && body=\"PhpDebugBar.Widgets.LaravelSQLQueriesWidget\"\n    && body=\"<a href=\\\"https://laravel.com/docs\\\">Documentation</a>\" && body=\"<a href=\\\"https://laravel.com/docs\\\">Docs</a>\"\n    && body=\"<a href=\\\"https://github.com/laravel/laravel\\\">GitHub</a>\"\n- name: ZyXEL-VES-ADSL_header\n  rule: header=\"realm=\\\"ves-\"\n- name: Arab-Portal_body\n  rule: 'body=\"powered by: arab\" && body=\"Powered by: Arab\"'\n- name: CMS4J_body\n  rule: body=\"href=\\\"/cms4jadmin/login.jsp\" && body=\"method=\\\"post\\\" name=\\\"cms4jsearchform\\\"\n    id=\\\"cms4jsearchform\"\n- name: NETGEAR VEGN2610_header\n  rule: header=\"NETGEAR VEGN2610\"\n- name: 网易企业邮箱_body\n  rule: body=\"frmvalidator\"\n- name: Citrix-XenServer_body\n  rule: body=\"citrix systems, inc. xenserver\" && body=\"<a href=\\\"xencentersetup.exe\\\">xencenter\n    installer</a>\" && body=\"Citrix Systems, Inc. XenServer\" && body=\"<a href=\\\"XenCenterSetup.exe\\\">XenCenter\n    installer</a>\"\n- name: KYOCERA-Printer_header\n  rule: 'header=\"server: km-mfp-http\"'\n- name: Laravel_header\n  rule: 'header=\"set-Cookie: laravel_session=\"'\n- name: CMS-Made-Simple_body\n  rule: body=\"content=\\\"CMS Made Simple\"\n- name: AWStats网站日志分析工具_body\n  rule: body=\"content=\\\"AWStats\" && body=\"Created by awstats\"\n- name: AV-TECH Video Web_header\n  rule: header=\"AV-TECH Video Web\"\n- name: KYOCERA-Printer_body\n  rule: body=\"var modelname=\\\"fs-\" && body=\"var currentpage=\\\"\\\";\" && body=\"var modelname=\"\n- name: Chef Automate_icon_hash\n  rule: icon_hash=\"-276759139\"\n- name: Canon-MG5300-series_body\n  rule: body=\"nowrap>canon mg5300 series</td>\"\n- name: ASUS-RT-AC68P_body\n  rule: body=\"<div class=\\\"prod_madelname\\\">rt-ac68p\"\n- name: E-Tiller_body\n  rule: body=\"北京勤云\" && body=\"reader/view_abstract.aspx\" && body=\"reader/view_abstract.aspx\"\n    && body=\"北京勤云\"\n- name: Polycom-RSS-Record_body\n  rule: body=\"window.location.replace(\\\"/rss/\\\"\"\n- name: NETGEAR WNR612ERT_header\n  rule: header=\"NETGEAR WNR612ERT\"\n- name: FIAMM-Camera_body\n  rule: body=\"fiamm. all rights reserved.\" && body=\"vb.htm?authority3=\"\n- name: TCExam_body\n  rule: body=\"<a name=\\\"topofdoc\\\" id=\\\"topofdoc\\\"></a>\" && body=\"content=\\\"nicola\n    asuni - tecnick.com s.r.l.\\\" />\"\n- name: Dandian-CRM_body\n  rule: body=\"url=general/erp/login/\" && body=\"content=\\\"单点crm系统\" && body=\"客户关系管理-crm\"\n- name: WebAsyst-Shop-Script_body\n  rule: 'body=\"<a href=\\\"http://www.shop-script.com\" && body=\"powered by webasyst\n    shop-script <a href=\\\"http://www.shop-script.com/\\\" style=\\\"font-weight: normal\\\">shopping\n    cart software</a>\"'\n- name: Phenomic_header\n  rule: header=\"Phenomic\"\n- name: ASUS-Router_body\n  rule: body=\"asuswrt\"\n- name: Traccar GPS tracking_icon_hash\n  rule: icon_hash=\"-335153896\"\n- name: Raytheon-DSP-2_body\n  rule: 'body=\"<b>unit name: dsp-2</b></center>\" && body=\"raytheon corporation\"'\n- name: Comanche_header\n  rule: header=\"Comanche\"\n- name: ZiGuangHuaYu-Attendance Management System_body\n  rule: body=\"广州紫光华宇信息技术有限公司\"\n- name: D_Link-DCS-4622_body\n  rule: 'body=\"Document Error: Unauthorized\"'\n- name: zyxel-XGS3700_header\n  rule: header=\"realm=\\\"xgs3700\"\n- name: AxCMS_net_body\n  rule: body=\"content=\\\"AxCMS.net\" && body=\"Generated by AxCMS.net\"\n- name: biept-System_body\n  rule: body=\"class=\\\"loginin loginin1\\\"\"\n- name: Adobe-Flex_body\n  rule: body=\"learn more about flex at http://flex.org\"\n- name: Simple Analytics_header\n  rule: header=\"Simple Analytics\"\n- name: IndusGuard-WAF_body\n  rule: body=\"wafportal/wafportal.nocache.js\"\n- name: Yepcomm_header\n  rule: header=\"Yepcomm\"\n- name: Canon-MX520-series_body\n  rule: body=\"nowrap>canon mx520 series</td>\"\n- name: TaoDiCMS_header\n  rule: header=\"TaoDiCMS\"\n- name: Cisco 8600路由器_header\n  rule: header=\"Cisco 8600\"\n- name: PHPads_header\n  rule: header=\"PHPads\"\n- name: JSPGOU_header\n  rule: header=\"JSPGOU\"\n- name: GPON-Home-Gateway_body\n  rule: body=\"/gponform/loginform\" && body=\"xwebpagename\"\n- name: Hanwha-SNP-6230RH_body\n  rule: body=\"var defaultfilename = \\\"snp-6230rh\\\"\"\n- name: OpenPHPNuke_header\n  rule: header=\"OpenPHPNuke\"\n- name: Squid_header\n  rule: 'header=\"server: squid\"'\n- name: phpPgAdmin_body\n  rule: body=\"class=\\\"appname\\\">phppgadmin\"\n- name: OXID eShop_header\n  rule: header=\"OXID eShop\"\n- name: 科达视讯云_header\n  rule: header=\"科达视讯云\"\n- name: Yahoo! Tag Manager_header\n  rule: header=\"Yahoo! Tag Manager\"\n- name: 优酷土豆路由宝_header\n  rule: header=\"优酷土豆路由宝\"\n- name: etcd-viewer_body\n  rule: body=\"<a class=\\\"navbar-brand\\\" href=\\\"./home\\\">etcd viewer</a>\"\n- name: Sungoin-Traffic-management-platform_body\n  rule: body=\"尚景流量管理平台\"\n- name: graylog_body\n  rule: body=\"org.graylog.plugins.pipelineprocessor.processorplugin\"\n- name: H3C-ER2200G2_body\n  rule: body=\"\\\"=aaaaaaaa\"\n- name: TP-LINK R480E_header\n  rule: header=\"TP-LINK R480E\"\n- name: TOTO_LINK-N300RA_body\n  rule: body=\"src =\\\"/images/login_back_zn300ra.gif\\\"\"\n- name: Oceansoft_body\n  rule: body=\"江苏欧索软件有限公司\" && body=\"/ocensoftcomm.js\" && body=\"技术支持：<a href=\\\"http://www.oceansoft.com.cn/\\\">\"\n    && body=\"aspx/casecenter/acasecenter.aspx?pagetype=sxcx&casetype=sscs&casename=\"\n    && body=\"href=\\\"/e/action/listinfo/?\" && body=\"江苏欧索\"\n- name: Webgrind_body\n  rule: body=\"<span id=\\\"invocation_sum\\\"></span> different functions called in <span\n    id=\\\"runtime_sum\"\n- name: Custom-CMS_body\n  rule: body=\"content=\\\"CustomCMS\"\n- name: NETGEAR-R6220_header\n  rule: header=\"netgear r6220\"\n- name: NSTC-Software_body\n  rule: body=\"skysz.fw.index.validatecodenew = \\\"/loginaction/validatecodenew.html\"\n- name: ARRIS (Network)_icon_hash\n  rule: icon_hash=\"-360566773\"\n- name: Intraxxion-CMS_body\n  rule: body=\"content=\\\"Intraxxion\" && body=\"<!-- site built by Intraxxion\"\n- name: ZEBRA-105SLPlus-300dpi-ZPL_body\n  rule: body=\"ztc 105slplus-300dpi zpl</h1>\"\n- name: EFM-Networks-ipTIME-G304_body\n  rule: body=\"src =\\\"/images2/login_title.g304.gif\\\"\"\n- name: TP-LINK-TD-W8968_header\n  rule: header=\"tp-link td-w8968\"\n- name: Varnish_header\n  rule: header=\"x-varnish\" && header=\"X-Varnish\"\n- name: LG-65UM6900PUA_body\n  rule: body=\"<modelnumber>65um6900pua</modelnumber>\"\n- name: 击掌CMS_body\n  rule: body=\"击掌CMS\"\n- name: Automattic_header\n  rule: header=\"Automattic\"\n- name: TP-LINK Gigabit Broadband VPR600VPN_header\n  rule: header=\"TP-LINK Gigabit Broadband VPR600VPN\"\n- name: iDS联网数字标牌管理系统_title\n  rule: title=\"iDS联网数字标牌管理系统\"\n- name: QingCloud_body\n  rule: body=\"content=\\\"云之基石，自由计算。qingcloud 青云为您提供按需分配、弹性可伸缩的计算能力。\\\"\"\n- name: CERN_header\n  rule: header=\"CERN\"\n- name: CameraLife_body\n  rule: body=\"content=\\\"camera life\" && body=\"this site is powered by camera life\"\n    && body=\"content=\\\"Camera Life\" && body=\"This site is powered by Camera Life\"\n- name: QingCloud_header\n  rule: header=\"qingcloudelb\" && header=\"QINGCLOUDELB\"\n- name: graylog_header\n  rule: header=\"x-graylog-node-id\" && header=\"basic realm=\\\"graylog \\\"\" && header=\"graylog\"\n- name: Fedora_header\n  rule: header=\"Fedora\"\n- name: Seagull-PHP-Framework_body\n  rule: body=\"var sgl_js_sessid\"\n- name: EFM-Networks-ipTIME-T24000_body\n  rule: body=\"src=\\\"/images2/login_title.t24000.gif\\\"\"\n- name: Consul-HashiCorp_body\n  rule: body=\"/ui/assets/consul-ui\" && body=\"consul-ui/configs/environment\" && body=\"consulhost\"\n    && body=\"consul instance\" && body=\"www.consul.io\"\n- name: ipTIME-EW302N_body\n  rule: body=\"src=\\\"/images2/login_title.ew302.gif\\\"\" && body=\"src=\\\"/images2/login_title.ew302nr.gif\\\"\"\n- name: CMS-Made-Simple_header\n  rule: header=\"CMSSESSID\"\n- name: daydao-System_body\n  rule: body=\"我被修改啦.哈哈\"\n- name: 360vision-Cameras-and-Surveillance_body\n  rule: body=\"<frame src=\\\"glogon.htm\\\"/>\"\n- name: TP-LINK WR820N_header\n  rule: header=\"TP-LINK WR820N\"\n- name: Komodo CMS_header\n  rule: header=\"Komodo CMS\"\n- name: 佳能网络摄像头 (Canon Network(Cameras)_body\n  rule: body=\"佳能网络摄像头 (Canon Network\" && body=\"Cameras\"\n- name: Canon-MX340-series_body\n  rule: body=\"nowrap>canon mx340 series</td>\"\n- name: DLink-DI-604_header\n  rule: header=\"realm=\\\"di-604\"\n- name: 网康科技·互联网控制网关_title\n  rule: title=\"网康科技·互联网控制网关\"\n- name: POSCMS_header\n  rule: header=\"POSCMS\"\n- name: LG-Smart-TV_body\n  rule: body=\"<modelname>lg smart tv</modelname>\" && body=\"<friendlyname>lg smart\n    tv</friendlyname>\" && body=\"<friendlyname>[lg] smart tv\"\n- name: NETGEAR-GS716Tv3_body\n  rule: body=\"class=\\\"gs716tv3image spacer50percent topalign righthalign\\\"\"\n- name: Xinnet-Enterprise-mail_body\n  rule: body=\"北京新网数码信息技术有限公司 版权所有\"\n- name: Volusion (V1)_header\n  rule: header=\"Volusion (V1)\"\n- name: D-Link-DAR-8000_body\n  rule: body=\"dar-8000\"\n- name: Vesta Hosting Control Panel_icon_hash\n  rule: icon_hash=\"1954835352\"\n- name: Digital-china-Camera_body\n  rule: body=\"神州数码\"\n- name: External-network-security-data-exchange-system_body\n  rule: body=\"/unimas/\"\n- name: Linksys-Smart-Wi-Fi_body\n  rule: body=\"content=\\\"included with your linksys smart wi-fi \"\n- name: Linksys WAG160Nv2_header\n  rule: header=\"Linksys WAG160Nv2\"\n- name: Fork CMS_header\n  rule: header=\"Fork CMS\"\n- name: TrendMicro-Product_body\n  rule: body=\"deep security</h4>\"\n- name: Adyen_header\n  rule: header=\"Adyen\"\n- name: GoCache_header\n  rule: header=\"GoCache\"\n- name: atfuture-System_body\n  rule: body=\"/content/web/theme/skin01/img/p_login_logo01.png\"\n- name: Linksys-USB-HDD_body\n  rule: body=\"href=\\\"management/setup.cgi?next_file=lan.htm\"\n- name: EDIMAX-Router_header\n  rule: 'header=\"realm=\\\"default: admin/1234\"'\n- name: Mustache_header\n  rule: header=\"Mustache\"\n- name: 华为-智能呼叫中心_header\n  rule: header=\"华为-智能呼叫中心\"\n- name: ADM Webserver_header\n  rule: header=\"ADM Webserver\"\n- name: SONY-SNC-ER580_header\n  rule: header=\"realm=\\\"sony network camera snc-er580\"\n- name: Exim smtpd_header\n  rule: header=\"Exim smtpd\"\n- name: Metabase_body\n  rule: body=\"Metabase\" && body=\"/app/assets/img/apple-touch-icon.png\"\n- name: VMware Workspace ONE Access_icon_hash\n  rule: icon_hash=\"3044492955\"\n- name: 阿标_CMS管理系统_body\n  rule: body=\"阿标_CMS管理系统\"\n- name: Yonyou-ERP-NC_body\n  rule: body=\"/nc/servlet/nc.ui.iufo.login.index\"\n- name: Cachelogic-Expired-Domains-Script_body\n  rule: body=\"href=\\\"http://cachelogic.net\\\">Cachelogic.net\"\n- name: Privoxy代理_header\n  rule: header=\"Privoxy\"\n- name: TWebAP_header\n  rule: header=\"TWebAP\"\n- name: AKCMS_body\n  rule: body=\"AKCMS\"\n- name: TRENDnet-TEW-826DAP_body\n  rule: body=\"var model = \\\"tew-826dap\\\"\"\n- name: Simplébo_header\n  rule: header=\"Simplébo\"\n- name: IBM-KVM-switch_body\n  rule: body=\"src=\\\"/avct.js\"\n- name: Mean.io_header\n  rule: header=\"Mean.io\"\n- name: Apereo CAS_header\n  rule: header=\"Apereo CAS\"\n- name: 360-Enterprise-security_body\n  rule: body=\"360entinst\" && body=\"关于全网部署360私有云的通知\" && body=\"私有云控制中心\" && body=\"/download/360inst.exe\"\n- name: Jupyter-Notebook_body\n  rule: body=\"<div id=\\\"ipython-main-app\\\" class=\\\"container\\\">\" && body=\"<div id=\\\"ipython_notebook\\\"\n    class=\\\"nav navbar-brand\\\">\"\n- name: Alpha Anywhere Application Server_header\n  rule: header=\"Alpha Anywhere Application Server\"\n- name: TRENDnet-TV-IP430PI_header\n  rule: header=\"realm=\\\"tv-ip430pi\"\n- name: Portainer (Docker Management)_icon_hash\n  rule: icon_hash=\"-1424036600\"\n- name: 朗新天霁人力资源管理系统_body\n  rule: body=\"hrsoft.com.cn\" && body=\"chkLogindiv\" && body=\"CustStyle\"\n- name: FeiFeiCMS_header\n  rule: header=\"FeiFeiCMS\"\n- name: NukeViet_header\n  rule: header=\"NukeViet\"\n- name: FeiFeiCMS_body\n  rule: body=\"feifeicms\"\n- name: GoodSyncServer_header\n  rule: header=\"GoodSyncServer\"\n- name: unimas-CameraAudit_body\n  rule: body=\"txtpasswordcssclass\"\n- name: AADServer HTTP Server_header\n  rule: header=\"AADServer HTTP Server\"\n- name: Mac-OSX-Server_header\n  rule: header=\"realm=\\\"mac os x server\"\n- name: FluentNET_body\n  rule: body=\"content=\\\"Fluent\"\n- name: Apache Flink_header\n  rule: header=\"Apache Flink\"\n- name: WebIssues_body\n  rule: body=\"<div id=\\\"header-right\\\">webissues\" && body=\"<div><input type=\\\"hidden\\\"\n    name=\\\"__formid\\\" id=\\\"field-login-__formid\\\" value=\\\"login\\\" />\"\n- name: Walle瓦力平台_header\n  rule: header=\"Walle瓦力平台\"\n- name: 海天OA_body\n  rule: body=\"HTVOS.js\"\n- name: Panasonic-Ethernet-webcam_body\n  rule: body=\"content=\\\"ncs g 2062\\\"\"\n- name: DreamWeaver_header\n  rule: header=\"DreamWeaver\"\n- name: MDaemon-email-server_body\n  rule: body=\"/worldclient.dll?view=main\" && body=\"<strong>mdaemon/worldclient\"\n- name: Subrion-CMS_body\n  rule: body=\"href=\\\"http://www.subrion.com\" && body=\"content=\\\"subrion cms\"\n- name: ZyXEL-NBG6616_body\n  rule: body=\"<li class=\\\"modelname\\\">nbg6616</li>\"\n- name: Subrion-CMS_header\n  rule: 'header=\"x-powered-cms: subrion cms\"'\n- name: Smartstore_header\n  rule: header=\"Smartstore\"\n- name: Combeenation_header\n  rule: header=\"Combeenation\"\n- name: Ability Server_header\n  rule: header=\"Ability Server\"\n- name: Canon-MP620-series_body\n  rule: body=\"nowrap>canon mp620 series</td>\"\n- name: Metabase_icon_hash\n  rule: icon_hash=\"1953726032\"\n- name: SONY-SNC-WR630_header\n  rule: header=\"realm=\\\"snc-wr630\"\n- name: yunmok_header\n  rule: header=\"yunmok\"\n- name: Sidao-OA_body\n  rule: body=\"关于：思道OA\" && body=\"思道OA v(.* Powered by (.*\"\n- name: Leagsoft-IT-_body\n  rule: body=\"action=\\\"/manager/logincontroller.htm?act=login\"\n- name: PowerCreator CMS_header\n  rule: header=\"PowerCreator CMS\"\n- name: Avocent-Remote-management_body\n  rule: body=\"avocent corporation\"\n- name: Payara Server_header\n  rule: header=\"Payara Server\"\n- name: tulingtech-System_body\n  rule: body=\"href=\\\"/content/login-ui/static/h-ui.admin/css/h-ui.login.css\\\"\"\n- name: HP-ProLiant-ML350_header\n  rule: header=\"proliant-ml350\"\n- name: URP-综合教务系统_header\n  rule: header=\"URP-综合教务系统\"\n- name: iWebSNS_body\n  rule: body=\"/jooyea/images/sns_idea1.jpg\" && body=\"/jooyea/images/snslogo.gif\" &&\n    body=\"/jooyea/images/sns_idea1.jpg\" && body=\"/jooyea/images/snslogo.gif\"\n- name: TopSec VPN_header\n  rule: header=\"TopSec VPN\"\n- name: TP-LINK R460_header\n  rule: header=\"TP-LINK R460\"\n- name: NSFOCUS SG安全网关_header\n  rule: header=\"NSFOCUS SG安全网关\"\n- name: Kedacom-Redundant-Arrays-of-Independent-Drives（RAID）_body\n  rule: body=\"href=\\\"kstormon.exe\"\n- name: HFS_body\n  rule: body=\"hfs/\\\">httpfileserver\" && body=\"<a href=\\\"http://www.rejetto.com/hfs/\\\">httpfileserver\n    2.3g</a>\"\n- name: HFS_header\n  rule: header=\"hfs_sid_=\" && header=\"HFS_SID_=\" && header=\"Server:FHFS\" && header=\"Server:HFS\"\n- name: SchoolCMS学校管理系统_header\n  rule: header=\"SchoolCMS学校管理系统\"\n- name: Hsycms(好生意CMS)_body\n  rule: body=\"Hsycms\" && body=\"好生意CMS\"\n- name: jabberd_header\n  rule: 'header=\"server: jabberd\"'\n- name: PCPIN-Chat_body\n  rule: body=\"title=\\\"powered by pcpin chat\" && body=\"onclick=\\\"document.loginform.register.value=0;\n    document.loginform.lostpassword.value=0\" && body=\"window.appname_='pcpin_chat'\"\n- name: NETGEAR WNDR4300_header\n  rule: header=\"NETGEAR WNDR4300\"\n- name: Gravatar_header\n  rule: header=\"Gravatar\"\n- name: SmartCDS_header\n  rule: header=\"smartcds version\" && header=\"x-smartcds-error\"\n- name: TP-LINK Wireless WR742N_header\n  rule: header=\"TP-LINK Wireless WR742N\"\n- name: Apache Roller_header\n  rule: header=\"Apache Roller\"\n- name: Azure CDN_header\n  rule: header=\"Azure CDN\"\n- name: YUNEASY EPX3000配置管理系统_header\n  rule: header=\"YUNEASY EPX3000配置管理系统\"\n- name: D-Link Internet Camera_header\n  rule: header=\"D-Link Internet Camera\"\n- name: 协众 OA_icon_hash\n  rule: icon_hash=\"2828293835\"\n- name: HP-J4812A_header\n  rule: header=\"realm=\\\"hp j4812a\"\n- name: ANECMS_body\n  rule: body=\"content=\\\"erwin aligam - ealigam@gmail.com\" && body=\"content=\\\"Erwin\n    Aligam - ealigam@gmail.com\"\n- name: rack-cache_header\n  rule: header=\"X-Rack-Cache\"\n- name: Quanterra-Q330_body\n  rule: body=\"name=\\\"pwr\\\" value=\\\"turn on baler power\"\n- name: Panasonic-Maintenance-Utility_body\n  rule: body=\"panasonic_logo.gif\"\n- name: OPMS管理系统_header\n  rule: header=\"OPMS管理系统\"\n- name: Spring env_body\n  rule: body=\"servletContextInitParams\" && body=\"logback\"\n- name: Linksys WRVS4400N_header\n  rule: header=\"Linksys WRVS4400N\"\n- name: Linksys WAP200_header\n  rule: header=\"Linksys WAP200\"\n- name: HUAWEI-USG6350_header\n  rule: header=\"huawei usg6350\"\n- name: TP-LINK R490_header\n  rule: header=\"TP-LINK R490\"\n- name: FreePBX_header\n  rule: header=\"realm=\\\"freepbx\" && header=\"freepbx\" && header=\"FreePBX\"\n- name: NSFOCUS NIDS_header\n  rule: header=\"NSFOCUS NIDS\"\n- name: Mautic (Open Source Marketing Automation)_icon_hash\n  rule: icon_hash=\"1273982002\"\n- name: WS-server_body\n  rule: body=\"websocket servers index.html\"\n- name: 网御网络审计系统_header\n  rule: header=\"网御网络审计系统\"\n- name: McAfee-IntruShield_body\n  rule: body=\"intrushield\" && body=\"intruvert\"\n- name: 智慧校园管理系统_body\n  rule: body=\"DC_Login/QYSignUp\"\n- name: Apache-Struts2_body\n  rule: body=\"struts problem report\" && body=\"there is no action mapped for namespace\"\n    && body=\"no result defined for action and result input\" && body=\"<a href=(.*\\.action(.*</a>\"\n    && body=\"<form id=(.*\\.action(.*\" && body=\"<a href=(.*\\.do(.*</a>\" && body=\"(.*\\.action\"\n    && body=\"(.*\\.do\"\n- name: Blip.tv_header\n  rule: header=\"Blip.tv\"\n- name: Apache-Struts2_header\n  rule: header=\"jsessionid\"\n- name: Belkin-G-Wireless-Router_body\n  rule: body=\"src=\\\"setup_top.htm\\\"\" && body=\"def_pg=\\\"status.stm\\\"\"\n- name: Craft Commerce_header\n  rule: header=\"Craft Commerce\"\n- name: FE-OA_body\n  rule: body=\"js39/flyrise.stopbackspace.js\"\n- name: HP-Blade-Switch_header\n  rule: header=\"realm=\\\"ethernet blade switch for hp\"\n- name: CDR-Stats_body\n  rule: body=\"/static/cdr-stats/js/jquery\" && body=\"/static/cdr-stats/js/jquery\"\n- name: Maygion-IPCamera_header\n  rule: header=\"ipcamera\"\n- name: Maygion-IPCamera_body\n  rule: body=\"product:ipcamera author:xwpcom@gmail.com\"\n- name: Gzsa-Intranet-security_body\n  rule: body=\"gzsa. all rights reserved</span>\"\n- name: 新软科技-极通EWEBS_body\n  rule: body=\"N-soft\" && body=\"ClientDownload.xgi\"\n- name: TP-LINK Wireless WR880N_header\n  rule: header=\"TP-LINK Wireless WR880N\"\n- name: DELL-N1124T-ON_body\n  rule: body=\"class=\\\"login_server_default\\\">n1124t-on\"\n- name: CAYIN-SMP_body\n  rule: body=\"/cgi-bin/wizard_index.cgi\"\n- name: TimeLink_body\n  rule: body=\"link international corp. all rights reserved\" && body=\"<link rel=\\\"shortcut\n    icon\\\" type=\\\"image/png\\\" href=\\\"/timelink/images/favicon.ico\\\"/>\"\n- name: Zidesoft-E6_body\n  rule: body=\"src=\\\"/static/images/login/btn-login.gif\\\"\"\n- name: VAM-Product_body\n  rule: body=\"id=\\\"mymodallabel\\\">login vam system\" && body=\"powered by virtual airlines\n    manager\" && body=\"src=\\\"js/vam.js\\\"\" && body=\"href=\\\"https://virtualairlinesmanager.net/\\\">virtual\n    airlines manager\"\n- name: BASrouter_header\n  rule: header=\"BASrouter\"\n- name: Duracast CMS_header\n  rule: header=\"Duracast CMS\"\n- name: PCITC-File-Management-System_body\n  rule: body=\"js/scripts/common/easyui/jquery.easyui.min.js\"\n- name: SafetyVision NVR_header\n  rule: header=\"SafetyVision NVR\"\n- name: 4images_body\n  rule: body=\"Powered by <b>4images\" && body=\"4homepages\" && body=\"powered by 4images\"\n- name: Linksys WAP54GPE_header\n  rule: header=\"Linksys WAP54GPE\"\n- name: DELL-N3048ET-ON_body\n  rule: body=\"class=\\\"login_server_default\\\">n3048et-on\"\n- name: 4images_header\n  rule: header=\"4images_\"\n- name: ColdFusion_body\n  rule: body=\"/cfajax/\"\n- name: ColdFusion_header\n  rule: header=\"CFTOKEN\"\n- name: VMedia_header\n  rule: header=\"VMedia\"\n- name: BigBangShop_header\n  rule: header=\"BigBangShop\"\n- name: Citrix Web PN Server_header\n  rule: header=\"Citrix Web PN Server\"\n- name: LPSE_header\n  rule: header=\"/eproc/app\"\n- name: TP-LINK WR720N_header\n  rule: header=\"TP-LINK WR720N\"\n- name: 莱克斯 Netoray SMB_header\n  rule: header=\"莱克斯 Netoray SMB\"\n- name: oscshop_header\n  rule: header=\"oscshop\"\n- name: Company's-product_header\n  rule: header=\"realm=\\\"technicolor\"\n- name: HUAWEI-ASG5530_body\n  rule: body=\"('.huawei_title'.html('asg5530'\"\n- name: YiChao-CRMReporting_body\n  rule: body=\"href=\\\"/css/vendors~index.acfeb.css\\\"\"\n- name: iGaming-CMS_body\n  rule: body=\"http://www.igamingcms.com/\"\n- name: 精迅CMS_body\n  rule: body=\"精迅CMS\"\n- name: ABO.CMS_header\n  rule: header=\"abo.cms\" && header=\"ABO.CMS\"\n- name: SJSWPS-OiWPS_header\n  rule: header=\"oracle-iplanet-proxy-server\"\n- name: 联想网御VPN_header\n  rule: header=\"联想网御VPN\"\n- name: Taleo Web Server_header\n  rule: header=\"Taleo Web Server\"\n- name: NetworkResourcesAuxiliaryPlatform_body\n  rule: body=\"<b>网络资源综合支撑辅助平台</b>\"\n- name: PageUp-People_body\n  rule: body=\"powered by pageup people\" && body=\"class=\\\"pageuplink\\\" href=\\\"http://www.pageuppeople.com\"\n- name: AM4SS_body\n  rule: body=\"Powered by am4ss\" && body=\"am4ss.css\"\n- name: 西安金讯通_header\n  rule: header=\"西安金讯通\"\n- name: ThinkOX_body\n  rule: body=\"powered by thinkox\" && body=\"Powered By ThinkOX\" && body=\"thinkox\"\n- name: Canon-iP7200-series_body\n  rule: body=\"nowrap>canon ip7200 series</td>\"\n- name: TRENDnet-TEW-730APO_body\n  rule: body=\"login to the tew-730apo\"\n- name: Safe3 IIS防火墙_header\n  rule: header=\"Safe3 IIS防火墙\"\n- name: Santach-I-Cameras-and-Surveillance_body\n  rule: 'body=\"visibility: inherit; width: 200px; z-index: 2\\\"><a href=\\\"paramlist.html\\\">\"\n    && body=\"//切换iframe 函数0-视频、录像；1-参数、日志\"'\n- name: Etano_body\n  rule: body=\"Powered by <a href=\\\"http://www.datemill.com\" && body=\"Etano</a>. All\n    Rights Reserved.\"\n- name: Cisco (eg:Conference Room Login Page)_icon_hash\n  rule: icon_hash=\"-646322113\"\n- name: JEECMS_body\n  rule: body=\"/r/cms/www\" && body=\"shortcut icon\" && body=\"http://www.jeecms.com\"\n    && body=\"http://www.jeecms.com\" && body=\"JEECMS\"\n- name: TengWeiOA_body\n  rule: body=\"/_common/scripts/global.js\" && body=\"/valcode.aspx\"\n- name: phpMyFAQ_header\n  rule: header=\"phpMyFAQ\"\n- name: Axence Agent Server_header\n  rule: header=\"Axence Agent Server\"\n- name: DataLife Engine_header\n  rule: header=\"DataLife Engine\"\n- name: D_Link-web-camera_header\n  rule: header=\"realm=\\\"administrator or user\\\"\"\n- name: Pagevamp_header\n  rule: header=\"Pagevamp\"\n- name: 九思 OA 协同办公系统_body\n  rule: body=\"/jsoa/login.jsp\"\n- name: Appcues_header\n  rule: header=\"Appcues\"\n- name: 惠尔顿 e地通Socks5 VPN登录系统_title\n  rule: title=\"e地通Socks5 VPN登录系统\"\n- name: 惠尔顿 e地通Socks5 VPN登录系统_header\n  rule: header=\"惠尔顿 e地通Socks5 VPN登录系统\"\n- name: WatchGuard-Firewall_body\n  rule: body=\"/auth_portal/default/logo\" && body=\"watchguard\" && body=\"watchguard\"\n    && body=\"watchguard\" && body=\"watchguard\"\n- name: Avocent-KVM-switch_body\n  rule: body=\"src=\\\"/avct.js\" && body=\"alt=\\\"avocent\"\n- name: LG-50UM7800ENA_body\n  rule: body=\"<modelnumber>50um7800ena</modelnumber>\"\n- name: Maccms_body\n  rule: body=\"src=\\\"/template/paody/images/\"\n- name: Termite_header\n  rule: header=\"realm=\\\"termite-nest\"\n- name: TP-LINK Wireless WA832RE_header\n  rule: header=\"TP-LINK Wireless WA832RE\"\n- name: Niagara Web Server_header\n  rule: header=\"Niagara Web Server\"\n- name: EFM-Networks-ipTIME-N604T_body\n  rule: body=\"src=\\\"/images2/login_title.n604t.gif\\\"\"\n- name: Niagara Web Server_icon_hash\n  rule: icon_hash=\"-676077969\"\n- name: Apusic Application Server_header\n  rule: header=\"Apusic Application Server\"\n- name: Datum-TymServe_header\n  rule: header=\"datm\" && header=\"DATM\"\n- name: IBM-BladeCenter_body\n  rule: body=\"/shared/ibmbch.png\" && body=\"/shared/ibmbcs.png\" && body=\"alt=\\\"ibm\n    bladecenter\"\n- name: Swagger_body\n  rule: body=\"<div id=\\\"swagger-ui\\\"></div>\" && body=\"swagger-ui.css\" && body=\"swagger-ui.js\"\n- name: yadongsoft-FS3_body\n  rule: body=\"神盾fs<sup>3</sup>文档安全共享系统v2.0</div>\"\n- name: 国微CMS政府网站系统_县市门户版_body\n  rule: body=\"国微CMS政府网站系统_县市门户版\"\n- name: Redaxscript_header\n  rule: header=\"Redaxscript\"\n- name: Linksys FW_header\n  rule: header=\"Linksys FW\"\n- name: TP-LINK Wireless WDR6510_header\n  rule: header=\"TP-LINK Wireless WDR6510\"\n- name: Datum-TymServe_body\n  rule: body=\"<h2 align=center>datum tymserve\" && body=\"<H2 ALIGN=CENTER>Datum TymServe\"\n- name: AV-TECH AV787 Video Web Server_header\n  rule: header=\"AV-TECH AV787 Video Web Server\"\n- name: Barracuda-Backup-Server_header\n  rule: header=\"backup_local_locale\" && header=\"BACKUP_LOCAL_LOCALE\"\n- name: Dahua-Cameras-and-Surveillance_header\n  rule: 'header=\"server: dahua drs\"'\n- name: tyxdgroup-Monitor_body\n  rule: body=\"login.ashx?mode=valid\"\n- name: ValleyCMS_body\n  rule: body=\"href=\\\"viewcmscac.do\" && body=\"href=\\\"/viewcmscac.do\"\n- name: zoomnetcom-WLAN_body\n  rule: body=\"var url=\\\"resetwebsvr.php?act=reset\\\";\" && body=\"中太数据 - 集中无线控制器\"\n- name: MaxSite CMS_header\n  rule: header=\"MaxSite CMS\"\n- name: Avaya Media Server_header\n  rule: header=\"Avaya Media Server\"\n- name: Cisco-IOS-XR_header\n  rule: header=\"cisco ios-xr\"\n- name: Dahua-Cameras-and-Surveillance_body\n  rule: body=\"id=\\\"search_card_label\\\" for=\\\"search_plateenable\\\">车牌号码</label>\" &&\n    body=\"dahuartsp\" && body=\"var g_isdeviceinited = true\" && body=\"widget/js/jquery.ui.widget.js\"\n    && body=\"title::com_menu.title_setup\" && body=\"css/playbackindex.css\" && body=\"class=\\\"j_content\n    j_min_width\\\"\" && body=\"j_sub_con j_loginbox\" && body=\"overflow:hidden;background-color\"\n    && body=\"js/urlparser.js\" && body=\"id=\\\"lab_loading\\\" class=\\\"j_load_p\" && body=\"src=\\\"/cap.js\\\"\"\n    && body=\"'nav_margin'.style.visibility = 'visible\" && body=\"web service\" && body=\"/css/oem.css\"\n    && body=\"loginfoot\\\">web视频监控系统\" && body=\"webapp.ability.getwebcap('showgb28181client'\"\n    && body=\"class=\\\"ui-tip-container\\\" id=\\\"remark_modu\\\"\" && body=\"class=\\\"login_inputbox\n    ui-input fn-width163\\\"\" && body=\"tl(\\\"huazhonghua\\\"\" && body=\"var g_isdeviceinited\n    = true\" && body=\"widget/js/jquery.ui.widget.js\" && body=\"title::com_menu.title_setup\"\n    && body=\"css/playbackindex.css\" && body=\"class=\\\"j_content j_min_width\\\"\" && body=\"j_sub_con\n    j_loginbox\" && body=\"overflow:hidden;background-color\" && body=\"js/urlparser.js\"\n    && body=\"id=\\\"lab_loading\\\" class=\\\"j_load_p\" && body=\"src=\\\"/cap.js\\\"\" && body=\"'nav_margin'.style.visibility\n    = 'visible\" && body=\"web service\" && body=\"/css/oem.css\" && body=\"loginfoot\\\">web视频监控系统\"\n    && body=\"webapp.ability.getwebcap('showgb28181client'\" && body=\"class=\\\"ui-tip-container\\\"\n    id=\\\"remark_modu\\\"\" && body=\"class=\\\"login_inputbox ui-input fn-width163\\\"\" &&\n    body=\"tl(\\\"huazhonghua\\\"\"\n- name: HuaWei-Secoway-Firewall_header\n  rule: header=\"secoway\"\n- name: CodePush-server_body\n  rule: body=\"content=\\\"codepush service is hotupdate services\"\n- name: Jira_body\n  rule: body=\"jira.webresources\" && body=\"com.atlassian.plugins\" && body=\"jira.webresources\"\n    && body=\"ams-build-number\" && body=\"com.atlassian.plugins\" && body=\"content=\\\"jira\"\n    && body=\"href=\\\"/secure/AboutPage.jspa\\\">About JIRA</a>\" && body=\"<meta name=\\\"stp-license-product-name\\\"\n    content=\\\"JIRA\\\"/>\"\n- name: Metabase_title\n  rule: title=\"Metabase\"\n- name: PegaRULES_body\n  rule: body=\"unable to logon to the pegarules system\" && body=\"href=\\\"images/pzpegaicon.ico\"\n- name: Intellinet-IP-Camera_body\n  rule: body=\"copyright &copy;  intellinet network solutions\" && body=\"http://www.intellinet-network.com/driver/netcam.exe\"\n    && body=\"Copyright &copy;  INTELLINET NETWORK SOLUTIONS\" && body=\"http://www.intellinet-network.com/driver/NetCam.exe\"\n- name: Advanced-Electron-Forum_body\n  rule: body=\"powered by aef\"\n- name: Yonyou-ERP_body\n  rule: body=\"login_main_bg\" && body=\"login_owner\"\n- name: faqrobot_body\n  rule: body=\"content=\\\"faq客服机器人\" && body=\"南京云问网络技术有限公司\"\n- name: Sogou-Webmaster-Platform_body\n  rule: body=\"sogou_site_verification\"\n- name: Foswiki_header\n  rule: header=\"Foswiki\"\n- name: TP-LINK Wireless WR340G_header\n  rule: header=\"TP-LINK Wireless WR340G\"\n- name: Riskified_header\n  rule: header=\"Riskified\"\n- name: SONY-BRC-H800_header\n  rule: header=\"realm=\\\"brc-h800\"\n- name: Splunk_body\n  rule: body=\"splunk.util.normalizeboolean\"\n- name: TOTO_LINK-N200RS+_body\n  rule: body=\"src =\\\"/images/login_back_n200rs.gif\\\"\"\n- name: WatchGuard-Firewall_header\n  rule: header=\"basic realm=\\\"watchguard\" && header=\"digest realm=\\\"watchguard\"\n- name: Jobsite CMS_header\n  rule: header=\"Jobsite CMS\"\n- name: Company's-product_body\n  rule: body=\"辽宁瑞思科技有限公司&nbsp;&nbsp;&nbsp;&nbsp;版权所有\"\n- name: JEUS_header\n  rule: header=\"Jeus WebContainer\"\n- name: Mashery-Proxy_header\n  rule: 'header=\"server: mashery proxy\" && header=\"x-mashery-\"'\n- name: GeoNode_body\n  rule: body=\"powered by <a href=\\\"http://geonode.org\" && body=\"href=\\\"/catalogue/opensearch\\\"\n    title=\\\"geonode search\" && body=\"Powered by <a href=\\\"http://geonode.org\"\n- name: PowerCDN_header\n  rule: header=\"powercdn\"\n- name: mod_rails_header\n  rule: header=\"mod_rails\"\n- name: 融智兴华 物联网网关_header\n  rule: header=\"融智兴华 物联网网关\"\n- name: shttpd_header\n  rule: header=\"shttpd\"\n- name: CushyCMS_header\n  rule: header=\"_cushy_session\"\n- name: Jimdo_header\n  rule: header=\"Jimdo\"\n- name: STARNET-System_body\n  rule: body=\"var contextpath='/dmb'\"\n- name: SHOP++_header\n  rule: header=\"SHOP++\"\n- name: FiberHome-Fengine_body\n  rule: body=\"<h3><script>document.writeln(lang.lang_login_prompt;</script></h3>\"\n    && body=\"<form name=\\\"form1\\\" action=\\\"/cgi/login.cgi\"\n- name: Aurelia_header\n  rule: header=\"Aurelia\"\n- name: ULTIMUS-BPM_body\n  rule: body=\"content=\\\"ultimus bpm\" && body=\"class=\\\"toptitle\\\">bpm\"\n- name: javashop_body\n  rule: body=\"易族智汇javashop\" && body=\"javashop微信公众号\" && body=\"content=\\\"JavaShop\"\n- name: Daisy_header\n  rule: header=\"x-daisy-version\"\n- name: IP-CAMERA_body\n  rule: body=\"classid='clsid:67f77f18-5272-4875-b983-c7e8af5517e4' codebase='/ocxctrlsvac.cab\"\n    && body=\"#max{background:url(svac.png;width:121px;float:right}\" && body=\"clientbin/vimicro.silverlight.video.xap\"\n- name: D-Link (Network)_icon_hash\n  rule: icon_hash=\"-2031183903\" && icon_hash=\"1081719753\"\n- name: WiseGrid慧敏应用交付网关_icon_hash\n  rule: icon_hash=\"910523681\"\n- name: 泛微 OA_icon_hash\n  rule: icon_hash=\"1578525679\" && icon_hash=\"1578525679\"\n- name: Linksys-CIT400_header\n  rule: header=\"Linksys-CIT400\"\n- name: TP-LINK R480T_header\n  rule: header=\"TP-LINK R480T\"\n- name: PegaRULES_header\n  rule: header=\"pega-rules=\"\n- name: TSM_body\n  rule: body=\"var url = getcontextname( + \\\"?service=ajaxdirect/1/\"\n- name: Alcatel_Lucent-OS9900_body\n  rule: body=\"<span>device os9900\"\n- name: DzzOffice-Product_body\n  rule: body=\"dzz/system/scripts/jquery.jstree.min.js\" && body=\"dzz/scripts/dzz_min.js\"\n    && body=\"<a href=\\\"http://www.dzzoffice.com\\\"\" && body=\"misc.php?mod=sendmail\"\n- name: laravel-admin_body\n  rule: body=\"vendor/laravel-admin/\" && body=\"欢迎登录laravel-admin</p>\"\n- name: LG-OLED55C8PLA_body\n  rule: body=\"<modelname>oled55c8pla</modelname>\"\n- name: phpDealerLocator_body\n  rule: body=\"class=\\\"pythonselect\" && body=\"for=\\\"dealer_radiuss_dealer_zip\"\n- name: 聚同CMS全能网站管理系统_body\n  rule: body=\"聚同CMS全能网站管理系统\"\n- name: Sangfor SSL VPN_body\n  rule: body=\"/por/login_psw.csp\" && body=\"loginPageSP/loginPrivacy.js\"\n- name: SOUTHIDC_body\n  rule: body=\"/southidckefu.js\" && body=\"content=\\\"copyright 2003-2015 - southidc.net\"\n    && body=\"/southidcj2f.js\"\n- name: Spring-Framework_body\n  rule: body=\"org.springframework.web.servlet.i18n.cookielocaleresolver.locale=\" &&\n    body=\"<h1>whitelabel error page</h1>\"\n- name: Netwave camera_header\n  rule: header=\"Netwave camera\"\n- name: jQTouch_header\n  rule: header=\"jQTouch\"\n- name: Ubiquiti Aircube_icon_hash\n  rule: icon_hash=\"1249285083\"\n- name: ASUS-RT-N16_header\n  rule: header=\"ASUS-RT-N16\"\n- name: Oracle-Primerva_body\n  rule: body=\"primavera systems, inc\" && body=\"class=\\\"introareabuildid\" && body=\"com.primavera.detectplugin.detectpluginapplet.class\"\n- name: 霆智科技 VA虚拟应用平台_body\n  rule: body=\"EAA益和应用接入系统\"\n- name: TRENDnet-TV-IP651WI_header\n  rule: header=\"realm=\\\"tv-ip651wi\"\n- name: TRENDnet-TV-IP651WI_body\n  rule: body=\"(tv-ip651wi</title>\" && body=\"<modelname>tv-ip651wi</modelname>\"\n- name: 泛普建筑工程施工OA_body\n  rule: body=\"/dwr/interface/LoginService.js\"\n- name: HuaWei-Video-Conferencing_body\n  rule: body=\"window.location.replace(pathname + \\\"login.html\\\";\"\n- name: YouTrack_header\n  rule: header=\"YouTrack\"\n- name: Saia PCD_header\n  rule: header=\"Saia PCD\"\n- name: Contentful_header\n  rule: header=\"Contentful\"\n- name: 致远OA M1 Server_title\n  rule: title=\"M1-Server\"\n- name: D_Link-DCS-kabinet_header\n  rule: header=\"basic realm=\\\"dcs-kabinet\\\"\"\n- name: phpMyRealty_body\n  rule: 'body=\"<!-- main content table : stop -->\" && body=\"powered by <a href=\\\"http://www.phpmyrealty.com\"'\n- name: Typesetter_CMS_body\n  rule: body=\"Typesetter_CMS\"\n- name: Linksys BEFSR41/BEFSR11/BEFSRU31_header\n  rule: header=\"Linksys BEFSR41/BEFSR11/BEFSRU31\"\n- name: buscape_header\n  rule: header=\"sessao3\"\n- name: PAAJCMS内容管理系统_body\n  rule: body=\"PAAJCMS内容管理系统\"\n- name: All in One SEO Pack_header\n  rule: header=\"All in One SEO Pack\"\n- name: 360天眼流量传感器_header\n  rule: header=\"360天眼流量传感器\"\n- name: Canon-MX880-series_body\n  rule: body=\"nowrap>canon mx880 series</td>\"\n- name: ipTIME-A1004V_body\n  rule: body=\"src=\\\"/images2/login_title.a1004v.gif\\\"\"\n- name: 腾翔安全邮箱_header\n  rule: header=\"腾翔安全邮箱\"\n- name: 易思ESPCMS企业建站管理系统集成包_body\n  rule: body=\"Powered by ESPCMS\"\n- name: FalconStor_body\n  rule: body=\"content=\\\"falconstor\"\n- name: Webix_header\n  rule: header=\"Webix\"\n- name: Stackla_header\n  rule: header=\"Stackla\"\n- name: LiteSpeed-Web-Admin-Console_header\n  rule: header=\"lswswebui\"\n- name: Goldencis-NACP_body\n  rule: body=\"<div class=\\\"tit_b\\\"> 通过管理员分配的密码使用紧急入口。</div>\"\n- name: Play-Framework_header\n  rule: header=\"play! framework\" && header=\"Play! Framework\"\n- name: EdgePrism_header\n  rule: header=\"EdgePrism\" && header=\"EdgePrismSSL\"\n- name: CrushFTP_icon_hash\n  rule: icon_hash=\"-1022206565\"\n- name: Evo-Cam_body\n  rule: body=\"value=\\\"evocam.jar\" && body=\"<applet archive=\\\"evocam.jar\" && body=\"value=\\\"evocam.jar\"\n    && body=\"<applet archive=\\\"evocam.jar\"\n- name: CrushFTP_header\n  rule: header=\"Server:CrushFTP HTTP Server\"\n- name: Snowplow_header\n  rule: header=\"Snowplow\"\n- name: Microsoft-Silverlight_body\n  rule: body=\"get microsoft silverlight\"\n- name: Webtrekk_header\n  rule: header=\"Webtrekk\"\n- name: Softbiz-Online-Auctions-Script_body\n  rule: body=\"powered by <a href=\\\"http://www.softbizscripts.com\"\n- name: Vanguard Server_header\n  rule: header=\"Vanguard Server\"\n- name: RAISECOM-ISCOM3048G_body\n  rule: body=\"color=\\\"#000000\\\">iscom3048g\"\n- name: Venustech-TianQing-Application-Security-Gateway_body\n  rule: body=\"v2/global/vendor/modernizr/modernizr.js\" && body=\"天清web应用安全网关\"\n- name: MagicInfo Premium Server_header\n  rule: header=\"MagicInfo Premium Server\"\n- name: JAMIA AL HIND_header\n  rule: header=\"JAMIA AL HIND\"\n- name: Apache-Solr_body\n  rule: body=\"SolrCore Initialization Failures\" && body=\"ng-app=\\\"solrAdminApp\\\"\"\n- name: Inout web Portal_header\n  rule: header=\"Inout web Portal\"\n- name: LifeSize-Video-Conferencing_body\n  rule: body=\"src=\\\"js/swfobject.js\" && body=\"src=\\\"js/lsjavascript.js\"\n- name: 1039家校通_header\n  rule: header=\"1039家校通\"\n- name: D_Link-DSR-150N_body\n  rule: 'body=\"<div class=\\\"floatl txt01\\\">product page: dsr-150n\"'\n- name: 华为_HUAWEI_SRG1220_header\n  rule: header=\"HUAWEI SRG1220\"\n- name: 快网CDN_header\n  rule: header=\"快网CDN\"\n- name: 将博CMS(JumboTCMS)_body\n  rule: body=\"将博CMS\" && body=\"JumboTCMS\"\n- name: ZyXEL VMG1312-B10D_header\n  rule: header=\"ZyXEL VMG1312-B10D\"\n- name: BITMAIN-antminer_header\n  rule: header=\"realm=\\\"antminer\"\n- name: 将博CMS(JumboTCMS)_header\n  rule: header=\"将博CMS\" && header=\"JumboTCMS\"\n- name: SuperSalon-POS_header\n  rule: header=\"realm=\\\"supersalon pos\"\n- name: SimpleHTTP_header\n  rule: header=\"SimpleHTTP\"\n- name: Gridea_body\n  rule: body=\"Gridea\"\n- name: 昆石网络 VOS2009_header\n  rule: header=\"昆石网络 VOS2009\"\n- name: 牛NIUCMS本地O2O系统_header\n  rule: header=\"牛NIUCMS本地O2O系统\"\n- name: WebCTRL_header\n  rule: header=\"WebCTRL\"\n- name: H3C-5900-G3_body\n  rule: body=\"5900-g3\"\n- name: H3C-5900-G3_header\n  rule: header=\"5900-g3\"\n- name: ShareTech-NU-860H_body\n  rule: body=\"sharetech information co., ltd\"\n- name: shanshanes-System_body\n  rule: body=\"<title>杉杉储能监控平台</title>\" && body=\"amap.mousetool,amap.districtsearch\"\n    && body=\"/dist/libs/layui/css/layui.css\"\n- name: Hanwha-SND-7084_body\n  rule: body=\"var defaultfilename = \\\"snd-7084\\\"\"\n- name: UBNT_UniFi系列路由_body\n  rule: body=\"<div class=\\\"appGlobalHeader\\\">\"\n- name: 同为数码网络摄像头_header\n  rule: header=\"同为数码网络摄像头\"\n- name: Polymer_header\n  rule: header=\"Polymer\"\n- name: AutoIndex-PHP-Script_body\n  rule: body=\"title=\\\"autoindex default\" && body=\"autoindex.sourceforge.net/\"\n- name: AirLink-modem_header\n  rule: header=\"modem@airlink.com\"\n- name: NetGear WNHD3004v2_header\n  rule: header=\"NetGear WNHD3004v2\"\n- name: Linksys BEFSR41C-JP_header\n  rule: header=\"Linksys BEFSR41C-JP\"\n- name: 用友-UFIDA-NC_body\n  rule: body=\"nc.sfbase.applet.NCApplet.class\"\n- name: cradlepoint-IBR1150LP6_body\n  rule: body=\"cplogin.model = \\\"ibr1150lp6\\\";\"\n- name: GoCDN_header\n  rule: header=\"gocdn\"\n- name: SumlyCMS_header\n  rule: header=\"SumlyCMS\"\n- name: SAMSUNG-Wireless-Enterprise_body\n  rule: body=\"<h1>wireless enterprise manager</h1>\"\n- name: 璐华RuvarHRM_header\n  rule: header=\"璐华RuvarHRM\"\n- name: Ghost (CMS)_icon_hash\n  rule: icon_hash=\"-1015932800\" && icon_hash=\"-1231681737\"\n- name: EFM-Networks-ipTIME-N604plus-i_body\n  rule: body=\"src=\\\"/images2/login_title.n604pi.gif\\\"\"\n- name: Tiandy-Cameras-and-Surveillance_body\n  rule: body=\"name=\\\"tiandyvideo\\\" id=\\\"nvsvideo\\\"\" && body=\"<link href=\\\"tdvideo.css\\\"\n    rel=\\\"stylesheet\\\">\" && body=\"refresh\\\" content=\\\"0;url=http:\" && body=\"/index.html\\\">\n    </head> </html>\"\n- name: ZTE-IAD_body\n  rule: body=\"/image/banner_I532.jpg\" && body=\"/image/I202.gif\"\n- name: NETGEAR DGN2200M_header\n  rule: header=\"NETGEAR DGN2200M\"\n- name: phpwind_body\n  rule: body=\"content=\\\"phpwind\" && body=\"phpwind\"\n- name: HuaWei-Enterprise-proxy-server_body\n  rule: body=\"huawei technologies co., ltd.\" && body=\"<form name=\\\"frmlogon\\\" id=\\\"frmlogon\\\"\n    method=\\\"post\\\"  action=\\\"/operatorlogin\\\" onsubmit=\\\"return check(\\\">\"\n- name: Linksys WAG120N_header\n  rule: header=\"Linksys WAG120N\"\n- name: 博华网龙信息安全一体机_title\n  rule: title=\"博华网龙信息安全一体机\"\n- name: DAVOLINK-Router_header\n  rule: 'header=\"set-cookie: acookie=\"'\n- name: Norton-Cloud-Connect_body\n  rule: 'body=\"<h2 style=\\\"margin-left: 0px;\\\">norton cloud connect</h2>\"'\n- name: HOPERUN-HR_body\n  rule: body=\"src=./static/js/manifest\" && body=\"<title>考核评测系统</title>\"\n- name: NetScaler(Citrix Systems)_body\n  rule: body=\"NetScaler\" && body=\"Citrix Systems\"\n- name: TOPSEC-VPN_body\n  rule: body=\"window.location=\\\"/portal_default/index.html\\\";</script>\" && body=\"window.location.href=\\\"/vone/pub/pda.html\\\";\"\n- name: TOPSEC-VPN_header\n  rule: header=\"topsecsvportalname=\"\n- name: Apache HBase_header\n  rule: header=\"Apache HBase\"\n- name: Airform_header\n  rule: header=\"Airform\"\n- name: phpwms_header\n  rule: header=\"phpwms\"\n- name: RAISECOM-Router_body\n  rule: body=\"var lang = document.getelementsbyname(\\\"sradioindex\\\"\"\n- name: 耶恩内容管理系统(yeencms)_header\n  rule: header=\"耶恩内容管理系统\" && header=\"yeencms\"\n- name: 华测监测预警系统_icon_hash\n  rule: icon_hash=\"3666737803\"\n- name: Hanwha-SRN-4000_body\n  rule: body=\"$.nvr.model_name=\\\"srn-4000\\\"\"\n- name: TweenMax_header\n  rule: header=\"TweenMax\"\n- name: hphu-System_body\n  rule: body=\"id='psssdiv'\" && body=\"src='kss_inc/js/jquery.1.3.2.pack.js'\"\n- name: NETGEAR-R6400_body\n  rule: body=\"netgear r6400\" && body=\"content=\\\"r6400\\\"\"\n- name: NETGEAR-R6400_header\n  rule: header=\"netgear r6400\"\n- name: PHPWEB_body\n  rule: body=\"pdv_pagename\"\n- name: Novell-Sentinel-Log-Manager_body\n  rule: body=\"title=\\\"novell sentinel log manager\" && body=\"content=\\\"0;url=/novelllogmanager\\\">\"\n- name: EDIMAX_body\n  rule: body=\"content=\\\"Edimax\"\n- name: Orchard CMS_header\n  rule: header=\"Orchard CMS\"\n- name: HUAWEI MCU_header\n  rule: header=\"HUAWEI MCU\"\n- name: Ericsson-TV-Web-Server_header\n  rule: 'header=\"server : ericsson television web server\" && header=\"Ericsson Television\n    Web server\"'\n- name: 列目录_body\n  rule: body=\"Index of /\" && body=\" - /</title>\"\n- name: Alcatel_Lucent-7250_header\n  rule: header=\"realm=\\\"alcatel-lucent 7250\"\n- name: APC-UPS-Management-Card_body\n  rule: body=\"class=\\\"apclogo\\\"\" && body=\"class=\\\"apclogo\\\"\"\n- name: APC-UPS-Management-Card_header\n  rule: header=\"apc management card\" && header=\"network management card\" && header=\"APC\n    Management Card\"\n- name: FormMail_body\n  rule: body=\"href=\\\"http://www.worldwidemart.com/scripts/formmail.shtml\" && body=\"/FormMail.pl\"\n    && body=\"href=\\\"http://www.worldwidemart.com/scripts/formmail.shtml\"\n- name: IntelligentWarehouseManagementSystem_body\n  rule: body=\"name=\\\"toolkitscriptmanager1_hiddenfield\\\"\" && body=\"class=\\\"headernav\\\"\"\n    && body=\"event.srcelement.type!='reset\"\n- name: phpBB_header\n  rule: 'header=\"set-cookie: phpbb3_\" && header=\"httponly, phpbb3_\"'\n- name: MacroSAN_header\n  rule: header=\"MacroSAN\"\n- name: ZTE (Network)_icon_hash\n  rule: icon_hash=\"1427976651\"\n- name: 南方数据_body\n  rule: body=\"/SouthidcKeFu.js\" && body=\"CONTENT=\\\"Copyright 2003-2015 - Southidc.net\"\n    && body=\"/Southidcj2f.Js\"\n- name: 5k-CRM_body\n  rule: body=\"/public/js/5kcrm.js\"\n- name: Scholica_header\n  rule: header=\"Scholica\"\n- name: WEBrick_header\n  rule: header=\"webrick\"\n- name: QuiXplorer_body\n  rule: body=\"href=\\\"http://quixplorer.sourceforge.net\\\" target=\" && body=\"target=\\\"_blank\\\">the\n    quix project</a></small>\"\n- name: DD WRT (DD-WRT milli_httpd)_icon_hash\n  rule: icon_hash=\"252728887\"\n- name: TP-LINK MR13U_header\n  rule: header=\"TP-LINK MR13U\"\n- name: QuiXplorer_header\n  rule: header=\"QuiXplorer\"\n- name: mariadb_header\n  rule: header=\"mariadb\"\n- name: CushyCMS_body\n  rule: body=\"Powered by CushyCMS\"\n- name: hanweb_body\n  rule: 'body=\"Use the correct document accordingly\" && body=\"BORDER-RIGHT: #e6e6e6\"'\n- name: ashnews_body\n  rule: body=\"ashnews\"\n- name: Huawei (Network)_icon_hash\n  rule: icon_hash=\"-884776764\" && icon_hash=\"987967490\"\n- name: LoudBlog_header\n  rule: header=\"LoudBlog\"\n- name: moxa VPort 36-1MP IP Camera_header\n  rule: header=\"moxa VPort 36-1MP IP Camera\"\n- name: NUUO 摄像头_title\n  rule: title=\"Network Video Recorder Login\"\n- name: 客客出品专业威客系统KPPW_header\n  rule: header=\"客客出品专业威客系统KPPW\"\n- name: Ruijie-NBR-Router_body\n  rule: body=\"ruijie - nbr\" && body=\"support.ruijie.com.cn\" && body=\"<p>系统负荷过高，导致网络拥塞，建议降低系统负荷或重启路由器\"\n    && body=\"class=\\\"line resource\\\" id=\\\"nbr_1\\\"\"\n- name: Runpu-Embedded-telephone-recording-system_body\n  rule: body=\"<th colspan=\\\"3\\\">润普嵌入式网络电话录音系统</th>\"\n- name: LG-HU80KA-KR_body\n  rule: body=\"<modelnumber>hu80ka-kr</modelnumber>\"\n- name: 禾翔 UTM_header\n  rule: header=\"禾翔 UTM\"\n- name: GNU Gatekeeper_header\n  rule: header=\"GNU Gatekeeper\"\n- name: 鑫考网上阅卷系统_header\n  rule: header=\"鑫考网上阅卷系统\"\n- name: Mercury-Router_header\n  rule: header=\"mw4530r\" && header=\"mac1200r\"\n- name: D-Link-DIR_600_body\n  rule: body=\"<div class=\\\"modelname\\\">dir-600\" && body=\"var mmc = {\" && body=\"dlink-dir600\"\n- name: NETGEAR wnr2000v4_header\n  rule: header=\"NETGEAR wnr2000v4\"\n- name: Cdn Cache_header\n  rule: header=\"Cdn Cache\"\n- name: SJSWPS_ OiWPS_header\n  rule: header=\"Sun-Java-System-Web-Proxy-Server\" && header=\"Oracle-iPlanet-Proxy-Server\"\n- name: ContentBox_header\n  rule: header=\"ContentBox\"\n- name: ASUS-R7000_body\n  rule: body=\"<div class=\\\"prod_madelname\\\">r7000\"\n- name: SEnginx_header\n  rule: header=\"SEnginx\"\n- name: Blesta_header\n  rule: header=\"Blesta\"\n- name: Crow-Force-portal-CMS_body\n  rule: body=\"中企动力提供技术支持\"\n- name: DELL-PCT7024_body\n  rule: body=\"class=\\\"login_server_default\\\">pct7024\"\n- name: DELL-PCT7048_body\n  rule: body=\"class=\\\"login_server_default\\\">pct7048\"\n- name: haohan_body\n  rule: body=\"D27CDB6E-AE6D-11cf-96B8-444553540000\"\n- name: dreambox_header\n  rule: header=\"dreambox\"\n- name: OSS_body\n  rule: body=\"src=\\\"/uf/login/login.jsp\\\" >\"\n- name: XuanNiao-Traffic-management-platform_body\n  rule: body=\"玄鸟流量管理平台\"\n- name: Semaphore_body\n  rule: body=\"www.smartlogic.com\" && body=\"alt=\\\"powered by semaphore\\\"\"\n- name: Leadsec-SOC_body\n  rule: body=\"/leadsec-soc\" && body=\"action=\\\"/leadsec-soc/signin\"\n- name: pagespeed_header\n  rule: header=\"X-Page-Speed\" && header=\"X-Mod-Pagespeed\"\n- name: 佰仕佳CMS_body\n  rule: body=\"佰仕佳CMS\"\n- name: Serv-U ftpd_header\n  rule: header=\"Serv-U ftpd\"\n- name: 耶恩内容管理系统(yeencms)_body\n  rule: body=\"耶恩内容管理系统\" && body=\"yeencms\"\n- name: ZyXEL-EMG2306-R10A_body\n  rule: body=\"class=\\\"modelname\\\">emg2306-r10a\"\n- name: Maipu--ISG1000-Security-gateway_body\n  rule: body=\"/php/common/checknum_creat.php?module=config_authnum\"\n- name: JUCI_body\n  rule: body=\"src=\\\"/js/50-juci-event.js\\\"\"\n- name: LG-OLED55E8PLA_body\n  rule: body=\"<modelname>oled55e8pla</modelname>\"\n- name: Wordpress Under Construction Icon_icon_hash\n  rule: icon_hash=\"191654058\"\n- name: Slingbox_header\n  rule: header=\"Slingbox\"\n- name: 深圳竹云统一认证_header\n  rule: header=\"深圳竹云统一认证\"\n- name: ShopNC_body\n  rule: body=\"powered by shopnc\" && body=\"copyright 2007-2014 shopnc inc\" && body=\"content=\\\"shopnc\"\n- name: Mynetcap_header\n  rule: header=\"Mynetcap\"\n- name: EFM-Networks-ipTIME-N604V_body\n  rule: body=\"src =\\\"/images2/login_title.n604v.gif\\\"\" && body=\"src=\\\"/images2/login_title.n604vlg.gif\\\"\"\n- name: Sablog-X_header\n  rule: header=\"Sablog-X\"\n- name: Runpu-Embedded-telephone-recording-system_header\n  rule: 'header=\"/login.lgi?orgurl=/\" && header=\"set-cookie: orgurl=/\"'\n- name: TP-LINK TD-8840T_header\n  rule: header=\"TP-LINK TD-8840T\"\n- name: layerbb_header\n  rule: header=\"layerbb\"\n- name: NETGEAR D6400_header\n  rule: header=\"NETGEAR D6400\"\n- name: WHOLETON-Employee-Internet-Management_body\n  rule: body=\"updateloginpswd.php\" && body=\"passroedele\" && body=\"下一代防火墙\" && body=\"classid=\\\"clsid:81be1f16-9d88-48cc-8d3e-cb8e37b71fee\"\n- name: 纵横通 监控系统_header\n  rule: header=\"纵横通 监控系统\"\n- name: 慧点科技 OA 协同办公系统_body\n  rule: body=\"/dojo/smartdot/css/dojo_smartdot.css\"\n- name: WP Rocket_header\n  rule: header=\"WP Rocket\"\n- name: DELL-PCM6220_body\n  rule: body=\"class=\\\"login_server_default\\\">pcm6220\"\n- name: 魅课OM视频会议系统_title\n  rule: title=\"OMeeting视频会议\" && title=\"OM视频会议\" && title=\"OM免费网络视频会议系统\"\n- name: VigLink_header\n  rule: header=\"VigLink\"\n- name: SpiderControl iniNet_header\n  rule: header=\"SpiderControl iniNet\"\n- name: TP-LINK R860_header\n  rule: header=\"TP-LINK R860\"\n- name: Seafile_icon_hash\n  rule: icon_hash=\"-12700016\"\n- name: Seafile_body\n  rule: body=\"<img src=\\\"/media/img/seafile-logo.png\\\"\"\n- name: ConversionLab_header\n  rule: header=\"ConversionLab\"\n- name: Mercury MW300R_header\n  rule: header=\"Mercury MW300R\"\n- name: SongCMS_header\n  rule: header=\"SongCMS\"\n- name: 永中在线编辑软件系统_body\n  rule: body=\"Web Office\" && body=\"img/eio.png\"\n- name: EAdmin极简社区_body\n  rule: body=\"content=\\\"eAdmin\"\n- name: Hanna-Drawing-Service_body\n  rule: body=\"hanna图纸服务\"\n- name: Brickcom-Cameras-and-Surveillance_header\n  rule: header=\"realm=\\\"brickcom\"\n- name: SilverStripe_header\n  rule: header=\"pastvisitor\"\n- name: 光阴科技 社区矫正综合监管平台_header\n  rule: header=\"光阴科技 社区矫正综合监管平台\"\n- name: Parallels Default page_icon_hash\n  rule: icon_hash=\"3244180843\"\n- name: UniFi Video Controller (airVision)_icon_hash\n  rule: icon_hash=\"768816037\"\n- name: Quest-Password-Manager_body\n  rule: body=\"style=\\\"display:none\\\" id=\\\"account_notfilled.textbox\" && body=\"id=\\\"ginapageexpiration\"\n    && body=\"id=\\\"ctl00_ctl00_ctl00_ctl00_body\" && body=\"id=\\\"ctl00_ctl00_ctl00_ctl00_contentplaceholder_pleasewait_content\"\n- name: HP ProCurve_header\n  rule: header=\"HP ProCurve\"\n- name: Small Footprint CIM Broker_header\n  rule: header=\"Small Footprint CIM Broker\"\n- name: grandtec-wifi-webcam_header\n  rule: header=\"basic realm=\\\"welcome to ipcam !\\\"\"\n- name: 易思ESPCMS-P8企业建站管理系统_header\n  rule: header=\"易思ESPCMS-P8企业建站管理系统\"\n- name: smartlink-Product_body\n  rule: body=\"smartlink network systems ltd.\"\n- name: NETCORE NR255G_header\n  rule: header=\"NETCORE NR255G\"\n- name: EFM-Networks-ipTIME-A2004NS-R_body\n  rule: body=\"src=\\\"/images2/login_title.a2004sr.gif\\\"\"\n- name: Novell ZENworks_header\n  rule: header=\"Novell ZENworks\"\n- name: Ebroker Enterprise Server_header\n  rule: header=\"Ebroker Enterprise Server\"\n- name: Octoprint (3D printer)_icon_hash\n  rule: icon_hash=\"1307375944\"\n- name: Comandia_header\n  rule: header=\"Comandia\"\n- name: rusong-Product_body\n  rule: body=\"plugins/wbb/barrett.js\"\n- name: 东营金石软件_body\n  rule: body=\"aspNetHidden\" && body=\"loginselect\" && body=\"txtLoginName\"\n- name: FlexCMP_header\n  rule: header=\"FlexCMP\"\n- name: Projesoft_header\n  rule: header=\"Projesoft\"\n- name: TP-LINK R4199G_header\n  rule: header=\"TP-LINK R4199G\"\n- name: cyberoam Sophos Cyberoam_header\n  rule: header=\"cyberoam Sophos Cyberoam\"\n- name: E-Manage-MySchool_body\n  rule: body=\"E-Manage All Rights Reserved MySchool Version\"\n- name: ZURB Foundation_header\n  rule: header=\"ZURB Foundation\"\n- name: AP-Router_header\n  rule: header=\"basic realm=\\\"ap-router\\\"\"\n- name: Rancher_body\n  rule: body=\"Welcome to Rancher\" && body=\"<meta name=\\\"ui/configs/asset-manifest\\\"\n    content=\"\n- name: A-Base_header\n  rule: header=\"A-Base\"\n- name: 慧学云教育_body\n  rule: body=\"ctl00_ContentPlaceHolder1_dltTopVideos\"\n- name: Panasonic Network Camera_body\n  rule: body=\"MultiCameraFrame?Mode=Motion&Language\"\n- name: Privoxy_header\n  rule: 'header=\"privoxy\" && header=\"proxy-agent: privoxy\" && header=\"Proxy-Agent:Privoxy\"'\n- name: EasyImage_body\n  rule: body=\"简单图床 - EasyImage\"\n- name: Linksys WAP54GP_header\n  rule: header=\"Linksys WAP54GP\"\n- name: Guojiz_header\n  rule: header=\"Guojiz\"\n- name: EasyImage_icon_hash\n  rule: icon_hash=\"1661694747\"\n- name: kingCMS_body\n  rule: body=\"content=\\\"kingcms\" && body=\"powered by kingcms\"\n- name: ZKTECO-Security-Management-System_body\n  rule: body=\"百傲瑞达\" && body=\"src='/login/images/zksecurity.png'\" && body=\"id=\\\"password_hidden\\\"\"\n    && body=\"class=\\\"login-finger-btn disabled\\\"\" && body=\"$(\\\".copyright\\\".text(\\\"copyright\n    ? \\\" + server_current_year + \\\" zkteco co., ltd. all rights reserved\\\";\"\n- name: ExtremeWare_body\n  rule: body=\"<frame src=\\\"extremetop\"\n- name: TP-LINK R483_header\n  rule: header=\"TP-LINK R483\"\n- name: 广联达 Linkworks 办公OA_icon_hash\n  rule: icon_hash=\"4005832539\"\n- name: ExtremeWare_header\n  rule: header=\"ExtremeWare\"\n- name: SHECA-CERT_body\n  rule: 'body=\"content: \\\"获取一证通信息异常。请检查数字证书是否正常运行\" && body=\"<li class=\\\"in\\\" id=\\\"cert_li\\\">\"'\n- name: Nagios XI_body\n  rule: body=\"Nagios XI\" && body=\"nagiosxi\" && body=\"Nagios\"\n- name: TP-LINK MR6400_header\n  rule: header=\"TP-LINK MR6400\"\n- name: 360-SecFox_body\n  rule: 'body=\"id=mtokenplugin width=0 height=0 style=\\\"position: absolute;left: 0px;\n    top: 0px\\\"\" && body=\"type=application/x-xtx-axhost\" && body=\"document.getelementbyid(''pic''.src\"\n    && body=\"class=\\\"secfox-login-browser-continue\\\"\" && body=\"<p>欢迎您使用网神secfox日志收集与分析系统\"'\n- name: HUAWEI-Wireless-LAN_body\n  rule: body=\"cloud access point\" && body=\"access controller\"\n- name: jobberBase_body\n  rule: body=\"http://www.jobberbase.com\" && body=\"Jobber.PerformSearch\" && body=\"content=\\\"Jobberbase\"\n- name: 上海领健信息 e看牙消息平台_header\n  rule: header=\"上海领健信息 e看牙消息平台\"\n- name: 地平线CMS_body\n  rule: body=\"labelOppInforStyle\" && body=\"frmsearch\"\n- name: ADVA-FSP_body\n  rule: body=\"var gtitle = 'adva fsp \"\n- name: Apache-Oozie-Web-Console_body\n  rule: body=\"oozie-console\" && body=\"href=\\\"/oozie\\\">oozie console\"\n- name: Tenda-CH22_body\n  rule: body=\"var sys_target = \\\"ch22\\\"\"\n- name: TOTO_LINK-N500R_body\n  rule: body=\"src =\\\"/images/login_back_n500r.gif\\\"\"\n- name: mblog_header\n  rule: header=\"mblog\"\n- name: uyan_body\n  rule: body=\"uyan.cc/code/uyan.js\"\n- name: busybox_header\n  rule: header=\"busybox\"\n- name: Raritan-Company's-product_body\n  rule: body=\"<!-- raritan logo -->\" && body=\"<div id=\\\"raritan_logo\"\n- name: inoERP_body\n  rule: body=\"id=\\\"ino-body\\\"\"\n- name: Canon-MG3100-series_body\n  rule: body=\"nowrap>canon mg3100 series</td>\"\n- name: YiYu-OPMS_body\n  rule: body=\"903561702@qq.com\" && body=\"opms\" && body=\"opms管理系统,织蝶-企业应用系统为您的企业保驾护航\"\n- name: Caddy_header\n  rule: header=\"Caddy\"\n- name: zikula-framework_header\n  rule: header=\"zikulasid1\" && header=\"zikulasid3\"\n- name: xinhaisoft-System_body\n  rule: body=\"../regist.asp?school=\" && body=\"北京心海导航教育科技股份有限公司-中国心理网版权所有<br>\"\n- name: PhpWind_body\n  rule: body=\"content=\\\"phpwind\" && body=\"content=\\\"phpwind\"\n- name: BROADLIGHT-Residential-Gateway_body\n  rule: body=\"<b>brg management</b>\"\n- name: EMS-ENTRY-COM_header\n  rule: header=\"EMS-Entry\" && header=\"ZENT5\"\n- name: Linksys EA6500v2_header\n  rule: header=\"Linksys EA6500v2\"\n- name: EMC-RecoverPoint_body\n  rule: body=\"content=\\\"recoverpoint management application\" && body=\"src=\\\"scripts/services/wizarddatasharingservice.js\\\"\"\n- name: Rancher_header\n  rule: 'header=\"Set-Cookie: PL=rancher\"'\n- name: OAuth2_header\n  rule: header=\"OAuth2\"\n- name: FlexSlider_header\n  rule: header=\"FlexSlider\"\n- name: xjhtqy-CRM_body\n  rule: body=\"class=\\\"hidden-xs ewheaderrow\\\"><img src=\\\"aspximages/htqy.png\\\"\"\n- name: TopSec TopRules_header\n  rule: header=\"TopSec TopRules\"\n- name: Yelala_body\n  rule: 'body=\"/public/js/knockout-3.4.1.debug.js\" && body=\"<form action=\\\"/index.php/home/login/login.html\\\"\n    method=\\\"post\\\" id=\\\"login\\\" class=\\\"form\\\" data-bind=\\\"submit: submitform\\\">\"'\n- name: Gigaset-VOIP_body\n  rule: body=\"onclick=\\\"javascript:open_gigaset_help_window\" && body=\"gigaset communications\"\n- name: 深信服ssl-vpn_body\n  rule: body=\"login_psw.csp\"\n- name: AZADMIN CMS_header\n  rule: header=\"AZADMIN CMS\"\n- name: CMScout_body\n  rule: body=\"Powered by CMScout\"\n- name: PB-CMS_body\n  rule: body=\"Powered by <a href=\\\"https://www.puboot.com\\\"\"\n- name: CMScout_header\n  rule: header=\"cmscout2=\"\n- name: Cisco-SX20_header\n  rule: header=\"Cisco-SX20\"\n- name: creatsoft-System_body\n  rule: body=\"href=\\\"/corrosion/charts/water-pid.jsp\" && body=\"href=\\\"/corrosion/charts/ph.jsp\\\"\"\n- name: Axous_body\n  rule: body=\"content=\\\"Axous\"\n- name: Leica Aperio ImageServer_header\n  rule: header=\"Leica Aperio ImageServer\"\n- name: PB CMS_body\n  rule: body=\"Powered by\" && body=\"PB-CMS\"\n- name: 小鱼易连云视讯管理平台_body\n  rule: body=\"font_1957344_lqkodjqdbl.css\" && body=\"static_source/localcdn/webrtc/web/favicon.ico\"\n- name: IBM Spectrum Computing_body\n  rule: body=\"/platform/framework/logout/logout.action\" && body=\"ssoclient_\"\n- name: Netmind-Product_header\n  rule: header=\"netmindsessionid\"\n- name: Ruby on Rails_header\n  rule: header=\"Ruby on Rails\"\n- name: ofcms_header\n  rule: header=\"ofcms\"\n- name: NETGEAR PLW1000_header\n  rule: header=\"NETGEAR PLW1000\"\n- name: 智慧防火物联网云平台_header\n  rule: header=\"智慧防火物联网云平台\"\n- name: 天融信-上网行为管理系统_body\n  rule: body=\"images/logo3.gif\" && body=\"dkey_activex_download.php\" && body=\"login_commit.php\"\n- name: EFM-Networks-ipTIME-N704NS_body\n  rule: body=\"src =\\\"/images2/login_title.n704ns.gif\\\"\"\n- name: WildFly-Server_body\n  rule: body=\"href=\\\"wildfly.css\" && body=\"wildfly project\"\n- name: Open eShop_header\n  rule: header=\"Open eShop\"\n- name: Technicolor Gateway_icon_hash\n  rule: icon_hash=\"1835479497\"\n- name: WOOCMS_header\n  rule: header=\"WOOCMS\"\n- name: BroadWin-WebAccess_header\n  rule: header=\"/broadweb/bwroot.asp?username=\" && header=\"/broadWeb/bwRoot.asp?username=\"\n- name: SANGFOR-S5100_body\n  rule: body=\"id=\\\"ver_title\\\">s5100\"\n- name: Moment Timezone_header\n  rule: header=\"Moment Timezone\"\n- name: PxPlus-WebServer_header\n  rule: header=\"PxPlus-WebServer\"\n- name: Citrix ADC_header\n  rule: header=\"Citrix ADC\"\n- name: ZCMS_body\n  rule: body=\"_zcms_shownewmessage\" && body=\"zcms_skin\" && body=\"app=zcms\" && body=\"_ZCMS_ShowNewMessage\"\n    && body=\"zcms_skin\"\n- name: gocdn_header\n  rule: header=\"GOCDN\"\n- name: wemall商城_header\n  rule: header=\"wemall商城\"\n- name: Alienvault_icon_hash\n  rule: icon_hash=\"-1779611449\"\n- name: ZEBRA-TLP-2824-Plus_body\n  rule: body=\"ztc tlp 2824 plus</h1>\"\n- name: LG-55UM7800BNA_body\n  rule: body=\"<modelnumber>55um7800bna</modelnumber>\"\n- name: BroadWin-WebAccess_body\n  rule: 'body=\"<!-- #begintemplate \\\"/templates/bw_templete1.dwt\\\" -->\" && body=\"<!--\n    #BeginTemplate \\\"/Templates/bw_templete1.dwt\\\" -->\"'\n- name: WatchGuard_icon_hash\n  rule: icon_hash=\"15831193\"\n- name: ADVANTECH-WISE-3610_body\n  rule: body=\"/advantech/advantech/css/main.css\"\n- name: eTicket_body\n  rule: body=\"powered by eticket\" && body=\"<a href=\\\"http://www.eticketsupport.com\\\"\n    target=\\\"_blank\\\">\" && body=\"/eticket/eticket.css\" && body=\"Powered by eTicket\"\n    && body=\"<a href=\\\"http://www.eticketsupport.com\\\" target=\\\"_blank\\\">\" && body=\"/eticket/eticket.css\"\n- name: SnomPhone_body\n  rule: body=\"<a href=\\\"http://snom.com\\\">snom ag</a><br>\" && body=\"<tr><td class=\\\"flyoutlink\\\"\n    colspan=\\\"2\\\"><b><a href=http://\" && body=\"you can enter a simple telephone number\n    (e.g. 0114930398330 or uri like info@snom.com.\"\n- name: Intel-AMT_header\n  rule: 'header=\"server: intel(r standard manageability \" && header=\"server: intel(r\n    active management technology\"'\n- name: AutoIndex-PHP-Script_header\n  rule: 'header=\"set-cookie: autoindex2\" && header=\"AutoIndex2\"'\n- name: Prometheus Node Exporter_header\n  rule: header=\"Prometheus Node Exporter\"\n- name: NETGEAR WNR2000_header\n  rule: header=\"NETGEAR WNR2000\"\n- name: Koken_header\n  rule: header=\"Koken\"\n- name: GitLab CI_header\n  rule: header=\"GitLab CI\"\n- name: EFM-Networks-ipTIME-N702BCM_body\n  rule: body=\"src=\\\"/images2/login_title.n702bcm.gif\\\"\"\n- name: Kabona WDC_header\n  rule: header=\"Kabona WDC\"\n- name: EFM-Networks-ipTIME-N1E_body\n  rule: body=\"src =\\\"/images2/login_title.n1e.gif\\\"\"\n- name: Observium_body\n  rule: body=\"href=\\\"images/observium-icon.png\\\"\"\n- name: bitWEB WCMS_header\n  rule: header=\"bitWEB WCMS\"\n- name: Avaya-IP-Office_body\n  rule: body=\"action=\\\"/login/index.php?st=11&lng=\"\n- name: HESK_body\n  rule: body=\"hesk_javascript.js\" && body=\"powered by <a href=\\\"http://www.hesk.com\"\n    && body=\"powered by <a href=\\\"https://www.hesk.com\" && body=\"hesk_javascript.js\"\n    && body=\"hesk_style.css\" && body=\"Powered by <a href=\\\"http://www.hesk.com\" &&\n    body=\"Powered by <a href=\\\"https://www.hesk.com\"\n- name: acsoft-Cloud_body\n  rule: body=\"sdiyun.com, all rights reserved\" && body=\"onrememberpasswordclick\"\n- name: Avaya-IP-Office_header\n  rule: header=\"ipoffice\" && header=\"IPOffice\"\n- name: Inspur-Server_body\n  rule: body=\"img/inspur_logo.png\" && body=\"<!-- add by zhchhong\" && body=\"<frame\n    src=\\\"./page/blank.html\\\" name=\\\"mainframe\\\" id=\\\"mainframe\\\" scrolling=\\\"no\\\"\n    noresize=\\\"false\\\"></frame>\"\n- name: nitc企业模版免费下载_body\n  rule: body=\"NITC Web Marketing Service\" && body=\"/images/nitc1.png\"\n- name: NetPresenz_header\n  rule: 'header=\"server: netpresenz\"'\n- name: ZKAccess 门禁管理系统_body\n  rule: body=\"/logoZKAccess_zh-cn.jpg\"\n- name: wuzhicms(五指cms网站管理系统)_body\n  rule: body=\"wuzhicms\" && body=\"Powered by wuzhicms\" && body=\"content=\\\"wuzhicms\"\n- name: Apache Spark_header\n  rule: header=\"Apache Spark\"\n- name: wuzhicms(五指cms网站管理系统)_header\n  rule: header=\"wuzhicms\"\n- name: CETHIK-Reader-Configuration-System_body\n  rule: body=\"if (suser == \\\"admin\\\" && spass == \\\"cetc52\\\" {\" && body=\"rfid/content/superuser\"\n- name: EFM-Networks-ipTIME-A2004_body\n  rule: body=\"src=\\\"/images2/login_title.a2004.gif\\\"\"\n- name: SONY-Video-Network-Station_body\n  rule: body=\"<title>sony snt-v304 video network station</title>\"\n- name: GridSite_body\n  rule: body=\"<a href=\\\"http://www.gridsite.org/\\\">gridsite\" && body=\"gridsite-admin.cgi?cmd\"\n    && body=\"<a href=\\\"http://www.gridsite.org/\\\">GridSite\" && body=\"gridsite-admin.cgi?cmd\"\n- name: 翼起飞YunGou_CMS_header\n  rule: header=\"翼起飞YunGou_CMS\"\n- name: 亿邮_header\n  rule: header=\"eYouWS\" && header=\"EMPHPSID\"\n- name: SATO-Network-Printing_body\n  rule: body=\"welcome to sato network printing</legend>\"\n- name: Project-Management-System_body\n  rule: body=\"var right = regexp.rightcontext\" && body=\"window.top.location = \\\"login.aspx?url=\\\"\n    + right\\\"\"\n- name: Tumblr_body\n  rule: body=\"<meta name=\\\"tumblr-theme\\\" content=\" && body=\"<!-- begin tumblr code\n    --><iframe src=\\\"http://assets.tumblr.com/iframe.html\"\n- name: Tumblr_header\n  rule: header=\"x-tumblr-user\" && header=\"X-Tumblr-User\"\n- name: DiBos_body\n  rule: body=\"style/bovisnt.css\"\n- name: mongo-express_header\n  rule: header=\"mongo-express\"\n- name: Dlink Webcam_icon_hash\n  rule: icon_hash=\"31972968\" && icon_hash=\"1221759509\" && icon_hash=\"1144925962\"\n- name: zknet考勤管理_header\n  rule: header=\"zknet考勤管理\"\n- name: 亿邮_body\n  rule: body=\"EYOU企业邮箱\" && body=\"cr\\\">eYouMail\"\n- name: Citrix 虚拟桌面_icon_hash\n  rule: icon_hash=\"3022211053\"\n- name: Adblock_header\n  rule: header=\"X-Adblock-Key\"\n- name: H3C Web网管_body\n  rule: body=\"webui\" && body=\"Web网管用户登录\" && body=\"china_logo.jpg\"\n- name: EFM-Networks-ipTIME-N804_body\n  rule: body=\"src =\\\"/images2/login_title.n804.gif\\\"\"\n- name: Purveyor Encrypt Domestic_header\n  rule: header=\"Purveyor Encrypt Domestic\"\n- name: ThoughtConduit_body\n  rule: body=\"<html><head><title>error</title></head><body>your request produced an\n    error.</body></html>\"\n- name: Sophos-UTM-Web-Protection_body\n  rule: body=\"powered by utm web protection\"\n- name: TP-LINK R4000_header\n  rule: header=\"TP-LINK R4000\"\n- name: DokuWiki_icon_hash\n  rule: icon_hash=\"-630493013\"\n- name: oracle-tns_header\n  rule: header=\"oracle-tns\"\n- name: Airee_header\n  rule: header=\"Airee\"\n- name: LynxGuide_header\n  rule: header=\"access_num=\"\n- name: VeryCMS_header\n  rule: header=\"VeryCMS\"\n- name: 慧学云教育_header\n  rule: header=\"SchoolCopyRight\"\n- name: epygi-QXE1T1_body\n  rule: body=\"epygi        <span class=\\\"product-name\\\">qxe1t1\"\n- name: TP-LINK Wireless WR741ND_header\n  rule: header=\"TP-LINK Wireless WR741ND\"\n- name: 移动云&绿盟日志审计系统-log4j_body\n  rule: body=\"/pisces/login/\"\n- name: Arc Publishing_header\n  rule: header=\"Arc Publishing\"\n- name: XAMPP_icon_hash\n  rule: icon_hash=\"4261769660\" && icon_hash=\"-1437701105\"\n- name: 深信服ssl-vpn_header\n  rule: header=\"TWFID\"\n- name: XAMPP_header\n  rule: header=\"xampps_info\" && header=\"xampp user\" && header=\"XAMPP\"\n- name: XAMPP_body\n  rule: body=\"content=\\\"kai oswald seidler\" && body=\"content=\\\"xampp \"\n- name: ZyXEL-PK5001Z_body\n  rule: body=\">centurylink&reg; modem configuration zyxel pk5001z<\" && body=\"centurylink.com</a>\"\n- name: Tengine_header\n  rule: 'header=\"Server: Tengine\" && header=\"Server:Tengine\"'\n- name: SilverStripe_body\n  rule: body=\"framework/javascript/htmleditorfield.js\" && body=\"content=\\\"silverstripe/\"\n    && body=\"content=\\\"SilverStripe\"\n- name: trs_wcm_body\n  rule: body=\"/wcm/app/js\" && body=\"0;URL=/wcm\" && body=\"window.location.href = \\\"/wcm\\\";\"\n    && body=\"/wcm\\\" target=\\\"_blank\\\">网站管理\" && body=\"/wcm\\\" target=\\\"_blank\\\">管理\"\n    && body=\"WCM_VERSION\"\n- name: OCS-Inventory-NG_body\n  rule: body=\"css/ocsreports.css\" && body=\"ocs inventory\"\n- name: Gree-Logistics_body\n  rule: body=\"/images/gree/gree.gif\"\n- name: Footprint_header\n  rule: 'header=\"server: footprint \" && header=\"Footprint\"'\n- name: D-link-DSL-2640B_body\n  rule: 'body=\"product : dsl-2640b\"'\n- name: HJSoft-HCM_body\n  rule: body=\"src=\\\"/images/hcm/copyright.gif\\\"\" && body=\"src=\\\"/images/hcm/themes/default/login/login_banner2.png?v=12334\\\"\"\n    && body=\"src=\\\"/general/sys/hjaxmanage.js\\\"\"\n- name: Linksys-VPN_header\n  rule: header=\"linksys vpn\" && header=\"linksys-vpn\"\n- name: NETGEAR-WNR2000v5_header\n  rule: header=\"netgear wnr2000v5\"\n- name: NETGEAR-WNR2000v5_body\n  rule: body=\"class=\\\"router_name_div\\\">wnr2000v5</div>\"\n- name: Countly_header\n  rule: header=\"Countly\"\n- name: 畅捷通 T+Cloud_header\n  rule: header=\"畅捷通 T+Cloud\"\n- name: NSFOCUS ADS_header\n  rule: header=\"NSFOCUS ADS\"\n- name: 一启快_header\n  rule: header=\"yiqikuai.com\"\n- name: Weaver-e-Bridge_body\n  rule: body=\"content=\\\"泛微云桥e-bridge\\\"\"\n- name: Lenko SnowNet Server_header\n  rule: header=\"Lenko SnowNet Server\"\n- name: Alcatel_Lucent-OS6860E-P24_body\n  rule: body=\"<span>device os6860e-p24\"\n- name: Sangfor-Employee-Internet-Management_body\n  rule: body=\"content=\\\"must-revalidate\\\"\" && body=\" = function(str, key\" && body=\"document.cookie\n    = 'sangfor_session_hash=0'\" && body=\"上网优化管理\" && body=\"href=\\\"http://sec.sangfor.com.cn/events/89.html\\\"\"\n    && body=\"internet authentication system\"\n- name: Alfresco_icon_hash\n  rule: icon_hash=\"1333537166\"\n- name: DoubleClick Ad Exchange (AdX)_header\n  rule: header=\"DoubleClick Ad Exchange (AdX)\"\n- name: mofinetwork_icon_hash\n  rule: icon_hash=\"-1702393021\"\n- name: 资产灯塔系统_icon_hash\n  rule: icon_hash=\"1708240621\"\n- name: Puridiom_body\n  rule: body=\"content=\\\"/puridiom/system/header.jsp\" && body=\"src=\\\"/puridiom/system/processing.jsp\"\n- name: Neo4j_body\n  rule: body=\"content=\\\"neo4j\" && body=\"ng-show=\\\"neo4j.enterpriseedition\" && body=\"play-topic=\\\"neo4j-sync\"\n    && body=\"neo4jdeveloperdoc\"\n- name: Neo4j_header\n  rule: header=\"Neo4j\"\n- name: Apache Superset_body\n  rule: body=\"src=\\\"/static/assets/images/superset-logo-horiz.png\\\"\"\n- name: NITC-CMS_body\n  rule: body=\"nitc web marketing service\" && body=\"/images/nitc1.png\"\n- name: PeopleNet-iKEY_body\n  rule: body=\"content=\\\"ikey,众人科技,ikey\" && body=\"ikey管理系统\" && body=\"<div id=\\\"ikey_conter\\\">\"\n- name: HUAWEI-USG5120_header\n  rule: header=\"usg5120\"\n- name: shopbuilder_body\n  rule: body=\"content=\\\"ShopBuilder\" && body=\"Powered by ShopBuilder\" && body=\"ShopBuilder版权所有\"\n- name: OnSSI_Video_Clients_body\n  rule: body=\"x-value=\\\"on-net surveillance systems inc.\\\"\" && body=\"x-value=\\\"On-Net\n    Surveillance Systems Inc.\\\"\"\n- name: Whir-ezOFFICE_body\n  rule: body=\"ezofficeusername\" && body=\"whirrootpath\" && body=\"/defaultroot/js/cookie.js\"\n- name: Ruijie-RG-DBS_body\n  rule: body=\"/css/impl-security.css\" && body=\"/dbaudit/authenticate\"\n- name: Palo Alto Networks PANOS_header\n  rule: header=\"Palo Alto Networks PANOS\"\n- name: 广联达 Linkworks 办公OA_body\n  rule: body=\"/Services/Identification/\"\n- name: TP-Link TL-WR841N_header\n  rule: header=\"TP-Link TL-WR841N\"\n- name: SUN-Solaris_header\n  rule: header=\"sun solaris\" && header=\"sunos\"\n- name: QiboCMS_header\n  rule: header=\"QiboCMS\"\n- name: ipTIME G504_body\n  rule: body=\"src =\\\"/images/login_back_g504.gif\\\"\" && body=\"src =\\\"/images2/login_title.g504.gif\\\"\"\n- name: DokuWiki_body\n  rule: body=\"powered by dokuwiki\" && body=\"content=\\\"dokuwiki\" && body=\"<div id=\\\"dokuwiki\"\n    && body=\"powered by DokuWiki\" && body=\"content=\\\"DokuWiki\" && body=\"<div id=\\\"dokuwiki\"\n- name: Avactis_header\n  rule: header=\"Avactis\"\n- name: squarespace建站_header\n  rule: header=\"SS_MID\" && header=\"squarespace.net\"\n- name: D-Link上网行为审计网关_header\n  rule: header=\"D-Link上网行为审计网关\"\n- name: Help-Desk-Software_body\n  rule: body=\"target=\\\"_blank\\\">freehelpdesk.org\" && body=\"target=\\\"_blank\\\">freehelpdesk.org\"\n- name: mini_httpd_header\n  rule: header=\"mini_httpd\" && header=\"mini_httpd\"\n- name: Netentsec-NS-ASG-Security-gateway_body\n  rule: body=\"400-678-3600\" && body=\"client/thickbox.css\" && body=\"/commonplugin/softkeyboard.js\"\n    && body=\"id=\\\"slotserialnumber\\\"\"\n- name: 银达汇智智慧综合管理平台_body\n  rule: body=\"福州银达云创信息科技有限公司\" && body=\"miniui/crypto/CodeManage.js\"\n- name: 银达汇智智慧综合管理平台_icon_hash\n  rule: icon_hash=\"1170487960\"\n- name: Sagemcom-Router_header\n  rule: header=\"realm=\\\"sagem\"\n- name: chillyCMS_body\n  rule: body=\"powered by <a href=\\\"http://FrozenPepper.de\"\n- name: Peplink-Balance-Series_header\n  rule: header=\"realm=\\\"peplink balance series\"\n- name: SuperMap iServer_header\n  rule: header=\"SuperMap iServer\"\n- name: TPshop-cms_header\n  rule: header=\"TPshop-cms\"\n- name: Linksys EA2700OQ_header\n  rule: header=\"Linksys EA2700OQ\"\n- name: Hanwha-QRN-410_body\n  rule: body=\"$.nvr.model_name=\\\"qrn-410\\\"\"\n- name: Nomadix Access Gateway_icon_hash\n  rule: icon_hash=\"2071993228\"\n- name: Concrete5_CMS_body\n  rule: body=\"generator\\\" content=\\\"ezCMS\" && body=\"CCM_DISPATCHER_FILENAME\"\n- name: NetScout-nGeniusONE_body\n  rule: body=\"var newpath = \\\"/common/ngeniusdirect.jsp\"\n- name: ManageEngine OpManager_header\n  rule: header=\"ManageEngine OpManager\"\n- name: Koala-Web-Server_header\n  rule: 'header=\"server: koala web server\"'\n- name: pexip_body\n  rule: body=\"<h2>pexip infinity</h2>\" && body=\"<h2>会议平台</h2>\" && body=\"pexip infinity\"\n- name: Hikvision-Video-Quality-Diagnostic-_body\n  rule: body=\"id =\\\"helpdoc\\\" class=\\\"help\\\" href=\\\"common/helpdoc/vqd system user\n    manual(v2.4.pdf\" && body=\"<meta http-equiv=\\\"refresh\\\" content=\\\"0;url=vqd.workbench.aspx\\\"\n    /> \"\n- name: Security-Intelligent-Management-Platform_body\n  rule: body=\"nanjing rickyinfo technology\"\n- name: EFM-Networks-ipTIME-N604R_body\n  rule: body=\"src =\\\"/images2/login_title.n604r.gif\\\"\"\n- name: JASmine_header\n  rule: header=\"JASmine\"\n- name: ZTE-Super-Conference-Center_body\n  rule: body=\"link href='./zxms80.css\"\n- name: Siemens-FLUOROSPOT-Compact_body\n  rule: body=\"<form id=\\\"inicio\\\" name=\\\"inicio\\\" action=\\\"/rsf/init.do\\\"\"\n- name: Siemens-SCALANCE-M873_header\n  rule: header=\"realm=\\\"scalance m873\"\n- name: Whir-ezOFFICE_header\n  rule: header=\"loclan\"\n- name: OMAudit_body\n  rule: body=\"omaudit v3版\"\n- name: SONY-SNC-ER585_header\n  rule: header=\"realm=\\\"sony network camera snc-er585\"\n- name: NETGEAR ReadyNAS_icon_hash\n  rule: icon_hash=\"-137295400\"\n- name: Synology-Router-Manager_body\n  rule: 'body=\"hostname\\\" : \\\"synologyrouter\\\"\" && body=\"content=\\\"synologyrouter\"'\n- name: EC-CUBE_header\n  rule: header=\"EC-CUBE\"\n- name: CentreCOM-AR-Routor_body\n  rule: body=\"centrecom&reg; ar260s v2</span>\" && body=\"centrecom&reg; arx640s</span>\"\n- name: Jupyter_body\n  rule: body=\"<title>Jupyter Notebook</title\" && body=\"\" && body=\"(97c6417ed01bdc0ae3ef32ae4894fd03\"\n- name: Vicon-Cameras-and-Surveillance_body\n  rule: body=\"content=\\\"brian lau, iqinvision\" && body=\"loc = \\\"iqeyevid.html\"\n- name: Destoon_body\n  rule: body=\"content=\\\"destoon\" && body=\"destoon_moduleid\"\n- name: Document-Security-Management-System_body\n  rule: body=\"href=\\\"/drm/template/css/login.css\\\"\" && body=\"action=\\\"/drm/login.do\\\"\"\n    && body=\"src=\\\"/drm/encjs/barrett.js\\\"\"\n- name: C9CMS网站信息管理企业版_body\n  rule: body=\"C9CMS网站信息管理企业版\"\n- name: Spring-Security_header\n  rule: header=\"realm=\\\"spring security application\"\n- name: Darwin_header\n  rule: header=\"Darwin\"\n- name: JRCMS企业网站管理系统_header\n  rule: header=\"JRCMS企业网站管理系统\"\n- name: Citrix-Web-PN-Server_header\n  rule: 'header=\"server: citrix web pn server\" && header=\"Citrix Web PN Server\"'\n- name: Citrix-Receiver_body\n  rule: body=\"href=\\\"clients/html5client/src/receiverthirdpartynotices.html\\\"\" &&\n    body=\"logonbelt-topshadow\" && body=\"upgradeavailable-already-installed-separator\n    bar-separator\"\n- name: File-Upload-Manager_body\n  rule: body=\"<img src=\\\"/images/header.jpg\\\" alt=\\\"file upload manager\\\">\" && body=\"<IMG\n    SRC=\\\"/images/header.jpg\\\" ALT=\\\"File Upload Manager\\\">\"\n- name: NETGEAR C3700-100NAS_header\n  rule: header=\"NETGEAR C3700-100NAS\"\n- name: ShopXO_header\n  rule: header=\"ShopXO\"\n- name: Intellex-Http Server_header\n  rule: header=\"Intellex-Http Server\"\n- name: Ksenos_header\n  rule: header=\"Ksenos\"\n- name: Honeywell-IP-Camera_body\n  rule: body=\"checking hnvr client control version......\"\n- name: PEAR_body\n  rule: body=\"installed packages, channel pear\" && body=\"content=\\\"webbased pear package\n    manager\"\n- name: subsonic_header\n  rule: header=\"subsonic\"\n- name: ckfinder_body\n  rule: body=\"CKEditorFuncNum\"\n- name: eZ Platform_header\n  rule: header=\"eZ Platform\"\n- name: Gitorious_header\n  rule: header=\"_gitorious_sess\" && header=\"_gitorious_sess\"\n- name: Gitorious_body\n  rule: body=\"powered by gitorious\"\n- name: Trend-IWSS-Proxy_header\n  rule: 'header=\"proxy-agent: iwss\"'\n- name: CentOS 默认页面_body\n  rule: body=\"<title>Welcome to CentOS</title>\" && body=\"img/centos-logo.png\" && body=\"centos.org\"\n- name: Cerebro_body\n  rule: body=\"lang=\\\"en\\\" ng-app=\\\"cerebro\"\n- name: Lantronix-Modbus-Bridge_header\n  rule: header=\"modbus bridge\"\n- name: Eudemon8000E-X8_header\n  rule: header=\"huawei eudemon8000e-x8\"\n- name: phpbb_header\n  rule: header=\"Set-Cookie:phpbb3_\" && header=\"HttpOnly, phpbb3_\"\n- name: phpbb_body\n  rule: body=\"http://www.longluntan.com/zh/phpbb/\" && body=\"phpBB\" && body=\"phpBB\n    Group\\\" />\" && body=\"START QUICK HACK - phpBB Statistics MOD\"\n- name: SNB股票交易软件_body\n  rule: body=\"Copyright 2005–2009 <a href=\\\"http://www.s-mo.com\\\">\"\n- name: Traffic-Inspector_body\n  rule: body=\"<title>error</title></head><body><h1>403 - forbidden</h1><hr\"\n- name: Sun-GlassFish_body\n  rule: body=\"webui/jsf\" && body=\"glassfish community\"\n- name: 任子行下一代防火墙_header\n  rule: header=\"任子行下一代防火墙\"\n- name: Yawcam_header\n  rule: header=\"Yawcam\"\n- name: easyLink-Web-Solutions_body\n  rule: body=\"content=\\\"easyLink\"\n- name: EFM-Networks-ipTIME-N904NS_body\n  rule: body=\"src =\\\"/images2/login_title.n904ns.gif\\\"\"\n- name: 新秀企业网站系统PHP版_header\n  rule: header=\"新秀企业网站系统PHP版\"\n- name: Content-Security-Policy_header\n  rule: header=\"x-content-security-policy\" && header=\"x-webkit-csp\"\n- name: Nnetgear 路由器_header\n  rule: header=\"NETGEAR\"\n- name: TP-LINK Wireless WR1042ND_header\n  rule: header=\"TP-LINK Wireless WR1042ND\"\n- name: Canon-Print-or-Copier_body\n  rule: body=\"<span id=\\\"devicename\\\">ir-adv\"\n- name: ourphp_body\n  rule: body=\"content=\\\"OURPHP\" && body=\"Powered by ourphp\"\n- name: Telerik-Sitefinity_body\n  rule: body=\"telerik.web.ui.webresource.axd\" && body=\"content=\\\"sitefinity\"\n- name: Posterous_body\n  rule: body=\"content=\\\"posterous\" && body=\"class=\\\"posterous_site_data\"\n- name: Hanwha-SNP-6321H_body\n  rule: body=\"var defaultfilename = \\\"snp-6321h\\\"\"\n- name: Microsoft-Ajax-CDN_body\n  rule: body=\"ajax.aspnetcdn.com/ajax\"\n- name: Microsoft-Ajax-CDN_header\n  rule: header=\"ajax.aspnetcdn.com/ajax\"\n- name: 迈普多业务融合网关_icon_hash\n  rule: icon_hash=\"3060301796\"\n- name: 彩虹cms_body\n  rule: body=\"彩虹cms\"\n- name: umbraco_header\n  rule: header=\"umbraco\"\n- name: Dlink Router_icon_hash\n  rule: icon_hash=\"1037387972\"\n- name: ASUS-RT-AC86U_body\n  rule: body=\"<div class=\\\"prod_madelname\\\">rt-ac86u\"\n- name: D-Link-DAP-2020_body\n  rule: body=\"<a href=\\\"http://www.dlink.com.tw\\\" target=_blank>dap-2020\"\n- name: TOTO_LINK-N6004_body\n  rule: body=\"src =\\\"/images/login_back_zn6004.gif\\\"\"\n- name: Yonyou-Uclient_body\n  rule: body=\"http-equiv=refresh content=0;url=index.jsp\"\n- name: TP-LINK Wireless WA901ND_header\n  rule: header=\"TP-LINK Wireless WA901ND\"\n- name: cradlepoint-IBR1150_body\n  rule: body=\"cplogin.model = \\\"ibr1150\\\";\"\n- name: ikuai8-Cloud_body\n  rule: body=\"<strong>we're sorry but ikuai cloud platform doesn't \"\n- name: uTorrent_header\n  rule: header=\"basic realm=\\\"utorrent\\\"\" && header=\"www-authenticate basic realm=\\\"utorrent\"\n- name: VIEWGOOD(远古媒体发布平台)_body\n  rule: body=\"VIEWGOOD\" && body=\"远古媒体发布平台\"\n- name: DotA-OpenStats_body\n  rule: body=\"content=\\\"dota OpenStats\" && body=\"content=\\\"openstats.iz.rs\"\n- name: Banorte_header\n  rule: header=\"Banorte\"\n- name: 华为_HUAWEI_SRG2220_header\n  rule: header=\"HUAWEI SRG2220\"\n- name: zzzcms(zzzphp)_body\n  rule: body=\"zzzcms\" && body=\"zzzphp\"\n- name: zzzcms(zzzphp)_header\n  rule: header=\"zzzcms\" && header=\"zzzphp\"\n- name: SmarterStats_body\n  rule: body=\"<td class=bar1inner>smarterstats\"\n- name: 易优cms企业建站系统_含小程序_body\n  rule: body=\"易优cms企业建站系统_含小程序\"\n- name: Schneider-Quantum-140NOE77101_body\n  rule: body=\"indexlanguage\" && body=\"html/configs.js\"\n- name: NETCORE NR285G_header\n  rule: header=\"NETCORE NR285G\"\n- name: Hua-AR-Agile-gateway_body\n  rule: body=\"document.title = 'ar web登录\" && body=\"/verifycode.cgi?vrfcodeid=\" &&\n    body=\"document.title = 'log in to ar web';\" && body=\"checkvoiceservice.cgi\" &&\n    body=\"ispbxmode_callback\"\n- name: Azure-ARR_header\n  rule: header=\"arraffinity\"\n- name: Teradici-WebApp-Server_header\n  rule: header=\"Teradici-WebApp-Server\"\n- name: nington-CAS_body\n  rule: body=\"id=\\\"dynamicpasswordwithmobile\\\">\"\n- name: 315soft-FileSystem_body\n  rule: body=\">多可电子档案管理系统</div\"\n- name: phpstydy Windows_title\n  rule: title=\"phpstudy for windows\"\n- name: PowerEasy(动易)_body\n  rule: body=\"powereasy\"\n- name: promisec-System_body\n  rule: body=\"name=\\\"promisecactivex\\\"\"\n- name: TP-LINK AC750_header\n  rule: header=\"TP-LINK AC750\"\n- name: Visual WebGUI_header\n  rule: header=\"Visual WebGUI\"\n- name: Allomani_body\n  rule: body=\"content=\\\"Allomani\" && body=\"Programmed By Allomani\"\n- name: Keenetic_icon_hash\n  rule: icon_hash=\"547282364\"\n- name: 海康威视综合安防平台_body\n  rule: body=\"dist/jquery.js\" && body=\"home/locationIndex.action\"\n- name: URP-Integrated-educational-system_body\n  rule: body=\"<input name=\\\"j_captcha_response\\\" type=\\\"hidden\" && body=\"北京清元优软科技有限公司\"\n    && body=\"教务系统\"\n- name: Fortinet VPN_header\n  rule: header=\"Fortinet VPN\"\n- name: PiAware-Info_body\n  rule: body=\"piaware status\" && body=\"<%= t('this is a piaware ads-b feeder' %>.\"\n- name: TP-LINK WR842ND_header\n  rule: header=\"TP-LINK WR842ND\"\n- name: VideoIQ-Camera_header\n  rule: header=\"realm=\\\"avigilon\"\n- name: Alsovalue_header\n  rule: header=\"Alsovalue\"\n- name: HUAWEI-HG8121H_body\n  rule: body=\"var productname = 'hg8121h'\" && body=\"var productname = 'hg8121h';\"\n- name: Pagekit_Cms轻量级建站系统_header\n  rule: header=\"Pagekit_Cms轻量级建站系统\"\n- name: DELL-N2048P_body\n  rule: body=\"class=\\\"login_server_default\\\">n2048p\"\n- name: SDCMS神盾内容管理系统_body\n  rule: body=\"sdcms\" && body=\"login\"\n- name: Gigabit-Color-IP-Phone_header\n  rule: header=\"realm=\\\"gigabit color ip phone\"\n- name: Glossword_body\n  rule: body=\"content=\\\"glossword\" && body=\"content=\\\"Glossword\"\n- name: Hortonworks-SmartSense-Tool_body\n  rule: body=\"name=\\\"hstapp/configs/environment\\\"\"\n- name: Tengine_body\n  rule: body=\"If you see this page, the tengine web server is successfully installed\n    and\"\n- name: 天融信VPN设备_header\n  rule: header=\"topsecsvportalname\"\n- name: HanBangGaoKe-Camera_body\n  rule: body=\"id=\\\"id_download_coomet\\\"\"\n- name: WebPy_header\n  rule: header=\"webpy_session_id\" && header=\"WebPy\"\n- name: NSFOCUS_FireWall_header\n  rule: header=\"NSFOCUS_FireWall\"\n- name: QianXing-OA_body\n  rule: body=\"input name=\\\"s1\\\" type=\\\"image\\\"\" && body=\"count/mystat.asp\"\n- name: kesionCMS(科汛)_body\n  rule: body=\"kesionCMS\" && body=\"/ks_inc/common.js\" && body=\"publish by KesionCMS\"\n- name: kesionCMS(科汛)_header\n  rule: header=\"kesionCMS\"\n- name: Siemens_CP243-1_header\n  rule: header=\"CP243-1 IT\"\n- name: Brightspot_header\n  rule: header=\"Brightspot\"\n- name: WCS-2070 Wireless Day/Night IP Camera_header\n  rule: header=\"WCS-2070 Wireless Day/Night IP Camera\"\n- name: CommVault_header\n  rule: header=\"CommVault\"\n- name: Highcharts_header\n  rule: header=\"Highcharts\"\n- name: WebVisu_header\n  rule: header=\"WebVisu\"\n- name: NSFOCUS SAS_header\n  rule: header=\"NSFOCUS SAS\"\n- name: Pansoft-Management-System_body\n  rule: body=\"directlink = \\\"eafc.application\\\";\"\n- name: NETGEAR C6300_header\n  rule: header=\"NETGEAR C6300\"\n- name: 中兴路由器_header\n  rule: header=\"Server:Mini web server 1.0 ZTE corp 2005.\"\n- name: Buddy-Zone_body\n  rule: body=\"Powered By <a href=\\\"http://www.vastal.com\" && body=\">Buddy Zone</a>\"\n- name: iPresta_header\n  rule: header=\"iPresta\"\n- name: 网康广域网加速网关_header\n  rule: header=\"网康广域网加速网关\"\n- name: Power-PowerPMS_body\n  rule: body=\"apphub.server.registertohub(qrcodeid\" && body=\"/app_themes/default/assets/css/style.min.css\"\n    && body=\"/scripts/boot.js\"\n- name: SANGFOR 应用交付管理系统_header\n  rule: header=\"SANGFOR 应用交付管理系统\"\n- name: 深信服 NGAF_body\n  rule: body=\"SANGFOR\" && body=\"NGAF\" && body=\"login\"\n- name: Zentao-System_body\n  rule: 'body=\"<a id=''zentaopro'' href=''/pro/''\" && body=\"$(''#zentaopro''.addclass\"\n    && body=\"powered by <a href=''http://www.zentao.net'' target=''_blank''>zentaopms\"\n    && body=\"welcome to use zentao!\" && body=\"href=''/zentao/favicon.ico\" && body=\"server:\n    netvox z206-webs\" && body=\"server: cpws\"'\n- name: Grandstream-IP-Phone_body\n  rule: body=\"__gwt_historyframe\" && body=\"webapp/webapp.nocache.js\"\n- name: Apache Superset_title\n  rule: title=\"Superset\"\n- name: Nowayer-FTP_body\n  rule: body=\"content=\\\"nowayer\\\"\"\n- name: TRENDnet-TPL-410AP_body\n  rule: body=\"login to the tpl-410ap</td>\"\n- name: Ricoh-Network-Printer_header\n  rule: header=\"cookieonoffchecker=\"\n- name: Apache SkyWalking_header\n  rule: header=\"Apache SkyWalking\"\n- name: MochiKit_header\n  rule: header=\"MochiKit\"\n- name: EFM-Networks-ipTIME-V1016_body\n  rule: body=\"src=\\\"/images2/login_title.v1016.gif\\\"\"\n- name: Falcon_body\n  rule: body=\"<h3 class=\\\"font-bold\\\">opsplatform</h3>\" && body=\"<h3 class=\\\"font-bold\\\">opsplatform</h3>\"\n    && body=\"textarea class=\\\"form-control endpoints\"\n- name: EQMail 电子邮件系统_body\n  rule: body=\"Powered by EQMail\"\n- name: Zikula_CMS_header\n  rule: header=\"ZKSID2\"\n- name: Coinlab_header\n  rule: header=\"Coinlab\"\n- name: 行云海CMS网站内容管理系统_body\n  rule: body=\"行云海CMS网站内容管理系统\"\n- name: AWStats_body\n  rule: body=\"generator\\\" content=\\\"awstats\" && body=\"<frame name=\\\"mainleft\\\" src=\\\"awstats.pl?configs=\"\n    && body=\"<a href=\\\"http://www.awstats.org\\\" target=\\\"awstatshome\\\">created by\n    awstats \"\n- name: Sina-CDN_header\n  rule: header=\"x-via-cdn\" && header=\"sina-\"\n- name: ipTIME-V1024_body\n  rule: body=\"src=\\\"/images2/login_title.v1024.gif\\\"\"\n- name: AiCart_body\n  rule: body=\"APP_authenticate\"\n- name: PencilBlue_header\n  rule: header=\"PencilBlue\"\n- name: 共济科技-机房监控_header\n  rule: header=\"共济科技-机房监控\"\n- name: 青纺联物联查询平台_body\n  rule: body=\"青纺联物联查询平台\" && body=\"Themes/default/login.css\"\n- name: TP-LINK H5R_header\n  rule: header=\"TP-LINK H5R\"\n- name: WebRay 网络空间探测系统_header\n  rule: header=\"WebRay 网络空间探测系统\"\n- name: Liferay_body\n  rule: body=\"powered by liferay portal\"\n- name: EFM-Networks-ipTIME-N2+_body\n  rule: body=\"src=\\\"/images2/login_title.n2p.gif\\\"\" && body=\"src=\\\"/images2/login_title.n2.gif\\\"\"\n- name: Linksys BEFSR41v3_header\n  rule: header=\"Linksys BEFSR41v3\"\n- name: DiAn-Diagnostics_body\n  rule: body=\"浙江迪安诊断技术股份有限公司\" && body=\"src=\\\"/resources/pages/img/logo.svg\\\"\"\n- name: Windows CE_header\n  rule: header=\"Windows CE\"\n- name: Partizan-Cameras_body\n  rule: body=\"style=\\\"font-size:24px;float:left;\\\">network video client\"\n- name: TP-Link DD-WRT Bridge_header\n  rule: header=\"TP-Link DD-WRT Bridge\"\n- name: OpenSSH_header\n  rule: header=\"OpenSSH\"\n- name: 任我行 CRM_body\n  rule: body=\"/Handlers/IdentifyingCode.ashx\"\n- name: HUAWEI-HS8545M_body\n  rule: body=\"var productname = 'hs8545m'\" && body=\"window.location=\\\"https://\\\" +\n    sslhostip + \\\":\\\" + sslport\" && body=\"var sslhostip ='170.79.114.90'\"\n- name: 锐捷 SSLVPN_body\n  rule: body=\"SSLVPN\" && body=\"rjweb\" && body=\"login\" && body=\"SSLVPN\" && body=\"rjsslvpn_encookie\"\n    && body=\"login\"\n- name: devolo-dLAN-WIFI_body\n  rule: body=\"href=\\\"customization.css\\\"\"\n- name: sdcncsi_body\n  rule: body=\"<em class=\\\"wk-fl\\\">在沃系统</em>\" && body=\"refreshcaptchaimgfun\"\n- name: unknown_cms_rcms_header\n  rule: header=\"clientlanguage\"\n- name: unknown_cms_rcms_body\n  rule: body=\"r/cms/www\"\n- name: 网康NS-ASG应用安全网关_header\n  rule: header=\"网康NS-ASG应用安全网关\"\n- name: Hikvision iVMS-7800_header\n  rule: header=\"Hikvision iVMS-7800\"\n- name: Cisco-Adaptive-Security-Appliance_header\n  rule: header=\"Adaptive Security Appliance HTTP\"\n- name: TP-LINK Wireless WR747N_header\n  rule: header=\"TP-LINK Wireless WR747N\"\n- name: AJA-Video-Converter_body\n  rule: body=\"eparamid_swversion\" && body=\"eParamID_SWVersion\"\n- name: Kooboocms_header\n  rule: header=\"Kooboocms\"\n- name: Fastjson_body\n  rule: 'body=\"js/base/fastjson\" && body=\"var json = json.parse\" && body=\"nested exception\n    is com.alibaba.fastjson.JSONException: unclosed string\"'\n- name: 一马CMS_body\n  rule: body=\"一马CMS\"\n- name: 中软国际OA办公系统_header\n  rule: header=\"中软国际OA办公系统\"\n- name: Atlassian – Bamboo_icon_hash\n  rule: icon_hash=\"2221879069\"\n- name: 神行者路由_header\n  rule: header=\"神行者路由\"\n- name: Fortinet – Forticlient_icon_hash\n  rule: icon_hash=\"945408572\"\n- name: IdeaWebServer_header\n  rule: 'header=\"server: ideawebserver\" && header=\"IdeaWebServer\"'\n- name: uplink-Product_body\n  rule: body=\"up-link systems, inc.\"\n- name: OvisLink Camera_header\n  rule: header=\"OvisLink Camera\"\n- name: Sensors Data_header\n  rule: header=\"Sensors Data\"\n- name: Broadcom-Home-Gateway_header\n  rule: header=\"realm=\\\"broadcom home gateway\"\n- name: D-Link-DIR-855L_body\n  rule: body=\"<a href=\\\"javascript:check_is_modified('http://support.dlink.com/'\\\">dir-855l\"\n    && body=\"<a href=\\\"http://support.dlink.com.tw/\\\">dir-855l\"\n- name: ZTE-Police-research-system_body\n  rule: body=\"深圳市中兴信息技术有限公司版权所有\" && body=\"src=\\\"img/gonanlogo.jpg\"\n- name: EFM-Networks-ipTIME-N5_body\n  rule: body=\"src =\\\"/images2/login_title.n5.gif\\\"\"\n- name: opsview-Product_body\n  rule: body=\"/images/opsview_logo_large.gif\" && body=\"/images/opsviewcommunitylogo-large.png\"\n    && body=\"follow @opsview\"\n- name: Liferay_header\n  rule: header=\"liferay portal\" && header=\"guest_language_id=\" && header=\"Liferay-Portal\"\n- name: HYPHP_header\n  rule: header=\"HYPHP\"\n- name: BlueNet-Video_body\n  rule: body=\"/cgi-bin/client_execute.cgi?tud=0\" && body=\"/cgi-bin/client_execute.cgi?tUD=0\"\n- name: Mojolicious_header\n  rule: header=\"Mojolicious\"\n- name: DigitalInterrogation_body\n  rule: body=\"classid='clsid:e77e049b-23fc-4db8-b756-60529a35fad5'\"\n- name: wosign_ssl_cert_body\n  rule: body=\"https://seal.wosign.com/tws.js\" && body=\"https://seal.wosign.com/Signature\"\n- name: Inspur-Storage-_body\n  rule: body=\"<td align=\\\"left\\\">浪潮存储 您身边的存储专家</td>\"\n- name: HoneyMap_header\n  rule: header=\"HoneyMap\"\n- name: 天清汗马vpn_header\n  rule: header=\"天清汗马vpn\"\n- name: macOS Server (Apple)_icon_hash\n  rule: icon_hash=\"1629518721\"\n- name: Noted_header\n  rule: header=\"Noted\"\n- name: Siemens-HiPath-4000_body\n  rule: body=\"hipath 4000 administration tutorial\"\n- name: Sagemcom-TR-069_header\n  rule: header=\"realm=\\\"sagemcom tr-069\\\"\"\n- name: Quantum-Company's-product_body\n  rule: body=\"class=\\\"loginbodybackground\" && body=\"class=\\\"loginpatent\\\"\"\n- name: Open-edX_body\n  rule: body=\"id=\\\"footer-openedx\" && body=\"class=\\\"footer-about-openedx\" && body=\"alt=\\\"powered\n    by open edx\"\n- name: EasyTrace(botwave)_body\n  rule: body=\"login_page\"\n- name: Niagara-Web-Server_header\n  rule: header=\"niagara-release\"\n- name: Pelco-Sarix_body\n  rule: body=\"/content/javascripts/scriptaculous.js?load=effects,slider,controls,dragdrop\"\n    && body=\"/content/javascripts/tooltip.js\" && body=\"/content/javascripts/prototype.js\"\n    && body=\"function pegfootertobottom\"\n- name: TwistPHP_header\n  rule: header=\"TwistPHP\"\n- name: zabbix_body\n  rule: body=\"images/general/zabbix.ico\" && body=\"meta name=\\\"Author\\\" content=\\\"Zabbix\n    SIA\\\"\"\n- name: Ametys CMS_header\n  rule: header=\"Ametys CMS\"\n- name: zabbix_header\n  rule: header=\"zbx_sessionid\"\n- name: UnitEver数字化校园平台_header\n  rule: header=\"UnitEver数字化校园平台\"\n- name: Promise-WebPAM_body\n  rule: body=\"js/promise/themes/apple/images/logo_promise.png\" && body=\"src=\\\"js/dojo/promise.js\"\n- name: Compact-Router_header\n  rule: header=\"realm=\\\"compact router\"\n- name: HUAWEI-S7700_header\n  rule: header=\"s7700\"\n- name: SIMSWeb_body\n  rule: body=\"<form onsubmit=\\\"sendinfo(; return false;\\\" name=\\\"logon\" && body=\"src=\\\"/simsweb/monitor.js\"\n    && body=\"index.html\\\"><font color=\\\"black\\\" face=\\\"arial\\\">loading simsweb, please\n    wait.....</font></a></h2>\"\n- name: WIFI-Camera_header\n  rule: header=\"realm=\\\"wificam\"\n- name: OneinStack_body\n  rule: body=\"<a class=\\\"nav-link\\\" href=\\\"https://oneinstack.com\\\" target=\\\"_blank\\\">OneinStack\"\n- name: 磊科产品_header\n  rule: header=\"netcore\"\n- name: Firebase_header\n  rule: header=\"Firebase\"\n- name: Combivox_icon_hash\n  rule: icon_hash=\"-342262483\"\n- name: cradlepoint-IBR600E_body\n  rule: body=\"cplogin.model = \\\"ibr600e\\\";\"\n- name: a2b-Webserver_header\n  rule: 'header=\"server: a2b webserver\"'\n- name: inseego-Skyus-E_body\n  rule: body=\"src=\\\"img/skyus_e_fpos.png\\\"\"\n- name: DELL-PC8024_body\n  rule: body=\"class=\\\"login_server_default\\\">pc8024\"\n- name: moxa VPort P06-1MP-M12 IP Camera_header\n  rule: header=\"moxa VPort P06-1MP-M12 IP Camera\"\n- name: NETGEAR JWNR2000v2_header\n  rule: header=\"NETGEAR JWNR2000v2\"\n- name: NextGEN Gallery_header\n  rule: header=\"NextGEN Gallery\"\n- name: 北京数字认证 TSS时间戳服务器_header\n  rule: header=\"北京数字认证 TSS时间戳服务器\"\n- name: conftool_header\n  rule: header=\"conftool\"\n- name: Cake PHP_icon_hash\n  rule: icon_hash=\"980692677\"\n- name: Panasonic webcam_header\n  rule: header=\"Panasonic webcam\"\n- name: WeiPHP_body\n  rule: body=\"weiphp.css\" && body=\"weiphp\" && body=\"Public/static\" && body=\"content=\\\"weiphp\"\n    && body=\"/css/weiphp.css\"\n- name: DCN-DCWS-6028_body\n  rule: body=\"id=\\\"span_thead\\\">dcws-6028</span>\"\n- name: Spring Security_header\n  rule: header=\"Spring Security Application\"\n- name: Lorex-Surveillance_body\n  rule: body=\"href=\\\"/lorex_webplugin.exe\"\n- name: HotelCMS(bookingeCMS)_body\n  rule: body=\"HotelCMS\" && body=\"bookingeCMS\"\n- name: YidaCMS免费开源网站管理系统_body\n  rule: body=\"yidacms.css\"\n- name: NETGEAR EX2700_header\n  rule: header=\"NETGEAR EX2700\"\n- name: IMGallery_body\n  rule: body=\"href=\\\"http://www.imgallery.zor.pl\\\"><b>imgallery\" && body=\"href=\\\"http://www.imgallery.zor.pl\\\"><b>IMGallery\"\n- name: uniview-EZclould_body\n  rule: body=\"src=\\\"images/pag-logo.png\\\"\"\n- name: TCExam(在线考试系统)_body\n  rule: body=\"TCExam\" && body=\"在线考试系统\"\n- name: TCExam(在线考试系统)_header\n  rule: header=\"TCExam\" && header=\"在线考试系统\"\n- name: Cisco IOS-XR_header\n  rule: header=\"Cisco IOS-XR\"\n- name: micro_httpd_header\n  rule: header=\"micro_httpd\"\n- name: Alpha Five Application Server_header\n  rule: header=\"Alpha Five Application Server\"\n- name: AdRoll_header\n  rule: header=\"AdRoll\"\n- name: JUNIPer-QFX5100-48s-6q_body\n  rule: body=\"class=\\\"jweb-title uppercase\\\"> - qfx5100-48s-6q\"\n- name: Teleport 堡垒机_body\n  rule: body=\"TELEPORT\" && body=\"teleport.js\" && body=\"login-account\" && body=\"teleport.js\"\n    && body=\"login-type-oath\" && body=\"bind-oath\"\n- name: msvod-MediaManager_body\n  rule: body=\"$('.sign-btn'.addclass(\\\"completion\\\";\" && body=\"static/js/meisicms.js\"\n    && body=\"content=\\\"魅思cms\"\n- name: DNN (CMS)_icon_hash\n  rule: icon_hash=\"2829487953\"\n- name: PHPDisk_body\n  rule: body=\"powered by phpdisk\" && body=\"content=\\\"phpdisk\"\n- name: DLink-DI-808HV_header\n  rule: header=\"realm=\\\"di-808hv\"\n- name: JavaScript Infovis Toolkit_header\n  rule: header=\"JavaScript Infovis Toolkit\"\n- name: QTECH-QBR-ADSL_header\n  rule: header=\"realm=\\\"qbr\"\n- name: Ruxit_header\n  rule: header=\"Ruxit\"\n- name: FCS-1040 P/T/Z IP Camera_header\n  rule: header=\"FCS-1040 P/T/Z IP Camera\"\n- name: Cwindow政务安全邮箱系统_header\n  rule: header=\"Cwindow政务安全邮箱系统\"\n- name: DotNetNuke_header\n  rule: header=\"DotNetNukeAnonymous\" && header=\"Dnnoutputcache\"\n- name: ASUS-TUF-AX3000_body\n  rule: body=\"document.getelementsbyclassname(\\\"model-name\\\"[0].innerhtml = \\\"tuf-ax3000\\\"\"\n    && body=\"class=\\\"prod_madelname\\\">tuf-ax3000</div>\"\n- name: Scrutinizer-Traffic-management-system_body\n  rule: body=\"<div id='testalerthdrmsg'>for the best scrutinizer experience possible,\n    please address the issues below:\"\n- name: DELL-PCM6348_body\n  rule: body=\"class=\\\"login_server_default\\\">pcm6348\"\n- name: New_Cms博客系统_body\n  rule: body=\"New_Cms博客系统\"\n- name: corega-BARFX2_header\n  rule: header=\"realm=\\\"cg-bar fx2\"\n- name: Canon Camera OS_header\n  rule: header=\"Canon Camera OS\"\n- name: 华域Reporter_body\n  rule: body=\"reporter\" && body=\"login\" && body=\"action.php\"\n- name: HUAWEI-USG6306_header\n  rule: header=\"huawei usg6306\"\n- name: NetMizer 日志管理系统_body\n  rule: body=\"NetMizer 日志管理系统\"\n- name: firebird_header\n  rule: header=\"firebird\"\n- name: KT_telecop-Digital-Video_body\n  rule: body=\"https://itunes.apple.com/us/app/ismart-viewer/\"\n- name: OMCnet-WebServer_header\n  rule: header=\"OMCnet-WebServer\"\n- name: Incapsula_body\n  rule: body=\"incapsula incident id\"\n- name: Incapsula_header\n  rule: 'header=\"x-cdn: incapsula\" && header=\"X-Cdn:Incapsula\"'\n- name: ramptel-SansCord-Router_body\n  rule: body=\"name=username value=\\\"ywrtaw4=\\\"\" && body=\"href=\\\"http://www.ramptel.com/\\\"\"\n- name: Zen Cart_body\n  rule: body=\"shopping cart program by Zen Cart\"\n- name: Zen Cart_header\n  rule: header=\"Set-Cookie:zenid=\"\n- name: Netgear WNR834B_header\n  rule: header=\"Netgear WNR834B\"\n- name: 广联达 广讯通_body\n  rule: body=\"gtp.standard\" && body=\"JS/gxtAutoLogin.js\"\n- name: Digifort_header\n  rule: header=\"realm=\\\"digifort http \" && header=\"realm=\\\"serveur digifort http\"\n- name: Foosun_body\n  rule: body=\"created by dotnetcms\" && body=\"powered by www.foosun.net,products:foosun\n    content manage system\" && body=\"Created by DotNetCMS\" && body=\"For Foosun\" &&\n    body=\"Powered by www.Foosun.net,Products:Foosun Content Manage system\" && body=\"foosun\"\n- name: ASUS-Lyra-Trio_body\n  rule: body=\"class=\\\"prod_madelname\\\">lyra_trio</div>\"\n- name: DELL-poweredge-r410_header\n  rule: header=\"poweredge-r410\"\n- name: InterRed_body\n  rule: body=\"content=\\\"interred\" && body=\"created with interred\" && body=\"content=\\\"InterRed\"\n    && body=\"Created with InterRed\"\n- name: 西默智能DNS_header\n  rule: header=\"西默智能DNS\"\n- name: rosewill-router_header\n  rule: 'header=\"rnx-n300rt\" && header=\"default: admin/admin\"'\n- name: OpenERP (now known as Odoo)_icon_hash\n  rule: icon_hash=\"1966198264\"\n- name: Websale_header\n  rule: header=\"Websale\"\n- name: Dell-iDRAC_header\n  rule: header=\"Dell-iDRAC\"\n- name: 致梦科技-管家婆物联通_body\n  rule: body=\"HtmlPages/Vue/vue.js\" && body=\"GetLoginValidate\"\n- name: FireEye_header\n  rule: header=\"fireeye\"\n- name: Yottabyte-Company's-product_body\n  rule: body=\"class=\\\"btn btn-primary form-btn form-btn-login pull-right\\\"\"\n- name: FireEye_icon_hash\n  rule: icon_hash=\"95271369\" && icon_hash=\"1476335317\" && icon_hash=\"-842192932\" &&\n    icon_hash=\"105083909\" && icon_hash=\"240606739\" && icon_hash=\"2121539357\"\n- name: FireEye Threat Protection Cloud_header\n  rule: header=\"FireEye Threat Protection Cloud\"\n- name: D-Link-Network-Camera_body\n  rule: body=\"DCS-950G\\\".toLowerCase()\"\n- name: SillySmart_body\n  rule: body=\"var slsbuild\"\n- name: CenturyLink-Actiontec-M1000_body\n  rule: body=\">centurylink&reg; modem configuration actiontec m1000<\"\n- name: DotNetNuke_body\n  rule: body=\"content=\\\"DotNetNuke\" && body=\"content=\\\",DotNetNuke\"\n- name: Western_Digital-MyBook_body\n  rule: body=\"src=\\\"/img/headernav_separator.gif\\\"\"\n- name: JSMpeg_header\n  rule: header=\"JSMpeg\"\n- name: LocalFocus_header\n  rule: header=\"LocalFocus\"\n- name: Boa HTTPd_header\n  rule: header=\"Boa HTTPd\"\n- name: NETGEAR WGR614v8_header\n  rule: header=\"NETGEAR WGR614v8\"\n- name: 313自助建站_header\n  rule: header=\"313CMS\"\n- name: 263-Meeting_body\n  rule: body=\"<frame src=\\\"/jsp/conference/meetinglist.jsp\\\" name=\\\"mainframe\\\"/>\"\n    && body=\"263电话会议\"\n- name: SIEMENS IP-Camera_header\n  rule: header=\"SIEMENS IP-Camera\"\n- name: ADSOFT Server_header\n  rule: header=\"ADSOFT Server\"\n- name: 亿赛通电子文档安全管理系统_body\n  rule: body=\"电子文档安全管理系统\" && body=\"CDGServer3\"\n- name: Akamai-CDN_header\n  rule: 'header=\"server: akamaighost\" && header=\"akamai-ip: \"'\n- name: AfterLogicWebMail系统_icon_hash\n  rule: icon_hash=\"4100175528\"\n- name: IBM-CICS-Transaction-Server_header\n  rule: 'header=\"server: ibm_cics_transaction_server\" && header=\"IBM_CICS_Transaction_Server\"'\n- name: SystemBase-PortBase_header\n  rule: header=\"realm=\\\"portbase\"\n- name: mailgard-webmail_body\n  rule: body=\"webmail\"\n- name: HISOME SIP路由分发服务器_header\n  rule: header=\"HISOME SIP路由分发服务器\"\n- name: 玫莎MissraCMS_body\n  rule: body=\"玫莎MissraCMS\"\n- name: OPNsense_icon_hash\n  rule: icon_hash=\"-1148190371\"\n- name: WWW File Share Pro_header\n  rule: header=\"WWW File Share Pro\"\n- name: NETGEAR CG3700EMR-1CMNDS_header\n  rule: header=\"NETGEAR CG3700EMR-1CMNDS\"\n- name: Marketo_header\n  rule: header=\"Marketo\"\n- name: VMware-VirtualCenter_body\n  rule: body=\"content=\\\"vmware virtualcenter\" && body=\"content=\\\"vmware vsphere\"\n- name: SiteEngine_body\n  rule: body=\"content=\\\"boka siteengine\" && body=\"content=\\\"Boka SiteEngine\"\n- name: FCMS_body\n  rule: body=\"content=\\\"Ryan Haudenschilt\" && body=\"Powered by Family Connections\"\n- name: DELL-POWEREDGE-T620_body\n  rule: body=\"id=\\\"serverinfo\\\"> poweredge t620\" && body=\"serverinfo\\\"> t620, dbe\"\n- name: 爱瑞思科研管理系统(IRISaaS)_header\n  rule: header=\"爱瑞思科研管理系统\" && header=\"IRISaaS\"\n- name: SONY-SNC-CX600W_header\n  rule: header=\"realm=\\\"snc-cx600w\"\n- name: 爱瑞思科研管理系统(IRISaaS)_body\n  rule: body=\"爱瑞思科研管理系统\" && body=\"IRISaaS\"\n- name: Canon-Print-or-Copier_header\n  rule: 'header=\"canon http server\" && header=\"server: catwalk\"'\n- name: EFM-Networks-ipTIME-N904V_body\n  rule: body=\"src=\\\"/images2/login_title.n904v.gif\\\"\"\n- name: OpenBSD httpd_header\n  rule: header=\"OpenBSD httpd\"\n- name: Zscaler-FIREWALL_header\n  rule: 'header=\"set-cookie: _sm_au_d\"'\n- name: WebSite X5_header\n  rule: header=\"WebSite X5\"\n- name: MemSQL_body\n  rule: body=\"<h1>this browser is not supported by memsql ops</h2>\"\n- name: Comcast-Business_body\n  rule: body=\"cmn/css/common-min.css\"\n- name: EDIMAX-Modem_header\n  rule: header=\"realm=\\\"ar-7182wna\" && header=\"realm=\\\"ar-7286wnb\"\n- name: IP-COM 深度上网行为管理_header\n  rule: header=\"IP-COM 深度上网行为管理\"\n- name: ShardingSphere UI_header\n  rule: header=\"ShardingSphere UI\"\n- name: Planet-NVR-915_header\n  rule: header=\"realm=\\\"nvr-915\"\n- name: DLink-DI-524UP_header\n  rule: header=\"realm=\\\"di-524up\"\n- name: OSIRIX-Pixmeo_body\n  rule: body=\"<span>radone pacs</span>\"\n- name: CodeIgniter-PHP-Framework_header\n  rule: header=\"ci_session=\" && header=\"ci_session=\"\n- name: gdada-ADAAccess_body\n  rule: body=\" welcome to ada access control system \"\n- name: 深信服 防火墙_header\n  rule: header=\"深信服 防火墙\"\n- name: Yealink-VC400_body\n  rule: body=\"span id=\\\"devtype\\\">vc400\"\n- name: 南方数据企业建站系统_header\n  rule: header=\"南方数据企业建站系统\"\n- name: Meebo_header\n  rule: header=\"Meebo\"\n- name: Flower - Celery monitoring tool_body\n  rule: body=\"<a class=\\\"brand\\\" href=\\\"/\\\">flower</a>\"\n- name: Power-Company's-product_body\n  rule: body=\"onclick=\\\"return settheme('60year'\"\n- name: Internet-Cluster-Manager_header\n  rule: 'header=\"server: internet cluster manager\" && header=\"Internet Cluster Manager\"'\n- name: Synology-NAS_body\n  rule: body=\"content=\\\"synology diskstation\" && body=\"content=\\\"synology nas 提供功能完整的网络存储\"\n- name: 360WiFi-Expander_body\n  rule: body=\"id=\\\"slogan\\\">欢迎使用360wifi扩展器</div>\"\n- name: Nexus-Router_body\n  rule: body=\"http://nexuswifi.com/\"\n- name: TRENDnet-TEW-810DR_body\n  rule: body=\"tew-810dr pre-test\"\n- name: 医院物资供应商B2B平台_header\n  rule: header=\"医院物资供应商B2B平台\"\n- name: SoftTr_header\n  rule: header=\"SoftTr\"\n- name: BIGACE_body\n  rule: body=\"content=\\\"BIGACE\" && body=\"Site is running BIGACE\"\n- name: PnPSCADA_body\n  rule: body=\"style='font-family:arial;font-size:10px'>pnpscada \"\n- name: Cisco firewall_header\n  rule: header=\"Cisco firewall\"\n- name: 263-HRM_body\n  rule: body=\"<p align=\\\"center\\\">请使用263em登陆!</p>\"\n- name: Unimep-Station-Controller_body\n  rule: body=\"<a href=\\\"cgi-bin/log.log.cgi\" && body=\"<meta name=\\\"description\\\" content=\\\"unimep\n    station controller\\\">\"\n- name: OA企业智能办公自动化系统_body\n  rule: body=\"input name=\\\"S1\\\" type=\\\"image\\\"\" && body=\"count/mystat.asp\"\n- name: Knopflerfish-HTTP-Server_header\n  rule: 'header=\"server: the knopflerfish http server\" && header=\"The Knopflerfish\n    HTTP Server\"'\n- name: Lutron Quantum_header\n  rule: header=\"Lutron Quantum\"\n- name: ManageEngine-ServiceDesk_body\n  rule: body=\",'manageengine servicedesk plus',\"\n- name: TRENDnet-TV-IP551WI_header\n  rule: header=\"realm=\\\"tv-ip551wi\"\n- name: boblog_body\n  rule: body=\"boblog_ajax\"\n- name: Juniper Networks VPN Client Application_header\n  rule: header=\"Juniper Networks VPN Client Application\"\n- name: ikuai-flow-control-router_body\n  rule: body=\"/resources/images/land_prompt_ico01.gif\" && body=\"<li><a href=\\\"http://www.ikuai8.com\\\"\n    target=\\\"_blank\\\">官网</a></li>\" && body=\"src=/static/js/manifest.6513b08df486af67396b.js>\"\n- name: Baidu_icon_hash\n  rule: icon_hash=\"1118684072\"\n- name: Direct-Packet-Device_header\n  rule: 'header=\"server: dpwebserver\" && header=\"DPWebServer\"'\n- name: Rapid Logic_body\n  rule: body=\"/jscripts/rap_util.js\"\n- name: NSFOCUS-Aurora-self-service-scanning-Agent_body\n  rule: body=\"/aurora_nsfocus.png\"\n- name: EFM-Networks-ipTIME-A104M_body\n  rule: body=\"src =\\\"/images2/login_title.n104m.gif\\\"\"\n- name: Bosch-SPS_body\n  rule: body=\"miccomp[0][1] ==\" && body=\"src='inner_frmset.html'>\" && body=\"bosch\n    security systems.  all rights reserved.\"\n- name: HP-J4813A_header\n  rule: header=\"realm=\\\"hp j4813a\"\n- name: ZNV-Cameras-and-Surveillance_body\n  rule: body=\"object id=clientocx classid=clsid\"\n- name: Posterous_header\n  rule: header=\"_sharebymail_session_id=\" && header=\"Posterous\"\n- name: oVirt-Virtualization_body\n  rule: body=\"<a href=\\\"https://www.ovirt.org\\\" class=\\\"obrand_loginpagelogolink\\\">\"\n- name: Lighty_header\n  rule: header=\"Lighty\"\n- name: tp-shop_body\n  rule: body=\"mn-c-top\"\n- name: oVirt-Virtualization_header\n  rule: header=\"/ovirt-engine/\"\n- name: InfraServer_header\n  rule: header=\"InfraServer\"\n- name: JEECMS内容管理系统_body\n  rule: body=\"http://www.jeecms.com\" && body=\"JEECMS\"\n- name: EFM-Networks-ipTIME-N704V3_body\n  rule: body=\"src =\\\"/images2/login_title.n704v3.gif\\\"\"\n- name: TP-LINK Wireless WR847N_header\n  rule: header=\"TP-LINK Wireless WR847N\"\n- name: bamboocloud-BIM_body\n  rule: body=\"bim 开发配置与运维控制台\"\n- name: Ftxia淘宝客_header\n  rule: header=\"Ftxia淘宝客\"\n- name: Atlassian – Confluence_icon_hash\n  rule: icon_hash=\"3989787984\" && icon_hash=\"2652434805\"\n- name: EnGenius_header\n  rule: header=\"EnGenius\"\n- name: NETGEAR R6300v2_header\n  rule: header=\"NETGEAR R6300v2\"\n- name: SourceBans_body\n  rule: body=\"<div id=\\\"footqversion\\\">version\" && body=\"http://www.sourcebans.net\\\"\n    target=\\\"_blank\\\"><img src=\\\"images/sb.png\"\n- name: ZeroMQ ZMTP_header\n  rule: header=\"ZeroMQ ZMTP\"\n- name: QiniuCDN_header\n  rule: header=\"glb.clouddn.com\" && header=\"x-qiniu-zone\"\n- name: myhttpd_header\n  rule: header=\"myhttpd\"\n- name: TP-LINK Wireless WR340G+_header\n  rule: header=\"TP-LINK Wireless WR340G+\"\n- name: 明御安全网关_body\n  rule: body=\"<title>明御安全网关</title>\"\n- name: axTLS embad httpd_header\n  rule: header=\"axhttpd\"\n- name: ASUS AiCloud_icon_hash\n  rule: icon_hash=\"552592949\"\n- name: FeiWa_header\n  rule: header=\"FeiWa\"\n- name: SERCOMM-DRG600_header\n  rule: header=\"realm=\\\"drg600.wifi\"\n- name: DELL-N3024P_body\n  rule: body=\"class=\\\"login_server_default\\\">n3024p\"\n- name: 计通机房环境监控系统_header\n  rule: header=\"计通机房环境监控系统\"\n- name: Western-Digital_header\n  rule: header=\"wt263cdn\"\n- name: DataflexHERA-Webserver_header\n  rule: header=\"DataflexHERA-Webserver\"\n- name: 锐捷下一代防火墙_header\n  rule: header=\"锐捷下一代防火墙\"\n- name: Wygk-Product_body\n  rule: body=\"href=\\\"wrzcnet.ico\" && body=\"<a href=\\\"mailto:webmaster@wrzc.net\" &&\n    body=\"url = 'wrzcnet_vote.asp?stype=view';\"\n- name: CAStor_header\n  rule: header=\"castor\" && header=\"CAStor\"\n- name: AD_RS设备_header\n  rule: header=\"AD_RS_COOKIE\"\n- name: FAST Search for SharePoint_header\n  rule: header=\"FAST Search for SharePoint\"\n- name: GPON Home Gateway_icon_hash\n  rule: icon_hash=\"251106693\"\n- name: zen_cart-shopping_header\n  rule: 'header=\"set-cookie: zenid=\" && header=\"shoppingcartsession=\"'\n- name: Net2Phone_body\n  rule: body=\"net2phone, inc. all rights\"\n- name: Amazon-ECS_header\n  rule: header=\"x-amz-error-\"\n- name: 同鑫T9eHR信息化管理系统_body\n  rule: body=\"T9eHR-iconfont\" && body=\"Authentication/Login\"\n- name: East-Auspicious-Clouds_body\n  rule: body=\"<p>版权所有：贵州东方世纪科技股份有限公司\"\n- name: 牛逼cms_body\n  rule: body=\"content=\\\"niubicms\"\n- name: Proximis Web to Store_header\n  rule: header=\"Proximis Web to Store\"\n- name: Gatsby_header\n  rule: header=\"Gatsby\"\n- name: Sun ONE Web Server_header\n  rule: header=\"Sun ONE Web Server\"\n- name: ASUS-RT-AC88U_header\n  rule: header=\"realm=\\\"asusrt-ac88u\"\n- name: iXCache_body\n  rule: body=\"iXCache\" && body=\"/login/userverify.cgi\"\n- name: YoudianCMS_header\n  rule: header=\"YoudianCMS\"\n- name: flow-framework_header\n  rule: header=\"flow/framework\"\n- name: PbootCMS_header\n  rule: header=\"PbootSystem\" && header=\"PbootCMS\" && header=\"PbootCMS\"\n- name: h3c路由器_body\n  rule: body=\"nLanguageSupported\"\n- name: Basilic_body\n  rule: body=\"/Software/Basilic\"\n- name: memcached_header\n  rule: header=\"memcached\"\n- name: Gentoo Linux_header\n  rule: header=\"Gentoo\"\n- name: Auction Network Webs_header\n  rule: header=\"Auction Network Webs\"\n- name: PHP168_header\n  rule: header=\"PHP168\"\n- name: FileMaker_body\n  rule: body=\"/fmi/iwp/cgi?-noscript\"\n- name: FileMaker_header\n  rule: header=\"fmi-cookie\"\n- name: Zend-Framework_header\n  rule: header=\"zend framework\"\n- name: XAMPP 默认页面_title\n  rule: title=\"Welcome to XAMPP\"\n- name: IPEC-IPMS_body\n  rule: body=\"/login/lpec/qrcode.html\"\n- name: ipTIME-A7NS_body\n  rule: body=\"src=\\\"/images2/login_title.a7ns.gif\\\"\"\n- name: 大汉版通-Hanweb-system_body\n  rule: body=\"大汉版通\" && body=\"大汉网络\" && body=\"hanweb.com' style='display:none'\"\n- name: H3C Router_body\n  rule: body=\"/wnm/ssl/web/frame/login.html\"\n- name: Digifort_body\n  rule: body=\"content=\\\"digifort\" && body=\"href=\\\"http://www.digifort.jp/\\\"><img src=\\\"/user_data/packages/digifort_pc/img/common/logo.gif\"\n    && body=\"digifort http \" && body=\"serveur digifort http\" && body=\"digifort http\n    \" && body=\"serveur digifort http\"\n- name: Eleanor CMS_header\n  rule: header=\"Eleanor CMS\"\n- name: 泰信 TMailer邮件系统_header\n  rule: header=\"泰信 TMailer邮件系统\"\n- name: PIXEL-M151RW3_header\n  rule: header=\"realm=\\\"pixel m151rw3\"\n- name: Golang net_header\n  rule: header=\"Golang net\"\n- name: Plentymarkets_header\n  rule: header=\"Plentymarkets\"\n- name: Barracuda-WAF_header\n  rule: header=\"bni__barracuda_lb_cookie=\"\n- name: TOPPER-NMS_body\n  rule: body=\"mailto:kenstar@kenstar-group.com\"\n- name: quoracms_body\n  rule: body=\"quoracms\"\n- name: Google-Search-Appliance_header\n  rule: 'header=\"server: google search appliance\"'\n- name: 04WebServer_header\n  rule: header=\"04WebServer\"\n- name: SimpleTech-SimpleShare-NAS_header\n  rule: header=\"default user name is admin and password is simple\"\n- name: EnGenius-wifi_body\n  rule: 'body=\"style=\\\"background: url(/pictures/img_bg_horizon.png repeat-x\\\"\"'\n- name: disqus_body\n  rule: body=\"disqus_thread\"\n- name: Eserv_body\n  rule: body=\"content=\\\"Eserv\"\n- name: ProScan_header\n  rule: 'header=\"server: proscan\"'\n- name: Fastweb_header\n  rule: 'header=\"fw-via: \"'\n- name: LG WebOS_header\n  rule: header=\"LG WebOS\"\n- name: GoodTextPHP_header\n  rule: header=\"GoodTextPHP\"\n- name: Alcatel_Lucent-OS6560-P24X4_body\n  rule: body=\"<span>device os6560-p24x4\"\n- name: TP-LINK SOHO R410v2.5_header\n  rule: header=\"TP-LINK SOHO R410v2.5\"\n- name: EFM-Networks-ipTIME-A104_body\n  rule: body=\"src=\\\"/images2/login_title.a104.gif\\\"\"\n- name: SmartPing_icon_hash\n  rule: icon_hash=\"430582574\"\n- name: Sangfor-Application-Performance-Management_body\n  rule: body=\"help=\\\"版本信息:<br/>apm-\"\n- name: Yeastar-VOIP_body\n  rule: body=\"yeastar\" && body=\"l.cp.common.copyright\"\n- name: webpack_header\n  rule: header=\"webpack\"\n- name: NETGEAR R6300_header\n  rule: header=\"NETGEAR R6300\"\n- name: 大华-智慧园区综合管理平台_body\n  rule: body=\"DSS助手\" && body=\"/WPMS/asset/img/black/\"\n- name: WebOffice_header\n  rule: header=\"WebOffice\"\n- name: euseStudy_body\n  rule: body=\"userinfo/userfp.aspx\"\n- name: 雷风cms_header\n  rule: header=\"雷风cms\"\n- name: PRTG Network Monitor_header\n  rule: header=\"PRTG Network Monitor\"\n- name: tjtongyangkeji-System_body\n  rule: body=\"/content/tongyang-login.css\"\n- name: PRTG Network Monitor_icon_hash\n  rule: icon_hash=\"-655683626\"\n- name: DASAN-Cameras-and-Surveillance_body\n  rule: body=\"clear_cookie(\\\"login\\\";\"\n- name: Datadome_header\n  rule: header=\"Datadome\"\n- name: TRENDnet-TV-IP851WIC_body\n  rule: body=\"src=\\\"descript.gif?cidx=tv-ip851wic1.022014-03-31\\\"\" && body=\"tv-ip851wic\"\n- name: TRENDnet-TV-IP851WIC_header\n  rule: header=\"realm=\\\"tv-ip851wic\"\n- name: BoldGrid_header\n  rule: header=\"BoldGrid\"\n- name: Barracuda-LoadBalancer_header\n  rule: header=\"barracuda_lb_cookie\" && header=\"bni_persistence=\"\n- name: Yunsuo_body\n  rule: body=\"href=\\\"http://bbs.yunsuo.com.cn\" && body=\"<img class=\\\"yunsuologo\\\"\"\n- name: verydows_header\n  rule: header=\"verydows\"\n- name: Yunsuo_header\n  rule: header=\"yunsuo_session_verify\"\n- name: HangSeng-Cameras-and-Surveillance_body\n  rule: body=\"codebase=\\\"hisome_activex.exe\"\n- name: JUNIPer-srx650_body\n  rule: body=\"class=\\\"jweb-title uppercase\\\"> - srx650\"\n- name: BlogEngine_NET_body\n  rule: body=\"pics/blogengine.ico\" && body=\"http://www.dotnetblogengine.net\"\n- name: rbsoft-Software_body\n  rule: body=\"name=\\\"redirectto\\\" value=\\\"/zym/rbkj.nsf\\\"\"\n- name: DataTables_header\n  rule: header=\"DataTables\"\n- name: typo3_header\n  rule: header=\"fe_typo_user\"\n- name: Superdata-OA_body\n  rule: body=\"速达软件技术（广州）有限公司\"\n- name: phpinfo_body\n  rule: body=\"<title>phpinfo\" && body=\"Virtual Directory Support\"\n- name: Amiro-CMS_body\n  rule: 'body=\"Powered by: Amiro CMS\" && body=\"-= Amiro.CMS (c) =-\"'\n- name: HKCMS_header\n  rule: header=\"HKCMS\"\n- name: IBOS-OA_body\n  rule: body=\"<meta name=\\\"author\\\" content=\\\"IBOS Team\\\" />\"\n- name: TopSec Firewall_header\n  rule: header=\"TopSec Firewall\"\n- name: OpenLayers_header\n  rule: header=\"OpenLayers\"\n- name: Emay-B/S-SMS_body\n  rule: body=\"亿美满意通\"\n- name: Aastra-6757i_header\n  rule: header=\"aastra 6757i\"\n- name: YONYOU NC_body\n  rule: body=\"uclient.yonyou.com\" && body=\"UClient\"\n- name: TRENDnet-TV-IP651W_body\n  rule: body=\"(tv-ip651w</title>\" && body=\"<modelname>tv-ip651w\"\n- name: yershop(贝云cms内容管理系统)_body\n  rule: body=\"yershop\" && body=\"贝云cms内容管理系统\"\n- name: Twiki_header\n  rule: header=\"Twiki\"\n- name: HUAWEI EchoLife HG8245A_header\n  rule: header=\"HUAWEI EchoLife HG8245A\"\n- name: TP-LINK Wireless WA801ND_header\n  rule: header=\"TP-LINK Wireless WA801ND\"\n- name: IBM Storwize_header\n  rule: header=\"IBM Storwize\"\n- name: MOBOTIX Camera_icon_hash\n  rule: icon_hash=\"661332347\"\n- name: FrontPage-Extensions_header\n  rule: header=\"frontpage\" && header=\"FrontPage\"\n- name: ZyXEL-USG110_body\n  rule: body=\"<div class=\\\"model\\\" id=\\\"model\\\" name=\\\"model\\\">usg110</div>\"\n- name: ArrayNetworks-Company's-product_header\n  rule: header=\"realm=\\\"array networks webui\"\n- name: Infowarelab-System-Management-Center_body\n  rule: body=\"class=\\\"main_loginbar\" && body=\"<div class=\\\"main_supporterbar\\\">\"\n- name: Intelligence-Parking-Integrated-management-platform_body\n  rule: body=\"厦门立智通讯科技有限公司 版权所有\"\n- name: ManagedFusion_header\n  rule: header=\"managedfusion\" && header=\"ManagedFusion\"\n- name: Topsec-Web-application-security-&-protection-system_body\n  rule: body=\"class=\\\"logintop\\\"\" && body=\"href=\\\"login_html_files/loginstyle.css\\\"\"\n- name: Technicolor_icon_hash\n  rule: icon_hash=\"1594377337\" && icon_hash=\"-2138771289\"\n- name: SEMcms_body\n  rule: body=\"semcms PHP\" && body=\"sc_mid_c_left_c sc_mid_left_bt\"\n- name: transifex_header\n  rule: header=\"transifex\"\n- name: Spiceworks (panel)_icon_hash\n  rule: icon_hash=\"-2117390767\"\n- name: WordPress_body\n  rule: body=\"wp-admin\" && body=\"wp-content/\" && body=\"wp-\" && body=\"wp-content/themes/\"\n    && body=\"name=\\\"generator\\\" content=\\\"wordpress \" && body=\"/wp-includes/\"\n- name: Alcatel_Lucent-OS6860U-28_body\n  rule: body=\"<span>device os6860u-28\"\n- name: taoCMS_body\n  rule: body=\"template/taocms\" && body=\"src=\\\"/taocms/code/calendar.js\\\"\"\n- name: Barracuda-Load-Balancer_header\n  rule: header=\"BARRACUDA_LB_COOKIE\"\n- name: Rickshaw_header\n  rule: header=\"Rickshaw\"\n- name: easypanel_body\n  rule: body=\"easypanel\" && body=\"vhost\" && body=\"login\" && body=\"/vhost/view/default/style/login.css\"\n    && body=\"/vhost/view/default/style/login.css\"\n- name: Intelbras SA_icon_hash\n  rule: icon_hash=\"2006716043\" && icon_hash=\"283740897\" && icon_hash=\"2888556547\"\n- name: ZyXEL-USG1900_body\n  rule: body=\"<div class=\\\"model\\\" id=\\\"model\\\" name=\\\"model\\\">usg1900</div>\"\n- name: CodeIgniter_body\n  rule: body=\"<p>The page you are looking at is being generated dynamically by CodeIgniter.</p>\"\n- name: Swiftype_header\n  rule: header=\"Swiftype\"\n- name: kingsoft-DuBa-Enterprise_body\n  rule: body=\"class=\\\"title\\\">关于全网部署金山毒霸企业版\"\n- name: Pascale Moise_header\n  rule: header=\"Pascale Moise\"\n- name: CodeIgniter_header\n  rule: header=\"ci_session\"\n- name: 易看影视CMS_免费版_body\n  rule: body=\"易看影视CMS_免费版\"\n- name: Ruijie-IT_body\n  rule: body=\"var logincookiename = 'riil_id'\"\n- name: DCS-2103_header\n  rule: header=\"realm=\\\"dcs-2103\"\n- name: Venustech-TianYue_body\n  rule: body=\"<a href=\\\"../client/site-downloadruntimedetector\"\n- name: Ubiquiti-airCube-ISP_body\n  rule: body=\"href=\\\"main.90b93d4e91.css\\\"\" && body=\"href=\\\"main.3bd1a14e0b.css\\\"\"\n    && body=\"href=\\\"main.c3c0eeb2ed.css\\\"\"\n- name: Synology-DMS_body\n  rule: body=\"class=\\\"logo-synology\\\"\" && body=\"class=\\\"logo-dsm\\\"\"\n- name: NETGEAR DGN3500_header\n  rule: header=\"NETGEAR DGN3500\"\n- name: WindRiver_header\n  rule: 'header=\"server: windriver-webserver\"'\n- name: superlin_cms_领林企业网站管理系统_header\n  rule: header=\"superlin_cms_领林企业网站管理系统\"\n- name: DIGI-TransPort-WR44v2_body\n  rule: body=\"class=\\\"heading\\\">transport wr44v2\"\n- name: Avasize_header\n  rule: header=\"Avasize\"\n- name: McAfee-Cloud-Protection_header\n  rule: header=\"realm=\\\"mcafee cloud web protection\"\n- name: EQManager邮件网关_header\n  rule: header=\"EQManager邮件网关\"\n- name: 来客推商城系统_icon_hash\n  rule: icon_hash=\"1433892035\"\n- name: alphapd_header\n  rule: header=\"alphapd\"\n- name: 天融信WEB应用安全防护系统_body\n  rule: body=\"module=login\" && body=\"topsec\" && body=\"login\"\n- name: TP-LINK Wireless WR1041N_header\n  rule: header=\"TP-LINK Wireless WR1041N\"\n- name: basercms_header\n  rule: header=\"basercms\"\n- name: BootCMS_body\n  rule: body=\"BootCMS\"\n- name: Hospital-material-supplier-B2B-platform_body\n  rule: body=\"医院物资供应商b2b平台\"\n- name: Search Everything_header\n  rule: header=\"Search Everything\"\n- name: imailserver_header\n  rule: header=\"Ipswitch-IMail\"\n- name: NETGEAR R7500_header\n  rule: header=\"NETGEAR R7500\"\n- name: TP-LINK Wireless WR700N_header\n  rule: header=\"TP-LINK Wireless WR700N\"\n- name: 彩色立方 流量管理平台_header\n  rule: header=\"彩色立方 流量管理平台\"\n- name: QiniuCDN_body\n  rule: body=\"glb.clouddn.com\" && body=\"glb.qiniucdn.com\" && body=\"cdn.staticfile.org\"\n- name: MuraCMS_header\n  rule: header=\"Mura CMS\"\n- name: TP-LINK Wireless WR740N/WR741ND_header\n  rule: header=\"TP-LINK Wireless WR740N/WR741ND\"\n- name: Supervisor_header\n  rule: header=\"Supervisor\"\n- name: F5-FirePass_header\n  rule: header=\"uroamtestcookie\" && header=\"mrhcid\"\n- name: Koala Web Server_header\n  rule: header=\"Koala Web Server\"\n- name: 金山 终端安全系统_header\n  rule: header=\"金山 终端安全系统\"\n- name: 蝉知企业门户系统_header\n  rule: header=\"蝉知企业门户系统\"\n- name: 物联网综合管理平台_header\n  rule: header=\"物联网综合管理平台\"\n- name: D_Link-DSR-1000N_body\n  rule: 'body=\"<div class=\\\"floatl txt01\\\">product page: dsr-1000n\"'\n- name: fckeditor_body\n  rule: body=\"new fckeditor\" && body=\"new FCKeditor\"\n- name: 3CX-Phone-System-Management-Console_body\n  rule: body=\"src=\\\"/public/vendor.26422846c5ea381c.js\\\"\" && body=\"src=\\\"/public/app.807e10d98cfac19e.js\\\"\"\n- name: MiniBB_body\n  rule: body=\"<!--minibb copyright link\" && body=\"powered by <a href=\\\"http://www.minibb.\"\n- name: hishop_body\n  rule: body=\"hishop.plugins.openid\" && body=\"Hishop development team\"\n- name: Apache Pluto_header\n  rule: header=\"Apache Pluto\"\n- name: LDCMS网站管理系统_body\n  rule: body=\"LDCMS网站管理系统\"\n- name: Teros/Citrix-FireWall_header\n  rule: header=\"Teros/Citrix-FireWall\"\n- name: TRENDnet-TV-IP651W_header\n  rule: header=\"realm=\\\"tv-ip651w\"\n- name: cradlepoint-IBR650LP3_body\n  rule: body=\"cplogin.model = \\\"ibr650lp3\\\";\"\n- name: Launch-Cameras-and-Surveillance_body\n  rule: body=\"action=\\\"webs/loginhandle\"\n- name: 明源云 ERP_body\n  rule: body=\"PubPlatform\" && body=\"明源云\" && body=\"LoginHandler\" && body=\"#153290\"\n    && body=\"明源软件\"\n- name: Zarafa-CalDav-Gateway_header\n  rule: header=\"realm=\\\"zarafa caldav gateway\"\n- name: Foxycart_body\n  rule: body=\"<script src=\\\"//cdn.foxycart.com\"\n- name: RestServer_header\n  rule: header=\"RestServer\"\n- name: Onera_icon_hash\n  rule: icon_hash=\"1234311970\"\n- name: Linksys-RV082_header\n  rule: header=\"Linksys-RV082\"\n- name: Cisco-Expert-Talks_header\n  rule: header=\"cisco expert talks\" && header=\"cisco-sx80\"\n- name: ipTIME-N704_body\n  rule: body=\"src =\\\"/images2/login_title.n704.gif\\\"\" && body=\"src =\\\"/images/login_back_n704.gif\\\"\"\n- name: TRENDnet-TEW-651BR_body\n  rule: body=\"<b>login to the tew-651br</b>\"\n- name: zen_cart-shopping_body\n  rule: body=\"shopping cart program by zen cart\"\n- name: rcms_body\n  rule: body=\"/r/cms/www/\" && body=\"jhtml\"\n- name: TP-LINK Wireless AP WA500G_header\n  rule: header=\"TP-LINK Wireless AP WA500G\"\n- name: HP-ArcSight_body\n  rule: body=\" window.location.replace(\\\"/arcsight/\\\"\"\n- name: LiveAgent_header\n  rule: header=\"LiveAgent\"\n- name: YouPHPTube_header\n  rule: header=\"YouPHPTube\"\n- name: GROWFORCE-Email_body\n  rule: body=\"href=\\\"http://webmail.zmail300.cn\" && body=\"href=\\\"/page/help/mailconfig/configs/index.html\"\n- name: Qianbo_header\n  rule: header=\"Qianbo\"\n- name: ASUS-RT-AC88U_body\n  rule: body=\"<div class=\\\"prod_madelname\\\">rt-ac88u\"\n- name: Nexus-Repository-Manager_body\n  rule: 'body=\"nexus repository manager\" && body=\"progressmessage(''initializing ...''\"\n    && body=\"Sonatype Nexus Repository Manager\" && body=\"Nexus Repository Manager\"\n    && body=\"(Server: Nexus\"'\n- name: 梭子鱼防火墙(Barracuda)_body\n  rule: body=\"Barracuda\" && body=\"http://www.barracudanetworks.com?a=bsf_product\\\"\n    class=\\\"transbutton\" && body=\"/cgi-mod/header_logo.cgi\"\n- name: B2BBuilder_body\n  rule: body=\"content=\\\"b2bbuilder\" && body=\"translatebuttonid = \\\"b2bbuilder\"\n- name: DVR (Korean)_icon_hash\n  rule: icon_hash=\"-560297467\"\n- name: Perl_header\n  rule: header=\"perl\"\n- name: ALERTMANAGER_body\n  rule: body=\"defaultcreator\"\n- name: BingoFS_header\n  rule: header=\"BingoFS\"\n- name: MvMmall多用户商城系统_header\n  rule: header=\"MvMmall多用户商城系统\"\n- name: ASPCMS_body\n  rule: body=\"content=\\\"aspcms\" && body=\"/inc/aspcms_advjs.asp\" && body=\"content=\\\"ASPCMS\"\n    && body=\"/inc/AspCms_AdvJs.asp\"\n- name: DELL-PCT8132_body\n  rule: body=\"class=\\\"login_server_default\\\">pct8132\"\n- name: H3C-Switch_header\n  rule: header=\"h3c httpd\"\n- name: H3C-Switch_body\n  rule: 'body=\"nlanguagesupported\" && body=\"window.location = \\\"/wcn/banner?lang=\"\n    && body=\"style=\\\"background-color: #e1e9f5;\\\" onload=\\\"onbodyload\" && body=\"window.location\n    = slang + \\\"/login.html\\\";\" && body=\"window.location = \\\"en/login.html\\\";\" &&\n    body=\"window.location = \\\"/web/device/login?lang=\\\"+slang;\" && body=\"<h2>web网管中\"'\n- name: NetFlow-Analyzer-Zoho-Traffic-Management_body\n  rule: body=\"netflow analyzer\" && body=\"href=\\\"/netflow/css/netflow.css\"\n- name: shterm-Fortres-Machine_body\n  rule: body=\"class=\\\"forget_pwd hide\\\" href=\\\"#\\\" onclick=\\\"forgot_pwd(;\" && body=\"var\n    driver = dllregistered(\\\"xectrl13.xfpauthenexportx\\\";\"\n- name: Kronos Workforce Planner_header\n  rule: header=\"Kronos Workforce Planner\"\n- name: eiProject_body\n  rule: body=\"hello eiproject <br>\"\n- name: HuaWei-SRG3250_header\n  rule: header=\"huawei srg3250\"\n- name: Pro-Chat-Rooms_body\n  rule: body=\"border=\\\"0\\\" alt=\\\"pro chat rooms\" && body=\"href='http://prochatrooms.com'>pro\n    chat rooms</a>\"\n- name: TerraMaster Cloud_header\n  rule: header=\"TerraMaster Cloud\"\n- name: 福富安全基线管理_body\n  rule: body=\"align=\\\"center\\\">福富软件\"\n- name: YiiCms企业站管理系统_body\n  rule: body=\"YiiCms企业站管理系统\"\n- name: 搜索动力2014(php+mysql)_header\n  rule: header=\"搜索动力2014(php+mysql)\"\n- name: 金启K-Office协同办公_header\n  rule: header=\"金启K-Office协同办公\"\n- name: OpenEMR_header\n  rule: header=\"openemr=\"\n- name: OpenEMR_body\n  rule: body=\"<frame src=\\\"/interface/login/filler.php\"\n- name: ModSecurity_body\n  rule: body=\"this error was generated by mod_security\"\n- name: ModSecurity_header\n  rule: header=\"mod_security\"\n- name: Eserv_header\n  rule: header=\"Eserv\"\n- name: NSOC-BigData_body\n  rule: body=\"<h2>nsoc大数据分析系统</h2>\" && body=\"src=\\\"/nfw/static/framework/images/views.png\"\n    && body=\"<b>nsoc云安全解决方案\"\n- name: Alcatel_Lucent-OS6900-T40_body\n  rule: body=\"<span>device os6900-t40\"\n- name: Django REST framework_header\n  rule: header=\"Django REST framework\"\n- name: Linksys-Print-Server_body\n  rule: body=\"print server for usb with 4-port switch\"\n- name: FestOS_body\n  rule: body=\"css/festos.css\"\n- name: Linksys-Print-Server_header\n  rule: header=\"print_server web\"\n- name: PySpider_header\n  rule: header=\"PySpider\"\n- name: 易创思ecs_header\n  rule: header=\"易创思ecs\"\n- name: BoltCMS_header\n  rule: header=\"BoltCMS\"\n- name: IBOS-OA_header\n  rule: 'header=\"Set-Cookie: 8uxd_saltkey=\"'\n- name: NETGEAR R7000_header\n  rule: header=\"NETGEAR R7000\"\n- name: sangfor-sip_body\n  rule: 'body=\"window.sessionstorage.removeitem(''serialcheckobj''\" && body=\"src=\\\"/apps/secvisual/static/js/runtime.js?\"\n    && body=\"url: ''../auth_manage/auth_manage/on_login''\"'\n- name: Huawei user-login_header\n  rule: header=\"Huawei Auth-Http\"\n- name: Apple AirPort_header\n  rule: header=\"Apple AirPort\"\n- name: MOBOTIX-M26_body\n  rule: body=\"class=\\\"bold featurestypeinfo\\\">m26\"\n- name: 天融信防火墙_header\n  rule: header=\"TopWebServer\"\n- name: 然之协同OA_header\n  rule: header=\"然之协同OA\"\n- name: 天融信防火墙_body\n  rule: body=\"TOPSEC\" && body=\"image/aaa.png\" && body=\"username\" && body=\"WEB User\n    Interface\"\n- name: IX-Series_header\n  rule: header=\"ix series\"\n- name: Sarka-SPIP_header\n  rule: header=\"Sarka-SPIP\"\n- name: Jigsaw_header\n  rule: 'header=\"server: jigsaw\" && header=\"Jigsaw\"'\n- name: 365webcall_body\n  rule: body=\"src='http://www.365webcall.com/imme1.aspx?\"\n- name: Billion-Router_header\n  rule: header=\"billion sky\" && header=\"basic realm=\\\"webadmin\" && header=\"Billion\n    Sky\" && header=\"Conexant-EmWeb\" && header=\"Basic realm=\\\"WebAdmin\"\n- name: Dokeos_body\n  rule: body=\"href=\\\"http://www.dokeos.com\\\" rel=\\\"Copyright\" && body=\"content=\\\"Dokeos\"\n    && body=\"name=\\\"Generator\\\" content=\\\"Dokeos\"\n- name: Hyperwave-IS_header\n  rule: header=\"Hyperwave\"\n- name: startblog_header\n  rule: header=\"startblog\"\n- name: Cerberus-Helpdesk_body\n  rule: body=\"<!-- if you have your own stylesheet for html elements, you can remove\n    the cerberus-html.css link\" && body=\"<!-- If you have your own stylesheet for\n    HTML elements, you can remove the cerberus-html.css link\"\n- name: Cerberus-Helpdesk_header\n  rule: header=\"cerberuspublicgui\" && header=\"CerberusPublicGUI\"\n- name: Gemtek-Router_body\n  rule: body=\"alt=\\\"歡迎使用中保無限路由器\\\"\"\n- name: hejiaOA_body\n  rule: body=\"href=\\\"/templates/everythingisok/index.css\\\"\"\n- name: Pantek-Router_body\n  rule: body=\"alt=\\\"歡迎使用智慧路由器\\\"\"\n- name: Solvonet-Device(VoIP_header\n  rule: header=\"basic realm=\\\"solvonet\\\"\"\n- name: Railo_header\n  rule: header=\"railo-version\"\n- name: Kerio Connect WebMail_icon_hash\n  rule: icon_hash=\"-1678298769\"\n- name: ATutor elearning_header\n  rule: header=\"ATutorID\"\n- name: 易点CMS_body\n  rule: body=\"DianCMS_SiteName\" && body=\"DianCMS_用户登陆引用\"\n- name: ATutor elearning_body\n  rule: body=\"content=\\\"ATutor\" && body=\"ATutor.course\"\n- name: We7_body\n  rule: body=\"/widgets/widgetcollection/\"\n- name: Empirebak_body\n  rule: body=\"powered by <a href=\\\"http://www.phome.net\\\" target=\\\"_blank\\\"><strong>empirebak</strong>\"\n    && body=\"<div align=\\\"center\\\">(<a href=\\\"doc.html\\\" target=\\\"_blank\\\">查看帝国备份王说明文档</a></div>\"\n- name: PA Server Monitor_header\n  rule: header=\"PA Server Monitor\"\n- name: phpFox_body\n  rule: body=\"powered by phpfox\" && body=\"powered by <a href=\\\"http://www.phpfox.com\"\n- name: MLDonkey_header\n  rule: header=\"MLDonkey\"\n- name: NETGEAR EVG2000_header\n  rule: header=\"NETGEAR EVG2000\"\n- name: HumHub_body\n  rule: body=\"Animate.css - http://daneden.me/animate\"\n- name: NSFOCUS 绿盟安全设备_header\n  rule: header=\"NSFOCUS\"\n- name: HPE-ADSL-Wireless-Firewall-Router_body\n  rule: body=\"<meta http-equiv=\\\"3cnumber\\\" content=\\\"3crwdr200a-75\\\">\" && body=\"<meta\n    http-equiv=\\\"sysobjectid\\\" content=\\\"1.3.6.1.4.1.43.1.19.14\\\">\"\n- name: yershop(贝云cms内容管理系统)_header\n  rule: header=\"yershop\" && header=\"贝云cms内容管理系统\"\n- name: NETGEAR D8500_header\n  rule: header=\"NETGEAR D8500\"\n- name: LS Research ModFLEX Mini Gateway_header\n  rule: header=\"LS Research ModFLEX Mini Gateway\"\n- name: 网钛淘拍CMS_TaoPaiCMS_header\n  rule: header=\"网钛淘拍CMS_TaoPaiCMS\"\n- name: 迪普VPN_body\n  rule: body=\"dptech_ssl\" && body=\"sslvpn\" && body=\"loginAPI.js\"\n- name: Diyou-P2P_body\n  rule: body=\"/js/diyou.js\" && body=\"src=\\\"/dyweb/dythemes\"\n- name: PIX_LINK-WiFi-Repeater_body\n  rule: body=\"_t(pg_login.user\"\n- name: sX-Shop_body\n  rule: body=\"alert(\\\"ihr suchbegriff muss mind. aus 3 zeichen bestehen.\\\";\" && body=\"content=\\\"source\n    worx - software development\\\">\"\n- name: Barracuda Link Balancer_header\n  rule: header=\"Barracuda Link Balancer\"\n- name: Ucap-search-_body\n  rule: body=\"src=\\\"http://so.kaipuyun.cn?sitecode=\" && body=\"method=\\\"post\\\" action=\\\"s\\\"\n    onsubmit=\\\"return checksearchform(;\\\">\"\n- name: fisheye_body\n  rule: body=\"fisheye-16.ico\"\n- name: fisheye_header\n  rule: header=\"Set-Cookie:FESESSIONID\"\n- name: Emlog_for_SAE_移植版_body\n  rule: body=\"content=\\\"emlog\\\"\"\n- name: Jataayu AdminServer_header\n  rule: header=\"Jataayu AdminServer\"\n- name: 天融信TopAPP负载均衡系统_body\n  rule: body=\"TopAPP负载均衡系统\" && body=\"天融信\"\n- name: 瑞友 天翼应用虚拟化系统_header\n  rule: header=\"瑞友 天翼应用虚拟化系统\"\n- name: doitVR-Product_body\n  rule: body=\"src=\\\"/svnmedia/images/logo.svg\\\" alt=\\\"doit vr®\\\"\"\n- name: BingSNS多层级分销拓客社群_header\n  rule: header=\"BingSNS多层级分销拓客社群\"\n- name: WordPress_header\n  rule: header=\"x-pingback\" && header=\"wordpress_test_cookie\"\n- name: 小苹果CMS_body\n  rule: body=\"maccms:voddaycount\"\n- name: VArmour-Product_body\n  rule: body=\"function loadmunchkinkey(\"\n- name: Kooboo CMS_header\n  rule: header=\"Kooboo CMS\"\n- name: Portainer_body\n  rule: body=\"meta name=\\\"author\\\" content=\\\"Portainer.io\"\n- name: Linksys E1500_header\n  rule: header=\"Linksys E1500\"\n- name: SoundManager_header\n  rule: header=\"SoundManager\"\n- name: Infinet-Wireless-WANFleX-Router_header\n  rule: header=\"WANFlex HTTP Daemon\"\n- name: PHPOA 协同办公软件_body\n  rule: body=\"login.php\" && body=\"提示信息\" && body=\"showMsg\"\n- name: Infinet-Wireless-WANFleX-Router_body\n  rule: body=\"content=\\\"InfiNet\"\n- name: Sophos User Portal/VPN Portal_icon_hash\n  rule: icon_hash=\"1045696447\"\n- name: TopSec TopAD_header\n  rule: header=\"TopSec TopAD\"\n- name: LiveStreet CMS_header\n  rule: header=\"LiveStreet CMS\"\n- name: Bitnami_body\n  rule: body=\"<td><img src=\\\"img/bitnami.png\\\" alt=\\\"Bitnami\\\"></td>\" && body=\"<p>Thanks\n    for using Bitnami!</p>\"\n- name: Fatek Webserver_header\n  rule: header=\"Fatek Webserver\"\n- name: LANCOM Systems_icon_hash\n  rule: icon_hash=\"3969884626\"\n- name: Bitnami_icon_hash\n  rule: icon_hash=\"2687323206\"\n- name: Avaya-Application-Enablement-Services_body\n  rule: body=\"<b>application enablement services&nbsp;</b>\"\n- name: Kyan-Design_body\n  rule: body=\"<h1 id='bluesky_education_login' \" && body=\"<meta name='author' content='http://www.kyanmedia.com'>\"\n    && body=\"platform - login\" && body=\"content='http://www.kyanmedia.com'>\"\n- name: JBoss EAP_body\n  rule: body=\"title>EAP\" && body=\"eap.css\" && body=\"JBoss\"\n- name: 润申信息企业标准化管理系统_body\n  rule: body=\"润申信息\" && body=\"企业标准化管理系统\" && body=\"loginForm\"\n- name: VisualSec-VS-AD_body\n  rule: body=\"class=\\\"top-wrapper fn-clear\\\"\" && body=\"value=\\\"sysadmin\\\"\"\n- name: Synology_DiskStation_body\n  rule: body=\"SYNO.SDS.Session\"\n- name: DVR-WebClient_body\n  rule: body=\"259f9fdf-97ea-4c59-b957-5160cab6884e\" && body=\"259F9FDF-97EA-4C59-B957-5160CAB6884E\"\n- name: TotalCode_header\n  rule: header=\"TotalCode\"\n- name: AV-Arcade_body\n  rule: body=\"powered by <a href=\\\"http://www.avscripts.net/avarcade/\" && body=\"Powered\n    by <a href=\\\"http://www.avscripts.net/avarcade/\"\n- name: EMC-Cluster-storage-_body\n  rule: body=\"isilon systems llc. all rights reserved\" && body=\"id=\\\"dialog_title\\\">isilon\n    administration</div>\"\n- name: WiseGrid ADC_header\n  rule: header=\"WiseGrid ADC\"\n- name: govCMS_header\n  rule: header=\"govCMS\"\n- name: ipTIME-A6004NS_body\n  rule: body=\"src=\\\"/images2/login_title.a6004ns.gif\\\"\"\n- name: phpRemoteView_body\n  rule: 'body=\"style=''font: 8pt verdana''>phpremoteview\"'\n- name: 深圳锐明行驶记录仪_title\n  rule: title=\"登录您的MDVR\"\n- name: 来客推商城系统_title\n  rule: title=\"来客推商城\" && title=\"来客推商城系统\"\n- name: AgileBPM_body\n  rule: body=\"class=\\\"logo-element\\\">bpm\" && body=\"class=\\\"logo-element\\\">agile-bpm\"\n- name: TRENDnet-TV-IP343PI_body\n  rule: body=\"var titlename='tv-ip343pi'\"\n- name: 深信服一体化网关MIG_header\n  rule: header=\"深信服一体化网关MIG\"\n- name: seceon-OTM_body\n  rule: body=\"use this if you want to run the seceon module of kibana.\"\n- name: VisualSVN Server_icon_hash\n  rule: icon_hash=\"706602230\"\n- name: NetSoft-eIDA_body\n  rule: body=\"window.location.href = \\\"/appframe/login_v2/login.jsp\\\";\" && body=\"href=\\\"/images/common/favicon.ico\\\"\"\n- name: ARE InfoTech_header\n  rule: header=\"ARE InfoTech\"\n- name: Twitter Flight_header\n  rule: header=\"Twitter Flight\"\n- name: Layui后台管理系统_header\n  rule: header=\"Layui后台管理系统\"\n- name: LG-OLED55C8FNA_body\n  rule: body=\"<modelname>oled55c8fna</modelname>\"\n- name: TP-Link TL-WR941Nv3_header\n  rule: header=\"TP-Link TL-WR941Nv3\"\n- name: Kyocera (Printer)_icon_hash\n  rule: icon_hash=\"-50306417\"\n- name: Brother-Fax_header\n  rule: header=\"debut\"\n- name: 91App_header\n  rule: header=\"91App\"\n- name: Acme embeddable HTTP server_header\n  rule: header=\"Server:Acme\"\n- name: Linksys E2500_header\n  rule: header=\"Linksys E2500\"\n- name: AVCON-系统管理平台_header\n  rule: header=\"AVCON-系统管理平台\"\n- name: DELL-PCT8132F_body\n  rule: body=\"class=\\\"login_server_default\\\">pct8132f\"\n- name: 迪浪云OA_icon_hash\n  rule: icon_hash=\"4114981567\"\n- name: Citrix-XCP_body\n  rule: body=\"<p/>citrix systems, inc. xcp 1.6.10\"\n- name: lflflf_body\n  rule: body=\"/lfradius/\"\n- name: TOTO_LINK-A3004NS-Dual_body\n  rule: body=\"src =\\\"/images2/login_back_za3nd.ch.gif\\\"\"\n- name: NETGEAR WNDR3700v3_header\n  rule: header=\"NETGEAR WNDR3700v3\"\n- name: Tenda 路由器_body\n  rule: body=\"<title>Tenda\"\n- name: TP-LINK 941_header\n  rule: header=\"TP-LINK 941\"\n- name: 中兴 ZXHN H118N_header\n  rule: header=\"中兴 ZXHN H118N\"\n- name: PiAware Skyview_header\n  rule: header=\"PiAware Skyview\"\n- name: Plotly_header\n  rule: header=\"Plotly\"\n- name: 4D_header\n  rule: header=\"Server:4D\"\n- name: MontaVista linux_header\n  rule: header=\"MontaVista\"\n- name: RainLoop_header\n  rule: header=\"RainLoop\"\n- name: NETGEAR DG834GB_header\n  rule: header=\"NETGEAR DG834GB\"\n- name: Apache-ActiveMQ_body\n  rule: body=\"<h2>Welcome to the Apache ActiveMQ!</h2>\" && body=\"(realm=\\\"activemqrealm\"\n- name: Amazon ECS_header\n  rule: header=\"Amazon ECS\"\n- name: RADVISION-Video-Conferencing_body\n  rule: body=\"/icm/image/login/network_manager-radvision.jpg\" && body=\"window.location=\\\"login/aelogin.php\\\";\"\n- name: Sentry_icon_hash\n  rule: icon_hash=\"2063428236\"\n- name: Canon-PRO-100-series_body\n  rule: body=\"nowrap>canon pro-100 series</td>\"\n- name: osirix-viewer_body\n  rule: body=\"service provided by <a href=\\\"https://www.osirix-viewer.com\\\"\"\n- name: DELL-N1148P-ON_body\n  rule: body=\"class=\\\"login_server_default\\\">n1148p-on\"\n- name: PHP-CSL_body\n  rule: body=\"content=\\\"php code snippet\" && body=\"title=\\\"php-csl\\\">php-csl\"\n- name: Oce Printer_header\n  rule: header=\"Oce Printer\"\n- name: 思福迪堡垒机_title\n  rule: title=\"Logbase运维安全管理系统\"\n- name: Ligowave (network)_icon_hash\n  rule: icon_hash=\"1467395679\"\n- name: FileZilla ftpd_header\n  rule: header=\"FileZilla ftpd\"\n- name: Canon-MP990-series_body\n  rule: body=\"nowrap>canon mp990 series</td>\"\n- name: Xanario_header\n  rule: header=\"Xanario\"\n- name: VRV-IM_body\n  rule: body=\"<h3>连豆豆pc客户端 </h3>\" && body=\"href=\\\"http://im.vrv.cn/server-securitycenter/password/goretrieval.vrv\"\n    && body=\"class=\\\"loginusername\\\" value=\\\"\\\" placeholder=\\\"连豆豆账号/邮箱/手机号\" && body=\"class=\\\"wj-text\n    wj-title\\\">下载信源豆豆</p>\"\n- name: Ruijie-Switch_body\n  rule: body=\"ap设备中的配置并不重要\" && body=\"id=\\\"a_lang_switch\\\"\"\n- name: 红帆 HFOffice_icon_hash\n  rule: icon_hash=\"630899054\"\n- name: TP-LINK Firewall FR5300_header\n  rule: header=\"TP-LINK Firewall FR5300\"\n- name: Cisco PIX_header\n  rule: header=\"Cisco PIX\"\n- name: DataTaker DT80 dEX_header\n  rule: header=\"DataTaker DT80 dEX\"\n- name: TP-LINK Wireless TL-WR841N_header\n  rule: header=\"TP-LINK Wireless TL-WR841N\"\n- name: 5VTechnologies-BlueAngelSoftwareSuite_body\n  rule: body=\"/cgi-bin/webctrl.cgi?action=index_page\"\n- name: Cisco Meraki Dashboard_icon_hash\n  rule: icon_hash=\"804949239\"\n- name: Adobe-Connect_header\n  rule: header=\"breezesession=\"\n- name: Baidu-jiasule_body\n  rule: body=\"notice-jiasule\" && body=\"static.jiasule.com/static/js/http_error.js\"\n- name: Hexabyte-ADSL_header\n  rule: header=\"realm=\\\"hexabyte adsl\"\n- name: EDAS-Setting-Management_body\n  rule: body=\"lcccommoncontroller\"\n- name: TP-LINK Wireless WA865RE_header\n  rule: header=\"TP-LINK Wireless WA865RE\"\n- name: NETGEAR R6900_header\n  rule: header=\"NETGEAR R6900\"\n- name: 金钟集团智能物流管理系统_icon_hash\n  rule: icon_hash=\"3930517330\"\n- name: Ultra_Electronics_body\n  rule: body=\"/preauth/login.cgi\" && body=\"/preauth/style.css\" && body=\"/preauth/login.cgi\"\n    && body=\"/preauth/style.css\"\n- name: 梭子鱼设备_header\n  rule: header=\"BarracudaHTTP\"\n- name: seacms(海洋CMS)_body\n  rule: body=\"seacms\" && body=\"Powered by SeaCms\" && body=\"content=\\\"seacms\"\n- name: epoint政务服务系统_body\n  rule: body=\"epoint-web-zwdt\"\n- name: seacms(海洋CMS)_header\n  rule: header=\"seacms\"\n- name: ASUS-RT-AC52U_B1_body\n  rule: body=\"<div class=\\\"prod_madelname\\\">rt-ac52u_b1\"\n- name: VLCMS_body\n  rule: body=\"VLCMS\"\n- name: CMS FdT_header\n  rule: header=\"CMS FdT\"\n- name: Citrix-NetScaler_header\n  rule: header=\"NS-CACHE\"\n- name: sanofi iPad CMS_header\n  rule: header=\"sanofi iPad CMS\"\n- name: Bonobo Git Server_icon_hash\n  rule: icon_hash=\"4075341422\"\n- name: Linksys BEFSX41_header\n  rule: header=\"Linksys BEFSX41\"\n- name: 中腾OA_body\n  rule: body=\"systemAction\" && body=\"zt_webframe\" && body=\"login\"\n- name: Avaya-Media-Server_body\n  rule: body=\"src=\\\"/emlogin/\"\n- name: Cipafilter_header\n  rule: header=\"realm=\\\"cipafilter web management\" && header=\"realm=\\\"cipafilter web\n    administration\"\n- name: Cisco-AWARE_header\n  rule: header=\"cisco aware\" && header=\"webvpn\"\n- name: discuz_body\n  rule: body=\"content=\\\"Discuz\" && body=\"discuz_uid\" && body=\"Powered by <strong><a\n    href=\\\"http://www.discuz.net\"\n- name: NEC WebPro_icon_hash\n  rule: icon_hash=\"1922032523\"\n- name: yzruida-System_body\n  rule: body=\"class=\\\"headerbar gradientbar\"\n- name: AirLive-POE-HDwebcam_body\n  rule: body=\"js/variable_6.js\"\n- name: XRegExp_header\n  rule: header=\"XRegExp\"\n- name: TRENDnet-TV-IP302PI_header\n  rule: header=\"realm=\\\"tv-ip302pi\"\n- name: H3C-Magic-B3_body\n  rule: body=\"var product_type = \\\"b3\\\"\"\n- name: 红帆 HFOffice_body\n  rule: body=\"./config/pc-app-config.js\" && body=\"<title>HFOffice</title>\"\n- name: Citrix XCP_header\n  rule: header=\"Citrix XCP\"\n- name: Alcatel_Lucent-OS6560-P48X4_body\n  rule: body=\"<span>device os6560-p48x4\"\n- name: SIMATIC WinCC WebUX_header\n  rule: header=\"SIMATIC WinCC WebUX\"\n- name: EFM-Networks-ipTIME-T3004_body\n  rule: body=\"src =\\\"/images2/login_title.t3004.gif\\\"\"\n- name: DCN-S5750E-28X-SI_body\n  rule: body=\"<b>s5750e-28x-si</b>\"\n- name: NETGEAR R7900_header\n  rule: header=\"NETGEAR R7900\"\n- name: 网神VPN_header\n  rule: header=\"host_for_cookie\"\n- name: 网神VPN_body\n  rule: body=\"admin/js/virtual_keyboard.js\"\n- name: Http-Explorer_header\n  rule: header=\"http explorer\" && header=\"Http explorer\"\n- name: TOTO_LINK-N300RG_body\n  rule: body=\"src =\\\"/images/login_back_zn300rg.gif\\\"\"\n- name: Directadmin_header\n  rule: header=\"x-directadmin\" && header=\"directadmin daemon\" && header=\"X-Directadmin\"\n    && header=\"DirectAdmin Daemon\"\n- name: Lotus-Notes-Traveler_header\n  rule: header=\"realm=\\\"lotus notes traveler\"\n- name: AWS S3 Bucket_body\n  rule: body=\"InvalidBucketName\" && body=\"aliyuncs\"\n- name: 爱站CMS内容管理系统_body\n  rule: body=\"爱站CMS内容管理系统\"\n- name: Angular Material_header\n  rule: header=\"Angular Material\"\n- name: EasyWebServer_header\n  rule: header=\"EasyWebServer\"\n- name: Tealeaf_header\n  rule: header=\"Tealeaf\"\n- name: FiberHome_header\n  rule: header=\"FiberHome\"\n- name: HUAWEI EchoLife HG8245H_header\n  rule: header=\"HUAWEI EchoLife HG8245H\"\n- name: ALCASAR_body\n  rule: body=\"valoriserdiv5\" && body=\"valoriserDiv5\"\n- name: DotGraphics_header\n  rule: header=\"DotGraphics\"\n- name: Novell NetWare远程管理器_header\n  rule: header=\"Novell NetWare远程管理器\"\n- name: 亿赛通DLP_body\n  rule: body=\"CDGServer3\"\n- name: Optimizely_header\n  rule: header=\"Optimizely\"\n- name: typesettercms_header\n  rule: header=\"typesettercms\"\n- name: 北信源网络防病毒系统_header\n  rule: header=\"北信源网络防病毒系统\"\n- name: ServiceNow_icon_hash\n  rule: icon_hash=\"86919334\"\n- name: TP-LINK R488T_header\n  rule: header=\"TP-LINK R488T\"\n- name: NSFOCUS WVSS_header\n  rule: header=\"NSFOCUS WVSS\"\n- name: Shop_Builder-shopbuilder_body\n  rule: body=\"content=\\\"shopbuilder\" && body=\"powered by shopbuilder\" && body=\"shopbuilder版权所有\"\n- name: PageCDN_header\n  rule: header=\"PageCDN\"\n- name: live800_header\n  rule: header=\"live800\"\n- name: Opengoss-WLAN_body\n  rule: body=\"/stylesheets/themes/wifi2/ui.theme.css\" && body=\"content=\\\"wlan综合网管系统\\\"\"\n- name: Barracuda-Device_header\n  rule: header=\"barracudahttp\"\n- name: WebYep CMS_header\n  rule: header=\"WebYep CMS\"\n- name: Netquery_body\n  rule: body=\"action=\\\"nquser.php\" && body=\"href=\\\"nqadmin.php\"\n- name: TP-LINK-TD-W8901G_header\n  rule: header=\"realm=\\\"td-w8901g\"\n- name: NUCMS网站管理系统_body\n  rule: body=\"NUCMS网站管理系统\"\n- name: VamCart_body\n  rule: 'body=\"stylesheets/load/vamcart.css\\\" rel=\\\"stylesheet\\\"  media=\\\"screen\"\n    && body=\"<!-- powered by: vamcart (http://vamcart.com -->\" && body=\"<p><a href=\\\"http://vamcart.com/\\\">php\n    shopping cart</a> <a href=\\\"http://vamcart.com/\\\">vamcart</a></p>\"'\n- name: Solar-Monitoring-SWF-850_body\n  rule: body=\"/pic/solarwiselogo.jpg\"\n- name: paloalto-PA-500_body\n  rule: body=\"id=\\\"heading\\\">globalprotect portal</div>\"\n- name: TCCMS_body\n  rule: body=\"index.php?ac=link_more\" && body=\"index.php?ac=news_list\"\n- name: Adobe GoLive_header\n  rule: header=\"Adobe GoLive\"\n- name: DELL-N3048_body\n  rule: body=\"class=\\\"login_server_default\\\">n3048\"\n- name: Ektron-CMS_header\n  rule: header=\"ektguid=\" && header=\"EktGUID=\"\n- name: Ektron-CMS_body\n  rule: body=\"/java/ektron.js\"\n- name: Ecomat-CMS_body\n  rule: body=\"content=\\\"ECOMAT CMS\"\n- name: H3C-SecCenter_body\n  rule: body=\"请登录后使用seccenter安全管理中心\" && body=\"background=\\\"/seccenter/img/index_02.gif\"\n    && body=\"src=\\\"/seccenter/img/logo.gif\" && body=\"window.top.location='/seccenter/index.jsp';\"\n- name: 梦想cms_lmxcms_网站管理系统_header\n  rule: header=\"梦想cms_lmxcms_网站管理系统\"\n- name: TeamCity_icon_hash\n  rule: icon_hash=\"-1944119648\"\n- name: 华为 NetOpen_body\n  rule: body=\"/netopen/theme/css/inFrame.css\"\n- name: TeamCity_header\n  rule: header=\"TeamCity\"\n- name: Bluedon-Firewall_body\n  rule: body=\"class=\\\"banquan\\\">蓝盾信息安全技术股份有限公司\"\n- name: LG Smart IP Device_header\n  rule: header=\"LG Smart IP Device\"\n- name: 金盘非书资料管理系统_header\n  rule: header=\"金盘非书资料管理系统\"\n- name: Jspxcms_header\n  rule: header=\"Jspxcms\"\n- name: Jspxcms_body\n  rule: body=\"- Powered by Jspxcms\" && body=\"template/\"\n- name: 网御 vpn_body\n  rule: body=\"/vpn/common/js/leadsec.js\" && body=\"/vpn/user/common/custom/auth_home.css\"\n- name: IBM-Tivoli-Access-Manager_header\n  rule: header=\"realm=\\\"access manager for e-business\"\n- name: IBM-Tivoli-Access-Manager_body\n  rule: body=\"<!--- do not translate or modify any part of the hidden parameter(s\n    --->\" && body=\"access manager for e-business\" && body=\"var warningstring = \\\"<b>warning:</b>\n    to maintain your login session, make sure that your browser is configured to accept\n    cookies.\\\";\" && body=\"<!-- copyright (c 2000 tivoli systems, inc. -->\"\n- name: FusionAuth_header\n  rule: header=\"FusionAuth\"\n- name: TomatoUSB-Linksys-E3000_header\n  rule: header=\"realm=\\\"linksys e3000\"\n- name: Trunkey-IDC/ISP-Access-Resource-Management-System_body\n  rule: body=\"href=\\\"http://www.trunkey.com/\\\"\"\n- name: VSP-Stats-Processor_body\n  rule: 'body=\"<a href=\\\"http://www.clanavl.com/vsp/\\\">vsp</a> v\" && body=\"<body>error:\n    cannot establish database connection or database database_name does not exist\"\n    && body=\"&nbsp;theme:bismarck by <a href=\\\"#\\\" title=\\\"myrddin8 <at> gmail <dot>\n    com\\\">myrddin</a>&nbsp;\"'\n- name: Canon-MF4500-Series_body\n  rule: body=\"<td>mf4500 series</td>\"\n- name: 中科网威防火墙_header\n  rule: header=\"中科网威防火墙\"\n- name: ACT-Manager_body\n  rule: body=\"url:\\\"/ucenter/login/loginaction!gettitle.action\\\"\" && body=\"<script>location.href=\\\"ucenter\\\";</script>\"\n- name: ACT-Manager_header\n  rule: header=\"path=/ucenter/; secure; httponly\"\n- name: 135topCMS_body\n  rule: body=\"135topCMS\"\n- name: 25yicms_header\n  rule: header=\"25yicms\"\n- name: 杭州法源软件 法律知识数据库系统_icon_hash\n  rule: icon_hash=\"2018105215\"\n- name: 网动统一通信平台(Active UC)_title\n  rule: title=\"网动统一通信平台(Active UC)\"\n- name: phpweb_body\n  rule: body=\"PDV_PAGENAME\"\n- name: TP-LINK Wireless WA901N_header\n  rule: header=\"TP-LINK Wireless WA901N\"\n- name: 通用Web管理后台_header\n  rule: header=\"通用Web管理后台\"\n- name: New Relic_header\n  rule: header=\"New Relic\"\n- name: Public CMS_header\n  rule: header=\"Public CMS\"\n- name: Hitron Technologies Inc._icon_hash\n  rule: icon_hash=\"711742418\"\n- name: Google-Talk-Chatback_body\n  rule: body=\"www.google.com/talk/service/\"\n- name: Apache Hadoop_body\n  rule: body=\"static/hadoop-st.png\" && body=\"Cluster\"\n- name: Nabble_body\n  rule: body=\"class=\\\"nabble\\\" id=\\\"nabble\"\n- name: Hikvision-Video-backup-server_body\n  rule: body=\"备份管理服务器\"\n- name: Cisco-Prime-Infrastructure_header\n  rule: 'header=\"server: prime\"'\n- name: Cisco-Prime-Infrastructure_body\n  rule: body=\"<div class=\\\"xwtproductname\\\" >cisco prime infrastructure\" && body=\"/webacs/internal/xwt/themes/prime/prime-xwt.css\"\n    && body=\"webacs/welcomeaction.do\"\n- name: KomHttpServer_header\n  rule: header=\"KomHttpServer\"\n- name: Huawei – Claro_icon_hash\n  rule: icon_hash=\"2109473187\"\n- name: Nutanix Prism_header\n  rule: header=\"Nutanix Prism\"\n- name: Canon-MG4200-series_body\n  rule: body=\"nowrap>canon mg4200 series</td>\"\n- name: DELL-PowerEdge-T420_body\n  rule: body=\"id=\\\"serverinfo\\\"> poweredge t420\"\n- name: D-link-850L_body\n  rule: 'body=\"target=\\\"_blank\\\">dir-850l\" && body=\"modelname\\\">dir-850l\" && body=\">產品頁面\n    : dir-850l<a href=\\\"javascript:check_is_modified(''http://support.dlink.com/''\\\">\"'\n- name: Speed-Test_body\n  rule: body=\"classid=\\\"clsid:53028063-426b-446d-85f9-62e9e3dc5501\\\"\"\n- name: QSee-Camera_body\n  rule: body=\"handlerocxevents && handlerocxevents.drawnetplayrecord(chn;\"\n- name: Dell SonicWALL_icon_hash\n  rule: icon_hash=\"363324987\"\n- name: SiteEdit_header\n  rule: header=\"SiteEdit\"\n- name: H3C-X3_body\n  rule: body=\"var product_type = \\\"x3\\\"\"\n- name: AChecker-Web-accessibility-evaluation-tool_body\n  rule: body=\"content=\\\"achecker is a web accessibility\"\n- name: WorldClient for Mdaemon_icon_hash\n  rule: icon_hash=\"1985721423\" && icon_hash=\"-35107086\"\n- name: H3C-UIS_body\n  rule: body=\"uisalert\"\n- name: 图创图书馆集群管理系统_body\n  rule: body=\"interlib/common/\" && body=\"self.location.href\"\n- name: Platform.sh_header\n  rule: header=\"Platform.sh\"\n- name: CyBro Web_header\n  rule: header=\"CyBro Web\"\n- name: ZTE-E105_body\n  rule: body=\"e105</font></div>\"\n- name: SugarCRM_body\n  rule: 'body=\"<a href=\\\" javascript:void window.open(''http://support.sugarcrm.com''\\\">support</a>\"\n    && body=\"<img style=''margin-top: 2px'' border=''0'' width=''106'' height=''23''\n    src=''include/images/poweredby_sugarcrm.png'' alt=''powered by sugarcrm''>\" &&\n    body=\"<script>var module_sugar_grp1 = ''users'';</script><script>var action_sugar_grp1\n    = ''login'';</script><script>jscal_today\"'\n- name: imailserver_body\n  rule: body=\"myICalUserName\"\n- name: YunHeZi_body\n  rule: body=\"ui/js/seaconfig.js\" && body=\"ui/skins/black/style.css\" && body=\"class=\\\"client-list\n    dm-clear\\\">\"\n- name: B2Data WebServer_header\n  rule: header=\"B2Data WebServer\"\n- name: FUDforum_body\n  rule: 'body=\"powered by: fudforum\" && body=\"/adm/admloginuser.php\" && body=\"Powered\n    by: FUDforum\" && body=\"/adm/admloginuser.php\"'\n- name: Locomotive_header\n  rule: header=\"Locomotive\"\n- name: 杭州法源软件 法律知识数据库系统_title\n  rule: title=\"实践教学平台 - 杭州法源软件开发有限公司\"\n- name: 爱特内容管理系统_aitecms_body\n  rule: body=\"爱特内容管理系统_aitecms\"\n- name: 朗拓健康医院管理系统_body\n  rule: body=\"static/mq/yaoxun_pbm_im.js\" && body=\"js/app.\"\n- name: AMP Plugin_header\n  rule: header=\"AMP Plugin\"\n- name: EdgeCast_header\n  rule: header=\"EdgeCast\"\n- name: NTT_docomo-L-04D_body\n  rule: body=\"model name -->l-04d connection manager\"\n- name: Timestamp-Server_body\n  rule: body=\"北京数字认证股份有限公司\"\n- name: Traffic CMS_header\n  rule: header=\"Traffic CMS\"\n- name: IceWarp WebSrv_header\n  rule: header=\"IceWarp WebSrv\"\n- name: Fact Finder_header\n  rule: header=\"Fact Finder\"\n- name: SHLCMS(深喉咙)_header\n  rule: header=\"SHLCMS\" && header=\"深喉咙\"\n- name: SHLCMS(深喉咙)_body\n  rule: body=\"SHLCMS\" && body=\"深喉咙\"\n- name: Raritan-Security-gateway_body\n  rule: body=\"src=\\\"images/ccsg logo.gif\" && body=\"alt=\\\"cc-sg logo\"\n- name: D-Link DKVM_header\n  rule: header=\"D-Link DKVM\"\n- name: ManageEngine ADManager Plus_body\n  rule: body=\"ADManager\" && body=\"Hashtable.js\" && body=\"ManageEngine\"\n- name: Arbor Networks_icon_hash\n  rule: icon_hash=\"-1745552996\"\n- name: webtrust_cert_body\n  rule: body=\"https://cert.webtrust.org/ViewSeal\"\n- name: 禅道 zentao_title\n  rule: title=\"Welcome to use zentao\"\n- name: yonyou-IntelligentPlant _body\n  rule: body=\"/modules/core/client/views/sidemenu.client.view.html\"\n- name: Enhydra-Application-Server_header\n  rule: header=\"enhydra\" && header=\"Enhydra\"\n- name: mipcms内容管理系统_header\n  rule: header=\"mipcms内容管理系统\"\n- name: 锐捷 EG易网关_header\n  rule: header=\"锐捷 EG易网关\"\n- name: CapRover_icon_hash\n  rule: icon_hash=\"988422585\"\n- name: F5-TrafficShield_header\n  rule: header=\"asinfo=\" && header=\"f5-trafficshield\"\n- name: WOWZA-WowzaStreamingEngine_header\n  rule: 'header=\"server: wowzastreamingengine\"'\n- name: ThinkSAAS_body\n  rule: body=\"href=\\\"https://www.thinksaas.cn/app/home/skins/default/style.css\\\"\"\n    && body=\"/app/home/skins/default/style.css\"\n- name: SANGFOR 应用性能管理系统_header\n  rule: header=\"SANGFOR 应用性能管理系统\"\n- name: Gerrit_header\n  rule: header=\"Gerrit\"\n- name: NETENTSEC-Log-analysis_body\n  rule: body=\"网康\"\n- name: Linksys E4200_header\n  rule: header=\"Linksys E4200\"\n- name: Apache-Shiro_body\n  rule: body=\"</i> shiro</li>\"\n- name: Kafka-Manager_header\n  rule: header=\"kafka admin\" && header=\"kafka-manager\" && header=\"Kafka-Manager\"\n- name: FUDforum_header\n  rule: header=\"fud_session_\" && header=\"fud_session_\"\n- name: Kafka-Manager_body\n  rule: body=\"/vassets/datatables/stylesheets\" && body=\"vassets/images/2af62f58ee2baf495c9b3a9a1c30ce03-favicon.png\"\n- name: IBM-Mobile-Connect_header\n  rule: header=\"ibm mobile connect\"\n- name: AdiMoney_body\n  rule: body=\"<img src=\\\"/img/logo.png\\\" alt=\\\"adimoney\\\"/>\" && body=\"content=\\\"adimoney.com\n    mobile advertisement network. \"\n- name: ContrexxCMS_body\n  rule: body=\"powered by contrexx\" && body=\"content=\\\"contrexx\"\n- name: 随意留言板(syguestbook)_body\n  rule: body=\"随意留言板\" && body=\"syguestbook\"\n- name: AfterBuy_header\n  rule: header=\"AfterBuy\"\n- name: 秦川燃气综合管理系统_body\n  rule: body=\"系统登录\" && body=\"res/icon/key.png\" && body=\"login\"\n- name: wecenter_body\n  rule: body=\"aw_template.js\" && body=\"WeCenter\"\n- name: 天融信威胁防御系统_header\n  rule: header=\"天融信威胁防御系统\"\n- name: D-Link DCS Network Camera_header\n  rule: header=\"D-Link DCS Network Camera\"\n- name: 联洲 热水锅炉自动控制系统_header\n  rule: header=\"联洲 热水锅炉自动控制系统\"\n- name: NETGEAR JWNR2000T_header\n  rule: header=\"NETGEAR JWNR2000T\"\n- name: agora.cgi_body\n  rule: body=\"/agora.cgi?product=\" && body=\"/store/agora.cgi\"\n- name: vpn358System_body\n  rule: body=\"class=\\\"form-actions j_add_ip_actions\\\"\" && body=\"href=\\\"/internal/bootstrap/ico/favicon.ico\\\"\"\n- name: Flow Framework_header\n  rule: header=\"Flow Framework\"\n- name: D-Link-DSL-2730E_body\n  rule: 'body=\"product page</span>: dsl-2730e\"'\n- name: MAiPU-Config_header\n  rule: header=\"maipu\"\n- name: Web-Control-Panel_body\n  rule: body=\"<td><img src=\\\"/images/wcpe.gif\"\n- name: ezOFFICE_body\n  rule: body=\"EZOFFICEUSERNAME\" && body=\"whirRootPath\" && body=\"/defaultroot/js/cookie.js\"\n- name: 网康下一代防火墙_header\n  rule: header=\"网康下一代防火墙\"\n- name: EagleEye-Networks_body\n  rule: body=\"href=\\\"css/eagle.base_efafdad3.css\" && body=\"title=\\\"eagle eye networks\\\">eagle\n    eye networks</a></h1>\"\n- name: Fastpublish-CMS_body\n  rule: body=\"content=\\\"fastpublish\"\n- name: FileMakerPro_header\n  rule: 'header=\"server: filemakerpro\" && header=\"FileMakerPro\"'\n- name: HP-3Com-3CRWE554G72_body\n  rule: body=\"http-equiv=\\\"3cnumber\\\" content=\\\"3crwe554g72\\\"\"\n- name: TP-LINK R410_header\n  rule: header=\"TP-LINK R410\"\n- name: Crhms-Medical-Insurance-Review-System_body\n  rule: body=\"url, \\\"中公网医疗信息管理系统\\\", option\"\n- name: Hejia-Modularized&environment-Monitoring-system-of-Data-Center_body\n  rule: body=\"content=\\\"www.hejia-tech.com\"\n- name: phpMumbleAdmin_header\n  rule: header=\"phpmumbleadmin_session=\"\n- name: TP-LINK Wireless WR1045ND_header\n  rule: header=\"TP-LINK Wireless WR1045ND\"\n- name: NETGEAR DG834N_header\n  rule: header=\"NETGEAR DG834N\"\n- name: OpenGSE_header\n  rule: header=\"OpenGSE\"\n- name: Juniper Load Balancer_header\n  rule: header=\"Juniper Load Balancer\"\n- name: HP LaserJet Pro Printer_header\n  rule: header=\"HP LaserJet Pro Printer\"\n- name: DCN-DCS-4500-28T-POE_body\n  rule: body=\"<b>dcs-4500-28t-poe</b>\"\n- name: eicg-SE_body\n  rule: body=\"window.location = \\\"login_simple.jsp\\\"\"\n- name: WikkaWiki_header\n  rule: header=\"WikkaWiki\"\n- name: AVer-DVR_body\n  rule: body=\"var isexist = get_cookie(\\\"ocx\\\"\"\n- name: Oracle Recommendations On Demand_header\n  rule: header=\"Oracle Recommendations On Demand\"\n- name: Gitea_header\n  rule: 'header=\"Set-Cookie: i_like_gitea=\"'\n- name: UILAS_header\n  rule: header=\"UILAS\"\n- name: Gitea_icon_hash\n  rule: icon_hash=\"1969970750\"\n- name: Gitea_body\n  rule: body=\"href=\\\"https://docs.gitea.io\\\">Help</a>\"\n- name: NETGEAR-WNR2020_body\n  rule: body=\"var model=\\\"wnr2020\\\"\"\n- name: Alstom-ALSPA®Care_body\n  rule: body=\"asp/images/s8000plus.gif\"\n- name: Samsung AllShare_header\n  rule: header=\"Samsung AllShare\"\n- name: Mbedthis-Appweb_header\n  rule: 'header=\"server: mbedthis-appweb\" && header=\"Mbedthis-Appweb\"'\n- name: exchange_body\n  rule: body=\"owaLgnBdy\"\n- name: exchange_header\n  rule: header=\"owa\" && header=\"OutlookSession\"\n- name: LANDesk_header\n  rule: header=\"LANDesk\"\n- name: Dahua-embedded-Multi-screen-controller_body\n  rule: body=\"嵌入式多屏控制器\" && body=\"<!--div id=\\\"information\\\">浙江大华技术股份有限公司</div-->\"\n- name: VMware Horizon_title\n  rule: title=\"VMware Horizon\"\n- name: VMware Horizon_header\n  rule: header=\"VMware Horizon\"\n- name: 360-Total-Security_header\n  rule: header=\"x-safe-firewall\"\n- name: NETGEAR-WNR2020_header\n  rule: header=\"netgear wnr2020\"\n- name: Toshiba-Printer_body\n  rule: body=\"<title class=\\\"clstitle1\\\">topaccess</title>\" && body=\"<frameset name=\\\"tatoplevelframeset\\\"\n    rows=\\\"*\\\"\" && body=\"<frame name=\\\"toplevelframe\\\" src='frameindex.html?v= \" &&\n    body=\"if(location.href.indexof(\\\"?main=efiling\\\" == -1{\"\n- name: planet WNRT-617G_header\n  rule: header=\"WNRT-617G\"\n- name: 力丰LFCMS_header\n  rule: header=\"力丰LFCMS\"\n- name: NETGEAR DGN2200Mv2TELKOM_header\n  rule: header=\"NETGEAR DGN2200Mv2TELKOM\"\n- name: EagleEye-Networks_header\n  rule: 'header=\"x-ee-lb-hostname: \"'\n- name: Xfinity_body\n  rule: body=\"/reset-meyer-1.0.min.css\"\n- name: IBM-WebSEAL_header\n  rule: 'header=\"server: webseal\" && header=\"WebSEAL\"'\n- name: esoTalk中文优化版_body\n  rule: body=\"generated by esoTalk\" && body=\"Powered by esoTalk\" && body=\"/js/esotalk.js\"\n- name: dubbo_body\n  rule: body=\"dubbo\"\n- name: VMware Horizon_icon_hash\n  rule: icon_hash=\"1182206475\" && icon_hash=\"1895360511\" && icon_hash=\"1182206475\"\n- name: BeyongCms_body\n  rule: body=\"BeyongCms\"\n- name: VMware Horizon_body\n  rule: body=\"VMware\" && body=\"ui-page\" && body=\"portal/favicon\"\n- name: 速达荣耀G5.net_header\n  rule: header=\"速达荣耀G5.net\"\n- name: LevelOne_NVR-0208_header\n  rule: header=\"realm=\\\"nvr-0208\"\n- name: azion webserver_header\n  rule: header=\"azion webserver\"\n- name: Online Judge_body\n  rule: body=\"<title>OnlineJudge</title>\"\n- name: Flickity_header\n  rule: header=\"Flickity\"\n- name: 百卓 Smart_header\n  rule: header=\"百卓 Smart\"\n- name: 农友政务系统_body\n  rule: body=\"1207044504\"\n- name: Seeyon_body\n  rule: body=\"href=\\\"/seeyon/common/images/\"\n- name: WSTMart_body\n  rule: body=\"powered by wstmart\" && body=\"href=\\\"/wstmart/home/\"\n- name: GIANTS Dedicated Server_header\n  rule: header=\"GIANTS Dedicated Server\"\n- name: VERTIV-System_body\n  rule: body=\"var port = \\\"9528\"\n- name: WSTMart_header\n  rule: header=\"WSTMart\"\n- name: Jive-SBS_header\n  rule: 'header=\"x-jsl: \" && header=\"X-Jsl:\"'\n- name: NETGEAR-XR500_body\n  rule: body=\"href=\\\"/npg/xr500\\\"\" && body=\"var host_name = \\\"xr500\\\"\"\n- name: Jive-SBS_body\n  rule: body=\"/jive-icons.css\" && body=\"class=\\\"jive-body-formpage\" && body=\"jive.rte.defaultstyles\"\n- name: NETGEAR-XR500_header\n  rule: header=\"realm=\\\"netgear xr500\"\n- name: JupyterHub_header\n  rule: header=\"JupyterHub\"\n- name: JupyterHub_icon_hash\n  rule: icon_hash=\"1248917303\"\n- name: Lantronix (Spider)_icon_hash\n  rule: icon_hash=\"882208493\"\n- name: Apache ActiveMQ_icon_hash\n  rule: icon_hash=\"1766699363\"\n- name: Ideasoft_header\n  rule: header=\"Ideasoft\"\n- name: TP-LINK TD-W89841N_header\n  rule: header=\"TP-LINK TD-W89841N\"\n- name: Citadel-Servers_body\n  rule: body=\"citadel server - powered by\" && body=\"/styles/webcit.css\" && body=\"<div\n    class=\\\"boxlabel\\\">citadel server - powered by\"\n- name: inseego-skyus-X_body\n  rule: body=\"class=\\\"skyuscaption\\\"\"\n- name: TopSec TopWAG_header\n  rule: header=\"TopSec TopWAG\"\n- name: Symantec-Client-Security_body\n  rule: body=\"<!-- symantec client security web based installation -->\"\n- name: Bootstrap Table_header\n  rule: header=\"Bootstrap Table\"\n- name: Youngzsoft-DBMail_body\n  rule: body=\"href=\\\"http://www.dbmailserver.com\\\" target=_blank\"\n- name: Adobe RoboHelp_header\n  rule: header=\"Adobe RoboHelp\"\n- name: KeyHelp (Keyweb AG)_icon_hash\n  rule: icon_hash=\"-1267819858\" && icon_hash=\"726817668\"\n- name: 奇安信 web server_header\n  rule: header=\"QiAnXin web server\"\n- name: Hanwei-CMS_body\n  rule: body=\"showsubpage.jsp\"\n- name: Siemens-SIMATIC-PCS7_body\n  rule: body=\"<td class=\\\"static_field\\\">station name:</td>\" && body=\"<link rel=\\\"stylesheet\\\"\n    type=\\\"text/css\\\" href=\\\"/s7web.css\\\">\" && body=\"siemens_firmenmarke_header.gif\"\n    && body=\"<td class=\\\"login_area\\\" colspan=\\\"2\\\"><img src=\\\"/simatic_controller.png\\\"\n    alt=\\\"simatic s7 cp\\\"></td>\"\n- name: Protovis_header\n  rule: header=\"Protovis\"\n- name: Cisco Codec_header\n  rule: header=\"Cisco Codec\"\n- name: Sapido-路由器_body\n  rule: body=\"<script>MML(\\\"change password\\\");</script>\" && body=\"><script>MML('Traditional\n    Chinese'\"\n- name: MinDoc-DocumentSystem_body\n  rule: body=\"powered by mindoc\"\n- name: Metronic-Admin-Theme-Framework_body\n  rule: body=\"metronic. admin dashboard template.\"\n- name: MinDoc-DocumentSystem_header\n  rule: header=\"mindoc-version\"\n- name: ADT-TPN-2G_body\n  rule: body=\"src=\\\"./system/usbkey.js\\\"\"\n- name: dtcms_body\n  rule: body=\"content=\\\"动力启航,DTCMS\"\n- name: wordpress_qTranslate_header\n  rule: header=\"qtrans_cookie_test\"\n- name: YYCMS_header\n  rule: header=\"YYCMS\"\n- name: Mi Router_header\n  rule: header=\"Mi Router\"\n- name: 拓尔思-TRS_title\n  rule: title=\"Login page for TRS Media Asset Management System\"\n- name: SpinCMS_header\n  rule: header=\"SpinCMS\"\n- name: 拓尔思-TRS_body\n  rule: body=\"<title>TRS媒资管理系统登录页面</title>\"\n- name: 启明天清ADM_header\n  rule: header=\"启明天清ADM\"\n- name: SiteGround_header\n  rule: header=\"SiteGround\"\n- name: IPC GK7101 HttpServer_header\n  rule: header=\"IPC GK7101 HttpServer\"\n- name: WCS-2040 P/T/Z Wireless IP Camera_header\n  rule: header=\"WCS-2040 P/T/Z Wireless IP Camera\"\n- name: kangle_header\n  rule: header=\"kangle\"\n- name: 捷点JCMS_body\n  rule: body=\"Publish By JCms2010\"\n- name: nginxWebUI_title\n  rule: title=\"nginxWebUI\"\n- name: Sophos Cyberoam (appliance)_icon_hash\n  rule: icon_hash=\"1601194732\"\n- name: SERCOMM-CPE_header\n  rule: header=\"realm=\\\"sercomm cpe authentication\"\n- name: Couchbase_header\n  rule: 'header=\"server: couchbase\" && header=\"realm=\\\"couchbase\"'\n- name: TP-LINK R1660M_header\n  rule: header=\"TP-LINK R1660M\"\n- name: TP-LINK Wireless WDR4300_header\n  rule: header=\"TP-LINK Wireless WDR4300\"\n- name: Citadel-Servers_header\n  rule: header=\"webcit=\"\n- name: H3C-BR204+_header\n  rule: header=\"basic realm=\\\"h3c br204+\\\"\"\n- name: Springer_header\n  rule: header=\"springercomcountry=\"\n- name: PG API Server_header\n  rule: header=\"PG API Server\" && header=\"PGAPIServ\"\n- name: sentry-cloud_body\n  rule: 'body=\"src: url(/static/fonts/lcdd.eot format(\\\"truetype\\\", url(/static/fonts/lcdd.ttf\n    format(\\\"truetype\\\";\"'\n- name: WDlinux wdCP云主机管理系统_header\n  rule: header=\"WDlinux wdCP云主机管理系统\"\n- name: http-proxy_header\n  rule: header=\"http-proxy\"\n- name: HuaWei-VPN_body\n  rule: body=\"oncompleted(hresult,perrorobject, pasynccontext\"\n- name: iSite CMS_header\n  rule: header=\"iSite CMS\"\n- name: Kerio-WinRoute-Firewall_body\n  rule: body=\"/gfx/kerio_logo.gif\"\n- name: Kerio-WinRoute-Firewall_header\n  rule: header=\"Kerio WinRoute Firewall Embedded Web Server\"\n- name: SANGFOR-M5500_body\n  rule: body=\"value=\\\"m5500-sc\" && body=\"value=\\\"m5500-q\"\n- name: 阿里企业邮箱_header\n  rule: header=\"阿里企业邮箱\"\n- name: BuiMALL_header\n  rule: header=\"BuiMALL\"\n- name: RooCMS_header\n  rule: header=\"RooCMS\"\n- name: Diaspora_header\n  rule: header=\"_diaspora_session\" && header=\"x-git-revision\" && header=\"_diaspora_session\"\n    && header=\"x-git-update\" && header=\"x-git-revision\"\n- name: Digi-Connect-SP_body\n  rule: body=\"href=\\\"http://www.digi.com\\\"\" && body=\"welcome to the configuration\n    and management interface of the digi connect sp python.\"\n- name: StarDot-Express_body\n  rule: body=\"<tr><td><a href=\\\"http://www.stardot.com\\\" target=\\\"_blank\\\"><img src=\\\"logo.gif\\\"\n    alt=\\\"\\\" width=\\\"227\\\" height=\\\"45\\\"></a></td>\" && body=\"<tr><td><a href=\\\"http://www.stardot-tech.com\\\"\n    target=\\\"_new\\\"><img src=\\\"logo.gif\\\" alt=\\\"\\\" width=\\\"227\\\" height=\\\"45\\\" border=\\\"0\\\"></a></td>\"\n- name: ZyXEL-VMG_body\n  rule: body=\".::welcome to the web-based configurator::.\"\n- name: 天融信TopFlow_body\n  rule: body=\"天融信TopFlow\"\n- name: Cross Pixel_header\n  rule: header=\"Cross Pixel\"\n- name: Linksys-Olds_header\n  rule: header=\"Linksys-Olds\"\n- name: DLink-DI-524_header\n  rule: header=\"realm=\\\"di-524\"\n- name: wisiyilink-Print-Server_body\n  rule: body=\"<a class=\\\"brand\\\" href=http://www.wisiyilink.com\" && body=\"wisiyilink©2013-2017版权所有\n    专注打印服务器\"\n- name: M.R. Inc SiteFrame_header\n  rule: header=\"M.R. Inc SiteFrame\"\n- name: NETGEAR DG834GTB_header\n  rule: header=\"NETGEAR DG834GTB\"\n- name: Miracle Hunt Services_header\n  rule: header=\"Miracle Hunt Services\"\n- name: Microsoft OWA_icon_hash\n  rule: icon_hash=\"442749392\"\n- name: iKuai_body\n  rule: body=\"ikuai\"\n- name: iKuai_header\n  rule: header=\"iKuai\"\n- name: SDCMS微信公众平台管理系统_body\n  rule: body=\"SDCMS微信公众平台管理系统\"\n- name: Kyan 监控设备_body\n  rule: body=\"login_files\" && body=\"platform\" && body=\"欢迎登陆系统\"\n- name: BH-BH5000C_body\n  rule: body=\"bhclientcer:\\\"/modules/web/common/data/bhclient.cer\"\n- name: Citrix firewall_header\n  rule: header=\"Citrix firewall\"\n- name: DLink-DI-504_header\n  rule: header=\"realm=\\\"di-504\"\n- name: AKCMS政府网站系统_header\n  rule: header=\"AKCMS政府网站系统\"\n- name: SoftEther-VPN_body\n  rule: body=\"<li>manage this vpn server or vpn bridge<ul>\"\n- name: Mondo Media_header\n  rule: header=\"Mondo Media\"\n- name: Medium_header\n  rule: header=\"Medium\"\n- name: Emtronix-EM9260_body\n  rule: body=\"class=\\\"style1\\\">em9260 web server\"\n- name: MAiPU-Gateway_body\n  rule: body=\"/webui/images/maipu/login/login_adminbg_a.gif\"\n- name: Hikvision-TV-Wall_body\n  rule: body=\"tvwall_newtvwall\"\n- name: mingdekeji-System_body\n  rule: body=\"href=\\\"imges/zgsh.ico\\\"\" && body=\"荆州明德科技\"\n- name: yuge-telemedicine_body\n  rule: body=\"渔歌医疗远程影响诊疗系统\"\n- name: infoglue_body\n  rule: body=\"infoglueBox.png\"\n- name: HeroSpeed Digital Technology Co. (NVR/IPC/XVR)_icon_hash\n  rule: icon_hash=\"2368483250\"\n- name: FastPanel Hosting_icon_hash\n  rule: icon_hash=\"774252049\"\n- name: HuaWei-VPN_header\n  rule: header=\"auth-http server\"\n- name: KubeSphere_body\n  rule: body=\"title>KubeSphere</title>\" && body=\"\\\"title\\\":\\\"KubeSphere\\\",\\\"description\\\"\"\n    && body=\"\" && body=\"(88717398db158e3330ce94fc1784e4a7\"\n- name: iOffice(红帆oa)_header\n  rule: header=\"iOffice(红帆oa)\"\n- name: phpMyAdmin_icon_hash\n  rule: icon_hash=\"3818735390\"\n- name: Eisoo-AnyShare_body\n  rule: body=\"res/libs/webuploader/webuploader.css\" && body=\"src=\\\"/res/libs/base64.min.js\\\"\"\n- name: Trend-Aicache_header\n  rule: header=\"x-aicache\"\n- name: Shopfa_header\n  rule: header=\"Shopfa\"\n- name: WP Engine_header\n  rule: header=\"WP Engine\"\n- name: PMWAY-E5_body\n  rule: body=\"tip_browsertoolow:\\\"您当前使用的浏览器版本或模式太低，鹏为e5为了您更好的体验，请升级您的ie版本至8.0或以上。\\\"\"\n- name: TP-LINK-TD-W8970_header\n  rule: header=\"tp-link 300mbps wireless n gigabit adsl2+ modem router td-w8970\"\n- name: Siemens Gigaset_header\n  rule: header=\"Siemens Gigaset\"\n- name: UCenter Home_header\n  rule: header=\"UCenter Home\"\n- name: Wildfly_icon_hash\n  rule: icon_hash=\"-1666561833\"\n- name: 斐讯Fortress防火墙_body\n  rule: body=\"<meta name=\\\"author\\\" content=\\\"上海斐讯数据通信技术有限公司\\\" />\"\n- name: HFS (HTTP File Server)_icon_hash\n  rule: icon_hash=\"2124459909\" && icon_hash=\"731374291\"\n- name: v5shop_body\n  rule: body=\"content=\\\"V5shop\" && body=\"Powered by V5Shop\"\n- name: Atlassian – JIRA_icon_hash\n  rule: icon_hash=\"981867722\" && icon_hash=\"552727997\"\n- name: PG-Real-Estate-Solution_body\n  rule: body=\">pg real estate solution - real estate web site design\"\n- name: innovaphone_icon_hash\n  rule: icon_hash=\"671221099\"\n- name: VNC_body\n  rule: body=\"<applet code=vncviewer.class archive=vncviewer.jar\"\n- name: Polyfill_header\n  rule: header=\"Polyfill\"\n- name: Maipu-VPN3005_header\n  rule: header=\"realm=\\\"mpsec vpn3005c\"\n- name: TRS-Hybase_body\n  rule: body=\"href=\\\"#\\\">trs hybase</a>\"\n- name: OpenSSL_header\n  rule: header=\"openssl\" && header=\"OpenSSL\"\n- name: Easy-Link-RFIP_header\n  rule: header=\"realm=\\\"easy-link rfip\"\n- name: 西默科技 上网行为管理_header\n  rule: header=\"西默科技 上网行为管理\"\n- name: TP-LINK Wireless WR1043N_header\n  rule: header=\"TP-LINK Wireless WR1043N\"\n- name: ProCurve Web Server_header\n  rule: header=\"ProCurve Web Server\"\n- name: Cougar_header\n  rule: 'header=\"server: cougar\" && header=\"Cougar\"'\n- name: FoosunCMS_body\n  rule: body=\"Created by DotNetCMS\" && body=\"For Foosun\" && body=\"Powered by www.Foosun.net,Products:Foosun\n    Content Manage system\"\n- name: Ruvar-OA_body\n  rule: body=\"<iframe id=\\\"ifrm\\\" width=\\\"100%\\\" height=\\\"100%\\\" frameborder=\\\"0\\\"\n    scrolling=\\\"no\\\" src=\\\"/include/login.aspx\"\n- name: NETGEAR JWNR2010_header\n  rule: header=\"NETGEAR JWNR2010\"\n- name: Mailer_body\n  rule: body=\"/jdwm/cgi/login.cgi?login\"\n- name: irecms_header\n  rule: header=\"IRe.CMS\"\n- name: 亿邮(eYouMail)_body\n  rule: body=\"eYouMail\" && body=\"eYou.net\" && body=\"EYOU企业邮箱\" && body=\"cr\\\">eYouMail\"\n- name: WonderCMS_header\n  rule: header=\"WonderCMS\"\n- name: AdRem NetCrunch HTTP Server_header\n  rule: header=\"AdRem NetCrunch HTTP Server\"\n- name: IBM-GoServe_header\n  rule: 'header=\"server: goserve\"'\n- name: kuaipu-M6_body\n  rule: body=\"src=\\\"resource/javascript/jkpm6.datetime.js\"\n- name: C-Lodop_body\n  rule: body=\"关于C-Lodop免费和注册授权\" && body=\"document.getElementById(\\\"reqid\\\").value==document.getElementById(\\\"licid\\\").value)\"\n- name: OpenStack_icon_hash\n  rule: icon_hash=\"786533217\" && icon_hash=\"99425669\" && icon_hash=\"1232596212\"\n- name: PLANET-ADN-4101_header\n  rule: header=\"realm=\\\"adn-4101\"\n- name: Froala Editor_header\n  rule: header=\"Froala Editor\"\n- name: K01_body\n  rule: body=\"网络攻击阻断系统\"\n- name: C-Lodop_icon_hash\n  rule: icon_hash=\"-329747115\"\n- name: 凡科建站_body\n  rule: body=\"凡科互联网科技股份有限公司\" && body=\"content=\\\"凡科\"\n- name: ARN01154U4_header\n  rule: header=\"ARN01154U4\"\n- name: MYRE-PHP_body\n  rule: 'body=\"<!-- begin: menu footer don''t change anything\" && body=\"<b><u>my last\n    viewed</u></b>\"'\n- name: Verizon-Router_body\n  rule: body=\"<div id=\\\"bgimage\\\" class=\\\"container\\\" ng-view></div>\"\n- name: Dnion-CDN_header\n  rule: header=\"fastcdn.com\"\n- name: Android Webcam Server_header\n  rule: header=\"Android Webcam Server\"\n- name: YMails 智能反垃圾邮件系统_body\n  rule: body=\"YMail\"\n- name: ioffice_body\n  rule: body=\"iofficeocxsetup.exe\" && body=\"hongfan. all rights reserved\"\n- name: YMails 智能反垃圾邮件系统_header\n  rule: header=\"YMail\"\n- name: 铱迅WAF_header\n  rule: header=\"铱迅WAF\"\n- name: 中新金盾安全管理与运维审计系统_body\n  rule: body=\"/fort_新版UI主线版本/WebRoot/pages/commons/meta.jsp\"\n- name: CheckPoint_icon_hash\n  rule: icon_hash=\"794809961\"\n- name: LED-Control-Software_body\n  rule: body=\"j_setcon j_sub_new j_padt30 j_padb30\" && body=\"<!-- 记录当前电视墙的序号 end-->\"\n- name: 中兴 F660路由器_header\n  rule: header=\"中兴 F660路由器\"\n- name: ASUS-RT-AX92U_body\n  rule: body=\"<div class=\\\"prod_madelname\\\">rt-ax92u\"\n- name: Seehealth-Health-Management-System_body\n  rule: body=\"href=\\\"upvalidatefile.aspx\"\n- name: DCN-DCRS-7604E_body\n  rule: body=\"<b>dcrs-7604e</b>\"\n- name: Phaser_header\n  rule: header=\"Phaser\"\n- name: 指挥调度平台_icon_hash\n  rule: icon_hash=\"2217084543\"\n- name: Alcatel_Lucent-OS10K_body\n  rule: body=\"<span>device os10k\"\n- name: Apache-Unomi_body\n  rule: body=\"logo apache unomi\"\n- name: AlstraSoft-EPay-Enterprise_body\n  rule: body=\"Powered by EPay Enterprise\" && body=\"/shop.htm?action=view\"\n- name: venustech 天清入侵防御系统_header\n  rule: header=\"venustech 天清入侵防御系统\"\n- name: ClusterEngine_header\n  rule: header=\"ClusterEngine\"\n- name: Apache ActiveMQ_header\n  rule: header=\"Apache ActiveMQ\"\n- name: 联软IT安全运维管理系统_icon_hash\n  rule: icon_hash=\"2163986542\"\n- name: QuarkMail_body\n  rule: body=\"window.location.replace(\\\"/cgi-bin/web2cgi/index.cgi\\\";\" && body=\"scrolling=\\\"no\\\"\n    frameborder=\"\n- name: LG-Network-Storage_body\n  rule: body=\"style=\\\"background:url('../images/login/form_bg_lg_nas_storage.gif';\n    background-repeat:no-repeat;\\\">\"\n- name: HiPER-ROUTER_header\n  rule: header=\"hiper router\"\n- name: WeBid_body\n  rule: body=\"powered by <a href=\\\"http://www.webidsupport.com/\\\">webid\" && body=\"<meta\n    name=\\\"generator\\\" content=\\\"webid\\\">\"\n- name: TRENDnet-TV-IP321PI_header\n  rule: header=\"realm=\\\"tv-ip321pi\"\n- name: yongyou_a8_body\n  rule: body=\"return \\\"/seeyon\\\";\"\n- name: phpComasy_header\n  rule: header=\"phpComasy\"\n- name: 网神SecFox安全审计系统_header\n  rule: header=\"网神SecFox安全审计系统\"\n- name: Mitel-Aastra-IP-telephone_body\n  rule: body=\"<frame src=\\\"m_bar.asp\\\" name=\\\"sidemenu\"\n- name: Outlook Web Application_icon_hash\n  rule: icon_hash=\"1768726119\" && icon_hash=\"1356662359\"\n- name: Motion Camera_header\n  rule: header=\"Motion Camera\"\n- name: Powercdn_header\n  rule: header=\"Powercdn\"\n- name: TP-Link TL-WR841ND_header\n  rule: header=\"TP-Link TL-WR841ND\"\n- name: MULTILASER-Roteador-Wireless-N300_body\n  rule: body=\"rel=\\\"shortcut icon\\\" href=\\\"./multi_icone.ico\\\"\"\n- name: ipTIME-N704QCA_body\n  rule: body=\"src=\\\"/images2/login_title.n704qc.gif\\\"\"\n- name: TP-LINK R410+_header\n  rule: header=\"TP-LINK R410+\"\n- name: Nextcloud-Product_body\n  rule: body=\"nextcloud</a> – 给您所有数据一个安全的家\"\n- name: JeecgBoot-企业级低代码平台_body\n  rule: body=\"var htmlRoot = document.getElementById('htmlRoot');\" && body=\"var theme\n    = window.localStorage.getItem('__APP__DARK__MODE__');\" && body=\"href=/logo.png>\"\n    && body=\"src=/cdn/babel-polyfill/polyfill_7_2_5.js\"\n- name: TP-LINK Wireless WR741N/742N_header\n  rule: header=\"TP-LINK Wireless WR741N/742N\"\n- name: Seagate Technology (NAS)_icon_hash\n  rule: icon_hash=\"240136437\"\n- name: JeecgBoot-企业级低代码平台_title\n  rule: title=\"JeecgBoot 企业级低代码平台\"\n- name: ASUS-RT-AC66R_body\n  rule: body=\"<div class=\\\"prod_madelname\\\">rt-ac66r\" && body=\"class=\\\"prod_madelname\\\"\n    style=\\\"margin-left:78px;\\\">rt-ac66r</div>\"\n- name: ASUS-RT-AC66R_header\n  rule: header=\"rt-ac66r\"\n- name: ReeCam-IP-Camera_header\n  rule: header=\"reecam\"\n- name: Zeus Web Server_header\n  rule: header=\"Server:Zeus\"\n- name: 中国铁通 禹路由_body\n  rule: body=\"src=\\\"img/by_web.png\\\"\"\n- name: Dptech-Device_body\n  rule: body=\"window.location = \\\"html/login_en.html\\\";\" && body=\"/func/web_main/validate?check=\\\"+hex_md5(s.tolowercase(\"\n- name: iWebShop_body\n  rule: body=\"_skinpath\" && body=\"_themepath\" && body=\"_weburl\" && body=\"class=\\\"pro_title\\\">iwebshop支付测试\"\n    && body=\"/runtime/default/systemjs\"\n- name: 天阗入侵检测与管理系统_header\n  rule: header=\"天阗入侵检测与管理系统\"\n- name: Energine_body\n  rule: body=\"scripts/Energine.js\" && body=\"Powered by <a href= \\\"http://energine.org/\"\n    && body=\"stylesheets/energine.css\"\n- name: Cisco-UCS-KVM_body\n  rule: body=\"/kvm_styles.css\"\n- name: HP-Printer_body\n  rule: body=\"/hp/jetdirect\"\n- name: VMware-ESX_body\n  rule: body=\"content=\\\"vmware esxi\" && body=\"document.write(\\\"<title>\\\" + id_eesx_welcome\n    + \\\"</title>\\\"\" && body=\"content=\\\"vmware esx \" && body=\"document.write(id_esx_viclientdesc;\"\n- name: HP-Printer_header\n  rule: header=\"hp-chaiserver\" && header=\"HP HTTP Server\"\n- name: Schneider-ClearSCADA_body\n  rule: body=\"<page title=\\\"clearscada\"\n- name: ZyXEL-NBG5715_body\n  rule: body=\"<li class=\\\"modelname\\\">nbg5715</li>\"\n- name: django CMS_header\n  rule: header=\"django CMS\"\n- name: UsualToolCMS_header\n  rule: header=\"UsualToolCMS\"\n- name: Mitel Networks (MiCollab End User Portal)_icon_hash\n  rule: icon_hash=\"-1922044295\"\n- name: YunKeMail_header\n  rule: header=\"alimail_browser_instance\"\n- name: AD EBiS_header\n  rule: header=\"AD EBiS\"\n- name: Aegea_header\n  rule: header=\"Aegea\"\n- name: 联软IT安全运维管理系统_header\n  rule: header=\"联软IT安全运维管理系统\"\n- name: WODECMS开源内容管理系统_header\n  rule: header=\"WODECMS开源内容管理系统\"\n- name: MinIO_body\n  rule: body=\"MinIO Console\" && body=\"<img src=\\\"/minio/logo.svg\\\" alt=\\\"\\\">\" && body=\"<title>Minio\n    Browser</title>\"\n- name: MinIO_title\n  rule: title=\"MinIO Browser\"\n- name: MinIO_header\n  rule: 'header=\"Server: MinIO\"'\n- name: 海纳CMS-HituxCMS_body\n  rule: body=\"Powered By HituxCMS\" && body=\"ServiceCenter.js\"\n- name: 华夏运通 Uranus_header\n  rule: header=\"华夏运通 Uranus\"\n- name: magtech-JournalX_body\n  rule: body=\"journalx/authorlogon.action?mag_id\"\n- name: 快范CMS(KuaiFanCMS(快范CMS)手机建站系统)_body\n  rule: body=\"快范CMS\" && body=\"KuaiFanCMS(快范CMS)手机建站系统\"\n- name: Ipswitch-imailserver_body\n  rule: body=\"myicalusername\"\n- name: 致远 Analytics Cloud 分析云_icon_hash\n  rule: icon_hash=\"410106848\"\n- name: D-Link-DIR-835_body\n  rule: body=\"<a href=\\\"javascript:check_is_modified('http://support.dlink.com/'\\\">dir-835\"\n    && body=\"<a href=\\\"http://support.dlink.com.tw/\\\">dir-835\"\n- name: Bludit轻量级博客CMS系统_header\n  rule: header=\"Bludit轻量级博客CMS系统\"\n- name: Ipswitch-imailserver_header\n  rule: 'header=\"server: ipswitch-imail\"'\n- name: ManageEngine-Applications-Manager_body\n  rule: body=\"/appmanager.js\"\n- name: TerraMaster TOS_title\n  rule: title=\"TOS\"\n- name: Linksys RT31P2_header\n  rule: header=\"Linksys RT31P2\"\n- name: MetInfo_body\n  rule: body=\"content=\\\"metinfo\" && body=\"powered_by_metinfo\" && body=\"/images/css/metinfo.css\"\n    && body=\"content=\\\"MetInfo\" && body=\"powered_by_metinfo\" && body=\"/images/css/metinfo.css\"\n- name: Easy7视频监控平台_header\n  rule: header=\"Easy7视频监控平台\"\n- name: Yuanian-Accounting-Software_body\n  rule: body=\"yuannian.css\" && body=\"/image/logo/yuannian.gif\"\n- name: Mesosphere-DC/OS_header\n  rule: header=\"realm=\\\"mesosphere\"\n- name: asp168欧虎_body\n  rule: body=\"upload/moban/images/style.css\" && body=\"default.php?mod=article&do=detail&tid\"\n- name: Aurora HTTP Server_header\n  rule: header=\"Aurora HTTP Server\"\n- name: MHonArc_header\n  rule: header=\"MHonArc\"\n- name: TornadoServer_header\n  rule: 'header=\"server: tornadoserver\" && header=\"TornadoServer\"'\n- name: Atvise-webMI_header\n  rule: header=\"atvise\" && header=\"atvise\"\n- name: Atvise-webMI_body\n  rule: body=\"alarmlistbutton\" && body=\"alarmlistbutton\"\n- name: SugarCRM_header\n  rule: header=\"index.php?action=login&module=users\" && header=\"SugarCRM\"\n- name: Catfish Blog_header\n  rule: header=\"Catfish Blog\"\n- name: GC-System_body\n  rule: body=\" href='统一支付平台学生使用说明.doc'\"\n- name: 53客服_body\n  rule: body=\"tb.53kf.com/code/\"\n- name: LFCMS(雷风影视CMS)_body\n  rule: body=\"LFCMS\" && body=\"content=\\\"Ryan Haudenschilt\" && body=\"Powered by Family\n    Connections\"\n- name: LFCMS(雷风影视CMS)_header\n  rule: header=\"LFCMS\"\n- name: Linksys WRT54G_header\n  rule: header=\"Linksys WRT54G\"\n- name: XATABoost_header\n  rule: header=\"XATABoost\"\n- name: Vodafone (Technicolor)_icon_hash\n  rule: icon_hash=\"165976831\"\n- name: ASUS-DSL-N55U_body\n  rule: body=\"<div class=\\\"prod_madelname\\\">dsl-n55u\"\n- name: House5_body\n  rule: body=\"/house5-style1/\"\n- name: GCMS门户版_body\n  rule: body=\"GCMS门户版\"\n- name: ASUS-DSL-N55U_header\n  rule: header=\"realm=\\\"dsl-n55u\"\n- name: EFM-Networks-ipTIME-N1004Q_body\n  rule: body=\"src=\\\"/images2/login_title.n104q.gif\\\"\" && body=\"src=\\\"/images2/login_title.n104qi.gif\\\"\"\n- name: 金航网上阅卷系统_header\n  rule: header=\"金航网上阅卷系统\"\n- name: 金航网上阅卷系统_body\n  rule: body=\"金航\" && body=\"jsyj\" && body=\"衡水金航\"\n- name: SAMSUNG-SmartCam_body\n  rule: body=\"pages/camera_login.php?login=true\"\n- name: TP-LINK TD-W8970_header\n  rule: header=\"TP-LINK TD-W8970\"\n- name: mod_antiloris_header\n  rule: header=\"mod_antiloris\"\n- name: ManageEngine-Applications-Manager_header\n  rule: 'header=\"cookie: jsessionid_apm_9090\"'\n- name: 极致CMS_header\n  rule: header=\"极致CMS\"\n- name: cacaoweb_icon_hash\n  rule: icon_hash=\"2556782485\"\n- name: Alibaba-Group-DMS_body\n  rule: body=\"copyright &copy;  dms  all rights reserved （alibaba 数据管理产品）\"\n- name: ASUS-RT-AC3200_body\n  rule: body=\"<div class=\\\"prod_madelname\\\">rt-ac3200\" && body=\"class=\\\"prod_madelname\\\"\n    style=\\\"margin-left:78px;\\\">rt-ac3200\" && body=\"capture(status_router.sys_model</script></div>asus\n    rt-ac3200\" && body=\"var product_name='rt-ac3200'\"\n- name: SuperSignEZ_header\n  rule: header=\"SuperSignEZ\"\n- name: chelen-System_body\n  rule: body=\"iaus/media/js/login/login.js\"\n- name: ASUS-RT-AC3200_header\n  rule: header=\"rt-ac3200\"\n- name: 东方通应用服务器TongWeb_header\n  rule: header=\"TongWeb Server\"\n- name: Commerce Server_header\n  rule: header=\"Commerce Server\"\n- name: EbuyCms_header\n  rule: header=\"EbuyCms\"\n- name: Resin_body\n  rule: body=\"<script type=\\\"text/javascript\\\" src=\\\"/resin-doc/js/default.js\\\">\"\n- name: appex-lotapp_body\n  rule: body=\"appex network corporation\" && body=\"/change_lan.php?lanid=en\"\n- name: Adcon-Telemetry-Gateway_body\n  rule: body=\"adcon telemetry gmbh;\" && body=\"welcome to the a840 telemetry gateway!\"\n- name: Tenda-WiFi_body\n  rule: body=\"src=\\\"img/logo-inverse.png\\\" alt=\\\"tenda logo\\\"\"\n- name: kingcms_body\n  rule: body=\"content=\\\"KingCMS\" && body=\"Powered by KingCMS\" && body=\"kingcms\"\n- name: RAISECOM-ISCOM-S5600_body\n  rule: body=\"color=\\\"#000000\\\">iscom s5600\"\n- name: GZIP encode_header\n  rule: header=\"Content-Encoding:gzip\"\n- name: TTLiNK-TT-168L_body\n  rule: body=\">tt-168l</a>\"\n- name: SpamTitan_body\n  rule: body=\"<table class=\\\"lhead\\\"><tr><td class=\\\"img\\\"><img src=\\\"/imgs/logo.gif\\\"\n    alt=\\\"spamtitan logo\\\"></td></tr></table></div>\"\n- name: Tektroniks_body\n  rule: body=\"<td width=\\\"100\\\"><label id=\\\"au_login_id_label\\\" for=\\\"au_login_id\\\"\n    datatype=\\\"\\\" required=\\\"true\\\">user name:</label></td>\"\n- name: Tektroniks_header\n  rule: header=\"basic realm=\\\"datacentre\"\n- name: FlashCom_header\n  rule: header=\"FlashCom\"\n- name: Linksys-sacz_header\n  rule: header=\"Linksys-sacz\"\n- name: 瑞友天翼_应用虚拟化系统_header\n  rule: header=\"瑞友天翼_应用虚拟化系统\"\n- name: NETGEAR-FS728TP_body\n  rule: body=\"class=\\\"fs728tpimage spacer50percent topalign righthalign\\\"\"\n- name: 网康科技网关/防火墙_icon_hash\n  rule: icon_hash=\"5471989\"\n- name: MKPortal_body\n  rule: body=\"target=\\\"_blank\\\">mkportal</a>\"\n- name: 企业版QQ_body\n  rule: body=\"http://wpa.b.qq.com/cgi/wpa.php\"\n- name: 北京久其财务报表_body\n  rule: body=\"src=\\\"/netrep/js/func.js\\\">\" && body=\"src=\\\"/netrep/js/des.js\\\">\" &&\n    body=\"/netrep/sysmgr/usermanager/reguser.jsp\"\n- name: NetBox_header\n  rule: 'header=\"server: netbox\" && header=\"realm=\\\"netbox\"'\n- name: Minecraft-Server_header\n  rule: header=\"realm=\\\"minecraft\"\n- name: SMF_body\n  rule: body=\"<a href=\\\"http://www.simplemachines.org/about/copyright.php\\\" title=\\\"free\n    forum software\\\" target=\\\"_blank\" && body=\"<img class=\\\"floatright\\\" id=\\\"smflogo\\\"\n    src=\" && body=\"document.getelementbyid(\\\"upshrink\\\".src = smf_images_url + \"\n- name: H3C-Magic-M2_body\n  rule: body=\"var product_type = \\\"m2\\\"\"\n- name: ZyXEL-NBG4615-v2_body\n  rule: body=\"<li class=\\\"modelname\\\">nbg4615 v2</li>\"\n- name: BottleCMS_header\n  rule: header=\"BottleCMS\"\n- name: Dreamer CMS_icon_hash\n  rule: icon_hash=\"3546401618\"\n- name: Pwithe-Company's-product_body\n  rule: body=\"<p>技术支持 深圳警翼数码科技有限公司\"\n- name: W3Counter_header\n  rule: header=\"W3Counter\"\n- name: JUNIPer-mx960_body\n  rule: body=\"face=\\\"verdana\\\">mx960\"\n- name: DZCP_body\n  rule: body=\"<!--[ DZCP\"\n- name: Bitrix24_header\n  rule: header=\"Bitrix24\"\n- name: NETGEAR DST6501_header\n  rule: header=\"NETGEAR DST6501\"\n- name: Dreamer CMS_header\n  rule: header=\"dreamer-cms\"\n- name: TP-LINK SOHO R860_header\n  rule: header=\"TP-LINK SOHO R860\"\n- name: iKEY管理系统_header\n  rule: header=\"iKEY管理系统\"\n- name: KISGB_header\n  rule: header=\"KISGB\"\n- name: advantech_WISE_body\n  rule: body=\"remote manage your intelligent systems\"\n- name: Restlet-Framework_header\n  rule: header=\"restlet-framework\" && header=\"Restlet-Framework\"\n- name: Sundray-Enterprise-AP_body\n  rule: body=\"url = '/cgi-bin/dispatcher.cgi?cmd=0&login_language='+idx\" && body=\"/login-btn.png\"\n- name: 信呼办公OA系统_body\n  rule: body=\"信呼办公OA系统\"\n- name: yonyou-KSOA_body\n  rule: body=\"onmouseout=\\\"this.classname='btn btnoff'\\\"\"\n- name: richmail_body\n  rule: body=\"/resource/se/lang/se/mail_zh_CN.js\" && body=\"content=\\\"Richmail\"\n- name: feifeicms_body\n  rule: body=\"data-target=\\\"#navbar-feifeicms\\\"\"\n- name: qm-System_body\n  rule: body=\"assets/css/fdb.css\" && body=\"src=\\\"polyfills.js\"\n- name: FHGis_body\n  rule: body=\"onclick=\\\"goto('fhgis'\\\">\"\n- name: 广州协商 协同管理平台_header\n  rule: header=\"广州协商 协同管理平台\"\n- name: imcat_header\n  rule: header=\"imcat\"\n- name: Moguta.CMS_header\n  rule: header=\"Moguta.CMS\"\n- name: 1039soft-JiaXiao_body\n  rule: body=\"name=\\\"hid_qu_type\\\" id=\\\"hid_qu_type\\\"\" && body=\"/handler/validatecode.ashx?id=\"\n- name: cosmoshop_header\n  rule: header=\"cosmoshop\"\n- name: fangmail_body\n  rule: body=\"/fangmail/default/css/em_css.css\"\n- name: FreeTextBox_header\n  rule: header=\"FreeTextBox\"\n- name: FC2-Blog_header\n  rule: header=\"bloguid\" && header=\"cookietest=test\"\n- name: Visual Website Optimizer_header\n  rule: header=\"Visual Website Optimizer\"\n- name: H3C-SSL-VPN_body\n  rule: body=\"keep me signed in</span>\" && body=\"welcome to ssl vpn</h1>\"\n- name: EnergyICT-RTU_body\n  rule: body=\"<frame name=\\\"webrtumenu\\\" target=\\\"main\\\" src=\\\"webrtumenu.shtml\"\n- name: IPC@CHIP_header\n  rule: header=\"IPC@CHIP\"\n- name: ASUS-RT-AC53_body\n  rule: body=\"<div class=\\\"prod_madelname\\\">rt-ac53\"\n- name: Roadiz CMS_header\n  rule: header=\"Roadiz CMS\"\n- name: MuseProxy_header\n  rule: header=\"MuseProxy\"\n- name: Milesight VPN_title\n  rule: title=\"MilesightVPN\"\n- name: Milesight VPN_icon_hash\n  rule: icon_hash=\"612420834\"\n- name: ProMail_body\n  rule: body=\"powered by squirrelmail.org. squirrelmail\"\n- name: SJSWS_ OiWS_header\n  rule: header=\"Oracle-iPlanet-Web-Server\" && header=\"Sun-Java-System-Web-Server\"\n- name: SweetAlert2_header\n  rule: header=\"SweetAlert2\"\n- name: 锐捷应用控制引擎_body\n  rule: body=\"window.open(\\\"/login.do\" && body=\"airWin\"\n- name: WishCMS(维新内容管理系统)_body\n  rule: body=\"WishCMS\" && body=\"维新内容管理系统\"\n- name: Acme.Serve_header\n  rule: header=\"Acme.Serve\"\n- name: TP-Link TL-WR841ND v8_header\n  rule: header=\"TP-Link TL-WR841ND v8\"\n- name: 金山TimeOn云杀毒_body\n  rule: body=\"<title>TimeOn\" && body=\"iepngfix/iepngfix_tilebg.js\"\n- name: Embedthis-Appweb_header\n  rule: 'header=\"server: embedthis-appweb\"'\n- name: FCS-1060 P/T IP Network Camera_header\n  rule: header=\"FCS-1060 P/T IP Network Camera\"\n- name: momeeting-MOVISION_body\n  rule: body=\"class=\\\"meeting movision\\\"\" && body=\"document.title=\\\"登录-摩云视讯\\\"\" &&\n    body=\"<!-- 科达视讯云 摩云视讯 电信有区别 -->\"\n- name: phpCollab_body\n  rule: body=\"<!-- powered by phpcollab\" && body=\"content='phpcollab\"\n- name: Eureka-Server_body\n  rule: body=\"eureka/css/wro.css\" && body=\"<td><b>apollo-adminservice</b></td>\"\n- name: 淘特房产网站管理系统_房产CMS_body\n  rule: body=\"淘特房产网站管理系统_房产CMS\"\n- name: PKP (OpenJournalSystems) Public Knowledge Project_icon_hash\n  rule: icon_hash=\"2099342476\"\n- name: siangsoft-FileSystem_body\n  rule: body=\"$.cookie('sianglng' , null\"\n- name: SDL Tridion_header\n  rule: header=\"SDL Tridion\"\n- name: Eureka-Server_header\n  rule: header=\"eureka-server\"\n- name: KobiMaster_header\n  rule: header=\"KobiMaster\"\n- name: Green Valley CMS_header\n  rule: header=\"Green Valley CMS\"\n- name: 和信创天云桌面系统_body\n  rule: body=\"和信下一代云桌面VENGD\"\n- name: EFM-Networks-ipTIME-G104BE_body\n  rule: body=\"src =\\\"/images/login_back_g104be.gif\\\"\" && body=\"src =\\\"/images2/login_title.g104be.gif\\\"\"\n- name: ClickTale_body\n  rule: body=\"<div id=\\\"ClickTaleDiv\"\n- name: iBall WRX300N_header\n  rule: header=\"iB-WRX300N\"\n- name: Reolink_icon_hash\n  rule: icon_hash=\"-38705358\"\n- name: 3KITS_header\n  rule: header=\"3KITS\"\n- name: STAR-NET SVG6000_header\n  rule: header=\"STAR-NET SVG6000\"\n- name: YunKeMail_body\n  rule: body=\"action=\\\"/alimail/error/browserlog\" && body=\"content=\\\"阿里企业邮箱\"\n- name: Actiontec-MI424WR_body\n  rule: body=\"</div> actiontec mi424wr\"\n- name: Alcatel_Lucent-OS6860-P48_body\n  rule: body=\"<span>device os6860-p48\"\n- name: ChiliProject_body\n  rule: body=\"powered by <a href=\\\"https://www.chiliproject.org/\" && body=\"content=\\\"chiliproject\"\n    && body=\"Powered by <a href=\\\"https://www.chiliproject.org/\" && body=\"content=\\\"ChiliProject\"\n- name: Resin_header\n  rule: 'header=\"Server: Resin\" && header=\"Server:Resin\"'\n- name: LG-65UM7800HNA_body\n  rule: body=\"<modelnumber>65um7800hna</modelnumber>\"\n- name: testlink_body\n  rule: body=\"testlink_library.js\" && body=\"content=\\\"martin havlat\\\" />\" && body=\"testlink\n    project <a href=\\\"http://testlink.sourceforge.net/docs/testlink.php\\\">home</a><br\n    />\" && body=\"testlink_library.js\" && body=\"content=\\\"martin havlat\\\" />\" && body=\"testlink\n    project <a href=\\\"http://testlink.sourceforge.net/docs/testlink.php\" && body=\"testlink_library.js\"\n- name: 安恒明御安全网关_title\n  rule: title=\"明御安全网关\"\n- name: 安恒明御安全网关_header\n  rule: header=\"安恒明御安全网关\"\n- name: NETGEAR DGN2200Bv4_header\n  rule: header=\"NETGEAR DGN2200Bv4\"\n- name: BROADCOM-CA-PAM_body\n  rule: body=\"ispamclient = false\" && body=\"/cspm/cleansession.jsp\"\n- name: ZTE-ZSRV2-Router_body\n  rule: body=\"zte corporation. all rights reserved.\"\n- name: sxt234-System_body\n  rule: body=\"<div class=\\\"head_right\\\" onclick=\\\"window_close(\\\">\"\n- name: 启迪国信 UEM管理平台_body\n  rule: body=\"#commonTip\" && body=\"css/icomoon\" && body=\"login\" && body=\"wwLogin\"\n- name: O2Security Succendo SSL VPN_header\n  rule: header=\"O2Security Succendo SSL VPN\"\n- name: Solidyne-iNET-Server_body\n  rule: body=\"<meta http-equiv=\\\"refresh\\\" content=\\\"0; url=/hmi/\\\">\" && body=\"<frame\n    name=\\\"frleft\\\" scrolling=\\\"no\\\" id=\\\"frleft\\\" src=\\\"qfrleft.aspx\\\">\"\n- name: NETGEAR MBR1310_header\n  rule: header=\"NETGEAR MBR1310\"\n- name: Adobe-Magento_body\n  rule: body=\"magento, varien, e-commerce\"\n- name: cradlepoint-AER3150_body\n  rule: body=\"cplogin.model = \\\"aer3150\\\";\"\n- name: Dr-Web-Anti-Virus_body\n  rule: body=\"/avdesk/includes/system/templates/images/logo_en.png\"\n- name: Adobe-Magento_header\n  rule: header=\"redkiwi-cloud\"\n- name: Fat-Free Framework_header\n  rule: header=\"Fat-Free Framework\"\n- name: ECOR_header\n  rule: header=\"ecor264\" && header=\"ECOR264\"\n- name: NSFOCUS WAF_header\n  rule: header=\"NSFOCUS WAF\"\n- name: Dr-Web-Anti-Virus_header\n  rule: header=\"DRWEB_PERSONAL_OFFICE=\"\n- name: 佳能网络摄像头(Canon Network Cameras)_body\n  rule: body=\"/viewer/live/en/live.html\"\n- name: SatLink_header\n  rule: header=\"basic realm=\\\"satlink terminal\"\n- name: TeamPortal_body\n  rule: body=\"ts_expiredurl\"\n- name: Join-Cheer-General-financial-system_body\n  rule: body=\"北京久其软件股份有限公司 版权所有\" && body=\"/netrep/intf\" && body=\"/netrep/message2/\"\n    && body=\"<meta http-equiv=\\\"refresh\\\" content=\\\"0\\\";url=\\\"../netrep\\\">\"\n- name: Linksys E2100L_header\n  rule: header=\"Linksys E2100L\"\n- name: superv-Meeting_body\n  rule: body=\"id=\\\"ctl00_topcontrol1_lblsitedescription\\\"\"\n- name: Twilight CMS_header\n  rule: header=\"Twilight CMS\"\n- name: TP-LINK Wireless WR841N_header\n  rule: header=\"TP-LINK Wireless WR841N\"\n- name: HUAWEI-USG5150_header\n  rule: header=\"usg5150\"\n- name: KENNA-System_body\n  rule: body=\"href=\\\"/favicon.ico?kenna\\\"\" && body=\"class=\\\"kenna sessions new\\\"\"\n- name: NEO-HomeAP_header\n  rule: header=\"neo-homeap\"\n- name: NETGEAR WNDR3800_header\n  rule: header=\"NETGEAR WNDR3800\"\n- name: 360网神防火墙_header\n  rule: header=\"360网神防火墙\"\n- name: NETGEAR DGND4000_header\n  rule: header=\"NETGEAR DGND4000\"\n- name: Facebook_insights_body\n  rule: body=\"fb:app_id\"\n- name: 微擎 - 公众平台自助引擎_body\n  rule: body=\"微擎 - 公众平台自助引擎\" && body=\"www.w7.cc\" && body=\"login\"\n- name: Afosto_header\n  rule: header=\"Afosto\"\n- name: Hudson_header\n  rule: header=\"X-Hudson\"\n- name: NSFOCUS NTA_header\n  rule: header=\"NSFOCUS NTA\"\n- name: TP-LINK Wireless WR2041+_header\n  rule: header=\"TP-LINK Wireless WR2041+\"\n- name: ChiliProject_header\n  rule: header=\"_chiliproject_session=\" && header=\"_chiliproject_session=\"\n- name: WebPA_body\n  rule: body=\"<td align=\\\"right\\\"><div id=\\\"inst_logo\\\"><img src=\"\n- name: NetApp-Data-ONTAP_header\n  rule: 'header=\"server: data ontap\"'\n- name: 东软NetEye VPN网关系统_header\n  rule: header=\"东软NetEye VPN网关系统\"\n- name: 佳朋智慧缴费平台_header\n  rule: header=\"佳朋智慧缴费平台\"\n- name: ASUS-RT-AC59U_body\n  rule: body=\"class=\\\"prod_madelname\\\">rt-ac59u\"\n- name: Hanwha-XRN-810S_body\n  rule: body=\"$.nvr.model_name=\\\"xrn-810s\\\"\"\n- name: FortiWeb WAF_header\n  rule: header=\"FORTIWAFSID=\"\n- name: tutucms_body\n  rule: body=\"content=\\\"TUTUCMS\" && body=\"Powered by TUTUCMS\" && body=\"TUTUCMS\\\"\"\n- name: TeleWell-EAV510_header\n  rule: header=\"tw-eav510\"\n- name: 辰信景云终端安全管理系统_title\n  rule: title=\"辰信景云终端安全管理系统7.0\"\n- name: JTBC网站内容管理系统_header\n  rule: header=\"JTBC网站内容管理系统\"\n- name: Bytevalue-Intelligent-flow-Control-Router_body\n  rule: body=\"<a href=\\\"http://www.bytevalue.com/\\\" target=\\\"_blank\\\">\"\n- name: Canon-MX420-series_body\n  rule: body=\"nowrap>canon mx420 series</td>\"\n- name: OpenConf_body\n  rule: body=\"powered by <a href=\\\"http://www.openconf.org\"\n- name: OpenConf_header\n  rule: 'header=\"set-cookie: openconf=\" && header=\"OpenConf\"'\n- name: 擎天电子政务_body\n  rule: body=\"App_Themes/1/Style.css\" && body=\"window.location = \\\"homepages/index.aspx\"\n    && body=\"homepages/content_page.aspx\"\n- name: Whir_body\n  rule: body=\"css/css_whir.css\"\n- name: BM-Classifieds_body\n  rule: body=\"<!-- START HEADER TABLE - HOLDS GRAPHIC AND SITE NAME -->\"\n- name: Tictail_header\n  rule: header=\"Tictail\"\n- name: Canon-MG8200-series_body\n  rule: body=\"nowrap>canon mg8200 series</td>\"\n- name: ICALL-CMS_body\n  rule: body=\"var img_obj = document.getelementbyid('showing';\"\n- name: whatsns_header\n  rule: header=\"whatsns\"\n- name: H3C-Magic-R2+Pro_body\n  rule: body=\"var product_type = \\\"r2+pro\\\"\"\n- name: jinqing_body\n  rule: body=\"action=\\\"/j_spring_security_check\"\n- name: YunAnBao-YunXZ_body\n  rule: 'body=\"id=mtokenplugin width=0 height=0 style=\\\"position: absolute;left: 0px;\n    top: 0px\\\"\" && body=\"type=application/x-xtx-axhost\"'\n- name: INDAS InView_header\n  rule: header=\"INDAS InView\"\n- name: TP-LINK Wireless AP WA5210G_header\n  rule: header=\"TP-LINK Wireless AP WA5210G\"\n- name: Infinova-Cameras-and-Surveillance_body\n  rule: body=\"vms.html\"\n- name: Infinova-Cameras-and-Surveillance_header\n  rule: header=\"basic realm=\\\"infinova\"\n- name: 酒店智慧营销IPTV系统_body\n  rule: body=\"xsiptvp\" && body=\"IPTV\"\n- name: KT-Router_header\n  rule: header=\"realm=\\\"test@kt.com\"\n- name: Hanwha-SNP-L6233H_body\n  rule: body=\"var defaultfilename = \\\"snp-l6233h\\\"\"\n- name: EFM-Networks-ipTIME-Q604_body\n  rule: body=\"src =\\\"/images2/login_title.q604.gif\\\"\"\n- name: 优能站长分类目录轻门户(60cms)_body\n  rule: body=\"优能站长分类目录轻门户\" && body=\"60cms\"\n- name: 安财网上报销系统_header\n  rule: header=\"安财网上报销系统\"\n- name: HP System Management_header\n  rule: header=\"HP System Management\"\n- name: FortiNAC_header\n  rule: header=\"FortiNAC\"\n- name: Axis-Cameras-and-Surveillance_body\n  rule: body=\"<meta http-equiv=\\\"refresh\\\" content=\\\"0; url=/view/viewer_index.shtml?id=0\\\"\n    />\" && body=\"content=\\\"axis communications ab\"\n- name: 惠尔顿上网行为管理平台_header\n  rule: header=\"惠尔顿上网行为管理平台\"\n- name: MapGIS Server Manager_icon_hash\n  rule: icon_hash=\"4042817548\"\n- name: D-Link-DIR-620_body\n  rule: body=\"dir-620\" && body=\"d-link russia\" && body=\"class='title'>dir-620\"\n- name: Apache Druid_body\n  rule: body=\"<title>Apache Druid</title>\" && body=\"content=\\\"Apache Druid console\\\"\"\n- name: Apache Druid_header\n  rule: header=\"Apache Druid\"\n- name: Citrix-Access-Gateway_body\n  rule: body=\"href=\\\"/vpn/images/accessgateway.ico\" && body=\"/vpn/images/accessgateway.ico\"\n    && body=\"href=\\\"/vpn/images/accessgateway.ico\" && body=\"class=\\\"citrixreceiverlogoaboutbox\\\"\"\n    && body=\"/vpn/js/gateway_login_view.js?\" && body=\"cloud.ottoworkfroce.eu/vpn/index.html\"\n    && body=\"vpn/js/lsgateway_login_view.js\" && body=\"class=\\\"_ctxstxt_netscalergateway\\\"\"\n    && body=\"receiver/images/common/icon_vpn.ico\" && body=\"href=\\\"/vpn/images/AccessGateway.ico\"\n- name: Starlet_header\n  rule: header=\"Plack::Handler::Starlet\"\n- name: Aircall_header\n  rule: header=\"Aircall\"\n- name: KodiTV_body\n  rule: body=\"title=\\\"kodi library\"\n- name: JGS-Portal_body\n  rule: body=\"Powered by <b>JGS-Portal Version\" && body=\"href=\\\"jgs_portal_box.php?id=\"\n- name: Bigcommerce_header\n  rule: header=\"SHOP_SESSION_TOKEN\"\n- name: Smartbi 大数据分析套件_header\n  rule: header=\"Smartbi 大数据分析套件\"\n- name: iLON-SmartServer_header\n  rule: header=\"windriver\" && header=\"i.lon\" && header=\"WindRiver\" && header=\"i.LON\"\n- name: Landray-OA_header\n  rule: 'header=\"Set-Cookie: isopen=close\"'\n- name: Landray-OA_body\n  rule: 'body=\"lui_login_message_td\" && body=\"蓝凌软件 版权所有\" && body=\"url : Com_Parameter.ResPath+\\\"jsp/clearSsoCookie.jsp\\\"\"'\n- name: SatLink_body\n  rule: body=\"<form id =\\\"statussatellite\"\n- name: Jumpserver堡垒机_header\n  rule: header=\"Jumpserver堡垒机\"\n- name: SurDoc_body\n  rule: body=\"<h1>欢迎使用360书生云盘！</h1>\" && body=\"<p>copyright@2016 pan.surdoc.net all\n    rights</p>\"\n- name: Adcon-Telemetry-Gateway_header\n  rule: header=\"addupi\"\n- name: ASP_header\n  rule: 'header=\"x-powered-by: asp\"'\n- name: 唯德科创 IPEasy 知易通_title\n  rule: title=\"_IPEasy知易通\"\n- name: WeBid_header\n  rule: header=\"set-cookie webid_online=\"\n- name: 华为 MCU_body\n  rule: body=\"McuR5-min.js\" && body=\"MCUType.js\"\n- name: 网神单向光闸_header\n  rule: header=\"网神单向光闸\"\n- name: LINKSYS-DD-WRT_header\n  rule: header=\"LINKSYS-DD-WRT\"\n- name: Pardot_header\n  rule: header=\"Pardot\"\n- name: Nostromo_header\n  rule: header=\"Nostromo\"\n- name: Certificate-management-server_body\n  rule: body=\"name=\\\"spring-security-redirect\\\" value=\\\"/loginbycert\\\"\" && body=\"证书管理服务器\"\n- name: SMA_Sunny_Webbox_header\n  rule: header=\"Server:WebBox-20\"\n- name: PageFly_header\n  rule: header=\"PageFly\"\n- name: Esvon-Classifieds_body\n  rule: body=\"powered by esvon\" && body=\"Powered by Esvon\"\n- name: ZEBRA-140Xi4-203dpi-ZPL_body\n  rule: body=\"ztc 140xi4-203dpi zpl</h1>\"\n- name: mod_auth_pam_header\n  rule: header=\"mod_auth_pam\"\n- name: Webmine_body\n  rule: body=\"Webmin server on\"\n- name: NETGEAR WNDR3700_header\n  rule: header=\"NETGEAR WNDR3700\"\n- name: dlink_header\n  rule: header=\"dlinkrouter\"\n- name: Citrix-Access-Gateway_header\n  rule: header=\"ezisneercsresu=\" && header=\"pwcount\" && header=\"ezisneercsresu=\" &&\n    header=\"Cyms-SecS\"\n- name: TP-LINK MR3020_header\n  rule: header=\"TP-LINK MR3020\"\n- name: Ruckus_body\n  rule: body=\"mon.  Tell me your username\"\n- name: LifeSize-Control_header\n  rule: header=\"lifesizecontrol\"\n- name: 万户 OA_body\n  rule: body=\"defaultroot\" && body=\"Logon!logon.action\" && body=\"domainAccount\"\n- name: SeamlessCMS_header\n  rule: header=\"SeamlessCMS\"\n- name: eMeeting-Online-Dating-Software_body\n  rule: body=\"emeeting dating software\" && body=\"/_emeetingglobals.js\" && body=\"eMeeting\n    Dating Software\" && body=\"/_eMeetingGlobals.js\"\n- name: Haskell_header\n  rule: header=\"Haskell\"\n- name: ikiwiki(ikiwiki cms)_header\n  rule: header=\"ikiwiki\" && header=\"ikiwiki cms\"\n- name: ikiwiki(ikiwiki cms)_body\n  rule: body=\"ikiwiki\" && body=\"ikiwiki cms\"\n- name: D-Link-DIR-110_body\n  rule: body=\"<a href=\\\"http://support.dlink.com\\\" target=\\\"_blank\\\">dir-110\"\n- name: Winmail-Server_header\n  rule: header=\"magicwinmail_default_language\"\n- name: JGI CMS_header\n  rule: header=\"JGI CMS\"\n- name: UrlRewriter.NET_header\n  rule: header=\"urlrewriter.net\" && header=\"UrlRewriter.NET\"\n- name: Octoshape_header\n  rule: header=\"Octoshape\"\n- name: AMI-MegaRAC-SP_body\n  rule: body=\"<modelname>ami megarac sp</modelname>\"\n- name: Theft Deterrent server_header\n  rule: header=\"Theft Deterrent server\"\n- name: Technicolor-TG582n_body\n  rule: body=\"var headertext = 'technicolor&nbsp;tg582n'\" && body=\"var headertext\n    = 'technicolor tg582n'\"\n- name: Tradingeye_body\n  rule: body=\"content=\\\"dpivision.com ltd\\\" />\" && body=\"id=\\\"credits\\\"><a href=\\\"http://www.tradingeye.com/\\\">powered\n    by tradingeye</a>\"\n- name: TRENDnet-Router_header\n  rule: header=\"router-trendnet\"\n- name: TRENDnet-Router_body\n  rule: 'body=\"<meta http-equiv=\\\"content-type\\\"contet=\\\"text/html; cahrset=ks_c_5601-1987\\\">\"\n    && body=\"<link rel=\\\"stylesheet\\\" rev=\\\"stylesheet\\\" href=\\\"ubicom_style.css\\\"\n    type=\\\"text/css\\\" />\" && body=\"trendnet\" && body=\"var model= dev_info.model\" &&\n    body=\"modlename: misc.misc[0].model\"'\n- name: SmartOA_body\n  rule: body=\"content/images/login_background.jpg\" && body=\"href=\\\"http://www.smartoa.com.cn/download/smartoa.apk\\\">安卓客户端</a>\"\n- name: Preamsolutions-Inspection-and-Modification-Information-Platform_body\n  rule: body=\"action=\\\"/gqjx/loginmgr.do?method=dologin\"\n- name: Springer_body\n  rule: body=\"src=\\\"//static.springer.com/\"\n- name: SmartOA_header\n  rule: header=\"smartoa\"\n- name: Captch Me_header\n  rule: header=\"Captch Me\"\n- name: Linksys WAG200G_header\n  rule: header=\"Linksys WAG200G\"\n- name: NETGEAR WNDR4700_header\n  rule: header=\"NETGEAR WNDR4700\"\n- name: 科迈 RAS_body\n  rule: body=\"科迈RAS\" && body=\"CmxGoUrl.php\"\n- name: f5 Big IP_icon_hash\n  rule: icon_hash=\"3959724757\"\n- name: AMI-MegaRAC-SPX_body\n  rule: body=\"<modelname>ami megarac spx</modelname>\"\n- name: Atmail_body\n  rule: body=\"powered by atmail\" && body=\"fixshowmail\" && body=\"/index.php/mail/auth/processlogin\"\n    && body=\"<input id=\\\"mailserverinput\" && body=\"Powered by Atmail\" && body=\"FixShowMail\"\n- name: Atmail_header\n  rule: header=\"atmail6\" && header=\"atmail6\"\n- name: boxiao-System_body\n  rule: body=\"var bxnstaticresroot='/bxn-static-resource/resources'\"\n- name: DELL-PowerEdge-1950_body\n  rule: body=\"poweredge--1950/cgi-bin/sicweb.exe\"\n- name: Cisco-ASDM_body\n  rule: body=\"launcher_link\\\">install asdm launcher\"\n- name: CISCO-M660_body\n  rule: body=\"alt=\\\"cisco m660\\\"\"\n- name: Liquid Web_header\n  rule: header=\"Liquid Web\"\n- name: 易优CMS(EyouCms)_header\n  rule: header=\"易优CMS\" && header=\"EyouCms\"\n- name: 易优CMS(EyouCms)_body\n  rule: body=\"易优CMS\" && body=\"EyouCms\"\n- name: TRENDnet-TV-IP310PI_header\n  rule: header=\"realm=\\\"tv-ip310pi\"\n- name: Zend Framework_header\n  rule: header=\"Zend Framework\" && header=\"ZEND=\"\n- name: Carel PlantVisor_header\n  rule: header=\"Carel PlantVisor\"\n- name: 网康互联网控制网关_header\n  rule: header=\"网康互联网控制网关\"\n- name: InvisionPowerBoard_body\n  rule: body=\"Powered by <a href=\\\"http://www.invisionboard.com\"\n- name: ModLogAn_body\n  rule: body=\"modlogan.css\" && body=\">modlogan\"\n- name: Shopatron_header\n  rule: header=\"Shopatron\"\n- name: Phabricator_header\n  rule: header=\"phsid\" && header=\"phsid\"\n- name: FIRERP-SOFT_body\n  rule: body=\"images/bt/bt_login_b.gif\"\n- name: DSCMS_header\n  rule: header=\"DSCMS\"\n- name: SmokePing_body\n  rule: body=\"<a href=\\\"http://oss.oetiker.ch/smokeping/counter.cgi/\" && body=\"<tr><td\n    class=\\\"menuitem\\\" colspan=\\\"2\\\">&nbsp;-&nbsp;<a class=\\\"menulink\\\" href=\\\"?target=\"\n- name: TeLinXinXi-527meeting_body\n  rule: body=\"527meeting\" && body=\" content=\\\"轻会议\\\"\"\n- name: TP_LINK-SMB-TL-ER6520G_header\n  rule: 'header=\"server: tp-link smb tl-er6520g\"'\n- name: jCore_body\n  rule: body=\"JCORE_VERSION =\"\n- name: Cisco TANDBERG Codian MCU_header\n  rule: header=\"Cisco TANDBERG Codian MCU\"\n- name: Phabricator_body\n  rule: body=\"phabricator-application-launch-container\" && body=\"res/phabricator\"\n    && body=\"phabricator-application-launch-container\" && body=\"res/phabricator\"\n- name: MaxCMS(马克斯CMS)_body\n  rule: body=\"MaxCMS\" && body=\"马克斯CMS\"\n- name: Citrix Marshal West_header\n  rule: header=\"Marshal West\"\n- name: Citrix Marshal West_body\n  rule: body=\"Marshal West\"\n- name: MiiNePort_header\n  rule: header=\"MiiNePort\"\n- name: Hanwha-SRN-K3570S_body\n  rule: body=\"$.nvr.model_name=\\\"srn-k3570s\\\"\"\n- name: Atlassian Jira_header\n  rule: header=\"Atlassian Jira\"\n- name: 锐捷 SSL VPN_icon_hash\n  rule: icon_hash=\"1415017503\"\n- name: Alcatel_Lucent-OS6560-24X4_body\n  rule: body=\"<span>device os6560-24x4\"\n- name: CherryPy WSGI Server_header\n  rule: header=\"CherryPy WSGI Server\"\n- name: iGENUS邮件系统_body\n  rule: body=\"Copyright by<A HREF=\\\"http://www.igenus.org\"\n- name: B&R Web Server_header\n  rule: header=\"B&R Web Server\"\n- name: 3Com-NJ2000_body\n  rule: body=\"content=\\\"3com intellijack nj2000\\\"\"\n- name: Kirona Open Street Map Server_header\n  rule: header=\"Kirona Open Street Map Server\"\n- name: Canon-MP640-series_body\n  rule: body=\"nowrap>canon mp640 series</td>\"\n- name: Hycus-CMS_body\n  rule: body=\"content=\\\"Hycus\" && body=\"Powered By <a href=\\\"http://www.hycus.com\"\n- name: NETGEAR WNDR3700v5_header\n  rule: header=\"NETGEAR WNDR3700v5\"\n- name: DV-Cart_body\n  rule: body=\"class=\\\"KT_tngtable\"\n- name: ASUS-RT-N10U_header\n  rule: header=\"asus rt-n10u\" && header=\"asus_rt-n10u\"\n- name: Yiqi-CMS_body\n  rule: body=\"content=\\\"yiqicms\"\n- name: FortiMail_header\n  rule: header=\"FortiMail\"\n- name: IBM Lotus iNotes_header\n  rule: header=\"IBM Lotus iNotes\"\n- name: DELL-PowerEdge-R420_body\n  rule: body=\"id=\\\"serverinfo\\\"> poweredge r420\"\n- name: Bluetrum-CDN_header\n  rule: header=\"powered-by-chinacache\"\n- name: Koala Framework_header\n  rule: header=\"Koala Framework\"\n- name: Prebid_header\n  rule: header=\"Prebid\"\n- name: DLink-DI-624_header\n  rule: header=\"realm=\\\"di-624\"\n- name: HEADING-E-Commerce-Platform_body\n  rule: body=\"window.location.replace('/bin/hdnet.dll/login'\"\n- name: Yuneasy-IPCalling_body\n  rule: body=\"云翌ip呼叫中心</span>\"\n- name: Alcad IPTV Web_header\n  rule: header=\"Alcad IPTV Web\"\n- name: Campus-card-management-system_body\n  rule: body=\"harbin synjones electronic\" && body=\"document.formpostds.action=\\\"xxsearch.action\"\n    && body=\"/shouyeziti.css\"\n- name: Future Shop_header\n  rule: header=\"Future Shop\"\n- name: SiteCatalyst_header\n  rule: header=\"SiteCatalyst\"\n- name: Fast-Router_body\n  rule: body=\"<a href=\\\"http://www.fastcom.com.cn\\\"><img src=\\\"../img/login/logo.gif\"\n- name: WebRay-WAF_header\n  rule: 'header=\"rayengine\" && header=\"drivedby: raysrv\"'\n- name: 东胜物流软件_body\n  rule: body=\"js/dhtmlxcombo_whp.js\" && body=\"login.aspx\"\n- name: Puppet Node Manager_header\n  rule: header=\"Puppet Node Manager\"\n- name: LINKSYS WRT270N_header\n  rule: header=\"LINKSYS WRT270N\"\n- name: MaxCMS(马克斯CMS)_header\n  rule: header=\"MaxCMS\" && header=\"马克斯CMS\"\n- name: Pandora FMS_header\n  rule: header=\"Pandora FMS\"\n- name: Cisco-Systems-WS-Switch_body\n  rule: body=\"<h2>accessing cisco ws-\"\n- name: Hanwha-QRN-810_body\n  rule: body=\"$.nvr.model_name=\\\"qrn-810\\\"\"\n- name: 鸿运主动安全云平台_icon_hash\n  rule: icon_hash=\"3560704253\"\n- name: PHP-Server-Monitor_body\n  rule: body=\"target=\\\"_blank\\\">php server monitor\" && body=\"powered by <a href=\\\"http://www.phpservermonitor.org/\"\n- name: TP-LINK Wireless WR1043ND_header\n  rule: header=\"TP-LINK Wireless WR1043ND\"\n- name: SunOS_header\n  rule: header=\"SunOS\"\n- name: My Yii_body\n  rule: body=\"<a href=\\\"http://www.yiiframework.com/\\\" rel=\\\"external\\\">Yii\"\n- name: Gauges_header\n  rule: header=\"Gauges\"\n- name: PHPSHE商城_header\n  rule: header=\"PHPSHE商城\"\n- name: Domoticz (Home Automation)_icon_hash\n  rule: icon_hash=\"90680708\"\n- name: EasySCP_body\n  rule: body=\"content='easyscp\" && body=\"/css/easyscp.login.css\"\n- name: EasySCP_header\n  rule: header=\"easyscp=\" && header=\"EasySCP\"\n- name: Yonyou-U8-cloud_body\n  rule: body=\"开启u8 cloud云端之旅\"\n- name: CuuMall_body\n  rule: body=\"Power by CuuMall\"\n- name: JUNIPer-srx3600_body\n  rule: body=\"class=\\\"jweb-title uppercase\\\"> - srx3600\"\n- name: DovetailWRP_header\n  rule: header=\"DovetailWRP\"\n- name: PROLiNK-Router_body\n  rule: body=\"<! copyright (c realtek semiconductor corp.\" && body=\"tw-eav510\" &&\n    body=\"<frame src=\\\"attention.htm\\\" name=\\\"attention\\\" frameborder=\"\n- name: MinyooCMS_header\n  rule: header=\"MinyooCMS\"\n- name: Netflix_icon_hash\n  rule: icon_hash=\"902521196\"\n- name: 聚水潭SaaS协同平台_header\n  rule: header=\"聚水潭SaaS协同平台\"\n- name: H3C-BR104H_header\n  rule: header=\"basic realm=\\\"h3c br104h\\\"\"\n- name: Zipkin_body\n  rule: body=\"<base href=\\\"/zipkin/\\\">\"\n- name: Zipkin_header\n  rule: header=\"Zipkin\"\n- name: SyncThru Web Service (Printers)_icon_hash\n  rule: icon_hash=\"1483097076\"\n- name: jquery官网CDN_header\n  rule: header=\"code.jquery.com\"\n- name: Weidun_header\n  rule: 'header=\"firewall: www.weidun.com.cn\"'\n- name: Jaws_header\n  rule: header=\"Jaws\"\n- name: INSTAR Full-HD IP-Camera_icon_hash\n  rule: icon_hash=\"-1748763891\"\n- name: Deluge Web UI_icon_hash\n  rule: icon_hash=\"-1589842876\"\n- name: ASUS-GT-AC2900_body\n  rule: body=\"document.getelementsbyclassname(\\\"model-name\\\"[0].innerhtml = \\\"gt-ac2900\\\"\"\n- name: BASE-Security_body\n  rule: body=\"<!-- basic analysis and security engine (base -->\" && body=\"mailto:base@secureideas.net\"\n- name: LarryMS_header\n  rule: header=\"LarryMS\"\n- name: CoDeSys-Web-Visualization_header\n  rule: header=\"WAGO_Webs\"\n- name: Open Web Analytics_header\n  rule: header=\"Open Web Analytics\"\n- name: SlideShowPro-Director_body\n  rule: body=\"<div id=\\\"simple-footer\\\"><span>slideshowpro director\" && body=\"</div>\n    <!--close login-container--></body>\"\n- name: MDaemon_body\n  rule: body=\"/WorldClient.dll?View=Main\"\n- name: ATEN SN0116 HTTP Server_header\n  rule: header=\"ATEN SN0116 HTTP Server\"\n- name: zeroshell_header\n  rule: header=\"zeroshell\"\n- name: JFrog_body\n  rule: body=\"src=/ui/img/jfrog\" && body=\"<meta http-equiv=\\\"refresh\\\" content=\\\"0;URL=/artifactory\\\">\"\n    && body=\"Artifactory is a binaries repository manager\"\n- name: whfst-CMS_body\n  rule: body=\"武汉富思特\"\n- name: JFrog_header\n  rule: 'header=\"Location: /artifactory/\"'\n- name: 腾讯CDN_header\n  rule: header=\"腾讯CDN\"\n- name: DELL-N4064F_body\n  rule: body=\"class=\\\"login_server_default\\\">n4064f\"\n- name: 中海达 VNet系列 WEB管理系统_header\n  rule: header=\"中海达 VNet系列 WEB管理系统\"\n- name: Buffalo-TeraStation_body\n  rule: body=\"value=\\\"view terastation manual\" && body=\"value=\\\"terastation handbuch\n    lesen\"\n- name: Homeland_header\n  rule: header=\"Homeland\"\n- name: AppCMS_body\n  rule: body=\"powerd by appcms\"\n- name: NETGEAR DG834GV_header\n  rule: header=\"NETGEAR DG834GV\"\n- name: nghttpx - HTTP/2 proxy_header\n  rule: header=\"nghttpx - HTTP/2 proxy\"\n- name: SSYCMS_header\n  rule: header=\"SSYCMS\"\n- name: topsec-TopAudit_body\n  rule: body=\"topaudit\" && body=\"ta-w 登录系统\"\n- name: CISCO-M690_body\n  rule: body=\"alt=\\\"cisco m690\\\"\"\n- name: HuaWei-anyoffice_body\n  rule: body=\"onclick=\\\"changelanguage\" && body=\"cancelchangepwbtn\" && body=\"jvform\\\"\n    action=\\\"admin/business/login\" && body=\"src=\\\"assets/conn-service/admin/\"\n- name: IP-COM-Employee-Internet-Management_body\n  rule: body=\"assets/img/ip-com-logo.png\" && body=\"parent.location.href=\\\"/login\\\"\"\n- name: SCADA PLC_body\n  rule: body=\"/images/rockcolor.gif\" && body=\"/ralogo.gif\" && body=\"Ethernet Processor\"\n- name: IP-COM-Employee-Internet-Management_header\n  rule: header=\"ugwsessionid=\"\n- name: Netgear-WNR3500l_header\n  rule: header=\"Netgear-WNR3500l\"\n- name: F2Blog_header\n  rule: header=\"F2Blog\"\n- name: NETGEAR-GS748Tv5_body\n  rule: body=\"gs748tv5image spacer50percent topalign righthalign\"\n- name: GentleCMS_header\n  rule: header=\"GentleCMS\"\n- name: Uniform-Server_body\n  rule: body=\"<a href=\\\"http://www.uniformserver.com\\\">\" && body=\"<meta name=\\\"description\\\"\n    content=\\\"the uniform server 8.1.0-coral.\\\" />\" && body=\"<div id=\\\"divider\\\">developed\n    by <a href=\\\"http://www.uniformserver.com/\\\">the uniform server development team</a></div>\"\n- name: PowerMTA_body\n  rule: body=\"<html><body>access denied.  please consult the http-access directive\n    in the user's guide for more information.</body>\"\n- name: MyBlogLog_header\n  rule: header=\"MyBlogLog\"\n- name: SmartCommunityIntegratedManagementCloudPlatform_body\n  rule: body=\"class=\\\"container_huanlegendtext\\\"\"\n- name: 启明天清WAG_header\n  rule: header=\"启明天清WAG\"\n- name: YUI Doc_header\n  rule: header=\"YUI Doc\"\n- name: DLink-DI-824VUP_header\n  rule: header=\"realm=\\\"di-824vup\"\n- name: Yonyou-GRP-U8_body\n  rule: body=\"window.location.replace(\\\"login.jsp?up=1\\\"\"\n- name: PowerMTA_header\n  rule: header=\"basic realm=\\\"powermta\" && header=\"http/1.0 403\" && header=\"PowerMTA\"\n- name: 亿赛通(DLP)_body\n  rule: body=\"CDGServer3\" && body=\"welcomebg.jpg\"\n- name: cirrusgate-System_body\n  rule: body=\"window.location.href = \\\"/dlp/admin/user/login.action\\\"\"\n- name: Hanmasoft_body\n  rule: body=\"alt=\\\"汉码软件logo\" && body=\"content=\\\"汉码软件\"\n- name: Hanwha-SND-K2013R_body\n  rule: body=\"var defaultfilename = \\\"snd-k2013r\\\"\"\n- name: Secworld-Firewall_body\n  rule: body=\"css/lsec/login.css\" && body=\"src=\\\"?g=login_captcha\" && body=\"content=\\\"上海斐讯数据通信技术有限公司\\\"\"\n    && body=\"360网神防火墙系统nsg\" && body=\"var __permission = \\\"360网神防火墙系统\\\"\" && body=\"var\n    __permission = \\\"网神防火墙\\\"\" && body=\"var __permission = \\\"网神secgate3600 防火墙\\\"\"\n- name: mod_jk_header\n  rule: header=\"mod_jk\"\n- name: Docusaurus_header\n  rule: header=\"Docusaurus\"\n- name: globalsign_cert_body\n  rule: body=\"//seal.globalsign.com/SiteSeal\"\n- name: SuperMap iServer Web Manager_icon_hash\n  rule: icon_hash=\"1740191553\"\n- name: 中兴 ZSRV2路由器Web管理系统_header\n  rule: header=\"中兴 ZSRV2路由器Web管理系统\"\n- name: Pi Star_icon_hash\n  rule: icon_hash=\"432733105\"\n- name: Strikingly_header\n  rule: header=\"Strikingly\"\n- name: DELPHI XMLRPC SERVER_header\n  rule: header=\"DELPHI XMLRPC SERVER\"\n- name: zmodo-camera_body\n  rule: body=\"top.frames.frmresource.location = getxmlurl\" && body=\"name=\\\"mainframe\\\"\n    frameborder=\\\"0\\\"  src=\\\"play.html\\\"\"\n- name: Nuance-SafeCom_body\n  rule: body=\"safecom mobile print\"\n- name: Font Awesome_header\n  rule: header=\"Font Awesome\"\n- name: oExam_body\n  rule: body=\"}else if(type===\\\"examcard\\\"{\"\n- name: 校园卡管理系统_body\n  rule: body=\"Harbin synjones electronic\" && body=\"document.FormPostds.action=\\\"xxsearch.action\"\n    && body=\"/shouyeziti.css\"\n- name: Leanote-Notepad_body\n  rule: body=\"name=\\\"author\\\" content=\\\"leanote,蚂蚁笔记\\\"\"\n- name: WAT-System_body\n  rule: body=\"生产经营计划统计一体化管理信息系统安装程序\"\n- name: 锐捷 RG-EW1200G_body\n  rule: body=\"锐捷\" && body=\"/static/img/title.ico\" && body=\"/js/app\"\n- name: 微窗CMS(Vwins)_body\n  rule: body=\"微窗CMS\" && body=\"Vwins\"\n- name: 万通cms_body\n  rule: body=\"万通cms\"\n- name: H3C ER8300G2-X_body\n  rule: body=\"H3C\" && body=\"vld.bmp\" && body=\"dis_login\" && body=\"ER8300G2\"\n- name: Canon-MX430-series_body\n  rule: body=\"nowrap>canon mx430 series</td>\"\n- name: LG-75UK6570AUA_body\n  rule: body=\"<modelnumber>75uk6570aua</modelnumber>\"\n- name: MEiS-medicine_body\n  rule: body=\"<h1 class=\\\"logo\\\">欢迎使用 <span class=\\\"logo_icon\\\">meis</span> 医疗信息管理系统</h1>\"\n- name: 鸿运主动安全云平台_body\n  rule: body=\"./open/webApi.html\"\n- name: irainone-ParkingSystem_body\n  rule: body=\"src=\\\"/static/img/allstar.png\\\"\"\n- name: moosefs_body\n  rule: body=\"mfs.cgi\" && body=\"under-goal files\"\n- name: BackupPC_body\n  rule: body=\"/backuppc/image/logo.gif\" && body=\"/index.cgi?action=editconfig\"\n- name: 海洋CMS_body\n  rule: body=\"Powered by SeaCms\" && body=\"content=\\\"seacms\"\n- name: BackupPC_header\n  rule: header=\"backuppc_admin\" && header=\"BackupPC_Admin\" && header=\"Backup\"\n- name: concrete5_header\n  rule: header=\"CONCRETE5\"\n- name: Epoint-OA_body\n  rule: body=\"SourceControl=\\\"EpointCommon\\\" ></script>\" && body=\"<script>window.location.href='../netoffice6';</script>\"\n- name: DOClever_body\n  rule: body=\"@click.prevent=\\\"login\\\" :loading=\\\"loginpending\\\"\"\n- name: Firehose_SERVICE_MONITORING_body\n  rule: body=\"<h1>firehose_service_monitoring status</h1>\"\n- name: Founder-All-media-editing-system_body\n  rule: body=\"/newsedit/newsedit/css/login_1.css\"\n- name: Hintsoft-Pubwin2015_body\n  rule: body=\"images/newlogin_01.jpg\"\n- name: Planet WNRT-627_header\n  rule: header=\"WNRT-627\"\n- name: 我爱考勤 云平台_header\n  rule: header=\"我爱考勤 云平台\"\n- name: 任我行电商_body\n  rule: body=\"content=\\\"366EC\"\n- name: JeeSpringCloud_icon_hash\n  rule: icon_hash=\"2446959922\"\n- name: wisyCMS_header\n  rule: header=\"wisyCMS\"\n- name: JeeSpringCloud_header\n  rule: header=\"com.jeespring.session.id\"\n- name: DOClever_header\n  rule: header=\"DOClever\"\n- name: NETGEAR-R8000_header\n  rule: header=\"netgear r8000\"\n- name: 3KITS-CMS_body\n  rule: body=\"href=\\\"http://www.3kits.com\\\"\"\n- name: 富通天下外贸ERP_title\n  rule: title=\"用户登录_富通天下外贸ERP\"\n- name: OpenAM_body\n  rule: body=\"action=\\\"/openam/ui/login\\\"\"\n- name: Schneider-PowerLogic-ION_header\n  rule: header=\"allegro-software-rompager\" && header=\"6200 ion\"\n- name: darkstat_header\n  rule: 'header=\"server: darkstat\" && header=\"darkstat\"'\n- name: 红海螺CMS_body\n  rule: body=\"红海螺CMS\"\n- name: Redmi 路由器_body\n  rule: body=\"<title>小米路由器</title>\" && body=\"<title>Redmi路由器</title>\"\n- name: Eyou-Mail-system_body\n  rule: body=\"cr\\\">eyoumail\" && body=\"content=\\\"亿邮电子邮件系统\" && body=\"/tpl/login/user/images/dbg.png\"\n    && body=\"var loginssl = document.form_login.login_ssl.value;\"\n- name: Eyou-Mail-system_header\n  rule: header=\"eyouws\"\n- name: Panasonic-Network-Camera_body\n  rule: body=\"multicameraframe?mode=motion&language\" && body=\"cgitagmenu?page=top&language=\"\n    && body=\"src=\\\"cgitagmenu?page=\" && body=\"var svideoinput=\\\"pal\" && body=\"content=\\\"(c\n    panasonic syetem networks co.,ltd.\" && body=\"/js/cmsgtab.js\" && body=\"src=\\\"barfoot.html\\\"\"\n- name: GoStats_header\n  rule: header=\"GoStats\"\n- name: PHPSHE_B2C商城系统_body\n  rule: body=\"Powered by phpshe\" && body=\"content=\\\"phpshe\"\n- name: 科来RAS_body\n  rule: body=\"科来软件 版权所有\" && body=\"i18ninit.min.js\"\n- name: DUgallery_body\n  rule: body=\"Powered by DUportal\" && body=\"DUgallery\"\n- name: TOTO_LINK-C100RT_body\n  rule: body=\"src =\\\"/images/login_back_c100rt.gif\\\"\"\n- name: DIYWAP_body\n  rule: body=\"web980\" && body=\"bannerNum\"\n- name: CreateLive-Cms_header\n  rule: header=\"AspooKill=kill=\"\n"
  },
  {
    "path": "backend/fingerprints/ehole.json",
    "content": "{\r\n\t\"fingerprint\": [{\r\n\t\t\"cms\": \"致远OA\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"/seeyon/USER-DATA/IMAGES/LOGIN/login.gif\"]\r\n\t}, {\r\n\t\t\"cms\": \"致远OA\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"/seeyon/common/\"]\r\n\t}, {\r\n\t\t\"cms\": \"通用企业管理软件\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"/cwbase/web/Login.aspx\"]\r\n\t}, {\r\n\t\t\"cms\": \"致远OA M3 Server\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"title\",\r\n\t\t\"keyword\": [\"M3 Server\"]\r\n\t}, {\r\n\t\t\"cms\": \"iDS联网数字标牌管理系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"title\",\r\n\t\t\"keyword\": [\"iDS联网数字标牌管理系统\"]\r\n\t}, {\r\n\t\t\"cms\": \"Nexus Repository Manager\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"title\",\r\n\t\t\"keyword\": [\"Nexus Repository Manager\"]\r\n\t}, {\r\n\t\t\"cms\": \"网动统一通信平台(Active UC)\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"title\",\r\n\t\t\"keyword\": [\"网动统一通信平台(Active UC)\"]\r\n\t}, {\r\n\t\t\"cms\": \"禅道 zentao\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"title\",\r\n\t\t\"keyword\": [\"Welcome to use zentao\"]\r\n\t}, {\r\n\t\t\"cms\": \"快云服务器小助手\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"title\",\r\n\t\t\"keyword\": [\"快云服务器助手\"]\r\n\t}, {\r\n\t\t\"cms\": \"禅道 zentao\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"title\",\r\n\t\t\"keyword\": [\"Welcome to zentao\"]\r\n\t}, {\r\n\t\t\"cms\": \"富通天下外贸ERP\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"title\",\r\n\t\t\"keyword\": [\"用户登录_富通天下外贸ERP\"]\r\n\t}, {\r\n\t\t\"cms\": \"海翔D8药业云平台\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"title\",\r\n\t\t\"keyword\": [\"登录海翔\"]\r\n\t}, {\r\n\t\t\"cms\": \"Kibana\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"title\",\r\n\t\t\"keyword\": [\"Kibana\"]\r\n\t}, {\r\n\t\t\"cms\": \"永中在线编辑软件系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"Web Office\",\"img/eio.png\"]\r\n\t}, {\r\n\t\t\"cms\": \"南方数码交易一体化系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"/SouthUIContent/themes/easydropdown.css\"]\r\n\t}, {\r\n\t\t\"cms\": \"朗新天霁人力资源管理系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"hrsoft.com.cn\",\"chkLogindiv\",\"CustStyle\"]\r\n\t}, {\r\n\t\t\"cms\": \"科荣 AIO 运营管理系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"style1/css/ListRange.css\",\"主账套\",\"login.jsp\"]\r\n\t}, {\r\n\t\t\"cms\": \"联达动力医院综合办公管理系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"login.aspx?Method=AJAX&UserName=\",\"Login_Return_XML.aspx\"]\r\n\t}, {\r\n\t\t\"cms\": \"中农信达三资云平台\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"技术支持：北京中农信达信息技术有限公司\"]\r\n\t}, {\r\n\t\t\"cms\": \"电子申请客户端管理系统(EAC)\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"script/css/gwssi.css\"]\r\n\t}, {\r\n\t\t\"cms\": \"青纺联物联查询平台\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"青纺联物联查询平台\",\"Themes/default/login.css\"]\r\n\t}, {\r\n\t\t\"cms\": \"致梦科技-管家婆物联通\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"HtmlPages/Vue/vue.js\",\"GetLoginValidate\"]\r\n\t}, {\r\n\t\t\"cms\": \"广联达 Glodon\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"/ConsoleCommon/Content/weebox.css\",\"广联达\"]\r\n\t}, {\r\n\t\t\"cms\": \"任我行 CRM\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"/Handlers/IdentifyingCode.ashx\"]\r\n\t}, {\r\n\t\t\"cms\": \"广联达 广讯通\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"gtp.standard\",\"JS/gxtAutoLogin.js\"]\r\n\t}, {\r\n\t\t\"cms\": \"智能表综合管理系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"js/jsCore.js\",\"Ajax_Code/Login.ashx\",\"login.css\"]\r\n\t}, {\r\n\t\t\"cms\": \"科德电子智慧水务平台\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"山东科德电子有限公司\",\"J_LoginSub\"]\r\n\t}, {\r\n\t\t\"cms\": \"秦川燃气综合管理系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"系统登录\",\"res/icon/key.png\",\"login\"]\r\n\t}, {\r\n\t\t\"cms\": \"东胜物流软件\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"js/dhtmlxcombo_whp.js\",\"login.aspx\"]\r\n\t}, {\r\n\t\t\"cms\": \"九思 OA 协同办公系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"/jsoa/login.jsp\"]\r\n\t}, {\r\n\t\t\"cms\": \"润申信息企业标准化管理系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"润申信息\",\"企业标准化管理系统\",\"loginForm\"]\r\n\t}, {\r\n\t\t\"cms\": \"银达汇智智慧综合管理平台\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"福州银达云创信息科技有限公司\",\"miniui/crypto/CodeManage.js\"]\r\n\t}, {\r\n\t\t\"cms\": \"同鑫T9eHR信息化管理系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"T9eHR-iconfont\",\"Authentication/Login\"]\r\n\t}, {\r\n\t\t\"cms\": \"NortekControlLineareMerge\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"img/emerge.ico\",\"login_pw\"]\r\n\t}, {\r\n\t\t\"cms\": \"致远OA M1 Server\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"title\",\r\n\t\t\"keyword\": [\"M1-Server\"]\r\n\t}, {\r\n\t\t\"cms\": \"顶讯科技-易宝OA系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"title\",\r\n\t\t\"keyword\": [\"欢迎登录易宝OA系统\"]\r\n\t}, {\r\n\t\t\"cms\": \"惠商+管理系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"title\",\r\n\t\t\"keyword\": [\"惠商+管理系统\"]\r\n\t}, {\r\n\t\t\"cms\": \"红帆-ioffice OA\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"title\",\r\n\t\t\"keyword\": [\"iOffice.net\"]\r\n\t}, {\r\n\t\t\"cms\": \"管家婆全渠道业务同步中心\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"title\",\r\n\t\t\"keyword\": [\"管家婆全渠道业务同步中心\"]\r\n\t}, {\r\n\t\t\"cms\": \"Spring env\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"servletContextInitParams\"]\r\n\t}, {\r\n\t\t\"cms\": \"微三云管理系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"WSY_logo\",\"管理系统 MANAGEMENT SYSTEM\"]\r\n\t}, {\r\n\t\t\"cms\": \"日志易\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"auth/passwordReset\",\"yw-login-\",\"yw-login-logo\"]\r\n\t}, {\r\n\t\t\"cms\": \"思迪数据池管理平台\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"Ajax/Login\",\"思迪\",\"canvas\"]\r\n\t}, {\r\n\t\t\"cms\": \"科迈 RAS\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"科迈RAS\",\"CmxGoUrl.php\"]\r\n\t}, {\r\n\t\t\"cms\": \"Spring env\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"logback\"]\r\n\t}, {\r\n\t\t\"cms\": \"Weblogic\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"Error 404--Not Found\"]\r\n\t}, {\r\n\t\t\"cms\": \"Weblogic\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"Error 403--\"]\r\n\t}, {\r\n\t\t\"cms\": \"Weblogic\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"/console/framework/skins/wlsconsole/images/login_WebLogic_branding.png\"]\r\n\t}, {\r\n\t\t\"cms\": \"TWCMS\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"href=\\\"/twcms/theme/default/css/global.css\"]\r\n\t}, {\r\n\t\t\"cms\": \"Weblogic\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"Welcome to Weblogic Application Server\"]\r\n\t}, {\r\n\t\t\"cms\": \"Weblogic\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"<i>Hypertext Transfer Protocol -- HTTP/1.1</i>\"]\r\n\t}, {\r\n\t\t\"cms\": \"Sangfor SSL VPN\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"/por/login_psw.csp\"]\r\n\t}, {\r\n\t\t\"cms\": \"Sangfor SSL VPN\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"loginPageSP/loginPrivacy.js\"]\r\n\t}, {\r\n\t\t\"cms\": \"e-mobile\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"weaver,e-mobile\"]\r\n\t}, {\r\n\t\t\"cms\": \"ecology\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"header\",\r\n\t\t\"keyword\": [\"ecology_JSessionid\"]\r\n\t}, {\r\n\t\t\"cms\": \"天融信VPN设备\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"header\",\r\n\t\t\"keyword\": [\"topsecsvportalname\"]\r\n\t}, {\r\n\t\t\"cms\": \"PbootCMS\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"header\",\r\n\t\t\"keyword\": [\"PbootSystem\"]\r\n\t}, {\r\n\t\t\"cms\": \"启明某VPN设备\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"cover_admin.css\",\"SSLVPN LOGIN\"]\r\n\t}, {\r\n\t\t\"cms\": \"天玥运维安全网关\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"css/fw/full.css\",\"js/p/login.js\",\"login\"]\r\n\t}, {\r\n\t\t\"cms\": \"TP-LINK 产品\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"header\",\r\n\t\t\"keyword\": [\"TP-LINK\"]\r\n\t}, {\r\n\t\t\"cms\": \"Influxdb\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"header\",\r\n\t\t\"keyword\": [\"X-Influxdb\"]\r\n\t}, {\r\n\t\t\"cms\": \"微宏 OA\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"wh/servlet/MainServer\"]\r\n\t}, {\r\n\t\t\"cms\": \"Shiro\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"header\",\r\n\t\t\"keyword\": [\"rememberMe=\"]\r\n\t}, {\r\n\t\t\"cms\": \"Dreamer CMS-Shiro\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"header\",\r\n\t\t\"keyword\": [\"dreamer-\"]\r\n\t}, {\r\n\t\t\"cms\": \"Dreamer CMS\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-748565678\"]\r\n\t}, {\r\n\t\t\"cms\": \"慧星自来水营业管理信息系统\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1704826498\"]\r\n\t}, {\r\n\t\t\"cms\": \"Bonobo Git Server\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-219625874\"]\r\n\t}, {\r\n\t\t\"cms\": \"晶奇科技救助管理系统\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1185226132\"]\r\n\t}, {\r\n\t\t\"cms\": \"用友BIP 数据应用服务\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1183274548\"]\r\n\t}, {\r\n\t\t\"cms\": \"流量通 流量平台\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"325583172\"]\r\n\t}, {\r\n\t\t\"cms\": \"北京朗新天霁人力资源系统\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1143915194\"]\r\n\t}, {\r\n\t\t\"cms\": \"护卫神·主机大师\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1188645141\"]\r\n\t}, {\r\n\t\t\"cms\": \"友加畅捷U+财会通\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"2049187099\"]\r\n\t}, {\r\n\t\t\"cms\": \"万户ezOFFICE\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1827521324\"]\r\n\t}, {\r\n\t\t\"cms\": \"信锐物联平台\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"147973611\"]\r\n\t}, {\r\n\t\t\"cms\": \"WiseGrid慧敏应用交付网关\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"910523681\"]\r\n\t}, {\r\n\t\t\"cms\": \"Dreamer CMS\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"header\",\r\n\t\t\"keyword\": [\"dreamer-cms\"]\r\n\t}, {\r\n\t\t\"cms\": \"Shiro\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"header\",\r\n\t\t\"keyword\": [\"=deleteMe\"]\r\n\t}, {\r\n\t\t\"cms\": \"重庆佰鼎-佰鼎OA\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"default.aspx\",\"Style/Style.css\",\"Skin2017\",\"TxtUserPwd\"]\r\n\t}, {\r\n\t\t\"cms\": \"PbootCMS\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"header\",\r\n\t\t\"keyword\": [\"PbootCMS\"]\r\n\t}, {\r\n\t\t\"cms\": \"泛微云桥 e-Bridge\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"wx.weaver\"]\r\n\t}, {\r\n\t\t\"cms\": \"泛微 OA\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1578525679\"]\r\n\t}, {\r\n\t\t\"cms\": \"泛微云桥 e-Bridge\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"e-Bridge\"]\r\n\t}, {\r\n\t\t\"cms\": \"Swagger UI\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"Swagger UI\"]\r\n\t}, {\r\n\t\t\"cms\": \"Ruijie\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"4008 111 000\"]\r\n\t}, {\r\n\t\t\"cms\": \"Huawei SMC\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"Script/SmcScript.js?version=\"]\r\n\t}, {\r\n\t\t\"cms\": \"H3C Router\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"/wnm/ssl/web/frame/login.html\"]\r\n\t}, {\r\n\t\t\"cms\": \"Cisco SSLVPN\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"/+CSCOE+/logon.html\"]\r\n\t}, {\r\n\t\t\"cms\": \"通达OA\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"/images/tongda.ico\"]\r\n\t}, {\r\n\t\t\"cms\": \"通达OA\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"Office Anywhere\"]\r\n\t}, {\r\n\t\t\"cms\": \"通达OA\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"通达OA\",\"login\"]\r\n\t}, {\r\n\t\t\"cms\": \"深信服 waf\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"rsa.js\", \"commonFunction.js\"]\r\n\t}, {\r\n\t\t\"cms\": \"深信服防火墙数据中心\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"Redirect to...\", \"/LogInOut.php\"]\r\n\t}, {\r\n\t\t\"cms\": \"深信服一体化网关 MIG\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"cgi-bin/login.cgi\", \"/html/wz_tooltip.js\"]\r\n\t}, {\r\n\t\t\"cms\": \"天融信防火墙\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"TOPSEC\", \"image/aaa.png\",\"username\"]\r\n\t}, {\r\n\t\t\"cms\": \"天融信TopAPP负载均衡系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"TopAPP负载均衡系统\", \"天融信\"]\r\n\t}, {\r\n\t\t\"cms\": \"网御 vpn\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"/vpn/common/js/leadsec.js\", \"/vpn/user/common/custom/auth_home.css\"]\r\n\t}, {\r\n\t\t\"cms\": \"Typecho\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"typecho\", \"usr/themes\"]\r\n\t}, {\r\n\t\t\"cms\": \"401 登陆认证\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"title\",\r\n\t\t\"keyword\": [\"401 Authorization\"]\r\n\t}, {\r\n\t\t\"cms\": \"唯德科创 IPEasy 知易通\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"title\",\r\n\t\t\"keyword\": [\"_IPEasy知易通\"]\r\n\t}, {\r\n\t\t\"cms\": \"Apache Airflow\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"title\",\r\n\t\t\"keyword\": [\"Airflow - Login\"]\r\n\t}, {\r\n\t\t\"cms\": \"启明星辰天清汉马USG防火墙\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"/cgi-bin/webui?op=get_product_model\"]\r\n\t}, {\r\n\t\t\"cms\": \"蓝凌 OA\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"sys/ui/extend/theme/default/style/icon.css\", \"sys/ui/extend/theme/default/style/profile.css\"]\r\n\t}, {\r\n\t\t\"cms\": \"蓝凌 OA\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"蓝凌软件\", \"App_Themes/Login\"]\r\n\t}, {\r\n\t\t\"cms\": \"飞鱼星上网行为管理\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"css/R1Login.css\", \"share.ti_username\",\"login_logo\"]\r\n\t}, {\r\n\t\t\"cms\": \"深信服上网行为管理系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"utccjfaewjb = function(str, key)\"]\r\n\t}, {\r\n\t\t\"cms\": \"深信服上网行为管理系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"document.write(WRFWWCSFBXMIGKRKHXFJ\"]\r\n\t}, {\r\n\t\t\"cms\": \"深信服应用交付报表系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"/reportCenter/index.php?cls_mode=cluster_mode_others\"]\r\n\t}, {\r\n\t\t\"cms\": \"群晖 NAS\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"Synology\",\"webman/\"]\r\n\t}, {\r\n\t\t\"cms\": \"金蝶云星空\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"HTML5/content/themes/kdcss.min.css\"]\r\n\t}, {\r\n\t\t\"cms\": \"金蝶云星空\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"/ClientBin/Kingdee.BOS.XPF.App.xap\"]\r\n\t}, {\r\n\t\t\"cms\": \"CoreMail\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"coremail/common\"]\r\n\t}, {\r\n\t\t\"cms\": \"启明星辰天清汉马USG防火墙\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"天清汉马USG\"]\r\n\t}, {\r\n\t\t\"cms\": \"Jboss\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"jboss.css\"]\r\n\t}, {\r\n\t\t\"cms\": \"Gitlab\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"assets/gitlab_logo\"]\r\n\t}, {\r\n\t\t\"cms\": \"宝塔-BT.cn\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"入口校验失败\"]\r\n\t}, {\r\n\t\t\"cms\": \"宝塔-BT.cn\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"没有找到站点\",\"可能原因\",\"CDN产品\",\"Web服务\",\"检查端口是否正确\"]\r\n\t}, {\r\n\t\t\"cms\": \"宝塔-BT.cn\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"<title>恭喜，站点创建成功\",\"面板系统后台\",\"系统自动生成\"]\r\n\t}, {\r\n\t\t\"cms\": \"DouPHP\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"Powered by DouPHP\",\"DouPHP\",\"theme\"]\r\n\t}, {\r\n\t\t\"cms\": \"宝塔-BT.cn\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"扫码登录更安全\",\"bt.cn\",\"/login\"]\r\n\t}, {\r\n\t\t\"cms\": \"宝塔-BT.cn\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"站点创建成功\",\"bt.cn\"]\r\n\t}, {\r\n\t\t\"cms\": \"宝塔-BT.cn\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"站点创建成功\",\"宝塔\"]\r\n\t}, {\r\n\t\t\"cms\": \"宝塔-BT.cn\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-386189083\"]\r\n\t}, {\r\n\t\t\"cms\": \"禅道\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"self.location\", \"Lw==\"]\r\n\t}, {\r\n\t\t\"cms\": \"禅道\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"/theme/default/images/main/zt-logo.png\"]\r\n\t}, {\r\n\t\t\"cms\": \"禅道\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"header\",\r\n\t\t\"keyword\": [\"zentaosid\"]\r\n\t}, {\r\n\t\t\"cms\": \"用友软件\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"UFIDA Software CO.LTD all rights reserved\"]\r\n\t}, {\r\n\t    \"cms\": \"用友NC\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"logo/images/ufida_nc.png\",\"用友NC\"]\r\n\t}, {\r\n\t\t\"cms\": \"YONYOU NC\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"uclient.yonyou.com\", \"UClient\"]\r\n\t}, {\r\n\t\t\"cms\": \"宝塔-BT.cn\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"宝塔Linux面板\"]\r\n\t}, {\r\n\t\t\"cms\": \"RabbitMQ\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"<title>RabbitMQ Management</title>\"]\r\n\t}, {\r\n\t\t\"cms\": \"Zabbix\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"zabbix\", \"Zabbix SIA\"]\r\n\t}, {\r\n\t\t\"cms\": \"联软准入\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"网络准入\", \"leagsoft\", \"redirect\"]\r\n\t}, {\r\n\t\t\"cms\": \"列目录\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"Index of /\"]\r\n\t}, {\r\n\t\t\"cms\": \"列目录\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\" - /</title>\"]\r\n\t}, {\r\n\t\t\"cms\": \"浪潮服务器IPMI管理口\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"img/inspur_logo.png\", \"Management System\"]\r\n\t}, {\r\n\t\t\"cms\": \"RegentApi_v2.0\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"RegentApi_v2.0\"]\r\n\t}, {\r\n\t\t\"cms\": \"Tomcat默认页面\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"/manager/status\", \"/manager/html\"]\r\n\t}, {\r\n\t\t\"cms\": \"slack-instance\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"99395752\"]\r\n\t}, {\r\n\t\t\"cms\": \"spring-boot\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"116323821\"]\r\n\t}, {\r\n\t\t\"cms\": \"Jenkins\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"81586312\"]\r\n\t}, {\r\n\t\t\"cms\": \"Cnservers LLC\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-235701012\"]\r\n\t}, {\r\n\t\t\"cms\": \"Atlassian\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"743365239\"]\r\n\t}, {\r\n\t\t\"cms\": \"Chainpoint\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"2128230701\"]\r\n\t}, {\r\n\t\t\"cms\": \"LaCie\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1277814690\"]\r\n\t}, {\r\n\t\t\"cms\": \"Parse\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"246145559\"]\r\n\t}, {\r\n\t\t\"cms\": \"Atlassian\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"628535358\"]\r\n\t}, {\r\n\t\t\"cms\": \"JIRA\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"855273746\"]\r\n\t}, {\r\n\t\t\"cms\": \"Avigilon\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1318124267\"]\r\n\t}, {\r\n\t\t\"cms\": \"Atlassian – Confluence\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-305179312\"]\r\n\t}, {\r\n\t\t\"cms\": \"OpenStack\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"786533217\"]\r\n\t}, {\r\n\t\t\"cms\": \"Pi Star\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"432733105\"]\r\n\t}, {\r\n\t\t\"cms\": \"Atlassian\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"705143395\"]\r\n\t}, {\r\n\t\t\"cms\": \"Angular IO (AngularJS)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1255347784\"]\r\n\t}, {\r\n\t\t\"cms\": \"XAMPP\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1275226814\"]\r\n\t}, {\r\n\t\t\"cms\": \"React\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-2009722838\"]\r\n\t}, {\r\n\t\t\"cms\": \"Atlassian – JIRA\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"981867722\"]\r\n\t}, {\r\n\t\t\"cms\": \"OpenStack\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-923088984\"]\r\n\t}, {\r\n\t\t\"cms\": \"Aplikasi\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"494866796\"]\r\n\t}, {\r\n\t\t\"cms\": \"Ubiquiti Aircube\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1249285083\"]\r\n\t}, {\r\n\t\t\"cms\": \"Atlassian – Bamboo\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1379982221\"]\r\n\t}, {\r\n\t\t\"cms\": \"Exostar – Managed Access Gateway\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"420473080\"]\r\n\t}, {\r\n\t\t\"cms\": \"Atlassian – Confluence\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1642532491\"]\r\n\t}, {\r\n\t\t\"cms\": \"Cisco Meraki\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"163842882\"]\r\n\t}, {\r\n\t\t\"cms\": \"Archivematica\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1378182799\"]\r\n\t}, {\r\n\t\t\"cms\": \"TCN\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-702384832\"]\r\n\t}, {\r\n\t\t\"cms\": \"CX\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-532394952\"]\r\n\t}, {\r\n\t\t\"cms\": \"Ace\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-183163807\"]\r\n\t}, {\r\n\t\t\"cms\": \"Atlassian – JIRA\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"552727997\"]\r\n\t}, {\r\n\t\t\"cms\": \"NetData\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1302486561\"]\r\n\t}, {\r\n\t\t\"cms\": \"OpenGeo Suite\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-609520537\"]\r\n\t}, {\r\n\t\t\"cms\": \"Dgraph Ratel\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1961046099\"]\r\n\t}, {\r\n\t\t\"cms\": \"Atlassian – JIRA\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1581907337\"]\r\n\t}, {\r\n\t\t\"cms\": \"Material Dashboard\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1913538826\"]\r\n\t}, {\r\n\t\t\"cms\": \"Form.io\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1319699698\"]\r\n\t}, {\r\n\t\t\"cms\": \"Kubeflow\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1203021870\"]\r\n\t}, {\r\n\t\t\"cms\": \"netdata dashboard\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-182423204\"]\r\n\t}, {\r\n\t\t\"cms\": \"CapRover\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"988422585\"]\r\n\t}, {\r\n\t\t\"cms\": \"WiJungle\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"2113497004\"]\r\n\t}, {\r\n\t\t\"cms\": \"Onera\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1234311970\"]\r\n\t}, {\r\n\t\t\"cms\": \"SmartPing\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"430582574\"]\r\n\t}, {\r\n\t\t\"cms\": \"OpenStack\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1232596212\"]\r\n\t}, {\r\n\t\t\"cms\": \"netdata dashboard\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1585145626\"]\r\n\t}, {\r\n\t\t\"cms\": \"FRITZ!Box\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-219752612\"]\r\n\t}, {\r\n\t\t\"cms\": \"fortinet-forticlient\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"945408572\"]\r\n\t}, {\r\n\t\t\"cms\": \"Ubiquiti – AirOS\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-697231354\"]\r\n\t}, {\r\n\t\t\"cms\": \"Fortinet – Forticlient\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"945408572\"]\r\n\t}, {\r\n\t\t\"cms\": \"Outlook Web Application\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1768726119\"]\r\n\t}, {\r\n\t\t\"cms\": \"Huawei – Claro\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"2109473187\"]\r\n\t}, {\r\n\t\t\"cms\": \"ASUS AiCloud\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"552592949\"]\r\n\t}, {\r\n\t\t\"cms\": \"SonicWALL\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"631108382\"]\r\n\t}, {\r\n\t\t\"cms\": \"Google\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"708578229\"]\r\n\t}, {\r\n\t\t\"cms\": \"Plesk\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-134375033\"]\r\n\t}, {\r\n\t\t\"cms\": \"Dahua Storm (IP Camera)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"2019488876\"]\r\n\t}, {\r\n\t\t\"cms\": \"Huawei – ADSL/Router\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1395400951\"]\r\n\t}, {\r\n\t\t\"cms\": \"Sophos Cyberoam (appliance)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1601194732\"]\r\n\t}, {\r\n\t\t\"cms\": \"LANCOM Systems\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-325082670\"]\r\n\t}, {\r\n\t\t\"cms\": \"Plesk\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1050786453\"]\r\n\t}, {\r\n\t\t\"cms\": \"TilginAB (HomeGateway)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1346447358\"]\r\n\t}, {\r\n\t\t\"cms\": \"Supermicro Intelligent Management (IPMI)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1410610129\"]\r\n\t}, {\r\n\t\t\"cms\": \"Zyxel ZyWALL\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-440644339\"]\r\n\t}, {\r\n\t\t\"cms\": \"Dell SonicWALL\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"363324987\"]\r\n\t}, {\r\n\t\t\"cms\": \"Ubiquiti Login Portals\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1446794564\"]\r\n\t}, {\r\n\t\t\"cms\": \"Sophos User Portal/VPN Portal\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1045696447\"]\r\n\t}, {\r\n\t\t\"cms\": \"Apache Tomcat\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-297069493\"]\r\n\t}, {\r\n\t\t\"cms\": \"OpenVPN\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"396533629\"]\r\n\t}, {\r\n\t\t\"cms\": \"Cyberoam\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1462981117\"]\r\n\t}, {\r\n\t\t\"cms\": \"Technicolor\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1594377337\"]\r\n\t}, {\r\n\t\t\"cms\": \"Vodafone (Technicolor)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"165976831\"]\r\n\t}, {\r\n\t\t\"cms\": \"UBNT Router UI\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1677255344\"]\r\n\t}, {\r\n\t\t\"cms\": \"Intelbras Wireless\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-359621743\"]\r\n\t}, {\r\n\t\t\"cms\": \"Kerio Connect (Webmail)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-677167908\"]\r\n\t}, {\r\n\t\t\"cms\": \"BIG-IP\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"878647854\"]\r\n\t}, {\r\n\t\t\"cms\": \"Microsoft OWA\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"442749392\"]\r\n\t}, {\r\n\t\t\"cms\": \"pfSense\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1405460984\"]\r\n\t}, {\r\n\t\t\"cms\": \"iKuai Networks\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-271448102\"]\r\n\t}, {\r\n\t\t\"cms\": \"Dlink Webcam\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"31972968\"]\r\n\t}, {\r\n\t\t\"cms\": \"3CX Phone System\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"970132176\"]\r\n\t}, {\r\n\t\t\"cms\": \"Bluehost\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1119613926\"]\r\n\t}, {\r\n\t\t\"cms\": \"Sangfor\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"123821839\"]\r\n\t}, {\r\n\t\t\"cms\": \"ZTE Corporation (Gateway/Appliance)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"459900502\"]\r\n\t}, {\r\n\t\t\"cms\": \"Ruckus Wireless\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-2069844696\"]\r\n\t}, {\r\n\t\t\"cms\": \"Bitnami\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1607644090\"]\r\n\t}, {\r\n\t\t\"cms\": \"Juniper Device Manager\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"2141724739\"]\r\n\t}, {\r\n\t\t\"cms\": \"Technicolor Gateway\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1835479497\"]\r\n\t}, {\r\n\t\t\"cms\": \"Gitlab\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1278323681\"]\r\n\t}, {\r\n\t\t\"cms\": \"NETASQ - Secure / Stormshield\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1929912510\"]\r\n\t}, {\r\n\t\t\"cms\": \"VMware Horizon\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1255992602\"]\r\n\t}, {\r\n\t\t\"cms\": \"VMware Horizon\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1895360511\"]\r\n\t}, {\r\n\t\t\"cms\": \"VMware Horizon\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-991123252\"]\r\n\t}, {\r\n\t\t\"cms\": \"Vmware Secure File Transfer\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1642701741\"]\r\n\t}, {\r\n\t\t\"cms\": \"SAP Netweaver\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-266008933\"]\r\n\t}, {\r\n\t\t\"cms\": \"SAP ID Service: Log On\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1967743928\"]\r\n\t}, {\r\n\t\t\"cms\": \"SAP Conversational AI\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1347937389\"]\r\n\t}, {\r\n\t\t\"cms\": \"Palo Alto Login Portal\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"602431586\"]\r\n\t}, {\r\n\t\t\"cms\": \"Palo Alto Networks\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-318947884\"]\r\n\t}, {\r\n\t\t\"cms\": \"Outlook Web Application\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1356662359\"]\r\n\t}, {\r\n\t\t\"cms\": \"Webmin\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1453890729\"]\r\n\t}, {\r\n\t\t\"cms\": \"Docker\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1814887000\"]\r\n\t}, {\r\n\t\t\"cms\": \"Docker\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1937209448\"]\r\n\t}, {\r\n\t\t\"cms\": \"Amazon\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1544605732\"]\r\n\t}, {\r\n\t\t\"cms\": \"Amazon\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"716989053\"]\r\n\t}, {\r\n\t\t\"cms\": \"phpMyAdmin\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1010568750\"]\r\n\t}, {\r\n\t\t\"cms\": \"Zhejiang Uniview Technologies Co.\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1240222446\"]\r\n\t}, {\r\n\t\t\"cms\": \"ISP Manager\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-986678507\"]\r\n\t}, {\r\n\t\t\"cms\": \"AXIS (network cameras)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1616143106\"]\r\n\t}, {\r\n\t\t\"cms\": \"Roundcube Webmail\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-976235259\"]\r\n\t}, {\r\n\t\t\"cms\": \"UniFi Video Controller (airVision)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"768816037\"]\r\n\t}, {\r\n\t\t\"cms\": \"pfSense\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1015545776\"]\r\n\t}, {\r\n\t\t\"cms\": \"Freebox OS\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1838417872\"]\r\n\t}, {\r\n\t\t\"cms\": \"Keenetic\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"547282364\"]\r\n\t}, {\r\n\t\t\"cms\": \"Sierra Wireless Ace Manager (Airlink)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1571472432\"]\r\n\t}, {\r\n\t\t\"cms\": \"Synology DiskStation\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"149371702\"]\r\n\t}, {\r\n\t\t\"cms\": \"INSTAR IP Cameras\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1169314298\"]\r\n\t}, {\r\n\t\t\"cms\": \"Webmin\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1038557304\"]\r\n\t}, {\r\n\t\t\"cms\": \"Octoprint (3D printer)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1307375944\"]\r\n\t}, {\r\n\t\t\"cms\": \"Webmin\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1280907310\"]\r\n\t}, {\r\n\t\t\"cms\": \"Vesta Hosting Control Panel\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1954835352\"]\r\n\t}, {\r\n\t\t\"cms\": \"Farming Simulator Dedicated Server\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"509789953\"]\r\n\t}, {\r\n\t\t\"cms\": \"Residential Gateway\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1933493443\"]\r\n\t}, {\r\n\t\t\"cms\": \"cPanel Login\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1993518473\"]\r\n\t}, {\r\n\t\t\"cms\": \"Arris\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1477563858\"]\r\n\t}, {\r\n\t\t\"cms\": \"PLEX Server\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-895890586\"]\r\n\t}, {\r\n\t\t\"cms\": \"Dlink Webcam\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1354933624\"]\r\n\t}, {\r\n\t\t\"cms\": \"Deluge\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"944969688\"]\r\n\t}, {\r\n\t\t\"cms\": \"Webmin\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"479413330\"]\r\n\t}, {\r\n\t\t\"cms\": \"Cambium Networks\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-435817905\"]\r\n\t}, {\r\n\t\t\"cms\": \"Plesk\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-981606721\"]\r\n\t}, {\r\n\t\t\"cms\": \"Dahua Storm (IP Camera)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"833190513\"]\r\n\t}, {\r\n\t\t\"cms\": \"Parallels Plesk Panel\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-652508439\"]\r\n\t}, {\r\n\t\t\"cms\": \"Fireware Watchguard\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-569941107\"]\r\n\t}, {\r\n\t\t\"cms\": \"Shock&Innovation!! netis setup\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1326164945\"]\r\n\t}, {\r\n\t\t\"cms\": \"cacaoweb\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1738184811\"]\r\n\t}, {\r\n\t\t\"cms\": \"Loxone (Automation)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"904434662\"]\r\n\t}, {\r\n\t\t\"cms\": \"HP Printer / Server\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"905744673\"]\r\n\t}, {\r\n\t\t\"cms\": \"Netflix\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"902521196\"]\r\n\t}, {\r\n\t\t\"cms\": \"Linksys Smart Wi-Fi\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-2063036701\"]\r\n\t}, {\r\n\t\t\"cms\": \"lwIP (A Lightweight TCP/IP stack)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1205024243\"]\r\n\t}, {\r\n\t\t\"cms\": \"Hitron Technologies\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"607846949\"]\r\n\t}, {\r\n\t\t\"cms\": \"Dahua Storm (DVR)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1281253102\"]\r\n\t}, {\r\n\t\t\"cms\": \"MOBOTIX Camera\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"661332347\"]\r\n\t}, {\r\n\t\t\"cms\": \"Blue Iris (Webcam)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-520888198\"]\r\n\t}, {\r\n\t\t\"cms\": \"Vigor Router\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"104189364\"]\r\n\t}, {\r\n\t\t\"cms\": \"Alibaba Cloud (Block Page)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1227052603\"]\r\n\t}, {\r\n\t\t\"cms\": \"DD WRT (DD-WRT milli_httpd)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"252728887\"]\r\n\t}, {\r\n\t\t\"cms\": \"Mitel Networks (MiCollab End User Portal)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1922044295\"]\r\n\t}, {\r\n\t\t\"cms\": \"Dlink Webcam\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1221759509\"]\r\n\t}, {\r\n\t\t\"cms\": \"Dlink Router\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1037387972\"]\r\n\t}, {\r\n\t\t\"cms\": \"PRTG Network Monitor\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-655683626\"]\r\n\t}, {\r\n\t\t\"cms\": \"Elastic (Database)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1611729805\"]\r\n\t}, {\r\n\t\t\"cms\": \"Dlink Webcam\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1144925962\"]\r\n\t}, {\r\n\t\t\"cms\": \"Wildfly\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1666561833\"]\r\n\t}, {\r\n\t\t\"cms\": \"Cisco Meraki Dashboard\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"804949239\"]\r\n\t}, {\r\n\t\t\"cms\": \"Workday\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-459291760\"]\r\n\t}, {\r\n\t\t\"cms\": \"JustHost\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1734609466\"]\r\n\t}, {\r\n\t\t\"cms\": \"Baidu (IP error page)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1507567067\"]\r\n\t}, {\r\n\t\t\"cms\": \"Intelbras SA\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"2006716043\"]\r\n\t}, {\r\n\t\t\"cms\": \"Yii PHP Framework (Default Favicon)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1298108480\"]\r\n\t}, {\r\n\t\t\"cms\": \"truVision NVR (interlogix)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1782271534\"]\r\n\t}, {\r\n\t\t\"cms\": \"SOYAL Serial Device Server\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1777351344\"]\r\n\t}, {\r\n\t\t\"cms\": \"Redmine\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"603314\"]\r\n\t}, {\r\n\t\t\"cms\": \"phpMyAdmin\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-476231906\"]\r\n\t}, {\r\n\t\t\"cms\": \"Cisco (eg:Conference Room Login Page)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-646322113\"]\r\n\t}, {\r\n\t\t\"cms\": \"Jetty 404\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-629047854\"]\r\n\t}, {\r\n\t\t\"cms\": \"Luma Surveillance\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1351901211\"]\r\n\t}, {\r\n\t\t\"cms\": \"Parallels Plesk Panel\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-519765377\"]\r\n\t}, {\r\n\t\t\"cms\": \"HP Printer / Server\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-2144363468\"]\r\n\t}, {\r\n\t\t\"cms\": \"Metasploit\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-127886975\"]\r\n\t}, {\r\n\t\t\"cms\": \"Metasploit\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1139788073\"]\r\n\t}, {\r\n\t\t\"cms\": \"Metasploit\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1235192469\"]\r\n\t}, {\r\n\t\t\"cms\": \"ALIBI NVR\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1876585825\"]\r\n\t}, {\r\n\t\t\"cms\": \"Sangfor 应用交付报表系统\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1810847295\"]\r\n\t}, {\r\n\t\t\"cms\": \"Websockets test page (eg: port 5900)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-291579889\"]\r\n\t}, {\r\n\t\t\"cms\": \"macOS Server (Apple)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1629518721\"]\r\n\t}, {\r\n\t\t\"cms\": \"OpenRG\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-986816620\"]\r\n\t}, {\r\n\t\t\"cms\": \"Cisco Router\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-299287097\"]\r\n\t}, {\r\n\t\t\"cms\": \"Sangfor\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1926484046\"]\r\n\t}, {\r\n\t\t\"cms\": \"HeroSpeed Digital Technology Co. (NVR/IPC/XVR)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-873627015\"]\r\n\t}, {\r\n\t\t\"cms\": \"Nomadix Access Gateway\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"2071993228\"]\r\n\t}, {\r\n\t\t\"cms\": \"Gitlab\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"516963061\"]\r\n\t}, {\r\n\t\t\"cms\": \"Magento\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-38580010\"]\r\n\t}, {\r\n\t\t\"cms\": \"MK-AUTH\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1490343308\"]\r\n\t}, {\r\n\t\t\"cms\": \"Shoutcast Server\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-632583950\"]\r\n\t}, {\r\n\t\t\"cms\": \"FireEye\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"95271369\"]\r\n\t}, {\r\n\t\t\"cms\": \"FireEye\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1476335317\"]\r\n\t}, {\r\n\t\t\"cms\": \"FireEye\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-842192932\"]\r\n\t}, {\r\n\t\t\"cms\": \"FireEye\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"105083909\"]\r\n\t}, {\r\n\t\t\"cms\": \"FireEye\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"240606739\"]\r\n\t}, {\r\n\t\t\"cms\": \"FireEye\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"2121539357\"]\r\n\t}, {\r\n\t\t\"cms\": \"Adobe Campaign Classic\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-333791179\"]\r\n\t}, {\r\n\t\t\"cms\": \"XAMPP\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1437701105\"]\r\n\t}, {\r\n\t\t\"cms\": \"Niagara Web Server\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-676077969\"]\r\n\t}, {\r\n\t\t\"cms\": \"Technicolor\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-2138771289\"]\r\n\t}, {\r\n\t\t\"cms\": \"Hitron Technologies Inc.\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"711742418\"]\r\n\t}, {\r\n\t\t\"cms\": \"IBM Notes\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"728788645\"]\r\n\t}, {\r\n\t\t\"cms\": \"Barracuda\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1436966696\"]\r\n\t}, {\r\n\t\t\"cms\": \"ServiceNow\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"86919334\"]\r\n\t}, {\r\n\t\t\"cms\": \"Openfire Admin Console\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1211608009\"]\r\n\t}, {\r\n\t\t\"cms\": \"HP iLO\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"2059618623\"]\r\n\t}, {\r\n\t\t\"cms\": \"Sunny WebBox\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1975413433\"]\r\n\t}, {\r\n\t\t\"cms\": \"ZyXEL\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"943925975\"]\r\n\t}, {\r\n\t\t\"cms\": \"Huawei\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"281559989\"]\r\n\t}, {\r\n\t\t\"cms\": \"Tenda Web Master\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-2145085239\"]\r\n\t}, {\r\n\t\t\"cms\": \"Prometheus Time Series Collection and Processing Server\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1399433489\"]\r\n\t}, {\r\n\t\t\"cms\": \"wdCP 云主机面板\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1786752597\"]\r\n\t}, {\r\n\t\t\"cms\": \"Domoticz (Home Automation)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"90680708\"]\r\n\t}, {\r\n\t\t\"cms\": \"Tableau\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1441956789\"]\r\n\t}, {\r\n\t\t\"cms\": \"openWRT Luci\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-675839242\"]\r\n\t}, {\r\n\t\t\"cms\": \"Ubiquiti – AirOS\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1020814938\"]\r\n\t}, {\r\n\t\t\"cms\": \"MDaemon Webmail\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-766957661\"]\r\n\t}, {\r\n\t\t\"cms\": \"Teltonika\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"119741608\"]\r\n\t}, {\r\n\t\t\"cms\": \"Entrolink\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1973665246\"]\r\n\t}, {\r\n\t\t\"cms\": \"WindRiver-WebServer\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"74935566\"]\r\n\t}, {\r\n\t\t\"cms\": \"Microhard Systems\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1723752240\"]\r\n\t}, {\r\n\t\t\"cms\": \"Skype\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1807411396\"]\r\n\t}, {\r\n\t\t\"cms\": \"Teltonika\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1612496354\"]\r\n\t}, {\r\n\t\t\"cms\": \"Eltex (Router)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1877797890\"]\r\n\t}, {\r\n\t\t\"cms\": \"bintec elmeg\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-375623619\"]\r\n\t}, {\r\n\t\t\"cms\": \"SyncThru Web Service (Printers)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1483097076\"]\r\n\t}, {\r\n\t\t\"cms\": \"BoaServer\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1169183049\"]\r\n\t}, {\r\n\t\t\"cms\": \"Securepoint\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1051648103\"]\r\n\t}, {\r\n\t\t\"cms\": \"Moodle\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-438482901\"]\r\n\t}, {\r\n\t\t\"cms\": \"RADIX\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1492966240\"]\r\n\t}, {\r\n\t\t\"cms\": \"CradlePoint Technology (Router)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1466912879\"]\r\n\t}, {\r\n\t\t\"cms\": \"Drupal\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-167656799\"]\r\n\t}, {\r\n\t\t\"cms\": \"Blackboard\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1593651747\"]\r\n\t}, {\r\n\t\t\"cms\": \"Jupyter Notebook\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-895963602\"]\r\n\t}, {\r\n\t\t\"cms\": \"HostMonster - Web hosting\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-972810761\"]\r\n\t}, {\r\n\t\t\"cms\": \"D-Link (router/network)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1703788174\"]\r\n\t}, {\r\n\t\t\"cms\": \"Rocket Chat\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"225632504\"]\r\n\t}, {\r\n\t\t\"cms\": \"mofinetwork\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1702393021\"]\r\n\t}, {\r\n\t\t\"cms\": \"Zabbix\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"892542951\"]\r\n\t}, {\r\n\t\t\"cms\": \"TOTOLINK (network)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"547474373\"]\r\n\t}, {\r\n\t\t\"cms\": \"Ossia (Provision SR) | Webcam/IP Camera\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-374235895\"]\r\n\t}, {\r\n\t\t\"cms\": \"cPanel Login\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1544230796\"]\r\n\t}, {\r\n\t\t\"cms\": \"D-Link (router/network)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"517158172\"]\r\n\t}, {\r\n\t\t\"cms\": \"Jeedom (home automation)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"462223993\"]\r\n\t}, {\r\n\t\t\"cms\": \"JBoss Application Server 7\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"937999361\"]\r\n\t}, {\r\n\t\t\"cms\": \"Niagara Web Server / Tridium\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1991562061\"]\r\n\t}, {\r\n\t\t\"cms\": \"Solarwinds Serv-U FTP Server\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"812385209\"]\r\n\t}, {\r\n\t\t\"cms\": \"Aruba (Virtual Controller)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1142227528\"]\r\n\t}, {\r\n\t\t\"cms\": \"Dell\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1153950306\"]\r\n\t}, {\r\n\t\t\"cms\": \"RemObjects SDK / Remoting SDK for .NET HTTP Server Microsoft\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"72005642\"]\r\n\t}, {\r\n\t\t\"cms\": \"Zyxel ZyWALL\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-484708885\"]\r\n\t}, {\r\n\t\t\"cms\": \"VisualSVN Server\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"706602230\"]\r\n\t}, {\r\n\t\t\"cms\": \"Jboss\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-656811182\"]\r\n\t}, {\r\n\t\t\"cms\": \"STARFACE VoIP Software\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-332324409\"]\r\n\t}, {\r\n\t\t\"cms\": \"Netis (network devices)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-594256627\"]\r\n\t}, {\r\n\t\t\"cms\": \"WHM\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-649378830\"]\r\n\t}, {\r\n\t\t\"cms\": \"Tandberg\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"97604680\"]\r\n\t}, {\r\n\t\t\"cms\": \"Ghost (CMS)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1015932800\"]\r\n\t}, {\r\n\t\t\"cms\": \"Avtech IP Surveillance (Camera)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-194439630\"]\r\n\t}, {\r\n\t\t\"cms\": \"Liferay Portal\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"129457226\"]\r\n\t}, {\r\n\t\t\"cms\": \"Parallels Plesk Panel\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-771764544\"]\r\n\t}, {\r\n\t\t\"cms\": \"Odoo\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-617743584\"]\r\n\t}, {\r\n\t\t\"cms\": \"Polycom\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"77044418\"]\r\n\t}, {\r\n\t\t\"cms\": \"Cake PHP\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"980692677\"]\r\n\t}, {\r\n\t\t\"cms\": \"Exacq\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"476213314\"]\r\n\t}, {\r\n\t\t\"cms\": \"CheckPoint\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"794809961\"]\r\n\t}, {\r\n\t\t\"cms\": \"Ubiquiti UNMS\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1157789622\"]\r\n\t}, {\r\n\t\t\"cms\": \"cPanel Login\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1244636413\"]\r\n\t}, {\r\n\t\t\"cms\": \"WorldClient for Mdaemon\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1985721423\"]\r\n\t}, {\r\n\t\t\"cms\": \"Netport Software (DSL)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1124868062\"]\r\n\t}, {\r\n\t\t\"cms\": \"f5 Big IP\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-335242539\"]\r\n\t}, {\r\n\t\t\"cms\": \"Mailcow\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"2146763496\"]\r\n\t}, {\r\n\t\t\"cms\": \"QNAP NAS Virtualization Station\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1041180225\"]\r\n\t}, {\r\n\t\t\"cms\": \"Netgear\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1319025408\"]\r\n\t}, {\r\n\t\t\"cms\": \"Gogs\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"917966895\"]\r\n\t}, {\r\n\t\t\"cms\": \"Trendnet IP camera\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"512590457\"]\r\n\t}, {\r\n\t\t\"cms\": \"Asustor\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1678170702\"]\r\n\t}, {\r\n\t\t\"cms\": \"Dahua\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1466785234\"]\r\n\t}, {\r\n\t\t\"cms\": \"Discuz!\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-505448917\"]\r\n\t},{\r\n\t\t\"cms\": \"Discuz!\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"Discuz!\",\"Comsenz\",\"cache/\"]\r\n\t}, {\r\n\t\t\"cms\": \"wdCP cloud host management system\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"255892555\"]\r\n\t}, {\r\n\t\t\"cms\": \"Joomla\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1627330242\"]\r\n\t}, {\r\n\t\t\"cms\": \"SmarterMail\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1935525788\"]\r\n\t}, {\r\n\t\t\"cms\": \"Seafile\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-12700016\"]\r\n\t}, {\r\n\t\t\"cms\": \"bintec elmeg\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1770799630\"]\r\n\t}, {\r\n\t\t\"cms\": \"NETGEAR ReadyNAS\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-137295400\"]\r\n\t}, {\r\n\t\t\"cms\": \"iPECS\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-195508437\"]\r\n\t}, {\r\n\t\t\"cms\": \"bet365\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-2116540786\"]\r\n\t}, {\r\n\t\t\"cms\": \"Reolink\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-38705358\"]\r\n\t}, {\r\n\t\t\"cms\": \"idera\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-450254253\"]\r\n\t}, {\r\n\t\t\"cms\": \"Proofpoint\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1630354993\"]\r\n\t}, {\r\n\t\t\"cms\": \"Kerio Connect WebMail\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1678298769\"]\r\n\t}, {\r\n\t\t\"cms\": \"WorldClient for Mdaemon\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-35107086\"]\r\n\t}, {\r\n\t\t\"cms\": \"Realtek\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"2055322029\"]\r\n\t}, {\r\n\t\t\"cms\": \"锐捷 Ruijie Networks\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-692947551\"]\r\n\t}, {\r\n\t\t\"cms\": \"Askey Cable Modem\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1710631084\"]\r\n\t}, {\r\n\t\t\"cms\": \"Askey Cable Modem\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"89321398\"]\r\n\t}, {\r\n\t\t\"cms\": \"JAWS Web Server (IP Camera)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"90066852\"]\r\n\t}, {\r\n\t\t\"cms\": \"JAWS Web Server (IP Camera)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"768231242\"]\r\n\t}, {\r\n\t\t\"cms\": \"Homegrown Website Hosting\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-421986013\"]\r\n\t}, {\r\n\t\t\"cms\": \"Technicolor / Thomson Speedtouch (Network / ADSL)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"156312019\"]\r\n\t}, {\r\n\t\t\"cms\": \"DVR (Korean)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-560297467\"]\r\n\t}, {\r\n\t\t\"cms\": \"Joomla\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1950415971\"]\r\n\t}, {\r\n\t\t\"cms\": \"TP-LINK (Network Device)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1842351293\"]\r\n\t}, {\r\n\t\t\"cms\": \"Salesforce\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1433417005\"]\r\n\t}, {\r\n\t\t\"cms\": \"Apache Haus\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-632070065\"]\r\n\t}, {\r\n\t\t\"cms\": \"Untangle\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1103599349\"]\r\n\t}, {\r\n\t\t\"cms\": \"Shenzhen coship electronics co.\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"224536051\"]\r\n\t}, {\r\n\t\t\"cms\": \"D-Link (router/network)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1038500535\"]\r\n\t}, {\r\n\t\t\"cms\": \"D-Link (camera)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-355305208\"]\r\n\t}, {\r\n\t\t\"cms\": \"Kibana\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-267431135\"]\r\n\t}, {\r\n\t\t\"cms\": \"Kibana\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-759754862\"]\r\n\t}, {\r\n\t\t\"cms\": \"Kibana\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1200737715\"]\r\n\t}, {\r\n\t\t\"cms\": \"Kibana\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"75230260\"]\r\n\t}, {\r\n\t\t\"cms\": \"Kibana\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1668183286\"]\r\n\t}, {\r\n\t\t\"cms\": \"Intelbras SA\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"283740897\"]\r\n\t}, {\r\n\t\t\"cms\": \"Icecast Streaming Media Server\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1424295654\"]\r\n\t}, {\r\n\t\t\"cms\": \"NEC WebPro\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1922032523\"]\r\n\t}, {\r\n\t\t\"cms\": \"Vivotek (Camera)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1654229048\"]\r\n\t}, {\r\n\t\t\"cms\": \"Microsoft IIS\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1414475558\"]\r\n\t}, {\r\n\t\t\"cms\": \"Univention Portal\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1697334194\"]\r\n\t}, {\r\n\t\t\"cms\": \"Portainer (Docker Management)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1424036600\"]\r\n\t}, {\r\n\t\t\"cms\": \"NOS Router\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-831826827\"]\r\n\t}, {\r\n\t\t\"cms\": \"Tongda\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-759108386\"]\r\n\t}, {\r\n\t\t\"cms\": \"CrushFTP\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1022206565\"]\r\n\t}, {\r\n\t\t\"cms\": \"Endian Firewall\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1225484776\"]\r\n\t}, {\r\n\t\t\"cms\": \"Kerio Control Firewall\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-631002664\"]\r\n\t}, {\r\n\t\t\"cms\": \"Ferozo Panel\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"2072198544\"]\r\n\t}, {\r\n\t\t\"cms\": \"Kerio Control Firewall\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-466504476\"]\r\n\t}, {\r\n\t\t\"cms\": \"Cafe24 (Korea)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1251810433\"]\r\n\t}, {\r\n\t\t\"cms\": \"Mautic (Open Source Marketing Automation)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1273982002\"]\r\n\t}, {\r\n\t\t\"cms\": \"NETIASPOT (Network)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-978656757\"]\r\n\t}, {\r\n\t\t\"cms\": \"Multilaser\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"916642917\"]\r\n\t}, {\r\n\t\t\"cms\": \"Canvas LMS (Learning Management)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"575613323\"]\r\n\t}, {\r\n\t\t\"cms\": \"IBM Server\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1726027799\"]\r\n\t}, {\r\n\t\t\"cms\": \"ADB Broadband S.p.A. (Network)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-587741716\"]\r\n\t}, {\r\n\t\t\"cms\": \"ARRIS (Network)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-360566773\"]\r\n\t}, {\r\n\t\t\"cms\": \"Huawei (Network)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-884776764\"]\r\n\t}, {\r\n\t\t\"cms\": \"WAMPSERVER\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"929825723\"]\r\n\t}, {\r\n\t\t\"cms\": \"Seagate Technology (NAS)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"240136437\"]\r\n\t}, {\r\n\t\t\"cms\": \"UPC Ceska Republica (Network)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1911253822\"]\r\n\t}, {\r\n\t\t\"cms\": \"Flussonic (Video Streaming)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-393788031\"]\r\n\t}, {\r\n\t\t\"cms\": \"Joomla\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"366524387\"]\r\n\t}, {\r\n\t\t\"cms\": \"WAMPSERVER\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"443944613\"]\r\n\t}, {\r\n\t\t\"cms\": \"Metabase\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1953726032\"]\r\n\t}, {\r\n\t\t\"cms\": \"D-Link (Network)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-2031183903\"]\r\n\t}, {\r\n\t\t\"cms\": \"MobileIron\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"545827989\"]\r\n\t}, {\r\n\t\t\"cms\": \"MobileIron\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"967636089\"]\r\n\t}, {\r\n\t\t\"cms\": \"MobileIron\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"362091310\"]\r\n\t}, {\r\n\t\t\"cms\": \"MobileIron\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"2086228042\"]\r\n\t}, {\r\n\t\t\"cms\": \"CommuniGate\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1588746893\"]\r\n\t}, {\r\n\t\t\"cms\": \"ZTE (Network)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1427976651\"]\r\n\t}, {\r\n\t\t\"cms\": \"InfiNet Wireless | WANFleX (Network)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1648531157\"]\r\n\t}, {\r\n\t\t\"cms\": \"Mersive Solstice\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"938616453\"]\r\n\t}, {\r\n\t\t\"cms\": \"Université Toulouse 1 Capitole\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1632780968\"]\r\n\t}, {\r\n\t\t\"cms\": \"Digium (Switchvox)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"2068154487\"]\r\n\t}, {\r\n\t\t\"cms\": \"PowerMTA monitoring\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1788112745\"]\r\n\t}, {\r\n\t\t\"cms\": \"SmartLAN/G\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-644617577\"]\r\n\t}, {\r\n\t\t\"cms\": \"Checkpoint (Gaia)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1822098181\"]\r\n\t}, {\r\n\t\t\"cms\": \"УТМ (Federal Service for Alcohol Market Regulation | Russia)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1131689409\"]\r\n\t}, {\r\n\t\t\"cms\": \"MailWizz\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"2127152956\"]\r\n\t}, {\r\n\t\t\"cms\": \"RabbitMQ\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1064742722\"]\r\n\t}, {\r\n\t\t\"cms\": \"openmediavault (NAS)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-693082538\"]\r\n\t}, {\r\n\t\t\"cms\": \"openWRT Luci\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1941381095\"]\r\n\t}, {\r\n\t\t\"cms\": \"Honeywell\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"903086190\"]\r\n\t}, {\r\n\t\t\"cms\": \"BOMGAR Support Portal\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"829321644\"]\r\n\t}, {\r\n\t\t\"cms\": \"Nuxt JS\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1442789563\"]\r\n\t}, {\r\n\t\t\"cms\": \"RoundCube Webmail\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-2140379067\"]\r\n\t}, {\r\n\t\t\"cms\": \"D-Link (camera)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1897829998\"]\r\n\t}, {\r\n\t\t\"cms\": \"Netgear (Network)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1047213685\"]\r\n\t}, {\r\n\t\t\"cms\": \"SonarQube\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1485257654\"]\r\n\t}, {\r\n\t\t\"cms\": \"Lupus Electronics XT\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-299324825\"]\r\n\t}, {\r\n\t\t\"cms\": \"Vanderbilt SPC\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1162730477\"]\r\n\t}, {\r\n\t\t\"cms\": \"VZPP Plesk\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1268095485\"]\r\n\t}, {\r\n\t\t\"cms\": \"Baidu\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1118684072\"]\r\n\t}, {\r\n\t\t\"cms\": \"ownCloud\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1616115760\"]\r\n\t}, {\r\n\t\t\"cms\": \"Sentora\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-2054889066\"]\r\n\t}, {\r\n\t\t\"cms\": \"Alfresco\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1333537166\"]\r\n\t}, {\r\n\t\t\"cms\": \"Digital Keystone (DK)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-373674173\"]\r\n\t}, {\r\n\t\t\"cms\": \"WISPR (Airlan)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-106646451\"]\r\n\t}, {\r\n\t\t\"cms\": \"Synology VPN Plus\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1235070469\"]\r\n\t}, {\r\n\t\t\"cms\": \"Sentry\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"2063428236\"]\r\n\t}, {\r\n\t\t\"cms\": \"WatchGuard\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"15831193\"]\r\n\t}, {\r\n\t\t\"cms\": \"Web Client Pro\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-956471263\"]\r\n\t}, {\r\n\t\t\"cms\": \"Tecvoz\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1452159623\"]\r\n\t}, {\r\n\t\t\"cms\": \"MDaemon Remote Administration\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"99432374\"]\r\n\t}, {\r\n\t\t\"cms\": \"Paradox IP Module\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"727253975\"]\r\n\t}, {\r\n\t\t\"cms\": \"DokuWiki\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-630493013\"]\r\n\t}, {\r\n\t\t\"cms\": \"Sails\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"552597979\"]\r\n\t}, {\r\n\t\t\"cms\": \"FastPanel Hosting\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"774252049\"]\r\n\t}, {\r\n\t\t\"cms\": \"C-Lodop\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-329747115\"]\r\n\t}, {\r\n\t\t\"cms\": \"Jamf Pro Login\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1262005940\"]\r\n\t}, {\r\n\t\t\"cms\": \"StruxureWare (Schneider Electric)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"979634648\"]\r\n\t}, {\r\n\t\t\"cms\": \"Axcient Replibit Management Server\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"475379699\"]\r\n\t}, {\r\n\t\t\"cms\": \"Twonky Server (Media Streaming)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-878891718\"]\r\n\t}, {\r\n\t\t\"cms\": \"Windows Azure\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-2125083197\"]\r\n\t}, {\r\n\t\t\"cms\": \"ISP Manager (Web Hosting Panel)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1151675028\"]\r\n\t}, {\r\n\t\t\"cms\": \"JupyterHub\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1248917303\"]\r\n\t}, {\r\n\t\t\"cms\": \"CenturyLink Modem GUI Login (eg: Technicolor)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1908556829\"]\r\n\t}, {\r\n\t\t\"cms\": \"Tecvoz\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1059329877\"]\r\n\t}, {\r\n\t\t\"cms\": \"OPNsense\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1148190371\"]\r\n\t}, {\r\n\t\t\"cms\": \"Ligowave (network)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1467395679\"]\r\n\t}, {\r\n\t\t\"cms\": \"Rumpus\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1528414776\"]\r\n\t}, {\r\n\t\t\"cms\": \"Spiceworks (panel)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-2117390767\"]\r\n\t}, {\r\n\t\t\"cms\": \"TeamCity\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1944119648\"]\r\n\t}, {\r\n\t\t\"cms\": \"INSTAR Full-HD IP-Camera\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1748763891\"]\r\n\t}, {\r\n\t\t\"cms\": \"GPON Home Gateway\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"251106693\"]\r\n\t}, {\r\n\t\t\"cms\": \"Alienvault\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1779611449\"]\r\n\t}, {\r\n\t\t\"cms\": \"Arbor Networks\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1745552996\"]\r\n\t}, {\r\n\t\t\"cms\": \"Accrisoft\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1275148624\"]\r\n\t}, {\r\n\t\t\"cms\": \"Yasni\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-178685903\"]\r\n\t}, {\r\n\t\t\"cms\": \"Slack\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-43161126\"]\r\n\t}, {\r\n\t\t\"cms\": \"innovaphone\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"671221099\"]\r\n\t}, {\r\n\t\t\"cms\": \"Shinobi (CCTV)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-10974981\"]\r\n\t}, {\r\n\t\t\"cms\": \"TP-LINK (Network Device)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1274078387\"]\r\n\t}, {\r\n\t\t\"cms\": \"Siemens OZW772\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-336242473\"]\r\n\t}, {\r\n\t\t\"cms\": \"Lantronix (Spider)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"882208493\"]\r\n\t}, {\r\n\t\t\"cms\": \"ClaimTime (Ramsell Public Health & Safety)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-687783882\"]\r\n\t}, {\r\n\t\t\"cms\": \"Surfilter SSL VPN Portal\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-590892202\"]\r\n\t}, {\r\n\t\t\"cms\": \"Kyocera (Printer)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-50306417\"]\r\n\t}, {\r\n\t\t\"cms\": \"Lucee!\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"784872924\"]\r\n\t}, {\r\n\t\t\"cms\": \"Ricoh\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1135165421\"]\r\n\t}, {\r\n\t\t\"cms\": \"Handle Proxy\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"926501571\"]\r\n\t}, {\r\n\t\t\"cms\": \"Metasploit\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"579239725\"]\r\n\t}, {\r\n\t\t\"cms\": \"iomega NAS\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-689902428\"]\r\n\t}, {\r\n\t\t\"cms\": \"iomega NAS\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-600508822\"]\r\n\t}, {\r\n\t\t\"cms\": \"iomega NAS\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"656868270\"]\r\n\t}, {\r\n\t\t\"cms\": \"iomega NAS\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-2056503929\"]\r\n\t}, {\r\n\t\t\"cms\": \"iomega NAS\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1656695885\"]\r\n\t}, {\r\n\t\t\"cms\": \"iomega NAS\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"331870709\"]\r\n\t}, {\r\n\t\t\"cms\": \"iomega NAS\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1241049726\"]\r\n\t}, {\r\n\t\t\"cms\": \"iomega NAS\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"998138196\"]\r\n\t}, {\r\n\t\t\"cms\": \"iomega NAS\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"322531336\"]\r\n\t}, {\r\n\t\t\"cms\": \"iomega NAS\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-401934945\"]\r\n\t}, {\r\n\t\t\"cms\": \"iomega NAS\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-613216179\"]\r\n\t}, {\r\n\t\t\"cms\": \"Chef Automate\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-276759139\"]\r\n\t}, {\r\n\t\t\"cms\": \"Gargoyle Router Management Utility\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1862132268\"]\r\n\t}, {\r\n\t\t\"cms\": \"KeepItSafe Management Console\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1738727418\"]\r\n\t}, {\r\n\t\t\"cms\": \"Entronix Energy Management Platform\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-368490461\"]\r\n\t}, {\r\n\t\t\"cms\": \"OpenProject\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1836828108\"]\r\n\t}, {\r\n\t\t\"cms\": \"Unified Management Console (Polycom)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1775553655\"]\r\n\t}, {\r\n\t\t\"cms\": \"Moxapass ioLogik Remote Ethernet I/O Server \",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"381100274\"]\r\n\t}, {\r\n\t\t\"cms\": \"HFS (HTTP File Server)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"2124459909\"]\r\n\t}, {\r\n\t\t\"cms\": \"HFS (HTTP File Server)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"731374291\"]\r\n\t}, {\r\n\t\t\"cms\": \"Traccar GPS tracking\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-335153896\"]\r\n\t}, {\r\n\t\t\"cms\": \"IW\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"896412703\"]\r\n\t}, {\r\n\t\t\"cms\": \"Wordpress Under Construction Icon\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"191654058\"]\r\n\t}, {\r\n\t\t\"cms\": \"Combivox\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-342262483\"]\r\n\t}, {\r\n\t\t\"cms\": \"NetComWireless (Network)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"5542029\"]\r\n\t}, {\r\n\t\t\"cms\": \"Elastic (Database)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1552860581\"]\r\n\t}, {\r\n\t\t\"cms\": \"Drupal\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1174841451\"]\r\n\t}, {\r\n\t\t\"cms\": \"truVision (NVR)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1093172228\"]\r\n\t}, {\r\n\t\t\"cms\": \"SpamExperts\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1688698891\"]\r\n\t}, {\r\n\t\t\"cms\": \"Sonatype Nexus Repository Manager\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1546574541\"]\r\n\t}, {\r\n\t\t\"cms\": \"iDirect Canada (Network Management)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-256828986\"]\r\n\t}, {\r\n\t\t\"cms\": \"OpenERP (now known as Odoo)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1966198264\"]\r\n\t}, {\r\n\t\t\"cms\": \"PKP (OpenJournalSystems) Public Knowledge Project\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"2099342476\"]\r\n\t}, {\r\n\t\t\"cms\": \"LiquidFiles\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"541087742\"]\r\n\t}, {\r\n\t\t\"cms\": \"ZyXEL (Network)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-882760066\"]\r\n\t}, {\r\n\t\t\"cms\": \"Universal Devices (UD)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"16202868\"]\r\n\t}, {\r\n\t\t\"cms\": \"Huawei (Network)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"987967490\"]\r\n\t},{\r\n\t\t\"cms\": \"Gitea\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1969970750\"]\r\n\t}, {\r\n\t\t\"cms\": \"TC-Group\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1734573358\"]\r\n\t}, {\r\n\t\t\"cms\": \"Deluge Web UI\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1589842876\"]\r\n\t}, {\r\n\t\t\"cms\": \"AMH 云主机面板\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1822002133\"]\r\n\t}, {\r\n\t\t\"cms\": \"OTRS (Open Ticket Request System)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-2006308185\"]\r\n\t}, {\r\n\t\t\"cms\": \"Bosch Security Systems (Camera)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1702769256\"]\r\n\t}, {\r\n\t\t\"cms\": \"Node-RED\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"321591353\"]\r\n\t}, {\r\n\t\t\"cms\": \"motionEye (camera)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-923693877\"]\r\n\t}, {\r\n\t\t\"cms\": \"Saia Burgess Controls – PCD\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1547576879\"]\r\n\t}, {\r\n\t\t\"cms\": \"Arcadyan o2 box (Network)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1479202414\"]\r\n\t}, {\r\n\t\t\"cms\": \"D-Link (Network)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1081719753\"]\r\n\t}, {\r\n\t\t\"cms\": \"Abilis (Network/Automation)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-166151761\"]\r\n\t}, {\r\n\t\t\"cms\": \"Ghost (CMS)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1231681737\"]\r\n\t}, {\r\n\t\t\"cms\": \"Airwatch\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"321909464\"]\r\n\t}, {\r\n\t\t\"cms\": \"Airwatch\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1153873472\"]\r\n\t}, {\r\n\t\t\"cms\": \"Airwatch\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1095915848\"]\r\n\t}, {\r\n\t\t\"cms\": \"Airwatch\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"788771792\"]\r\n\t}, {\r\n\t\t\"cms\": \"Airwatch\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1863663974\"]\r\n\t}, {\r\n\t\t\"cms\": \"KeyHelp (Keyweb AG)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1267819858\"]\r\n\t}, {\r\n\t\t\"cms\": \"KeyHelp (Keyweb AG)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"726817668\"]\r\n\t}, {\r\n\t\t\"cms\": \"GLPI\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1474875778\"]\r\n\t}, {\r\n\t\t\"cms\": \"Netcom Technology\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"5471989\"]\r\n\t}, {\r\n\t\t\"cms\": \"CradlePoint\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1457536113\"]\r\n\t}, {\r\n\t\t\"cms\": \"MyASP\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-736276076\"]\r\n\t}, {\r\n\t\t\"cms\": \"Intelbras SA\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1343070146\"]\r\n\t}, {\r\n\t\t\"cms\": \"Lenel\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"538585915\"]\r\n\t}, {\r\n\t\t\"cms\": \"OkoFEN Pellematic\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-625364318\"]\r\n\t}, {\r\n\t\t\"cms\": \"SimpleHelp (Remote Support)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1117165781\"]\r\n\t}, {\r\n\t\t\"cms\": \"GraphQL\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1067420240\"]\r\n\t}, {\r\n\t\t\"cms\": \"DNN (CMS)\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1465479343\"]\r\n\t}, {\r\n\t\t\"cms\": \"Apple\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1232159009\"]\r\n\t}, {\r\n\t\t\"cms\": \"Apple\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1382324298\"]\r\n\t}, {\r\n\t\t\"cms\": \"Apple\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1498185948\"]\r\n\t}, {\r\n\t\t\"cms\": \"ISPConfig\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"483383992\"]\r\n\t}, {\r\n\t\t\"cms\": \"Microsoft Outlook\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1249852061\"]\r\n\t}, {\r\n\t\t\"cms\": \"Hikvision IP Camera\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"999357577\"]\r\n\t}, {\r\n\t\t\"cms\": \"IP Camera\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"492290497\"]\r\n\t}, {\r\n\t\t\"cms\": \"AfterLogicWebMail系统\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-194791768\"]\r\n\t}, {\r\n\t\t\"cms\": \"B2Bbuilder\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"492941040\"]\r\n\t}, {\r\n\t\t\"cms\": \"深信服下一代防火墙管理系统\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"123821839\"]\r\n\t}, {\r\n\t\t\"cms\": \"深信服WEB防篡改管理系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"WEB防篡改\",\"cgi-bin/tamper_admin.cgi\"]\r\n\t}, {\r\n\t\t\"cms\": \"YApi 可视化接口管理平台\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"YApi\",\"id=\\\"yapi\\\"\",\"prd\",\"可视化接口管理平台\"]\r\n\t}, {\r\n\t\t\"cms\": \"JumpServer 堡垒机\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1162630024\"]\r\n\t}, {\r\n\t\t\"cms\": \"WeiPHP\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"weiphp.css\",\"weiphp\",\"Public/static\"]\r\n\t}, {\r\n\t\t\"cms\": \"Nagios XI\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"Nagios XI\",\"nagiosxi\",\"Nagios\"]\r\n\t}, {\r\n\t\t\"cms\": \"ShowDoc\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1969934080\"]\r\n\t}, {\r\n\t\t\"cms\": \"群晖 NAS\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"DiskStation\",\"webman/modules\",\"NAS\"]\r\n\t}, {\r\n\t\t\"cms\": \"协达OA\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1850889691\"]\r\n\t}, {\r\n\t\t\"cms\": \"山石网科 防火墙\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"Hillstone\",\"licenseAggrement\",\"GLOBAL_CONFIG.js\"]\r\n\t}, {\r\n\t\t\"cms\": \"360天堤新一代智慧防火墙\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"360天堤\",\"360\",\"360防火墙\"]\r\n\t}, {\r\n\t\t\"cms\": \"360网神防火墙系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"resources/image/logo_header.png\",\"360\",\"网神防火墙系统\"]\r\n\t}, {\r\n\t\t\"cms\": \"网神SecGate 3600防火墙\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"网神SecGate\",\"3600防火墙\",\"css/lsec/login.css\"]\r\n\t}, {\r\n\t\t\"cms\": \"蓝盾防火墙\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"蓝盾\",\"Bluedon\",\"default/js/act/login.js\"]\r\n\t}, {\r\n\t\t\"cms\": \"LanProxy\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"LanProxy\",\"password\",\"lanproxy-config\"]\r\n\t}, {\r\n\t\t\"cms\": \"ManageEngine ADManager Plus\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"ADManager\",\"Hashtable.js\",\"ManageEngine\"]\r\n\t}, {\r\n\t\t\"cms\": \"phpshe 商城系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"Powered by phpshe\",\"include/js/global.js\"]\r\n\t}, {\r\n\t\t\"cms\": \"骑士 74CMS\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"74cms\",\"qscms.root\",\"index.php\"]\r\n\t}, {\r\n\t\t\"cms\": \"Apache2 Debian 默认页\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"Apache2 Debian Default\",\"It works!\",\"Debian Logo\"]\r\n\t}, {\r\n\t\t\"cms\": \"Grafana\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"Grafana\",\"login\",\"grafana-app\"]\r\n\t}, {\r\n\t\t\"cms\": \"Canal Admin\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"Canal Admin\",\"js/app\"]\r\n\t}, {\r\n\t\t\"cms\": \"IBOS酷办公OA系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"IBOS\",\"login-panel\",\"loginsubmit\"]\r\n\t}, {\r\n\t\t\"cms\": \"若依(RuoYi)-管理系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"ry-ui\",\"username\",\"rememberme\"]\r\n\t}, {\r\n\t\t\"cms\": \"中新金盾信息安全管理系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"中新金盾信息安全管理系统\",\"login\",\"useusbkey\"]\r\n\t}, {\r\n\t\t\"cms\": \"中成科信 综合管理平台\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1632964065\"]\r\n\t}, {\r\n\t\t\"cms\": \"VMware vCenter\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"VMware\",\"ID_VISDK\",\"download\"]\r\n\t}, {\r\n\t\t\"cms\": \"AWS S3 Bucket\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"InvalidBucketName\",\"aliyuncs\"]\r\n\t}, {\r\n\t\t\"cms\": \"网心云设备\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"网心云设备\",\"favicon.png\"]\r\n\t}, {\r\n\t\t\"cms\": \"深信服 NGAF\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"SANGFOR\",\"NGAF\",\"login\"]\r\n\t}, {\r\n\t\t\"cms\": \"IBM HTTP Server\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"IBM HTTP Server\",\"Support\"]\r\n\t}, {\r\n\t\t\"cms\": \"nps\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"nps\",\"ehang\",\"login\"]\r\n\t}, {\r\n\t\t\"cms\": \"Webmin\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"Webmin\",\"session_login\"]\r\n\t}, {\r\n\t\t\"cms\": \"群晖 DiskStation\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"DiskStation\",\"文件服务器\",\"modules\"]\r\n\t}, {\r\n\t\t\"cms\": \"锐捷 SSLVPN\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"SSLVPN\",\"rjweb\",\"login\"]\r\n\t}, {\r\n\t\t\"cms\": \"蜂网企业流控云路由器\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"ifw8\",\"企业级流控云路由器\",\"login\"]\r\n\t}, {\r\n\t\t\"cms\": \"网御 安全网关\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"安全系统\",\"网御星云\",\"login\"]\r\n\t}, {\r\n\t\t\"cms\": \"Citrix Access Gateway\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"Citrix Access Gateway\",\"login\"]\r\n\t}, {\r\n\t\t\"cms\": \"深信服安全感知平台\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"安全感知平台\",\"login.js\",\"apps\"]\r\n\t}, {\r\n\t\t\"cms\": \"Apache2 Ubuntu 默认页\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"Apache2 Ubuntu Default Page\",\"ubuntu-logo.png\"]\r\n\t}, {\r\n\t\t\"cms\": \"帆软报表-FineReport\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"ReportServer\",\"=fs\"]\r\n\t}, {\r\n\t\t\"cms\": \"CAS 单点登录\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"Central Authentication Service\",\"cas/login\"]\r\n\t}, {\r\n\t\t\"cms\": \"海康威视 流媒体管理服务器\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"流媒体管理服务器\",\"MSHTML\",\"login\"]\r\n\t}, {\r\n\t\t\"cms\": \"noVNC 远程访问\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"noVNC\",\"<span>no</span>\",\"host\"]\r\n\t}, {\r\n\t\t\"cms\": \"MessageSolution Enterprise Email Archiving (EEA)\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"MessageSolution\",\"index.jsp\"]\r\n\t}, {\r\n\t\t\"cms\": \"阿里巴巴otter manager\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"Otter Manager\",\"channelList\"]\r\n\t}, {\r\n\t\t\"cms\": \"VMware vRealize Operations Manager\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"vRealize\",\"VMware\",\"Identity Manager\"]\r\n\t}, {\r\n\t\t\"cms\": \"H3C-ER3200 路由器\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"ER3200\",\"home.asp\",\"h3c.com\"]\r\n\t}, {\r\n\t\t\"cms\": \"安恒云堡垒机\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"DBAPPSecurity\",\"安恒云堡垒机\"]\r\n\t}, {\r\n\t\t\"cms\": \"安恒明御安全网关\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"title\",\r\n\t\t\"keyword\": [\"明御安全网关\"]\r\n\t}, {\r\n\t\t\"cms\": \"Citrix 虚拟桌面\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1272756243\"]\r\n\t}, {\r\n\t\t\"cms\": \"SeaweedFS\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1210969935\"]\r\n\t}, {\r\n\t\t\"cms\": \"FreeRDP 远程RDP工具\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-2052468252\"]\r\n\t}, {\r\n\t\t\"cms\": \"Apache ActiveMQ\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1766699363\"]\r\n\t}, {\r\n\t\t\"cms\": \"Apache-Skywalking\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1929532064\"]\r\n\t}, {\r\n\t\t\"cms\": \"Parallels Default page\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1050786453\"]\r\n\t}, {\r\n\t\t\"cms\": \"Plesk 面板\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-134375033\"]\r\n\t}, {\r\n\t\t\"cms\": \"DzzOffice 开源办公系统\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1961736892\"]\r\n\t}, {\r\n\t\t\"cms\": \"网康科技网关/防火墙\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"5471989\"]\r\n\t}, {\r\n\t\t\"cms\": \"ThinkPHP\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"header\",\r\n\t\t\"keyword\": [\"ThinkPHP\"]\r\n\t}, {\r\n\t\t\"cms\": \"SuperMap iServer Web Manager\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1740191553\"]\r\n\t}, {\r\n\t\t\"cms\": \"协众OA\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1466673461\"]\r\n\t}, {\r\n\t\t\"cms\": \"Jellyfin\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-2069226242\"]\r\n\t}, {\r\n\t\t\"cms\": \"孚盟云 CRM\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1533124028\"]\r\n\t}, {\r\n\t    \"cms\": \"协众OA\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"scripts/cnoa.extra.js\"]\r\n\t}, {\r\n\t\t\"cms\": \"FastAdmin 框架\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"assets/img/favicon.ico\",\"bootstrap.min.css\",\"navbar-toggle\"]\r\n\t}, {\r\n\t\t\"cms\": \"FastAdmin 框架\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"ajax\\\\/upload\",\"assets/img/favicon.ico\",\"fastadmin\"]\r\n\t}, {\r\n\t    \"cms\": \"imo云办公室\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"<a title=\\\"imo云办公室\\\"\"]\r\n\t}, {\r\n\t    \"cms\": \"imo云办公室\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"高效率网上办公平台\",\"imo_setup.exe\"]\r\n\t}, {\r\n\t    \"cms\": \"永中DCS\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"<title>永中文档在线预览DCS</title>\",\"www.yozodcs.com\"]\r\n\t}, {\r\n\t    \"cms\": \"JeecgBoot\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"JeecgBoot\",\"polyfill_\"]\r\n\t}, {\r\n\t    \"cms\": \"帆软数据决策系统\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\">数据决策系统\",\"ReportServer?op\"]\r\n\t}, {\r\n\t    \"cms\": \"金山TimeOn云杀毒\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"<title>TimeOn\",\"iepngfix/iepngfix_tilebg.js\"]\r\n\t}, {\r\n\t    \"cms\": \"金山终端安全\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"终端安全系统\",\"setup/kanclient.exe\",\"iepngfix/iepngfix_tilebg.js\"]\r\n\t }, {\r\n\t    \"cms\": \"YzmCMS\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"YzmCMS\",\"yzm-common.css\"]\r\n\t }, {\r\n\t    \"cms\": \"微擎 - 公众平台自助引擎\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"微擎 - 公众平台自助引擎\",\"www.w7.cc\",\"login\"]\r\n\t }, {\r\n\t    \"cms\": \"Jspxcms\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"- Powered by Jspxcms\",\"template/\"]\r\n\t }, {\r\n\t    \"cms\": \"WordPress\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"wp-admin\",\"wp-content/\"]\r\n\t }, {\r\n\t    \"cms\": \"WordPress\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"wp-\",\"wp-content/themes/\"]\r\n\t }, {\r\n\t    \"cms\": \"金合OA\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"Jhsoft.Web.login\",\"PassWord.aspx\"]\r\n\t }, {\r\n\t    \"cms\": \"好视通视频会议系统\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"用户登录\",\"resources/commonImage/favicon.ico\",\"login/createQRCode.do\"]\r\n\t }, {\r\n\t    \"cms\": \"LANMP 默认页面\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"<title>LANMP\",\"<strong>恭喜\",\"wdlinux.cn\",\"本页可删除\"]\r\n\t }, {\r\n\t    \"cms\": \"CentOS 默认页面\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"<title>Welcome to CentOS</title>\",\"img/centos-logo.png\",\"centos.org\"]\r\n\t }, {\r\n\t    \"cms\": \"百度 ueditor编辑器\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"ueditor.all.js\",\"UE.getEditor\"]\r\n\t }, {\r\n\t    \"cms\": \"蓝凌EIS智慧协同平台\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"/scripts/jquery.landray.common.js\",\"蓝凌软件\"]\r\n\t }, {\r\n\t    \"cms\": \"phpinfo\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"<title>phpinfo\",\"Virtual Directory Support\"]\r\n\t }, {\r\n\t    \"cms\": \"Kyan 监控设备\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"login_files\",\"platform\",\"欢迎登陆系统\"]\r\n\t }, {\r\n\t    \"cms\": \"Hue 大数据框架\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"Welcome to Hue\",\"Query. Explore.\",\"login\"]\r\n\t }, {\r\n\t    \"cms\": \"亿邮邮件系统\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"eYou\",\"q=login\",\"tpl/user\"]\r\n\t }, {\r\n\t    \"cms\": \"亿邮邮件系统\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"eYou\",\"q=help\",\"tpl/user\"]\r\n\t }, {\r\n\t    \"cms\": \"XAMPP 默认页面\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"title\",\r\n\t    \"keyword\": [\"Welcome to XAMPP\"]\r\n\t }, {\r\n\t    \"cms\": \"网神下一代极速防火墙\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"网神信息技术\",\"login\",\"防火墙\"]\r\n\t }, {\r\n\t    \"cms\": \"中腾OA\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"systemAction\",\"zt_webframe\",\"login\"]\r\n\t }, {\r\n\t    \"cms\": \"新软科技-极通EWEBS\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"N-soft\",\"ClientDownload.xgi\"]\r\n\t }, {\r\n\t    \"cms\": \"Igenus邮件系统\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"iGENUS\",\"login.php\",\"language\"]\r\n\t }, {\r\n\t    \"cms\": \"图创图书馆集群管理系统\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"interlib/common/\",\"self.location.href\"]\r\n\t }, {\r\n\t    \"cms\": \"华天动力OA\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"OAapp/WebObjects/OAapp.woa\",\"window.location\"]\r\n\t }, {\r\n\t    \"cms\": \"JEECMS\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"/r/cms/www\",\"shortcut icon\"]\r\n\t }, {\r\n\t    \"cms\": \"Apache Hadoop\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"static/hadoop-st.png\",\"Cluster\"]\r\n\t }, {\r\n\t    \"cms\": \"TamronOS IPTV系统\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"TamronOS\",\"loginbox\",\"tamronos.com\"]\r\n\t }, {\r\n\t    \"cms\": \"锐捷 RG-EW1200G\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"锐捷\",\"/static/img/title.ico\",\"/js/app\"]\r\n\t }, {\r\n\t    \"cms\": \"H3C Web网管\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"webui\",\"Web网管用户登录\",\"china_logo.jpg\"]\r\n\t }, {\r\n\t    \"cms\": \"H3C ER6300G2\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"ER6300G2\",\"h3c.com\",\"login\"]\r\n\t }, {\r\n\t    \"cms\": \"H3C ER3100\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"ER3100\",\"h3c.com\",\"login\"]\r\n\t }, {\r\n\t    \"cms\": \"SDCMS神盾内容管理系统\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"sdcms\",\"login\"]\r\n\t }, {\r\n\t    \"cms\": \"锐捷 SSLVPN\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"SSLVPN\",\"rjsslvpn_encookie\",\"login\"]\r\n\t }, {\r\n\t    \"cms\": \"天迈科技网络视频监控系统\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"jsessionid\",\"天迈科技\",\"网络视频监控系统\"]\r\n\t }, {\r\n\t    \"cms\": \"WIFISKY-7层流控路由器\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"WIFISKY\",\"adminusr\",\"深圳市领空技术\"]\r\n\t }, {\r\n\t    \"cms\": \"后台\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"title\",\r\n\t    \"keyword\": [\"后台\"]\r\n\t }, {\r\n\t    \"cms\": \"MinIO\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"title\",\r\n\t    \"keyword\": [\"MinIO Browser\"]\r\n\t }, {\r\n\t    \"cms\": \"Consul by HashiCorp\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"title\",\r\n\t    \"keyword\": [\"Consul\"]\r\n\t }, {\r\n\t    \"cms\": \"TVT 公司产品\",\r\n\t    \"method\": \"faviconhash\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"492290497\"]\r\n\t }, {\r\n\t    \"cms\": \"资产灯塔系统\",\r\n\t    \"method\": \"faviconhash\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"1708240621\"]\r\n\t }, {\r\n\t    \"cms\": \"锐捷 NBR 路由器\",\r\n\t    \"method\": \"faviconhash\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"738520282\"]\r\n\t }, {\r\n\t    \"cms\": \"二级域名分发系统\",\r\n\t    \"method\": \"faviconhash\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"-2055778861\"]\r\n\t }, {\r\n\t    \"cms\": \"致远 Analytics Cloud 分析云\",\r\n\t    \"method\": \"faviconhash\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"410106848\"]\r\n\t }, {\r\n\t    \"cms\": \"景云网络防病毒系统\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"styles/images/logo.png\",\"login_form\",\"防病毒\"]\r\n\t }, {\r\n\t    \"cms\": \"VA 虚拟应用管理平台\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"Res/Images/logo_va.png\",\"panel_login\"]\r\n\t }, {\r\n\t    \"cms\": \"用友 NC Cloud\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"platform/pub/welcome.do\"]\r\n\t }, {\r\n\t    \"cms\": \"GitBook\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"content=\\\"GitBook\",\"gitbook\"]\r\n\t }, {\r\n\t    \"cms\": \"Outlook\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"owa/auth\",\"Outlook\",\"logonDiv\"]\r\n\t }, {\r\n\t    \"cms\": \"万户网络ezEIP\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"Powered By wanhu - www.wanhu.com.cn\",\"ezEip\"]\r\n\t }, {\r\n\t    \"cms\": \"海康威视联网网关\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"独立运行(无平台)\",\"login_form\"]\r\n\t }, {\r\n\t    \"cms\": \"阿姆瑞特智能DNS\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"DNS\",\"main.php?mod=member\",\"DNS_\"]\r\n\t }, {\r\n\t    \"cms\": \"PHPOA 协同办公软件\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"login.php\",\"提示信息\",\"showMsg\"]\r\n\t }, {\r\n\t    \"cms\": \"明致 OA\",\r\n\t    \"method\": \"faviconhash\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"1591287747\"]\r\n\t }, {\r\n\t    \"cms\": \"JBoss EAP\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"title>EAP\",\"eap.css\",\"JBoss\"]\r\n\t }, {\r\n\t    \"cms\": \"若依\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"ruoyi\",\"若依\",\"login\"]\r\n\t }, {\r\n\t    \"cms\": \"万户 OA\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"defaultroot\",\"Logon!logon.action\",\"domainAccount\"]\r\n\t }, {\r\n\t    \"cms\": \"全息AI弱电网络综合运维平台\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"全息AI\",\"g_is_hk\",\"login\"]\r\n\t }, {\r\n\t    \"cms\": \"天融信产品\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"<TITLE>Web User Login\",\"loginCheck\"]\r\n\t }, {\r\n\t    \"cms\": \"天融信VPN\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"header\",\r\n\t    \"keyword\": [\"topsecsvportalstyle\"]\r\n\t }, {\r\n\t    \"cms\": \"天融信WEB应用安全防护系统\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"module=login\",\"topsec\",\"login\"]\r\n\t }, {\r\n\t    \"cms\": \"天融信 Reporter\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"Login @ Reporter\",\"topsec\",\"login\"]\r\n\t }, {\r\n\t    \"cms\": \"易瑞授权访问系统\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"title\",\r\n\t    \"keyword\": [\"易瑞授权访问系统\"]\r\n\t }, {\r\n\t    \"cms\": \"E-Tiller\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"北京勤云\",\"reader/view_abstract.aspx\"]\r\n\t }, {\r\n\t    \"cms\": \"FangMail\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"fangmail/default/css/em_css.css\",\"fangmail/cgi/index.cgi\"]\r\n\t }, {\r\n\t    \"cms\": \"Tencent-Exmail\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"header\",\r\n\t    \"keyword\": [\"ssl_edition=mail.qq.com\"]\r\n\t }, {\r\n\t    \"cms\": \"Tencent-Exmail\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"cgi-bin/getinvestigate?flowid=\",\"cgi-bin/bizmail_portal\"]\r\n\t }, {\r\n\t    \"cms\": \"Jira\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"jira.webresources\",\"com.atlassian.plugins\"]\r\n\t }, {\r\n\t    \"cms\": \"FishEye\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"header\",\r\n\t    \"keyword\": [\"FESESSIONID=\"]\r\n\t }, {\r\n\t    \"cms\": \"天玥网络安全审计系统\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"天玥\",\"venustech\",\"func_login\"]\r\n\t }, {\r\n\t    \"cms\": \"金航网上阅卷系统\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"金航\",\"jsyj\",\"衡水金航\"]\r\n\t }, {\r\n\t    \"cms\": \"科脉·蛙笑在线商业管理软件\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"Kemai\",\"Login.aspx\",\"科脉\"]\r\n\t }, {\r\n\t    \"cms\": \"朗拓健康医院管理系统\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"static/mq/yaoxun_pbm_im.js\",\"js/app.\"]\r\n\t }, {\r\n\t    \"cms\": \"品德科技医学在线考试系统\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"考试系统\",\"品德\",\"login.aspx\"]\r\n\t }, {\r\n\t    \"cms\": \"SPON IP网络对讲广播系统\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"spon_base64.js\",\"login\"]\r\n\t }, {\r\n\t    \"cms\": \"NVS3000综合视频监控平台\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"视频监控\",\"NVS3000综合\",\"login\"]\r\n\t }, {\r\n\t    \"cms\": \"银达汇智 智慧综合管理平台\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"miniui\",\"Help ?\",\"main.aspx\"]\r\n\t }, {\r\n\t    \"cms\": \"云信通短信运营管理平台\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"短信\",\"Simpla\",\"chklogin.aspx\"]\r\n\t }, {\r\n\t    \"cms\": \"AceNet 驰崴防火墙\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"Technology\",\"login_commit.php\"]\r\n\t }, {\r\n\t    \"cms\": \"Teleport 堡垒机\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"TELEPORT\",\"teleport.js\",\"login-account\"]\r\n\t }, {\r\n\t    \"cms\": \"天融信-上网行为管理系统\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"images/logo3.gif\",\"dkey_activex_download.php\",\"login_commit.php\"]\r\n\t }, {\r\n\t    \"cms\": \"Yii框架\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"yii.js\",\"yii.\"]\r\n\t }, {\r\n\t    \"cms\": \"PHP\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"header\",\r\n\t    \"keyword\": [\"PHP/\"]\r\n\t }, {\r\n\t    \"cms\": \"WPS 部署可视化平台\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"title\",\r\n\t    \"keyword\": [\"WPS 部署可视化平台\"]\r\n\t }, {\r\n\t    \"cms\": \"phpstydy Windows\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"title\",\r\n\t    \"keyword\": [\"phpstudy for windows\"]\r\n\t }, {\r\n\t    \"cms\": \"有WAF\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"header\",\r\n\t    \"keyword\": [\"WAF/\"]\r\n\t }, {\r\n\t    \"cms\": \"移动云 WAF\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"header\",\r\n\t    \"keyword\": [\"CloudWAF\"]\r\n\t }, {\r\n\t    \"cms\": \"epoint政务服务系统\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"epoint-web-zwdt\"]\r\n\t }, {\r\n\t    \"cms\": \"奥联通讯管理平台\",\r\n\t    \"method\": \"faviconhash\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"-1356973161\"]\r\n\t }, {\r\n\t    \"cms\": \"百傲瑞达\",\r\n\t    \"method\": \"faviconhash\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"-1169502834\"]\r\n\t }, {\r\n\t    \"cms\": \"明源云ERP\",\r\n\t    \"method\": \"faviconhash\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"-626335361\"]\r\n\t }, {\r\n\t    \"cms\": \"天智智慧医院综合质量监管平台\",\r\n\t    \"method\": \"faviconhash\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"1986460035\"]\r\n\t }, {\r\n\t    \"cms\": \"明源云ERP\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"title\",\r\n\t    \"keyword\": [\"明源云ERP\"]\r\n\t }, {\r\n\t    \"cms\": \"Minio Browser\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"title\",\r\n\t    \"keyword\": [\"Minio Browser\"]\r\n\t }, {\r\n\t    \"cms\": \"管理后台登录\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"title\",\r\n\t    \"keyword\": [\"管理员\",\"登录\"]\r\n\t }, {\r\n\t    \"cms\": \"360天擎\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"title\",\r\n\t    \"keyword\": [\"360天擎\"]\r\n\t }, {\r\n\t    \"cms\": \"博华网龙信息安全一体机\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"title\",\r\n\t    \"keyword\": [\"博华网龙信息安全一体机\"]\r\n\t }, {\r\n\t    \"cms\": \"LNMP一键安装包默认页面\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"title\",\r\n\t    \"keyword\": [\"LNMP一键安装包\"]\r\n\t }, {\r\n\t    \"cms\": \"HDWiki\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"header\",\r\n\t    \"keyword\": [\"hd_sid=\"]\r\n\t }, {\r\n\t    \"cms\": \"深圳锐明行驶记录仪\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"title\",\r\n\t    \"keyword\": [\"登录您的MDVR\"]\r\n\t }, {\r\n\t    \"cms\": \"Drupal\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"header\",\r\n\t    \"keyword\": [\"drupal\"]\r\n\t }, {\r\n\t    \"cms\": \"Huawei user-login\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"header\",\r\n\t    \"keyword\": [\"Huawei Auth-Http\"]\r\n\t }, {\r\n\t    \"cms\": \"Prometheus Server\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"title\",\r\n\t    \"keyword\": [\"Prometheus Time Series Collection and Processing Server\"]\r\n\t }, {\r\n\t    \"cms\": \"Kubernetes\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"title\",\r\n\t    \"keyword\": [\"Kubernetes Dashboard\"]\r\n\t }, {\r\n\t    \"cms\": \"easypanel\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"easypanel\",\"vhost\",\"login\"]\r\n\t }, {\r\n\t    \"cms\": \"VMware Horizon\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"VMware\",\"ui-page\",\"portal/favicon\"]\r\n\t }, {\r\n\t    \"cms\": \"明源云 ERP\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"PubPlatform\",\"明源云\",\"LoginHandler\"]\r\n\t }, {\r\n\t    \"cms\": \"VMware Horizon\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"title\",\r\n\t    \"keyword\": [\"VMware Horizon\"]\r\n\t }, {\r\n\t    \"cms\": \"迪普VPN\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"dptech_ssl\",\"sslvpn\",\"loginAPI.js\"]\r\n\t }, {\r\n\t    \"cms\": \"OpenShift Web Console\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"title\",\r\n\t    \"keyword\": [\"OpenShift Web Console\"]\r\n\t }, {\r\n\t    \"cms\": \"好视通\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"fsmeeting\",\"loginCheck.do\",\"app.result\"]\r\n\t }, {\r\n\t    \"cms\": \"碧海云盒\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"碧海云盒\",\"mt_login\",\"login.php\"]\r\n\t }, {\r\n\t    \"cms\": \"PhpWind\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"content=\\\"phpwind\"]\r\n\t }, {\r\n\t    \"cms\": \"CmsEasy\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"content=\\\"CmsEasy\"]\r\n\t }, {\r\n\t    \"cms\": \"EmpireCMS\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"title\",\r\n\t    \"keyword\": [\"Powered by EmpireCMS\"]\r\n\t }, {\r\n\t    \"cms\": \"Emlog\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"content=\\\"emlog\\\"\"]\r\n\t }, {\r\n\t    \"cms\": \"ECShop\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"content=\\\"ECSHOP\"]\r\n\t }, {\r\n\t    \"cms\": \"大汉版通-Hanweb-system\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"大汉版通\",\"大汉网络\",\"hanweb.com' style='display:none'\"]\r\n\t }, {\r\n\t    \"cms\": \"ESPCMS\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"title\",\r\n\t    \"keyword\": [\"powered by espcms\"]\r\n\t }, {\r\n\t    \"cms\": \"KesionCMS\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"ks_inc/common.js\",\"KesionCMS\"]\r\n\t }, {\r\n\t    \"cms\": \"东营金石软件\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"aspNetHidden\",\"loginselect\",\"txtLoginName\"]\r\n\t }, {\r\n\t    \"cms\": \"皓峰防火墙\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"title\",\r\n\t    \"keyword\": [\"皓峰防火墙系统登录\"]\r\n\t }, {\r\n\t    \"cms\": \"CMSTop\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"css/cmstop-common.css\",\"js/cmstop-common.js\"]\r\n\t }, {\r\n\t    \"cms\": \"华域Reporter\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"reporter\",\"login\",\"action.php\"]\r\n\t }, {\r\n\t    \"cms\": \"智邦国际-企业管理软件\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"index2.asp\",\"update/exec.asp\",\"images/full.gif\"]\r\n\t }, {\r\n\t    \"cms\": \"电信网关配置管理系统\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"<TITLE>系统登录\",\"login.php\",\"img/login_bg3.png\",\"360.cn\"]\r\n\t }, {\r\n\t    \"cms\": \"方配在线考试系统(FPExam)\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"exam/logo/favicon.ico\",\"fangpage\"]\r\n\t }, {\r\n\t    \"cms\": \"Spring Eureka\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"<title>Eureka</title>\",\"eureka\"]\r\n\t }, {\r\n\t    \"cms\": \"迪普 SSLVPN\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"DPSSLVPN\",\"SSL VPN Service\",\"login\"]\r\n\t }, {\r\n\t    \"cms\": \"Grafana\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"<title>Grafana</title>\"]\r\n\t }, {\r\n\t    \"cms\": \"百卓byzoro-安全网关\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"北京百卓\",\"PatrolFlow\",\"login.php\"]\r\n\t }, {\r\n\t    \"cms\": \"ENESYS\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"dwr/interface/WebContextUtil.js\"]\r\n\t }, {\r\n\t    \"cms\": \"KVM_创梦云计算管理系统\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"<title>KVM_创梦云计算管理系统</title>\"]\r\n\t }, {\r\n\t    \"cms\": \"任我行-管家婆分销ERP\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"分销ERP\",\"txt_DbName\",\"DownloadDriver.asp\"]\r\n\t }, {\r\n\t    \"cms\": \"小黄豆CRM\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"xhdcrm\",\"JS/XHD.js\",\"login.check.xhd\"]\r\n\t }, {\r\n\t    \"cms\": \"Nnetgear 路由器\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"header\",\r\n\t    \"keyword\": [\"NETGEAR\"]\r\n\t }, {\r\n\t    \"cms\": \"Metabase\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"title\",\r\n\t    \"keyword\": [\"Metabase\"]\r\n\t }, {\r\n\t    \"cms\": \"4images\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"Powered by <b>4images\",\"4homepages\"]\r\n\t }, {\r\n\t    \"cms\": \"Finecms\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"content=\\\"FineCMS\"]\r\n\t }, {\r\n\t    \"cms\": \"NUUO 摄像头\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"title\",\r\n\t    \"keyword\": [\"Network Video Recorder Login\"]\r\n\t }, {\r\n\t    \"cms\": \"Apache ShenYu\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"id=\\\"httpPath\",\"th:text=\\\"${domain}\"]\r\n\t }, {\r\n\t    \"cms\": \"Solar 网络管理系统\",\r\n\t    \"method\": \"faviconhash\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"-1871496583\"]\r\n\t }, {\r\n\t    \"cms\": \"畅捷CRM\",\r\n\t    \"method\": \"faviconhash\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"-1068428644\"]\r\n\t }, {\r\n\t    \"cms\": \"悟空CRM\",\r\n\t    \"method\": \"faviconhash\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"872805507\"]\r\n\t }, {\r\n\t    \"cms\": \"用友GRP-U8 新政府会计制度专版\",\r\n\t    \"method\": \"faviconhash\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"-299520369\"]\r\n\t }, {\r\n\t    \"cms\": \"e-cology 运维管理平台\",\r\n\t    \"method\": \"faviconhash\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"-384583337\"]\r\n\t }, {\r\n\t    \"cms\": \"瑞友天翼－应用虚拟化系统\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"DownLoad.XGI\",\"realor.cn\",\"dvLogin\"]\r\n\t }, {\r\n\t    \"cms\": \"H3C SecPath 运维审计系统\",\r\n\t    \"method\": \"faviconhash\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"1776863739\"]\r\n\t }, {\r\n\t    \"cms\": \"信呼 OA\",\r\n\t    \"method\": \"faviconhash\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"1652488516\"]\r\n\t }, {\r\n\t    \"cms\": \"MeterSphere\",\r\n\t    \"method\": \"faviconhash\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"1023469568\"]\r\n\t }, {\r\n\t    \"cms\": \"H2 Database Console\",\r\n\t    \"method\": \"faviconhash\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"-525659379\"]\r\n\t }, {\r\n\t    \"cms\": \"天融信设备\",\r\n\t    \"method\": \"faviconhash\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"-2019013898\"]\r\n\t }, {\r\n\t    \"cms\": \"慧林ICP/iP备案系统\",\r\n\t    \"method\": \"faviconhash\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"-556918553\"]\r\n\t }, {\r\n\t    \"cms\": \"飞鱼星路由器/行为管理\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"content=\\\"0.2;\",\"/home/login.html\"]\r\n\t }, {\r\n\t    \"cms\": \"化视私云CDN直播加速服务器\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"img/dl.gif\",\"华视美达\",\"login.php\"]\r\n\t }, {\r\n\t    \"cms\": \"冰峰网络 iceflow\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"Web 配置中心\",\"/images/splash.jpg\"]\r\n\t }, {\r\n\t    \"cms\": \"华夏 ERP\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"jshERP-boot\",\"platformConfig\"]\r\n\t }, {\r\n\t    \"cms\": \"78 OA\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"/resource/javascript/system/runtime.min.js\",\"password\"]\r\n\t }, {\r\n\t    \"cms\": \"EnterCRM\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"杭州恩软\",\"Ent.base.js\"]\r\n\t }, {\r\n\t    \"cms\": \"ITC-CMS\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"/mt_res_v3/js/common/common.js\",\"<title>CMS\"]\r\n\t }, {\r\n\t    \"cms\": \"Panabit-Panalog\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"img/logo.gif\",\"Maintain\",\"unamexx\",\"img/12.png\"]\r\n\t }, {\r\n\t    \"cms\": \"用友-畅捷通OEM\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"GNRemote.dll\",\"Web_sc/login.gn\"]\r\n\t }, {\r\n\t    \"cms\": \"华为AR Web管理平台\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"Huawei\",\"simple/style/default/image/login.png\",\"simple/view/ossn.html\"]\r\n\t }, {\r\n\t    \"cms\": \"铭飞 MCMS\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"ms.js\",\"ms.http.js\",\"plugins\"]\r\n\t }, {\r\n\t    \"cms\": \"向日葵-SunLogin\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"{\\\"success\\\":false,\\\"msg\\\":\\\"Verification failure\\\"}\"]\r\n\t }, {\r\n\t    \"cms\": \"GROWATT 系统\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"login\",\"v3/js/odm/odm.js\"]\r\n\t }, {\r\n\t    \"cms\": \"锐捷防火墙\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"下一代防火墙\",\"锐捷网络\"]\r\n\t }, {\r\n\t    \"cms\": \"天融信应用交付系统\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"TopApp-AD\"]\r\n\t }, {\r\n\t    \"cms\": \"慧林信息安全管理系统\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"用户管理登录\",\"login\",\"images/zh-CN/login_03.gif\"]\r\n\t }, {\r\n\t    \"cms\": \"华为云桌面\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"Desktop@FusionAccess\",\"/webui/\"]\r\n\t }, {\r\n\t    \"cms\": \"齐治堡垒机\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"fp_download\",\"login.php\",\"logo-icon-ico72.png\"]\r\n\t }, {\r\n\t    \"cms\": \"TurboMail 邮件系统\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"TurboMail\",\"mailmain?type=login\"]\r\n\t }, {\r\n\t    \"cms\": \"安恒数据大脑API网关\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"mssp-fe\",\"/static/imgs/logo.png\"]\r\n\t }, {\r\n\t    \"cms\": \"山石网科云数据库审计与防护系统\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"#!/dbSummary\",\"/lib/colResizable/\"]\r\n\t }, {\r\n\t    \"cms\": \"青年软件OA\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"/Content/qrlib/ligerUI/skins/\"]\r\n\t }, {\r\n\t    \"cms\": \"金山终端安全管理系统\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"iepngfix/iepngfix_tilebg.js\",\"mysqlStat\"]\r\n\t }, {\r\n\t    \"cms\": \"多媒体信息发布系统\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"header\",\r\n\t    \"keyword\": [\"HowFor Web\"]\r\n\t }, {\r\n\t    \"cms\": \"亿赛通(DLP)\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"CDGServer3\",\"welcomebg.jpg\"]\r\n\t }, {\r\n\t    \"cms\": \"百卓 Smart 多业务安全网关\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"writeCustomBgImg.jsp\",\"baseajax\",\"LoginLogo\"]\r\n\t }, {\r\n\t    \"cms\": \"中远麒麟堡垒机\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"admin.php\",\"controller=admin_index&action=login\"]\r\n\t }, {\r\n\t    \"cms\": \"移动云&绿盟日志审计系统-log4j\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"/pisces/login/\"]\r\n\t }, {\r\n\t    \"cms\": \"Apache APISIX\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"body\",\r\n\t    \"keyword\": [\"{\\\"error_msg\\\":\\\"404 Route Not Found\\\"}\"]\r\n\t }, {\r\n\t    \"cms\": \"网康科技·互联网控制网关\",\r\n\t    \"method\": \"keyword\",\r\n\t    \"location\": \"title\",\r\n\t    \"keyword\": [\"网康科技·互联网控制网关\"]\r\n\t }, {\r\n\t\t\"cms\": \"飞思网巡 IT运维系统\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1622043013\"]\r\n\t}, {\r\n\t\t\"cms\": \"Richmail 邮件系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"title\",\r\n\t\t\"keyword\": [\"RichMail\"]\r\n\t}, {\r\n\t\t\"cms\": \"Richmail 邮件系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"0;url=/webmail/\"]\r\n\t}, {\r\n\t\t\"cms\": \"Richmail 邮件系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"richmail.config.js\",\"login\"]\r\n\t}, {\r\n\t\t\"cms\": \"字节数联云桌面系统\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1142582922\"]\r\n\t}, {\r\n\t\t\"cms\": \"智跃HR人力资源管理系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"images/ZY.LOGO.64.png\"]\r\n\t}, {\r\n\t\t\"cms\": \"启迪国信 UEM管理平台\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"#commonTip\",\"css/icomoon\",\"login\",\"wwLogin\"]\r\n\t}, {\r\n\t\t\"cms\": \"金万维异速联\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"GNRemote.dll?GNFunction=\"]\r\n\t}, {\r\n\t\t\"cms\": \"JieLink+智能终端操作平台\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"JieLink<sup>+</sup>\"]\r\n\t}, {\r\n\t\t\"cms\": \"宏景eHR人力资源信息管理系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"人力资源信息管理系统\",\"hrlogon\"]\r\n\t}, {\r\n\t\t\"cms\": \"禾匠点企来客服系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"const _scriptUrl\",\"login_logo\"]\r\n\t}, {\r\n\t\t\"cms\": \"iXCache\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"iXCache\",\"/login/userverify.cgi\"]\r\n\t}, {\r\n\t\t\"cms\": \"爱信诺开票服务器\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"aisino.kps.console\"]\r\n\t}, {\r\n\t\t\"cms\": \"税控服务器管理系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"sys/login.do\",\"resources/css/login_yzm.css\"]\r\n\t}, {\r\n\t\t\"cms\": \"天擎\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"index/logo\",\"天擎</title>\"]\r\n\t}, {\r\n\t\t\"cms\": \"小鱼易连云视讯管理平台\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"font_1957344_lqkodjqdbl.css\"]\r\n\t}, {\r\n\t\t\"cms\": \"小鱼易连云视讯管理平台\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"static_source/localcdn/webrtc/web/favicon.ico\"]\r\n\t}, {\r\n\t\t\"cms\": \"厦门快普\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"jKPM6\",\"WebResource.axd\"]\r\n\t}, {\r\n\t\t\"cms\": \"iDste融合系统支撑平台\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"title\",\r\n\t\t\"keyword\": [\"iDste融合系统支撑平台\"]\r\n\t}, {\r\n\t\t\"cms\": \"大华安防 DSS\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"User\",\"<meta http-equiv=\\\"refresh\\\" content=\\\"1;URL='/admin'\\\"/>\"]\r\n\t}, {\r\n\t\t\"cms\": \"NSFOCUS 绿盟安全设备\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"header\",\r\n\t\t\"keyword\": [\"NSFOCUS\"]\r\n\t}, {\r\n\t\t\"cms\": \"迪浪云OA\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-179985729\"]\r\n\t}, {\r\n\t\t\"cms\": \"Nexus Repository Manager\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1323738809\"]\r\n\t}, {\r\n\t\t\"cms\": \"金睛云华高级威胁检测系统\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1747722638\"]\r\n\t}, {\r\n\t\t\"cms\": \"VMware Workspace ONE Access\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1250474341\"]\r\n\t}, {\r\n\t\t\"cms\": \"网防G01\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-968234332\"]\r\n\t}, {\r\n\t\t\"cms\": \"Gitblit\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"gitblt-favicon.png\",\"gitblit\"]\r\n\t}, {\r\n\t\t\"cms\": \"H3C ER8300G2-X\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"H3C\",\"vld.bmp\",\"dis_login\",\"ER8300G2\"]\r\n\t}, {\r\n\t\t\"cms\": \"锐捷交换机-睿易\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"cgi-bin/luci\",\"#f47f3e\"]\r\n\t}, {\r\n\t\t\"cms\": \"H3C/安博通/任子行/OEM系列安全产品\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"webui/js/jquerylib/jquery-1.7.2.min.js\"]\r\n\t}, {\r\n\t\t\"cms\": \"明源云 ERP\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"#153290\",\"明源软件\"]\r\n\t}, {\r\n\t\t\"cms\": \"IP-guard\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"IP-guard\",\"sign/login\"]\r\n\t}, {\r\n\t\t\"cms\": \"宁盾一体化安全认证平台\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"am/ndkey.ico\",\"zhLanguagePng\"]\r\n\t}, {\r\n\t\t\"cms\": \"东华医疗协同办公系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"extcomponent/security/login.jsp\",\"login_dhc\"]\r\n\t}, {\r\n\t\t\"cms\": \"安宁电子邮件系统　AnyMacro Mail\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"anymacro\",\"passre.php\"]\r\n\t}, {\r\n\t\t\"cms\": \"海康威视综合安防平台\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"dist/jquery.js\",\"home/locationIndex.action\"]\r\n\t}, {\r\n\t\t\"cms\": \"海纳CMS-HituxCMS\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"Powered By HituxCMS\",\"ServiceCenter.js\"]\r\n\t}, {\r\n\t\t\"cms\": \"酒店智慧营销IPTV系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"xsiptvp\",\"IPTV\"]\r\n\t}, {\r\n\t\t\"cms\": \"朗驰欣创-视频监控\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"Installplug.exe\",\"NVSID\"]\r\n\t}, {\r\n\t\t\"cms\": \"大华-智能物联综合管理平台\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"static/qwebchannel.js\",\"moment\"]\r\n\t}, {\r\n\t\t\"cms\": \"方正翔宇\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"e5style/login1.css\",\"e5workspace/security/captcha.do\"]\r\n\t}, {\r\n\t\t\"cms\": \"金蝶 EAS\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"eassso\",\"portalClientHelper.jsp\"]\r\n\t}, {\r\n\t\t\"cms\": \"极通 EWEBS 应用虚拟化\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"NewSoft\",\"xajax05/xajax_js/xajax_core.js\"]\r\n\t}, {\r\n\t\t\"cms\": \"时空智友\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"login.jsp?login\",\"登录\"]\r\n\t}, {\r\n\t\t\"cms\": \"康通电子云广播系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"static/download/JSET99Setup.exe\"]\r\n\t}, {\r\n\t\t\"cms\": \"xxl-job\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"/static/adminlte/dist/css/AdminLTE.min.css\",\"bower_components/PACE/pace.min.js\"]\r\n\t}, {\r\n\t\t\"cms\": \"海康综合安防管理平台\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"title\",\r\n\t\t\"keyword\": [\"综合安防管理平台\"]\r\n\t}, {\r\n\t\t\"cms\": \"53BK数字报刊系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"/Comja/\"]\r\n\t}, {\r\n\t\t\"cms\": \"慧点科技 OA 协同办公系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"/dojo/smartdot/css/dojo_smartdot.css\"]\r\n\t}, {\r\n\t\t\"cms\": \"Teleport 堡垒机\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"teleport.js\",\"login-type-oath\",\"bind-oath\"]\r\n\t}, {\r\n\t\t\"cms\": \"V2 Conference 视频会议系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"window.location.href=\\\"/Conf/index.jsp\\\"\"]\r\n\t}, {\r\n\t\t\"cms\": \"和欣控制(Hysine) Webtalk 系统\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"_webtalk/_cur/loginA.php\",\"WEBTALK\"]\r\n\t}, {\r\n\t\t\"cms\": \"Analytics Cloud 分析云\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"410106848\"]\r\n\t}, {\r\n\t\t\"cms\": \"明源云MIP集成平台\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-834208471\"]\r\n\t}, {\r\n\t\t\"cms\": \"MapGIS Server Manager\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-252149748\"]\r\n\t}, {\r\n\t\t\"cms\": \"金钟集团智能物流管理系统\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-364449966\"]\r\n\t}, {\r\n\t\t\"cms\": \"海康威视综合安防管理平台\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-808437027\"]\r\n\t}, {\r\n\t\t\"cms\": \"即会通企业版(LiveUC)|视频会议\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-637931821\"]\r\n\t}, {\r\n\t\t\"cms\": \"泛微emp-移动管理平台\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"2062026853\"]\r\n\t}, {\r\n\t\t\"cms\": \"锐捷 SSL VPN\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1525950034\"]\r\n\t}, {\r\n\t\t\"cms\": \"华测监测预警系统\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-628229493\"]\r\n\t}, {\r\n\t\t\"cms\": \"35企业邮箱系统\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1676919780\"]\r\n\t}, {\r\n\t\t\"cms\": \"指挥调度平台\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1971504131\"]\r\n\t}, {\r\n\t\t\"cms\": \"FE业务协作平台\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-391577146\"]\r\n\t}, {\r\n\t\t\"cms\": \"Elib 图书馆集群管理系统\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"478149598\"]\r\n\t}, {\r\n\t\t\"cms\": \"VMware Horizon\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1182206475\"]\r\n\t}, {\r\n\t\t\"cms\": \"银达汇智智慧综合管理平台\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"1170487960\"]\r\n\t}, {\r\n\t\t\"cms\": \"迈普多业务融合网关\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1234665500\"]\r\n\t}, {\r\n\t\t\"cms\": \"奇安信自动化渗透测试系统\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-747580443\"]\r\n\t}, {\r\n\t\t\"cms\": \"红海eHR人力资源管理系统\",\r\n\t\t\"method\": \"faviconhash\",\r\n\t\t\"location\": \"body\",\r\n\t\t\"keyword\": [\"-1015496453\"]\r\n\t}, {\r\n\t\t\"cms\": \"MobileIron --Log4j\",\r\n\t\t\"method\": \"keyword\",\r\n\t\t\"location\": \"title\",\r\n\t\t\"keyword\": [\"MobileIron User Portal: Sign In\"]\r\n\t}]\r\n}"
  },
  {
    "path": "backend/fingerprints/fingerprinthub_web.json",
    "content": "[{\"id\": \"08cms\", \"info\": {\"name\": \"08cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,08cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"08cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"08cms\", \"typeof(_08cms)\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\08cms.yaml\"}, {\"id\": \"0example\", \"info\": {\"name\": \"0example\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,0example\", \"severity\": \"info\", \"metadata\": {\"product\": \"0example\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>example domain</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\0example.yaml\"}, {\"id\": \"17mail-yi-qi-you\", \"info\": {\"name\": \"17mail-易企邮\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,17mail-易企邮\", \"severity\": \"info\", \"metadata\": {\"product\": \"17mail-易企邮\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"//易企邮正式版发布\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\17mail-易企邮.yaml\"}, {\"id\": \"1caitong\", \"info\": {\"name\": \"1caitong\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,1caitong\", \"severity\": \"info\", \"metadata\": {\"product\": \"1caitong\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/custom/groupnewslist.aspx?groupid=\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\1caitong.yaml\"}, {\"id\": \"21grid\", \"info\": {\"name\": \"21grid\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,21grid\", \"severity\": \"info\", \"metadata\": {\"product\": \"21grid\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"技术支持：网格（福建）智能科技有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\21grid.yaml\"}, {\"id\": \"263-enterprise-mailbox\", \"info\": {\"name\": \"263-enterprise-mailbox\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,263-enterprise-mailbox\", \"severity\": \"info\", \"metadata\": {\"product\": \"263-enterprise-mailbox\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"net263.wm.custom_login.homepage_init\", \"src=\\\"/custom_login/js/net263_wm_util.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\263-enterprise-mailbox.yaml\"}, {\"id\": \"263-hrm\", \"info\": {\"name\": \"263-hrm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,263-hrm\", \"severity\": \"info\", \"metadata\": {\"product\": \"263-hrm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<p align=\\\"center\\\">请使用263em登陆!</p>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\263-hrm.yaml\"}, {\"id\": \"263-meeting\", \"info\": {\"name\": \"263-meeting\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,263-meeting\", \"severity\": \"info\", \"metadata\": {\"product\": \"263-meeting\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<frame src=\\\"/jsp/conference/meetinglist.jsp\\\" name=\\\"mainframe\\\"/>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\263-meeting.yaml\"}, {\"id\": \"315soft-filesystem\", \"info\": {\"name\": \"315soft-filesystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,315soft-filesystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"315soft-filesystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\">多可电子档案管理系统</div\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\315soft-filesystem.yaml\"}, {\"id\": \"35mail\", \"info\": {\"name\": \"35mail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,35mail\", \"severity\": \"info\", \"metadata\": {\"product\": \"35mail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"35\", \"images/mail/35pushmail.app.png\", \"switchingserverpopup\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"class=\\\"user_define_img_btn6\\\" href=\\\"http://help.mail.35.com/mailman/81.html\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\35mail.yaml\"}, {\"id\": \"360-enterprise-security\", \"info\": {\"name\": \"360-enterprise-security\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,360-enterprise-security\", \"severity\": \"info\", \"metadata\": {\"product\": \"360-enterprise-security\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"360entinst\", \"关于全网部署360私有云的通知\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"天擎\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\360-enterprise-security.yaml\"}, {\"id\": \"360-tianji\", \"info\": {\"name\": \"360-tianji\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,360-tianji\", \"severity\": \"info\", \"metadata\": {\"product\": \"360-tianji\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/resource/img/login/logo_403.png\\\" alt=\\\"360天机\\\"/></a>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\360-tianji.yaml\"}, {\"id\": \"360-tianqing\", \"info\": {\"name\": \"360-tianqing\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,360-tianqing\", \"severity\": \"info\", \"metadata\": {\"product\": \"360-tianqing\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/task/index/detail?id={item.id}\", \"appid\\\":\\\"skylar6\", \"已过期或者未授权，购买请联系4008-136-360\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\360-tianqing.yaml\"}, {\"id\": \"360-webscan\", \"info\": {\"name\": \"360-webscan\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,360-webscan\", \"severity\": \"info\", \"metadata\": {\"product\": \"360-webscan\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"webscan.360.cn/status/pai/hash\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\360-webscan.yaml\"}, {\"id\": \"360-an-quan-lu-you\", \"info\": {\"name\": \"360-安全路由\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,360-安全路由\", \"severity\": \"info\", \"metadata\": {\"product\": \"360-安全路由\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"360loginflag\", \"360安全路由\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\360-安全路由.yaml\"}, {\"id\": \"360-tian-di-xin-yi-dai-zhi-hui-fang-huo-qiang\", \"info\": {\"name\": \"360天堤新一代智慧防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,360天堤新一代智慧防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"360天堤新一代智慧防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"360天堤\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\360天堤新一代智慧防火墙.yaml\"}, {\"id\": \"360-xin-tian-qing\", \"info\": {\"name\": \"360新天擎\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,360新天擎\", \"severity\": \"info\", \"metadata\": {\"product\": \"360新天擎\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"location: /login?refer=%2f\", \"set-cookie: skylar\"], \"part\": \"header\", \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\360新天擎.yaml\"}, {\"id\": \"365webcall\", \"info\": {\"name\": \"365webcall\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,365webcall\", \"severity\": \"info\", \"metadata\": {\"product\": \"365webcall\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src='http://www.365webcall.com/imme1.aspx?\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\365webcall.yaml\"}, {\"id\": \"365xxy-examing\", \"info\": {\"name\": \"365xxy-examing\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,365xxy-examing\", \"severity\": \"info\", \"metadata\": {\"product\": \"365xxy-examing\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>云时政在线考试系统</title>\", \"href=https://unpkg.com/element-ui/lib/theme-chalk/index.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\365xxy-examing.yaml\"}, {\"id\": \"3dcart\", \"info\": {\"name\": \"3dcart\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,3dcart\", \"severity\": \"info\", \"metadata\": {\"product\": \"3dcart\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by 3dcart\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"x-powered-by: 3dcart\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\3dcart.yaml\"}, {\"id\": \"3kits-cms\", \"info\": {\"name\": \"3kits-cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,3kits-cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"3kits-cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"3kits</a>\", \"href=\\\"http://www.3kits.com\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\3kits-cms.yaml\"}, {\"id\": \"42gears-suremdm\", \"info\": {\"name\": \"42gears-suremdm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,42gears-suremdm\", \"severity\": \"info\", \"metadata\": {\"product\": \"42gears-suremdm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"astrocontacts\", \"suremdm\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\42gears-suremdm.yaml\"}, {\"id\": \"53kf\", \"info\": {\"name\": \"53kf\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,53kf\", \"severity\": \"info\", \"metadata\": {\"product\": \"53kf\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"chat.53kf.com/company.php\", \"chat.53kf.com/kf.php\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"powered by 53kf\", \"tb.53kf.com/code/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\53kf.yaml\"}, {\"id\": \"54-customer-service\", \"info\": {\"name\": \"54-customer-service\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,54-customer-service\", \"severity\": \"info\", \"metadata\": {\"product\": \"54-customer-service\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"http://code.54kefu.net/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\54-customer-service.yaml\"}, {\"id\": \"5ikq\", \"info\": {\"name\": \"5ikq\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,5ikq\", \"severity\": \"info\", \"metadata\": {\"product\": \"5ikq\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"我爱考勤云平台\", \"我爱考勤云平台</span>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\5ikq.yaml\"}, {\"id\": \"5k-crm\", \"info\": {\"name\": \"5k-crm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,5k-crm\", \"severity\": \"info\", \"metadata\": {\"product\": \"5k-crm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/public/js/5kcrm.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\5k-crm.yaml\"}, {\"id\": \"5vtechnologies-blueangelsoftwaresuite\", \"info\": {\"name\": \"5vtechnologies-blueangelsoftwaresuite\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,5vtechnologies-blueangelsoftwaresuite\", \"severity\": \"info\", \"metadata\": {\"product\": \"5vtechnologies-blueangelsoftwaresuite\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/cgi-bin/webctrl.cgi?action=index_page\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\5vtechnologies-blueangelsoftwaresuite.yaml\"}, {\"id\": \"6kbbs\", \"info\": {\"name\": \"6kbbs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,6kbbs\", \"severity\": \"info\", \"metadata\": {\"product\": \"6kbbs\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"generator\\\" content=\\\"6kbbs\", \"powered by 6kbbs\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\6kbbs.yaml\"}, {\"id\": \"78oa\", \"info\": {\"name\": \"78oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,78oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"78oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/resource/javascript/system/runtime.min.js\", \"<a href=\\\"http://www.78oa.com\\\" target=\\\"_blank\\\">78oa办公系统</a>\", \"license.78oa.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\78oa.yaml\"}, {\"id\": \"7moor-product\", \"info\": {\"name\": \"7moor-product\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,7moor-product\", \"severity\": \"info\", \"metadata\": {\"product\": \"7moor-product\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/javascripts/qiniu/qiniu.js\", \"class=\\\"ds_do_action domain_aboutus\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\7moor-product.yaml\"}, {\"id\": \"a2b-webserver\", \"info\": {\"name\": \"a2b-webserver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,a2b-webserver\", \"severity\": \"info\", \"metadata\": {\"product\": \"a2b-webserver\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: a2b webserver\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\a2b-webserver.yaml\"}, {\"id\": \"aakuan-attendance-system\", \"info\": {\"name\": \"aakuan-attendance-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,aakuan-attendance-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"aakuan-attendance-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"aakuan.cn\", \"href=\\\"scripts/popmodal.css\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\aakuan-attendance-system.yaml\"}, {\"id\": \"aardvark-topsites\", \"info\": {\"name\": \"aardvark-topsites\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,aardvark-topsites\", \"severity\": \"info\", \"metadata\": {\"product\": \"aardvark-topsites\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"aardvark topsites\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\aardvark-topsites.yaml\"}, {\"id\": \"abt-shen-du-an-quan-wang-guan\", \"info\": {\"name\": \"abt-深度安全网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,abt-深度安全网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"abt-深度安全网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"安博通应用网关\", \"安博通深度安全网关\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\abt-深度安全网关.yaml\"}, {\"id\": \"accellion-secure-file-transfer\", \"info\": {\"name\": \"accellion-secure-file-transfer\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,accellion-secure-file-transfer\", \"severity\": \"info\", \"metadata\": {\"product\": \"accellion-secure-file-transfer\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"secured by accellion\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\accellion-secure-file-transfer.yaml\"}, {\"id\": \"account-manager-exhibition-system\", \"info\": {\"name\": \"account-manager-exhibition-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,account-manager-exhibition-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"account-manager-exhibition-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"action=\\\"/system/login/login.shtml\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\account-manager-exhibition-system.yaml\"}, {\"id\": \"achecker-web-accessibility-evaluation-tool\", \"info\": {\"name\": \"achecker-web-accessibility-evaluation-tool\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,achecker-web-accessibility-evaluation-tool\", \"severity\": \"info\", \"metadata\": {\"product\": \"achecker-web-accessibility-evaluation-tool\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"achecker is a web accessibility\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\achecker-web-accessibility-evaluation-tool.yaml\"}, {\"id\": \"acmailer-you-jian-xi-tong\", \"info\": {\"name\": \"acmailer-邮件系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,acmailer-邮件系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"acmailer-邮件系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://www.acmailer.jp\\\"><img src=\\\"img/logo.jpg\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\acmailer-邮件系统.yaml\"}, {\"id\": \"acsoft-cloud\", \"info\": {\"name\": \"acsoft-cloud\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,acsoft-cloud\", \"severity\": \"info\", \"metadata\": {\"product\": \"acsoft-cloud\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"onrememberpasswordclick\", \"sdiyun.com, all rights reserved\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\acsoft-cloud.yaml\"}, {\"id\": \"acsoft-reimbursement-system\", \"info\": {\"name\": \"acsoft-reimbursement-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,acsoft-reimbursement-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"acsoft-reimbursement-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div id=\\\"dsitetitle\\\"\", \"by:lin.zhibin\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"window.external.addfavorite(location.href,document.title);\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\acsoft-reimbursement-system.yaml\"}, {\"id\": \"act-manager\", \"info\": {\"name\": \"act-manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,act-manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"act-manager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<script>location.href=\\\"ucenter\\\";</script>\", \"url:\\\"/ucenter/login/loginaction!gettitle.action\\\",\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\act-manager.yaml\"}, {\"id\": \"activecollab\", \"info\": {\"name\": \"activecollab\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,activecollab\", \"severity\": \"info\", \"metadata\": {\"product\": \"activecollab\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<p id=\\\"powered_by\\\"><a href=\\\"http://www.activecollab.com/\\\"\", \"powered by activecollab\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\activecollab.yaml\"}, {\"id\": \"activeuc\", \"info\": {\"name\": \"网动统一通信平台(ActiveUC)\", \"author\": \"jlkl\", \"tags\": \"detect,tech,activeuc\", \"severity\": \"info\", \"metadata\": {\"product\": \"activeuc\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"path=/acenter\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\activeuc.yaml\"}, {\"id\": \"activeweb-content-server\", \"info\": {\"name\": \"activeweb-content-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,activeweb-content-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"activeweb-content-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"activeweb cache extension\", \"awnocachebegin__awnocachebegin__awnocachebegin__awnocachebegin__awnocachebegin\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\activeweb-content-server.yaml\"}, {\"id\": \"acunetix-wvs\", \"info\": {\"name\": \"acunetix-wvs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,acunetix-wvs\", \"severity\": \"info\", \"metadata\": {\"product\": \"acunetix-wvs\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<acx-root>\", \"<title>acunetix\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\acunetix-wvs.yaml\"}, {\"id\": \"adaptec-maxview\", \"info\": {\"name\": \"adaptec-maxview\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,adaptec-maxview\", \"severity\": \"info\", \"metadata\": {\"product\": \"adaptec-maxview\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"action=\\\"/maxview/manager/login.xhtml\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\adaptec-maxview.yaml\"}, {\"id\": \"adimoney\", \"info\": {\"name\": \"adimoney\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,adimoney\", \"severity\": \"info\", \"metadata\": {\"product\": \"adimoney\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<img src=\\\"/img/logo.png\\\" alt=\\\"adimoney\\\"/>\", \"content=\\\"adimoney.com mobile advertisement network. \"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\adimoney.yaml\"}, {\"id\": \"adobe-cq5\", \"info\": {\"name\": \"adobe-cq5\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,adobe-cq5\", \"severity\": \"info\", \"metadata\": {\"product\": \"adobe-cq5\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"_jcr_content\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\adobe-cq5.yaml\"}, {\"id\": \"adobe-experience-manager\", \"info\": {\"name\": \"adobe-experience-manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,adobe-experience-manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"adobe-experience-manager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"tag{background:url(login/clientlib/resources/adobe-logo.png)\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\adobe-experience-manager.yaml\"}, {\"id\": \"adobe-flex\", \"info\": {\"name\": \"adobe-flex\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,adobe-flex\", \"severity\": \"info\", \"metadata\": {\"product\": \"adobe-flex\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"adobe flex\", \"learn more about flex at http://flex.org\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\adobe-flex.yaml\"}, {\"id\": \"adobe-golive\", \"info\": {\"name\": \"adobe-golive\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,adobe-golive\", \"severity\": \"info\", \"metadata\": {\"product\": \"adobe-golive\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"generator\\\" content=\\\"adobe golive\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\adobe-golive.yaml\"}, {\"id\": \"adobe-robohelp\", \"info\": {\"name\": \"adobe-robohelp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,adobe-robohelp\", \"severity\": \"info\", \"metadata\": {\"product\": \"adobe-robohelp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"generator\\\" content=\\\"adobe robohelp\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\adobe-robohelp.yaml\"}, {\"id\": \"adt-iam\", \"info\": {\"name\": \"adt-iam\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,adt-iam\", \"severity\": \"info\", \"metadata\": {\"product\": \"adt-iam\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"tpn,vpn,内网安全,内网控制,主机防护\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\adt-iam.yaml\"}, {\"id\": \"adt-iam-wang-guan-kong-zhi-tai\", \"info\": {\"name\": \"adt-iam网关控制台\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,adt-iam网关控制台\", \"severity\": \"info\", \"metadata\": {\"product\": \"adt-iam网关控制台\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"iam\", \"src=\\\"/page/assets/javascripts/adt.js\\\"\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\adt-iam网关控制台.yaml\"}, {\"id\": \"adt-sjw74-vpn-wang-guan\", \"info\": {\"name\": \"adt-sjw74-vpn网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,adt-sjw74-vpn网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"adt-sjw74-vpn网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"sjw74\", \"src=\\\"./system/usbkey.js\\\"\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\adt-sjw74-vpn网关.yaml\"}, {\"id\": \"adt-tpn-2g-wang-guan\", \"info\": {\"name\": \"adt-tpn-2g网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,adt-tpn-2g网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"adt-tpn-2g网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"./system/usbkey.js\\\"\", \"tpn-2g\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\adt-tpn-2g网关.yaml\"}, {\"id\": \"advanced-electron-forum\", \"info\": {\"name\": \"advanced-electron-forum\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,advanced-electron-forum\", \"severity\": \"info\", \"metadata\": {\"product\": \"advanced-electron-forum\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by aef\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\advanced-electron-forum.yaml\"}, {\"id\": \"advantech-webaccess\", \"info\": {\"name\": \"advantech-webaccess\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,advantech-webaccess\", \"severity\": \"info\", \"metadata\": {\"product\": \"advantech-webaccess\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/broadweb/bwuconfig.asp\", \"/broadweb/webaccessclientsetup.exe\", \"/bw_templete1.dwt\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\advantech-webaccess.yaml\"}, {\"id\": \"advantech_wise\", \"info\": {\"name\": \"advantech_wise\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,advantech_wise\", \"severity\": \"info\", \"metadata\": {\"product\": \"advantech_wise\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"remote manage your intelligent systems\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\advantech_wise.yaml\"}, {\"id\": \"adviserlogiccli\", \"info\": {\"name\": \"adviserlogiccli\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,adviserlogiccli\", \"severity\": \"info\", \"metadata\": {\"product\": \"adviserlogiccli\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"navigator.serviceworker.register('/adviserlogiccache.js')\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\adviserlogiccli.yaml\"}, {\"id\": \"afterlogic-webmail\", \"info\": {\"name\": \"afterlogic-webmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,afterlogic-webmail\", \"severity\": \"info\", \"metadata\": {\"product\": \"afterlogic-webmail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"afterlogic webmail pro\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\afterlogic-webmail.yaml\"}, {\"id\": \"agilebpm\", \"info\": {\"name\": \"agilebpm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,agilebpm\", \"severity\": \"info\", \"metadata\": {\"product\": \"agilebpm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"logo-element\\\">agile-bpm\", \"class=\\\"logo-element\\\">bpm\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\agilebpm.yaml\"}, {\"id\": \"agoracgi\", \"info\": {\"name\": \"agoracgi\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,agoracgi\", \"severity\": \"info\", \"metadata\": {\"product\": \"agoracgi\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/agora.cgi?product=\", \"/store/agora.cgi\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\agoracgi.yaml\"}, {\"id\": \"ahnlab-trusguard-ssl-vpn\", \"info\": {\"name\": \"ahnlab-trusguard-ssl-vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ahnlab-trusguard-ssl-vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"ahnlab-trusguard-ssl-vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"trusguard ssl vpn client\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ahnlab-trusguard-ssl-vpn.yaml\"}, {\"id\": \"aidex\", \"info\": {\"name\": \"aidex\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,aidex\", \"severity\": \"info\", \"metadata\": {\"product\": \"aidex\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"http://www.aidex.de/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\aidex.yaml\"}, {\"id\": \"aisino-telecom\", \"info\": {\"name\": \"aisino-telecom\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,aisino-telecom\", \"severity\": \"info\", \"metadata\": {\"product\": \"aisino-telecom\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<font class=\\\"bottomfont\\\">航天信息股份有限公司 电信行业版\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\aisino-telecom.yaml\"}, {\"id\": \"ajenti-server-admin-panel\", \"info\": {\"name\": \"ajenti-server-admin-panel\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ajenti-server-admin-panel\", \"severity\": \"info\", \"metadata\": {\"product\": \"ajenti-server-admin-panel\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"action=\\\"/ajenti:auth\\\"\", \"src=\\\"/ajenti:static/\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ajenti-server-admin-panel.yaml\"}, {\"id\": \"akiva-webboard\", \"info\": {\"name\": \"akiva-webboard\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,akiva-webboard\", \"severity\": \"info\", \"metadata\": {\"product\": \"akiva-webboard\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by webboard\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\akiva-webboard.yaml\"}, {\"id\": \"alcasar\", \"info\": {\"name\": \"alcasar\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,alcasar\", \"severity\": \"info\", \"metadata\": {\"product\": \"alcasar\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"valoriserdiv5\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\alcasar.yaml\"}, {\"id\": \"alcatel_lucent-omnivista-cirrus\", \"info\": {\"name\": \"alcatel_lucent-omnivista-cirrus\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,alcatel_lucent-omnivista-cirrus\", \"severity\": \"info\", \"metadata\": {\"product\": \"alcatel_lucent-omnivista-cirrus\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/help/en-us/others/ov-cirrus_cookiepolicy.html\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\alcatel_lucent-omnivista-cirrus.yaml\"}, {\"id\": \"alcatel_lucent-qi-ye-wang-guan\", \"info\": {\"name\": \"alcatel_lucent-企业网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,alcatel_lucent-企业网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"alcatel_lucent-企业网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"alcatel-lucent\", \"欢迎登陆网页配置界面\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\alcatel_lucent-企业网关.yaml\"}, {\"id\": \"ali-monitoring-system\", \"info\": {\"name\": \"ali-monitoring-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ali-monitoring-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"ali-monitoring-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/monitor/css/monitor.css\", \"href=\\\"/monitor/monitoritem/monitoritemlist.htm\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ali-monitoring-system.yaml\"}, {\"id\": \"alibaba-anyproxy\", \"info\": {\"name\": \"alibaba-anyproxy\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,alibaba-anyproxy\", \"severity\": \"info\", \"metadata\": {\"product\": \"alibaba-anyproxy\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>anyproxy</title>\", \"dist/main.css\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\alibaba-anyproxy.yaml\"}, {\"id\": \"alibaba-group-dms\", \"info\": {\"name\": \"alibaba-group-dms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,alibaba-group-dms\", \"severity\": \"info\", \"metadata\": {\"product\": \"alibaba-group-dms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"copyright &copy;  dms  all rights reserved （alibaba 数据管理产品）\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\alibaba-group-dms.yaml\"}, {\"id\": \"alibaba-group-tlog\", \"info\": {\"name\": \"alibaba-group-tlog\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,alibaba-group-tlog\", \"severity\": \"info\", \"metadata\": {\"product\": \"alibaba-group-tlog\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"tlog 实时数据处理\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\alibaba-group-tlog.yaml\"}, {\"id\": \"alibaba-qi-ye-you-xiang\", \"info\": {\"name\": \"alibaba-企业邮箱\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,alibaba-企业邮箱\", \"severity\": \"info\", \"metadata\": {\"product\": \"alibaba-企业邮箱\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"action=\\\"/alimail/error/browserlog\", \"content=\\\"阿里企业邮箱\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\alibaba-企业邮箱.yaml\"}, {\"id\": \"aliyun-rds\", \"info\": {\"name\": \"aliyun-rds\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,aliyun-rds\", \"severity\": \"info\", \"metadata\": {\"product\": \"aliyun-rds\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"legend\\\">rds管理系统</div>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\aliyun-rds.yaml\"}, {\"id\": \"aliyuncdn\", \"info\": {\"name\": \"aliyuncdn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,aliyuncdn\", \"severity\": \"info\", \"metadata\": {\"product\": \"aliyuncdn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"cdn.aliyuncs.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\aliyuncdn.yaml\"}, {\"id\": \"aliyunoss\", \"info\": {\"name\": \"aliyunoss\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,aliyunoss\", \"severity\": \"info\", \"metadata\": {\"product\": \"aliyunoss\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: aliyunoss\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\aliyunoss.yaml\"}, {\"id\": \"alliance-web-platform\", \"info\": {\"name\": \"alliance-web-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,alliance-web-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"alliance-web-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"window.location = \\\"/swp/group/admin\\\";\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\alliance-web-platform.yaml\"}, {\"id\": \"alstom-system\", \"info\": {\"name\": \"alstom-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,alstom-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"alstom-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"technology_communion.asp\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\alstom-system.yaml\"}, {\"id\": \"am-websystem\", \"info\": {\"name\": \"am-websystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,am-websystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"am-websystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=\\\"dvlogo\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\am-websystem.yaml\"}, {\"id\": \"amaze-ui\", \"info\": {\"name\": \"amaze-ui\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,amaze-ui\", \"severity\": \"info\", \"metadata\": {\"product\": \"amaze-ui\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"amazeui.css\", \"amazeui.js\", \"amazeui.min.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\amaze-ui.yaml\"}, {\"id\": \"ambuf-onlineexam\", \"info\": {\"name\": \"ambuf-onlineexam\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ambuf-onlineexam\", \"severity\": \"info\", \"metadata\": {\"product\": \"ambuf-onlineexam\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"北京众恒志信科技\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ambuf-onlineexam.yaml\"}, {\"id\": \"ami-megarac-sp\", \"info\": {\"name\": \"ami-megarac-sp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ami-megarac-sp\", \"severity\": \"info\", \"metadata\": {\"product\": \"ami-megarac-sp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<modelname>ami megarac sp</modelname>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ami-megarac-sp.yaml\"}, {\"id\": \"ami-megarac-spx\", \"info\": {\"name\": \"ami-megarac-spx\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ami-megarac-spx\", \"severity\": \"info\", \"metadata\": {\"product\": \"ami-megarac-spx\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<modelname>ami megarac spx</modelname>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ami-megarac-spx.yaml\"}, {\"id\": \"anchiva-xia-yi-dai-fang-huo-qiang\", \"info\": {\"name\": \"anchiva-下一代防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,anchiva-下一代防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"anchiva-下一代防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"安信华下一代防火墙\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\anchiva-下一代防火墙.yaml\"}, {\"id\": \"anecms\", \"info\": {\"name\": \"anecms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,anecms\", \"severity\": \"info\", \"metadata\": {\"product\": \"anecms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"erwin aligam - ealigam@gmail.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\anecms.yaml\"}, {\"id\": \"animati-pacs\", \"info\": {\"name\": \"animati-pacs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,animati-pacs\", \"severity\": \"info\", \"metadata\": {\"product\": \"animati-pacs\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<form action=\\\"\\\" onsubmit=\\\"pacs.login.sendpasswordrecoverymail()\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\animati-pacs.yaml\"}, {\"id\": \"anmai-system\", \"info\": {\"name\": \"anmai-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,anmai-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"anmai-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\" id=\\\"lblname\\\">版权所有：上海安脉计算机科技有限公司\", \"<font color=\\\"#000000\\\">上海安脉计算机科技有限公司</font>\", \"id=\\\"lblname1\\\">版权所有：上海安脉计算机科技有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\anmai-system.yaml\"}, {\"id\": \"anneca-intouch-crm\", \"info\": {\"name\": \"anneca-intouch-crm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,anneca-intouch-crm\", \"severity\": \"info\", \"metadata\": {\"product\": \"anneca-intouch-crm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"http://www.anneca.cz\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\anneca-intouch-crm.yaml\"}, {\"id\": \"anta-asg\", \"info\": {\"name\": \"anta-asg\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,anta-asg\", \"severity\": \"info\", \"metadata\": {\"product\": \"anta-asg\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"setcookie(\\\"asglanguage\\\",document.form1.planguage.value)\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\anta-asg.yaml\"}, {\"id\": \"anwang-wayosac\", \"info\": {\"name\": \"anwang-wayosac\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,anwang-wayosac\", \"severity\": \"info\", \"metadata\": {\"product\": \"anwang-wayosac\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"715c49c5512d763084a4082c27d935e1\"]}]}], \"_source_file\": \"00_unknown\\\\anwang-wayosac.yaml\"}, {\"id\": \"anymacro-you-jian-xi-tong\", \"info\": {\"name\": \"anymacro-邮件系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,anymacro-邮件系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"anymacro-邮件系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"document.aa.f_email\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\anymacro-邮件系统.yaml\"}, {\"id\": \"aolansoft-studentsystem\", \"info\": {\"name\": \"aolansoft-studentsystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,aolansoft-studentsystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"aolansoft-studentsystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"vcode.aspx\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\aolansoft-studentsystem.yaml\"}, {\"id\": \"apabi-digital-resource-platform\", \"info\": {\"name\": \"apabi-digital-resource-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apabi-digital-resource-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"apabi-digital-resource-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<link href=\\\"http://apabi\", \"default/apabi.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\apabi-digital-resource-platform.yaml\"}, {\"id\": \"apache-apisix-dashboard\", \"info\": {\"name\": \"apache-apisix-dashboard\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-apisix-dashboard\", \"severity\": \"info\", \"metadata\": {\"product\": \"apache-apisix-dashboard\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"6d07440dcda38480ac6fd8c32edf0102\"]}, {\"type\": \"word\", \"words\": [\"<title>apache apisix dashboard</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\apache-apisix-dashboard.yaml\"}, {\"id\": \"apache-archiva\", \"info\": {\"name\": \"apache-archiva\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-archiva\", \"severity\": \"info\", \"metadata\": {\"product\": \"apache-archiva\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/archiva.css\", \"/archiva.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\apache-archiva.yaml\"}, {\"id\": \"apache-axis\", \"info\": {\"name\": \"apache-axis\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-axis\", \"severity\": \"info\", \"metadata\": {\"product\": \"apache-axis\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"http://ws.apache.org/axis2\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\apache-axis.yaml\"}, {\"id\": \"apache-forrest\", \"info\": {\"name\": \"apache-forrest\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-forrest\", \"severity\": \"info\", \"metadata\": {\"product\": \"apache-forrest\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"apache forrest\", \"name=\\\"forrest\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\apache-forrest.yaml\"}, {\"id\": \"apache-guacamole\", \"info\": {\"name\": \"apache-guacamole\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-guacamole\", \"severity\": \"info\", \"metadata\": {\"product\": \"apache-guacamole\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"guacamole - clientless remote desktop\", \"scripts/guac-ui.js\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"images/guacamole-logo\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\apache-guacamole.yaml\"}, {\"id\": \"apache-hadoop-yarn\", \"info\": {\"name\": \"apache-hadoop-yarn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-hadoop-yarn\", \"severity\": \"info\", \"metadata\": {\"product\": \"apache-hadoop-yarn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/static/yarn.css\", \"yarn.dt.plugins.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\apache-hadoop-yarn.yaml\"}, {\"id\": \"apache-haus\", \"info\": {\"name\": \"apache-haus\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-haus\", \"severity\": \"info\", \"metadata\": {\"product\": \"apache-haus\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"copyright &copy; 2008-2017 <a href=\\\"http://www.apachehaus.com\\\">the apache haus</a>\", \"href=\\\"/apachehaus.ico\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\apache-haus.yaml\"}, {\"id\": \"apache-oozie-web-console\", \"info\": {\"name\": \"apache-oozie-web-console\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-oozie-web-console\", \"severity\": \"info\", \"metadata\": {\"product\": \"apache-oozie-web-console\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/oozie\\\">oozie console\", \"oozie-console\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\apache-oozie-web-console.yaml\"}, {\"id\": \"apache-storm\", \"info\": {\"name\": \"apache-storm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-storm\", \"severity\": \"info\", \"metadata\": {\"product\": \"storm\", \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>storm ui</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\apache-storm.yaml\"}, {\"id\": \"apache-wicket\", \"info\": {\"name\": \"apache-wicket\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-wicket\", \"severity\": \"info\", \"metadata\": {\"product\": \"wicket\", \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/org.apache.wicket.\", \"xmlns:wicket=\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\apache-wicket.yaml\"}, {\"id\": \"apache2-ubuntu-mo-ren-ye-mian\", \"info\": {\"name\": \"apache2-ubuntu默认页面\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache2-ubuntu默认页面\", \"severity\": \"info\", \"metadata\": {\"product\": \"apache2-ubuntu默认页面\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"apache2 ubuntu default page\", \"ubuntu-logo.png\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\apache2-ubuntu默认页面.yaml\"}, {\"id\": \"apc-management\", \"info\": {\"name\": \"apc-management\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apc-management\", \"severity\": \"info\", \"metadata\": {\"product\": \"apc-management\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"this object on the apc management web server is protected\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\apc-management.yaml\"}, {\"id\": \"apereo-cas\", \"info\": {\"name\": \"apereo-cas\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apereo-cas\", \"severity\": \"info\", \"metadata\": {\"product\": \"apereo-cas\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"cas &#8211; central authentication service\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\apereo-cas.yaml\"}, {\"id\": \"apex-livebpm\", \"info\": {\"name\": \"apex-livebpm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apex-livebpm\", \"severity\": \"info\", \"metadata\": {\"product\": \"apex-livebpm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/plug-in/login/fixed/css/login.css\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\apex-livebpm.yaml\"}, {\"id\": \"apilayer-caddy\", \"info\": {\"name\": \"apilayer-caddy\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apilayer-caddy\", \"severity\": \"info\", \"metadata\": {\"product\": \"apilayer-caddy\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: caddy\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\apilayer-caddy.yaml\"}, {\"id\": \"apollo-adminservice\", \"info\": {\"name\": \"apollo-adminservice\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"apollo-adminservice\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"apollo-adminservice\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\apollo-adminservice.yaml\"}, {\"id\": \"appex-lotapp\", \"info\": {\"name\": \"appex-lotapp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,appex-lotapp\", \"severity\": \"info\", \"metadata\": {\"product\": \"appex-lotapp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/change_lan.php?lanid=en\", \"appex network corporation\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\appex-lotapp.yaml\"}, {\"id\": \"apphp-calendar\", \"info\": {\"name\": \"apphp-calendar\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apphp-calendar\", \"severity\": \"info\", \"metadata\": {\"product\": \"apphp-calendar\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"this script was generated by apphp calendar\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\apphp-calendar.yaml\"}, {\"id\": \"appserv\", \"info\": {\"name\": \"appserv\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,appserv\", \"severity\": \"info\", \"metadata\": {\"product\": \"appserv\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"appserv/softicon.gif\", \"index.php?appservlang=th\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\appserv.yaml\"}, {\"id\": \"apusic\", \"info\": {\"name\": \"apusic\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apusic\", \"severity\": \"info\", \"metadata\": {\"product\": \"apusic\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<td>管理apusic应用服务器</td>\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"server: apusic application server\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\apusic.yaml\"}, {\"id\": \"arab-portal\", \"info\": {\"name\": \"arab-portal\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,arab-portal\", \"severity\": \"info\", \"metadata\": {\"product\": \"arab-portal\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by: arab\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\arab-portal.yaml\"}, {\"id\": \"argocd\", \"info\": {\"name\": \"argocd\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,argocd\", \"severity\": \"info\", \"metadata\": {\"product\": \"argocd\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>argo cd</title>\", \"argoproj.github.io\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\argocd.yaml\"}, {\"id\": \"argosoft-mail-server\", \"info\": {\"name\": \"argosoft-mail-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,argosoft-mail-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"argosoft-mail-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"argosoft mail server plus for\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\argosoft-mail-server.yaml\"}, {\"id\": \"arl\", \"info\": {\"name\": \"arl\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,arl\", \"severity\": \"info\", \"metadata\": {\"product\": \"arl\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>资产灯塔系统</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\arl.yaml\"}, {\"id\": \"array-vpn\", \"info\": {\"name\": \"array-vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,array-vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"array-vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"an_util.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\array-vpn.yaml\"}, {\"id\": \"articlepublisherpro\", \"info\": {\"name\": \"articlepublisherpro\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,articlepublisherpro\", \"severity\": \"info\", \"metadata\": {\"product\": \"articlepublisherpro\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"article publisher pro\", \"www.articlepublisherpro.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\articlepublisherpro.yaml\"}, {\"id\": \"arvancloud\", \"info\": {\"name\": \"arvancloud\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,arvancloud\", \"severity\": \"info\", \"metadata\": {\"product\": \"arvancloud\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: arvancloud\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\arvancloud.yaml\"}, {\"id\": \"asp168-oho\", \"info\": {\"name\": \"asp168-oho\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,asp168-oho\", \"severity\": \"info\", \"metadata\": {\"product\": \"asp168-oho\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"default.php?mod=article&do=detail&tid\", \"upload/moban/images/style.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\asp168-oho.yaml\"}, {\"id\": \"aspcms\", \"info\": {\"name\": \"aspcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,aspcms\", \"severity\": \"info\", \"metadata\": {\"product\": \"aspcms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/inc/aspcms_advjs.asp\", \"content=\\\"aspcms\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\aspcms.yaml\"}, {\"id\": \"aspentech-aspen-infoplus21\", \"info\": {\"name\": \"aspentech-aspen-infoplus21\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,aspentech-aspen-infoplus21\", \"severity\": \"info\", \"metadata\": {\"product\": \"aspentech-aspen-infoplus21\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/aspencui/css/appstyles.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\aspentech-aspen-infoplus21.yaml\"}, {\"id\": \"aspnet-mvc\", \"info\": {\"name\": \"aspnet-mvc\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,aspnet-mvc\", \"severity\": \"info\", \"metadata\": {\"product\": \"aspnet-mvc\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h2>modify this template to jump-start your asp.net mvc application.</h2>\", \"asp.net mvc application</p>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\aspnet-mvc.yaml\"}, {\"id\": \"aspnet-requestvalidationmode\", \"info\": {\"name\": \"aspnet-requestvalidationmode\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,aspnet-requestvalidationmode\", \"severity\": \"info\", \"metadata\": {\"product\": \"aspnet-requestvalidationmode\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"httprequestvalidationexception\", \"request validation has detected a potentially dangerous client input value\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\aspnet-requestvalidationmode.yaml\"}, {\"id\": \"asproxy\", \"info\": {\"name\": \"asproxy\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,asproxy\", \"severity\": \"info\", \"metadata\": {\"product\": \"asproxy\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"btnasproxydisplaybutton\", \"surf the web invisibly using asproxy power\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\asproxy.yaml\"}, {\"id\": \"astaro-command-center\", \"info\": {\"name\": \"astaro-command-center\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,astaro-command-center\", \"severity\": \"info\", \"metadata\": {\"product\": \"astaro-command-center\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/js/_variables_from_backend.js?\", \"commandcenter\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\astaro-command-center.yaml\"}, {\"id\": \"asterisk\", \"info\": {\"name\": \"asterisk\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,asterisk\", \"severity\": \"info\", \"metadata\": {\"product\": \"asterisk\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"asterisk_rawmanpath\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\asterisk.yaml\"}, {\"id\": \"asus-aicloud\", \"info\": {\"name\": \"asus-aicloud\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,asus-aicloud\", \"severity\": \"info\", \"metadata\": {\"product\": \"asus-aicloud\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/smb/css/startup.png\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\asus-aicloud.yaml\"}, {\"id\": \"asynqmon\", \"info\": {\"name\": \"asynqmon\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,asynqmon\", \"severity\": \"info\", \"metadata\": {\"product\": \"asynqmon\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"7d56c3bcc4d9522bdc958785f1866776\"]}, {\"type\": \"word\", \"words\": [\"content=\\\"asynq monitoring web console\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\asynqmon.yaml\"}, {\"id\": \"atfuture-system\", \"info\": {\"name\": \"atfuture-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,atfuture-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"atfuture-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/content/web/theme/skin01/img/p_login_logo01.png\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\atfuture-system.yaml\"}, {\"id\": \"atutor-elearning\", \"info\": {\"name\": \"atutor-elearning\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,atutor-elearning\", \"severity\": \"info\", \"metadata\": {\"product\": \"atutor-elearning\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"atutor\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"set-cookie: atutorid\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\atutor-elearning.yaml\"}, {\"id\": \"aurion\", \"info\": {\"name\": \"aurion\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,aurion\", \"severity\": \"info\", \"metadata\": {\"product\": \"aurion\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/aurion.js\", \"<!-- aurion teal will be used as the login-time default\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\aurion.yaml\"}, {\"id\": \"authine-h3-bpm\", \"info\": {\"name\": \"authine-h3-bpm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,authine-h3-bpm\", \"severity\": \"info\", \"metadata\": {\"product\": \"authine-h3-bpm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"h3 bpm suite信息化的最佳实践\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\authine-h3-bpm.yaml\"}, {\"id\": \"autoindex-php-script\", \"info\": {\"name\": \"autoindex-php-script\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,autoindex-php-script\", \"severity\": \"info\", \"metadata\": {\"product\": \"autoindex-php-script\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"autoindex.sourceforge.net/\", \"title=\\\"autoindex default\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"set-cookie: autoindex2\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\autoindex-php-script.yaml\"}, {\"id\": \"automatedlogiccorporation-webctrl\", \"info\": {\"name\": \"automatedlogiccorporation-webctrl\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,automatedlogiccorporation-webctrl\", \"severity\": \"info\", \"metadata\": {\"product\": \"automatedlogiccorporation-webctrl\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/_common/lvl5/about/eula.jsp\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\automatedlogiccorporation-webctrl.yaml\"}, {\"id\": \"autoset\", \"info\": {\"name\": \"autoset\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,autoset\", \"severity\": \"info\", \"metadata\": {\"product\": \"autoset\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\".logo-autoset\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\autoset.yaml\"}, {\"id\": \"auxilium-petratepro\", \"info\": {\"name\": \"auxilium-petratepro\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,auxilium-petratepro\", \"severity\": \"info\", \"metadata\": {\"product\": \"auxilium-petratepro\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"index.php?cmd=11\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\auxilium-petratepro.yaml\"}, {\"id\": \"av-arcade\", \"info\": {\"name\": \"av-arcade\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,av-arcade\", \"severity\": \"info\", \"metadata\": {\"product\": \"av-arcade\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by <a href=\\\"http://www.avscripts.net/avarcade/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\av-arcade.yaml\"}, {\"id\": \"avantfax-ictfax\", \"info\": {\"name\": \"avantfax-ictfax\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,avantfax-ictfax\", \"severity\": \"info\", \"metadata\": {\"product\": \"avantfax-ictfax\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<img src=\\\"images/avantfax-big.png\\\" border=\\\"0\\\" alt=\\\"ictfax\", \"content=\\\"ictfax\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\avantfax-ictfax.yaml\"}, {\"id\": \"avaya-application-enablement-services\", \"info\": {\"name\": \"avaya-application-enablement-services\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,avaya-application-enablement-services\", \"severity\": \"info\", \"metadata\": {\"product\": \"avaya-application-enablement-services\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<b>application enablement services&nbsp;</b>\", \"avaya\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\avaya-application-enablement-services.yaml\"}, {\"id\": \"avaya-aura-utility-server\", \"info\": {\"name\": \"avaya-aura-utility-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,avaya-aura-utility-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"avaya-aura-utility-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/webhelp/base/utility_toc.htm\", \"avaya aura&reg;&nbsp;utility services\", \"avaya inc. all rights reserved\", \"vmstitle\\\">avaya aura&#8482;&nbsp;utility server\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\avaya-aura-utility-server.yaml\"}, {\"id\": \"avaya-communication-manager\", \"info\": {\"name\": \"avaya-communication-manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,avaya-communication-manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"avaya-communication-manager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var newlocation = \\\"https://\\\" + target + \\\"/cgi-bin/common/issue\\\";\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\avaya-communication-manager.yaml\"}, {\"id\": \"avaya-system-platform\", \"info\": {\"name\": \"avaya-system-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,avaya-system-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"avaya-system-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"0;url=vsplogin.action\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\avaya-system-platform.yaml\"}, {\"id\": \"avtech-video-web-server\", \"info\": {\"name\": \"avtech-video-web-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,avtech-video-web-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"avtech-video-web-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"ed8cf53ef6836184587ee3a987be074a\"]}, {\"type\": \"word\", \"words\": [\"/av732e/setup.exe\", \"<title>remote surveillance, any time &amp; any where</title>\", \"please visit 'www.avtech.com.tw'\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\avtech-video-web-server.yaml\"}, {\"id\": \"aws-ec2\", \"info\": {\"name\": \"aws-ec2\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,aws-ec2\", \"severity\": \"info\", \"metadata\": {\"product\": \"aws-ec2\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"welcome to nginx on amazon ec2!\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\aws-ec2.yaml\"}, {\"id\": \"aws-elastic-beanstalk\", \"info\": {\"name\": \"aws-elastic-beanstalk\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,aws-elastic-beanstalk\", \"severity\": \"info\", \"metadata\": {\"product\": \"aws-elastic-beanstalk\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h2>what's next?</h2>\", \"aws.amazon.com/elasticbeanstalk\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\aws-elastic-beanstalk.yaml\"}, {\"id\": \"axcms\", \"info\": {\"name\": \"axcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,axcms\", \"severity\": \"info\", \"metadata\": {\"product\": \"axcms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"axcms.net\", \"generated by axcms.net\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\axcms.yaml\"}, {\"id\": \"axentra-hipserv\", \"info\": {\"name\": \"axentra-hipserv\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,axentra-hipserv\", \"severity\": \"info\", \"metadata\": {\"product\": \"axentra-hipserv\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"axentra\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\axentra-hipserv.yaml\"}, {\"id\": \"axgate-sslvpn\", \"info\": {\"name\": \"axgate-sslvpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,axgate-sslvpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"axgate-sslvpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"axgate\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\axgate-sslvpn.yaml\"}, {\"id\": \"axis2-web\", \"info\": {\"name\": \"axis2-web\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,axis2-web\", \"severity\": \"info\", \"metadata\": {\"product\": \"axis2-web\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"axis2-web/css/axis-style.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\axis2-web.yaml\"}, {\"id\": \"axtls-embad-httpd\", \"info\": {\"name\": \"axtls-embad-httpd\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,axtls-embad-httpd\", \"severity\": \"info\", \"metadata\": {\"product\": \"axtls-embad-httpd\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: axhttpd\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\axtls-embad-httpd.yaml\"}, {\"id\": \"backbee\", \"info\": {\"name\": \"backbee\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,backbee\", \"severity\": \"info\", \"metadata\": {\"product\": \"backbee\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div id=\\\"bb5-site-wrapper\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\backbee.yaml\"}, {\"id\": \"bad-debt-management-system\", \"info\": {\"name\": \"bad-debt-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bad-debt-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"bad-debt-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"登录密码错误次数超过5次，帐号被锁定。请联系省坏账系统管理员，或发邮件解锁\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bad-debt-management-system.yaml\"}, {\"id\": \"baidu-subaidu\", \"info\": {\"name\": \"baidu-subaidu\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,baidu-subaidu\", \"severity\": \"info\", \"metadata\": {\"product\": \"baidu-subaidu\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=\\\"yunjiasu_link\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\baidu-subaidu.yaml\"}, {\"id\": \"baishijia-cms\", \"info\": {\"name\": \"baishijia-cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,baishijia-cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"baishijia-cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/resource/images/cms.ico\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\baishijia-cms.yaml\"}, {\"id\": \"bamboocloud-bim\", \"info\": {\"name\": \"bamboocloud-bim\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bamboocloud-bim\", \"severity\": \"info\", \"metadata\": {\"product\": \"bamboocloud-bim\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"bim 开发配置与运维控制台\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bamboocloud-bim.yaml\"}, {\"id\": \"bangyong-pm2\", \"info\": {\"name\": \"bangyong-pm2\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bangyong-pm2\", \"severity\": \"info\", \"metadata\": {\"product\": \"bangyong-pm2\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"pm2项目管理系统bs版增强工具.zip\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bangyong-pm2.yaml\"}, {\"id\": \"barracuda-ssl-vpn\", \"info\": {\"name\": \"barracuda-ssl-vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,barracuda-ssl-vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"barracuda-ssl-vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"barracuda ssl vpn\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\barracuda-ssl-vpn.yaml\"}, {\"id\": \"basic-php-events-lister\", \"info\": {\"name\": \"basic-php-events-lister\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,basic-php-events-lister\", \"severity\": \"info\", \"metadata\": {\"product\": \"basic-php-events-lister\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by: <a href=\\\"http://www.mevin.com/\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\basic-php-events-lister.yaml\"}, {\"id\": \"bbpress\", \"info\": {\"name\": \"bbpress\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bbpress\", \"severity\": \"info\", \"metadata\": {\"product\": \"bbpress\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!-- if you like showing off the fact that your server rocks -->\", \"is proudly powered by <a href=\\\"http://bbpress.org\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bbpress.yaml\"}, {\"id\": \"bees_cms\", \"info\": {\"name\": \"bees_cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bees_cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"bees_cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"beescms\", \"template/default/images/slides.min.jquery.js\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/default/images/search_btn.gif\", \"/default/images/xslider.js\", \"mx_form/mx_form.php\", \"powerd by beescms\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bees_cms.yaml\"}, {\"id\": \"beichuang-book-retrieval-system\", \"info\": {\"name\": \"beichuang-book-retrieval-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,beichuang-book-retrieval-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"beichuang-book-retrieval-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"opac_two\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\beichuang-book-retrieval-system.yaml\"}, {\"id\": \"bentley-systems-projectwise\", \"info\": {\"name\": \"bentley-systems-projectwise\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bentley-systems-projectwise\", \"severity\": \"info\", \"metadata\": {\"product\": \"bentley-systems-projectwise\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"projectwise.ico\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bentley-systems-projectwise.yaml\"}, {\"id\": \"bestsch-ecs\", \"info\": {\"name\": \"bestsch-ecs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bestsch-ecs\", \"severity\": \"info\", \"metadata\": {\"product\": \"bestsch-ecs\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/userfiles/admin/customskin\", \"src=\\\"/include/ecsserverapi.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bestsch-ecs.yaml\"}, {\"id\": \"betasoft-pdm-data-acquisition\", \"info\": {\"name\": \"betasoft-pdm-data-acquisition\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,betasoft-pdm-data-acquisition\", \"severity\": \"info\", \"metadata\": {\"product\": \"betasoft-pdm-data-acquisition\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"align=\\\"center\\\" class=\\\"login_pdm\\\">\", \"background: no-repeat url(../images/login/pdmdenglu1_28.png);\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\betasoft-pdm-data-acquisition.yaml\"}, {\"id\": \"beyeon-iot\", \"info\": {\"name\": \"beyeon-iot\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,beyeon-iot\", \"severity\": \"info\", \"metadata\": {\"product\": \"beyeon-iot\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var app_smp_type_name = '门店';var app_grp_type_name = '集团'\", \"版权所有:郑州蓝视科技有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\beyeon-iot.yaml\"}, {\"id\": \"bh-bh5000c\", \"info\": {\"name\": \"bh-bh5000c\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bh-bh5000c\", \"severity\": \"info\", \"metadata\": {\"product\": \"bh-bh5000c\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"bhclientcer:\\\"/modules/web/common/data/bhclient.cer\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bh-bh5000c.yaml\"}, {\"id\": \"bicesoft-super-custom-survey-voting-system\", \"info\": {\"name\": \"bicesoft-super-custom-survey-voting-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bicesoft-super-custom-survey-voting-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"bicesoft-super-custom-survey-voting-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"images/bicesoft.css\\\"\", \"佰思超强自定义问卷调查系统(bicesoft.com)\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bicesoft-super-custom-survey-voting-system.yaml\"}, {\"id\": \"biept-system\", \"info\": {\"name\": \"biept-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,biept-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"biept-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"loginin loginin1\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\biept-system.yaml\"}, {\"id\": \"bigdump\", \"info\": {\"name\": \"bigdump\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bigdump\", \"severity\": \"info\", \"metadata\": {\"product\": \"bigdump\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"bigdump: staggered mysql dump importer\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bigdump.yaml\"}, {\"id\": \"bilin-uag-xi-lie-wang-guan\", \"info\": {\"name\": \"bilin-uag系列网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bilin-uag系列网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"bilin-uag系列网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"智慧网关配置平台\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bilin-uag系列网关.yaml\"}, {\"id\": \"billingtesttool\", \"info\": {\"name\": \"billingtesttool\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,billingtesttool\", \"severity\": \"info\", \"metadata\": {\"product\": \"billingtesttool\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href:'/billtool/querysum'\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\billingtesttool.yaml\"}, {\"id\": \"bio-lims\", \"info\": {\"name\": \"bio-lims\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bio-lims\", \"severity\": \"info\", \"metadata\": {\"product\": \"bio-lims\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/lims/dist/css/font-awesome.min.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bio-lims.yaml\"}, {\"id\": \"biscom-delivery-server\", \"info\": {\"name\": \"biscom-delivery-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,biscom-delivery-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"biscom-delivery-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/bds/includes/fdsjavascript.do\", \"/bds/stylesheets/fds.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\biscom-delivery-server.yaml\"}, {\"id\": \"bit-service\", \"info\": {\"name\": \"bit-service\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bit-service\", \"severity\": \"info\", \"metadata\": {\"product\": \"bit-service\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"bit-xxzs\", \"xmlpzs/webissue.asp\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bit-service.yaml\"}, {\"id\": \"bitbucket\", \"info\": {\"name\": \"bitbucket\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bitbucket\", \"severity\": \"info\", \"metadata\": {\"product\": \"bitbucket\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"bitbucket.page.login\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bitbucket.yaml\"}, {\"id\": \"bithighway-product\", \"info\": {\"name\": \"bithighway-product\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bithighway-product\", \"severity\": \"info\", \"metadata\": {\"product\": \"bithighway-product\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href='http://www.bithighway.com' target=_blank>北京碧海威科技有限公司<\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bithighway-product.yaml\"}, {\"id\": \"bitkeeper\", \"info\": {\"name\": \"bitkeeper\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bitkeeper\", \"severity\": \"info\", \"metadata\": {\"product\": \"bitkeeper\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: bkhttp\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bitkeeper.yaml\"}, {\"id\": \"bitnami-redmine-stack\", \"info\": {\"name\": \"bitnami-redmine-stack\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bitnami-redmine-stack\", \"severity\": \"info\", \"metadata\": {\"product\": \"bitnami-redmine-stack\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"alt=\\\"bitnami redmine stack\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bitnami-redmine-stack.yaml\"}, {\"id\": \"bitrix-site-manager\", \"info\": {\"name\": \"bitrix-site-manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bitrix-site-manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"bitrix-site-manager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"bitrix_sm_time_zone\", \"bx.setcsslist\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bitrix-site-manager.yaml\"}, {\"id\": \"bjca\", \"info\": {\"name\": \"bjca\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bjca\", \"severity\": \"info\", \"metadata\": {\"product\": \"bjca\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<li><a href=\\\"/install/certapp_bd.exe\\\">下载证书应用环境</a></li>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bjca.yaml\"}, {\"id\": \"bjqit-crm\", \"info\": {\"name\": \"bjqit-crm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bjqit-crm\", \"severity\": \"info\", \"metadata\": {\"product\": \"bjqit-crm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=/css/ordercomplaint\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bjqit-crm.yaml\"}, {\"id\": \"blackjumbodog\", \"info\": {\"name\": \"blackjumbodog\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,blackjumbodog\", \"severity\": \"info\", \"metadata\": {\"product\": \"blackjumbodog\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: blackjumbodog\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\blackjumbodog.yaml\"}, {\"id\": \"blazix\", \"info\": {\"name\": \"blazix\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,blazix\", \"severity\": \"info\", \"metadata\": {\"product\": \"blazix\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: blazix java server\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\blazix.yaml\"}, {\"id\": \"blogenginenet\", \"info\": {\"name\": \"blogenginenet\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,blogenginenet\", \"severity\": \"info\", \"metadata\": {\"product\": \"blogenginenet\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"http://www.dotnetblogengine.net\", \"pics/blogengine.ico\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\blogenginenet.yaml\"}, {\"id\": \"blogger\", \"info\": {\"name\": \"blogger\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,blogger\", \"severity\": \"info\", \"metadata\": {\"product\": \"blogger\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content='blogger\", \"powered by blogger\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\blogger.yaml\"}, {\"id\": \"blueonyx\", \"info\": {\"name\": \"blueonyx\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,blueonyx\", \"severity\": \"info\", \"metadata\": {\"product\": \"blueonyx\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"thank you for using the blueonyx\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\blueonyx.yaml\"}, {\"id\": \"bluepacific-network-monitoring-system\", \"info\": {\"name\": \"bluepacific-network-monitoring-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bluepacific-network-monitoring-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"bluepacific-network-monitoring-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/biradarserver/web/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bluepacific-network-monitoring-system.yaml\"}, {\"id\": \"bluepacific-share-content-management-system\", \"info\": {\"name\": \"bluepacific-share-content-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bluepacific-share-content-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"bluepacific-share-content-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/visadmin/viscms/index.do\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bluepacific-share-content-management-system.yaml\"}, {\"id\": \"bluequartz\", \"info\": {\"name\": \"bluequartz\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bluequartz\", \"severity\": \"info\", \"metadata\": {\"product\": \"bluequartz\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"value=\\\"copyright (c) 2000, cobalt networks\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bluequartz.yaml\"}, {\"id\": \"boastmachine\", \"info\": {\"name\": \"boastmachine\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,boastmachine\", \"severity\": \"info\", \"metadata\": {\"product\": \"boastmachine\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by <a href=\\\"http://boastology.com\", \"powered by boastmachine\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\boastmachine.yaml\"}, {\"id\": \"bossmail\", \"info\": {\"name\": \"bossmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bossmail\", \"severity\": \"info\", \"metadata\": {\"product\": \"bossmail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<span class=\\\"footer_t\\\">powered by bossmail</span>\", \"href=\\\"http://apps.microsoft.com/windows/zh-cn/app/bossmail/24f4bdb3-1bca-467e-9dd9-15a5d278aec6\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bossmail.yaml\"}, {\"id\": \"bowen-providence-car-loading-reservation-system\", \"info\": {\"name\": \"bowen-providence-car-loading-reservation-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bowen-providence-car-loading-reservation-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"bowen-providence-car-loading-reservation-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/public/base/js/plugins/crypto/rsa.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bowen-providence-car-loading-reservation-system.yaml\"}, {\"id\": \"boxiao-system\", \"info\": {\"name\": \"boxiao-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,boxiao-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"boxiao-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var bxnstaticresroot='/bxn-static-resource/resources'\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\boxiao-system.yaml\"}, {\"id\": \"brewblogger\", \"info\": {\"name\": \"brewblogger\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,brewblogger\", \"severity\": \"info\", \"metadata\": {\"product\": \"brewblogger\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"developed by <a href=\\\"http://www.zkdigital.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\brewblogger.yaml\"}, {\"id\": \"bridge5asia-amss\", \"info\": {\"name\": \"bridge5asia-amss\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bridge5asia-amss\", \"severity\": \"info\", \"metadata\": {\"product\": \"bridge5asia-amss\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/statics/js/mdo-angular-cryptography.js\", \"education area management support system : amss++\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bridge5asia-amss.yaml\"}, {\"id\": \"broadcom-ca-pam\", \"info\": {\"name\": \"broadcom-ca-pam\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,broadcom-ca-pam\", \"severity\": \"info\", \"metadata\": {\"product\": \"broadcom-ca-pam\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/cspm/cleansession.jsp\", \"ispamclient = false\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\broadcom-ca-pam.yaml\"}, {\"id\": \"brocade-data-angle-guard-database\", \"info\": {\"name\": \"brocade-data-angle-guard-database\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,brocade-data-angle-guard-database\", \"severity\": \"info\", \"metadata\": {\"product\": \"brocade-data-angle-guard-database\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"window.location.host + \\\"/agweb\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\brocade-data-angle-guard-database.yaml\"}, {\"id\": \"brocade-network-advisor\", \"info\": {\"name\": \"brocade-network-advisor\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,brocade-network-advisor\", \"severity\": \"info\", \"metadata\": {\"product\": \"brocade-network-advisor\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<span class=\\\"ui-menuitem-text\\\">about network advisor</span></a>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\brocade-network-advisor.yaml\"}, {\"id\": \"browsercms\", \"info\": {\"name\": \"browsercms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,browsercms\", \"severity\": \"info\", \"metadata\": {\"product\": \"browsercms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"browsercms\", \"powered by browsercms\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\browsercms.yaml\"}, {\"id\": \"bt-control-pane\", \"info\": {\"name\": \"bt-control-pane\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bt-control-pane\", \"severity\": \"info\", \"metadata\": {\"product\": \"bt-control-pane\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"bt.cn\", \"扫码登录\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"入口校验失败\", \"面板\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"set-cookie: bt_panel_6\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bt-control-pane.yaml\"}, {\"id\": \"bugfree\", \"info\": {\"name\": \"bugfree\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bugfree\", \"severity\": \"info\", \"metadata\": {\"product\": \"bugfree\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"loginbgimage\\\" alt=\\\"bugfree\", \"id=\\\"logo\\\" alt=bugfree\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bugfree.yaml\"}, {\"id\": \"bugzilla\", \"info\": {\"name\": \"bugzilla\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bugzilla\", \"severity\": \"info\", \"metadata\": {\"product\": \"bugzilla\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/cgi-bin/bugzilla/\", \"enter_bug.cgi\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bugzilla.yaml\"}, {\"id\": \"bulletlink-newspaper-template\", \"info\": {\"name\": \"bulletlink-newspaper-template\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bulletlink-newspaper-template\", \"severity\": \"info\", \"metadata\": {\"product\": \"bulletlink-newspaper-template\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/modalpopup/core-modalpopup.css\", \"powered by bulletlink\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bulletlink-newspaper-template.yaml\"}, {\"id\": \"bullwark\", \"info\": {\"name\": \"bullwark\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bullwark\", \"severity\": \"info\", \"metadata\": {\"product\": \"bullwark\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>bullwark momentum series</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bullwark.yaml\"}, {\"id\": \"burning-board-lite\", \"info\": {\"name\": \"burning-board-lite\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,burning-board-lite\", \"severity\": \"info\", \"metadata\": {\"product\": \"burning-board-lite\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by <b><a href=\\\"http://www.woltlab.de\", \"powered by <b>burning board\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\burning-board-lite.yaml\"}, {\"id\": \"business-paperless-system\", \"info\": {\"name\": \"business-paperless-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,business-paperless-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"business-paperless-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"//获取营业台席pc机 ip地址 mac地址\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\business-paperless-system.yaml\"}, {\"id\": \"business-system\", \"info\": {\"name\": \"business-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,business-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"business-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"function hiddenpass(e)\", \"function omiga_window(url)\", \"function updatapipeline(pipelinename)\", \"images/login_d.png\", \"onsubmit=\\\"return checksubmit()\", \"window.location=contextpath+\\\"/work/index.jsp\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\business-system.yaml\"}, {\"id\": \"bxemail\", \"info\": {\"name\": \"bxemail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bxemail\", \"severity\": \"info\", \"metadata\": {\"product\": \"bxemail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"请输入正确的电子邮件地址，如：abc@bxemail.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\bxemail.yaml\"}, {\"id\": \"byzoro-xia-yi-dai-fang-huo-qiang\", \"info\": {\"name\": \"byzoro-下一代防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,byzoro-下一代防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"byzoro-下一代防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"login_main_text\\\">下一代防火墙</div>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\byzoro-下一代防火墙.yaml\"}, {\"id\": \"byzoro-an-quan-wang-guan\", \"info\": {\"name\": \"byzoro-安全网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,byzoro-安全网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"byzoro-安全网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"&nbsp;patrolflow 多业务安全网关\", \"patrolflow\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\byzoro-安全网关.yaml\"}, {\"id\": \"byzoro-bai-zhuo-shen-ji-wang-guan\", \"info\": {\"name\": \"byzoro-百卓审计网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,byzoro-百卓审计网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"byzoro-百卓审计网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title> technology, inc.</title>\", \"百卓网络\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\byzoro-百卓审计网关.yaml\"}, {\"id\": \"c-lodop\", \"info\": {\"name\": \"c-lodop\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,c-lodop\", \"severity\": \"info\", \"metadata\": {\"product\": \"c-lodop\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h1>关于c-lodop免费和注册授权</h1>\", \"document.getelementbyid(\\\"reqid\\\").value==document.getelementbyid(\\\"licid\\\").value\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\c-lodop.yaml\"}, {\"id\": \"ca-siteminder\", \"info\": {\"name\": \"ca-siteminder\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ca-siteminder\", \"severity\": \"info\", \"metadata\": {\"product\": \"ca-siteminder\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!-- siteminder encoding\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ca-siteminder.yaml\"}, {\"id\": \"cachecloud\", \"info\": {\"name\": \"cachecloud\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cachecloud\", \"severity\": \"info\", \"metadata\": {\"product\": \"cachecloud\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"alert(\\\"系统不存在该用户名，请确认该用户申请了cachecloud权限!\\\");\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cachecloud.yaml\"}, {\"id\": \"cachethq\", \"info\": {\"name\": \"cachethq\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cachethq\", \"severity\": \"info\", \"metadata\": {\"product\": \"cachethq\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"atom\", \"https://cachethq.io\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cachethq.yaml\"}, {\"id\": \"calendarscript\", \"info\": {\"name\": \"calendarscript\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,calendarscript\", \"severity\": \"info\", \"metadata\": {\"product\": \"calendarscript\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by <a href=\\\"http://www.calendarscript.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\calendarscript.yaml\"}, {\"id\": \"cameralife\", \"info\": {\"name\": \"cameralife\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cameralife\", \"severity\": \"info\", \"metadata\": {\"product\": \"cameralife\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"camera life\", \"this site is powered by camera life\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cameralife.yaml\"}, {\"id\": \"campsite\", \"info\": {\"name\": \"campsite\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,campsite\", \"severity\": \"info\", \"metadata\": {\"product\": \"campsite\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"campsite\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\campsite.yaml\"}, {\"id\": \"campus-card-management-system\", \"info\": {\"name\": \"campus-card-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,campus-card-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"campus-card-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/shouyeziti.css\", \"document.formpostds.action=\\\"xxsearch.action\", \"harbin synjones electronic\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\campus-card-management-system.yaml\"}, {\"id\": \"canal-admin\", \"info\": {\"name\": \"canal-admin\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,canal-admin\", \"severity\": \"info\", \"metadata\": {\"product\": \"canal-admin\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"canal admin\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\canal-admin.yaml\"}, {\"id\": \"cancosoft-asset-management\", \"info\": {\"name\": \"cancosoft-asset-management\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cancosoft-asset-management\", \"severity\": \"info\", \"metadata\": {\"product\": \"cancosoft-asset-management\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var path = \\\"/cassets\\\";\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cancosoft-asset-management.yaml\"}, {\"id\": \"cari-system\", \"info\": {\"name\": \"cari-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cari-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"cari-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/cariweb/images/images-new\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cari-system.yaml\"}, {\"id\": \"carizen-rainmail\", \"info\": {\"name\": \"carizen-rainmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,carizen-rainmail\", \"severity\": \"info\", \"metadata\": {\"product\": \"carizen-rainmail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\".: <b>rainmail intranet login </b> :.</div>\", \"href=\\\"/resources/rainmailvpninstaller.exe\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\carizen-rainmail.yaml\"}, {\"id\": \"casdoor\", \"info\": {\"name\": \"casdoor\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,casdoor\", \"severity\": \"info\", \"metadata\": {\"product\": \"casdoor\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>casdoor\", \"casdoor/manifest.json\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\casdoor.yaml\"}, {\"id\": \"cbss-automated-testing\", \"info\": {\"name\": \"cbss-automated-testing\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cbss-automated-testing\", \"severity\": \"info\", \"metadata\": {\"product\": \"cbss-automated-testing\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<p>copyright&copy cbss 项目组 自动化测试小组</p>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cbss-automated-testing.yaml\"}, {\"id\": \"cbss-system\", \"info\": {\"name\": \"cbss-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cbss-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"cbss-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"</a>登录cbss系统</p>\", \"<li>com.cbss.xss.filter.xssfilter.dofilter\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cbss-system.yaml\"}, {\"id\": \"cc-customer-service\", \"info\": {\"name\": \"cc-customer-service\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cc-customer-service\", \"severity\": \"info\", \"metadata\": {\"product\": \"cc-customer-service\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<script src=\\\"http://kefu.qycn.com/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cc-customer-service.yaml\"}, {\"id\": \"cdr-stats\", \"info\": {\"name\": \"cdr-stats\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cdr-stats\", \"severity\": \"info\", \"metadata\": {\"product\": \"cdr-stats\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/static/cdr-stats/js/jquery\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cdr-stats.yaml\"}, {\"id\": \"ce-yun-you\", \"info\": {\"name\": \"ce-云邮\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ce-云邮\", \"severity\": \"info\", \"metadata\": {\"product\": \"ce-云邮\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/page/help/mailconfig/config/index.html\", \"href=\\\"http://webmail.zmail300.cn\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ce-云邮.yaml\"}, {\"id\": \"censura\", \"info\": {\"name\": \"censura\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,censura\", \"severity\": \"info\", \"metadata\": {\"product\": \"censura\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by: <a href=\\\"http://www.censura.info\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\censura.yaml\"}, {\"id\": \"centerm\", \"info\": {\"name\": \"centerm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,centerm\", \"severity\": \"info\", \"metadata\": {\"product\": \"centerm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"new ct.extapp.aboutsystemwindow()\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\centerm.yaml\"}, {\"id\": \"centos-mo-ren-ye-mian\", \"info\": {\"name\": \"centos默认页面\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,centos默认页面\", \"severity\": \"info\", \"metadata\": {\"product\": \"centos默认页面\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>welcome to centos</title>\", \"centos.org\", \"img/centos-logo.png\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\centos默认页面.yaml\"}, {\"id\": \"ceph\", \"info\": {\"name\": \"ceph\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ceph\", \"severity\": \"info\", \"metadata\": {\"product\": \"ceph\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"ceph-none-found\\\" rv-hide=\\\"rbd_pools\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ceph.yaml\"}, {\"id\": \"cerberus-helpdesk\", \"info\": {\"name\": \"cerberus-helpdesk\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cerberus-helpdesk\", \"severity\": \"info\", \"metadata\": {\"product\": \"cerberus-helpdesk\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!-- if you have your own stylesheet for html elements, you can remove the cerberus-html.css link\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cerberus-helpdesk.yaml\"}, {\"id\": \"cerebro\", \"info\": {\"name\": \"cerebro\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cerebro\", \"severity\": \"info\", \"metadata\": {\"product\": \"cerebro\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"lang=\\\"en\\\" ng-app=\\\"cerebro\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cerebro.yaml\"}, {\"id\": \"cetc-gong-ye-fang-huo-qiang\", \"info\": {\"name\": \"cetc-工业防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cetc-工业防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"cetc-工业防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/webgui/scripts/dd_belatedpng.js\", \"工业防火墙\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cetc-工业防火墙.yaml\"}, {\"id\": \"cgiproxy\", \"info\": {\"name\": \"cgiproxy\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cgiproxy\", \"severity\": \"info\", \"metadata\": {\"product\": \"cgiproxy\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://www.jmarshall.com/tools/cgiproxy/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cgiproxy.yaml\"}, {\"id\": \"cgit\", \"info\": {\"name\": \"cgit\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cgit\", \"severity\": \"info\", \"metadata\": {\"product\": \"cgit\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div id='cgit'>\", \"content='cgit\", \"href='/cgit.css'/>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cgit.yaml\"}, {\"id\": \"chanjet-tplus\", \"info\": {\"name\": \"chanjet-tplus\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,chanjet-tplus\", \"severity\": \"info\", \"metadata\": {\"product\": \"chanjet-tplus\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"><script>location='/tplus/';</script></body>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\chanjet-tplus.yaml\"}, {\"id\": \"chanzhicms\", \"info\": {\"name\": \"chanzhicms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,chanzhicms\", \"severity\": \"info\", \"metadata\": {\"product\": \"chanzhicms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"chanzhi.js\", \"poweredby'><a href='http://www.chanzhi.org\", \"title='cms系统，首选蝉知cms\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\chanzhicms.yaml\"}, {\"id\": \"check-point-vpn\", \"info\": {\"name\": \"check-point-vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,check-point-vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"check-point-vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<img src=\\\"/sslvpn/login/images/companylogo.png\", \"check point software technologies\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\check-point-vpn.yaml\"}, {\"id\": \"chelen-system\", \"info\": {\"name\": \"chelen-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,chelen-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"chelen-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"iaus/media/js/login/login.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\chelen-system.yaml\"}, {\"id\": \"chenrui-video-security-access-system\", \"info\": {\"name\": \"chenrui-video-security-access-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,chenrui-video-security-access-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"chenrui-video-security-access-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"window.location=\\\"/vmonitor\\\";\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\chenrui-video-security-access-system.yaml\"}, {\"id\": \"chiliproject\", \"info\": {\"name\": \"chiliproject\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,chiliproject\", \"severity\": \"info\", \"metadata\": {\"product\": \"chiliproject\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"chiliproject\", \"powered by <a href=\\\"https://www.chiliproject.org/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\chiliproject.yaml\"}, {\"id\": \"china-shine-video-on-demand\", \"info\": {\"name\": \"china-shine-video-on-demand\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,china-shine-video-on-demand\", \"severity\": \"info\", \"metadata\": {\"product\": \"china-shine-video-on-demand\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"background=\\\"images/cbackground.jpg\\\"\", \"视翰公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\china-shine-video-on-demand.yaml\"}, {\"id\": \"chinags-cloudlearning\", \"info\": {\"name\": \"chinags-cloudlearning\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,chinags-cloudlearning\", \"severity\": \"info\", \"metadata\": {\"product\": \"chinags-cloudlearning\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/integrats/gs.sub.systemmanager/dologin/json\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\chinags-cloudlearning.yaml\"}, {\"id\": \"chinags-sc\", \"info\": {\"name\": \"chinags-sc\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,chinags-sc\", \"severity\": \"info\", \"metadata\": {\"product\": \"chinags-sc\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/animation/images/teacher_2.png\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\chinags-sc.yaml\"}, {\"id\": \"chinamdm-mobile-device-management\", \"info\": {\"name\": \"chinamdm-mobile-device-management\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,chinamdm-mobile-device-management\", \"severity\": \"info\", \"metadata\": {\"product\": \"chinamdm-mobile-device-management\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"innerhtml=\\\"chinamdm移动终端管理系统\", \"justsy/user/searchmenusbyusername/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\chinamdm-mobile-device-management.yaml\"}, {\"id\": \"chinaorgantransplantresponsesystem\", \"info\": {\"name\": \"chinaorgantransplantresponsesystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,chinaorgantransplantresponsesystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"chinaorgantransplantresponsesystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"images/logo_cotsr.png\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\chinaorgantransplantresponsesystem.yaml\"}, {\"id\": \"chinatelecom-guestsupportsystem\", \"info\": {\"name\": \"chinatelecom-guestsupportsystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,chinatelecom-guestsupportsystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"chinatelecom-guestsupportsystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"nhmis.css\\\"\", \"var requiredfieldvalidator2 = document.all \"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\chinatelecom-guestsupportsystem.yaml\"}, {\"id\": \"chinatelecomarrearsrecoverymanagementsystem\", \"info\": {\"name\": \"chinatelecomarrearsrecoverymanagementsystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,chinatelecomarrearsrecoverymanagementsystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"chinatelecomarrearsrecoverymanagementsystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=\\\"v_login_container\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\chinatelecomarrearsrecoverymanagementsystem.yaml\"}, {\"id\": \"chinatelecomcustomerbroadbandaddressquerysystem\", \"info\": {\"name\": \"chinatelecomcustomerbroadbandaddressquerysystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,chinatelecomcustomerbroadbandaddressquerysystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"chinatelecomcustomerbroadbandaddressquerysystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<strong>客户宽带地址查询\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\chinatelecomcustomerbroadbandaddressquerysystem.yaml\"}, {\"id\": \"chinatelecomequipmentwebconfigurationsystem\", \"info\": {\"name\": \"chinatelecomequipmentwebconfigurationsystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,chinatelecomequipmentwebconfigurationsystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"chinatelecomequipmentwebconfigurationsystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"设备web配置</font\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\chinatelecomequipmentwebconfigurationsystem.yaml\"}, {\"id\": \"chinatelecomriskmanagementplatform\", \"info\": {\"name\": \"chinatelecomriskmanagementplatform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,chinatelecomriskmanagementplatform\", \"severity\": \"info\", \"metadata\": {\"product\": \"chinatelecomriskmanagementplatform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"风险治理平台</div>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\chinatelecomriskmanagementplatform.yaml\"}, {\"id\": \"chinatiejun-system\", \"info\": {\"name\": \"chinatiejun-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,chinatiejun-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"chinatiejun-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"document.domain == \\\"eqs.jztj.net\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\chinatiejun-system.yaml\"}, {\"id\": \"chnitc-system\", \"info\": {\"name\": \"chnitc-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,chnitc-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"chnitc-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://www.chnitc.com\\\" style=\\\"text-decoration:none;color:#fff;\\\">\", \"科业开发团队出品\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\chnitc-system.yaml\"}, {\"id\": \"cicro\", \"info\": {\"name\": \"cicro\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cicro\", \"severity\": \"info\", \"metadata\": {\"product\": \"cicro\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"cicro\", \"content=\\\"cicro\", \"cws\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"index.files/cicro_userdefine.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cicro.yaml\"}, {\"id\": \"cinvoice\", \"info\": {\"name\": \"cinvoice\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cinvoice\", \"severity\": \"info\", \"metadata\": {\"product\": \"cinvoice\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by <a href=\\\"http://www.forperfect.com/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cinvoice.yaml\"}, {\"id\": \"ciphermail-email-encryption-gateway\", \"info\": {\"name\": \"ciphermail-email-encryption-gateway\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ciphermail-email-encryption-gateway\", \"severity\": \"info\", \"metadata\": {\"product\": \"ciphermail-email-encryption-gateway\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ciphermail email encryption gateway\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ciphermail-email-encryption-gateway.yaml\"}, {\"id\": \"cirrusgate-system\", \"info\": {\"name\": \"cirrusgate-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cirrusgate-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"cirrusgate-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"window.location.href = \\\"/dlp/admin/user/login.action\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cirrusgate-system.yaml\"}, {\"id\": \"cisco-acs\", \"info\": {\"name\": \"cisco-acs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cisco-acs\", \"severity\": \"info\", \"metadata\": {\"product\": \"cisco-acs\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<meta http-equiv=\\\"refresh\\\" content=\\\"0;url=/acsadmin\\\" />\", \"cisco\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"href=\\\"/acsadmin\\\">launch acs\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cisco-acs.yaml\"}, {\"id\": \"cisco-expressway\", \"info\": {\"name\": \"cisco-expressway\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cisco-expressway\", \"severity\": \"info\", \"metadata\": {\"product\": \"cisco-expressway\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"expressway-e</legend>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cisco-expressway.yaml\"}, {\"id\": \"cisco-imc-supervisor\", \"info\": {\"name\": \"cisco-imc-supervisor\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cisco-imc-supervisor\", \"severity\": \"info\", \"metadata\": {\"product\": \"cisco-imc-supervisor\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"cisco imc supervisor\", \"font-family: \\\"ciscosansthin\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cisco-imc-supervisor.yaml\"}, {\"id\": \"cisco-ios-xe\", \"info\": {\"name\": \"cisco-ios-xe\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"cisco-ios-xe\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"d2962d133fd209cf567d05d1683f3fc1\"]}, {\"type\": \"word\", \"words\": [\"<script>window.onload=function(){ url ='/webui';window.location.href=url;}</script>\", \"<script>window.onload=function(){ url ='/webui/';window.location.href=url;}</script>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cisco-ios-xe.yaml\"}, {\"id\": \"cisco-iox\", \"info\": {\"name\": \"cisco-iox\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cisco-iox\", \"severity\": \"info\", \"metadata\": {\"product\": \"cisco-iox\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var g_url_version = \\\"/iox/api/v2\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cisco-iox.yaml\"}, {\"id\": \"cisco-meeting-app\", \"info\": {\"name\": \"cisco-meeting-app\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cisco-meeting-app\", \"severity\": \"info\", \"metadata\": {\"product\": \"cisco-meeting-app\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div id=\\\"cisco_meeting_application\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cisco-meeting-app.yaml\"}, {\"id\": \"cisco-nexus-data-broker\", \"info\": {\"name\": \"cisco-nexus-data-broker\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cisco-nexus-data-broker\", \"severity\": \"info\", \"metadata\": {\"product\": \"cisco-nexus-data-broker\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"window.location.href = '/monitor';\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cisco-nexus-data-broker.yaml\"}, {\"id\": \"cisco-prime-infrastructure\", \"info\": {\"name\": \"cisco-prime-infrastructure\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cisco-prime-infrastructure\", \"severity\": \"info\", \"metadata\": {\"product\": \"cisco-prime-infrastructure\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/webacs/lib/xwt/themes/prime/prime-xwt.css\", \"<div class=\\\"xwtproductname\\\" >cisco prime infrastructure\", \"webacs/welcomeaction.do\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"server: prime\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cisco-prime-infrastructure.yaml\"}, {\"id\": \"cisco-prime-network-registrar\", \"info\": {\"name\": \"cisco-prime-network-registrar\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cisco-prime-network-registrar\", \"severity\": \"info\", \"metadata\": {\"product\": \"cisco-prime-network-registrar\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"productname=\\\"network registrar\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cisco-prime-network-registrar.yaml\"}, {\"id\": \"cisco-ssl-vpn\", \"info\": {\"name\": \"cisco-ssl-vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cisco-ssl-vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"cisco-ssl-vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"set-cookie: webvpncontext=\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cisco-ssl-vpn.yaml\"}, {\"id\": \"cisco-ucm\", \"info\": {\"name\": \"cisco-ucm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cisco-ucm\", \"severity\": \"info\", \"metadata\": {\"product\": \"cisco-ucm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/ccmadmin/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cisco-ucm.yaml\"}, {\"id\": \"cisco-ucs-director\", \"info\": {\"name\": \"cisco-ucs-director\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cisco-ucs-director\", \"severity\": \"info\", \"metadata\": {\"product\": \"cisco-ucs-director\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"cisco ucs director\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cisco-ucs-director.yaml\"}, {\"id\": \"cisco-webex\", \"info\": {\"name\": \"cisco-webex\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cisco-webex\", \"severity\": \"info\", \"metadata\": {\"product\": \"cisco-webex\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"alt=\\\"cisco webex meetings server\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cisco-webex.yaml\"}, {\"id\": \"ciscovpn\", \"info\": {\"name\": \"ciscovpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ciscovpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"ciscovpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/+cscoe+/logon.html\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ciscovpn.yaml\"}, {\"id\": \"citadel-servers\", \"info\": {\"name\": \"citadel-servers\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,citadel-servers\", \"severity\": \"info\", \"metadata\": {\"product\": \"citadel-servers\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/styles/webcit.css\", \"<div class=\\\"boxlabel\\\">citadel server - powered by\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\citadel-servers.yaml\"}, {\"id\": \"citec-system\", \"info\": {\"name\": \"citec-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,citec-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"citec-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"正在使用腾讯qq帐号登录消防联网系统\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\citec-system.yaml\"}, {\"id\": \"citrix-access-gateway\", \"info\": {\"name\": \"citrix-access-gateway\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,citrix-access-gateway\", \"severity\": \"info\", \"metadata\": {\"product\": \"citrix-access-gateway\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"\\\"/vpn/resources/{lang}\\\"\", \"/vpn/js/gateway_login_view.js?\", \"class=\\\"_ctxstxt_netscalergateway\\\"\", \"class=\\\"citrixreceiverlogoaboutbox\\\"\", \"cloud.ottoworkfroce.eu/vpn/index.html\", \"href=\\\"/vpn/images/accessgateway.ico\", \"receiver/images/common/icon_vpn.ico\", \"vpn/js/lsgateway_login_view.js\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"location: /vpn/index.html\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\citrix-access-gateway.yaml\"}, {\"id\": \"citrix-metaframe\", \"info\": {\"name\": \"citrix-metaframe\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,citrix-metaframe\", \"severity\": \"info\", \"metadata\": {\"product\": \"citrix-metaframe\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"window.location=\\\"/citrix/metaframe\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\citrix-metaframe.yaml\"}, {\"id\": \"citrix-receiver\", \"info\": {\"name\": \"citrix-receiver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,citrix-receiver\", \"severity\": \"info\", \"metadata\": {\"product\": \"citrix-receiver\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"logonbelt-topshadow\", \"upgradeavailable-already-installed-separator bar-separator\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"href=\\\"clients/html5client/src/receiverthirdpartynotices.html\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\citrix-receiver.yaml\"}, {\"id\": \"citrix-web-pn-server\", \"info\": {\"name\": \"citrix-web-pn-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,citrix-web-pn-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"citrix-web-pn-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: citrix web pn server\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\citrix-web-pn-server.yaml\"}, {\"id\": \"citrix-xcp\", \"info\": {\"name\": \"citrix-xcp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,citrix-xcp\", \"severity\": \"info\", \"metadata\": {\"product\": \"citrix-xcp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<p/>citrix systems, inc. xcp 1.6.10\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\citrix-xcp.yaml\"}, {\"id\": \"citrix-xenmobile\", \"info\": {\"name\": \"citrix-xenmobile\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,citrix-xenmobile\", \"severity\": \"info\", \"metadata\": {\"product\": \"citrix-xenmobile\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"citrix-transactionid:\", \"set-cookie: xmscookie\"], \"part\": \"header\", \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"<title>xenmobile\", \"citrix_logo\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\citrix-xenmobile.yaml\"}, {\"id\": \"citrix-xenserver\", \"info\": {\"name\": \"citrix-xenserver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,citrix-xenserver\", \"severity\": \"info\", \"metadata\": {\"product\": \"citrix-xenserver\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"xencentersetup.exe\\\">xencenter installer</a>\", \"citrix systems, inc. xenserver\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\citrix-xenserver.yaml\"}, {\"id\": \"ciuiscrm\", \"info\": {\"name\": \"ciuiscrm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ciuiscrm\", \"severity\": \"info\", \"metadata\": {\"product\": \"ciuiscrm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div class=\\\"ciuis-body-content\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ciuiscrm.yaml\"}, {\"id\": \"cl-http\", \"info\": {\"name\": \"cl-http\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cl-http\", \"severity\": \"info\", \"metadata\": {\"product\": \"cl-http\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: cl-http\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cl-http.yaml\"}, {\"id\": \"claroline\", \"info\": {\"name\": \"claroline\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,claroline\", \"severity\": \"info\", \"metadata\": {\"product\": \"claroline\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"http://www.claroline.net\\\" rel=\\\"copyright\", \"target=\\\"_blank\\\">claroline</a>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\claroline.yaml\"}, {\"id\": \"clearwell-e-discovery\", \"info\": {\"name\": \"clearwell-e-discovery\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,clearwell-e-discovery\", \"severity\": \"info\", \"metadata\": {\"product\": \"clearwell-e-discovery\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: clearwell\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\clearwell-e-discovery.yaml\"}, {\"id\": \"clientexec\", \"info\": {\"name\": \"clientexec\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,clientexec\", \"severity\": \"info\", \"metadata\": {\"product\": \"clientexec\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by clientexec\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\clientexec.yaml\"}, {\"id\": \"clipbucket\", \"info\": {\"name\": \"clipbucket\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,clipbucket\", \"severity\": \"info\", \"metadata\": {\"product\": \"clipbucket\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!-- clipbucket\", \"content=\\\"clipbucket\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"<!-- forged by clipbucket\", \"href=\\\"http://clip-bucket.com/\\\">clipbucket\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\clipbucket.yaml\"}, {\"id\": \"clipshare\", \"info\": {\"name\": \"clipshare\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,clipshare\", \"severity\": \"info\", \"metadata\": {\"product\": \"clipshare\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!--!!!!!!!!!!!!!!!!!!!!!!!!! processing script\", \"powered by <a href=\\\"http://www.clip-share.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\clipshare.yaml\"}, {\"id\": \"cloodie-his\", \"info\": {\"name\": \"cloodie-his\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cloodie-his\", \"severity\": \"info\", \"metadata\": {\"product\": \"cloodie-his\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/design/design/cloodie.css\", \"src=\\\"/design/common/his.logo.white.svg\\\" alt=\\\"his logo\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cloodie-his.yaml\"}, {\"id\": \"cloudera-manager\", \"info\": {\"name\": \"cloudera-manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cloudera-manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"cloudera-manager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var loginpageurl = \\\"/cmf/login\\\";\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"set-cookie: cloudera_manager_sessionid=\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cloudera-manager.yaml\"}, {\"id\": \"cloudroom-meeting\", \"info\": {\"name\": \"cloudroom-meeting\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cloudroom-meeting\", \"severity\": \"info\", \"metadata\": {\"product\": \"cloudroom-meeting\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/companyimage/agents/sdk-logo.png\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cloudroom-meeting.yaml\"}, {\"id\": \"cloudwise-dodp\", \"info\": {\"name\": \"cloudwise-dodp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cloudwise-dodp\", \"severity\": \"info\", \"metadata\": {\"product\": \"cloudwise-dodp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/public/vendor/monaco/vs/loader.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cloudwise-dodp.yaml\"}, {\"id\": \"cmailserver\", \"info\": {\"name\": \"cmailserver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cmailserver\", \"severity\": \"info\", \"metadata\": {\"product\": \"cmailserver\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<font size=2>username ( contatto email )</font>\", \"<input type=checkbox name=\\\"saveuserpass\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cmailserver.yaml\"}, {\"id\": \"cms4j\", \"info\": {\"name\": \"cms4j\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cms4j\", \"severity\": \"info\", \"metadata\": {\"product\": \"cms4j\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/cms4jadmin/login.jsp\", \"method=\\\"post\\\" name=\\\"cms4jsearchform\\\" id=\\\"cms4jsearchform\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cms4j.yaml\"}, {\"id\": \"cmspro\", \"info\": {\"name\": \"cmspro\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cmspro\", \"severity\": \"info\", \"metadata\": {\"product\": \"cmspro\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"cms内容管理系统\", \"开普互联\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cmspro.yaml\"}, {\"id\": \"cmstop\", \"info\": {\"name\": \"cmstop\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cmstop\", \"severity\": \"info\", \"metadata\": {\"product\": \"cmstop\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a class=\\\"poweredby\\\" href=\\\"http://www.cmstop.com\\\"\", \"cmstop-list-text.css\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/css/cmstop-common.css\", \"/js/cmstop-common.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cmstop.yaml\"}, {\"id\": \"cmstuan\", \"info\": {\"name\": \"cmstuan\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cmstuan\", \"severity\": \"info\", \"metadata\": {\"product\": \"cmstuan\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"开源团主机管理系统\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cmstuan.yaml\"}, {\"id\": \"cndatacom-smsp\", \"info\": {\"name\": \"cndatacom-smsp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cndatacom-smsp\", \"severity\": \"info\", \"metadata\": {\"product\": \"cndatacom-smsp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/smrc/resources/default/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cndatacom-smsp.yaml\"}, {\"id\": \"cnoa-oa\", \"info\": {\"name\": \"cnoa-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cnoa-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"cnoa-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"admin@cnoa.cn\", \"powered by 协众oa\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"powered by cnoa.cn\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cnoa-oa.yaml\"}, {\"id\": \"cnpower-oa\", \"info\": {\"name\": \"cnpower-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cnpower-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"cnpower-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/oaapp/webobjects/oaapp.woa\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cnpower-oa.yaml\"}, {\"id\": \"cnrdm-product\", \"info\": {\"name\": \"cnrdm-product\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cnrdm-product\", \"severity\": \"info\", \"metadata\": {\"product\": \"cnrdm-product\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"登录青铜器rdm</b></div>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cnrdm-product.yaml\"}, {\"id\": \"cns-corenetwork-services\", \"info\": {\"name\": \"cns-corenetwork-services\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cns-corenetwork-services\", \"severity\": \"info\", \"metadata\": {\"product\": \"cns-corenetwork-services\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!--p>cns网络核心服务自动化开通平台系统. \", \"<span class=\\\"left\\\">cns-app \"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cns-corenetwork-services.yaml\"}, {\"id\": \"cnvp-jcms\", \"info\": {\"name\": \"cnvp-jcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cnvp-jcms\", \"severity\": \"info\", \"metadata\": {\"product\": \"cnvp-jcms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"publish by jcms2010\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cnvp-jcms.yaml\"}, {\"id\": \"cnway-ilims\", \"info\": {\"name\": \"cnway-ilims\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cnway-ilims\", \"severity\": \"info\", \"metadata\": {\"product\": \"cnway-ilims\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/js/allpagefunction.js\", \"src=\\\"/extjs/adapter/ext/ext-base-js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cnway-ilims.yaml\"}, {\"id\": \"cockpit\", \"info\": {\"name\": \"cockpit\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cockpit\", \"severity\": \"info\", \"metadata\": {\"product\": \"cockpit\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"cockpit/static/login.css\", \"cockpit/static/login.js\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cockpit.yaml\"}, {\"id\": \"codepush-server\", \"info\": {\"name\": \"codepush-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,codepush-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"codepush-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"codepush service is hotupdate services\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\codepush-server.yaml\"}, {\"id\": \"codesafe\", \"info\": {\"name\": \"codesafe\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,codesafe\", \"severity\": \"info\", \"metadata\": {\"product\": \"codesafe\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"baseurl : 'app',        //配置模块根路径到静态资源根目录。\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\codesafe.yaml\"}, {\"id\": \"codesys-webvisu\", \"info\": {\"name\": \"codesys-webvisu\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,codesys-webvisu\", \"severity\": \"info\", \"metadata\": {\"product\": \"codesys-webvisu\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<param name=\\\"startvisu\\\" value=\\\"plc_visu\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\codesys-webvisu.yaml\"}, {\"id\": \"codiad\", \"info\": {\"name\": \"codiad\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,codiad\", \"severity\": \"info\", \"metadata\": {\"product\": \"codiad\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"codimd\", \"hackmd\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\codiad.yaml\"}, {\"id\": \"cogent-datahub\", \"info\": {\"name\": \"cogent-datahub\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cogent-datahub\", \"severity\": \"info\", \"metadata\": {\"product\": \"cogent-datahub\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/images/cogent.gif\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cogent-datahub.yaml\"}, {\"id\": \"colasoft-mdp\", \"info\": {\"name\": \"colasoft-mdp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,colasoft-mdp\", \"severity\": \"info\", \"metadata\": {\"product\": \"colasoft-mdp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div id=\\\"processtime\\\" time=\\\"0.000033\\\" >#processtime</div>\", \"科来 版权所有 保留所有权利\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\colasoft-mdp.yaml\"}, {\"id\": \"colasoft-network-information-comprehensive-detection-and-processing-platform\", \"info\": {\"name\": \"colasoft-network-information-comprehensive-detection-and-processing-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,colasoft-network-information-comprehensive-detection-and-processing-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"colasoft-network-information-comprehensive-detection-and-processing-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<meta name=\\\"colasoft\\\"\", \"科来网络信息综合检测处理平台\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\colasoft-network-information-comprehensive-detection-and-processing-platform.yaml\"}, {\"id\": \"colasoft-tsa\", \"info\": {\"name\": \"colasoft-tsa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,colasoft-tsa\", \"severity\": \"info\", \"metadata\": {\"product\": \"colasoft-tsa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"data-i18n=\\\"[html]username\\\">#username&nbsp;&nbsp;</td>\", \"nfr=\\\"true\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\colasoft-tsa.yaml\"}, {\"id\": \"coldfusion\", \"info\": {\"name\": \"coldfusion\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,coldfusion\", \"severity\": \"info\", \"metadata\": {\"product\": \"coldfusion\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/cfajax/\", \"<cfscript>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\coldfusion.yaml\"}, {\"id\": \"collaborative-management-platform\", \"info\": {\"name\": \"collaborative-management-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,collaborative-management-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"collaborative-management-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/activex/sinoccshell.cab\", \"/web/submitlogon2.do\", \"/web/submitlogon2.do \", \"css/hitalklogin.css\", \"广州协商科技有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\collaborative-management-platform.yaml\"}, {\"id\": \"collectionsystem\", \"info\": {\"name\": \"collectionsystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,collectionsystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"collectionsystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"s_container_left\\\"\", \"upgrade/ocx/ccdmsshell.cab#version\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\collectionsystem.yaml\"}, {\"id\": \"colorfulcube-traffic-management\", \"info\": {\"name\": \"colorfulcube-traffic-management\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,colorfulcube-traffic-management\", \"severity\": \"info\", \"metadata\": {\"product\": \"colorfulcube-traffic-management\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"checkcode.aspx\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\colorfulcube-traffic-management.yaml\"}, {\"id\": \"comcast-business\", \"info\": {\"name\": \"comcast-business\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,comcast-business\", \"severity\": \"info\", \"metadata\": {\"product\": \"comcast-business\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"cmn/css/common-min.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\comcast-business.yaml\"}, {\"id\": \"comexe-ras\", \"info\": {\"name\": \"comexe-ras\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,comexe-ras\", \"severity\": \"info\", \"metadata\": {\"product\": \"comexe-ras\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"pic/iras.ico\", \"href=\\\"pic/ras.ico\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"href=\\\"cmxlogin.php\\\"\", \"type=\\\"application/npras\", \"科迈ras\", \"远程技术支持请求：<a href=\\\"http://www.comexe.cn\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\comexe-ras.yaml\"}, {\"id\": \"commonspot\", \"info\": {\"name\": \"commonspot\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,commonspot\", \"severity\": \"info\", \"metadata\": {\"product\": \"commonspot\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"commonspot\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\commonspot.yaml\"}, {\"id\": \"communigate-pro\", \"info\": {\"name\": \"communigate-pro\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,communigate-pro\", \"severity\": \"info\", \"metadata\": {\"product\": \"communigate-pro\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: communigatepro\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\communigate-pro.yaml\"}, {\"id\": \"conexant-emweb\", \"info\": {\"name\": \"conexant-emweb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,conexant-emweb\", \"severity\": \"info\", \"metadata\": {\"product\": \"conexant-emweb\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: virata-emweb\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\conexant-emweb.yaml\"}, {\"id\": \"confluence\", \"info\": {\"name\": \"confluence\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,confluence\", \"severity\": \"info\", \"metadata\": {\"product\": \"confluence\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"location: /login.action?os_destination=\", \"x-confluence-request-time:\"], \"part\": \"header\", \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"id=\\\"com-atlassian-confluence\", \"name=\\\"confluence-base-url\\\"\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\confluence.yaml\"}, {\"id\": \"conftool\", \"info\": {\"name\": \"conftool\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,conftool\", \"severity\": \"info\", \"metadata\": {\"product\": \"conftool\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href='http://www.conftool.net'>conference management software\", \"<h2 align=center>conftool conference administration\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\conftool.yaml\"}, {\"id\": \"conking-schoolgroup\", \"info\": {\"name\": \"conking-schoolgroup\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,conking-schoolgroup\", \"severity\": \"info\", \"metadata\": {\"product\": \"conking-schoolgroup\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"javascripts/float.js\", \"vcxvcxv\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\conking-schoolgroup.yaml\"}, {\"id\": \"consul-hashicorp\", \"info\": {\"name\": \"consul-hashicorp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,consul-hashicorp\", \"severity\": \"info\", \"metadata\": {\"product\": \"consul-hashicorp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"consul instance\", \"consul-ui/config/environment\", \"consulhost\", \"www.consul.io\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\consul-hashicorp.yaml\"}, {\"id\": \"contentxxl\", \"info\": {\"name\": \"contentxxl\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,contentxxl\", \"severity\": \"info\", \"metadata\": {\"product\": \"contentxxl\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"contentxxl\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\contentxxl.yaml\"}, {\"id\": \"cool-admin\", \"info\": {\"name\": \"cool-admin\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cool-admin\", \"severity\": \"info\", \"metadata\": {\"product\": \"cool-admin\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"0a1a4905050aeb5bcc9d0c124bb96eb6\"]}, {\"type\": \"word\", \"words\": [\"cool-admin\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cool-admin.yaml\"}, {\"id\": \"coremail\", \"info\": {\"name\": \"coremail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,coremail\", \"severity\": \"info\", \"metadata\": {\"product\": \"coremail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/coremail/bundle/\", \"/coremail/common/\", \"<a href=\\\"http://www.coremail.cn\\\" target=\\\"_blank\\\">\", \"action=\\\"/coremail/index.jsp\", \"coremail/common\", \"fmt_logoalt: \\\"coremail 电子邮件系统\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\coremail.yaml\"}, {\"id\": \"coreshop\", \"info\": {\"name\": \"coreshop\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,coreshop\", \"severity\": \"info\", \"metadata\": {\"product\": \"coreshop\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"ac08a66b033430e3034e395cc9f04533\"]}, {\"type\": \"word\", \"words\": [\"coreshop\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\coreshop.yaml\"}, {\"id\": \"couchbase\", \"info\": {\"name\": \"couchbase\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,couchbase\", \"severity\": \"info\", \"metadata\": {\"product\": \"couchbase\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: couchbase\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\couchbase.yaml\"}, {\"id\": \"creatsoft-safesystem\", \"info\": {\"name\": \"creatsoft-safesystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,creatsoft-safesystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"creatsoft-safesystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"javascript:update_news('board/noticelist.jsp')\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\creatsoft-safesystem.yaml\"}, {\"id\": \"creatsoft-system\", \"info\": {\"name\": \"creatsoft-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,creatsoft-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"creatsoft-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/corrosion/charts/ph.jsp\\\"\", \"href=\\\"/corrosion/charts/water-pid.jsp\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\creatsoft-system.yaml\"}, {\"id\": \"crhms-medical-insurance-decision-support-system\", \"info\": {\"name\": \"crhms-medical-insurance-decision-support-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,crhms-medical-insurance-decision-support-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"crhms-medical-insurance-decision-support-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"name=\\\"source\\\" value=\\\"clientbin/cisdasystem.xap\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\crhms-medical-insurance-decision-support-system.yaml\"}, {\"id\": \"crhms-medical-insurance-review-system\", \"info\": {\"name\": \"crhms-medical-insurance-review-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,crhms-medical-insurance-review-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"crhms-medical-insurance-review-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"window.open(url, \\\"中公网医疗信息管理系统\\\", option\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\crhms-medical-insurance-review-system.yaml\"}, {\"id\": \"crow-force-portal-cms\", \"info\": {\"name\": \"crow-force-portal-cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,crow-force-portal-cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"crow-force-portal-cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"中企动力提供技术支持\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\crow-force-portal-cms.yaml\"}, {\"id\": \"cscms\", \"info\": {\"name\": \"cscms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cscms\", \"severity\": \"info\", \"metadata\": {\"product\": \"cscms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/js/cscms.js\", \"tag_adfo dis_wap\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cscms.yaml\"}, {\"id\": \"ctop-oa\", \"info\": {\"name\": \"ctop-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ctop-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"ctop-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/ctop/index.jsp\", \"/software/jinstall.exe\", \"src=\\\"images/ctop_logo.gif\", \"src=\\\"images/logo-ctop.gif\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ctop-oa.yaml\"}, {\"id\": \"cuisec-system\", \"info\": {\"name\": \"cuisec-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cuisec-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"cuisec-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"r=e&&e.__esmodule?function\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cuisec-system.yaml\"}, {\"id\": \"cups\", \"info\": {\"name\": \"cups\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cups\", \"severity\": \"info\", \"metadata\": {\"product\": \"cups\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: cups\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cups.yaml\"}, {\"id\": \"customer-service-operations-management-system\", \"info\": {\"name\": \"customer-service-operations-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,customer-service-operations-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"customer-service-operations-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div class=\\\"count-down\\\">页面在<em>5</em>秒后自动跳转至您有权限的页面</div>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\customer-service-operations-management-system.yaml\"}, {\"id\": \"cwp-controlpanel\", \"info\": {\"name\": \"cwp-controlpanel\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cwp-controlpanel\", \"severity\": \"info\", \"metadata\": {\"product\": \"cwp-controlpanel\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/login/cwp_theme/original/img/ico/favicon.ico\\\"\", \"src=\\\"/login/cwp_theme/original/img/new_logo_small.png\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cwp-controlpanel.yaml\"}, {\"id\": \"cybozu-garoon\", \"info\": {\"name\": \"cybozu-garoon\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cybozu-garoon\", \"severity\": \"info\", \"metadata\": {\"product\": \"cybozu-garoon\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: cybozu-ws\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\cybozu-garoon.yaml\"}, {\"id\": \"dahua-wpms\", \"info\": {\"name\": \"dahua-wpms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dahua-wpms\", \"severity\": \"info\", \"metadata\": {\"product\": \"dahua-wpms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<li id=\\\"dss-help\\\">\", \"<span>dss助手</span>\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dahua-wpms.yaml\"}, {\"id\": \"dahua-zhi-hui-yuan-qu-zong-he-guan-li-ping-tai\", \"info\": {\"name\": \"dahua-智慧园区综合管理平台\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"dahua-智慧园区综合管理平台\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<li id=\\\"dss-help\\\">\", \"<span>dss助手</span>\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"created by intellij idea.\", \"/wpms\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"created by intellij idea.\", \"selene\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"\\\"include/styles/common/favicon.ico\", \"portal/login_init.action\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/wpms/asset/common/css/base.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dahua-智慧园区综合管理平台.yaml\"}, {\"id\": \"dandian-crm\", \"info\": {\"name\": \"dandian-crm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dandian-crm\", \"severity\": \"info\", \"metadata\": {\"product\": \"dandian-crm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"单点crm系统\", \"url=general/erp/login/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dandian-crm.yaml\"}, {\"id\": \"darkstat\", \"info\": {\"name\": \"darkstat\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,darkstat\", \"severity\": \"info\", \"metadata\": {\"product\": \"darkstat\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: darkstat\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\darkstat.yaml\"}, {\"id\": \"das-intellitech-c3\", \"info\": {\"name\": \"das-intellitech-c3\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,das-intellitech-c3\", \"severity\": \"info\", \"metadata\": {\"product\": \"das-intellitech-c3\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"window.location.href=\\\"single/empmain2.aspx\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\das-intellitech-c3.yaml\"}, {\"id\": \"das-usmb\", \"info\": {\"name\": \"das-usmb-\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,das-usmb-\", \"severity\": \"info\", \"metadata\": {\"product\": \"das-usmb-\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"loadoem?path=login-logo.png\", \"var pagefunc968535468893538dasdaweqwertion = \\\"timeout\\\";\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\das-usmb-.yaml\"}, {\"id\": \"datalife-engine\", \"info\": {\"name\": \"datalife-engine\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,datalife-engine\", \"severity\": \"info\", \"metadata\": {\"product\": \"datalife-engine\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"datalife engine\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\datalife-engine.yaml\"}, {\"id\": \"datanet\", \"info\": {\"name\": \"datanet\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,datanet\", \"severity\": \"info\", \"metadata\": {\"product\": \"datanet\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href='/scada'>datanet scada interface\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\datanet.yaml\"}, {\"id\": \"daydao-system\", \"info\": {\"name\": \"daydao-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,daydao-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"daydao-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"$(document).attr(\\\"title\\\",\\\"我被修改啦.哈哈\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\daydao-system.yaml\"}, {\"id\": \"dayrui-cms\", \"info\": {\"name\": \"dayrui-cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dayrui-cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"dayrui-cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"dayrui/statics\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dayrui-cms.yaml\"}, {\"id\": \"dayrui-poscms\", \"info\": {\"name\": \"dayrui-poscms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dayrui-poscms\", \"severity\": \"info\", \"metadata\": {\"product\": \"dayrui-poscms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/statics/admin/global/plugins/font-awesome/css/font-awesome.min.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dayrui-poscms.yaml\"}, {\"id\": \"dbshop\", \"info\": {\"name\": \"dbshop\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dbshop\", \"severity\": \"info\", \"metadata\": {\"product\": \"dbshop\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"dbshop\", \"content=\\\"dbshop\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dbshop.yaml\"}, {\"id\": \"dcn-fang-huo-qiang\", \"info\": {\"name\": \"dcn-防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dcn-防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"dcn-防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"dcfos web management\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dcn-防火墙.yaml\"}, {\"id\": \"dejavu\", \"info\": {\"name\": \"dejavu\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dejavu\", \"severity\": \"info\", \"metadata\": {\"product\": \"dejavu\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"dejavu, the missing web ui for elasticsearch\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dejavu.yaml\"}, {\"id\": \"dell-idrac\", \"info\": {\"name\": \"dell-idrac\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dell-idrac\", \"severity\": \"info\", \"metadata\": {\"product\": \"dell-idrac\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>dell remote management controller</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dell-idrac.yaml\"}, {\"id\": \"dell-n1108p-on\", \"info\": {\"name\": \"dell-n1108p-on\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dell-n1108p-on\", \"severity\": \"info\", \"metadata\": {\"product\": \"dell-n1108p-on\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"login_server_default\\\">n1108p-on\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dell-n1108p-on.yaml\"}, {\"id\": \"dell-navisphere-express\", \"info\": {\"name\": \"dell-navisphere-express\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dell-navisphere-express\", \"severity\": \"info\", \"metadata\": {\"product\": \"dell-navisphere-express\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"parent.main.location = urlnonst + \\\"?nst=\\\" + top.menu.securitytoken\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dell-navisphere-express.yaml\"}, {\"id\": \"dell-networker-management-console\", \"info\": {\"name\": \"dell-networker-management-console\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dell-networker-management-console\", \"severity\": \"info\", \"metadata\": {\"product\": \"dell-networker-management-console\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"emc corporation\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dell-networker-management-console.yaml\"}, {\"id\": \"dell-open-manage\", \"info\": {\"name\": \"dell-open-manage\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dell-open-manage\", \"severity\": \"info\", \"metadata\": {\"product\": \"dell-open-manage\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<img title=\\\"open manage\\\" alt=\\\"open manage\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dell-open-manage.yaml\"}, {\"id\": \"dell-openmanage-switch-administrator\", \"info\": {\"name\": \"dell-openmanage-switch-administrator\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dell-openmanage-switch-administrator\", \"severity\": \"info\", \"metadata\": {\"product\": \"dell-openmanage-switch-administrator\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"progressgraphicnone\", \"window.top.location.href = \\\"dell_login.html\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dell-openmanage-switch-administrator.yaml\"}, {\"id\": \"dell-openmanage\", \"info\": {\"name\": \"dell-openmanage\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dell-openmanage\", \"severity\": \"info\", \"metadata\": {\"product\": \"dell-openmanage\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/oem//data/images/logo.gif\\\"\", \"url=/servlet/omsalogin?msgstatus='\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"alt=\\\"openmanage\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dell-openmanage.yaml\"}, {\"id\": \"dell-unisphere\", \"info\": {\"name\": \"dell-unisphere\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dell-unisphere\", \"severity\": \"info\", \"metadata\": {\"product\": \"dell-unisphere\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"unisphere for sc series\", \"用于 sc 系列的 unisphere\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dell-unisphere.yaml\"}, {\"id\": \"deluxebb\", \"info\": {\"name\": \"deluxebb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,deluxebb\", \"severity\": \"info\", \"metadata\": {\"product\": \"deluxebb\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"powered by deluxebb\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\deluxebb.yaml\"}, {\"id\": \"deshang-dsmall\", \"info\": {\"name\": \"deshang-dsmall\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,deshang-dsmall\", \"severity\": \"info\", \"metadata\": {\"product\": \"deshang-dsmall\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/static/plugins/js/dialog/dialog.js\\\" id=\\\"dialog_js\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\deshang-dsmall.yaml\"}, {\"id\": \"destoon\", \"info\": {\"name\": \"destoon\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,destoon\", \"severity\": \"info\", \"metadata\": {\"product\": \"destoon\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"destoon\", \"destoon_moduleid\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\destoon.yaml\"}, {\"id\": \"devaldi-flexpaper\", \"info\": {\"name\": \"devaldi-flexpaper\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,devaldi-flexpaper\", \"severity\": \"info\", \"metadata\": {\"product\": \"devaldi-flexpaper\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"http://flexpaper.devaldi.com/plugins.htm\\\"\", \"login to the flexpaper console\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\devaldi-flexpaper.yaml\"}, {\"id\": \"dfe-scada\", \"info\": {\"name\": \"dfe-scada\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dfe-scada\", \"severity\": \"info\", \"metadata\": {\"product\": \"dfe-scada\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"536870912\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dfe-scada.yaml\"}, {\"id\": \"dhc-oa\", \"info\": {\"name\": \"dhc-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dhc-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"dhc-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/extcomponent/security/image/dhc.png\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dhc-oa.yaml\"}, {\"id\": \"dian-diagnostics\", \"info\": {\"name\": \"dian-diagnostics\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dian-diagnostics\", \"severity\": \"info\", \"metadata\": {\"product\": \"dian-diagnostics\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/resources/pages/img/logo.svg\\\"\", \"浙江迪安诊断技术股份有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dian-diagnostics.yaml\"}, {\"id\": \"diancms\", \"info\": {\"name\": \"diancms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,diancms\", \"severity\": \"info\", \"metadata\": {\"product\": \"diancms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"diancms_sitename\", \"diancms_用户登陆引用\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\diancms.yaml\"}, {\"id\": \"diaowen-system\", \"info\": {\"name\": \"diaowen-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,diaowen-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"diaowen-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by <a href=\\\"http://www.dwsurvey.net\\\" style=\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\diaowen-system.yaml\"}, {\"id\": \"differsoft-itsystem\", \"info\": {\"name\": \"differsoft-itsystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,differsoft-itsystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"differsoft-itsystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"name=\\\"tbzcode\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\differsoft-itsystem.yaml\"}, {\"id\": \"digitalguardian-system\", \"info\": {\"name\": \"digitalguardian-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,digitalguardian-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"digitalguardian-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/brands/guardian/favicon.ico\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\digitalguardian-system.yaml\"}, {\"id\": \"digiwin-system\", \"info\": {\"name\": \"digiwin-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,digiwin-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"digiwin-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"common_footer1030_textfontlink\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\digiwin-system.yaml\"}, {\"id\": \"dingruan-cgm\", \"info\": {\"name\": \"dingruan-cgm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dingruan-cgm\", \"severity\": \"info\", \"metadata\": {\"product\": \"dingruan-cgm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id='cgm' style='background-image\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dingruan-cgm.yaml\"}, {\"id\": \"discuz\", \"info\": {\"name\": \"discuz\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,discuz\", \"severity\": \"info\", \"metadata\": {\"product\": \"discuz\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"discuz!\", \"discuz_uid\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"discuz_uid\", \"portal.php?mod=\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"content=\\\"discuz\", \"href=\\\"/forum.php?\", \"id=\\\"discuz_tips\", \"powered by <strong><a href=\\\"http://www.discuz.net\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\discuz.yaml\"}, {\"id\": \"disqus\", \"info\": {\"name\": \"disqus\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,disqus\", \"severity\": \"info\", \"metadata\": {\"product\": \"disqus\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"disqus_thread\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\disqus.yaml\"}, {\"id\": \"distributed-regtech-collaboration-platform\", \"info\": {\"name\": \"distributed-regtech-collaboration-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,distributed-regtech-collaboration-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"distributed-regtech-collaboration-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<span class=\\\"blue bolder\\\">drc</span>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\distributed-regtech-collaboration-platform.yaml\"}, {\"id\": \"diyou-p2p\", \"info\": {\"name\": \"diyou-p2p\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,diyou-p2p\", \"severity\": \"info\", \"metadata\": {\"product\": \"diyou-p2p\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/js/diyou.js\", \"src=\\\"/dyweb/dythemes\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\diyou-p2p.yaml\"}, {\"id\": \"django-rest-framework\", \"info\": {\"name\": \"django-rest-framework\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,django-rest-framework\", \"severity\": \"info\", \"metadata\": {\"product\": \"django-rest-framework\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"django rest framework\", \"href='https://www.django-rest-framework.org/'>\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\django-rest-framework.yaml\"}, {\"id\": \"django\", \"info\": {\"name\": \"django\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,django\", \"severity\": \"info\", \"metadata\": {\"product\": \"django\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"__admin_media_prefix__\", \"csrfmiddlewaretoken\", \"django settings file.\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\django.yaml\"}, {\"id\": \"dmxready-portfolio-manager\", \"info\": {\"name\": \"dmxready-portfolio-manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dmxready-portfolio-manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"dmxready-portfolio-manager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/css/portfoliomanager/styles_display_page.css\", \"rememberme_portfoliomanager\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dmxready-portfolio-manager.yaml\"}, {\"id\": \"dnatools-dnalims\", \"info\": {\"name\": \"dnatools-dnalims\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dnatools-dnalims\", \"severity\": \"info\", \"metadata\": {\"product\": \"dnatools-dnalims\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/cgi-bin/dna/password.cgi\", \"dnalims\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dnatools-dnalims.yaml\"}, {\"id\": \"dnp-firewall\", \"info\": {\"name\": \"dnp-firewall\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dnp-firewall\", \"severity\": \"info\", \"metadata\": {\"product\": \"dnp-firewall\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<form name=dnp_firewall\", \"dnp_firewall_redirect\", \"name=\\\"dnp_firewall_redirect\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dnp-firewall.yaml\"}, {\"id\": \"doccms\", \"info\": {\"name\": \"doccms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,doccms\", \"severity\": \"info\", \"metadata\": {\"product\": \"doccms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"power by doccms x1.0&grysoft\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\doccms.yaml\"}, {\"id\": \"docebolms\", \"info\": {\"name\": \"docebolms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,docebolms\", \"severity\": \"info\", \"metadata\": {\"product\": \"docebolms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by docebo\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\docebolms.yaml\"}, {\"id\": \"doclever\", \"info\": {\"name\": \"doclever\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,doclever\", \"severity\": \"info\", \"metadata\": {\"product\": \"doclever\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"@click.prevent=\\\"login\\\" :loading=\\\"loginpending\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\doclever.yaml\"}, {\"id\": \"docmail-cwindow\", \"info\": {\"name\": \"docmail-cwindow\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,docmail-cwindow\", \"severity\": \"info\", \"metadata\": {\"product\": \"docmail-cwindow\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://www.docmail.cn\\\" target=\\\"_blank\\\">\", \"content=\\\"北京国信冠群技术有限公司,国信冠群,邮件\", \"href=\\\"http://www.docmail.cn/android/app/docmail.apk\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\docmail-cwindow.yaml\"}, {\"id\": \"document-security-management-system\", \"info\": {\"name\": \"document-security-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,document-security-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"document-security-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"action=\\\"/drm/login.do\\\"\", \"href=\\\"/drm/template/css/login.css\\\"\", \"src=\\\"/drm/encjs/barrett.js\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\document-security-management-system.yaml\"}, {\"id\": \"dokmee-ecm\", \"info\": {\"name\": \"dokmee ecm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"dokmee ecm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>dokmee ecm</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dokmee ecm.yaml\"}, {\"id\": \"dolphinscheduler\", \"info\": {\"name\": \"dolphinscheduler\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dolphinscheduler\", \"severity\": \"info\", \"metadata\": {\"product\": \"dolphinscheduler\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>dolphinscheduler</title>\", \"let node_env = 'true'\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dolphinscheduler.yaml\"}, {\"id\": \"dotproject\", \"info\": {\"name\": \"dotproject\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dotproject\", \"severity\": \"info\", \"metadata\": {\"product\": \"dotproject\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/images/dp_icon.gif\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dotproject.yaml\"}, {\"id\": \"douphp\", \"info\": {\"name\": \"douphp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,douphp\", \"severity\": \"info\", \"metadata\": {\"product\": \"douphp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"douphp \"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\douphp.yaml\"}, {\"id\": \"dpfax\", \"info\": {\"name\": \"dpfax\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dpfax\", \"severity\": \"info\", \"metadata\": {\"product\": \"dpfax\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<img src=\\\"images/dpfax-big.png\\\" border=\\\"0\\\" alt=\\\"dpfax\", \"content=\\\"dpfax - minifaxserver \"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dpfax.yaml\"}, {\"id\": \"dptech-umc\", \"info\": {\"name\": \"dptech-umc\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dptech-umc\", \"severity\": \"info\", \"metadata\": {\"product\": \"dptech-umc\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"onsubmit=\\\"return sys_submit(this)\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dptech-umc.yaml\"}, {\"id\": \"dradis-framework\", \"info\": {\"name\": \"dradis-framework\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dradis-framework\", \"severity\": \"info\", \"metadata\": {\"product\": \"dradis-framework\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<p class=\\\"copyright\\\">dradis\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dradis-framework.yaml\"}, {\"id\": \"drrui-cloud-office-system\", \"info\": {\"name\": \"drrui-cloud-office-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,drrui-cloud-office-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"drrui-cloud-office-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/studentsign/tologin.di\", \"/user/toupdatepasswordpage.di\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\drrui-cloud-office-system.yaml\"}, {\"id\": \"drugpak\", \"info\": {\"name\": \"drugpak\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,drugpak\", \"severity\": \"info\", \"metadata\": {\"product\": \"drugpak\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/dplimg/dpstyle.css\", \"powered by drugpak\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\drugpak.yaml\"}, {\"id\": \"drwebantivirus\", \"info\": {\"name\": \"drwebantivirus\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,drwebantivirus\", \"severity\": \"info\", \"metadata\": {\"product\": \"drwebantivirus\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/avdesk/includes/system/templates/images/logo_en.png\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"server: drwebserver\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\drwebantivirus.yaml\"}, {\"id\": \"dspace\", \"info\": {\"name\": \"dspace\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dspace\", \"severity\": \"info\", \"metadata\": {\"product\": \"dspace\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://www.dspace.org\\\">dspace software\", \"content=\\\"dspace\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dspace.yaml\"}, {\"id\": \"dsview\", \"info\": {\"name\": \"dsview\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dsview\", \"severity\": \"info\", \"metadata\": {\"product\": \"dsview\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/dsview/images/favicon.ico\", \"/dsview/protected/login.do\", \"href=\\\"/dsview/themes/\", \"src=\\\"/dsview/images/avocent-logo.png\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"server: avocent dsview\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dsview.yaml\"}, {\"id\": \"dtcloud\", \"info\": {\"name\": \"dtcloud\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dtcloud\", \"severity\": \"info\", \"metadata\": {\"product\": \"dtcloud\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"49fe0618acdcd7c9dc443faca20d7bd9\"]}, {\"type\": \"word\", \"words\": [\"dtcloud\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dtcloud.yaml\"}, {\"id\": \"dts-operation-platform\", \"info\": {\"name\": \"dts-operation-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dts-operation-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"dts-operation-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"window.appname = 'alidts';\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dts-operation-platform.yaml\"}, {\"id\": \"duomicms\", \"info\": {\"name\": \"duomicms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,duomicms\", \"severity\": \"info\", \"metadata\": {\"product\": \"duomicms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"duomicms_member\", \"多米\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\duomicms.yaml\"}, {\"id\": \"dvwa\", \"info\": {\"name\": \"dvwa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dvwa\", \"severity\": \"info\", \"metadata\": {\"product\": \"dvwa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"dvwa/css/login.css\", \"dvwa/images/login_logo.png\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dvwa.yaml\"}, {\"id\": \"dynaweb-httpd\", \"info\": {\"name\": \"dynaweb-httpd\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dynaweb-httpd\", \"severity\": \"info\", \"metadata\": {\"product\": \"dynaweb-httpd\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: dwhttpd\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dynaweb-httpd.yaml\"}, {\"id\": \"dzzoffice-product\", \"info\": {\"name\": \"dzzoffice-product\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dzzoffice-product\", \"severity\": \"info\", \"metadata\": {\"product\": \"dzzoffice-product\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://www.dzzoffice.com\\\"\", \"dzz/scripts/dzz_min.js\", \"dzz/system/scripts/jquery.jstree.min.js\", \"misc.php?mod=sendmail\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\dzzoffice-product.yaml\"}, {\"id\": \"e-fax\", \"info\": {\"name\": \"e-fax\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,e-fax\", \"severity\": \"info\", \"metadata\": {\"product\": \"e-fax\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"e-fax \"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\e-fax.yaml\"}, {\"id\": \"e-learning\", \"info\": {\"name\": \"e-learning\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,e-learning\", \"severity\": \"info\", \"metadata\": {\"product\": \"e-learning\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"method=\\\"post\\\" action=\\\"/eln3_asp/login.do\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\e-learning.yaml\"}, {\"id\": \"e-link\", \"info\": {\"name\": \"e-link\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,e-link\", \"severity\": \"info\", \"metadata\": {\"product\": \"e-link\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"document.writeln(\\\"（温馨提示：此处为志高美萍分支机构联系方式，志高美萍总部联系方式请点击<a href='javascript:var\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\e-link.yaml\"}, {\"id\": \"e-plugger-srm\", \"info\": {\"name\": \"e-plugger-srm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,e-plugger-srm\", \"severity\": \"info\", \"metadata\": {\"product\": \"e-plugger-srm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"lan12-jingbian-hong\", \"科研管理系统，北京易普拉格科技\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\e-plugger-srm.yaml\"}, {\"id\": \"e-soonlink\", \"info\": {\"name\": \"e-soonlink-\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,e-soonlink-\", \"severity\": \"info\", \"metadata\": {\"product\": \"e-soonlink-\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"document.writeln(companymail)\", \"志高易联\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\e-soonlink-.yaml\"}, {\"id\": \"e-tiller\", \"info\": {\"name\": \"e-tiller\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,e-tiller\", \"severity\": \"info\", \"metadata\": {\"product\": \"e-tiller\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"reader/view_abstract.aspx\", \"北京勤云\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\e-tiller.yaml\"}, {\"id\": \"eagleeye\", \"info\": {\"name\": \"eagleeye\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,eagleeye\", \"severity\": \"info\", \"metadata\": {\"product\": \"eagleeye\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"eagleeye 钉钉答疑群\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\eagleeye.yaml\"}, {\"id\": \"east-simulation-account\", \"info\": {\"name\": \"east-simulation-account\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,east-simulation-account\", \"severity\": \"info\", \"metadata\": {\"product\": \"east-simulation-account\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/scripts/eastsimutility.js\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\east-simulation-account.yaml\"}, {\"id\": \"east-simulation-nettrmp\", \"info\": {\"name\": \"east-simulation-nettrmp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,east-simulation-nettrmp\", \"severity\": \"info\", \"metadata\": {\"product\": \"east-simulation-nettrmp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"document.getelementbyid(\\\"hllogininfo\\\").click()\", \"nettrmp登录界面\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\east-simulation-nettrmp.yaml\"}, {\"id\": \"easted-ecloud\", \"info\": {\"name\": \"easted-ecloud\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,easted-ecloud\", \"severity\": \"info\", \"metadata\": {\"product\": \"easted-ecloud\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<span>easted vserver虚拟数据中心系统</span></a></div>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\easted-ecloud.yaml\"}, {\"id\": \"easy-file-sharing-web-server\", \"info\": {\"name\": \"easy-file-sharing-web-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,easy-file-sharing-web-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"easy-file-sharing-web-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: easy file sharing web server\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\easy-file-sharing-web-server.yaml\"}, {\"id\": \"easycloud\", \"info\": {\"name\": \"easycloud\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,easycloud\", \"severity\": \"info\", \"metadata\": {\"product\": \"easycloud\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h1 class=\\\"white\\\">云资源管控平台</h1>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\easycloud.yaml\"}, {\"id\": \"easypanel\", \"info\": {\"name\": \"easypanel\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,easypanel\", \"severity\": \"info\", \"metadata\": {\"product\": \"easypanel\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/vhost/view/default/style/login.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\easypanel.yaml\"}, {\"id\": \"easyscp\", \"info\": {\"name\": \"easyscp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,easyscp\", \"severity\": \"info\", \"metadata\": {\"product\": \"easyscp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/css/easyscp.login.css\", \"content='easyscp\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\easyscp.yaml\"}, {\"id\": \"easysite\", \"info\": {\"name\": \"easysite\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,easysite\", \"severity\": \"info\", \"metadata\": {\"product\": \"easysite\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"_desktopmodules_picturenews\", \"copyright 2009 by huilan\", \"generator\\\" content=\\\"easysite\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\easysite.yaml\"}, {\"id\": \"ebrigade-erp\", \"info\": {\"name\": \"ebrigade-erp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ebrigade-erp\", \"severity\": \"info\", \"metadata\": {\"product\": \"ebrigade-erp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class='btn btn-ebrigade btn-lg'\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ebrigade-erp.yaml\"}, {\"id\": \"ecash-system\", \"info\": {\"name\": \"ecash-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ecash-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"ecash-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<br>欢迎使用e-cash系统\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ecash-system.yaml\"}, {\"id\": \"ecology-oa\", \"info\": {\"name\": \"ecology-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ecology-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"ecology-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"41eca7a9245394106a09b2534d8030df\"]}, {\"type\": \"word\", \"words\": [\"/theme/ecology8/jquery/js/zdialog_wev8.js\", \"/wui/common/css/w7ovfont.css\", \"client/jquery.client_wev8.js\", \"ecology8/lang/weaver_lang_7_wev8.js\", \"typeof poppedwindow\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"set-cookie: ecology_jsessionid\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ecology-oa.yaml\"}, {\"id\": \"ecology-fan-weie-mobile\", \"info\": {\"name\": \"ecology泛微e-mobile\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ecology泛微e-mobile\", \"severity\": \"info\", \"metadata\": {\"product\": \"ecology泛微e-mobile\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"e-mobile\", \"weaver\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/images/login_logo@2x.png\", \"action=\\\"/verifylogin.do\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"content=\\\"weaver e-mobile\\\"\", \"e-mobile&nbsp;\", \"window.apiprifix = \\\"/emp\\\";\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ecology泛微e-mobile.yaml\"}, {\"id\": \"ecology-fan-weie-office\", \"info\": {\"name\": \"ecology泛微e-office\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ecology泛微e-office\", \"severity\": \"info\", \"metadata\": {\"product\": \"ecology泛微e-office\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"dynamicode\", \"isignatureportal\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/general/login/view//images/updateload.gif\", \"szfeatures\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ecology泛微e-office.yaml\"}, {\"id\": \"ecology-fan-wei-yun-qiaoe-bridge\", \"info\": {\"name\": \"ecology泛微云桥e-bridge\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ecology泛微云桥e-bridge\", \"severity\": \"info\", \"metadata\": {\"product\": \"ecology泛微云桥e-bridge\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<meta name=\\\"searchtitle\\\" content=\\\"泛微云桥e-bridge\\\"> \", \"content=\\\"泛微云桥e-bridge\\\"\", \"e-bridge\", \"wx.weaver\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ecology泛微云桥e-bridge.yaml\"}, {\"id\": \"ecshop\", \"info\": {\"name\": \"ecshop\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ecshop\", \"severity\": \"info\", \"metadata\": {\"product\": \"ecshop\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"ecshop\", \"id=\\\"ecs_cartinfo\\\"\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"set-cookie: ecs_id=\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ecshop.yaml\"}, {\"id\": \"ecwapoa\", \"info\": {\"name\": \"ecwapoa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ecwapoa\", \"severity\": \"info\", \"metadata\": {\"product\": \"ecwapoa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ecwapoa\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ecwapoa.yaml\"}, {\"id\": \"edk\", \"info\": {\"name\": \"edk\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,edk\", \"severity\": \"info\", \"metadata\": {\"product\": \"edk\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!-- /killlistable.tpl -->\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\edk.yaml\"}, {\"id\": \"edoc\", \"info\": {\"name\": \"edoc\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,edoc\", \"severity\": \"info\", \"metadata\": {\"product\": \"edoc\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"b6ff5fb80eb1412c57eb24b6df8148ec\"]}]}], \"_source_file\": \"00_unknown\\\\edoc.yaml\"}, {\"id\": \"edusoho-open-source-web-classroom\", \"info\": {\"name\": \"edusoho-open-source-web-classroom-\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,edusoho-open-source-web-classroom-\", \"severity\": \"info\", \"metadata\": {\"product\": \"edusoho-open-source-web-classroom-\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by edusoho\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\edusoho-open-source-web-classroom-.yaml\"}, {\"id\": \"efront\", \"info\": {\"name\": \"efront\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,efront\", \"severity\": \"info\", \"metadata\": {\"product\": \"efront\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href = \\\"http://www.efrontlearning.net\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\efront.yaml\"}, {\"id\": \"egroupware\", \"info\": {\"name\": \"egroupware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,egroupware\", \"severity\": \"info\", \"metadata\": {\"product\": \"egroupware\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"egroupware\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\egroupware.yaml\"}, {\"id\": \"eisoo-anybackup\", \"info\": {\"name\": \"eisoo-anybackup\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,eisoo-anybackup\", \"severity\": \"info\", \"metadata\": {\"product\": \"eisoo-anybackup\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=\\\"topmask\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\eisoo-anybackup.yaml\"}, {\"id\": \"eisoo-anyshare\", \"info\": {\"name\": \"eisoo-anyshare\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,eisoo-anyshare\", \"severity\": \"info\", \"metadata\": {\"product\": \"eisoo-anyshare\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"res/libs/webuploader/webuploader.css\", \"src=\\\"/res/libs/base64.min.js\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\eisoo-anyshare.yaml\"}, {\"id\": \"ejinshan-zhong-duan\", \"info\": {\"name\": \"ejinshan终端\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ejinshan终端\", \"severity\": \"info\", \"metadata\": {\"product\": \"ejinshan终端\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"net.ejinshan.avclient.apk\", \"金山终端安全系统\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ejinshan终端.yaml\"}, {\"id\": \"ektron-cms\", \"info\": {\"name\": \"ektron-cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ektron-cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"ektron-cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/java/ektron.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ektron-cms.yaml\"}, {\"id\": \"elastichd-dashboard\", \"info\": {\"name\": \"elastichd-dashboard\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,elastichd-dashboard\", \"severity\": \"info\", \"metadata\": {\"product\": \"elastichd-dashboard\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>elastic hd dashboard</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\elastichd-dashboard.yaml\"}, {\"id\": \"elite_cms\", \"info\": {\"name\": \"elite_cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,elite_cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"elite_cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"copyright &copy; 2003 - 2017 <a href=\\\"http://www.elite-is.com/cmhome.asp\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\elite_cms.yaml\"}, {\"id\": \"elitius\", \"info\": {\"name\": \"elitius\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,elitius\", \"severity\": \"info\", \"metadata\": {\"product\": \"elitius\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"elitius\", \"target=\\\"_blank\\\" title=\\\"affiliate\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\elitius.yaml\"}, {\"id\": \"emc-dd-system-manager\", \"info\": {\"name\": \"emc-dd-system-manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,emc-dd-system-manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"emc-dd-system-manager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"dd system manager\", \"emc-favicon.ico\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\emc-dd-system-manager.yaml\"}, {\"id\": \"emc-documentum-webtop\", \"info\": {\"name\": \"emc-documentum-webtop\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,emc-documentum-webtop\", \"severity\": \"info\", \"metadata\": {\"product\": \"emc-documentum-webtop\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/webtop/index.js\", \"/webtop/webtop/theme/documentum/css/webtop.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\emc-documentum-webtop.yaml\"}, {\"id\": \"emc-onefs\", \"info\": {\"name\": \"emc-onefs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,emc-onefs\", \"severity\": \"info\", \"metadata\": {\"product\": \"emc-onefs\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/onefs/styles/onefs.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\emc-onefs.yaml\"}, {\"id\": \"emc-unisphere\", \"info\": {\"name\": \"emc-unisphere\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,emc-unisphere\", \"severity\": \"info\", \"metadata\": {\"product\": \"emc-unisphere\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<script src=\\\"oemmessage.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\emc-unisphere.yaml\"}, {\"id\": \"emeeting-online-dating-software\", \"info\": {\"name\": \"emeeting-online-dating-software\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,emeeting-online-dating-software\", \"severity\": \"info\", \"metadata\": {\"product\": \"emeeting-online-dating-software\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/_emeetingglobals.js\", \"emeeting dating software\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\emeeting-online-dating-software.yaml\"}, {\"id\": \"emerson-environmentalenergymonitoringsystem\", \"info\": {\"name\": \"emerson-environmentalenergymonitoringsystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,emerson-environmentalenergymonitoringsystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"emerson-environmentalenergymonitoringsystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"alert(\\\"网络断连或者idu-s没有启动.\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\emerson-environmentalenergymonitoringsystem.yaml\"}, {\"id\": \"emerson-permasense\", \"info\": {\"name\": \"emerson-permasense\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,emerson-permasense\", \"severity\": \"info\", \"metadata\": {\"product\": \"emerson-permasense\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/permasense/app/webroot/flot/css/layout.print.ie.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\emerson-permasense.yaml\"}, {\"id\": \"emerson-xweb-evo\", \"info\": {\"name\": \"emerson-xweb-evo\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,emerson-xweb-evo\", \"severity\": \"info\", \"metadata\": {\"product\": \"emerson-xweb-evo\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/css/images/logo_xweb_alpha.png\\\"\", \"src=\\\"img/xweb-logo.png\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\emerson-xweb-evo.yaml\"}, {\"id\": \"empirebak\", \"info\": {\"name\": \"empirebak\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,empirebak\", \"severity\": \"info\", \"metadata\": {\"product\": \"empirebak\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div align=\\\"center\\\">(<a href=\\\"doc.html\\\" target=\\\"_blank\\\">查看帝国备份王说明文档</a>)</div>\", \"powered by <a href=\\\"http://www.phome.net\\\" target=\\\"_blank\\\"><strong>empirebak</strong>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\empirebak.yaml\"}, {\"id\": \"enigma2\", \"info\": {\"name\": \"enigma2\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,enigma2\", \"severity\": \"info\", \"metadata\": {\"product\": \"enigma2\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/web/movielist.rss?tag\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\enigma2.yaml\"}, {\"id\": \"enjoyscm-jie-cheng-gong-ying-lian-guan-li-xi-tong\", \"info\": {\"name\": \"enjoyscm 捷诚供应链管理系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"enjoyscm 捷诚供应链管理系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>供应商网上服务厅</title>\", \"content/dist/img/theme.png\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"ddf58a9acbbf8a03b4d8e460f69342ab\"]}]}], \"_source_file\": \"00_unknown\\\\enjoyscm 捷诚供应链管理系统.yaml\"}, {\"id\": \"entercrm\", \"info\": {\"name\": \"entercrm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,entercrm\", \"severity\": \"info\", \"metadata\": {\"product\": \"entercrm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"entercrm\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\entercrm.yaml\"}, {\"id\": \"enterpriseloginmanagementsystem\", \"info\": {\"name\": \"enterpriseloginmanagementsystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,enterpriseloginmanagementsystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"enterpriseloginmanagementsystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"themes/scripts/functionjs.js\", \"txtusername\\\").focus(); //默认焦点\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\enterpriseloginmanagementsystem.yaml\"}, {\"id\": \"entrance-guard-system\", \"info\": {\"name\": \"entrance-guard-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,entrance-guard-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"entrance-guard-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/media/images/zkeco16.ico\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\entrance-guard-system.yaml\"}, {\"id\": \"epiware\", \"info\": {\"name\": \"epiware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,epiware\", \"severity\": \"info\", \"metadata\": {\"product\": \"epiware\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"epiware - project and document management\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\epiware.yaml\"}, {\"id\": \"epoint-devops-monitor\", \"info\": {\"name\": \"epoint-devops-monitor\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,epoint-devops-monitor\", \"severity\": \"info\", \"metadata\": {\"product\": \"epoint-devops-monitor\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>新点运维监控平台单机版</title>\", \"新点运维监控平台单机版,请耐心等待\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\epoint-devops-monitor.yaml\"}, {\"id\": \"epoint-oa\", \"info\": {\"name\": \"epoint-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,epoint-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"epoint-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"type=\\\"text/javascript\\\" sourcecontrol=\\\"epointcommon\\\" ></script>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\epoint-oa.yaml\"}, {\"id\": \"epoint-web-zwdt\", \"info\": {\"name\": \"epoint-web-zwdt\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,epoint-web-zwdt\", \"severity\": \"info\", \"metadata\": {\"product\": \"epoint-web-zwdt\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"epoint-web-zwdt\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\epoint-web-zwdt.yaml\"}, {\"id\": \"eqmail\", \"info\": {\"name\": \"eqmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,eqmail\", \"severity\": \"info\", \"metadata\": {\"product\": \"eqmail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<frame src=\\\"/cgi-bin/eqwebmail?empty=1\", \"href=\\\"eqmail.ico\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\eqmail.yaml\"}, {\"id\": \"esafenet-dlp\", \"info\": {\"name\": \"esafenet-dlp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,esafenet-dlp\", \"severity\": \"info\", \"metadata\": {\"product\": \"esafenet-dlp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"cdgserver3\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\esafenet-dlp.yaml\"}, {\"id\": \"esotalk\", \"info\": {\"name\": \"esotalk\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,esotalk\", \"severity\": \"info\", \"metadata\": {\"product\": \"esotalk\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/js/esotalk.js\", \"generated by esotalk\", \"powered by esotalk\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\esotalk.yaml\"}, {\"id\": \"espcms\", \"info\": {\"name\": \"espcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,espcms\", \"severity\": \"info\", \"metadata\": {\"product\": \"espcms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/templates/default/style/tempates_div.css\", \"infolist_fff\", \"powered by espcms\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\espcms.yaml\"}, {\"id\": \"esri-arcgis\", \"info\": {\"name\": \"esri-arcgis\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,esri-arcgis\", \"severity\": \"info\", \"metadata\": {\"product\": \"esri-arcgis\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"esri/discovery/admin.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\esri-arcgis.yaml\"}, {\"id\": \"esvon-classifieds\", \"info\": {\"name\": \"esvon-classifieds\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,esvon-classifieds\", \"severity\": \"info\", \"metadata\": {\"product\": \"esvon-classifieds\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by esvon\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\esvon-classifieds.yaml\"}, {\"id\": \"esyndicat\", \"info\": {\"name\": \"esyndicat\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,esyndicat\", \"severity\": \"info\", \"metadata\": {\"product\": \"esyndicat\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"esyndicat\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\esyndicat.yaml\"}, {\"id\": \"etcd-io\", \"info\": {\"name\": \"etcd-io\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,etcd-io\", \"severity\": \"info\", \"metadata\": {\"product\": \"etcd-io\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/version\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"etcdcluster\", \"etcdserver\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\etcd-io.yaml\"}, {\"id\": \"etcd-viewer\", \"info\": {\"name\": \"etcd-viewer\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,etcd-viewer\", \"severity\": \"info\", \"metadata\": {\"product\": \"etcd-viewer\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a class=\\\"navbar-brand\\\" href=\\\"./home\\\">etcd viewer</a>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\etcd-viewer.yaml\"}, {\"id\": \"ethproxy\", \"info\": {\"name\": \"ethproxy\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ethproxy\", \"severity\": \"info\", \"metadata\": {\"product\": \"ethproxy\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: ethproxy\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ethproxy.yaml\"}, {\"id\": \"eticket\", \"info\": {\"name\": \"eticket\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,eticket\", \"severity\": \"info\", \"metadata\": {\"product\": \"eticket\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/eticket/eticket.css\", \"<a href=\\\"http://www.eticketsupport.com\\\" target=\\\"_blank\\\">\", \"powered by eticket\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\eticket.yaml\"}, {\"id\": \"etl\", \"info\": {\"name\": \"etl\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,etl\", \"severity\": \"info\", \"metadata\": {\"product\": \"etl\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div class=\\\"header\\\">登录补天etl系统</div>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\etl.yaml\"}, {\"id\": \"euesoft-hr\", \"info\": {\"name\": \"euesoft-hr\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,euesoft-hr\", \"severity\": \"info\", \"metadata\": {\"product\": \"euesoft-hr\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"link.description = \\\"亿华软件\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\euesoft-hr.yaml\"}, {\"id\": \"eureka-server\", \"info\": {\"name\": \"eureka-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,eureka-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"eureka-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"eureka/css/wro.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\eureka-server.yaml\"}, {\"id\": \"eusestudy\", \"info\": {\"name\": \"eusestudy\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,eusestudy\", \"severity\": \"info\", \"metadata\": {\"product\": \"eusestudy\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"userinfo/userfp.aspx\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\eusestudy.yaml\"}, {\"id\": \"evercookie\", \"info\": {\"name\": \"evercookie\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,evercookie\", \"severity\": \"info\", \"metadata\": {\"product\": \"evercookie\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"evercookie.js\", \"var ec = new evercookie();\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\evercookie.yaml\"}, {\"id\": \"eversec-qi-ye-an-quan-wei-xie-gan-zhi-xi-tong\", \"info\": {\"name\": \"eversec-企业安全威胁感知系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,eversec-企业安全威胁感知系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"eversec-企业安全威胁感知系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"action=\\\"/j_spring_security_check\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\eversec-企业安全威胁感知系统.yaml\"}, {\"id\": \"everything\", \"info\": {\"name\": \"everything\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,everything\", \"severity\": \"info\", \"metadata\": {\"product\": \"everything\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"everything.gif\", \"everything.png\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\everything.yaml\"}, {\"id\": \"ewebeditor\", \"info\": {\"name\": \"ewebeditor\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ewebeditor\", \"severity\": \"info\", \"metadata\": {\"product\": \"ewebeditor\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/ewebeditor.htm?\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ewebeditor.yaml\"}, {\"id\": \"ewebs\", \"info\": {\"name\": \"ewebs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ewebs\", \"severity\": \"info\", \"metadata\": {\"product\": \"ewebs\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"clientdownload.xgi\", \"newsoft\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/js/xajax05/xajax_js/xajax_core.js\", \"<a href='../client/ewebsclientsetup.exe'></a> </td>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ewebs.yaml\"}, {\"id\": \"ewei-plagform\", \"info\": {\"name\": \"ewei-plagform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ewei-plagform\", \"severity\": \"info\", \"metadata\": {\"product\": \"ewei-plagform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"易维平台</h1>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ewei-plagform.yaml\"}, {\"id\": \"ewomail\", \"info\": {\"name\": \"ewomail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ewomail\", \"severity\": \"info\", \"metadata\": {\"product\": \"ewomail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ewomail.com\", \"邮箱\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ewomail.yaml\"}, {\"id\": \"examstar\", \"info\": {\"name\": \"examstar\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,examstar\", \"severity\": \"info\", \"metadata\": {\"product\": \"examstar\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/examstar_icon.ico\", \"<div class=\\\"content-bottom-text\\\">考试星为您提供方便、高效的考试服务</div>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\examstar.yaml\"}, {\"id\": \"exponent-cms\", \"info\": {\"name\": \"exponent-cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,exponent-cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"exponent-cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"exponent content management system\", \"powered by exponent cms\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\exponent-cms.yaml\"}, {\"id\": \"expressjs\", \"info\": {\"name\": \"expressjs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,expressjs\", \"severity\": \"info\", \"metadata\": {\"product\": \"expressjs\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<p>welcome to express</p>\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"x-powered-by: express\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\expressjs.yaml\"}, {\"id\": \"extmail\", \"info\": {\"name\": \"extmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,extmail\", \"severity\": \"info\", \"metadata\": {\"product\": \"extmail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"setcookie('extmail_username\", \"欢迎使用extmail\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\extmail.yaml\"}, {\"id\": \"eyou-anti-spam-mailbox-firewall\", \"info\": {\"name\": \"eyou-anti-spam-mailbox-firewall\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,eyou-anti-spam-mailbox-firewall\", \"severity\": \"info\", \"metadata\": {\"product\": \"eyou-anti-spam-mailbox-firewall\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"亿邮大容量电子邮件系统，反垃圾邮件网关\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\eyou-anti-spam-mailbox-firewall.yaml\"}, {\"id\": \"eyou-email-system\", \"info\": {\"name\": \"eyou-email-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,eyou-email-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"eyou-email-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"eyoumail\", \"eyouws\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/tpl/login/user/images/dbg.png\", \"content=\\\"亿邮电子邮件系统\", \"eyou 邮件系统\", \"var loginssl = document.form_login.login_ssl.value;\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\eyou-email-system.yaml\"}, {\"id\": \"ez-publish\", \"info\": {\"name\": \"ez-publish\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ez-publish\", \"severity\": \"info\", \"metadata\": {\"product\": \"ez-publish\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"set-cookie: ezsessioncookie\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ez-publish.yaml\"}, {\"id\": \"ezoffice\", \"info\": {\"name\": \"ezoffice\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ezoffice\", \"severity\": \"info\", \"metadata\": {\"product\": \"ezoffice\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"location: /defaultroot/portal.jsp?access=oa\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ezoffice.yaml\"}, {\"id\": \"facemeeting-meeting\", \"info\": {\"name\": \"facemeeting-meeting\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,facemeeting-meeting\", \"severity\": \"info\", \"metadata\": {\"product\": \"facemeeting-meeting\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"subnav\\\">飞视美</div>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\facemeeting-meeting.yaml\"}, {\"id\": \"falcon\", \"info\": {\"name\": \"falcon\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,falcon\", \"severity\": \"info\", \"metadata\": {\"product\": \"falcon\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h3 class=\\\"font-bold\\\">opsplatform</h3>\", \"textarea class=\\\"form-control endpoints\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\falcon.yaml\"}, {\"id\": \"falipu-iot\", \"info\": {\"name\": \"falipu-iot\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,falipu-iot\", \"severity\": \"info\", \"metadata\": {\"product\": \"falipu-iot\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=\\\"t1\\\">安全、稳定、安全</div>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\falipu-iot.yaml\"}, {\"id\": \"fangmail\", \"info\": {\"name\": \"fangmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fangmail\", \"severity\": \"info\", \"metadata\": {\"product\": \"fangmail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/fangmail/cgi/index.cgi\", \"/fangmail/default/css/em_css.css\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\fangmail.yaml\"}, {\"id\": \"fangpage-exam\", \"info\": {\"name\": \"fangpage-exam\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fangpage-exam\", \"severity\": \"info\", \"metadata\": {\"product\": \"fangpage-exam\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/sites/exam/statics/css/login.css\", \"href=\\\"http://fpexam.fangpage.com\\\" target=\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\fangpage-exam.yaml\"}, {\"id\": \"fanpusoft-construction-work-oa\", \"info\": {\"name\": \"fanpusoft-construction-work-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fanpusoft-construction-work-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"fanpusoft-construction-work-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/dwr/interface/loginservice.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\fanpusoft-construction-work-oa.yaml\"}, {\"id\": \"fanwe\", \"info\": {\"name\": \"fanwe\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fanwe\", \"severity\": \"info\", \"metadata\": {\"product\": \"fanwe\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"app/tpl/fanwe_1/images/lazy_loading.gif\", \"index.php?ctl=article_cate\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\fanwe.yaml\"}, {\"id\": \"faq-manager\", \"info\": {\"name\": \"faq-manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,faq-manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"faq-manager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"admin/\\\">admin area</a></td></tr></table></body></html>\", \"<td><font size=\\\"-1\\\">&nbsp;</font><p><b><font size=\\\"-1\\\">faq admin area</font></b></td>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\faq-manager.yaml\"}, {\"id\": \"faqrobot\", \"info\": {\"name\": \"faqrobot\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,faqrobot\", \"severity\": \"info\", \"metadata\": {\"product\": \"faqrobot\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"faq客服机器人\", \"南京云问网络技术有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\faqrobot.yaml\"}, {\"id\": \"fastadmin-framework\", \"info\": {\"name\": \"fastadmin-framework\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fastadmin-framework\", \"severity\": \"info\", \"metadata\": {\"product\": \"fastadmin-framework\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"fastadmin\", \"fastadmin.net\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"<a href=\\\"/\\\" class=\\\"navbar-brand\\\">fastadmin</a>\", \"copyright © fastadmin.net\", \"fastadmin.net\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\fastadmin-framework.yaml\"}, {\"id\": \"fe-oa\", \"info\": {\"name\": \"fe-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fe-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"fe-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"js39/flyrise.stopbackspace.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\fe-oa.yaml\"}, {\"id\": \"feifeicms\", \"info\": {\"name\": \"feifeicms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,feifeicms\", \"severity\": \"info\", \"metadata\": {\"product\": \"feifeicms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"data-target=\\\"#navbar-feifeicms\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\feifeicms.yaml\"}, {\"id\": \"femr\", \"info\": {\"name\": \"femr\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,femr\", \"severity\": \"info\", \"metadata\": {\"product\": \"femr\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/res/images/login-bg-1.png\", \"/res/vendor/bootstrap-3.3.5/css/bootstrap.min.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\femr.yaml\"}, {\"id\": \"fengyunqifei-firim\", \"info\": {\"name\": \"fengyunqifei-firim\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fengyunqifei-firim\", \"severity\": \"info\", \"metadata\": {\"product\": \"fengyunqifei-firim\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"android/com.apsp.xnmdm-signed.apk\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\fengyunqifei-firim.yaml\"}, {\"id\": \"festos\", \"info\": {\"name\": \"festos\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,festos\", \"severity\": \"info\", \"metadata\": {\"product\": \"festos\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"css/festos.css\", \"title=\\\"festos\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\festos.yaml\"}, {\"id\": \"fex\", \"info\": {\"name\": \"fex\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fex\", \"severity\": \"info\", \"metadata\": {\"product\": \"fex\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"mailto:fexmaster@ostc.de\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"server: fexsrv\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\fex.yaml\"}, {\"id\": \"ffay-lanproxy\", \"info\": {\"name\": \"ffay-lanproxy\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ffay-lanproxy\", \"severity\": \"info\", \"metadata\": {\"product\": \"ffay-lanproxy\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"\\\"/lanproxy-config/\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ffay-lanproxy.yaml\"}, {\"id\": \"fidion-cms\", \"info\": {\"name\": \"fidion-cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fidion-cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"fidion-cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!-- fcms-template head.tpl begins\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\fidion-cms.yaml\"}, {\"id\": \"filemaker\", \"info\": {\"name\": \"filemaker\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,filemaker\", \"severity\": \"info\", \"metadata\": {\"product\": \"filemaker\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/fmi/iwp/cgi?-noscript\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\filemaker.yaml\"}, {\"id\": \"filemakerpro\", \"info\": {\"name\": \"filemakerpro\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,filemakerpro\", \"severity\": \"info\", \"metadata\": {\"product\": \"filemakerpro\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: filemakerpro\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\filemakerpro.yaml\"}, {\"id\": \"filenice\", \"info\": {\"name\": \"filenice\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,filenice\", \"severity\": \"info\", \"metadata\": {\"product\": \"filenice\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"the fantabulous mechanical eviltwin code machine\", \"filenice/filenice.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\filenice.yaml\"}, {\"id\": \"filevista\", \"info\": {\"name\": \"filevista\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,filevista\", \"severity\": \"info\", \"metadata\": {\"product\": \"filevista\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://www.gleamtech.com/products/filevista/web-file-manager\", \"welcome to filevista\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\filevista.yaml\"}, {\"id\": \"findersoft-b9erp\", \"info\": {\"name\": \"findersoft-b9erp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,findersoft-b9erp\", \"severity\": \"info\", \"metadata\": {\"product\": \"findersoft-b9erp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"name=\\\"dbnameddl\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\findersoft-b9erp.yaml\"}, {\"id\": \"finereport\", \"info\": {\"name\": \"finereport\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,finereport\", \"severity\": \"info\", \"metadata\": {\"product\": \"finereport\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"=fs\", \"reportserver\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"finereport/decision\", \"content=\\\"finereport--web reporting tool\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\finereport.yaml\"}, {\"id\": \"firehose_service_monitoring\", \"info\": {\"name\": \"firehose_service_monitoring\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,firehose_service_monitoring\", \"severity\": \"info\", \"metadata\": {\"product\": \"firehose_service_monitoring\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h1>firehose_service_monitoring status</h1>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\firehose_service_monitoring.yaml\"}, {\"id\": \"firerp-soft\", \"info\": {\"name\": \"firerp-soft\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,firerp-soft\", \"severity\": \"info\", \"metadata\": {\"product\": \"firerp-soft\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"mm_preloadimages('images/bt/bt_login_b.gif\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\firerp-soft.yaml\"}, {\"id\": \"fisheye\", \"info\": {\"name\": \"fisheye\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fisheye\", \"severity\": \"info\", \"metadata\": {\"product\": \"fisheye\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"fisheye \", \"fisheye-16.ico\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"set-cookie: fesessionid\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\fisheye.yaml\"}, {\"id\": \"fit2cloud-jumpserver-bao-lei-ji\", \"info\": {\"name\": \"fit2cloud-jumpserver-堡垒机\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fit2cloud-jumpserver-堡垒机\", \"severity\": \"info\", \"metadata\": {\"product\": \"fit2cloud-jumpserver-堡垒机\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"/users/password/forgot/\\\">\", \"csrfmiddlewaretoken\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\fit2cloud-jumpserver-堡垒机.yaml\"}, {\"id\": \"flower-celery-monitoring-tool\", \"info\": {\"name\": \"flower-celery-monitoring-tool\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,flower-celery-monitoring-tool\", \"severity\": \"info\", \"metadata\": {\"product\": \"flower-celery-monitoring-tool\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a class=\\\"brand\\\" href=\\\"/\\\">flower</a>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\flower-celery-monitoring-tool.yaml\"}, {\"id\": \"fluxbb\", \"info\": {\"name\": \"fluxbb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fluxbb\", \"severity\": \"info\", \"metadata\": {\"product\": \"fluxbb\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by <a href=\\\"http://fluxbb.org/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\fluxbb.yaml\"}, {\"id\": \"flyspray\", \"info\": {\"name\": \"flyspray\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,flyspray\", \"severity\": \"info\", \"metadata\": {\"product\": \"flyspray\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by flyspray\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\flyspray.yaml\"}, {\"id\": \"fnord\", \"info\": {\"name\": \"fnord\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fnord\", \"severity\": \"info\", \"metadata\": {\"product\": \"fnord\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: fnord\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\fnord.yaml\"}, {\"id\": \"foosun\", \"info\": {\"name\": \"foosun\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,foosun\", \"severity\": \"info\", \"metadata\": {\"product\": \"foosun\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"created by dotnetcms\", \"for foosun\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"search.html?type\", \"encodeuricomponent(obj\", \"function searchgo\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"powered by www.foosun.net,products:foosun content manage system\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\foosun.yaml\"}, {\"id\": \"forcepoint-websense-email-security-gateway\", \"info\": {\"name\": \"forcepoint-websense-email-security-gateway\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,forcepoint-websense-email-security-gateway\", \"severity\": \"info\", \"metadata\": {\"product\": \"forcepoint-websense-email-security-gateway\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"websense email security gateway\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\forcepoint-websense-email-security-gateway.yaml\"}, {\"id\": \"formmail\", \"info\": {\"name\": \"formmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,formmail\", \"severity\": \"info\", \"metadata\": {\"product\": \"formmail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/formmail.pl\", \"aboutus/magicmail.gif\", \"href=\\\"http://www.worldwidemart.com/scripts/formmail.shtml\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\formmail.yaml\"}, {\"id\": \"forsun-ke-dun-an-quan-wang-guan-kong-zhi-tai\", \"info\": {\"name\": \"forsun-科盾安全网关控制台\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,forsun-科盾安全网关控制台\", \"severity\": \"info\", \"metadata\": {\"product\": \"forsun-科盾安全网关控制台\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"科盾网关控制台\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\forsun-科盾安全网关控制台.yaml\"}, {\"id\": \"fortinet-ensilo\", \"info\": {\"name\": \"fortinet-ensilo\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fortinet-ensilo\", \"severity\": \"info\", \"metadata\": {\"product\": \"fortinet-ensilo\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<img src=\\\"images/ensilo_logo.png\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\fortinet-ensilo.yaml\"}, {\"id\": \"fortinet-firewall\", \"info\": {\"name\": \"fortinet-firewall\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fortinet-firewall\", \"severity\": \"info\", \"metadata\": {\"product\": \"fortinet-firewall\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"fortitoken\", \"str_table.mail_token_msg\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\fortinet-firewall.yaml\"}, {\"id\": \"fortinet-fortigate\", \"info\": {\"name\": \"fortinet-fortigate\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fortinet-fortigate\", \"severity\": \"info\", \"metadata\": {\"product\": \"fortinet-fortigate\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"top.location=window.location;top.location=\\\"/remote/login\\\";\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\fortinet-fortigate.yaml\"}, {\"id\": \"fortinet-fortiguard\", \"info\": {\"name\": \"fortinet-fortiguard\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fortinet-fortiguard\", \"severity\": \"info\", \"metadata\": {\"product\": \"fortinet-fortiguard\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/xx/yy/zz/ci/mgpghgpgpfghcdpfggogfgeh\", \"fortiguard web filtering\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\fortinet-fortiguard.yaml\"}, {\"id\": \"fortinet-sslvpn\", \"info\": {\"name\": \"fortinet-sslvpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fortinet-sslvpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"fortinet-sslvpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/sslvpn/portal.html\", \"fgt_lang\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\fortinet-sslvpn.yaml\"}, {\"id\": \"founder-all-media-editing-system\", \"info\": {\"name\": \"founder-all-media-editing-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,founder-all-media-editing-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"founder-all-media-editing-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/newsedit/newsedit/css/login_1.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\founder-all-media-editing-system.yaml\"}, {\"id\": \"founder-operation-management-and-decision-support-system\", \"info\": {\"name\": \"founder-operation-management-and-decision-support-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,founder-operation-management-and-decision-support-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"founder-operation-management-and-decision-support-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/desktop/ui/custom/getimage?img=iphoneview.png\\\"\", \"src=\\\"/portal/img/logo.png\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\founder-operation-management-and-decision-support-system.yaml\"}, {\"id\": \"fourseasonsvpn\", \"info\": {\"name\": \"fourseasonsvpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fourseasonsvpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"fourseasonsvpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"fs vpn\", \"imgs/fs-black-box.jpg\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\fourseasonsvpn.yaml\"}, {\"id\": \"foxycart\", \"info\": {\"name\": \"foxycart\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,foxycart\", \"severity\": \"info\", \"metadata\": {\"product\": \"foxycart\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<script src=\\\"//cdn.foxycart.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\foxycart.yaml\"}, {\"id\": \"fpoll\", \"info\": {\"name\": \"fpoll\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fpoll\", \"severity\": \"info\", \"metadata\": {\"product\": \"fpoll\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"admincp/css.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\fpoll.yaml\"}, {\"id\": \"freakauth\", \"info\": {\"name\": \"freakauth\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,freakauth\", \"severity\": \"info\", \"metadata\": {\"product\": \"freakauth\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"set-cookie: freakauth\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\freakauth.yaml\"}, {\"id\": \"freejoomlas\", \"info\": {\"name\": \"freejoomlas\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,freejoomlas\", \"severity\": \"info\", \"metadata\": {\"product\": \"freejoomlas\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a title=\\\"free joomla hosting\\\" href=\\\"http://freejoomlas.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\freejoomlas.yaml\"}, {\"id\": \"freenas\", \"info\": {\"name\": \"freenas\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,freenas\", \"severity\": \"info\", \"metadata\": {\"product\": \"freenas\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/images/ui/freenas-logo.png\", \"title=\\\"welcome to freenas\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\freenas.yaml\"}, {\"id\": \"frp\", \"info\": {\"name\": \"frp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,frp\", \"severity\": \"info\", \"metadata\": {\"product\": \"frp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>frps dashboard</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\frp.yaml\"}, {\"id\": \"fujitsu-netshelter-vpn\", \"info\": {\"name\": \"fujitsu-netshelter-vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fujitsu-netshelter-vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"fujitsu-netshelter-vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"welcome to netshelter\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\fujitsu-netshelter-vpn.yaml\"}, {\"id\": \"fujitsu-vpn\", \"info\": {\"name\": \"fujitsu-vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fujitsu-vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"fujitsu-vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"_fj_sslvpn_login\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\fujitsu-vpn.yaml\"}, {\"id\": \"ganttlab\", \"info\": {\"name\": \"ganttlab\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ganttlab\", \"severity\": \"info\", \"metadata\": {\"product\": \"ganttlab\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ganttlab-preview.png\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ganttlab.yaml\"}, {\"id\": \"gate-one\", \"info\": {\"name\": \"gate-one\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gate-one\", \"severity\": \"info\", \"metadata\": {\"product\": \"gate-one\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div id=\\\"gateone\\\"></div>\", \"gateone.css\", \"gateone.js\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"server: gateone\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\gate-one.yaml\"}, {\"id\": \"genieatm\", \"info\": {\"name\": \"genieatm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,genieatm\", \"severity\": \"info\", \"metadata\": {\"product\": \"genieatm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"copyright© genie networks ltd.\", \"defect 3531\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\genieatm.yaml\"}, {\"id\": \"geonode\", \"info\": {\"name\": \"geonode\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,geonode\", \"severity\": \"info\", \"metadata\": {\"product\": \"geonode\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/catalogue/opensearch\\\" title=\\\"geonode search\", \"powered by <a href=\\\"http://geonode.org\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\geonode.yaml\"}, {\"id\": \"geotrust-cert\", \"info\": {\"name\": \"geotrust-cert\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,geotrust-cert\", \"severity\": \"info\", \"metadata\": {\"product\": \"geotrust-cert\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"//smarticon.geotrust.com/si.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\geotrust-cert.yaml\"}, {\"id\": \"geowebcache\", \"info\": {\"name\": \"geowebcache\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,geowebcache\", \"severity\": \"info\", \"metadata\": {\"product\": \"geowebcache\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://geowebcache.org\\\">geowebcache</a>\", \"welcome to geowebcache version\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\geowebcache.yaml\"}, {\"id\": \"gerpgo-erp\", \"info\": {\"name\": \"gerpgo-erp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gerpgo-erp\", \"severity\": \"info\", \"metadata\": {\"product\": \"gerpgo-erp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"static/style/images/tou.png\\\") no-repeat\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\gerpgo-erp.yaml\"}, {\"id\": \"getsimple-cms\", \"info\": {\"name\": \"getsimple-cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,getsimple-cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"getsimple-cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"getsimple\", \"powered by getsimple\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\getsimple-cms.yaml\"}, {\"id\": \"gfsoft-akuntansi-2008\", \"info\": {\"name\": \"gfsoft-akuntansi-2008\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gfsoft-akuntansi-2008\", \"severity\": \"info\", \"metadata\": {\"product\": \"gfsoft-akuntansi-2008\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"images/box%20akuntansi%202008.png\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\gfsoft-akuntansi-2008.yaml\"}, {\"id\": \"ghostcms\", \"info\": {\"name\": \"ghostcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ghostcms\", \"severity\": \"info\", \"metadata\": {\"product\": \"ghostcms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"search this site\\\" data-ghost-search><\", \"noopener\\\">powered by ghost</a></div>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ghostcms.yaml\"}, {\"id\": \"gitbook\", \"info\": {\"name\": \"gitbook\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gitbook\", \"severity\": \"info\", \"metadata\": {\"product\": \"gitbook\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"gitbook\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\gitbook.yaml\"}, {\"id\": \"gitbucket\", \"info\": {\"name\": \"gitbucket\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gitbucket\", \"severity\": \"info\", \"metadata\": {\"product\": \"gitbucket\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/assets/common/images/gitbucket.png\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\gitbucket.yaml\"}, {\"id\": \"gitorious\", \"info\": {\"name\": \"gitorious\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gitorious\", \"severity\": \"info\", \"metadata\": {\"product\": \"gitorious\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by gitorious\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\gitorious.yaml\"}, {\"id\": \"gitstack-code\", \"info\": {\"name\": \"gitstack-code\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gitstack-code\", \"severity\": \"info\", \"metadata\": {\"product\": \"gitstack-code\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"^gitstack/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\gitstack-code.yaml\"}, {\"id\": \"gitweb\", \"info\": {\"name\": \"gitweb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gitweb\", \"severity\": \"info\", \"metadata\": {\"product\": \"gitweb\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/gitweb.css\", \"/gitweb.js\", \"content=\\\"gitweb\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\gitweb.yaml\"}, {\"id\": \"globalsign-cert\", \"info\": {\"name\": \"globalsign-cert\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,globalsign-cert\", \"severity\": \"info\", \"metadata\": {\"product\": \"globalsign-cert\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"//seal.globalsign.com/siteseal\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\globalsign-cert.yaml\"}, {\"id\": \"glodon-console\", \"info\": {\"name\": \"glodon-console\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,glodon-console\", \"severity\": \"info\", \"metadata\": {\"product\": \"glodon-console\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/scripts/dd_belatedpng.js\", \"url: \\\"/console/account/logon\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\glodon-console.yaml\"}, {\"id\": \"glossword\", \"info\": {\"name\": \"glossword\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,glossword\", \"severity\": \"info\", \"metadata\": {\"product\": \"glossword\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"glossword\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\glossword.yaml\"}, {\"id\": \"glpi\", \"info\": {\"name\": \"glpi\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,glpi\", \"severity\": \"info\", \"metadata\": {\"product\": \"glpi\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"c9339a2ecde0980f40ba22c2d237b94b\"]}]}], \"_source_file\": \"00_unknown\\\\glpi.yaml\"}, {\"id\": \"gm-electronic-security-document-management-system\", \"info\": {\"name\": \"gm-electronic-security-document-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gm-electronic-security-document-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"gm-electronic-security-document-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"</span>国迈安全私有云部. <span>all rights reserved\", \"国迈安全私有云部 all rights reserved\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\gm-electronic-security-document-management-system.yaml\"}, {\"id\": \"goaccess-log\", \"info\": {\"name\": \"goaccess-log\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,goaccess-log\", \"severity\": \"info\", \"metadata\": {\"product\": \"goaccess-log\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"by <a href=\\\"https://goaccess.io/\\\">goaccess</a>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\goaccess-log.yaml\"}, {\"id\": \"gocd-params\", \"info\": {\"name\": \"gocd-params\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gocd-params\", \"severity\": \"info\", \"metadata\": {\"product\": \"gocd-params\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"423a583332e4232659690dead75184e6\"]}, {\"type\": \"word\", \"words\": [\"gocd-params\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\gocd-params.yaml\"}, {\"id\": \"golden-dragon-card-ecard-website-query-subsystem\", \"info\": {\"name\": \"golden-dragon-card-ecard-website-query-subsystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,golden-dragon-card-ecard-website-query-subsystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"golden-dragon-card-ecard-website-query-subsystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"location.href=\\\"homelogin.action\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\golden-dragon-card-ecard-website-query-subsystem.yaml\"}, {\"id\": \"goldencis-nacp\", \"info\": {\"name\": \"goldencis-nacp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,goldencis-nacp\", \"severity\": \"info\", \"metadata\": {\"product\": \"goldencis-nacp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div class=\\\"tit_b\\\"> 通过管理员分配的密码使用紧急入口。</div>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\goldencis-nacp.yaml\"}, {\"id\": \"goldlib-library\", \"info\": {\"name\": \"goldlib-library\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,goldlib-library\", \"severity\": \"info\", \"metadata\": {\"product\": \"goldlib-library\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"图书\", \"金盘软件\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/opac/periodicals\", \"class=\\\"jp-searchtabs\", \"onclick=\\\"change('book');\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\goldlib-library.yaml\"}, {\"id\": \"goldlibcms\", \"info\": {\"name\": \"goldlibcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,goldlibcms\", \"severity\": \"info\", \"metadata\": {\"product\": \"goldlibcms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"speakintertscarch.aspx\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\goldlibcms.yaml\"}, {\"id\": \"good10000-tios\", \"info\": {\"name\": \"good10000-tios\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,good10000-tios\", \"severity\": \"info\", \"metadata\": {\"product\": \"good10000-tios\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"value=\\\"https://mail.sinopec.com/owa/\\\"\", \"北京万佳信科技有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\good10000-tios.yaml\"}, {\"id\": \"goodway-integrated-management-information-system\", \"info\": {\"name\": \"goodway-integrated-management-information-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,goodway-integrated-management-information-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"goodway-integrated-management-information-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"option value=\\\"enterprise\\\"\", \"是否域账户登录\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\goodway-integrated-management-information-system.yaml\"}, {\"id\": \"google-talk-chatback\", \"info\": {\"name\": \"google-talk-chatback\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,google-talk-chatback\", \"severity\": \"info\", \"metadata\": {\"product\": \"google-talk-chatback\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"www.google.com/talk/service/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\google-talk-chatback.yaml\"}, {\"id\": \"goonie-internet-public-ppinion-monitoring-system\", \"info\": {\"name\": \"goonie-internet-public-ppinion-monitoring-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,goonie-internet-public-ppinion-monitoring-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"goonie-internet-public-ppinion-monitoring-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"alert(\\\"菜单层数量和内容层数量不一样!\\\")\", \"网络舆情监控系统\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\goonie-internet-public-ppinion-monitoring-system.yaml\"}, {\"id\": \"gordano-messaging-suite\", \"info\": {\"name\": \"gordano-messaging-suite\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gordano-messaging-suite\", \"severity\": \"info\", \"metadata\": {\"product\": \"gordano-messaging-suite\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: gordano\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\gordano-messaging-suite.yaml\"}, {\"id\": \"gossamer-forum\", \"info\": {\"name\": \"gossamer-forum\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gossamer-forum\", \"severity\": \"info\", \"metadata\": {\"product\": \"gossamer-forum\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"gforum.cgi?username=\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\gossamer-forum.yaml\"}, {\"id\": \"government-and-enterprise-order-center\", \"info\": {\"name\": \"government-and-enterprise-order-center\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,government-and-enterprise-order-center\", \"severity\": \"info\", \"metadata\": {\"product\": \"government-and-enterprise-order-center\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"政企订单中心\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\government-and-enterprise-order-center.yaml\"}, {\"id\": \"grasp-erp\", \"info\": {\"name\": \"grasp-erp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,grasp-erp\", \"severity\": \"info\", \"metadata\": {\"product\": \"grasp-erp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\" alert(\\\"欢迎使用 【管家婆分销erp)\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\grasp-erp.yaml\"}, {\"id\": \"gravcms\", \"info\": {\"name\": \"gravcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gravcms\", \"severity\": \"info\", \"metadata\": {\"product\": \"gravcms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"0b11a9699ae33de62a1d05be8f733486\"]}, {\"type\": \"word\", \"words\": [\"<meta name=\\\"generator\\\" content=\\\"gravcms\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\gravcms.yaml\"}, {\"id\": \"gree-logistics\", \"info\": {\"name\": \"gree-logistics\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gree-logistics\", \"severity\": \"info\", \"metadata\": {\"product\": \"gree-logistics\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/images/gree/gree.gif\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\gree-logistics.yaml\"}, {\"id\": \"greencms\", \"info\": {\"name\": \"greencms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,greencms\", \"severity\": \"info\", \"metadata\": {\"product\": \"greencms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"x-powered-by: greencms\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\greencms.yaml\"}, {\"id\": \"gridsite\", \"info\": {\"name\": \"gridsite\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gridsite\", \"severity\": \"info\", \"metadata\": {\"product\": \"gridsite\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://www.gridsite.org/\\\">gridsite\", \"gridsite-admin.cgi?cmd\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\gridsite.yaml\"}, {\"id\": \"group-office\", \"info\": {\"name\": \"group-office\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,group-office\", \"severity\": \"info\", \"metadata\": {\"product\": \"group-office\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"\\\"theme\\\":\\\"group-office\\\",\", \"powered by group-office\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\group-office.yaml\"}, {\"id\": \"growforce-email\", \"info\": {\"name\": \"growforce-email\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,growforce-email\", \"severity\": \"info\", \"metadata\": {\"product\": \"growforce-email\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/page/help/mailconfig/config/index.html\", \"href=\\\"http://webmail.zmail300.cn\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\growforce-email.yaml\"}, {\"id\": \"gsoap\", \"info\": {\"name\": \"gsoap\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gsoap\", \"severity\": \"info\", \"metadata\": {\"product\": \"gsoap\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: gsoap\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\gsoap.yaml\"}, {\"id\": \"guahao-appointmentregistrationsystem\", \"info\": {\"name\": \"guahao-appointmentregistrationsystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,guahao-appointmentregistrationsystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"guahao-appointmentregistrationsystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var title    = \\\"预约挂号系统\\\";\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\guahao-appointmentregistrationsystem.yaml\"}, {\"id\": \"gzcstec-exam\", \"info\": {\"name\": \"gzcstec-exam\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gzcstec-exam\", \"severity\": \"info\", \"metadata\": {\"product\": \"gzcstec-exam\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"placeholder=\\\"请输入凭据\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\gzcstec-exam.yaml\"}, {\"id\": \"gzmwiccard-system\", \"info\": {\"name\": \"gzmwiccard-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gzmwiccard-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"gzmwiccard-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"抄表器驱动tp1100m\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\gzmwiccard-system.yaml\"}, {\"id\": \"gzqxrh-system\", \"info\": {\"name\": \"gzqxrh-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gzqxrh-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"gzqxrh-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/scripts/easyui/jquery.easyui.min.js\\\"\", \"style=\\\"vertical-align: middle; cursor: pointer\", \"响应键盘的回车事件\", \"广州全息若海信息科技有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\gzqxrh-system.yaml\"}, {\"id\": \"gzsa-intranet-security\", \"info\": {\"name\": \"gzsa-intranet-security\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gzsa-intranet-security\", \"severity\": \"info\", \"metadata\": {\"product\": \"gzsa-intranet-security\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"gzsa. all rights reserved</span>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\gzsa-intranet-security.yaml\"}, {\"id\": \"h2-database\", \"info\": {\"name\": \"h2-database\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,h2-database\", \"severity\": \"info\", \"metadata\": {\"product\": \"h2-database\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"login.jsp?jsessionid=\", \"welcome to h2\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\h2-database.yaml\"}, {\"id\": \"h3c-secpath-yun-wei-shen-ji-xi-tong\", \"info\": {\"name\": \"h3c secpath 运维审计系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"h3c secpath 运维审计系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>登录-h3c secpath 运维审计系统</title>\", \"<span>h3c secpath 运维审计系统</span>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\h3c secpath 运维审计系统.yaml\"}, {\"id\": \"h3c-cas\", \"info\": {\"name\": \"h3c-cas\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,h3c-cas\", \"severity\": \"info\", \"metadata\": {\"product\": \"h3c-cas\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"cas.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\h3c-cas.yaml\"}, {\"id\": \"h3c-cloud\", \"info\": {\"name\": \"h3c-cloud\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,h3c-cloud\", \"severity\": \"info\", \"metadata\": {\"product\": \"h3c-cloud\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"vstor\", \"分布式存储管理系统 </p>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\h3c-cloud.yaml\"}, {\"id\": \"h3c-er3100\", \"info\": {\"name\": \"h3c-er3100\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,h3c-er3100\", \"severity\": \"info\", \"metadata\": {\"product\": \"h3c-er3100\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"er3100\", \"h3c.com\", \"login\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\h3c-er3100.yaml\"}, {\"id\": \"h3c-er6300g2\", \"info\": {\"name\": \"h3c-er6300g2\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,h3c-er6300g2\", \"severity\": \"info\", \"metadata\": {\"product\": \"h3c-er6300g2\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"er6300g2\", \"h3c.com\", \"login\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\h3c-er6300g2.yaml\"}, {\"id\": \"h3c-hdm\", \"info\": {\"name\": \"h3c-hdm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,h3c-hdm\", \"severity\": \"info\", \"metadata\": {\"product\": \"h3c-hdm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/video_record.jnlp\", \"<iframe frameborder=\\\"0\\\" class=\\\"framelayout\\\" src=\\\"./page/blank.html\\\" name=\\\"mainframe\\\" id=\\\"mainframe\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\h3c-hdm.yaml\"}, {\"id\": \"h3c-imc\", \"info\": {\"name\": \"h3c-imc\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,h3c-imc\", \"severity\": \"info\", \"metadata\": {\"product\": \"h3c-imc\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"h3c &#26234;&#33021;&#31649;&#29702;&#20013;&#24515;</span>\", \"src=\\\"/imc/faces/extensionresource/com.h3c.imc.component.util.extensionresourceloader/\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/imc/login.jsf\", \"<span class=\\\"cmn_mn_normalfont\\\">h3c 智能管理中心\", \"action=\\\"/imc/login.jsf\", \"com_h3c_imc_usr_usermgr_alluser_overlaydiv\", \"href=\\\"/selfservice/javax.faces.resource/theme.css.xhtml?ln=primefaces-imc-classic-blue\\\"\", \"imc来宾接入自助管理系统\", \"login_logo_h3c.png.jsf\", \"src=\\\"/imc/javax.faces.resource/images/login_logo_h3c.png.jsf?ln=primefaces-imc-new-webui\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\h3c-imc.yaml\"}, {\"id\": \"h3c-router\", \"info\": {\"name\": \"h3c-router\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,h3c-router\", \"severity\": \"info\", \"metadata\": {\"product\": \"h3c-router\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"restore.htm\", \"service@h3c.com\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\h3c-router.yaml\"}, {\"id\": \"h3c-secpath-fang-huo-qiang\", \"info\": {\"name\": \"h3c-secpath防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,h3c-secpath防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"h3c-secpath防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"h3c secpath series\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\h3c-secpath防火墙.yaml\"}, {\"id\": \"h3c-ssl-vpn\", \"info\": {\"name\": \"h3c-ssl-vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,h3c-ssl-vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"h3c-ssl-vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"keep me signed in</span>\", \"welcome to ssl vpn</h1>\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\h3c-ssl-vpn.yaml\"}, {\"id\": \"h3c-web-managerment-home\", \"info\": {\"name\": \"h3c-web-managerment-home\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,h3c-web-managerment-home\", \"severity\": \"info\", \"metadata\": {\"product\": \"h3c-web-managerment-home\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/wnm/ssl/web/frame/login.html\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\h3c-web-managerment-home.yaml\"}, {\"id\": \"h3c-web-ying-yong-fang-huo-qiang\", \"info\": {\"name\": \"h3c-web应用防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,h3c-web应用防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"h3c-web应用防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"h3c web应用防火墙\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\h3c-web应用防火墙.yaml\"}, {\"id\": \"h3c-web-wang-guan\", \"info\": {\"name\": \"h3c-web网管\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,h3c-web网管\", \"severity\": \"info\", \"metadata\": {\"product\": \"h3c-web网管\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"web网管用户登录\", \"china_logo.jpg\", \"webui\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\h3c-web网管.yaml\"}, {\"id\": \"h3c-xia-yi-dai-fang-huo-qiang\", \"info\": {\"name\": \"h3c-下一代防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,h3c-下一代防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"h3c-下一代防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/php/common/checknum_creat.php?module=config_authnum\", \"class=\\\"dl_margin0\\\" align=\\\"left\\\">web网管用户登录</div>\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\h3c-下一代防火墙.yaml\"}, {\"id\": \"h3cer3200\", \"info\": {\"name\": \"h3cer3200\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,h3cer3200\", \"severity\": \"info\", \"metadata\": {\"product\": \"h3cer3200\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"er3200\", \"h3c.com\", \"home.asp\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\h3cer3200.yaml\"}, {\"id\": \"h5s-video-platform\", \"info\": {\"name\": \"h5s-video-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,h5s-video-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"h5s-video-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"71d350f81224c181b2fc5851fc61b0ba\"]}, {\"type\": \"word\", \"words\": [\"h5s视频平台|web\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\h5s-video-platform.yaml\"}, {\"id\": \"hadoop-administration\", \"info\": {\"name\": \"hadoop-administration\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hadoop-administration\", \"severity\": \"info\", \"metadata\": {\"product\": \"hadoop-administration\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/static/hadoop.css\", \"class=\\\"navbar-brand\\\">hadoop</div>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hadoop-administration.yaml\"}, {\"id\": \"hadoop-hue\", \"info\": {\"name\": \"hadoop-hue\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hadoop-hue\", \"severity\": \"info\", \"metadata\": {\"product\": \"hadoop-hue\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"hue and the hue logo are trademarks of cloudera, inc.\", \"id=\\\"jhuenotify\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"jhuehdfstreeglobals\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hadoop-hue.yaml\"}, {\"id\": \"haidaoshop\", \"info\": {\"name\": \"haidaoshop\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,haidaoshop\", \"severity\": \"info\", \"metadata\": {\"product\": \"haidaoshop\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"haidao.web.general.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\haidaoshop.yaml\"}, {\"id\": \"haitian-oa\", \"info\": {\"name\": \"haitian-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,haitian-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"haitian-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"htvos.js\", \"images/myjs.js\", \"mshtml 8.00.6001.19298\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\haitian-oa.yaml\"}, {\"id\": \"hanmasoft\", \"info\": {\"name\": \"hanmasoft\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hanmasoft\", \"severity\": \"info\", \"metadata\": {\"product\": \"hanmasoft\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"alt=\\\"汉码软件logo\", \"content=\\\"汉码软件\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hanmasoft.yaml\"}, {\"id\": \"hanming-video-conferencing\", \"info\": {\"name\": \"hanming-video-conferencing\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hanming-video-conferencing\", \"severity\": \"info\", \"metadata\": {\"product\": \"hanming-video-conferencing\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/resources/fmweb/other/js/login.js\", \"class=\\\"win_introduce\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hanming-video-conferencing.yaml\"}, {\"id\": \"hanna-drawing-service\", \"info\": {\"name\": \"hanna-drawing-service\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hanna-drawing-service\", \"severity\": \"info\", \"metadata\": {\"product\": \"hanna-drawing-service\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"hanna图纸服务\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hanna-drawing-service.yaml\"}, {\"id\": \"hanweb-system\", \"info\": {\"name\": \"hanweb-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hanweb-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"hanweb-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/jcms_files/jcms\", \"<a href='http://www.hanweb.com' style='display:none'>\", \"<meta name='author' content='大汉网络'>\", \"<meta name='generator' content='大汉版通'>\", \"produced by 大汉网络\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hanweb-system.yaml\"}, {\"id\": \"hanwei-cms\", \"info\": {\"name\": \"hanwei-cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hanwei-cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"hanwei-cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"showsubpage.jsp\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hanwei-cms.yaml\"}, {\"id\": \"hanwei-hazardous-chemicals-enterprise-early-warning-and-prevention-system\", \"info\": {\"name\": \"hanwei-hazardous-chemicals-enterprise-early-warning-and-prevention-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hanwei-hazardous-chemicals-enterprise-early-warning-and-prevention-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"hanwei-hazardous-chemicals-enterprise-early-warning-and-prevention-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"default value is bootstrapdialog.type_primary\", \"var objheight = document.documentelement.clientheight\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hanwei-hazardous-chemicals-enterprise-early-warning-and-prevention-system.yaml\"}, {\"id\": \"hanwei-integrated-business-platform\", \"info\": {\"name\": \"hanwei-integrated-business-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hanwei-integrated-business-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"hanwei-integrated-business-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=\\\"loginpwdcontiner\\\"\", \"window.location.href=\\\"/源头数据资源管理/default/default.aspx\\\"\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"content=\\\"microsoft visual studio .net 7.1\\\"\", \"directlink = \\\"programstartup.application\\\"\", \"onclick=\\\"window.navigate(this.fname);enablesetup();\\\"\", \"东营汉威石油技术开发有限公司\", \"系统需要.net框架2.0，请点击安装!\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hanwei-integrated-business-platform.yaml\"}, {\"id\": \"hanwei-mobile-platform\", \"info\": {\"name\": \"hanwei-mobile-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hanwei-mobile-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"hanwei-mobile-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<img src=\\\"images/zshlogo.jpg\\\" />\", \"信任汉威的开发证书\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hanwei-mobile-platform.yaml\"}, {\"id\": \"hanyuan-wanfa-fax-server\", \"info\": {\"name\": \"hanyuan-wanfa-fax-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hanyuan-wanfa-fax-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"hanyuan-wanfa-fax-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"background-image:url(images/bgfax0.jpg);\", \"background=\\\"images/centerfax0.gif\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hanyuan-wanfa-fax-server.yaml\"}, {\"id\": \"haoshitong-cloud-conference\", \"info\": {\"name\": \"haoshitong-cloud-conference\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,haoshitong-cloud-conference\", \"severity\": \"info\", \"metadata\": {\"product\": \"haoshitong-cloud-conference\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"fsmeeting\", \"images/common/logina_1.gif\", \"type=\\\"hidden\\\" id=\\\"app.index.configsuclogin\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\haoshitong-cloud-conference.yaml\"}, {\"id\": \"haproxy-report\", \"info\": {\"name\": \"haproxy-report\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,haproxy-report\", \"severity\": \"info\", \"metadata\": {\"product\": \"haproxy-report\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"statistics report for haproxy\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\haproxy-report.yaml\"}, {\"id\": \"harbor\", \"info\": {\"name\": \"harbor\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,harbor\", \"severity\": \"info\", \"metadata\": {\"product\": \"harbor\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>harbor</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\harbor.yaml\"}, {\"id\": \"hbase\", \"info\": {\"name\": \"hbase\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hbase\", \"severity\": \"info\", \"metadata\": {\"product\": \"hbase\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<meta http-equiv=\\\"refresh\\\" content=\\\"0;url=/master-status\\\"/>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hbase.yaml\"}, {\"id\": \"hbjr-labbuilder\", \"info\": {\"name\": \"hbjr-labbuilder\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hbjr-labbuilder\", \"severity\": \"info\", \"metadata\": {\"product\": \"hbjr-labbuilder\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"labbuilder 实验室信息管理系统\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hbjr-labbuilder.yaml\"}, {\"id\": \"hcl-sametime\", \"info\": {\"name\": \"hcl-sametime\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hcl-sametime\", \"severity\": \"info\", \"metadata\": {\"product\": \"hcl-sametime\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/chat/sametime192x192.png\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hcl-sametime.yaml\"}, {\"id\": \"hdwiki\", \"info\": {\"name\": \"hdwiki\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hdwiki\", \"severity\": \"info\", \"metadata\": {\"product\": \"hdwiki\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"hdwiki\", \"http://kaiyuan.hudong.com?hf=hdwiki_copyright_kaiyuan\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hdwiki.yaml\"}, {\"id\": \"heading-e-commerce-platform\", \"info\": {\"name\": \"heading-e-commerce-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,heading-e-commerce-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"heading-e-commerce-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"window.location.replace('/bin/hdnet.dll/login')\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\heading-e-commerce-platform.yaml\"}, {\"id\": \"heading-web-server\", \"info\": {\"name\": \"heading-web-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,heading-web-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"heading-web-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"location.href='/otter'\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\heading-web-server.yaml\"}, {\"id\": \"hejia-oa\", \"info\": {\"name\": \"hejia-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hejia-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"hejia-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/templates/everythingisok/index.css\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hejia-oa.yaml\"}, {\"id\": \"help-desk-software\", \"info\": {\"name\": \"help-desk-software\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,help-desk-software\", \"severity\": \"info\", \"metadata\": {\"product\": \"help-desk-software\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"target=\\\"_blank\\\">freehelpdesk.org\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\help-desk-software.yaml\"}, {\"id\": \"hercules-logistics\", \"info\": {\"name\": \"hercules-logistics\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hercules-logistics\", \"severity\": \"info\", \"metadata\": {\"product\": \"hercules-logistics\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"document.cookie=\\\"4pl07username=\\\"+arraystr\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hercules-logistics.yaml\"}, {\"id\": \"hesk\", \"info\": {\"name\": \"hesk\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hesk\", \"severity\": \"info\", \"metadata\": {\"product\": \"hesk\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"hesk_javascript.js\", \"hesk_style.css\", \"powered by <a href=\\\"http://www.hesk.com\", \"powered by <a href=\\\"https://www.hesk.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hesk.yaml\"}, {\"id\": \"hetongkj\", \"info\": {\"name\": \"hetongkj\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hetongkj\", \"severity\": \"info\", \"metadata\": {\"product\": \"hetongkj\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/web/mainmenu/images/favicon.ico\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hetongkj.yaml\"}, {\"id\": \"hfish\", \"info\": {\"name\": \"hfish\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hfish\", \"severity\": \"info\", \"metadata\": {\"product\": \"hfish\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>hfish\", \"href=\\\"https://github.com/hacklcx/hfish\\\"\", \"src=\\\"/static/images/hfish.png\\\"\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hfish.yaml\"}, {\"id\": \"hfs\", \"info\": {\"name\": \"hfs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hfs\", \"severity\": \"info\", \"metadata\": {\"product\": \"hfs\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>hfs /</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hfs.yaml\"}, {\"id\": \"hibernating-rhinos-ravendb\", \"info\": {\"name\": \"hibernating-rhinos-ravendb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hibernating-rhinos-ravendb\", \"severity\": \"info\", \"metadata\": {\"product\": \"hibernating-rhinos-ravendb\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"alt=\\\"ravendb\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hibernating-rhinos-ravendb.yaml\"}, {\"id\": \"hiki\", \"info\": {\"name\": \"hiki\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hiki\", \"severity\": \"info\", \"metadata\": {\"product\": \"hiki\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/hiki_base.css\", \"by <a href=\\\"http://hikiwiki.org/\", \"content=\\\"hiki\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hiki.yaml\"}, {\"id\": \"hikvision-bigdatadiagnosis\", \"info\": {\"name\": \"hikvision-bigdatadiagnosis\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hikvision-bigdatadiagnosis\", \"severity\": \"info\", \"metadata\": {\"product\": \"hikvision-bigdatadiagnosis\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"大数据诊断工具</strong>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hikvision-bigdatadiagnosis.yaml\"}, {\"id\": \"hikvision-cloudvideo\", \"info\": {\"name\": \"hikvision-cloudvideo\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hikvision-cloudvideo\", \"severity\": \"info\", \"metadata\": {\"product\": \"hikvision-cloudvideo\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"嗨看云视频</p>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hikvision-cloudvideo.yaml\"}, {\"id\": \"hikvision-intelligentsafeguardsystems\", \"info\": {\"name\": \"hikvision-intelligentsafeguardsystems\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hikvision-intelligentsafeguardsystems\", \"severity\": \"info\", \"metadata\": {\"product\": \"hikvision-intelligentsafeguardsystems\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"window.location.href.indexof(\\\"/index/carfile/\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hikvision-intelligentsafeguardsystems.yaml\"}, {\"id\": \"hikvision-ip-camera\", \"info\": {\"name\": \"hikvision-ip-camera\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hikvision-ip-camera\", \"severity\": \"info\", \"metadata\": {\"product\": \"hikvision-ip-camera\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"89b932fcc47cf4ca3faadb0cfdef89cf\"]}]}], \"_source_file\": \"00_unknown\\\\hikvision-ip-camera.yaml\"}, {\"id\": \"hikvision-ip-wang-luo-dui-jiang-guang-bo-xi-tong\", \"info\": {\"name\": \"hikvision-ip网络对讲广播系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"hikvision-ip网络对讲广播系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/android|webos|iphone|ipod|blackberry/i.test(navigator.useragent)\", \"vendors/toastr-master/build/toastr.min.js\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"e854b2eaa9e4685a95d8052d5e3165bc\"]}]}], \"_source_file\": \"00_unknown\\\\hikvision-ip网络对讲广播系统.yaml\"}, {\"id\": \"hikvision-isecure-center\", \"info\": {\"name\": \"hikvision-isecure-center\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hikvision-isecure-center\", \"severity\": \"info\", \"metadata\": {\"product\": \"hikvision-isecure-center\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"4209fe52e5c15345d0a1250f68a14d1e\"]}]}], \"_source_file\": \"00_unknown\\\\hikvision-isecure-center.yaml\"}, {\"id\": \"hikvision-ivms-8700\", \"info\": {\"name\": \"hikvision-ivms-8700\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hikvision-ivms-8700\", \"severity\": \"info\", \"metadata\": {\"product\": \"hikvision-ivms-8700\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/portal/common/js/commonvar.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hikvision-ivms-8700.yaml\"}, {\"id\": \"hikvision-ivms\", \"info\": {\"name\": \"hikvision-ivms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hikvision-ivms\", \"severity\": \"info\", \"metadata\": {\"product\": \"hikvision-ivms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!--警示提示处-->\", \"<h1 class=\\\"logo\\\">安防综合管理平台</h1>\", \"serviceip\", \"杭州海康威视系统技术有限公司 版权所有\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hikvision-ivms.yaml\"}, {\"id\": \"hikvision-v23-control\", \"info\": {\"name\": \"hikvision-v23-control\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hikvision-v23-control\", \"severity\": \"info\", \"metadata\": {\"product\": \"hikvision-v23-control\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"hikvision v2.3控件网页demo\", \"if(m_bdvrcontrol.stoptalk())\", \"杭州海康威视数字技术股份有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hikvision-v23-control.yaml\"}, {\"id\": \"hikvision-videocload\", \"info\": {\"name\": \"hikvision-videocload\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hikvision-videocload\", \"severity\": \"info\", \"metadata\": {\"product\": \"hikvision-videocload\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: face-webs\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hikvision-videocload.yaml\"}, {\"id\": \"hikvision-an-quan-wang-guan\", \"info\": {\"name\": \"hikvision-安全网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hikvision-安全网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"hikvision-安全网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"./webui/js/jquerylib/jquery-1.7.2.min.js\\\"\", \"安全接入网关\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hikvision-安全网关.yaml\"}, {\"id\": \"hikvision-shi-pin-bian-ma-she-bei-jie-ru-wang-guan\", \"info\": {\"name\": \"hikvision-视频编码设备接入网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hikvision-视频编码设备接入网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"hikvision-视频编码设备接入网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<input id=\\\"p_pass\\\" class=\\\"int\\\" onfocus=\\\"this.value='';\\\" tabindex=\\\"2\\\" name=\\\"p_pass\", \"href=\\\"/bncgi-bin/test.pl\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hikvision-视频编码设备接入网关.yaml\"}, {\"id\": \"hillstone-hsa\", \"info\": {\"name\": \"hillstone-hsa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hillstone-hsa\", \"severity\": \"info\", \"metadata\": {\"product\": \"hillstone-hsa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"resources/login-all.css\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hillstone-hsa.yaml\"}, {\"id\": \"hillstone-stoneos\", \"info\": {\"name\": \"hillstone-stoneos\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hillstone-stoneos\", \"severity\": \"info\", \"metadata\": {\"product\": \"hillstone-stoneos\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"'hillstone stoneos software version \"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hillstone-stoneos.yaml\"}, {\"id\": \"hillstone-zhi-neng-an-quan-yun-ying-xi-tong\", \"info\": {\"name\": \"hillstone-智能安全运营系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hillstone-智能安全运营系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"hillstone-智能安全运营系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/static/css/main.4672616b.chunk.css\", \"智源\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hillstone-智能安全运营系统.yaml\"}, {\"id\": \"hims-hotel-cloud-computing-service\", \"info\": {\"name\": \"hims-hotel-cloud-computing-service\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hims-hotel-cloud-computing-service\", \"severity\": \"info\", \"metadata\": {\"product\": \"hims-hotel-cloud-computing-service\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"gb_root_dir\", \"maincontent.css\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"hims酒店云计算服务\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hims-hotel-cloud-computing-service.yaml\"}, {\"id\": \"hintsoft-pubwin2015\", \"info\": {\"name\": \"hintsoft-pubwin2015\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hintsoft-pubwin2015\", \"severity\": \"info\", \"metadata\": {\"product\": \"hintsoft-pubwin2015\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"images/newlogin_01.jpg\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hintsoft-pubwin2015.yaml\"}, {\"id\": \"hisense-business-management-platform\", \"info\": {\"name\": \"hisense-business-management-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hisense-business-management-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"hisense-business-management-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"left.jpg\\\"\", \"src=\\\"up.jpg\\\"\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hisense-business-management-platform.yaml\"}, {\"id\": \"hisense-webpos\", \"info\": {\"name\": \"hisense-webpos\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hisense-webpos\", \"severity\": \"info\", \"metadata\": {\"product\": \"hisense-webpos\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<legend><img src=\\\"../../content/images/hisense.bmp\\\" style=\\\"height:20px; padding-left:-10px\\\"/>webpos登录</legend>\", \"content/images/hisense.bmp\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hisense-webpos.yaml\"}, {\"id\": \"hispider-router\", \"info\": {\"name\": \"hispider-router\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hispider-router\", \"severity\": \"info\", \"metadata\": {\"product\": \"hispider-router\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"action=\\\"login.pl\\\" method=\\\"post\\\"  onsubmit=\\\"encryptpasswd()\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hispider-router.yaml\"}, {\"id\": \"hitachi-maintenance-utility\", \"info\": {\"name\": \"hitachi-maintenance-utility\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hitachi-maintenance-utility\", \"severity\": \"info\", \"metadata\": {\"product\": \"hitachi-maintenance-utility\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"__gwt_historyframe\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hitachi-maintenance-utility.yaml\"}, {\"id\": \"hitachi-virtual-storage-platform\", \"info\": {\"name\": \"hitachi-virtual-storage-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hitachi-virtual-storage-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"hitachi-virtual-storage-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/cgismryset/smryset.cgi/clk\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hitachi-virtual-storage-platform.yaml\"}, {\"id\": \"hivemail\", \"info\": {\"name\": \"hivemail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hivemail\", \"severity\": \"info\", \"metadata\": {\"product\": \"hivemail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"hivemail\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hivemail.yaml\"}, {\"id\": \"hjsoft-hcm\", \"info\": {\"name\": \"hjsoft-hcm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hjsoft-hcm\", \"severity\": \"info\", \"metadata\": {\"product\": \"hjsoft-hcm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/general/sys/hjaxmanage.js\\\"\", \"src=\\\"/images/hcm/copyright.gif\\\"\", \"src=\\\"/images/hcm/themes/default/login/login_banner2.png?v=12334\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hjsoft-hcm.yaml\"}, {\"id\": \"hjtcloud\", \"info\": {\"name\": \"hjtcloud\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hjtcloud\", \"severity\": \"info\", \"metadata\": {\"product\": \"hjtcloud\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"\\\"/him/api/rest/v1.0/node/role\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hjtcloud.yaml\"}, {\"id\": \"hnjycy\", \"info\": {\"name\": \"hnjycy\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hnjycy\", \"severity\": \"info\", \"metadata\": {\"product\": \"hnjycy\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"http://www.hnjycy.com\\\" target=\\\"_blank\\\">沃科网<\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hnjycy.yaml\"}, {\"id\": \"hollysys-mes\", \"info\": {\"name\": \"hollysys-mes\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hollysys-mes\", \"severity\": \"info\", \"metadata\": {\"product\": \"hollysys-mes\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"resource=\\\"title_sub\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hollysys-mes.yaml\"}, {\"id\": \"honeypot\", \"info\": {\"name\": \"honeypot\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,honeypot\", \"severity\": \"info\", \"metadata\": {\"product\": \"honeypot\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h2>blog comments</h2>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\honeypot.yaml\"}, {\"id\": \"honeywell-intermec-easylan\", \"info\": {\"name\": \"honeywell-intermec-easylan\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,honeywell-intermec-easylan\", \"severity\": \"info\", \"metadata\": {\"product\": \"honeywell-intermec-easylan\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"color=\\\"black\\\" size=\\\"5\\\">intermec easylan\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\honeywell-intermec-easylan.yaml\"}, {\"id\": \"hoperun-hr\", \"info\": {\"name\": \"hoperun-hr\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hoperun-hr\", \"severity\": \"info\", \"metadata\": {\"product\": \"hoperun-hr\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>考核评测系统</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hoperun-hr.yaml\"}, {\"id\": \"hortonworks-smartsense-tool\", \"info\": {\"name\": \"hortonworks-smartsense-tool\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hortonworks-smartsense-tool\", \"severity\": \"info\", \"metadata\": {\"product\": \"hortonworks-smartsense-tool\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"name=\\\"hstapp/config/environment\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hortonworks-smartsense-tool.yaml\"}, {\"id\": \"hospital-material-supplier-b2b-platform\", \"info\": {\"name\": \"hospital-material-supplier-b2b-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hospital-material-supplier-b2b-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"hospital-material-supplier-b2b-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"医院物资供应商b2b平台\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hospital-material-supplier-b2b-platform.yaml\"}, {\"id\": \"host-security-and-management-system\", \"info\": {\"name\": \"host-security-and-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,host-security-and-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"host-security-and-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=./static/css/app.edb681c84a53277f9336fc297ebca96e.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\host-security-and-management-system.yaml\"}, {\"id\": \"hostbill\", \"info\": {\"name\": \"hostbill\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hostbill\", \"severity\": \"info\", \"metadata\": {\"product\": \"hostbill\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<strong>hostbill\", \"powered by <a href=\\\"http://hostbillapp.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hostbill.yaml\"}, {\"id\": \"house5\", \"info\": {\"name\": \"house5\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,house5\", \"severity\": \"info\", \"metadata\": {\"product\": \"house5\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/house5-style1/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\house5.yaml\"}, {\"id\": \"hp-3com-officeconnect-vpn-firewall\", \"info\": {\"name\": \"hp-3com-officeconnect-vpn-firewall\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hp-3com-officeconnect-vpn-firewall\", \"severity\": \"info\", \"metadata\": {\"product\": \"hp-3com-officeconnect-vpn-firewall\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"3com - officeconnect vpn firewall\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hp-3com-officeconnect-vpn-firewall.yaml\"}, {\"id\": \"hp-ilo\", \"info\": {\"name\": \"hp-ilo\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hp-ilo\", \"severity\": \"info\", \"metadata\": {\"product\": \"hp-ilo\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"http://www.hp.com/go/ilo\", \"js/ilo.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hp-ilo.yaml\"}, {\"id\": \"hp-sitescope\", \"info\": {\"name\": \"hp-sitescope\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hp-sitescope\", \"severity\": \"info\", \"metadata\": {\"product\": \"hp-sitescope\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"sitescope login\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hp-sitescope.yaml\"}, {\"id\": \"hp-system-management\", \"info\": {\"name\": \"hp-system-management\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hp-system-management\", \"severity\": \"info\", \"metadata\": {\"product\": \"hp-system-management\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: compaqhttpserver\", \"set-cookie: compaq-hmmd\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hp-system-management.yaml\"}, {\"id\": \"hp-virtual-connect-manager\", \"info\": {\"name\": \"hp-virtual-connect-manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hp-virtual-connect-manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"hp-virtual-connect-manager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"name='mx_hidden' src=\\\"common/hiddenframe.html\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hp-virtual-connect-manager.yaml\"}, {\"id\": \"hphu-system\", \"info\": {\"name\": \"hphu-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hphu-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"hphu-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id='psssdiv'\", \"src='kss_inc/js/jquery.1.3.2.pack.js'\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hphu-system.yaml\"}, {\"id\": \"httpfs\", \"info\": {\"name\": \"httpfs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,httpfs\", \"severity\": \"info\", \"metadata\": {\"product\": \"httpfs\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<b>httpfs service</b\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\httpfs.yaml\"}, {\"id\": \"http-ji-ben-ren-zheng\", \"info\": {\"name\": \"http基本认证\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,http基本认证\", \"severity\": \"info\", \"metadata\": {\"product\": \"http基本认证\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"unauthorized\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"www-authenticate: basic realm=\\\"default\\\"\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\http基本认证.yaml\"}, {\"id\": \"huaease-medication\", \"info\": {\"name\": \"huaease-medication\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,huaease-medication\", \"severity\": \"info\", \"metadata\": {\"product\": \"huaease-medication\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"专业的web医学影像浏览器\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\huaease-medication.yaml\"}, {\"id\": \"huawei-anyoffice\", \"info\": {\"name\": \"huawei-anyoffice\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,huawei-anyoffice\", \"severity\": \"info\", \"metadata\": {\"product\": \"huawei-anyoffice\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<form id=\\\"jvform\\\" action=\\\"admin/business/login\", \"cancelchangepwbtn\", \"mdmserver\", \"src=\\\"assets/conn-service/admin/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\huawei-anyoffice.yaml\"}, {\"id\": \"huawei-ar-min-jie-wang-guan\", \"info\": {\"name\": \"huawei-ar敏捷网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,huawei-ar敏捷网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"huawei-ar敏捷网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/verifycode.cgi?vrfcodeid=\", \"document.title = 'ar web登录\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\huawei-ar敏捷网关.yaml\"}, {\"id\": \"huawei-auth-server\", \"info\": {\"name\": \"huawei-auth-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,huawei-auth-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"huawei-auth-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"75718c9a-f029-11d1-a1ac-00c04fb6c223\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\huawei-auth-server.yaml\"}, {\"id\": \"huawei-esight\", \"info\": {\"name\": \"huawei-esight\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,huawei-esight\", \"severity\": \"info\", \"metadata\": {\"product\": \"huawei-esight\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<body onload=\\\"gotologin()\\\">\", \"esight_login_copy_right_font\", \"location.replace('login.action?_='+ new date().gettime());\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\huawei-esight.yaml\"}, {\"id\": \"huawei-fusioncloud-desktop\", \"info\": {\"name\": \"huawei-fusioncloud-desktop\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,huawei-fusioncloud-desktop\", \"severity\": \"info\", \"metadata\": {\"product\": \"huawei-fusioncloud-desktop\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=/webui/default/img/logo.ico\", \"huawei\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\huawei-fusioncloud-desktop.yaml\"}, {\"id\": \"huawei-fusioncompute\", \"info\": {\"name\": \"huawei-fusioncompute\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,huawei-fusioncompute\", \"severity\": \"info\", \"metadata\": {\"product\": \"huawei-fusioncompute\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/omsportal/\", \"resources/themes/images/logo/favicon.ico\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\huawei-fusioncompute.yaml\"}, {\"id\": \"huawei-inner-web\", \"info\": {\"name\": \"huawei-inner-web\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,huawei-inner-web\", \"severity\": \"info\", \"metadata\": {\"product\": \"huawei-inner-web\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"hidden_frame.html\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\huawei-inner-web.yaml\"}, {\"id\": \"huawei-ivs\", \"info\": {\"name\": \"huawei-ivs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,huawei-ivs\", \"severity\": \"info\", \"metadata\": {\"product\": \"huawei-ivs\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var iever = scriptenginemajorversion()\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\huawei-ivs.yaml\"}, {\"id\": \"huawei-jump-server\", \"info\": {\"name\": \"huawei-jump-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,huawei-jump-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"huawei-jump-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"event_onusbkeychange=onusbkeychange\", \"id=mtokenplugin\", \"value=pluginloaded\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"1f2d27250647de902d396b75d9a2b0cf\"]}]}], \"_source_file\": \"00_unknown\\\\huawei-jump-server.yaml\"}, {\"id\": \"huawei-netopen\", \"info\": {\"name\": \"huawei-netopen\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,huawei-netopen\", \"severity\": \"info\", \"metadata\": {\"product\": \"huawei-netopen\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/netopen/theme/css/inframe.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\huawei-netopen.yaml\"}, {\"id\": \"huawei-rbt-wang-guan-guan-li-xi-tong\", \"info\": {\"name\": \"huawei-rbt网关管理系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,huawei-rbt网关管理系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"huawei-rbt网关管理系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"rbt gateway management system\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\huawei-rbt网关管理系统.yaml\"}, {\"id\": \"huawei-secoway\", \"info\": {\"name\": \"huawei-secoway\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,huawei-secoway\", \"severity\": \"info\", \"metadata\": {\"product\": \"huawei-secoway\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"sweb-lib/plat/login/login_new.js\", \"sweb-lib/resource/\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\huawei-secoway.yaml\"}, {\"id\": \"huawei-ssl-vpn\", \"info\": {\"name\": \"huawei-ssl-vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,huawei-ssl-vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"huawei-ssl-vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"clear ssl cache successfully\", \"svn_getlogincontextvalue(\", \"getcookie(\\\"sgdportal\\\")\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\huawei-ssl-vpn.yaml\"}, {\"id\": \"huawei-usg-firewall\", \"info\": {\"name\": \"huawei-usg-firewall\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,huawei-usg-firewall\", \"severity\": \"info\", \"metadata\": {\"product\": \"huawei-usg-firewall\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ui_component/css/xtheme-black.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\huawei-usg-firewall.yaml\"}, {\"id\": \"huawei-vpn\", \"info\": {\"name\": \"huawei-vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,huawei-vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"huawei-vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"oncompleted(hresult,perrorobject, pasynccontext)\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\huawei-vpn.yaml\"}, {\"id\": \"huaweismc\", \"info\": {\"name\": \"huaweismc\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,huaweismc\", \"severity\": \"info\", \"metadata\": {\"product\": \"huaweismc\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"script/smcscript.js?version=\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\huaweismc.yaml\"}, {\"id\": \"hubspot\", \"info\": {\"name\": \"hubspot\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hubspot\", \"severity\": \"info\", \"metadata\": {\"product\": \"hubspot\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"js.hubspot.com/analytics\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hubspot.yaml\"}, {\"id\": \"hw99-checking\", \"info\": {\"name\": \"hw99-checking\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hw99-checking\", \"severity\": \"info\", \"metadata\": {\"product\": \"hw99-checking\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/hwface/script/logincheck.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hw99-checking.yaml\"}, {\"id\": \"hws-host\", \"info\": {\"name\": \"hws-host\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hws-host\", \"severity\": \"info\", \"metadata\": {\"product\": \"hws-host\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"护卫神·主机大师 前台管理登录\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hws-host.yaml\"}, {\"id\": \"hybrid-cluster\", \"info\": {\"name\": \"hybrid-cluster\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hybrid-cluster\", \"severity\": \"info\", \"metadata\": {\"product\": \"hybrid-cluster\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: hybrid cluster\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hybrid-cluster.yaml\"}, {\"id\": \"hycas-system\", \"info\": {\"name\": \"hycas-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hycas-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"hycas-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/images/hyscm.jpg\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\hycas-system.yaml\"}, {\"id\": \"h_ui\", \"info\": {\"name\": \"h_ui\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,h_ui\", \"severity\": \"info\", \"metadata\": {\"product\": \"h_ui\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"h-ui.js\", \"h-ui.min.js\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/css/h-ui.min.css\", \"html5shi.js\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/css/h-ui.login.css\", \"/h-ui.admin/\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\h_ui.yaml\"}, {\"id\": \"i-doc-view-zai-xian-wen-dang-yu-lan\", \"info\": {\"name\": \"i-doc-view 在线文档预览\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"i-doc-view 在线文档预览\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"www.idocv.com\", \"/static/idocv/js/home.js\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"godwin668@gmail.com\", \"/idocvpreview/static/idocv/js/home.js\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"<title>i doc view</title>\", \"<a href=\\\"http://www.idocv.com\\\">www.idocv.com</a>\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"1fa66ff1d1d1ce0a8ba05838c1b58a15\"]}, {\"type\": \"word\", \"words\": [\"<title>在线文档预览 - i doc view</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\i-doc-view 在线文档预览.yaml\"}, {\"id\": \"ibm-chassis-management\", \"info\": {\"name\": \"ibm-chassis-management\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ibm-chassis-management\", \"severity\": \"info\", \"metadata\": {\"product\": \"ibm-chassis-management\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\",\\\"chassis_name\\\":\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ibm-chassis-management.yaml\"}, {\"id\": \"ibm-cics-transaction-server\", \"info\": {\"name\": \"ibm-cics-transaction-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ibm-cics-transaction-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"ibm-cics-transaction-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: ibm_cics_transaction_server\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ibm-cics-transaction-server.yaml\"}, {\"id\": \"ibm-cognos\", \"info\": {\"name\": \"ibm-cognos\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ibm-cognos\", \"severity\": \"info\", \"metadata\": {\"product\": \"ibm-cognos\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/cgi-bin/cognos.cgi\", \"cognos &#26159; international business machines corp\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ibm-cognos.yaml\"}, {\"id\": \"ibm-goserve\", \"info\": {\"name\": \"ibm-goserve\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ibm-goserve\", \"severity\": \"info\", \"metadata\": {\"product\": \"ibm-goserve\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: goserve\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ibm-goserve.yaml\"}, {\"id\": \"ibm-hmc\", \"info\": {\"name\": \"ibm-hmc\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ibm-hmc\", \"severity\": \"info\", \"metadata\": {\"product\": \"ibm-hmc\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<frame src=\\\"/preloginmonitor/welcome.jsp\\\"/>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ibm-hmc.yaml\"}, {\"id\": \"ibm-http-server\", \"info\": {\"name\": \"ibm-http-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ibm-http-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"ibm-http-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ibm http server\", \"support\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ibm-http-server.yaml\"}, {\"id\": \"ibm-imm\", \"info\": {\"name\": \"ibm-imm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ibm-imm\", \"severity\": \"info\", \"metadata\": {\"product\": \"ibm-imm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/ibmdojo/\", \"<meta http-equiv=\\\"refresh\\\" content=\\\"0;url=/designs/imm/noscript/noscript_en.php\\\" />\", \"ibm.stg.inlinemessage.messagetypes.msg_critical\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ibm-imm.yaml\"}, {\"id\": \"ibm-lotus-domino\", \"info\": {\"name\": \"ibm-lotus-domino\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ibm-lotus-domino\", \"severity\": \"info\", \"metadata\": {\"product\": \"ibm-lotus-domino\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: lotus-domino/\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ibm-lotus-domino.yaml\"}, {\"id\": \"ibm-lotus-inotes\", \"info\": {\"name\": \"ibm-lotus-inotes\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ibm-lotus-inotes\", \"severity\": \"info\", \"metadata\": {\"product\": \"ibm-lotus-inotes\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"alt=\\\"lotus inotes login screen\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ibm-lotus-inotes.yaml\"}, {\"id\": \"ibm-lotus-sametime\", \"info\": {\"name\": \"ibm-lotus-sametime\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ibm-lotus-sametime\", \"severity\": \"info\", \"metadata\": {\"product\": \"ibm-lotus-sametime\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"sametimemeetingsbuttontransparent\\\"\", \"href=\\\"sametime/meetingcenter-moz.css\\\"\", \"sametime/themes/images/blank.gif\", \"src=\\\"sametime/avtest.js\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ibm-lotus-sametime.yaml\"}, {\"id\": \"ibm-lotus\", \"info\": {\"name\": \"ibm-lotus\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ibm-lotus\", \"severity\": \"info\", \"metadata\": {\"product\": \"ibm-lotus\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"domcfg.nsf\", \"login.nsf\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"esoaisapp/login.jsp\", \"main.nsf\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"action=\\\"/names.nsf?login\\\" name=\\\"_dominoform\", \"软标科技\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ibm-lotus.yaml\"}, {\"id\": \"ibm-merge-pacs\", \"info\": {\"name\": \"ibm-merge-pacs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ibm-merge-pacs\", \"severity\": \"info\", \"metadata\": {\"product\": \"ibm-merge-pacs\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<option value=\\\"merge pacs\\\">merge pacs</option>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ibm-merge-pacs.yaml\"}, {\"id\": \"ibm-spectrum-computing\", \"info\": {\"name\": \"ibm-spectrum-computing\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ibm-spectrum-computing\", \"severity\": \"info\", \"metadata\": {\"product\": \"ibm-spectrum-computing\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/platform/framework/logout/logout.action\", \"ssoclient_\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ibm-spectrum-computing.yaml\"}, {\"id\": \"ibm-tivoli-access-manager\", \"info\": {\"name\": \"ibm-tivoli-access-manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ibm-tivoli-access-manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"ibm-tivoli-access-manager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!--- do not translate or modify any part of the hidden parameter(s) --->\", \"var warningstring = \\\"<b>warning:</b> to maintain your login session, make sure that your browser is configured to accept cookies.\\\";\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ibm-tivoli-access-manager.yaml\"}, {\"id\": \"ibm-tivoli\", \"info\": {\"name\": \"ibm-tivoli\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ibm-tivoli\", \"severity\": \"info\", \"metadata\": {\"product\": \"ibm-tivoli\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"banner/tivoli/tv_icbanner.html\", \"tivoli netview uses an open source web server\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ibm-tivoli.yaml\"}, {\"id\": \"ibm-ts3310\", \"info\": {\"name\": \"ibm-ts3310\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ibm-ts3310\", \"severity\": \"info\", \"metadata\": {\"product\": \"ibm-ts3310\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"http-equiv=\\\"refresh\\\" content=\\\"0; url=/main_login.htm\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ibm-ts3310.yaml\"}, {\"id\": \"ibm-watchfire\", \"info\": {\"name\": \"ibm-watchfire\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ibm-watchfire\", \"severity\": \"info\", \"metadata\": {\"product\": \"ibm-watchfire\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"set-cookie: watchfiresessionid\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ibm-watchfire.yaml\"}, {\"id\": \"ibm-web-traffic-express-caching-proxy\", \"info\": {\"name\": \"ibm-web-traffic-express-caching-proxy\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ibm-web-traffic-express-caching-proxy\", \"severity\": \"info\", \"metadata\": {\"product\": \"ibm-web-traffic-express-caching-proxy\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/admin-bin/webexec/wte.html\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ibm-web-traffic-express-caching-proxy.yaml\"}, {\"id\": \"ibm-webseal\", \"info\": {\"name\": \"ibm-webseal\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ibm-webseal\", \"severity\": \"info\", \"metadata\": {\"product\": \"ibm-webseal\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: webseal\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ibm-webseal.yaml\"}, {\"id\": \"ibm_openadmin_tool\", \"info\": {\"name\": \"ibm_openadmin_tool\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ibm_openadmin_tool\", \"severity\": \"info\", \"metadata\": {\"product\": \"ibm_openadmin_tool\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"oat oneui\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ibm_openadmin_tool.yaml\"}, {\"id\": \"ibot-cloud\", \"info\": {\"name\": \"ibot-cloud\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ibot-cloud\", \"severity\": \"info\", \"metadata\": {\"product\": \"ibot-cloud\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"author:lvzhaohua\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ibot-cloud.yaml\"}, {\"id\": \"icall-cms\", \"info\": {\"name\": \"icall-cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,icall-cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"icall-cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var img_obj = document.getelementbyid('showing');\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\icall-cms.yaml\"}, {\"id\": \"icbc-gyj\", \"info\": {\"name\": \"icbc-gyj\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,icbc-gyj\", \"severity\": \"info\", \"metadata\": {\"product\": \"icbc-gyj\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var s3_app_address=\\\"https://gyj.icbc.com.cn\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\icbc-gyj.yaml\"}, {\"id\": \"iceflow-vpn\", \"info\": {\"name\": \"iceflow-vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,iceflow-vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"iceflow-vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"iceflow/tweb\", \"www.icevpn.org\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\iceflow-vpn.yaml\"}, {\"id\": \"iceflow-xia-yi-dai-fang-huo-qiang\", \"info\": {\"name\": \"iceflow-下一代防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,iceflow-下一代防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"iceflow-下一代防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h2 class=\\\"media-heading\\\">fw下一代防火墙</h2>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\iceflow-下一代防火墙.yaml\"}, {\"id\": \"idcos-cloudboot\", \"info\": {\"name\": \"idcos-cloudboot\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,idcos-cloudboot\", \"severity\": \"info\", \"metadata\": {\"product\": \"idcos-cloudboot\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/clipboard/zeroclipboard.min\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\idcos-cloudboot.yaml\"}, {\"id\": \"ideawebserver\", \"info\": {\"name\": \"ideawebserver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ideawebserver\", \"severity\": \"info\", \"metadata\": {\"product\": \"ideawebserver\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: ideawebserver\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ideawebserver.yaml\"}, {\"id\": \"ieslab-scada\", \"info\": {\"name\": \"ieslab-scada\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ieslab-scada\", \"severity\": \"info\", \"metadata\": {\"product\": \"ieslab-scada\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"copyrightpt12\", \"青岛积成电子有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ieslab-scada.yaml\"}, {\"id\": \"igenus-webmail\", \"info\": {\"name\": \"igenus-webmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,igenus-webmail\", \"severity\": \"info\", \"metadata\": {\"product\": \"igenus-webmail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"http://www.igenus.org/\\\" target=\\\"_blank\\\">\", \"igenus webmail system\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\igenus-webmail.yaml\"}, {\"id\": \"igenus-you-jian-xi-tong\", \"info\": {\"name\": \"igenus邮件系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,igenus邮件系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"igenus邮件系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"form.action = \\\"login.php?cmd=login\\\";\", \"igenus\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\igenus邮件系统.yaml\"}, {\"id\": \"iguard-security-system\", \"info\": {\"name\": \"iguard-security-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,iguard-security-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"iguard-security-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"lucky-tech iguard\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\iguard-security-system.yaml\"}, {\"id\": \"ikonboard\", \"info\": {\"name\": \"ikonboard\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ikonboard\", \"severity\": \"info\", \"metadata\": {\"product\": \"ikonboard\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"ikonboard\", \"powered by <a href=\\\"http://www.ikonboard.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ikonboard.yaml\"}, {\"id\": \"ikuai8-cloud\", \"info\": {\"name\": \"ikuai8-cloud\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ikuai8-cloud\", \"severity\": \"info\", \"metadata\": {\"product\": \"ikuai8-cloud\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"c1af9e622eae1dcb95ef44f996bf6228\"]}, {\"type\": \"word\", \"words\": [\"<strong>we're sorry but ikuai cloud platform doesn't \"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ikuai8-cloud.yaml\"}, {\"id\": \"ilas\", \"info\": {\"name\": \"ilas\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ilas\", \"severity\": \"info\", \"metadata\": {\"product\": \"ilas\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<iframe name=\\\"content\\\"  src=\\\"index_middle.html\\\" frameborder=\\\"auto\", \"<select id=\\\"selprovince\\\"   onchange=\\\"getcity(this.options[this.selectedindex].value)\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ilas.yaml\"}, {\"id\": \"iliad-freeboxos\", \"info\": {\"name\": \"iliad-freeboxos\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,iliad-freeboxos\", \"severity\": \"info\", \"metadata\": {\"product\": \"iliad-freeboxos\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"logo_freeboxos\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\iliad-freeboxos.yaml\"}, {\"id\": \"imageview\", \"info\": {\"name\": \"imageview\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,imageview\", \"severity\": \"info\", \"metadata\": {\"product\": \"imageview\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"by jorge schrauwen\", \"content=\\\"imageview\", \"href=\\\"http://www.blackdot.be\\\" title=\\\"blackdot.be\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\imageview.yaml\"}, {\"id\": \"imgallery\", \"info\": {\"name\": \"imgallery\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,imgallery\", \"severity\": \"info\", \"metadata\": {\"product\": \"imgallery\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"http://www.imgallery.zor.pl\\\"><b>imgallery\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\imgallery.yaml\"}, {\"id\": \"imo-yun-ban-gong-shi\", \"info\": {\"name\": \"imo-云办公室\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,imo-云办公室\", \"severity\": \"info\", \"metadata\": {\"product\": \"imo-云办公室\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"download/imo_setup.exe\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\imo-云办公室.yaml\"}, {\"id\": \"impresspages-cms\", \"info\": {\"name\": \"impresspages-cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,impresspages-cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"impresspages-cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"impresspages cms\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\impresspages-cms.yaml\"}, {\"id\": \"indexer-coordinator\", \"info\": {\"name\": \"indexer-coordinator\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,indexer-coordinator\", \"severity\": \"info\", \"metadata\": {\"product\": \"indexer-coordinator\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"druid indexer coordinator console\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\indexer-coordinator.yaml\"}, {\"id\": \"indusguard-waf\", \"info\": {\"name\": \"indusguard-waf\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,indusguard-waf\", \"severity\": \"info\", \"metadata\": {\"product\": \"indusguard-waf\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"wafportal/wafportal.nocache.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\indusguard-waf.yaml\"}, {\"id\": \"infogo-imc\", \"info\": {\"name\": \"infogo-imc\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,infogo-imc\", \"severity\": \"info\", \"metadata\": {\"product\": \"infogo-imc\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"client_check/js/global.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\infogo-imc.yaml\"}, {\"id\": \"infomaster\", \"info\": {\"name\": \"infomaster\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,infomaster\", \"severity\": \"info\", \"metadata\": {\"product\": \"infomaster\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/masterview.css\", \"/masterview.js\", \"/masterview/mpleftnavstyle/panelbar.mpifma.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\infomaster.yaml\"}, {\"id\": \"infopro-system\", \"info\": {\"name\": \"infopro-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,infopro-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"infopro-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<input type=\\\"submit\\\" name=\\\"cmdsubmit\\\" value=\\\" 登 录 \\\" onclick=\\\"javascript:webform_dopostbackwithoptions(new webform_postbackoptions(&quot;cmdsubmit&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))\\\" id=\\\"cmdsubmit\\\" class=\\\"colorbutton\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\infopro-system.yaml\"}, {\"id\": \"informatica-powercenter\", \"info\": {\"name\": \"informatica-powercenter\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,informatica-powercenter\", \"severity\": \"info\", \"metadata\": {\"product\": \"informatica-powercenter\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"action=\\\"/adminconsole/loginsubmit.do\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"server: informatica\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\informatica-powercenter.yaml\"}, {\"id\": \"informatics-cms\", \"info\": {\"name\": \"informatics-cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,informatics-cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"informatics-cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"informatics\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\informatics-cms.yaml\"}, {\"id\": \"information-operation-and-maintenance-support-system\", \"info\": {\"name\": \"information-operation-and-maintenance-support-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,information-operation-and-maintenance-support-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"information-operation-and-maintenance-support-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"placeholder=\\\"ad域账号 / 系统账号\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\information-operation-and-maintenance-support-system.yaml\"}, {\"id\": \"information-security-integrated-management-platform\", \"info\": {\"name\": \"information-security-integrated-management-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,information-security-integrated-management-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"information-security-integrated-management-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ccaq_kf@unisk.cn\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\information-security-integrated-management-platform.yaml\"}, {\"id\": \"infosec-utrust\", \"info\": {\"name\": \"infosec-utrust\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,infosec-utrust\", \"severity\": \"info\", \"metadata\": {\"product\": \"infosec-utrust\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"china utrust infortech co,.ltd\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\infosec-utrust.yaml\"}, {\"id\": \"infowarelab-system-management-center\", \"info\": {\"name\": \"infowarelab-system-management-center\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,infowarelab-system-management-center\", \"severity\": \"info\", \"metadata\": {\"product\": \"infowarelab-system-management-center\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div class=\\\"main_supporterbar\\\">\", \"class=\\\"main_loginbar\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\infowarelab-system-management-center.yaml\"}, {\"id\": \"innotube-manager\", \"info\": {\"name\": \"innotube-manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,innotube-manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"innotube-manager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"images/intro/lin_bottom_nocr.gif\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\innotube-manager.yaml\"}, {\"id\": \"inoerp\", \"info\": {\"name\": \"inoerp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,inoerp\", \"severity\": \"info\", \"metadata\": {\"product\": \"inoerp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=\\\"ino-body\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\inoerp.yaml\"}, {\"id\": \"inspinia\", \"info\": {\"name\": \"inspinia\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,inspinia\", \"severity\": \"info\", \"metadata\": {\"product\": \"inspinia\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"inspinia\", \"name=\\\"password\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\inspinia.yaml\"}, {\"id\": \"inspur-ec-government-approval-platform\", \"info\": {\"name\": \"inspur-ec-government-approval-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,inspur-ec-government-approval-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"inspur-ec-government-approval-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"langchao.ecgap.outportal\", \"onlinequery/querylist.aspx\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\inspur-ec-government-approval-platform.yaml\"}, {\"id\": \"inspur-incloud-sphere\", \"info\": {\"name\": \"inspur-incloud-sphere\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,inspur-incloud-sphere\", \"severity\": \"info\", \"metadata\": {\"product\": \"inspur-incloud-sphere\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"easyui-layout\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\inspur-incloud-sphere.yaml\"}, {\"id\": \"inspur-zheng-wu-xi-tong\", \"info\": {\"name\": \"inspur-政务系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"inspur-政务系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"langchao.ecgap.outportal\", \"onlinequery/querylist.aspx\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\inspur-政务系统.yaml\"}, {\"id\": \"installationqualitymanagementsystem\", \"info\": {\"name\": \"installationqualitymanagementsystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,installationqualitymanagementsystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"installationqualitymanagementsystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"images/ewuser_title.jpg\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\installationqualitymanagementsystem.yaml\"}, {\"id\": \"integrating-century-epbp-management-platform\", \"info\": {\"name\": \"integrating-century-epbp-management-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,integrating-century-epbp-management-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"integrating-century-epbp-management-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"match = rmsie.exec(window.navigator.useragent\", \"rmsie = /(msie\\\\s|trident.*rv:)([\\\\w.]+)/i\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\integrating-century-epbp-management-platform.yaml\"}, {\"id\": \"intelligence-parking-integrated-management-platform\", \"info\": {\"name\": \"intelligence-parking-integrated-management-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,intelligence-parking-integrated-management-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"intelligence-parking-integrated-management-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"厦门立智通讯科技有限公司 版权所有\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\intelligence-parking-integrated-management-platform.yaml\"}, {\"id\": \"intelligent-cloud\", \"info\": {\"name\": \"intelligent-cloud\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,intelligent-cloud\", \"severity\": \"info\", \"metadata\": {\"product\": \"intelligent-cloud\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"handlexpapplycontact\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\intelligent-cloud.yaml\"}, {\"id\": \"interactivevirtualshipdisplaysystem\", \"info\": {\"name\": \"interactivevirtualshipdisplaysystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,interactivevirtualshipdisplaysystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"interactivevirtualshipdisplaysystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"交互式虚拟船舶展示系统</a>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\interactivevirtualshipdisplaysystem.yaml\"}, {\"id\": \"internet-cluster-manager\", \"info\": {\"name\": \"internet-cluster-manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,internet-cluster-manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"internet-cluster-manager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: internet cluster manager\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\internet-cluster-manager.yaml\"}, {\"id\": \"interred\", \"info\": {\"name\": \"interred\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,interred\", \"severity\": \"info\", \"metadata\": {\"product\": \"interred\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"interred\", \"created with interred\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\interred.yaml\"}, {\"id\": \"invision-ipboard\", \"info\": {\"name\": \"invision-ipboard\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,invision-ipboard\", \"severity\": \"info\", \"metadata\": {\"product\": \"invision-ipboard\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ipb.vars\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\invision-ipboard.yaml\"}, {\"id\": \"invision-powerboard\", \"info\": {\"name\": \"invision-powerboard\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,invision-powerboard\", \"severity\": \"info\", \"metadata\": {\"product\": \"invision-powerboard\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by <a href=\\\"http://www.invisionboard.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\invision-powerboard.yaml\"}, {\"id\": \"ioa\", \"info\": {\"name\": \"ioa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ioa\", \"severity\": \"info\", \"metadata\": {\"product\": \"ioa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"https://www.ioa.cn/official/download.html\\\" target=\\\"_blank\\\">爱办公app</a>\", \"id=\\\"foot_version\\\">厦门容能科技有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ioa.yaml\"}, {\"id\": \"ip-guard\", \"info\": {\"name\": \"ip-guard\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"ip-guard\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"eca5de8afe00f5b9990cfdf11f4d1de4\", \"210a3c89d4ab5effa18d6dd7a9627376\"]}, {\"type\": \"word\", \"words\": [\"<title>ip-guard</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ip-guard.yaml\"}, {\"id\": \"ipcop-firewall\", \"info\": {\"name\": \"ipcop-firewall\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ipcop-firewall\", \"severity\": \"info\", \"metadata\": {\"product\": \"ipcop-firewall\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!-- ipcop logo row -->\", \"href='http://sf.net/projects/ipcop/\", \"href='https://sourceforge.net/projects/ipcop/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ipcop-firewall.yaml\"}, {\"id\": \"ipec-ipms\", \"info\": {\"name\": \"ipec-ipms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ipec-ipms\", \"severity\": \"info\", \"metadata\": {\"product\": \"ipec-ipms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/login/lpec/qrcode.html\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ipec-ipms.yaml\"}, {\"id\": \"ipeer\", \"info\": {\"name\": \"ipeer\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ipeer\", \"severity\": \"info\", \"metadata\": {\"product\": \"ipeer\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/css/ipeer.css\", \"powered by ipeer\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ipeer.yaml\"}, {\"id\": \"ipguard-system\", \"info\": {\"name\": \"ipguard-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ipguard-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"ipguard-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"onchange=\\\"is_empty('#txtusername','#lblemptyname')\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ipguard-system.yaml\"}, {\"id\": \"ipswitch-imailserver\", \"info\": {\"name\": \"ipswitch-imailserver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ipswitch-imailserver\", \"severity\": \"info\", \"metadata\": {\"product\": \"ipswitch-imailserver\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"myicalusername\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"server: ipswitch-imail\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ipswitch-imailserver.yaml\"}, {\"id\": \"ip_com-di-er-dai-fang-huo-qiang\", \"info\": {\"name\": \"ip_com-第二代防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ip_com-第二代防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"ip_com-第二代防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"technology, inc.\", \"深圳市和为顺网络技术有限公司\\\"z?pkq\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ip_com-第二代防火墙.yaml\"}, {\"id\": \"irainone-parkingsystem\", \"info\": {\"name\": \"irainone-parkingsystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,irainone-parkingsystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"irainone-parkingsystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/static/img/allstar.png\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\irainone-parkingsystem.yaml\"}, {\"id\": \"iredmail\", \"info\": {\"name\": \"iredmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,iredmail\", \"severity\": \"info\", \"metadata\": {\"product\": \"iredmail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"iredadmin\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\iredmail.yaml\"}, {\"id\": \"iscripts-reservelogic\", \"info\": {\"name\": \"iscripts-reservelogic\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,iscripts-reservelogic\", \"severity\": \"info\", \"metadata\": {\"product\": \"iscripts-reservelogic\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by <a href=\\\"http://www.iscripts.com/reservelogic/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\iscripts-reservelogic.yaml\"}, {\"id\": \"isolsoft-support-center\", \"info\": {\"name\": \"isolsoft-support-center\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,isolsoft-support-center\", \"severity\": \"info\", \"metadata\": {\"product\": \"isolsoft-support-center\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by: support center\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\isolsoft-support-center.yaml\"}, {\"id\": \"ispcp-omega\", \"info\": {\"name\": \"ispcp-omega\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ispcp-omega\", \"severity\": \"info\", \"metadata\": {\"product\": \"ispcp-omega\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"set-cookie: ispcp\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ispcp-omega.yaml\"}, {\"id\": \"isunor-order-management-system\", \"info\": {\"name\": \"isunor-order-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,isunor-order-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"isunor-order-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var c_name = 'jsessionid';\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\isunor-order-management-system.yaml\"}, {\"id\": \"itenable\", \"info\": {\"name\": \"itenable\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,itenable\", \"severity\": \"info\", \"metadata\": {\"product\": \"itenable\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/enableq.css\", \"/images/enableq.ico\", \"js/checkquestion.js.php\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\itenable.yaml\"}, {\"id\": \"iwebshop\", \"info\": {\"name\": \"iwebshop\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,iwebshop\", \"severity\": \"info\", \"metadata\": {\"product\": \"iwebshop\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"_weburl\", \"class=\\\"pro_title\\\">iwebshop支付测试\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"_skinpath\", \"_themepath\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\iwebshop.yaml\"}, {\"id\": \"iwebsns\", \"info\": {\"name\": \"iwebsns\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,iwebsns\", \"severity\": \"info\", \"metadata\": {\"product\": \"iwebsns\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/jooyea/images/sns_idea1.jpg\", \"/jooyea/images/snslogo.gif\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\iwebsns.yaml\"}, {\"id\": \"jabberd\", \"info\": {\"name\": \"jabberd\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jabberd\", \"severity\": \"info\", \"metadata\": {\"product\": \"jabberd\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: jabberd\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jabberd.yaml\"}, {\"id\": \"jakarta-project\", \"info\": {\"name\": \"jakarta-project\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jakarta-project\", \"severity\": \"info\", \"metadata\": {\"product\": \"jakarta-project\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://jakarta.apache.org/\\\">\", \"alt=\\\"the jakarta project\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jakarta-project.yaml\"}, {\"id\": \"jamf-panel\", \"info\": {\"name\": \"jamf-panel\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jamf-panel\", \"severity\": \"info\", \"metadata\": {\"product\": \"jamf-panel\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"jamf cloud node\", \"jamf pro login\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jamf-panel.yaml\"}, {\"id\": \"jasig-cas\", \"info\": {\"name\": \"jasig-cas\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jasig-cas\", \"severity\": \"info\", \"metadata\": {\"product\": \"jasig-cas\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by <a href=\\\"http://www.jasig.org/cas\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jasig-cas.yaml\"}, {\"id\": \"javashop\", \"info\": {\"name\": \"javashop\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,javashop\", \"severity\": \"info\", \"metadata\": {\"product\": \"javashop\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"易族智汇javashop\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\javashop.yaml\"}, {\"id\": \"jboss-as\", \"info\": {\"name\": \"jboss-as\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jboss-as\", \"severity\": \"info\", \"metadata\": {\"product\": \"jboss-as\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"manage this jboss as instance\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jboss-as.yaml\"}, {\"id\": \"jboss-eap\", \"info\": {\"name\": \"jboss-eap\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jboss-eap\", \"severity\": \"info\", \"metadata\": {\"product\": \"jboss-eap\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h3>your jboss enterprise application platform is running.</h3>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jboss-eap.yaml\"}, {\"id\": \"jboss\", \"info\": {\"name\": \"jboss\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jboss\", \"severity\": \"info\", \"metadata\": {\"product\": \"jboss\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"799f70b71314a7508326d1d2f68f7519\"]}, {\"type\": \"word\", \"words\": [\"<a href=\\\"http://jboss.org\\\">\", \"jboss.css\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"x-powered-by: jboss\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jboss.yaml\"}, {\"id\": \"jeecgboot\", \"info\": {\"name\": \"jeecgboot\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jeecgboot\", \"severity\": \"info\", \"metadata\": {\"product\": \"jeecgboot\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"color: #222222;\", \"lang=zh-cmn-hans\", \"loader-\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"jeecgboot\", \"polyfill_\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"dc7a0b69060a0262530b47b46ba7f9b6\"]}, {\"type\": \"word\", \"words\": [\"onlinepreviewdomainurl'] = 'http://fileview.jeecg.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jeecgboot.yaml\"}, {\"id\": \"jeecms\", \"info\": {\"name\": \"jeecms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jeecms\", \"severity\": \"info\", \"metadata\": {\"product\": \"jeecms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<script src=\\\"/r/cms/www/\", \"<script src=\\\"/u/cms/www/\", \"www.jeecms.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jeecms.yaml\"}, {\"id\": \"jeesite\", \"info\": {\"name\": \"jeesite\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jeesite\", \"severity\": \"info\", \"metadata\": {\"product\": \"jeesite\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"jeesite.com\", \"jeesite.css\", \"jeesite.js\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"set-cookie: jeesite.session.id=\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jeesite.yaml\"}, {\"id\": \"jeewms\", \"info\": {\"name\": \"jeewms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jeewms\", \"severity\": \"info\", \"metadata\": {\"product\": \"jeewms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"jeewms\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jeewms.yaml\"}, {\"id\": \"jetty\", \"info\": {\"name\": \"jetty\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jetty\", \"severity\": \"info\", \"metadata\": {\"product\": \"jetty\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"ed7d5c39c69262f4ba95418d4f909b10\"]}, {\"type\": \"word\", \"words\": [\"powered by jetty://\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"server: jetty\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jetty.yaml\"}, {\"id\": \"jianhengxinan-jh-las\", \"info\": {\"name\": \"jianhengxinan-jh-las\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jianhengxinan-jh-las\", \"severity\": \"info\", \"metadata\": {\"product\": \"jianhengxinan-jh-las\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"jh-la3600\", \"建恒信安日志审计系统\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jianhengxinan-jh-las.yaml\"}, {\"id\": \"jianmu\", \"info\": {\"name\": \"jianmu\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jianmu\", \"severity\": \"info\", \"metadata\": {\"product\": \"jianmu\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"a60399bff2cbc1462547d9a38284264d\"]}]}], \"_source_file\": \"00_unknown\\\\jianmu.yaml\"}, {\"id\": \"jiaozhichu-online-test-system\", \"info\": {\"name\": \"jiaozhichu-online-test-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jiaozhichu-online-test-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"jiaozhichu-online-test-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"jiaozhichu\", \"href=\\\"/ksxt/h5/images/jiaozhichu.ico\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jiaozhichu-online-test-system.yaml\"}, {\"id\": \"jienohan-journal\", \"info\": {\"name\": \"jienohan-journal\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jienohan-journal\", \"severity\": \"info\", \"metadata\": {\"product\": \"jienohan-journal\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"tougao/misc.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jienohan-journal.yaml\"}, {\"id\": \"jigsaw\", \"info\": {\"name\": \"jigsaw\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jigsaw\", \"severity\": \"info\", \"metadata\": {\"product\": \"jigsaw\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: jigsaw\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jigsaw.yaml\"}, {\"id\": \"jit-web-connector\", \"info\": {\"name\": \"jit-web-connector\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jit-web-connector\", \"severity\": \"info\", \"metadata\": {\"product\": \"jit-web-connector\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"location.href='/cgi-bin/cgiproxy.exe?action=start';\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jit-web-connector.yaml\"}, {\"id\": \"jiusi-oa\", \"info\": {\"name\": \"jiusi-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jiusi-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"jiusi-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"九思软件\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jiusi-oa.yaml\"}, {\"id\": \"jive-sbs\", \"info\": {\"name\": \"jive-sbs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jive-sbs\", \"severity\": \"info\", \"metadata\": {\"product\": \"jive-sbs\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/jive-icons.css\", \"class=\\\"jive-body-formpage\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jive-sbs.yaml\"}, {\"id\": \"jizhicms\", \"info\": {\"name\": \"极致CMS\", \"author\": \"jlkl\", \"tags\": \"detect,tech,jizhicms\", \"severity\": \"info\", \"metadata\": {\"product\": \"jizhicms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"极致cms建站系统\"], \"part\": \"header\", \"case-insensitive\": true}]}, {\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"c7bfdd8a6b762a5220f7217552592115\"]}]}], \"_source_file\": \"00_unknown\\\\jizhicms.yaml\"}, {\"id\": \"jloa\", \"info\": {\"name\": \"jloa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jloa\", \"severity\": \"info\", \"metadata\": {\"product\": \"jloa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"logintable\", \"selectcss\", \"toptitleimg\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jloa.yaml\"}, {\"id\": \"jltech\", \"info\": {\"name\": \"jltech\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jltech\", \"severity\": \"info\", \"metadata\": {\"product\": \"jltech\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"jlwcs\", \"京伦建站系统 \"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jltech.yaml\"}, {\"id\": \"jnsh-system\", \"info\": {\"name\": \"jnsh-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jnsh-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"jnsh-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"../../doc/config/shxmjgptapp.png\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jnsh-system.yaml\"}, {\"id\": \"join-cheer-general-financial-system\", \"info\": {\"name\": \"join-cheer-general-financial-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,join-cheer-general-financial-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"join-cheer-general-financial-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/netrep/intf\", \"/netrep/message2/\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"<meta http-equiv=\\\"refresh\\\" content=\\\"0\\\";url=\\\"../netrep\\\">\", \"北京久其软件股份有限公司 版权所有\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\join-cheer-general-financial-system.yaml\"}, {\"id\": \"joinf-erp\", \"info\": {\"name\": \"joinf-erp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,joinf-erp\", \"severity\": \"info\", \"metadata\": {\"product\": \"joinf-erp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h1>富通天下erp</h1>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\joinf-erp.yaml\"}, {\"id\": \"join_cheer-report\", \"info\": {\"name\": \"join_cheer-report\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,join_cheer-report\", \"severity\": \"info\", \"metadata\": {\"product\": \"join_cheer-report\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"../netrep\", \"jqci\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\join_cheer-report.yaml\"}, {\"id\": \"jsf\", \"info\": {\"name\": \"jsf\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jsf\", \"severity\": \"info\", \"metadata\": {\"product\": \"jsf\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"x-powered-by: jsf\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jsf.yaml\"}, {\"id\": \"jspxcms\", \"info\": {\"name\": \"jspxcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jspxcms\", \"severity\": \"info\", \"metadata\": {\"product\": \"jspxcms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"- powered by jspxcms\", \"template/\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jspxcms.yaml\"}, {\"id\": \"jstorm\", \"info\": {\"name\": \"jstorm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jstorm\", \"severity\": \"info\", \"metadata\": {\"product\": \"jstorm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"jstorm\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jstorm.yaml\"}, {\"id\": \"jsyhit-system\", \"info\": {\"name\": \"jsyhit-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jsyhit-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"jsyhit-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"仪化产品质量查询系统\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jsyhit-system.yaml\"}, {\"id\": \"juhe-uams\", \"info\": {\"name\": \"juhe-uams\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,juhe-uams\", \"severity\": \"info\", \"metadata\": {\"product\": \"juhe-uams\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"action=\\\"login.aspx\\\" id=\\\"ctl00\\\"\", \"background-color: #4a93be;\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\juhe-uams.yaml\"}, {\"id\": \"jumpserver-fortres-machine\", \"info\": {\"name\": \"jumpserver-fortres-machine\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jumpserver-fortres-machine\", \"severity\": \"info\", \"metadata\": {\"product\": \"jumpserver-fortres-machine\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<input type=\\\"password\\\" class=\\\"form-control\\\" name=\\\"password\\\" placeholder=\\\"密码\\\" required=\\\"\\\">\", \"csrfmiddlewaretoken\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jumpserver-fortres-machine.yaml\"}, {\"id\": \"jumpserver\", \"info\": {\"name\": \"jumpserver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jumpserver\", \"severity\": \"info\", \"metadata\": {\"product\": \"jumpserver\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"20334371817c7368907b5ea52aab2d9e\"]}, {\"type\": \"word\", \"words\": [\"jumpserver\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jumpserver.yaml\"}, {\"id\": \"juniper-hdr\", \"info\": {\"name\": \"juniper-hdr\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,juniper-hdr\", \"severity\": \"info\", \"metadata\": {\"product\": \"juniper-hdr\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/hdr_logo.gif\", \"/stylesheet/juniper.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\juniper-hdr.yaml\"}, {\"id\": \"juniper-vpn\", \"info\": {\"name\": \"juniper-vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,juniper-vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"juniper-vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"juniper networks vpn\", \"junos pulse secure access service\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\juniper-vpn.yaml\"}, {\"id\": \"jurassic-application-management-system\", \"info\": {\"name\": \"jurassic-application-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jurassic-application-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"jurassic-application-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"jurassic\", \"var _usermenusurl = '/appcenter/functions/getusermenu'\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jurassic-application-management-system.yaml\"}, {\"id\": \"jxt-consulting\", \"info\": {\"name\": \"jxt-consulting\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jxt-consulting\", \"severity\": \"info\", \"metadata\": {\"product\": \"jxt-consulting\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=\\\"jxt-popup-wrapper\", \"powered by jxt consulting\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jxt-consulting.yaml\"}, {\"id\": \"jymusic\", \"info\": {\"name\": \"jymusic\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jymusic\", \"severity\": \"info\", \"metadata\": {\"product\": \"jymusic\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"jymusic音乐管理系统\", \"public/static/libs/jymusic/css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\jymusic.yaml\"}, {\"id\": \"kafka-center\", \"info\": {\"name\": \"kafka-center\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kafka-center\", \"severity\": \"info\", \"metadata\": {\"product\": \"kafka-center\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>kafka center</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kafka-center.yaml\"}, {\"id\": \"kafka-manager\", \"info\": {\"name\": \"kafka-manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kafka-manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"kafka-manager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"vassets/images/2af62f58ee2baf495c9b3a9a1c30ce03-favicon.png\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kafka-manager.yaml\"}, {\"id\": \"kafkaoffsetmonitor\", \"info\": {\"name\": \"kafkaoffsetmonitor\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kafkaoffsetmonitor\", \"severity\": \"info\", \"metadata\": {\"product\": \"kafkaoffsetmonitor\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"css/cluster-viz.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kafkaoffsetmonitor.yaml\"}, {\"id\": \"kaibb\", \"info\": {\"name\": \"kaibb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kaibb\", \"severity\": \"info\", \"metadata\": {\"product\": \"kaibb\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"forum powered by kaibb\", \"powered by kaibb\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kaibb.yaml\"}, {\"id\": \"kaijiang-oa\", \"info\": {\"name\": \"kaijiang-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kaijiang-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"kaijiang-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/kjoa/sheep/login/login.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kaijiang-oa.yaml\"}, {\"id\": \"kamailio-sip-server\", \"info\": {\"name\": \"kamailio-sip-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kamailio-sip-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"kamailio-sip-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: kamailio\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kamailio-sip-server.yaml\"}, {\"id\": \"kampyle\", \"info\": {\"name\": \"kampyle\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kampyle\", \"severity\": \"info\", \"metadata\": {\"product\": \"kampyle\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"http://cf.kampyle.com/k_button.js\", \"start kampyle feedback form button\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kampyle.yaml\"}, {\"id\": \"karrigell\", \"info\": {\"name\": \"karrigell\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,karrigell\", \"severity\": \"info\", \"metadata\": {\"product\": \"karrigell\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: karrigell\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\karrigell.yaml\"}, {\"id\": \"kasmvnc\", \"info\": {\"name\": \"kasmvnc\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kasmvnc\", \"severity\": \"info\", \"metadata\": {\"product\": \"kasmvnc\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-360184491\"]}]}], \"_source_file\": \"00_unknown\\\\kasmvnc.yaml\"}, {\"id\": \"kaspersky-secure-mail-gateway\", \"info\": {\"name\": \"kaspersky-secure-mail-gateway\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kaspersky-secure-mail-gateway\", \"severity\": \"info\", \"metadata\": {\"product\": \"kaspersky-secure-mail-gateway\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"kaspersky secure mail gateway\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kaspersky-secure-mail-gateway.yaml\"}, {\"id\": \"kayako-supportsuite\", \"info\": {\"name\": \"kayako-supportsuite\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kayako-supportsuite\", \"severity\": \"info\", \"metadata\": {\"product\": \"kayako-supportsuite\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"help desk software by kayako esupport\", \"powered by kayako esupport\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kayako-supportsuite.yaml\"}, {\"id\": \"kedacom-dvr-jie-ru-wang-guan\", \"info\": {\"name\": \"kedacom-dvr接入网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kedacom-dvr接入网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"kedacom-dvr接入网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src='images/ind_log_kedacom.png')\", \"苏州科达科技有限公司\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kedacom-dvr接入网关.yaml\"}, {\"id\": \"keil-embedded-web-server\", \"info\": {\"name\": \"keil-embedded-web-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,keil-embedded-web-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"keil-embedded-web-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: keil-eweb\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\keil-embedded-web-server.yaml\"}, {\"id\": \"kenna-system\", \"info\": {\"name\": \"kenna-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kenna-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"kenna-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"kenna sessions new\\\"\", \"href=\\\"/favicon.ico?kenna\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kenna-system.yaml\"}, {\"id\": \"kentico-cms\", \"info\": {\"name\": \"kentico-cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kentico-cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"kentico-cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/cmspages/getresource.ashx\", \"content=\\\"kentico cms\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"kentico\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kentico-cms.yaml\"}, {\"id\": \"kerio-connect\", \"info\": {\"name\": \"kerio-connect\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kerio-connect\", \"severity\": \"info\", \"metadata\": {\"product\": \"kerio-connect\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: kerio connect\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kerio-connect.yaml\"}, {\"id\": \"kerio-mailserver\", \"info\": {\"name\": \"kerio-mailserver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kerio-mailserver\", \"severity\": \"info\", \"metadata\": {\"product\": \"kerio-mailserver\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: kerio mailserver\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kerio-mailserver.yaml\"}, {\"id\": \"kerio-webstar\", \"info\": {\"name\": \"kerio-webstar\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kerio-webstar\", \"severity\": \"info\", \"metadata\": {\"product\": \"kerio-webstar\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: kerio_webstar\", \"server: webstar\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kerio-webstar.yaml\"}, {\"id\": \"keyfocus-webserver\", \"info\": {\"name\": \"keyfocus-webserver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,keyfocus-webserver\", \"severity\": \"info\", \"metadata\": {\"product\": \"keyfocus-webserver\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: kfwebserver\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\keyfocus-webserver.yaml\"}, {\"id\": \"kibana\", \"info\": {\"name\": \"kibana\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kibana\", \"severity\": \"info\", \"metadata\": {\"product\": \"kibana\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"kbn-name: kibana\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kibana.yaml\"}, {\"id\": \"kindeditor\", \"info\": {\"name\": \"kindeditor\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kindeditor\", \"severity\": \"info\", \"metadata\": {\"product\": \"kindeditor\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"k.create\", \"kindeditor-min.js\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"kindeditor.js\", \"kindeditor.ready\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kindeditor.yaml\"}, {\"id\": \"kingdee-eas\", \"info\": {\"name\": \"kingdee-eas\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"kingdee-eas\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"eas系统登录\", \"logging_kingdee.gif\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"eas系统登录\", \"金蝶\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kingdee-eas.yaml\"}, {\"id\": \"kingdee\", \"info\": {\"name\": \"kingdee\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kingdee\", \"severity\": \"info\", \"metadata\": {\"product\": \"kingdee\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"kingdee.entryrole\", \"loginkdlogo\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/eassso/common\", \"class=\\\"kd-div-loading-ct\\\"\", \"eassessionid\", \"logo-kingdee.png\", \"var formidafterlogin = '\\\"bos_mainconsolesutra\\\"\", \"金蝶国际软件集团有限公司版权所有\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kingdee.yaml\"}, {\"id\": \"kingdee-chan-pin\", \"info\": {\"name\": \"kingdee产品\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"kingdee产品\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"kingdee.entryrole\", \"loginkdlogo\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"class=\\\"kd-div-loading-ct\\\"\", \"金蝶国际软件集团有限公司版权所有\", \"/clientbin/kingdee.bos.xpf.app.xap\", \"var formidafterlogin = '\\\"bos_mainconsolesutra\\\"\", \"eassessionid\", \"logo-kingdee.png\", \"/eassso/common\", \"html5/content/themes/kdcss.min.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kingdee产品.yaml\"}, {\"id\": \"kingosoft\", \"info\": {\"name\": \"kingosoft\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kingosoft\", \"severity\": \"info\", \"metadata\": {\"product\": \"kingosoft\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/jkingo.js\", \"kingosoft\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"setkingoencypt.jsp\", \"青果\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kingosoft.yaml\"}, {\"id\": \"kingsoft-duba-enterprise\", \"info\": {\"name\": \"kingsoft-duba-enterprise\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kingsoft-duba-enterprise\", \"severity\": \"info\", \"metadata\": {\"product\": \"kingsoft-duba-enterprise\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"title\\\">关于全网部署金山毒霸企业版\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kingsoft-duba-enterprise.yaml\"}, {\"id\": \"kissy\", \"info\": {\"name\": \"kissy\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kissy\", \"severity\": \"info\", \"metadata\": {\"product\": \"kissy\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"kissy-min.js\", \"kissy.js\", \"kissy.ready\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kissy.yaml\"}, {\"id\": \"kj65n-mei-kuang-yuan-cheng-jian-kong-an-quan-yu-jing-xi-tong\", \"info\": {\"name\": \"kj65n煤矿远程监控安全预警系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kj65n煤矿远程监控安全预警系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"kj65n煤矿远程监控安全预警系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"images/login/top002.gif\", \"worlddesktop/webform1.aspx\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kj65n煤矿远程监控安全预警系统.yaml\"}, {\"id\": \"kkfileview\", \"info\": {\"name\": \"kkfileview\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kkfileview\", \"severity\": \"info\", \"metadata\": {\"product\": \"kkfileview\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"repo: 'kkfileview'\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kkfileview.yaml\"}, {\"id\": \"kleeja\", \"info\": {\"name\": \"kleeja\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kleeja\", \"severity\": \"info\", \"metadata\": {\"product\": \"kleeja\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by kleeja\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kleeja.yaml\"}, {\"id\": \"kloxo-single-server\", \"info\": {\"name\": \"kloxo-single-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kloxo-single-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"kloxo-single-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/htmllib/js/preop.js\", \"src=\\\"/img/hypervm-logo.gif\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kloxo-single-server.yaml\"}, {\"id\": \"knopflerfish-http-server\", \"info\": {\"name\": \"knopflerfish-http-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,knopflerfish-http-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"knopflerfish-http-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: the knopflerfish http server\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\knopflerfish-http-server.yaml\"}, {\"id\": \"koala-web-server\", \"info\": {\"name\": \"koala-web-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,koala-web-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"koala-web-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: koala web server\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\koala-web-server.yaml\"}, {\"id\": \"kodbox-ke-dao-yun\", \"info\": {\"name\": \"kodbox可道云\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"kodbox可道云\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"dfe2fd3d8458e166616692b39c32baf9\"]}, {\"type\": \"word\", \"words\": [\"<title>kodbox - powered by kodbox</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kodbox可道云.yaml\"}, {\"id\": \"kodcloud-system\", \"info\": {\"name\": \"kodcloud-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kodcloud-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"kodcloud-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/common/loading_simple.gif\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kodcloud-system.yaml\"}, {\"id\": \"kolab\", \"info\": {\"name\": \"kolab\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kolab\", \"severity\": \"info\", \"metadata\": {\"product\": \"kolab\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"kolab\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kolab.yaml\"}, {\"id\": \"kong\", \"info\": {\"name\": \"kong\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kong\", \"severity\": \"info\", \"metadata\": {\"product\": \"kong\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: kong\", \"x-kong-response-latency:\", \"via: kong\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kong.yaml\"}, {\"id\": \"kordil-edms\", \"info\": {\"name\": \"kordil-edms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kordil-edms\", \"severity\": \"info\", \"metadata\": {\"product\": \"kordil-edms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\">kordil edms\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kordil-edms.yaml\"}, {\"id\": \"kouton-ctbs\", \"info\": {\"name\": \"kouton-ctbs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kouton-ctbs\", \"severity\": \"info\", \"metadata\": {\"product\": \"kouton-ctbs\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"欢迎使用 kouton ctbs advanced web client 系统!\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kouton-ctbs.yaml\"}, {\"id\": \"kuaipu-m6\", \"info\": {\"name\": \"kuaipu-m6\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kuaipu-m6\", \"severity\": \"info\", \"metadata\": {\"product\": \"kuaipu-m6\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"resource/javascript/jkpm6.datetime.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kuaipu-m6.yaml\"}, {\"id\": \"kwcnet-vis\", \"info\": {\"name\": \"kwcnet-vis\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kwcnet-vis\", \"severity\": \"info\", \"metadata\": {\"product\": \"kwcnet-vis\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"北京开维创科技有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kwcnet-vis.yaml\"}, {\"id\": \"kxmail\", \"info\": {\"name\": \"kxmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kxmail\", \"severity\": \"info\", \"metadata\": {\"product\": \"kxmail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/systemfunction.pack.js\", \"lo_computername\", \"powered by <a href=\\\"http://www.kxmail.net\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kxmail.yaml\"}, {\"id\": \"kyan-design\", \"info\": {\"name\": \"kyan-design\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kyan-design\", \"severity\": \"info\", \"metadata\": {\"product\": \"kyan-design\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<meta name='author' content='http://www.kyanmedia.com'>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kyan-design.yaml\"}, {\"id\": \"kyan-jian-kong-she-bei\", \"info\": {\"name\": \"kyan-监控设备\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kyan-监控设备\", \"severity\": \"info\", \"metadata\": {\"product\": \"kyan-监控设备\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"login_files\", \"platform\", \"欢迎\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kyan-监控设备.yaml\"}, {\"id\": \"kyxscms\", \"info\": {\"name\": \"kyxscms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kyxscms\", \"severity\": \"info\", \"metadata\": {\"product\": \"kyxscms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<script src=\\\"/public/static/layer/layer.js\\\">\", \"goodbook-tabcont\", \"href=\\\"/template/home/default_web/css/style.css\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\kyxscms.yaml\"}, {\"id\": \"labview\", \"info\": {\"name\": \"labview\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,labview\", \"severity\": \"info\", \"metadata\": {\"product\": \"labview\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: labview\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\labview.yaml\"}, {\"id\": \"lancom-fang-huo-qiang\", \"info\": {\"name\": \"lancom-防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lancom-防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"lancom-防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://www.lancom-systems.de\\\">\", \"firewall\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\lancom-防火墙.yaml\"}, {\"id\": \"landmark-dus\", \"info\": {\"name\": \"landmark-dus\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,landmark-dus\", \"severity\": \"info\", \"metadata\": {\"product\": \"landmark-dus\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/landmark.admin.web_deploy/\", \"landmark\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\landmark-dus.yaml\"}, {\"id\": \"landray-oa\", \"info\": {\"name\": \"landray-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,landray-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"landray-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"302464c3f6207d57240649926cfc7bd4\"]}, {\"type\": \"word\", \"words\": [\"lui_login_message_td\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\landray-oa.yaml\"}, {\"id\": \"landray-oa-xi-tong\", \"info\": {\"name\": \"landray-oa系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"landray-oa系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"j_acegi_security_check\", \"lui_login_message_div\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"302464c3f6207d57240649926cfc7bd4\"]}]}], \"_source_file\": \"00_unknown\\\\landray-oa系统.yaml\"}, {\"id\": \"landray-lan-lingeis-zhi-hui-xie-tong-ping-tai\", \"info\": {\"name\": \"landray-蓝凌eis智慧协同平台\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,landray-蓝凌eis智慧协同平台\", \"severity\": \"info\", \"metadata\": {\"product\": \"landray-蓝凌eis智慧协同平台\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/scripts/jquery.landray.common.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\landray-蓝凌eis智慧协同平台.yaml\"}, {\"id\": \"lanmp\", \"info\": {\"name\": \"lanmp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lanmp\", \"severity\": \"info\", \"metadata\": {\"product\": \"lanmp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<strong>恭喜\", \"lanmp\", \"wdlinux.cn\", \"本页可删除\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\lanmp.yaml\"}, {\"id\": \"lanyeye\", \"info\": {\"name\": \"lanyeye\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lanyeye\", \"severity\": \"info\", \"metadata\": {\"product\": \"lanyeye\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/skin/admin/img/login/laneye.png\", \"<font>兰眼下一代威胁感知系统</font>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\lanyeye.yaml\"}, {\"id\": \"laobanmail-visualhost\", \"info\": {\"name\": \"laobanmail-visualhost\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,laobanmail-visualhost\", \"severity\": \"info\", \"metadata\": {\"product\": \"laobanmail-visualhost\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/public/js/util/xg_oyang.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\laobanmail-visualhost.yaml\"}, {\"id\": \"laravel-admin\", \"info\": {\"name\": \"laravel-admin\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,laravel-admin\", \"severity\": \"info\", \"metadata\": {\"product\": \"laravel-admin\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"vendor/laravel-admin/\", \"欢迎登录laravel-admin</p>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\laravel-admin.yaml\"}, {\"id\": \"laravel-framework\", \"info\": {\"name\": \"laravel-framework\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,laravel-framework\", \"severity\": \"info\", \"metadata\": {\"product\": \"laravel-framework\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"set-cookie: laravel_session\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\laravel-framework.yaml\"}, {\"id\": \"lasso-web-data-engine\", \"info\": {\"name\": \"lasso-web-data-engine\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lasso-web-data-engine\", \"severity\": \"info\", \"metadata\": {\"product\": \"lasso-web-data-engine\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: lasso\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\lasso-web-data-engine.yaml\"}, {\"id\": \"laysns-cms\", \"info\": {\"name\": \"laysns-cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,laysns-cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"laysns-cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"http://www.laysns.com/\\\"> laysns\", \"title=\\\"laysns\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\laysns-cms.yaml\"}, {\"id\": \"lc000-system\", \"info\": {\"name\": \"lc000-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lc000-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"lc000-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>secondary_nodes</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\lc000-system.yaml\"}, {\"id\": \"leadsec-employee-internet-management\", \"info\": {\"name\": \"leadsec-employee-internet-management\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,leadsec-employee-internet-management\", \"severity\": \"info\", \"metadata\": {\"product\": \"leadsec-employee-internet-management\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"asdf</div>-->\", \"txtmac\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\leadsec-employee-internet-management.yaml\"}, {\"id\": \"leadsec-security-gateway\", \"info\": {\"name\": \"leadsec-security-gateway\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,leadsec-security-gateway\", \"severity\": \"info\", \"metadata\": {\"product\": \"leadsec-security-gateway\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"login\", \"安全系统\", \"网御星云\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\leadsec-security-gateway.yaml\"}, {\"id\": \"leadsec-soc\", \"info\": {\"name\": \"leadsec-soc\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,leadsec-soc\", \"severity\": \"info\", \"metadata\": {\"product\": \"leadsec-soc\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/leadsec-soc\", \"action=\\\"/leadsec-soc/signin\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\leadsec-soc.yaml\"}, {\"id\": \"leadsec-ssl-vpn\", \"info\": {\"name\": \"leadsec-ssl-vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,leadsec-ssl-vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"leadsec-ssl-vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/ssl/down/usbkey.exe\", \"欢迎使用leadsec网御ssl vpn\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\leadsec-ssl-vpn.yaml\"}, {\"id\": \"leadsec-vpn\", \"info\": {\"name\": \"leadsec-vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,leadsec-vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"leadsec-vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/js/leadsec.js\", \"src=\\\"/vpn/user/common/\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\leadsec-vpn.yaml\"}, {\"id\": \"leadsec-fang-bing-du-wang-guan-xi-tong\", \"info\": {\"name\": \"leadsec-防病毒网关系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,leadsec-防病毒网关系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"leadsec-防病毒网关系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"网御防病毒网关系统\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\leadsec-防病毒网关系统.yaml\"}, {\"id\": \"leadshop\", \"info\": {\"name\": \"leadshop\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,leadshop\", \"severity\": \"info\", \"metadata\": {\"product\": \"leadshop\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"34e851938a4a941ce6318d62253892ec\", \"5b0665d0447da9c06646da8f282bf372\"]}]}], \"_source_file\": \"00_unknown\\\\leadshop.yaml\"}, {\"id\": \"leanote-notepad\", \"info\": {\"name\": \"leanote-notepad\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,leanote-notepad\", \"severity\": \"info\", \"metadata\": {\"product\": \"leanote-notepad\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"name=\\\"author\\\" content=\\\"leanote,蚂蚁笔记\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\leanote-notepad.yaml\"}, {\"id\": \"learun-system\", \"info\": {\"name\": \"learun-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,learun-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"learun-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"力软敏捷开发框架，是一个web可视化开发平台\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\learun-system.yaml\"}, {\"id\": \"led-control-software\", \"info\": {\"name\": \"led-control-software\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,led-control-software\", \"severity\": \"info\", \"metadata\": {\"product\": \"led-control-software\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!-- 记录当前电视墙的序号 end-->\", \"j_setcon j_sub_new j_padt30 j_padb30\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\led-control-software.yaml\"}, {\"id\": \"lemis-management-system\", \"info\": {\"name\": \"lemis-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lemis-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"lemis-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"lemis.web_app_name\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\lemis-management-system.yaml\"}, {\"id\": \"lenovo-enterprise-network-disk\", \"info\": {\"name\": \"lenovo-enterprise-network-disk\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lenovo-enterprise-network-disk\", \"severity\": \"info\", \"metadata\": {\"product\": \"lenovo-enterprise-network-disk\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"alt=\\\"联想企业网盘android客户端下载\\\"\", \"client/android/bin/lenovobox.apk\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\lenovo-enterprise-network-disk.yaml\"}, {\"id\": \"lenovo-thinkserver\", \"info\": {\"name\": \"lenovo-thinkserver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lenovo-thinkserver\", \"severity\": \"info\", \"metadata\": {\"product\": \"lenovo-thinkserver\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"thinkserver\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\lenovo-thinkserver.yaml\"}, {\"id\": \"lenovo-fang-huo-qiang\", \"info\": {\"name\": \"lenovo-防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lenovo-防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"lenovo-防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"联想防火墙\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\lenovo-防火墙.yaml\"}, {\"id\": \"lepus\", \"info\": {\"name\": \"lepus\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lepus\", \"severity\": \"info\", \"metadata\": {\"product\": \"lepus\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"language/switchover\\\"+'/'+current_language\", \"登录\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\lepus.yaml\"}, {\"id\": \"letodms\", \"info\": {\"name\": \"letodms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,letodms\", \"severity\": \"info\", \"metadata\": {\"product\": \"letodms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"letodms free document management system\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\letodms.yaml\"}, {\"id\": \"lezhixing\", \"info\": {\"name\": \"lezhixing\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lezhixing\", \"severity\": \"info\", \"metadata\": {\"product\": \"lezhixing\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/static/thirdparty/jquery/\", \"var contextpath = \\\"/datacenter\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"action=\\\"/datacenter/authentication/login.do\\\" method=\\\"post\", \"location.href=contextpath+\\\"/login/password/password.jsp\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\lezhixing.yaml\"}, {\"id\": \"lflflf\", \"info\": {\"name\": \"lflflf\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lflflf\", \"severity\": \"info\", \"metadata\": {\"product\": \"lflflf\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/lfradius/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\lflflf.yaml\"}, {\"id\": \"lg-supersign\", \"info\": {\"name\": \"lg-supersign\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lg-supersign\", \"severity\": \"info\", \"metadata\": {\"product\": \"lg-supersign\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/ssw/js/user/index.js\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\lg-supersign.yaml\"}, {\"id\": \"libsys-library\", \"info\": {\"name\": \"libsys-library\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,libsys-library\", \"severity\": \"info\", \"metadata\": {\"product\": \"libsys-library\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div class=\\\"header_opac_logo\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\libsys-library.yaml\"}, {\"id\": \"libwww-perl-daemon\", \"info\": {\"name\": \"libwww-perl-daemon\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,libwww-perl-daemon\", \"severity\": \"info\", \"metadata\": {\"product\": \"libwww-perl-daemon\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: libwww-perl-daemon\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\libwww-perl-daemon.yaml\"}, {\"id\": \"lifesize-control\", \"info\": {\"name\": \"lifesize-control\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lifesize-control\", \"severity\": \"info\", \"metadata\": {\"product\": \"lifesize-control\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/lifesizecontrol/asp/index.html\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\lifesize-control.yaml\"}, {\"id\": \"lifetype\", \"info\": {\"name\": \"lifetype\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lifetype\", \"severity\": \"info\", \"metadata\": {\"product\": \"lifetype\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"lifetype\", \"title=\\\"install lifetype\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\lifetype.yaml\"}, {\"id\": \"lime-survey\", \"info\": {\"name\": \"lime-survey\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lime-survey\", \"severity\": \"info\", \"metadata\": {\"product\": \"lime-survey\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"limesurvey\", \"href=\\\"http://www.limesurvey.org\\\" target=\\\"_blank\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\lime-survey.yaml\"}, {\"id\": \"linked-see\", \"info\": {\"name\": \"linked-see\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,linked-see\", \"severity\": \"info\", \"metadata\": {\"product\": \"linked-see\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"4aa64c674d4f0b5f85b17ae727fa5e7e\"]}, {\"type\": \"word\", \"words\": [\"<title>linked coms</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\linked-see.yaml\"}, {\"id\": \"listserv\", \"info\": {\"name\": \"listserv\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,listserv\", \"severity\": \"info\", \"metadata\": {\"product\": \"listserv\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>welcome to listserv\", \"powered by the listserv email list manager\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\listserv.yaml\"}, {\"id\": \"lkpoweroa\", \"info\": {\"name\": \"lkpoweroa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lkpoweroa\", \"severity\": \"info\", \"metadata\": {\"product\": \"lkpoweroa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/lksys_windowcontrolscript.js\", \"hhctrlmax\", \"id=\\\"lkblogin\\\" href=\\\"javascript:__dopostback('lkblogin','')\", \"identityvalidator\", \"onload=\\\"lksys_pubmaxwin()\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\lkpoweroa.yaml\"}, {\"id\": \"lnmp\", \"info\": {\"name\": \"lnmp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lnmp\", \"severity\": \"info\", \"metadata\": {\"product\": \"lnmp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"lnmp一键安装包\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\lnmp.yaml\"}, {\"id\": \"logsign-siem\", \"info\": {\"name\": \"logsign-siem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,logsign-siem\", \"severity\": \"info\", \"metadata\": {\"product\": \"logsign-siem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"window.location = '/ui/modules/login/'\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\logsign-siem.yaml\"}, {\"id\": \"loopup-meeting\", \"info\": {\"name\": \"loopup-meeting\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,loopup-meeting\", \"severity\": \"info\", \"metadata\": {\"product\": \"loopup-meeting\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"loopup\\\"\", \"machine:\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\loopup-meeting.yaml\"}, {\"id\": \"looyu-oms\", \"info\": {\"name\": \"looyu-oms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,looyu-oms\", \"severity\": \"info\", \"metadata\": {\"product\": \"looyu-oms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"http://gate.looyu.com/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\looyu-oms.yaml\"}, {\"id\": \"lotwan-web-accelerator\", \"info\": {\"name\": \"lotwan-web-accelerator\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lotwan-web-accelerator\", \"severity\": \"info\", \"metadata\": {\"product\": \"lotwan-web-accelerator\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"北京华夏创新科技有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\lotwan-web-accelerator.yaml\"}, {\"id\": \"loyaa-information-automatic-editing-system\", \"info\": {\"name\": \"loyaa-information-automatic-editing-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,loyaa-information-automatic-editing-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"loyaa-information-automatic-editing-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/loyaa/common.lib.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\loyaa-information-automatic-editing-system.yaml\"}, {\"id\": \"lpse\", \"info\": {\"name\": \"lpse\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lpse\", \"severity\": \"info\", \"metadata\": {\"product\": \"lpse\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/eproc/assets/application.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\lpse.yaml\"}, {\"id\": \"luci\", \"info\": {\"name\": \"luci\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,luci\", \"severity\": \"info\", \"metadata\": {\"product\": \"luci\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/luci-static/openwrt.org/cascade.css\", \"<head> <meta http-equiv=\\\"refresh\\\" content=\\\"0; url=/cgi-bin/luci\\\" /> </head>\", \"action=\\\"/cgi-bin/luci\\\">\", \"href=\\\"/cgi-bin/luci\\\"></a>\", \"luci - lua configuration interface\", \"powered by luci\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\luci.yaml\"}, {\"id\": \"lussumo-vanilla\", \"info\": {\"name\": \"lussumo-vanilla\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lussumo-vanilla\", \"severity\": \"info\", \"metadata\": {\"product\": \"lussumo-vanilla\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"x-powered-by: lussumo vanilla\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\lussumo-vanilla.yaml\"}, {\"id\": \"luxcal\", \"info\": {\"name\": \"luxcal\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,luxcal\", \"severity\": \"info\", \"metadata\": {\"product\": \"luxcal\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class='footlb'>lux\", \"content=\\\"luxcal\", \"content=\\\"roel buining\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\luxcal.yaml\"}, {\"id\": \"m2soft-rdserver\", \"info\": {\"name\": \"m2soft-rdserver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,m2soft-rdserver\", \"severity\": \"info\", \"metadata\": {\"product\": \"m2soft-rdserver\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: rdserver\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\m2soft-rdserver.yaml\"}, {\"id\": \"maccms\", \"info\": {\"name\": \"maccms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,maccms\", \"severity\": \"info\", \"metadata\": {\"product\": \"maccms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<script>var maccms={\\\"path\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\maccms.yaml\"}, {\"id\": \"machttp\", \"info\": {\"name\": \"machttp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,machttp\", \"severity\": \"info\", \"metadata\": {\"product\": \"machttp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: machttp\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\machttp.yaml\"}, {\"id\": \"magicmail\", \"info\": {\"name\": \"magicmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,magicmail\", \"severity\": \"info\", \"metadata\": {\"product\": \"magicmail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/aboutus/magicmail.gif\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\magicmail.yaml\"}, {\"id\": \"magtech-journalx\", \"info\": {\"name\": \"magtech-journalx\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,magtech-journalx\", \"severity\": \"info\", \"metadata\": {\"product\": \"magtech-journalx\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"journalx/authorlogon.action?mag_id\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\magtech-journalx.yaml\"}, {\"id\": \"mahara\", \"info\": {\"name\": \"mahara\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mahara\", \"severity\": \"info\", \"metadata\": {\"product\": \"mahara\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=\\\"powered-by\\\"><a href=\\\"http://mahara.org/\", \"this site is powered by mahara\", \"{\\\"namedfieldempty\\\":\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mahara.yaml\"}, {\"id\": \"mail2000-you-jian-xi-tong\", \"info\": {\"name\": \"mail2000-邮件系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mail2000-邮件系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"mail2000-邮件系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"mail2000郵件系統\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mail2000-邮件系统.yaml\"}, {\"id\": \"mailenable\", \"info\": {\"name\": \"mailenable\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mailenable\", \"severity\": \"info\", \"metadata\": {\"product\": \"mailenable\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!-- loginpanel_shell_table -->\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mailenable.yaml\"}, {\"id\": \"mailer\", \"info\": {\"name\": \"mailer\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mailer\", \"severity\": \"info\", \"metadata\": {\"product\": \"mailer\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/jdwm/cgi/login.cgi?login\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mailer.yaml\"}, {\"id\": \"mailgard-webmail\", \"info\": {\"name\": \"mailgard-webmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mailgard-webmail\", \"severity\": \"info\", \"metadata\": {\"product\": \"mailgard-webmail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"window.open('http://www.hechen.com')\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mailgard-webmail.yaml\"}, {\"id\": \"mailman\", \"info\": {\"name\": \"mailman\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mailman\", \"severity\": \"info\", \"metadata\": {\"product\": \"mailman\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/images/mailman\", \"delivered by mailman\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mailman.yaml\"}, {\"id\": \"mailmax-you-jian-fu-wu-qi\", \"info\": {\"name\": \"mailmax-邮件服务器\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mailmax-邮件服务器\", \"severity\": \"info\", \"metadata\": {\"product\": \"mailmax-邮件服务器\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"mailmax\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mailmax-邮件服务器.yaml\"}, {\"id\": \"mailsite-express\", \"info\": {\"name\": \"mailsite-express\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mailsite-express\", \"severity\": \"info\", \"metadata\": {\"product\": \"mailsite-express\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<b>mailsite <em>express\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mailsite-express.yaml\"}, {\"id\": \"mailsiteexpress\", \"info\": {\"name\": \"mailsiteexpress\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mailsiteexpress\", \"severity\": \"info\", \"metadata\": {\"product\": \"mailsiteexpress\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"onsubmit=\\\"openexpress(document.expresslogin)\", \"rockliffe systems, inc.\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mailsiteexpress.yaml\"}, {\"id\": \"maipu-isg1000-an-quan-wang-guan\", \"info\": {\"name\": \"maipu-isg1000安全网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,maipu-isg1000安全网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"maipu-isg1000安全网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/php/common/checknum_creat.php?module=config_authnum\\\")?\", \"isg1000\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\maipu-isg1000安全网关.yaml\"}, {\"id\": \"maipu-an-quan-wang-guan\", \"info\": {\"name\": \"maipu-安全网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,maipu-安全网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"maipu-安全网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/webui/images/maipu/login/login_adminbg_a.gif\\\"?\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\maipu-安全网关.yaml\"}, {\"id\": \"mallbuilder\", \"info\": {\"name\": \"mallbuilder\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mallbuilder\", \"severity\": \"info\", \"metadata\": {\"product\": \"mallbuilder\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by mallbuilde\", \"content=\\\"mallbuilder\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mallbuilder.yaml\"}, {\"id\": \"mambo-cms\", \"info\": {\"name\": \"mambo-cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mambo-cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"mambo-cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div id=\\\"mambo\", \"content=\\\"mambo\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mambo-cms.yaml\"}, {\"id\": \"manage-system\", \"info\": {\"name\": \"manage-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,manage-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"manage-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"基于vue2 + element ui 的后台管理系统解决方案\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\manage-system.yaml\"}, {\"id\": \"manageengine-adaudit\", \"info\": {\"name\": \"manageengine-adaudit\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,manageengine-adaudit\", \"severity\": \"info\", \"metadata\": {\"product\": \"manageengine-adaudit\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"title=\\\"manageengine admanager plus\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\manageengine-adaudit.yaml\"}, {\"id\": \"manageengine-admanager-plus\", \"info\": {\"name\": \"manageengine-admanager-plus\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,manageengine-admanager-plus\", \"severity\": \"info\", \"metadata\": {\"product\": \"manageengine-admanager-plus\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>manageengine - admanager plus</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\manageengine-admanager-plus.yaml\"}, {\"id\": \"manageengine-adselfservice\", \"info\": {\"name\": \"manageengine-adselfservice\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,manageengine-adselfservice\", \"severity\": \"info\", \"metadata\": {\"product\": \"manageengine-adselfservice\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"images/adssp_favicon.ico\", \"manageengine\", \"small_status_box\", \"src=\\\"adsf/js/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\manageengine-adselfservice.yaml\"}, {\"id\": \"manageengine-applications-manager\", \"info\": {\"name\": \"manageengine-applications-manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,manageengine-applications-manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"manageengine-applications-manager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/appmanager.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\manageengine-applications-manager.yaml\"}, {\"id\": \"manageengine-assetexplorer\", \"info\": {\"name\": \"manageengine-assetexplorer\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,manageengine-assetexplorer\", \"severity\": \"info\", \"metadata\": {\"product\": \"manageengine-assetexplorer\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"footerf2\\\">manageengine assetexplorer\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\manageengine-assetexplorer.yaml\"}, {\"id\": \"manageengine-deviceexpert\", \"info\": {\"name\": \"manageengine-deviceexpert\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,manageengine-deviceexpert\", \"severity\": \"info\", \"metadata\": {\"product\": \"manageengine-deviceexpert\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/deviceexpert.js\", \"changepasswordpolicy\", \"password manager pro does not allow\", \"selectpasswordpolicy\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\manageengine-deviceexpert.yaml\"}, {\"id\": \"manageengine-opmanager\", \"info\": {\"name\": \"manageengine-opmanager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,manageengine-opmanager\", \"severity\": \"info\", \"metadata\": {\"product\": \"manageengine-opmanager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://www.manageengine.com/products/opmanager/index.html\\\" target=\", \"the complete network monitoring software from manageengine\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\manageengine-opmanager.yaml\"}, {\"id\": \"management-platform\", \"info\": {\"name\": \"management-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,management-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"management-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"casloginview\", \"i-verfiy\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"北京天源迪科信息技术有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\management-platform.yaml\"}, {\"id\": \"mantuoluo-medication\", \"info\": {\"name\": \"mantuoluo-medication\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mantuoluo-medication\", \"severity\": \"info\", \"metadata\": {\"product\": \"mantuoluo-medication\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h2>曼陀罗医疗</h2>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mantuoluo-medication.yaml\"}, {\"id\": \"maop-oa\", \"info\": {\"name\": \"maop-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,maop-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"maop-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"http://www.oooa.cn\\\">重庆猫扑网络科技有限公司</a>\", \"pwd yahei16\", \"www.oooa.cn\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\maop-oa.yaml\"}, {\"id\": \"marathon\", \"info\": {\"name\": \"marathon\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,marathon\", \"severity\": \"info\", \"metadata\": {\"product\": \"marathon\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"img/marathon-favicon.ico\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\marathon.yaml\"}, {\"id\": \"marcopacs-product\", \"info\": {\"name\": \"marcopacs-product\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,marcopacs-product\", \"severity\": \"info\", \"metadata\": {\"product\": \"marcopacs-product\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"data-redirect=\\\"account/systemconfiguration.aspx\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\marcopacs-product.yaml\"}, {\"id\": \"maritimeselectionsystem\", \"info\": {\"name\": \"maritimeselectionsystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,maritimeselectionsystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"maritimeselectionsystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"海事选船系统</el-col>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\maritimeselectionsystem.yaml\"}, {\"id\": \"mas-mobile-agent-serve\", \"info\": {\"name\": \"mas-mobile-agent-serve\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mas-mobile-agent-serve\", \"severity\": \"info\", \"metadata\": {\"product\": \"mas-mobile-agent-serve\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"action='/mas_security_check'>\", \"if(!isnotnull(document.forms[0].filepath.value, \\\"证书文件\\\"))\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mas-mobile-agent-serve.yaml\"}, {\"id\": \"mashery-proxy\", \"info\": {\"name\": \"mashery-proxy\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mashery-proxy\", \"severity\": \"info\", \"metadata\": {\"product\": \"mashery-proxy\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: mashery proxy\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mashery-proxy.yaml\"}, {\"id\": \"mason\", \"info\": {\"name\": \"mason\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mason\", \"severity\": \"info\", \"metadata\": {\"product\": \"mason\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"x-powered-by: html::mason\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mason.yaml\"}, {\"id\": \"mathopd\", \"info\": {\"name\": \"mathopd\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mathopd\", \"severity\": \"info\", \"metadata\": {\"product\": \"mathopd\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: mathopd\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mathopd.yaml\"}, {\"id\": \"maticsoft-sns\", \"info\": {\"name\": \"maticsoft-sns\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,maticsoft-sns\", \"severity\": \"info\", \"metadata\": {\"product\": \"maticsoft-sns\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/areas/sns/\", \"maticsoft\", \"maticsoftsns\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\maticsoft-sns.yaml\"}, {\"id\": \"mbedthis-appweb\", \"info\": {\"name\": \"mbedthis-appweb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mbedthis-appweb\", \"severity\": \"info\", \"metadata\": {\"product\": \"mbedthis-appweb\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: mbedthis-appweb\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mbedthis-appweb.yaml\"}, {\"id\": \"mcafee-intrushield\", \"info\": {\"name\": \"mcafee-intrushield\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mcafee-intrushield\", \"severity\": \"info\", \"metadata\": {\"product\": \"mcafee-intrushield\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"intrushield\", \"intruvert\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mcafee-intrushield.yaml\"}, {\"id\": \"mcms\", \"info\": {\"name\": \"mcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mcms\", \"severity\": \"info\", \"metadata\": {\"product\": \"mcms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/mcms/search.do\\\" method=\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mcms.yaml\"}, {\"id\": \"mdaemon-email-server\", \"info\": {\"name\": \"mdaemon-email-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mdaemon-email-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"mdaemon-email-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/worldclient.dll?view=main\", \"<strong>mdaemon/worldclient\", \"mdaemon \"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mdaemon-email-server.yaml\"}, {\"id\": \"mechat-irc\", \"info\": {\"name\": \"mechat-irc\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mechat-irc\", \"severity\": \"info\", \"metadata\": {\"product\": \"mechat-irc\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"obj.reserve = strreserve\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mechat-irc.yaml\"}, {\"id\": \"mechat-online-service\", \"info\": {\"name\": \"mechat-online-service\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mechat-online-service\", \"severity\": \"info\", \"metadata\": {\"product\": \"mechat-online-service\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/meiqia.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mechat-online-service.yaml\"}, {\"id\": \"meetingplaza\", \"info\": {\"name\": \"meetingplaza\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,meetingplaza\", \"severity\": \"info\", \"metadata\": {\"product\": \"meetingplaza\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"meetingplaza http tunneling\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\meetingplaza.yaml\"}, {\"id\": \"meis-medicine\", \"info\": {\"name\": \"meis-medicine\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,meis-medicine\", \"severity\": \"info\", \"metadata\": {\"product\": \"meis-medicine\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h1 class=\\\"logo\\\">欢迎使用 <span class=\\\"logo_icon\\\">meis</span> 医疗信息管理系统</h1>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\meis-medicine.yaml\"}, {\"id\": \"meitrack\", \"info\": {\"name\": \"meitrack\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,meitrack\", \"severity\": \"info\", \"metadata\": {\"product\": \"meitrack\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"_trackermain_gtvtseries\", \"action=\\\"trackerlogin.aspx\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\meitrack.yaml\"}, {\"id\": \"mercurial\", \"info\": {\"name\": \"mercurial\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mercurial\", \"severity\": \"info\", \"metadata\": {\"product\": \"mercurial\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"title=\\\"mercurial\\\" style=\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mercurial.yaml\"}, {\"id\": \"message-solution\", \"info\": {\"name\": \"message-solution\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,message-solution\", \"severity\": \"info\", \"metadata\": {\"product\": \"message-solution\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"messagesolution enterprise\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\message-solution.yaml\"}, {\"id\": \"metasploit\", \"info\": {\"name\": \"metasploit\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,metasploit\", \"severity\": \"info\", \"metadata\": {\"product\": \"metasploit\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"metasploit\", \"r7bottom-strip\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\metasploit.yaml\"}, {\"id\": \"metaswitch-networks-metaview-web\", \"info\": {\"name\": \"metaswitch-networks-metaview-web\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,metaswitch-networks-metaview-web\", \"severity\": \"info\", \"metadata\": {\"product\": \"metaswitch-networks-metaview-web\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content='dcl.metaview.web.client'\", \"src=\\\"dcl.metaview.web.client.nocache.js\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\metaswitch-networks-metaview-web.yaml\"}, {\"id\": \"metronic-admin-theme-framework\", \"info\": {\"name\": \"metronic-admin-theme-framework\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,metronic-admin-theme-framework\", \"severity\": \"info\", \"metadata\": {\"product\": \"metronic-admin-theme-framework\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"metronic. admin dashboard template.\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\metronic-admin-theme-framework.yaml\"}, {\"id\": \"mgb-opensource-guestbook\", \"info\": {\"name\": \"mgb-opensource-guestbook\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mgb-opensource-guestbook\", \"severity\": \"info\", \"metadata\": {\"product\": \"mgb-opensource-guestbook\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"mgb opensource guestbook\", \"title=\\\"mgb homepage\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mgb-opensource-guestbook.yaml\"}, {\"id\": \"mibew-messenger\", \"info\": {\"name\": \"mibew-messenger\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mibew-messenger\", \"severity\": \"info\", \"metadata\": {\"product\": \"mibew-messenger\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"empty_inner\", \"class=\\\"flink\\\">mibew messenger\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mibew-messenger.yaml\"}, {\"id\": \"micool-management-system\", \"info\": {\"name\": \"micool-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,micool-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"micool-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"bplay.php?play=\", \"name=\\\"keywords\\\" content=\\\"电影,视频大全,在线高清电影,付费电影,免费电影,剧集,电影,在线观看,vip高清电影直播\\\"\", \"米酷影视 版权所有\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\micool-management-system.yaml\"}, {\"id\": \"micro-focus-open-enterprise-server\", \"info\": {\"name\": \"micro-focus-open-enterprise-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,micro-focus-open-enterprise-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"micro-focus-open-enterprise-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h3>micro focus open enterprise server 提供市场中的最佳网络、文件和打印服务。</h3>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\micro-focus-open-enterprise-server.yaml\"}, {\"id\": \"micro-portal\", \"info\": {\"name\": \"micro-portal\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,micro-portal\", \"severity\": \"info\", \"metadata\": {\"product\": \"micro-portal\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/tpl/home/weimeng/common/css/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\micro-portal.yaml\"}, {\"id\": \"microsoft-exchange\", \"info\": {\"name\": \"microsoft-exchange\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,microsoft-exchange\", \"severity\": \"info\", \"metadata\": {\"product\": \"microsoft-exchange\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"location: /owa/\", \"server: microsoft\"], \"part\": \"header\", \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"<div class=\\\"signinheader\\\">outlook</div>\", \"owalogocontainer\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/owa/\", \"owapage = asp.auth_logon_aspx\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/owa/\", \"showpasswordcheck\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/exchweb/bin/auth/owalogon.asp\", \"/exchweb/bin/auth/owalogon.asp?url=\", \"<!-- owapage = asp.auth_logon_aspx\", \"<div class=\\\"signinheader\\\">outlook</div>\", \"<meta http-equiv=\\\"refresh\\\" content=\\\"0;url=/owa\\\">\", \"href=\\\"/owa/auth/\", \"themes/resources/segoeui-semibold.ttf\", \"window.location.replace(\\\"/owa/\\\" + window.location.hash);</script></head><body></body>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\microsoft-exchange.yaml\"}, {\"id\": \"microsoft-isa-server\", \"info\": {\"name\": \"microsoft-isa-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,microsoft-isa-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"microsoft-isa-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"the isa server denied the specified uniform resource locator\", \"the server denied the specified uniform resource locator (url). contact the server administrator\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\microsoft-isa-server.yaml\"}, {\"id\": \"microsoft-remote-web-workplace\", \"info\": {\"name\": \"microsoft-remote-web-workplace\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,microsoft-remote-web-workplace\", \"severity\": \"info\", \"metadata\": {\"product\": \"microsoft-remote-web-workplace\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"action=\\\"logon.aspx?\", \"content=\\\"copyright (c) microsoft corporation\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\microsoft-remote-web-workplace.yaml\"}, {\"id\": \"microsoft-sharepoint\", \"info\": {\"name\": \"microsoft-sharepoint\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,microsoft-sharepoint\", \"severity\": \"info\", \"metadata\": {\"product\": \"microsoft-sharepoint\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"microsoft sharepoint\", \"content=\\\"sharepoint team\", \"id=\\\"msowebpartpage_postbacksource\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\microsoft-sharepoint.yaml\"}, {\"id\": \"microsoft-silverlight\", \"info\": {\"name\": \"microsoft-silverlight\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,microsoft-silverlight\", \"severity\": \"info\", \"metadata\": {\"product\": \"microsoft-silverlight\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"get microsoft silverlight\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\microsoft-silverlight.yaml\"}, {\"id\": \"microsoft-skype-for-business\", \"info\": {\"name\": \"microsoft-skype-for-business\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,microsoft-skype-for-business\", \"severity\": \"info\", \"metadata\": {\"product\": \"microsoft-skype-for-business\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var reachclientproductname = \\\"skype for business web 应用\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\microsoft-skype-for-business.yaml\"}, {\"id\": \"mihalism-multi-host\", \"info\": {\"name\": \"mihalism-multi-host\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mihalism-multi-host\", \"severity\": \"info\", \"metadata\": {\"product\": \"mihalism-multi-host\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"mihalism multi host\", \"http://www.mihalism.com/product/mmh/\\\">mihalism multi host\", \"powered by mihalism multi host\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mihalism-multi-host.yaml\"}, {\"id\": \"mikrotik-httpproxy\", \"info\": {\"name\": \"mikrotik-httpproxy\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mikrotik-httpproxy\", \"severity\": \"info\", \"metadata\": {\"product\": \"mikrotik-httpproxy\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: mikrotik httpproxy\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mikrotik-httpproxy.yaml\"}, {\"id\": \"minergate-claymore-miner\", \"info\": {\"name\": \"minergate-claymore-miner\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,minergate-claymore-miner\", \"severity\": \"info\", \"metadata\": {\"product\": \"minergate-claymore-miner\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"eth: gpu0\", \"eth — total speed:\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\minergate-claymore-miner.yaml\"}, {\"id\": \"mingdekeji-system\", \"info\": {\"name\": \"mingdekeji-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mingdekeji-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"mingdekeji-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"imges/zgsh.ico\\\"\", \"荆州明德科技\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mingdekeji-system.yaml\"}, {\"id\": \"mingyuanyun-sales\", \"info\": {\"name\": \"mingyuanyun-sales\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mingyuanyun-sales\", \"severity\": \"info\", \"metadata\": {\"product\": \"mingyuanyun-sales\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<img id=\\\"erp\\\" src=\\\"/_imgs/login/zs_erp.png\", \"value=\\\"明源售楼管理系统v5.0\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mingyuanyun-sales.yaml\"}, {\"id\": \"mini-httpd\", \"info\": {\"name\": \"mini-httpd\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mini-httpd\", \"severity\": \"info\", \"metadata\": {\"product\": \"mini-httpd\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: mini_httpd\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mini-httpd.yaml\"}, {\"id\": \"minibb\", \"info\": {\"name\": \"minibb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,minibb\", \"severity\": \"info\", \"metadata\": {\"product\": \"minibb\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!--minibb copyright link\", \"powered by <a href=\\\"http://www.minibb.\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\minibb.yaml\"}, {\"id\": \"minio-browser\", \"info\": {\"name\": \"minio-browser\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,minio-browser\", \"severity\": \"info\", \"metadata\": {\"product\": \"minio-browser\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>minio browser</title>\", \"<title>minio console</title>\", \"href=\\\"/minio/loader.css\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\minio-browser.yaml\"}, {\"id\": \"mission-control-application-shield\", \"info\": {\"name\": \"mission-control-application-shield\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mission-control-application-shield\", \"severity\": \"info\", \"metadata\": {\"product\": \"mission-control-application-shield\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"alt=\\\"mission control application shield\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mission-control-application-shield.yaml\"}, {\"id\": \"mixcall-seat-management-center\", \"info\": {\"name\": \"mixcall-seat-management-center\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mixcall-seat-management-center\", \"severity\": \"info\", \"metadata\": {\"product\": \"mixcall-seat-management-center\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/admin/modules/admin/statics/images/\", \"深圳市深海捷科技有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mixcall-seat-management-center.yaml\"}, {\"id\": \"mjniohttpdaemon\", \"info\": {\"name\": \"mjniohttpdaemon\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mjniohttpdaemon\", \"severity\": \"info\", \"metadata\": {\"product\": \"mjniohttpdaemon\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: mjniohttpdaemon\", \"set-cookie: mjniohttpdsessionid\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mjniohttpdaemon.yaml\"}, {\"id\": \"mkey\", \"info\": {\"name\": \"mkey\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mkey\", \"severity\": \"info\", \"metadata\": {\"product\": \"mkey\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"北京数字天堂信息科技有限责任公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mkey.yaml\"}, {\"id\": \"mkportal\", \"info\": {\"name\": \"mkportal\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mkportal\", \"severity\": \"info\", \"metadata\": {\"product\": \"mkportal\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"mkportal\", \"target=\\\"_blank\\\">mkportal</a>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mkportal.yaml\"}, {\"id\": \"mlflow\", \"info\": {\"name\": \"mlflow\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mlflow\", \"severity\": \"info\", \"metadata\": {\"product\": \"mlflow\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>mlflow</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mlflow.yaml\"}, {\"id\": \"mobile-office-system\", \"info\": {\"name\": \"mobile-office-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mobile-office-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"mobile-office-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"window.location.href = '/ui/html/login.html';\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mobile-office-system.yaml\"}, {\"id\": \"mobileiron-mdm\", \"info\": {\"name\": \"mobileiron-mdm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mobileiron-mdm\", \"severity\": \"info\", \"metadata\": {\"product\": \"mobileiron-mdm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/whitelabel/mobileiron/img/favicon.ico\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mobileiron-mdm.yaml\"}, {\"id\": \"mobilityguard\", \"info\": {\"name\": \"mobilityguard\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mobilityguard\", \"severity\": \"info\", \"metadata\": {\"product\": \"mobilityguard\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"click here for more information about mobilityguard\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mobilityguard.yaml\"}, {\"id\": \"modlogan\", \"info\": {\"name\": \"modlogan\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,modlogan\", \"severity\": \"info\", \"metadata\": {\"product\": \"modlogan\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\">modlogan\", \"modlogan.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\modlogan.yaml\"}, {\"id\": \"modsecurity\", \"info\": {\"name\": \"modsecurity\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,modsecurity\", \"severity\": \"info\", \"metadata\": {\"product\": \"modsecurity\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"this error was generated by mod_security\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\modsecurity.yaml\"}, {\"id\": \"mojarra-jsf\", \"info\": {\"name\": \"mojarra-jsf\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mojarra-jsf\", \"severity\": \"info\", \"metadata\": {\"product\": \"mojarra-jsf\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<input type=\\\"hidden\\\" name=\\\"javax.faces.viewstate\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mojarra-jsf.yaml\"}, {\"id\": \"momeeting-movision\", \"info\": {\"name\": \"momeeting-movision\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,momeeting-movision\", \"severity\": \"info\", \"metadata\": {\"product\": \"momeeting-movision\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!-- 科达视讯云 摩云视讯 电信有区别 -->\", \"class=\\\"meeting movision\\\"\", \"document.title=\\\"登录-摩云视讯\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\momeeting-movision.yaml\"}, {\"id\": \"mongodb\", \"info\": {\"name\": \"mongodb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mongodb\", \"severity\": \"info\", \"metadata\": {\"product\": \"mongodb\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"it looks like you are trying to access mongodb over http on the native driver port.\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mongodb.yaml\"}, {\"id\": \"mongoexpress\", \"info\": {\"name\": \"mongoexpress\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mongoexpress\", \"severity\": \"info\", \"metadata\": {\"product\": \"mongoexpress\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"mongo express\", \"mongo-express-logo.png\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mongoexpress.yaml\"}, {\"id\": \"monitoring-center\", \"info\": {\"name\": \"monitoring-center\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,monitoring-center\", \"severity\": \"info\", \"metadata\": {\"product\": \"monitoring-center\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"鹰眼盒子监控中心\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\monitoring-center.yaml\"}, {\"id\": \"moosefs\", \"info\": {\"name\": \"moosefs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,moosefs\", \"severity\": \"info\", \"metadata\": {\"product\": \"moosefs\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"mfs.cgi\", \"under-goal files\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\moosefs.yaml\"}, {\"id\": \"movable-type\", \"info\": {\"name\": \"movable-type\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,movable-type\", \"severity\": \"info\", \"metadata\": {\"product\": \"movable-type\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"movable type\", \"movable type version\", \"rel=\\\"generator\\\">movable type\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\movable-type.yaml\"}, {\"id\": \"mrtg\", \"info\": {\"name\": \"mrtg\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mrtg\", \"severity\": \"info\", \"metadata\": {\"product\": \"mrtg\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/mrtg-l.png\", \"command line is easier to read using \\\"view page properties\\\" of your browser\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"href=\\\"http://oss.oetiker.ch/mrtg/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mrtg.yaml\"}, {\"id\": \"ms-mfc-httpsvr\", \"info\": {\"name\": \"ms-mfc-httpsvr\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ms-mfc-httpsvr\", \"severity\": \"info\", \"metadata\": {\"product\": \"ms-mfc-httpsvr\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"action=\\\"i.cgi\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ms-mfc-httpsvr.yaml\"}, {\"id\": \"mshift\", \"info\": {\"name\": \"mshift\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mshift\", \"severity\": \"info\", \"metadata\": {\"product\": \"mshift\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by mshift&reg\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mshift.yaml\"}, {\"id\": \"msvod-mediamanager\", \"info\": {\"name\": \"msvod-mediamanager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,msvod-mediamanager\", \"severity\": \"info\", \"metadata\": {\"product\": \"msvod-mediamanager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"$('.sign-btn').addclass(\\\"completion\\\");\", \"content=\\\"魅思cms\", \"static/js/meisicms.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\msvod-mediamanager.yaml\"}, {\"id\": \"mu-yun-webvpn\", \"info\": {\"name\": \"mu-yun-webvpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mu-yun-webvpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"mu-yun-webvpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=木云科技\", \"webvpn\", \"应用安全网关\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mu-yun-webvpn.yaml\"}, {\"id\": \"muhttpd\", \"info\": {\"name\": \"muhttpd\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,muhttpd\", \"severity\": \"info\", \"metadata\": {\"product\": \"muhttpd\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"e50cc7cc4f8d7f2346d901c35dee3a5f\"]}, {\"type\": \"word\", \"words\": [\"2017 arris enterprises, llc. all rights reserved.\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\muhttpd.yaml\"}, {\"id\": \"multiabnle-m18\", \"info\": {\"name\": \"multiabnle-m18\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,multiabnle-m18\", \"severity\": \"info\", \"metadata\": {\"product\": \"multiabnle-m18\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<label>打开m18 app， 扫描二维码</label>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\multiabnle-m18.yaml\"}, {\"id\": \"munin\", \"info\": {\"name\": \"munin\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,munin\", \"severity\": \"info\", \"metadata\": {\"product\": \"munin\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"auto-generated by munin\", \"munin-month.html\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\munin.yaml\"}, {\"id\": \"mvmmall\", \"info\": {\"name\": \"mvmmall\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mvmmall\", \"severity\": \"info\", \"metadata\": {\"product\": \"mvmmall\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"mvmmall\", \"content=\\\"www.mvmmall.cn\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mvmmall.yaml\"}, {\"id\": \"mylittleforum\", \"info\": {\"name\": \"mylittleforum\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mylittleforum\", \"severity\": \"info\", \"metadata\": {\"product\": \"mylittleforum\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"index.php?mode=js_defaults\", \"powered by my little forum\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mylittleforum.yaml\"}, {\"id\": \"myre-php\", \"info\": {\"name\": \"myre-php\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,myre-php\", \"severity\": \"info\", \"metadata\": {\"product\": \"myre-php\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!-- begin: menu footer don't change anything\", \"<b><u>my last viewed</u></b>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\myre-php.yaml\"}, {\"id\": \"myscada-hmi\", \"info\": {\"name\": \"myscada-hmi\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,myscada-hmi\", \"severity\": \"info\", \"metadata\": {\"product\": \"myscada-hmi\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"if(window.__myscadaversion)\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\myscada-hmi.yaml\"}, {\"id\": \"mysqlman\", \"info\": {\"name\": \"mysqlman\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mysqlman\", \"severity\": \"info\", \"metadata\": {\"product\": \"mysqlman\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"mysql.cgi?do=top_level_op\", \"size=\\\"1\\\">mysqlman\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mysqlman.yaml\"}, {\"id\": \"mywebftp\", \"info\": {\"name\": \"mywebftp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mywebftp\", \"severity\": \"info\", \"metadata\": {\"product\": \"mywebftp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\">mywebftp</a>\", \"href='mwftp/common/mwftp.css\", \"mwftp/common/mwftp.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mywebftp.yaml\"}, {\"id\": \"mywebsql\", \"info\": {\"name\": \"mywebsql\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mywebsql\", \"severity\": \"info\", \"metadata\": {\"product\": \"mywebsql\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"method=\\\"post\\\" action=\\\"\\\" name=\\\"dbform\\\" \", \"target=\\\"_blank\\\" href=\\\"http://mywebsql.net\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\mywebsql.yaml\"}, {\"id\": \"n2ws\", \"info\": {\"name\": \"n2ws\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,n2ws\", \"severity\": \"info\", \"metadata\": {\"product\": \"n2ws\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"static/style/cpm_style.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\n2ws.yaml\"}, {\"id\": \"nabble\", \"info\": {\"name\": \"nabble\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nabble\", \"severity\": \"info\", \"metadata\": {\"product\": \"nabble\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\">nabble</a>\", \"class=\\\"nabble\\\" id=\\\"nabble\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nabble.yaml\"}, {\"id\": \"nagios-xi\", \"info\": {\"name\": \"nagios-xi\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nagios-xi\", \"severity\": \"info\", \"metadata\": {\"product\": \"nagios-xi\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/nagiosxi/images/favicon.ico\", \"click the link below to get started using nagios xi.\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nagios-xi.yaml\"}, {\"id\": \"nalong-system\", \"info\": {\"name\": \"nalong-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nalong-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"nalong-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=\\\"ctl00_contentplaceholder1_txthospcode\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nalong-system.yaml\"}, {\"id\": \"namazu\", \"info\": {\"name\": \"namazu\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,namazu\", \"severity\": \"info\", \"metadata\": {\"product\": \"namazu\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"http://www.namazu.org/\\\">namazu\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\namazu.yaml\"}, {\"id\": \"natshell\", \"info\": {\"name\": \"natshell\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,natshell\", \"severity\": \"info\", \"metadata\": {\"product\": \"natshell\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h4>欢迎登录natshell</h4\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\natshell.yaml\"}, {\"id\": \"neo4j-browser\", \"info\": {\"name\": \"neo4j-browser\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,neo4j-browser\", \"severity\": \"info\", \"metadata\": {\"product\": \"neo4j-browser\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"neo4j://\", \"neo4j_edition\", \"neo4j_version\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\neo4j-browser.yaml\"}, {\"id\": \"nessus\", \"info\": {\"name\": \"nessus\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nessus\", \"severity\": \"info\", \"metadata\": {\"product\": \"nessus\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>nessus</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nessus.yaml\"}, {\"id\": \"net2ftp\", \"info\": {\"name\": \"net2ftp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,net2ftp\", \"severity\": \"info\", \"metadata\": {\"product\": \"net2ftp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!-- end of net2ftp login form\", \"<!-- net2ftp version\", \"content=\\\"net2ftp\", \"href=\\\"http://www.net2ftp.com\\\">net2ftp</a>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\net2ftp.yaml\"}, {\"id\": \"netapp-data-ontap\", \"info\": {\"name\": \"netapp-data-ontap\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netapp-data-ontap\", \"severity\": \"info\", \"metadata\": {\"product\": \"netapp-data-ontap\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: data ontap\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\netapp-data-ontap.yaml\"}, {\"id\": \"netapp-netcache-appliance\", \"info\": {\"name\": \"netapp-netcache-appliance\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netapp-netcache-appliance\", \"severity\": \"info\", \"metadata\": {\"product\": \"netapp-netcache-appliance\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: netcache appliance\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\netapp-netcache-appliance.yaml\"}, {\"id\": \"netartmedia-real-estate-portal\", \"info\": {\"name\": \"netartmedia-real-estate-portal\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netartmedia-real-estate-portal\", \"severity\": \"info\", \"metadata\": {\"product\": \"netartmedia-real-estate-portal\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by <a href=\\\"http://www.netartmedia.net/realestate\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\netartmedia-real-estate-portal.yaml\"}, {\"id\": \"netauth\", \"info\": {\"name\": \"netauth\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netauth\", \"severity\": \"info\", \"metadata\": {\"product\": \"netauth\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"onmouseover=\\\"mm_swapimage('image1','','image/loginok_after.gif',1)\\\"\", \"src=\\\"image/loginauthorize.png\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\netauth.yaml\"}, {\"id\": \"netbotz-network-monitoring-device\", \"info\": {\"name\": \"netbotz-network-monitoring-device\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netbotz-network-monitoring-device\", \"severity\": \"info\", \"metadata\": {\"product\": \"netbotz-network-monitoring-device\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/netbotz.css\", \"href=\\\"http://www.netbotz.com\\\" target\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\netbotz-network-monitoring-device.yaml\"}, {\"id\": \"netbox\", \"info\": {\"name\": \"netbox\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netbox\", \"severity\": \"info\", \"metadata\": {\"product\": \"netbox\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: netbox\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\netbox.yaml\"}, {\"id\": \"netcom-ngfw\", \"info\": {\"name\": \"netcom-ngfw\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netcom-ngfw\", \"severity\": \"info\", \"metadata\": {\"product\": \"netcom-ngfw\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>网康下一代防火墙</title>\", \"netentsec.css\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"9252bd07dbb6277f7ae898da87dada3a\"]}]}], \"_source_file\": \"00_unknown\\\\netcom-ngfw.yaml\"}, {\"id\": \"netcrm\", \"info\": {\"name\": \"netcrm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netcrm\", \"severity\": \"info\", \"metadata\": {\"product\": \"netcrm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"runecrm.ico\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\netcrm.yaml\"}, {\"id\": \"netdoit\", \"info\": {\"name\": \"netdoit\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netdoit\", \"severity\": \"info\", \"metadata\": {\"product\": \"netdoit\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"align=\\\"center\\\"><a href=\\\"http://www.net-doit.com\\\" target=\\\"_blank\", \"power by netdoit\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\netdoit.yaml\"}, {\"id\": \"netease-enterprise-mailbox\", \"info\": {\"name\": \"netease-enterprise-mailbox\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netease-enterprise-mailbox\", \"severity\": \"info\", \"metadata\": {\"product\": \"netease-enterprise-mailbox\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"网易企业邮箱\", \"src=\\\"http://mimg.qiye.163.com/\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"<span class=\\\"warn\\\">请您从网易企业邮箱用户登录页登录</span>\", \"frmvalidator\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\netease-enterprise-mailbox.yaml\"}, {\"id\": \"netflow-analyzer-zoho-traffic-management\", \"info\": {\"name\": \"netflow-analyzer-zoho-traffic-management\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"netflow-analyzer-zoho-traffic-management\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"netflow analyzer\", \"zoho\", \"href=\\\"/netflow/css/netflow.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\netflow-analyzer-zoho-traffic-management.yaml\"}, {\"id\": \"netmizer-log-management-system\", \"info\": {\"name\": \"netmizer-log-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netmizer-log-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"netmizer-log-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var mywindows = ext.create\", \"window.location.href=\\\"main.html\\\";\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\netmizer-log-management-system.yaml\"}, {\"id\": \"netpas-traffic-management-system\", \"info\": {\"name\": \"netpas-traffic-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netpas-traffic-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"netpas-traffic-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"版权所有 <a href=\\\"http://www.netpas.cc\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\netpas-traffic-management-system.yaml\"}, {\"id\": \"netpilot\", \"info\": {\"name\": \"netpilot\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netpilot\", \"severity\": \"info\", \"metadata\": {\"product\": \"netpilot\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/sys/images/tree.css\\\" title=\\\"netpilot\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\netpilot.yaml\"}, {\"id\": \"netport\", \"info\": {\"name\": \"netport\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netport\", \"severity\": \"info\", \"metadata\": {\"product\": \"netport\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: netport software\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\netport.yaml\"}, {\"id\": \"netposa-system\", \"info\": {\"name\": \"netposa-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netposa-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"netposa-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"netposa\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\netposa-system.yaml\"}, {\"id\": \"netpresenz\", \"info\": {\"name\": \"netpresenz\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netpresenz\", \"severity\": \"info\", \"metadata\": {\"product\": \"netpresenz\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: netpresenz\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\netpresenz.yaml\"}, {\"id\": \"netquery\", \"info\": {\"name\": \"netquery\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netquery\", \"severity\": \"info\", \"metadata\": {\"product\": \"netquery\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"action=\\\"nquser.php\", \"href=\\\"nqadmin.php\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\netquery.yaml\"}, {\"id\": \"netscape-fasttrack\", \"info\": {\"name\": \"netscape-fasttrack\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netscape-fasttrack\", \"severity\": \"info\", \"metadata\": {\"product\": \"netscape-fasttrack\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: netscape-fasttrack\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\netscape-fasttrack.yaml\"}, {\"id\": \"netscout-ngeniusone\", \"info\": {\"name\": \"netscout-ngeniusone\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netscout-ngeniusone\", \"severity\": \"info\", \"metadata\": {\"product\": \"netscout-ngeniusone\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var newpath = \\\"/common/ngeniusdirect.jsp\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\netscout-ngeniusone.yaml\"}, {\"id\": \"netshare-vpn\", \"info\": {\"name\": \"netshare-vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netshare-vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"netshare-vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"netshare\", \"vpn\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\netshare-vpn.yaml\"}, {\"id\": \"netsoft-eida\", \"info\": {\"name\": \"netsoft-eida\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netsoft-eida\", \"severity\": \"info\", \"metadata\": {\"product\": \"netsoft-eida\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/images/common/favicon.ico\\\"\", \"window.location.href = \\\"/appframe/login_v2/login.jsp\\\";\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\netsoft-eida.yaml\"}, {\"id\": \"nettalk-webserver\", \"info\": {\"name\": \"nettalk-webserver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nettalk-webserver\", \"severity\": \"info\", \"metadata\": {\"product\": \"nettalk-webserver\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: nettalk-webserver\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nettalk-webserver.yaml\"}, {\"id\": \"netwin-dbabble\", \"info\": {\"name\": \"netwin-dbabble\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netwin-dbabble\", \"severity\": \"info\", \"metadata\": {\"product\": \"netwin-dbabble\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/cgi/dbabble.cgi\", \">dbabble online help</a>\", \"action=\\\"/dbabble\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\netwin-dbabble.yaml\"}, {\"id\": \"netwin-surgemail\", \"info\": {\"name\": \"netwin-surgemail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netwin-surgemail\", \"severity\": \"info\", \"metadata\": {\"product\": \"netwin-surgemail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/about_mail.htm\\\">about surgemail\", \"surgemail welcome page\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\netwin-surgemail.yaml\"}, {\"id\": \"network-tracker\", \"info\": {\"name\": \"network-tracker\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,network-tracker\", \"severity\": \"info\", \"metadata\": {\"product\": \"network-tracker\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\">network tracker<\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\network-tracker.yaml\"}, {\"id\": \"networkresourcesauxiliaryplatform\", \"info\": {\"name\": \"networkresourcesauxiliaryplatform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,networkresourcesauxiliaryplatform\", \"severity\": \"info\", \"metadata\": {\"product\": \"networkresourcesauxiliaryplatform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<b>网络资源综合支撑辅助平台</b>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\networkresourcesauxiliaryplatform.yaml\"}, {\"id\": \"netzone-webcache\", \"info\": {\"name\": \"netzone-webcache\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netzone-webcache\", \"severity\": \"info\", \"metadata\": {\"product\": \"netzone-webcache\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"广州高度软件有限公司版权所有\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\netzone-webcache.yaml\"}, {\"id\": \"neusoft-neteye-bitsaver\", \"info\": {\"name\": \"neusoft-neteye-bitsaver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,neusoft-neteye-bitsaver\", \"severity\": \"info\", \"metadata\": {\"product\": \"neusoft-neteye-bitsaver\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"action=\\\"/ntars/loginaction.do\", \"href=\\\"/ntars/css/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\neusoft-neteye-bitsaver.yaml\"}, {\"id\": \"neusoft-neteye-fang-huo-qiang\", \"info\": {\"name\": \"neusoft-neteye防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,neusoft-neteye防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"neusoft-neteye防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"name=\\\"login_form\\\" action=\\\"/fwm4/fwm.cgi/usrlgin\\\" \", \"neteye防火墙系统\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\neusoft-neteye防火墙.yaml\"}, {\"id\": \"neusoft-senginx\", \"info\": {\"name\": \"neusoft-senginx\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,neusoft-senginx\", \"severity\": \"info\", \"metadata\": {\"product\": \"neusoft-senginx\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"senginx-robot-mitigation\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\neusoft-senginx.yaml\"}, {\"id\": \"neusoft-uniportal\", \"info\": {\"name\": \"neusoft-uniportal\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,neusoft-uniportal\", \"severity\": \"info\", \"metadata\": {\"product\": \"neusoft-uniportal\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ecdomain/unieap/ria/unieap/themes/earth/common/unieap.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\neusoft-uniportal.yaml\"}, {\"id\": \"new-rock-ip-pbx-management-system\", \"info\": {\"name\": \"new-rock-ip-pbx-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,new-rock-ip-pbx-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"new-rock-ip-pbx-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var data = formatparams(params.data)\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\new-rock-ip-pbx-management-system.yaml\"}, {\"id\": \"news\", \"info\": {\"name\": \"news\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,news\", \"severity\": \"info\", \"metadata\": {\"product\": \"news\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<img id=\\\"createcheckcode\\\" src=\\\"login/picturecheckcode\\\" name=\\\"check_code\\\" ng-click=\\\"reloadcheckcode()\", \"ng-disabled=\\\"!loginform.$valid\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\news.yaml\"}, {\"id\": \"newton\", \"info\": {\"name\": \"newton\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,newton\", \"severity\": \"info\", \"metadata\": {\"product\": \"newton\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"name=\\\"group_sn\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\newton.yaml\"}, {\"id\": \"nexpose-security-console\", \"info\": {\"name\": \"nexpose-security-console\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nexpose-security-console\", \"severity\": \"info\", \"metadata\": {\"product\": \"nexpose-security-console\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/nexpose-dark.min.css\", \"/nexpose-features.js\", \"nexposeccpassword\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nexpose-security-console.yaml\"}, {\"id\": \"nexpose\", \"info\": {\"name\": \"nexpose\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nexpose\", \"severity\": \"info\", \"metadata\": {\"product\": \"nexpose\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"f64ce96bbacc76d6db4d4eb0e78881da\"]}, {\"type\": \"word\", \"words\": [\"<label for=\\\"nexposeccusername\\\">username</label>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nexpose.yaml\"}, {\"id\": \"nextcloud-product\", \"info\": {\"name\": \"nextcloud-product\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nextcloud-product\", \"severity\": \"info\", \"metadata\": {\"product\": \"nextcloud-product\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"nextcloud</a> – 给您所有数据一个安全的家\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nextcloud-product.yaml\"}, {\"id\": \"nextjs\", \"info\": {\"name\": \"nextjs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nextjs\", \"severity\": \"info\", \"metadata\": {\"product\": \"nextjs\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<meta name=\\\"next-head-count\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"x-powered-by: next.js\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nextjs.yaml\"}, {\"id\": \"nexus-repository-manager\", \"info\": {\"name\": \"nexus-repository-manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nexus-repository-manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"nexus-repository-manager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\" nexus repository manager\", \"<title>nexus repository manager</title>\", \"progressmessage('initializing ...')\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nexus-repository-manager.yaml\"}, {\"id\": \"ngi-diam4\", \"info\": {\"name\": \"ngi-diam4\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ngi-diam4\", \"severity\": \"info\", \"metadata\": {\"product\": \"ngi-diam4\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/diam4/inc/lang/fr/lang.min.js\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ngi-diam4.yaml\"}, {\"id\": \"ngi-gxd5-pacs\", \"info\": {\"name\": \"ngi-gxd5-pacs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ngi-gxd5-pacs\", \"severity\": \"info\", \"metadata\": {\"product\": \"ngi-gxd5-pacs\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div id=\\\"passwordwrapper\\\" class=\\\"fieldwrapper\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ngi-gxd5-pacs.yaml\"}, {\"id\": \"nginx-webui\", \"info\": {\"name\": \"nginx-webui\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nginx-webui\", \"severity\": \"info\", \"metadata\": {\"product\": \"nginx-webui\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>nginxwebui</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nginx-webui.yaml\"}, {\"id\": \"nitc-cms\", \"info\": {\"name\": \"nitc-cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nitc-cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"nitc-cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/images/nitc1.png\", \"nitc web marketing service\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nitc-cms.yaml\"}, {\"id\": \"niushop\", \"info\": {\"name\": \"niushop\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,niushop\", \"severity\": \"info\", \"metadata\": {\"product\": \"niushop\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"4b320a972023a99c21bffa7267ba6546\"]}, {\"type\": \"word\", \"words\": [\"niushop\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\niushop.yaml\"}, {\"id\": \"nmap-log\", \"info\": {\"name\": \"nmap-log\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nmap-log\", \"severity\": \"info\", \"metadata\": {\"product\": \"nmap-log\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"interesting ports on\", \"starting nmap\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nmap-log.yaml\"}, {\"id\": \"normstar-hr\", \"info\": {\"name\": \"normstar-hr\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,normstar-hr\", \"severity\": \"info\", \"metadata\": {\"product\": \"normstar-hr\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"blackfont\\\">诺姆四达人力资源测评咨询服务有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\normstar-hr.yaml\"}, {\"id\": \"norton-cloud-connect\", \"info\": {\"name\": \"norton-cloud-connect\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,norton-cloud-connect\", \"severity\": \"info\", \"metadata\": {\"product\": \"norton-cloud-connect\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h2 style=\\\"margin-left: 0px;\\\">norton cloud connect</h2>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\norton-cloud-connect.yaml\"}, {\"id\": \"novell-groupwise\", \"info\": {\"name\": \"novell-groupwise\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,novell-groupwise\", \"severity\": \"info\", \"metadata\": {\"product\": \"novell-groupwise\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!-- start novell services\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"set-cookie: njscn=\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\novell-groupwise.yaml\"}, {\"id\": \"novell-netware\", \"info\": {\"name\": \"novell-netware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,novell-netware\", \"severity\": \"info\", \"metadata\": {\"product\": \"novell-netware\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"code=\\\"nwshealth.class\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"server: netware http stack\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\novell-netware.yaml\"}, {\"id\": \"novell-open-enterprise-server\", \"info\": {\"name\": \"novell-open-enterprise-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,novell-open-enterprise-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"novell-open-enterprise-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!-- this is all just a super-duper redirect to the welcome page\", \"href=\\\"http://www.novell.com/products/openenterpriseserver\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\novell-open-enterprise-server.yaml\"}, {\"id\": \"novell-sentinel-log-manager\", \"info\": {\"name\": \"novell-sentinel-log-manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,novell-sentinel-log-manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"novell-sentinel-log-manager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"0;url=/novelllogmanager\\\">\", \"title=\\\"novell sentinel log manager\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\novell-sentinel-log-manager.yaml\"}, {\"id\": \"novell-zenworks\", \"info\": {\"name\": \"novell-zenworks\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,novell-zenworks\", \"severity\": \"info\", \"metadata\": {\"product\": \"novell-zenworks\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/zenworks/js/dojo\", \"managementzonename\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\novell-zenworks.yaml\"}, {\"id\": \"novnc\", \"info\": {\"name\": \"novnc\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,novnc\", \"severity\": \"info\", \"metadata\": {\"product\": \"novnc\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=\\\"novnc-control-bar\", \"novnc example: simple\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\novnc.yaml\"}, {\"id\": \"nowayer-ftp\", \"info\": {\"name\": \"nowayer-ftp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nowayer-ftp\", \"severity\": \"info\", \"metadata\": {\"product\": \"nowayer-ftp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"nowayer\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nowayer-ftp.yaml\"}, {\"id\": \"npoint\", \"info\": {\"name\": \"npoint\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,npoint\", \"severity\": \"info\", \"metadata\": {\"product\": \"npoint\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/inc/usercode.asp?npoint=\", \"content=\\\"n点虚拟主机管理系统\", \"js/ajax_x.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\npoint.yaml\"}, {\"id\": \"nps\", \"info\": {\"name\": \"nps\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nps\", \"severity\": \"info\", \"metadata\": {\"product\": \"nps\", \"vendor\": \"nps_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ehang\", \"login\", \"nps\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nps.yaml\"}, {\"id\": \"nsfocus-bvs\", \"info\": {\"name\": \"nsfocus-bvs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nsfocus-bvs\", \"severity\": \"info\", \"metadata\": {\"product\": \"nsfocus-bvs\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/nsfocus_bvs.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nsfocus-bvs.yaml\"}, {\"id\": \"nsfocus-enterprise-security-center\", \"info\": {\"name\": \"nsfocus-enterprise-security-center\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nsfocus-enterprise-security-center\", \"severity\": \"info\", \"metadata\": {\"product\": \"nsfocus-enterprise-security-center\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/login_logo_espc_zh_cn.png\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nsfocus-enterprise-security-center.yaml\"}, {\"id\": \"nsfocus-sg-an-quan-wang-guan\", \"info\": {\"name\": \"nsfocus-sg安全网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nsfocus-sg安全网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"nsfocus-sg安全网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/login_logo_sg_zh_cn.png\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nsfocus-sg安全网关.yaml\"}, {\"id\": \"nsfocus-vpn\", \"info\": {\"name\": \"nsfocus-vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nsfocus-vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"nsfocus-vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/logo_login_nsfocus.png\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nsfocus-vpn.yaml\"}, {\"id\": \"nsfocus-xia-yi-dai-fang-huo-qiang\", \"info\": {\"name\": \"nsfocus-下一代防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nsfocus-下一代防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"nsfocus-下一代防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/login_logo_nf_zh_cn.png\", \"nsfocus nf\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nsfocus-下一代防火墙.yaml\"}, {\"id\": \"nsfocus-qi-ye-an-quan-zhong-xin\", \"info\": {\"name\": \"nsfocus-企业安全中心\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nsfocus-企业安全中心\", \"severity\": \"info\", \"metadata\": {\"product\": \"nsfocus-企业安全中心\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/login_logo_espc_zh_cn.png\", \"绿盟科技企业安全中心\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nsfocus-企业安全中心.yaml\"}, {\"id\": \"nsfocus-bao-lei-ji\", \"info\": {\"name\": \"nsfocus-堡垒机\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nsfocus-堡垒机\", \"severity\": \"info\", \"metadata\": {\"product\": \"nsfocus-堡垒机\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/login_logo_sas_h_zh_cn.png\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nsfocus-堡垒机.yaml\"}, {\"id\": \"nsfocus-wang-zhan-an-quan-jian-ce-xi-tong\", \"info\": {\"name\": \"nsfocus-网站安全监测系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nsfocus-网站安全监测系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"nsfocus-网站安全监测系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"nsfocus.png\", \"stylesheet/nsfocus\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nsfocus-网站安全监测系统.yaml\"}, {\"id\": \"nsoc-bigdata\", \"info\": {\"name\": \"nsoc-bigdata\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nsoc-bigdata\", \"severity\": \"info\", \"metadata\": {\"product\": \"nsoc-bigdata\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<b>nsoc云安全解决方案\", \"<h2>nsoc大数据分析系统</h2>\", \"src=\\\"/nfw/static/framework/images/views.png\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nsoc-bigdata.yaml\"}, {\"id\": \"nstc-software\", \"info\": {\"name\": \"nstc-software\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nstc-software\", \"severity\": \"info\", \"metadata\": {\"product\": \"nstc-software\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"skysz.fw.index.validatecodenew = \\\"/loginaction/validatecodenew.html\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nstc-software.yaml\"}, {\"id\": \"nstrong-itmaster\", \"info\": {\"name\": \"nstrong-itmaster\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nstrong-itmaster\", \"severity\": \"info\", \"metadata\": {\"product\": \"nstrong-itmaster\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"netstrong\", \"var base_path = '/stormweb';\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nstrong-itmaster.yaml\"}, {\"id\": \"ntop\", \"info\": {\"name\": \"ntop\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ntop\", \"severity\": \"info\", \"metadata\": {\"product\": \"ntop\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/css/ntopng.css\", \"global traffic statistics\", \"ntopmenuid\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ntop.yaml\"}, {\"id\": \"ntopng\", \"info\": {\"name\": \"ntopng\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ntopng\", \"severity\": \"info\", \"metadata\": {\"product\": \"ntopng\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=http://www.ntop.org><img src=\\\"/img/logo.png\\\"></a>\", \"<font color=lightgray>generated by ntopng\", \"href=\\\"/css/ntopng.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ntopng.yaml\"}, {\"id\": \"nuance-safecom\", \"info\": {\"name\": \"nuance-safecom\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nuance-safecom\", \"severity\": \"info\", \"metadata\": {\"product\": \"nuance-safecom\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"safecom mobile print\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nuance-safecom.yaml\"}, {\"id\": \"nucleus-cms\", \"info\": {\"name\": \"nucleus-cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nucleus-cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"nucleus-cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"nucleus_lf_name\", \"target=\\\"_blank\\\">nucleus cms\", \"title=\\\"nucleus\\\" href=\\\"http://nucleuscms.org/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nucleus-cms.yaml\"}, {\"id\": \"nuxtjs\", \"info\": {\"name\": \"nuxtjs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nuxtjs\", \"severity\": \"info\", \"metadata\": {\"product\": \"nuxtjs\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"__nuxt\", \"buildassetsdir\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nuxtjs.yaml\"}, {\"id\": \"nvidia-mellanox-mlnx-os\", \"info\": {\"name\": \"nvidia-mellanox-mlnx-os\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nvidia-mellanox-mlnx-os\", \"severity\": \"info\", \"metadata\": {\"product\": \"nvidia-mellanox-mlnx-os\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"'/admin/launch?script=\", \"/mlx-default.css\", \"<div style='display: none;' id=\\\"setstatusiconstatediv\\\"></div>\", \"url=/admin/launch?script=\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\nvidia-mellanox-mlnx-os.yaml\"}, {\"id\": \"obm\", \"info\": {\"name\": \"obm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,obm\", \"severity\": \"info\", \"metadata\": {\"product\": \"obm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"home_obm.png\\\" alt=\\\"obm\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\obm.yaml\"}, {\"id\": \"observium\", \"info\": {\"name\": \"observium\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,observium\", \"severity\": \"info\", \"metadata\": {\"product\": \"observium\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"images/observium-icon.png\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\observium.yaml\"}, {\"id\": \"oceansoft\", \"info\": {\"name\": \"oceansoft\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,oceansoft\", \"severity\": \"info\", \"metadata\": {\"product\": \"oceansoft\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"aspx/casecenter/acasecenter.aspx?pagetype=sxcx&casetype=sscs&casename=\", \"href=\\\"/e/action/listinfo/?\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/ocensoftcomm.js\", \"技术支持：<a href=\\\"http://www.oceansoft.com.cn/\\\">\", \"江苏欧索\", \"江苏欧索软件有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\oceansoft.yaml\"}, {\"id\": \"ocs-inventory-ng\", \"info\": {\"name\": \"ocs-inventory-ng\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ocs-inventory-ng\", \"severity\": \"info\", \"metadata\": {\"product\": \"ocs-inventory-ng\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"css/ocsreports.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ocs-inventory-ng.yaml\"}, {\"id\": \"ocss\", \"info\": {\"name\": \"ocss\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ocss\", \"severity\": \"info\", \"metadata\": {\"product\": \"ocss\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<option value=\\\"age_sys\\\">代理商内部员工</option>\", \"content=\\\"爱施德移动渠道管理系统\", \"爱施德 aisidi.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ocss.yaml\"}, {\"id\": \"octopussy\", \"info\": {\"name\": \"octopussy\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,octopussy\", \"severity\": \"info\", \"metadata\": {\"product\": \"octopussy\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"align=\\\"center\\\" >octopussy\", \"value=\\\"connect to octopussy\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\octopussy.yaml\"}, {\"id\": \"office-web-apps\", \"info\": {\"name\": \"office-web-apps\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,office-web-apps\", \"severity\": \"info\", \"metadata\": {\"product\": \"office-web-apps\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var generatedviewurlelementid\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\office-web-apps.yaml\"}, {\"id\": \"officeweb365\", \"info\": {\"name\": \"officeweb365\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"officeweb365\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"x-powered-by: officeweb365\"], \"part\": \"header\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"请输入furl参数\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\officeweb365.yaml\"}, {\"id\": \"olat\", \"info\": {\"name\": \"olat\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,olat\", \"severity\": \"info\", \"metadata\": {\"product\": \"olat\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"olat\", \"content=\\\"olat - online learning and training\", \"content=\\\"olat 是一个学习内容管理系统 (lcms).\", \"href=\\\"/olat/raw/\", \"o_info.uriprefix=\\\"/olat/dmz/\\\";\", \"title=\\\"homepage of open source lms olat\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\olat.yaml\"}, {\"id\": \"om-video-conferencing\", \"info\": {\"name\": \"om-video-conferencing\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,om-video-conferencing\", \"severity\": \"info\", \"metadata\": {\"product\": \"om-video-conferencing\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<p><a href=\\\"http://www.omeeting.com\\\" target='_blank'>powered by\", \"content=\\\"om视频会议\", \"onclick=\\\"gotomeeting('/gotomeeting.php\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\om-video-conferencing.yaml\"}, {\"id\": \"onekeyadmin\", \"info\": {\"name\": \"onekeyadmin\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"onekeyadmin\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"onekeyadmin\", \"/admin/css/onekey.min.cs\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"507fcbebf363f4327fcb49294a864c24\"]}]}], \"_source_file\": \"00_unknown\\\\onekeyadmin.yaml\"}, {\"id\": \"onethink\", \"info\": {\"name\": \"onethink\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,onethink\", \"severity\": \"info\", \"metadata\": {\"product\": \"onethink\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"onethink管理平台\", \"onethink.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\onethink.yaml\"}, {\"id\": \"online-grades\", \"info\": {\"name\": \"online-grades\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,online-grades\", \"severity\": \"info\", \"metadata\": {\"product\": \"online-grades\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"online grades\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\online-grades.yaml\"}, {\"id\": \"onminutes-crm\", \"info\": {\"name\": \"onminutes-crm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,onminutes-crm\", \"severity\": \"info\", \"metadata\": {\"product\": \"onminutes-crm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div class=\\\"extras\\\" id=\\\"password_extras\\\">\", \"crm\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\onminutes-crm.yaml\"}, {\"id\": \"open-admin-for-schools\", \"info\": {\"name\": \"open-admin-for-schools\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,open-admin-for-schools\", \"severity\": \"info\", \"metadata\": {\"product\": \"open-admin-for-schools\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"action=\\\"/cgi-bin/rptbirthday.pl\", \"open admin for schools\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\open-admin-for-schools.yaml\"}, {\"id\": \"open-blog\", \"info\": {\"name\": \"open-blog\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,open-blog\", \"severity\": \"info\", \"metadata\": {\"product\": \"open-blog\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"target=\\\"_blank\\\">open blog\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\open-blog.yaml\"}, {\"id\": \"open-edx\", \"info\": {\"name\": \"open-edx\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,open-edx\", \"severity\": \"info\", \"metadata\": {\"product\": \"open-edx\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"alt=\\\"powered by open edx\", \"class=\\\"footer-about-openedx\", \"id=\\\"footer-openedx\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\open-edx.yaml\"}, {\"id\": \"open-realty\", \"info\": {\"name\": \"open-realty\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,open-realty\", \"severity\": \"info\", \"metadata\": {\"product\": \"open-realty\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"open-realty\", \"href=\\\"http://www.open-realty.org\\\" title=\\\"powered by open-realty\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\open-realty.yaml\"}, {\"id\": \"open-source-ticket-request-system\", \"info\": {\"name\": \"open-source-ticket-request-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,open-source-ticket-request-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"open-source-ticket-request-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/otrs-web/images/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\open-source-ticket-request-system.yaml\"}, {\"id\": \"openam\", \"info\": {\"name\": \"openam\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,openam\", \"severity\": \"info\", \"metadata\": {\"product\": \"openam\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"action=\\\"/openam/ui/login\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\openam.yaml\"}, {\"id\": \"openconf\", \"info\": {\"name\": \"openconf\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,openconf\", \"severity\": \"info\", \"metadata\": {\"product\": \"openconf\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by <a href=\\\"http://www.openconf.org\", \"src=\\\"openconf.js?\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"set-cookie: openconf=\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\openconf.yaml\"}, {\"id\": \"opencti\", \"info\": {\"name\": \"opencti\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,opencti\", \"severity\": \"info\", \"metadata\": {\"product\": \"opencti\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"webpackjsonpopencti-front\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\opencti.yaml\"}, {\"id\": \"opendocman\", \"info\": {\"name\": \"opendocman\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,opendocman\", \"severity\": \"info\", \"metadata\": {\"product\": \"opendocman\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"target=\\\"_new\\\">opendocman\", \"welcome to opendocman\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\opendocman.yaml\"}, {\"id\": \"openfiler\", \"info\": {\"name\": \"openfiler\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,openfiler\", \"severity\": \"info\", \"metadata\": {\"product\": \"openfiler\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"</strong>openfiler nas/san appliance\", \"href=\\\"http://www.openfiler.com/\\\">openfiler\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\openfiler.yaml\"}, {\"id\": \"openfire\", \"info\": {\"name\": \"openfire\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,openfire\", \"severity\": \"info\", \"metadata\": {\"product\": \"openfire\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>openfire 管理界面</title>\", \"background: transparent url(images/login_logo.gif) no-repeat\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\openfire.yaml\"}, {\"id\": \"opengoss-wlan\", \"info\": {\"name\": \"opengoss-wlan\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,opengoss-wlan\", \"severity\": \"info\", \"metadata\": {\"product\": \"opengoss-wlan\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/stylesheets/themes/wifi2/ui.theme.css\", \"content=\\\"wlan综合网管系统\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\opengoss-wlan.yaml\"}, {\"id\": \"opennemas\", \"info\": {\"name\": \"opennemas\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,opennemas\", \"severity\": \"info\", \"metadata\": {\"product\": \"opennemas\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"opennemas \"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\opennemas.yaml\"}, {\"id\": \"opennewsletter\", \"info\": {\"name\": \"opennewsletter\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,opennewsletter\", \"severity\": \"info\", \"metadata\": {\"product\": \"opennewsletter\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"http://netmeans.net\\\">netmeans.net\", \"this software is based on the opennewsletter project\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\opennewsletter.yaml\"}, {\"id\": \"openrefine\", \"info\": {\"name\": \"openrefine\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"openrefine\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>openrefine</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\openrefine.yaml\"}, {\"id\": \"opsview-product\", \"info\": {\"name\": \"opsview-product\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,opsview-product\", \"severity\": \"info\", \"metadata\": {\"product\": \"opsview-product\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/images/opsview_logo_large.gif\", \"/images/opsviewcommunitylogo-large.png\", \"follow @opsview\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\opsview-product.yaml\"}, {\"id\": \"opt-webfieldassis\", \"info\": {\"name\": \"opt-webfieldassis\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,opt-webfieldassis\", \"severity\": \"info\", \"metadata\": {\"product\": \"opt-webfieldassis\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"javascript:__dopostback('lbanonymous','')\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\opt-webfieldassis.yaml\"}, {\"id\": \"optergy-product\", \"info\": {\"name\": \"optergy-product\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,optergy-product\", \"severity\": \"info\", \"metadata\": {\"product\": \"optergy-product\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/css/optergy.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\optergy-product.yaml\"}, {\"id\": \"opzoon-an-quan-wang-guan\", \"info\": {\"name\": \"opzoon-安全网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,opzoon-安全网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"opzoon-安全网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var opzoon_ver = document.getelementbyid(\\\"opzoon_version\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\opzoon-安全网关.yaml\"}, {\"id\": \"oracle-access-manager\", \"info\": {\"name\": \"oracle-access-manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,oracle-access-manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"oracle-access-manager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"footerversion\\\">oracle access manager version\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\oracle-access-manager.yaml\"}, {\"id\": \"oracle-adf-faces\", \"info\": {\"name\": \"oracle-adf-faces\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,oracle-adf-faces\", \"severity\": \"info\", \"metadata\": {\"product\": \"oracle-adf-faces\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!-- created by oracle adf faces\", \"content=\\\"oracle adf\", \"var _adfwindowopenerror\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\oracle-adf-faces.yaml\"}, {\"id\": \"oracle-application-server\", \"info\": {\"name\": \"oracle-application-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,oracle-application-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"oracle-application-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"mod_ose documentation\", \"mod_ssl web site\", \"oracle http server</font></font></b></h1>\", \"oracle jsp documentation\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\oracle-application-server.yaml\"}, {\"id\": \"oracle-commerce-cloud\", \"info\": {\"name\": \"oracle-commerce-cloud\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,oracle-commerce-cloud\", \"severity\": \"info\", \"metadata\": {\"product\": \"oracle-commerce-cloud\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=\\\"oracle-cc\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\oracle-commerce-cloud.yaml\"}, {\"id\": \"oracle-enterprise-performance-management-system\", \"info\": {\"name\": \"oracle-enterprise-performance-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,oracle-enterprise-performance-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"oracle-enterprise-performance-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"workspace/dynamichelp\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\oracle-enterprise-performance-management-system.yaml\"}, {\"id\": \"oracle-fusion-middleware\", \"info\": {\"name\": \"oracle-fusion-middleware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,oracle-fusion-middleware\", \"severity\": \"info\", \"metadata\": {\"product\": \"oracle-fusion-middleware\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"css/fmw_bottom_area.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\oracle-fusion-middleware.yaml\"}, {\"id\": \"oracle-opera\", \"info\": {\"name\": \"oracle-opera\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,oracle-opera\", \"severity\": \"info\", \"metadata\": {\"product\": \"oracle-opera\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"operalogin/welcome.do\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\oracle-opera.yaml\"}, {\"id\": \"oracle-primerva\", \"info\": {\"name\": \"oracle-primerva\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,oracle-primerva\", \"severity\": \"info\", \"metadata\": {\"product\": \"oracle-primerva\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"introareabuildid\", \"com.primavera.detectplugin.detectpluginapplet.class\", \"primavera systems, inc\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\oracle-primerva.yaml\"}, {\"id\": \"oracle-siebel-crm\", \"info\": {\"name\": \"oracle-siebel-crm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,oracle-siebel-crm\", \"severity\": \"info\", \"metadata\": {\"product\": \"oracle-siebel-crm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"onload=\\\"gotourl('start.swe?swecmd=start')\", \"ot='siebwebmainwindow'>\", \"scripting is used to manage data interactions between the siebel server/web server\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\oracle-siebel-crm.yaml\"}, {\"id\": \"oracle-webdb\", \"info\": {\"name\": \"oracle-webdb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,oracle-webdb\", \"severity\": \"info\", \"metadata\": {\"product\": \"oracle-webdb\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: oracle_webdb_listener\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\oracle-webdb.yaml\"}, {\"id\": \"oracle-weblogic\", \"info\": {\"name\": \"oracle-weblogic\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,oracle-weblogic\", \"severity\": \"info\", \"metadata\": {\"product\": \"oracle-weblogic\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/console/framework/skins/wlsconsole/images/login_weblogic_branding.png\", \"<i>hypertext transfer protocol -- http/1.1</i>\", \"error 403--\", \"error 404--not found\", \"hypertext transfer protocol\", \"oracle weblogic server\", \"weblogic\", \"welcome to weblogic application server\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\oracle-weblogic.yaml\"}, {\"id\": \"oracle-xdb\", \"info\": {\"name\": \"oracle-xdb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,oracle-xdb\", \"severity\": \"info\", \"metadata\": {\"product\": \"oracle-xdb\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: oracle xml db\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\oracle-xdb.yaml\"}, {\"id\": \"orangehrm\", \"info\": {\"name\": \"orangehrm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,orangehrm\", \"severity\": \"info\", \"metadata\": {\"product\": \"orangehrm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"http://www.orangehrm.com\\\" target=\", \"name=\\\"hdnusertimezoneoffset\", \"welcome to the orangehrm ver\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\orangehrm.yaml\"}, {\"id\": \"orderbook\", \"info\": {\"name\": \"orderbook\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,orderbook\", \"severity\": \"info\", \"metadata\": {\"product\": \"orderbook\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"getorderbook: function\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\orderbook.yaml\"}, {\"id\": \"ordermanagementsystem\", \"info\": {\"name\": \"ordermanagementsystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ordermanagementsystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"ordermanagementsystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"联系新订单系统开发同事进行修改。</div>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ordermanagementsystem.yaml\"}, {\"id\": \"orenosv\", \"info\": {\"name\": \"orenosv\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,orenosv\", \"severity\": \"info\", \"metadata\": {\"product\": \"orenosv\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: orenosv\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\orenosv.yaml\"}, {\"id\": \"oscshop\", \"info\": {\"name\": \"oscshop\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,oscshop\", \"severity\": \"info\", \"metadata\": {\"product\": \"oscshop\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"x-powered-by: oscshop\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\oscshop.yaml\"}, {\"id\": \"osirix-pixmeo\", \"info\": {\"name\": \"osirix-pixmeo\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,osirix-pixmeo\", \"severity\": \"info\", \"metadata\": {\"product\": \"osirix-pixmeo\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<span>radone pacs</span>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\osirix-pixmeo.yaml\"}, {\"id\": \"osirix-viewer\", \"info\": {\"name\": \"osirix-viewer\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,osirix-viewer\", \"severity\": \"info\", \"metadata\": {\"product\": \"osirix-viewer\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"service provided by <a href=\\\"https://www.osirix-viewer.com\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\osirix-viewer.yaml\"}, {\"id\": \"oss\", \"info\": {\"name\": \"oss\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,oss\", \"severity\": \"info\", \"metadata\": {\"product\": \"oss\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/uf/login/login.jsp\\\" >\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\oss.yaml\"}, {\"id\": \"ostd-cloud\", \"info\": {\"name\": \"ostd-cloud\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ostd-cloud\", \"severity\": \"info\", \"metadata\": {\"product\": \"ostd-cloud\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"sys-title-right\\\">智联云服务\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ostd-cloud.yaml\"}, {\"id\": \"ostec-firebox\", \"info\": {\"name\": \"ostec-firebox\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ostec-firebox\", \"severity\": \"info\", \"metadata\": {\"product\": \"ostec-firebox\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"background-image: url('/icones/fundo_firebox.png')\", \"http://colorzilla.com/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ostec-firebox.yaml\"}, {\"id\": \"oureman-eman\", \"info\": {\"name\": \"oureman-eman\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,oureman-eman\", \"severity\": \"info\", \"metadata\": {\"product\": \"oureman-eman\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<span i18n=\\\"1\\\">益模模具智能制造系统</span>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\oureman-eman.yaml\"}, {\"id\": \"outline\", \"info\": {\"name\": \"outline\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,outline\", \"severity\": \"info\", \"metadata\": {\"product\": \"outline\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>outline</title>\", \"title=\\\"outline\\\"/>\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\outline.yaml\"}, {\"id\": \"ovirt-virtualization\", \"info\": {\"name\": \"ovirt-virtualization\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ovirt-virtualization\", \"severity\": \"info\", \"metadata\": {\"product\": \"ovirt-virtualization\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"https://www.ovirt.org\\\" class=\\\"obrand_loginpagelogolink\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ovirt-virtualization.yaml\"}, {\"id\": \"owtware-iconn-end-user-calculation\", \"info\": {\"name\": \"owtware-iconn-end-user-calculation\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,owtware-iconn-end-user-calculation\", \"severity\": \"info\", \"metadata\": {\"product\": \"owtware-iconn-end-user-calculation\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/res/api/owvmapi.js?\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\owtware-iconn-end-user-calculation.yaml\"}, {\"id\": \"pageadmin\", \"info\": {\"name\": \"pageadmin\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pageadmin\", \"severity\": \"info\", \"metadata\": {\"product\": \"pageadmin\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/e/images/favicon.ico\", \"content=\\\"pageadmin cms\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pageadmin.yaml\"}, {\"id\": \"pagecookery-microblog\", \"info\": {\"name\": \"pagecookery-microblog\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pagecookery-microblog\", \"severity\": \"info\", \"metadata\": {\"product\": \"pagecookery-microblog\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by <a href=\\\"http://pagecookery.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pagecookery-microblog.yaml\"}, {\"id\": \"pageup-people\", \"info\": {\"name\": \"pageup-people\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pageup-people\", \"severity\": \"info\", \"metadata\": {\"product\": \"pageup-people\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"pageuplink\\\" href=\\\"http://www.pageuppeople.com\", \"powered by pageup people\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pageup-people.yaml\"}, {\"id\": \"paloalto-globalprotect\", \"info\": {\"name\": \"paloalto-globalprotect\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,paloalto-globalprotect\", \"severity\": \"info\", \"metadata\": {\"product\": \"paloalto-globalprotect\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"global-protect/login.esp\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\paloalto-globalprotect.yaml\"}, {\"id\": \"paloalto-networks-sso\", \"info\": {\"name\": \"paloalto-networks-sso\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,paloalto-networks-sso\", \"severity\": \"info\", \"metadata\": {\"product\": \"paloalto-networks-sso\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\" 2015 palo alto networks, inc. \"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\paloalto-networks-sso.yaml\"}, {\"id\": \"panabit-gateway\", \"info\": {\"name\": \"panabit-gateway\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,panabit-gateway\", \"severity\": \"info\", \"metadata\": {\"product\": \"panabit-gateway\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"forum.panabit.com\", \"pa_iptcode\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"maintain\", \"panalog\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"id=\\\"codeno\\\"\", \"日志系统\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\panabit-gateway.yaml\"}, {\"id\": \"panabit-ixcache\", \"info\": {\"name\": \"panabit-ixcache\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,panabit-ixcache\", \"severity\": \"info\", \"metadata\": {\"product\": \"panabit-ixcache\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>ixcache</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\panabit-ixcache.yaml\"}, {\"id\": \"panabit-panalog\", \"info\": {\"name\": \"panabit-panalog\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"panabit-panalog\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"forum.panabit.com\", \"pa_iptcode\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"maintain\", \"panalog\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"id=\\\"codeno\\\"\", \"日志系统\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\panabit-panalog.yaml\"}, {\"id\": \"panasonic-maintenance-utility\", \"info\": {\"name\": \"panasonic-maintenance-utility\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,panasonic-maintenance-utility\", \"severity\": \"info\", \"metadata\": {\"product\": \"panasonic-maintenance-utility\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"panasonic_logo.gif\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\panasonic-maintenance-utility.yaml\"}, {\"id\": \"pandora-fms\", \"info\": {\"name\": \"pandora-fms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pandora-fms\", \"severity\": \"info\", \"metadata\": {\"product\": \"pandora-fms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"title=\\\"pandora rss feed\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pandora-fms.yaml\"}, {\"id\": \"pansoft-financial-system\", \"info\": {\"name\": \"pansoft-financial-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pansoft-financial-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"pansoft-financial-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"pansoftplugins/multithreading/pancalc.js\", \"src=\\\"/login/img/loading.gif\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pansoft-financial-system.yaml\"}, {\"id\": \"pansoft-management-system\", \"info\": {\"name\": \"pansoft-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pansoft-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"pansoft-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"directlink = \\\"eafc.application\\\";\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pansoft-management-system.yaml\"}, {\"id\": \"parallels-plesk-panel\", \"info\": {\"name\": \"parallels-plesk-panel\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,parallels-plesk-panel\", \"severity\": \"info\", \"metadata\": {\"product\": \"parallels-plesk-panel\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<img src=\\\"./img/panel-logo.png\\\" alt=\\\"parallels plesk panel\\\"></a>\", \"parallels ip holdings gmbh\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\parallels-plesk-panel.yaml\"}, {\"id\": \"parature\", \"info\": {\"name\": \"parature\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,parature\", \"severity\": \"info\", \"metadata\": {\"product\": \"parature\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"redirectportalurl('/ics/support/custhandler.asp?\", \"src=\\\"kbfolder.asp?deptid=\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\parature.yaml\"}, {\"id\": \"paraview-uams\", \"info\": {\"name\": \"paraview-uams\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,paraview-uams\", \"severity\": \"info\", \"metadata\": {\"product\": \"paraview-uams\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!-- <title>派拉统一身份管理系统</title> -->\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\paraview-uams.yaml\"}, {\"id\": \"pbootcms\", \"info\": {\"name\": \"pbootcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pbootcms\", \"severity\": \"info\", \"metadata\": {\"product\": \"pbootcms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"set-cookie: pbootsystem=\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pbootcms.yaml\"}, {\"id\": \"pc4uploader\", \"info\": {\"name\": \"pc4uploader\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pc4uploader\", \"severity\": \"info\", \"metadata\": {\"product\": \"pc4uploader\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"pc4uploader <font color\", \"powered by pc4uploader\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pc4uploader.yaml\"}, {\"id\": \"pcextreme\", \"info\": {\"name\": \"pcextreme\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pcextreme\", \"severity\": \"info\", \"metadata\": {\"product\": \"pcextreme\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"deze server is eigendom van <a\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pcextreme.yaml\"}, {\"id\": \"pcitc-cameras-and-surveillance\", \"info\": {\"name\": \"pcitc-cameras-and-surveillance\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pcitc-cameras-and-surveillance\", \"severity\": \"info\", \"metadata\": {\"product\": \"pcitc-cameras-and-surveillance\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"images/slider/banner-gis.png\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pcitc-cameras-and-surveillance.yaml\"}, {\"id\": \"pcitc-file-management-system\", \"info\": {\"name\": \"pcitc-file-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pcitc-file-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"pcitc-file-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"js/scripts/common/easyui/jquery.easyui.min.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pcitc-file-management-system.yaml\"}, {\"id\": \"pcitc-lims\", \"info\": {\"name\": \"pcitc-lims\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pcitc-lims\", \"severity\": \"info\", \"metadata\": {\"product\": \"pcitc-lims\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/home/plug_in_download\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pcitc-lims.yaml\"}, {\"id\": \"pcitc-logistics-management-mystem\", \"info\": {\"name\": \"pcitc-logistics-management-mystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pcitc-logistics-management-mystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"pcitc-logistics-management-mystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\" href=\\\"/newimages/login/logo_icon.ico\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pcitc-logistics-management-mystem.yaml\"}, {\"id\": \"pcitc-management-platform\", \"info\": {\"name\": \"pcitc-management-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pcitc-management-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"pcitc-management-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"window.open(\\\"http://itmc.mmsh.sinopec.com/itgk/sysmgr/productregister/yunweiproregister.view\\\"); }  \"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pcitc-management-platform.yaml\"}, {\"id\": \"pcitc-remotesystem\", \"info\": {\"name\": \"pcitc-remotesystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pcitc-remotesystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"pcitc-remotesystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"f-loading-mask ui-widget ui-widget-content\\\"\", \"src=\\\"validatecode.aspx\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pcitc-remotesystem.yaml\"}, {\"id\": \"pcitc-sslvpn\", \"info\": {\"name\": \"pcitc-sslvpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pcitc-sslvpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"pcitc-sslvpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"new_style/placeholderfriend.js\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pcitc-sslvpn.yaml\"}, {\"id\": \"pcitc-system\", \"info\": {\"name\": \"pcitc-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pcitc-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"pcitc-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"动设备运行风险分析系统\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pcitc-system.yaml\"}, {\"id\": \"pcpin-chat\", \"info\": {\"name\": \"pcpin-chat\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pcpin-chat\", \"severity\": \"info\", \"metadata\": {\"product\": \"pcpin-chat\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"onclick=\\\"document.loginform.register.value=0; document.loginform.lostpassword.value=0\", \"title=\\\"powered by pcpin chat\", \"window.appname_='pcpin_chat'\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pcpin-chat.yaml\"}, {\"id\": \"pear-project\", \"info\": {\"name\": \"pear-project\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pear-project\", \"severity\": \"info\", \"metadata\": {\"product\": \"pear-project\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"4a912be52af99e4407d53651ccde64e6\"]}]}], \"_source_file\": \"00_unknown\\\\pear-project.yaml\"}, {\"id\": \"pear\", \"info\": {\"name\": \"pear\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pear\", \"severity\": \"info\", \"metadata\": {\"product\": \"pear\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"webbased pear package manager\", \"installed packages, channel pear\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pear.yaml\"}, {\"id\": \"pegarules\", \"info\": {\"name\": \"pegarules\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pegarules\", \"severity\": \"info\", \"metadata\": {\"product\": \"pegarules\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"images/pzpegaicon.ico\", \"unable to logon to the pegarules system\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pegarules.yaml\"}, {\"id\": \"peoplenet-ikey\", \"info\": {\"name\": \"peoplenet-ikey\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,peoplenet-ikey\", \"severity\": \"info\", \"metadata\": {\"product\": \"peoplenet-ikey\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"ikey,众人科技,ikey\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\peoplenet-ikey.yaml\"}, {\"id\": \"percona-xtradb-cluster\", \"info\": {\"name\": \"percona-xtradb-cluster\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,percona-xtradb-cluster\", \"severity\": \"info\", \"metadata\": {\"product\": \"percona-xtradb-cluster\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"percona xtradb cluster node\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\percona-xtradb-cluster.yaml\"}, {\"id\": \"pexip\", \"info\": {\"name\": \"pexip\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pexip\", \"severity\": \"info\", \"metadata\": {\"product\": \"pexip\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h2>pexip infinity</h2>\", \"<h2>会议平台</h2>\", \"pex-app\", \"pexip infinity\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pexip.yaml\"}, {\"id\": \"pg-real-estate-solution\", \"info\": {\"name\": \"pg-real-estate-solution\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pg-real-estate-solution\", \"severity\": \"info\", \"metadata\": {\"product\": \"pg-real-estate-solution\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\">pg real estate solution - real estate web site design\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pg-real-estate-solution.yaml\"}, {\"id\": \"pg-roomate-finder-solution\", \"info\": {\"name\": \"pg-roomate-finder-solution\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pg-roomate-finder-solution\", \"severity\": \"info\", \"metadata\": {\"product\": \"pg-roomate-finder-solution\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by <a href=\\\"http://www.realtysoft.pro\", \"powered by pg roomate finder solution\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pg-roomate-finder-solution.yaml\"}, {\"id\": \"pgadmin\", \"info\": {\"name\": \"pgadmin\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pgadmin\", \"severity\": \"info\", \"metadata\": {\"product\": \"pgadmin\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"pgadmin 客户端安装包\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pgadmin.yaml\"}, {\"id\": \"phabricator\", \"info\": {\"name\": \"phabricator\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phabricator\", \"severity\": \"info\", \"metadata\": {\"product\": \"phabricator\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"phabricator-application-launch-container\", \"res/phabricator\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phabricator.yaml\"}, {\"id\": \"phocas\", \"info\": {\"name\": \"phocas\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phocas\", \"severity\": \"info\", \"metadata\": {\"product\": \"phocas\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"https://www.phocassoftware.com\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phocas.yaml\"}, {\"id\": \"phonix-pacs\", \"info\": {\"name\": \"phonix-pacs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phonix-pacs\", \"severity\": \"info\", \"metadata\": {\"product\": \"phonix-pacs\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"/pacs/\\\"><img src=\\\"pacs/images/logo.svg\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phonix-pacs.yaml\"}, {\"id\": \"phorum\", \"info\": {\"name\": \"phorum\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phorum\", \"severity\": \"info\", \"metadata\": {\"product\": \"phorum\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by <a href=\\\"http://www.phorum.org\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phorum.yaml\"}, {\"id\": \"photopost-php\", \"info\": {\"name\": \"photopost-php\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,photopost-php\", \"severity\": \"info\", \"metadata\": {\"product\": \"photopost-php\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"http://www.photopost.com\\\">photopost\", \"src=\\\"adm-misc.php?admact=mainmenu\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\photopost-php.yaml\"}, {\"id\": \"photostore\", \"info\": {\"name\": \"photostore\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,photostore\", \"severity\": \"info\", \"metadata\": {\"product\": \"photostore\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by <a href=\\\"http://www.ktools.net/photostore/index.php\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\photostore.yaml\"}, {\"id\": \"php-cloud\", \"info\": {\"name\": \"php-cloud\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,php-cloud\", \"severity\": \"info\", \"metadata\": {\"product\": \"php-cloud\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"$(this).removeclass('dn'\", \"<div class=\\\"index_link_list_name\\\">\", \"phpyun\", \"yun_index.css\", \"yun_toplogin a.yun_more\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\php-cloud.yaml\"}, {\"id\": \"php-csl\", \"info\": {\"name\": \"php-csl\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,php-csl\", \"severity\": \"info\", \"metadata\": {\"product\": \"php-csl\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"php code snippet\", \"title=\\\"php-csl\\\">php-csl\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\php-csl.yaml\"}, {\"id\": \"php-layers\", \"info\": {\"name\": \"php-layers\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,php-layers\", \"severity\": \"info\", \"metadata\": {\"product\": \"php-layers\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!-- beginning of menu header - php layers menu\", \"<!-- end of menu header - php layers menu\", \"alt=\\\"powered by php layers menu\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\php-layers.yaml\"}, {\"id\": \"php-link-directory\", \"info\": {\"name\": \"php-link-directory\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,php-link-directory\", \"severity\": \"info\", \"metadata\": {\"product\": \"php-link-directory\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"php link directory\", \"powered by phplinkdirectory\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\php-link-directory.yaml\"}, {\"id\": \"php-server-monitor\", \"info\": {\"name\": \"php-server-monitor\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,php-server-monitor\", \"severity\": \"info\", \"metadata\": {\"product\": \"php-server-monitor\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by <a href=\\\"http://www.phpservermonitor.org/\", \"target=\\\"_blank\\\">php server monitor\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\php-server-monitor.yaml\"}, {\"id\": \"php-support-tickets\", \"info\": {\"name\": \"php-support-tickets\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,php-support-tickets\", \"severity\": \"info\", \"metadata\": {\"product\": \"php-support-tickets\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"triangle solutions ltd\", \"title=\\\"php support tickets\\\">php support tickets\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\php-support-tickets.yaml\"}, {\"id\": \"php-voting-system\", \"info\": {\"name\": \"php-voting-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,php-voting-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"php-voting-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"http://www.888072.com\", \"content=\\\"qq 7000719\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"content=\\\"http://www.vote123.cn\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\php-voting-system.yaml\"}, {\"id\": \"php168cms\", \"info\": {\"name\": \"php168cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,php168cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"php168cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var system = 'cms\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\php168cms.yaml\"}, {\"id\": \"phpatm\", \"info\": {\"name\": \"phpatm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpatm\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpatm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by php advanced transfer manager\", \"powered by phpatm\", \"src=\\\"viewer_bottom.php?file=\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phpatm.yaml\"}, {\"id\": \"phpbb\", \"info\": {\"name\": \"phpbb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpbb\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpbb\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"phpbb\", \"phpbb group\\\" />\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"http://www.longluntan.com/zh/phpbb/\", \"start quick hack - phpbb statistics mod\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"set-cookie: phpbb3_\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phpbb.yaml\"}, {\"id\": \"phpdealerlocator\", \"info\": {\"name\": \"phpdealerlocator\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpdealerlocator\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpdealerlocator\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"pythonselect\", \"for=\\\"dealer_radiuss_dealer_zip\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phpdealerlocator.yaml\"}, {\"id\": \"phpdenora\", \"info\": {\"name\": \"phpdenora\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpdenora\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpdenora\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"chat4all phpdenora\", \"powered by phpdenora\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"powered by <a href=\\\"http://denorastats.org/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phpdenora.yaml\"}, {\"id\": \"phpdisk\", \"info\": {\"name\": \"phpdisk\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpdisk\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpdisk\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"phpdisk\", \"powered by phpdisk\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phpdisk.yaml\"}, {\"id\": \"phpecms\", \"info\": {\"name\": \"phpecms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpecms\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpecms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/plus/laydate/laydate.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phpecms.yaml\"}, {\"id\": \"phpfox\", \"info\": {\"name\": \"phpfox\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpfox\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpfox\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by <a href=\\\"http://www.phpfox.com\", \"powered by phpfox\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phpfox.yaml\"}, {\"id\": \"phpfreechat\", \"info\": {\"name\": \"phpfreechat\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpfreechat\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpfreechat\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by phpfreechat\", \"src=\\\"http://www.phpfreechat.net/pub/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phpfreechat.yaml\"}, {\"id\": \"phpinfo\", \"info\": {\"name\": \"phpinfo\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpinfo\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpinfo\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>phpinfo\", \"virtual directory support\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phpinfo.yaml\"}, {\"id\": \"phpldapadmin\", \"info\": {\"name\": \"phpldapadmin\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpldapadmin\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpldapadmin\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"http://phpldapadmin.sourceforge.net/documentation\\\" onclick\", \"src=\\\"images/default/logo.png\\\" title=\\\"phpldapadmin logo\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phpldapadmin.yaml\"}, {\"id\": \"phplist-you-jian-xi-tong\", \"info\": {\"name\": \"phplist-邮件系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phplist-邮件系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"phplist-邮件系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"michiel dethmers - http://www.phplist.com\", \"content=\\\"phplist version\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phplist-邮件系统.yaml\"}, {\"id\": \"phplist\", \"info\": {\"name\": \"phplist\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phplist\", \"severity\": \"info\", \"metadata\": {\"product\": \"phplist\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"&copy; <a href=\\\"http://phplist.com\\\" target\", \"content=\\\"michiel dethmers - http://www.phplist.com\", \"content=\\\"phplist version\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phplist.yaml\"}, {\"id\": \"phpmoneybooks\", \"info\": {\"name\": \"phpmoneybooks\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpmoneybooks\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpmoneybooks\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href='http://phpmoneybooks.com'>phpmoneybooks\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phpmoneybooks.yaml\"}, {\"id\": \"phpmps\", \"info\": {\"name\": \"phpmps\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpmps\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpmps\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by phpmps\", \"templates/phpmps/style/index.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phpmps.yaml\"}, {\"id\": \"phpmybackuppro\", \"info\": {\"name\": \"phpmybackuppro\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpmybackuppro\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpmybackuppro\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"please login (use your mysql username and password): <a href=\\\"index.php?login=true\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phpmybackuppro.yaml\"}, {\"id\": \"phpmybible\", \"info\": {\"name\": \"phpmybible\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpmybible\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpmybible\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div class='chaphead'>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phpmybible.yaml\"}, {\"id\": \"phpmyrealty\", \"info\": {\"name\": \"phpmyrealty\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpmyrealty\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpmyrealty\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!-- main content table : stop -->\", \"powered by <a href=\\\"http://www.phpmyrealty.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phpmyrealty.yaml\"}, {\"id\": \"phpmywind\", \"info\": {\"name\": \"phpmywind\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpmywind\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpmywind\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"phpmywind\", \"phpmywind.com all rights reserved\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phpmywind.yaml\"}, {\"id\": \"phpnow\", \"info\": {\"name\": \"phpnow\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpnow\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpnow\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"by <a href=\\\"http://phpnow.org\\\">phpnow.org\", \"content=\\\"yinzcn@gmail.com\", \"href=\\\"http://phpnow.org/go.php?id=1005\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phpnow.yaml\"}, {\"id\": \"phpoa\", \"info\": {\"name\": \"phpoa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpoa\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpoa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"admin_img/msg_bg.png\", \"url(template/default/images/admin_img/msg.png)\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phpoa.yaml\"}, {\"id\": \"phpopenchat\", \"info\": {\"name\": \"phpopenchat\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpopenchat\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpopenchat\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"phpopenchat installation\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phpopenchat.yaml\"}, {\"id\": \"phpremoteview\", \"info\": {\"name\": \"phpremoteview\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpremoteview\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpremoteview\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"style='font: 8pt verdana'>phpremoteview\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phpremoteview.yaml\"}, {\"id\": \"phpstudy\", \"info\": {\"name\": \"phpstudy\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpstudy\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpstudy\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"406165e1c4ec82ac49847ca8e7810bae\"]}, {\"type\": \"word\", \"words\": [\"<title>404 错误 - phpstudy</title>\", \"<title>phpstudy 探针 2\", \"<title>站点创建成功-phpstudy for\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"server: xpserver\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phpstudy.yaml\"}, {\"id\": \"phpsysinfo\", \"info\": {\"name\": \"phpsysinfo\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpsysinfo\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpsysinfo\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/templates/phpsysinfo.css\", \"content=\\\"phpsysinfo\", \"href=\\\"http://phpsysinfo.sourceforge.net/\\\">phpsysinfo\", \"var stargeturl = \\\"index.php?disp=dynamic\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phpsysinfo.yaml\"}, {\"id\": \"phpweb\", \"info\": {\"name\": \"phpweb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpweb\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpweb\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"pdv_pagename\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phpweb.yaml\"}, {\"id\": \"phpwiki\", \"info\": {\"name\": \"phpwiki\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpwiki\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpwiki\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by phpwiki\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phpwiki.yaml\"}, {\"id\": \"phxeventmanager\", \"info\": {\"name\": \"phxeventmanager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phxeventmanager\", \"severity\": \"info\", \"metadata\": {\"product\": \"phxeventmanager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<td><div class=\\\"minicalmonth\", \"powered by phxeventmanager\", \"src=\\\"pem-includes/xajax/xajax_js/xajax_core.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\phxeventmanager.yaml\"}, {\"id\": \"piaoyou-erp\", \"info\": {\"name\": \"piaoyou-erp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,piaoyou-erp\", \"severity\": \"info\", \"metadata\": {\"product\": \"piaoyou-erp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ajax/confirm.ashx\", \"css/sexybuttons.css\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\piaoyou-erp.yaml\"}, {\"id\": \"piaware-skyview\", \"info\": {\"name\": \"piaware-skyview\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,piaware-skyview\", \"severity\": \"info\", \"metadata\": {\"product\": \"piaware-skyview\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"alt=\\\"piaware skyview\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\piaware-skyview.yaml\"}, {\"id\": \"pigcms\", \"info\": {\"name\": \"pigcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pigcms\", \"severity\": \"info\", \"metadata\": {\"product\": \"pigcms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"x-powered-by: pigcms.com\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pigcms.yaml\"}, {\"id\": \"pillar-axiom-software\", \"info\": {\"name\": \"pillar-axiom-software\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pillar-axiom-software\", \"severity\": \"info\", \"metadata\": {\"product\": \"pillar-axiom-software\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"axiom storage services manager\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pillar-axiom-software.yaml\"}, {\"id\": \"pineapp\", \"info\": {\"name\": \"pineapp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pineapp\", \"severity\": \"info\", \"metadata\": {\"product\": \"pineapp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/admin/css/images/pineapp.ico\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pineapp.yaml\"}, {\"id\": \"pinpoint\", \"info\": {\"name\": \"pinpoint\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pinpoint\", \"severity\": \"info\", \"metadata\": {\"product\": \"pinpoint\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<body id=\\\"pinpoint\\\">\", \"<title>pinpoint</title>\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pinpoint.yaml\"}, {\"id\": \"pivot\", \"info\": {\"name\": \"pivot\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pivot\", \"severity\": \"info\", \"metadata\": {\"product\": \"pivot\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"http://www.pivotlog.net/?ver=pivot\", \"powered bypivot\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pivot.yaml\"}, {\"id\": \"pivotal-crm\", \"info\": {\"name\": \"pivotal-crm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pivotal-crm\", \"severity\": \"info\", \"metadata\": {\"product\": \"pivotal-crm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<frame name=\\\"hidden\\\" src=\\\"xmlloader.asp?type=portal\", \"title=\\\"hidden\\\" src=\\\"xmlloader.asp?type=portal\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pivotal-crm.yaml\"}, {\"id\": \"pivotx\", \"info\": {\"name\": \"pivotx\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pivotx\", \"severity\": \"info\", \"metadata\": {\"product\": \"pivotx\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"pivotx\", \"src=\\\"includes/js/pivotx.js\", \"templates_internal/assets/pivotx.png\\\" alt=\\\"pivotx\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pivotx.yaml\"}, {\"id\": \"pixelpost\", \"info\": {\"name\": \"pixelpost\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pixelpost\", \"severity\": \"info\", \"metadata\": {\"product\": \"pixelpost\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by <a href=\\\"http://www.pixelpost.org\", \"title=\\\"pixelpost - \", \"title=\\\"powered by pixelpost\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pixelpost.yaml\"}, {\"id\": \"pixeon-pacs\", \"info\": {\"name\": \"pixeon-pacs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pixeon-pacs\", \"severity\": \"info\", \"metadata\": {\"product\": \"pixeon-pacs\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<span class=\\\"apptitle\\\" id=\\\"apppixviewer\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pixeon-pacs.yaml\"}, {\"id\": \"pldsec-tong-yi-an-quan-guan-li-he-zong-he-shen-ji-xi-tong\", \"info\": {\"name\": \"pldsec-统一安全管理和综合审计系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pldsec-统一安全管理和综合审计系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"pldsec-统一安全管理和综合审计系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"module/image/pldsec.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pldsec-统一安全管理和综合审计系统.yaml\"}, {\"id\": \"plesk-plesk-onyx\", \"info\": {\"name\": \"plesk-plesk-onyx\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,plesk-plesk-onyx\", \"severity\": \"info\", \"metadata\": {\"product\": \"plesk-plesk-onyx\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"name=\\\"plesk-build\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\plesk-plesk-onyx.yaml\"}, {\"id\": \"pmway-e4\", \"info\": {\"name\": \"pmway-e4\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pmway-e4\", \"severity\": \"info\", \"metadata\": {\"product\": \"pmway-e4\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"热情似火</option>\", \"风<span style=\\\"padding-left: 12px;\\\"></span>格\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pmway-e4.yaml\"}, {\"id\": \"pmway-e5\", \"info\": {\"name\": \"pmway-e5\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pmway-e5\", \"severity\": \"info\", \"metadata\": {\"product\": \"pmway-e5\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"tip_browsertoolow:\\\"您当前使用的浏览器版本或模式太低，鹏为e5为了您更好的体验，请升级您的ie版本至8.0或以上。\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pmway-e5.yaml\"}, {\"id\": \"pmwiki\", \"info\": {\"name\": \"pmwiki\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pmwiki\", \"severity\": \"info\", \"metadata\": {\"product\": \"pmwiki\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://www.pmwiki.org/\\\" target=\", \"<span class='commentout-pmwikiorg'>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pmwiki.yaml\"}, {\"id\": \"policyretriever\", \"info\": {\"name\": \"policyretriever\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,policyretriever\", \"severity\": \"info\", \"metadata\": {\"product\": \"policyretriever\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"heading1\\\">policyretriever service</p>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\policyretriever.yaml\"}, {\"id\": \"pollutionsourcemonitoringdataexchangeplatform\", \"info\": {\"name\": \"pollutionsourcemonitoringdataexchangeplatform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pollutionsourcemonitoringdataexchangeplatform\", \"severity\": \"info\", \"metadata\": {\"product\": \"pollutionsourcemonitoringdataexchangeplatform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"window.location.href = '/syncmodule/synchome/index';\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pollutionsourcemonitoringdataexchangeplatform.yaml\"}, {\"id\": \"polycom-ippbx\", \"info\": {\"name\": \"polycom-ippbx\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,polycom-ippbx\", \"severity\": \"info\", \"metadata\": {\"product\": \"polycom-ippbx\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"cgi-bin/httptohttps.cgi\\\"\", \"src=\\\"cgi-bin/ippbx.cgi?module=showlogin\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\polycom-ippbx.yaml\"}, {\"id\": \"polycom-rss-record\", \"info\": {\"name\": \"polycom-rss-record\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,polycom-rss-record\", \"severity\": \"info\", \"metadata\": {\"product\": \"polycom-rss-record\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"window.location.replace(\\\"/rss/\\\")\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\polycom-rss-record.yaml\"}, {\"id\": \"pommo\", \"info\": {\"name\": \"pommo\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pommo\", \"severity\": \"info\", \"metadata\": {\"product\": \"pommo\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"pommo.confirmmsg = \", \"powered by <a href=\\\"http://www.pommo.org/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pommo.yaml\"}, {\"id\": \"posterous\", \"info\": {\"name\": \"posterous\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,posterous\", \"severity\": \"info\", \"metadata\": {\"product\": \"posterous\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"posterous_site_data\", \"content=\\\"posterous\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\posterous.yaml\"}, {\"id\": \"posun-sales\", \"info\": {\"name\": \"posun-sales\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,posun-sales\", \"severity\": \"info\", \"metadata\": {\"product\": \"posun-sales\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<p>快易销公众号</p>\", \"src=\\\"/view/static/js/eidpcommon.min.js\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\posun-sales.yaml\"}, {\"id\": \"power-cpms\", \"info\": {\"name\": \"power-cpms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,power-cpms\", \"severity\": \"info\", \"metadata\": {\"product\": \"power-cpms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"post(\\\"/ssosaml/saml2signonhandler.ashx\\\")\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\power-cpms.yaml\"}, {\"id\": \"power-powerpms\", \"info\": {\"name\": \"power-powerpms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,power-powerpms\", \"severity\": \"info\", \"metadata\": {\"product\": \"power-powerpms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/app_themes/default/assets/css/style.min.css\", \"/scripts/boot.js\", \"apphub.server.registertohub(qrcodeid)\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\power-powerpms.yaml\"}, {\"id\": \"poweralert\", \"info\": {\"name\": \"poweralert\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,poweralert\", \"severity\": \"info\", \"metadata\": {\"product\": \"poweralert\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: poweralert http server\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\poweralert.yaml\"}, {\"id\": \"powercreator-cms\", \"info\": {\"name\": \"powercreator-cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,powercreator-cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"powercreator-cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<span class=\\\"bottom_versionno\\\">\", \"email:support@powercreator.com.cn<br />\", \"powercreator \"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\powercreator-cms.yaml\"}, {\"id\": \"powermta\", \"info\": {\"name\": \"powermta\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,powermta\", \"severity\": \"info\", \"metadata\": {\"product\": \"powermta\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<html><body>access denied.  please consult the http-access directive in the user's guide for more information.</body>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\powermta.yaml\"}, {\"id\": \"powerweb\", \"info\": {\"name\": \"powerweb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,powerweb\", \"severity\": \"info\", \"metadata\": {\"product\": \"powerweb\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: powerweb\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\powerweb.yaml\"}, {\"id\": \"ppvod-videosystem\", \"info\": {\"name\": \"ppvod-videosystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ppvod-videosystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"ppvod-videosystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ppvod copyright\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ppvod-videosystem.yaml\"}, {\"id\": \"preamsolutions-inspection-and-modification-information-platform\", \"info\": {\"name\": \"preamsolutions-inspection-and-modification-information-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,preamsolutions-inspection-and-modification-information-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"preamsolutions-inspection-and-modification-information-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"action=\\\"/gqjx/loginmgr.do?method=dologin\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\preamsolutions-inspection-and-modification-information-platform.yaml\"}, {\"id\": \"pritlog\", \"info\": {\"name\": \"pritlog\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pritlog\", \"severity\": \"info\", \"metadata\": {\"product\": \"pritlog\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<em id=\\\"jserror\\\">please enable javascript for full functionality\", \"powered by <a href=\\\"http://pritlog.com/\\\">pritlog\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pritlog.yaml\"}, {\"id\": \"pro-chat-rooms\", \"info\": {\"name\": \"pro-chat-rooms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pro-chat-rooms\", \"severity\": \"info\", \"metadata\": {\"product\": \"pro-chat-rooms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"border=\\\"0\\\" alt=\\\"pro chat rooms\", \"href='http://prochatrooms.com'>pro chat rooms</a>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pro-chat-rooms.yaml\"}, {\"id\": \"processmaker\", \"info\": {\"name\": \"processmaker\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,processmaker\", \"severity\": \"info\", \"metadata\": {\"product\": \"processmaker\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"alt=\\\"powered by processmaker\", \"href=\\\"http://www.processmaker.com\\\" alt=\\\"processmaker\", \"processmaker ver\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\processmaker.yaml\"}, {\"id\": \"profense-firewall\", \"info\": {\"name\": \"profense-firewall\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,profense-firewall\", \"severity\": \"info\", \"metadata\": {\"product\": \"profense-firewall\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: profense\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\profense-firewall.yaml\"}, {\"id\": \"project-management-system\", \"info\": {\"name\": \"project-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,project-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"project-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var right = regexp.rightcontext\", \"window.top.location = \\\"login.aspx?url=\\\" + right\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\project-management-system.yaml\"}, {\"id\": \"promail\", \"info\": {\"name\": \"promail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,promail\", \"severity\": \"info\", \"metadata\": {\"product\": \"promail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by squirrelmail.org. squirrelmail\", \"promail &trade; - login\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\promail.yaml\"}, {\"id\": \"promise-webpam\", \"info\": {\"name\": \"promise-webpam\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,promise-webpam\", \"severity\": \"info\", \"metadata\": {\"product\": \"promise-webpam\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"js/promise/themes/apple/images/logo_promise.png\", \"src=\\\"js/dojo/promise.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\promise-webpam.yaml\"}, {\"id\": \"promisec-system\", \"info\": {\"name\": \"promisec-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,promisec-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"promisec-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"name=\\\"promisecactivex\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\promisec-system.yaml\"}, {\"id\": \"proscan\", \"info\": {\"name\": \"proscan\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,proscan\", \"severity\": \"info\", \"metadata\": {\"product\": \"proscan\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: proscan\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\proscan.yaml\"}, {\"id\": \"proxmox-ve\", \"info\": {\"name\": \"proxmox-ve\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,proxmox-ve\", \"severity\": \"info\", \"metadata\": {\"product\": \"proxmox-ve\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"boxheadline\\\">proxmox virtual environment\", \"ext.create('pve.stdworkspace')\", \"href='http://www.proxmox.com' target='_blank' class=\\\"boxheadline\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\proxmox-ve.yaml\"}, {\"id\": \"public-security-checkpoint-document-verification-system\", \"info\": {\"name\": \"public-security-checkpoint-document-verification-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,public-security-checkpoint-document-verification-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"public-security-checkpoint-document-verification-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"公安检查站人脸/证件合一核录系统\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\public-security-checkpoint-document-verification-system.yaml\"}, {\"id\": \"publicopinionmonitoringsystem\", \"info\": {\"name\": \"publicopinionmonitoringsystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,publicopinionmonitoringsystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"publicopinionmonitoringsystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/mpoweb/a/login\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\publicopinionmonitoringsystem.yaml\"}, {\"id\": \"pulsesecure-ssl-vpn\", \"info\": {\"name\": \"pulsesecure-ssl-vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pulsesecure-ssl-vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"pulsesecure-ssl-vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<b>pulse connect secure</b>\", \"<title>pulse connect secure</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pulsesecure-ssl-vpn.yaml\"}, {\"id\": \"puridiom\", \"info\": {\"name\": \"puridiom\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,puridiom\", \"severity\": \"info\", \"metadata\": {\"product\": \"puridiom\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"/puridiom/system/header.jsp\", \"src=\\\"/puridiom/system/processing.jsp\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\puridiom.yaml\"}, {\"id\": \"pygopherd\", \"info\": {\"name\": \"pygopherd\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pygopherd\", \"severity\": \"info\", \"metadata\": {\"product\": \"pygopherd\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"generated by <a href=\\\"http://www.quux.org/devel/gopher/pygopherd\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pygopherd.yaml\"}, {\"id\": \"pypiserver\", \"info\": {\"name\": \"pypiserver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pypiserver\", \"severity\": \"info\", \"metadata\": {\"product\": \"pypiserver\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>welcome to pypiserver!</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pypiserver.yaml\"}, {\"id\": \"pyspider\", \"info\": {\"name\": \"pyspider\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pyspider\", \"severity\": \"info\", \"metadata\": {\"product\": \"pyspider\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"pyspider dashboard\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\pyspider.yaml\"}, {\"id\": \"qax-secfox\", \"info\": {\"name\": \"qax-secfox\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,qax-secfox\", \"severity\": \"info\", \"metadata\": {\"product\": \"qax-secfox\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=mtokenplugin width=0 height=0 style=\\\"position: absolute;left: 0px; top: 0px\\\"\", \"type=application/x-xtx-axhost\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"f3147f50cfd23455cb5fdf0dcd890dac\"]}]}], \"_source_file\": \"00_unknown\\\\qax-secfox.yaml\"}, {\"id\": \"qax-useso\", \"info\": {\"name\": \"qax-useso\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,qax-useso\", \"severity\": \"info\", \"metadata\": {\"product\": \"qax-useso\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"libs.useso.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\qax-useso.yaml\"}, {\"id\": \"qcodo-development-framework\", \"info\": {\"name\": \"qcodo-development-framework\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,qcodo-development-framework\", \"severity\": \"info\", \"metadata\": {\"product\": \"qcodo-development-framework\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<b>qcodo version:\", \"zend engine version:</b>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\qcodo-development-framework.yaml\"}, {\"id\": \"qcubed-development-framework\", \"info\": {\"name\": \"qcubed-development-framework\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,qcubed-development-framework\", \"severity\": \"info\", \"metadata\": {\"product\": \"qcubed-development-framework\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<b>qcubed version:</b>\", \"<div id=\\\"codeversion\\\">qcubed development framework\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\qcubed-development-framework.yaml\"}, {\"id\": \"qianxin-analytics\", \"info\": {\"name\": \"qianxin-analytics\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,qianxin-analytics\", \"severity\": \"info\", \"metadata\": {\"product\": \"qianxin-analytics\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/static/build/animate_nprogress_timepiacker_tooltipster.min.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\qianxin-analytics.yaml\"}, {\"id\": \"qianxing-oa\", \"info\": {\"name\": \"qianxing-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,qianxing-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"qianxing-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"count/mystat.asp\", \"input name=\\\"s1\\\" type=\\\"image\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\qianxing-oa.yaml\"}, {\"id\": \"qibosoft-microsite\", \"info\": {\"name\": \"qibosoft-microsite\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,qibosoft-microsite\", \"severity\": \"info\", \"metadata\": {\"product\": \"qibosoft-microsite\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by qibosoft v1.0\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\qibosoft-microsite.yaml\"}, {\"id\": \"qibosoft-v7\", \"info\": {\"name\": \"qibosoft-v7\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,qibosoft-v7\", \"severity\": \"info\", \"metadata\": {\"product\": \"qibosoft-v7\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/images/v7/cms.css\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\qibosoft-v7.yaml\"}, {\"id\": \"qingyuan-hsse\", \"info\": {\"name\": \"qingyuan-hsse\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,qingyuan-hsse\", \"severity\": \"info\", \"metadata\": {\"product\": \"qingyuan-hsse\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"hsse 系统\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\qingyuan-hsse.yaml\"}, {\"id\": \"qingyuan-management-system\", \"info\": {\"name\": \"qingyuan-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,qingyuan-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"qingyuan-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"-moz-background-size\", \"class=\\\"u_logo fa fa-user\\\"\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\qingyuan-management-system.yaml\"}, {\"id\": \"qinzhe-excel\", \"info\": {\"name\": \"qinzhe-excel\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,qinzhe-excel\", \"severity\": \"info\", \"metadata\": {\"product\": \"qinzhe-excel\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=\\\"chkworkbyreplacer\\\" type=\\\"checkbox\\\"\", \"如果能访问到qinzhe网站上的图片，说明网络是通的，显示新闻\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\qinzhe-excel.yaml\"}, {\"id\": \"qizhi-fortress-aircraft\", \"info\": {\"name\": \"qizhi-fortress-aircraft\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,qizhi-fortress-aircraft\", \"severity\": \"info\", \"metadata\": {\"product\": \"qizhi-fortress-aircraft\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"//xfpverifyexec.jsp;\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\qizhi-fortress-aircraft.yaml\"}, {\"id\": \"qm-system\", \"info\": {\"name\": \"qm-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,qm-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"qm-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"assets/css/fdb.css\", \"src=\\\"polyfills.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\qm-system.yaml\"}, {\"id\": \"qtweb\", \"info\": {\"name\": \"qtweb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,qtweb\", \"severity\": \"info\", \"metadata\": {\"product\": \"qtweb\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"url=gqrtweb\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\qtweb.yaml\"}, {\"id\": \"quarkmail\", \"info\": {\"name\": \"quarkmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,quarkmail\", \"severity\": \"info\", \"metadata\": {\"product\": \"quarkmail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<iframe src=\\\"/cgi-bin/web2cgi/index.cgi\\\" scrolling=\\\"no\\\" frameborder=\", \"window.location.replace(\\\"/cgi-bin/web2cgi/index.cgi\\\");\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\quarkmail.yaml\"}, {\"id\": \"quest-dr\", \"info\": {\"name\": \"quest-dr\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,quest-dr\", \"severity\": \"info\", \"metadata\": {\"product\": \"quest-dr\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"cui-login-screen\", \"quest software\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\quest-dr.yaml\"}, {\"id\": \"quest-password-manager\", \"info\": {\"name\": \"quest-password-manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,quest-password-manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"quest-password-manager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=\\\"ctl00_ctl00_ctl00_ctl00_body\", \"id=\\\"ctl00_ctl00_ctl00_ctl00_contentplaceholder_pleasewait_content\", \"id=\\\"ginapageexpiration\", \"style=\\\"display:none\\\" id=\\\"account_notfilled.textbox\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\quest-password-manager.yaml\"}, {\"id\": \"quixplorer\", \"info\": {\"name\": \"quixplorer\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,quixplorer\", \"severity\": \"info\", \"metadata\": {\"product\": \"quixplorer\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"target=\\\"_blank\\\">the quix project</a></small>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\quixplorer.yaml\"}, {\"id\": \"quiz-system\", \"info\": {\"name\": \"quiz-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,quiz-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"quiz-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>| online quiz system |</title>\", \"quiz system\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\quiz-system.yaml\"}, {\"id\": \"qz-safe-mail\", \"info\": {\"name\": \"qz-safe-mail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,qz-safe-mail\", \"severity\": \"info\", \"metadata\": {\"product\": \"qz-safe-mail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/qzmail/index.php\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\qz-safe-mail.yaml\"}, {\"id\": \"rabbitmq\", \"info\": {\"name\": \"rabbitmq\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rabbitmq\", \"severity\": \"info\", \"metadata\": {\"product\": \"rabbitmq\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>rabbitmq management</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\rabbitmq.yaml\"}, {\"id\": \"radware-appwall\", \"info\": {\"name\": \"radware-appwall\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,radware-appwall\", \"severity\": \"info\", \"metadata\": {\"product\": \"radware-appwall\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"unauthorized activity has been detected.\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\radware-appwall.yaml\"}, {\"id\": \"raiden-mail\", \"info\": {\"name\": \"raiden-mail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,raiden-mail\", \"severity\": \"info\", \"metadata\": {\"product\": \"raiden-mail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/webimages/raidenmaild.jpg\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\raiden-mail.yaml\"}, {\"id\": \"rainier-internet-product\", \"info\": {\"name\": \"rainier-internet-product\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rainier-internet-product\", \"severity\": \"info\", \"metadata\": {\"product\": \"rainier-internet-product\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://www.rainier.net.cn\\\">北京润尼尔网络科技有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\rainier-internet-product.yaml\"}, {\"id\": \"rainmail\", \"info\": {\"name\": \"rainmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rainmail\", \"severity\": \"info\", \"metadata\": {\"product\": \"rainmail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\".: <b>rainmail intranet login </b> :.</div>\", \"href=\\\"/resources/rainmailvpninstaller.exe\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\rainmail.yaml\"}, {\"id\": \"raisecom-ivoice8000\", \"info\": {\"name\": \"raisecom-ivoice8000\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,raisecom-ivoice8000\", \"severity\": \"info\", \"metadata\": {\"product\": \"raisecom-ivoice8000\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=\\\"com_raisecom_ums_aos_portal_login_domain\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\raisecom-ivoice8000.yaml\"}, {\"id\": \"ralph\", \"info\": {\"name\": \"ralph\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ralph\", \"severity\": \"info\", \"metadata\": {\"product\": \"ralph\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ralph <strong>3</strong>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ralph.yaml\"}, {\"id\": \"ranzhi-oa\", \"info\": {\"name\": \"ranzhi-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ranzhi-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"ranzhi-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/sys/index.php?m=user&f=login&referer=\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ranzhi-oa.yaml\"}, {\"id\": \"rap2\", \"info\": {\"name\": \"rap2\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rap2\", \"severity\": \"info\", \"metadata\": {\"product\": \"rap2\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"webpackjsonprap2-dolores\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\rap2.yaml\"}, {\"id\": \"rapid-browser\", \"info\": {\"name\": \"rapid-browser\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rapid-browser\", \"severity\": \"info\", \"metadata\": {\"product\": \"rapid-browser\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!-- ### bullet table ### -->\", \"images/login_button.gif\\\" alt=\\\"login to rapid browser\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\rapid-browser.yaml\"}, {\"id\": \"raritan-an-quan-wang-guan\", \"info\": {\"name\": \"raritan-安全网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,raritan-安全网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"raritan-安全网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"raritan cc-sg\", \"src=\\\"images/ccsg logo.gif\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\raritan-安全网关.yaml\"}, {\"id\": \"rbsoft-software\", \"info\": {\"name\": \"rbsoft-software\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rbsoft-software\", \"severity\": \"info\", \"metadata\": {\"product\": \"rbsoft-software\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"name=\\\"redirectto\\\" value=\\\"/zym/rbkj.nsf\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\rbsoft-software.yaml\"}, {\"id\": \"realtime-web-acars\", \"info\": {\"name\": \"realtime-web-acars\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,realtime-web-acars\", \"severity\": \"info\", \"metadata\": {\"product\": \"realtime-web-acars\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"realtime web acars\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\realtime-web-acars.yaml\"}, {\"id\": \"reddoxx\", \"info\": {\"name\": \"reddoxx\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,reddoxx\", \"severity\": \"info\", \"metadata\": {\"product\": \"reddoxx\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"148779de-1cf1-49bb-8bdb-129321cf8974\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\reddoxx.yaml\"}, {\"id\": \"redflag-linux-cluster-management-system\", \"info\": {\"name\": \"redflag-linux-cluster-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,redflag-linux-cluster-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"redflag-linux-cluster-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<b>登录到红旗集群管理系统</b></td>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\redflag-linux-cluster-management-system.yaml\"}, {\"id\": \"redmine\", \"info\": {\"name\": \"redmine\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,redmine\", \"severity\": \"info\", \"metadata\": {\"product\": \"redmine\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"authenticity_token\", \"redmine\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"content=\\\"redmine\", \"powered by <a href=\\\"http://www.redmine.org/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\redmine.yaml\"}, {\"id\": \"redseal-system\", \"info\": {\"name\": \"redseal-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,redseal-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"redseal-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"alt=\\\"redseal, inc.\\\"/></a>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\redseal-system.yaml\"}, {\"id\": \"redwoodhq\", \"info\": {\"name\": \"redwoodhq\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,redwoodhq\", \"severity\": \"info\", \"metadata\": {\"product\": \"redwoodhq\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"stylesheets/redwoodtheme/resources/js/azzurra.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\redwoodhq.yaml\"}, {\"id\": \"remobjects-dxsock\", \"info\": {\"name\": \"remobjects-dxsock\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,remobjects-dxsock\", \"severity\": \"info\", \"metadata\": {\"product\": \"remobjects-dxsock\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"remobjects sdk\", \"remobjects software, llc.\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\remobjects-dxsock.yaml\"}, {\"id\": \"remotelyanywhere\", \"info\": {\"name\": \"remotelyanywhere\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,remotelyanywhere\", \"severity\": \"info\", \"metadata\": {\"product\": \"remotelyanywhere\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/img/ralogo.png\\\" alt=\\\"remotelyanywhere\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"server: remotelyanywhere\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\remotelyanywhere.yaml\"}, {\"id\": \"rengine\", \"info\": {\"name\": \"rengine\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rengine\", \"severity\": \"info\", \"metadata\": {\"product\": \"rengine\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\">login to rengine.</h5>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\rengine.yaml\"}, {\"id\": \"renwoxing-crm\", \"info\": {\"name\": \"renwoxing-crm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,renwoxing-crm\", \"severity\": \"info\", \"metadata\": {\"product\": \"renwoxing-crm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/resources/imgs/defaultannex/loginpictures/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\renwoxing-crm.yaml\"}, {\"id\": \"reremouse-exam-system\", \"info\": {\"name\": \"reremouse-exam-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,reremouse-exam-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"reremouse-exam-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/resources/js/upscroll.js\\\"\", \"博库医学在线考试系统，技术支持：杭州博库科技有限公司\", \"蝙蝠在线考试系统\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\reremouse-exam-system.yaml\"}, {\"id\": \"resourcemanager\", \"info\": {\"name\": \"resourcemanager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,resourcemanager\", \"severity\": \"info\", \"metadata\": {\"product\": \"resourcemanager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"this is standby rm. redirecting to the current active rm\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\resourcemanager.yaml\"}, {\"id\": \"reviewboard\", \"info\": {\"name\": \"reviewboard\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,reviewboard\", \"severity\": \"info\", \"metadata\": {\"product\": \"reviewboard\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/static/rb/images/delete\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\reviewboard.yaml\"}, {\"id\": \"richinfo-richmail\", \"info\": {\"name\": \"richinfo-richmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,richinfo-richmail\", \"severity\": \"info\", \"metadata\": {\"product\": \"richinfo-richmail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"richmail\", \"richmail\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\richinfo-richmail.yaml\"}, {\"id\": \"riicy-rui-bo-shi-yun-ban-gong-xi-tong\", \"info\": {\"name\": \"riicy-睿博士云办公系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,riicy-睿博士云办公系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"riicy-睿博士云办公系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/studentsign/tologin.di\", \"/user/toupdatepasswordpage.di\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\riicy-睿博士云办公系统.yaml\"}, {\"id\": \"rising-antivirus-online\", \"info\": {\"name\": \"rising-antivirus-online\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rising-antivirus-online\", \"severity\": \"info\", \"metadata\": {\"product\": \"rising-antivirus-online\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"ravweb_files/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\rising-antivirus-online.yaml\"}, {\"id\": \"rising-antivirus-wall\", \"info\": {\"name\": \"rising-antivirus-wall\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rising-antivirus-wall\", \"severity\": \"info\", \"metadata\": {\"product\": \"rising-antivirus-wall\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"action=\\\"/index.php\\\" onsubmit=\\\"return checkfrm(this);\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\rising-antivirus-wall.yaml\"}, {\"id\": \"rising-wang-luo-an-quan-yu-jing-xi-tong\", \"info\": {\"name\": \"rising-网络安全预警系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rising-网络安全预警系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"rising-网络安全预警系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"瑞星网络安全预警系统\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\rising-网络安全预警系统.yaml\"}, {\"id\": \"riverbed-appresponse\", \"info\": {\"name\": \"riverbed-appresponse\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,riverbed-appresponse\", \"severity\": \"info\", \"metadata\": {\"product\": \"riverbed-appresponse\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"uiwebinsights/webinsights.html\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\riverbed-appresponse.yaml\"}, {\"id\": \"rmihttpserver\", \"info\": {\"name\": \"rmihttpserver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rmihttpserver\", \"severity\": \"info\", \"metadata\": {\"product\": \"rmihttpserver\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"cloudclient httpserver is running...\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\rmihttpserver.yaml\"}, {\"id\": \"rocketmq-console\", \"info\": {\"name\": \"rocketmq-console\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rocketmq-console\", \"severity\": \"info\", \"metadata\": {\"product\": \"rocketmq-console\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>rocketmq-console-ng</title>\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"www-authenticate: basic realm=\\\"rocketmq\\\"\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\rocketmq-console.yaml\"}, {\"id\": \"rockoa-oa\", \"info\": {\"name\": \"rockoa-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rockoa-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"rockoa-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"onclick=\\\"loginsubmit()\\\"\", \"信呼开发团队\", \"技术支持：<a href=\\\"http://www.rockoa.com/\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\rockoa-oa.yaml\"}, {\"id\": \"rsupport-remotecall\", \"info\": {\"name\": \"rsupport-remotecall\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rsupport-remotecall\", \"severity\": \"info\", \"metadata\": {\"product\": \"rsupport-remotecall\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"http://www.remotecall.com\", \"msg_abortservice\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\rsupport-remotecall.yaml\"}, {\"id\": \"ruby-on-rails\", \"info\": {\"name\": \"ruby-on-rails\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ruby-on-rails\", \"severity\": \"info\", \"metadata\": {\"product\": \"ruby-on-rails\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>ruby on rails</title>\", \"alt=\\\"ruby on rails\", \"content=\\\"ruby on rails\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ruby-on-rails.yaml\"}, {\"id\": \"ruckus-wireless\", \"info\": {\"name\": \"ruckus-wireless\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ruckus-wireless\", \"severity\": \"info\", \"metadata\": {\"product\": \"ruckus-wireless\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"ed8cf53ef6836184587ee3a987be074a\"]}, {\"type\": \"word\", \"words\": [\"<title>ruckus wireless admin</title>\", \"alt=\\\"ruckus wireless\\\" title=\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ruckus-wireless.yaml\"}, {\"id\": \"rui-cheng-oa\", \"info\": {\"name\": \"rui-cheng-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rui-cheng-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"rui-cheng-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"杭州瑞成信息技术有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\rui-cheng-oa.yaml\"}, {\"id\": \"ruijie-cloud\", \"info\": {\"name\": \"ruijie-cloud\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ruijie-cloud\", \"severity\": \"info\", \"metadata\": {\"product\": \"ruijie-cloud\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"rcp, 管理平台\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ruijie-cloud.yaml\"}, {\"id\": \"ruijie-eg-yi-wang-guan\", \"info\": {\"name\": \"ruijie-eg易网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ruijie-eg易网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"ruijie-eg易网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"eg.css\", \"ruijie\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ruijie-eg易网关.yaml\"}, {\"id\": \"ruijie-eweb\", \"info\": {\"name\": \"ruijie-eweb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ruijie-eweb\", \"severity\": \"info\", \"metadata\": {\"product\": \"ruijie-eweb\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<span class=\\\"resource\\\" mark=\\\"login.copyright\\\">锐捷网络</span>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ruijie-eweb.yaml\"}, {\"id\": \"ruijie-eweb-wang-guan-xi-tong\", \"info\": {\"name\": \"ruijie-eweb网管系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ruijie-eweb网管系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"ruijie-eweb网管系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>锐捷网络-eweb网管系统</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ruijie-eweb网管系统.yaml\"}, {\"id\": \"ruijie-it\", \"info\": {\"name\": \"ruijie-it\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ruijie-it\", \"severity\": \"info\", \"metadata\": {\"product\": \"ruijie-it\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var logincookiename = 'riil_id'\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ruijie-it.yaml\"}, {\"id\": \"ruijie-rgos\", \"info\": {\"name\": \"ruijie-rgos\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ruijie-rgos\", \"severity\": \"info\", \"metadata\": {\"product\": \"ruijie-rgos\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: rgos http-server\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ruijie-rgos.yaml\"}, {\"id\": \"ruijie-router-nbr-lu-you-qi\", \"info\": {\"name\": \"ruijie-router-nbr 路由器\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"ruijie-router-nbr 路由器\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"web_monitor_config.htm\", \"锐捷网络\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"nbr路由器\", \"support.ruijie.com.cn\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"support.ruijie.com.cn\", \"<p>系统负荷过高，导致网络拥塞，建议降低系统负荷或重启路由器\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"<title>锐捷网络</title>\", \"href=/static/img/title.ico\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"<title>锐捷网络</title>\", \"index.data?opt=err\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"<title>锐捷网络</title>\", \"/luci-static/ruijie/images/favicon.ico\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"<title>302 moved</title>\", \"relogin.htm?_t=\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"<title>锐捷网络</title>\", \"mailto:service@ruijie.com.cn\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"a45883b12d753bc87aff5bddbef16ab3\"]}, {\"type\": \"word\", \"words\": [\"class=\\\"line resource\\\" id=\\\"nbr_1\\\"\", \"<title>锐捷网络 --nbr路由器--登录界面</title>\", \"ruijie - nbr\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ruijie-router-nbr 路由器.yaml\"}, {\"id\": \"ruijie-router-nbr\", \"info\": {\"name\": \"ruijie-router-nbr\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ruijie-router-nbr\", \"severity\": \"info\", \"metadata\": {\"product\": \"ruijie-router-nbr\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"web_monitor_config.htm\", \"锐捷网络\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"nbr路由器\", \"support.ruijie.com.cn\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ruijie-router-nbr.yaml\"}, {\"id\": \"ruijie-smart-web\", \"info\": {\"name\": \"ruijie-smart-web\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ruijie-smart-web\", \"severity\": \"info\", \"metadata\": {\"product\": \"ruijie-smart-web\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"锐捷交换机\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ruijie-smart-web.yaml\"}, {\"id\": \"ruijie-sslvpn\", \"info\": {\"name\": \"ruijie-sslvpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ruijie-sslvpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"ruijie-sslvpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"sslvpn\", \"login\", \"rjsslvpn_encookie\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"document.cookie = \\\"rjsslvpn_encookie=yes;\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ruijie-sslvpn.yaml\"}, {\"id\": \"ruijie-xia-yi-dai-fang-huo-qiang\", \"info\": {\"name\": \"ruijie-下一代防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ruijie-下一代防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"ruijie-下一代防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"webui/images/ruijie\", \"锐捷\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ruijie-下一代防火墙.yaml\"}, {\"id\": \"ruijie-fang-huo-qiang\", \"info\": {\"name\": \"ruijie-防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ruijie-防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"ruijie-防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"4008 111 000\", \"ssl_index_next.html\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ruijie-防火墙.yaml\"}, {\"id\": \"runda-supervisory-platform\", \"info\": {\"name\": \"runda-supervisory-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,runda-supervisory-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"runda-supervisory-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"log_rbox\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\runda-supervisory-platform.yaml\"}, {\"id\": \"ruoyi-system\", \"info\": {\"name\": \"ruoyi-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ruoyi-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"ruoyi-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/ruoyi/css/ry-ui.css\", \"src=\\\"/ruoyi/js/ry-ui.js\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"e49fd30ea870c7a820464ca56a113e6e\"]}]}], \"_source_file\": \"00_unknown\\\\ruoyi-system.yaml\"}, {\"id\": \"rusong-product\", \"info\": {\"name\": \"rusong-product\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rusong-product\", \"severity\": \"info\", \"metadata\": {\"product\": \"rusong-product\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"plugins/wbb/barrett.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\rusong-product.yaml\"}, {\"id\": \"ruvar-oa\", \"info\": {\"name\": \"ruvar-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ruvar-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"ruvar-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<iframe id=\\\"ifrm\\\" width=\\\"100%\\\" height=\\\"100%\\\" frameborder=\\\"0\\\" scrolling=\\\"no\\\" src=\\\"/include/login.aspx\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ruvar-oa.yaml\"}, {\"id\": \"ruvarhrm\", \"info\": {\"name\": \"ruvarhrm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ruvarhrm\", \"severity\": \"info\", \"metadata\": {\"product\": \"ruvarhrm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/ruvarhrm/web_login/login.aspx\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ruvarhrm.yaml\"}, {\"id\": \"s-cms\", \"info\": {\"name\": \"s-cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,s-cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"s-cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<p class=\\\"alignright\\\">powered by s:cms - copyright ©\", \"class=\\\"scms_container w1200\\\"\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/media/20151019095214828.png\", \"<h2>闪灵cms建站系统</h2>\", \"type=news&s_id=\", \"type=newsinfo&s_id=\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\s-cms.yaml\"}, {\"id\": \"salien-device-integrity-management-system\", \"info\": {\"name\": \"salien-device-integrity-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,salien-device-integrity-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"salien-device-integrity-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"rmsie = /(msie\\\\s|trident.*rv:)([\\\\w.]+)/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\salien-device-integrity-management-system.yaml\"}, {\"id\": \"salien-performance-management-platform\", \"info\": {\"name\": \"salien-performance-management-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,salien-performance-management-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"salien-performance-management-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"copyright 2010 www.salien.com.cn\\\"\", \"href=\\\"images/login/cbgl/favicon.ico\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\salien-performance-management-platform.yaml\"}, {\"id\": \"salien-software-system\", \"info\": {\"name\": \"salien-software-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,salien-software-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"salien-software-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"images/login/msn/favicon.ico\\\"\", \"北京市时林电脑公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\salien-software-system.yaml\"}, {\"id\": \"samphpweb\", \"info\": {\"name\": \"samphpweb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,samphpweb\", \"severity\": \"info\", \"metadata\": {\"product\": \"samphpweb\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<meta http-equiv=\\\"refresh\\\" content=\\\"0;url=playing.html\\\">\", \"copyright spacial audio solutions\", \"href=\\\"http://www.spacialaudio.com/products/sambroadcaster/\\\"\", \"songinfo.php\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\samphpweb.yaml\"}, {\"id\": \"sandu-oa\", \"info\": {\"name\": \"sandu-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sandu-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"sandu-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"青岛叁度信息技术有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sandu-oa.yaml\"}, {\"id\": \"sangfor-ba\", \"info\": {\"name\": \"sangfor-ba\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sangfor-ba\", \"severity\": \"info\", \"metadata\": {\"product\": \"sangfor-ba\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"haovuytkjlnvxpuhsecmbljplpvjz = function(str, key) \"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sangfor-ba.yaml\"}, {\"id\": \"sangfor-behavior-management-or-identity-authentication-system\", \"info\": {\"name\": \"sangfor-behavior-management-or-identity-authentication-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sangfor-behavior-management-or-identity-authentication-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"sangfor-behavior-management-or-identity-authentication-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"/webauth/\\\">\", \"class=\\\"info-inner\\\"\", \"身份认证系统\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sangfor-behavior-management-or-identity-authentication-system.yaml\"}, {\"id\": \"sangfor-branch-business-center\", \"info\": {\"name\": \"sangfor-branch-business-center\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sangfor-branch-business-center\", \"severity\": \"info\", \"metadata\": {\"product\": \"sangfor-branch-business-center\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"location.href = '/bbc/index'\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sangfor-branch-business-center.yaml\"}, {\"id\": \"sangfor-data-center\", \"info\": {\"name\": \"sangfor-data-center\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sangfor-data-center\", \"severity\": \"info\", \"metadata\": {\"product\": \"sangfor-data-center\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/cfwloginout.php\", \"_top\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"acloglogin.php\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"location: ./src/acloglogin.php\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sangfor-data-center.yaml\"}, {\"id\": \"sangfor-edr\", \"info\": {\"name\": \"sangfor-edr\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sangfor-edr\", \"severity\": \"info\", \"metadata\": {\"product\": \"sangfor-edr\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"datalayer','gtm-tl7g2lw'\", \"windows_download_name: \\\"/download_installer_win.php\\\",\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sangfor-edr.yaml\"}, {\"id\": \"sangfor-employee-internet-management\", \"info\": {\"name\": \"sangfor-employee-internet-management\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sangfor-employee-internet-management\", \"severity\": \"info\", \"metadata\": {\"product\": \"sangfor-employee-internet-management\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\" = function(str, key)\", \"content=\\\"must-revalidate\\\"\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"document.cookie = 'sangfor_session_hash=0'\", \"href=\\\"http://sec.sangfor.com.cn/events/89.html\\\"\", \"internet authentication system\", \"上网优化管理\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sangfor-employee-internet-management.yaml\"}, {\"id\": \"sangfor-ipsec-vpn\", \"info\": {\"name\": \"sangfor-ipsec-vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sangfor-ipsec-vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"sangfor-ipsec-vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"sangfor-ipsec\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sangfor-ipsec-vpn.yaml\"}, {\"id\": \"sangfor-managementsystem\", \"info\": {\"name\": \"sangfor-managementsystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sangfor-managementsystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"sangfor-managementsystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/cgi-bin/login.cgi?requestname=\", \"var msg = '对不起, '+str+'暂不支持您当前使用的浏览器\", \"var msg = '对不起，集中管理平台暂不支持您当前使用的浏览器\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sangfor-managementsystem.yaml\"}, {\"id\": \"sangfor-osm\", \"info\": {\"name\": \"sangfor-osm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sangfor-osm\", \"severity\": \"info\", \"metadata\": {\"product\": \"sangfor-osm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"window.location.href=\\\"https://\\\"+window.location.host+\\\"/fort/login\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sangfor-osm.yaml\"}, {\"id\": \"sangfor-reporting\", \"info\": {\"name\": \"sangfor-reporting\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sangfor-reporting\", \"severity\": \"info\", \"metadata\": {\"product\": \"sangfor-reporting\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ad report\", \"user_blur();\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sangfor-reporting.yaml\"}, {\"id\": \"sangfor-sip\", \"info\": {\"name\": \"sangfor-sip\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sangfor-sip\", \"severity\": \"info\", \"metadata\": {\"product\": \"sangfor-sip\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/apps/secvisual/static/js/runtime.js?\", \"url: '../auth_manage/auth_manage/on_login'\", \"window.sessionstorage.removeitem('serialcheckobj')\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sangfor-sip.yaml\"}, {\"id\": \"sangfor-ssl-vpn\", \"info\": {\"name\": \"sangfor-ssl-vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sangfor-ssl-vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"sangfor-ssl-vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/por/login_psw.csp\", \"/portal\\\",right:0}];\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sangfor-ssl-vpn.yaml\"}, {\"id\": \"sangfor-tamper-resistance\", \"info\": {\"name\": \"sangfor-tamper-resistance\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sangfor-tamper-resistance\", \"severity\": \"info\", \"metadata\": {\"product\": \"sangfor-tamper-resistance\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<li style=\\\"color:#999999;margin-left:6px;list-style:circle inside;\\\">如忘记密码，请与防火墙管理员联系</li>\", \"href=\\\"tamper/style/control.css\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sangfor-tamper-resistance.yaml\"}, {\"id\": \"sangfor-vd\", \"info\": {\"name\": \"sangfor-vd\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sangfor-vd\", \"severity\": \"info\", \"metadata\": {\"product\": \"sangfor-vd\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"vdi\", \"login_psw.csp\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sangfor-vd.yaml\"}, {\"id\": \"sangfor-virtualization-management\", \"info\": {\"name\": \"sangfor-virtualization-management\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sangfor-virtualization-management\", \"severity\": \"info\", \"metadata\": {\"product\": \"sangfor-virtualization-management\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"webkit|ie-stand\\\"\", \"id=\\\"privacytipwin\\\"\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sangfor-virtualization-management.yaml\"}, {\"id\": \"sangfor-zero-trust-integrated-gateway\", \"info\": {\"name\": \"sangfor-zero-trust-integrated-gateway\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sangfor-zero-trust-integrated-gateway\", \"severity\": \"info\", \"metadata\": {\"product\": \"sangfor-zero-trust-integrated-gateway\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"61ea21861c73970bc98ed619f2748992\"]}, {\"type\": \"word\", \"words\": [\"<title>atrust\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sangfor-zero-trust-integrated-gateway.yaml\"}, {\"id\": \"sanshuichinatelecombusinesssupportroomsystem\", \"info\": {\"name\": \"sanshuichinatelecombusinesssupportroomsystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sanshuichinatelecombusinesssupportroomsystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"sanshuichinatelecombusinesssupportroomsystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"background=\\\"images/vista.jpg\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sanshuichinatelecombusinesssupportroomsystem.yaml\"}, {\"id\": \"sap-sybase\", \"info\": {\"name\": \"sap-sybase\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sap-sybase\", \"severity\": \"info\", \"metadata\": {\"product\": \"sap-sybase\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: adaptiveserveranywhere\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sap-sybase.yaml\"}, {\"id\": \"sap-web-application-server\", \"info\": {\"name\": \"sap-web-application-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sap-web-application-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"sap-web-application-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: sap j2ee engine\", \"server: sap netweaver application server\", \"server: sap web application server\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sap-web-application-server.yaml\"}, {\"id\": \"sarg\", \"info\": {\"name\": \"sarg\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sarg\", \"severity\": \"info\", \"metadata\": {\"product\": \"sarg\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"logo\\\"><a href=\\\"http://sarg.sourceforge.net\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sarg.yaml\"}, {\"id\": \"savant-web-server\", \"info\": {\"name\": \"savant-web-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,savant-web-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"savant-web-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: savant\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\savant-web-server.yaml\"}, {\"id\": \"sawmill\", \"info\": {\"name\": \"sawmill\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sawmill\", \"severity\": \"info\", \"metadata\": {\"product\": \"sawmill\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div id=\\\"password:error\", \"src=\\\"/picts/sawmill_logo.png\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sawmill.yaml\"}, {\"id\": \"schneider-citectscada\", \"info\": {\"name\": \"schneider-citectscada\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,schneider-citectscada\", \"severity\": \"info\", \"metadata\": {\"product\": \"schneider-citectscada\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<meta http-equiv=\\\"refresh\\\" content=\\\"0; url=/citectscada\\\">\", \"content=\\\"start services, start group, the start group, automation, industrial, software engineering, scada, plc, rtu, rockwell, rockwell automation, allen-bradley, allen bradley, allenbradley, citect, citectscada, kingfisher\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\schneider-citectscada.yaml\"}, {\"id\": \"scientific-research-instrument-network-service-platform\", \"info\": {\"name\": \"scientific-research-instrument-network-service-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,scientific-research-instrument-network-service-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"scientific-research-instrument-network-service-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content: \\\"/lfsms/user/login2?go=\\\" + go\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\scientific-research-instrument-network-service-platform.yaml\"}, {\"id\": \"sco-openserver\", \"info\": {\"name\": \"sco-openserver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sco-openserver\", \"severity\": \"info\", \"metadata\": {\"product\": \"sco-openserver\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"gif/rlogo1.gif\", \"sco corporate web site\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sco-openserver.yaml\"}, {\"id\": \"screwturn-wiki-web-service\", \"info\": {\"name\": \"screwturn-wiki-web-service\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,screwturn-wiki-web-service\", \"severity\": \"info\", \"metadata\": {\"product\": \"screwturn-wiki-web-service\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by <a class=\\\"externallink\\\" href=\\\"http:\", \"title=\\\"screwturn wiki\\\" target=\\\"_blank\\\">screwturn wiki\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\screwturn-wiki-web-service.yaml\"}, {\"id\": \"sdcms-shen-dun-nei-rong-guan-li-xi-tong\", \"info\": {\"name\": \"sdcms神盾内容管理系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sdcms神盾内容管理系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"sdcms神盾内容管理系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"login\", \"sdcms\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sdcms神盾内容管理系统.yaml\"}, {\"id\": \"sdcncsi\", \"info\": {\"name\": \"sdcncsi\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sdcncsi\", \"severity\": \"info\", \"metadata\": {\"product\": \"sdcncsi\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<em class=\\\"wk-fl\\\">在沃系统</em>\", \"refreshcaptchaimgfun\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sdcncsi.yaml\"}, {\"id\": \"seagull-php-framework\", \"info\": {\"name\": \"seagull-php-framework\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,seagull-php-framework\", \"severity\": \"info\", \"metadata\": {\"product\": \"seagull-php-framework\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var sgl_js_sessid\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\seagull-php-framework.yaml\"}, {\"id\": \"secbi-product\", \"info\": {\"name\": \"secbi-product\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,secbi-product\", \"severity\": \"info\", \"metadata\": {\"product\": \"secbi-product\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/secbiutils.min.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\secbi-product.yaml\"}, {\"id\": \"seceon-otm\", \"info\": {\"name\": \"seceon-otm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,seceon-otm\", \"severity\": \"info\", \"metadata\": {\"product\": \"seceon-otm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"use this if you want to run the seceon module of kibana.\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\seceon-otm.yaml\"}, {\"id\": \"security-intelligent-management-platform\", \"info\": {\"name\": \"security-intelligent-management-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,security-intelligent-management-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"security-intelligent-management-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"nanjing rickyinfo technology\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\security-intelligent-management-platform.yaml\"}, {\"id\": \"secusys-tc348nt-an-quan-fang-wen-mo-kuai\", \"info\": {\"name\": \"secusys-tc348nt安全访问模块\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,secusys-tc348nt安全访问模块\", \"severity\": \"info\", \"metadata\": {\"product\": \"secusys-tc348nt安全访问模块\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"tc348nt pannel\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\secusys-tc348nt安全访问模块.yaml\"}, {\"id\": \"seehealth-health-management-system\", \"info\": {\"name\": \"seehealth-health-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,seehealth-health-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"seehealth-health-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"upvalidatefile.aspx\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\seehealth-health-management-system.yaml\"}, {\"id\": \"seller-shi-zi-yu-guan-li-hou-tai\", \"info\": {\"name\": \"seller-狮子鱼管理后台\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,seller-狮子鱼管理后台\", \"severity\": \"info\", \"metadata\": {\"product\": \"seller-狮子鱼管理后台\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"seller.php?s=/public/login\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\seller-狮子鱼管理后台.yaml\"}, {\"id\": \"semaphore\", \"info\": {\"name\": \"semaphore\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,semaphore\", \"severity\": \"info\", \"metadata\": {\"product\": \"semaphore\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"alt=\\\"powered by semaphore\\\"\", \"www.smartlogic.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\semaphore.yaml\"}, {\"id\": \"sentinel-dashboard\", \"info\": {\"name\": \"sentinel-dashboard\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sentinel-dashboard\", \"severity\": \"info\", \"metadata\": {\"product\": \"sentinel-dashboard\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ng-app=\\\"sentineldashboardapp\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sentinel-dashboard.yaml\"}, {\"id\": \"sentora\", \"info\": {\"name\": \"sentora\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sentora\", \"severity\": \"info\", \"metadata\": {\"product\": \"sentora\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\" href=\\\"http://www.sentora.org/\\\"\", \" sentora_logo.png \"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sentora.yaml\"}, {\"id\": \"sentry-cloud\", \"info\": {\"name\": \"sentry-cloud\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sentry-cloud\", \"severity\": \"info\", \"metadata\": {\"product\": \"sentry-cloud\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src: url(/static/fonts/lcdd.eot) format(\\\"truetype\\\"), url(/static/fonts/lcdd.ttf) format(\\\"truetype\\\");\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sentry-cloud.yaml\"}, {\"id\": \"seo-panel\", \"info\": {\"name\": \"seo-panel\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,seo-panel\", \"severity\": \"info\", \"metadata\": {\"product\": \"seo-panel\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var wantproceed = 'do you really want to proceed?';\", \"var wantproceed = 'wollen sie wirklich fortfahren?';\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"<p class=\\\"note error\\\">javascript is turned off in your web browser. turn it on to take full advantage of this site, then refresh the page.</p>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\seo-panel.yaml\"}, {\"id\": \"sequoiadb\", \"info\": {\"name\": \"sequoiadb-\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sequoiadb-\", \"severity\": \"info\", \"metadata\": {\"product\": \"sequoiadb-\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"btn btn-default\\\" onclick=\\\"updateconnect();\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sequoiadb-.yaml\"}, {\"id\": \"serendipity-php-architecture\", \"info\": {\"name\": \"serendipity-php-architecture\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,serendipity-php-architecture\", \"severity\": \"info\", \"metadata\": {\"product\": \"serendipity-php-architecture\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"serendipity_editor.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\serendipity-php-architecture.yaml\"}, {\"id\": \"serv-u-ftp\", \"info\": {\"name\": \"serv-u-ftp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,serv-u-ftp\", \"severity\": \"info\", \"metadata\": {\"product\": \"serv-u-ftp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"alt=\\\"serv-u ftp server\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\serv-u-ftp.yaml\"}, {\"id\": \"sgp-managerial-system\", \"info\": {\"name\": \"sgp-managerial-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sgp-managerial-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"sgp-managerial-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/static/all/img/logo/sgp\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sgp-managerial-system.yaml\"}, {\"id\": \"shanshanes-system\", \"info\": {\"name\": \"shanshanes-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,shanshanes-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"shanshanes-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/dist/libs/layui/css/layui.css\", \"<title>杉杉储能监控平台</title>\", \"amap.mousetool,amap.districtsearch\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\shanshanes-system.yaml\"}, {\"id\": \"sheca-cert\", \"info\": {\"name\": \"sheca-cert\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sheca-cert\", \"severity\": \"info\", \"metadata\": {\"product\": \"sheca-cert\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<li class=\\\"in\\\" id=\\\"cert_li\\\">\", \"content: \\\"获取一证通信息异常。请检查数字证书是否正常运行\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sheca-cert.yaml\"}, {\"id\": \"shenguyun-sgc8000\", \"info\": {\"name\": \"shenguyun-sgc8000\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,shenguyun-sgc8000\", \"severity\": \"info\", \"metadata\": {\"product\": \"shenguyun-sgc8000\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var granttype=\\\"authorization_code\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\shenguyun-sgc8000.yaml\"}, {\"id\": \"shenri-elevator\", \"info\": {\"name\": \"shenri-elevator\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,shenri-elevator\", \"severity\": \"info\", \"metadata\": {\"product\": \"shenri-elevator\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/frameworks/images/ico.ico\", \"copyright 2015 shenri habiliment co.,ltd. all rights reserved\", \"images/login/btnmobile.gif\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\shenri-elevator.yaml\"}, {\"id\": \"shiji-xms\", \"info\": {\"name\": \"shiji-xms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,shiji-xms\", \"severity\": \"info\", \"metadata\": {\"product\": \"shiji-xms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"xmsenv.exe\\\">系统运行环境\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\shiji-xms.yaml\"}, {\"id\": \"shop7z\", \"info\": {\"name\": \"shop7z\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,shop7z\", \"severity\": \"info\", \"metadata\": {\"product\": \"shop7z\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"function www_zzjs_net_change\", \"id=\\\"www_zzjs_net_loding\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\shop7z.yaml\"}, {\"id\": \"shopnc\", \"info\": {\"name\": \"shopnc\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,shopnc\", \"severity\": \"info\", \"metadata\": {\"product\": \"shopnc\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"shopnc\", \"copyright 2007-2014 shopnc inc\", \"powered by shopnc\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\shopnc.yaml\"}, {\"id\": \"shopsn\", \"info\": {\"name\": \"shopsn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,shopsn\", \"severity\": \"info\", \"metadata\": {\"product\": \"shopsn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<span>shopsn全网开源<a style=\\\"padding: 0px\\\" href=\\\"http://www.shopsn.net\", \"content=\\\"shopsn\", \"href=\\\"http://www.shopsn.net\\\">商城系统</a>&nbsp;提供技术支持\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\shopsn.yaml\"}, {\"id\": \"shop_builder-mallbuilder\", \"info\": {\"name\": \"shop_builder-mallbuilder\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,shop_builder-mallbuilder\", \"severity\": \"info\", \"metadata\": {\"product\": \"shop_builder-mallbuilder\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"mallbuilder\", \"powered by mallbuilder\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\shop_builder-mallbuilder.yaml\"}, {\"id\": \"shop_builder-shopbuilder\", \"info\": {\"name\": \"shop_builder-shopbuilder\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,shop_builder-shopbuilder\", \"severity\": \"info\", \"metadata\": {\"product\": \"shop_builder-shopbuilder\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"shopbuilder\", \"powered by shopbuilder\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"shopbuilder版权所有\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\shop_builder-shopbuilder.yaml\"}, {\"id\": \"showdoc\", \"info\": {\"name\": \"showdoc\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,showdoc\", \"severity\": \"info\", \"metadata\": {\"product\": \"showdoc\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=本网站基于开源版showdoc搭建\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\showdoc.yaml\"}, {\"id\": \"shunde-cms\", \"info\": {\"name\": \"shunde-cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,shunde-cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"shunde-cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"for=\\\"ctl00_cph_l_login_username\\\">crm帐号\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\shunde-cms.yaml\"}, {\"id\": \"shwatermeter-system\", \"info\": {\"name\": \"shwatermeter-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,shwatermeter-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"shwatermeter-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"关于正则表达式的内容在本书的第10章中有较详细的讨论\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\shwatermeter-system.yaml\"}, {\"id\": \"siangsoft-filesystem\", \"info\": {\"name\": \"siangsoft-filesystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,siangsoft-filesystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"siangsoft-filesystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"$.cookie('sianglng' , null)\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\siangsoft-filesystem.yaml\"}, {\"id\": \"signature-verification-management-system\", \"info\": {\"name\": \"signature-verification-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,signature-verification-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"signature-verification-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"版权所有：北京格尔国信科技有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\signature-verification-management-system.yaml\"}, {\"id\": \"sillysmart\", \"info\": {\"name\": \"sillysmart\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sillysmart\", \"severity\": \"info\", \"metadata\": {\"product\": \"sillysmart\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var slsbuild\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sillysmart.yaml\"}, {\"id\": \"silverstripe\", \"info\": {\"name\": \"silverstripe\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,silverstripe\", \"severity\": \"info\", \"metadata\": {\"product\": \"silverstripe\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"silverstripe/\", \"framework/javascript/htmleditorfield.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\silverstripe.yaml\"}, {\"id\": \"simbix-framework\", \"info\": {\"name\": \"simbix-framework\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,simbix-framework\", \"severity\": \"info\", \"metadata\": {\"product\": \"simbix-framework\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div class=\\\"image\\\"><img src=\\\"/logo-lpage.png\\\" width=\\\"40\\\" height=\\\"40\\\" alt=\\\"simbix framework\\\" /></div>\", \"content=\\\"simbix framework v\", \"logo-lpage-owner.png\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\simbix-framework.yaml\"}, {\"id\": \"simple-phishing-toolkit\", \"info\": {\"name\": \"simple-phishing-toolkit\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,simple-phishing-toolkit\", \"severity\": \"info\", \"metadata\": {\"product\": \"simple-phishing-toolkit\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<span id=\\\"spt\\\"><a href=\\\"http://www.sptoolkit.com/download/\\\" target=\\\"_blank\\\">\", \"content=\\\"welcome to spt - simple phishing toolkit.  spt is a super simple but powerful phishing toolkit.\\\" />\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\simple-phishing-toolkit.yaml\"}, {\"id\": \"simsweb\", \"info\": {\"name\": \"simsweb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,simsweb\", \"severity\": \"info\", \"metadata\": {\"product\": \"simsweb\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<form onsubmit=\\\"sendinfo(); return false;\\\" name=\\\"logon\", \"index.html\\\"><font color=\\\"black\\\" face=\\\"arial\\\">loading simsweb, please wait.....</font></a></h2>\", \"src=\\\"/simsweb/monitor.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\simsweb.yaml\"}, {\"id\": \"sina-sae\", \"info\": {\"name\": \"sina-sae\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sina-sae\", \"severity\": \"info\", \"metadata\": {\"product\": \"sina-sae\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"lib.sinaapp.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sina-sae.yaml\"}, {\"id\": \"sinosoft-technology-e-government-system\", \"info\": {\"name\": \"sinosoft-technology-e-government-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sinosoft-technology-e-government-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"sinosoft-technology-e-government-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"app_themes/1/style.css\", \"homepages/content_page.aspx\", \"window.location = \\\"homepages/index.aspx\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sinosoft-technology-e-government-system.yaml\"}, {\"id\": \"siteengine\", \"info\": {\"name\": \"siteengine\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,siteengine\", \"severity\": \"info\", \"metadata\": {\"product\": \"siteengine\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"boka siteengine\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\siteengine.yaml\"}, {\"id\": \"sitegenius\", \"info\": {\"name\": \"sitegenius\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sitegenius\", \"severity\": \"info\", \"metadata\": {\"product\": \"sitegenius\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var portalbrowser = window.open('popup.php?page_type='+page_type+'&lang=\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sitegenius.yaml\"}, {\"id\": \"siteserver\", \"info\": {\"name\": \"siteserver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,siteserver\", \"severity\": \"info\", \"metadata\": {\"product\": \"siteserver\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"http://www.siteserver.cn\", \"powered by\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"siteserver\", \"t_系统首页模板\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"sitefiles\", \"siteserver cms\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\siteserver.yaml\"}, {\"id\": \"skillsoft-skillport-lms\", \"info\": {\"name\": \"skillsoft-skillport-lms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,skillsoft-skillport-lms\", \"severity\": \"info\", \"metadata\": {\"product\": \"skillsoft-skillport-lms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<table border=\\\"0\\\" width=\\\"100%\\\" id=\\\"logobanner\\\"><tr width=\\\"100%\\\"><td  width=\\\"82%\\\"><img src=\\\"https://customer.skillport.com/spcustom/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\skillsoft-skillport-lms.yaml\"}, {\"id\": \"slideshowpro-director\", \"info\": {\"name\": \"slideshowpro-director\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,slideshowpro-director\", \"severity\": \"info\", \"metadata\": {\"product\": \"slideshowpro-director\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"</div> <!--close login-container--></body>\", \"<div id=\\\"simple-footer\\\"><span>slideshowpro director\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\slideshowpro-director.yaml\"}, {\"id\": \"sma-sunny_webbox\", \"info\": {\"name\": \"sma-sunny_webbox\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sma-sunny_webbox\", \"severity\": \"info\", \"metadata\": {\"product\": \"sma-sunny_webbox\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<meta http-equiv=\\\"refresh\\\" content=\\\"0; url=/culture/index.dml\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sma-sunny_webbox.yaml\"}, {\"id\": \"smart-cms\", \"info\": {\"name\": \"smart-cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,smart-cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"smart-cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"name=\\\"formdoc\\\" action=\\\"/hz/sys/login/logined.jsp\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\smart-cms.yaml\"}, {\"id\": \"smartbi\", \"info\": {\"name\": \"smartbi\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,smartbi\", \"severity\": \"info\", \"metadata\": {\"product\": \"smartbi\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"gcfutil = jsloader.resolve('smartbi.gcf.gcfutil')\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\smartbi.yaml\"}, {\"id\": \"smartcds\", \"info\": {\"name\": \"smartcds\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,smartcds\", \"severity\": \"info\", \"metadata\": {\"product\": \"smartcds\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: smartcds\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\smartcds.yaml\"}, {\"id\": \"smartcityconstructionprojectmanagementsystem\", \"info\": {\"name\": \"smartcityconstructionprojectmanagementsystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,smartcityconstructionprojectmanagementsystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"smartcityconstructionprojectmanagementsystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=\\\"sitenametitle\\\">智慧城建项目管理系统</p\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\smartcityconstructionprojectmanagementsystem.yaml\"}, {\"id\": \"smartcommunityintegratedmanagementcloudplatform\", \"info\": {\"name\": \"smartcommunityintegratedmanagementcloudplatform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,smartcommunityintegratedmanagementcloudplatform\", \"severity\": \"info\", \"metadata\": {\"product\": \"smartcommunityintegratedmanagementcloudplatform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"container_huanlegendtext\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\smartcommunityintegratedmanagementcloudplatform.yaml\"}, {\"id\": \"smartermail\", \"info\": {\"name\": \"smartermail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,smartermail\", \"severity\": \"info\", \"metadata\": {\"product\": \"smartermail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href='http://www.smartertools.com/smartermail/mail-server-software.aspx' target='_blank>smartermail\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\smartermail.yaml\"}, {\"id\": \"smarterstats\", \"info\": {\"name\": \"smarterstats\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,smarterstats\", \"severity\": \"info\", \"metadata\": {\"product\": \"smarterstats\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<td class=bar1inner>smarterstats\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\smarterstats.yaml\"}, {\"id\": \"smartertools-smartermail\", \"info\": {\"name\": \"smartertools-smartermail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,smartertools-smartermail\", \"severity\": \"info\", \"metadata\": {\"product\": \"smartertools-smartermail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href='http://www.smartertools.com/smartermail/mail-server-software.aspx' target='_blank'>smartermail\", \"login - smartermail\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\smartertools-smartermail.yaml\"}, {\"id\": \"smartoa\", \"info\": {\"name\": \"smartoa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,smartoa\", \"severity\": \"info\", \"metadata\": {\"product\": \"smartoa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/smartoa.plist\", \"href=\\\"http://www.smartoa.com.cn/download/smartoa.apk\\\">安卓客户端</a>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\smartoa.yaml\"}, {\"id\": \"smartthumbs\", \"info\": {\"name\": \"smartthumbs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,smartthumbs\", \"severity\": \"info\", \"metadata\": {\"product\": \"smartthumbs\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by<a href=\\\"http://www.smart-scripts.com\\\">smart thumbs</a>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\smartthumbs.yaml\"}, {\"id\": \"smf\", \"info\": {\"name\": \"smf\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,smf\", \"severity\": \"info\", \"metadata\": {\"product\": \"smf\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://www.simplemachines.org/about/copyright.php\\\" title=\\\"free forum software\\\" target=\\\"_blank\", \"<img class=\\\"floatright\\\" id=\\\"smflogo\\\" src=\", \"document.getelementbyid(\\\"upshrink\\\").src = smf_images_url + \"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\smf.yaml\"}, {\"id\": \"smokeping\", \"info\": {\"name\": \"smokeping\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,smokeping\", \"severity\": \"info\", \"metadata\": {\"product\": \"smokeping\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://oss.oetiker.ch/smokeping/counter.cgi/\", \"<tr><td class=\\\"menuitem\\\" colspan=\\\"2\\\">&nbsp;-&nbsp;<a class=\\\"menulink\\\" href=\\\"?target=\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\smokeping.yaml\"}, {\"id\": \"snb-stock-trading-software\", \"info\": {\"name\": \"snb-stock-trading-software\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,snb-stock-trading-software\", \"severity\": \"info\", \"metadata\": {\"product\": \"snb-stock-trading-software\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"copyright 2005–2009 <a href=\\\"http://www.s-mo.com\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\snb-stock-trading-software.yaml\"}, {\"id\": \"socomec-webserver\", \"info\": {\"name\": \"socomec-webserver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,socomec-webserver\", \"severity\": \"info\", \"metadata\": {\"product\": \"socomec-webserver\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"diag.htm?src=index\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\socomec-webserver.yaml\"}, {\"id\": \"soeasy-website-cluster-system\", \"info\": {\"name\": \"soeasy-website-cluster-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,soeasy-website-cluster-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"soeasy-website-cluster-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"egss_user\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\soeasy-website-cluster-system.yaml\"}, {\"id\": \"soffice\", \"info\": {\"name\": \"soffice\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,soffice\", \"severity\": \"info\", \"metadata\": {\"product\": \"soffice\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>soffice登录</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\soffice.yaml\"}, {\"id\": \"soft78-system\", \"info\": {\"name\": \"soft78-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,soft78-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"soft78-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"add by sll\", \"offlineservice/showdownloadmessage.aspx\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\soft78-system.yaml\"}, {\"id\": \"softbiz-online-auctions-script\", \"info\": {\"name\": \"softbiz-online-auctions-script\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,softbiz-online-auctions-script\", \"severity\": \"info\", \"metadata\": {\"product\": \"softbiz-online-auctions-script\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by <a href=\\\"http://www.softbizscripts.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\softbiz-online-auctions-script.yaml\"}, {\"id\": \"softbiz-online-classifieds\", \"info\": {\"name\": \"softbiz-online-classifieds\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,softbiz-online-classifieds\", \"severity\": \"info\", \"metadata\": {\"product\": \"softbiz-online-classifieds\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"http://www.softbizscripts.com/classified-ads-plus-script-features.php\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\softbiz-online-classifieds.yaml\"}, {\"id\": \"softnext-spam-sqr-fan-la-ji-you-jian-xi-tong\", \"info\": {\"name\": \"softnext-spam-sqr反垃圾邮件系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,softnext-spam-sqr反垃圾邮件系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"softnext-spam-sqr反垃圾邮件系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"snspam/spam_request/\", \"spam sqr\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\softnext-spam-sqr反垃圾邮件系统.yaml\"}, {\"id\": \"softnext-spam\", \"info\": {\"name\": \"softnext-spam\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,softnext-spam\", \"severity\": \"info\", \"metadata\": {\"product\": \"softnext-spam\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"snspam/spam_request/\", \"snspam/start_page.asp\", \"spam_request/spam_requestact.asp\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\softnext-spam.yaml\"}, {\"id\": \"solarview-compact\", \"info\": {\"name\": \"solarview-compact\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,solarview-compact\", \"severity\": \"info\", \"metadata\": {\"product\": \"solarview-compact\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"refresh\\\" content=\\\"3; url=solar_menu.php\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\solarview-compact.yaml\"}, {\"id\": \"solidyne-inet-server\", \"info\": {\"name\": \"solidyne-inet-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,solidyne-inet-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"solidyne-inet-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<frame name=\\\"frleft\\\" scrolling=\\\"no\\\" id=\\\"frleft\\\" src=\\\"qfrleft.aspx\\\">\", \"<meta http-equiv=\\\"refresh\\\" content=\\\"0; url=/hmi/\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\solidyne-inet-server.yaml\"}, {\"id\": \"sonarqube\", \"info\": {\"name\": \"sonarqube\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sonarqube\", \"severity\": \"info\", \"metadata\": {\"product\": \"sonarqube\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"sonarqube\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sonarqube.yaml\"}, {\"id\": \"sonicwall-ssl-vpn\", \"info\": {\"name\": \"sonicwall-ssl-vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sonicwall-ssl-vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"sonicwall-ssl-vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"javascript/aventail.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sonicwall-ssl-vpn.yaml\"}, {\"id\": \"sony-liv\", \"info\": {\"name\": \"sony-liv\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sony-liv\", \"severity\": \"info\", \"metadata\": {\"product\": \"sony-liv\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<meta name=\\\"author\\\" content=\\\"sony pictures networks india pvt. ltd\\\">\", \"<meta name=\\\"twitter:image\\\" content=\\\"http://sonyliv.com/asset/socialsharelogo\\\"/>\", \"content=\\\"sony liv\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sony-liv.yaml\"}, {\"id\": \"sophos-cyberoam-ssl-vpn\", \"info\": {\"name\": \"sophos-cyberoam-ssl-vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sophos-cyberoam-ssl-vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"sophos-cyberoam-ssl-vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/images/customizeimages/uploadedlogo.jpg\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sophos-cyberoam-ssl-vpn.yaml\"}, {\"id\": \"sophos-cyberoam-sslvpn\", \"info\": {\"name\": \"sophos-cyberoam-sslvpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sophos-cyberoam-sslvpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"sophos-cyberoam-sslvpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"cyberoam ssl vpn portal\", \"sslvpnuserportalloginform\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sophos-cyberoam-sslvpn.yaml\"}, {\"id\": \"sophos-utm-web-protection\", \"info\": {\"name\": \"sophos-utm-web-protection\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sophos-utm-web-protection\", \"severity\": \"info\", \"metadata\": {\"product\": \"sophos-utm-web-protection\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by utm web protection\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sophos-utm-web-protection.yaml\"}, {\"id\": \"sophos-web-appliance\", \"info\": {\"name\": \"sophos-web-appliance\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sophos-web-appliance\", \"severity\": \"info\", \"metadata\": {\"product\": \"sophos-web-appliance\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"url(resources/images/en/login_swa.jpg)\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sophos-web-appliance.yaml\"}, {\"id\": \"sophos-an-quan-chan-pin\", \"info\": {\"name\": \"sophos-安全产品\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sophos-安全产品\", \"severity\": \"info\", \"metadata\": {\"product\": \"sophos-安全产品\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<span class='logosophosfooterfont'>protected by</span>\", \"blocked site\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sophos-安全产品.yaml\"}, {\"id\": \"sosen-airsoft\", \"info\": {\"name\": \"sosen-airsoft\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sosen-airsoft\", \"severity\": \"info\", \"metadata\": {\"product\": \"sosen-airsoft\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"pages/login_@del.jsp\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sosen-airsoft.yaml\"}, {\"id\": \"sourcebans\", \"info\": {\"name\": \"sourcebans\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sourcebans\", \"severity\": \"info\", \"metadata\": {\"product\": \"sourcebans\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div id=\\\"footqversion\\\">version(\", \"http://www.sourcebans.net\\\" target=\\\"_blank\\\"><img src=\\\"images/sb.png\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sourcebans.yaml\"}, {\"id\": \"sourcecode-k2\", \"info\": {\"name\": \"sourcecode-k2\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sourcecode-k2\", \"severity\": \"info\", \"metadata\": {\"product\": \"sourcecode-k2\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"document.getelementbyid(\\\"redirectform\\\").action = \\\"../mxworkspace/login.aspx\", \"document.getelementbyid(\\\"redirectform\\\").action = \\\"../workspace/default.aspx\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sourcecode-k2.yaml\"}, {\"id\": \"southidc\", \"info\": {\"name\": \"southidc\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,southidc\", \"severity\": \"info\", \"metadata\": {\"product\": \"southidc\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/southidcj2f.js\", \"/southidckefu.js\", \"content=\\\"copyright 2003-2015 - southidc.net\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\southidc.yaml\"}, {\"id\": \"sovell-shop-api\", \"info\": {\"name\": \"雄伟科技餐厅数字化综合管理平台-前台api\", \"author\": \"jlkl\", \"tags\": \"detect,tech,sovell-shop-api\", \"severity\": \"info\", \"metadata\": {\"product\": \"sovell-shop-api\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"sovell shop api\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sovell-shop-api.yaml\"}, {\"id\": \"sovell-shop-manage\", \"info\": {\"name\": \"雄伟科技餐厅数字化综合管理平台-后台管理平台\", \"author\": \"jlkl\", \"tags\": \"detect,tech,sovell-shop-manage\", \"severity\": \"info\", \"metadata\": {\"product\": \"sovell-shop-manage\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/content/css/shop_style.css\", \"餐厅数字化综合管理平台\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sovell-shop-manage.yaml\"}, {\"id\": \"spammark-you-jian-xin-xi-an-quan-wang-guan\", \"info\": {\"name\": \"spammark邮件信息安全网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,spammark邮件信息安全网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"spammark邮件信息安全网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/spammark?noframes=1\", \"href=\\\"spammark16.ico\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\spammark邮件信息安全网关.yaml\"}, {\"id\": \"spark-history-server\", \"info\": {\"name\": \"spark-history-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,spark-history-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"spark-history-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/static/historypage-common.js\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\spark-history-server.yaml\"}, {\"id\": \"spark-jobs\", \"info\": {\"name\": \"spark-jobs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,spark-jobs\", \"severity\": \"info\", \"metadata\": {\"product\": \"spark-jobs\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/jobs/job?id=\", \"spark jobs\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\spark-jobs.yaml\"}, {\"id\": \"spark\", \"info\": {\"name\": \"spark\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,spark\", \"severity\": \"info\", \"metadata\": {\"product\": \"spark\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"serversparkversion\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\spark.yaml\"}, {\"id\": \"special-device-testing-risk-assessment-system\", \"info\": {\"name\": \"special-device-testing-risk-assessment-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,special-device-testing-risk-assessment-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"special-device-testing-risk-assessment-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var unitid = getpagerequestvalue(\\\"unitid\\\")\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\special-device-testing-risk-assessment-system.yaml\"}, {\"id\": \"speed-test\", \"info\": {\"name\": \"speed-test\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,speed-test\", \"severity\": \"info\", \"metadata\": {\"product\": \"speed-test\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"classid=\\\"clsid:53028063-426b-446d-85f9-62e9e3dc5501\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\speed-test.yaml\"}, {\"id\": \"spiceworks\", \"info\": {\"name\": \"spiceworks\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,spiceworks\", \"severity\": \"info\", \"metadata\": {\"product\": \"spiceworks\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h1><img alt=\\\"spiceworks\\\" src=\\\"/images/logos/large.png\", \"<link href=\\\"/stylesheets/general.css?\", \"<meta name=\\\"author\\\" content=\\\"spiceworks, inc.\\\" />\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\spiceworks.yaml\"}, {\"id\": \"splunk-enterprise\", \"info\": {\"name\": \"splunk-enterprise\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"splunk-enterprise\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"__splunkd_partials__\", \"enterprise\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"server: splunkd\"], \"part\": \"header\", \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"e60c968e8ff3cc2f4fb869588e83afc6\"]}, {\"type\": \"word\", \"words\": [\"account/login?return_to\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\splunk-enterprise.yaml\"}, {\"id\": \"splunkd\", \"info\": {\"name\": \"splunkd\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,splunkd\", \"severity\": \"info\", \"metadata\": {\"product\": \"splunkd\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>splunkd</title>\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"server: splunkd\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\splunkd.yaml\"}, {\"id\": \"spring-boot-admin\", \"info\": {\"name\": \"spring-boot-admin\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,spring-boot-admin\", \"severity\": \"info\", \"metadata\": {\"product\": \"spring-boot-admin\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<img src=\\\"assets/img/icon-spring-boot-admin.svg\", \"spring boot admin\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\spring-boot-admin.yaml\"}, {\"id\": \"spring-cloud-netflix\", \"info\": {\"name\": \"spring-cloud-netflix\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,spring-cloud-netflix\", \"severity\": \"info\", \"metadata\": {\"product\": \"spring-cloud-netflix\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"x-application-context: hystrix-dashboard:\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\spring-cloud-netflix.yaml\"}, {\"id\": \"spring-framework-error\", \"info\": {\"name\": \"spring-framework-error\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,spring-framework\", \"severity\": \"info\", \"metadata\": {\"product\": \"spring-framework-error\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"POST\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"\\\",\\\"status\\\":404,\\\"error\\\":\\\"not found\\\",\\\"message\\\":\\\"no message available\\\",\\\"path\\\":\\\"/\", \"whitelabel error page\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\spring-framework-error.yaml\"}, {\"id\": \"spring-framework\", \"info\": {\"name\": \"spring-framework\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,spring-framework\", \"severity\": \"info\", \"metadata\": {\"product\": \"spring-framework\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"0488faca4c19046b94d07c3ee83cf9d6\"]}, {\"type\": \"word\", \"words\": [\"\\\",\\\"status\\\":404,\\\"error\\\":\\\"not found\\\",\\\"message\\\":\\\"no message available\\\",\\\"path\\\":\\\"/\", \"whitelabel error page\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"www-authenticate: basic realm=\\\"spring\\\"\", \"x-application-context:\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\spring-framework.yaml\"}, {\"id\": \"springer\", \"info\": {\"name\": \"springer\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,springer\", \"severity\": \"info\", \"metadata\": {\"product\": \"springer\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"//static.springer.com/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\springer.yaml\"}, {\"id\": \"sq580-system\", \"info\": {\"name\": \"sq580-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sq580-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"sq580-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"3cspan id='cnzz_stat_icon_1274142628\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sq580-system.yaml\"}, {\"id\": \"sql-buddy\", \"info\": {\"name\": \"sql-buddy\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sql-buddy\", \"severity\": \"info\", \"metadata\": {\"product\": \"sql-buddy\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"h3><a href=\\\"http://www.sqlbuddy.com/help\", \"href=\\\"themes/bittersweet/css/main.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sql-buddy.yaml\"}, {\"id\": \"squarespace\", \"info\": {\"name\": \"squarespace\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,squarespace\", \"severity\": \"info\", \"metadata\": {\"product\": \"squarespace\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"new squarespace.fixedpositiontip(\\\"logout successful\\\", \\\"you have been successfully logged out.\\\", { xmargin: 15, ymargin: 15, icon: \\\"/universal/images/helptip-info.png\\\", orientation: \\\"upper-right\\\", viewportfixed: true, autohide: 1800 }).show();\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\squarespace.yaml\"}, {\"id\": \"srs-live-server\", \"info\": {\"name\": \"srs-live-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,srs-live-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"srs-live-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"players/js/winlin.utility.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\srs-live-server.yaml\"}, {\"id\": \"staragent\", \"info\": {\"name\": \"staragent\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,staragent\", \"severity\": \"info\", \"metadata\": {\"product\": \"staragent\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/aisc/aisc.css\", \"window.location = \\\"/user/home.jsx\\\";\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\staragent.yaml\"}, {\"id\": \"stardot-express\", \"info\": {\"name\": \"stardot-express\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,stardot-express\", \"severity\": \"info\", \"metadata\": {\"product\": \"stardot-express\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<tr><td><a href=\\\"http://www.stardot.com\\\" target=\\\"_blank\\\"><img src=\\\"logo.gif\\\" alt=\\\"\\\" width=\\\"227\\\" height=\\\"45\\\"></a></td>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\stardot-express.yaml\"}, {\"id\": \"startbbs\", \"info\": {\"name\": \"startbbs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,startbbs\", \"severity\": \"info\", \"metadata\": {\"product\": \"startbbs\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"startbbs\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\startbbs.yaml\"}, {\"id\": \"startbootstrap-product\", \"info\": {\"name\": \"startbootstrap-product\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,startbootstrap-product\", \"severity\": \"info\", \"metadata\": {\"product\": \"startbootstrap-product\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"img/portfolio/thumbnails/4.jpg\\\"\", \"we've got what you need!</h2>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\startbootstrap-product.yaml\"}, {\"id\": \"statusnet\", \"info\": {\"name\": \"statusnet\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,statusnet\", \"severity\": \"info\", \"metadata\": {\"product\": \"statusnet\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<p>this site is powered by <a href=\\\"http://status.net/\\\">statusnet</a> version\", \"it runs the <a href=\\\"http://status.net/\\\">statusnet</a> microblogging software, version \"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\statusnet.yaml\"}, {\"id\": \"storage-management\", \"info\": {\"name\": \"storage-management\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,storage-management\", \"severity\": \"info\", \"metadata\": {\"product\": \"storage-management\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"firmware version: stor_2.0\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\storage-management.yaml\"}, {\"id\": \"storm\", \"info\": {\"name\": \"storm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,storm\", \"severity\": \"info\", \"metadata\": {\"product\": \"storm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"stormtimestr\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\storm.yaml\"}, {\"id\": \"subrion-cms\", \"info\": {\"name\": \"subrion-cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,subrion-cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"subrion-cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"subrion cms\", \"href=\\\"http://www.subrion.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\subrion-cms.yaml\"}, {\"id\": \"subsonic-as-subsonic\", \"info\": {\"name\": \"subsonic-as-subsonic\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,subsonic-as-subsonic\", \"severity\": \"info\", \"metadata\": {\"product\": \"subsonic-as-subsonic\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"onload=\\\"document.getelementbyid('j_username').focus()\\\"\", \"parent.frames.upper.keyboardshortcut(\\\"showindex\\\", index.touppercase());\", \"subsonic\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\subsonic-as-subsonic.yaml\"}, {\"id\": \"sucuri\", \"info\": {\"name\": \"sucuri\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sucuri\", \"severity\": \"info\", \"metadata\": {\"product\": \"sucuri\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"cloudproxy@sucuri.net\", \"sucuri website firewall - cloudproxy - access denied\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sucuri.yaml\"}, {\"id\": \"suitecrm\", \"info\": {\"name\": \"suitecrm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,suitecrm\", \"severity\": \"info\", \"metadata\": {\"product\": \"suitecrm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"alt=\\\"suitecrm\\\"\", \"src=\\\"custom/themes/default/images/company_logo.png\", \"src=\\\"img/suitecrm.png\\\" alt=\\\"bitnami suitecrm stack\\\"\", \"sugar.themes.theme_name      = 'suiter'\", \"sugar.themes.theme_name = 'suitep'\", \"supercharged by suitecrm\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"set-cookie: sugar_user_theme=suitep\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\suitecrm.yaml\"}, {\"id\": \"sun-glassfish\", \"info\": {\"name\": \"sun-glassfish\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sun-glassfish\", \"severity\": \"info\", \"metadata\": {\"product\": \"sun-glassfish\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"glassfish community\", \"webui/jsf\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sun-glassfish.yaml\"}, {\"id\": \"sun-java-system-calendar-express\", \"info\": {\"name\": \"sun-java-system-calendar-express\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sun-java-system-calendar-express\", \"severity\": \"info\", \"metadata\": {\"product\": \"sun-java-system-calendar-express\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<img src=\\\"imx/login-logo.gif\\\" width=\\\"186\\\" height=\\\"79\\\" alt=\\\"sun microsystems, inc.\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sun-java-system-calendar-express.yaml\"}, {\"id\": \"sun-web-server\", \"info\": {\"name\": \"sun-web-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sun-web-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"sun-web-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: sun-web-server\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sun-web-server.yaml\"}, {\"id\": \"sunboxsoft-marketing\", \"info\": {\"name\": \"sunboxsoft-marketing\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sunboxsoft-marketing\", \"severity\": \"info\", \"metadata\": {\"product\": \"sunboxsoft-marketing\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/sunbox/assets/js/ace.min.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sunboxsoft-marketing.yaml\"}, {\"id\": \"suncere-system\", \"info\": {\"name\": \"suncere-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,suncere-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"suncere-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"技术支持：广东旭诚科技有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\suncere-system.yaml\"}, {\"id\": \"sundray-qi-ye-fang-huo-qiang\", \"info\": {\"name\": \"sundray-企业防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sundray-企业防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"sundray-企业防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"help = decodeuricomponent(version_info_ch)\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sundray-企业防火墙.yaml\"}, {\"id\": \"sungoin-traffic-management-platform\", \"info\": {\"name\": \"sungoin-traffic-management-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sungoin-traffic-management-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"sungoin-traffic-management-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"尚景流量管理平台\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sungoin-traffic-management-platform.yaml\"}, {\"id\": \"sunline-cmdb\", \"info\": {\"name\": \"sunline-cmdb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sunline-cmdb\", \"severity\": \"info\", \"metadata\": {\"product\": \"sunline-cmdb\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"sunline co\", \"var key = \\\"sunlines\\\";\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sunline-cmdb.yaml\"}, {\"id\": \"superdata-oa\", \"info\": {\"name\": \"superdata-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,superdata-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"superdata-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"速达软件技术（广州）有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\superdata-oa.yaml\"}, {\"id\": \"supermap-gis\", \"info\": {\"name\": \"supermap-gis\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,supermap-gis\", \"severity\": \"info\", \"metadata\": {\"product\": \"supermap-gis\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"北京超图软件股份有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\supermap-gis.yaml\"}, {\"id\": \"supermap-iserver\", \"info\": {\"name\": \"supermap-iserver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,supermap-iserver\", \"severity\": \"info\", \"metadata\": {\"product\": \"supermap-iserver\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=\\\"copyright\\\"><a href=\\\"http://www.supermap.com.cn\", \"window.location.href=\\\"iserver\\\";\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\supermap-iserver.yaml\"}, {\"id\": \"superv-meeting\", \"info\": {\"name\": \"superv-meeting\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,superv-meeting\", \"severity\": \"info\", \"metadata\": {\"product\": \"superv-meeting\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=\\\"ctl00_topcontrol1_lblsitedescription\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\superv-meeting.yaml\"}, {\"id\": \"support-incident-tracker\", \"info\": {\"name\": \"support-incident-tracker\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,support-incident-tracker\", \"severity\": \"info\", \"metadata\": {\"product\": \"support-incident-tracker\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div class='windowtitle'>sit! - login</div>\", \"content=\\\"sit! support incident tracker\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\support-incident-tracker.yaml\"}, {\"id\": \"surdoc\", \"info\": {\"name\": \"surdoc\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,surdoc\", \"severity\": \"info\", \"metadata\": {\"product\": \"surdoc\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h1>欢迎使用360书生云盘！</h1>\", \"<p>copyright@2016 pan.surdoc.net all rights</p>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\surdoc.yaml\"}, {\"id\": \"suremail\", \"info\": {\"name\": \"suremail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,suremail\", \"severity\": \"info\", \"metadata\": {\"product\": \"suremail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<span> 客服邮箱：support@suremail.cn</span>\", \"content=\\\"北京国信安邮科技有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\suremail.yaml\"}, {\"id\": \"suyaxing-campus-management-system\", \"info\": {\"name\": \"suyaxing-campus-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,suyaxing-campus-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"suyaxing-campus-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/ws2004/public/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\suyaxing-campus-management-system.yaml\"}, {\"id\": \"swagger\", \"info\": {\"name\": \"swagger\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,swagger\", \"severity\": \"info\", \"metadata\": {\"product\": \"swagger\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"swagger ui\", \"swagger-ui.css\", \"swagger-ui.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\swagger.yaml\"}, {\"id\": \"sweetrice\", \"info\": {\"name\": \"sweetrice\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sweetrice\", \"severity\": \"info\", \"metadata\": {\"product\": \"sweetrice\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"sweetrice\", \"powered by <a href=\\\"http://www.basic-cms.org\\\">basic cms sweetrice</a>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sweetrice.yaml\"}, {\"id\": \"swiki\", \"info\": {\"name\": \"swiki\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,swiki\", \"severity\": \"info\", \"metadata\": {\"product\": \"swiki\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://minnow.cc.gatech.edu/swiki\\\" title=\\\"comswiki: powered by squeak\\\"><img src=\\\"/defaultscheme/comswiki.gif\\\" border=0 width=277 height=88 alt=\\\"comswiki: powered by squeak\\\"></a><br>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\swiki.yaml\"}, {\"id\": \"sx-shop\", \"info\": {\"name\": \"sx-shop\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sx-shop\", \"severity\": \"info\", \"metadata\": {\"product\": \"sx-shop\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"alert(\\\"ihr suchbegriff muss mind. aus 3 zeichen bestehen.\\\");\", \"content=\\\"source worx - software development\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sx-shop.yaml\"}, {\"id\": \"sxt234-system\", \"info\": {\"name\": \"sxt234-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sxt234-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"sxt234-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div class=\\\"head_right\\\" onclick=\\\"window_close()\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sxt234-system.yaml\"}, {\"id\": \"sxzrouter-caching\", \"info\": {\"name\": \"sxzrouter-caching\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sxzrouter-caching\", \"severity\": \"info\", \"metadata\": {\"product\": \"sxzrouter-caching\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\" href=\\\"http://www.dwcache.com\\\"\", \"src=\\\"/public/sec/assets/js/libs/jquery.placeholder.min.js\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sxzrouter-caching.yaml\"}, {\"id\": \"symantec-client-security\", \"info\": {\"name\": \"symantec-client-security\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,symantec-client-security\", \"severity\": \"info\", \"metadata\": {\"product\": \"symantec-client-security\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!-- symantec client security web based installation -->\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\symantec-client-security.yaml\"}, {\"id\": \"symantec-endpoint-protection-manager\", \"info\": {\"name\": \"symantec-endpoint-protection-manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,symantec-endpoint-protection-manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"symantec-endpoint-protection-manager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/portal/about.jsp\", \"<!-- now, if it is ie on windows platform, we check to see which version of jws is installed -->\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"<div style=\\\"font-family: tahoma, verdana, arial, helvetica, sans-serif; font-size:11px;\\\">version\", \"<tr><td align=\\\"left\\\" style=\\\"font-family:arial; font-size:18pt\\\"><b>symantec endpoint protection manager<br>web access</b></td></tr>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\symantec-endpoint-protection-manager.yaml\"}, {\"id\": \"symantec-thawte_ssl_cert\", \"info\": {\"name\": \"symantec-thawte_ssl_cert\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,symantec-thawte_ssl_cert\", \"severity\": \"info\", \"metadata\": {\"product\": \"symantec-thawte_ssl_cert\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"https://seal.thawte.com/getthawteseal\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\symantec-thawte_ssl_cert.yaml\"}, {\"id\": \"symfony\", \"info\": {\"name\": \"symfony\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,symfony\", \"severity\": \"info\", \"metadata\": {\"product\": \"symfony\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by <a href=\\\"http://www.symfony-project.org/\\\">\", \"powered by symfony\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\symfony.yaml\"}, {\"id\": \"sympa-mailing-list-server\", \"info\": {\"name\": \"sympa-mailing-list-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sympa-mailing-list-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"sympa-mailing-list-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"alt=\\\"sympa logo\", \"content=\\\"sympa\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sympa-mailing-list-server.yaml\"}, {\"id\": \"synology-diskstation-nas\", \"info\": {\"name\": \"synology-diskstation-nas\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,synology-diskstation-nas\", \"severity\": \"info\", \"metadata\": {\"product\": \"synology-diskstation-nas\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"diskstation\", \"modules\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"<meta name=\\\"application-name\\\" content=\\\"synology diskstation\", \"webman/modules\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\synology-diskstation-nas.yaml\"}, {\"id\": \"synology-dms\", \"info\": {\"name\": \"synology-dms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,synology-dms\", \"severity\": \"info\", \"metadata\": {\"product\": \"synology-dms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"logo-dsm\\\"\", \"class=\\\"logo-synology\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\synology-dms.yaml\"}, {\"id\": \"synology-photo-station\", \"info\": {\"name\": \"synology-photo-station\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,synology-photo-station\", \"severity\": \"info\", \"metadata\": {\"product\": \"synology-photo-station\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"album\", \"content=\\\"photo station\", \"content=\\\"photo station 6\\\"\", \"content=\\\"service_not_available\\\"\", \"photo_new/syno_photo_main.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\synology-photo-station.yaml\"}, {\"id\": \"synology-router-manager\", \"info\": {\"name\": \"synology-router-manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,synology-router-manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"synology-router-manager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"synologyrouter\", \"hostname\\\" : \\\"synologyrouter\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\synology-router-manager.yaml\"}, {\"id\": \"synology-webstation\", \"info\": {\"name\": \"synology-webstation\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,synology-webstation\", \"severity\": \"info\", \"metadata\": {\"product\": \"synology-webstation\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=\\\"paragraph\\\">web station has been enabled. to finish setting up your website, please see the \\\"web service\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\synology-webstation.yaml\"}, {\"id\": \"sysaid-help-desk\", \"info\": {\"name\": \"sysaid-help-desk\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"sysaid-help-desk\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"sysaid-logo-dark-green.png\", \"www.sysaid.com\", \"<title>sysaid help desk software</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\sysaid-help-desk.yaml\"}, {\"id\": \"tab-and-link-manager\", \"info\": {\"name\": \"tab-and-link-manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tab-and-link-manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"tab-and-link-manager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div id=\\\"footer_copyright\\\" class=\\\"shade footer_copyright\\\">powered by <a href=\\\"http://www.wolfshead-solutions.com/ws-products/product-1\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tab-and-link-manager.yaml\"}, {\"id\": \"tableau\", \"info\": {\"name\": \"tableau\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tableau\", \"severity\": \"info\", \"metadata\": {\"product\": \"tableau\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"783f669ae8336979325ef497a5e43037\"]}, {\"type\": \"word\", \"words\": [\"src=\\\"/javascripts/api/tableau-\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tableau.yaml\"}, {\"id\": \"tamronos-iptv-xi-tong\", \"info\": {\"name\": \"tamronos iptv系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"tamronos iptv系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"// 您安装tamronos的硬件系统无法满足系统的基本需求条件，继续运行可能会 造成系统无法正常运行\", \"<title>tamronos iptv系统</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tamronos iptv系统.yaml\"}, {\"id\": \"taocms\", \"info\": {\"name\": \"taocms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,taocms\", \"severity\": \"info\", \"metadata\": {\"product\": \"taocms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/taocms/code/calendar.js\\\"\", \"template/taocms\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\taocms.yaml\"}, {\"id\": \"taskfreak\", \"info\": {\"name\": \"taskfreak\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,taskfreak\", \"severity\": \"info\", \"metadata\": {\"product\": \"taskfreak\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://www.taskfreak.com\\\">taskfreak\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\taskfreak.yaml\"}, {\"id\": \"tass-smart-auditor\", \"info\": {\"name\": \"tass-smart-auditor\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tass-smart-auditor\", \"severity\": \"info\", \"metadata\": {\"product\": \"tass-smart-auditor\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"北京江南天安科技有限公司\", \"灵志日志审计系统\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tass-smart-auditor.yaml\"}, {\"id\": \"tbk-dvr\", \"info\": {\"name\": \"tbk-dvr\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tbk-dvr\", \"severity\": \"info\", \"metadata\": {\"product\": \"tbk-dvr\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div class='log-dvr-logo'>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tbk-dvr.yaml\"}, {\"id\": \"tccms\", \"info\": {\"name\": \"tccms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tccms\", \"severity\": \"info\", \"metadata\": {\"product\": \"tccms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"index.php?ac=link_more\", \"index.php?ac=news_list\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tccms.yaml\"}, {\"id\": \"tcexam\", \"info\": {\"name\": \"tcexam\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tcexam\", \"severity\": \"info\", \"metadata\": {\"product\": \"tcexam\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a name=\\\"topofdoc\\\" id=\\\"topofdoc\\\"></a>\", \"content=\\\"nicola asuni - tecnick.com s.r.l.\\\" />\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tcexam.yaml\"}, {\"id\": \"team-board\", \"info\": {\"name\": \"team-board\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,team-board\", \"severity\": \"info\", \"metadata\": {\"product\": \"team-board\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"licence.asp\\\"><b style='color:#ff9900'>\", \"href=http://www.team5.cn\\\"><b>team \", \"team5.cn by daymoon\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\team-board.yaml\"}, {\"id\": \"teamdoc-filesystem\", \"info\": {\"name\": \"teamdoc-filesystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,teamdoc-filesystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"teamdoc-filesystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=\\\"labellink\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\teamdoc-filesystem.yaml\"}, {\"id\": \"teamviewer\", \"info\": {\"name\": \"teamviewer\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,teamviewer\", \"severity\": \"info\", \"metadata\": {\"product\": \"teamviewer\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"teamviewer\", \"this site is running\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"<a href='http://www.teamviewer.com'>teamviewer</a>\", \"this site is running\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\teamviewer.yaml\"}, {\"id\": \"techbridge-cloud-conference\", \"info\": {\"name\": \"techbridge-cloud-conference\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,techbridge-cloud-conference\", \"severity\": \"info\", \"metadata\": {\"product\": \"techbridge-cloud-conference\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/images/web_meeting/tool_bg.jpg\", \"/joinmeeting.js\", \"href=\\\"http://www.techbridge-inc.com/\\\" target=\\\"_blank\\\"></a></span>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\techbridge-cloud-conference.yaml\"}, {\"id\": \"telenor-4g-router\", \"info\": {\"name\": \"telenor-4g-router\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,telenor-4g-router\", \"severity\": \"info\", \"metadata\": {\"product\": \"telenor-4g-router\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<form id=\\\"default_login\\\" name=\\\"default_login\\\" method=\\\"post\\\" action=\\\"/goform/user_login\\\">\", \"please power off and plug in (u)sim card. then power on again. or pin is permanently blocked, please contact the provider\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\telenor-4g-router.yaml\"}, {\"id\": \"teleradiology-telrads\", \"info\": {\"name\": \"teleradiology-telrads\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,teleradiology-telrads\", \"severity\": \"info\", \"metadata\": {\"product\": \"teleradiology-telrads\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"https://clients.telrads.com/css/feedback.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\teleradiology-telrads.yaml\"}, {\"id\": \"telerik-sitefinity\", \"info\": {\"name\": \"telerik-sitefinity\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,telerik-sitefinity\", \"severity\": \"info\", \"metadata\": {\"product\": \"telerik-sitefinity\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"sitefinity\", \"telerik.web.ui.webresource.axd\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\telerik-sitefinity.yaml\"}, {\"id\": \"telinxinxi-527meeting\", \"info\": {\"name\": \"telinxinxi-527meeting\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,telinxinxi-527meeting\", \"severity\": \"info\", \"metadata\": {\"product\": \"telinxinxi-527meeting\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\" content=\\\"轻会议\\\"\", \"527meeting\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\telinxinxi-527meeting.yaml\"}, {\"id\": \"tencent-exmail\", \"info\": {\"name\": \"tencent-exmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tencent-exmail\", \"severity\": \"info\", \"metadata\": {\"product\": \"tencent-exmail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/cgi-bin/getinvestigate?flowid=\", \"content=\\\"登录腾讯企业邮箱\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tencent-exmail.yaml\"}, {\"id\": \"tencent-foxmail-server\", \"info\": {\"name\": \"tencent-foxmail-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tencent-foxmail-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"tencent-foxmail-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/images//foxs_logo.gif\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tencent-foxmail-server.yaml\"}, {\"id\": \"tengweioa\", \"info\": {\"name\": \"tengweioa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tengweioa\", \"severity\": \"info\", \"metadata\": {\"product\": \"tengweioa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/_common/scripts/global.js\", \"/valcode.aspx\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tengweioa.yaml\"}, {\"id\": \"teradata-aster\", \"info\": {\"name\": \"teradata-aster\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,teradata-aster\", \"severity\": \"info\", \"metadata\": {\"product\": \"teradata-aster\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"images/teradata_aster_logo.png\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\teradata-aster.yaml\"}, {\"id\": \"teradata-ncluster\", \"info\": {\"name\": \"teradata-ncluster\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,teradata-ncluster\", \"severity\": \"info\", \"metadata\": {\"product\": \"teradata-ncluster\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"redirecting to aster ncluster management console (amc)\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\teradata-ncluster.yaml\"}, {\"id\": \"teradata-parallel\", \"info\": {\"name\": \"teradata-parallel\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,teradata-parallel\", \"severity\": \"info\", \"metadata\": {\"product\": \"teradata-parallel\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var currentmode ='fittowindowonload\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\teradata-parallel.yaml\"}, {\"id\": \"teradici-pcoip-zero-client\", \"info\": {\"name\": \"teradici-pcoip-zero-client\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,teradici-pcoip-zero-client\", \"severity\": \"info\", \"metadata\": {\"product\": \"teradici-pcoip-zero-client\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"password_value\", \"pcoip&#174 zero client\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\teradici-pcoip-zero-client.yaml\"}, {\"id\": \"terminal-feature-collection-and-control-system\", \"info\": {\"name\": \"terminal-feature-collection-and-control-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,terminal-feature-collection-and-control-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"terminal-feature-collection-and-control-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/home/pkibinduser?subjectname=\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\terminal-feature-collection-and-control-system.yaml\"}, {\"id\": \"teslamate\", \"info\": {\"name\": \"teslamate\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,teslamate\", \"severity\": \"info\", \"metadata\": {\"product\": \"teslamate\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"0e3b30468f89fa98cb22983c89e49d0a\"]}, {\"type\": \"word\", \"words\": [\"<img alt=\\\"teslamate\\\" src=\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\teslamate.yaml\"}, {\"id\": \"thehostingtool\", \"info\": {\"name\": \"thehostingtool\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,thehostingtool\", \"severity\": \"info\", \"metadata\": {\"product\": \"thehostingtool\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://thehostingtool.com\\\" target=\\\"_blank\\\">thehostingtool</a>\", \"<td width=\\\"20%\\\"><strong>server os:</strong></td>\", \"page=status&sub=phpinfo\\\">phpinfo</a>)</td>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\thehostingtool.yaml\"}, {\"id\": \"thinker-intelligentgateway\", \"info\": {\"name\": \"thinker-intelligentgateway\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,thinker-intelligentgateway\", \"severity\": \"info\", \"metadata\": {\"product\": \"thinker-intelligentgateway\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"智能网关系统<br>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\thinker-intelligentgateway.yaml\"}, {\"id\": \"thinkjs\", \"info\": {\"name\": \"thinkjs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,thinkjs\", \"severity\": \"info\", \"metadata\": {\"product\": \"thinkjs\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"x-powered-by: thinkjs\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\thinkjs.yaml\"}, {\"id\": \"thinkmail\", \"info\": {\"name\": \"thinkmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,thinkmail\", \"severity\": \"info\", \"metadata\": {\"product\": \"thinkmail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/resource/se/common/jquery.js\", \"/webmail\\\"+\\\"/common/validatecode.do\", \"app_download\\\":\\\"\\\",\\\"thinkmail官网\", \"href='http://www.thinkcloud.cn' target='_blank'>thinkcloud</a>.all right reserved</div>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\thinkmail.yaml\"}, {\"id\": \"thinkox\", \"info\": {\"name\": \"thinkox\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,thinkox\", \"severity\": \"info\", \"metadata\": {\"product\": \"thinkox\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by thinkox\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\thinkox.yaml\"}, {\"id\": \"thinkphp-yfcmf\", \"info\": {\"name\": \"thinkphp-yfcmf\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,thinkphp-yfcmf\", \"severity\": \"info\", \"metadata\": {\"product\": \"thinkphp-yfcmf\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/public/others/maxlength.js\", \"yfcmf\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/yfcmf/yfcmf.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\thinkphp-yfcmf.yaml\"}, {\"id\": \"thinksaas\", \"info\": {\"name\": \"thinksaas\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,thinksaas\", \"severity\": \"info\", \"metadata\": {\"product\": \"thinksaas\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"https://www.thinksaas.cn/app/home/skins/default/style.css\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\thinksaas.yaml\"}, {\"id\": \"thinksns\", \"info\": {\"name\": \"thinksns\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,thinksns\", \"severity\": \"info\", \"metadata\": {\"product\": \"thinksns\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"_static/image/favicon.ico\", \"powered by <a href=\\\"http://www.thinksns.com\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\thinksns.yaml\"}, {\"id\": \"thoughtconduit\", \"info\": {\"name\": \"thoughtconduit\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,thoughtconduit\", \"severity\": \"info\", \"metadata\": {\"product\": \"thoughtconduit\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<html><head><title>error</title></head><body>your request produced an error.</body></html>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\thoughtconduit.yaml\"}, {\"id\": \"threatconnect-platform\", \"info\": {\"name\": \"threatconnect-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,threatconnect-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"threatconnect-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"threatconnect\\\" />\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\threatconnect-platform.yaml\"}, {\"id\": \"tianyang-bpm-system\", \"info\": {\"name\": \"tianyang-bpm-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tianyang-bpm-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"tianyang-bpm-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"value=\\\"sinopec.ad\\\" readonly=\\\"readonly\\\" id=\\\"ddldomains2\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tianyang-bpm-system.yaml\"}, {\"id\": \"tiger-ip-connect\", \"info\": {\"name\": \"tiger-ip-connect\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tiger-ip-connect\", \"severity\": \"info\", \"metadata\": {\"product\": \"tiger-ip-connect\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/include/tiger.css\", \"<link rel=\\\"stylesheet\\\" href=\\\"/include/firedigit.css\\\">\", \"<link rel=\\\"stylesheet\\\" href=\\\"/include/tms.css\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tiger-ip-connect.yaml\"}, {\"id\": \"tightvnc\", \"info\": {\"name\": \"tightvnc\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tightvnc\", \"severity\": \"info\", \"metadata\": {\"product\": \"tightvnc\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://www.tightvnc.com/\\\">www.tightvnc.com\", \"js/thinvnc.app.js\", \"js/thinvnc.sdk.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tightvnc.yaml\"}, {\"id\": \"tiki-wiki-cms\", \"info\": {\"name\": \"tiki-wiki-cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tiki-wiki-cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"tiki-wiki-cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"jquerytiki = new object\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tiki-wiki-cms.yaml\"}, {\"id\": \"tikiwiki\", \"info\": {\"name\": \"tikiwiki\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tikiwiki\", \"severity\": \"info\", \"metadata\": {\"product\": \"tikiwiki\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"e789cc1db6eefad0b58c9dda94f57d3c\"]}]}], \"_source_file\": \"00_unknown\\\\tikiwiki.yaml\"}, {\"id\": \"timelink\", \"info\": {\"name\": \"timelink\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,timelink\", \"severity\": \"info\", \"metadata\": {\"product\": \"timelink\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<link rel=\\\"shortcut icon\\\" type=\\\"image/png\\\" href=\\\"/timelink/images/favicon.ico\\\"/>\", \"link international corp. all rights reserved\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\timelink.yaml\"}, {\"id\": \"timestamp-server\", \"info\": {\"name\": \"timestamp-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,timestamp-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"timestamp-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"北京数字认证股份有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\timestamp-server.yaml\"}, {\"id\": \"tingjiandan-iot\", \"info\": {\"name\": \"tingjiandan-iot\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tingjiandan-iot\", \"severity\": \"info\", \"metadata\": {\"product\": \"tingjiandan-iot\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=\\\"hwebsystemtitle\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tingjiandan-iot.yaml\"}, {\"id\": \"tinyproxy\", \"info\": {\"name\": \"tinyproxy\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tinyproxy\", \"severity\": \"info\", \"metadata\": {\"product\": \"tinyproxy\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: tinyproxy/\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tinyproxy.yaml\"}, {\"id\": \"tinyrise-tinyshop\", \"info\": {\"name\": \"tinyrise-tinyshop\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tinyrise-tinyshop\", \"severity\": \"info\", \"metadata\": {\"product\": \"tinyrise-tinyshop\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"tiny_token_\", \"var server_url = '/__con__/__act__';\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tinyrise-tinyshop.yaml\"}, {\"id\": \"tipask\", \"info\": {\"name\": \"tipask\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tipask\", \"severity\": \"info\", \"metadata\": {\"product\": \"tipask\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"tipask\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tipask.yaml\"}, {\"id\": \"tisson-system\", \"info\": {\"name\": \"tisson-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tisson-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"tisson-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"dlqaweb_deploy/webresource.axd\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tisson-system.yaml\"}, {\"id\": \"titan-ftp\", \"info\": {\"name\": \"titan-ftp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,titan-ftp\", \"severity\": \"info\", \"metadata\": {\"product\": \"titan-ftp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: titan ftp server\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\titan-ftp.yaml\"}, {\"id\": \"tmailer\", \"info\": {\"name\": \"tmailer\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tmailer\", \"severity\": \"info\", \"metadata\": {\"product\": \"tmailer\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/tmailer/img/logo/favicon.ico\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tmailer.yaml\"}, {\"id\": \"tmailer_suite-tmailer-you-jian-xi-tong\", \"info\": {\"name\": \"tmailer_suite-tmailer邮件系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tmailer_suite-tmailer邮件系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"tmailer_suite-tmailer邮件系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"tmailer\", \"tmailer\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tmailer_suite-tmailer邮件系统.yaml\"}, {\"id\": \"todaymail\", \"info\": {\"name\": \"todaymail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,todaymail\", \"severity\": \"info\", \"metadata\": {\"product\": \"todaymail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"todaymail anti-spam police\", \"todaynic.com,inc.\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\todaymail.yaml\"}, {\"id\": \"tomatocart\", \"info\": {\"name\": \"tomatocart\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tomatocart\", \"severity\": \"info\", \"metadata\": {\"product\": \"tomatocart\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"tomatocart open source shopping cart solutions\\\" />\", \"powered by <a href=\\\"http://www.tomatocart.com\\\" target=\\\"_blank\\\">tomatocart</a>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tomatocart.yaml\"}, {\"id\": \"tomatocms\", \"info\": {\"name\": \"tomatocms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tomatocms\", \"severity\": \"info\", \"metadata\": {\"product\": \"tomatocms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://www.tomatocms.com\\\" title=\\\"powered by tomatocms\\\" target=\\\"_blank\\\">\", \"tomato.core.widget.loader.baseurl = 'http://\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tomatocms.yaml\"}, {\"id\": \"tomcat-monitor-uses-wadl\", \"info\": {\"name\": \"tomcat-monitor-uses-wadl\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tomcat-monitor-uses-wadl\", \"severity\": \"info\", \"metadata\": {\"product\": \"tomcat-monitor-uses-wadl\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"tomcat monitor uses wadl to describe services it can offer\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tomcat-monitor-uses-wadl.yaml\"}, {\"id\": \"tongda-oa\", \"info\": {\"name\": \"tongda-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tongda-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"tongda-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"login\", \"tongda2000\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/images/tongda.ico\", \"/static/templates/2013_01/index.css/\", \"<a href='http://www.tongda2000.com/' target='_black'>通达官网</a>\", \"<link rel=\\\"shortcut icon\\\" href=\\\"/images/tongda.ico\\\" />\", \"office anywhere\", \"href=\\\"/static/images/tongda.ico\\\"\", \"javascript:document.form1.uname.focus()\", \"oa提示：不能登录oa\", \"紧急通知：今日10点停电\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tongda-oa.yaml\"}, {\"id\": \"topbpm-user-authorization-center\", \"info\": {\"name\": \"topbpm-user-authorization-center\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,topbpm-user-authorization-center\", \"severity\": \"info\", \"metadata\": {\"product\": \"topbpm-user-authorization-center\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/images/sinopeclogo.png\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\topbpm-user-authorization-center.yaml\"}, {\"id\": \"topfreeweb-charging\", \"info\": {\"name\": \"topfreeweb-charging\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,topfreeweb-charging\", \"severity\": \"info\", \"metadata\": {\"product\": \"topfreeweb-charging\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"background=\\\"images/logbg.jpg\\\"\", \"value=\\\"经理\\\">经理</option>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\topfreeweb-charging.yaml\"}, {\"id\": \"topper-nms\", \"info\": {\"name\": \"topper-nms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,topper-nms\", \"severity\": \"info\", \"metadata\": {\"product\": \"topper-nms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"mailto:kenstar@kenstar-group.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\topper-nms.yaml\"}, {\"id\": \"topsec-dlp\", \"info\": {\"name\": \"topsec-dlp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,topsec-dlp\", \"severity\": \"info\", \"metadata\": {\"product\": \"topsec-dlp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<img src=\\\"static/images/login/loading.gif\\\" /><span id=\\\"message\\\">loading......</span>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\topsec-dlp.yaml\"}, {\"id\": \"topsec-firewall\", \"info\": {\"name\": \"topsec-firewall\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,topsec-firewall\", \"severity\": \"info\", \"metadata\": {\"product\": \"topsec-firewall\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"topsec\", \"image/aaa.png\", \"username\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\topsec-firewall.yaml\"}, {\"id\": \"topsec-vpn\", \"info\": {\"name\": \"topsec-vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,topsec-vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"topsec-vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: topwebserver\", \"set-cookie: topsecsvuilanguage\"], \"part\": \"header\", \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/portal_default/index.html\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\topsec-vpn.yaml\"}, {\"id\": \"topwalk-mtp\", \"info\": {\"name\": \"topwalk-mtp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,topwalk-mtp\", \"severity\": \"info\", \"metadata\": {\"product\": \"topwalk-mtp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<meta http-equiv=\\\"refresh\\\" content=\\\"0;url=/usercertloginaction.action\\\" />\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\topwalk-mtp.yaml\"}, {\"id\": \"tornadoserver\", \"info\": {\"name\": \"tornadoserver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tornadoserver\", \"severity\": \"info\", \"metadata\": {\"product\": \"tornadoserver\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: tornadoserver\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tornadoserver.yaml\"}, {\"id\": \"totvs-smartclient\", \"info\": {\"name\": \"totvs-smartclient\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,totvs-smartclient\", \"severity\": \"info\", \"metadata\": {\"product\": \"totvs-smartclient\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<param name=\\\"environment\\\" value=\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\totvs-smartclient.yaml\"}, {\"id\": \"tpshop\", \"info\": {\"name\": \"tpshop\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tpshop\", \"severity\": \"info\", \"metadata\": {\"product\": \"tpshop\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"tpshop.css\", \"tpshop_config\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tpshop.yaml\"}, {\"id\": \"tp_link-omada-controller\", \"info\": {\"name\": \"tp_link-omada-controller\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tp_link-omada-controller\", \"severity\": \"info\", \"metadata\": {\"product\": \"tp_link-omada-controller\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"width=1300,initial-scale=1,minimal-ui\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tp_link-omada-controller.yaml\"}, {\"id\": \"tq-cloud-call-center\", \"info\": {\"name\": \"tq-cloud-call-center\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tq-cloud-call-center\", \"severity\": \"info\", \"metadata\": {\"product\": \"tq-cloud-call-center\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"tq.cn/floatcard?\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tq-cloud-call-center.yaml\"}, {\"id\": \"trac\", \"info\": {\"name\": \"trac\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,trac\", \"severity\": \"info\", \"metadata\": {\"product\": \"trac\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h1>available projects</h1>\", \"powered by trac\", \"wiki/tracguide\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\trac.yaml\"}, {\"id\": \"traderencrm\", \"info\": {\"name\": \"traderencrm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,traderencrm\", \"severity\": \"info\", \"metadata\": {\"product\": \"traderencrm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"emlsoft\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\traderencrm.yaml\"}, {\"id\": \"tradingeye\", \"info\": {\"name\": \"tradingeye\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tradingeye\", \"severity\": \"info\", \"metadata\": {\"product\": \"tradingeye\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"dpivision.com ltd\\\" />\", \"id=\\\"credits\\\"><a href=\\\"http://www.tradingeye.com/\\\">powered by tradingeye</a>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tradingeye.yaml\"}, {\"id\": \"trend-smart-protection-server\", \"info\": {\"name\": \"trend-smart-protection-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,trend-smart-protection-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"trend-smart-protection-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"lastrow_right\", \"redirect_reason\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\trend-smart-protection-server.yaml\"}, {\"id\": \"trs-hybase\", \"info\": {\"name\": \"trs-hybase\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,trs-hybase\", \"severity\": \"info\", \"metadata\": {\"product\": \"trs-hybase\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"#\\\">trs hybase</a>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\trs-hybase.yaml\"}, {\"id\": \"trs-wcm\", \"info\": {\"name\": \"trs-wcm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,trs-wcm\", \"severity\": \"info\", \"metadata\": {\"product\": \"trs-wcm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/wcm\\\" target=\\\"_blank\\\">网站管理\", \"wcm\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/wcm\\\" target=\\\"_blank\\\">管理\", \"/wcm/app/js\", \"0;url=/wcm\", \"forum.trs.com.cn\", \"window.location.href = \\\"/wcm\\\";\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\trs-wcm.yaml\"}, {\"id\": \"trunkey-icpsystem\", \"info\": {\"name\": \"trunkey-icpsystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,trunkey-icpsystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"trunkey-icpsystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"http://www.trunkey.com/\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\trunkey-icpsystem.yaml\"}, {\"id\": \"tsm\", \"info\": {\"name\": \"tsm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tsm\", \"severity\": \"info\", \"metadata\": {\"product\": \"tsm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var url = getcontextname() + \\\"?service=ajaxdirect/1/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tsm.yaml\"}, {\"id\": \"tuling-code-filing-system\", \"info\": {\"name\": \"tuling-code-filing-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tuling-code-filing-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"tuling-code-filing-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"编码申报系统\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tuling-code-filing-system.yaml\"}, {\"id\": \"tuling-procurement-strategy-management-system\", \"info\": {\"name\": \"tuling-procurement-strategy-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tuling-procurement-strategy-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"tuling-procurement-strategy-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/login/main_body_bg.jpg\\\"\", \"长沙图灵科技有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tuling-procurement-strategy-management-system.yaml\"}, {\"id\": \"tulingtech-system\", \"info\": {\"name\": \"tulingtech-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tulingtech-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"tulingtech-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/content/login-ui/static/h-ui.admin/css/h-ui.login.css\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tulingtech-system.yaml\"}, {\"id\": \"tumblr\", \"info\": {\"name\": \"tumblr\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tumblr\", \"severity\": \"info\", \"metadata\": {\"product\": \"tumblr\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!-- begin tumblr code --><iframe src=\\\"http://assets.tumblr.com/iframe.html\", \"<meta name=\\\"tumblr-theme\\\" content=\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tumblr.yaml\"}, {\"id\": \"turbo-seek\", \"info\": {\"name\": \"turbo-seek\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,turbo-seek\", \"severity\": \"info\", \"metadata\": {\"product\": \"turbo-seek\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var myspecs = \\\"'menubar=0,status=1,resizable=1,location=0,titlebar=1,toolbar=1,scrollbars=1,width=\\\" + mywidth + \\\",height=\\\" + myheight +\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\turbo-seek.yaml\"}, {\"id\": \"turbomail\", \"info\": {\"name\": \"turbomail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,turbomail\", \"severity\": \"info\", \"metadata\": {\"product\": \"turbomail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by turbomail\", \"wzcon1 clearfix\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"<a href=\\\"http://www.turbomail.org\\\">powered by turbomail</a>\", \"turbomail管理系统\", \"alt=\\\"turbomail 电子邮件系统\\\"/>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\turbomail.yaml\"}, {\"id\": \"tutortrac\", \"info\": {\"name\": \"tutortrac\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tutortrac\", \"severity\": \"info\", \"metadata\": {\"product\": \"tutortrac\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"font><a href=\\\"http://www.go-redrock.com\\\"><font\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\tutortrac.yaml\"}, {\"id\": \"twcms\", \"info\": {\"name\": \"twcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,twcms\", \"severity\": \"info\", \"metadata\": {\"product\": \"twcms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/twcms/theme/default/css/global.css\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\twcms.yaml\"}, {\"id\": \"twonkyserver\", \"info\": {\"name\": \"twonkyserver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,twonkyserver\", \"severity\": \"info\", \"metadata\": {\"product\": \"twonkyserver\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<meta name=\\\"description\\\" content=\\\"twonkymedia digital home\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\twonkyserver.yaml\"}, {\"id\": \"typecho\", \"info\": {\"name\": \"typecho\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,typecho\", \"severity\": \"info\", \"metadata\": {\"product\": \"typecho\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"typecho\", \"usr/themes\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\typecho.yaml\"}, {\"id\": \"u-mail\", \"info\": {\"name\": \"u-mail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,u-mail\", \"severity\": \"info\", \"metadata\": {\"product\": \"u-mail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<body link=\\\"white\\\" vlink=\\\"white\\\" alink=\\\"white\\\">\", \"<meta http-equiv=\\\"refresh\\\" content=\\\"0;url=./webmail/\\\">\", \"power by <a href=\\\"http://www.comingchina.com\\\">u-mail邮件服务器</a>\", \"u-mail webadmin 要求启用 javascript\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\u-mail.yaml\"}, {\"id\": \"u-reader-digital-library\", \"info\": {\"name\": \"u-reader-digital-library\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,u-reader-digital-library\", \"severity\": \"info\", \"metadata\": {\"product\": \"u-reader-digital-library\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"login-show-title\\\">dynomedia inc.</p>\", \"content=\\\"ureader\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\u-reader-digital-library.yaml\"}, {\"id\": \"ubiquiti-unms\", \"info\": {\"name\": \"ubiquiti-unms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ubiquiti-unms\", \"severity\": \"info\", \"metadata\": {\"product\": \"ubiquiti-unms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"unms\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ubiquiti-unms.yaml\"}, {\"id\": \"ubuntu\", \"info\": {\"name\": \"ubuntu\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ubuntu\", \"severity\": \"info\", \"metadata\": {\"product\": \"ubuntu\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"welcome to nginx on ubuntu!\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ubuntu.yaml\"}, {\"id\": \"ucap-search\", \"info\": {\"name\": \"ucap-search-\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ucap-search-\", \"severity\": \"info\", \"metadata\": {\"product\": \"ucap-search-\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"method=\\\"post\\\" action=\\\"s\\\" onsubmit=\\\"return checksearchform();\\\">\", \"src=\\\"http://so.kaipuyun.cn?sitecode=\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ucap-search-.yaml\"}, {\"id\": \"uccc-iot\", \"info\": {\"name\": \"uccc-iot\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,uccc-iot\", \"severity\": \"info\", \"metadata\": {\"product\": \"uccc-iot\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"hidden-xs\\\">物联网云平台\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\uccc-iot.yaml\"}, {\"id\": \"udesk\", \"info\": {\"name\": \"udesk\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,udesk\", \"severity\": \"info\", \"metadata\": {\"product\": \"udesk\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"assets-cli.udesk.cn/im_client/js/udeskapi.js\", \"udesk.cn/im_client/?web_plugin_id=\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\udesk.yaml\"}, {\"id\": \"uebimiau-webmail\", \"info\": {\"name\": \"uebimiau-webmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,uebimiau-webmail\", \"severity\": \"info\", \"metadata\": {\"product\": \"uebimiau-webmail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<script type=\\\"text/javascript\\\" src=\\\"themes/default/js/webmail.js\\\"></script>\", \"uebimiau\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\uebimiau-webmail.yaml\"}, {\"id\": \"ueditor\", \"info\": {\"name\": \"ueditor\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ueditor\", \"severity\": \"info\", \"metadata\": {\"product\": \"ueditor\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ueditor.all.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ueditor.yaml\"}, {\"id\": \"ufttt-iot\", \"info\": {\"name\": \"ufttt-iot\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ufttt-iot\", \"severity\": \"info\", \"metadata\": {\"product\": \"ufttt-iot\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"sdkjs/uftttsdk2.js\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ufttt-iot.yaml\"}, {\"id\": \"uin-meeting\", \"info\": {\"name\": \"uin-meeting\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,uin-meeting\", \"severity\": \"info\", \"metadata\": {\"product\": \"uin-meeting\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"uin.plist\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\uin-meeting.yaml\"}, {\"id\": \"ultimate-bulletin-board\", \"info\": {\"name\": \"ultimate-bulletin-board\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ultimate-bulletin-board\", \"severity\": \"info\", \"metadata\": {\"product\": \"ultimate-bulletin-board\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://www.groupee.com/landing/goto.php?a=ubb.classic\\\">powered by ubb.classic&trade\", \"<meta name=\\\"generator\\\" content=\\\"ubb.threads\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ultimate-bulletin-board.yaml\"}, {\"id\": \"ultimus-bpm\", \"info\": {\"name\": \"ultimus-bpm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ultimus-bpm\", \"severity\": \"info\", \"metadata\": {\"product\": \"ultimus-bpm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"url=iportal/login.aspx\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ultimus-bpm.yaml\"}, {\"id\": \"ultracrm\", \"info\": {\"name\": \"ultracrm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ultracrm\", \"severity\": \"info\", \"metadata\": {\"product\": \"ultracrm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"&nbsp;tonethink.soft&nbsp;&nbsp;all rights reserved\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ultracrm.yaml\"}, {\"id\": \"ultrapower-identity\", \"info\": {\"name\": \"ultrapower-identity\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ultrapower-identity\", \"severity\": \"info\", \"metadata\": {\"product\": \"ultrapower-identity\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<li><p>欢迎进入身份与安全管控系统</p></li>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ultrapower-identity.yaml\"}, {\"id\": \"ultrapower-me-yi-dong-xie-diao-ban-gong-ping-tai\", \"info\": {\"name\": \"ultrapower-me移动协调办公平台\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ultrapower-me移动协调办公平台\", \"severity\": \"info\", \"metadata\": {\"product\": \"ultrapower-me移动协调办公平台\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"me移动协调办公平台\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ultrapower-me移动协调办公平台.yaml\"}, {\"id\": \"ultrastats\", \"info\": {\"name\": \"ultrastats\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ultrastats\", \"severity\": \"info\", \"metadata\": {\"product\": \"ultrastats\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<img src=\\\"./images/main/ultrastatslogo.png\\\" width=\\\"300\\\" height=\\\"200\\\" name=\\\"ultrastats_logo\\\" align=\\\"center\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ultrastats.yaml\"}, {\"id\": \"ultra_electronics\", \"info\": {\"name\": \"ultra_electronics\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ultra_electronics\", \"severity\": \"info\", \"metadata\": {\"product\": \"ultra_electronics\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/preauth/login.cgi\", \"/preauth/style.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ultra_electronics.yaml\"}, {\"id\": \"umami\", \"info\": {\"name\": \"umami\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,umami\", \"severity\": \"info\", \"metadata\": {\"product\": \"umami\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"e7acd200faa2134fc17bce2e39304292\"]}]}], \"_source_file\": \"00_unknown\\\\umami.yaml\"}, {\"id\": \"uniform-server\", \"info\": {\"name\": \"uniform-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,uniform-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"uniform-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://www.uniformserver.com\\\">\", \"<div id=\\\"divider\\\">developed by <a href=\\\"http://www.uniformserver.com/\\\">the uniform server development team</a></div>\", \"<meta name=\\\"description\\\" content=\\\"the uniform server 8.1.0-coral.\\\" />\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\uniform-server.yaml\"}, {\"id\": \"unimas-cameraaudit\", \"info\": {\"name\": \"unimas-cameraaudit\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,unimas-cameraaudit\", \"severity\": \"info\", \"metadata\": {\"product\": \"unimas-cameraaudit\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"txtpasswordcssclass\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\unimas-cameraaudit.yaml\"}, {\"id\": \"uniview-ezclould\", \"info\": {\"name\": \"uniview-ezclould\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,uniview-ezclould\", \"severity\": \"info\", \"metadata\": {\"product\": \"uniview-ezclould\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"images/pag-logo.png\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\uniview-ezclould.yaml\"}, {\"id\": \"uniview-ezstation\", \"info\": {\"name\": \"uniview-ezstation\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,uniview-ezstation\", \"severity\": \"info\", \"metadata\": {\"product\": \"uniview-ezstation\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h1>welcome to ezstation vc server\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\uniview-ezstation.yaml\"}, {\"id\": \"uniview-vm50\", \"info\": {\"name\": \"uniview-vm50\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,uniview-vm50\", \"severity\": \"info\", \"metadata\": {\"product\": \"uniview-vm50\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"vm5.0\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\uniview-vm50.yaml\"}, {\"id\": \"uportal\", \"info\": {\"name\": \"uportal\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,uportal\", \"severity\": \"info\", \"metadata\": {\"product\": \"uportal\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"alt=\\\"powered by uportal\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\uportal.yaml\"}, {\"id\": \"upyun-js-library\", \"info\": {\"name\": \"upyun-js-library\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,upyun-js-library\", \"severity\": \"info\", \"metadata\": {\"product\": \"upyun-js-library\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"b0.upaiyun.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\upyun-js-library.yaml\"}, {\"id\": \"uqcms\", \"info\": {\"name\": \"uqcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,uqcms\", \"severity\": \"info\", \"metadata\": {\"product\": \"uqcms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/public/css/common_uqcms.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\uqcms.yaml\"}, {\"id\": \"urp-integrated-educational-system\", \"info\": {\"name\": \"urp-integrated-educational-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,urp-integrated-educational-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"urp-integrated-educational-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"北京清元优软科技有限公司\", \"教务系统\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"<input name=\\\"j_captcha_response\\\" type=\\\"hidden\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\urp-integrated-educational-system.yaml\"}, {\"id\": \"useresponse\", \"info\": {\"name\": \"useresponse\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,useresponse\", \"severity\": \"info\", \"metadata\": {\"product\": \"useresponse\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<form id=\\\"system-form-registration\\\" enctype=\\\"application/x-www-form-urlencoded\\\" class=\\\"system-form-registration\\\" accept-charset=\\\"utf-8\", \"title=\\\"customer feedback software, community support system\\\" target=\\\"_blank\\\" href=\\\"http://www.useresponse.com\\\" class=\\\"popup-logo\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\useresponse.yaml\"}, {\"id\": \"usezan-system\", \"info\": {\"name\": \"usezan-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,usezan-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"usezan-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"action=\\\"/usezan/login/getlogin\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\usezan-system.yaml\"}, {\"id\": \"utt-device\", \"info\": {\"name\": \"utt-device\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,utt-device\", \"severity\": \"info\", \"metadata\": {\"product\": \"utt-device\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"utt-inline-block\\\" src=\\\"./images/login_btmlogo.png\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\utt-device.yaml\"}, {\"id\": \"utt-an-quan-wang-luo-guan-li-xi-tong\", \"info\": {\"name\": \"utt-安全网络管理系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,utt-安全网络管理系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"utt-安全网络管理系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"technology, inc.\", \"上海艾泰科技有限公司\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\utt-安全网络管理系统.yaml\"}, {\"id\": \"uxsino-xia-yi-dai-fang-huo-qiang\", \"info\": {\"name\": \"uxsino-下一代防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,uxsino-下一代防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"uxsino-下一代防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"http://www.uxsino.com\", \"优炫下一代防火墙\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\uxsino-下一代防火墙.yaml\"}, {\"id\": \"v2-video-conferencing\", \"info\": {\"name\": \"v2-video-conferencing\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,v2-video-conferencing\", \"severity\": \"info\", \"metadata\": {\"product\": \"v2-video-conferencing\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<frame src=\\\"../conference/currentconfaction.do\", \"src=\\\"content.jsp\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\v2-video-conferencing.yaml\"}, {\"id\": \"valley-platform\", \"info\": {\"name\": \"valley-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,valley-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"valley-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\", \"{{BaseURL}}/demo/form.jsp\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"valleyplatform\", \"valley-platform.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\valley-platform.yaml\"}, {\"id\": \"valleycms\", \"info\": {\"name\": \"valleycms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,valleycms\", \"severity\": \"info\", \"metadata\": {\"product\": \"valleycms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/viewcmscac.do\", \"href=\\\"viewcmscac.do\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\valleycms.yaml\"}, {\"id\": \"valueapex-eamic\", \"info\": {\"name\": \"valueapex-eamic\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,valueapex-eamic\", \"severity\": \"info\", \"metadata\": {\"product\": \"valueapex-eamic\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"log into my eamic® account\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\valueapex-eamic.yaml\"}, {\"id\": \"vam-product\", \"info\": {\"name\": \"vam-product\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vam-product\", \"severity\": \"info\", \"metadata\": {\"product\": \"vam-product\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"https://virtualairlinesmanager.net/\\\">virtual airlines manager\", \"id=\\\"mymodallabel\\\">login vam system\", \"powered by virtual airlines manager\", \"src=\\\"js/vam.js\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vam-product.yaml\"}, {\"id\": \"vamcart\", \"info\": {\"name\": \"vamcart\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vamcart\", \"severity\": \"info\", \"metadata\": {\"product\": \"vamcart\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!-- powered by: vamcart (http://vamcart.com) -->\", \"<p><a href=\\\"http://vamcart.com/\\\">php shopping cart</a> <a href=\\\"http://vamcart.com/\\\">vamcart</a></p>\", \"stylesheets/load/vamcart.css\\\" rel=\\\"stylesheet\\\"  media=\\\"screen\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vamcart.yaml\"}, {\"id\": \"varmour-product\", \"info\": {\"name\": \"varmour-product\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,varmour-product\", \"severity\": \"info\", \"metadata\": {\"product\": \"varmour-product\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"function loadmunchkinkey()\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\varmour-product.yaml\"}, {\"id\": \"vcalendar\", \"info\": {\"name\": \"vcalendar\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vcalendar\", \"severity\": \"info\", \"metadata\": {\"product\": \"vcalendar\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<link href=\\\"styles/basic/style.css\\\"\", \"powered by <a href=\\\"http://www.vcalendar.org\\\">vcalendar</a>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vcalendar.yaml\"}, {\"id\": \"vcms\", \"info\": {\"name\": \"vcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vcms\", \"severity\": \"info\", \"metadata\": {\"product\": \"vcms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h2>vcms</h2>\", \"<h4>vcms全能网站管理系统</h4>\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vcms.yaml\"}, {\"id\": \"vectr\", \"info\": {\"name\": \"vectr\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vectr\", \"severity\": \"info\", \"metadata\": {\"product\": \"vectr\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"location: /sra-purpletools-webui/app\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vectr.yaml\"}, {\"id\": \"vectra-product\", \"info\": {\"name\": \"vectra-product\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vectra-product\", \"severity\": \"info\", \"metadata\": {\"product\": \"vectra-product\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"vectra.base.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vectra-product.yaml\"}, {\"id\": \"vehiclemonitoringcloudplatform\", \"info\": {\"name\": \"vehiclemonitoringcloudplatform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vehiclemonitoringcloudplatform\", \"severity\": \"info\", \"metadata\": {\"product\": \"vehiclemonitoringcloudplatform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"gps-web\\\"></iframe>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vehiclemonitoringcloudplatform.yaml\"}, {\"id\": \"veritas-netbackup\", \"info\": {\"name\": \"veritas-netbackup\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,veritas-netbackup\", \"severity\": \"info\", \"metadata\": {\"product\": \"veritas-netbackup\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/opscenter/features/common/images/favicon.ico\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\veritas-netbackup.yaml\"}, {\"id\": \"vertiv-system\", \"info\": {\"name\": \"vertiv-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vertiv-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"vertiv-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var port = \\\"9528\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vertiv-system.yaml\"}, {\"id\": \"vertx\", \"info\": {\"name\": \"vertx\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vertx\", \"severity\": \"info\", \"metadata\": {\"product\": \"vertx\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"set-cookie: vertx-web.session\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vertx.yaml\"}, {\"id\": \"vhsoft-vhplot\", \"info\": {\"name\": \"vhsoft-vhplot\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vhsoft-vhplot\", \"severity\": \"info\", \"metadata\": {\"product\": \"vhsoft-vhplot\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/vhplot/webresource.axd\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vhsoft-vhplot.yaml\"}, {\"id\": \"victorysoft-performance-management-system\", \"info\": {\"name\": \"victorysoft-performance-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,victorysoft-performance-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"victorysoft-performance-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"casui/themes/siam/login.css\", \"class=\\\"row fl-controls-left\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\victorysoft-performance-management-system.yaml\"}, {\"id\": \"victorysoft\", \"info\": {\"name\": \"victorysoft\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,victorysoft\", \"severity\": \"info\", \"metadata\": {\"product\": \"victorysoft\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"webstyles/webstyle1/style1/css.css\\\"\", \"value=\\\"style2012/style1/scripts/expressinstall.swf\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\victorysoft.yaml\"}, {\"id\": \"videosoon\", \"info\": {\"name\": \"videosoon\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,videosoon\", \"severity\": \"info\", \"metadata\": {\"product\": \"videosoon\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"skin/anysoondefault/anystyles.css\", \"power by linksoon - videosoon\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\videosoon.yaml\"}, {\"id\": \"videosurveillancemanagementplatform\", \"info\": {\"name\": \"videosurveillancemanagementplatform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,videosurveillancemanagementplatform\", \"severity\": \"info\", \"metadata\": {\"product\": \"videosurveillancemanagementplatform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\" <span>平台采用最新图像化展现技术\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\videosurveillancemanagementplatform.yaml\"}, {\"id\": \"viewgood-streammedia\", \"info\": {\"name\": \"viewgood-streammedia\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,viewgood-streammedia\", \"severity\": \"info\", \"metadata\": {\"product\": \"viewgood-streammedia\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"location.href\", \"var webvirtualdiretory = 'viewgood';\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"fgetquery\", \"src='/viewgood/pc/\", \"viewgood\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\viewgood-streammedia.yaml\"}, {\"id\": \"violation-outreach-monitoring-system\", \"info\": {\"name\": \"violation-outreach-monitoring-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,violation-outreach-monitoring-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"violation-outreach-monitoring-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<body onload=\\\"forward_to_logon()\\\">\", \"window.location='login.action';\", \"欢迎登录违规外联平台\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\violation-outreach-monitoring-system.yaml\"}, {\"id\": \"virtualmin\", \"info\": {\"name\": \"virtualmin\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,virtualmin\", \"severity\": \"info\", \"metadata\": {\"product\": \"virtualmin\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<center><a href=/virtualmin-password-recovery/>forgot your virtualmin password?</a></center>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\virtualmin.yaml\"}, {\"id\": \"visualware-myconnection-server\", \"info\": {\"name\": \"visualware-myconnection-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,visualware-myconnection-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"visualware-myconnection-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!-- begin myconnection server applet -->\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\visualware-myconnection-server.yaml\"}, {\"id\": \"vmedia-multimedia-publishing-platform\", \"info\": {\"name\": \"vmedia-multimedia-publishing-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vmedia-multimedia-publishing-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"vmedia-multimedia-publishing-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"video_00\\\"\", \"function toggle(targetid)\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vmedia-multimedia-publishing-platform.yaml\"}, {\"id\": \"vmware-aria-operations-for-logs\", \"info\": {\"name\": \"vmware-aria-operations-for-logs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vmware-aria-operations-for-logs\", \"severity\": \"info\", \"metadata\": {\"product\": \"vmware-aria-operations-for-logs\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>vrealize log insight -\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vmware-aria-operations-for-logs.yaml\"}, {\"id\": \"vmware-esx\", \"info\": {\"name\": \"vmware-esx\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vmware-esx\", \"severity\": \"info\", \"metadata\": {\"product\": \"vmware-esx\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<meta http-equiv=\\\"refresh\\\" content=\\\"0;url='/ui'\\\"/>\", \"content=\\\"vmware esx \", \"content=\\\"vmware esxi\", \"document.write(\\\"<title>\\\" + id_eesx_welcome + \\\"</title>\\\");\", \"document.write(id_esx_viclientdesc);\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vmware-esx.yaml\"}, {\"id\": \"vmware-server-2\", \"info\": {\"name\": \"vmware-server-2\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vmware-server-2\", \"severity\": \"info\", \"metadata\": {\"product\": \"vmware-server-2\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"vmware server is virtual\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vmware-server-2.yaml\"}, {\"id\": \"vmware-site-recovery-manager\", \"info\": {\"name\": \"vmware-site-recovery-manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vmware-site-recovery-manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"vmware-site-recovery-manager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<header alt=\\\"vmware site recovery manager\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vmware-site-recovery-manager.yaml\"}, {\"id\": \"vmware-vcenter\", \"info\": {\"name\": \"vmware-vcenter\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vmware-vcenter\", \"severity\": \"info\", \"metadata\": {\"product\": \"vmware-vcenter\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/converter/vmware-converter-client.exe\", \"/vmw_nsx_logo-black-triangle-500w.png\", \"content=\\\"vmware vcenter\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vmware-vcenter.yaml\"}, {\"id\": \"vmware-virtualcenter\", \"info\": {\"name\": \"vmware-virtualcenter\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vmware-virtualcenter\", \"severity\": \"info\", \"metadata\": {\"product\": \"vmware-virtualcenter\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"vmware virtualcenter\", \"content=\\\"vmware vsphere\", \"the vshield manager requires\", \"url=vcops-vsphere/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vmware-virtualcenter.yaml\"}, {\"id\": \"vmware-vrealize-operations-manager\", \"info\": {\"name\": \"vmware-vrealize-operations-manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vmware-vrealize-operations-manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"vmware-vrealize-operations-manager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"identity manager\", \"vmware\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vmware-vrealize-operations-manager.yaml\"}, {\"id\": \"vmware-vrealize\", \"info\": {\"name\": \"vmware-vrealize\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vmware-vrealize\", \"severity\": \"info\", \"metadata\": {\"product\": \"vmware-vrealize\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"正在重定向到 vrealize operations manager web\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vmware-vrealize.yaml\"}, {\"id\": \"vmware-vsphere-web-client\", \"info\": {\"name\": \"vmware-vsphere-web-client\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"vmware-vsphere-web-client\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>vsphere web client</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vmware-vsphere-web-client.yaml\"}, {\"id\": \"vmware-vsphere\", \"info\": {\"name\": \"vmware-vsphere\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vmware-vsphere\", \"severity\": \"info\", \"metadata\": {\"product\": \"vmware-vsphere\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<meta name=\\\"description\\\" content=\\\"vmware vsphere\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vmware-vsphere.yaml\"}, {\"id\": \"vmwareview\", \"info\": {\"name\": \"vmwareview\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vmwareview\", \"severity\": \"info\", \"metadata\": {\"product\": \"vmwareview\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>vmware view portal</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vmwareview.yaml\"}, {\"id\": \"vnc-enterprise\", \"info\": {\"name\": \"vnc-enterprise-\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vnc-enterprise-\", \"severity\": \"info\", \"metadata\": {\"product\": \"vnc-enterprise-\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: vnc server enterprise edition\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vnc-enterprise-.yaml\"}, {\"id\": \"vnc\", \"info\": {\"name\": \"vnc\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vnc\", \"severity\": \"info\", \"metadata\": {\"product\": \"vnc\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<applet code=vncviewer.class archive=vncviewer.jar\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vnc.yaml\"}, {\"id\": \"vop\", \"info\": {\"name\": \"vop\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vop\", \"severity\": \"info\", \"metadata\": {\"product\": \"vop\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=\\\"lgform\\\" action=\\\"/sso/login\", \"vop\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"lgdynacodebtn\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vop.yaml\"}, {\"id\": \"vos-vos2009\", \"info\": {\"name\": \"vos-vos2009\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vos-vos2009\", \"severity\": \"info\", \"metadata\": {\"product\": \"vos-vos2009\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"vos2009, voip, voip运营支撑系统, 软交换\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vos-vos2009.yaml\"}, {\"id\": \"vos3000\", \"info\": {\"name\": \"vos3000\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vos3000\", \"severity\": \"info\", \"metadata\": {\"product\": \"vos3000\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"images/vos3000.ico\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vos3000.yaml\"}, {\"id\": \"votemanager\", \"info\": {\"name\": \"votemanager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,votemanager\", \"severity\": \"info\", \"metadata\": {\"product\": \"votemanager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://www.cdrbp.cn\\\">微信数字投票\", \"content=\\\"微平台投票管理系统\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"content=\\\"微平台投票系统\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\votemanager.yaml\"}, {\"id\": \"vp-asp\", \"info\": {\"name\": \"vp-asp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vp-asp\", \"severity\": \"info\", \"metadata\": {\"product\": \"vp-asp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://www.vpasp.com\\\">\", \"shopdisplayproducts.asp?id=\", \"src=\\\"vs350.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vp-asp.yaml\"}, {\"id\": \"vpn358system\", \"info\": {\"name\": \"vpn358system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vpn358system\", \"severity\": \"info\", \"metadata\": {\"product\": \"vpn358system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"form-actions j_add_ip_actions\\\"\", \"href=\\\"/lib/bootstrap/ico/favicon.ico\\\"\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vpn358system.yaml\"}, {\"id\": \"vrv-desktop-application-system\", \"info\": {\"name\": \"vrv-desktop-application-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vrv-desktop-application-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"vrv-desktop-application-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<span id=\\\"lblvalidcompany\\\" class=\\\"validcompany\\\">vrv\", \"var vver = $('#hidverify').val();\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vrv-desktop-application-system.yaml\"}, {\"id\": \"vrv-im\", \"info\": {\"name\": \"vrv-im\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vrv-im\", \"severity\": \"info\", \"metadata\": {\"product\": \"vrv-im\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h3>连豆豆pc客户端 </h3>\", \"class=\\\"loginusername\\\" value=\\\"\\\" placeholder=\\\"连豆豆账号/邮箱/手机号\", \"class=\\\"wj-text wj-title\\\">下载信源豆豆</p>\", \"href=\\\"http://im.vrv.cn/server-securitycenter/password/goretrieval.vrv\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vrv-im.yaml\"}, {\"id\": \"vrv-nac\", \"info\": {\"name\": \"vrv-nac\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vrv-nac\", \"severity\": \"info\", \"metadata\": {\"product\": \"vrv-nac\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"localstorage.setitem('doctitle','北信源网络接入控制系统')\", \"欢迎登录北信源网络接入控制系统\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"id=\\\"modal_delay\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vrv-nac.yaml\"}, {\"id\": \"vts-cms\", \"info\": {\"name\": \"vts-cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vts-cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"vts-cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"errmag\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\vts-cms.yaml\"}, {\"id\": \"w3-total-cache\", \"info\": {\"name\": \"w3-total-cache\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,w3-total-cache\", \"severity\": \"info\", \"metadata\": {\"product\": \"w3-total-cache\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!-- performance optimized by w3 total cache. learn more: http://www.w3-edge.com/wordpress-plugins/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\w3-total-cache.yaml\"}, {\"id\": \"w7-officialaccounts\", \"info\": {\"name\": \"w7-officialaccounts\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,w7-officialaccounts\", \"severity\": \"info\", \"metadata\": {\"product\": \"w7-officialaccounts\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"微擎,微信\", \"onsubmit=\\\"return formcheck();\\\" class=\\\"we7-form\\\">\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"class=\\\"copyright\\\">powered by <a href=\\\"http://www.we7.cc\\\"><b>微擎</b>\", \"powered by we7.cc\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\w7-officialaccounts.yaml\"}, {\"id\": \"wacintaki-poteto-bbs\", \"info\": {\"name\": \"wacintaki-poteto-bbs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wacintaki-poteto-bbs\", \"severity\": \"info\", \"metadata\": {\"product\": \"wacintaki-poteto-bbs\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://www.ninechime.com/products/\\\" title=\\\"get your own free bbs!\\\">wacintaki\", \"by <a href=\\\"http://suteki.nu\\\">ranmaguy</a> and <a href=\\\"http://www.cellosoft.com\\\">marcello</a>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\wacintaki-poteto-bbs.yaml\"}, {\"id\": \"wackopicko\", \"info\": {\"name\": \"wackopicko\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wackopicko\", \"severity\": \"info\", \"metadata\": {\"product\": \"wackopicko\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h1 id=\\\"title\\\"><a href=\\\"/\\\">wackopicko.com</a></h1>\", \"<h2>welcome to wackopicko</h2>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\wackopicko.yaml\"}, {\"id\": \"wantit-erp\", \"info\": {\"name\": \"wantit-erp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wantit-erp\", \"severity\": \"info\", \"metadata\": {\"product\": \"wantit-erp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/javascript/js/witfunctions.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\wantit-erp.yaml\"}, {\"id\": \"wap\", \"info\": {\"name\": \"wap\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wap\", \"severity\": \"info\", \"metadata\": {\"product\": \"wap\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"window.location = 'wap.htm'\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\wap.yaml\"}, {\"id\": \"waspd\", \"info\": {\"name\": \"waspd\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,waspd\", \"severity\": \"info\", \"metadata\": {\"product\": \"waspd\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"pending waspd activities</font>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\waspd.yaml\"}, {\"id\": \"wat-system\", \"info\": {\"name\": \"wat-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wat-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"wat-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"生产经营计划统计一体化管理信息系统安装程序\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\wat-system.yaml\"}, {\"id\": \"waterssslvpn\", \"info\": {\"name\": \"waterssslvpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,waterssslvpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"waterssslvpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"welcome.cgi?p=logo&signinid=url_default\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\waterssslvpn.yaml\"}, {\"id\": \"wavetop-days\", \"info\": {\"name\": \"wavetop-days\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wavetop-days\", \"severity\": \"info\", \"metadata\": {\"product\": \"wavetop-days\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"application/views/img/logo_wavetop.png\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\wavetop-days.yaml\"}, {\"id\": \"wayos--wei-meng-ac-ji-zhong-guan-li-ping-tai\", \"info\": {\"name\": \"wayos - 维盟ac集中管理平台\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"wayos - 维盟ac集中管理平台\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>ac集中管理平台</title>\", \"login_25.jpg\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"715c49c5512d763084a4082c27d935e1\"]}]}], \"_source_file\": \"00_unknown\\\\wayos - 维盟ac集中管理平台.yaml\"}, {\"id\": \"wayos-wei-mengac-ji-zhong-guan-li-xi-tong\", \"info\": {\"name\": \"wayos维盟ac集中管理系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wayos维盟ac集中管理系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"wayos维盟ac集中管理系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>维盟（wayos）智能路由管理系统  www.wayos.cn</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\wayos维盟ac集中管理系统.yaml\"}, {\"id\": \"wdlinux-wdcpsystem\", \"info\": {\"name\": \"wdlinux-wdcpsystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wdlinux-wdcpsystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"wdlinux-wdcpsystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"http://www.wdlinux.cn/bbs/index.php\", \"linux云主机\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"set-cookie: wdcpsessionid\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\wdlinux-wdcpsystem.yaml\"}, {\"id\": \"we7\", \"info\": {\"name\": \"we7\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,we7\", \"severity\": \"info\", \"metadata\": {\"product\": \"we7\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>微擎\", \"w7.cc\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\we7.yaml\"}, {\"id\": \"weatimages\", \"info\": {\"name\": \"weatimages\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,weatimages\", \"severity\": \"info\", \"metadata\": {\"product\": \"weatimages\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://nazarkin.name/projects/weatimages\", \"<div align=\\\"center\\\" class=\\\"weatimages_toppest_navig\\\" style=\\\"text-decoration:underline;\\\">\", \"<meta name=\\\"generator\\\" content=\\\"weatimages\\\"/>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\weatimages.yaml\"}, {\"id\": \"web-control-panel\", \"info\": {\"name\": \"web-control-panel\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,web-control-panel\", \"severity\": \"info\", \"metadata\": {\"product\": \"web-control-panel\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<td><img src=\\\"/images/wcpe.gif\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\web-control-panel.yaml\"}, {\"id\": \"web-crossing-server\", \"info\": {\"name\": \"web-crossing-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,web-crossing-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"web-crossing-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: web crossing\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\web-crossing-server.yaml\"}, {\"id\": \"web-data-administrator\", \"info\": {\"name\": \"web-data-administrator\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,web-data-administrator\", \"severity\": \"info\", \"metadata\": {\"product\": \"web-data-administrator\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<form name=\\\"webform1\\\" method=\\\"post\\\" action=\\\"default.aspx\\\" onsubmit=\\\"javascript:return webform_onsubmit();\\\" id=\\\"webform1\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\web-data-administrator.yaml\"}, {\"id\": \"web-erp-network-system\", \"info\": {\"name\": \"web-erp-network-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,web-erp-network-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"web-erp-network-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"window.location='/www/login.html'\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\web-erp-network-system.yaml\"}, {\"id\": \"web-wiz-rich-text-editor\", \"info\": {\"name\": \"web-wiz-rich-text-editor\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,web-wiz-rich-text-editor\", \"severity\": \"info\", \"metadata\": {\"product\": \"web-wiz-rich-text-editor\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://www.richtexteditor.org\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\web-wiz-rich-text-editor.yaml\"}, {\"id\": \"web2project\", \"info\": {\"name\": \"web2project\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,web2project\", \"severity\": \"info\", \"metadata\": {\"product\": \"web2project\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"</head><body>fatal error. you haven't created a config file yet.<br/><a href=\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\web2project.yaml\"}, {\"id\": \"webalizer-log\", \"info\": {\"name\": \"webalizer-log\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,webalizer-log\", \"severity\": \"info\", \"metadata\": {\"product\": \"webalizer-log\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!-- generated by the webalizer  ver\", \"<!-- webalizer version\", \"<a href=\\\"http://www.webalizer.org\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\webalizer-log.yaml\"}, {\"id\": \"webasyst-shop-script\", \"info\": {\"name\": \"webasyst-shop-script\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,webasyst-shop-script\", \"severity\": \"info\", \"metadata\": {\"product\": \"webasyst-shop-script\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://www.shop-script.com\", \"powered by webasyst shop-script <a href=\\\"http://www.shop-script.com/\\\" style=\\\"font-weight: normal\\\">shopping cart software</a>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\webasyst-shop-script.yaml\"}, {\"id\": \"webbased-pear-package-manager\", \"info\": {\"name\": \"webbased-pear-package-manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,webbased-pear-package-manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"webbased-pear-package-manager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<img src=\\\"?img=pear\\\" width=\\\"104\\\" height=\\\"50\\\" vspace=\\\"2\\\" hspace=\\\"5\\\" alt=\\\"pear\\\">\", \"pear_frontend_web\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\webbased-pear-package-manager.yaml\"}, {\"id\": \"webbuilder\", \"info\": {\"name\": \"webbuilder\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,webbuilder\", \"severity\": \"info\", \"metadata\": {\"product\": \"webbuilder\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"webbuilder/script/wb.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\webbuilder.yaml\"}, {\"id\": \"webengine-site\", \"info\": {\"name\": \"webengine-site\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,webengine-site\", \"severity\": \"info\", \"metadata\": {\"product\": \"webengine-site\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/webengine/images/common.css\", \"location.href = \\\"/webengine/web/\\\";\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\webengine-site.yaml\"}, {\"id\": \"webgrind\", \"info\": {\"name\": \"webgrind\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,webgrind\", \"severity\": \"info\", \"metadata\": {\"product\": \"webgrind\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<span id=\\\"invocation_sum\\\"></span> different functions called in <span id=\\\"runtime_sum\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\webgrind.yaml\"}, {\"id\": \"webid\", \"info\": {\"name\": \"webid\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,webid\", \"severity\": \"info\", \"metadata\": {\"product\": \"webid\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<meta name=\\\"generator\\\" content=\\\"webid\\\">\", \"powered by <a href=\\\"http://www.webidsupport.com/\\\">webid\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\webid.yaml\"}, {\"id\": \"webissues\", \"info\": {\"name\": \"webissues\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,webissues\", \"severity\": \"info\", \"metadata\": {\"product\": \"webissues\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div id=\\\"header-right\\\">webissues\", \"<div><input type=\\\"hidden\\\" name=\\\"__formid\\\" id=\\\"field-login-__formid\\\" value=\\\"login\\\" />\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\webissues.yaml\"}, {\"id\": \"webpa\", \"info\": {\"name\": \"webpa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,webpa\", \"severity\": \"info\", \"metadata\": {\"product\": \"webpa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<td align=\\\"right\\\"><div id=\\\"inst_logo\\\"><img src=\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\webpa.yaml\"}, {\"id\": \"webray-situation-awareness\", \"info\": {\"name\": \"webray-situation-awareness\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,webray-situation-awareness\", \"severity\": \"info\", \"metadata\": {\"product\": \"webray-situation-awareness\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"disclaimer\\\" style=\\\"color: #ffffff\\\">《盛邦安全网站监控预警平台服务协议》</a>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\webray-situation-awareness.yaml\"}, {\"id\": \"websidestory\", \"info\": {\"name\": \"websidestory\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,websidestory\", \"severity\": \"info\", \"metadata\": {\"product\": \"websidestory\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!-- websidestory html for search -->\", \"http://websidestory.com\", \"websidestory code\", \"websidestory,inc. all rights reserved. u.s.patent no. 6,393,479b1\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\websidestory.yaml\"}, {\"id\": \"websocket\", \"info\": {\"name\": \"websocket\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,websocket\", \"severity\": \"info\", \"metadata\": {\"product\": \"websocket\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"websockets request was expected\", \"not a websocket handshake\", \"ws://\", \"wss://\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\websocket.yaml\"}, {\"id\": \"webtrust-cert\", \"info\": {\"name\": \"webtrust-cert\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,webtrust-cert\", \"severity\": \"info\", \"metadata\": {\"product\": \"webtrust-cert\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"https://cert.webtrust.org/viewseal\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\webtrust-cert.yaml\"}, {\"id\": \"webuploader\", \"info\": {\"name\": \"webuploader\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,webuploader\", \"severity\": \"info\", \"metadata\": {\"product\": \"webuploader\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/webuploader.css\\\" rel=\\\"stylesheet\", \"/webuploader.js\\\"></script>\", \"/webuploader.min.js\\\"></script>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\webuploader.yaml\"}, {\"id\": \"weisha-learningsystem\", \"info\": {\"name\": \"weisha-learningsystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,weisha-learningsystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"weisha-learningsystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/utility/corescripts/widget.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\weisha-learningsystem.yaml\"}, {\"id\": \"wellcare-health-management-system\", \"info\": {\"name\": \"wellcare-health-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wellcare-health-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"wellcare-health-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/web/vfyphrmedical\\\">健康档案</a></li>\", \"www.wellcare.cn\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\wellcare-health-management-system.yaml\"}, {\"id\": \"weonlydo-product\", \"info\": {\"name\": \"weonlydo-product\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,weonlydo-product\", \"severity\": \"info\", \"metadata\": {\"product\": \"weonlydo-product\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: weonlydo\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\weonlydo-product.yaml\"}, {\"id\": \"werkzeug\", \"info\": {\"name\": \"werkzeug\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,werkzeug\", \"severity\": \"info\", \"metadata\": {\"product\": \"werkzeug\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: werkzeug\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\werkzeug.yaml\"}, {\"id\": \"westell-secure\", \"info\": {\"name\": \"westell-secure\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,westell-secure\", \"severity\": \"info\", \"metadata\": {\"product\": \"westell-secure\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: wstl cpe\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\westell-secure.yaml\"}, {\"id\": \"whatweb\", \"info\": {\"name\": \"whatweb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,whatweb\", \"severity\": \"info\", \"metadata\": {\"product\": \"whatweb\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<body><center><table border=0><tr align=center><td><font color=red size=5>troy serial server</font></td></tr>\", \"network card access password&#058; </b><input type=password size=16 maxlength=16 name=access_psw>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\whatweb.yaml\"}, {\"id\": \"whfst-cms\", \"info\": {\"name\": \"whfst-cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,whfst-cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"whfst-cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"武汉富思特\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\whfst-cms.yaml\"}, {\"id\": \"whir-ezoffice\", \"info\": {\"name\": \"whir-ezoffice\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,whir-ezoffice\", \"severity\": \"info\", \"metadata\": {\"product\": \"whir-ezoffice\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/defaultroot/js/cookie.js\", \"ezofficeusername\", \"whirrootpath\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\whir-ezoffice.yaml\"}, {\"id\": \"whir-flexoffice\", \"info\": {\"name\": \"whir-flexoffice\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,whir-flexoffice\", \"severity\": \"info\", \"metadata\": {\"product\": \"whir-flexoffice\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var flexofficepath=\\\"\\\\/flexoffice\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\whir-flexoffice.yaml\"}, {\"id\": \"whir\", \"info\": {\"name\": \"whir\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,whir\", \"severity\": \"info\", \"metadata\": {\"product\": \"whir\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"css/css_whir.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\whir.yaml\"}, {\"id\": \"whmcs\", \"info\": {\"name\": \"whmcs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,whmcs\", \"severity\": \"info\", \"metadata\": {\"product\": \"whmcs\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div id=\\\"welcome_box\\\">please <a href=\\\"clientarea.php\\\" title=\\\"login\\\"><strong>login</strong></a> or <a href=\\\"register.php\\\" title=\\\"register\\\"><strong>register</strong></a></div>\", \"powered by <a href=\\\"http://www.whmcs.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\whmcs.yaml\"}, {\"id\": \"whtzjkj-erp\", \"info\": {\"name\": \"whtzjkj-erp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,whtzjkj-erp\", \"severity\": \"info\", \"metadata\": {\"product\": \"whtzjkj-erp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/content/home/tzjlog.ico\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\whtzjkj-erp.yaml\"}, {\"id\": \"wifi-an-quan-zhong-duan-she-bei-guan-li\", \"info\": {\"name\": \"wifi安全终端设备管理\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wifi安全终端设备管理\", \"severity\": \"info\", \"metadata\": {\"product\": \"wifi安全终端设备管理\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h1>wifi安全终端设备管理</h1>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\wifi安全终端设备管理.yaml\"}, {\"id\": \"wildfly-server\", \"info\": {\"name\": \"wildfly-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wildfly-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"wildfly-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"wildfly project\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\wildfly-server.yaml\"}, {\"id\": \"willfar-interface-management-tool\", \"info\": {\"name\": \"willfar-interface-management-tool\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,willfar-interface-management-tool\", \"severity\": \"info\", \"metadata\": {\"product\": \"willfar-interface-management-tool\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"alt=\\\"接口应用管理工具\\\"\", \"the wasion software foundation\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\willfar-interface-management-tool.yaml\"}, {\"id\": \"windows-business-server\", \"info\": {\"name\": \"windows-business-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,windows-business-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"windows-business-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/remote\\\">remote web workplace\", \"src=\\\"images/sbslogo.gif\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\windows-business-server.yaml\"}, {\"id\": \"windriver\", \"info\": {\"name\": \"windriver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,windriver\", \"severity\": \"info\", \"metadata\": {\"product\": \"windriver\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: windriver-webserver\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\windriver.yaml\"}, {\"id\": \"wing-ftp-server\", \"info\": {\"name\": \"wing-ftp-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wing-ftp-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"wing-ftp-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: wing ftp server\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\wing-ftp-server.yaml\"}, {\"id\": \"winiis-isp-access-resource-management-system\", \"info\": {\"name\": \"winiis-isp-access-resource-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,winiis-isp-access-resource-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"winiis-isp-access-resource-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"winisp.gif\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\winiis-isp-access-resource-management-system.yaml\"}, {\"id\": \"winmail-server\", \"info\": {\"name\": \"winmail-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,winmail-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"winmail-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"encryptpwd\", \"sessid\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"f_theme\", \"pwdplaceholder\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"(build \", \"background=\\\"customer/winmail_bg11.jpg\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"amax information technologies inc.\", \"pop3,smtp server: <font color=red>\", \"src=\\\"customer/index_winmail_new.gif\", \"src=\\\"themes/default/images/mail_pic.jpg\", \"winmail mail server\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\winmail-server.yaml\"}, {\"id\": \"winwebmail\", \"info\": {\"name\": \"winwebmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,winwebmail\", \"severity\": \"info\", \"metadata\": {\"product\": \"winwebmail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<td class=newsdiv-mid2>邮局管理员可自行分配邮箱！</td>\", \"href=\\\"images\\\\hwem.css\\\"\", \"images/owin.css\", \"type=\\\"hidden\\\" name=\\\"secex\\\"\", \"winwebmail server\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\winwebmail.yaml\"}, {\"id\": \"wireless-access-point-controller\", \"info\": {\"name\": \"wireless-access-point-controller\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wireless-access-point-controller\", \"severity\": \"info\", \"metadata\": {\"product\": \"wireless-access-point-controller\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<select id = \\\"selclangswitch\\\" class=\\\"langswitch\\\" onchange = \\\"switchpagelanguage()\\\">\", \"src=\\\"images/acchtext.png\\\"\", \"var oemproductname = \\\"mvc_howay6000\\\"\", \"var oemproductname = \\\"mvc_howay6100\\\")\", \"版权所有 &copy 2009-2017</div>\", \"苏州汉明科技有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\wireless-access-point-controller.yaml\"}, {\"id\": \"wise-education-cloud-masters\", \"info\": {\"name\": \"wise-education-cloud-masters\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wise-education-cloud-masters\", \"severity\": \"info\", \"metadata\": {\"product\": \"wise-education-cloud-masters\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ctl00_contentplaceholder1_dlttopvideos\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\wise-education-cloud-masters.yaml\"}, {\"id\": \"wisepower-oa\", \"info\": {\"name\": \"wisepower-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wisepower-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"wisepower-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"action=\\\"/wisepower/login.jsp\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\wisepower-oa.yaml\"}, {\"id\": \"wiserice-system\", \"info\": {\"name\": \"wiserice-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wiserice-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"wiserice-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/resources/metronic/scripts/hz-tools.js\", \"<h4>请在下框里画图形来提交登录\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\wiserice-system.yaml\"}, {\"id\": \"wishoa\", \"info\": {\"name\": \"wishoa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wishoa\", \"severity\": \"info\", \"metadata\": {\"product\": \"wishoa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"wishoa_webplugin.js\", \"wishoa_webplugin.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\wishoa.yaml\"}, {\"id\": \"wosign-ssl-cert\", \"info\": {\"name\": \"wosign-ssl-cert\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wosign-ssl-cert\", \"severity\": \"info\", \"metadata\": {\"product\": \"wosign-ssl-cert\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"https://seal.wosign.com/signature\", \"https://seal.wosign.com/tws.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\wosign-ssl-cert.yaml\"}, {\"id\": \"wowza-media-server\", \"info\": {\"name\": \"wowza-media-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wowza-media-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"wowza-media-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<html><head><title>wowza media server\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\wowza-media-server.yaml\"}, {\"id\": \"wowza-wowzastreamingengine\", \"info\": {\"name\": \"wowza-wowzastreamingengine\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wowza-wowzastreamingengine\", \"severity\": \"info\", \"metadata\": {\"product\": \"wowza-wowzastreamingengine\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: wowzastreamingengine\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\wowza-wowzastreamingengine.yaml\"}, {\"id\": \"wq-cms\", \"info\": {\"name\": \"wq-cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wq-cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"wq-cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"inc/wqcms.js\", \"powered by <a href='http://www.wqcms.com\", \"style/wangqi/style.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\wq-cms.yaml\"}, {\"id\": \"ws-server\", \"info\": {\"name\": \"ws-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ws-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"ws-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"websocket servers index.html\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ws-server.yaml\"}, {\"id\": \"wsncm-iot\", \"info\": {\"name\": \"wsncm-iot\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wsncm-iot\", \"severity\": \"info\", \"metadata\": {\"product\": \"wsncm-iot\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"login\\\">物联网供应链与金融风险管理服务\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\wsncm-iot.yaml\"}, {\"id\": \"wsncm-system\", \"info\": {\"name\": \"wsncm-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wsncm-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"wsncm-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"login\\\">wsncm动态仓单系统\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\wsncm-system.yaml\"}, {\"id\": \"wso2-carbon-server\", \"info\": {\"name\": \"wso2-carbon-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wso2-carbon-server\", \"severity\": \"info\", \"metadata\": {\"product\": \"wso2-carbon-server\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: wso2 carbon server\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\wso2-carbon-server.yaml\"}, {\"id\": \"wstmart\", \"info\": {\"name\": \"wstmart\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wstmart\", \"severity\": \"info\", \"metadata\": {\"product\": \"wstmart\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/wstmart/home/\", \"powered by wstmart\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\wstmart.yaml\"}, {\"id\": \"wuliupingtai\", \"info\": {\"name\": \"wuliupingtai\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wuliupingtai\", \"severity\": \"info\", \"metadata\": {\"product\": \"wuliupingtai\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"static/styles/frame/basic.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\wuliupingtai.yaml\"}, {\"id\": \"wygk-product\", \"info\": {\"name\": \"wygk-product\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wygk-product\", \"severity\": \"info\", \"metadata\": {\"product\": \"wygk-product\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"mailto:webmaster@wrzc.net\", \"href=\\\"wrzcnet.ico\", \"url = 'wrzcnet_vote.asp?stype=view';\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\wygk-product.yaml\"}, {\"id\": \"xampp\", \"info\": {\"name\": \"xampp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xampp\", \"severity\": \"info\", \"metadata\": {\"product\": \"xampp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"xampp \", \"font-size: 1.2em; color: red;\\\">new xampp\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xampp.yaml\"}, {\"id\": \"xbrother-monitor\", \"info\": {\"name\": \"xbrother-monitor\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xbrother-monitor\", \"severity\": \"info\", \"metadata\": {\"product\": \"xbrother-monitor\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"if (!getcookie(\\\"x_gu_sid\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xbrother-monitor.yaml\"}, {\"id\": \"xcyg-system\", \"info\": {\"name\": \"xcyg-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xcyg-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"xcyg-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\">digital anywhere platform</h2>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xcyg-system.yaml\"}, {\"id\": \"xdcms\", \"info\": {\"name\": \"xdcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xdcms\", \"severity\": \"info\", \"metadata\": {\"product\": \"xdcms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"system/templates/xdcms/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xdcms.yaml\"}, {\"id\": \"xdebug\", \"info\": {\"name\": \"xdebug\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xdebug\", \"severity\": \"info\", \"metadata\": {\"product\": \"xdebug\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"x-xdebug-profile-filename: /\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xdebug.yaml\"}, {\"id\": \"xdoa-oa\", \"info\": {\"name\": \"xdoa-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xdoa-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"xdoa-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"http://www.xdoa.cn</a>\", \"北京创信达科技有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xdoa-oa.yaml\"}, {\"id\": \"xecure-vpn\", \"info\": {\"name\": \"xecure-vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xecure-vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"xecure-vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"xecure vpn manager\", \"xnstyle.css\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xecure-vpn.yaml\"}, {\"id\": \"xecurevpn\", \"info\": {\"name\": \"xecurevpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xecurevpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"xecurevpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"xnstyle.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xecurevpn.yaml\"}, {\"id\": \"xenapp\", \"info\": {\"name\": \"xenapp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xenapp\", \"severity\": \"info\", \"metadata\": {\"product\": \"xenapp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"window.location=\\\"/citrix/xenapp\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xenapp.yaml\"}, {\"id\": \"xenforo\", \"info\": {\"name\": \"xenforo\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xenforo\", \"severity\": \"info\", \"metadata\": {\"product\": \"xenforo\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"default/xenforo/bell.png\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xenforo.yaml\"}, {\"id\": \"xheditor\", \"info\": {\"name\": \"xheditor\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xheditor\", \"severity\": \"info\", \"metadata\": {\"product\": \"xheditor\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\".xheditor(\", \"class=\\\"xheditor\", \"xheditor_lang/zh-cn.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xheditor.yaml\"}, {\"id\": \"xhlis-oa\", \"info\": {\"name\": \"xhlis-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xhlis-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"xhlis-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>杏和区域检验业务协同平台登录界面</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xhlis-oa.yaml\"}, {\"id\": \"xiaomayi\", \"info\": {\"name\": \"xiaomayi\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xiaomayi\", \"severity\": \"info\", \"metadata\": {\"product\": \"xiaomayi\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/template/ant/css/anthomecomm.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xiaomayi.yaml\"}, {\"id\": \"xiaonaodai\", \"info\": {\"name\": \"xiaonaodai\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xiaonaodai\", \"severity\": \"info\", \"metadata\": {\"product\": \"xiaonaodai\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"http://stat.xiaonaodai.com/stat.php\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xiaonaodai.yaml\"}, {\"id\": \"xinhaisoft-system\", \"info\": {\"name\": \"xinhaisoft-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xinhaisoft-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"xinhaisoft-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"../regist.asp?school=\", \"北京心海导航教育科技股份有限公司-中国心理网版权所有<br>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xinhaisoft-system.yaml\"}, {\"id\": \"xinnet-enterprise-mail\", \"info\": {\"name\": \"xinnet-enterprise-mail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xinnet-enterprise-mail\", \"severity\": \"info\", \"metadata\": {\"product\": \"xinnet-enterprise-mail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"北京新网数码信息技术有限公司 版权所有</span>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xinnet-enterprise-mail.yaml\"}, {\"id\": \"xinnet-mail\", \"info\": {\"name\": \"xinnet-mail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xinnet-mail\", \"severity\": \"info\", \"metadata\": {\"product\": \"xinnet-mail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/webmail//cssv2/tamail.css\", \"src=\\\"cgijson/getloginimg.php?img=logo\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xinnet-mail.yaml\"}, {\"id\": \"xitami\", \"info\": {\"name\": \"xitami\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xitami\", \"severity\": \"info\", \"metadata\": {\"product\": \"xitami\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: xitami\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xitami.yaml\"}, {\"id\": \"xiuno\", \"info\": {\"name\": \"xiuno\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xiuno\", \"severity\": \"info\", \"metadata\": {\"product\": \"xiuno\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"xiuno/xiunobbs\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xiuno.yaml\"}, {\"id\": \"xjhtqy-crm\", \"info\": {\"name\": \"xjhtqy-crm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xjhtqy-crm\", \"severity\": \"info\", \"metadata\": {\"product\": \"xjhtqy-crm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"hidden-xs ewheaderrow\\\"><img src=\\\"aspximages/htqy.png\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xjhtqy-crm.yaml\"}, {\"id\": \"xjhyt-system\", \"info\": {\"name\": \"xjhyt-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xjhyt-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"xjhyt-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<input class=\\\"an1\\\" name=\\\"btnrst\\\" id=\\\"btnrst\\\" type=\\\"reset\\\" value=\\\" \\\" />\", \"class=\\\"wrap login_wrap\\\"\", \"url(images/yh.jpg)\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xjhyt-system.yaml\"}, {\"id\": \"xmall\", \"info\": {\"name\": \"xmall\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xmall\", \"severity\": \"info\", \"metadata\": {\"product\": \"xmall\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"xmadmin.exirck.cn\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xmall.yaml\"}, {\"id\": \"xpaper\", \"info\": {\"name\": \"xpaper\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xpaper\", \"severity\": \"info\", \"metadata\": {\"product\": \"xpaper\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"template/paper/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xpaper.yaml\"}, {\"id\": \"xray-clandbeta\", \"info\": {\"name\": \"xray-clandbeta\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xray-clandbeta\", \"severity\": \"info\", \"metadata\": {\"product\": \"xray-clandbeta\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"2fdaf65cb9342b76c97b027fc6f545e8\"]}, {\"type\": \"word\", \"words\": [\"/cland/css/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xray-clandbeta.yaml\"}, {\"id\": \"xstream\", \"info\": {\"name\": \"xstream\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xstream\", \"severity\": \"info\", \"metadata\": {\"product\": \"xstream\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"exception\", \"com.thoughtworks.xstream\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xstream.yaml\"}, {\"id\": \"xtoa-oa\", \"info\": {\"name\": \"xtoa-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xtoa-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"xtoa-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/app_qjuserinfo/qjuserinfoadd.jsp\", \"/images/default/first/xtoa_logo.png\", \"src=\\\"systemfiles/js/iawebclientactivexcheck.js\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xtoa-oa.yaml\"}, {\"id\": \"xuanniao-traffic-management-platform\", \"info\": {\"name\": \"xuanniao-traffic-management-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xuanniao-traffic-management-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"xuanniao-traffic-management-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"玄鸟流量管理平台\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xuanniao-traffic-management-platform.yaml\"}, {\"id\": \"xunruicms\", \"info\": {\"name\": \"xunruicms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xunruicms\", \"severity\": \"info\", \"metadata\": {\"product\": \"xunruicms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"alt=\\\"xunruicms\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xunruicms.yaml\"}, {\"id\": \"xycms\", \"info\": {\"name\": \"xycms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xycms\", \"severity\": \"info\", \"metadata\": {\"product\": \"xycms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"advfile/ad12.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xycms.yaml\"}, {\"id\": \"xyhcms\", \"info\": {\"name\": \"xyhcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xyhcms\", \"severity\": \"info\", \"metadata\": {\"product\": \"xyhcms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"power by xyhcms\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\xyhcms.yaml\"}, {\"id\": \"yabb\", \"info\": {\"name\": \"yabb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yabb\", \"severity\": \"info\", \"metadata\": {\"product\": \"yabb\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/yabb.js\", \"yabbtime.gettime()\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yabb.yaml\"}, {\"id\": \"yadongsoft-fs3\", \"info\": {\"name\": \"yadongsoft-fs3\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yadongsoft-fs3\", \"severity\": \"info\", \"metadata\": {\"product\": \"yadongsoft-fs3\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"神盾fs<sup>3</sup>文档安全共享系统v2.0</div>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yadongsoft-fs3.yaml\"}, {\"id\": \"yapi\", \"info\": {\"name\": \"yapi\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yapi\", \"severity\": \"info\", \"metadata\": {\"product\": \"yapi\", \"vendor\": \"ymfe\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"yapi\", \"可视化接口管理平台\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yapi.yaml\"}, {\"id\": \"yelala\", \"info\": {\"name\": \"yelala\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yelala\", \"severity\": \"info\", \"metadata\": {\"product\": \"yelala\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/public/js/knockout-3.4.1.debug.js\", \"<form action=\\\"/index.php/home/login/login.html\\\" method=\\\"post\\\" id=\\\"login\\\" class=\\\"form\\\" data-bind=\\\"submit: submitform\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yelala.yaml\"}, {\"id\": \"yfidea-oa\", \"info\": {\"name\": \"yfidea-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yfidea-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"yfidea-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"background=\\\"oa/images/index/oalogin.jpg\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yfidea-oa.yaml\"}, {\"id\": \"yichao-crmreporting\", \"info\": {\"name\": \"yichao-crmreporting\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yichao-crmreporting\", \"severity\": \"info\", \"metadata\": {\"product\": \"yichao-crmreporting\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/css/vendors~index.acfeb.css\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yichao-crmreporting.yaml\"}, {\"id\": \"yichao-system\", \"info\": {\"name\": \"yichao-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yichao-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"yichao-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"amy/webos/jpmanager.js\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yichao-system.yaml\"}, {\"id\": \"yii-framework\", \"info\": {\"name\": \"yii-framework\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yii-framework\", \"severity\": \"info\", \"metadata\": {\"product\": \"yii-framework\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"get started with yii\", \"yii_csrf_token\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yii-framework.yaml\"}, {\"id\": \"yioks-campus-football-management-platform\", \"info\": {\"name\": \"yioks-campus-football-management-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yioks-campus-football-management-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"yioks-campus-football-management-platform\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<script>document.location='/index.mpl?a=login'</script>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yioks-campus-football-management-platform.yaml\"}, {\"id\": \"yiqi-cms\", \"info\": {\"name\": \"yiqi-cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yiqi-cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"yiqi-cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"yiqicms\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yiqi-cms.yaml\"}, {\"id\": \"yirui-iras\", \"info\": {\"name\": \"yirui-iras\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yirui-iras\", \"severity\": \"info\", \"metadata\": {\"product\": \"yirui-iras\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/authjsp/login.jsp\", \"fe0174bb-f093-42af-ab20-7ec621d10488\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yirui-iras.yaml\"}, {\"id\": \"yiyu-opms\", \"info\": {\"name\": \"yiyu-opms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yiyu-opms\", \"severity\": \"info\", \"metadata\": {\"product\": \"yiyu-opms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"opms\", \"opms管理系统,织蝶-企业应用系统为您的企业保驾护航\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yiyu-opms.yaml\"}, {\"id\": \"yizhitong-e7\", \"info\": {\"name\": \"yizhitong-e7\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yizhitong-e7\", \"severity\": \"info\", \"metadata\": {\"product\": \"yizhitong-e7\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"name=\\\"hidden_isbiaozhun\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yizhitong-e7.yaml\"}, {\"id\": \"ymail-optical-content-reading\", \"info\": {\"name\": \"ymail-optical-content-reading\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ymail-optical-content-reading\", \"severity\": \"info\", \"metadata\": {\"product\": \"ymail-optical-content-reading\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/ymail/default/js/menu.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ymail-optical-content-reading.yaml\"}, {\"id\": \"ymhome-oa\", \"info\": {\"name\": \"ymhome-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ymhome-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"ymhome-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/yimioa.apk\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ymhome-oa.yaml\"}, {\"id\": \"yonbip\", \"info\": {\"name\": \"用友BIP\", \"author\": \"jlkl\", \"tags\": \"detect,tech,yonbip\", \"severity\": \"info\", \"metadata\": {\"product\": \"yonbip\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"yonbip\", \"数字化工作台\", \"用友bip\", \"iuap-apcom-workbench/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yonbip.yaml\"}, {\"id\": \"yonyou-nc-xie-tong-oa-guan-li-ruan-jian-v5.1sp1\", \"info\": {\"name\": \"yonyou nc协同-oa管理软件 v5.1sp1\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"yonyou nc协同-oa管理软件 v5.1sp1\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/seeyon/common/images/a8/faviconnc.ico\", \"common/images/a8/faviconnc-1.ico\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yonyou nc协同-oa管理软件 v5.1sp1.yaml\"}, {\"id\": \"yonyou-erp-nc\", \"info\": {\"name\": \"yonyou-erp-nc\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yonyou-erp-nc\", \"severity\": \"info\", \"metadata\": {\"product\": \"yonyou-erp-nc\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/nc/servlet/nc.ui.iufo.login.index\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yonyou-erp-nc.yaml\"}, {\"id\": \"yonyou-erp\", \"info\": {\"name\": \"yonyou-erp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yonyou-erp\", \"severity\": \"info\", \"metadata\": {\"product\": \"yonyou-erp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"login_main_bg\", \"login_owner\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yonyou-erp.yaml\"}, {\"id\": \"yonyou-fe\", \"info\": {\"name\": \"yonyou-fe\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yonyou-fe\", \"severity\": \"info\", \"metadata\": {\"product\": \"yonyou-fe\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"v_hedden\", \"v_show\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yonyou-fe.yaml\"}, {\"id\": \"yonyou-grp-u8\", \"info\": {\"name\": \"yonyou-grp-u8\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yonyou-grp-u8\", \"severity\": \"info\", \"metadata\": {\"product\": \"yonyou-grp-u8\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"key2 = \\\"grp\\\", key3 = \\\"u8\\\"\", \"用友grp-u8\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"b41be1ccc6f9f2894e0cfcf23acf5fc0\"]}]}], \"_source_file\": \"00_unknown\\\\yonyou-grp-u8.yaml\"}, {\"id\": \"yonyou-intelligentplant\", \"info\": {\"name\": \"yonyou-intelligentplant\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yonyou-intelligentplant\", \"severity\": \"info\", \"metadata\": {\"product\": \"yonyou-intelligentplant\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/modules/core/client/views/sidemenu.client.view.html\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yonyou-intelligentplant.yaml\"}, {\"id\": \"yonyou-ism\", \"info\": {\"name\": \"yonyou-ism\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yonyou-ism\", \"severity\": \"info\", \"metadata\": {\"product\": \"yonyou-ism\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"sheight*window.screen.deviceydpi\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yonyou-ism.yaml\"}, {\"id\": \"yonyou-ksoa\", \"info\": {\"name\": \"yonyou-ksoa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yonyou-ksoa\", \"severity\": \"info\", \"metadata\": {\"product\": \"yonyou-ksoa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"onmouseout=\\\"this.classname='btn btnoff'\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yonyou-ksoa.yaml\"}, {\"id\": \"yonyou-nc-cloud\", \"info\": {\"name\": \"yonyou-nc-cloud\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yonyou-nc-cloud\", \"severity\": \"info\", \"metadata\": {\"product\": \"yonyou-nc-cloud\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<meta http-equiv=refresh content=0;url=nccloud>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yonyou-nc-cloud.yaml\"}, {\"id\": \"yonyou-rmis\", \"info\": {\"name\": \"yonyou-rmis\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yonyou-rmis\", \"severity\": \"info\", \"metadata\": {\"product\": \"yonyou-rmis\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"clientfile/rmisupdate.exe\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yonyou-rmis.yaml\"}, {\"id\": \"yonyou-seeyon-oa\", \"info\": {\"name\": \"yonyou-seeyon-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yonyou-seeyon-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"yonyou-seeyon-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"seeyon\", \"seeyonproductid\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/seeyon/\", \"/seeyon/user-data/images/login/login.gif\", \"/seeyon/common/\", \"/seeyon/user-data/images/login/login.gif\", \"m1-server\", \"m3 server\", \"a8-v5企业版\", \"var _ctxpath = '/seeyon'\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yonyou-seeyon-oa.yaml\"}, {\"id\": \"yonyou-shop\", \"info\": {\"name\": \"yonyou-shop\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yonyou-shop\", \"severity\": \"info\", \"metadata\": {\"product\": \"yonyou-shop\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"$.post(\\\"/shopfront/shoppingcar/gotoshoppingcartajax.action\\\",function(data){\", \"url:\\\"/shophome/ajaxgetcompetemessagelist.action\\\",\", \"北京用友政务软件股份有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yonyou-shop.yaml\"}, {\"id\": \"yonyou-turbocrm\", \"info\": {\"name\": \"yonyou-turbocrm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yonyou-turbocrm\", \"severity\": \"info\", \"metadata\": {\"product\": \"yonyou-turbocrm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"crm\", \"loginsys_osv\", \"用友\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"turboui.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yonyou-turbocrm.yaml\"}, {\"id\": \"yonyou-u8-cloud\", \"info\": {\"name\": \"yonyou-u8-cloud\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yonyou-u8-cloud\", \"severity\": \"info\", \"metadata\": {\"product\": \"yonyou-u8-cloud\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"开启u8 cloud云端之旅\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yonyou-u8-cloud.yaml\"}, {\"id\": \"yonyou-u8\", \"info\": {\"name\": \"yonyou-u8\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yonyou-u8\", \"severity\": \"info\", \"metadata\": {\"product\": \"yonyou-u8\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"getfirstu8accid\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yonyou-u8.yaml\"}, {\"id\": \"yonyou-uclient\", \"info\": {\"name\": \"yonyou-uclient\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yonyou-uclient\", \"severity\": \"info\", \"metadata\": {\"product\": \"yonyou-uclient\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"http-equiv=refresh content=0;url=index.jsp\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yonyou-uclient.yaml\"}, {\"id\": \"yonyou-ufida\", \"info\": {\"name\": \"yonyou-ufida\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yonyou-ufida\", \"severity\": \"info\", \"metadata\": {\"product\": \"yonyou-ufida\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/system/login/login.asp?appid=\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yonyou-ufida.yaml\"}, {\"id\": \"yottabyte-rizhiyi\", \"info\": {\"name\": \"yottabyte-rizhiyi\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yottabyte-rizhiyi\", \"severity\": \"info\", \"metadata\": {\"product\": \"yottabyte-rizhiyi\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/static/assets/yottaweb-elements/index.css\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yottabyte-rizhiyi.yaml\"}, {\"id\": \"youhua-iemos_cw\", \"info\": {\"name\": \"youhua-iemos_cw\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,youhua-iemos_cw\", \"severity\": \"info\", \"metadata\": {\"product\": \"youhua-iemos_cw\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var id = document.getelementbyid(\\\"txtyhmm\\\").value\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\youhua-iemos_cw.yaml\"}, {\"id\": \"youhuaopt-system\", \"info\": {\"name\": \"youhuaopt-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,youhuaopt-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"youhuaopt-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/ashx/log/logincheck.ashx?fresh=\\\" + math.random()\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\youhuaopt-system.yaml\"}, {\"id\": \"youngzsoft-dbmail\", \"info\": {\"name\": \"youngzsoft-dbmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,youngzsoft-dbmail\", \"severity\": \"info\", \"metadata\": {\"product\": \"youngzsoft-dbmail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"http://www.dbmailserver.com\\\" target=_blank\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\youngzsoft-dbmail.yaml\"}, {\"id\": \"youphptube-encoder\", \"info\": {\"name\": \"youphptube-encoder\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,youphptube-encoder\", \"severity\": \"info\", \"metadata\": {\"product\": \"youphptube-encoder\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"youphptube\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\youphptube-encoder.yaml\"}, {\"id\": \"yuanian-accounting-software\", \"info\": {\"name\": \"yuanian-accounting-software\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yuanian-accounting-software\", \"severity\": \"info\", \"metadata\": {\"product\": \"yuanian-accounting-software\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/image/logo/yuannian.gif\", \"yuannian.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yuanian-accounting-software.yaml\"}, {\"id\": \"yulong-hids\", \"info\": {\"name\": \"yulong-hids\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yulong-hids\", \"severity\": \"info\", \"metadata\": {\"product\": \"yulong-hids\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h1>驭龙</h1>\", \"<h2>yulong - a cool hids system.</h2>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yulong-hids.yaml\"}, {\"id\": \"yuneasy-ipcalling\", \"info\": {\"name\": \"yuneasy-ipcalling\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yuneasy-ipcalling\", \"severity\": \"info\", \"metadata\": {\"product\": \"yuneasy-ipcalling\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"云翌ip呼叫中心</span>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yuneasy-ipcalling.yaml\"}, {\"id\": \"yunec\", \"info\": {\"name\": \"yunec\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yunec\", \"severity\": \"info\", \"metadata\": {\"product\": \"yunec\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/17rec.html\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yunec.yaml\"}, {\"id\": \"yunhezi\", \"info\": {\"name\": \"yunhezi\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yunhezi\", \"severity\": \"info\", \"metadata\": {\"product\": \"yunhezi\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"client-list dm-clear\\\">\", \"ui/js/seaconfig.js\", \"ui/skins/black/style.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yunhezi.yaml\"}, {\"id\": \"yunkemail\", \"info\": {\"name\": \"yunkemail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yunkemail\", \"severity\": \"info\", \"metadata\": {\"product\": \"yunkemail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"action=\\\"/alimail/error/browserlog\", \"content=\\\"阿里企业邮箱\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yunkemail.yaml\"}, {\"id\": \"yunsuo\", \"info\": {\"name\": \"yunsuo\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yunsuo\", \"severity\": \"info\", \"metadata\": {\"product\": \"yunsuo\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<img class=\\\"yunsuologo\\\"\", \"href=\\\"http://bbs.yunsuo.com.cn\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yunsuo.yaml\"}, {\"id\": \"yzruida-system\", \"info\": {\"name\": \"yzruida-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yzruida-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"yzruida-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"headerbar gradientbar\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\yzruida-system.yaml\"}, {\"id\": \"z-blog\", \"info\": {\"name\": \"z-blog\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,z-blog\", \"severity\": \"info\", \"metadata\": {\"product\": \"z-blog\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"generator\\\" content=\\\"z-blog\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\z-blog.yaml\"}, {\"id\": \"zbintel-system\", \"info\": {\"name\": \"zbintel-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zbintel-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"zbintel-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"background=\\\"images/login_sample_bgz.jpg\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zbintel-system.yaml\"}, {\"id\": \"zcms\", \"info\": {\"name\": \"zcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zcms\", \"severity\": \"info\", \"metadata\": {\"product\": \"zcms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"_zcms_shownewmessage\", \"zcms_skin\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"_zcms_shownewmessage\", \"zcms_skin\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"app=zcms\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zcms.yaml\"}, {\"id\": \"zentao-system\", \"info\": {\"name\": \"zentao-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zentao-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"zentao-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"b1d3deb4bd16c8c1637235515deea114\"]}, {\"type\": \"word\", \"words\": [\"powered by <a href='http://www.zentao.net' target='_blank'>zentaopms\", \"welcome to use zentao!\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"$('#zentao').addclass('btn-success');\", \"href='/zentao/favicon.ico\", \"server: cpws\", \"zentao/theme\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"set-cookie: zentaosid\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zentao-system.yaml\"}, {\"id\": \"zen_cart-shopping\", \"info\": {\"name\": \"zen_cart-shopping\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zen_cart-shopping\", \"severity\": \"info\", \"metadata\": {\"product\": \"zen_cart-shopping\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"shopping cart program by zen cart\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"set-cookie: zenid=\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zen_cart-shopping.yaml\"}, {\"id\": \"zeppelin\", \"info\": {\"name\": \"zeppelin\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zeppelin\", \"severity\": \"info\", \"metadata\": {\"product\": \"zeppelin\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title ng-bind=\\\"$root.pagetitle\\\">zeppelin</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zeppelin.yaml\"}, {\"id\": \"zeroshell-fang-huo-qiang\", \"info\": {\"name\": \"zeroshell-防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zeroshell-防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"zeroshell-防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"zeroshell\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zeroshell-防火墙.yaml\"}, {\"id\": \"zfsoft-educational-management-system\", \"info\": {\"name\": \"zfsoft-educational-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zfsoft-educational-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"zfsoft-educational-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"站点介绍\\\"\", \"style/base/jw.css\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zfsoft-educational-management-system.yaml\"}, {\"id\": \"zfsoft-leaingrn\", \"info\": {\"name\": \"zfsoft-leaingrn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zfsoft-leaingrn\", \"severity\": \"info\", \"metadata\": {\"product\": \"zfsoft-leaingrn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/jwglxt/logo/favicon.ico\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zfsoft-leaingrn.yaml\"}, {\"id\": \"zfsoft-oa\", \"info\": {\"name\": \"zfsoft-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zfsoft-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"zfsoft-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"zfoausername\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zfsoft-oa.yaml\"}, {\"id\": \"zhengdazhongri-education\", \"info\": {\"name\": \"zhengdazhongri-education\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zhengdazhongri-education\", \"severity\": \"info\", \"metadata\": {\"product\": \"zhengdazhongri-education\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"lb_hint\", \"onclick=\\\"safecodeclick\\\" src=\\\"safecode.aspx\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"images/lgline.gif\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zhengdazhongri-education.yaml\"}, {\"id\": \"zhirui\", \"info\": {\"name\": \"zhirui\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zhirui\", \"severity\": \"info\", \"metadata\": {\"product\": \"zhirui\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"智睿软件\", \"zhirui.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zhirui.yaml\"}, {\"id\": \"zhongan-xdecision\", \"info\": {\"name\": \"zhongan-xdecision\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zhongan-xdecision\", \"severity\": \"info\", \"metadata\": {\"product\": \"zhongan-xdecision\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div class=\\\"g-alert-content\\\" id=\\\"g-alert-contentsystem\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zhongan-xdecision.yaml\"}, {\"id\": \"zhongshengsoft-crm\", \"info\": {\"name\": \"zhongshengsoft-crm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zhongshengsoft-crm\", \"severity\": \"info\", \"metadata\": {\"product\": \"zhongshengsoft-crm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"alert(\\\"餐厅编号不能为空\\\")\", \"clientutil.isff=!clientutil.isie\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zhongshengsoft-crm.yaml\"}, {\"id\": \"zhongtan-ndstart\", \"info\": {\"name\": \"zhongtan-ndstart\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zhongtan-ndstart\", \"severity\": \"info\", \"metadata\": {\"product\": \"zhongtan-ndstart\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>南大之星信息发布系统 \", \"var pubnewsarray\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zhongtan-ndstart.yaml\"}, {\"id\": \"zhongyou-system\", \"info\": {\"name\": \"zhongyou-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zhongyou-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"zhongyou-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"background=zhongyou.jpg\", \"众友科技巡检管理软件\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zhongyou-system.yaml\"}, {\"id\": \"zhu-ji-bao\", \"info\": {\"name\": \"zhu-ji-bao\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zhu-ji-bao\", \"severity\": \"info\", \"metadata\": {\"product\": \"zhu-ji-bao\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://z.admin5.com/\\\" target=\", \"您访问的是主机宝服务器默认页\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zhu-ji-bao.yaml\"}, {\"id\": \"zhuofansoft-cms\", \"info\": {\"name\": \"zhuofansoft-cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zhuofansoft-cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"zhuofansoft-cms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"session.infocss.infocssurl\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zhuofansoft-cms.yaml\"}, {\"id\": \"zidesoft-e6\", \"info\": {\"name\": \"zidesoft-e6\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zidesoft-e6\", \"severity\": \"info\", \"metadata\": {\"product\": \"zidesoft-e6\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/static/images/login/btn-login.gif\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zidesoft-e6.yaml\"}, {\"id\": \"ziguanghuayu-attendance-management-system\", \"info\": {\"name\": \"ziguanghuayu-attendance-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ziguanghuayu-attendance-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"ziguanghuayu-attendance-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"广州紫光华宇信息技术有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\ziguanghuayu-attendance-management-system.yaml\"}, {\"id\": \"zipkin\", \"info\": {\"name\": \"zipkin\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zipkin\", \"severity\": \"info\", \"metadata\": {\"product\": \"zipkin\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<base href=\\\"/zipkin/\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zipkin.yaml\"}, {\"id\": \"zizhujianzhan\", \"info\": {\"name\": \"zizhujianzhan\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zizhujianzhan\", \"severity\": \"info\", \"metadata\": {\"product\": \"zizhujianzhan\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"模板系统xinnet\", \"href=\\\"msnim:chat?contact=xinnet@hotmail.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zizhujianzhan.yaml\"}, {\"id\": \"zknet-attendance-management\", \"info\": {\"name\": \"zknet-attendance-management\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zknet-attendance-management\", \"severity\": \"info\", \"metadata\": {\"product\": \"zknet-attendance-management\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"zknet\", \"zksoftware inc.\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"onclick=\\\"showstate(gettext('forgotten password')) \", \"web考勤管理系统\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zknet-attendance-management.yaml\"}, {\"id\": \"zkteco-security-management-system\", \"info\": {\"name\": \"zkteco-security-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zkteco-security-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"zkteco-security-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src='/login/images/zksecurity.png'\", \"百傲瑞达\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"class=\\\"login-finger-btn disabled\\\"\", \"id=\\\"password_hidden\\\"\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"$(\\\".copyright\\\").text(\\\"copyright ? \\\" + server_current_year + \\\" zkteco co., ltd. all rights reserved\\\");\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zkteco-security-management-system.yaml\"}, {\"id\": \"zkteco-system\", \"info\": {\"name\": \"zkteco-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zkteco-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"zkteco-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"m-btn  zkgreen rnd\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zkteco-system.yaml\"}, {\"id\": \"zkteco-shi-jian-an-quan-guan-li-ping-tai\", \"info\": {\"name\": \"zkteco-时间安全管理平台\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zkteco-时间安全管理平台\", \"severity\": \"info\", \"metadata\": {\"product\": \"zkteco-时间安全管理平台\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"zkeco 时间&安全管理平台\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zkteco-时间安全管理平台.yaml\"}, {\"id\": \"zkwell-corrosion-monitoring-and-corrosion-protection-management-system\", \"info\": {\"name\": \"zkwell-corrosion-monitoring-and-corrosion-protection-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zkwell-corrosion-monitoring-and-corrosion-protection-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"zkwell-corrosion-monitoring-and-corrosion-protection-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"background-image:url(images/devicebg.jpg)\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zkwell-corrosion-monitoring-and-corrosion-protection-management-system.yaml\"}, {\"id\": \"znv-digital-campus\", \"info\": {\"name\": \"znv-digital-campus\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,znv-digital-campus\", \"severity\": \"info\", \"metadata\": {\"product\": \"znv-digital-campus\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"list.asp?caseid=\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\znv-digital-campus.yaml\"}, {\"id\": \"zonghousc-system\", \"info\": {\"name\": \"zonghousc-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zonghousc-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"zonghousc-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"data-errormessage-value-missing=\\\"* 请录入用户名\", \"style/default/frui.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zonghousc-system.yaml\"}, {\"id\": \"zoom-search-engine\", \"info\": {\"name\": \"zoom-search-engine\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zoom-search-engine\", \"severity\": \"info\", \"metadata\": {\"product\": \"zoom-search-engine\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"name=\\\"zoom_query\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zoom-search-engine.yaml\"}, {\"id\": \"zoommeeting\", \"info\": {\"name\": \"zoommeeting\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zoommeeting\", \"severity\": \"info\", \"metadata\": {\"product\": \"zoommeeting\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"alert alert-success hideme zoom-newmessage\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zoommeeting.yaml\"}, {\"id\": \"zope\", \"info\": {\"name\": \"zope\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zope\", \"severity\": \"info\", \"metadata\": {\"product\": \"zope\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"x-powered-by: zope\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zope.yaml\"}, {\"id\": \"zotonic\", \"info\": {\"name\": \"zotonic\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zotonic\", \"severity\": \"info\", \"metadata\": {\"product\": \"zotonic\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/lib/js/apps/zotonic-1.0\", \"powered by: zotonic\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zotonic.yaml\"}, {\"id\": \"zte-iad-yu-yin-wang-guan\", \"info\": {\"name\": \"zte-iad语音网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zte-iad语音网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"zte-iad语音网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/image/banner_i532.jpg\", \"/image/i202.gif\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zte-iad语音网关.yaml\"}, {\"id\": \"zte-police-research-system\", \"info\": {\"name\": \"zte-police-research-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zte-police-research-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"zte-police-research-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"img/gonanlogo.jpg\", \"深圳市中兴信息技术有限公司版权所有\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zte-police-research-system.yaml\"}, {\"id\": \"zte-zxsec-tong-yi-an-quan-wang-guan\", \"info\": {\"name\": \"zte-zxsec统一安全网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zte-zxsec统一安全网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"zte-zxsec统一安全网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"welcome to login gateway system\", \"安全网关\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zte-zxsec统一安全网关.yaml\"}, {\"id\": \"zuitu\", \"info\": {\"name\": \"zuitu\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zuitu\", \"severity\": \"info\", \"metadata\": {\"product\": \"zuitu\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"help/zuitu.php\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zuitu.yaml\"}, {\"id\": \"zxoa\", \"info\": {\"name\": \"zxoa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zxoa\", \"severity\": \"info\", \"metadata\": {\"product\": \"zxoa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"name=\\\"button1\\\" value=\\\"\\\" onclick=\\\"javascript:return checkfrom();\\\" id=\\\"button1\\\" class=\\\"loginbtn\\\" />\", \"obj.src = \\\"createcheckcode.aspx?id\\\"+strmath;\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zxoa.yaml\"}, {\"id\": \"zyxel-vmg\", \"info\": {\"name\": \"zyxel-vmg\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zyxel-vmg\", \"severity\": \"info\", \"metadata\": {\"product\": \"zyxel-vmg\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\".::welcome to the web-based configurator::.\", \"zyxelhelp.js\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zyxel-vmg.yaml\"}, {\"id\": \"zyxel-zywall\", \"info\": {\"name\": \"zyxel-zywall\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zyxel-zywall\", \"severity\": \"info\", \"metadata\": {\"product\": \"zyxel-zywall\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>zywall\", \"zyfunction.js\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zyxel-zywall.yaml\"}, {\"id\": \"zzsmit-public-bicycle-management-system\", \"info\": {\"name\": \"zzsmit-public-bicycle-management-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zzsmit-public-bicycle-management-system\", \"severity\": \"info\", \"metadata\": {\"product\": \"zzsmit-public-bicycle-management-system\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/skins/bicycle/css/login.css\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\zzsmit-public-bicycle-management-system.yaml\"}, {\"id\": \"san-ling-sheng-an-an-quan-you-jian-xi-tong\", \"info\": {\"name\": \"三零盛安-安全邮件系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,三零盛安-安全邮件系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"三零盛安-安全邮件系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"30san.all rights reserved.</div>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\三零盛安-安全邮件系统.yaml\"}, {\"id\": \"shi-wu-you-shi-an-nei-wang-an-quan\", \"info\": {\"name\": \"世无忧-世安内网安全\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,世无忧-世安内网安全\", \"severity\": \"info\", \"metadata\": {\"product\": \"世无忧-世安内网安全\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"gzsa. all rights reserved</span>\", \"内网终端安全管理系统登陆界面\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\世无忧-世安内网安全.yaml\"}, {\"id\": \"dong-fang-tong-tongweb-ying-yong-fu-wu-qi\", \"info\": {\"name\": \"东方通tongweb应用服务器\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"东方通tongweb应用服务器\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: tongweb server\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\东方通tongweb应用服务器.yaml\"}, {\"id\": \"zhong-wei-xin-ti-yan-dang-an-cha-xun-xi-tong\", \"info\": {\"name\": \"中卫信-体验档案查询系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,中卫信-体验档案查询系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"中卫信-体验档案查询系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"体检档案查询系统\", \"技术支持：中卫信软件\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\中卫信-体验档案查询系统.yaml\"}, {\"id\": \"zhong-guo-dian-xin-tian-yi-kuan-dai-zheng-qi-wang-guan\", \"info\": {\"name\": \"中国电信-天翼宽带政企网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,中国电信-天翼宽带政企网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"中国电信-天翼宽带政企网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"login\", \"loid_regist()\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\中国电信-天翼宽带政企网关.yaml\"}, {\"id\": \"zhong-xin-jin-dun-xin-xi-an-quan-guan-li-xi-tong\", \"info\": {\"name\": \"中新金盾-信息安全管理系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,中新金盾-信息安全管理系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"中新金盾-信息安全管理系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"c.alertmsg('磁盘空间剩余: ' + space_available + ' m','alert_msg');\", \"onclick=\\\"javascript:useaccountlogin();\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\中新金盾-信息安全管理系统.yaml\"}, {\"id\": \"zhong-xin-jin-dun-fang-huo-qiang\", \"info\": {\"name\": \"中新金盾防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,中新金盾防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"中新金盾防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>中新金盾防火墙</title>\", \"zxfw\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\中新金盾防火墙.yaml\"}, {\"id\": \"zhong-dian-fu-fu-an-quan-ji-xian-guan-li\", \"info\": {\"name\": \"中电福富-安全基线管理\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,中电福富-安全基线管理\", \"severity\": \"info\", \"metadata\": {\"product\": \"中电福富-安全基线管理\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"align=\\\"center\\\">福富软件\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\中电福富-安全基线管理.yaml\"}, {\"id\": \"zhong-ke-bo-hua-wang-long-fang-huo-qiang\", \"info\": {\"name\": \"中科博华-网龙防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,中科博华-网龙防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"中科博华-网龙防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"博华网龙防火墙\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\中科博华-网龙防火墙.yaml\"}, {\"id\": \"zhong-ke-shu-guang-long-xin-fang-huo-qiang\", \"info\": {\"name\": \"中科曙光-龙芯防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,中科曙光-龙芯防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"中科曙光-龙芯防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"login_main_text\\\">曙光龙芯防火墙</div>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\中科曙光-龙芯防火墙.yaml\"}, {\"id\": \"zhong-ke-wang-wei-4a-yun-wei-bao-lei-ji-xi-tong\", \"info\": {\"name\": \"中科网威-4a运维堡垒机系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,中科网威-4a运维堡垒机系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"中科网威-4a运维堡垒机系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"zk.appname='中科网威4a运维堡垒机系统'\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\中科网威-4a运维堡垒机系统.yaml\"}, {\"id\": \"zhong-ke-wang-wei-an-quan-jie-ru-wang-guan\", \"info\": {\"name\": \"中科网威-安全接入网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,中科网威-安全接入网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"中科网威-安全接入网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<form id=\\\"form1\\\" name=\\\"form1\\\" method=\\\"post\\\" action=\\\"login_commit.php\\\" class=\\\"mainbox\\\">\", \"document.getelementbyid(\\\"dkey_login\\\").checked=false;\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\中科网威-安全接入网关.yaml\"}, {\"id\": \"zhong-ke-wang-wei-an-quan-kong-zhi-xi-tong\", \"info\": {\"name\": \"中科网威-安全控制系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,中科网威-安全控制系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"中科网威-安全控制系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div class=\\\"con_r_b_r\\\"> <input class=\\\"btn_bg\", \"dkey_login\\\"?0?\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\中科网威-安全控制系统.yaml\"}, {\"id\": \"zhong-ke-wang-wei-fang-huo-qiang\", \"info\": {\"name\": \"中科网威-防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,中科网威-防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"中科网威-防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<input type=\\\"checkbox\\\" id=\\\"authened_type\\\" name=\\\"authened_type\\\"><i class=\\\"checkbox\\\"></i>\", \"北京中科网威\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\中科网威-防火墙.yaml\"}, {\"id\": \"zhong-tengoa\", \"info\": {\"name\": \"中腾oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,中腾oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"中腾oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"login\", \"systemaction\", \"zt_webframe\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\中腾oa.yaml\"}, {\"id\": \"zhong-yuan-qi-liniaudit-bao-lei-ji\", \"info\": {\"name\": \"中远麒麟iaudit堡垒机\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,中远麒麟iaudit堡垒机\", \"severity\": \"info\", \"metadata\": {\"product\": \"中远麒麟iaudit堡垒机\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"(atype==\\\"fingersecauth\\\"||atype==\\\"localfingersecauth\\\")\", \"www.tosec.com.cn/doc\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\中远麒麟iaudit堡垒机.yaml\"}, {\"id\": \"zhong-tie-xin-an-ke-bo-an-quan-ge-li-yu-xin-xi-dan-xiang-dao-ru-xi-tong\", \"info\": {\"name\": \"中铁信安-科博安全隔离与信息单向导入系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,中铁信安-科博安全隔离与信息单向导入系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"中铁信安-科博安全隔离与信息单向导入系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"科博安全隔离与信息交换系统\", \"科博安全隔离与信息单向导入系统</span>\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\中铁信安-科博安全隔离与信息单向导入系统.yaml\"}, {\"id\": \"feng-yuan-xin-ke-ji-fang-huo-qiang\", \"info\": {\"name\": \"丰源芯科技-防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,丰源芯科技-防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"丰源芯科技-防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title> technology, inc.</title>\", \"深圳市丰源芯科技产业控股有限公司\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\丰源芯科技-防火墙.yaml\"}, {\"id\": \"jiu-si-xie-tong-ban-gong-xi-tong\", \"info\": {\"name\": \"九思协同办公系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"九思协同办公系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"location: /jsoa/login.jsp\"], \"part\": \"header\", \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"fc171c32d6d99f006b1ade860753a9db\"]}, {\"type\": \"word\", \"words\": [\"location.href=\\\"/jsoa/login.jsp\\\";\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\九思协同办公系统.yaml\"}, {\"id\": \"qian-xing-oa-qi-ye-zhi-neng-ban-gong-zi-dong-hua-xi-tong\", \"info\": {\"name\": \"乾星-oa企业智能办公自动化系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,乾星-oa企业智能办公自动化系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"乾星-oa企业智能办公自动化系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"input name=\\\"s1\\\" type=image\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\乾星-oa企业智能办公自动化系统.yaml\"}, {\"id\": \"yun-shi-kong-she-hui-hua-shang-ye-erp-xi-tong\", \"info\": {\"name\": \"云时空社会化商业erp系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"云时空社会化商业erp系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"set-cookie: emscm.session.id\"], \"part\": \"header\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"<title> 云时空社会化商业erp系统</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\云时空社会化商业erp系统.yaml\"}, {\"id\": \"yun-shen-hu-lian-hong-xin-an-quan-guan-kong-ping-tai\", \"info\": {\"name\": \"云深互联-红芯安全管控平台\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,云深互联-红芯安全管控平台\", \"severity\": \"info\", \"metadata\": {\"product\": \"云深互联-红芯安全管控平台\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"红芯安全管控平台\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\云深互联-红芯安全管控平台.yaml\"}, {\"id\": \"ya-dong-ke-ji-shen-dunfs3-wen-dang-an-quan-gong-xiang\", \"info\": {\"name\": \"亚东科技-神盾fs3文档安全共享\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,亚东科技-神盾fs3文档安全共享\", \"severity\": \"info\", \"metadata\": {\"product\": \"亚东科技-神盾fs3文档安全共享\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"神盾fs3文档安全共享系统v2.0\", \"神盾fs<sup>3</sup>文档安全共享系统v2.0</div>\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\亚东科技-神盾fs3文档安全共享.yaml\"}, {\"id\": \"yi-sai-tong--dian-zi-wen-dang-an-quan-guan-li-xi-tong\", \"info\": {\"name\": \"亿赛通-电子文档安全管理系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"亿赛通-电子文档安全管理系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"cdgserver3\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\亿赛通-电子文档安全管理系统.yaml\"}, {\"id\": \"ren-zi-xing-net110-wang-luo-an-quan-shen-ji-xi-tong\", \"info\": {\"name\": \"任子行-net110网络安全审计系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,任子行-net110网络安全审计系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"任子行-net110网络安全审计系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"net110网络安全审计系统\", \"simplemodal.1.4.1.min.js\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\任子行-net110网络安全审计系统.yaml\"}, {\"id\": \"ren-zi-xing-ssl-vpn\", \"info\": {\"name\": \"任子行-ssl-vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,任子行-ssl-vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"任子行-ssl-vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/javascript/validation/sslvpnlogin.js\", \"surfilter\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\任子行-ssl-vpn.yaml\"}, {\"id\": \"ren-zi-xing-surfnx-an-quan-wang-guan\", \"info\": {\"name\": \"任子行-surfnx安全网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,任子行-surfnx安全网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"任子行-surfnx安全网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"lib/templates/surfilter/images/logo_big.png\", \"安全网关\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\任子行-surfnx安全网关.yaml\"}, {\"id\": \"ren-zi-xing-xia-yi-dai-fang-huo-qiang\", \"info\": {\"name\": \"任子行-下一代防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,任子行-下一代防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"任子行-下一代防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"任子行下一代防火墙\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\任子行-下一代防火墙.yaml\"}, {\"id\": \"ren-wo-xingcrm\", \"info\": {\"name\": \"任我行crm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,任我行crm\", \"severity\": \"info\", \"metadata\": {\"product\": \"任我行crm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"crm_lastloginuserkey\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\任我行crm.yaml\"}, {\"id\": \"ren-wo-xing-dian-shang\", \"info\": {\"name\": \"任我行电商\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,任我行电商\", \"severity\": \"info\", \"metadata\": {\"product\": \"任我行电商\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"366ec\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\任我行电商.yaml\"}, {\"id\": \"qi-wang-zhi-zao-erp-xi-tong\", \"info\": {\"name\": \"企望制造erp系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"企望制造erp系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/javascript/js/witfunctions.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\企望制造erp系统.yaml\"}, {\"id\": \"you-shi-kang-wang-guan\", \"info\": {\"name\": \"优仕康-网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,优仕康-网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"优仕康-网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"ipxweb/login.html\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\优仕康-网关.yaml\"}, {\"id\": \"you-you-mailgard-webmail\", \"info\": {\"name\": \"佑友-mailgard-webmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,佑友-mailgard-webmail\", \"severity\": \"info\", \"metadata\": {\"product\": \"佑友-mailgard-webmail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"mailgard webmail\", \"window.open('http://www.hechen.com')\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\佑友-mailgard-webmail.yaml\"}, {\"id\": \"you-you-you-you-fang-huo-qiang\", \"info\": {\"name\": \"佑友-佑友防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,佑友-佑友防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"佑友-佑友防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"inputsize2\\\"\", \"src=\\\"./js/jquery.validate.js\\\"\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\佑友-佑友防火墙.yaml\"}, {\"id\": \"xin-xi-an-quan-guan-li-xi-tong\", \"info\": {\"name\": \"信息安全管理系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,信息安全管理系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"信息安全管理系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=\\\"lblmsg_container\\\"\", \"src=\\\"js/piwik.js\\\"\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\信息安全管理系统.yaml\"}, {\"id\": \"quan-xi-ruo-hai-cang-chu-ban-gong-fu-zhu-guan-li-xi-tong\", \"info\": {\"name\": \"全息若海-仓储办公辅助管理系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,全息若海-仓储办公辅助管理系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"全息若海-仓储办公辅助管理系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"/scripts/easyui/jquery.easyui.min.js\\\"\", \"广州全息若海信息科技有限公司\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\全息若海-仓储办公辅助管理系统.yaml\"}, {\"id\": \"guan-qun-jin-chen-kill-you-jian-an-quan-wang-guan\", \"info\": {\"name\": \"冠群金辰-kill邮件安全网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,冠群金辰-kill邮件安全网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"冠群金辰-kill邮件安全网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"background=\\\"skins/default/images/login_ksgm.jpg\", \"kill邮件安全网关\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\冠群金辰-kill邮件安全网关.yaml\"}, {\"id\": \"lie-mu-lu\", \"info\": {\"name\": \"列目录\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,列目录\", \"severity\": \"info\", \"metadata\": {\"product\": \"列目录\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h1>index of /\", \"<title>index of /\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"<h1>directory listing for /\", \"<title>directory listing for /\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\列目录.yaml\"}, {\"id\": \"qian-yan-wen-dang-an-quan-guan-li-ruan-jian\", \"info\": {\"name\": \"前沿文档安全管理软件\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,前沿文档安全管理软件\", \"severity\": \"info\", \"metadata\": {\"product\": \"前沿文档安全管理软件\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"前沿文档安全管理软件\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\前沿文档安全管理软件.yaml\"}, {\"id\": \"li-da-ke-xun-ldt-an-quan-wang-guan\", \"info\": {\"name\": \"力达科讯-ldt安全网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,力达科讯-ldt安全网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"力达科讯-ldt安全网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<body onload=\\\"chkversion();setlanguage();loading()\\\" onkeydown=\\\"keylogin(event);\\\">\", \"湖北力达科讯\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\力达科讯-ldt安全网关.yaml\"}, {\"id\": \"ban-gong-ping-tai\", \"info\": {\"name\": \"办公平台\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,办公平台\", \"severity\": \"info\", \"metadata\": {\"product\": \"办公平台\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\" href=\\\"xbsj/css/login.css\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\办公平台.yaml\"}, {\"id\": \"hua-yu-shu-an-shi-pin-zong-he-an-quan-wang-guan\", \"info\": {\"name\": \"华域数安-视频综合安全网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,华域数安-视频综合安全网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"华域数安-视频综合安全网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div class=\\\"sys-name\\\">视频综合安全网关</div>\", \"华域数安\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\华域数安-视频综合安全网关.yaml\"}, {\"id\": \"hua-tian-dong-li-xie-tongoa-ban-gong-xi-tong\", \"info\": {\"name\": \"华天动力协同oa办公系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,华天动力协同oa办公系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"华天动力协同oa办公系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/oaapp/webobjects/oaapp.woa\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\华天动力协同oa办公系统.yaml\"}, {\"id\": \"hua-yu-an-quan-wang-guan\", \"info\": {\"name\": \"华御-安全网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,华御-安全网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"华御-安全网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"copy_right = {cn : \\\"\\\", en \", \"var opzoon_ver\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\华御-安全网关.yaml\"}, {\"id\": \"hua-qing-xin-an-tong-yi-an-quan-fang-yu-ping-tai\", \"info\": {\"name\": \"华清信安-统一安全防御平台\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,华清信安-统一安全防御平台\", \"severity\": \"info\", \"metadata\": {\"product\": \"华清信安-统一安全防御平台\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"华清信安统一安全防御平台\", \"window.dmsdefaultlanguage\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\华清信安-统一安全防御平台.yaml\"}, {\"id\": \"hua-lei-ke-ji-wu-liu-xin-xi-xi-tong\", \"info\": {\"name\": \"华磊科技物流信息系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,华磊科技物流信息系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"华磊科技物流信息系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"华磊科技\", \"erp对接\", \"快递系统\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\华磊科技物流信息系统.yaml\"}, {\"id\": \"xie-zhongoa\", \"info\": {\"name\": \"协众oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,协众oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"协众oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"location: index.php?app=main&func=passport&action=login\", \"set-cookie: cnoaoasessid=\"], \"part\": \"header\", \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\协众oa.yaml\"}, {\"id\": \"xie-tong-ban-gong-xi-tong\", \"info\": {\"name\": \"协同办公系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,协同办公系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"协同办公系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=\\\"ckbisaday\\\" type=\\\"checkbox\\\" name=\\\"ckbisaday\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\协同办公系统.yaml\"}, {\"id\": \"xie-daoa\", \"info\": {\"name\": \"协达oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,协达oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"协达oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"img.style.height=(bodyh-84-100)\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\协达oa.yaml\"}, {\"id\": \"he-zhong-shu-ju-wai-wang-an-quan-shu-ju-jiao-huan-xi-tong\", \"info\": {\"name\": \"合众数据-外网安全数据交换系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,合众数据-外网安全数据交换系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"合众数据-外网安全数据交换系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/unimas/\", \"外网安全数据交换系统\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\合众数据-外网安全数据交换系统.yaml\"}, {\"id\": \"he-zhong-shu-ju-shi-pin-an-quan-jie-ru-yong-hu-ren-zheng-xi-tong\", \"info\": {\"name\": \"合众数据-视频安全接入用户认证系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,合众数据-视频安全接入用户认证系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"合众数据-视频安全接入用户认证系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"txtpasswordcssclass\", \"视频安全接入用户认证系统\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\合众数据-视频安全接入用户认证系统.yaml\"}, {\"id\": \"he-zheng-ruan-jian--wang-zhan-qun-nei-rong-guan-li-xi-tong-hzcms\", \"info\": {\"name\": \"合正软件-网站群内容管理系统-hzcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"合正软件-网站群内容管理系统-hzcms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"produced by cms 网站群内容管理系统\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\合正软件-网站群内容管理系统-hzcms.yaml\"}, {\"id\": \"he-fei-yi-yong-xin-xi-ke-ji-you-xian-gong-sicrm-xi-tong\", \"info\": {\"name\": \"合肥易用信息科技有限公司crm系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,合肥易用信息科技有限公司crm系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"合肥易用信息科技有限公司crm系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"2e7ead236832180553dab45ba77db6b7\"]}]}], \"_source_file\": \"00_unknown\\\\合肥易用信息科技有限公司crm系统.yaml\"}, {\"id\": \"ji-da-zheng-yuan-shen-fen-ren-zheng-wang-guan\", \"info\": {\"name\": \"吉大正元-身份认证网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,吉大正元-身份认证网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"吉大正元-身份认证网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/jit_pnx_portal/\", \"吉大正元身份认证网关\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\吉大正元-身份认证网关.yaml\"}, {\"id\": \"tong-cheng-duo-yong-hu-shang-cheng\", \"info\": {\"name\": \"同城多用户商城\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,同城多用户商城\", \"severity\": \"info\", \"metadata\": {\"product\": \"同城多用户商城\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/style_chaoshi/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\同城多用户商城.yaml\"}, {\"id\": \"qi-ming-xing-chen-tian-qingweb-ying-yong-an-quan-wang-guan\", \"info\": {\"name\": \"启明星辰-天清web应用安全网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,启明星辰-天清web应用安全网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"启明星辰-天清web应用安全网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"v2/global/vendor/modernizr/modernizr.js\", \"天清web应用安全网关\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\启明星辰-天清web应用安全网关.yaml\"}, {\"id\": \"qi-ming-xing-chen-tian-yue-wang-luo-an-quan-shen-ji\", \"info\": {\"name\": \"启明星辰-天玥网络安全审计\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,启明星辰-天玥网络安全审计\", \"severity\": \"info\", \"metadata\": {\"product\": \"启明星辰-天玥网络安全审计\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"天玥网络安全审计\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\启明星辰-天玥网络安全审计.yaml\"}, {\"id\": \"qi-ming-xing-chen-tai-he-xin-xi-an-quan-yun-ying-zhong-xin\", \"info\": {\"name\": \"启明星辰-泰合信息安全运营中心\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,启明星辰-泰合信息安全运营中心\", \"severity\": \"info\", \"metadata\": {\"product\": \"启明星辰-泰合信息安全运营中心\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"泰合信息安全运营中心\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\启明星辰-泰合信息安全运营中心.yaml\"}, {\"id\": \"qi-ming-xing-chen-tian-qing-han-mausg-fang-huo-qiang\", \"info\": {\"name\": \"启明星辰天清汉马usg防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,启明星辰天清汉马usg防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"启明星辰天清汉马usg防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"venusense\", \"天清汉马usg防火墙\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/cgi-bin/webui?op=get_product_model\", \"天清汉马usg\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\启明星辰天清汉马usg防火墙.yaml\"}, {\"id\": \"qi-ming-xing-chen-tian-yue-yun-wei-an-quan-wang-guan\", \"info\": {\"name\": \"启明星辰天玥运维安全网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,启明星辰天玥运维安全网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"启明星辰天玥运维安全网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"checklocalservicestatus\", \"天玥运维安全网关\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\启明星辰天玥运维安全网关.yaml\"}, {\"id\": \"he-xin-xia-yi-dai-yun-zhuo-mianvesystem\", \"info\": {\"name\": \"和信下一代云桌面vesystem\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,和信下一代云桌面vesystem\", \"severity\": \"info\", \"metadata\": {\"product\": \"和信下一代云桌面vesystem\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"url=/vesystem\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\和信下一代云桌面vesystem.yaml\"}, {\"id\": \"guo-biaosip-ping-tai-wang-guan\", \"info\": {\"name\": \"国标sip平台网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,国标sip平台网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"国标sip平台网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h5><a href=\\\"config.htm?file=config.htm\\\">start page</a></h5>\\\"???*#e?<?q\", \"sippuaccessserverctx\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\国标sip平台网关.yaml\"}, {\"id\": \"guo-biao-wang-guan-guan-li-xi-tong\", \"info\": {\"name\": \"国标网关管理系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,国标网关管理系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"国标网关管理系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"title>国标网关管理系统</title\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\国标网关管理系统.yaml\"}, {\"id\": \"guo-mai-dian-zi-an-quan-wen-dang-guan-li-xi-tong\", \"info\": {\"name\": \"国迈电子安全文档管理系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,国迈电子安全文档管理系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"国迈电子安全文档管理系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"</span>国迈安全私有云部. <span>all rights reserved\", \"国迈安全私有云部 all rights reserved\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\国迈电子安全文档管理系统.yaml\"}, {\"id\": \"tu-chuang-ruan-jian-tu-shu-guan-zhan-qun-guan-li-xi-tong\", \"info\": {\"name\": \"图创软件-图书馆站群管理系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,图创软件-图书馆站群管理系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"图创软件-图书馆站群管理系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/interlib/common/\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\图创软件-图书馆站群管理系统.yaml\"}, {\"id\": \"sheng-bo-run-lansecs-di-er-dai-fang-huo-qiang\", \"info\": {\"name\": \"圣博润-lansecs第二代防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,圣博润-lansecs第二代防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"圣博润-lansecs第二代防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"lansecs第二代防火墙\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\圣博润-lansecs第二代防火墙.yaml\"}, {\"id\": \"da-hua-zhi-neng-wu-lian-icc-zong-he-guan-li-ping-tai\", \"info\": {\"name\": \"大华智能物联icc综合管理平台\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"大华智能物联icc综合管理平台\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"*客户端会小于800*\", \"/authlogin\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\大华智能物联icc综合管理平台.yaml\"}, {\"id\": \"tian-qing-han-mavpn\", \"info\": {\"name\": \"天清汉马vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,天清汉马vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"天清汉马vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/vpn/common/js/leadsec.js\", \"/vpn/user/common/custom/auth_home.css\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\天清汉马vpn.yaml\"}, {\"id\": \"tian-rong-xin-vpn\", \"info\": {\"name\": \"天融信-vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,天融信-vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"天融信-vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"window.location.href=\\\"/vone/pub/pda.html\\\";\", \"window.location=\\\"/portal_default/index.html\\\";</script>\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\天融信-vpn.yaml\"}, {\"id\": \"tian-rong-xin-web-ying-yong-an-quan-wang-guan\", \"info\": {\"name\": \"天融信-web应用安全网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,天融信-web应用安全网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"天融信-web应用安全网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"this.src='/style/images/rand.php?update=1'\", \"天融信web应用安全网关\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\天融信-web应用安全网关.yaml\"}, {\"id\": \"tian-rong-xin-web-ying-yong-an-quan-fang-hu-xi-tong\", \"info\": {\"name\": \"天融信-web应用安全防护系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,天融信-web应用安全防护系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"天融信-web应用安全防护系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"logintop\\\"\", \"web应用安全防护系统\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\天融信-web应用安全防护系统.yaml\"}, {\"id\": \"tian-rong-xin-web-ying-yong-fang-huo-qiang\", \"info\": {\"name\": \"天融信-web应用防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,天融信-web应用防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"天融信-web应用防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"evpng.fix('div, ul, img, li, input'); //evpng.fix('pngid1, pngid2')\", \"web user login\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\天融信-web应用防火墙.yaml\"}, {\"id\": \"tian-rong-xin-ru-qin-fang-yu-xi-tongtopidp\", \"info\": {\"name\": \"天融信-入侵防御系统topidp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,天融信-入侵防御系统topidp\", \"severity\": \"info\", \"metadata\": {\"product\": \"天融信-入侵防御系统topidp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"天融信入侵防御系统topidp\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\天融信-入侵防御系统topidp.yaml\"}, {\"id\": \"tian-rong-xin-an-quan-shen-ji\", \"info\": {\"name\": \"天融信-安全审计\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,天融信-安全审计\", \"severity\": \"info\", \"metadata\": {\"product\": \"天融信-安全审计\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<p>安全审计</p>\", \"<title>topsec单点登录系统\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\天融信-安全审计.yaml\"}, {\"id\": \"tian-rong-xin-an-quan-guan-li-xi-tong\", \"info\": {\"name\": \"天融信-安全管理系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,天融信-安全管理系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"天融信-安全管理系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"天融信安全管理\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\天融信-安全管理系统.yaml\"}, {\"id\": \"tian-rong-xin-shu-ju-an-quan-guan-li-xi-tong\", \"info\": {\"name\": \"天融信-数据安全管理系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,天融信-数据安全管理系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"天融信-数据安全管理系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"天融信数据安全管理系统\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\天融信-数据安全管理系统.yaml\"}, {\"id\": \"tian-rong-xin-shu-ju-an-quan-xi-tongsbu\", \"info\": {\"name\": \"天融信-数据安全系统sbu\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,天融信-数据安全系统sbu\", \"severity\": \"info\", \"metadata\": {\"product\": \"天融信-数据安全系统sbu\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"天融信数据安全系统sbu\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\天融信-数据安全系统sbu.yaml\"}, {\"id\": \"tian-rong-xin-wang-luo-wei-shi-guo-lü-wang-guan\", \"info\": {\"name\": \"天融信-网络卫士过滤网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,天融信-网络卫士过滤网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"天融信-网络卫士过滤网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"天融信网络卫士过滤网关\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\天融信-网络卫士过滤网关.yaml\"}, {\"id\": \"tian-rong-xintopapp_lb-fu-zai-jun-heng-xi-tong\", \"info\": {\"name\": \"天融信topapp_lb负载均衡系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,天融信topapp_lb负载均衡系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"天融信topapp_lb负载均衡系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>天融信 topapp</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\天融信topapp_lb负载均衡系统.yaml\"}, {\"id\": \"tian-rong-xin-shu-ju-fang-xie-lou-xi-tong\", \"info\": {\"name\": \"天融信数据防泄漏系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,天融信数据防泄漏系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"天融信数据防泄漏系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"topdlp_show\", \"天融信数据防泄漏系统\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\天融信数据防泄漏系统.yaml\"}, {\"id\": \"tian-xing-wang-an-an-quan-dan-xiang-dao-ru-xi-tong\", \"info\": {\"name\": \"天行网安-安全单向导入系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,天行网安-安全单向导入系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"天行网安-安全单向导入系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<meta http-equiv=\\\"refresh\\\" content=\\\"0;url=/usermainaction.action\\\" />\", \"天行安全单向导入系统\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\天行网安-安全单向导入系统.yaml\"}, {\"id\": \"tian-xing-wang-an-shi-pin-tu-xiang-an-quan-jian-kong-jie-ru-xi-tong\", \"info\": {\"name\": \"天行网安-视频图像安全监控接入系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,天行网安-视频图像安全监控接入系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"天行网安-视频图像安全监控接入系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<meta http-equiv=\\\"refresh\\\" content=\\\"0;url=/usercertloginaction.action\\\" />\", \"天行视频图像安全监控接入系统\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\天行网安-视频图像安全监控接入系统.yaml\"}, {\"id\": \"tian-mai-ke-ji-wang-luo-shi-pin-jian-kong-xi-tong\", \"info\": {\"name\": \"天迈科技网络视频监控系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,天迈科技网络视频监控系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"天迈科技网络视频监控系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"jsessionid\", \"天迈科技\", \"网络视频监控系统\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\天迈科技网络视频监控系统.yaml\"}, {\"id\": \"tian-wen-wu-ye-erp-xi-tong\", \"info\": {\"name\": \"天问物业erp系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"天问物业erp系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"www.tw369.com\", \"天问互联\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\天问物业erp系统.yaml\"}, {\"id\": \"tai-yi-xing-chen-xia-yi-dai-fang-huo-qiang\", \"info\": {\"name\": \"太一星晨-下一代防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,太一星晨-下一代防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"太一星晨-下一代防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"t-force下一代防火墙\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\太一星晨-下一代防火墙.yaml\"}, {\"id\": \"qi-an-xin-ngsoc\", \"info\": {\"name\": \"奇安信-ngsoc\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,奇安信-ngsoc\", \"severity\": \"info\", \"metadata\": {\"product\": \"奇安信-ngsoc\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ngsoc关联规则引擎\", \"ngsoc日志采集探针\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\奇安信-ngsoc.yaml\"}, {\"id\": \"qi-an-xin-vpn\", \"info\": {\"name\": \"奇安信-vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,奇安信-vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"奇安信-vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"qianxinvpn\", \"卸载奇安信vpn\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"4cf31d7e53197f79b435b66cc8cb3098\"]}]}], \"_source_file\": \"00_unknown\\\\奇安信-vpn.yaml\"}, {\"id\": \"qi-an-xin-dai-ma-wei-shi\", \"info\": {\"name\": \"奇安信-代码卫士\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,奇安信-代码卫士\", \"severity\": \"info\", \"metadata\": {\"product\": \"奇安信-代码卫士\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"360代码卫士\", \"baseurl : 'app',        //配置模块根路径到静态资源根目录\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\奇安信-代码卫士.yaml\"}, {\"id\": \"qi-an-xin-qi-ye-an-quan-bu-shu\", \"info\": {\"name\": \"奇安信-企业安全部署\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,奇安信-企业安全部署\", \"severity\": \"info\", \"metadata\": {\"product\": \"奇安信-企业安全部署\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"360企业安全部署\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\奇安信-企业安全部署.yaml\"}, {\"id\": \"qi-an-xin-qi-ye-ban-kong-zhi-zhong-xin\", \"info\": {\"name\": \"奇安信-企业版控制中心\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,奇安信-企业版控制中心\", \"severity\": \"info\", \"metadata\": {\"product\": \"奇安信-企业版控制中心\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"360企业版控制中心\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\奇安信-企业版控制中心.yaml\"}, {\"id\": \"qi-an-xin-tian-qing\", \"info\": {\"name\": \"奇安信-天擎\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,奇安信-天擎\", \"severity\": \"info\", \"metadata\": {\"product\": \"奇安信-天擎\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"360新天擎\", \"appid\\\":\\\"skylar6\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\奇安信-天擎.yaml\"}, {\"id\": \"qi-an-xin-tian-ji-guan-li-zhong-xin\", \"info\": {\"name\": \"奇安信-天机管理中心\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,奇安信-天机管理中心\", \"severity\": \"info\", \"metadata\": {\"product\": \"奇安信-天机管理中心\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"360天机管理中心\", \"src=\\\"/resource/img/login/logo_403.png\\\" alt=\\\"360天机\\\"/></a>\\\"\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\奇安信-天机管理中心.yaml\"}, {\"id\": \"qi-an-xin-tian-yan\", \"info\": {\"name\": \"奇安信-天眼\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,奇安信-天眼\", \"severity\": \"info\", \"metadata\": {\"product\": \"奇安信-天眼\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"360天眼\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\奇安信-天眼.yaml\"}, {\"id\": \"qi-an-xin-shu-ju-tuo-min-xi-tong\", \"info\": {\"name\": \"奇安信-数据脱敏系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,奇安信-数据脱敏系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"奇安信-数据脱敏系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"#!/home\\\" class=\\\"sysname\\\">360网神数据脱敏系统 \"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\奇安信-数据脱敏系统.yaml\"}, {\"id\": \"qi-an-xin-zhong-duan-an-quan-guan-li-xi-tongqax-tian-qing\", \"info\": {\"name\": \"奇安信终端安全管理系统qax天擎\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,奇安信终端安全管理系统qax天擎\", \"severity\": \"info\", \"metadata\": {\"product\": \"奇安信终端安全管理系统qax天擎\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=\\\"rsapubkey\\\"\", \"奇安信新天擎\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\奇安信终端安全管理系统qax天擎.yaml\"}, {\"id\": \"qi-yue-suo-dian-zi-qian-zhang-xi-tong\", \"info\": {\"name\": \"契约锁电子签章系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"契约锁电子签章系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"qyswebapp\", \"<title>电子签署平台</title>\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"p3p: cp=cao psa our\"], \"part\": \"header\", \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"ad17b1fc5025ca47f743f7e69c956b26\"]}]}], \"_source_file\": \"00_unknown\\\\契约锁电子签章系统.yaml\"}, {\"id\": \"ao-wei-ya-shi-ping-yun-ping-tai\", \"info\": {\"name\": \"奥威亚视屏云平台\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"奥威亚视屏云平台\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"lickandshowsignupmodal\", \"clickandshowloginmodal\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/css/newtontheme/assets/app.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\奥威亚视屏云平台.yaml\"}, {\"id\": \"hao-shi-tong-fastmeeting\", \"info\": {\"name\": \"好视通-fastmeeting\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,好视通-fastmeeting\", \"severity\": \"info\", \"metadata\": {\"product\": \"好视通-fastmeeting\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"login/createqrcode.do\", \"resources/commonimage/favicon.ico\", \"用户登录\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\好视通-fastmeeting.yaml\"}, {\"id\": \"fu-meng-yun\", \"info\": {\"name\": \"孚盟云\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,孚盟云\", \"severity\": \"info\", \"metadata\": {\"product\": \"孚盟云\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"fumasoft\", \"孚盟云\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\孚盟云.yaml\"}, {\"id\": \"ning-dun-yi-ti-hua-an-quan-ren-zheng-ping-tai\", \"info\": {\"name\": \"宁盾-一体化安全认证平台\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,宁盾-一体化安全认证平台\", \"severity\": \"info\", \"metadata\": {\"product\": \"宁盾-一体化安全认证平台\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=\\\"dynamicpasswordwithmobile\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\宁盾-一体化安全认证平台.yaml\"}, {\"id\": \"yu-shi-vs-isc5000-e\", \"info\": {\"name\": \"宇视vs-isc5000-e\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"宇视vs-isc5000-e\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"location: page/login/\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\宇视vs-isc5000-e.yaml\"}, {\"id\": \"an-bo-tong-ying-yong-wang-guan\", \"info\": {\"name\": \"安博通应用网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,安博通应用网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"安博通应用网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"安博通应用网关\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\安博通应用网关.yaml\"}, {\"id\": \"an-heng-yun-bao-lei-ji\", \"info\": {\"name\": \"安恒云堡垒机\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,安恒云堡垒机\", \"severity\": \"info\", \"metadata\": {\"product\": \"安恒云堡垒机\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"dbappsecurity\", \"安恒云堡垒机\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\安恒云堡垒机.yaml\"}, {\"id\": \"an-heng-xin-xi-ming-yuweb-ying-yong-fang-huo-qiang\", \"info\": {\"name\": \"安恒信息-明御web应用防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,安恒信息-明御web应用防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"安恒信息-明御web应用防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"scripts/app.waf.system.login.js\", \"明御web应用防火墙\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\安恒信息-明御web应用防火墙.yaml\"}, {\"id\": \"an-heng-xin-xi-ming-yu-an-quan-wang-guan\", \"info\": {\"name\": \"安恒信息-明御安全网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,安恒信息-明御安全网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"安恒信息-明御安全网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"明御安全网关\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\安恒信息-明御安全网关.yaml\"}, {\"id\": \"an-heng-xin-xi-ming-yu-shu-ju-ku-shen-ji-yu-feng-xian-kong-zhi-xi-tong\", \"info\": {\"name\": \"安恒信息-明御数据库审计与风险控制系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,安恒信息-明御数据库审计与风险控制系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"安恒信息-明御数据库审计与风险控制系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"明御数据库审计\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\安恒信息-明御数据库审计与风险控制系统.yaml\"}, {\"id\": \"an-heng-xin-xi-ming-yu-zong-he-ri-zhi-shen-ji\", \"info\": {\"name\": \"安恒信息-明御综合日志审计\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,安恒信息-明御综合日志审计\", \"severity\": \"info\", \"metadata\": {\"product\": \"安恒信息-明御综合日志审计\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"明御\", \"综合日志审计分析平台\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\安恒信息-明御综合日志审计.yaml\"}, {\"id\": \"an-heng-xin-xi-ming-yu-yun-wei-shen-ji-yu-feng-xian-kong-zhi-xi-tong\", \"info\": {\"name\": \"安恒信息-明御运维审计与风险控制系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,安恒信息-明御运维审计与风险控制系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"安恒信息-明御运维审计与风险控制系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"明御运维审计\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\安恒信息-明御运维审计与风险控制系统.yaml\"}, {\"id\": \"an-heng-xin-xi-ming-jian-wang-zhan-an-quan-jian-ce-ping-tai\", \"info\": {\"name\": \"安恒信息-明鉴网站安全监测平台\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,安恒信息-明鉴网站安全监测平台\", \"severity\": \"info\", \"metadata\": {\"product\": \"安恒信息-明鉴网站安全监测平台\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"网站安全检测平台\", \"网站安全监测平台\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\安恒信息-明鉴网站安全监测平台.yaml\"}, {\"id\": \"an-heng-xin-xi-fang-huo-qiang\", \"info\": {\"name\": \"安恒信息-防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,安恒信息-防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"安恒信息-防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"dbapp security\", \"scripts/web-common.js\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\安恒信息-防火墙.yaml\"}, {\"id\": \"an-wang-ke-ji-zhi-neng-lu-you-xi-tong\", \"info\": {\"name\": \"安网科技-智能路由系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,安网科技-智能路由系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"安网科技-智能路由系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>安网科技-智能路由系统</title>\", \"var save_time=72;//小时数\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\安网科技-智能路由系统.yaml\"}, {\"id\": \"an-da-tong-tpn-wang-guan-kong-zhi-tai-deng-lu-xi-tong\", \"info\": {\"name\": \"安达通-tpn网关控制台登陆系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,安达通-tpn网关控制台登陆系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"安达通-tpn网关控制台登陆系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"$('#submitid').bind('click',checksubmitfn);\\\"\", \"tpn-2g网关控制台管理员登录\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\安达通-tpn网关控制台登陆系统.yaml\"}, {\"id\": \"an-da-tong-vpn\", \"info\": {\"name\": \"安达通-vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,安达通-vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"安达通-vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"$('#submitid').bind('click',checksubmitfn);\\\"\", \"sjw74 vpn网关控制台管理员登录\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\安达通-vpn.yaml\"}, {\"id\": \"an-you-an-quan-you-jian\", \"info\": {\"name\": \"安邮-安全邮件\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,安邮-安全邮件\", \"severity\": \"info\", \"metadata\": {\"product\": \"安邮-安全邮件\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<span> 客服邮箱support@suremail.cn</span>\", \"content=\\\"北京国信安邮科技有限公司\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\安邮-安全邮件.yaml\"}, {\"id\": \"shan-shi-wang-ke-fang-huo-qiang\", \"info\": {\"name\": \"山石网科防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,山石网科防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"山石网科防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"global_config.js\", \"hillstone\", \"licenseaggrement\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\山石网科防火墙.yaml\"}, {\"id\": \"gong-kong-an-quan-yin-huan-zhi-li-xiang-mu-xi-tong\", \"info\": {\"name\": \"工控安全隐患治理项目系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,工控安全隐患治理项目系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"工控安全隐患治理项目系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"qyxt.html\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\工控安全隐患治理项目系统.yaml\"}, {\"id\": \"fan-ruan-bao-biao\", \"info\": {\"name\": \"帆软报表\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"帆软报表\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"=fs\", \"reportserver\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"content=\\\"finereport--web reporting tool\\\"\", \"finereport/decision\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\帆软报表.yaml\"}, {\"id\": \"fan-ruan-shu-ju-jue-ce-xi-tong\", \"info\": {\"name\": \"帆软数据决策系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"帆软数据决策系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"webroot/decision/file?path=\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\帆软数据决策系统.yaml\"}, {\"id\": \"guang-lian-da-oa\", \"info\": {\"name\": \"广联达oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"广联达oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"location: /services/identification/login.ashx?returnurl=%2f\"], \"part\": \"header\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"gtptdt.aspx\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\广联达oa.yaml\"}, {\"id\": \"wei-san-yun-guan-li-xi-tong\", \"info\": {\"name\": \"微三云管理系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,微三云管理系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"微三云管理系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<dd>管理系统 management system</dd>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\微三云管理系统.yaml\"}, {\"id\": \"wei-hong-oa\", \"info\": {\"name\": \"微宏oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"微宏oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"location: /wh/serverlogin.jsp\"], \"part\": \"header\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/wh/servlet/mainserver\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\微宏oa.yaml\"}, {\"id\": \"hui-er-dun-e-di-tongvpn\", \"info\": {\"name\": \"惠尔顿-e地通vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,惠尔顿-e地通vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"惠尔顿-e地通vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"images/l_name.jpg\", \"jtpsoft style1\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\惠尔顿-e地通vpn.yaml\"}, {\"id\": \"hui-er-dun-xia-yi-dai-fang-huo-qiang\", \"info\": {\"name\": \"惠尔顿-下一代防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,惠尔顿-下一代防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"惠尔顿-下一代防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/base/img/login_logo_ngaf.jpg\", \"惠尔顿下一代防火墙\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\惠尔顿-下一代防火墙.yaml\"}, {\"id\": \"hui-dian-oa\", \"info\": {\"name\": \"慧点oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"慧点oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"www/mobile-version.txt\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\慧点oa.yaml\"}, {\"id\": \"hui-dun-an-quan-shi-pin-he-xin-an-quan-wang-guan\", \"info\": {\"name\": \"慧盾安全-视频核心安全网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,慧盾安全-视频核心安全网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"慧盾安全-视频核心安全网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=\\\"view-login\\\"\", \"title').text('视频会议安全系统\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\慧盾安全-视频核心安全网关.yaml\"}, {\"id\": \"ji-teng-ying-yong-an-quan-wang-guan\", \"info\": {\"name\": \"技腾-应用安全网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,技腾-应用安全网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"技腾-应用安全网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"webui/images/basic/login/main_logo.gif\", \"应用安全网关\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\技腾-应用安全网关.yaml\"}, {\"id\": \"hu-wei-shen-wang-zhan-an-quan-xi-tong\", \"info\": {\"name\": \"护卫神-网站安全系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,护卫神-网站安全系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"护卫神-网站安全系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"护卫神.网站安全系统\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\护卫神-网站安全系统.yaml\"}, {\"id\": \"tuo-er-si-mas\", \"info\": {\"name\": \"拓尔思-mas\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"拓尔思-mas\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"x-mas-server: \", \"location: /mas/\"], \"part\": \"header\", \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"ea5d31497e6f1304cdf4f4660a9b86df\"]}]}], \"_source_file\": \"00_unknown\\\\拓尔思-mas.yaml\"}, {\"id\": \"tuo-er-si-sso\", \"info\": {\"name\": \"拓尔思sso\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"拓尔思sso\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"location: /ids/\"], \"part\": \"header\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/ids/admin/js/oslib\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\拓尔思sso.yaml\"}, {\"id\": \"tuo-er-si-was\", \"info\": {\"name\": \"拓尔思was\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"拓尔思was\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"trs_web_style.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\拓尔思was.yaml\"}, {\"id\": \"zhi-zhang-yi\", \"info\": {\"name\": \"指掌易\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"指掌易\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: zzy_web\"], \"part\": \"header\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"build/framework/js/download.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\指掌易.yaml\"}, {\"id\": \"jie-shun-jielink-zhi-neng-zhong-duan-cao-zuo-ping-tai\", \"info\": {\"name\": \"捷顺 jielink智能终端操作平台\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"捷顺 jielink智能终端操作平台\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"2f809c4759399cae458a29f24490a114\"]}, {\"type\": \"word\", \"words\": [\"/resources/images/jielink_logo.png\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\捷顺 jielink智能终端操作平台.yaml\"}, {\"id\": \"jie-ru-wang-guan-guan-li-ping-tai\", \"info\": {\"name\": \"接入网关管理平台\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,接入网关管理平台\", \"severity\": \"info\", \"metadata\": {\"product\": \"接入网关管理平台\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"edp-web/login.jsp\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\接入网关管理平台.yaml\"}, {\"id\": \"min-xun-ke-ji-eqmail\", \"info\": {\"name\": \"敏讯科技-eqmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,敏讯科技-eqmail\", \"severity\": \"info\", \"metadata\": {\"product\": \"敏讯科技-eqmail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"eqmail.ico\", \"powered by eqmail!\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\敏讯科技-eqmail.yaml\"}, {\"id\": \"min-xun-ke-ji-spammark-you-jian-xin-xi-an-quan-wang-guan\", \"info\": {\"name\": \"敏讯科技-spammark邮件信息安全网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,敏讯科技-spammark邮件信息安全网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"敏讯科技-spammark邮件信息安全网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/cgi-bin/spammark?empty=1\", \"spammark邮件信息安全网关\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\敏讯科技-spammark邮件信息安全网关.yaml\"}, {\"id\": \"shu-zi-hua-xiao-yuan-zong-he-guan-li-xi-tong\", \"info\": {\"name\": \"数字化校园综合管理系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,数字化校园综合管理系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"数字化校园综合管理系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"\\\"../../dc_login/qysignup\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\数字化校园综合管理系统.yaml\"}, {\"id\": \"wen-wang-yi-lian-wen-wang-wei-shi-an-quan-lu-you-qi\", \"info\": {\"name\": \"文网亿联-文网卫士安全路由器\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,文网亿联-文网卫士安全路由器\", \"severity\": \"info\", \"metadata\": {\"product\": \"文网亿联-文网卫士安全路由器\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"文网卫士安全路由器\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\文网亿联-文网卫士安全路由器.yaml\"}, {\"id\": \"xin-wang-hu-lian-zhun-xun-you-jian-xi-tong\", \"info\": {\"name\": \"新网互联-准讯邮件系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,新网互联-准讯邮件系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"新网互联-准讯邮件系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/webmail//cssv2/tamail.css\\\"\", \"src=\\\"cgijson/getloginimg.php?img=logo\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\新网互联-准讯邮件系统.yaml\"}, {\"id\": \"fang-biao-csmail\", \"info\": {\"name\": \"方标-csmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,方标-csmail\", \"severity\": \"info\", \"metadata\": {\"product\": \"方标-csmail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<frame src=\\\"/mainframe_zh-cn.html\\\" />\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\方标-csmail.yaml\"}, {\"id\": \"shi-kong-zhi-you-qi-ye-xin-xi-guan-li\", \"info\": {\"name\": \"时空智友企业信息管理\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"时空智友企业信息管理\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"您的账号已在另一台设备登录，继续登录将挤掉原登录设备，是否继续登录\", \"时空智友\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"2464cbce5dd2681dd4fb62d055520d78\"]}]}], \"_source_file\": \"00_unknown\\\\时空智友企业信息管理.yaml\"}, {\"id\": \"ming-yuan-yunerp\", \"info\": {\"name\": \"明源云erp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,明源云erp\", \"severity\": \"info\", \"metadata\": {\"product\": \"明源云erp\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"明源云erp\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\明源云erp.yaml\"}, {\"id\": \"yi-you-zhi-neng-fan-la-ji-you-jian-xi-tong\", \"info\": {\"name\": \"易邮-智能反垃圾邮件系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,易邮-智能反垃圾邮件系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"易邮-智能反垃圾邮件系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/ymail/default/js/menu.js\", \"ymail's 智能反垃圾邮件系统\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\易邮-智能反垃圾邮件系统.yaml\"}, {\"id\": \"jing-yun-wang-luo-fang-bing-du-xi-tong\", \"info\": {\"name\": \"景云网络防病毒系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,景云网络防病毒系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"景云网络防病毒系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"login_form\", \"styles/images/logo.png\", \"防病毒\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\景云网络防病毒系统.yaml\"}, {\"id\": \"jie-si-an-quan-lie-ying-zhu-ji-an-quan-xiang-ying-xi-tong\", \"info\": {\"name\": \"杰思安全-猎鹰主机安全响应系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,杰思安全-猎鹰主机安全响应系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"杰思安全-猎鹰主机安全响应系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"majorsec\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\杰思安全-猎鹰主机安全响应系统.yaml\"}, {\"id\": \"suo-zi-yu-la-ji-you-jian-fang-huo-qiang\", \"info\": {\"name\": \"梭子鱼垃圾邮件防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,梭子鱼垃圾邮件防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"梭子鱼垃圾邮件防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"梭子鱼垃圾邮件防火墙\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\梭子鱼垃圾邮件防火墙.yaml\"}, {\"id\": \"zheng-tong-hui-feng-shi-li-kong-zhi-tai-oa\", \"info\": {\"name\": \"正通慧丰实例控制台-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,正通慧丰实例控制台-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"正通慧丰实例控制台-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"f07d5960a56ea44c35496bf1dea9a015\"]}]}], \"_source_file\": \"00_unknown\\\\正通慧丰实例控制台-oa.yaml\"}, {\"id\": \"yong-zhongdcs\", \"info\": {\"name\": \"永中dcs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,永中dcs\", \"severity\": \"info\", \"metadata\": {\"product\": \"永中dcs\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>永中文档在线预览dcs</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\永中dcs.yaml\"}, {\"id\": \"han-de-srm-yun-ping-tai\", \"info\": {\"name\": \"汉得srm云平台\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"汉得srm云平台\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/component/font-awesome-3.2.1/css/font-awesome-ie7.min.css\", \"first_login_alter_pwd.screen\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"<title>汉得srm云平台</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\汉得srm云平台.yaml\"}, {\"id\": \"fan-wei-oa-e-cology8\", \"info\": {\"name\": \"泛微-oa e-cology8\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"泛微-oa e-cology8\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/js/ecology8/lang/weaver_lang_7_wev8.js\", \"/js/jquery/plugins/client/jquery.client_wev8.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\泛微-oa e-cology8.yaml\"}, {\"id\": \"fan-wei-e-mobile-yi-dong-guan-li-ping-tai-xiao-xi-fu-wu\", \"info\": {\"name\": \"泛微e-mobile 移动管理平台消息服务\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"泛微e-mobile 移动管理平台消息服务\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"ef1091afecc18200b9322cceb5c683fa\"]}, {\"type\": \"word\", \"words\": [\"<title>emessage 管理界面</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\泛微e-mobile 移动管理平台消息服务.yaml\"}, {\"id\": \"fan-pu-jian-zhu-gong-cheng-shi-gong-oa\", \"info\": {\"name\": \"泛普建筑工程施工oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"泛普建筑工程施工oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"dwr/interface/loginservice.js\", \"dwr/interface/loginservice.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\泛普建筑工程施工oa.yaml\"}, {\"id\": \"tai-xin-tmailer-you-jian-xi-tong\", \"info\": {\"name\": \"泰信tmailer邮件系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"泰信tmailer邮件系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"set-cookie: tm_test=true\", \"server: theproxy\"], \"part\": \"header\", \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"9f99176691d4caf44367865e2602f555\"]}]}], \"_source_file\": \"00_unknown\\\\泰信tmailer邮件系统.yaml\"}, {\"id\": \"zhe-da-en-te-ke-hu-zi-yuan-guan-li-xi-tong--entercrm\", \"info\": {\"name\": \"浙大恩特客户资源管理系统- entercrm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"浙大恩特客户资源管理系统- entercrm\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"entercrm\", \"<title>欢迎使用浙大恩特客户资源管理系统</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\浙大恩特客户资源管理系统- entercrm.yaml\"}, {\"id\": \"lang-chao-fu-wu-qilpmi-guan-li-kou\", \"info\": {\"name\": \"浪潮服务器lpmi管理口\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,浪潮服务器lpmi管理口\", \"severity\": \"info\", \"metadata\": {\"product\": \"浪潮服务器lpmi管理口\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"management system\", \"img/inspur_logo.png\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\浪潮服务器lpmi管理口.yaml\"}, {\"id\": \"hai-xia-xin-xi-hei-dun-wang-luo-an-quan-shen-ji-xi-tong\", \"info\": {\"name\": \"海峡信息-黑盾网络安全审计系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,海峡信息-黑盾网络安全审计系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"海峡信息-黑盾网络安全审计系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"technology, inc.\", \"福建省海峡信息技术有限公司\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\海峡信息-黑盾网络安全审计系统.yaml\"}, {\"id\": \"hai-xia-xin-xi-hei-dun-yun-wei-an-quan-wang-guan\", \"info\": {\"name\": \"海峡信息-黑盾运维安全网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,海峡信息-黑盾运维安全网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"海峡信息-黑盾运维安全网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"黑盾运维安全网关(hd-sgs/v4.0)\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\海峡信息-黑盾运维安全网关.yaml\"}, {\"id\": \"hai-kang-wei-shi-liu-mei-ti-guan-li-fu-wu-qi\", \"info\": {\"name\": \"海康威视流媒体管理服务器\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,海康威视流媒体管理服务器\", \"severity\": \"info\", \"metadata\": {\"product\": \"海康威视流媒体管理服务器\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"mshtml\", \"login\", \"流媒体管理服务器\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\海康威视流媒体管理服务器.yaml\"}, {\"id\": \"hai-xiang-yun-ping-tai\", \"info\": {\"name\": \"海翔云平台\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"海翔云平台\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>登录海翔</title>\", \"./css/seafly/login.css\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\海翔云平台.yaml\"}, {\"id\": \"shen-xin-fuwaf\", \"info\": {\"name\": \"深信服waf\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,深信服waf\", \"severity\": \"info\", \"metadata\": {\"product\": \"深信服waf\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"commonfunction.js\", \"rsa.js\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/loginout.php\", \"redirect to...\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\深信服waf.yaml\"}, {\"id\": \"shen-xin-fuweb-fang-cuan-gai-guan-li-xi-tong\", \"info\": {\"name\": \"深信服web防篡改管理系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,深信服web防篡改管理系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"深信服web防篡改管理系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"web防篡改\", \"cgi-bin/tamper_admin.cgi\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\深信服web防篡改管理系统.yaml\"}, {\"id\": \"shen-xin-fu-shang-wang-xing-wei-guan-li-xi-tong\", \"info\": {\"name\": \"深信服上网行为管理系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,深信服上网行为管理系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"深信服上网行为管理系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"document.write(wrfwwcsfbxmigkrkhxfj\", \"utccjfaewjb = function(str, key)\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\深信服上网行为管理系统.yaml\"}, {\"id\": \"shen-xin-fu-xia-yi-dai-fang-huo-qiang-ngaf\", \"info\": {\"name\": \"深信服下一代防火墙-ngaf\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,深信服下一代防火墙-ngaf\", \"severity\": \"info\", \"metadata\": {\"product\": \"深信服下一代防火墙-ngaf\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ngaf\", \"sangfor\", \"login\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\深信服下一代防火墙-ngaf.yaml\"}, {\"id\": \"shen-xin-fu-an-quan-gan-zhi-ping-tai\", \"info\": {\"name\": \"深信服安全感知平台\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,深信服安全感知平台\", \"severity\": \"info\", \"metadata\": {\"product\": \"深信服安全感知平台\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"apps\", \"login.js\", \"安全感知平台\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\深信服安全感知平台.yaml\"}, {\"id\": \"shen-xin-fu-ying-yong-jiao-fu-bao-biao-xi-tong\", \"info\": {\"name\": \"深信服应用交付报表系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,深信服应用交付报表系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"深信服应用交付报表系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/reportcenter/index.php?cls_mode=cluster_mode_others\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\深信服应用交付报表系统.yaml\"}, {\"id\": \"shen-xin-fu-ying-yong-jiao-fu-guan-li-xi-tong\", \"info\": {\"name\": \"深信服应用交付管理系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"深信服应用交付管理系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>欢迎登录</title>\", \"/report/report.php\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"98128e625a3b98546a206c2170fb5eb3\"]}]}], \"_source_file\": \"00_unknown\\\\深信服应用交付管理系统.yaml\"}, {\"id\": \"shen-xin-fu-xing-wei-gan-zhi-xi-tong\", \"info\": {\"name\": \"深信服行为感知系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,深信服行为感知系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"深信服行为感知系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>loading...</title>\", \"location.href = \\\"./ui/\\\";\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\深信服行为感知系统.yaml\"}, {\"id\": \"dian-qingmis-guan-li-xin-xi-xi-tong\", \"info\": {\"name\": \"点晴mis管理信息系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,点晴mis管理信息系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"点晴mis管理信息系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"837f7af9a5509a71122fe77505e4451c\"]}]}], \"_source_file\": \"00_unknown\\\\点晴mis管理信息系统.yaml\"}, {\"id\": \"ai-ban-gong-oa\", \"info\": {\"name\": \"爱办公-oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,爱办公-oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"爱办公-oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"https://www.ioa.cn/official/download.html\\\" target=\\\"_blank\\\">爱办公app</a>\", \"id=\\\"foot_version\\\">厦门容能科技有限公司\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\爱办公-oa.yaml\"}, {\"id\": \"lie-ying-an-quan-jin-shanv8-zhong-duan-an-quan-xi-tong\", \"info\": {\"name\": \"猎鹰安全-金山v8终端安全系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,猎鹰安全-金山v8终端安全系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"猎鹰安全-金山v8终端安全系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"anouncetext\\\">为了更好的保障企业内网的安全公司决定从即日起全面部署金山企业安全终端防护优化系统\", \"在线安装-v8+终端安全系统web控制台\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\猎鹰安全-金山v8终端安全系统.yaml\"}, {\"id\": \"lie-ying-an-quan-jin-shan-du-ba-qi-ye-ban\", \"info\": {\"name\": \"猎鹰安全-金山毒霸企业版\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,猎鹰安全-金山毒霸企业版\", \"severity\": \"info\", \"metadata\": {\"product\": \"猎鹰安全-金山毒霸企业版\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"title\\\">关于全网部署金山毒霸企业版\", \"金山毒霸企业版\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\猎鹰安全-金山毒霸企业版.yaml\"}, {\"id\": \"lie-ying-an-quan-jin-shan-zhong-duan-an-quan-xi-tong\", \"info\": {\"name\": \"猎鹰安全-金山终端安全系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,猎鹰安全-金山终端安全系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"猎鹰安全-金山终端安全系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"数据库连接异常您可\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\猎鹰安全-金山终端安全系统.yaml\"}, {\"id\": \"rui-you-ying-yong-xu-ni-hua-xi-tong\", \"info\": {\"name\": \"瑞友应用虚拟化系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"瑞友应用虚拟化系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/client/caswebclient.exe\", \"casmain.xgi\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"瑞友天翼－应用虚拟化系统\", \"瑞友应用虚拟化系统\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\瑞友应用虚拟化系统.yaml\"}, {\"id\": \"rui-zhi-kang-cheng-vpn\", \"info\": {\"name\": \"瑞智康诚-vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,瑞智康诚-vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"瑞智康诚-vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"col-md-12 col-xs-12 col-lg-12 external_signin_links\\\"\", \"class=\\\"no-js\\\">请先启用javascript\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\瑞智康诚-vpn.yaml\"}, {\"id\": \"yong-you-fe-xie-zuo-ban-gong-ping-tai\", \"info\": {\"name\": \"用友-fe协作办公平台\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"用友-fe协作办公平台\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"v_hedden\", \"v_show\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\用友-fe协作办公平台.yaml\"}, {\"id\": \"yong-you-u8+oa-xie-tong-guan-li-ruan-jian\", \"info\": {\"name\": \"用友u8+oa协同管理软件\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"用友u8+oa协同管理软件\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"用友u8+oa协同管理软件\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\用友u8+oa协同管理软件.yaml\"}, {\"id\": \"yong-you-u8+oa-ji-chu-ban\", \"info\": {\"name\": \"用友u8+oa基础版\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"用友u8+oa基础版\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"b730edbe9bc850ae9f35dce11edd2c2d\"]}, {\"type\": \"word\", \"words\": [\"用友u8-oa\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\用友u8+oa基础版.yaml\"}, {\"id\": \"yong-you-zhi-yuan-a6-xie-tong-ban-gong-ruan-jian\", \"info\": {\"name\": \"用友致远a6协同办公软件\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"用友致远a6协同办公软件\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"images/login/a6flash.swf\", \"辅助程序安装\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"用友致远a6协同办公软件\", \"辅助程序安装\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\用友致远a6协同办公软件.yaml\"}, {\"id\": \"hao-feng-tong-xun-zhi-neng-fang-huo-qiang\", \"info\": {\"name\": \"皓峰通讯-智能防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,皓峰通讯-智能防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"皓峰通讯-智能防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\" <body bgcolor=#ddeeff onload=\\\"document.all.user.focus()\\\">\", \"皓峰防火墙\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\皓峰通讯-智能防火墙.yaml\"}, {\"id\": \"rui-feng-wang-yun-fang-huo-qiang\", \"info\": {\"name\": \"睿峰网云-防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,睿峰网云-防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"睿峰网云-防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"睿峰网云防火墙\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\睿峰网云-防火墙.yaml\"}, {\"id\": \"shi-hua-ying-ke-ssl-vpn-yuan-cheng-jie-ru-xi-tong\", \"info\": {\"name\": \"石化盈科-ssl-vpn-远程接入系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,石化盈科-ssl-vpn-远程接入系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"石化盈科-ssl-vpn-远程接入系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"new_style/placeholderfriend.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\石化盈科-ssl-vpn-远程接入系统.yaml\"}, {\"id\": \"diao-bao-bao-lei-ji-chan-pin\", \"info\": {\"name\": \"碉堡堡垒机-产品\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,碉堡堡垒机-产品\", \"severity\": \"info\", \"metadata\": {\"product\": \"碉堡堡垒机-产品\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"碉堡堡垒机\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\碉堡堡垒机-产品.yaml\"}, {\"id\": \"ke-xin-ruan-jian-kxmail\", \"info\": {\"name\": \"科信软件-kxmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,科信软件-kxmail\", \"severity\": \"info\", \"metadata\": {\"product\": \"科信软件-kxmail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by <a href=\\\"http://www.kxmail.net\", \"科信邮件系统\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\科信软件-kxmail.yaml\"}, {\"id\": \"ke-lai-wang-luo-quan-liu-liang-an-quan-fen-xi-xi-tong\", \"info\": {\"name\": \"科来-网络全流量安全分析系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,科来-网络全流量安全分析系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"科来-网络全流量安全分析系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"data-i18n=\\\"[html]username\\\">#username&nbsp;&nbsp;</td>\", \"nfr=\\\"true\\\"\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\科来-网络全流量安全分析系统.yaml\"}, {\"id\": \"ke-rong-aio\", \"info\": {\"name\": \"科荣 aio\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"科荣 aio\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/loginaction.do\", \"www.krrj.cn\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"494d1a9cf585c0b6b45462a224fccd90\"]}]}], \"_source_file\": \"00_unknown\\\\科荣 aio.yaml\"}, {\"id\": \"yi-dong-ban-gongoa\", \"info\": {\"name\": \"移动办公oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,移动办公oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"移动办公oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"pad-0 pt-2 pb-2 text-center tc-gray mt-1\\\"\", \"qccodewidth1 = document.getelementbyid(\\\"divqrcode\\\")\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\移动办公oa.yaml\"}, {\"id\": \"yi-dong-ban-gong-ji-gong-zuo-du-ban-xi-tong\", \"info\": {\"name\": \"移动办公及工作督办系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,移动办公及工作督办系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"移动办公及工作督办系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"icon iconxinan\\\"\", \"class=\\\"icon-container wrapper\\\"\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\移动办公及工作督办系统.yaml\"}, {\"id\": \"yi-dong-ban-gong-xi-tong\", \"info\": {\"name\": \"移动办公系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,移动办公系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"移动办公系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"window.location.href = '/ui/html/login.html';\", \"移动办公系统\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\移动办公系统.yaml\"}, {\"id\": \"jian-wang-ke-ji-fang-huo-qiang\", \"info\": {\"name\": \"简网科技-防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,简网科技-防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"简网科技-防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"action=\\\"/logincheck\\\"\", \"class=\\\"login-head clearfix\\\"\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\简网科技-防火墙.yaml\"}, {\"id\": \"zi-guang-dang-an-guan-li-xi-tong\", \"info\": {\"name\": \"紫光档案管理系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,紫光档案管理系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"紫光档案管理系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"3e2ee25dc73811fe2a697deefe447017\"]}, {\"type\": \"word\", \"words\": [\"紫光档案管理系统\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\紫光档案管理系统.yaml\"}, {\"id\": \"zi-guang-ji-tuan-zi-guang-fang-huo-qiang\", \"info\": {\"name\": \"紫光集团-紫光防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,紫光集团-紫光防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"紫光集团-紫光防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"name=\\\"adminlogin\\\" action=\\\"/cgi-bin/manageaccount\\\">\", \"紫光防火墙\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\紫光集团-紫光防火墙.yaml\"}, {\"id\": \"hong-fanioffice\", \"info\": {\"name\": \"红帆ioffice\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,红帆ioffice\", \"severity\": \"info\", \"metadata\": {\"product\": \"红帆ioffice\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>ioffice.net</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\红帆ioffice.yaml\"}, {\"id\": \"zhong-duan-an-quan-guan-li-xi-tong-bao-biao-xi-tong\", \"info\": {\"name\": \"终端安全管理系统报表系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,终端安全管理系统报表系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"终端安全管理系统报表系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"loadprogress.gif\\\" alt=\\\"loading\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\终端安全管理系统报表系统.yaml\"}, {\"id\": \"zong-he-ban-gong-xi-tong\", \"info\": {\"name\": \"综合办公系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,综合办公系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"综合办公系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"var right = document.getelementbyid(\\\"irmmain\\\")\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\综合办公系统.yaml\"}, {\"id\": \"zong-he-an-fang-guan-li-ping-tai-hikvision-isecure-center\", \"info\": {\"name\": \"综合安防管理平台 hikvision-isecure-center\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"综合安防管理平台 hikvision-isecure-center\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/portal/conf/icon/logo.png\", \"nginxservice/v1/download/installrootcert.exe\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/portal/ui/static/favicon.ico\", \"/portal/ui/static/js/chunk-\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/isecure/ui/static/favicon.ico\", \"/isecure/ui/static/js/chunk-\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"/isecure/ui/favicon.ico\", \"/isecure/ui/static/js/\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"4209fe52e5c15345d0a1250f68a14d1e\", \"288e14bff231111157309a4cdf3d545e\"]}, {\"type\": \"word\", \"words\": [\"综合安防管理平台\", \"0x26e11001\", \"/portal/lida-icon/lidaicon.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\综合安防管理平台 hikvision-isecure-center.yaml\"}, {\"id\": \"wang-kang-ke-ji-ns-asg-an-quan-wang-guan\", \"info\": {\"name\": \"网康科技-ns-asg安全网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,网康科技-ns-asg安全网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"网康科技-ns-asg安全网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"400-678-3600\", \"client/thickbox.css\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\网康科技-ns-asg安全网关.yaml\"}, {\"id\": \"wang-kang-ke-ji-xia-yi-dai-fang-huo-qiang\", \"info\": {\"name\": \"网康科技-下一代防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,网康科技-下一代防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"网康科技-下一代防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/images/dashboard/dashboard.png\", \"网康下一代防火墙\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\网康科技-下一代防火墙.yaml\"}, {\"id\": \"wang-kang-ke-ji-hu-lian-wang-kong-zhi-wang-guan\", \"info\": {\"name\": \"网康科技-互联网控制网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,网康科技-互联网控制网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"网康科技-互联网控制网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"网康互联网控制网关\", \"网康科技互联网控制网关\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\网康科技-互联网控制网关.yaml\"}, {\"id\": \"wang-xin-yun-she-bei\", \"info\": {\"name\": \"网心云设备\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,网心云设备\", \"severity\": \"info\", \"metadata\": {\"product\": \"网心云设备\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"favicon.png\", \"网心云设备\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\网心云设备.yaml\"}, {\"id\": \"wang-shen-vpn\", \"info\": {\"name\": \"网神-vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,网神-vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"网神-vpn\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"admin/js/virtual_keyboard.js\", \"src=\\\"images/login_logo.gif\\\"\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\网神-vpn.yaml\"}, {\"id\": \"wang-shen-fang-huo-qiang\", \"info\": {\"name\": \"网神防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,网神防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"网神防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"3600防火墙\", \"网神secgate\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"resources/image/logo_header.png\", \"网神防火墙系统\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\网神防火墙.yaml\"}, {\"id\": \"lao-ban-you-ju-bossmail\", \"info\": {\"name\": \"老板邮局-bossmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,老板邮局-bossmail\", \"severity\": \"info\", \"metadata\": {\"product\": \"老板邮局-bossmail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<span class=\\\"footer_t\\\">powered by bossmail</span>\", \"href=\\\"http://apps.microsoft.com/windows/zh-cn/app/bossmail/24f4bdb3-1bca-467e-9dd9-15a5d278aec6\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\老板邮局-bossmail.yaml\"}, {\"id\": \"lian-ruanit-an-quan-yun-wei-guan-li-xi-tong\", \"info\": {\"name\": \"联软it安全运维管理系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,联软it安全运维管理系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"联软it安全运维管理系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"联软it安全运维管理系统\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\联软it安全运维管理系统.yaml\"}, {\"id\": \"lian-ruan-zhun-ru\", \"info\": {\"name\": \"联软准入\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,联软准入\", \"severity\": \"info\", \"metadata\": {\"product\": \"联软准入\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"leagsoft\", \"redirect\", \"网络准入\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\联软准入.yaml\"}, {\"id\": \"lian-ruan-ke-ji-it-an-quan-yun-wei-guan-li-xi-tong\", \"info\": {\"name\": \"联软科技-it安全运维管理系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,联软科技-it安全运维管理系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"联软科技-it安全运维管理系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"action=\\\"/manager/logincontroller.htm?act=login\", \"联软it安全运维管理系统\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\联软科技-it安全运维管理系统.yaml\"}, {\"id\": \"lian-tong-shi-ke-xin-xi-an-quan-zong-he-guan-li-ping-tai\", \"info\": {\"name\": \"联通时科-信息安全综合管理平台\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,联通时科-信息安全综合管理平台\", \"severity\": \"info\", \"metadata\": {\"product\": \"联通时科-信息安全综合管理平台\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ccaq_kf@unisk.cn\", \"信息安全综合管理平台\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\联通时科-信息安全综合管理平台.yaml\"}, {\"id\": \"zhi-yuan-a6+-xie-tong-guan-li-ruan-jian\", \"info\": {\"name\": \"致远a6+协同管理软件\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"致远a6+协同管理软件\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/seeyon/common/images/a6/favicon.ico\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\致远a6+协同管理软件.yaml\"}, {\"id\": \"zhi-yuan-a6-m-xie-tong-guan-li-ruan-jian\", \"info\": {\"name\": \"致远a6-m协同管理软件\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"致远a6-m协同管理软件\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/yyoa/seeyonoa/common/js/jquery/jquery.js\", \"辅助程序安装\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"seeyonoa/ui/images/login/a6_s_name.png\", \"辅助安装程序\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"致远a6-m协同管理软件\", \"辅助安装程序\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\致远a6-m协同管理软件.yaml\"}, {\"id\": \"zhi-yuan-a6-s-xie-tong-guan-li-ruan-jian\", \"info\": {\"name\": \"致远a6-s协同管理软件\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"致远a6-s协同管理软件\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"致远a6-s协同管理软件\", \"/seeyon/common/images/a6s/favicon.ico\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\致远a6-s协同管理软件.yaml\"}, {\"id\": \"zhi-yuan-a6-v5-xie-tong-guan-li-ruan-jian-.a6u8-v12.5\", \"info\": {\"name\": \"致远a6-v5协同管理软件.a6u8 v12.5\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"致远a6-v5协同管理软件.a6u8 v12.5\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/seeyon/common/images/a6/faviconu8.ico\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\致远a6-v5协同管理软件.a6u8 v12.5.yaml\"}, {\"id\": \"zhi-yuan-a6s-xie-tong-guan-li-ruan-jian\", \"info\": {\"name\": \"致远a6s协同管理软件\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"致远a6s协同管理软件\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"致远a6s协同管理软件\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\致远a6s协同管理软件.yaml\"}, {\"id\": \"zhi-yuan-a8+-ji-tuan-ban\", \"info\": {\"name\": \"致远a8+集团版\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"致远a8+集团版\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"v8_0sp2_211020_2025240\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\致远a8+集团版.yaml\"}, {\"id\": \"zhi-yuan-a8-m-qi-ye-ji-tuan-ban\", \"info\": {\"name\": \"致远a8-m企业集团版\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"致远a8-m企业集团版\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/seeyon/user-data/images/login/login.gif\", \"/seeyon/common/skin/default/images/login.gif\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\致远a8-m企业集团版.yaml\"}, {\"id\": \"zhi-yuan-a8-v5-xie-tong-guan-li-ruan-jian\", \"info\": {\"name\": \"致远a8-v5协同管理软件\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"致远a8-v5协同管理软件\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"https://weixin.seeyon.com/mobilehelp.jsp?random=\", \"a8+集团版\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"common/js/passwdcheck.js?v=v5_6\", \"/seeyon/common/images/a8/favicon.ico\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\致远a8-v5协同管理软件.yaml\"}, {\"id\": \"zhi-yuan-a8n\", \"info\": {\"name\": \"致远a8n\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"致远a8n\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/seeyon/common/images/a8n/favicon.ico\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\致远a8n.yaml\"}, {\"id\": \"zhi-yuan-g6-n-duo-zu-zhi-ban\", \"info\": {\"name\": \"致远g6-n多组织版\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"致远g6-n多组织版\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/seeyon/common/images/g6n/favicon.ico\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\致远g6-n多组织版.yaml\"}, {\"id\": \"zhi-yuan-g6-sc-duo-zu-zhi-ban\", \"info\": {\"name\": \"致远g6-sc多组织版\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"致远g6-sc多组织版\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/seeyon/common/images/g6sc/favicon.ico\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\致远g6-sc多组织版.yaml\"}, {\"id\": \"zhi-yuan-m3-server-v2.0\", \"info\": {\"name\": \"致远m3 server v2.0\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"致远m3 server v2.0\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/mobile_portal/api/m3/core/server/service\", \"<title>m3 server v2.0</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\致远m3 server v2.0.yaml\"}, {\"id\": \"zhi-yuan-oa-(-wei-zhi-ban-ben-)\", \"info\": {\"name\": \"致远oa (未知版本)\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"致远oa (未知版本)\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"seeyon.ui.core-debug.js\", \"common/js/jquery.json-debug.js\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"weixin.seeyon.com/mobilehelp.jsp?random=\", \"/seeyon/common/js/passwdcheck.js?v=\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\致远oa (未知版本).yaml\"}, {\"id\": \"zhi-yuan-ufida-nc-xie-tong-oa-v5.71\", \"info\": {\"name\": \"致远ufida nc协同-oa v5.71\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"致远ufida nc协同-oa v5.71\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"v3_20sp1_2011-12-31\", \"/seeyon/common/js/v3x.js\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\致远ufida nc协同-oa v5.71.yaml\"}, {\"id\": \"zhi-yuan-xie-chuang-a6-xie-tong-ban-gong-ruan-jian\", \"info\": {\"name\": \"致远协创a6协同办公软件\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"致远协创a6协同办公软件\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"致远协创a6协同办公软件\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\致远协创a6协同办公软件.yaml\"}, {\"id\": \"zhi-yuan-xie-tong-ban-gong-ping-tai-v6.0\", \"info\": {\"name\": \"致远协同办公平台 v6.0\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"致远协同办公平台 v6.0\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/qiyun/common/images/q5/favicon.ico\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\致远协同办公平台 v6.0.yaml\"}, {\"id\": \"lan-lingeis-zhi-hui-xie-tong-ping-tai\", \"info\": {\"name\": \"蓝凌eis智慧协同平台\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,蓝凌eis智慧协同平台\", \"severity\": \"info\", \"metadata\": {\"product\": \"蓝凌eis智慧协同平台\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/scripts/jquery.landray.common.js\", \"蓝凌软件\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\蓝凌eis智慧协同平台.yaml\"}, {\"id\": \"lan-hai-zhuo-yue-ji-fei-guan-li-xi-tong\", \"info\": {\"name\": \"蓝海卓越计费管理系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,蓝海卓越计费管理系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"蓝海卓越计费管理系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<script language='javascript'>window.parent.location.href='login.php';</script>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\蓝海卓越计费管理系统.yaml\"}, {\"id\": \"lan-dun-wen-dang-an-quan-guan-li-xi-tong\", \"info\": {\"name\": \"蓝盾-文档安全管理系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,蓝盾-文档安全管理系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"蓝盾-文档安全管理系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"蓝盾文档安全管理系统\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\蓝盾-文档安全管理系统.yaml\"}, {\"id\": \"lan-dun-fang-huo-qiang\", \"info\": {\"name\": \"蓝盾-防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,蓝盾-防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"蓝盾-防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"banquan\\\">蓝盾信息安全技术股份有限公司\", \"防火墙\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\蓝盾-防火墙.yaml\"}, {\"id\": \"feng-wang-qi-ye-liu-kong-yun-lu-you-qi\", \"info\": {\"name\": \"蜂网企业流控云路由器\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,蜂网企业流控云路由器\", \"severity\": \"info\", \"metadata\": {\"product\": \"蜂网企业流控云路由器\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ifw8\", \"login\", \"企业级流控云路由器\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\蜂网企业流控云路由器.yaml\"}, {\"id\": \"rong-zhi-xing-hua-wu-lian-wang-wang-guan\", \"info\": {\"name\": \"融智兴华-物联网网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,融智兴华-物联网网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"融智兴华-物联网网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"物联网网关-北京融智兴华科技有限公司\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\融智兴华-物联网网关.yaml\"}, {\"id\": \"zi-chan-deng-ta-xi-tong\", \"info\": {\"name\": \"资产灯塔系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,资产灯塔系统\", \"severity\": \"info\", \"metadata\": {\"product\": \"资产灯塔系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>资产灯塔系统</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\资产灯塔系统.yaml\"}, {\"id\": \"ruan-jiao-huan-fang-huo-qiang\", \"info\": {\"name\": \"软交换防火墙\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,软交换防火墙\", \"severity\": \"info\", \"metadata\": {\"product\": \"软交换防火墙\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"name=\\\"secretkey\\\" id=\\\"secretkey\\\"\", \"name=\\\"token_code\\\"placeholder=\\\"令牌口令\\\"\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\软交换防火墙.yaml\"}, {\"id\": \"ruan-hong-oa\", \"info\": {\"name\": \"软虹oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"软虹oa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"2012 ruaho 版权所有:北京软虹科技.\", \"user_passwords\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"5d01f90a8f3fed7c83152bfce0403c2f\"]}]}], \"_source_file\": \"00_unknown\\\\软虹oa.yaml\"}, {\"id\": \"da-guan-rpa\", \"info\": {\"name\": \"达观rpa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"达观rpa\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"e2e2ba13339c2fea220f8b4fa6c32c0d\"]}, {\"type\": \"word\", \"words\": [\"<title>rpa</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\达观rpa.yaml\"}, {\"id\": \"yun-wei-an-quan-guan-li-ping-tai\", \"info\": {\"name\": \"运维安全管理平台\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,运维安全管理平台\", \"severity\": \"info\", \"metadata\": {\"product\": \"运维安全管理平台\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"usm\", \"运维安全管理平台\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\运维安全管理平台.yaml\"}, {\"id\": \"dao-er-yun--yi-lian-tong-zhi-hui-guan-li-ping-tai\", \"info\": {\"name\": \"道尔云 一脸通智慧管理平台\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"道尔云 一脸通智慧管理平台\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ashxrequest/systemindex/systemlogin.ashx\", \"view/userreserved/userreservedtest.aspx\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"当前密码安全性不好，请修改密码！\", \"view/systemmng/pwdchanges.aspx\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"location: /login.aspx?returnurl=%2f\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\道尔云 一脸通智慧管理平台.yaml\"}, {\"id\": \"jiu-dian-kuan-dai-yun-ying-xi-tong\", \"info\": {\"name\": \"酒店宽带运营系统\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"酒店宽带运营系统\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"location: /manager/login.php\"], \"part\": \"header\", \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"af545cc70432a9945c33314e9b6546e7\"]}, {\"type\": \"word\", \"words\": [\"<title>酒店宽带运营系统</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\酒店宽带运营系统.yaml\"}, {\"id\": \"jin-he-xie-tong-guan-li-ping-tai\", \"info\": {\"name\": \"金和协同管理平台\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,金和协同管理平台\", \"severity\": \"info\", \"metadata\": {\"product\": \"金和协同管理平台\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"jhsoft.web.login\", \"password.aspx\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"c6/jhsoft.web.login\", \"closewindownoask\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"jinher network\", \"js/passwordcommon.js\", \"js/passwordnew.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\金和协同管理平台.yaml\"}, {\"id\": \"jin-shantimeon-yun-sha-du\", \"info\": {\"name\": \"金山timeon云杀毒\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,金山timeon云杀毒\", \"severity\": \"info\", \"metadata\": {\"product\": \"金山timeon云杀毒\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"timeon\", \"iepngfix/iepngfix_tilebg.js\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\金山timeon云杀毒.yaml\"}, {\"id\": \"jin-pan-tu-shu-guan-wei-xin-guan-li-hou-tai\", \"info\": {\"name\": \"金盘图书馆微信管理后台\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"金盘图书馆微信管理后台\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"vendor/modules/angular-file-upload/angular-file-upload.js\", \"js/config.js\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"0488faca4c19046b94d07c3ee83cf9d6\"]}]}], \"_source_file\": \"00_unknown\\\\金盘图书馆微信管理后台.yaml\"}, {\"id\": \"jin-die-apusic-ying-yong-fu-wu-qi\", \"info\": {\"name\": \"金蝶apusic应用服务器\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"金蝶apusic应用服务器\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: apusic application server\"], \"part\": \"header\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"<td>管理apusic应用服务器</td>\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\金蝶apusic应用服务器.yaml\"}, {\"id\": \"jin-die-yun-xing-kong\", \"info\": {\"name\": \"金蝶云星空\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,金蝶云星空\", \"severity\": \"info\", \"metadata\": {\"product\": \"金蝶云星空\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/clientbin/kingdee.bos.xpf.app.xap\", \"html5/content/themes/kdcss.min.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\金蝶云星空.yaml\"}, {\"id\": \"ming-fei-mcms\", \"info\": {\"name\": \"铭飞mcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"铭飞mcms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/mcms/search.do\\\" method=\", \"static/plugins/ms/1.0.0/ms.js\", \"铭飞mcms\", \"/mdiy/formdata/save.do\"], \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\铭飞mcms.yaml\"}, {\"id\": \"rui-jie-rg-ew1200g\", \"info\": {\"name\": \"锐捷-rg-ew1200g\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,锐捷-rg-ew1200g\", \"severity\": \"info\", \"metadata\": {\"product\": \"锐捷-rg-ew1200g\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/js/app\", \"/static/img/title.ico\", \"锐捷\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\锐捷-rg-ew1200g.yaml\"}, {\"id\": \"a-li-ba-baotter-manager\", \"info\": {\"name\": \"阿里巴巴otter-manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,阿里巴巴otter-manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"阿里巴巴otter-manager\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"otter manager\", \"channellist\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\阿里巴巴otter-manager.yaml\"}, {\"id\": \"fei-yu-xing-xia-yi-dai-fang-huo-qiang-an-quan-wang-guan\", \"info\": {\"name\": \"飞鱼星-下一代防火墙安全网关\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,飞鱼星-下一代防火墙安全网关\", \"severity\": \"info\", \"metadata\": {\"product\": \"飞鱼星-下一代防火墙安全网关\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"/css/cover_admin.css\\\"\", \"下一代防火墙安全网关\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\飞鱼星-下一代防火墙安全网关.yaml\"}, {\"id\": \"fei-yu-xing-an-quan-she-bei\", \"info\": {\"name\": \"飞鱼星-安全设备\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,飞鱼星-安全设备\", \"severity\": \"info\", \"metadata\": {\"product\": \"飞鱼星-安全设备\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"cgi-bin/login\", \"languagechange\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"00_unknown\\\\飞鱼星-安全设备.yaml\"}, {\"id\": \"123solar\", \"info\": {\"name\": \"123solar\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,123solar\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"123solar\\\"\"], \"product\": \"123solar\", \"shodan-query\": [\"title:\\\"123solar\\\"\"], \"vendor\": \"123solar\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>123solar.*?</title>\"]}]}], \"_source_file\": \"123solar\\\\123solar.yaml\"}, {\"id\": \"3cx\", \"info\": {\"name\": \"3cx\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,3cx\", \"severity\": \"info\", \"metadata\": {\"product\": \"3cx\", \"shodan-query\": [\"http.title:\\\"3cx phone system management console\\\"\"], \"vendor\": \"3cx\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>3cx phone system management console.*?</title>\"]}]}], \"_source_file\": \"3cx\\\\3cx.yaml\"}, {\"id\": \"74cms\", \"info\": {\"name\": \"74cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,74cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"74cms\", \"vendor\": \"74cms\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/templates/default/css/common.css\", \"content=\\\"74cms.com\", \"content=\\\"74cms.com\\\"\", \"content=\\\"骑士cms\", \"powered by <a href=\\\"http://www.74cms.com/\\\"\", \"selectjobscategory\"], \"case-insensitive\": true}]}], \"_source_file\": \"74cms\\\\74cms.yaml\"}, {\"id\": \"caseaware\", \"info\": {\"name\": \"caseaware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,caseaware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"caseaware\\\"\"], \"product\": \"caseaware\", \"vendor\": \"a360inc\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>caseaware.*?</title>\"]}]}], \"_source_file\": \"a360inc\\\\caseaware.yaml\"}, {\"id\": \"wordpress_toolbar\", \"info\": {\"name\": \"wordpress_toolbar\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wordpress_toolbar\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=/wp-content/plugins/wordpress-toolbar/\"], \"product\": \"wordpress_toolbar\", \"shodan-query\": [\"http.html:/wp-content/plugins/wordpress-toolbar/\"], \"vendor\": \"abhinavsingh\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/wp-content/plugins/wordpress-toolbar/\"], \"case-insensitive\": true}]}], \"_source_file\": \"abhinavsingh\\\\wordpress_toolbar.yaml\"}, {\"id\": \"acmailer,acmailer_db\", \"info\": {\"name\": \"acmailer,acmailer_db\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,acmailer,acmailer_db\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"acmailer4.0\\\"\"], \"product\": \"acmailer,acmailer_db\", \"shodan-query\": [\"title=\\\"acmailer4.0\\\"\"], \"vendor\": \"acmailer\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"title=\\\"acmailer4.0\"]}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>acmailer4.0.*?</title>\"]}]}], \"_source_file\": \"acmailer\\\\acmailer,acmailer_db.yaml\"}, {\"id\": \"mautic\", \"info\": {\"name\": \"mautic\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mautic\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"mautic\\\"\"], \"google-query\": [\"intitle:\\\"mautic\\\"\"], \"product\": \"mautic\", \"shodan-query\": [\"title:\\\"mautic\\\"\", \"http.title:\\\"mautic\\\"\"], \"vendor\": \"acquia\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>mautic.*?</title>\"]}]}], \"_source_file\": \"acquia\\\\mautic.yaml\"}, {\"id\": \"camera_firmware\", \"info\": {\"name\": \"camera_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,camera_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"acti-视频监控\\\"\"], \"product\": \"camera_firmware\", \"shodan-query\": [\"title:\\\"web configurator\\\"\"], \"vendor\": \"acti\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>web configurator.*?</title>\"]}]}], \"_source_file\": \"acti\\\\camera_firmware.yaml\"}, {\"id\": \"adiscon-loganalyzer\", \"info\": {\"name\": \"adiscon-loganalyzer\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,adiscon-loganalyzer\", \"severity\": \"info\", \"metadata\": {\"product\": \"loganalyzer\", \"vendor\": \"adiscon\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"adiscon gmbh\"], \"case-insensitive\": true}]}], \"_source_file\": \"adiscon\\\\loganalyzer.yaml\"}, {\"id\": \"adminer\", \"info\": {\"name\": \"adminer\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,adminer\", \"severity\": \"info\", \"metadata\": {\"product\": \"adminer\", \"vendor\": \"adminer\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"://www.adminer.org/' target=\\\"_blank\\\" rel=\\\"noreferrer\"], \"case-insensitive\": true}]}], \"_source_file\": \"adminer\\\\adminer.yaml\"}, {\"id\": \"coldfusion\", \"info\": {\"name\": \"coldfusion\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,coldfusion\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"adobe-coldfusion\\\"\", \"title=\\\"coldfusion administrator login\\\"\"], \"google-query\": [\"intitle:\\\"coldfusion administrator login\\\"\"], \"product\": \"coldfusion\", \"shodan-query\": [\"http.component:\\\"adobe coldfusion\\\"\", \"http.title:\\\"coldfusion administrator login\\\"\", \"cpe:\\\"cpe:2.3:a:adobe:coldfusion\\\"\"], \"vendor\": \"adobe\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>coldfusion administrator login.*?</title>\"]}]}], \"_source_file\": \"adobe\\\\coldfusion.yaml\"}, {\"id\": \"commerce\", \"info\": {\"name\": \"commerce\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,commerce\", \"severity\": \"info\", \"metadata\": {\"product\": \"commerce\", \"shodan-query\": [\"x-magento-tags\"], \"vendor\": \"adobe\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"x-magento-tags\"], \"case-insensitive\": true}]}], \"_source_file\": \"adobe\\\\commerce.yaml\"}, {\"id\": \"adobe-connect\", \"info\": {\"name\": \"adobe-connect\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,adobe-connect\", \"severity\": \"info\", \"metadata\": {\"product\": \"connect\", \"vendor\": \"adobe\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/common/scripts/showcontent.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"adobe\\\\connect.yaml\"}, {\"id\": \"experience_manager\", \"info\": {\"name\": \"experience_manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,experience_manager\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"aem sign in\\\"\"], \"google-query\": [\"intitle:\\\"aem sign in\\\"\"], \"product\": \"experience_manager\", \"shodan-query\": [\"http.title:\\\"aem sign in\\\"\", \"http.component:\\\"adobe experience manager\\\"\", \"cpe:\\\"cpe:2.3:a:adobe:experience_manager\\\"\"], \"vendor\": \"adobe\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>aem sign in.*?</title>\"]}]}], \"_source_file\": \"adobe\\\\experience_manager.yaml\"}, {\"id\": \"experience_manager_cloud_service\", \"info\": {\"name\": \"experience_manager_cloud_service\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,experience_manager_cloud_service\", \"severity\": \"info\", \"metadata\": {\"product\": \"experience_manager_cloud_service\", \"shodan-query\": [\"http.title:\\\"aem sign in\\\"\", \"http.component:\\\"adobe experience manager\\\"\"], \"vendor\": \"adobe\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>aem sign in.*?</title>\"]}]}], \"_source_file\": \"adobe\\\\experience_manager_cloud_service.yaml\"}, {\"id\": \"adobe-magento\", \"info\": {\"name\": \"adobe-magento\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,adobe-magento\", \"severity\": \"info\", \"metadata\": {\"product\": \"adobe-magento\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/skin/frontend/\", \"blank_img\"], \"case-insensitive\": true}]}], \"_source_file\": \"adobe\\\\magento.yaml\"}, {\"id\": \"r-seenet\", \"info\": {\"name\": \"r-seenet\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,r-seenet\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"r-seenet\\\"\"], \"product\": \"r-seenet\", \"shodan-query\": [\"http.html:\\\"r-seenet\\\"\"], \"vendor\": \"advantech\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"r-seenet\"], \"case-insensitive\": true}]}], \"_source_file\": \"advantech\\\\r-seenet.yaml\"}, {\"id\": \"afterlogic-aurora-&-webmail\", \"info\": {\"name\": \"afterlogic aurora & webmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,afterlogic aurora & webmail\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"x-server: afterlogicdavserver\"], \"product\": \"afterlogic aurora & webmail\", \"vendor\": \"afterlogic\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"x-server: afterlogicdavserver\"], \"case-insensitive\": true}]}], \"_source_file\": \"afterlogic\\\\afterlogic aurora & webmail.yaml\"}, {\"id\": \"aurora\", \"info\": {\"name\": \"aurora\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,aurora\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"x-server: afterlogicdavserver\"], \"product\": \"aurora\", \"vendor\": \"afterlogic\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"x-server: afterlogicdavserver\"], \"case-insensitive\": true}]}], \"_source_file\": \"afterlogic\\\\aurora.yaml\"}, {\"id\": \"cockpit\", \"info\": {\"name\": \"cockpit\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cockpit\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=688609340\", \"body=\\\"cockpit\\\"\"], \"product\": \"cockpit\", \"shodan-query\": [\"http.favicon.hash:688609340\", \"http.html:\\\"cockpit\\\"\", \"html:\\\"cockpit\\\"\"], \"vendor\": \"agentejo\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"cockpit\"], \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"688609340\"]}]}], \"_source_file\": \"agentejo\\\\cockpit.yaml\"}, {\"id\": \"post-timeline\", \"info\": {\"name\": \"post-timeline\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,post-timeline\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"wp-content/plugins/post-timeline/\\\"\"], \"product\": \"post-timeline\", \"shodan-query\": [\"http.html:\\\"wp-content/plugins/post-timeline/\\\"\"], \"vendor\": \"agilelogix\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"wp-content/plugins/post-timeline/\"], \"case-insensitive\": true}]}], \"_source_file\": \"agilelogix\\\\post-timeline.yaml\"}, {\"id\": \"aim\", \"info\": {\"name\": \"aim\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,aim\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"-1047157256\\\"\"], \"product\": \"aim\", \"vendor\": \"aimstack\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1047157256\"]}]}], \"_source_file\": \"aimstack\\\\aim.yaml\"}, {\"id\": \"cloudtest\", \"info\": {\"name\": \"cloudtest\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cloudtest\", \"severity\": \"info\", \"metadata\": {\"product\": \"cloudtest\", \"shodan-query\": [\"html:\\\"akamai cloudtest\\\"\"], \"vendor\": \"akamai\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"akamai cloudtest\"], \"case-insensitive\": true}]}], \"_source_file\": \"akamai\\\\cloudtest.yaml\"}, {\"id\": \"omnipcx\", \"info\": {\"name\": \"omnipcx\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,omnipcx\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"alcatel_lucent-omnipcx-enterprise\\\"\", \"title=\\\"omnipcx for enterprise\\\"\"], \"google-query\": [\"intitle:\\\"omnipcx for enterprise\\\"\"], \"product\": \"omnipcx\", \"shodan-query\": [\"title:\\\"omnipcx for enterprise\\\"\", \"http.title:\\\"omnipcx for enterprise\\\"\"], \"vendor\": \"alcatel-lucent\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>omnipcx for enterprise.*?</title>\"]}]}], \"_source_file\": \"alcatel-lucent\\\\omnipcx.yaml\"}, {\"id\": \"alibaba-fastjson\", \"info\": {\"name\": \"alibaba-fastjson\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,alibaba-fastjson\", \"severity\": \"info\", \"metadata\": {\"product\": \"fastjson\", \"vendor\": \"alibaba\", \"verified\": true}}, \"http\": [{\"method\": \"POST\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"fastjson\", \"version\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"com.alibaba.fastjson.jsonexception\", \"illegal identifier : @pos 1, json : {@type:java.lang.autocloseable\", \"js/base/fastjson\", \"syntax error, expect {, actual error, pos 0\", \"unclosed string\", \"var json = json.parse\"], \"case-insensitive\": true}]}], \"_source_file\": \"alibaba\\\\fastjson.yaml\"}, {\"id\": \"alibaba-nacos\", \"info\": {\"name\": \"alibaba-nacos\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,alibaba-nacos\", \"severity\": \"info\", \"metadata\": {\"product\": \"nacos\", \"vendor\": \"alibaba\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\", \"{{BaseURL}}/nacos/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>nacos</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"alibaba\\\\nacos.yaml\"}, {\"id\": \"opencms\", \"info\": {\"name\": \"opencms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,opencms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"opencms\\\"\"], \"google-query\": [\"intitle:\\\"opencms\\\"\"], \"product\": \"opencms\", \"shodan-query\": [\"/opencms/\", \"http.title:\\\"opencms\\\"\", \"cpe:\\\"cpe:2.3:a:alkacon:opencms\\\"\", \"title:\\\"opencms\\\"\"], \"vendor\": \"alkacon\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/opencms/\"], \"case-insensitive\": true}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>opencms.*?</title>\"]}]}], \"_source_file\": \"alkacon\\\\opencms.yaml\"}, {\"id\": \"ipm-721s_firmware\", \"info\": {\"name\": \"ipm-721s_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ipm-721s_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"amcrest\", \"body=\\\"amcrest\\\"\"], \"product\": \"ipm-721s_firmware\", \"shodan-query\": [\"html:\\\"amcrest\\\"\", \"http.html:\\\"amcrest\\\"\"], \"vendor\": \"amcrest\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"amcrest\"], \"case-insensitive\": true}]}], \"_source_file\": \"amcrest\\\\ipm-721s_firmware.yaml\"}, {\"id\": \"aj-report\", \"info\": {\"name\": \"aj-report\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,aj-report\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"aj-report\\\"\"], \"product\": \"aj-report\", \"vendor\": \"anji-plus\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>aj-report.*?</title>\"]}]}], \"_source_file\": \"anji-plus\\\\aj-report.yaml\"}, {\"id\": \"report\", \"info\": {\"name\": \"report\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,report\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"aj-report\\\"\"], \"product\": \"report\", \"shodan-query\": [\"http.title:\\\"aj-report\\\"\"], \"vendor\": \"anji-plus\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>aj-report.*?</title>\"]}]}], \"_source_file\": \"anji-plus\\\\report.yaml\"}, {\"id\": \"apache-activemq\", \"info\": {\"name\": \"apache-activemq\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-activemq\", \"severity\": \"info\", \"metadata\": {\"product\": \"activemq\", \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>apache activemq</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"apache\\\\activemq.yaml\"}, {\"id\": \"activemq_apollo\", \"info\": {\"name\": \"activemq_apollo\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,activemq_apollo\", \"severity\": \"info\", \"metadata\": {\"product\": \"activemq_apollo\", \"shodan-query\": [\"title:\\\"apache apollo\\\"\"], \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>apache apollo.*?</title>\"]}]}], \"_source_file\": \"apache\\\\activemq_apollo.yaml\"}, {\"id\": \"apache-airflow\", \"info\": {\"name\": \"apache-airflow\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-airflow\", \"severity\": \"info\", \"metadata\": {\"product\": \"airflow\", \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<span>airflow</span>\", \"airflow\", \"src=\\\"/static/pin_100.png\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"apache\\\\airflow.yaml\"}, {\"id\": \"apache-ambari\", \"info\": {\"name\": \"apache-ambari\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-ambari\", \"severity\": \"info\", \"metadata\": {\"product\": \"ambari\", \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"\\\"/licenses/notice.txt\\\"\", \"<title>ambari</title>\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"apache\\\\ambari.yaml\"}, {\"id\": \"apache-apisix\", \"info\": {\"name\": \"apache-apisix\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-apisix\", \"severity\": \"info\", \"metadata\": {\"product\": \"apisix\", \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content-type: text/plain\", \"server: nginx\"], \"part\": \"header\", \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"content-type: text/plain\", \"server: openresty\"], \"part\": \"header\", \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"content-type: text/plain\", \"server: tengine\"], \"part\": \"header\", \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"{\\\"error_msg\\\":\\\"404 route not found\\\"}\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"server: apisix\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"apache\\\\apisix.yaml\"}, {\"id\": \"apache-axis2\", \"info\": {\"name\": \"apache-axis2\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-axis2\", \"severity\": \"info\", \"metadata\": {\"product\": \"axis2\", \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"axis2-admin\", \"axis2-web\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"apache\\\\axis2.yaml\"}, {\"id\": \"cloudstack\", \"info\": {\"name\": \"cloudstack\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cloudstack\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"apache-cloudstack\\\"\"], \"product\": \"cloudstack\", \"shodan-query\": [\"http.title:\\\"apache cloudstack\\\"\"], \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>apache cloudstack.*?</title>\"]}]}], \"_source_file\": \"apache\\\\cloudstack.yaml\"}, {\"id\": \"apache-cocoon\", \"info\": {\"name\": \"apache-cocoon\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-cocoon\", \"severity\": \"info\", \"metadata\": {\"product\": \"cocoon\", \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"x-cocoon-version:\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"apache\\\\cocoon.yaml\"}, {\"id\": \"apache-couchdb\", \"info\": {\"name\": \"apache-couchdb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-couchdb\", \"severity\": \"info\", \"metadata\": {\"product\": \"couchdb\", \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: couchdb\", \"x-couchdb-body-time: 0\"], \"part\": \"header\", \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"2ab2aae806e8393b70970b2eaace82e0\"]}]}], \"_source_file\": \"apache\\\\couchdb.yaml\"}, {\"id\": \"dolphinscheduler\", \"info\": {\"name\": \"dolphinscheduler\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dolphinscheduler\", \"severity\": \"info\", \"metadata\": {\"product\": \"dolphinscheduler\", \"shodan-query\": [\"http.title:\\\"dolphinscheduler\\\"\"], \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>dolphinscheduler.*?</title>\"]}]}], \"_source_file\": \"apache\\\\dolphinscheduler.yaml\"}, {\"id\": \"doris\", \"info\": {\"name\": \"doris\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,doris\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=24048806\"], \"product\": \"doris\", \"shodan-query\": [\"http.favicon.hash:\\\"24048806\\\"\"], \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"24048806\"]}]}], \"_source_file\": \"apache\\\\doris.yaml\"}, {\"id\": \"apache-druid\", \"info\": {\"name\": \"apache-druid\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-druid\", \"severity\": \"info\", \"metadata\": {\"product\": \"druid\", \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"apache druid console\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"apache\\\\druid.yaml\"}, {\"id\": \"apache-dubbo\", \"info\": {\"name\": \"apache-dubbo\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-dubbo\", \"severity\": \"info\", \"metadata\": {\"product\": \"dubbo\", \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"www-authenticate: basic realm=\\\"dubbo\\\"\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"apache\\\\dubbo.yaml\"}, {\"id\": \"apache-flink\", \"info\": {\"name\": \"apache-flink\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-flink\", \"severity\": \"info\", \"metadata\": {\"product\": \"flink\", \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<img alt=\\\"apache flink dashboard\\\" src=\\\"images/flink-logo.png\", \"<title>apache flink web dashboard</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"apache\\\\flink.yaml\"}, {\"id\": \"apache-hadoop\", \"info\": {\"name\": \"apache-hadoop\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-hadoop\", \"severity\": \"info\", \"metadata\": {\"product\": \"hadoop\", \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/static/hadoop-st.png\", \"parsehadoopprogress\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"apache\\\\hadoop.yaml\"}, {\"id\": \"apache-http\", \"info\": {\"name\": \"apache-http\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-http\", \"severity\": \"info\", \"metadata\": {\"product\": \"http_server\", \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: apache\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"apache\\\\http_server.yaml\"}, {\"id\": \"hugegraph\", \"info\": {\"name\": \"hugegraph\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hugegraph\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"hugegraph\\\"\"], \"product\": \"hugegraph\", \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>hugegraph.*?</title>\"]}]}], \"_source_file\": \"apache\\\\hugegraph.yaml\"}, {\"id\": \"inlong\", \"info\": {\"name\": \"inlong\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,inlong\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"1155196680\\\"\"], \"product\": \"inlong\", \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1155196680\"]}]}], \"_source_file\": \"apache\\\\inlong.yaml\"}, {\"id\": \"kafka_connect\", \"info\": {\"name\": \"kafka_connect\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kafka_connect\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"apache druid\\\"\"], \"product\": \"kafka_connect\", \"shodan-query\": [\"html:\\\"apache druid\\\"\", \"http.html:\\\"apache druid\\\"\"], \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"apache druid\"], \"case-insensitive\": true}]}], \"_source_file\": \"apache\\\\kafka_connect.yaml\"}, {\"id\": \"karaf\", \"info\": {\"name\": \"karaf\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,karaf\", \"severity\": \"info\", \"metadata\": {\"product\": \"karaf\", \"shodan-query\": [\"realm=\\\"karaf\\\"\"], \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"realm=\\\"karaf\"], \"case-insensitive\": true}]}], \"_source_file\": \"apache\\\\karaf.yaml\"}, {\"id\": \"apache-kylin\", \"info\": {\"name\": \"apache-kylin\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-kylin\", \"severity\": \"info\", \"metadata\": {\"product\": \"kylin\", \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<meta http-equiv=\\\"refresh\\\" content=\\\"1;url=kylin\\\">\", \"href=\\\"/kylin/\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"apache\\\\kylin.yaml\"}, {\"id\": \"apache-mesos\", \"info\": {\"name\": \"apache-mesos\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-mesos\", \"severity\": \"info\", \"metadata\": {\"product\": \"mesos\", \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<img src=\\\"/static/img/mesos_logo.png\\\" alt=\\\"apache mesos\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"apache\\\\mesos.yaml\"}, {\"id\": \"nifi\", \"info\": {\"name\": \"nifi\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nifi\", \"severity\": \"info\", \"metadata\": {\"product\": \"nifi\", \"shodan-query\": [\"title:\\\"nifi\\\"\"], \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>nifi.*?</title>\"]}, {\"type\": \"word\", \"words\": [\"<a href=\\\"/nifi/\\\">/nifi</a>\"], \"case-insensitive\": true}]}], \"_source_file\": \"apache\\\\nifi.yaml\"}, {\"id\": \"apache-ofbiz\", \"info\": {\"name\": \"apache-ofbiz\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-ofbiz\", \"severity\": \"info\", \"metadata\": {\"product\": \"ofbiz\", \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<span>powered by ofbiz</span>\"], \"case-insensitive\": true}]}], \"_source_file\": \"apache\\\\ofbiz.yaml\"}, {\"id\": \"ranger\", \"info\": {\"name\": \"ranger\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ranger\", \"severity\": \"info\", \"metadata\": {\"product\": \"ranger\", \"shodan-query\": [\"http.title:\\\"ranger - sign in\\\"\"], \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>ranger - sign in.*?</title>\"]}, {\"type\": \"word\", \"words\": [\"<img src=\\\"images/ranger_logo.png\\\" alt=\\\"ranger logo\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"apache\\\\ranger.yaml\"}, {\"id\": \"shardingsphere_elasticjob-ui\", \"info\": {\"name\": \"shardingsphere_elasticjob-ui\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,shardingsphere_elasticjob-ui\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=816588900\"], \"product\": \"shardingsphere_elasticjob-ui\", \"shodan-query\": [\"http.favicon.hash:816588900\"], \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"816588900\"]}]}], \"_source_file\": \"apache\\\\shardingsphere_elasticjob-ui.yaml\"}, {\"id\": \"apache-shiro\", \"info\": {\"name\": \"apache-shiro\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-shiro\", \"severity\": \"info\", \"metadata\": {\"product\": \"shiro\", \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"headers\": {\"Cookie\": \"rememberMe=admin;rememberMe-K=admin\"}, \"cookie-reuse\": true, \"matchers\": [{\"type\": \"word\", \"words\": [\"</i> shiro</li>\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"set-cookie: rememberme\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"apache\\\\shiro.yaml\"}, {\"id\": \"apache-skywalking\", \"info\": {\"name\": \"apache-skywalking\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-skywalking\", \"severity\": \"info\", \"metadata\": {\"product\": \"skywalking\", \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"sorry but skywalking doesn't work\"], \"case-insensitive\": true}]}], \"_source_file\": \"apache\\\\skywalking.yaml\"}, {\"id\": \"apache-solr\", \"info\": {\"name\": \"apache-solr\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-solr\", \"severity\": \"info\", \"metadata\": {\"product\": \"solr\", \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"location: /solr/\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"apache\\\\solr.yaml\"}, {\"id\": \"spark\", \"info\": {\"name\": \"spark\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,spark\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/apps/imt/html/\\\"\", \"title=\\\"spark master at\\\"\"], \"google-query\": [\"intitle:\\\"spark master at\\\"\"], \"product\": \"spark\", \"shodan-query\": [\"title:\\\"spark master at\\\"\", \"http.html:\\\"/apps/imt/html/\\\"\", \"http.title:\\\"spark master at\\\"\"], \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/apps/imt/html/\"], \"case-insensitive\": true}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>spark master at.*?</title>\"]}]}], \"_source_file\": \"apache\\\\spark.yaml\"}, {\"id\": \"streampark\", \"info\": {\"name\": \"streampark\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,streampark\", \"severity\": \"info\", \"metadata\": {\"product\": \"streampark\", \"shodan-query\": [\"title:\\\"apache streampark\\\"\"], \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>apache streampark.*?</title>\"]}]}], \"_source_file\": \"apache\\\\streampark.yaml\"}, {\"id\": \"streampipes\", \"info\": {\"name\": \"streampipes\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,streampipes\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"apache streampipes\\\"\"], \"product\": \"streampipes\", \"shodan-query\": [\"http.title:\\\"apache streampipes\\\"\"], \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>apache streampipes.*?</title>\"]}]}], \"_source_file\": \"apache\\\\streampipes.yaml\"}, {\"id\": \"apache-struts\", \"info\": {\"name\": \"apache-struts\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-struts\", \"severity\": \"info\", \"metadata\": {\"product\": \"struts\", \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<form action=\\\"/login.action\\\" method=\\\"post\", \"<form action=\\\"login.action\\\" method=\\\"post\", \"=\\\"struts.token.name\\\"\", \"content=\\\"struts2 showcase for apache struts project\\\"\", \"no result defined for action and result input\", \"struts problem report\", \"there is no action mapped for namespace\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"location: /index.action\", \"location: /login.action\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"apache\\\\struts.yaml\"}, {\"id\": \"apache-superset\", \"info\": {\"name\": \"apache-superset\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-superset\", \"severity\": \"info\", \"metadata\": {\"product\": \"superset\", \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>superset</title>\", \"src=\\\"/static/assets/images/superset-logo-\"], \"case-insensitive\": true}]}], \"_source_file\": \"apache\\\\superset.yaml\"}, {\"id\": \"apache-tomcat\", \"info\": {\"name\": \"apache-tomcat\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-tomcat\", \"severity\": \"info\", \"metadata\": {\"product\": \"tomcat\", \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/manager/html\", \"/manager/status\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"4644f2d45601037b8423d45e13194c93\"]}, {\"type\": \"word\", \"words\": [\"<h3>apache tomcat\", \"<title>apache tomcat/\", \"href=\\\"tomcat.css\", \"this is the default tomcat home page\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"server: apache-coyote/\", \"x-powered-by: tomcat\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"apache\\\\tomcat.yaml\"}, {\"id\": \"tomcat_jk_connector\", \"info\": {\"name\": \"tomcat_jk_connector\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tomcat_jk_connector\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"apache tomcat\\\"\"], \"google-query\": [\"intitle:\\\"apache tomcat\\\"\"], \"product\": \"tomcat_jk_connector\", \"shodan-query\": [\"title:\\\"apache tomcat\\\"\", \"http.title:\\\"apache tomcat\\\"\"], \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>apache tomcat.*?</title>\"]}]}], \"_source_file\": \"apache\\\\tomcat_jk_connector.yaml\"}, {\"id\": \"apache-unomi\", \"info\": {\"name\": \"apache-unomi\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apache-unomi\", \"severity\": \"info\", \"metadata\": {\"product\": \"unomi\", \"vendor\": \"apache\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"logo apache unomi\"], \"case-insensitive\": true}]}], \"_source_file\": \"apache\\\\unomi.yaml\"}, {\"id\": \"central_authentication_service\", \"info\": {\"name\": \"central_authentication_service\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,central_authentication_service\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title='cas - central authentication service'\"], \"google-query\": [\"intitle:'cas - central authentication service'\"], \"product\": \"central_authentication_service\", \"shodan-query\": [\"http.title:'cas - central authentication service'\"], \"vendor\": \"apereo\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>cas - central authentication service.*?</title>\"]}]}], \"_source_file\": \"apereo\\\\central_authentication_service.yaml\"}, {\"id\": \"appcms\", \"info\": {\"name\": \"appcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,appcms\", \"severity\": \"info\", \"metadata\": {\"product\": \"appcms\", \"vendor\": \"appcms\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powerd by appcms\"], \"case-insensitive\": true}]}], \"_source_file\": \"appcms\\\\appcms.yaml\"}, {\"id\": \"appspace\", \"info\": {\"name\": \"appspace\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,appspace\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"appspace\\\"\"], \"google-query\": [\"intitle:\\\"appspace\\\"\"], \"product\": \"appspace\", \"shodan-query\": [\"title:\\\"appspace\\\"\", \"http.title:\\\"appspace\\\"\"], \"vendor\": \"appspace\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>appspace.*?</title>\"]}]}], \"_source_file\": \"appspace\\\\appspace.yaml\"}, {\"id\": \"appwrite\", \"info\": {\"name\": \"appwrite\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,appwrite\", \"severity\": \"info\", \"metadata\": {\"product\": \"appwrite\", \"vendor\": \"appwrite\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>sign in - appwrite</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"appwrite\\\\appwrite.yaml\"}, {\"id\": \"energy_communication_unit_firmware\", \"info\": {\"name\": \"energy_communication_unit_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,energy_communication_unit_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"altenergy power control software\\\"\"], \"google-query\": [\"intitle:\\\"altenergy power control software\\\"\"], \"product\": \"energy_communication_unit_firmware\", \"shodan-query\": [\"title:\\\"altenergy power control software\\\"\", \"http.title:\\\"altenergy power control software\\\"\"], \"vendor\": \"apsystems\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>altenergy power control software.*?</title>\"]}]}], \"_source_file\": \"apsystems\\\\energy_communication_unit_firmware.yaml\"}, {\"id\": \"controller\", \"info\": {\"name\": \"controller\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,controller\", \"severity\": \"info\", \"metadata\": {\"product\": \"controller\", \"shodan-query\": [\"html:\\\"aquatronica\\\"\"], \"vendor\": \"aquatronica\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"aquatronica\"], \"case-insensitive\": true}]}], \"_source_file\": \"aquatronica\\\\controller.yaml\"}, {\"id\": \"udp\", \"info\": {\"name\": \"udp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,udp\", \"severity\": \"info\", \"metadata\": {\"product\": \"udp\", \"shodan-query\": [\"http.favicon.hash:-1889244460\"], \"vendor\": \"arcserve\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1889244460\"]}]}], \"_source_file\": \"arcserve\\\\udp.yaml\"}, {\"id\": \"argo_cd\", \"info\": {\"name\": \"argo_cd\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,argo_cd\", \"severity\": \"info\", \"metadata\": {\"product\": \"argo_cd\", \"shodan-query\": [\"html:\\\"argo cd\\\"\"], \"vendor\": \"argoproj\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"argo cd\"], \"case-insensitive\": true}]}], \"_source_file\": \"argoproj\\\\argo_cd.yaml\"}, {\"id\": \"dvr\", \"info\": {\"name\": \"dvr\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dvr\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"web viewer for samsung dvr\\\"\"], \"google-query\": [\"intitle:\\\"web viewer for samsung dvr\\\"\"], \"product\": \"dvr\", \"shodan-query\": [\"http.title:\\\"web viewer for samsung dvr\\\"\"], \"vendor\": \"argussurveillance\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>web viewer for samsung dvr.*?</title>\"]}]}], \"_source_file\": \"argussurveillance\\\\dvr.yaml\"}, {\"id\": \"pandora_fms\", \"info\": {\"name\": \"pandora_fms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pandora_fms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"pandora fms\\\"\"], \"google-query\": [\"intitle:\\\"pandora fms\\\"\"], \"product\": \"pandora_fms\", \"shodan-query\": [\"http.title:\\\"pandora fms\\\"\"], \"vendor\": \"artica\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>pandora fms.*?</title>\"]}]}], \"_source_file\": \"artica\\\\pandora_fms.yaml\"}, {\"id\": \"artica_proxy\", \"info\": {\"name\": \"artica_proxy\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,artica_proxy\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"artica\\\"\"], \"product\": \"artica_proxy\", \"shodan-query\": [\"http.html:\\\"artica\\\"\"], \"vendor\": \"articatech\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"artica\"], \"case-insensitive\": true}]}], \"_source_file\": \"articatech\\\\artica_proxy.yaml\"}, {\"id\": \"aruba-instant-access-point\", \"info\": {\"name\": \"aruba-instant-access-point\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,aruba-instant-access-point\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"jscripts/third_party/raphael-treemap.min.js\\\" || body=\\\"jscripts/third_party/highcharts.src.js\\\"\"], \"product\": \"aruba-instant-access-point\", \"shodan-query\": [\"title:\\\"aruba\\\"\"], \"vendor\": \"aruba\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"jscripts/third_party/highcharts.src.js\", \"jscripts/third_party/raphael-treemap.min.js\"], \"case-insensitive\": true}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>aruba.*?</title>\"]}]}], \"_source_file\": \"aruba\\\\aruba-instant-access-point.yaml\"}, {\"id\": \"aruba_instant\", \"info\": {\"name\": \"aruba_instant\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,aruba_instant\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"jscripts/third_party/raphael-treemap.min.js\\\" || body=\\\"jscripts/third_party/highcharts.src.js\\\"\"], \"product\": \"aruba_instant\", \"vendor\": \"arubanetworks\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"jscripts/third_party/highcharts.src.js\", \"jscripts/third_party/raphael-treemap.min.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"arubanetworks\\\\aruba_instant.yaml\"}, {\"id\": \"high_cms\", \"info\": {\"name\": \"high_cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,high_cms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"highmail\\\"\"], \"google-query\": [\"intitle:\\\"highmail\\\"\"], \"product\": \"high_cms\", \"shodan-query\": [\"title:\\\"highmail\\\"\", \"http.title:\\\"highmail\\\"\"], \"vendor\": \"aryanic\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>highmail.*?</title>\"]}]}], \"_source_file\": \"aryanic\\\\high_cms.yaml\"}, {\"id\": \"rt-n16\", \"info\": {\"name\": \"rt-n16\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rt-n16\", \"severity\": \"info\", \"metadata\": {\"product\": \"rt-n16\", \"shodan-query\": [\"rt-n16\"], \"vendor\": \"asus\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"rt-n16\"], \"case-insensitive\": true}]}], \"_source_file\": \"asus\\\\rt-n16.yaml\"}, {\"id\": \"asustor-data-master\", \"info\": {\"name\": \"asustor-data-master\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,asustor-data-master\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"asustor\\\" && icon_hash=\\\"1678170702\\\"\"], \"product\": \"asustor-data-master\", \"shodan-query\": [\"http.html:\\\"asustor\\\"\"], \"vendor\": \"asustor\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"asustor\"], \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"1678170702\"]}]}], \"_source_file\": \"asustor\\\\asustor-data-master.yaml\"}, {\"id\": \"atlassian-jira\", \"info\": {\"name\": \"atlassian-jira\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,atlassian-jira\", \"severity\": \"info\", \"metadata\": {\"product\": \"jira\", \"vendor\": \"atlassian\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ams-build-number\", \"com.atlassian.jira\", \"jira.webresources\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"location: /secure/setupmode!default.jspa\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"atlassian\\\\jira.yaml\"}, {\"id\": \"atmail\", \"info\": {\"name\": \"atmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,atmail\", \"severity\": \"info\", \"metadata\": {\"product\": \"atmail\", \"vendor\": \"atmail\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/index.php/mail/auth/processlogin\", \"<input id=\\\"mailserverinput\", \"powered by atmail\"], \"case-insensitive\": true}]}], \"_source_file\": \"atmail\\\\atmail.yaml\"}, {\"id\": \"atutor\", \"info\": {\"name\": \"atutor\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,atutor\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"atutor\\\"\"], \"product\": \"atutor\", \"shodan-query\": [\"http.html:\\\"atutor\\\"\"], \"vendor\": \"atutor\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"atutor\"], \"case-insensitive\": true}]}], \"_source_file\": \"atutor\\\\atutor.yaml\"}, {\"id\": \"device_manager_express\", \"info\": {\"name\": \"device_manager_express\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,device_manager_express\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"audiocodes\\\"\"], \"google-query\": [\"intitle:\\\"audiocodes\\\"\"], \"product\": \"device_manager_express\", \"shodan-query\": [\"title:\\\"audiocodes\\\"\", \"http.title:\\\"audiocodes\\\"\"], \"vendor\": \"audiocodes\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>audiocodes.*?</title>\"]}]}], \"_source_file\": \"audiocodes\\\\device_manager_express.yaml\"}, {\"id\": \"compact_5500r_firmware\", \"info\": {\"name\": \"compact_5500r_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,compact_5500r_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"\\\"auerswald\\\"\"], \"product\": \"compact_5500r_firmware\", \"vendor\": \"auerswald\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"auerswald\"], \"case-insensitive\": true}]}], \"_source_file\": \"auerswald\\\\compact_5500r_firmware.yaml\"}, {\"id\": \"candidats\", \"info\": {\"name\": \"candidats\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,candidats\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"candidats\\\"\"], \"product\": \"candidats\", \"shodan-query\": [\"http.html:\\\"candidats\\\"\"], \"vendor\": \"auieo\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"candidats\"], \"case-insensitive\": true}]}], \"_source_file\": \"auieo\\\\candidats.yaml\"}, {\"id\": \"webctrl\", \"info\": {\"name\": \"webctrl\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,webctrl\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/_common/lvl5/dologin.jsp\\\"\"], \"product\": \"webctrl\", \"shodan-query\": [\"html:\\\"/_common/lvl5/dologin.jsp\\\"\", \"http.html:\\\"/_common/lvl5/dologin.jsp\\\"\"], \"vendor\": \"automatedlogic\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/_common/lvl5/dologin.jsp\"], \"case-insensitive\": true}]}], \"_source_file\": \"automatedlogic\\\\webctrl.yaml\"}, {\"id\": \"automation_360\", \"info\": {\"name\": \"automation_360\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,automation_360\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"-1005691603\\\"\"], \"product\": \"automation_360\", \"shodan-query\": [\"http.favicon.hash:-1005691603\"], \"vendor\": \"automationanywhere\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1005691603\"]}]}], \"_source_file\": \"automationanywhere\\\\automation_360.yaml\"}, {\"id\": \"avantfax\", \"info\": {\"name\": \"avantfax\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,avantfax\", \"severity\": \"info\", \"metadata\": {\"product\": \"avantfax\", \"vendor\": \"avantfax\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"src=\\\"images/avantfax-big.png\\\" border=\\\"0\\\" alt=\\\"avantfax\"], \"case-insensitive\": true}]}], \"_source_file\": \"avantfax\\\\avantfax.yaml\"}, {\"id\": \"aura_device_services\", \"info\": {\"name\": \"aura_device_services\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,aura_device_services\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"avaya aura&reg;&nbsp;utility services\\\"\"], \"product\": \"aura_device_services\", \"shodan-query\": [\"html:\\\"avaya aura&reg;&nbsp;utility services\\\"\"], \"vendor\": \"avaya\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"avaya aura\", \"nbsp;utility services\"], \"case-insensitive\": true}]}], \"_source_file\": \"avaya\\\\aura_device_services.yaml\"}, {\"id\": \"aura_utility_services\", \"info\": {\"name\": \"aura_utility_services\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,aura_utility_services\", \"severity\": \"info\", \"metadata\": {\"product\": \"aura_utility_services\", \"shodan-query\": [\"html:\\\"avaya aura\\\"\"], \"vendor\": \"avaya\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"avaya aura\"], \"case-insensitive\": true}]}], \"_source_file\": \"avaya\\\\aura_utility_services.yaml\"}, {\"id\": \"intouch_access_anywhere\", \"info\": {\"name\": \"intouch_access_anywhere\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,intouch_access_anywhere\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"intouch access anywhere\\\"\"], \"product\": \"intouch_access_anywhere\", \"shodan-query\": [\"http.html:\\\"intouch access anywhere\\\"\"], \"vendor\": \"aveva\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"intouch access anywhere\"], \"case-insensitive\": true}]}], \"_source_file\": \"aveva\\\\intouch_access_anywhere.yaml\"}, {\"id\": \"controller\", \"info\": {\"name\": \"controller\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,controller\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"aviatrix cloud controller\\\"\"], \"google-query\": [\"intitle:\\\"aviatrix cloud controller\\\"\"], \"product\": \"controller\", \"shodan-query\": [\"http.title:\\\"aviatrix cloud controller\\\"\"], \"vendor\": \"aviatrix\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>aviatrix cloud controller.*?</title>\"]}]}], \"_source_file\": \"aviatrix\\\\controller.yaml\"}, {\"id\": \"simple_job_board\", \"info\": {\"name\": \"simple_job_board\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,simple_job_board\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/wp-content/plugins/simple-job-board\\\"\"], \"product\": \"simple_job_board\", \"vendor\": \"awsm\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/wp-content/plugins/simple-job-board\"], \"case-insensitive\": true}]}], \"_source_file\": \"awsm\\\\simple_job_board.yaml\"}, {\"id\": \"axigen_mobile_webmail\", \"info\": {\"name\": \"axigen_mobile_webmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,axigen_mobile_webmail\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=-1247684400\"], \"product\": \"axigen_mobile_webmail\", \"shodan-query\": [\"http.favicon.hash:-1247684400\"], \"vendor\": \"axigen\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1247684400\"]}]}], \"_source_file\": \"axigen\\\\axigen_mobile_webmail.yaml\"}, {\"id\": \"webmail\", \"info\": {\"name\": \"webmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,webmail\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"axigen\\\"\"], \"product\": \"webmail\", \"shodan-query\": [\"title:\\\"axigen\\\"\"], \"vendor\": \"axigen\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>axigen.*?</title>\"]}]}], \"_source_file\": \"axigen\\\\webmail.yaml\"}, {\"id\": \"azkaban\", \"info\": {\"name\": \"azkaban\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,azkaban\", \"severity\": \"info\", \"metadata\": {\"product\": \"azkaban\", \"shodan-query\": [\"http.title:\\\"azkaban web client\\\"\"], \"vendor\": \"azkaban_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>azkaban web client.*?</title>\"]}]}], \"_source_file\": \"azkaban_project\\\\azkaban.yaml\"}, {\"id\": \"b2evolution\", \"info\": {\"name\": \"b2evolution\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,b2evolution\", \"severity\": \"info\", \"metadata\": {\"product\": \"b2evolution\", \"vendor\": \"b2evolution\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/powered-by-b2evolution-150t.gif\", \"content=\\\"b2evolution\", \"powered by b2evolution\"], \"case-insensitive\": true}]}], \"_source_file\": \"b2evolution\\\\b2evolution.yaml\"}, {\"id\": \"ueditor\", \"info\": {\"name\": \"ueditor\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ueditor\", \"severity\": \"info\", \"metadata\": {\"product\": \"ueditor\", \"shodan-query\": [\"html:\\\"ueditor\\\"\"], \"vendor\": \"baidu\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ueditor\"], \"case-insensitive\": true}]}], \"_source_file\": \"baidu\\\\ueditor.yaml\"}, {\"id\": \"clickshare_cs-100_huddle_firmware\", \"info\": {\"name\": \"clickshare_cs-100_huddle_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,clickshare_cs-100_huddle_firmware\", \"severity\": \"info\", \"metadata\": {\"product\": \"clickshare_cs-100_huddle_firmware\", \"shodan-query\": [\"clicksharesession\"], \"vendor\": \"barco\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"clicksharesession\"], \"case-insensitive\": true}]}], \"_source_file\": \"barco\\\\clickshare_cs-100_huddle_firmware.yaml\"}, {\"id\": \"datagerry\", \"info\": {\"name\": \"datagerry\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,datagerry\", \"severity\": \"info\", \"metadata\": {\"product\": \"datagerry\", \"shodan-query\": [\"http.title:\\\"datagerry\\\"\"], \"vendor\": \"becon\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>datagerry.*?</title>\"]}]}], \"_source_file\": \"becon\\\\datagerry.yaml\"}, {\"id\": \"bentoml\", \"info\": {\"name\": \"bentoml\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bentoml\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"bentoml\\\"\"], \"product\": \"bentoml\", \"shodan-query\": [\"html:\\\"bentoml\\\"\"], \"vendor\": \"bentoml\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"bentoml\"], \"case-insensitive\": true}]}], \"_source_file\": \"bentoml\\\\bentoml.yaml\"}, {\"id\": \"beyondtrust\", \"info\": {\"name\": \"beyondtrust\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,beyondtrust\", \"severity\": \"info\", \"metadata\": {\"google-query\": [\"intext:\\\"beyondtrust\\\" \\\"redistribution prohibited\\\"\"], \"product\": \"beyondtrust\", \"shodan-query\": [\"html:\\\"beyondtrust\\\"\"], \"vendor\": \"beyondtrust\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"beyondtrust\"], \"case-insensitive\": true}]}], \"_source_file\": \"beyondtrust\\\\beyondtrust.yaml\"}, {\"id\": \"remote_support\", \"info\": {\"name\": \"remote_support\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,remote_support\", \"severity\": \"info\", \"metadata\": {\"google-query\": [\"intext:\\\"beyondtrust\\\" \\\"redistribution prohibited\\\"\"], \"product\": \"remote_support\", \"shodan-query\": [\"html:\\\"beyondtrust\\\"\"], \"vendor\": \"beyondtrust\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"beyondtrust\"], \"case-insensitive\": true}]}], \"_source_file\": \"beyondtrust\\\\remote_support.yaml\"}, {\"id\": \"bibliopac\", \"info\": {\"name\": \"bibliopac\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bibliopac\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"bibliopac\\\"\"], \"google-query\": [\"intitle:\\\"bibliopac\\\"\"], \"product\": \"bibliopac\", \"shodan-query\": [\"title:\\\"bibliopac\\\"\", \"http.title:\\\"bibliopac\\\"\"], \"vendor\": \"bibliosoft\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>bibliopac.*?</title>\"]}]}], \"_source_file\": \"bibliosoft\\\\bibliopac.yaml\"}, {\"id\": \"bigant_server\", \"info\": {\"name\": \"bigant_server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bigant_server\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"bigant\\\"\"], \"product\": \"bigant_server\", \"shodan-query\": [\"http.html:\\\"bigant\\\"\"], \"vendor\": \"bigantsoft\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"bigant\"], \"case-insensitive\": true}]}], \"_source_file\": \"bigantsoft\\\\bigant_server.yaml\"}, {\"id\": \"larecipe\", \"info\": {\"name\": \"larecipe\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,larecipe\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/binarytorch/larecipe/\\\"\"], \"product\": \"larecipe\", \"vendor\": \"binarytorch\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/binarytorch/larecipe/\"], \"case-insensitive\": true}]}], \"_source_file\": \"binarytorch\\\\larecipe.yaml\"}, {\"id\": \"bitrix24\", \"info\": {\"name\": \"bitrix24\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bitrix24\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/bitrix/\\\"\"], \"product\": \"bitrix24\", \"shodan-query\": [\"html:\\\"/bitrix/\\\"\", \"http.html:\\\"/bitrix/\\\"\"], \"vendor\": \"bitrix24\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/bitrix/\"], \"case-insensitive\": true}]}], \"_source_file\": \"bitrix24\\\\bitrix24.yaml\"}, {\"id\": \"blogengine.net\", \"info\": {\"name\": \"blogengine.net\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,blogengine.net\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"blogengine.net\\\"\"], \"product\": \"blogengine.net\", \"shodan-query\": [\"http.html:\\\"blogengine.net\\\"\"], \"vendor\": \"blogengine\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"blogengine.net\"], \"case-insensitive\": true}]}], \"_source_file\": \"blogengine\\\\blogengine.net.yaml\"}, {\"id\": \"bloofox\", \"info\": {\"name\": \"bloofox\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bloofox\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"powered by bloofoxcms\"], \"product\": \"bloofox\", \"vendor\": \"bloofox\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by bloofoxcms\"], \"case-insensitive\": true}]}], \"_source_file\": \"bloofox\\\\bloofox.yaml\"}, {\"id\": \"bloofoxcms\", \"info\": {\"name\": \"bloofoxcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bloofoxcms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"powered by bloofoxcms\"], \"product\": \"bloofoxcms\", \"vendor\": \"bloofox\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by bloofoxcms\"], \"case-insensitive\": true}]}], \"_source_file\": \"bloofox\\\\bloofoxcms.yaml\"}, {\"id\": \"bludit\", \"info\": {\"name\": \"bludit\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bludit\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"bludit\\\"\"], \"google-query\": [\"intitle:\\\"bludit\\\"\"], \"product\": \"bludit\", \"shodan-query\": [\"title:\\\"bludit\\\"\", \"http.title:\\\"bludit\\\"\"], \"vendor\": \"bludit\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>bludit.*?</title>\"]}]}], \"_source_file\": \"bludit\\\\bludit.yaml\"}, {\"id\": \"boa\", \"info\": {\"name\": \"boa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,boa\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"server: boa/0.94.13\"], \"product\": \"boa\", \"shodan-query\": [\"server: boa/0.94.13\"], \"vendor\": \"boa\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: boa/0.94.13\"], \"case-insensitive\": true}]}], \"_source_file\": \"boa\\\\boa.yaml\"}, {\"id\": \"siteengine\", \"info\": {\"name\": \"siteengine\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,siteengine\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"siteengine\\\"\"], \"product\": \"siteengine\", \"shodan-query\": [\"html:\\\"siteengine\\\"\", \"http.html:\\\"siteengine\\\"\"], \"vendor\": \"boka\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"siteengine\"], \"case-insensitive\": true}]}], \"_source_file\": \"boka\\\\siteengine.yaml\"}, {\"id\": \"bonita\", \"info\": {\"name\": \"bonita\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bonita\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"bonita\\\" || header=\\\"server: bonita\\\"\"], \"product\": \"bonita\", \"shodan-query\": [\"http.title:\\\"bonita\\\" || \\\"server: bonita\\\"\"], \"vendor\": \"bonitasoft\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>\\\"server: bonita.*?</title>\", \"(?mi)<title[^>]*>bonita\\\".*?</title>\", \"(?mi)<title[^>]*>bonita.*?</title>\"]}]}], \"_source_file\": \"bonitasoft\\\\bonita.yaml\"}, {\"id\": \"broken_link_notifier\", \"info\": {\"name\": \"broken_link_notifier\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,broken_link_notifier\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"blnotifier_front_end\\\"\"], \"product\": \"broken_link_notifier\", \"vendor\": \"broken_link_notifier_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"blnotifier_front_end\"], \"case-insensitive\": true}]}], \"_source_file\": \"broken_link_notifier_project\\\\broken_link_notifier.yaml\"}, {\"id\": \"quicklancer\", \"info\": {\"name\": \"quicklancer\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,quicklancer\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"1099370896\\\"\"], \"product\": \"quicklancer\", \"shodan-query\": [\"http.favicon.hash:1099370896\"], \"vendor\": \"bylancer\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1099370896\"]}]}], \"_source_file\": \"bylancer\\\\quicklancer.yaml\"}, {\"id\": \"smart_s210_firmware\", \"info\": {\"name\": \"smart_s210_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,smart_s210_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"smart管理平台\\\"\"], \"product\": \"smart_s210_firmware\", \"vendor\": \"byzoro\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"smart管理平台\"], \"case-insensitive\": true}]}], \"_source_file\": \"byzoro\\\\smart_s210_firmware.yaml\"}, {\"id\": \"cacti\", \"info\": {\"name\": \"cacti\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cacti\", \"severity\": \"info\", \"metadata\": {\"product\": \"cacti\", \"vendor\": \"cacti\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/plugins/jqueryskin/include/login.css\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"set-cookie: cacti=\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"cacti\\\\cacti.yaml\"}, {\"id\": \"calibre\", \"info\": {\"name\": \"calibre\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,calibre\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"server: calibre\"], \"product\": \"calibre\", \"shodan-query\": [\"html:\\\"calibre\\\"\"], \"vendor\": \"calibre-ebook\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"calibre\", \"server: calibre\"], \"case-insensitive\": true}]}], \"_source_file\": \"calibre-ebook\\\\calibre.yaml\"}, {\"id\": \"pcoweb_card_firmware\", \"info\": {\"name\": \"pcoweb_card_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pcoweb_card_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"pcoweb\\\"\"], \"product\": \"pcoweb_card_firmware\", \"shodan-query\": [\"http.html:\\\"pcoweb\\\"\"], \"vendor\": \"carel\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"pcoweb\"], \"case-insensitive\": true}]}], \"_source_file\": \"carel\\\\pcoweb_card_firmware.yaml\"}, {\"id\": \"car_rental_management_system\", \"info\": {\"name\": \"car_rental_management_system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,car_rental_management_system\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"car rental management system\\\"\"], \"product\": \"car_rental_management_system\", \"shodan-query\": [\"http.html:\\\"car rental management system\\\"\"], \"vendor\": \"car_rental_management_system_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"car rental management system\"], \"case-insensitive\": true}]}], \"_source_file\": \"car_rental_management_system_project\\\\car_rental_management_system.yaml\"}, {\"id\": \"casbin\", \"info\": {\"name\": \"casbin\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech\", \"severity\": \"info\", \"metadata\": {\"product\": \"casbin\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>casdoor\", \"casdoor/manifest.json\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"casbin\\\\casbin.yaml\"}, {\"id\": \"casdoor\", \"info\": {\"name\": \"casdoor\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,casdoor\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"casdoor\\\"\"], \"google-query\": [\"intitle:\\\"casdoor\\\"\"], \"product\": \"casdoor\", \"shodan-query\": [\"http.title:\\\"casdoor\\\"\"], \"vendor\": \"casbin\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>casdoor.*?</title>\"]}]}], \"_source_file\": \"casbin\\\\casdoor.yaml\"}, {\"id\": \"xc1000_firmware\", \"info\": {\"name\": \"xc1000_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xc1000_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"cassia bluetooth gateway management platform\\\"\"], \"product\": \"xc1000_firmware\", \"shodan-query\": [\"html:\\\"cassia bluetooth gateway management platform\\\"\", \"http.html:\\\"cassia bluetooth gateway management platform\\\"\"], \"vendor\": \"cassianetworks\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"cassia bluetooth gateway management platform\"], \"case-insensitive\": true}]}], \"_source_file\": \"cassianetworks\\\\xc1000_firmware.yaml\"}, {\"id\": \"caucho-resin\", \"info\": {\"name\": \"caucho-resin\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,caucho-resin\", \"severity\": \"info\", \"metadata\": {\"product\": \"resin\", \"vendor\": \"caucho\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: resin\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"caucho\\\\resin.yaml\"}, {\"id\": \"arc\", \"info\": {\"name\": \"arc\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,arc\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"163538942\\\"\"], \"product\": \"arc\", \"shodan-query\": [\"http.favicon.hash:163538942\", \"http.favicon.hash:\\\"163538942\\\"\"], \"vendor\": \"cdata\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"163538942\"]}]}], \"_source_file\": \"cdata\\\\arc.yaml\"}, {\"id\": \"cdata\", \"info\": {\"name\": \"cdata\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cdata\", \"severity\": \"info\", \"metadata\": {\"product\": \"cdata\", \"shodan-query\": [\"title:\\\"cdata connect\\\"\", \"title:\\\"cdata sync\\\"\", \"title:\\\"cdata - api server\\\"\", \"title:\\\"cdata arc\\\"\"], \"vendor\": \"cdata\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>cdata - api server.*?</title>\", \"(?mi)<title[^>]*>cdata arc.*?</title>\", \"(?mi)<title[^>]*>cdata connect.*?</title>\", \"(?mi)<title[^>]*>cdata sync.*?</title>\"]}]}], \"_source_file\": \"cdata\\\\cdata.yaml\"}, {\"id\": \"ez-net_portal\", \"info\": {\"name\": \"ez-net_portal\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ez-net_portal\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"eznet_\"], \"product\": \"ez-net_portal\", \"shodan-query\": [\"eznet_\"], \"vendor\": \"cedargate\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"eznet_\"], \"case-insensitive\": true}]}], \"_source_file\": \"cedargate\\\\ez-net_portal.yaml\"}, {\"id\": \"nvt_web_server\", \"info\": {\"name\": \"nvt_web_server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nvt_web_server\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/viewer/viewer.html\\\" && header=\\\"lighttpd\\\" && country=\\\"kr\\\"\"], \"product\": \"nvt_web_server\", \"vendor\": \"cellinx\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/viewer/viewer.html\"], \"case-insensitive\": true}]}], \"_source_file\": \"cellinx\\\\nvt_web_server.yaml\"}, {\"id\": \"crywolf\", \"info\": {\"name\": \"crywolf\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,crywolf\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"false alarm reduction website\"], \"product\": \"crywolf\", \"vendor\": \"centralsquare\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"false alarm reduction website\"], \"case-insensitive\": true}]}], \"_source_file\": \"centralsquare\\\\crywolf.yaml\"}, {\"id\": \"centreon\", \"info\": {\"name\": \"centreon\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,centreon\", \"severity\": \"info\", \"metadata\": {\"product\": \"centreon\", \"vendor\": \"centreon\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"generator\\\" content=\\\"centreon - copyright\"], \"case-insensitive\": true}]}], \"_source_file\": \"centreon\\\\centreon.yaml\"}, {\"id\": \"cgit\", \"info\": {\"name\": \"cgit\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cgit\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"git repository browser\\\"\"], \"google-query\": [\"intitle:\\\"git repository browser\\\"\"], \"product\": \"cgit\", \"shodan-query\": [\"http.title:\\\"git repository browser\\\"\"], \"vendor\": \"cgit_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>git repository browser.*?</title>\"]}]}], \"_source_file\": \"cgit_project\\\\cgit.yaml\"}, {\"id\": \"cachet\", \"info\": {\"name\": \"cachet\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cachet\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=-1606065523\"], \"product\": \"cachet\", \"shodan-query\": [\"http.favicon.hash:-1606065523\"], \"vendor\": \"chachethq\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1606065523\"]}]}], \"_source_file\": \"chachethq\\\\cachet.yaml\"}, {\"id\": \"chamilo\", \"info\": {\"name\": \"chamilo\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,chamilo\", \"severity\": \"info\", \"metadata\": {\"product\": \"chamilo\", \"vendor\": \"chamilo\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<meta name=\\\"generator\\\" content=\\\"chamilo\"], \"case-insensitive\": true}]}], \"_source_file\": \"chamilo\\\\chamilo.yaml\"}, {\"id\": \"changedetection\", \"info\": {\"name\": \"changedetection\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,changedetection\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"change detection\\\"\"], \"google-query\": [\"intitle:\\\"change detection\\\"\"], \"product\": \"changedetection\", \"shodan-query\": [\"http.title:\\\"change detection\\\"\", \"html:\\\"change detection\\\"\"], \"vendor\": \"changedetection\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"change detection\"], \"case-insensitive\": true}]}], \"_source_file\": \"changedetection\\\\changedetection.yaml\"}, {\"id\": \"chatgpt_web\", \"info\": {\"name\": \"chatgpt_web\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,chatgpt_web\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"chatgpt个人专用版\\\"\"], \"product\": \"chatgpt_web\", \"vendor\": \"chanzhaoyu\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>chatgpt个人专用版.*?</title>\"]}]}], \"_source_file\": \"chanzhaoyu\\\\chatgpt_web.yaml\"}, {\"id\": \"quantum_security_gateway\", \"info\": {\"name\": \"quantum_security_gateway\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,quantum_security_gateway\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"check point ssl network\\\"\"], \"product\": \"quantum_security_gateway\", \"shodan-query\": [\"html:\\\"check point ssl network\\\"\", \"http.html:\\\"check point ssl network\\\"\"], \"vendor\": \"checkpoint\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"check point ssl network\"], \"case-insensitive\": true}]}], \"_source_file\": \"checkpoint\\\\quantum_security_gateway.yaml\"}, {\"id\": \"cherokee\", \"info\": {\"name\": \"cherokee\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cherokee\", \"severity\": \"info\", \"metadata\": {\"product\": \"cherokee\", \"vendor\": \"cherokee\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: cherokee\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"cherokee\\\\cherokee.yaml\"}, {\"id\": \"churchcrm\", \"info\": {\"name\": \"churchcrm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,churchcrm\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"churchcrm\\\"\"], \"product\": \"churchcrm\", \"shodan-query\": [\"title:\\\"churchcrm\\\"\"], \"vendor\": \"churchcrm\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>churchcrm.*?</title>\"]}]}], \"_source_file\": \"churchcrm\\\\churchcrm.yaml\"}, {\"id\": \"adaptive-security-appliance-software\", \"info\": {\"name\": \"adaptive-security-appliance-software\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,adaptive-security-appliance-software\", \"severity\": \"info\", \"metadata\": {\"product\": \"adaptive-security-appliance-software\", \"shodan-query\": [\"html:\\\"/+cscoe+/logon.html\\\"\"], \"vendor\": \"cisco\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/+cscoe+/logon.html\"], \"case-insensitive\": true}]}], \"_source_file\": \"cisco\\\\adaptive-security-appliance-software.yaml\"}, {\"id\": \"evolved_programmable_network_manager\", \"info\": {\"name\": \"evolved_programmable_network_manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,evolved_programmable_network_manager\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"prime infrastructure\\\"\"], \"google-query\": [\"intitle:\\\"prime infrastructure\\\"\"], \"product\": \"evolved_programmable_network_manager\", \"shodan-query\": [\"http.title:\\\"prime infrastructure\\\"\"], \"vendor\": \"cisco\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>prime infrastructure.*?</title>\"]}]}], \"_source_file\": \"cisco\\\\evolved_programmable_network_manager.yaml\"}, {\"id\": \"identity_services_engine\", \"info\": {\"name\": \"identity_services_engine\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,identity_services_engine\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"identity services engine\\\"\"], \"google-query\": [\"intitle:\\\"identity services engine\\\"\"], \"product\": \"identity_services_engine\", \"shodan-query\": [\"\\\"set-cookie: appsessionid=\\\" \\\"path=/admin\\\"\"], \"vendor\": \"cisco\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>identity services engine.*?</title>\"]}]}], \"_source_file\": \"cisco\\\\identity_services_engine.yaml\"}, {\"id\": \"rv110w_firmware\", \"info\": {\"name\": \"rv110w_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rv110w_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"-646322113\\\"\"], \"product\": \"rv110w_firmware\", \"shodan-query\": [\"http.favicon.hash:\\\"-646322113\\\"\"], \"vendor\": \"cisco\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-646322113\"]}]}], \"_source_file\": \"cisco\\\\rv110w_firmware.yaml\"}, {\"id\": \"rv160_firmware\", \"info\": {\"name\": \"rv160_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rv160_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"cisco rv340\\\"\"], \"product\": \"rv160_firmware\", \"shodan-query\": [\"http.html:\\\"cisco rv340\\\"\"], \"vendor\": \"cisco\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"cisco rv340\"], \"case-insensitive\": true}]}], \"_source_file\": \"cisco\\\\rv160_firmware.yaml\"}, {\"id\": \"sg200-50_firmware\", \"info\": {\"name\": \"sg200-50_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sg200-50_firmware\", \"severity\": \"info\", \"metadata\": {\"product\": \"sg200-50_firmware\", \"shodan-query\": [\"/config/log_off_page.htm\"], \"vendor\": \"cisco\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/config/log_off_page.htm\"], \"case-insensitive\": true}]}], \"_source_file\": \"cisco\\\\sg200-50_firmware.yaml\"}, {\"id\": \"unified_communications_domain_manager\", \"info\": {\"name\": \"unified_communications_domain_manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,unified_communications_domain_manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"unified_communications_domain_manager\", \"shodan-query\": [\"title:\\\"cisco unified\\\"\"], \"vendor\": \"cisco\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>cisco unified.*?</title>\"]}]}], \"_source_file\": \"cisco\\\\unified_communications_domain_manager.yaml\"}, {\"id\": \"webex_meetings_online\", \"info\": {\"name\": \"webex_meetings_online\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,webex_meetings_online\", \"severity\": \"info\", \"metadata\": {\"product\": \"webex_meetings_online\", \"shodan-query\": [\"title:\\\"cisco webex\\\"\"], \"vendor\": \"cisco\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>cisco webex.*?</title>\"]}]}], \"_source_file\": \"cisco\\\\webex_meetings_online.yaml\"}, {\"id\": \"opencti\", \"info\": {\"name\": \"opencti\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,opencti\", \"severity\": \"info\", \"metadata\": {\"product\": \"opencti\", \"shodan-query\": [\"http.html:\\\"opencti\\\"\"], \"vendor\": \"citeum\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"opencti\"], \"case-insensitive\": true}]}], \"_source_file\": \"citeum\\\\opencti.yaml\"}, {\"id\": \"gateway\", \"info\": {\"name\": \"gateway\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gateway\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"citrix gateway\\\"\"], \"google-query\": [\"intitle:\\\"citrix gateway\\\"\"], \"product\": \"gateway\", \"shodan-query\": [\"http.favicon.hash:-1292923998,-1166125415\", \"title:\\\"citrix gateway\\\"\", \"http.title:\\\"citrix gateway\\\"\"], \"vendor\": \"citrix\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1166125415\", \"-1292923998\"]}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>citrix gateway.*?</title>\"]}]}], \"_source_file\": \"citrix\\\\gateway.yaml\"}, {\"id\": \"citrix-netscaler\", \"info\": {\"name\": \"citrix-netscaler\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,citrix-netscaler\", \"severity\": \"info\", \"metadata\": {\"product\": \"netscaler\", \"vendor\": \"citrix\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"netscape/firefox/opera\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"set-cookie: citrix_ns_id\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"citrix\\\\netscaler.yaml\"}, {\"id\": \"netscaler_application_delivery_controller\", \"info\": {\"name\": \"netscaler_application_delivery_controller\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netscaler_application_delivery_controller\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"citrix gateway\\\" || title:\\\"netscaler gateway\\\"\"], \"google-query\": [\"intitle:\\\"citrix gateway\\\" || title:\\\"netscaler gateway\\\"\"], \"product\": \"netscaler_application_delivery_controller\", \"shodan-query\": [\"title:\\\"citrix gateway\\\" || title:\\\"netscaler gateway\\\"\", \"http.title:\\\"citrix gateway\\\" || title:\\\"netscaler gateway\\\"\"], \"vendor\": \"citrix\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*> title:\\\"netscaler gateway.*?</title>\", \"(?mi)<title[^>]*>citrix gateway\\\" .*?</title>\"]}]}], \"_source_file\": \"citrix\\\\netscaler_application_delivery_controller.yaml\"}, {\"id\": \"netscaler_gateway\", \"info\": {\"name\": \"netscaler_gateway\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netscaler_gateway\", \"severity\": \"info\", \"metadata\": {\"product\": \"netscaler_gateway\", \"shodan-query\": [\"http.favicon.hash:-1292923998,-1166125415\"], \"vendor\": \"citrix\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1166125415\", \"-1292923998\"]}]}], \"_source_file\": \"citrix\\\\netscaler_gateway.yaml\"}, {\"id\": \"netscaler_sd-wan\", \"info\": {\"name\": \"netscaler_sd-wan\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netscaler_sd-wan\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"citrix sd-wan\\\"\"], \"google-query\": [\"intitle:\\\"citrix sd-wan\\\"\"], \"product\": \"netscaler_sd-wan\", \"shodan-query\": [\"http.title:\\\"citrix sd-wan\\\"\"], \"vendor\": \"citrix\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>citrix sd-wan.*?</title>\"]}]}], \"_source_file\": \"citrix\\\\netscaler_sd-wan.yaml\"}, {\"id\": \"sharefile_storage_zones_controller\", \"info\": {\"name\": \"sharefile_storage_zones_controller\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sharefile_storage_zones_controller\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"sharefile storage server\\\"\"], \"google-query\": [\"intitle:\\\"sharefile storage server\\\"\"], \"product\": \"sharefile_storage_zones_controller\", \"shodan-query\": [\"title:\\\"sharefile storage server\\\"\", \"http.title:\\\"sharefile storage server\\\"\"], \"vendor\": \"citrix\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>sharefile storage server.*?</title>\"]}]}], \"_source_file\": \"citrix\\\\sharefile_storage_zones_controller.yaml\"}, {\"id\": \"xenapp\", \"info\": {\"name\": \"xenapp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xenapp\", \"severity\": \"info\", \"metadata\": {\"product\": \"xenapp\", \"shodan-query\": [\"html:\\\"/citrix/xenapp\\\"\"], \"vendor\": \"citrix\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/citrix/xenapp\"], \"case-insensitive\": true}]}], \"_source_file\": \"citrix\\\\xenapp.yaml\"}, {\"id\": \"xenmobile_server\", \"info\": {\"name\": \"xenmobile_server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xenmobile_server\", \"severity\": \"info\", \"metadata\": {\"product\": \"xenmobile_server\", \"shodan-query\": [\"title:\\\"xenmobile\\\"\"], \"vendor\": \"citrix\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>xenmobile.*?</title>\"]}]}], \"_source_file\": \"citrix\\\\xenmobile_server.yaml\"}, {\"id\": \"cliniccases\", \"info\": {\"name\": \"cliniccases\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cliniccases\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"cliniccases\\\",html:\\\"/cliniccases/\\\"\"], \"google-query\": [\"intitle:\\\"cliniccases\\\",html:\\\"/cliniccases/\\\"\"], \"product\": \"cliniccases\", \"shodan-query\": [\"http.title:\\\"cliniccases\\\",html:\\\"/cliniccases/\\\"\"], \"vendor\": \"cliniccases\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>cliniccases\\\",html:\\\"/cliniccases/.*?</title>\"]}]}], \"_source_file\": \"cliniccases\\\\cliniccases.yaml\"}, {\"id\": \"citrix_storefront\", \"info\": {\"name\": \"citrix_storefront\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,citrix_storefront\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/citrix/storeweb\\\"\"], \"product\": \"citrix_storefront\", \"shodan-query\": [\"html:\\\"/citrix/storeweb\\\"\", \"http.html:\\\"/citrix/storeweb\\\"\"], \"vendor\": \"cloud\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/citrix/storeweb\"], \"case-insensitive\": true}]}], \"_source_file\": \"cloud\\\\citrix_storefront.yaml\"}, {\"id\": \"hue\", \"info\": {\"name\": \"hue\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hue\", \"severity\": \"info\", \"metadata\": {\"product\": \"hue\", \"shodan-query\": [\"title:\\\"hue - welcome to hue\\\"\"], \"vendor\": \"cloudera\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>hue - welcome to hue.*?</title>\"]}]}], \"_source_file\": \"cloudera\\\\hue.yaml\"}, {\"id\": \"cmseasy\", \"info\": {\"name\": \"cmseasy\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cmseasy\", \"severity\": \"info\", \"metadata\": {\"product\": \"cmseasy\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"cmseasy\"], \"case-insensitive\": true}]}], \"_source_file\": \"cmseasy\\\\cmseasy.yaml\"}, {\"id\": \"cobbler\", \"info\": {\"name\": \"cobbler\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cobbler\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"cobbler web interface\\\"\"], \"google-query\": [\"intitle:\\\"cobbler web interface\\\"\"], \"product\": \"cobbler\", \"shodan-query\": [\"http.title:\\\"cobbler web interface\\\"\"], \"vendor\": \"cobblerd\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>cobbler web interface.*?</title>\"]}]}], \"_source_file\": \"cobblerd\\\\cobbler.yaml\"}, {\"id\": \"cobbler\", \"info\": {\"name\": \"cobbler\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cobbler\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"cobbler web interface\\\"\"], \"google-query\": [\"intitle:\\\"cobbler web interface\\\"\"], \"product\": \"cobbler\", \"shodan-query\": [\"http.title:\\\"cobbler web interface\\\"\"], \"vendor\": \"cobbler_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>cobbler web interface.*?</title>\"]}]}], \"_source_file\": \"cobbler_project\\\\cobbler.yaml\"}, {\"id\": \"wp_go_maps\", \"info\": {\"name\": \"wp_go_maps\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wp_go_maps\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/wp-content/plugins/wp-google-maps\\\"\"], \"product\": \"wp_go_maps\", \"vendor\": \"codecabin\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/wp-content/plugins/wp-google-maps\"], \"case-insensitive\": true}]}], \"_source_file\": \"codecabin\\\\wp_go_maps.yaml\"}, {\"id\": \"itop\", \"info\": {\"name\": \"itop\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,itop\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"itop login\\\"\"], \"product\": \"itop\", \"shodan-query\": [\"html:\\\"itop login\\\"\"], \"vendor\": \"combodo\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"itop login\"], \"case-insensitive\": true}]}], \"_source_file\": \"combodo\\\\itop.yaml\"}, {\"id\": \"ruckus_vriot\", \"info\": {\"name\": \"ruckus_vriot\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ruckus_vriot\", \"severity\": \"info\", \"metadata\": {\"product\": \"ruckus_vriot\", \"shodan-query\": [\"html:\\\"riot controller\\\"\"], \"vendor\": \"commscope\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"riot controller\"], \"case-insensitive\": true}]}], \"_source_file\": \"commscope\\\\ruckus_vriot.yaml\"}, {\"id\": \"commvault\", \"info\": {\"name\": \"commvault\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,commvault\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"1209838013\\\"\"], \"product\": \"commvault\", \"vendor\": \"commvault\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1209838013\"]}]}], \"_source_file\": \"commvault\\\\commvault.yaml\"}, {\"id\": \"discuz!\", \"info\": {\"name\": \"discuz!\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,discuz!\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"discuz!\\\"\"], \"product\": \"discuz!\", \"shodan-query\": [\"title:\\\"discuz!\\\"\"], \"vendor\": \"comsenz\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>discuz!.*?</title>\"]}]}], \"_source_file\": \"comsenz\\\\discuz!.yaml\"}, {\"id\": \"screenconnect\", \"info\": {\"name\": \"screenconnect\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,screenconnect\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"screenconnect-remote-support-software\\\"\", \"icon_hash=-82958153\"], \"hunter-query\": [\"app.name=\\\"connectwise screenconnect software\\\"\"], \"product\": \"screenconnect\", \"shodan-query\": [\"http.favicon.hash:-82958153\"], \"vendor\": \"connectwise\", \"verified\": true, \"zoomeye-query\": [\"app:\\\"screenconnect remote management software\\\"\"]}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-82958153\"]}]}], \"_source_file\": \"connectwise\\\\screenconnect.yaml\"}, {\"id\": \"contao\", \"info\": {\"name\": \"contao\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,contao\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"contao open source cms\\\"\", \"title=\\\"contao\\\"\"], \"google-query\": [\"intitle:\\\"contao\\\"\"], \"product\": \"contao\", \"shodan-query\": [\"title:\\\"contao\\\"\", \"http.title:\\\"contao\\\"\", \"http.html:\\\"contao open source cms\\\"\", \"cpe:\\\"cpe:2.3:a:contao:contao\\\"\"], \"vendor\": \"contao\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"contao open source cms\"], \"case-insensitive\": true}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>contao.*?</title>\"]}]}], \"_source_file\": \"contao\\\\contao.yaml\"}, {\"id\": \"solarview_compact\", \"info\": {\"name\": \"solarview_compact\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,solarview_compact\", \"severity\": \"info\", \"metadata\": {\"product\": \"solarview_compact\", \"shodan-query\": [\"http.favicon.hash:\\\"-244067125\\\"\", \"cpe:\\\"cpe:2.3:h:contec:solarview_compact\\\"\", \"http.html:\\\"solarview compact\\\"\"], \"vendor\": \"contec\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"solarview compact\"], \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"-244067125\"]}]}], \"_source_file\": \"contec\\\\solarview_compact.yaml\"}, {\"id\": \"solarview_compact_firmware\", \"info\": {\"name\": \"solarview_compact_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,solarview_compact_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"solarview compact\\\" && title=\\\"top\\\"\", \"icon_hash=\\\"-244067125\\\"\", \"body=\\\"solarview compact\\\"\"], \"product\": \"solarview_compact_firmware\", \"shodan-query\": [\"http.html:\\\"solarview compact\\\"\", \"http.favicon.hash:\\\"-244067125\\\"\", \"cpe:\\\"cpe:2.3:o:contec:solarview_compact_firmware\\\"\"], \"vendor\": \"contec\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\" title=\\\"top\", \"solarview compact\", \"solarview compact\\\" \"], \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"-244067125\"]}]}], \"_source_file\": \"contec\\\\solarview_compact_firmware.yaml\"}, {\"id\": \"sv-cpt-mc310_firmware\", \"info\": {\"name\": \"sv-cpt-mc310_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sv-cpt-mc310_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"solarview compact\\\"\"], \"product\": \"sv-cpt-mc310_firmware\", \"shodan-query\": [\"http.html:\\\"solarview compact\\\"\"], \"vendor\": \"contec\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"solarview compact\"], \"case-insensitive\": true}]}], \"_source_file\": \"contec\\\\sv-cpt-mc310_firmware.yaml\"}, {\"id\": \"sidekiq\", \"info\": {\"name\": \"sidekiq\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sidekiq\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"sidekiq\\\"\"], \"google-query\": [\"intitle:\\\"sidekiq\\\"\"], \"product\": \"sidekiq\", \"shodan-query\": [\"http.title:\\\"sidekiq\\\"\", \"title:\\\"sidekiq\\\"\"], \"vendor\": \"contribsys\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>sidekiq.*?</title>\"]}]}], \"_source_file\": \"contribsys\\\\sidekiq.yaml\"}, {\"id\": \"webpanel\", \"info\": {\"name\": \"webpanel\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,webpanel\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"login | control webpanel\\\"\"], \"google-query\": [\"intitle:\\\"login | control webpanel\\\"\"], \"product\": \"webpanel\", \"shodan-query\": [\"http.title:\\\"login | control webpanel\\\"\"], \"vendor\": \"control-webpanel\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>login .*?</title>\"]}]}], \"_source_file\": \"control-webpanel\\\\webpanel.yaml\"}, {\"id\": \"webpanel\", \"info\": {\"name\": \"webpanel\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,webpanel\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"-356182173\\\"\"], \"product\": \"webpanel\", \"vendor\": \"control_webpanel\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-356182173\"]}]}], \"_source_file\": \"control_webpanel\\\\webpanel.yaml\"}, {\"id\": \"copyparty\", \"info\": {\"name\": \"copyparty\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,copyparty\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"copyparty\\\"\"], \"google-query\": [\"intitle:\\\"copyparty\\\"\"], \"product\": \"copyparty\", \"shodan-query\": [\"title:\\\"copyparty\\\"\", \"http.title:\\\"copyparty\\\"\"], \"vendor\": \"copyparty_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>copyparty.*?</title>\"]}]}], \"_source_file\": \"copyparty_project\\\\copyparty.yaml\"}, {\"id\": \"cpanel\", \"info\": {\"name\": \"cpanel\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cpanel\", \"severity\": \"info\", \"metadata\": {\"product\": \"cpanel\", \"vendor\": \"cpanel\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"cpanel_magic_revision\", \"go.cpanel.net\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"cpanel\\\\cpanel.yaml\"}, {\"id\": \"cms\", \"info\": {\"name\": \"cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=-47932290\", \"body=craftcms\"], \"product\": \"cms\", \"shodan-query\": [\"http.html:\\\"craftcms\\\"\", \"http.favicon.hash:\\\"-47932290\\\"\"], \"vendor\": \"craftcms\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"craftcms\"], \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"-47932290\"]}]}], \"_source_file\": \"craftcms\\\\cms.yaml\"}, {\"id\": \"craft_cms\", \"info\": {\"name\": \"craft_cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,craft_cms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=craftcms\", \"icon_hash=-47932290\"], \"product\": \"craft_cms\", \"shodan-query\": [\"cpe:\\\"cpe:2.3:a:craftcms:craft_cms\\\"\", \"http.html:\\\"craftcms\\\"\", \"http.favicon.hash:\\\"-47932290\\\"\", \"x-powered-by: craft cms\", \"http.html:craftcms\", \"http.favicon.hash:-47932290\"], \"vendor\": \"craftcms\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"craftcms\"], \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"-47932290\"]}]}], \"_source_file\": \"craftcms\\\\craft_cms.yaml\"}, {\"id\": \"craftercms\", \"info\": {\"name\": \"craftercms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,craftercms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"craftercms\\\"\"], \"product\": \"craftercms\", \"shodan-query\": [\"http.html:\\\"craftercms\\\"\"], \"vendor\": \"craftercms\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"craftercms\"], \"case-insensitive\": true}]}], \"_source_file\": \"craftercms\\\\craftercms.yaml\"}, {\"id\": \"cratedb\", \"info\": {\"name\": \"cratedb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cratedb\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"cratedb\\\"\"], \"product\": \"cratedb\", \"vendor\": \"cratedb\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>cratedb.*?</title>\"]}]}], \"_source_file\": \"cratedb\\\\cratedb.yaml\"}, {\"id\": \"contact-form-generator\", \"info\": {\"name\": \"contact-form-generator\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,contact-form-generator\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/wp-content/plugins/contact-form-generator\\\"\"], \"product\": \"contact-form-generator\", \"vendor\": \"creative-solutions\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/wp-content/plugins/contact-form-generator\"], \"case-insensitive\": true}]}], \"_source_file\": \"creative-solutions\\\\contact-form-generator.yaml\"}, {\"id\": \"academy_learning_management_system\", \"info\": {\"name\": \"academy_learning_management_system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,academy_learning_management_system\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"study any topic, anytime\\\"\"], \"google-query\": [\"intext:\\\"study any topic, anytime\\\"\"], \"product\": \"academy_learning_management_system\", \"shodan-query\": [\"http.html:\\\"study any topic, anytime\\\"\"], \"vendor\": \"creativeitem\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"study any topic, anytime\"], \"case-insensitive\": true}]}], \"_source_file\": \"creativeitem\\\\academy_learning_management_system.yaml\"}, {\"id\": \"academy_lms\", \"info\": {\"name\": \"academy_lms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,academy_lms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"academy lms\\\"\"], \"product\": \"academy_lms\", \"shodan-query\": [\"http.html:\\\"academy lms\\\"\", \"html:\\\"academy lms\\\"\"], \"vendor\": \"creativeitem\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"academy lms\"], \"case-insensitive\": true}]}], \"_source_file\": \"creativeitem\\\\academy_lms.yaml\"}, {\"id\": \"crestron-device\", \"info\": {\"name\": \"crestron-device\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,crestron-device\", \"severity\": \"info\", \"metadata\": {\"product\": \"crestron-device\", \"shodan-query\": [\"html:\\\"airmedia\\\"\"], \"vendor\": \"crestron\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"airmedia\"], \"case-insensitive\": true}]}], \"_source_file\": \"crestron\\\\crestron-device.yaml\"}, {\"id\": \"listingpro\", \"info\": {\"name\": \"listingpro\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,listingpro\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/wp-content/plugins/listingpro\\\"\"], \"product\": \"listingpro\", \"vendor\": \"cridio\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/wp-content/plugins/listingpro\"], \"case-insensitive\": true}]}], \"_source_file\": \"cridio\\\\listingpro.yaml\"}, {\"id\": \"crmeb\", \"info\": {\"name\": \"crmeb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,crmeb\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"crmeb\\\"\"], \"product\": \"crmeb\", \"vendor\": \"crmeb\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>crmeb.*?</title>\"]}, {\"type\": \"favicon\", \"hash\": [\"699adaf4da1b0dc76ea5464df13755d7\"]}, {\"type\": \"word\", \"words\": [\"<h1>crmeb</h1>\"], \"case-insensitive\": true}]}], \"_source_file\": \"crmeb\\\\crmeb.yaml\"}, {\"id\": \"crushftp\", \"info\": {\"name\": \"crushftp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,crushftp\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"crushftp\\\"\"], \"product\": \"crushftp\", \"shodan-query\": [\"html:\\\"crushftp\\\"\", \"http.html:\\\"crushftp\\\"\"], \"vendor\": \"crushftp\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"crushftp\"], \"case-insensitive\": true}]}], \"_source_file\": \"crushftp\\\\crushftp.yaml\"}, {\"id\": \"apollo\", \"info\": {\"name\": \"apollo\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apollo\", \"severity\": \"info\", \"metadata\": {\"product\": \"apollo\", \"shodan-query\": [\"http.favicon.hash:11794165\"], \"vendor\": \"ctrip\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"11794165\"]}]}], \"_source_file\": \"ctrip\\\\apollo.yaml\"}, {\"id\": \"thinfinity_virtualui\", \"info\": {\"name\": \"thinfinity_virtualui\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,thinfinity_virtualui\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"thinfinity virtualui\\\"\"], \"google-query\": [\"intitle:\\\"thinfinity virtualui\\\"\"], \"product\": \"thinfinity_virtualui\", \"shodan-query\": [\"http.title:\\\"thinfinity virtualui\\\"\"], \"vendor\": \"cybelesoft\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>thinfinity virtualui.*?</title>\"]}]}], \"_source_file\": \"cybelesoft\\\\thinfinity_virtualui.yaml\"}, {\"id\": \"thinvnc\", \"info\": {\"name\": \"thinvnc\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,thinvnc\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=-1414548363\"], \"product\": \"thinvnc\", \"shodan-query\": [\"http.favicon.hash:-1414548363\"], \"vendor\": \"cybelsoft\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1414548363\"]}]}], \"_source_file\": \"cybelsoft\\\\thinvnc.yaml\"}, {\"id\": \"cyberpanel\", \"info\": {\"name\": \"cyberpanel\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cyberpanel\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"cyberpanel\\\"\"], \"product\": \"cyberpanel\", \"shodan-query\": [\"html:\\\"cyberpanel\\\"\"], \"vendor\": \"cyberpanel\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"cyberpanel\"], \"case-insensitive\": true}]}], \"_source_file\": \"cyberpanel\\\\cyberpanel.yaml\"}, {\"id\": \"d-link\", \"info\": {\"name\": \"d-link\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,d-link\", \"severity\": \"info\", \"metadata\": {\"product\": \"d-link\", \"vendor\": \"d-link\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"d-link systems, inc\"], \"case-insensitive\": true}]}], \"_source_file\": \"d-link\\\\d-link.yaml\"}, {\"id\": \"dh-ipc-hdbw23a0rn-zs_firmware\", \"info\": {\"name\": \"dh-ipc-hdbw23a0rn-zs_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dh-ipc-hdbw23a0rn-zs_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=2019488876\"], \"product\": \"dh-ipc-hdbw23a0rn-zs_firmware\", \"shodan-query\": [\"http.favicon.hash:2019488876\"], \"vendor\": \"dahuasecurity\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"2019488876\"]}]}], \"_source_file\": \"dahuasecurity\\\\dh-ipc-hdbw23a0rn-zs_firmware.yaml\"}, {\"id\": \"smart_parking_management\", \"info\": {\"name\": \"smart_parking_management\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,smart_parking_management\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/wpms/asset\\\"\"], \"product\": \"smart_parking_management\", \"shodan-query\": [\"html:\\\"/wpms/asset\\\"\", \"http.html:\\\"/wpms/asset\\\"\"], \"vendor\": \"dahuasecurity\", \"verified\": true, \"zoomeye-query\": [\"/wpms/asset\"]}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/wpms/asset\"], \"case-insensitive\": true}]}], \"_source_file\": \"dahuasecurity\\\\smart_parking_management.yaml\"}, {\"id\": \"danswer\", \"info\": {\"name\": \"danswer\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,danswer\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"484766002\\\"\"], \"product\": \"danswer\", \"vendor\": \"danswer-ai\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"484766002\"]}]}], \"_source_file\": \"danswer-ai\\\\danswer.yaml\"}, {\"id\": \"request-baskets\", \"info\": {\"name\": \"request-baskets\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,request-baskets\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"request-baskets\\\"\"], \"product\": \"request-baskets\", \"shodan-query\": [\"http.html:\\\"request-baskets\\\"\"], \"vendor\": \"darklynx\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"request-baskets\"], \"case-insensitive\": true}]}], \"_source_file\": \"darklynx\\\\request-baskets.yaml\"}, {\"id\": \"dataease\", \"info\": {\"name\": \"dataease\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dataease\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"dataease\\\"\"], \"product\": \"dataease\", \"shodan-query\": [\"http.html:\\\"dataease\\\"\"], \"vendor\": \"dataease\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"dataease\"], \"case-insensitive\": true}]}], \"_source_file\": \"dataease\\\\dataease.yaml\"}, {\"id\": \"dataease\", \"info\": {\"name\": \"dataease\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dataease\", \"severity\": \"info\", \"metadata\": {\"product\": \"dataease\", \"shodan-query\": [\"html:\\\"dataease\\\"\"], \"vendor\": \"dataease_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"dataease\"], \"case-insensitive\": true}]}], \"_source_file\": \"dataease_project\\\\dataease.yaml\"}, {\"id\": \"datahub\", \"info\": {\"name\": \"datahub\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,datahub\", \"severity\": \"info\", \"metadata\": {\"product\": \"datahub\", \"shodan-query\": [\"http.title:\\\"datahub\\\"\"], \"vendor\": \"datahub_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>datahub.*?</title>\"]}]}], \"_source_file\": \"datahub_project\\\\datahub.yaml\"}, {\"id\": \"data_science_studio\", \"info\": {\"name\": \"data_science_studio\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,data_science_studio\", \"severity\": \"info\", \"metadata\": {\"product\": \"data_science_studio\", \"shodan-query\": [\"title:\\\"dataiku\\\"\"], \"vendor\": \"dataiku\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>dataiku.*?</title>\"]}]}], \"_source_file\": \"dataiku\\\\data_science_studio.yaml\"}, {\"id\": \"datart\", \"info\": {\"name\": \"datart\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,datart\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"datart\\\"\"], \"hunter-query\": [\"web.title=\\\"datart\\\"\"], \"product\": \"datart\", \"shodan-query\": [\"title:\\\"datart\\\"\"], \"vendor\": \"datart\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>datart.*?</title>\"]}]}], \"_source_file\": \"datart\\\\datart.yaml\"}, {\"id\": \"dt80_dex_firmware\", \"info\": {\"name\": \"dt80_dex_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dt80_dex_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"datataker\\\"\"], \"google-query\": [\"intitle:\\\"datataker\\\"\"], \"product\": \"dt80_dex_firmware\", \"shodan-query\": [\"http.title:\\\"datataker\\\"\"], \"vendor\": \"datataker\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>datataker.*?</title>\"]}]}], \"_source_file\": \"datataker\\\\dt80_dex_firmware.yaml\"}, {\"id\": \"debian\", \"info\": {\"name\": \"debian\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,debian\", \"severity\": \"info\", \"metadata\": {\"product\": \"debian\", \"vendor\": \"debian\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h1>welcome to nginx on debian!</h1>\"], \"case-insensitive\": true}]}], \"_source_file\": \"debian\\\\debian.yaml\"}, {\"id\": \"dedecms\", \"info\": {\"name\": \"dedecms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dedecms\", \"severity\": \"info\", \"metadata\": {\"product\": \"dedecms\", \"vendor\": \"dedecms\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/templets/default/style/dedecms.css\", \"dedecms\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"name=\\\"dede_fields\", \"name=\\\"dede_fieldshash\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"<form  name=\\\"formsearch\\\" action=\\\"/plus/search.php\\\">\", \"name=\\\"q\\\"\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"<a href=http://www.dedecms.com target='_blank'>power by dedecms</a>\", \"<div><h3>dedecms error warning!</h3>\", \"content=\\\"order by dede58.com\\\" />\", \"http://www.dedecms.com/\", \"power by dedecms\"], \"case-insensitive\": true}]}], \"_source_file\": \"dedecms\\\\dedecms.yaml\"}, {\"id\": \"dse855\", \"info\": {\"name\": \"dse855\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dse855\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"deep sea electronics\"], \"product\": \"dse855\", \"vendor\": \"deep sea electronics\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"deep sea electronics\"], \"case-insensitive\": true}]}], \"_source_file\": \"Deep Sea Electronics\\\\dse855.yaml\"}, {\"id\": \"emc_avamar,emc_integrated_data_protection_appliance\", \"info\": {\"name\": \"emc_avamar,emc_integrated_data_protection_appliance\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,emc_avamar,emc_integrated_data_protection_appliance\", \"severity\": \"info\", \"metadata\": {\"product\": \"emc_avamar,emc_integrated_data_protection_appliance\", \"shodan-query\": [\"title:\\\"avamar\\\"\"], \"vendor\": \"dell\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>avamar.*?</title>\"]}]}], \"_source_file\": \"dell\\\\emc_avamar,emc_integrated_data_protection_appliance.yaml\"}, {\"id\": \"huemagic\", \"info\": {\"name\": \"huemagic\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,huemagic\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"node-red\\\"\"], \"google-query\": [\"intitle:\\\"node-red\\\"\"], \"product\": \"huemagic\", \"shodan-query\": [\"title:\\\"node-red\\\"\", \"http.title:\\\"node-red\\\"\"], \"vendor\": \"dgtl\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>node-red.*?</title>\"]}]}], \"_source_file\": \"dgtl\\\\huemagic.yaml\"}, {\"id\": \"drawio\", \"info\": {\"name\": \"drawio\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,drawio\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"flowchart maker\\\"\"], \"google-query\": [\"intitle:\\\"flowchart maker\\\"\"], \"product\": \"drawio\", \"shodan-query\": [\"http.title:\\\"flowchart maker\\\"\"], \"vendor\": \"diagrams\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>flowchart maker.*?</title>\"]}]}], \"_source_file\": \"diagrams\\\\drawio.yaml\"}, {\"id\": \"hoteldruid\", \"info\": {\"name\": \"hoteldruid\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hoteldruid\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"hoteldruid\\\"\", \"icon_hash=-1521640213\"], \"google-query\": [\"intitle:\\\"hoteldruid\\\"\"], \"product\": \"hoteldruid\", \"shodan-query\": [\"http.title:\\\"hoteldruid\\\"\", \"http.favicon.hash:-1521640213\", \"title:\\\"hoteldruid\\\"\"], \"vendor\": \"digitaldruid\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1521640213\"]}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>hoteldruid.*?</title>\"]}]}], \"_source_file\": \"digitaldruid\\\\hoteldruid.yaml\"}, {\"id\": \"central_wifimanager\", \"info\": {\"name\": \"central_wifimanager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,central_wifimanager\", \"severity\": \"info\", \"metadata\": {\"product\": \"central_wifimanager\", \"shodan-query\": [\"html:\\\"d-link central wifimanager\\\"\"], \"vendor\": \"dlink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"d-link central wifimanager\"], \"case-insensitive\": true}]}], \"_source_file\": \"dlink\\\\central_wifimanager.yaml\"}, {\"id\": \"d-view_8\", \"info\": {\"name\": \"d-view_8\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,d-view_8\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"-1317621215\\\"\"], \"product\": \"d-view_8\", \"shodan-query\": [\"http.favicon.hash:-1317621215\", \"http.favicon.hash:\\\"-1317621215\\\"\"], \"vendor\": \"dlink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1317621215\"]}]}], \"_source_file\": \"dlink\\\\d-view_8.yaml\"}, {\"id\": \"dar-8000-10_firmware\", \"info\": {\"name\": \"dar-8000-10_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dar-8000-10_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"dar-8000-10\\\" && title=\\\"d-link\\\"\"], \"product\": \"dar-8000-10_firmware\", \"vendor\": \"dlink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\" title=\\\"d-link\", \"dar-8000-10\\\" \"], \"case-insensitive\": true}]}], \"_source_file\": \"dlink\\\\dar-8000-10_firmware.yaml\"}, {\"id\": \"dir-605l_firmware\", \"info\": {\"name\": \"dir-605l_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dir-605l_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"l_tb>dir-605\\\"\"], \"product\": \"dir-605l_firmware\", \"vendor\": \"dlink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"l_tb>dir-605\"], \"case-insensitive\": true}]}], \"_source_file\": \"dlink\\\\dir-605l_firmware.yaml\"}, {\"id\": \"dir-615\", \"info\": {\"name\": \"dir-615\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dir-615\", \"severity\": \"info\", \"metadata\": {\"product\": \"dir-615\", \"shodan-query\": [\"http.title:\\\"roteador wireless\\\"\", \"cpe:\\\"cpe:2.3:h:dlink:dir-615\\\"\"], \"vendor\": \"dlink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>roteador wireless.*?</title>\"]}]}], \"_source_file\": \"dlink\\\\dir-615.yaml\"}, {\"id\": \"dir-816l_firmware\", \"info\": {\"name\": \"dir-816l_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dir-816l_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"dir-816l\\\"\"], \"product\": \"dir-816l_firmware\", \"shodan-query\": [\"html:\\\"dir-816l\\\"\", \"http.html:\\\"dir-816l\\\"\"], \"vendor\": \"dlink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"dir-816l\"], \"case-insensitive\": true}]}], \"_source_file\": \"dlink\\\\dir-816l_firmware.yaml\"}, {\"id\": \"dir-845l\", \"info\": {\"name\": \"dir-845l\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dir-845l\", \"severity\": \"info\", \"metadata\": {\"product\": \"dir-845l\", \"shodan-query\": [\"dir-845l\"], \"vendor\": \"dlink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"dir-845l\"], \"case-insensitive\": true}]}], \"_source_file\": \"dlink\\\\dir-845l.yaml\"}, {\"id\": \"dlink\", \"info\": {\"name\": \"dlink\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dlink\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"ac集中管理平台\\\" && body=\\\"d-link路由器管理页\\\"\", \"body=\\\"text:in order to access the sharecenter\\\"\"], \"product\": \"dlink\", \"vendor\": \"dlink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"text:in order to access the sharecenter\"], \"case-insensitive\": true}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*> body=\\\"d-link路由器管理页.*?</title>\", \"(?mi)<title[^>]*>ac集中管理平台\\\" .*?</title>\"]}]}], \"_source_file\": \"dlink\\\\dlink.yaml\"}, {\"id\": \"dns-320l\", \"info\": {\"name\": \"dns-320l\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dns-320l\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"text:in order to access the sharecenter\\\"\"], \"product\": \"dns-320l\", \"vendor\": \"dlink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"text:in order to access the sharecenter\"], \"case-insensitive\": true}]}], \"_source_file\": \"dlink\\\\dns-320l.yaml\"}, {\"id\": \"dns-320_firmware\", \"info\": {\"name\": \"dns-320_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dns-320_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"sharecenter\\\"\"], \"product\": \"dns-320_firmware\", \"shodan-query\": [\"http.html:\\\"sharecenter\\\"\", \"html:\\\"sharecenter\\\"\"], \"vendor\": \"dlink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"sharecenter\"], \"case-insensitive\": true}]}], \"_source_file\": \"dlink\\\\dns-320_firmware.yaml\"}, {\"id\": \"dotnetnuke\", \"info\": {\"name\": \"dotnetnuke\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dotnetnuke\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"dotnetnuke\\\"\", \"set-cookie: dnn_ismobile\", \"icon_hash=\\\"-1465479343\\\"\"], \"product\": \"dotnetnuke\", \"shodan-query\": [\"set-cookie: dnn_ismobile\", \"http.favicon.hash:-1465479343\"], \"vendor\": \"dnnsoftware\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"set-cookie: dnn_ismobile\"], \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"-1465479343\"]}]}], \"_source_file\": \"dnnsoftware\\\\dotnetnuke.yaml\"}, {\"id\": \"document_locator\", \"info\": {\"name\": \"document_locator\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,document_locator\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"document locator - webtools\\\"\"], \"google-query\": [\"intitle:\\\"document locator - webtools\\\"\"], \"product\": \"document_locator\", \"shodan-query\": [\"title:\\\"document locator - webtools\\\"\", \"http.title:\\\"document locator - webtools\\\"\"], \"vendor\": \"documentlocator\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>document locator - webtools.*?</title>\"]}]}], \"_source_file\": \"documentlocator\\\\document_locator.yaml\"}, {\"id\": \"dogtagpki\", \"info\": {\"name\": \"dogtagpki\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dogtagpki\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"identity management\\\"\", \"title=\\\"identity management\\\" html:\\\"freeipa\\\"\"], \"google-query\": [\"intitle:\\\"identity management\\\" html:\\\"freeipa\\\"\"], \"product\": \"dogtagpki\", \"shodan-query\": [\"title:\\\"identity management\\\" html:\\\"freeipa\\\"\", \"http.title:\\\"identity management\\\" html:\\\"freeipa\\\"\"], \"vendor\": \"dogtagpki\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>identity management\\\" html:\\\"freeipa.*?</title>\", \"(?mi)<title[^>]*>identity management.*?</title>\"]}]}], \"_source_file\": \"dogtagpki\\\\dogtagpki.yaml\"}, {\"id\": \"dokuwiki\", \"info\": {\"name\": \"dokuwiki\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dokuwiki\", \"severity\": \"info\", \"metadata\": {\"product\": \"dokuwiki\", \"vendor\": \"dokuwiki\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div id=\\\"dokuwiki\", \"content=\\\"dokuwiki\", \"powered by dokuwiki\"], \"case-insensitive\": true}]}], \"_source_file\": \"dokuwiki\\\\dokuwiki.yaml\"}, {\"id\": \"dolibarr_erp-crm\", \"info\": {\"name\": \"dolibarr_erp-crm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dolibarr_erp-crm\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=440258421\"], \"product\": \"dolibarr_erp-crm\", \"shodan-query\": [\"http.favicon.hash:440258421\"], \"vendor\": \"dolibarr\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"440258421\"]}]}], \"_source_file\": \"dolibarr\\\\dolibarr_erp-crm.yaml\"}, {\"id\": \"dotclear\", \"info\": {\"name\": \"dotclear\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dotclear\", \"severity\": \"info\", \"metadata\": {\"product\": \"dotclear\", \"vendor\": \"dotclear\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by <a href=\\\"http://dotclear.org/\"], \"case-insensitive\": true}]}], \"_source_file\": \"dotclear\\\\dotclear.yaml\"}, {\"id\": \"dotcms\", \"info\": {\"name\": \"dotcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dotcms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"dotcms\\\"\"], \"google-query\": [\"intitle:\\\"dotcms\\\"\"], \"product\": \"dotcms\", \"shodan-query\": [\"http.title:\\\"dotcms\\\"\"], \"vendor\": \"dotcms\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>dotcms.*?</title>\"]}]}], \"_source_file\": \"dotcms\\\\dotcms.yaml\"}, {\"id\": \"blogengine.net\", \"info\": {\"name\": \"blogengine.net\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,blogengine.net\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"blogengine.net\\\"\"], \"product\": \"blogengine.net\", \"shodan-query\": [\"http.html:\\\"blogengine.net\\\"\"], \"vendor\": \"dotnetblogengine\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"blogengine.net\"], \"case-insensitive\": true}]}], \"_source_file\": \"dotnetblogengine\\\\blogengine.net.yaml\"}, {\"id\": \"vigor\", \"info\": {\"name\": \"vigor\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vigor\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"\\\"excanvas.js\\\" && \\\"lang == \\\\\\\"zh-cn\\\\\\\"\\\" && \\\"detectlang\\\" && server==\\\"dws\\\"\"], \"product\": \"vigor\", \"vendor\": \"draytek\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"detectlang\", \"excanvas.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"draytek\\\\vigor.yaml\"}, {\"id\": \"vigor300b\", \"info\": {\"name\": \"vigor300b\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vigor300b\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"\\\"excanvas.js\\\" && \\\"lang == \\\\\\\"zh-cn\\\\\\\"\\\" && \\\"detectlang\\\" && server==\\\"dws\\\"\"], \"product\": \"vigor300b\", \"vendor\": \"draytek\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"detectlang\", \"excanvas.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"draytek\\\\vigor300b.yaml\"}, {\"id\": \"vigorconnect\", \"info\": {\"name\": \"vigorconnect\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vigorconnect\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"vigorconnect\\\"\"], \"product\": \"vigorconnect\", \"shodan-query\": [\"http.html:\\\"vigorconnect\\\"\"], \"vendor\": \"draytek\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"vigorconnect\"], \"case-insensitive\": true}]}], \"_source_file\": \"draytek\\\\vigorconnect.yaml\"}, {\"id\": \"opendreambox\", \"info\": {\"name\": \"opendreambox\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,opendreambox\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"dreambox webcontrol\\\"\"], \"google-query\": [\"intitle:\\\"dreambox webcontrol\\\"\"], \"product\": \"opendreambox\", \"shodan-query\": [\"title:\\\"dreambox webcontrol\\\"\", \"http.title:\\\"dreambox webcontrol\\\"\"], \"vendor\": \"dreambox\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>dreambox webcontrol.*?</title>\"]}]}], \"_source_file\": \"dreambox\\\\opendreambox.yaml\"}, {\"id\": \"drupal\", \"info\": {\"name\": \"drupal\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,drupal\", \"severity\": \"info\", \"metadata\": {\"product\": \"drupal\", \"vendor\": \"drupal\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/misc/drupal.js\", \"/sites/all/modules/\", \"/sites/all/themes/\", \"/sites/default/files/\", \"drupal.settings\", \"powered by <a href=\\\"https://www.drupal.org\\\">drupal</a>\", \"jquery.extend(drupal.settings\"], \"case-insensitive\": true}]}], \"_source_file\": \"drupal\\\\drupal.yaml\"}, {\"id\": \"spectrum_server_firmware\", \"info\": {\"name\": \"spectrum_server_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,spectrum_server_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"868509217\\\"\"], \"product\": \"spectrum_server_firmware\", \"shodan-query\": [\"http.favicon.hash:868509217\", \"http.favicon.hash:\\\"868509217\\\"\"], \"vendor\": \"dw\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"868509217\"]}]}], \"_source_file\": \"dw\\\\spectrum_server_firmware.yaml\"}, {\"id\": \"dzzoffice\", \"info\": {\"name\": \"dzzoffice\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dzzoffice\", \"severity\": \"info\", \"metadata\": {\"product\": \"dzzoffice\", \"shodan-query\": [\"http.html:\\\"dzzoffice\\\"\"], \"vendor\": \"dzzoffice\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"dzzoffice\"], \"case-insensitive\": true}]}], \"_source_file\": \"dzzoffice\\\\dzzoffice.yaml\"}, {\"id\": \"zentao\", \"info\": {\"name\": \"zentao\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zentao\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"zentao\"], \"product\": \"zentao\", \"shodan-query\": [\"http.title:\\\"zentao\\\"\"], \"vendor\": \"easycorp\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"zentao\"], \"case-insensitive\": true}]}], \"_source_file\": \"easycorp\\\\zentao.yaml\"}, {\"id\": \"mojarra\", \"info\": {\"name\": \"mojarra\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mojarra\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"javax.faces.viewstate\\\"\", \"body=\\\"javax.faces.resource\\\"\"], \"product\": \"mojarra\", \"shodan-query\": [\"html:\\\"javax.faces.resource\\\"\", \"http.html:\\\"javax.faces.viewstate\\\"\", \"http.html:\\\"javax.faces.resource\\\"\"], \"vendor\": \"eclipse\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"javax.faces.resource\", \"javax.faces.viewstate\"], \"case-insensitive\": true}]}], \"_source_file\": \"eclipse\\\\mojarra.yaml\"}, {\"id\": \"ectouch\", \"info\": {\"name\": \"ectouch\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ectouch\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"127711143\\\"\"], \"product\": \"ectouch\", \"vendor\": \"ectouch\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"127711143\"]}]}], \"_source_file\": \"ectouch\\\\ectouch.yaml\"}, {\"id\": \"open_edx\", \"info\": {\"name\": \"open_edx\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,open_edx\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"open edx\\\"\"], \"product\": \"open_edx\", \"shodan-query\": [\"http.html:\\\"open edx\\\"\"], \"vendor\": \"edx\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"open edx\"], \"case-insensitive\": true}]}], \"_source_file\": \"edx\\\\open_edx.yaml\"}, {\"id\": \"timetrax\", \"info\": {\"name\": \"timetrax\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,timetrax\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"-661694518\\\"\"], \"product\": \"timetrax\", \"vendor\": \"efrotech\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-661694518\"]}]}], \"_source_file\": \"efroTech\\\\timetrax.yaml\"}, {\"id\": \"elastic\", \"info\": {\"name\": \"elastic\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,elastic\", \"severity\": \"info\", \"metadata\": {\"product\": \"elastic\", \"vendor\": \"elastic\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"7d0688b40ba64da737b12a3257e6c7b3\"]}, {\"type\": \"word\", \"words\": [\"<title>elastic</title>\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"kbn-license-sig:\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"elastic\\\\elastic.yaml\"}, {\"id\": \"elasticsearch\", \"info\": {\"name\": \"elasticsearch\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,elasticsearch\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"index_not_found_exception\"], \"product\": \"elasticsearch\", \"vendor\": \"elastic\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"index_not_found_exception\"], \"case-insensitive\": true}]}], \"_source_file\": \"elastic\\\\elasticsearch.yaml\"}, {\"id\": \"kibana\", \"info\": {\"name\": \"kibana\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kibana\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"kibana\\\"\"], \"google-query\": [\"intitle:\\\"kibana\\\"\"], \"product\": \"kibana\", \"shodan-query\": [\"http.title:\\\"kibana\\\"\"], \"vendor\": \"elastic\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>kibana.*?</title>\"]}]}], \"_source_file\": \"elastic\\\\kibana.yaml\"}, {\"id\": \"logstash\", \"info\": {\"name\": \"logstash\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,logstash\", \"severity\": \"info\", \"metadata\": {\"product\": \"logstash\", \"shodan-query\": [\"html:\\\"logstash\\\"\"], \"vendor\": \"elastic\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"logstash\"], \"case-insensitive\": true}]}], \"_source_file\": \"elastic\\\\logstash.yaml\"}, {\"id\": \"elasticsearch\", \"info\": {\"name\": \"elasticsearch\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,elasticsearch\", \"severity\": \"info\", \"metadata\": {\"product\": \"elasticsearch\", \"vendor\": \"elasticsearch\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"6177bfb75b498e0bb356223ed76ffe43\"]}, {\"type\": \"word\", \"words\": [\"  \\\"tagline\\\" : \\\"you know, for search\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"elasticsearch\\\\elasticsearch.yaml\"}, {\"id\": \"eleanor_cms\", \"info\": {\"name\": \"eleanor_cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,eleanor_cms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"eleanor\\\"\"], \"product\": \"eleanor_cms\", \"shodan-query\": [\"html:\\\"eleanor\\\"\", \"http.html:\\\"eleanor\\\"\", \"cpe:\\\"cpe:2.3:a:eleanor-cms:eleanor_cms\\\"\"], \"vendor\": \"eleanor-cms\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"eleanor\"], \"case-insensitive\": true}]}], \"_source_file\": \"eleanor-cms\\\\eleanor_cms.yaml\"}, {\"id\": \"elgg\", \"info\": {\"name\": \"elgg\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,elgg\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"413602919\\\"\"], \"product\": \"elgg\", \"vendor\": \"elgg\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"413602919\"]}]}], \"_source_file\": \"elgg\\\\elgg.yaml\"}, {\"id\": \"ethos_identity\", \"info\": {\"name\": \"ethos_identity\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ethos_identity\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"ellucian company\\\"\"], \"google-query\": [\"login with ellucian ethos identity\"], \"product\": \"ethos_identity\", \"shodan-query\": [\"html:\\\"ellucian company\\\"\", \"http.html:\\\"ellucian company\\\"\"], \"vendor\": \"ellucian\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ellucian company\"], \"case-insensitive\": true}]}], \"_source_file\": \"ellucian\\\\ethos_identity.yaml\"}, {\"id\": \"embedthis-appweb\", \"info\": {\"name\": \"embedthis-appweb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,embedthis-appweb\", \"severity\": \"info\", \"metadata\": {\"product\": \"appweb\", \"vendor\": \"embedthis\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: embedthis-appweb\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"embedthis\\\\appweb.yaml\"}, {\"id\": \"emby\", \"info\": {\"name\": \"emby\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,emby\", \"severity\": \"info\", \"metadata\": {\"product\": \"emby\", \"vendor\": \"emby\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"emby server\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"emby\\\\emby.yaml\"}, {\"id\": \"emlog\", \"info\": {\"name\": \"emlog\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,emlog\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"emlog\\\"\"], \"product\": \"emlog\", \"vendor\": \"emlog\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>emlog.*?</title>\"]}]}], \"_source_file\": \"emlog\\\\emlog.yaml\"}, {\"id\": \"episerver\", \"info\": {\"name\": \"episerver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,episerver\", \"severity\": \"info\", \"metadata\": {\"product\": \"episerver\", \"vendor\": \"episerver\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/javascript/episerverscriptmanager.js\", \"content=\\\"episerver\"], \"case-insensitive\": true}]}], \"_source_file\": \"episerver\\\\episerver.yaml\"}, {\"id\": \"scoold\", \"info\": {\"name\": \"scoold\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,scoold\", \"severity\": \"info\", \"metadata\": {\"product\": \"scoold\", \"shodan-query\": [\"html:\\\"scoold-wrapper\\\"\"], \"vendor\": \"erudika\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"scoold-wrapper\"], \"case-insensitive\": true}]}], \"_source_file\": \"erudika\\\\scoold.yaml\"}, {\"id\": \"erxes\", \"info\": {\"name\": \"erxes\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,erxes\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"erxes\\\"\"], \"google-query\": [\"intitle:\\\"erxes\\\"\"], \"product\": \"erxes\", \"shodan-query\": [\"http.title:\\\"erxes\\\"\"], \"vendor\": \"erxes\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>erxes.*?</title>\"]}]}], \"_source_file\": \"erxes\\\\erxes.yaml\"}, {\"id\": \"cdg\", \"info\": {\"name\": \"cdg\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cdg\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"电子文档安全管理系统\\\",body=\\\"cdgserver3/\\\"\", \"esafenet\"], \"product\": \"cdg\", \"vendor\": \"esafenet\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"esafenet\"], \"case-insensitive\": true}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>电子文档安全管理系统\\\",body=\\\"cdgserver3/.*?</title>\"]}]}], \"_source_file\": \"esafenet\\\\cdg.yaml\"}, {\"id\": \"electronic_document_security_management_system\", \"info\": {\"name\": \"electronic_document_security_management_system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,electronic_document_security_management_system\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"电子文档安全管理系统\\\",body=\\\"cdgserver3/\\\"\", \"title=\\\"电子文档安全管理系统\\\"\"], \"hunter-query\": [\"web.title=\\\"电子文档安全管理系统\\\",web.body=\\\"cdgserver3/\\\"\"], \"product\": \"electronic_document_security_management_system\", \"vendor\": \"esafenet\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>电子文档安全管理系统\\\",body=\\\"cdgserver3/.*?</title>\", \"(?mi)<title[^>]*>电子文档安全管理系统.*?</title>\"]}]}], \"_source_file\": \"esafenet\\\\electronic_document_security_management_system.yaml\"}, {\"id\": \"esafenet\", \"info\": {\"name\": \"esafenet\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,esafenet\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"电子文档安全管理系统\\\",body=\\\"cdgserver3/\\\"\"], \"product\": \"esafenet\", \"vendor\": \"esafenet\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>电子文档安全管理系统\\\",body=\\\"cdgserver3/.*?</title>\"]}]}], \"_source_file\": \"esafenet\\\\esafenet.yaml\"}, {\"id\": \"reliance\", \"info\": {\"name\": \"reliance\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,reliance\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"etq reliance\\\"\"], \"product\": \"reliance\", \"shodan-query\": [\"html:\\\"etq reliance\\\"\"], \"vendor\": \"etq\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"etq reliance\"], \"case-insensitive\": true}]}], \"_source_file\": \"etq\\\\reliance.yaml\"}, {\"id\": \"etl3100\", \"info\": {\"name\": \"etl3100\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,etl3100\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"etl3100\\\"\"], \"product\": \"etl3100\", \"shodan-query\": [\"html:\\\"etl3100\\\"\"], \"vendor\": \"eurotel\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"etl3100\"], \"case-insensitive\": true}]}], \"_source_file\": \"eurotel\\\\etl3100.yaml\"}, {\"id\": \"eventum\", \"info\": {\"name\": \"eventum\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,eventum\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=305412257\"], \"product\": \"eventum\", \"shodan-query\": [\"http.favicon.hash:305412257\"], \"vendor\": \"eventum_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"305412257\"]}]}], \"_source_file\": \"eventum_project\\\\eventum.yaml\"}, {\"id\": \"extplorer\", \"info\": {\"name\": \"extplorer\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,extplorer\", \"severity\": \"info\", \"metadata\": {\"product\": \"extplorer\", \"vendor\": \"extplorer\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/extplorer.ico\"], \"case-insensitive\": true}]}], \"_source_file\": \"extplorer\\\\extplorer.yaml\"}, {\"id\": \"extreme_management_center\", \"info\": {\"name\": \"extreme_management_center\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,extreme_management_center\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"extreme management center\\\"\"], \"google-query\": [\"intitle:\\\"extreme management center\\\"\"], \"product\": \"extreme_management_center\", \"shodan-query\": [\"title:\\\"extreme management center\\\"\", \"http.title:\\\"extreme management center\\\"\"], \"vendor\": \"extremenetworks\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>extreme management center.*?</title>\"]}]}], \"_source_file\": \"extremenetworks\\\\extreme_management_center.yaml\"}, {\"id\": \"eyesofnetwork\", \"info\": {\"name\": \"eyesofnetwork\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,eyesofnetwork\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"eyesofnetwork\\\"\"], \"product\": \"eyesofnetwork\", \"shodan-query\": [\"html:\\\"eyesofnetwork\\\"\"], \"vendor\": \"eyesofnetwork\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"eyesofnetwork\"], \"case-insensitive\": true}]}], \"_source_file\": \"eyesofnetwork\\\\eyesofnetwork.yaml\"}, {\"id\": \"eyoucms\", \"info\": {\"name\": \"eyoucms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,eyoucms\", \"severity\": \"info\", \"metadata\": {\"product\": \"eyoucms\", \"vendor\": \"eyoucms\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"name=\\\"generator\\\" content=\\\"eyoucms\", \"powered by eyoucms\"], \"case-insensitive\": true}]}], \"_source_file\": \"eyoucms\\\\eyoucms.yaml\"}, {\"id\": \"f5-big-ip\", \"info\": {\"name\": \"f5-big-ip\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,f5-big-ip\", \"severity\": \"info\", \"metadata\": {\"product\": \"big-ip\", \"vendor\": \"f5\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"f5 networks, inc.\\\"\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"set-cookie: bigipserverpool\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"f5\\\\big-ip.yaml\"}, {\"id\": \"big-ip_access_policy_manager\", \"info\": {\"name\": \"big-ip_access_policy_manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,big-ip_access_policy_manager\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"big-ip&reg;-+redirect\\\" +\\\"server\\\"\"], \"google-query\": [\"intitle:\\\"big-ip&reg;-+redirect\\\" +\\\"server\\\"\"], \"product\": \"big-ip_access_policy_manager\", \"shodan-query\": [\"http.title:\\\"big-ip&reg;-+redirect\\\" +\\\"server\\\"\"], \"vendor\": \"f5\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>big-ip.*?</title>\"]}]}], \"_source_file\": \"f5\\\\big-ip_access_policy_manager.yaml\"}, {\"id\": \"nginx\", \"info\": {\"name\": \"nginx\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nginx\", \"severity\": \"info\", \"metadata\": {\"product\": \"nginx\", \"vendor\": \"f5\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: nginx\"], \"part\": \"header\", \"case-insensitive\": true}], \"extractors\": [{\"name\": \"version\", \"part\": \"header\", \"type\": \"regex\", \"regex\": [\"(?x)nginx\\\\/(\\\\d+\\\\.\\\\d+\\\\.\\\\d+)\"]}]}], \"_source_file\": \"f5\\\\nginx.yaml\"}, {\"id\": \"fastadmin\", \"info\": {\"name\": \"fastadmin\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fastadmin\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"fastadmin-框架\\\"\", \"icon_hash=\\\"-1036943727\\\"\"], \"product\": \"fastadmin\", \"vendor\": \"fastadmin\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1036943727\"]}]}], \"_source_file\": \"fastadmin\\\\fastadmin.yaml\"}, {\"id\": \"fastbee\", \"info\": {\"name\": \"fastbee\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fastbee\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"fastbee\"], \"product\": \"fastbee\", \"vendor\": \"fastbee\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"fastbee\"], \"case-insensitive\": true}]}], \"_source_file\": \"fastbee\\\\fastbee.yaml\"}, {\"id\": \"vec40g\", \"info\": {\"name\": \"vec40g\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vec40g\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"飞鱼星企业级智能上网行为管理系统\\\"\"], \"product\": \"vec40g\", \"vendor\": \"feiyuxing\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>飞鱼星企业级智能上网行为管理系统.*?</title>\"]}]}], \"_source_file\": \"feiyuxing\\\\vec40g.yaml\"}, {\"id\": \"fieldpopupnewsletter\", \"info\": {\"name\": \"fieldpopupnewsletter\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fieldpopupnewsletter\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"fieldpopupnewsletter\\\"\"], \"product\": \"fieldpopupnewsletter\", \"shodan-query\": [\"html:\\\"fieldpopupnewsletter\\\"\", \"http.html:\\\"fieldpopupnewsletter\\\"\"], \"vendor\": \"fieldthemes\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"fieldpopupnewsletter\"], \"case-insensitive\": true}]}], \"_source_file\": \"fieldthemes\\\\fieldpopupnewsletter.yaml\"}, {\"id\": \"finecms\", \"info\": {\"name\": \"finecms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,finecms\", \"severity\": \"info\", \"metadata\": {\"product\": \"finecms\", \"vendor\": \"finecms\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/statics/js/dayrui.js\", \"copyright\\\" content=\\\"finecms\", \"dayrui@gmail.com\", \"powered by finecms\"], \"case-insensitive\": true}]}], \"_source_file\": \"finecms\\\\finecms.yaml\"}, {\"id\": \"1panel\", \"info\": {\"name\": \"1panel\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,1panel\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"1300107149\\\" || icon_hash=\\\"1453309674\\\" || cert.issuer.cn=\\\"1panel intermediate ca\\\"\"], \"product\": \"1panel\", \"vendor\": \"fit2cloud\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1300107149\", \"1453309674\"]}]}], \"_source_file\": \"fit2cloud\\\\1panel.yaml\"}, {\"id\": \"jumpserver\", \"info\": {\"name\": \"jumpserver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jumpserver\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"jumpserver\\\"\"], \"product\": \"jumpserver\", \"vendor\": \"fit2cloud\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>jumpserver.*?</title>\"]}]}], \"_source_file\": \"fit2cloud\\\\jumpserver.yaml\"}, {\"id\": \"kubeoperator\", \"info\": {\"name\": \"kubeoperator\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kubeoperator\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"kubeoperator\\\"\", \"body=\\\"kubeoperator\\\"\"], \"product\": \"kubeoperator\", \"shodan-query\": [\"html:\\\"kubeoperator\\\"\", \"http.html:\\\"kubeoperator\\\"\"], \"vendor\": \"fit2cloud\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"kubeoperator\"], \"case-insensitive\": true}]}], \"_source_file\": \"fit2cloud\\\\kubeoperator.yaml\"}, {\"id\": \"kubepi\", \"info\": {\"name\": \"kubepi\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kubepi\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"kubepi\", \"body=\\\"kubepi\\\"\"], \"product\": \"kubepi\", \"shodan-query\": [\"html:\\\"kubepi\\\"\", \"http.html:\\\"kubepi\\\"\"], \"vendor\": \"fit2cloud\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"kubepi\"], \"case-insensitive\": true}]}], \"_source_file\": \"fit2cloud\\\\kubepi.yaml\"}, {\"id\": \"flatpress\", \"info\": {\"name\": \"flatpress\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,flatpress\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"flatpress\\\"\", \"icon_hash=-1189292869\"], \"product\": \"flatpress\", \"shodan-query\": [\"http.favicon.hash:-1189292869\", \"http.html:\\\"flatpress\\\"\"], \"vendor\": \"flatpress\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"flatpress\"], \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"-1189292869\"]}]}], \"_source_file\": \"flatpress\\\\flatpress.yaml\"}, {\"id\": \"flexnet_publisher\", \"info\": {\"name\": \"flexnet_publisher\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,flexnet_publisher\", \"severity\": \"info\", \"metadata\": {\"product\": \"flexnet_publisher\", \"shodan-query\": [\"title:\\\"flexnet\\\"\"], \"vendor\": \"flexera\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>flexnet.*?</title>\"]}]}], \"_source_file\": \"flexera\\\\flexnet_publisher.yaml\"}, {\"id\": \"ax8\", \"info\": {\"name\": \"ax8\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ax8\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"flir-ax8\\\"\"], \"product\": \"ax8\", \"shodan-query\": [\"title:\\\"flir\\\"\"], \"vendor\": \"flir\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>flir.*?</title>\"]}]}], \"_source_file\": \"flir\\\\ax8.yaml\"}, {\"id\": \"flowise\", \"info\": {\"name\": \"flowise\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,flowise\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"flowise\\\"\"], \"product\": \"flowise\", \"shodan-query\": [\"title:\\\"flowise\\\"\"], \"vendor\": \"flowiseai\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>flowise.*?</title>\"]}]}], \"_source_file\": \"flowiseai\\\\flowise.yaml\"}, {\"id\": \"flowpaper\", \"info\": {\"name\": \"flowpaper\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,flowpaper\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"flexpaper\\\"\"], \"product\": \"flowpaper\", \"shodan-query\": [\"title:\\\"flexpaper\\\"\"], \"vendor\": \"flowpaper\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>flexpaper.*?</title>\"]}]}], \"_source_file\": \"flowpaper\\\\flowpaper.yaml\"}, {\"id\": \"fogproject\", \"info\": {\"name\": \"fogproject\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fogproject\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"-1952619005\\\"\"], \"product\": \"fogproject\", \"vendor\": \"fogproject\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1952619005\"]}]}], \"_source_file\": \"fogproject\\\\fogproject.yaml\"}, {\"id\": \"am\", \"info\": {\"name\": \"am\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,am\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"openam\\\"\"], \"google-query\": [\"intitle:\\\"openam\\\"\"], \"product\": \"am\", \"shodan-query\": [\"http.title:\\\"openam\\\"\"], \"vendor\": \"forgerock\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>openam.*?</title>\"]}]}], \"_source_file\": \"forgerock\\\\am.yaml\"}, {\"id\": \"openam\", \"info\": {\"name\": \"openam\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,openam\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"openam\\\"\"], \"google-query\": [\"intitle:\\\"openam\\\"\"], \"product\": \"openam\", \"shodan-query\": [\"http.title:\\\"openam\\\"\"], \"vendor\": \"forgerock\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>openam.*?</title>\"]}]}], \"_source_file\": \"forgerock\\\\openam.yaml\"}, {\"id\": \"fortinet-fortimail\", \"info\": {\"name\": \"fortinet-fortimail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fortinet-fortimail\", \"severity\": \"info\", \"metadata\": {\"product\": \"fortimail\", \"vendor\": \"fortinet\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<script language=javascript>\", \"location=\\\"/m/webmail/\\\";\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"fortinet\\\\fortimail.yaml\"}, {\"id\": \"fortinac\", \"info\": {\"name\": \"fortinac\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fortinac\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"fortinac\\\"\"], \"google-query\": [\"intitle:\\\"fortinac\\\"\"], \"product\": \"fortinac\", \"shodan-query\": [\"title:\\\"fortinac\\\"\", \"http.title:\\\"fortinac\\\"\"], \"vendor\": \"fortinet\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>fortinac.*?</title>\"]}]}], \"_source_file\": \"fortinet\\\\fortinac.yaml\"}, {\"id\": \"fortios\", \"info\": {\"name\": \"fortios\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fortios\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/remote/login\\\" \\\"xxxxxxxx\\\"\", \"icon_hash=945408572\"], \"product\": \"fortios\", \"shodan-query\": [\"http.html:\\\"/remote/login\\\" \\\"xxxxxxxx\\\"\", \"http.favicon.hash:945408572\", \"cpe:\\\"cpe:2.3:o:fortinet:fortios\\\"\", \"port:10443 http.favicon.hash:945408572\"], \"vendor\": \"fortinet\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/remote/login\\\" \\\"xxxxxxxx\"], \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"945408572\"]}]}], \"_source_file\": \"fortinet\\\\fortios.yaml\"}, {\"id\": \"fortiportal\", \"info\": {\"name\": \"fortiportal\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fortiportal\", \"severity\": \"info\", \"metadata\": {\"product\": \"fortiportal\", \"shodan-query\": [\"html:\\\"fortiportal\\\"\"], \"vendor\": \"fortinet\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"fortiportal\"], \"case-insensitive\": true}]}], \"_source_file\": \"fortinet\\\\fortiportal.yaml\"}, {\"id\": \"fortiweb\", \"info\": {\"name\": \"fortiweb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fortiweb\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"fortiweb - \\\"\"], \"google-query\": [\"intitle:\\\"fortiweb - \\\"\"], \"product\": \"fortiweb\", \"shodan-query\": [\"http.title:\\\"fortiweb - \\\"\"], \"vendor\": \"fortinet\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>fortiweb - .*?</title>\"]}]}], \"_source_file\": \"fortinet\\\\fortiweb.yaml\"}, {\"id\": \"fortiwlm\", \"info\": {\"name\": \"fortiwlm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fortiwlm\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"fortiwlm\\\"\", \"title=\\\"fortiwlm\\\"\"], \"google-query\": [\"intitle:\\\"fortiwlm\\\"\"], \"product\": \"fortiwlm\", \"shodan-query\": [\"http.title:\\\"fortiwlm\\\"\", \"http.html:\\\"fortiwlm\\\"\"], \"vendor\": \"fortinet\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"fortiwlm\"], \"case-insensitive\": true}]}], \"_source_file\": \"fortinet\\\\fortiwlm.yaml\"}, {\"id\": \"goanywhere_managed_file_transfer\", \"info\": {\"name\": \"goanywhere_managed_file_transfer\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,goanywhere_managed_file_transfer\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"goanywhere-mft\\\"\", \"icon_hash=1484947000\", \"icon_hash=1484947000,1828756398,1170495932\"], \"product\": \"goanywhere_managed_file_transfer\", \"shodan-query\": [\"http.favicon.hash:1484947000,1828756398,1170495932\", \"http.favicon.hash:1484947000\"], \"vendor\": \"fortra\", \"verified\": true, \"zoomeye-query\": [\"app:\\\"fortra goanywhere-mft\\\"\"]}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1170495932\", \"1484947000\", \"1828756398\"]}]}], \"_source_file\": \"fortra\\\\goanywhere_managed_file_transfer.yaml\"}, {\"id\": \"fuxa\", \"info\": {\"name\": \"fuxa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fuxa\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"fuxa\\\"\"], \"product\": \"fuxa\", \"vendor\": \"frangoteam\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>fuxa.*?</title>\"]}]}], \"_source_file\": \"frangoteam\\\\fuxa.yaml\"}, {\"id\": \"colibri_firmware\", \"info\": {\"name\": \"colibri_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,colibri_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"franklin fueling systems\\\"\"], \"product\": \"colibri_firmware\", \"shodan-query\": [\"http.html:\\\"franklin fueling systems\\\"\"], \"vendor\": \"franklinfueling\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"franklin fueling systems\"], \"case-insensitive\": true}]}], \"_source_file\": \"franklinfueling\\\\colibri_firmware.yaml\"}, {\"id\": \"erpnext\", \"info\": {\"name\": \"erpnext\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,erpnext\", \"severity\": \"info\", \"metadata\": {\"product\": \"erpnext\", \"shodan-query\": [\"html:\\\"login to frappe\\\"\"], \"vendor\": \"frappe\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"login to frappe\"], \"case-insensitive\": true}]}], \"_source_file\": \"frappe\\\\erpnext.yaml\"}, {\"id\": \"free5gc\", \"info\": {\"name\": \"free5gc\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,free5gc\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"free5gc web console\\\"\"], \"google-query\": [\"intitle:\\\"free5gc web console\\\"\"], \"product\": \"free5gc\", \"shodan-query\": [\"http.title:\\\"free5gc web console\\\"\"], \"vendor\": \"free5gc\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>free5gc web console.*?</title>\"]}]}], \"_source_file\": \"free5gc\\\\free5gc.yaml\"}, {\"id\": \"frigate\", \"info\": {\"name\": \"frigate\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,frigate\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"frigate\\\"\"], \"google-query\": [\"intitle:\\\"frigate\\\"\"], \"product\": \"frigate\", \"shodan-query\": [\"title:\\\"frigate\\\"\", \"http.title:\\\"frigate\\\"\"], \"vendor\": \"frigate\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>frigate.*?</title>\"]}]}], \"_source_file\": \"frigate\\\\frigate.yaml\"}, {\"id\": \"froxlor\", \"info\": {\"name\": \"froxlor\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,froxlor\", \"severity\": \"info\", \"metadata\": {\"product\": \"froxlor\", \"shodan-query\": [\"title:\\\"froxlor server management panel\\\"\"], \"vendor\": \"froxlor\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>froxlor server management panel.*?</title>\"]}]}], \"_source_file\": \"froxlor\\\\froxlor.yaml\"}, {\"id\": \"timekeeper\", \"info\": {\"name\": \"timekeeper\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,timekeeper\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=2134367771\"], \"product\": \"timekeeper\", \"shodan-query\": [\"http.favicon.hash:2134367771\"], \"vendor\": \"fsmlabs\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"2134367771\"]}]}], \"_source_file\": \"fsmlabs\\\\timekeeper.yaml\"}, {\"id\": \"fudforum\", \"info\": {\"name\": \"fudforum\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fudforum\", \"severity\": \"info\", \"metadata\": {\"product\": \"fudforum\", \"vendor\": \"fudforum\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by: fudforum\"], \"case-insensitive\": true}]}], \"_source_file\": \"fudforum\\\\fudforum.yaml\"}, {\"id\": \"apeosport-v_c3375\", \"info\": {\"name\": \"apeosport-v_c3375\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apeosport-v_c3375\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"\\\"prop.htm\\\" && \\\"docucentre\\\"\"], \"product\": \"apeosport-v_c3375\", \"vendor\": \"fujixerox\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"docucentre\", \"prop.htm\"], \"case-insensitive\": true}]}], \"_source_file\": \"fujixerox\\\\apeosport-v_c3375.yaml\"}, {\"id\": \"ganglia-web\", \"info\": {\"name\": \"ganglia-web\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ganglia-web\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"ganglia_form.submit()\\\"\"], \"product\": \"ganglia-web\", \"shodan-query\": [\"http.html:\\\"ganglia_form.submit()\\\"\"], \"vendor\": \"ganglia\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ganglia_form.submit()\"], \"case-insensitive\": true}]}], \"_source_file\": \"ganglia\\\\ganglia-web.yaml\"}, {\"id\": \"ganglia\", \"info\": {\"name\": \"ganglia\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ganglia\", \"severity\": \"info\", \"metadata\": {\"product\": \"ganglia\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"name=\\\"ganglia_form\", \"onchange=\\\"ganglia_form.submit();\"], \"case-insensitive\": true}]}], \"_source_file\": \"ganglia\\\\ganglia.yaml\"}, {\"id\": \"cs141\", \"info\": {\"name\": \"cs141\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cs141\", \"severity\": \"info\", \"metadata\": {\"product\": \"cs141\", \"shodan-query\": [\"http.html:\\\"cs141\\\"\"], \"vendor\": \"generex\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"cs141\"], \"case-insensitive\": true}]}], \"_source_file\": \"generex\\\\cs141.yaml\"}, {\"id\": \"genieacs\", \"info\": {\"name\": \"genieacs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,genieacs\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"genieacs\\\"\", \"icon_hash=-2098066288\"], \"product\": \"genieacs\", \"shodan-query\": [\"http.favicon.hash:-2098066288\", \"http.html:\\\"genieacs\\\"\"], \"vendor\": \"genieacs\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"genieacs\"], \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"-2098066288\"]}]}], \"_source_file\": \"genieacs\\\\genieacs.yaml\"}, {\"id\": \"geoserver\", \"info\": {\"name\": \"geoserver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,geoserver\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"geoserver\\\"\"], \"product\": \"geoserver\", \"shodan-query\": [\"html:\\\"/geoserver/\\\"\"], \"vendor\": \"geoserver\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/geoserver/\"], \"case-insensitive\": true}]}], \"_source_file\": \"geoserver\\\\geoserver.yaml\"}, {\"id\": \"jai-ext\", \"info\": {\"name\": \"jai-ext\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jai-ext\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"geoserver\\\"\"], \"product\": \"jai-ext\", \"shodan-query\": [\"/geoserver/\"], \"vendor\": \"geosolutionsgroup\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/geoserver/\"], \"case-insensitive\": true}]}], \"_source_file\": \"geosolutionsgroup\\\\jai-ext.yaml\"}, {\"id\": \"gestsup\", \"info\": {\"name\": \"gestsup\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gestsup\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"gestsup\\\"\"], \"product\": \"gestsup\", \"shodan-query\": [\"http.favicon.hash:-283003760\"], \"vendor\": \"gestsup\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-283003760\"]}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>gestsup.*?</title>\"]}]}], \"_source_file\": \"gestsup\\\\gestsup.yaml\"}, {\"id\": \"grav_cms\", \"info\": {\"name\": \"grav_cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,grav_cms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"grav cms\\\"\"], \"product\": \"grav_cms\", \"shodan-query\": [\"html:\\\"grav cms\\\"\", \"http.html:\\\"grav cms\\\"\"], \"vendor\": \"getgrav\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"grav cms\"], \"case-insensitive\": true}]}], \"_source_file\": \"getgrav\\\\grav_cms.yaml\"}, {\"id\": \"laminas-http\", \"info\": {\"name\": \"laminas-http\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,laminas-http\", \"severity\": \"info\", \"metadata\": {\"product\": \"laminas-http\", \"shodan-query\": [\"http.html:\\\"laminas\\\"\"], \"vendor\": \"getlaminas\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"laminas\"]}]}], \"_source_file\": \"getlaminas\\\\laminas-http.yaml\"}, {\"id\": \"gibbon\", \"info\": {\"name\": \"gibbon\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gibbon\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"-165631681\\\"\"], \"product\": \"gibbon\", \"shodan-query\": [\"http.favicon.hash:-165631681\", \"http.favicon.hash:\\\"-165631681\\\"\"], \"vendor\": \"gibbonedu\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-165631681\"]}]}], \"_source_file\": \"gibbonedu\\\\gibbon.yaml\"}, {\"id\": \"gitblit\", \"info\": {\"name\": \"gitblit\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gitblit\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"gitblit\\\"\", \"body=\\\"gitblit\\\"\"], \"google-query\": [\"intitle:\\\"gitblit\\\"\"], \"product\": \"gitblit\", \"shodan-query\": [\"http.html:\\\"gitblit\\\"\", \"http.title:\\\"gitblit\\\"\", \"title:\\\"gitblit\\\"\"], \"vendor\": \"gitblit\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"gitblit\"], \"case-insensitive\": true}]}], \"_source_file\": \"gitblit\\\\gitblit.yaml\"}, {\"id\": \"gitea\", \"info\": {\"name\": \"gitea\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gitea\", \"severity\": \"info\", \"metadata\": {\"product\": \"gitea\", \"vendor\": \"gitea\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"gitea - git with a cup of tea\\\"\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"set-cookie: i_like_gitea\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"gitea\\\\gitea.yaml\"}, {\"id\": \"enterprise_server\", \"info\": {\"name\": \"enterprise_server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,enterprise_server\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"github-enterprise\\\"\"], \"product\": \"enterprise_server\", \"shodan-query\": [\"title:\\\"github enterprise\\\"\", \"micro focus dsd\"], \"vendor\": \"github\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"micro focus dsd\"], \"case-insensitive\": true}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>github enterprise.*?</title>\"]}]}], \"_source_file\": \"github\\\\enterprise_server.yaml\"}, {\"id\": \"gitlab\", \"info\": {\"name\": \"gitlab\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gitlab\", \"severity\": \"info\", \"metadata\": {\"product\": \"gitlab\", \"vendor\": \"gitlab\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"navbar-gitlab\", \"search gitlab\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"<a href=\\\"https://about.gitlab.com/\\\">about gitlab\", \"class=\\\"col-sm-7 brand-holder pull-left\\\"\", \"content=\\\"gitlab \", \"content=\\\"gitlab community edition\\\"\", \"gon.default_issues_tracker\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"set-cookie: _gitlab_session=\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"gitlab\\\\gitlab.yaml\"}, {\"id\": \"gl-ar300m_firmware\", \"info\": {\"name\": \"gl-ar300m_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gl-ar300m_firmware\", \"severity\": \"info\", \"metadata\": {\"product\": \"gl-ar300m_firmware\", \"shodan-query\": [\"title:\\\"gl.inet admin panel\\\"\"], \"vendor\": \"gl-inet\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>gl.inet admin panel.*?</title>\"]}]}], \"_source_file\": \"gl-inet\\\\gl-ar300m_firmware.yaml\"}, {\"id\": \"gl-s20_firmware\", \"info\": {\"name\": \"gl-s20_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gl-s20_firmware\", \"severity\": \"info\", \"metadata\": {\"product\": \"gl-s20_firmware\", \"shodan-query\": [\"title:\\\"gl.inet admin panel\\\"\"], \"vendor\": \"gl-inet\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>gl.inet admin panel.*?</title>\"]}]}], \"_source_file\": \"gl-inet\\\\gl-s20_firmware.yaml\"}, {\"id\": \"glpi\", \"info\": {\"name\": \"glpi\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,glpi\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"-1474875778\\\"\", \"title=\\\"glpi\\\"\"], \"google-query\": [\"intitle:\\\"glpi\\\"\"], \"product\": \"glpi\", \"shodan-query\": [\"http.favicon.hash:\\\"-1474875778\\\"\", \"http.title:\\\"glpi\\\"\"], \"vendor\": \"glpi-project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1474875778\"]}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>glpi.*?</title>\"]}]}], \"_source_file\": \"glpi-project\\\\glpi.yaml\"}, {\"id\": \"linx_sphere\", \"info\": {\"name\": \"linx_sphere\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,linx_sphere\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"scs.web.server.spi/1.0\"], \"product\": \"linx_sphere\", \"vendor\": \"gmaolinx\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"scs.web.server.spi/1.0\"], \"case-insensitive\": true}]}], \"_source_file\": \"gmaolinx\\\\linx_sphere.yaml\"}, {\"id\": \"gnuboard5\", \"info\": {\"name\": \"gnuboard5\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gnuboard5\", \"severity\": \"info\", \"metadata\": {\"product\": \"gnuboard5\", \"shodan-query\": [\"http.html:\\\"gnuboard\\\"\", \"http.html:\\\"gnuboard5\\\"\"], \"vendor\": \"gnuboard\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"gnuboard\", \"gnuboard5\"], \"case-insensitive\": true}]}], \"_source_file\": \"gnuboard\\\\gnuboard5.yaml\"}, {\"id\": \"gogs\", \"info\": {\"name\": \"gogs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gogs\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"sign in - gogs\\\"\"], \"google-query\": [\"intitle:\\\"sign in - gogs\\\"\"], \"product\": \"gogs\", \"shodan-query\": [\"title:\\\"sign in - gogs\\\"\", \"http.title:\\\"sign in - gogs\\\"\", \"cpe:\\\"cpe:2.3:a:gogs:gogs\\\"\"], \"vendor\": \"gogits\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>sign in - gogs.*?</title>\"]}]}], \"_source_file\": \"gogits\\\\gogs.yaml\"}, {\"id\": \"gogs\", \"info\": {\"name\": \"gogs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gogs\", \"severity\": \"info\", \"metadata\": {\"product\": \"gogs\", \"vendor\": \"gogs\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a class=\\\"item\\\" target=\\\"_blank\\\" href=\\\"https://gogs.io/docs\\\" rel=\\\"noreferrer\\\">帮助</a>\", \"content=\\\"gogs\"], \"case-insensitive\": true}]}], \"_source_file\": \"gogs\\\\gogs.yaml\"}, {\"id\": \"gradio\", \"info\": {\"name\": \"gradio\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gradio\", \"severity\": \"info\", \"metadata\": {\"product\": \"gradio\", \"shodan-query\": [\"html:\\\"__gradio_mode__\\\"\"], \"vendor\": \"gradio\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"__gradio_mode__\"], \"case-insensitive\": true}]}], \"_source_file\": \"gradio\\\\gradio.yaml\"}, {\"id\": \"gradio\", \"info\": {\"name\": \"gradio\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gradio\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"__gradio_mode__\\\"\", \"title=\\\"gradio\\\"\"], \"google-query\": [\"intitle:\\\"gradio\\\"\"], \"product\": \"gradio\", \"shodan-query\": [\"http.html:\\\"__gradio_mode__\\\"\", \"http.title:\\\"gradio\\\"\"], \"vendor\": \"gradio_app\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"__gradio_mode__\"], \"case-insensitive\": true}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>gradio.*?</title>\"]}]}], \"_source_file\": \"gradio_app\\\\gradio.yaml\"}, {\"id\": \"gradio\", \"info\": {\"name\": \"gradio\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gradio\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"__gradio_mode__\\\"\"], \"product\": \"gradio\", \"shodan-query\": [\"html:\\\"__gradio_mode__\\\"\", \"title:\\\"gradio\\\"\"], \"vendor\": \"gradio_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"__gradio_mode__\"], \"case-insensitive\": true}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>gradio.*?</title>\"]}]}], \"_source_file\": \"gradio_project\\\\gradio.yaml\"}, {\"id\": \"grafana\", \"info\": {\"name\": \"grafana\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,grafana\", \"severity\": \"info\", \"metadata\": {\"product\": \"grafana\", \"vendor\": \"grafana\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"grafana_icon.svg\", \"login\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"grafana-app\", \"window.grafanabootdata = \"], \"case-insensitive\": true}]}], \"_source_file\": \"grafana\\\\grafana.yaml\"}, {\"id\": \"grandnode\", \"info\": {\"name\": \"grandnode\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,grandnode\", \"severity\": \"info\", \"metadata\": {\"product\": \"grandnode\", \"vendor\": \"grandnode\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"x-powered-by: grandnode\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"grandnode\\\\grandnode.yaml\"}, {\"id\": \"netmaker\", \"info\": {\"name\": \"netmaker\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netmaker\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"netmaker\\\"\"], \"product\": \"netmaker\", \"shodan-query\": [\"html:\\\"netmaker\\\"\", \"http.html:\\\"netmaker\\\"\"], \"vendor\": \"gravitl\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"netmaker\"], \"case-insensitive\": true}]}], \"_source_file\": \"gravitl\\\\netmaker.yaml\"}, {\"id\": \"graylog\", \"info\": {\"name\": \"graylog\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,graylog\", \"severity\": \"info\", \"metadata\": {\"product\": \"graylog\", \"shodan-query\": [\"title:\\\"graylog web interface\\\"\"], \"vendor\": \"graylog\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>graylog web interface.*?</title>\"]}, {\"type\": \"word\", \"words\": [\"org.graylog.plugins.pipelineprocessor.processorplugin\"], \"case-insensitive\": true}]}], \"_source_file\": \"graylog\\\\graylog.yaml\"}, {\"id\": \"testrail\", \"info\": {\"name\": \"testrail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,testrail\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"testrail\\\"\"], \"product\": \"testrail\", \"shodan-query\": [\"http.html:\\\"testrail\\\"\"], \"vendor\": \"gurock\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"testrail\"], \"case-insensitive\": true}]}], \"_source_file\": \"gurock\\\\testrail.yaml\"}, {\"id\": \"h2\", \"info\": {\"name\": \"h2\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,h2\", \"severity\": \"info\", \"metadata\": {\"product\": \"h2\", \"shodan-query\": [\"http.favicon.hash:116323821\"], \"vendor\": \"h2database\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"116323821\"]}]}], \"_source_file\": \"h2database\\\\h2.yaml\"}, {\"id\": \"h2o\", \"info\": {\"name\": \"h2o\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,h2o\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"h2o flow\\\"\"], \"google-query\": [\"intitle:\\\"h2o flow\\\"\"], \"product\": \"h2o\", \"shodan-query\": [\"title:\\\"h2o flow\\\"\", \"http.title:\\\"h2o flow\\\"\"], \"vendor\": \"h2o\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>h2o flow.*?</title>\"]}]}], \"_source_file\": \"h2o\\\\h2o.yaml\"}, {\"id\": \"edusoho\", \"info\": {\"name\": \"edusoho\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,edusoho\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"powered by edusoho\\\" || body=\\\"powered by <a href=\\\\\\\"http://www.edusoho.com/\\\\\\\" target=\\\\\\\"_blank\\\\\\\">edusoho\\\" || (body=\\\"powered by edusoho\\\" && body=\\\"var app\\\")\"], \"product\": \"edusoho\", \"vendor\": \"hagzhou-kuozhi-network-technology\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by <a href=\\\"http://www.edusoho.com/\\\" target=\\\"_blank\\\">edusoho\"], \"case-insensitive\": true}]}], \"_source_file\": \"hagzhou-kuozhi-network-technology\\\\edusoho.yaml\"}, {\"id\": \"cph2_echarge\", \"info\": {\"name\": \"cph2_echarge\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cph2_echarge\", \"severity\": \"info\", \"metadata\": {\"product\": \"cph2_echarge\", \"shodan-query\": [\"html:\\\"salia plcc\\\"\"], \"vendor\": \"hardy-barth\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"salia plcc\"], \"case-insensitive\": true}]}], \"_source_file\": \"hardy-barth\\\\cph2_echarge.yaml\"}, {\"id\": \"media-suite\", \"info\": {\"name\": \"media-suite\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,media-suite\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"harman media suite\"], \"product\": \"media-suite\", \"vendor\": \"harman\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"harman media suite\"], \"case-insensitive\": true}]}], \"_source_file\": \"harman\\\\media-suite.yaml\"}, {\"id\": \"consul\", \"info\": {\"name\": \"consul\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,consul\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"consul by hashicorp\\\"\"], \"google-query\": [\"intitle:\\\"consul by hashicorp\\\"\"], \"product\": \"consul\", \"shodan-query\": [\"title:\\\"consul by hashicorp\\\"\", \"http.title:\\\"consul by hashicorp\\\"\", \"cpe:\\\"cpe:2.3:a:hashicorp:consul\\\"\"], \"vendor\": \"hashicorp\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>consul by hashicorp.*?</title>\"]}]}], \"_source_file\": \"hashicorp\\\\consul.yaml\"}, {\"id\": \"sentinel\", \"info\": {\"name\": \"sentinel\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sentinel\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"sentinel dashboard\\\"\"], \"google-query\": [\"intitle:\\\"sentinel dashboard\\\"\"], \"product\": \"sentinel\", \"shodan-query\": [\"title:\\\"sentinel dashboard\\\"\", \"http.title:\\\"sentinel dashboard\\\"\"], \"vendor\": \"hashicorp\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>sentinel dashboard.*?</title>\"]}]}], \"_source_file\": \"hashicorp\\\\sentinel.yaml\"}, {\"id\": \"hd-network_real-time_monitoring_system\", \"info\": {\"name\": \"hd-network_real-time_monitoring_system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hd-network_real-time_monitoring_system\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"hd-network real-time monitoring system v2.0\\\"\"], \"google-query\": [\"intitle:\\\"hd-network real-time monitoring system v2.0\\\"\"], \"product\": \"hd-network_real-time_monitoring_system\", \"shodan-query\": [\"http.title:\\\"hd-network real-time monitoring system v2.0\\\"\"], \"vendor\": \"hd-network_real-time_monitoring_system_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>hd-network real-time monitoring system v2.0.*?</title>\"]}]}], \"_source_file\": \"hd-network_real-time_monitoring_system_project\\\\hd-network_real-time_monitoring_system.yaml\"}, {\"id\": \"control_panel\", \"info\": {\"name\": \"control_panel\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,control_panel\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"hestia control panel\\\"\", \"icon_hash=-476299640\"], \"google-query\": [\"intitle:\\\"hestia control panel\\\"\"], \"product\": \"control_panel\", \"shodan-query\": [\"http.favicon.hash:-476299640\", \"http.title:\\\"hestia control panel\\\"\"], \"vendor\": \"hestiacp\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-476299640\"]}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>hestia control panel.*?</title>\"]}]}], \"_source_file\": \"hestiacp\\\\control_panel.yaml\"}, {\"id\": \"ds-2cd2026g2-iu-sl_firmware\", \"info\": {\"name\": \"ds-2cd2026g2-iu-sl_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ds-2cd2026g2-iu-sl_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=999357577\"], \"product\": \"ds-2cd2026g2-iu-sl_firmware\", \"shodan-query\": [\"http.favicon.hash:999357577\"], \"vendor\": \"hikvision\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"999357577\"]}]}], \"_source_file\": \"hikvision\\\\ds-2cd2026g2-iu-sl_firmware.yaml\"}, {\"id\": \"hikvision\", \"info\": {\"name\": \"hikvision\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hikvision\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"-808437027\\\",app=\\\"hikvision-综合安防管理平台\\\",title=\\\"综合安防管理平台\\\"\"], \"product\": \"hikvision\", \"vendor\": \"hikvision\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-808437027\"]}]}], \"_source_file\": \"hikvision\\\\hikvision.yaml\"}, {\"id\": \"intercom_broadcast_system\", \"info\": {\"name\": \"intercom_broadcast_system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,intercom_broadcast_system\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"-1830859634\\\"\"], \"product\": \"intercom_broadcast_system\", \"shodan-query\": [\"http.favicon.hash:\\\"-1830859634\\\"\"], \"vendor\": \"hikvision\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1830859634\"]}]}], \"_source_file\": \"hikvision\\\\intercom_broadcast_system.yaml\"}, {\"id\": \"vantara_pentaho\", \"info\": {\"name\": \"vantara_pentaho\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vantara_pentaho\", \"severity\": \"info\", \"metadata\": {\"product\": \"vantara_pentaho\", \"shodan-query\": [\"pentaho\"], \"vendor\": \"hitachi\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"pentaho\"], \"case-insensitive\": true}]}], \"_source_file\": \"hitachi\\\\vantara_pentaho.yaml\"}, {\"id\": \"vantara_pentaho_business_analytics_server\", \"info\": {\"name\": \"vantara_pentaho_business_analytics_server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vantara_pentaho_business_analytics_server\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=1749354953\"], \"product\": \"vantara_pentaho_business_analytics_server\", \"shodan-query\": [\"http.favicon.hash:1749354953\"], \"vendor\": \"hitachi\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1749354953\"]}]}], \"_source_file\": \"hitachi\\\\vantara_pentaho_business_analytics_server.yaml\"}, {\"id\": \"home-assistant\", \"info\": {\"name\": \"home-assistant\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,home-assistant\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"home assistant\\\"\"], \"google-query\": [\"intitle:\\\"home assistant\\\"\"], \"product\": \"home-assistant\", \"shodan-query\": [\"title:\\\"home assistant\\\"\", \"http.title:\\\"home assistant\\\"\", \"cpe:\\\"cpe:2.3:a:home-assistant:home-assistant\\\"\"], \"vendor\": \"home-assistant\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>home assistant.*?</title>\"]}]}], \"_source_file\": \"home-assistant\\\\home-assistant.yaml\"}, {\"id\": \"jan\", \"info\": {\"name\": \"jan\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jan\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"-165268926\\\"\"], \"product\": \"jan\", \"vendor\": \"homebrew\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-165268926\"]}]}], \"_source_file\": \"homebrew\\\\jan.yaml\"}, {\"id\": \"pm43_firmware\", \"info\": {\"name\": \"pm43_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pm43_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/main/login.lua?pageid=\\\"\"], \"product\": \"pm43_firmware\", \"shodan-query\": [\"http.html:\\\"/main/login.lua?pageid=\\\"\"], \"vendor\": \"honeywell\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/main/login.lua?pageid=\"], \"case-insensitive\": true}]}], \"_source_file\": \"honeywell\\\\pm43_firmware.yaml\"}, {\"id\": \"horde\", \"info\": {\"name\": \"horde\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,horde\", \"severity\": \"info\", \"metadata\": {\"product\": \"horde\", \"vendor\": \"horde\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"_sethordetitle\", \"imp: copyright 2001-2009 the horde project\"], \"case-insensitive\": true}]}], \"_source_file\": \"horde\\\\horde.yaml\"}, {\"id\": \"hospital_management_system\", \"info\": {\"name\": \"hospital_management_system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hospital_management_system\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"hospital management system\\\"\"], \"product\": \"hospital_management_system\", \"shodan-query\": [\"http.html:\\\"hospital management system\\\"\"], \"vendor\": \"hospital_management_system_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"hospital management system\"], \"case-insensitive\": true}]}], \"_source_file\": \"hospital_management_system_project\\\\hospital_management_system.yaml\"}, {\"id\": \"hp\", \"info\": {\"name\": \"hp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hp\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"hp 1820-8g switch j9979a\"], \"product\": \"hp\", \"vendor\": \"hp\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"hp 1820-8g switch j9979a\"], \"case-insensitive\": true}]}], \"_source_file\": \"hp\\\\hp.yaml\"}, {\"id\": \"e-hr\", \"info\": {\"name\": \"e-hr\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,e-hr\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"人力资源信息管理系统\\\"\"], \"product\": \"e-hr\", \"vendor\": \"hrp2000\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>人力资源信息管理系统.*?</title>\"]}]}], \"_source_file\": \"hrp2000\\\\e-hr.yaml\"}, {\"id\": \"hg255s\", \"info\": {\"name\": \"hg255s\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hg255s\", \"severity\": \"info\", \"metadata\": {\"product\": \"hg255s\", \"shodan-query\": [\"http.html:\\\"hg532e\\\"\"], \"vendor\": \"huawei\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"hg532e\"], \"case-insensitive\": true}]}], \"_source_file\": \"huawei\\\\hg255s.yaml\"}, {\"id\": \"hg532e\", \"info\": {\"name\": \"hg532e\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hg532e\", \"severity\": \"info\", \"metadata\": {\"product\": \"hg532e\", \"shodan-query\": [\"http.html:\\\"hg532e\\\"\"], \"vendor\": \"huawei\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"hg532e\"], \"case-insensitive\": true}]}], \"_source_file\": \"huawei\\\\hg532e.yaml\"}, {\"id\": \"usg9500\", \"info\": {\"name\": \"usg9500\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,usg9500\", \"severity\": \"info\", \"metadata\": {\"product\": \"usg9500\", \"shodan-query\": [\"title:\\\"huawei\\\"\"], \"vendor\": \"huawei\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>huawei.*?</title>\"]}]}], \"_source_file\": \"huawei\\\\usg9500.yaml\"}, {\"id\": \"label_studio\", \"info\": {\"name\": \"label_studio\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,label_studio\", \"severity\": \"info\", \"metadata\": {\"product\": \"label_studio\", \"shodan-query\": [\"http.favicon.hash:-1649949475\"], \"vendor\": \"humansignal\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1649949475\"]}]}], \"_source_file\": \"humansignal\\\\label_studio.yaml\"}, {\"id\": \"hwl-2511-ss_firmware\", \"info\": {\"name\": \"hwl-2511-ss_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hwl-2511-ss_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"index\\\" && header=\\\"lighttpd/1.4.30\\\"\"], \"product\": \"hwl-2511-ss_firmware\", \"vendor\": \"hytec\", \"verified\": true, \"zoomeye-query\": [\"app:\\\"hytec inter hwl-2511-ss\\\"\"]}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*> header=\\\"lighttpd/1.4.30.*?</title>\", \"(?mi)<title[^>]*>index\\\" .*?</title>\"]}]}], \"_source_file\": \"hytec\\\\hwl-2511-ss_firmware.yaml\"}, {\"id\": \"data_risk_manager\", \"info\": {\"name\": \"data_risk_manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,data_risk_manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"data_risk_manager\", \"shodan-query\": [\"title:\\\"ibm data risk manager\\\"\"], \"vendor\": \"ibm\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>ibm data risk manager.*?</title>\"]}]}], \"_source_file\": \"ibm\\\\data_risk_manager.yaml\"}, {\"id\": \"ibm\", \"info\": {\"name\": \"ibm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ibm\", \"severity\": \"info\", \"metadata\": {\"product\": \"ibm\", \"shodan-query\": [\"title:\\\"ibm security verify access\\\"\"], \"vendor\": \"ibm\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>ibm security verify access.*?</title>\"]}]}], \"_source_file\": \"ibm\\\\ibm.yaml\"}, {\"id\": \"integrated_management_module\", \"info\": {\"name\": \"integrated_management_module\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,integrated_management_module\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"integrated management module\"], \"product\": \"integrated_management_module\", \"shodan-query\": [\"html:\\\"ibmdojo\\\"\"], \"vendor\": \"ibm\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ibmdojo\", \"integrated management module\"], \"case-insensitive\": true}]}], \"_source_file\": \"ibm\\\\integrated_management_module.yaml\"}, {\"id\": \"maximo_asset_management\", \"info\": {\"name\": \"maximo_asset_management\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,maximo_asset_management\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=-399298961\"], \"product\": \"maximo_asset_management\", \"shodan-query\": [\"http.favicon.hash:-399298961\"], \"vendor\": \"ibm\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-399298961\"]}]}], \"_source_file\": \"ibm\\\\maximo_asset_management.yaml\"}, {\"id\": \"operational_decision_manager\", \"info\": {\"name\": \"operational_decision_manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,operational_decision_manager\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"ibm odm\\\"\", \"body=\\\"ibm odm\\\"\"], \"product\": \"operational_decision_manager\", \"shodan-query\": [\"html:\\\"ibm odm\\\"\", \"http.html:\\\"ibm odm\\\"\"], \"vendor\": \"ibm\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ibm odm\"], \"case-insensitive\": true}]}], \"_source_file\": \"ibm\\\\operational_decision_manager.yaml\"}, {\"id\": \"planning_analytics\", \"info\": {\"name\": \"planning_analytics\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,planning_analytics\", \"severity\": \"info\", \"metadata\": {\"product\": \"planning_analytics\", \"shodan-query\": [\"title:\\\"arc for tm1\\\"\"], \"vendor\": \"ibm\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>arc for tm1.*?</title>\"]}]}], \"_source_file\": \"ibm\\\\planning_analytics.yaml\"}, {\"id\": \"tivoli_common_reporting\", \"info\": {\"name\": \"tivoli_common_reporting\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tivoli_common_reporting\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"ibm websphere portal\\\"\"], \"product\": \"tivoli_common_reporting\", \"shodan-query\": [\"http.html:\\\"ibm websphere portal\\\"\"], \"vendor\": \"ibm\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ibm websphere portal\"], \"case-insensitive\": true}]}], \"_source_file\": \"ibm\\\\tivoli_common_reporting.yaml\"}, {\"id\": \"websphere\", \"info\": {\"name\": \"websphere\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,websphere\", \"severity\": \"info\", \"metadata\": {\"product\": \"websphere\", \"shodan-query\": [\"http.html:\\\"ibm websphere portal\\\"\"], \"vendor\": \"ibm\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ibm websphere portal\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"com.ibm.websphere.ihs.doc\", \"content=\\\"websphere application server\", \"websphere\"], \"case-insensitive\": true}]}], \"_source_file\": \"ibm\\\\websphere.yaml\"}, {\"id\": \"secure_web_gateway\", \"info\": {\"name\": \"secure_web_gateway\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,secure_web_gateway\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"iboss-font.css\\\"\"], \"google-query\": [\"intext:\\\"iboss-font.css\\\"\"], \"product\": \"secure_web_gateway\", \"shodan-query\": [\"html:\\\"iboss-font.css\\\"\"], \"vendor\": \"iboss\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"iboss-font.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"iboss\\\\secure_web_gateway.yaml\"}, {\"id\": \"deep_castle_g2\", \"info\": {\"name\": \"deep_castle_g2\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,deep_castle_g2\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"icewarp\\\"\"], \"google-query\": [\"intitle:\\\"icewarp\\\"\"], \"product\": \"deep_castle_g2\", \"shodan-query\": [\"title:\\\"icewarp\\\"\", \"http.title:\\\"icewarp\\\"\"], \"vendor\": \"icewarp\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>icewarp.*?</title>\"]}]}], \"_source_file\": \"icewarp\\\\deep_castle_g2.yaml\"}, {\"id\": \"icewarp\", \"info\": {\"name\": \"icewarp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,icewarp\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"icewarp\\\"\", \"icon_hash=2144485375\"], \"google-query\": [\"intitle:\\\"icewarp\\\"\"], \"product\": \"icewarp\", \"shodan-query\": [\"title:\\\"icewarp\\\"\", \"http.favicon.hash:2144485375\", \"http.title:\\\"icewarp\\\"\"], \"vendor\": \"icewarp\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"2144485375\"]}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>icewarp.*?</title>\"]}]}], \"_source_file\": \"icewarp\\\\icewarp.yaml\"}, {\"id\": \"icewarp_server\", \"info\": {\"name\": \"icewarp_server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,icewarp_server\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"icewarp\\\"\"], \"google-query\": [\"intitle:\\\"icewarp\\\"\"], \"product\": \"icewarp_server\", \"shodan-query\": [\"title:\\\"icewarp\\\"\", \"http.title:\\\"icewarp\\\"\"], \"vendor\": \"icewarp\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>icewarp.*?</title>\"]}]}], \"_source_file\": \"icewarp\\\\icewarp_server.yaml\"}, {\"id\": \"mail_server\", \"info\": {\"name\": \"mail_server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mail_server\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"icewarp server administration\\\"\", \"title=\\\"icewarp\\\"\"], \"google-query\": [\"intitle:\\\"icewarp server administration\\\"\", \"intitle:\\\"icewarp\\\"\", \"powered by icewarp 10.4.4\"], \"product\": \"mail_server\", \"shodan-query\": [\"http.title:\\\"icewarp server administration\\\"\", \"http.title:\\\"icewarp\\\"\", \"cpe:\\\"cpe:2.3:a:icewarp:mail_server\\\"\", \"title:\\\"icewarp\\\"\"], \"vendor\": \"icewarp\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>icewarp server administration.*?</title>\", \"(?mi)<title[^>]*>icewarp.*?</title>\"]}]}], \"_source_file\": \"icewarp\\\\mail_server.yaml\"}, {\"id\": \"server\", \"info\": {\"name\": \"server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,server\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"gotify\\\"\"], \"google-query\": [\"intitle:\\\"gotify\\\"\"], \"product\": \"server\", \"shodan-query\": [\"title:\\\"icewarp\\\"\", \"http.title:\\\"gotify\\\"\"], \"vendor\": \"icewarp\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>gotify.*?</title>\", \"(?mi)<title[^>]*>icewarp.*?</title>\"]}]}], \"_source_file\": \"icewarp\\\\server.yaml\"}, {\"id\": \"webclient\", \"info\": {\"name\": \"webclient\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,webclient\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"icewarp\\\"\"], \"google-query\": [\"intitle:\\\"icewarp\\\"\"], \"product\": \"webclient\", \"shodan-query\": [\"title:\\\"icewarp\\\"\", \"http.title:\\\"icewarp\\\"\"], \"vendor\": \"icewarp\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>icewarp.*?</title>\"]}]}], \"_source_file\": \"icewarp\\\\webclient.yaml\"}, {\"id\": \"casaos\", \"info\": {\"name\": \"casaos\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,casaos\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/casaos-ui/public/index.html\\\"\"], \"product\": \"casaos\", \"shodan-query\": [\"http.html:\\\"/casaos-ui/public/index.html\\\"\"], \"vendor\": \"icewhale\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/casaos-ui/public/index.html\"], \"case-insensitive\": true}]}], \"_source_file\": \"icewhale\\\\casaos.yaml\"}, {\"id\": \"icinga\", \"info\": {\"name\": \"icinga\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,icinga\", \"severity\": \"info\", \"metadata\": {\"product\": \"icinga\", \"vendor\": \"icinga\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"466b3dcce4a3c13f44dd0dc824b1e328\"]}, {\"type\": \"word\", \"words\": [\"<title>icinga web 2 login</title>\", \"mask-icon\\\" href=\\\"/icingaweb2/img/website-icon.svg\\\" color=\"], \"case-insensitive\": true}]}], \"_source_file\": \"icinga\\\\icinga.yaml\"}, {\"id\": \"icinga_web_2\", \"info\": {\"name\": \"icinga_web_2\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,icinga_web_2\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"icinga web 2 login\\\"\", \"title=\\\"icinga\\\"\"], \"google-query\": [\"intitle:\\\"icinga\\\"\", \"intitle:\\\"icinga web 2 login\\\"\"], \"product\": \"icinga_web_2\", \"shodan-query\": [\"title:\\\"icinga\\\"\", \"http.title:\\\"icinga\\\"\", \"http.title:\\\"icinga web 2 login\\\"\"], \"vendor\": \"icinga\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>icinga web 2 login.*?</title>\", \"(?mi)<title[^>]*>icinga.*?</title>\"]}]}], \"_source_file\": \"icinga\\\\icinga_web_2.yaml\"}, {\"id\": \"idccms\", \"info\": {\"name\": \"idccms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,idccms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"idccms\\\"\"], \"product\": \"idccms\", \"shodan-query\": [\"title:\\\"idccms\\\"\"], \"vendor\": \"idccms\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>idccms.*?</title>\"]}]}], \"_source_file\": \"idccms\\\\idccms.yaml\"}, {\"id\": \"sigma_wide\", \"info\": {\"name\": \"sigma_wide\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sigma_wide\", \"severity\": \"info\", \"metadata\": {\"product\": \"sigma_wide\", \"shodan-query\": [\"title:\\\"idemia\\\"\"], \"vendor\": \"idemia\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>idemia.*?</title>\"]}]}], \"_source_file\": \"idemia\\\\sigma_wide.yaml\"}, {\"id\": \"openfire\", \"info\": {\"name\": \"openfire\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,openfire\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"openfire\\\"\", \"title=\\\"openfire admin console\\\"\"], \"google-query\": [\"intitle:\\\"openfire\\\"\", \"intitle:\\\"openfire admin console\\\"\"], \"product\": \"openfire\", \"shodan-query\": [\"http.title:\\\"openfire admin console\\\"\", \"http.title:\\\"openfire\\\"\", \"title:\\\"openfire\\\"\"], \"vendor\": \"igniterealtime\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>openfire admin console.*?</title>\", \"(?mi)<title[^>]*>openfire.*?</title>\"]}]}], \"_source_file\": \"igniterealtime\\\\openfire.yaml\"}, {\"id\": \"ilias\", \"info\": {\"name\": \"ilias\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ilias\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"ilias\\\"\"], \"product\": \"ilias\", \"shodan-query\": [\"http.html:\\\"ilias\\\"\"], \"vendor\": \"ilias\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ilias\"], \"case-insensitive\": true}]}], \"_source_file\": \"ilias\\\\ilias.yaml\"}, {\"id\": \"impresscms\", \"info\": {\"name\": \"impresscms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,impresscms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"impresscms\\\"\"], \"product\": \"impresscms\", \"shodan-query\": [\"http.html:\\\"impresscms\\\"\", \"cpe:\\\"cpe:2.3:a:impresscms:impresscms\\\"\"], \"vendor\": \"impresscms\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"impresscms\"], \"case-insensitive\": true}]}], \"_source_file\": \"impresscms\\\\impresscms.yaml\"}, {\"id\": \"influxdata-influxdb\", \"info\": {\"name\": \"influxdata-influxdb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,influxdata-influxdb\", \"severity\": \"info\", \"metadata\": {\"product\": \"influxdb\", \"vendor\": \"influxdata\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"influxdb-version\\\"\", \"influxdb\"], \"case-insensitive\": true}]}], \"_source_file\": \"influxdata\\\\influxdb.yaml\"}, {\"id\": \"netmri\", \"info\": {\"name\": \"netmri\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netmri\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"infoblox netmri\"], \"product\": \"netmri\", \"vendor\": \"infoblox\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"infoblox netmri\"], \"case-insensitive\": true}]}], \"_source_file\": \"infoblox\\\\netmri.yaml\"}, {\"id\": \"clusterengine\", \"info\": {\"name\": \"clusterengine\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,clusterengine\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"tscev4.0\\\"\"], \"product\": \"clusterengine\", \"vendor\": \"inspur\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>tscev4.0.*?</title>\"]}]}], \"_source_file\": \"inspur\\\\clusterengine.yaml\"}, {\"id\": \"active_management_technology_firmware\", \"info\": {\"name\": \"active_management_technology_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,active_management_technology_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"active management technology\\\"\"], \"google-query\": [\"intitle:\\\"active management technology\\\"\"], \"product\": \"active_management_technology_firmware\", \"shodan-query\": [\"title:\\\"active management technology\\\"\", \"http.title:\\\"active management technology\\\"\"], \"vendor\": \"intel\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>active management technology.*?</title>\"]}]}], \"_source_file\": \"intel\\\\active_management_technology_firmware.yaml\"}, {\"id\": \"nplug\", \"info\": {\"name\": \"nplug\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nplug\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"nplug\\\"\"], \"product\": \"nplug\", \"shodan-query\": [\"html:\\\"nplug\\\"\"], \"vendor\": \"intelbras\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"nplug\"], \"case-insensitive\": true}]}], \"_source_file\": \"intelbras\\\\nplug.yaml\"}, {\"id\": \"sg_2404_mr_firmware\", \"info\": {\"name\": \"sg_2404_mr_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sg_2404_mr_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"intelbras\\\"\"], \"google-query\": [\"intitle:\\\"intelbras\\\"\"], \"product\": \"sg_2404_mr_firmware\", \"shodan-query\": [\"title:\\\"intelbras\\\"\", \"http.title:\\\"intelbras\\\"\"], \"vendor\": \"intelbras\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>intelbras.*?</title>\"]}]}], \"_source_file\": \"intelbras\\\\sg_2404_mr_firmware.yaml\"}, {\"id\": \"tip200\", \"info\": {\"name\": \"tip200\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tip200\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/cgi-bin/cgiserver.exx\\\"\"], \"product\": \"tip200\", \"shodan-query\": [\"html:\\\"/cgi-bin/cgiserver.exx\\\"\"], \"vendor\": \"intelbras\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/cgi-bin/cgiserver.exx\"], \"case-insensitive\": true}]}], \"_source_file\": \"intelbras\\\\tip200.yaml\"}, {\"id\": \"tip300\", \"info\": {\"name\": \"tip300\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tip300\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"intelbras\\\"\"], \"product\": \"tip300\", \"shodan-query\": [\"title:\\\"intelbras\\\"\"], \"vendor\": \"intelbras\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>intelbras.*?</title>\"]}]}], \"_source_file\": \"intelbras\\\\tip300.yaml\"}, {\"id\": \"wrn150\", \"info\": {\"name\": \"wrn150\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wrn150\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"wrn150\\\"\"], \"product\": \"wrn150\", \"shodan-query\": [\"html:\\\"wrn150\\\"\"], \"vendor\": \"intelbras\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"wrn150\"], \"case-insensitive\": true}]}], \"_source_file\": \"intelbras\\\\wrn150.yaml\"}, {\"id\": \"aptus_web\", \"info\": {\"name\": \"aptus_web\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,aptus_web\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"intellian aptus web\\\"\"], \"google-query\": [\"intitle:\\\"intellian aptus web\\\"\"], \"product\": \"aptus_web\", \"shodan-query\": [\"http.title:\\\"intellian aptus web\\\"\"], \"vendor\": \"intelliantech\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>intellian aptus web.*?</title>\"]}]}], \"_source_file\": \"intelliantech\\\\aptus_web.yaml\"}, {\"id\": \"ips_community_suite\", \"info\": {\"name\": \"ips_community_suite\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ips_community_suite\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"invision community\\\"\"], \"product\": \"ips_community_suite\", \"shodan-query\": [\"html:\\\"invision community\\\"\"], \"vendor\": \"invision\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"invision community\"], \"case-insensitive\": true}]}], \"_source_file\": \"invision\\\\ips_community_suite.yaml\"}, {\"id\": \"orchid_core_vms\", \"info\": {\"name\": \"orchid_core_vms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,orchid_core_vms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"orchid core vms\\\"\"], \"google-query\": [\"intitle:\\\"orchid core vms\\\"\"], \"product\": \"orchid_core_vms\", \"shodan-query\": [\"http.title:\\\"orchid core vms\\\"\"], \"vendor\": \"ipconfigure\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>orchid core vms.*?</title>\"]}]}], \"_source_file\": \"ipconfigure\\\\orchid_core_vms.yaml\"}, {\"id\": \"ipeakcms\", \"info\": {\"name\": \"ipeakcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ipeakcms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"ipeak\\\" && body=\\\"3.5\\\"\"], \"product\": \"ipeakcms\", \"vendor\": \"ipeak\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"3.5\", \"ipeak\"], \"case-insensitive\": true}]}], \"_source_file\": \"ipeak\\\\ipeakcms.yaml\"}, {\"id\": \"a2004\", \"info\": {\"name\": \"a2004\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,a2004\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"iptime\\\"\"], \"product\": \"a2004\", \"shodan-query\": [\"http.title:\\\"iptime\\\"\"], \"vendor\": \"iptime\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>iptime.*?</title>\"]}]}], \"_source_file\": \"iptime\\\\a2004.yaml\"}, {\"id\": \"ispconfig\", \"info\": {\"name\": \"ispconfig\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ispconfig\", \"severity\": \"info\", \"metadata\": {\"product\": \"ispconfig\", \"shodan-query\": [\"title:\\\"ispconfig\\\" http.favicon.hash:483383992\", \"http.title:\\\"ispconfig\\\"\"], \"vendor\": \"ispconfig\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>ispconfig\\\" http.favicon.hash:483383992.*?</title>\", \"(?mi)<title[^>]*>ispconfig.*?</title>\"]}, {\"type\": \"word\", \"words\": [\"powered by <a href=\\\"http://www.ispconfig.org\"], \"case-insensitive\": true}]}], \"_source_file\": \"ispconfig\\\\ispconfig.yaml\"}, {\"id\": \"ispy\", \"info\": {\"name\": \"ispy\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ispy\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"ispy is running\\\"\"], \"product\": \"ispy\", \"shodan-query\": [\"http.html:\\\"ispy is running\\\"\"], \"vendor\": \"ispyconnect\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ispy is running\"], \"case-insensitive\": true}]}], \"_source_file\": \"ispyconnect\\\\ispy.yaml\"}, {\"id\": \"issabel-pbx\", \"info\": {\"name\": \"issabel-pbx\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,issabel-pbx\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"issabel\\\"\"], \"product\": \"issabel-pbx\", \"shodan-query\": [\"title:\\\"issabel\\\"\"], \"vendor\": \"issabel\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>issabel.*?</title>\"]}]}], \"_source_file\": \"issabel\\\\issabel-pbx.yaml\"}, {\"id\": \"pbx\", \"info\": {\"name\": \"pbx\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pbx\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"issabel\\\"\"], \"product\": \"pbx\", \"vendor\": \"issabel\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>issabel.*?</title>\"]}]}], \"_source_file\": \"issabel\\\\pbx.yaml\"}, {\"id\": \"connect_secure\", \"info\": {\"name\": \"connect_secure\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,connect_secure\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"welcome.cgi?p=logo\\\"\", \"title=\\\"ivanti connect secure\\\"\"], \"google-query\": [\"intitle:\\\"ivanti connect secure\\\"\"], \"product\": \"connect_secure\", \"shodan-query\": [\"http.html:\\\"welcome.cgi?p=logo\\\"\", \"http.title:\\\"ivanti connect secure\\\"\", \"html:\\\"welcome.cgi?p=logo\\\"\"], \"vendor\": \"ivanti\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"welcome.cgi?p=logo\"], \"case-insensitive\": true}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>ivanti connect secure.*?</title>\"]}]}], \"_source_file\": \"ivanti\\\\connect_secure.yaml\"}, {\"id\": \"endpoint_manager_cloud_services_appliance\", \"info\": {\"name\": \"endpoint_manager_cloud_services_appliance\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,endpoint_manager_cloud_services_appliance\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"landesk(r) cloud services appliance\\\"\"], \"google-query\": [\"intitle:\\\"landesk(r) cloud services appliance\\\"\"], \"product\": \"endpoint_manager_cloud_services_appliance\", \"shodan-query\": [\"title:\\\"landesk(r) cloud services appliance\\\"\", \"http.title:\\\"landesk(r) cloud services appliance\\\"\"], \"vendor\": \"ivanti\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>landesk(r) cloud services appliance.*?</title>\"]}]}], \"_source_file\": \"ivanti\\\\endpoint_manager_cloud_services_appliance.yaml\"}, {\"id\": \"endpoint_manager_mobile\", \"info\": {\"name\": \"endpoint_manager_mobile\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,endpoint_manager_mobile\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"362091310\\\"\"], \"product\": \"endpoint_manager_mobile\", \"shodan-query\": [\"http.favicon.hash:362091310\", \"http.favicon.hash:\\\"362091310\\\"\"], \"vendor\": \"ivanti\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"362091310\"]}]}], \"_source_file\": \"ivanti\\\\endpoint_manager_mobile.yaml\"}, {\"id\": \"mobileiron\", \"info\": {\"name\": \"mobileiron\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mobileiron\", \"severity\": \"info\", \"metadata\": {\"product\": \"mobileiron\", \"shodan-query\": [\"http.html:\\\"mobileiron\\\"\"], \"vendor\": \"ivanti\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"mobileiron\"], \"case-insensitive\": true}]}], \"_source_file\": \"ivanti\\\\mobileiron.yaml\"}, {\"id\": \"mobileiron_sentry\", \"info\": {\"name\": \"mobileiron_sentry\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mobileiron_sentry\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"note: requires a local sentry administrative user\\\"\"], \"product\": \"mobileiron_sentry\", \"shodan-query\": [\"html:\\\"note: requires a local sentry administrative user\\\"\", \"http.html:\\\"note: requires a local sentry administrative user\\\"\"], \"vendor\": \"ivanti\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"note: requires a local sentry administrative user\"], \"case-insensitive\": true}]}], \"_source_file\": \"ivanti\\\\mobileiron_sentry.yaml\"}, {\"id\": \"virtual-traffic-manager\", \"info\": {\"name\": \"virtual traffic manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,virtual traffic manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"virtual traffic manager\", \"shodan-query\": [\"http.favicon.hash:1862800928\", \"html:\\\"apps/zxtm/login.cgi\\\"\"], \"vendor\": \"ivanti\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"apps/zxtm/login.cgi\"], \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"1862800928\"]}]}], \"_source_file\": \"ivanti\\\\virtual traffic manager.yaml\"}, {\"id\": \"self_service\", \"info\": {\"name\": \"self_service\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,self_service\", \"severity\": \"info\", \"metadata\": {\"product\": \"self_service\", \"shodan-query\": [\"http.html:\\\"jamf\\\"\"], \"vendor\": \"jamf\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"jamf\"], \"case-insensitive\": true}]}], \"_source_file\": \"jamf\\\\self_service.yaml\"}, {\"id\": \"jeecg-boot\", \"info\": {\"name\": \"jeecg-boot\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jeecg-boot\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=1380908726\"], \"product\": \"jeecg-boot\", \"shodan-query\": [\"http.favicon.hash:1380908726\"], \"vendor\": \"jeecg\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1380908726\"]}]}], \"_source_file\": \"jeecg\\\\jeecg-boot.yaml\"}, {\"id\": \"jeecg\", \"info\": {\"name\": \"jeecg\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jeecg\", \"severity\": \"info\", \"metadata\": {\"product\": \"jeecg\", \"vendor\": \"jeecg\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"plug-in/ace/\"], \"case-insensitive\": true}]}], \"_source_file\": \"jeecg\\\\jeecg.yaml\"}, {\"id\": \"jeecg_boot\", \"info\": {\"name\": \"jeecg_boot\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jeecg_boot\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=1380908726\"], \"product\": \"jeecg_boot\", \"shodan-query\": [\"http.favicon.hash:1380908726\"], \"vendor\": \"jeecg\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1380908726\"]}]}], \"_source_file\": \"jeecg\\\\jeecg_boot.yaml\"}, {\"id\": \"jeedom\", \"info\": {\"name\": \"jeedom\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jeedom\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"jeedom\\\"\"], \"google-query\": [\"intitle:\\\"jeedom\\\"\"], \"product\": \"jeedom\", \"shodan-query\": [\"http.title:\\\"jeedom\\\"\", \"title:\\\"jeedom\\\"\"], \"vendor\": \"jeedom\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>jeedom.*?</title>\"]}]}], \"_source_file\": \"jeedom\\\\jeedom.yaml\"}, {\"id\": \"jeesns\", \"info\": {\"name\": \"jeesns\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jeesns\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"jeesns\\\"\"], \"product\": \"jeesns\", \"vendor\": \"jeesns\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>jeesns.*?</title>\"]}]}], \"_source_file\": \"jeesns\\\\jeesns.yaml\"}, {\"id\": \"jellyfin\", \"info\": {\"name\": \"jellyfin\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jellyfin\", \"severity\": \"info\", \"metadata\": {\"product\": \"jellyfin\", \"vendor\": \"jellyfin\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>jellyfin</title>\", \"content=\\\"jellyfin\\\"\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"jellyfin\\\\jellyfin.yaml\"}, {\"id\": \"git\", \"info\": {\"name\": \"git\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,git\", \"severity\": \"info\", \"metadata\": {\"product\": \"git\", \"shodan-query\": [\"x-jenkins\"], \"vendor\": \"jenkins\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"x-jenkins\"], \"case-insensitive\": true}]}], \"_source_file\": \"jenkins\\\\git.yaml\"}, {\"id\": \"gitlab_hook\", \"info\": {\"name\": \"gitlab_hook\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gitlab_hook\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"gitlab\\\"\"], \"google-query\": [\"intitle:\\\"gitlab\\\"\"], \"product\": \"gitlab_hook\", \"shodan-query\": [\"http.title:\\\"gitlab\\\"\"], \"vendor\": \"jenkins\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>gitlab.*?</title>\"]}]}], \"_source_file\": \"jenkins\\\\gitlab_hook.yaml\"}, {\"id\": \"jenkins\", \"info\": {\"name\": \"jenkins\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jenkins\", \"severity\": \"info\", \"metadata\": {\"product\": \"jenkins\", \"vendor\": \"jenkins\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"x-jenkins-session:\", \"x-jenkins:\"], \"part\": \"header\", \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"23e8c7bd78e8cd826c5a6073b15068b1\"]}, {\"type\": \"word\", \"words\": [\"jenkins-agent-protocols\"], \"case-insensitive\": true}]}], \"_source_file\": \"jenkins\\\\jenkins.yaml\"}, {\"id\": \"teamcity\", \"info\": {\"name\": \"teamcity\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,teamcity\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=teamcity\"], \"google-query\": [\"intitle:teamcity\"], \"product\": \"teamcity\", \"shodan-query\": [\"http.title:teamcity\", \"http.component:\\\"teamcity\\\"\", \"title:teamcity\"], \"vendor\": \"jetbrains\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>teamcity.*?</title>\"]}]}], \"_source_file\": \"jetbrains\\\\teamcity.yaml\"}, {\"id\": \"jfinalcms\", \"info\": {\"name\": \"jfinalcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jfinalcms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"content=\\\\\\\"jrecms\\\"\"], \"product\": \"jfinalcms\", \"vendor\": \"jfinalcms_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=jrecms\"], \"case-insensitive\": true}]}], \"_source_file\": \"jfinalcms_project\\\\jfinalcms.yaml\"}, {\"id\": \"jfrog\", \"info\": {\"name\": \"jfrog\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jfrog\", \"severity\": \"info\", \"metadata\": {\"product\": \"jfrog\", \"vendor\": \"jfrog\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<meta http-equiv=\\\"refresh\\\" content=\\\"0;url=/artifactory\\\">\", \"src=/ui/img/jfrog\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"location: /artifactory/\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"jfrog\\\\jfrog.yaml\"}, {\"id\": \"jsherp\", \"info\": {\"name\": \"jsherp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jsherp\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"jsherp-boot\"], \"product\": \"jsherp\", \"shodan-query\": [\"http.favicon.hash:-1298131932\"], \"vendor\": \"jishenghua\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"jsherp-boot\"], \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"-1298131932\"]}]}], \"_source_file\": \"jishenghua\\\\jsherp.yaml\"}, {\"id\": \"netalertx\", \"info\": {\"name\": \"netalertx\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netalertx\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"netalert x\"], \"product\": \"netalertx\", \"vendor\": \"jokob-sk\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"netalert x\"], \"case-insensitive\": true}]}], \"_source_file\": \"jokob-sk\\\\netalertx.yaml\"}, {\"id\": \"joomla!\", \"info\": {\"name\": \"joomla!\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,joomla!\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"joomla! - open source content management\\\"\"], \"product\": \"joomla!\", \"shodan-query\": [\"http.html:\\\"joomla! - open source content management\\\"\", \"http.component:\\\"joomla\\\"\", \"cpe:\\\"cpe:2.3:a:joomla:joomla\\\\!\\\"\", \"html:\\\"joomla! - open source content management\\\"\"], \"vendor\": \"joomla\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"joomla! - open source content management\"], \"case-insensitive\": true}]}], \"_source_file\": \"joomla\\\\joomla!.yaml\"}, {\"id\": \"joomla\", \"info\": {\"name\": \"joomla\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,joomla\", \"severity\": \"info\", \"metadata\": {\"product\": \"joomla\", \"vendor\": \"joomla\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/media/system/js/core.js\", \"/media/system/js/mootools-core.js\", \"<meta name=\\\"keywords\\\" content=\\\"joomla, joomla\\\" />\", \"content=\\\"joomla\"], \"case-insensitive\": true}]}], \"_source_file\": \"joomla\\\\joomla.yaml\"}, {\"id\": \"jux_real_estate\", \"info\": {\"name\": \"jux_real_estate\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jux_real_estate\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"joomlaux\\\"\"], \"product\": \"jux_real_estate\", \"vendor\": \"joomlaux\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"joomlaux\"], \"case-insensitive\": true}]}], \"_source_file\": \"joomlaux\\\\jux_real_estate.yaml\"}, {\"id\": \"joplin\", \"info\": {\"name\": \"joplin\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,joplin\", \"severity\": \"info\", \"metadata\": {\"product\": \"joplin\", \"shodan-query\": [\"title:\\\"joplin server\\\"\"], \"vendor\": \"joplin_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>joplin server.*?</title>\"]}]}], \"_source_file\": \"joplin_project\\\\joplin.yaml\"}, {\"id\": \"jorani\", \"info\": {\"name\": \"jorani\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jorani\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=-2032163853\"], \"product\": \"jorani\", \"shodan-query\": [\"http.favicon.hash:-2032163853\"], \"vendor\": \"jorani\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-2032163853\"]}]}], \"_source_file\": \"jorani\\\\jorani.yaml\"}, {\"id\": \"jorani\", \"info\": {\"name\": \"jorani\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jorani\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=-2032163853\"], \"product\": \"jorani\", \"shodan-query\": [\"title:\\\"login - jorani\\\"\", \"http.favicon.hash:-2032163853\"], \"vendor\": \"jorani_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-2032163853\"]}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>login - jorani.*?</title>\"]}]}], \"_source_file\": \"jorani_project\\\\jorani.yaml\"}, {\"id\": \"journyx-jtime\", \"info\": {\"name\": \"journyx-jtime\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,journyx-jtime\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"-109972155\\\"\"], \"product\": \"journyx-jtime\", \"vendor\": \"journyx\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-109972155\"]}]}], \"_source_file\": \"journyx\\\\journyx-jtime.yaml\"}, {\"id\": \"journyx\", \"info\": {\"name\": \"journyx\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,journyx\", \"severity\": \"info\", \"metadata\": {\"product\": \"journyx\", \"shodan-query\": [\"html:\\\"journyx\\\"\"], \"vendor\": \"journyx\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"journyx\"], \"case-insensitive\": true}]}], \"_source_file\": \"journyx\\\\journyx.yaml\"}, {\"id\": \"jquery-bbq\", \"info\": {\"name\": \"jquery-bbq\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jquery-bbq\", \"severity\": \"info\", \"metadata\": {\"product\": \"jquery-bbq\", \"shodan-query\": [\"html:\\\"odoo\\\"\"], \"vendor\": \"jquery-bbq_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"odoo\"], \"case-insensitive\": true}]}], \"_source_file\": \"jquery-bbq_project\\\\jquery-bbq.yaml\"}, {\"id\": \"junos\", \"info\": {\"name\": \"junos\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,junos\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"juniper web device manager\\\"\"], \"google-query\": [\"intitle:\\\"juniper web device manager\\\"\"], \"product\": \"junos\", \"shodan-query\": [\"title:\\\"juniper web device manager\\\"\", \"http.title:\\\"juniper web device manager\\\"\"], \"vendor\": \"juniper\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>juniper web device manager.*?</title>\"]}]}], \"_source_file\": \"juniper\\\\junos.yaml\"}, {\"id\": \"srx100\", \"info\": {\"name\": \"srx100\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,srx100\", \"severity\": \"info\", \"metadata\": {\"product\": \"srx100\", \"shodan-query\": [\"title:\\\"juniper web device manager\\\"\"], \"vendor\": \"juniper\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>juniper web device manager.*?</title>\"]}]}], \"_source_file\": \"juniper\\\\srx100.yaml\"}, {\"id\": \"jupyterhub\", \"info\": {\"name\": \"jupyterhub\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jupyterhub\", \"severity\": \"info\", \"metadata\": {\"product\": \"jupyterhub\", \"shodan-query\": [\"http.title:\\\"jupyterhub\\\"\"], \"vendor\": \"jupyter\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>jupyterhub.*?</title>\"]}, {\"type\": \"word\", \"words\": [\"<title>jupyterhub</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"jupyter\\\\jupyterhub.yaml\"}, {\"id\": \"jupyterlab\", \"info\": {\"name\": \"jupyterlab\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jupyterlab\", \"severity\": \"info\", \"metadata\": {\"product\": \"jupyterlab\", \"shodan-query\": [\"http.title:\\\"jupyterlab\\\"\"], \"vendor\": \"jupyter\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>jupyterlab.*?</title>\"]}, {\"type\": \"word\", \"words\": [\"<title>jupyterlab</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"jupyter\\\\jupyterlab.yaml\"}, {\"id\": \"notebook\", \"info\": {\"name\": \"notebook\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,notebook\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"jupyter notebook\\\"\"], \"product\": \"notebook\", \"shodan-query\": [\"title:\\\"jupyter notebook\\\"\"], \"vendor\": \"jupyter\", \"verified\": true, \"zoomeye-query\": [\"title:\\\"jupyter notebook\\\"\"]}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>jupyter notebook.*?</title>\"]}, {\"type\": \"favicon\", \"hash\": [\"97c6417ed01bdc0ae3ef32ae4894fd03\"]}, {\"type\": \"word\", \"words\": [\"<div id=\\\"ipython-main-app\\\" class=\\\"container\\\">\", \"<div id=\\\"ipython_notebook\\\" class=\\\"nav navbar-brand\\\">\", \"<title>jupyter notebook</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"jupyter\\\\notebook.yaml\"}, {\"id\": \"virtual_system_administrator\", \"info\": {\"name\": \"virtual_system_administrator\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,virtual_system_administrator\", \"severity\": \"info\", \"metadata\": {\"product\": \"virtual_system_administrator\", \"shodan-query\": [\"http.favicon.hash:-1445519482\"], \"vendor\": \"kaseya\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1445519482\"]}]}], \"_source_file\": \"kaseya\\\\virtual_system_administrator.yaml\"}, {\"id\": \"vsa\", \"info\": {\"name\": \"vsa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vsa\", \"severity\": \"info\", \"metadata\": {\"product\": \"vsa\", \"shodan-query\": [\"http.favicon.hash:-1445519482\"], \"vendor\": \"kaseya\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1445519482\"]}]}], \"_source_file\": \"kaseya\\\\vsa.yaml\"}, {\"id\": \"kavita\", \"info\": {\"name\": \"kavita\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kavita\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"kavita\\\"\"], \"google-query\": [\"intitle:\\\"kavita\\\"\"], \"product\": \"kavita\", \"shodan-query\": [\"title:\\\"kavita\\\"\", \"http.title:\\\"kavita\\\"\"], \"vendor\": \"kavitareader\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>kavita.*?</title>\"]}]}], \"_source_file\": \"kavitareader\\\\kavita.yaml\"}, {\"id\": \"kkfileview\", \"info\": {\"name\": \"kkfileview\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kkfileview\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"kkfileview\\\"\", \"body=\\\"kkfileview\\\"\"], \"product\": \"kkfileview\", \"shodan-query\": [\"http.html:\\\"kkfileview\\\"\"], \"vendor\": \"keking\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"kkfileview\"], \"case-insensitive\": true}]}], \"_source_file\": \"keking\\\\kkfileview.yaml\"}, {\"id\": \"loadmaster\", \"info\": {\"name\": \"loadmaster\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,loadmaster\", \"severity\": \"info\", \"metadata\": {\"product\": \"loadmaster\", \"shodan-query\": [\"html:\\\"kemp login screen\\\"\"], \"vendor\": \"kemptechnologies\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"kemp login screen\"], \"case-insensitive\": true}]}], \"_source_file\": \"kemptechnologies\\\\loadmaster.yaml\"}, {\"id\": \"kentico_cms\", \"info\": {\"name\": \"kentico_cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kentico_cms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"kentico database setup\\\"\"], \"google-query\": [\"intitle:\\\"kentico database setup\\\"\"], \"product\": \"kentico_cms\", \"shodan-query\": [\"cpe:\\\"cpe:2.3:a:kentico:kentico_cms\\\"\", \"http.title:\\\"kentico database setup\\\"\"], \"vendor\": \"kentico\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>kentico database setup.*?</title>\"]}]}], \"_source_file\": \"kentico\\\\kentico_cms.yaml\"}, {\"id\": \"kingsoft_antivirus\", \"info\": {\"name\": \"kingsoft_antivirus\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kingsoft_antivirus\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"金山vgm防毒墙\\\"\"], \"product\": \"kingsoft_antivirus\", \"vendor\": \"kingsoft\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>金山vgm防毒墙.*?</title>\"]}]}], \"_source_file\": \"kingsoft\\\\kingsoft_antivirus.yaml\"}, {\"id\": \"kiwi_tcms\", \"info\": {\"name\": \"kiwi_tcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kiwi_tcms\", \"severity\": \"info\", \"metadata\": {\"product\": \"kiwi_tcms\", \"shodan-query\": [\"title:\\\"kiwi tcms - login\\\" http.favicon.hash:-1909533337\"], \"vendor\": \"kiwitcms\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>kiwi tcms - login\\\" http.favicon.hash:-1909533337.*?</title>\"]}]}], \"_source_file\": \"kiwitcms\\\\kiwi_tcms.yaml\"}, {\"id\": \"caseaware\", \"info\": {\"name\": \"caseaware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,caseaware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"caseaware\\\"\"], \"product\": \"caseaware\", \"vendor\": \"kmc_information_systems\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>caseaware.*?</title>\"]}]}], \"_source_file\": \"kmc_information_systems\\\\caseaware.yaml\"}, {\"id\": \"koha\", \"info\": {\"name\": \"koha\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,koha\", \"severity\": \"info\", \"metadata\": {\"product\": \"koha\", \"vendor\": \"koha\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"koha \", \"name=\\\"koha_login_context\"], \"case-insensitive\": true}]}], \"_source_file\": \"koha\\\\koha.yaml\"}, {\"id\": \"viaware\", \"info\": {\"name\": \"viaware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,viaware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"1521468900\\\"\"], \"product\": \"viaware\", \"vendor\": \"kramerav\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1521468900\"]}]}], \"_source_file\": \"kramerav\\\\viaware.yaml\"}, {\"id\": \"kubeflow\", \"info\": {\"name\": \"kubeflow\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kubeflow\", \"severity\": \"info\", \"metadata\": {\"product\": \"kubeflow\", \"vendor\": \"kubeflow\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"kubeflow central dashboard\\\"\"], \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"-1203021870\", \"09282f0ea1a467a103d97ddfb8c1217c\"]}]}], \"_source_file\": \"kubeflow\\\\kubeflow.yaml\"}, {\"id\": \"kubernetes\", \"info\": {\"name\": \"kubernetes\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kubernetes\", \"severity\": \"info\", \"metadata\": {\"product\": \"kubernetes\", \"vendor\": \"kubernetes\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<article class=\\\"post kubernetes\", \"<b>kubernetes</b> listening\", \"href=\\\"assets/images/kubernetes-logo.png\", \"value=\\\"kubernetes\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"www-authenticate: realm=\\\"kubernetes\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"kubernetes\\\\kubernetes.yaml\"}, {\"id\": \"kubeview\", \"info\": {\"name\": \"kubeview\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kubeview\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=-379154636\", \"title=\\\"kubeview\\\"\"], \"google-query\": [\"intitle:\\\"kubeview\\\"\"], \"product\": \"kubeview\", \"shodan-query\": [\"http.title:\\\"kubeview\\\"\", \"http.favicon.hash:-379154636\"], \"vendor\": \"kubeview_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-379154636\"]}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>kubeview.*?</title>\"]}]}], \"_source_file\": \"kubeview_project\\\\kubeview.yaml\"}, {\"id\": \"revpi_status\", \"info\": {\"name\": \"revpi_status\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,revpi_status\", \"severity\": \"info\", \"metadata\": {\"product\": \"revpi_status\", \"shodan-query\": [\"title:\\\"revpi\\\"\"], \"vendor\": \"kunbus\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>revpi.*?</title>\"]}]}], \"_source_file\": \"kunbus\\\\revpi_status.yaml\"}, {\"id\": \"d-copia253mf_plus_firmware\", \"info\": {\"name\": \"d-copia253mf_plus_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,d-copia253mf_plus_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=-50306417\"], \"product\": \"d-copia253mf_plus_firmware\", \"shodan-query\": [\"http.favicon.hash:-50306417\"], \"vendor\": \"kyocera\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-50306417\"]}]}], \"_source_file\": \"kyocera\\\\d-copia253mf_plus_firmware.yaml\"}, {\"id\": \"labkey_server\", \"info\": {\"name\": \"labkey_server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,labkey_server\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"sign in: /home\\\"\"], \"google-query\": [\"intitle:\\\"sign in: /home\\\"\"], \"product\": \"labkey_server\", \"shodan-query\": [\"server: labkey\", \"http.title:\\\"sign in: /home\\\"\"], \"vendor\": \"labkey\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>sign in: /home.*?</title>\"]}]}], \"_source_file\": \"labkey\\\\labkey_server.yaml\"}, {\"id\": \"landray_ekp\", \"info\": {\"name\": \"landray_ekp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,landray_ekp\", \"severity\": \"info\", \"metadata\": {\"product\": \"landray_ekp\", \"shodan-query\": [\"http.favicon.hash:831854882\"], \"vendor\": \"landray\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"831854882\"]}]}], \"_source_file\": \"landray\\\\landray_ekp.yaml\"}, {\"id\": \"langchain\", \"info\": {\"name\": \"langchain\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,langchain\", \"severity\": \"info\", \"metadata\": {\"product\": \"langchain\", \"vendor\": \"langchain\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>langchain chat</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"langchain\\\\langchain.yaml\"}, {\"id\": \"dify\", \"info\": {\"name\": \"dify\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dify\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"97378986\\\"\"], \"product\": \"dify\", \"shodan-query\": [\"http.favicon.hash:\\\"97378986\\\"\"], \"vendor\": \"langgenius\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"97378986\"]}, {\"type\": \"word\", \"words\": [\"<title>dify</title>\"], \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"97378986\"]}]}], \"_source_file\": \"langgenius\\\\dify.yaml\"}, {\"id\": \"lansweeper\", \"info\": {\"name\": \"lansweeper\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lansweeper\", \"severity\": \"info\", \"metadata\": {\"product\": \"lansweeper\", \"vendor\": \"lansweeper\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>lansweeper - login</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"lansweeper\\\\lansweeper.yaml\"}, {\"id\": \"securelinx_spider_firmware\", \"info\": {\"name\": \"securelinx_spider_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,securelinx_spider_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"lantronix\\\"\"], \"product\": \"securelinx_spider_firmware\", \"shodan-query\": [\"title:\\\"lantronix\\\"\"], \"vendor\": \"lantronix\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>lantronix.*?</title>\"]}]}], \"_source_file\": \"lantronix\\\\securelinx_spider_firmware.yaml\"}, {\"id\": \"laravel\", \"info\": {\"name\": \"laravel\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,laravel\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"laravel-framework\\\"\"], \"product\": \"laravel\", \"shodan-query\": [\"laravel-framework\", \"cpe:\\\"cpe:2.3:a:laravel:laravel\\\"\"], \"vendor\": \"laravel\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"laravel-framework\"], \"case-insensitive\": true}]}], \"_source_file\": \"laravel\\\\laravel.yaml\"}, {\"id\": \"leantime\", \"info\": {\"name\": \"leantime\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,leantime\", \"severity\": \"info\", \"metadata\": {\"product\": \"leantime\", \"shodan-query\": [\"title:\\\"leantime\\\"\"], \"vendor\": \"leantime\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>leantime.*?</title>\"]}]}], \"_source_file\": \"leantime\\\\leantime.yaml\"}, {\"id\": \"connection_broker\", \"info\": {\"name\": \"connection_broker\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,connection_broker\", \"severity\": \"info\", \"metadata\": {\"product\": \"connection_broker\", \"shodan-query\": [\"http.title:\\\"leostream\\\"\"], \"vendor\": \"leostream\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>leostream.*?</title>\"]}]}], \"_source_file\": \"leostream\\\\connection_broker.yaml\"}, {\"id\": \"letta\", \"info\": {\"name\": \"letta\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,letta\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"letta\\\"\"], \"product\": \"letta\", \"vendor\": \"letta\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>letta.*?</title>\"]}]}], \"_source_file\": \"letta\\\\letta.yaml\"}, {\"id\": \"lexmark\", \"info\": {\"name\": \"lexmark\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lexmark\", \"severity\": \"info\", \"metadata\": {\"product\": \"lexmark\", \"vendor\": \"lexmark\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/status\", \"<title>lexmark\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"lexmark\\\\lexmark.yaml\"}, {\"id\": \"mlflow\", \"info\": {\"name\": \"mlflow\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mlflow\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"mlflow\\\"\", \"app=\\\"mlflow\\\"\"], \"google-query\": [\"intitle:\\\"mlflow\\\"\"], \"product\": \"mlflow\", \"shodan-query\": [\"http.title:\\\"mlflow\\\"\"], \"vendor\": \"lfprojects\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>mlflow.*?</title>\"]}]}], \"_source_file\": \"lfprojects\\\\mlflow.yaml\"}, {\"id\": \"simple_editor\", \"info\": {\"name\": \"simple_editor\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,simple_editor\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"159985907\\\"\"], \"product\": \"simple_editor\", \"vendor\": \"lg\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"159985907\"]}]}], \"_source_file\": \"lg\\\\simple_editor.yaml\"}, {\"id\": \"supersign_cms\", \"info\": {\"name\": \"supersign_cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,supersign_cms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"lg supersign\\\"\"], \"product\": \"supersign_cms\", \"vendor\": \"lg\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>lg supersign.*?</title>\"]}]}], \"_source_file\": \"lg\\\\supersign_cms.yaml\"}, {\"id\": \"liferay\", \"info\": {\"name\": \"liferay\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,liferay\", \"severity\": \"info\", \"metadata\": {\"product\": \"liferay\", \"vendor\": \"liferay\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"liferay.aui\", \"liferay.currenturl\", \"powered by liferay portal\"], \"case-insensitive\": true}]}], \"_source_file\": \"liferay\\\\liferay.yaml\"}, {\"id\": \"liferay_portal\", \"info\": {\"name\": \"liferay_portal\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,liferay_portal\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=129457226\"], \"product\": \"liferay_portal\", \"shodan-query\": [\"http.favicon.hash:129457226\", \"cpe:\\\"cpe:2.3:a:liferay:liferay_portal\\\"\"], \"vendor\": \"liferay\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"129457226\"]}]}], \"_source_file\": \"liferay\\\\liferay_portal.yaml\"}, {\"id\": \"ligeo_basics\", \"info\": {\"name\": \"ligeo_basics\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ligeo_basics\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"ligeo\\\"\"], \"google-query\": [\"intitle:\\\"ligeo\\\"\"], \"product\": \"ligeo_basics\", \"shodan-query\": [\"title:\\\"ligeo\\\"\", \"http.title:\\\"ligeo\\\"\"], \"vendor\": \"ligeo-archives\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>ligeo.*?</title>\"]}]}], \"_source_file\": \"ligeo-archives\\\\ligeo_basics.yaml\"}, {\"id\": \"lightdash\", \"info\": {\"name\": \"lightdash\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lightdash\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"lightdash\\\"\"], \"google-query\": [\"intitle:\\\"lightdash\\\"\"], \"product\": \"lightdash\", \"shodan-query\": [\"title:\\\"lightdash\\\"\", \"http.title:\\\"lightdash\\\"\"], \"vendor\": \"lightdash\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>lightdash.*?</title>\"]}]}], \"_source_file\": \"lightdash\\\\lightdash.yaml\"}, {\"id\": \"lighttpd\", \"info\": {\"name\": \"lighttpd\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lighttpd\", \"severity\": \"info\", \"metadata\": {\"product\": \"lighttpd\", \"vendor\": \"lighttpd\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>powered by lighttpd</title>\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"server: lighttpd\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"lighttpd\\\\lighttpd.yaml\"}, {\"id\": \"likeshop\", \"info\": {\"name\": \"likeshop\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,likeshop\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=874152924\"], \"product\": \"likeshop\", \"shodan-query\": [\"http.favicon.hash:874152924\"], \"vendor\": \"likeshop\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"874152924\"]}]}], \"_source_file\": \"likeshop\\\\likeshop.yaml\"}, {\"id\": \"linux_kernel\", \"info\": {\"name\": \"linux_kernel\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,linux_kernel\", \"severity\": \"info\", \"metadata\": {\"product\": \"linux_kernel\", \"shodan-query\": [\"html:\\\"aspera faspex\\\"\", \"cpe:\\\"cpe:2.3:o:linux:linux_kernel\\\"\"], \"vendor\": \"linux\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"aspera faspex\"], \"case-insensitive\": true}]}], \"_source_file\": \"linux\\\\linux_kernel.yaml\"}, {\"id\": \"dapr_dashboard\", \"info\": {\"name\": \"dapr_dashboard\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dapr_dashboard\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"dapr dashboard\\\"\"], \"google-query\": [\"intitle:\\\"dapr dashboard\\\"\"], \"product\": \"dapr_dashboard\", \"shodan-query\": [\"http.title:\\\"dapr dashboard\\\"\"], \"vendor\": \"linuxfoundation\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>dapr dashboard.*?</title>\"]}]}], \"_source_file\": \"linuxfoundation\\\\dapr_dashboard.yaml\"}, {\"id\": \"harbor\", \"info\": {\"name\": \"harbor\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,harbor\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=657337228\"], \"product\": \"harbor\", \"shodan-query\": [\"http.favicon.hash:657337228\"], \"vendor\": \"linuxfoundation\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"657337228\"]}]}], \"_source_file\": \"linuxfoundation\\\\harbor.yaml\"}, {\"id\": \"livezilla\", \"info\": {\"name\": \"livezilla\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,livezilla\", \"severity\": \"info\", \"metadata\": {\"product\": \"livezilla\", \"vendor\": \"livezilla\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"livezilla\", \"href=\\\"http://www.livezilla.net\\\" target=\\\"_blank\", \"livezilla is a registered trademark of livezilla gmbh</div>\", \"thank you for using livezilla!\"], \"case-insensitive\": true}]}], \"_source_file\": \"livezilla\\\\livezilla.yaml\"}, {\"id\": \"lobe-chat\", \"info\": {\"name\": \"lobe-chat\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lobe-chat\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"1975020705\\\"\"], \"product\": \"lobe-chat\", \"vendor\": \"lobehub\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1975020705\"]}]}], \"_source_file\": \"lobehub\\\\lobe-chat.yaml\"}, {\"id\": \"lgate-902_firmware\", \"info\": {\"name\": \"lgate-902_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lgate-902_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"lgate-902\\\"\"], \"product\": \"lgate-902_firmware\", \"shodan-query\": [\"http.html:\\\"lgate-902\\\"\"], \"vendor\": \"loytec\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"lgate-902\"], \"case-insensitive\": true}]}], \"_source_file\": \"loytec\\\\lgate-902_firmware.yaml\"}, {\"id\": \"listserv\", \"info\": {\"name\": \"listserv\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,listserv\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"listserv\\\"\"], \"product\": \"listserv\", \"shodan-query\": [\"http.html:\\\"listserv\\\"\"], \"vendor\": \"lsoft\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"listserv\"], \"case-insensitive\": true}]}], \"_source_file\": \"lsoft\\\\listserv.yaml\"}, {\"id\": \"lucee\", \"info\": {\"name\": \"lucee\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lucee\", \"severity\": \"info\", \"metadata\": {\"product\": \"lucee\", \"vendor\": \"lucee\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"by the lucee association switzerland</p>\", \"png\\\" alt=\\\"lucee\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"lucee\\\\lucee.yaml\"}, {\"id\": \"lylme_spage\", \"info\": {\"name\": \"lylme_spage\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lylme_spage\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"-282504889\\\"\"], \"product\": \"lylme_spage\", \"vendor\": \"lylme\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-282504889\"]}]}], \"_source_file\": \"lylme\\\\lylme_spage.yaml\"}, {\"id\": \"magnolia_cms\", \"info\": {\"name\": \"magnolia_cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,magnolia_cms\", \"severity\": \"info\", \"metadata\": {\"product\": \"magnolia_cms\", \"shodan-query\": [\"html:\\\"magnolia is a registered trademark\\\"\"], \"vendor\": \"magnolia-cms\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"magnolia is a registered trademark\"], \"case-insensitive\": true}]}], \"_source_file\": \"magnolia-cms\\\\magnolia_cms.yaml\"}, {\"id\": \"magnusbilling\", \"info\": {\"name\": \"magnusbilling\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,magnusbilling\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"magnusbilling\\\"\"], \"product\": \"magnusbilling\", \"shodan-query\": [\"http.html:\\\"magnusbilling\\\"\"], \"vendor\": \"magnussolution\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"magnusbilling\"], \"case-insensitive\": true}]}], \"_source_file\": \"magnussolution\\\\magnusbilling.yaml\"}, {\"id\": \"manageengine-servicedesk\", \"info\": {\"name\": \"manageengine-servicedesk\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,manageengine-servicedesk\", \"severity\": \"info\", \"metadata\": {\"product\": \"servicedesk\", \"vendor\": \"manageengine\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\",'manageengine servicedesk plus',\"], \"case-insensitive\": true}]}], \"_source_file\": \"manageengine\\\\servicedesk.yaml\"}, {\"id\": \"mantisbt\", \"info\": {\"name\": \"mantisbt\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mantisbt\", \"severity\": \"info\", \"metadata\": {\"product\": \"mantisbt\", \"vendor\": \"mantisbt\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"alt=\\\"mantis bugtracker\", \"powered by mantis bugtracker\"], \"case-insensitive\": true}]}], \"_source_file\": \"mantisbt\\\\mantisbt.yaml\"}, {\"id\": \"maxsite_cms\", \"info\": {\"name\": \"maxsite_cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,maxsite_cms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body='content=\\\"maxsite cms'\"], \"product\": \"maxsite_cms\", \"shodan-query\": [\"html:'content=\\\"maxsite cms'\", \"http.html:'content=\\\"maxsite cms'\"], \"vendor\": \"maxsite\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"maxsite cms\"], \"case-insensitive\": true}]}], \"_source_file\": \"maxsite\\\\maxsite_cms.yaml\"}, {\"id\": \"msnswitch_firmware\", \"info\": {\"name\": \"msnswitch_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,msnswitch_firmware\", \"severity\": \"info\", \"metadata\": {\"product\": \"msnswitch_firmware\", \"shodan-query\": [\"http.favicon.hash:-2073748627 || http.favicon.hash:-1721140132\"], \"vendor\": \"megatech\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\" http.favicon.hash:-1721140132\", \"-2073748627 \"]}]}], \"_source_file\": \"megatech\\\\msnswitch_firmware.yaml\"}, {\"id\": \"metabase\", \"info\": {\"name\": \"metabase\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,metabase\", \"severity\": \"info\", \"metadata\": {\"product\": \"metabase\", \"vendor\": \"metabase\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"_metabasebootstrap\", \"_metabaselocalization\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"metabase\\\\metabase.yaml\"}, {\"id\": \"metersphere\", \"info\": {\"name\": \"metersphere\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,metersphere\", \"severity\": \"info\", \"metadata\": {\"product\": \"metersphere\", \"vendor\": \"metersphere\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>metersphere\"], \"case-insensitive\": true}]}], \"_source_file\": \"metersphere\\\\metersphere.yaml\"}, {\"id\": \"metinfo\", \"info\": {\"name\": \"metinfo\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,metinfo\", \"severity\": \"info\", \"metadata\": {\"product\": \"metinfo\", \"vendor\": \"metinfo\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<div class=\\\"powered_by_metinfo\\\"></div>\", \"<meta name=\\\"generator\\\" content=\\\"metinfo\"], \"case-insensitive\": true}]}], \"_source_file\": \"metinfo\\\\metinfo.yaml\"}, {\"id\": \"cloudpanel\", \"info\": {\"name\": \"cloudpanel\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cloudpanel\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"151132309\\\"\", \"title=\\\"cloudpanel\\\"\"], \"google-query\": [\"intitle:\\\"cloudpanel\\\"\"], \"product\": \"cloudpanel\", \"shodan-query\": [\"title:\\\"cloudpanel\\\"\", \"http.title:\\\"cloudpanel\\\"\", \"http.favicon.hash:\\\"151132309\\\"\"], \"vendor\": \"mgt-commerce\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"151132309\"]}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>cloudpanel.*?</title>\"]}]}], \"_source_file\": \"mgt-commerce\\\\cloudpanel.yaml\"}, {\"id\": \"syncserver_s650\", \"info\": {\"name\": \"syncserver_s650\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,syncserver_s650\", \"severity\": \"info\", \"metadata\": {\"product\": \"syncserver_s650\", \"shodan-query\": [\"html:\\\"symmetricom syncserver\\\"\"], \"vendor\": \"microchip\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"symmetricom syncserver\"], \"case-insensitive\": true}]}], \"_source_file\": \"microchip\\\\syncserver_s650.yaml\"}, {\"id\": \"exchange_server\", \"info\": {\"name\": \"exchange_server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,exchange_server\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"outlook\\\"\", \"icon_hash=1768726119\"], \"google-query\": [\"intitle:\\\"outlook\\\"\"], \"product\": \"exchange_server\", \"shodan-query\": [\"vuln:cve-2021-26855\", \"http.favicon.hash:1768726119\", \"http.title:\\\"outlook\\\"\", \"cpe:\\\"cpe:2.3:a:microsoft:exchange_server\\\"\"], \"vendor\": \"microsoft\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1768726119\"]}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>outlook.*?</title>\"]}]}], \"_source_file\": \"microsoft\\\\exchange_server.yaml\"}, {\"id\": \"internet_information_server\", \"info\": {\"name\": \"iis\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,iis\", \"severity\": \"info\", \"metadata\": {\"product\": \"internet_information_server\", \"vendor\": \"microsoft\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: microsoft-iis\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"microsoft\\\\internet_information_server.yaml\"}, {\"id\": \"office_web_apps_server\", \"info\": {\"name\": \"office_web_apps_server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,office_web_apps_server\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"provide a link that opens word\\\"\"], \"product\": \"office_web_apps_server\", \"shodan-query\": [\"html:\\\"provide a link that opens word\\\"\"], \"vendor\": \"microsoft\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"provide a link that opens word\"], \"case-insensitive\": true}]}], \"_source_file\": \"microsoft\\\\office_web_apps_server.yaml\"}, {\"id\": \"skype_for_business_server\", \"info\": {\"name\": \"skype_for_business_server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,skype_for_business_server\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"skype for business\\\"\"], \"product\": \"skype_for_business_server\", \"shodan-query\": [\"html:\\\"skype for business\\\"\", \"http.html:\\\"skype for business\\\"\"], \"vendor\": \"microsoft\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"skype for business\"], \"case-insensitive\": true}]}], \"_source_file\": \"microsoft\\\\skype_for_business_server.yaml\"}, {\"id\": \"windows\", \"info\": {\"name\": \"windows\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,windows\", \"severity\": \"info\", \"metadata\": {\"product\": \"windows\", \"shodan-query\": [\"title:\\\"filemage\\\"\", \"cpe:\\\"cpe:2.3:o:microsoft:windows\\\"\"], \"vendor\": \"microsoft\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>filemage.*?</title>\"]}]}], \"_source_file\": \"microsoft\\\\windows.yaml\"}, {\"id\": \"windows_7\", \"info\": {\"name\": \"windows_7\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,windows_7\", \"severity\": \"info\", \"metadata\": {\"product\": \"windows_7\", \"shodan-query\": [\"\\\"microsoft-iis\\\" \\\"2015\\\"\", \"cpe:\\\"cpe:2.3:o:microsoft:windows_7\\\"\"], \"vendor\": \"microsoft\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"microsoft-iis\\\" \\\"2015\"], \"case-insensitive\": true}]}], \"_source_file\": \"microsoft\\\\windows_7.yaml\"}, {\"id\": \"microweber\", \"info\": {\"name\": \"microweber\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,microweber\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"microweber\\\"\", \"icon_hash=780351152\"], \"product\": \"microweber\", \"shodan-query\": [\"http.favicon.hash:780351152\", \"http.html:\\\"microweber\\\"\"], \"vendor\": \"microweber\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"microweber\"], \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"780351152\"]}]}], \"_source_file\": \"microweber\\\\microweber.yaml\"}, {\"id\": \"mikopbx\", \"info\": {\"name\": \"mikopbx\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mikopbx\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"8309143\\\"\", \"title=\\\"mikopbx\\\"\"], \"product\": \"mikopbx\", \"shodan-query\": [\"product:\\\"mikopbx\\\"\", \"http.favicon.hash:8309143\", \"title:\\\"mikopbx\\\"\"], \"vendor\": \"miko\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"8309143\"]}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>mikopbx.*?</title>\"]}]}], \"_source_file\": \"miko\\\\mikopbx.yaml\"}, {\"id\": \"ur51\", \"info\": {\"name\": \"ur51\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ur51\", \"severity\": \"info\", \"metadata\": {\"product\": \"ur51\", \"shodan-query\": [\"http.html:rt_title\"], \"vendor\": \"milesight\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"rt_title\"], \"case-insensitive\": true}]}], \"_source_file\": \"milesight\\\\ur51.yaml\"}, {\"id\": \"mindsdb\", \"info\": {\"name\": \"mindsdb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mindsdb\", \"severity\": \"info\", \"metadata\": {\"product\": \"mindsdb\", \"shodan-query\": [\"title:\\\"mindsdb\\\"\"], \"vendor\": \"mindsdb\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>mindsdb.*?</title>\"]}]}], \"_source_file\": \"mindsdb\\\\mindsdb.yaml\"}, {\"id\": \"mcms\", \"info\": {\"name\": \"mcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mcms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"1464851260\\\"\"], \"product\": \"mcms\", \"shodan-query\": [\"http.favicon.hash:1464851260\", \"http.favicon.hash:\\\"1464851260\\\"\"], \"vendor\": \"mingsoft\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1464851260\"]}]}], \"_source_file\": \"mingsoft\\\\mcms.yaml\"}, {\"id\": \"console\", \"info\": {\"name\": \"console\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,console\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"minio-console\\\"\", \"title=\\\"minio console\\\"\"], \"google-query\": [\"intitle:\\\"minio console\\\"\"], \"product\": \"console\", \"shodan-query\": [\"http.title:\\\"minio console\\\"\"], \"vendor\": \"minio\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>minio console.*?</title>\"]}]}], \"_source_file\": \"minio\\\\console.yaml\"}, {\"id\": \"minio\", \"info\": {\"name\": \"minio\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,minio\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"minio\\\"\", \"title=\\\"minio browser\\\"\", \"title=\\\"minio console\\\"\"], \"google-query\": [\"intitle:\\\"minio browser\\\"\", \"intitle:\\\"minio console\\\"\"], \"product\": \"minio\", \"shodan-query\": [\"title:\\\"minio console\\\"\", \"http.title:\\\"minio browser\\\"\", \"cpe:\\\"cpe:2.3:a:minio:minio\\\"\", \"http.title:\\\"minio console\\\"\", \"http.html:\\\"symfony profiler\\\"\"], \"vendor\": \"minio\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"symfony profiler\"], \"case-insensitive\": true}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>minio browser.*?</title>\", \"(?mi)<title[^>]*>minio console.*?</title>\"]}]}], \"_source_file\": \"minio\\\\minio.yaml\"}, {\"id\": \"anything-llm\", \"info\": {\"name\": \"anything-llm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,anything-llm\", \"severity\": \"info\", \"metadata\": {\"product\": \"anything-llm\", \"shodan-query\": [\"title:\\\"anythingllm\\\"\"], \"vendor\": \"mintplex labs\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>anythingllm.*?</title>\"]}]}], \"_source_file\": \"mintplex labs\\\\anything-llm.yaml\"}, {\"id\": \"anything-llm\", \"info\": {\"name\": \"anything-llm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,anything-llm\", \"severity\": \"info\", \"metadata\": {\"product\": \"anything-llm\", \"shodan-query\": [\"title:\\\"anythingllm\\\"\"], \"vendor\": \"mintplexlabs\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>anythingllm.*?</title>\"]}]}], \"_source_file\": \"mintplexlabs\\\\anything-llm.yaml\"}, {\"id\": \"cmg_suite\", \"info\": {\"name\": \"cmg_suite\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cmg_suite\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"mitel networks\\\"\"], \"product\": \"cmg_suite\", \"shodan-query\": [\"http.html:\\\"mitel networks\\\"\"], \"vendor\": \"mitel\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"mitel networks\"], \"case-insensitive\": true}]}], \"_source_file\": \"mitel\\\\cmg_suite.yaml\"}, {\"id\": \"micollab\", \"info\": {\"name\": \"micollab\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,micollab\", \"severity\": \"info\", \"metadata\": {\"product\": \"micollab\", \"shodan-query\": [\"html:\\\"mitel\\\" html:\\\"micollab\\\"\"], \"vendor\": \"mitel\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"mitel\\\" html:\\\"micollab\"], \"case-insensitive\": true}]}], \"_source_file\": \"mitel\\\\micollab.yaml\"}, {\"id\": \"micollab_audio,_web_&_video_conferencing\", \"info\": {\"name\": \"micollab_audio,_web_&_video_conferencing\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,micollab_audio,_web_&_video_conferencing\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"mitel\\\" html:\\\"micollab\\\"\"], \"product\": \"micollab_audio,_web_&_video_conferencing\", \"shodan-query\": [\"html:\\\"mitel\\\" html:\\\"micollab\\\"\", \"http.html:\\\"mitel\\\" html:\\\"micollab\\\"\"], \"vendor\": \"mitel\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"mitel\\\" html:\\\"micollab\"], \"case-insensitive\": true}]}], \"_source_file\": \"mitel\\\\micollab_audio,_web_&_video_conferencing.yaml\"}, {\"id\": \"shoretel\", \"info\": {\"name\": \"shoretel\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,shoretel\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"shoretel\\\" && icon_hash=\\\"268280373\\\"\"], \"product\": \"shoretel\", \"vendor\": \"mitel\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"shoretel\"], \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"268280373\"]}]}], \"_source_file\": \"mitel\\\\shoretel.yaml\"}, {\"id\": \"majordomo\", \"info\": {\"name\": \"majordomo\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,majordomo\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"majordomosl\\\"\", \"icon_hash=1903390397\"], \"product\": \"majordomo\", \"shodan-query\": [\"http.favicon.hash:1903390397\"], \"vendor\": \"mjdm\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1903390397\"]}]}], \"_source_file\": \"mjdm\\\\majordomo.yaml\"}, {\"id\": \"s14\", \"info\": {\"name\": \"s14\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,s14\", \"severity\": \"info\", \"metadata\": {\"product\": \"s14\", \"shodan-query\": [\"title:\\\"mobotix\\\"\"], \"vendor\": \"mobotix\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>mobotix.*?</title>\"]}]}], \"_source_file\": \"mobotix\\\\s14.yaml\"}, {\"id\": \"mobsf\", \"info\": {\"name\": \"mobsf\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mobsf\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"mobsf\"], \"product\": \"mobsf\", \"vendor\": \"mobsf\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"mobsf\"], \"case-insensitive\": true}]}], \"_source_file\": \"mobsf\\\\mobsf.yaml\"}, {\"id\": \"mobile-security-framework\", \"info\": {\"name\": \"mobile-security-framework\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mobile-security-framework\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"mobsf\\\"\"], \"product\": \"mobile-security-framework\", \"vendor\": \"mobsf_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>mobsf.*?</title>\"]}]}], \"_source_file\": \"mobsf_project\\\\mobile-security-framework.yaml\"}, {\"id\": \"modoboa\", \"info\": {\"name\": \"modoboa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,modoboa\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"modoboa\\\"\", \"icon_hash=1949005079\"], \"product\": \"modoboa\", \"shodan-query\": [\"html:\\\"modoboa\\\"\", \"http.favicon.hash:1949005079\", \"http.html:\\\"modoboa\\\"\"], \"vendor\": \"modoboa\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"modoboa\"], \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"1949005079\"]}]}], \"_source_file\": \"modoboa\\\\modoboa.yaml\"}, {\"id\": \"mojoportal\", \"info\": {\"name\": \"mojoportal\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mojoportal\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"mojoportal\\\"\", \"title=\\\"mojoportal\\\"\"], \"product\": \"mojoportal\", \"shodan-query\": [\"html:\\\"mojoportal\\\"\", \"http.html:\\\"mojoportal\\\"\"], \"vendor\": \"mojoportal\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"mojoportal\"], \"case-insensitive\": true}]}], \"_source_file\": \"mojoportal\\\\mojoportal.yaml\"}, {\"id\": \"mongo-express\", \"info\": {\"name\": \"mongo-express\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mongo-express\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"mongo express\\\"\"], \"google-query\": [\"intitle:\\\"mongo express\\\"\"], \"product\": \"mongo-express\", \"shodan-query\": [\"http.title:\\\"mongo express\\\"\"], \"vendor\": \"mongo-express_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>mongo express.*?</title>\"]}]}], \"_source_file\": \"mongo-express_project\\\\mongo-express.yaml\"}, {\"id\": \"monitorr\", \"info\": {\"name\": \"monitorr\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,monitorr\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"-211006074\\\"\"], \"product\": \"monitorr\", \"shodan-query\": [\"http.favicon.hash:\\\"-211006074\\\"\"], \"vendor\": \"monitorr\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-211006074\"]}]}], \"_source_file\": \"monitorr\\\\monitorr.yaml\"}, {\"id\": \"monsta_ftp\", \"info\": {\"name\": \"monsta_ftp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,monsta_ftp\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"monsta ftp\\\"\"], \"product\": \"monsta_ftp\", \"shodan-query\": [\"http.title:\\\"monsta ftp\\\"\"], \"vendor\": \"monstaftp\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>monsta ftp.*?</title>\"]}]}], \"_source_file\": \"monstaftp\\\\monsta_ftp.yaml\"}, {\"id\": \"monstra\", \"info\": {\"name\": \"monstra\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,monstra\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=419828698\"], \"product\": \"monstra\", \"shodan-query\": [\"http.favicon.hash:419828698\"], \"vendor\": \"monstra\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"419828698\"]}]}], \"_source_file\": \"monstra\\\\monstra.yaml\"}, {\"id\": \"monstra_cms\", \"info\": {\"name\": \"monstra_cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,monstra_cms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=419828698\"], \"product\": \"monstra_cms\", \"shodan-query\": [\"http.favicon.hash:419828698\"], \"vendor\": \"monstra\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"419828698\"]}]}], \"_source_file\": \"monstra\\\\monstra_cms.yaml\"}, {\"id\": \"resourcespace\", \"info\": {\"name\": \"resourcespace\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,resourcespace\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"resourcespace\\\"\"], \"product\": \"resourcespace\", \"shodan-query\": [\"title:\\\"resourcespace\\\"\"], \"vendor\": \"montala\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>resourcespace.*?</title>\"]}]}], \"_source_file\": \"montala\\\\resourcespace.yaml\"}, {\"id\": \"moodle\", \"info\": {\"name\": \"moodle\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,moodle\", \"severity\": \"info\", \"metadata\": {\"product\": \"moodle\", \"vendor\": \"moodle\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"moodle\", \"m.str = {\\\"moodle\\\":\", \"title=\\\"moodle\\\" href=\\\"http://moodle.org/\"], \"case-insensitive\": true}]}], \"_source_file\": \"moodle\\\\moodle.yaml\"}, {\"id\": \"moosocial\", \"info\": {\"name\": \"moosocial\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,moosocial\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"702863115\\\"\"], \"product\": \"moosocial\", \"shodan-query\": [\"http.favicon.hash:\\\"702863115\\\"\", \"http.favicon.hash:702863115\"], \"vendor\": \"moosocial\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"702863115\"]}]}], \"_source_file\": \"moosocial\\\\moosocial.yaml\"}, {\"id\": \"moostore\", \"info\": {\"name\": \"moostore\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,moostore\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"moosocial\", \"icon_hash=\\\"702863115\\\"\"], \"product\": \"moostore\", \"shodan-query\": [\"http.favicon.hash:\\\"702863115\\\"\"], \"vendor\": \"moosocial\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"moosocial\"], \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"702863115\"]}]}], \"_source_file\": \"moosocial\\\\moostore.yaml\"}, {\"id\": \"bazarr\", \"info\": {\"name\": \"bazarr\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bazarr\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title==\\\"bazarr\\\" && icon_hash=\\\"-1983413099\\\"\"], \"product\": \"bazarr\", \"vendor\": \"morpheus65535\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*> icon_hash=\\\"-1983413099.*?</title>\", \"(?mi)<title[^>]*>=\\\"bazarr\\\" .*?</title>\"]}]}], \"_source_file\": \"morpheus65535\\\\bazarr.yaml\"}, {\"id\": \"motioneye\", \"info\": {\"name\": \"motioneye\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,motioneye\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"motioneye\\\"\"], \"product\": \"motioneye\", \"shodan-query\": [\"html:\\\"motioneye\\\"\", \"http.html:\\\"motioneye\\\"\"], \"vendor\": \"motioneye_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"motioneye\"], \"case-insensitive\": true}]}], \"_source_file\": \"motioneye_project\\\\motioneye.yaml\"}, {\"id\": \"php-login-system\", \"info\": {\"name\": \"php-login-system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,php-login-system\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"klik_loginsystem\\\"\"], \"product\": \"php-login-system\", \"shodan-query\": [\"http.html:\\\"klik_loginsystem\\\"\"], \"vendor\": \"msaad1999\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"klik_loginsystem\"]}]}], \"_source_file\": \"msaad1999\\\\php-login-system.yaml\"}, {\"id\": \"ind780_firmware\", \"info\": {\"name\": \"ind780_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ind780_firmware\", \"severity\": \"info\", \"metadata\": {\"google-query\": [\"inurl:excalweb.dll\"], \"product\": \"ind780_firmware\", \"shodan-query\": [\"ind780\"], \"vendor\": \"mt\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ind780\"], \"case-insensitive\": true}]}], \"_source_file\": \"mt\\\\ind780_firmware.yaml\"}, {\"id\": \"localai\", \"info\": {\"name\": \"localai\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,localai\", \"severity\": \"info\", \"metadata\": {\"product\": \"localai\", \"shodan-query\": [\"http.favicon.hash:-976853304\"], \"vendor\": \"mudler\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-976853304\"]}]}], \"_source_file\": \"mudler\\\\localai.yaml\"}, {\"id\": \"mybb\", \"info\": {\"name\": \"mybb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mybb\", \"severity\": \"info\", \"metadata\": {\"product\": \"mybb\", \"vendor\": \"mybb\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!-- mybb is free software developed and maintained\", \"onchange=\\\"mybb.changelanguage();\", \"powered by <a href=\\\"http://www.mybboard.com\", \"visibility of the mybb copyright at any time\"], \"case-insensitive\": true}]}], \"_source_file\": \"mybb\\\\mybb.yaml\"}, {\"id\": \"mysqldumper\", \"info\": {\"name\": \"mysqldumper\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mysqldumper\", \"severity\": \"info\", \"metadata\": {\"product\": \"mysqldumper\", \"vendor\": \"mysqldumper\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<select class=\\\"sqlcombo\\\" name=\\\"tablecombo\"], \"case-insensitive\": true}]}], \"_source_file\": \"mysqldumper\\\\mysqldumper.yaml\"}, {\"id\": \"nagios_xi\", \"info\": {\"name\": \"nagios_xi\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nagios_xi\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"nagios-xi\\\"\", \"title=\\\"nagios xi\\\"\"], \"google-query\": [\"intitle:\\\"nagios xi\\\"\"], \"product\": \"nagios_xi\", \"shodan-query\": [\"http.title:\\\"nagios xi\\\"\", \"title:\\\"nagios xi\\\"\"], \"vendor\": \"nagios\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>nagios xi.*?</title>\"]}]}], \"_source_file\": \"nagios\\\\nagios_xi.yaml\"}, {\"id\": \"navidrome\", \"info\": {\"name\": \"navidrome\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,navidrome\", \"severity\": \"info\", \"metadata\": {\"product\": \"navidrome\", \"shodan-query\": [\"html:\\\"content=\\\"navidrome\\\"\\\"\"], \"vendor\": \"navidrome\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"navidrome\"], \"case-insensitive\": true}]}], \"_source_file\": \"navidrome\\\\navidrome.yaml\"}, {\"id\": \"ncast\", \"info\": {\"name\": \"ncast\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ncast\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"ncast-产品\\\" && title==\\\"高清智能录播系统\\\"\", \"title=\\\"高清智能录播系统\\\"\"], \"google-query\": [\"intitle:\\\"高清智能录播系统\\\"\"], \"product\": \"ncast\", \"shodan-query\": [\"http.title:\\\"高清智能录播系统\\\"\"], \"vendor\": \"ncast_project\", \"verified\": true, \"zoomeye-query\": [\"title:\\\"高清智能录播系统\\\"\"]}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>高清智能录播系统.*?</title>\"]}]}], \"_source_file\": \"ncast_project\\\\ncast.yaml\"}, {\"id\": \"neo4j\", \"info\": {\"name\": \"neo4j\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,neo4j\", \"severity\": \"info\", \"metadata\": {\"product\": \"neo4j\", \"vendor\": \"neo4j\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"neo4j\", \"ng-show=\\\"neo4j.enterpriseedition\", \"play-topic=\\\"neo4j-sync\", \"{{ neo4j.version | neo4jdeveloperdoc }}/\"], \"case-insensitive\": true}]}], \"_source_file\": \"neo4j\\\\neo4j.yaml\"}, {\"id\": \"netalertx\", \"info\": {\"name\": \"netalertx\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netalertx\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"netalertx\\\"\"], \"product\": \"netalertx\", \"vendor\": \"netalertx\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>netalertx.*?</title>\"]}]}], \"_source_file\": \"netalertx\\\\netalertx.yaml\"}, {\"id\": \"application_security_gateway\", \"info\": {\"name\": \"application_security_gateway\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,application_security_gateway\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"ns-icg\"], \"product\": \"application_security_gateway\", \"vendor\": \"netentsec\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ns-icg\"], \"case-insensitive\": true}]}], \"_source_file\": \"netentsec\\\\application_security_gateway.yaml\"}, {\"id\": \"ns-asg\", \"info\": {\"name\": \"ns-asg\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ns-asg\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"网康科技-ns-asg安全网关\\\"\"], \"product\": \"ns-asg\", \"shodan-query\": [\"http.title:“ns-asg”\"], \"vendor\": \"netentsec\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>“ns-asg”.*?</title>\"]}]}], \"_source_file\": \"netentsec\\\\ns-asg.yaml\"}, {\"id\": \"dgn2200\", \"info\": {\"name\": \"dgn2200\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,dgn2200\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"netgear dgn2200\\\"\"], \"product\": \"dgn2200\", \"shodan-query\": [\"http.title:\\\"dgn2200\\\"\"], \"vendor\": \"netgear\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>dgn2200.*?</title>\", \"(?mi)<title[^>]*>netgear dgn2200.*?</title>\"]}]}], \"_source_file\": \"netgear\\\\dgn2200.yaml\"}, {\"id\": \"netgear-r6850-router\", \"info\": {\"name\": \"netgear r6850 router\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netgear r6850 router\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"netgear\\\" && \\\"r6850\\\"\"], \"product\": \"netgear r6850 router\", \"vendor\": \"netgear\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"r6850\"], \"case-insensitive\": true}]}], \"_source_file\": \"netgear\\\\netgear r6850 router.yaml\"}, {\"id\": \"netgear\", \"info\": {\"name\": \"netgear\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netgear\", \"severity\": \"info\", \"metadata\": {\"product\": \"netgear\", \"vendor\": \"netgear\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"gigabit dual wan ssl vpn firewall fvs336gv3</div>\"], \"case-insensitive\": true}]}], \"_source_file\": \"netgear\\\\netgear.yaml\"}, {\"id\": \"r6850_firmware\", \"info\": {\"name\": \"r6850_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,r6850_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"netgear\\\" && \\\"r6850\\\"\"], \"product\": \"r6850_firmware\", \"vendor\": \"netgear\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"r6850\"], \"case-insensitive\": true}]}], \"_source_file\": \"netgear\\\\r6850_firmware.yaml\"}, {\"id\": \"readynas_surveillance\", \"info\": {\"name\": \"readynas_surveillance\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,readynas_surveillance\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"nuuo-nvrmini\\\" || app=\\\"nuuo-nvr\\\" || title=\\\"network video recorder login\\\"\"], \"product\": \"readynas_surveillance\", \"vendor\": \"netgear\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>network video recorder login.*?</title>\"]}]}], \"_source_file\": \"netgear\\\\readynas_surveillance.yaml\"}, {\"id\": \"wn604\", \"info\": {\"name\": \"wn604\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wn604\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title==\\\"netgear\\\"\"], \"product\": \"wn604\", \"vendor\": \"netgear\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>=\\\"netgear.*?</title>\"]}]}], \"_source_file\": \"netgear\\\\wn604.yaml\"}, {\"id\": \"wnr614\", \"info\": {\"name\": \"wnr614\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wnr614\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"netgear wnr614\\\"\"], \"product\": \"wnr614\", \"shodan-query\": [\"http.title:\\\"wnr614\\\"\"], \"vendor\": \"netgear\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>netgear wnr614.*?</title>\", \"(?mi)<title[^>]*>wnr614.*?</title>\"]}]}], \"_source_file\": \"netgear\\\\wnr614.yaml\"}, {\"id\": \"mw5360_firmware\", \"info\": {\"name\": \"mw5360_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mw5360_firmware\", \"severity\": \"info\", \"metadata\": {\"product\": \"mw5360_firmware\", \"shodan-query\": [\"title:\\\"netis router\\\"\"], \"vendor\": \"netis-systems\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>netis router.*?</title>\"]}]}], \"_source_file\": \"netis-systems\\\\mw5360_firmware.yaml\"}, {\"id\": \"netsweeper\", \"info\": {\"name\": \"netsweeper\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netsweeper\", \"severity\": \"info\", \"metadata\": {\"product\": \"netsweeper\", \"vendor\": \"netsweeper\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"http://www.poweredbynetsweeper.com\\\"><img \", \"netsweepersmbtextatbottomofloginscreen\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"set-cookie: webadmin=\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"netsweeper\\\\netsweeper.yaml\"}, {\"id\": \"mirth_connect\", \"info\": {\"name\": \"mirth_connect\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mirth_connect\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"mirth connect administrator\\\"\"], \"google-query\": [\"intitle:\\\"mirth connect administrator\\\"\"], \"product\": \"mirth_connect\", \"shodan-query\": [\"title:\\\"mirth connect administrator\\\"\", \"http.title:\\\"mirth connect administrator\\\"\"], \"vendor\": \"nextgen\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>mirth connect administrator.*?</title>\"]}]}], \"_source_file\": \"nextgen\\\\mirth_connect.yaml\"}, {\"id\": \"nexusphp\", \"info\": {\"name\": \"nexusphp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nexusphp\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=-582931176\"], \"product\": \"nexusphp\", \"shodan-query\": [\"http.favicon.hash:-582931176\", \"cpe:\\\"cpe:2.3:a:nexusphp:nexusphp\\\"\"], \"vendor\": \"nexusphp\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-582931176\"]}]}], \"_source_file\": \"nexusphp\\\\nexusphp.yaml\"}, {\"id\": \"linear_emerge_e3_access_control_firmware\", \"info\": {\"name\": \"linear_emerge_e3_access_control_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,linear_emerge_e3_access_control_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"linear emerge\\\"\"], \"product\": \"linear_emerge_e3_access_control_firmware\", \"shodan-query\": [\"http.html:\\\"linear emerge\\\"\"], \"vendor\": \"niceforyou\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"linear emerge\"], \"case-insensitive\": true}]}], \"_source_file\": \"niceforyou\\\\linear_emerge_e3_access_control_firmware.yaml\"}, {\"id\": \"nocodb\", \"info\": {\"name\": \"nocodb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nocodb\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=-2017596142\"], \"product\": \"nocodb\", \"shodan-query\": [\"http.favicon.hash:-2017596142\"], \"vendor\": \"nocodb\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-2017596142\"]}]}], \"_source_file\": \"nocodb\\\\nocodb.yaml\"}, {\"id\": \"nodebb\", \"info\": {\"name\": \"nodebb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nodebb\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"nodebb\\\"\"], \"product\": \"nodebb\", \"shodan-query\": [\"cpe:\\\"cpe:2.3:a:nodebb:nodebb\\\"\"], \"vendor\": \"nodebb\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>nodebb.*?</title>\"]}]}], \"_source_file\": \"nodebb\\\\nodebb.yaml\"}, {\"id\": \"node-red-dashboard\", \"info\": {\"name\": \"node-red-dashboard\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,node-red-dashboard\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"node-red\\\"\"], \"google-query\": [\"intitle:\\\"node-red\\\"\"], \"product\": \"node-red-dashboard\", \"shodan-query\": [\"title:\\\"node-red\\\"\", \"http.title:\\\"node-red\\\"\"], \"vendor\": \"nodered\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>node-red.*?</title>\"]}]}], \"_source_file\": \"nodered\\\\node-red-dashboard.yaml\"}, {\"id\": \"node-red\", \"info\": {\"name\": \"node-red\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,node-red\", \"severity\": \"info\", \"metadata\": {\"product\": \"node-red\", \"shodan-query\": [\"http.favicon.hash:321591353\"], \"vendor\": \"nodered\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"321591353\"]}]}], \"_source_file\": \"nodered\\\\node-red.yaml\"}, {\"id\": \"nordex_control_2_scada\", \"info\": {\"name\": \"nordex_control_2_scada\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nordex_control_2_scada\", \"severity\": \"info\", \"metadata\": {\"product\": \"nordex_control_2_scada\", \"shodan-query\": [\"http.title:\\\"nordex control - wind farm portal\\\"\"], \"vendor\": \"nordex\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>nordex control - wind farm portal.*?</title>\"]}]}], \"_source_file\": \"nordex\\\\nordex_control_2_scada.yaml\"}, {\"id\": \"emerge_e3_firmware\", \"info\": {\"name\": \"emerge_e3_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,emerge_e3_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"emerge\\\"\", \"title=\\\"linear emerge\\\"\"], \"google-query\": [\"intitle:\\\"linear emerge\\\"\", \"intitle:\\\"emerge\\\"\"], \"product\": \"emerge_e3_firmware\", \"shodan-query\": [\"http.title:\\\"emerge\\\"\", \"http.title:\\\"linear emerge\\\"\", \"title:\\\"emerge\\\"\"], \"vendor\": \"nortekcontrol\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>emerge.*?</title>\", \"(?mi)<title[^>]*>linear emerge.*?</title>\"]}]}], \"_source_file\": \"nortekcontrol\\\\emerge_e3_firmware.yaml\"}, {\"id\": \"linear_emerge_essential_firmware\", \"info\": {\"name\": \"linear_emerge_essential_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,linear_emerge_essential_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"emerge\\\"\"], \"google-query\": [\"intitle:\\\"emerge\\\"\"], \"product\": \"linear_emerge_essential_firmware\", \"shodan-query\": [\"http.title:\\\"emerge\\\"\", \"title:\\\"emerge\\\"\"], \"vendor\": \"nortekcontrol\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>emerge.*?</title>\"]}]}], \"_source_file\": \"nortekcontrol\\\\linear_emerge_essential_firmware.yaml\"}, {\"id\": \"nvrmini_firmware\", \"info\": {\"name\": \"nvrmini_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nvrmini_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"nuuo\\\"\"], \"product\": \"nvrmini_firmware\", \"shodan-query\": [\"title:\\\"nuuo\\\"\"], \"vendor\": \"nuuo\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>nuuo.*?</title>\"]}]}], \"_source_file\": \"nuuo\\\\nvrmini_firmware.yaml\"}, {\"id\": \"nvrsolo_firmware\", \"info\": {\"name\": \"nvrsolo_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nvrsolo_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"nvrsolo\\\"\"], \"product\": \"nvrsolo_firmware\", \"shodan-query\": [\"http.html:\\\"nvrsolo\\\"\"], \"vendor\": \"nuuo\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"nvrsolo\"], \"case-insensitive\": true}]}], \"_source_file\": \"nuuo\\\\nvrsolo_firmware.yaml\"}, {\"id\": \"framework\", \"info\": {\"name\": \"framework\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,framework\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"buildassetsdir\\\" && body=\\\"__nuxt\\\"\"], \"product\": \"framework\", \"shodan-query\": [\"html:\\\"buildassetsdir\\\" \\\"nuxt\\\"\"], \"vendor\": \"nuxt\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"__nuxt\", \"buildassetsdir\", \"buildassetsdir\\\" \\\"nuxt\"], \"case-insensitive\": true}]}], \"_source_file\": \"nuxt\\\\framework.yaml\"}, {\"id\": \"odoo\", \"info\": {\"name\": \"odoo\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,odoo\", \"severity\": \"info\", \"metadata\": {\"product\": \"odoo\", \"vendor\": \"odoo\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"a342fe863a8e41dff2a55410c7f118c5\"]}, {\"type\": \"word\", \"words\": [\"<script id=\\\"web.layout.odooscript\", \"odoo.__session_info__ = {\"], \"case-insensitive\": true}]}], \"_source_file\": \"odoo\\\\odoo.yaml\"}, {\"id\": \"ckan\", \"info\": {\"name\": \"ckan\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ckan\", \"severity\": \"info\", \"metadata\": {\"product\": \"ckan\", \"shodan-query\": [\"html:\\\"ckan 2.8.2\\\" || html:\\\"ckan 2.3\\\"\"], \"vendor\": \"okfn\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ckan 2.8.2\\\"\", \"html:\\\"ckan 2.3\"], \"case-insensitive\": true}]}], \"_source_file\": \"okfn\\\\ckan.yaml\"}, {\"id\": \"ollama\", \"info\": {\"name\": \"ollama\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ollama\", \"severity\": \"info\", \"metadata\": {\"product\": \"ollama\", \"shodan-query\": [\"ollama\"], \"vendor\": \"ollama\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ollama\"], \"case-insensitive\": true}]}], \"_source_file\": \"ollama\\\\ollama.yaml\"}, {\"id\": \"onedev\", \"info\": {\"name\": \"onedev\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,onedev\", \"severity\": \"info\", \"metadata\": {\"product\": \"onedev\", \"shodan-query\": [\"html:\\\"onedev.io\\\"\"], \"vendor\": \"onedev\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"onedev.io\"], \"case-insensitive\": true}]}], \"_source_file\": \"onedev\\\\onedev.yaml\"}, {\"id\": \"monitor\", \"info\": {\"name\": \"monitor\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,monitor\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"itrs\\\"\"], \"product\": \"monitor\", \"shodan-query\": [\"title:\\\"itrs\\\"\"], \"vendor\": \"op5\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>itrs.*?</title>\"]}, {\"type\": \"word\", \"words\": [\"/monitor/application/views/themes/default/css/default/common.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"op5\\\\monitor.yaml\"}, {\"id\": \"openemr\", \"info\": {\"name\": \"openemr\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,openemr\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"openemr\\\"\", \"body=\\\"openemr\\\"\", \"title=\\\"openemr\\\"\", \"icon_hash=1971268439\"], \"google-query\": [\"intitle:\\\"openemr\\\"\"], \"product\": \"openemr\", \"shodan-query\": [\"http.favicon.hash:1971268439\", \"http.html:\\\"openemr\\\"\", \"http.title:\\\"openemr\\\"\", \"title:\\\"openemr\\\"\"], \"vendor\": \"open-emr\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"openemr\"], \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"1971268439\"]}]}], \"_source_file\": \"open-emr\\\\openemr.yaml\"}, {\"id\": \"openmetadata\", \"info\": {\"name\": \"openmetadata\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,openmetadata\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"openmetadata\\\"\"], \"product\": \"openmetadata\", \"shodan-query\": [\"title:\\\"openmetadata\\\"\"], \"vendor\": \"open-metadata\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>openmetadata.*?</title>\"]}]}], \"_source_file\": \"open-metadata\\\\openmetadata.yaml\"}, {\"id\": \"open-xchange\", \"info\": {\"name\": \"open-xchange\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,open-xchange\", \"severity\": \"info\", \"metadata\": {\"product\": \"open-xchange\", \"vendor\": \"open-xchange\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=\\\"browserchecktext_id\", \"you need to enable javascript to access the open-xchange server\"], \"case-insensitive\": true}]}], \"_source_file\": \"open-xchange\\\\open-xchange.yaml\"}, {\"id\": \"open-xchange_appsuite\", \"info\": {\"name\": \"open-xchange_appsuite\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,open-xchange_appsuite\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"appsuite\\\"\"], \"product\": \"open-xchange_appsuite\", \"shodan-query\": [\"html:\\\"appsuite\\\"\", \"http.html:\\\"appsuite\\\"\"], \"vendor\": \"open-xchange\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"appsuite\"], \"case-insensitive\": true}]}], \"_source_file\": \"open-xchange\\\\open-xchange_appsuite.yaml\"}, {\"id\": \"opencart\", \"info\": {\"name\": \"opencart\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,opencart\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"-1443008128\\\"\"], \"product\": \"opencart\", \"shodan-query\": [\"title:\\\"opencart\\\"\"], \"vendor\": \"opencart\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1443008128\"]}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>opencart.*?</title>\"]}]}], \"_source_file\": \"opencart\\\\opencart.yaml\"}, {\"id\": \"opencats\", \"info\": {\"name\": \"opencats\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,opencats\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"opencats\\\"\"], \"google-query\": [\"intitle:\\\"opencats\\\"\"], \"product\": \"opencats\", \"shodan-query\": [\"title:\\\"opencats\\\"\", \"http.title:\\\"opencats\\\"\"], \"vendor\": \"opencats\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>opencats.*?</title>\"]}]}], \"_source_file\": \"opencats\\\\opencats.yaml\"}, {\"id\": \"openemr\", \"info\": {\"name\": \"openemr\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,openemr\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"openemr\\\"\", \"icon_hash=1971268439\", \"body=\\\"openemr\\\"\", \"title=\\\"openemr\\\"\"], \"google-query\": [\"intitle:\\\"openemr\\\"\"], \"product\": \"openemr\", \"shodan-query\": [\"http.html:\\\"openemr\\\"\", \"http.title:\\\"openemr\\\"\", \"http.favicon.hash:1971268439\"], \"vendor\": \"openemr\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"openemr\"], \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"1971268439\"]}]}], \"_source_file\": \"openemr\\\\openemr.yaml\"}, {\"id\": \"openmediavault\", \"info\": {\"name\": \"openmediavault\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,openmediavault\", \"severity\": \"info\", \"metadata\": {\"product\": \"openmediavault\", \"shodan-query\": [\"title:\\\"openmediavault\\\"\"], \"vendor\": \"openmediavault\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>openmediavault.*?</title>\"]}]}], \"_source_file\": \"openmediavault\\\\openmediavault.yaml\"}, {\"id\": \"openmrs\", \"info\": {\"name\": \"openmrs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,openmrs\", \"severity\": \"info\", \"metadata\": {\"product\": \"openmrs\", \"shodan-query\": [\"html:\\\"openmrs\\\"\"], \"vendor\": \"openmrs\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"openmrs\"], \"case-insensitive\": true}]}], \"_source_file\": \"openmrs\\\\openmrs.yaml\"}, {\"id\": \"horizon\", \"info\": {\"name\": \"horizon\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,horizon\", \"severity\": \"info\", \"metadata\": {\"product\": \"horizon\", \"shodan-query\": [\"title:\\\"opennms web console\\\"\"], \"vendor\": \"opennms\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>opennms web console.*?</title>\"]}]}], \"_source_file\": \"opennms\\\\horizon.yaml\"}, {\"id\": \"quick.cms\", \"info\": {\"name\": \"quick.cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,quick.cms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"quick.cms v6.7\\\"\"], \"product\": \"quick.cms\", \"vendor\": \"opensolution\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"quick.cms v6.7\"], \"case-insensitive\": true}]}], \"_source_file\": \"opensolution\\\\quick.cms.yaml\"}, {\"id\": \"acutoweb\", \"info\": {\"name\": \"acutoweb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,acutoweb\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"acutoweb\\\"\"], \"product\": \"acutoweb\", \"shodan-query\": [\"title:\\\"acutoweb\\\"\"], \"vendor\": \"opentext\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>acutoweb.*?</title>\"]}]}], \"_source_file\": \"opentext\\\\acutoweb.yaml\"}, {\"id\": \"opentsdb\", \"info\": {\"name\": \"opentsdb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,opentsdb\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"opentsdb\\\"\"], \"product\": \"opentsdb\", \"shodan-query\": [\"html:\\\"opentsdb\\\"\", \"http.html:\\\"opentsdb\\\"\"], \"vendor\": \"opentsdb\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"opentsdb\"], \"case-insensitive\": true}]}], \"_source_file\": \"opentsdb\\\\opentsdb.yaml\"}, {\"id\": \"opnsense\", \"info\": {\"name\": \"opnsense\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,opnsense\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"opnsense\\\"\"], \"google-query\": [\"intitle:\\\"opnsense\\\"\"], \"product\": \"opnsense\", \"shodan-query\": [\"http.title:\\\"opnsense\\\"\", \"title:\\\"opnsense\\\"\"], \"vendor\": \"opnsense\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>opnsense.*?</title>\"]}]}], \"_source_file\": \"opnsense\\\\opnsense.yaml\"}, {\"id\": \"opsview\", \"info\": {\"name\": \"opsview\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,opsview\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"opsview\\\"\"], \"google-query\": [\"intitle:\\\"opsview\\\"\"], \"product\": \"opsview\", \"shodan-query\": [\"http.title:\\\"opsview\\\"\", \"title:\\\"opsview\\\"\"], \"vendor\": \"opsview\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>opsview.*?</title>\"]}]}], \"_source_file\": \"opsview\\\\opsview.yaml\"}, {\"id\": \"enterprise,proton\", \"info\": {\"name\": \"enterprise,proton\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,enterprise,proton\", \"severity\": \"info\", \"metadata\": {\"product\": \"enterprise,proton\", \"shodan-query\": [\"html:\\\"optergy\\\"\"], \"vendor\": \"optergy\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"optergy\"], \"case-insensitive\": true}]}], \"_source_file\": \"optergy\\\\enterprise,proton.yaml\"}, {\"id\": \"access_manager\", \"info\": {\"name\": \"access_manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,access_manager\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/oam/pages/css/login_page.css\\\"\", \"title=\\\"oracle access management\\\"\"], \"google-query\": [\"intitle:\\\"oracle access management\\\"\"], \"product\": \"access_manager\", \"shodan-query\": [\"http.title:\\\"oracle access management\\\"\", \"http.html:\\\"/oam/pages/css/login_page.css\\\"\"], \"vendor\": \"oracle\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/oam/pages/css/login_page.css\"], \"case-insensitive\": true}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>oracle access management.*?</title>\"]}]}], \"_source_file\": \"oracle\\\\access_manager.yaml\"}, {\"id\": \"business_intelligence\", \"info\": {\"name\": \"business_intelligence\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,business_intelligence\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"oracle business intelligence sign in\\\"\"], \"google-query\": [\"intitle:\\\"oracle business intelligence sign in\\\"\"], \"product\": \"business_intelligence\", \"shodan-query\": [\"http.title:\\\"oracle business intelligence sign in\\\"\"], \"vendor\": \"oracle\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>oracle business intelligence sign in.*?</title>\"]}]}], \"_source_file\": \"oracle\\\\business_intelligence.yaml\"}, {\"id\": \"e-business_suite\", \"info\": {\"name\": \"e-business_suite\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,e-business_suite\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"login\\\" \\\"x-oracle-dms-ecid\\\" 200\"], \"google-query\": [\"intitle:\\\"login\\\" \\\"x-oracle-dms-ecid\\\" 200\"], \"product\": \"e-business_suite\", \"shodan-query\": [\"http.title:\\\"login\\\" \\\"x-oracle-dms-ecid\\\" 200\"], \"vendor\": \"oracle\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>login\\\" \\\"x-oracle-dms-ecid\\\" 200.*?</title>\"]}]}], \"_source_file\": \"oracle\\\\e-business_suite.yaml\"}, {\"id\": \"fusion_middleware\", \"info\": {\"name\": \"fusion_middleware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fusion_middleware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"weblogic\\\"\", \"body=\\\"weblogic application server\\\"\"], \"google-query\": [\"intitle:\\\"weblogic\\\"\"], \"product\": \"fusion_middleware\", \"shodan-query\": [\"http.title:\\\"weblogic\\\"\", \"http.html:\\\"weblogic application server\\\"\", \"title:\\\"weblogic\\\"\"], \"vendor\": \"oracle\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"weblogic application server\"], \"case-insensitive\": true}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>weblogic.*?</title>\"]}]}], \"_source_file\": \"oracle\\\\fusion_middleware.yaml\"}, {\"id\": \"identity_manager\", \"info\": {\"name\": \"identity_manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,identity_manager\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"oracle access management\\\"\"], \"product\": \"identity_manager\", \"shodan-query\": [\"title:\\\"oracle access management\\\"\"], \"vendor\": \"oracle\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>oracle access management.*?</title>\"]}]}], \"_source_file\": \"oracle\\\\identity_manager.yaml\"}, {\"id\": \"peoplesoft_enterprise\", \"info\": {\"name\": \"peoplesoft_enterprise\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,peoplesoft_enterprise\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"oracle peoplesoft enterprise\\\"\"], \"google-query\": [\"intitle:\\\"oracle peoplesoft enterprise\\\"\"], \"product\": \"peoplesoft_enterprise\", \"shodan-query\": [\"http.title:\\\"oracle peoplesoft enterprise\\\"\"], \"vendor\": \"oracle\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>oracle peoplesoft enterprise.*?</title>\"]}]}], \"_source_file\": \"oracle\\\\peoplesoft_enterprise.yaml\"}, {\"id\": \"peoplesoft_enterprise_peopletools\", \"info\": {\"name\": \"peoplesoft_enterprise_peopletools\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,peoplesoft_enterprise_peopletools\", \"severity\": \"info\", \"metadata\": {\"product\": \"peoplesoft_enterprise_peopletools\", \"shodan-query\": [\"title:\\\"oracle peoplesoft sign-in\\\"\"], \"vendor\": \"oracle\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>oracle peoplesoft sign-in.*?</title>\"]}]}], \"_source_file\": \"oracle\\\\peoplesoft_enterprise_peopletools.yaml\"}, {\"id\": \"retail_xstore_office\", \"info\": {\"name\": \"retail_xstore_office\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,retail_xstore_office\", \"severity\": \"info\", \"metadata\": {\"product\": \"retail_xstore_office\", \"shodan-query\": [\"html:\\\"xstoremgwt\\\"\"], \"vendor\": \"oracle\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"xstoremgwt\"], \"case-insensitive\": true}]}], \"_source_file\": \"oracle\\\\retail_xstore_office.yaml\"}, {\"id\": \"weblogic_server\", \"info\": {\"name\": \"weblogic_server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,weblogic_server\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"oracle peoplesoft sign-in\\\"\"], \"google-query\": [\"intitle:\\\"oracle peoplesoft sign-in\\\"\"], \"product\": \"weblogic_server\", \"shodan-query\": [\"http.title:\\\"oracle peoplesoft sign-in\\\"\", \"product:\\\"oracle weblogic\\\"\", \"title:\\\"oracle peoplesoft sign-in\\\"\"], \"vendor\": \"oracle\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>oracle peoplesoft sign-in.*?</title>\"]}]}], \"_source_file\": \"oracle\\\\weblogic_server.yaml\"}, {\"id\": \"opensis\", \"info\": {\"name\": \"opensis\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,opensis\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"opensis\\\"\"], \"google-query\": [\"intitle:\\\"opensis\\\"\"], \"product\": \"opensis\", \"shodan-query\": [\"http.title:\\\"opensis\\\"\", \"title:\\\"opensis\\\"\"], \"vendor\": \"os4ed\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>opensis.*?</title>\"]}]}], \"_source_file\": \"os4ed\\\\opensis.yaml\"}, {\"id\": \"oscommerce\", \"info\": {\"name\": \"oscommerce\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,oscommerce\", \"severity\": \"info\", \"metadata\": {\"product\": \"oscommerce\", \"shodan-query\": [\"html:\\\"oscommerce\\\"\"], \"vendor\": \"oscommerce\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"oscommerce\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"src=\\\"images/oscommerce.png\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"set-cookie: oscsid=\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"oscommerce\\\\oscommerce.yaml\"}, {\"id\": \"geoserver\", \"info\": {\"name\": \"geoserver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,geoserver\", \"severity\": \"info\", \"metadata\": {\"product\": \"geoserver\", \"vendor\": \"osgeo\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/org.geoserver.web.geoserverbasepage/\", \"\\\\webapps\\\\geoserver\", \"class=\\\"geoserver lebeg\", \"geoserver\", \"window.location.replace(\\\"web/\\\");\"], \"case-insensitive\": true}]}], \"_source_file\": \"osgeo\\\\geoserver.yaml\"}, {\"id\": \"simple_realtime_server\", \"info\": {\"name\": \"simple_realtime_server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,simple_realtime_server\", \"severity\": \"info\", \"metadata\": {\"product\": \"simple_realtime_server\", \"shodan-query\": [\"http.favicon.hash:1386054408\"], \"vendor\": \"ossrs\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1386054408\"]}]}], \"_source_file\": \"ossrs\\\\simple_realtime_server.yaml\"}, {\"id\": \"osticket\", \"info\": {\"name\": \"osticket\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,osticket\", \"severity\": \"info\", \"metadata\": {\"product\": \"osticket\", \"vendor\": \"osticket\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"http://osticket.com\\\">osticket.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"osticket\\\\osticket.yaml\"}, {\"id\": \"owncast\", \"info\": {\"name\": \"owncast\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,owncast\", \"severity\": \"info\", \"metadata\": {\"product\": \"owncast\", \"shodan-query\": [\"html:\\\"owncast\\\"\"], \"vendor\": \"owncast_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"owncast\"], \"case-insensitive\": true}]}], \"_source_file\": \"owncast_project\\\\owncast.yaml\"}, {\"id\": \"graph_api\", \"info\": {\"name\": \"graph_api\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,graph_api\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"owncloud\\\"\"], \"google-query\": [\"intitle:\\\"owncloud\\\"\"], \"product\": \"graph_api\", \"shodan-query\": [\"title:\\\"owncloud\\\"\", \"http.title:\\\"owncloud\\\"\"], \"vendor\": \"owncloud\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>owncloud.*?</title>\"]}]}], \"_source_file\": \"owncloud\\\\graph_api.yaml\"}, {\"id\": \"prtg_network_monitor\", \"info\": {\"name\": \"prtg_network_monitor\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,prtg_network_monitor\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"prtg\\\"\"], \"google-query\": [\"intitle:\\\"prtg\\\"\"], \"product\": \"prtg_network_monitor\", \"shodan-query\": [\"title:\\\"prtg\\\"\", \"http.title:\\\"prtg\\\"\"], \"vendor\": \"paessler\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>prtg.*?</title>\"]}]}], \"_source_file\": \"paessler\\\\prtg_network_monitor.yaml\"}, {\"id\": \"rundeck\", \"info\": {\"name\": \"rundeck\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rundeck\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"rundeck-login\\\"\"], \"product\": \"rundeck\", \"shodan-query\": [\"title:\\\"rundeck\\\"\"], \"vendor\": \"pagerduty\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>rundeck.*?</title>\"]}]}], \"_source_file\": \"pagerduty\\\\rundeck.yaml\"}, {\"id\": \"expedition\", \"info\": {\"name\": \"expedition\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,expedition\", \"severity\": \"info\", \"metadata\": {\"product\": \"expedition\", \"shodan-query\": [\"http.favicon.hash:1499876150\"], \"vendor\": \"paloaltonetworks\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1499876150\"]}]}], \"_source_file\": \"paloaltonetworks\\\\expedition.yaml\"}, {\"id\": \"pan-os\", \"info\": {\"name\": \"pan-os\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pan-os\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"-631559155\\\"\"], \"product\": \"pan-os\", \"shodan-query\": [\"http.favicon.hash:\\\"-631559155\\\"\", \"cpe:\\\"cpe:2.3:o:paloaltonetworks:pan-os\\\"\", \"http.favicon.hash:-631559155\"], \"vendor\": \"paloaltonetworks\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-631559155\"]}]}], \"_source_file\": \"paloaltonetworks\\\\pan-os.yaml\"}, {\"id\": \"pandora_fms\", \"info\": {\"name\": \"pandora_fms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pandora_fms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"pandora fms\\\"\"], \"google-query\": [\"intitle:\\\"pandora fms\\\"\"], \"product\": \"pandora_fms\", \"shodan-query\": [\"title:\\\"pandora fms\\\"\", \"http.title:\\\"pandora fms\\\"\"], \"vendor\": \"pandorafms\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>pandora fms.*?</title>\"]}]}], \"_source_file\": \"pandorafms\\\\pandora_fms.yaml\"}, {\"id\": \"papercut\", \"info\": {\"name\": \"papercut\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,papercut\", \"severity\": \"info\", \"metadata\": {\"product\": \"papercut\", \"vendor\": \"papercut\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h1 id=\\\"papercut-user-login-title\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"papercut\\\\papercut.yaml\"}, {\"id\": \"papercut_mf\", \"info\": {\"name\": \"papercut_mf\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,papercut_mf\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"papercut\\\"\", \"body=\\\"content=\\\\\\\"papercut\\\\\\\"\\\"\"], \"product\": \"papercut_mf\", \"shodan-query\": [\"html:\\\"content=\\\\\\\"papercut\\\\\\\"\\\"\", \"http.html:\\\"papercut\\\"\", \"http.html:\\\"content=\\\\\\\"papercut\\\\\\\"\\\"\", \"cpe:\\\"cpe:2.3:a:papercut:papercut_mf\\\"\"], \"vendor\": \"papercut\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=papercut\", \"papercut\"], \"case-insensitive\": true}]}], \"_source_file\": \"papercut\\\\papercut_mf.yaml\"}, {\"id\": \"papercut_ng\", \"info\": {\"name\": \"papercut_ng\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,papercut_ng\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body='content=\\\"papercut'\", \"body=\\\"content=\\\\\\\"papercut\\\\\\\"\\\"\"], \"google-query\": [\"html:'content=\\\"papercut'\"], \"product\": \"papercut_ng\", \"shodan-query\": [\"html:\\\"content=\\\\\\\"papercut\\\\\\\"\\\"\", \"http.html:'content=\\\"papercut'\", \"cpe:\\\"cpe:2.3:a:papercut:papercut_ng\\\"\", \"http.html:\\\"content=\\\\\\\"papercut\\\\\\\"\\\"\"], \"vendor\": \"papercut\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"papercut\", \"content=papercut\"], \"case-insensitive\": true}]}], \"_source_file\": \"papercut\\\\papercut_ng.yaml\"}, {\"id\": \"h-sphere\", \"info\": {\"name\": \"h-sphere\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,h-sphere\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"h-sphere\\\"\", \"title=\\\"parallels h-sphere\\\"\"], \"google-query\": [\"intitle:\\\"h-sphere\\\"\", \"intitle:\\\"parallels h-sphere\\\"\"], \"product\": \"h-sphere\", \"shodan-query\": [\"title:\\\"parallels h-sphere\", \"http.title:\\\"h-sphere\\\"\", \"http.title:\\\"parallels h-sphere\\\"\", \"title:\\\"h-sphere\\\"\"], \"vendor\": \"parallels\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>h-sphere.*?</title>\", \"(?mi)<title[^>]*>parallels h-sphere.*?</title>\"]}]}], \"_source_file\": \"parallels\\\\h-sphere.yaml\"}, {\"id\": \"parse-server\", \"info\": {\"name\": \"parse-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,parse-server\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"parse dashboard\\\"\"], \"product\": \"parse-server\", \"shodan-query\": [\"http.title:\\\"parse server\\\" || \\\"parse-server\\\"\", \"http.title:\\\"parse dashboard\\\"\"], \"vendor\": \"parseplatform\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>\\\"parse-server.*?</title>\", \"(?mi)<title[^>]*>parse dashboard.*?</title>\", \"(?mi)<title[^>]*>parse server\\\".*?</title>\"]}]}], \"_source_file\": \"parseplatform\\\\parse-server.yaml\"}, {\"id\": \"platform\", \"info\": {\"name\": \"platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"platform\", \"shodan-query\": [\"title:\\\"pega\\\"\"], \"vendor\": \"pega\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>pega.*?</title>\"]}]}], \"_source_file\": \"pega\\\\platform.yaml\"}, {\"id\": \"wapples\", \"info\": {\"name\": \"wapples\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wapples\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"intelligent wapples\\\"\"], \"google-query\": [\"intitle:\\\"intelligent wapples\\\"\"], \"product\": \"wapples\", \"shodan-query\": [\"http.title:\\\"intelligent wapples\\\"\"], \"vendor\": \"pentasecurity\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>intelligent wapples.*?</title>\"]}]}], \"_source_file\": \"pentasecurity\\\\wapples.yaml\"}, {\"id\": \"balance_two_firmware\", \"info\": {\"name\": \"balance_two_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,balance_two_firmware\", \"severity\": \"info\", \"metadata\": {\"product\": \"balance_two_firmware\", \"shodan-query\": [\"html:\\\"peplink\\\"\"], \"vendor\": \"peplink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"peplink\"], \"case-insensitive\": true}]}], \"_source_file\": \"peplink\\\\balance_two_firmware.yaml\"}, {\"id\": \"perfsonar\", \"info\": {\"name\": \"perfsonar\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,perfsonar\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"perfsonar toolkit\\\"\"], \"product\": \"perfsonar\", \"vendor\": \"perfsonar\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>perfsonar toolkit.*?</title>\"]}]}], \"_source_file\": \"perfsonar\\\\perfsonar.yaml\"}, {\"id\": \"processplus\", \"info\": {\"name\": \"processplus\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,processplus\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"\\\"process plus\\\" && icon_hash=\\\"1772087922\\\"\"], \"product\": \"processplus\", \"vendor\": \"perkinelmer\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"process plus\"], \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"1772087922\"]}]}], \"_source_file\": \"perkinelmer\\\\processplus.yaml\"}, {\"id\": \"pfblockerng\", \"info\": {\"name\": \"pfblockerng\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pfblockerng\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"pfblockerng\"], \"product\": \"pfblockerng\", \"shodan-query\": [\"pfblockerng\"], \"vendor\": \"pfsense\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"pfblockerng\"], \"case-insensitive\": true}]}], \"_source_file\": \"pfsense\\\\pfblockerng.yaml\"}, {\"id\": \"pfsense\", \"info\": {\"name\": \"pfsense\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pfsense\", \"severity\": \"info\", \"metadata\": {\"product\": \"pfsense\", \"vendor\": \"pfsense\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<h4>login to pfsense</h4>\", \"rubicon communications, llc (netgate)\"], \"case-insensitive\": true}]}], \"_source_file\": \"pfsense\\\\pfsense.yaml\"}, {\"id\": \"pgadmin4\", \"info\": {\"name\": \"pgadmin4\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pgadmin4\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"pgadmin4\"], \"product\": \"pgadmin4\", \"vendor\": \"pgadmin-org\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"pgadmin4\"], \"case-insensitive\": true}]}], \"_source_file\": \"pgadmin-org\\\\pgadmin4.yaml\"}, {\"id\": \"php\", \"info\": {\"name\": \"php\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,php\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"php warning\\\" || \\\"fatal error\\\"\"], \"google-query\": [\"intitle:\\\"php warning\\\" || \\\"fatal error\\\"\"], \"product\": \"php\", \"shodan-query\": [\"cpe:\\\"cpe:2.3:a:php:php\\\"\", \"http.title:\\\"php warning\\\" || \\\"fatal error\\\"\", \"php.ini\", \"the requested resource <code class=\\\"url\\\">\", \"x-powered-by:\\\"php\\\"\"], \"vendor\": \"php\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"fatal error\", \"php.ini\", \"the requested resource <code class=\\\"url\\\">\"], \"case-insensitive\": true}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>\\\"fatal error.*?</title>\", \"(?mi)<title[^>]*>php warning\\\".*?</title>\", \"(?mi)<title[^>]*>php warning.*?</title>\"]}]}], \"_source_file\": \"php\\\\php.yaml\"}, {\"id\": \"phpcms-2008\", \"info\": {\"name\": \"phpcms-2008\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpcms-2008\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"powered by phpcms\\\"\"], \"product\": \"phpcms-2008\", \"shodan-query\": [\"http.html:\\\"powered by phpcms\\\"\"], \"vendor\": \"phpcms\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by phpcms\"], \"case-insensitive\": true}]}], \"_source_file\": \"phpcms\\\\phpcms-2008.yaml\"}, {\"id\": \"phpcms\", \"info\": {\"name\": \"phpcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpcms\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpcms\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\"http://www.phpcms.cn\\\" target=\\\"_blank\\\">phpcms</a>\"], \"case-insensitive\": true}]}], \"_source_file\": \"phpcms\\\\phpcms.yaml\"}, {\"id\": \"phpcollab\", \"info\": {\"name\": \"phpcollab\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpcollab\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpcollab\", \"vendor\": \"phpcollab\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!-- powered by phpcollab\", \"content='phpcollab\"], \"case-insensitive\": true}]}], \"_source_file\": \"phpcollab\\\\phpcollab.yaml\"}, {\"id\": \"art_gallery_management_system\", \"info\": {\"name\": \"art_gallery_management_system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,art_gallery_management_system\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"art gallery management system\\\"\"], \"product\": \"art_gallery_management_system\", \"vendor\": \"phpgurukul\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>art gallery management system.*?</title>\"]}]}], \"_source_file\": \"phpgurukul\\\\art_gallery_management_system.yaml\"}, {\"id\": \"hospital_management_system\", \"info\": {\"name\": \"hospital_management_system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hospital_management_system\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"hospital management system\\\"\"], \"product\": \"hospital_management_system\", \"shodan-query\": [\"http.html:\\\"hospital management system\\\"\"], \"vendor\": \"phpgurukul\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"hospital management system\"], \"case-insensitive\": true}]}], \"_source_file\": \"phpgurukul\\\\hospital_management_system.yaml\"}, {\"id\": \"phpipam\", \"info\": {\"name\": \"phpipam\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpipam\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"phpipam ip address management\\\"\"], \"product\": \"phpipam\", \"shodan-query\": [\"html:\\\"phpipam ip address management\\\"\", \"http.html:\\\"phpipam ip address management\\\"\"], \"vendor\": \"phpipam\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"phpipam ip address management\"], \"case-insensitive\": true}]}], \"_source_file\": \"phpipam\\\\phpipam.yaml\"}, {\"id\": \"callback_widget\", \"info\": {\"name\": \"callback_widget\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,callback_widget\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"phpjabbers\\\"\"], \"product\": \"callback_widget\", \"shodan-query\": [\"html:\\\"phpjabbers\\\"\"], \"vendor\": \"phpjabbers\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"phpjabbers\"], \"case-insensitive\": true}]}], \"_source_file\": \"phpjabbers\\\\callback_widget.yaml\"}, {\"id\": \"food_delivery_script\", \"info\": {\"name\": \"food_delivery_script\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,food_delivery_script\", \"severity\": \"info\", \"metadata\": {\"product\": \"food_delivery_script\", \"shodan-query\": [\"html:\\\"phpjabbers\\\"\"], \"vendor\": \"phpjabbers\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"phpjabbers\"], \"case-insensitive\": true}]}], \"_source_file\": \"phpjabbers\\\\food_delivery_script.yaml\"}, {\"id\": \"fundraising_script\", \"info\": {\"name\": \"fundraising_script\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fundraising_script\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"phpjabbers\\\"\"], \"product\": \"fundraising_script\", \"shodan-query\": [\"html:\\\"phpjabbers\\\"\"], \"vendor\": \"phpjabbers\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"phpjabbers\"], \"case-insensitive\": true}]}], \"_source_file\": \"phpjabbers\\\\fundraising_script.yaml\"}, {\"id\": \"make_an_offer_widget\", \"info\": {\"name\": \"make_an_offer_widget\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,make_an_offer_widget\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"phpjabbers\\\"\"], \"product\": \"make_an_offer_widget\", \"shodan-query\": [\"html:\\\"phpjabbers\\\"\"], \"vendor\": \"phpjabbers\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"phpjabbers\"], \"case-insensitive\": true}]}], \"_source_file\": \"phpjabbers\\\\make_an_offer_widget.yaml\"}, {\"id\": \"shuttle_booking_software\", \"info\": {\"name\": \"shuttle_booking_software\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,shuttle_booking_software\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"php jabbers.com\\\"\"], \"product\": \"shuttle_booking_software\", \"shodan-query\": [\"html:\\\"php jabbers.com\\\"\", \"http.html:\\\"php jabbers.com\\\"\"], \"vendor\": \"phpjabbers\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"php jabbers.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"phpjabbers\\\\shuttle_booking_software.yaml\"}, {\"id\": \"taxi_booking_script\", \"info\": {\"name\": \"taxi_booking_script\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,taxi_booking_script\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"php jabbers.com\\\"\"], \"product\": \"taxi_booking_script\", \"shodan-query\": [\"html:\\\"php jabbers.com\\\"\", \"http.html:\\\"php jabbers.com\\\"\"], \"vendor\": \"phpjabbers\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"php jabbers.com\"], \"case-insensitive\": true}]}], \"_source_file\": \"phpjabbers\\\\taxi_booking_script.yaml\"}, {\"id\": \"ticket_support_script\", \"info\": {\"name\": \"ticket_support_script\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ticket_support_script\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"phpjabbers\\\"\"], \"product\": \"ticket_support_script\", \"shodan-query\": [\"html:\\\"phpjabbers\\\"\"], \"vendor\": \"phpjabbers\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"phpjabbers\"], \"case-insensitive\": true}]}], \"_source_file\": \"phpjabbers\\\\ticket_support_script.yaml\"}, {\"id\": \"yacht_listing_script\", \"info\": {\"name\": \"yacht_listing_script\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yacht_listing_script\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"phpjabbers\\\"\"], \"product\": \"yacht_listing_script\", \"shodan-query\": [\"html:\\\"phpjabbers\\\"\"], \"vendor\": \"phpjabbers\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"phpjabbers\"], \"case-insensitive\": true}]}], \"_source_file\": \"phpjabbers\\\\yacht_listing_script.yaml\"}, {\"id\": \"phpldapadmin\", \"info\": {\"name\": \"phpldapadmin\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpldapadmin\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpldapadmin\", \"shodan-query\": [\"html:\\\"phpldapadmin\\\"\"], \"vendor\": \"phpldapadmin_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"phpldapadmin\"], \"case-insensitive\": true}]}], \"_source_file\": \"phpldapadmin_project\\\\phpldapadmin.yaml\"}, {\"id\": \"phpmyadmin\", \"info\": {\"name\": \"phpmyadmin\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpmyadmin\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpmyadmin\", \"vendor\": \"phpmyadmin\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"href=\\\"phpmyadmin.css.php\", \"pma_password\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"set-cookie: phpmyadmin=\", \"set-cookie: pma_lang=\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"phpmyadmin\\\\phpmyadmin.yaml\"}, {\"id\": \"phpmyfaq\", \"info\": {\"name\": \"phpmyfaq\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpmyfaq\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"phpmyfaq\\\"\"], \"product\": \"phpmyfaq\", \"shodan-query\": [\"http.html:\\\"phpmyfaq\\\"\"], \"vendor\": \"phpmyfaq\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"phpmyfaq\"], \"case-insensitive\": true}]}], \"_source_file\": \"phpmyfaq\\\\phpmyfaq.yaml\"}, {\"id\": \"phpok\", \"info\": {\"name\": \"phpok\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpok\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpok\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1091f8722e63111e50302ecbfdd6e975\", \"aea2803f24d6f4156bde7681f17c3253\"]}, {\"type\": \"word\", \"words\": [\"<meta name=\\\"author\\\" content=\\\"phpok,\"], \"case-insensitive\": true}]}], \"_source_file\": \"phpok\\\\phpok.yaml\"}, {\"id\": \"phppgadmin\", \"info\": {\"name\": \"phppgadmin\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phppgadmin\", \"severity\": \"info\", \"metadata\": {\"product\": \"phppgadmin\", \"vendor\": \"phppgadmin\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"class=\\\"appname\\\">phppgadmin\"], \"case-insensitive\": true}]}], \"_source_file\": \"phppgadmin\\\\phppgadmin.yaml\"}, {\"id\": \"phpshe\", \"info\": {\"name\": \"phpshe\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,phpshe\", \"severity\": \"info\", \"metadata\": {\"product\": \"phpshe\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"phpshe\", \"powered by phpshe\"], \"case-insensitive\": true}]}], \"_source_file\": \"phpshe\\\\phpshe.yaml\"}, {\"id\": \"hospital_management_system\", \"info\": {\"name\": \"hospital_management_system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hospital_management_system\", \"severity\": \"info\", \"metadata\": {\"product\": \"hospital_management_system\", \"shodan-query\": [\"http.html:\\\"hospital management system\\\"\"], \"vendor\": \"phptpoint\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"hospital management system\"], \"case-insensitive\": true}]}], \"_source_file\": \"phptpoint\\\\hospital_management_system.yaml\"}, {\"id\": \"piwigo\", \"info\": {\"name\": \"piwigo\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,piwigo\", \"severity\": \"info\", \"metadata\": {\"product\": \"piwigo\", \"vendor\": \"piwigo\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"generator\\\" content=\\\"piwigo\"], \"case-insensitive\": true}]}], \"_source_file\": \"piwigo\\\\piwigo.yaml\"}, {\"id\": \"obsidian\", \"info\": {\"name\": \"obsidian\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,obsidian\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"plesk obsidian\\\"\", \"body=\\\"plesk obsidian\\\"\"], \"google-query\": [\"intitle:\\\"plesk obsidian\\\"\"], \"product\": \"obsidian\", \"shodan-query\": [\"title:\\\"plesk obsidian\\\"\", \"http.html:\\\"plesk obsidian\\\"\", \"http.title:\\\"plesk obsidian\\\"\"], \"vendor\": \"plesk\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"plesk obsidian\"], \"case-insensitive\": true}]}], \"_source_file\": \"plesk\\\\obsidian.yaml\"}, {\"id\": \"portainer\", \"info\": {\"name\": \"portainer\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,portainer\", \"severity\": \"info\", \"metadata\": {\"product\": \"portainer\", \"vendor\": \"portainer\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ng-app=\\\"portainer\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"portainer\\\\portainer.yaml\"}, {\"id\": \"powerjob\", \"info\": {\"name\": \"powerjob\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,powerjob\", \"severity\": \"info\", \"metadata\": {\"product\": \"powerjob\", \"vendor\": \"powerjob\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>powerjob</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"powerjob\\\\powerjob.yaml\"}, {\"id\": \"basic_pdu_firmware\", \"info\": {\"name\": \"basic_pdu_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,basic_pdu_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"powertek\\\"\"], \"product\": \"basic_pdu_firmware\", \"shodan-query\": [\"http.html:\\\"powertek\\\"\"], \"vendor\": \"powertekpdus\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powertek\"], \"case-insensitive\": true}]}], \"_source_file\": \"powertekpdus\\\\basic_pdu_firmware.yaml\"}, {\"id\": \"poststaticfooter\", \"info\": {\"name\": \"poststaticfooter\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,poststaticfooter\", \"severity\": \"info\", \"metadata\": {\"product\": \"poststaticfooter\", \"shodan-query\": [\"html:\\\"posstaticfooter\\\"\"], \"vendor\": \"prestashop\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"posstaticfooter\"], \"case-insensitive\": true}]}], \"_source_file\": \"prestashop\\\\poststaticfooter.yaml\"}, {\"id\": \"prison_management_system\", \"info\": {\"name\": \"prison_management_system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,prison_management_system\", \"severity\": \"info\", \"metadata\": {\"product\": \"prison_management_system\", \"shodan-query\": [\"title:\\\"prison management system\\\"\"], \"vendor\": \"prison_management_system_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>prison management system.*?</title>\"]}]}], \"_source_file\": \"prison_management_system_project\\\\prison_management_system.yaml\"}, {\"id\": \"processwire\", \"info\": {\"name\": \"processwire\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,processwire\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"processwire\\\"\"], \"product\": \"processwire\", \"shodan-query\": [\"http.html:\\\"processwire\\\"\"], \"vendor\": \"processwire\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"processwire\"], \"case-insensitive\": true}]}], \"_source_file\": \"processwire\\\\processwire.yaml\"}, {\"id\": \"moveit_cloud\", \"info\": {\"name\": \"moveit_cloud\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,moveit_cloud\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=989289239\"], \"product\": \"moveit_cloud\", \"shodan-query\": [\"http.favicon.hash:989289239\"], \"vendor\": \"progress\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"989289239\"]}]}], \"_source_file\": \"progress\\\\moveit_cloud.yaml\"}, {\"id\": \"moveit_transfer\", \"info\": {\"name\": \"moveit_transfer\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,moveit_transfer\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=989289239\"], \"product\": \"moveit_transfer\", \"shodan-query\": [\"http.favicon.hash:989289239\"], \"vendor\": \"progress\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"989289239\"]}]}], \"_source_file\": \"progress\\\\moveit_transfer.yaml\"}, {\"id\": \"telerik_report_server\", \"info\": {\"name\": \"telerik_report_server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,telerik_report_server\", \"severity\": \"info\", \"metadata\": {\"product\": \"telerik_report_server\", \"shodan-query\": [\"title:\\\"log in | telerik report server\\\"\"], \"vendor\": \"progress\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>log in.*?</title>\"]}]}], \"_source_file\": \"progress\\\\telerik_report_server.yaml\"}, {\"id\": \"whatsup_gold\", \"info\": {\"name\": \"whatsup_gold\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,whatsup_gold\", \"severity\": \"info\", \"metadata\": {\"product\": \"whatsup_gold\", \"shodan-query\": [\"html:\\\"whatsup gold\\\"\", \"title:\\\"whatsup gold\\\" http.favicon.hash:-2107233094\"], \"vendor\": \"progress\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"whatsup gold\"], \"case-insensitive\": true}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>whatsup gold\\\" http.favicon.hash:-2107233094.*?</title>\"]}]}], \"_source_file\": \"progress\\\\whatsup_gold.yaml\"}, {\"id\": \"ws_ftp_server\", \"info\": {\"name\": \"ws_ftp_server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ws_ftp_server\", \"severity\": \"info\", \"metadata\": {\"product\": \"ws_ftp_server\", \"shodan-query\": [\"title:\\\"ad hoc transfer\\\"\"], \"vendor\": \"progress\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>ad hoc transfer.*?</title>\"]}]}], \"_source_file\": \"progress\\\\ws_ftp_server.yaml\"}, {\"id\": \"projectsend\", \"info\": {\"name\": \"projectsend\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,projectsend\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"projectsend\\\"\", \"body=\\\"projectsend setup\\\"\", \"body=provided by projectsend\"], \"google-query\": [\"intext:provided by projectsend\"], \"product\": \"projectsend\", \"shodan-query\": [\"http.html:\\\"projectsend\\\"\", \"http.html:\\\"projectsend setup\\\"\", \"http.html:\\\"provided by projectsend\\\"\"], \"vendor\": \"projectsend\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"projectsend\", \"projectsend setup\", \"provided by projectsend\"], \"case-insensitive\": true}]}], \"_source_file\": \"projectsend\\\\projectsend.yaml\"}, {\"id\": \"prometheus\", \"info\": {\"name\": \"prometheus\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,prometheus\", \"severity\": \"info\", \"metadata\": {\"product\": \"prometheus\", \"vendor\": \"prometheus\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>prometheus\"], \"case-insensitive\": true}]}], \"_source_file\": \"prometheus\\\\prometheus.yaml\"}, {\"id\": \"profilepress\", \"info\": {\"name\": \"profilepress\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,profilepress\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/wp-content/plugins/profilepress\\\"\"], \"product\": \"profilepress\", \"vendor\": \"properfraction\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/wp-content/plugins/profilepress\"], \"case-insensitive\": true}]}], \"_source_file\": \"properfraction\\\\profilepress.yaml\"}, {\"id\": \"ui\", \"info\": {\"name\": \"ui\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ui\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"-1477045616\\\"\"], \"product\": \"ui\", \"vendor\": \"provectus\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1477045616\"]}]}], \"_source_file\": \"provectus\\\\ui.yaml\"}, {\"id\": \"proxmox_mail_gateway\", \"info\": {\"name\": \"proxmox_mail_gateway\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,proxmox_mail_gateway\", \"severity\": \"info\", \"metadata\": {\"product\": \"proxmox_mail_gateway\", \"shodan-query\": [\"html:\\\"proxmox = {\\\"\"], \"vendor\": \"proxmox\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"proxmox = {\"], \"case-insensitive\": true}]}], \"_source_file\": \"proxmox\\\\proxmox_mail_gateway.yaml\"}, {\"id\": \"panel\", \"info\": {\"name\": \"panel\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,panel\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"pterodactyl\\\"\", \"icon_hash=\\\"-456405319\\\"\", \"icon_hash=\\\"846001371\\\"\", \"set-cookie: pterodactyl_session=\"], \"product\": \"panel\", \"shodan-query\": [\"title:\\\"pterodactyl\\\"\", \"http.favicon.hash:-456405319\", \"http.favicon.hash:846001371\", \"set-cookie: pterodactyl_session=\"], \"vendor\": \"pterodactyl\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-456405319\", \"846001371\"]}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>pterodactyl.*?</title>\"]}]}], \"_source_file\": \"pterodactyl\\\\panel.yaml\"}, {\"id\": \"open_journal_systems\", \"info\": {\"name\": \"open_journal_systems\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,open_journal_systems\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"pkp-lib\\\"\"], \"product\": \"open_journal_systems\", \"shodan-query\": [\"cpe:\\\"cpe:2.3:a:public_knowledge_project:open_journal_systems\\\"\"], \"vendor\": \"public_knowledge_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"pkp-lib\"], \"case-insensitive\": true}]}], \"_source_file\": \"public_knowledge_project\\\\open_journal_systems.yaml\"}, {\"id\": \"pyload\", \"info\": {\"name\": \"pyload\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pyload\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"login - pyload\\\"\", \"body=\\\"pyload\\\"\", \"title=\\\"pyload\\\"\"], \"google-query\": [\"intitle:\\\"login - pyload\\\"\", \"intitle:\\\"pyload\\\"\"], \"product\": \"pyload\", \"shodan-query\": [\"title:\\\"pyload\\\"\", \"http.title:\\\"login - pyload\\\"\", \"http.html:\\\"pyload\\\"\", \"http.title:\\\"pyload\\\"\", \"html:\\\"pyload\\\"\"], \"vendor\": \"pyload\", \"verified\": true, \"zoomeye-query\": [\"app:\\\"pyload\\\"\"]}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"pyload\"], \"case-insensitive\": true}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>login - pyload.*?</title>\"]}]}], \"_source_file\": \"pyload\\\\pyload.yaml\"}, {\"id\": \"pypiserver\", \"info\": {\"name\": \"pypiserver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pypiserver\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"pypiserver\\\"\"], \"product\": \"pypiserver\", \"shodan-query\": [\"html:\\\"pypiserver\\\"\", \"http.html:\\\"pypiserver\\\"\"], \"vendor\": \"python\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"pypiserver\"], \"case-insensitive\": true}]}], \"_source_file\": \"python\\\\pypiserver.yaml\"}, {\"id\": \"torchserve\", \"info\": {\"name\": \"torchserve\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,torchserve\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"requested method is not allowed, please refer to api document\\\"\"], \"product\": \"torchserve\", \"vendor\": \"pytorch\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"requested method is not allowed, please refer to api document\"], \"case-insensitive\": true}]}], \"_source_file\": \"pytorch\\\\torchserve.yaml\"}, {\"id\": \"qdpm\", \"info\": {\"name\": \"qdpm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,qdpm\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=762074255\"], \"product\": \"qdpm\", \"shodan-query\": [\"http.favicon.hash:762074255\"], \"vendor\": \"qdpm\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"762074255\"]}]}], \"_source_file\": \"qdpm\\\\qdpm.yaml\"}, {\"id\": \"qlik_sense\", \"info\": {\"name\": \"qlik_sense\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,qlik_sense\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"qlik-sense\\\"\", \"title=\\\"qlik-sense\\\"\", \"icon_hash=-74348711\", \"body=\\\"qlik\\\"\"], \"google-query\": [\"intitle:\\\"qlik-sense\\\"\"], \"product\": \"qlik_sense\", \"shodan-query\": [\"html:\\\"qlik\\\"\", \"http.favicon.hash:-74348711\", \"http.html:\\\"qlik\\\"\", \"http.title:\\\"qlik-sense\\\"\"], \"vendor\": \"qlik\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"qlik\"], \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"-74348711\"]}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>qlik-sense.*?</title>\"]}]}], \"_source_file\": \"qlik\\\\qlik_sense.yaml\"}, {\"id\": \"music_station\", \"info\": {\"name\": \"music_station\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,music_station\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"qnap\\\"\"], \"google-query\": [\"intitle:\\\"qnap\\\"\"], \"product\": \"music_station\", \"shodan-query\": [\"http.title:\\\"qnap\\\"\"], \"vendor\": \"qnap\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>qnap.*?</title>\"]}]}], \"_source_file\": \"qnap\\\\music_station.yaml\"}, {\"id\": \"photo_station\", \"info\": {\"name\": \"photo_station\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,photo_station\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"photo station\\\"\", \"title=\\\"qnap\\\"\"], \"google-query\": [\"intitle:\\\"qnap\\\"\", \"intitle:\\\"photo station\\\"\"], \"product\": \"photo_station\", \"shodan-query\": [\"title:\\\"qnap\\\"\", \"http.title:\\\"photo station\\\"\", \"http.title:\\\"qnap\\\"\", \"content-length: 580 \\\"http server 1.0\\\"\"], \"vendor\": \"qnap\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>photo station.*?</title>\", \"(?mi)<title[^>]*>qnap.*?</title>\"]}]}], \"_source_file\": \"qnap\\\\photo_station.yaml\"}, {\"id\": \"qualitor\", \"info\": {\"name\": \"qualitor\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,qualitor\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"qualitor\"], \"product\": \"qualitor\", \"vendor\": \"qualitor\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"qualitor\"], \"case-insensitive\": true}]}], \"_source_file\": \"qualitor\\\\qualitor.yaml\"}, {\"id\": \"kace_systems_management\", \"info\": {\"name\": \"kace_systems_management\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kace_systems_management\", \"severity\": \"info\", \"metadata\": {\"product\": \"kace_systems_management\", \"shodan-query\": [\"html:\\\"k1000 logo\\\"\"], \"vendor\": \"quest\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"k1000 logo\"], \"case-insensitive\": true}]}], \"_source_file\": \"quest\\\\kace_systems_management.yaml\"}, {\"id\": \"kace_system_management_appliance\", \"info\": {\"name\": \"kace_system_management_appliance\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kace_system_management_appliance\", \"severity\": \"info\", \"metadata\": {\"product\": \"kace_system_management_appliance\", \"shodan-query\": [\"title:\\\"kace systems management\\\"\"], \"vendor\": \"quest\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>kace systems management.*?</title>\"]}]}], \"_source_file\": \"quest\\\\kace_system_management_appliance.yaml\"}, {\"id\": \"quixplorer\", \"info\": {\"name\": \"quixplorer\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,quixplorer\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"my download server\\\"\"], \"google-query\": [\"intitle:\\\"my download server\\\"\"], \"product\": \"quixplorer\", \"shodan-query\": [\"http.title:\\\"my download server\\\"\"], \"vendor\": \"quixplorer_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>my download server.*?</title>\"]}]}], \"_source_file\": \"quixplorer_project\\\\quixplorer.yaml\"}, {\"id\": \"raidenmaild\", \"info\": {\"name\": \"raidenmaild\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,raidenmaild\", \"severity\": \"info\", \"metadata\": {\"product\": \"raidenmaild\", \"shodan-query\": [\"html:\\\"raidenmaild\\\"\"], \"vendor\": \"raidenmaild\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"raidenmaild\"], \"case-insensitive\": true}]}], \"_source_file\": \"raidenmaild\\\\raidenmaild.yaml\"}, {\"id\": \"rancher\", \"info\": {\"name\": \"rancher\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rancher\", \"severity\": \"info\", \"metadata\": {\"product\": \"rancher\", \"vendor\": \"rancher\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"51c2a7a38f5eb8b2c5577375a2633827\"]}, {\"type\": \"word\", \"words\": [\"<title>loading&hellip;</title>\", \"ember-basic-dropdown-wormhole\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"rancher\\\\rancher.yaml\"}, {\"id\": \"raspap\", \"info\": {\"name\": \"raspap\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,raspap\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=-1465760059\"], \"product\": \"raspap\", \"shodan-query\": [\"http.favicon.hash:-1465760059\"], \"vendor\": \"raspap\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1465760059\"]}]}], \"_source_file\": \"raspap\\\\raspap.yaml\"}, {\"id\": \"ray\", \"info\": {\"name\": \"ray\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ray\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"ray dashboard\\\"\", \"icon_hash=463802404\"], \"product\": \"ray\", \"shodan-query\": [\"http.favicon.hash:463802404\", \"http.html:\\\"ray dashboard\\\"\", \"html:\\\"ray dashboard\\\"\"], \"vendor\": \"ray_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ray dashboard\"], \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"463802404\"]}]}], \"_source_file\": \"ray_project\\\\ray.yaml\"}, {\"id\": \"rconfig\", \"info\": {\"name\": \"rconfig\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rconfig\", \"severity\": \"info\", \"metadata\": {\"product\": \"rconfig\", \"vendor\": \"rconfig\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"rconfiglogo\"], \"case-insensitive\": true}]}], \"_source_file\": \"rconfig\\\\rconfig.yaml\"}, {\"id\": \"redash\", \"info\": {\"name\": \"redash\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,redash\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=698624197\"], \"product\": \"redash\", \"shodan-query\": [\"http.favicon.hash:698624197\"], \"vendor\": \"redash\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"698624197\"]}]}], \"_source_file\": \"redash\\\\redash.yaml\"}, {\"id\": \"jboss_enterprise_application_platform\", \"info\": {\"name\": \"jboss_enterprise_application_platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jboss_enterprise_application_platform\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"jboss\\\"\"], \"google-query\": [\"intitle:\\\"jboss\\\"\"], \"product\": \"jboss_enterprise_application_platform\", \"shodan-query\": [\"http.title:\\\"jboss\\\"\", \"cpe:\\\"cpe:2.3:a:redhat:jboss_enterprise_application_platform\\\"\", \"title:\\\"jboss\\\"\"], \"vendor\": \"redhat\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>jboss.*?</title>\"]}]}], \"_source_file\": \"redhat\\\\jboss_enterprise_application_platform.yaml\"}, {\"id\": \"jbpm\", \"info\": {\"name\": \"jbpm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jbpm\", \"severity\": \"info\", \"metadata\": {\"product\": \"jbpm\", \"shodan-query\": [\"html:\\\"jbossws\\\"\"], \"vendor\": \"redhat\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"jbossws\"], \"case-insensitive\": true}]}], \"_source_file\": \"redhat\\\\jbpm.yaml\"}, {\"id\": \"keycloak\", \"info\": {\"name\": \"keycloak\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,keycloak\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"keycloak\\\"\", \"icon_hash=-1105083093\", \"body=\\\"keycloak\\\"\"], \"google-query\": [\"intitle:\\\"keycloak\\\"\"], \"product\": \"keycloak\", \"shodan-query\": [\"title:\\\"keycloak\\\"\", \"http.title:\\\"keycloak\\\"\", \"http.html:\\\"keycloak\\\"\", \"http.favicon.hash:-1105083093\", \"html:\\\"keycloak\\\"\"], \"vendor\": \"redhat\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"keycloak\"], \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"-1105083093\"]}]}], \"_source_file\": \"redhat\\\\keycloak.yaml\"}, {\"id\": \"openshift_origin\", \"info\": {\"name\": \"openshift_origin\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,openshift_origin\", \"severity\": \"info\", \"metadata\": {\"product\": \"openshift_origin\", \"shodan-query\": [\"title:\\\"openshift\\\"\"], \"vendor\": \"redhat\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>openshift.*?</title>\"]}]}], \"_source_file\": \"redhat\\\\openshift_origin.yaml\"}, {\"id\": \"http_file_server\", \"info\": {\"name\": \"http_file_server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,http_file_server\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=2124459909\"], \"product\": \"http_file_server\", \"shodan-query\": [\"http.favicon.hash:2124459909\"], \"vendor\": \"rejetto\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"2124459909\"]}]}], \"_source_file\": \"rejetto\\\\http_file_server.yaml\"}, {\"id\": \"relevanssi\", \"info\": {\"name\": \"relevanssi\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,relevanssi\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"/wp-content/plugins/relevanssi/\"], \"product\": \"relevanssi\", \"vendor\": \"relevanssi\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/wp-content/plugins/relevanssi/\"], \"case-insensitive\": true}]}], \"_source_file\": \"relevanssi\\\\relevanssi.yaml\"}, {\"id\": \"e1_zoom\", \"info\": {\"name\": \"e1_zoom\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,e1_zoom\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"reolink\\\"\"], \"google-query\": [\"intitle:\\\"reolink\\\"\"], \"product\": \"e1_zoom\", \"shodan-query\": [\"http.title:\\\"reolink\\\"\"], \"vendor\": \"reolink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>reolink.*?</title>\"]}]}], \"_source_file\": \"reolink\\\\e1_zoom.yaml\"}, {\"id\": \"e1_zoom_firmware\", \"info\": {\"name\": \"e1_zoom_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,e1_zoom_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"reolink\\\"\"], \"google-query\": [\"intitle:\\\"reolink\\\"\"], \"product\": \"e1_zoom_firmware\", \"shodan-query\": [\"http.title:\\\"reolink\\\"\"], \"vendor\": \"reolink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>reolink.*?</title>\"]}]}], \"_source_file\": \"reolink\\\\e1_zoom_firmware.yaml\"}, {\"id\": \"repetier-server\", \"info\": {\"name\": \"repetier-server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,repetier-server\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"repetier-server\\\"\"], \"google-query\": [\"intitle:\\\"repetier-server\\\"\"], \"product\": \"repetier-server\", \"shodan-query\": [\"title:\\\"repetier-server\\\"\", \"http.title:\\\"repetier-server\\\"\"], \"vendor\": \"repetier-server\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>repetier-server.*?</title>\"]}]}], \"_source_file\": \"repetier-server\\\\repetier-server.yaml\"}, {\"id\": \"reprise_license_manager\", \"info\": {\"name\": \"reprise_license_manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,reprise_license_manager\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"reprise license manager\\\"\", \"body=\\\"reprise license\\\"\"], \"google-query\": [\"inurl:\\\"/goforms/menu\\\"\"], \"product\": \"reprise_license_manager\", \"shodan-query\": [\"http.html:\\\"reprise license\\\"\", \"http.html:\\\"reprise license manager\\\"\"], \"vendor\": \"reprisesoftware\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"reprise license\", \"reprise license manager\"], \"case-insensitive\": true}]}], \"_source_file\": \"reprisesoftware\\\\reprise_license_manager.yaml\"}, {\"id\": \"reqlogic\", \"info\": {\"name\": \"reqlogic\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,reqlogic\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"reqlogic\\\"\"], \"product\": \"reqlogic\", \"shodan-query\": [\"http.html:\\\"reqlogic\\\"\"], \"vendor\": \"reqlogic\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"reqlogic\"], \"case-insensitive\": true}]}], \"_source_file\": \"reqlogic\\\\reqlogic.yaml\"}, {\"id\": \"revive_adserver\", \"info\": {\"name\": \"revive_adserver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,revive_adserver\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=106844876\", \"title=\\\"revive adserver\\\"\"], \"google-query\": [\"intitle:\\\"revive adserver\\\"\"], \"product\": \"revive_adserver\", \"shodan-query\": [\"http.title:\\\"revive adserver\\\"\", \"http.favicon.hash:106844876\"], \"vendor\": \"revive-adserver\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"106844876\"]}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>revive adserver.*?</title>\"]}]}], \"_source_file\": \"revive-adserver\\\\revive_adserver.yaml\"}, {\"id\": \"revive_adserver\", \"info\": {\"name\": \"revive_adserver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,revive_adserver\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=106844876\", \"title=\\\"revive adserver\\\"\"], \"google-query\": [\"intitle:\\\"revive adserver\\\"\"], \"product\": \"revive_adserver\", \"shodan-query\": [\"http.favicon.hash:106844876\", \"http.title:\\\"revive adserver\\\"\"], \"vendor\": \"revive-sas\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"106844876\"]}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>revive adserver.*?</title>\"]}]}], \"_source_file\": \"revive-sas\\\\revive_adserver.yaml\"}, {\"id\": \"turbomeeting\", \"info\": {\"name\": \"turbomeeting\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,turbomeeting\", \"severity\": \"info\", \"metadata\": {\"product\": \"turbomeeting\", \"shodan-query\": [\"html:\\\"turbomeeting\\\"\"], \"vendor\": \"rhubcom\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"turbomeeting\"], \"case-insensitive\": true}]}], \"_source_file\": \"rhubcom\\\\turbomeeting.yaml\"}, {\"id\": \"netman_204_firmware\", \"info\": {\"name\": \"netman_204_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netman_204_firmware\", \"severity\": \"info\", \"metadata\": {\"product\": \"netman_204_firmware\", \"shodan-query\": [\"title:\\\"netman\\\"\", \"html:\\\"ups network management card 4\\\"\"], \"vendor\": \"riello-ups\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ups network management card 4\"], \"case-insensitive\": true}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>netman.*?</title>\"]}]}], \"_source_file\": \"riello-ups\\\\netman_204_firmware.yaml\"}, {\"id\": \"ritecms\", \"info\": {\"name\": \"ritecms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ritecms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"ritecms\\\"\"], \"product\": \"ritecms\", \"vendor\": \"ritecms\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>ritecms.*?</title>\"]}]}], \"_source_file\": \"ritecms\\\\ritecms.yaml\"}, {\"id\": \"rocket.chat\", \"info\": {\"name\": \"rocket.chat\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rocket.chat\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"rocket.chat\\\"\"], \"google-query\": [\"intitle:\\\"rocket.chat\\\"\"], \"product\": \"rocket.chat\", \"shodan-query\": [\"http.title:\\\"rocket.chat\\\"\"], \"vendor\": \"rocket.chat\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>rocket.chat.*?</title>\"]}]}], \"_source_file\": \"rocket.chat\\\\rocket.chat.yaml\"}, {\"id\": \"rocket-lms\", \"info\": {\"name\": \"rocket-lms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rocket-lms\", \"severity\": \"info\", \"metadata\": {\"product\": \"rocket-lms\", \"shodan-query\": [\"html:\\\"rocket lms\\\"\"], \"vendor\": \"rocketsoft\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"rocket lms\"], \"case-insensitive\": true}]}], \"_source_file\": \"rocketsoft\\\\rocket-lms.yaml\"}, {\"id\": \"roundcube\", \"info\": {\"name\": \"roundcube\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,roundcube\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"roundcube_sessid\"], \"product\": \"roundcube\", \"shodan-query\": [\"http.component:\\\"roundcube\\\"\"], \"vendor\": \"roundcube\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"roundcube_sessid\"], \"case-insensitive\": true}]}], \"_source_file\": \"roundcube\\\\roundcube.yaml\"}, {\"id\": \"roundcube-webmail\", \"info\": {\"name\": \"roundcube-webmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,roundcube-webmail\", \"severity\": \"info\", \"metadata\": {\"product\": \"roundcube-webmail\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"ef9c0362bf20a086bb7c2e8ea346b9f0\"]}, {\"type\": \"word\", \"words\": [\"<title>roundcube\"], \"case-insensitive\": true}]}], \"_source_file\": \"roundcube\\\\webmail.yaml\"}, {\"id\": \"roxy-wi\", \"info\": {\"name\": \"roxy-wi\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,roxy-wi\", \"severity\": \"info\", \"metadata\": {\"product\": \"roxy-wi\", \"vendor\": \"roxy-wi\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"115a65bda90efe228d692227dc196f74\"]}, {\"type\": \"word\", \"words\": [\"roxy-wi\"], \"case-insensitive\": true}]}], \"_source_file\": \"roxy-wi\\\\roxy-wi.yaml\"}, {\"id\": \"roxy_fileman\", \"info\": {\"name\": \"roxy_fileman\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,roxy_fileman\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"roxy file manager\\\"\"], \"google-query\": [\"intitle:\\\"roxy file manager\\\"\"], \"product\": \"roxy_fileman\", \"shodan-query\": [\"http.title:\\\"roxy file manager\\\"\"], \"vendor\": \"roxyfileman\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>roxy file manager.*?</title>\"]}]}], \"_source_file\": \"roxyfileman\\\\roxy_fileman.yaml\"}, {\"id\": \"rpcms\", \"info\": {\"name\": \"rpcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rpcms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"rpcms\\\"\"], \"product\": \"rpcms\", \"shodan-query\": [\"http.html:\\\"rpcms\\\"\"], \"vendor\": \"rpcms\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"rpcms\"], \"case-insensitive\": true}]}], \"_source_file\": \"rpcms\\\\rpcms.yaml\"}, {\"id\": \"connect\", \"info\": {\"name\": \"connect\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,connect\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"rstudio-connect\\\"\", \"title=\\\"openvpn connect\\\"\"], \"google-query\": [\"intitle:\\\"openvpn connect\\\"\"], \"product\": \"connect\", \"shodan-query\": [\"http.favicon.hash:217119619\", \"http.title:\\\"openvpn connect\\\"\"], \"vendor\": \"rstudio\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"217119619\"]}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>openvpn connect.*?</title>\"]}]}], \"_source_file\": \"rstudio\\\\connect.yaml\"}, {\"id\": \"ruckus_wireless_admin\", \"info\": {\"name\": \"ruckus_wireless_admin\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ruckus_wireless_admin\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"ruckus wireless\\\"\"], \"google-query\": [\"intitle:\\\"ruckus wireless\\\"\"], \"product\": \"ruckus_wireless_admin\", \"shodan-query\": [\"title:\\\"ruckus wireless\\\"\", \"http.title:\\\"ruckus wireless\\\"\"], \"vendor\": \"ruckuswireless\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>ruckus wireless.*?</title>\"]}]}], \"_source_file\": \"ruckuswireless\\\\ruckus_wireless_admin.yaml\"}, {\"id\": \"rebuild\", \"info\": {\"name\": \"rebuild\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rebuild\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"871154672\\\"\"], \"product\": \"rebuild\", \"shodan-query\": [\"http.favicon.hash:\\\"871154672\\\"\"], \"vendor\": \"ruifang-tech\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"871154672\"]}]}], \"_source_file\": \"ruifang-tech\\\\rebuild.yaml\"}, {\"id\": \"rg-ew1200g_firmware\", \"info\": {\"name\": \"rg-ew1200g_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rg-ew1200g_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"app.2fe6356cdd1ddd0eb8d6317d1a48d379.css\\\"\"], \"product\": \"rg-ew1200g_firmware\", \"shodan-query\": [\"http.html:\\\"app.2fe6356cdd1ddd0eb8d6317d1a48d379.css\\\"\"], \"vendor\": \"ruijie\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"app.2fe6356cdd1ddd0eb8d6317d1a48d379.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"ruijie\\\\rg-ew1200g_firmware.yaml\"}, {\"id\": \"rg-nbs2009g-p,-rg-nbs2009g-p_firmware\", \"info\": {\"name\": \"rg-nbs2009g-p, rg-nbs2009g-p_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rg-nbs2009g-p, rg-nbs2009g-p_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"ruijie.com.cn\\\"\"], \"product\": \"rg-nbs2009g-p, rg-nbs2009g-p_firmware\", \"vendor\": \"ruijie\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ruijie.com.cn\"], \"case-insensitive\": true}]}], \"_source_file\": \"ruijie\\\\rg-nbs2009g-p, rg-nbs2009g-p_firmware.yaml\"}, {\"id\": \"rg-uac\", \"info\": {\"name\": \"rg-uac\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rg-uac\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"rg-uac登录页面\\\" && body=\\\"admin\\\"\", \"title=\\\"rg-uac登录页面\\\"\"], \"product\": \"rg-uac\", \"vendor\": \"ruijie\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>rg-uac登录页面.*?</title>\"]}, {\"type\": \"word\", \"words\": [\"bbs.ruijie.com.cn\", \"锐捷统一上网行为管理与审计系统\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"src='images/free_login.png'\"], \"case-insensitive\": true}]}], \"_source_file\": \"ruijie\\\\rg-uac.yaml\"}, {\"id\": \"rg-uac_firmware\", \"info\": {\"name\": \"rg-uac_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rg-uac_firmware\", \"severity\": \"info\", \"metadata\": {\"product\": \"rg-uac_firmware\", \"shodan-query\": [\"http.html:\\\"get_verify_info\\\"\"], \"vendor\": \"ruijie\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"get_verify_info\"], \"case-insensitive\": true}]}], \"_source_file\": \"ruijie\\\\rg-uac_firmware.yaml\"}, {\"id\": \"rg-ew1200g_firmware\", \"info\": {\"name\": \"rg-ew1200g_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rg-ew1200g_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"app.2fe6356cdd1ddd0eb8d6317d1a48d379.css\\\"\"], \"product\": \"rg-ew1200g_firmware\", \"shodan-query\": [\"http.html:\\\"app.2fe6356cdd1ddd0eb8d6317d1a48d379.css\\\"\"], \"vendor\": \"ruijienetworks\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"app.2fe6356cdd1ddd0eb8d6317d1a48d379.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"ruijienetworks\\\\rg-ew1200g_firmware.yaml\"}, {\"id\": \"rukovoditel\", \"info\": {\"name\": \"rukovoditel\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rukovoditel\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=-1499940355\"], \"product\": \"rukovoditel\", \"shodan-query\": [\"http.favicon.hash:-1499940355\"], \"vendor\": \"rukovoditel\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1499940355\"]}]}], \"_source_file\": \"rukovoditel\\\\rukovoditel.yaml\"}, {\"id\": \"worldserver\", \"info\": {\"name\": \"worldserver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,worldserver\", \"severity\": \"info\", \"metadata\": {\"product\": \"worldserver\", \"shodan-query\": [\"title:\\\"worldserver\\\"\"], \"vendor\": \"rws\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>worldserver.*?</title>\"]}]}], \"_source_file\": \"rws\\\\worldserver.yaml\"}, {\"id\": \"suitecrm\", \"info\": {\"name\": \"suitecrm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,suitecrm\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"suitecrm\\\"\"], \"google-query\": [\"intitle:\\\"suitecrm\\\"\"], \"product\": \"suitecrm\", \"shodan-query\": [\"title:\\\"suitecrm\\\"\", \"http.title:\\\"suitecrm\\\"\"], \"vendor\": \"salesagility\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>suitecrm.*?</title>\"]}]}], \"_source_file\": \"salesagility\\\\suitecrm.yaml\"}, {\"id\": \"saltstack\", \"info\": {\"name\": \"saltstack\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,saltstack\", \"severity\": \"info\", \"metadata\": {\"product\": \"saltstack\", \"vendor\": \"saltstack\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>saltstack</title>\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"server: tornadoserver\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"saltstack\\\\saltstack.yaml\"}, {\"id\": \"scx-6555n\", \"info\": {\"name\": \"scx-6555n\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,scx-6555n\", \"severity\": \"info\", \"metadata\": {\"product\": \"scx-6555n\", \"shodan-query\": [\"title:\\\"syncthru web service\\\"\"], \"vendor\": \"samsung\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>syncthru web service.*?</title>\"]}]}], \"_source_file\": \"samsung\\\\scx-6555n.yaml\"}, {\"id\": \"next-gen_application_firewall\", \"info\": {\"name\": \"next-gen_application_firewall\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,next-gen_application_firewall\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"sangfor | ngaf\\\"\"], \"product\": \"next-gen_application_firewall\", \"vendor\": \"sangfor\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>sangfor.*?</title>\"]}]}], \"_source_file\": \"sangfor\\\\next-gen_application_firewall.yaml\"}, {\"id\": \"sangfor\", \"info\": {\"name\": \"sangfor\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sangfor\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"sangfor\\\"\", \"fid=\\\"iaytna57019/kadk8nev7g==\\\"\", \"ishighperformance : !!sfishighperformance\", \"app=\\\"sangfor-应用交付管理系统\\\"\", \"app=\\\"sangfor-应用交付报表系统\\\"\"], \"product\": \"sangfor\", \"vendor\": \"sangfor\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ishighperformance : !!sfishighperformance\"], \"case-insensitive\": true}]}], \"_source_file\": \"sangfor\\\\sangfor.yaml\"}, {\"id\": \"freepbx\", \"info\": {\"name\": \"freepbx\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,freepbx\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"freepbx\\\"\", \"icon_hash=\\\"-1908328911\\\"\", \"icon_hash=\\\"1574423538\\\"\"], \"product\": \"freepbx\", \"shodan-query\": [\"http.title:\\\"freepbx\\\"\", \"http.favicon.hash:-1908328911\", \"http.favicon.hash:1574423538\"], \"vendor\": \"sangoma\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1908328911\", \"1574423538\"]}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>freepbx.*?</title>\"]}]}], \"_source_file\": \"sangoma\\\\freepbx.yaml\"}, {\"id\": \"sante_pacs_server\", \"info\": {\"name\": \"sante_pacs_server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sante_pacs_server\", \"severity\": \"info\", \"metadata\": {\"product\": \"sante_pacs_server\", \"shodan-query\": [\"http.favicon.hash:1185161484\"], \"vendor\": \"santesoft\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1185161484\"]}]}], \"_source_file\": \"santesoft\\\\sante_pacs_server.yaml\"}, {\"id\": \"content_server\", \"info\": {\"name\": \"content_server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,content_server\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=-266008933\"], \"product\": \"content_server\", \"shodan-query\": [\"http.favicon.hash:-266008933\"], \"vendor\": \"sap\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-266008933\"]}]}], \"_source_file\": \"sap\\\\content_server.yaml\"}, {\"id\": \"hybris\", \"info\": {\"name\": \"hybris\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,hybris\", \"severity\": \"info\", \"metadata\": {\"product\": \"hybris\", \"shodan-query\": [\"title:\\\"hybris\\\"\"], \"vendor\": \"sap\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>hybris.*?</title>\"]}]}], \"_source_file\": \"sap\\\\hybris.yaml\"}, {\"id\": \"knowledge_warehouse\", \"info\": {\"name\": \"knowledge_warehouse\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,knowledge_warehouse\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=-266008933\"], \"product\": \"knowledge_warehouse\", \"shodan-query\": [\"http.favicon.hash:-266008933\"], \"vendor\": \"sap\", \"verified\": true, \"zoomeye-query\": [\"+app:\\\"sap netweaver application server httpd\"]}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-266008933\"]}]}], \"_source_file\": \"sap\\\\knowledge_warehouse.yaml\"}, {\"id\": \"netweaver\", \"info\": {\"name\": \"netweaver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netweaver\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=-266008933\"], \"product\": \"netweaver\", \"shodan-query\": [\"http.favicon.hash:-266008933\", \"cpe:\\\"cpe:2.3:a:sap:netweaver\\\"\"], \"vendor\": \"sap\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-266008933\"]}]}], \"_source_file\": \"sap\\\\netweaver.yaml\"}, {\"id\": \"netweaver_application_server_java\", \"info\": {\"name\": \"netweaver_application_server_java\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netweaver_application_server_java\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=-266008933\"], \"product\": \"netweaver_application_server_java\", \"shodan-query\": [\"http.favicon.hash:-266008933\"], \"vendor\": \"sap\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-266008933\"]}]}], \"_source_file\": \"sap\\\\netweaver_application_server_java.yaml\"}, {\"id\": \"netweaver_development_infrastructure\", \"info\": {\"name\": \"netweaver_development_infrastructure\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,netweaver_development_infrastructure\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"sap netweaver\\\"\"], \"product\": \"netweaver_development_infrastructure\", \"shodan-query\": [\"html:\\\"sap netweaver\\\"\", \"http.html:\\\"sap netweaver\\\"\"], \"vendor\": \"sap\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"sap netweaver\"], \"case-insensitive\": true}]}], \"_source_file\": \"sap\\\\netweaver_development_infrastructure.yaml\"}, {\"id\": \"sap_web_application_server\", \"info\": {\"name\": \"sap_web_application_server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sap_web_application_server\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"sap business server pages team\\\"\"], \"product\": \"sap_web_application_server\", \"shodan-query\": [\"html:\\\"sap business server pages team\\\"\", \"http.html:\\\"sap business server pages team\\\"\"], \"vendor\": \"sap\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"sap business server pages team\"], \"case-insensitive\": true}]}], \"_source_file\": \"sap\\\\sap_web_application_server.yaml\"}, {\"id\": \"apc-network-management-card\", \"info\": {\"name\": \"apc-network-management-card\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,apc-network-management-card\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"apc | log on\\\"\"], \"product\": \"apc-network-management-card\", \"shodan-query\": [\"title:\\\"apc | log on\\\"\"], \"vendor\": \"schneider-electric\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>apc.*?</title>\"]}]}], \"_source_file\": \"schneider-electric\\\\apc-network-management-card.yaml\"}, {\"id\": \"evlink_city_evc1s22p4_firmware\", \"info\": {\"name\": \"evlink_city_evc1s22p4_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,evlink_city_evc1s22p4_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"evse web interface\\\"\"], \"google-query\": [\"intitle:\\\"evse web interface\\\"\"], \"product\": \"evlink_city_evc1s22p4_firmware\", \"shodan-query\": [\"title:\\\"evse web interface\\\"\", \"http.title:\\\"evse web interface\\\"\"], \"vendor\": \"schneider-electric\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>evse web interface.*?</title>\"]}]}], \"_source_file\": \"schneider-electric\\\\evlink_city_evc1s22p4_firmware.yaml\"}, {\"id\": \"pelco_videoxpert\", \"info\": {\"name\": \"pelco_videoxpert\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pelco_videoxpert\", \"severity\": \"info\", \"metadata\": {\"product\": \"pelco_videoxpert\", \"shodan-query\": [\"title:\\\"videoxpert\\\"\"], \"vendor\": \"schneider-electric\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>videoxpert.*?</title>\"]}]}], \"_source_file\": \"schneider-electric\\\\pelco_videoxpert.yaml\"}, {\"id\": \"spacelogic_c-bus_home_controller_firmware\", \"info\": {\"name\": \"spacelogic_c-bus_home_controller_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,spacelogic_c-bus_home_controller_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"spacelogic c-bus\\\"\"], \"product\": \"spacelogic_c-bus_home_controller_firmware\", \"shodan-query\": [\"html:\\\"spacelogic c-bus\\\"\", \"http.html:\\\"spacelogic c-bus\\\"\"], \"vendor\": \"schneider-electric\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"spacelogic c-bus\"], \"case-insensitive\": true}]}], \"_source_file\": \"schneider-electric\\\\spacelogic_c-bus_home_controller_firmware.yaml\"}, {\"id\": \"ads_pro\", \"info\": {\"name\": \"ads_pro\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ads_pro\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/wp-content/plugins/ap-plugin-scripteo\\\"\"], \"product\": \"ads_pro\", \"vendor\": \"scripteo\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/wp-content/plugins/ap-plugin-scripteo\"], \"case-insensitive\": true}]}], \"_source_file\": \"scripteo\\\\ads_pro.yaml\"}, {\"id\": \"seafile\", \"info\": {\"name\": \"seafile\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,seafile\", \"severity\": \"info\", \"metadata\": {\"product\": \"seafile\", \"vendor\": \"seafile\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"css/seahub.min.css\"], \"case-insensitive\": true}]}], \"_source_file\": \"seafile\\\\seafile.yaml\"}, {\"id\": \"nas_os\", \"info\": {\"name\": \"nas_os\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nas_os\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"seagate nas - seagate\\\"\"], \"google-query\": [\"intitle:\\\"seagate nas - seagate\\\"\"], \"product\": \"nas_os\", \"shodan-query\": [\"http.title:\\\"seagate nas - seagate\\\"\"], \"vendor\": \"seagate\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>seagate nas - seagate.*?</title>\"]}]}], \"_source_file\": \"seagate\\\\nas_os.yaml\"}, {\"id\": \"unified_threat_management\", \"info\": {\"name\": \"unified_threat_management\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,unified_threat_management\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"securepoint utm\\\"\"], \"google-query\": [\"intitle:\\\"securepoint utm\\\"\"], \"product\": \"unified_threat_management\", \"shodan-query\": [\"title:\\\"securepoint utm\\\"\", \"http.title:\\\"securepoint utm\\\"\"], \"vendor\": \"securepoint\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>securepoint utm.*?</title>\"]}]}], \"_source_file\": \"securepoint\\\\unified_threat_management.yaml\"}, {\"id\": \"seeddms\", \"info\": {\"name\": \"seeddms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,seeddms\", \"severity\": \"info\", \"metadata\": {\"product\": \"seeddms\", \"shodan-query\": [\"http.title:\\\"seeddms\\\"\"], \"vendor\": \"seeddms\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>seeddms.*?</title>\"]}]}], \"_source_file\": \"seeddms\\\\seeddms.yaml\"}, {\"id\": \"servicenow\", \"info\": {\"name\": \"servicenow\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,servicenow\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"servicenow\\\"\", \"icon_hash=1701804003\"], \"google-query\": [\"intitle:\\\"servicenow\\\"\"], \"product\": \"servicenow\", \"shodan-query\": [\"http.title:\\\"servicenow\\\"\", \"http.favicon.hash:1701804003\", \"http.favicon.hash:\\\"1701804003\\\"\"], \"vendor\": \"servicenow\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1701804003\"]}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>servicenow.*?</title>\"]}]}], \"_source_file\": \"servicenow\\\\servicenow.yaml\"}, {\"id\": \"cluster_control\", \"info\": {\"name\": \"cluster_control\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cluster_control\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"160707013\\\" || icon_hash=\\\"-1815707560\\\"\"], \"product\": \"cluster_control\", \"vendor\": \"severalnines\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1815707560\", \"160707013\"]}]}], \"_source_file\": \"severalnines\\\\cluster_control.yaml\"}, {\"id\": \"sonlogger\", \"info\": {\"name\": \"sonlogger\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sonlogger\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"sonlogger\\\"\"], \"product\": \"sonlogger\", \"vendor\": \"sfcyazilim\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"sonlogger\"], \"case-insensitive\": true}]}], \"_source_file\": \"sfcyazilim\\\\sonlogger.yaml\"}, {\"id\": \"shokoserver\", \"info\": {\"name\": \"shokoserver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,shokoserver\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"shoko web ui\\\"\"], \"product\": \"shokoserver\", \"vendor\": \"shokoanime\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>shoko web ui.*?</title>\"]}]}], \"_source_file\": \"shokoanime\\\\shokoserver.yaml\"}, {\"id\": \"shopex\", \"info\": {\"name\": \"shopex\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,shopex\", \"severity\": \"info\", \"metadata\": {\"product\": \"shopex\", \"vendor\": \"shopex\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"@author litie[aita]shopex.cn\", \"content=\\\"shopex\", \"http://www.shopex.cn' target='_blank'\"], \"case-insensitive\": true}]}], \"_source_file\": \"shopex\\\\shopex.yaml\"}, {\"id\": \"shopxo\", \"info\": {\"name\": \"shopxo\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,shopxo\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"shopxo企业级b2c电商系统提供商\\\"\"], \"product\": \"shopxo\", \"shodan-query\": [\"title:\\\"shopxo企业级b2c电商系统提供商\\\"\"], \"vendor\": \"shopxo\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>shopxo企业级b2c电商系统提供商.*?</title>\"]}, {\"type\": \"favicon\", \"hash\": [\"6774ad0b380e1ffeee4e380352e51f15\"]}]}], \"_source_file\": \"shopxo\\\\shopxo.yaml\"}, {\"id\": \"xfilesharing\", \"info\": {\"name\": \"xfilesharing\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xfilesharing\", \"severity\": \"info\", \"metadata\": {\"product\": \"xfilesharing\", \"shodan-query\": [\"html:\\\"/?op=registration\\\" \\\"openssl\\\"\"], \"vendor\": \"sibsoft\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/?op=registration\\\" \\\"openssl\"], \"case-insensitive\": true}]}], \"_source_file\": \"sibsoft\\\\xfilesharing.yaml\"}, {\"id\": \"sinema_remote_connect_server\", \"info\": {\"name\": \"sinema_remote_connect_server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sinema_remote_connect_server\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"logon - sinema remote connect\\\"\"], \"google-query\": [\"intitle:\\\"logon - sinema remote connect\\\"\"], \"product\": \"sinema_remote_connect_server\", \"shodan-query\": [\"title:\\\"logon - sinema remote connect\\\"\", \"http.title:\\\"logon - sinema remote connect\\\"\"], \"vendor\": \"siemens\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>logon - sinema remote connect.*?</title>\"]}]}], \"_source_file\": \"siemens\\\\sinema_remote_connect_server.yaml\"}, {\"id\": \"pmb\", \"info\": {\"name\": \"pmb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pmb\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"pmb group\\\"\", \"icon_hash=1469328760\"], \"product\": \"pmb\", \"shodan-query\": [\"http.favicon.hash:1469328760\", \"http.html:\\\"pmb group\\\"\"], \"vendor\": \"sigb\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"pmb group\"], \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"1469328760\"]}]}], \"_source_file\": \"sigb\\\\pmb.yaml\"}, {\"id\": \"simplehelp\", \"info\": {\"name\": \"simplehelp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,simplehelp\", \"severity\": \"info\", \"metadata\": {\"product\": \"simplehelp\", \"shodan-query\": [\"html:\\\"simplehelp\\\"\"], \"vendor\": \"simple-help\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"simplehelp\"], \"case-insensitive\": true}]}], \"_source_file\": \"simple-help\\\\simplehelp.yaml\"}, {\"id\": \"gnuboard\", \"info\": {\"name\": \"gnuboard\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gnuboard\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body:\\\"gnuboard5\\\"\"], \"product\": \"gnuboard\", \"shodan-query\": [\"html:\\\"gnuboard5\\\"\"], \"vendor\": \"sir\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"body:\\\"gnuboard5\", \"gnuboard5\"], \"case-insensitive\": true}]}], \"_source_file\": \"sir\\\\gnuboard.yaml\"}, {\"id\": \"experience_commerce,experience_platform\", \"info\": {\"name\": \"experience_commerce,experience_platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,experience_commerce,experience_platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"experience_commerce,experience_platform\", \"shodan-query\": [\"title:\\\"sitecore\\\"\"], \"vendor\": \"sitecore\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>sitecore.*?</title>\"]}]}], \"_source_file\": \"sitecore\\\\experience_commerce,experience_platform.yaml\"}, {\"id\": \"experience_commerce\", \"info\": {\"name\": \"experience_commerce\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,experience_commerce\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"sitecore\\\"\"], \"google-query\": [\"intitle:\\\"sitecore\\\"\"], \"product\": \"experience_commerce\", \"shodan-query\": [\"title:\\\"sitecore\\\"\", \"http.title:\\\"sitecore\\\"\"], \"vendor\": \"sitecore\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>sitecore.*?</title>\"]}]}], \"_source_file\": \"sitecore\\\\experience_commerce.yaml\"}, {\"id\": \"experience_platform\", \"info\": {\"name\": \"experience_platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,experience_platform\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"sitecore\\\"\"], \"google-query\": [\"intitle:\\\"sitecore\\\"\"], \"product\": \"experience_platform\", \"shodan-query\": [\"http.title:\\\"sitecore\\\"\"], \"vendor\": \"sitecore\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>sitecore.*?</title>\"]}]}], \"_source_file\": \"sitecore\\\\experience_platform.yaml\"}, {\"id\": \"sitecore.net\", \"info\": {\"name\": \"sitecore.net\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sitecore.net\", \"severity\": \"info\", \"metadata\": {\"product\": \"sitecore.net\", \"shodan-query\": [\"html:\\\"sitecore\\\"\"], \"vendor\": \"sitecore\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"sitecore\"], \"case-insensitive\": true}]}], \"_source_file\": \"sitecore\\\\sitecore.net.yaml\"}, {\"id\": \"sitecore\", \"info\": {\"name\": \"sitecore\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sitecore\", \"severity\": \"info\", \"metadata\": {\"product\": \"sitecore\", \"vendor\": \"sitecore\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"7e7727c980ccf9d9a3d11bbc702f6363\"]}, {\"type\": \"word\", \"words\": [\"alt=\\\"sitecore\\\" id=\\\"sclogo\\\" />\", \"title=\\\"sitecore documentation site\\\">\"], \"case-insensitive\": true}]}], \"_source_file\": \"sitecore\\\\sitecore.yaml\"}, {\"id\": \"movable_type\", \"info\": {\"name\": \"movable_type\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,movable_type\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"サインイン | movable type pro\\\"\"], \"google-query\": [\"intitle:\\\"サインイン | movable type pro\\\"\"], \"product\": \"movable_type\", \"shodan-query\": [\"http.title:\\\"サインイン | movable type pro\\\"\", \"cpe:\\\"cpe:2.3:a:sixapart:movable_type\\\"\"], \"vendor\": \"sixapart\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>サインイン .*?</title>\"]}]}], \"_source_file\": \"sixapart\\\\movable_type.yaml\"}, {\"id\": \"senayan_library_management_system\", \"info\": {\"name\": \"senayan_library_management_system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,senayan_library_management_system\", \"severity\": \"info\", \"metadata\": {\"product\": \"senayan_library_management_system\", \"shodan-query\": [\"http.html:\\\"slims\\\"\"], \"vendor\": \"slims\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"slims\"], \"case-insensitive\": true}]}], \"_source_file\": \"slims\\\\senayan_library_management_system.yaml\"}, {\"id\": \"swagger_ui\", \"info\": {\"name\": \"swagger_ui\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,swagger_ui\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"-1180440057\\\"\"], \"product\": \"swagger_ui\", \"shodan-query\": [\"http.component:\\\"swagger\\\"\", \"http.favicon.hash:\\\"-1180440057\\\"\"], \"vendor\": \"smartbear\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1180440057\"]}]}], \"_source_file\": \"smartbear\\\\swagger_ui.yaml\"}, {\"id\": \"smartertrack\", \"info\": {\"name\": \"smartertrack\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,smartertrack\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=1410071322\"], \"product\": \"smartertrack\", \"shodan-query\": [\"http.favicon.hash:1410071322\"], \"vendor\": \"smartertools\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1410071322\"]}]}], \"_source_file\": \"smartertools\\\\smartertrack.yaml\"}, {\"id\": \"smartstorenet\", \"info\": {\"name\": \"smartstorenet\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,smartstorenet\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body='content=\\\"smartstore'\"], \"product\": \"smartstorenet\", \"shodan-query\": [\"http.html:'content=\\\"smartstore'\"], \"vendor\": \"smartstore\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content=\\\"smartstore\"], \"case-insensitive\": true}]}], \"_source_file\": \"smartstore\\\\smartstorenet.yaml\"}, {\"id\": \"wp_go_maps\", \"info\": {\"name\": \"wp_go_maps\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wp_go_maps\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/wp-content/plugins/duplicator\\\"\"], \"product\": \"wp_go_maps\", \"vendor\": \"snapcreek\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/wp-content/plugins/duplicator\"], \"case-insensitive\": true}]}], \"_source_file\": \"snapcreek\\\\wp_go_maps.yaml\"}, {\"id\": \"vpn\", \"info\": {\"name\": \"vpn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vpn\", \"severity\": \"info\", \"metadata\": {\"product\": \"vpn\", \"shodan-query\": [\"title:\\\"softether vpn server\\\"\"], \"vendor\": \"softether\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>softether vpn server.*?</title>\"]}, {\"type\": \"word\", \"words\": [\"<li>manage this vpn server or vpn bridge<ul>\"], \"case-insensitive\": true}]}], \"_source_file\": \"softether\\\\vpn.yaml\"}, {\"id\": \"webmethods\", \"info\": {\"name\": \"webmethods\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,webmethods\", \"severity\": \"info\", \"metadata\": {\"product\": \"webmethods\", \"shodan-query\": [\"http.favicon.hash:-234335289\"], \"vendor\": \"softwareag\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-234335289\"]}]}], \"_source_file\": \"softwareag\\\\webmethods.yaml\"}, {\"id\": \"i3geo\", \"info\": {\"name\": \"i3geo\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,i3geo\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"i3geo\\\"\"], \"product\": \"i3geo\", \"shodan-query\": [\"http.html:\\\"i3geo\\\"\"], \"vendor\": \"softwarepublico\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"i3geo\"], \"case-insensitive\": true}]}], \"_source_file\": \"softwarepublico\\\\i3geo.yaml\"}, {\"id\": \"security_event_manager\", \"info\": {\"name\": \"security_event_manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,security_event_manager\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"solarwinds security event manager\\\"\"], \"product\": \"security_event_manager\", \"vendor\": \"solarwinds\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>solarwinds security event manager.*?</title>\"]}]}], \"_source_file\": \"solarwinds\\\\security_event_manager.yaml\"}, {\"id\": \"serv-u\", \"info\": {\"name\": \"serv-u\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,serv-u\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"server=\\\"serv-u\\\"\"], \"product\": \"serv-u\", \"shodan-query\": [\"html:\\\"serv-u\\\"\", \"product:\\\"rhinosoft serv-u httpd\\\"\"], \"vendor\": \"solarwinds\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"serv-u\"], \"case-insensitive\": true}]}], \"_source_file\": \"solarwinds\\\\serv-u.yaml\"}, {\"id\": \"solarwinds\", \"info\": {\"name\": \"solarwinds\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,solarwinds\", \"severity\": \"info\", \"metadata\": {\"product\": \"solarwinds\", \"vendor\": \"solarwinds\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"53317933c27890ae9218697ecc0e97d9\"]}]}], \"_source_file\": \"solarwinds\\\\solarwinds.yaml\"}, {\"id\": \"sonarqube\", \"info\": {\"name\": \"sonarqube\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sonarqube\", \"severity\": \"info\", \"metadata\": {\"product\": \"sonarqube\", \"shodan-query\": [\"title:\\\"sonarqube\\\"\"], \"vendor\": \"sonarsource\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>sonarqube.*?</title>\"]}]}], \"_source_file\": \"sonarsource\\\\sonarqube.yaml\"}, {\"id\": \"nexus\", \"info\": {\"name\": \"nexus\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nexus\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"nexus repository manager\\\"\"], \"product\": \"nexus\", \"vendor\": \"sonatype\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>nexus repository manager.*?</title>\"]}]}], \"_source_file\": \"sonatype\\\\nexus.yaml\"}, {\"id\": \"analytics\", \"info\": {\"name\": \"analytics\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,analytics\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=-1381126564\"], \"product\": \"analytics\", \"shodan-query\": [\"http.favicon.hash:-1381126564\"], \"vendor\": \"sonicwall\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1381126564\"]}]}], \"_source_file\": \"sonicwall\\\\analytics.yaml\"}, {\"id\": \"network_security_manager\", \"info\": {\"name\": \"network_security_manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,network_security_manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"network_security_manager\", \"shodan-query\": [\"title:\\\"sonicwall network security\\\"\"], \"vendor\": \"sonicwall\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>sonicwall network security.*?</title>\"]}]}], \"_source_file\": \"sonicwall\\\\network_security_manager.yaml\"}, {\"id\": \"sma1000\", \"info\": {\"name\": \"sma1000\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sma1000\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"appliance management console login\\\"\"], \"google-query\": [\"intitle:\\\"appliance management console login\\\"\"], \"product\": \"sma1000\", \"shodan-query\": [\"title:\\\"appliance management console login\\\"\"], \"vendor\": \"sonicwall\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>appliance management console login.*?</title>\"]}]}], \"_source_file\": \"sonicwall\\\\sma1000.yaml\"}, {\"id\": \"mobile\", \"info\": {\"name\": \"mobile\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mobile\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"sophos mobile\\\"\", \"icon_hash=-1274798165\"], \"google-query\": [\"intitle:\\\"sophos mobile\\\"\"], \"product\": \"mobile\", \"shodan-query\": [\"http.favicon.hash:-1274798165\", \"http.title:\\\"sophos mobile\\\"\"], \"vendor\": \"sophos\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1274798165\"]}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>sophos mobile.*?</title>\"]}]}], \"_source_file\": \"sophos\\\\mobile.yaml\"}, {\"id\": \"sfos\", \"info\": {\"name\": \"sfos\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sfos\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"sophos\\\"\"], \"google-query\": [\"intitle:\\\"sophos\\\"\"], \"product\": \"sfos\", \"shodan-query\": [\"http.title:\\\"sophos\\\"\"], \"vendor\": \"sophos\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>sophos.*?</title>\"]}]}], \"_source_file\": \"sophos\\\\sfos.yaml\"}, {\"id\": \"unified_threat_management\", \"info\": {\"name\": \"unified_threat_management\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,unified_threat_management\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"securepoint utm\\\"\"], \"google-query\": [\"intitle:\\\"securepoint utm\\\"\"], \"product\": \"unified_threat_management\", \"shodan-query\": [\"http.title:\\\"securepoint utm\\\"\"], \"vendor\": \"sophos\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>securepoint utm.*?</title>\"]}]}], \"_source_file\": \"sophos\\\\unified_threat_management.yaml\"}, {\"id\": \"web_appliance\", \"info\": {\"name\": \"web_appliance\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,web_appliance\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"sophos web appliance\\\"\", \"icon_hash=-893681401\"], \"google-query\": [\"intitle:\\\"sophos web appliance\\\"\"], \"product\": \"web_appliance\", \"shodan-query\": [\"title:\\\"sophos web appliance\\\"\", \"http.title:\\\"sophos web appliance\\\"\", \"http.favicon.hash:-893681401\"], \"vendor\": \"sophos\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-893681401\"]}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>sophos web appliance.*?</title>\"]}]}], \"_source_file\": \"sophos\\\\web_appliance.yaml\"}, {\"id\": \"soplanning\", \"info\": {\"name\": \"soplanning\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,soplanning\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"soplanning\\\"\"], \"product\": \"soplanning\", \"shodan-query\": [\"http.html:\\\"soplanning\\\"\", \"html:\\\"soplanning\\\"\"], \"vendor\": \"soplanning\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"soplanning\"], \"case-insensitive\": true}]}], \"_source_file\": \"soplanning\\\\soplanning.yaml\"}, {\"id\": \"spamtitan\", \"info\": {\"name\": \"spamtitan\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,spamtitan\", \"severity\": \"info\", \"metadata\": {\"product\": \"spamtitan\", \"vendor\": \"spamtitan\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<table class=\\\"lhead\\\"><tr><td class=\\\"img\\\"><img src=\\\"/imgs/logo.gif\\\" alt=\\\"spamtitan logo\\\"></td></tr></table></div>\"], \"case-insensitive\": true}]}], \"_source_file\": \"spamtitan\\\\spamtitan.yaml\"}, {\"id\": \"webtitan\", \"info\": {\"name\": \"webtitan\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,webtitan\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=1090061843\", \"title=\\\"webtitan\\\"\"], \"product\": \"webtitan\", \"shodan-query\": [\"title:\\\"webtitan\\\"\", \"http.favicon.hash:1090061843\"], \"vendor\": \"spamtitan\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1090061843\"]}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>webtitan.*?</title>\"]}]}], \"_source_file\": \"spamtitan\\\\webtitan.yaml\"}, {\"id\": \"spip\", \"info\": {\"name\": \"spip\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,spip\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"spip.php?page=backend\\\"\"], \"product\": \"spip\", \"shodan-query\": [\"html:\\\"spip.php?page=backend\\\"\", \"http.html:\\\"spip.php?page=backend\\\"\", \"cpe:\\\"cpe:2.3:a:spip:spip\\\"\"], \"vendor\": \"spip\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"spip.php?page=backend\"], \"case-insensitive\": true}]}], \"_source_file\": \"spip\\\\spip.yaml\"}, {\"id\": \"splunk\", \"info\": {\"name\": \"splunk\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,splunk\", \"severity\": \"info\", \"metadata\": {\"product\": \"splunk\", \"vendor\": \"splunk\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: splunkd\", \"set-cookie: splunkweb_uid\"], \"part\": \"header\", \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"server: splunkd\", \"set-cookie: routeid\"], \"part\": \"header\", \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"<title>303 see other</title>\", \"content=\\\"splunk inc.\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"splunk\\\\splunk.yaml\"}, {\"id\": \"spotweb\", \"info\": {\"name\": \"spotweb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,spotweb\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"spotweb - overview\\\"\"], \"google-query\": [\"intitle:\\\"spotweb - overview\\\"\"], \"product\": \"spotweb\", \"shodan-query\": [\"title:\\\"spotweb - overview\\\"\", \"http.title:\\\"spotweb - overview\\\"\"], \"vendor\": \"spotweb_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>spotweb - overview.*?</title>\"]}]}], \"_source_file\": \"spotweb_project\\\\spotweb.yaml\"}, {\"id\": \"squidex\", \"info\": {\"name\": \"squidex\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,squidex\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=1099097618\"], \"product\": \"squidex\", \"shodan-query\": [\"http.favicon.hash:1099097618\"], \"vendor\": \"squidex.io\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1099097618\"]}]}], \"_source_file\": \"squidex.io\\\\squidex.yaml\"}, {\"id\": \"squirrelmail\", \"info\": {\"name\": \"squirrelmail\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,squirrelmail\", \"severity\": \"info\", \"metadata\": {\"product\": \"squirrelmail\", \"vendor\": \"squirrelmail\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"function squirrelmail_loginpage_onload()\"], \"case-insensitive\": true}]}], \"_source_file\": \"squirrelmail\\\\squirrelmail.yaml\"}, {\"id\": \"stagil_navigation\", \"info\": {\"name\": \"stagil_navigation\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,stagil_navigation\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=jira\"], \"google-query\": [\"intitle:jira\"], \"product\": \"stagil_navigation\", \"shodan-query\": [\"title:jira\", \"http.title:jira\"], \"vendor\": \"stagil\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>jira.*?</title>\"]}]}], \"_source_file\": \"stagil\\\\stagil_navigation.yaml\"}, {\"id\": \"elfinder\", \"info\": {\"name\": \"elfinder\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,elfinder\", \"severity\": \"info\", \"metadata\": {\"product\": \"elfinder\", \"shodan-query\": [\"title:\\\"elfinder\\\"\"], \"vendor\": \"std42\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>elfinder.*?</title>\"]}]}], \"_source_file\": \"std42\\\\elfinder.yaml\"}, {\"id\": \"steve\", \"info\": {\"name\": \"steve\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,steve\", \"severity\": \"info\", \"metadata\": {\"google-query\": [\"intitle:\\\"steve - steckdosenverwaltung\\\"\"], \"product\": \"steve\", \"shodan-query\": [\"http.title:\\\"steve - steckdosenverwaltung\\\"\"], \"vendor\": \"steve-community\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>steve - steckdosenverwaltung.*?</title>\"]}]}], \"_source_file\": \"steve-community\\\\steve.yaml\"}, {\"id\": \"devika\", \"info\": {\"name\": \"devika\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,devika\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"-1429839495\\\"\"], \"product\": \"devika\", \"vendor\": \"stitionai\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1429839495\"]}]}], \"_source_file\": \"stitionai\\\\devika.yaml\"}, {\"id\": \"strapi\", \"info\": {\"name\": \"strapi\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,strapi\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"strapi-headless-cms\\\"\"], \"product\": \"strapi\", \"shodan-query\": [\"html:\\\"welcome to your strapi app\\\"\"], \"vendor\": \"strapi\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"welcome to your strapi app\"], \"case-insensitive\": true}]}], \"_source_file\": \"strapi\\\\strapi.yaml\"}, {\"id\": \"on-premises_installation\", \"info\": {\"name\": \"on-premises_installation\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,on-premises_installation\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=1199592666\"], \"product\": \"on-premises_installation\", \"shodan-query\": [\"http.favicon.hash:1199592666\"], \"vendor\": \"structurizr\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1199592666\"]}]}], \"_source_file\": \"structurizr\\\\on-premises_installation.yaml\"}, {\"id\": \"elfinder\", \"info\": {\"name\": \"elfinder\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,elfinder\", \"severity\": \"info\", \"metadata\": {\"product\": \"elfinder\", \"shodan-query\": [\"http.title:\\\"elfinder\\\"\"], \"vendor\": \"studio-42\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>elfinder.*?</title>\"]}]}], \"_source_file\": \"studio-42\\\\elfinder.yaml\"}, {\"id\": \"sugarcrm\", \"info\": {\"name\": \"sugarcrm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sugarcrm\", \"severity\": \"info\", \"metadata\": {\"product\": \"sugarcrm\", \"vendor\": \"sugarcrm\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a href=\\\" javascript:void window.open('http://support.sugarcrm.com')\\\">support</a>\", \"<img style='margin-top: 2px' border='0' width='106' height='23' src='include/images/poweredby_sugarcrm.png' alt='powered by sugarcrm'>\", \"<script>var module_sugar_grp1 = 'users';</script><script>var action_sugar_grp1 = 'login';</script><script>jscal_today\"], \"case-insensitive\": true}]}], \"_source_file\": \"sugarcrm\\\\sugarcrm.yaml\"}, {\"id\": \"sunlogin\", \"info\": {\"name\": \"sunlogin\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sunlogin\", \"severity\": \"info\", \"metadata\": {\"product\": \"sunlogin\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"content-length: 46\", \"content-type: application/json\"], \"part\": \"header\", \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"{\\\"success\\\":false,\\\"msg\\\":\\\"verification failure\\\"}\"], \"case-insensitive\": true}]}], \"_source_file\": \"sunlogin\\\\sunlogin.yaml\"}, {\"id\": \"supervisor\", \"info\": {\"name\": \"supervisor\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,supervisor\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"supervisor status\\\"\"], \"google-query\": [\"intitle:\\\"supervisor status\\\"\"], \"product\": \"supervisor\", \"shodan-query\": [\"http.title:\\\"supervisor status\\\"\"], \"vendor\": \"supervisord\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>supervisor status.*?</title>\"]}]}], \"_source_file\": \"supervisord\\\\supervisor.yaml\"}, {\"id\": \"supervisord\", \"info\": {\"name\": \"supervisord\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,supervisord\", \"severity\": \"info\", \"metadata\": {\"product\": \"supervisord\", \"vendor\": \"supervisord\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"images/supervisor.gif\"], \"case-insensitive\": true}]}], \"_source_file\": \"supervisord\\\\supervisord.yaml\"}, {\"id\": \"superwebmailer\", \"info\": {\"name\": \"superwebmailer\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,superwebmailer\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"superwebmailer\\\"\"], \"google-query\": [\"intitle:\\\"superwebmailer\\\"\"], \"product\": \"superwebmailer\", \"shodan-query\": [\"title:\\\"superwebmailer\\\"\", \"http.title:\\\"superwebmailer\\\"\"], \"vendor\": \"superwebmailer\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>superwebmailer.*?</title>\"]}]}], \"_source_file\": \"superwebmailer\\\\superwebmailer.yaml\"}, {\"id\": \"swift_performance_lite\", \"info\": {\"name\": \"swift_performance_lite\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,swift_performance_lite\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/wp-content/plugins/swift-performance-lite\\\"\"], \"product\": \"swift_performance_lite\", \"vendor\": \"swiftperformance\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/wp-content/plugins/swift-performance-lite\"], \"case-insensitive\": true}]}], \"_source_file\": \"swiftperformance\\\\swift_performance_lite.yaml\"}, {\"id\": \"endpoint_protection_manager\", \"info\": {\"name\": \"endpoint_protection_manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,endpoint_protection_manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"endpoint_protection_manager\", \"shodan-query\": [\"title:\\\"symantec endpoint protection manager\\\"\"], \"vendor\": \"symantec\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>symantec endpoint protection manager.*?</title>\"]}]}], \"_source_file\": \"symantec\\\\endpoint_protection_manager.yaml\"}, {\"id\": \"sympa\", \"info\": {\"name\": \"sympa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sympa\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"sympa\\\"\"], \"product\": \"sympa\", \"shodan-query\": [\"http.html:\\\"sympa\\\"\"], \"vendor\": \"sympa\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"sympa\"], \"case-insensitive\": true}]}], \"_source_file\": \"sympa\\\\sympa.yaml\"}, {\"id\": \"zimbra_collaboration_suite\", \"info\": {\"name\": \"zimbra_collaboration_suite\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zimbra_collaboration_suite\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"zimbra web client sign in\\\"\", \"title=\\\"zimbra collaboration suite\\\"\"], \"google-query\": [\"intitle:\\\"zimbra collaboration suite\\\"\", \"intitle:\\\"zimbra web client sign in\\\"\"], \"product\": \"zimbra_collaboration_suite\", \"shodan-query\": [\"http.title:\\\"zimbra collaboration suite\\\"\", \"http.title:\\\"zimbra web client sign in\\\"\"], \"vendor\": \"synacor\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>zimbra collaboration suite.*?</title>\", \"(?mi)<title[^>]*>zimbra web client sign in.*?</title>\"]}]}], \"_source_file\": \"synacor\\\\zimbra_collaboration_suite.yaml\"}, {\"id\": \"sysaid\", \"info\": {\"name\": \"sysaid\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sysaid\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=1540720428\"], \"product\": \"sysaid\", \"shodan-query\": [\"http.favicon.hash:1540720428\"], \"vendor\": \"sysaid\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1540720428\"]}]}], \"_source_file\": \"sysaid\\\\sysaid.yaml\"}, {\"id\": \"sysaid_on-premises\", \"info\": {\"name\": \"sysaid_on-premises\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sysaid_on-premises\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"1540720428\\\"\"], \"product\": \"sysaid_on-premises\", \"shodan-query\": [\"http.favicon.hash:1540720428\", \"http.favicon.hash:\\\"1540720428\\\"\"], \"vendor\": \"sysaid\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1540720428\"]}]}], \"_source_file\": \"sysaid\\\\sysaid_on-premises.yaml\"}, {\"id\": \"tagdiv_composer\", \"info\": {\"name\": \"tagdiv_composer\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tagdiv_composer\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/wp-content/plugins/td-composer\\\"\"], \"product\": \"tagdiv_composer\", \"vendor\": \"tagdiv\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/wp-content/plugins/td-composer\"], \"case-insensitive\": true}]}], \"_source_file\": \"tagdiv\\\\tagdiv_composer.yaml\"}, {\"id\": \"lin-cms-spring-boot\", \"info\": {\"name\": \"lin-cms-spring-boot\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,lin-cms-spring-boot\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"心上无垢，林间有风\\\"\"], \"product\": \"lin-cms-spring-boot\", \"shodan-query\": [\"http.html:\\\"心上无垢，林间有风\\\"\"], \"vendor\": \"talelin\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"心上无垢，林间有风\"], \"case-insensitive\": true}]}], \"_source_file\": \"talelin\\\\lin-cms-spring-boot.yaml\"}, {\"id\": \"tamronos\", \"info\": {\"name\": \"tamronos\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tamronos\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"tamronos iptv系统\\\"\"], \"product\": \"tamronos\", \"shodan-query\": [\"title:\\\"tamronos iptv系统\\\"\"], \"vendor\": \"tamronos\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>tamronos iptv系统.*?</title>\"]}]}], \"_source_file\": \"tamronos\\\\tamronos.yaml\"}, {\"id\": \"tautulli\", \"info\": {\"name\": \"tautulli\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tautulli\", \"severity\": \"info\", \"metadata\": {\"product\": \"tautulli\", \"vendor\": \"tautulli\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"alt=\\\"plexpy\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"tautulli\\\\tautulli.yaml\"}, {\"id\": \"teampass\", \"info\": {\"name\": \"teampass\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,teampass\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"teampass\\\"\"], \"product\": \"teampass\", \"shodan-query\": [\"http.html:\\\"teampass\\\"\"], \"vendor\": \"teampass\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"teampass\"], \"case-insensitive\": true}]}], \"_source_file\": \"teampass\\\\teampass.yaml\"}, {\"id\": \"kio_firmware\", \"info\": {\"name\": \"kio_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,kio_firmware\", \"severity\": \"info\", \"metadata\": {\"product\": \"kio_firmware\", \"shodan-query\": [\"title:\\\"контроллер\\\"\"], \"vendor\": \"tekon\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>контроллер.*?</title>\"]}]}], \"_source_file\": \"tekon\\\\kio_firmware.yaml\"}, {\"id\": \"sdt-cs3b1\", \"info\": {\"name\": \"sdt-cs3b1\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,sdt-cs3b1\", \"severity\": \"info\", \"metadata\": {\"product\": \"sdt-cs3b1\", \"shodan-query\": [\"html:\\\"sdt-cw3b1\\\"\"], \"vendor\": \"telesquare\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"sdt-cw3b1\"], \"case-insensitive\": true}]}], \"_source_file\": \"telesquare\\\\sdt-cs3b1.yaml\"}, {\"id\": \"tlr-2005ksh\", \"info\": {\"name\": \"tlr-2005ksh\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tlr-2005ksh\", \"severity\": \"info\", \"metadata\": {\"product\": \"tlr-2005ksh\", \"shodan-query\": [\"http.html:\\\"tlr-2005ksh\\\"\"], \"vendor\": \"telesquare\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"tlr-2005ksh\"], \"case-insensitive\": true}]}], \"_source_file\": \"telesquare\\\\tlr-2005ksh.yaml\"}, {\"id\": \"tlr-2005ksh_firmware\", \"info\": {\"name\": \"tlr-2005ksh_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tlr-2005ksh_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"tlr-2005ksh\\\"\"], \"product\": \"tlr-2005ksh_firmware\", \"shodan-query\": [\"http.html:\\\"tlr-2005ksh\\\"\"], \"vendor\": \"telesquare\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"tlr-2005ksh\"], \"case-insensitive\": true}]}], \"_source_file\": \"telesquare\\\\tlr-2005ksh_firmware.yaml\"}, {\"id\": \"tlr-2855ks6_firmware\", \"info\": {\"name\": \"tlr-2855ks6_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tlr-2855ks6_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"product==\\\"telesquare-tlr-2855ks6\\\"\", \"title=\\\"login to tlr-2855ks6\\\"\"], \"google-query\": [\"intitle:\\\"login to tlr-2855ks6\\\"\"], \"product\": \"tlr-2855ks6_firmware\", \"shodan-query\": [\"title:\\\"login to tlr-2855ks6\\\"\", \"http.title:\\\"login to tlr-2855ks6\\\"\"], \"vendor\": \"telesquare\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>login to tlr-2855ks6.*?</title>\"]}]}], \"_source_file\": \"telesquare\\\\tlr-2855ks6_firmware.yaml\"}, {\"id\": \"omnia_mpx_node_firmware\", \"info\": {\"name\": \"omnia_mpx_node_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,omnia_mpx_node_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"omnia mpx node | login\\\"\"], \"google-query\": [\"intitle:\\\"omnia mpx node | login\\\"\"], \"product\": \"omnia_mpx_node_firmware\", \"shodan-query\": [\"http.title:\\\"omnia mpx node | login\\\"\"], \"vendor\": \"telosalliance\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>omnia mpx node .*?</title>\"]}]}], \"_source_file\": \"telosalliance\\\\omnia_mpx_node_firmware.yaml\"}, {\"id\": \"t24\", \"info\": {\"name\": \"t24\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,t24\", \"severity\": \"info\", \"metadata\": {\"product\": \"t24\", \"shodan-query\": [\"title:\\\"t24 sign in\\\"\"], \"vendor\": \"temenos\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>t24 sign in.*?</title>\"]}]}], \"_source_file\": \"temenos\\\\t24.yaml\"}, {\"id\": \"temenos\", \"info\": {\"name\": \"temenos\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,temenos\", \"severity\": \"info\", \"metadata\": {\"product\": \"temenos\", \"shodan-query\": [\"title:\\\"t24 sign in\\\"\"], \"vendor\": \"temenos\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>t24 sign in.*?</title>\"]}]}], \"_source_file\": \"temenos\\\\temenos.yaml\"}, {\"id\": \"wechat\", \"info\": {\"name\": \"wechat\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wechat\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"wework_admin.normal_layout\\\"\"], \"product\": \"wechat\", \"vendor\": \"tencent\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"wework_admin.normal_layout\"], \"case-insensitive\": true}]}], \"_source_file\": \"tencent\\\\wechat.yaml\"}, {\"id\": \"11n_firmware\", \"info\": {\"name\": \"11n_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,11n_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"product==\\\"tenda-11n-wireless-ap\\\"\", \"title=\\\"tenda 11n\\\"\"], \"google-query\": [\"intitle:\\\"tenda 11n\\\"\"], \"product\": \"11n_firmware\", \"shodan-query\": [\"http.title:\\\"tenda 11n\\\"\"], \"vendor\": \"tenda\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>tenda 11n.*?</title>\"]}]}], \"_source_file\": \"tenda\\\\11n_firmware.yaml\"}, {\"id\": \"ac15_firmware\", \"info\": {\"name\": \"ac15_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ac15_firmware\", \"severity\": \"info\", \"metadata\": {\"product\": \"ac15_firmware\", \"shodan-query\": [\"http.title:\\\"tenda wifi\\\"\"], \"vendor\": \"tenda\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>tenda wifi.*?</title>\"]}]}], \"_source_file\": \"tenda\\\\ac15_firmware.yaml\"}, {\"id\": \"g0\", \"info\": {\"name\": \"g0\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,g0\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"tenda | login\\\" && country=\\\"cn\\\"\"], \"product\": \"g0\", \"vendor\": \"tendacn\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>tenda.*?</title>\"]}]}], \"_source_file\": \"tendacn\\\\g0.yaml\"}, {\"id\": \"terramaster_operating_system\", \"info\": {\"name\": \"terramaster_operating_system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,terramaster_operating_system\", \"severity\": \"info\", \"metadata\": {\"product\": \"terramaster_operating_system\", \"shodan-query\": [\"terramaster\"], \"vendor\": \"terra-master\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"terramaster\"], \"case-insensitive\": true}]}], \"_source_file\": \"terra-master\\\\terramaster_operating_system.yaml\"}, {\"id\": \"tos\", \"info\": {\"name\": \"tos\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tos\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"\\\"terramaster\\\" && header=\\\"tos\\\"\"], \"product\": \"tos\", \"vendor\": \"terra-master\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"terramaster\"], \"case-insensitive\": true}]}], \"_source_file\": \"terra-master\\\\tos.yaml\"}, {\"id\": \"fuel_cms\", \"info\": {\"name\": \"fuel_cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,fuel_cms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"fuel cms\\\"\"], \"google-query\": [\"intitle:\\\"fuel cms\\\"\"], \"product\": \"fuel_cms\", \"shodan-query\": [\"http.title:\\\"fuel cms\\\"\"], \"vendor\": \"thedaylightstudio\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>fuel cms.*?</title>\"]}]}], \"_source_file\": \"thedaylightstudio\\\\fuel_cms.yaml\"}, {\"id\": \"atomcms\", \"info\": {\"name\": \"atomcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,atomcms\", \"severity\": \"info\", \"metadata\": {\"product\": \"atomcms\", \"shodan-query\": [\"html:\\\"atomcms\\\"\"], \"vendor\": \"thedigitalcraft\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"atomcms\"], \"case-insensitive\": true}]}], \"_source_file\": \"thedigitalcraft\\\\atomcms.yaml\"}, {\"id\": \"themegrill-demo-importer\", \"info\": {\"name\": \"themegrill-demo-importer\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,themegrill-demo-importer\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/plugins/themegrill-demo-importer\\\"\"], \"product\": \"themegrill-demo-importer\", \"vendor\": \"themegrill\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/plugins/themegrill-demo-importer\"], \"case-insensitive\": true}]}], \"_source_file\": \"themegrill\\\\themegrill-demo-importer.yaml\"}, {\"id\": \"multiple_shipping_addresses_for_woocommerce\", \"info\": {\"name\": \"multiple_shipping_addresses_for_woocommerce\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,multiple_shipping_addresses_for_woocommerce\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"wp-content/plugins/multiple-shipping-address-woocommerce\\\"\"], \"product\": \"multiple_shipping_addresses_for_woocommerce\", \"vendor\": \"themehigh\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"wp-content/plugins/multiple-shipping-address-woocommerce\"], \"case-insensitive\": true}]}], \"_source_file\": \"themehigh\\\\multiple_shipping_addresses_for_woocommerce.yaml\"}, {\"id\": \"eventin\", \"info\": {\"name\": \"eventin\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,eventin\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/wp-content/plugins/eventin\\\"\"], \"product\": \"eventin\", \"vendor\": \"themewinter\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/wp-content/plugins/eventin\"], \"case-insensitive\": true}]}], \"_source_file\": \"themewinter\\\\eventin.yaml\"}, {\"id\": \"builder\", \"info\": {\"name\": \"builder\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,builder\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"wp-content/plugins/themify-builder/\\\"\"], \"product\": \"builder\", \"vendor\": \"themify\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"wp-content/plugins/themify-builder/\"], \"case-insensitive\": true}]}], \"_source_file\": \"themify\\\\builder.yaml\"}, {\"id\": \"learnpress\", \"info\": {\"name\": \"learnpress\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,learnpress\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/wp-content/plugins/learnpress\\\"\"], \"product\": \"learnpress\", \"shodan-query\": [\"html:\\\"/wp-content/plugins/learnpress\\\"\"], \"vendor\": \"thimpress\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/wp-content/plugins/learnpress\"], \"case-insensitive\": true}]}], \"_source_file\": \"thimpress\\\\learnpress.yaml\"}, {\"id\": \"thinkadmin\", \"info\": {\"name\": \"thinkadmin\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,thinkadmin\", \"severity\": \"info\", \"metadata\": {\"product\": \"thinkadmin\", \"vendor\": \"thinkadmin\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"thinkadmin</title>\"], \"case-insensitive\": true}]}], \"_source_file\": \"thinkadmin\\\\thinkadmin.yaml\"}, {\"id\": \"thinkcmf\", \"info\": {\"name\": \"thinkcmf\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,thinkcmf\", \"severity\": \"info\", \"metadata\": {\"product\": \"thinkcmf\", \"vendor\": \"thinkcmf\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<a title=\\\"官方网站\\\" href=\\\"http://www.thinkcmf.com\\\">thinkcmf</a>\", \"content=\\\"thinkcmf\", \"made by <a href=\\\"http://www.thinkcmf.com\\\" target=\\\"_blank\\\">thinkcmf</a>\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"x-powered-by: thinkcmf\", \"x-powered-by: thinkcmf\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"thinkcmf\\\\thinkcmf.yaml\"}, {\"id\": \"thinkphp\", \"info\": {\"name\": \"thinkphp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,thinkphp\", \"severity\": \"info\", \"metadata\": {\"product\": \"thinkphp\", \"vendor\": \"thinkphp\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"f49c4a4bde1eec6c0b80c2277c76e3db\"]}, {\"type\": \"word\", \"words\": [\"href=\\\"http://www.thinkphp.cn\\\">thinkphp</a>\", \"thinkphp_show_page_trace\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"x-powered-by: thinkphp\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"thinkphp\\\\thinkphp.yaml\"}, {\"id\": \"gocd\", \"info\": {\"name\": \"gocd\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,gocd\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"create a pipeline - go\\\" html:\\\"gocd version\\\"\", \"body=\\\"gocd version\\\"\"], \"google-query\": [\"intitle:\\\"create a pipeline - go\\\" html:\\\"gocd version\\\"\"], \"product\": \"gocd\", \"shodan-query\": [\"http.title:\\\"create a pipeline - go\\\" html:\\\"gocd version\\\"\", \"http.html:\\\"gocd version\\\"\"], \"vendor\": \"thoughtworks\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"gocd version\"], \"case-insensitive\": true}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>create a pipeline - go\\\" html:\\\"gocd version.*?</title>\"]}]}], \"_source_file\": \"thoughtworks\\\\gocd.yaml\"}, {\"id\": \"thruk\", \"info\": {\"name\": \"thruk\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,thruk\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"thruk\\\"\", \"title==\\\"thruk monitoring webinterface\\\"\"], \"product\": \"thruk\", \"shodan-query\": [\"http.html:\\\"thruk\\\"\"], \"vendor\": \"thruk\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"thruk\"], \"case-insensitive\": true}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>=\\\"thruk monitoring webinterface.*?</title>\"]}]}], \"_source_file\": \"thruk\\\\thruk.yaml\"}, {\"id\": \"jasperreports_library\", \"info\": {\"name\": \"jasperreports_library\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,jasperreports_library\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"jasperserver-pro\\\"\"], \"product\": \"jasperreports_library\", \"shodan-query\": [\"html:\\\"jasperserver-pro\\\"\", \"http.html:\\\"jasperserver-pro\\\"\"], \"vendor\": \"tibco\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"jasperserver-pro\"], \"case-insensitive\": true}]}], \"_source_file\": \"tibco\\\\jasperreports_library.yaml\"}, {\"id\": \"tiki\", \"info\": {\"name\": \"tiki\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tiki\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"tiki wiki cms\\\"\"], \"google-query\": [\"intitle:\\\"tiki wiki cms\"], \"product\": \"tiki\", \"shodan-query\": [\"title:\\\"tiki wiki cms\\\"\"], \"vendor\": \"tiki\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>tiki wiki cms.*?</title>\"]}]}], \"_source_file\": \"tiki\\\\tiki.yaml\"}, {\"id\": \"tikiwiki_cms-groupware\", \"info\": {\"name\": \"tikiwiki_cms-groupware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tikiwiki_cms-groupware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"tiki wiki\\\"\"], \"product\": \"tikiwiki_cms-groupware\", \"shodan-query\": [\"http.html:\\\"tiki wiki\\\"\"], \"vendor\": \"tiki\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"tiki wiki\"], \"case-insensitive\": true}]}], \"_source_file\": \"tiki\\\\tikiwiki_cms-groupware.yaml\"}, {\"id\": \"tileserver\", \"info\": {\"name\": \"tileserver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tileserver\", \"severity\": \"info\", \"metadata\": {\"product\": \"tileserver\", \"shodan-query\": [\"http.favicon.hash:-1258058404\"], \"vendor\": \"tileserver\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1258058404\"]}]}], \"_source_file\": \"tileserver\\\\tileserver.yaml\"}, {\"id\": \"tinyfilemanager\", \"info\": {\"name\": \"tinyfilemanager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tinyfilemanager\", \"severity\": \"info\", \"metadata\": {\"product\": \"tinyfilemanager\", \"shodan-query\": [\"html:\\\"tiny file manager\\\"\"], \"vendor\": \"tinyfilemanager_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"tiny file manager\"], \"case-insensitive\": true}]}], \"_source_file\": \"tinyfilemanager_project\\\\tinyfilemanager.yaml\"}, {\"id\": \"printmonitor\", \"info\": {\"name\": \"printmonitor\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,printmonitor\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"printmonitor\\\"\"], \"google-query\": [\"intitle:\\\"printmonitor\\\"\"], \"product\": \"printmonitor\", \"shodan-query\": [\"title:\\\"printmonitor\\\"\", \"http.title:\\\"printmonitor\\\"\"], \"vendor\": \"titool\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>printmonitor.*?</title>\"]}]}], \"_source_file\": \"titool\\\\printmonitor.yaml\"}, {\"id\": \"office_anywhere\", \"info\": {\"name\": \"office_anywhere\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,office_anywhere\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"tdxk-通达oa\\\"\", \"title=\\\"通达oa\\\"\"], \"product\": \"office_anywhere\", \"shodan-query\": [\"title:\\\"通达oa\\\"\"], \"vendor\": \"tongda2000\", \"verified\": true, \"zoomeye-query\": [\"app:\\\"通达oa\\\"\"]}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>通达oa.*?</title>\"]}]}], \"_source_file\": \"tongda2000\\\\office_anywhere.yaml\"}, {\"id\": \"office_anywhere_2017\", \"info\": {\"name\": \"office_anywhere_2017\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,office_anywhere_2017\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"tdxk-通达oa\\\"\", \"icon_hash=\\\"1967132225\\\"\"], \"product\": \"office_anywhere_2017\", \"vendor\": \"tongda2000\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1967132225\"]}]}], \"_source_file\": \"tongda2000\\\\office_anywhere_2017.yaml\"}, {\"id\": \"tooljet\", \"info\": {\"name\": \"tooljet\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tooljet\", \"severity\": \"info\", \"metadata\": {\"product\": \"tooljet\", \"shodan-query\": [\"title:\\\"tooljet\\\"\"], \"vendor\": \"tooljet\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>tooljet.*?</title>\"]}]}], \"_source_file\": \"tooljet\\\\tooljet.yaml\"}, {\"id\": \"a3002ru\", \"info\": {\"name\": \"a3002ru\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,a3002ru\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"totolink\\\"\"], \"product\": \"a3002ru\", \"vendor\": \"totolink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>totolink.*?</title>\"]}]}], \"_source_file\": \"totolink\\\\a3002ru.yaml\"}, {\"id\": \"a3300r_firmware\", \"info\": {\"name\": \"a3300r_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,a3300r_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"totolink\\\"\"], \"product\": \"a3300r_firmware\", \"vendor\": \"totolink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>totolink.*?</title>\"]}]}], \"_source_file\": \"totolink\\\\a3300r_firmware.yaml\"}, {\"id\": \"a3700r_firmware\", \"info\": {\"name\": \"a3700r_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,a3700r_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"totolink\\\"\"], \"google-query\": [\"intitle:\\\"totolink\\\"\"], \"product\": \"a3700r_firmware\", \"shodan-query\": [\"title:\\\"totolink\\\"\", \"http.title:\\\"totolink\\\"\"], \"vendor\": \"totolink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>totolink.*?</title>\"]}]}], \"_source_file\": \"totolink\\\\a3700r_firmware.yaml\"}, {\"id\": \"cp450_firmware\", \"info\": {\"name\": \"cp450_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cp450_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"totolink\\\"\"], \"product\": \"cp450_firmware\", \"vendor\": \"totolink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>totolink.*?</title>\"]}]}], \"_source_file\": \"totolink\\\\cp450_firmware.yaml\"}, {\"id\": \"ex1200t_firmware\", \"info\": {\"name\": \"ex1200t_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ex1200t_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"totolink\\\"\"], \"google-query\": [\"intitle:\\\"totolink\\\"\"], \"product\": \"ex1200t_firmware\", \"shodan-query\": [\"title:\\\"totolink\\\"\", \"http.title:\\\"totolink\\\"\"], \"vendor\": \"totolink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>totolink.*?</title>\"]}]}], \"_source_file\": \"totolink\\\\ex1200t_firmware.yaml\"}, {\"id\": \"totolink-router\", \"info\": {\"name\": \"totolink-router\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,totolink-router\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"totolink\\\"\"], \"product\": \"totolink-router\", \"shodan-query\": [\"http.html:\\\"totolink\\\"\"], \"vendor\": \"totolink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"totolink\"], \"case-insensitive\": true}]}], \"_source_file\": \"totolink\\\\totolink-router.yaml\"}, {\"id\": \"archer-ax21\", \"info\": {\"name\": \"archer-ax21\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,archer-ax21\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"tp-link\\\"\"], \"product\": \"archer-ax21\", \"vendor\": \"tp-link\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"tp-link\"], \"case-insensitive\": true}]}], \"_source_file\": \"tp-link\\\\archer-ax21.yaml\"}, {\"id\": \"tl-wr840n_firmware\", \"info\": {\"name\": \"tl-wr840n_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tl-wr840n_firmware\", \"severity\": \"info\", \"metadata\": {\"product\": \"tl-wr840n_firmware\", \"shodan-query\": [\"title:\\\"tl-wr840n\\\"\"], \"vendor\": \"tp-link\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>tl-wr840n.*?</title>\"]}]}], \"_source_file\": \"tp-link\\\\tl-wr840n_firmware.yaml\"}, {\"id\": \"tl-wr841n_(9.0)_firmware\", \"info\": {\"name\": \"tl-wr841n_(9.0)_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tl-wr841n_(9.0)_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"tp-link\\\"\"], \"google-query\": [\"intitle:\\\"tp-link\\\"\"], \"product\": \"tl-wr841n_(9.0)_firmware\", \"shodan-query\": [\"http.title:\\\"tp-link\\\"\"], \"vendor\": \"tp-link\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>tp-link.*?</title>\"]}]}], \"_source_file\": \"tp-link\\\\tl-wr841n_(9.0)_firmware.yaml\"}, {\"id\": \"tp-link\", \"info\": {\"name\": \"tp-link\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tp-link\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"wr840n\\\"\"], \"product\": \"tp-link\", \"vendor\": \"tp-link\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"wr840n\"], \"case-insensitive\": true}]}], \"_source_file\": \"tp-link\\\\tp-link.yaml\"}, {\"id\": \"traccar\", \"info\": {\"name\": \"traccar\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,traccar\", \"severity\": \"info\", \"metadata\": {\"product\": \"traccar\", \"shodan-query\": [\"html:\\\"traccar\\\"\"], \"vendor\": \"traccar\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"traccar\"], \"case-insensitive\": true}]}], \"_source_file\": \"traccar\\\\traccar.yaml\"}, {\"id\": \"traefik\", \"info\": {\"name\": \"traefik\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,traefik\", \"severity\": \"info\", \"metadata\": {\"product\": \"traefik\", \"vendor\": \"traefik\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"010d94298a0b83cc87846064dc26db44\"]}, {\"type\": \"word\", \"words\": [\"content-security-policy: *.traefik.io;\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"traefik\\\\traefik.yaml\"}, {\"id\": \"traggo\", \"info\": {\"name\": \"traggo\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,traggo\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"traggo\\\"\"], \"product\": \"traggo\", \"shodan-query\": [\"html:\\\"traggo\\\"\", \"http.html:\\\"traggo\\\"\"], \"vendor\": \"traggo\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"traggo\"], \"case-insensitive\": true}]}], \"_source_file\": \"traggo\\\\traggo.yaml\"}, {\"id\": \"tew-827dru_firmware\", \"info\": {\"name\": \"tew-827dru_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,tew-827dru_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"tew-827dru\\\"\"], \"product\": \"tew-827dru_firmware\", \"shodan-query\": [\"http.html:\\\"tew-827dru\\\"\"], \"vendor\": \"trendnet\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"tew-827dru\"], \"case-insensitive\": true}]}], \"_source_file\": \"trendnet\\\\tew-827dru_firmware.yaml\"}, {\"id\": \"datepicker_calendar\", \"info\": {\"name\": \"datepicker_calendar\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,datepicker_calendar\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=triconsole.com - php calendar date picker\"], \"google-query\": [\"intitle:triconsole.com - php calendar date picker\"], \"product\": \"datepicker_calendar\", \"shodan-query\": [\"http.title:triconsole.com - php calendar date picker\"], \"vendor\": \"triconsole\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>triconsole.com - php calendar date picker.*?</title>\"]}]}], \"_source_file\": \"triconsole\\\\datepicker_calendar.yaml\"}, {\"id\": \"trilium\", \"info\": {\"name\": \"trilium\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,trilium\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"trilium notes\\\"\"], \"google-query\": [\"intitle:\\\"trilium notes\\\"\"], \"product\": \"trilium\", \"shodan-query\": [\"title:\\\"trilium notes\\\"\", \"http.title:\\\"trilium notes\\\"\"], \"vendor\": \"trilium_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>trilium notes.*?</title>\"]}]}], \"_source_file\": \"trilium_project\\\\trilium.yaml\"}, {\"id\": \"custom_product_designer\", \"info\": {\"name\": \"custom_product_designer\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,custom_product_designer\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"prestashop\\\" && body=\\\"tshirtecommerce\\\"\"], \"google-query\": [\"inurl:\\\"/tshirtecommerce/\\\"\"], \"product\": \"custom_product_designer\", \"vendor\": \"tshirtecommerce\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"prestashop\", \"tshirtecommerce\"], \"case-insensitive\": true}]}], \"_source_file\": \"tshirtecommerce\\\\custom_product_designer.yaml\"}, {\"id\": \"prestashop\", \"info\": {\"name\": \"prestashop\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,prestashop\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"prestashop\\\" && body=\\\"tshirtecommerce\\\"\"], \"product\": \"prestashop\", \"vendor\": \"tshirtecommerce\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"prestashop\", \"tshirtecommerce\"], \"case-insensitive\": true}]}], \"_source_file\": \"tshirtecommerce\\\\prestashop.yaml\"}, {\"id\": \"camaleon_cms\", \"info\": {\"name\": \"camaleon_cms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,camaleon_cms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"camaleon cms\\\"\"], \"product\": \"camaleon_cms\", \"shodan-query\": [\"html:\\\"camaleon_cms\\\"\", \"title:\\\"camaleon cms\\\"\"], \"vendor\": \"tuzitio\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"camaleon_cms\"], \"case-insensitive\": true}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>camaleon cms.*?</title>\"]}]}], \"_source_file\": \"tuzitio\\\\camaleon_cms.yaml\"}, {\"id\": \"booked\", \"info\": {\"name\": \"booked\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,booked\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"wp-content/plugins/booked/\"], \"google-query\": [\"inurl:\\\"/wp-content/plugins/booked/\\\"\"], \"product\": \"booked\", \"vendor\": \"twinkletoessoftware\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"wp-content/plugins/booked/\"], \"case-insensitive\": true}]}], \"_source_file\": \"twinkletoessoftware\\\\booked.yaml\"}, {\"id\": \"unifi_network_application\", \"info\": {\"name\": \"unifi_network_application\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,unifi_network_application\", \"severity\": \"info\", \"metadata\": {\"product\": \"unifi_network_application\", \"shodan-query\": [\"http.title:\\\"unifi network\\\"\"], \"vendor\": \"ui\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>unifi network.*?</title>\"]}]}], \"_source_file\": \"ui\\\\unifi_network_application.yaml\"}, {\"id\": \"umbraco\", \"info\": {\"name\": \"umbraco\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,umbraco\", \"severity\": \"info\", \"metadata\": {\"product\": \"umbraco\", \"shodan-query\": [\"http.html:\\\"umbraco\\\"\"], \"vendor\": \"umbraco\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"umbraco\"], \"case-insensitive\": true}]}], \"_source_file\": \"umbraco\\\\umbraco.yaml\"}, {\"id\": \"laravel_filemanager\", \"info\": {\"name\": \"laravel_filemanager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,laravel_filemanager\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"laravel filemanager\\\"\"], \"product\": \"laravel_filemanager\", \"shodan-query\": [\"http.html:\\\"laravel filemanager\\\"\"], \"vendor\": \"unisharp\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"laravel filemanager\"], \"case-insensitive\": true}]}], \"_source_file\": \"unisharp\\\\laravel_filemanager.yaml\"}, {\"id\": \"nvr301-04s2-p4\", \"info\": {\"name\": \"nvr301-04s2-p4\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,nvr301-04s2-p4\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"nvr301-04-p4\\\"\"], \"product\": \"nvr301-04s2-p4\", \"vendor\": \"uniview\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>nvr301-04-p4.*?</title>\"]}]}], \"_source_file\": \"uniview\\\\nvr301-04s2-p4.yaml\"}, {\"id\": \"usualtoolcms\", \"info\": {\"name\": \"usualtoolcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,usualtoolcms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"usualtool\\\"\"], \"product\": \"usualtoolcms\", \"vendor\": \"usualtool\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"usualtool\"], \"case-insensitive\": true}]}], \"_source_file\": \"usualtool\\\\usualtoolcms.yaml\"}, {\"id\": \"wp-automatic\", \"info\": {\"name\": \"wp-automatic\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wp-automatic\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"wp-content/plugins/wp-automatic/\"], \"google-query\": [\"inurl:\\\"/wp-content/plugins/wp-automatic/\\\"\"], \"product\": \"wp-automatic\", \"shodan-query\": [\"http.html:\\\"wp-content/plugins/wp-automatic/\\\"\"], \"vendor\": \"valvepress\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"wp-content/plugins/wp-automatic/\"], \"case-insensitive\": true}]}], \"_source_file\": \"valvepress\\\\wp-automatic.yaml\"}, {\"id\": \"x-ui\", \"info\": {\"name\": \"x-ui\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,x-ui\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"x-ui login\\\"\"], \"product\": \"x-ui\", \"shodan-query\": [\"title:\\\"x-ui login\\\"\"], \"vendor\": \"vaxilu\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>x-ui login.*?</title>\"]}]}], \"_source_file\": \"vaxilu\\\\x-ui.yaml\"}, {\"id\": \"vbulletin\", \"info\": {\"name\": \"vbulletin\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vbulletin\", \"severity\": \"info\", \"metadata\": {\"product\": \"vbulletin\", \"vendor\": \"vbulletin\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<!-- do not remove this copyright notice -->powered by < a href=\\\"https://www.vbulletin.com\\\" id=\\\"vbulletinlink\\\">\", \"content=\\\"vbulletin\", \"powered by vbulletin&trade;\"], \"case-insensitive\": true}]}], \"_source_file\": \"vbulletin\\\\vbulletin.yaml\"}, {\"id\": \"business_intelligence_and_reporting_tools\", \"info\": {\"name\": \"business_intelligence_and_reporting_tools\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,business_intelligence_and_reporting_tools\", \"severity\": \"info\", \"metadata\": {\"product\": \"business_intelligence_and_reporting_tools\", \"shodan-query\": [\"http.title:\\\"eclipse birt home\\\"\"], \"vendor\": \"vendor\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>eclipse birt home.*?</title>\"]}]}], \"_source_file\": \"vendor\\\\business_intelligence_and_reporting_tools.yaml\"}, {\"id\": \"vendure\", \"info\": {\"name\": \"vendure\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vendure\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"vendure\"], \"product\": \"vendure\", \"vendor\": \"vendure-ecommerce\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"vendure\"], \"case-insensitive\": true}]}], \"_source_file\": \"vendure-ecommerce\\\\vendure.yaml\"}, {\"id\": \"next.js\", \"info\": {\"name\": \"next.js\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,next.js\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/_next/static\\\"\"], \"product\": \"next.js\", \"shodan-query\": [\"http.html:\\\"/_next/static\\\"\", \"cpe:\\\"cpe:2.3:a:zeit:next.js\\\"\"], \"vendor\": \"vercel\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/_next/static\"], \"case-insensitive\": true}]}], \"_source_file\": \"vercel\\\\next.js.yaml\"}, {\"id\": \"workforce_optimization\", \"info\": {\"name\": \"workforce_optimization\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,workforce_optimization\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"verint sign-in\\\"\"], \"google-query\": [\"intitle:\\\"verint sign-in\\\"\"], \"product\": \"workforce_optimization\", \"shodan-query\": [\"title:\\\"verint sign-in\\\"\", \"http.title:\\\"verint sign-in\\\"\"], \"vendor\": \"verint\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>verint sign-in.*?</title>\"]}]}], \"_source_file\": \"verint\\\\workforce_optimization.yaml\"}, {\"id\": \"concerto\", \"info\": {\"name\": \"concerto\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,concerto\", \"severity\": \"info\", \"metadata\": {\"product\": \"concerto\", \"shodan-query\": [\"http.favicon.hash:-534530225\"], \"vendor\": \"versa-networks\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-534530225\"]}]}], \"_source_file\": \"versa-networks\\\\concerto.yaml\"}, {\"id\": \"versa_operating_system\", \"info\": {\"name\": \"versa_operating_system\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,versa_operating_system\", \"severity\": \"info\", \"metadata\": {\"product\": \"versa_operating_system\", \"shodan-query\": [\"title:\\\"flex vnf web-ui\\\"\"], \"vendor\": \"versa-networks\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>flex vnf web-ui.*?</title>\"]}]}], \"_source_file\": \"versa-networks\\\\versa_operating_system.yaml\"}, {\"id\": \"modeldb\", \"info\": {\"name\": \"modeldb\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,modeldb\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=-2097033750\", \"title=\\\"verta ai\\\"\"], \"google-query\": [\"intitle:\\\"verta ai\\\"\"], \"product\": \"modeldb\", \"shodan-query\": [\"http.favicon.hash:-2097033750\", \"http.title:\\\"verta ai\\\"\"], \"vendor\": \"vertaai\", \"verified\": true, \"zoomeye-query\": [\"title:\\\"verta ai\\\"\"]}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-2097033750\"]}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>verta ai.*?</title>\"]}]}], \"_source_file\": \"vertaai\\\\modeldb.yaml\"}, {\"id\": \"vicidial\", \"info\": {\"name\": \"vicidial\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vicidial\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"1375401192\\\"\"], \"product\": \"vicidial\", \"vendor\": \"vicidial\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1375401192\"]}, {\"type\": \"word\", \"words\": [\"url=/vicidial/welcome.php\"], \"case-insensitive\": true}]}], \"_source_file\": \"vicidial\\\\vicidial.yaml\"}, {\"id\": \"vitogate_300_firmware\", \"info\": {\"name\": \"vitogate_300_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vitogate_300_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"vitogate 300\\\"\"], \"google-query\": [\"intitle:\\\"vitogate 300\\\"\"], \"product\": \"vitogate_300_firmware\", \"shodan-query\": [\"title:\\\"vitogate 300\\\"\", \"http.title:\\\"vitogate 300\\\"\"], \"vendor\": \"viessmann\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>vitogate 300.*?</title>\"]}]}], \"_source_file\": \"viessmann\\\\vitogate_300_firmware.yaml\"}, {\"id\": \"cobranca\", \"info\": {\"name\": \"cobranca\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cobranca\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=876876147\"], \"product\": \"cobranca\", \"shodan-query\": [\"http.favicon.hash:876876147\"], \"vendor\": \"virtuasoftware\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"876876147\"]}]}], \"_source_file\": \"virtuasoftware\\\\cobranca.yaml\"}, {\"id\": \"aria_operations_for_logs\", \"info\": {\"name\": \"aria_operations_for_logs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,aria_operations_for_logs\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"vrealize log insight\\\"\"], \"google-query\": [\"intitle:\\\"vrealize log insight\\\"\"], \"product\": \"aria_operations_for_logs\", \"shodan-query\": [\"title:\\\"vrealize log insight\\\"\", \"http.title:\\\"vrealize log insight\\\"\"], \"vendor\": \"vmware\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>vrealize log insight.*?</title>\"]}]}], \"_source_file\": \"vmware\\\\aria_operations_for_logs.yaml\"}, {\"id\": \"cloud_foundation\", \"info\": {\"name\": \"cloud_foundation\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cloud_foundation\", \"severity\": \"info\", \"metadata\": {\"product\": \"cloud_foundation\", \"shodan-query\": [\"title:\\\"vmware cloud\\\"\"], \"vendor\": \"vmware\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>vmware cloud.*?</title>\"]}]}], \"_source_file\": \"vmware\\\\cloud_foundation.yaml\"}, {\"id\": \"vmware-esxi\", \"info\": {\"name\": \"vmware-esxi\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vmware-esxi\", \"severity\": \"info\", \"metadata\": {\"product\": \"esxi\", \"vendor\": \"vmware\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title ng-bind=\\\"$root.title\\\">\", \"ng-app=\\\"esxuiapp\\\"\"], \"case-insensitive\": true}]}], \"_source_file\": \"vmware\\\\esxi.yaml\"}, {\"id\": \"vmware-horizon\", \"info\": {\"name\": \"vmware-horizon\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vmware-horizon\", \"severity\": \"info\", \"metadata\": {\"product\": \"horizon\", \"vendor\": \"vmware\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"alt=\\\"vmware horizon\\\">\", \"href='https://www.vmware.com/go/viewclients'\"], \"case-insensitive\": true}]}], \"_source_file\": \"vmware\\\\horizon.yaml\"}, {\"id\": \"identity_manager\", \"info\": {\"name\": \"identity_manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,identity_manager\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"vmware-workspace-one-access\\\" || app=\\\"vmware-identity-manager\\\" || app=\\\"vmware-vrealize\\\"\", \"icon_hash=-1250474341\"], \"product\": \"identity_manager\", \"shodan-query\": [\"http.favicon.hash:-1250474341\"], \"vendor\": \"vmware\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1250474341\"]}]}], \"_source_file\": \"vmware\\\\identity_manager.yaml\"}, {\"id\": \"spring_boot\", \"info\": {\"name\": \"spring_boot\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,spring_boot\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"eureka\\\"\"], \"google-query\": [\"intitle:\\\"eureka\\\"\"], \"product\": \"spring_boot\", \"shodan-query\": [\"http.title:\\\"eureka\\\"\"], \"vendor\": \"vmware\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>eureka.*?</title>\"]}]}], \"_source_file\": \"vmware\\\\spring_boot.yaml\"}, {\"id\": \"vcenter_server\", \"info\": {\"name\": \"vcenter_server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vcenter_server\", \"severity\": \"info\", \"metadata\": {\"product\": \"vcenter_server\", \"shodan-query\": [\"title:\\\"vmware vcenter\\\"\"], \"vendor\": \"vmware\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>vmware vcenter.*?</title>\"]}]}], \"_source_file\": \"vmware\\\\vcenter_server.yaml\"}, {\"id\": \"vmware\", \"info\": {\"name\": \"vmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vmware\", \"severity\": \"info\", \"metadata\": {\"product\": \"vmware\", \"shodan-query\": [\"title:\\\"vmware cloud\\\"\"], \"vendor\": \"vmware\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>vmware cloud.*?</title>\"]}]}], \"_source_file\": \"vmware\\\\vmware.yaml\"}, {\"id\": \"vrealize_log_insight\", \"info\": {\"name\": \"vrealize_log_insight\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vrealize_log_insight\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"vrealize log insight\\\"\"], \"google-query\": [\"intitle:\\\"vrealize log insight\\\"\"], \"product\": \"vrealize_log_insight\", \"shodan-query\": [\"http.title:\\\"vrealize log insight\\\"\"], \"vendor\": \"vmware\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>vrealize log insight.*?</title>\"]}]}], \"_source_file\": \"vmware\\\\vrealize_log_insight.yaml\"}, {\"id\": \"vrealize_network_insight\", \"info\": {\"name\": \"vrealize_network_insight\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vrealize_network_insight\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"vmware vrealize network insight\\\"\", \"title=\\\"vmware aria operations\\\"\"], \"google-query\": [\"intitle:\\\"vmware aria operations\\\"\", \"intitle:\\\"vmware vrealize network insight\\\"\"], \"product\": \"vrealize_network_insight\", \"shodan-query\": [\"title:\\\"vmware aria operations\\\"\", \"http.title:\\\"vmware vrealize network insight\\\"\", \"http.title:\\\"vmware aria operations\\\"\", \"title:\\\"vmware vrealize network insight\\\"\"], \"vendor\": \"vmware\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>vmware aria operations.*?</title>\", \"(?mi)<title[^>]*>vmware vrealize network insight.*?</title>\"]}]}], \"_source_file\": \"vmware\\\\vrealize_network_insight.yaml\"}, {\"id\": \"vrealize_operations\", \"info\": {\"name\": \"vrealize_operations\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vrealize_operations\", \"severity\": \"info\", \"metadata\": {\"product\": \"vrealize_operations\", \"shodan-query\": [\"http.title:\\\"vrealize operations tenant app\\\"\"], \"vendor\": \"vmware\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>vrealize operations tenant app.*?</title>\"]}]}], \"_source_file\": \"vmware\\\\vrealize_operations.yaml\"}, {\"id\": \"vrealize_operations_manager\", \"info\": {\"name\": \"vrealize_operations_manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vrealize_operations_manager\", \"severity\": \"info\", \"metadata\": {\"product\": \"vrealize_operations_manager\", \"shodan-query\": [\"title:\\\"vrealize operations manager\\\"\"], \"vendor\": \"vmware\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>vrealize operations manager.*?</title>\"]}]}], \"_source_file\": \"vmware\\\\vrealize_operations_manager.yaml\"}, {\"id\": \"workspace_one_uem_console\", \"info\": {\"name\": \"workspace_one_uem_console\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,workspace_one_uem_console\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"banner=\\\"/airwatch/default.aspx\\\" || header=\\\"/airwatch/default.aspx\\\"\"], \"product\": \"workspace_one_uem_console\", \"shodan-query\": [\"html:\\\"/airwatch/default.aspx\\\"\"], \"vendor\": \"vmware\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/airwatch/default.aspx\"], \"case-insensitive\": true}]}], \"_source_file\": \"vmware\\\\workspace_one_uem_console.yaml\"}, {\"id\": \"aurall_rec_monitor\", \"info\": {\"name\": \"aurall_rec_monitor\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,aurall_rec_monitor\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"aurall\\\"\"], \"product\": \"aurall_rec_monitor\", \"shodan-query\": [\"html:\\\"aurall\\\"\", \"http.html:\\\"aurall\\\"\"], \"vendor\": \"void\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"aurall\"], \"case-insensitive\": true}]}], \"_source_file\": \"void\\\\aurall_rec_monitor.yaml\"}, {\"id\": \"voipmonitor\", \"info\": {\"name\": \"voipmonitor\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,voipmonitor\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"voipmonitor\\\"\"], \"google-query\": [\"intitle:\\\"voipmonitor\\\"\"], \"product\": \"voipmonitor\", \"shodan-query\": [\"http.title:\\\"voipmonitor\\\"\"], \"vendor\": \"voipmonitor\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>voipmonitor.*?</title>\"]}]}], \"_source_file\": \"voipmonitor\\\\voipmonitor.yaml\"}, {\"id\": \"voyager\", \"info\": {\"name\": \"voyager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,voyager\", \"severity\": \"info\", \"metadata\": {\"product\": \"voyager\", \"shodan-query\": [\"html:\\\"voyager-assets\\\"\"], \"vendor\": \"voyager_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"voyager-assets\"], \"case-insensitive\": true}]}], \"_source_file\": \"voyager_project\\\\voyager.yaml\"}, {\"id\": \"vvvebjs\", \"info\": {\"name\": \"vvvebjs\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vvvebjs\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"524332373\\\"\"], \"product\": \"vvvebjs\", \"vendor\": \"vvvebjs\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"524332373\"]}]}], \"_source_file\": \"vvvebjs\\\\vvvebjs.yaml\"}, {\"id\": \"download_manager\", \"info\": {\"name\": \"download_manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,download_manager\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"wp-content/plugins/download-manager/\\\"\"], \"google-query\": [\"inurl:\\\"/wp-content/plugins/download-manager/\\\"\"], \"product\": \"download_manager\", \"shodan-query\": [\"html:\\\"wp-content/plugins/download-manager/\\\"\"], \"vendor\": \"w3eden\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"wp-content/plugins/download-manager/\"], \"case-insensitive\": true}]}], \"_source_file\": \"w3eden\\\\download_manager.yaml\"}, {\"id\": \"compact_controller_100_firmware\", \"info\": {\"name\": \"compact_controller_100_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,compact_controller_100_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/wbm/\\\" html:\\\"wago\\\"\"], \"product\": \"compact_controller_100_firmware\", \"shodan-query\": [\"html:\\\"/wbm/\\\" html:\\\"wago\\\"\", \"http.html:\\\"/wbm/\\\" html:\\\"wago\\\"\"], \"vendor\": \"wago\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/wbm/\\\" html:\\\"wago\"], \"case-insensitive\": true}]}], \"_source_file\": \"wago\\\\compact_controller_100_firmware.yaml\"}, {\"id\": \"wago\", \"info\": {\"name\": \"wago\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wago\", \"severity\": \"info\", \"metadata\": {\"product\": \"wago\", \"shodan-query\": [\"html:\\\"wago ethernet web-based management\\\"\"], \"vendor\": \"wago\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"wago ethernet web-based management\"], \"case-insensitive\": true}]}], \"_source_file\": \"wago\\\\wago.yaml\"}, {\"id\": \"wl-wn530h4_firmware\", \"info\": {\"name\": \"wl-wn530h4_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wl-wn530h4_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=-1350437236\"], \"product\": \"wl-wn530h4_firmware\", \"shodan-query\": [\"http.favicon.hash:-1350437236\"], \"vendor\": \"wavlink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1350437236\"]}]}], \"_source_file\": \"wavlink\\\\wl-wn530h4_firmware.yaml\"}, {\"id\": \"wl-wn530hg4_firmware\", \"info\": {\"name\": \"wl-wn530hg4_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wl-wn530hg4_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"wn530hg4\\\"\", \"title=\\\"wi-fi app login\\\"\"], \"google-query\": [\"intitle:\\\"wi-fi app login\\\"\"], \"product\": \"wl-wn530hg4_firmware\", \"shodan-query\": [\"http.title:\\\"wi-fi app login\\\"\", \"http.html:\\\"wn530hg4\\\"\"], \"vendor\": \"wavlink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"wn530hg4\"], \"case-insensitive\": true}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>wi-fi app login.*?</title>\"]}]}], \"_source_file\": \"wavlink\\\\wl-wn530hg4_firmware.yaml\"}, {\"id\": \"wl-wn531g3_firmware\", \"info\": {\"name\": \"wl-wn531g3_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wl-wn531g3_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"ac1200\\\" && body=\\\"wavlink\\\"\"], \"product\": \"wl-wn531g3_firmware\", \"vendor\": \"wavlink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ac1200\", \"wavlink\"], \"case-insensitive\": true}]}], \"_source_file\": \"wavlink\\\\wl-wn531g3_firmware.yaml\"}, {\"id\": \"wl-wn533a8_firmware\", \"info\": {\"name\": \"wl-wn533a8_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wl-wn533a8_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"wn533a8\\\"\"], \"product\": \"wl-wn533a8_firmware\", \"shodan-query\": [\"html:\\\"wn533a8\\\"\"], \"vendor\": \"wavlink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"wn533a8\"], \"case-insensitive\": true}]}], \"_source_file\": \"wavlink\\\\wl-wn533a8_firmware.yaml\"}, {\"id\": \"wl-wn535k2\", \"info\": {\"name\": \"wl-wn535k2\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wl-wn535k2\", \"severity\": \"info\", \"metadata\": {\"product\": \"wl-wn535k2\", \"shodan-query\": [\"http.title:\\\"wi-fi app login\\\"\"], \"vendor\": \"wavlink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>wi-fi app login.*?</title>\"]}]}], \"_source_file\": \"wavlink\\\\wl-wn535k2.yaml\"}, {\"id\": \"wl-wn535k2_firmware\", \"info\": {\"name\": \"wl-wn535k2_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wl-wn535k2_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"wi-fi app login\\\"\"], \"google-query\": [\"intitle:\\\"wi-fi app login\\\"\"], \"product\": \"wl-wn535k2_firmware\", \"shodan-query\": [\"http.title:\\\"wi-fi app login\\\"\"], \"vendor\": \"wavlink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>wi-fi app login.*?</title>\"]}]}], \"_source_file\": \"wavlink\\\\wl-wn535k2_firmware.yaml\"}, {\"id\": \"wn530h4_firmware\", \"info\": {\"name\": \"wn530h4_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wn530h4_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"wavlink\\\"\"], \"product\": \"wn530h4_firmware\", \"shodan-query\": [\"http.html:\\\"wavlink\\\"\"], \"vendor\": \"wavlink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"wavlink\"], \"case-insensitive\": true}]}], \"_source_file\": \"wavlink\\\\wn530h4_firmware.yaml\"}, {\"id\": \"wn530hg4_firmware\", \"info\": {\"name\": \"wn530hg4_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wn530hg4_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"wavlink\\\"\"], \"product\": \"wn530hg4_firmware\", \"shodan-query\": [\"http.html:\\\"wavlink\\\"\"], \"vendor\": \"wavlink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"wavlink\"], \"case-insensitive\": true}]}], \"_source_file\": \"wavlink\\\\wn530hg4_firmware.yaml\"}, {\"id\": \"wn533a8_firmware\", \"info\": {\"name\": \"wn533a8_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wn533a8_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"wi-fi app login\\\"\", \"body=\\\"wavlink\\\"\"], \"google-query\": [\"intitle:\\\"wi-fi app login\\\"\"], \"product\": \"wn533a8_firmware\", \"shodan-query\": [\"http.title:\\\"wi-fi app login\\\"\", \"http.html:\\\"wavlink\\\"\"], \"vendor\": \"wavlink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"wavlink\"], \"case-insensitive\": true}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>wi-fi app login.*?</title>\"]}]}], \"_source_file\": \"wavlink\\\\wn533a8_firmware.yaml\"}, {\"id\": \"wn535g3_firmware\", \"info\": {\"name\": \"wn535g3_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wn535g3_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"wi-fi app login\\\"\", \"body=\\\"wavlink\\\"\"], \"google-query\": [\"intitle:\\\"wi-fi app login\\\"\"], \"product\": \"wn535g3_firmware\", \"shodan-query\": [\"http.html:\\\"wavlink\\\"\", \"http.title:\\\"wi-fi app login\\\"\"], \"vendor\": \"wavlink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"wavlink\"], \"case-insensitive\": true}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>wi-fi app login.*?</title>\"]}]}], \"_source_file\": \"wavlink\\\\wn535g3_firmware.yaml\"}, {\"id\": \"wn575a4\", \"info\": {\"name\": \"wn575a4\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wn575a4\", \"severity\": \"info\", \"metadata\": {\"product\": \"wn575a4\", \"shodan-query\": [\"http.title:\\\"wi-fi app login\\\"\"], \"vendor\": \"wavlink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>wi-fi app login.*?</title>\"]}]}], \"_source_file\": \"wavlink\\\\wn575a4.yaml\"}, {\"id\": \"wn579x3_firmware\", \"info\": {\"name\": \"wn579x3_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wn579x3_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"wavlink\\\"\"], \"product\": \"wn579x3_firmware\", \"shodan-query\": [\"http.html:\\\"wavlink\\\"\"], \"vendor\": \"wavlink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"wavlink\"], \"case-insensitive\": true}]}], \"_source_file\": \"wavlink\\\\wn579x3_firmware.yaml\"}, {\"id\": \"wazuh\", \"info\": {\"name\": \"wazuh\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wazuh\", \"severity\": \"info\", \"metadata\": {\"product\": \"wazuh\", \"shodan-query\": [\"title:\\\"wazuh\\\"\"], \"vendor\": \"wazuh\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>wazuh.*?</title>\"]}]}], \"_source_file\": \"wazuh\\\\wazuh.yaml\"}, {\"id\": \"e-cology\", \"info\": {\"name\": \"e-cology\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,e-cology\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"泛微-协同办公oa\\\"\", \"app=\\\"泛微-e-weaver\\\"\"], \"product\": \"e-cology\", \"shodan-query\": [\"ecology_jsessionid\"], \"vendor\": \"weaver\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"ecology_jsessionid\"], \"case-insensitive\": true}]}], \"_source_file\": \"weaver\\\\e-cology.yaml\"}, {\"id\": \"web2py\", \"info\": {\"name\": \"web2py\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,web2py\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=-1680052984\"], \"product\": \"web2py\", \"shodan-query\": [\"http.favicon.hash:-1680052984\"], \"vendor\": \"web2py\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1680052984\"]}]}], \"_source_file\": \"web2py\\\\web2py.yaml\"}, {\"id\": \"docusaurus_plugin_content_gists\", \"info\": {\"name\": \"docusaurus_plugin_content_gists\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,docusaurus_plugin_content_gists\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"docusaurus\\\"\"], \"product\": \"docusaurus_plugin_content_gists\", \"shodan-query\": [\"http.html:\\\"docusaurus\\\"\"], \"vendor\": \"webbertakken\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"docusaurus\"], \"case-insensitive\": true}]}], \"_source_file\": \"webbertakken\\\\docusaurus_plugin_content_gists.yaml\"}, {\"id\": \"webiq\", \"info\": {\"name\": \"webiq\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,webiq\", \"severity\": \"info\", \"metadata\": {\"product\": \"webiq\", \"shodan-query\": [\"title:\\\"webiq\\\"\"], \"vendor\": \"webiq\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>webiq.*?</title>\"]}]}], \"_source_file\": \"webiq\\\\webiq.yaml\"}, {\"id\": \"bagisto\", \"info\": {\"name\": \"bagisto\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,bagisto\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"bagisto\"], \"product\": \"bagisto\", \"vendor\": \"webkul\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"bagisto\"], \"case-insensitive\": true}]}], \"_source_file\": \"webkul\\\\bagisto.yaml\"}, {\"id\": \"qloapps\", \"info\": {\"name\": \"qloapps\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,qloapps\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"qloapps\\\"\"], \"product\": \"qloapps\", \"vendor\": \"webkul\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>qloapps.*?</title>\"]}]}], \"_source_file\": \"webkul\\\\qloapps.yaml\"}, {\"id\": \"usermin\", \"info\": {\"name\": \"usermin\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,usermin\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"usermin\\\"\"], \"product\": \"usermin\", \"shodan-query\": [\"title:\\\"usermin\\\"\"], \"vendor\": \"webmin\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>usermin.*?</title>\"]}]}], \"_source_file\": \"webmin\\\\usermin.yaml\"}, {\"id\": \"webmin\", \"info\": {\"name\": \"webmin\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,webmin\", \"severity\": \"info\", \"metadata\": {\"product\": \"webmin\", \"vendor\": \"webmin\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"webmin\", \"session_login\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"webmin server on\"], \"case-insensitive\": true}]}], \"_source_file\": \"webmin\\\\webmin.yaml\"}, {\"id\": \"webp_server_go\", \"info\": {\"name\": \"webp_server_go\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,webp_server_go\", \"severity\": \"info\", \"metadata\": {\"product\": \"webp_server_go\", \"shodan-query\": [\"http.html:\\\"webp\\\"\"], \"vendor\": \"webp\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"webp\"], \"case-insensitive\": true}]}], \"_source_file\": \"webp\\\\webp_server_go.yaml\"}, {\"id\": \"webpagetest\", \"info\": {\"name\": \"webpagetest\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,webpagetest\", \"severity\": \"info\", \"metadata\": {\"product\": \"webpagetest\", \"shodan-query\": [\"title:\\\"webpagetest\\\"\"], \"vendor\": \"webpagetest\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>webpagetest.*?</title>\"]}]}], \"_source_file\": \"webpagetest\\\\webpagetest.yaml\"}, {\"id\": \"websitepanel\", \"info\": {\"name\": \"websitepanel\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,websitepanel\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"websitepanel\\\" html:\\\"login\\\"\"], \"google-query\": [\"intitle:\\\"websitepanel\\\" html:\\\"login\\\"\"], \"product\": \"websitepanel\", \"shodan-query\": [\"title:\\\"websitepanel\\\" html:\\\"login\\\"\", \"http.title:\\\"websitepanel\\\" html:\\\"login\\\"\"], \"vendor\": \"websitepanel\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>websitepanel\\\" html:\\\"login.*?</title>\"]}]}], \"_source_file\": \"websitepanel\\\\websitepanel.yaml\"}, {\"id\": \"websvn\", \"info\": {\"name\": \"websvn\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,websvn\", \"severity\": \"info\", \"metadata\": {\"product\": \"websvn\", \"vendor\": \"websvn\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"websvn\", \"subversion\"], \"condition\": \"and\", \"case-insensitive\": true}]}], \"_source_file\": \"websvn\\\\websvn.yaml\"}, {\"id\": \"weiphp\", \"info\": {\"name\": \"weiphp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,weiphp\", \"severity\": \"info\", \"metadata\": {\"product\": \"weiphp\", \"vendor\": \"weiphp\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/css/weiphp.css\", \"content=\\\"weiphp\", \"本系统由<a href=\\\"http://www.weiphp.cn\\\" target=\\\"_blank\\\">weiphp</a>强力驱动\"], \"case-insensitive\": true}]}], \"_source_file\": \"weiphp\\\\weiphp.yaml\"}, {\"id\": \"mycloud_nas\", \"info\": {\"name\": \"mycloud_nas\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,mycloud_nas\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=-1074357885\"], \"product\": \"mycloud_nas\", \"shodan-query\": [\"http.favicon.hash:-1074357885\"], \"vendor\": \"western_digital\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1074357885\"]}]}], \"_source_file\": \"western_digital\\\\mycloud_nas.yaml\"}, {\"id\": \"my_cloud_wdbctl0020hwt_firmware\", \"info\": {\"name\": \"my_cloud_wdbctl0020hwt_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,my_cloud_wdbctl0020hwt_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=-1074357885\"], \"product\": \"my_cloud_wdbctl0020hwt_firmware\", \"shodan-query\": [\"http.favicon.hash:-1074357885\"], \"vendor\": \"western_digital\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-1074357885\"]}]}], \"_source_file\": \"western_digital\\\\my_cloud_wdbctl0020hwt_firmware.yaml\"}, {\"id\": \"protop\", \"info\": {\"name\": \"protop\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,protop\", \"severity\": \"info\", \"metadata\": {\"product\": \"protop\", \"shodan-query\": [\"html:\\\"<title>protop\\\"\"], \"vendor\": \"white-star-software\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"<title>protop\"], \"case-insensitive\": true}]}], \"_source_file\": \"white-star-software\\\\protop.yaml\"}, {\"id\": \"wftpserver\", \"info\": {\"name\": \"wftpserver\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wftpserver\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"963565804\\\"\", \"title=\\\"wing ftp server\\\"\", \"server: wing ftp server\"], \"product\": \"wftpserver\", \"shodan-query\": [\"http.html_hash:2121146066\", \"http.favicon.hash:963565804\", \"title:\\\"wing ftp server\\\"\", \"server: wing ftp server\"], \"vendor\": \"wing_ftp_server\", \"verified\": true, \"zoomeye-query\": [\"app=\\\"wing ftp server\\\"\"]}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"server: wing ftp server\"], \"case-insensitive\": true}, {\"type\": \"favicon\", \"hash\": [\"963565804\"]}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>wing ftp server.*?</title>\"]}]}], \"_source_file\": \"wing_ftp_server\\\\wftpserver.yaml\"}, {\"id\": \"winter\", \"info\": {\"name\": \"winter\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,winter\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"winter cms\\\"\"], \"google-query\": [\"intitle:\\\"winter cms\\\"\"], \"product\": \"winter\", \"shodan-query\": [\"title:\\\"winter cms\\\"\", \"http.title:\\\"winter cms\\\"\"], \"vendor\": \"wintercms\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>winter cms.*?</title>\"]}]}], \"_source_file\": \"wintercms\\\\winter.yaml\"}, {\"id\": \"holmes\", \"info\": {\"name\": \"holmes\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,holmes\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"holmes orchestrator\\\"\", \"title=\\\"wipro holmes orchestrator\\\"\"], \"product\": \"holmes\", \"vendor\": \"wipro\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>holmes orchestrator.*?</title>\", \"(?mi)<title[^>]*>wipro holmes orchestrator.*?</title>\"]}]}], \"_source_file\": \"wipro\\\\holmes.yaml\"}, {\"id\": \"help_scout\", \"info\": {\"name\": \"help_scout\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,help_scout\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/wp-content/plugins/woocommerce-help-scout\\\"\"], \"product\": \"help_scout\", \"vendor\": \"woocommerce\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/wp-content/plugins/woocommerce-help-scout\"], \"case-insensitive\": true}]}], \"_source_file\": \"woocommerce\\\\help_scout.yaml\"}, {\"id\": \"wordpress\", \"info\": {\"name\": \"wordpress\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wordpress\", \"severity\": \"info\", \"metadata\": {\"product\": \"wordpress\", \"vendor\": \"wordpress\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/wp-content/themes/\", \"/wp-content/uploads/\", \"/wp-includes/\", \"<link rel='stylesheet' id='wp-block-library-css\", \"\\\\/wp-admin\\\\/admin-ajax.php\\\",\\\"\", \"name=\\\"generator\\\" content=\\\"wordpress \"], \"case-insensitive\": true}]}], \"_source_file\": \"wordpress\\\\wordpress.yaml\"}, {\"id\": \"streaming_engine\", \"info\": {\"name\": \"streaming_engine\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,streaming_engine\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"manager\\\" product:\\\"wowza streaming engine\\\"\"], \"google-query\": [\"intitle:\\\"manager\\\" product:\\\"wowza streaming engine\\\"\"], \"product\": \"streaming_engine\", \"shodan-query\": [\"http.title:\\\"manager\\\" product:\\\"wowza streaming engine\\\"\", \"cpe:\\\"cpe:2.3:a:wowza:streaming_engine\\\"\"], \"vendor\": \"wowza\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>manager\\\" product:\\\"wowza streaming engine.*?</title>\"]}]}], \"_source_file\": \"wowza\\\\streaming_engine.yaml\"}, {\"id\": \"wpb-show-core\", \"info\": {\"name\": \"wpb-show-core\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wpb-show-core\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"wp-content/plugins/wpb-show-core/\\\"\"], \"product\": \"wpb-show-core\", \"vendor\": \"wpb-show-core-project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"wp-content/plugins/wpb-show-core/\"], \"case-insensitive\": true}]}], \"_source_file\": \"wpb-show-core-project\\\\wpb-show-core.yaml\"}, {\"id\": \"notificationx\", \"info\": {\"name\": \"notificationx\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,notificationx\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/wp-content/plugins/notificationx\\\"\"], \"product\": \"notificationx\", \"vendor\": \"wpdeveloper\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/wp-content/plugins/notificationx\"], \"case-insensitive\": true}]}], \"_source_file\": \"wpdeveloper\\\\notificationx.yaml\"}, {\"id\": \"wp-google-maps\", \"info\": {\"name\": \"wp-google-maps\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wp-google-maps\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"wp-google-maps\\\"\"], \"product\": \"wp-google-maps\", \"shodan-query\": [\"http.html:\\\"wp-google-maps\\\"\"], \"vendor\": \"wpgmaps\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"wp-google-maps\"]}]}], \"_source_file\": \"wpgmaps\\\\wp-google-maps.yaml\"}, {\"id\": \"wp_go_maps\", \"info\": {\"name\": \"wp_go_maps\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wp_go_maps\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/wp-content/plugins/wp-google-maps\\\"\"], \"product\": \"wp_go_maps\", \"vendor\": \"wpgmaps\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/wp-content/plugins/wp-google-maps\"], \"case-insensitive\": true}]}], \"_source_file\": \"wpgmaps\\\\wp_go_maps.yaml\"}, {\"id\": \"wpmobile.app\", \"info\": {\"name\": \"wpmobile.app\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wpmobile.app\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/wp-content/plugins/wpappninja\\\"\"], \"google-query\": [\"inurl:\\\"/wp-content/plugins/wpappninja\\\"\"], \"product\": \"wpmobile.app\", \"shodan-query\": [\"http.html:\\\"/wp-content/plugins/wpappninja\\\"\"], \"vendor\": \"wpmobile.app\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/wp-content/plugins/wpappninja\"]}]}], \"_source_file\": \"wpmobile.app\\\\wpmobile.app.yaml\"}, {\"id\": \"wps-hide-login\", \"info\": {\"name\": \"wps-hide-login\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wps-hide-login\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/wp-content/plugins/wps-hide-login\\\"\"], \"product\": \"wps-hide-login\", \"vendor\": \"wpserveur\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/wp-content/plugins/wps-hide-login\"], \"case-insensitive\": true}]}], \"_source_file\": \"wpserveur\\\\wps-hide-login.yaml\"}, {\"id\": \"woocommerce_ultimate_gift_card\", \"info\": {\"name\": \"woocommerce_ultimate_gift_card\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,woocommerce_ultimate_gift_card\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/wp-content/plugins/woocommerce-ultimate-gift-card\\\"\"], \"product\": \"woocommerce_ultimate_gift_card\", \"vendor\": \"wpswings\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/wp-content/plugins/woocommerce-ultimate-gift-card\"], \"case-insensitive\": true}]}], \"_source_file\": \"wpswings\\\\woocommerce_ultimate_gift_card.yaml\"}, {\"id\": \"ninja-tables\", \"info\": {\"name\": \"ninja-tables\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ninja-tables\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/wp-content/plugins/ninja-tables/\\\"\"], \"product\": \"ninja-tables\", \"vendor\": \"wpxpo\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/wp-content/plugins/ninja-tables/\"], \"case-insensitive\": true}]}], \"_source_file\": \"wpxpo\\\\ninja-tables.yaml\"}, {\"id\": \"eshop-_ecommerce-_store_website\", \"info\": {\"name\": \"eshop_-_ecommerce_-_store_website\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,eshop_-_ecommerce_-_store_website\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"eshop - multipurpose ecommerce\\\"\"], \"product\": \"eshop_-_ecommerce_-_store_website\", \"shodan-query\": [\"http.html:\\\"eshop - multipurpose ecommerce\\\"\"], \"vendor\": \"wrteam\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"eshop - multipurpose ecommerce\"], \"case-insensitive\": true}]}], \"_source_file\": \"wrteam\\\\eshop_-_ecommerce_-_store_website.yaml\"}, {\"id\": \"api_manager\", \"info\": {\"name\": \"api_manager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,api_manager\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=1398055326\"], \"google-query\": [\"inurl:\\\"carbon/admin/login\\\"\"], \"product\": \"api_manager\", \"shodan-query\": [\"http.favicon.hash:1398055326\"], \"vendor\": \"wso2\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1398055326\"]}]}], \"_source_file\": \"wso2\\\\api_manager.yaml\"}, {\"id\": \"wso2\", \"info\": {\"name\": \"wso2\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wso2\", \"severity\": \"info\", \"metadata\": {\"product\": \"wso2\", \"shodan-query\": [\"wso2 carbon server\"], \"vendor\": \"wso2\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"wso2 carbon server\"], \"case-insensitive\": true}]}], \"_source_file\": \"wso2\\\\wso2.yaml\"}, {\"id\": \"wuzhicms\", \"info\": {\"name\": \"wuzhicms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,wuzhicms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"wuzhicms\\\"\"], \"product\": \"wuzhicms\", \"shodan-query\": [\"http.html:\\\"wuzhicms\\\"\"], \"vendor\": \"wuzhicms\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"wuzhicms\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"content=\\\"wuzhicms\", \"powered by wuzhicms\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"<meta name=\\\"generator\\\" content=\\\"wuzhicms\"], \"case-insensitive\": true}]}], \"_source_file\": \"wuzhicms\\\\wuzhicms.yaml\"}, {\"id\": \"avideo\", \"info\": {\"name\": \"avideo\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,avideo\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"avideo\\\"\"], \"product\": \"avideo\", \"shodan-query\": [\"http.html:\\\"avideo\\\"\", \"html:\\\"avideo\\\"\"], \"vendor\": \"wwbn\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"avideo\"], \"case-insensitive\": true}]}], \"_source_file\": \"wwbn\\\\avideo.yaml\"}, {\"id\": \"moticdsm\", \"info\": {\"name\": \"moticdsm\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,moticdsm\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"617142232\\\"\"], \"product\": \"moticdsm\", \"vendor\": \"xiamen-motic\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"617142232\"]}]}], \"_source_file\": \"xiamen-motic\\\\moticdsm.yaml\"}, {\"id\": \"xnat\", \"info\": {\"name\": \"xnat\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xnat\", \"severity\": \"info\", \"metadata\": {\"product\": \"xnat\", \"shodan-query\": [\"http.title:\\\"xnat\\\"\"], \"vendor\": \"xnat\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>xnat.*?</title>\"]}]}], \"_source_file\": \"xnat\\\\xnat.yaml\"}, {\"id\": \"xoops\", \"info\": {\"name\": \"xoops\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xoops\", \"severity\": \"info\", \"metadata\": {\"product\": \"xoops\", \"vendor\": \"xoops\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"include/xoops.js\"], \"case-insensitive\": true}]}], \"_source_file\": \"xoops\\\\xoops.yaml\"}, {\"id\": \"xxl-job\", \"info\": {\"name\": \"xxl-job\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xxl-job\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=1691956220\"], \"product\": \"xxl-job\", \"shodan-query\": [\"http.favicon.hash:1691956220\"], \"vendor\": \"xuxueli\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\", \"{{BaseURL}}/xxl-job-admin\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1691956220\"]}, {\"type\": \"word\", \"words\": [\"分布式任务调度平台xxl-job\"], \"case-insensitive\": true}]}], \"_source_file\": \"xuxueli\\\\xxl-job.yaml\"}, {\"id\": \"xwiki-platform\", \"info\": {\"name\": \"xwiki-platform\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xwiki-platform\", \"severity\": \"info\", \"metadata\": {\"product\": \"xwiki-platform\", \"shodan-query\": [\"http.html:\\\"data-xwiki-reference\\\"\"], \"vendor\": \"xwiki\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"data-xwiki-reference\"], \"case-insensitive\": true}]}], \"_source_file\": \"xwiki\\\\xwiki-platform.yaml\"}, {\"id\": \"xwiki\", \"info\": {\"name\": \"xwiki\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,xwiki\", \"severity\": \"info\", \"metadata\": {\"product\": \"xwiki\", \"vendor\": \"xwiki\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"data-xwiki-reference=\"], \"case-insensitive\": true}]}], \"_source_file\": \"xwiki\\\\xwiki.yaml\"}, {\"id\": \"yealink\", \"info\": {\"name\": \"yealink\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yealink\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"yealink ctp18\"], \"product\": \"yealink\", \"vendor\": \"yealink\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"yealink ctp18\"], \"case-insensitive\": true}]}], \"_source_file\": \"yealink\\\\yealink.yaml\"}, {\"id\": \"yearning\", \"info\": {\"name\": \"yearning\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yearning\", \"severity\": \"info\", \"metadata\": {\"product\": \"yearning\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"id=subnet\"], \"case-insensitive\": true}]}], \"_source_file\": \"yearning\\\\yearning.yaml\"}, {\"id\": \"cercopitheque\", \"info\": {\"name\": \"cercopitheque\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,cercopitheque\", \"severity\": \"info\", \"metadata\": {\"product\": \"cercopitheque\", \"shodan-query\": [\"http.html:\\\"yeswiki\\\"\"], \"vendor\": \"yeswiki\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"yeswiki\"], \"case-insensitive\": true}]}], \"_source_file\": \"yeswiki\\\\cercopitheque.yaml\"}, {\"id\": \"yeswiki\", \"info\": {\"name\": \"yeswiki\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yeswiki\", \"severity\": \"info\", \"metadata\": {\"product\": \"yeswiki\", \"shodan-query\": [\"http.html:\\\"yeswiki\\\"\"], \"vendor\": \"yeswiki\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"yeswiki\"], \"case-insensitive\": true}]}], \"_source_file\": \"yeswiki\\\\yeswiki.yaml\"}, {\"id\": \"yii\", \"info\": {\"name\": \"yii\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yii\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"yii\\\"\"], \"product\": \"yii\", \"shodan-query\": [\"title:\\\"yii\\\"\"], \"vendor\": \"yiisoft\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>yii.*?</title>\"]}]}], \"_source_file\": \"yiisoft\\\\yii.yaml\"}, {\"id\": \"easy_forms_for_mailchimp\", \"info\": {\"name\": \"easy_forms_for_mailchimp\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,easy_forms_for_mailchimp\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"wp-content/plugins/yikes-inc-easy-mailchimp-extender/\\\"\"], \"product\": \"easy_forms_for_mailchimp\", \"vendor\": \"yikesinc\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"wp-content/plugins/yikes-inc-easy-mailchimp-extender/\"], \"case-insensitive\": true}]}], \"_source_file\": \"yikesinc\\\\easy_forms_for_mailchimp.yaml\"}, {\"id\": \"rengine\", \"info\": {\"name\": \"rengine\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,rengine\", \"severity\": \"info\", \"metadata\": {\"product\": \"rengine\", \"shodan-query\": [\"title:\\\"rengine\\\"\"], \"vendor\": \"yogeshojha\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>rengine.*?</title>\"]}]}], \"_source_file\": \"yogeshojha\\\\rengine.yaml\"}, {\"id\": \"ufida-nc\", \"info\": {\"name\": \"ufida-nc\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ufida-nc\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"app=\\\"用友-移动系统管理\\\"\", \"app=\\\"yonyou-ufida-nc\\\"\", \"icon_hash=\\\"1085941792\\\"\", \"app=\\\"用友-ufida-nc\"], \"product\": \"ufida-nc\", \"vendor\": \"yonyou\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1085941792\"]}, {\"type\": \"word\", \"words\": [\"ufida_iufo_over.png\", \"ufida_nc.png\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"logo/images/\", \"ufida\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"<div id=\\\"nc_img\\\" onmouseover=\\\"overimage('nc');\", \"<div id=\\\"nc_text\\\">\", \"logo/images/ufida_nc.png\"], \"case-insensitive\": true}]}], \"_source_file\": \"yonyou\\\\ufida-nc.yaml\"}, {\"id\": \"ufida_erp-nc\", \"info\": {\"name\": \"ufida_erp-nc\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,ufida_erp-nc\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"1085941792\\\"\"], \"product\": \"ufida_erp-nc\", \"shodan-query\": [\"title:\\\"用友\\\"\"], \"vendor\": \"yonyou\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1085941792\"]}, {\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>用友.*?</title>\"]}]}], \"_source_file\": \"yonyou\\\\ufida_erp-nc.yaml\"}, {\"id\": \"yonyou\", \"info\": {\"name\": \"yonyou\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yonyou\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"1085941792\\\"\", \"app=\\\"用友-ufida-nc\"], \"product\": \"yonyou\", \"vendor\": \"yonyou\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1085941792\"]}]}], \"_source_file\": \"yonyou\\\\yonyou.yaml\"}, {\"id\": \"youphptube_encoder\", \"info\": {\"name\": \"youphptube_encoder\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,youphptube_encoder\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"-276846707\\\"\"], \"product\": \"youphptube_encoder\", \"vendor\": \"youphptube\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"-276846707\"]}]}], \"_source_file\": \"youphptube\\\\youphptube_encoder.yaml\"}, {\"id\": \"yui\", \"info\": {\"name\": \"yui\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yui\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"bower_components/yui2/\\\"\"], \"product\": \"yui\", \"shodan-query\": [\"html:\\\"bower_components/yui2/\\\"\", \"http.html:\\\"bower_components/yui2/\\\"\"], \"vendor\": \"yui_project\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"bower_components/yui2/\"], \"case-insensitive\": true}]}], \"_source_file\": \"yui_project\\\\yui.yaml\"}, {\"id\": \"yzmcms\", \"info\": {\"name\": \"yzmcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,yzmcms\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"yzmcms\\\"\"], \"google-query\": [\"intitle:\\\"yzmcms\\\"\"], \"product\": \"yzmcms\", \"shodan-query\": [\"title:\\\"yzmcms\\\"\", \"http.title:\\\"yzmcms\\\"\"], \"vendor\": \"yzmcms\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>yzmcms.*?</title>\"]}]}], \"_source_file\": \"yzmcms\\\\yzmcms.yaml\"}, {\"id\": \"zabbix\", \"info\": {\"name\": \"zabbix\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zabbix\", \"severity\": \"info\", \"metadata\": {\"product\": \"zabbix\", \"vendor\": \"zabbix\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"zabbix sia\", \"zabbix\"], \"condition\": \"and\", \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"images/general/zabbix.ico\"], \"case-insensitive\": true}]}], \"_source_file\": \"zabbix\\\\zabbix.yaml\"}, {\"id\": \"next.js\", \"info\": {\"name\": \"next.js\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,next.js\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/_next/static\\\"\"], \"product\": \"next.js\", \"shodan-query\": [\"http.html:\\\"/_next/static\\\"\", \"cpe:\\\"cpe:2.3:a:zeit:next.js\\\"\", \"html:\\\"/_next/static\\\"\"], \"vendor\": \"zeit\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/_next/static\"], \"case-insensitive\": true}]}], \"_source_file\": \"zeit\\\\next.js.yaml\"}, {\"id\": \"zeroshell\", \"info\": {\"name\": \"zeroshell\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zeroshell\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"zeroshell\\\"\"], \"google-query\": [\"intitle:\\\"zeroshell\\\"\"], \"product\": \"zeroshell\", \"shodan-query\": [\"http.title:\\\"zeroshell\\\"\"], \"vendor\": \"zeroshell\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>zeroshell.*?</title>\"]}]}], \"_source_file\": \"zeroshell\\\\zeroshell.yaml\"}, {\"id\": \"webui-aria2\", \"info\": {\"name\": \"webui-aria2\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,webui-aria2\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"aria2 webui\\\"\"], \"google-query\": [\"intitle:\\\"aria2 webui\\\"\"], \"product\": \"webui-aria2\", \"shodan-query\": [\"title:\\\"aria2 webui\\\"\", \"http.title:\\\"aria2 webui\\\"\"], \"vendor\": \"ziahamza\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>aria2 webui.*?</title>\"]}]}], \"_source_file\": \"ziahamza\\\\webui-aria2.yaml\"}, {\"id\": \"collaboration\", \"info\": {\"name\": \"collaboration\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,collaboration\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"icon_hash=\\\"475145467\\\"\", \"icon_hash=\\\"1624375939\\\"\", \"app=\\\"zimbra-邮件系统\\\"\"], \"product\": \"collaboration\", \"shodan-query\": [\"http.favicon.hash:475145467\", \"http.favicon.hash:\\\"1624375939\\\"\", \"http.favicon.hash:\\\"475145467\\\"\"], \"vendor\": \"zimbra\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"1624375939\", \"475145467\"]}]}], \"_source_file\": \"zimbra\\\\collaboration.yaml\"}, {\"id\": \"collaboration_server\", \"info\": {\"name\": \"collaboration_server\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,collaboration_server\", \"severity\": \"info\", \"metadata\": {\"product\": \"collaboration_server\", \"shodan-query\": [\"html:\\\"zimbra collaboration suite web client\\\"\"], \"vendor\": \"zimbra\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"zimbra collaboration suite web client\"], \"case-insensitive\": true}]}], \"_source_file\": \"zimbra\\\\collaboration_server.yaml\"}, {\"id\": \"zimbra\", \"info\": {\"name\": \"zimbra\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zimbra\", \"severity\": \"info\", \"metadata\": {\"product\": \"zimbra\", \"vendor\": \"zimbra\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"imgzimbraicon\", \"content=\\\"zimbra\", \"window._zimbramail\"], \"case-insensitive\": true}, {\"type\": \"word\", \"words\": [\"set-cookie: zm_login_csrf\"], \"part\": \"header\", \"case-insensitive\": true}]}], \"_source_file\": \"zimbra\\\\zimbra.yaml\"}, {\"id\": \"zk_framework\", \"info\": {\"name\": \"zk_framework\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zk_framework\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"server backup manager\\\"\"], \"google-query\": [\"intitle:\\\"server backup manager\\\"\"], \"product\": \"zk_framework\", \"shodan-query\": [\"http.title:\\\"server backup manager\\\"\"], \"vendor\": \"zkoss\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>server backup manager.*?</title>\"]}]}], \"_source_file\": \"zkoss\\\\zk_framework.yaml\"}, {\"id\": \"biotime\", \"info\": {\"name\": \"biotime\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,biotime\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"biotime\\\"\"], \"google-query\": [\"intitle:\\\"biotime\\\"\"], \"product\": \"biotime\", \"shodan-query\": [\"http.title:\\\"biotime\\\"\"], \"vendor\": \"zkteco\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>biotime.*?</title>\"]}]}], \"_source_file\": \"zkteco\\\\biotime.yaml\"}, {\"id\": \"zkteco\", \"info\": {\"name\": \"zkteco\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zkteco\", \"severity\": \"info\", \"metadata\": {\"product\": \"zkteco\", \"vendor\": \"00_unknown\", \"verified\": false}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"favicon\", \"hash\": [\"67c76f647cb8d42a71eb295e003394d2\"]}, {\"type\": \"word\", \"words\": [\"智慧园区综合管理平台\"], \"case-insensitive\": true}]}], \"_source_file\": \"zkteco\\\\zkteco.yaml\"}, {\"id\": \"manageengine_access_manager_plus\", \"info\": {\"name\": \"manageengine_access_manager_plus\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,manageengine_access_manager_plus\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"manageengine\\\"\"], \"google-query\": [\"intitle:\\\"manageengine\\\"\"], \"product\": \"manageengine_access_manager_plus\", \"shodan-query\": [\"title:\\\"manageengine\\\"\", \"http.title:\\\"manageengine\\\"\"], \"vendor\": \"zohocorp\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>manageengine.*?</title>\"]}]}], \"_source_file\": \"zohocorp\\\\manageengine_access_manager_plus.yaml\"}, {\"id\": \"manageengine_adaudit_plus\", \"info\": {\"name\": \"manageengine_adaudit_plus\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,manageengine_adaudit_plus\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"adaudit plus\\\" || http.title:\\\"manageengine - admanager plus\\\"\"], \"google-query\": [\"intitle:\\\"adaudit plus\\\" || http.title:\\\"manageengine - admanager plus\\\"\"], \"product\": \"manageengine_adaudit_plus\", \"shodan-query\": [\"http.title:\\\"adaudit plus\\\" || http.title:\\\"manageengine - admanager plus\\\"\"], \"vendor\": \"zohocorp\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*> http.title:\\\"manageengine - admanager plus.*?</title>\", \"(?mi)<title[^>]*>adaudit plus\\\" .*?</title>\"]}]}], \"_source_file\": \"zohocorp\\\\manageengine_adaudit_plus.yaml\"}, {\"id\": \"manageengine_adselfservice_plus\", \"info\": {\"name\": \"manageengine_adselfservice_plus\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,manageengine_adselfservice_plus\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"manageengine\\\"\", \"title=\\\"adselfservice plus\\\"\"], \"google-query\": [\"intitle:\\\"adselfservice plus\\\"\", \"intitle:\\\"manageengine\\\"\"], \"product\": \"manageengine_adselfservice_plus\", \"shodan-query\": [\"http.title:\\\"manageengine\\\"\", \"http.title:\\\"adselfservice plus\\\"\"], \"vendor\": \"zohocorp\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>adselfservice plus.*?</title>\", \"(?mi)<title[^>]*>manageengine.*?</title>\"]}]}], \"_source_file\": \"zohocorp\\\\manageengine_adselfservice_plus.yaml\"}, {\"id\": \"manageengine_desktop_central\", \"info\": {\"name\": \"manageengine_desktop_central\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,manageengine_desktop_central\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"manageengine desktop central 10\\\"\", \"title=\\\"manageengine desktop central 10\\\"\", \"app=\\\"zoho-manageengine-desktop\\\"\"], \"google-query\": [\"intitle:\\\"manageengine desktop central 10\\\"\"], \"product\": \"manageengine_desktop_central\", \"shodan-query\": [\"http.title:\\\"manageengine desktop central 10\\\"\"], \"vendor\": \"zohocorp\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"manageengine desktop central 10\"], \"case-insensitive\": true}]}], \"_source_file\": \"zohocorp\\\\manageengine_desktop_central.yaml\"}, {\"id\": \"manageengine_firewall_analyzer\", \"info\": {\"name\": \"manageengine_firewall_analyzer\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,manageengine_firewall_analyzer\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"opmanager plus\\\"\"], \"google-query\": [\"intitle:\\\"opmanager plus\\\"\"], \"product\": \"manageengine_firewall_analyzer\", \"shodan-query\": [\"http.title:\\\"opmanager plus\\\"\"], \"vendor\": \"zohocorp\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>opmanager plus.*?</title>\"]}]}], \"_source_file\": \"zohocorp\\\\manageengine_firewall_analyzer.yaml\"}, {\"id\": \"manageengine_netflow_analyzer\", \"info\": {\"name\": \"manageengine_netflow_analyzer\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,manageengine_netflow_analyzer\", \"severity\": \"info\", \"metadata\": {\"product\": \"manageengine_netflow_analyzer\", \"shodan-query\": [\"html:\\\"login - netflow analyzer\\\"\"], \"vendor\": \"zohocorp\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"login - netflow analyzer\"], \"case-insensitive\": true}]}], \"_source_file\": \"zohocorp\\\\manageengine_netflow_analyzer.yaml\"}, {\"id\": \"manageengine_opmanager\", \"info\": {\"name\": \"manageengine_opmanager\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,manageengine_opmanager\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"opmanager plus\\\"\"], \"google-query\": [\"intitle:\\\"opmanager plus\\\"\"], \"product\": \"manageengine_opmanager\", \"shodan-query\": [\"http.title:\\\"opmanager plus\\\"\"], \"vendor\": \"zohocorp\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>opmanager plus.*?</title>\"]}]}], \"_source_file\": \"zohocorp\\\\manageengine_opmanager.yaml\"}, {\"id\": \"manageengine_servicedesk_plus\", \"info\": {\"name\": \"manageengine_servicedesk_plus\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,manageengine_servicedesk_plus\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"manageengine servicedesk plus\\\"\"], \"google-query\": [\"intitle:\\\"manageengine servicedesk plus\\\"\"], \"product\": \"manageengine_servicedesk_plus\", \"shodan-query\": [\"http.title:\\\"manageengine servicedesk plus\\\"\"], \"vendor\": \"zohocorp\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>manageengine servicedesk plus.*?</title>\"]}]}], \"_source_file\": \"zohocorp\\\\manageengine_servicedesk_plus.yaml\"}, {\"id\": \"o2oa\", \"info\": {\"name\": \"o2oa\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,o2oa\", \"severity\": \"info\", \"metadata\": {\"product\": \"o2oa\", \"shodan-query\": [\"title==\\\"o2oa\\\"\"], \"vendor\": \"zoneland\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"title==\\\"o2oa\"], \"case-insensitive\": true}]}], \"_source_file\": \"zoneland\\\\o2oa.yaml\"}, {\"id\": \"zoneminder\", \"info\": {\"name\": \"zoneminder\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zoneminder\", \"severity\": \"info\", \"metadata\": {\"product\": \"zoneminder\", \"vendor\": \"zoneminder\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"zoneminder login\"], \"case-insensitive\": true}]}], \"_source_file\": \"zoneminder\\\\zoneminder.yaml\"}, {\"id\": \"zte\", \"info\": {\"name\": \"zte\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zte\", \"severity\": \"info\", \"metadata\": {\"product\": \"zte\", \"shodan-query\": [\"title:\\\"f660\\\"\"], \"vendor\": \"zte\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>f660.*?</title>\"]}]}], \"_source_file\": \"zte\\\\zte.yaml\"}, {\"id\": \"pichome\", \"info\": {\"name\": \"pichome\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,pichome\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"pichome\\\"\"], \"product\": \"pichome\", \"shodan-query\": [\"title:\\\"pichome\\\"\"], \"vendor\": \"zyx0814\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>pichome.*?</title>\"]}]}], \"_source_file\": \"zyx0814\\\\pichome.yaml\"}, {\"id\": \"uag2100\", \"info\": {\"name\": \"uag2100\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,uag2100\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"zywall\\\"\"], \"google-query\": [\"intitle:\\\"zywall\\\"\"], \"product\": \"uag2100\", \"shodan-query\": [\"http.title:\\\"zywall\\\"\"], \"vendor\": \"zyxel\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>zywall.*?</title>\"]}]}], \"_source_file\": \"zyxel\\\\uag2100.yaml\"}, {\"id\": \"uag2100_firmware\", \"info\": {\"name\": \"uag2100_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,uag2100_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"zywall\\\"\"], \"google-query\": [\"intitle:\\\"zywall\\\"\"], \"product\": \"uag2100_firmware\", \"shodan-query\": [\"http.title:\\\"zywall\\\"\"], \"vendor\": \"zyxel\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>zywall.*?</title>\"]}]}], \"_source_file\": \"zyxel\\\\uag2100_firmware.yaml\"}, {\"id\": \"usg1000_firmware\", \"info\": {\"name\": \"usg1000_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,usg1000_firmware\", \"severity\": \"info\", \"metadata\": {\"product\": \"usg1000_firmware\", \"shodan-query\": [\"title:\\\"usg flex\\\"\"], \"vendor\": \"zyxel\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>usg flex.*?</title>\"]}]}], \"_source_file\": \"zyxel\\\\usg1000_firmware.yaml\"}, {\"id\": \"usg20-vpn_firmware\", \"info\": {\"name\": \"usg20-vpn_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,usg20-vpn_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"usg flex 100\\\"\"], \"google-query\": [\"intitle:\\\"usg flex 100\\\"\"], \"product\": \"usg20-vpn_firmware\", \"shodan-query\": [\"title:\\\"usg flex 100\\\"\", \"http.title:\\\"usg flex 100\\\"\"], \"vendor\": \"zyxel\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>usg flex 100.*?</title>\"]}]}], \"_source_file\": \"zyxel\\\\usg20-vpn_firmware.yaml\"}, {\"id\": \"usg40_firmware\", \"info\": {\"name\": \"usg40_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,usg40_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"/2fa-access.cgi\\\" && body=\\\"zyxel zyxel_style1\\\"\"], \"product\": \"usg40_firmware\", \"vendor\": \"zyxel\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\" body=\\\"zyxel zyxel_style1\", \"/2fa-access.cgi\\\" \"], \"case-insensitive\": true}]}], \"_source_file\": \"zyxel\\\\usg40_firmware.yaml\"}, {\"id\": \"usg_flex_100w_firmware\", \"info\": {\"name\": \"usg_flex_100w_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,usg_flex_100w_firmware\", \"severity\": \"info\", \"metadata\": {\"product\": \"usg_flex_100w_firmware\", \"shodan-query\": [\"title:\\\"usg flex 100\\\",\\\"usg flex 100w\\\",\\\"usg flex 200\\\",\\\"usg flex 500\\\",\\\"usg flex 700\\\",\\\"usg flex 50\\\",\\\"usg flex 50w\\\",\\\"atp100\\\",\\\"atp200\\\",\\\"atp500\\\",\\\"atp700\\\"\", \"http.title:\\\"usg flex 100\\\",\\\"usg flex 100w\\\",\\\"usg flex 200\\\",\\\"usg flex 500\\\",\\\"usg flex 700\\\",\\\"usg flex 50\\\",\\\"usg flex 50w\\\",\\\"atp100\\\",\\\"atp200\\\",\\\"atp500\\\",\\\"atp700\\\"\"], \"vendor\": \"zyxel\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>usg flex 100\\\",\\\"usg flex 100w\\\",\\\"usg flex 200\\\",\\\"usg flex 500\\\",\\\"usg flex 700\\\",\\\"usg flex 50\\\",\\\"usg flex 50w\\\",\\\"atp100\\\",\\\"atp200\\\",\\\"atp500\\\",\\\"atp700.*?</title>\"]}]}], \"_source_file\": \"zyxel\\\\usg_flex_100w_firmware.yaml\"}, {\"id\": \"vmg1312-b10d_firmware\", \"info\": {\"name\": \"vmg1312-b10d_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,vmg1312-b10d_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"body=\\\"vmg1312-b10d\\\"\"], \"product\": \"vmg1312-b10d_firmware\", \"shodan-query\": [\"http.html:\\\"vmg1312-b10d\\\"\"], \"vendor\": \"zyxel\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"vmg1312-b10d\"], \"case-insensitive\": true}]}], \"_source_file\": \"zyxel\\\\vmg1312-b10d_firmware.yaml\"}, {\"id\": \"zywall_2_plus_internet_security_appliance_firmware\", \"info\": {\"name\": \"zywall_2_plus_internet_security_appliance_firmware\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zywall_2_plus_internet_security_appliance_firmware\", \"severity\": \"info\", \"metadata\": {\"fofa-query\": [\"title=\\\"zywall2plus\\\"\"], \"google-query\": [\"intitle:\\\"zywall2plus\\\"\"], \"product\": \"zywall_2_plus_internet_security_appliance_firmware\", \"shodan-query\": [\"http.title:\\\"zywall2plus\\\"\"], \"vendor\": \"zyxel\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"regex\", \"regex\": [\"(?mi)<title[^>]*>zywall2plus.*?</title>\"]}]}], \"_source_file\": \"zyxel\\\\zywall_2_plus_internet_security_appliance_firmware.yaml\"}, {\"id\": \"zyxel\", \"info\": {\"name\": \"zyxel\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zyxel\", \"severity\": \"info\", \"metadata\": {\"product\": \"zyxel\", \"shodan-query\": [\"http.html:\\\"vmg1312-b10d\\\"\"], \"vendor\": \"zyxel\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"vmg1312-b10d\"], \"case-insensitive\": true}]}], \"_source_file\": \"zyxel\\\\zyxel.yaml\"}, {\"id\": \"zzcms\", \"info\": {\"name\": \"zzcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zzcms\", \"severity\": \"info\", \"metadata\": {\"product\": \"zzcms\", \"vendor\": \"zzcms\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"/inc/showuserlogin.php?style=h&t=math.random()\"], \"case-insensitive\": true}]}], \"_source_file\": \"zzcms\\\\zzcms.yaml\"}, {\"id\": \"zzzcms\", \"info\": {\"name\": \"zzzcms\", \"author\": \"cn-kali-team\", \"tags\": \"detect,tech,zzzcms\", \"severity\": \"info\", \"metadata\": {\"product\": \"zzzcms\", \"vendor\": \"zzzcms\", \"verified\": true}}, \"http\": [{\"method\": \"GET\", \"path\": [\"{{BaseURL}}/\"], \"matchers\": [{\"type\": \"word\", \"words\": [\"powered by <a href='http://zzzcms.com'>zzzcms</a>\"], \"case-insensitive\": true}]}], \"_source_file\": \"zzzcms\\\\zzzcms.yaml\"}]"
  },
  {
    "path": "backend/fingerprints/fingers_http.json",
    "content": "[{\"link\":\"\",\"name\":\"网宿\",\"rule\":[{\"regexps\":{\"header\":[\"WS CDN Server\"]}}],\"tag\":[\"cdn\"]},{\"link\":\"\",\"name\":\"alloyui\",\"rule\":[{\"regexps\":{\"body\":[\"cdn.alloyui.com\"]}}],\"tag\":[\"cdn\"]},{\"link\":\"\",\"name\":\"cdn-cache-server\",\"rule\":[{\"regexps\":{\"header\":[\"Cdn Cache Server\"]}}],\"tag\":[\"cdn\"]},{\"link\":\"\",\"name\":\"fastly cdn\",\"rule\":[{\"regexps\":{\"body\":[\"fastcdn.org\"]}}],\"tag\":[\"cdn\"]},{\"link\":\"\",\"name\":\"gocdn\",\"rule\":[{\"regexps\":{\"header\":[\"GOCDN\"]}}],\"tag\":[\"cdn\"]},{\"link\":\"\",\"name\":\"阿里云cdn\",\"rule\":[{\"regexps\":{\"body\":[\"cdn.aliyuncs.com\"],\"header\":[\"cdn.aliyuncs.com\",\"x-swift-cachetime\"]}}],\"tag\":[\"cdn\"]},{\"link\":\"\",\"name\":\"加速乐CDN\",\"rule\":[{\"regexps\":{\"body\":[\"notice-jiasule\"],\"header\":[\"jiasule\"]}}],\"tag\":[\"cdn\"]},{\"link\":\"\",\"name\":\"百度cdn\",\"rule\":[{\"regexps\":{\"body\":[\"apps.bdimg.com\",\"libs.baidu.com\"],\"header\":[\"libs.baidu.com\"]}}],\"tag\":[\"cdn\"]},{\"link\":\"\",\"name\":\"powercdn\",\"rule\":[{\"regexps\":{\"header\":[\"Powercdn\"]}}],\"tag\":[\"cdn\"]},{\"link\":\"\",\"name\":\"七牛cdn\",\"rule\":[{\"regexps\":{\"header\":[\"cdn.staticfile.org\",\"X-Qiniu-Zone\"]}}],\"tag\":[\"cdn\"]},{\"link\":\"\",\"name\":\"maxcdn\",\"rule\":[{\"regexps\":{\"header\":[\"NetDNA\"]}}],\"tag\":[\"cdn\"]},{\"link\":\"\",\"name\":\"加速乐\",\"rule\":[{\"regexps\":{\"header\":[\"__jsluid\"]}}],\"tag\":[\"cdn\"]},{\"link\":\"\",\"name\":\"腾讯云CDN\",\"rule\":[{\"regexps\":{\"header\":[\"X-NWS-LOG-UUID\"]}}],\"tag\":[\"cdn\"]},{\"focus\":true,\"link\":\"\",\"name\":\"jira\",\"rule\":[{\"favicon\":{\"mmh3\":[\"855273746\",\"981867722\",\"-1581907337\",\"552727997\"]},\"regexps\":{\"body\":[\"jira.webresources\"]}}],\"tag\":[\"cloud\"]},{\"focus\":true,\"link\":\"\",\"name\":\"sonarqube\",\"rule\":[{\"favicon\":{\"md5\":[\"b4e4785d5852c563b9ae47cbb7af06fe\"],\"mmh3\":[\"1485257654\"]},\"regexps\":{\"body\":[\"SonarQube\"]}}],\"tag\":[\"cloud\"]},{\"default_port\":[\"9000\"],\"link\":\"\",\"name\":\"portainer\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1424036600\"]},\"regexps\":{\"body\":[\"portainer.\"]}}],\"tag\":[\"cloud\"]},{\"focus\":true,\"link\":\"\",\"name\":\"apisix\",\"rule\":[{\"regexps\":{\"body\":[\"error_msg: \\\"failed to match any routes\\\"\"]}}],\"tag\":[\"cloud\"]},{\"focus\":true,\"link\":\"\",\"name\":\"k8s_api\",\"rule\":[{\"regexps\":{\"body\":[\"\\\"kind\\\": \\\"Status\\\"\"],\"vuln\":[\"authentication.k8s.io\"]},\"vuln\":\"k8s-api_unauth\"}],\"tag\":[\"cloud\"]},{\"link\":\"\",\"name\":\"k8s_dashboard\",\"rule\":[{\"regexps\":{\"body\":[\"assets/images/kubernetes-logo.png\"]}}],\"tag\":[\"cloud\"]},{\"link\":\"\",\"name\":\"gogs\",\"rule\":[{\"regexps\":{\"header\":[\"i_like_gog\",\"i_like_gitea\"]}}],\"tag\":[\"cloud\"]},{\"focus\":true,\"link\":\"\",\"name\":\"jenkins\",\"rule\":[{\"favicon\":{\"md5\":[\"23e8c7bd78e8cd826c5a6073b15068b1\"],\"mmh3\":[\"81586312\"]},\"regexps\":{\"body\":[\"Jenkins\"],\"header\":[\"X-Jenkins\"]}}],\"tag\":[\"cloud\"]},{\"focus\":true,\"link\":\"\",\"name\":\"nexus\",\"rule\":[{\"regexps\":{\"body\":[\"Nexus Repository Manager\"],\"header\":[\"NX-ANTI-CSRF-TOKEN\"]}}],\"tag\":[\"cloud\"]},{\"link\":\"\",\"name\":\"harbor\",\"rule\":[{\"favicon\":{\"md5\":[\"5a508149f630bfd801df6e04369527f9\"]},\"regexps\":{\"body\":[\"\\u003ctitle\\u003eHarbor\\u003c/title\\u003e\"],\"header\":[\"harbor-lang\"]}}],\"tag\":[\"cloud\"]},{\"link\":\"\",\"name\":\"swift\",\"rule\":[{\"regexps\":{\"body\":[\"swift.generic\"]}}],\"tag\":[\"cloud\"]},{\"default_port\":[\"9200\"],\"focus\":true,\"link\":\"\",\"name\":\"elasticsearch\",\"rule\":[{\"regexps\":{\"body\":[\"\\\"cluster_name\\\" : \\\"elasticsearch\\\"\"],\"vuln\":[\"You Know, for Search\"]},\"vuln\":\"elasticsearch_unauth\"}],\"tag\":[\"cloud\"]},{\"default_port\":[\"9200\"],\"focus\":true,\"link\":\"\",\"name\":\"kibana\",\"rule\":[{\"favicon\":{\"mmh3\":[\"75230260\",\"1668183286\",\"-267431135\",\"-759754862\",\"-1200737715\"]},\"regexps\":{\"body\":[\"Kibana\"]}}],\"tag\":[\"cloud\"]},{\"default_port\":[\"27017\"],\"link\":\"\",\"name\":\"mongodb\",\"rule\":[{\"regexps\":{\"body\":[\"MongoDB over HTTP on the native driver\"]}}],\"tag\":[\"cloud\"]},{\"default_port\":[\"8088\"],\"focus\":true,\"link\":\"\",\"name\":\"hadoop\",\"rule\":[{\"regexps\":{\"vuln\":[\"\\u003ctitle\\u003e\\n    All Applications\"]},\"vuln\":\"hadoop_yarn_unauthorized\"}],\"tag\":[\"cloud\"]},{\"default_port\":[\"3000\"],\"focus\":true,\"link\":\"\",\"name\":\"grafana\",\"rule\":[{\"regexps\":{\"body\":[\"Grafana\\u003c/title\\u003e\"]}}],\"tag\":[\"cloud\"]},{\"link\":\"\",\"name\":\"fastadmin\",\"rule\":[{\"regexps\":{\"body\":[\"fastadmin\"]}}],\"tag\":[\"cloud\"]},{\"link\":\"\",\"name\":\"couchbase\",\"rule\":[{\"regexps\":{\"body\":[\"Couchbase Console\"],\"header\":[\"Couchbase\"]}}],\"tag\":[\"cloud\"]},{\"link\":\"\",\"name\":\"couchdb\",\"rule\":[{\"regexps\":{\"body\":[\"pluggable-storage-engines\"],\"header\":[\"Erlang OTP\"]}}],\"tag\":[\"cloud\"]},{\"link\":\"\",\"name\":\"cougar\",\"rule\":[{\"regexps\":{\"header\":[\"Cougar\"]}}],\"tag\":[\"cloud\"]},{\"default_port\":[\"2375\"],\"focus\":true,\"link\":\"\",\"name\":\"docker\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1814887000\"]},\"regexps\":{\"vuln\":[\"KernelVersion\",\"DockerRootDir\"]},\"send_data\":\"/info\",\"vuln\":\"docker-api_unauth\"}],\"tag\":[\"cloud\"]},{\"default_port\":[\"2379\"],\"focus\":true,\"link\":\"\",\"name\":\"etcd\",\"rule\":[{\"regexps\":{\"vuln\":[\"\\\"key\\\":\\\"/kubernetes\\\"\"]},\"send_data\":\"/v2/keys/\",\"vuln\":\"etcd_unauth\"}],\"tag\":[\"cloud\"]},{\"focus\":true,\"link\":\"\",\"name\":\"dubbo\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"dubbo\\\"\"]}}],\"tag\":[\"cloud\"]},{\"link\":\"\",\"name\":\"spark_master\",\"rule\":[{\"regexps\":{\"body\":[\"Spark Master at\"]}}],\"tag\":[\"cloud\"]},{\"focus\":true,\"link\":\"\",\"name\":\"vmware zimbra\",\"rule\":[{\"regexps\":{\"body\":[\"Zimbra Collaboration\",\"/zimbra/css/common\"]}}],\"tag\":[\"cloud\"]},{\"focus\":true,\"link\":\"\",\"name\":\"vmware esxi\",\"rule\":[{\"regexps\":{\"body\":[\"ID_EESX_Welcome\",\"ID_ESX_Welcome\",\"0;URL='/ui'\"]}}],\"tag\":[\"cloud\"]},{\"link\":\"\",\"name\":\"vmware vfabric\",\"rule\":[{\"regexps\":{\"body\":[\"VMware vFabric\"]}}],\"tag\":[\"cloud\"]},{\"focus\":true,\"link\":\"\",\"name\":\"vmware center\",\"rule\":[{\"regexps\":{\"body\":[\"ID_VC_Welcome\"]}}],\"tag\":[\"cloud\"]},{\"focus\":true,\"link\":\"\",\"name\":\"vmware oneaccess\",\"rule\":[{\"favicon\":{\"md5\":[\"6ed1fb0e8c0383b5a2e39d64d8b25442\"],\"mmh3\":[\"-1250474341\"]},\"regexps\":{\"body\":[\"SAAS/horizon/css\",\"Workspace ONE Access\"]}}],\"tag\":[\"cloud\"]},{\"focus\":true,\"link\":\"\",\"name\":\"vmware Horizon\",\"rule\":[{\"regexps\":{\"body\":[\"VMware\\u0026nbsp;Horizon\"]}}],\"tag\":[\"cloud\"]},{\"focus\":true,\"link\":\"\",\"name\":\"vmware identity\",\"rule\":[{\"regexps\":{\"body\":[\"cfg/js-lib\",\"VMware Identity\"]}}],\"tag\":[\"cloud\"]},{\"focus\":true,\"link\":\"\",\"name\":\"visualsvn\",\"rule\":[{\"favicon\":{\"mmh3\":[\"706602230\"]},\"regexps\":{\"body\":[\"VisualSVN Server\",\"=svn/\"]}}],\"tag\":[\"cloud\"]},{\"focus\":true,\"link\":\"\",\"name\":\"zabbix\",\"rule\":[{\"favicon\":{\"mmh3\":[\"892542951\"]},\"regexps\":{\"body\":[\"images/general/zabbix.ico\",\"meta name=\\\"Author\\\" content=\\\"Zabbix SIA\\\"\"],\"header\":[\"zbx_sessionid\"]},\"send_data\":\"/zabbix\"}],\"tag\":[\"cloud\"]},{\"link\":\"\",\"name\":\"graphql\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1067420240\"]}}],\"tag\":[\"cloud\"]},{\"link\":\"\",\"name\":\"slack\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-43161126\"]}}],\"tag\":[\"cloud\"]},{\"focus\":true,\"link\":\"\",\"name\":\"gitlab\",\"rule\":[{\"favicon\":{\"md5\":[\"f7e3d97f404e71d302b3239eef48d5f2\",\"85c754581e1d4b628be5b7712c042224\"],\"mmh3\":[\"516963061\",\"1278323681\"]},\"regexps\":{\"body\":[\"gon.default_issues_tracker\",\"GitLab\"],\"header\":[\"_gitlab_session\"]}}],\"tag\":[\"cloud\"]},{\"focus\":true,\"link\":\"\",\"name\":\"atlassian\",\"rule\":[{\"favicon\":{\"mmh3\":[\"743365239\"]}}],\"tag\":[\"cloud\"]},{\"focus\":true,\"link\":\"\",\"name\":\"ansible\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-913023263\",\"1735248917\",\"506177988\"]}}],\"tag\":[\"cloud\"]},{\"link\":\"\",\"name\":\"rabbitmq-manager\",\"rule\":[{\"favicon\":{\"md5\":[\"4aef220ab05308e3a3e8e4bec5984b2b\"],\"mmh3\":[\"1064742722\",\"-1015107330\"]},\"regexps\":{\"body\":[\"RabbitMQ Management\"]}}],\"tag\":[\"cloud\"]},{\"focus\":true,\"link\":\"\",\"name\":\"activemq-manager\",\"rule\":[{\"favicon\":{\"md5\":[\"05664fb0c7afcd6436179437e31f3aa6\"],\"mmh3\":[\"1766699363\"]},\"regexps\":{\"body\":[\"Apache ActiveMQ\"]}}],\"tag\":[\"cloud\"]},{\"focus\":true,\"link\":\"\",\"name\":\"nacos\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eNacos\\u003c/title\\u003e\"]},\"send_data\":\"/nacos/\"}],\"tag\":[\"cloud\"]},{\"focus\":true,\"link\":\"\",\"name\":\"flink\",\"rule\":[{\"regexps\":{\"body\":[\"flink\"],\"vuln\":[\"Apache Flink Web Dashboard\"]},\"vuln\":\"flink-unauth\"}],\"tag\":[\"cloud\"]},{\"link\":\"\",\"name\":\"minio\",\"rule\":[{\"regexps\":{\"body\":[\"MinIO\"],\"header\":[\"minio\"]}}],\"tag\":[\"cloud\"]},{\"link\":\"\",\"name\":\"apollo\",\"rule\":[{\"regexps\":{\"body\":[\"Apollo\"]}}],\"tag\":[\"cloud\"]},{\"link\":\"\",\"name\":\"tidb-web\",\"rule\":[{\"regexps\":{\"body\":[\"TiDB Status\"]}}],\"tag\":[\"cloud\"]},{\"link\":\"\",\"name\":\"kafka-manager\",\"rule\":[{\"regexps\":{\"body\":[\"Kafka Manager\"]}}],\"tag\":[\"cloud\"]},{\"link\":\"\",\"name\":\"Canal\",\"rule\":[{\"regexps\":{\"body\":[\"Canal Admin\"]}}],\"tag\":[\"cloud\"]},{\"link\":\"\",\"name\":\"Cluster\",\"rule\":[{\"regexps\":{\"body\":[\"Cluster Overview\"]}}],\"tag\":[\"cloud\"]},{\"link\":\"\",\"name\":\"Traefik\",\"rule\":[{\"regexps\":{\"body\":[\"Traefik\"]}}],\"tag\":[\"cloud\"]},{\"link\":\"\",\"name\":\"yapi\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"yapi\"]}}],\"tag\":[\"cloud\"]},{\"link\":\"\",\"name\":\"metrics\",\"rule\":[{\"info\":\"metrics-leak\",\"regexps\":{\"vuln\":[\"\\u003ca\\\\s+href=['\\\"]\\\\/metrics['\\\"]\\u003e.*\\u003c\\\\/a\\u003e\"]}}],\"tag\":[\"cloud\"]},{\"link\":\"\",\"name\":\"consul\",\"rule\":[{\"regexps\":{\"body\":[\"Consul by HashiCorp\",\"consul-ui/config/environment\"]}}],\"tag\":[\"cloud\"]},{\"link\":\"\",\"name\":\"kong\",\"rule\":[{\"regexps\":{\"regexp\":[\"Server: kong\\\\/(.*)\"]}}],\"tag\":[\"cloud\"]},{\"link\":\"\",\"name\":\"express\",\"rule\":[{\"regexps\":{\"header\":[\"Express\"]}}],\"tag\":[\"cloud\"]},{\"link\":\"\",\"name\":\"Kubernetes\",\"rule\":[{\"regexps\":{\"body\":[\"Kubernetes Dashboard\",\"Kubeconsole\"],\"header\":[\"Basic realm=\\\"kubernetes-master\\\"\"]}}],\"tag\":[\"cloud\"]},{\"link\":\"\",\"name\":\"Kubeflow\",\"rule\":[{\"regexps\":{\"body\":[\"Kubeflow\"]}}],\"tag\":[\"cloud\"]},{\"focus\":true,\"link\":\"\",\"name\":\"广讯通\",\"rule\":[{\"regexps\":{\"body\":[\"Services/Identification/login.ashx\"]}}],\"tag\":[\"cms\"]},{\"focus\":true,\"link\":\"\",\"name\":\"微擎\",\"rule\":[{\"favicon\":{\"md5\":[\"fa8833ac684d6949f480ae3bc9a51b4a\"]},\"regexps\":{\"body\":[\"/index.php?c=user\\u0026a=find-password\",\"w7.cc\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"xxl-job\",\"rule\":[{\"regexps\":{\"body\":[\"XXL-JOB\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"discuz\",\"rule\":[{\"favicon\":{\"md5\":[\"c028c4822428e83a358c60a93ef65381\"],\"mmh3\":[\"-505448917\"]},\"regexps\":{\"body\":[\"Discuz\"]}}],\"tag\":[\"cms\"]},{\"focus\":true,\"link\":\"\",\"name\":\"普元eos_console\",\"rule\":[{\"info\":\"普元EOS_console_leak\",\"regexps\":{\"vuln\":[\"EOS管理控制台\"]},\"send_data\":\"/eosmgr/eos/EventDispatcher\"}],\"tag\":[\"cms\"]},{\"focus\":true,\"link\":\"\",\"name\":\"普元cms\",\"rule\":[{\"regexps\":{\"body\":[\"/default/common/nui/nui.js\"]}}],\"tag\":[\"cms\"]},{\"focus\":true,\"link\":\"\",\"name\":\"时代光华学习平台\",\"rule\":[{\"regexps\":{\"body\":[\"/webos/js/jquery.js\"]}}],\"tag\":[\"cms\"]},{\"focus\":true,\"link\":\"\",\"name\":\"opac\",\"rule\":[{\"regexps\":{\"body\":[\"/opac/search/simsearch\",\"/opac/struts/dojo\"]}}],\"tag\":[\"cms\"]},{\"focus\":true,\"link\":\"\",\"name\":\"jboss\",\"rule\":[{\"favicon\":{\"md5\":[\"799f70b71314a7508326d1d2f68f7519\"],\"mmh3\":[\"-656811182\"]},\"regexps\":{\"body\":[\"Welcome to JBoss\",\"jboss.css\"],\"header\":[\"JBoss\"]}}],\"tag\":[\"cms\"]},{\"focus\":true,\"link\":\"\",\"name\":\"weblogic\",\"rule\":[{\"regexps\":{\"body\":[\"login_WebLogic_branding.png\",\"Branding_Login_WeblogicConsole.gif\",\"\\u003ci\\u003eHypertext Transfer Protocol -- HTTP/1.1\\u003c/i\\u003e\"],\"header\":[\"WebLogic\",\"ADMINCONSOLESESSION\"]}}],\"tag\":[\"cms\"]},{\"focus\":true,\"link\":\"\",\"name\":\"weblogic-console\",\"rule\":[{\"info\":\"weblogic_console_leak\",\"regexps\":{\"vuln\":[\"WebLogic Server Version: (.*?)\\u003c\"]},\"send_data\":\"/console/login/LoginForm.jsp\"}],\"tag\":[\"cms\"]},{\"focus\":true,\"link\":\"\",\"name\":\"websphere\",\"rule\":[{\"regexps\":{\"body\":[\"SRVE0255E\",\"ibm.ws.webcontainer.servlet\",\"IBM WebSphere Application Server\"]}}],\"tag\":[\"cms\"]},{\"focus\":true,\"link\":\"\",\"name\":\"普元eos\",\"rule\":[{\"regexps\":{\"body\":[\"EOSOperator\",\"eos-web.js\",\"org.gocom\"],\"header\":[\"eos_style_cookie\"]}}],\"tag\":[\"cms\"]},{\"focus\":true,\"link\":\"\",\"name\":\"普元coframe\",\"rule\":[{\"regexps\":{\"body\":[\"coframe\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"zzzcms\",\"rule\":[{\"regexps\":{\"body\":[\"zzzcms\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"thinkcmf\",\"rule\":[{\"regexps\":{\"body\":[\"thinkcmf\"]}}],\"tag\":[\"cms\"]},{\"focus\":true,\"link\":\"\",\"name\":\"thinkphp\",\"rule\":[{\"favicon\":{\"md5\":[\"f49c4a4bde1eec6c0b80c2277c76e3db\"]},\"info\":\"thinkphp-debug\",\"regexps\":{\"body\":[\"/Public/static/js/\",\"think\\\\exception\\\\HttpException\"],\"header\":[\"ThinkPHP\"],\"version\":[\"\\u003cspan\\u003eV(.*)\\u003c/span\\u003e\"],\"vuln\":[\"\\u003ctitle\\u003e系统发生错误\\u003c/title\\u003e\",\"模块不存在:\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"showdoc\",\"rule\":[{\"favicon\":{\"md5\":[\"1fbc02dc6f980f075779049bf687128a\"],\"mmh3\":[\"1969934080\"]},\"regexps\":{\"body\":[\"showdoc\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"74cms\",\"rule\":[{\"regexps\":{\"body\":[\"74cms\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"泽元zcms\",\"rule\":[{\"regexps\":{\"body\":[\"zcms_stat\",\"zcms_skin\",\"泽元\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"民友minyoocms\",\"rule\":[{\"regexps\":{\"body\":[\"Minyoo\",\"/tpl/8/images\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"中科汇联easysite\",\"rule\":[{\"regexps\":{\"body\":[\"EasySite\"],\"header\":[\"EasySite\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"中科汇联产品\",\"rule\":[{\"regexps\":{\"body\":[\"huilan-jquery-ui\",\"by Huilan\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"easycare\",\"rule\":[{\"regexps\":{\"body\":[\"easycare\"],\"header\":[\"easycare.session\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"jspxcms\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by Jspxcms\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"奥远科技\",\"rule\":[{\"regexps\":{\"body\":[\"aykj.net\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"phpcms\",\"rule\":[{\"regexps\":{\"body\":[\"index.php?m=content\\u0026c=index\\u0026a=lists\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"metinfo\",\"rule\":[{\"regexps\":{\"body\":[\"MetInfo\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"逐浪zoomla\",\"rule\":[{\"regexps\":{\"body\":[\"zoomla\",\"NodePage.aspx\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"sscms\",\"rule\":[{\"favicon\":{\"md5\":[\"e1610130e53ed05eb2f242c76bd93724\"],\"mmh3\":[\"-773012525\"]},\"regexps\":{\"body\":[\"SS CMS\",\"/sitefiles/assets\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"finecms\",\"rule\":[{\"regexps\":{\"body\":[\"FineCMS\"]}}],\"tag\":[\"cms\"]},{\"focus\":true,\"link\":\"\",\"name\":\"向日葵\",\"rule\":[{\"regexps\":{\"body\":[\"{\\\"success\\\":false,\\\"msg\\\":\\\"Verification failure\\\"}\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"ideacms\",\"rule\":[{\"regexps\":{\"body\":[\"IdeaCMS\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"博达vsb\",\"rule\":[{\"regexps\":{\"body\":[\"Visual SiteBuilder\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"合正cms\",\"rule\":[{\"regexps\":{\"body\":[\"/cms/cmsadmin/infopub\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"phpmywind\",\"rule\":[{\"regexps\":{\"body\":[\"PHPMyWind\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"codeigniter\",\"rule\":[{\"regexps\":{\"header\":[\"ci_session\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"weaver-ebridge\",\"rule\":[{\"regexps\":{\"body\":[\"e-Bridge\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"laravel\",\"rule\":[{\"regexps\":{\"header\":[\"laravel_session\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"dwr\",\"rule\":[{\"regexps\":{\"body\":[\"dwr/engine.js\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"大汉版通发布系统\",\"rule\":[{\"regexps\":{\"body\":[\"/module/jslib/urite\",\"大汉版通发布系统\",\"大汉网络\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"jcms(捷点)\",\"rule\":[{\"regexps\":{\"body\":[\"JCms\",\"cnvp.com.cn\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"g4studio\",\"rule\":[{\"regexps\":{\"body\":[\"g4it\",\"g4.ico\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"思迪thinkive\",\"rule\":[{\"regexps\":{\"body\":[\"thinkiveJs.min.js\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"京伦cms\",\"rule\":[{\"regexps\":{\"body\":[\"jltech.cn\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"翰臣cms\",\"rule\":[{\"regexps\":{\"body\":[\"翰臣科技\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"eweishop\",\"rule\":[{\"regexps\":{\"body\":[\"ewei_shop\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"joomla\",\"rule\":[{\"favicon\":{\"mmh3\":[\"366524387\",\"1627330242\",\"-1950415971\"]},\"regexps\":{\"body\":[\"mootools-core.js\",\"Joomla\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"大汉web\",\"rule\":[{\"regexps\":{\"body\":[\"hanweb.css\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"dreamcms\",\"rule\":[{\"regexps\":{\"body\":[\"dreamer-cms\"]}}],\"tag\":[\"cms\"]},{\"focus\":true,\"link\":\"\",\"name\":\"tongweb\",\"rule\":[{\"regexps\":{\"header\":[\"TongWeb Serve\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"jeesite\",\"rule\":[{\"regexps\":{\"body\":[\"jeesite.min.css\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"jeeplus\",\"rule\":[{\"regexps\":{\"header\":[\"jeeplus.session\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"jeecms\",\"rule\":[{\"regexps\":{\"body\":[\"/r/cms\"]}}],\"tag\":[\"cms\"]},{\"focus\":true,\"link\":\"\",\"name\":\"新点cms\",\"rule\":[{\"regexps\":{\"body\":[\"webBuilderCommon\"],\"header\":[\"epointserver\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"6kbbs\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by 6kbbs\",\"generator\\\" content=\\\"6KBBS\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"74cms\",\"rule\":[{\"regexps\":{\"body\":[\"74cms.com\",\"骑士CMS\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"08cms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"08CMS\",\"typeof(_08cms)\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"1024 cms\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by 1024 CMS\",\"content=\\\"1024 CMS\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"1024cms\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by 1024 CMS\",\"generator\\\" content=\\\"1024 CMS (c)\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"171cms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"171cms\",\"171cms\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"php-cgi\",\"rule\":[{\"regexps\":{\"header\":[\"PHP-CGI\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"phpb2b\",\"rule\":[{\"regexps\":{\"body\":[\"Powered By PHPB2B\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"phpbb\",\"rule\":[{\"regexps\":{\"body\":[\"phpBB\"],\"header\":[\"HttpOnly, phpbb3_\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"phpcms\",\"rule\":[{\"regexps\":{\"body\":[\"Phpcms\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"phpdisk\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by PHPDisk\",\"content=\\\"PHPDisk\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"phpdocumentor\",\"rule\":[{\"regexps\":{\"body\":[\"Generated by phpDocumentor\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"phpems考试系统\",\"rule\":[{\"regexps\":{\"body\":[\"phpems\",\"content=\\\"PHPEMS\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"phpinfo\",\"rule\":[{\"regexps\":{\"body\":[\"phpinfo\",\"Virtual Directory Support \"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"phpmoadmin\",\"rule\":[{\"regexps\":{\"body\":[\"phpmoadmin\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"phpmps\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by Phpmps\",\"templates/phpmps/style/index.css\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"phpoa\",\"rule\":[{\"regexps\":{\"body\":[\"admin_img/msg_bg.png\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"phpok\",\"rule\":[{\"regexps\":{\"body\":[\"phpok\",\"Powered By phpok.com\",\"content=\\\"phpok\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"phpshe\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by phpshe\",\"content=\\\"phpshe\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"phpvod\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by PHPVOD\",\"content=\\\"phpvod\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"phpweb\",\"rule\":[{\"regexps\":{\"body\":[\"PDV_PAGENAME\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"phpwind\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by phpwind\",\"content=\\\"phpwind\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"rcms\",\"rule\":[{\"regexps\":{\"body\":[\"/r/cms/www/\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"weiphp\",\"rule\":[{\"favicon\":{\"md5\":[\"820d3b66204fbcd3560b9358632b9c8a\"],\"mmh3\":[\"37052027\"]},\"regexps\":{\"body\":[\"content=\\\"WeiPHP\",\"/css/weiphp.css\"],\"header\":[\"weiphp\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"pcfcms\",\"rule\":[{\"favicon\":{\"md5\":[\"0efb381ef98f4cb8443c0b8ecdfad874\"],\"mmh3\":[\"1355901755\"]},\"regexps\":{\"header\":[\"pcfcms\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"zblog\",\"rule\":[{\"regexps\":{\"body\":[\"Z-Blog\"],\"header\":[\"zb_user\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"tpshop\",\"rule\":[{\"regexps\":{\"body\":[\"/index.php/Mobile/Index/index.html\",\"TPshop\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"turbocms\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by TurboCMS\",\"/cmsapp/zxdcADD.jsp\",\"/cmsapp/count/newstop_index.jsp?siteid=\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"typecho\",\"rule\":[{\"regexps\":{\"body\":[\"generator\\\" content=\\\"Typecho\",\"Typecho\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"webmin\",\"rule\":[{\"favicon\":{\"mmh3\":[\"479413330\",\"1280907310\",\"1453890729\",\"-1038557304\"]},\"regexps\":{\"body\":[\"Webmin\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"全国烟草系统\",\"rule\":[{\"regexps\":{\"body\":[\"ycportal/webpublish\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"八哥cms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"BageCMS\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"帝国empirecms\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by EmpireCMS\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"捷点jcms\",\"rule\":[{\"regexps\":{\"body\":[\"Publish By JCms2010\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"易企cms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"YiqiCMS\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"海洋cms\",\"rule\":[{\"regexps\":{\"body\":[\"seacms\"]}}],\"tag\":[\"cms\"]},{\"focus\":true,\"link\":\"\",\"name\":\"美洽在线客服\",\"rule\":[{\"regexps\":{\"body\":[\"/meiqia.js\",\"meiqia.com\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"育友软件\",\"rule\":[{\"regexps\":{\"body\":[\"yuysoft.com\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"50cms\",\"rule\":[{\"favicon\":{\"md5\":[\"d1b2495284e172a52abc355c63b25341\"],\"mmh3\":[\"-299974513\"]}}],\"tag\":[\"cms\"]},{\"focus\":true,\"link\":\"\",\"name\":\"云梦cms\",\"rule\":[{\"regexps\":{\"body\":[\"wezhan.cn\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"未知金融行业通用系统\",\"rule\":[{\"regexps\":{\"body\":[\"hsea.min.css\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"亿信华辰财务BI\",\"rule\":[{\"regexps\":{\"body\":[\"esen_mainframe\"],\"header\":[\"X-ESEN\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"泛鹏天地财务系统\",\"rule\":[{\"regexps\":{\"body\":[\"泛鹏天地\",\"instantclick.js\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"beecms\",\"rule\":[{\"regexps\":{\"body\":[\"BEESCMS\",\"template/default/images/slides.min.jquery.js\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"bitrixsitemanager\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-Cms: Bitrix Site Manager\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"bloofoxcms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"bloofoxCMS\",\"Powered by \\u003ca href=\\\"http://www.bloofox.com\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"blue-coat-proxysg\",\"rule\":[{\"regexps\":{\"header\":[\"proxysg\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"bluecms\",\"rule\":[{\"regexps\":{\"body\":[\"power by bcms\",\"bcms_plugin\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"boyowcms\",\"rule\":[{\"regexps\":{\"body\":[\"publish by BoyowCMS\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"bpanelcms\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-Cms: BPanel CMS\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"browsercms\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by BrowserCMS\",\"content=\\\"BrowserCMS\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"cm3-cms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"cm3 content manager\"],\"header\":[\"cm3session\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"cms-made-simple\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"CMS Made Simple\"],\"header\":[\"CMSSESSID\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"cms-webmanager-pro\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Webmanager-pro\",\"href=\\\"http://webmanager-pro.com\\\"\\u003eWeb.Manager\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"cmscontrol\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"CMScontrol\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"cmscout\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by CMScout\"],\"header\":[\"cmscout2=\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"cmseasy\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by CmsEasy\",\"content=\\\"CmsEasy\"],\"header\":[\"http://www.cmseasy.cn/service_1.html\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"cmsimple\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by CMSimple.dk\",\"content=\\\"CMSimple\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"cmsqlite\",\"rule\":[{\"regexps\":{\"body\":[\"powered by CMSQLite\",\"content=\\\"www.CMSQLite.net\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"cmstop\",\"rule\":[{\"regexps\":{\"body\":[\"/js/cmstop-common.js\",\"www.cmstop.com\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"Zoho ManageEngine\",\"rule\":[{\"regexps\":{\"body\":[\"scripts/esapi.js\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"dedecms\",\"rule\":[{\"favicon\":{\"md5\":[\"7ef1f0a0093460fe46bb691578c07c95\"],\"mmh3\":[\"-47597126\"]},\"regexps\":{\"body\":[\"DedeCMS\",\"/templets/default/style/dedecms.css\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"kingdee产品\",\"rule\":[{\"regexps\":{\"body\":[\".kingdee.com\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"普华Power-PMS\",\"rule\":[{\"regexps\":{\"body\":[\"/Account/GetSiteCode/\"]}}],\"tag\":[\"cms\"]},{\"focus\":true,\"link\":\"\",\"name\":\"若依\",\"rule\":[{\"regexps\":{\"body\":[\"ruoyi/css/ry-ui.css\"]}}],\"tag\":[\"cms\"]},{\"focus\":true,\"link\":\"\",\"name\":\"普华科技\",\"rule\":[{\"regexps\":{\"body\":[\"Power_choose_lang\"]}}],\"tag\":[\"cms\"]},{\"focus\":true,\"link\":\"\",\"name\":\"云问科技-客服系统\",\"rule\":[{\"regexps\":{\"body\":[\"http://www.faqrobot.org/devdoc/helpDocument.html\"]}}],\"tag\":[\"cms\"]},{\"focus\":true,\"link\":\"\",\"name\":\"大华智能物联综合管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"location.hash.indexOf('/authLogin')\",\"\\u003ca href=\\\"www/mobile-version.txt\\\"\"]}}],\"tag\":[\"cms\"]},{\"focus\":true,\"link\":\"\",\"name\":\"竹云IAM\",\"rule\":[{\"regexps\":{\"body\":[\"idp/AuthnEngine\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"宏景hr\",\"rule\":[{\"favicon\":{\"mmh3\":[\"947874108\"]},\"regexps\":{\"body\":[\"/js/hcmPNG.js\"]}}],\"tag\":[\"cms\"]},{\"focus\":true,\"link\":\"\",\"name\":\"汇思learning\",\"rule\":[{\"regexps\":{\"body\":[\"id=\\\"globleMsgBoxTemplate\\\"\"]}}],\"tag\":[\"cms\"]},{\"focus\":true,\"link\":\"\",\"name\":\"群杰印章物联网平台\",\"rule\":[{\"favicon\":{\"md5\":[\"8d51bc407f98aa7b6919dda75b6da5f4\"]},\"regexps\":{\"body\":[\"印章物联网平台-让用印更安全\"]}}],\"tag\":[\"cms\"]},{\"focus\":true,\"link\":\"\",\"name\":\"郑州信源招标系统\",\"rule\":[{\"regexps\":{\"body\":[\"static_resources/skin/css/master.css\"]}}],\"tag\":[\"cms\"]},{\"focus\":true,\"link\":\"\",\"name\":\"易道edoc2企业数据管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"href=\\\"Content/themes/blue/edoc2-page.min.css\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"Office365\",\"rule\":[{\"regexps\":{\"body\":[\"请输入furl参数\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"华为Anyoffice\",\"rule\":[{\"regexps\":{\"body\":[\"/MDMServer/loginPage.action\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"一采通\",\"rule\":[{\"regexps\":{\"body\":[\"/Scripts/JqueryMobile/JSBase/YCT_QRCode.js\"]}}],\"tag\":[\"cms\"]},{\"focus\":true,\"link\":\"\",\"name\":\"smartbi\",\"rule\":[{\"regexps\":{\"body\":[\"/smartbi/index.jsp\",\"smartbiXMobile\",\"SmartbiCefActiveX\"]}}],\"tag\":[\"cms\"]},{\"focus\":true,\"link\":\"\",\"name\":\"uniemm\",\"rule\":[{\"regexps\":{\"body\":[\"com.leagsoft.emm\",\"emm-api\"],\"header\":[\"emm-tunnel\"]}}],\"tag\":[\"cms\"]},{\"focus\":true,\"link\":\"\",\"name\":\"Telerik\",\"rule\":[{\"regexps\":{\"body\":[\"/Telerik.Web.UI.WebResource.axd\",\"content=\\\"Sitefinity\"]}}],\"tag\":[\"cms\"]},{\"link\":\"\",\"name\":\"nginx\",\"rule\":[{\"regexps\":{\"header\":[\"nginx\"]}}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\"nginx_admin\",\"rule\":[{\"regexps\":{\"header\":[\"nginx admin\"]}}],\"tag\":[\"component\"]},{\"focus\":true,\"link\":\"\",\"name\":\"shiro\",\"rule\":[{\"regexps\":{\"header\":[\"rememberMe=\"]}}],\"tag\":[\"component\"]},{\"focus\":true,\"link\":\"\",\"name\":\"ajaxpro\",\"rule\":[{\"regexps\":{\"body\":[\"ajaxpro\"]}}],\"tag\":[\"component\"]},{\"focus\":true,\"link\":\"\",\"name\":\"ueditor\",\"rule\":[{\"regexps\":{\"body\":[\"ueditor.all\",\"ueditor.config.js\"]},\"send_data\":\"/ueditor\"}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\"sourcemap\",\"rule\":[{\"info\":\"sourcemap-leak\",\"regexps\":{\"vuln\":[\".js.map\"]}}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\"webpack\",\"rule\":[{\"regexps\":{\"body\":[\"chunk-vendors\",\"webpack://\"]}}],\"tag\":[\"component\"]},{\"focus\":true,\"link\":\"\",\"name\":\"swagger\",\"opsec\":true,\"rule\":[{\"info\":\"swagger leak\",\"regexps\":{\"vuln\":[\"Swagger UI\"]},\"send_data\":\"/swagger-ui.html\"}],\"tag\":[\"component\"]},{\"focus\":true,\"link\":\"\",\"name\":\"swagger-ui\",\"rule\":[{\"regexps\":{\"body\":[\"/swagger\"]}}],\"tag\":[\"component\"]},{\"focus\":true,\"link\":\"\",\"name\":\"druid\",\"rule\":[{\"info\":\"druid leak\",\"regexps\":{\"body\":[\"druid/login.html\",\"druid.login\"],\"vuln\":[\"Druid Stat Index\"]},\"send_data\":\"/druid/index.html\"}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\"thymeleaf\",\"rule\":[{\"regexps\":{\"body\":[\"thymeleaf\"]}}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\"iis\",\"rule\":[{\"favicon\":{\"md5\":[\"825af13371930eeb2f85cf075fa25b68\"]},\"info\":\"Directory traversal\",\"regexps\":{\"body\":[\"Bad Request (Invalid Hostname)\"],\"regexp\":[\"IIS\\\\/([\\\\d\\\\.]{3,4})\"],\"vuln\":[\"- /\\u003c/title\\u003e\"]}}],\"tag\":[\"component\"]},{\"focus\":true,\"link\":\"\",\"name\":\"struts2\",\"rule\":[{\"regexps\":{\"body\":[\"org.apache.struts2\",\"struts.devMode\",\"struts-tags\",\"Action mapped for namespace\",\".action\"]}}],\"tag\":[\"component\"]},{\"focus\":true,\"link\":\"\",\"name\":\"springboot\",\"rule\":[{\"regexps\":{\"body\":[\"Whitelabel Error Page\",\"No message available\",\"{\\\"timestamp\\\":\"]}}],\"tag\":[\"component\"]},{\"focus\":true,\"link\":\"\",\"name\":\"springcloud-function\",\"rule\":[{\"regexps\":{\"body\":[\"\\\"error\\\":\\\"Internal Server Error\\\"\"]},\"send_data\":\"/functionRouter\"}],\"tag\":[\"component\"]},{\"focus\":true,\"link\":\"\",\"name\":\"spring\",\"rule\":[{\"regexps\":{\"header\":[\"springframework\"]}}],\"tag\":[\"component\"]},{\"default_port\":[\"2001\"],\"focus\":true,\"link\":\"\",\"name\":\"spring-cloud-hystrix\",\"rule\":[{\"regexps\":{\"body\":[\"hystrix\"],\"header\":[\"hystrix-dashboard\"]}}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\"springsecurity\",\"rule\":[{\"regexps\":{\"body\":[\"Full authentication is required\"]}}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\"frp\",\"rule\":[{\"regexps\":{\"body\":[\"Faithfully yours, frp\"]}}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\"tomcat\",\"rule\":[{\"favicon\":{\"md5\":[\"4644f2d45601037b8423d45e13194c93\"]},\"regexps\":{\"header\":[\"Apache-Coyote\"],\"regexp\":[\"\\u003ch3\\u003eApache Tomcat/(.*)\\u003c/h3\\u003e\",\"\\u003ctitle\\u003eApache Tomcat/(.*)\\u003c/title\\u003e\"]}}],\"tag\":[\"component\"]},{\"info\":\"Directory traversal\",\"link\":\"\",\"name\":\"directory\",\"rule\":[{\"regexps\":{\"vuln\":[\"Directory Listing For\"]}}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\"apache\",\"rule\":[{\"info\":\"Directory traversal\",\"regexps\":{\"vuln\":[\"Index of /\"]}}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\".net\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Visual Basic\"]}}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\"ntlm认证\",\"rule\":[{\"regexps\":{\"header\":[\"NTLM\"]}}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\"oracle-application-server\",\"rule\":[{\"regexps\":{\"header\":[\"Oracle-Application-Server\"]}}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\"redhat\",\"rule\":[{\"regexps\":{\"header\":[\"Red Hat\"]}}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\"redmine\",\"rule\":[{\"favicon\":{\"mmh3\":[\"603314\"]},\"regexps\":{\"body\":[\"Redmine\",\"authenticity_token\"]}}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\"resin\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Resin\"]}}],\"tag\":[\"component\"]},{\"focus\":true,\"link\":\"\",\"name\":\"solr\",\"rule\":[{\"regexps\":{\"body\":[\"Solr Admin\",\"SolrCore Initialization Failures\",\"app_config.solr_path\"]}}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\"tengine\",\"rule\":[{\"regexps\":{\"header\":[\"Tengine\"]}}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\"vue\",\"rule\":[{\"favicon\":{\"md5\":[\"67d34b0decfd4d725d1c1f2eeadc4756\"],\"mmh3\":[\"-1237480336\"]}}],\"tag\":[\"component\"]},{\"level\":1,\"link\":\"\",\"name\":\"f5bigip\",\"rule\":[{\"favicon\":{\"md5\":[\"04d9541338e525258daf47cc844d59f3\"],\"mmh3\":[\"878647854\",\"-335242539\",\"-1581907337\"]},\"regexps\":{\"header\":[\"X-PvInfo\",\"BigIP\"]}}],\"tag\":[\"component\"]},{\"focus\":true,\"link\":\"\",\"name\":\"f5bigip-console\",\"rule\":[{\"info\":\"bigip_console_leak\",\"regexps\":{\"vuln\":[\"BIG-IP\\u0026reg; Configuration Utility\"]},\"send_data\":\"/tmui/login.jsp\"}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\"jetty\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-629047854\"]},\"regexps\":{\"body\":[\"Powered by Jetty\"],\"header\":[\"Jetty\"]}}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\"Oauth2\",\"rule\":[{\"regexps\":{\"body\":[\"bearer\"],\"header\":[\"bearer\"]}}],\"tag\":[\"component\"]},{\"focus\":true,\"link\":\"\",\"name\":\"金蝶eas\",\"rule\":[{\"regexps\":{\"body\":[\"easSessionId\",\"path=/eassso\"]}}],\"tag\":[\"component\"]},{\"focus\":true,\"link\":\"\",\"name\":\"金蝶apusic\",\"rule\":[{\"regexps\":{\"body\":[\"-Error report\",\"Apusic Application Server\"],\"header\":[\"Apusic\"]}}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\"glassfish\",\"rule\":[{\"regexps\":{\"header\":[\"Server: GlassFish Server\"]}}],\"tag\":[\"component\"]},{\"focus\":true,\"link\":\"\",\"name\":\"jeecg\",\"rule\":[{\"regexps\":{\"body\":[\"jeecg\",\"window._CONFIG['onlinePreviewDomainURL\"]}}],\"tag\":[\"component\"]},{\"focus\":true,\"link\":\"\",\"name\":\"telerik\",\"rule\":[{\"regexps\":{\"body\":[\"telerik\"]}}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\"fckeditor\",\"rule\":[{\"regexps\":{\"body\":[\"FCKeditor\"]}}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\"fckeditor\",\"rule\":[{\"regexps\":{\"body\":[\"FCKeditor\"]}}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\"tapestry\",\"rule\":[{\"regexps\":{\"body\":[\"tapestry\"]}}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\"upload-form\",\"rule\":[{\"regexps\":{\"body\":[\"type=\\\"file\\\"\"]}}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\"xampp\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1437701105\"]}}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\"lanmp集成环境\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eLANMP\"]}}],\"tag\":[\"component\"]},{\"default_port\":[\"8888\"],\"link\":\"\",\"name\":\"宝塔面板\",\"rule\":[{\"regexps\":{\"body\":[\"app.bt.cn/static/app.png\",\"安全入口校验失败\"]}}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\"宝塔\",\"rule\":[{\"favicon\":{\"md5\":[\"3c3804ddad747313df58112a3e1bc680\"]},\"regexps\":{\"body\":[\"恭喜，站点创建成功\",\"没有找到站点\"]}}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\"lnmp\",\"rule\":[{\"regexps\":{\"body\":[\"lnmp.gif\"]}}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\"pythonSimpleHTTP\",\"rule\":[{\"regexps\":{\"header\":[\"SimpleHTTP/\"]}}],\"tag\":[\"component\"]},{\"link\":\"\",\"name\":\"linksys-vpn\",\"rule\":[{\"regexps\":{\"header\":[\"linksys-vpn\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"cisco_vpn\",\"rule\":[{\"regexps\":{\"header\":[\"webvpn\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"o2security_vpn\",\"rule\":[{\"regexps\":{\"header\":[\"client_param=install_active\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"网御星云vpn\",\"rule\":[{\"regexps\":{\"body\":[\"/ssl/down/usbkey.exe\",\"/js/leadsec.js\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"citrix-web-pn-server\",\"rule\":[{\"regexps\":{\"body\":[\"Citrix Web PN Server\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"juniper_vpn\",\"rule\":[{\"regexps\":{\"body\":[\"welcome.cgi?p=logo\",\"/images/logo_juniper_reversed.gif\"]}}],\"tag\":[\"device\"]},{\"focus\":true,\"link\":\"\",\"name\":\"深信服ssl-vpn\",\"rule\":[{\"regexps\":{\"body\":[\"login_psw.csp\",\"EasyConnect\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"citrix/netscaler vpn\",\"rule\":[{\"regexps\":{\"body\":[\"/vpn/resources.js\"]}}],\"tag\":[\"device\"]},{\"focus\":true,\"link\":\"\",\"name\":\"奇安信vpn\",\"rule\":[{\"regexps\":{\"body\":[\"new_style/deepblue.css\",\"admin/js/json2.js\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"h3c-am8000\",\"rule\":[{\"regexps\":{\"body\":[\"AM8000\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"汉柏安全网关\",\"rule\":[{\"regexps\":{\"body\":[\"OPZOON\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"360企业版\",\"rule\":[{\"regexps\":{\"body\":[\"360EntWebAdminMD5Secret\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"h3c公司产品\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eWeb managerment Home\",\".h3c.com\",\"service@h3c.com\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"h3c网络设备\",\"rule\":[{\"regexps\":{\"body\":[\"libs/MulPlatAPI.js\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"h3c icg 1000\",\"rule\":[{\"regexps\":{\"body\":[\"ICG 1000系统管理\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"citrix-metaframe\",\"rule\":[{\"regexps\":{\"body\":[\"window.location=\\\"/Citrix/MetaFrame\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"cisco_epc3925\",\"rule\":[{\"regexps\":{\"body\":[\"Docsis_system\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"cisco asr\",\"rule\":[{\"regexps\":{\"body\":[\"CISCO ASR\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"huawei_srg2220\",\"rule\":[{\"regexps\":{\"body\":[\"HUAWEI SRG2220\"]}}],\"tag\":[\"device\"]},{\"default_port\":[\"8443\"],\"link\":\"\",\"name\":\"huawei_router\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1395400951\"]},\"regexps\":{\"body\":[\"UI_component/css/xtheme-black\"]}}],\"tag\":[\"device\"]},{\"focus\":true,\"link\":\"\",\"name\":\"深信服edr\",\"rule\":[{\"favicon\":{\"md5\":[\"0b24d4d5c7d300d50ee1cd96059a9e85\"]},\"regexps\":{\"body\":[\"终端检测响应平台\",\"featureDetect.js\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"华为 netopen\",\"rule\":[{\"regexps\":{\"body\":[\"/netopen/theme/css/inFrame.css\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"nagios\",\"rule\":[{\"regexps\":{\"header\":[\"Nagios Access\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"citrix-access-gateway\",\"rule\":[{\"regexps\":{\"body\":[\"Citrix Access Gateway\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"华为 mcu\",\"rule\":[{\"regexps\":{\"body\":[\"McuR5-min.js\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"citrix-xenserver\",\"rule\":[{\"regexps\":{\"body\":[\"Citrix Systems, Inc. XenServer\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"cisco-router\",\"rule\":[{\"regexps\":{\"body\":[\"Cisco Systems Login\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"synology-router\",\"rule\":[{\"regexps\":{\"body\":[\"synologyrouter\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"h3c-secblade-firewall\",\"rule\":[{\"regexps\":{\"body\":[\"js/MulPlatAPI.js\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"citrix_netscaler\",\"rule\":[{\"regexps\":{\"body\":[\"ns_af\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"深信服防火墙类产品\",\"rule\":[{\"regexps\":{\"body\":[\"SANGFOR FW\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"citrix-confproxy\",\"rule\":[{\"regexps\":{\"body\":[\"confproxy\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"华为（huawei）安全设备\",\"rule\":[{\"regexps\":{\"body\":[\"sweb-lib/resource/\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"绿盟下一代防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"NSFOCUS NF\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"citrix-netscaler\",\"rule\":[{\"regexps\":{\"body\":[\"NS-CACHE\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"华为（huawei）secoway设备\",\"rule\":[{\"regexps\":{\"body\":[\"Secoway\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"深信服上网行为管理系统\",\"rule\":[{\"regexps\":{\"md5\":[\"d8de64b0ca4281380295aa23500267ca\"]},\"send_data\":\"/login/img/product_logo.png\"}],\"tag\":[\"device\"]},{\"focus\":true,\"link\":\"\",\"name\":\"锐捷eweb\",\"rule\":[{\"regexps\":{\"body\":[\"pub/ui/rui-min.css\",\"NBR路由器\"]}}],\"tag\":[\"device\"]},{\"focus\":true,\"link\":\"\",\"name\":\"锐捷ap\",\"rule\":[{\"regexps\":{\"body\":[\"common.sea.config.js\"]}}],\"tag\":[\"device\"]},{\"focus\":true,\"link\":\"\",\"name\":\"jumpserver\",\"rule\":[{\"favicon\":{\"md5\":[\"20334371817c7368907b5ea52aab2d9e\"]},\"regexps\":{\"body\":[\"/static/img/facio.jico\",\"JumpServer\\u003c/title\\u003e\"]}}],\"tag\":[\"device\"]},{\"focus\":true,\"link\":\"\",\"name\":\"天玥堡垒机\",\"rule\":[{\"regexps\":{\"body\":[\"kaasapp/views/css/assign.css\"]}}],\"tag\":[\"device\"]},{\"focus\":true,\"link\":\"\",\"name\":\"网御堡垒机\",\"rule\":[{\"regexps\":{\"body\":[\"网御运维安全网关\",\"ops/Login\"]}}],\"tag\":[\"device\"]},{\"focus\":true,\"link\":\"\",\"name\":\"奇安信堡垒机\",\"rule\":[{\"regexps\":{\"body\":[\"location.href='/fort'\",\"SecFox运维安全管理\",\"embedRzx type=application/htnpapi-plugin\"]}}],\"tag\":[\"device\"]},{\"focus\":true,\"link\":\"\",\"name\":\"齐治堡垒机\",\"rule\":[{\"favicon\":{\"md5\":[\"48ee373f098d8e96e53b7dd778f09ff4\"]},\"regexps\":{\"body\":[\"logo-icon-ico72.png\",\"image/top_logo.ico\",\"localStorage.deployPath + \\\"/login?logout\\\";\"],\"header\":[\"/shterm\"]}}],\"tag\":[\"device\"]},{\"focus\":true,\"link\":\"\",\"name\":\"安恒云堡垒机\",\"rule\":[{\"regexps\":{\"body\":[\"DBAPPSecurity\",\"安恒云堡垒机\"]}}],\"tag\":[\"device\"]},{\"focus\":true,\"link\":\"\",\"name\":\"TELEPORT堡垒机\",\"rule\":[{\"regexps\":{\"body\":[\"blur/background-blur.js\"]}}],\"tag\":[\"device\"]},{\"focus\":true,\"link\":\"\",\"name\":\"思福迪logbase堡垒机\",\"rule\":[{\"regexps\":{\"body\":[\"Logbase\",\"/manage/css/login.css\"]}}],\"tag\":[\"device\"]},{\"focus\":true,\"link\":\"\",\"name\":\"中科网威堡垒机\",\"rule\":[{\"regexps\":{\"body\":[\"zk.appname\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"vmware_vrealize\",\"rule\":[{\"regexps\":{\"body\":[\"vRealize\"]}}],\"tag\":[\"device\"]},{\"focus\":true,\"link\":\"\",\"name\":\"apache_cas\",\"rule\":[{\"regexps\":{\"body\":[\"Central Authentication Service\",\"execution=\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"金山timon云杀毒\",\"rule\":[{\"regexps\":{\"body\":[\"iepngfix_tilebg.js\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"群晖nas\",\"rule\":[{\"regexps\":{\"body\":[\"DiskStation\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"山石网科设备\",\"rule\":[{\"regexps\":{\"body\":[\"Hillstone\"]}}],\"tag\":[\"device\"]},{\"focus\":true,\"link\":\"\",\"name\":\"金山企业版(猎鹰)\",\"rule\":[{\"regexps\":{\"body\":[\"kaasapp/views/css/assign.css\"]}}],\"tag\":[\"device\"]},{\"focus\":true,\"link\":\"\",\"name\":\"金山edr\",\"rule\":[{\"regexps\":{\"body\":[\"终端安全系统Web控制台\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"北信源edr\",\"rule\":[{\"regexps\":{\"body\":[\"北信源网络防病毒系统\"]}}],\"tag\":[\"device\"]},{\"focus\":true,\"link\":\"\",\"name\":\"联软edr\",\"rule\":[{\"regexps\":{\"body\":[\"Resource/views/images/common/logo2.png\",\"联软IT安全运维管理系统\"]}}],\"tag\":[\"device\"]},{\"focus\":true,\"link\":\"\",\"name\":\"奇安信新天擎edr\",\"rule\":[{\"regexps\":{\"body\":[\"新天擎\",\"/res/css/tools/index.css\"]}}],\"tag\":[\"device\"]},{\"focus\":true,\"link\":\"\",\"name\":\"奇安信/360天擎edr\",\"rule\":[{\"regexps\":{\"body\":[\"360天擎终端安全管理系统\"]}}],\"tag\":[\"device\"]},{\"focus\":true,\"link\":\"\",\"name\":\"天融信edr\",\"rule\":[{\"regexps\":{\"body\":[\"天融信终端威胁防御系统\"]}}],\"tag\":[\"device\"]},{\"focus\":true,\"link\":\"\",\"name\":\"通软edr\",\"rule\":[{\"regexps\":{\"body\":[\"/default/uninstall.html\",\"/Gsc/\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"solarwinds-device\",\"rule\":[{\"regexps\":{\"body\":[\"SolarWinds\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"深信服设备\",\"rule\":[{\"favicon\":{\"md5\":[\"293a3a7763eee19a068ef3dff98a7b8a\"]},\"regexps\":{\"body\":[\"sangfor.com.cn\"],\"header\":[\"SinforHttpd\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"海康设备\",\"rule\":[{\"regexps\":{\"body\":[\"海康威视\",\"hikvision\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"华为设备\",\"rule\":[{\"regexps\":{\"body\":[\"huawei\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"天融信设备\",\"rule\":[{\"regexps\":{\"body\":[\"topsec\",\"天融信\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"网御星云设备\",\"rule\":[{\"regexps\":{\"body\":[\"leadsec\",\"网御\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"启明星辰设备\",\"rule\":[{\"regexps\":{\"body\":[\"北京启明星辰信息安全技术有限公司\",\"venustech\",\"天玥\",\"Leadersec\",\"网御\",\"天清\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"安恒设备\",\"rule\":[{\"regexps\":{\"body\":[\"明御\",\"安恒\",\"明鉴\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"任子行\",\"rule\":[{\"regexps\":{\"body\":[\"任子行\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"奇安信设备\",\"rule\":[{\"favicon\":{\"md5\":[\"e4e25f45b2a8988cb203743bd64204fe\"],\"mmh3\":[\"-1260240149\"]},\"regexps\":{\"body\":[\"网神\",\"网康\",\"secfox\"],\"header\":[\"QiAnXin\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"联软设备\",\"rule\":[{\"favicon\":{\"md5\":[\"da9ce98e9a52ccb605d112c0437bcbc1\"],\"mmh3\":[\"-2130980754\"]},\"regexps\":{\"body\":[\"leagsoft\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"网康设备\",\"rule\":[{\"regexps\":{\"body\":[\"netentsec\",\"网康\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"思科设备\",\"rule\":[{\"regexps\":{\"body\":[\"Cisco\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"奇安信网神/360天堤防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"resources/image/logo_header.png\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"网神3600防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"网神SecGate\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"synology_nas\",\"rule\":[{\"regexps\":{\"body\":[\"modules/BackupReplicationApp\"],\"header\":[\"webman/index.cgi\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"teamviewer\",\"rule\":[{\"regexps\":{\"body\":[\"This site is running\",\"TeamViewer\"]}}],\"tag\":[\"device\"]},{\"focus\":true,\"link\":\"\",\"name\":\"天融信vpn\",\"rule\":[{\"regexps\":{\"header\":[\"topsecsvportalname\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"天融信防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"WEB User Interface\"],\"header\":[\"TopWebServer\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"安全宝\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-By-Anquanbao\"]}}],\"tag\":[\"device\"]},{\"focus\":true,\"link\":\"\",\"name\":\"海康威视ivms\",\"rule\":[{\"regexps\":{\"body\":[\"g_szCacheTime\",\"iVMS\"]}}],\"tag\":[\"device\"]},{\"focus\":true,\"link\":\"\",\"name\":\"hikvision摄像头\",\"rule\":[{\"favicon\":{\"md5\":[\"89b932fcc47cf4ca3faadb0cfdef89cf\"],\"mmh3\":[\"999357577\"]},\"regexps\":{\"body\":[\"doc/page/login.asp\"],\"header\":[\"DVRDVS-Webs\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"科来ras\",\"rule\":[{\"regexps\":{\"body\":[\"科来网络回溯\",\"科来软件 版权所有\",\"i18ninit.min.js\"]}}],\"tag\":[\"device\"]},{\"focus\":true,\"link\":\"\",\"name\":\"网神vpn\",\"rule\":[{\"regexps\":{\"body\":[\"admin/js/virtual_keyboard.js\"],\"header\":[\"host_for_cookie\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"网神防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"secgate 3600\",\"css/lsec/login.css\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"锐捷 rg-dbs\",\"rule\":[{\"regexps\":{\"body\":[\"/css/impl-security.css\",\"/dbaudit/authenticate\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"金山设备\",\"rule\":[{\"favicon\":{\"md5\":[\"18d34be498cfd133d32e83a49af461b4\"],\"mmh3\":[\"-1786140609\"]},\"regexps\":{\"body\":[\"金山\",\"猎鹰安全\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"网御waf设备\",\"rule\":[{\"regexps\":{\"body\":[\"网御WAF\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"网御上网行为管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"Leadsec ACM\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"array_vpn\",\"rule\":[{\"regexps\":{\"body\":[\"an_util.js\",\"/prx/000/http/\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"fortinet VPN\",\"rule\":[{\"favicon\":{\"mmh3\":[\"945408572\"]}},{\"regexps\":{\"header\":[\"xxxxxxxx-xxxxx\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"fortinet firewall\",\"rule\":[{\"regexps\":{\"body\":[\"Firewall Notification\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"yealink设备\",\"rule\":[{\"regexps\":{\"header\":[\"yealink embed httpd\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"ibm websphere datapower\",\"rule\":[{\"regexps\":{\"header\":[\"X-Backside-Transport\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"ibm-bladecenter\",\"rule\":[{\"regexps\":{\"body\":[\"/shared/ibmbch.png\",\"/shared/ibmbcs.png\",\"alt=\\\"IBM BladeCenter\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"ibm-cics-transaction-server\",\"rule\":[{\"regexps\":{\"header\":[\"IBM_CICS_Transaction_Server\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"ibm-cognos\",\"rule\":[{\"regexps\":{\"body\":[\"/cgi-bin/cognos.cgi\",\"Cognos \\u0026#26159; International Business Machines Corp\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"ibm-internet-connection-server\",\"rule\":[{\"regexps\":{\"header\":[\"IBM Internet Connection Server\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"ibm-web-traffic-express-caching-proxy\",\"rule\":[{\"regexps\":{\"body\":[\"/admin-bin/webexec/wte.html\"],\"header\":[\"IBM-PROXY-WTE\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"ibm-webseal\",\"rule\":[{\"regexps\":{\"header\":[\"WebSEAL\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"ibm-websphere-datapower\",\"rule\":[{\"regexps\":{\"header\":[\"x-backside-transport\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"ibm_http_server\",\"rule\":[{\"regexps\":{\"header\":[\"IBM_HTTP_Server\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"IBM设备\",\"rule\":[{\"regexps\":{\"body\":[\"www.ibm.com\",\"com.ibm\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"schneider设备\",\"rule\":[{\"regexps\":{\"body\":[\"schneider\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"升腾云终端管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"+MainPageTile+\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"博达交换机\",\"rule\":[{\"regexps\":{\"header\":[\"Www-Authenticate: Basic realm=\\\"Switch\\\"\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"SNMP-manage\",\"rule\":[{\"regexps\":{\"body\":[\"WwW-Authenticate: Basic realm=\\\"SNMP\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"中兴epon\",\"rule\":[{\"regexps\":{\"body\":[\"WWw-Authenticate: Basic realm=\\\" ONU\\\"\"]}}],\"tag\":[\"device\"]},{\"focus\":true,\"link\":\"\",\"name\":\"h3c-imc\",\"rule\":[{\"regexps\":{\"body\":[\"primefaces-imc-classic-blue\",\"window.location.href='/imc/login.jsf'\"]}}],\"tag\":[\"device\"]},{\"focus\":true,\"link\":\"\",\"name\":\"H3C-CAS\",\"rule\":[{\"regexps\":{\"header\":[\"Server: CVM\",\"Server: H3C-CVM\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"ZKTIME打卡机\",\"rule\":[{\"regexps\":{\"body\":[\"ZKTECO\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"安恒日志审计\",\"rule\":[{\"regexps\":{\"body\":[\"/js/app/App.Message.js\",\"/js/mango/Mango.Util.Top.js\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"安恒设备\",\"rule\":[{\"regexps\":{\"body\":[\"webui/images/basic/login/icon-lang.png\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"Huawei-EasySuite\",\"rule\":[{\"regexps\":{\"body\":[\"/static/easysuite/js/vendor.js\",\"\\u003ctitle\\u003eEasySuite\\u003c/title\\u003e\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"飞塔防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"FortiGate\",\"app-id=1157004084, app-argument={{::host_addr}}\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"深信服身份认证系统\",\"rule\":[{\"regexps\":{\"body\":[\"请您先登录身份认证系统\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"帕拉迪堡垒机\",\"rule\":[{\"regexps\":{\"header\":[\"module/image/pldsec.css\"]}}],\"tag\":[\"device\"]},{\"default_port\":[\"8443\"],\"link\":\"\",\"name\":\"海康威视-综合安防\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-808437027\"]}}],\"tag\":[\"device\"]},{\"link\":\"\",\"name\":\"30盛安邮件系统\",\"rule\":[{\"regexps\":{\"body\":[\"30san.all\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"acmailer\",\"rule\":[{\"regexps\":{\"body\":[\"acmailer\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"安邮\",\"rule\":[{\"regexps\":{\"body\":[\"suremail.cn\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"17mail易企邮\",\"rule\":[{\"regexps\":{\"body\":[\"易企邮\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"亿邮邮件系统\",\"rule\":[{\"regexps\":{\"body\":[\"eYouMail\",\"亿邮\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"exchange\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1768726119\"]},\"regexps\":{\"body\":[\"/owa/auth.owa\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"万网企业云邮箱\",\"rule\":[{\"regexps\":{\"body\":[\"mxhichina\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"泰信tmailer邮件系统\",\"rule\":[{\"regexps\":{\"body\":[\"Tmailer\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"bxemail\",\"rule\":[{\"regexps\":{\"body\":[\"百讯安全邮件系统\",\"百姓邮局\",\"bxemail.com\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"coremail\",\"rule\":[{\"regexps\":{\"body\":[\"/coremail/common/assets\",\"Coremail邮件系统\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"fangmail\",\"rule\":[{\"regexps\":{\"body\":[\"/fangmail/default/css/em_css.css\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"formmail\",\"rule\":[{\"regexps\":{\"body\":[\"/FormMail.pl\",\"href=\\\"http://www.worldwidemart.com/scripts/formmail.shtml\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"hivemail\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Hivemail\"],\"header\":[\"hivesession\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"igenus邮件系统\",\"rule\":[{\"regexps\":{\"body\":[\"Copyright by\\u003cA HREF=\\\"http://www.igenus.org\",\"iGENUS webmail\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"imailserver\",\"rule\":[{\"regexps\":{\"body\":[\"myICalUserName\"],\"header\":[\"Ipswitch-IMail\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"ipswitch-imail\",\"rule\":[{\"regexps\":{\"header\":[\"Ipswitch-IMail\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"kerio mailserver\",\"rule\":[{\"regexps\":{\"header\":[\"Kerio MailServer\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"magicwinmail\",\"rule\":[{\"regexps\":{\"header\":[\"magicwinmail_default_theme\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"richmail\",\"rule\":[{\"regexps\":{\"body\":[\"Richmail\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"sophos_email_appliance\",\"rule\":[{\"regexps\":{\"header\":[\"Sophos Email Appliance\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"squirrelmail\",\"rule\":[{\"regexps\":{\"header\":[\"SQMSESSID\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"turbomail\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by TurboMail\",\"wzcon1 clearfix\",\"TurboMail邮件系统\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"u-mail\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cBODY LINK=\\\"White\\\" VLINK=\\\"White\\\" ALINK=\\\"White\\\"\\u003e\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"winwebmail\",\"rule\":[{\"regexps\":{\"body\":[\"winwebmail\",\"images/owin.css\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"亿邮\",\"rule\":[{\"regexps\":{\"body\":[\"EYOU企业邮箱\",\"cr\\\"\\u003eeYouMail\"],\"header\":[\"EMPHPSID\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"迈捷邮件系统\",\"rule\":[{\"regexps\":{\"body\":[\"/aboutus/magicmail.gif\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"roundcube mail\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-976235259\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"afterlogic\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-194791768\"]},\"regexps\":{\"body\":[\"AfterLogic WebMail Pro\"],\"header\":[\"PHPWEBMAILSESSID\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"atmail\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by Atmail\",\"/index.php/mail/auth/processlogin\",\"\\u003cinput id=\\\"Mailserverinput\"],\"header\":[\"atmail6\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"exchange\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1768726119\"]},\"regexps\":{\"body\":[\"owaLgnBdy\"],\"header\":[\"OutlookSession\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"科信邮件系统\",\"rule\":[{\"regexps\":{\"body\":[\"/systemfunction.pack.js\",\"lo_computername\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"spammark邮件信息安全网关\",\"rule\":[{\"regexps\":{\"body\":[\"Spammark邮件信息安全网关\",\"/cgi-bin/spammark?empty=1\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"金笛邮件系统\",\"rule\":[{\"regexps\":{\"body\":[\"/jdwm/cgi/login.cgi?login\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"网易企业邮箱\",\"rule\":[{\"regexps\":{\"body\":[\"frmvalidator\"]}}],\"tag\":[\"mail\"]},{\"link\":\"\",\"name\":\"腾讯企业邮箱\",\"rule\":[{\"regexps\":{\"body\":[\"/cgi-bin/getinvestigate?flowid=\"]}}],\"tag\":[\"mail\"]},{\"focus\":true,\"link\":\"\",\"name\":\"泛微 e-cology\",\"rule\":[{\"regexps\":{\"body\":[\"/wui/theme/ecology\",\"/cloudstore/resource/pc/com\"],\"header\":[\"ecology_JSessionid\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"78oa\",\"rule\":[{\"regexps\":{\"body\":[\"license.78oa.com\",\"78oa\"]}}],\"tag\":[\"oa\"]},{\"focus\":true,\"link\":\"\",\"name\":\"泛微oa\",\"rule\":[{\"regexps\":{\"body\":[\"/wui/common/css/w7OVFont.css\"],\"header\":[\"testBanCookie\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"泛普建筑工程施工oa\",\"rule\":[{\"regexps\":{\"body\":[\"/dwr/interface/LoginService.js\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"泰信tmailer邮件系统\",\"rule\":[{\"regexps\":{\"body\":[\"Tmailer\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"浪潮政务系统\",\"rule\":[{\"regexps\":{\"body\":[\"OnlineQuery/QueryList.aspx\",\"浪潮政务\",\"LangChao.ECGAP.OutPortal\"]}}],\"tag\":[\"oa\"]},{\"focus\":true,\"link\":\"\",\"name\":\"协众oa\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by 协众OA\"],\"header\":[\"CNOAOASESSID\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"拓尔思cms\",\"rule\":[{\"regexps\":{\"body\":[\"dreamer-cms\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"拓尔思ids\",\"rule\":[{\"regexps\":{\"body\":[\"/ids/admin/\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"拓尔思was\",\"rule\":[{\"regexps\":{\"body\":[\"trs_web_style.css\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"拓尔思wcm\",\"rule\":[{\"regexps\":{\"body\":[\"forum.trs.com.cn\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"拓尔思sso\",\"rule\":[{\"regexps\":{\"body\":[\"/ids/admin/js/oslib\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"拓尔思mas\",\"rule\":[{\"regexps\":{\"header\":[\"X-Mas-Server\"]}}],\"tag\":[\"oa\"]},{\"focus\":true,\"link\":\"\",\"name\":\"禅道oa\",\"rule\":[{\"regexps\":{\"body\":[\"/theme/default/images/main/zt-logo.png\",\"/zentao/theme/zui/css/min.css\",\"\\u003cscript\\u003eself.location='/user-login-\"],\"header\":[\"zentaosid\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"安策绩效管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"安策绩效信息科技\"]}}],\"tag\":[\"oa\"]},{\"focus\":true,\"link\":\"\",\"name\":\"致远m3\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eM3 Server\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"睿博士云办公系统\",\"rule\":[{\"regexps\":{\"body\":[\"/user/toUpdatePasswordPage.di\",\"/studentSign/toLogin.di\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"中望oa\",\"rule\":[{\"regexps\":{\"body\":[\"xtoa_logo.png\",\"qjuserinfoadd.jsp\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"海天oa\",\"rule\":[{\"regexps\":{\"body\":[\"HTVOS.js\"]}}],\"tag\":[\"oa\"]},{\"focus\":true,\"link\":\"\",\"name\":\"用友 nc\",\"rule\":[{\"regexps\":{\"body\":[\"UFIDA\",\"/nc/servlet/nc.ui.iufo.login.Index\"]}}],\"tag\":[\"oa\"]},{\"focus\":true,\"link\":\"\",\"name\":\"用友 grp-u8\",\"rule\":[{\"regexps\":{\"body\":[\"/R9iPortal/js/jquery.js\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"用友 grp-r9i\",\"rule\":[{\"regexps\":{\"body\":[\"R9iPortal/index.jsp\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"用友-ufida\",\"rule\":[{\"regexps\":{\"body\":[\"/System/Login/Login.asp?\"]}}],\"tag\":[\"oa\"]},{\"focus\":true,\"link\":\"\",\"name\":\"用友 u8-cloud\",\"rule\":[{\"regexps\":{\"body\":[\"uclient.yonyou.com/api/uclient/public/download\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"用友-rmis\",\"rule\":[{\"regexps\":{\"body\":[\"css/commonlogincomp.min.css\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"用友-时空企业信息管理门户\",\"rule\":[{\"regexps\":{\"body\":[\"mkbh = getCookie(\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"用友-智能网关\",\"rule\":[{\"regexps\":{\"body\":[\"/modules/core/client/views/header.client.view.html\"]}}],\"tag\":[\"oa\"]},{\"focus\":true,\"link\":\"\",\"name\":\"蓝凌oa-ekp\",\"rule\":[{\"regexps\":{\"body\":[\"/ekp/login.jsp\",\"ekpwx-v.oa.camc\",\"resource/anonym.jsp\",\"/sys/ui/js/LUI.js\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"红帆oa\",\"rule\":[{\"regexps\":{\"body\":[\"红帆ioffice\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"协达oa\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1850889691\"]},\"regexps\":{\"body\":[\"img.style.height=(bodyH-84-100)\"]}}],\"tag\":[\"oa\"]},{\"focus\":true,\"link\":\"\",\"name\":\"华天动力oa\",\"rule\":[{\"regexps\":{\"body\":[\"/htoa/css/CN/BLUE/login.css\",\"OAapp/WebObjects/OAapp.woa\"]}}],\"tag\":[\"oa\"]},{\"focus\":true,\"link\":\"\",\"name\":\"通达oa\",\"rule\":[{\"favicon\":{\"md5\":[\"ed0044587917c76d08573577c8b72883\"],\"mmh3\":[\"-759108386\"]},\"regexps\":{\"body\":[\"/static/images/tongda.ico\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"泛微e-mobile\",\"rule\":[{\"favicon\":{\"md5\":[\"f51746305f07a64eafa401adab364ad9\"]},\"regexps\":{\"body\":[\"/page/manage/css/main.css\",\"weaver,e-mobile\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"泛微 消息管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"移动管理平台消息服务\"]}}],\"tag\":[\"oa\"]},{\"focus\":true,\"link\":\"\",\"name\":\"泛微e-office\",\"rule\":[{\"regexps\":{\"body\":[\"/lang/cn/javascript.lang.js\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"泛微云桥e-bridge\",\"rule\":[{\"regexps\":{\"body\":[\"/main/assets/images/favicon.ico\"]}}],\"tag\":[\"oa\"]},{\"focus\":true,\"link\":\"\",\"name\":\"畅捷通 T-plus\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-2067519629\"]},\"regexps\":{\"body\":[\"畅捷通 T+\",\"tp.control.css.ashx\"]}}],\"tag\":[\"oa\"]},{\"focus\":true,\"link\":\"\",\"name\":\"金蝶云星空\",\"rule\":[{\"regexps\":{\"body\":[\"Kingdee.BOS.XPF.App.xap\"]}}],\"tag\":[\"oa\"]},{\"focus\":true,\"link\":\"\",\"name\":\"帆软finereport\",\"rule\":[{\"regexps\":{\"vuln\":[\"FineReport\"]},\"send_data\":\"/WebReport/ReportServer\"},{\"regexps\":{\"vuln\":[\"FineReport\"]},\"send_data\":\"/ReportServer\"},{\"regexps\":{\"vuln\":[\"FineReport\"]},\"send_data\":\"/webroot/ReportServer\"}],\"tag\":[\"oa\"]},{\"focus\":true,\"link\":\"\",\"name\":\"万户oa\",\"rule\":[{\"regexps\":{\"body\":[\"css/css_whir.css\",\"ezOFFICE\",\"万户OA\",\"whirRootPath\",\"/defaultroot\"],\"header\":[\"LocLan\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"oa企业智能办公自动化系统\",\"rule\":[{\"regexps\":{\"body\":[\"input name=\\\"S1\\\" type=\\\"image\\\"\",\"count/mystat.asp\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"smartoa\",\"rule\":[{\"regexps\":{\"body\":[\"/smartoa.plist\"],\"header\":[\"smartoa\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"soffice\",\"rule\":[{\"regexps\":{\"body\":[\"OA办公管理平台\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"单点crm系统\",\"rule\":[{\"regexps\":{\"body\":[\"URL=general/ERP/LOGIN/\",\"content=\\\"单点CRM系统\",\"客户关系管理-CRM\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"希尔oa\",\"rule\":[{\"regexps\":{\"body\":[\"/heeroa/login.do\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"正方oa\",\"rule\":[{\"regexps\":{\"body\":[\"zfoausername\"]}}],\"tag\":[\"oa\"]},{\"focus\":true,\"link\":\"\",\"name\":\"用友致远oa\",\"rule\":[{\"favicon\":{\"md5\":[\"57f307ad3764553df84e7b14b7a85432\",\"3c8df395ec2cbd72782286d18a286a9a\",\"2f761c27b6b7f9386bbd61403635dc42\"]},\"regexps\":{\"regexp\":[\"用友致远A\",\"/yyoa/\"]}}],\"tag\":[\"oa\"]},{\"focus\":true,\"link\":\"\",\"name\":\"致远oa A8\",\"rule\":[{\"favicon\":{\"md5\":[\"cdc85452665e7708caed3009ecb7d4e2\"],\"path\":\"/seeyon/common/images/A8/favicon.ico\"},\"regexps\":{\"regexp\":[\"A8\\\\/favicon\\\\.ico\\\\?V=(.*?)\\\"\"]}}],\"tag\":[\"oa\"]},{\"focus\":true,\"link\":\"\",\"name\":\"致远oa A6\",\"rule\":[{\"favicon\":{\"md5\":[\"8570d711136a8d720655cfc1362c8544\"],\"path\":\"/seeyon/common/images/A6/favicon.ico\"},\"regexps\":{\"regexp\":[\"A6\\\\/favicon\\\\.ico\\\\?V=(.*?)\\\"\"]}}],\"tag\":[\"oa\"]},{\"focus\":true,\"link\":\"\",\"name\":\"smartbi\",\"rule\":[{\"regexps\":{\"body\":[\"smartbi.gcf.gcfutil\"]}}],\"tag\":[\"oa\"]},{\"focus\":true,\"link\":\"\",\"name\":\"慧点oa\",\"rule\":[{\"regexps\":{\"body\":[\"www/mobile-version.txt\"]}}],\"tag\":[\"oa\"]},{\"focus\":true,\"link\":\"\",\"name\":\"金和oa\",\"rule\":[{\"regexps\":{\"body\":[\"金和协同管理平台\",\"JHSoft\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"中腾oa\",\"rule\":[{\"regexps\":{\"body\":[\"zt_webframe\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"蓝凌eis智慧协同平台\",\"rule\":[{\"regexps\":{\"body\":[\"/scripts/jquery.landray.common.js\",\"v11_QRcodeBar clr\"]}}],\"tag\":[\"oa\"]},{\"focus\":true,\"link\":\"\",\"name\":\"金蝶政务gsis\",\"rule\":[{\"regexps\":{\"body\":[\"/kdgs/script/kdgs.js\"]}}],\"tag\":[\"oa\"]},{\"focus\":true,\"link\":\"\",\"name\":\"帆软数据决策系统\",\"rule\":[{\"regexps\":{\"body\":[\"ReportServer?op\",\"DeploySuccess._init\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"urp教务系统\",\"rule\":[{\"regexps\":{\"body\":[\"URP 综合教务系统\",\"北京清元优软科技有限公司\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"中企动力门户cms\",\"rule\":[{\"regexps\":{\"body\":[\"中企动力提供技术支持\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"中控智慧时间安全管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"ZKECO 时间\\u0026安全管理平台\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"中控智慧考勤管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"/media/images/ZKECO16.ico\"],\"header\":[\"sessionidadms\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"久其通用财表系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cnobr\\u003e北京久其软件股份有限公司\",\"/netrep/intf\",\"/netrep/message2/\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"亿赛通dlp\",\"rule\":[{\"regexps\":{\"body\":[\"CDGServer3\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"任我行crm\",\"rule\":[{\"regexps\":{\"body\":[\"任我行CRM\",\"CRM_LASTLOGINUSERKEY\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"元年财务软件\",\"rule\":[{\"regexps\":{\"body\":[\"yuannian.css\",\"/image/logo/yuannian.gif\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"农友政务系统\",\"rule\":[{\"regexps\":{\"body\":[\"1207044504\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"凡科\",\"rule\":[{\"regexps\":{\"body\":[\"凡科\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"悟空crm\",\"rule\":[{\"regexps\":{\"body\":[\"悟空CRM\",\"/Public/js/5kcrm.js\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"惠尔顿上网行为管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"updateLoginPswd.php\",\"PassroedEle\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"正方教务管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"style/base/jw.css\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"一米oa\",\"rule\":[{\"regexps\":{\"body\":[\"/yimioa.apk\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"信达oa\",\"rule\":[{\"regexps\":{\"body\":[\"http://www.xdoa.cn\\u003c/a\\u003e\",\"创信达科技有限公司\"]}}],\"tag\":[\"oa\"]},{\"focus\":true,\"link\":\"\",\"name\":\"geoserver\",\"rule\":[{\"regexps\":{\"body\":[\"GeoServer\"]}}],\"tag\":[\"oa\"]},{\"focus\":true,\"link\":\"\",\"name\":\"arcgis\",\"rule\":[{\"regexps\":{\"body\":[\"arcgis\"]}}],\"tag\":[\"oa\"]},{\"focus\":true,\"link\":\"\",\"name\":\"any800\",\"rule\":[{\"regexps\":{\"body\":[\"any800\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"丽升阅卷系统\",\"rule\":[{\"regexps\":{\"body\":[\"LeaScentPaper.exe\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"odoo CRM\",\"rule\":[{\"favicon\":{\"md5\":[\"ec38664cbd12ffda74d04541be9956ad\"],\"mmh3\":[\"1393281917\"]},\"regexps\":{\"body\":[\"odoo\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"华宇TAS\",\"rule\":[{\"favicon\":{\"md5\":[\"a839ceee65e663c832c4c4dacf317cba\"],\"mmh3\":[\"-721107101\"]},\"regexps\":{\"body\":[\"/tas-console\"],\"header\":[\"Server: Tas\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"金山kinggate\",\"rule\":[{\"regexps\":{\"body\":[\"/src/system/login.php\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"信呼oa\",\"rule\":[{\"favicon\":{\"md5\":[\"975db4c825c16dde9ae6ba5da6ff8d46\"]}}],\"tag\":[\"oa\"]},{\"focus\":true,\"link\":\"\",\"name\":\"指掌易\",\"rule\":[{\"favicon\":{\"mmh3\":[\"157792745\",\"738823048\"]},\"regexps\":{\"body\":[\"/css/app/emmNew.css\",\"build/framework/js/download.js\"]}}],\"tag\":[\"oa\"]},{\"focus\":true,\"link\":\"\",\"name\":\"confluence\",\"rule\":[{\"favicon\":{\"md5\":[\"966e60f8eb85b7ea43a7b0095f3e2336\"],\"mmh3\":[\"-305179312\",\"-1642532491\"]},\"regexps\":{\"body\":[\"build/framework/js/download.js\"],\"header\":[\"x-confluence\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"phpmyadmin\",\"rule\":[{\"favicon\":{\"md5\":[\"531b63a51234bb06c9d77f219eb25553\"],\"mmh3\":[\"-1010568750\",\"-476231906\"]},\"regexps\":{\"body\":[\"/themes/pmahomme/img/logo_right.png\"],\"header\":[\"pma_lang\",\"phpMyAdmin\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"达观RPA\",\"rule\":[{\"favicon\":{\"md5\":[\"e2e2ba13339c2fea220f8b4fa6c32c0d\"],\"mmh3\":[\"-773042386\"]},\"regexps\":{\"body\":[\"\\u003ctitle\\u003eRPA\\u003c/title\\u003e\",\"DataGrand\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"微宏OA\",\"rule\":[{\"regexps\":{\"body\":[\"/wh/servlet/MainServer\"],\"header\":[\"/wh/serverlogin.jsp\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"点晴OA\",\"rule\":[{\"regexps\":{\"body\":[\"/mis/pc_desk/download_pc_msg.asp\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"致远互联-M1移动端\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cspan\\u003eM1-Server\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"软虹OA\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e软虹科技\\u003c/title\\u003e\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"九思协同办公系统\",\"rule\":[{\"regexps\":{\"body\":[\"/jsoa/login.jsp\",\"/x_desktop/index.html\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"明源云\",\"rule\":[{\"favicon\":{\"md5\":[\"383f3ea0be963d56cb16b012885261a4\"],\"mmh3\":[\"-626335361\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"KkFileView\",\"rule\":[{\"regexps\":{\"body\":[\"/onlinePreview?url=\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"peoplesoft-hr系统\",\"rule\":[{\"regexps\":{\"body\":[\"/ps/signon.html\"]}}],\"tag\":[\"oa\"]},{\"link\":\"\",\"name\":\"1und1\",\"rule\":[{\"regexps\":{\"body\":[\"/shop/catalog/browse?sessid=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"25yi\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by 25yi\",\"css/25yi.css\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"2z project\",\"rule\":[{\"regexps\":{\"body\":[\"Generator\\\" content=\\\"2z project\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"313自助建站\",\"rule\":[{\"regexps\":{\"header\":[\"313CMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"360webfacil_360webmanager\",\"rule\":[{\"regexps\":{\"body\":[\"publico/template/\",\"zonapie\",\"360WebManager Software\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"360主机卫士\",\"rule\":[{\"regexps\":{\"header\":[\"X-Safe-Firewall\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"360企业版\",\"rule\":[{\"regexps\":{\"body\":[\"360EntInst\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"360网站卫士\",\"rule\":[{\"regexps\":{\"header\":[\"360wzb\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"3com nbx\",\"rule\":[{\"regexps\":{\"body\":[\"NBX NetSet\",\"splashTitleIPTelephony\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"53客服\",\"rule\":[{\"regexps\":{\"body\":[\"tb.53kf.com/code/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"68 classifieds\",\"rule\":[{\"regexps\":{\"body\":[\"68 Classifieds\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"aardvark topsites\",\"rule\":[{\"regexps\":{\"body\":[\"Aardvark Topsites\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"abo.cms\",\"rule\":[{\"regexps\":{\"header\":[\"ABO.CMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"abyss\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Abyss\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"accellion secure file transfer\",\"rule\":[{\"regexps\":{\"body\":[\"Secured by Accellion\"],\"header\":[\"sfcurl=deleted;\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"achecker\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"AChecker is a Web accessibility\",\"Checker : Web Accessibility Checker\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"acidcat cms\",\"rule\":[{\"regexps\":{\"body\":[\"Acidcat\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"acme\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Acme\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"acsno网络探针\",\"rule\":[{\"regexps\":{\"body\":[\"探针管理与测试系统-登录界面\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"acti\",\"rule\":[{\"regexps\":{\"body\":[\"Web Configurator\",\"ACTi Corporation All Rights Reserved\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"activecollab\",\"rule\":[{\"regexps\":{\"body\":[\"activeCollab\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"activehtml\",\"rule\":[{\"regexps\":{\"header\":[\"ActiveHTML\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"activeweb\",\"rule\":[{\"regexps\":{\"body\":[\"AWNOCACHEBEGIN\",\"activeWeb cache extension\"],\"header\":[\"x-awcache\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"adaptcms\",\"rule\":[{\"regexps\":{\"body\":[\"AdaptCMS\"],\"header\":[\"adaptcms\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"adblock\",\"rule\":[{\"regexps\":{\"header\":[\"X-Adblock-Key\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"adcon telemetry gateway\",\"rule\":[{\"regexps\":{\"body\":[\"Adcon Telemetry GmbH;\"],\"header\":[\"addUPI\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"addthis\",\"rule\":[{\"regexps\":{\"body\":[\"addthis.com/js/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"adinfinity\",\"rule\":[{\"regexps\":{\"body\":[\"adinfinity.com.au/adapt\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"adiscon_loganalyzer\",\"rule\":[{\"regexps\":{\"body\":[\"Adiscon\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"adobe connect\",\"rule\":[{\"regexps\":{\"body\":[\"/common/scripts/showContent.js\"],\"header\":[\"BREEZESESSION=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"adobe-flash\",\"rule\":[{\"regexps\":{\"body\":[\"/x-shockwave-flash\",\"/go/getflashplayer\",\"embedswf\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"adobe_golive\",\"rule\":[{\"regexps\":{\"body\":[\"generator\\\" content=\\\"Adobe GoLive\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"adobe_robohelp\",\"rule\":[{\"regexps\":{\"body\":[\"generator\\\" content=\\\"Adobe RoboHelp\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"adriver\",\"rule\":[{\"regexps\":{\"body\":[\"ad.adriver.ru/cgi-bin\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"adsubtract proxy\",\"rule\":[{\"regexps\":{\"header\":[\"AdSubtract \"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"adtran-device\",\"rule\":[{\"regexps\":{\"header\":[\"NetVanta\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"advanced electron forum\",\"rule\":[{\"regexps\":{\"body\":[\"Powered By AEF\",\"content=\\\"aef\"],\"header\":[\"aefsid\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"advanced-image-hosting-script\",\"rule\":[{\"regexps\":{\"body\":[\"yabsoft.com\",\"Welcome to install AIHS Script\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"advancedwebstats\",\"rule\":[{\"regexps\":{\"body\":[\"caphyon-analytics.com/aws.js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"advantech-webaccess\",\"rule\":[{\"regexps\":{\"body\":[\"/bw_templete1.dwt\",\"/broadweb/WebAccessClientSetup.exe\",\"/broadWeb/bwuconfig.asp\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"adxstudio cms\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by Adxstudio\",\"poweredbyadx.png\"],\"header\":[\"anonprofile\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ad_rs设备\",\"rule\":[{\"regexps\":{\"header\":[\"AD_RS_COOKIE\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"aethra_telecommunications_operating_system\",\"rule\":[{\"regexps\":{\"header\":[\"atos\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"aicache\",\"rule\":[{\"regexps\":{\"header\":[\"X-Aicache\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"aicart\",\"rule\":[{\"regexps\":{\"body\":[\"APP_authenticate\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"aidex\",\"rule\":[{\"regexps\":{\"body\":[\"http://www.aidex.de/\"],\"header\":[\"aidex\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"airlink_modem\",\"rule\":[{\"regexps\":{\"header\":[\"Modem@AirLink.com\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"airos\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1020814938\",\"-697231354\"]},\"regexps\":{\"header\":[\"cookiechecker?uri=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"airtiesrouter\",\"rule\":[{\"regexps\":{\"body\":[\"Airties\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"airvaecommerce\",\"rule\":[{\"regexps\":{\"body\":[\"E-Commerce Shopping Cart Software\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"aja-video-converter\",\"rule\":[{\"regexps\":{\"body\":[\"eParamID_SWVersion\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"akamai\",\"rule\":[{\"regexps\":{\"header\":[\"X-Akamai-Transformed\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"akiva-webboard\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by WebBoard\"],\"header\":[\"webboard=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"aladdin-hasp-license-manager\",\"rule\":[{\"regexps\":{\"header\":[\"HASP\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"alcasar\",\"rule\":[{\"regexps\":{\"body\":[\"valoriserDiv5\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"allegro-software-rompager\",\"rule\":[{\"regexps\":{\"header\":[\"Allegro-Software-RomPager\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"allnewsmanager_net\",\"rule\":[{\"regexps\":{\"body\":[\"AllNewsManager\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"allomani\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Allomani\",\"Programmed By Allomani\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"alpha-five\",\"rule\":[{\"regexps\":{\"header\":[\"A5wSessionId\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"alstrasoft-askme\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ca href=\\\"pass_recover.php\\\"\\u003e\",\"http://www.alstrasoft.com\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"alstrasoft-epay-enterprise\",\"rule\":[{\"regexps\":{\"body\":[\"EPay Enterprise\",\"/shop.htm?action=view\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"alt-n-mdaemon-worldclient\",\"rule\":[{\"regexps\":{\"body\":[\"/WorldClient.dll\"],\"header\":[\"WDaemon\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"alt-svc\",\"rule\":[{\"regexps\":{\"header\":[\"Alt-Svc\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"alternate-protocol\",\"rule\":[{\"regexps\":{\"header\":[\"Alternate-Protocol\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"alumniserver\",\"rule\":[{\"regexps\":{\"body\":[\"AlumniServerProject.php\",\"content=\\\"Alumni\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"am4ss\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by am4ss\",\"am4ss.css\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"amaya\",\"rule\":[{\"regexps\":{\"body\":[\"generator\\\" content=\\\"Amaya\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"amazon-cloudfront\",\"rule\":[{\"regexps\":{\"header\":[\"X-Amz-Cf-Id\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"amiro-cms\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by: Amiro CMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"amr-wincontrol\",\"rule\":[{\"regexps\":{\"header\":[\"AMR_WinControl\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ananyoo-cms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"http://www.ananyoo.com\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"android webcam server\",\"rule\":[{\"regexps\":{\"header\":[\"Android Webcam Server\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"anecms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Erwin Aligam - ealigam@gmail.com\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"anygate\",\"rule\":[{\"regexps\":{\"body\":[\"AnyGate\",\"/anygate.php\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"anymacro\",\"rule\":[{\"regexps\":{\"body\":[\"document.aa.F_email\",\"AnyWebApp\"],\"header\":[\"LOGIN_KEY\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"aolserver\",\"rule\":[{\"regexps\":{\"header\":[\"AOLserver\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ap-router\",\"rule\":[{\"regexps\":{\"body\":[\"AP Router New Generation\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"apabi数字资源平台\",\"rule\":[{\"regexps\":{\"body\":[\"Default/apabi.css\",\"\\u003clink href=\\\"HTTP://apabi\",\"数字资源平台\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"apache-archiva\",\"rule\":[{\"regexps\":{\"body\":[\"Apache Archiva\",\"/archiva.js\",\"/archiva.css\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"apache-cocoon\",\"rule\":[{\"regexps\":{\"header\":[\"x-cocoon-version\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"apache-forrest\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Apache Forrest\",\"name=\\\"Forrest\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"apache-traffic-server\",\"rule\":[{\"regexps\":{\"header\":[\"ApacheTrafficServer\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"apache-wicket\",\"rule\":[{\"regexps\":{\"body\":[\"xmlns:wicket=\",\"/org.apache.wicket.\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"apc-ups-management-card\",\"rule\":[{\"regexps\":{\"body\":[\"class=\\\"apclogo\\\"\"],\"header\":[\"APC Management Card\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"apc_management\",\"rule\":[{\"regexps\":{\"body\":[\"This object on the APC Management Web Server is protected\"],\"header\":[\"APC Management Card\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"appcms\",\"rule\":[{\"regexps\":{\"body\":[\"Powerd by AppCMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"apphp-calendar\",\"rule\":[{\"regexps\":{\"body\":[\"This script was generated by ApPHP Calendar\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"appserv\",\"rule\":[{\"regexps\":{\"body\":[\"appserv/softicon.gif\",\"index.php?appservlang=th\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"appwall\",\"rule\":[{\"regexps\":{\"header\":[\"X-SL-CompState\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"arab-portal\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by: Arab\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"argosoft-mail-server\",\"rule\":[{\"regexps\":{\"body\":[\"ArGoSoft Mail Server Plus for\"],\"header\":[\"ArGoSoft Mail Server\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"arn01154u4\",\"rule\":[{\"regexps\":{\"header\":[\"ARN01154U4\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"arris-touchstone-router\",\"rule\":[{\"regexps\":{\"body\":[\"ARRIS Group\",\"/arris_style.css\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"arrisi_touchstone\",\"rule\":[{\"regexps\":{\"body\":[\"Touchstone Status\",\"passWithWarnings\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"artiphp-cms\",\"rule\":[{\"regexps\":{\"body\":[\"copyright Artiphp\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"aruba-device\",\"rule\":[{\"regexps\":{\"body\":[\"/images/arubalogo.gif\",\"Aruba Networks\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ashnews\",\"rule\":[{\"regexps\":{\"body\":[\"ashnews\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"asp-nuke\",\"rule\":[{\"regexps\":{\"body\":[\"CONTENT=\\\"ASP-Nuke\",\"content=\\\"ASPNUKE\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"asp.net mvc\",\"rule\":[{\"regexps\":{\"header\":[\"Aspnetmvc\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"asp168欧虎\",\"rule\":[{\"regexps\":{\"body\":[\"upload/moban/images/style.css\",\"default.php?mod=article\\u0026do=detail\\u0026tid\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"aspcms\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by ASPCMS\",\"content=\\\"ASPCMS\",\"/inc/AspCms_AdvJs.asp\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"aspilot-cart\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Pilot Cart\",\"/pilot_css_default.css\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"asproxy\",\"rule\":[{\"regexps\":{\"body\":[\"Surf the web invisibly using ASProxy power\",\"btnASProxyDisplayButton\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"aspthai_net-webboard\",\"rule\":[{\"regexps\":{\"body\":[\"ASPThai.Net Webboard\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"astaro-command-center\",\"rule\":[{\"regexps\":{\"body\":[\"/acc_aggregated_reporting.js\",\"/js/_variables_from_backend.js?\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"astaro-security-gateway\",\"rule\":[{\"regexps\":{\"body\":[\"wfe/asg/js/app_selector.js?t=\",\"/doc/astaro-license.txt\",\"/js/_variables_from_backend.js?t=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"asterisk\",\"rule\":[{\"regexps\":{\"body\":[\"asterisk_rawmanPath\"],\"header\":[\"Asterisk\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"asus_rtac66u\",\"rule\":[{\"regexps\":{\"body\":[\"RT-AC66U\"],\"header\":[\"RT-AC66U\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"atomic-photo-album\",\"rule\":[{\"regexps\":{\"body\":[\"Atomic Photo Album\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"atutor elearning\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"ATutor\",\"ATutor.course\"],\"header\":[\"ATutorID\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"atvise-webmi\",\"rule\":[{\"regexps\":{\"body\":[\"alarmlistbutton\"],\"header\":[\"atvise\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"aurion\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003c!-- Aurion Teal will be used as the login-time default\",\"/aurion.js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"auto-cms\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by Auto CMS\",\"content=\\\"AutoCMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"autoindex-php-script\",\"rule\":[{\"regexps\":{\"body\":[\"title=\\\"AutoIndex Default\",\"autoindex.sourceforge.net/\"],\"header\":[\"AutoIndex2\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"auxilium-petratepro\",\"rule\":[{\"regexps\":{\"body\":[\"index.php?cmd=11\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"av-arcade\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by \\u003ca href=\\\"http://www.avscripts.net/avarcade/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"avantfax\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Web 2.0 HylaFAX\",\"images/avantfax-big.png\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"avantfax传真管理\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Web 2.0 HylaFAX management\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"avaya-aura-utility-server\",\"rule\":[{\"regexps\":{\"body\":[\"vmsTitle\\\"\\u003eAvaya Aura\\u0026#8482;\\u0026nbsp;Utility Server\",\"/webhelp/Base/Utility_toc.htm\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"avaya-ip-office\",\"rule\":[{\"regexps\":{\"body\":[\"About IP Office\"],\"header\":[\"IPOffice\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"avaya-secure-router\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cb\\u003eAbout Avaya Secure Router\\u003c/b\\u003e\",\"\\u003cspan id=\\\"guiname\\\"\\u003eAvaya Secure Router\"],\"header\":[\"Avaya Http Server\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"avcon6\",\"rule\":[{\"regexps\":{\"body\":[\"filename=AVCON6Setup.exe\",\"AVCON6系统管理平台\",\"language_dispose.action\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"avocent-dsview\",\"rule\":[{\"regexps\":{\"body\":[\"/dsview/images/favicon.ico\",\"/dsview/protected/login.do\"],\"header\":[\"Avocent DSView\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"avtech-video-web-server\",\"rule\":[{\"regexps\":{\"body\":[\"--- VIDEO WEB SERVER ---\",\"/AV732E/setup.exe\"],\"header\":[\"Server: AV-TECH\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"awstats\",\"rule\":[{\"regexps\":{\"body\":[\"awstats.pl?config=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"awstats_admin\",\"rule\":[{\"regexps\":{\"body\":[\"generator\\\" content=\\\"AWStats\",\"\\u003cframe name=\\\"mainleft\\\" src=\\\"awstats.pl?config=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"awstats_misc_tracker\",\"rule\":[{\"regexps\":{\"body\":[\"/js/awstats_misc_tracker.js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"awstats网站日志分析工具\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"AWStats\",\"Created by awstats\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"axcms_net\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"AxCMS.net\",\"Generated by AxCMS.net\"],\"header\":[\"AxCMS.net\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"axel-device\",\"rule\":[{\"regexps\":{\"header\":[\"Axel Admin Server\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"axentra-hipserv\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Axentra\"],\"header\":[\"x-axentra-version\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"axigen-mail-server\",\"rule\":[{\"regexps\":{\"body\":[\"AXIGEN Webmail - \"],\"header\":[\"Axigen-Webmail\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"axis-commerce\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by Axis\",\"Login to Axis administrator\"],\"header\":[\"axisid\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"axis-network-camera\",\"rule\":[{\"regexps\":{\"body\":[\"AXIS Video Server\",\"/incl/trash.shtml\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"axis-printserver\",\"rule\":[{\"regexps\":{\"body\":[\"psb_printjobs.gif\",\"/cgi-bin/prodhelp?prod=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"axis2-web\",\"rule\":[{\"regexps\":{\"body\":[\"axis2-web/css/axis-style.css\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"axous\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Axous\",\"title=\\\"Axous Shareware Shop\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"axtls embad httpd\",\"rule\":[{\"regexps\":{\"header\":[\"axhttpd\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"axway-securetransport\",\"rule\":[{\"regexps\":{\"body\":[\"Welcome to SecureTransport\"],\"header\":[\"SecureTransport\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"azure_arr\",\"rule\":[{\"regexps\":{\"header\":[\"ARRAffinity\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"b2bbuilder\",\"rule\":[{\"favicon\":{\"mmh3\":[\"492941040\"]},\"regexps\":{\"body\":[\"content=\\\"B2Bbuilder\",\"translateButtonId = \\\"B2Bbuilder\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"b2evolution\",\"rule\":[{\"regexps\":{\"body\":[\"b2evolution\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"baap-mobile-version\",\"rule\":[{\"regexps\":{\"header\":[\"x-mobilized-by\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"backbee\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cdiv id=\\\"bb5-site-wrapper\\\"\\u003e\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"bacula-web\",\"rule\":[{\"regexps\":{\"body\":[\"Webacula\",\"bacula-web\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"badblue\",\"rule\":[{\"regexps\":{\"header\":[\"BadBlue\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"baocms\",\"rule\":[{\"regexps\":{\"body\":[\"baocms\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"barracuda-backup-server\",\"rule\":[{\"regexps\":{\"header\":[\"BACKUP_LOCAL_LOCALE\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"barracuda-load-balancer\",\"rule\":[{\"regexps\":{\"header\":[\"BARRACUDA_LB_COOKIE\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"batavi\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Batavi.org\"],\"header\":[\"Batavi\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"bbpress\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003c!-- If you like showing off the fact that your server rocks --\\u003e\",\"is proudly powered by \\u003ca href=\\\"http://bbpress.org\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"belkin-modem\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Belkin\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ben-ssl\",\"rule\":[{\"regexps\":{\"header\":[\"Ben-SSL\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"bentley-systems-projectwise\",\"rule\":[{\"regexps\":{\"body\":[\"href=\\\"ProjectWise.ico\",\"ProjectWise Web Server\"],\"header\":[\"Bentley.WebSession=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"bestshoppro\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"www.bst.pl\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"bigace\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"BIGACE\",\"Site is running BIGACE\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"bigcommerce\",\"rule\":[{\"regexps\":{\"header\":[\"SHOP_SESSION_TOKEN\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"bigdump\",\"rule\":[{\"regexps\":{\"body\":[\"BigDump\",\"BigDump: Staggered MySQL Dump Importer\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"billion-router\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"WebAdmin\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"binarysec-firewall\",\"rule\":[{\"regexps\":{\"header\":[\"X-BinarySEC\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"binarysec\",\"rule\":[{\"regexps\":{\"header\":[\"X-Binarysec-Via\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"binatone wr1500n\",\"rule\":[{\"regexps\":{\"header\":[\"WR1500N\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"binatone wr1505n3\",\"rule\":[{\"regexps\":{\"header\":[\"WR1505N3\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"binatone wr3005n3\",\"rule\":[{\"regexps\":{\"header\":[\"WR3005N3\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"binatone wrn342\",\"rule\":[{\"regexps\":{\"header\":[\"WRN342\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"biromsoft-webcam\",\"rule\":[{\"regexps\":{\"body\":[\"Biromsoft WebCam\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"biscom-delivery-server\",\"rule\":[{\"regexps\":{\"body\":[\"/bds/stylesheets/fds.css\",\"/bds/includes/fdsJavascript.do\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"bit-service\",\"rule\":[{\"regexps\":{\"body\":[\"bit-xxzs\",\"xmlpzs/webissue.asp\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"bitkeeper\",\"rule\":[{\"regexps\":{\"header\":[\"bkhttp\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"bitweaver\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"bitweaver\",\"href=\\\"http://www.bitweaver.org\\\"\\u003ePowered by\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"blackboard\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1593651747\"]},\"regexps\":{\"header\":[\"X-Blackboard-Appserver\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"blackjumbodog\",\"rule\":[{\"regexps\":{\"header\":[\"BlackJumboDog\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"blazix\",\"rule\":[{\"regexps\":{\"header\":[\"Blazix Java Server\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"blockdos\",\"rule\":[{\"regexps\":{\"header\":[\"BlockDos.net\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"blogengine_net\",\"rule\":[{\"regexps\":{\"body\":[\"pics/blogengine.ico\",\"http://www.dotnetblogengine.net\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"blognplus\",\"rule\":[{\"regexps\":{\"body\":[\"href=\\\"http://www.blogn.org\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"blog_fc2\",\"rule\":[{\"regexps\":{\"header\":[\"cookietest=test\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"bluedragon\",\"rule\":[{\"regexps\":{\"header\":[\"BlueDragon\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"bluenet-video\",\"rule\":[{\"regexps\":{\"body\":[\"/cgi-bin/client_execute.cgi?tUD=0\",\"BlueNet Video Viewer Version\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"blueonyx\",\"rule\":[{\"regexps\":{\"body\":[\"Login - BlueOnyx\",\"Thank you for using the BlueOnyx\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"bluequartz\",\"rule\":[{\"regexps\":{\"body\":[\"VALUE=\\\"Copyright (C) 2000, Cobalt Networks\",\"Login - BlueQuartz\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"bm-classifieds\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003c!-- START HEADER TABLE - HOLDS GRAPHIC AND SITE NAME --\\u003e\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"bmc-remedy\",\"rule\":[{\"regexps\":{\"body\":[\"Remedy Mid Tier\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"boastmachine\",\"rule\":[{\"regexps\":{\"body\":[\"powered by boastMachine\",\"Powered by \\u003ca href=\\\"http://boastology.com\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"bobo\",\"rule\":[{\"regexps\":{\"header\":[\"x-ksscommands\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"bomgar\",\"rule\":[{\"regexps\":{\"body\":[\"alt=\\\"Remote Support by BOMGAR\",\"\\u003ca href=\\\"http://www.bomgar.com/products\\\" class=\\\"inverse\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"boonex-dolphin\",\"rule\":[{\"regexps\":{\"body\":[\"products/dolphin\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"bosclassifieds\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by \\u003ca href=\\\"http://www.bosdev.com\",\"content=\\\"BosClassifieds\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"brewblogger\",\"rule\":[{\"regexps\":{\"body\":[\"developed by \\u003ca href=\\\"http://www.zkdigital.com\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"broadwin-webaccess\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003c!-- #BeginTemplate \\\"/Templates/bw_templete1.dwt\\\" --\\u003e\"],\"header\":[\"/broadWeb/bwRoot.asp?username=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"brother-fax\",\"rule\":[{\"regexps\":{\"body\":[\"Brother MFC\"],\"header\":[\"debut\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"brother-printer\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cFRAME SRC=\\\"/printer/inc_head.html\",\"\\u003cIMG src=\\\"/common/image/HL4040CN\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"buddy-zone\",\"rule\":[{\"regexps\":{\"body\":[\"www.vastal.com\",\"\\u003eBuddy Zone\\u003c/a\\u003e\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"bugfree\",\"rule\":[{\"regexps\":{\"body\":[\"BugFree\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"bugtracker.net\",\"rule\":[{\"regexps\":{\"body\":[\"href=\\\"btnet.css\",\"valign=middle\\u003e\\u003ca href=http://ifdefined.com/bugtrackernet.html\\u003e\",\"\\u003cdiv class=logo\\u003eBugTracker.NET\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"bugzilla\",\"rule\":[{\"regexps\":{\"body\":[\"enter_bug.cgi\",\"/cgi-bin/bugzilla/\",\"Bugzilla Main Page\"],\"header\":[\"Bugzilla_login_request_cookie\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"bulletlink-newspaper-template\",\"rule\":[{\"regexps\":{\"body\":[\"/ModalPopup/core-modalpopup.css\",\"powered by bulletlink\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"burning-board-lite\",\"rule\":[{\"regexps\":{\"body\":[\"www.woltlab.de\",\"Powered by \\u003cb\\u003eBurning Board\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"buscape\",\"rule\":[{\"regexps\":{\"header\":[\"sessao3\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ca-siteminder\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003c!-- SiteMinder Encoding\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cachelogic-expired-domains-script\",\"rule\":[{\"regexps\":{\"body\":[\"href=\\\"http://cachelogic.net\\\"\\u003eCachelogic.net\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cacti\",\"rule\":[{\"regexps\":{\"body\":[\"Login to Cacti\",\"/plugins/jqueryskin/include/login.css\"],\"header\":[\"Set-Cookie: Cacti=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cactiez\",\"rule\":[{\"regexps\":{\"header\":[\"Cactiez\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cactushop\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cselect name=\\\"numCurrencyID\",\"\\u003c!-- CactuShop\"],\"header\":[\"CactuShop\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cafeengine\",\"rule\":[{\"regexps\":{\"body\":[\"/CafeEngine/style.css\",\"\\u003ca href=http://cafeengine.com\\u003eCafeEngine.com\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cakephp\",\"rule\":[{\"regexps\":{\"header\":[\"CAKEPHP\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"calendarscript\",\"rule\":[{\"regexps\":{\"body\":[\"Calendar Administration : Login\",\"CalendarScript.com\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"calypso-ion-8r-device\",\"rule\":[{\"regexps\":{\"body\":[\"Calypso ION-8r Device\",\"/A/cfg/entercmd.stm\"],\"header\":[\"Calypso ION8r Device\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cameralife\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Camera Life\",\"This site is powered by Camera Life\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"campsite\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Campsite\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"canon-printer\",\"rule\":[{\"regexps\":{\"header\":[\"Canon Http Server\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"capexweb\",\"rule\":[{\"regexps\":{\"body\":[\"/capexweb.parentvalidatepassword\",\"name=\\\"dfparentdb\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"car-portal\",\"rule\":[{\"regexps\":{\"body\":[\"netartmedia.net/carsportal\",\"class=\\\"bodyfontwhite\\\"\\u003e\\u003cstrong\\u003e\\u0026nbsp;Car Script\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"carel-data-server\",\"rule\":[{\"regexps\":{\"body\":[\"src=\\\"/MPwebCoreFn.js\"],\"header\":[\"CarelDataServer\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"carrier-ccnweb\",\"rule\":[{\"regexps\":{\"body\":[\"/images/CCNWeb.gif\",\"\\u003cAPPLET CODE=\\\"JLogin.class\\\" ARCHIVE=\\\"JLogin.jar\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cart_engine\",\"rule\":[{\"regexps\":{\"body\":[\"skins/_common/jscripts.css\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"casino\",\"rule\":[{\"regexps\":{\"body\":[\"rbcas.com\",\"CASino\",\"casino_and_overrides.css\"],\"header\":[\"_my-casino_session\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"castor\",\"rule\":[{\"regexps\":{\"header\":[\"CAStor\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"caudium\",\"rule\":[{\"regexps\":{\"header\":[\"X-Got-Fish: Pike\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cauposhop-classic\",\"rule\":[{\"regexps\":{\"body\":[\"Caupo\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ccproxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: CCProxy\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cc客服\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cscript src=\\\"http://kefu.qycn.com/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cdr-stats\",\"rule\":[{\"regexps\":{\"body\":[\"CDR-Stats | Customer Interface\",\"/static/cdr-stats/js/jquery\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cemis\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cdiv id=\\\"demo\\\" style=\\\"overflow:hidden\",\"综合项目管理系统登录\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"censura\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by: \\u003ca href=\\\"http://www.censura.info\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"centos\",\"rule\":[{\"regexps\":{\"header\":[\"centos\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"centreon\",\"rule\":[{\"regexps\":{\"body\":[\"Generator\\\" content=\\\"Centreon - Copyright\",\"Centreon - IT \\u0026 Network Monitoring\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cerberus-helpdesk\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003c!-- If you have your own stylesheet for HTML elements, you can remove the cerberus-html.css link\"],\"header\":[\"CerberusPublicGUI\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cern\",\"rule\":[{\"regexps\":{\"header\":[\"CERN\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cf-image-hosting-script\",\"rule\":[{\"regexps\":{\"body\":[\"codefuture.co.uk/projects/imagehost/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cgiproxy\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ca href=\\\"http://www.jmarshall.com/tools/cgiproxy/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cgi:irc\",\"rule\":[{\"regexps\":{\"body\":[\"CGI:IRC Login\",\"\\u003c!-- This is part of CGI:IRC\",\"\\u003csmall id=\\\"ietest\\\"\\u003e\\u003ca href=\\\"http://cgiirc.org/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"chamilo\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003clink href=\\\"http://www.chamilo.org/documentation.php\",\"content=\\\"Chamilo\"],\"header\":[\"X-Powered-By: Chamilo\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"chance-i-divis-dvr\",\"rule\":[{\"regexps\":{\"header\":[\"Techno Vision Security System Ver\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"check-point-ssl-network-extender\",\"rule\":[{\"regexps\":{\"header\":[\"Check Point SVN foundation\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cherokee\",\"rule\":[{\"regexps\":{\"header\":[\"Cherokee\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"chiliproject\",\"rule\":[{\"regexps\":{\"body\":[\"chiliproject.org\",\"content=\\\"ChiliProject\"],\"header\":[\"_chiliproject_session=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"chillycms\",\"rule\":[{\"regexps\":{\"body\":[\"FrozenPepper.de\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"chromelogger\",\"rule\":[{\"regexps\":{\"header\":[\"X-Chromelogger-Data\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cimplicity-webview\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cAPPLET NAME=\\\"ProwlerClientAppletObject\\\" ARCHIVE=\\\"/ProwlerClient.jar\"],\"header\":[\"CIMPLICITY-HttpSvr\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cinvoice\",\"rule\":[{\"regexps\":{\"body\":[\"forperfect.com/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cituscms\",\"rule\":[{\"regexps\":{\"body\":[\"CitusCMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cl-http\",\"rule\":[{\"regexps\":{\"header\":[\"CL-HTTP\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"clansphere\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"ClanSphere\",\"index.php?mod=clansphere\\u0026amp;action=about\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"claroline\",\"rule\":[{\"regexps\":{\"body\":[\"target=\\\"_blank\\\"\\u003eClaroline\\u003c/a\\u003e\",\"http://www.claroline.net\\\" rel=\\\"Copyright\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"clearwell-e-discovery\",\"rule\":[{\"regexps\":{\"body\":[\"Clearwell E-Discovery Platform log in\"],\"header\":[\"Clearwell\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"clicktale\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cdiv id=\\\"ClickTaleDiv\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"clicky\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cscript src=\\\"//static.getclicky.com/js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"clientexec\",\"rule\":[{\"regexps\":{\"body\":[\"Powered By ClientExec\"],\"header\":[\"CLIENTEXEC=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"clipbucket\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"ClipBucket\",\"\\u003c!-- ClipBucket\",\"\\u003c!-- Forged by ClipBucket\",\"href=\\\"http://clip-bucket.com/\\\"\\u003eClipBucket\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"clipshare\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003c!--!!!!!!!!!!!!!!!!!!!!!!!!! Processing SCRIPT\",\"Powered By \\u003ca href=\\\"http://www.clip-share.com\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cloudflare\",\"rule\":[{\"regexps\":{\"header\":[\"cloudflare-nginx\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cnzz\",\"rule\":[{\"regexps\":{\"body\":[\"cnzz.com/stat.php?id=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"codesys-web-visualization\",\"rule\":[{\"regexps\":{\"body\":[\"CoDeSys WebVisualization\"],\"header\":[\"WAGO_Webs\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cogent-datahub\",\"rule\":[{\"regexps\":{\"body\":[\"/images/Cogent.gif\",\"Cogent DataHub WebView\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"coldfusion\",\"rule\":[{\"regexps\":{\"body\":[\"/cfajax/\",\"ColdFusion.Ajax\"],\"header\":[\"CFTOKEN\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"collabtive\",\"rule\":[{\"regexps\":{\"body\":[\"Login @ Collabtive\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"comanche\",\"rule\":[{\"regexps\":{\"header\":[\"Comanche\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"comcast_business\",\"rule\":[{\"regexps\":{\"body\":[\"cmn/css/common-min.css\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"comcast_business_gateway\",\"rule\":[{\"regexps\":{\"body\":[\"Comcast Business Gateway\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"comersuscart\",\"rule\":[{\"regexps\":{\"body\":[\"CONTENT=\\\"Powered by Comersus\",\"href=\\\"comersus_showCart.asp\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"commerce-builder\",\"rule\":[{\"regexps\":{\"header\":[\"Commerce-Builder\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"commonspot\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"CommonSpot\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"communigate-pro\",\"rule\":[{\"regexps\":{\"header\":[\"CommuniGatePro\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"communique\",\"rule\":[{\"regexps\":{\"header\":[\"Communique\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"concrete5\",\"rule\":[{\"regexps\":{\"body\":[\"generator\\\" content=\\\"ezCMS\",\"CCM_DISPATCHER_FILENAME\"],\"header\":[\"CONCRETE5\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"conexant-emweb\",\"rule\":[{\"regexps\":{\"header\":[\"Virata-EmWeb\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"connectups-x\",\"rule\":[{\"regexps\":{\"body\":[\"UPS Firmware version\"],\"header\":[\"UPS_Server/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"contao\",\"rule\":[{\"regexps\":{\"body\":[\"system/contao.css\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"content-security-policy\",\"rule\":[{\"regexps\":{\"header\":[\"x-webkit-csp\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"contentteller-cms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Esselbach Contentteller CMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"contentxxl\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"contentXXL\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"contrexx-cms\",\"rule\":[{\"regexps\":{\"body\":[\"powered by Contrexx\",\"content=\\\"Contrexx\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cowiki\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"coWiki\",\"\\u003c!-- Generated by coWiki\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"coyotepoint-load-balancer\",\"rule\":[{\"regexps\":{\"header\":[\"CoyotePoint\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cpanel\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1993518473\"]},\"regexps\":{\"header\":[\"cprelogin:\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cpanel.svg\",\"rule\":[{\"regexps\":{\"body\":[\"powered_by_cpanel.svg\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cpassman\",\"rule\":[{\"regexps\":{\"body\":[\"Collaborative Passwords Manager\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"createlive-cms\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003c!--By CreateLiveCms\"],\"header\":[\"AspooKill=kill=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"crushftp\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1022206565\"]},\"regexps\":{\"body\":[\"CrushFTP WebInterface\"],\"header\":[\"Server: CrushFTP HTTP Server\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cruxcms\",\"rule\":[{\"regexps\":{\"body\":[\"Created by CruxCMS\",\"title=\\\"CruxCMS\\\" class=\\\"blank\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cscssm\",\"rule\":[{\"regexps\":{\"header\":[\"CSCSSM\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"css tools: reset css\",\"rule\":[{\"regexps\":{\"body\":[\"css/skel-noscript.css\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cups\",\"rule\":[{\"regexps\":{\"header\":[\"CUPS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cushycms\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by CushyCMS\"],\"header\":[\"_cushy_session\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"custom-cms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"CustomCMS\",\"title=\\\"Powered by CCMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cuumall\",\"rule\":[{\"regexps\":{\"body\":[\"Power by CuuMall\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cybozu-garoon\",\"rule\":[{\"regexps\":{\"header\":[\"Cybozu-WS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cyn_in\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"cyn.in\",\"Powered by cyn.in\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dadabik\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"DaDaBIK\",\"class=\\\"powered_by_dadabik\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"daffodil-crm\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by Daffodil\",\"Design \\u0026 Development by Daffodil Software Ltd\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"daisy\",\"rule\":[{\"regexps\":{\"header\":[\"x-daisy-version\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"darkstat\",\"rule\":[{\"regexps\":{\"header\":[\"darkstat\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dart-webserver-tool\",\"rule\":[{\"regexps\":{\"header\":[\"Dart WebServer Tool\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dasannetworks\",\"rule\":[{\"regexps\":{\"body\":[\"clear_cookie(\\\"login\\\");\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"data-ontap\",\"rule\":[{\"regexps\":{\"header\":[\"Data ONTAP\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dataflexvine-voip-iad\",\"rule\":[{\"regexps\":{\"header\":[\"DataflexViNE-Webserver\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"datalife-engine\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"DataLife Engine\"],\"header\":[\"dle_\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"datum-tymserve\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cH2 ALIGN=CENTER\\u003eDatum TymServe\"],\"header\":[\"DATM\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"david-webbox\",\"rule\":[{\"regexps\":{\"header\":[\"David-WebBox\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dayrui系列产品\",\"rule\":[{\"regexps\":{\"body\":[\"dayrui/statics\"],\"header\":[\"dr_ci_session\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dbhcms\",\"rule\":[{\"regexps\":{\"body\":[\"powered by DBHcms\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dbshop\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"dbshop\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dd-wrt\",\"rule\":[{\"regexps\":{\"body\":[\"style/pwc/ddwrt.css\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"debian\",\"rule\":[{\"regexps\":{\"header\":[\"Debian\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dedicated-micros-device\",\"rule\":[{\"regexps\":{\"header\":[\"ADH-Web\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"delegate\",\"rule\":[{\"regexps\":{\"header\":[\"DeleGate\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dell openmanage switch administrator\",\"rule\":[{\"regexps\":{\"body\":[\"Dell OpenManage Switch Administrator\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dell remote access device\",\"rule\":[{\"regexps\":{\"header\":[\"RAC_ONE_HTTP \"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dell-kace-appliance\",\"rule\":[{\"regexps\":{\"header\":[\"x-dellkace-\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dell-printer\",\"rule\":[{\"regexps\":{\"body\":[\"Dell Laser Printer\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dell-remote-access-controller\",\"rule\":[{\"regexps\":{\"body\":[\"/cgi-bin/webcgi/ssologin\"],\"header\":[\"RAC_ONE_HTTP\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"deluge-web\",\"rule\":[{\"regexps\":{\"body\":[\"Deluge: Web UI\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"deluxebb\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"powered by DeluxeBB\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"destoon\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"generator\\\" content=\\\"Destoon\",\"destoon_moduleid\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dht_802.11n_router\",\"rule\":[{\"regexps\":{\"body\":[\"DHT 802.11n QoS Router\"],\"header\":[\"mini_httpd\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"di-804hv\",\"rule\":[{\"regexps\":{\"header\":[\"DI-804HV\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"diaspora\",\"rule\":[{\"regexps\":{\"header\":[\"x-git-revision\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dibos\",\"rule\":[{\"regexps\":{\"body\":[\"DiBos - Login\",\"style/bovisnt.css\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"diferior\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by Diferior\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dircms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"DirCMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"direct-packet-device\",\"rule\":[{\"regexps\":{\"header\":[\"DPWebServer\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"directadmin\",\"rule\":[{\"regexps\":{\"body\":[\"DirectAdmin Login\"],\"header\":[\"DirectAdmin Daemon\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"disqus\",\"rule\":[{\"regexps\":{\"body\":[\"disqus_thread\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"diywap\",\"rule\":[{\"regexps\":{\"body\":[\"web980\",\"bannerNum\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"django\",\"rule\":[{\"regexps\":{\"body\":[\"__admin_media_prefix__\",\"csrfmiddlewaretoken\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dli-lpc\",\"rule\":[{\"regexps\":{\"header\":[\"DLILPC=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dlink\",\"rule\":[{\"regexps\":{\"header\":[\"dlinkrouter\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dlink_dsl_320b\",\"rule\":[{\"regexps\":{\"header\":[\"DSL-320B\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dmxready-portfolio-manager\",\"rule\":[{\"regexps\":{\"body\":[\"/css/PortfolioManager/styles_display_page.css\",\"rememberme_portfoliomanager\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dnnoutputcache\",\"rule\":[{\"regexps\":{\"header\":[\"Dnnoutputcache\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dnp firewall\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by DnP Firewall\",\"dnp_firewall_redirect\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dnp-firewall\",\"rule\":[{\"regexps\":{\"body\":[\"Forum Gateway - Powered by DnP Firewall\",\"name=\\\"dnp_firewall_redirect\",\"\\u003cform name=dnp_firewall\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"doccms\",\"rule\":[{\"regexps\":{\"body\":[\"Power by DocCms\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"docebolms\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by Docebo\"],\"header\":[\"docebo_session=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dokeos\",\"rule\":[{\"regexps\":{\"body\":[\"href=\\\"http://www.dokeos.com\\\" rel=\\\"Copyright\",\"content=\\\"Dokeos\",\"name=\\\"Generator\\\" content=\\\"Dokeos\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dokuwiki\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-630493013\"]},\"regexps\":{\"body\":[\"powered by DokuWiki\",\"content=\\\"DokuWiki\",\"\\u003cdiv id=\\\"dokuwiki\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dolibarr\",\"rule\":[{\"regexps\":{\"body\":[\"Dolibarr Development Team\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dolphin\",\"rule\":[{\"regexps\":{\"body\":[\"bx_css_async\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"donations-cloud\",\"rule\":[{\"regexps\":{\"body\":[\"/donationscloud.css\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dorado\",\"rule\":[{\"regexps\":{\"body\":[\"Dorado Login Page\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dorg\",\"rule\":[{\"regexps\":{\"body\":[\"DORG - \",\"CONTENT=\\\"DORG\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dota-openstats\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"dota OpenStats\",\"content=\\\"openstats.iz.rs\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dotclear\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by \\u003ca href=\\\"http://dotclear.org/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dotcms\",\"rule\":[{\"regexps\":{\"body\":[\"/dotAsset/\",\"/index.dot\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dotdefender\",\"rule\":[{\"regexps\":{\"header\":[\"X-Dotdefender-Denied\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dotnetnuke\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"DotNetNuke\",\"content=\\\",DotNetNuke\"],\"header\":[\"Dnnoutputcache\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"doubleclick_ad\",\"rule\":[{\"regexps\":{\"body\":[\"ad.doubleclick.net\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"douphp\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by DouPHP\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dr-web-anti-virus\",\"rule\":[{\"regexps\":{\"body\":[\"/avdesk/includes/system/templates/images/logo_en.png\"],\"header\":[\"DRWEB_PERSONAL_OFFICE=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dradis-framework\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cp class=\\\"copyright\\\"\\u003eDradis\"],\"header\":[\"_dradis_session=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dreambox (tv reciever)\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"dreambox\\\"\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dreambox\",\"rule\":[{\"regexps\":{\"header\":[\"dreambox\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"drugpak\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by DrugPak\",\"/dplimg/DPSTYLE.CSS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"drupal\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1174841451\",\"-167656799\"]},\"regexps\":{\"body\":[\"content=\\\"Drupal\",\"jQuery.extend(Drupal.settings\",\"/sites/default/files/\",\"/sites/all/modules/\",\"/sites/all/themes/\"],\"header\":[\"X-Generator: Drupal\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dspace\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"DSpace\",\"\\u003ca href=\\\"http://www.dspace.org\\\"\\u003eDSpace Software\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dswjcms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Dswjcms\",\"Powered by Dswjcms\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dt-centrepiece\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"DT Centrepiece\",\"Powered By DT Centrepiece\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dtcms\",\"rule\":[{\"regexps\":{\"body\":[\"dtcms\",\"content=\\\"动力启航,DTCMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dublincore\",\"rule\":[{\"regexps\":{\"body\":[\"name=\\\"DC.title\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"duclassified\",\"rule\":[{\"regexps\":{\"body\":[\"assets/DUclassified.css\",\"DUclassified\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dugallery\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by DUportal\",\"DUgallery\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"duomicms\",\"rule\":[{\"regexps\":{\"body\":[\"DuomiCms\",\"Power by DuomiCms\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dv-cart\",\"rule\":[{\"regexps\":{\"body\":[\"class=\\\"KT_tngtable\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dvr camera\",\"rule\":[{\"regexps\":{\"body\":[\"DVR WebClient\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dvr-webclient\",\"rule\":[{\"regexps\":{\"body\":[\"259F9FDF-97EA-4C59-B957-5160CAB6884E\",\"DVR-WebClient\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dvwa\",\"rule\":[{\"regexps\":{\"body\":[\"Damn Vulnerable Web App (DVWA) - Login\",\"dvwa/css/login.css\",\"dvwa/images/login_logo.png\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dwr\",\"rule\":[{\"regexps\":{\"body\":[\"/dwr/engine.js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dxsock\",\"rule\":[{\"regexps\":{\"header\":[\"RemObjects\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dynaweb-httpd\",\"rule\":[{\"regexps\":{\"header\":[\"dwhttpd\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dzcp\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003c!--[ DZCP\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"e-junkie\",\"rule\":[{\"regexps\":{\"body\":[\"function EJEJC_lc\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"e-manage-myschool\",\"rule\":[{\"regexps\":{\"body\":[\"E-Manage All Rights Reserved MySchool Version\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"e-office\",\"rule\":[{\"regexps\":{\"body\":[\"/general/login/view//images/updateLoad.gif\"],\"header\":[\"general/login/index.php\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"e-tiller\",\"rule\":[{\"regexps\":{\"body\":[\"reader/view_abstract.aspx\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"e-xoopport\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by E-Xoopport\",\"content=\\\"E-Xoopport\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"eadmin\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"eAdmin\",\"eadmin\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"eagleeyescctv\",\"rule\":[{\"regexps\":{\"body\":[\"IP Surveillance for Your Life\",\"/nobody/loginDevice.js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"earlyimpact-productcart\",\"rule\":[{\"regexps\":{\"body\":[\"fpassword.asp?redirectUrl=\\u0026frURL=Custva.asp\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"eaststorecreeator\",\"rule\":[{\"regexps\":{\"header\":[\"easystorecreator1\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"easy-file-sharing-web-server\",\"rule\":[{\"regexps\":{\"header\":[\"Easy File Sharing Web Server\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"easyconsole-cms\",\"rule\":[{\"regexps\":{\"body\":[\"easyconsole\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"easylink-web-solutions\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"easyLink\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"easypanel\",\"rule\":[{\"regexps\":{\"body\":[\"/vhost/view/default/style/login.css\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"easytrace(botwave)\",\"rule\":[{\"regexps\":{\"body\":[\"EasyTrace\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"easywebcms\",\"rule\":[{\"regexps\":{\"header\":[\"Easyweb CMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"eazycms\",\"rule\":[{\"regexps\":{\"body\":[\"powered by eazyCMS\",\"\\u003ca class=\\\"actionlink\\\" href=\\\"http://www.eazyCMS.com\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ebuilding-network-controller\",\"rule\":[{\"regexps\":{\"body\":[\"eBuilding Web\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"echo\",\"rule\":[{\"regexps\":{\"body\":[\"powered by echo\",\"/Echo2/echoweb/login\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ecmall\",\"rule\":[{\"regexps\":{\"body\":[\"ECMall\"],\"header\":[\"ECM_ID\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ecomat-cms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"ECOMAT CMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ecor\",\"rule\":[{\"regexps\":{\"header\":[\"ECOR264\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ecshop\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by ECShop\",\"content=\\\"ECSHOP\",\"/api/cron.php\"],\"header\":[\"ECS_ID\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ecwapoa\",\"rule\":[{\"regexps\":{\"body\":[\"ecwapoa\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ec_cart\",\"rule\":[{\"regexps\":{\"header\":[\"ec_cart_id\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"edgeprism\",\"rule\":[{\"regexps\":{\"header\":[\"EdgePrismSSL\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"edimax\",\"rule\":[{\"regexps\":{\"body\":[\"EDIMAX Technology\",\"content=\\\"Edimax\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"edirectory\",\"rule\":[{\"regexps\":{\"body\":[\"target=\\\"_blank\\\"\\u003eeDirectory\\u0026trade\",\"Powered by \\u003ca href=\\\"http://www.edirectory.com\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"edito-cms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"edito\",\"title=\\\"CMS\\\" href=\\\"http://www.edito.pl/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"edk\",\"rule\":[{\"regexps\":{\"body\":[\"/killlistable.tpl\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"edmwebvideo\",\"rule\":[{\"regexps\":{\"body\":[\"EdmWebVideo\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"edusoho开源网络课堂\",\"rule\":[{\"regexps\":{\"body\":[\"edusoho\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"edvr\",\"rule\":[{\"regexps\":{\"body\":[\"edvs/edvr\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"efront\",\"rule\":[{\"regexps\":{\"body\":[\"efrontlearning.net\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"egroupware\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"eGroupWare\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ektron-cms\",\"rule\":[{\"regexps\":{\"body\":[\"/java/ektron.js\"],\"header\":[\"EktGUID=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"eleanorcms\",\"rule\":[{\"regexps\":{\"header\":[\"Eleanor CMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"electro-industries-gaugetech\",\"rule\":[{\"regexps\":{\"header\":[\"EIG Embedded Web Server\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"elite-gaming-ladders\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by Elite\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"elitius\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"eLitius\",\"target=\\\"_blank\\\" title=\\\"Affiliate\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"elxis-cms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Elxis\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"emc-documentum-webtop\",\"rule\":[{\"regexps\":{\"body\":[\"/webtop/index.js\",\"/webtop/webtop/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"emeeting-online-dating-software\",\"rule\":[{\"regexps\":{\"body\":[\"eMeeting Dating Software\",\"/_eMeetingGlobals.js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"emlog\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"emlog\\\"\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ems-entry-com\",\"rule\":[{\"regexps\":{\"header\":[\"ZENT5\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"enableq\",\"rule\":[{\"regexps\":{\"body\":[\"/enableq.css\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"energine\",\"rule\":[{\"regexps\":{\"body\":[\"energine\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"enhydra-application-server\",\"rule\":[{\"regexps\":{\"header\":[\"Enhydra\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"enigma2\",\"rule\":[{\"regexps\":{\"body\":[\"href=\\\"/web/movielist.rss?tag\",\"Enigma2 WebControl\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"entercrm\",\"rule\":[{\"regexps\":{\"body\":[\"EnterCRM\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"entrans\",\"rule\":[{\"regexps\":{\"body\":[\"Entrans\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"envision\",\"rule\":[{\"regexps\":{\"header\":[\"Content Interface Corp - enVision\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"episerver\",\"rule\":[{\"regexps\":{\"body\":[\"EPiServer\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"epiware\",\"rule\":[{\"regexps\":{\"body\":[\"Epiware\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"epson printer\",\"rule\":[{\"regexps\":{\"body\":[\"EpsonNet\"],\"header\":[\"EPSON-HTTP\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"epson打印机\",\"rule\":[{\"regexps\":{\"header\":[\"EPSON-HTTP\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ericsson-tv-web-server\",\"rule\":[{\"regexps\":{\"header\":[\"Ericsson Television Web server\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"escenic\",\"rule\":[{\"regexps\":{\"body\":[\"Escenic\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"eserv\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Eserv\"],\"header\":[\"Eserv\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"esitesbuilder\",\"rule\":[{\"regexps\":{\"body\":[\"eSitesBuilder. All rights reserved\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"esotalk\",\"rule\":[{\"regexps\":{\"body\":[\"generated by esoTalk\",\"Powered by esoTalk\",\"/js/esotalk.js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"espcms\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by ESPCMS\",\"Powered by ESPCMS\",\"infolist_fff\",\"/templates/default/style/tempates_div.css\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"esvon-classifieds\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by Esvon\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"esyndicat\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"eSyndiCat\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"etano\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by \\u003ca href=\\\"http://www.datemill.com\",\"Etano\\u003c/a\\u003e. All Rights Reserved.\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ethproxy\",\"rule\":[{\"regexps\":{\"header\":[\"ethProxy\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"eticket\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by eTicket\",\"\\u003ca href=\\\"http://www.eticketsupport.com\\\" target=\\\"_blank\\\"\\u003e\",\"/eticket/eticket.css\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"euse_study\",\"rule\":[{\"regexps\":{\"body\":[\"UserInfo/UserFP.aspx\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"evercookie\",\"rule\":[{\"regexps\":{\"body\":[\"evercookie.js\",\"var ec = new evercookie();\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"everfocus-cctv\",\"rule\":[{\"regexps\":{\"header\":[\"http server/everfocus\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"everything\",\"rule\":[{\"regexps\":{\"body\":[\"Everything.gif\",\"everything.png\",\"Everything\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"evo-cam\",\"rule\":[{\"regexps\":{\"body\":[\"value=\\\"evocam.jar\",\"\\u003capplet archive=\\\"evocam.jar\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ewebeditor\",\"rule\":[{\"regexps\":{\"body\":[\"/ewebeditor.htm?\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"exponent-cms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Exponent Content Management System\",\"Powered by Exponent CMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"expressionengine\",\"rule\":[{\"regexps\":{\"body\":[\"exp_tracker\"],\"header\":[\"exp_last_activity\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"extplorer\",\"rule\":[{\"regexps\":{\"body\":[\"Login - eXtplorer\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"extremeware\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cframe src=\\\"extremetop\"],\"header\":[\"ExtremeWare\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ez-publish\",\"rule\":[{\"regexps\":{\"body\":[\"eZ publish administration\"],\"header\":[\"eZSessionCookie\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ezcms\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by EZCMS\",\"EZCMS Content Management System\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"f3site\",\"rule\":[{\"regexps\":{\"body\":[\"compmaster.prv.pl\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"facebook_insights\",\"rule\":[{\"regexps\":{\"body\":[\"fb:app_id\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"falcon-web-server\",\"rule\":[{\"regexps\":{\"header\":[\"Falcon Web Server\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"fancybox\",\"rule\":[{\"regexps\":{\"body\":[\"jquery.fancybox.js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"fastpublish-cms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"fastpublish\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"fat-freeframework\",\"rule\":[{\"regexps\":{\"header\":[\"Fat-Free Framework\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"fatwire-content-server\",\"rule\":[{\"regexps\":{\"header\":[\"FutureTenseContentServer\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"fcms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Ryan Haudenschilt\",\"Powered by Family Connections\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"fedora\",\"rule\":[{\"regexps\":{\"header\":[\"Fedora\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"fengcms\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by FengCms\",\"content=\\\"FengCms\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"festos\",\"rule\":[{\"regexps\":{\"body\":[\"title=\\\"FestOS\",\"css/festos.css\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"fex\",\"rule\":[{\"regexps\":{\"body\":[\"HREF=\\\"mailto:fexmaster@ostc.de\"],\"header\":[\"fexsrv\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"fidion-cms\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003c!-- fCMS-Template head.tpl begins\"],\"header\":[\"fCMS=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"file-upload-manager\",\"rule\":[{\"regexps\":{\"body\":[\"File Upload Manager\",\"\\u003cIMG SRC=\\\"/images/header.jpg\\\" ALT=\\\"File Upload Manager\\\"\\u003e\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"filemakerpro\",\"rule\":[{\"regexps\":{\"header\":[\"FileMakerPro\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"filenice\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"the fantabulous mechanical eviltwin code machine\",\"fileNice/fileNice.js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"filevista\",\"rule\":[{\"regexps\":{\"body\":[\"Welcome to FileVista\",\"\\u003ca href=\\\"http://www.gleamtech.com/products/filevista/web-file-manager\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"fireeye\",\"rule\":[{\"favicon\":{\"mmh3\":[\"95271369\",\"105083909\",\"240606739\",\"1476335317\",\"2121539357\",\"-842192932\"]},\"regexps\":{\"body\":[\"mobsc\",\"FireEye\"],\"header\":[\"fireeye\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"firefox-spdy\",\"rule\":[{\"regexps\":{\"header\":[\"X-Firefox-Spdy\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"firephp\",\"rule\":[{\"regexps\":{\"header\":[\"meta.wildfirehq.org\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"fisheye\",\"rule\":[{\"regexps\":{\"body\":[\"fisheye-16.ico\"],\"header\":[\"Set-Cookie: FESESSIONID\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"fitelnet-router\",\"rule\":[{\"regexps\":{\"body\":[\"FITELnet-\"],\"header\":[\"GR-HTTPD Server\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"fizmez-web-server\",\"rule\":[{\"regexps\":{\"header\":[\"Fizmez\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"flow_framework\",\"rule\":[{\"regexps\":{\"header\":[\"FLOW/FRAMEWORK\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"fluentnet\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Fluent\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"fluid-dynamics-search-engine\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"fluid dynamics\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"fluxbb\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by \\u003ca href=\\\"http://fluxbb.org/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"flyspray\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by Flyspray\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"fnord\",\"rule\":[{\"regexps\":{\"header\":[\"fnord\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"foosun\",\"rule\":[{\"regexps\":{\"body\":[\"Created by DotNetCMS\",\"For Foosun\",\"Powered by www.Foosun.net,Products:Foosun Content Manage system\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"footprint\",\"rule\":[{\"regexps\":{\"header\":[\"Footprint\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"forest-blog\",\"rule\":[{\"regexps\":{\"body\":[\"Forest Blog\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"fortiguard\",\"rule\":[{\"regexps\":{\"body\":[\"FortiGuard Web Filtering\",\"Web Filter Block Override\",\"/XX/YY/ZZ/CI/MGPGHGPGPFGHCDPFGGOGFGEH\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"fortiweb\",\"rule\":[{\"regexps\":{\"header\":[\"FortiWeb\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"fossil\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ca href=\\\"http://fossil-scm.org\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"foxi bizzz\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-Cms: FOXI BIZzz\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"foxphp\",\"rule\":[{\"regexps\":{\"body\":[\"FoxPHPScroll\",\"FoxPHP_ImList\",\"content=\\\"FoxPHP\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"foxycart\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cscript src=\\\"//cdn.foxycart.com\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"fpoll\",\"rule\":[{\"regexps\":{\"body\":[\"admincp/css.css\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"freakauth\",\"rule\":[{\"regexps\":{\"header\":[\"FreakAuth\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"freeboxos\",\"rule\":[{\"regexps\":{\"body\":[\"Freebox OS\",\"logo_freeboxos\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"freebsd\",\"rule\":[{\"regexps\":{\"header\":[\"FreeBSD\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"freejoomlas_com\",\"rule\":[{\"regexps\":{\"body\":[\"freejoomlas\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"freenas\",\"rule\":[{\"regexps\":{\"body\":[\"FreeNAS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"freepbx\",\"rule\":[{\"regexps\":{\"header\":[\"FreePBX\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"frogcms\",\"rule\":[{\"regexps\":{\"body\":[\"Frog CMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"frontpage-extensions\",\"rule\":[{\"regexps\":{\"header\":[\"FrontPage\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"frontpage-personal-web-server\",\"rule\":[{\"regexps\":{\"header\":[\"FPWS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"frontpageserverextension\",\"rule\":[{\"regexps\":{\"header\":[\"Microsoftofficewebserver\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"fudforum\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by: FUDforum\",\"/adm/admloginuser.php\"],\"header\":[\"fud_session_\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"fujitsu-infoprovider-pro\",\"rule\":[{\"regexps\":{\"header\":[\"Fujitsu-InfoProvider-Pro\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"funkwerk-gateway\",\"rule\":[{\"regexps\":{\"body\":[\"Funkwerk Gateway\"],\"header\":[\"Funkwerk BOSS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"fw300r\",\"rule\":[{\"regexps\":{\"header\":[\"FW300R\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"gae/google app engine/google frontend\",\"rule\":[{\"regexps\":{\"header\":[\"Server: GFE\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"gallarific\",\"rule\":[{\"regexps\":{\"body\":[\"Gallarific\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"gallery\",\"rule\":[{\"regexps\":{\"body\":[\"Gallery 3 Installer\",\"/gallery/images\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ganglia\",\"rule\":[{\"regexps\":{\"body\":[\"ganglia\"],\"header\":[\"gs=unspecified\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"gatequest-php-site-recommender\",\"rule\":[{\"regexps\":{\"body\":[\"GateQuest\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"gcards\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ca href=\\\"http://www.gregphoto.net/gcards/index.php\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"gearhost\",\"rule\":[{\"regexps\":{\"header\":[\"GearHost\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"geeklog\",\"rule\":[{\"regexps\":{\"body\":[\"Powered By \\u003ca href=\\\"http://www.geeklog.net/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"genieatm\",\"rule\":[{\"regexps\":{\"body\":[\"GenieATM\",\"Copyright© Genie Networks Ltd.\",\"defect 3531\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"genohm-scada\",\"rule\":[{\"regexps\":{\"body\":[\"GenOHM Scada Launcher\",\"/cgi-bin/scada-vis/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"gentoo linux\",\"rule\":[{\"regexps\":{\"header\":[\"Gentoo\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"geobytes-geoselect\",\"rule\":[{\"regexps\":{\"header\":[\"Geobytes-GeoSelect\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"geonode\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by \\u003ca href=\\\"http://geonode.org\",\"href=\\\"/catalogue/opensearch\\\" title=\\\"GeoNode Search\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"geotrust_cert\",\"rule\":[{\"regexps\":{\"body\":[\"//smarticon.geotrust.com/si.js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"getsimple\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"GetSimple\",\"Powered by GetSimple\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"gitorious\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by Gitorious\"],\"header\":[\"_gitorious_sess\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"gitweb\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"gitweb\",\"/gitweb.css\",\"/gitweb.js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"glfusion\",\"rule\":[{\"regexps\":{\"body\":[\"by \\u003ca href=\\\"http://www.glfusion.org/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"globalsign_cert\",\"rule\":[{\"regexps\":{\"body\":[\"//seal.globalsign.com/SiteSeal\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"glossword\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Glossword\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"go-json-rest\",\"rule\":[{\"regexps\":{\"header\":[\"go-json-rest\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"goahead-webs\",\"rule\":[{\"regexps\":{\"header\":[\"GoAhead-Webs\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"goahead\",\"rule\":[{\"regexps\":{\"header\":[\"GoAhead\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"gordano-messaging-suite\",\"rule\":[{\"regexps\":{\"header\":[\"Gordano\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"goserve\",\"rule\":[{\"regexps\":{\"header\":[\"GoServe\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"gossamer-forum\",\"rule\":[{\"regexps\":{\"body\":[\"href=\\\"gforum.cgi?username=\",\"Gossamer Forum\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"gpsgate-server\",\"rule\":[{\"regexps\":{\"body\":[\"GpsGate Server - \"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"gpsweb\",\"rule\":[{\"regexps\":{\"body\":[\"GPSweb\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"grandstream-phone\",\"rule\":[{\"regexps\":{\"body\":[\"Grandstream Device Configuration\"],\"header\":[\"Grandstream\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"grandstream\",\"rule\":[{\"regexps\":{\"header\":[\"Grandstream\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"grandtec-x-guard\",\"rule\":[{\"regexps\":{\"header\":[\"WalkGuard\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"gridsite\",\"rule\":[{\"regexps\":{\"body\":[\"gridsite\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"group-office\",\"rule\":[{\"regexps\":{\"body\":[\"Group-Office\"],\"header\":[\"groupoffice=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"gse\",\"rule\":[{\"regexps\":{\"header\":[\"Server: GSE\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"gsoap\",\"rule\":[{\"regexps\":{\"header\":[\"gSOAP\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"gunicorn\",\"rule\":[{\"regexps\":{\"header\":[\"gunicorn\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"guppy\",\"rule\":[{\"regexps\":{\"body\":[\"GuppY\",\".freeguppy.org\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"gws (google web server)\",\"rule\":[{\"regexps\":{\"header\":[\"Server: gws\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"h3c msr\",\"rule\":[{\"regexps\":{\"body\":[\"wnm/ssl/web/frame/login.html\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"h3c-secblade-firewall\",\"rule\":[{\"regexps\":{\"body\":[\"js/MulPlatAPI.js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"h3c公司产品\",\"rule\":[{\"regexps\":{\"body\":[\"service@h3c.com\",\"H3C Corporation\",\"icg_helpScript.js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"h3c路由器\",\"rule\":[{\"regexps\":{\"body\":[\"Web user login\",\"nLanguageSupported\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"haproxy\",\"rule\":[{\"regexps\":{\"header\":[\"HAProxy Statistics\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"haproxy_report\",\"rule\":[{\"regexps\":{\"body\":[\"Statistics Report for HAProxy\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hdwiki\",\"rule\":[{\"regexps\":{\"body\":[\"powered by hdwiki!\",\"content=\\\"HDWiki\",\"http://kaiyuan.hudong.com?hf=hdwiki_copyright_kaiyuan\"],\"header\":[\"hd_sid=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"heitel-digital-video-device\",\"rule\":[{\"regexps\":{\"header\":[\"HeiTel GmbH Web Server\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hellobar\",\"rule\":[{\"regexps\":{\"body\":[\"hellobar.js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"help-desk-software\",\"rule\":[{\"regexps\":{\"body\":[\"target=\\\"_blank\\\"\\u003efreehelpdesk.org\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hesk\",\"rule\":[{\"regexps\":{\"body\":[\"hesk_javascript.js\",\"hesk_style.css\",\"hesk.com\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hfs\",\"rule\":[{\"favicon\":{\"mmh3\":[\"731374291\",\"2124459909\"]},\"regexps\":{\"header\":[\"HFS_SID_=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"highwire-press\",\"rule\":[{\"regexps\":{\"header\":[\"x-highwire-sessionid\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hikashop\",\"rule\":[{\"regexps\":{\"body\":[\"/media/com_hikashop/css/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hiki\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Hiki\",\"/hiki_base.css\",\"by \\u003ca href=\\\"http://hikiwiki.org/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hims酒店云计算服务\",\"rule\":[{\"regexps\":{\"body\":[\"GB_ROOT_DIR\",\"maincontent.css\",\"HIMS酒店云计算服务\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hishop\",\"rule\":[{\"regexps\":{\"body\":[\"hishop.plugins.openid\",\"Hishop development team\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"holocms\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by HoloCMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"home-control-box\",\"rule\":[{\"regexps\":{\"header\":[\"hcb_web\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"honeywell ip-camera\",\"rule\":[{\"regexps\":{\"body\":[\"Honeywell IP-Camera\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"honeywell netaxs\",\"rule\":[{\"regexps\":{\"body\":[\"Honeywell NetAXS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"horde-application-framework\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by Horde\",\"\\u003cimg src=\\\"/themes/default/graphics/horde-power1.png\"],\"header\":[\"horde_secret_key\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"horde\",\"rule\":[{\"regexps\":{\"body\":[\"IMP: Copyright 2001-2009 The Horde Project\"],\"header\":[\"Set-Cookie: Horde\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hostbill\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by \\u003ca href=\\\"http://hostbillapp.com\",\"\\u003cstrong\\u003eHostBill\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hotaru-cms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Hotaru\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hp-laserjet-printer\",\"rule\":[{\"regexps\":{\"body\":[\"HP Color LaserJet\",\"hp LaserJet\"],\"header\":[\"HP-ChaiSOE\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hp-officejet-printer\",\"rule\":[{\"regexps\":{\"body\":[\"HP Officejet\",\"align=\\\"center\\\"\\u003eHP Officejet\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hp-printer\",\"rule\":[{\"regexps\":{\"header\":[\"HP HTTP Server\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hp-procurve-switch\",\"rule\":[{\"regexps\":{\"body\":[\"ProCurve Switch\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hp-sitescope\",\"rule\":[{\"regexps\":{\"body\":[\"SiteScope Login\"],\"header\":[\"SiteScope\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hp-storageworks-library\",\"rule\":[{\"regexps\":{\"body\":[\"HP StorageWorks\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hp-system-management-homepage\",\"rule\":[{\"regexps\":{\"body\":[\"HP System Management Homepage\"],\"header\":[\"CompaqHTTPServer\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hp_ilo(hp_integrated_lights-out)\",\"rule\":[{\"regexps\":{\"body\":[\"js/iLO.js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hp打印机\",\"rule\":[{\"regexps\":{\"body\":[\"HP LaserJet\",\"/hp/jetdirect\"],\"header\":[\"HP-ChaiServer\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"http-explorer\",\"rule\":[{\"regexps\":{\"header\":[\"Http explorer\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"huawei ibmc\",\"rule\":[{\"regexps\":{\"body\":[\"bmc/resources/css/frame\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"huawei b683\",\"rule\":[{\"regexps\":{\"body\":[\"Huawei B683\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"huawei b683v\",\"rule\":[{\"regexps\":{\"body\":[\"Huawei B683V\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"huawei csp\",\"rule\":[{\"regexps\":{\"body\":[\"HUAWEI CSP\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"huawei espace 7910\",\"rule\":[{\"regexps\":{\"body\":[\"HUAWEI ESPACE 7910\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"huawei hg520 adsl2+ router\",\"rule\":[{\"regexps\":{\"body\":[\"Huawei HG520\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"huawei hg630\",\"rule\":[{\"regexps\":{\"body\":[\"Huawei HG630\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"huawei inner web\",\"rule\":[{\"regexps\":{\"body\":[\"HUAWEI Inner Web\",\"hidden_frame.html\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"huawei official site\",\"rule\":[{\"regexps\":{\"body\":[\"Huawei Official Site\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"huawei smartax\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"Huawei SmartAX\\\"\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"huawei-firewall\",\"rule\":[{\"regexps\":{\"body\":[\"Modify by wangxiangguang\"],\"header\":[\"Eudemon Server\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"huawei-quidway-switch\",\"rule\":[{\"regexps\":{\"header\":[\"Lanswitch - \"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"huaweihomegateway\",\"rule\":[{\"regexps\":{\"body\":[\"Menu.HomeGatewayTitle\"],\"header\":[\"HuaweiHomeGateway\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"huawei_auth_server\",\"rule\":[{\"regexps\":{\"body\":[\"75718C9A-F029-11d1-A1AC-00C04FB6C223\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hubspot\",\"rule\":[{\"regexps\":{\"body\":[\"js.hubspot.com/analytics\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hudson\",\"rule\":[{\"regexps\":{\"header\":[\"X-Hudson\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hughes-satellite-router\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cframe src=/fs/dynaform/dw_logo.html\"],\"header\":[\"HUGHES Terminal\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hybrid-cluster\",\"rule\":[{\"regexps\":{\"header\":[\"Hybrid Cluster\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hycus-cms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Hycus\",\"Powered By \\u003ca href=\\\"http://www.hycus.com\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hynetos-httpd\",\"rule\":[{\"regexps\":{\"header\":[\"HyNetOS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hyperwave-is\",\"rule\":[{\"regexps\":{\"header\":[\"Hyperwave\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"i-catcher-console\",\"rule\":[{\"regexps\":{\"body\":[\"by i-Catcher Console\"],\"header\":[\"i-Catcher\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"i-gallery\",\"rule\":[{\"regexps\":{\"body\":[\"i-Gallery\",\"href=\\\"igallery.asp\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"i-o-data-router\",\"rule\":[{\"regexps\":{\"body\":[\"I-O DATA Wireless Broadband Router\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"i3micro\",\"rule\":[{\"regexps\":{\"header\":[\"i3micro\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"i@report\",\"rule\":[{\"regexps\":{\"body\":[\"com.sanlink.server.Login\",\"ireport\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"iapps\",\"rule\":[{\"regexps\":{\"header\":[\"iAPPSCookie\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"iball w4gx150n\",\"rule\":[{\"regexps\":{\"header\":[\"iB-W4GX150N\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"iball wrx300n\",\"rule\":[{\"regexps\":{\"header\":[\"iB-WRX300N\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"icecast\",\"rule\":[{\"regexps\":{\"header\":[\"icecast\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"iceflow_vpn\",\"rule\":[{\"regexps\":{\"header\":[\"Server: ICEFLOW\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"iceshop\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by ICEshop\",\"\\u003cdiv id=\\\"iceshop\\\"\\u003e\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"icinga\",\"rule\":[{\"regexps\":{\"header\":[\"Icinga\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"icom-router\",\"rule\":[{\"regexps\":{\"header\":[\"Icom HTTP Server\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ideawebserver\",\"rule\":[{\"regexps\":{\"header\":[\"IdeaWebServer\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"idvr\",\"rule\":[{\"regexps\":{\"body\":[\"iDVR\",\"name=\\\"iDVRForm\"],\"header\":[\"iDVRhttpSvr\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"igaming-cms\",\"rule\":[{\"regexps\":{\"body\":[\"http://www.igamingcms.com/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"igivetest\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by iGiveTest\"],\"header\":[\"IGTSESSID\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"iguard-security-system\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Lucky-Tech iGuard\"],\"header\":[\"iGuard Embedded Web Server\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ihtml\",\"rule\":[{\"regexps\":{\"header\":[\"iHTML\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"iisexport\",\"rule\":[{\"regexps\":{\"header\":[\"Iisexport\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ikonboard\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Ikonboard\",\"Powered by \\u003ca href=\\\"http://www.ikonboard.com\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ilo\",\"rule\":[{\"regexps\":{\"body\":[\"href=\\\"http://www.hp.com/go/ilo\",\"HP Integrated Lights-Out\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ilon-smartserver\",\"rule\":[{\"regexps\":{\"header\":[\"i.LON\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"imageview\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Imageview\",\"By Jorge Schrauwen\",\"href=\\\"http://www.blackdot.be\\\" title=\\\"Blackdot.be\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"imgallery\",\"rule\":[{\"regexps\":{\"body\":[\"href=\\\"http://www.imgallery.zor.pl\\\"\\u003e\\u003cb\\u003eIMGallery\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"imgcms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"IMGCMS\",\"Powered by IMGCMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"impresspages-cms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"ImpressPages CMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"incapsula\",\"rule\":[{\"regexps\":{\"header\":[\"X-Cdn: Incapsula\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"indico\",\"rule\":[{\"regexps\":{\"body\":[\"href=\\\"http://cern.ch/indico\"],\"header\":[\"MAKACSESSION\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"infinet-wireless-wanflex-router\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"InfiNet\"],\"header\":[\"WANFlex HTTP Daemon\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"infoglue\",\"rule\":[{\"regexps\":{\"body\":[\"infoglue\",\"infoglueBox.png\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"infomaster\",\"rule\":[{\"regexps\":{\"body\":[\"/MasterView.css\",\"/masterView.js\",\"/MasterView/MPLeftNavStyle/PanelBar.MPIFMA.css\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"informatics-cms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Informatics\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"inktomi-search\",\"rule\":[{\"regexps\":{\"header\":[\"Inktomi Search\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"inout-adserver\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by Inoutscripts\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"intellinet-ip-camera\",\"rule\":[{\"regexps\":{\"body\":[\"Copyright \\u0026copy;  INTELLINET NETWORK SOLUTIONS\",\"http://www.intellinet-network.com/driver/NetCam.exe\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"intermec-easylan\",\"rule\":[{\"regexps\":{\"body\":[\"COLOR=\\\"BLACK\\\" SIZE=\\\"5\\\"\\u003eIntermec EasyLAN\"],\"header\":[\"XCD WebAdmin\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"internet-cluster-manager\",\"rule\":[{\"regexps\":{\"header\":[\"Internet Cluster Manager\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"internet-rimon-filter\",\"rule\":[{\"regexps\":{\"header\":[\"rimon\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"interred\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"InterRed\",\"Created with InterRed\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"interspire-shopping-cart\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Interspire Shopping Cart\",\"class=\\\"PoweredBy\\\"\\u003eInterspire Shopping Cart\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"intoto-router\",\"rule\":[{\"regexps\":{\"header\":[\"Intoto Http Server\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"intrasrv\",\"rule\":[{\"regexps\":{\"header\":[\"intrasrv\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"intraxxion-cms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Intraxxion\",\"\\u003c!-- site built by Intraxxion\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"intrinsyc-deviceweb\",\"rule\":[{\"regexps\":{\"header\":[\"Intrinsyc deviceWEB\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"invisionpowerboard\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by \\u003ca href=\\\"http://www.invisionboard.com\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"invoiceplane\",\"rule\":[{\"regexps\":{\"body\":[\"InvoicePlane\"],\"header\":[\"ci_session\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ioncube-loader\",\"rule\":[{\"regexps\":{\"body\":[\"alt=\\\"ionCube logo\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ioncube-php-accelerator\",\"rule\":[{\"regexps\":{\"header\":[\"x-accelerated-by\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ip.board\",\"rule\":[{\"regexps\":{\"body\":[\"ipb.vars\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ipeer\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by iPeer\",\"/js/ipeer.js\",\"/css/ipeer.css\"],\"header\":[\"IPEER=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ipfire\",\"rule\":[{\"regexps\":{\"header\":[\"IPFire - Restricted\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ipinyou\",\"rule\":[{\"regexps\":{\"body\":[\"stats.ipinyou.com/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"iptime-router\",\"rule\":[{\"regexps\":{\"body\":[\"networks - ipTIME\",\"href=iptime.css\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"iqeye-netcam\",\"rule\":[{\"regexps\":{\"body\":[\"IQEYE: Live Images\",\"content=\\\"Brian Lau, IQinVision\",\"loc = \\\"iqeyevid.html\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"irecms\",\"rule\":[{\"regexps\":{\"header\":[\"IRe.CMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"iredadmin\",\"rule\":[{\"regexps\":{\"body\":[\"iredadmin\"],\"header\":[\"iredadmin\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"isc-scada-service\",\"rule\":[{\"regexps\":{\"body\":[\"ISC SCADA\"],\"header\":[\"ISC SCADA Service\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ischoolsite\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by \\u003ca href=\\\"http://www.ischoolsite.com\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"iscripts-multicart\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by \\u003ca href=\\\"http://iscripts.com/multicart\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"iscripts-reservelogic\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by \\u003ca href=\\\"http://www.iscripts.com/reservelogic/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"isolsoft-support-center\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by: Support Center\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ispconfig\",\"rule\":[{\"favicon\":{\"mmh3\":[\"483383992\"]},\"regexps\":{\"body\":[\"powered by \\u003ca HREF=\\\"http://www.ispconfig.org\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ispcp-omega\",\"rule\":[{\"regexps\":{\"body\":[\"ispCP Omega a Virtual Hosting Control System\"],\"header\":[\" ispCP=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"itop\",\"rule\":[{\"regexps\":{\"body\":[\"iTop Login\",\"href=\\\"http://www.combodo.com/itop\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"iwebshop\",\"rule\":[{\"regexps\":{\"body\":[\"/runtime/default/systemjs\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"iwebsns\",\"rule\":[{\"regexps\":{\"body\":[\"/jooyea/images/sns_idea1.jpg\",\"/jooyea/images/snslogo.gif\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"iwss-proxy\",\"rule\":[{\"regexps\":{\"header\":[\"IWSS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ix series\",\"rule\":[{\"regexps\":{\"header\":[\"IX Series\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"jagoanstore\",\"rule\":[{\"regexps\":{\"body\":[\"href=\\\"http://www.jagoanstore.com/\\\" target=\\\"_blank\\\"\\u003eToko Online\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"jamroom\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Talldude Networks\",\"content=\\\"Jamroom\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"jasig-cas\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by \\u003ca href=\\\"http://www.jasig.org/cas\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"javashop\",\"rule\":[{\"regexps\":{\"body\":[\"易族智汇javashop\",\"javashop微信公众号\",\"content=\\\"JavaShop\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"jboss\",\"rule\":[{\"favicon\":{\"md5\":[\"799f70b71314a7508326d1d2f68f7519\"],\"mmh3\":[\"-656811182\"]},\"regexps\":{\"header\":[\"Server: JBoss\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"jboss_as\",\"rule\":[{\"regexps\":{\"body\":[\"Manage this JBoss AS Instance\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"jcg无线路由器\",\"rule\":[{\"regexps\":{\"body\":[\"Wireless Router\",\"http://www.jcgcn.com\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"jcore\",\"rule\":[{\"regexps\":{\"body\":[\"JCORE_VERSION = \"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"jcow\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Jcow\",\"content=\\\"Powered by Jcow\",\"end jcow_application_box\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"jeus\",\"rule\":[{\"regexps\":{\"header\":[\"Jeus WebContainer\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"jgs-portal\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by \\u003cb\\u003eJGS-Portal Version\",\"href=\\\"jgs_portal_box.php?id=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"jiathis\",\"rule\":[{\"regexps\":{\"body\":[\"jiathis.com/code/jia.js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"jieqi cms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"jieqi cms\",\"jieqi cms\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"jigsaw\",\"rule\":[{\"regexps\":{\"header\":[\"Jigsaw\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"jive-sbs\",\"rule\":[{\"regexps\":{\"body\":[\"/jive-icons.css\",\"class=\\\"jive-body-formpage\",\"jive.rte.defaultStyles\"],\"header\":[\"X-Jsl: \"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"jobberbase\",\"rule\":[{\"regexps\":{\"body\":[\"Jobber\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"joomla-facebook\",\"rule\":[{\"regexps\":{\"header\":[\"jfbconnect_permissions_granted\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"jsf\",\"rule\":[{\"regexps\":{\"header\":[\"JSF\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"jtbc(cms)\",\"rule\":[{\"regexps\":{\"body\":[\"/js/jtbc.js\",\"content=\\\"JTBC\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"juniper-load-balancer\",\"rule\":[{\"regexps\":{\"header\":[\"Juniper Networks Application Acceleration Platform\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"juniper-netscreen-secure-access\",\"rule\":[{\"regexps\":{\"body\":[\"/dana-na/auth/welcome.cgi\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"juniper_vpn\",\"rule\":[{\"regexps\":{\"body\":[\"welcome.cgi?p=logo\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"jxt-consulting\",\"rule\":[{\"regexps\":{\"body\":[\"id=\\\"jxt-popup-wrapper\",\"Powered by JXT Consulting\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"kaibb\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by KaiBB\",\"content=\\\"Forum powered by KaiBB\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"kajona\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Kajona\",\"powered by Kajona\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"kampyle\",\"rule\":[{\"regexps\":{\"body\":[\"http://cf.kampyle.com/k_button.js\",\"Start Kampyle Feedback Form Button\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"kandidat-cms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Kandidat-CMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"kangle反向代理\",\"rule\":[{\"regexps\":{\"body\":[\"welcome use kangle\"],\"header\":[\"kangle\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"karrigell\",\"rule\":[{\"regexps\":{\"header\":[\"Karrigell\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"kayako-supportsuite\",\"rule\":[{\"regexps\":{\"body\":[\"Powered By Kayako eSupport\",\"Help Desk Software By Kayako eSupport\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"kedacom-truesens\",\"rule\":[{\"regexps\":{\"body\":[\"/img/kedacom-logo.jpg\"],\"header\":[\"KEDACOM\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"keil-embedded-web-server\",\"rule\":[{\"regexps\":{\"header\":[\"Keil-EWEB\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"kentico-cms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Kentico CMS\"],\"header\":[\"CMSPreferredCulture\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"kerio-connect\",\"rule\":[{\"regexps\":{\"header\":[\"Kerio MailServer\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"kerio-webstar\",\"rule\":[{\"regexps\":{\"header\":[\"4D_WebStar\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"kerio-winroute-firewall\",\"rule\":[{\"regexps\":{\"body\":[\"/gfx/kerio_logo.gif\",\"Kerio WinRoute Firewall\"],\"header\":[\"Kerio WinRoute Firewall Embedded Web Server\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"kerio_winroute_firewall\",\"rule\":[{\"regexps\":{\"body\":[\"style/bodyNonauth.css\"],\"header\":[\"Kerio WinRoute Firewall\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"kesioncms\",\"rule\":[{\"regexps\":{\"body\":[\"/ks_inc/common.js\",\"publish by KesionCMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"keyfocus-webserver\",\"rule\":[{\"regexps\":{\"header\":[\"KFWebServer\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"kindeditor\",\"rule\":[{\"regexps\":{\"body\":[\"kindeditor.js\",\"KindEditor.ready\",\"K.create\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"kingcms\",\"rule\":[{\"regexps\":{\"body\":[\"kingcms\",\"content=\\\"KingCMS\",\"Powered by KingCMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"kleeja\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by Kleeja\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"kloxo-single-server\",\"rule\":[{\"regexps\":{\"body\":[\"src=\\\"/img/hypervm-logo.gif\",\"/htmllib/js/preop.js\",\"HyperVM\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"knopflerfish-http-server\",\"rule\":[{\"regexps\":{\"header\":[\"The Knopflerfish HTTP Server\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"kohana-framework\",\"rule\":[{\"regexps\":{\"header\":[\"Kohana Framework\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"kooboocms\",\"rule\":[{\"regexps\":{\"header\":[\"Kooboocms\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"lanmp一键安装包\",\"rule\":[{\"regexps\":{\"body\":[\"LANMP一键安装包\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"laravel\",\"rule\":[{\"regexps\":{\"header\":[\"laravel_session\",\"ci_session\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"lemis管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"lemis.WEB_APP_NAME\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"lepton-cms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"LEPTON-CMS\",\"Powered by LEPTON CMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"liferay\",\"rule\":[{\"regexps\":{\"header\":[\"Liferay-Portal\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"lighttpd\",\"rule\":[{\"regexps\":{\"header\":[\"server: lighttpd\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"linksys-vpn\",\"rule\":[{\"regexps\":{\"header\":[\"linksys-vpn\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"linksys_spa_configuration\",\"rule\":[{\"regexps\":{\"body\":[\"Linksys SPA Configuration\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"liquidgis\",\"rule\":[{\"regexps\":{\"header\":[\"Productname: LiquidGIS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"litespeed\",\"rule\":[{\"regexps\":{\"header\":[\"Server: LiteSpeed\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"litespeed_web_admin_console\",\"rule\":[{\"regexps\":{\"body\":[\"LiteSpeed Web Admin Console\"],\"header\":[\"LSWSWEBUI\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"locus_solarnoc\",\"rule\":[{\"regexps\":{\"body\":[\"SolarNOC - Login\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"log_rotate\",\"rule\":[{\"regexps\":{\"header\":[\"mod_ log_rotate\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"lotus-domino\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Lotus-Domino\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"lotus\",\"rule\":[{\"regexps\":{\"body\":[\"IBM Lotus iNotes Login\",\"iwaredir.nsf\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"loyaa信息自动采编系统\",\"rule\":[{\"regexps\":{\"body\":[\"/Loyaa/common.lib.js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"lua\",\"rule\":[{\"regexps\":{\"header\":[\"Server: lua\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"lumanager\",\"rule\":[{\"regexps\":{\"body\":[\"LuManager\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"lum服务器管理\",\"rule\":[{\"regexps\":{\"header\":[\"LUM_SESSION\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"lynxspring_jenesys\",\"rule\":[{\"regexps\":{\"body\":[\"LX JENEsys\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mac1200r\",\"rule\":[{\"regexps\":{\"header\":[\"MAC1200R\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"macos\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1629518721\"]},\"regexps\":{\"header\":[\"MacOS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"macrec_dvr\",\"rule\":[{\"regexps\":{\"body\":[\"Macrec DVR\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"magento\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-38580010\"]},\"regexps\":{\"body\":[\"/skin/frontend/\",\"BLANK_IMG\",\"Magento, Varien, E-commerce\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mallbuilder\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"MallBuilder\",\"Powered by MallBuilder\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"managedfusion\",\"rule\":[{\"regexps\":{\"header\":[\"ManagedFusion\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mantis\",\"rule\":[{\"regexps\":{\"body\":[\"browser_search_plugin.php?type=id\",\"MantisBT Team\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"maticsoftsns_动软分享社区\",\"rule\":[{\"regexps\":{\"body\":[\"MaticsoftSNS\",\"maticsoft\",\"/Areas/SNS/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"maticsoft_shop_动软商城\",\"rule\":[{\"regexps\":{\"body\":[\"Maticsoft Shop\",\"maticsoft\",\"/Areas/Shop/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mbedthis-appweb\",\"rule\":[{\"regexps\":{\"header\":[\"Mbedthis-Appweb\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mdaemon\",\"rule\":[{\"regexps\":{\"body\":[\"/WorldClient.dll?View=Main\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mercurial\",\"rule\":[{\"regexps\":{\"body\":[\"Mercurial repositories index\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"microsoft ajax content delivery network\",\"rule\":[{\"regexps\":{\"body\":[\"ajax.aspnetcdn.com/ajax\"],\"header\":[\"ajax.aspnetcdn.com/ajax\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"microsoft-httpapi\",\"rule\":[{\"regexps\":{\"header\":[\"Microsoft-HTTPAPI\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mikrotik\",\"rule\":[{\"regexps\":{\"body\":[\"RouterOS\",\"mikrotik\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"milu_seotool\",\"rule\":[{\"regexps\":{\"body\":[\"plugin.php?id=milu_seotool\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mini_httpd\",\"rule\":[{\"regexps\":{\"header\":[\"mini_httpd\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mirapoint\",\"rule\":[{\"regexps\":{\"body\":[\"/wm/mail/login.html\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mobotix\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"MOBOTIX AG\"],\"header\":[\"MOBOTIX Camera User\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mobotix_camera\",\"rule\":[{\"regexps\":{\"header\":[\"MOBOTIX Camera\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mod_antiloris\",\"rule\":[{\"regexps\":{\"header\":[\"mod_antiloris\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mod_apreq2\",\"rule\":[{\"regexps\":{\"header\":[\"mod_apreq2\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mod_auth_kerb\",\"rule\":[{\"regexps\":{\"header\":[\"mod_auth_kerb\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mod_auth_pam\",\"rule\":[{\"regexps\":{\"header\":[\"mod_auth_pam\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mod_auth_passthrough\",\"rule\":[{\"regexps\":{\"header\":[\"mod_auth_passthrough\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mod_autoindex_color\",\"rule\":[{\"regexps\":{\"header\":[\"mod_autoindex_color\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mod_bwlimited\",\"rule\":[{\"regexps\":{\"header\":[\"mod_bwlimited\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mod_dav\",\"rule\":[{\"regexps\":{\"header\":[\"DAV/2\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mod_encoding\",\"rule\":[{\"regexps\":{\"header\":[\"mod_encoding\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mod_evasive\",\"rule\":[{\"regexps\":{\"header\":[\"mod_evasive\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mod_fastcgi\",\"rule\":[{\"regexps\":{\"header\":[\"mod_fastcgi\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mod_fcgid\",\"rule\":[{\"regexps\":{\"header\":[\"mod_fcgid\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mod_gzip\",\"rule\":[{\"regexps\":{\"header\":[\"mod_gzip\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mod_hive\",\"rule\":[{\"regexps\":{\"header\":[\"mod_hive\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mod_jk\",\"rule\":[{\"regexps\":{\"header\":[\"mod_jk\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mod_log_bytes\",\"rule\":[{\"regexps\":{\"header\":[\"mod_log_bytes\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mod_macro\",\"rule\":[{\"regexps\":{\"header\":[\"mod_macro\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mod_nss\",\"rule\":[{\"regexps\":{\"header\":[\"mod_nss\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mod_pagespeed\",\"rule\":[{\"regexps\":{\"header\":[\"mod_pagespeed\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mod_perl\",\"rule\":[{\"regexps\":{\"header\":[\"mod_perl\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mod_psoft_traffic\",\"rule\":[{\"regexps\":{\"header\":[\"mod_psoft_traffic\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mod_python\",\"rule\":[{\"regexps\":{\"header\":[\"mod_python\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mod_rack\",\"rule\":[{\"regexps\":{\"header\":[\"mod_rack\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mod_rails\",\"rule\":[{\"regexps\":{\"header\":[\"mod_rails\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mod_security\",\"rule\":[{\"regexps\":{\"header\":[\"Mod_Security\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mod_ssl\",\"rule\":[{\"regexps\":{\"header\":[\"mod_ssl\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mod_throttle\",\"rule\":[{\"regexps\":{\"header\":[\"mod_throttle\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mod_wsgi\",\"rule\":[{\"regexps\":{\"header\":[\"mod_wsgi\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"momocms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"MoMoCMS\",\"Powered BY MoMoCMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mongodb\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ca href=\\\"/_replSet\\\"\\u003eReplica set status\\u003c/a\\u003e\\u003c/p\\u003e\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"montavista linux\",\"rule\":[{\"regexps\":{\"header\":[\"MontaVista\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"moosefs\",\"rule\":[{\"regexps\":{\"body\":[\"mfs.cgi\",\"under-goal files\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"motorola_sbg900\",\"rule\":[{\"regexps\":{\"body\":[\"Motorola SBG900\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"moxa nport串口服务器\",\"rule\":[{\"regexps\":{\"header\":[\"MoxaHttp\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"moxa_nport_5150a\",\"rule\":[{\"regexps\":{\"body\":[\"NPort Web Console\",\"5150A\"],\"header\":[\"MoxaHttp\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mozartframework\",\"rule\":[{\"regexps\":{\"header\":[\"Mozart Framework\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mrtg\",\"rule\":[{\"regexps\":{\"body\":[\"Command line is easier to read using \\\"View Page Properties\\\" of your browser\",\"MRTG Index Page\",\"commandline was: indexmaker\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ms-author-via\",\"rule\":[{\"regexps\":{\"header\":[\"MS-Author-Via\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"munin\",\"rule\":[{\"regexps\":{\"body\":[\"Auto-generated by Munin\",\"munin-month.html\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"muracms\",\"rule\":[{\"regexps\":{\"header\":[\"Mura CMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mvb2000\",\"rule\":[{\"regexps\":{\"body\":[\"MVB2000\",\"The Magic Voice Box\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mvmmall\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"MvMmall\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mw4530r\",\"rule\":[{\"regexps\":{\"header\":[\"MW4530R\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mylittleforum\",\"rule\":[{\"regexps\":{\"body\":[\"powered by my little forum\",\"index.php?mode=js_defaults\"],\"header\":[\"mlf2_general_forum_usersettings\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mymps\",\"rule\":[{\"regexps\":{\"body\":[\"/css/mymps.css\",\"mymps\",\"content=\\\"mymps\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"nagios\",\"rule\":[{\"regexps\":{\"body\":[\"/nagios/cgi-bin/status.cgi\"],\"header\":[\"Nagios access\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"netcore产品\",\"rule\":[{\"regexps\":{\"header\":[\"netcore产品\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"netgear产品\",\"rule\":[{\"regexps\":{\"header\":[\"NETGEAR\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"netscape-enterprise\",\"rule\":[{\"regexps\":{\"header\":[\"Netscape-Enterprise\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"netshare_vpn\",\"rule\":[{\"regexps\":{\"body\":[\"NetShare\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"netsurveillance\",\"rule\":[{\"regexps\":{\"body\":[\"NETSurveillance\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"netteframework\",\"rule\":[{\"regexps\":{\"header\":[\"Nette Framework\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"nexus_nx_router\",\"rule\":[{\"regexps\":{\"body\":[\"http://nexuswifi.com/\",\"Nexus NX\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ngx_openresty\",\"rule\":[{\"regexps\":{\"header\":[\"ngx_openresty\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"nitc\",\"rule\":[{\"regexps\":{\"body\":[\"NITC Web Marketing Service\",\"/images/nitc1.png\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"niucms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"NIUCMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"noalyss\",\"rule\":[{\"regexps\":{\"body\":[\"NOALYSS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"npoint\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by Npoint\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"nsfocusWAF设备\",\"rule\":[{\"regexps\":{\"body\":[\"WAF NSFOCUS\",\"/images/logo/nsfocus.png\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ntop\",\"rule\":[{\"regexps\":{\"body\":[\"Global Traffic Statistics\",\"ntopMenuID\"],\"header\":[\"Server: ntop\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"nvdvr\",\"rule\":[{\"regexps\":{\"body\":[\"XWebPlay\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"o2ocms\",\"rule\":[{\"regexps\":{\"body\":[\"/index.php/clasify/showone/gtitle/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"o2security_vpn\",\"rule\":[{\"regexps\":{\"header\":[\"client_param=install_active\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"onssi_video_clients\",\"rule\":[{\"regexps\":{\"body\":[\"OnSSI Video Clients\",\"x-value=\\\"On-Net Surveillance Systems Inc.\\\"\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"opencart\",\"rule\":[{\"regexps\":{\"body\":[\"Powered By OpenCart\",\"catalog/view/theme\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"opencms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"OpenCms\",\"Powered by OpenCms\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"openeap\",\"rule\":[{\"regexps\":{\"body\":[\"openEAP_统一登录门户\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"openmas\",\"rule\":[{\"regexps\":{\"body\":[\"OpenMas\",\"loginHead\\\"\\u003e\\u003clink href=\\\"App_Themes\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"opennms\",\"rule\":[{\"regexps\":{\"body\":[\"/css/gwt-asset.css\",\"OpenNMS® is a registered trademark of\"],\"header\":[\"/opennms/login.jsp\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"opensns\",\"rule\":[{\"regexps\":{\"body\":[\"opensns\",\"content=\\\"OpenSNS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"opensolaris\",\"rule\":[{\"regexps\":{\"header\":[\"OpenSolaris\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"opensuse\",\"rule\":[{\"regexps\":{\"header\":[\"openSUSE\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"open_adstream\",\"rule\":[{\"regexps\":{\"body\":[\"OAS_AD\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"oracle solaris\",\"rule\":[{\"regexps\":{\"header\":[\"Oracle Solaris\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"oracle-dms\",\"rule\":[{\"regexps\":{\"header\":[\"X-Oracle-Dms-Ecid\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"oracle_applicaton_server\",\"rule\":[{\"regexps\":{\"body\":[\"OraLightHeaderSub\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"oracle_opera\",\"rule\":[{\"regexps\":{\"body\":[\"MICROS Systems Inc., OPERA\",\"OperaLogin/Welcome.do\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"orientdb\",\"rule\":[{\"regexps\":{\"body\":[\"Redirecting to OrientDB\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"orocrm\",\"rule\":[{\"regexps\":{\"body\":[\"/bundles/oroui/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"osclass\",\"rule\":[{\"regexps\":{\"body\":[\"generator\\\" content=\\\"Osclass\"],\"header\":[\"osclass\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ourphp\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"OURPHP\",\"Powered by ourphp\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"pageadmin\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"PageAdmin CMS\\\"\",\"/e/images/favicon.ico\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"pagespeed\",\"rule\":[{\"regexps\":{\"header\":[\"X-Mod-Pagespeed\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"paloalto_firewall\",\"rule\":[{\"regexps\":{\"body\":[\"Access to the web page you were trying to visit has been blocked in accordance with company policy\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"panabit智能网关\",\"rule\":[{\"regexps\":{\"body\":[\"panabit\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"panasonic network camera\",\"rule\":[{\"regexps\":{\"body\":[\"MultiCameraFrame?Mode=Motion\\u0026Language\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"parallels plesk panel\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-652508439\",\"-519765377\",\"-771764544\"]},\"regexps\":{\"body\":[\"Parallels IP Holdings GmbH\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"pclinuxos\",\"rule\":[{\"regexps\":{\"header\":[\"PCLinuxOS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"pg api server\",\"rule\":[{\"regexps\":{\"header\":[\"PGAPIServ\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"phabricator\",\"rule\":[{\"regexps\":{\"body\":[\"phabricator-application-launch-container\",\"res/phabricator\"],\"header\":[\"phsid\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"phusion\",\"rule\":[{\"regexps\":{\"header\":[\"Phusion\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"pigcms\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-By: PigCms.com\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"pineapp\",\"rule\":[{\"regexps\":{\"body\":[\"PineApp WebAccess - Login\",\"/admin/css/images/pineapp.ico\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"piwigo\",\"rule\":[{\"regexps\":{\"body\":[\"generator\\\" content=\\\"Piwigo\"],\"header\":[\"pwg_id\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"piwik\",\"rule\":[{\"regexps\":{\"body\":[\"Piwik\",\"index.php?module=Proxy\"],\"header\":[\"PIWIK_SESSID \"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"play-framework\",\"rule\":[{\"regexps\":{\"header\":[\"Play! Framework\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"plesklin\",\"rule\":[{\"regexps\":{\"header\":[\"PleskLin\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"plone\",\"rule\":[{\"regexps\":{\"body\":[\"generator\\\" content=\\\"Plone\"],\"header\":[\"plone.content\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"polycom\",\"rule\":[{\"favicon\":{\"mmh3\":[\"77044418\"]},\"regexps\":{\"body\":[\"Polycom\",\"kAllowDirectHTMLFileAccess\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"powerlogic_ion\",\"rule\":[{\"regexps\":{\"body\":[\"PowerLogic\"],\"header\":[\"Allegro-Software-RomPager\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"prestashop\",\"rule\":[{\"regexps\":{\"body\":[\"Shop powered by PrestaShop\"],\"header\":[\"PrestaShop\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"pretsashop\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"PrestaShop\\\"\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"privoxy\",\"rule\":[{\"regexps\":{\"header\":[\"Proxy-Agent: Privoxy\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"privoxy代理\",\"rule\":[{\"regexps\":{\"header\":[\"Privoxy\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"publiccms\",\"rule\":[{\"regexps\":{\"body\":[\"publiccms\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"puppet_node_manager\",\"rule\":[{\"regexps\":{\"body\":[\"Puppet Node Manager\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"qingcloud\",\"rule\":[{\"regexps\":{\"header\":[\"QINGCLOUDELB\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"qno_router\",\"rule\":[{\"regexps\":{\"body\":[\"/QNOVirtual_Keyboard.js\",\"/images/login_img01_03.gif\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"rack-cache\",\"rule\":[{\"regexps\":{\"header\":[\"X-Rack-Cache\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ranzhi\",\"rule\":[{\"regexps\":{\"body\":[\"/sys/index.php?m=user\\u0026f=login\\u0026referer=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"recaptcha\",\"rule\":[{\"regexps\":{\"body\":[\"recaptcha_ajax.js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"restlet-framework\",\"rule\":[{\"regexps\":{\"header\":[\"Restlet-Framework\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"reviewboard\",\"rule\":[{\"regexps\":{\"body\":[\"/static/rb/images/delete\"],\"header\":[\"rbsessionid\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"rompager embedded web\",\"rule\":[{\"regexps\":{\"header\":[\"RomPager\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"roundcube\",\"rule\":[{\"regexps\":{\"header\":[\"roundcube_sessid\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"router webserver\",\"rule\":[{\"regexps\":{\"header\":[\"Router Webserver\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ruby\",\"rule\":[{\"regexps\":{\"header\":[\"X-Rack-Cache\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ruckus\",\"rule\":[{\"regexps\":{\"body\":[\"mon.  Tell me your username\",\"Ruckus Wireless Admin\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"samanportal\",\"rule\":[{\"regexps\":{\"header\":[\"sisRapid\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"samsung dvr\",\"rule\":[{\"regexps\":{\"body\":[\"Samsung DVR\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"scada plc\",\"rule\":[{\"regexps\":{\"body\":[\"/images/rockcolor.gif\",\"/ralogo.gif\",\"Ethernet Processor\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"schneider_quantum_140noe77101\",\"rule\":[{\"regexps\":{\"body\":[\"indexLanguage\",\"html/config.js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"scientific linux\",\"rule\":[{\"regexps\":{\"header\":[\"Scientific Linux\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"scientific-atlanta_cable_modem\",\"rule\":[{\"regexps\":{\"body\":[\"Scientific-Atlanta Cable Modem\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sdcms\",\"rule\":[{\"regexps\":{\"body\":[\"powered by sdcms\",\"var webroot=\",\"/js/sdcms.js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"semcms\",\"rule\":[{\"regexps\":{\"body\":[\"semcms PHP\",\"sc_mid_c_left_c sc_mid_left_bt\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"seminole\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Seminole\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sharepoint\",\"rule\":[{\"regexps\":{\"header\":[\"Microsoftsharepointteamservices\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"shopbuilder\",\"rule\":[{\"regexps\":{\"body\":[\"ShopBuilder\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"shopex\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"ShopEx\",\"@author litie[aita]shopex.cn\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"shopify\",\"rule\":[{\"regexps\":{\"header\":[\"X-Shopid:\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"shopnc\",\"rule\":[{\"regexps\":{\"body\":[\"ShopNC\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"shoutcast\",\"rule\":[{\"regexps\":{\"body\":[\"SHOUTcast Administrator\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"silverstripe\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"SilverStripe\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"simit_framework\",\"rule\":[{\"regexps\":{\"header\":[\"SIMIT framework\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sitecom adsl model\",\"rule\":[{\"regexps\":{\"header\":[\"SITECOM\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sitecore\",\"rule\":[{\"regexps\":{\"header\":[\"Sitecore CMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"siteengine\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Boka SiteEngine\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"siteserver\",\"rule\":[{\"regexps\":{\"body\":[\"T_系统首页模板\",\"siteserver\",\"sitefiles\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sjswps_ oiwps\",\"rule\":[{\"regexps\":{\"header\":[\"Oracle-iPlanet-Proxy-Server\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sjsws_ oiws\",\"rule\":[{\"regexps\":{\"header\":[\"Sun-Java-System-Web-Server\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"slackware\",\"rule\":[{\"regexps\":{\"header\":[\"Slackware\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sltm32_configuration\",\"rule\":[{\"regexps\":{\"body\":[\"SLTM32 Web Configuration Pages \"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sma_sunny_webbox\",\"rule\":[{\"regexps\":{\"body\":[\"SMA Sunny Webbox\"],\"header\":[\"Server: WebBox-20\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"smc wbr14s-n5\",\"rule\":[{\"regexps\":{\"header\":[\"SMCWBR14S-N5\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"snb股票交易软件\",\"rule\":[{\"regexps\":{\"body\":[\"Copyright 2005–2009 \\u003ca href=\\\"http://www.s-mo.com\\\"\\u003e\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"soeasy网站集群系统\",\"rule\":[{\"regexps\":{\"body\":[\"EGSS_User\",\"SoEasy网站集群\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sogou站长平台\",\"rule\":[{\"regexps\":{\"body\":[\"sogou_site_verification\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"solvonet device (voip)\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"SOLVONET\\\"\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"somoidea\",\"rule\":[{\"regexps\":{\"body\":[\"DESIGN BY SOMOIDEA\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sonicwall\",\"rule\":[{\"favicon\":{\"mmh3\":[\"631108382\"]},\"regexps\":{\"header\":[\"Server: SonicWALL\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sony摄像头\",\"rule\":[{\"regexps\":{\"body\":[\"Sony Network Camera\",\"inquiry.cgi?inqjs=system\\u0026inqjs=camera\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sophos web appliance\",\"rule\":[{\"regexps\":{\"body\":[\"Sophos Web Appliance\",\"resources/images/sophos_web.ico\",\"url(resources/images/en/login_swa.jpg)\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sophos\",\"rule\":[{\"regexps\":{\"header\":[\"Sophos\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sophos_web_appliance\",\"rule\":[{\"regexps\":{\"body\":[\"Sophos Web Appliance\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"spark_master\",\"rule\":[{\"regexps\":{\"body\":[\"Spark Master at\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"spark_worker\",\"rule\":[{\"regexps\":{\"body\":[\"Spark Worker at\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"spid http server\",\"rule\":[{\"regexps\":{\"header\":[\"SPID HTTP Server\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"splunk\",\"rule\":[{\"regexps\":{\"body\":[\"Splunk.util.normalizeBoolean\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"spring security\",\"rule\":[{\"regexps\":{\"body\":[\"j_spring_security_check\"],\"header\":[\"Spring Security Application\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sq-webcam\",\"rule\":[{\"regexps\":{\"header\":[\"SQ-WEBCAM\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"squarespace建站\",\"rule\":[{\"regexps\":{\"header\":[\"squarespace.net\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"squid\",\"rule\":[{\"regexps\":{\"header\":[\"squid\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"srun3000计费认证系统\",\"rule\":[{\"regexps\":{\"body\":[\"srun3000\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"star cms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"STARCMS\",\"\\u003cimg alt=\\\"STAR CMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"starlet\",\"rule\":[{\"regexps\":{\"header\":[\"Plack::Handler::Starlet\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"startbbs\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Startbbs\"],\"header\":[\"stb_csrf_cookie\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"stcms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"STCMS\",\"DahongY\\u003cdahongy@gmail.com\\u003e\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"storm\",\"rule\":[{\"regexps\":{\"body\":[\"Storm UI\",\"stormtimestr\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"subrioncms\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-Cms: Subrion CMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sucuri\",\"rule\":[{\"regexps\":{\"header\":[\"Sucuri/Cloudproxy\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"suduserver\",\"rule\":[{\"regexps\":{\"header\":[\"suduserver\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sugon_gridview\",\"rule\":[{\"regexps\":{\"body\":[\"/common/resources/images/common/app/gridview.ico\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"suhosin\",\"rule\":[{\"regexps\":{\"header\":[\"suhosin\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sun-one-web-server\",\"rule\":[{\"regexps\":{\"header\":[\"Sun-ONE-Web-Server\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sun[tm]\",\"rule\":[{\"regexps\":{\"body\":[\"Sun[tm] ONE Web Server\"],\"header\":[\"Server: Sun-ONE-Web-Server\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"supesite\",\"rule\":[{\"regexps\":{\"header\":[\"supe_sid\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"swiftlet\",\"rule\":[{\"regexps\":{\"header\":[\"Swiftlet\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"symantec messaging gateway\",\"rule\":[{\"regexps\":{\"body\":[\"Messaging Gateway\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"synkronvia\",\"rule\":[{\"regexps\":{\"header\":[\"Synkron Via CMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"synology_diskstation\",\"rule\":[{\"regexps\":{\"body\":[\"Synology DiskStation\",\"SYNO.SDS.Session\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"taocms\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003etaoCMS\\u003c\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"tccms\",\"rule\":[{\"regexps\":{\"body\":[\"Power By TCCMS\",\"index.php?ac=link_more\",\"index.php?ac=news_list\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"tcn协议\",\"rule\":[{\"regexps\":{\"header\":[\"Tcn: list\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"teamportal\",\"rule\":[{\"regexps\":{\"body\":[\"TS_expiredurl\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"techartcms\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-Cms: Techart CMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"techbridge\",\"rule\":[{\"regexps\":{\"body\":[\"Sorry,you need to use IE brower\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"telerik sitefinity\",\"rule\":[{\"regexps\":{\"body\":[\"Telerik.Web.UI.WebResource.axd\",\"content=\\\"Sitefinity\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"terramaster\",\"rule\":[{\"regexps\":{\"body\":[\"TerraMaster\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"testlink\",\"rule\":[{\"regexps\":{\"body\":[\"testlink_library.js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"thawte_ssl_cert\",\"rule\":[{\"regexps\":{\"body\":[\"https://seal.thawte.com/getthawteseal\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"thinkox\",\"rule\":[{\"regexps\":{\"body\":[\"Powered By ThinkOX\",\"ThinkOX\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"thinksaas\",\"rule\":[{\"regexps\":{\"body\":[\"/app/home/skins/default/style.css\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"thinksns\",\"rule\":[{\"regexps\":{\"body\":[\"_static/image/favicon.ico\"],\"header\":[\"TSV3_lang\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"tiki-wiki cms\",\"rule\":[{\"regexps\":{\"body\":[\"jqueryTiki = new Object\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"tipask\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"tipask\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"tncms\",\"rule\":[{\"regexps\":{\"header\":[\"X-Tncms-Version\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"tornadoserver\",\"rule\":[{\"regexps\":{\"header\":[\"TornadoServer\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"tp-link无线路由器\",\"rule\":[{\"regexps\":{\"header\":[\"TP-LINK\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"tp-shop\",\"rule\":[{\"regexps\":{\"body\":[\"mn-c-top\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"tq云呼叫中心\",\"rule\":[{\"regexps\":{\"body\":[\"tq.cn/floatcard?\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"trac\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ch1\\u003eAvailable Projects\\u003c/h1\\u003e\",\"wiki/TracGuide\"],\"header\":[\"trac_session\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"trendnet ip cam\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"netcam\\\"\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"tutucms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"TUTUCMS\",\"Powered by TUTUCMS\",\"TUTUCMS\\\"\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"twcms\",\"rule\":[{\"regexps\":{\"body\":[\"twcms/theme\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"twilightcms\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-Cms: Twilight CMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"typo3\",\"rule\":[{\"regexps\":{\"header\":[\"fe_typo_user\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ubnt_unifi系列路由\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cdiv class=\\\"appGlobalHeader\\\"\\u003e\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ucstar\",\"rule\":[{\"regexps\":{\"body\":[\"UcSTAR 管理控制台\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ujian\",\"rule\":[{\"regexps\":{\"body\":[\"ujian.cc/code/ujian.js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ultra_electronics\",\"rule\":[{\"regexps\":{\"body\":[\"/preauth/login.cgi\",\"/preauth/style.css\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"umi.cms\",\"rule\":[{\"regexps\":{\"header\":[\"UMI.CMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"unbouncepages\",\"rule\":[{\"regexps\":{\"header\":[\"X-Unbounce-Pageid\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"unknown_cms\",\"rule\":[{\"regexps\":{\"header\":[\"Requestsuccess4ajax\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"uplusftp\",\"rule\":[{\"regexps\":{\"header\":[\"uPlusFtp\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"upupw\",\"rule\":[{\"regexps\":{\"body\":[\"UPUPW环境集成包\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"urlrewriter.net\",\"rule\":[{\"regexps\":{\"header\":[\"UrlRewriter.NET\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"urlscan\",\"rule\":[{\"regexps\":{\"header\":[\"Rejected-By-UrlScan\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"usp secure entry server\",\"rule\":[{\"regexps\":{\"header\":[\"Secure Entry Server\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"uyan\",\"rule\":[{\"regexps\":{\"body\":[\"uyan.cc/code/uyan.js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"v5shop\",\"rule\":[{\"regexps\":{\"body\":[\"v5shop\",\"content=\\\"V5shop\",\"Powered by V5Shop\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"varnish\",\"rule\":[{\"regexps\":{\"header\":[\"X-Varnish\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"verizon_wireless_router\",\"rule\":[{\"regexps\":{\"body\":[\"Wireless Broadband Router Management Console\",\"verizon_logo_blk.gif\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"vertx\",\"rule\":[{\"regexps\":{\"header\":[\"vertx-web.session\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"vicworl\",\"rule\":[{\"regexps\":{\"body\":[\"Vicworl\",\"vindex_right_d\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"videoiq camera\",\"rule\":[{\"regexps\":{\"body\":[\"VideoIQ Camera Login\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"visualsvn\",\"rule\":[{\"regexps\":{\"body\":[\"VisualSVN Server\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"vos3000\",\"rule\":[{\"regexps\":{\"body\":[\"VOS3000\",\"images/vos3000.ico\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"vue框架\",\"rule\":[{\"regexps\":{\"body\":[\"vue.js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"vzpp plesk\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1268095485\"]},\"regexps\":{\"body\":[\"VZPP Plesk \"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"wamp\",\"rule\":[{\"regexps\":{\"body\":[\"WAMPSERVER\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"wdcp\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1786752597\"]},\"regexps\":{\"body\":[\"wdcp服务器\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"wdcp管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"wdcp服务器\",\"lanmp_wdcp 安装成功\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"wdlinux\",\"rule\":[{\"regexps\":{\"body\":[\"wdOS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"we7\",\"rule\":[{\"regexps\":{\"body\":[\"/Widgets/WidgetCollection/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"webedition\",\"rule\":[{\"regexps\":{\"body\":[\"generator\\\" content=\\\"webEdition\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"webknight\",\"rule\":[{\"regexps\":{\"header\":[\"WebKnight\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"webluker\",\"rule\":[{\"regexps\":{\"header\":[\"Webluker-Edge\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"webobjects\",\"rule\":[{\"regexps\":{\"header\":[\"wosid\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"webplusr\",\"rule\":[{\"regexps\":{\"body\":[\"webplus\",\"高校网站群管理平台\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"webray\",\"rule\":[{\"regexps\":{\"header\":[\"Drivedby: RaySrv\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"webrick\",\"rule\":[{\"regexps\":{\"header\":[\"webrick\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"websitebaker-cms\",\"rule\":[{\"regexps\":{\"header\":[\"wb_session_id\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"webtrust_cert\",\"rule\":[{\"regexps\":{\"body\":[\"https://cert.webtrust.org/ViewSeal\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"wecenter\",\"rule\":[{\"regexps\":{\"body\":[\"aw_template.js\",\"WeCenter\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"weebly\",\"rule\":[{\"regexps\":{\"body\":[\"wsite-page-index\"],\"header\":[\"intern.weebly.net\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"weidun\",\"rule\":[{\"regexps\":{\"header\":[\"Firewall: www.weidun.com.cn\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"weiphp\",\"rule\":[{\"favicon\":{\"md5\":[\"820d3b66204fbcd3560b9358632b9c8a\"],\"mmh3\":[\"37052027\"]},\"regexps\":null}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"whm\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-649378830\"]},\"regexps\":{\"header\":[\"whostmgrsession\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"wimax_cpe\",\"rule\":[{\"regexps\":{\"body\":[\"Wimax CPE Configuration\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"windriver设备\",\"rule\":[{\"regexps\":{\"header\":[\"WindRiver-WebServer\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"wishoa\",\"rule\":[{\"regexps\":{\"body\":[\"WishOA_WebPlugin.js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"wmsn\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-Cms: WMSN\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"wordpress\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"WordPress\",\"/wp-includes/\"],\"header\":[\"/xmlrpc.php\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"wordpress_qtranslate\",\"rule\":[{\"regexps\":{\"header\":[\"qtrans_cookie_test\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"wosign_ssl_cert\",\"rule\":[{\"regexps\":{\"body\":[\"wosign.com\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"wp-super-cache\",\"rule\":[{\"regexps\":{\"header\":[\"Wp-Super-Cache\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"wspx\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-By: ANSI C\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"wuzhicms\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by wuzhicms\",\"content=\\\"wuzhicms\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"x-72e-nobeian-transfer\",\"rule\":[{\"regexps\":{\"header\":[\"X-72e-Nobeian-Transfer\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"xfinity\",\"rule\":[{\"regexps\":{\"body\":[\"Xfinity\",\"/reset-meyer-1.0.min.css\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"xheditor\",\"rule\":[{\"regexps\":{\"body\":[\"xheditor_lang/zh-cn.js\",\"class=\\\"xheditor\",\".xheditor(\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"xoops\",\"rule\":[{\"regexps\":{\"body\":[\"include/xoops.js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"yabb\",\"rule\":[{\"regexps\":{\"body\":[\"YaBBTime.getTime()\",\"/YaBB.js\"],\"header\":[\"Y2User\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"yidacms\",\"rule\":[{\"regexps\":{\"body\":[\"yidacms.css\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"yii\",\"rule\":[{\"favicon\":{\"md5\":[\"a976d227e5d1dcf62f5f7e623211dd1b\"]},\"regexps\":{\"header\":[\"YII_CSRF_TOKEN\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"yxcms\",\"rule\":[{\"regexps\":{\"body\":[\"/css/yxcms.css\",\"content=\\\"Yxcms\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"zen cart\",\"rule\":[{\"regexps\":{\"body\":[\"shopping cart program by Zen Cart\"],\"header\":[\"Set-Cookie: zenid=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"zend framework\",\"rule\":[{\"regexps\":{\"header\":[\"ZEND=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"zendserver\",\"rule\":[{\"regexps\":{\"header\":[\"ZendServer\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"zenoss\",\"rule\":[{\"regexps\":{\"body\":[\"/zport/dmd/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"zeus\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Zeus\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"zikula_cms\",\"rule\":[{\"regexps\":{\"header\":[\"ZKSID2\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"zikula_framework\",\"rule\":[{\"regexps\":{\"header\":[\"ZIKULASID3\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"zimbra\",\"rule\":[{\"regexps\":{\"header\":[\"ZM_TEST\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"zkteco公司产品\",\"rule\":[{\"regexps\":{\"body\":[\"/media/images/ZKECO16.ico\",\"ZKTeco Inc. All Rights Reserved\"],\"header\":[\"sessionidadms\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"zoneminder\",\"rule\":[{\"regexps\":{\"body\":[\"ZoneMinder Login\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"zoom-search-engine\",\"rule\":[{\"regexps\":{\"body\":[\"name=\\\"zoom_query\\\"\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"zope\",\"rule\":[{\"regexps\":{\"header\":[\"zope\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"zotonic\",\"rule\":[{\"regexps\":{\"body\":[\"powered by: Zotonic\",\"/lib/js/apps/zotonic-1.0\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"zte-iad\",\"rule\":[{\"regexps\":{\"body\":[\"/image/banner_I532.jpg\",\"/image/I202.gif\",\"/image/banner_top.jpg\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"zte_mifi_une\",\"rule\":[{\"regexps\":{\"body\":[\"MiFi UNE 4G LTE\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"zte_zsrv2_router\",\"rule\":[{\"regexps\":{\"body\":[\"ZSRV2路由器Web管理系统\",\"ZTE Corporation. All Rights Reserved.\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"zyxel\",\"rule\":[{\"favicon\":{\"mmh3\":[\"943925975\",\"-882760066\"]},\"regexps\":{\"body\":[\"Forms/rpAuth_1\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"一启快\",\"rule\":[{\"regexps\":{\"header\":[\"yiqikuai.com\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"一采通\",\"rule\":[{\"regexps\":{\"body\":[\"/custom/GroupNewsList.aspx?GroupId=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"中兴路由器\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Mini web server 1.0 ZTE corp 2005.\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"中网可信网站权威数据库\",\"rule\":[{\"regexps\":{\"body\":[\"https://ss.knet.cn/verifyseal.dll\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"主机宝\",\"rule\":[{\"regexps\":{\"body\":[\"您访问的是主机宝服务器默认页\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"乐视路由器\",\"rule\":[{\"regexps\":{\"body\":[\"乐视路由器\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"云因网上书店\",\"rule\":[{\"regexps\":{\"body\":[\"main/building.cfm\",\"href=\\\"../css/newscomm.css\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"云锁\",\"rule\":[{\"regexps\":{\"header\":[\"yunsuo_session_verify\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"任我行电商\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"366EC\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"企业版qq\",\"rule\":[{\"regexps\":{\"body\":[\"http://wpa.b.qq.com/cgi/wpa.php\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"佳能网络摄像头(canon network cameras)\",\"rule\":[{\"regexps\":{\"body\":[\"/viewer/live/en/live.html\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"创星伟业校园网群\",\"rule\":[{\"regexps\":{\"body\":[\"javascripts/float.js\",\"vcxvcxv\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"北京清科锐华cemis\",\"rule\":[{\"regexps\":{\"body\":[\"/theme/2009/image\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"北京金盘鹏图软件\",\"rule\":[{\"regexps\":{\"body\":[\"SpeakIntertScarch.aspx\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"北京阳光环球建站系统\",\"rule\":[{\"regexps\":{\"body\":[\"bigSortProduct.asp?bigid\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"北创图书检索系统\",\"rule\":[{\"regexps\":{\"body\":[\"opac_two\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"fusionaccess\",\"rule\":[{\"regexps\":{\"body\":[\"FusionAccess\"],\"header\":[\"FusionAccess\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"华为 mcu\",\"rule\":[{\"regexps\":{\"body\":[\"McuR5-min.js\",\"MCUType.js\",\"huawei MCU\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"华为 netopen\",\"rule\":[{\"regexps\":{\"body\":[\"/netopen/theme/css/inFrame.css\",\"Huawei NetOpen System\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"华为（huawei）secoway设备\",\"rule\":[{\"regexps\":{\"header\":[\"Secoway\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"南方数据\",\"rule\":[{\"regexps\":{\"body\":[\"/SouthidcKeFu.js\",\"CONTENT=\\\"Copyright 2003-2015 - Southidc.net\",\"/Southidcj2f.Js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"同城多用户商城\",\"rule\":[{\"regexps\":{\"body\":[\"style_chaoshi\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"地平线cms\",\"rule\":[{\"regexps\":{\"body\":[\"labelOppInforStyle\",\"Powered by deep soon\",\"search_result.aspx\",\"frmsearch\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"埃森诺网络服务质量检测系统\",\"rule\":[{\"regexps\":{\"body\":[\"埃森诺网络服务质量检测系统 \"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"大米cms\",\"rule\":[{\"regexps\":{\"body\":[\"大米CMS-\",\"content=\\\"damicms\",\"content=\\\"大米CMS\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"天柏在线培训/考试系统\",\"rule\":[{\"regexps\":{\"body\":[\"App_Image/PXSystem\",\"App_Image/System\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"安慧网盾\",\"rule\":[{\"regexps\":{\"header\":[\"Protected-By: AnHui Web Firewall\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"小米路由器\",\"rule\":[{\"regexps\":{\"body\":[\"小米路由器\"],\"header\":[\"Tx-Server: MiXr\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"小脑袋\",\"rule\":[{\"regexps\":{\"body\":[\"http://stat.xiaonaodai.com/stat.php\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"小蚂蚁\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by 小蚂蚁地方门户网站系统\",\"/Template/Ant/Css/AntHomeComm.css\"],\"header\":[\"AntXiaouserslogin\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"帕拉迪统一安全管理和综合审计系统\",\"rule\":[{\"regexps\":{\"body\":[\"module/image/pldsec.css\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"帝友p2p\",\"rule\":[{\"regexps\":{\"body\":[\"/js/diyou.js\",\"src=\\\"/dyweb/dythemes\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"微普外卖点餐系统\",\"rule\":[{\"regexps\":{\"body\":[\"Author\\\" content=\\\"微普外卖点餐系统\",\"Powered By 点餐系统\",\"userfiles/shoppics/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"微门户\",\"rule\":[{\"regexps\":{\"body\":[\"/tpl/Home/weimeng/common/css/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"快网\",\"rule\":[{\"regexps\":{\"header\":[\"Fw-Via: \"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"慧学云教育\",\"rule\":[{\"regexps\":{\"body\":[\"ctl00_ContentPlaceHolder1_dltTopVideos\"],\"header\":[\"SchoolCopyRight\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"护卫神主机管理\",\"rule\":[{\"regexps\":{\"body\":[\"护卫神·主机管理系统\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"护卫神网站安全系统\",\"rule\":[{\"regexps\":{\"body\":[\"护卫神.网站安全系统\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"擎天电子政务\",\"rule\":[{\"regexps\":{\"body\":[\"App_Themes/1/Style.css\",\"window.location = \\\"homepages/index.aspx\",\"homepages/content_page.aspx\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"斐讯fortress\",\"rule\":[{\"regexps\":{\"body\":[\"斐讯Fortress防火墙\",\"\\u003cmeta name=\\\"author\\\" content=\\\"上海斐讯数据通信技术有限公司\\\" /\\u003e\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"新浪sae\",\"rule\":[{\"regexps\":{\"body\":[\"lib.sinaapp.com\"],\"header\":[\"lib.sinaapp.com\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"施耐德schneider设备\",\"rule\":[{\"regexps\":{\"header\":[\"Schneider-WEB\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"施耐德_schneider_powerlogic_pm800\",\"rule\":[{\"regexps\":{\"header\":[\"PM800\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"易分析\",\"rule\":[{\"regexps\":{\"body\":[\"易分析 PHPStat Analytics\",\"PHPStat Analytics 网站数据分析系统\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"易普拉格科研管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"lan12-jingbian-hong\",\"科研管理系统，北京易普拉格科技\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"易点cms\",\"rule\":[{\"regexps\":{\"body\":[\"DianCMS_SiteName\",\"DianCMS_用户登陆引用\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"易瑞授权访问系统\",\"rule\":[{\"regexps\":{\"body\":[\"/authjsp/login.jsp\",\"FE0174BB-F093-42AF-AB20-7EC621D10488\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"智睿软件\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"智睿软件\",\"Zhirui.js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"某通用型政府cms\",\"rule\":[{\"regexps\":{\"body\":[\"/deptWebsiteAction.do\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"校园卡管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"Harbin synjones electronic\",\"document.FormPostds.action=\\\"xxsearch.action\",\"/shouyeziti.css\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"梭子鱼设备\",\"rule\":[{\"regexps\":{\"header\":[\"BarracudaHTTP\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"梭子鱼防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"http://www.barracudanetworks.com?a=bsf_product\\\" class=\\\"transbutton\",\"/cgi-mod/header_logo.cgi\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"武汉弘智科技\",\"rule\":[{\"regexps\":{\"body\":[\"研发与技术支持：武汉弘智科技有限公司\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"水星mw300r\",\"rule\":[{\"regexps\":{\"header\":[\"MW300R\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"汉柏安全网关\",\"rule\":[{\"regexps\":{\"body\":[\"OPZOON - \"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"汉码软件\",\"rule\":[{\"regexps\":{\"body\":[\"汉码软件\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"沃科网异网同显系统\",\"rule\":[{\"regexps\":{\"body\":[\"沃科网\",\"异网同显系统\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"海盗云商(haidao)\",\"rule\":[{\"regexps\":{\"body\":[\"haidao.web.general.js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sangfor-ssl-vpn\",\"rule\":[{\"regexps\":{\"body\":[\"login_psw.csp\"],\"header\":[\"TWFID\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"深信服防火墙类产品\",\"rule\":[{\"regexps\":{\"body\":[\"SANGFOR FW\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"爱快流控路由\",\"rule\":[{\"regexps\":{\"body\":[\"爱快\",\"/resources/images/land_prompt_ico01.gif\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"爱思华宝信息服务器\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by \\u003ca href=\\\"http://www.icewarp.com\"],\"header\":[\"IceWarp\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"牛逼cms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"niubicms\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"瑞友天翼_应用虚拟化系统\",\"rule\":[{\"regexps\":{\"body\":[\"瑞友天翼\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"用友erp-nc\",\"rule\":[{\"regexps\":{\"body\":[\"/nc/servlet/nc.ui.iufo.login.Index\",\"用友新世纪\",\"logo/images/ufida\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"用友u8\",\"rule\":[{\"regexps\":{\"body\":[\"getFirstU8Accid\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"用友ufida\",\"rule\":[{\"regexps\":{\"body\":[\"/System/Login/Login.asp?AppID=\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"用友商战实践平台\",\"rule\":[{\"regexps\":{\"body\":[\"Login_Main_BG\",\"Login_Owner\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"百为智能流控路由器\",\"rule\":[{\"regexps\":{\"body\":[\"BYTEVALUE 智能流控路由器\",\"\\u003ca href=\\\"http://www.bytevalue.com/\\\" target=\\\"_blank\\\"\\u003e\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"百为路由\",\"rule\":[{\"regexps\":{\"body\":[\"提交验证的id必须是ctl_submit\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"睿博士云办公系统\",\"rule\":[{\"regexps\":{\"body\":[\"/studentSign/toLogin.di\",\"/user/toUpdatePasswordPage.di\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"磊科产品\",\"rule\":[{\"regexps\":{\"header\":[\"netcore\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"福富安全基线管理\",\"rule\":[{\"regexps\":{\"body\":[\"align=\\\"center\\\"\\u003e福富软件\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"科蚁cms\",\"rule\":[{\"regexps\":{\"body\":[\"keyicms：keyicms\",\"Powered by \\u003ca href=\\\"http://www.keyicms.com\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"科迈ras系统\",\"rule\":[{\"regexps\":{\"body\":[\"科迈RAS\",\"type=\\\"application/npRas\",\"远程技术支持请求：\\u003ca href=\\\"http://www.comexe.cn\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"管理易\",\"rule\":[{\"regexps\":{\"body\":[\"管理易\",\"minierp\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"绿盟下一代防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"NSFOCUS NF\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"网动云视讯平台\",\"rule\":[{\"regexps\":{\"body\":[\"/js/roomHeight.js\",\"meetingShow!show.action\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"腾讯移动分析\",\"rule\":[{\"regexps\":{\"body\":[\"tajs.qq.com\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"苏亚星校园管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"/ws2004/Public/\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"苹果cms\",\"rule\":[{\"regexps\":{\"body\":[\"maccms:voddaycount\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"蓝盾bdwebguard\",\"rule\":[{\"regexps\":{\"body\":[\"BACKGROUND: url(images/loginbg.jpg) #e5f1fc\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"蓝讯\",\"rule\":[{\"regexps\":{\"header\":[\"Powered-By-ChinaCache\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"西部数码\",\"rule\":[{\"regexps\":{\"header\":[\"WT263CDN\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"authenticate\",\"rule\":[{\"regexps\":{\"header\":[\"Www-Authenticate\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"贷齐乐p2p\",\"rule\":[{\"regexps\":{\"body\":[\"/js/jPackageCss/jPackage.css\",\"src=\\\"/js/jPackage\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"金龙卡金融化一卡通网站查询子系统\",\"rule\":[{\"regexps\":{\"body\":[\"金龙卡金融化一卡通网站查询子系统\",\"location.href=\\\"homeLogin.action\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"锐商企业cmsc\",\"rule\":[{\"regexps\":{\"body\":[\"href=\\\"/Writable/ClientImages/mycss.css\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"锐捷应用控制引擎\",\"rule\":[{\"regexps\":{\"body\":[\"window.open(\\\"/login.do\\\",\\\"airWin\",\"锐捷应用控制引擎\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"青果软件\",\"rule\":[{\"regexps\":{\"body\":[\"KINGOSOFT\",\"SetKingoEncypt.jsp\",\"/jkingo.js\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"redmine\",\"rule\":[{\"favicon\":{\"mmh3\":[\"603314\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"netcom technology\",\"rule\":[{\"favicon\":{\"mmh3\":[\"5471989\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"netcomwireless\",\"rule\":[{\"favicon\":{\"mmh3\":[\"5542029\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"watchguard\",\"rule\":[{\"favicon\":{\"mmh3\":[\"15831193\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"universal devices\",\"rule\":[{\"favicon\":{\"mmh3\":[\"16202868\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dlink webcam\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1354933624\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"remobjects sdk\",\"rule\":[{\"favicon\":{\"mmh3\":[\"72005642\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"windriver-webserver\",\"rule\":[{\"favicon\":{\"mmh3\":[\"74935566\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"polycom\",\"rule\":[{\"favicon\":{\"mmh3\":[\"77044418\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"servicenow\",\"rule\":[{\"favicon\":{\"mmh3\":[\"86919334\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"askey cable modem\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1710631084\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"jaws web server\",\"rule\":[{\"favicon\":{\"mmh3\":[\"768231242\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"domoticz\",\"rule\":[{\"favicon\":{\"mmh3\":[\"90680708\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"fireeye\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-842192932\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"tandberg\",\"rule\":[{\"favicon\":{\"mmh3\":[\"97604680\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"slack-instance\",\"rule\":[{\"favicon\":{\"mmh3\":[\"99395752\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mdaemon remote administration\",\"rule\":[{\"favicon\":{\"mmh3\":[\"99432374\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"vigor router\",\"rule\":[{\"favicon\":{\"mmh3\":[\"104189364\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"springboot\",\"rule\":[{\"favicon\":{\"mmh3\":[\"116323821\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"teltonika\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1612496354\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sangfor\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1926484046\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"liferay portal\",\"rule\":[{\"favicon\":{\"mmh3\":[\"129457226\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"synology diskstation\",\"rule\":[{\"favicon\":{\"mmh3\":[\"149371702\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"technicolor / thomson speedtouch\",\"rule\":[{\"favicon\":{\"mmh3\":[\"156312019\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"天融信设备\",\"rule\":[{\"favicon\":{\"md5\":[\"1eef96b633ad6f6463eecc3ffa78c9e7\"],\"mmh3\":[\"162934974\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"vodafone\",\"rule\":[{\"favicon\":{\"mmh3\":[\"165976831\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"wordpress under construction icon\",\"rule\":[{\"favicon\":{\"mmh3\":[\"191654058\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"shenzhen coship electronics co.\",\"rule\":[{\"favicon\":{\"mmh3\":[\"224536051\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"rocket chat\",\"rule\":[{\"favicon\":{\"mmh3\":[\"225632504\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"seagate technology\",\"rule\":[{\"favicon\":{\"mmh3\":[\"240136437\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"parse\",\"rule\":[{\"favicon\":{\"mmh3\":[\"246145559\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"gpon home gateway\",\"rule\":[{\"favicon\":{\"mmh3\":[\"251106693\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dd wrt\",\"rule\":[{\"favicon\":{\"mmh3\":[\"252728887\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"wdcp cloud host management system\",\"rule\":[{\"favicon\":{\"mmh3\":[\"255892555\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"huawei\",\"rule\":[{\"favicon\":{\"md5\":[\"e76a1f0f3dfc497ff35e422fcf313655\"],\"mmh3\":[\"561563906\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"intelbras sa\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1343070146\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"node-red\",\"rule\":[{\"favicon\":{\"mmh3\":[\"321591353\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"airwatch\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1153873472\",\"-1863663974\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"iomega nas\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-689902428\",\"-600508822\",\"-2056503929\",\"-1656695885\",\"-401934945\",\"-613216179\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mobileiron\",\"rule\":[{\"favicon\":{\"mmh3\":[\"2086228042\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dell sonicwall\",\"rule\":[{\"favicon\":{\"mmh3\":[\"363324987\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"moxapass\",\"rule\":[{\"favicon\":{\"mmh3\":[\"381100274\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"openvpn\",\"rule\":[{\"favicon\":{\"mmh3\":[\"396533629\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"exostar – managed access gateway\",\"rule\":[{\"favicon\":{\"mmh3\":[\"420473080\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"smartping\",\"rule\":[{\"favicon\":{\"mmh3\":[\"430582574\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"pi star\",\"rule\":[{\"favicon\":{\"mmh3\":[\"432733105\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"microsoft owa\",\"rule\":[{\"favicon\":{\"mmh3\":[\"442749392\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"wampserver\",\"rule\":[{\"favicon\":{\"mmh3\":[\"929825723\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"zte corporation\",\"rule\":[{\"favicon\":{\"mmh3\":[\"459900502\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"jeedom\",\"rule\":[{\"favicon\":{\"mmh3\":[\"462223993\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"axcient replibit management server\",\"rule\":[{\"favicon\":{\"mmh3\":[\"475379699\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"exacq\",\"rule\":[{\"favicon\":{\"mmh3\":[\"476213314\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"webmin\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1038557304\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ispconfig\",\"rule\":[{\"favicon\":{\"mmh3\":[\"483383992\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ip camera\",\"rule\":[{\"favicon\":{\"mmh3\":[\"492290497\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"b2bbuilder\",\"rule\":[{\"favicon\":{\"mmh3\":[\"492941040\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"aplikasi\",\"rule\":[{\"favicon\":{\"mmh3\":[\"494866796\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"farming simulator dedicated server\",\"rule\":[{\"favicon\":{\"mmh3\":[\"509789953\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"trendnet ip camera\",\"rule\":[{\"favicon\":{\"mmh3\":[\"512590457\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"d-link\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1897829998\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"lenel\",\"rule\":[{\"favicon\":{\"mmh3\":[\"538585915\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"liquidfiles\",\"rule\":[{\"favicon\":{\"mmh3\":[\"541087742\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"keenetic\",\"rule\":[{\"favicon\":{\"mmh3\":[\"547282364\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"totolink\",\"rule\":[{\"favicon\":{\"mmh3\":[\"547474373\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"asus aicloud\",\"rule\":[{\"favicon\":{\"mmh3\":[\"552592949\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sails\",\"rule\":[{\"favicon\":{\"mmh3\":[\"552597979\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"canvas lms\",\"rule\":[{\"favicon\":{\"mmh3\":[\"575613323\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"metasploit\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-127886975\",\"-1235192469\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"paloalto\",\"rule\":[{\"favicon\":{\"mmh3\":[\"602431586\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hitron technologies\",\"rule\":[{\"favicon\":{\"mmh3\":[\"607846949\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sonicwall\",\"rule\":[{\"favicon\":{\"mmh3\":[\"631108382\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mobotix camera\",\"rule\":[{\"favicon\":{\"mmh3\":[\"661332347\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"innovaphone\",\"rule\":[{\"favicon\":{\"mmh3\":[\"671221099\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"google\",\"rule\":[{\"favicon\":{\"mmh3\":[\"708578229\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hitron technologies inc.\",\"rule\":[{\"favicon\":{\"mmh3\":[\"711742418\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"amazon\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1544605732\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"keyhelp\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1267819858\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"paradox ip module\",\"rule\":[{\"favicon\":{\"mmh3\":[\"727253975\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ibm notes\",\"rule\":[{\"favicon\":{\"mmh3\":[\"728788645\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"unifi video controller\",\"rule\":[{\"favicon\":{\"mmh3\":[\"768816037\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"fastpanel hosting\",\"rule\":[{\"favicon\":{\"mmh3\":[\"774252049\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"lucee!\",\"rule\":[{\"favicon\":{\"mmh3\":[\"784872924\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"openstack\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-923088984\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"checkpoint\",\"rule\":[{\"favicon\":{\"mmh3\":[\"794809961\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"solarwinds serv-u ftp server\",\"rule\":[{\"favicon\":{\"mmh3\":[\"812385209\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"bomgar support portal\",\"rule\":[{\"favicon\":{\"mmh3\":[\"829321644\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dahua storm\",\"rule\":[{\"favicon\":{\"mmh3\":[\"2019488876\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"lantronix\",\"rule\":[{\"favicon\":{\"mmh3\":[\"882208493\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"iw\",\"rule\":[{\"favicon\":{\"mmh3\":[\"896412703\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"netflix\",\"rule\":[{\"favicon\":{\"mmh3\":[\"902521196\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"honeywell\",\"rule\":[{\"favicon\":{\"mmh3\":[\"903086190\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"loxone\",\"rule\":[{\"favicon\":{\"mmh3\":[\"904434662\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hp printer / server\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-2144363468\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"multilaser\",\"rule\":[{\"favicon\":{\"mmh3\":[\"916642917\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"gogs\",\"rule\":[{\"favicon\":{\"mmh3\":[\"917966895\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"handle proxy\",\"rule\":[{\"favicon\":{\"mmh3\":[\"926501571\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"jboss application server 7\",\"rule\":[{\"favicon\":{\"mmh3\":[\"937999361\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mersive solstice\",\"rule\":[{\"favicon\":{\"mmh3\":[\"938616453\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"zyxel\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-882760066\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"deluge\",\"rule\":[{\"favicon\":{\"mmh3\":[\"944969688\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"3cx phone system\",\"rule\":[{\"favicon\":{\"mmh3\":[\"970132176\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"struxureware\",\"rule\":[{\"favicon\":{\"mmh3\":[\"979634648\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cake php\",\"rule\":[{\"favicon\":{\"mmh3\":[\"980692677\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"huawei\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-884776764\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"caprover\",\"rule\":[{\"favicon\":{\"mmh3\":[\"988422585\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"pfsense\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1405460984\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"airos\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-697231354\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dlink router\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1037387972\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sophos user portal/vpn portal\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1045696447\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"netgear\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1319025408\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"securepoint\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1051648103\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"tecvoz\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1452159623\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"untangle\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1103599349\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"simplehelp\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1117165781\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"baidu\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1507567067\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ricoh\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1135165421\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"aruba\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1142227528\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ubiquiti unms\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1157789622\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"boaserver\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1169183049\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"react app\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1170430551\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"drupal\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-167656799\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"openfire admin console\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1211608009\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"alibaba cloud\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1227052603\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"apple\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1498185948\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"onera\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1234311970\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"synology vpn plus\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1235070469\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cpanel login\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1544230796\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"jupyterhub\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1248917303\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ubiquiti aircube\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1249285083\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cafe24\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1251810433\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"jamf pro login\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1262005940\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mautic\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1273982002\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"tp-link\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1842351293\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"netdata\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1302486561\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"octoprint\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1307375944\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"avigilon\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1318124267\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"form.io\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1319699698\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"shock\\u0026innovation!! netis setup\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1326164945\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"alfresco\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1333537166\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sap conversational ai\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1347937389\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"outlook web application\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1356662359\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"supermicro intelligent management\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1410610129\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"icecast streaming media server\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1424295654\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"zte\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1427976651\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"salesforce\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1433417005\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"barracuda\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1436966696\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cyberoam\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1462981117\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cradlepoint technology\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1466912879\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ligowave\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1467395679\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"arcadyan o2 box\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1479202414\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"syncthru web service\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1483097076\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sonarqube\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1485257654\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mk-auth\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1490343308\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"elastic\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1611729805\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"netdata dashboard\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-182423204\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"technicolor\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-2138771289\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sophos cyberoam\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1601194732\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"macos\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1629518721\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"université toulouse 1 capitole\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1632780968\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"vmware secure file transfer\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1642701741\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"infinet wireless | wanflex\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1648531157\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"asustor\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1678170702\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ibm server\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1726027799\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"justhost\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1734609466\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"bintec elmeg\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-375623619\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"asp.net favicon\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1772087922\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"truvision nvr\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1782271534\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"wdcp\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1786752597\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"amh\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1822002133\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"technicolor gateway\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1835479497\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"openproject\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1836828108\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"freebox os\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1838417872\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"gargoyle router\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1862132268\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"alibi nvr\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1876585825\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"eltex\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1877797890\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"vmware horizon\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1255992602\",\"-991123252\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"upc ceska republica\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1911253822\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"material dashboard\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1913538826\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"nec webpro\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1922032523\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"openwrt luci\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-675839242\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"metabase\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1953726032\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"vesta hosting control panel\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1954835352\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"openerp\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1966198264\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"gitea\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1969970750\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"entrolink\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1973665246\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sunny webbox\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1975413433\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"worldclient for mdaemon\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-35107086\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"niagara\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1991562061\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cpanel\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1993518473\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"realtek\",\"rule\":[{\"favicon\":{\"mmh3\":[\"2055322029\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hp ilo\",\"rule\":[{\"favicon\":{\"mmh3\":[\"2059618623\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sentry\",\"rule\":[{\"favicon\":{\"mmh3\":[\"2063428236\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"digium\",\"rule\":[{\"favicon\":{\"mmh3\":[\"2068154487\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"nomadix access gateway\",\"rule\":[{\"favicon\":{\"mmh3\":[\"2071993228\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ferozo panel\",\"rule\":[{\"favicon\":{\"mmh3\":[\"2072198544\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"pkp\",\"rule\":[{\"favicon\":{\"mmh3\":[\"2099342476\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"wijungle\",\"rule\":[{\"favicon\":{\"mmh3\":[\"2113497004\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mailwizz\",\"rule\":[{\"favicon\":{\"mmh3\":[\"2127152956\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"chainpoint\",\"rule\":[{\"favicon\":{\"mmh3\":[\"2128230701\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"juniper\",\"rule\":[{\"favicon\":{\"mmh3\":[\"2141724739\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mailcow\",\"rule\":[{\"favicon\":{\"mmh3\":[\"2146763496\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cnservers llc\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-235701012\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"lacie\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1277814690\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"angular io\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1255347784\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"react\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-2009722838\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"bamboo\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1379982221\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"archivematica\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1378182799\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"tcn\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-702384832\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cx\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-532394952\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ace\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-183163807\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"opengeo suite\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-609520537\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dgraph ratel\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1961046099\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"kubeflow\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1203021870\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"fritz!box\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-219752612\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"plesk\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-981606721\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"huawei_router\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1395400951\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"lancom\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-325082670\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"tilginab\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1346447358\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"zyxel zywall\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-484708885\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ubiquiti login portals\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1446794564\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ubnt router\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1677255344\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"intelbras wireless\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-359621743\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"kerio connect\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-677167908\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ikuai networks\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-271448102\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"bluehost\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1119613926\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ruckus wireless\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-2069844696\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"bitnami\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1607644090\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"netasq - secure / stormshield\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1929912510\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sap netweaver\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-266008933\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sap id service: log on\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1967743928\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"palo alto networks\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-318947884\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"isp manager\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1151675028\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"axis\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1616143106\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sierra wireless ace manager\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1571472432\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"instar ip cameras\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1169314298\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"residential gateway\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1933493443\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"arris\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1477563858\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"plex server\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-895890586\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cambium networks\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-435817905\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"parallels plesk panel\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-771764544\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"fireware watchguard\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-569941107\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cacaoweb\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1738184811\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"linksys smart wi-fi\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-2063036701\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"lwip\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1205024243\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"blue iris\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-520888198\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mitel networks\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1922044295\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"prtg network monitor\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-655683626\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"wildfly\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1666561833\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"workday\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-459291760\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"yii php framework\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1298108480\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"luma surveillance\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1351901211\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"openrg\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-986816620\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"herospeed digital technology co.\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-873627015\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"magento\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-38580010\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"shoutcast server\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-632583950\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"adobe campaign classic\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-333791179\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"niagara web server\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-676077969\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"tenda web master\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-2145085239\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"prometheus\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1399433489\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"tableau\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1441956789\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mdaemon webmail\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-766957661\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"microhard systems\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1723752240\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"skype\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1807411396\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"moodle\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-438482901\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"radix\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1492966240\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"blackboard\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1593651747\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"jupyter notebook\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-895963602\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"hostmonster - web hosting\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-972810761\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"mofinetwork\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1702393021\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ossia camera\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-374235895\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dell\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1153950306\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"starface voip software\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-332324409\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"netis\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-594256627\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"whm\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-649378830\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ghost\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1231681737\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"avtech ip surveillance\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-194439630\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"odoo\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-617743584\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"netport software\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1124868062\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"qnap nas virtualization station\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1041180225\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dahua\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1466785234\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"smartermail\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1935525788\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"seafile\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-12700016\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"netgear readynas\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-137295400\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ipecs\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-195508437\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"bet365\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-2116540786\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"reolink\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-38705358\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"idera\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-450254253\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"proofpoint\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1630354993\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"kerio connect webmail\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1678298769\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"ruijie networks\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-692947551\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"homegrown website hosting\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-421986013\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dvr\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-560297467\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"apache haus\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-632070065\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"vivotek\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1654229048\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"microsoft iis\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1414475558\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"univention portal\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1697334194\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"nos router\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-831826827\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"tongda\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-759108386\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"crushftp\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1022206565\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"endian firewall\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1225484776\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"kerio control firewall\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-631002664\",\"-466504476\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"netiaspot\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-978656757\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"adb broadband s.p.a.\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-587741716\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"arris\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-360566773\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"flussonic\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-393788031\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"communigate\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1588746893\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"powermta monitoring\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1788112745\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"smartlan/g\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-644617577\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"checkpoint\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1822098181\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"утм\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1131689409\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"openmediavault\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-693082538\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"lupus electronics xt\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-299324825\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"vanderbilt spc\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1162730477\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"vzpp plesk\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1268095485\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"owncloud\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1616115760\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sentora\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-2054889066\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"digital keystone\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-373674173\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"wispr\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-106646451\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"web client pro\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-956471263\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dokuwiki\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-630493013\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"c-lodop\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-329747115\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"twonky server\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-878891718\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"windows azure\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-2125083197\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"centurylink modem gui login \",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1908556829\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"opnsense\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1148190371\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"rumpus\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1528414776\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"spiceworks\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-2117390767\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"teamcity\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1944119648\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"instar full-hd ip-camera\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1748763891\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"alienvault\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1779611449\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"arbor networks\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1745552996\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"accrisoft\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1275148624\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"yasni\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-178685903\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"shinobi\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-10974981\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"siemens ozw772\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-336242473\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"claimtime\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-687783882\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"surfilter ssl vpn portal\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-590892202\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"kyocera\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-50306417\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"chef automate\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-276759139\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"keepitsafe management console\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1738727418\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"entronix energy management platform\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-368490461\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"unified management console\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1775553655\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"traccar gps tracking\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-335153896\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"combivox\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-342262483\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"truvision\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1093172228\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"spamexperts\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1688698891\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"sonatype nexus repository manager\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1546574541\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"idirect canada\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-256828986\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"tc-group\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1734573358\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"deluge web ui\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1589842876\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"otrs\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-2006308185\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"bosch security systems\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1702769256\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"motioneye\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-923693877\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"saia burgess controls – pcd\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1547576879\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"abilis\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-166151761\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"glpi\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1474875778\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"cradlepoint\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1457536113\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"myasp\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-736276076\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"okofen pellematic\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-625364318\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"dnn\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1465479343\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"microsoft outlook\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1249852061\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"用友影像管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"img/login/ufida.ico\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"用友 NC cloud\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta http-equiv=refresh content=0;url=nccloud\\u003e\",\"window.location.href=\\\"platform/pub/welcome.do\\\";\",\"window.location.href=\\\"html/downloadBroswer.html\\\";\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"契约锁\",\"rule\":[{\"regexps\":{\"body\":[\"/qyswebapp\"]}},{\"favicon\":{\"mmh3\":[\"738823048\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"启迪国信uem\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cspan class=\\\"remember-pw\\\" data-i18n=\\\"op.rmbAccount\\\"\\u003e\"]}}],\"tag\":[\"other\"]},{\"link\":\"\",\"name\":\"UCML平台\",\"rule\":[{\"regexps\":{\"body\":[\"ucmlskin_v1.0\"]}}],\"tag\":[\"other\"]},{\"level\":2,\"link\":\"\",\"name\":\"solr\",\"rule\":[{\"info\":\"solr_admin_leak\",\"regexps\":{\"body\":[\"\\u003ctitle\\u003eSolr Admin\\u003c/title\\u003e\"]},\"send_data\":\"/solr\"}],\"tag\":[\"spray\"]},{\"level\":2,\"link\":\"\",\"name\":\"axis2\",\"rule\":[{\"regexps\":{\"body\":[\"faultstring\"]},\"send_data\":\"/axis2/services/testunknown\"}],\"tag\":[\"spray\"]},{\"level\":2,\"link\":\"\",\"name\":\"华天动力OA\",\"rule\":[{\"regexps\":{\"body\":[\"/OAapp/htpages/app/module/login/8.0Login.jsp\"]},\"send_data\":\"/OAapp\"}],\"tag\":[\"spray\"]},{\"level\":2,\"link\":\"\",\"name\":\"jenkins\",\"rule\":[{\"regexps\":{\"body\":[\"jenkins-checkbox\"]},\"send_data\":\"/jenkins\"}],\"tag\":[\"spray\"]},{\"level\":2,\"link\":\"\",\"name\":\"xxl-job\",\"rule\":[{\"regexps\":{\"body\":[\"/xxl-job-admin/static/favicon.ico\"]},\"send_data\":\"/xxl-job-admin\"}],\"tag\":[\"spray\"]},{\"level\":2,\"link\":\"\",\"name\":\"用友 CRM\",\"rule\":[{\"regexps\":{\"body\":[\"C535AD4F2E753F29CE1118EDB8B7913FB96C145FC21A1E9BA9\"]},\"send_data\":\"/login/login.php\"}],\"tag\":[\"spray\"]},{\"level\":2,\"link\":\"\",\"name\":\"pageoffice\",\"rule\":[{\"regexps\":{\"body\":[\"PageOffice\"]},\"send_data\":\"/poserver.zz\"}],\"tag\":[\"spray\"]},{\"level\":2,\"link\":\"\",\"name\":\"uni-emm\",\"rule\":[{\"regexps\":{\"body\":[\"com.leagsoft.emm\"]},\"send_data\":\"/emm-api\"}],\"tag\":[\"spray\"]},{\"level\":2,\"link\":\"\",\"name\":\"smartbi\",\"rule\":[{\"regexps\":{\"body\":[\"smartbi-version\",\"smartbi.gcf.gcfutil\",\"writeCustomBgImg.jsp?theType=LoginLogo\",\"smartbiVersion\",\"Smartbi Server Administration Console\"]},\"send_data\":\"/vision/index.jsp\"},{\"regexps\":{\"body\":[\"smartbi-version\",\"smartbi.gcf.gcfutil\",\"writeCustomBgImg.jsp?theType=LoginLogo\",\"smartbiVersion\",\"Smartbi Server Administration Console\"]},\"send_data\":\"/smartbi/index.jsp\"},{\"regexps\":{\"body\":[\"vision/index.jsp\"],\"header\":[\"Path=/smartbi\"]},\"send_data\":\"/smartbi/\"}],\"tag\":[\"spray\"]},{\"level\":2,\"link\":\"\",\"name\":\"玛格泰克网刊系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ca href=\\\"/ht-password.jsp\",\"北京玛格泰克科技发展有限公司\"]},\"send_data\":\"/ht-login.jsp\"}],\"tag\":[\"spray\"]},{\"link\":\"\",\"name\":\"新视窗 BUG管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"新视窗-BUG管理系统\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ThinkSNS\",\"rule\":[{\"regexps\":{\"body\":[\"ThinkSNS\",\"/theme/stv1/_static\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MSVOD cms\",\"rule\":[{\"regexps\":{\"body\":[\"/msvod.js\",\"images/lists?cid=\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DESTOON-B2B网站管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"DESTOON B2B网站管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"yuysoft 育友通用 数字化校园平台\",\"rule\":[{\"regexps\":{\"body\":[\"杭州育友软件有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Shop7z\",\"rule\":[{\"regexps\":{\"body\":[\"Shop7z购物系统\",\"http://www.Shop7z.com\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"B2BBuilder\",\"rule\":[{\"regexps\":{\"body\":[\"B2BBuilder\"],\"header\":[\"B2Bbuilder\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NITC企业智能营销\",\"rule\":[{\"regexps\":{\"body\":[\"alt=\\\"http://www.nitc.cc\\\" title=\\\"http://www.nitc.cc\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"GxlCMS\",\"rule\":[{\"regexps\":{\"body\":[\"uploads/ting\",\"bookShadow\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"easethink 易想团购管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"easethink\",\"易想团购管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"创想Damall系统\",\"rule\":[{\"regexps\":{\"body\":[\"httphandler/getdata.ashx\",\"DaMall\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"JieqiCMS\",\"rule\":[{\"regexps\":{\"body\":[\"/modules/article/articleinfo.php?id\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WaiKu CMS\",\"rule\":[{\"regexps\":{\"body\":[\"WaiKu\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"JGI\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"JGI - http://www.jgi.com.br\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SiteFactory\",\"rule\":[{\"regexps\":{\"body\":[\"/sitefactory/assets/download.aspx\",\"id=\\\"SiteFactoryForm\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WonderCMS\",\"rule\":[{\"regexps\":{\"body\":[\"WonderCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"APPCMS\",\"rule\":[{\"regexps\":{\"body\":[\"Powerd by AppCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Nuxeo Platform\",\"rule\":[{\"regexps\":{\"body\":[\"Nuxeo Platform\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FSMCMS\",\"rule\":[{\"regexps\":{\"body\":[\"FSMCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"易企Yiqi CMS\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"YiqiCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TaoCMS\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Welcome to taoCMS\",\"/template/taoCMS/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WCS2U\",\"rule\":[{\"regexps\":{\"body\":[\"\\\"by WCS2U.COM\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"RuubikCMS\",\"rule\":[{\"regexps\":{\"body\":[\"RuubikCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Aura\",\"rule\":[{\"regexps\":{\"header\":[\"AuraCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"toendaCMS\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"toendaCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PHP F1\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by PHP F1\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Almnzm\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by Almnzm\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Acidcat CMS\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by Acidcat CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Newscoop\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Newscoop - The open content management system for professional journalists.\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Zcms\",\"rule\":[{\"regexps\":{\"body\":[\"Zcms内容管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"phpyun\",\"rule\":[{\"regexps\":{\"body\":[\"href=\\\"http://www.phpyun.com\\\"\",\"PHPYun\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ThinkAdmin\",\"rule\":[{\"regexps\":{\"body\":[\"/static/admin.js\",\"layui.all.js\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FastAdmin\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by FastAdmin\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LBCMS\",\"rule\":[{\"regexps\":{\"body\":[\"贵州狼邦科技有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WDSCMS\",\"rule\":[{\"regexps\":{\"body\":[\"src=\\\"wds_cms/bilder/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CmsEasy\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"CmsEasy\",\"powered by cmseasy\",\"http://www.cmseasy.cn/service_1.html\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DataLife Engine\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"generator\\\" content=\\\"DataLife Engine\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"phpAA\",\"rule\":[{\"regexps\":{\"body\":[\"www.phpaa.cn\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ESPCMS\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by ESPCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PbootCMS\",\"rule\":[{\"regexps\":{\"body\":[\"PbootCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NZCMS\",\"rule\":[{\"regexps\":{\"body\":[\"NZCMS\",\"/nzcms/plugin\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SIYUCMS\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"SIYUCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"EZCMS\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by EZCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"E-Xoopport\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"E-Xoopport\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Etano\",\"rule\":[{\"regexps\":{\"body\":[\"title=\\\"Etano community builder\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"glFusion\",\"rule\":[{\"regexps\":{\"body\":[\"glFusion\",\"\\u003ca href=\\\"http://www.glfusion.org/\\\" target=\\\"_blank\\\"\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"GetSimple\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"getsimple, easy, content management system\\\"\",\"Powered by GetSimple\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HighWire-Press\",\"rule\":[{\"regexps\":{\"body\":[\"title=\\\"HighWire Press\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"GuppY\",\"rule\":[{\"regexps\":{\"body\":[\"Laurent Duveau - http://www.freeguppy.org/\",\"GuppY\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Exponent CMS\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Exponent Content Management System\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FluentNET\",\"rule\":[{\"regexps\":{\"body\":[\"Fluent\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"phpnews\",\"rule\":[{\"regexps\":{\"body\":[\"phpnews\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"phpBazar\",\"rule\":[{\"regexps\":{\"body\":[\"phpBazar\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Micro CMS\",\"rule\":[{\"regexps\":{\"body\":[\"Solidago Micro CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Mobile Joomla\",\"rule\":[{\"regexps\":{\"body\":[\"JoomlaStatsActivated\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MistCMS\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by MistCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MODX CMS\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"MODX CMS\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"mojoPortal\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by mojoPortal\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MyHobbySite\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by MyHobbySite\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Nukedit\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by Nukedit\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NukeViet\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"NukeViet\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ocPortal\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by ocPortal\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ORCA Platform\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"ORCA Platform\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Koobi CMS\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"(c) Koobi\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LEAP\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Leap\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"openEngine\",\"rule\":[{\"regexps\":{\"body\":[\"openEngine Comment START\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Phpeasydata\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Phpeasydata\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PHPM\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003ePHPFM\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PHP Fusion\",\"rule\":[{\"regexps\":{\"header\":[\"Set-Cookie: fusion\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PHPKIT\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"PHPKIT WCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OpenCMS\",\"rule\":[{\"regexps\":{\"header\":[\"Server: OpenCms\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DocCMS\",\"rule\":[{\"regexps\":{\"body\":[\"Power by DocCms\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TwilightCMS\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-Cms: Twilight CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TechartCMS\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-Cms: Techart CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"webEdition\",\"rule\":[{\"regexps\":{\"body\":[\"webEdition CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"BoyowCMS\",\"rule\":[{\"regexps\":{\"body\":[\"publish by BoyowCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Tipask\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"author\\\" content=\\\"Tipask Team\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ZikulaCMS\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"generator\\\" content=\\\"zikula\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"UMI.CMS\",\"rule\":[{\"regexps\":{\"header\":[\"X-Generated-By: UMI.CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"EasywebCMS\",\"rule\":[{\"regexps\":{\"header\":[\"Generator: Easyweb CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SynkronVia\",\"rule\":[{\"regexps\":{\"header\":[\"X-Generator: Synkron Via CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Mura CMS\",\"rule\":[{\"regexps\":{\"header\":[\"Generator: Mura CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SamanPortal\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-By: sisRapid Framework\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Diferior\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by Diferior\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"欧索软件\",\"rule\":[{\"regexps\":{\"body\":[\"技术支持：江苏欧索软件有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"易科士就业信息管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"Powered By 成都易科士信息产业有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"geniusocean\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"author\\\" content=\\\"GeniusOcean\\\"\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"xdcms\",\"rule\":[{\"regexps\":{\"body\":[\"/system/templates/xdcms/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TodayMail2.3.0\",\"rule\":[{\"regexps\":{\"body\":[\"TodayMail Anti-Spam Police\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"安逸圈微信管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"description\\\" content=\\\"安逸圈微信管理系统\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"云控公众平台\",\"rule\":[{\"regexps\":{\"body\":[\"云控 - 公众平台自助引擎 - Powered by WE7.CC\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SABnzbd\",\"rule\":[{\"regexps\":{\"body\":[\"SABnzbd\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ECJIA\",\"rule\":[{\"regexps\":{\"header\":[\"ECJIA\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"微盛公众平台自助引擎\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cb\\u003e微盛\\u003c/b\\u003e\\u003c/a\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"思途CMS\",\"rule\":[{\"regexps\":{\"header\":[\"Set-Cookie: computer=deleted;\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ILAS网上图书馆\",\"rule\":[{\"regexps\":{\"body\":[\"欢迎使用ilas网上图书馆\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"BakingSofware\",\"rule\":[{\"regexps\":{\"body\":[\"Baking Sofware - bFirmware -\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"beego\",\"rule\":[{\"regexps\":{\"header\":[\"Server: service-go\",\"Server: go-beego\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Foosun\",\"rule\":[{\"regexps\":{\"body\":[\"For Foosun\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WEBCOMpro CMS\",\"rule\":[{\"regexps\":{\"body\":[\"WEBCOMpro CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"chillyCMS\",\"rule\":[{\"regexps\":{\"header\":[\"chillyCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Chamilo\",\"rule\":[{\"regexps\":{\"header\":[\"Chamilo\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"BoonEx Dolphin\",\"rule\":[{\"regexps\":{\"body\":[\"DolphinPHP\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Campsite\",\"rule\":[{\"regexps\":{\"body\":[\"Campsite\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Calendarix\",\"rule\":[{\"regexps\":{\"body\":[\"Calendarix User Login\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"BrowserCMS\",\"rule\":[{\"regexps\":{\"body\":[\"BrowserCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Contentteller-CMS\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"generator\\\" content=\\\"Esselbach Contentteller CMS\\\" /\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Contao\",\"rule\":[{\"regexps\":{\"body\":[\"/contao.css\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Commerce-Builder\",\"rule\":[{\"regexps\":{\"body\":[\"Server: commerce-builder\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CruxCMS\",\"rule\":[{\"regexps\":{\"body\":[\"Home - CruxSoftware\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"锐商企业CMS\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"博组客中国本地化定制系统 - 基于 COMSHARP CMS\\\"/\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Coppermine\",\"rule\":[{\"regexps\":{\"body\":[\"Coppermine version\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Daisy\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta content=\\\"Daisy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DaDaBIK\",\"rule\":[{\"regexps\":{\"body\":[\"DaDaBIK\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Cowiki\",\"rule\":[{\"regexps\":{\"body\":[\"Cowiki\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CustomCMS\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"generator\\\" content=\\\"CustomCMS\\\"\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CushyCMS\",\"rule\":[{\"regexps\":{\"body\":[\"Cushy.activeTab\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DataLife-Engine\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"generator\\\" content=\\\"DataLife Engine\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Edito-CMS\",\"rule\":[{\"regexps\":{\"body\":[\"title=\\\"Edito CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Echo\",\"rule\":[{\"regexps\":{\"body\":[\"Echo PROD\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Ecomat-CMS\",\"rule\":[{\"regexps\":{\"body\":[\"ECOMAT CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"easyLink-Web-Solutions\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"easyLink\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"EasyConsole-CMS\",\"rule\":[{\"regexps\":{\"body\":[\"window.status='Powered by EasyConsole CMS';\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DotCMS\",\"rule\":[{\"regexps\":{\"body\":[\"www.dotcms.org\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Donations-Cloud\",\"rule\":[{\"regexps\":{\"body\":[\"/donationscloud.css\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Dokeos\",\"rule\":[{\"regexps\":{\"body\":[\"target=\\\"_blank\\\"\\u003eDokeos\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DoceboLMS\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cbody class=\\\"yui-skin-docebo yui-skin-sam\\\"\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Elxis-CMS\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"Generator\\\" content=\\\"Elxis\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Ektron-CMS\",\"rule\":[{\"regexps\":{\"body\":[\"id=\\\"EktronClientManager\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"eSitesBuilder\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eESitesBuilder\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"EPiServer\",\"rule\":[{\"regexps\":{\"body\":[\"EPiServer\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Energine\",\"rule\":[{\"regexps\":{\"body\":[\"/energine.css\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FrogCMS\",\"rule\":[{\"regexps\":{\"body\":[\"\\\"\\u003eFrog CMS\\u003c/a\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Fossil\",\"rule\":[{\"regexps\":{\"body\":[\"by Fossil\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Fidion-CMS\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"generator\\\" content=\\\"fCMS by fidion\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FCMS\",\"rule\":[{\"regexps\":{\"body\":[\"ui/css/fcms-core.css\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Fastpublish-CMS\",\"rule\":[{\"regexps\":{\"body\":[\"fastpublish CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"eZ-Publish\",\"rule\":[{\"regexps\":{\"header\":[\"eZSessionCookie\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Webmatic\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ca href=\\\"http://www.webmatic.it\\\"\\u003eWebmatic\\u003c/a\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Webbler\",\"rule\":[{\"regexps\":{\"header\":[\"WebblerSession\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Web Control Panel\",\"rule\":[{\"regexps\":{\"body\":[\"Web Control Panel Expres\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Viscacha\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"generator\\\" content=\\\"Viscacha\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"VirtueMart\",\"rule\":[{\"regexps\":{\"header\":[\"virtuemart\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Video CMS\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cp\\u003eVideo CMS by \\u003ca target=\\\"_blank\\\" rel=\\\"nofollow\\\" href=\\\"https://www.cobrasoftwares.org\\\"\\u003eCobra Softwares Inc\\u003c/a\\u003e\\u003c/p\\u003e\\u003c/footer\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"UserLand Frontier\",\"rule\":[{\"regexps\":{\"header\":[\"Server: UserLand Frontier\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Umbraco\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003chtml xmlns:umbraco=\\\"http://umbraco.org\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TypoLight\",\"rule\":[{\"regexps\":{\"body\":[\"This website is powered by TYPOlight Open Source CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TYPO3\",\"rule\":[{\"regexps\":{\"body\":[\"This website is powered by TYPO3\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Tribiq\",\"rule\":[{\"regexps\":{\"body\":[\"Tribiq CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TomatoCMS\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"description\\\" content=\\\"TomatoCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WolfCMS\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ca href=\\\"http://www.wolfcms.org/\\\" title=\\\"Wolf CMS\\\"\\u003eWolf CMS\\u003c/a\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Whizzy CMS\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by Whizzy CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WebYep\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ca href='/webyep-system\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"webSPELL\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"generator\\\" content=\\\"webSPELL\\\" /\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"VideoSoon\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"VideoSoon\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"UCenter Home\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by UCenter Home\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"VS-Panel\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003c!--VSpanel Translation--\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"KT-U-CEMS\",\"rule\":[{\"regexps\":{\"body\":[\"Digest realm=\\\"ktcems.com\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SAS\",\"rule\":[{\"regexps\":{\"body\":[\"Basic realm=\\\"SAS University Edition\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PublicCMS\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-Publiccms\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"JTBC(CMS)\",\"rule\":[{\"regexps\":{\"body\":[\"jtbc.frontend.ready();\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"网奇CMS\",\"rule\":[{\"regexps\":{\"body\":[\"wangqi/style.css\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"科蚁CMS\",\"rule\":[{\"regexps\":{\"body\":[\"KeyiCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"凡科建站\",\"rule\":[{\"regexps\":{\"body\":[\"target=\\\"_blank\\\"\\u003e广州凡科互联网科技股份有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"大米CMS\",\"rule\":[{\"regexps\":{\"body\":[\"id=\\\"tp_dami_kf\\\"\",\"content=\\\"damicms\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"kingCMS\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"generator\\\" content=\\\"KingCMS\\\"/\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"易点CMS\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"generator\\\" content=\\\"DianCMS\\\"\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PHPDisk\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by PHPDisk Team\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"php云\",\"rule\":[{\"regexps\":{\"header\":[\"Set-Cookie: checkurl=deleted;\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"中企动力 门户CMS\",\"rule\":[{\"regexps\":{\"body\":[\"中企动力提供技术支持\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Destoon\",\"rule\":[{\"regexps\":{\"body\":[\"id=\\\"destoon\",\"content=\\\"destoon\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"帝友P2P\",\"rule\":[{\"regexps\":{\"body\":[\"js/diyou.js\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"海洋CMS\",\"rule\":[{\"regexps\":{\"body\":[\"target=\\\"_blank\\\"\\u003e海洋cms\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SEMcms\",\"rule\":[{\"regexps\":{\"body\":[\"semcms PHP\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NITC\",\"rule\":[{\"regexps\":{\"body\":[\"www.nitc.cc\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SiteEngine\",\"rule\":[{\"regexps\":{\"body\":[\"Boka SiteEngine\\\"\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DswjCMS\",\"rule\":[{\"regexps\":{\"body\":[\"Dswjcms\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FoxPHP\",\"rule\":[{\"regexps\":{\"header\":[\"Set-Cookie: foxphp_ok=\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TurboCMS\",\"rule\":[{\"regexps\":{\"header\":[\"/turbosearch/search.jsp\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MoMoCMS\",\"rule\":[{\"regexps\":{\"body\":[\"Powered BY MoMoCMS\\u003c/p\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ADXStudio CMS\",\"rule\":[{\"regexps\":{\"header\":[\"Set-Cookie: anonprofile=\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"AdaptCMS\",\"rule\":[{\"regexps\":{\"header\":[\"Set-Cookie: adaptcms=\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"activeWeb Content Server\",\"rule\":[{\"regexps\":{\"header\":[\"Set-Cookie: awcssessionid=\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ABO.CMS\",\"rule\":[{\"regexps\":{\"header\":[\"A-Powered-By: ABO.CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"68 Classifieds\",\"rule\":[{\"regexps\":{\"body\":[\"68 Classifieds\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"4images\",\"rule\":[{\"regexps\":{\"header\":[\"Set-Cookie: 4images_userid=-1\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"shuzheng权限管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"resources/zheng-admin/plugins/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"思迅餐饮管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"美食家星食客3餐饮管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ZDET客户管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"欢迎使用浙大恩特客户资源管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"cscms\",\"rule\":[{\"regexps\":{\"header\":[\"X-Generator: Cscms\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HarpCMS\",\"rule\":[{\"regexps\":{\"header\":[\"HarpCMS\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MathematicalSciencesCMS\",\"rule\":[{\"regexps\":{\"header\":[\"ww-Authenticate: Basic realm=\\\"MATHEMA CMS\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"bydascms\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-By: Typething2 / Bydas\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"onelan_cms\",\"rule\":[{\"regexps\":{\"body\":[\"alt=\\\"ONELAN\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"uqcms\",\"rule\":[{\"regexps\":{\"body\":[\"css/common_uqcms.css\"],\"header\":[\"UQCMSID\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"greencms\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-By: GreenCMS Community Version\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"xyhcms\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-By: XYHCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"pbootcms\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-By: PbootCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"basercms\",\"rule\":[{\"regexps\":{\"header\":[\"Set-Cookie: BASERCMS=\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"yzmcms\",\"rule\":[{\"regexps\":{\"body\":[\"Powered By YzmCMS内容管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"monxin商城系统\",\"rule\":[{\"regexps\":{\"header\":[\"Set-Cookie: monxin_device=\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"kuaifancms\",\"rule\":[{\"regexps\":{\"header\":[\"Set-Cookie: backhttp[0]=\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"pimcore\",\"rule\":[{\"regexps\":{\"header\":[\"pimcore\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"InnesSAPlugncast\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Plugncast\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NanoxCMS\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Nanox WebServer\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"hongcms\",\"rule\":[{\"regexps\":{\"body\":[\"alt=\\\"HongCMS\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"minicms\",\"rule\":[{\"regexps\":{\"body\":[\"MiniCMS\\u003c/a\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"乐尚商城leesuntech\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"copyright\\\" content=\\\"leesuntech.com\\\" /\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"GleezCMS\",\"rule\":[{\"regexps\":{\"body\":[\"X-Powered-By: Gleez CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"yunec\",\"rule\":[{\"regexps\":{\"body\":[\"href=\\\"http://www.yunec.cn/\\\" target=\\\"_blank\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"益用TMS\",\"rule\":[{\"regexps\":{\"body\":[\"title: 'TMS',\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"工作易\",\"rule\":[{\"regexps\":{\"body\":[\"工作易人才招聘系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SuperSignEZ\",\"rule\":[{\"regexps\":{\"header\":[\"Set-Cookie: connect.sid=\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"EyouCms\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by EyouCms\"],\"header\":[\"Set-Cookie: admin_lang=\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SickBeard电视节目管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"Beard - alpha\"],\"header\":[\"Server: CherryPy/3.2.0rc1\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"IswebCMS\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-By: PleskLin\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"poscms\",\"rule\":[{\"regexps\":{\"header\":[\"Set-Cookie: poscms_ci_session=\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Alicms\",\"rule\":[{\"regexps\":{\"body\":[\"Alicms.chatPlugin\",\"Alicms.userNav\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MediaWiki\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by MediaWiki\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"EleanorCMS\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-Cms: Eleanor CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Bitrix Site Manager\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-Cms: Bitrix Site Manager\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"BPanelCMS\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-Cms: BPanel CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WMSN\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-Cms: WMSN\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SDLTridionWCMS\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-By: FotoWeb\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SDCMS\",\"rule\":[{\"regexps\":{\"body\":[\"sdcms.js\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SaurusCMS\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"generator\\\" content=\\\"Saurus CMS\\\"\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SilverStripe\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"generator\\\" content=\\\"SilverStripe\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Sitefinity\",\"rule\":[{\"regexps\":{\"body\":[\"Sitefinity\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Site4\",\"rule\":[{\"regexps\":{\"body\":[\"SITE4.dk Site4 Setup Error..\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SmodCMS\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"Generator\\\" content=\\\"SmodCMS\\\" /\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SLAEDCMS\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"generator\\\" content=\\\"SLAED CMS\\\"\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SubrionCMS\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-Cms: Subrion CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SQLCMS\",\"rule\":[{\"regexps\":{\"body\":[\"title=\\\"SQLCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SpirePROCMS\",\"rule\":[{\"regexps\":{\"header\":[\"X-Generator: SpirePRO CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SymphonyCMS\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"generator\\\" content=\\\"Symphony CMS\\\"\\u003e\",\"Symphony\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TextpatternCMS\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"generator\\\" content=\\\"Textpattern CMS\\\"\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TCMS\",\"rule\":[{\"regexps\":{\"header\":[\"X-Created-By: arsmedia TCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TangoCMS\",\"rule\":[{\"regexps\":{\"body\":[\"title=\\\"Open Source CMS\\\"\\u003eTangoCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"GeekLog\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by \\u003ca href=\\\"http://www.geeklog.net/\\\"\\u003eGeeklog\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HoloCMS\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by HoloCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Hotaru CMS\",\"rule\":[{\"regexps\":{\"body\":[\"Hotaru\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"i-Gallery\",\"rule\":[{\"regexps\":{\"body\":[\"i Gallery\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"XOOPS\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"XOOPS\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"InterRed\",\"rule\":[{\"regexps\":{\"body\":[\"InterRed\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Jamroom\",\"rule\":[{\"regexps\":{\"body\":[\"Jamroom\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Kajona\",\"rule\":[{\"regexps\":{\"body\":[\"Kajona\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"jobberBase\",\"rule\":[{\"regexps\":{\"body\":[\"jobberBase\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"JGS-Portal\",\"rule\":[{\"regexps\":{\"body\":[\"JGS-Portal\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Jcow\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by Jcow\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"jCore\",\"rule\":[{\"regexps\":{\"body\":[\"JCORE_VERSION\",\"JCORE_SECURITY_TOKEN\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Roxx Auderis CMS\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Roxx Auderis\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Nucleus CMS\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by Nucleus\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Exagono Software\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Exagono Software\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Kandidat CMS\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Kandidat-CMS\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Informatics CMS\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"informatics\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ionCube Loader\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ca name=\\\"module_ioncube+loader\\\"\\u003eionCube Loader\",\"\\u003ca name=\\\"module_ionCube Loader\\\"\\u003eionCube Loader\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Intraxxion CMS\",\"rule\":[{\"regexps\":{\"body\":[\"site built by Intraxxion\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ImpressPages CMS\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"ImpressPages CMS\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Quantum Art\",\"rule\":[{\"regexps\":{\"header\":[\"Quantum Art\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Eonic CMS\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"EonicWebV5\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WebYep CMS\",\"rule\":[{\"regexps\":{\"body\":[\"/webyep-system/program\",\"/webyep-system/data\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Lime-Survey\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"LimeSurvey\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Loggix\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Loggix\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Lotus CMS\",\"rule\":[{\"regexps\":{\"body\":[\"LOTUSCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LightNEasy\",\"rule\":[{\"regexps\":{\"body\":[\"content='LightNEasy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Mambo CMS\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Mambo\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MD Pro\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by MDPro\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MemHT Portal\",\"rule\":[{\"regexps\":{\"body\":[\"content='MemHT Portal\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Mahara\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Mahara\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Kentico CMS\",\"rule\":[{\"regexps\":{\"body\":[\"Kentico CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LINK CMS\",\"rule\":[{\"regexps\":{\"body\":[\"LINK CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DedeCms\",\"rule\":[{\"regexps\":{\"body\":[\"Power by DedeCms\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ASPCMS\",\"rule\":[{\"regexps\":{\"body\":[\"src=\\\"/inc/AspCms\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Emlog\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"emlog\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TCCMS\",\"rule\":[{\"regexps\":{\"body\":[\"Power By TCCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SupeSite\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"SupeSite\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"webplus\",\"rule\":[{\"regexps\":{\"body\":[\"Webplus\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Dolibarr\",\"rule\":[{\"regexps\":{\"body\":[\"title=\\\"Dolibarr\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Telerik Sitefinity\",\"rule\":[{\"regexps\":{\"body\":[\"class=\\\"Telerik_stylesheet\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PageAdmin\",\"rule\":[{\"regexps\":{\"body\":[\"Powered By PageAdmin Cms\",\"content=\\\"PageAdmin CMS\\\"\",\"PageAdmin企业网站管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PigCms\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-By: PigCms.com\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Jspxcms\",\"rule\":[{\"regexps\":{\"body\":[\"/bluewise/_files/jspxcms.css\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WeCenter\",\"rule\":[{\"regexps\":{\"body\":[\"Powered By \\u003ca href=\\\"http://www.wecenter.com/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"08CMS\",\"rule\":[{\"regexps\":{\"body\":[\"08CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"BageCMS\",\"rule\":[{\"regexps\":{\"body\":[\"BageCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"EliteCMS\",\"rule\":[{\"regexps\":{\"body\":[\"ELITE CMS\",\"陕西益利德软件科技有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Synology WebStation\",\"rule\":[{\"regexps\":{\"body\":[\"Welcome to Synology Web Station\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"微信达微信数字投票管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"微信达微信数字投票管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Pubwin\",\"rule\":[{\"regexps\":{\"body\":[\"Pubwin\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"东软Neusoft 通用门户软件\",\"rule\":[{\"regexps\":{\"body\":[\"技术支持：河北东软软件有限公司\",\"东软通用门户软件\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FeiWaB2B2C商城系统\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by feiwa\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"bozon\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"application-name\\\" content=\\\"BoZoN\\\"\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"KliqqiCMS\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"generator\\\" content=\\\"Kliqqi\\\" /\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"JGICMS\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"author\\\" content=\\\"JGI - http://www.jgi.com.br\\\"\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TYPO3CMS\",\"rule\":[{\"regexps\":{\"body\":[\"This website is powered by TYPO3\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"KirbyCMS\",\"rule\":[{\"regexps\":{\"body\":[\"kirbycms\",\"\\u003cmeta name=\\\"keywords\\\" content=\\\"kirby\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"RulingSiteS\",\"rule\":[{\"regexps\":{\"body\":[\"RulingSite-S\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"榕基CMS\",\"rule\":[{\"regexps\":{\"body\":[\"/filecenter/res_base/rjcms\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CMS4J\",\"rule\":[{\"regexps\":{\"body\":[\"name=\\\"CMS4JSearchForm\\\" id=\\\"CMS4JSearchForm\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NETDOIT\",\"rule\":[{\"regexps\":{\"body\":[\"POWER BY NETDOIT\",\"class=\\\"copyrightnetdoit\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LankeCms\",\"rule\":[{\"regexps\":{\"body\":[\"All Right Reserved 蓝科外贸网站\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"feifeicms\",\"rule\":[{\"regexps\":{\"body\":[\"id=\\\"navbar-feifeicms\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"sitestar\",\"rule\":[{\"regexps\":{\"body\":[\"title='建站之星(sitestar)网站建设系统'\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"dayrui系列CMS\",\"rule\":[{\"regexps\":{\"body\":[\"href=\\\"dayrui/statics/default/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Phpcow\",\"rule\":[{\"regexps\":{\"body\":[\"CONTENT=\\\"Phpcow\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"phpMyFAQ\",\"rule\":[{\"regexps\":{\"body\":[\"powered by phpMyFAQ\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PHP Update\",\"rule\":[{\"regexps\":{\"body\":[\"PHP-Update\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"phpwcms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"phpwcms\\\"\"],\"header\":[\"phpwcms\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PieCrust\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"PieCrust\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"phpMySport\",\"rule\":[{\"regexps\":{\"body\":[\"title=\\\"phpMySport\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"phpnuke\",\"rule\":[{\"regexps\":{\"body\":[\"phpnuke.gif\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PHP Photo Gallery\",\"rule\":[{\"regexps\":{\"body\":[\"PHP Photo Gallery\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Pligg cms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Pligg moded by EuropNet\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Plone\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Plone - http://plone.org\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PluXml\",\"rule\":[{\"regexps\":{\"body\":[\"title=\\\"PluXml\\\"\\u003ePluXml\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Pluck CMS\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"pluck\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Post Revolution\",\"rule\":[{\"regexps\":{\"body\":[\"Post Revolution\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PortalApp\",\"rule\":[{\"regexps\":{\"body\":[\"powered by PortalApp\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Pragyan CMS\",\"rule\":[{\"regexps\":{\"body\":[\"Pragyan CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"pragmaMx\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"pragmaMx\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Quick Cms\",\"rule\":[{\"regexps\":{\"body\":[\"powered by Quick.Cart\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"RunCms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\" RunCms\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Rumba cms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Rumba Tarumba - Rumba Catalana\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Saman Portal\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Saman Information Structure\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"sabros_us\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"sabros.us\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Redaxscript\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Redaxscript\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"万里红管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"北京万里红科技股份有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TWCMS\",\"rule\":[{\"regexps\":{\"body\":[\"src=\\\"/twcms/theme/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SiteServer\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"SiteServer\",\"SiteServer CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"KesionICMS\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eKesionICMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CmsTop\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"CmsTop\",\"cmstop-common.js\\\"\\u003e\\u003c/script\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"YoudianCMS\",\"rule\":[{\"regexps\":{\"body\":[\"YoudianCMS\"],\"header\":[\"X-Powered-By: YoudianCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"龙脉CMS\",\"rule\":[{\"regexps\":{\"body\":[\"龙脉科技\",\"www.szlongmai.com\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"We7\",\"rule\":[{\"regexps\":{\"body\":[\"id=\\\"we7layout_\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"KoobooCMS\",\"rule\":[{\"regexps\":{\"body\":[\"Kooboo CMS\",\"action=\\\"/Kooboo-Submit\",\"src=\\\"/Kooboo-WebResource\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"极速cms\",\"rule\":[{\"regexps\":{\"body\":[\"台州市极速网络有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CcCms网站内容管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"CcCms网站内容管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PortlandLabs Concrete5\",\"rule\":[{\"regexps\":{\"header\":[\"Set-Cookie: CONCRETE5=\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Zoomla!逐浪CMS\",\"rule\":[{\"regexps\":{\"body\":[\"alt=\\\"最新版Zoomla逐浪CMS\",\"提供专业的广告源码与站长工具以及Zoomla!逐浪CMS下载\",\"http://www.z01.com/pub/\",\"逐浪软件z01.com版权所有\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"江西金磊 JEECMS官网 JAVA网站内容管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"JEECMS官网－JAVA网站内容管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ACCMS内容管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"ACCMS内容管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"A8音乐网内容管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"A8音乐网内容管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"IPS Community Suite\",\"rule\":[{\"regexps\":{\"body\":[\"https://invisioncommunity.com\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"gxcms\",\"rule\":[{\"regexps\":{\"body\":[\"gxcms\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"tpAdmin\",\"rule\":[{\"regexps\":{\"body\":[\"tpAdmin\",\"content=\\\"tpadmin\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TPTCMS\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by TPTCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TUTUCMS\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by TUTUCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"问途 CMS管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"DOSSM 2.0 CMS管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"KrisonAV CMS\",\"rule\":[{\"regexps\":{\"body\":[\"KrisonAV\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"phpVMS\",\"rule\":[{\"regexps\":{\"body\":[\"powered by phpVMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OpenWBS\",\"rule\":[{\"regexps\":{\"body\":[\"openwbs team\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"XYCMS\",\"rule\":[{\"regexps\":{\"body\":[\"powered by xycms\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CSDJCMS\",\"rule\":[{\"regexps\":{\"body\":[\"程氏舞曲DJ\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"BEESCMS\",\"rule\":[{\"regexps\":{\"body\":[\"powerd by \\u003ca href=\\\"http://www.beescms.com\\\"\\u003eBEESCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"60cycleCMS\",\"rule\":[{\"regexps\":{\"body\":[\"60cycleCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"青木林 TuziCMS\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by TuziCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"GeniXCMS\",\"rule\":[{\"regexps\":{\"body\":[\"GeniXCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PBM\",\"rule\":[{\"regexps\":{\"body\":[\"content='PMB Group'\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LightOpenCMS\",\"rule\":[{\"regexps\":{\"body\":[\"LightOpenCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Help Center Live\",\"rule\":[{\"regexps\":{\"body\":[\"Powered By Help Center Live.\",\"© Help Center Live.\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Free Simple\",\"rule\":[{\"regexps\":{\"body\":[\"freesimple\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"KingCMS内容管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by KingCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ECS 易创思CMS\",\"rule\":[{\"regexps\":{\"body\":[\"上海弘育信息技术有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"UWBCMS6内容管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"UWBCMS6内容管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"wancms游戏内容管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"wancms游戏内容管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NindonCMS\",\"rule\":[{\"regexps\":{\"body\":[\"powered by NindonCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CNKI科研诚信管理系统研究中心\",\"rule\":[{\"regexps\":{\"body\":[\"CNKI科研诚信管理系统研究中心\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SpeedCMS\",\"rule\":[{\"regexps\":{\"body\":[\"SpeedCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CMSimple\",\"rule\":[{\"regexps\":{\"body\":[\"CMSimple\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"POSCMS PHP开源CMS网站管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"POSCMS - PHP开源CMS网站管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"几度CMS\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"几度CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ClassCMS\",\"rule\":[{\"regexps\":{\"body\":[\"ClassCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FeehiCMS\",\"rule\":[{\"regexps\":{\"body\":[\"title=\\\"FeehiCMS\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Crafter CMS\",\"rule\":[{\"regexps\":{\"body\":[\"Crafter CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Webone cms\",\"rule\":[{\"regexps\":{\"body\":[\"Webone\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"XSCMS管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"XSCMS管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WpdCms网站管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"WpdCms网站管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"RLcms网站管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"RLcms网站管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"applezeed\",\"rule\":[{\"regexps\":{\"body\":[\"applezeed.com\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Danilo Pegoraro Marketing\",\"rule\":[{\"regexps\":{\"body\":[\"estudiofdi.com.br\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"yycms\",\"rule\":[{\"regexps\":{\"body\":[\"/templets/yycms/js/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"网商科技建站系统\",\"rule\":[{\"regexps\":{\"body\":[\"网商科技\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"GoldenKey jsp自助建站系统\",\"rule\":[{\"regexps\":{\"body\":[\"GoldenKey\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ARE InfoTech\",\"rule\":[{\"regexps\":{\"body\":[\"ARE InfoTech\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Pengumuman Kelulusan\",\"rule\":[{\"regexps\":{\"body\":[\"Pengumuman.Kelulusan\",\"Masukkan\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Accesstek\",\"rule\":[{\"regexps\":{\"body\":[\"Accesstek (Pvt.) Ltd\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HZPCMS管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eHZPCMS管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"牛迈网络 建站系统\",\"rule\":[{\"regexps\":{\"body\":[\"牛迈网络科技\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Surat Web Solution\",\"rule\":[{\"regexps\":{\"body\":[\"Surat Web Solution.\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ZYCH自由策划网站管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"ZYCH自由策划网站管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"BageCMS - 八哥内容管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"BageCMS - 八哥内容管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Soft Solutionz\",\"rule\":[{\"regexps\":{\"body\":[\"SoftSolutionz\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"mcms\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1464851260\"]},\"regexps\":{\"body\":[\"/ms-admin/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MajExpress\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by MajExpress\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"明腾cms\",\"rule\":[{\"regexps\":{\"body\":[\"明腾\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"McCMS 魔方动力内容管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"McCMS - 魔方动力内容管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SchoolCMS学校管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"SchoolCMS学校管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MECMS管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"MECMS管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SDCMS三合一企业网站管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"SDCMS三合一企业网站管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SDCMS三网合一企业网站管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"SDCMS三网合一企业网站管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SDCMS神盾内容管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"SDCMS神盾内容管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SentCMS网站管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"SentCMS网站管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SexyVC 内容管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"SexyVC 内容管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CxCms\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by CxCms\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"BbZL.PhP\",\"rule\":[{\"regexps\":{\"body\":[\"BbZL.PhP\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Tekno Portal\",\"rule\":[{\"regexps\":{\"body\":[\"Tekno.Portal\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"iNethinkCMS网站管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eiNethinkCMS网站管理系统 - .Net C#开源、免费CMS网站管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SinGooCMS内容管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"SinGooCMS内容管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SKA网站管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"SKA网站管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Smart@CMS 网站内容管理系统 V1.0\",\"rule\":[{\"regexps\":{\"body\":[\"Smart@CMS 网站内容管理系统 V1.0\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"明腾CMS\",\"rule\":[{\"regexps\":{\"body\":[\"明腾-西部商务网\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MobileCms 后台管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"MobileCms 后台管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MOHISM CMS2.0 网站管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"MOHISM CMS2.0 网站管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"kkcms\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by KKCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"UCMS\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-By: UCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CxuuCMS\",\"rule\":[{\"regexps\":{\"body\":[\"by CxuuCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"nonecms\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"nonecms\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Anchor CMS\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Anchor CMS\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"AuraCMS\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"AuraCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Blogifier\",\"rule\":[{\"regexps\":{\"body\":[\"Blogifier\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Bludit CMS\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Bludit CMS\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"金方时代 建站系统\",\"rule\":[{\"regexps\":{\"body\":[\"金方时代\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Schoolsindia cms\",\"rule\":[{\"regexps\":{\"body\":[\"Schoolsindia\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Spotweb\",\"rule\":[{\"regexps\":{\"body\":[\"Spotweb\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"恩斯特建站管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"苏州托普斯网络\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Polaris cms\",\"rule\":[{\"regexps\":{\"body\":[\"by Polaris\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"卓越迈创建站系统\",\"rule\":[{\"regexps\":{\"body\":[\"卓越迈创\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NT CMS管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"NT CMS管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"诚信网站管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"诚信网站管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"博采网络（Bocweb）\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"杭州博采网络科技股份有限公司\",\"/bocweb/\"],\"header\":[\"/bocweb/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"西安旲博智能科技 建站系统\",\"rule\":[{\"regexps\":{\"body\":[\"西安旲博智能科技有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"迅优cms\",\"rule\":[{\"regexps\":{\"body\":[\"技术支持：青岛迅优网络科技有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Bsphp\",\"rule\":[{\"regexps\":{\"body\":[\"Bsphp\",\"www.bsphp.com\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"wormcms\",\"rule\":[{\"regexps\":{\"body\":[\"wormcms/layui/layui.js\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Yzncms\",\"rule\":[{\"regexps\":{\"body\":[\"www.kancloud.cn/ken678/yzncms\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"帝国CMS\",\"rule\":[{\"regexps\":{\"body\":[\"从帝国CMS迁入网站数据\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"VequnCMS内容管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"VequnCMS内容管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"UKcms网站管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"UKcms网站管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"XinYiCMS新亿内容管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"XinYiCMS\",\"新亿内容管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"e Belajar\",\"rule\":[{\"regexps\":{\"body\":[\"E-Belajar\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"漫城CMS网站管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e漫城CMS网站管理系统\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"UsualToolCMS\",\"rule\":[{\"regexps\":{\"body\":[\"UsualToolCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"转折文化 建站系统\",\"rule\":[{\"regexps\":{\"body\":[\"转折文化\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"UniCMS紫光新华内容管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"UniCMS紫光新华内容管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WOOCMS\",\"rule\":[{\"regexps\":{\"body\":[\"WOOCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LayerBB\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Development LayerBB\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Jenzabar\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by Jenzabar\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"帝国网站管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"帝国网站管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"新秀文章管理系统 sinsiu cms 1.0 beta6\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e新秀文章管理系统 sinsiu cms 1.0 beta6\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Odoo CMS\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"generator\\\" content=\\\"Odoo\\\"/\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"易点内容管理系统DianCMSv7.0.0\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e易点内容管理系统（DianCMS）v7.0.0\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"多米(DuomiCms) 免费影视管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"Power by DuomiCms\",\"多米(DuomiCms)-免费影视管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"艺麟魔方(YLICMS)\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e艺麟魔方 - 专注网站建设服务(YLICMS)\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"易思ESPCMS企业建站管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by \\u003ca href=\\\"http://www.earclink.com\\\" title=\\\"易思ESPCMS企业建站管理系统\\\"\\u003eESPCSM-P8\\u003c/a\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"疯购商城CMS管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"疯购商城CMS管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TeaCMS\",\"rule\":[{\"regexps\":{\"body\":[\"views/TeaCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"kitecms\",\"rule\":[{\"regexps\":{\"body\":[\"kitecms\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"捷兔CMS 微信营销管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e捷兔CMS-微信营销管理系统\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"杭州橙诺科技 建站系统\",\"rule\":[{\"regexps\":{\"body\":[\"橙诺科技\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"商企网络科技 建站系统\",\"rule\":[{\"regexps\":{\"body\":[\"商企网络\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"JTopCMS\",\"rule\":[{\"regexps\":{\"body\":[\"JTopCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"tjpcms\",\"rule\":[{\"regexps\":{\"body\":[\"tjpcms_clscont\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"codiad\",\"rule\":[{\"regexps\":{\"body\":[\"codiad\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apollo\",\"rule\":[{\"regexps\":{\"body\":[\"Apollo\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"橙树网络 建站系统\",\"rule\":[{\"regexps\":{\"body\":[\"技术支持：橙树网络\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"狮子鱼社区团购系统CMS\",\"rule\":[{\"regexps\":{\"body\":[\"/seller.php?s=/Public/login\"],\"header\":[\"X-Powered-By: oscshop\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"先极科技 cms\",\"rule\":[{\"regexps\":{\"body\":[\"南京先极科技有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ShuipFCMS\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-By: ShuipFCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HDHCMS\",\"rule\":[{\"regexps\":{\"body\":[\"title=\\\"HDHCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"凡诺企业网站管理系统商业版9.0 免费版\",\"rule\":[{\"regexps\":{\"body\":[\"凡诺企业网站管理系统商业版9.0-免费版\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"strapi\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-By: Strapi\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"bjyadmin\",\"rule\":[{\"regexps\":{\"header\":[\"Set-Cookie: BJYADMIN\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Base Admin\",\"rule\":[{\"regexps\":{\"body\":[\"Base Admin\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"华宜网络\",\"rule\":[{\"regexps\":{\"body\":[\"华宜网络\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"尚医健康CMS管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"尚医健康CMS管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"互诺科技 建站系统\",\"rule\":[{\"regexps\":{\"body\":[\"互诺科技\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PHPSay World\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"PHPSay World\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ZFCMS\",\"rule\":[{\"regexps\":{\"body\":[\"zfcms\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PHPKick\",\"rule\":[{\"regexps\":{\"body\":[\"PHPKick\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CouchCMS\",\"rule\":[{\"regexps\":{\"body\":[\"generated by CouchCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"YCCMS\",\"rule\":[{\"regexps\":{\"body\":[\"YCCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"indexhibit\",\"rule\":[{\"regexps\":{\"body\":[\"indexhibit\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"phpMyChat Plus\",\"rule\":[{\"regexps\":{\"body\":[\"phpMyChat Plus\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MyuCMS\",\"rule\":[{\"regexps\":{\"body\":[\"MYUCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"wygkcms 网域高科\",\"rule\":[{\"regexps\":{\"header\":[\"Set-Cookie: SYSIMG\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Craft CMS\",\"rule\":[{\"regexps\":{\"body\":[\"Welcome to Craft CMS\"],\"header\":[\"X-Powered-By: Craft CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DotNetCMS\",\"rule\":[{\"regexps\":{\"body\":[\"by DotNetCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"yungoucms\",\"rule\":[{\"regexps\":{\"body\":[\"yungou/images/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Gila CMS\",\"rule\":[{\"regexps\":{\"body\":[\"Gila CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"小猪cms生活通o2o系统\",\"rule\":[{\"regexps\":{\"body\":[\"小猪cms生活通o2o系统\",\"小猪cms生活通o2o系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Microweber\",\"rule\":[{\"regexps\":{\"body\":[\"/userfiles/modules/microweber/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Ametys CMS\",\"rule\":[{\"regexps\":{\"body\":[\"Accueil\",\"Ametys\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"AiJiaCMS\",\"rule\":[{\"regexps\":{\"body\":[\"AiJiaCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"S-CMS\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"S-CMS\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"AJ HYIP\",\"rule\":[{\"regexps\":{\"body\":[\"ajhyip.com\",\"content=\\\"AJ HYIP\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"蓝太平洋网站决策支持系统\",\"rule\":[{\"regexps\":{\"body\":[\"蓝太平洋网站决策支持系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Erotik Auktionshaus\",\"rule\":[{\"regexps\":{\"body\":[\"Erotik Auktionshaus\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"phpscripte\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Hi Web Wiesbaden - phpscripte24\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WEB NMS\",\"rule\":[{\"regexps\":{\"body\":[\"WEB NMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"kppw\",\"rule\":[{\"regexps\":{\"body\":[\"powered by kppw\",\"http://www.kppw.cn/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"odlican.net cms\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by odlican.net cms\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Nuked Klan\",\"rule\":[{\"regexps\":{\"body\":[\"Nuked Klan\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Website Baker\",\"rule\":[{\"regexps\":{\"body\":[\"href=\\\"http://www.websitebaker.org/\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Sphider Script\",\"rule\":[{\"regexps\":{\"body\":[\"Sphider Script\",\"powered by sphider\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WaiKuCMS\",\"rule\":[{\"regexps\":{\"body\":[\"WaiKuCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"1caitong\",\"rule\":[{\"regexps\":{\"body\":[\"/custom/GroupNewsList\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"313cms\",\"rule\":[{\"regexps\":{\"body\":[\"313CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Acidcat_CMS\",\"rule\":[{\"regexps\":{\"body\":[\"www.acidcat.com\",\"Powered by Acidcat CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"BitrixSiteManager\",\"rule\":[{\"regexps\":{\"body\":[\"www.bitrix24.com\"],\"header\":[\"X-Powered-Cms\",\"Bitrix Site Manager\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DotNetNuke\",\"rule\":[{\"regexps\":{\"body\":[\"www.dnnsoftware.com\"],\"header\":[\"Dnnoutputcache\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DouPHP\",\"rule\":[{\"regexps\":{\"body\":[\"DouPHP\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Eleanor CMS\",\"rule\":[{\"regexps\":{\"body\":[\"eleanor-cms.ru\"],\"header\":[\"X-Powered-Cms\",\"Eleanor CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"EmpireCMS\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by EmpireCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FOXI BIZzz\",\"rule\":[{\"regexps\":{\"body\":[\"help.foxibiz.com\"],\"header\":[\"X-Powered-Cms\",\"FOXI BIZzz\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Npoint\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by Npoint\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Sitecore\",\"rule\":[{\"regexps\":{\"body\":[\"sitecore.net\"],\"header\":[\"Sitecore CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TYPO3 CMS\",\"rule\":[{\"regexps\":{\"header\":[\"fe_typo_user\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ThinkSAAS\",\"rule\":[{\"regexps\":{\"body\":[\"www.thinksaas.cn\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WebsiteBaker\",\"rule\":[{\"regexps\":{\"header\":[\"wb_session_id\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Weebly\",\"rule\":[{\"regexps\":{\"body\":[\"www.weebly.com\"],\"header\":[\"www.weebly.com\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Zikula_CMS\",\"rule\":[{\"regexps\":{\"body\":[\"zikula.de\"],\"header\":[\"ZKSID2\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"asp168\",\"rule\":[{\"regexps\":{\"body\":[\"www.asp168.com\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"bcrj\",\"rule\":[{\"regexps\":{\"body\":[\"www.bcrj.com.cn\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"boyow\",\"rule\":[{\"regexps\":{\"body\":[\"publish by BoyowCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"bpanel\",\"rule\":[{\"regexps\":{\"header\":[\"www.bpanel.ne\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"chanzhi\",\"rule\":[{\"regexps\":{\"body\":[\"www.chanzhi.org\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"conking\",\"rule\":[{\"regexps\":{\"body\":[\"www.conking.com.cn\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"deepsoon\",\"rule\":[{\"regexps\":{\"body\":[\"www.deepsoon.com\",\"Powered by deep soon\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"kersion\",\"rule\":[{\"regexps\":{\"body\":[\"www.kesion.com\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"powereasy\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by PowerEasy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"qibosoft\",\"rule\":[{\"regexps\":{\"body\":[\"qibosoft\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"reachway\",\"rule\":[{\"regexps\":{\"body\":[\"reachway.com.cn\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"skynj\",\"rule\":[{\"regexps\":{\"body\":[\"www.skynj.com\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"sunad\",\"rule\":[{\"regexps\":{\"body\":[\"bigSortProduct.asp\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"synkron\",\"rule\":[{\"regexps\":{\"body\":[\"Synkron\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"thinkSNS\",\"rule\":[{\"regexps\":{\"body\":[\"www.thinksns.com\"],\"header\":[\"TSV3_lang\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"timber\",\"rule\":[{\"regexps\":{\"body\":[\"App_Image/PXSystem\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"xiaomayi\",\"rule\":[{\"regexps\":{\"body\":[\"/Template/Ant/Css/AntHomeComm.css\"],\"header\":[\"AntXiaouserslogin\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"zfsoft\",\"rule\":[{\"regexps\":{\"body\":[\"style/base/jw.css\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CLTPHP\",\"rule\":[{\"regexps\":{\"body\":[\"CLTPHP\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"迅睿CMS\",\"rule\":[{\"regexps\":{\"body\":[\"xunruicms\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"新网模板建站系统\",\"rule\":[{\"regexps\":{\"body\":[\"新网模板建站系统\",\"\\u003cmeta name=\\\"keywords\\\" content=\\\"新网,Xinnet\\\" /\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"广州万齐-建站系统\",\"rule\":[{\"regexps\":{\"body\":[\"www.vancheer.com\",\"vancheerfile\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Verydows\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"verydows-baseurl\\\"\",\"href=\\\"http://www.verydows.com\\\"\\u003eVerydows\\u003c/a\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Slife\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"keywords\\\" content=\\\"slife管理系统\\\"\",\"\\u003cscript src=\\\"/js/slife/toast.js\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"RubedoCMS\",\"rule\":[{\"regexps\":{\"body\":[\"ng-attr-lang=\\\"{{rubedo.current.page.locale}\",\"{rubedo.current.page.title}\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PHPcom-cms\",\"rule\":[{\"regexps\":{\"body\":[\"PHPcom Team and cnxinyun UI Team\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OTcms\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003c!-- [OTCMS] --\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Netlify-CMS\",\"rule\":[{\"regexps\":{\"body\":[\"netlify\"],\"header\":[\"Server: Netlify\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NETCMS\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003c!--Created by NETCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"JFinal\",\"rule\":[{\"regexps\":{\"body\":[\"JFinal\"],\"header\":[\"Server: JFinal\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HDCMS\",\"rule\":[{\"regexps\":{\"body\":[\"/hdcms\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MCS信息安全管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"MCS信息安全管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"慧林信息安全管理系统测试\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cspan style=\\\"color:red\\\"\\u003e慧林信息安全管理系统测试页面\\u003c/span\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"数据卫士 敏感信息管理系统 SimpDLP NP\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e数据卫士-敏感信息管理系统-SimpDLP-NP\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"vTiger CRM\",\"rule\":[{\"regexps\":{\"body\":[\"vtiger CRM\",\"Powered by vtiger CRM\",\"themes/images/vtigercrm_icon.ico\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ManageEngine-SupportCenter\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eManageEngine SupportCenter Plus\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TradeRenCRM\",\"rule\":[{\"regexps\":{\"body\":[\"TradeRenCRM 商路通-外贸客户管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"dzzoffice\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"author\\\" content=\\\"dzzoffice\\\" /\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"UltraCRM\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eUltraCRM by ToneThink.Soft\\u003c/title\\u003e\",\"\\u003ctitle\\u003e欢迎您使用 UltraCRM 客户服务中心\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OnMinutes-CRM\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-By: Phusion Passenger (mod_rails/mod_rack)\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"RMS-Case-Manager\",\"rule\":[{\"regexps\":{\"body\":[\"RMS Case Manager\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"263统一经管运营支撑系统\",\"rule\":[{\"regexps\":{\"body\":[\"263统一经管运营支撑系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ANNECA-InTouch-CRM\",\"rule\":[{\"regexps\":{\"body\":[\"InTouch CRM\",\"intouch.js?version\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"众恒志信-在线考试系统\",\"rule\":[{\"regexps\":{\"body\":[\"北京众恒志信科技开发股份有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"用友turboCRM\",\"rule\":[{\"regexps\":{\"body\":[\"/js/turboui.js\\\"\\u003e\\u003c/script\\u003e\",\"/js/tfunction.js\\\"\\u003e\\u003c/script\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PegaRULES\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cspan\\u003e PegaCRM\",\"/prweb/k7RhhW4GOJ_jZo5IJ84-_XCXCyLw1nlE\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"悟空CRM\",\"rule\":[{\"regexps\":{\"body\":[\"悟空CRM\",\"\\u003cdiv class=\\\"row-fluid wukong\\\"\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Daffodil-CRM\",\"rule\":[{\"regexps\":{\"body\":[\"Design \\u0026 Development by Daffodil Software Ltd\",\"href=\\\"http://vus.daffodilvarsity.edu.bd/?app=result_show\\\"\\u003eAcademic Results\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Group-Office\",\"rule\":[{\"regexps\":{\"body\":[\"Group-Office\",\"Powered by Group-Office\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Oracle Siebel CRM\",\"rule\":[{\"regexps\":{\"body\":[\"Siebel Partner Portal\",\"\\u003cscript\\u003ethis.ConfirmDeleteMessage ='Are you sure you want to delete this record?'\\u003c/script\\u003e\\u003cscript\\u003e this.focus(); \\u003c/script\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"鹏为CRM\",\"rule\":[{\"regexps\":{\"body\":[\"鹏为E4\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"EnterCRM\",\"rule\":[{\"regexps\":{\"body\":[\"EnterCRM\",\"浙大恩特\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HubSpot\",\"rule\":[{\"regexps\":{\"body\":[\"HubSpot Analytics Code\",\"js.hubspot.com\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"单点CRM\",\"rule\":[{\"regexps\":{\"body\":[\"单点CRM系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"怡成-医院CRM系统\",\"rule\":[{\"regexps\":{\"body\":[\"怡成CRM系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"易客CRM\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ca href='http://www.c3crm.com' target='_blank' class='crm-foot-url'\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"风铃CRM系统\",\"rule\":[{\"regexps\":{\"body\":[\"Lemur 开源,Easypoi 代码 文档,代码生成器,开发框架 ,Lemur Gen\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"神州云动CRM系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cMETA name=\\\"description\\\" content=\\\"CloudCC.com\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"明源CRM\",\"rule\":[{\"regexps\":{\"body\":[\"明源售楼管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"pmwayE4CRM\",\"rule\":[{\"regexps\":{\"body\":[\"鹏为软件股份有限公司\",\"CRM系统(E4\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"单点CRM系统\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"单点CRM系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"用友TurboCRM\",\"rule\":[{\"regexps\":{\"body\":[\"用友TurboCRM\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Microsiga Protheus Web Server\",\"rule\":[{\"regexps\":{\"header\":[\"Microsiga Protheus Web Server\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CiuisCRM\",\"rule\":[{\"regexps\":{\"body\":[\"s/ciuis.css\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TVTczentrix\",\"rule\":[{\"regexps\":{\"body\":[\"images/zentrix_logo.png\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"人易客户关系管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"广州市人易软件技术有限公司\",\"href=\\\"http://www.runecrm.com\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"华天客户关系管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"华天客户关系管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SuiteCRM\",\"rule\":[{\"regexps\":{\"body\":[\"SuiteCRM\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"鹏为\",\"rule\":[{\"regexps\":{\"body\":[\"鹏为软件\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TFS客户管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"TFS客户管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"任我行grasp CRM\",\"rule\":[{\"regexps\":{\"body\":[\"任我行信息技术有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Yonyou TurboCRM\",\"rule\":[{\"regexps\":{\"body\":[\"turboui.js\",\"用友turbocrm\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"任我行 CRM\",\"rule\":[{\"regexps\":{\"body\":[\"/resources/imgs/defaultannex/loginpictures/\",\"欢迎使用任我行crm\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Yelala\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cform action=\\\"/index.php/home/login/login.html\\\" method=\\\"post\\\" id=\\\"login\\\" class=\\\"form\\\" data-bind=\\\"submit: submitform\\\"\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"华天启元 客户关系管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"class=\\\"hidden-xs ewheaderrow\\\"\\u003e\\u003cimg src=\\\"aspximages/htqy.png\\\"\",\"华天客户关系管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Mizuho 公司产品\",\"rule\":[{\"regexps\":{\"body\":[\"mizuho bank, ltd.\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SGP managerial system\",\"rule\":[{\"regexps\":{\"body\":[\"/static/all/img/logo/sgp\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Ubiquiti UNMS\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"unms\\\"\",\"unms\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"曼陀罗 医疗客户服务系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ch2\\u003e曼陀罗医疗\\u003c/h2\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"青铜器RDM\",\"rule\":[{\"regexps\":{\"body\":[\"登录青铜器rdm\\u003c/b\\u003e\\u003c/div\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"5k-CRM\",\"rule\":[{\"regexps\":{\"body\":[\"悟空crm\",\"/public/js/5kcrm.js\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"鹏为 E4\",\"rule\":[{\"regexps\":{\"body\":[\"CRM系统(鹏为E4)登录\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"鹏为 E5\",\"rule\":[{\"regexps\":{\"body\":[\"tip_browsertoolow:\\\"您当前使用的浏览器版本或模式太低，鹏为e5为了您更好的体验，请升级您的ie版本至8.0或以上。\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"KTC客户关系管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"KTC客户关系管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"U丽格CRM管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"U丽格CRM管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MetaCRM6客户关系管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"MetaCRM6客户关系管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"neocrm管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"neocrm管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"EasyCrm\",\"rule\":[{\"regexps\":{\"body\":[\"EasyCrm\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Doggie\",\"rule\":[{\"favicon\":{\"mmh3\":[\"817193734\"]},\"regexps\":{\"body\":[\"doggieUI\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Portainer\",\"rule\":[{\"regexps\":{\"body\":[\"Portainer\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Naftis\",\"rule\":[{\"regexps\":{\"body\":[\"Naftis\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DockerUI\",\"rule\":[{\"regexps\":{\"body\":[\"DockerUI\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"shipyard\",\"rule\":[{\"regexps\":{\"body\":[\"shipyard\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"swarmpit\",\"rule\":[{\"regexps\":{\"body\":[\"swarmpit\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"方天B9ERP\",\"rule\":[{\"regexps\":{\"body\":[\"方天云端ERP企业管理软件\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"中源信息富通天下ERP\",\"rule\":[{\"regexps\":{\"body\":[\"富通天下外贸ERP\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MultiableM18\",\"rule\":[{\"regexps\":{\"body\":[\"m18Icon\",\"Multiable. All rights reserved.\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"康网等级医院评审迎检系统\",\"rule\":[{\"regexps\":{\"body\":[\"中国康网\",\"等级医院评审迎检系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"博库医院在线考试系统\",\"rule\":[{\"regexps\":{\"body\":[\"博库医学在线考试系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"万物工业ERP\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"keywords\\\" content=\\\"万物商砼云管理系统\\\"\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TECLIBGLPI\",\"rule\":[{\"regexps\":{\"body\":[\"name=\\\"_glpi_csrf_token\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"菲尔教学管理ERP\",\"rule\":[{\"regexps\":{\"body\":[\"菲尔教学管理ERP 系统登录\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ebrigadeERP\",\"rule\":[{\"regexps\":{\"body\":[\".btn-ebrigade {\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"速达荣耀G5.XP\",\"rule\":[{\"regexps\":{\"body\":[\"速达荣耀G5.XP\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"溢信审批管理\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e审批管理\\u003c/title\\u003e\"],\"header\":[\"oappr_cise\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"湖南云简积加ERP\",\"rule\":[{\"regexps\":{\"body\":[\"湖南云简信息技术有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"J\\u0026A杰恩设计 J\\u0026A杰恩设计企业信息化管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"J\\u0026A杰恩设计企业信息化管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"吉夫森 1010ERP管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"1010ERP管理系统\",\"河南吉夫森软件开发有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TCL 智能暖通ERP系统\",\"rule\":[{\"regexps\":{\"body\":[\"TCL智能暖通ERP系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"票友ERP\",\"rule\":[{\"regexps\":{\"body\":[\"ajax/confirm.ashx\",\"票友erp\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"kingdee K3 cloud\",\"rule\":[{\"regexps\":{\"body\":[\"k/3 cloud\",\"class=\\\"kd-div-loading-ct\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Cyberwisdom wizbank整合式管理学习平台\",\"rule\":[{\"regexps\":{\"body\":[\"wizbank\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TECLIB GLPI\",\"rule\":[{\"regexps\":{\"body\":[\"_glpi_csrf_token\",\"glpi - 登陆入口\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"菲尔教学管理erp\",\"rule\":[{\"regexps\":{\"body\":[\"菲尔教学管理erp\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ebrigade ERP\",\"rule\":[{\"regexps\":{\"body\":[\"class='btn btn-ebrigade btn-lg'\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"企望 ERP系统\",\"rule\":[{\"regexps\":{\"body\":[\"/javascript/js/witfunctions.js\",\"企望制造ERP系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"方天 B9ERP\",\"rule\":[{\"regexps\":{\"body\":[\"name=\\\"dbnameddl\\\"\",\"方天云端ERP企业管理软件\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"同之杰 ERP信息管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"href=\\\"/content/home/tzjlog.ico\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"AGILE BPM\",\"rule\":[{\"regexps\":{\"body\":[\"class=\\\"logo-element\\\"\\u003eagile-bpm\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"明源ERP\",\"rule\":[{\"regexps\":{\"body\":[\"明源云ERP\",\"PubPlatform/Login/index.aspx\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Yonyou-ERP-NC\",\"rule\":[{\"regexps\":{\"body\":[\"/nc/servlet/nc.ui.iufo.login.index\",\"用友新世纪\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"智能仓储管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"event.srcelement.type!='reset\",\"智能仓储管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"kingdee-EAS\",\"rule\":[{\"regexps\":{\"body\":[\"金蝶\",\"eas系统登录\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"富通天下ERP\",\"rule\":[{\"regexps\":{\"body\":[\"用户登录_富通天下外贸ERP\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Odoo\",\"rule\":[{\"regexps\":{\"body\":[\"Odoo\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SSC(U)-ERP管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"SSC(U)-ERP管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"大信ERP综合管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"大信ERP综合管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"蝶和软件团队管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"蝶和软件团队管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"华夏ERP\",\"rule\":[{\"regexps\":{\"body\":[\"华夏ERP\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"聚能ERP管理系统 V8.0\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e聚能ERP管理系统 V8.0\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"凤凰物业管理系统ERP标准版v2010\",\"rule\":[{\"regexps\":{\"body\":[\"凤凰物业管理系统ERP标准版v2010\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Tanaosoft 毛巾纺织ERP系统\",\"rule\":[{\"regexps\":{\"body\":[\"Tanaosoft毛巾纺织ERP系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"金同方 月子护理ERP管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"月子护理ERP管理平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Dawatech\",\"rule\":[{\"regexps\":{\"body\":[\"Dawatech\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Yonyou GRP U8\",\"rule\":[{\"regexps\":{\"body\":[\"window.location.replace(\\\"login.jsp?up=1\\\")\",\"用友grp-u8\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"用友GRP RMIS系统\",\"rule\":[{\"regexps\":{\"body\":[\"用友grp-rmis系统\",\"href=\\\"clientfile/rmisupdate.exe\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"速达软件 V5.NET PRO\",\"rule\":[{\"regexps\":{\"body\":[\"src=\\\"images/top/top_1(v5)-pro.gif\\\"\",\"速达V5.NET-PRO\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"速达V.NET\",\"rule\":[{\"regexps\":{\"body\":[\"速达天耀V5.NET-PRO\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Yuanian-Accounting-Software\",\"rule\":[{\"regexps\":{\"body\":[\"/image/logo/yuannian.gif\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Join-Cheer-General-financial-system\",\"rule\":[{\"regexps\":{\"body\":[\"久其报表大厅\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Firestorm\",\"rule\":[{\"regexps\":{\"body\":[\"Firestorm Apps\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"驭龙-HIDS-主机入侵检测系统\",\"rule\":[{\"regexps\":{\"body\":[\"https://github.com/ysrc/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"aakuan Attendance System\",\"rule\":[{\"regexps\":{\"body\":[\"aakuan.cn All Right Reserved\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"诺姆四达 人才评测系统\",\"rule\":[{\"regexps\":{\"body\":[\"class=\\\"blackfont\\\"\\u003e诺姆四达人力资源测评咨询服务有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"亿华 考勤软件\",\"rule\":[{\"regexps\":{\"body\":[\"link.description = \\\"亿华软件\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PageUp-People\",\"rule\":[{\"regexps\":{\"body\":[\"class=\\\"pageuplink\\\" href=\\\"http://www.pageuppeople.com\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Oracle PeopleSoft\",\"rule\":[{\"regexps\":{\"body\":[\"Oracle PeopleSoft\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"RuvarHRM\",\"rule\":[{\"regexps\":{\"body\":[\"href='/RuvarHRM/css/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"我爱考勤云平台\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"我爱考勤云平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"263人事管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"263人事管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"一指通 E7人力资源系统\",\"rule\":[{\"regexps\":{\"body\":[\"href='http://www.xmyzt.com.cn\",\"一指通\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HRSALE\",\"rule\":[{\"regexps\":{\"body\":[\"/hrsale_assets/vendor/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Sentrifugo\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eSentrifugo\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TCL 人才管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"TCL人才管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MTHR 人事薪资考勤管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"MTHR+人事薪资考勤管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"嘉扬（kayang） E-HR\",\"rule\":[{\"regexps\":{\"body\":[\"E-HR\",\"人力资源信息系统\",\"上海嘉扬信息系统有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"梵志ES平台\",\"rule\":[{\"regexps\":{\"body\":[\"梵志ES平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"QNAP-QGenie\",\"rule\":[{\"regexps\":{\"header\":[\"Server: QGenie\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OpenMediaVault\",\"rule\":[{\"regexps\":{\"header\":[\"Set-Cookie: X-OpenMediaVault-SESSIONID=\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LenovoEMC-ix4-300d\",\"rule\":[{\"regexps\":{\"header\":[\"\\u003ch2 id=\\\"devicename\\\"\\u003eix4-300d - 主页\\u003c/h2\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DLink ShareCenter\",\"rule\":[{\"regexps\":{\"body\":[\"In order to access the ShareCenter\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Rockstor\",\"rule\":[{\"regexps\":{\"header\":[\"Target Name : ROCKSTOR\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WD-MyBook\",\"rule\":[{\"regexps\":{\"header\":[\"\\u003ctitle\\u003eMy Book World Edition - MyBookWorld\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Toshiba-Canvio\",\"rule\":[{\"regexps\":{\"header\":[\"background:url(/img/Canvio_logo.gif) no-repeat;\\\"\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NAS4Free\",\"rule\":[{\"regexps\":{\"header\":[\"\\u003ctitle\\u003eNAS4Free\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TerraMaster NAS\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-By: TerraMaster\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"D-Link 存储\",\"rule\":[{\"regexps\":{\"body\":[\"name=\\\"mydlink\\\"\",\"id=\\\"mydlink\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Zyxel NAS326\",\"rule\":[{\"regexps\":{\"body\":[\"NAS326\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MEDION LifeCloud\",\"rule\":[{\"regexps\":{\"body\":[\"MEDION\",\"LifeCloud\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"璐华Ruvar OA\",\"rule\":[{\"regexps\":{\"body\":[\"广州市璐华计算机有限公司\",\"CustomerFiles/carousel/1.jpg\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"sohuu 极限OA\",\"rule\":[{\"regexps\":{\"body\":[\"sohuu.ico\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"正方OA\",\"rule\":[{\"regexps\":{\"body\":[\"logo_zfoa.png\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"源天软件OA\",\"rule\":[{\"regexps\":{\"body\":[\"Visionsoft\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PHPOA\",\"rule\":[{\"regexps\":{\"body\":[\"PHPOA协同办公软件\",\"template/default/images/admin_img/msg.png\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"凤凰办公OA\",\"rule\":[{\"regexps\":{\"body\":[\"凤凰办公OA\",\"gb_2image/OAdenglu_bg.png\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"京伦OA\",\"rule\":[{\"regexps\":{\"body\":[\"ThemeCssCookie\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"IBOS企业协同管理软件\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by \\u003cstrong\\u003eIBOS\",\"IBOS Inc.\",\"content=\\\"IBOS Team\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"东华 OA系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cspan\\u003e东华软件股份公司版权所有\\u003c/span\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"奕诗 医疗OA系统\",\"rule\":[{\"regexps\":{\"body\":[\"奕诗OA系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"山大鲁能 OA\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e山大鲁能信息科技有限公司协同办公系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"广州协商 协同管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"广州协商科技有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ME移动协调办公平台\",\"rule\":[{\"regexps\":{\"body\":[\"ME移动协调办公平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"中望 OA\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ca href=\\\"http://www.xtoa.cn\\\" target=\\\"_blank\\\"\\u003e中望软件\\u003c/a\\u003e \\u0026copy; 版权所有\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WisePower OA\",\"rule\":[{\"regexps\":{\"body\":[\"href=\\\"/WisePower/resource/styles/wiseapp.css\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"和佳软件 OA协同办公系统\",\"rule\":[{\"regexps\":{\"body\":[\"技术支持：北京和佳软件技术公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"等级医院评审迎检系统\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"本系统是专家评审系统的衍生系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"颖峰 学校办公OA系统\",\"rule\":[{\"regexps\":{\"body\":[\"广州市颖峰信息科技\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LemonOA\",\"rule\":[{\"regexps\":{\"body\":[\"首页 - Mossle\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"新晨阳光 教务办公管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ch2 class=\\\"cn\\\"\\u003e数字通云平台\\u003c/h2\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"JfinalOA\",\"rule\":[{\"regexps\":{\"body\":[\"JfinalOA\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TopOffice\",\"rule\":[{\"regexps\":{\"body\":[\"topoffice协同办公系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CTOP OA\",\"rule\":[{\"regexps\":{\"body\":[\"src=\\\"images/ctop_logo.gif\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"kingdee OA\",\"rule\":[{\"regexps\":{\"body\":[\"logo-kingdee.png\"],\"header\":[\"oa/login/logout.jsp\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Maop OA\",\"rule\":[{\"regexps\":{\"body\":[\"href=\\\"http://www.oooa.cn\\\"\\u003e重庆猫扑网络科技有限公司\\u003c/a\\u003e\",\"for 猫扑oa\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ioffice\",\"rule\":[{\"regexps\":{\"body\":[\"ioffice.net\",\"hongfan. all rights reserved\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Ioa\",\"rule\":[{\"regexps\":{\"body\":[\"id=\\\"foot_version\\\"\\u003e厦门容能科技有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SanDu OA\",\"rule\":[{\"regexps\":{\"body\":[\"青岛叁度信息技术有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DHC OA\",\"rule\":[{\"regexps\":{\"body\":[\"src=\\\"/extcomponent/security/image/dhc.png\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"UltraME\",\"rule\":[{\"regexps\":{\"body\":[\"me移动协调办公平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"快普 M6\",\"rule\":[{\"regexps\":{\"body\":[\"src=\\\"resource/javascript/jkpm6.datetime.js\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CNPOWER-OA(OA8000)\",\"rule\":[{\"regexps\":{\"body\":[\"/oaapp/webobjects/oaapp.woa\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WishOA\",\"rule\":[{\"regexps\":{\"body\":[\"wishoa_webplugin.js\",\"closewindownoask\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Xdoa-OA\",\"rule\":[{\"regexps\":{\"body\":[\"北京创信达科技有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Cnoa-OA\",\"rule\":[{\"regexps\":{\"body\":[\"powered by cnoa.cn\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Soffice\",\"rule\":[{\"regexps\":{\"body\":[\"soffice\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SmartOA\",\"rule\":[{\"regexps\":{\"body\":[\"href=\\\"http://www.smartoa.com.cn/download/smartoa.apk\\\"\\u003e安卓客户端\\u003c/a\\u003e\",\"SmartOA\"],\"header\":[\"smartoa\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Ymhome-OA\",\"rule\":[{\"regexps\":{\"body\":[\"/yimioa.apk\",\"一米oa\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Heerit 希尔OA\",\"rule\":[{\"regexps\":{\"body\":[\"希尔智慧科技\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"maop 猫扑OA\",\"rule\":[{\"regexps\":{\"body\":[\"For 猫扑OA\",\"For MaopSoft OA\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Lemon管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"LEMON管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"创想颖峰OA\",\"rule\":[{\"regexps\":{\"body\":[\"创想颖峰\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"坤志OA\",\"rule\":[{\"regexps\":{\"body\":[\"title='坤志OA'\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"启莱OA\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"启莱\",\"\\u003coption value=\\\"index\\\"\\u003e个性风格\\u003c/option\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"R业务管理系统OA\",\"rule\":[{\"regexps\":{\"body\":[\"R业务管理系统OA\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NEON管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"NEON管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NEON后台管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"NEON后台管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"新点 OA\",\"rule\":[{\"regexps\":{\"body\":[\"新点助手工具\",\"EpointOA\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"高速波OA网络智能办公系统\",\"rule\":[{\"regexps\":{\"body\":[\"高速波OA网络智能办公系统\",\"getCompanyAll\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"协达 OA\",\"rule\":[{\"regexps\":{\"body\":[\"协达软件\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ruioa\",\"rule\":[{\"regexps\":{\"body\":[\"/hqbadmin/\",\"新锐网络网站管理平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"九思OA\",\"rule\":[{\"regexps\":{\"body\":[\"/jsoa/login.jsp\",\"九思软件\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"泛普软件 建筑工程施工OA办公系统\",\"rule\":[{\"regexps\":{\"body\":[\"建筑工程施工OA办公系统_泛普软件\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OA企业智能办公自动化系统\",\"rule\":[{\"regexps\":{\"body\":[\"count/mystat.asp\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"yongyoufe\",\"rule\":[{\"regexps\":{\"body\":[\"FE协作\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"O2OA\",\"rule\":[{\"regexps\":{\"body\":[\"O2OA\",\"o2_core\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Fortinet Fortigate SSL VPN\",\"rule\":[{\"favicon\":{\"mmh3\":[\"945408572\"]},\"regexps\":{\"body\":[\"location=\\\"/remote/login\\\"\",\"/remote/login?lang=\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Pulse Secure SSL VPN\",\"rule\":[{\"regexps\":{\"body\":[\"Pulse Connect Secure\",\"/dana-na/auth\"],\"header\":[\"dana-na/auth\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"F5 FirePass\",\"rule\":[{\"regexps\":{\"body\":[\"F5 Networks FirePass\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ADTsec 安达通 VPN\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eSJW74 VPN网关控制台管理员登录\\u003c/title\\u003e\",\"TPN-2G网关控制台管理员登录\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"友旺-WB-02N\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eWB-02N \\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"迈普-VPN3005\",\"rule\":[{\"regexps\":{\"body\":[\"WWW-Authenticate: Basic realm=\\\"MPSec VPN3005C-104\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"H3C SSL VPN\",\"rule\":[{\"regexps\":{\"body\":[\"SSLVPN Domain list\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Fortinet sslvpn\",\"rule\":[{\"regexps\":{\"body\":[\"/sslvpn/portal.html\",\"fortinet\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PulseSecure SSL VPN\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cb\\u003epulse connect secure\\u003c/b\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ADTsec 安达通 SJW74 VPN网关\",\"rule\":[{\"regexps\":{\"body\":[\"SJW74 VPN网关控制台管理员登录\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NSFOCUS VPN\",\"rule\":[{\"regexps\":{\"body\":[\"/logo_login_nsfocus.png\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"iceflow 冰峰 VPN\",\"rule\":[{\"regexps\":{\"body\":[\"iceflow.cn\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ADTsec 安达通 IAM网关\",\"rule\":[{\"regexps\":{\"body\":[\"IAM网关控制\",\"/adt.js\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LnmVPN管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"LnmVPN管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Vigor\",\"rule\":[{\"regexps\":{\"body\":[\"Vigor 登录页面\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Array_Networks_VPN\",\"rule\":[{\"regexps\":{\"body\":[\"an_util.js\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"智汇网络-智汇云红包后台管理中心\",\"rule\":[{\"regexps\":{\"body\":[\"智汇云红包-后台管理中心\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"用友-MA插件\",\"rule\":[{\"regexps\":{\"body\":[\"用友_MA插件管理\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"四信通信-公司产品\",\"rule\":[{\"regexps\":{\"header\":[\"Server: httpd_four-faith\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"迪普-dptech-server\",\"rule\":[{\"regexps\":{\"header\":[\"Server: dptech server\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Oracle GlassFish Server\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Oracle GlassFish Server\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ZENEDGE-公司产品\",\"rule\":[{\"regexps\":{\"header\":[\"ZENEDGE\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"中搜WEB服务器\",\"rule\":[{\"regexps\":{\"header\":[\"ASUSTeK UPnP/1.0 MiniUPnPd/1.4 AirTies/ASP 1.0 UPnP/1.0 miniupnpd/1.0 Apache-Coyote/1.1 Boa/0.94.13 Boa/0.94.14rc21 Camera Web Server CouchDB/1.6.1 (Erlang OTP/18) Cross Web Server DNVRS-Webs DVRDVS-Webs DasanNetwork Solution Debian/4.0 UPnP/1.0 miniupnpd/1.0 DWS GoAhead-Webs HTTP Server Hikvision-Webs IPCamera-Webs JAWS/1.0 Jan 21 2017\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"UUSpeed-一体化安全移动办公平台\",\"rule\":[{\"regexps\":{\"header\":[\"Server: yaWeb/0.4\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"phpLDAPadmin\",\"rule\":[{\"regexps\":{\"body\":[\"phpldapadmin -\",\"src=\\\"images/default/logo.png\\\" title=\\\"phpldapadmin logo\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"lotwan 广域网加速系统\",\"rule\":[{\"regexps\":{\"body\":[\"lotwan 广域网加速系统\",\"北京华夏创新科技有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"红旗集群管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cb\\u003e登录到红旗集群管理系统\\u003c/b\\u003e\\u003c/td\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"护卫神·主机管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"护卫神·主机管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Oracle Fusion Middleware\",\"rule\":[{\"regexps\":{\"body\":[\"Welcome to Oracle Fusion Middleware\"],\"header\":[\"Oracle-Application-Server\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"百傲瑞达\",\"rule\":[{\"regexps\":{\"body\":[\"/public/controls/dhtmlx/codebase/dhtmlx.js\",\"licenseVailable\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"大华DSS\",\"rule\":[{\"regexps\":{\"body\":[\"/portal/login_init.action\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"蓝盾互联网接入口检测器\",\"rule\":[{\"regexps\":{\"body\":[\"蓝盾互联网接入口检测器\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"安信华Web弱点测试系统2012\",\"rule\":[{\"regexps\":{\"body\":[\"安信华Web弱点测试系统2012 - 登陆\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"巡风内网漏洞扫描系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e巡风\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"RedSeal-RedSeal-数字防御平台\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eRedSeal\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Vectra-Cognito-Platform\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ch1\\u003eVectra Cognito Login\\u003c/h1\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Seceon-Seceon-OTM\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eSeceon OTM\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ForeScout-ForeScout-Platform\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eForescout Portal\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Digital-Guardian-Digital-Guardian\",\"rule\":[{\"regexps\":{\"body\":[\"class=\\\"theme_default brand_Guardian mode_ wizard_\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"百傲瑞达 安防管理系统平台\",\"rule\":[{\"regexps\":{\"body\":[\"else if(\\\"百傲瑞达\\\"==\\\"百傲瑞达\\\")\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Alert-Logic-Cloud-Defender\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eAlert Logic Appliance\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"一所-网探D01\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e网探D01\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"白帽汇-FOEYE\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eFOEYE\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"红芯-安全管控平台\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e红芯安全管控平台\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"天镜web应用检测系统\",\"rule\":[{\"regexps\":{\"body\":[\"天镜web应用检测系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apache JMeter\",\"rule\":[{\"regexps\":{\"body\":[\"Apache JMeter Dashboard\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WebGoat\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"WebGoat Application\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ESET-NOD32\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"NOD32\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"创旗IDC/ISP接入资源管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"创旗IDC/ISP接入资源管理系统\",\"IDC/ISP\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"创旗信息安全管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"创旗信息安全管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"创旗ICP/IP地址信息备案管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"创旗ICP/IP地址信息备案管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OSSIM\",\"rule\":[{\"regexps\":{\"body\":[\"AlienVault OSSIM\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"蓝盾安全扫描系统\",\"rule\":[{\"regexps\":{\"body\":[\"蓝盾安全扫描系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Ultra_Electronics\",\"rule\":[{\"regexps\":{\"body\":[\"href=\\\"/preauth/manifest.json\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SpamTitan\",\"rule\":[{\"regexps\":{\"body\":[\"SpamTitan\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Symantec-Endpoint-Protection-Manager\",\"rule\":[{\"regexps\":{\"body\":[\"Symantec Endpoint Protection Manager\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"REDDOXX\",\"rule\":[{\"regexps\":{\"body\":[\"REDDOXX\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PIOLINK-Web-Manager\",\"rule\":[{\"regexps\":{\"body\":[\"PIOLINK Web Manager\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"F_Secure-Anti-Virus\",\"rule\":[{\"regexps\":{\"body\":[\"F-Secure Anti-Virus for Internet Mail\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Dunbar-Cyphon\",\"rule\":[{\"regexps\":{\"header\":[\"Cyphon\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SCYTHE-Crossbow\",\"rule\":[{\"regexps\":{\"body\":[\"SCYTHE\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Bitdefender-Bitdefender-GravityZone\",\"rule\":[{\"regexps\":{\"body\":[\"Bitdefender GravityZone\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Contrast-Security-Contrast-Security\",\"rule\":[{\"regexps\":{\"body\":[\"Toggle High Contrast\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PortSwigger-Burp-Suite\",\"rule\":[{\"regexps\":{\"body\":[\"Burp Suite Professional\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"盛邦-应用防护系统\",\"rule\":[{\"regexps\":{\"body\":[\"WebRAYWeb应用防护系统 V6.0\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Greenbone\",\"rule\":[{\"regexps\":{\"body\":[\"Greenbone Security Assistant\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"W5 SOAR\",\"rule\":[{\"regexps\":{\"body\":[\"W5 SOAR\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"科来-RAS\",\"rule\":[{\"regexps\":{\"body\":[\"科来网络回溯分析系统 - 服务器\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"BASE-Security\",\"rule\":[{\"regexps\":{\"body\":[\"HSFCSR Neuroinformatics Wiki\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LANCOM-设备\",\"rule\":[{\"regexps\":{\"body\":[\"Copyright (c) LANCOM Systems\"],\"header\":[\"Server: LANCOM\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"McAfee-ePolicy-Orchestrator\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Undefined Product Name - define product and version info in config/branding 0.0.0\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MobilityGuard\",\"rule\":[{\"regexps\":{\"header\":[\"Server: MobilityGuard\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Quest-Password-Manager\",\"rule\":[{\"regexps\":{\"body\":[\"One Identity Password Manager\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Secure-SnapGear\",\"rule\":[{\"regexps\":{\"body\":[\"SnapGear\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Simple-Phishing-Toolkit\",\"rule\":[{\"regexps\":{\"body\":[\"spt - simple phishing toolkit\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"蓝太平洋舆情监测系统\",\"rule\":[{\"regexps\":{\"body\":[\"蓝太平洋舆情监测系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"联软IT安全运维管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"::联软IT安全运维管理系统::\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"H3C-SecCenter\",\"rule\":[{\"regexps\":{\"body\":[\"SecCenter\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"众人网络-iKEY管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"iKEY管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WEBSOC\",\"rule\":[{\"regexps\":{\"body\":[\"登录 - WebSOC知道网站立体监控系统 - 知道创宇\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Trend-Micro-Deep-Discovery-Analyzer\",\"rule\":[{\"regexps\":{\"body\":[\"亚信安全\\u0026trade; 深度威胁发现设备\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CipherMail-Email-Encryption-Gateway\",\"rule\":[{\"regexps\":{\"body\":[\"CipherMail Email Encryption Gateway\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Picus-Security\",\"rule\":[{\"regexps\":{\"body\":[\"Picus Security\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Enduser-Protection\",\"rule\":[{\"regexps\":{\"body\":[\"User Portal\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"金格-key验证\",\"rule\":[{\"regexps\":{\"body\":[\"/general/login/index.php\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"海泰-key验证\",\"rule\":[{\"regexps\":{\"body\":[\"/general/login/index.php\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"bw-CodeMeter\",\"rule\":[{\"regexps\":{\"body\":[\"CodeMeter许可管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CEM-Systems-AC2000\",\"rule\":[{\"regexps\":{\"header\":[\"Server: GoAhead-Webs/2.5.0\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Paradox-安全产品\",\"rule\":[{\"regexps\":{\"body\":[\"Your Paradox System\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"山石网科Hillstone 安全设备\",\"rule\":[{\"regexps\":{\"body\":[\"HILLSTONE NETWORKS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"中新金盾信息安全管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"中新金盾信息安全管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"联软 UniSDP安界软件定义边界系统\",\"rule\":[{\"regexps\":{\"body\":[\"联软SDP系统\",\"/UniSSO/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"联软 UniNXG安全数据交换系统\",\"rule\":[{\"regexps\":{\"body\":[\"安全数据摆渡系统\",\"/UniExServices/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"联软 UniNAC网络准入控制系统\",\"rule\":[{\"regexps\":{\"body\":[\"UniNAC\",\"UniNAC准入控制系统\",\"/portal/redirect/nacc/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"联软 UniNID网络智能防御系统\",\"rule\":[{\"regexps\":{\"body\":[\"UniNID网络智能防御系统\",\"/agentless/login.jsp\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"联软 UniDLP数据防泄露系统\",\"rule\":[{\"regexps\":{\"body\":[\"联软科技文档保护平台\",\"/UniPortal/index.jsp\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"IBM QRadar\",\"rule\":[{\"regexps\":{\"body\":[\"IBM QRadar\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OpenRASP 自适应安全防护设备\",\"rule\":[{\"regexps\":{\"body\":[\"OpenRASP\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"腾讯Tencent 御点终端管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"腾讯iOA控制台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"adslr 飞鱼星企业级智能上网行为管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"飞鱼星企业级智能上网行为管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"博华网龙信息安全一体机\",\"rule\":[{\"regexps\":{\"body\":[\"博华网龙信息安全一体机\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"联软科技 产品\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1166665060\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OpenVAS\",\"rule\":[{\"favicon\":{\"mmh3\":[\"20649669\"]},\"regexps\":{\"body\":[\"openvas.css\",\"OpenVAS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SmartNac\",\"rule\":[{\"regexps\":{\"body\":[\"SmartNac\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"思福迪-LOGBASE日志管理综合审计系统\",\"rule\":[{\"regexps\":{\"body\":[\"/login/sls/auth?RequestedPage\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HAC 运维审计系统登录\",\"rule\":[{\"regexps\":{\"body\":[\"HAC 运维审计系统登录\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"国都兴业信息审计系统\",\"rule\":[{\"regexps\":{\"body\":[\"国都兴业信息审计系统技术\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"H3C SecPath 运维审计系统\",\"rule\":[{\"regexps\":{\"body\":[\"H3C SecPath 运维审计系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"中科新业 网络安全审计系统\",\"rule\":[{\"regexps\":{\"body\":[\"中科新业网络安全审计系统\",\"中科新业网络哨兵\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"山石网科Hillstone 安全审计平台\",\"rule\":[{\"regexps\":{\"body\":[\"Hillstone安全审计平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"蓝盾帐号集中管理与审计系统\",\"rule\":[{\"regexps\":{\"body\":[\"蓝盾帐号集中管理与审计系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"蓝盾数据库及业务安全监控审计系统\",\"rule\":[{\"regexps\":{\"body\":[\"蓝盾数据库及业务安全监控审计系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"蓝盾信息安全管理审计系统\",\"rule\":[{\"regexps\":{\"body\":[\"蓝盾信息安全管理审计系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"华清信安综合日志管理审计系统\",\"rule\":[{\"regexps\":{\"body\":[\"华清信安综合日志管理审计系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Union HAC\",\"rule\":[{\"regexps\":{\"body\":[\"/image/serchnotice.jpg\",\"hac 运维审计系统登录\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"H3C SecPath\",\"rule\":[{\"regexps\":{\"body\":[\"h3c secpath 运维审计\",\"\\u003cspan\\u003eh3c secpath 运维审计系统\\u003c/span\\u003e\\u003c/div\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Accellion-Secure-File-Transfer\",\"rule\":[{\"regexps\":{\"body\":[\"Secured by Accellio\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Biscom-Delivery-Server\",\"rule\":[{\"regexps\":{\"body\":[\"ANSYS Secure Transfer\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Axway-SecureTransport\",\"rule\":[{\"regexps\":{\"header\":[\"Server: SecureTransport\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"phpATM\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by phpATM\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Signiant-Signiant-Manager+Agents\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Signiant\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"South_River-CORNERSTONE-MFT\",\"rule\":[{\"regexps\":{\"header\":[\"Server: SouthRiver\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Cute File Explorer\",\"rule\":[{\"regexps\":{\"body\":[\"Cute File Explorer\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Glaway MOM制造运营管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eGlaway MOM制造运营管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"AD账号自助管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"AD账号自助管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"VCM办公管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"VCM办公管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MEE管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"MEE管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SmartProperty物业管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"SmartProperty物业管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CPC网络办公管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"CPC网络办公管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"承诺达客服管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"承诺达客服管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"锐力智能办公平台\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e欢迎使用锐力智能办公平台\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"金航网上阅卷系统\",\"rule\":[{\"regexps\":{\"body\":[\"金航网上阅卷系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"263 企业云通讯\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1081820320\"]},\"regexps\":{\"body\":[\"北京二六三企业通信有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MinDoc 接口文档在线管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by MinDoc\",\"\\u003cmeta name=\\\"author\\\" content=\\\"MinDoc\\\" /\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MinDoc-接口文档在线管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"MinDoc\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"翌羽信息-OPMS管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"OPMS管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"GateOne\",\"rule\":[{\"regexps\":{\"header\":[\"Server: GateOne\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"金电网安堡垒机\",\"rule\":[{\"regexps\":{\"body\":[\"金电网安可信运维管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"帕拉迪-统一安全管理和综合审计系统\",\"rule\":[{\"regexps\":{\"body\":[\"帕拉迪统一安全管理与综合审计系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"碉堡堡垒机\",\"rule\":[{\"regexps\":{\"body\":[\"碉堡堡垒机\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"IT内控堡垒主机\",\"rule\":[{\"regexps\":{\"body\":[\"IT内控堡垒主机\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"帕拉迪-Core4A-UTM\",\"rule\":[{\"regexps\":{\"body\":[\"帕拉迪Core4A-UTM\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CheungSSH\",\"rule\":[{\"regexps\":{\"body\":[\"CheungSSH 版权所有\",\"/img/cheungssh.ico\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"云安宝-云匣子\",\"rule\":[{\"regexps\":{\"body\":[\"CommonName: 云匣子\",\"Organization: 深圳云安宝科技有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ManageEngine-ADAudit\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003coption value = \\\"ADAuditPlus Authentication\\\"\\u003e\",\"ManageEngine - ADManager Plus\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"中远麒麟堡垒机\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1915366547\",\"-2084234863\"]},\"regexps\":{\"body\":[\"alert('没采集到指纹数据')\",\"window.parent.parent.location.href='admin.php?controller=admin_index\\u0026action=login'\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Microsoft SQL Server Reporting Services\",\"rule\":[{\"regexps\":{\"body\":[\"Reportserver/Pages/ReportViewer.aspx\"],\"header\":[\"ReportServer/Pages/ReportViewer.aspx\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"思凯普thinkape\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1574451046\"]},\"regexps\":{\"body\":[\"思凯普\",\"ThinkApe\",\"版权所有@ThinkApe思凯普\",\"Ashx/MobileSSOYL.ashx\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"润乾报表\",\"rule\":[{\"regexps\":{\"body\":[\"raqsoft/images\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"AcSoft\",\"rule\":[{\"regexps\":{\"body\":[\"费用报销系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"用友-U8\",\"rule\":[{\"regexps\":{\"body\":[\"用友优普信息技术有限公司\",\"U8远程接入\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"phpRechnung\",\"rule\":[{\"regexps\":{\"body\":[\"include/phprechnung.css\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"用友-GRP-U8\",\"rule\":[{\"regexps\":{\"body\":[\"用友GRP-U8\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SNB股票交易软件\",\"rule\":[{\"regexps\":{\"body\":[\"SNBmt自动交易系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HostBill\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cstrong\\u003eHostBill\\u003c/strong\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"osTicket\",\"rule\":[{\"regexps\":{\"body\":[\"osTicket Installer\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Open-Source-Ticket-Request-System\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-By: OTRS\",\"Open Ticket Request System\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"phpMoneyBooks\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cstrong\\u003ephpMoneyBooks\\u003c/strong\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"GF-Akuntansi-2008\",\"rule\":[{\"regexps\":{\"body\":[\"GF-Akuntansi 2008\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"久其财务报表\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ccenter\\u003eJQCI\\u003c/center\\u003e\",\"/netrep\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Firefly-III\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"application-name\\\" content=\\\"Firefly III\\\"\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"速达荣耀G5.net\",\"rule\":[{\"regexps\":{\"body\":[\"速达荣耀G5.net\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"速达V3.NET财务\",\"rule\":[{\"regexps\":{\"body\":[\"速达V3.NET财务\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"速达-3000-PRO\",\"rule\":[{\"regexps\":{\"body\":[\"速达3000-PRO商业版\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"速达V5.NET-PRO\",\"rule\":[{\"regexps\":{\"body\":[\"速达V5.NET-PRO\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"速达-速达S4.Cloud财务\",\"rule\":[{\"regexps\":{\"body\":[\"速达S4.Cloud财务\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"速达-V4.net财务管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"速达V4.Net财务\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WallacePOS\",\"rule\":[{\"regexps\":{\"body\":[\"WallacePOS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"银校通收费管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"杭州新利软件有限公司\",\"统一缴费管理平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"普联-财务系统\",\"rule\":[{\"regexps\":{\"body\":[\"All Rights Reserved. 普联(软件|中国) 版权所有\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"水滴云\",\"rule\":[{\"regexps\":{\"body\":[\"水滴报销\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"安财软件\",\"rule\":[{\"regexps\":{\"body\":[\"欢迎您光临安财软件网络报销系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TerraMaster-存储系统\",\"rule\":[{\"regexps\":{\"body\":[\"TerraMaster 系统管理\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CAStor\",\"rule\":[{\"regexps\":{\"header\":[\"CAStor\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Carel-Data-Server\",\"rule\":[{\"regexps\":{\"header\":[\"CarelDataServer\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"EMC Unisphere\",\"rule\":[{\"regexps\":{\"body\":[\"Unisphere\\u003cbr\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Seagate-GoFlex\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ca href=\\\"http://support.GoFlexhome.hipserv.com\\\" target=\\\"_blank\\\"\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"科达-磁盘阵列系统\",\"rule\":[{\"regexps\":{\"body\":[\"科达磁盘阵列系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Adaptec-Storage-Manager\",\"rule\":[{\"regexps\":{\"header\":[\"Adaptec ASM\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"德讯科技数据中心\",\"rule\":[{\"regexps\":{\"body\":[\"Datcent .All Rights Reserved.\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"IBM-Storwize\",\"rule\":[{\"regexps\":{\"body\":[\"IBM Storwize\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"EMC XtremIO\",\"rule\":[{\"regexps\":{\"body\":[\"XtremIO Management Application\",\"href=\\\"mailto:xtremioinfo@emc.com\\\"\",\"XtremIO - Download\",\"XtremIO - 下载\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FalconStor\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eFalconStor Console Web Start\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"科达-磁盘阵列\",\"rule\":[{\"regexps\":{\"body\":[\"磁盘阵列管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"浪潮 存储\",\"rule\":[{\"regexps\":{\"body\":[\"浪潮存储 您身边的存储专家\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Storage-Management\",\"rule\":[{\"regexps\":{\"body\":[\"DD System Manager Login\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"IBM-UltraScalable-Specialist\",\"rule\":[{\"regexps\":{\"body\":[\"IBM UltraScalable Specialist\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"云盒子\",\"rule\":[{\"regexps\":{\"body\":[\"云盒子\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"syncloud\",\"rule\":[{\"regexps\":{\"body\":[\"syncloud\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"可道云系统\",\"rule\":[{\"regexps\":{\"body\":[\"可道云.资源管理器\\u003c\",\"Powered by KodExplorer\",\"content=\\\"KodExplorer\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LG-Network-Storage\",\"rule\":[{\"regexps\":{\"body\":[\"form_bg_LG_NAS_Storage.gif\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LenovoEMC\",\"rule\":[{\"regexps\":{\"body\":[\"alt=\\\"LenovoEMC\\\"/\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DiskStation-Manager(DSM)\",\"rule\":[{\"regexps\":{\"body\":[\";DiskStation\\\" /\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TerraMaster-系统管理\",\"rule\":[{\"regexps\":{\"body\":[\"TerraMaster 系统管理\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Dropbox-Dropbox\",\"rule\":[{\"regexps\":{\"header\":[\"https://dropbox-\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"seccloud\",\"rule\":[{\"regexps\":{\"body\":[\"SecCloud\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TerraMaster TOS\",\"rule\":[{\"regexps\":{\"body\":[\"TOS Loading\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apache Storm\",\"rule\":[{\"regexps\":{\"body\":[\"Storm UI\",\"Storm Logviewer\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Hadoop Administration\",\"rule\":[{\"regexps\":{\"body\":[\"Namenode information\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TRS 拓尔思 Hybase\",\"rule\":[{\"regexps\":{\"body\":[\"TRS Hybase管理台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Hadoop Hue\",\"rule\":[{\"regexps\":{\"body\":[\"Welcome to Hue\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apache Ambari\",\"rule\":[{\"regexps\":{\"body\":[\"Ambari\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Pentaho-User-Console\",\"rule\":[{\"regexps\":{\"body\":[\"Pentaho User Console\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apache Flink\",\"rule\":[{\"regexps\":{\"body\":[\"Apache Flink\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Informatica-Server\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Informatica\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"AliyunMQS\",\"rule\":[{\"regexps\":{\"header\":[\"Server: AliyunMQS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Cloudera-Manager\",\"rule\":[{\"regexps\":{\"header\":[\"Set-Cookie: Cloudera_Manager_SESSIONID\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HBase\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eHBase Region Server\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"iBase4J\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"description\\\" content=\\\"iBase4J\\\" /\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HttpFS\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cb\\u003eHttpFS service\\u003c/b\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Jstorm\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eJstorm\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CacheCloud系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eCacheCloud系统\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Codis\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eCodis\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Elasticsearch sql\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eElasticsearch-sql\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Druid-Indexer-Coordinator\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"Description\\\" content=\\\"Druid\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Spark-HistoryServer\",\"rule\":[{\"regexps\":{\"body\":[\"spark.history\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Azkaban\",\"rule\":[{\"regexps\":{\"body\":[\"Azkaban\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TCL 警云数据管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"TCL警云数据管理平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apache Solr\",\"rule\":[{\"regexps\":{\"body\":[\"solr admin\",\"app_config.solr_path\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Codis Dashboard\",\"rule\":[{\"regexps\":{\"body\":[\"Codis\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Metaflow Admin\",\"rule\":[{\"regexps\":{\"body\":[\"Metaflow Admin\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DataSphere\",\"rule\":[{\"regexps\":{\"body\":[\"DataSphere\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TipDM\",\"rule\":[{\"regexps\":{\"body\":[\"TipDM\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OpenCTI\",\"rule\":[{\"regexps\":{\"body\":[\"OpenCTI - Cyber Threat Intelligence Platform\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PiFlow\",\"rule\":[{\"regexps\":{\"body\":[\"PiFlow Big Data Pipeline System\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DataSphere Studio\",\"rule\":[{\"regexps\":{\"body\":[\"DataSphere Studio\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apache Spark\",\"rule\":[{\"favicon\":{\"mmh3\":[\"856048515\"]},\"regexps\":{\"body\":[\"Spark Master\",\"/spark-logo\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Smartbi\",\"rule\":[{\"regexps\":{\"body\":[\"Smartbi 更聪明的大数据分析软件！\",\"smartbi.gcf.gcfutil\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"神策分析\",\"rule\":[{\"regexps\":{\"header\":[\"sensorsdata\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Zeppelin\",\"rule\":[{\"regexps\":{\"body\":[\"Zeppelin\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apache Kylin\",\"rule\":[{\"regexps\":{\"body\":[\"Kylin\",\"http-equiv=\\\"refresh\\\" content=\\\"1;url=kylin\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HuaWei FusionInsight\",\"rule\":[{\"regexps\":{\"header\":[\"fusioninsight\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Cachecloud\",\"rule\":[{\"regexps\":{\"body\":[\"cachecloud系统\",\"alert(\\\"系统不存在该用户名，请确认该用户申请了cachecloud权限!\\\");\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Indexer Coordinator\",\"rule\":[{\"regexps\":{\"body\":[\"druid indexer coordinator console\",\"content=\\\"druid indexer coordinator console\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Spark history server\",\"rule\":[{\"regexps\":{\"body\":[\"history server\",\"src=\\\"/static/historypage-common.js\\\"\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Map/Reduce\",\"rule\":[{\"regexps\":{\"body\":[\"it looks like you are making an http request to a hadoop ipc port\"],\"header\":[\"mapreduce\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OSSEAN\",\"rule\":[{\"regexps\":{\"body\":[\"Trustie-OSSEAN\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"openLooKeng\",\"rule\":[{\"regexps\":{\"body\":[\"OpenLooKeng Query Editor\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DataX Web\",\"rule\":[{\"regexps\":{\"body\":[\"DataX\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ExcelSpice\",\"rule\":[{\"regexps\":{\"body\":[\"ExcelSpice\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PageNow\",\"rule\":[{\"regexps\":{\"body\":[\"PageNow\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Pothos\",\"rule\":[{\"regexps\":{\"body\":[\"Pothos\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Thinking Analytics\",\"rule\":[{\"regexps\":{\"body\":[\"Thinking Analytics\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ScrapydWeb\",\"rule\":[{\"regexps\":{\"body\":[\"servers - ScrapydWeb\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Scriptis\",\"rule\":[{\"regexps\":{\"body\":[\"Scriptis\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Analytics Cloud 分析云\",\"rule\":[{\"regexps\":{\"body\":[\"Analytics Cloud 分析云\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DataHunter\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1705772735\"]},\"regexps\":{\"body\":[\"content=\\\"DataHunter,\",\"DataHunter\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DataHub\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1959205744\"]},\"regexps\":{\"body\":[\"DataHub\",\"A Metadata Platform for the Modern Data Stack\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CCProxy\",\"rule\":[{\"regexps\":{\"header\":[\"CCProxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Privoxy代理\",\"rule\":[{\"regexps\":{\"body\":[\"Privoxy\"],\"header\":[\"Privoxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HAProxy-Report\",\"rule\":[{\"regexps\":{\"body\":[\"Statistics Report for HAProxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ASProxy\",\"rule\":[{\"regexps\":{\"body\":[\"ASProxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"BlueCoat-ProxySG\",\"rule\":[{\"regexps\":{\"body\":[\"ProxySG\",\"by vultr-proxysg-lk\"],\"header\":[\"ProxySG\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Citrix ConfProxy\",\"rule\":[{\"regexps\":{\"header\":[\"confproxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CGIProxy\",\"rule\":[{\"regexps\":{\"body\":[\"CGItrick\",\"location='/cgiproxy/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ethProxy\",\"rule\":[{\"regexps\":{\"header\":[\"ethproxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"IBM-Web-Traffic-Express-Caching-Proxy\",\"rule\":[{\"regexps\":{\"header\":[\"IBM-PROXY-WTE\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Trend-IWSS-Proxy\",\"rule\":[{\"regexps\":{\"header\":[\"Proxy-Agent: IWSS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Mikrotik HttpProxy\",\"rule\":[{\"regexps\":{\"header\":[\"Mikrotik HttpProxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Lusca-Web-Proxy-Cache\",\"rule\":[{\"regexps\":{\"header\":[\"Lusca\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Oracle iPlanet\",\"rule\":[{\"regexps\":{\"header\":[\"Oracle-iPlanet\",\"Oracle iPlanet Web Server\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Tinyproxy\",\"rule\":[{\"regexps\":{\"header\":[\"tinyproxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SipProxyModuleCtx\",\"rule\":[{\"regexps\":{\"body\":[\"SipProxyModuleCtx\"],\"header\":[\"SipProxyModuleCtx\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Pritunl\",\"rule\":[{\"regexps\":{\"body\":[\"Pritunl\"],\"header\":[\"Pritunl\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"3Proxy\",\"rule\":[{\"regexps\":{\"body\":[\"3proxy tiny\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LCR-Proxy\",\"rule\":[{\"regexps\":{\"header\":[\"Scylla LCRProxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Symantec-SG-S500\",\"rule\":[{\"regexps\":{\"header\":[\"Www-Authenticate: Basic realm=\\\"Symantec SGS S500\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"AnalogX-Proxy\",\"rule\":[{\"regexps\":{\"body\":[\"FTP AnalogX Proxy\",\"POP3 AnalogX Proxy\",\"SMTP AnalogX Proxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OCLC-EZproxy\",\"rule\":[{\"regexps\":{\"body\":[\"Server: EZproxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MuseGlobal-Group-MuseProxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: MuseProxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OrcaTech-Proxy\",\"rule\":[{\"regexps\":{\"header\":[\"Www-Authenticate: Basic realm=\\\"Orca Proxy\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TGate2000\",\"rule\":[{\"regexps\":{\"body\":[\"TGate2000\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Microsoft Forefront TMG 2010\",\"rule\":[{\"regexps\":{\"body\":[\"Microsoft Forefront TMG 2010\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Microsoft Forefront TMG\",\"rule\":[{\"regexps\":{\"body\":[\"Microsoft Forefront TMG\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HAProxy\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"Haproxy Statistics\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"nProxy-代理工具\",\"rule\":[{\"regexps\":{\"header\":[\"Server: nProxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Sendmail\",\"rule\":[{\"regexps\":{\"header\":[\"ESMTP Sendmail\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"BlueCoat-SG\",\"rule\":[{\"regexps\":{\"body\":[\"Blue Coat SG\"],\"header\":[\"BlueCoat-Security-Appliance\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"中国移动-JX01移动代理服务器\",\"rule\":[{\"regexps\":{\"body\":[\"JX01移动代理服务器\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Parallels-H-Sphere\",\"rule\":[{\"regexps\":{\"body\":[\"Parallels H-Sphere\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HP-Network-Automation\",\"rule\":[{\"regexps\":{\"body\":[\"HP-Network-Automation\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Trend-AdSubtract-proxy\",\"rule\":[{\"regexps\":{\"header\":[\"AdSubtract\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SJSWPS-OiWPS\",\"rule\":[{\"regexps\":{\"header\":[\"Sun-Java-System-Web-Proxy-Server\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Varnish\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Varnish\",\"X-Varnish\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CSCSSM\",\"rule\":[{\"regexps\":{\"header\":[\"CSCSSM\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Neotel-Switchboard-Edge-Proxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Switchboard Edge Proxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Proxy-Samba-UOL\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Proxy-Samba UOL\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"micro_proxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: micro_proxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"RabbIT-proxy-version\",\"rule\":[{\"regexps\":{\"header\":[\"Server: RabbIT proxy version\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WaveProxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: WaveProxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Metaproxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Metaproxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ServeTrue-IQ-Proxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: ServeTrue IQProxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DMproxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: DMproxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WECLOUD-Proxy-Server\",\"rule\":[{\"regexps\":{\"header\":[\"Server: WECLOUD Proxy Server\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"kangle-proxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: kangle-proxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FireProxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: FireProxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"RProxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Gnway RProxy Server\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Repro-Proxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Repro Proxy Repro\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"proxygen\",\"rule\":[{\"regexps\":{\"header\":[\"Server: proxygen\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"xProxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: xProxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NEB-PROXY\",\"rule\":[{\"regexps\":{\"header\":[\"Server: NEBPROXY\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Aptproxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Apt-proxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"dmz-proxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: dmz-proxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WebRTC-Proxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: WebRTCProxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"jproxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: jproxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Black-Box-HTTP-Proxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Black Box HTTP Proxy Service\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Etlin-Proxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Etlin-Proxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ASH-Proxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: ASH Proxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"EZproxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: EZproxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MuseProxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: MuseProxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Californium-Http-Proxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Californium Http Proxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ziproxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: ziproxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"soup-transcode-proxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: soup-transcode-proxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"uproxy\",\"rule\":[{\"regexps\":{\"header\":[\"uproxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"csproxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: csproxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MediaProxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Dennree MediaProxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WSPROXY\",\"rule\":[{\"regexps\":{\"header\":[\"X-Application-Context: wsproxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"p2proxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: p2proxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"BlockChainProxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: BlockChainProxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"mitmproxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: mitmproxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Telsso-Cloud-Proxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Telsso Cloud Proxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Go-Proxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Go Proxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TinyHTTPProxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: TinyHTTPProxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"GhostProxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: GhostProxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Geodetics-Comm-Link-Proxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Geodetics Comm Link Proxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"AG代理管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"AG代理管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MAS移动代理服务器\",\"rule\":[{\"regexps\":{\"body\":[\"MAS移动代理服务器-登录\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"frpUI\",\"rule\":[{\"regexps\":{\"body\":[\"frp client admin UI\",\"frps dashboard\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"东软Neusoft NetEye统一登录\",\"rule\":[{\"regexps\":{\"body\":[\"东软 NetEye 统一身份管控系统登录\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FusionAuth\",\"rule\":[{\"regexps\":{\"body\":[\"FusionAuth\"],\"header\":[\"fusionauth\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Atlassian Crowd\",\"rule\":[{\"regexps\":{\"body\":[\"Atlassian Crowd\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apereo CAS\",\"rule\":[{\"regexps\":{\"body\":[\"Jasig Central Authentication Service\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"信安世纪 NetAuth统一身份认证管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"NetAuth统一身份认证管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"信安世纪统一身份认证平台\",\"rule\":[{\"regexps\":{\"body\":[\"信安世纪统一身份认证平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"派拉ParaSecure 单点登录\",\"rule\":[{\"regexps\":{\"body\":[\"派拉统一身份管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Keycloak\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1105083093\"]},\"regexps\":{\"body\":[\"Welcome to Keycloak\",\"www.keycloak.org\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ForgeRock AM\",\"rule\":[{\"regexps\":{\"body\":[\"/openam/oauth2/\",\"ForgeRock Access Management\",\"/openam\"],\"header\":[\"/openam/oauth2/\",\"/openam\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Casdoor\",\"rule\":[{\"regexps\":{\"body\":[\"Casdoor\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ECShop\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"ECShop\",\"content=\\\"68ECShop\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Zen-Cart-shopping\",\"rule\":[{\"regexps\":{\"header\":[\"Set-Cookie: Zenid=\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Batavi\",\"rule\":[{\"regexps\":{\"header\":[\"X-Powered-By: Batavi\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"网趣网上购物系统旗舰版\",\"rule\":[{\"regexps\":{\"header\":[\"Set-Cookie: dmwh\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ECCart\",\"rule\":[{\"regexps\":{\"header\":[\"Set-Cookie: ec_cart_id=\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Maticsoft-Shop商城\",\"rule\":[{\"regexps\":{\"body\":[\"/Maticsoft.\",\"$Maticsoft.\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"BigCommerce\",\"rule\":[{\"regexps\":{\"body\":[\".BigCommerce.com\",\".BigCommerce.com\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ECMall\",\"rule\":[{\"regexps\":{\"body\":[\"/ECMall.css\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"InvoicePlane\",\"rule\":[{\"regexps\":{\"body\":[\"/InvoicePlane/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OpenCart\",\"rule\":[{\"regexps\":{\"body\":[\"/OpenCart.css\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CactuShop\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003c!-- CactuShop\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"3dcart\",\"rule\":[{\"regexps\":{\"body\":[\"3dcart stats\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CaupoShop-Classic\",\"rule\":[{\"regexps\":{\"body\":[\"CaupoShop Classic\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"E-Junkie\",\"rule\":[{\"regexps\":{\"body\":[\"e-Junkie\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"iWebShop\",\"rule\":[{\"regexps\":{\"body\":[\"iWebShopUrl\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"JSPGOU\",\"rule\":[{\"regexps\":{\"body\":[\"jsPGOU-\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Magento\",\"rule\":[{\"regexps\":{\"body\":[\"Magentothem\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Axis-Commerce\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by Axis\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"lebishop\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by lebishop\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Shopify\",\"rule\":[{\"regexps\":{\"body\":[\"X-Shopify-\",\"ShopifySans\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TinyShop\",\"rule\":[{\"regexps\":{\"body\":[\"tiny-dialog.css\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"海盗云商(Haidao)\",\"rule\":[{\"regexps\":{\"body\":[\"/haidao.css\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"任我行grasp 电商系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u0026Site=任我行\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ComersusCart\",\"rule\":[{\"regexps\":{\"body\":[\"comersus.css\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"JEUS\",\"rule\":[{\"regexps\":{\"header\":[\"JEUS WebContainer\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Foxycart\",\"rule\":[{\"regexps\":{\"body\":[\"Foxycart.colorbox.js\",\"Foxycart.css\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PrestaShop\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"PrestaShop\\\"\",\"Powered-By: PrestaShop\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Vtex-Cloud-Commerce-Platform\",\"rule\":[{\"regexps\":{\"body\":[\"Vtex.Commerce.compare.js\"],\"header\":[\"Server: Powered by Vtex\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"RedShop\",\"rule\":[{\"regexps\":{\"body\":[\"/redshop/\",\"/redshop/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Squirrelcart\",\"rule\":[{\"regexps\":{\"body\":[\"/Squirrelcart/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"EarlyImpact-ProductCart\",\"rule\":[{\"regexps\":{\"body\":[\"EarlyImpact, Product Cart\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"eTicket\",\"rule\":[{\"regexps\":{\"body\":[\"eTicket.css\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SearchFitShoppingCart\",\"rule\":[{\"regexps\":{\"body\":[\"generated by SearchFit Shopping Cart\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MivaMerchant\",\"rule\":[{\"regexps\":{\"body\":[\"Miva Merchant\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CubeCart\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by CubeCart\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ExpressionEngine\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by ExpressionEngine\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ICEshop\",\"rule\":[{\"regexps\":{\"body\":[\"Powered By ICEshop\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"JoyupOnline\",\"rule\":[{\"regexps\":{\"body\":[\"Powered By JoyupOnline JoyupOnline.com\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WebAsyst-Shop-Script\",\"rule\":[{\"regexps\":{\"body\":[\"powered by Shop-Script\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"storesprite\",\"rule\":[{\"regexps\":{\"body\":[\"POWERED BY storesprit\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"shopxx\",\"rule\":[{\"regexps\":{\"body\":[\"shopxx.net\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"simplecartjs\",\"rule\":[{\"regexps\":{\"body\":[\"simplecart.min.js\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OSCommerce\",\"rule\":[{\"regexps\":{\"body\":[\"Tags by OSCommerce\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"VamCart\",\"rule\":[{\"regexps\":{\"body\":[\"VamCart.css\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"微三云-微生意\",\"rule\":[{\"regexps\":{\"body\":[\"WSY_copyright\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"中企动力-Zshop业务支撑系统\",\"rule\":[{\"regexps\":{\"body\":[\"Zshop业务支撑系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"盈时-电商管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"盈时电商管理平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Escenic\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Escenic\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Interspire-ShoppingCart\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Interspire Shopping Cart\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"jfinalshop\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"jfinalshop\\\" Powered By jfinalshop\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"System-Shop\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Offizieller Time/system Shop\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PHPShop\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"PHPShop\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TomatoCart\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"TomatoCart\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WooFramework\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"WooFramework\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"zuitu 最土团购\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by \\u003ca href=\\\"http://www.zuitu.com/\\\" target=\\\"_blank\\\"\\u003eZuiTu\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Fanwe方维 外卖系统\",\"rule\":[{\"regexps\":{\"body\":[\"方维外卖\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Fanwe方维 O2O系统\",\"rule\":[{\"regexps\":{\"body\":[\"app/Tpl/main/fanwe/images\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HiShop\",\"rule\":[{\"regexps\":{\"body\":[\"Hishop development team\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"yuanfeng ShopBuilder\",\"rule\":[{\"regexps\":{\"body\":[\"ShopBuilder\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CuuMall\",\"rule\":[{\"regexps\":{\"body\":[\"Power by CuuMall\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MvMmall\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"Copyright\\\" content=\\\"www.mvmmall.cn\\\" /\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MallBuilder\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"copyright\\\" content=\\\"MallBuilder\\\" /\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Allomani shop\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Allomani\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Axous\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"generator\\\" content=\\\"Axous\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"iScripts ReserveLogic\",\"rule\":[{\"regexps\":{\"body\":[\"iScripts ReserveLogic\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"iScripts MultiCart\",\"rule\":[{\"regexps\":{\"body\":[\"iScripts Multicart\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"VShopNServer\",\"rule\":[{\"regexps\":{\"header\":[\"Server: VShopNServer\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WebLinc Workarea\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Workarea Commerce\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WSTMart\",\"rule\":[{\"regexps\":{\"body\":[\"Powered By WSTMart\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"litemall\",\"rule\":[{\"regexps\":{\"body\":[\"litemall-admin\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Sylius\",\"rule\":[{\"regexps\":{\"body\":[\"class=\\\"header sylius-product-name\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"无忧购物系统ASP通用版\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ca href=\\\"buy.asp\\\"\\u003e购物车\\u003c/a\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"AiCart\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"generator\\\" content=\\\"AiCart\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ASPilot Cart\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"copyright\\\" content=\\\"Pilot Cart\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Open Freeway\",\"rule\":[{\"regexps\":{\"body\":[\"shopping_cart.php\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Joomla OpenCart\",\"rule\":[{\"regexps\":{\"body\":[\"/component/opencart/\",\"?option=com_opencart\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"XMall后台管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cspan class=\\\"title\\\"\\u003e后台管理系统\\u003c/span\\u003e\",\"Hotjar Tracking Code for http://xmadmin.exirck.cn\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"XpShop\",\"rule\":[{\"regexps\":{\"body\":[\"/Template/xpshop_currents/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"万米商云 1248商城管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"1248-商城管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"KTN电商管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"KTN电商管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HULU电商平台管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eHULU电商平台管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LYWS-连锁店批零兼营管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"LYWS 连锁店批零兼营管理系统 进销存系统 餐饮管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MetInfo企业网站管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by MetInfo\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MIDAVY(米大卫)管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"MIDAVY(米大卫)管理系统-登录\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ShopXO\",\"rule\":[{\"regexps\":{\"body\":[\"ShopXO\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NIUHAO广商管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"NIUHAO广商管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"蝶贷渠道商管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"蝶贷渠道商管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"叮当快药B2C管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"叮当快药B2C管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"多功能商城管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"多功能商城管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"多卖微商城管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"多卖微商城管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"zfaka\",\"rule\":[{\"regexps\":{\"body\":[\"alt=\\\"zfaka\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"EZ-Shop\",\"rule\":[{\"regexps\":{\"body\":[\"EZ-Shop\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ECTouch\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"ECTouch\"],\"header\":[\"X-Powered-By: ECTouch\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TPshop\",\"rule\":[{\"regexps\":{\"body\":[\"goodsList/id/\",\"TPshop\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"nopCommerce\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by \\u003ca href=\\\"http://www.nopCommerce.com/\\\"\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Officescan\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Officescan Client\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Fortinet FortiGuard\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ch1\\u003eFortiGuard Web Filtering\\u003c/h1\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"瑞星防毒墙\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e瑞星防毒墙\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DrWeb-AntiVirus\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cdiv id=\\\"DrWeb\\\"\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"瑞星杀毒软件网络版\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cTITLE\\u003e瑞星杀毒软件网络版WEB安装\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Doctor-Web-反病毒产品\",\"rule\":[{\"regexps\":{\"body\":[\"\\u0026copy; Doctor Web\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Rising Antivirus Wall\",\"rule\":[{\"regexps\":{\"body\":[\"瑞星防毒墙\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"KILL Mail security gateway\",\"rule\":[{\"regexps\":{\"body\":[\"kill邮件安全网关\",\"background=\\\"skins/default/images/login_ksgm.jpg\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Rising Antivirus Online\",\"rule\":[{\"regexps\":{\"body\":[\"瑞星杀毒软件网络版\",\"src=\\\"ravweb_files/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Byzoro Security gateway\",\"rule\":[{\"regexps\":{\"body\":[\"patflow--管理平台\",\"\\u0026nbsp;patrolflow 多业务安全网关\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Barracuda Web Filter\",\"rule\":[{\"regexps\":{\"body\":[\"barracuda web filter\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"金山毒霸企业版\",\"rule\":[{\"regexps\":{\"body\":[\"金山毒霸企业版\",\"class=\\\"title\\\"\\u003e关于全网部署金山毒霸企业版\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"v8+终端安全系统web控制台\",\"rule\":[{\"regexps\":{\"body\":[\"在线安装-v8+终端安全系统web控制台\",\"href=\\\"mobiletools/android/net.ejinshan.avclient.apk\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"eYou 亿邮 反垃圾邮件网关\",\"rule\":[{\"regexps\":{\"body\":[\"反垃圾邮件网关 - 亿邮通讯\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HuaWei SRG1220\",\"rule\":[{\"regexps\":{\"body\":[\"srg1220\"],\"header\":[\"huawei srg1220\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HuaWei SRG2210\",\"rule\":[{\"regexps\":{\"body\":[\"srg2210\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HuaWei SRG3230\",\"rule\":[{\"regexps\":{\"body\":[\"srg3230\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HuaWei SRG3240\",\"rule\":[{\"regexps\":{\"body\":[\"srg3240\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Juniper srx650\",\"rule\":[{\"regexps\":{\"body\":[\"srx650\",\"class=\\\"jweb-title uppercase\\\"\\u003e - srx650\"],\"header\":[\"embedthis-appweb\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Reblaze Secure Web Gateway\",\"rule\":[{\"regexps\":{\"header\":[\"reblaze secure web gateway\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"McAfee Web Gateway\",\"rule\":[{\"regexps\":{\"body\":[\"mcafee web gateway\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PIOLINK Application Switch\",\"rule\":[{\"regexps\":{\"body\":[\"piolink application switch\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PIOLINK Application Switch K2424\",\"rule\":[{\"regexps\":{\"body\":[\"piolink application switch k2424\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PnP Secure Access Gateway\",\"rule\":[{\"regexps\":{\"body\":[\"pnp secure access gateway\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"anysec\",\"rule\":[{\"regexps\":{\"body\":[\"anysec login\"],\"cert\":[\"sz_dalton\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Kaspersky Secure Mail Gateway\",\"rule\":[{\"regexps\":{\"body\":[\"kaspersky secure mail gateway\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"安博通应用网关\",\"rule\":[{\"regexps\":{\"body\":[\"安博通应用网关\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Symantec Gateway Security\",\"rule\":[{\"regexps\":{\"body\":[\"symantec gateway security\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PIOLINK TiFRONT F26\",\"rule\":[{\"regexps\":{\"body\":[\"tifront-f26\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PIOLINK TiFRONT G24\",\"rule\":[{\"regexps\":{\"body\":[\"tifront-g24\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PIOLINK TiFRONT G24P\",\"rule\":[{\"regexps\":{\"body\":[\"tifront-g24p\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ZyXEL USG1900\",\"rule\":[{\"regexps\":{\"body\":[\"usg1900\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ZyXEL USG60W\",\"rule\":[{\"regexps\":{\"body\":[\"usg60w\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ZyXEL USG60\",\"rule\":[{\"regexps\":{\"body\":[\"usg60\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ZyXEL USG40W\",\"rule\":[{\"regexps\":{\"body\":[\"usg40w\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ZyXEL USG40\",\"rule\":[{\"regexps\":{\"body\":[\"usg40\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ZyXEL USG310\",\"rule\":[{\"regexps\":{\"body\":[\"usg310\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ZyXEL USG1100\",\"rule\":[{\"regexps\":{\"body\":[\"usg1100\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ZyXEL USG110\",\"rule\":[{\"regexps\":{\"body\":[\"usg110\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PIOLINK TiFRONT Product\",\"rule\":[{\"regexps\":{\"body\":[\"tifront-\",\"\\u003cem\\u003etifront, the security switch\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Dptech SRG1000\",\"rule\":[{\"regexps\":{\"body\":[\"dptech srg1000\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"天清web应用安全网关\",\"rule\":[{\"regexps\":{\"body\":[\"天清web应用安全网关\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ZyWALL USG100 PLUS\",\"rule\":[{\"regexps\":{\"body\":[\"zywall usg100-plus\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ZHYU TrustMore\",\"rule\":[{\"regexps\":{\"body\":[\"alt=\\\"trustmore 安全可信的应用授权平台\\\"\"],\"header\":[\"trustmore proxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"江南信安 JNSEC USG\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"jnsec web ui\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"技腾 应用安全网关\",\"rule\":[{\"regexps\":{\"body\":[\"/webui/images/basic/login/main_logo.gif\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Zyxel VMG系列网关\",\"rule\":[{\"regexps\":{\"body\":[\"zyxelhelp.js\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TrendMicro IWSA5000\",\"rule\":[{\"regexps\":{\"body\":[\"iwsa5000\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HuaWei-ASG2100\",\"rule\":[{\"regexps\":{\"body\":[\"asg2100\"],\"header\":[\"huawei asg2050\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Spammark-Mail-information-security-gateway\",\"rule\":[{\"regexps\":{\"body\":[\"spammark邮件信息安全网关\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Symantec-Messaging-Gateway\",\"rule\":[{\"regexps\":{\"body\":[\"symantec messaging gateway\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Opzoon-Security-gateway\",\"rule\":[{\"regexps\":{\"body\":[\"opzoon -\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NSFOCUS SG-Security-Gateway\",\"rule\":[{\"regexps\":{\"body\":[\"/login_logo_sg_zh_cn.png\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Surfilter-SURFNX-Security-Gateway\",\"rule\":[{\"regexps\":{\"body\":[\"surfnx\",\"/lib/templates/surfilter/css/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Maipu--ISG1000-Security-gateway\",\"rule\":[{\"regexps\":{\"body\":[\"isg1000\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Koal-Secure-authentication-gateway\",\"rule\":[{\"regexps\":{\"header\":[\"koal-ssl\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Astaro-Security-Gateway\",\"rule\":[{\"regexps\":{\"body\":[\"astaro security gateway\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"景云网络防病毒系统\",\"rule\":[{\"regexps\":{\"body\":[\"景云网络防病毒系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ZyXEL USG系列\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cdiv class=\\\"model\\\" id=\\\"model\\\" name=\\\"model\\\"\\u003e(?P\\u003capp_name\\u003eZyxel.{0,50}?)\\u003c/div\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NSFOCUS ADS\",\"rule\":[{\"regexps\":{\"body\":[\"nsfocus ads\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"蓝盾-WebGuard防篡改\",\"rule\":[{\"regexps\":{\"body\":[\"蓝盾网页防篡改保护系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"蓝盾网页防篡改保护系统\",\"rule\":[{\"regexps\":{\"body\":[\"蓝盾网页防篡改保护系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"共济科技机房监控系统\",\"rule\":[{\"regexps\":{\"body\":[\"深圳市共济科技机房监控系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"cPanel\",\"rule\":[{\"regexps\":{\"body\":[\"cPanel\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Webmin\",\"rule\":[{\"regexps\":{\"body\":[\"Webmin to Webmin\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Juniper-HDR\",\"rule\":[{\"regexps\":{\"body\":[\"Juniper\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"软派DCIM\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003clink rel=\\\"stylesheet\\\" href=\\\"../../../api/Plugin.Base/Theme/Css\\\" /\\u003e\"],\"header\":[\"Plugin.Base\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"红旗 红旗集群管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"红旗集群管理系统\\u003c/b\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"共济科技机房监控\",\"rule\":[{\"regexps\":{\"body\":[\"共济科技机房监控系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"hejia-tech 和嘉科技 机房动力环境监控系统\",\"rule\":[{\"regexps\":{\"body\":[\"和嘉科技\",\"动力环境监控系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"华夏运通主机SE系列\",\"rule\":[{\"regexps\":{\"body\":[\"北京华夏运通科技有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"共济科技-机房监控\",\"rule\":[{\"regexps\":{\"body\":[\"深圳市共济科技机房监控系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"华夏运通-主机SE系列\",\"rule\":[{\"regexps\":{\"body\":[\"机房环境监控系统\",\"北京华夏运通科技有限公司保留所有版权\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TCWELL智能3D机房监控管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"TCWELL智能3D机房监控管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"吉安机房动力环境系统 xCenter\",\"rule\":[{\"regexps\":{\"body\":[\"环境动力监控系统\",\"/egi/download\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"RICHCOMM 微模块机房动力环境监控系统\",\"rule\":[{\"regexps\":{\"body\":[\"微模块机房动力环境监控系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"众安-Xdecision-决策系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eXdecision - 决策系统\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SENSEFACE\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eSENSEFACE\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Indico\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eIndico\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FFCS-Security-Operation-Management-System\",\"rule\":[{\"regexps\":{\"body\":[\"align=\\\"center\\\"\\u003e福富软件\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"飞信数字化公墓信息管理系统V4.0\",\"rule\":[{\"regexps\":{\"body\":[\"飞信数字化公墓信息管理系统V4.0\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"方圆通信管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"方圆通信管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"AppServ\",\"rule\":[{\"regexps\":{\"body\":[\"AppServ Open Project\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Griffin 数据质量监控平台\",\"rule\":[{\"regexps\":{\"body\":[\"Griffin - Data Quality Service\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"教学考试系统\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"dreambox\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"卓越睿新教学考试系统\",\"rule\":[{\"regexps\":{\"body\":[\"课程中心\",\"MM_goToURL('parent','/Portal/CC#index');return document.MM_returnValue\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"金窗教务管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"开发单位：成都金窗软件开发有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Moodle\",\"rule\":[{\"regexps\":{\"body\":[\"href=\\\"http://moodle.org/\\\"\",\"content=\\\"moodle\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OLAT\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"OLAT\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Online-Grades\",\"rule\":[{\"regexps\":{\"body\":[\"mmfc-grades\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Open-Admin-for-Schools\",\"rule\":[{\"regexps\":{\"body\":[\"Open Admin for Schools\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PowerSchool\",\"rule\":[{\"regexps\":{\"header\":[\"Server: PowerSchool\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Skillsoft-Skillport-LMS\",\"rule\":[{\"regexps\":{\"body\":[\"value='com.skillsoft.scmlauncher.\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TCExam\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"TCExam\",\"http://www.tcexam.org\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"oExam\",\"rule\":[{\"regexps\":{\"body\":[\"src=\\\"view/js/index/browserCheck.js\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"教之初在线考试系统\",\"rule\":[{\"regexps\":{\"body\":[\"JiaoZhiChu\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PowerCreator CMS\",\"rule\":[{\"regexps\":{\"body\":[\"PowerCreator CMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"微厦在线学习云服务平台\",\"rule\":[{\"regexps\":{\"body\":[\"http://www.weishakeji.net\",\"Powered by Weishakeji\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"中大东日教育管理信息化平台\",\"rule\":[{\"regexps\":{\"body\":[\"中大东日教育管理信息化平台登录\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"力维-数字化校园系统\",\"rule\":[{\"regexps\":{\"body\":[\"http://www.wzssxx.com/schoolweb\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"考试星\",\"rule\":[{\"regexps\":{\"body\":[\"/account/static/newVersion\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"润尼尔网络产品\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"experiment teaching,实验教学,润尼尔,虚拟仿真\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"iTEST\",\"rule\":[{\"regexps\":{\"body\":[\"href=\\\"/itest/itest/aboutus\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ANMAI 安脉 教学系统\",\"rule\":[{\"regexps\":{\"body\":[\"ANMAI, All Rights Reserved\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Blackboard\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"keywords\\\" content=\\\"Blackboard\\\"\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Dreambox\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"dreambox\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"乐知行教学系统\",\"rule\":[{\"regexps\":{\"body\":[\"北京讯飞乐知行软件有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"平凡考试系统\",\"rule\":[{\"regexps\":{\"body\":[\"平凡考试系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"悦讯教育管理公共服务平台\",\"rule\":[{\"regexps\":{\"body\":[\"悦讯教育管理公共服务平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"智慧校园管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"/DC_Login/Login\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HUSTOJ\",\"rule\":[{\"regexps\":{\"body\":[\"zhblue/hustoj'\\u003eHUSTOJ Project\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Blackboard Learn\",\"rule\":[{\"regexps\":{\"body\":[\"Blackboard Learn\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Claroline\",\"rule\":[{\"regexps\":{\"body\":[\"Y88888P' dP `88888P8 dP `88888P' dP dP dP dP `88888P'\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"一刻-校园足球管理平台\",\"rule\":[{\"regexps\":{\"header\":[\"Set-Cookie: CGISESSID=\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"汇文 libsys图书管理系统\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1805953451\"]},\"regexps\":{\"body\":[\"书目检索系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"汇文软件-vpn358电子资源访问统计系统\",\"rule\":[{\"regexps\":{\"body\":[\"源授权访问系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"维普-维普考试服务平台\",\"rule\":[{\"regexps\":{\"body\":[\"维普考试资源系统后台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"万欣软件\",\"rule\":[{\"regexps\":{\"body\":[\"jdMarquee/jdMarquee.js\",\"home/template/headIndex.aspx\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"正方离校系统\",\"rule\":[{\"regexps\":{\"body\":[\"正方软件-离校系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"强智 教务管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"强智科技\",\"教务管理系统\",\"/jsxsd/framework/images/index/tpbg.gif\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"乘方 教务管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"教务管理系统\",\"乘方教务\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"KINGOSOFT高校教务网络管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"KINGOSOFT高校教务网络管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"清元优软 URP教务系统\",\"rule\":[{\"regexps\":{\"body\":[\"URP综合教务系统\",\"北京清元优软科技有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"xiao5u 校无忧\",\"rule\":[{\"regexps\":{\"body\":[\"校无忧软件\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"上海鼎创（Goodo）\",\"rule\":[{\"regexps\":{\"body\":[\"上海鼎创信息科技有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"网格\",\"rule\":[{\"regexps\":{\"body\":[\"网格（福建）智能科技有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"niushop\",\"rule\":[{\"regexps\":{\"body\":[\"Niushop开源商城\",\"NIUSHOP开源商城\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"非现场业务综合管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"非现场业务综合管理平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"东方树供应链金融管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"东方树供应链金融管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"东新金融数据管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"东新金融数据管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"投资堂 综合管理平台\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-575047503\"]},\"regexps\":{\"body\":[\"service_sysmanage.js\",\"tzt-icon.css\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"通达信\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-92142703\"]},\"regexps\":{\"body\":[\"深圳市财富趋势科技股份有限公司 版权所有\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apexsoft\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1305965720\"]},\"regexps\":{\"body\":[\"顶点软件\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"万得（Wind）产品\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1885964798\"]},\"regexps\":{\"body\":[\"Wind Information All Rights Reserved\",\"万得信息技术股份有限公司版权所有\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"中顺易\",\"rule\":[{\"favicon\":{\"mmh3\":[\"435880159\"]},\"regexps\":{\"body\":[\"深圳中顺易金融服务有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"爱你特 决策分析管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"Ainit决策分析管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Yii Framework\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1298108480\"]},\"regexps\":{\"body\":[\"/yii2\"],\"header\":[\"Set-Cookie: YII_CSRF_TOKEN\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FileMaker\",\"rule\":[{\"regexps\":{\"header\":[\"Set-Cookie: fmi-cookie\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Swagger UI\",\"rule\":[{\"regexps\":{\"body\":[\"swagger-ui.js\",\"swaggerbootstrapui.js\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ThinkPHP YFCMF\",\"rule\":[{\"regexps\":{\"body\":[\"/yfcmf/yfcmf.js\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"融商云考勤管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e融商云——考勤管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"番茄考勤管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"番茄考勤管理系统\",\"\\u003ctitle\\u003e番茄考勤管理系统\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"伊柯夫临床试验机构管理系统Ver3.0\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e伊柯夫临床试验机构管理系统(Ver3.0)\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apache Kafka Topics UI\",\"rule\":[{\"regexps\":{\"body\":[\"Kafka Topics UI\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apache Kafka Connect UI\",\"rule\":[{\"regexps\":{\"body\":[\"Kafka Connect UI\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"gongwalker API接口管理工具\",\"rule\":[{\"regexps\":{\"body\":[\"API接口管理工具\",\"/MinPHP/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Spring Boot Admin\",\"rule\":[{\"regexps\":{\"body\":[\"Spring Boot Admin\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Nginx Exporter\",\"rule\":[{\"regexps\":{\"body\":[\"NginxExporter\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DolphinScheduler\",\"rule\":[{\"regexps\":{\"body\":[\"DolphinScheduler\",\"EasyScheduler\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apache Superset\",\"rule\":[{\"regexps\":{\"header\":[\"superset/welcome\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Sugar 数据可视化平台\",\"rule\":[{\"regexps\":{\"body\":[\"Sugar - 数据可视化\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Pentaho\",\"rule\":[{\"regexps\":{\"body\":[\"Pentaho 用户控制台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Davinci\",\"rule\":[{\"regexps\":{\"body\":[\"Davinci\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Tensorboard\",\"rule\":[{\"regexps\":{\"body\":[\"TensorBoard\",\"The TensorFlow Authors\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Jedis\",\"rule\":[{\"regexps\":{\"body\":[\"jedis.JedisConnectionFactory\",\"get Jedis connection\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MemAdmin\",\"rule\":[{\"regexps\":{\"body\":[\"MemAdmin - 1.0.12\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Jupyter Hub\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1212628902\"]},\"regexps\":{\"body\":[\"Jupyter Hub\",\"/hub/static/images/jupyter.png\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Quick BI\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1036035382\"]},\"regexps\":{\"body\":[\"QuickBI\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"28在线客服系统\",\"rule\":[{\"regexps\":{\"body\":[\"28在线客服系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PHPOpenChat\",\"rule\":[{\"regexps\":{\"body\":[\"PHPOpenChat\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PHP-Live\",\"rule\":[{\"regexps\":{\"body\":[\"PHP Live!\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"53kf\",\"rule\":[{\"regexps\":{\"body\":[\"53kf.com\",\"53KF登录\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"乐语OMS\",\"rule\":[{\"regexps\":{\"body\":[\"looyu.com\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LiveZilla\",\"rule\":[{\"regexps\":{\"body\":[\"LiveZilla Server Page\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TQ云呼叫中心\",\"rule\":[{\"regexps\":{\"body\":[\"float2006.tq.cn/floatcard?adminid=\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Live800\",\"rule\":[{\"regexps\":{\"body\":[\"live800.com\"],\"header\":[\"live800\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CC客服\",\"rule\":[{\"regexps\":{\"body\":[\"http://kefu.qycn.com/vclient/state.php\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"365webcall\",\"rule\":[{\"regexps\":{\"body\":[\"https://www.365webcall.com/sa.aspx?\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"VOS3000\",\"rule\":[{\"regexps\":{\"body\":[\"VOS3000\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Google Talk Chatback\",\"rule\":[{\"regexps\":{\"body\":[\"http://www.google.com/talk/service/badge\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HESK\",\"rule\":[{\"regexps\":{\"body\":[\"https://www.sysaid.com/?utm_source=Hesk\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PCPIN-Chat\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by PCPIN Chat\",\"pcpin_chat\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"UseResponse\",\"rule\":[{\"regexps\":{\"body\":[\"UseResponse \\u003chttp://www.useresponse.com\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"54客服\",\"rule\":[{\"regexps\":{\"body\":[\"http://code2.54kefu.net/kefu/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"uservoice\",\"rule\":[{\"regexps\":{\"body\":[\"widget.uservoice.com\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"云翌IP呼叫中心\",\"rule\":[{\"regexps\":{\"body\":[\"云翌IP呼叫中心_用户登录\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NetWin-DBabble\",\"rule\":[{\"regexps\":{\"header\":[\"Server: DBabble\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Parature\",\"rule\":[{\"regexps\":{\"header\":[\"Set-Cookie: Parature\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"phpFreeChat\",\"rule\":[{\"regexps\":{\"header\":[\"Set-Cookie: phpFreeChat\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"百度-夜莺\",\"rule\":[{\"regexps\":{\"body\":[\"https://ikefu.baidu.com\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"南京云问-FAQ客服机器人\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"keywords\\\" content=\\\"FAQ客服机器人,\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"成都添闰-添添呼\",\"rule\":[{\"regexps\":{\"body\":[\"成都添闰通讯技术有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"即时通讯系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e即时通讯 系统登录 \\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"云软 IMCC\",\"rule\":[{\"regexps\":{\"body\":[\"云软云客服\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"二度车客服管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e二度车客服管理系统-二度车网\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CCLive在线客服系统\",\"rule\":[{\"regexps\":{\"body\":[\"CCLive在线客服系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Bot factory\",\"rule\":[{\"regexps\":{\"body\":[\"Bot factory\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"一洽echatsoft 在线客服系统\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-900552206\"]},\"regexps\":{\"body\":[\"www.echatsoft.com\",\"Echat客服\",\"一洽客服\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PEM经销商辅导管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"PEM经销商辅导管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Oracle Demantra\",\"rule\":[{\"regexps\":{\"body\":[\"Oracle Demantra\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Powerwin CRM管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"Powerwin CRM管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"RAYDA CRM 客户关系管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"RAYDA CRM 客户关系管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"瑞策软件 CRM客户关系管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"CRM客户关系管理系统\",\"瑞策软件\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apache Usergrid\",\"rule\":[{\"regexps\":{\"body\":[\"Usergrid Admin Portal\",\"Apache Usergrid\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Quick Audience\",\"rule\":[{\"regexps\":{\"body\":[\"Quick Audience账号\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apache Kafka Web Console\",\"rule\":[{\"regexps\":{\"body\":[\"Kafka Web Console\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NPort web console\",\"rule\":[{\"regexps\":{\"body\":[\"NPort web console\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apache Subversion\",\"rule\":[{\"regexps\":{\"body\":[\"CollabNet Subversion Edge 登录\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"汇购智能电子商务进销存管理系统V2.0\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e汇购智能电子商务进销存管理系统V2.0\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"JEEWMS\",\"rule\":[{\"regexps\":{\"body\":[\"plug-in/lhgDialog/lhgdialog.min.js?skin=metro\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Lottery流程管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"Lottery流程管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"天福企业流程管理系统(BPM)\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e天福企业流程管理系统(BPM)\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"寰通需求链管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e寰通需求链管理系统登陆\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"启元和信 企业流程化管控系统\",\"rule\":[{\"regexps\":{\"body\":[\"company\\\"\\u003e企业流程化管控系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"YiBot\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-702393003\"]},\"regexps\":{\"body\":[\"YiBot\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"联科股份产品\",\"rule\":[{\"regexps\":{\"body\":[\"联科股份出品\",\"A Linkey System\",\"lkyun.net\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Elastic Job Console\",\"rule\":[{\"regexps\":{\"body\":[\"Elastic Job Lite Console\"],\"header\":[\"Elastic Job Console\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Jellyfin\",\"rule\":[{\"regexps\":{\"body\":[\"Jellyfin\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"中兴\",\"rule\":[{\"regexps\":{\"body\":[\"Carrier-Class Router of ZTE Corporation\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"中兴-路由器\",\"rule\":[{\"regexps\":{\"header\":[\"Router of ZTE Corporation\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DokuWiki\",\"rule\":[{\"regexps\":{\"body\":[\"Driven by DokuWiki\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PmWiki\",\"rule\":[{\"regexps\":{\"body\":[\"pmwiki.php\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"默安 哨兵云\",\"rule\":[{\"regexps\":{\"body\":[\"哨兵云\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"联软it安全运维管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"联软it安全运维管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Leadsec SOC\",\"rule\":[{\"regexps\":{\"body\":[\"action=\\\"/leadsec-soc/signin\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"wifi安全终端设备管理\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ch1\\u003ewifi安全终端设备管理\\u003c/h1\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"默安哨兵云\",\"rule\":[{\"regexps\":{\"body\":[\"哨兵云\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"AXGATE UTM\",\"rule\":[{\"regexps\":{\"body\":[\"class=\\\"axgate\\\" ng-controller=\\\"logincontroller\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Sophos 安全产品\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1601194732\"]},\"regexps\":{\"body\":[\"Sophos\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"东方华盾 UTM\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"huadun network security technology co.,ltd\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"AKCP sensorProbe\",\"rule\":[{\"regexps\":{\"header\":[\"akcp embedded web server\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HFish 蜜罐\",\"rule\":[{\"regexps\":{\"body\":[\"/static/x.js\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"glastopf 蜜罐\",\"rule\":[{\"regexps\":{\"body\":[\"Please post your comments for the blog\",\"Blog Comments\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"elastichoney 蜜罐\",\"rule\":[{\"regexps\":{\"body\":[\"Green Goblin\",\"89d3241d670db65f994242c8e838b169779e2d4\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Amun 蜜罐\",\"rule\":[{\"regexps\":{\"body\":[\"johan83@freenet.de\",\"tim.bohn@gmx.net\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"elasticpot 蜜罐\",\"rule\":[{\"regexps\":{\"body\":[\"db18744ea5570fa9bf868df44fecd4b58332ff24\",\"1cf0aa9d61f185b59f643939f862c01f89b21360\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"kippo 蜜罐\",\"rule\":[{\"regexps\":{\"body\":[\"SSH Honeypot Type: Kippo\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"whoisscanme 蜜罐\",\"rule\":[{\"regexps\":{\"body\":[\"whoisscanme:https://github.com/bg6cq/whoisscanme\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CodeMeter WebAdmin\",\"rule\":[{\"regexps\":{\"body\":[\"WebAdmin\",\"CodeMeter\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"和通智能\",\"rule\":[{\"regexps\":{\"body\":[\"href=\\\"/web/mainmenu/images/favicon.ico\\\"\\u003e\",\"和通智能\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"蓝视科技 后台管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"var app_smp_type_name = '门店';var app_grp_type_name = '集团'\",\"蓝视科技\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"速达荣耀G7.net\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cimg src=\\\"images/top/top_g7net.gif\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"车辆监控云平台\",\"rule\":[{\"regexps\":{\"body\":[\"gps-web\\\"\\u003e\\u003c/iframe\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"kingosoft\",\"rule\":[{\"regexps\":{\"body\":[\"kingosoft\",\"青果\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Tiki-wiki-CMS\",\"rule\":[{\"regexps\":{\"body\":[\"jquerytiki = new object\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"AppEx 华夏创新 LotWan\",\"rule\":[{\"regexps\":{\"body\":[\"LotWan\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"AppEx 华夏创新 LotApp\",\"rule\":[{\"regexps\":{\"body\":[\"LotApp\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"艾泰网络管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"/noAuth/BrowserVersion.js\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"北京清科锐华CEMIS\",\"rule\":[{\"regexps\":{\"body\":[\"/theme/2009/image\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HAProxy-WI\",\"rule\":[{\"regexps\":{\"body\":[\"HAProxy-WI\",\"HAProxy-WI\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"科达 MTS转码服务器\",\"rule\":[{\"regexps\":{\"body\":[\"MTS转码服务器\",\"ext-el-mask-msg x-mask-loading\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"科达 网络键盘控制台\",\"rule\":[{\"regexps\":{\"body\":[\"网络键盘控制台\",\"class=\\\"login-login\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WebSVN\",\"rule\":[{\"regexps\":{\"body\":[\"WebSVN\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"创旗-IDC/ISP接入资源管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e创旗IDC/ISP接入资源\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Shapetizer-运营管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e用户登录 - Shapetizer运营管理系统\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"天心天思WEB管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e天心天思WEB管理平台\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"易科士-就业信息管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"成都易科士\",\"就业信息管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"方正-运营管理与决策支持系统\",\"rule\":[{\"regexps\":{\"body\":[\"决策支持系统\",\"/portal/img/logo.png\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"本捷-网络管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"本捷网络\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"中生软件-消费管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"财亿通餐消管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"银科环企-管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"银科环企\",\"企业级平台登录后台首页面\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"威科姆-平安通平台管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e平安通平台管理系统\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"科来 网络信息综合检测处理平台\",\"rule\":[{\"regexps\":{\"body\":[\"科来网络信息综合检测处理平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"金慧-综合管理信息系统\",\"rule\":[{\"regexps\":{\"body\":[\"/CommonWebResource/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"优华-智能化能量管理优化系统\",\"rule\":[{\"regexps\":{\"body\":[\"上海优华系统集成技术股份有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"盈科-物流管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"盈科信息技术有限责任公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"石化盈科-管控平台\",\"rule\":[{\"regexps\":{\"body\":[\"石化盈科信息技术有限责任公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"北明云智-IT运维平台\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e北明IT运维平台\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"勘探管理信息系統\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e勘探生产管理信息系統\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"录井信息平台系统\",\"rule\":[{\"regexps\":{\"body\":[\"录井信息平台-系统登录\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"用友 e-HR\",\"rule\":[{\"regexps\":{\"body\":[\"/hrss/rm/RmMain.jsp\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"蓝信 企业级安全移动工作平台\",\"rule\":[{\"regexps\":{\"body\":[\"蓝信\",\"蓝信-企业级安全移动工作平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"票友票务管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"票友ERP管理系统\",\"上海盛代信息科技有限公司\",\"href=\\\"http://www.piaoyou.org\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Oracle E-Business ERP\",\"rule\":[{\"regexps\":{\"body\":[\"/OA_HTML/media/oracle_white_logo.png\",\"OA_HTML/AppsLogin\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"中新金盾\",\"rule\":[{\"regexps\":{\"body\":[\"zxsoft-wangwei\",\"中新网络信息安全股份有限公司\",\"ZXCom.UsbKeyCom\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"杭州医慧ewell 医疗管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"Ewell Corporation\",\"杭州医惠信息科技有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"广联达glodon 控制台\",\"rule\":[{\"regexps\":{\"body\":[\"广联达\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apache OFBiz\",\"rule\":[{\"regexps\":{\"body\":[\"Apache OFBiz\"],\"header\":[\"Set-Cookie: OFBiz.Visitor\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"网动统一通信平台(Active UC)\",\"rule\":[{\"regexps\":{\"body\":[\"网动统一通信平台(Active UC)\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ContentXXL\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"generator\\\" content=\\\"contentXXL Business Content Management System\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"EduSoho 开源网络课堂\",\"rule\":[{\"regexps\":{\"body\":[\"EduSoho\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"携宁工作管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"携宁工作\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"金蝶kingdee EAS\",\"rule\":[{\"regexps\":{\"body\":[\"/eassso/\",\"金蝶国际软件集团有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"畅捷通 T3企业通\",\"rule\":[{\"regexps\":{\"body\":[\"畅捷通服务专线\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"拓图科技 T3智能仓储管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"T3智能仓储管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DouPHP\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by DouPHP\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"网强it综合管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"网强it综合管理系统\",\"netstrong\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"科来网络信息综合检测处理平台\",\"rule\":[{\"regexps\":{\"body\":[\"科来网络信息综合检测处理平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"金盾内网安全网络准入控制系统\",\"rule\":[{\"regexps\":{\"body\":[\"金盾内网安全网络准入控制系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"东方祥云\",\"rule\":[{\"regexps\":{\"body\":[\"东方祥云-登录\",\"\\u003cp\\u003e版权所有：贵州东方世纪科技股份有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"科荣AIO企业管理软件\",\"rule\":[{\"regexps\":{\"body\":[\"科荣AIO\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"新为软件E-Learning\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"新为，新为软件，\",\"Copyright \\u0026copy; 深圳市新为软件有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"开始云 企业网盘\",\"rule\":[{\"regexps\":{\"body\":[\"kass/basic/login/page_login.jsp\",\"kass/common_js/Global.js\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"JFun Box（解放云盘）\",\"rule\":[{\"regexps\":{\"body\":[\"JFun Box\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CDP云盘\",\"rule\":[{\"regexps\":{\"body\":[\"CDP云盘\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Nextcloud\",\"rule\":[{\"favicon\":{\"mmh3\":[\"167837543\"]},\"regexps\":{\"body\":[\"Nextcloud\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Spring Security\",\"rule\":[{\"regexps\":{\"body\":[\"_security_check\",\"oauth/authorize\",\"spring-security-redirect\",\"j_spring_cas_security\",\"_security_check\"],\"header\":[\"Basic realm=\\\"Spring Security Application\\\"\",\"j_spring_cas_security\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Link Admin\",\"rule\":[{\"regexps\":{\"body\":[\"Link Admin\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PaloAlto Networks SSO\",\"rule\":[{\"regexps\":{\"body\":[\"Palo Alto Networks SSO\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MUIBOOT权限管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"MUIBOOT权限管理系统-用户登录\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"福建电子口岸系统权限统一管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"福建电子口岸系统权限统一管理平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"浪潮 HCM\",\"rule\":[{\"regexps\":{\"body\":[\"inPageLoginMethod\",\"more_login_method\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"红海eHR人力资源管理系统\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1015496453\"]},\"regexps\":{\"body\":[\"登录 - 门店运营管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NetMizer\",\"rule\":[{\"regexps\":{\"body\":[\"NetMizer\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Graylog\",\"rule\":[{\"regexps\":{\"body\":[\"Graylog Web Interface\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Informatica\",\"rule\":[{\"regexps\":{\"body\":[\"Informatica Administrator\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"UltraStats\",\"rule\":[{\"regexps\":{\"body\":[\"UltraStats\",\"Home Overview\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WEBSIDESTORY\",\"rule\":[{\"regexps\":{\"body\":[\"WEBSIDESTORY CODE HBX\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Sawmill\",\"rule\":[{\"regexps\":{\"body\":[\"Sawmill\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Novell Sentinel\",\"rule\":[{\"regexps\":{\"body\":[\"Novell Sentinel Log Manager\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Octopussy\",\"rule\":[{\"regexps\":{\"body\":[\"Octopussy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"AWStats网站日志分析工具\",\"rule\":[{\"regexps\":{\"body\":[\"Statistics for localhost\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Splunk\",\"rule\":[{\"regexps\":{\"body\":[\"Splunk\"],\"header\":[\"Splunkd\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WebSideStory\",\"rule\":[{\"regexps\":{\"body\":[\"WEBSIDESTORY CODE\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Thermo_Fisher-DT8x-HTTP-Server\",\"rule\":[{\"regexps\":{\"header\":[\"Server: DT8x HTTP Server\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"阿里巴巴 EagleEye\",\"rule\":[{\"regexps\":{\"body\":[\"EagleEye\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"江南天安-日志审计系统\",\"rule\":[{\"regexps\":{\"body\":[\"江南天安-密码技术与信息安全综合服务商\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"优特捷-日志易\",\"rule\":[{\"regexps\":{\"body\":[\"/static/img/leftnav/logo_expand.png\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Informatica PowerCenter\",\"rule\":[{\"regexps\":{\"body\":[\"informatica administrator\",\"action=\\\"/adminconsole/loginsubmit.do\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"netmizer 日志管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"window.location.href=\\\"main.html\\\";\",\"netmizer 日志管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"日志易管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"href=\\\"/static/assets/yottaweb-elements/index.css\\\"\",\"日志易管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"天玥集中管理与日志分析平台\",\"rule\":[{\"regexps\":{\"body\":[\"天玥集中管理与日志分析平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Alibaba Group TLog\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"tlog 实时数据处理\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"EagleEye\",\"rule\":[{\"regexps\":{\"body\":[\"eagleeye 钉钉答疑群\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ModLogAn\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003emodlogan\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Novell-Sentinel-Log-Manager\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"0;url=/novelllogmanager\\\"\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"klog server\",\"rule\":[{\"regexps\":{\"body\":[\"klog server\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"splunkd\",\"rule\":[{\"regexps\":{\"body\":[\"splunkd\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Blue Coat Reporter\",\"rule\":[{\"regexps\":{\"body\":[\"Blue Coat Reporter\",\"Blue Coat Reporter\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"35T日志管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"35T日志管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"网优先锋 日志管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"NetMizer 日志管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"泰康 人脸识别日志管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"人脸识别日志管理系统\",\"http://statics-1251329614.file.myqcloud.com/img/logo1.png\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"mmonit\",\"rule\":[{\"regexps\":{\"header\":[\"Server: mmonit\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Datadog\",\"rule\":[{\"regexps\":{\"body\":[\"Datadog: Log In\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Solar Log\",\"rule\":[{\"regexps\":{\"body\":[\"Solar-Log\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Sniper\",\"rule\":[{\"regexps\":{\"body\":[\"Sniper Login\",\"REI Sniper Login\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"蓝盾-入侵检测\",\"rule\":[{\"regexps\":{\"body\":[\"bluedon-idp\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"蓝盾WEB应用防护系统\",\"rule\":[{\"regexps\":{\"body\":[\"蓝盾WEB应用防护系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Venustech TianTina IDS\",\"rule\":[{\"regexps\":{\"body\":[\"cybersensor\",\"\\u003cdiv class=\\\"login_name\\\"\\u003e天阗入侵检测与管理系统v7.0\\u003c/div\\u003e\"],\"header\":[\"vsappsrv1\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Venustech TianQing IPS\",\"rule\":[{\"regexps\":{\"body\":[\"天清入侵防御系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"科来网络全流量安全分析系统\",\"rule\":[{\"regexps\":{\"body\":[\"科来网络全流量安全分析系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"McAfee IntruShield\",\"rule\":[{\"regexps\":{\"body\":[\"intruvert\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Secworld SecIPS Sensor\",\"rule\":[{\"regexps\":{\"body\":[\"secips sensor\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DPTECH IPS2000\",\"rule\":[{\"regexps\":{\"body\":[\"ips2000\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DPTECH UAG3000\",\"rule\":[{\"regexps\":{\"body\":[\"dptech uag3000\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Majorsec LieYing\",\"rule\":[{\"regexps\":{\"body\":[\"majorsec\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Bluedon Intrusion Detection\",\"rule\":[{\"regexps\":{\"body\":[\"bluedon-idp\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HP ArcSight\",\"rule\":[{\"regexps\":{\"body\":[\"arcsight\",\"window.location.replace(\\\"/arcsight/\\\")\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"AhnLab MDS\",\"rule\":[{\"regexps\":{\"body\":[\"ahnlab mds\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NSFOCUS NIDS\",\"rule\":[{\"regexps\":{\"body\":[\"/login_logo_nids_zh_cn.png\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NSFOCUS NIPS\",\"rule\":[{\"regexps\":{\"body\":[\"/login_logo_nips_zh_cn.png\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"盛邦安全 WebRAYWeb应用防护系统\",\"rule\":[{\"regexps\":{\"body\":[\"WebRAYWeb应用防护系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ConfTool\",\"rule\":[{\"regexps\":{\"body\":[\"ConfTool\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Nessus\",\"rule\":[{\"regexps\":{\"body\":[\"Nessus\"],\"header\":[\"NessusWWW\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"IBM Watchfire\",\"rule\":[{\"regexps\":{\"header\":[\"WatchfireSessionID\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"铱迅YXLink 漏洞扫描系统\",\"rule\":[{\"regexps\":{\"body\":[\"铱迅漏洞扫描系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WSTOOL\",\"rule\":[{\"regexps\":{\"body\":[\"The Prices vs. Features of Web Application Vulnerability Scanners\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"榕基-网络隐患扫描系统\",\"rule\":[{\"regexps\":{\"body\":[\"榕基网络隐患扫描系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"任子行-网站监控预警平台\",\"rule\":[{\"regexps\":{\"body\":[\"任子行网站监控预警平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"优炫漏洞扫描系统\",\"rule\":[{\"regexps\":{\"body\":[\"优炫漏洞扫描系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"安拓.榕基网络隐患扫描系统\",\"rule\":[{\"regexps\":{\"body\":[\"安拓.榕基网络隐患扫描系统\"],\"header\":[\"rj-itop\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WebRay 一体化扫描器\",\"rule\":[{\"regexps\":{\"body\":[\"一体化扫描器\",\"var charindex = math.floor(math.random() * 32);\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NSFOCUS WVSS\",\"rule\":[{\"regexps\":{\"body\":[\"url:'/accounts/treaty/'\",\"nsfocus wvss\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NSFOCUS RSAS\",\"rule\":[{\"regexps\":{\"body\":[\"/login_logo_rsas_zh_cn.png\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Oracle Application Testing Suite\",\"rule\":[{\"regexps\":{\"body\":[\"Oracle Application Testing Suite\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WHOLETON 惠尔顿 上网行为管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"惠尔顿安全接入平台\",\"/base/login/login.php\",\"惠尔顿远程接入平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"深度-上网行为管理\",\"rule\":[{\"regexps\":{\"body\":[\"深度上网行为管理\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Netoray 上网行为管理系统NSG\",\"rule\":[{\"regexps\":{\"body\":[\"Netoray NSG 上网行为管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"百卓-Smart\",\"rule\":[{\"regexps\":{\"body\":[\"Smart管理平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"互联网综合管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"/ucenter/\",\"互联网综合管理平台\",\"亚鸿世纪科技发展有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"chinatelecom 企智通 上网行为管理\",\"rule\":[{\"regexps\":{\"body\":[\"企智通登录页面\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"adslr 飞鱼星 安全设备\",\"rule\":[{\"regexps\":{\"body\":[\"飞鱼星设备WEB配置系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"任天行-网络安全管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"任天行网络安全管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"新网程-上网行为管控系统\",\"rule\":[{\"regexps\":{\"body\":[\"公共上网管控系统\",\"上海新网程\",\"公共上网管控系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WayOS 维盟 AC集中管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"AC集中管理平台\",\"/images/login_25.jpg\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"网域 NSYS\",\"rule\":[{\"regexps\":{\"body\":[\"Netsys\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Daman网站管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"Daman网站管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Go129行为管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eGo129行为管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TianYue Employee Internet Management\",\"rule\":[{\"regexps\":{\"body\":[\"netoray nsg 上网行为管理系统\",\"莱克斯科技\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Byzoro Smart\",\"rule\":[{\"regexps\":{\"body\":[\"smart s150\\u0026nbsp;系统登录\",\"smart--管理平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"任天行网络安全管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"任天行网络安全管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Metaswitch Networks MetaView Web\",\"rule\":[{\"regexps\":{\"body\":[\"src=\\\"dcl.metaview.web.client.nocache.js\\\"\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"H3C Web网管系统\",\"rule\":[{\"regexps\":{\"body\":[\"web网管用户登录\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OPENGOSS WLAN统一网络管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"wlan综合网管系统\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Leadsec-Employee-Internet-Management\",\"rule\":[{\"regexps\":{\"body\":[\"leadsec acm\",\"txtmac\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PORTAL 页面信息管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"PORTAL 页面信息管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"爱施德上网管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"爱施德上网管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"福莱特上网行为管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"福莱特上网行为管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"华御上网行为管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"华御上网行为管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Solar网络管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"application/components_solar/loginController.js\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"火云网络 网络用户管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"火云网络工作室 http://www.hphu.com QQ188372002\",\"kss_admin/index.php\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"金电网安用户认证系统\",\"rule\":[{\"regexps\":{\"body\":[\"金电网安用户认证系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Neusoft NetEye Unified login\",\"rule\":[{\"regexps\":{\"body\":[\"neteye 统一身份管控系统登录\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Infosec UTRUST\",\"rule\":[{\"regexps\":{\"body\":[\"utrust统一身份认证和身份管理平台\",\"china utrust infortech co,.ltd\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Leadsino IAM（Identity and Access Management）\",\"rule\":[{\"regexps\":{\"body\":[\"LEADSINO IAM-WebVPN\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"宁盾 一体化安全认证平台\",\"rule\":[{\"regexps\":{\"body\":[\"id=\\\"dynamicpasswordwithmobile\\\"\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LinkBroad YunGW\",\"rule\":[{\"regexps\":{\"body\":[\"linkbroad yungw\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"中科恒伦 身份认证自助系统\",\"rule\":[{\"regexps\":{\"body\":[\"iaus/media/js/login/login.js\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Stanford WebAuth\",\"rule\":[{\"regexps\":{\"body\":[\"http://webauth.stanford.edu\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"联奕认证平台\",\"rule\":[{\"regexps\":{\"body\":[\"欢迎来到联奕认证平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"网宿云统一认证中心\",\"rule\":[{\"regexps\":{\"body\":[\"网宿云统一认证中心\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"统一身份认证管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e统一身份认证管理平台\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FH Admin\",\"rule\":[{\"regexps\":{\"body\":[\"FH Admin\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"中兴-BAVO-多媒体业务中心\",\"rule\":[{\"regexps\":{\"body\":[\"BAVO\"],\"header\":[\"mod_ssl/2.0.63 OpenSSL/0.9.7m mod_jk2/2.0.4\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OM视频会议\",\"rule\":[{\"regexps\":{\"body\":[\"OM视频会议\",\"Powered by \\u003cspan style=\\\"color:#F60;\\\"\\u003eOM\\u003c/span\\u003eeeting\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LifeSize-视频会议\",\"rule\":[{\"regexps\":{\"header\":[\"LifeSize\\u0026reg;\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"亿联 视频会议\",\"rule\":[{\"regexps\":{\"header\":[\"yealink embed httpd\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"科达-视频会议\",\"rule\":[{\"regexps\":{\"body\":[\"Kedacom\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"V2视频会议\",\"rule\":[{\"regexps\":{\"body\":[\"V2 Conference\",\"../conference/currentConfAction.do?flag=mastermain\\u0026page=\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"超然-视频会议\",\"rule\":[{\"regexps\":{\"body\":[\"Welcome to Management System\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"RADVISION视频会议\",\"rule\":[{\"regexps\":{\"body\":[\"RADVISION iVIEW Suite\"],\"header\":[\"Server: Apache/2.0.59 (Unix) PHP/5.1.0 mod_ssl/2.0.59 OpenSSL/0.9.8h DAV/2\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Vidyo视频会议系统\",\"rule\":[{\"regexps\":{\"body\":[\"VidyoRouter Configuration\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"会讯通\",\"rule\":[{\"regexps\":{\"body\":[\"电话会议系统\"],\"header\":[\"EasyMeetingSession\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"好视通 fastmeeting\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta http-equiv=\\\"description\\\" content=\\\"fsmeeting\\\"\\u003e\",\"fastmeeting\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Polycom 视频会议服务器\",\"rule\":[{\"regexps\":{\"body\":[\"EMA at Carmel\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"唐桥Techbridge 云会议\",\"rule\":[{\"regexps\":{\"body\":[\"Web Conferencing, Online Meetings, Telephone-Conferencing, Webinars - spreed\"],\"header\":[\"Set-Cookie: mtUserLanguage1=deleted; expires=Thu\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Mcu视频会议系统\",\"rule\":[{\"regexps\":{\"body\":[\"MCU Default Page\"],\"header\":[\"Server: GoAhead-Webs\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"随锐-视频会议\",\"rule\":[{\"regexps\":{\"body\":[\"版权所有：随锐科技\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"好视通 视频会议\",\"rule\":[{\"regexps\":{\"body\":[\"hao-shi-tong-yun-hui-yi-yuan\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"会捷通云视讯\",\"rule\":[{\"regexps\":{\"body\":[\"/him/api/rest/v1.0/node/role\",\"基础平台管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"小鱼易连 云视讯管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e云视讯管理平台\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"唐桥\",\"rule\":[{\"regexps\":{\"body\":[\"common/web_meeting/index.php\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"大华摄像头\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cdiv class=\\\"J_vedio_control\\\" id=\\\"prew_video_control\\\"\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"中维世纪\",\"rule\":[{\"regexps\":{\"body\":[\"jovision\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Netwave\",\"rule\":[{\"regexps\":{\"header\":[\"Netwave IP Camera\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"永安云智慧影像诊断系统\",\"rule\":[{\"regexps\":{\"body\":[\"YA C-MID\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OvisLink AirLive\",\"rule\":[{\"regexps\":{\"header\":[\"BC-5010-IVS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TPLINK\",\"rule\":[{\"regexps\":{\"body\":[\"IP CAMERA Viewer\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"金砖通讯 Brickcom Carema\",\"rule\":[{\"regexps\":{\"body\":[\"image/brickcom/login_bg1.png\"],\"header\":[\"Basic realm=\\\"FD-300Np\\\"\",\"Basic realm=\\\"FD-202Ne\\\"\",\"Basic realm=\\\"FD-200Np\\\"\",\"Basic realm=\\\"FD-535\\\"\",\"Basic realm=\\\"FD-H200Np\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"唐桥-视频监控\",\"rule\":[{\"regexps\":{\"body\":[\"you need to use IE brower\"],\"header\":[\"mtUserLanguage1=deleted;\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DASAN-视频监控\",\"rule\":[{\"regexps\":{\"body\":[\"SIP Phone H420\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Canon-网络摄像头\",\"rule\":[{\"regexps\":{\"header\":[\"Server: VB\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"大华视频监控\",\"rule\":[{\"regexps\":{\"header\":[\"ZheJiang Dahua Technology\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"西门子SIEMENS IP-Cameras\",\"rule\":[{\"regexps\":{\"body\":[\"SIEMENS IP-Camera\"],\"header\":[\"Basic realm=\\\"Compact Siemens WiFi Camera\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SONY-摄像头\",\"rule\":[{\"regexps\":{\"body\":[\"Sony Network Camera\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"中科嘉华 ACTi 视频监控\",\"rule\":[{\"regexps\":{\"body\":[\"Web Configurator\"],\"header\":[\"Server: Httpd v1.0 05may2008\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Defeway-摄像头\",\"rule\":[{\"regexps\":{\"header\":[\"Server: JAWS/1.0\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"立元通信-网络摄像机\",\"rule\":[{\"regexps\":{\"body\":[\"CLASSID=\\\"CLSID:2BDCA6AD-9A68-4A7A-964A-CB74FC4F3000\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"云视通-视频监控\",\"rule\":[{\"regexps\":{\"body\":[\"classid=\\\"clsid:6377DAC5-37F6-40BD-9F0D-78F78046D754\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Beward摄像头\",\"rule\":[{\"regexps\":{\"header\":[\"Server: IPCamera-Webs\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"科达-ViewShot\",\"rule\":[{\"regexps\":{\"body\":[\"ViewShot\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"尚暙 SIC\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"SICPT\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"D-Link-DCS-3220G-2nd\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"DCS-3220G-2nd\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"D-Link-DCS-6005LSALA\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"DCS-6005LSALA\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"D-Link-DCS-Dome\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"DCS-Dome\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"D-Link-DCS-prod\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"DCS-prod\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"蓝眼科技 BE\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"BE-\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"浩云安防\",\"rule\":[{\"regexps\":{\"body\":[\"浩云安防\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"东方网力 公司产品\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ch1\\u003e万解 - 东方网力\\u003c/h1\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LD2100\",\"rule\":[{\"regexps\":{\"header\":[\"Digest realm=\\\"LD2100\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LD5200\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"RLE-CF LD5200\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"天锐科技 天锐绿盾数据防泄密系统\",\"rule\":[{\"regexps\":{\"body\":[\"绿盾信息安全系统管理登录\",\"天锐绿盾信息安全系统管理登录\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SOMANSA DLP+Center\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cspan\\u003eSOMANSA\\u003c/span\\u003e\",\"\\u003ca href=\\\"/DLPCenter/\\\" class=\\\"btn DLPCenter\\\"\\u003e\\u003c/a\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"思睿嘉得 数据治理与安全管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"DLP管理平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apache Tika\",\"rule\":[{\"regexps\":{\"body\":[\"Apache Tika\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"golang prrof\",\"rule\":[{\"regexps\":{\"body\":[\"/debug/pprof/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SonicWall Analytics\",\"rule\":[{\"regexps\":{\"body\":[\"SonicWall Analytics\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Metabase\",\"rule\":[{\"regexps\":{\"body\":[\"Metabase\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DataV数据可视化\",\"rule\":[{\"regexps\":{\"body\":[\"DataV - Powerful and Accessible Visualization\",\"datav-static/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"InfraNodus\",\"rule\":[{\"regexps\":{\"body\":[\"InfraNodus: Generate Insight Using Text Network Analsysis\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PostHog\",\"rule\":[{\"regexps\":{\"body\":[\"PostHog\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Azure Databricks\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-491607480\"]},\"regexps\":{\"body\":[\"Databricks - Sign In\"],\"header\":[\"databricks\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"BackupPC\",\"rule\":[{\"regexps\":{\"body\":[\"BackupPC_Admin\",\"BackupPC Server Status\"],\"header\":[\"BackupPC_Admin\",\"Basic realm=\\\"BackupPC\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"方正EC 数据交换管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"方正EC-数据交换管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"阿里巴巴 Otter Manager\",\"rule\":[{\"regexps\":{\"body\":[\"Otter Manager\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"iClock数据服务器\",\"rule\":[{\"regexps\":{\"body\":[\"site-name\\\"\\u003eiClock数据服务器\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apache Atlas\",\"rule\":[{\"regexps\":{\"body\":[\"Atlas Login\",\"Sign In to your account\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apache Griffin\",\"rule\":[{\"regexps\":{\"body\":[\"Griffin - Data Quality Service\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apache Pulsar\",\"rule\":[{\"regexps\":{\"body\":[\"pulsar-express\",\"Simple Web Interface for Apache Pulsar\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"phpMyAdmin\",\"rule\":[{\"regexps\":{\"body\":[\"phpMyAdmin\"],\"header\":[\"phpMyAdmin\",\"pmaUser\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"phpMoAdmin\",\"rule\":[{\"regexps\":{\"body\":[\"phpMoAdmin\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MySQLMan\",\"rule\":[{\"regexps\":{\"body\":[\"MySQLMan\"],\"header\":[\"MySQLMan_url\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SqlWebAdmin\",\"rule\":[{\"regexps\":{\"body\":[\"Web Data Administrator\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"phpPgaAmin\",\"rule\":[{\"regexps\":{\"body\":[\"phpPgAdmin\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MySQLDumper\",\"rule\":[{\"regexps\":{\"header\":[\"MySQLDumper\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MyWebSQL\",\"rule\":[{\"regexps\":{\"body\":[\"MyWebSQL\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"BigDump\",\"rule\":[{\"regexps\":{\"body\":[\"BigDump\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FileMakerPro\",\"rule\":[{\"regexps\":{\"header\":[\"FileMakerPro\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MySqlDumper\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"MySQLDumper\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"phpMyBackupPro\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"phpMyBackupPro\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SQLiteManager\",\"rule\":[{\"regexps\":{\"body\":[\"SQLiteManager\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SQL-Buddy\",\"rule\":[{\"regexps\":{\"body\":[\"SQL Buddy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Web-Data-Administrator\",\"rule\":[{\"regexps\":{\"body\":[\"Web Data Administrator\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MySQL Control Panel\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"MySQL Control Panel\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Oracle Enterprise Performance Management System\",\"rule\":[{\"regexps\":{\"body\":[\"Oracle Enterprise Performance Management System Workspace, Fusion Edition\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Matillion ETL\",\"rule\":[{\"regexps\":{\"body\":[\"Matillion ETL\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Pivot88\",\"rule\":[{\"regexps\":{\"body\":[\"Pivot88\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"hadoop yarn\",\"rule\":[{\"regexps\":{\"body\":[\"/static/yarn.css\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MySQL-Squid-Access-Report\",\"rule\":[{\"regexps\":{\"body\":[\"MySQL-Squid-Access-Report\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"mongo-express\",\"rule\":[{\"regexps\":{\"body\":[\"Mongo Express\"],\"header\":[\"mongo-express\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"InfluxDB\",\"rule\":[{\"regexps\":{\"body\":[\"InfluxDB\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"phpPgAdmin\",\"rule\":[{\"regexps\":{\"body\":[\"phpPgAdmin\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"pgAdmin\",\"rule\":[{\"regexps\":{\"body\":[\"pgAdmin\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ChemNet ChemNet-后台数据库管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"ChemNet-后台数据库管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TreeSoft 数据库管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"TreeSoft数据库管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"adminMongo\",\"rule\":[{\"regexps\":{\"body\":[\"adminmongo\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LDAR综合管理平台(LDAR审计验收系统)\",\"rule\":[{\"regexps\":{\"body\":[\"LDAR综合管理平台(LDAR审计验收系统)\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"nsqadmin\",\"rule\":[{\"regexps\":{\"body\":[\"Nosqlclient\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ElasticSearch head\",\"rule\":[{\"regexps\":{\"body\":[\"elasticsearch-head\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Lepus\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ca href=\\\"http://www.lepus.cc\\\" target=\\\"blank\\\"\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OceanBase\",\"rule\":[{\"regexps\":{\"body\":[\"OceanBase 云平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"阿里云 PolarDB\",\"rule\":[{\"regexps\":{\"body\":[\"PolarDB Stack\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"腾讯 TDSQL\",\"rule\":[{\"regexps\":{\"body\":[\"TDSQL\",\"src=\\\"/chunks/vendors~\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apache Drill WebUI\",\"rule\":[{\"regexps\":{\"body\":[\"Apache Drill\",\"Apache Drill\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"阿里云 PolarDB-X\",\"rule\":[{\"regexps\":{\"body\":[\"PolarDB-X统一工作台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MariaDB Xpand\",\"rule\":[{\"regexps\":{\"body\":[\"MariaDB Xpand Web UI\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"InfluxDB 2.0\",\"rule\":[{\"regexps\":{\"body\":[\"InfluxDB 2.0\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Adminer\",\"rule\":[{\"regexps\":{\"body\":[\"Adminer\\u003c/a\\u003e \\u003cspan class=\\\"version\\\"\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"明御数据库审计与风险控制系统\",\"rule\":[{\"regexps\":{\"body\":[\"明御数据库审计与风险控制系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"昂楷数据库审计系统UDAS\",\"rule\":[{\"regexps\":{\"body\":[\"数据库审计系统UDAS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"天兔数据库监控系统\",\"rule\":[{\"regexps\":{\"body\":[\"天兔 数据库监控系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"天兔-数据库监控系统\",\"rule\":[{\"regexps\":{\"body\":[\"http://www.lepus.cc\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SequoiaDB\",\"rule\":[{\"regexps\":{\"body\":[\"sequoiadb\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Oracle Database Firewall\",\"rule\":[{\"regexps\":{\"body\":[\"oracle database firewall\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"天兔 数据库监控系统\",\"rule\":[{\"regexps\":{\"body\":[\"登录-天兔 数据库监控系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SDL Studio\",\"rule\":[{\"regexps\":{\"body\":[\"sdl studio groupshare\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"极地数据库审计系统\",\"rule\":[{\"regexps\":{\"body\":[\"jddba 1.0\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"明御数据库审计\",\"rule\":[{\"regexps\":{\"body\":[\"明御数据库审计\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"慧眼数据库审计系统\",\"rule\":[{\"regexps\":{\"body\":[\"慧眼数据库审计系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"昂楷数据库审计系统\",\"rule\":[{\"regexps\":{\"body\":[\"昂楷数据库审计系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Everything\",\"rule\":[{\"regexps\":{\"body\":[\"Everything\",\"Everything.gif\"],\"header\":[\"Everything HTTP Server\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Harbor\",\"rule\":[{\"regexps\":{\"body\":[\"Harbor\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"合勤科技-NSA\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"NSA320\\\"\",\"Basic realm=\\\"NSA310\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"QNAP NAS\",\"rule\":[{\"regexps\":{\"body\":[\"redirect_suffix\",\"location.hostname.indexOf\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"浪潮海量存储系统\",\"rule\":[{\"regexps\":{\"body\":[\"浪潮海量存储系统\",\"\\u003ctd align=\\\"left\\\"\\u003e浪潮存储 您身边的存储专家\\u003c/td\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"辰锐单向传输系统\",\"rule\":[{\"regexps\":{\"body\":[\"辰锐单向传输系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"利谱网闸\",\"rule\":[{\"regexps\":{\"body\":[\"利谱\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"远为多网安全隔离系统\",\"rule\":[{\"regexps\":{\"body\":[\"远为多网安全隔离系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"安全隔离与信息交换系统\",\"rule\":[{\"regexps\":{\"body\":[\"安全隔离与信息交换系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"东软Neusoft NetEye安全隔离与信息传输系统\",\"rule\":[{\"regexps\":{\"body\":[\"东软NetEye安全隔离与信息传输系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"arm_pc_suite_web\",\"rule\":[{\"regexps\":{\"body\":[\"arm_pc_suite_web\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ChenRui One way transmission system\",\"rule\":[{\"regexps\":{\"body\":[\"辰锐单向传输系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"天行安全单向导入系统\",\"rule\":[{\"regexps\":{\"body\":[\"天行安全单向导入系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"科博安全隔离与信息交换系统\",\"rule\":[{\"regexps\":{\"body\":[\"科博安全隔离与信息交换系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NPS内网穿透\",\"rule\":[{\"regexps\":{\"body\":[\"nps admin login\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"信锐企业AP\",\"rule\":[{\"regexps\":{\"body\":[\"http://bbs.sundray.com.cn\",\"index.php/welcome/login\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"信锐-企业级AP\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Hydra/0.1.8\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OLT管理系统登录\",\"rule\":[{\"regexps\":{\"body\":[\"OLT管理系统登录\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"吉大正元身份认证网关\",\"rule\":[{\"regexps\":{\"body\":[\"吉大正元身份认证网关\",\"/jit_pnx_portal/\"],\"header\":[\"jit_pnxcore1 web service\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"isp接入管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"isp接入管理系统\",\"winisp.gif\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"中科网威 下一代防火墙控制系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ca href='dkey_activex_download.php\",\"margin:-217px 0 0 -288px\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"银河风云（Galaxywind）\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-803559422\"]},\"regexps\":{\"body\":[\"Galaxywind. All Rights Reserved\",\"logo_galaxywind.png\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"F5 产品\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-335242539\"]},\"regexps\":{\"body\":[\"F5 Authentication Required\",\"content=\\\"F5 Networks, Inc.\\\"\",\"F5 Networks, Inc.\",\"logo_f5.png\",\"alt=\\\"F5 Networks Logo\\\"\"],\"header\":[\"LastMRH_Session\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Cloudflare\",\"rule\":[{\"regexps\":{\"body\":[\"var cloudflare=\"],\"header\":[\"__cfduid=\",\"cloudflare\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Baidu-Anquanbao\",\"rule\":[{\"regexps\":{\"header\":[\"x-powered-by-anquanbao\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Incapsula\",\"rule\":[{\"regexps\":{\"header\":[\"x-cdn: incapsula\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Sucuri\",\"rule\":[{\"regexps\":{\"body\":[\"cloudproxy@sucuri.net\"],\"header\":[\"x-sucuri-id\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"BinarySec-Cloud-Defense\",\"rule\":[{\"regexps\":{\"header\":[\"x-binarysec-nocache\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NetPilot\",\"rule\":[{\"regexps\":{\"body\":[\"href=\\\"/sys/images/tree.css\\\" title=\\\"netpilot\"],\"header\":[\"netpilot\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"迅博-NG300-VPN-Firewall\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"NG300-VPN-Firewall\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"迅博-NG320-VPN/Firewall\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"NG320-VPN-Firewall\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"迅博-NG500-VPN-Firewall\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"NG500 VPN-Firewall\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"安信华-下一代防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"安信华下一代防火墙\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"任子行-下一代防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"任子行下一代防火墙\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"睿峰网云防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"睿峰网云防火墙\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"T-Force下一代防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"T-Force下一代防火墙\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"蓝盾防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"蓝盾防火墙\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"D_Guard-Firewall\",\"rule\":[{\"regexps\":{\"body\":[\"Seventh D-Guard Center\",\"Seventh D-Guard Projects\"],\"header\":[\"Basic realm=\\\"D-Guard\\\"\",\"DGuard Projects\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ShareTech-HiGuard-PRO\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"HiGuardPRO\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FireBrick-FB105\",\"rule\":[{\"regexps\":{\"header\":[\"FireBrick 105\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DnP-Firewall\",\"rule\":[{\"regexps\":{\"body\":[\"Forum Gateway - Powered by DnP Firewall\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"IPCop-Firewall\",\"rule\":[{\"regexps\":{\"body\":[\"IPCop\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Kerio-WinRout-Firewall\",\"rule\":[{\"regexps\":{\"body\":[\"Kerio Clientless SSL-VPN\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Zscaler-FIREWALL\",\"rule\":[{\"regexps\":{\"body\":[\"Welcome To Zscaler Directory Authentication\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"皓峰通讯chinaiwb 智能防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"皓峰防火墙系统登录\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WHOLETON 惠尔顿 下一代防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"惠尔顿下一代防火墙\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WatchGuard-Firewall\",\"rule\":[{\"regexps\":{\"body\":[\"Fireware XTM User Authentication\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"东软Neusoft NetEye防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"NetEye防火墙系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LANCOM-防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"LANCOM\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Cipafilter\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"Cipafilter Web management\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"H3C-下一代防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"webui/images/basic/login/china_logo.jpg\",\"Web user login\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"紫光防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"紫光防火墙\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ZeroShell\",\"rule\":[{\"regexps\":{\"body\":[\"ZeroShell\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Titan-Firewall\",\"rule\":[{\"regexps\":{\"body\":[\"Titan Firewall\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WebRay-WAF\",\"rule\":[{\"regexps\":{\"header\":[\"Drivedby: RaySrv\",\"Rayengine: RayEngine\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Weidun\",\"rule\":[{\"regexps\":{\"header\":[\"Firewall: www.weidun.com.cn\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Safe3WAF\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Safe3 Web Firewall\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"AnZuWAF\",\"rule\":[{\"regexps\":{\"header\":[\"Server: AnZu Web Firewall\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ModSecurity\",\"rule\":[{\"regexps\":{\"header\":[\"mod_security\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"护卫神 网站安全系统\",\"rule\":[{\"regexps\":{\"body\":[\"护卫神\",\"网站安全系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Fortinet FortiWeb\",\"rule\":[{\"regexps\":{\"body\":[\"var CONFIG_GUI_NO\"],\"header\":[\"Server: FortiWeb\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"USP-Secure-Entry-Server\",\"rule\":[{\"regexps\":{\"header\":[\"Secure Entry Server\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Fortinet-WAF\",\"rule\":[{\"regexps\":{\"header\":[\"FORTIWAFSID=\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"IndusGuard-WAF\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eIndusGuard WAF\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"斐讯-Fortress\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e斐讯Fortress防火墙\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"铱迅YXLink WAF\",\"rule\":[{\"regexps\":{\"body\":[\"铱迅下一代防火墙系统\"],\"header\":[\"YxlinkWAF\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Newdefend-WAF\",\"rule\":[{\"regexps\":{\"header\":[\"Server: NewDefend\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ASP.NET RequestValidationMode\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eIt's not possibile to initialize shared session without an organization\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"东软Neusoft SEnginx\",\"rule\":[{\"regexps\":{\"header\":[\"Server: senginx\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Wallarm-WAF\",\"rule\":[{\"regexps\":{\"header\":[\"Server: nginx-wallarm\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"阿里云 云盾\",\"rule\":[{\"regexps\":{\"header\":[\"yundun_404\",\"YunDun-CDN\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"naxsi waf\",\"rule\":[{\"regexps\":{\"header\":[\"X-Data-Origin: naxsi-waf\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SecureSphere\",\"rule\":[{\"regexps\":{\"header\":[\"Notconnected: /SecureSphere\",\"Notconnected: /SecureSphere\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Kerio Control\",\"rule\":[{\"regexps\":{\"body\":[\"Kerio Control\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"山石网科Hillstone StoneOS\",\"rule\":[{\"regexps\":{\"body\":[\"Hillstone StoneOS Software Version\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"佑友防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"佑友防火墙\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"山石网科Hillstone SG-6000\",\"rule\":[{\"regexps\":{\"body\":[\"Web Management\"],\"header\":[\"Set-Cookie: _WebSessionId\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"金电网安防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"金电网安\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"华清信安Web应用防火墙系统\",\"rule\":[{\"regexps\":{\"body\":[\"华清信安Web应用防火墙系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"上讯信息新一代防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"上讯信息新一代防火墙\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"利谱第二代防火墙系统\",\"rule\":[{\"regexps\":{\"body\":[\"利谱第二代防火墙系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"netpower 中科网威 防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"中科网威防火墙\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Comodo WAF\",\"rule\":[{\"regexps\":{\"header\":[\"protected by comodo waf\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Neusoft SEnginx\",\"rule\":[{\"regexps\":{\"body\":[\"senginx-robot-mitigation\"],\"header\":[\"senginx\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Aliyun Cloud shield\",\"rule\":[{\"regexps\":{\"header\":[\"yundun\",\"set-cookie: yundun_404\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Profense Firewall\",\"rule\":[{\"regexps\":{\"header\":[\"plbsid=\",\"profense\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"H3C SecPath Firewall\",\"rule\":[{\"regexps\":{\"body\":[\"h3c secpath firewall system\",\"h3c firewall secpath\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Neusoft NetEye Firewall\",\"rule\":[{\"regexps\":{\"body\":[\"neteye防火墙系统\",\"name=\\\"login_form\\\" action=\\\"/fwm4/fwm.cgi/usrlgin\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Barracuda NG Firewall\",\"rule\":[{\"regexps\":{\"header\":[\"barracuda ng firewall\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SonicWALL NSA 4600\",\"rule\":[{\"regexps\":{\"body\":[\"sonicwall nsa 4600\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Barracuda WAF\",\"rule\":[{\"regexps\":{\"body\":[\"barracuda web application firewall\"],\"header\":[\"bni__barracuda_lb_cookie=\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"D-Link Firewall\",\"rule\":[{\"regexps\":{\"body\":[\"d-link firewall\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Dptech FW1000\",\"rule\":[{\"regexps\":{\"body\":[\"dptech fw1000\",\"图片中显示迪普科技\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FortiGate 60D\",\"rule\":[{\"regexps\":{\"body\":[\"fortigate60d\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"H3C SecPath F1000 A EI\",\"rule\":[{\"regexps\":{\"body\":[\"h3c firewall secpath f1000-a-ei\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Hirschmann Security Device\",\"rule\":[{\"regexps\":{\"body\":[\"hirschmann eagle security device\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"UNIS Firewall\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cb\\u003e\\u003cnobr\\u003e紫光防火墙\",\"紫光防火墙\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Juniper Firewall\",\"rule\":[{\"regexps\":{\"body\":[\"juniper srx firewall\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"RG WALL V160E\",\"rule\":[{\"regexps\":{\"body\":[\"rg-wall-v160e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"RG WALL V160S\",\"rule\":[{\"regexps\":{\"body\":[\"rg-wall-v160s\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"RG WALL V50\",\"rule\":[{\"regexps\":{\"body\":[\"rg-wall-v50\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Juniper Gateway\",\"rule\":[{\"regexps\":{\"body\":[\"juniper gateway\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Firewall\",\"rule\":[{\"regexps\":{\"body\":[\"睿峰网云防火墙\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"T Force NGFW\",\"rule\":[{\"regexps\":{\"body\":[\"t-force下一代防火墙\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Bluedon Firewall\",\"rule\":[{\"regexps\":{\"body\":[\"class=\\\"banquan\\\"\\u003e蓝盾信息安全技术股份有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"任子行下一代防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"任子行下一代防火墙\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"安信华下一代防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"安信华下一代防火墙\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SonicWall NSA 3500\",\"rule\":[{\"regexps\":{\"body\":[\"sonicwall nsa 3500\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SonicWall NSA 4500\",\"rule\":[{\"regexps\":{\"body\":[\"sonicwall nsa 4500\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HuaWei USG6320\",\"rule\":[{\"regexps\":{\"body\":[\"usg6320\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"McAfee Sidewinder 7.0\",\"rule\":[{\"regexps\":{\"body\":[\"sidewinder 7.0\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"McAfee Sidewinder 8\",\"rule\":[{\"regexps\":{\"body\":[\"sidewinder 8\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"明御web应用防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"明御web应用防火墙\",\"\\u003cimg id=\\\"company_logo\\\" src=\\\"images/waf.company.png\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"RG WALL 1600 VPN3000E\",\"rule\":[{\"regexps\":{\"body\":[\"rg-wall-1600-vpn3000e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Sundray Firewall\",\"rule\":[{\"regexps\":{\"body\":[\"help = decodeuricomponent(version_info_ch)\",\"http://www.sundray.com.cn/Support/feedback.html\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"H3C SecBlade Firewall\",\"rule\":[{\"regexps\":{\"body\":[\"h3c secblade fw\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ZyWALL USG 200\",\"rule\":[{\"regexps\":{\"body\":[\"zywall usg 200\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ZyWALL USG 300\",\"rule\":[{\"regexps\":{\"body\":[\"zywall usg 300\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FortiGate 500D\",\"rule\":[{\"regexps\":{\"body\":[\"fortigate500d\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Fortigate 300A\",\"rule\":[{\"regexps\":{\"body\":[\"fortigate-300a\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"3Com OfficeConnect VPN Firewall\",\"rule\":[{\"regexps\":{\"body\":[\"3com - officeconnect vpn firewall\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FortiGate 200D\",\"rule\":[{\"regexps\":{\"body\":[\"fortigate-200d\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Eudemon8000E X8\",\"rule\":[{\"regexps\":{\"header\":[\"huawei eudemon8000e-x8\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ZyWALL USG 50\",\"rule\":[{\"regexps\":{\"body\":[\"model\\\"\\u003ezywall usg 50\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"H3C SecPath F5000 M\",\"rule\":[{\"regexps\":{\"body\":[\"h3c secpath f5000-m\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"博华 网龙防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"博华网龙防火墙\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"adslr 飞鱼星 下一代防火墙安全网关\",\"rule\":[{\"regexps\":{\"body\":[\"下一代防火墙安全网关\",\"href=\\\"/css/cover_admin.css\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"H3C WEB应用防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"h3c web应用防火墙\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Fujitsu IPCOM300\",\"rule\":[{\"regexps\":{\"header\":[\"fujitsu-ipcom300\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Fujitsu IPCOM150\",\"rule\":[{\"regexps\":{\"header\":[\"fujitsu-ipcom150\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Forcepoint NGFW\",\"rule\":[{\"regexps\":{\"body\":[\"id=\\\"software_name\\\"\\u003engfw security management center\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"曙光 龙芯防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"class=\\\"login_main_text\\\"\\u003e曙光龙芯防火墙\\u003c/div\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"河辰技术 佑友防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"佑友防火墙\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ostec firebox\",\"rule\":[{\"regexps\":{\"body\":[\"http://colorzilla.com/\",\"OSTEC FireBox\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"圣博润 LanSecS第二代防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"lansecs第二代防火墙\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Zyxel USG20W\",\"rule\":[{\"regexps\":{\"body\":[\"usg20w-vpn\",\"class=\\\"usg_icon\\\"\",\"usg20w-vpn\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PaloAlto PA 820\",\"rule\":[{\"regexps\":{\"body\":[\"pa-820\",\"id=\\\"heading\\\"\\u003eglobalprotect portal\\u003c/div\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"安全狗\",\"rule\":[{\"regexps\":{\"header\":[\"safedog-flow-item=\",\"safedog\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Websecurity-WAF\",\"rule\":[{\"regexps\":{\"header\":[\"websecurity: waf 1.0\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"护卫神.网站安全系统\",\"rule\":[{\"regexps\":{\"body\":[\"护卫神.网站安全系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NSFOCUS NGFW\",\"rule\":[{\"regexps\":{\"body\":[\"nsfocus nf\",\"/login_logo_nf_zh_cn.png\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HuaWei-Secoway-Firewall\",\"rule\":[{\"regexps\":{\"header\":[\"secoway\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Microsoft-UrlScan\",\"rule\":[{\"regexps\":{\"header\":[\"rejected-by-urlscan\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NSFOCUS WAF\",\"rule\":[{\"regexps\":{\"body\":[\"waf nsfocus\",\"/images/logo/nsfocus.png\"],\"cert\":[\"commonname: wafg2\"],\"header\":[\"nsfocus vmwaf\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Phicomm-Fortress\",\"rule\":[{\"regexps\":{\"body\":[\"斐讯fortress防火墙\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"BinarySec-Firewall\",\"rule\":[{\"regexps\":{\"header\":[\"x-binarysec\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Yxlink-WAF\",\"rule\":[{\"regexps\":{\"body\":[\"铱迅web应用防护系统\"],\"header\":[\"yxlinkwaf\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"优炫下一代防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"优炫下一代防火墙\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"皓峰防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"皓峰防火墙\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Mission-Control-Application-Shield\",\"rule\":[{\"regexps\":{\"body\":[\"alt=\\\"mission control application shield\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PaloAlto PA 500\",\"rule\":[{\"regexps\":{\"body\":[\"pa-500\",\"id=\\\"heading\\\"\\u003eglobalprotect portal\\u003c/div\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Juniper srx1500\",\"rule\":[{\"regexps\":{\"body\":[\"var modelphpstr = \\\"srx1500\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"金山信息 防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"深圳金山信息安全技术有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"anysec 中科网威 防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"Anysec Login\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"安天 镇关下一代防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"安天镇关下一代防火墙\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"博华网龙防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"博华网龙防火墙\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SonicOS\",\"rule\":[{\"regexps\":{\"body\":[\"SonicOS avSummary page to cc.sonicwall.com\",\"SonicOS Enhanced\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"D盾\",\"rule\":[{\"regexps\":{\"header\":[\"JSESSIONID_USER\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"宝塔网站防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"宝塔网站防火墙\",\"这是误报，请联系宝塔\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"网防G01\",\"rule\":[{\"regexps\":{\"body\":[\"网防G01提示\",\"设置拦截\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"网站安全狗\",\"rule\":[{\"regexps\":{\"body\":[\"网站安全狗防护验证页面\",\"访问IP被添加到网站安全狗IP黑名单中\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"智创网站防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"智创网站专业级防火墙登录验证\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"西数WTS WAF\",\"rule\":[{\"regexps\":{\"body\":[\"WTS-WAF拦截提示\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"腾讯宙斯盾\",\"rule\":[{\"regexps\":{\"header\":[\"SDWAF\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"创宇盾 waf\",\"rule\":[{\"regexps\":{\"body\":[\"当前访问疑似黑客攻击，已被创宇盾拦截\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"铱讯WAF\",\"rule\":[{\"regexps\":{\"body\":[\"检测到可疑访问，事件编号\",\"\\u003cTITLE\\u003e访问禁止\\u003c/TITLE\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"长亭 SafeLine waf\",\"rule\":[{\"regexps\":{\"body\":[\"请求已被 长亭 SafeLine 阻断\",\"EventID\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FortiLogger\",\"rule\":[{\"regexps\":{\"body\":[\"FortiLogger\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"防火墙WEB防篡改管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"防火墙WEB防篡改管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"中软华泰防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"中软华泰防火墙\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"3Com-OfficeConnect-VPN-Firewall\",\"rule\":[{\"regexps\":{\"body\":[\"3Com - OfficeConnect VPN Firewall\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Aker-Firewall-HTTP-proxy\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Aker Firewall HTTP proxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"中兴-ZXSEC-US\",\"rule\":[{\"regexps\":{\"body\":[\"ZXSEC US\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"中新网安 中新金盾-FireWall\",\"rule\":[{\"regexps\":{\"body\":[\"中新金盾防火墙ZXFW\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Entensys-UserGate-Firewall-and-Proxy-Server\",\"rule\":[{\"regexps\":{\"header\":[\"UserGate Firewall and Proxy Server\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Forcepoint-NGFW\",\"rule\":[{\"regexps\":{\"body\":[\"NGFW Authentication\",\"Forcepoint LLC\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Ingate-Firewall系列防火墙\",\"rule\":[{\"favicon\":{\"mmh3\":null},\"regexps\":{\"header\":[\"Ingate-Firewall\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Juniper-ScreenOS\",\"rule\":[{\"regexps\":{\"body\":[\"Juniper\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Matrix-3D-Firewall\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"(?P\\u003capp_name\\u003eMatrix 3D Firewall)\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ostec-firebox\",\"rule\":[{\"favicon\":{\"mmh3\":[\"635541900\"]},\"regexps\":{\"body\":[\"OSTEC FireBox\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ZYWALL\",\"rule\":[{\"regexps\":{\"body\":[\"ZYWALL\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Citrix_Netscaler\",\"rule\":[{\"regexps\":{\"header\":[\"ns_af\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DnP Firewall\",\"rule\":[{\"regexps\":{\"body\":[\"Powered by DnP Firewall\",\"dnp_firewall_redirect\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Dotdefender\",\"rule\":[{\"regexps\":{\"header\":[\"X-Dotdefender-Denied\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Kerio_WinRoute_Firewall\",\"rule\":[{\"regexps\":{\"body\":[\"style/bodyNonauth.css\"],\"header\":[\"Kerio WinRoute Firewall\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Mod_Security\",\"rule\":[{\"regexps\":{\"header\":[\"Mod_Security\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PaloAlto_Firewall\",\"rule\":[{\"regexps\":{\"body\":[\"Access to the web page you were trying to visit has been blocked in accordance with company policy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WebKnight\",\"rule\":[{\"regexps\":{\"header\":[\"WebKnight\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Websecurity_WAF\",\"rule\":[{\"regexps\":{\"header\":[\"Websecurity\",\"WAF 1.0\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FortiWeb\",\"rule\":[{\"regexps\":{\"header\":[\"FORTIWAFSID\",\"FortiWeb\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FireEye\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"FireEye Malware Protection Cloud (MPC)\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"瑞星网络安全预警系统\",\"rule\":[{\"regexps\":{\"body\":[\"瑞星网络安全预警系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LanyEye\",\"rule\":[{\"regexps\":{\"body\":[\"/skin/admin/img/login/laneye.png\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"金晴 企业安全威胁感知系统\",\"rule\":[{\"regexps\":{\"body\":[\"企业安全威胁感知系统\",\"action=\\\"/j_spring_security_check\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"护卫神 主机大师\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"护卫神·主机大师 前台管理登录\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OneFish 威胁感知与捕捉系统\",\"rule\":[{\"regexps\":{\"body\":[\"OneFish平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"安天 高级可持续威胁安全检测系统\",\"rule\":[{\"regexps\":{\"body\":[\"高级可持续威胁安全检测系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"前沿信安 风雷电子文档安全管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"前沿风雷电子文档安全管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"东软Neusoft 智能档案管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"东软智能档案管理系统 \\u0026#8211; Neusoft SEAS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TCL O2O 文档管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"TCL O2O 文档管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TITANS 周报管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"TITANS-周报管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"KBMS 知识库管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"KBMS_知识库管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OvO 表情管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"OvO 表情管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LDAP用户同步 易度文档管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"LDAP用户同步-易度文档管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WCP知识管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"WCP知识管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LEGEND工作室 API管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"LEGEND工作室-API管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"我知科技 WizNote\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1417349080\"]},\"regexps\":{\"body\":[\"WizNote\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PSI文档管理系统 标准版\",\"rule\":[{\"regexps\":{\"body\":[\"PSI文档管理系统(标准版)\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ESAFENET CDG\",\"rule\":[{\"regexps\":{\"body\":[\"CDGServer3\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WD智能档案管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"WD智能档案管理平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WEBYXM文档管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"WEBYXM文档管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"联高软件 多可文档管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"北京联高软件开发有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ONLYOFFICE\",\"rule\":[{\"regexps\":{\"body\":[\"ONLYOFFICE\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MinDoc文档管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"MinDoc文档管理系统 - Powered by MinDoc\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"IDocView\",\"rule\":[{\"favicon\":{\"mmh3\":[\"489934076\"]},\"regexps\":{\"body\":[\"在线文档预览 - I Doc View\",\"I Doc View\",\"idocview\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MrDoc\",\"rule\":[{\"regexps\":{\"body\":[\"MrDoc\",\"content=\\\"MrDoc\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"图创\",\"rule\":[{\"regexps\":{\"body\":[\"/interlib/common/\",\"图创软件开发有限公司提供技术支持\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SmartWiki\",\"rule\":[{\"regexps\":{\"body\":[\"Smartwiki\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Easydoc\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"易文档\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Lenovo Doc\",\"rule\":[{\"regexps\":{\"body\":[\"lenovoDocs\",\"lenovodata\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FileNice\",\"rule\":[{\"regexps\":{\"body\":[\"fileNice\\u0026trade\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FileVista\",\"rule\":[{\"regexps\":{\"body\":[\"FileVista\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OpenDocMan\",\"rule\":[{\"regexps\":{\"body\":[\"www.opendocman.com\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"File Upload Manager\",\"rule\":[{\"regexps\":{\"body\":[\"File Upload Manager\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"eXtplorer\",\"rule\":[{\"regexps\":{\"body\":[\"eXtplorer\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"webtop\",\"rule\":[{\"regexps\":{\"body\":[\"webtop/help/help.jsp\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Full Decent Camera Life\",\"rule\":[{\"regexps\":{\"body\":[\"Full Decent Camera Life\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"E6协同文档管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"E6协同文档管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"AliyunOSS\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cMessage\\u003eAnonymous access is forbidden\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"密云-文件安全存储交换平台\",\"rule\":[{\"regexps\":{\"body\":[\"密云-文件安全存储交换平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"QuiXplorer\",\"rule\":[{\"regexps\":{\"body\":[\"QuiXplorer\",\"the QuiX project\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"国家数字化学习资源中心系统\",\"rule\":[{\"regexps\":{\"body\":[\"FrontEnd/default.aspx\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"qBittorrent-Веб-интерфейс\",\"rule\":[{\"regexps\":{\"body\":[\"qBittorrent Веб-интерфейс\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ShowDoc\",\"rule\":[{\"regexps\":{\"body\":[\"ShowDoc\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Seafile\",\"rule\":[{\"regexps\":{\"body\":[\"/captcha/refresh\",\"Seafile\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CameraLife\",\"rule\":[{\"regexps\":{\"body\":[\"Full Decent Camera Life\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Epiware\",\"rule\":[{\"regexps\":{\"body\":[\"Epiware - Project and Document Management\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"EMC Documentum Webtop\",\"rule\":[{\"regexps\":{\"body\":[\"/webtop/\",\"onload='doRedirect(\\\"/component/main\\\")'\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"File-Upload-Manager\",\"rule\":[{\"regexps\":{\"body\":[\"File Upload Manager\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Hyperwave-IS\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Hyperwave-IS/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"国迈电子安全文档管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"密云-文件安全存储交换平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"致得-E6文档管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"E6文档管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"德雅科技HOLA-文档管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"德雅科技HOLA文档管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"蓝盾-文档安全管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"蓝盾文档安全管理系统-蓝盾信息安全技术股份有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"思昂软件-文档管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"思昂企业文档管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"联高软件-多可电子档案管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"多可电子档案管理系统\\u003c/div\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FS 文件管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eFS 文件管理系统\",\"\\u003ch2\\u003eFS 文件管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"GELGOOG文件管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cmeta name=\\\"application-name\\\" content=\\\"GELGOOG文件管理系统\\\" /\\u003e\",\"\\u003ctitle\\u003eGELGOOG文件管理系统\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TLD 文件管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"TLD - 文件管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Document Security Management System\",\"rule\":[{\"regexps\":{\"body\":[\"前沿文档安全管理软件\",\"src=\\\"/drm/encjs/barrett.js\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"蓝盾文档安全管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"蓝盾文档安全管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"南大之星信息发布系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e南大之星信息发布系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TeamDoc 文档管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"id=\\\"table_01\\\"\",\"TeamDoc 文档管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Magento文件管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"Magento文件管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SOC1800录音管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"SOC1800录音管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Noted\",\"rule\":[{\"regexps\":{\"body\":[\"Ceate a note and get a link\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FileZen\",\"rule\":[{\"regexps\":{\"body\":[\"FileZen\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"云深 电子文件管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e登录 云深-电子文件管理系统 帐号\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"永中 Web Office\",\"rule\":[{\"favicon\":{\"mmh3\":[\"110170773\"]},\"regexps\":{\"body\":[\"Web Office\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"EnableQ\",\"rule\":[{\"favicon\":{\"mmh3\":[\"784325091\"]},\"regexps\":{\"body\":[\"欢迎使用EnableQ在线问卷调查引擎\",\"/enableq.ico\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"H3C-安全隔离与信息交换系统\",\"rule\":[{\"regexps\":{\"body\":[\"images/h3c.png\",\"安全隔离与信息交换系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"宇视云眼\",\"rule\":[{\"regexps\":{\"body\":[\"宇视云眼下载页\",\"class=\\\"glyphicon glyphicon-eye-open\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Teambition\",\"rule\":[{\"regexps\":{\"body\":[\"Teambition\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"蓝信\",\"rule\":[{\"regexps\":{\"body\":[\"LanXin\",\"蓝信\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"爱科特PLM系统协同管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"爱科特PLM系统协同管理平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"iQuicker\",\"rule\":[{\"regexps\":{\"body\":[\"iQuicker\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"八桂彩云\",\"rule\":[{\"regexps\":{\"body\":[\"八桂彩云\",\"content=\\\"八桂彩云，八桂彩云管理平台\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"企业微信\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1902819520\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"phpMyBible\",\"rule\":[{\"regexps\":{\"body\":[\"Elbląg ma swoje dobre strony - Elbląska Gazeta Internetowa portEl.pl\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WebIssues\",\"rule\":[{\"regexps\":{\"body\":[\"/images/webissues.ico\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"信源-豆豆IM\",\"rule\":[{\"regexps\":{\"body\":[\"信源豆豆官网\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"思迪 建筑消防设施联网检测系统\",\"rule\":[{\"regexps\":{\"body\":[\"title=\\\"苏州思迪\\\"\",\"建筑消防设施联网监测系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"深圳道讯科技-SCRM系统\",\"rule\":[{\"regexps\":{\"body\":[\"SCRM系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Zarafa\",\"rule\":[{\"regexps\":{\"body\":[\"Zarafa WebAccess\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"用友 U9\",\"rule\":[{\"regexps\":{\"body\":[\"U9-登录\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"正方数字化校园\",\"rule\":[{\"regexps\":{\"body\":[\"正方软件股份有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"新软科技 极通EWEBS\",\"rule\":[{\"regexps\":{\"body\":[\"EWEBSClientsetup\",\"极通应用虚拟化系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"H3C-CAS\",\"rule\":[{\"regexps\":{\"body\":[\"cas.css\"],\"header\":[\"Path=/cas\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PaloAlto VMware\",\"rule\":[{\"regexps\":{\"header\":[\"C=US, L=Palo Alto, OU=VMware, CN=VMware/email\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Docker Distribution Api\",\"rule\":[{\"regexps\":{\"header\":[\"Docker-Distribution-Api-Version\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Proxmox-VE\",\"rule\":[{\"regexps\":{\"header\":[\"pve-api-daemon\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"服务器虚拟化-OVP\",\"rule\":[{\"regexps\":{\"body\":[\"\\\"ovp2/css/ext-ovp.css\\\"\"],\"header\":[\"OVP\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"VMware-vFabric\",\"rule\":[{\"regexps\":{\"body\":[\"VMware vFabric tc Server — Standard Edition\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Citrix XenServer\",\"rule\":[{\"regexps\":{\"body\":[\"XenServer\",\"Citrix Systems\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Citrix XCP\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cp/\\u003ecitrix systems, inc. xcp 1.6.10\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Inspur InCloud Sphere\",\"rule\":[{\"regexps\":{\"body\":[\"incloudsphere\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"oVirt Virtualization\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ca href=\\\"https://www.ovirt.org\\\" class=\\\"obrand_loginpagelogolink\\\"\\u003e\"],\"header\":[\"/ovirt-engine/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"h3c Cloud\",\"rule\":[{\"regexps\":{\"body\":[\"vstor\",\"分布式存储管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Epygi ecQX\",\"rule\":[{\"regexps\":{\"body\":[\"epygi \\u003cspan class=\\\"product-name\\\"\\u003eecqx\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"瑞友天翼－应用虚拟化系统\",\"rule\":[{\"regexps\":{\"body\":[\"瑞友天翼－应用虚拟化系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ASUS AiCloud\",\"rule\":[{\"regexps\":{\"body\":[\"href=\\\"/smb/css/startup.png\\\"\",\"AiCloud\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LisVP 领立斯虚拟化管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"LisVP -- 领立斯虚拟化管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"VMware vSphere\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"VMware vSphere\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"VMware Carbon Black EDR\",\"rule\":[{\"regexps\":{\"body\":[\"VMware Carbon Black EDR\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"VMware vCloud Director\",\"rule\":[{\"regexps\":{\"body\":[\"VMware vCloud Director\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"VMware Carbon Black App Control\",\"rule\":[{\"regexps\":{\"body\":[\"Carbon Black App Control\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Proxmox Virtual Environment\",\"rule\":[{\"regexps\":{\"body\":[\"Proxmox Virtual Environment\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"VMware View Planner\",\"rule\":[{\"regexps\":{\"body\":[\"Viewplanner\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"AWS BPM\",\"rule\":[{\"regexps\":{\"body\":[\"AWS BPM PaaS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"万网博通 多业务云智能管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"多业务云智能管理平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LiveBOS\",\"rule\":[{\"regexps\":{\"body\":[\"Power by LiveBOS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"东软Neusoft 智能云POS管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"东软智能云POS管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"财人汇 业务管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"XPE后台管理系统\",\"anychat\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"金仕达Kingstart 业务管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"/servlet/frame/Frame?function=mainSite\",\"wf/scripts/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"博思 票据管理系统\",\"rule\":[{\"regexps\":{\"header\":[\"bosssoft\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"合力泰 BPM系统\",\"rule\":[{\"regexps\":{\"body\":[\"合力泰BPM系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"奥哲 H3BPM系统\",\"rule\":[{\"regexps\":{\"body\":[\"H3 BPM\",\"Authine\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DATAHELP业务管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"DATAHELP业务管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OMS接口管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"OMS接口管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FXACS管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eFXACS管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"安为 ACube业务管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"ACube业务管理平台\",\"Powered by Anwill\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Kargocard 客服服务流程管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"Kargocard 客服服务流程管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Lesee管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"Lesee管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"UFlying业务管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"UFlying业务管理系统后台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CCSISZ综合业务管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"CCSISZ综合业务管理平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"RAX业务管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"RAX业务管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Moka 智能化招聘管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"Moka智能化招聘管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"e账通后台管理面板\",\"rule\":[{\"regexps\":{\"body\":[\"e账通后台管理面板\",\"e账通融合认证系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"VisionSoft\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1590619462\"]},\"regexps\":{\"body\":[\"CopyRight(C) Visionsoft\",\"Visionsoft\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"RRD - Metrics\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1530297414\"]},\"regexps\":{\"body\":[\"RRD - Metrics\",\"Copyright \\u0026copy; 2022 R.R.Donnelley \\u0026amp; Sons Company. All rights reserved.\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WSO2 API管理\",\"rule\":[{\"regexps\":{\"body\":[\"WSO2 Management Console\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"易企邮\",\"rule\":[{\"regexps\":{\"body\":[\"易企邮\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"YMail-智能反垃圾邮件系统\",\"rule\":[{\"regexps\":{\"body\":[\"YMail's 智能反垃圾邮件系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"中企动力-云邮\",\"rule\":[{\"regexps\":{\"body\":[\"中企动力企业邮箱\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"35企业邮箱\",\"rule\":[{\"regexps\":{\"body\":[\"http://help.mail.35.com\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"遥志DBMail\",\"rule\":[{\"regexps\":{\"body\":[\"遥志DBMail邮件服务器 - Webmail\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"国信安邮 suremail\",\"rule\":[{\"regexps\":{\"body\":[\"版权所有：北京国信安邮科技有限公司\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"新网企业邮\",\"rule\":[{\"regexps\":{\"body\":[\"企业邮箱登陆/登录_邮箱登陆/登录_全球邮邮箱登陆\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"QzSafeMail-旗帜安全电子邮件系统\",\"rule\":[{\"regexps\":{\"body\":[\"QzSafeMail-旗帜安全电子邮件系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"腾翔安全邮箱\",\"rule\":[{\"regexps\":{\"body\":[\"腾翔·安全邮件\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"快客电邮\",\"rule\":[{\"regexps\":{\"body\":[\"Welcome to quarkmail server version\",\"快客电邮 - 系统管理\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"EQManager邮件网关\",\"rule\":[{\"regexps\":{\"body\":[\"smtp server(EQManager\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"东方华盾 安全邮件\",\"rule\":[{\"regexps\":{\"body\":[\"ESMTP Huadun\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Mailmax 邮件服务器\",\"rule\":[{\"regexps\":{\"body\":[\"ESMTP mailMAX ready\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FishEye\",\"rule\":[{\"regexps\":{\"body\":[\"FishEye\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"cgit\",\"rule\":[{\"regexps\":{\"body\":[\"Git repository browser\",\"/cgit.css\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Gitorious\",\"rule\":[{\"regexps\":{\"body\":[\"Gitorious\"],\"header\":[\"_gitorious_sess\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Mercurial\",\"rule\":[{\"regexps\":{\"body\":[\"Mercurial\",\"src=\\\"/static/mercurial.js\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Github_Enterprise\",\"rule\":[{\"regexps\":{\"body\":[\"Setup GitHub Enterprise\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Bitbucket\",\"rule\":[{\"regexps\":{\"body\":[\"Bitbucket\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apache Archiva\",\"rule\":[{\"regexps\":{\"body\":[\"Apache Archiva\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"GitBucket\",\"rule\":[{\"regexps\":{\"body\":[\"GitBucket\",\"alt=\\\"GitBucket\\\"\"],\"header\":[\"gitbucket\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SegPub\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cspan\\u003eSegPub\\u003c/span\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WebGUI\",\"rule\":[{\"regexps\":{\"header\":[\"Server: WebGUI\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"gitstack\",\"rule\":[{\"regexps\":{\"body\":[\"^gitstack/\",\"src=\\\"/gitstack.png\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Gitblit\",\"rule\":[{\"favicon\":{\"mmh3\":[\"573035254\"]},\"regexps\":{\"body\":[\"Gitblit\",\"\\u003ca title=\\\"gitblit homepage\\\" href=\\\"http://gitblit.com/\\\"\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"STA环境BUG管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"STA环境BUG管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"道华BUG管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"道华BUG管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"iF.SVNAdmin\",\"rule\":[{\"regexps\":{\"body\":[\"iF.SVNAdmin\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"GOCD\",\"rule\":[{\"regexps\":{\"body\":[\"current-gocd-version\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"科迈RAS系统\",\"rule\":[{\"regexps\":{\"body\":[\"科迈\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"noVNC\",\"rule\":[{\"regexps\":{\"body\":[\"noVNC\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"RemotelyAnywhere\",\"rule\":[{\"regexps\":{\"header\":[\"Server: RemotelyAnywhere\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"RealVNC\",\"rule\":[{\"regexps\":{\"header\":[\"Server: RealVNC\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"VNC-企业版\",\"rule\":[{\"regexps\":{\"header\":[\"Server: VNC Server Enterprise Edition\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Raritan-Remote-Client\",\"rule\":[{\"regexps\":{\"body\":[\"Multi-Platform Client\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"异速联\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Gnway Web Server\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Ajenti Admin Panel\",\"rule\":[{\"regexps\":{\"body\":[\"Ajenti\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Extron-MKP-2000\",\"rule\":[{\"regexps\":{\"header\":[\"Server: MKP 2000/2.02\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"研华Advantech WebAccess\",\"rule\":[{\"regexps\":{\"body\":[\"Advantech WebAccess\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"启明星辰 4A统一安全管控平台\",\"rule\":[{\"regexps\":{\"body\":[\"4A统一安全管控平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Citrix Metaframe\",\"rule\":[{\"regexps\":{\"body\":[\"window.location=\\\"./Citrix/MetaFrame\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TightVNC\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cAPPLET ARCHIVE=\\\"tightvnc-jviewer.jar\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MEIKYO RPC\",\"rule\":[{\"regexps\":{\"header\":[\"Digest realm=\\\"RPC-\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WESCO RIM\",\"rule\":[{\"regexps\":{\"header\":null}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Heatmiser Wifi Thermostat\",\"rule\":[{\"regexps\":{\"body\":[\"Heatmiser Wifi Thermostat\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SysAid Help Desk\",\"rule\":[{\"regexps\":{\"body\":[\"SysAid Help Desk Software\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"D Link WiFiManager\",\"rule\":[{\"regexps\":{\"body\":[\"D-Link Central WiFiManager\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Teradici PCoIP Zero Client\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ch4\\u003ePCoIP\\u0026#174 Zero Client\\u003c/h4\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Cenovus_Energy remote access portal\",\"rule\":[{\"regexps\":{\"body\":[\"Welcome to Cenovus\",\"remote access portal\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CentOS Control Web Panel\",\"rule\":[{\"regexps\":{\"body\":[\"CentOS WebPanel\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"EAS远程管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"EAS远程管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NVR远程管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"NVR远程管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ThinVnc\",\"rule\":[{\"regexps\":{\"body\":[\"rel=\\\"ThinVnc\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"风之页linux管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"风之页linux管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"金万维 异速联\",\"rule\":[{\"regexps\":{\"body\":[\"action=\\\"/GNRemote.dll\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"rsupport RemoteCall 产品\",\"rule\":[{\"regexps\":{\"header\":[\"Server: Remotecall Server\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Fibaro Home Center\",\"rule\":[{\"regexps\":{\"body\":[\"Fibaro Home Center\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TP LINK Omada Controller\",\"rule\":[{\"regexps\":{\"body\":[\"Omada Controller\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SINEMA Remote Connect\",\"rule\":[{\"regexps\":{\"body\":[\"SINEMA Remote Connect\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"H3C UIS\",\"rule\":[{\"regexps\":{\"body\":[\"h3c uis 统一管理矩阵\",\"uisalert\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Mesosphere DC/OS\",\"rule\":[{\"regexps\":{\"body\":[\"天宫dc/os\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"EDAS Setting Management\",\"rule\":[{\"regexps\":{\"body\":[\"edas配置中心\",\"lcccommoncontroller\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"蓝鲸智云\",\"rule\":[{\"regexps\":{\"body\":[\"蓝鲸智云\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CloudBoot云启装机平台\",\"rule\":[{\"regexps\":{\"body\":[\"cloudboot\",\"/clipboard/zeroclipboard.min\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Alcatel_Lucent OmniVista Cirrus\",\"rule\":[{\"regexps\":{\"body\":[\"/help/en-us/others/ov-cirrus_cookiepolicy.html\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"西软云XMS\",\"rule\":[{\"regexps\":{\"body\":[\"href=\\\"xmsenv.exe\\\"\\u003e系统运行环境\",\"西软云xms\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Hybrid-Cluster\",\"rule\":[{\"regexps\":{\"header\":[\"hybrid cluster\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"N2WS\",\"rule\":[{\"regexps\":{\"body\":[\"static/style/cpm_style.css\",\"N2WS Backup\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"KVM 创梦云计算管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"KVM_创梦云计算管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"KVM 余跃云计算管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"KVM_余跃云计算管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OpenShift\",\"rule\":[{\"regexps\":{\"body\":[\"apis/apps.openshift.io/v1\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"H3C CAS云计算管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"H3Cloud\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ZTE 中兴通讯 CoCloud云平台\",\"rule\":[{\"regexps\":{\"body\":[\"uSmartView\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"nPUBv6 (企業版)联网数字标牌管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"nPUBv6 (企業版)联网数字标牌管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"nPUB联网数字标牌管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"nPUB联网数字标牌管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"腾讯云面板\",\"rule\":[{\"regexps\":{\"body\":[\"腾讯云面板\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WD MyCloud\",\"rule\":[{\"regexps\":{\"body\":[\"WDMyCloud\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"和信创云桌面\",\"rule\":[{\"regexps\":{\"body\":[\"和信下一代云桌面VENGD\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"住院医师规范化培训平台\",\"rule\":[{\"regexps\":{\"body\":[\"住院医师规范化培训平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"中庆纳博\",\"rule\":[{\"regexps\":{\"body\":[\"中庆纳博\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"大型仪器设备共享平台\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003c!--\\u003cscript src=\\\"wxjs/Demon/Demon.js\\\"\\u003e\\u003c/script\\u003e--\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"微同开源商城管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"fly2you.cn\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apache CloudStack\",\"rule\":[{\"regexps\":{\"body\":[\"Apache CloudStack\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DataEarth云平台管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"DataEarth云平台管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"GAOZEFENG 武汉瑞德微信平台管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eGAOZEFENG · 武汉瑞德微信平台管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Jun云平台管理系统1.0\",\"rule\":[{\"regexps\":{\"body\":[\"Jun云平台管理系统1.0\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DOSSM 2.0 平台管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"DOSSM 2.0 平台管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"AI电话机器人管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"AI电话机器人管理平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"POPOK微信平台管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"POPOK微信平台管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ZKEYS公有云业务管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"ZKEYS公有云业务管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ROKI云平台管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"ROKI云平台管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Digital Campus\",\"rule\":[{\"regexps\":{\"body\":[\"Digital Campus\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"RealPresence DMA\",\"rule\":[{\"regexps\":{\"body\":[\"RealPresence DMA\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Astra Control Panel\",\"rule\":[{\"regexps\":{\"body\":[\"Astra Control Panel\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"AWS-Elastic-Beanstalk\",\"rule\":[{\"regexps\":{\"body\":[\"AWS Elastic Beanstalk\",\"AWS Elastic Beanstalk Application is now running on your own dedicated environment in the AWS Cloud\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"东微智能-MCN-600\",\"rule\":[{\"regexps\":{\"header\":[\"Basic realm=\\\"McN600\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"amh-云主机面板\",\"rule\":[{\"regexps\":{\"body\":[\"登录 - AMH\",\"403 Forbidden - 403.html - AMH\",\"404 Not Found - 404.html - AMH\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"云巅iConn终端用户计算\",\"rule\":[{\"regexps\":{\"body\":[\"OWVM_PRODUCT_NAME\",\"Owtware\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"IBM Spectrum Protect Plus\",\"rule\":[{\"regexps\":{\"body\":[\"IBM Spectrum Protect Plus\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DAM 视觉中国数字资产管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"DAM-视觉中国数字资产管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"it内控堡垒主机\",\"rule\":[{\"regexps\":{\"body\":[\"it内控堡垒主机\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Palladium-Unified-security-management-and-comprehensive-audit-system\",\"rule\":[{\"regexps\":{\"body\":[\"module/image/pldsec.css\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"NSFOCUS SAS\",\"rule\":[{\"regexps\":{\"body\":[\"/login_logo_sas_zh_cn.png\",\"nsfocus\\u0026nbsp;sas\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"KTAMR-·-自动抄表管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"KTAMR · 自动抄表管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LEBO 运维管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"LEBO 运维管理平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"appnode\",\"rule\":[{\"regexps\":{\"header\":[\"Server: appnode/ccenter\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"EasyGame后台运维管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"EasyGame后台运维管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"XBMAN运维管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"XBMAN\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"e-cology运维管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"e-cology运维管理平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"金电网安可信运维管理系统TOS V2.0\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e金电网安可信运维管理系统TOS V2.0\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Adminset全自动化运维平台\",\"rule\":[{\"regexps\":{\"body\":[\"AdminSet Login\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LeCloud\",\"rule\":[{\"regexps\":{\"body\":[\"LeCloud\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OpenSpug\",\"rule\":[{\"regexps\":{\"body\":[\"M management system\",\"Spug O\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"飞思网巡\",\"rule\":[{\"regexps\":{\"body\":[\"IT运维网管系统\"],\"header\":[\"FreeSMonitorSessID\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Columbus 统一远程配置中心\",\"rule\":[{\"regexps\":{\"body\":[\"Columbus - 统一远程配置中心\",\"href=\\\"http://doc.wz-inc.com/display/QXWZ/Columbus\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"中科韦尔腐蚀监检测与腐蚀防护管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e腐蚀在线监测系统_腐蚀设备检测仪-沈阳中科韦尔腐蚀控制技术有限公司\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"浪潮 政务系统\",\"rule\":[{\"regexps\":{\"body\":[\"浪潮政务\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ZK Web Server\",\"rule\":[{\"regexps\":{\"header\":[\"ZK Web Server\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"N点虚拟主机管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"N点虚拟主机管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"维盟(WayOS)智能路由管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e维盟（WayOS）智能路由管理系统 www.wayos.cn\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"云点虚拟主机管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003e云点虚拟主机管理系统 - Powered By YunDian\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"牧云 CloudWalker\",\"rule\":[{\"favicon\":{\"mmh3\":[\"2022077319\"]},\"regexps\":{\"body\":[\"\\u003ctitle\\u003e主机安全平台\\u003c/title\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"听云 OneAgent\",\"rule\":[{\"regexps\":{\"body\":[\"听云 悟空\",\"assets/config/default-config.js\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"citrix Endpoint Management\",\"rule\":[{\"regexps\":{\"body\":[\"Endpoint Management\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Plesk\",\"rule\":[{\"regexps\":{\"header\":[\"PleskLin\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"深信服SANGFOR 桌面云\",\"rule\":[{\"regexps\":{\"body\":[\"Installing Client Mgt ActiveX Controls\",\"这里假定安装包目录为\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"资产灯塔系统\",\"rule\":[{\"regexps\":{\"body\":[\"资产灯塔系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Github_Enterprise\",\"rule\":[{\"regexps\":{\"body\":[\"Setup GitHub Enterprise\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Gitblit\",\"rule\":[{\"favicon\":{\"mmh3\":[\"573035254\"]},\"regexps\":{\"body\":[\"Gitblit\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Atlassian-Bitbucket\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cli\\u003eAtlassian Bitbucket\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"中远麒麟堡垒机\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1915366547\",\"-2084234863\"]},\"regexps\":{\"body\":[\"alert('没采集到指纹数据')\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"纷享销客CRM\",\"rule\":[{\"regexps\":{\"body\":[\"//www.fxiaoke.com/ap/reg/\",\"CRM登录系统 - 纷享销客CRM\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"悟空CRM\",\"rule\":[{\"favicon\":{\"mmh3\":[\"872805507\"]},\"regexps\":{\"body\":[\"悟空CRM\",\"\\u003cdiv class=\\\"row-fluid wukong\\\"\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"六台阶客户关系管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"六台阶客户关系管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"用友TurboCRM\",\"rule\":[{\"regexps\":{\"body\":[\"用友TurboCRM\",\"/js/turboui.js\\\"\\u003e\\u003c/script\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"零信任访问控制系统aTrust\",\"rule\":[{\"body\":[\"\\u003ctitle\\u003eaTrust\"],\"favicon\":{\"md5\":[\"61ea21861c73970bc98ed619f2748992\"]},\"regexps\":null}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PhpWeb\",\"rule\":[{\"regexps\":{\"body\":[\"pdv_pagename\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ValueApex-EAMic\",\"rule\":[{\"regexps\":{\"body\":[\"log into my eamic® account\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"友点CMS\",\"rule\":[{\"regexps\":{\"body\":[\"友点企业网站管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MCMS-铭飞\",\"rule\":[{\"regexps\":{\"body\":[\"ms.http.js\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PageAdmin-CMS\",\"rule\":[{\"regexps\":{\"body\":[\"PageAdmin\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Emlog\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"emlog\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"IdeaCMS\",\"rule\":[{\"regexps\":{\"body\":[\"IdeaCMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SupeSite\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"SupeSite\"],\"header\":[\"supe_sid\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PublicCMS\",\"rule\":[{\"regexps\":{\"body\":[\"publiccms\"],\"header\":[\"X-Powered-Publiccms\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"力软敏捷开发框架\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"力软敏捷开发框架，是一个web可视化开发平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"新软科技 极通EWEBS\",\"rule\":[{\"regexps\":{\"body\":[\"EWEBSClientsetup\",\"极通应用虚拟化系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Journalx\",\"rule\":[{\"regexps\":{\"body\":[\"journalx/authorlogon.action?mag_id\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"用友-YonBIP\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1183274548\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Dimix-ERP-办公系统\",\"rule\":[{\"regexps\":{\"body\":[\"Dimix ERP 办公系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"朗新天霁人力资源管理系统\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1143915194\"]},\"regexps\":{\"body\":[\"hrsoft.com.cn\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"天融信日志收集与分析系统\",\"rule\":[{\"regexps\":{\"body\":[\"天融信日志收集与分析系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"明御综合日志审计平台\",\"rule\":[{\"regexps\":{\"body\":[\"明御\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"奇安信网神上网行为管理与审计系统\",\"rule\":[{\"regexps\":{\"body\":[\"网神上网行为管理与审计系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"天清汉马VPN\",\"rule\":[{\"regexps\":{\"body\":[\"/vpn/common/js/leadsec.js\",\"/vpn/user/common/custom/auth_home.css\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PulseSecure-SSL-VPN\",\"rule\":[{\"regexps\":{\"body\":[\"pulse connect secure\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"华为-SSL-VPN\",\"rule\":[{\"regexps\":{\"body\":[\"Clear SSL cache successfully\",\"getCookie(\\\"SGDPortal\\\")\",\"SVN_GetLoginContextValue(\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"迪普vpn\",\"rule\":[{\"regexps\":{\"body\":[\"dptech_ssl\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"锐捷-VPN\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1525950034\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WPS部署可视化平台\",\"rule\":[{\"regexps\":{\"body\":[\"WPS 部署可视化平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"智齿客服系统\",\"rule\":[{\"regexps\":{\"body\":[\"sobot\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"360企业版控制中心\",\"rule\":[{\"regexps\":{\"body\":[\"360企业版控制中心\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"青藤万相主机自适应安全平台\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-898067940\"]},\"regexps\":{\"body\":[\"万相主机安全\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"明御终端安全及防病毒系统\",\"rule\":[{\"regexps\":{\"body\":[\"明御终端安全及防病毒系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"深信服终端检测响应平台\",\"rule\":[{\"regexps\":{\"body\":[\"datalayer','gtm-tl7g2lw'\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"金山终端安全\",\"rule\":[{\"regexps\":{\"body\":[\"金山终端安全系统\",\"setup/kanclient.exe\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ASUS Wireless Router\",\"rule\":[{\"regexps\":{\"body\":[\"ASUS Wireless Router\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SANGFOR-深信服数据中心\",\"rule\":[{\"regexps\":{\"body\":[\"/LogInOut.php\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HertzBeat\",\"rule\":[{\"regexps\":{\"body\":[\"HertzBeat\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"深信服WEB防篡改管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"cgi-bin/tamper_admin.cgi\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"碧海云盒\",\"rule\":[{\"regexps\":{\"body\":[\"碧海云盒\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apache ShenYu\",\"rule\":[{\"regexps\":{\"body\":[\"th:text=\\\\\\\"${domain}\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"山石网科云鉴主机安全管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"云鉴主机安全管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"网御Web应用安全防护系统\",\"rule\":[{\"regexps\":{\"body\":[\"网御Web应用安全防护系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"安全狗-云垒云安全平台\",\"rule\":[{\"regexps\":{\"body\":[\"yunlei_login\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"WIFISKY-7层流控路由器\",\"rule\":[{\"regexps\":{\"body\":[\"WIFISKY\",\"深圳市领空技术\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"奇安信网神数据库审计与防护系统\",\"rule\":[{\"regexps\":{\"body\":[\"网神数据库审计与防护系统许可协议\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"深信服应用交付管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"/reportCenter/index.php?cls_mode=cluster_mode_others\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"奇安信行为感知分析系统\",\"rule\":[{\"regexps\":{\"body\":[\"行为感知分析系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"网康互联网控制网关\",\"rule\":[{\"regexps\":{\"body\":[\"网康科技·互联网控制网关\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"绿盟综合威胁探针UTS\",\"rule\":[{\"regexps\":{\"body\":[\"探针, 威胁检测, 安全分析\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Smartweb管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"无线smartWeb 2129839604\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"云课堂主机\",\"rule\":[{\"favicon\":{\"mmh3\":[\"2129839604\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"深信服-行为感知系统\",\"rule\":[{\"regexps\":{\"body\":[\"home/mod-login/nopro-login/index\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"中国移动禹路由\",\"rule\":[{\"regexps\":{\"body\":[\"互联世界   物联未来-登录\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"网康NS-ASG应用安全网关\",\"rule\":[{\"regexps\":{\"body\":[\"网康NS-ASG应用安全网关\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MessageSolution Enterprise Email Archiving (EEA)\",\"rule\":[{\"regexps\":{\"body\":[\"MessageSolution\",\"index.jsp\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MessageSolution Enterprise Email Archiving (EEA)\",\"rule\":[{\"regexps\":{\"body\":[\"MessageSolution\",\"index.jsp\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"捷普防火墙管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"捷普\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"山石网科 防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"Hillstone\",\"licenseAggrement\",\"GLOBAL_CONFIG.js\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"深信服下一代防火墙\",\"rule\":[{\"favicon\":{\"mmh3\":[\"123821839\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"安恒明御安全网关\",\"rule\":[{\"regexps\":{\"body\":[\"明御安全网关\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"网康下一代防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"网康下一代防火墙\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"锐捷防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"锐捷网络\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"天清汉马USG防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"天清汉马USG\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"天清汉马USG防火墙\",\"rule\":[{\"regexps\":{\"body\":[\"天清汉马USG\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"EOVA\",\"rule\":[{\"regexps\":{\"body\":[\"EOVA\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OneThink\",\"rule\":[{\"regexps\":{\"body\":[\"OneThink管理平台\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Metronic\",\"rule\":[{\"regexps\":{\"body\":[\"metronic. admin dashboard template.\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Jakarta Project\",\"rule\":[{\"regexps\":{\"body\":[\"alt=\\\\\\\"the jakarta project\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PigX-快速开发框架\",\"rule\":[{\"regexps\":{\"body\":[\"PigX\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Kong\",\"rule\":[{\"regexps\":{\"header\":[\"server: Kong\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"浪潮 ClusterEngine\",\"rule\":[{\"regexps\":{\"body\":[\"ClusterEngine\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Cwindow政务安全邮箱\",\"rule\":[{\"regexps\":{\"body\":[\"北京国信冠群技术有限公司,国信冠群,邮件\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"朗阁-MailData\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1869497338\"]},\"regexps\":{\"body\":[\"MailData电子邮件安全网关系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"U-MAIL邮件营销平台\",\"rule\":[{\"regexps\":{\"body\":[\"u-mail\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Nsmail\",\"rule\":[{\"regexps\":{\"body\":[\"Nsmail\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"EQmail\",\"rule\":[{\"regexps\":{\"body\":[\"eqmail.ico\",\"powered by eqmail!\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ExtMail\",\"rule\":[{\"regexps\":{\"body\":[\"setcookie('extmail_username\",\"欢迎使用extmail\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SPAM-SQR-电子邮件安全网关\",\"rule\":[{\"regexps\":{\"body\":[\"spam sqr\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"IBM-iNotes\",\"rule\":[{\"favicon\":{\"mmh3\":[\"728788645\"]},\"regexps\":{\"body\":[\"IBM iNotes\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Eastnet Mail\",\"rule\":[{\"regexps\":{\"body\":[\"East.Net Webmail\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Winmail\",\"rule\":[{\"regexps\":{\"body\":[\"winmail mail server\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Huawei-AnyOffice\",\"rule\":[{\"regexps\":{\"body\":[\"cancelchangepwbtn\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"中创应用服务器\",\"rule\":[{\"regexps\":{\"body\":[\"InforSuite AS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"然之OA\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-2120337510\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"金蝶云星瀚\",\"rule\":[{\"regexps\":{\"body\":[\"金蝶云星瀚\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FE企业运营管理平台\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-391577146\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"蓝凌KK\",\"rule\":[{\"regexps\":{\"body\":[\"蓝凌KK\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"火星舱\",\"rule\":[{\"regexps\":{\"body\":[\"火星舱系统管理\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"海康威视智慧城管平台\",\"rule\":[{\"favicon\":{\"mmh3\":[\"118923032\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"海康威视安全生产管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"Infovision iWork-Safety\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Xpaper\",\"rule\":[{\"regexps\":{\"body\":[\"src=\\\"template/paper/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Yearning\",\"rule\":[{\"regexps\":{\"body\":[\"Yearning\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Huawei-华为-AR-Web-管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"ar web登录\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"e看牙文件上传\",\"rule\":[{\"regexps\":{\"body\":[\"e看牙\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"datart\",\"rule\":[{\"regexps\":{\"body\":[\"datart\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"蜂网 Router\",\"rule\":[{\"regexps\":{\"body\":[\"企业级流控云路由器\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"仁和汇智\",\"rule\":[{\"regexps\":{\"body\":[\"仁和汇智\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Mattermost\",\"rule\":[{\"regexps\":{\"body\":[\"To use Mattermost\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FLUX-富勒-WMS\",\"rule\":[{\"regexps\":{\"body\":[\"FLUX WMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"小鱼易连云视讯\",\"rule\":[{\"regexps\":{\"body\":[\"font_1957344_lqkodjqdbl.css\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OneinStack\",\"rule\":[{\"regexps\":{\"body\":[\"OneinStack\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ArangoDB Web Interface\",\"rule\":[{\"regexps\":{\"body\":[\"ArangoDB Web Interface\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"AWS-WAF\",\"rule\":[{\"regexps\":{\"header\":[\"awselb\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Tilgin router\",\"rule\":[{\"regexps\":{\"body\":[\"Welcome to the Tilgin router\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"孚盟云 CRM\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1533124028\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Serv-U\",\"rule\":[{\"favicon\":{\"mmh3\":[\"812385209\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"深澜认证计费系统\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1546320596\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"AdGuard\",\"rule\":[{\"regexps\":{\"body\":[\"AdGuardTeam\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Gocloud-高恪\",\"rule\":[{\"regexps\":{\"body\":[\"GOCLOUD\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Next Terminal\",\"rule\":[{\"regexps\":{\"body\":[\"Next Terminal\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"FunAdmin\",\"rule\":[{\"regexps\":{\"body\":[\"FunAdmin\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"LibreSpeed\",\"rule\":[{\"regexps\":{\"body\":[\"LibreSpeed\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"kamailio\",\"rule\":[{\"regexps\":{\"header\":[\"kamailio\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Emby\",\"rule\":[{\"regexps\":{\"body\":[\"content=\\\"Emby Server\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"来访通\",\"rule\":[{\"regexps\":{\"body\":[\"来访通\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"满客宝智慧食堂管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"满客宝\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"脸爱云一脸通智慧管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"脸爱云\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"DataGear\",\"rule\":[{\"regexps\":{\"body\":[\"DataGear\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Cloudreve\",\"rule\":[{\"regexps\":{\"body\":[\"Cloudreve\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Archery\",\"rule\":[{\"regexps\":{\"body\":[\"Archery\\u003c/strong\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SaltStack Config\",\"rule\":[{\"regexps\":{\"body\":[\"SaltStack config\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"北京东华原煎药管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"北京东华原煎药管理系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"百傲瑞达安防管理系统平台\",\"rule\":[{\"regexps\":{\"body\":[\"百傲瑞达\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"润申信息企业标准化管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"润申信息\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"EMQX\",\"rule\":[{\"regexps\":{\"body\":[\"EMQX\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"税控服务器管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"resources/css/login_yzm.css\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PCI-openEAP\",\"rule\":[{\"regexps\":{\"body\":[\"openEAP\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"天联高级版\",\"rule\":[{\"regexps\":{\"body\":[\"天联高级版\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"大华智慧园区综合管理平台\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1935899595\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"rustDesk\",\"rule\":[{\"regexps\":{\"body\":[\"rs-cn.rustDesk.com\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ZFile\",\"rule\":[{\"regexps\":{\"body\":[\"ZFile\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"H5S视频平台\",\"rule\":[{\"regexps\":{\"body\":[\"h5s视频平台|web\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ZKTime\",\"rule\":[{\"regexps\":{\"body\":[\"ZKTime\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"VoIPmonitor\",\"rule\":[{\"regexps\":{\"body\":[\"VoIPmonitor\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"rConfig\",\"rule\":[{\"regexps\":{\"body\":[\"rConfigLogo\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"PySpider\",\"rule\":[{\"regexps\":{\"body\":[\"pyspider dashboard\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Cisco HyperFlex Connect\",\"rule\":[{\"regexps\":{\"body\":[\"Cisco HyperFlex Connect\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"MeterSphere\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1023469568\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apache-SkyWalking\",\"rule\":[{\"favicon\":{\"mmh3\":[\"1929532064\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Palo Alto Login Portal\",\"rule\":[{\"favicon\":{\"mmh3\":[\"602431586\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Palo Alto Networks\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-318947884\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"思迪数据池管理平台\",\"rule\":[{\"regexps\":{\"body\":[\"思迪\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"图创图书馆集群管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"interlib/common/\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"V2 Conference 视频会议系统\",\"rule\":[{\"regexps\":{\"body\":[\"window.location.href=\\\\\\\"/Conf/index.jsp\\\\\\\"\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TamronOS IPTV系统\",\"rule\":[{\"regexps\":{\"body\":[\"TamronOS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TVT 公司产品\",\"rule\":[{\"favicon\":{\"mmh3\":[\"492290497\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SpiderFlow\",\"rule\":[{\"regexps\":{\"body\":[\"SpiderFlow\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"SolarWinds orion\",\"rule\":[{\"regexps\":{\"body\":[\"SolarWinds orion\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Pega infinity\",\"rule\":[{\"regexps\":{\"body\":[\"Pega infinity\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Etherpad\",\"rule\":[{\"regexps\":{\"header\":[\"Etherpad\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apache-Unomi\",\"rule\":[{\"regexps\":{\"body\":[\"logo apache unomi\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apache-Nifi\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ca href=\\\"/nifi/\\\"\\u003e/nifi\\u003c/a\\u003e\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apache-Dolphinscheduler\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003edolphinscheduler\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Apache-Airflow\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003cspan\\u003eairflow\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"alibaba AnyProxy\",\"rule\":[{\"regexps\":{\"body\":[\"AnyProxy\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"ACTI 视频监控\",\"rule\":[{\"regexps\":{\"body\":[\"/cgi-bin/system?SYSTEM_INFO\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"OpenTSDB\",\"rule\":[{\"favicon\":{\"mmh3\":[\"407286339\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"问卷星\",\"rule\":[{\"favicon\":{\"mmh3\":[\"-1177293769\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"新为SmartLearning\",\"rule\":[{\"regexps\":{\"body\":[\"新为\",\"SmartLearning\",\"SmartMOOC\",\"SmartExam\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Heimdall\",\"rule\":[{\"regexps\":{\"body\":[\"Heimdall\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"CWP-Web-Panel\",\"rule\":[{\"regexps\":{\"body\":[\"/login/cwp_theme/original/img/ico/favicon.ico\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Cockpit\",\"rule\":[{\"regexps\":{\"body\":[\"cockpit/static/login.js\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Phpstudy\",\"rule\":[{\"regexps\":{\"body\":[\"Phpstudy for\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"天融信TopAPP负载均衡系统\",\"rule\":[{\"regexps\":{\"body\":[\"TopAPP负载均衡系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Spring Eureka\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eEureka\\u003c/title\\u003e\",\"eureka\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"HuaweiCloudWAF\",\"rule\":[{\"regexps\":{\"header\":[\"HuaweiCloudWAF\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"GitBook\",\"rule\":[{\"regexps\":{\"body\":[\"gitbook\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"天融信运维安全审计系统\",\"rule\":[{\"regexps\":{\"body\":[\"天融信运维安全审计系统\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"绿盟运维安全管理系统OSMS\",\"rule\":[{\"regexps\":{\"body\":[\"OSMS\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"火绒终端安全管理系统\",\"rule\":[{\"regexps\":{\"body\":[\"login:title.user_login\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"TWebAP\",\"rule\":[{\"regexps\":{\"header\":[\"TWebAP\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"Guns\",\"rule\":[{\"regexps\":{\"body\":[\"登录 - Guns\"]}}],\"tag\":[\"tmp\"]},{\"link\":\"\",\"name\":\"阿里WAF\",\"rule\":[{\"regexps\":{\"header\":[\"acw_tc\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"安恒WAF\",\"rule\":[{\"regexps\":{\"body\":[\"玄武盾\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"360WAF\",\"rule\":[{\"regexps\":{\"body\":[\"wzws-waf-cgi\"],\"header\":[\"WZWS-RAY\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"aeSecureWAF\",\"rule\":[{\"regexps\":{\"body\":[\"aesecure_denied\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"AliYunDun\",\"rule\":[{\"regexps\":{\"body\":[\"errors.aliyun.com\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"安全宝WAF\",\"rule\":[{\"regexps\":{\"body\":[\"/aqb_cc/error/\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"ArmorDefense\",\"rule\":[{\"regexps\":{\"body\":[\"protection from Armor\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"F5WAF\",\"rule\":[{\"regexps\":{\"body\":[\"The requested URL was rejected\",\"security.f5aas.com\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"AmazonWAF\",\"rule\":[{\"regexps\":{\"body\":[\"Generated by cloudfront\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"CloudFlareWAF\",\"rule\":[{\"regexps\":{\"body\":[\"Attention Required!\",\"CLOUDFLARE_ERROR_\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"知道创宇WAF\",\"rule\":[{\"regexps\":{\"body\":[\"ks-waf-error\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"百度WAF\",\"rule\":[{\"regexps\":{\"body\":[\"DuEdge\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"FortinetWAF\",\"rule\":[{\"regexps\":{\"body\":[\"Server Unavailable!\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"GoDaddyWAF\",\"rule\":[{\"regexps\":{\"body\":[\"GoDaddy Security\",\"GoDaddy Website Firewall\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"MicrosoftWAF\",\"rule\":[{\"regexps\":{\"body\":[\"denied the specified Uniform Resource Locator\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"CitrixWAF\",\"rule\":[{\"regexps\":{\"body\":[\"Application Firewall Block Page\",\"Violation Category: APPFW_\",\"AppFW Session ID\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"openrasp\",\"rule\":[{\"regexps\":{\"body\":[\"400 - Request blocked by OpenRASP\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"paloaltoWAF\",\"rule\":[{\"regexps\":{\"body\":[\"Palo Alto Next Generation Security Platform\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"ArmorLogic\",\"rule\":[{\"regexps\":{\"header\":[\"Profense\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"Safe3\",\"rule\":[{\"regexps\":{\"body\":[\"Safe3waf\"],\"header\":[\"Safe3 Web Firewall\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"Safedog\",\"rule\":[{\"regexps\":{\"body\":[\"safedogsite\"],\"header\":[\"Safedog\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"长亭WAF\",\"rule\":[{\"regexps\":{\"regexp\":[\"\\u003c!\\\\\\\\-\\\\\\\\- event_id: [0-9a-f]{32} \\\\\\\\-\\\\\\\\-\\u003e\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"ImpervaWAF\",\"rule\":[{\"regexps\":{\"body\":[\"The incident ID is:\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"SonicWALL\",\"rule\":[{\"regexps\":{\"body\":[\"\\u003ctitle\\u003eWeb Site Blocked\\u003c/title\\u003e\"],\"header\":[\"SonicWALL\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"SophosWAF\",\"rule\":[{\"regexps\":{\"body\":[\"UTM Web Protection\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"腾讯WAF\",\"rule\":[{\"regexps\":{\"body\":[\"waf.tencent-cloud.com\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"IBMWAF\",\"rule\":[{\"regexps\":{\"body\":[\"WebSEAL\"],\"header\":[\"WebSEAL\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"YundunWAF\",\"rule\":[{\"regexps\":{\"body\":[\"YUNDUN Cloud WAF\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"YunsuoWAF\",\"rule\":[{\"regexps\":{\"body\":[\"yunsuologo\"],\"header\":[\"yunsuo_session\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"瑞数WAF\",\"rule\":[{\"regexps\":{\"body\":[\"因权限问题或行为非法，您的访问被拒绝\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"anzuwaf\",\"rule\":[{\"regexps\":{\"header\":[\"AnZuWAF\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"fortiweb waf\",\"rule\":[{\"regexps\":{\"header\":[\"FORTIWAFSID=\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"indusguard_waf\",\"rule\":[{\"regexps\":{\"body\":[\"IndusGuard WAF\",\"wafportal/wafportal.nocache.js\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"safe3waf\",\"rule\":[{\"regexps\":{\"header\":[\"Safe3WAF\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"websecurity_waf\",\"rule\":[{\"regexps\":{\"header\":[\"Websecurity: WAF 1.0\"]}}],\"tag\":[\"waf\"]},{\"link\":\"\",\"name\":\"安全狗WAF\",\"rule\":[{\"regexps\":{\"header\":[\"WAF/2.0\"]}}],\"tag\":[\"waf\"]}]"
  },
  {
    "path": "backend/fingerprints/goby.json",
    "content": "[{\n  \"name\": \"Comtrend-Gigabit-802.11n-Router\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Comtrend Gigabit 802.11n Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Comtrend Gigabit 802.11n Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"sky-Router\",\n  \"logic\": \"a||b|| (c&&d&&e) || (f&&g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"SKY Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"SKY Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: sky_router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: sky_router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"D-link-DSL-2640B\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Product : DSL-2640B\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"D-Link DSL-2640B\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WebSphere-App-Server\",\n  \"logic\": \"((a||b) &&c&&d) || (e&&f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: WebSphere Application Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IBM WebSphere Application Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: WebSphere Application Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"And Tong intelligent\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/web/mainMenu/images/favicon.ico\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kedacom-NVR\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NVR Station Web\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"location=\\\\\\\"index_cn.htm\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"if(syslan == \\\\\\\"zh-cn\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"WMS browse NVR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Super - Video Conference\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Welcome to Management System\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a href=http://www.vmediax.com target=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JUNIPer-EX2300\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ex2300\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"jweb-title uppercase\\\\\\\"> - ex2300\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Wing-FTP-Server\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Wing FTP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Wing FTP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/help_javascript.htm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Wing FTP Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WHMCS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://www.whmcs.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div id=\\\\\\\"welcome_box\\\\\\\">Please <a href=\\\\\\\"clientarea.php\\\\\\\" title=\\\\\\\"Login\\\\\\\"><strong>Login</strong></a> or <a href=\\\\\\\"register.php\\\\\\\" title=\\\\\\\"Register\\\\\\\"><strong>Register</strong></a></div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WSNCM-Internet of Things Supply Chain and Financial Risk Management Service System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login\\\\\\\">\\u7269\\u8054\\u7f51\\u4f9b\\u5e94\\u94fe\\u4e0e\\u91d1\\u878d\\u98ce\\u9669\\u7ba1\\u7406\\u670d\\u52a1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fortinet-sslvpn\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"fgt_lang\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/sslvpn/portal.html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"YXLINK-scanner\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"\\u94f1\\u8fc5\\u6f0f\\u6d1e\\u626b\\u63cf\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u94f1\\u8fc5\\u6f0f\\u6d1e\\u626b\\u63cf\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"cn=nvs.yxlink.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-MCU\",\n  \"logic\": \"(a||b||c) &&d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"McuR5-min.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MCUType.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"huawei MCU\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"NETGEAR-\\u516c\\u53f8\\u4ea7\\u54c1\",\n  \"logic\": \"a||b|| (c&&d) ||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETGEAR Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Netgear\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"401\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"NETGEAR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: Netgear\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Basic realm=\\\\\\\"NETGEAR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"netcore-\\u516c\\u53f8\\u4ea7\\u54c1\",\n  \"logic\": \"((a||b||c) &&d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETCORE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Microsoft-NetCore\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Boa/Netcore\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Vendor: Netcore\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Gemtek- China Infinity Router\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5f8c\\u53f0\\u767b\\u5165-\\u4e2d\\u4fdd\\u7121\\u9650\\u8def\\u7531\\u5668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"alt=\\\\\\\"\\u6b61\\u8fce\\u4f7f\\u7528\\u4e2d\\u4fdd\\u7121\\u9650\\u8def\\u7531\\u5668\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"COINHIVE-JS digging mine script\",\n  \"logic\": \"(a&&b) ||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var miner =\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"miner.start\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"CoinHive.Anonymous('\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/lib/coinhive.min.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"new CryptoNoter.User\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Coin-hive.com/lib\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"iball-Baton-Wireless-N-Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"iBall Baton Wireless-N Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huashun Xinan -Foeye\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"DLbrowsertext\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5317\\u4eac\\u767d\\u5e3d\\u6c47\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"FOEYE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/assets/foeye/logo\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"abitech-Wireless-Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ABI  Wireless Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"150Mbps-Wireless-Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"150Mbps Wireless Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mail2000-mail system\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Mail2000\\u90f5\\u4ef6\\u7cfb\\u7d71\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Mail2000 Message System\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Mail2000 ESMTP Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AirOS\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AIROS_SESSIONID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"cookiechecker?uri=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"AIROS_SESSIONID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"cookiechecker?uri=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"mini_httpd\",\n  \"logic\": \"((a||b) &&c&&d&&e) || ((f) &&g&&h&&i&&j)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: mini_httpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: acme mini_httpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: DNVRS-Webs\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: mini_httpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Server: DNVRS-Webs\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"x-powered-by: ThinkPHP\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"AirTies-Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Airties\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"yongyou-GRP-RMIS system\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7528\\u53cbGRP-RMIS\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"meta http-equiv=\\\\\\\"GRP-RMIS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"clientfile/RmisUpdate.exe\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Diamond Log Management Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7422\\u84dd\\u65e5\\u5fd7\\u5927\\u6570\\u636e\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"wordpress-woocommerce\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"wp-content/plugins/woocommerce/assets/css/woocommerce-layout.css?ver\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OpenAM\",\n  \"logic\": \"a||b||c||d||e||f||g||h\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OpenAM\\uff08\\u767b\\u5f55\\uff09\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"action=\\\\\\\"/openam/UI/Login\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"OpenAM Web Agent\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/OpenAM/UI/Login.jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/openam/XUI/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"OpenAM Web Agent\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"openam/SSORedirect\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"OpenAM-11.0.0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"THE_OPEN_GROUP-UNIX system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Unix\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"linux\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Hanwang - Face Identification Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6c49\\u738b\\u4eba\\u8138\\u8bc6\\u522b\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KEO-Roteador-KLR-300N\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Roteador Wireless KLR 300N\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-R6850\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR NETGEAR R6850\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR R6850\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NETGEAR R6850\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Flying Fish Star - Next Generation Firewall Safety Gateway\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e0b\\u4e00\\u4ee3\\u9632\\u706b\\u5899\\u5b89\\u5168\\u7f51\\u5173\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/css/cover_admin.css\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bminer\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Bminer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZurmoCRM\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZurmoCRM - Sign in\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JYMUSiC\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"JYmusic\\u97f3\\u4e50\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"public/static/libs/jymusic/css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SNB-stock trading software\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Copyright 2005\\u20132009 <a href=\\\\\\\"http://www.s-mo.com\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AXGATE-UTM\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"axgate\\\\\\\" ng-controller=\\\\\\\"loginController\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bitbucket\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Bitbucket\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/j_atl_security_check\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"bitbucket.page.login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Scientific-Linux\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Scientific Linux\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SCADA-PLC\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/images/rockcolor.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/ralogo.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Ethernet Processor\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Join_Cheer - Long Territories Financial Statements\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"JQCI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"../netrep\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-Extended-Communication-Server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Alcatel-Lucent Extended Communication Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alibaba-Alimonitor Notice Access Center\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Alimonitor\\u901a\\u77e5\\u6536\\u53d1\\u4e2d\\u5fc3Muses\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"China Unicom-Ens Electronic Sales Service IPASS Certification Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ESS\\u7535\\u5b50\\u5316\\u9500\\u552e\\u670d\\u52a1iPASS\\u8ba4\\u8bc1\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Baidu-customer service operation management background\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5ba2\\u670d\\u8fd0\\u8425\\u7ba1\\u7406\\u540e\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"count-down\\\\\\\">\\u9875\\u9762\\u5728<em>5</em>\\u79d2\\u540e\\u81ea\\u52a8\\u8df3\\u8f6c\\u81f3\\u60a8\\u6709\\u6743\\u9650\\u7684\\u9875\\u9762</div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UltraPower-ME Mobile Coordination Office Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ME\\u79fb\\u52a8\\u534f\\u8c03\\u529e\\u516c\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yun asked robot - customer service robot\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"FAQ\\u5ba2\\u670d\\u673a\\u5668\\u4eba\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5357\\u4eac\\u4e91\\u95ee\\u7f51\\u7edc\\u6280\\u672f\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Thermo_Fisher-datataker\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"htmlJavascript/multibox/multibox.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Logger home - Datataker\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"htmlJavascript/mootools.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"htmlImages/mainBackground.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Indexer-Coordinator\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Druid Indexer Coordinator Console\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Druid Indexer Coordinator Console\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Naftis\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Naftis\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/public/naftis.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"qpsmtpd\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"qpsmtpd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ABO.CMS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ABO.CMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ABO.CMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Azkaban-Web-Client\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Azkaban Web Client\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hortonworks-SmartSense-Tool\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Hortonworks SmartSense Tool is loading...\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"name=\\\\\\\"hstapp/config/environment\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AsiaInfo-Intelligent Measurement Cloud Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u667a\\u6d4b\\u4e91\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EdgeOS\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"EdgeOS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Welcome to EdgeOS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Codis\",\n  \"logic\": \"a||b||c|| (d&&e) ||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Codis\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ng-app=codisControllers\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"Welcome to visit Codis dashboard.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"MainCodisCtrl\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Codis \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"realm=\\\\\\\"Welcome to visit Codis dashboard.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DSS-stream media server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: DSS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: DSS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sunny-Matrix\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"- - - Sunny Matrix - - -\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Lianwei Technology-IT Safety Operation and Management System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u8054\\u8f6fIT\\u5b89\\u5168\\u8fd0\\u7ef4\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"action=\\\\\\\"/manager/loginController.htm?act=login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DreamHost-FTP\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"t\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DreamHost FTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"China Unicom - Tiangong DC / OS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5929\\u5babDC/OS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tonic ETL system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div class=\\\\\\\"header\\\\\\\">\\u767b\\u5f55\\u8865\\u5929ETL\\u7cfb\\u7edf</div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JStorm\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Jstorm UI \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"jstorm\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BlackMoon-FTP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BlackMoon FTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HttpFS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<b>HttpFs service</b\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Agfeo-TK-Suite-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: tksock\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: tksock\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ACTFAX-ActiveFax\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ActiveFax Version\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AdminSystem-EmailArchitect\",\n  \"logic\": \"a|| (b||c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EmailArchitect\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"EmailArchitect Web Access\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Powered                                 by AdminSystem Software Limited\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Wind-River-FTP\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"t\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Wind River FTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"VxWorks\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"FTP server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Apache Mesos\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Mesos\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/static/css/mesos.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<img src=\\\\\\\"/static/img/mesos_logo.png\\\\\\\" alt=\\\\\\\"Apache Mesos\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-Smart-TV\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelName>LG Smart TV</modelName>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<friendlyName>LG Smart TV</friendlyName>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<friendlyName>[LG] SMART TV\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Containe - online customer service\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/meiqia.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ThinkOX\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered By ThinkOX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ThinkOX\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-HG8045H\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var productname = 'HG8045H';\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"intelbras-WRN150\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"WRN150\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Roteador Wireless N WRN150\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"WRN150\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u5947\\u5b89\\u4fe1-\\u5929\\u64ce\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"360\\u65b0\\u5929\\u64ce\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"appid\\\\\\\":\\\\\\\"skylar6\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/task/index/detail?id={item.id}\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u5df2\\u8fc7\\u671f\\u6216\\u8005\\u672a\\u6388\\u6743\\uff0c\\u8d2d\\u4e70\\u8bf7\\u8054\\u7cfb4008-136-360\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"360\\u5929\\u64ce\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"360\\u5929\\u64ce\\u7ec8\\u7aef\\u5b89\\u5168\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-AX92U\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-AX92U\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-ACRH17\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-ACRH17\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"RT-ACRH17\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DrayTek-Vigor-AP902\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"VigorAP902\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"VigorAP902\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DrayTek-Vigor-AP810\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"VigorAP810\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"VigorAP810\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-WGR-614L\",\n  \"logic\": \"a||b||c||d||e||f||g||h||i||j||k||l\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"WGR-614L\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"WGR614v2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"WGR614v3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"WGR614v4\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"WGR614v6\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"realm=\\\\\\\"WGR614v7\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"realm=\\\\\\\"WGR-614L\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"realm=\\\\\\\"WGR614v2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"realm=\\\\\\\"WGR614v3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"realm=\\\\\\\"WGR614v4\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"realm=\\\\\\\"WGR614v6\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"realm=\\\\\\\"WGR614v7\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ADVANTECH-WR-600N\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"WR-600N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"WR-600N\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hiawatha-web-server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Hiawatha Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Hiawatha Web Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AVIGILON-Gateway\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: AvigilonGateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: AvigilonGateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"SUN-Solaris\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"login: Solaris 5.9 (SUN)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Sun Solaris\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Sun Solaris\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"sun_ssh\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"SunOS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"SunOS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ADB-HTTP-Server\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: ADB Broadband HTTP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: ADB Broadband HTTP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"H3C-Miniware-Webs\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: H3C-Miniware-Webs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: H3C-Miniware-Webs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"ERICOM-Access-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Ericom Access Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Ericom Access Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IPWEBS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: IPWEBS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: IPWEBS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RALPH-Asset Management\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ralph <strong>3</strong>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"rosewill-router\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RNX-N300RT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Default: admin/admin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"RNX-N300RT\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sagemcom-SE681-WiMAX\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Sagemcom SE681 WiMAX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Sagemcom SE681 WiMAX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Sagemcom SE681 WiMAX\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"klhttpd\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: klhttpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: klhttpd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HDHomeRun\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: HDHomeRun\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: HDHomeRun\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"QNX-Slinger\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Slinger\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Slinger\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"adaptv-Web-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"server: adaptv\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: adaptv\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KIMAX-Unicorn-Router\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: HUI-AI SERVER\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: HUI-AI SERVER\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bitnami-LAMP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Bitnami: Open Source. Simplified\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-corporate product\",\n  \"logic\": \"((a|| (b&&c) ||d||e||f) &&g&&h) || (i||j||k||l)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"service@h3c.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Copyright\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"H3C Corporation\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"icg_helpScript.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"h3c tech\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"h3c\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Hangzhou H3C\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"H3C login:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"Hangzhou  H3C \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"New H3C Technologies Co., Ltd. \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"INEOQUEST\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: INEOQUEST\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: INEOQUEST\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"acmetool-redirector\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: acmetool-redirector\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: acmetool-redirector\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"China Unicom-VOP\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"lgDynaCodeBtn\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"vop\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"id=\\\\\\\"lgForm\\\\\\\" action=\\\\\\\"/SSO/login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-ISE\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Identity Services Engine\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-VPN\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OnCompleted(hResult,pErrorObject, pAsyncContext)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Auth-Http Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Java-Composer-Server\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Java Composer Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Java Composer Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Node-Exporter\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Node Exporter\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<h1>Node Exporter</h1>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"metrics\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mesosphere-DC/OS\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Mesosphere DCOS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Mesosphere DC/OS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"DC/OS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"Mesosphere\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"Mesosphere\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DPtech-FW1000\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DPTECH\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FW1000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"DPTECH FW1000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DrayTek-Router-Model\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DrayTek Corporation\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Router Model\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-HG8145V5\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var productname = 'HG8145V5'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var productname = 'HG8145V5';\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-HG8045A\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var productname = 'HG8045A'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var productname = 'HG8045A';\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LEANOTE-\\u8682\\u8681\\u7b14\\u8bb0\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"name=\\\\\\\"author\\\\\\\" content=\\\\\\\"leanote,\\u8682\\u8681\\u7b14\\u8bb0\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-NWA1100-NH\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZyXEL NWA1100-NH\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NWA1100-NH\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-SBG3500\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"Welcome to \\\\\\\" + \\\\\\\"SBG3500\\\\\\\" + \\\\\\\" Web\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZyXEL SBG3500\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Micro - industrial - access control experts\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u95e8\\u7981\\u4e13\\u5bb6\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<form method=post action=ACT_ID_1>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Kedacom-Video Conference\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Kedacom Meeting Teminal \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Meeting Control System - Kedacom\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOSHIBA-TV\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ro.product.model=TOSHIBA-TV\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MyGica-S905-TV-Box\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MyGica_S905 TV Box\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-RV042G\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RV042G\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Organizational Unit: RV042G\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tomcat-Manager-Application\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Tomcat Manager Application\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Generator: Drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Tomcat Manager Application\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"X-Generator: Drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"IP_COM-wifi\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"alt=\\\\\\\"IP-COM LOGO\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SIEMENS-\\u516c\\u53f8\\u4ea7\\u54c1\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"s7\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"LocalLogin(sPublicKey1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/logo_login.shtm?!App-language=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LinkedCare-e tooth teeth message platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"e\\u770b\\u7259\\u6d88\\u606f\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-EX3700\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETGEAR EX3700\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Heavenly Letter - Network Audit System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"onclick=\\\\\\\"dlg_download()\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5929\\u878d\\u4fe1\\u7f51\\u7edc\\u5ba1\\u8ba1\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Lala - Information Management Platform\",\n  \"logic\": \"(a&&b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/Public/Js/knockout-3.4.1.debug.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<form action=\\\\\\\"/index.php/Home/Login/login.html\\\\\\\" method=\\\\\\\"post\\\\\\\" id=\\\\\\\"login\\\\\\\" class=\\\\\\\"form\\\\\\\" data-bind=\\\\\\\"submit: submitForm\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Access-Control-Allow-Methods\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zhongyu Wantong -TrustMore centralized certification system\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"alt=\\\\\\\"TrustMore \\u5b89\\u5168\\u53ef\\u4fe1\\u7684\\u5e94\\u7528\\u6388\\u6743\\u5e73\\u53f0\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: TrustMore Proxy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: TrustMore Proxy\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D-Link-DIR-620\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DIR-620\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"D-Link Russia\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"class='title'>DIR-620\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TivoWebPlus\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TivoWebPlus\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TivoWebPlus\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DSL-2750B\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"D-Link DSL-2750B\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DSL-2750B\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"leadsec Nebula-SoC\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/leadsec-soc\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"action=\\\\\\\"/leadsec-soc/signin\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-GS748Tv5\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"gs748tv5Image spacer50Percent topAlign rightHAlign\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"GS748Tv5\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NETGEAR GS748Tv5\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EHTTP\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: eHTTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: eHTTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Zkteco-Access Control System\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/logoZKAccess_zh-cn.jpg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"FrontView-Http-Server\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FrontView Http Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"FrontView\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"warningText\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"FrontView Http Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Riicy-Rui Dr. Cloud Office System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/studentSign/toLogin.di\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/user/toUpdatePasswordPage.di\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TomatoCart\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"TomatoCart Open Source Shopping Cart Solutions\\\\\\\" />\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://www.tomatocart.com\\\\\\\" target=\\\\\\\"_blank\\\\\\\">TomatoCart</a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TMSoft-MyAuth-Gateway\",\n  \"logic\": \"a||b||c||d||e||f||g||h||i||j\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TMSoft Solucoes (www.tmsoft.com.br)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"x-software-info MyAuth Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"x-software-owner Patrick Brandao\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"x-manager-by MyAuth Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"set-cookie MyAuth\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"TMSoft Solucoes (www.tmsoft.com.br)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"x-software-info MyAuth Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"x-software-owner Patrick Brandao\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"x-manager-by MyAuth Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"set-cookie MyAuth\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-H618B\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"ZTE H618B\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZTE H618B\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-ER3200G2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ER3200G2\\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Inhpe-OA\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/app_qjuserinfo/qjuserinfoadd.jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/IMAGES/default/first/xtoa_logo.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"SYSTEMFILES/JS/IAWebClientActivexCheck.js\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WUZHICMS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by wuzhicms\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"wuzhicms\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SEMCMS\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"sc_mid_c_left_c sc_mid_left_bt\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"semcms PHP 3.9\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<b semcms PHP 2.9</b>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://www.sem-cms.com\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TPSHOP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/index.php/Mobile/Index/index.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \">TPshop\\u5f00\\u6e90\\u5546\\u57ce<\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NITC-CMS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NITC Web Marketing Service\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/images/nitc1.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APACHE-CouchDB\",\n  \"logic\": \"(a&&b&&c&&d) || (e&&f) ||g|| (h&&i)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CouchDB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"200 OK\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"{\\\\\\\"couchdb\\\\\\\":\\\\\\\"Welcome\\\\\\\",\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\\\\\\"version\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"CouchDB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"X-Couchdb-Body-Time: 0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"\\\\\\\"couchdb\\\\\\\":\\\\\\\"welcome\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Server: Boa\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"HFS\",\n  \"logic\": \"((a||b||c||d||e) &&f&&g&&h) || ((i||j) &&k&&l)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: HFS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"hfs_sid_=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"HFS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"hfs/\\\\\\\">HttpFileServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<a href=\\\\\\\"http://www.rejetto.com/hfs/\\\\\\\">HttpFileServer 2.3g</a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"<h2>Blog Comments</h2>\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"hfs_sid_=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Server: HFS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"3Com-OfficeConnect-VPN-Firewall\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"3Com - OfficeConnect VPN Firewall\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"China Tie Xinan - Kobo Safety Isolation and Information One-way Import System\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u79d1\\u535a\\u5b89\\u5168\\u9694\\u79bb\\u4e0e\\u4fe1\\u606f\\u5355\\u5411\\u5bfc\\u5165\\u7cfb\\u7edf</span>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u79d1\\u535a\\u5b89\\u5168\\u9694\\u79bb\\u4e0e\\u4fe1\\u606f\\u4ea4\\u6362\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"page/downloadLinuxClient.is.run\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Toshiba-Projector\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: TOSHIBA-Projector\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: TOSHIBA-Projector\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Toshiba-Printer\",\n  \"logic\": \"a|| (b&&c) ||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<TITLE class=\\\\\\\"clsTitle1\\\\\\\">TopAccess</title>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<frameset name=\\\\\\\"TATopLevelFrameSet\\\\\\\" rows=\\\\\\\"*\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<frame name=\\\\\\\"TopLevelFrame\\\\\\\" src='FrameIndex.html?v= \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"if(location.href.indexOf(\\\\\\\"?main=EFILING\\\\\\\") == -1){\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"TOSHIBA e-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-CTR\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CradlePoint CTR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-RV345\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco RV345\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"RV345\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OURPHP\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"OURPHP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by ourphp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<div class=\\\\\\\"nav_ourphp\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/function/plugs/layer/layer.min.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/templates/default/images/erweima.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Easy to enter the sky - seek CMS\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"title='cms\\u7cfb\\u7edf\\uff0c\\u9996\\u9009\\u8749\\u77e5cms\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"chanzhi.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Set-Cookie: frontsid\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Set-Cookie: frontsid\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"poweredBy'><a href='http://www.chanzhi.org\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NJZT-South University Star Information Publishing System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var pubnewsarray\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<title>\\u5357\\u5927\\u4e4b\\u661f\\u4fe1\\u606f\\u53d1\\u5e03\\u7cfb\\u7edf \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"zywall-usg-100\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"zywall-usg-100\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZyWALL USG 100\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ZyWALL USG 100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TELLABS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TELLABS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Uebimiau-Webmail\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Uebimiau\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<script type=\\\\\\\"text/javascript\\\\\\\" src=\\\\\\\"themes/default/js/webmail.js\\\\\\\"></script>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TwonkyServer\",\n  \"logic\": \"a||b||c||d|| (e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TwonkyMedia server media browser\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TwonkyServer Media Browser\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"TwonkyMedia UPnP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"TwonkyMedia UPnP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<meta name=\\\\\\\"description\\\\\\\" content=\\\\\\\"TwonkyMedia Digital Home\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"TMAILER_SUITE-TMAILER Mail System\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Tmailer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Tmailer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"/tmailer/img/logo/favicon.ico\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHPDisk\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by PHPDisk\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"PHPDisk\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Storage System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<FRAME name=\\\\\\\"reloadfrm\\\\\\\" src=\\\\\\\"refresh.php\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Falcon Safety - Jinshan Tactics Enterprise Edition\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u91d1\\u5c71\\u6bd2\\u9738\\u4f01\\u4e1a\\u7248\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"title\\\\\\\">\\u5173\\u4e8e\\u5168\\u7f51\\u90e8\\u7f72\\u91d1\\u5c71\\u6bd2\\u9738\\u4f01\\u4e1a\\u7248\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kedacom-SXMS trial system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"titlename = \\\\\\\"SXMS\\u5ba1\\u8baf\\u4e1a\\u52a1\\u7ba1\\u7406\\u7cfb\\u7edf\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"classid=\\\\\\\"clsid:01DFB4B4-0E07-4e3f-8B7A-98FD6BFF153F\\\\\\\" codebase=\\\\\\\"files/ofctnewclsid.cab\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Vacron-NVR\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DVR_NETRA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"name=\\\\\\\"vacron nvr login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Vacron NVR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<strong>VACRON</strong>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyWALL-USG-300\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZyWALL USG 300\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZyWALL USG 300\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyWALL-USG-200\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZyWALL USG 200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZyWALL USG 200\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-ZyWALL-310\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZyWALL 310\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZyWALL 310\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-ZyWALL-USG-20W\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZyWALL USG 20W\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZyWALL USG 20W\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-ZyWALL-USG-1000\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZyWALL USG 1000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZyWALL USG 1000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"USG 1000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-ZYWALL-1100\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZYWALL 1100\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZyWALL 1100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyWALL-USG100-PLUS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZyWALL USG100-PLUS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"USG100-PLUS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Soffice\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Soffice\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-SecBlade-Firewall\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C Firewall SecBlade\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"H3C SecBlade FW\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UBB-Forum\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<meta name=\\\\\\\"generator\\\\\\\" content=\\\\\\\"UBB.threads\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a href=\\\\\\\"http://www.groupee.com/landing/goto.php?a=ubb.classic\\\\\\\">Powered by UBB.classic&trade\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-SR8803-X-S\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C SR8803-X-S\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Terminal feature acquisition control system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7ec8\\u7aef\\u7279\\u5f81\\u91c7\\u96c6\\u7ba1\\u63a7\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/Home/PkiBindUser?subjectname=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-Series-Router-MSR900\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C Series Router MSR900\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-Series-Router-MSR26-00\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C Series Router MSR26-00\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-Switch-S5120-28P-HPWR-SI\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C Switch S5120-28P-HPWR-SI\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hassan Software - Company Products\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6c49\\u7801\\u8f6f\\u4ef6\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"alt=\\\\\\\"\\u6c49\\u7801\\u8f6f\\u4ef6LOGO\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"\\u6c49\\u7801\\u8f6f\\u4ef6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"winwebmail\",\n  \"logic\": \"a||b||c|| (d&&e) || (f&&g) || (h&&i) ||j\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"winwebmail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"WinWebMail Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"images/owin.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"smtp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"WinWebMail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"<TD class=NewsDiv-mid2>\\u90ae\\u5c40\\u7ba1\\u7406\\u5458\\u53ef\\u81ea\\u884c\\u5206\\u914d\\u90ae\\u7bb1\\uff01</TD>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"onclick=\\\\\\\"this.style.behavior='url(#default#homepage)';this.setHomePage\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"type=\\\\\\\"hidden\\\\\\\" name=\\\\\\\"SecEx\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"href=\\\\\\\"images\\\\\\\\hwem.css\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"on WinWebMail\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Shop_Builder-shopbuilder\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"ShopBuilder\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by ShopBuilder\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ShopBuilder\\u7248\\u6743\\u6240\\u6709\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-U2000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"o=Huawei Technologies, ou=U2000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-iMC\",\n  \"logic\": \"(a&&b) ||c||d||e||f||g||h||i\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"iMC\\u6765\\u5bbe\\u63a5\\u5165\\u81ea\\u52a9\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"login_logo_h3c.png.jsf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"com_h3c_imc_usr_usermgr_alluser_overlaydiv\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"action=\\\\\\\"/imc/login.jsf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"src=\\\\\\\"/imc/javax.faces.resource/images/login_logo_h3c.png.jsf?ln=primefaces-imc-new-webui\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"<span class=\\\\\\\"cmn_mn_normalFont\\\\\\\">H3C \\u667a\\u80fd\\u7ba1\\u7406\\u4e2d\\u5fc3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"src=\\\\\\\"/imc/faces/extensionResource/com.h3c.imc.component.util.ExtensionResourceLoader/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"H3C &#26234;&#33021;&#31649;&#29702;&#20013;&#24515;</span>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"href=\\\\\\\"/selfservice/javax.faces.resource/theme.css.xhtml?ln=primefaces-imc-classic-blue\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DHI-XVR5216AN\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DHI-XVR5216AN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"With -isum420g3 disk array\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"iSUM420G3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Head data-external security data exchange system\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5916\\u7f51\\u5b89\\u5168\\u6570\\u636e\\u4ea4\\u6362\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/unimas/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"o=unimas\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"cn=test/emailaddress=gjw@unimassystem.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"paloalto-VMware\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"l=Palo Alto, ou=VMware\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DHI-XVR7104H\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DHI-XVR7104H\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DH-NVR4108HS-8P-HDS2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DH-NVR4108HS-8P-HDS2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-anyoffice\",\n  \"logic\": \"(a&&b&&c) || (d||e) ||f||g||h\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"mdmserver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"onclick=\\\\\\\"changeLanguage\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"cancelChangePWBtn\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"o=HUAWEI, ou=AnyOffice\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"cn=HUAWEI AnyOffice ROOT CA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"<form id=\\\\\\\"jvForm\\\\\\\" action=\\\\\\\"admin/business/login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"src=\\\\\\\"assets/conn-service/admin/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"AnyOffice Login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BROADCOM-SG-S500\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Blue Coat SG-S500\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"De Haier - Medical Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5fb7\\u6d77\\u5c14\\u533b\\u7597\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Netch-CMS\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by <a href='http://www.wqcms.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"inc/wqcms.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"style/wangqi/style.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IATIVE- Yunview platform\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Acenter\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/js/roomHeight.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"meetingShow!show.action\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Jinshan-Kinggate\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/src/system/login.php\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Landray-Eis Wisdom Collaborative Platform\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/scripts/jquery.landray.common.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"v11_QRcodeBar clr\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tiandune - Intrusion Detection System TOPSENTRY\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5929\\u878d\\u4fe1\\u5165\\u4fb5\\u68c0\\u6d4b\\u7cfb\\u7edfTopSentry\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5929\\u878d\\u4fe1\\u5165\\u4fb5\\u68c0\\u6d4b\\u7cfb\\u7edfTopSentry\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-AC66U\",\n  \"logic\": \"a||b||c|| (d&&e) || ((f||g) &&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"prod_madelName\\\\\\\" style=\\\\\\\"margin-left:78px;\\\\\\\">RT-AC66U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"RT-AC66U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-AC66U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Asus RT-AC66U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"RT-AC66U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Asus RT-AC66U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"08CMS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"08CMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"typeof(_08cms)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DocCMS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Power by DocCms\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cathexis-WNVR2000-PC\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WNVR2000-PC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"WNVR-2000-PC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D-LinkDSL-2877AL\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DSL-2877AL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DSL-2877AL\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Devaldi-FlexPaper\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login to the FlexPaper Console\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"http://flexpaper.devaldi.com/plugins.htm\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VictorySoft-source data acquisition system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"webstyles/webstyle1/style1/css.css\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"mylittleforum\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"powered by my little forum\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"index.php?mode=js_defaults\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"mlf2_general_forum_usersettings\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"mlf2_general_forum_usersettings\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Pirate Cloud Business - System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"haidao.web.general.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Schneider-WEB\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Schneider-WEB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Schneider-WEB\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mobotix-Camera\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"MOBOTIX AG\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MOBOTIX Camera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"MOBOTIX Camera\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Integrated office system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var right = document.getElementById(\\\\\\\"irmMain\\\\\\\")\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Reservoir development analysis tool software\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=ycfxsetup.rar\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Asset dynamics management platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/SBDTGLXT/PANWEBAPP/login.html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huawei-safety equipment\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"sweb-lib/resource/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"sweb-lib/plat/login/Login_New.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FireEye\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"fireeye\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"mobsc\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"FireEye\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Basic realm=\\\\\\\"FireEye\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Schneider-PowerLogic-ION\",\n  \"logic\": \"(a&&b&&c) ||d||e||f||g||h||i||j||k||l||m||n||o\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerLogic\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ION\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Allegro-Software-RomPager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"7650 ION\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"7550 ION\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"8650 ION\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"8600 ION\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"7300 ION\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"6200 ION\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"7650 ION\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"7550 ION\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"8650 ION\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"8600 ION\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"7300 ION\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"6200 ION\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MOXA-serial server\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ssh\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"moxa_1.0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: MoxaHttp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: moxahttp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-webcam\",\n  \"logic\": \"(a|| (b&&c) ||d||e) &&f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/viewer/live/en/live.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: VB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: boa\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"content=\\\\\\\"VB-C10\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Network Camera VB-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"NetDvrV3\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"objLvrForNoIE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NetDvrV3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"document.write(\\\\\\\"<a href='../NetDvrV3.exe'>web client plugin</a>.\\\\\\\")\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-R6220\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETGEAR R6220\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NETGEAR R6220\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NETGEAR Router R6220 \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-R6400\",\n  \"logic\": \"a|| (b&&c) || (d&&e) ||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETGEAR R6400\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Netgear R6400\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"content=\\\\\\\"R6400\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Organization: NETGEAR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Netgear R6400\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"NETGEAR R6400\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-R8000\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETGEAR R8000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NETGEAR R8000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Netgear R8000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Netgear-R8000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Technical Supervision and Management Information System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/EnterpriseServer/BZHGL/ADindex.htm\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Information acquisition system\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4fe1\\u606f\\u91c7\\u96c6\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"LDAR\\u6570\\u636e\\u91c7\\u96c6\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"You need to enable JavaScript to run this app.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"M & W-centralized payment system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6284\\u8868\\u5668\\u9a71\\u52a8TP1100M\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Puhua Technology -PowerPMS\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AppHub.server.registerToHub(qrcodeid)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/App_Themes/Default/assets/css/style.min.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/Scripts/boot.js\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Goonie-network public opinion monitoring system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"alert(\\\\\\\"\\u83dc\\u5355\\u5c42\\u6570\\u91cf\\u548c\\u5185\\u5bb9\\u5c42\\u6570\\u91cf\\u4e0d\\u4e00\\u6837!\\\\\\\")\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u7f51\\u7edc\\u8206\\u60c5\\u76d1\\u63a7\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Vehicle management system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"url(/_layouts/images/ywgk/yanzhengbg.gif)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"background-image: url('IMAGE/bg-snippet1.png')\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Logo - Company Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"btn btn-primary form-btn form-btn-login pull-right\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Command dispatch management platform\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"action=\\\\\\\"/app/structure/departments.php\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"id=\\\\\\\"formError\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u6307\\u6325\\u8c03\\u5ea6\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-TS3310\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HTTP-equiv=\\\\\\\"REFRESH\\\\\\\" content=\\\\\\\"0; url=/main_login.htm\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hitachi- Virtual Storage Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/cgiSmrySet/SmrySet.cgi/CLK\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Qianxin-Secfox\",\n  \"logic\": \"(a&&b&&c) ||d||e||f|| (g&&h) ||i\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=mTokenPlugin width=0 height=0 style=\\\\\\\"position: absolute;LEFT: 0px; TOP: 0px\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"type=application/x-xtx-axhost\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Organization: 360\\u4f01\\u4e1a\\u5b89\\u5168\\u96c6\\u56e2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u7f51\\u795eSecFox\\u5b89\\u5168\\u5ba1\\u8ba1\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"SecFox-LAS-BH\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"SecFox\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"document.getElementById('pic').src\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"class=\\\\\\\"secfox-login-browser-continue\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"<p>\\u6b22\\u8fce\\u60a8\\u4f7f\\u7528\\u7f51\\u795eSecfox\\u65e5\\u5fd7\\u6536\\u96c6\\u4e0e\\u5206\\u6790\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kedacom-SVR2816\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SVR2816\\u5ba2\\u6237\\u7aef\\u4e0b\\u8f7d\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a href=\\\\\\\"download/SVR2816 Quick Start Guide.pdf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Common-Serial-Server\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Serial Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Serial Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"telnet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Welcome to serial server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Net-Keybord\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Net Keybord-Webs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: Net Keybord-Webs\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"China electricity - camera\",\n  \"logic\": \"((a|| (b&&c)) &&d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: FIAMM ONVIF\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FIAMM. All Rights Reserved.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"vb.htm?authority3=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: FIAMM ONVIF\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kedacom-disk array\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<meta name=\\\\\\\"kedacom\\\\\\\" content=\\\\\\\"true\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u78c1\\u76d8\\u9635\\u5217\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Green Night Network-HSSE Information Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Hsse \\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Office platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \" href=\\\\\\\"XBSJ/css/login.css\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mobile office and work supervision system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"icon-container wrapper\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"icon iconXiNan\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TMG165\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TMG165\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TMG165.SINOPEC.LOCAL\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hibernating-Rhinos-RavenDB\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Raven.Studio\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"alt=\\\\\\\"RavenDB\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Intelligent paperless management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u667a\\u80fd\\u65e0\\u7eb8\\u5316\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Special information -527 light conference\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"527meeting\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u8f7b\\u4f1a\\u8bae\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DSL-2650U\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DSL-2650U\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mobile office OA\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"pad-0 pt-2 pb-2 text-center tc-gray mt-1\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"qccodewidth1 = document.getElementById(\\\\\\\"divQrcode\\\\\\\")\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Newgrand-Project Management System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"UIA\\u767b\\u5f55\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"../images/right.jpg\\\\\\\" alt=\\\\\\\"\\u7248\\u6743\\u4fe1\\u606f\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dell-NetWorker-Management-Console\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Welcome to NetWorker Management Console\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"EMC Corporation\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zhongdi Digital-Mapgis\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MapGIS Server Manager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Windon - Internet Behavior Management System\",\n  \"logic\": \"(a&&b&&c) ||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"updateLoginPswd.php\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PassroedEle\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u4e0b\\u4e00\\u4ee3\\u9632\\u706b\\u5899\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u60e0\\u5c14\\u987f\\u4e0a\\u7f51\\u884c\\u4e3a\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"classid=\\\\\\\"clsid:81BE1F16-9D88-48CC-8D3E-CB8E37B71FEE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Integrated transaction management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location='/app/plus3c.do/login'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"XYCMS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by XYCMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"advfile/ad12.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Synology-photo-station\",\n  \"logic\": \"a||b|| (c&&d) || (e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"photo_new/syno_photo_main.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Photo Station 6\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"service_not_available\\\\\\\"\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Photo Station 6\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"content=\\\\\\\"Photo Station\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"content=\\\\\\\"album\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mai Did-commercial Wi-Fi equipment\",\n  \"logic\": \"(a&&b&&c&&d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"http-equiv=\\\\\\\"refresh\\\\\\\" content=\\\\\\\"0; url=/cgi-bin/luci\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Tx-Server: MiXr\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u5c0f\\u7c73\\u8def\\u7531\\u5668\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Micgi\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"\\u8fc8\\u5916\\u8fea\\u5546\\u4e1aWi-Fi\\u8bbe\\u5907\\u7ba1\\u7406\\u540e\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"10,000 network -CMS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"css/css_whir.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ExtMail\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6b22\\u8fce\\u4f7f\\u7528ExtMail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"setCookie('extmail_username\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Salien- Equipment Integrity Management System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"rmsie = /(msie\\\\\\\\s|trident.*rv:)([\\\\\\\\w.]+)/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"VerCheck\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HanWei-integrated business platform\",\n  \"logic\": \"(a&&b) || (c&&d) ||e|| (f) ||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7cfb\\u7edf\\u9700\\u8981.net\\u6846\\u67b62.0\\uff0c\\u8bf7\\u70b9\\u51fb\\u5b89\\u88c5!\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"onclick=\\\\\\\"window.navigate(this.fName);enableSetup();\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u4e1c\\u8425\\u6c49\\u5a01\\u77f3\\u6cb9\\u6280\\u672f\\u5f00\\u53d1\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"content=\\\\\\\"Microsoft Visual Studio .NET 7.1\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"id=\\\\\\\"loginpwdcontiner\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"window.location.href=\\\\\\\"/\\u6e90\\u5934\\u6570\\u636e\\u8d44\\u6e90\\u7ba1\\u7406/default/default.aspx\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"directlink = \\\\\\\"ProgramStartup.application\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Catalytic device EDOS system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"javascripts/ligerUI/skins/Aqua/css/ligerui-all.css\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u50ac\\u5316\\u88c5\\u7f6eEDOS\\u7cfb\\u7edf\\u2014\\u80fd\\u91cf\\u8bca\\u65ad\\u4e0e\\u4f18\\u5316\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Production real-time application system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"./At-RASC.msi\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<p align=center>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Han Yuan - Wanfa Fax Server\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"background=\\\\\\\"images/centerfax0.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"background-image:url(images/bgfax0.jpg);\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-VMG3625-T20A\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VMG3625-T20A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-VMG4825-B10A\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VMG4825-B10A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-VMG1312-B10D\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VMG1312-B10D\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Zyxel VMG1312-B10D\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-DSL-AC51\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DSL-AC51\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">DSL-AC51\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"DSL-AC51\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u4e07\\u6237\\u7f51\\u7edc-ezOFFICE\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ezOFFICE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"EZOFFICEUSERNAME\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u4e07\\u6237OA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"whirRootPath\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/defaultroot/js/cookie.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"LocLan\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-VMG8924-B10A\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var modelname= '(VMG8924-B10A)';\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Welcome toVMG8924-B10A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK- Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"directlink = \\\\\\\"EAFC.application\\\\\\\";\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"upvel-UR-309BN\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"UR-309BN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Heng Yitong - Electronic Attendance System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<input class=\\\\\\\"an1\\\\\\\" name=\\\\\\\"BtnRst\\\\\\\" id=\\\\\\\"BtnRst\\\\\\\" type=\\\\\\\"reset\\\\\\\" value=\\\\\\\" \\\\\\\" />\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Avaya-Tenor-FTP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Tenor Multipath Switch FTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"poly-VSX-7000A\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VSX 7000A\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"VSX 7000A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Reserve management system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"name=\\\\\\\"EOSOperator/userID\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/fbrole/main/js/png.js\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruvar-OA\",\n  \"logic\": \"a|| (b&&c&& (d||e))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<iframe id=\\\\\\\"ifrm\\\\\\\" width=\\\\\\\"100%\\\\\\\" height=\\\\\\\"100%\\\\\\\" frameborder=\\\\\\\"0\\\\\\\" scrolling=\\\\\\\"no\\\\\\\" src=\\\\\\\"/include/login.aspx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u534f\\u540c\\u529e\\u516c\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/include/login.aspx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<frame\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<iframe \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LCD screen display system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/showtv/page1.aspx\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/M/Scripts/msg/msgbox.js\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UseResponse\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<form id=\\\\\\\"system-form-registration\\\\\\\" enctype=\\\\\\\"application/x-www-form-urlencoded\\\\\\\" class=\\\\\\\"system-form-registration\\\\\\\" accept-charset=\\\\\\\"utf-8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"title=\\\\\\\"Customer Feedback Software, Community Support System\\\\\\\" target=\\\\\\\"_blank\\\\\\\" href=\\\\\\\"http://www.useresponse.com\\\\\\\" class=\\\\\\\"popup-logo\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DSL-G225\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DSL-G225\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DSL-G225\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Nexxt_Solutions-Acrux-600\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Dual-Band 2T2R 11N Router Acrux 600\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Centralized integrated system\",\n  \"logic\": \"(a&&b) || (c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"bodyEl.appendChild(document.getElementById(\\\\\\\"Button2\\\\\\\"));\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/Scripts/miniui/miniui.js\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"window.location=\\\\\\\"AAA/IPWeb/Login/index\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"U-Mail\",\n  \"logic\": \"(a&&b) ||c||d||e||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<BODY link=\\\\\\\"White\\\\\\\" vlink=\\\\\\\"White\\\\\\\" alink=\\\\\\\"White\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<meta http-equiv=\\\\\\\"refresh\\\\\\\" content=\\\\\\\"0;url=./webmail/\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Power by <a href=\\\\\\\"http://www.comingchina.com\\\\\\\">U-Mail\\u90ae\\u4ef6\\u670d\\u52a1\\u5668</a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"U-Mail\\u90ae\\u4ef6\\u670d\\u52a1\\u5668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"static/images/login/login_37.jpg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Power by U-Mail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"U-Mail WebAdmin \\u8981\\u6c42\\u542f\\u7528 JavaScript\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CommonWS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"CommonWS.asmx?op=CheckPsspPassword\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alstom - Online Status Monitoring Information Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"technology_communion.asp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Shen Duyun Service-SGC8000-Large Rotating Machinery Online Status Monitoring and Analysis System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var granttype=\\\\\\\"authorization_code\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yushen -ieMOS_CW\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var id = document.getElementById(\\\\\\\"TxtYHMM\\\\\\\").value\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SMS integrated service platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"onload=\\\\\\\"document.loginform.j_username.focus();\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"action=\\\\\\\"/system_security_check\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Creatsoft-Special Equipment Safety Management Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"javascript:update_news('board/noticelist.jsp')\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CERIO-DT-100G-N\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DT-100G-N</span>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CERIO.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZKWELL-Corrosion Supervision and Corrosion Protection Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"background-image:url(images/deviceBG.jpg)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Quantum companies products\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"loginBodyBackground\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"loginPatent\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SourceCode-K2\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"document.getElementById(\\\\\\\"RedirectForm\\\\\\\").action = \\\\\\\"../MxWorkspace/Login.aspx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"document.getElementById(\\\\\\\"RedirectForm\\\\\\\").action = \\\\\\\"../Workspace/default.aspx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Warehousing Information Management System\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WebForm_AutoFocus\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u4ed3\\u50a8\\u4fe1\\u606f\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<div class=\\\\\\\"ToLoginUrl\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"id=\\\\\\\"lblErrMsg\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-VPN\",\n  \"logic\": \"((a||b||c) &&d&&e&&f) ||g||h||i||j|| (k&&l) ||m||n\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"webvpn\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Centrala_vpnRV082\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"value=\\\\\\\" + svpnBtnLogin + \\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"RV082\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Cisco Systems, Inc. VPN 3000 Concentrator\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"4-Port SSL/IPSec VPN \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"CommonName: SFSHQ-RTR-01.SPI.STUDIFRANCHINI.COM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"''+ SITETITLE + \\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"cisco\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"Basic realm=\\\\\\\"vpn8\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"Basic realm=\\\\\\\"vpn8\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TYPSoft-FTP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TYPSoft FTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MES-System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"url(Content/themes/default/images/mes/login.JPG)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"window.location=\\\\\\\"MES3X/WebUI/IPWeb\\\\\\\";\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HEADING-WEB server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"location.href='/Otter'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Petrochemicals - Coal gasification equipment Process Management and Remote Service Platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"ValidateCode.aspx\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"f-loading-mask ui-widget ui-widget-content\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SsoFromT6\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"action=\\\\\\\"SsoFromGTP6.aspx?\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APACHE-Axis2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"axis2-web/css/axis-style.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GenieATM\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GenieATM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Copyright\\u00a9 Genie Networks Ltd.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"defect 3531\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Engineering construction management information system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"Content/pmgcjs/img/button-tongyidenglu.png\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Riverbed-AppResponse\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"UiWebInsights/WebInsights.html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Heading-e-commerce platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location.replace('/bin/hdnet.dll/login')\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Command center system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/BigScreen/BigScreenIndex/BigScreenIndexView\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VANDYKE-VShell-File-Server\",\n  \"logic\": \"a|| (b&& (c||d||e)) ||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VShell File Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"VShell\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ssh\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"VanDyke Software VShell\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: VShell-HTTPS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: VShell-HTTPS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GPS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"btn_off map_type_clazz\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Pillar-Axiom-Software\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Axiom Storage Services Manager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-WNDR3400v2\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETGEAR WNDR3400v2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NETGEAR WNDR3400v2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NETGEAR Router WNDR3400v2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NSG100\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NSG100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NSG200\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NSG200\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Anbo application gateway\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5b89\\u535a\\u901a\\u5e94\\u7528\\u7f51\\u5173\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-R6350\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR R6350\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR R6350\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-R6700v3\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR R6700v3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"R6700v3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-RAX80\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR RAX80\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR RAX80\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Handwriting information Digital signature system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var certtype = XTXAPP.SOF_GetCertInfo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u624b\\u5199\\u4fe1\\u606f\\u6570\\u5b57\\u7b7e\\u540d\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Changsha Tutal - Purchasing Strategy Management System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u957f\\u6c99\\u56fe\\u7075\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/Login/main_body_bg.jpg\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Samsung-iPllis\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"document.location.replace('./home/monitoring.cgi');\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Lansecs internal control fort\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"LanSecS\\u5185\\u63a7\\u5821\\u5792\\u4e3b\\u673a\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Velazquez\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Velazquez\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: Velazquez\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Jingwei Technology - Safety Intelligent Management Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Nanjing RickyInfo Technology\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Changsha Turning - Code Declaration System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7f16\\u7801\\u7533\\u62a5\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u957f\\u6c99\\u56fe\\u7075\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SCO-OpenServer\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SCO Corporate Web Site\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"gif/rlogo1.gif\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JET_BRAINS-TeamCity\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Log in to TeamCity\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"TeamCity (Log in to TeamCity\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Teamcity-Node-Id: MAIN_SERVER\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Teamcity-Node-Id: MAIN_SERVER\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"groupcall-Xporter\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Groupcall Xporter\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Exchange-2016-POP3-server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Microsoft Exchange 2016 POP3 server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TASS-Digital Signature Server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Resources/js/UtilFunction.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Siemens-HG-1500\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HG 1500\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dptech-UMC\",\n  \"logic\": \"(((a&&b) ||c||d) &&e) ||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"JSESSIONID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"UMC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Dptech UMC Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"onsubmit=\\\\\\\"return sys_submit(this)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: Dptech UMC Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-DGN2000\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETGEAR DGN2000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NETGEAR DGN2000 \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Prica Technology - Company Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"onclick=\\\\\\\"return SetTheme('60year')\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Petrochemicals - Archive Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"js/Scripts/Common/easyui/jquery.easyui.min.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Lnfogo-wireless access system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"client_check/js/global.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kiki Technology-D.PerspClre\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"D.perspclre\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Changxin Taikang - Witness Law Enforcement Recorder\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u89c1\\u8bc1\\u8005\\u91c7\\u96c6\\u5de5\\u4f5c\\u7ad9\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/User/GetDefaultPage\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/Record/Index\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"href=\\\\\\\"/Html/Download.html\\\\\\\">\\u5de5\\u5177\\u4e0b\\u8f7d</a></li>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dayrui-CMS\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"dr_ci_session\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"dayrui/statics\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"dr_ci_session\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Visec-video surveillance\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: VISEC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: VISEC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Generate tank table system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"value=\\\\\\\"\\u751f\\u6210\\u7f50\\u5bb9\\u8868\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sinopec fuel card inquiry system\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location='/oil/index'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"name=\\\\\\\"operaterNo\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"name=\\\\\\\"siteNo\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RaiseCom-wireless controller\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var oemproductname = \\\\\\\"mvc_MSG2300\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"vTigerCRM\",\n  \"logic\": \"a||b||c||d||e||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/images/vtigercrm_icon.ico\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"poweredBy\\\\\\\">Powered by vtiger CRM - \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"vtiger CRM \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"src=\\\\\\\"themes/images/vtigerName.gif\\\\\\\" alt=\\\\\\\"vtiger CRM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"vtiger CRM </span>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"<img src='http://stats.vtiger.com/stats.php?uid=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"<a href='http://www.vtiger.com' target='_blank'>vtiger.com</a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Queen Star - Tianqing Web Application Safety Gateway\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"v2/global/vendor/modernizr/modernizr.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5929\\u6e05Web\\u5e94\\u7528\\u5b89\\u5168\\u7f51\\u5173\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VSP-Stats-Processor\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<A href=\\\\\\\"http://www.clanavl.com/vsp/\\\\\\\">vsp</A> v\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<BODY>error: cannot establish database connection or database database_name does not exist\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"&nbsp;theme:bismarck by <A href=\\\\\\\"#\\\\\\\" title=\\\\\\\"myrddin8 <AT> gmail <DOT> com\\\\\\\">myrddin</A>&nbsp;\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Weatimages\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"http://nazarkin.name/projects/weatimages\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<meta name=\\\\\\\"Generator\\\\\\\" content=\\\\\\\"Weatimages\\\\\\\"/>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<div align=\\\\\\\"center\\\\\\\" class=\\\\\\\"weatimages_toppest_navig\\\\\\\" style=\\\\\\\"text-decoration:underline;\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Watson-Router\",\n  \"logic\": \"(a&&b) || (c&&d) || ((e) &&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Watson Management Console\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" case 32: if (is_button_in_focus)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Schmid-Telecom AG\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Watson SHDSL Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<!--- Page(page_login)=[Login] ---><HTML>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Watson\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u6cdb\\u5fae-\\u4e91\\u6865e-Bridge\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"\\u6cdb\\u5fae\\u4e91\\u6865e-Bridge\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"webkit\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u6cdb\\u5fae\\u4e91\\u6865e-Bridge\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Wavetop-days disaster software\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"application/views/img/logo_wavetop.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sinosoft-e-government\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"App_Themes/1/Style.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"window.location = \\\\\\\"homepages/index.aspx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"homepages/content_page.aspx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SIMIT-Framework\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SIMIT framework\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SIMIT framework\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VMEDIA-multimedia release platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"function toggle(targetid)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"video_00\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Documentum\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Documentum 6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SynkronVia\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Synkron Via CMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Synkron Via CMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Azure-ARR\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ARRAffinity\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ARRAffinity\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"legendsec-Secips\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"usbkey_plugin.cab\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u65e0\\u670d\\u52a1\\u6743\\u9650\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u7f51\\u795e\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sequoia Tree Information - System Management Center\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"Main_loginBar\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"Main_supporterBar\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Web-Control-Panel\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Web Control Panel Express v\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<td><img src=\\\\\\\"/images/wcpe.gif\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"XenApp\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location=\\\\\\\"/Citrix/XenApp\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hisense- Business Management Platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"up.JPG\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"left.JPG\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"adminMongo\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"adminMongo\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GoTTY\",\n  \"logic\": \"a||b||c|| (d&&e&&f) ||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: GoTTY\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"GoTTY\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"GoTTY\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: GoTTY\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"X-Generator: Drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"realm=\\\\\\\"GoTTY\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Jupyter-Notebook\",\n  \"logic\": \"(a||b||c) &&d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Jupyter Notebook\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div id=\\\\\\\"ipython-main-app\\\\\\\" class=\\\\\\\"container\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<div id=\\\\\\\"ipython_notebook\\\\\\\" class=\\\\\\\"nav navbar-brand\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"SOASTA DSWB\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"DIAOWEN-questionnaire form system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u8c03\\u95ee-\\u4e13\\u4e1a\\u4e14\\u5f00\\u6e90\\u7684\\u95ee\\u5377\\u8868\\u5355\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://www.dwsurvey.net\\\\\\\" style=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ShopsN\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"ShopsN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"http://www.shopsn.net\\\\\\\">\\u5546\\u57ce\\u7cfb\\u7edf</a>&nbsp;\\u63d0\\u4f9b\\u6280\\u672f\\u652f\\u6301\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<span>ShopsN\\u5168\\u7f51\\u5f00\\u6e90<a style=\\\\\\\"padding: 0px\\\\\\\" href=\\\\\\\"http://www.shopsn.net\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zipkin\",\n  \"logic\": \"a|| (b&&c) || (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<base href=\\\\\\\"/zipkin/\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"location: /zipkin/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Armeria\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Location: ./zipkin/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Content-Length: 0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Shang Tao Software - WSTMART\",\n  \"logic\": \"(a&&b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered By WSTMart\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"href=\\\\\\\"/wstmart/home/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DVG-N5402SP\",\n  \"logic\": \"a|| ((b||c) &&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DVG-N5402SP/C1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Welcome to DVG-N5402SP-R\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Welcome to DVG-N5402SP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"lang_firmwareLogin\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"OUR_ENERGY-Collectric-CMU\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Inloggning Collectric CMU\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-Meraki-MR18\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Meraki MR18\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DSR-500\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div class=\\\\\\\"floatL txt01\\\\\\\">Product Page: DSR-500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DSR-500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Unified Services Router - DSR-500 </div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WatchGuard-XTM545\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"XTM545\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-GS748TR\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"gs748trImage spacer50Percent topAlign rightHAlign\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"GS748TR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NetGear GS748TR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FORTINET-enSilo\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<img src=\\\\\\\"images/enSilo_Logo.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Digital_guardian companies\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/brands/guardian/favicon.ico\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kenna - Vulnerability Management and Priority Platform\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/favicon.ico?kenna\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"kenna sessions new\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DPtech-UAG3000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DPTECH UAG3000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-HS8545M\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var productname = 'HS8545M'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"window.location=\\\\\\\"https://\\\\\\\" + SSLHostIp + \\\\\\\":\\\\\\\" + SSLPort\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"var sslhostip ='170\\\\x2e79\\\\x2e114\\\\x2e90'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-S5328C-SI\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"S5328C-SI\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-HG8240\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var productname = 'HG8240'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var productname='HG8240'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-HG8120C\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var productname = 'HG8120C'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Spring-Boot-Admin\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"spring boot admin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Spring boot admin\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ionic\",\n  \"logic\": \"(a||b) || (c||d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ionic.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ionic.min.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ionic.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"ionic.min.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR1100\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: IBR1100\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IBR1100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Web-Wiz-Rich-Text-Editor\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"http://www.richtexteditor.org\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"testlink\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"testlink_library.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Martin Havlat\\\\\\\" />\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"TestLink project <a href=\\\\\\\"http://testlink.sourceforge.net/docs/testLink.php\\\\\\\">Home</a><br />\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ultra_Electronics\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/preauth/login.cgi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/preauth/style.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bacula_web-frame\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Webacula\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Bacula Web\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Bacula-Web\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"bacula-web\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WebGuard\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WebGuard Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"onload=\\\\\\\"GetInfo()\\\\\\\" onresize=\\\\\\\"fit_center()\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"rtsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Novus RTSP Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Jenkins\",\n  \"logic\": \"(a&&b&&c) ||d||e|| (f&&g&&h&&i) || (j&&k) ||l|| (m&&n)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Jenkins\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-Generator: Drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"X-Hudson\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"X-Required-Permission: hudson.model.Hudson.Read\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"X-Jenkins\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"28ze\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"X-Generator: Drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"X-Hudson\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"X-Required-Permission: hudson.model.Hudson.Read\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"Jenkins-Agent-Protocols\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"Content-Type: text/plain\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Adobe-ColdFusion\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/cfajax/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CFTOKEN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"CFTOKEN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"ColdFusion.Ajax\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<cfscript>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Adobe-GoLive\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"generator\\\\\\\" content=\\\\\\\"Adobe GoLive\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Adobe-RoboHelp\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"generator\\\\\\\" content=\\\\\\\"Adobe RoboHelp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHP-CGI\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PHP-CGI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PHP-CGI\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NSFOCUS-Enterprise Security Center\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7eff\\u76df\\u79d1\\u6280\\u4f01\\u4e1a\\u5b89\\u5168\\u4e2d\\u5fc3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/login_logo_espc_zh_CN.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u7eff\\u76df\\u4f01\\u4e1a\\u5b89\\u5168\\u4e2d\\u5fc3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/login_logo_espc_zh_CN.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Guardian - website security system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u62a4\\u536b\\u795e.\\u7f51\\u7ad9\\u5b89\\u5168\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tencent-TencentCOS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: TencentCOS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: TencentCOS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BSS-NAS-SOUNDWEB-LONDON series\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Soundweb London\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Soundweb London\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"a2b-Webserver\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: A2B Webserver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: A2B Webserver\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"nostromo\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: nostromo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: nostromo \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"URLOS-LUM server management\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"LUM_SESSION\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"LUM_SESSION\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"COMEXIO-intelligent system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: comexio\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: comexio\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u7f8e\\u79d1\\u661f-MW313R\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: MW313R\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: MW313R\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"MW313R\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SHARP-XG-C435X-L\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"XG-C435X-L\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"XG-C435X-L\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-HG8245H\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var productname = 'HG8245H\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var productname = 'HG8245H';\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dopra-Linux\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DOPRA\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TEW-812DRU\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TEW-812DRU\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TEW-812DRU\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"TEW-812DRU\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RAIDEN-mail server\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/webimages/raidenmaild.jpg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"RaidenMAILD POP3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"RaidenMAILD ESMTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"RaidenMAILD IMAP4rev1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"RaidenMAILD SMTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DFE-SCADA general system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"scada\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"536870912\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Chart.js\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"chart.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"chart.min.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FOSCAM-NVR\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"style=\\\\\\\"background:url(images/con-logo-bg.png);\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NVR Client\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dr.Web-anti-virus products\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: DrWebServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: DrWebServer/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"alt=\\\\\\\"Dr.Web \\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"drweb_personal_office=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/avdesk/includes/system/templates/images/logo_en.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie-RG-S8614\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"S8614\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APC-TM501A\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TM501A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AmbitWireless-DDW2600\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MODEL: DDW2600\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-3800C\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco IOS Software, 3800C\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXR10-3952A\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZXR10 3952A\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZXR10_3952A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXR10-5952\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZXR10 5952\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HANBANG-streaming media server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: HB-DVR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cohu-streaming media server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Cohu\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-Company Products\",\n  \"logic\": \"((a||b||c) &&d) || ((e||f) &&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"http-equiv=\\\\\\\"refresh\\\\\\\" content=\\\\\\\"0; url=/webpages/login.html\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TP-LINK\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: TP-LINK\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"TP-LINK\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: TP-LINK\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Allworx-Corp-VPN\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Vendor: Allworx Server VPN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APC-Management\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"This object on the APC Management Web Server is protected\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-Router\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Wimax CPE Configuration\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HttpWarnFlg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Huawei Technologies\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Creating Yingfeng - School Office OA System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"background=\\\\\\\"OA/images/index/OAlogin.jpg\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Call-OA system\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"onclick=\\\\\\\"loginsubmit()\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u4fe1\\u547c\\u5f00\\u53d1\\u56e2\\u961f\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u6280\\u672f\\u652f\\u6301\\uff1a<a href=\\\\\\\"http://www.rockoa.com/\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TongTool-Order Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var c_name = 'JSESSIONID';\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GeoWebCache\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GWC Home\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Welcome to GeoWebCache version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<a href=\\\\\\\"http://geowebcache.org\\\\\\\">GeoWebCache</a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zidesoft-E6\\u6587\\u6863\\u7ba1\\u7406\\u7cfb\\u7edf\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/static/images/login/btn-login.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Technicolor-Gateway\",\n  \"logic\": \"(a&& (b||c)) ||d||e||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"xAuth_SESSION_ID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Technicolor Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/login.lp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Technicolor CableHome Gateway \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Technicolor Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Technicolor TG784n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Technicolor Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CrewMAIL\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CrewMAIL\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cowboy\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Cowboy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Cowboy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"D_LINK-Network Monitoring Video\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"DNR-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"DNR-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Nucleus-CMS\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Generator: Nucleus CMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Generator: Nucleus CMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"target=\\\\\\\"_blank\\\\\\\">Nucleus CMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"nucleus_lf_name\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"title=\\\\\\\"Nucleus\\\\\\\" href=\\\\\\\"http://nucleuscms.org/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRANZEO-\\u516c\\u53f8\\u4ea7\\u54c1\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Tranzeo \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SAP-Web-App-Server\",\n  \"logic\": \"a||b||c||d||e||f||g||h||i||j\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"sap-usercontext\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"sap-usercontext\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"name=\\\\\\\"sap-login-XSRF\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"SAP Web Application Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: SAP Web Application Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: SAP Web Application Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Server: SAP NetWeaver Application Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Server: SAP NetWeaver Application Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Server: SAP J2EE Engine\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Server: SAP J2EE Engine\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-SSL-VPN\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"./logo/&logo&.ico\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var apppath = \\\\\\\"/app/hw/\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"ZyXEL-USG60W\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"USG60W\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"USG60W\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Moxa-NP6610\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NP6610\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-VN020-F3\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var modelname=\\\\\\\"VN020-F3\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-EC330-G5u\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var modelname=\\\\\\\"EC330-G5u\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_Link-EC230-G1\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var modelname=\\\\\\\"EC230-G1\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DLink-Print-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"D-Link DP-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"DP-302\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sucuri\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Sucuri/Cloudproxy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Sucuri/Cloudproxy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Sucuri WebSite Firewall - CloudProxy - Access Denied\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"cloudproxy@sucuri.net\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"X-Sucuri-ID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"X-Sucuri-ID\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"StarDot-NetCam\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Live Image\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NetCam Live Image\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<applet code=\\\\\\\"CaptureClient.class\\\\\\\" width=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Citrix-Netscaler\",\n  \"logic\": \"a||b||c||d||e|| (f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ns_af\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NS-CACHE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Set-Cookie: citrix_ns_id\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"NetScaler NS10.1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"NetScaler NS10.5\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Citrix Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Netscape/Firefox/Opera\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SONICWALL-SRA-1200\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SonicWALL SRA 1200 \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-FusionInsight\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: FusionInsight\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: FusionInsight\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SonicWall-NSA-3500\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SonicWALL NSA 3500 \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ArcGIS-Company Products\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ArcGIS Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"action=\\\\\\\"/arcgismanager/main/login.jsf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PIOLINK-TiFRONT-F26\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TiFRONT-F26\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TeamPortal\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TS_expiredurl\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PIOLINK-TiFRONT-G24\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TiFRONT-G24\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"silex-C-6600GB\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"silex C-6600GB\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TEG-160WS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TEG-160WS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Schneider-TAC-Xenta555\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TAC Xenta555\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: TAC/Xenta555\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SGI-company products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Silicon Graphics \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Schneider-TAC-Xenta527\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TAC Xenta527\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: TAC/Xenta527\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"atop-SE5001\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SE5001\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Silver_peak companies\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Silver Peak Systems, Inc. \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AKCP-securityProbe\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"securityProbe \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SoftinBox-ServerDiff load balancing\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ServerDiff \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yulong-HIDS-Host Intrusion Detection System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<h1>\\u9a6d\\u9f99</h1>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<h2>yulong - A cool HIDS system.</h2>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-videoconferencing-terminal\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"videoconferencing terminal\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"huawei technologies\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ARRIS-Touchstone\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Touchstone Status\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"passWithWarnings\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"SANbox-Switch\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SANbox \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Linksys-IP-Cameras\",\n  \"logic\": \"(a||b||c||d||e||f||g) &&h\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"+tm01+\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"WVC54GCA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"WVC80N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<img border=\\\\\\\"0\\\\\\\" src=\\\\\\\"Linksys_Blue_Logo.gif\\\\\\\"></td>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<a href=\\\\\\\"http://www.linksys.com/\\\\\\\" class=\\\\\\\"mainmenu\\\\\\\" target=\\\\\\\"_blank\\\\\\\"><script>dw(tm05)</script></a></td>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"content=\\\\\\\"LCS 3024\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"align=\\\\\\\"center\\\\\\\">Compact Wireless-G\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Intel-Shiva-LanRover-Switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Shiva LanRover Access Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Moxa-OnCell-Web-Console\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OnCell \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Web Console\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AnZuWAF\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AnZuWAF\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"AnZuWAF\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Realvnc - Enterprise Edition\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: VNC Server Enterprise Edition\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: VNC Server Enterprise Edition\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AM-Web Management Platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"dvLogo\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5929\\u5fc3\\u5929\\u601dWEB\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Trunkey-ICP / IP address information filing management system\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"http://www.trunkey.com/\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by Trunkey\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \" IDC/ISP \",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Eureka-Server\",\n  \"logic\": \"a|| (b&&c) || (d&&e) ||f|| (g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"eureka/css/wro.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"eureka-server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-Application-Context\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"eureka-server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"X-Application-Context\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Eureka\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"<td><b>APOLLO-ADMINSERVICE</b></td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dovecot\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Dovecot\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Gargoyle-Router\",\n  \"logic\": \"((((a||b) &&c) ||d||e||f) &&g&&h&&i) ||j|| (k&&l&&m)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u77f3\\u50cf\\u9b3c\\uff08Gargoyle\\uff09\\u8def\\u7531\\u5668\\u7ba1\\u7406\\u7a0b\\u5e8f\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/themes/Gargoyle/images/wait_icon.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"/themes/Gargoyle/images/favicon.png\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: httpd_gargoyle\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Gargoyle Router Management Utility\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Gargoyle Firmware Webgui for router management\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Gargoyle Router Management Utility\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"Serverhttpd_gargoyle\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Thinputer-Server Virtualization OVP\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cn=Thinputer Technology\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"cn=OVP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"inspinia-\\u540e\\u53f0\\u7ba1\\u7406\\u6a21\\u677f\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"name=\\\\\\\"password\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Inspinia\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Phabricator\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"phsid\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Set-Cookie: phsid\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"phabricator-application-launch-container\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"res/phabricator\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MAVERICK companies\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Maverick_SSHD\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-S5720\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"S5720\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"S5720\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yisheng - next generation firewall\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4efb\\u5b50\\u884c\\u4e0b\\u4e00\\u4ee3\\u9632\\u706b\\u5899\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CommonName: SURF-NGSA\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Anchiva - Next Generation Firewall\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5b89\\u4fe1\\u534e\\u4e0b\\u4e00\\u4ee3\\u9632\\u706b\\u5899\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IdeaSmtpServer\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"smtp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IdeaSmtpServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ESMTP IdeaSmtpServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Phocas-Data Analysis Software\",\n  \"logic\": \"a&&b&&c&&d&&e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"https://www.phocassoftware.com\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" Phocas: Business Intelligence Software and Data Analytics \",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Phocassoftware.com\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Phocas user group\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Documentation\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"KoobooCMS\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Kooboocms\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Kooboocms\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Kooboo CMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Anhui Net Shield\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Protected-By: AnHui Web Firewall\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Protected-By: AnHui Web Firewall\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Avaya-Scopia Video Conference\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SCOPIA \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AirLive-Video Monitoring\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AirCam \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"AirCam \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"airlive bu-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"airlive bu-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"3COM-NBX\",\n  \"logic\": \"(a|| (b&&c) ||d) &&e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NBX NetSet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Alternates\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NBX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"splashTitleIPTelephony\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"BIT_SERVICE-CMS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"bit-xxzs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"xmlpzs/webissue.asp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-Aolynk-Router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Aolynk \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JSP\",\n  \"logic\": \"a||b||c||d||e||f||g||h\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Servlet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"JBoss\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"JSESSIONID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Servlet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"JBoss\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"JSESSIONID\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Python\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"python\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Django\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"python\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Django\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kangle-reverse agent\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"kangle\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: kangle\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"welcome use kangle\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHP\",\n  \"logic\": \"a||b||c||d||e||f||g||h||i\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Powered-By: PHP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PHP/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \".php?\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"PHP_SESSION\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"PHP_ERRORS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"PHP/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"X-Powered-By: PHP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"PHP_SESSION\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"PHP_ERRORS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Juniper-NetScreen Firewall\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NetScreen-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"-NetScreen\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"NetScreen\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"NetScreen\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ciphermail-Email-Encryption-Gateway\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CipherMail Email Encryption Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZZCMS\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"zzcms-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/zx/search.php\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/inc/showuserlogin.php?style=H&t=Math.random()\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bosch-flexidome-video surveillance\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FLEXIDOME \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ULTI-IP-Gateway\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"ULTI IP Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"ULTI IP Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WirelessHART-Gateway-Access-Control\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"WirelessHART Gateway Access Control\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"WirelessHART Gateway Access Control\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WebPower-Smart-Card\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WebPower Smart II Card\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NUUO-NVRmini\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Network Video Recorder Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NVRmini\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Davolink-router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Setup Configuration\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Set-Cookie: acookie=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Emerson-Network-Power\",\n  \"logic\": \"(a&&b) ||c|| (d&&e) ||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SiteMonitor!\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Emerson Network Power\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"UsbVideo WebPlayer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"ups\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Emerson Network Power Co.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Emerson Network Power\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"webtrust-Cert\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"https://cert.webtrust.org/ViewSeal\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GeoTrust-Cert\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"//smarticon.geotrust.com/si.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZABBIX-\\u76d1\\u63a7\\u7cfb\\u7edf\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"images/general/zabbix.ico\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"zbx_sessionid\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"meta name=\\\\\\\"Author\\\\\\\" content=\\\\\\\"Zabbix SIA\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Linux ZABBIX-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"zbx_sessionid\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tautulli-product\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PlexPy - Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"alt=\\\\\\\"PlexPy\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PiAware-Skyview\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PiAware Skyview\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"alt=\\\\\\\"PiAware SkyView\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"phoenixcontact-router\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PSI-MODEM-3G/ROUTER\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PSI-MODEM-3G/ROUTER\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dnion-CDN\",\n  \"logic\": \"a||b||c|| (d&&e&&f) || (g&&h&&i)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: dnion\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"fastcdn.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"server: DNION\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: DnionOS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Server: DnionOS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Tinyproxy\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: tinyproxy/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: tinyproxy/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-router\",\n  \"logic\": \"((a||b||c||d) &&e) ||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ASUSWRT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ASUS APP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Asus RT-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"ASUS WL-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"ASUS-DSL-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fujitsu-PRIMERGY-RX2510-M2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"sure\\\\\\\">PRIMERGY RX2510 M2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Disqus\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"disqus_thread\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u91d1\\u548c\\u7f51\\u7edc-\\u91d1\\u548cOA\",\n  \"logic\": \"a||b||c||d|| (e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u91d1\\u548c\\u534f\\u540c\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"js/PasswordCommon.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"js/PasswordNew.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Jinher Network\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"c6/Jhsoft.Web.login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"CloseWindowNoAsk\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Team_Board- Products\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"Licence.asp\\\\\\\"><b style='color:#FF9900'>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=http://www.team5.cn\\\\\\\"><b>TEAM \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"TEAM5.cn By DayMoon\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Synology-NAS\",\n  \"logic\": \"(((a&&b) ||c||d||e) &&f) || (g&&h&&i&&j)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"DiskStation\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"nas\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Synology DiskStation\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"content=\\\\\\\"Synology DiskStation\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"content=\\\\\\\"Synology NAS \\u63d0\\u4f9b\\u529f\\u80fd\\u5b8c\\u6574\\u7684\\u7f51\\u7edc\\u5b58\\u50a8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"DiskStation\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Boa\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Apache,Tomcat,Jboss\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"\\u7ea2\\u5e06-ioffice\",\n  \"logic\": \"a||b|| (c&&d&&e) ||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"iOffice.net\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/iOffice/js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"iOffice.net\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"iOfficeOcxSetup.exe\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Hongfan. All Rights Reserved\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Stulz-Klimatechnik\",\n  \"logic\": \"a||b||c|| (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Stulz GmbH Klimatechnik\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Stulz GmbH Klimatechnik\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"WIB 8000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<img src=\\\\\\\"logo.png\\\\\\\" alt=\\\\\\\"Stulz GmbH Klimatechnik\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Ethernet-Routing-Switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ethernet Routing Switch \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"263 Cloud Communication - Conference Management Center\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"263\\u4f1a\\u8bae\\u7ba1\\u7406\\u4e2d\\u5fc3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<frame src=\\\\\\\"/jsp/conference/meetinglist.jsp\\\\\\\" name=\\\\\\\"mainFrame\\\\\\\"/>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"263\\u7535\\u8bdd\\u4f1a\\u8bae\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-R8000\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ASUS-R8000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">R8000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Palladium-Core4A-UTM\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5e15\\u62c9\\u8feaCore4A-UTM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5e15\\u62c9\\u8fea iCore-4A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP-LINK-Archer-VR900\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"0.9.1 1.2 v004c.0 Build 150909 Rel.39821n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"0.9.1 1.4 v004c.0 Build 160316 Rel.44905n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"var modelname=\\\\\\\"Archer VR900\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WEBrick\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: WEBrick\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: WEBrick\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"VERTIV-DSView\",\n  \"logic\": \"a||b||c||d||e||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Avocent DSView \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/dsview/images/avocent-logo.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"/dsview/themes/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Avocent DSView\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: Avocent DSView\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"/dsview/images/favicon.ico\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"/dsview/protected/login.do\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Anki-Database Audit\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6602\\u6977\\u6570\\u636e\\u5e93\\u5ba1\\u8ba1\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"support@ankki.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kedacom-video on demand system\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u79d1\\u8fbe\\u89c6\\u9891\\u70b9\\u64ad\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<param name=\\\\\\\"ConPwd\\\\\\\" value=\\\\\\\"kdc\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"clsid:da6a00a4-fa81-43ad-a686-ff8ad342395e\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP-LINK-TD-W9980\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"0.6.0 1.12 v0021.0 Build 150507 Rel.40130n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"0.6.0 1.10 v0021.0 Build 141215 Rel.41342n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"0.6.0 1.12 v0021.0 Build 150507 Rel.40130n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"0.6.0 1.13 v0021.0 Build 160125 Rel.52064n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"0.6.0 1.8 v0021.0 Build 140925 Rel.32089n\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LITESPEED-\\u670d\\u52a1\\u5668\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"server: LiteSpeed\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: LiteSpeed\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: LightSpeedServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: LightSpeedServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-TD-W9977\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"0.1.0 0.9.1 v006f.0 Build 161202 Rel.49901n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var modelname=\\\\\\\"TD-W9977\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oracle-Enterprise-Performance-Management-System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Oracle Enterprise Performance Management System\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a href=\\\\\\\"workspace/DynamicHelp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MINERGATE-Claymore-Miner\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ETH\\u200a\\u2014\\u200aTotal Speed:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ETH: GPU0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bangong Technology-PM2 Engineering Project Management System\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Set-Cookie: accId=1001\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PM2\\u5de5\\u7a0b\\u9879\\u76ee\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"PM2\\u9879\\u76ee\\u7ba1\\u7406\\u7cfb\\u7edfBS\\u7248\\u589e\\u5f3a\\u5de5\\u5177.zip\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Set-Cookie: accId=1001\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP-LINK-Archer-D9\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"0.9.1 0.1 v0041.0 Build 141027 Rel.40300n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"0.9.1 0.1 v0041.0 Build 150826 Rel.42046n\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Apache-Web-Server\",\n  \"logic\": \"((a|| (b&&c)) &&d&&e&&f&&g&&h&&i) || (j|| (k&&l) &&m&&n&&o)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: httpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Apache\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Apache-Coyote\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"<h2>My Resource</h2>\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Server: CouchDB\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Apache,Tomcat,Jboss\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Server: httpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"Server: Apache\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"Apache-Coyote\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Websecurity-WAF\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Websecurity: WAF 1.0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Websecurity: WAF 1.0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FiberHome-R2640\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FiberHome Networks \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"R2640\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"FH_R2640\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"R2640-AC \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bosch- Access Control System\",\n  \"logic\": \"(a||b||c) &&d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AEC - Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"valign=\\\\\\\"top\\\\\\\" align=\\\\\\\"right\\\\\\\">AEC \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"color=\\\\\\\"#1B528C\\\\\\\" >Robert Bosch GmbH reserves all rights\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"ASUS-GT-AC5300\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ASUS-GT-AC5300\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">GT-AC5300\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"var based_modelid = 'GT-AC5300'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"document.getElementsByClassName(\\\\\\\"model-name\\\\\\\")[0].innerhtml = \\\\\\\"GT-AC5300\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"GT-AC5300\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-DSL-N55U\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DSL-N55U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"DSL-N55U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">DSL-N55U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"ASUS DSL-N55U\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Aastra-6731i\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Aastra 6731i\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Aastra 6731i\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sharp-AR printer\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SHARP AR-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oracle-Sunfire Server\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Sun-Fire\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Sun SNMP Agent\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"SUN FIRE \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-AC52U_B1\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ASUS RT-AC52U_B1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-AC52U_B1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-AC58U\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RT-AC58U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-AC58U\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-AC66U_B1\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ASUS RT-AC66U_B1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-AC66U_B1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"var product_name='RT-AC66U_B1'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"class=\\\\\\\"prod_madelName\\\\\\\">JRS Eco 100 on Asus RT-AC66U_B1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"RT-AC66U_B1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RV042-VPN-Router\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RV042 VPN Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"RV042\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"klo-rv042\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"RV042\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"klo-rv042\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-Photosmart printer\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HP Photosmart \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"ASUS-RT-AC1300UHP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ASUS RT-AC1300UHP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-AC1300UHP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-AC1750_B1\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RT-AC1750_B1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-AC1750_B1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Lenovo-NC printer\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Lenovo NC-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OpenStack\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OpenStack Dashboard\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Apache-Haus\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Apache Haus\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/apachehaus.ico\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Copyright &copy; 2008-2017 <a href=\\\\\\\"http://www.apachehaus.com\\\\\\\">The Apache Haus</a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cradlepoint-ADSL\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cradlepoint \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Know Chuangyu -Websoc\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7f51\\u7ad9\\u7acb\\u4f53\\u76d1\\u63a7\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div id=\\\\\\\"logo-websoc\\\\\\\" class=\\\\\\\"png-bg\\\\\\\"></div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXV10\",\n  \"logic\": \"a&&b&&c&&d&&e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZXV10 \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZXV10 FTS2000\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-Generator: Drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"28ZE\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Ruijie-Router\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ruijie Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Ruijie Net Bar Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie-RSR7708\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RSR7708\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Qianxin - the eyes\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"360\\u5929\\u773c\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/index.bundle.872998a4.js\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"/static/img/skyeye-logo-big.png\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sina-CDN\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Via-CDN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SINA-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-Via-CDN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"SINA-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RoomAlert\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RoomAlert\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Room Alert\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tencent-CDN\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: NWSs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: Tencent-CDN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: NWSs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"server: Tencent-CDN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Micro-Focus-Open-Enterprise-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Micro Focus Open Enterprise Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<h3>Micro Focus Open Enterprise Server \\u63d0\\u4f9b\\u5e02\\u573a\\u4e2d\\u7684\\u6700\\u4f73\\u7f51\\u7edc\\u3001\\u6587\\u4ef6\\u548c\\u6253\\u5370\\u670d\\u52a1\\u3002</h3>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HIKVISION-\\u89c6\\u9891\\u76d1\\u63a7\",\n  \"logic\": \"a|| (b&&c&&d) || ((e&&f) &&g) || ((h&&i) &&j) || (k&&l&&m) || (n&&o&&p&&q) || (r&&s&&t&&u&&v) || (w&&x&&y&&z) ||FDuv|| (gPfO&&Hqfa) || (qGrU&&QgeZ) || (tzuB&&LoOG) ||oKOn|| (uURZ&&JUpl) || (gXmO&&FwNU) ||sUSC||HOGs|| (gnjX&&DmjA) || (OPRK&&UmQE) ||LhFC|| (Zxut&&FzMl) || (maAL&&OWTA&&OTGQ) || (NSJL&&DHAI) ||QZHv|| (wjnp&&hGUF) || (gLyv&&HkBT) ||docV|| (GOFx&&NnIF) || (AjcQ&&xsPM) || (eGhb&&grcA) ||SoiA|| (CiyB&&EQBq) || (CGiU&&htqY&&eATB) || (Buyv&&PDrQ) || (wKbP&&nYjF) || (COIZ&&vkTK) ||NRtO|| (xkRi&&JoKO) ||ilWf\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Hikvision\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Hikvision\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"updateTips\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"doc/page/login.asp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"NVR Webserver\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"doc/page/login.asp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"screen.availWidth,screen.availHeight\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"NVR Webserver\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"_goaheadwebSessionId\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"Server: Hikvision-Webs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"ABUS DVR\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"Server: DVRDVS-Webs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"q\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"r\",\n    \"feature\": \"Server: DNVRS-Webs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"s\",\n    \"feature\": \"ABUS\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"t\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"u\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"v\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"w\",\n    \"feature\": \"Server: DNVRS-Webs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"x\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"y\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"z\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"FDuv\",\n    \"feature\": \"Hik-B20\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"gPfO\",\n    \"feature\": \"HCNetVideoActiveX.cab\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"Hqfa\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"qGrU\",\n    \"feature\": \"codebase=\\\\\\\"../codebase/NewHCNetActiveX.cab\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"QgeZ\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"tzuB\",\n    \"feature\": \"window.location.href = \\\\\\\"/doc/page/login.asp?_\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"LoOG\",\n    \"feature\": \"App-webs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"oKOn\",\n    \"feature\": \"Server: StreamSystem4.0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"uURZ\",\n    \"feature\": \"codebase=\\\\\\\"../codebase/NetVideoOCX.cab\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"JUpl\",\n    \"feature\": \"NetVideoOCX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"gXmO\",\n    \"feature\": \"//alert(\\\\\\\"The system language is not supported!\\\\\\\");\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"FwNU\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"sUSC\",\n    \"feature\": \"o=Hikvision, ou=IPCamera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"HOGs\",\n    \"feature\": \"\\\\xff\\\\xfd\\\\x01\\\\xff\\\\xfd\\\\x1f\\\\xff\\\\xfd!\\\\xff\\\\xfb\\\\x01\\\\xff\\\\xfb\\\\x03Hik-B20-S login:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"gnjX\",\n    \"feature\": \"Hikvision login:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"DmjA\",\n    \"feature\": \"telnet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"OPRK\",\n    \"feature\": \"App-webs/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"UmQE\",\n    \"feature\": \"Content-Length: 481\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"LhFC\",\n    \"feature\": \"dvrdvs login:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"Zxut\",\n    \"feature\": \"telnet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"FzMl\",\n    \"feature\": \"NetDVRDVS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"maAL\",\n    \"feature\": \"classid=\\\\\\\"clsid:7B43048F-DA7A-458F-AF35-D825BDBB6816\\\\\\\" codebase=\\\\\\\"../codebase/NetVideoOCX.cab\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"OWTA\",\n    \"feature\": \"ABUS DVR\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"OTGQ\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"NSJL\",\n    \"feature\": \"classid=\\\\\\\"clsid:F030F48F-CD67-45D1-B622-A5D88A7BCFE9\\\\\\\" id=\\\\\\\"HCNetVideo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"DHAI\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"QZHv\",\n    \"feature\": \"192.0.0.64 login:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"wjnp\",\n    \"feature\": \"Server: App-webs/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"hGUF\",\n    \"feature\": \"Subject: o=Product Root CA, ou=IP Camera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"gLyv\",\n    \"feature\": \"DVRDVS-Webs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"HkBT\",\n    \"feature\": \"o=HIKVISION, ou=DVRNVR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"docV\",\n    \"feature\": \"st=zj, l=hz, o=yunwei, ou=hik\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"GOFx\",\n    \"feature\": \"rtsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"NnIF\",\n    \"feature\": \"Server: hikvision\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"AjcQ\",\n    \"feature\": \"/HIKGIS/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"xsPM\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"eGhb\",\n    \"feature\": \"rtsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"grcA\",\n    \"feature\": \"Server: StreamSystem4.1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"SoiA\",\n    \"feature\": \"Hikvision company products\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"CiyB\",\n    \"feature\": \"window.location.href = \\\\\\\"/doc/page/login.asp?_\\\\\\\" + (new Date()).getTime()\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"EQBq\",\n    \"feature\": \"Content-Length: 480\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"CGiU\",\n    \"feature\": \"/ui/css/ui.css?version=\\\\\\\" + new Date().getTime\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"htqY\",\n    \"feature\": \"ng-bind=\\\\\\\"oLan.anonymous\\\\\\\" ng-click=\\\\\\\"login('anonymous')\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"eATB\",\n    \"feature\": \"css/login.css?version=\\\\\\\" + new Date()\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"Buyv\",\n    \"feature\": \"var syslanguage= navigator.browserLanguage.toLowerCase()\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"PDrQ\",\n    \"feature\": \"var szlanguage = sysLanguage.substring(0,2)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"wKbP\",\n    \"feature\": \"ng-bind=\\\\\\\"oLan.anonymous\\\\\\\" ng-click=\\\\\\\"login('anonymous')\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"nYjF\",\n    \"feature\": \"class=\\\\\\\"btn btn-primary login-btn\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"COIZ\",\n    \"feature\": \"id=\\\\\\\"divAnonymous\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"vkTK\",\n    \"feature\": \"id=\\\\\\\"divPswStrength\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"NRtO\",\n    \"feature\": \"hai210E\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"xkRi\",\n    \"feature\": \"<FORM action=\\\\\\\"/goform/formCobraLogin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"JoKO\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"ilWf\",\n    \"feature\": \"\\u53bb\\u9664edge\\u4e0b\\u5c06\\u6570\\u5b57\\u5904\\u7406\\u6210\\u7535\\u8bdd\\u7684\\u9519\\u8bef\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Aethra companies products\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Aethra \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Efficient-gateway\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Efficient \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Efficient Networks \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SIEMENS-SYNGO.VIA Medical Image Processing Software\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"syngo.via Start Page\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"backgr\\\\\\\" src=\\\\\\\"syngo-Installation_1024x768.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APUSIC-Company Products\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6b22\\u8fce\\u4f7f\\u7528Apusic\\u5e94\\u7528\\u670d\\u52a1\\u5668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<td>\\u7ba1\\u7406Apusic\\u5e94\\u7528\\u670d\\u52a1\\u5668</td>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Apusic Application Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Apusic Application Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zhongxin Huier - Health Management\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/Web/VFYPHRMedical\\\\\\\">\\u5065\\u5eb7\\u6863\\u6848</a></li>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"www.wellcare.cn\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SwiFTP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SwiFTP \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie-EWEB\\u7f51\\u7ba1\\u7cfb\\u7edf\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span class=\\\\\\\"resource\\\\\\\" mark=\\\\\\\"login.copyRight\\\\\\\">\\u9510\\u6377\\u7f51\\u7edc</span>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"login.getDeviceInfo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u9510\\u6377\\u7f51\\u7edc-EWEB\\u7f51\\u7ba1\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ricoh-IPSIO printer\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RICOH IPSiO \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ralink-ADSL-Modem\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ralink ADSL Modem\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RedBack-Networks-AOS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RedBack Networks AOS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Redback-Networks-SEOS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Redback Networks SmartEdge OS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-ProCurve-Secure-Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ProCurve Secure Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Pumpkin-Networks-L7-Switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Pumpkin Networks L7 Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Pannaway-ADSL\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Pannaway BAS-ADSL48R\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Pannaway RGN-ADSL\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Packet-Power-Ethernet-Gateway\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Packet Power Ethernet Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Packet Power EG4 Ethernet Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Peplink-Balance-Series\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Peplink Balance Series\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"PePLink Balance Series\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Symantec-Packeteer-PacketShaper\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Packeteer PacketShaper\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Opzoon-OS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Opzoon Technology Co., Ltd. Internetwork Operating System\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OSBRiDGE-5XLi\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OSBRiDGE 5XLi\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OLIVETTI-Printing-System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OLIVETTI  Printing System\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"OLIVETTI Printing System\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yamaha-NVR500\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NVR500\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Nortel-Application-Switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Nortel Application Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-Nimble-Storage\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Nimble Storage \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Seagull-PHP-Framework\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var SGL_JS_SESSID\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"THUS-plc\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"THUS plc\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Copyright (C) 2003 Thus plc\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<img src=\\\\\\\"thuslogo.gif\\\\\\\" width=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mitel-Communications-Director\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Mitel Communications Director\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dahua-DSS\",\n  \"logic\": \"((a&&b) || (c&&d) ||e|| (f&&g&&h)) &&i\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Created by IntelliJ IDEA.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<meta http-equiv=\\\\\\\"refresh\\\\\\\" content=\\\\\\\"1;url='/itc'\\\\\\\"/>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<meta http-equiv=\\\\\\\"refresh\\\\\\\" content=\\\\\\\"1;url='/admin'\\\\\\\"/>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<a\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/portal/include/script/dahuaDefined/headCommon.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Created by IntelliJ IDEA.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"URL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"refresh\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Schneider-TAC-Xenta511\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: TAC/Xenta511\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TAC/Xenta511\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"TAC Xenta511\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Siemens-SCALANCE-M873\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"SCALANCE M873\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SCALANCE M873\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"SCALANCE M-873\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oriental Century - Dongfang Xiangyun\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e1c\\u65b9\\u7965\\u4e91-\\u767b\\u5f55\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<p>\\u7248\\u6743\\u6240\\u6709\\uff1a\\u8d35\\u5dde\\u4e1c\\u65b9\\u4e16\\u7eaa\\u79d1\\u6280\\u80a1\\u4efd\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Siemens-Scalance-M800\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Scalance M800\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Reliance-4-Control-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Reliance 4 Control Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm\\\\\\\"Reliance 4 Control Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BMR-HMS\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: BMR HMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: BMR HMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Lantronix-Modbus-Bridge\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Modbus Bridge\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Modbus Bridge\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Rockwell-MicroLogix-1400\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MicroLogix 1400\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<font face=\\\\\\\"helvetica\\\\\\\" size=6>MicroLogix 1400 \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ICEFLOW-VPN\",\n  \"logic\": \"a||b||c|| (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: ICEFLOW\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: ICEFLOW\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"IceFlow VPN Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u51b0\\u5cf0\\u7f51\\u7edc\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"IceFlow Index Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-router\",\n  \"logic\": \"a|| (b&&c) ||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Router of ZTE Corporation\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZXR10\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"switch\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: ZTE/ROSNG\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: ZTE/ROSNG\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"REALOR-\\u5929\\u7ffc\\u5e94\\u7528\\u865a\\u62df\\u5316\\u7cfb\\u7edf\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u745e\\u53cb\\u5929\\u7ffc\\uff0d\\u5e94\\u7528\\u865a\\u62df\\u5316\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UPUPW\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"UPUPW\\u73af\\u5883\\u96c6\\u6210\\u5305\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TAICHEN-video surveillance\",\n  \"logic\": \"(a&&b&&c&&d) || (e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Surveillance System\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<script src=\\\\\\\"js/Flash.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<script src=\\\\\\\"js/Png.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<script src=\\\\\\\"js/RightClick.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"rtsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"realm=\\\\\\\"Unisight\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VisualSVN\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VisualSVN Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"VisualSVN Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"VisualSVN Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Schneider-ClearSCADA\",\n  \"logic\": \"a||b|| (c&&d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: ClearSCADA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: ClearSCADA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<Page title=\\\\\\\"ClearSCADA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"ClearSCADA\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NetportExpress-Print-Server\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NetportExpress\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Print Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yisheng -DLP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CDGServer3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-Auth-Server\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"75718C9A-F029-11d1-A1AC-00C04FB6C223\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Auth-Http Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Huawei Auth-Http Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Huawei Auth-Http Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie-NBR\\u8def\\u7531\\u5668\",\n  \"logic\": \"(a|| (b&&c) ||d) &&e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ruijie - NBR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"support.ruijie.com.cn\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<p>\\u7cfb\\u7edf\\u8d1f\\u8377\\u8fc7\\u9ad8\\uff0c\\u5bfc\\u81f4\\u7f51\\u7edc\\u62e5\\u585e\\uff0c\\u5efa\\u8bae\\u964d\\u4f4e\\u7cfb\\u7edf\\u8d1f\\u8377\\u6216\\u91cd\\u542f\\u8def\\u7531\\u5668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"class=\\\\\\\"line resource\\\\\\\" id=\\\\\\\"nbr_1\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Techbridge-video surveillance\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Sorry,you need to use IE brower\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EasyTrace(botwave)\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EasyTrace\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"login_page\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Incapsula\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Cdn: Incapsula\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Incapsula incident ID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"x-cdn: Incapsula\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"x-cdn: Incapsula\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"riello-100\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NetMan 100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NetBSD\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NetBSD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NetBSD-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NEC-IX-Series\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NEC \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IX Series \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NET&SYS-DOCSIS-Cable-Modem\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NET&SYS DOCSIS 2.0 Cable Modem\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NET&SYS DOCSIS Cable Modem\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IdeaPop3Server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IdeaPop3Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MAILSTORE-Gateway\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MailStore Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Symantec-Mail-Security\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Symantec Mail Security\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IX-Series-IX2005\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IX Series IX2005\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: IX Series IX2005\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"vmware-Carbon-Black-EDR\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VMware Carbon Black EDR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"versionNumber\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Google- Webmaster Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"google-site-verification\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PageAdmin\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"PageAdmin CMS\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/e/images/favicon.ico\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bootstrap\",\n  \"logic\": \"(a||b) || (c||d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"bootstrap.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"bootstrap.min.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"bootstrap.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"bootstrap.min.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cloudflare-product\",\n  \"logic\": \"((a||b||c||d||e) &&f&&g&&h) || ((i||j) &&k&&l)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: cloudflare-nginx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"__cfduid=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"CloudFlare Ray ID:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"var cloudflare=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"cloudflare\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Server: cloudflare-nginx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Server: cloudflare\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Mitel-SX-2000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SX-2000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dm500hdv2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"dm500hdv2 login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JBM-gateway\",\n  \"logic\": \"a|| (b&&c) || (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CommonName: JBMgateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"JBMv3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"JBMv3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dangpo Technology --arcvideo-Live\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Arcvideo Live\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Arcvideo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: ArcVideo\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Media-Renderer\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<friendlyName>\\u5ba2\\u5385\\u7535\\u89c6-DLNA<\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Raisecom-MSG1200\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MSG1200-FE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Host treasure\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u60a8\\u8bbf\\u95ee\\u7684\\u662f\\u4e3b\\u673a\\u5b9d\\u670d\\u52a1\\u5668\\u9ed8\\u8ba4\\u9875\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u4e3b\\u673a\\u5b9d\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<a href=\\\\\\\"http://z.admin5.com/\\\\\\\" target=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GPSweb\",\n  \"logic\": \"((a||b||c) &&d) || (e&&f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GPSweb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: GPSWeb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"/GPSWeb/js/add_string_prototype.js\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: GPSWeb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Mediatrix-Sentinel\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Mediatrix Sentinel\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MySqlDumper\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"mysqldumper\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"mysqldumper\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<select class=\\\\\\\"SQLCombo\\\\\\\" name=\\\\\\\"tablecombo\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"net2ftp\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"net2ftp - a web based FTP client\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<!-- net2ftp version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<!-- End of net2ftp login form\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"href=\\\\\\\"http://www.net2ftp.com\\\\\\\">net2ftp</a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"content=\\\\\\\"net2ftp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CNVP-JCMS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Publish By JCms2010\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Digi-Connect-Device\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Digi Connect Device\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ScrewTurn-Wiki-Web Services\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ScrewTurn-Wiki\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by <a class=\\\\\\\"externallink\\\\\\\" href=\\\\\\\"http:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"title=\\\\\\\"ScrewTurn Wiki\\\\\\\" target=\\\\\\\"_blank\\\\\\\">ScrewTurn Wiki\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Windows-Server-2008\",\n  \"logic\": \"((a&&b&&c) ||d||e||f|| (g&&h&&i)) ||j\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Windows Server 2008\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"boa\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Windows Server (R) 2008 \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Windows Web Server 2008 \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Windows (R) Web Server 2008 \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Windows Server 2008\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Microsoft Windows Server 2008\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Queen Star-Harbor-Networks\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"::Harbour Networks::\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RE9200T-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RE9200T series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PCS-G50-Web-Control\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"PCS-G50 Web Control\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"PCS-G50 Web Control\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AWS-WAF\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"aws\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"http/1.1 403\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"aws\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"http/1.1 403\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Wide Major - Yogong Internet Behavior Management\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"data/soft_down/openvpn.zip\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/soft_down/mdog.exe\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRECK-Company Products\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"cmp_16\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-UC500\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco IOS Software, UC500 Software\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Nortel-Router\",\n  \"logic\": \"((a||b||c) &&d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Router Model:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"About Nortel Secure Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Nortel Http Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: Nortel Http Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Telligent-Community-Server\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CommunityServer-LastVisitUpdated\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"communityserver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"CommunityServer-UserCookie\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"CommunityServer-LastVisitUpdated\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"communityserver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"CommunityServer-UserCookie\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-SRG1220\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SRG1220\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HUAWEI SRG1220\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-VC-FlexFabric\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HP VC FlexFabric\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ICOM-IP1000C\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IP1000C\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Icom Inc.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Grandstream-IP phone\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"__gwt_historyFrame\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Loading Web Application\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"webapp/webapp.nocache.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"I love Castle Cloud Platform\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"\\u6211\\u7231\\u8003\\u52e4\\u4e91\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u6211\\u7231\\u8003\\u52e4\\u4e91\\u5e73\\u53f0</span>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u6211\\u7231\\u8003\\u52e4\\u4e91\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<input type=\\\\\\\"text\\\\\\\" class=\\\\\\\"form-control\\\\\\\" name=\\\\\\\"MobileNumber\\\\\\\" value=\\\\\\\"\\\\\\\" placeholder=\\\\\\\"\\u624b\\u673a\\u53f7\\u7801\\\\\\\" />\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oriental Huadun - Safety Mail\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Huadun(SecureEmail)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ATLASSIAN-JIRA\",\n  \"logic\": \"a||b||c||d|| (e&&f&&g) ||h\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"jira.webresources\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"atlassian.xsrf.token\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ams-build-number\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"System Dashboard - \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"content=\\\\\\\"JIRA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"boa\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Server: Boa\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"atlassian.xsrf.token\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KESION-CMS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/ks_inc/common.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"publish by KesionCMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FOOBAR-FTP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Welcome to FOOBAR FTP service\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EASTED-cloud computing virtualization platform\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Easted\\u4e91\\u8ba1\\u7b97\\u865a\\u62df\\u5316\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<span>EASTED VServer\\u865a\\u62df\\u6570\\u636e\\u4e2d\\u5fc3\\u7cfb\\u7edf</span></a></div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-eSight\",\n  \"logic\": \"(a&&b&&c) ||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"location.replace('login.action?_='+ new Date().getTime());\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a \",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<body onload=\\\\\\\"gotoLogin()\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"esight_login_copy_right_font\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"sso/login.action\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"sso/login.action\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HLK-RM04\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"HLK-RM04\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"HLK-RM04\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Emtronix-EM9X60\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EM9X60 login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-ER3260\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ER3260\\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"H3C ER3260\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"H3C ER3260\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Github-Enterprise\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Set-Cookie: _gh_manage=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Set-Cookie: _gh_manage=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"GitHub Enterprise\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"layer.js\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"layer.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"layer.open\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"kingdee-K3-cloud\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"K/3 Cloud\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u91d1\\u8776\\u56fd\\u9645\\u8f6f\\u4ef6\\u96c6\\u56e2\\u6709\\u9650\\u516c\\u53f8\\u7248\\u6743\\u6240\\u6709\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"var formidafterlogin = '\\\\\\\"BOS_MainConsoleSutra\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"class=\\\\\\\"kd-div-loading-ct\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bihai Network - Cloud Box Router\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u78a7\\u6d77\\u4e91\\u76d2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"lib/ext-lang-zh_CN.js\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<h4>\\u6b22\\u8fce\\u767b\\u5f55\\u78a7\\u6d77\\u4e91\\u76d2</h4>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"netentsec Technology - Centralized Management Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7f51\\u5eb7\\u96c6\\u4e2d\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"manage-system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"\\u57fa\\u4e8eVue2 + Element UI \\u7684\\u540e\\u53f0\\u7ba1\\u7406\\u7cfb\\u7edf\\u89e3\\u51b3\\u65b9\\u6848\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"vue-manage-system\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Shenzhen Technology - Elevator Engineering Management System\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/frameworks/images/ico.ico\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"images/login/btnmobile.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Copyright 2015 shenri Habiliment co.,Ltd. All rights reserved\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u52e4\\u4e91\\u79d1\\u6280-E-Tiller\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"reader/view_abstract.aspx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5317\\u4eac\\u52e4\\u4e91\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BOSCH-DIVAR-IP-3000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"vrmchunk.setHelpName('VRM_Monitor')\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FreeJoomlas\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a title=\\\\\\\"free joomla hosting\\\\\\\" href=\\\\\\\"http://freejoomlas.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHPSHE\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by phpshe\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"phpshe\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CobaltStrike- Team Server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cobaltstrike\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alliance-Web-Platform\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Default Alliance Web Platform Application\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"window.location = \\\\\\\"/swp/group/admin\\\\\\\";\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DHI-HCVR5108H-S2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DHI-HCVR5108H-S2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APACHE-Unomi\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Apache Unomi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Apache Unomi Welcome Page\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Logo Apache Unomi\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Telecommunications equipment web configuration system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u8bbe\\u5907WEB\\u914d\\u7f6e</FONT\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cottite - Huajia Easy to buy Sales Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=/css/OrderComplaint\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Faripi-Internet of Things platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"t1\\\\\\\">\\u5b89\\u5168\\u3001\\u7a33\\u5b9a\\u3001\\u5b89\\u5168</div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Net Direction --webcache\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5e7f\\u5dde\\u9ad8\\u5ea6\\u8f6f\\u4ef6\\u6709\\u9650\\u516c\\u53f8\\u7248\\u6743\\u6240\\u6709\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco companies\",\n  \"logic\": \"a|| (b&&c) ||d|| (e&&f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"by Cisco Systems\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ssh\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Cisco\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Cisco Systems\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Cisco Systems, Inc. All rights reserved\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"boa\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Server: boa\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Middle Daddy East - Education Management Information Platform\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"images/lgline.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"LB_Hint\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"onclick=\\\\\\\"SafeCodeClick\\\\\\\" src=\\\\\\\"SafeCode.aspx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DYXNET-VPN\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DYXNET network\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-PRN-4011\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"$.nvr.model_name=\\\\\\\"PRN-4011\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-ML110-G4\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ml110-g4\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ML110-G4\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-POWEREDGE-R940XA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"POWEREDGE-R940XA\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Jasig-CAS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://www.jasig.org/cas\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CMS4J\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/cms4jadmin/login.jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"method=\\\\\\\"post\\\\\\\" name=\\\\\\\"CMS4JSearchForm\\\\\\\" id=\\\\\\\"CMS4JSearchForm\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"uniview-ISC3500-SC\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ISC3500-SC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-CBA750-Gateway\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CradlePoint CBA750 Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CradlePoint CBA750\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cathexis-WNVR3000-PC\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WNVR3000-PC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruida - Evaluation System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"headerbar gradientbar\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP-LINK-TD-W9970\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"0.9.1 2.3 v0025.0 Build 150616 Rel.59521n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"1.0.9 Build 160614 Rel.41323\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tiandy-server management\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location = \\\\\\\"./Web/logon.php\\\\\\\";\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sockso\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Sockso\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Sockso\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bandwidth-Management-Gateway\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Bandwidth Management Gateway \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Bandwidth Management Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SecureMatrix\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Set-Cookie: securematrix=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Set-Cookie: securematrix=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"SECUREMATRIX\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Aten-KVM\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"KN2132\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Barracuda-Link-Balancer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Barracuda Link Balancer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Barracuda Link Balancer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Procon-Electronics-Mod-Mux\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Procon Electronics Mod-Mux\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Procon Electronics Mod-Mux\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXV10-W300S\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"ZXV10 W300S\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"ZXV10 W300S\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHP-Layers\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"alt=\\\\\\\"Powered by PHP Layers Menu\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<!-- end of menu header - PHP Layers Menu\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<!-- beginning of menu header - PHP Layers Menu\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Genuine Supply Chain - Transportation Daily Management System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"style/default/FRUI.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"data-errormessage-value-missing=\\\\\\\"* \\u8bf7\\u5f55\\u5165\\u7528\\u6237\\u540d\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHPFOX-product\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by phpFoX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered By <a href=\\\\\\\"http://www.phpfox.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PhotoStore\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered By <a href=\\\\\\\"http://www.ktools.net/photostore/index.php\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-TotalStorage\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Adaptec\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IBM TotalStorage\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-XRN-3010\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"$.nvr.model_name=\\\\\\\"XRN-3010\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EZVIZ-IP-Camera\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ezviz Push Manager Console\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"3COM-OfficeConnect\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"3Com OfficeConnect\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-R420\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"serverinfo\\\\\\\"> PowerEdge R420\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PowerEdge R420\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UniFi-swich\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"UniFi Network\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"window.unifiConfig.version\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Netgear-ReadyNAS\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"ReadyNAS Admin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"ReadyNAS Admin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NETGEAR ReadyNAS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Http-Explorer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Http explorer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Http explorer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"eSyndiCat\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"eSyndiCat\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TEW-731BR\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<font size=4><b>TEW-731BR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u5927\\u534e-DH-NVR4104HS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NVR4104HS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NVR4104HS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Daktronics-DMS-Control Firmware\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Daktronics, Inc. VFC-3000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Daktronics, Inc. VFC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Burning-Board-Lite\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by <b><a href=\\\\\\\"http://www.woltlab.de\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by <b>Burning Board\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KindEditor\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"kindeditor.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"KindEditor.ready\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"K.create\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"kindeditor-min.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Avaya-Aura-Utility-Server\",\n  \"logic\": \"((a||b|| (c&&d)) &&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"vmsTitle\\\\\\\">Avaya Aura&#8482;&nbsp;Utility Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/webhelp/Base/Utility_toc.htm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Avaya Aura&reg;&nbsp;Utility Services\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Avaya Inc. All Rights Reserved\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Canon-MX710-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MX710 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MP980-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MP980 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bullwark-Momentum Series IP Camera\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<img src=\\\\\\\"images/bullwark_nvr.png\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Bullwark Momentum Series\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GuardSite-WatchGuard-AP102\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WatchGuard AP102\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"debian-\\u64cd\\u4f5c\\u7cfb\\u7edf\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Debian\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<h1>Welcome to nginx on Debian!</h1>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Apache-Ambari\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ambari\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ADT-IAMWIFI\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"jAlert(\\\\\\\"\\u8bf7\\u5148\\u540c\\u610f\\u4e0a\\u7f51\\u534f\\u8bae!\\\\\\\",\\\\\\\"\\\\\\\")\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Liuhe Future - Campus Network Intelligent Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"sdkjs/uftttsdk2.js\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huawei-FusionCompute Management System\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"resources/themes/images/logo/favicon.ico\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/OmsPortal/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/OmsPortal/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/OmsPortal/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Synjones - Campus Card Management System\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Harbin synjones electronic\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"document.FormPostds.action=\\\\\\\"xxsearch.action\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/shouyeziti.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Raritan-Remote-Client\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Raritan Remote Client\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-VEN401\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco VEN401\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco VEN401\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-ER3100G2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ER3100G2\\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"uniview-ECR3316-HF\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ECR3316-HF\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ecwapoa\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ecwapoa\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Blue Shield - WebGuard tamper\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BACKGROUND: url(images/loginbg.jpg) #e5f1fc\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Docker-Distribution-Api\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Docker-Distribution-Api\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Docker-Distribution-Api\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PaloAlto-Firewall\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Access to the web page you were trying to visit has been blocked in accordance with company policy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PA-500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"PA-200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"PA-200\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-USG1100\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"USG1100\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"USG1100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Xfinity-Comcast-Business-Gateway\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Comcast Business Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Comcast Business Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huawei-eudemon firewall\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Eudemon200E\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Eudemon1000E\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Eudemon 200E\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Eudemon 200E\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"HUAWEI Eudemon200E\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ModLogAn\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"modlogan.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \">modlogan\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DPtech-UTM2000\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DPTECH\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"UTM2000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"DPTECH UTM2000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ANNECA-InTouch-CRM\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"InTouch CRM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"app.name\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"http://www.anneca.cz\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Advantech-UR5i-v2L\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"UR5i-v2L\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Power Online - PowerCDN\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powercdn\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powercdn\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-VES-ADSL\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"VES-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"VES-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bosch-Dinion-Video Monitoring\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DINION \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"DINION IP\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"House5 Real Estate System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/house5-style1/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-3G-Wireless-Gateway\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"3G Wireless Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"3G Wireless Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"3G Wireless Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DIGI-PortServer-TS-Products\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"PortServer TS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PortServer TS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Heavenly letter - firewall\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TOPSEC TOS Web User\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TopWebServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"WEB User Interface\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PiAware-Info\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PiAware Info\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PiAware Status\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<%= t('This is a PiAware ADS-B feeder') %>.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-Archer-C3150\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"0.9.1 0.1 v005f.0 Build 160603 Rel.61835n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"TP-Link Archer C3150\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"var modelname=\\\\\\\"Archer C3150\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WD-WDCP management system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"wdcp\\u670d\\u52a1\\u5668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"lanmp_wdcp \\u5b89\\u88c5\\u6210\\u529f\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Schneider-CitectSCADA\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<meta HTTP-equiv=\\\\\\\"REFRESH\\\\\\\" content=\\\\\\\"0; url=/CitectSCADA\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"start services, start group, the start group, automation, industrial, software engineering, SCADA, PLC, RTU, rockwell, rockwell automation, allen-bradley, allen bradley, allenbradley, citect, citectscada, kingfisher\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"CitectSCADA\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NetWave-Network Camera\",\n  \"logic\": \"(a&&b&&c&&d) || (e&&f&&g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Netwave IP Camera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Generator: Drupal \",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"boa\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: Netwave IP Camera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"X-Generator: Drupal \",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"boa\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Deep Software-Srun3000-billing certification system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"srun3000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Windows-NT-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Windows NT Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"for Windows NT/2000/XP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sybase-Jaguar\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Jaguar Server Version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Jaguar Server Version\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kai Caic-hard disk recorder\",\n  \"logic\": \"a&& (b||c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.open(\\\\\\\"http://www.kaicong.net\\\\\\\")\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DVR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u786c\\u76d8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-P2000\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HP P2000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HP P2000G3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"HP StorageWorks P2000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Seo-Panel\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<p class=\\\\\\\"note error\\\\\\\">JavaScript is turned off in your web browser. Turn it on to take full advantage of this site, then refresh the page.</p>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var wantproceed = 'Do you really want to proceed?';\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"var wantproceed = 'Wollen Sie wirklich fortfahren?';\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Digi-Connect-SP\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Digi Connect SP \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"http://www.digi.com\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Digi Connect SP Python&nbsp;Configuration and Management\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"POLY-Video Conference Server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EMA at Carmel\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GC-self-service post system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"RandomImage.aspx\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"id=\\\\\\\"IMGBtn\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Neutron-serial server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e2d\\u65b0\\u521b\\u79d1 Web \\u7ba1\\u7406\\u5668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u4e32\\u53e3\\u670d\\u52a1\\u5668 Web \\u7ba1\\u7406\\u5668\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Beichuang Software - Book Retrieval System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"opac_two\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Emtronix-EM9260\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"STYLE1\\\\\\\">EM9260 Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"EM9260 Web Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MAIPU-router\",\n  \"logic\": \"a&& (b||c||d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Maipu\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"MyPower (R) \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"MyPower \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dptech-DPX8000\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DPTECH DPX8000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DPX8000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"DPTECH\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Asterisk-PBX\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Asterisk PBX\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Avaya-G700\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Avaya G700\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXV10-W300E\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"ZXV10 W300E\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"ZXV10 W300E\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kaijiang- collaborative office platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/kjoa/sheep/login/login.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"53 Happy Service - Company Products\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"chat.53kf.com/kf.php\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"chat.53kf.com/company.php\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"customer_service_language\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Powered by 53KF\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"tb.53kf.com/code/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"pcextreme\",\n  \"logic\": \"(a&&b) ||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Deze server is eigendom van <a\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: PCX/No-Cache\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: PCX/No-Cache\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: PCX/Dynamic\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: PCX/Dynamic\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-ZenWiFi-AX\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"prod_madelName\\\\\\\">ZenWiFi AX\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Panasonic-KX-NS1000\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"KX-NS1000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"KX-NS1000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TW-company products\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TW\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TW Systems, Inc.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yisheng -Net110 network security audit system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NET110\\u7f51\\u7edc\\u5b89\\u5168\\u5ba1\\u8ba1\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"simplemodal.1.4.1.min.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sierra-ADSL\",\n  \"logic\": \"a||b|| (c&&d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"::: ACEmanager :::\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Sierra Wireless Inc, Embedded Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Sierra Wireless, Inc.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"ACEmanager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Sierra Wireless Inc, Embedded Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Extreme-Aerohive Products\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"company_logo.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Aerohive\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PY_SOFTWARE-Active-WebCam\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BASIC realm=\\\\\\\"PY Software Active WebCam\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"BASIC realm=\\\\\\\"PY Software Active WebCam\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-UCSC-C460-M4\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PID:UCSC-C460-M4\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-POWEREDGE-2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"POWEREDGE-2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-49UM7100PLB\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelName>49UM7100PLB</modelName>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Anheng Information - Ting Yu Database Audit and Risk Control System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u660e\\u5fa1\\u6570\\u636e\\u5e93\\u5ba1\\u8ba1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-OS6860E-P48\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span>Device OS6860E-P48\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Grandstream-GXV3140\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"document.title = \\\\\\\"GXV3140\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Esvon-Classifieds\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by Esvon\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Byzoro- Next Generation Firewall\",\n  \"logic\": \"a&& (b||c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var title_zh = '\\u4e0b\\u4e00\\u4ee3\\u9632\\u706b\\u5899'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"login_main_text\\\\\\\">\\u4e0b\\u4e00\\u4ee3\\u9632\\u706b\\u5899</div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<title></title>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-M670\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"alt=\\\\\\\"Cisco M670\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco Content Security Management Appliance M670\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Cisco IronPort M670\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u5927\\u534e-DH-NVR4408\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NVR4408\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"David-WebBox\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: David-WebBox\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: David-WebBox\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Citrix-Metaframe\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location=\\\\\\\"/Citrix/MetaFrame\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"window.location=\\\\\\\"./Citrix/MetaFrame\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CGI:IRC\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CGI:IRC Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<!-- This is part of CGI:IRC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<small id=\\\\\\\"ietest\\\\\\\"><a href=\\\\\\\"http://cgiirc.org/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PCT7024\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">PCT7024\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SuperRED - illegal outreach monitoring system\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<body onload=\\\\\\\"forward_To_Logon()\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"window.location='login.action';\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u6b22\\u8fce\\u767b\\u5f55\\u8fdd\\u89c4\\u5916\\u8054\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-N1108T-ON\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">N1108T-ON<\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Astaro-Command-Center\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/js/_variables_from_backend.js?\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"commandcenter\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D-Link-DIR-505\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"javascript:check_is_modified('http://support.dlink.com/')\\\\\\\"><script>lang_obj.write('LNG038')\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alpha-Five\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Alpha Five\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"A5wSessionId\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Alpha Five\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"A5wSessionId\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sapido-router\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/etop_home_menu_style.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/b28n.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"etop_home_menu_style.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"b28n.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GWS\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: gws\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: gws\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"tiki-Wiki-CMS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"jquerytiki = new Object\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-Acceleration\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco Acceleration\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Cisco Acceleration\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RealTime-Web-ACARS\",\n  \"logic\": \"((a||b||c) &&d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: acarsd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"KjM <acarsd@acarsd.org>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"Realtime Web ACARS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: acarsd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"StarAgent\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location = \\\\\\\"/user/home.jsx\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/aisc/aisc.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SpFTP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"spftp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-WebSEAL\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: WebSEAL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: WebSEAL\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Seagate-NAS\",\n  \"logic\": \"(a||b|| (c&&d)) &&e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login to BlackArmor\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/admin/img/product-lg-lassen.png\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"seagate nas\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"p_user\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Loyaa information automatic editing system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/Loyaa/common.lib.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EnGenius-\\u65e0\\u7ebf\\u8def\\u7531\\u5668\",\n  \"logic\": \"(a&&b) || (c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FIRMWAREVER\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"engeniusrouter\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/logo_engenius.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHPOK\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"phpok\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered By phpok.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"phpok\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"gentoo_linux-\\u7cfb\\u7edf\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Gentoo\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tiandin-TopFlow\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5929\\u878d\\u4fe1TopFlow\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tianyang-BPM system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"value=\\\\\\\"sinopec.ad\\\\\\\" readonly=\\\\\\\"readonly\\\\\\\" id=\\\\\\\"ddlDomains2\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"National New Health - Medical Insurance Decision Support System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"name=\\\\\\\"source\\\\\\\" value=\\\\\\\"ClientBin/CISDASystem.xap\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Synjones - Jinlong Card Finance Card Website Query Subsystem\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u91d1\\u9f99\\u5361\\u91d1\\u878d\\u5316\\u4e00\\u5361\\u901a\\u7f51\\u7ad9\\u67e5\\u8be2\\u5b50\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"location.href=\\\\\\\"homeLogin.action\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Property application\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"Freedom/lib/easyui/extend/themes/easyui.extend.css\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"Freedom/themes/fc-v2.0/outlook2.js\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Xunfei knows the line - Company products\",\n  \"logic\": \"(a||b||c||d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"action=\\\\\\\"/datacenter/authentication/login.do\\\\\\\" method=\\\\\\\"post\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"location.href=contextPath+\\\\\\\"/login/password/password.jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"var contextpath = \\\\\\\"/datacenter\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/static/thirdparty/jquery/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HAProxy-Report\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Statistics Report for HAProxy\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanna-drawings service\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HANNA\\u56fe\\u7eb8\\u670d\\u52a1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mobile OA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"fmLogin.UsrCertHash.value = UsrCertHash\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"evercookie\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"evercookie.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var ec = new evercookie();\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Provident Fund Management Center\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src='/js/PCVR_IDCard.js'>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"iRedMail\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"iredadmin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"iredadmin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ESMTP iRedMail\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"mozart-framework\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Mozart Framework\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Mozart Framework\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Chinese body organ allocation and sharing computer system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"images/logo_cotsr.png\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u4e2d\\u56fd\\u4eba\\u4f53\\u5668\\u5b98\\u5206\\u914d\\u4e0e\\u5171\\u4eab\\u8ba1\\u7b97\\u673a\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Foucs-Cloud-Process Business Management Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6d41\\u7a0b\\u4e1a\\u52a1\\u7ba1\\u7406\\u5e73\\u53f0 \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Flyfish-VOLANS router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u98de\\u9c7c\\u661f\\u79d1\\u6280VOLANS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u8def\\u7531\\u5668\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EverFocus-CCTV\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: http server/everfocus\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: http server/everfocus\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"everfocus\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"everfocus\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-FusionCloud-Desktop\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Desktop@FusionAccess\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FusionAccess\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"huawei\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"href=/webui/default/img/logo.ico\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UNIVIEW-cloud\",\n  \"logic\": \"((a|| (b&&c)) &&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5b87\\u89c6\\u4e91\\u773c\\u4e0b\\u8f7d\\u9875\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/cloudeye-landing.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"class=\\\\\\\"glyphicon glyphicon-eye-open\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"IBM-PowerPC\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerPC CHRP Computer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Roundcube\",\n  \"logic\": \"(a&&b) ||c|| (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"roundcube_sessid\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"horde=\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"Roundcube\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"roundcube_sessid\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"horde=\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Beward- camera\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: IPCamera-Webs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"web service\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"sentora\",\n  \"logic\": \"(a&&b) && (c||d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"sentora_logo.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" href=\\\\\\\"http://www.sentora.org/\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Sentora &gt; Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Control Panel - Login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UBNT-airOS-wireless\",\n  \"logic\": \"(a||b||c) &&d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/160819.1157/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/130107.2221/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/171117.1237/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"airos_logo.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DocMail-Cwindow\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"http://www.docmail.cn/android/app/docmail.apk\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"\\u5317\\u4eac\\u56fd\\u4fe1\\u51a0\\u7fa4\\u6280\\u672f\\u6709\\u9650\\u516c\\u53f8,\\u56fd\\u4fe1\\u51a0\\u7fa4,\\u90ae\\u4ef6\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Cwindow\\u4e91\\u89c6\\u7a97\\u5b89\\u5168\\u7535\\u5b50\\u90ae\\u4ef6\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<a href=\\\\\\\"http://www.docmail.cn\\\\\\\" target=\\\\\\\"_blank\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Boda Communication - Router\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"BDCOM(tm) \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"BDCOM Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Exponent-CMS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Exponent Content Management System\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by Exponent CMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-SRG2210\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SRG2210\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-USG5550\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"USG5550\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"USG5550\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-USG5530\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"USG5530\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"USG5530\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MDaemon-email-server\",\n  \"logic\": \"(a&&b) || (c&&d) ||e||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/WorldClient.dll?view=Main\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MDaemon \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"WorldClient\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<strong>MDaemon/WorldClient\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"ESMTP MDaemon\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"POP3 MDaemon\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"POP MDaemon\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KISSY\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"KISSY.ready\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"kissy-min.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"kissy.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Amaze-UI\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"amazeui.min.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"amazeui.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"amazeui.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"eTicket\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by eTicket\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a href=\\\\\\\"http://www.eticketsupport.com\\\\\\\" target=\\\\\\\"_blank\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/eticket/eticket.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ethProxy\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: ethProxy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: ethProxy\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Gitorious\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"_gitorious_sess\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"_gitorious_sess\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Powered by Gitorious\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Guiduo Xingye-Huiyan Database Audit System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6167\\u773c\\u6570\\u636e\\u5e93\\u5ba1\\u8ba1\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-C2900XL\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IOS (tm) C2900XL\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GeoServer\",\n  \"logic\": \"a||b||c|| (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/org.geoserver.web.GeoServerBasePage/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"geoserver lebeg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\\\\\\\webapps\\\\\\\\geoserver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"window.location.replace(\\\\\\\"web/\\\\\\\");\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"geoserver\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Echarts\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"charts.init\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"echarts.min.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"ECharts\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/echartsHome.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"echarts-all.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"echarts-all.min.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Siemens-SIMATIC-NET\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SIMATIC NET IT-CP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/home/siemens.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server Information</TITLE></HEAD>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<TABLE border=2><TR><TD><B>Device-Name: </B></TD><TD>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u6717\\u9a70\\u6b23\\u521b-\\u89c6\\u9891\\u76d1\\u63a7\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"action=\\\\\\\"webs/loginHandle\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Pelco-Sarix\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Sarix&trade;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Spectra Enhanced\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/content/javascripts/scriptaculous.js?load=effects,slider,controls,dragdrop\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/content/javascripts/tooltip.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/content/javascripts/prototype.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"function pegFooterToBottom\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WiFi security terminal equipment management\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<h1>WIFI\\u5b89\\u5168\\u7ec8\\u7aef\\u8bbe\\u5907\\u7ba1\\u7406</h1>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LNMP one-click installation package\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"LNMP\\u4e00\\u952e\\u5b89\\u88c5\\u5305\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HHDIGITAL-video surveillance\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<Meta name=\\\\\\\"Author\\\\\\\" content=\\\\\\\"hhdigital\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Juniper-Guest-WLAN\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Juniper Guest WLAN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JUNIPer-EX4200-24f\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ex4200-24f\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"jweb-title uppercase\\\\\\\"> - ex4200-24f\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JUNIPer-EX4200-24t\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ex4200-24t\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"jweb-title uppercase\\\\\\\"> - ex4200-24t\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JUNIPer-mx960\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Juniper Networks, Inc. mx960\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"face=\\\\\\\"verdana\\\\\\\">MX960\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Juniper_MX960\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"MX960_CE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JUNIPer-SRX550\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Juniper Networks, Inc. srx550\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"jweb-title uppercase\\\\\\\"> - srx550\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"SRX 550\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Juniper-Router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Juniper Networks, Inc\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Juniper-Switch\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Juniper Networks, Inc\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"switch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"router\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Juniper-SRX240\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Juniper SRX240\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"juniper-srx240\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IX280P\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \".:: Welcome to IX280P Configuration ::.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Samsung-Printer\",\n  \"logic\": \"(a||b||c|| (d&&e)) &&f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"css/sws-all.css\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SyncThru Web Service\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"sws_loading_wait\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"RedirectToSWS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"location = \\\\\\\"/sws/index.html\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"dahua-DHI-HCVR4108HS-S3\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DHI-HCVR4108HS-S3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUMAX-QUANTUM-E3\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"pro-model\\\\\\\">QUANTUM E3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zhong'an Technology -XDecision-Decision System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div class=\\\\\\\"g-alert-content\\\\\\\" id=\\\\\\\"g-alert-contentSYSTEM\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SANSEC-SJJ1012 server cryptography\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \">\\u591a\\u7528\\u6237\\u5728\\u7ebf\\u7ba1\\u7406\\u53ef\\u80fd\\u5bfc\\u81f4\\u4e0d\\u53ef\\u9884\\u77e5\\u9519\\u8bef\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SJJ1012\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Flying Fish Star - Home Intelligent Routing\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u98de\\u9c7c\\u661f\\u5bb6\\u7528\\u667a\\u80fd\\u8def\\u7531\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/img/R1/favicon.ico\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UCCC Internet of Things Cloud Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"hidden-xs\\\\\\\">\\u7269\\u8054\\u7f51\\u4e91\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WebRay-Network Space Detection System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7f51\\u7edc\\u7a7a\\u95f4\\u63a2\\u6d4b\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"asset_search_form\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kaixian - visual product\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"\\u5317\\u4eac\\u5f00\\u7ef4\\u521b\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ovirt- virtualization\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/ovirt-engine/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Location: \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/ovirt-engine/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<a href=\\\\\\\"https://www.ovirt.org\\\\\\\" class=\\\\\\\"obrand_loginPageLogoLink\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"China Unicom - business paperless system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e2d\\u56fd\\u8054\\u901a\\u8425\\u4e1a\\u65e0\\u7eb8\\u5316\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"//\\u83b7\\u53d6\\u8425\\u4e1a\\u53f0\\u5e2dPC\\u673a IP\\u5730\\u5740 MAC\\u5730\\u5740\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CacheCloud-system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CacheCloud\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"alert(\\\\\\\"\\u7cfb\\u7edf\\u4e0d\\u5b58\\u5728\\u8be5\\u7528\\u6237\\u540d\\uff0c\\u8bf7\\u786e\\u8ba4\\u8be5\\u7528\\u6237\\u7533\\u8bf7\\u4e86cachecloud\\u6743\\u9650!\\\\\\\");\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Datacom-DM991CR\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DM991cr\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Type ENTER to run terminal \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"DM706CR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"DM991CS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tandberg-Television-Web-server\",\n  \"logic\": \"(a) || (b&&c) || (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Tandberg Television Web server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Tandberg Television Web server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"TANDBERG Gatekeeper\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"NetShare-VPN\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NetShare\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"VPN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AVAYA-Tenor-Multipath-Switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Tenor Multipath Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ziku Group - Violet Firewall\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"name=\\\\\\\"adminlogin\\\\\\\" action=\\\\\\\"/cgi-bin/ManageAccount\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u7d2b\\u5149\\u9632\\u706b\\u5899\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<B><NOBR>\\u7d2b\\u5149\\u9632\\u706b\\u5899\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Windows-Vista\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Native OS : Windows Vista \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Windows Vista\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"vBulletin\",\n  \"logic\": \"a|| (b&&c&&d&&e) || (f&&g) ||h||i\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by vBulletin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"vBulletin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-Generator: Drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: DVRDVS-Webs\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"bsessionhas\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"blastvisi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Powered by vBulletin&trade;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"<!-- Do not remove this copyright notice -->Powered by < a href=\\\\\\\"https://www.vbulletin.com\\\\\\\" id=\\\\\\\"vbulletinlink\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Windows-NT-6.1\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server OS: Windows NT 6.1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Windows NT 6.1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Original standard-CSmail\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CSmail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<frame src=\\\\\\\"/mainframe_zh-cn.html\\\\\\\" />\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IPMOTOR-\\u5feb\\u5ba2\\u7535\\u90ae\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location.replace(\\\\\\\"/cgi-bin/web2cgi/index.cgi\\\\\\\");\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"quarkmail server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<iframe src=\\\\\\\"/cgi-bin/web2cgi/index.cgi\\\\\\\" scrolling=\\\\\\\"no\\\\\\\" frameborder=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DHI-NVR5864-16P-4KS2E\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DHI-NVR5864-16P-4KS2E\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Infogo-ASM6000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ASM6000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ARRIS-CHPMAX5000\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ARRIS CHPMAX5000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OrderBook\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"getOrderBook: function\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IDC_server\",\n  \"logic\": \"a||b||c||d||e||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Location: https://54.79.99.238:2087/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Link: ; rel=\\\\\\\"https://api.w.org/\\\\\\\", ; rel=shortlink\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Location: https://35.183.123.252:80/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Location: https://www.xczimi.com/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Set-Cookie: ASP.net_sessionid=tjrshwv3w1sp0n4pbjvw0w0v; path=/; HttpOnly; samesite=Lax\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Location: https://13.236.211.161/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Location: https://www.belleproperty.com/lane-cove/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZEBRA-140Xi4-203dpi-ZPL\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZTC 140Xi4-203dpi ZPL</H1>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DEDICATED_MICROS-Device\",\n  \"logic\": \"(a&&b&&c) || (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: ADH-Web\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"boa\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: boa\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: ADH-Web\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"boa\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"splunk-\\u65e5\\u5fd7\\u5206\\u6790\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f) || (g&&h&&i)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Splunkd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Splunkd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Splunk.util.normalizeBoolean\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"10,000.com-Flexoffice\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var flexofficepath=\\\\\\\"\\\\\\\\/flexoffice\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-N10U\",\n  \"logic\": \"a||b||c||d|| (e&&f) ||g|| ((h||i||j||k) &&l)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Asus RT-N10U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Asus RT N10u\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"RT-N10U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Asus_RT-N10U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Asus RT-N10U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-N10U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"RT-N10U login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"RT-N10U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Asus RT-N10U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"RT-N10U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"cyberoam-SSL-VPN\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/images/customizeimages/uploadedlogo.jpg\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dotdefender\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Dotdefender-Denied\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"dotDefender Blocked Your Request\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-Dotdefender-Denied\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TEW-826DAP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var model = \\\\\\\"TEW-826DAP\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fidion-CMS\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<!-- fCMS-Template head.tpl begins\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"fcms=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"fcms=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-AIX\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Base Operating System Runtime AIX version\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TELESQUARE-TLR-2005KSH\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TLR-2005KSH\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TLR-2005KSH login:\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Red Hat Certificate System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Certificate System\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Red Hat, Inc.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"logitech-LAN-W301NR\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"LAN-W301NR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"LAN-W301NR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u5927\\u7c73CMS\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5927\\u7c73CMS-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"damicms\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"\\u5927\\u7c73CMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BJB-EDSIP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EDSIP\\u516b\\u722a\\u9c7c\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"\\u540c\\u8f89EDS\\u591a\\u5a92\\u4f53\\u4fe1\\u606f\\u53d1\\u5e03\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Directadmin\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Directadmin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DirectAdmin Daemon\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"DirectAdmin Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"X-Directadmin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"DirectAdmin Daemon\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IRI- Exploration and Development Business Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e2d\\u56fd\\u77f3\\u5316\\u52d8\\u63a2\\u5f00\\u53d1\\u4e1a\\u52a1\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Actiontec-xDSL-Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Actiontec xDSL Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VP-ASP\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"http://www.vpasp.com\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"vs350.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"shopdisplayproducts.asp?id=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"VP-ASP Shopping Cart\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanting Technology - Wireless Controller\",\n  \"logic\": \"((a||b) &&c) ||d|| (e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var oemproductname = \\\\\\\"mvc_howay6000\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<select id = \\\\\\\"selcLangSwitch\\\\\\\" class=\\\\\\\"langSwitch\\\\\\\" onchange = \\\\\\\"switchPageLanguage()\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u82cf\\u5dde\\u6c49\\u660e\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"var oemproductname = \\\\\\\"mvc_howay6100\\\\\\\")\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"src=\\\\\\\"images/ACChtext.png\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"\\u7248\\u6743\\u6240\\u6709 &copy 2009-2017</div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HiShop\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"hishop.plugins.openid\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Hishop development team\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Hishop:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Hishop:\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FineCMS\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by FineCMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"dayrui@gmail.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Copyright\\\\\\\" content=\\\\\\\"FineCMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/statics/js/dayrui.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"FineCMS\\u516c\\u76ca\\u8f6f\\u4ef6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ji Datongyuan -Web-Connector\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5409\\u5927\\u6b63\\u5143Web Connector\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"location.href='/cgi-bin/CGIProxy.exe?action=start';\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Nuance-SafeCom\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SafeCom Mobile Print\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Restlet-Framework\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Restlet-Framework\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Restlet-Framework\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HollySys- Production System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"resource=\\\\\\\"Title_Sub\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sitecore\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Sitecore CMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Sitecore CMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Webalizer-Log\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<A href=\\\\\\\"http://www.webalizer.org\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<!-- Generated by The Webalizer  Ver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<!-- Webalizer Version\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Liquid level system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"bf_daily_stationshiftinfo\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u77f3\\u5316\\u6db2\\u4f4d\\u4eea\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"portainer\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Portainer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"ico/safari-pinned-tab.svg\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ArrayNetworks-AVX\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AVX WebUI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ogi\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Operation and Maintenance Center Integrated Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"form-signin\\\\\\\" action=\\\\\\\"/a/chooseModule\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Parade Software - Unified Identity Management System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<!-- <title>\\u6d3e\\u62c9\\u7edf\\u4e00\\u8eab\\u4efd\\u7ba1\\u7406\\u7cfb\\u7edf</title> -->\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u6d3e\\u62c9\\u7edf\\u4e00\\u8eab\\u4efd\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NetGain_Enterprise_Manager\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NetGain EM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NetGain Enterprise Manager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Panabit-Panalog\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"codeno\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u65e5\\u5fd7\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"panalog\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ximo- Smart DNS Server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u897f\\u9ed8\\u667a\\u80fdDNS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DSR-150\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div class=\\\\\\\"floatL txt01\\\\\\\">Product Page: DSR-150\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DSR-150\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Unified Services Router - DSR-150 </div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DSR-1000N\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div class=\\\\\\\"floatL txt01\\\\\\\">Product Page: DSR-1000N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DSR-1000N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Unified Services Router - DSR-1000N </div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"3G conference network - video system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"3gmeeting\\u89c6\\u8baf\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-Meraki-MR24\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Meraki MR24\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-imageRUNNER1133\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Canon imageRUNNER1133\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WatchGuard-XTM525\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"XTM525\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR950LP6\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cplogin.model = \\\\\\\"IBR950LP6\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Login :: IBR950LP6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-FS728TP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"fs728tpImage spacer50Percent topAlign rightHAlign\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NetGear FS728TP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GitLab\",\n  \"logic\": \"a||b||c||d||e||f||g||h\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"_gitlab_session\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"_gitlab_session\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"gon.default_issues_tracker\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"content=\\\\\\\"GitLab Community Edition\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Sign in \\u00b7 GitLab\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"content=\\\\\\\"GitLab \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"<a href=\\\\\\\"https://about.gitlab.com/\\\\\\\">About GitLab\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"class=\\\\\\\"col-sm-7 brand-holder pull-left\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Varmour-corporate product\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"function loadMunchkinKey()\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"superplaceholder.js\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"superplaceholder.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"superplaceholder.min.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Adiscon-LogAnalyzer\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Adiscon LogAnalyzer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Adiscon LogAnalyzer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Adiscon GmbH\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Backbone\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"new Backbone.Model()\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"backbone-validation-min.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"backbone.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Webbased-PEAR-Package-Manager\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PEAR_Frontend_Web\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<img src=\\\\\\\"?img=pear\\\\\\\" width=\\\\\\\"104\\\\\\\" height=\\\\\\\"50\\\\\\\" vspace=\\\\\\\"2\\\\\\\" hspace=\\\\\\\"5\\\\\\\" alt=\\\\\\\"PEAR\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"QNAP-QGenie\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: QGenie\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: QGenie\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"QGenie - Login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Barracuda companies\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BarracudaHTTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"o=Barracuda Networks\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: BarracudaHTTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Guard God - Host Management\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u62a4\\u536b\\u795e\\u00b7\\u4e3b\\u673a\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DigiCert-Cert\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DigiCert\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SRT-CORNERSTONE-MFT\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: SouthRiver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: SouthRiver\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"neustar-UltraDNS\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: UltraDNS Client Redirection Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: UltraDNS Client Redirection Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"dns\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"UltraDNS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Rowisoft-skyBlue\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Rowisoft skyBlue\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Rowisoft skyBlue\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sprinklr- Management Platform\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Sprinklr\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Sprinklr\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WildFly-Server\",\n  \"logic\": \"(a||b|| (c&&d) ||e) &&f&&g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: WildFly\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: WildFly\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"wildfly.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"WildFly Project\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Welcome to WildFly\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"360 web server\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"WSO2-Carbon-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: WSO2 Carbon Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: WSO2 Carbon Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Le-TV\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Letv Live\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Letv Live\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TEW-733GR\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TEW-733GR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TEW-733GR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"UQCMS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/public/css/common_uqcms.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EWON-SA-VPN-router\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: eWON\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: eWON\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"UFax2-\\u4ea7\\u54c1\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"UFax2\\u4f20\\u771f\\u673a\\u7528\\u6237\\u767b\\u9646\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"php/front_php/user_login.php\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APACHE-dubbo\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \" realm=\\\\\\\"dubbo\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" realm=\\\\\\\"dubbo\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Dubbo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Unsupported command: GET\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Unsupported command 'GET'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"apache-dubbo\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BBVS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: BBVS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: BBVS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u5b87\\u89c6\\u79d1\\u6280-Uniview-MS8500\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Uniview MS8500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IVS-MS8500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"MS8500\\u914d\\u7f6e\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-CE6810-48S4Q-EI\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CE6810-48S4Q-EI\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"3CX-Phone-System-Management-Console\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"3CX Phone System Management Console\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/public/vendor.26422846c5ea381c.js\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"/public/app.807e10d98cfac19e.js\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUGHES-Multimedia-VSAT\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Hughes Network Systems Multimedia VSAT\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-RV130\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco Small Business RV130\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FLIR-Brickstream-1100\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Brickstream 1100\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<h1>Brickstream 1100 Basic Configuration</h1>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APACHE-hadoop-YARN\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/static/yarn.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"yarn.dt.plugins.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-Catalyst-WS-C3750G\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WS-C3750G\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<H2>Accessing Cisco WS-C3750G\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie-NBR1300G\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Router(NBR1300G)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\\\xf5_NBR1300G\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Vendor: Ruijie General Operation System\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APC-TM604G\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TM604G\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-SG300\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco SG300\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"McAfee-Sidewinder-7.0\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Sidewinder 7.0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MAIPU-ISG1000 security gateway\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ISG1000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/php/common/checknum_creat.php?module=config_authnum\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MRTG\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MRTG Index Page\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"http://oss.oetiker.ch/mrtg/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/mrtg-l.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Command line is easier to read using \\\\\\\"View Page Properties\\\\\\\" of your browser\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"MRTG \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"realm=\\\\\\\"MRTG \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huawei-stream media server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: HWServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-Home-Gateway\",\n  \"logic\": \"((a||b||c||d||e|| (f&&g) || (h&&i) || (j&&k))&&l) || ((m||n||o||p) &&q&&r)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HuaweiHomeGateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Menu.HomeGatewayTitle\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"HUAWEI SRG2220\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"HUAWEI Home Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Home Gateway HG630 \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"SessionID_R3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \" Home Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"SessionID_R3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"huaweilogo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"document.write(\\\\\\\"<title>\\\\\\\" + gVarLogin + \\\\\\\"</title>\\\\\\\")\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"' + gVarTitle + '\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"HuaweiHomeGateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"Huawei Home Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"Huawei  Home Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"Huawei-ATP-IGD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"q\",\n    \"feature\": \"boa\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"r\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"CCProxy\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f) ||g||h|| (i&&j&&k&&l)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: CCProxy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: CCProxy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"realm=\\\\\\\"CCProxy \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"realm=\\\\\\\"CCProxy \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"<pre>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"IP Address: \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"Auth result:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"Server Time\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AliyunOSS\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: AliyunOSS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Oss-Request-Id\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"AliyunOcm\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: AliyunOSS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"laravel-admin\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"vendor/laravel-admin/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u6b22\\u8fce\\u767b\\u5f55laravel-admin</p>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie--S2800\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"STAR Switch S2800\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ArvanCloud\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ar-Poweredby: Arvan Cloud\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: ArvanCloud\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Ar-Poweredby: Arvan Cloud\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: ArvanCloud\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TimeLink\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Timelink\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Link International Corp. All Rights Reserved\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<link rel=\\\\\\\"shortcut icon\\\\\\\" type=\\\\\\\"image/png\\\\\\\" href=\\\\\\\"/timelink/images/favicon.ico\\\\\\\"/>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Honeywell-Thermal-Label-Printer\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Thermal Label Printer \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canhight- serial server\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Canhigher\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IO SERVER\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE- switch\",\n  \"logic\": \"(a||b||c|| (d&&e) ||f) &&g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZXR10 ROS Version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZXR10 of ZTE Corporation\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Switch of ZTE Corporation\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"ZXR10\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"ZTE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"ZXR10 ftp service\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-USG1900\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"USG1900\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"USG1900\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-USG40W\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"USG40W\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"USG40W\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-Archer-MR600\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var modelname=\\\\\\\"Archer MR600\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-Archer-MR400\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var modelname=\\\\\\\"Archer MR400\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"feifeicms\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"data-target=\\\\\\\"#navbar-feifeicms\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Gunicorn\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"gunicorn\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: gunicorn\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yxlink-WAF\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: YxlinkWAF\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: YxlinkWAF\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u94f1\\u8fc5Web\\u5e94\\u7528\\u9632\\u62a4\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DATCENT-Data Center\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Datcent\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Datcent\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kedacom-DVR access gateway\",\n  \"logic\": \"a|| (b&& (c||d||e))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6b22\\u8fce\\u4f7f\\u7528DVR\\u63a5\\u5165\\u7f51\\u5173\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"classid=\\\\\\\"clsid:23CF673F-3FE7-467D-AA36-D2AA72D5361B\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src='images/ind_log_kedacom.png')\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u82cf\\u5dde\\u79d1\\u8fbe\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/kdc/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-SR-7750\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ALCATEL SR 7750\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Schneider-TAC-Xenta701\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TAC Xenta701\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: TAC/Xenta701\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Deonet-SwitchMore\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SwitchMore\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NAVER-ABN-505L\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ABN-505L login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-AC1600\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AC1600 login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Pubwin-2015 Integrated Business Web Management Platform\",\n  \"logic\": \"a&& (b||c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"images/newlogin_01.jpg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Pubwin2015 \\u7efc\\u5408\\u4e1a\\u52a1Web\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Pubwin2015 Web\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Citrix-ANG\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"o=Citrix ANG\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TerraGate\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: TerraGate\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: TerraGate\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"\\u5b9d\\u5854-Linux\\u63a7\\u5236\\u9762\\u677f\",\n  \"logic\": \"a||b||c||d||e||f|| (g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<img src=\\\\\\\"https://app.bt.cn/static/app.png\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"http://www.bt.cn/bbs/thread-1172-1-1.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u5b9d\\u5854Linux\\u9762\\u677f\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"src=\\\\\\\"/static/js/Validform_v5.3.2_min.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Set-Cookie: bt_panel=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Set-Cookie: bt_panel=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"<p>1.\\u67e5\\u770b\\u9762\\u677f\\u5165\\u53e3\\uff1a/etc/init.d/bt default</p>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"<h1>\\u8bf7\\u4f7f\\u7528\\u6b63\\u786e\\u7684\\u5165\\u53e3\\u767b\\u5f55\\u9762\\u677f</h1>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"lemis\\u7ba1\\u7406\\u7cfb\\u7edf\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"lemis.WEB_APP_NAME\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Review_board- Products\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/static/rb/images/delete\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"rbsessionid\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"rbsessionid\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-S5700\",\n  \"logic\": \"((a||b)) || ((c||d) &&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"S5700\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Huawei_S5700\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"S5700\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Huawei_S5700\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Marconi-switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Marconi \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ivanti-Landesk Cloud Service\",\n  \"logic\": \"(a) && (b||c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"LANDESK\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cloud Services Appliance\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Cloud Services Appliance\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-SharePoint\",\n  \"logic\": \"a||b||c||d||e||f||g||h||i||j||k\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Microsoftsharepointteamservices\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Sharepointhealthscore\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Sharepointerror\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Sprequestduration\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"content=\\\\\\\"Microsoft SharePoint\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"content=\\\\\\\"SharePoint Team\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"id=\\\\\\\"MSOWebPartPage_PostbackSource\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Microsoftsharepointteamservices\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"X-Sharepointhealthscore\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Sharepointerror\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"Sprequestduration\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"QTECH-QBR-ADSL\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"QBR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"QBR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Node.js\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Powered-By: Express\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"pump.io\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"node.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"X-Powered-By: Express\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"pump.io\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"node.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"easypanel\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/vhost/view/default/style/login.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Juniper-Gateway\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Juniper Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"F5-BIGIP\",\n  \"logic\": \"((a||b||c||d||e||f||g||h||i||j||k||l||m|| (n&&o)) &&p&&q&&r) || (s&&t&&u)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BIGipServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-WA-Info\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-PvInfo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"F5_load\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"BIG-IP&reg;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"realm=\\\\\\\"BIG-IP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"BIGIP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"BIG-IP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"MRHSession\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"LastMRH_Session\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"f5_fullwt=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"f5_ht_shrinked=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"mrhshint=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"content=\\\\\\\"F5 Networks, Inc.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"BIG-IP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"q\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"r\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"s\",\n    \"feature\": \"BigIP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"t\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"u\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Netgear-NAS\",\n  \"logic\": \"(a&&b&&c) || (d&&e) ||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETGEAR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"100NAS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Cable Modem\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"NETGEAR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"100NAS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Netgear-NAS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_lucent-eg gateway\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Alcatel-EG692HW\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Alcatel-EG682HW\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Alcatel-EG662HW\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ADVA-FSP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ADVA FSP \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var gtitle = 'ADVA FSP \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hao Yun Technology - Hao Yun An Defense\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span>\\u6d69\\u4e91\\u5b89\\u9632</span></div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GlobalSign-Cert\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"//seal.globalsign.com/SiteSeal\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Parallels-H-Sphere\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Parallels H-Sphere\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Su Ya Xing - Campus Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/ws2004/Public/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Love office-OA\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"https://www.ioa.cn/Official/Download.html\\\\\\\" target=\\\\\\\"_blank\\\\\\\">\\u7231\\u529e\\u516cAPP</a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"id=\\\\\\\"foot_version\\\\\\\">\\u53a6\\u95e8\\u5bb9\\u80fd\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Schneider-TELEMECANIQUE-BMX\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TELEMECANIQUE BMX\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CASA-wireless router\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NetComm Wireless Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"powered by netComm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-PortMaster\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Lucent PortMaster\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TCCMS\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Power By TCCMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"index.php?ac=link_more\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"index.php?ac=news_list\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EdmWebVideo\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EdmWebVideo\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LYX-NSG - Internet Behavior Management System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Netoray NSG \\u4e0a\\u7f51\\u884c\\u4e3a\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u83b1\\u514b\\u65af\\u79d1\\u6280\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Rui Zhi Cheng -VPN\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"col-md-12 col-xs-12 col-lg-12 external_signin_links\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"no-js\\\\\\\">\\u8bf7\\u5148\\u542f\\u7528JavaScript\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ding Soft Technology -CGM\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id='cgm' style='background-image\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASZENO-RTSP\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"rtsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ASZENO RTSP Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-10000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco IOS Software, 10000 Software\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DCN-CS6200-28X-HI-24F\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<B>CS6200-28X-HI-24F</B>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oracle-Fusion-Middleware\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Welcome to Oracle Fusion Middleware\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"css/fmw_bottom_area.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Oracle-Fusion-Middleware\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Oracle-Fusion-Middleware\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DedeCMS\",\n  \"logic\": \"(a|| (b&&c&&d) ||e) ||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Power by DedeCms\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"http://www.dedecms.com/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"DedeCMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/templets/default/style/dedecms.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"<div><h3>DedeCMS Error Warning!</h3>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u81f4\\u8fdc\\u4e92\\u8054-OA\",\n  \"logic\": \"a||b|| (c&&d) ||e||f|| (g&&h&&i) || (j&&k) || (l&&m) ||n\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/seeyon/USER-DATA/IMAGES/LOGIN/login.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u7528\\u53cb\\u81f4\\u8fdcA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/yyoa/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u672c\\u7ad9\\u5185\\u5bb9\\u5747\\u91c7\\u96c6\\u4e8e\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"path=/yyoa\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"SY8044\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"A6-V5\\u4f01\\u4e1a\\u7248\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"seeyon\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"seeyonProductId\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"/seeyon/common/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"var _ctxpath = '/seeyon'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"A8-V5\\u4f01\\u4e1a\\u7248\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"/seeyon/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"Server: SY8044\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SVN\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SVN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"SVN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<h2>Blog Comments</h2>\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"TomatoCMS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Tomato.Core.Widget.Loader.baseurl = 'http://\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a href=\\\\\\\"http://www.tomatocms.com\\\\\\\" title=\\\\\\\"Powered by TomatoCMS\\\\\\\" target=\\\\\\\"_blank\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NSFOCUS-UTS Comprehensive Threat Probe\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/uts_v2/webstatic/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"UTS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MINIO-Browser\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/minio/loader.css\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Minio Browser\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u8054\\u8fbeOA\",\n  \"logic\": \"a||b||c|| (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/LKSys_WindowControlScript.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"onload=\\\\\\\"LKSYS_PubMaxWin()\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"id=\\\\\\\"lkbLogin\\\\\\\" href=\\\\\\\"javascript:__doPostBack('lkbLogin','')\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"IdentityValidator\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"HHCtrlMax\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-SR8802-X-S\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SR8802-X-S\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Laysns-CMS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"title=\\\\\\\"LaySNS\\\\\\\" target=\\\\\\\"_blank\\\\\\\">LaySNS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"http://www.laysns.com/\\\\\\\"> LaySNS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP-LINK-JetStream-24-Port-Switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"JetStream 24-Port Gigabit L2 Managed Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-SNP-L6233H\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var defaultfilename = \\\\\\\"SNP-L6233H\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-x3400-M2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IBM System x3400 M2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-POWEREDGE-T110-II\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"POWEREDGE-T110-II\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"POWEREDGE-T110-II\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"POWEREDGE-T110-II\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"PowerEdge-T110\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"PowerEdge-T110\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-E105\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"E105</font></div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Banggoo-ADC\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Banggoo ADC \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u767b\\u5f55(ADC :: Adc1)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u6b22\\u8fce\\u767b\\u5f55Banggoo ADC\\u7ba1\\u7406\\u754c\\u9762</div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DHI-HCVR4216AN-S3\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DHI-HCVR4216AN-S3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u5929\\u878d\\u4fe1-\\u65e5\\u5fd7\\u6536\\u96c6\\u4e0e\\u5206\\u6790\\u7cfb\\u7edf\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5929\\u878d\\u4fe1\\u65e5\\u5fd7\\u6536\\u96c6\\u4e0e\\u5206\\u6790\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u7f51\\u7edc\\u536b\\u58eb\\u65e5\\u5fd7\\u6536\\u96c6\\u4e0e\\u5206\\u6790\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yiqi-CMS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"YiqiCMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NOKIA-7750-SR\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Nokia 7750 SR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Score system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"htcss/loginDf.css\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Pricewater Technology - Project Management System\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var right = RegExp.rightContext\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"window.top.location = \\\\\\\"Login.aspx?url=\\\\\\\" + right\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Exploration and development information system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"download/srtech.cer\\\\\\\" target='_blank'>CA\\u8bc1\\u4e66\\u4e0b\\u8f7d\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"MSHTML 6.00.2600.0\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kedacom-multimedia recording system\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VRS2000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"reqmodpwddata={\\\\\\\"MsgID\\\\\\\":EV_VRS_REQ_MSG.EV_VRS_MOD_ACCOUNT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"VRS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"#menu-vrs\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u542f\\u660e\\u661f\\u8fb0-\\u5929\\u73a5\\u7f51\\u7edc\\u5b89\\u5168\\u5ba1\\u8ba1\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5929\\u73a5\\u7f51\\u7edc\\u5b89\\u5168\\u5ba1\\u8ba1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5929\\u73a5\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u5929\\u73a5\\u7f51\\u7edc\\u5b89\\u5168\\u5ba1\\u8ba1\\u7cfb\\u7edfV6.0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<a href=\\\\\\\"../client/Site-downloadRunTimeDetector\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"\\u7f51\\u5fa1\\u7f51\\u7edc\\u5ba1\\u8ba1\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-TL-PS110U\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IMG src=\\\\\\\"IMAGES/blank.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"TCPIP.HTM\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"TL-PS110U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"TL-PS110U\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXHN-H108N\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"ZXHN H108N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"ZXHN H108N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<modelName>ZXHN H108N</modelName>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"ZXHN H108N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Login:ZXHN H108N\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Flute Software-IT Integrated Business Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"name=\\\\\\\"tbZCode\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BYZORO- Safety Gateway\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PatrolFlow\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"&nbsp;PatrolFlow \\u591a\\u4e1a\\u52a1\\u5b89\\u5168\\u7f51\\u5173\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Patflow--\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zhongke Dawang-I620-G20\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"I620-G20\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-75SM8670PUA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelName>75SM8670PUA</modelName>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WebGoat\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"WebGoat\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"WebGoat\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CaiMore-Gateway\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"CaiMore Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"CAIMORE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"CaiMore Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"CAIMORE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Isolsoft-Support-Center\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by: Support Center\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u5b89\\u6052\\u4fe1\\u606f-\\u660e\\u5fa1\\u5b89\\u5168\\u7f51\\u5173\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u660e\\u5fa1\\u5b89\\u5168\\u7f51\\u5173\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LoopComm-wireless router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Loopcomm\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-N3024\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">N3024\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Dell Networking N3024\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N604T\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n604t.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-AER2200-1200M\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: AER2200-1200M\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-MBR-900\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CradlePoint MBR-900 Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CradlePoint MBR-900\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MOXA-NPort-5150A\",\n  \"logic\": \"(a&&b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MoxaHttp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NPort Web \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"5150A\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"NPort 5150A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-WNDR3400\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETGEAR WNDR3400\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NETGEAR WNDR3400\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NETGEAR Router WNDR3400\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Netgear WNDR3400\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HikVision-V2.3 control\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HIKVISION V2.3\\u63a7\\u4ef6\\u7f51\\u9875DEMO\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u676d\\u5dde\\u6d77\\u5eb7\\u5a01\\u89c6\\u6570\\u5b57\\u6280\\u672f\\u80a1\\u4efd\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"if(m_bDVRControl.StopTalk())\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VTS background management system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VTS\\u540e\\u53f0\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"errMag\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FortiWifi\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FortiWifi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FortiWifi60b\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"FortiWifi60c\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"FortiWiFi\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Znv-Video Monitoring\",\n  \"logic\": \"(a&&b) || (c&&d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OBJECT id=ClientOcx classid=clsid\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"ZNV ZXNVM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"HDIPCam login:\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CODESYS-WebVisu\",\n  \"logic\": \"a||b||c||d||e||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/plc/webvisu.htm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<param name=\\\\\\\"STARTVISU\\\\\\\" value=\\\\\\\"PLC_VISU\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"CoDeSys WebVisualization\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<APPLET codebase=. code=webvisu/WebVisu.class name=\\\\\\\"WebVisu\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: WAGO_Webs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"/plc/webvisu.htm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Server: WAGO_Webs\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-Series-Router-MSR930\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HP Series Router MSR930\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HPE Series Router MSR930\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SpamTitan\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<table class=\\\\\\\"lhead\\\\\\\"><tr><td class=\\\\\\\"img\\\\\\\"><img src=\\\\\\\"/imgs/logo.gif\\\\\\\" alt=\\\\\\\"SpamTitan Logo\\\\\\\"></td></tr></table></div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huawei-espace product\",\n  \"logic\": \"a||b||c||d||e|| (f&&g) || (h&&i)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"huawei eSpace \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HUAWEI ESPACE \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"eSpace 7900 WEB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"Enterprise IP phone Huawei eSpace \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"Enterprise IP phone Huawei eSpace \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"eSpace\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"SEVER-VER: \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"eSpace\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"SEVER-VER: \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"vmware-Server-2\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"VMware Server is virtual\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"VMware Server 2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Newton\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"name=\\\\\\\"GROUP_SN\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OSTD-Zhilian Cloud Service\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"sys-title-right\\\\\\\">\\u667a\\u8054\\u4e91\\u670d\\u52a1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MS-MFC-HttpSvr\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"action=\\\\\\\"i.cgi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: MS-MFC-HttpSvr\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: MS-MFC-HttpSvr\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LynxGuide\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login to LynxGuide\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"access_num=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"access_num=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"eXtplorer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login - eXtplorer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/eXtplorer.ico\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hikvision-iVMS\",\n  \"logic\": \"a|| (((b&&c) ||d||e||f||g|| (h&&i) || (j&&k) ||l||m||n||o) &&p)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"o=Hikvision, ou=louyu, cn=ivms8700\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"g_szCacheTime\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"iVMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"iVMS-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"tab-border code-iivms\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \" window.document.location = '/license!getExpireDateOfDays.action';\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"var uuid = \\\\\\\"2b73083e-9b29-4005-a123-1d4ec47a36d5\\\\\\\"; // \\u7528\\u4e8e\\u68c0\\u6d4bVMS\\u662f\\u5426\\u8d85\\u65f6, chenliangyf1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"class=\\\\\\\"enname\\\\\\\">iVMS-4200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"laRemPassword\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"//caoshiyan modify 2015-06-30 \\u4e2d\\u8f6c\\u9875\\u9762\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"/home/locationIndex.action?time=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"<div class=\\\\\\\"enname\\\\\\\">iVMS-4200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"Server: If you want know, you can ask me\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"if (refreshurl == null \\u0100 refreshurl == '') { window.location.reload();}\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"class=\\\\\\\"out\\\\\\\"><a href=\\\\\\\"download/iVMS-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Dasan-video surveillance\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"clear_cookie(\\\\\\\"login\\\\\\\");\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"PHPWEB\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PDV_PAGENAME\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Boda Communication -BSR2800\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BSR2800\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Motorola-BSR-router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BSR \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" Motorola Inc\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"We7\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/Widgets/WidgetCollection/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3c-neocean storage\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C Neocean Series Storage\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Flag - Safety email system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/qzmail/index.php\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-SRG3240\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SRG3240\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-SRG20\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SRG20\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SonicWALL-Company Products\",\n  \"logic\": \"a||b||c|| (d&&e) ||f||g||h||i\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: SonicWALL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: SonicWALL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"This request is blocked by the SonicWALL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Web Site Blocked\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"document.getElementById(\\\\\\\"nsa_banner\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"SonicWALL TZ \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"SonicWALL PRO \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"SonicWALL NSA \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"SonicWALL SRA \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FormMail\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/FormMail.pl\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"http://www.worldwidemart.com/scripts/formmail.shtml\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GpsGate-Server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GpsGate Server \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Group_Office-\\u516c\\u53f8\\u4ea7\\u54c1\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"groupoffice=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"groupoffice=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"powered by Group-Office\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\\\\\\"theme\\\\\\\":\\\\\\\"Group-Office\\\\\\\",\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Group-Office\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"maxprint-MaxLink-300-3A\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"MAXPRINT MaxLink-300-3A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"China Mobile - Dial Router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"_FIB_Registe\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u4e2d\\u56fd\\u79fb\\u52a8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-VC-Flex\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HP VC Flex\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ManageEngine-ADAudit\",\n  \"logic\": \"a||b||c||d|| (e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ManageEngine - ADAudit Plus\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ADAuditPlus Authentication\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ManageEngine - ADManager Plus\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"title=\\\\\\\"ManageEngine ADManager Plus\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"ADManager Plus\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"ManageEngine\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie - Internet Behavior Management\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"webui/images/ruijie\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u7edf\\u4e00\\u4e0a\\u7f51\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/php/common/checknum_creat.php?module=config_authnum&time=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u7edf\\u4e00\\u4e0a\\u7f51\\u884c\\u4e3a\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PC8024F\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">PC8024F\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JWM-patrol products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"RemoveIEToolbar\\\\\\\" CLASSid=\\\\\\\"CLSID:2646205B-878C-11d1-B07C-0000C040BCDB\\\\\\\" codebase=\\\\\\\"dll/nskey.dll\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FestOS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"title=\\\\\\\"FestOS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"css/festos.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ShoreTel-Converged-Conferencing\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<script src=\\\\\\\"/ics?action=get_branding_js\\\\\\\" charset=\\\\\\\"UTF-8\\\\\\\"></script>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<DIV style=\\\\\\\"visibility:hidden;display:none\\\\\\\" id=\\\\\\\"TEXT_OPENING_PRODUCT\\\\\\\">Opening *brand_product_name*</DIV>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Siemens-Router\",\n  \"logic\": \"a|| (b&&c&&d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"Siemens ADSL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Siemens \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Apache,Tomcat,Jboss\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Silex-Print-Server\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"silex_logo.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: silex Web Admin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: silex Web Admin\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Serendipity-PHP architecture\",\n  \"logic\": \"a||b||c||d||e||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"x-serendipity-contentlang\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"x-blog: serendipity\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"x-serendipity-interfacelang\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"x-serendipity-contentlang\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"x-blog: serendipity\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"x-serendipity-interfacelang\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"serendipity_editor.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Array-AVX-3600\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AVX 3600\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dgraph-\\u56fe\\u6570\\u636e\\u5e93\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Dgraph Ratel Dashboard\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Dgraph browser is available for running separately using the dgraph-ratel binary\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<title>Dgraph Ratel Dashboard</title>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hikvision--UDE\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"UDE Home\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Hikvision\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Changjietcom - Tplus\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"><script>location='/tplus/';</script></body>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DT-\\u9ad8\\u6e05\\u8f66\\u724c\\u8bc6\\u522b\\u6444\\u50cf\\u673a\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u9ad8\\u6e05\\u8f66\\u724c\\u8bc6\\u522b\\u6444\\u50cf\\u673a\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<h3 >\\u7cfb\\u7edf\\u5347\\u7ea7</h3>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"action=\\\\\\\"sysupgrade.php\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"360VISION-Video Monitoring\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<frame src=\\\\\\\"gLogon.htm\\\\\\\"/>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"360 Vision Technology\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dahua-TV wall\",\n  \"logic\": \"(a&& (b||c)) &&d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"estopAll\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"nav_screen\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"nav_creen\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Juniper-Firewall\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Juniper Firewall\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Juniper Srx Firewall\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JUNIPer-EX4200-48px\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ex4200-48px\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"jweb-title uppercase\\\\\\\"> - ex4200-48px\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JUNIPer-EX4200-48t\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ex4200-48t\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"jweb-title uppercase\\\\\\\"> - ex4200-48t\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JUNIPer-mx480\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Juniper Networks, Inc. mx480\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JUNIPer-srx1400\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Juniper Networks, Inc. srx1400\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JUNIPer-srx1500\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var modelphpstr = \\\\\\\"srx1500\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"srx1500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"SRX1500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Juniper SRX1500\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JUNIPer-srx3400\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Juniper Networks, Inc. srx3400\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JUNIPer-srx345\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Juniper Networks, Inc. srx345\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JUNIPer-srx3600\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Juniper Networks, Inc. srx3600\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"jweb-title uppercase\\\\\\\"> - srx3600\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JUNIPer-srx550m\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Juniper Networks, Inc. srx550m\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var modelphpstr = \\\\\\\"srx550m\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"class=\\\\\\\"jweb-title uppercase\\\\\\\"> - srx550m\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JUNIPer-srx650\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"srx650\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"srx650\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Embedthis-Appweb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"class=\\\\\\\"jweb-title uppercase\\\\\\\"> - srx650\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JUNIPer-EX4200-48p\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ex4200-48p\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"jweb-title uppercase\\\\\\\"> - ex4200-48p\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JUNIPer-QFX5100-48s-6q\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"qfx5100-48s-6q\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"jweb-title uppercase\\\\\\\"> - qfx5100-48s-6q\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JUNIPer-QFX5100-96s-8q\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"qfx5100-96s-8q\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Juniper-SRX220\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Juniper SRX-220h\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"juniper srx220\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Juniper SRX220h\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Juniper SRX220H2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"SRX 220\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kaonmedia-CableModem\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Kaonmedia cablemodem\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kerio-Operator\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Kerio Operator\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Kerio Operator\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KCT-Home-Gateway\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"KCT Home Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u5fae\\u64ce-\\u516c\\u4f17\\u53f7\\u7ba1\\u7406\\u7cfb\\u7edf\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5fae\\u64ce - \\u516c\\u4f17\\u5e73\\u53f0\\u81ea\\u52a9\\u5f15\\u64ce\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by WE7.CC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"class=\\\\\\\"copyright\\\\\\\">Powered by <a href=\\\\\\\"http://www.we7.cc\\\\\\\"><b>\\u5fae\\u64ce</b>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"onsubmit=\\\\\\\"return formcheck();\\\\\\\" class=\\\\\\\"we7-form\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"content=\\\\\\\"\\u5fae\\u64ce,\\u5fae\\u4fe1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Powered by WE7.CC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SangFor- tampermatch system\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u9632\\u706b\\u5899WEB\\u9632\\u7be1\\u6539\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<li style=\\\\\\\"color:#999999;margin-left:6px;list-style:circle inside;\\\\\\\">\\u5982\\u5fd8\\u8bb0\\u5bc6\\u7801\\uff0c\\u8bf7\\u4e0e\\u9632\\u706b\\u5899\\u7ba1\\u7406\\u5458\\u8054\\u7cfb</li>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"tamper/style/control.css\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Reblaze-Secure-Web-Gateway\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Reblaze Secure Web Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Reblaze Secure Web Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Trend-Smart-Protection-Server\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Smart Protection Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"lastrow_right\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"redirect_reason\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u8d8b\\u52bf\\u79d1\\u6280\\u4e91\\u5b89\\u5168\\u667a\\u80fd\\u9632\\u62a4\\u670d\\u52a1\\u5668\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AVTECH-AV787\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: AV-TECH\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: AV-TECH\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Handlink-wireless router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"---WG-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Handlink Technologies Inc.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Digital Digital - Internetwork-OS\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Digital China Internetwork Operating System\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Digital China Networks Limited Internetwork Operating System\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Digitalchina Internetwork Operating System\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Digi-TransPort\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Digi TransPort \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Digi-Connect-ME\",\n  \"logic\": \"(a||b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Digi Connect ME\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Digi Connect ME4\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Digi Connect ME\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Anheng Information - Ting Yu Web Application Firewall\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u660e\\u5fa1WEB\\u5e94\\u7528\\u9632\\u706b\\u5899\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<img id=\\\\\\\"company_logo\\\\\\\" src=\\\\\\\"images/waf.company.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"samPHPweb\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"songinfo.php\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Copyright Spacial Audio Solutions\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"http://www.spacialaudio.com/products/sambroadcaster/\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<meta HTTP-equiv=\\\\\\\"REFRESH\\\\\\\" content=\\\\\\\"0;url=playing.html\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DHI-HCVR5108HS-S3\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DHI-HCVR5108HS-S3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HCVR5108HS-S3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SARG\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Squid User's Access Report\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"logo\\\\\\\"><a href=\\\\\\\"http://sarg.sourceforge.net\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DHI-HCVR4232AN-S2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DHI-HCVR4232AN-S2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DHI-HCVR5104H-S2\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DHI-HCVR5104H-S2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DH-HCVR5104H-S2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"HCVR5104H-S2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DHI-HCVR5104HS-S3\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DHI-HCVR5104HS-S3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Adblock\",\n  \"logic\": \"(a&&b) || (c&&d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Adblock-Key\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-Adblock-Key\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Runnier - Network Product\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"http://www.rainier.net.cn/\\\\\\\">\\u5317\\u4eac\\u6da6\\u5c3c\\u5c14\\u7f51\\u7edc\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-UltraScalable-Specialist\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IBM UltraScalable Specialist\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tiandune - Data Security System SBU\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5929\\u878d\\u4fe1\\u6570\\u636e\\u5b89\\u5168\\u7cfb\\u7edfSBU\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"fullpage.js\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"fullpage.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"fullpage.min.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WindowsXP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Windows XP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Native OS : Windows 5.1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-J4139A\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Hewlett-Packard Company J4139A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HiPER-ROUTER\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HiPER ROUTER\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HiPER Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Digital trial timing platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"classid='clsid:E77E049B-23FC-4DB8-B756-60529A35FAD5'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u523b\\u5f55\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hisome-video surveillance\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"codebase=\\\\\\\"hisome_activex.exe\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mitel-web products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"pathname = pathName.replace(/esm_loginMain.htm/i,\\\\\\\"main.htm\\\\\\\");\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Avaya-System-Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"0;url=vsplogin.action\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C - next generation firewall\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"dl_margin0\\\\\\\" align=\\\\\\\"left\\\\\\\">Web\\u7f51\\u7ba1\\u7528\\u6237\\u767b\\u5f55</div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/php/common/checknum_creat.php?module=config_authnum\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"alarm system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ThAlarmWS.asmx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/aspnet_client/\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GOLDENCIS-NACP Network Access Control System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div class=\\\\\\\"tit_b\\\\\\\"> \\u901a\\u8fc7\\u7ba1\\u7406\\u5458\\u5206\\u914d\\u7684\\u5bc6\\u7801\\u4f7f\\u7528\\u7d27\\u6025\\u5165\\u53e3\\u3002</div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u91d1\\u76fe\\u5185\\u7f51\\u5b89\\u5168\\u7f51\\u7edc\\u51c6\\u5165\\u63a7\\u5236\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Information system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"PixelFuze\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mingde Technology - Data Monitoring\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"Imges/zgsh.ico\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u8346\\u5dde\\u660e\\u5fb7\\u79d1\\u6280\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Human resource management system\",\n  \"logic\": \"(a&&b&&c) || (d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"style/main_login.css\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div id=\\\\\\\"wrapper\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u4eba\\u529b\\u8d44\\u6e90\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"background: url(images/ente.png) no-repeat\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"document.theForm.action=\\\\\\\"loginLAP.jsp\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Softswitch firewall\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"name=\\\\\\\"token_code\\\\\\\"placeholder=\\\\\\\"\\u4ee4\\u724c\\u53e3\\u4ee4\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"name=\\\\\\\"secretkey\\\\\\\" id=\\\\\\\"secretkey\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"window.fgt_lang = JSON.parse(xhr.responseText)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HITACHI-CPRN-NLW\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"CPRN-NLW\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"CPRN-NLW\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Greatek-GWR-1200AC\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Greatek GWR-1200AC\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Greatek GWR-1200AC\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"GWR-1200AC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"cols=\\\\\\\"180,844\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MTC-QBR-1041WUv2S\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"QBR-1041WUv2S\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"QBR-1041WUv2S\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"QBR-1041WUv2S\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DrayTek-VigorAP900\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VigorAP900\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"VigorAP900\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Delta-Power-System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Delta Power System Controller\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dell-Management-Card\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DELL Web/SNMP Management Card \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DHI-HCVR4108HS-S2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DHI-HCVR4108HS-S2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DHI-HCVR4116HS-S2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DHI-HCVR4116HS-S2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DHI-HCVR4116HS-S3\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DHI-HCVR4116HS-S3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Orange-LiveboxProv3\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"LiveboxProv3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"LiveboxProv3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"COSHIP-EMTA\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EMTA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"spanQuickSet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Coship \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dell-Networking-OS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Dell Networking OS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KeyCloak-identity authentication system\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Welcome to Keycloak\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"alt=\\\\\\\"JBoss and JBoss Community\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"welcome/keycloak/node_modules/patternfly/dist/css/patternfly.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FusionReactor\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FusionReactor\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Titan-Firewall\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Titan Firewall\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a href=http://www.titansistemas.com.br><font color=blue>www.titansistemas.com.br</a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Titan Web Application Firewall\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"WEB\\u5e94\\u7528\\u9632\\u62a4\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Landmark-DUS\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"- Royalties Admin Application\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Landmark\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"/Landmark.Admin.Web_deploy/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Seagate-GoFlex\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"_gaq.push(['_setAccount', 'UA-2586520-12']);\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"https://www.seagateshare.com/?hipname=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<input id=\\\\\\\"inSubdomain\\\\\\\" name=\\\\\\\"inSubdomain\\\\\\\" type=\\\\\\\"text\\\\\\\" maxlength=\\\\\\\"30\\\\\\\" size=\\\\\\\"23\\\\\\\" value=\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SystemBase-PortBase\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"PortBase\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"PortBase\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Juniper-Web-Device-Manager\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Juniper Web Device Manager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MEGVII-company products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by Megvii \\u672c\\u4ea7\\u54c1\\u7531\\u65f7\\u89c6\\u00ae\\u63d0\\u4f9b\\u667a\\u80fd\\u6280\\u672f\\u652f\\u6301\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SlideShowPro-Director\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div id=\\\\\\\"simple-footer\\\\\\\"><span>SlideShowPro Director\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"</div> <!--close login-container--></body>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Intelligent parking lot integrated management platform\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u53a6\\u95e8\\u7acb\\u667a\\u901a\\u8baf\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8 \\u7248\\u6743\\u6240\\u6709\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u8d22\\u5bcc\\u4e2d\\u5fc3\\u667a\\u80fd\\u505c\\u8f66\\u573a\\u7efc\\u5408\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Citywide-VOIP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"document.write(\\\\\\\"<div id='web_bottom'><h2>\\\\\\\" + copy_right.VOIP + \\\\\\\"</h2></div>\\\\\\\");\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Enlightenment Star - Tianyi Internet Behavior Control\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Netoray NSG \\u4e0a\\u7f51\\u884c\\u4e3a\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u83b1\\u514b\\u65af\\u79d1\\u6280\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"NetPas-traffic management system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETPAS\\u6d41\\u91cf\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u7248\\u6743\\u6240\\u6709 <a href=\\\\\\\"http://www.netpas.cc\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DefensePro-product\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DefensePro with \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EMC-DD-System-Manager\",\n  \"logic\": \"(a&&b) ||c|| (d&&e) ||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"emc-favicon.ico\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DD System Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"DataDomain Enterprise Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/ddem\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"301 Moved Permanently\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"/ddem/login/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EGG traffic management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EGG\\u6d41\\u91cf\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco- Video Convention System\",\n  \"logic\": \"a|| (b&&c) || ((d||e||f) &&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TANDBERG Codec\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco Codec \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"TANDBERG\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"TANDBERG\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<frame src=\\\\\\\"framemiddle.htm\\\\\\\" name=\\\\\\\"No Name\\\\\\\" noresize marginheight=\\\\\\\"0\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Cisco Codec\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"TRENDnet-Router\",\n  \"logic\": \"((a||b||c||d) &&e) ||f|| (g&& (h||i))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<META HTTP-equiv=\\\\\\\"Content-Type\\\\\\\"contet=\\\\\\\"text/html; cahrset=ks_c_5601-1987\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TRENDnet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<link rel=\\\\\\\"stylesheet\\\\\\\" rev=\\\\\\\"stylesheet\\\\\\\" href=\\\\\\\"ubicom_style.css\\\\\\\" type=\\\\\\\"text/css\\\\\\\" />\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Router-Trendnet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"TrendNet Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"TRENDNET\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"var model= dev_info.model\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"modleName: misc.misc[0].model\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tianxing Netan-DTP\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TopWalk\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ftp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Memotec-CX-UA-1116\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CX-UA 1116\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DLink-Access-Point\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"D-Link 802.11b+ AP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"D-Link Access Point\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"D-link Corp. Access Point\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DLink-Firewall\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"D-Link Firewall\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"D-Link Firewall\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DLink-Wireless-Gateway\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"D-Link Wireless Voice Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DANFOSS-MCX06M1V\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DANFOSS MCX06M1V\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Logitech-Media-Server\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Logitech Media Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Logitech Media Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Logitech Media Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AirLink-AIC250\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelName>AIC250</modelName>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"AIC250\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \" realm=AIC250\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"AIC250\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \" realm=AIC250\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-X6781-Z37\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"huawei X6781-Z37\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"huawei X6781-Z37\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zhongke Dawn - Server\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server Mgmt\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"data-main=\\\\\\\"/app/main\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GC-Campus Unified Payment Platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \" href='\\u7edf\\u4e00\\u652f\\u4ed8\\u5e73\\u53f0\\u5b66\\u751f\\u4f7f\\u7528\\u8bf4\\u660e.doc'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-UIS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C UIS \\u7edf\\u4e00\\u7ba1\\u7406\\u77e9\\u9635\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"uisAlert\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alibaba-Ali Cloud-RDS management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"legend\\\\\\\">RDS\\u7ba1\\u7406\\u7cfb\\u7edf</div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SillySmart\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var slsBuild\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WIFICAM-WIFI camera\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"WIFICAM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"WIFICAM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"netentsec Technology - Intelligent Traffic Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7f51\\u5eb7\\u667a\\u80fd\\u6d41\\u91cf\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yunjing Net - Web Filter\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e91\\u51c0\\u7f51\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-CP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco Configuration Professional\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IP_COM-deep Internet behavior management\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6df1\\u5ea6\\u4e0a\\u7f51\\u884c\\u4e3a\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"assets/img/ip-com-logo.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ugwsessionid=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"parent.location.href=\\\\\\\"/login\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APPEX-LOTWAN- Network Acceleration System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"LotWan \\u5e7f\\u57df\\u7f51\\u52a0\\u901f\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5317\\u4eac\\u534e\\u590f\\u521b\\u65b0\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR650\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cradlepoint IBR650\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Login :: IBR650\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Crestron-AM-100\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Crestron Electronics AM-100 \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Crystal-Media-CM5000\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Crystal Media CM5000 \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Memotec-CX-U1010\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CX-U1010 RAN Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR600LPE\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cradlepoint IBR600LPE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Login :: IBR600LPE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-R6300v2\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR R6300v2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Netgear R6300V2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Netgear R6300V2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-R6700\",\n  \"logic\": \"a|| (b&&c) || (d&&e) ||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR R6700\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Netgear R6700&nbsp;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Netgear R6700\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Netgear R6700\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-R6300\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR R6300\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Netgear R6300\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Netgear R6300\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-WNR3500Lv2\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR WNR3500Lv2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Netgear-WNR3500Lv2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR WNR3500Lv2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"Netgear-WNR3500Lv2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-CG3700EMR-1CMNDS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR CG3700EMR-1CMNDS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR CG3700EMR-1CMNDS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-DG834Gv5\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETGEAR DG834Gv5\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NETGEAR DG834Gv5\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-CBR450\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CradlePoint CBR450\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Login :: CBR450\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-DGN1000\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR DGN1000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR DGN1000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-DGN1000SP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Netgear DGN1000SP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Netgear DGN1000SP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-DGN1000v3\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR DGN1000v3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR DGN1000v3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Qi Ming Star - Tianqing IPS\",\n  \"logic\": \"(a&& (b||c)) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/css/cover_admin.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NIPS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u5165\\u4fb5\\u9632\\u5fa1\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u5929\\u6e05\\u5165\\u4fb5\\u9632\\u5fa1\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-DGN2200M\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR DGN2200M\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR DGN2200M\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-DGN2200v3\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR DGN2200v3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DGN2200v3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NETGEAR Router DGN2200v3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tenda-AC15\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TENDA AC15\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MikroTik-ROS-SSH\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ROSSSH\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-ROUTER\",\n  \"logic\": \"((a||b||c||d) &&e) ||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETGEAR ROUTER\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NETGEAR-ROUTER\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Netgear Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"NETGEAR Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"NETGEAR ROUTER\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-VVG2000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETGEAR VVG2000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-WGR614v10\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR WGR614v10\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR WGR614v10\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NETGEAR Router WGR614v10\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Isode-M-Box\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Isode M-Box IMAP4rev1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-WNDR4000\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR WNDR4000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Netgear WNDR4000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-WNDR4300\",\n  \"logic\": \"a|| (b&&c) ||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETGEAR WNDR4300\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Netgear WNDR4300\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"NETGEAR Router WNDR4300\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Netgear WNDR4300\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-Omada-Controller\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"width=1300,initial-scale=1,minimal-ui\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUGHES-HT-1200\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HUGHES HT1200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HUGHES HT1200\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-wnr2200\",\n  \"logic\": \"a|| (b&&c) ||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETGEAR wnr2200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Netgear WNR2200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Netgear WNR2200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"NETGEAR-WNR2200\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-WNR614\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR WNR614\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NETGEAR Router WNR614\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LINKSYS-E2000\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Linksys E2000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"LinksysE2000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Linksys_E2000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Linsys E2000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Linksys E2000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LINKSYS-E2500\",\n  \"logic\": \"a||b||c||d||e|| (f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Linksys E2500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"LinksysE2500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Linksys_E2500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Linksys E2500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Linksys-E2500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Linksys E2500\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LINKSYS-E3000\",\n  \"logic\": \"a||b||c||d||e||f|| (g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Linksys E3000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"LINKSYS-E3000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"LinksysE3000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Linksys_E3000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Linksys-E3000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Linksys E3000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Linksys E3000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LINKSYS-E4200\",\n  \"logic\": \"a||b||c||d||e||f|| (g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Linksys E4200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Linksys-E4200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"LinksysE4200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"linksys_e4200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Linksys-E4200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Linksys E4200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Linksys E4200\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LINKSYS-EA4500\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Linksys EA4500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Linksys EA4500\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LINKSYS-RT31P2\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Linksys RT31P2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Linksys RT31P2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NextCloud-data security products\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Nextcloud</a> \\u2013 \\u7ed9\\u60a8\\u6240\\u6709\\u6570\\u636e\\u4e00\\u4e2a\\u5b89\\u5168\\u7684\\u5bb6\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Nextcloud\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TrueConf-Video Conference\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"TrueConf Server Guest Page\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DINSTAR-gateway\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"action=\\\\\\\"/goform/IADIdentityAuth\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-SIPGateway\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Cisco-SIPGateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Cisco-SIPGateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-Expressway\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Expressway-E</legend>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-ASA-5500-X\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"ASA&nbsp;5500-X\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oracle-Java-System-Messaging-Server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"(Sun Java(tm) System Messaging Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huizun Security - Video Core Security Gateway\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"VIEW-login\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"title').text('\\u89c6\\u9891\\u4f1a\\u8bae\\u5b89\\u5168\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-THR80GW-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET THR80GW series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-THR50EW-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET THR50EW series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Examstar-Exam Stars\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/examstar_icon.ico\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"content-bottom-text\\\\\\\">\\u8003\\u8bd5\\u661f\\u4e3a\\u60a8\\u63d0\\u4f9b\\u65b9\\u4fbf\\u3001\\u9ad8\\u6548\\u7684\\u8003\\u8bd5\\u670d\\u52a1</div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Verizon-Connect-WAN-3G\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Connect WAN 3G IA \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Connect WAN 3G Verizon\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Digi-ConnectCore-3G\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ConnectCore 3G\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-THR250G-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET THR250G series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-THR150G-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET THR150G series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-THR2000GX-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET THR2000GX series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-THR120G+-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET THR120G+ series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-THR100GP-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET THR100GP series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-THR120G-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET THR120G series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-SR7010-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET SR7010 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-TG-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET TG-NET series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie-EG\\u6613\\u7f51\\u5173\",\n  \"logic\": \"((a&&b) ||c|| (d&&e&&f&&g)) &&h\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ruijie\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"eg.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"product: ['\\u9510\\u6377\\u7f51\\u7edc\\u6709\\u9650\\u516c\\u53f8 EG\\u6613\\u7f51\\u5173\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"webchat.ruijie.com.cn\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"main.htm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"4008 111 000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"www.ruijie.com.cn/service/know.aspx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"H3C-SecPath firewall\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C SecPath Series\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"H3C SecPath \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"H3C SecPath Firewall System\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"H3C Firewall SecPath\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Qi Ming Star-Thai Information Security Operation Center\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6cf0\\u5408\\u4fe1\\u606f\\u5b89\\u5168\\u8fd0\\u8425\\u4e2d\\u5fc3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PaloAlto-GlobalProtect\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"global-protect/login.esp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"submitClicked\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"GlobalProtect Portal\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PolicyRetriever\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PolicyRetriever \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"heading1\\\\\\\">PolicyRetriever Service</P>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RSC400-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RSC400 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RSC500-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RSC500 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Comtrend-ADSL-Termination-Unit\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"COMTREND CORPORATION; ADSL Termination Unit\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RSC300-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RSC300 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Superred-Management System\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: OnceAS-WebContainer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"STYLE8\\\\\\\">\\u5317\\u4eac\\u4e07\\u91cc\\u7ea2\\u79d1\\u6280\\u80a1\\u4efd\\u6709\\u9650\\u516c\\u53f8</span>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: OnceAS-WebContainer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RSC200W-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RSC200W series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RSC200-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RSC200 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Comtech-CMR-5975\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CMR-5975\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CherryPy\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: CherryPy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: CherryPy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Zte-Bavo-Multimedia Business Center\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BAVO \\u591a\\u5a92\\u4f53\\u4e1a\\u52a1\\u4e2d\\u5fc3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/zxms80css.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Union-HAC\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HAC V3 \\u7248 <br>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/script/keysigned.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"class=\\\\\\\"leftbox\\\\\\\">HAC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/image/serchnotice.jpg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"HAC \\u8fd0\\u7ef4\\u5ba1\\u8ba1\\u7cfb\\u7edf\\u767b\\u5f55\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OMAudit\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OMAudit V3\\u7248\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Omeeting-OM video conference\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OM\\u89c6\\u9891\\u4f1a\\u8bae\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<p><a href=\\\\\\\"http://www.omeeting.com\\\\\\\" target='_blank'>Powered by\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"OM\\u89c6\\u9891\\u4f1a\\u8bae\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"onclick=\\\\\\\"GotoMeeting('/gotomeeting.php\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_lucent- programmatic phone switch\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OmniPCX for Enterprise\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"nmc/index.php\\\\\\\">Configuration / save - restore\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Changed by: Daniel Kaiber\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RS50W-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RS50W series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RS100W-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RS100W series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RS100-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RS100 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RN8000-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RN8000 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RN5000-series-router\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RN5000  series router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TG-NET RN5000 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RN6000-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RN6000 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RN4000-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RN4000 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RN300-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RN300 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RN2200-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RN2200 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RN2200D-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RN2200D series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"54Kefu-customer service system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"http://code.54kefu.net/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EMC-OneFS\",\n  \"logic\": \"((a||b||c) &&d) || (e|| (f&&g))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OneFS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/onefs/styles/onefs.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: OneFS Platform\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: OneFS Platform\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Isilon OneFS \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-R6250\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR R6250\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Netgear R6250\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Netgear R6250\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-DGN2200v4\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR DGN2200v4\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR DGN2200v4\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RN2000-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RN2000 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-BladeSystem\",\n  \"logic\": \"(a||b||c) &&d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HP BladeSystem\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"checkHpSimSSO\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"//hpoa:enclosureStatus/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"netcore-NR255P\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETCORE NR255P\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NETCORE NR255P\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"netcore-NR255G\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETCORE NR255G\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NETCORE NR255G\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"netcore-NR235P\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETCORE NR235P\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NETCORE NR235P\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"netcore-NR285G\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETCORE NR285G\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NETCORE NR285G\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RN1550-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RN1550 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-n7000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco NX-OS(tm) n7000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-N7700\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco NX-OS(tm) n7700\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RN1000-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RN1000 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-REC3550-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET REC3550 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dahua-ESS6024S\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Linux ESS6024S\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RE9800T-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RE9800T series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RE9800T-AC-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RE9800T-AC series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RE9500-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RE9500 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RE8800T-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RE8800T series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IQinVision-IQeye501\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IQinVision IQeye501\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IQeye501\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kanghai era - serial server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"COMHIGHER Serial IO Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ComHigher Web Configuration\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Windows7\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Windows Version 6.1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"windows 7 \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Native OS : Windows 6.1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Windows-2000\",\n  \"logic\": \"(a&&b&&c&&d&&e) || (f&&g&&h&&i)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Windows 2000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<h2>Login Form</h2>\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Windows 2000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"TG-RE8500-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RE8500 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RE8500-AC-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RE8500-AC series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RE6500-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RE6500 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MF4500w-Series\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Canon MF4500w Series\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<td>MF4500w Series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Carrier-Access-Router\",\n  \"logic\": \"a&& (b||c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Carrier Access Adit-Family Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Carrier Access Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CastleNet-CBW38G4J\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CBW38G4J\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CastleNet\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-Bandwidth-Quality\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco Bandwidth Quality Analysis\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco Bandwidth Quality Manager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-Controller\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco Controller\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Avaya-Common-Photonic-Layer\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Common Photonic Layer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RE500-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RE500 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"North Xinyuan - Company Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"vrv\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VMware-VirtualCenter\",\n  \"logic\": \"a||b||c||d||e||f||g||h\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"VMware VirtualCenter\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"VMware vSphere\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"vSphere Web Client\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"vSphere Management \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Issuer: cn=CA, dc=vsphere\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"url=vcops-vsphere/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"The vShield Manager requires\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"ID_VC_Welcome\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sagemcom-Router\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Sagem\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=Sagem\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"Sagem\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=Sagem\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sambar-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: SAMBAR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: SAMBAR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Russian-Apache\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"rus/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"reALVNC-\\u8fdc\\u7a0b\\u7ba1\\u7406\",\n  \"logic\": \"((a||b) &&c) || (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: realvnc\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"VNC viewer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<h2>Blog Comments</h2>\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: realvnc\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Postfix\",\n  \"logic\": \"(a&&b) || (c&&d&&e) || (f&&g&&h&&i) || (j&&k&&l)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"smtp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Postfix\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ESMTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"501 Syntax: EHLO hostname\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"220\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"502\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Error: command not recognized\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"250\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"SMTP READY\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"ESMTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"402 Error: command not implemented\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"250\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Mega-UPS-Card\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ups\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Mega System Technologies Inc\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Roxen\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Roxen\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: Roxen\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RE4500-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RE4500 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RE1550-V2-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RE1550-V2 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BlueCoat-SG8100\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Blue Coat SG8100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BlueCoat-SG900\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Blue Coat SG900\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EXFO-Company Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Brix Networks\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Broadband-Network-OS\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Broadband Networks Operating System Software\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Broadband-Residential-Gateway\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Broadband Residential Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Brocade-FCX624\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Brocade \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FCX624\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Brocade-FCX648\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Brocade \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FCX648\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BUFFALO-Print-Server\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BUFFALO INC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Print Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Nortel-Business-Policy-Switch-2000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Business Policy Switch 2000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Nortel-Business-Secure-Router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Business Secure Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Nortel \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-C300\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"C300 Version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"zte\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \" ZXAN product C300 of ZTE Corporation\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-C300M\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"C300M Version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"zte\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-C320\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"C320 Version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"zte\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ZXAN product C320 of ZTE Corporation\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Campbell_Scientific companies products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Campbell Scientific, Inc.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-Router\",\n  \"logic\": \"(a&&b) ||c||d||e||f|| (g&&h) ||i|| ((j|| (k&& (l||m)) ||n|| (o&&p)) &&q)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"PA Cisco Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"CISCO-ROUTER\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"level 15 access\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"realm=\\\\\\\"level_15_access\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"realm=\\\\\\\"access\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"server\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"realm=\\\\\\\"level_15_access\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"level_1_or_view_access\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"router.copyright\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"cisco\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"cisco_logo_about.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"src='/image/small_bg.jpg'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"src=\\\\\\\"/images/login_progress.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"q\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"TG-RE1000-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RE1000 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-NE-RE1500-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NE RE1500 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BlueCoat-SG600\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Blue Coat SG600\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Avaya-Nortel-Networks companies products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Nortel Networks\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bnmux-BCW710J2\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BCW710J2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"VENDOR: Bnmux;\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Broadcom-BFC-CableHome\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"BFC CableHome \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"VENDOR: Broadcom\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-VRP\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Huawei VRP \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ssh\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"-VRP-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"HUAWEI-VRP3.1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Power launch-DTCMS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"\\u52a8\\u529b\\u542f\\u822a,DTCMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Rainmail\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \".: <b>Rainmail Intranet Login </b> :.</div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/resources/RainmailVPNInstaller.exe\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Railo\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"railo-version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"railo-version\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Barracuda-WAF\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Barracuda Web Application Firewall\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"bni__barracuda_lb_cookie=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Barracuda-Web-Filter\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Barracuda Web Filter\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Apple-Base-Station\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Apple Base Station\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Barix-IC\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Barix Annuncicom IC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Barix-Instreamer\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Barix Instreamer Snr:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Barix Streaming Client\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"BARIX Instreamer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Isvision-portrait comparison system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e0a\\u6d77\\u94f6\\u6668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u4eba\\u50cf\\u6bd4\\u5bf9\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Avaya-P330\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Avaya Inc. - P330\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-Tecal-E6000\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Tecal E6000 MM Center-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"The standby MM can not view other board informations.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<td class='td' id='pssystemstate'></td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oracle-ILOM-Web-Server\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Oracle-ILOM-Web-Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: Oracle-ILOM-Web-Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Sun-ILOM-Web-Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Sun-ILOM-Web-Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RN1200\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RN1200 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EMS2600\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EMS2600\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<b>EMS2600 - \\u7528\\u6237\\u767b\\u5f55</b>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SURSEN - corporate cloud disk\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"360\\u4e66\\u751f\\u4f01\\u4e1a\\u4e91\\u76d8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<h1>\\u6b22\\u8fce\\u4f7f\\u7528360\\u4e66\\u751f\\u4e91\\u76d8\\uff01</h1>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<p>Copyright@2016 pan.surdoc.net All Rights</p>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-THR80G\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET THR80G series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Rabbit-Microcontroller\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Z-World Rabbit\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Z-World Rabbit\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"RackStar-Server-Appliance-OS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"This server is powered by the RackStar Server Appliance OS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"This server is powered by the RackStar Server Appliance OS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"QuesCom-Qportal\",\n  \"logic\": \"((a||b||c||d) &&e) ||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<head profile=\\\\\\\"http://www.quescom.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/qpuser.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: OctoWebSvr/COM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<FRAME src=\\\\\\\"/cticall/cticall_close.asp\\\\\\\" name=\\\\\\\"cticlose\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: OctoWebSvr/COM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NetArtMedia-Real-Estate-Portal\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://www.netartmedia.net/realestate\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Quantcast\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/quant.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SoftEther-VPN\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SoftEther VPN Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<li>Manage this VPN Server or VPN Bridge<ul>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Content-Length: 1999\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"softether.net\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BugScan\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<title>BugScan Memos</title>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by BugScan\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"teradata-nCluster\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Redirecting to Aster nCluster Management Console (AMC)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-Tivoli\",\n  \"logic\": \"(a||b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Tivoli NetView uses an Open Source web server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"banner/tivoli/tv_ICbanner.html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"teradata-Viewpoint\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Teradata Viewpoint\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Topper-host and network management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"mailto:kenstar@kenstar-group.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"China Telecom - Nike Support System\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var requiredfieldvalidator2 = document.all \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"nhmis.css\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yi Wei Help Station-Yiwei Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6613\\u7ef4\\u5e73\\u53f0</h1>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Puridiom\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"/puridiom/system/header.jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/puridiom/system/processing.jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Puridiom, Enabling Self-Service Procurement\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RapidSite\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Rapidsite\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Rapidsite\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Symantec-Raptor-Firewall\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Simple, Secure Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Simple, Secure Web Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sanshui Telecom Business Support Office System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"background=\\\\\\\"images/vista.jpg\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MOXA-NP5610\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NP5610\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Audi An Technology-ADA-Access\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \" Welcome to ADA Access Control System \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Shunde Government Information Publishing System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"for=\\\\\\\"ctl00_CPH_L_login_UserName\\\\\\\">CRM\\u5e10\\u53f7\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Emerson - Emerson Environment and Energy Monitoring System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"alert(\\\\\\\"\\u7f51\\u7edc\\u65ad\\u8fde\\u6216\\u8005IDU-S\\u6ca1\\u6709\\u542f\\u52a8.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Proliphix-Thermostat\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"printStatusHead(adStat\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Proxmox-VE\",\n  \"logic\": \"((a||b||c||d) &&e&&f) || (g&&h&&i) ||j\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"boxheadline\\\\\\\">Proxmox Virtual Environment\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href='http://www.proxmox.com' target='_blank' class=\\\\\\\"boxheadline\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Ext.create('PVE.StdWorkspace')\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: pve-api-daemon\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Server: pve-api-daemon\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Proxmox Virtual Environment\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Purveyor-Encrypt-WebServer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Purveyor Encrypt\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Purveyor Encrypt\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Pygopherd\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Generated by <A href=\\\\\\\"http://www.quux.org/devel/gopher/pygopherd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"QCubed-Development-Framework\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div id=\\\\\\\"codeVersion\\\\\\\">QCubed Development Framework\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<b>QCubed Version:</b>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Lenovo-LJ3900DN\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Lenovo LJ3900DN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"China Communication Service - Central SMSP SMS Business Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/SMRC/resources/default/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Duo Group-T7-PIM-8802\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Aurora T7-PIM-8802\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PowerAlert\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"PowerAlert\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"PowerAlert\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: PowerAlert HTTP server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: PowerAlert HTTP server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"poMMo\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"..poMMo.. .\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"powered by <a href=\\\\\\\"http://www.pommo.org/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"poMMo.confirmmsg = \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Posterous\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Posterous\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"posterous_site_data\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"_sharebymail_session_id=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PowerWeb\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: powerweb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: powerweb\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PowerSchool\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: PowerSchool\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: PowerSchool\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Pro-Chat-Rooms\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Pro Chat Rooms\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"border=\\\\\\\"0\\\\\\\" alt=\\\\\\\"Pro Chat Rooms\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href='http://prochatrooms.com'>Pro Chat Rooms</a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PRITLOG\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://pritlog.com/\\\\\\\">Pritlog\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<em id=\\\\\\\"jserror\\\\\\\">Please enable Javascript for full functionality\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ProcessMaker\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ProcessMaker Ver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"http://www.processmaker.com\\\\\\\" alt=\\\\\\\"ProcessMaker\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"alt=\\\\\\\"Powered by ProcessMaker\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Telecom risk governance platform\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u57fa\\u4e8e\\u8d44\\u4ea7\\u7684\\u7f51\\u7edc\\u5b89\\u5168\\u98ce\\u9669\\u7ba1\\u63a7\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u98ce\\u9669\\u6cbb\\u7406\\u5e73\\u53f0</div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MECHAT-voice video chat server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"obj.reserve = strReserve\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SU management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SU\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Telecom arrears recovery management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"v_login_Container\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Telecom host and network management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e3b\\u673a\\u53ca\\u7f51\\u7edc\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Delivery quality management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"images/EwUser_Title.jpg\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SANGFOR-\\u8fd0\\u7ef4\\u5b89\\u5168\\u7ba1\\u7406\\u7cfb\\u7edf\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location.href=\\\\\\\"https://\\\\\\\"+window.location.host+\\\\\\\"/fort/login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"teradata-Aster\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"images/Teradata_Aster_logo.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Telecommunications paperless auxiliary system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4f5b\\u5c71\\u7535\\u4fe1\\u65e0\\u7eb8\\u5316\\u8f85\\u52a9\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KYOCERA-ECOSYS-P3155dn\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ECOSYS P3155dn\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TK-F3188Ex\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TK-F3188Ex\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-SYNLOCK-BITS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HUAWEI SYNLOCK BITS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KYOCERA-ECOSYS-M3540dn\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ECOSYS M3540dn\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KYOCERA-ECOSYS series printers\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ECOSYS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-TiMOS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TiMOS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Polycom-SoundPoint\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Polycom SoundPoint IP Telephone HTTPd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Polycom SoundPoint IP Telephone HTTPd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"SoundPoint IP Configuration Utility\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Pixelpost\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"title=\\\\\\\"Powered by Pixelpost\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://www.pixelpost.org\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"title=\\\\\\\"Pixelpost - \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Pogoplug\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: HBHTTP \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: HBHTTP \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"PnPSCADA\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Welcome to Plug and Play Scada\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Login - PnPSCADA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"style='font-family:arial;font-size:10px'>PNPSCADA \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-Ascend-DSLPipe\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Ascend DSLPipe\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fortinet-AscenLink\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AscenVision (AscenLink)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"AscenVision AscenLink\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JUNIPer-JUNOS\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"JUNOS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HTTP\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"DPFax\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DPFax - MiniFaxServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"DPFax - MiniFaxServer \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<img src=\\\\\\\"images/dpfax-big.png\\\\\\\" border=\\\\\\\"0\\\\\\\" alt=\\\\\\\"DPFax\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-SBG5500\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SBG5500\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MikroTik-RouterOS\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RouterOS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HTTP\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"RouterOS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"configuration\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yeastar-S300\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Yeastar S300\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXV10-W300B\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"ZXV10 W300B\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"ZXV10 W300B\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<modelName>ZXV10 W300B</modelName>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DolphinScheduler\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"let node_env = 'true'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<title>DolphinScheduler</title>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ArubaOS\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ArubaOS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/screens/wms/wms.login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXV10-W300\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"ZXV10 W300\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"ZXV10 W300\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-TD-W8901G\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TD-W8901G\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TD-W8901G\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXHN-H108L\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"ZXHN H108L\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZXHN H108L\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HIKVISION-\\u7efc\\u5408\\u5b89\\u9632\\u7ba1\\u7406\\u5e73\\u53f0\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location.href.indexOf(\\\\\\\"/index/carFile/\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dahua-Smart Park Integrated Management Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/WPMS/asset/common/js/jsencrypt.min.js\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP-LINK-TD-8840T\",\n  \"logic\": \"a||b||c||d||e||f||g||h\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TD-8840T\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TP-LINK ADSL2+ Modem Router TD-8840T\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ADSL2+ Modem Router TD-8840T/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"0.8.0 1.1 v0007.0 Build 130621 Rel.36846n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"0.8.0 2.4 v0007.0 Build 141022 Rel.38384n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"realm=\\\\\\\"TD-8840T\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"realm=\\\\\\\"TP-LINK ADSL2+ Modem Router TD-8840T\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"ADSL2+ Modem Router TD-8840T/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IQinVision-IQeye755\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IQinVision IQeye755\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IQeye755\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SeaweedFS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SeaweedFS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SuperMap-gis application server\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5317\\u4eac\\u8d85\\u56fe\\u8f6f\\u4ef6\\u80a1\\u4efd\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SuperMap iServer 9D\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HIKVISION-Hi Watch Cloud Video\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u55e8\\u770b\\u4e91\\u89c6\\u9891</p>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hezhong Data - Video Access System\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"lib/ext/ext-lang-zh_CN.js\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"id=\\\\\\\"bodyid\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HikVision-Safety Gateway\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"./webui/js/jquerylib/jquery-1.7.2.min.js\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5b89\\u5168\\u63a5\\u5165\\u7f51\\u5173\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-Unisphere\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7528\\u4e8e SC \\u7cfb\\u5217\\u7684 Unisphere\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Unisphere for SC Series\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-P-660HW-D1\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"P-660HW-D1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"P-660HW-D1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"P-660HW-D1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"National standard gateway management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"title>\\u56fd\\u6807\\u7f51\\u5173\\u7ba1\\u7406\\u7cfb\\u7edf</title\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOPTEL-RG2000\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"action=/goform/login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"css/htmleaf-demo.css\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dahua-Video Image Information Library\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"JS_title\\\\\\\">\\u89c6\\u9891\\u56fe\\u50cf\\u4fe1\\u606f\\u5e93</span>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HikVision - Data Diagnostic Tool\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5927\\u6570\\u636e\\u8bca\\u65ad\\u5de5\\u5177</strong>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Vehicle monitoring cloud platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"gps-web\\\\\\\"></iframe>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sophos-UTM-Web-Protection\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by UTM Web Protection\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"F5-TrafficShield\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"asinfo=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"F5-TrafficShield\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"asinfo=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"F5-TrafficShield\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alibaba - Ali Cloud - Yundu\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: YUNDUN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Set-Cookie: yundun_404\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: YUNDUN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Set-Cookie: yundun_404\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Wallarm-WAF\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: nginx-wallarm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: nginx-wallarm\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Newdefend-WAF\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: newdefend\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: newdefend\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Radware-AppWall\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-SL-CompState\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<H1>Unauthorized Activity Has Been Detected\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASP.NET-RequestValidationMode\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HTTP/1.1 500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HttpRequestValidationException\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Request Validation has detected a potentially dangerous client input value\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Scalix-mail system\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Scalix IMAP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Scalix POP3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Scalix SMTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"paloalto-PA-820\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PA-820\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PA-820\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"id=\\\\\\\"heading\\\\\\\">GlobalProtect Portal</div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HARBOR\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"harbor.app\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Harbor\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-ISA-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"The ISA Server denied the specified Uniform Resource Locator\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"The server denied the specified Uniform Resource Locator (URL). Contact the server administrator\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tenda-N6\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var sys_target = \\\\\\\"N6\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"loagin_title\\\\\\\">TENDA N6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tenda-TEI602\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var sys_target = \\\\\\\"TEI602\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tenda-W1800R\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var sys_target = \\\\\\\"W1800R\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-iBMC\",\n  \"logic\": \"a||b||c|| (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"iBMC Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/bmc/php/getmultiproperty.php\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/bmc/resources/css/cmn.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"pn\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"iBMC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ou Co Software\",\n  \"logic\": \"a||b||c||d|| (e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6c5f\\u82cf\\u6b27\\u7d22\\u8f6f\\u4ef6\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/ocensoftComm.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u6280\\u672f\\u652f\\u6301\\uff1a<a href=\\\\\\\"http://www.oceansoft.com.cn/\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Aspx/CaseCenter/ACaseCenter.aspx?pagetype=sxcx&casetype=sscs&casename=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"href=\\\\\\\"/e/action/ListInfo/?\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"\\u6c5f\\u82cf\\u6b27\\u7d22\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tenda-CH21\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var sys_target = \\\\\\\"CH21\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ARRIS-Home-Media-Gateway\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Arris Whole Home Solution Media Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Pivot-\\u4ea7\\u54c1\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered byPivot\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"http://www.pivotlog.net/?ver=Pivot\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"phxEventManager\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<td><div class=\\\\\\\"minicalmonth\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"pem-includes/xajax/xajax_js/xajax_core.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Powered by phxEventManager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Pi3Web\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"server: Pi3Web\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: Pi3Web\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Pivotal-CRM\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<frame name=\\\\\\\"hidden\\\\\\\" src=\\\\\\\"xmlloader.asp?type=portal\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"title=\\\\\\\"Hidden\\\\\\\" src=\\\\\\\"xmlloader.asp?type=portal\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tenda-TEI480\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var sys_target = \\\\\\\"TEI480\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tenda-W30E\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var sys_target = \\\\\\\"W30E\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u5de5\\u4e1a\\u63a7\\u5236\\u4ea7\\u54c1\",\n  \"logic\": \"a||b||c||d||e||f||g||h||i|| (j&&k) ||l||m||n||o||p||q||r||s\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"codesys\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"gesrtp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"omron\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"modbus\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"fox\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"ethernetip\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"dnp3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"bacnet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"melsecq\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"5094\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"hart\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"pcworx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"proconos\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"redlion\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"iec\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"vertx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"q\",\n    \"feature\": \"moxa\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"r\",\n    \"feature\": \"lantronix\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"s\",\n    \"feature\": \"opcua\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u7528\\u53cb-U8\\u8fdc\\u7a0b\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"javascript/bw8.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var servervendor = 'yonyouupcn'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CUISEC- Safety island chain\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u8054\\u901a\\u667a\\u6167\\u5b89\\u5168\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"r=e\\uf8f5e.__esModule?function\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dingjie Software - Enterprise Mobile Navigation Software\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"common_footer1030_textFontLink\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HOPERUN- Assessment Evaluation System\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=./static/js/manifest\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<title>\\u8003\\u6838\\u8bc4\\u6d4b\\u7cfb\\u7edf</title>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Delivery application\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<title>\\u4ea4\\u4ed8\\u5e94\\u7528</title>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"http://res.wx.qq.com/open/js/jweixin\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CodePush-server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"CodePush service is hotupdate services\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Marine shipping system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6d77\\u4e8b\\u9009\\u8239\\u7cfb\\u7edf</el-col>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"phpSysInfo\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var stargeturl = \\\\\\\"index.php?disp=dynamic\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"phpSysInfo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"phpSysInfo - \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"href=\\\\\\\"http://phpsysinfo.sourceforge.net/\\\\\\\">phpSysInfo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/templates/phpsysinfo.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"phpLDAPadmin\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"phpLDAPadmin - \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"http://phpldapadmin.sourceforge.net/Documentation\\\\\\\" onclick\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"images/default/logo.png\\\\\\\" title=\\\\\\\"phpLDAPadmin logo\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHP-Link-Directory\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"powered by phpLinkDirectory\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"PHP Link Directory\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"phpMumbleAdmin\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"phpmumbleadmin_session=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"phpmumbleadmin_session=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"phpMoneyBooks\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href='http://phpMoneyBooks.com'>phpMoneyBooks\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHP_LIVE- Product\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Knowledge BASE (FAQ)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by <a href='http://www.phplivesupport.com/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"phpList-\\u90ae\\u4ef6\\u7cfb\\u7edf\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Michiel Dethmers - http://www.phplist.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"phplist version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"&copy; <a href=\\\\\\\"http://phplist.com\\\\\\\" target\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHP-Server-Monitor\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PHP Server Monitor\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"target=\\\\\\\"_blank\\\\\\\">PHP Server Monitor\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://www.phpservermonitor.org/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"phpRemoteView\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"phpRemoteView\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<h2>Blog Comments</h2>\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"style='Font: 8pt Verdana'>phpRemoteView\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHP-Support-Tickets\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"title=\\\\\\\"php support tickets\\\\\\\">PHP Support Tickets\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PHP Support Tickets\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"Triangle Solutions Ltd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Jin Sanli - Video Monitoring\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cn=santachi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"VISIBILITY: inherit; WIDTH: 200px; Z-INDEX: 2\\\\\\\"><a href=\\\\\\\"ParamList.html\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"//\\u5207\\u6362iFrame \\u51fd\\u65700-\\u89c6\\u9891\\u3001\\u5f55\\u50cf\\uff1b1-\\u53c2\\u6570\\u3001\\u65e5\\u5fd7\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"New Jingxiang - Media Activity Management Platform\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"swiper/swiper.min.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/kaptcha\\\\\\\" id=\\\\\\\"kaptcha\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Crocus\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"for=\\\\\\\"inp_verification\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"Images/logo.png\\\\\\\"\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Enterprise login management system\",\n  \"logic\": \"(a&&b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Themes/Scripts/FunctionJS.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"txtUserName\\\\\\\").focus(); //\\u9ed8\\u8ba4\\u7126\\u70b9\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"id=\\\\\\\"cp\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"phpMyBible\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div class='chaphead'>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"phpMyRealty\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<!-- Main Content table : stop -->\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://www.phpmyrealty.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-OMNI-ADSL\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"OMNI ADSL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"OMNI ADSL \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"ZyXEL Keenetic Omni\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mingyuan Yun - Sales Management System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"value=\\\\\\\"\\u660e\\u6e90\\u552e\\u697c\\u7ba1\\u7406\\u7cfb\\u7edfV5.0\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<img id=\\\\\\\"erp\\\\\\\" src=\\\\\\\"/_imgs/login/zs_erp.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fe-collaborative platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"js39/flyrise.stopBackspace.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"yongyou - Smart Factory\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/modules/core/client/views/sideMenu.client.view.html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IDA-VOIP\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"IDA 20-28 VOIP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"IDA VoIP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"IDA 20-28 VOIP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"IDA VoIP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APC-InfraStruxure\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"InfraStruXure\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"InfraStruXure\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"THE_MASTER_SWITCH - Company Products\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"MasterSwitch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"MasterSwitch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Smart Community Integrated Management Cloud Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"container_huanlegendtext\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ARRIS-D5-Universal-EdgeQAM\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ARRIS D5 Universal EdgeQAM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ARRIS-DOCSIS-Modem\",\n  \"logic\": \"(a||b||c) &&d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ARRIS DOCSIS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ARRIS Euro-DOCSIS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ARRIS EuroDOCSIS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Modem\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APC-InfraStruXure-Manager\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"APC InfraStruXure Manager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APC-PDU\",\n  \"logic\": \"a&& (b||c||d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"APC MasterSwitch PDU\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"APC Metered Rack PDU\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"APC Switched Rack PDU\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Apple-AirPort\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Apple AirPort\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Arcor-Easy-Box\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Arcor-Easy Box\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Arista-Networks-EOS\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Arista Networks EOS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hexabyte-ADSL\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Hexabyte ADSL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Hexabyte ADSL\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"iB-WRA150N\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"iB-WRA150N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"iB-WRA150N\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Schneider-EGX100\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"EGX100\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"EGX100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-ES-2024A\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"ES-2024A\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ES-2024A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-ES-2024PWR\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"ES-2024PWR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ES-2024PWR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Easy-Link-RFIP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Easy-Link RFIP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Easy-Link RFIP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hua-EchoLife-Home-Gateway\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"EchoLife Home Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"EchoLife Portal de Inicio\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"EchoLife HG520s\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"EchoLife HG520s\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"EchoLife Home Ga\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Leading Technology - Helping Xiaoman Product Control Platform\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cdn.jsdelivr.net/npm/vue\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<title>secondary_nodes</title>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ULTIMUS-BPM\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Ultimus BPM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"toptitle\\\\\\\">BPM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP-LINK-Archer-D20\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"0.8.0 1.1 v0049.0 Build 150728 Rel.33681n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"1.2.0 0.8.0 v0049.0 Build 160216 Rel.60153n\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D-Link-DSL-6850U\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"DSL-6850U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DSL-6850U\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-NE5000E\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HUAWEI NE5000E\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u4e00\\u6240-\\u7f51\\u9632G01\\u65b0\\u7248\\u672c\",\n  \"logic\": \"(a&&b) || (c&&d) || (e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"security_session_verify\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"yunsuo_session_verify\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"http://bbs.yunsuo.com.cn\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<img class=\\\\\\\"yunsuologo\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"security_session_verify\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"yunsuo_session_verify\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"DZS-ZHONE-INNBOX-module\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Innbox \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Intelbras-DVR\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Intelbras DVR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IPR400\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IPR VoIP Device IPR400 \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LevelOne-IPS-0008\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IPS-0008\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IQinVision-IQeye302\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IQinVision IQeye302\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IQeye302\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AgileBPM\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"logo-element\\\\\\\">BPM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"logo-element\\\\\\\">AGILE-BPM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Interactive virtual ship display system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4ea4\\u4e92\\u5f0f\\u865a\\u62df\\u8239\\u8236\\u5c55\\u793a\\u7cfb\\u7edf</a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Baoli-Bio-Lims\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/lims/js/login.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/lims/dist/css/font-awesome.min.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zhongke Henglun - Identification Self-Service System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"iAUS/media/js/login/login.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-SSL-VPN\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Keep me signed in</span>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Welcome to SSL VPN</h1>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"H3C SSL VPN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alibaba-Ali Monitoring System\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u963f\\u91cc\\u96c6\\u56e2\\u76d1\\u63a7\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/monitor/css/monitor.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"/monitor/monitoritem/monitorItemList.htm\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DLink-DSL-Gateway\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"DSL Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"DSL Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DSL-2640T\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"DSL-2640T\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DSL-2640T\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Smart City Construction Project Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"sitenametitle\\\\\\\">\\u667a\\u6167\\u57ce\\u5efa\\u9879\\u76ee\\u7ba1\\u7406\\u7cfb\\u7edf</p\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ECash-System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<br>\\u6b22\\u8fce\\u4f7f\\u7528E-Cash\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Intelligent Warehouse Management System\",\n  \"logic\": \"(a&&b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"name=\\\\\\\"ToolkitScriptManager1_HiddenField\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"headerNav\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"event.srcElement.type!='reset\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hongye Technology - Supply Chain System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/images/hyscm.jpg\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sub-energy-energy storage and monitoring platform\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<title>\\u6749\\u6749\\u50a8\\u80fd\\u76d1\\u63a7\\u5e73\\u53f0</title>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"AMap.MouseTool,AMap.DistrictSearch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/dist/libs/layui/css/layui.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Haig Logistics-4PL Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"document.cookie=\\\\\\\"4pl07username=\\\\\\\"+ArrayStr\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"phpCollab\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<!-- Powered by PhpCollab\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content='PhpCollab\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Delsa companies products\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Delsa Telecommunication Technology\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Delsa Telecommunication Technology\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APC-PowerNet\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"APC Embedded PowerNet\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APC-Environmental-Monitoring\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"APC Environmental Monitoring Unit\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"phpFreeChat\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"powered by phpfreechat\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"http://www.phpfreechat.net/pub/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Gree-logistics management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/Images/gree/gree.gif\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"phpDenora\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"powered by phpDenora\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Chat4all phpDenora\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://denorastats.org/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EUESOFT - Attendance Software\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"link.description = \\\\\\\"\\u4ebf\\u534e\\u8f6f\\u4ef6\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie-wireless device\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var apmainpage = 'ap/main.htm\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mandala - Medical Customer Service System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<h2>\\u66fc\\u9640\\u7f57\\u533b\\u7597</h2>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EDRT-Research System\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"payPassword_container\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class='panel-heading'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Vixtel-network speed test\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"classid=\\\\\\\"CLSID:53028063-426B-446D-85F9-62E9E3DC5501\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: NetVista Server/3.0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Teamdoc-Document Management System\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"LabelLink\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"id=\\\\\\\"Table_01\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHP-CSL\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"PHP Code Snippet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"title=\\\\\\\"PHP-CSL\\\\\\\">PHP-CSL\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"phpDealerLocator\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"PythonSelect\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"for=\\\\\\\"Dealer_Radiuss_Dealer_Zip\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cloud time political - online test system\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=https://unpkg.com/element-ui/lib/theme-chalk/index.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<title>\\u4e91\\u65f6\\u653f\\u5728\\u7ebf\\u8003\\u8bd5\\u7cfb\\u7edf</title>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UniView-video surveillance\",\n  \"logic\": \"(a||b) || (c&&d) ||e||f||g||h||i||j|| (k&&l) || (m&&n) ||o||p||q|| (r&&s) || (t&& (u||v||w||x||y)) ||z||rhFO|| (jyIx&&MxoK) ||ZLmG||NJHj||UyTe||RNzu||fred||LMdw|| (PCmd&&Wexu&&KkBm) || (UsYB&&Dbnk) || (bEHO&& (qbiC||hsqm))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"to=\\\\\\\"href_version_div\\\\\\\">\\u7248\\u672c<\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"gjs_oemtype = \\\\\\\"Uniview\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Unisvr \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"H3CMPP.Lang.DevManage\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<!-- <embed src=\\\\\\\"null.wav\\\\\\\" loop=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"var GJS_\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Zhejiang Uniview Technologies Co.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"ISC2500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"\\u516c\\u5b89\\u56fe\\u50cf\\u5e94\\u7528\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"<iframe name=\\\\\\\"banner\\\\\\\" id=\\\\\\\"banner\\\\\\\" hidefocus=\\\\\\\"hideFocus\\\\\\\" marginwidth=\\\\\\\"0\\\\\\\" marginheight=\\\\\\\"0\\\\\\\" src=\\\\\\\" ../index.htm?clientipaddr=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"isun = true;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"id=\\\\\\\"userName\\\\\\\" onkeypress=\\\\\\\"check_username(this)\\\\\\\" value=\\\\\\\"admin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"<a href=\\\\\\\"#\\\\\\\" onclick=\\\\\\\"popHelp(varHelpAncValue);\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"classid=\\\\\\\"clsid:0796C71F-AA80-4921-B6D1-AA4252D097AE\\\\\\\" id=\\\\\\\"recordManager_activeX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"<meta http-equiv=\\\\\\\"refresh\\\\\\\" content=\\\\\\\"0; url=cgi-bin/main.cgi?webid=1\\\\\\\" />\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"uniser\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"q\",\n    \"feature\": \"\\u56fd\\u6807\\u914d\\u7f6e\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"r\",\n    \"feature\": \"recordManager_activeX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"s\",\n    \"feature\": \"popHelp(varHelpAncValue);\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"t\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"u\",\n    \"feature\": \"HIC6622X22-5CIR-H\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"v\",\n    \"feature\": \"HIC3121ES-DF36IR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"w\",\n    \"feature\": \"HIC6621EX22I-5LA-IT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"x\",\n    \"feature\": \"HIC6622I-HX30IR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"y\",\n    \"feature\": \"HIC3121ES-DF60IR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"z\",\n    \"feature\": \"Uniview login:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"rhFO\",\n    \"feature\": \"ISC2500-E login:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"jyIx\",\n    \"feature\": \"cgi-bin/main.cgi?web_id=1&langinfo=-3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"MxoK\",\n    \"feature\": \"<FORM id=loginForm name=loginForm action=cgi-bin/main.cgi method=post >\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"ZLmG\",\n    \"feature\": \"ISC3500-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"NJHj\",\n    \"feature\": \"DVR102-16 login:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"UyTe\",\n    \"feature\": \"HIC6622X22-5CIR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"RNzu\",\n    \"feature\": \"HIC2221E-CF60IR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"fred\",\n    \"feature\": \"NVR208-32 login:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"LMdw\",\n    \"feature\": \"ISC3616\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"PCmd\",\n    \"feature\": \"<label for='autoLogin' class=\\\\\\\"login_autoLoginLabel\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"Wexu\",\n    \"feature\": \"Text.VideoManageSystem\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"KkBm\",\n    \"feature\": \"wanlanswitch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"UsYB\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"Dbnk\",\n    \"feature\": \"HC121\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"bEHO\",\n    \"feature\": \"GJS_PRODUCTTYPE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"qbiC\",\n    \"feature\": \"uniview\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"hsqm\",\n    \"feature\": \"\\u5b87\\u89c6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Software - Teaching Integrated Information Services Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/jwglxt/logo/favicon.ico\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hua Shu Technology-Mobile Medical Imaging Diagnostic System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"\\u4e13\\u4e1a\\u7684WEB\\u533b\\u5b66\\u5f71\\u50cf\\u6d4f\\u89c8\\u5668\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kedacom-video surveillance\",\n  \"logic\": \"((a&&b) || (c&&d) ||e||f|| (g&&h) || (i&&j) ||k|| (l&&m) || (n&&o&&p) || (q&&r)) || (s&&t&&u) || (v&&w) ||x|| (y&&z&&wZRP)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var syslan = window.navigator.userLanguage;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: KEDACOM-Webs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Meeting \",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"KEDACOM login:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"KEDACOM-pc\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"/kedacom.common.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"codebase=\\\\\\\"kdmv53.cab#version=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"kedacom-hs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"top.location.href = \\\\\\\"login.htm?_=\\\\\\\"+new Date().getTime()\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"<strong>\\u79d1\\u8fbe\\u7cfb\\u5217\\u97f3\\u89c6\\u9891\\u89e3\\u7801\\u5668</strong>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"<strong>\\u7248\\u672c\\u4fe1\\u606f\\uff1a</strong>SVR Station\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"q\",\n    \"feature\": \"background=\\\\\\\"images/keda_svrstation.jpg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"r\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"s\",\n    \"feature\": \"onkeyup=\\\\\\\"pwStrength(this.value)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"t\",\n    \"feature\": \"UserMailOKclick\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"u\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"v\",\n    \"feature\": \"GoAhead-http\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"w\",\n    \"feature\": \"/index.htm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"x\",\n    \"feature\": \"o=kedacaom, ou=keda\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"y\",\n    \"feature\": \"location.href='./login.htm';\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"z\",\n    \"feature\": \"setTimeout(\\\\\\\"goIndexPage()\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"wZRP\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Free plan-CMS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by zychr.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by zychr.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Top group buy\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"help/zuitu.php\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Windows10\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"smb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"windows 10\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"OS: Windows 10\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"North Source - Bean IM\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u8fde\\u8c46\\u8c46\\u5b98\\u7f51\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<h3>\\u8fde\\u8c46\\u8c46PC\\u5ba2\\u6237\\u7aef </h3>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"http://im.vrv.cn/server-securitycenter/password/goRetrieval.vrv\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"class=\\\\\\\"loginusername\\\\\\\" value=\\\\\\\"\\\\\\\" placeholder=\\\\\\\"\\u8fde\\u8c46\\u8c46\\u8d26\\u53f7/\\u90ae\\u7bb1/\\u624b\\u673a\\u53f7\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"\\u4fe1\\u6e90\\u8c46\\u8c46\\u5b98\\u7f51\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"class=\\\\\\\"wj-text wj-title\\\\\\\">\\u4e0b\\u8f7d\\u4fe1\\u6e90\\u8c46\\u8c46</p>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Adobe-PhoneGAP-product\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"phonegap.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"cordova.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dotproject\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/images/dp_icon.gif\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-7706\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"simple/view/login.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"7706\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"S7706\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"simple/view/login.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"7706\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"S7706\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Mobinat-Wireless-Router\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"http://mobinnet.ir/faq\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"http://mobinnet.ir/coverage\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"pyspider\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"pyspider dashboard\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-WLAN wireless controller\",\n  \"logic\": \"((a&&b) || (c&&d)) &&e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"background:transparent;border:0px;color=#DE0108;font-weight:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u4e2d\\u5174\\u901a\\u8baf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"var url=\\\\\\\"resetWebsvr.php?act=reset\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u4e2d\\u5174\\u901a\\u8baf - WLAN\\u65e0\\u7ebf\\u63a5\\u5165\\u63a7\\u5236\\u5668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"PageUp-People\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by PageUp People\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"pageupLink\\\\\\\" href=\\\\\\\"http://www.pageuppeople.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PANDORAFMS-\\u4ea7\\u54c1\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Pandora FMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"title=\\\\\\\"Pandora RSS Feed\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"phpATM\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"viewer_bottom.php?file=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by phpATM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Powered by PHP Advanced Transfer Manager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BlueCoat-PacketShaper\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PacketShaper Customer Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"pscfgstr=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"pscfgstr=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PageCookery-Microblog\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://pagecookery.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Phoenix-Contact-Device\",\n  \"logic\": \"a|| (b&&c) ||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Phoenix-Contact\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Phoenix-Contact\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: powered by SpiderControl\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: powered by SpiderControl\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Phorum\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"powered by <a href=\\\\\\\"http://www.phorum.org\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PG-Roomate-Finder-Solution\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by PG Roomate Finder Solution\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://www.realtysoft.pro\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Pharos-LPC\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Pharos LPC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"PharosLPC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"PharosLPC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GBase-database\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"gbase\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Spring-Cloud-Netflix\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Hystrix Dashboard\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Application-Context: hystrix-dashboard:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-Application-Context: hystrix-dashboard:\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Central Coal Works - Coal Mine Safety Production Risk Monitoring Early Warning System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/CariWeb/Images/images-new\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Powder-SiteFactory\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"ValidationSummary1\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"user_main_l\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"name=\\\\\\\"GENERATOR\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"ValidationSummary1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"class=user_main_l\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"name=GENERATOR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Iron Army - Wisdom Site Service System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"document.domain == \\\\\\\"eqs.jztj.net\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"QM-electronic facade management system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"assets/css/fdb.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"polyfills.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bronze RDM-Company Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u767b\\u5f55\\u9752\\u94dc\\u5668RDM</b></div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"mySCADA-HMI\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"if(window.__MYSCADAVERSION)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"220 Browser Ftp Server.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"12\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"mySCADA HMI\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CDATA-server\",\n  \"logic\": \"a&&  (b||c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var key = evt.keyCode?evt.keyCode:evt.which\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"placeholder=\\\\\\\"\\u8bf7\\u8f93\\u5165\\u7ba1\\u7406\\u5458\\u5bc6\\u7801\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"placeholder=\\\\\\\"Please enter administrator password\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ProxyChains_NG\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: ProxyChain\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: ProxyChain\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Venom\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Venom\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"venom-dev\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"venom-dev\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"icmp-reverse-shell\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Reverseshell\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EvoStream-MediaServer\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: EvoStream Media Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Seentech-Network Sports\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e2d\\u79d1\\u65b0\\u4e1a\\u7f51\\u7edc\\u5b89\\u5168\\u5ba1\\u8ba1\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Amino-streamer\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"rtsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Amino streamer \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Amino streamer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huan Chuang-Company Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/cgi-bin/snmpManager.cgi?cgimodule=login\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cdata-OLTs\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Command Line Interface for EPON System\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"OLT EPON E8PS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DCN-firewall\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DCFOS Web Management\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Let me-CRM\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/Resources/imgs/defaultannex/loginpictures/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u6b22\\u8fce\\u4f7f\\u7528\\u4efb\\u6211\\u884cCRM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Xiang Xiang Software - Xiangu OA\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"obj.src = \\\\\\\"CreateCheckCode.aspx?id\\\\\\\"+strMath;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"name=\\\\\\\"Button1\\\\\\\" value=\\\\\\\"\\\\\\\" onclick=\\\\\\\"javascript:return checkfrom();\\\\\\\" id=\\\\\\\"Button1\\\\\\\" class=\\\\\\\"loginBtn\\\\\\\" />\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ViewGood-stream media system\",\n  \"logic\": \"(a&&b&&c) ||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"fGetQuery\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"VIEWGOOD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"location.href\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"var webvirtualdiretory = 'VIEWGOOD';\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"src='/VIEWGOOD/Pc/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Proxy server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"socks5\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"socks4\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Grandstream-RTSP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: GrandStream Rtsp Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Helix-Rtsp\",\n  \"logic\": \"((a||b) &&c&&d) || ((e&&f&&g))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Helix Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Helix Universal Media Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: Helix Universal Media Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"RealServer\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"rtsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: RealServer version\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ICU-720G\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: ICU-720G\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MikroTik-FiberBox\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FiberBox\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"yongyou - Time and Space KSOA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"onmouseout=\\\\\\\"this.classname='btn btnOff'\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Community 580-system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"3Cspan id='cnzz_stat_icon_1274142628\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IQinVision-IQeye703\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IQinVision IQeye703\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IQeye703\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PCPIN-Chat\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"title=\\\\\\\"Powered by PCPIN Chat\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"onclick=\\\\\\\"document.loginform.register.value=0; document.loginform.lostpassword.value=0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"window.appname_='pcpin_chat'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PEAR\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Installed packages, channel pear\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Webbased PEAR Package Manager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RAISECOM-iVoice8000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"com_raisecom_ums_aos_portal_login_domain\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"COX-Wireless-Gateway\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"image/cox-logo.png\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IQinVision-IQeye702\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IQeye702\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IQeye702\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Neusoft-General Portal Software\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ecdomain/unieap/ria/unieap/themes/earth/common/unieap.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kedacom-Company products\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"KEDACOM. All rights reserved.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"kedacom\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"kedacom\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXR10-5952D\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZTE 5952D Software\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie-RSR-Router\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"foot_login\\\\\\\">Ruijie Networks RSR Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: RG/Device 10.x\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: RG/Device 10.x\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Maop-OA\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"pwd yahei16\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"www.oooa.cn\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"For \\u732b\\u6251OA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"href=\\\\\\\"http://www.oooa.cn\\\\\\\">\\u91cd\\u5e86\\u732b\\u6251\\u7f51\\u7edc\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8</a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Passenger\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Phusion_Passenger\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Phusion Passenger\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Pc4Uploader\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by Pc4Uploader\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Pc4Uploader <font color\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CAYIN-SMP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/cgi-bin/wizard_index.cgi\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HiPCAM-Video Monitoring\",\n  \"logic\": \"a&& (b||c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"rtsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Hipcam RealServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"HiIpcam/V100R003 \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Indigo-Security\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Indigo-Security\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Youpeng - UNION-VOOLE\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"rtsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Union Voole RTSP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UBNT-Streaming-Server\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"rtsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"UBNT Streaming Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OpenKM-product\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OpenKM Login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Pantheon\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"x-pantheon-edge\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"x-pantheon-edge\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APACHE-Guacamole\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"images/guacamole-logo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Guacamole Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Guacamole - Clientless Remote Desktop\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"scripts/guac-ui.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VAM-corporate product\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"myModalLabel\\\\\\\">Login VAM system\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by Virtual Airlines Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"js/vam.js\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"href=\\\\\\\"https://virtualairlinesmanager.net/\\\\\\\">Virtual Airlines Manager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BROADCOM-CA-PAM\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ispamclient = false\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/cspm/cleanSession.jsp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Open-Source-Ticket-Request-System\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OTRS  :: Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"mailto:otrs@bearingpoint.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"/otrs-web/images/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oracle-WebDb\",\n  \"logic\": \"a|| (b&&c&&d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Oracle_WebDb_Listener\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Oracle_WebDb_Listener\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-Generator: Drupal \",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"boa\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/WebDB/WEBDB.home\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Orangehrm-product\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Welcome to the OrangeHRM ver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"name=\\\\\\\"hdnUserTimeZoneOffset\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"OrangeHRM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/js/orangehrm.validate.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"href=\\\\\\\"http://www.orangehrm.com\\\\\\\" target=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Orenosv\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: orenosv\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: orenosv\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ORITE-301-Camera\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ORITE Audio IP-Camera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Orite IC301\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"oscommerce\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"images/oscommerce.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"set-cookie: oscsid=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"set-cookie: oscsid=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OSSIM\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AlienVault - Open Source SIM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"AlienVault OSSIM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"osTicket\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<li>osTicket version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"osTicket Installer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"http://osticket.com\\\\\\\">osTicket.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oracle-Primerva\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Primavera Systems, Inc\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"IntroAreaBuildId\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"com.primavera.detectplugin.DetectPluginApplet.class\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-AC59U\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"prod_madelName\\\\\\\">RT-AC59U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"RT-AC59U\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-C180X\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco IOS Software, C180X Software\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco C180X\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-2800\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco IOS Software, 2800 Software\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco 2800\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"CISCO 2800\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-ME360x\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco IOS Software, ME360x Software\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-7200\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco IOS Software, 7200 Software\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco7200\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-ASR1000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco IOS Software, ASR1000 Software\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-2800C\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco IOS Software, 2800C Software\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-C3560\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco IOS Software, C3560 Software\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"C3560\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"cisco\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oracle-iPlanet\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"iPlanet-Web-Proxy-Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"iPlanet-WebServer-Enterprise\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Oracle-iPlanet-Web-Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"iPlanet-Web-Proxy-Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"iPlanet-WebServer-Enterprise\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Oracle-iPlanet-Web-Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-DPC3848VM\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"productName\\\\\\\">DPC3848VM</span>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-C2900\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"C2900 Software (C2900\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco IOS Software, C2900\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-3800\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco IOS Software, 3800 Software\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco3800\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u4eac\\u4f26\\u79d1\\u6280-OA\",\n  \"logic\": \"(a&&b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SelectCss\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"toptitleimg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"loginTable\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IQinVision-IQeye511\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IQinVision IQeye511\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IQeye511\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IQinVision-IQeye511DV\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IQinVision IQeye511DV\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oracle-ADF-Faces\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Oracle ADF\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<!-- Created by Oracle ADF Faces\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"var _AdfWindowOpenError\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Jenano - Journal Submission System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Tougao/Misc.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OpenNewsletter\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"http://netmeans.net\\\\\\\">NetMeans.Net\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"This software is based on the OpenNewsletter project\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Open-Realty\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Open-Realty\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Open-Realty\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"http://www.open-realty.org\\\\\\\" title=\\\\\\\"Powered By Open-Realty\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OpenWrt\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OpenWrt Administrative\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"OpenWrt\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"OpenWrt\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"l=Uknown, cn=OpenWrt\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"OpenWrt\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Open-Xchange\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"You need to enable JavaScript to access the Open-Xchange Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"id=\\\\\\\"browserchecktext_id\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/ox6/ox.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/ox6/ox.html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Novell-NetWare\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NetWare Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"code=\\\\\\\"NWSHealth.class\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<B>Novell NetWare\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Novell NetWare\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: NetWare HTTP Stack\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: NetWare HTTP Stack\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Novell-Open-Enterprise-Server\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<!-- This is all just a super-duper redirect to the Welcome page\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Home - Novell Open Enterprise Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"http://www.novell.com/products/openenterpriseserver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<h3>Micro Focus Open Enterprise Server\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Novell-Sentinel-Log-Manager\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"title=\\\\\\\"Novell Sentinel Log Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"0;url=/novelllogmanager\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DCN-DCS-4500-28T-POE\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<B>DCS-4500-28T-POE</B>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Novell-Groupwise\",\n  \"logic\": \"a||b||c||d||e||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<!-- START NOVELL SERVICES\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"set-cookie: njscn=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Novell Web Services\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: GroupWise MTA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Realm=\\\\\\\"GroupWise Agent\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: GroupWise MTA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Realm=\\\\\\\"GroupWise Agent\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Novell-iChain\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"ICHAINErrors/alertbar.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Novell iChain\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Novell Proxy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Host name received is not for this web site\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Host name received is not for this web site\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Open-Blog\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"target=\\\\\\\"_blank\\\\\\\">Open Blog\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OpenConf\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Set-Cookie: openconf=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://www.OpenConf.org\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"openconf.js?\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Set-Cookie: openconf=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OpenDocMan\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Welcome to OpenDocMan\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"target=\\\\\\\"_new\\\\\\\">OpenDocMan\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DCN-DCWS-6002\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"span_thead\\\\\\\">DCWS-6002</span>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DCN-DCWS-6028\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"span_thead\\\\\\\">DCWS-6028</span>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DCWS-6028\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HikVision-Car Remote System\",\n  \"logic\": \"a|| (b&&c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u8fdc\\u7a0b\\u89c6\\u9891\\u76d1\\u63a7\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Reset.bmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Login.bmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"LoginBg.bmp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DCN-S4600-10P-SI\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<B>S4600-10P-SI</B>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AlphaLink-Card\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AlphaLink Card\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Logsign-SIEM\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location = '/ui/modules/login/'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Online-Grades\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Online Grades\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"online grades\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OCS-Inventory-NG\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"css/ocsreports.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"OCS Inventory\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Octopussy\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"value=\\\\\\\"Connect to Octopussy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Octopussy Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"align=\\\\\\\"center\\\\\\\" >Octopussy\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oki-printer\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OKIDATA-HTTPD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"OKI OkiLAN \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"PrintServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"OkiLAN qG\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OLAT\",\n  \"logic\": \"a||b||c||d||e|| (f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"title=\\\\\\\"Homepage of Open Source LMS OLAT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"OLAT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"OLAT - Online Learning And Training\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"content=\\\\\\\"OLAT \\u662f\\u4e00\\u4e2a\\u5b66\\u4e60\\u5185\\u5bb9\\u7ba1\\u7406\\u7cfb\\u7edf (LCMS).\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"content=\\\\\\\"OLAT - Online Learning And Training\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"o_info.uriprefix=\\\\\\\"/olat/dmz/\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"href=\\\\\\\"/olat/raw/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OBM\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login - OBM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"obm_session=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"home_obm.png\\\\\\\" alt=\\\\\\\"OBM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"obm_session=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DCN-S5750E-26X-SI\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<B>S5750E-26X-SI</B>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AlliedTelesis-Ethernet-Switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Allied Telesyn Ethernet Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DCN-S5750E-28X-SI\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<B>S5750E-28X-SI</B>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DCN-S5750E-52X-SI\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<B>S5750E-52X-SI</B>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-Magic-M2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var product_type = \\\\\\\"M2\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Netsweeper- product\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"netsweepersmbtextatbottomofloginscreen\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"http://www.poweredbynetsweeper.com\\\\\\\"><img \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Set-Cookie: webadmin=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NetTalk-WebServer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: NetTalk-WebServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: NetTalk-WebServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oracle-Access-Manager\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"footerVersion\\\\\\\">Oracle Access Manager Version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Set-Cookie: ObSSOCookie=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"obrareq.cgi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Set-Cookie: ObSSOCookie=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"obrareq.cgi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Oracle Access Manager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"nucleus_cms-\\u5e94\\u7528\\u670d\\u52a1\\u5668\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Nucleus\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Nucleus\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"O2Micro-Firewall\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: O2micro\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Set-Cookie: cgisessid=01010011111100000000111110010011;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: O2micro\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Set-Cookie: cgisessid=01010011111100000000111110010011;\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Netsnap-Web-Camera\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"color=\\\\\\\"#008080\\\\\\\">Live-Webcam\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<small>NetSnap is a registered Trademark\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Netquery\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"action=\\\\\\\"nquser.php\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"nqadmin.php\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Nmap-Log\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Interesting ports on\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Starting Nmap\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NetBox\",\n  \"logic\": \"a||b||c||d||e||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: NetBox\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: NetBox\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u9006\\u98ce\\u5de5\\u4f5c\\u5ba4 Netbox\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u9006\\u98ce\\u5de5\\u4f5c\\u5ba4 Netbox\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"Netbox\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"realm=\\\\\\\"Netbox\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Netbox login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NetApp-NetCache-Appliance\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: NetCache appliance\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: NetCache appliance\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NetPort\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: NetPort Software\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: NetPort Software\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Power by NetPort\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Power by NetPort\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NetPresenz\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: netpresenz\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: netpresenz\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alien-RFID-Reader\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Alien Technology RFID Reader\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Alien Technology : RFID Reader\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NeXpose-Security-Console\",\n  \"logic\": \"(a&& (b||c)) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/nexpose-dark.min.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"siloSelect\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"setStatusMessageTimer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<label for=\\\\\\\"nexposeccpassword\\\\\\\">Password</label>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Niagara-Web-Server\",\n  \"logic\": \"a||b||c||d||e||f||g||h||i||j\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Niagara\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Niagara\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"niagara-release\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"niagara-release\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"niagara_session=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"niagara_session=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Niagara-Release\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Niagara-Release\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"niagara_audit\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"niagara_audit\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Network-Tracker\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \">network tracker<\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-Magic-R200\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var product_type = \\\\\\\"R200\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var product_type = \\\\\\\"R200G\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tainet-MERCURY-Router-Module\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MERCURY Router Module, Tainet Communication System Corp.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-Meraki-Z1-Gateway\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Meraki Z1 Cloud Managed Teleworker Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"yongyou-GRP-U8\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location.replace(\\\\\\\"login.jsp?up=1\\\\\\\")\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u7528\\u53cbGRP-U8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"yongyou-TurboCRM\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"turboui.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u7528\\u53cbTurboCRM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"McAfee-Web-Gateway\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"McAfee Web Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"McAfee Web Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"McAfee Web Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"McAfee Web Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NetWin-DBabble\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DBabble login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/cgi/dbabble.cgi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \">DBabble Online Help</a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"action=\\\\\\\"/dbabble\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MYRE-PHP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<!-- BEGIN: MENU FOOTER don't change anything\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<b><u>My Last Viewed</u></b>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MShift\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by MShift&reg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"dcttype=1;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"dcttype=1;\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MS-SDK-HttpServer\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: MS-SDK-HttpServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"server: MS-SDK-HttpServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Open Source Master Management System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5f00\\u6e90\\u56e2\\u4e3b\\u673a\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"\\u5f00\\u6e90\\u56e2\\u4e3b\\u673a\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MyBB\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered By <a href=\\\\\\\"http://www.mybboard.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<!-- MyBB is free software developed and maintained\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"visibility of the MyBB copyright at any time\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"onchange=\\\\\\\"MyBB.changeLanguage();\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \" mybb[lastvisit]=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \" mybb[lastvisit]=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-MAS\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MAS \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Huawei Technologies \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KYOCERA-Document-Solutions-Printing-System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"KYOCERA Document Solutions Printing System\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KYOCERA-MITA-Printing-System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"KYOCERA MITA Printing System\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LANBIRD-Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"LANBIRD Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LANTRONIX-SCS1600\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Lantronix SCS1600\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LANTRONIX-MSS100\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Lantronix MSS100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Lantronix-SLS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Lantronix SLS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Lantronix-SLSLP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Lantronix SLSLP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LANTRONIX-UDS1100\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Lantronix UDS1100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Wangyu Nebula-Firewall\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Leadsec Power V Firewall\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Leadsec Smart V Firewall\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Lenovo Power V Firewall\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Lenovo Smart V Firewall\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"\\u7f51\\u5fa1 \\u9632\\u706b\\u5899\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Lenovo-RackSwitch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Lenovo RackSwitch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Motorola-DCX Media Equipment\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VENDOR: Motorola Corporation;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DCX-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MB8000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MB8000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Emerson-Liebert-UPS\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Liebert UPS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Liebert Pro II Card\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Liebert Smart II Card\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Advantech-LR77\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"LR77\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"LR77-V2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"LR77-v2L\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-Access-Point\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Lucent Access Point\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ADTRAN-MX2800\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ADTRAN MX2800 DS3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ADTRAN-MX408e\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ADTRAN MX408e\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"ADTRAN MX408e\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Aethra-DSL-Device\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Aethra DSL Device\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Aethra-StarVoice\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Aethra StarVoice - ADSL Integrated Access Device.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AirSpan-BSDU\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AirSpan - Wipll BSDU\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AirSpan-BSR\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Airspan - WipLL BSR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AirSpan-SPR\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Airspan - WipLL SPR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-OmniStack\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Alcatel OmniStack\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-VoIP-terminal\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ALCATEL VoIP terminal\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-EG662HW\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Alcatel-EG662HW\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-EG682HW\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Alcatel-EG682HW\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-EG692HW\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Alcatel-EG692HW\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ALCplus2-IDU\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ALCplus2 IDU\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ALCplus2e IDU\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Argon-Router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ADSL Modem/Router.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Argon\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AtlantisLand-Router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Atlantis Land\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ADSL Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Conexant-Router\",\n  \"logic\": \"a&& (b||c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ADSL Router, VxWorks \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Conexant Systems\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Conexant System\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Promotic companies products\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Promotic\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Promotic\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"PROMOTIC Redirection\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mihalism-Multi-Host\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"http://www.mihalism.com/product/mmh/\\\\\\\">Mihalism Multi Host\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by Mihalism Multi Host\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"Mihalism Multi Host\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Minecraft-Server\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Minecraft\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MineOS Admin Page\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Minecraft Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"Minecraft\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Miniature-JWS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Rogatkin's\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Rogatkin's\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"micro_httpd\",\n  \"logic\": \"((a&&b&&c&&d)) || ((e&&f&&g&&h))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"server: micro_httpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"server: micro_httpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"x-powered-by: ThinkPHP\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Micronet-Router\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"SecureSOHO Web configuration\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"SecureSOHO Web configuration\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MobilityGuard companies\",\n  \"logic\": \"((a||b) &&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: MobilityGuard\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Click here for more information about MobilityGuard\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: MobilityGuard\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MiniBB\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<!--miniBB Copyright link\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://www.minibb.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mission-Control-Application-Shield\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"alt=\\\\\\\"mission control application shield\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MJNioHttpDaemon\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: MJNioHttpDaemon\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: MJNioHttpDaemon\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Set-Cookie: MJNIOHTTPDSESSIONID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Set-Cookie: MJNIOHTTPDSESSIONID\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MKPortal\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"MKPortal\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"target=\\\\\\\"_blank\\\\\\\">MKPortal</a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MovableType- product\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Movable Type version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Movable Type\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"rel=\\\\\\\"generator\\\\\\\">Movable Type\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MochiWeb\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: MochiWeb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"server: MochiWeb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"MySQLMan\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"mysql.cgi?do=top_level_op\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"mysqlman_url=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"mysqlman_url=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"size=\\\\\\\"1\\\\\\\">MySQLMan\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MyWebFTP\",\n  \"logic\": \"(a&&b) ||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MyWebFTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<h2>Blog Comments</h2>\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href='mwftp/common/mwftp.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"mwftp/common/mwftp.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \">MyWebFTP</A>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NABBLE-Company Products\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"nabble\\\\\\\" id=\\\\\\\"nabble\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \">Nabble</a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Namazu\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"http://www.namazu.org/\\\\\\\">Namazu\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NCSA-HTTPd\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: NCSA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: NCSA\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-X3\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var product_type = \\\\\\\"X3\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UNIFI-airCube\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"main.90b93d4e91.css\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"main.3bd1a14e0b.css\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"main.c3c0eeb2ed.css\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"AirCube Dashboard\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bitsight-Company Products\",\n  \"logic\": \"a&& (b||c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"BitSight \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"BitSight2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ACTNetworks-SDM-9350\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ACT Networks - SDM-9350\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ACTNetworks-SIP-Gateway\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ACT SIP GATEWAY\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ADAM-RVON-card\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ADAM RVON-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Card,\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXHN-H268A\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"loginTitle\\\\\\\">Welcome to &#72;&#50;&#54;&#56;&#65;. Please login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hardlink-print server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<FRAME name=\\\\\\\"down\\\\\\\" src=\\\\\\\"menuindex5.htm\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Hardlink USB MFP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Folding software - online test system\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"fpexam\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"http://www.fangpage.com\\\\\\\" target=\\\\\\\"_blank\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"http://fpexam.fangpage.com\\\\\\\" target=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/sites/exam/statics/css/login.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Friendly_elec companies\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FriendlyARM \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PasteWSGIServer\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: PasteWSGIServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"server: PasteWSGIServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Heavenly Letter-Single Login System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Topsec\\u5355\\u70b9\\u767b\\u5f55\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Gol Software - Security Certification Gateway\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"KOAL-SSL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"KOAL-SSL\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-ISM\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<link href=\\\\\\\"ismB014.css\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"OceanStor ISM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"class=\\\\\\\"ContextGray\\\\\\\">OceanStor\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"document.location.href=thisURL + \\\\\\\"index_cn.cgi\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"//begin h90005710  redirect http to https\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Accvisio- Video Monitoring\",\n  \"logic\": \"((a||b) &&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"cgictl.htm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: wweb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: wweb\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FOSCAM-camera\",\n  \"logic\": \"(a&&b&&c) || (d&&e) ||f||g|| (h&&i)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<script src=\\\\\\\"get_status.cgi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"scrolling=\\\\\\\"auto\\\\\\\" src=\\\\\\\"login.htm\\\\\\\"></iframe>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"boa/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"pluginspage=\\\\\\\"IPCWebComponents.exe\\\\\\\" type=\\\\\\\"application/ipcam-regplugin\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"id=\\\\\\\"maskHeaderDiv\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Foscam FTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"id=\\\\\\\"ptzguard\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"style=\\\\\\\"background:url(images/con-logo-bg.png);\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"IPCam Client\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JuanCloud-camera\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"style=\\\\\\\"font-size:24px;float:left;\\\\\\\">Network video client\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Partizan Web Surveillance\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"JAWS/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Multi-channel-disk-recording-system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"WebRecClient1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Multi-channel disk recording system\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Self-Logbase Log Management Integrated Audit System\",\n  \"logic\": \"((a||b||c) &&d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Logbase\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: dummy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"onclick=\\\\\\\"location.href='trustcert.cgi'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: dummy\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"M2M-Server\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"m2m server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: idvhttpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: idvhttpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"m2m server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Raymar_Vanguard-Vanguard\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"VANGUARD \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Remote-Web-Workplace\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Copyright (c) Microsoft Corporation\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"action=\\\\\\\"logon.aspx?\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Windows-Business-Server\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Welcome to Windows Small Business Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"images/sbslogo.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"/Remote\\\\\\\">Remote Web Workplace\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TEW-816DRM\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"uspw\\\\\\\">Login to the TEW-816DRM</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RMNetwork-FTP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RMNetwork FTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"XM\\u718a\\u8fc8-\\u89c6\\u9891\\u76d1\\u63a7\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETSurveillance WEB\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Serial Server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e32\\u53e3\\u670d\\u52a1\\u5668\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Linux-operating system\",\n  \"logic\": \"(a&&b&&c) || (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"linux\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"unix\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"28ZE\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"linux\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"unix\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"SANGFOR-\\u5e94\\u7528\\u4ea4\\u4ed8\\u7ba1\\u7406\\u7cfb\\u7edf\",\n  \"logic\": \"a|| (b&&c&&d) || (e&&f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"default_target=\\\\\\\"/cgi-bin/login.cgi?action=log&fro=self\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Loading...\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"SANGFOR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"var CHECK_LOGIN_KEY\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Loading...\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"var CHECK_LOGIN_KEY\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"/static/es5_shim/es5-sham.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Empire Software - Backup King\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://www.phome.net\\\\\\\" target=\\\\\\\"_blank\\\\\\\"><strong>EmpireBak</strong>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div align=\\\\\\\"center\\\\\\\">(<a href=\\\\\\\"doc.html\\\\\\\" target=\\\\\\\"_blank\\\\\\\">\\u67e5\\u770b\\u5e1d\\u56fd\\u5907\\u4efd\\u738b\\u8bf4\\u660e\\u6587\\u6863</a>)</div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u5e1d\\u56fd\\u5907\\u4efd\\u738b\\u540e\\u53f0\\u767b\\u5f55\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Istrong-disaster warning system\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u9884\\u8b66\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u6280\\u672f\\u652f\\u6301:\\u798f\\u5efa\\u56db\\u521b\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u6280\\u672f\\u652f\\u6301\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u798f\\u5efa\\u56db\\u521b\\u8f6f\\u4ef6\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u597d\\u89c6\\u901a-\\u4e91\\u4f1a\\u8bae\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"images/common/logina_1.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"fsmeeting\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"type=\\\\\\\"hidden\\\\\\\" id=\\\\\\\"app.index.configsuclogin\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PiaoYou-ERP\",\n  \"logic\": \"((a&&b) ||c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"css/sexybuttons.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Ajax/confirm.ashx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u7968\\u53cbERP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Pengwei OA\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/_common/scripts/Global.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/Valcode.aspx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MailEnable\",\n  \"logic\": \"a||b||c|| (d&&e) ||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<!-- loginPanel_shell_table -->\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MailEnable - Webmail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"class=\\\\\\\"loginPanel_botLeft_div\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"smtp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"MailEnable\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"MailEnable POP3 Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mailman\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Delivered by Mailman\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/images/mailman\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"http://www.gnu.org/software/mailman/index.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"MailMan\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"mailsite-Express\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MailSite Express\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<b>MailSite <em>Express\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"onsubmit=\\\\\\\"OpenExpress(document.ExpressLogin)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Rockliffe systems, Inc.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"MailSite POP3 Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"MailSite ESMTP Receiver\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sierra-Uplink- Products\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"UP-LINK\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"UP-LINK Systems, Inc.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FiberHome-\\u516c\\u53f8\\u4ea7\\u54c1\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FIBERHOME\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FIBERHOME Systems, Inc.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"scos_fx@fiberhome.com \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SmartLink-Company Products\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Smartlink\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Smartlink Network Systems LTD.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-CE6850-48S4Q-EI\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CE6850-48S4Q-EI\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-CR19000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C CR19000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CNWAY-ILIMS\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/extjs/adapter/ext/ext-base-js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/js/AllPageFunction.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Wavlink-WiFi-Repeater\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WiFi Repeater Web Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Juniper-DX\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Juniper DX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<img alt=\\\\\\\"\\\\\\\" src=\\\\\\\"i/dx02.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"DX \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"WebUI\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Adimoney companies\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AdiMoney - Mobile Advertisement Network\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<img src=\\\\\\\"/img/logo.png\\\\\\\" alt=\\\\\\\"AdiMoney\\\\\\\"/>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"AdiMoney.Com Mobile Advertisement Network. \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Siemens-SCALANCE-X\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SCALANCE X Management\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/doc/XSpecial.css\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Annea-reimbursement system\",\n  \"logic\": \"a|| (b&& (c||d))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div id=\\\\\\\"dSiteTitle\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"by:lin.zhibin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"window.external.AddFavorite(location.href,document.title);\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u5b89\\u8d22\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MHttpd\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: mhttpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: mhttpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Mibew-Messenger\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"empty_inner\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"flink\\\\\\\">Mibew Messenger\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mac-OSX-Server\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Mac OS X Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"page_footer_appversion\\\\\\\">Mac OS X Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"Mac OS X Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"Mac OS X Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ubiquiti-UNMS\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"UNMS\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"unms\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Technicolor-TG582n\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var headertext = 'Technicolor&nbsp;TG582n'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var headertext = 'Technicolor TG582n'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Technicolor TG582n\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mason\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Powered-By: HTML::Mason\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Powered-By: HTML::Mason\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mathopd\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Mathopd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Mathopd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"McAfee-ePolicy-Orchestrator\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Undefined\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Undefined\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ePolicy Orchestrator\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"McAfee-Secure\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"www.mcafeesecure.com/RatingVerify?ref=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MeetingPlaza\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MeetingPlaza HTTP Tunneling\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"InterSpace HTTP Tunneling\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"InterSpace HTTP Tunneling\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"meitrack-products\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"action=\\\\\\\"trackerlogin.aspx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"_TrackerMain_GTVTSeries\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"E-FAX\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"- E-Fax - Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"E-FAX \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AvantFAX-ICTFax\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"- ICTFax - Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<img src=\\\\\\\"images/avantfax-big.png\\\\\\\" border=\\\\\\\"0\\\\\\\" alt=\\\\\\\"ICTFax\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"ICTFax\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Synology-Router-Manager\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"hostname\\\\\\\" : \\\\\\\"SynologyRouter\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"SynologyRouter\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Pelco_VideoXpert\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VideoXpert Admin Portal\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-SR6604\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SR6604\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-SR6616\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SR6616\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Accton-Data-Center-Switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Accton Data Center Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ManageEngine-DeviceExpert\",\n  \"logic\": \"a||b||c|| (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/deviceexpert.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ManageEngine Password Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Password Manager Pro does not allow\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"SelectPasswordPolicy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"ChangePasswordPolicy\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Environmental station - management system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u73af\\u4f01\\u4f18\\u7ad9\\u7d20\\u6750\\u7f51\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"action=\\\\\\\"/usezan/login/getlogin\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-Series-Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C Series Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-MSR3610\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MSR3610\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Freecom-router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Freecomm Data Communication\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Series Software\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-MSR5620\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MSR5620\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-MSR810\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MSR810\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-S5130\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C S5130\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-switcher\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/avct.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"alt=\\\\\\\"HP\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"FUJITSU-KVM switcher\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/avct.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"alt=\\\\\\\"Fujitsu\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-KVM switch\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/avct.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"alt=\\\\\\\"IBM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mambo-CMS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Mambo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div id=\\\\\\\"mambo\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u7f51\\u5fa1\\u661f\\u4e91-VPN\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/js/leadsec.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/vpn/user/common/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<p id=\\\\\\\"notice_content\\\\\\\">\\u6b22\\u8fce\\u4f7f\\u7528VPN\\u5b89\\u5168\\u7f51\\u5173</p>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u5317\\u4eac\\u7f51\\u5fa1\\u661f\\u4e91\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-SecPath-F1000-A-EI\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C Firewall SecPath F1000-A-EI\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-SecPath-U200-M\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C Firewall SecPath U200-M\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"H3C Series Firewall SecPath U200-M\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CWP- Virtual Host Control Panel\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/login/cwp_theme/original/img/ico/favicon.ico\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/login/cwp_theme/original/img/new_logo_small.png\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"intelbras-RF-301K\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RF 301K\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Motorola-SBG6782-AC\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"thisModelNumberIs\\\\\\\">SBG6782-AC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-B5\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var product_type = \\\\\\\"B5\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"B5&nbsp\\u8bbe\\u5907\\u767b\\u5f55\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-B365\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var product_type = \\\\\\\"B365\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"B365&nbsp\\u8def\\u7531\\u5668\\u767b\\u5f55\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"A10-ACOS network operating system\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: A10WS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"boa\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: A10WS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"boa\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"LineRunner-SHDSL-Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DEVICE: LineRunner SHDSL Router; \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Abilis-CPX\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Abilis CPX - \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Abus-corporate product\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ABUS company products\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Accton-24port-Switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Accton 24 port Cheetah Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Acano-Server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Acano Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sunnada-centralized wireless controller\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AC-Sunnada-Access \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u4e09\\u5143\\u8fbe\\u901a\\u8baf - \\u96c6\\u4e2d\\u65e0\\u7ebf\\u63a7\\u5236\\u5668'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"grentech - PowerCN-Access\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AC-Powercn-Access\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HONG.TEC-Access\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AC-HONG.TEC-Access \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Aruba-Wireless-Controller\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Aruba-Wireless-Controller\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Array-Company Products\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Array Networks WebUI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Array Networks WebUI\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Motorola-DCT-6412\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VENDOR: Motorola Corporation;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DCT-6412\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ericsson-LG Company Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ericsson-LG Enterprise Co.,Ltd.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-MC101\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MC101&nbsp\\u8def\\u7531\\u5668\\u767b\\u5f55\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie companies\",\n  \"logic\": \"((a||b) &&c&&d) || ((e||f||g||h||i||j) &&k&&l) ||m\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Ruijie Servrer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: RG/Device\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: Ruijie Servrer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: RG/Device\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Ruijie login:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Vendor: Ruijie General Operation System\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Vendor: Ruijie\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"RGOS_SSH\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"Organization: Ruijie\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ENGENIUS-switch\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"conner_basic conner_GDL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"egs-logo.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Planet-NVR-915\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NVR-915 login:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NVR-915\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ICP_DAS-Ethernet controller\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: 7188E\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: 7188E\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"7188E3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OpenSSH\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OpenSSH\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Maipu-RM1800\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"RM1800\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"RM1800\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZLAN-corporate product\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"http://www.zlmcu.com\\\\\\\">ZLAN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Konk Hotel-C2000-Turbo\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"C2000 TURBO\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"name=\\\\\\\"sublog\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"name=\\\\\\\"version\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-Wireless-LAN-Controller\",\n  \"logic\": \"(((a&&b&&c) ||d) &&e) ||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"action=\\\\\\\"/main_login.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco Systems\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"onclick=\\\\\\\"loginAction()\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Cisco Systems Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"CISCO_WLC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LifeType\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"lifetype\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"title=\\\\\\\"Install LifeType\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-Magic-B3\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var product_type = \\\\\\\"B3\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Magic B3&nbsp\\u8def\\u7531\\u5668\\u767b\\u5f55\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-N12\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"N12&nbsp\\u8bbe\\u5907\\u767b\\u5f55\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-ASG5530\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"('.huawei_title').html('ASG5530')\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Huawei ASG5530\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-Magic-R160\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Magic R160&nbsp\\u8def\\u7531\\u5668\\u767b\\u5f55\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MacHTTP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: MacHTTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: MacHTTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Liferay\",\n  \"logic\": \"a||b||c||d||e||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by Liferay Portal\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Liferay Portal\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Liferay Portal\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"guest_language_id=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"guest_language_id=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Liferay.AUI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Liferay.currentURL\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LifeSize-Control\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/LifeSizeControl/ASP/index.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"LifeSizeControl\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Liferay Portal\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"M2Soft-RDServer\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"M2Soft Report Designer Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: RDServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: RDServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Lusca-Web-Proxy-Cache\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Lusca\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Lusca\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Lussumo-Vanilla\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Powered-By: Lussumo Vanilla\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Powered-By: Lussumo Vanilla\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LuxCal\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"LuxCal\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class='footLB'>Lux\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"Roel Buining\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-IOx\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco IOx Local Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var g_url_version = \\\\\\\"/iox/api/v2\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"N2WS-Company products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"static/style/cpm_style.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"honey jar\",\n  \"logic\": \"(a&&b&&c) || (d&&e) ||f|| (g&&h&&i) || (j&&k) || (l&&m&&n) || (o&&p) ||q|| (r&&s&&t)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"apache\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Tomcat\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Jboss\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"uc-httpd 1.0.0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"JBoss-5.0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Apache,Tomcat,Jboss,weblogic,phpstudy,struts\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"apache\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Tomcat\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Jboss\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"<h2>My Resource</h2>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"<h2>Blog Comments</h2>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"apache\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"Tomcat\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"Jboss\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"uc-httpd 1.0.0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"JBoss-5.0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"q\",\n    \"feature\": \"Apache,Tomcat,Jboss,weblogic,phpstudy,struts\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"r\",\n    \"feature\": \"apache\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"s\",\n    \"feature\": \"Tomcat\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"t\",\n    \"feature\": \"Jboss\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-Prime-Network-Registrar\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"productname=\\\\\\\"Network Registrar\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APACHE-kylin\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/kylin/\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"to you under the Apache License\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CheckPoint-Connectra-Portal\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Connectra Portal\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"if (document.loginForm.LaunchSWS.checked)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Schneider-Quantumn\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Schneider Electric Telecontrol - Industrial Web Control\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Secnet - Smart Routing System\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5b89\\u7f51-\\u667a\\u80fd\\u8def\\u7531\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u667a\\u80fd\\u8def\\u7531\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u5b89\\u7f51\\u79d1\\u6280-\\u667a\\u80fd\\u8def\\u7531\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Guard God - Host Master\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"\\u62a4\\u536b\\u795e\\u00b7\\u4e3b\\u673a\\u5927\\u5e08 \\u524d\\u53f0\\u7ba1\\u7406\\u767b\\u5f55\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-Series-Router-MSR30\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C Series Router MSR30\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SGP-management system\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/static/all/img/logo/sgp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SGP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZIRION-Network-Card\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZIRION Network Card\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Radware-LinkProof-Switch\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"LinkProof OnDemand Switch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"LinkProof - Entry Level\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"LinkProof Application Switch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"LinkProof Branch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-SNP-6321H\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var defaultfilename = \\\\\\\"SNP-6321H\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-SND-6084\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var defaultfilename = \\\\\\\"SND-6084\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-SND-6084R\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var defaultfilename = \\\\\\\"SND-6084R\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-SND-L5083R\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var defaultfilename = \\\\\\\"SND-L5083R\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-SND-L5013\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var defaultfilename = \\\\\\\"SND-L5013\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DZS-Zhone-Company Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VENDOR: Zhone Technologies Inc.;\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-SND-L6012\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var defaultfilename = \\\\\\\"SND-L6012\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-SND-L6013R\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var defaultfilename = \\\\\\\"SND-L6013R\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-SNP-6230RH\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var defaultfilename = \\\\\\\"SNP-6230RH\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-QRN-410\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"$.nvr.model_name=\\\\\\\"QRN-410\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-QRN-810\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"$.nvr.model_name=\\\\\\\"QRN-810\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-XRN-410S\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"$.nvr.model_name=\\\\\\\"XRN-410S\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"XRN-410S\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LK-IHC-Controller\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"LK IHC controller forside\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/images/bg_image_LK.jpg\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Lotus-Notes-Traveler\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Lotus Notes Traveler\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Lotus Notes Traveler\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"IBM Lotus Notes Traveler\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LPSE\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/eproc/assets/application.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/eproc/app\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/eproc/app\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Network Direction - Flow Control Master\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Netzone\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u6d41\\u63a7\\u5927\\u5e08\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MacbookAIR\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MACBOOK-AIR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MACBOOKAIR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"macbook-air\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Byzoro-Smart\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Smart S150&nbsp;\\u7cfb\\u7edf\\u767b\\u5f55\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Smart--\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-XRN-810S\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"$.nvr.model_name=\\\\\\\"XRN-810S\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"XRN-810S\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-XRN-1610\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"$.nvr.model_name=\\\\\\\"XRN-1610\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"XRN-1610\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-SRN-473S\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"$.nvr.model_name=\\\\\\\"SRN-473S\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-SRN-873S\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"$.nvr.model_name=\\\\\\\"SRN-873S\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-SRN-K3470S\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"$.nvr.model_name=\\\\\\\"SRN-K3470S\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-SRN-4000\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"$.nvr.model_name=\\\\\\\"SRN-4000\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Wisenet NVR\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"SAMSUNG\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Hanwha-SRN-K3370S\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"$.nvr.model_name=\\\\\\\"SRN-K3370S\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-SND-K2083R\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var defaultfilename = \\\\\\\"SND-K2083R\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-SND-K2013R\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var defaultfilename = \\\\\\\"SND-K2013R\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-SNO-K2013R\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var defaultfilename = \\\\\\\"SNO-K2013R\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-SNO-S202R\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var defaultfilename = \\\\\\\"SNO-S202R\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SONY-SNC-DH110T\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Sony Network Camera SNC-DH110T\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Sony Network Camera SNC-DH110T\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SONY-SNC-VM772R\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SNC-VM772R\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"SNC-VM772R\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SONY-BRC-H800\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BRC-H800\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"BRC-H800\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SONY-SNC-CX600W\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SNC-CX600W\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"SNC-CX600W\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-Video Monitoring\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"css/techwin.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-SPE-101\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var defaultfilename = \\\\\\\"SPE-101\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-SPE-400\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var defaultfilename = \\\\\\\"SPE-400\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hua Yu - Security Gateway\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"copy_right = {CN : \\\\\\\"\\\\\\\", EN \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var opzoon_ver\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fang Zheng Group - Security Gateway\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Organization: www.foundersec.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-SND-S302\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var defaultfilename = \\\\\\\"SND-S302\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SONY-SNC-WR630\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SNC-WR630\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"SNC-WR630\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SONY-SNC-WR600\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SNC-WR600\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"SNC-WR600\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SONY-SNC-EP521\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Sony Network Camera SNC-EP521\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Sony Network Camera SNC-EP521\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LISTSERV\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by the LISTSERV Email List Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<title>Welcome to LISTSERV\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DSL-2600U\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DSL-2600U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DSL-2600U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"DSL-2600U\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"iNovo-IB8120\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"iNovo IB-8120-W21\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"apereo-CAS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CAS &#8211; Central Authentication Service\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u5e06\\u8f6f-FineReport\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"FineReport--Web Reporting Tool\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Margatek -Journalx\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"journalx/authorLogOn.action?mag_Id\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LimeSurvey\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"LimeSurvey\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"http://www.limesurvey.org\\\\\\\" target=\\\\\\\"_blank\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"LimeSurvey\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Koha\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Koha \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"name=\\\\\\\"koha_login_context\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Linksys-USB-HDD\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Network Storage Link for USB 2.0 Disks\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"Management/setup.cgi?next_file=lan.htm\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Linksys-Print-Server\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PRINT_SERVER WEB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Print Server for USB with 4-Port Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NetComm-GURNV5\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GURNV5\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"iball-iB-WRA300N3G\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"iB-WRA300N3G\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"iB-WRA300N3GT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"iB-WRA300N3G\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kolab-product\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Kolab Groupware login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Kolab\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Adobe-Experience-Manager\",\n  \"logic\": \"(a&&b) ||(c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Adobe Experience Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" class=\\\\\\\"coral-Heading coral-Heading--1\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"AEM \\u767b\\u5f55\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Adobe\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zyxel-USG20W\",\n  \"logic\": \"(a&& (b||c)) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"USG20W-VPN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" class=\\\\\\\"usg_icon\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"zyFunction.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"USG20W-VPN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-GT-AC2900\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ASUS Wireless Router GT-AC2900\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"document.getElementsByClassName(\\\\\\\"model-name\\\\\\\")[0].innerhtml = \\\\\\\"GT-AC2900\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-GT-AC2900_SH\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"document.getElementsByClassName(\\\\\\\"model-name\\\\\\\")[0].innerhtml = \\\\\\\"GT-AC2900_SH\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-GS724Tv3\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GS724Tv3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-GS724TS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GS724TS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GSM-RF-gateway\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GSM/GPRS RF gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Trendnet-GreenNet-Switch\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GreenNet Ethernet Switch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"GreenNet Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-GS108Tv2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GS108Tv2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-GS716Tv2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GS716Tv2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-GS724TP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GS724TP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D-Link-DSL-2730E\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Product Page</span>: DSL-2730E\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fortinet-FWN200B\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FWN200B\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fortinet-FWN1000B\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FWN1000B\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yamaha-FWX120\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FWX120\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Koala-Web-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Koala Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Koala Web Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KodiTV\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Kodi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"title=\\\\\\\"Kodi Library\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<title>Kodi</title>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LetoDMS\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"letoDMS free document management system\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"out/out.ViewFolder.php\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"out/out.ViewFolder.php\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-SND-7084\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var defaultfilename = \\\\\\\"SND-7084\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TrendMicro-S3020F\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"S3020F\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TrendMicro-S8005F\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"S8005F\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TrendMicro-S8010F\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"S8010F\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TrendMicro-IWSA5000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IWSA5000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"naxsi\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Data-Origin: naxsi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Data-Origin: naxsi\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"open-Dreambox\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/web-data/img\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Dreambox WebControl\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TrendMicro-S1050F\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CommonName: N-S1050F-50R4-3018\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Level_one-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Wireless Broadband NAT Router Web-Console\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Netgear-Wireless-Modem\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Netgear Wireless Cable Modem\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bnmux-BCW710J\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BCW710J \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"VENDOR: Bnmux\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Motorola-SVG1202\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"motorola\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SVG1202\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"MODEL: SVG1202\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Openfire\",\n  \"logic\": \"a|| (b&&c) ||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"background: transparent url(images/login_logo.gif) no-repeat\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"row justify-content-center\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<title>Openfire \\u7ba1\\u7406\\u754c\\u9762</title>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Openfire Admin Console\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Openfire HTTP Binding Service\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ARRIS-DOCSIS\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ARRIS \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"DOCSIS \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Technicolor-BFC-cablemodem\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BFC cablemodem\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"VENDOR: Technicolor\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Lasso-Web-Data-Engine\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Lasso\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Lasso\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hitron-Router\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Hitron Technologies\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Common Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Hitron Common Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CastleNet-CBW383G4J\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CBW383G4J\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CastleNet\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DX-1821\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DAX NETWORKS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"DX-1821\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-P-660R-D1\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"P-660R-D1 \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"P-660R-D1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-P-660R-T1\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"P-660R-T1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"P-660R-T1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-P-660R-T3\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"P-660R-T3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"P-660R-T3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-P-660RU-T1\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"P-660RU-T1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"P-660RU-T1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"POLY-DST-MCS-Video Conference\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"document.location.href=\\\\\\\"/cgi-bin/cgiServer?_dstp_functionid=HOMEPAGE&language_type=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-TD-8811\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TD-8811\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TD-8811\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-TD-8816\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TD-8816\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TD-8816\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-TD-8817\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TD-8817\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TD-8817\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Chiyu-fingerprint machine\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cmdbar.htm\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"White Hat - Vulfocus\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"vulfocus\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-TD-W8101G\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TD-W8101G\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TD-W8101G\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-TD-W8151N\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TD-W8151N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TD-W8151N\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-TD-W8901GB\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TD-W8901GB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TD-W8901GB\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Shiji - West Soft Cloud XMS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"xmsenv.exe\\\\\\\">\\u7cfb\\u7edf\\u8fd0\\u884c\\u73af\\u5883\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u897f\\u8f6f\\u4e91XMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-TD-W8951ND\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TD-W8951ND\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TD-W8951ND\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-TD-W8961ND\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TD-W8961ND\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TD-W8961ND\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-TD-W8961N\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TD-W8961N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TD-W8961N\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sangfor-Data Center\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"acloglogin.php\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SANGFOR \\u6570\\u636e\\u4e2d\\u5fc3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Location: ./src/acloglogin.php\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Location: ./src/acloglogin.php\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zeroshell-Firewall\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZeroShell\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZeroShell\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KYOCERA-IB-110\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"KYOCERA Print System IB-110\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Lantronix companies products\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Lantronix ThinWeb Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"alt=\\\\\\\"Lantronix ThinWeb Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Gordian Embedded\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Lantronix \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"motionEye\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"static/img/motioneye-logo.svg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Motioneye\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SAMSUNG-SNB-2000\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"must-revalidate\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Digest realm=\\\\\\\"NET-i\\\\\\\", nonce\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Digest realm=\\\\\\\"NET-i\\\\\\\", nonce\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"must-revalidate\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Heavenly Letter-TopApp-load balancing\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TopApp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-FS728TPv2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FS728TPv2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SAMSUNG-SmartCam\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: HSS Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: HSS Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"pages/camera_login.php?login=true\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: SmartCamWebService\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: SmartCamWebService\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUACAM-Cyclops-IP-camera\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Please update your documents to reflect the new location\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"GS-Webs\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AXIS-754648-Camera\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AXIS 754648\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"zmodo-camera\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"top.frames.frmResource.location = getXMLUrl\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"name=\\\\\\\"mainFrame\\\\\\\" frameborder=\\\\\\\"0\\\\\\\"  src=\\\\\\\"play.html\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WebServer(IPCamera_Logo)\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: WebServer(IPCamera_Logo)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: WebServer(IPCamera_Logo)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Magento-Swann-DVR8-2600\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"self.location = \\\\\\\"play.html\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"if(navigator.userAgent.indexOf(\\\\\\\"Safari\\\\\\\")\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FLIR-DVTEL-Video Monitoring\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"loginleft displaynone\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"footer\\\\\\\">DVTEL INC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AVIOSYS-IP-Camera\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Copyright AVIOSYS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"View Log\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-web-camera\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Administrator or User\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Administrator or User\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ACTi-ACM-1231\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"url=/cgi-bin/videoconfiguration.cgi\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"QualityView-Ipcam\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Welcome to QualityView Ipcam\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IP-Video-embedded-camera\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"Camera Server\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Basic realm=\\\\\\\"Camera Server\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AirLive-POE-HDwebcam\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"js/variable_6.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MASPRO-webcam\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/keitai/index.html\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/mobile/index.html\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"XonTel-Network-Camera\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"XonTel Network Camera\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WebGate companies products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"WebGateInc\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Video Surveillance\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=Camera Name\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Basic realm=Camera Name \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DCS-kabinet\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"DCS-kabinet\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Basic realm=\\\\\\\"DCS-kabinet\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DCS-d\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"DCS-d\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Basic realm=\\\\\\\"DCS-d\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EasyN-TAS-Tech-IPCam\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: TAS-Tech IPCam\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: TAS-Tech IPCam\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"AXIS-240\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AXIS 240 Camera Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GoPro-HERO3-camera\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: GoPro Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: GoPro Web Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VIVOTEK-3102\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Welcome to Network Camera telnet daemon\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-Smart-IP-Camera\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IPCam_Streamer.RunElevatedWeb(window.location.href)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EverFocus-PowerPlex-eDR400\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Welcome to eDR400\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Gadspot-NC1000-L10\",\n  \"logic\": \"(a&& (b||c))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"ChenXiaohui\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/Jpeg/CamImg.jpg\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<nobr>Video Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Gadspot-DVR\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"ChenXiaohui\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"name=\\\\\\\"configPtz\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ben_Software-SecuritySpy-webcam\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SecuritySpy Web Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AVer-DVR\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var isexist = Get_Cookie(\\\\\\\"OCX\\\\\\\")\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Panasonic-Ethernet-webcam\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"NCS G 2062\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SONY-Network-Camera-SNC-f\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"Sony Network Camera SNC-f\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Basic realm=\\\\\\\"Sony Network Camera SNC-f\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DCS-5220bed\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"DCS-5220bed\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Basic realm=\\\\\\\"DCS-5220bed\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"YAWCAM-webcam\",\n  \"logic\": \"(a&& (b||c))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Yawcam\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"div.menu\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"It's a webcam!\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"grandtec-wifi-webcam\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"Welcome to IPCam !\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Basic realm=\\\\\\\"Welcome to IPCam !\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SANYO-NETWORK-CAMERA\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SANYO NETWORK CAMERA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SANYO  NETWORK CAMERA\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DVR-Systems-webcam\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Your client does not have permission to get URL /index.htm from this server.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Basic realm=\\\\\\\"server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CP_PLUS-webcam\",\n  \"logic\": \"a|| (b&&c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CPPLUS Remote \\u2013 Web View\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"dhvideowhmode\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"platformHtm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"cpplus_bottom\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TTIC-webcam\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TTiC WebServer Client\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DCS-5220PUERTA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"DCS-5220PUERTA\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Broadcom-Foundry-Networks products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Foundry Networks, Inc. \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kyocera-printer\",\n  \"logic\": \"a||b||c||d|| (e&&f) || (g&&h) || (i&&j&&k)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: KM-MFP-http\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: KM-MFP-http\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Kyocera Command Center\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"var modelname=\\\\\\\"FS-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"var currentpage=\\\\\\\"\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"var modelname=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"KYOCERA Printer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"220\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \" FTP server.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"214- FTPD supported commands(RFC959 subset):\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ciena-5160-Switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"5160 Service Aggregation Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ciena-5410-Switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"5410 Service Aggregation Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ciena-6500-REARELEC\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"6500 REARELEC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Ciena (R) Corporation\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Enterasys-Networks-Firmware\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Enterasys Networks Firmware\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Router product\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"802.11n Wireless ADSL 2/2+ Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"8860-ADSL\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"8860-C1. H/W: ADSL-M\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AXIS-video server\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Video Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"axis\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Thomson-CableHome-Gateway\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Thomson CableHome Gateway \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hitron-Cable-Gateway\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Hitron Technologies\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cable Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-Docsis Gateway\",\n  \"logic\": \"(a&& (b||c)) || (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DOCSIS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"EuroDOCSIS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"showXHead('Cisco \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"CISCO-TelePresence\\u89c6\\u9891\\u4f1a\\u8bae\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco TelePresence \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"4Port-ADSL\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"4 Port ADSL IAD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"4 Port ADSL IAD\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Honeywell-450TC module\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"450TC1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"450TC2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CGEZ-48-Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"48 FE Ports Routing Switch(CGEZ-48)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ciena-5142-Switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"5142 Service Aggregation Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HISILICON-Hi3518E\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"The products of network camera\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LabVIEW\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: LabVIEW\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: LabVIEW\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kordil-EDMS\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"kordil_edms\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"kordil_edms\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \">Kordil EDMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dahua-DVR\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"dahua\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Dahuatech DVR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Coffinkary News\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"hw_type=\\\\\\\"iMX100AG\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-Super Convention Center\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href='./zxms80.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"zxms80.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Serial port server Eth2232x\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e32\\u53e3\\u670d\\u52a1\\u5668---eth2232X\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"iSpy-webcam\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Access this server via http://www.ispyconnect.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PLANET-webcam\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PLANET IP Surveillance\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UMEYE Case-WebCAM\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"name=\\\\\\\"utbd_v\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ISS-webcam\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WEB interface of Inspector\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ISC-BIND-DNS\",\n  \"logic\": \"(((a||b) &&c) &&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"yamutech-bind\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"BIND server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"this is not a 'bind' server\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"dns\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sympa-mailing-list-server\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"sympa_session=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"sympa_session=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"Sympa\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"alt=\\\\\\\"SYMPA logo\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-DNS\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"dns\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Windows\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NLNETLABS-UNBOUND\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"dns\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Unbound\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kong\",\n  \"logic\": \"a|| (b&&c&&d) || (e&&f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Kong Dashboard\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: kong\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: kong\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"SAP-System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Sap-System\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Sap-System\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"easyPress\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Easypress-Platform\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Easypress-Platform\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-Watchfire\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Set-Cookie: WatchfireSessionID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Set-Cookie: WatchfireSessionID\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-UCSC-C220-M4S\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PID:UCSC-C220-M4S\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-UCSC-C240-M5L\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PID:UCSC-C240-M5L\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-UCSC-C220-M3S\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PID:UCSC-C220-M3S\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-UCSC-C22-M3L\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PID:UCSC-C22-M3L\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-UCSC-C220-M5L\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PID:UCSC-C220-M5L\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-UCSC-C220-M3L\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PID:UCSC-C220-M3L\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-UCSC-C220-M4L\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PID:UCSC-C220-M4L\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-UCSC-C220-M5SN\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PID:UCSC-C220-M5SN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-UCSC-C480-M5\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PID:UCSC-C480-M5\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NetApp- Storage\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: NetApp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NetApp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"microHttp\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: microHttp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: microHttp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hisilicon-module\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"UPnP devices\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<manufacturer>Hisilicon Technologies\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Hisilicon Streaming Media Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WAP\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"UPnP devices\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"window.location = 'wap.htm'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MiniServ\",\n  \"logic\": \"(a&&b&&c&&d) || (e&&f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: miniserv\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"server: miniserv\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Fusion-Embedded\\u2122-FTP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FUSION FTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huawei- server\",\n  \"logic\": \"((a||b|| (c&&d)) &&e) ||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Huawei-BMC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"iMana&nbsp;200 Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"custom/logo.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"control/images/about.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: Huawei-BMC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Xlight-FTP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Xlight FTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NetMind-product\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Netmindsessionid\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Netmindsessionid\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FUJITSU-PRIMERGY-tx200\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PRIMERGY-tx200\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FUJITSU-PRIMERGY-TX100\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PRIMERGY-TX100\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PRIMERGY-TX100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"3Com-Router-5012\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"3Com Router 5012\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"3Com-Switch-4500\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"3Com Switch 4500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"3Com Switch 4500G\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Switch 4500\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"3Com-Switch-4800G\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"3Com Switch 4800G\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-Proliant-DL980R07i\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Proliant DL980R07i\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FUJITSU-PRIMERGY-TX1310-M1\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PRIMERGY-TX1310-M1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PRIMERGY-TX1310-M1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-DL320e-Gen8\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DL320e-Gen8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DL320e-Gen8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-ML310-G5\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ML310-G5\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-DL160-G5\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DL160-G5\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-PROLIANT-DL380G\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PROLIANT-DL380G\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-Integrity-rx2800\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"rx2800\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"loginTitleSub\\\\\\\">HPE Integrity rx2800\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"thttpd\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"server: thttpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"server: thttpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"\\u5929\\u878d\\u4fe1-\\u516c\\u53f8\\u4ea7\\u54c1\",\n  \"logic\": \"(a&&b&&c) ||d||e||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: TOPSEC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"JnSec Web UI\\\\\\\"\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Topsec Network Security Technology\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: topsecos\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: topsecos\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Beijing Topsec Network Security Technology Co.,Ltd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-Tecal-RH2288H\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Tecal-RH2288H\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Inspur-NF5270M3\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NF5270M3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Inspur-NF5270M4\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NF5270M4\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Inspur-NF5280M4\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NF5280M4\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NF5280M4\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-x3650\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IBM System x3650\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IBM System x3650\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-R930\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge-R930\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-T300\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"POWEREDGE-T300\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-OfficeConnect\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"3Com Router 3031\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-1800\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge-1800\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PowerEdge-1800\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"3Com-Router-3040\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"3Com Router 3040\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NSFOCUS-\\u516c\\u53f8\\u4ea7\\u54c1\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: NSFOCUS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: NSFOCUS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"DB2-FTP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"db2 FTP server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-WebSphere\",\n  \"logic\": \"a||b||c|| (d&& (e||f) ) ||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: WebSphere\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: WebSphere\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<BR><I>IBM WebSphere Application Server</I>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"IBM HTTP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"websphere\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"com.ibm.websphere.ihs.doc\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"content=\\\\\\\"WebSphere Application Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Rtsp-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Rtsp Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Rtsp Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Windows-Management-Instrumentation\\uff08WMI\\uff09\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: WMI v3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: WMI v3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: WMI v5\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: WMI v5\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-4400\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge 4400\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-2850\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge 2850\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PowerEdge 2850\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-Codian Video Conference\",\n  \"logic\": \"(a&&b) ||c||d||e||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"rtsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Codian MCU \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Codian IP \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Codian ISDN \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Codian MCU \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Codian MCU\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Codian MSE \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-T100\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge-T100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-SC1425\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge-SC1425\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PowerEdge-SC1425\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-DL380-GEN10\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DL380-GEN10\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DL380-GEN10\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-DL180-G6\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DL180-G6\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DL180-G6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-ProLiant-MicroServer-Gen8\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PROLIANT-MICROSERVER-GEN8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PROLIANT-MICROSERVER-GEN8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-ML30-GEN9\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ML30-GEN9\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ML30-GEN9\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-DL380-G5\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DL380-G5\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DL380-G5\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-DL380-GEN9\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DL380-GEN9\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DL380-GEN9\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-DL380p-Gen8\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DL380p-Gen8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-ProLiant-ML350\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PROLIANT-ML350\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PROLIANT-ML350\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"PROLIANT-ML350\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-ML310e-Gen8\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ML310e-Gen8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ML310e-Gen8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ML310e-Gen8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FortiMail\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FortiMail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"fortimail login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"FortiMail Server.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-meraki network equipment\",\n  \"logic\": \"a|| ((b||c) &&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Meraki \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"alt=\\\\\\\"Cisco Meraki\\\\\\\" src=\\\\\\\"img/cisco-meraki.png\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"images/cisco-meraki.png\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"H3C-switch\",\n  \"logic\": \"(a&&b) ||c||d||e||f|| (g&&h&&i) ||j||k|| (l&&m) || (n&& (o||p)) || (q&&r) || (s&&t&&u)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snnp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"H3C S3600V2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"H3C S5500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"H3C S5500EI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"H3C S9508E\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"H3C S5800\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Web user login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"nLanguageSupported\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Lanswitch\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"H3C S5560-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"h3c httpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"window.location = \\\\\\\"/wcn/banner?lang=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"style=\\\\\\\"background-color: #E1E9F5;\\\\\\\" onload=\\\\\\\"onBodyLoad()\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"window.location = sLang + \\\\\\\"/login.html\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"Switch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"Web user login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"q\",\n    \"feature\": \"window.location = \\\\\\\"en/login.html\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"r\",\n    \"feature\": \"switch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"s\",\n    \"feature\": \"window.location = \\\\\\\"/web/device/login?lang=\\\\\\\"+sLang;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"t\",\n    \"feature\": \"Web user login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"u\",\n    \"feature\": \"<H2>Web\\u7f51\\u7ba1\\u4e2d\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dell-EMC-DS switch\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"EMC DS-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-ML110-GEN9\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ML110-GEN9\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ML110-GEN9\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-PROLIANT-ML35\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PROLIANT-ML35\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-ML110-G5\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ML110-G5\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ML110-G5\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-ML110-G7\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ML110-G7\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ML110-G7\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZLG-single chip microcomputer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Zlgmcu Corporation\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Zlgmcu Corporation\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bosch-flexidome-ip-camera\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FLEXIDOME IP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bosch-dinion_ip camera\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DINION IP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Lenovo-printer\",\n  \"logic\": \"a|| (b&&c) ||d||e|| (f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Lenovo CS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"pjl\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Lenovo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Lenovo CS2010DW\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Lenovo Network Printer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"PrintServer HomePage\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"<FRAME name=lower  src=\\\\\\\"index.files/user.files/index.htm\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Konica_Minolta-printer\",\n  \"logic\": \"(a&&b) || ((c||d|| (e&&f) || (g&&h)) &&i)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"KONICA MINOLTA \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"LPC Http Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"KONICA MINOLTA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"vlink=\\\\\\\"#000000\\\\\\\" onload=\\\\\\\"location.replace('/wcd/index.html');\\\\\\\" >\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"<meta http-equiv=\\\\\\\"refresh\\\\\\\" content=\\\\\\\"0; url=/wcd/js_error.xml\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"<LangNo>En</LangNo>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"</MFP>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"HuaWei-S12708\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"S12708 \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"S12708\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Huawei-S12708\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Huawei-S12708\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-S5728C\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"S5728C \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"S5728C \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-PROLIANT-ML10\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PROLIANT-ML10\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PROLIANT-ML10\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-DL380-G7\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DL380-G7\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DL380-G7\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETPOSA-PVG video system\",\n  \"logic\": \"a||b|| (c&&d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e1c\\u65b9\\u7f51\\u529bPVG\\u89c6\\u9891\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<span id=\\\\\\\"sysname\\\\\\\">Power Video Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"PVG-IPSAN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"\\u4e1c\\u65b9\\u7f51\\u529bPVG_OCX_Demo\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Netposa companies products\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<h1>\\u4e07\\u89e3 - \\u4e1c\\u65b9\\u7f51\\u529b: </h1>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<span class=\\\\\\\"copyright\\\\\\\">\\u4e1c\\u65b9\\u7f51\\u529b\\u79d1\\u6280\\u80a1\\u4efd\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<a href=\\\\\\\"http://www.netposa.com/\\\\\\\">\\u5173\\u4e8e\\u6211\\u4eec</a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<span class=\\\\\\\"big\\\\\\\">\\u4e1c\\u65b9\\u7f51\\u529b\\u79d1\\u6280\\u80a1\\u4efd\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ISPY-video surveillance\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"vipcam.cn login:\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Visit Data - Company Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Subject: c=cn, st=Some-State, l=Beijing, o=WisData, cn=wisdata.com.cn\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huawei-camera\",\n  \"logic\": \"a||b||c|| (d&&e) ||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ou=Enterprise UC&C ProductLine Video Surveillance PDU\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"o=Huawei, ou=Enterprise UC&C ProductLine, ou=Collaborative Applicantion PDU\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Huawei IPC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"o=Huawei\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"cn=HUAWEI IPC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"HUAWEI SDC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"HoloSens <span class=\\\\\\\"logo-holoSens\\\\\\\">SDC</span>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-DL385-G7\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DL385-G7\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-Compaq-ProLiant-5500\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ProLiant 5500\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-DL380-G6\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DL380-G6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-DL360-G5\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DL360-G5\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DL360-G5\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-R710\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge-R710\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-idrac-FCZXMW1\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var tmphn = \\\\\\\"idrac-FCZXMW1\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-T430\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"poweredge-t430\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"poweredge-t430\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"https://user-PowerEdge-T430:10000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"PowerEdge-T430\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-POWEREDGE-R220\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"POWEREDGE-R220\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"POWEREDGE-R220\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"POWEREDGE-R220\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-R630\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge-R630\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-R610\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge-R610\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-400SC\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge-400SC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PowerEdge-400SC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-POWEREDGE-R510\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"POWEREDGE-R510\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"POWEREDGE-R510\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-2950\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge-2950\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PowerEdge-2950\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-POWEREDGE-R540\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge-R540\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PowerEdge-R540\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"PowerEdge-R540\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-2650\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge 2650\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-2900\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge-2900\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-T105\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge-T105\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-POWEREDGE-R730XD\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"POWEREDGE-R730XD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"POWEREDGE-R730XD\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-R200\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge-R200\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-POWEREDGE-R300\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"POWEREDGE-R300\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-1950\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge-1950\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PowerEdge-1950\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"POWEREDGE--1950/cgi-bin/sicweb.exe\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-poweredge-c6100\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"poweredge-c6100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-T140\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge-T140\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-R530\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge-R530\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PowerEdge-R530\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"PowerEdge-R530\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-750\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"poweredge-750\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"poweredge-750\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-R740xd\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge-R740xd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-R740\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge-R740\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-T610\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge-T610\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PowerEdge-T610\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-R910\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge-R910\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-POWEREDGE-R210\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"POWEREDGE-R210\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"POWEREDGE-R210\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"poweredge-r210-ii</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-POWEREDGE-T30\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"POWEREDGE-T30\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"POWEREDGE-T30\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WatersSSLVPN\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Waters SSL VPN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"welcome.cgi?p=logo&signinid=url_default\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FourSeasonsVPN\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FS VPN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"imgs/FS-Black-Box.jpg\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXSEC unified security gateway\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5b89\\u5168\\u7f51\\u5173\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Welcome to Login Gateway System\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ZTE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WindowsCE\",\n  \"logic\": \"((a||b||c) &&d&&e&&f) || ((g||h) &&i&&j)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Microsoft-WinCE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Windows CE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"WindowsCE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"X-Powered-By: ThinkPHP\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Microsoft Windows CE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Primary Domain : Windows CE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Fuji_Xerox-printer\",\n  \"logic\": \"(((a&&b) ||c||d||e||f||g||h||i||j||k) &&l) || ((m||n||o|| (p&&q) || (r&&s) || (t&&u) ||v||w||x||y) &&z)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FUJI XEROX Docu\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Xerox WorkCentre\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"XEROX DocuCentre\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"FUJI XEROX DocuCentre\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"XEROX DocuPrint\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"FUJI XEROX ApeosPort\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"FUJI XEROX Document Centre\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"FUJI XEROX Color\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"FX DocuPrint \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"FUJI XEROX Versant \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"DocuPrint \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"<frame src=\\\\\\\"headstat.htm\\\\\\\" name=\\\\\\\"top\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"DocuCentre\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"<frame src=\\\\\\\"footer.asp\\\\\\\" name=\\\\\\\"footer\\\\\\\" title=\\\\\\\"footer\\\\\\\" scrolling=\\\\\\\"no\\\\\\\" noresize marginheight=\\\\\\\"2\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"q\",\n    \"feature\": \"Epson\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"r\",\n    \"feature\": \"var jtpath = '/jt/cgi-bin/';\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"s\",\n    \"feature\": \"Fuji Xerox\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"t\",\n    \"feature\": \"Internet Services\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"u\",\n    \"feature\": \"frames[2].window.location.href=jtPath + loc;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"v\",\n    \"feature\": \"properties/aboutprinter.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"w\",\n    \"feature\": \"Phaser 6250DP</title>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"x\",\n    \"feature\": \"Phaser 6250N</title>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"y\",\n    \"feature\": \"Phaser 4500DT</font></td>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"z\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"DELL-poweredge-r410\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"poweredge-r410\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"poweredge-r410\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"poweredge-r410\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-POWEREDGE-T440\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"POWEREDGE-T440\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"POWEREDGE-T440\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-T320\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge T320\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"id=\\\\\\\"serverinfo\\\\\\\"> PowerEdge T320\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"PowerEdge T320\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"digitalchina - Camera\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: IPCamera-Webs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u795e\\u5dde\\u6570\\u7801\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-POWEREDGE-R430\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"POWEREDGE-R430\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-POWEREDGE-T20\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"POWEREDGE-T20\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"POWEREDGE-T20\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"POWEREDGE-T20\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-T640\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge-T640\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PowerEdge-T640\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yisheng-SurfNx security gateway\",\n  \"logic\": \"(a&&b) ||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5b89\\u5168\\u7f51\\u5173\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"lib/templates/surfilter/images/logo_big.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/lib/templates/surfilter/css/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"SURFNX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"SURF-NGSA login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FortiAnalyzer\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FortiAnalyzer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FortiAnalyzer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"jumbotron warning\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FORTINET-Fortigate-100D\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Fortigate 100D\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Fortigate100D\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FortiGate-60D\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FortiGate 60D\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Fortigate60D\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fluke companies products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Fluke Networks\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CommScope-netopia-router\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Netopia-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Netopia-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"netopia-payments.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Netopia Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u5b89\\u6052\\u4fe1\\u606f-\\u660e\\u5fa1\\u8fd0\\u7ef4\\u5ba1\\u8ba1\\u4e0e\\u98ce\\u9669\\u63a7\\u5236\\u7cfb\\u7edf\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u660e\\u5fa1\\u8fd0\\u7ef4\\u5ba1\\u8ba1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Xerox-CentreWare\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"CentreWare_IS_Admin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"CentreWare Internet Services\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"CentreWare_IS_Admin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"CentreWare Internet Services\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Compact-Router\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Compact Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Compact Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-R310\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge R310\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-POWEREDGE-R230\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"POWEREDGE-R230\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"POWEREDGE-R230\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-R720\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"serverinfo\\\\\\\"> PowerEdge R720\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PowerEdge R720\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-R520\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"serverinfo\\\\\\\"> PowerEdge R520\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PowerEdge R520\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-R720xd\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"serverinfo\\\\\\\"> PowerEdge R720xd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PowerEdge R720xd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-T420\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"serverinfo\\\\\\\"> PowerEdge T420\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PowerEdge T420\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-R320\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"serverinfo\\\\\\\"> PowerEdge R320\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PowerEdge R320\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"PowerEdge R320\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-R620\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"serverinfo\\\\\\\"> PowerEdge R620\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PowerEdge R620\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-R820\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"serverinfo\\\\\\\"> PowerEdge R820\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Arcor-DSL-Modem\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Arcor-DSL WLAN-Modem\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Arcor-DSL WLAN-Modem\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ucftpd\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ucftpd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Aztech-D140W\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"AZ-D140W\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"AZ-D140W\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AirLive-Firmware&Driver\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"airlive AirMax5\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"AirLive WHA-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"airlive AirMax2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"airlive AirMax5\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"AirLive WHA-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"airlive AirMax2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AirLive-Modem\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"airlive ARM-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"AirLive ARM201\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"airlive ARM-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"AirLive ARM201\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-Gateway\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"AMG1001-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"AMG1001-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EDIMAX-Modem\",\n  \"logic\": \"a||b||c||d||e||f||g||h||i||j\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"AR-7182WnA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"AR-7186WnA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"AR-7188WnA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"AR-7286WnA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"AR-7286WnB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"realm=\\\\\\\"AR-7182WnA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"realm=\\\\\\\"AR-7186WnA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"realm=\\\\\\\"AR-7188WnA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"realm=\\\\\\\"AR-7286WnA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"realm=\\\\\\\"AR-7286WnB\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Riak-DB\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"riak\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PostgreSQL\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"postgres\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MemCache\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"memcache\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cassandra\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cassandra\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oracle companies\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"oracle\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"[OracleException]: ORA-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SAP-Sybase\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: AdaptiveServerAnywhere\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: AdaptiveServerAnywhere\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: SQLAnywhere\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: SQLAnywhere\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-DB2 database\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"db2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Muratec-mfx printer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Muratec MFX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MFX-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Maipu-MyPower-OS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MyPower (R) Operating System Software\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-DCS2210\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"serverinfo\\\\\\\"> DCS2210\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-9008-V5\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ProductName/9008 V5\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-CH242-V5\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ProductName/CH242 V5\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"3COM-Baseline-Switch\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"3Com Baseline Switch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Baseline Switch \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-5288-V3\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ProductName/5288 V3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"3COM-Switch-5500G\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Switch 5500G\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"3com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-CloudIVS-3000S\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ProductName/CloudIVS 3000S\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-Switch\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Switch Software Version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Hewlett-Packard Development Company\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"HP 1820\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-RH2288H-V3\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ProductName/RH2288H V3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LevelOne-11g-Wireless-Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"11g Wireless Broadband Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-2488H-V5\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ProductName/2488H V5\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"uniview-VM2500\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u8f6f\\u4ef6\\u7248\\u672c\\uff1a  VM2500\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-43UK6470PLC\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelNumber>43UK6470PLC</modelNumber>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-RH1288-V3\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ProductName/RH1288 V3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-32LM630BPSB\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelName>32LM630BPSB</modelName>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-65UM7800HNA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelNumber>65UM7800HNA</modelNumber>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u667a\\u80fd\\u5e73\\u53f0\\u7ba1\\u7406\\u63a5\\u53e3\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ipmi\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huawei-Secoway Firewall\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Secoway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Secoway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"legendsec - firewall\",\n  \"logic\": \"a|| (b&&c) || ((d||e) &&f) ||g||h||i||j||k\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"secgate 3600\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"SecOS \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"css/lsec/login.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"src=\\\\\\\"?g=login_captcha\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"content=\\\\\\\"\\u4e0a\\u6d77\\u6590\\u8baf\\u6570\\u636e\\u901a\\u4fe1\\u6280\\u672f\\u6709\\u9650\\u516c\\u53f8\\\\\\\"\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"SecGate3600\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"var __permission = \\\\\\\"360\\u7f51\\u795e\\u9632\\u706b\\u5899\\u7cfb\\u7edfNSG\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"var __permission = \\\\\\\"360\\u7f51\\u795e\\u9632\\u706b\\u5899\\u7cfb\\u7edf\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"var __permission = \\\\\\\"\\u7f51\\u795e\\u9632\\u706b\\u5899\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"var __permission = \\\\\\\"\\u7f51\\u795eSecGate3600 \\u9632\\u706b\\u5899\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MikroTik-CCR1036\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RouterOS CCR1036\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TrafSys-People-Counting\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Automatic People Counting Device\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Neo4j\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Neo4j\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ng-show=\\\\\\\"neo4j.enterpriseEdition\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"play-topic=\\\\\\\"neo4j-sync\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"{{ neo4j.version | neo4jDeveloperDoc }}/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Neo4j\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-OLED55E8PLA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelName>OLED55E8PLA</modelName>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-75UM7570PUD\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelName>75UM7570PUD</modelName>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-65UH6550-UB\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelNumber>65UH6550-UB</modelNumber>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-OLED55C9CNA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelName>OLED55C9CNA</modelName>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-55SM8100PSA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelName>55SM8100PSA</modelName>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-43UM7800BNA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelNumber>43UM7800BNA</modelNumber>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-DSLAM\",\n  \"logic\": \"a||b||c||d||e||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"AAM1212-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"IES-612\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"IES-1000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"AAM1212-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"IES-612\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"realm=\\\\\\\"IES-1000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"realm=IES-1000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-65UM6900PUA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelNumber>65UM6900PUA</modelNumber>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GE-NX590\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"(GE-Interlogix) / NX590\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-IP-Switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HP IP Console Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-55UM7100PLB\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelNumber>55UM7100PLB</modelNumber>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-43UM7510PSB\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelNumber>43UM7510PSB</modelNumber>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-OLED55C8FNA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelName>OLED55C8FNA</modelName>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-49UK6820ENF\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelNumber>49UK6820ENF</modelNumber>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-OLED65B7K-N\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelNumber>OLED65B7K-N</modelNumber>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Openvox-Wireless-Gateway\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Openvox-Wireless-Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Openvox-Wireless-Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-NBG-416N\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NBG-416N N-lite Home Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NBG-418N N Home Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"NBG-416N N-lite Home Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"NBG-418N N Home Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"leadsec Nebula - Security Gateway\",\n  \"logic\": \"a||b||c||d||e||f|| (g&&h&&i&&j)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u8054\\u60f3\\u7f51\\u5fa1 \\u5b89\\u5168\\u7f51\\u5173\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SAG\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"var cookiename = \\\\\\\"sagLoginFailTimes\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<img src=\\\\\\\"SecurityCodeServlet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"\\u7f51\\u5fa1 \\u5b89\\u5168\\u7f51\\u5173\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"href=\\\\\\\"leadsec.cer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"id=\\\\\\\"changeYZM\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"www.leadsec.com.cn</a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"content=\\\\\\\"\\u5317\\u4eac\\u542f\\u660e\\u661f\\u8fb0\\u4fe1\\u606f\\u5b89\\u5168\\u6280\\u672f\\u6709\\u9650\\u516c\\u53f8\\\\\\\"\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"txt_username\\\\\\\").val()==\\\\\\\"administrator\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-49UH603V-ZE\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelNumber>49UH603V-ZE</modelNumber>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-75UK6570AUA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelNumber>75UK6570AUA</modelNumber>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Maipu-VPN3005\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"MPSec VPN3005C\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"VPN3005C\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"nusoft System - Multi-Homing-Gateway\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Multi-Homing Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Wi-Fi Multi-Homing\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hillstone-SR-320\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CommonName: SR-320\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-RV220W\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RV220W\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-OLED55B8GNA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelName>OLED55B8GNA</modelName>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SOPHOS-UTM220\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"UTM220\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var OWN_STATUS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"paloalto-PA-500\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PA-500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PA-500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"id=\\\\\\\"heading\\\\\\\">GlobalProtect Portal</div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tenda-W20E\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var sys_target = \\\\\\\"W20E\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-ASR-9010\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ASR9010\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Eaton-EX-2200\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EX 2200\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ExtremeWare-XOS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ExtremeWare XOS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ExtremeXOS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Extron-ShareLink\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Extron Electronics ShareLink\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RLE-Environmental-Monitor\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Environmental Monitor by RLE Technologies\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sagemcom-FAST3890V2\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FAST3890V2 Wireless Voice Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SAGEMCOM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"pexip\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<h2>Pexip Infinity</h2>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<h2>\\u4f1a\\u8bae\\u5e73\\u53f0</h2>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Pexip Infinity\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"pex-app\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Digifort\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"digifort\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"http://www.digifort.jp/\\\\\\\"><img src=\\\\\\\"/user_data/packages/digifort_pc/img/common/logo.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"Digifort HTTP \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"Serveur Digifort HTTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"Digifort HTTP \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"realm=\\\\\\\"Serveur Digifort HTTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Skype-for-Business\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var reachclientproductname = \\\\\\\"Skype for Business Web \\u5e94\\u7528\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Qi Zhi Technology - Fortress\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"forget_pwd hide\\\\\\\" href=\\\\\\\"#\\\\\\\" onclick=\\\\\\\"forgot_pwd();\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var driver = DLLRegistered(\\\\\\\"XECtrl13.XFPAuthenExportX\\\\\\\");\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-Blade-Switch\",\n  \"logic\": \"a|| (b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ethernet Blade Switch for HP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Ethernet Blade Switch for HP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"HP PC Blade Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Eaton-EX-1500-RT2U\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EX 1500 RT2U\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NSFOCUS-VPN\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/logo_login_nsfocus.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SSLVPN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NSFOCUS-SAS\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/login_logo_sas_zh_CN.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NSFOCUS&nbsp;SAS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NSFOCUS&nbsp;SAS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NSFOCUS-Aurora Self Scan Agent\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7eff\\u76df\\u4e91\\u6fc0\\u6d3b\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/aurora_nsfocus.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PowerCreator-CMS\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerCreator CMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Email:Support@powercreator.com.cn<br />\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<span class=\\\\\\\"Bottom_VersionNO\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"PowerCreator \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UIN-Cloud Conference\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"UIN.plist\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cloud House - Network Conference\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/companyImage/agents/SDK-LOGO.png\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Movision-Movie Yunxun Cloud\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"meeting movision\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"document.title=\\\\\\\"\\u767b\\u5f55-\\u6469\\u4e91\\u89c6\\u8baf\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<!-- \\u79d1\\u8fbe\\u89c6\\u8baf\\u4e91 \\u6469\\u4e91\\u89c6\\u8baf \\u7535\\u4fe1\\u6709\\u533a\\u522b -->\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Intelbras-Roteador-ACtion-R1200\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Roteador ACtion R1200</p>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Intelbras-WiseFi\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"btn btn-wisefi\\\\\\\" id=\\\\\\\"access_wisefi\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-5900-G3\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"5900-G3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"5900-G3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"5900-G3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"intelbras-Roteador-RF-1200\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"product\\\\\\\">Roteador ACtion RF 1200\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ramptel-SansCord-Router\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"name=Username value=\\\\\\\"ywrtaw4=\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"http://www.ramptel.com/\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NSFOCUS-WVSS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"url:'/accounts/treaty/'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NSFOCUS WVSS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Novell-ZENworks\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/zenworks/js/dojo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Novell ZENworks\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"managementZoneName\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NLNETLABS-NLnet-NSD\",\n  \"logic\": \"a||b||c|| (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"NSD\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Basic realm=\\\\\\\"NSD\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NSD Demo Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"dns\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"NSD\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KJ65N Coal Mine Remote Monitoring Safety Early Warning System\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"images/login/top002.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"WorldDesktop/WebForm1.aspx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"KJ65N\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BenQ-W3000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"W3000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOSHIBA-MT200\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MT200 FTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-HU80KA-KR\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelNumber>HU80KA-KR</modelNumber>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SHARP-XG-C435X\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"XG-C435X\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"XG-C435X\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"SHARP XG-C435X\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BenQ-W1070\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"W1070\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Intelbras-IWR-3000N\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Intelbras\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class='bg-image blur'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Polycom-ViewStation\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"frame name=\\\\\\\"showMyPCFrame\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Powered-By: RealPresence Resource Platform\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Welcome to ViewStation\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IMO-Cloud Office\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/server/page_download/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"download/imo_setup.exe\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"imo\\u4e91\\u529e\\u516c\\u5ba4\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"title=\\\\\\\"imo\\u4e91\\u529e\\u516c\\u5ba4\\\\\\\" href=\\\\\\\"http://imoffice.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/server/page_download/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zenutech-mail\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Enter your Zenutech Account ID and Password:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Enter your Zenutech Account ID and Password:\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"McAfee-Cloud-Protection\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"McAfee Cloud Web Protection\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"McAfee Cloud Web Protection\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SONY-SNC-ER550\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Sony Network Camera SNC-ER550\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Sony Network Camera SNC-ER550\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SONY-SNC-ER585\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Sony Network Camera SNC-ER585\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Sony Network Camera SNC-ER585\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NSFOCUS-NIPS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/login_logo_nips_zh_CN.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MULTILASER-Roteador-Wireless-N300\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"rel=\\\\\\\"shortcut icon\\\\\\\" href=\\\\\\\"./multi_icone.ico\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"rel=\\\\\\\"shortcut icon\\\\\\\" href=\\\\\\\"/multi_icone.ico\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NSFOCUS-ADS\",\n  \"logic\": \"a||b|| (c&&d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NSFOCUS ADS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/login_logo_ads_en_US.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NSFOCUS ADS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"nsfocus.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Nsfocus ADS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NSFOCUS-SG\\u5b89\\u5168\\u7f51\\u5173\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/login_logo_sg_zh_CN.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IQinVision-IQeye711\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IQeye711\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IQinVision IQeye711\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IQinVision-IQeye811\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IQeye811\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IQeye811\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"New point OA\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u65b0\\u70b9\\u534f\\u540c\\u529e\\u516c\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u8bf7\\u5b89\\u88c5\\u65b0\\u70b9\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IQinVision-IQeye753\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IQeye753\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IQeye753\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IQinVision-IQeye701\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IQeye701\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IQinVision-IQeye710D\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IQeye710D\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IQinVision-IQA15N\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IQA15N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IQinVision IQA15N\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IQinVision-IQA12S\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IQA12S\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ThinkPHP-YFCMF\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"YFCMF\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/public/others/maxlength.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/yfcmf/yfcmf.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Super Technology - Machinery Monitoring System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"images/logo/logo40.png\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u76d1\\u63a7\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IQinVision-IQeye3\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IQeye3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IQeye3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"S-CMS\",\n  \"logic\": \"a||b||c||d||e||f||g||h||i\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"scms_container w1200\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<p class=\\\\\\\"alignRight\\\\\\\">Powered by S:CMS - Copyright \\u00a9\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"SCMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<!-- Inizio righe di indicizzazione nei motori di ricerca -->\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"www.smartlogic.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"/media/20151019095214828.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"<h2>\\u95ea\\u7075CMS\\u5efa\\u7ad9\\u7cfb\\u7edf</h2>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"type=news&s_id=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"type=newsinfo&s_id=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Strait Information - Black Shield Operation and Safety Gateway\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u9ed1\\u76fe\\u8fd0\\u7ef4\\u5b89\\u5168\\u7f51\\u5173(HD-SGS/V4.0)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-OS6900-T20\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span>Device OS6900-T20\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-AX88U\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"RT-AX88U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"RT-AX88U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-AX88U</div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"var product_name='RT-AX88U'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"\\\\\\\"model_name\\\\\\\":\\\\\\\"RT-AX88U\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"kubernetes\",\n  \"logic\": \"a||b||c||d||e||f||g||h|| ((i||j) &&k&&l)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Kubernetes dashboard\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"assets/images/kubernetes-logo.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<article class=\\\\\\\"post kubernetes\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<b>KUBERNETES</b> listening\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"value=\\\\\\\"kubernetes\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"realm=\\\\\\\"kubernetes\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"realm=\\\\\\\"kubernetes\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Kubernetes CI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"/healthz\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"/metrics\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"paths\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"application/json\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"vocetelecomWIFI\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"vocetelecomWIFI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"vocetelecomWIFI\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-OS6900-T40\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span>Device OS6900-T40\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DSR-1000AC\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Unified Services Router - DSR-1000AC </div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" DSR-1000AC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-OS6900-X20\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span>Device OS6900-X20\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-TUF-AX3000\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"document.getElementsByClassName(\\\\\\\"model-name\\\\\\\")[0].innerhtml = \\\\\\\"TUF-AX3000\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"prod_madelName\\\\\\\">TUF-AX3000</div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DSR-500AC\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DSR-500AC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Unified Services Router - DSR-500AC </div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PMWAY-E5\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"tip_BrowserTooLow:\\\\\\\"\\u60a8\\u5f53\\u524d\\u4f7f\\u7528\\u7684\\u6d4f\\u89c8\\u5668\\u7248\\u672c\\u6216\\u6a21\\u5f0f\\u592a\\u4f4e\\uff0c\\u9e4f\\u4e3aE5\\u4e3a\\u4e86\\u60a8\\u66f4\\u597d\\u7684\\u4f53\\u9a8c\\uff0c\\u8bf7\\u5347\\u7ea7\\u60a8\\u7684IE\\u7248\\u672c\\u81f38.0\\u6216\\u4ee5\\u4e0a\\u3002\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u9e4f\\u4e3a\\u8f6f\\u4ef6 E6\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"TENDA-wireless extension\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"alt=\\\\\\\"Tenda LOGO\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Extender\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CMailServer\",\n  \"logic\": \"a|| (b&&c) ||d|| (e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cmailserver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Mail Server WebMail - \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<font size=2>Username ( Contatto Email )</font>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"CMailServer \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<img src=\\\\\\\"images/webmail.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"<input type=checkbox name=\\\\\\\"SaveUserPass\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ronglian Seven Mo - Company Products\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"ds_do_action domain_aboutUs\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/javascripts/qiniu/qiniu.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u4efb\\u7f51\\u6e38-\\u9f99\\u7ba1\\u5bb6\\u8ba1\\u8d39\\u7cfb\\u7edf\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"background=\\\\\\\"images/logBg.jpg\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"value=\\\\\\\"\\u7ecf\\u7406\\\\\\\">\\u7ecf\\u7406</option>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zhigao-Yiwai E-Link\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"document.writeln(\\\\\\\"\\uff08\\u6e29\\u99a8\\u63d0\\u793a\\uff1a\\u6b64\\u5904\\u4e3a\\u5fd7\\u9ad8\\u7f8e\\u840d\\u5206\\u652f\\u673a\\u6784\\u8054\\u7cfb\\u65b9\\u5f0f\\uff0c\\u5fd7\\u9ad8\\u7f8e\\u840d\\u603b\\u90e8\\u8054\\u7cfb\\u65b9\\u5f0f\\u8bf7\\u70b9\\u51fb<a href='JavaScript:var\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yuneasy- Yunyu IP Call Center\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e91\\u7fccIP\\u547c\\u53eb\\u4e2d\\u5fc3</span>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NALONG-electronic medical record system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"ctl00_ContentPlaceHolder1_txtHospCode\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Wildcat\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Wildcat\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Wildcat\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Wildcat.Net\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Keil-Embedded-WEB-Server\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Keil-EWEB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Keil-EWEB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Werkzeug\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Werkzeug\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<p>You should be redirected automatically to target URL:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Werkzeug\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DOITVR-Company Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/svnmedia/images/logo.svg\\\\\\\" alt=\\\\\\\"doit VR\\u00ae\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Suite_CRM-Products\",\n  \"logic\": \"a|| (b&&c) ||d|| (e&&f) ||g||h\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SUGAR.themes.theme_name = 'SuiteP'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SUGAR.themes.theme_name      = 'SuiteR'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"img/suitecrm.png\\\\\\\" alt=\\\\\\\"Bitnami SuiteCRM Stack\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Supercharged by SuiteCRM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"src=\\\\\\\"custom/themes/default/images/company_logo.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"alt=\\\\\\\"SuiteCRM\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Set-Cookie: sugar_user_theme=SuiteP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Set-Cookie: sugar_user_theme=SuiteP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WAYOS-\\u667a\\u80fd\\u8def\\u7531\\u7ba1\\u7406\\u7cfb\\u7edf\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7ef4\\u76df\\uff08WayOS\\uff09\\u667a\\u80fd\\u8def\\u7531\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Multi-electronic archive management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \">\\u591a\\u53ef\\u7535\\u5b50\\u6863\\u6848\\u7ba1\\u7406\\u7cfb\\u7edf</div\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BOSCH-DIVAR-IP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"vrmchunk.setHelpName('VRM_Monitor')\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"The requested URL '/' was not found on the Divar\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yunxia interconnection - red core safety control platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7ea2\\u82af\\u5b89\\u5168\\u7ba1\\u63a7\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zarafa-CalDav-Gateway\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Zarafa CalDav Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Zarafa CalDav Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Si Wan Software - Document Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"$.cookie('sianglng' , null)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MOTOROLA-MR2600\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Motorola Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KeyFocus-WebServer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: KFWebServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: KFWebServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kentico-CMS\",\n  \"logic\": \"a||b||c|| (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CMSPreferredCulture\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CMSPreferredCulture\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"Kentico CMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/CMSPages/GetResource.ashx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Kentico\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kerio-Connect\",\n  \"logic\": \"a||b|| (c&&d) || (e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Kerio Connect\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Kerio Connect\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Kerio Control\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Web Server\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Kerio Connect\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"pop3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kerio-WebSTAR\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Kerio_WebSTAR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: WebSTAR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"4D_WebStar\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Kerio_WebSTAR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: WebSTAR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"4D_WebStar\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zyxel-VMG series gateway\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \".::Welcome to the Web-Based Configurator::.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"zyxelhelp.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kleeja\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by Kleeja\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kerio-WinRout-Firewall\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Kerio WinRoute Firewall\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Kerio WinRoute Firewall\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"style/bodyNonauth.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/gfx/kerio_logo.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Kerio WinRoute Firewall\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yii-Framework\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"YII_CSRF_TOKEN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"YII_CSRF_TOKEN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Get started with Yii\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Laravel-Framework\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Set-Cookie: laravel_session\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Set-Cookie: laravel_session\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"YAMAHA-RT\\u8def\\u7531\\u5668\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"YAMAHA-RT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"YAMAHA-RT\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Broadcom-Home-Gateway\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Broadcom Home Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Broadcom Home Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"CISCO-Data-Center-Network-Manager\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Data Center Network Manager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Jumei Technology - Video Monitoring\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"JFTECH\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"iTop\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"iTop Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"http://www.combodo.com/itop\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ispcpomega-product\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ispCP Omega a Virtual Hosting Control System\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Set-Cookie: ispCP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Set-Cookie: ispCP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Karrigell\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Karrigell\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Karrigell\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KaiBB\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by KaiBB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Forum powered by KaiBB\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Juniper-Load-Balancer\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Set-Cookie: rl-sticky-key\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Set-Cookie: rl-sticky-key\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Juniper Networks Application Acceleration Platform\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Juniper Networks Application Acceleration Platform\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Jive-SBS\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/jive-icons.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"jive-body-formpage\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-Jsl: \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"X-Jsl: \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"jive.rte.defaultStyles\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Jigsaw\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Jigsaw\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Jigsaw\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JSF\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Powered-By: JSF\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Powered-By: JSF\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ISPCONFIG-product\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"powered by <a href=\\\\\\\"http://www.ispconfig.org\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CouchBase-database\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Couchbase\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Couchbase\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Couchbase Console\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"Couchbase\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"Couchbase\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"iPeer\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by iPeer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipeer=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ipeer=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/js/ipeer.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/css/ipeer.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ionCube-PHP-Accelerator\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"x-accelerated-by\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"x-accelerated-by\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"I-O-DATA-Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"I-O DATA Wireless Broadband Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Informatics-CMS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Informatics\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"iScripts-ReserveLogic\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://www.iscripts.com/reservelogic/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ipTIME-Router\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"networks - ipTIME\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=iptime.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IPCop-Firewall\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IPCop - Main page\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<!-- IPCop logo row -->\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href='https://sourceforge.net/projects/ipcop/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"href='http://sf.net/projects/ipcop/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Honeywell-Intermec-EasyLAN\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: XCD WebAdmin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: XCD WebAdmin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"color=\\\\\\\"BLACK\\\\\\\" size=\\\\\\\"5\\\\\\\">Intermec EasyLAN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-AiCloud\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/smb/css/startup.png\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MULTIABNLE-M18\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<label>\\u6253\\u5f00M18 App\\uff0c \\u626b\\u63cf\\u4e8c\\u7ef4\\u7801</label>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"InterRed\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"InterRed\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Created with InterRed\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AXIS-MegapixelIPCamera\",\n  \"logic\": \"a|| (b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"MegapixelIPCamera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Megapixel IP Camera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"Megapixel_IP_Camera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Mega-Pixel Network Camera\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Shang Bo Xin - Internet Marketing Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/sunbox/assets/js/ace.min.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Infinet-Wireless-Router\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"InfiNet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: WANFlex HTTP Daemon\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: WANFlex HTTP Daemon\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Infomaster-product\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/MasterView.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/masterView.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/MasterView/MPLeftNavStyle/PanelBar.MPIFMA.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Indico\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MAKACSESSION\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MAKACSESSION\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"http://cern.ch/indico\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ImpressPages-CMS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"ImpressPages CMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-iLO\",\n  \"logic\": \"((a||b||c||d) &&e&&f) || ((g||h) &&i&&j)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"http://www.hp.com/go/ilo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HP Integrated Lights-Out\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"js/iLO.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: HP-iLO-Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Server: HP-iLO-Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Management Processor (MP) for HP Integrity Servers\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"IMGallery\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"http://www.imgallery.zor.pl\\\\\\\"><b>IMGallery\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ikonboard\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Ikonboard\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://www.ikonboard.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"iHTML\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Using iHTML\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Using iHTML\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"iGuard-Security-System\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"iGuard Embedded Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Lucky-Tech iGuard\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"iGuard Embedded Web Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OrientDB\",\n  \"logic\": \"(a&&b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OrientDB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"CMS Web Viewer\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Redirecting to OrientDB\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"iDVR\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"iDVR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: iDVRhttpSvr\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: iDVRhttpSvr\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"name=\\\\\\\"iDVRForm\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IdeaWebServer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: IdeaWebServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: IdeaWebServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"indy\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Indy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Indy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"ZyXEL-Keenetic\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"ZyXEL Keenetic\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZyXEL-Keenetic\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ZyXEL Keenetic\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cipafilter-\\u516c\\u53f8\\u4ea7\\u54c1\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Cipafilter Web management\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Cipafilter Web administration\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"Cipafilter Web management\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"Cipafilter Web administration\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KT-router\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"test@kt.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"test@kt.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SUMITOMO_ELECTRIC-Company Products\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Sumitomo Electric Industries\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Sumitomo Electric Industries\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yearning\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Yearning\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=/icon.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"id=Subnet\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-USG2100\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"USG2100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Boss Post Office - Virtual Host Control Panel\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/public/js/util/xg_oyang.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Foton-Accessories Service Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FTDCS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LINKSYS-WRT54G\",\n  \"logic\": \"a||b||c||d||e||f|| (g&&h) ||i\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WRT54G\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"WRT54G\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Linksys WRT54G\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"LINKSYS-WRT54g\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"WRT54G-linksys\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Corbett WRT54G\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Linksys WRT54G\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"LinksysWRT54G\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LINKSYS-WRT54GCv3\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WRT54GCv3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"WRT54GCv3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LINKSYS-WRT54GL\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WRT54GL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"WRT54GL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"linksys-wrt54gl\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Linksys WRT54GL\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LINKSYS-WRT54GS\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WRT54GS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"WRT54GS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Linksys WRT54GS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Linksys-WRT54GS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LINKSYS-WRT54GSV4\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WRT54GSV4\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"WRT54GSV4\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"REACH Rare -DSS-ENC-1100\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \":::Encoder(DSS-ENC-1100):::\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Vision-video surveillance\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<Frame src=\\\\\\\"login.aspx\\\\\\\" name=\\\\\\\"contents\\\\\\\"  scrolling=Auto FRAMEBORDER\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tianhe - Wireless Meter Read Inquiry System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5173\\u4e8e\\u6b63\\u5219\\u8868\\u8fbe\\u5f0f\\u7684\\u5185\\u5bb9\\u5728\\u672c\\u4e66\\u7684\\u7b2c10\\u7ae0\\u4e2d\\u6709\\u8f83\\u8be6\\u7ec6\\u7684\\u8ba8\\u8bba\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP-LINK-Wireless-N-Router-WR941N\",\n  \"logic\": \"((a||b||c||d||e) &&f) || (g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TP-LINK Wireless N Router WR941N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TL-WR941N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"TP-Link TL-WR941N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"TP-LINK Wireless WR941N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: Wireless N Router WR941N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Server: Wireless N Router WR941N\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OMD-Monitoring\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"OMD Monitoring\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"OMD Monitoring\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u817e\\u8fbe-N60\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"loagin_title\\\\\\\">TENDA N60\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"tenda-N60\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"Tenda N60\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"Tenda N60\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP-LINK-TD-W8970\",\n  \"logic\": \"a||b||c||d||e||f||g||h||i||j\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TP-LINK 300Mbps Wireless N Gigabit ADSL2+ Modem Router TD-W8970\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"0.6.0 1.2 v000c.0 Build 130201 Rel.54921n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"0.6.0 2.1 v000c.0 Build 130415 Rel.34164n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"0.6.0 2.12 v000c.0 Build 140613 Rel.31066n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"0.6.0 2.13 v000c.0 Build 140919 Rel.52310n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"0.6.0 2.8 v000c.0 Build 130828 Rel.38099n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"0.6.0 2.9 v000c.0 Build 131114 Rel.33362n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"0.9.1 0.1 v0035.0 Build 141010 Rel.53828n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"0.9.1 1.1 v0035.0 Build 141212 Rel.33999n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"0.9.1 1.2 v0035.0 Build 150427 Rel.63930n\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PMWAY-E6\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u9e4f\\u4e3a\\u8f6f\\u4ef6 E6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Futong World -ERP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<h1>\\u5bcc\\u901a\\u5929\\u4e0bERP</h1>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"You Shikang-EC-Fax\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \" href=\\\\\\\"web/css/faxcss.css\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"web/img/log/logo-faxlogin.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Youyou - Youyou Firewall\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"./js/jquery.validate.js\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"inputSize2\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u9632\\u706b\\u5899\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Bihewei Technology-Company Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href='http://www.bithighway.com' target=_blank>\\u5317\\u4eac\\u78a7\\u6d77\\u5a01\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8<\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"InfoGuard-Airlock\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"al_sess=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"al_lb=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"al_sess=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"al_lb=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Song Xun Technology - Intelligent Cache\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/Public/sec/assets/js/libs/jquery.placeholder.min.js\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" href=\\\\\\\"http://www.dwcache.com\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-OS6865-U12X\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span>Device OS6865-U12X\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-OS6865-P16X\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span>Device OS6865-P16X\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-WebSphere-DataPower\",\n  \"logic\": \"(a&&b&&c) || (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"x-backside-transport\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"28ZE\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"360 web server\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"x-backside-transport\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"360 web server\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-OS6860E-P24\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span>Device OS6860E-P24\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ostec-firebox\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"background-image: url('/icones/fundo_firebox.png')\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"http://colorzilla.com/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"OSTEC FireBox\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"inseego-Skyus-E\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"img/Skyus_E_fpos.png\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR350LPE\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: IBR350LPE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR1100LP3\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: IBR1100LP3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR1150LP3\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cplogin.model = \\\\\\\"IBR1150LP3\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-AER1600LP4\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cplogin.model = \\\\\\\"AER1600LP4\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"AER1600LP4\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Cradlepoint AER1600LP4\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR600C-150M-D\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: IBR600C-150M-D\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-AER3100\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: AER3100\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"AER3100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR900LPE\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cplogin.model = \\\\\\\"IBR900LPE\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-AER1650LP4\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: AER1650LP4\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR650E\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: IBR650E\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-AER2200-600M\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: AER2200-600M\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"cplogin.model = \\\\\\\"AER2200-FIPS-600M\\\\\\\";\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR1700-600M\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: IBR1700-600M\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-AER1650LPE\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: AER1650LPE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR650CLPE\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: IBR650CLPE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR900-600M\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: IBR900-600M\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR650C-150M-D\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: IBR650C-150M-D\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR600CLPE\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: IBR600CLPE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-MBR1400v2\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: MBR1400v2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MBR1400v2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Icecast\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"icecast\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Icecast\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"EZStream\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Icecast\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-Web-Traffic-Express-Caching-Proxy\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IBM-PROXY-WTE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IBM-PROXY-WTE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/admin-bin/webexec/wte.html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"i-Catcher-Console\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: i-Catcher\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: i-Catcher\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"by i-Catcher Console\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NAVER-MW-5150AP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"MW-5150AP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MW-5150AP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NAVER-MW-6300AP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"MW-6300AP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MW-6300AP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NAVER-MW-6345AP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"MW-6345AP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MW-6345AP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR600LE\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: IBR600LE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cradlepoint IBR600LE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR900LP6\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: IBR900LP6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"netcore-NW705P\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NW705P\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Netcore NW705P\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"NetcoreNW705P\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"NW705P\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"Netcore NW705P\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"realm=\\\\\\\"NetcoreNW705P\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"netcore-NetcoreNW711\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NetcoreNW711\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NetcoreNW711\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-C7000v2\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR C7000v2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NETGEAR Gateway C7000v2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR C7000v2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-DG834G\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR DG834G\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR DG834G\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR200-10M\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: IBR200-10M\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"cplogin.model = \\\\\\\"IBR200-10M\\\\\\\";\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oracle-JAVA\",\n  \"logic\": \"a||b||c||d||e||f||g|| (h&&i&&j) || (k&&l&&m) ||n|| (o&&p&&q&&r) || (s&&t&&u&&v)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Set-Cookie: JSESSIONID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Set-Cookie: JSESSIONID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<h2>Struts Problem Report</h2>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"There is no Action mapped for namespace\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"No result defined for action and result input\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"X-Powered-By: Servlet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"X-Powered-By: Servlet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"JBoss\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"X-Powered-By\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Router\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"JBoss\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"X-Powered-By\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"Router\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"index.jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"360 web server\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"Docker\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"q\",\n    \"feature\": \"jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"r\",\n    \"feature\": \"X-Powered-By\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"s\",\n    \"feature\": \"360 web server\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"t\",\n    \"feature\": \"Docker\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"u\",\n    \"feature\": \"jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"v\",\n    \"feature\": \"X-Powered-By\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR600BLP4\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: IBR600BLP4\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IBR600BLP4\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOTO_LINK-N151RT\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TOTOLINK N151RT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TOTOLINK N151RT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"TOTOLINK N151RT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"TOTOLINK N151RT\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR650LPE\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cplogin.model = \\\\\\\"IBR650LPE\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cradlepoint IBR650LPE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Login :: IBR650LPE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-AER1600\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cplogin.model = \\\\\\\"AER1600\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cradlepoint AER1600\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-AER1600LPE\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cplogin.model = \\\\\\\"AER1600LPE\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cradlepoint AER1600LPE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cradlepoint-CBA850\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cplogin.model = \\\\\\\"CBA850\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ABUS-TVIP10001\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TVIP10001\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TVIP10001\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ABUS-TVIP10500\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TVIP10500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TVIP10500\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ABUS-TVIP20000\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TVIP20000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TVIP20000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ABUS-TVIP21502\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TVIP21502\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TVIP21502\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ABUS-TVIP21550\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TVIP21550\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TVIP21550\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ABUS-TVIP21551\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TVIP21551\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TVIP21551\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ABUS-TVIP21552\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TVIP21552\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TVIP21552\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ABUS-TVIP62000\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TVIP62000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TVIP62000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ABUS-TVIP71501\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TVIP71501\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TVIP71501\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ABUS-TVIP71551\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TVIP71551\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TVIP71551\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ABUS-TVIP72500\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TVIP72500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TVIP72500\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-OmniVista-Cirrus\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/help/en-us/others/OV-Cirrus_CookiePolicy.html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HostBill\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://hostbillapp.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<strong>HostBill\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-LaserJet-Printer\",\n  \"logic\": \"((a||b||c||d) &&e) ||f||g|| (h&&i)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HP-ChaiSOE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HP Color LaserJet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"hp LaserJet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"HP &raquo; &#35774;&#22791;&#29366;&#24577;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"LaserJet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"HP Color LaserJet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Location: /SSI/index.htm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Server: Mrvl-R1_0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CTOP - Collaborative Office OA\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/ctop/index.jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/software/jinstall.exe\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"images/logo-ctop.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"src=\\\\\\\"images/ctop_logo.gif\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Docker-product\",\n  \"logic\": \"a||b||c||d||e||f|| (g&&h&&i) || (j&&k&&l)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Docker-Registry-Version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Docker: PRODUCTION\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-Docker-Container: nginx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"X-Docker-Registry-Version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"X-Docker: PRODUCTION\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"X-Docker-Container: nginx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Server: Docker/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Server: Docker/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"\\u6cdb\\u5fae-EMobile\",\n  \"logic\": \"a|| (b&&c) ||d|| (e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Weaver E-mobile\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"E-Mobile&nbsp;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"action=\\\\\\\"/verifyLogin.do\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/images/login_logo@2x.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"window.apiprifix = \\\\\\\"/emp\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"\\u79fb\\u52a8\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Panmine-E-Weaver\",\n  \"logic\": \"((a&&b) || (c&&d))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"szFeatures\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"redirectUrl\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"rndData\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"isdx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-OS9900\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span>Device OS9900\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NSP-NAS-FTP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NSP-NAS FTP service\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-OS6560-24X4\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span>Device OS6560-24X4\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-ProCurve-Switch\",\n  \"logic\": \"(a&& (b||c||d)) ||e|| (f&&g) ||h|| (i&&j)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: eHTTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ProCurve \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ProCurve \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Hewlett Packard Enterprise Development LP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"ProCurve Switch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"HP \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"ProCurve Switch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"HP ProCurve 1810G\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"ProCurve\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXSEC-US\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_main_text\\\\\\\">ZXSEC US\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZXSEC US\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NetComm-WiFi-VoIP-Gateway\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NetComm WiFi Data and VoIP Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NetComm WiFi Data and VoIP Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"3MP-Network-Camera\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"3MP Network Camera\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Weaning -RP system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/javascript/js/WITFunctions.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kafka-Manager\",\n  \"logic\": \"a||b||c||d||e||f||g||h\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Kafka admin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Kafka-Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"Kafka Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Kafka Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/vassets/dataTables/stylesheets\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"vassets/images/2af62f58ee2baf495c9b3a9a1c30ce03-favicon.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"realm=\\\\\\\"Kafka-Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"realm=\\\\\\\"Kafka Manager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WebRay-Situation Perception\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"disclaimer\\\\\\\" style=\\\\\\\"color: #FFFFFF\\\\\\\">\\u300a\\u76db\\u90a6\\u5b89\\u5168\\u7f51\\u7ad9\\u76d1\\u63a7\\u9884\\u8b66\\u5e73\\u53f0\\u670d\\u52a1\\u534f\\u8bae\\u300b</a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-SiteScope\",\n  \"logic\": \"((a||b||c||d) &&e) || ((f||g||h) &&i)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SiteScope Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: SiteScope\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Path=/SiteScope\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"SiteScope\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: SiteScope\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Path=/SiteScope\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"realm=\\\\\\\"SiteScope\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"gee-HiWiFi\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6b64\\u65b9\\u6cd5\\u4e0eHiWiFi\\u4e2d\\u7684\\u65b9\\u6cd5\\u4fdd\\u6301\\u4e00\\u81f4\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: HiWiFi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: HiWiFi\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VOS-VOS2009\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"VOS2009, VoIP, VoIP\\u8fd0\\u8425\\u652f\\u6491\\u7cfb\\u7edf, \\u8f6f\\u4ea4\\u6362\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NOMADIX-AG-5800\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"AG 5800\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"AG 5800: Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"AG 5800\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ai Run - Smart Parking Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/static/img/allstar.png\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Utorrent-product\",\n  \"logic\": \"a||b||c|| (d&&e&&f) || (g&&h&&i)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"uTorrent\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Basic realm=\\\\\\\"uTorrent\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"www-authenticate Basic realm=\\\\\\\"uTorrent\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"HTTP/1.1 300 ERROR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Content-Length: 15\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"invalid request\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"HTTP/1.1 300 ERROR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Content-Length: 15\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"invalid request\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NexG-VForce\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var lurl = \\\\\\\"VOS.shtml\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ACTi-NVR\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var szproductbrand = 'ACTi'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var szproducttype = 'NVR'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MOBOTIX-M25\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span class=\\\\\\\"bold companyname\\\\\\\">MOBOTIX</span><span class=\\\\\\\"bold featurestypeinfo\\\\\\\">M25\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MOBOTIX-M24\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span class=\\\\\\\"bold featurestypeinfo\\\\\\\">M24\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MOBOTIX-M26\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"bold featurestypeinfo\\\\\\\">M26\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"reolink-NVR\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a id=\\\\\\\"preview_play_balancestream\\\\\\\">Balanced\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Reolink\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LOREX-NVR\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div id=\\\\\\\"lorexcameras\\\\\\\" class=\\\\\\\"style29\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CP_PLUS-NVR\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CPPLUS NVR \\u2013Web View\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-StorageWorks\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HP StorageWorks\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"HP StorageWorks \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETPOSA-Social Resource Access Management Service System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u793e\\u4f1a\\u8d44\\u6e90\\u63a5\\u5165\\u7ba1\\u7406\\u670d\\u52a1\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"netposa\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-J4110A\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"HP J4110A\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HP J4110A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-J4812A\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"HP J4812A\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HP J4812A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Avaya-ERS-8810\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ERS-8810\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TEW-740APBO\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TEW-740APBO</div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TEW-740APBO\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Etag: \\\\\\\"2009-6\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ganglia\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ganglia:: Cluster Report\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"onchange=\\\\\\\"ganglia_form.submit();\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"name=\\\\\\\"ganglia_form\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"gs=unspecified\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"gs=unspecified\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PCLinuxOS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PCLinuxOS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PCLinuxOS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MontaVista-linux\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MontaVista\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MontaVista Software\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: MontaVista/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MNG6200\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MNG6200\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Gearhost-Company Products\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Hosted-With: GearHost\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Hosted-By: GearHost\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Hosted-With: GearHost\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Hosted-By: GearHost\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GateQuest-PHP-Site-Recommender\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GateQuest\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Enhydra-Application-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Enhydra\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Enhydra\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dell-Remote-Access-Device\",\n  \"logic\": \" (a&&b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SetEMClientInfo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/initparams?emclientinfo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Qianxin - code guard\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"360\\u4ee3\\u7801\\u536b\\u58eb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"baseUrl : 'app',        //\\u914d\\u7f6e\\u6a21\\u5757\\u6839\\u8def\\u5f84\\u5230\\u9759\\u6001\\u8d44\\u6e90\\u6839\\u76ee\\u5f55\\u3002\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TEW-823DRU\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var model = \\\\\\\"TEW-823DRU\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TEW-823DRU\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EPiServer\",\n  \"logic\": \"((a||b||c) &&d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"EPiServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/javascript/episerverscriptmanager.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: EpiServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: EpiServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Enigma2\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/web/movielist.rss?tag\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Enigma2 WebControl\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: enigma2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TEW-825DAP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var model = \\\\\\\"TEW-825DAP\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ericsson-TV-Web-Server\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server : Ericsson Television Web server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Ericsson Television Web server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server :Ericsson Television Web server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server : Ericsson Television Web server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: Ericsson Television Web server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server :Ericsson Television Web server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Eserv\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Eserv\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Eserv\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Eserv\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-ICG1800\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"H3C ICG 1800\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"H3C ICG1800\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"H3C ICG 1800\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"H3C ICG1800\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"esoTalk\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"generated by esoTalk\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by esoTalk\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/js/esotalk.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TEW-755AP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var model = \\\\\\\"TEW-755AP\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TEW-810DR\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TEW-810DR pre-test\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TEW-822DRE\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TEW-822DRE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"lang_obj.write(\\\\\\\"product_description\\\\\\\")\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TEW-821DAP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var model = \\\\\\\"TEW-821DAP\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TEW-827DRU\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var model = \\\\\\\"TEW-827DRU\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TEW-824DRU\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var model = \\\\\\\"TEW-824DRU\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Capture(status_router.sys_model)</script></div>Trendnet TEW824DRU\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DLink-DI-808HV\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"DI-808HV\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DI-808HV\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DLink-DI-824VUP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"DI-824VUP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DI-824VUP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DLink-DI-LB604\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DI-LB604\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DI-LB604\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tiandy-NVR\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"maintaince_dialog_ok\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Playback</a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"if(GetDiscription(\\\\\\\"application/x-rs-sclient-v3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dell-Printer\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Dell Laser Printer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Dell Laser Printer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"EWS-NIC5\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<frame src=\\\\\\\"framelogo.htm\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ektron-CMS\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/java/ektron.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ektguid=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ektguid=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Shuhui Information-Integrated Information Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"../../doc/config/shxmjgptapp.png\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KOUTON-CTBS\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6b22\\u8fce\\u4f7f\\u7528 Kouton CTBS Advanced Web Client \\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=client.exe>\\u5ba2\\u6237\\u7aef</a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-SuperSign\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/ssw/js/user/index.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MAiPU-MP1800X-50\",\n  \"logic\": \"(a&&b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/assets/css/ui-dialog.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/form/formUserLogin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Hardware Model\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"MP1800X-50\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RethinkDB\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RethinkDB Administration\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SMARTBI\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"gcfutil = jsloader.resolve('smartbi.gcf.gcfutil')\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-CR16004\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CR16004\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-CR16008-X\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C-CR16008-X\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"H3C CR16008-X\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"uniview-VM5.0\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VM5.0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"uniview-VM9500\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u8f6f\\u4ef6\\u7248\\u672c\\uff1a  VM9500\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"uniview-TMS8500\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TMS8500-IMOS110\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D-link-850L\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"target=\\\\\\\"_blank\\\\\\\">DIR-850L\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"modelname\\\\\\\">DIR-850L\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \">\\u7522\\u54c1\\u9801\\u9762 : DIR-850L<a href=\\\\\\\"javascript:check_is_modified('http://support.dlink.com/')\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"uniview-EZclould\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"images/pag-logo.png\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"uniview-NVR308-32-IN\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NVR308-32-IN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VOS3000\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VOS3000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"VOS3000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"images/vos3000.ico\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"uniview-ISC2500-SCT-E\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ISC2500-SCT-E\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"uniview-ISC2500-SP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ISC2500-SP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"uniview-ISC3500-SL\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ISC3500-SL\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DokuWiki\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"powered by DokuWiki\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"DokuWiki\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<div id=\\\\\\\"dokuwiki\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DMXReady-Portfolio-Manager\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/css/PortfolioManager/styles_display_page.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"rememberme_portfoliomanager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-Network-Camera\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"DCS-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"D-Link Internet Camera\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"DCS-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"D-Link Internet Camera\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"DLI-LPC\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"dlilpc=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"dlilpc=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"uniview-ISC3608-SC\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ISC3608-SC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dell-KACE-Appliance\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"x-dellkace-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"x-dellkace-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZEBRA-GX420t\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZTC GX420t</H1>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Delegate- product\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DeleGate\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: DeleGate\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DD_WRT-product\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"style/pwc/ddwrt.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Basic realm=\\\\\\\"DD-WRT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: DD-WRT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Basic realm=\\\\\\\"DD-WRT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: DD-WRT\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DVWA\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Damn Vulnerable Web App (DVWA) - Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"dvwa/css/login.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"dvwa/images/login_logo.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZEBRA-ZM400-200dpi-ZPL\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZTC ZM400-200dpi ZPL</H1>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZEBRA-ZM400-300dpi-ZPL\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZTC ZM400-300dpi ZPL</H1>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RemObjects-DXSock\",\n  \"logic\": \"(a&&b&&c) ||d||e||f|| (g&&h&&i)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RemObjects\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"ERLib - RemObjects\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"content=\\\\\\\"RemObjects SDK\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"RemObjects Software, LLC.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"RemObjects\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"ZEBRA-S4M-300dpi-ZPL\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZTC S4M-300dpi ZPL</H1>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZEBRA-S4M-200dpi-ZPL\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZTC S4M-200dpi ZPL</H1>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Easy-File-Sharing-Web-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Easy File Sharing Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Easy File Sharing Web Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"eBuilding-Network-Controller\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"eBuilding Web\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZEBRA-105SLPlus-203dpi-ZPL\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZTC 105SLPlus-203dpi ZPL</H1>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZEBRA-105SLPlus-300dpi-ZPL\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZTC 105SLPlus-300dpi ZPL</H1>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZEBRA-RZ600-200dpi-ZPL\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZTC RZ600-200dpi ZPL</H1>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZEBRA-110Xi4-203dpi-ZPL\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZTC 110Xi4-203dpi ZPL</H1>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EdiMAX-Company Products\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EDIMAX Technology\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Edimax\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EdgePrism-CDN\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EdgePrism\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"EdgePrismSSL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: EdgePrism\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: EdgePrismSSL\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DSpace\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"DSpace\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a href=\\\\\\\"http://www.dspace.org\\\\\\\">DSpace Software\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Drugpak companies products\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by DrugPak\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/dplimg/DPSTYLE.CSS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dradis-Framework\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"_dradis_session=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<p class=\\\\\\\"copyright\\\\\\\">Dradis\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"_dradis_session=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-OpenAdmin_Tool\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"oat oneui\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DLink-DI-524\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"DI-524\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DI-524\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SangFor- behavior perception system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"haovuytkjlnvxpuhsecmbljplpvjz = function(str, key) \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Frame-Options: SAMEORIGIN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LANCOM-WIRELESS equipment\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"LANCOM \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" Wireless\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Barracuda-NG-Firewall\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Barracuda NG Firewall\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Barracuda NG Firewall\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Barracuda/NGFirewall\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Barracuda/NGFirewall\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DLink-DI-504\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"DI-504\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DI-504\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RAISECOM-ISCOM2648G\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"color=\\\\\\\"#000000\\\\\\\">ISCOM2648G\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RAISECOM-ISCOM2608G\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"color=\\\\\\\"#000000\\\\\\\">ISCOM2608G\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BDES - Grid Environment VOCS Online Monitoring System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=/static/ipconfig/ip.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oracle-OPERA\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MICROS Systems Inc., OPERA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"OperaLogin/Welcome.do\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tong Soft Network Technology - Smart Campus Information Management Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/Animation/images/teacher_2.png\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"apex-LiveBPM\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/plug-in/login/fixed/css/login.css\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"New Morning Sunshine - Academic Office Management Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \">Digital Anywhere Platform</h2>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SANGFOR-M5100\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"value=\\\\\\\"M5100-Q-4.0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SANGFOR-P5100\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<font color=\\\\\\\"white\\\\\\\">\\u6df1\\u4fe1\\u670d\\u79d1\\u6280\\u7248\\u6743\\u6240\\u6709\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"P5100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DataflexViNE-VoIP-IAD\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: DataflexViNE-Webserver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: DataflexViNE-Webserver\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SANGFOR-M5X00\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"M5X00-Sinfor--SG\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VICIdial\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"url=/vicidial/welcome.php\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: ViciDial\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DataNet\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href='/scada'>DataNet Scada Interface\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SANGFOR-M5000-AC\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"value=\\\\\\\"M5000-AC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SANGFOR-M5500\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"value=\\\\\\\"M5500-SC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"value=\\\\\\\"M5500-Q\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-M100V\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"alt=\\\\\\\"Cisco M100V\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco Content Security Management Virtual Appliance M100V\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NetApp-Data-ONTAP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Data ONTAP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Data ONTAP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DataLife-Engine\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"DataLife Engine\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"dle_\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Datum-TymServe\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<H2 align=CENTER>Datum TymServe\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: DATM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: DATM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-M1070\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"alt=\\\\\\\"Cisco M1070\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco Content Security Management Appliance M1070\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Cisco IronPort M1070\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-M660\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"alt=\\\\\\\"Cisco M660\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco IronPort M660\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Cisco Content Security Management Appliance M660\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-M680\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"alt=\\\\\\\"Cisco M680\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco Content Security Management Appliance M680\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u5927\\u534e-DHI-NVR2104HS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NVR2104HS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-AC68U\",\n  \"logic\": \"a||b||c||d||e||f||g||h||i|| (j&&k)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RT-AC68U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"RT-AC68U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"var product_name='RT-AC68U'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Capture(status_router.sys_model)</script></div>Asus RT-AC68U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Capture(status_router.sys_model)</script></div> Asus RT-AC68U&nbsp;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-AC68U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"class=\\\\\\\"prod_madelName\\\\\\\">JRS Eco 100 on Asus RT-AC68U</div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"class=\\\\\\\"prod_madelName\\\\\\\" style=\\\\\\\"margin-left:78px;\\\\\\\">RT-AC68U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Asus RT-AC68U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"Asus RT-AC68U\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-CSCSSM\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Proxy-Agent: CSCSSM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Proxy-Agent: CSCSSM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u5927\\u534e-DH-NVR4216\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DH-NVR4216\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CommonName: dhi-nvr4216\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"dhi-nvr4216\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u5927\\u534e-DHI-NVR4208\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NVR4208\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u5927\\u534e-DHI-NVR4232\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NVR4232\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DHI-HCVR5116HS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HCVR5116HS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"teradici-PCoIP-Zero-Client\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PCoIP&#174 Zero Client\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"password_value\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Honeywell-IP-AK2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"ak2word\\\\\\\">IP-AK2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"uniview-NVR208-16\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NVR208-16 login:\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TV-IP851WIC\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"descript.gif?cidx=TV-IP851WIC1.022014-03-31\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TV-IP851WIC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"TV-IP851WIC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ContentXXL\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"contentXXL\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Solvonet-Device(VoIP)\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"SOLVONET\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Basic realm=\\\\\\\"SOLVONET\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Eaton-ConnectUPSX\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: UPS_Server/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: UPS_Server/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"UPS Firmware version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"ConnectUPS Web/SNMP Card\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Powerware ConnectUPS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ConfTool\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<h2 align=center>ConfTool Conference Administration\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a href='http://www.conftool.net'>Conference Management Software\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Synaptics-EmWeb\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Virata-EmWeb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Virata-EmWeb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"CommonSpot\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"CommonSpot\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CrushFTP\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: CrushFTP HTTP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: CrushFTP HTTP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"CrushFTP WebInterface\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Covalent-Enterprise-Ready-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CovalentSNMP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CovalentSNMP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CougarConference- Video Conference\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Cougar\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Cougar\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TV-IP751WIC\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TV-IP751WIC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TV-IP751WIC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<p align=\\\\\\\"center\\\\\\\"> TV-IP751WIC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"src=\\\\\\\"descript.gif?cidx=TV-IP751WIC1.022014-03-31\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TornadoServer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: TornadoServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: TornadoServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP-LINK-VPN\",\n  \"logic\": \"(a&&b) || (c&&d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TP-LINK\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"VPN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"TP-LINK\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"VPN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Proxicast-Enterprise-3G/4G-Router\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Proxicast LAN-Cell\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"WAN-Proxicast LAN-Cell\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TV-IP551WI\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TV-IP551WI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TV-IP551WI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"(TV-IP551WI)</title>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TV-IP551W\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TV-IP551W\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TV-IP551W\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"(TV-IP551W)</title>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BrewBlogger\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"developed by <a href=\\\\\\\"http://www.zkdigital.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"365WEBCALL-Company Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src='http://www.365webcall.com/IMMe1.aspx?\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Brother-Printer\",\n  \"logic\": \"((a||b||c) &&d) ||e|| (f&&g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<FRAME src=\\\\\\\"/printer/inc_head.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<IMG src=\\\\\\\"/common/image/HL4040CN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Brother MFC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Brother NC-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"nm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Brother\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Firmware\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-MSR930\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C Series Router MSR930\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ericsson-EDN312xp\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ericsson EDN312xp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ericsson-ESN108\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ericsson ESN108\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TV-IP450PI\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TV-IP450PI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TV-IP450PI\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TV-IP450P\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TV-IP450P\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TV-IP450P\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TV-IP345PI\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"span>TV-IP345PI</span>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TV-IP343PI\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var titlename='TV-IP343PI'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BugTracker.NET\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"btnet.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"valign=middle><a href=http://ifdefined.com/bugtrackernet.html>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<div class=logo>BugTracker.NET\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Easy, Tianchuang-Bugfree\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"logo\\\\\\\" alt=BugFree\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"loginBgImage\\\\\\\" alt=\\\\\\\"BugFree\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"BugFree\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"name=\\\\\\\"BugUserPWD\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TV-IP322WI\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TV-IP322WI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TV-IP322WI\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TV-IP342PI\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var titlename='TV-IP342PI'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TV-IP320PI\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TV-IP320PI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TV-IP320PI\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZoneMinder\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZoneMinder Login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-print or copier\",\n  \"logic\": \"((a||b||c||d) &&e) ||f|| (g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Canon Http Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"iR-ADV\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<span id=\\\\\\\"deviceName\\\\\\\">iR-ADV\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Catwalk\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: Catwalk\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"nm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Canon\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TV-IP312PI\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TV-IP312PI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TV-IP312PI\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TV-NVR208\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div class=\\\\\\\"loginLogo\\\\\\\">TV-NVR208</div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TV-IP302PI\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TV-IP302PI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TV-IP302PI\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BeyondTrust-Access Control System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"alt=\\\\\\\"Remote Support by BOMGAR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a href=\\\\\\\"http://www.bomgar.com/products\\\\\\\" class=\\\\\\\"inverse\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zope\",\n  \"logic\": \"(a&& (b||c||d||e)) || (f&& (g||h||i||j))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"zope\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Zope\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-Powered-By: Zope\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"basic realm=\\\\\\\"Zope\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"X-Debug-Frontend-Key: zope\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"zope\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Server: Zope\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"X-Powered-By: Zope\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"basic realm=\\\\\\\"Zope\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"X-Debug-Frontend-Key: zope\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SOPHOS-XG-Firewall\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var OWN_STATUS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Sophos XG Firewall\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CHANCE-i-DiViS-DVR\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Techno Vision Security System Ver.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Techno Vision Security System Ver.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-RVS5000\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"h3Login\\\\\\\">Small Business Pro\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"RVS5000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tianxing Netan - Data Integration Service System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location.href=\\\\\\\"top_dti-debug/top_dtiSingle.html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"National Bao Jintai - Company Products\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"\\u7a0b\\u5e8f\\\\\\\"->\\\\\\\"jtsec\\\\\\\"->\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"JTSEC-OS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-SA540-K9\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"h3Login\\\\\\\">Small Business Pro\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SA540-K9\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-SA520\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"h3Login\\\\\\\">Small Business Pro\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SA520\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-CVR328W-K9-CN\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src='/js/CN_CVR328W'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var pidname = 'CVR328W-K9-CN'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-X6-R8000\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"R8000\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Organization: NETGEAR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Forcepoint-NGFW\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div class=\\\\\\\"ngfwFormField\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"id=\\\\\\\"software_name\\\\\\\">NGFW Security Management Center\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Forcepoint NGFW\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"3Com-3CDSG8\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"3Com Corporation Web Interface\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\" 3CDSG8\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"3Com 3CDSG8 - \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"3Com-NJ2000\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"3Com Corporation Web Interface\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"3Com IntelliJack NJ2000\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"3Com-NJ2000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FUJI_Xerox-ColorQube\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"document.write('<title>' + 'XEROX WORKCENTRE')\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"document.write('<title>' + 'XEROX ColorQube')\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-Lotus-Domino\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Lotus-Domino/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Lotus-Domino/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"YouPHPTube-Encoder\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"YouPHPTube Encoder\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"view/js/seetalert\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"YouPHPTube\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZMailer\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZMailer Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Forefront-TMG\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Microsoft Forefront TMG\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"graylog\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Graylog Web Interface\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"org.graylog.plugins.pipelineprocessor.ProcessorPlugin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-Graylog-Node-Id\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Basic realm=\\\\\\\"graylog \\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"X-Graylog-Node-Id\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Basic realm=\\\\\\\"graylog \\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-Mobile-Connect\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IBM Mobile Connect\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IBM Mobile Connect\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"wavlink-WN579X3\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var model=\\\\\\\"WN579X3\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Netis-router\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"script/netcore.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"./script/logic.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"netis\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JUNIPer-ScreenOS\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Virata-EmWeb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"admin_pw\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETCORE-NAC\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"script/netcore.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"./script/logic.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"netis\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Motorola-RFS7000\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RFS7000 Wireless\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"RFS7000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HG100R-L4\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nav.RG_STR_INCORRECT_ID_PASSWORD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Copyright &copy; 2014 HUMAX Co., Ltd. All rights reserved\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Quick Setup\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JUNIPer-HDR\",\n  \"logic\": \"(a&&b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/stylesheet/juniper.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/hdr_logo.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"vpn\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"H3C-WAC360\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C WAC360\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-WBR-204g\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HUAWEI-3COM WBR-204g\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HUAWEI-3COM WBR-204g\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zio-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZIO Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-TL-WR850N\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"if (url.indexOf(\\\\\\\"tplinklogin.net\\\\\\\")\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TL-WR850N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"var modelname=\\\\\\\"TL-WR850N\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-IPC6625\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"huawei IPC6625\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"huawei IPC6625\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-Archer-C50\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"if (url.indexOf(\\\\\\\"tplinklogin.net\\\\\\\")\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Archer C50\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-EQ-660R\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EQ-660R\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"B_LINK-Home-Gateway\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"B-LINK Home Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"B-LINK Home Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-TL-WR802N\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"if (url.indexOf(\\\\\\\"tplinklogin.net\\\\\\\")\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TL-WR802N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"TL-WR802N\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-TL-WA801ND\",\n  \"logic\": \"a||b||c||d||e|| (f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TP-LINK Wireless WA801ND\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TP-LINK Wireless WA801ND\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"TP-LINK Wireless N Access Point WA801ND\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"TP-LINK Wireless N Access Point WA801ND\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Model No. TL-WA801ND </td></tr>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"if (url.indexOf(\\\\\\\"tplinklogin.net\\\\\\\")\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"TL-WA801ND\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cInvoice\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://www.forperfect.com/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"corega-BARPRO6\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CG-BARPRO6\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CG-BARPRO6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FIBARO - Smart Home\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Fibaro Home Center\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-N66U\",\n  \"logic\": \"a||b||c||d||e||f||g||h||i\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RT-N66U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"RT-N66U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Asus RT-N66U \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-N66U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Capture(status_router.sys_model)</script></div> Asus RT-N66U&nbsp;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Capture(status_router.sys_model)</script></div>Asus RT-N66U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"class=\\\\\\\"prod_madelName\\\\\\\" style=\\\\\\\"margin-left:78px;\\\\\\\">RT-N66U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"RT-N66U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Asus RT-N66U\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CAStor\",\n  \"logic\": \"(a||b) || (c||d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Castor-System\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Castor\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Castor-System\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Castor\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Carrier-CCNWeb\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/images/CCNWeb.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<APPLET code=\\\\\\\"JLogin.class\\\\\\\" archive=\\\\\\\"JLogin.jar\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-IP-Phone\",\n  \"logic\": \"(a||b||c) &&d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco Unified Wireless IP Phone\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<font color='#FFFFFF' size='4'>Cisco IP Phone\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Cisco IP Phone\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Belkin-N150\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"setup_top.htm\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"status.stm\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DSL-2740U\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DSL-2740U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DSL-2740U\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOTO_LINK-N300RA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src =\\\\\\\"/images/login_back_zn300ra.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOTO_LINK-N300RB\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TOTOLINK N300RB\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOTO_LINK-C100RT\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src =\\\\\\\"/images/login_back_c100rt.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-N66R\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"RT-N66R\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"RT-N66R\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-N66R\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"class=\\\\\\\"prod_madelName\\\\\\\" style=\\\\\\\"margin-left:78px;\\\\\\\">RT-N66R\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CGIProxy\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"http://www.jmarshall.com/tools/cgiproxy/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Clearwell-E-Discovery\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Clearwell E-Discovery Platform log in\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Clearwell\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Clearwell\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CL-HTTP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: CL-HTTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: CL-HTTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Collabtive\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login @ Collabtive\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Moxa-ioLogik-Web-Server\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: ioLogik Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ioLogik Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"CodeIgniter-PHP-Framework\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ci_session=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ci_session=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ClipShare\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<!--!!!!!!!!!!!!!!!!!!!!!!!!! Processing SCRIPT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered By <a href=\\\\\\\"http://www.clip-share.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ClipBucket\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"ClipBucket\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<!-- ClipBucket\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<!-- Forged by ClipBucket\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"href=\\\\\\\"http://clip-bucket.com/\\\\\\\">ClipBucket\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ClientExec-corporate products\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered By ClientExec\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"clientexec=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"clientexec=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cogent-DataHub\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<img src=\\\\\\\"images/Cogent.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cogent DataHub WebView\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOTO_LINK-N300RE\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TOTOLINK N300RE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"N300RE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"N300RE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-N12HP_B1\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RT-N12HP_B1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"RT-N12HP_B1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-N12HP_B1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"class=\\\\\\\"prod_madelName\\\\\\\" style=\\\\\\\"margin-left:78px;\\\\\\\">RT-N12HP_B1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-JR6100\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"JR6100\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR JR6100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOTO_LINK-N305RB\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src =\\\\\\\"/images2/login_back_zn305rb.cx.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOTO_LINK-A6004NS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TOTOLINK A6004NS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"YAMAHA-RTX1500\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RTX1500\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOTO_LINK-N150RA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src =\\\\\\\"/images/login_back_zn150ra.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-AC55UHP\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RT-AC55UHP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-AC55UHP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"RT-AC55UHP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"ASUS-RT-AC66R\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RT-AC66R\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"RT-AC66R\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-AC66R\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"class=\\\\\\\"prod_madelName\\\\\\\" style=\\\\\\\"margin-left:78px;\\\\\\\">RT-AC66R</div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-AC87R\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RT-AC87R\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"RT-AC87R\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-AC87R\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"class=\\\\\\\"prod_madelName\\\\\\\" style=\\\\\\\"margin-left:78px;\\\\\\\">RT-AC87R\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"var product_name='RT-AC87R'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-AC5300\",\n  \"logic\": \"a||b||c|| (d&&e) ||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RT-AC5300\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"RT-AC5300\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-AC5300\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Asus RT-AC5300\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"RT-AC5300\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Asus RT-AC5300\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOTO_LINK-N150RB\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TOTOLINK N150RB\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOTO_LINK-N500RD\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src =\\\\\\\"/images/login_back_n500rd.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOTO_LINK-N300RT\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TOTOLINK N300RT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TOTOLINK N300RT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"N300RT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"N300RT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"src =\\\\\\\"/images/login_back_zn300rt.gif\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOTO_LINK-A3004NS-Dual\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src =\\\\\\\"/images2/login_back_za3nd.ch.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOTO_LINK-WIRELESS-ROUTER\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TOTOLINK\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TOTOLINK Corp. | WIRELESS ROUTER\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-AC51U\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RT-AC51U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"RT-AC51U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-AC51U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"RT-AC51U\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-AC52U\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RT-AC52U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"RT-AC52U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-AC52U\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Citrix-Web-PN-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Citrix Web PN Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Citrix Web PN Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Citrix-Access-Gateway\",\n  \"logic\": \"a||b||c||d|| (e&&f) || (g&& (h||i|| (j&&k) ||l)) || (m&&n)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Citrix Access Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/vpn/images/AccessGateway.ico\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ezisneercsresu=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Cyms-SecS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"pwcount\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"/vpn/images/AccessGateway.ico\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Citrix Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"href=\\\\\\\"/vpn/images/AccessGateway.ico\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"class=\\\\\\\"citrixReceiverLogoAboutBox\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"/vpn/js/gateway_login_view.js?\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"cloud.ottoworkfroce.eu/vpn/index.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"vpn/js/lsgateway_login_view.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"class=\\\\\\\"_ctxstxt_NetscalerGateway\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"receiver/images/common/icon_vpn.ico\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOTO_LINK-N500R\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src =\\\\\\\"/images/login_back_n500r.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOTO_LINK-N300RG\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src =\\\\\\\"/images/login_back_zn300rg.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOTO_LINK-N600RD\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src =\\\\\\\"/images/login_back_zn600rd.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOTO_LINK-N200RS+\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src =\\\\\\\"/images/login_back_n200rs.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-Femtocell\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/cust/ZoneGate-Image.jpg\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUMAX-QUANTUM-T3A\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"pro-model\\\\\\\" align=\\\\\\\"left\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUMAX-QUANTUM-T3AV2\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"product_model\\\\\\\"><script>dw(Mdl_name)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"dw(\\\\\\\"T3ATv2\\\\\\\") : dw(\\\\\\\"T3Av2\\\\\\\")\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SAMSUNG-AP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span>SAMSUNG AP MANAGER</span>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Samsung AP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUMAX-Router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<strong>We're sorry but rego_v2 doesn't work properly\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HUMAX\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EMERSON-XWEB-EVO\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"img/xweb-logo.png\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/css/images/Logo_XWEB_alpha.png\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PCT8132\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">PCT8132\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-AC3200\",\n  \"logic\": \"a||b||c||d||e||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RT-AC3200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"RT-AC3200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-AC3200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"class=\\\\\\\"prod_madelName\\\\\\\" style=\\\\\\\"margin-left:78px;\\\\\\\">RT-AC3200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Capture(status_router.sys_model)</script></div>Asus RT-AC3200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"var product_name='RT-AC3200'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Asus RT-AC3200\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-N1548P\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">N1548P\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Dell Networking N1548P\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-N1524P\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">N1524P\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-N4032\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">N4032\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Dell Networking N4032\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PCT7048P\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">PCT7048P\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-N4032F\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">N4032F\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Dell Networking N4032F\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-N1148T-ON\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">N1148T-ON\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Dell EMC Networking N1148T-ON\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-R7500v2\",\n  \"logic\": \"a||b|| (c&&d) ||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR R7500v2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"R7500v2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Netgear R7500v2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Netgear R7500v2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"NETGEAR-R7500v2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-N4064\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">N4064\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Dell Networking N4064\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BitKeeper- Products\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: bkhttp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: bkhttp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"boastMachine\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"powered by boastMachine\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://boastology.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-N3048\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">N3048\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Dell Networking N3048\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BlackJumboDog\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: BlackJumboDog\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: BlackJumboDog\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Blazix\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Blazix Java Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Blazix Java Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Blogger\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content='blogger\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by Blogger\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-N4064F\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">N4064F\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Dell Networking N4064F\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-N2024\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">N2024\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Dell Networking N2024\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-N1524\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">N1524\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Dell Networking N1524\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Dell EMC Networking N1524\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PCM6348\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">PCM6348\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BlueCoat-ProxySG\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"proxysg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Bluecoat Internet Proxy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Bluecoat Internet Proxy\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-N1108P-ON\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">N1108P-ON\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SIERRA-GX400\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"GX400\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"GX400 login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SIERRA-GX440\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"GX440\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"GX440 login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SIERRA-GX450\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"GX450\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"GX450 login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-N2024P\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">N2024P\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PCT7048R\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">PCT7048R\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PCT8132F\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">PCT8132F\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-N1124T-ON\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">N1124T-ON\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-N3024P\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">N3024P\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-AC1200\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RT-AC1200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"RT-AC1200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-AC1200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"class=\\\\\\\"prod_madelName\\\\\\\" style=\\\\\\\"margin-left:78px;\\\\\\\">RT-AC1200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"RT-AC1200\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXV10-W300D\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"ZXV10 W300D\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"ZXV10 W300D\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie-CPE\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"RUIJIE-CPE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"RUIJIE-CPE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Realtek-NIC\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"realtek.com.tw\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"realtek.com.tw\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BMC-Remedy\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Remedy Mid Tier\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PCT7024F\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">PCT7024F\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-ERHMG2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C ERHMG2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-N1124P-ON\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">N1124P-ON\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PCT7024P\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">PCT7024P\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-N3048ET-ON\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">N3048ET-ON\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-N3024ET-ON\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">N3024ET-ON\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-S12508\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C S12508F\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"H3C S12508\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RockMongo\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RockMongo\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OpenDaylight-product\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OpenDaylight\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"j_security_check\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"XUNRUICMS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"alt=\\\\\\\"xunruicms\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-VSR1000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C VSR1000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-WA1208E-GP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C WA1208E-GP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EdiMax-router\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\" Default  Name:admin  Password:1234\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Default: admin/1234\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Edimax Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Abus-TV7230\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TV7230\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TV7230\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"TV7230\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-CPE\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"cpe@zte.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Westell-Secure\",\n  \"logic\": \"(a&&b) || (c&&d) ||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: WSTL CPE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: WSTL CPE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \" realm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"Westell Secure\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"realm=\\\\\\\"Westell Secure\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FOHO-DVR\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: FUHO-DVR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: FUHO-DVR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"DVR manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"DVR manager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mediatek-modem products\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Modem (Administrator\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"ADSL Modem\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"Modem (Administrator\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"ADSL Modem\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-EMG2306-R10A\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"modelname\\\\\\\">EMG2306-R10A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-EMG3425-Q10A\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"modelname\\\\\\\">EMG3425-Q10A<\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"EMG3425-Q10A\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ZyXEL EMG3425-Q10A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-EMG2926\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<li class=\\\\\\\"modelname\\\\\\\">EMG2926</li>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZyXEL EMG2926\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-NBG6616\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<li class=\\\\\\\"modelname\\\\\\\">NBG6616</li>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NBG6616\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ZyXEL NBG6616\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-NBG4615-v2\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<li class=\\\\\\\"modelname\\\\\\\">NBG4615 v2</li>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NBG4615 v2 login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ZyXEL NBG4615 v2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Lilin- Video Monitoring\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Merit LILIN Ent. Co., Ltd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Merit LILIN Ent. Co., Ltd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SQ-WEBCAM\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: SQ-WEBCAM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: SQ-WEBCAM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sophos-cyberoam products\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/webpages/login.jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"http://www.cyberoam.com\\\\\\\" target=\\\\\\\"_blank\\\\\\\">www.cyberoam.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DIGI-TransPort-WR44v2\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"heading\\\\\\\">TransPort WR44v2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Digi TransPort WR44v2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DIGI-TransPort-WR31\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"heading\\\\\\\">TransPort WR31\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DIGI-TransPort-WR21\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"heading\\\\\\\">TransPort WR21\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Digi TransPort WR21\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DIGI-TransPort-WR41v2\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"heading\\\\\\\">TransPort WR41v2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"PAGE_BODY_HEADER\\\\\\\">TransPort WR41v2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Panasonic-Network-Camera\",\n  \"logic\": \"(a&&b) ||c|| ((d||e||f||g|| (h&&i) ||j||k) &&l&&m)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"U S Software Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ver2.4 rev0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"name=bar src=\\\\\\\"CgiTagMenu?page=Top&language=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"WJ-NT104 MAIN PAGE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"src=\\\\\\\"CgiTagMenu?page=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"var svideoinput=\\\\\\\"pal\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"content=\\\\\\\"(C) Panasonic Syetem Networks Co.,Ltd.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"/js/cmsgtab.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"src=\\\\\\\"BarFoot.html\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"MultiCameraFrame?mode=Motion&Language\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"<h2>Blog Comments</h2>\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"GeoHttpServer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: GeoHttpServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: GeoHttpServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tradekorea-video surveillance\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<iframe id='login' name='login' src='/cgi-bin/login' frameborder\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<body bgcolor=\\\\\\\"#E6E6E6\\\\\\\" \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-A2004NS-R\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.a2004sr.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME A2004NS-R\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-Q604\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.q604.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME Q604\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-HMS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HMS Download Service\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: HMS Download Service\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Samsung-NVR\",\n  \"logic\": \"(a|| (b&&c) ||d) &&e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SAMSUNG TECHWIN NVR Web Viewer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"$.nvr = {}; $.nvr.plugin_version = \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"$.nvr.plugin_version_check = \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Wisenet NVR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"EagleEye-Networks\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Eagle Eye Networks\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"css/eagle.base_efafdad3.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-Ee-Lb-Hostname: \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"title=\\\\\\\"Eagle Eye Networks\\\\\\\">Eagle Eye Networks</a></h1>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"X-Ee-Lb-Hostname: \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Abelcam-Video Monitoring\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: AbelCam\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: AbelCam\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"AbelCam \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"href=\\\\\\\"https://www.abelcam.com/en/\\\\\\\" title=\\\\\\\"AbelCam.com webcam software\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dvripc\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"title=\\\\\\\"Download Android\\\\\\\" href=\\\\\\\"http://www.dvripc.net/Common/Download/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<p><a href=\\\\\\\"NVOCX_setup.exe\\\\\\\">Click here to download and install the ActiveX packet mannually.</a></p>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N704BCM\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n704bcm.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME N704BCM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N604R\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n604r.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME N604R\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-V504\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.v504.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME V504\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Baidu-\\u5728\\u7ebfweb\\u7f16\\u8f91\\u5668\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ueditor.all.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"UE.getEditor\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TeamViewer\",\n  \"logic\": \"(a&&b) ||c|| (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"This site is running\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TeamViewer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"teamviewer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<a href='http://www.TeamViewer.com'>TeamViewer</a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"This site is running\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dell-OpenManage-Switch-Administrator\",\n  \"logic\": \"(a|| (b&&c)) &&d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Dell OpenManage Switch Administrator\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"window.top.location.href = \\\\\\\"dell_login.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"progressGraphicNone\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-T3004\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.t3004.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME T3004\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-A604\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.a604.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME A604\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-A1004V\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.a1004.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME A1004\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N6004R\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n6004r.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N2E\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n2e.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME N2E\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-A2004R\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.a2004r.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME A2004R\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-A1004NS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.a1004ns.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME A1004NS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"xheditor\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"xheditor_lang/zh-cn.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"xheditor\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \".xheditor(\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"fckeditor\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"new FCKeditor\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Youpeng - TITV\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: voole_cdn1.0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: voole_cdn1.0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"eWebEditor\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/ewebeditor.htm?\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N604V\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n604v.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n604vlg.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ipTIME N604V\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-A604V\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.a604v.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME A604V\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N8004R\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n8004r.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N2+\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n2p.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n2.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ipTIME N2+\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N104R3\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images/login_title_n104r3.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N702BCM\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n702bcm.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME N702BCM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Axis-PrintServer\",\n  \"logic\": \"((a||b) &&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"psb_printjobs.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/cgi-bin/prodhelp?prod=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"AXIS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Network Print Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"SLACKWARE-operating system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Slackware\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Axis-Network-Camera\",\n  \"logic\": \"(a||b||c||d) &&e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AXIS Video Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/incl/trash.shtml\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"/incl/axis_connection.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/axis-media/media.amp?\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Zotonic\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"powered by: Zotonic\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/lib/js/apps/zotonic-1.0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zavio- camera\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"dynacolor\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"osdCmdTb\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-V308\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.v308.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-A2008\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.a2008.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME A2008\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-A604M\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.a604m.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME A604M\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Aurion-Company Products\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<!-- Aurion Teal will be used as the login-time default\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/aurion.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N104plus-i\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n104pi.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME N104plus-i\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N604+\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n604p.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME N604+\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N1E\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n1e.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME N1E\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N104+\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n104p.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME N104+\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-A104M\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n104m.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N608\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n608.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N904V\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n904v.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-T16000\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.t16000.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME T16000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-A5004NS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.a5004ns.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME A5004NS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-A6004NS-M\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.a6004nm.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME A6004NS-M\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N2plus-i\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n2pi.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME N2plus-i\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-T24000\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.t24000.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME T24000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-A3004\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.a3004.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\\\\\\"/images2/login_title.a3004d.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ipTIME A3004\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N904NS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n904ns.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ipTIME G504\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images/login_back_g504.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\\\\\\"/images2/login_title.g504.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-G104\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.g104.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME G104\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AV-Arcade\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://www.avscripts.net/avarcade/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Avantfax-Company products\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"images/avantfax-big.png\\\\\\\" border=\\\\\\\"0\\\\\\\" alt=\\\\\\\"AvantFAX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"- AvantFAX - Login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Avaya-Secure-Router\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<b>About Avaya Secure Router</b>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<span id=\\\\\\\"guiname\\\\\\\">Avaya Secure Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Avaya Http Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Avaya Http Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Avaya Secure Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Axel-Device\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Axel Admin Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Axel Admin Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AVTech-Video-Web-Server\",\n  \"logic\": \"((a||b||c) &&d&&e&&f) || (g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"--- VIDEO WEB SERVER ---\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/AV732E/setup.exe\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: AV-TECH\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<h2>Blog Comments</h2>\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Server: AV-TECH\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N104V\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n104v.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n104vlg.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ipTIME N104V\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Axigen-Mail-Server\",\n  \"logic\": \"a||b||c||d||e||f||g||h||i|| (j&&k&& (l||m)) ||n||o||p\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AXIGEN Webmail - \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Axigen-Webmail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Axigen-Webmail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"AXIGEN Mail-Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"AXIGEN IMAP4rev1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"ESMTP AXIGEN Mail-Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Axigen ESMTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"AXIGEN IMAP4rev1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"AXIGEN POP3 server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Axigen\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"service \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"IMAP4rev1 \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"IMAP4 \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"POP3 server on axigen\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"Axigen Mailserver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"AXIGEN Mail-Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N804T3\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n804t3.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"b2evolution\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/powered-by-b2evolution-150t.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by b2evolution\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"b2evolution\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"axTLS-Embad-Httpd\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: axhttpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: axhttpd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BASE-Security\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<!-- Basic Analysis and Security Engine (BASE) -->\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"mailto:base@secureideas.net\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ipTIME-A6004NS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.a6004ns.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME A6004NS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \" ipTIME-X6003\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.x6003.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BackupPC\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BackupPC_Admin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"BackupPC_Admin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/backuppc/image/logo.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/index.cgi?action=editConfig\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Barracuda-Backup-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BACKUP_LOCAL_LOCALE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"BACKUP_LOCAL_LOCALE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Barracuda-SSL-VPN\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Barracuda SSL VPN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Barracuda SSL VPN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EnGenius-Mesh-AP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EnGenius Mesh AP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ipTIME-A8004NS-M\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.a8004nm.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME A8004NS-M\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Biscom-Delivery-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/bds/stylesheets/fds.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/bds/includes/fdsJavascript.do\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BenSSL\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ben-SSL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Ben-SSL\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Barracuda-Spam-Firewall\",\n  \"logic\": \"(a&&b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/barracuda.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"vpn\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Balancer\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"http://www.barracudanetworks.com?a=bsf_product\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N604A\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n604a.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME N604A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N5\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n5.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME N5\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N104K\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n104k.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME N104K\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N604Rplus-i\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n604ri.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME N604Rplus-i\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"marathon\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Marathon-Leader\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Marathon-Leader\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Marathon\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<div id=\\\\\\\"marathon\\\\\\\"></div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"href=\\\\\\\"img/marathon-favicon.ico\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-G104A\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.g104a.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\\\\\\"/images/login_back_g104a.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ipTIME-V1024\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.v1024.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APRouter-router\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AP Router New Generation\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"APRouter login:\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ApPHP-Calendar\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"This script was generated by ApPHP Calendar\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BigDump\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BigDump\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"BigDump: Staggered MySQL Dump Importer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ArGoSoft-Mail-Server\",\n  \"logic\": \"a||b|| (c&&d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: ArGoSoft Mail Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ArGoSoft Mail Server Plus for\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: ArGoSoft Mail Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"boa\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"ArGoSoft Mail Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ipTIME-V508\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.v508.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME V508\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CANCOSOFT-Asset Management System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4f73\\u514b\\u5b9e\\u7269\\u8d44\\u4ea7\\u5168\\u751f\\u547d\\u5468\\u671f\\u7684\\u6570\\u636e\\u5206\\u6790\\u7ba1\\u7406\\u8f6f\\u4ef6\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var path = \\\\\\\"/cassets\\\\\\\";\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHP voting system\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"QQ 7000719\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"http://www.888072.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"http://www.vote123.cn\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Siemens-SIMATIC-HMI\",\n  \"logic\": \"((a||b||c||d) &&e) ||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/Images/Siemens_Firmenmarke.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Simatic HMI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Hint:<br> When the devicename contains an underscore ( _ ) some browsers have a bug that makes it impossible to log in.<br> One possible solution may be to use the IP address of the device instead of the name, or to use another browser.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<META HTTP-equiv=\\\\\\\"refresh\\\\\\\" content=\\\\\\\"0;url=/www/start.html\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"SIMATIC HMI \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-V1016\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.v1016.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ArticlePublisherPRO\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"www.ArticlePublisherPRO.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"Article Publisher PRO\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ipTIME-NX505\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.nx505.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-V116\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images/login_back_tv116.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\\\\\\"/images2/login_title.tv116.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ipTIME V116\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Endong - Video Conference\",\n  \"logic\": \"a||b|| (c&&d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4f1a\\u8baf\\u901a\\u7535\\u8bdd\\u4f1a\\u8bae\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Set-Cookie: EasyMeetingSession=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Easymeeting Web \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Set-Cookie: EasyMeetingSession=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-DPC3848 Series DOCSIS Gateway\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cisco\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Docsis_system.php\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"check.php\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Allied_telesis-centrecom-AR Series Router\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CentreCOM&reg; AR260S V2</SPAN>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CentreCOM&reg; ARX640S</SPAN>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Express -Oexam\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"oExam\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"}else if(type===\\\\\\\"examCard\\\\\\\"){\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ENC-300\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ENC-300\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GitBucket\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/assets/common/images/gitbucket.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"GitBucket\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"GitBucket\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Western_Digital-MyBook\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/img/headernav_separator.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"socomec-WebServer\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"diag.htm?src=index\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"jqu_cke.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"utility.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"3KITS-CMS\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"3KITS</a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"http://www.3kits.com\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MX920-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MX920 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APACHE-Oozie-Web-Console\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"oozie-console\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/oozie\\\\\\\">Oozie Console\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-iP7200-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon iP7200 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MG5300-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MG5300 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"If the management system\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/ry-ui.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/ry-ui.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u82e5\\u4f9d\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MG6300-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MG6300 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MX430-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MX430 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MG6100-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MG6100 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MG5200-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MG5200 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MG3100-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MG3100 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MX420-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MX420 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MX720-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MX720 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MX520-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MX520 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MX890-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MX890 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-PRO-100-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon PRO-100 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MP620-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MP620 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MX350-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MX350 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-iX7000-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon iX7000 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MX470-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MX470 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MG6400-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MG6400 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MG5500-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MG5500 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-iX6800-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon iX6800 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-PRO-1-v1-1-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon PRO-1 v1-1 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MP970-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MP970 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MX700-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap width=\\\\\\\"#\\\\\\\"> Canon MX700 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-iP5200R\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap width=\\\\\\\"#\\\\\\\"> Canon iP5200R</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HiveServer\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HiveServer - Hive Control\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Awesome-Miner\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Awesome Miner\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D-Link-DSL-2890AL\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Product Page : DSL-2890AL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a href=\\\\\\\"http://support.dlink.com\\\\\\\" target=\\\\\\\"_blank\\\\\\\">DSL-2890AL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"DSL-2890AL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"DSL-2890AL\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BROADLIGHT-Residential-Gateway\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<b>BRG Management</b>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Apache-Wicket\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"xmlns:wicket=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/org.apache.wicket.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LINK_ONE-Roteador-Wireless-Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Roteador Wireless N 300 Mbps\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Intelbras-Roteador-Wireless-N-WIN300\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Roteador Wireless N WIN 300\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Samsung-router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Web Management\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Samsung Electronics\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MULTILASER-Roteador-Wireless-Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Roteador Wireless N\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Intelbras-Roteador-Wireless-N-WRN240-Slim\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Roteador Wireless N WRN240 Slim\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-P-660HNU-F1\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"P-660HNU-F1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-P-2812HNU-F1\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Welcome to P-2812HNU-F1 configuration interface\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-P-2812HNU-F3\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"P-2812HNU-F3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-P-661HNU-F1\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"P-661HNU-F1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-P-2601HN-F1\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"P-2601HN-F1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZyXEL P-2601HN-F1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-P-2612HNU-F1F\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"P-2612HNU-F1F\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-P-661HNU-F3\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"P-661HNU-F3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-P-2601HN-F3\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"P-2601HN-F3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-P-2812HNUL-F1\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"P-2812HNUL-F1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-LTE6100\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"LTE6100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-FMG3025-D10A\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FMG3025-D10A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-LTE6101\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"LTE6101\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-P-2612HNU-F3\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"P-2612HNU-F3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sagemcom-EMTA62-3\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EMTA62-3 Wireless Voice Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hillstone-SG-6000\",\n  \"logic\": \"(a&&b) || (c&&d) || (e&&f) || (g&& (h||i)) || (j&&k)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cn=SG-6000, o=Hillstone Networks\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"www.ncurity.com\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/loginok.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"hillstone\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"CommonName: SG-6000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Organization: Hillstone Networks\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"style=\\\\\\\"background:url(images/Login_box_bg_cn.gif);\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Content-Length: 5726\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"\\u6d69\\u9cb8\\u79d1\\u6280SSLVPN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"CommonName: SG-6000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"Organization: Hillstone Networks\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sniper\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Sniper Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"(\\\\\\\"codebase=/activex/SniperLogin.cab#version=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"WINS Technet Co.,Ltd. \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KT-EMU3000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EMU3000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NAGIOS-UPS monitoring\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"UPS Monitor\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DCN-DCN\\u8def\\u7531\\u5668\",\n  \"logic\": \"((a||b||c||d|| (e&&f)) &&g) ||h\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"DCN-UTM-Web-Management\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/script/dcn_common.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"/function/classes/class.CheckCode.php\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/dcn_ui.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Web Management\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"'www.dcnetworks.com.cn'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"o=DigitalChina Networks\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Anygate companies\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AnyGate\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/anygate.php\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"AnyGate\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"AnyGate\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PowerPoint-Presentation\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerPoint Presentation\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Microsoft PowerPoint \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SangFor- Internet optimization management\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SANGFOR\\u4e0a\\u7f51\\u4f18\\u5316\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SATO-Network-Printing\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SATO Network Printing\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Welcome to SATO Network Printing</legend>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"SATO Network Printing \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-EMG5924-D10A\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EMG5924-D10A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-FMG3542-D10A\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FMG3542-D10A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-P-2612HNU-F1\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"P-2612HNU-F1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-FMG3024-D10A\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FMG3024-D10A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Observium\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"images/observium-icon.png\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZARAFA-Collaboration Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Zarafa WebAccess\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"epygi-QX200\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Epygi        <span class=\\\\\\\"product-name\\\\\\\">QX200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Epygi QX200\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Apache-Archiva\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Apache Archiva\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/archiva.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/archiva.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"epygi-QX50\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Epygi        <span class=\\\\\\\"product-name\\\\\\\">QX50\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Epygi QX50\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APC-UPS-Management-Card\",\n  \"logic\": \"a||b||c||d||e||f||g||h||i\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"APC Management Card\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"apclogo\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"APC Web/SNMP Management Card\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Network Management Card\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"AP9617 Network\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"AP8853 Network\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Network Management Card AOS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Network Management Card for UPS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"UPS Management Web Login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Apache-Cocoon\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"x-cocoon-version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"x-cocoon-version\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"epygi-QX2000\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Epygi        <span class=\\\\\\\"product-name\\\\\\\">QX2000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Epygi QX2000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"epygi-QXFXS24\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Epygi            <span class=\\\\\\\"product-name\\\\\\\">QXFXS24</span>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"zk-webserver\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/csl/login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/csl/check\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ZK Web Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D-Link-DCS-950G\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"if (document.domain.toLowerCase() == \\\\\\\"DCS-950G\\\\\\\".toLowerCase())\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DCS-950G\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D-Link-DAP-1350\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"D-LINK SYSTEMS, INC. | WIRELESS CLIENT : Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Content-Length: 8441\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"lang_obj.write('product_page')\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D-Link-DIR-855L\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"javascript:check_is_modified('http://support.dlink.com/')\\\\\\\">DIR-855L\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a href=\\\\\\\"http://support.dlink.com.tw/\\\\\\\">DIR-855L\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D-Link-DAP-1160\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"http://www.dlink.com.tw\\\\\\\" target=_blank>DAP-1160\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a href=\\\\\\\"http://support.dlink.com.tw/\\\\\\\">DAP-1160\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D-Link-DAP-2020\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"http://www.dlink.com.tw\\\\\\\" target=_blank>DAP-2020\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Shenhaijie Technology - MixCall agent management center\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Mixcall\\u5ea7\\u5e2d\\u7ba1\\u7406\\u4e2d\\u5fc3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u6df1\\u5733\\u5e02\\u6df1\\u6d77\\u6377\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/admin/modules/admin/statics/images/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-NBG4104\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZyXEL NBG4104\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-VSG1432\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZyXEL VSG1432\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZyXEL VSG1432\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bootstrap-CDN\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cdn.bootcss.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"cdn.bootcss.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DuomiCms\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DuomiCms\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Power by DuomiCms\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Warke.com is similar to the system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"http://www.hnjycy.com\\\\\\\" target=\\\\\\\"_blank\\\\\\\">\\u6c83\\u79d1\\u7f51<\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5f02\\u7f51\\u540c\\u663e\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Seven Niu Yun - Seven Cattle CDN\",\n  \"logic\": \"a||b||c||d||e||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"glb.clouddn.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"glb.clouddn.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"glb.qiniucdn.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"glb.qiniucdn.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"cdn.staticfile.org\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"cdn.staticfile.org\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"X-Qiniu-Zone\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alibaba - Ali Cloud CDN\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cdn.aliyuncs.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"cdn.aliyuncs.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-P874S7\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"P874S7_TR069_20180413\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-HG532e\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HG532e\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sina-SAE\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"lib.sinaapp.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"lib.sinaapp.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-DGN2200\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR DGN2200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NETGEAR Router DGN2200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NETGEAR DGN2200\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D-Link-WiFiManager\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"D-Link Central WiFiManager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Qi Bo Software - Microwate\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by qibosoft V1.0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"h3c-Cloud\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5206\\u5e03\\u5f0f\\u5b58\\u50a8\\u7ba1\\u7406\\u7cfb\\u7edf </p>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"vStor\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u534e\\u5fb7\\u5b89-\\u79fb\\u52a8\\u6267\\u6cd5\\u7ec8\\u7aef\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PMedia Platform\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"images/login/badgezh_cn.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Huadean. All Rights \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"jsdelivr\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cdn.jsdelivr.net\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"cdn.jsdelivr.net\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"cdn.jsdelivr.net\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Google-Hosted-Libraries\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ajax.googleapis.com/ajax/libs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ajax.googleapis.com/ajax/libs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ajax.googleapis.com/ajax/libs\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Qianxin - website guards commonly used front-end public library\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"libs.useso.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"libs.useso.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CDNJS-front-end public library CDN\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"libs.cdnjs.net\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"libs.cdnjs.net\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D-Link-DIR-655\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"http://support.dlink.com.tw/\\\\\\\">DIR-655\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"onclick=\\\\\\\"return jump_if();\\\\\\\">DIR-655\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"DIR-655\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SierraWireless-AirLinkManager\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ACEmanager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"brander/ACEmanager.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"redir=redir+\\\\\\\"/admin/AceManager\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"jfrog-Artifactory\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Artifactory\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Artifactory\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"redwoodhq\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"stylesheets/redwoodtheme/resources/js/azzurra.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WallacePOS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WallacePOS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"coreftp\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"coreftp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"devolo-dLAN-WIFI\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Webui\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"customization.css\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Google-GAE\",\n  \"logic\": \"a||b||c||d|| (e&&f&&g) || (h&&i&&j)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Google Frontend\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Google Frontend\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: GFE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: GFE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"HTTP/1.0 200 OK\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: Development/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Date\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"HTTP/1.0 200 OK\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Server: Development/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Date\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Sophos-Web-Appliance\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Sophos Web Appliance\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"resources/images/sophos_web.ico\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"url(resources/images/en/login_swa.jpg)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"jQuery-official website CDN\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"code.jquery.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"code.jquery.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"code.jquery.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ETUNG-router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cgi-bin/cgibox.cgi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"./img/logo.jpg\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Neusoft-NetEye firewall\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NetEye\\u9632\\u706b\\u5899\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"name=\\\\\\\"login_form\\\\\\\" action=\\\\\\\"/fwm4/fwm.cgi/usrlgin\\\\\\\" \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cloud -ICONN terminal user calculation\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OWVM_PRODUCT_NAME\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/res/api/owvmapi.js?\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Opzoon-security gateway\",\n  \"logic\": \"a|| ((b&&c) ||d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OPZOON - \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var opzoon_ver = document.getElementById(\\\\\\\"opzoon_version\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"copy_right = {CN : \\\\\\\"\\\\\\\", EN \",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Organization: www.opzoon.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AKCP-sensorProbe\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: AKCP Embedded Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: AKCP Embedded Web Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TELEFONE-IP-TIP200\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TELEFONE IP TIP200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TELEFONE IP TIP200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"TELEFONE IP TIP200/200 LITE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AnyGate-RG5500N\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"td class=\\\\\\\"right\\\\\\\">RG5500N\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Rise_Broadband-WRT500\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"floatKiller\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/style/g800_readynet_jab.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanyang-HYC-G800\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var dev_str=\\\\\\\"(HYC-G800)\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UTT-network device\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"utt-inline-block\\\\\\\" src=\\\\\\\"./images/login_btmlogo.png\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H2-Database\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"login.jsp?jsessionid=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Welcome to H2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Level Software-Airsoft Engineering Enterprise Management Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"pages/login_@del.jsp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ubiQuoss-P7124XG\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"P7124XG\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ubiQuoss-P8224XG\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"P8224XG\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ubiQuoss-P8124XG\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"P8124XG\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ManageEngine-ServiceDesk\",\n  \"logic\": \"a|| (b&&c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ManageEngine ServiceDesk\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \",'ManageEngine ServiceDesk Plus',\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"boa\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"MyWebSQL\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MyWebSQL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"target=\\\\\\\"_blank\\\\\\\" href=\\\\\\\"http://mywebsql.net\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"method=\\\\\\\"post\\\\\\\" action=\\\\\\\"\\\\\\\" name=\\\\\\\"dbform\\\\\\\" \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bee network interconnection - interconnected enterprise-class router\",\n  \"logic\": \"(a&&b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/index.htm?page=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"images/login-logo.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"www.ifw8.cn\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u6b22\\u8fce\\u767b\\u5f55-\\u8702\\u7f51\\u4e92\\u8054\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Phicomm-Fortress\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6590\\u8bafFortress\\u9632\\u706b\\u5899\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHICOMM-FWR router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6590\\u8baf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"document.getElementById('model').innerhtml='<div class=\\\\\\\"login_model\\\\\\\">Model:FWR-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CiuisCRM\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div class=\\\\\\\"ciuis-body-content\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Jakarta-Project\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Jakarta Project\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"alt=\\\\\\\"The Jakarta Project\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<a href=\\\\\\\"http://jakarta.apache.org/\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-Prestige-334\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Prestige 334\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZyXEL Prestige 334\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-Prestige-660RU-T1\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Prestige 660RU-T1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-Prestige-660RU-T3/T7\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Prestige 660RU-T3/T7\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"QNO-Router\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/QNOVirtual_Keyboard.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/images/login_img01_03.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"login_bt_over.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"QNO\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-HMC\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HMC1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"rel=\\\\\\\"icon\\\\\\\" href=\\\\\\\"/hmc.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u786c\\u4ef6\\u7ba1\\u7406\\u63a7\\u5236\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<frame src=\\\\\\\"/preloginmonitor/welcome.jsp\\\\\\\"/>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-ER8300G2-X\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ER8300G2-X\\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-ER2200G2\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ER2200G2\\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\\\\\\"=AAAAAAAA\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Elvaco-CMe3000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Elvaco CMe3000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-ER5100G2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ER5100G2\\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Skills - Application Safety Gateway\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"webui/images/basic/login/main_logo.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5e94\\u7528\\u5b89\\u5168\\u7f51\\u5173\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Grafana_Labs-\\u516c\\u53f8\\u4ea7\\u54c1\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Grafana\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"window.grafanabootdata = \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IndusGuard-WAF\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IndusGuard WAF\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"wafportal/wafportal.nocache.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-NER324\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NER324\\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"GENERATOR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Shenzhen Putong - Equipment Room Environmental Monitoring System\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u73af\\u5883\\u76d1\\u63a7\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" var ierrorcode = args.ErrorCode\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u8ba1\\u901a\\u673a\\u623f\\u73af\\u5883\\u76d1\\u63a7\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ManageEngine-OpManager\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ManageEngine OpManager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"The Complete Network Monitoring Software from ManageEngine\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<a href=\\\\\\\"http://www.manageengine.com/products/opmanager/index.html\\\\\\\" target=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"opmanager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-MDS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco MDS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Falcon_stor companies\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FalconStor Console\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"FalconStor\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Verizon-Wireless-Router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Wireless Broadband Router Management Console\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"verizon_logo_blk.gif\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Nexus-Router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"http://nexuswifi.com/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Nexus NX\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LE-router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e50\\u89c6\\u8def\\u7531\\u5668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"login-logo\\\\\\\"></div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"taoCMS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"template/taoCMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/taoCMS/code/calendar.js\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Group Ying -CC customer service\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<script src=\\\\\\\"http://kefu.qycn.com/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZSRV2 router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZSRV2\\u8def\\u7531\\u5668Web\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZTE Corporation. All Rights Reserved.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"XPAPER - Full Media Digital Newspaper\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"xpaper\\u667a\\u6167\\u5168\\u5a92\\u4f53\\u6570\\u5b57\\u62a5\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"template/paper/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Justsafe companies products\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5bc6\\u804a\\u540e\\u53f0\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5609\\u5174\\u5609\\u8d5b\\u4fe1\\u606f\\u6280\\u672f\\u6709\\u9650\\u516c\\u53f8. All Rights Reserved.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ceph\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"ceph-none-found\\\\\\\" rv-hide=\\\\\\\"rbd_pools\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXA10F460\",\n  \"logic\": \"a||b||c|| (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelNumber>F460</modelNumber>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"F460\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ZXA10F460\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"F460\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"telnet\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NVIDIA-Mellanox-MLNX-OS\",\n  \"logic\": \"a||b|| (c&&d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div style='display: none;' id=\\\\\\\"setStatusIconStateDiv\\\\\\\"></div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Mellanox\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/mlx-default.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"'/admin/launch?script=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"url=/admin/launch?script=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"INOERP-product\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"ino-body\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Natshell-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<h4>\\u6b22\\u8fce\\u767b\\u5f55NatShell</h4\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sea spider - soft route\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"action=\\\\\\\"login.pl\\\\\\\" method=\\\\\\\"POST\\\\\\\"  onsubmit=\\\\\\\"encryptPasswd()\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SoftNext-SPAM-SQR anti-spam system\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snspam/spam_request/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SPAM SQR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"snspam/start_page.asp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"spam_request/spam_requestAct.asp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Rain novel CMS\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"goodbook-tabcont\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<script src=\\\\\\\"/public/static/layer/layer.js\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"/template/home/default_web/css/style.css\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kyan\\u8bbe\\u8ba1\",\n  \"logic\": \"a||b||c|| (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"platform - Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<h1 id='bluesky_education_login' \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<meta name='author' content='http://www.kyanmedia.com'>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"platform - Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"content='http://www.kyanmedia.com'>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Utech-router\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"U-Tech Roteador Wi-fi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Copyright U-tech do Brasil\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Marco_PACS-Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"data-redirect=\\\\\\\"Account/SystemConfiguration.aspx\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"YAMAHA-RTX1000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RTX1000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"YAMAHA-RTX1100\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RTX1100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"YAMAHA-RTX1200\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RTX1200\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"YAMAHA-RTX810\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RTX810\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NGI-GXD5-Pacs\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div id=\\\\\\\"passwordWrapper\\\\\\\" class=\\\\\\\"fieldWrapper\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-ACE\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco ACE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco ACE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ACE XML Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"ACE XML Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"ACE 4710\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-VOS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco-VOS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Cisco-VOS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-CDS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco-CDS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Cisco-CDS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-AWARE\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Cisco AWARE \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"webvpn\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"boa\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Cisco AWARE \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"webvpn\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"boa\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Cisco-WSA\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco-WSA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco-WSA\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-UCC\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco Unified Contact Center\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"cisco\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-MWEB\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco-MWEB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco-MWEB\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cerio-DT300N\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CopyRight &copy; 2012 CERIO. All Rights Reserved\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DT-300N\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BUFFALO-Network-Device\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BUFFALO BS-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"BUFFALO BSL-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"BUFFALO WZR-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Flyfish star - safety equipment\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cgi-bin/login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"languagechange\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dell-EMC-Xtremio-full flash array\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"XtremIO - download\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<h1>XtremIO Management Application</h1>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PIXeon-PACS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span class=\\\\\\\"appTitle\\\\\\\" id=\\\\\\\"appPixViewer\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Go-Json-Rest\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"go-json-rest\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"go-json-rest\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-Expert-Talks\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco Expert Talks\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco Expert Talks\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"CISCO-CX20\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Cisco-SX80\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHONIX-PACS\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"/pacs/\\\\\\\"><img src=\\\\\\\"pacs/images/logo.svg\\\\\\\">\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Ph&ouml;nix PACS Merlin\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u6cdb\\u5fae-EOffice\",\n  \"logic\": \"((a||b|| (c&&d) ||e) &&f) ||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"general/login/index.php\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/general/login/view//images/updateLoad.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"szFeatures\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"eoffice\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: eOffice\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"general/login/index.php\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-IronPort\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco IronPort\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Basic realm=\\\\\\\"Cisco IronPort\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OSIRIX-Pixmeo\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span>RadOne PACS</span>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ANIMATI-PACS\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Animati PACS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<form action=\\\\\\\"\\\\\\\" onsubmit=\\\\\\\"PACS.login.sendPasswordRecoveryMail()\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Teleradiology-Telrads\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"https://clients.telrads.com/css/feedback.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AMI-IMM\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IMM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ami.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<frame src=\\\\\\\"page/blank.html\\\\\\\" id=\\\\\\\"FRAMETREE\\\\\\\" name=\\\\\\\"frameTree\\\\\\\" scrolling=\\\\\\\"auto\\\\\\\" noresize=\\\\\\\"false\\\\\\\"></frame>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"digitalchina-DSTMEDIA-Video Monitoring\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"dstmedia Authentication\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"dstmedia Authentication\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-ASA\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco ASA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Adaptive Security Appliance HTTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Cisco Adaptive Security Appliance\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-VDS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco-VDS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Cisco-VDS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RARITAN- Security Gateway\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Raritan CC-SG\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"images/CCSG logo.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"alt=\\\\\\\"CC-SG Logo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Raritan Computer; CommandCenter Secure Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hillstone-HSA\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"resources/login-all.css\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"loading\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ricoh-Aficio printer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RICOH Aficio \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"RICOH Aficio\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Jiangnan Xin'an-JNSEC-USG\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"JnSec Web UI\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tiandin letter -TopApp-LB-load balancing system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TopApp-LB \\u8d1f\\u8f7d\\u5747\\u8861\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TopApp-LB Load Balancer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"vmware-ESXi\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ng-app=\\\\\\\"esxUiApp\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<title ng-bind=\\\\\\\"$root.title\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-UCS-Director\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"font-family: \\\\\\\"ciscoSansThin\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco UCS Director\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-D7000\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR D7000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR D7000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-D7000v2\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR D7000v2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR D7000v2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-IMC-Supervisor\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"font-family: \\\\\\\"ciscoSansThin\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco IMC Supervisor\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SHECA-digital certificate\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content: \\\\\\\"\\u83b7\\u53d6\\u4e00\\u8bc1\\u901a\\u4fe1\\u606f\\u5f02\\u5e38\\u3002\\u8bf7\\u68c0\\u67e5\\u6570\\u5b57\\u8bc1\\u4e66\\u662f\\u5426\\u6b63\\u5e38\\u8fd0\\u884c\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<li class=\\\\\\\"in\\\\\\\" id=\\\\\\\"cert_li\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-R6120\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR R6120\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR R6120\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-R6230\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR R6230\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR R6230\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-R6400v2\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR R6400v2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Netgear R6400v2&nbsp;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR R6400v2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-R6700v2\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR R6700v2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR R6700v2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-R7000P\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR R7000P\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Netgear R7000P\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Netgear R7000P\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APEX-IT-Help-Desk\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"APEX IT Help Desk\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WisePower-OA\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"action=\\\\\\\"/WisePower/login.jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"WisePower Office Login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SUNCERE-air quality monitoring platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6280\\u672f\\u652f\\u6301\\uff1a\\u5e7f\\u4e1c\\u65ed\\u8bda\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"mediasuite-SMTP-Server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MediaSuite SMTP Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruizhe Technology -Waf\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: reyzar-waf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: reyzar-waf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D-Link-DAR-8000\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"D-Link\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DAR-8000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SIEMENS-SINAUT-MD741\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"SINAUT MD741\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"SINAUT MD741\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fedora\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Fedora\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ThinkMail\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ThinkMail \\u4f01\\u4e1a\\u90ae\\u7bb1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href='http://www.thinkcloud.cn' target='_blank'>Thinkcloud</a>.All Right Reserved</div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"app_download\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"Thinkmail\\u5b98\\u7f51\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/webmail\\\\\\\"+\\\\\\\"/common/validatecode.do\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/resource/se/common/jquery.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LinuxMint\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"mint\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: LinuxMint\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: LinuxMint\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RedHat-System\",\n  \"logic\": \"(a&&b&&c&&d) || (e&&f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Redhat\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-Generator: Drupal \",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"RouterOS\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Red Hat\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"X-Generator: Drupal \",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"ZyXEL-GS2210\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"GS2210\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"GS2210\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZKTECO-ZEM500\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZEM500 login:\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZKTECO-ZMM220\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"(ZMM220) for MIPS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GE-UPS\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GE UPS SNMP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<td>GEDE-SNMP-UPS-Interface\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"GEDE UPS SNMP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"SNMP/Web Interface\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Crown Jinshen - KILL Mail Security Gateway\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"KILL\\u90ae\\u4ef6\\u5b89\\u5168\\u7f51\\u5173\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"background=\\\\\\\"Skins/Default/Images/login_ksgm.jpg\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FaceSentry Access Control System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FaceSentry Access Control System\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-DSL-Router\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"ZyXEL DSL Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"ZyXEL DSL Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SangFor-Application Delivery Reporting System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"user_blur();\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"AD Report\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"agora.cgi\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/agora.cgi?product=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/store/agora.cgi\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oracle-Solaris\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Oracle Solaris\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IP_GUARD-Approval Management\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"onchange=\\\\\\\"Is_Empty('#TxtUserName','#lblEmptyName')\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Youku-routed treasure\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4f18\\u9177\\u571f\\u8c46\\u8def\\u7531\\u5b9d\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hillstone-Intelligent Safety Operation System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u667a\\u00b7\\u6e90\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/static/css/main.4672616b.chunk.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MINEITOR-Mining-farm-montor\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Mining farm montor\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ethereum_miner\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ethereum Network Status\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"avg network hashrate\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"XMR-Stak-Miner\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Digest realm=\\\\\\\"XMR-Stak-Miner\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Digest realm=\\\\\\\"XMR-Stak-Miner\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BAIKAL-Miner\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Scr|pta\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Baikal</b>Miner\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"miningcore-ui\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"miningcore-ui\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\\\\\\"http://www.creative-tim.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Wen Net Yilian - Wen Wang Guardian Safety Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6587\\u7f51\\u536b\\u58eb\\u5b89\\u5168\\u8def\\u7531\\u5668\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cirrus_gate- Data Governance and Security Management Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location.href = \\\\\\\"/DLP/admin/user/login.action\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Wen Net Yuri - Wen Wang Guardian Qigamai WAN Intelligent Router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6587\\u7f51\\u536b\\u58eb\\u5168\\u5343\\u5146\\u591aWAN\\u667a\\u80fd\\u8def\\u7531\\u5668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Schneider-Data-Center-Expert\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Data Center Expert\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bitnami-Redmine-Stack\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Bitnami Redmine Stack\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"alt=\\\\\\\"Bitnami Redmine Stack\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Epoch-GisServer\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Epoch GisServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SOMANSA-DLP+Center\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"/DLPCenter/\\\\\\\" class=\\\\\\\"btn DLPCenter\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SANSEC-SJJ1412 server cryptography\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \">\\u591a\\u7528\\u6237\\u5728\\u7ebf\\u7ba1\\u7406\\u53ef\\u80fd\\u5bfc\\u81f4\\u4e0d\\u53ef\\u9884\\u77e5\\u9519\\u8bef\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SJJ1412\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ADT-SJW74-VPN gateway\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"./system/usbkey.js\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SJW74\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FORSUN-\\u79d1\\u76fe\\u5b89\\u5168\\u7f51\\u5173\\u63a7\\u5236\\u53f0\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u79d1\\u76fe\\u7f51\\u5173\\u63a7\\u5236\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ADT-IAM Gateway Console\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/page/assets/javascripts/adt.js\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IAM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sophos-Safety Products\",\n  \"logic\": \"a&& (b||c||d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Via: HTTP/1.1 forward.http.proxy:3128\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Blocked site\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<span class='logoSophosFooterFont'>Protected by</span>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<td align='center'><img id='footerimage' name='footerimage' src='data:image/jpeg;base64\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PulseSecure-SSL-VPN\",\n  \"logic\": \"a|| (b&&c) || (d&& (e||f))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<b>Pulse Connect Secure</b>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Location: /dana-na/auth/url_default/welcome.cgi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"DSSignInURL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"src=\\\\\\\"/dana-na/auth/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"src=\\\\\\\"welcome.cgi?p=logo&signinId=url_default\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Pulse\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-EchoLife-HG850a\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"onkeydown='return onHandleKeyDown(event)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HG850a\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Avalon-Miner\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/cgi-bin/luci/avalon/page/index\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"USP-Secure-Entry-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Secure Entry Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Secure Entry Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"An Cai-Water Drop Cloud\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"sdiyun.com, All Rights Reserved\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"onRememberPasswordClick\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"yongyou - Online Mall\",\n  \"logic\": \"(a|| (b&&c)) &&d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7f51\\u4e0a\\u5546\\u57ce\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"url:\\\\\\\"/shopHome/ajaxGetCompeteMessageList.action\\\\\\\",\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"$.post(\\\\\\\"/shopFront/shoppingCar/gotoShoppingCartAjax.action\\\\\\\",function(data){\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u5317\\u4eac\\u7528\\u53cb\\u653f\\u52a1\\u8f6f\\u4ef6\\u80a1\\u4efd\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WackoPicko\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<h2>Welcome to WackoPicko</h2>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<h1 id=\\\\\\\"title\\\\\\\"><a href=\\\\\\\"/\\\\\\\">WackoPicko.com</a></h1>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Si Tu Technology - Genuine Software Big Data Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6b63\\u7248\\u8f6f\\u4ef6\\u5927\\u6570\\u636e\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DZS-6729-W1-xDSL-Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"6729-W1 xDSL Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DZS-6728-W1-xDSL-Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"6728-W1 xDSL Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"5WAN_8LAN_QoS_Security_Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"5WAN_8LAN_QoS_Security_Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"intelbras-ONT-142NG\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"ONT142NG\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ONT142NG\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Intelbras\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"ONT142NG\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHICOMM-PSG1218\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PSG-1218\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PSG1218\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"PSG-1218\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"PSG1218\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"PHICOMM_PSG1218\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"QNO-4WAN_8LAN_SSL_IPSec_VPN_Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"4WAN_8LAN_SSL_IPSec_VPN_Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"5WAN_5LAN_QoS_Security_Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"5WAN_5LAN_QoS_Security_Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"iKuai-product\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"fc tc Y_bg prompt-head-div\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"QNO-4WAN_4LAN_SSL_IPSec_VPN_Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"4WAN_4LAN_SSL_IPSec_VPN_Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijing Wisdom - Drainage Flow Level Detection Internet of Things System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"loginIn loginIn1\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Chen Rui Information - Video Security Access System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location=\\\\\\\"/vmonitor\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Learun-agile development framework system platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"\\u529b\\u8f6f\\u654f\\u6377\\u5f00\\u53d1\\u6846\\u67b6\\uff0c\\u662f\\u4e00\\u4e2aWeb\\u53ef\\u89c6\\u5316\\u5f00\\u53d1\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Stopping - I. Network Management Platform Background Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"hWebSystemTitle\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-TD854W\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TD854W\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TD854W\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"REALTEK-ADSL-Router\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Realtek ADSL Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Realtek ADSL Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ning Shield - Integrated Safety Certification Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"dynamicPasswordWithMobile\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FUJITSU-IPCOM300\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Fujitsu-IPCOM300\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Fujitsu-IPCOM300\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FUJITSU-IPCOM150\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Fujitsu-IPCOM150\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Fujitsu-IPCOM150\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ebrigade-ERP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class='btn btn-ebrigade btn-lg'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"advantech_WISE\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Remote Manage Your Intelligent Systems\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Schneider-EV-charging-station\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cgiServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Charging station\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Charging station interface\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UniFi-unified\",\n  \"logic\": \"a|| (b&&c) || (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"css/ubnt-icon\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/static/js/uv3.f52e5bd5bc905aef1f095e4e2c1299b3c2bae675.min.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NVR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"CommonName: UniFi-Video Controller\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Organizational Unit: R&D\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-B6000-StoreOnce\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"./theme/default/css/HP_fusion_management.css\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SangFor - Situation Performance Analysis Platform\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.sessionStorage.removeItem('serialCheckObj')\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/apps/secvisual/static/js/runtime.js?\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"url: '../auth_manage/Auth_manage/on_login'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Soft3304-04WebServer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"server: 04WebServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: 04WebServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WSNCM-dynamic warehouse system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login\\\\\\\">WSNCM\\u52a8\\u6001\\u4ed3\\u5355\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-MSR2600\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MSR2600\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Adaptec-maxView\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"maxView Storage Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"action=\\\\\\\"/maxview/manager/login.xhtml\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Boss Post Office - Bossmail\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span class=\\\\\\\"footer_t\\\\\\\">Powered by BossMail</span>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"http://apps.microsoft.com/windows/zh-cn/app/bossmail/24f4bdb3-1bca-467e-9dd9-15a5d278aec6\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ESMTP Bossmail\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Blue TV Technology-Internet of Things Cloud Platform Background Management System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7248\\u6743\\u6240\\u6709:\\u90d1\\u5dde\\u84dd\\u89c6\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var app_smp_type_name = '\\u95e8\\u5e97';var app_grp_type_name = '\\u96c6\\u56e2'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-UrlScan\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Rejected-By-UrlScan\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Coewelene - NenableQ\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/enableq.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"JS/CheckQuestion.js.php\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"EnableQ\\u5728\\u7ebf\\u95ee\\u5377\\u8c03\\u67e5\\u5f15\\u64ce\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/Images/enableq.ico\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DPTECH-company products\",\n  \"logic\": \"a||b||c|| (d&&e) ||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location = \\\\\\\"html/login_en.html\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Subject: c=CN, st=Zhejiang, l=Hangzhou, o=Dptech, ou=Dptech, cn=dptechnology.net/emailaddress=support@dptechnology.net\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"WEB Management Interface For DPtech\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"CommonName: www.dptechnology.net\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Organization: Dptech\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"var valid_url=\\\\\\\"/func/web_main/validate?check=\\\\\\\"+hex_md5(s).toLowerCase()\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"ConplatSSH\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-AP5030DN\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span class=\\\\\\\"medium\\\\\\\" >\\u672c\\u8bbe\\u5907\\u652f\\u6301FAT\\u6a21\\u5f0f\\uff08FAT\\u6a21\\u5f0f\\u4e0b\\u53ef\\u5355\\u72ec\\u5de5\\u4f5c\\uff09\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fortinet-product\",\n  \"logic\": \"a||b|| (c&&d) || (e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"console.error('Failed to parse language JSON')\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"placeholder=\\\\\\\"Next FortiToken Code\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"/15248/css/jquery.ui.css\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Organization: Fortinet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"top.location=\\\\\\\"/login\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"xxxxxxxx-xxxxx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tianroncraft - Data Protection System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<img src=\\\\\\\"static/images/login/loading.gif\\\\\\\" /><span id=\\\\\\\"message\\\\\\\">Loading......</span>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"YABB\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Y2User\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"YaBBTime.getTime()\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/YaBB.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Y2User\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AMCREST-camera\",\n  \"logic\": \"(a&&b) || (c&&d&&e) || (f&&g&& (h||i))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"amcrest\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"w_cloudCurVer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"onclick=\\\\\\\"chkAlarmSound()\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"id=\\\\\\\"play_alarm_sound\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Amcrest Technologies\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"dhvideowhmode\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"platformHtm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Amcrest\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"www.amcrest.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Wowza-Media-Server\",\n  \"logic\": \"a||b|| (c&& (d||e)) ||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"www-authenticate realm=\\\\\\\"Wowza Media Systems\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<html><head><title>Wowza Media Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"rtsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Wowza Streaming Engine\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Wowza Media Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Wowza Media Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dune-httpd\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Dune\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: Dune\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dump1090-http-interface\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Dump1090\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Dump1090\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Winmail-Server\",\n  \"logic\": \"a||b||c||d|| (e&&f&&g&&h) ||i|| (j&&k) ||l||m\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"magicwinmail_default_language\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"AMAX Information Technologies Inc.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"POP3,SMTP Server: <font color=red>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"src=\\\\\\\"themes/default/images/mail_pic.jpg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"sessid\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"encryptPwd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"f_theme\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"pwdPlaceholder\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Winmail Mail Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Winmail Mail Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"(build \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"background=\\\\\\\"customer/winmail_bg11.jpg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"src=\\\\\\\"customer/index_winmail_new.gif\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"iXCache\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"iXCache\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PING_COM-NPA201E\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ping Communication NPA201E : Login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-webOS-TV\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<friendlyName>LG webOS TV</friendlyName>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<friendlyName>[LG] webOS TV \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JUSTSAFE-CHINAMDM mobile device management\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ChinaMDM\\u7ec8\\u7aef\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"innerhtml=\\\\\\\"ChinaMDM\\u79fb\\u52a8\\u7ec8\\u7aef\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"justsy/user/searchMenusByUsername/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AVCON6\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"filename=AVCON6Setup.exe\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"AVCON6\\u7cfb\\u7edf\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"language_dispose.action\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"brivo-Onsite-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Brivo OnSite Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Brivo OnSite Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MMC-MW-2060AP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MMC Technology MW\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Andalian Ritio - Video Monitoring\",\n  \"logic\": \"a&&b&&c&&d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location.href = \\\\\\\"html/webplugin.html\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"UserLoginEvent(msgID, chNumber, userPageRt, userPreviewRt, userRecRt)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<body onload=\\\\\\\"\\\\\\\" onselectstart=\\\\\\\"return fbd();\\\\\\\" onunload=\\\\\\\"closewnd()\\\\\\\" onresize=\\\\\\\"ReSetMaskLayer\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"RSVideoOcx.cab\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-NetOpen\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/netopen/theme/css/inFrame.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Huawei NetOpen System\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GoAhead\",\n  \"logic\": \"(a&&b&&c&&d) || (e&&f&&g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GoAhead\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"GoAhead-Webs\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"GoAhead\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"GoAhead-Webs\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"HuaWei-Official-Site\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Huawei Official Site\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Apache-Forrest\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Apache Forrest\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"name=\\\\\\\"Forrest\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UrlRewriter.NET\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"UrlRewriter.NET\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"UrlRewriter.NET\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u8fc5\\u65f6-VOIP\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"location.href =\\\\\\\"login_web.htm\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"__BLF__.pushCallback(function\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<!-- PUBLIC MODULE END -->\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"STRONG-WiFi-Router-300\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"STRONG WiFi Router 300\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tenda-11N-Wireless-AP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Tenda 11N Wireless AP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Tenda 11N\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Good Jing Technology - Good Jing Content Management System\",\n  \"logic\": \"a|| (b&& (c||d||e||f))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered By LJCMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/data/attachment\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"http://www.itf4.cn\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"liangjing.org\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/tpl/templets\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"LJCMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CryptoNoter-Web-Miner\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"miner = new CryptoNoter\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CryptoNoter - In-Browser Javascript Web Miner\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"miner.getHashesPerSecond\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"new CryptoNoter.User\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"One - network detection D01\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/assets/gongan/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u516c\\u5b89\\u90e8\\u7b2c\\u4e00\\u7814\\u7a76\\u6240\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u7f51\\u63a2D01\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EClass-Integrated-Platform-2.5\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"eClass Integrated Platform 2.5\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Akiva-WebBoard\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by WebBoard\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"webboard=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"webboard=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VMware-vCenter\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ID_Converter_Welcome\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/converter/VMware-Converter-Client.exe\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"VMware vCenter\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Remote asset dynamic management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u8fdc\\u7a0b\\u8d44\\u4ea7\\u52a8\\u6001\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AfterLogic-WebMail\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AfterLogic WebMail Pro\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PHPWEBMAILSESSID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"PHPWEBMAILSESSID\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Seminole\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"server: Seminole\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: Seminole\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Aladdin-HASP-License-Manager\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: HASP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: HASP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"QNO-4WAN_1LAN_IPSec_VPN_Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"4WAN_1LAN_IPSec_VPN_Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Suhosin-product\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"suhosin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"suhosin\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Advanced-Electron-Forum\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered By AEF\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"aefsid\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"aef\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"aefsid\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-web network management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Web\\u7f51\\u7ba1\\u7528\\u6237\\u767b\\u5f55\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASP.NET-MVC\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Aspnetmvc\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Aspnetmvc\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ASP.NET MVC \\u5e94\\u7528\\u7a0b\\u5e8f\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"My ASP.NET MVC Application\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<h2>Modify this template to jump-start your ASP.NET MVC application.</h2>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"ASP.NET MVC Application</p>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-N10U2\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"RT-N10U2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"RT-N10U2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Advantech-WebAccess\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/bw_templete1.dwt\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/broadweb/WebAccessClientSetup.exe\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/broadWeb/bwuconfig.asp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Advantech WebAccess \\u9996\\u9801\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PLANET-ADN-4101\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Planet ADN-4101\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"ADN-4101\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ADN-4101\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tutore-Hybase\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TRS Hybase\\u7ba1\\u7406\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"#\\\\\\\">TRS Hybase</a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HikVision-Backup Management Server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5907\\u4efd\\u7ba1\\u7406\\u670d\\u52a1\\u5668 \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Trend-AdSubtract-proxy\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AdSubtract \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: AdSubtract\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ADTRAN-Device\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ADTRAN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NetVanta \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NetVanta \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"National Air Quality Networking Monitoring Management Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u56fd\\u5bb6\\u7a7a\\u6c14\\u8d28\\u91cf\\u8054\\u7f51\\u76d1\\u6d4b\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"netentsec Technology - Intelligent Marketing Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7f51\\u5eb7\\u667a\\u80fd\\u8425\\u9500\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Blockchain-Admin\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Blockchain Admin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" Ethereum Node\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ppoi.org Online Mining Platform\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/lib/projectpoi.min.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"miner = new ProjectPoi.User\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Let's take the software - Handhara Distribution ERP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"alert(\\\\\\\"\\u6b22\\u8fce\\u4f7f\\u7528 \\u3010\\u7ba1\\u5bb6\\u5a46\\u5206\\u9500ERP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"mimosa-\\u516c\\u53f8\\u4ea7\\u54c1\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Mimosa\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"client/img/mimosa-white-web-logo.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"mimosa.isconnected=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Adcon-Telemetry-Gateway\",\n  \"logic\": \"a||b||c|| (d&&e) ||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"addUPI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Adcon Telemetry GmbH;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"A850 Telemetry Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Adcon Telemetry\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"A850 Telemetry Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Welcome to the A840 Telemetry Gateway!\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FIKKER-CDN-Master\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Fikker CDN \\u4e3b\\u63a7\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"March-video surveillance\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"March Networks Command Client\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ACTi-\\u89c6\\u9891\\u76d1\\u63a7\",\n  \"logic\": \"(a&&b) || (c&&d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Web Configurator\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ACTi Corporation All Rights Reserved\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Httpd v1.0 05may2008\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Web Configurator\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"url=/cgi-bin/videoconfiguration.cgi\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-ERG2-1350W\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ERG2-1350W\\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-ERG2-450W\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ERG2-450W\\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NSOC-big data analysis system\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<h2>NSOC\\u5927\\u6570\\u636e\\u5206\\u6790\\u7cfb\\u7edf</h2>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/nfw/static/framework/images/views.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<b>NSOC\\u4e91\\u5b89\\u5168\\u89e3\\u51b3\\u65b9\\u6848\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"activeCollab\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"powered by activeCollab\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<p id=\\\\\\\"powered_by\\\\\\\"><a href=\\\\\\\"http://www.activecollab.com/\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"activeWeb-Content-Server\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AWNOCACHEBEGIN__AWNOCACHEBEGIN__AWNOCACHEBEGIN__AWNOCACHEBEGIN__AWNOCACHEBEGIN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"x-awcache\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"x-awcache\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"activeWeb cache extension\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"technicolor-TG605\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG605\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"technicolor-TG650\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG650\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"technicolor-TG670\",\n  \"logic\": \"a|| ((b||c) &&d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG670\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var headertext = 'MediaAccess TG670 v2';\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"var headertext = 'Technicolor TG670';\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"home\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Technicolor TG670\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sindoh-N600\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SINDOH N600\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APPEX-CPE\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AppEx CPE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AChecker-Web-accessibility-evaluation-tool\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"AChecker is a Web accessibility\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Checker : Web Accessibility Checker\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bilin-UAG series gateway\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u667a\\u6167\\u7f51\\u5173\\u914d\\u7f6e\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Qualcomm-4G-LTE-WiFi-VoIP-Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"4G LTE WiFi VoIP Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP-LINK-TD-W8968\",\n  \"logic\": \"a||b|| ((c||d||e||f||g||h||i||j) &&k&&l) || (m&&n&&o)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TP-LINK TD-W8968\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TD-W8968\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"TP-LINK TD-W8968\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"0.6.0 1.1 v0005.0 Build 120926 Rel.27100n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"0.6.0 1.4 v0019.0 Build 130812 Rel.55657n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"0.6.0 1.7 v0019.0 Build 131011 Rel.50940n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"1.0.5 Build 140821 Rel.52209\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"1.0.5 Build 150504 Rel.57027\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"1.0.5 Build 150512 Rel.42337\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"TD-W8968\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"AvigilonGateway\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"HTTP/1.1 405 Method Not Allowed\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"Content-Type: text/html; charset=utf-8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"Content-Length: 124\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Qualcomm-4G-LTE-WiFi-Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"4G LTE WiFi Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Supervisor-monitoring system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"images/supervisor.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Supervisor Status\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ntopng\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<font color=lightgray>Generated by ntopng\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<A href=http://www.ntop.org><img src=\\\\\\\"/img/logo.png\\\\\\\"></A>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Welcome to ntopng\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"href=\\\\\\\"/css/ntopng.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: ntopng\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: ntopng\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Financial staff management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"action=\\\\\\\"login_hrm.aspx?returnurl=%2flogin_hrm.aspx\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Integrated management platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"demo-tip icon-tip\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"easyui-window\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Actiontec-\\u516c\\u53f8\\u4ea7\\u54c1\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Actiontec\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"actiontec\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_LINK-DCM network device\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DCM-704\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DCM-604\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Blue Whale Cloud - Company Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u84dd\\u9cb8\\u667a\\u4e91\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PIX_LINK-WiFi-Repeater\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"_T(pg_login.user)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Grandnode\",\n  \"logic\": \"a||b||c||d||e||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Powered-By: GrandNode\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \".Grand.customer=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \" .Grand.Antiforgery\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \".Grand.customer=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \" .Grand.Antiforgery\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"name=\\\\\\\"generator\\\\\\\" content=\\\\\\\"grandnode\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"X-Powered-By: GrandNode\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Shoubao - Company Products\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"/admin/index/home\\\\\\\" class=\\\\\\\"header-home-link\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5f00\\u4f1a\\u5b9d</a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"China Unicom - in Wo System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<em class=\\\\\\\"wk-fl\\\\\\\">\\u5728\\u6c83\\u7cfb\\u7edf</em>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"refreshCaptchaImgFun\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alibaba-Group-DMS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Copyright &copy;  DMS  All Rights Reserved \\uff08Alibaba \\u6570\\u636e\\u7ba1\\u7406\\u4ea7\\u54c1\\uff09\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"China Unicom - OS operation and maintenance\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/uf/login/login.jsp\\\\\\\" >\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"China Unicom - Tiangong Data Management Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5929\\u5bab\\u6570\\u636e\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UBNT-EdgePoint-Switch\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"EdgePoint Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UBNT-EdgeRouter\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"EDGEROUTER\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP-LINK-TD-W8980\",\n  \"logic\": \"a||b||c||d||e||f||g||h\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TP-LINK TD-W8980\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TP-LINK TD-W8980\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"0.6.0 0.6 v000e.0 Build 130304 Rel.38108n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"0.6.0 1.3 v000e.0 Build 131012 Rel.51720n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"0.6.0 1.5 v000e.0 Build 140408 Rel.49241n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"0.6.0 1.7 v000e.0 Build 140619 Rel.51112n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"0.6.0 1.7 v000e.0 Build 140919 Rel.52176n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"0.6.0 1.8 v000e.0 Build 150514 Rel.40138n\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OceanStor DeviceManager\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OceanStor DeviceManager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Spark history-server\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"History Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"spark\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"/static/historypage-common.js\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Eversec - Enterprise Security Threat Perception System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4f01\\u4e1a\\u5b89\\u5168\\u5a01\\u80c1\\u611f\\u77e5\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"action=\\\\\\\"/j_spring_security_check\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Telecommunications industry-OS system\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/cas/login?service=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"; path=/portal/; HttpOnly\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/cas/login?service=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"; path=/portal/; HttpOnly\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Metronic-Admin-Theme-Framework\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Metronic. Admin Dashboard Template.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"copyright\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Metronic | Admin Dashboard Template\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BTXA-desensitizing system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/ui/redirectlogin/login.html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SANGFOR-\\u96c6\\u4e2d\\u7ba1\\u7406\\u7cfb\\u7edf\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/cgi-bin/login.cgi?requestname=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var msg = '\\u5bf9\\u4e0d\\u8d77\\uff0c\\u96c6\\u4e2d\\u7ba1\\u7406\\u5e73\\u53f0\\u6682\\u4e0d\\u652f\\u6301\\u60a8\\u5f53\\u524d\\u4f7f\\u7528\\u7684\\u6d4f\\u89c8\\u5668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"var msg = '\\u5bf9\\u4e0d\\u8d77, '+str+'\\u6682\\u4e0d\\u652f\\u6301\\u60a8\\u5f53\\u524d\\u4f7f\\u7528\\u7684\\u6d4f\\u89c8\\u5668\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Accurate_iot-aiot Structure Health Monitoring System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AIOT\\u7ed3\\u6784\\u5065\\u5eb7\\u76d1\\u6d4b\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Accellion-Secure-File-Transfer\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"sfcurl=deleted;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"sfcurl=deleted;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Secured by Accellion\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-Omniswitch\",\n  \"logic\": \"a||b|| (c&&d) || (e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Webview Logon Page\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"document.write(errmsg==\\\\\\\"\\\\\\\"?\\\\\\\"&nbsp;\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/web/content/login.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Agranat-EmWeb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/web/content/login.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Agranat-EmWeb\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alibaba-Ali Medium Automation Verification Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u963f\\u91cc\\u4e2d\\u95f4\\u4ef6\\u81ea\\u52a8\\u5316\\u9a8c\\u8bc1\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cerebro\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"lang=\\\\\\\"en\\\\\\\" ng-app=\\\\\\\"cerebro\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bocom-video surveillance\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MPEG2/4 DVSwebserver\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Elasticsearch_SQL\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Elasticsearch-sql client\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"elasticsearchSqlApp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Apache-Flink\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Apache Flink Web Dashboard\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<img alt=\\\\\\\"Apache Flink Dashboard\\\\\\\" src=\\\\\\\"images/flink-logo.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APACHE-Skywalking\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SkyWalking\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Pablo_Software-Quickn-Easy-FTP\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Quick 'n Easy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FTP Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ALIYUN-RDS-API\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ALIYUN RDS API\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"system!stat.jspa\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EagleEye\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EagleEye \\u9489\\u9489\\u7b54\\u7591\\u7fa4\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Public opinion monitoring platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u8206\\u60c5\\u76d1\\u63a7\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/mpoweb/a/login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yonghongtech-data visualization\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"yonghong\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"contentDiv imgPosition desW\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Qianxin - Data Deactivation System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"#!/home\\\\\\\" class=\\\\\\\"sysname\\\\\\\">360\\u7f51\\u795e\\u6570\\u636e\\u8131\\u654f\\u7cfb\\u7edf \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ALERTMANAGER\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Alertmanager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"defaultCreator\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Redis-Exporter\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Redis Exporter\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Order management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u8054\\u7cfb\\u65b0\\u8ba2\\u5355\\u7cfb\\u7edf\\u5f00\\u53d1\\u540c\\u4e8b\\u8fdb\\u884c\\u4fee\\u6539\\u3002</div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hitachi-Maintenance-Utility\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Maintenance Utility\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"__gwt_historyFrame\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Flower - Celery monitoring tool\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a class=\\\\\\\"brand\\\\\\\" href=\\\\\\\"/\\\\\\\">Flower</a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"4D\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: 4D\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: 4D\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Aardvark-Topsites\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Aardvark Topsites\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Abyss\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"server: Abyss\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"server: Abyss\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"3dcart\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"powered by 3dcart\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"3dvisit\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<!--START: 3dcart stats-->\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"X-Powered-By: 3DCART\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"INSPUR-server\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"img/inspur_logo.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<!-- add by zhchhong\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Management\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<frame src=\\\\\\\"./page/blank.html\\\\\\\" name=\\\\\\\"mainFrame\\\\\\\" id=\\\\\\\"MAINFRAME\\\\\\\" scrolling=\\\\\\\"no\\\\\\\" noresize=\\\\\\\"false\\\\\\\"></frame>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dreambox-product\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"dreambox\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Welcome to DreamBox\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Aisidi-mobile channel management system\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"\\u7231\\u65bd\\u5fb7\\u79fb\\u52a8\\u6e20\\u9053\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<option value=\\\\\\\"age_sys\\\\\\\">\\u4ee3\\u7406\\u5546\\u5185\\u90e8\\u5458\\u5de5</option>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u7231\\u65bd\\u5fb7 AISIDI.COM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Gordian-streaming media server\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Gordian\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Gordian\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Huawei-RBT Gateway Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RBT Gateway Management System\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SNC_DCP-Dispatcher\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SNC-DCP Dispatcher\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ckan-open data\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"opendata\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"ckan\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hygieia-Dashboard\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Hygieia Dashboard\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \".NET\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Visual Basic .NET 7.1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SITECOM-ADSL-Model\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"Sitecom\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Basic realm=\\\\\\\"Sitecom\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LANCOM-1821n-Wireless\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"LANCOM 1821n Wireless\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/images/prodimg.jpeg\\\\\\\" alt=\\\\\\\"LANCOM 1821n Wireless\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"LANCOM 1821n Wireless\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"LANCOM 1821n Wireless\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LANCOM-L-321agn-Wireless\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"LANCOM L-321agn Wireless\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/images/prodimg.jpeg\\\\\\\" alt=\\\\\\\" LANCOM L-321agn Wireless\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"LANCOM L-321agn Wireless\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"LANCOM L-321agn Wireless\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LANCOM-1784VA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"LANCOM 1784VA\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LANCOM-WLC-4006\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"LANCOM WLC-4006\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: LANCOM WLC-4006\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"/images/prodimg.jpeg\\\\\\\" alt=\\\\\\\" LANCOM WLC-4006\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"LANCOM WLC-4006\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LANCOM-1906VA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"LANCOM 1906VA\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LANCOM-883-VoIP\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"LANCOM 883 VoIP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/images/prodimg.jpeg\\\\\\\" alt=\\\\\\\" LANCOM 883 VoIP \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"LANCOM-883-VoIP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AsiaInfo- Mobile Traffic Analysis Management System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e2d\\u56fd\\u8054\\u901a\\u79fb\\u52a8\\u6d41\\u91cf\\u5206\\u6790\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var url = getContextName() + \\\\\\\"?service=ajaxDirect/1/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"V2-video conference\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"V2 Conference\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<frame src=\\\\\\\"../conference/currentConfAction.do\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"content.jsp\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Spark-Jobs\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/jobs/job?id=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Spark Jobs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Inceptor\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Jobs\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Towel Software - AsrangePi\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OrangePi \\u7cfb\\u7edf\\u4fe1\\u606f\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a href=\\\\\\\"index.jsp\\\\\\\" class=\\\\\\\"navbar-brand\\\\\\\">OrangePi \\u63a7\\u5236\\u53f0</a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Wisdom parking management platform\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"\\u667a\\u6167\\u505c\\u8f66\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"login-tit w320 h72\\\\\\\">\\u767b\\u5f55\\u8d26\\u53f7</div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u667a\\u6167\\u505c\\u8f66\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-WNR3500L\",\n  \"logic\": \"((a||b||c) &&d&&e) || ((f||g||h) &&i&&j)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR WNR3500L\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Netgear-WNR3500l\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Maniek WNR3500L\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"NETGEAR WNR3500L\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Netgear-WNR3500l\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Maniek WNR3500L\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"NETGEAR-R8500\",\n  \"logic\": \"a||b||c|| (d&&e) ||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETGEAR R8500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Matts_R8500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"R8500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Netgear R8500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Netgear R8500\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tianyuan Diko - Management Platform\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5317\\u4eac\\u5929\\u6e90\\u8fea\\u79d1\\u4fe1\\u606f\\u6280\\u672f\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"casLoginView\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"i-verfiy\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AdNovum-nevisProxy\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"navajo=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tomcat-Monitor-uses-WADL\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Tomcat Monitor uses WADL to describe services it can offer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Time-Series-Collection-and-Processing-Server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Prometheus Time Series Collection and Processing Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hitachi-Storage-Navigator\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Hitachi Device Manager - Storage Navigator\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Jumping...\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<form method=\\\\\\\"post\\\\\\\" action=\\\\\\\"./index.do\\\\\\\" name=\\\\\\\"frm\\\\\\\" />\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Jump to StorageNavigator2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mitel-Aastra-IP-telephone\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Aastra IP telephone\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<frame src=\\\\\\\"m_bar.asp\\\\\\\" name=\\\\\\\"sidemenu\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Aastra\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-NeoStor\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C NeoStor\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Vicworl\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by Vicworl\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Vicworl\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"vindex_right_d\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Welcm - Hui Xueyun Education\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ctl00_ContentPlaceHolder1_dltTopVideos\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SchoolCopyRight\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"SchoolCopyRight\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Gitblit\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Gitblit\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a title=\\\\\\\"gitblit homepage\\\\\\\" href=\\\\\\\"http://gitblit.com/\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alibaba-EDAS Configuration Center\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EDAS\\u914d\\u7f6e\\u4e2d\\u5fc3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"lccCommonController\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"China Unicom-CBSS automation test\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<p>copyright&copy cbss \\u9879\\u76ee\\u7ec4 \\u81ea\\u52a8\\u5316\\u6d4b\\u8bd5\\u5c0f\\u7ec4</p>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cloudera-Manager\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Set-Cookie: cloudera_manager_sessionid=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var loginpageurl = \\\\\\\"/cmf/login\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Set-Cookie: cloudera_manager_sessionid=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SurgeFTP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SurgeFTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Qingguo Software-CMS\",\n  \"logic\": \"a||b||c|| (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"KINGOSOFT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SetKingoEncypt.jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/jkingo.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"KINGOSOFT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"\\u9752\\u679c\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alibaba-Group-TLog\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"TLog \\u5b9e\\u65f6\\u6570\\u636e\\u5904\\u7406\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ConfD\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ConfD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ssh\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: ConfD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: ConfD\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Seastar-httpd\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Seastar httpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Seastar httpd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CrediMail\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CrediMail\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Real Name Registration Background Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5b9e\\u540d\\u767b\\u8bb0\\u540e\\u53f0\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Queen Stars-Tiangle WEB Application Detection System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5929\\u955cweb\\u5e94\\u7528\\u68c0\\u6d4b\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HITACHI-Cosminexus\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Cosminexus HTTP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Cosminexus HTTP Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EchoLink\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: EchoLink\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: EchoLink\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Code_Crafters-Ability-Mail-Server\",\n  \"logic\": \"(a&&b) ||c||d|| (e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Code Crafters Ability Mail Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Code Crafters Ability Mail Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Code-Crafters Ability Mail Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Code-Crafters Ability Mail Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"China Unicom - Bad Account Management System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e2d\\u56fd\\u8054\\u901a\\u574f\\u8d26\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u767b\\u5f55\\u5bc6\\u7801\\u9519\\u8bef\\u6b21\\u6570\\u8d85\\u8fc75\\u6b21\\uff0c\\u5e10\\u53f7\\u88ab\\u9501\\u5b9a\\u3002\\u8bf7\\u8054\\u7cfb\\u7701\\u574f\\u8d26\\u7cfb\\u7edf\\u7ba1\\u7406\\u5458\\uff0c\\u6216\\u53d1\\u90ae\\u4ef6\\u89e3\\u9501\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DrayTek-Vigor2960\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Model: Vigor2960\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"V2960/excanvas.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Vigor 2960\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-imageRUNNER2520i\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"imageRUNNER2520i\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FTGATE- Mail System\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FTGate server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FTGate4\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"FTGate6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WebPy\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"webpy_session_id\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"webpy_session_id\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AliyunOcm\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: AliyunOcm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: AliyunOcm\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"China Unicom - Conference Catheter\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e2d\\u56fd\\u8054\\u901a\\u4f1a\\u4e1a\\u6838\\u5bf9\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"China Unicom - Group Customer Manager Exhibition System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e2d\\u56fd\\u8054\\u901a\\u96c6\\u56e2\\u5ba2\\u6237\\u7ecf\\u7406\\u5c55\\u4e1a\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"action=\\\\\\\"/system/login/login.shtml\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Serv-U-FTP\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"t\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Serv-U FTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"alt=\\\\\\\"Serv-U FTP Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-FTP\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"t\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZTE FTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ARRIS-DSR-4440\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DSR-4440 \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-Spectrum-Computing\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/platform/framework/logout/logout.action\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SSOCLIENT_\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"China Unicom-EsS\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/essframe\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Location\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ESSFRAMEPLS_2I_JSESSIONID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"ESSFRAMEPLS_2I_JSESSIONID\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"pyspark-shell\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"pyspark-shell\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"eiProject\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EIProject\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Hello EIProject <br>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DRC Automation Access Platform\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DRC\\u81ea\\u52a8\\u5316\\u63a5\\u5165\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<span class=\\\\\\\"blue bolder\\\\\\\">DRC</span>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Satellite broadband operation service platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u536b\\u661f\\u5bbd\\u5e26\\u8fd0\\u8425\\u670d\\u52a1\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ProFTPD\",\n  \"logic\": \"(a&&b) ||c||d||e||f|| (g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"t\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ProFTPD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"ProFTPD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"ProFTPD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"ProFTP-Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"proftp server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"550 SSL/TLS required on the control channel\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"220 \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-BSkyB-DG934G\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"BSkyB DG934G \\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"BSkyB DG934G \\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Small I Robot - Unified Management Platform\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Author:lvzhaohua\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5c0fi\\u667a\\u80fd\\u673a\\u5668\\u4eba\\u7edf\\u4e00\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"envoy\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"envoy\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AirDroid - equipment housekeeper\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: AirDroid\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"AirDroid\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ActiveGrid\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: ActiveGrid\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: ActiveGrid\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Thundermail\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"thundermail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ThunderMail \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"3PROXY\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"3Proxy\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tencent-Eagle Box Monitoring Center\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u9e70\\u773c\\u76d2\\u5b50\\u76d1\\u63a7\\u4e2d\\u5fc3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"\\u9e70\\u773c\\u76d2\\u5b50\\u76d1\\u63a7\\u4e2d\\u5fc3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-HDM\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/video_record.jnlp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<iframe frameborder=\\\\\\\"0\\\\\\\" class=\\\\\\\"framelayout\\\\\\\" src=\\\\\\\"./page/blank.html\\\\\\\" name=\\\\\\\"mainFrame\\\\\\\" id=\\\\\\\"MAINFRAME\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: H3C-HDM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: H3C-HDM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Go-FTP-Server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Go FTP Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Nexus-3000-Switch\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Nexus 3000 Switch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco NX-OS(tm) n3000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VSP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RAID700\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"YAPI\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"YApi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div id=\\\\\\\"yapi\\\\\\\" style=\\\\\\\"height: 100%;\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"etcd-viewer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"etcd viewer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a class=\\\\\\\"navbar-brand\\\\\\\" href=\\\\\\\"./home\\\\\\\">etcd viewer</a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ChartMuseum\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Welcome to ChartMuseum!\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"maxprint-MaxLink-150AF\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"MAXPRINT MaxLink-150AF\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\" MAXPRINT MaxLink-150AF\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"MAXPRINT MaxLink-150AF\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\" MAXPRINT MaxLink-150AF\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"maxprint-MWR-150\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"MAXPRINT MWR-150\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\" MAXPRINT MWR-150\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"MAXPRINT MWR-150\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\" MAXPRINT MWR-150\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"maxprint-MaxLink-300-2A\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"MAXPRINT MaxLink-300-2A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PLANEX-MZK-MF300N\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"MZK-MF300N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"MZK-MF300N\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Xinyi Integration -SIS-D2012RE-39V\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"SIS-D2012RE-39V\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"SIS-D2012RE-39V\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AMI-SPX\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelName>AMI SPX</modelName>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PURE_FTPD\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ftp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Pure-FTPd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BFTP\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"t\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"bftpd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AMI-MegaRAC-SPX\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelName>AMI MegaRAC SPX</modelName>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AMI-MegaRAC-SP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelName>AMI MegaRAC SP</modelName>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Informatica-PowerCenter\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Informatica PowerCenter \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"action=\\\\\\\"/adminconsole/LoginSubmit.do\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Informatica Administrator\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Informatica\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: Informatica\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-HG8247H\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var productname = 'HG8247H';\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-HG8346R\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var productname = 'HG8346R\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-WPN824\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"WPN824\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"WPN824v2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NETGEAR_WPN824v3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"WPN824\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"WPN824v2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"NETGEAR_WPN824v3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Apache_OFBiz\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Organizational Unit: Apache OFBiz\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"www.ofbiz.org\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/images/ofbiz_powered.gif\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"REACH Relief - HD Communication System\",\n  \"logic\": \"a||b||c||d||e|| (f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u9510\\u53d6Rex\\u5f55\\u64ad\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/common/js/reach.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u6df1\\u5733\\u9510\\u53d6\\u4fe1\\u606f\\u6280\\u672f\\u80a1\\u4efd\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/reach/jquery.reach.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<font size=4.5>\\u9510\\u53d6\\u591a\\u5a92\\u4f53\\u5f55\\u64ad\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"\\u591a\\u5a92\\u4f53\\u5f55\\u64ad\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"\\u9510\\u53d6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-AC53\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-AC53\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"RT-AC53\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DrayTek-Vigor-AP910C\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"VigorAP910C\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"VigorAP910C\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DrayTek-Vigor-AP800\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"VigorAP800\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"VigorAP800\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DrayTek-Vigor-AP710\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"VigorAP710\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"VigorAP710\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DrayTek-Vigor-3300\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Vigor 3300\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Vigor 3300\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CENTURY_SYSTEMS-XR-510\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Welcome to XR-510 Setup\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Welcome to XR-510 Setup\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ELECOM-WRH-300x\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"WRH-300x\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"WRH-300x\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DIR-842\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<td><script>I18N(\\\\\\\"h\\\\\\\", \\\\\\\"Model Name\\\\\\\");</script> : DIR-842\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<h1>DIR-842 Login</h1>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-XGS2210\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"XGS2210\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"XGS2210\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Gogs\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Gogs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a class=\\\\\\\"item\\\\\\\" target=\\\\\\\"_blank\\\\\\\" href=\\\\\\\"https://gogs.io/docs\\\\\\\" rel=\\\\\\\"noreferrer\\\\\\\">\\u5e2e\\u52a9</a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Set-Cookie: i_like_gogits=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Set-Cookie: i_like_gogits=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"XINNET-Template Building System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"\\u6a21\\u677f\\u7cfb\\u7edfXinnet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"msnim:chat?contact=Xinnet@hotmail.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"proxygen\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: proxygen\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: proxygen\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cloud call center - customer service products\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"tq.cn/floatcard?\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TQ\\u4e91\\u547c\\u53eb\\u4e2d\\u5fc3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Youyou -mailgard-webmail\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.open('http://www.hechen.com')\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Mailgard WebMail\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HikVision-Company Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Hikvision Digital Technology Co., Ltd.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FUJITSU-iRMC-S4-Webserver\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: iRMC S4 Webserver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: iRMC S4 Webserver\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"eSpace-U1981\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"eSpace U1981 \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sagemcom-SX682-WiMAX\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Sagemcom SX682 WiMAX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Sagemcom SX682 WiMAX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Sagemcom SX682 WiMAX\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-S6800\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C S6800\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tencent-QQ chat\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"tencent://message/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SIEMENS-Gigaset-sx762\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: SiemensGigaset-Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: SiemensGigaset-Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BMU\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7248\\u672c\\uff1a eSpace ECS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JC-HTTPD\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: JC-HTTPD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: JC-HTTPD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"IP_SHARER-WEB\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: IP_SHARER WEB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: IP_SHARER WEB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Qi Ming Star - Tianyi Centralized Management and Log Analysis Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5929\\u73a5\\u96c6\\u4e2d\\u7ba1\\u7406\\u4e0e\\u65e5\\u5fd7\\u5206\\u6790\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruizhe Technology-CDN\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Reyzar-CDN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Reyzar-CDN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zhiyuan Interconnection - Sheyon-Server\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Seeyon-Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Seeyon-Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"PRICOM-H-260U\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PRICOM H-260U \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"H-260U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"silex technology, Inc.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Windows-Azure-Web\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Windows-Azure-Web\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Windows-Azure-Web\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ACOS-HTTPD\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: ACOS HTTPD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: ACOS HTTPD\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FNET-HTTP-Freescale-Embedded-Web-Server\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FNET HTTP - Freescale Embedded Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FNET HTTP - Freescale Embedded Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"mediola-a.i.o.-Gateway\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"a.i.o. Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"a.i.o. Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DOURAN-Secure-Gate\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: DSGWEB OK\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: DSGWEB OK\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Douran Secure Gate II\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"form_section\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"snom-embedded\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: snom embedded\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: snom embedded\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Jana-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Jana-Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Jana-Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ABACUS-Company Products\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AbaSioux\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"AbaSioux\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SEGGER-embOS\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: embOS/IP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: embOS/IP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Welcome to embOS/IP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MediabolicMWEB\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: MediabolicMWEB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: MediabolicMWEB\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"paYara-Server\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Payara Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Payara Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Payara Server Administration Console\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Payara Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"node-static\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"server: node-static\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: node-static\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AAP-IP-Module\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: PSTN-ETH\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: PSTN-ETH\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Schneider-charging pile\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cgiServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Charging station\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"P3p: cp=This is not a privacy policy!\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"267\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ADSSERVER\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: ADSSERVER\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: ADSSERVER\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ADCON-addUPI-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: addUPI Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: addUPI Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GeoWebServer\",\n  \"logic\": \"(a&&b) || (c&&d&&e) ||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: GeoWebServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: GeoWebServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"GeoWebServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Adobe-JRun-Web-Server\",\n  \"logic\": \"((a||b) &&c) || ((d||e) &&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: JRun Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"JRun/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: JRun Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"JRun/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"DV202-207\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: DV202-207\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: DV202-207\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GateOne\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: GateOne\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: GateOne\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dvblogic-DVBLink\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DVBLink\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DVBLink\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RTXCweb-Software\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: RTXCweb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: RTXCweb\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mercury-router\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MW4530R\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MAC1200R\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"MERCURY \\u65e0\\u7ebf\\u8def\\u7531\\u5668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"MW4530R\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"MAC1200R\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Motorola-Binatone-router\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Binatone\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Binatone\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"sonarQube-\\u4ee3\\u7801\\u7ba1\\u7406\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"SonarQube\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SonarQube\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IQhttpD\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: IQhttpD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: IQhttpD\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OpenText-FirstClass-WebServer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: OpenText FC WebServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: OpenText FC WebServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dell-Compellent-Storage\",\n  \"logic\": \"((a||b) &&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Compellent Storage Center\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"code: 'com.compellent.systemexplorer.SystemExplorer.class',\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"o=Compellent Technologies\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IPC-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: IPC Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: IPC Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Chen Rui Information - One-way transmission system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u8fb0\\u9510\\u5355\\u5411\\u4f20\\u8f93\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Duoke-Web-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Duoke Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Duoke Web Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JBoss-5.0\",\n  \"logic\": \"a&&b&&c&&d&&e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"JBoss-5.0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"RouterOS\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"28ZE\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"DEEPSOFT-Postian-Web-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Postian Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Postian Web Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HTTPd-WASD\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: HTTPd-WASD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: HTTPd-WASD\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fujitsu-IPCOM\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Fujitsu-IPCOM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Fujitsu-IPCOM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IceWarp-\\u670d\\u52a1\\u5668\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: IceWarp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: IceWarp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Zhiyun - Company Products\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u767b\\u5f55\\u667a\\u9009\\u4e91\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"handleXpApplyContact\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Acadia-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Acadia Server -\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Acadia Server -\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LogMeIn-Xively-Gateway\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: LogMeIn Web Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: LogMeIn Web Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Linksys-VPN\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"linksys vpn\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"linksys-vpn\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"linksys vpn\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"linksys-vpn\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Home-Assistant\",\n  \"logic\": \"a||b||c|| (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Home Assistant\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Home Assistant\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Home Assistant\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"content=\\\\\\\"/static/icons/tile-win-70x70.png\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Home Assistant\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Brother-8510dn printer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Brother MFC-8510DN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"id=\\\\\\\"modelName\\\\\\\"><h1>MFC-8510DN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DRAYTEK-Company Products\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DrayTek Corporation\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Router Model\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Digi-DR6410\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DR6410-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"radware-\\u516c\\u53f8\\u4ea7\\u54c1\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Alteon (D.S.) Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: Alteon (D.S.) Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"SSH-2.0-Alteon\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-HG8346M\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var productname = 'HG8346M'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-HG8245Q2\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var productname = 'HG8245Q2'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var productname = 'HG8245Q2';\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-HG8045A2\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var productname = 'HG8045A2'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var productname = 'HG8045A2';\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-HG8145V\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var productname = 'HG8145V'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var productname = 'HG8145V';\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FIT-AP\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WLAN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"tit1.innerhtml='Current mode: Fit';\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u914d\\u7f6eFIT AP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u914d\\u7f6e\\u51fa\\u5382FIT AP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-HG8021H\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var productname = 'HG8021H'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var productname = 'HG8021H';\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-HG8245A\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var productname = 'HG8245A'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var productname = 'HG8245A';\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-HG8245T\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var productname = 'HG8245T'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Optical-Bypass-System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Optical Bypass System\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Raritan-\\u516c\\u53f8\\u4ea7\\u54c1\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AKC Client Check\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<!-- Raritan logo -->\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<div id=\\\\\\\"raritan_logo\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-ZyAIR-G-4100v2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZyXEL ZyAIR G-4100v2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NC-LINK-300M-11N-Wireless-Router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href='img/AMTC_logo.png'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"http://www.nc-link.cn/\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-WR1043ND\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TP-Link WR1043ND\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"TPLINK WR1043ND\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Number Technology - DSIS Multimedia Information Publishing System\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6b22\\u8fce\\u4f7f\\u7528\\u591a\\u5a92\\u4f53\\u53d1\\u5e03\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"\\u6570\\u6e38DSIS\\u591a\\u5a92\\u4f53\\u4fe1\\u606f\\u53d1\\u5e03\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u6570\\u6e38DS-IS\\u6570\\u5b57\\u6807\\u724c\\u8f6f\\u4ef6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Four_Faith-Router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Four-Faith Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"bitvise-WinSSHD\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Bitvise SSH Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-SecPath-F5000-M\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C SecPath F5000-M\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NetMoon-Network Product\",\n  \"logic\": \"a||b||c|| (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Web Configuration\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"id=\\\\\\\"res_copy_id\\\\\\\">Netmoon Technology\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"css/nmn_common.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"WEB configuration\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"res[i].copy=res[i].copy3;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Technology Development Co., Ltd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-SBG3300\",\n  \"logic\": \"a||b||c|| (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"Welcome to \\\\\\\" + \\\\\\\"SBG3300\\\\\\\" + \\\\\\\" Web\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZyXEL SBG3300\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Welcome to SBG3300\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"SBG3300\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"ZyXEL\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHILIPS-TV\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Philips TV\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HYUNDAI-Android-TV\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Hyundai Android TV\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"XGIMI-H1S\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"XGIMI TV\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"H1S\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VOX-Android-TV\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VOX Android TV\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LANCOM-884-VoIP-(over-ISDN)\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/images/prodimg.jpeg\\\\\\\" alt=\\\\\\\" LANCOM 884 VoIP (over ISDN)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"LANCOM 884 VoIP (over ISDN)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"LANCOM 884 VoIP (over ISDN)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Linksys-gateway\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Linksys gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Linksys gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MaxCDN\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NetDNA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: NetDNA\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Icinga\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Icinga\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Icinga\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PG-API-Server\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PG API Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PGAPIServ\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"PG API Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"PGAPIServ\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DLink-Router\",\n  \"logic\": \"((a||b|| (c&&d) ||e) &&f&&g&&h) ||i||j|| (k&&l) || (m&&n&&o)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"dlinkrouter\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"webuicookie=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"D-Link Systems\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"DSL-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"DLink Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"NETSurveillance WEB\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"28ze\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Dlink-Router login:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"login_title:'D-Link Router Management System'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"src=\\\\\\\"/image/mobile_dlinklogo_login.png\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"D-LINK\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"HTTP/1.0 503 R\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"Content-Type: text/html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"Busy\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Heavenlyman letter -topad\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5929\\u878d\\u4fe1 TopAD\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-Prime-Infrastructure\",\n  \"logic\": \"a||b||c||d||e||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div class=\\\\\\\"xwtProductName\\\\\\\" >Cisco Prime Infrastructure\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/webacs/lib/xwt/themes/prime/prime-xwt.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"webacs/welcomeAction.do\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Prime Infra\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: Prime\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: Prime\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Cisco  Prime Infrastructure\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-Enterprise Wireless Router\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var is_tplogin = CUR_URL.indexOf(\\\\\\\"tplogin.cn\\\\\\\")\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"link-detail-table detail\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IP_COM-AP unified management platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"data-lang=\\\\\\\"apMP\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IP-COM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Anheng Information - Tongyu host security and management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=./static/css/app.edb681c84a53277f9336fc297ebca96e.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"leadsec- anti-virus gateway system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7f51\\u5fa1\\u9632\\u75c5\\u6bd2\\u7f51\\u5173\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LinkedCare-e tooth the teeth upload\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"e\\u770b\\u7259\\u6587\\u4ef6\\u4e0a\\u4f20API\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-HG8045A5\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var productname = 'HG8045A5\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var productname = 'HG8045A5\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-HG8245\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelNumber>HG8245</modelNumber>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var productname = 'HG8245';\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-HG8247\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var productname = 'HG8247'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tiandune - Vulnerability Scanning and Management System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5929\\u878d\\u4fe1\\u8106\\u5f31\\u6027\\u626b\\u63cf\\u4e0e\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/js/report/horizontalReportPanel.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AccServer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: AccServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: AccServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ACTS-WebSocketServer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: ACTS WebSocketServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: ACTS WebSocketServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ADAS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: ADAS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: ADAS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"adf_http_server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: adf_http_server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: adf_http_server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Gigabit-Color-IP-Phone\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Gigabit Color IP Phone\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Gigabit Color IP Phone\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Miku Jianbi - Film Management System\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7c73\\u9177\\u5f71\\u89c6 \\u7248\\u6743\\u6240\\u6709\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"name=\\\\\\\"keywords\\\\\\\" content=\\\\\\\"\\u7535\\u5f71,\\u89c6\\u9891\\u5927\\u5168,\\u5728\\u7ebf\\u9ad8\\u6e05\\u7535\\u5f71,\\u4ed8\\u8d39\\u7535\\u5f71,\\u514d\\u8d39\\u7535\\u5f71,\\u5267\\u96c6,\\u7535\\u5f71,\\u5728\\u7ebf\\u89c2\\u770b,VIP\\u9ad8\\u6e05\\u7535\\u5f71\\u76f4\\u64ad\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"bplay.php?play=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BLUE_IRIS-VMS\",\n  \"logic\": \"((a||b) &&c&&d) || (e&&f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Blue Iris Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: BlueIris\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: BlueIris\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Tianren Letter-ADS Management Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5929\\u878d\\u4fe1ADS\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NSTC-Inter-cross-banking management cloud platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"skysz.fw.index.validatecodenew = \\\\\\\"/loginAction/validateCodeNew.html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bluepacific-network public opinion monitoring system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/biradarserver/web/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Instalcompact-EmSyDia-1.6\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"URZ/IC/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"EmSyDia 1.6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ABUS-DVR\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"document.activex.url.value=\\\\\\\"172.7.76.84\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Content-Length: 1292\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ABUS DVR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-ZyWALL-110\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZyWALL 110\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZyWALL 110\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyWALL-USG-50\",\n  \"logic\": \"(a&&b) ||c||d|| (e&& (f||g))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div class=\\\\\\\"model\\\\\\\" id=\\\\\\\"model\\\\\\\" name=\\\\\\\"model\\\\\\\">ZyWALL USG 50\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZyWALL 110\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ZyWALL USG 50\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"ZyWALL USG 50\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"ZyWALL USG 50\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"multi_lingual\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"model\\\\\\\">ZyWALL USG 50\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-Tivoli-Access-Manager\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<!--- DO NOT TRANSLATE OR MODIFY any part of the hidden parameter(s) --->\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Access Manager for e-business\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"var warningstring = \\\\\\\"<B>WARNING:</B> To maintain your login session, make sure that your browser is configured to accept Cookies.\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Access Manager for e-business Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<!-- Copyright (C) 2000 Tivoli Systems, Inc. -->\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Subsonic-AS-Subsonic\",\n  \"logic\": \"(a&&b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Subsonic\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"onload=\\\\\\\"document.getElementById('j_username').focus()\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"parent.frames.upper.keyboardShortcut(\\\\\\\"showIndex\\\\\\\", index.toUpperCase());\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Metaswitch-Networks-MetaView-Web\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content='dcl.metaview.web.Client'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"dcl.metaview.web.Client.nocache.js\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Heavenly Letter - Safety Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5929\\u878d\\u4fe1\\u5b89\\u5168\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DSL-2500U\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"D-Link DSL-2500U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DSL-2500U\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DSL-2640NRU\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"D-link DSL-2640NRU\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"D-link DSL-2640NRU\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXV10-H108N\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZXV10 H108N\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"China Power Fu Fu - Safety Baseline Management\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"align=\\\\\\\"center\\\\\\\">\\u798f\\u5bcc\\u8f6f\\u4ef6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Telenor-4G-Router\",\n  \"logic\": \"((a&&b) || (c&&d)) &&e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location.href=\\\\\\\"http://\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"if(login_flag==\\\\\\\"1\\\\\\\")\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<form id=\\\\\\\"DEFAULT_LOGIN\\\\\\\" name=\\\\\\\"DEFAULT_LOGIN\\\\\\\" method=\\\\\\\"post\\\\\\\" action=\\\\\\\"/goform/user_login\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Please power off and plug in (U)SIM card. Then power on again. Or PIN is permanently blocked, please contact the provider\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"4G Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DH-NVR4108HS-8P-4KS2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DH-NVR4108HS-8P-4KS2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DH-SD59230S\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DH-SD59230S\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Eudemon8000E-X8\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HUAWEI Eudemon8000E-X8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Set-Cookie:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Eudemon8000E-X8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Interspire-Email-Marketer\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Control Panel\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Email Marketer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<img src=\\\\\\\"images/logo.jpg\\\\\\\" alt=\\\\\\\"Interspire Email Marketer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FortiGate-200D\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FortiGate-200D\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JUNIPer-QFX5100-48t-6q\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"qfx5100-48t-6q\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"jweb-title uppercase\\\\\\\"> - qfx5100-48t-6q\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SAMSUNG-SCX-2000FW\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SCX-2000FW\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SCX-2000FW\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Plesk-Plesk-Onyx\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Plesk Onyx 17.8.11\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Plesk Onyx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"name=\\\\\\\"plesk-build\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TVT-NVMS-1000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NVMS-1000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-GS724Tv4\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"gs724tv4Image spacer50Percent topAlign rightHAlign\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"GS724Tv4\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NETGEAR GS724Tv4\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-GS716Tv3\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"gs716tv3Image spacer50Percent topAlign rightHAlign\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"GS716Tv3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NETGEAR GS716Tv3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DrayTek-Vigor2130\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: DrayTek/Vigor2130\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Vigor2130\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"uniview-ISC5000-E\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ISC5000-E\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PIXEL-M151RW3\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"PIXEL M151RW3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"PIXEL M151RW3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Max_Tech-C300N\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MAX-C300N\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MERCUSYS-MW325R\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MW325R\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"uniview-ISC5000-S\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ISC5000-S\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VMware-Horizon-DaaS\",\n  \"logic\": \"a||b||c|| (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: VMware Horizon DaaS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"VMware Horizon DaaS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: VMware Horizon DaaS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Organization: VMware\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"CommonName: DaaS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NuCom-R5000UNv2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"R5000UNv2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GraphQL\",\n  \"logic\": \"(a&& (b||c)) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"function graphQLFetcher\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"fetcher: graphQLFetcher\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"fetcher:graphQLFetcher\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"graphql-playground-react\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"uniview-ISC3500-EC\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ISC3500-EC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"uniview-ISC3500-EL\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ISC3500-EL\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"uniview-ISC2500-EP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ISC2500-EP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"uniview-ISC2500-S\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ISC2500-S\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NOMADIX-XG-8000\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"XG 8000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"XG 8000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"XG 8000: Login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u7f51\\u5fa1\\u661f\\u4e91-\\u4e0a\\u7f51\\u884c\\u4e3a\\u7ba1\\u7406\\u7cfb\\u7edf\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Leadsec ACM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"asdf</div>-->\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"txtmac\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Panpu Software - Construction of Construction Engineering OA\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/dwr/interface/LoginService.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src='dwr/interface/LoginService.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u6cdb\\u666e\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHICOMM-FIR302B\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FIR302B\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MvMmall\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"MvMmall\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"www.mvmmall.cn\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SiteEngine\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Boka SiteEngine\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Generic-VoIP-Gateway\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VoIP Gateway Configuration Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Digest realm=\\\\\\\" VOIP GATEWAY\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"VoIP Gateway Configuration Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Digest realm=\\\\\\\" VOIP GATEWAY\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WeiPHP\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"WeiPHP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/css/weiphp.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"weiphp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"weiphp4.0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"iWebSNS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/jooyea/images/sns_idea1.jpg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/jooyea/images/snslogo.gif\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fortune Mail - System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/jdwm/cgi/login.cgi?login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"jdmail SMTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHPMyWind\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"phpMyWind.com All Rights Reserved\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"PHPMyWind\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"B2BBuilder\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"B2Bbuilder\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"translatebuttonid = \\\\\\\"B2Bbuilder\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Wdlinux\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"wdOS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mercury-Mercury MW300R\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MW300R\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MW300R\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OpenSNS\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by OpenSNS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"OpenSNS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"os-icon-home app-icon \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DBShop\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"dbshop\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Small head\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"http://stat.xiaonaodai.com/stat.php\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Haitian Software - Haitian OA\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HTVOS.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"images/myjs.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"MSHTML 8.00.6001.19298\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"kingdee-EAS\",\n  \"logic\": \"a||b||c||d||e|| (f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"easSessionId\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"easportal\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"eassso/login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"eassso/login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/eassso/common\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"EAS\\u7cfb\\u7edf\\u767b\\u5f55\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"\\u91d1\\u8776\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Lighttpd\",\n  \"logic\": \"(a&&b&&c&&d) || (e&&f&&g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: lighttpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"server: lighttpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"x-powered-by: ThinkPHP\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"TodayMail\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Todaynic.com,Inc.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TodayMail Anti-Spam Police\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"['Company']=\\\\\\\"TodayMail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"&#26102;&#20195;&#20225;&#19994;&#37038\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"shopex\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"ShopEx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"@author litie[aita]shopex.cn\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"http://www.shopex.cn' target='_blank'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-IOS\",\n  \"logic\": \"(a&&b) || (c&&d&&e) ||f|| (g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: cisco-IOS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: cisco-IOS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Cisco Internetwork Operating System\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Cisco IOS Software\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AirLive-Wireless-Device\",\n  \"logic\": \"a||b||c||d||e||f||g||h||i||j||k||l||m||n\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"airlive wl-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"airlive wt-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"airlive N.Power\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"AirLive WMM-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"AirLive AP60\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"realm=\\\\\\\"AirLive Air3G\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"realm=\\\\\\\"AirLive G.DUO\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"realm=\\\\\\\"airlive wl-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"realm=\\\\\\\"airlive wt-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"realm=\\\\\\\"airlive N.Power\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"realm=\\\\\\\"AirLive WMM-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"realm=\\\\\\\"AirLive AP60\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"realm=\\\\\\\"AirLive Air3G\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"realm=\\\\\\\"AirLive G.DUO\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-Email-Security-Virtual-Appliance-C600V\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Email Security Virtual Appliance   C600V\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FUDforum\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by: FUDforum\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"fud_session_\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"fud_session_\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/adm/admloginuser.php\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yonyou-UFIDA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/System/Login/Login.asp?appid=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hegong software - Website content management system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Produced By\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u7f51\\u7ad9\\u7fa4\\u5185\\u5bb9\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Live800- Product\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"live800\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: live800\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: live800\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Emperor-P2P\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/js/diyou.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/dyweb/dythemes\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-3Com-3CRWE554G72\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"http-equiv=\\\\\\\"3Cnumber\\\\\\\" content=\\\\\\\"3CRWE554G72\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-NWA1100-N\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZyXEL NWA1100-N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NWA1100-N\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-CBA250\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CradlePoint CBA250 Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRIDENT7-Wave7-OLT\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Wave7 Optics, Inc. All rights reserved.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Trident7 System Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<TD valign=\\\\\\\"bottom\\\\\\\" colspan=2><FONT size=2 align=\\\\\\\"justify\\\\\\\">&copy; \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Trendnet-Print-Server\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PRINT_SERVER WEB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<frame name=\\\\\\\"Banner\\\\\\\" scrolling=\\\\\\\"no\\\\\\\" noresize target=\\\\\\\"Inhalt\\\\\\\" src=\\\\\\\"head.htm\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"TRENDnet Print Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Traffic-Inspector\",\n  \"logic\": \"((a||b) &&c) || (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Traffic Inspector\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<title>Error</title></head><body><h1>403 - Forbidden</h1><hr\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Traffic Inspector\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Tradingeye\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"dpivision.com Ltd\\\\\\\" />\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"id=\\\\\\\"credits\\\\\\\"><a href=\\\\\\\"http://www.tradingeye.com/\\\\\\\">powered by Tradingeye</a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOTVS-SmartClient\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<param name=\\\\\\\"Environment\\\\\\\" value=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-MBR-1000\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CradlePoint MBR-1000 Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CradlePoint MBR-1000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-MBR-800\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CradlePoint MBR-800 Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CradlePoint MBR-800\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-MBR1200\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CradlePoint MBR1200 Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CradlePoint MBR1200\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-CTR500\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CradlePoint CTR500 Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CTR500 login:\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Net strong-IT integrated management system\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7f51\\u5f3ait\\u7efc\\u5408\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var base_path = '/StormWeb';\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NetStrong\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Koi - Network Information Comprehensive Testing Processing Platform\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u79d1\\u6765\\u7f51\\u7edc\\u4fe1\\u606f\\u7efc\\u5408\\u68c0\\u6d4b\\u5904\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<meta name=\\\\\\\"colasoft\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u79d1\\u6765\\u7f51\\u7edc\\u4fe1\\u606f\\u7efc\\u5408\\u68c0\\u6d4b\\u5904\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WebEngine-Site\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WebEngine Site\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/webengine/images/common.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"location.href = \\\\\\\"/webengine/web/\\\\\\\";\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TutorTrac\",\n  \"logic\": \"a||b||c||d||e||f||g||h\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FONT><A href=\\\\\\\"http://www.go-redrock.com\\\\\\\"><FONT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TutorTrac Learning Center Tracking Software\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Set-Cookie: ProductCode=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Set-Cookie: InstallCode=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"location TracWeb40\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"location TutorTrac\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Set-Cookie: ProductCode=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Set-Cookie: InstallCode=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Turbo-Seek\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var myspecs = \\\\\\\"'menubar=0,status=1,resizable=1,location=0,titlebar=1,toolbar=1,scrollbars=1,width=\\\\\\\" + mywidth + \\\\\\\",height=\\\\\\\" + myheight +\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tumblr\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"x-tumblr-user\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<meta name=\\\\\\\"tumblr-theme\\\\\\\" content=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<!-- BEGIN TUMBLR CODE --><iframe src=\\\\\\\"http://assets.tumblr.com/iframe.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"x-tumblr-user\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WhatWeb\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"file-created Wed, 14 Jul 1999 04:00:00 GMT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"XCD Web Admin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: XCD Web Admin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<BODY><CENTER><TABLE border=0><TR align=CENTER><TD><FONT color=RED size=5>TROY Serial Server</FONT></TD></TR>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Network Card Access Password&#058; </B><INPUT type=PASSWORD size=16 maxlength=16 name=access_psw>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-RV340W\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco RV340W\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-RV345P\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco RV345P\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-RV340\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco RV340\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CISCO RV340\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"RV340\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DIR-100\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DIR-100\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" realm=\\\\\\\"DIR-100\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"DIR-100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BeeS_CMS\",\n  \"logic\": \"(a&&b) ||c|| (d&&e) ||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"powerd by\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"BEESCMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"template/default/images/slides.min.jquery.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/default/images/Xslider.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/default/images/search_btn.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"powerd by BEESCMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"mx_form/mx_form.php\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHP Cloud System - CMS\",\n  \"logic\": \"a||b||c||d|| (e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div class=\\\\\\\"index_link_list_name\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"yun_topLogin a.yun_More\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"yun_index.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Powered by PHPYun\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"$(this).removeClass('dn'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"phpyun\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"China Enterprise Power - Portal CMS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e2d\\u4f01\\u52a8\\u529b\\u63d0\\u4f9b\\u6280\\u672f\\u652f\\u6301\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"INSPUR- Government Affairs\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OnlineQuery/QueryList.aspx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u6d6a\\u6f6e\\u653f\\u52a1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"LangChao.ECGAP.OutPortal\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Silex-SX-2000U2\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SX-2000U2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SX-2000U2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HPE-ADSL-Wireless-Firewall-Router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<META http-equiv=\\\\\\\"3Cnumber\\\\\\\" content=\\\\\\\"3CRWDR200A-75\\\\\\\">\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<META http-equiv=\\\\\\\"sysObjectID\\\\\\\" content=\\\\\\\"1.3.6.1.4.1.43.1.19.14\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Single point technology-CRM system\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"url=general/ERP/LOGIN/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"\\u5355\\u70b9CRM\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u5ba2\\u6237\\u5173\\u7cfb\\u7ba1\\u7406-CRM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RichMail\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Richmail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Richmail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Richmail \\u4f01\\u4e1a\\u90ae\\u7bb1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"app_download\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"Richmail\\u5b98\\u7f51\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"richmail system\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ARRIS-WTM652\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"ARRIS 2307\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"strhtml='<title>'+i1+'</title>';\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"WTM652\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Phil Software - Teaching Management ERP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u83f2\\u5c14\\u6559\\u5b66\\u7ba1\\u7406ERP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MM_preloadImages('images/bt/bt_login_b.gif\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TR-701NW\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TR-701NW\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MAS mobile proxy server\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"mas\\u79fb\\u52a8\\u4ee3\\u7406\\u670d\\u52a1\\u5668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"action='/mas_security_check'>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"if(!isNotNull(document.forms[0].filepath.value, \\\\\\\"\\u8bc1\\u4e66\\u6587\\u4ef6\\\\\\\"))\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u79fb\\u52a8\\u4ee3\\u7406\\u670d\\u52a1\\u5668\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IESLAB-SCADA monitoring platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"copyrightPt12\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u9752\\u5c9b\\u79ef\\u6210\\u7535\\u5b50\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"XMALL-background management system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"XMall\\u540e\\u53f0\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"xmadmin.exirck.cn\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TEW-651BR\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<b>Login to the TEW-651BR</b>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TEW-651BR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WN-AC1167R\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WN-AC1167R\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-N4100\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZyXEL N4100\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZyXEL ZyAIR N4100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DZS-6519-W1-xDSL-Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"6519-W1 xDSL Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CODESYS-3S-Smart-Software-Company Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"3S-Smart Software Solutions\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-NBG2105\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZyXEL NBG2105\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DZS-6511-A1-xDSL-Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"6511-A1 xDSL Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Founder-APABI Digital Resource Platform\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Default/apabi.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<link href=\\\\\\\"HTTP://apabi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u6570\\u5b57\\u8d44\\u6e90\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-ProSafe-VPN-Firewall-FVS336GV3\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FVS336GV3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Gigabit Dual WAN SSL VPN Firewall FVS336Gv3</div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fortigate-300A\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Fortigate-300A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TCL-901\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Android TV on Tcl 901\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yeastar-S100\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Yeastar S100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FortiGate-500D\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FortiGate500D\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"tversity-\\u516c\\u53f8\\u4ea7\\u54c1\",\n  \"logic\": \"(a&&b&&c&&d) || (e&&f&&g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TVersity Media Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"TVersity Media Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Kozi-ARAS\",\n  \"logic\": \"a|| ((b||c) &&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u79d1\\u6765\\u7f51\\u7edc\\u56de\\u6eaf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u79d1\\u6765\\u8f6f\\u4ef6 \\u7248\\u6743\\u6240\\u6709\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"i18ninit.min.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"nfr=\\\\\\\"true\\\\\\\"\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"EDUSOHO - Open source network classroom\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered By EduSoho\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://www.edusoho.com/\\\\\\\" target=\\\\\\\"_blank\\\\\\\">EduSoho\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Powered By EduSoho\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"var app\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KONKA-Android-TV-2992\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Konka Android TV 2992\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KONKA-TV-2969\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Konka Android TV 2969\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KONKA-Android-TV-553\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Konka Android TV 553\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KONKA-Android-TV-551\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Konka Android TV 551\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Netposa-IPSAN916\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IPSAN916\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HikVision-Video Retrieval System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u667a\\u80fd\\u89c6\\u9891\\u68c0\\u7d22\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u6d77\\u5eb7\\u5a01\\u89c6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HEJIA-machine room monitoring\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u548c\\u5609\\u79d1\\u6280-\\u673a\\u623f\\u52a8\\u529b\\u73af\\u5883\\u76d1\\u63a7\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"www.hejia-tech.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AMPLESKY-Company Products\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AMPLESKY TC5000D\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var fullmessage = \\\\\\\"\\u5929\\u5730\\u9633\\u5149\\u901a\\u4fe1\\u79d1\\u6280\\uff08\\u5317\\u4eac\\uff09\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u6d41\\u5a92\\u4f53\\u5355\\u5143\\u7ba1\\u7406\\u5e73\\u53f0---\\u5929\\u5730\\u9633\\u5149\\u901a\\u4fe1\\u79d1\\u6280\\uff08\\u5317\\u4eac\\uff09\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SKYWORTH-Android-TV\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Skyworth Android TV\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Netposa-IPSAN1016\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IPSAN1016\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DASAN-\\u516c\\u53f8\\u4ea7\\u54c1\",\n  \"logic\": \"((a&&b&&c&&d&&e)) ||f||g|| (h&&i)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: DasanNetwork Solution\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: boa\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Docker\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"o=Dasan Networks Solution\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Server: Dasan Networks\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Server: DasanNetwork Solution\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"boa\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"sensetime -SenseFace\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"copyright\\\\\\\" href=\\\\\\\"http://www.sensetime.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SENSEFACE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SuperMap-iServer\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6b22\\u8fce\\u4f7f\\u7528 SuperMap iServer 6R\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"window.location.href=\\\\\\\"iserver\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"id=\\\\\\\"copyright\\\\\\\"><a href=\\\\\\\"http://www.supermap.com.cn\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"SuperMap iServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RapidLogic\",\n  \"logic\": \"(a&&b&&c&&d) || (e&&f&&g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: RapidLogic\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"server: RapidLogic\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"\\u730e\\u9e70\\u5b89\\u5168-\\u91d1\\u5c71V8+\\u7ec8\\u7aef\\u5b89\\u5168\\u7cfb\\u7edf\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5728\\u7ebf\\u5b89\\u88c5-V8+\\u7ec8\\u7aef\\u5b89\\u5168\\u7cfb\\u7edfWeb\\u63a7\\u5236\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"anounceText\\\\\\\">\\u4e3a\\u4e86\\u66f4\\u597d\\u7684\\u4fdd\\u969c\\u4f01\\u4e1a\\u5185\\u7f51\\u7684\\u5b89\\u5168\\uff0c\\u516c\\u53f8\\u51b3\\u5b9a\\u4ece\\u5373\\u65e5\\u8d77\\u5168\\u9762\\u90e8\\u7f72\\u91d1\\u5c71\\u4f01\\u4e1a\\u5b89\\u5168\\u7ec8\\u7aef\\u9632\\u62a4\\u4f18\\u5316\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"mobiletools/android/net.ejinshan.avclient.apk\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HikVision-Video Cloud Structured Server\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u89c6\\u9891\\u4e91\\u7ed3\\u6784\\u5316\\u670d\\u52a1\\u5668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/common/hikui/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Phpems-test system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"phpems\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"PHPEMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-FVS318\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FVS318\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Netgear\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"top.html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Storage-Management\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Stor GUI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Firmware Version: Stor_2.0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Weaving Cloud-IPMS Management System\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OPMS\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"903561702@qq.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"opms\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"OPMS\\u7ba1\\u7406\\u7cfb\\u7edf,\\u7ec7\\u8776-\\u4f01\\u4e1a\\u5e94\\u7528\\u7cfb\\u7edf\\u4e3a\\u60a8\\u7684\\u4f01\\u4e1a\\u4fdd\\u9a7e\\u62a4\\u822a\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ultraseek\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Ultraseek\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Ultraseek\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-SR8808-X\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SR8808-X\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-SR8808H-X\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C SR8808H-X\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-Series-Router-MSR20-11\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C Series Router MSR20-11\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-MSR830\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MSR830\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SipProxyModuleCtx\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SipProxyModuleCtx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"This is from SipProxyModuleCtx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"This is from SipProxyModuleCtx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Poly Water Tan - Saas Collaborative Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u805a\\u6c34\\u6f6dSaaS\\u534f\\u540c\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"bsjgroup -CMS cluster management system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4f70\\u4ed5\\u4f73CMS\\u96c6\\u7fa4\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/resource/images/CMS.ico\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SoEasy-website cluster system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EGSS_User\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SoEasy\\u7f51\\u7ad9\\u96c6\\u7fa4\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cinda-OA\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"http://www.xdoa.cn</a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5317\\u4eac\\u521b\\u4fe1\\u8fbe\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Searzer Software - Searzer OA\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by \\u534f\\u4f17OA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"admin@cnoa.cn\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Powered by CNOA.CN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SERCOMM-DRG600\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DRG600\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"drg600.wifi\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DVR-Remote-Management-System\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DVR Remote Management System\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<title>DVR Remote Management System</title>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"/js/web_homecache.js\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ICESOFT-product\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"l=Haidian, o=icesoft\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Netcore-NW717\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NetcoreNW717\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NetcoreNW717\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Officescan\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Officescan client\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: OfficeScan Client\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DH-IVS-IF3004-V2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DH-IVS-IF3004-V2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DH-NVR4416-4KS2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DH-NVR4416-4KS2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DHI-HCVR5116HE-S2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DHI-HCVR5116HE-S2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DH-XVR4108HS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DH-XVR4108HS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DHI-NVR4108-4KS2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DHI-NVR4108-4KS2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DHI-HCVR4104C-S3-B\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DHI-HCVR4104C-S3-B\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HikVision-TV wall\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7535\\u89c6\\u5899\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"tvwall_newTvwall\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"ZN-1000\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"l=Nanjing, o=zdc\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZN-1000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \" Wireless Smart Access Point\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DHI-NVR4416-16P-4KS2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DHI-NVR4416-16P-4KS2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DHI-NVR5416-16P-4KS2E\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DHI-NVR5416-16P-4KS2E\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DHI-NVR5216-16P-4KS2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DHI-NVR5216-16P-4KS2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Heavenly Letter -Web Application Safety Protection System\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WEB\\u5e94\\u7528\\u5b89\\u5168\\u9632\\u62a4\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"logintop\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"login_html_files/loginstyle.css\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JOIN_CHEER - a long-purpose financial form\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e45\\u5176\\u62a5\\u8868\\u5927\\u5385\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5317\\u4eac\\u4e45\\u5176\\u8f6f\\u4ef6\\u80a1\\u4efd\\u6709\\u9650\\u516c\\u53f8 \\u7248\\u6743\\u6240\\u6709\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/netrep/intf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/netrep/message2/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<meta http-equiv=\\\\\\\"refresh\\\\\\\" content=\\\\\\\"0\\\\\\\";url=\\\\\\\"../netrep\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DHI-XVR5216A\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DHI-XVR5216A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DHI-NVR5216-16P-4KS2E\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DHI-NVR5216-16P-4KS2E\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DHI-XVR4104C-B\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DHI-XVR4104C-B\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Email - Intelligent anti-spam system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"YMail's \\u667a\\u80fd\\u53cd\\u5783\\u573e\\u90ae\\u4ef6\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/ymail/default/js/menu.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-multimedia equipment\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"H3C MultiMediaware software\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-USG20-VPN\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"USG20-VPN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"USG20-VPN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR600C-150M-C-AU\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cradlepoint IBR600C-150M-C-AU\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IBR600C-150M-C-AU\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZXR10-M6000-8S-Plus\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZXR10 M6000-8S Plus\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Shanghainese Health-CMS Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5c1a\\u533b\\u5065\\u5eb7CMS\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tiandune - Intrusion Defense System TOPIDP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5929\\u878d\\u4fe1\\u5165\\u4fb5\\u9632\\u5fa1\\u7cfb\\u7edfTopIDP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tianrencin -Web application firewall\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5929\\u878d\\u4fe1WEB\\u5e94\\u7528\\u9632\\u706b\\u5899\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Web User Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"EvPNG.fix('div, ul, img, li, input'); //EvPNG.fix('PNGid1, PNGid2')\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Guangzhou Negotiation - Collaborative Management Platform\",\n  \"logic\": \"a|| (b&&c) || (d&&e) ||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5e7f\\u5dde\\u534f\\u5546\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\\u534f\\u540c\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5e7f\\u5dde\\u534f\\u5546\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/web/SubmitLogon2.do\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"css/hitalklogin.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/activex/SINOCCSHELL.CAB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"/web/SubmitLogon2.do \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HISILICON-Hi3798MV100\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Hi3798MV100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Walle-Walling Platform\",\n  \"logic\": \"a|| ((b&&c) &&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Walle \\u74e6\\u529b\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/dist/js/jquery.mobile.custom.min.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"jQuery('.widget-box.visible').removeClass('visible')\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"walle\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZCMS\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"_ZCMS_ShowNewMessage\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"zcms_skin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ZCMS\\u6cfd\\u5143\\u5185\\u5bb9\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"app=ZCMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ICewarp-server\",\n  \"logic\": \"(a&&b) || (c&&d) ||e||f|| (g&&h) ||i||j||k||l\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: IceWarp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Generator: Drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: IceWarp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"X-Generator: Drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://www.icewarp.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"ESMTP Icewarp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"pop3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \" Merak \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"IceWarp MailServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Icewarp Mail Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"IceWarp Merak Mail Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"SMTP IceWarp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Panabit-\\u667a\\u80fd\\u7f51\\u5173\",\n  \"logic\": \"a|| (b&&c) || (d&&e) || (f&&g&&h) || (i&&j) || (k&&l&&m&&n)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"panabit\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"panabit\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"PANAOS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"parent.location.href = \\\\\\\"/login/login.htm\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"src=\\\\\\\"/img/jq.js\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"httpd/1.2 2012/08/10\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Panabit\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Cache-Control: max-age=1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Organizational Unit: Panabit\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Content-Length: 1807\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"parent.location.href = \\\\\\\"/login/login.htm\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"pacheckcode\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"entersub\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"Organization: Panabit\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Everything\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Everything.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"everything.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Everything\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Locus-SolarNOC\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SolarNOC - Login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Docker-Daemon\",\n  \"logic\": \"(a||b) &&c&&d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"2375\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"2376\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Content-Length: 19\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"text/plain\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Siemens-IP-Cameras\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SIEMENS IP Camera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SIEMENS IP-Camera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"Compact Siemens IP camera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"Compact Siemens WiFi Camera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"Compact Siemens IP camera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"realm=\\\\\\\"Compact Siemens WiFi Camera\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VideoIQ-Camera\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VideoIQ Camera Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Avigilon\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"Avigilon\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Honeywell-IP-Camera\",\n  \"logic\": \"((a||b||c) &&d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Honeywell IP-Camera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Honeywell IP camera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Checking HNVR Client Control Version......\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"o=HONEYWELL, ou=security group\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Honeywell-NetAXS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Honeywell NetAXS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Symantec-Messaging-Gateway\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Symantec Messaging Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Symantec Messaging Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-UCM\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"ccmadmin\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a href=\\\\\\\"ccmadmin/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Cisco Unified\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Xfinity companies products\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Xfinity\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/reset-meyer-1.0.min.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sony-camera\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Sony Network Camera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"inquiry.cgi?inqjs=system\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"name=\\\\\\\"JSVFrame\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"setwindowvar = window.open(\\\\\\\"/adm/file.cgi?next_file=setting.htm\\\\\\\", \\\\\\\"adminWin\\\\\\\", setWinoptions);\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OpenCMS\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"OpenCms\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by OpenCms\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"AppCMS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powerd by AppCMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Comcast-Business\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cmn/css/common-min.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cathexis-WNVR1000-PC\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WNVR1000-PC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"WNVR-1000-PC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Staff information platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"input id=\\\\\\\"ck_yhmmm\\\\\\\" type=\\\\\\\"checkbox\\\\\\\" name=\\\\\\\"ck_yhmmm\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D-LinkDSL-2875AL\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DSL-2875AL\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Resource management and evaluation system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/Default/MVC/Areas/Trap170/Content/images/favicon.ico\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sagemcom-TR-069\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Sagemcom TR-069\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Sagemcom TR-069\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WeCenter\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"aw_template.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"WeCenter\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Powered By <a href=\\\\\\\"http://www.wecenter.com/?copyright\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sophos-Email-Appliance\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Sophos Email Appliance\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Sophos Email Appliance\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Sophos Email Appliance\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Siemens-CP243-1\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CP243-1 IT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CP243-1 IT\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WIND-embedded server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: WindRiver-WebServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: WindRiver-WebServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Schneider-Quantum-140NOE77101\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"indexLanguage\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"html/config.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FrontPage-Personal-Web-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: FPWS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: FPWS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fujitsu-InfoProvider-Pro\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Fujitsu-InfoProvider-Pro\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Fujitsu-InfoProvider-Pro\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Data Center Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"jsp/dbjd/dbjk_list.jsp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Information operation and maintenance support system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"placeholder=\\\\\\\"AD\\u57df\\u8d26\\u53f7 / \\u7cfb\\u7edf\\u8d26\\u53f7\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huizhi Technology - Smart 2000 Design Institute Integrated Information Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"name=\\\\\\\"formDoc\\\\\\\" action=\\\\\\\"/hz/sys/login/logined.jsp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Weird Technology - Outline Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/VHPlot/WebResource.axd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SINOPEC-Purchasing Integrated Management Information System IPMS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/login/lpec/qrcode.html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Communist work system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"method=\\\\\\\"post\\\\\\\" action=\\\\\\\"/Home/login/login1\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Equipment operation dynamic management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"ImageButton1\\\\\\\" src=\\\\\\\"images/yk.gif\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-SQL-Server\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"mssql\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MSSQL Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ms-sql\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-HG630\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Huawei HG630\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HG630 V2 Home Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-B683\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Huawei B683\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Metasploit\",\n  \"logic\": \"a||b||c|| (d&& (e||f)) || (g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Metasploit is initializing...\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"https://dev.metasploit.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"https://dev.metasploit.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"r7bottom-strip\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<li><b>Metasploit Community Edition users\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"<meta name=\\\\\\\"application-name\\\\\\\" content=\\\\\\\"Metasploit\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"_ui_session\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"metasploit\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Akamai-CDN\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: AkamaiGHost\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: AkamaiGHost\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-Akamai-Transformed\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Akamai-Ip: \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"X-Akamai-Transformed\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Akamai-Ip: \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Schneider-PowerLogic-PM800\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerLogic\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PM800\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"PowerLogic\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"PM800\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-switch\",\n  \"logic\": \"((a||b||c||d|| (e&& (f||g))) &&h) ||i\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/cs8941ddbf/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"titleciscouser\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"id=\\\\\\\"lblDevName\\\\\\\" class=\\\\\\\"titleciscolog\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"Cisco CSS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Cisco Systems\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"frmwrkResource.htm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"<frame src=\\\\\\\"dashboard.shtml\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"realm=\\\\\\\"Cisco CSS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dongfang - Application Server Tongweb\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TongWeb Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: TongWeb Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mbedthis-Appweb\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Mbedthis-Appweb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Mbedthis-Appweb\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Nessus\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: NessusWWW\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: NessusWWW\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VMware-Authentication Service\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"vmware_authentication_daemon\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-WNDR3400v3\",\n  \"logic\": \"a|| (b&&c) ||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETGEAR WNDR3400v3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Netgear WNDR3400V3&nbsp;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"NETGEAR WNDR3400v3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"NETGEAR Router WNDR3400v3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MySQL\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"mysql\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-ASG2100\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HUAWEI ASG2100\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HUAWEI ASG2050\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ASG2100\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"HUAWEI ASG2100\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"HUAWEI ASG2050\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Software - Investigation Voting System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"images/bicesoft.css\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u4f70\\u601d\\u8d85\\u5f3a\\u81ea\\u5b9a\\u4e49\\u95ee\\u5377\\u8c03\\u67e5\\u7cfb\\u7edf(BiceSoft.Com)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Citrix-Receiver\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"clients/HTML5Client/src/ReceiverThirdPartyNotices.html\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"logonbelt-topshadow\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"upgradeavailable-already-installed-separator bar-separator\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Computer room centralized monitoring system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u673a\\u623f\\u96c6\\u4e2d\\u76d1\\u63a7\\u7cfb\\u7edf\\u2014WEB\\u6d4f\\u89c8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Engineering Estimation Indicators Query System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"target=\\\\\\\"_blank\\\\\\\">\\u76d1\\u63a7\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"cgcx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Extra-CRM report application\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/css/vendors~index.acfeb.css\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dropbear\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"dropbear_2013.60\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"dropbear\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"dropbear_0.46\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Network Operation Center System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"function SetPwdAndChk()\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"eaf/userSession_check.action\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Investment management system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"zjtz.css\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u6295\\u8d44\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Factory abnormal real-time supervision system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/js/svgchart/svgview/svgview.router.js\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"National New Health - Medical Insurance Audit System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.open(url, \\\\\\\"\\u4e2d\\u516c\\u7f51\\u533b\\u7597\\u4fe1\\u606f\\u7ba1\\u7406\\u7cfb\\u7edf\\\\\\\", option\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u7528\\u53cb-U8\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"getFirstU8Accid\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cloud lock - product\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"yunsuo_session_verify\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"yunsuo_session_verify\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"http://bbs.yunsuo.com.cn\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<img class=\\\\\\\"yunsuologo\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Intelligent operation and maintenance management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"vimsPage/images/favicon.ico\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"pgAdmin\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"pgadmin \\u5ba2\\u6237\\u7aef\\u5b89\\u88c5\\u5305\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Danchuang Technology-BPM Management Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"url=iPortal/Login.aspx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SES-imagotag\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/xsl/accesspoint.xsl\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"yongyou-ECLIENT\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"http-equiv=refresh content=0;url=index.jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Content-Length: 102\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dell-Navisphere-Express\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"parent.main.location = urlNoNST + \\\\\\\"?nst=\\\\\\\" + top.menu.securityToken\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Supervise production information platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<!--\\u6ce8\\u518c\\u7801 charType:-->\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"certCode_bj\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CETC-reader configuration system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"if (suser == \\\\\\\"admin\\\\\\\" \\uf8f5 spass == \\\\\\\"cetc52\\\\\\\") {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"rfid/content/superuser\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KPPW\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"kekezu\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var siteurl\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"skin_path = 'tpl/default',\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<img id='imgflag' src=\\\\\\\"tpl/default/img/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APD-video surveillance\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var listenport = 6002;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"lg_body_iptPsw\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Splicing controller\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u62fc\\u63a5\\u63a7\\u5236\\u5668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"?cmd=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Xbrother-machine room monitoring\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6df1\\u5733\\u5e02\\u5171\\u6d4e\\u79d1\\u6280\\u673a\\u623f\\u76d1\\u63a7\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"id=WebClient codebase=WebClient.cab\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"classid=clsid:6892EBC7-0186-4A73-A5CE-A144865F3DC5>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Netposa-mobile video surveillance\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u79fb\\u52a8\\u89c6\\u9891\\u76d1\\u63a7 \\u914d\\u7f6e\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"by \\u91cd\\u5e86\\u7f51\\u529b\\u89c6\\u754c\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Head data - video security access user authentication system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u89c6\\u9891\\u5b89\\u5168\\u63a5\\u5165\\u7528\\u6237\\u8ba4\\u8bc1\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TxtPasswordCssClass\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dahua-big screen control software\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"J_setcon J_sub_new J_padt30 J_padb30\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<!-- \\u8bb0\\u5f55\\u5f53\\u524d\\u7535\\u89c6\\u5899\\u7684\\u5e8f\\u53f7 end-->\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Netposa--IPSAN\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NetPosa IPSANManager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Moxa-Network-Enabler\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Network Enabler Web Console\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"main.htm\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"With-Sanmanager\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TOYOU SANManager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Uniview-Unistor\",\n  \"logic\": \"(((a&&b) ||c) &&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Uniview\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src='app/h3cstorage.gif'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Uniview Unistor - Webstart\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Visec-ViGate\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src='/themes/visec/images/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"name=\\\\\\\"passwordfld\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HikVision-Image Restore Configuration Client\",\n  \"logic\": \"(a) &&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u56fe\\u50cf\\u590d\\u539f\\u670d\\u52a1\\u914d\\u7f6e\\u5ba2\\u6237\\u7aef\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u676d\\u5dde\\u6d77\\u5eb7\\u5a01\\u89c6\\u6570\\u5b57\\u6280\\u672f\\u80a1\\u4efd\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HikVision - Human Face Analysis System\",\n  \"logic\": \"(a||b||c) &&d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4eba\\u8138\\u5206\\u6790\\u5b50\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u4eba\\u8138\\u5b9e\\u65f6\\u62a5\\u8b66\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u4eba\\u8138\\u68c0\\u7d22\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u676d\\u5dde\\u6d77\\u5eb7\\u5a01\\u89c6\\u6570\\u5b57\\u6280\\u672f\\u80a1\\u4efd\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Appal - Video Monitoring\",\n  \"logic\": \"a|| (b&& (c||d))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: AipStar RTSP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u7528\\u6237\\u767b\\u5f55\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"window.location.href = \\\\\\\"login.html\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"window.location.href = '/login.html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Signalway-PCC200\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<SPAN class=\\\\\\\"BannerTextCompany\\\\\\\">PCC200</SPAN>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PCC200B\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_LINK- Internet behavior router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<body oncontextmenu='return false;' onload=\\\\\\\"init();\\\\\\\" >\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"top.window.open(\\\\\\\"login.html\\\\\\\",\\\\\\\"_self\\\\\\\");\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Winsheng Group - Interface Management Tool\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"The wasion Software Foundation\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"alt=\\\\\\\"\\u63a5\\u53e3\\u5e94\\u7528\\u7ba1\\u7406\\u5de5\\u5177\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Exploration and Development Integrated Project Management Platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/xmgl/client/XMPTClient.apk\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"AD\\u57df\\u7528\\u6237\\u540d\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Video monitoring system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"AMF/js/PlugIn/AllTag/AmysqlAllTag.js\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"AMF/AmysqlTag.aspx\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Gallery database server\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"HistoryDataQuery/welcome.htm\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u6b64\\u7f51\\u9875\\u4f7f\\u7528\\u4e86\\u6846\\u67b6\\uff0c\\u4f46\\u60a8\\u7684\\u6d4f\\u89c8\\u5668\\u4e0d\\u652f\\u6301\\u6846\\u67b6\\u3002\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Quality inspection and management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src='/static/js/index_cloudflare.js'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Engineering Supervision Center\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"prepend('<span class=\\\\\\\"btr\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/Scripts/page/openBrWindow.js\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sundray - Enterprise Firewall\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"help = decodeURIComponent(version_info_ch)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Digital-Surveillance-System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HydraulicsPressureVersusPumpRateCalculationServiceClient\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-IMM\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<meta http-equiv=\\\\\\\"refresh\\\\\\\" content=\\\\\\\"0;url=/designs/imm/noscript/noscript_en.php\\\\\\\" />\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ibm.stg.InlineMessage.messageTypes.MSG_CRITICAL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<meta http-equiv=\\\\\\\"refresh\\\\\\\" content=\\\\\\\"0;url=/designs/imm/noscript/noscript_en.php\\\\\\\" />\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/ibmdojo/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ji Dagongyuan - Identification Gateway\",\n  \"logic\": \"((a||b||c) &&d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5409\\u5927\\u6b63\\u5143\\u8eab\\u4efd\\u8ba4\\u8bc1\\u7f51\\u5173\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/jit_pnx_portal/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: JIT_PNXCore1 web service\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: JIT_PNXCore1 web service\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Arago-Project\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Arago Project http://arago-project.org\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MOXA-NPort-5110\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \" : NPort 5110\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NP5110\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UCAP-cloud search\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u667a\\u80fd\\u641c\\u7d22\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"http://so.kaipuyun.cn?sitecode=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"method=\\\\\\\"post\\\\\\\" action=\\\\\\\"s\\\\\\\" onsubmit=\\\\\\\"return checkSearchForm();\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Veritas-NetBackup\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Veritas NetBackup OpsCenter\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/opscenter/features/common/images/favicon.ico\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Veritas NetBackup Web Management Console\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Data Acquisition and Patrol Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"onload=\\\\\\\"javascript:location.replace('/SinoProbe')\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"information platform\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"//angular.bootstrap(document.body, main);\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"htcss/login.css\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Angular\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Be Angular | Bootstrap Admin Web App with AngularJS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Casic card system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5145\\u503c\\u5361\\u53ca\\u6613\\u6377\\u5361\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u79ef\\u5206\\u89c4\\u5219\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Uniview-ISC\",\n  \"logic\": \"(a|| (b&&c) || (d&&e)) &&f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"clsid:9677F3F4-9C86-405c-897A-2AEAAB2D085C' id='recordManager_activeX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"clsid:EBB0D154-7F02-44c7-A828-BED07C28469B\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"recordManager_activeX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"playactivexobj = document.getElementById('recordManager_activeX');\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"location.href = location.href.substring(0,location.href.indexOf(\\\\\\\"?\\\\\\\"))+\\\\\\\"?langinfo=\\\\\\\"+\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Natural gas meter automatic acquisition management system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"extjs/adapter/ext/ext-base.js\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"http://www.e-risun.com/\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Analytical data system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5206\\u6790\\u5316\\u9a8c\\u6570\\u636e\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"value=\\\\\\\"\\u67e5\\u8be2\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Employee dinner system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"document.body.style.background='url(/user/bg.jpg) no-repeat center center'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"fm.newpass.value=hex_md5(fm.newpass.value);\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Wind, clouds - FIR-IM\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"android/Com.APSP.XnMdm-Signed.apk\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5ba2\\u6237\\u7aef\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Data resource control platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"index-image?paramname=SYS_INDEX_IMAGE\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"login-content claro\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IRI-EPBP Management Platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"rmsie = /(msie\\\\\\\\s|trident.*rv:)([\\\\\\\\w.]+)/i\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"match = rMsie.exec(window.navigator.userAgent\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Jurassic Software - Application Management System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var _usermenusurl = '/AppCenter/Functions/GetUserMenu'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Jurassic\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Jianheng Xin'an-Log Audit System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"JH-LA3600\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5efa\\u6052\\u4fe1\\u5b89\\u65e5\\u5fd7\\u5ba1\\u8ba1\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Esheno - Network Probe\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u63a2\\u9488\\u7ba1\\u7406\\u4e0e\\u6d4b\\u8bd5\\u7cfb\\u7edf-\\u767b\\u5f55\\u754c\\u9762\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"netentsec Technology - NS-ASG Safety Gateway\",\n  \"logic\": \"a&& (b||c||d) || (e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NS-ASG\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"400-678-3600\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"client/thickbox.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/commonplugin/softkeyboard.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"id=\\\\\\\"SlotSerialNumber\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"\\u5e94\\u7528\\u5b89\\u5168\\u7f51\\u5173\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Anta-ASG\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"setCookie(\\\\\\\"ASGLanguage\\\\\\\",document.form1.pLanguage.value)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u767b\\u5f55\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Guangzhou shared software - company products\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/AAA/IPWeb/Scripts/Zngc-login-style.js\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/AAA/IPWeb/Scripts/ShowOperationResult.js\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NSFOCUS - Next Generation Firewall\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NSFOCUS NF\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/login_logo_nf_zh_CN.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Struts2\",\n  \"logic\": \"a||b||c||d||(e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Struts Problem Report\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"There is no Action mapped for namespace\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"No result defined for action and result input\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Struts2 Showcase\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<input type=\\\\\\\"hidden\\\\\\\" name=\\\\\\\"struts.token.name\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"action\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Net Fun Mall - Ultimate\",\n  \"logic\": \"a||b|| (c&&d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Set-Cookie: dmwh%5Fuser\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Set-Cookie: dmwh%5Fuser\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"class.asp?lx=tejia\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"images/cnhww_css.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Wq_StranJF.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FANWE-crowdfunding\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"app/Tpl/fanwe_1/images/lazy_loading.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"index.php?ctl=article_cate\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DSL-2540U\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DSL-2540U\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HSE Emergency Command APP\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"//================>\\u529f\\u80fd\\u51fd\\u6570---start\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"alert(\\\\\\\"\\u4e91\\u53f0\\u63a7\\u5236\\u51fa\\u9519\\uff0c\\u9519\\u8bef\\u7801\\uff1a\\\\\\\" + flag)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Quality management information system\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/shcpzl/index/commons/js/function.js\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"form1.action =\\\\\\\"/shcpzl/index/CheckUser.jsp\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"form1.action = \\\\\\\"/shcpzl/index/CheckUser.jsp\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Joint venture management platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"./owcwork/ZHFXJB.rar\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"document.getElementById(\\\\\\\"1\\\\\\\").click()\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Archive system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \".fontsize7{  font-size: 9pt; color:#145194}\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/images/chz.jpg\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ultrastats\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ultrastats\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<img src=\\\\\\\"./images/main/ultrastatslogo.png\\\\\\\" width=\\\\\\\"300\\\\\\\" height=\\\\\\\"200\\\\\\\" name=\\\\\\\"ultrastats_logo\\\\\\\" align=\\\\\\\"center\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"YHIT- Product Quality Inquiry System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"\\u4eea\\u5316\\u4ea7\\u54c1\\u8d28\\u91cf\\u67e5\\u8be2\\u7cfb\\u7edf\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Electronic lead sealing system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u667a\\u80fd\\u9501\\u63a7\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"key\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SangFor - Internet Behavior Management System\",\n  \"logic\": \"(a&&b) || (c&&d) || (e&&f) || (g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"must-revalidate\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" = function(str, key)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"document.cookie = 'sangfor_session_hash=0'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u4e0a\\u7f51\\u4f18\\u5316\\u7ba1\\u7406\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"SANGFOR\\u4e0a\\u7f51\\u884c\\u4e3a\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"href=\\\\\\\"http://sec.sangfor.com.cn/events/89.html\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Internet Authentication System\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"\\u4e0a\\u7f51\\u8ba4\\u8bc1\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZKTECO-Puba Laida Security Management System Platform\",\n  \"logic\": \"(a&&b) || (c&&d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u767e\\u50b2\\u745e\\u8fbe\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src='/login/images/zksecurity.png'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"id=\\\\\\\"password_hidden\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"class=\\\\\\\"login-finger-btn disabled\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"SERVER_CURRENT_YEAR + \\\\\\\" ZKTECO CO., LTD. All rights reserved\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Esheno - Network Service Quality Detection System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u57c3\\u68ee\\u8bfa\\u7f51\\u7edc\\u670d\\u52a1\\u8d28\\u91cf\\u68c0\\u6d4b\\u7cfb\\u7edf \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Plus query system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"login/xtree.css\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"login/user_botton.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Gas station management system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"directlink = \\\\\\\"GSMIS.application\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Moxa\\u5361\\u9a71\\u52a8 \\u4e0b\\u8f7d\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Marketing management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"Oil/SimplePrintExcel.aspx\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sanrui Technology - Collaborative Analysis System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5708\\u95ed\\u4e95\\u4f4d\\u8bba\\u8bc1\\u534f\\u540c\\u5206\\u6790\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Technical Supervision Center\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"background=\\\\\\\"img/ykyk/zuobian.gif\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Corpled information platform system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/jhclj/Images/logo_top.png\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Employee salary query system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.alert(\\\\\\\"\\u8bf7\\u8f93\\u5165\\u5185\\u90e8\\u7f16\\u53f7\\u6216\\u8005\\u4e8c\\u4ee3\\u8eab\\u4efd\\u8bc1\\u53f7\\uff01\\\\\\\")\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Petrochemical Yingke - Cloud Wireless Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u77f3\\u5316\\u76c8\\u79d1\\u4e91\\u65e0\\u7ebf\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HanWei-mobile platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<img src=\\\\\\\"images/zshlogo.jpg\\\\\\\" />\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u4fe1\\u4efb\\u6c49\\u5a01\\u7684\\u5f00\\u53d1\\u8bc1\\u4e66\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Exploration management information system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"function onLoad() {             window.location.href = 'Login.html';         }\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yimei Soft-Tong-B / S satisfactorily\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4ebf\\u7f8e\\u6ee1\\u610f\\u901a\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"B/S\\u6ee1\\u610f\\u901a\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Production command system\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"background:url(./assets/img/iptbck.png) repeat center;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u7edf\\u4e00\\u8eab\\u4efd\\u8ba4\\u8bc1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"function createCookie(objName,objValue,objHours)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"onselectstart=\\\\\\\"javascript:return false;\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Patrol management system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"document.getElementById(\\\\\\\"pcode\\\\\\\").src = \\\\\\\"/user/vcodes.action?ts=\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5de1\\u68c0\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TECLIB-GLPI\",\n  \"logic\": \"(a&&b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/pics/favicon.ico\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"autofocus=\\\\\\\"autofocus\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"GLPI - \\u767b\\u9646\\u5165\\u53e3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"_glpi_csrf_token\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EPBP system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"http://epbp.jhpa.sinopec.com.cn/\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Uniform-Server\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"http://www.uniformserver.com\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<meta name=\\\\\\\"Description\\\\\\\" content=\\\\\\\"The Uniform Server 8.1.0-Coral.\\\\\\\" />\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<div id=\\\\\\\"divider\\\\\\\">Developed By <a href=\\\\\\\"http://www.uniformserver.com/\\\\\\\">The Uniform Server Development Team</a></div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"uPortal\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Uportal-Version: uPortal_rel\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"alt=\\\\\\\"Powered by uPortal\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Unimep-Station-Controller\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"cgi-bin/log.log.cgi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<META name=\\\\\\\"Description\\\\\\\" content=\\\\\\\"UniMep Station Controller\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-VMG1312-B10B\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZyXEL VMG1312-B10B\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var modelname= '(VMG1312-B10B)';\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Welcome toVMG1312-B10B\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Welcome to VMG1312-B10B\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXDSL-931VII\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZXDSL 931VII\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZXDSL 931VII\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ubiQuoss-VDSL\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ubiquoss VDSL\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-NBG6604\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NBG6604\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NBG6604\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Piwigo\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"generator\\\\\\\" content=\\\\\\\"Piwigo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"pwg_id\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Set-Cookie: pwg_id\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u542f\\u83b1OA\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"js/jQselect.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Css/css.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"class=\\\\\\\"STYLE1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXHN-H367N\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZXHN H367N\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BUSYBOX\",\n  \"logic\": \"(a&&b) ||c||d||e||f|| (g) || (h&&i&&j&&k&&l) || (m&&n&&o&&p&&q&&r)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BusyBox\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Built in\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"BusyBox on \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Busybox Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"BusyBox v0.61.pre\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"/bin/busybox\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"220 Operation successful\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"HTTP/1.1 400 Bad Request\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Connection: close\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Content-Type: text/plain\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"Transfer-Encoding: chunked\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"Server\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"HTTP/1.1 400 Bad Request\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"Connection: close\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"Content-Type: text/plain\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"Transfer-Encoding: chunked\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"q\",\n    \"feature\": \"Server\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"r\",\n    \"feature\": \"Date\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"iRZ-RUH2b-ROUTER\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IRZ-RUH2b-ROUTER\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"iRZ RUH2b Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Data query system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"modelPage/topPage.jsp\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" src=\\\\\\\"mainFrame.jsp\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-VMG8324-B10A\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var modelname= '(VMG8324-B10A)'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var modelname= 'VMG8324-B10A'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXHN-H208N\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZXHN H208N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZXHN H208N\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXHN-H298N\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZXHN H298N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZXHN H298N\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXHN-E5501\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZXHN E5501\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXHN-E5502\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZXHN E5502\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Petrochemical Yingke-HSE Information Management Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u767b\\u5f55 | HSE\\u4fe1\\u606f\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u5c0f\\u732aCMS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Powered-By: PigCms.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Powered-By: PigCms.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Waibai Information - Online Training Test System\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u8fde\\u63a5\\u4e2d\\uff0c\\u8bf7\\u7a0d\\u5019\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"index.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"App_Image/PXSystem\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"App_Image/System\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"openEAP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"openEAP_\\u7edf\\u4e00\\u767b\\u5f55\\u95e8\\u6237\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Conference management system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"lblError\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u4f1a\\u8bae\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Material transfer inquiry system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var maintabstrip = Ext.getCmp('RegionPanel1_Region3_mainTabStrip');\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Video conferencing system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"assets/js/placeholder.js\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"data-val-required=\\\\\\\"AD\\u57df\\u8d26\\u53f7\\u767b\\u5f55 \\u5b57\\u6bb5\\u662f\\u5fc5\\u9700\\u7684\\u3002\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CIC Software - KXMAIL\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered By <a href=\\\\\\\"http://www.kxmail.net\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u79d1\\u4fe1\\u90ae\\u4ef6\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/systemfunction.pack.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"lo_computername\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u9f50\\u535a\\u8f6f\\u4ef6-v7\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/images/v7/cms.css\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Vibration monitoring system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u632f\\u52a8\\u76d1\\u6d4b\\u7cfb\\u7edf 2.0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u70bc\\u6cb9\\u5382S8000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Information security management system\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"js/piwik.js\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"id=\\\\\\\"lblMsg_Container\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"else{ Ext.getCmp('lblMsg').setValue('');}}}}\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<div id=\\\\\\\"lblMsg_Container\\\\\\\" style=\\\\\\\"display:inline;\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Assessment system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/khsystem/default.aspx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Smelet-Public Bicycle Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/Skins/Bicycle/css/login.css\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Times Guanghua - E-Learning\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"method=\\\\\\\"post\\\\\\\" action=\\\\\\\"/eln3_asp/login.do\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hongjing Cloud Platform - Easy Children ECS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/UserFiles/Admin/CustomSkin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/Include/EcsServerApi.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"URP-integrated academic system\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<input name=\\\\\\\"j_captcha_response\\\\\\\" type=\\\\\\\"hidden\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"URP \\u7efc\\u5408\\u6559\\u52a1\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u5317\\u4eac\\u6e05\\u5143\\u4f18\\u8f6f\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u6559\\u52a1\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-R6260\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR R6260\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR R6260\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-DDR2200-ADSL2+-Residential-Gateway\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco DDR2200 ADSL2+ Residential Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ERP system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7cfb\\u7edf(PR3)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"default.files/colorschememapping.xml\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cbn-CH7486E-Wireless-Voice-Gateway\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CH7486E Wireless Voice Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cbn-CH7284E-Wireless-Voice-Gateway\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CH7284E Wireless Voice Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Collaborative optimization system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location.href = \\\\\\\"/Main/Home\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" alert('\\u64cd\\u4f5c\\u9519\\u8bef,\\u8bf7\\u4e0e\\u7cfb\\u7edf\\u7ba1\\u7406\\u5458\\u8054\\u7cfb!');\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"North Source - Desktop Application System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span id=\\\\\\\"lblValidCompany\\\\\\\" class=\\\\\\\"validcompany\\\\\\\">VRV\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var vver = $('#hidVerify').val();\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-Prestige-Router\",\n  \"logic\": \"(a&&b) || (c&&d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZyXEL Prestige Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<h2>Blog Comments</h2>\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ZyXEL Prestige Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Honeywell-DS7700\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DS7700\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: DS67x0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: DS67x0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LDAR application\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location=\\\\\\\"ldar/home/index\\\\\\\";\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Science Technology - Regional Management Information System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"http://www.chnitc.com\\\\\\\" style=\\\\\\\"text-decoration:none;color:#fff;\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u79d1\\u4e1a\\u5f00\\u53d1\\u56e2\\u961f\\u51fa\\u54c1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VIZIO-Dual-Band-HD-Wireless-Internet-Router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Dual-Band HD Wireless Internet Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"vizio_logo.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Petrochemical Yingke - Control Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.open(\\\\\\\"http://itmc.mmsh.sinopec.com/itgk/sysMgr/productRegister/yunweiProRegister.view\\\\\\\"); }  \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"North Mingyun - IT operation and maintenance platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location.href = \\\\\\\"/appframe/login_v2/login.jsp\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/images/common/favicon.ico\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Saint Bo Run - Network Boundary Integrity Check Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7f51\\u7edc\\u8fb9\\u754c\\u5b8c\\u6574\\u6027\\u68c0\\u67e5\\u7ba1\\u7406\\u7cfb\\u7edf V2.0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Silverlight\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"App Controller\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Get Microsoft Silverlight\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Holographic sea - warehousing office assist management system\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5e7f\\u5dde\\u5168\\u606f\\u82e5\\u6d77\\u4fe1\\u606f\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/scripts/easyui/jquery.easyui.min.js\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"style=\\\\\\\"vertical-align: middle; cursor: pointer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u54cd\\u5e94\\u952e\\u76d8\\u7684\\u56de\\u8f66\\u4e8b\\u4ef6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-Web-Smart-Switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETGEAR Web Smart Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-WAC510\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETGEAR WAC510\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Invision-IP.Board\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ipb.vars\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ValueApex-EAMic\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Log into my EAMic\\u00ae account\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"InfoPro-Eman Workflow Treatment Platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<input type=\\\\\\\"submit\\\\\\\" name=\\\\\\\"cmdSubmit\\\\\\\" value=\\\\\\\" \\u767b \\u5f55 \\\\\\\" onclick=\\\\\\\"javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;cmdSubmit&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))\\\\\\\" id=\\\\\\\"cmdSubmit\\\\\\\" class=\\\\\\\"ColorButton\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"WorkFlow\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alarm operation monitoring system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var objret = FBaseJSonDeal\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"onkeydown=\\\\\\\"keyDown(event)\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"intelbras-APR-2410\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"APR-2410\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"intelbras-APR-2408\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"APR-2408\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FAST-300M-Wireless-N-Router-FW313R\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SERVER: 300M Wireless N Router FW313R\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"300M Wireless N Router FW313R\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"FW313R\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TV Subbertess System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"manage_sgroup.asp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Online status monitoring system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"yxck/html/js/public.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Opto-ECSTAR\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"UcSTAR \\u7ba1\\u7406\\u63a7\\u5236\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-AC2200\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AC2200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"AC2200 login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SMCWBR14T-G-Wireless-Broadband-Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SMCWBR14T-G Wireless Broadband Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APACHE-Superset\",\n  \"logic\": \"(a&&b) ||c|| (d|| (e&&f) &&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Superset\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"appbuilder\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<a href=\\\\\\\"https://manage.app-sdx.preset.io\\\\\\\" class=\\\\\\\"button\\\\\\\">Back to workspaces</a></section>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/static/assets/dist/common.644ae7ae973b00abc14b.entry.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/static/assets/images/favicon.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"/static/appbuilder/js/jquery-latest.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Superset\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Centerm-Xifan Desktop Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"new CT.ExtApp.AboutSystemWindow()\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Statistics system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.open(\\\\\\\"/shjl/KnowledgeArt/Default.aspx\\\\\\\",\\\\\\\"_self\\\\\\\")\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"French compilation information system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"spcnj2001/index.php\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alstom-AlSpa?care-Fan Online Status Monitoring and Diagnostic System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"asp/images/s8000plus.gif\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Petrified Yingke - Logistics Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \" href=\\\\\\\"/newImages/login/logo_icon.ico\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Askey-Cable-Modem\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Welcome to Askey Cable Modem</span>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"action=\\\\\\\"/goform/AskLogin\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PMS device management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/PMS2/ex_jssh/Default.aspx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-IVS\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var iever = ScriptEngineMajorVersion()\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"ZTE-ZXHN-H218N\",\n  \"logic\": \"(a&&b) ||c|| (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZXHN H218N</font>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZTE Corporation\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ZXHN H218N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"ZXHN H218N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Metrology data acquisition system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"document.getElementById(\\\\\\\"downloadPopup\\\\\\\").style.visibility\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Production operation and management monitoring analysis system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"name=\\\\\\\"ibSynchronization\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Torch gas monitoring and fuel gas balance optimization system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"shws/\\u7cfb\\u7edf\\u65e5\\u5e38\\u64cd\\u4f5c\\u4ecb\\u7ecd.mht\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yuxin - Intelligent Energy Management Optimization System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/Ashx/Log/loginCheck.ashx?fresh=\\\\\\\" + Math.random()\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cloud meeting\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"action=\\\\\\\"ConfPage.go\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Log Management Integrated Audit System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"url(/ad/media/pixmaps/login/loginzhuangtai-err.png)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u65e5\\u5fd7\\u7ba1\\u7406\\u7efc\\u5408\\u5ba1\\u8ba1\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"3CDaemon\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"3Com 3CDaemon FTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Special equipment information exchange system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.parent.document.title==\\\\\\\"\\u6cc4\\u6f0f\\u548c\\u68c0\\u6d4b\\u7cfb\\u7edf\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"window.location.href=\\\\\\\"/index.jsp\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Maintenance and transformation information platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"title=\\\\\\\"\\u8bf7\\u4f7f\\u7528\\u7cfb\\u7edf\\u8d26\\u53f7\\u6216\\u57df\\u8d26\\u53f7\\u767b\\u5f55\\\\\\\" class=\\\\\\\"inputText\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cander - camera\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.open(\\\\\\\"http://www.kaicong.net\\\\\\\")\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"camera\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NSFOCUS-website security monitoring system\",\n  \"logic\": \"(((a||b) && (c||d||e||f)) &&g) ||h\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"stylesheet/nsfocus\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"nsfocus.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u7f51\\u7ad9\\u5b89\\u5168\\u76d1\\u6d4b\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"WSM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: WSM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"/login_logo_wsm_zh_CN.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Server: WSM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GetPowerFlow\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"GetPowerFlow.asmx?op=GetPowerFlowDealNew\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Unified identity integrated system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"chaxunBt white\\\\\\\" onclick=\\\\\\\"login()\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GLODON-console\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/Scripts/DD_belatedPNG.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"url: \\\\\\\"/Console/Account/LogOn\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Engineering quality supervision system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/Demo/CheckCode.ashx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Pricewater Technology-CPMS User Management\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"post(\\\\\\\"/SSOSAML/SAML2SignonHandler.ashx\\\\\\\")\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"awarrenhttp\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: awarrenhttp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: awarrenhttp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Golden Hui - Integrated Management Information System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"option value=\\\\\\\"Enterprise\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u662f\\u5426\\u57df\\u8d26\\u6237\\u767b\\u5f55\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Atlantis\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Atlantis\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Atlantis\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Atlantis\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ilay-Bilisim-Mail-Server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ilay Bilisim Mail Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oriental Simulation -Nettrmp\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NetTrmp\\u767b\\u5f55\\u754c\\u9762\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Terminal Security Management System Reporting System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"loadprogress.gif\\\\\\\" alt=\\\\\\\"loading\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oriental Simulation - Enterprise Simulation Training Management Network\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"document.getElementById(\\\\\\\"hlLoginInfo\\\\\\\").click()\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Refining Based Processing Loss Management System\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/copl/css/landing.css\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/copl/images/dl.png\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"/copl/css/landing.css\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Database list system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"BPS_SHUserCenter\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"K2 process application production VM\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"url=/TopBPM.UserCenter.Web/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hydra\",\n  \"logic\": \"a|| (b&&c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Hydra\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Hydra\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"iCanWebServer\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: iCanWebServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: iCanWebServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Real-time monitoring and optimization system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.status=out.substring(seq, len)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"url(images/pic/load.PNG)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"QtWeb\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"url=GQRTWeb\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"eagleeyescctv\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IP Surveillance for Your Life\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/nobody/loginDevice.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"avtech\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"General map management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"url=SHSH/Default.aspx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JAWS\",\n  \"logic\": \"(a&&b&&c&&d) || (e&&f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: JAWS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: JAWS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"BH-rotation device status monitoring system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BHClientcer: \\\\\\\"/Modules/Web/Common/data/BHClient.cer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"kHTTPd\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: kHTTPd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: kHTTPd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Linksys-SPA-Configuration\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Linksys SPA Configuration\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GBWcfService\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GBWcfService\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ServiceClient\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FC2-Blog\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"bloguid\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"cookietest=test\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"bloguid\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"cookietest=test\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Centreon\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Generator\\\\\\\" content=\\\\\\\"Centreon - Copyright\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Centreon - IT & Network Monitoring\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NetWare-Enterprise-Web-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: NetWare-Enterprise-Web-Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: NetWare-Enterprise-Web-Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Online analyzer operation monitoring management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TextInputSingleLineDTD\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Webland-Mail-Server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Webland Mail Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KnowledgeWebService\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"KnowledgeWebService Service\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"QTSS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: QTSS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: QTSS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Quickserve\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Quickserve\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Quickserve\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"USP-Secure-Login-Service\",\n  \"logic\": \"a||b||c||d||e||f||g||h\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<!-- SLS JavaScripts -->\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<form action=\\\\\\\"auth\\\\\\\" method=\\\\\\\"post\\\\\\\" name=\\\\\\\"LoginForm\\\\\\\" onsubmit=\\\\\\\"return checkFormSubmit();\\\\\\\" >\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<input name=\\\\\\\"currentRequestedPage\\\\\\\" type=\\\\\\\"hidden\\\\\\\" value=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"slsstatus\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Set-Cookie: SLSLanguage=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Set-Cookie: SCDID_S=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Set-Cookie: SLSLanguage=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Set-Cookie: SCDID_S=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Investment monitoring analysis system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"function detectUserOnline()\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Runda Software - Supervision Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"log_rbox\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SmarterTools\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: SmarterTools\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: SmarterTools\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Creatsoft-Corrosion Monitoring and Management Decision System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/corrosion/charts/water-pid.jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/corrosion/charts/ph.jsp\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tax system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u53ef\\u4ee5\\u7528window.self.location.href\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"vmware-SpringBoot-Framework\",\n  \"logic\": \"((a|| (b&&c)) &&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Netty@SpringBoot\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Whitelabel Error Page\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"There was an unexpected error\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Water-friendly report management system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"loginButton\\\\\\\" title=\\\\\\\"\\u767b\\u5f55\\u7cfb\\u7edf\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"App_Themes/Default/StyleSheet.css\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Terayon\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Terayon\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Terayon\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ubicom-Server\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Ubicom\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Ubicom\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Lianhuamin-TEAVIEW\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TeaView\\u4e00\\u4f53\\u5316\\u76d1\\u63a7\\u8fd0\\u7ef4\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Real-time data statistics system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"s8000/asp/style/dahua.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Petrochemical Yingke - Video Monitoring\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"images/slider/banner-GIS.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VamCart\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"stylesheets/load/vamcart.css\\\\\\\" rel=\\\\\\\"stylesheet\\\\\\\"  media=\\\\\\\"screen\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<!-- Powered by: VamCart (http://vamcart.com) -->\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<p><a href=\\\\\\\"http://vamcart.com/\\\\\\\">PHP Shopping Cart</a> <a href=\\\\\\\"http://vamcart.com/\\\\\\\">VamCart</a></p>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Price management information system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"m-icon-swapright m-icon-white\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"validate_required\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Numbers full link monitoring and intelligent diagnostic system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"webnew/static/css/examMng/core.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TKH-video surveillance\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Siqura\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Siqura\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"class=\\\\\\\"small\\\\\\\">Powered by Siqura\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<img src='../common/logo_Siqura.jpg'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-Media-Vault-Media-Server\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelName>HP Media Vault - Media Server</modelName>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HP Media Vault\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<title>HP Media Vault\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Roku-4200X\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelNumber>4200X</modelNumber>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Full cost target management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var rssdiviframeid = 'rssDiv_IFrame'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u534f\\u540c\\u529e\\u516c\\u7cfb\\u7edf\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"ckbIsADay\\\\\\\" type=\\\\\\\"checkbox\\\\\\\" name=\\\\\\\"ckbIsADay\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MyMar\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u534f\\u540c\\u529e\\u516c\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Software registration system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"background=\\\\\\\"App_Themes/default/images/RegisterMiddle.gif\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MitraStar-DSL-2401HN-T1C\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelNumber>DSL-2401HN-T1C</modelNumber>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<friendlyName>MitraStar DSL-2401HN-T1C Internet Sharing Gateway</friendlyName>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Document sharing platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"rel=\\\\\\\"shortcut icon\\\\\\\" href=\\\\\\\"/static/css/cursor.css\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Unusual real-time regulatory platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var tips = objAccount.attr(\\\\\\\"tips\\\\\\\")\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Import and export logistics system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/IP/AAA/IPWeb\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cartoon system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"document.all.txtPassword.value = passCookie\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"One finger-E7 human resource system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"name=\\\\\\\"Hidden_IsBiaoZhun\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Comprehensive budget management information system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"Cmb_Skin\\\\\\\" class=\\\\\\\"easyui-combobox\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APC Performance Evaluation System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"value=\\\\\\\"\\u51cf\\u538b\\u5854 \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Financial performance evaluation system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"iconfont icon-mimatubiao user_lock\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Petrochemical Yingke - Risk Analysis System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u52a8\\u8bbe\\u5907\\u8fd0\\u884c\\u98ce\\u9669\\u5206\\u6790\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Catering card system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"name=\\\\\\\"loginWayParam\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oriental simulation - user unified landing platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/Scripts/EastSimUtility.js\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK- Financial System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"pansoftPlugins/multithreading/panCalc.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/login/img/loading.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Daximedian - a cartoon system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location.href=\\\\\\\"single/EmpMain2.aspx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Qi Zhe -excel server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5982\\u679c\\u80fd\\u8bbf\\u95ee\\u5230qinzhe\\u7f51\\u7ad9\\u4e0a\\u7684\\u56fe\\u7247\\uff0c\\u8bf4\\u660e\\u7f51\\u7edc\\u662f\\u901a\\u7684\\uff0c\\u663e\\u793a\\u65b0\\u95fb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"id=\\\\\\\"chkWorkByReplacer\\\\\\\" type=\\\\\\\"checkbox\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Metering system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"userNameICCardId\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/Czjlpt/KnowledgeArt/Defaut.aspx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Intelligent inspection\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BasicsService\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Industrial Control Safety Holiday Governance Project System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"qyxt.html\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/QYxt.html\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Extra super-funding examination and approval system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"Amy/WebOS/JpManager.js\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CSEI-risk assessment system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var unitid = GetPageRequestValue(\\\\\\\"UnitID\\\\\\\")\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Electronic discharge system\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MasterPlatform\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"rel=\\\\\\\"shortcut icon\\\\\\\" href=\\\\\\\"/files/favicon.ico\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u6253\\u5f00\\u63a7\\u5236\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Meeting sign-in system\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"contentWarp_item clearfix\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"api/getRooms\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u4f1a\\u8bae\\u7b7e\\u5230\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ERP reached standard test monitoring warning platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ERP\\u8fbe\\u6807\\u8003\\u6838\\u76d1\\u63a7\\u9884\\u8b66\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Anheng Information -Apt\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u660e\\u5fa1APT\\u653b\\u51fb\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Energy management system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var wnd=window.open(\\\\\\\"/IPWeb/Login\\\\\\\",\\\\\\\"mes\\\\\\\")\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u80fd\\u6e90\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HanWei - Hazardous Chemicals Enterprise Early Warning and Prevention and Control System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Default value is BootstrapDialog.TYPE_PRIMARY\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var objheight = document.documentElement.clientHeight\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"One - Net Shield K01\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7f51\\u7edc\\u653b\\u51fb\\u963b\\u65ad\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TGate2000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TGate2000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Salien-Performance Management Platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"images/login/cbgl/favicon.ico\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Copyright 2010 www.salien.com.cn\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-Agile-Controller\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Agile Controller Login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Evaluator management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/UploadFile/tts/tts.apk\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Construction integrated management platform system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var tbxpasswordclientid = 'Window1_SimpleForm1_tbxPassword'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fu Ding - User Authority Center\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/Images/SinopecLogo.png\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Operation and maintenance application server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"frameUI/js/gridPanel.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APC alarm maintenance system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"apc/apc_stylesheet.css\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Changsha Tutal - Vehicle Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/Content/login-ui/static/h-ui.admin/css/H-ui.login.css\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Elecom-Thecus-NAS\",\n  \"logic\": \"(a&& (b||c)) &&d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"if(mod_ui=='Thecus')\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"msg:\\\\\\\"\\u60a8\\u65e0\\u4efb\\u4f55 RAID \\u7cfb\\u7edf\\u3002\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"msg:\\\\\\\"You don`t have any RAID system.\\\\\\\",\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Mobile Applications\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u79fb\\u52a8\\u5e94\\u7528\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a href=\\\\\\\"fulingmobile.apk\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"plist/flmobile.plist\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Scientific research management\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7814\\u7a76\\u9662\\u8ba1\\u7b97\\u4e2d\\u5fc3\\u4fe1\\u606f\\u5ba4\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u79d1\\u7814\\u751f\\u4ea7\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Xin'an Century -UTRUST unified identity authentication and identity management platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"UTRUST\\u7edf\\u4e00\\u8eab\\u4efd\\u8ba4\\u8bc1\\u548c\\u8eab\\u4efd\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"China UTrust Infortech Co,.Ltd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TASS-log audit system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7075\\u5fd7\\u65e5\\u5fd7\\u5ba1\\u8ba1\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5317\\u4eac\\u6c5f\\u5357\\u5929\\u5b89\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Xin'an Century-NetAuth Unified Authentication Management System\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"image/loginauthorize.png\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"onmouseover=\\\\\\\"MM_swapImage('Image1','','image/loginok_after.gif',1)\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NetAuth\\u7edf\\u4e00\\u8eab\\u4efd\\u8ba4\\u8bc1\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Anheng Information - Mingjian Website Security Monitoring Platform\",\n  \"logic\": \"a|| (b&& (c||d) )\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var pagefunc968535468893538dasdaweqwertion = \\\\\\\"timeout\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"loadoem?path=login-logo.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u7f51\\u7ad9\\u5b89\\u5168\\u68c0\\u6d4b\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u7f51\\u7ad9\\u5b89\\u5168\\u76d1\\u6d4b\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Adobe-Flex\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Adobe Flex\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Learn more about Flex at http://flex.org\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yun-BroadView-APM\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Broadview APM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Extron-DMP device\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<title>\\\\\\\"+xModel+\\\\\\\" Default Web Pages</title>\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Synology-WebStation\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Welcome to Synology Web Station\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"id=\\\\\\\"paragraph\\\\\\\">Web Station has been enabled. To finish setting up your website, please see the \\\\\\\"Web Service\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \" Synology \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Web Service\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kelai - Metadata Analysis System (MDP)\",\n  \"logic\": \"(a&&b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u79d1\\u6765 \\u7248\\u6743\\u6240\\u6709 \\u4fdd\\u7559\\u6240\\u6709\\u6743\\u5229\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div id=\\\\\\\"processtime\\\\\\\" time=\\\\\\\"0.000033\\\\\\\" >#PROCESSTIME</div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u79d1\\u6765\\u5143\\u6570\\u636e\\u5206\\u6790\\u7cfb\\u7edf\\uff08MDP)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u79d1\\u6765\\u5143\\u6570\\u636e\\u5206\\u6790\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Integrated Information Management Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location.href=\\\\\\\"/\\u5f00\\u53d1\\u7efc\\u5408\\u4fe1\\u606f\\u7ba1\\u7406/default/default.aspx\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Defect management information system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"Images/homepage1280.css\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5904\\u7406\\u7f3a\\u9677\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Lenovo-Thinkysystem-DF Series Distributed Storage Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Lenovo ThinkSystem DF\\u7cfb\\u5217\\u5206\\u5e03\\u5f0f\\u5b58\\u50a8\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Commvault-backup system\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Redirecting to /webconsole\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Content-Length: 150\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Redirecting to /webconsole/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Process technology management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingmethod='scale',src='images2/body_top1.jpg')\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Nearby Science & Technology - Patrol Management Software\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"background=zhongyou.jpg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u4f17\\u53cb\\u79d1\\u6280\\u5de1\\u68c0\\u7ba1\\u7406\\u8f6f\\u4ef6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Communication business management system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7cfb\\u7edf\\u767b\\u5f55\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u82cf\\u5dde\\u4f18\\u4e9a\\u5229\\u7535\\u5b50\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Macro information -Web-ERP-network system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location='/www/login.html'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"window.location = \\\\\\\"www/login.html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Information Resource Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"browser==\\\\\\\"Microsoft Interet Explorer\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-ER6300\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ER6300\\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"H3C ER6300\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ER6300\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-ER8300G2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ER8300G2\\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ERP business system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"initFavoriteDevices(\\\\\\\"Login - ERP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Raritan-Dominion-SX\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Welcome to the Dominion SX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Raritan Dominion SX\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Access gateway management platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EDP-WEB/login.jsp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-ER3108GW\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ER3108GW\\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"H3C ER3108GW\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Intelligent Material Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var token = result.data.PRIVATETOKEN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hongzhou Technology - Macrosan\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MacroSAN\\u6570\\u636e\\u5b58\\u50a8\\u8bbe\\u5907\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bo Wen Tianyi-Automobile Diary System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/Public/base/js/plugins/crypto/RSA.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Qianxin - Analysis Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/static/build/animate_nprogress_timepiacker_tooltipster.min.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"North Source - Network Access Control System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6b22\\u8fce\\u767b\\u5f55\\u5317\\u4fe1\\u6e90\\u7f51\\u7edc\\u63a5\\u5165\\u63a7\\u5236\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"localStorage.setItem('docTitle','\\u5317\\u4fe1\\u6e90\\u7f51\\u7edc\\u63a5\\u5165\\u63a7\\u5236\\u7cfb\\u7edf')\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Knowledge library system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"bluebutton\\\\\\\" value=\\\\\\\"\\u641c\\u7d22\\u77e5\\u8bc6\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"aspentech-ASPEN-InfoPlus.21\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/AspenCUI/CSS/AppStyles.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Jiahua Bo-Guardian\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location.host + \\\\\\\"/agweb\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Comprehensive geographic information system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"SIAM.aspx\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"name=\\\\\\\"txtUserName\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VictorySoft-developed new well design management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"value=\\\\\\\"style2012/style1/Scripts/expressInstall.swf\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mobile application management platform\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"onclick=\\\\\\\"javascript:document.loginForm.reset();\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"font-family:Verdana, Geneva, sans-serif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u79fb\\u52a8\\u5e94\\u7528\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Standard query system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location.href=\\\\\\\"/main/jsp/main.jsp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Polycom-IPPBX\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"cgi-bin/ippbx.cgi?module=showlogin\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"cgi-bin/httpTohttps.cgi\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Integrated Management Platform - Material Management\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"SmartClient.application\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-ER6300G2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ER6300G2\\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-ER5200G2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ER5200G2\\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-ER8300\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ER8300\\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"H3C ER8300\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"H3C ER8300\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-ER3200\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ER3200\\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"H3C ER3200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"H3C ER3200\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-ER2100\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ER2100\\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"H3C ER2100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-ER3108G\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ER3108G\\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"H3C ER3108G\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-ICG1000\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ICG1000\\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"H3C ICG 1000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"H3C ICG 1000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"ICG 1000\\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-ER3260G2\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ER3260G2\\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ER3260G2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-WNR612v3\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETGEAR  WNR612v3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NETGEAR  WNR612v3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-XWN5001\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETGEAR XWN5001\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NETGEAR PLC AP XWN5001\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NETGEAR XWN5001\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Symantec-Client-Security\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<!-- Symantec Client Security Web Based Installation -->\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fortinet-FortiWeb\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<title ng-bind=\\\\\\\"'FortiWeb - ' + deviceState.admin.hostname\\\\\\\"></title>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FortiWeb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: FortiWeb\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"R1Soft-Server-Backup-Manager-SE\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server Backup Manager SE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-ER5200\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ER5200\\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"H3C ER5200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"H3C ER5200\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Taibo Cloud Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6cf0\\u535a\\u4e91\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-ER5100\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ER5100\\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"H3C ER5100\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"H3C ER5100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-ER3100\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ER3100\\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"H3C ER3100\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"H3C ER3100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Shandong Wide Area - Production Management Plan Statistical Integrated Management Information System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u751f\\u4ea7\\u7ecf\\u8425\\u8ba1\\u5212\\u7edf\\u8ba1\\u4e00\\u4f53\\u5316\\u7ba1\\u7406\\u4fe1\\u606f\\u7cfb\\u7edf\\u5b89\\u88c5\\u7a0b\\u5e8f\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Accel-pppd\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"accel-pppd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AdminLTE-2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AdminLTE 2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Office-Web-Apps\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var GeneratedViewUrlElementId\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ATP200\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ATP200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ATP200\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ATP500\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ATP500\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CA-Privileged-Access-Manager\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CA Privileged Access Manager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-WNDR3300\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETGEAR WNDR3300\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NETGEAR WNDR3300\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"WNDR3300 login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Netgear WNDR3300\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Human resource information system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"name=\\\\\\\"VTI-GROUP\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"action=\\\\\\\"usercheck.jsp\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Public business integrated linkage fee system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var hasbeensubmited = false\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-F600W\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"F600W\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"F600W\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HONGAN-HEIMDALL-DLP Data Leakage Protection System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<iframe frameborder=\\\\\\\"0\\\\\\\" id=\\\\\\\"OperateArea\\\\\\\" name=\\\\\\\"OperateArea\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Heimdall DLP\\u6570\\u636e\\u6cc4\\u6f0f\\u9632\\u62a4\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"business system\",\n  \"logic\": \"(a&&b) ||c|| (d&&e) ||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"onsubmit=\\\\\\\"return checksubmit()\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"function hiddenPass(e)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"window.location=contextPath+\\\\\\\"/work/index.jsp\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"function omiga_window(url)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Images/login_d.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"function updataPipeline(pipelineName)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Production and business indicator system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"function over_change(index,src,clrOver,cursor)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NSG50\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NSG50\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tamronos-IPTV system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TamronOS IPTV\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WebSSH\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WebSSH\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VCalendar\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://www.vcalendar.org\\\\\\\">VCalendar</a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<link href=\\\\\\\"Styles/Basic/Style.css\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Net Flights - Products\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"WrzcNet.ico\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a href=\\\\\\\"mailto:webmaster@wrzc.net\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"url = 'WrzcNet_Vote.asp?stype=view';\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXHN-H118N\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZXHN H118N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZXHN H118N\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"vuze-Web-Remote\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Vuze - Vuze Web Remote\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Vuze - Vuze Web Remote\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Vuze Remote\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGAIN-Company Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NetGain\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bihewei High Performance Intelligent Application Safety Gateway\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u78a7\\u6d77\\u5a01\\u9ad8\\u6027\\u80fd\\u667a\\u80fd\\u5e94\\u7528\\u5b89\\u5168\\u7f51\\u5173\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Schedule management system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u65e5\\u7a0b\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"function __doPostBack(eventTarget, eventArgument)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Enterprise Cloud Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"url=ssobpm/SSOLogin.aspx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-XR700\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETGEAR XR700\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Netgear XR700\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NETGEAR-XR700\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-RAX40\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR RAX40\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR RAX40\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UTSTARCOM-WA3002-g1\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"WA3002-g1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"WA3002-g1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mind Heart Digital Network Publishing Platform and Application System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"Component/Setup.exe\\\\\\\" id=\\\\\\\"lnkXTKJ\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5ca9\\u5fc3\\u7efc\\u5408\\u56fe\\u63a7\\u4ef6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Factory management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"doc/\\u8fdb\\u51fa\\u5382\\u64cd\\u4f5c\\u6587\\u686320140508.docx\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Liptop-second generation firewall system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5229\\u8c31\\u7b2c\\u4e8c\\u4ee3\\u9632\\u706b\\u5899\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Easy to point easy - fixed asset management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6613\\u70b9\\u56fa\\u5b9a\\u8d44\\u4ea7\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"leadsec- Intrusion Protection System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7f51\\u5fa1\\u5165\\u4fb5\\u9632\\u62a4\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zhongke Tong Teng - Food Source Disease Monitoring Report System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u98df\\u6e90\\u6027\\u75be\\u75c5\\u76d1\\u6d4b\\u62a5\\u544a\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PeerSec-MatrixSSL\",\n  \"logic\": \"(a&&b&&c&&d) || (e&&f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PeerSec-MatrixSSL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"PeerSec-MatrixSSL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"crushftp-WebInterface\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CrushFTP WebInterface\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Set-Cookie: mainserverinstance=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Set-Cookie: mainserverinstance=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-JNR1010\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETGEAR JNR1010\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NETGEAR  JNR1010\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NETGEAR JNR1010\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"NETGEAR  JNR1010\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Jinglun Technology - Website System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4eac\\u4f26\\u5efa\\u7ad9\\u7cfb\\u7edf \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"JLWCS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Eisoo-AnyBackup\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AnyBackup\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"id=\\\\\\\"topMask\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"svr ('local/common/init_flag')\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"AnyBackup\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NB2700-Web-Manager\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NB2700 Web Manager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NEW_ROCK-IP-PBX-Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var data = formatParams(params.data)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hisense-WebPos system\",\n  \"logic\": \"(a) ||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<legend><img src=\\\\\\\"../../Content/Images/Hisense.bmp\\\\\\\" style=\\\\\\\"height:20px; padding-left:-10px\\\\\\\"/>WebPos\\u767b\\u5f55</legend>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Content/Images/Hisense.bmp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FAST-300M-Wireless-N-Router-FWR200\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FAST 300M Wireless N Router FWR200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"300M Wireless N Router FWR200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"FWR200\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SRS-live server\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"players/js/winlin.utility.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SRS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NuCom-11N-Wireless-Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NuCom 11N Wireless Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-HG8245H5\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var productname = 'HG8245H5';\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sundray-Enterprise AP\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"url = '/cgi-bin/dispatcher.cgi?cmd=0&login_language='+idx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/login-btn.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CELLOPOINT-E-mail-Firewall\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cellopoint E-mail Firewall\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DinaPopper-Server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DinaPopper Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Email Software - YmailServer\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"STD Ymailserver\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DrayTek-Vigor-Router\",\n  \"logic\": \"a||b||c||d|| (e&&f) ||g||h||i\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: VigorAccess Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: VigorAccess Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"Login to Vigor\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"Login to Vigor\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Vigor Login Page\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"DrayTek Corp. All Rights Reserved.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"realm=\\\\\\\"Login to the Router Web Configurator\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Login to the Router Web Configurator\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"CommonName: Vigor Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Journal Network Technology\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"highcharts/js/modules/no-data-to-display.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"extjs5/build/examples/ux/css/ItemSelector.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VictorySoft-Performance Management System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"row fl-controls-left\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"casUi/themes/siam/login.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"legendsec-VPN\",\n  \"logic\": \"(a&&b) || (c&&d) || (e&&f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"admin/js/virtual_keyboard.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"images/login_logo.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u7f51\\u5173\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/images/sslvpnportallogo.jpg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"host_for_cookie\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"\\u8bc1\\u4e66\\u8ba4\\u8bc1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"SECWORLD\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Information cloud platform\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"App_Themes/GDTheme/style/calendar.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"onload=\\\\\\\"redirectToCloud();\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"style=\\\\\\\"background: none; width: 96px;                                                                         border: none; height: 20px\\\\\\\" value=\\\\\\\"\\u683c\\u5f0f\\uff1axxxx.gdsy\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fortinet-firewall\",\n  \"logic\": \"(a&&b) || (c&&d&&e&&f) ||g||h\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"str_table.mail_token_msg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FortiToken\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Array\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"and crack_kbd_event from jsconsole.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"EXPORT_SYMBOL try_login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Ajax Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Firewall Notification\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Fortigate Firewall\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Journal Network Technology - Firewall\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"apw_form_token\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"login-head clearfix\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"action=\\\\\\\"/logincheck\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Production and management sharing information system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u751f\\u4ea7\\u7ecf\\u8425\\u7ba1\\u7406\\u5171\\u4eab\\u4fe1\\u606f\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Guofeng Software - Standardized Integration Operation Management Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6807\\u51c6\\u5316\\u4e00\\u4f53\\u8fd0\\u8425\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Production execution system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location=\\\\\\\"gqmes/WebUI/ip/page/Common/mainframe.aspx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-Magic-R365\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var product_type = \\\\\\\"R365\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-AC7000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AC7000 login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dolby-ADB-4820CD\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ADB-4820CD login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Petrochemical Yingke-Mees Application Management\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/Home/ExitMes\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MES30/WebUI/ip/page/Common/mainframe.aspx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CETC-industrial firewall\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5de5\\u4e1a\\u9632\\u706b\\u5899\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/webgui/scripts/DD_belatedPNG.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-ArcSight\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ArcSight\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" window.location.replace(\\\\\\\"/arcsight/\\\\\\\")\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Storm\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Storm UI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"stormtimestr\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DrayTek-Viking\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: ViKING\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: ViKING\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-SecCenter\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u8bf7\\u767b\\u5f55\\u540e\\u4f7f\\u7528SecCenter\\u5b89\\u5168\\u7ba1\\u7406\\u4e2d\\u5fc3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"background=\\\\\\\"/SecCenter/img/index_02.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"/SecCenter/img/logo.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"window.top.location='/SecCenter/index.jsp';\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-ADSL2PlusRouter\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ADSL2PlusRouter\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Privoxy agent\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Privoxy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Proxy-Agent: Privoxy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Proxy-Agent: Privoxy\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Nginx-admin\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nginx admin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: nginx admin\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Lnfogo-Network Access Control System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5224\\u65ad\\u662f\\u5426\\u4e3a\\u7279\\u6b8a\\u9879\\u76ee??\\u77f3\\u5316\\u9879\\u76ee\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u4e2d\\u77f3\\u5316\\u7edf\\u4e00\\u8ba4\\u8bc1\\u9879\\u76ee\\u7684\\u8df3\\u8f6c\\u5730\\u5740\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GTEV\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GreatTurbo Virtualization Manager.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Inspur-as5600\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"LoginBtnArea\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"LoginInputLabel\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Inspur-Yunhai virtualization\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"License Tool\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"easyui-layout\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"InCloudSphere\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Invoice management system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var pimscontextPath\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u53d1\\u7968\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VisionGS-Webcam\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"http://www.visiongs.de\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<!-- VisionGS Still Code Begin -->\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"VisionGS Webcam Software\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Virtualmin\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<center><a href=/virtualmin-password-recovery/>Forgot your Virtualmin password?</a></center>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Database Operation Review System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"action=\\\\\\\"/dba/authenticate\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VisualRoute\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: VisualRoute\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: VisualRoute\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VPON-video surveillance\",\n  \"logic\": \"a||b|| (c&&d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/ctrl_ver.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: VPON Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: VPON Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"X-Generator: Drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"CouchDB\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Vivotek-Network-Camera\",\n  \"logic\": \"(((a||b||c||d||e||f) &&g&&h&&i&&j)) || ((k||l||m||n||o) &&p&&q)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Vivotek Network Camera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Network Dome Camera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Network Camera with Pan Tilt\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Wireless Network Camera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<div id=\\\\\\\"logo_icon\\\\\\\"><a href=\\\\\\\"http://www.vivotek.com/\\\\\\\" target=\\\\\\\"_blank\\\\\\\"><img alt=\\\\\\\"logo\\\\\\\" src=\\\\\\\"pic/logo.gif\\\\\\\"></a></div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"VIVOTEK - Network Camera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Microsoft-IIS\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"Server: Vivotek Network Camera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"Server: Network Dome Camera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"Server: Network Camera with Pan Tilt\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"Server: Wireless Network Camera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"Network Camera FTP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"q\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Visualware-MyConnection-Server\",\n  \"logic\": \"((a||b) &&c) || (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<!-- Begin MyConnection Server applet -->\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Visualware MyConnection Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Visualware MyConnection Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"H3C-i-Ware\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C i-Ware Platform Software\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u597d\\u89c6\\u901a-\\u89c6\\u9891\\u4f1a\\u8bae\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"win_introduce\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/resources/fmWeb/other/js/login.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AppRTC\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"WebRTC reference app\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"AppRTC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SangFor- Virtualization Management Platform\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"webkit|ie-stand\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"id=\\\\\\\"privacyTipWin\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"cn=SANGFOR VTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"CommonName: SANGFOR VTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SundRay-switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var g_href = \\\\\\\"www.sundray.com\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Frontline Xin'an-Wind Lei Electronic Document Security Management System\",\n  \"logic\": \"a||b|| (c&&d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u524d\\u6cbf\\u98ce\\u96f7\\u7535\\u5b50\\u6587\\u6863\\u5b89\\u5168\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u524d\\u6cbf\\u6587\\u6863\\u5b89\\u5168\\u7ba1\\u7406\\u8f6f\\u4ef6\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"/drm/template/css/login.css\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"action=\\\\\\\"/drm/login.do\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"src=\\\\\\\"/drm/encjs/Barrett.js\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Wacintaki-Poteto-BBS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"http://www.NineChime.com/products/\\\\\\\" title=\\\\\\\"Get your own free BBS!\\\\\\\">Wacintaki\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"by <a href=\\\\\\\"http://suteki.nu\\\\\\\">RanmaGuy</a> and <a href=\\\\\\\"http://www.cellosoft.com\\\\\\\">Marcello</a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"W3-Total-Cache\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Powered-By: W3 Total Cache\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-Powered-By: W3 Total Cache\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"W3MFC\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: W3MFC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: W3MFC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"CloudFront\",\n  \"logic\": \"((a||b||c) &&d&&e) || (f&&g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Amz-Cf-Id\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: CloudFront\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"x-cache: error from cloudfront\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: CloudFront\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Soft Excellence - Sns Share Community\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MaticsoftSNS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"maticsoft\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/Areas/SNS/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Radware-AppDirector\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AppDirector with Cookie Persistency\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NSFOCUS-BVS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/nsfocus_bvs.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NSFOCUS BVS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HMI-PMS equipment inspection system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u534e\\u9633\\u68c0\\u6d4b\\u4eea\\u5668PMS\\u8bbe\\u5907\\u5de1\\u68c0\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TinyRise-TinyShop\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var server_url = '/__con__/__act__';\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"tiny_token_\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASP168-OHO\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"upload/moban/images/style.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"default.php?mod=article&do=detail&tid\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zhongke Hui - Easysite\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GENERATOR\\\\\\\" content=\\\\\\\"EasySite\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Copyright 2009 by Huilan\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"_DesktopModules_PictureNews\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"EasySite-Compression\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"EasySite-Compression\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TASS-Operation and Maintenance Management Audit System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var activateurl = \\\\\\\"/index.php/Public/activate\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5317\\u4eac\\u6c5f\\u5357\\u5929\\u5b89\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KEDACOM-phoenix\\u76d1\\u63a7\\u5e73\\u53f0\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"cuocx\\\\\\\" classid=\\\\\\\"clsid:A7FF7A36-3EEF-4139-BFC0-FAEB4C8EBA08\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"kedacom\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"QingCloud-Company Products\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"QINGCLOUDELB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"\\u4e91\\u4e4b\\u57fa\\u77f3\\uff0c\\u81ea\\u7531\\u8ba1\\u7b97\\u3002QingCloud \\u9752\\u4e91\\u4e3a\\u60a8\\u63d0\\u4f9b\\u6309\\u9700\\u5206\\u914d\\u3001\\u5f39\\u6027\\u53ef\\u4f38\\u7f29\\u7684\\u8ba1\\u7b97\\u80fd\\u529b\\u3002\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"QINGCLOUDELB\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ThinkSNS\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"_static/image/favicon.ico\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"T3_lang\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"TSV3_lang\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://www.thinksns.com\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"T3_lang\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"TSV3_lang\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EearCMS\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"earcms\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/static/index/propeller.svg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/static/index/plane.svg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/images/propeller.svg\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Quest-Foglight\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Foglight\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"vmware-vRealize\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6b63\\u5728\\u91cd\\u5b9a\\u5411\\u5230 vRealize Operations Manager Web\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"POLY-RSS- recording\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Polycom RSS \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"window.location.replace(\\\\\\\"/rss/\\\\\\\")\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kohana-Framework\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Kohana Framework\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"kohanasession\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"kohanasession_data\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Kohana Framework\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"kohanasession\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"kohanasession_data\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SDL-Studio\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SDL Studio GroupShare\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FAT_FREE_FRAMEWORK-Framework\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Fat-Free Framework\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Fat-Free Framework\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"nette-Framework\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Nette Framework\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Nette Framework\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXHN-H168N\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZXHN H168N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"wxyz0123456789+/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zevenet - load balancing\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Zen Load Balancer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Zen Load Balancer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"netentsec Technology - Log Analysis\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u65e5\\u5fd7\\u5206\\u6790\\u4e2d\\u5fc3 \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u7f51\\u5eb7\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-F660\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"F660\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"skin/priorgreen/css/login.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"zte\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-EAP\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EAP220\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/login/forbidden\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Salien-software system\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u65f6\\u6797\\u8f6f\\u4ef6\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"images/login/msn/favicon.ico\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u5317\\u4eac\\u5e02\\u65f6\\u6797\\u7535\\u8111\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Authine-H3-BPM system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3 BPM Suite\\u4fe1\\u606f\\u5316\\u7684\\u6700\\u4f73\\u5b9e\\u8df5\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Blue Shield - intrusion detection\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"bluedon-idp - Login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Jiasi Safety - Falcon Host Security Response System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"majorsec\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dell-OpenManage\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OpenManage\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"alt=\\\\\\\"OpenManage\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"/oem//data/images/logo.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"url=/servlet/OMSALogin?msgstatus='\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huawei- Smart Call Center\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HUAWEI \\u667a\\u80fd\\u547c\\u53eb\\u4e2d\\u5fc3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Jieyi Yi Jing - customer service system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/sso/client/passer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"jqXHR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Inspur-AS5500G2\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Inspur AS5500G2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\\\\\\"productName\\\\\\\": \\\\\\\"Inspur AS5500G2\\\\\\\",\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Web2py\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Powered-By: web2py\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<meta name=\\\\\\\"generator\\\\\\\" content=\\\\\\\"Web2py \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-Powered-By: web2py\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"web2Project\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Set-Cookie: web2project\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"</head><body>Fatal Error. You haven't created a config file yet.<br/><a href=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Set-Cookie: web2project\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Web2\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Web2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: Web2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Array-VPN\",\n  \"logic\": \"(a&&b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"APV WebUI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"AVX WebUI\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Array APV \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Anheng Information - Firewall\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"scripts/web-common.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DbApp Security\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tiandune letter - Internet behavior management system\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ActiveXObject\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"name=\\\\\\\"dkey_login\\\\\\\" \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"repeat-x left top\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AVAYA-ArrayOS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ArrayOS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Luopan-Hims-Hotel Cloud Computing Service\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GB_ROOT_DIR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"maincontent.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"HIMS\\u9152\\u5e97\\u4e91\\u8ba1\\u7b97\\u670d\\u52a1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Adobe-Magento\",\n  \"logic\": \"(a&&b) ||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/skin/frontend/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"BLANK_IMG\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Magento, Varien, E-commerce\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Redkiwi-Cloud\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Redkiwi-Cloud\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TiPask companies products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"tipask\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"zikula-framework\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZIKULASID1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZIKULASID2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ZIKULASID3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"ZIKULASID1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"ZIKULASID2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"ZIKULASID3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Water Turbine - Water Conservancy Information Monitoring Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div class=\\\\\\\"head_right\\\\\\\" onclick=\\\\\\\"window_close()\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JUCI\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"JUCI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/js/50-juci-event.js\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SONY-LIV\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Sony LIV\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"http://sonyliv.com/asset/socialShareLogo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<meta name=\\\\\\\"author\\\\\\\" content=\\\\\\\"Sony Pictures Networks India Pvt. Ltd\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<meta name=\\\\\\\"twitter:image\\\\\\\" content=\\\\\\\"http://sonyliv.com/asset/socialShareLogo\\\\\\\"/>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"content=\\\\\\\"Sony LIV\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZZZCMS\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/?brandlist/zzzcms\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \".banner .in_business ul li dd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"zzzcms\\u7f51\\u7ad9\\u7ba1\\u7406\\u7cfb\\u7edfzzzcms.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u5f00\\u6e90\\u514d\\u8d39\\u5efa\\u7ad9\\u7cfb\\u7edfzzzcms.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GitStack-\\u4ee3\\u7801\\u7ba1\\u7406\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"^gitstack/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PPVOD-\\u89c6\\u9891\\u7ba1\\u7406\\u7cfb\\u7edf\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PPVOD Copyright\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PPVOD\\u89c6\\u9891\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Polymerization Technology - Unified Certification Management System\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"action=\\\\\\\"Login.aspx\\\\\\\" id=\\\\\\\"ctl00\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"background-color: #4a93be;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u805a\\u5408\\u7edf\\u4e00\\u8ba4\\u8bc1\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JeeSite\",\n  \"logic\": \"((a||b) &&c) ||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"jeesite.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"jeesite.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"jeesite.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Set-Cookie: jeesite.session.id=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Set-Cookie: jeesite.session.id=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fastadmin-frame\",\n  \"logic\": \"a||b||c||d|| (e&& (f||g))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Copyright \\u00a9 fastadmin.net\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FastAdmin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"class=\\\\\\\"navbar-brand\\\\\\\">FastAdmin</a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<a href=\\\\\\\"/\\\\\\\" class=\\\\\\\"navbar-brand\\\\\\\">FastAdmin</a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"fastadmin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"<h1>FastAdmin</h1>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"fastadmin.net\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Gold drive software - Gold drive mobile library system\",\n  \"logic\": \"a||b||c|| (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"onclick=\\\\\\\"change('Book');\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/opac/periodicals\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"class=\\\\\\\"jp-searchTabs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u91d1\\u76d8\\u8f6f\\u4ef6\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"\\u56fe\\u4e66\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"innotube-Manager\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ITGuard-Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ITGuard-Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"images/intro/lin_bottom_nocr.gif\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D-LINK-DIR-816L\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div class=\\\\\\\"modelname\\\\\\\">DIR-816L\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \">Product Page : DIR-816L<a href=\\\\\\\"javascript:check_is_modified('http://support.dlink.com/')\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oriental Thinking - High Speed ??Traffic Management System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OfflineService/ShowDownloadMessage.aspx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"add by sll\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"eyoucms\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"powered by eyoucms\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"name=\\\\\\\"generator\\\\\\\" content=\\\\\\\"eyoucms\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"nps\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"url: \\\\\\\"/login/verify\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"serializeArray()\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Checkpoint-Firewall\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Checkpoint Firewall\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Checkpoint Firewall\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"CheckPoint\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"FireWall\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DSR-250\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div class=\\\\\\\"floatL txt01\\\\\\\">Product Page: DSR-250\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Unified Services Router - DSR-250 </div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DSR-500N\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div class=\\\\\\\"floatL txt01\\\\\\\">Product Page: DSR-500N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Unified Services Router - DSR-500N </div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"DSR-500N\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DSR-150N\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div class=\\\\\\\"floatL txt01\\\\\\\">Product Page: DSR-150N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DSR-150N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Unified Services Router - DSR-150N </div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DSR-1000\",\n  \"logic\": \"a||b||c|| (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div class=\\\\\\\"floatL txt01\\\\\\\">Product Page: DSR-1000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DSR-1000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Unified Services Router - DSR-1000 </div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"D-Link : Unified Services Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"DSR-1000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DSR-250N\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div class=\\\\\\\"floatL txt01\\\\\\\">Product Page: DSR-250N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Unified Services Router - DSR-250N </div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-Meraki-MR72\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Meraki MR72\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-Meraki-MR16\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Meraki MR16\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dayrui-poscms\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/statics/admin/global/plugins/font-awesome/css/font-awesome.min.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-Meraki-MR32\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Meraki MR32\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-Meraki-MR53\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Meraki MR53\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WatchGuard-XTM505\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"XTM505\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-Meraki-MR34\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Meraki MR34\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LINKEDCARE-E Watching Tooth Yunkou Mali Clinics Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"e\\u770b\\u7259\\u4e91\\u53e3\\u8154\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WatchGuard-XTM33-W\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"XTM33-W\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-S5720S\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"S5720S\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"S5720S\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: HUAWEI-s5720s\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: HUAWEI-s5720s\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AliyunMQS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: AliyunMQS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: AliyunMQS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-Prosafe-Click-Switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Netgear Prosafe Click Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-Prosafe-Plus-Switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Netgear Prosafe Plus Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-GS724T\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"http://kbserver.netgear.com/products/GS724T.asp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NetGear GS724T\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"5MP-Network-Camera\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"5MP Network Camera\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DIR-815\",\n  \"logic\": \"a||b|| (c&&d&&e) ||f||g||h||i\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: DIR-815 web server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: DIR-815 web server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"DIR-815\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"target=\\\\\\\"_blank\\\\\\\">DIR-815</a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"<div class='model'>DIR-815</div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"content=\\\\\\\"DIR-815\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"class='title'>DIR-815/AC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR350\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cplogin.model = \\\\\\\"IBR350\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Login :: IBR350\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR600LP3\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cplogin.model = \\\\\\\"IBR600LP3\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Login :: IBR600LP3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR650P\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cplogin.model = \\\\\\\"IBR650P\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Login :: IBR650P\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR650BLP4\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cplogin.model = \\\\\\\"IBR650BLP4\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Login :: IBR650BLP4\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"IBR650BLP4\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR1150\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cplogin.model = \\\\\\\"IBR1150\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Login :: IBR1150\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-CR4250\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cplogin.model = \\\\\\\"CR4250-PoE\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"cplogin.model = \\\\\\\"CR4250\\\\\\\";\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VERTIV-MPU108E-Explorer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MPU108E \\u8d44\\u6e90\\u7ba1\\u7406\\u5668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MPU108E Explorer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR600P\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: IBR600P\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR350L\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: IBR350L\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cradlepoint IBR350L\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR600E\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cplogin.model = \\\\\\\"IBR600E\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Login :: IBR600E\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR1150LP6\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cplogin.model = \\\\\\\"IBR1150LP6\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Login :: IBR1150LP6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR600LP2-EU\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: IBR600LP2-EU\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR600LE2\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cplogin.model = \\\\\\\"IBR600LE2\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Login :: IBR600LE2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR650LP3\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cplogin.model = \\\\\\\"IBR650LP3\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Login :: IBR650LP3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Chuangxing Weiye Campus Network\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"javascripts/float.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"vcxvcxv\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sub-software - Academic Administration System\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"style/base/jw.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"\\u7ad9\\u70b9\\u4ecb\\u7ecd\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u6b63\\u65b9\\u6559\\u52a1\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"First Year - Finance Software\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"yuannian.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/image/logo/yuannian.gif\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yonyou-UFIDA-NC\",\n  \"logic\": \"(a&&b) || (c) ||d||e||f|| (g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"UFIDA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"logo/images/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"logo/images/ufida_nc.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Yonyou NC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<div id=\\\\\\\"nc_text\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"<div id=\\\\\\\"nc_img\\\\\\\" onmouseover=\\\\\\\"overImage('nc');\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"\\u4ea7\\u54c1\\u767b\\u5f55\\u754c\\u9762\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"UFIDA NC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mirapoint\",\n  \"logic\": \"(a&&b) ||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/wm/mail/login.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"server: Mirapoint\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"server: Mirapoint\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Mirapoint POP3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR650LE2\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cplogin.model = \\\\\\\"IBR650LE2\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Login :: IBR650LE2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR900LP5\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: IBR900LP5\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR650LP2-EU\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cplogin.model = \\\\\\\"IBR650LP2-EU\\\\\\\";\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR900L\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cplogin.model = \\\\\\\"IBR900L\\\\\\\";\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-AER3150\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cplogin.model = \\\\\\\"AER3150\\\\\\\";\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Anli Technology - Teaching System\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \" id=\\\\\\\"lblname\\\\\\\">\\u7248\\u6743\\u6240\\u6709\\uff1a\\u4e0a\\u6d77\\u5b89\\u8109\\u8ba1\\u7b97\\u673a\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"id=\\\\\\\"lblname1\\\\\\\">\\u7248\\u6743\\u6240\\u6709\\uff1a\\u4e0a\\u6d77\\u5b89\\u8109\\u8ba1\\u7b97\\u673a\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<font color=\\\\\\\"#000000\\\\\\\">\\u4e0a\\u6d77\\u5b89\\u8109\\u8ba1\\u7b97\\u673a\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8</font>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-GS748T\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"gs748tImage spacer50Percent topAlign rightHAlign\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NetGear GS748T\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"GS748Tv4\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-GS108T\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NetGear GS108T\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"gs108tImage spacer50Percent topAlign rightHAlign\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sanning Star - OA Enterprise Intelligent Office Automation System\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"input name=\\\\\\\"S1\\\\\\\" type=\\\\\\\"image\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"input name=\\\\\\\"S1\\\\\\\" type=image\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"count/mystat.asp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-GS510TP\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"gs510tpImage spacer50Percent topAlign rightHAlign\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"GS510TP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NetGear GS510TP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-GS716T\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"gs716tImage spacer50Percent topAlign rightHAlign\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NetGear GS716T\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Anymacro-mail system\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"LOGIN_KEY\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"document.aa.F_email\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"AnyWebApp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"ESMTP AnyMacro\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MOXA-AWK-3121\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var http_req =\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"AWK-3121\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Web-Crossing-Server\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Web Crossing\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Web Crossing\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"set-cookie: webxSess\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"set-cookie: webxSess\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alert-Logic-Cloud-Defender\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Alert Logic Appliance\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRAC-product\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<h1>Available Projects</h1>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"wiki/TracGuide\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"trac_session\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"trac_session\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Powered by Trac\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"seceon-OTM\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Use this if you want to run the Seceon module of Kibana.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Seceon OTM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Promisec-terminal security\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"name=\\\\\\\"promisecActiveX\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Redseal - Digital Defense Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"alt=\\\\\\\"RedSeal, Inc.\\\\\\\"/></a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ThreatConnect-Platform\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ThreatConnect\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: ThreatConnect\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"ThreatConnect\\\\\\\" />\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DPtech-IPS2000\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DPTECH IPS2000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"this is DPTECH\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"IPS2000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hillstone-StoneOS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"'Hillstone StoneOS Software Version \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LINKSYS-E1200\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Linksys E1200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Linksys E1200\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Linksys E1200\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-HG8540M\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var productname = 'HG8540M'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"tao-long-YunGouCMS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/yungou/css/Comm.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"YunGouCMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-HG8121H\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var productname = 'HG8121H'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var productname = 'HG8121H';\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"legendsec-SECADS-3600 application delivery system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7f51\\u795eSecADS 3600\\u5e94\\u7528\\u4ea4\\u4ed8\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cloud EC\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/17rec.html\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ALCASAR\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"valoriserDiv5\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Atmail- mail system\",\n  \"logic\": \"a||b||c||d||e||f||g||h\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by Atmail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"atmail6\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"atmail6\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"FixShowMail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/index.php/mail/auth/processlogin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"<input id=\\\\\\\"Mailserverinput\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Atmail POP3 server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Atmail IMAP/POP3 server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Munin-monitoring system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Auto-generated by Munin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"munin-month.html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OpenNMS-product\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/opennms/login.jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/opennms/login.jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/css/gwt-asset.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"OpenNMS\\u00ae is a registered trademark of\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"opennms web console\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"/opennms/index.jsp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"pintsize.css\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"pintsize.min.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"pintsize.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"clipboard.js\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"clipboard.min.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"clipboard.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"okayNav.js\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"jquery.okayNav.min.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"jquery.okayNav.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huawei-S5730 switch\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"S5730\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"S5730\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Materialize-CSS\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/materialize.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/materialize.min.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"materialize/materialize\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"materialize/css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u534e\\u4e3a-S7700\\u4ea4\\u6362\\u673a\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"S7700\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"S7700\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR650NM\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: IBR650NM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR650LP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: IBR650LP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"QNAP-NAS\",\n  \"logic\": \"((a&&b) ||c||d||e) &&f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"http server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"redirect_suffix\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/css/qnap-default.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/redirect.html?count=\\\\\\\"+Math.random()\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/indexnas.cgi?counter=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"OpenMas\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OpenMas\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"loginHead\\\\\\\"><link href=\\\\\\\"App_Themes\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hubspot-Company Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"js.hubspot.com/analytics\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CakePHP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cakephp=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"cakephp=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Django\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"__admin_media_prefix__\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"csrfmiddlewaretoken\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WebAsyst-Shop-Script\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"http://www.shop-script.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by WebAsyst Shop-Script <a href=\\\\\\\"http://www.shop-script.com/\\\\\\\" style=\\\\\\\"font-weight: normal\\\\\\\">shopping cart software</a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Webduino\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Webduino\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: Webduino\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Webgrind\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span id=\\\\\\\"invocation_sum\\\\\\\"></span> different functions called in <span id=\\\\\\\"runtime_sum\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"webfs\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: webfs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: webfs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"WebEye-Network-Camera\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<p>Click <a href=\\\\\\\"./login.ml?form_method=get\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<meta name=\\\\\\\"generator\\\\\\\" content=\\\\\\\"WebGateInc\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"WebEye User Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"WebEye Index Page\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"WebEye Java Applet Page\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Adobe-CQ5\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"_jcr_content\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CPANEL-Management Products\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Set-Cookie: cprelogin=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Set-Cookie: cprelogin=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"cPanel, Inc.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"cPanel \\u767b\\u5f55\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tianfeiyun - micro gate\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/tpl/Home/weimeng/common/css/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WebObjects\",\n  \"logic\": \"(a&&b) ||c||d||e||f||g||h||i||j||k||l\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WebObjects\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"wosid\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"x-webobjects-customenv\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"x-webobjects-server-name\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"x-webobjects-adaptor-version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"x-webobjects-loadaverage\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"x-apple-application-instance\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"x-webobjects-customenv\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"x-webobjects-server-name\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"x-webobjects-adaptor-version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"x-webobjects-loadaverage\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"x-apple-application-instance\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Subrion-CMS\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Powered-Cms: Subrion CMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Subrion CMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"http://www.subrion.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"content=\\\\\\\"Subrion CMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"X-Powered-Cms: Subrion CMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Digital authentication - timestamp server\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u65f6\\u95f4\\u6233\\u670d\\u52a1\\u5668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5317\\u4eac\\u6570\\u5b57\\u8ba4\\u8bc1\\u80a1\\u4efd\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"typecho-CMS\",\n  \"logic\": \"a|| (b&&c) ||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"generator\\\\\\\" content=\\\\\\\"Typecho\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5f3a\\u529b\\u9a71\\u52a8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Typecho\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"content=\\\\\\\"Typecho\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"class=\\\\\\\"typecho-login-wrap\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-Lotus-Sametime\",\n  \"logic\": \"a||b||c||d||e||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Sametime Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Sametime Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"sametime/avtest.js\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"href=\\\\\\\"sametime/meetingCenter-moz.css\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"class=\\\\\\\"sametimeMeetingsButtonTransparent\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"sametime/themes/images/blank.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"IBM Lotus Sametime\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VPOP3-Mail-Http-Server\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: VPOP3 Mail Http Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: VPOP3 Mail Http Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"HUAWEI-UPortal2800\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: UPortal2800\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: UPortal2800\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MiReeNe-Webdns\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: MireeneWebdns\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: MireeneWebdns\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Veeva-Customer Master Data Management Platform\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Veeva Network\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Veeva Network\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-ProCurve-Web-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: ProCurve Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: ProCurve Web Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Beego-Server\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: beegoServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: beegoServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"SingleComm-Analysis Platform\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: SingleComm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: SingleComm\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RAINLOOP-WebMail\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: RainLoop\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: RainLoop\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"axigen-Webadmin\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Axigen-Webadmin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Axigen-Webadmin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<div class=\\\\\\\"name\\\\\\\">Axigen&nbsp;WebAdmin</div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"WebAdmin\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"3S_WebServer\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: 3S_WebServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: 3S_WebServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"WOWZA-WowzaStreamingEngine\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: WowzaStreamingEngine\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: WowzaStreamingEngine\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"QUALCOMM-router\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: QC-Webs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: QC-Webs\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Management-Switch-Web-Server\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Management Switch Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Management Switch Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"APN-HTTPD\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: APN HTTPD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: APN HTTPD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Ralink-HTTPD\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Ralink HTTPD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Ralink HTTPD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Coship-Electronics-Embedded-Web-Server\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Coship Electronics Embedded Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Coship Electronics Embedded Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"AIOHTTP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: aiphttp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: aiphttp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"panweb-Server\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: PanWeb Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Router\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: PanWeb Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"router\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Four_Faith-\\u516c\\u53f8\\u4ea7\\u54c1\",\n  \"logic\": \"(a&&b&&c&&d) || (e&&f&&g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: httpd_four-faith\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: httpd_four-faith\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"x-powered-by: ThinkPHP\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Follett - Education Products\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Destiny\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Destiny\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"mitmproxy\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: mitmproxy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: mitmproxy\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Xitami\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Xitami\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Xitami\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NAGRA-OpenTV\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: OpenTV\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: OpenTV\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u5408\\u52e4\\u79d1\\u6280-XGS3700\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"XGS3700\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"XGS3700\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP-LINK-TL-MR6400\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TL-MR6400\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var modelname=\\\\\\\"TL-MR6400\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"TP-LINK LTE Wireless N Router MR6400\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"TP-LINK MR6400\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"TL-MR6400\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"realm=\\\\\\\"TP-LINK LTE Wireless N Router MR6400\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APACHE-ActiveMQ\",\n  \"logic\": \"((a|| (b&&c) ||d) &&e&&f&&g) || (h||i||j) ||k\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Apache ActiveMQ\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"8161\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Jetty\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"ActiveMQRealm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"server:ActiveMQ\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Magic:ActiveMQ\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"realm=\\\\\\\"ActiveMQRealm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"Apache ActiveMQ\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-SRX5308\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SRX5308 login: \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Gigabit Quad WAN SSL VPN Firewall SRX5308\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXV10-I508C\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZXV10-I508C\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AVM-FRITZ!Box7490\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FRITZ!Box7490\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huaxun Ark - Concentrated Wireless Controller\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var url=\\\\\\\"resetWebsvr.php?act=reset\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u534e\\u8baf\\u65b9\\u821f - \\u96c6\\u4e2d\\u65e0\\u7ebf\\u63a7\\u5236\\u5668\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Vectra companies products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"vectra.base.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TERADEK-CUBE\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"index.cs?header=0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Teradek\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Administrative Console\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-HG8546M\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var productname = 'HG8546M\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var productname = 'HG8546M';\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TipPay - Tu Rui Green Shield Data Release System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7eff\\u76fe\\u4fe1\\u606f\\u5b89\\u5168\\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huaxia Express - Host SE Series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location = \\\\\\\"login_simple.jsp\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VPN358 electronic resource access statistics system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"form-actions J_add_ip_actions\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/lib/bootstrap/ico/favicon.ico\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PBOOTCMS\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Set-Cookie: pbootsystem=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Set-Cookie: pbootsystem=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"PbootCMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"XYHCMS\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Powered-By: XYHCMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Powered-By: XYHCMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Power by XYHCMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"greencms\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Powered-By: GreenCMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Powered-By: GreenCMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-TM-G5240\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TM-G5240\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TM-G5240\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u5b87\\u89c6\\u79d1\\u6280-NVR516\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NVR516\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NVR516\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-SR6608\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"H3C SR6608\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SR6608\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-WBR204g+\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"H3C WBR204g+\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Basic realm=\\\\\\\"H3C WBR204g+\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-WBR204n\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"H3C WBR204n\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Basic realm=\\\\\\\"H3C WBR204n\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-S1626\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"H3C S1626\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var devicename =  \\\\\\\"H3C S1626\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Basic realm=\\\\\\\"H3C S1626\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"S1626\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-BR104H\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"H3C BR104H\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Basic realm=\\\\\\\"H3C BR104H\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-BR204+\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"H3C BR204+\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Basic realm=\\\\\\\"H3C BR204+\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Digi-ConnectPort-WAN-VPN\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ConnectPort WAN VPN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"ConnectPort WAN VPN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Flashcom streaming media server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: FlashCom\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: FlashCom\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-HW9303\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: HW9303\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HW9303\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IPX-DDK-1700D\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"DDK-1700D\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DDK-1700D\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IPX-DDK-1700BC\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"DDK-1700BC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DDK-1700BC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ajenti-Server-Admin-Panel\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/ajenti:static/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"action=\\\\\\\"/ajenti:auth\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Ajenti\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-IP1020\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Alcatel IP1020\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Alcatel IP1020\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-7250\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Alcatel-Lucent 7250\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Alcatel-Lucent 7250\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u5b87\\u89c6\\u79d1\\u6280-Uniview-VM8500\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Uniview VM8500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"VM8500-IMOS110\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TeleWell-EAV510\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TW-EAV510\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TW-EAV510\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"TW-EAV510\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-SecPath-ACG1000\",\n  \"logic\": \"a|| (b&&c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C SecPath ACG1000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"./js/web_auth.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"var is_mobi = is_mobile()\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"var msg1=\\\\\\\"username can not be empty\\\\\\\"\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"LOYTEC-LINX\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"device_info/device_info\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SINAPSI-ESOLA photovoltaic detection system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"eSolar\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Antiweb\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Anti-Web\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Antiweb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Anti-Web\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Antiweb\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SIEMENS-S7-1200\",\n  \"logic\": \"a||b||c||d||e||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"6ES7 214\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"6ES7 212\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"6ES7 215\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"6ES7 211\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"6ES7 212\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"6ES7 214\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"6ES7 215\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CSCMS\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"tag_adfo dis_wap\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/js/cscms.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Cscms-\\u591a\\u5143\\u5316\\u5185\\u5bb9\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie-EG1000M\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EG1000M\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-MSR3620\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C MSR3620\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MSR3620\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DPtech-SRG1000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DPTECH SRG1000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-RV120W\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RV120W\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"RV120W\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Organization: Cisco Systems, Inc.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie-RG-NPE\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RG-NPE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-RV325\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco RV325\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco Small Business RV325\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"RV325\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"rv325.rcwwolfs.nl\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"TP-LINK-TL-SC2000N\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TL-SC2000N\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-RV130W\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco Small Business RV130W\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-RV320\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco Small Business RV320\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco RV320\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ceph file system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ceph\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"ceph-mgr\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie-NPE50E\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Engine(NPE50E)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PLJXX_NPE50E\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie-RG-N18010\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"N18010\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Rockwell-1766-L32BXB\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"1766-L32BXB \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APC-TM502B\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TM502B\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kaonmedia-VM1700D\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VM1700D\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APC-TM602B\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TM602B\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APC-WTM652G\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WTM652G\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APC-TM602G\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TM602G\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APC-TM502G\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TM502G\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AmbitWireless-U10C019\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MODEL: U10C019\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-Integrated-Management-Controller\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco Integrated Management Controller\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco Integrated Management Controller\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bintec_elmeg companies\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BinTec \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-2801C\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco IOS Software, 2801C\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Smarsh-SmarshMail!\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SmarshMail!\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hmail\",\n  \"logic\": \"a|| (b&&c) || (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Hmail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"220\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"211 DATA HELO EHLO MAIL NOOP QUIT RCPT RSET SAML TURN VRFY\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"+OK POP3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"-ERR Invalid command in current state.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-Catalyst-2960\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Catalyst 2960\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-Catalyst-3560\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Catalyst 3560\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MOXA-NPort-5210\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NPort 5210\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MOXA-NPort-5150\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NPort 5150\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"McAfee-Sidewinder-8\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Sidewinder 8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXR10-5928FI\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZXR10 5928FI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZXR10_5928FI\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXR10-3928A\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZXR10 3928A\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZXR10_3928A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXR10-3928E\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZXR10 3928E\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZXR10_3928E\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXR10-3228A\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZXR10 3228A\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZXR10_3228A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXR10-3952E\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZXR10 3952E\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZXR10_3952E\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"kamailio-sip-server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: kamailio\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: kamailio\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sprint-Company Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: SpringT\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"STARFACE-PBX\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: STARFACE PBX\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FreeESwitch-Company Products\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Freeswitch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: FreeSWITCH\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CREARO-streaming media server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Crearo Rtsp Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Red Flag - Cluster Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<b>\\u767b\\u5f55\\u5230\\u7ea2\\u65d7\\u96c6\\u7fa4\\u7ba1\\u7406\\u7cfb\\u7edf</b></td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"YiOks - Campus Football Management Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<script>document.location='/index.mpl?a=login'</script>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Raritan-Dominion-KSX\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Dominion KSX \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"productType\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ECOR\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ECOR264\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ECOR264\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tas_tech-streaming server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: TAS-Tech Streaming Server V100R001\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IQEYE-streaming media server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: IQinVision\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-R7000\",\n  \"logic\": \"a||b||c||d||e|| (f&&g) ||h||i||j||k\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Netgear-R7000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Netgear R7000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ESI_NETGEAR_R7000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"R7000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"NetgearR7000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Netgear R7000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"id=\\\\\\\"ModuleName\\\\\\\">Nighthawk R7000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"content=\\\\\\\"R7000\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"NETGEAR R7000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"NetgearR7000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"moosefs\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"mfs.cgi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"under-goal files\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-Atlanta-CableModem\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Scientific-Atlanta Cable Modem\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"yongyou - Business War Practice Platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login_Main_BG\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Login_Owner\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AirLink-modem\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Modem@AirLink.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Modem@AirLink.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"proofpoint-Sendmail\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Sendmail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Huadun(SecureEmail)\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Oracle-Messaging-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Oracle Communications Messaging Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Oracle Communications Messaging Exchange Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-Cable-Modem\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco Cable Modem\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Aethra-Telecommunications-OS\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"atos\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Aethra Telecommunications Operating System\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"atos\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Macrec-DVR\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Macrec DVR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Operation and safety management platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u8fd0\\u7ef4\\u5b89\\u5168\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"usm\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ICONICS-BACnet-Server\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ICONICS Inc.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"BACnet Server for Windows V1.0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ICONICS, Inc.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"BACnet Server for Windows V1.0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Exim-\\u90ae\\u4ef6\\u670d\\u52a1\\u5668\",\n  \"logic\": \"a||b||c||d||e||f||g||h||i||j||k||l||m||n||o||p||q||r||s||t||u||v||w||x||y||z||dimg||IaWc||HleL||XIyP||fKET||FNlc||DIZw||jFPo||XmsN||dJPX||PuZT|| (tbgk&&QYwt&&BEmW)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ESMTP Exim\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ESMTP Server Ready (this is exim)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ESMTP Service Exim\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Exim ESMTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Exim MTA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"EXIM mail services\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Exim - Mail System\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Exim Mail Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"SMTP Exim\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Exim Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"Mail SMTP Server ( Exim )\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"ESMTP (based on exim)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"This is EXIM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"ESMTP by Exim\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"Exim 4\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"Exim and Linux\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"q\",\n    \"feature\": \"Exim IMAP4\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"r\",\n    \"feature\": \"Exim 4.92\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"s\",\n    \"feature\": \"Exim 4.93\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"t\",\n    \"feature\": \"Exim 4.94.2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"u\",\n    \"feature\": \" Exim 4.93.0.4  \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"v\",\n    \"feature\": \" Exim 4.89\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"w\",\n    \"feature\": \"Exim 4.72\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"x\",\n    \"feature\": \"EXIM 4.82\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"y\",\n    \"feature\": \"Exim 3.36\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"z\",\n    \"feature\": \"Exim 4.69\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"dimg\",\n    \"feature\": \"Exim 4.70\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"IaWc\",\n    \"feature\": \"EXIM 4.90_1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"HleL\",\n    \"feature\": \"Exim 4.80.1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"XIyP\",\n    \"feature\": \"EXIM 4.74\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"fKET\",\n    \"feature\": \"Exim 4.76\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"FNlc\",\n    \"feature\": \"exim 4.87\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"DIZw\",\n    \"feature\": \"Exim 4.92.2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"jFPo\",\n    \"feature\": \"Exim 4.81\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"XmsN\",\n    \"feature\": \"EXIM 4.84\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"dJPX\",\n    \"feature\": \"EXIM 4.80\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"PuZT\",\n    \"feature\": \"Exim v4.94\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"tbgk\",\n    \"feature\": \"220-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"QYwt\",\n    \"feature\": \"214-Commands supported:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"BEmW\",\n    \"feature\": \"214 AUTH HELO EHLO MAIL RCPT DATA NOOP QUIT RSET HELP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mindoc-Interface Document Online Management System\",\n  \"logic\": \"a||b|| (c&&d&&e) ||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Mindoc-Version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Mindoc-Version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Powered by MinDoc\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"boa\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"MinDoc \\u63a5\\u53e3\\u6587\\u6863\\u5728\\u7ebf\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"360-CDN\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"http://js.passport.qihucdn.com/\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Middle Software - Consumer Management System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ClientUtil.isff=!ClientUtil.isIE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"alert(\\\\\\\"\\u9910\\u5385\\u7f16\\u53f7\\u4e0d\\u80fd\\u4e3a\\u7a7a\\\\\\\")\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Funyun Network Studio - Network User Management System\",\n  \"logic\": \"a&& (b||c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id='psssdiv'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src='kss_inc/js/jquery.1.3.2.pack.js'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"/kss_inc/js/jquery.1.3.2.pack.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Git\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"git\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WebKnight\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WebKnight\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"WebKnight\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Valley Netan - ValleyCMS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"viewCmsCac.do\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/viewCmsCac.do\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Citec - Construction Fire Protection Networking Detection System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6b63\\u5728\\u4f7f\\u7528\\u817e\\u8bafQQ\\u5e10\\u53f7\\u767b\\u5f55\\u6d88\\u9632\\u8054\\u7f51\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Lenovo-ThinkServer remote management module\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ThinkServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u8fdc\\u7a0b\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Baisheng Intelligent - Intelligent Parking Management System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6c5f\\u897f\\u767e\\u80dc\\u95e8\\u63a7\\u8bbe\\u5907\\u6709\\u9650\\u516c\\u53f8::\\u667a\\u80fd\\u505c\\u8f66\\u573a\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Castel\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CASTEL\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huilin Technology -ISP Access Management System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ISP\\u63a5\\u5165\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"winisp.gif\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AMBUF-\\u5728\\u7ebf\\u8003\\u8bd5\\u7cfb\\u7edf\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5317\\u4eac\\u4f17\\u6052\\u5fd7\\u4fe1\\u79d1\\u6280\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5728\\u7ebf\\u8003\\u8bd5\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MAIPU-system configuration management\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7cfb\\u7edf\\u914d\\u7f6e\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Maipu\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Verizon-CDN\",\n  \"logic\": \"a ||b ||c ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: ECD (\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: ECD (\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: ECS (\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: ECS (\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GPON-Home-Gateway\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GPON Home Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/GponForm/LoginForm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"XWebPageName\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-W860A\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"W860A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fang Zheng Group - Operation Management and Decision Support System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/portal/img/logo.png\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/desktop/ui/custom/getImage?img=iphoneview.png\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DHC-OA system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/extcomponent/security/image/dhc.png\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Azure\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Azure-Webrole-Instance-Id\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Azure-Webrole-Instance-Id\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Windows Azure\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Microsoft Azure\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VNC\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"vnc\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<APPLET code=VncViewer.class archive=VncViewer.jar\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Micro-doctor - Appointment Registration System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var title    = \\\\\\\"\\u9884\\u7ea6\\u6302\\u53f7\\u7cfb\\u7edf\\\\\\\";\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fujitsu-VPN\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SSLVPNLANG\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SSLVPNLANG\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"_FJ_SSLVPN_login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oracle-Commerce-Cloud\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Oraclecommercecloud\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"id=\\\\\\\"oracle-cc\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"Oraclecommercecloud\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Springer-product\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"springercomcountry=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"springercomcountry=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"//static.springer.com/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Meis-Medical Information Management System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<h1 class=\\\\\\\"logo\\\\\\\">\\u6b22\\u8fce\\u4f7f\\u7528 <span class=\\\\\\\"logo_icon\\\\\\\">MEIS</span> \\u533b\\u7597\\u4fe1\\u606f\\u7ba1\\u7406\\u7cfb\\u7edf</h1>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MEIS \\u533b\\u7597\\u4fe1\\u606f\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WebIssues\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<h1>Log in to WebIssues</h1>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/webissues.ico\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<div><input type=\\\\\\\"hidden\\\\\\\" name=\\\\\\\"__formId\\\\\\\" id=\\\\\\\"field-login-__formId\\\\\\\" value=\\\\\\\"login\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WeBid\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://www.webidsupport.com/\\\\\\\">WeBid\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<meta name=\\\\\\\"generator\\\\\\\" content=\\\\\\\"WeBid\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Set-Cookie: WEBID_ONLINE=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Set-Cookie: WEBID_ONLINE=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Joyent-Company Products\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Joyent\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Served-By: Joyent\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"Joyent\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Served-By: Joyent\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yuge - Medical remote influence diagnosis and treatment system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6e14\\u6b4c\\u533b\\u7597\\u8fdc\\u7a0b\\u5f71\\u54cd\\u8bca\\u7597\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5f71\\u50cf\\u8bca\\u7597\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WebPA\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WebPA OS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Web-PA Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<td align=\\\\\\\"right\\\\\\\"><div id=\\\\\\\"inst_logo\\\\\\\"><img src=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WebIIS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"webiis Mini ASP Web WebIIS \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"webiis Mini ASP Web WebIIS \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dian Diagnostics - Report Single Print System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6d59\\u6c5f\\u8fea\\u5b89\\u8bca\\u65ad\\u6280\\u672f\\u80a1\\u4efd\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/resources/pages/img/logo.svg\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LandRay-OA system\",\n  \"logic\": \"(a&&b) || (c&& (d||e)) ||(f&&g&& (h||i))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"lui_login_message_td\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"form_bottom\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u84dd\\u51cc\\u8f6f\\u4ef6 \\u7248\\u6743\\u6240\\u6709\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"j_acegi_security_check\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"\\u6b22\\u8fce\\u767b\\u5f55\\u667a\\u6167\\u534f\\u540c\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"j_acegi_security_check\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"onsubmit=\\\\\\\"return kmss_onsubmit();\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"ExceptionTranslationFilter\\u5bf9SPRING_SECURITY_TARGET_URL \\u8fdb\\u884c\\u672a\\u767b\\u5f55url\\u4fdd\\u6301 \\u8bf7\\u6c42\\u4e2d\\u7684hash\\u5e76\\u4e0d\\u4f1a\\u4f20\\u9012\\u5230\\u670d\\u52a1\\u7aef\\uff0c\\u6545\\u53ea\\u80fd\\u524d\\u7aef\\u5904\\u7406\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"kkDownloadLink link\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FEMR-Smart Outpatient Management System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/res/vendor/bootstrap-3.3.5/css/bootstrap.min.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/res/images/login-bg-1.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u901f\\u8fbe\\u8f6f\\u4ef6-OA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u901f\\u8fbe\\u8f6f\\u4ef6\\u6280\\u672f\\uff08\\u5e7f\\u5dde\\uff09\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"No scale - bat test system\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u8759\\u8760\\u5728\\u7ebf\\u8003\\u8bd5\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u535a\\u5e93\\u533b\\u5b66\\u5728\\u7ebf\\u8003\\u8bd5\\u7cfb\\u7edf\\uff0c\\u6280\\u672f\\u652f\\u6301\\uff1a\\u676d\\u5dde\\u535a\\u5e93\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"/resources/js/upScroll.js\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yongan Technology - Cloud Medical Image Remote Sharing System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"www.yapacs.net\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yong'an Technology - Hospital Cold Chain System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u533b\\u9662\\u51b7\\u94fe\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-2801\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco IOS Software, 2801 Software \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco 2801\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-Mini-Web-Server\",\n  \"logic\": \"(a&&b&&c&&d&&e) || (f&&g&&h&&i&&j)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Mini web server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZTE corp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Mini web server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"ZTE corp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"x-powered-by: ThinkPHP\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"ZyXEL-USG-20\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZyWALL USG 20\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZyWALL USG 20\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"calibre\",\n  \"logic\": \"((a||b) &&c&&d) || (e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: calibre\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"calibre\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"boa\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: boa\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: calibre\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"OphyLink-Company Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ophylink\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DI-IOS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"server: DI-IOS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: DI-IOS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Citadel-Servers\",\n  \"logic\": \"((a||b||c||d||e||f) &&g) || (h&&i)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"webcit=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Citadel Server - powered by\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/styles/webcit.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"- Citadel Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<div class=\\\\\\\"boxlabel\\\\\\\">Citadel Server - powered by\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: WebCit\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Server: WebCit\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Siemens-Building-Technologies\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Siemens Building Technologies\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<br><i>Siemens Building Technologies\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"LANCOM-VPN-1711\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: LANCOM 1711 VPN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"LANCOM 1711 VPN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"/images/prodimg.jpeg\\\\\\\" alt=\\\\\\\"LANCOM 1711 VPN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"src=\\\\\\\"/images/prodimg.jpeg\\\\\\\" alt=\\\\\\\"TEST LANCOM 1711 VPN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Thomson-Gateway\",\n  \"logic\": \"(a&&b) ||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"xAuth_SESSION_ID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Thomson Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"Thomson Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"Thomson Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Thomson Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Filemaker-frame\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"fmi-cookie\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"fmi-cookie\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/fmi/iwp/cgi?-noscript\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WAYOS-Router\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"WayOS \\u591aWAN\\u9ad8\\u6027\\u80fd\\u8def\\u7531\\u5668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"WayOS \\u591aWAN\\u9ad8\\u6027\\u80fd\\u8def\\u7531\\u5668\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_LINK-wireless electric cat\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DHP-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"DHP-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LANCOM-VPN-1781EW\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: LANCOM 1781EW\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: LANCOM 1781EW\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LANCOM-VPN-1781EF\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: LANCOM 1781EF\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: LANCOM 1781EF\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HBase\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HBase\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Powered-By:HBase\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<meta HTTP-equiv=\\\\\\\"REFRESH\\\\\\\" content=\\\\\\\"0;url=/master-status\\\\\\\"/>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"HBase Region\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cuftpd\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CuFTPD\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Thingsquare-Contiki\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Contiki\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Contiki\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Qual-VPN\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Stonesoft Security Engine Firewall/VPN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Crestron-Electronics-Crestron-Webserver\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Crestron Webserver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Crestron Webserver\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OMRON-CJ2M-EIP21\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CJ2M-EIP21\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Argon-VPN\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VPN Firewall\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Argon\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-AMP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Amp-Cloud\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Amp-Cloud\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Beijing Galaxy Weiye - Video Monitoring\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"psd.innerhtml = '<embed id=\\\\\\\"PCClient\\\\\\\" type=\\\\\\\"application/WebDvrCtrl/' + ctl_version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"WebDvrCtrl.SetDvrIP(window.location.host);\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tilgin-Router\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/compressed-control.css\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<A href=\\\\\\\"/status/\\\\\\\" class=\\\\\\\"menuitem\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<H1 id=\\\\\\\"title\\\\\\\">Welcome to the Tilgin router</H1>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"VOOD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<A href=\\\\\\\"/wizard/\\\\\\\" class=\\\\\\\"\\\\\\\" title=\\\\\\\"Wizard\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VRITUAL_ACCESS-\\u516c\\u53f8\\u4ea7\\u54c1\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Virtual Access \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Proxim-WireLes-Tsunami router\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Tsunami QB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Tsunami MP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ubiquoss-Switch\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ubiquoss Switch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Ubiquoss\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRANGO-company products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Trango Systems Inc. SNMP \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOSHIBA-TEC-B series printers\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TOSHIBA TEC B-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Piolink-Tifront Products\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TiFRONT-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<em>TiFRONT, the Security Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Chinacache-SMS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: SMS (Chinacache Smart Media Server)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: SMS (Chinacache Smart Media Server)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TIGER-\\u516c\\u53f8\\u4ea7\\u54c1\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<link rel=\\\\\\\"stylesheet\\\\\\\" href=\\\\\\\"/include/firedigit.css\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<link rel=\\\\\\\"stylesheet\\\\\\\" href=\\\\\\\"/include/tms.css\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/include/tiger.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"location: network/index.php\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Tiger IP Connect\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FOUNDER-full media editing system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/newsedit/newsedit/css/login_1.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-USG6320\",\n  \"logic\": \"((((a||b) &&c) ||d) &&e) ||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"(logo_type)? document.write(logo_type):document.write('')\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var logo_type = GetCookie('logotype')\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"USG6320\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"&Huawei USG6320&langfrombrows=zh-CN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Huawei USG6320\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Secospace USG6320\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Printware-printer\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TallyGenicom \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DRCOM-Company Product\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Drcom-Server/internet\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oracle-XDB\",\n  \"logic\": \"a||b|| (c&&d) || (e&&f) || ((g||h) &&i&&j)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Oracle XML DB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Oracle XML DB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"XDB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Oracle\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"XDB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Oracle\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Oracle XML DB/Oracle9i Enterprise Edition\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Oracle XML DB/Oracle Database\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Samsung-laser printer\",\n  \"logic\": \"a||b||c||d||e||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: HP HTTP Server; Samsung\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" HP HTTP Server; Samsung\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Samsung SL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Samsung M332x\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Samsung CLX-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Samsung SCX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Samsung CLP-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ricoh-Network-Printer\",\n  \"logic\": \"(a||b) ||c||d||e||f|| (((g&&h) || (i&&j)) &&k)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RICOH Network Printer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"RICOH Network Scanner\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"infotec MP \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"RICOH MP \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"RICOH Pro \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"RICOH SP \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"setTimeout('window.location=\\\\\\\"main.asp?lang=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"document.cookie=cookie_name + \\\\\\\"=\\\\\\\" + Language + \\\\\\\"; expires=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Web Image Monitor\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"cookieonoffchecker=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Map/Reduce\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"mapreduce\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"It looks like you are making an HTTP request to a Hadoop IPC port\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Name: mapreduce\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Secusys-TC348NT Security Access Module\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TC348NT Pannel\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hadoop-Administration\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Hadoop Administration\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/static/hadoop.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"class=\\\\\\\"navbar-brand\\\\\\\">Hadoop</div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fikker-Webcache\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Fikker/Webcache\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Fikker/Webcache\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yunfan accelerates -CDN\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: YunFanCDN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: YunFanCDN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Bai Mountain Cloud Technology - Bai Mountain Cloud\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: baishancloud-nginx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: baishancloud-nginx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"ZyXEL-USG40\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"USG40\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"USG40\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP-Link-Archer-A10\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var modelname=\\\\\\\"Archer A10\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-Archer-VR2800\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var modelname=\\\\\\\"Archer VR2800\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DzzOffice- product\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"dzz/system/scripts/jquery.jstree.min.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"dzz/scripts/dzz_min.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<a href=\\\\\\\"http://www.dzzoffice.com\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"misc.php?mod=sendmail\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-USG60\",\n  \"logic\": \"a|| ((b||c) &&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"USG60\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"model\\\\\\\" id=\\\\\\\"model\\\\\\\" name=\\\\\\\"model\\\\\\\">USG60</div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/ext-js/app/common/zyFunction.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"USG60\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Whale cloud - TRADERENCRM\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TradeRenCRM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"EMLSOFT\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-USG210\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"USG210\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"USG2100\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"USG210\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cPanel-webmail\",\n  \"logic\": \"a&&b&& (c||d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"webmail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"cpanel\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"i_cpanel_snowmen\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<a href=\\\\\\\"https://go.cpanel.net/privacy\\\\\\\" target=\\\\\\\"_blank\\\\\\\">Privacy Policy</a></div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-NX-OS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco NX-OS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huawei companies\",\n  \"logic\": \"a&& (b||c) ||d||e||f|| (g&& (h||i)) ||j\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"VRP (R) software\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Huawei Technologies\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Copyright &copy; Huawei Technologies Co.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Huawei Technologies Co., Ltd.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Vendor: rndby/huawei\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Warning: Telnet is not a secure protocol, and it is recommended to use Stelnet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"a private communication system\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Huawei Technologies\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Huawei\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-VMG1312-B10A\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var modelname= 'VMG1312-B10A'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZyXEL VMG1312-B10A\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"VMG1312-B10A Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"VMG1312-B10A\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Welcome toVMG1312-B10A\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Welcome to VMG1312-B10A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ReeCam-IP-Camera\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ReeCam\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"360 web server\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ReeCam\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"360 web server\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Teradici-remote management\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Teradici \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ModSecurity-\\u4ea7\\u54c1\",\n  \"logic\": \"((a||b||c) &&d&&e) || ((f||g) &&h&&i)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Mod_Security\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"This error was generated by Mod_Security\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: NOYB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"server: NOYB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Mod_Security\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Linksys-Broadband-Firewall-Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Broadband Firewall Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zyxel companies products\",\n  \"logic\": \"(((a&&b) || (c||d)) &&e) ||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Forms/rpAuth_1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Alcatel-Lucent\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Ndm-Sysmode\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"href=\\\\\\\"/zyxel.ico\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Vendor: ZyXEL Communication Corp.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Zyxel SSH server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-USG110\",\n  \"logic\": \"a|| ((b||c) &&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"USG110\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"model\\\\\\\" id=\\\\\\\"model\\\\\\\" name=\\\\\\\"model\\\\\\\">USG110</div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/ext-js/app/common/zyFunction.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"USG110\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JUNIPer-SSG-140\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SSG-140\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HORDE- Mail System\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IMP: Copyright 2001-2009 The Horde Project\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Horde3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Horde3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SONICWALL-SRA-4200\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SonicWALL SRA 4200 \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ethernut-Project\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Ethernut\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Ethernut\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"IBM-Chassis-management\",\n  \"logic\": \"((a||b) &&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: IBM Chassis Management\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \",\\\\\\\"chassis_name\\\\\\\":\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: IBM Chassis Management\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mitel-MX-One Multimedia Communication Server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MiVoice MX-ONE Provisioning Manager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kedacom-ViewShot\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u79d1\\u8fbeViewShot\\u7528\\u6237\\u767b\\u5f55\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"background=\\\\\\\"image/viewshotuls-di.jpg\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SONICWALL-NSA-4500\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SonicWALL NSA 4500 \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PIOLINK-TiFRONT-G24P\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TiFRONT-G24P\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-SAS-M-24F-2XFP-7210\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ALCATEL SAS-M 24F 2XFP 7210\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"upvel-UR-315BN\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"UR-315BN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TEG-082WS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TEG-082WS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Schneider-TAC-Xenta911\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TAC Xenta911\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: TAC/Xenta911\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Schneider-TAC-Xenta731\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TAC Xenta731\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: TAC/Xenta731\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Symantec-Gateway-Security\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Symantec Gateway Security\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"grentech - SGR-W500\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SGR-W500\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sindoh-printer\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SINDOH \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"New Cloud-Coding Machine Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u65b0\\u89c6\\u4e91\\u7f16\\u7801\\u673a\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GCDWebServer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"server: GCDWebServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: GCDWebServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-\\u6444\\u50cf\\u5934\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IP CAMERA Viewer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<frame src=\\\\\\\"controlmenu.htm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"IBM-Lotus-iNotes\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"alt=\\\\\\\"Lotus iNotes Login Screen\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IBM Lotus iNotes\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bosch-security system\",\n  \"logic\": \"((a||b||c||d||e||f||g) &&h) || ((i||j) &&k)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"bosch security systems\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MICcomp[0][1] ==\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src='inner_frmset.html'>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: VCS-VideoJet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"VCS AG VideoJet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"B426\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Bosch Security Systems.  All rights reserved.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Server: VCS-VideoJet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"VideoJet-8008\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Digi-AnywhereUSB\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AnywhereUSB/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"AnywhereUSB\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Schneider-TSX\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SCHNEIDER TSX \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-Lotus\",\n  \"logic\": \"((((a||b||c) &&d) || (e&&f) || (g&&h)) &&i&&j&&k) || ((l||m) &&n)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Lotus-Domino\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href='/domcfg.nsf/cssLogin?ReadForm'>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"action=\\\\\\\"/names.nsf?Login\\\\\\\" name=\\\\\\\"_DominoForm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u8f6f\\u6807\\u79d1\\u6280\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"domcfg.nsf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"login.nsf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"esoaisapp/login.jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"main.nsf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"server: Lotus-Domino\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"ESMTP Service (IBM Domino\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Siemens-SIMATIC\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Siemens, SIMATIC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Siemens AG SIMATIC \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Samsung-IP-Phone\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SASMSUNG IP-Phone \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yealink- Video Conference\",\n  \"logic\": \"a|| (b&&c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: yealink embed httpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: yealink embed httpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Adaptec-Storage-Manager\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Adaptec ASM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Generator: Drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"boa\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Adaptec ASM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"X-Generator: Drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"boa\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"\\u5947\\u5b89\\u4fe1-\\u4f01\\u4e1a\\u5b89\\u5168\\u90e8\\u7f72\",\n  \"logic\": \"a||b|| (c&&d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: IocpServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"360\\u4f01\\u4e1a\\u5b89\\u5168\\u90e8\\u7f72\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: IocpServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"ATOP-Web-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"server: ATOP Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: ATOP Web Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zimbra-mail system\",\n  \"logic\": \"a||b||c||d||e||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"zm_test=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"zm_test=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"window._zimbraMail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"content=\\\\\\\"Zimbra\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Zimbra IMAP4rev1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Zimbra POP3 server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Zimbra \\u7f51\\u7edc\\u5ba2\\u6237\\u7aef\\u767b\\u5f55\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Monkey\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Monkey\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"server: Monkey\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"MERCUSYS-AC12\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AC12 login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Safe3WAF\",\n  \"logic\": \"a|| (b&&c) ||d|| (e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Safe3WAF\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Safe3 Web Firewall\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Safe3WAF\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Safe3 Web Firewall\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Sandvine- product\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Sandvine \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ricoh-savin-printer\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SAVIN \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RemoteCall-Company Products\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RemoteCall \\u7528\\u6237\\u7ba1\\u7406\\u5458\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"http://www.remotecall.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"msg_abortService\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SIDSA-EtherTV-IPTV-Card\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SIDSA EtherTV IPTV Card\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Enviromon-securityHawk8\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"securityHawk8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"legendsec-Secips-Sensor\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SecIPS Sensor\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Remote management console\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\xff\\\\xfd\\\\x18\\\\xff\\\\xfb\\\\x01\\\\xff\\\\xfe\\\\x01\\\\xff\\\\xfd\\\\x03Remote Management Console\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Rainmachine companies\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RainMachine\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie-RG-UAC\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RG-UAC\\u767b\\u5f55\\u9875\\u9762\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src='images/free_login.png'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ServerTechnology-Sentry-Switch\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Sentry Switched \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Sentry Smart \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AOLserver\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: AOLserver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: AOLserver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Binarysec - Cloud Protection\",\n  \"logic\": \"(a&&b) || (c&&d) ||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: BinarySEC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-BinarySEC\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: BinarySEC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"X-BinarySEC\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"x-binarysec-nocache\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"x-binarysec-nocache\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Nexus-Repository-Manager\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"server: nexus/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: nexus/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \" Nexus Repository Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"progressMessage('Initializing ...')\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DLink-Wireless-Router\",\n  \"logic\": \"((a||b||c||d||e) &&f&&g&&h) ||i\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"D-LINK SYSTEMS, INC.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"D-LINK SYSTEMS, INC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Linux, HTTP/1.1, DIR-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<td><img src=\\\\\\\"images/img_wireless_bottom.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"D-Link Wireless N Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"realm=\\\\\\\"D-Link Wireless N Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Iliad-FreeboxOS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Freebox OS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"logo_freeboxos\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fast-Mirror\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: fastmirror\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: fastmirror\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"WD-WDCP Yun Host Management System\",\n  \"logic\": \"(a&&b) ||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"http://www.wdlinux.cn/bbs/index.php\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"linux\\u4e91\\u4e3b\\u673a\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"wdCP\\u4e91\\u4e3b\\u673a\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Set-Cookie: wdcpsessionID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Set-Cookie: wdcpsessionID\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LF-\\u51cc\\u98ce\\u8ba4\\u8bc1\\u8ba1\\u8d39\\u7cfb\\u7edf\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/lfradius/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Three Degree Software-eSaler Real Estate Marketing Management System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u9752\\u5c9b\\u53c1\\u5ea6\\u4fe1\\u606f\\u6280\\u672f\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" OA \",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Three Degree Software-OA System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u9752\\u5c9b\\u53c1\\u5ea6\\u4fe1\\u606f\\u6280\\u672f\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" OA \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Pasion-internal business management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u30ed\\u30b0\\u30a4\\u30f3 | \\u30d1\\u30b7\\u30aa\\u30f3\\u793e\\u5185\\u696d\\u52d9\\u7ba1\\u7406\\u30b7\\u30b9\\u30c6\\u30e0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HJSoft-HCM\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4eba\\u529b\\u8d44\\u6e90\\u4fe1\\u606f\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/images/hcm/copyright.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"/images/hcm/themes/default/login/login_banner2.png?v=12334\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"src=\\\\\\\"/general/sys/hjaxmanage.js\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Biamp-Server\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"telnet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Welcome to the Biamp Telnet server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Siemens-OpenState\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cn=Siemens Com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"cn=OpenStage\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Rising-anti-drug wall\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ou=Rising\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"cn=Antivirus Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u745e\\u661f\\u9632\\u6bd2\\u5899\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"action=\\\\\\\"/index.php\\\\\\\" onsubmit=\\\\\\\"return checkfrm(this);\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CPython\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CPython\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"CPython\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"UCloud-Enterprise-WAF\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: uewaf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: uewaf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Sangfor companies products\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"arr[count++] = '%' + ('0'+(parseInt(str.substr(i, 2), 16)^key[i/2%32]).toString(16)).toUpperCase().slice(-2);\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"OpenSSH_x.ypn Sangforx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-MSA2312i\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HP StorageWorks MSA2312i\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sarian-DR6410-HPA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \" Sarian DR6410-HPA \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tridium-NiagaraAX\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NiagaraAX\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Schneider-PM870SD\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Schneider Electric - PM870SD\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kinkei-solar monitoring - SWF-850\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/pic/SolarwiseLogo.jpg\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Golden Will-State Federation\",\n  \"logic\": \"((a||b) &&c&&d&&e) || (f&&g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Gnway Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"document.writeln(CompanyMail)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u5fd7\\u9ad8\\u6613\\u8054\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: Gnway Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Whitton - Remote Access Platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \" \\u8fdc\\u7a0b\\u63a5\\u5165\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a href=\\\\\\\"http://www.wholeton.com\\\\\\\" target=\\\\\\\"_blank\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"flask\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Etag: flask\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Powered-By: Flask\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Etag: flask\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"X-Powered-By: Flask\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Embedthis-Appweb\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Embedthis-Appweb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Embedthis Appweb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"server: Embedthis-Appweb\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u6613\\u8f6f\\u5929\\u521b-ranzhi-OA\",\n  \"logic\": \"a|| (b&&c&&d) || (e&&f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/sys/index.php?m=user&f=login&referer=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"rid\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"theme\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"lang\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"rid\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"theme\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"lang\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OpenSSL\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OpenSSL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"OpenSSL\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"uc-httpd\",\n  \"logic\": \"(a&&b&&c&&d&&e) || (f&&g&&h&&i)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: uc-httpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"X-Powered-By: ThinkPHP\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"server: uc-httpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"X-Powered-By: ThinkPHP\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"China Mobile -JX01 mobile proxy server\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"JX01\\u79fb\\u52a8\\u4ee3\\u7406\\u670d\\u52a1\\u5668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"action=\\\\\\\"/LoginAction.do\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"name=\\\\\\\"org.apache.struts.taglib.html.TOKEN\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"background=\\\\\\\"/images/loginbg.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AirGate-3G\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AirGate-3G\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VNPT-Technology-iGate\",\n  \"logic\": \"a||b|| (c&&d) || (e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Copyright &copy;2013 - VNPT Technology\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"iGate\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"iGate\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"wireless\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"iGate\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"GPON\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Blue shield - firewall\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u84dd\\u76fe\\u9632\\u706b\\u5899\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"banquan\\\\\\\">\\u84dd\\u76fe\\u4fe1\\u606f\\u5b89\\u5168\\u6280\\u672f\\u80a1\\u4efd\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u9632\\u706b\\u5899\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IMATRIX-mail server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"matrix smtp server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Matrix Mail Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Advantech-ER75i\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ER75i\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SOPHOS-Enduser-Protection\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"sophos\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"User Portal\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tutore-Mas\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Mas-Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Mas-Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Advantech-UCR11-v2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"UCR11-v2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Honghao-centralized wireless controller\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5f18\\u6d69\\u660e\\u4f20 - \\u96c6\\u4e2d\\u65e0\\u7ebf\\u63a7\\u5236\\u5668\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Lenovo-iomega\",\n  \"logic\": \"((a||b||c||d) &&e) ||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"iomega-ix2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"foldercontent.html?folder=Pictures\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"var defaultpageprefix = \\\\\\\"page\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Set-Cookie: iomega\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Set-Cookie: iomega\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Too a star morning - next generation firewall\",\n  \"logic\": \"a|| (b&& (c||d))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"T-Force\\u4e0b\\u4e00\\u4ee3\\u9632\\u706b\\u5899\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"T-Force\\u4e0b\\u4e00\\u4ee3\\u9632\\u706b\\u5899\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"/php/common/checknum_creat.php?module=config_authnum\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"src=\\\\\\\"php/common/checknum_creat.php?module=config_authnum\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-S3700\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"S3700\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"uPlusFtp\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"uPlusFtp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"uPlusFtp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CACTI-monitoring system\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Set-Cookie: cacti=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Login to Cacti\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/plugins/jqueryskin/include/login.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Cacti Access\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Set-Cookie: cacti=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Cacti Access\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yisheng - Website Monitoring Early Warning Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4efb\\u5b50\\u884c\\u7f51\\u7ad9\\u76d1\\u63a7\\u9884\\u8b66\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"QPCOM-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"QPCOM | LOGIN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yisheng - Network Security Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4efb\\u5929\\u884c\\u7f51\\u7edc\\u5b89\\u5168\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ABT-deep security gateway\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/php/common/checknum_creat.php?module=config_authnum&time=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5b89\\u535a\\u901a\\u6df1\\u5ea6\\u5b89\\u5168\\u7f51\\u5173\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u5b89\\u535a\\u901a\\u5e94\\u7528\\u7f51\\u5173\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ProMail\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ProMail &trade; - Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by Squirrelmail.org. Squirrelmail\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruifeng Net Cloud - Firewall\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u777f\\u5cf0\\u7f51\\u4e91\\u9632\\u706b\\u5899\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"kindred-loadbalancer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: kindred-loadbalancer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: kindred-loadbalancer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MegaBit-Gear-FTP-server\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ftp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MegaBit Gear\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PaloAlto-Networks-SSO\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \" Palo Alto Networks SSO - Log On \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" 2015 Palo Alto Networks, Inc. \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mailmax-mail server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Mailmax\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Mailmax\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CPPLUS-DVR\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CPPLUS DVR \\u2013Web View\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"P3p: cp=CAO PSA OUR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RedHat-eCos\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Red Hat eCos\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Blackboard companies\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Blackboard-Product\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Blackboard-Appserver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-Blackboard-Product\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"X-Blackboard-Appserver\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SJSWS-OiWS\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Oracle-iPlanet-Web-Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Sun-Java-System-Web-Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Oracle-iPlanet-Web-Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Sun-Java-System-Web-Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GSP-Masqmail- Mail Server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MasqMail\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ManagedFusion\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ManagedFusion\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ManagedFusion\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Symantec-Endpoint-Protection-Manager\",\n  \"logic\": \"((a||b||c||d||e||f) &&g) ||h||i||j\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div style=\\\\\\\"font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; font-size:11px;\\\\\\\">Version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/portal/About.jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<!-- Now, if it is IE on Windows platform, we check to see which version of JWS is installed -->\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<tr><td align=\\\\\\\"left\\\\\\\" style=\\\\\\\"font-family:Arial; font-size:18pt\\\\\\\"><b>Symantec Endpoint Protection Manager<br>Web Access</b></td></tr>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: SEPM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Symantec Endpoint Protection Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Symantec Endpoint Protection Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"symantec.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Server: SEPM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"osirix-viewer\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Service provided by <a href=\\\\\\\"https://www.osirix-viewer.com\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Riello companies products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NetMan\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IIS_EXPORT-product\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Iisexport\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IISExport\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oracle-DMS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Oracle-Dms-Ecid\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Oracle-Dms-Ecid\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Network-SmartDome-Camera\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IPNC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Network SmartDome Camera\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Trend-Aicache\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Aicache\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Aicache\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"6kbbs\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by 6kbbs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"generator\\\\\\\" content=\\\\\\\"6KBBS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Varnish\",\n  \"logic\": \"((a||b) &&c&&d) || (e&&f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"x-varnish\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Varnish\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"server: Varnish\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-Ascend-Max\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ascend Max-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Maipu-VPN\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MPSec-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ac\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASP\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Powered-By: ASP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \".asp?\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-Powered-By: ASP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WebRay-WAF\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Rayengine\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Drivedby: RaySrv\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Rayengine\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Drivedby: RaySrv\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Swiftlet\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Swiftlet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Swiftlet\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Perl\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"perl\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"perl\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruby\",\n  \"logic\": \"a||b||c||d||e|| (f&& (g&&h)) ||i||j||k||l||m||n||o||p||q\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ruby\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"WEBrick\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Phusion\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Mongrel\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"X-Rack-Cache\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"src=\\\\\\\"/assets/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"name=\\\\\\\"csrf-param\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"content=\\\\\\\"authenticity_token\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Rails_env\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Rubyversion\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"ruby\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"WEBrick\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"Phusion\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"Mongrel\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"X-Rack-Cache\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"Rails_env\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"q\",\n    \"feature\": \"Rubyversion\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXDSL\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"ZXDSL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZXDSL\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASP.NET\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Powered-By: ASP.NET\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ASP.NET Application\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"My ASP.NET Application</p>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<p class=\\\\\\\"lead\\\\\\\">ASP.NET is a free web framework for building great Web sites and Web applications using HTML, CSS, and JavaScript.</p>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"X-Powered-By: ASP.NET\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tutore -WCM\",\n  \"logic\": \"a||b||c|| (d&&e) ||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/wcm/app/js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"0;url=/wcm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"window.location.href = \\\\\\\"/wcm\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"forum.trs.com.cn\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"wcm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"/wcm\\\\\\\" target=\\\\\\\"_blank\\\\\\\">\\u7f51\\u7ad9\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"/wcm\\\\\\\" target=\\\\\\\"_blank\\\\\\\">\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AWSTATS-Log Analysis\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"generator\\\\\\\" content=\\\\\\\"AWStats\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<frame name=\\\\\\\"mainleft\\\\\\\" src=\\\\\\\"awstats.pl?config=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<a href=\\\\\\\"http://www.awstats.org\\\\\\\" target=\\\\\\\"awstatshome\\\\\\\">Created by awstats \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-Network-Storage\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Welcome to LG Electronics\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"style=\\\\\\\"background:url('../images/login/form_bg_LG_NAS_Storage.gif'); background-repeat:no-repeat;\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"LG Network Storage\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Synology-DMS\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \" Synology \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"logo-synology\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"class=\\\\\\\"logo-DSM\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sight star-watchtock\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u89c2\\u661f\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u5de1\\u98ce-\\u5185\\u7f51\\u6f0f\\u6d1e\\u626b\\u63cf\\u7cfb\\u7edf\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5de1\\u98ce\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a href=\\\\\\\"/filter\\\\\\\" class=\\\\\\\"logo\\\\\\\"><span>\\u5de1\\u98ce</span></a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"jQuery-ui\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"jquery-ui\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Positive pulse education - self-service printing system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6587\\u4ef6\\u4fe1\\u606f\\u771f\\u4f2a\\u9a8c\\u8bc1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DNS-ShareCenter\",\n  \"logic\": \"(a&&b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/cgi-bin/login_mgr.cgi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ShareCenter\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"CheungSSH\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cheungssh\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \".cheungsshAreaContent\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"CheungSSH\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AtBrain-Camera-Streaming\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"AtBrain Camera-Streaming\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"AtBrain Camera-Streaming\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AirLive-ARM-204\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"AirLive ARM-204\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"AirLive ARM-204\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AP-Router\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"AP-Router\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Basic realm=\\\\\\\"AP-Router\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cable/DSL-Router\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Cable/DSL Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Cable/DSL Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP-LINK-108M-Wireless-ADSL2+Router\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"108M Wireless ADSL2+ Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"108M Wireless ADSL2+ Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Avaya-Media-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Element Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/emlogin/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DLink-DES-3526\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DES-3526\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"poly-\\u89c6\\u9891\\u4f1a\\u8bae\",\n  \"logic\": \"(a&&b) ||c||d|| (e&&f) || (g&&h) || (i&&j&&k) || (l&&m) || (n&&o&&p) || (q&&r&&s) ||t|| (u&&v) ||w|| (x&&y)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\\\\\\"Videoconferencing Device\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Polycom RMX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Viavideo-Web\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Polycom\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"kAllowDirectHTMLFileAccess\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Polycom\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"src='app/util/proxy/configfqnames.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"<iframe src=\\\\\\\"\\\\\\\" name=\\\\\\\"contentFrame\\\\\\\" scrolling=\\\\\\\"auto\\\\\\\" class=\\\\\\\"content\\\\\\\" id=\\\\\\\"contentFrame\\\\\\\" frameborder=\\\\\\\"no\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"document.title = sysName+' - Polycom '+model\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"Polycom\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"resources/webMain-all.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"/rmx1000/js/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"RMX1000 DEVICE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"q\",\n    \"feature\": \"'<title>'+sysName+' - Polycom '+GetCurrentPageName ()+'</title>'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"r\",\n    \"feature\": \"var g_ishdvideoioenabled = \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"s\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"t\",\n    \"feature\": \"Polycom HDX \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"u\",\n    \"feature\": \"content=\\\\\\\"' +currentLanguage.toLowerCase ()+'\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"v\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"w\",\n    \"feature\": \"Polycom? RealPresence? Media Suite\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"x\",\n    \"feature\": \"common.login.LoginCtrl\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"y\",\n    \"feature\": \"fake_password\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NetScout-Model-9300L\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NetScout Model \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PANTUM-printer P3000\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DES:Pantum P3000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SEINE P3000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"function GotoSN() {location=\\\\\\\"/index.html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EDIMAX-PrintSir\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<frame src=\\\\\\\"printsir.htm\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LANTRONIX-embedded device networking module\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"V6.6.0.2 (080926)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AVAYA-XT4000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SCOPIA XT4000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AVAYA-XT5000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Scopia XT5000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Residential-Gateway\",\n  \"logic\": \"(a&&b) || (c&&d) || (e&&f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Residential Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: micro_httpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Residential Gateway Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \" Sagemcom Corporation.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Residential Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: micro_httpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"NUUO-NVR\",\n  \"logic\": \"(a&&b&&c) ||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nuuo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Network Video Recorder Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NVRmini\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Network Video Recorder Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"background=\\\\\\\"imgs/login_all.jpg\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TR069-Client\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TR069 Client\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: TR069\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"TR069 Client\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: TR069\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Spring-GW\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Spring GW\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Spring GW\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OpenVPN-Products\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"OpenVPN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: openvpn\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: openvpn\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Charm - video management system\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"$('.sign-btn').addClass(\\\\\\\"Completion\\\\\\\");\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"static/js/meisicms.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"\\u9b45\\u601dCMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SierraMonitor-FS-QS-1210\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FieldServer Technologies\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FS-QS-1210\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"FS-QS-1210\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SierraMonitor-FS-QS-1010\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FieldServer Technologies\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FS-QS-1010\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"FS-QS-1010\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHP-UPUPW Green Server Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PHP\\u63a2\\u9488-UPUPW\\u7eff\\u8272\\u670d\\u52a1\\u5668\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AWS-Elastic-Beanstalk\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AWS Elastic Beanstalk \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<h2>What's Next?</h2>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"aws.amazon.com/elasticbeanstalk\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-ASDM\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cisco asdm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"launcher_link\\\\\\\">Install ASDM Launcher\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Location: /admin/public/index.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"HTTP/1.1 301 Moved Permanently\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Buffalo-TeraStation\",\n  \"logic\": \"((a||b||c) &&d) || (e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TeraStation PRO\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"value=\\\\\\\"View TeraStation manual\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"value=\\\\\\\"TeraStation Handbuch lesen\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"o=BUFFALO INC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"ou=NAS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Juniper-VPN\",\n  \"logic\": \"a||b|| (c&&d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Junos Pulse Secure Access Service\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Juniper Networks VPN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"dana-na/auth/lastauthserverused.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"href=\\\\\\\"/dana-na/css/ds.css\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Pulse Connect Secure\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"FS VPN\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"\\u6cdb\\u5fae-\\u534f\\u540c\\u529e\\u516cOA\",\n  \"logic\": \"a||b||c|| (d&&e) ||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"testBanCookie\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"testBanCookie\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/wui/common/css/w7OVFont.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"typeof poppedWindow\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"client/jquery.client_wev8.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"/theme/ecology8/jquery/js/zDialog_wev8.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"ecology8/lang/weaver_lang_7_wev8.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"O2Security-VPN\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"client_param=install_active\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bugzilla\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"enter_bug.cgi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/cgi-bin/bugzilla/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Bugzilla_login_request_cookie\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Bugzilla_login_request_cookie\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Bugzilla Main Page\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Qi'an letter - website security testing\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"webscan.360.cn/status/pai/hash\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Symantec-thawte_ssl_cert\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"https://seal.thawte.com/getthawteseal\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Wo Tong - Wosign-SSL-CERT\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"https://seal.wosign.com/tws.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"https://seal.wosign.com/Signature\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Heavenly Letter-VPN\",\n  \"logic\": \"(a&& (b||c)) ||d|| (e&&f) ||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"topsecsvportalname=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"window.location=\\\\\\\"/portal_default/index.html\\\\\\\";</script>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"window.location.href=\\\\\\\"/vone/pub/pda.html\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"CommonName: TOPSEC PRODUCTS1438078181\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<a href=\\\\\\\"/vone/pub/cacertlist.p7b\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"vone/pub/common/scripts/sv_init.js\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"<div class=\\\\\\\"vpn-title\\\\\\\">\\u5929\\u878d\\u4fe1\\u4e0b\\u4e00\\u4ee3VPN</div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ArrayNetworks-VPN\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"an_util.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HikVision - Security Platform\",\n  \"logic\": \"a|| (b&& (c||d) )\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<!--\\u8b66\\u793a\\u63d0\\u793a\\u5904-->\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<h1 class=\\\\\\\"logo\\\\\\\">\\u5b89\\u9632\\u7efc\\u5408\\u7ba1\\u7406\\u5e73\\u53f0</h1>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u676d\\u5dde\\u6d77\\u5eb7\\u5a01\\u89c6\\u7cfb\\u7edf\\u6280\\u672f\\u6709\\u9650\\u516c\\u53f8 \\u7248\\u6743\\u6240\\u6709\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"serviceIP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kedacom-disk array system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u79d1\\u8fbe\\u78c1\\u76d8\\u9635\\u5217\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"kstormon.exe\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sangfor-SSL-VPN\",\n  \"logic\": \"a||b||c||d||e|| (f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"login_psw.csp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TWFID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Set-Cookie: TWFID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"luyi 20120223\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Sangfor-SSL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"<font color=\\\\\\\"white\\\\\\\">\\u6df1\\u4fe1\\u670d\\u79d1\\u6280\\u7248\\u6743\\u6240\\u6709\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"SSL VPN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GoCDN\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GOCDN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Exchange\",\n  \"logic\": \"a||b||c||d||e||f||g||h||i||j||k||l|| (m&&n) ||o||p||q||r||s|| (t&&u) || (v&&w) || (x&&y&& (z||BfkI))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"owa\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"owaLgnBdy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Microsoft ESMTP MAIL Service\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Microsoft Exchange Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<!-- owapage = ASP.auth_logon_aspx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"/exchweb/bin/auth/owalogon.asp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"x-owa-version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"/exchweb/bin/auth/owalogon.asp?url=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"href=\\\\\\\"/owa/auth/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"window.location.replace(\\\\\\\"/owa/\\\\\\\" + window.location.hash);</script></head><body></body>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"<meta http-equiv=\\\\\\\"Refresh\\\\\\\" contect=\\\\\\\"0;url=/owa\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"Microsoft Exchange\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"owa\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"Location\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"themes/resources/segoeui-semibold.ttf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"Microsoft Outlook Web Access\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"q\",\n    \"feature\": \"aria-label=\\\\\\\"Outlook Web App\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"r\",\n    \"feature\": \"Microsoft Outlook Web Access\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"s\",\n    \"feature\": \"OutlookSession\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"t\",\n    \"feature\": \".mouse .owaLogoContainer, .twide .owaLogoContainer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"u\",\n    \"feature\": \"owaLogoContainer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"v\",\n    \"feature\": \"<div class=\\\\\\\"signInHeader\\\\\\\">Outlook</div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"w\",\n    \"feature\": \"/owa/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"x\",\n    \"feature\": \"owapage = ASP.auth_logon_aspx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"y\",\n    \"feature\": \"/owa/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"z\",\n    \"feature\": \"showPasswordCheck\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"BfkI\",\n    \"feature\": \"Outlook\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Firemon-product\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FireMon\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Western Digital - Company Products\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WT263CDN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"WT263CDN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u6613\\u8f6f\\u5929\\u521b-\\u7985\\u9053\\u7cfb\\u7edf\",\n  \"logic\": \"(a||b||c||d||e||f) &&g&&h&&i\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6b22\\u8fce\\u4f7f\\u7528\\u7985\\u9053\\u96c6\\u6210\\u8fd0\\u884c\\u73af\\u5883\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a id='zentaopro' href='/pro/'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"$('#zentaopro').addClass\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"powered by <a href='http://www.zentao.net' target='_blank'>ZenTaoPMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Welcome to use zentao!\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"href='/zentao/favicon.ico\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"360 web server\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Server: Netvox Z206-Webs\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Server: CPWS\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Webluker\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Webluker-Edge\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Webluker-Edge\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bluetrum-CDN\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered-By-ChinaCache\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered-By-ChinaCache\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Net Su Technology - Company Products\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f) || (g&&h&&i) || (j&&k&&l) || (m&&n)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cdn Cache Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"WS CDN Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Server: WS CDN Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Server: WS-web-server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"Server: WS-web-server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Lancome Technology - Lan Eye Threat Perception System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<font>\\u5170\\u773c\\u4e0b\\u4e00\\u4ee3\\u5a01\\u80c1\\u611f\\u77e5\\u7cfb\\u7edf</font>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/Skin/Admin/Img/login/laneye.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FatWire-Content-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FutureTenseContentServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FutureTenseContentServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fujitsu-PRIMERGY-RX1330-M3\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"sure\\\\\\\">PRIMERGY RX1330 M3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Swiki\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"http://minnow.cc.gatech.edu/swiki\\\\\\\" title=\\\\\\\"ComSwiki: powered by Squeak\\\\\\\"><img src=\\\\\\\"/defaultScheme/comSwiki.gif\\\\\\\" border=0 width=277 height=88 alt=\\\\\\\"ComSwiki: powered by Squeak\\\\\\\"></a><br>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-ProCurve-Access-Point\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HP ProCurve Access Point\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ProCurve Access Point \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-USG5120\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"USG5120\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"USG5120\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-USG2220\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"USG2220\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"USG2220\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Windows-Small-Business-Server-2011\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Windows Small Business Server 2011\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"syncloud\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ynclou\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"nelog\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mimosa-B5-Firmware\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Mimosa B5 Firmware\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PDU02IP-Remote-Power-Control\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PDU02IP Remote Power Control\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PDU02IPSC Remote Power Control\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"powercnAccessPoint\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"powercnAccessPoint\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-S9306\",\n  \"logic\": \"a||b|| (c&&d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Quidway S9306\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"S9306\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"S9306\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"S9306\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Media5-Company products\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Mediatrix \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Mediatrix\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"Mediatrix\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Qianxin - Enterprise Control Center\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"360\\u4f01\\u4e1a\\u7248\\u63a7\\u5236\\u4e2d\\u5fc3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-XR500\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR XR500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/npg/xr500\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"var host_name = \\\\\\\"XR500\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"NETGEAR-XR500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR XR500\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TomatoUSB-LINKSYS\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TomatoUSB-LINKSYS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TomatoUSB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"TomatoUSB-LINKSYS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"TomatoUSB\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HikVision-Video Backup Server\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Video Record Backup\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5907\\u4efd\\u7ba1\\u7406\\u670d\\u52a1\\u5668\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFI-printing equipment\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Webtools\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"efi\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u5fae\\u53a6\\u79d1\\u6280-\\u5728\\u7ebf\\u5b66\\u4e60\\u4e91\\u670d\\u52a1\\u5e73\\u53f0\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/Utility/CoreScripts/Widget.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Carefree - World Annet Security\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5185\\u7f51\\u7ec8\\u7aef\\u5b89\\u5168\\u7ba1\\u7406\\u7cfb\\u7edf\\u767b\\u9646\\u754c\\u9762\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"GZSA. All Rights Reserved</span>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oracle-Application-Server\",\n  \"logic\": \"((a||b||c||d||e||f||g|| (h&&i&&j)) &&k&&l&&m) || ((n||o||p||q) &&r&&s)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Oracle-Application-Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Oracle Application Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Oracle Containers for J2EE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Oracle-HTTP-Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Oracle HTTP Server</font></font></b></h1>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Oracle HTTP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Oracle_Web_listener\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Mod_SSL Web Site\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Oracle JSP Documentation\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Mod_OSE Documentation\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"Server: Oracle_Web_Listener\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"Server: Oracle-HTTP-Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"Server: Oracle HTTP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"q\",\n    \"feature\": \"server: Oracle Application Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"r\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"s\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"TP-LINK-Archer-D7\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"0.9.1 0.5 v002d.0 Build 140225 Rel.37189n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"0.9.1 0.9 v002d.0 Build 141014 Rel.51158n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"0.9.1 1.1 v002d.0 Build 150824 Rel.40904n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"0.9.1 1.3 v002d.0 Build 150911 Rel.30949n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"1.6.0 0.9.1 v002d.0 Build 160216 Rel.57110n\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-HTTPAPI\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Microsoft-HTTPAPI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Microsoft-HTTPAPI\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Resin\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"server: Resin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"server: Resin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Oracle-Netscape-Enterprise\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Netscape-Enterprise\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Netscape-Enterprise\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Jetty\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Jetty\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Jetty\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Emerson-RDU\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RDU-A Login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Jboss\",\n  \"logic\": \"((a&&b) &&c&&d&&e&&f) || (g&&h&&i&&j&&k&&l) || (m&&n&&o)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Welcome to JBoss\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Welcome to JBoss AS\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"JBoss-EAP\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"JBoss\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Routers\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"X-Generator: Drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"28ze\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"server: JBoss\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"server: JBoss-EAP\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Network Pioneer - Log Management System\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var mywindows = Ext.create\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"window.location.href=\\\\\\\"main.html\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NetMizer \\u65e5\\u5fd7\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OpenResty-product\",\n  \"logic\": \"(a&&b) || (c&&d&&e) || (f&&g&&h) || (i&&j&&k)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ngx_openresty\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: openresty\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"<center>openresty/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"server: openresty\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"ZEUS-webserver\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Zeus\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: Zeus\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"MKey\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5317\\u4eac\\u6570\\u5b57\\u5929\\u5802\\u4fe1\\u606f\\u79d1\\u6280\\u6709\\u9650\\u8d23\\u4efb\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MKey\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"MKey5\\u4e91\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"MKey\\u00ae\\u65e0\\u7ebf\\u4e2d\\u95f4\\u4ef6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NDF7300\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NDF7300\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tengine\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"server: Tengine\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"server: Tengine\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"H3C-Magic-R300\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"R300\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP-LINK-VR600\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"0.1.0 0.9.1 v0057.0 Build 160217 Rel.53237n\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-Network-Automation\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HP Network Automation\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP-LINK-VR200v\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"0.7.0 0.18 v0007.0 Build 130114 Rel.62291n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"0.8.0 0.3 v0053.0 Build 150906 Rel.32427n\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP-LINK-Archer-D2\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"0.6.0 0.7 v003e.0 Build 140928 Rel.38569n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"0.8.0 1.1 v003e.0 Build 150730 Rel.62022n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"0.8.0 1.2 v003e.0 Build 150921 Rel.39523n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"1.4.0 0.8.0 v003e.0 Build 160216 Rel.55536n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"1.4.0 0.8.0 v003e.0 Build 160216 Rel.55536n\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SX3000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SX3000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AsiaInfo - Deep Threat Discovery Equipment\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e9a\\u4fe1\\u5b89\\u5168&trade; \\u6df1\\u5ea6\\u5a01\\u80c1\\u53d1\\u73b0\\u8bbe\\u5907\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Trend_micro-Threat Discovery Equipment\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u8d8b\\u52bf\\u79d1\\u6280\\u5a01\\u80c1\\u53d1\\u73b0\\u8bbe\\u5907\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<span class=\\\\\\\"text_span\\\\\\\">\\u542f\\u7528 Javascript \\u4ee5\\u4f7f\\u7528\\u5a01\\u80c1\\u53d1\\u73b0\\u8bbe\\u5907\\u3002</span>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-SMB-TL-ER6520G\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: TP-LINK SMB TL-ER6520G\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TP-LINK_SMB_TL-ER6520G\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASENTRIA-Siteboss monitoring system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SiteBoss \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=SiteBoss\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u79d1\\u8fc8-RAS\\u7cfb\\u7edf\",\n  \"logic\": \"a|| (b&& (c||d||e)) ||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u79d1\\u8fc8RAS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"type=\\\\\\\"application/npRas\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"pic/ras.ico\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"href=\\\\\\\"pic/iras.ico\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"\\u79d1\\u8fc8RAS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"\\u8fdc\\u7a0b\\u6280\\u672f\\u652f\\u6301\\u8bf7\\u6c42\\uff1a<a href=\\\\\\\"http://www.comexe.cn\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"href=\\\\\\\"CmxLogin.php\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AirLink-SkyIPCam\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"SkyIPCam\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"SkyIPCam\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WaveIP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<td><b>MAC</td><td id=\\\\\\\"unitMac\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP-LINK-Archer-D5\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"0.9.1 0.1 v0043.0 Build 150731 Rel.52779n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"0.9.1 0.3 v002e.0 Build 140429 Rel.60996n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"0.9.1 0.8 v002e.0 Build 150526 Rel.63088n\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u5b89\\u5168\\u72d7\",\n  \"logic\": \"a|| (b&&c&&d) ||e||f|| (g&&h&&i) ||j||k\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WAF/2.0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Safedog\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Set-Cookie: safedog\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"safedog-flow-item=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Safedog\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Set-Cookie: safedog\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"safedog-flow-item=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DVR-Camera\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DVR WebClient\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WampServer\",\n  \"logic\": \"(a&&b) ||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<li><a href=\\\\\\\"phpsysinfo/\\\\\\\">phpsysinfo</a></li>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Wampserver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"WAMPSERVER Homepage\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Title and h1 heading\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<h1><abbr title=\\\\\\\"Windows\\\\\\\">W</abbr><abbr title=\\\\\\\"Apache\\\\\\\">A</abbr><abbr title=\\\\\\\"MySQL\\\\\\\">M</abbr><abbr title=\\\\\\\"PHP\\\\\\\">P</abbr></h1>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IIS\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Microsoft-IIS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Powered-By: WAF/2.0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Microsoft-IIS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP-LINK-Archer-MR200\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"0.9.1 0.0 v004a.0 Build 151105 Rel.42292n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"0.9.1 0.0 v004a.0 Build 160412 Rel.38588n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"0.9.1 1.1 v004a.0 Build 160905 Rel.60037n\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Intel-AMT\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Intel(R) Standard Manageability \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Intel(R) Standard Manageability \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Intel(R) Active Management Technology\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Intel(R) Active Management Technology\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Camera-Web-Server\",\n  \"logic\": \"(a&&b&&c&&d) || (e&&f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Camera Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: Camera Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Nginx\",\n  \"logic\": \"(a&&b&&c&&d) || (e&&f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nginx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Apache,Tomcat,Jboss\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"server: nginx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Apache-Tomcat\",\n  \"logic\": \"((a||b|| (c&& (d||e||f)) ||g||h) &&i&&j&&k&&l&&m) || ((n|| (o&&p&&q)) &&r&&s&&t&&u)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Apache-Coyote\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"tomcat.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Apache Tomcat/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"tomcat.apache.org\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"This is the default Tomcat home page\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Error report\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"<h3>Apache Tomcat\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"tomcat\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Apache,Tomcat,Jboss\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"Server: CouchDB\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"Apache-Coyote\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"Tomcat\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"q\",\n    \"feature\": \"gateway\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"r\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"s\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"t\",\n    \"feature\": \"<h2>My Resource</h2>\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"u\",\n    \"feature\": \"x-powered-by: ThinkPHP\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"HUAWEI-Secoway-USG2230\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Secoway USG2230\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Set-Cookie\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Secoway USG2230\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-R7000\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ASUS-R7000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">R7000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Wuxi Mid - Centralized Wireless Controller\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var url=\\\\\\\"resetWebsvr.php?act=reset\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u4e2d\\u592a\\u6570\\u636e - \\u96c6\\u4e2d\\u65e0\\u7ebf\\u63a7\\u5236\\u5668\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cyberwisdom-WizBank integrated management learning platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"wizbank\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-DSL-AC52U\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ASUS-DSL-AC52U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"DSL-AC52U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"DSL-AC52U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">DSL-AC52U\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D-Link-DIR_600\",\n  \"logic\": \"(a&&b&&c&&d) ||e|| (f&&g) || (h&&i) || (j&&k) || (l&&m)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DIR-600\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DIR-600 Ver \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"x-powered-by: ThinkPHP\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"DIR 600\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"DIR-600 Ver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"X-Powered-By: ThinkPHP\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"D-LINK SYSTEMS, INC. | WIRELESS ROUTER | HOME\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"DIR-600\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"<div class=\\\\\\\"modelname\\\\\\\">DIR-600\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"TEMP_CheckNetworkAddr\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"Dlink-DIR600\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Aastra-A5000\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Aastra A5000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Aastra A5000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Aastra-5000\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Aastra 5000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Aastra 5000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Aastra-6757i\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Aastra 6757i\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Aastra 6757i\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sharp-MX printer\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SHARP MX-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Handlink companies products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Handlink Technologies Inc. All Rights Reserved.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Handlink-ISS-7000\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location='login.cgi';\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"HANDLINK ISS-7000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Linksys-Smart-Wi-Fi\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Linksys Smart Wi-Fi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Included with your Linksys Smart Wi-Fi \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"QNO-GQF500-Router\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GQF500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"GQF500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"GQF500_4WAN_Gigabit_Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"GQF500_4WAN_Gigabit_Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP-LINK-TL-MR3020\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TL-MR3020\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"devname = \\\\\\\"Wireless Router TL-MR3020\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"var modelname=\\\\\\\"TL-MR3020\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"MR3020\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"TP-LINK Portable Wireless N 3G/4G Router MR3020\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"realm=\\\\\\\"TP-LINK Portable Wireless N 3G Router MR3020\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-ACRH13\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ASUS RT-ACRH13\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-ACRH13\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-s6720\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"s6720\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"s6720\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"huaweis6720\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: huawei_s6720\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: huawei_s6720\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-HW9306\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: HW9306\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: HW9306\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-R6020\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR R6020\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NETGEAR R6020\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"R6020\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-R6080\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR R6080\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NETGEAR R6080\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"R6080\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-R7000+\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETGEAR R7000+\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NETGEAR R7000+\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"AXIS-M3014\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AXIS M3014\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-AC88U\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RT-AC88U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-AC88U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"AsusRT-AC88U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Asus RT-AC88U\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-AC3100\",\n  \"logic\": \"a||b||c||d|| (e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ASUS RT-AC3100\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-AC3100\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"var product_name='RT-AC3100'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"RT-AC3100\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Asus RT-AC3100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-AC86U\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RT-AC86U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-AC86U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ASUS Wireless Router RT-AC86U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"RT-AC86U\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-RV016-VPN-Router\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RV016 VPN Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"RV016\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"RV016\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RV082-VPN-Router\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RV082 VPN Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"RV082\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"RV082\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"3Com-Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"3Com Router \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"3Com-Switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"3Com Switch \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"digitalchina-DCRS Switch\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DCRS-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D-Link-DIR-615\",\n  \"logic\": \"a||b|| (c&& (d||e)) ||f||g||h\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"D-Link DIR-615\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"D-Link DIR-615\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"DIR-615\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"content=\\\\\\\"D-LINK DEVICE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"content=\\\\\\\"DIR-615\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"<a href='http://support.dlink.com.tw'  target=_blank><font class=l_tb>DIR-615\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"var modemver=\\\\\\\"DIR-615\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"<div class=\\\\\\\"modelname\\\\\\\">DIR-615\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ansible-Tower\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ansible\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Comtech-CDM-Modem\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CDM-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Eaton-UPS\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Eaton \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ePDU\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Epson-AL-Printer\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EPSON AL-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Extreme-enterasys- product\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Enterasys Networks, Inc. \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Enterasys Login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GESTETNER- printer\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Gestetner \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Lexmark companies products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Lexmark \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SONY-PCS video conferencing system\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PCS-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" Web Control\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"PCS-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \" Web Control\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TELINDUS-router\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"$Telindus \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Telindus FTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FIT2CLOUD-JUMPSERVER - Fortress\",\n  \"logic\": \"a|| (b&&c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Jumpserver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a href=\\\\\\\"/users/password/forgot/\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"csrfmiddlewaretoken\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<input type=\\\\\\\"password\\\\\\\" class=\\\\\\\"form-control\\\\\\\" name=\\\\\\\"password\\\\\\\" placeholder=\\\\\\\"\\u5bc6\\u7801\\\\\\\" required=\\\\\\\"\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-TD-W8950N\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Router TD-W8950N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Model No. TD-W8950N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"TD-W8950N 1.0 DSL Modem Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"263 Cloud Communication - Personnel Management System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"263\\u4eba\\u4e8b\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<p align=\\\\\\\"center\\\\\\\">\\u8bf7\\u4f7f\\u7528263EM\\u767b\\u9646!</p>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP-LINK-TD-W8960N\",\n  \"logic\": \"((a||b||c) &&d) || ((e||f||g||h||i||j||k||l) &&m&&n&&o)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TD-W8960N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"align='right'>Model No. TD-W8960N</div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"Wireless N ADSL2+ Modem Router TD-W8960N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"1.0.5 Build 160118 Rel.59896\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"1.1.1 Build 120912 Rel.67406\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"1.1.1 Build 131129 Rel.49672\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"1.1.1 Build 140317 Rel.31821\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"1.1.1 Build 140815 Rel.40202\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"1.1.1 Build 141107 Rel.34856\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"1.1.1 Build 150522 Rel.51226\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"TD-W8960N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"Apache,Tomcat,Jboss\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"360-WiFi expander\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"360WiFi\\u6269\\u5c55\\u5668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"id=\\\\\\\"slogan\\\\\\\">\\u6b22\\u8fce\\u4f7f\\u7528360WiFi\\u6269\\u5c55\\u5668</div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"SRouter_360R1_iOS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Qianxin - Tianshang Management Center\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"360\\u5929\\u673a\\u7ba1\\u7406\\u4e2d\\u5fc3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/resource/img/login/logo_403.png\\\\\\\" alt=\\\\\\\"360\\u5929\\u673a\\\\\\\"/></a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Qianxin - a new generation of smart firewall\",\n  \"logic\": \"a||b||c|| (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"360\\u5929\\u5824\\u65b0\\u4e00\\u4ee3\\u667a\\u6167\\u9632\\u706b\\u5899\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var __permission = \\\\\\\"360\\u9632\\u706b\\u5899\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"360\\u7f51\\u795e\\u65b0\\u4e00\\u4ee3\\u667a\\u6167\\u9632\\u706b\\u5899\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<span class=\\\\\\\"fwtitle_big\\\\\\\">360 \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"ngfw_encode\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-P-320W\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Welcome to ZyXEL P-320W\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"P-320W\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"loginPassword.value = \\\\\\\"ZyXEL ZyWALL Series\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"ZyXEL P-320W\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ronyasoft-product\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RoyaSoft\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kasda-RTL867x\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RTL867x\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LODOP-cloud printing\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Welcome to C-Lodop\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<h1>\\u5173\\u4e8eC-Lodop\\u514d\\u8d39\\u548c\\u6ce8\\u518c\\u6388\\u6743</h1>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"document.getElementById(\\\\\\\"reqid\\\\\\\").value==document.getElementById(\\\\\\\"licid\\\\\\\").value\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"McAfee-Agent\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Agent-ListenServer-HttpSvr\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Agent-ListenServer-HttpSvr\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"teldat-Router-Model\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Router model \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"teldat\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alibaba - Ali CDN\",\n  \"logic\": \"(a&&b&&c&&d) || (e&&f&&g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Tengine\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Cache\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: Tengine\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"X-Cache\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"TELESQUARE-SDT-CS3B1\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SDT-CS3B1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SDT-CS3B1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Infinova-Video Monitoring\",\n  \"logic\": \"a||b||c||d|| (e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"infinova login:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Infinova-Webs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Infinova-Webs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Basic realm=\\\\\\\"Infinova\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Video Management System\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"VMS.html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Lenovo-firewall\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u8054\\u60f3\\u9632\\u706b\\u5899\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LePus-Database Monitoring System\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u767b\\u5f55-\\u5929\\u5154 \\u6570\\u636e\\u5e93\\u76d1\\u63a7\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"language/switchover\\\\\\\"+'/'+current_language\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u767b\\u5f55\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kaspersky-Secure-Mail-Gateway\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ksmg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Kaspersky Secure Mail Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u56fd\\u5fae\\u8f6f\\u4ef6-\\u56fd\\u5fbdCMS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var system = 'cms\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u4e2d\\u79d1\\u7f51\\u5a01-anysec\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"sz_dalton\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Anysec Login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AXIS-\\u89c6\\u9891\\u76d1\\u63a7\",\n  \"logic\": \"(((a&&b) || (c&&d)) &&e) || ((f|| (g&&h)) &&i)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Network Camera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"axis\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"armv4tl\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"axis\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"<meta http-equiv=\\\\\\\"refresh\\\\\\\" content=\\\\\\\"0; url=/view/viewer_index.shtml?id=0\\\\\\\" />\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"content=\\\\\\\"Axis Communications AB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"AXIS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"HP-ARUBA-Network Module\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ArubaOS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"MODEL: \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Broadcom-Netiron router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Brocade NetIron \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Allied_telesis-centrecom router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CentreCOM \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Avaya-BayStack switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BayStack \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ATOP-serial server\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ATOP \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alaxala- Switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ALAXALA \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Allied_telesis-AT switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Allied Telesis AT-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GeoVision-camera\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GeoVision\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"GeoVision Inc. - Video Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"GeoVision Inc. - IP Camera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"geovision-mobile\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Digital certification - believe in management platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<li><a href=\\\\\\\"/install/CertApp_bd.exe\\\\\\\">\\u4e0b\\u8f7d\\u8bc1\\u4e66\\u5e94\\u7528\\u73af\\u5883</a></li>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Brady-IP-300\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Brady IP 300\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie- commercial cloud router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<meta http-equiv=\\\\\\\"refresh\\\\\\\" content=\\\\\\\"0; url=/cgi-bin/mcfi\\\\\\\" />\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WPB-5000-AP\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WPB-5000 login:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"AP\\u914d\\u7f6e\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"window.location = \\\\\\\"./ap/login.html\\\\\\\";\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HikVision-C10S video controller\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Hik-C10s login:\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Digital authentication - Digital signage verification server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6570\\u5b57\\u7b7e\\u540d\\u9a8c\\u8bc1\\u670d\\u52a1\\u5668\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Anet-FTP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Anet FTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hospitalization equipment integrated platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4f4f\\u9662\\u8bbe\\u5907\\u96c6\\u6210\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HSPCN-Hospital Supplier B2B Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u533b\\u9662\\u7269\\u8d44\\u4f9b\\u5e94\\u5546B2B\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Saint Bambun-IT internal control fort\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IT\\u5185\\u63a7\\u5821\\u5792\\u4e3b\\u673a\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Rimage-System-Manager\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"style=\\\\\\\"color:#330066;font-size:18pt;font-weight:bold;\\\\\\\">Rimage System Manager</span>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Philips-IntelliSpace-Portal\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Philips IntelliSpace Portal\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Philips IntelliSpace Portal</span><br>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Siemens-FLUOROSPOT-Compact\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FLUOROSPOT Compact\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<form id=\\\\\\\"inicio\\\\\\\" name=\\\\\\\"inicio\\\\\\\" action=\\\\\\\"/rsf/init.do\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"RMIHttpServer\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CloudClient httpServer is running...\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"RMIHttpServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: RMIHttpServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mobile office system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location.href = '/ui/html/login.html';\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u79fb\\u52a8\\u529e\\u516c\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Pengde Technology-Research Instrument Network Service Platform\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content: \\\\\\\"/lfsms/user/login2?go=\\\\\\\" + go\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u79d1\\u7814\\u4eea\\u5668\\u7f51\\u7edc\\u670d\\u52a1\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Jiahe - electronic medical record system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5317\\u4eac\\u5609\\u548c\\u7f8e\\u5eb7\\u7535\\u5b50\\u75c5\\u5386\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ricoh-Imagio printer\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RICOH imagio \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Apricot and Software - Regional Inspection Business Collaborative Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<title>\\u674f\\u548c\\u533a\\u57df\\u68c0\\u9a8c\\u4e1a\\u52a1\\u534f\\u540c\\u5e73\\u53f0\\u767b\\u5f55\\u754c\\u9762</title>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Apricot and Software - Intelligent Rule Management\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u674f\\u548c\\u667a\\u80fd\\u89c4\\u5219\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DCOM-CNS Network Core Service\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u767b\\u5f55 | CNS\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<!--p>CNS\\u7f51\\u7edc\\u6838\\u5fc3\\u670d\\u52a1\\u81ea\\u52a8\\u5316\\u5f00\\u901a\\u5e73\\u53f0\\u7cfb\\u7edf. \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<span class=\\\\\\\"left\\\\\\\">CNS-APP \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Digital certification - certificate management server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"name=\\\\\\\"spring-security-redirect\\\\\\\" value=\\\\\\\"/loginByCert\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u8bc1\\u4e66\\u7ba1\\u7406\\u670d\\u52a1\\u5668\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RG-WALL-V160E\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RG-WALL-V160E\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RG-WALL-V160S\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RG-WALL-V160S\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RG-WALL-V50\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RG-WALL-V50\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Infinet-R5000-WANFleX\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"R5000 WANFleX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Revolution Wireless Router R5000-CPE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Raisecom-device\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RAISECOM device\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Raisecom-RCIOS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RAISECOM RCIOS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie-Red-Giant-SecVPN\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Red-Giant SecVPN series\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Residential-ADSL-Gateway\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Residential ADSL Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RG-WALL-1600\",\n  \"logic\": \"a|| ((b||c) &&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RG-WALL-1600\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: xxxxxxxx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: xxxxxxxx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Organization: Ruijie\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fujitsu-PRIMERGY-BX900\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PRIMERGY BX900\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-Quanta-LB8\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Quanta LB8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-S7706\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Quidway S7706\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"S7706\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-S9303\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Quidway S9303\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"s9303\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Powercode-BMU\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powercode BMU\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dell-PowerConnect-Switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerConnect \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-Premier-Layer2-Switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Premier Layer2 Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-Premier-Layer3-Switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Premier Layer3 Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-Quanta-LB6M\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Quanta LB6M\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Primergy-iRMC\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Primergy iRMC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Planet-VPN\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Planet \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"VPN Security\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Plisch-transmitter\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Plisch SCU \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Plisch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"transmitter\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PnP-Secure-Access-Gateway\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PnP Secure Access Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Portico-VOIP-Adapter\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Portico Telephone VoIP Adapter\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PowerAgent-eXM\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerAgent eXM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PowerAgent-eXM2\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerAgent eXM2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PowerAgent eXM2HP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Pakedge-WAP\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Pakedge\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"WAP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PARKS-FiberLink\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PARKS FiberLink\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Panasonic-DP-Printer\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Panasonic DP-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PIOLINK-Application-Switch\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PIOLINK Application Switch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PIOLINK Application Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Planet-Managed-Switch\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PLANET\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Managed Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Pakedge-Router\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PakedgeRouter\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Pakedge\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Pakedge Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OX253P\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OX253P\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Pfsense- product\",\n  \"logic\": \"(a&&b) ||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"pfSense \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"https://www.pfsense.org/?gui=bootstrap\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Rubicon Communications, LLC (Netgate)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<h4>Login to pfSense</h4>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EPRAG-Scientific Research Management System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"lan12-jingbian-hong\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u79d1\\u7814\\u7ba1\\u7406\\u7cfb\\u7edf\\uff0c\\u5317\\u4eac\\u6613\\u666e\\u62c9\\u683c\\u79d1\\u6280\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ipswitch-imailserver\",\n  \"logic\": \"a||b||c|| (d&&e&& (f||g||h))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"myICalUserName\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Ipswitch-IMail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Ipswitch-IMail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"IMail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"pop3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"IMAP4\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"NT-ESMTP Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NS3552-Switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NS3552-8P-2S Managed Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NOS\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NOS Netchina\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SSH-2.0-NOS-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NOS  Version\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NOMUS-Gateway\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NOMUS Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Nomus GW\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Nomus RB\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SangFor - Application Performance Management\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Sangfor APM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"help=\\\\\\\"\\u7248\\u672c\\u4fe1\\u606f:<br/>APM-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tiandy-Video Monitoring\",\n  \"logic\": \"a||b||c|| (d&&e) ||f|| (g&&h&&i)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Net Video Browser\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"name=\\\\\\\\\\\\\\\"TiandyVideo\\\\\\\" id=\\\\\\\\\\\\\\\"NvsVideo\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<link href=\\\\\\\"tdvideo.css\\\\\\\" rel=\\\\\\\"stylesheet\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"rtsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Tiandy RTSP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"o=Tiandy Tech, cn=dvr_ui\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"<meta http-equiv=\\\\\\\"refresh\\\\\\\" content=\\\\\\\"0;url=http://\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"/index.html\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"server\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"ATP800\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ATP800\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ATP800\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ATP100\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ATP100\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ATP100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SOMFY-product\",\n  \"logic\": \"a|| (b&&c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Somfy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Centrale\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Somfy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Copyright\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Schneider-TAC-XENTA913\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TAC XENTA913\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: TAC/Xenta913\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u4e2d\\u7ef4\\u4e16\\u7eaa-\\u4e91\\u89c6\\u901a\\u89c6\\u9891\\u76d1\\u63a7\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: JDVR/4.0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: JDVR/4.0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-Generator: Drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"data-i18n-l=\\\\\\\"jovision\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CirCarLife-Scada\",\n  \"logic\": \"(a&&b&&c) || (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: CirCarLife Scada\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"boa\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: boa\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: CirCarLife Scada\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"boa\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"RA-company products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Rockwell Automation\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Visonic-PowerLink\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Visonic PowerLink\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXHN-H298A\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZXHN H298A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"360 - Enterprise Edition\",\n  \"logic\": \"(a||b||c||d||e) &&f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"360EntInst\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5173\\u4e8e\\u5168\\u7f51\\u90e8\\u7f72360\\u79c1\\u6709\\u4e91\\u7684\\u901a\\u77e5\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u79c1\\u6709\\u4e91\\u63a7\\u5236\\u4e2d\\u5fc3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/download/360Inst.exe\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"360\\u4f01\\u4e1a\\u7248\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"\\u5929\\u64ce\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"ZyXEL-VMG4325\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZyXEL VMG4325\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Welcome to VMG4325-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-VSG1435\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZyXEL VSG1435\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZyXEL VSG1435\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Phoenix-Contact-PLC\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PLC Type: ILC \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Rockwell-Series-C-Revision\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Series C Revision\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Honeywell-RTU\",\n  \"logic\": \"((a||b||c) &&d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: EnergyICT RTU\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<frame name=\\\\\\\"WebRTUMenu\\\\\\\" target=\\\\\\\"main\\\\\\\" src=\\\\\\\"WebRTUMenu.shtml\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"WebRTU z1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: EnergyICT RTU\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VMware-vFabric\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"vFabric\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TS01efd1fa\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"TS01efd1fa\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JCG-\\u65e0\\u7ebf\\u8def\\u7531\\u5668\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Wireless Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"http://www.jcgcn.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELTA-enteliTOUCH\",\n  \"logic\": \"((a||b) &&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: DELTA enteliTOUCH\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"id=\\\\\\\"LoginForm\\\\\\\" action=\\\\\\\"hmi_login.asp?target=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: DELTA enteliTOUCH\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NewPostCom-Wlan-AP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NewPostCom Software Platform Wlan AP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-Network-Analysis-Module\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Network Analysis Module\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"cisco\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Netwave-Cable-Modem\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Netwave\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cable Modem\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Avaya-Communication-Manager\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var newlocation = \\\\\\\"https://\\\\\\\" + target + \\\\\\\"/cgi-bin/common/issue\\\\\\\";\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"riello-204\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NetMan 204\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NetMan 204\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Net Pioneer - Company Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NetMizer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Coremail-\\u90ae\\u4ef6\\u7cfb\\u7edf\",\n  \"logic\": \"a||b|| (c&&d) ||e||f||g||h\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/coremail/common/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Coremail\\u90ae\\u4ef6\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"smtp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"coremail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Coremail \\u7535\\u5b50\\u90ae\\u5c40\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"action=\\\\\\\"/coremail/index.jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"fmt_logoAlt: \\\\\\\"Coremail \\u7535\\u5b50\\u90ae\\u4ef6\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"coremail Mail\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Baidu-security treasure\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Powered-By-Anquanbao\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Powered-By-Anquanbao\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Squid\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f) || (g&&h&&i&&j) || (k&&l&&m)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: squid\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"X-Squid-Error\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Server: squid\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"router\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"X-Squid-Error\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"JBoss-AS\",\n  \"logic\": \"((a||b||c) &&d&&e&&f) || (g&&h&&i)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Manage this JBoss AS Instance\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Welcome to JBoss AS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"JBossAS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"JBossAS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"ZendServer\",\n  \"logic\": \"(a&&b) || (c&&d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZendServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TP-LINK WR720N\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ZendServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"TP-LINK WR720N\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Router\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"PHPOA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"admin_img/msg_bg.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WishOA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WishOA_WebPlugin.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"78OA\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/resource/javascript/system/runtime.min.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"license.78oa.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"78oa\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"src=\\\\\\\"/module/index.php\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Websense-Email-Security-Gateway\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Websense Email\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Websense Email Security Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Websense Content Gateway Proxy\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"bxemail\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u767e\\u8baf\\u5b89\\u5168\\u90ae\\u4ef6\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u767e\\u59d3\\u90ae\\u5c40\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u8bf7\\u8f93\\u5165\\u6b63\\u786e\\u7684\\u7535\\u5b50\\u90ae\\u4ef6\\u5730\\u5740\\uff0c\\u5982\\uff1aabc@bxemail.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Baidu-accelerated music\",\n  \"logic\": \"a|| (b&&c) ||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"__jsluid\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"notice-jiasule\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"HTTP/1.1 403\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"static.jiasule.com/static/js/http_error.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"__jsluid\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGUARDIAN-Company Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NetGuardian \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NetBurner-Network-to-Serial\",\n  \"logic\": \"a&&  (b||c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NetBurner\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Network to Serial\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"to Serial\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NetBotz-RackBotz\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NetBotz RackBotz\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NetBotz-WallBotz\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NetBotz WallBotz\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Symfony\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"powered by symfony\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://www.symfony-project.org/\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NEC-ExpressMail\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ESMTP ExpressMail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ExpressMail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"POP server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Further-Streaming-Server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Further Streaming Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PMailServer\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ESMTP(IPv4) PMailServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ESMTP PMailServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ESMTP(IPv4) PMailServer2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"mailcleaner\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ESMTP MailCleaner\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MailCleaner\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SecurityGateway- Mail Gateway\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ESMTP SecurityGateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Trustwave-SEG\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ESMTP Trustwave SEG\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EVO-Mail-Server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EVO Mail Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"INetSim-Mail-Service\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"INetSim Mail Service\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AVAYA-IP-Office-Voicemail-Pro\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IP Office Voicemail Pro\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IP Office Voicemail Pro\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Vircom-modusGate\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"modusGate ESMTP Receiver\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IX-Series-IX2010\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IX Series IX2010\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: IX Series IX2010\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-3Com-Access-Point-7760\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"3Com Access Point 7760\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Digicom-3G-Industrial-VPN-PRO\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"3G Industrial VPN PRO\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ReadyNet-AC1000MS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AC1000MS login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-HONET-UA5000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Huawei HONET UA5000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXHN-H198A\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZXHN H198A\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZXHN H198A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Baidu- webmaster platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"baidu-site-verification\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DIT communication - webcam\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DVS/IPC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a href=\\\\\\\"../geocx.exe\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zhongxing Micro - Network Camera\",\n  \"logic\": \"(a&&b&&c) ||d|| (e&&f&&g) || (h&&i) || (j&&k) ||l\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Boa/0.94.14rc18-ipcam\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"vilar IPCamera Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"classid='CLSID:67F77F18-5272-4875-B983-C7E8AF5517E4' codebase='/OCXCtrlSVAC.CAB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"#max{background:url(svac.png);width:121px;float:right}\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"rtsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"VISIONDIGI RTSP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"value=\\\\\\\"ClientBin/Vimicro.Silverlight.Video.xap\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"o=vimicro, ou=vimicro\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NEC-Portable-Internetwork-OS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NEC Portable Internetwork Core Operating System\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NEC-MultiWriter\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NEC Color MultiWriter\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NEC MultiWriter \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NEC-NetworkPrinter500081\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NEC NetworkPrinter500081\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"jQuery\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"jquery\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Parallels-Plesk-Panel\",\n  \"logic\": \"a||b||c||d||e|| (f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Parallels IP Holdings GmbH\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Default Parallels Plesk Panel Page\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Plesk-Panel\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<img src=\\\\\\\"./img/panel-logo.png\\\\\\\" alt=\\\\\\\"Parallels Plesk Panel\\\\\\\"></a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Default Parallels Plesk Page\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Plesk-Panel\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"RICOH-NRG-Maintenance\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NRG Maintenance Shell.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RICOH-Maintenance\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RICOH Maintenance Shell.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tab-and-Link-Manager\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div id=\\\\\\\"footer_copyright\\\\\\\" class=\\\\\\\"shade footer_copyright\\\\\\\">Powered by <a href=\\\\\\\"http://www.wolfshead-solutions.com/ws-products/product-1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-VMG8623-T50B\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VMG8623-T50B\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SALTSTACK-\\u4ea7\\u54c1\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SaltStack\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Organization: SaltStack\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NetModule-NB1600\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NB1600\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"NetModule AG, Switzerland\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NB1600 NetModule Router<br>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"NB1600 Web Manager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dm500hd\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"dm500hd login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dm500\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"dm500 login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dm500plus\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"dm500plus login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hong Kong Broadband-Sudu-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: suduserver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: suduserver\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_TRUST-SSL\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"D-TRUST SSL\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SequoiaDB-True Database\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SequoiaDB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" onclick='toggle_tb_data(\\\\\\\"createcs\\\\\\\")\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"class=\\\\\\\"btn btn-default\\\\\\\" onclick=\\\\\\\"updateconnect();\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MAiPU-MP3900\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MP3900\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BayTech-DS62\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DS62 Host Module\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Nautel-NxLink-Remote-Monitoring\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Nautel NxLink Remote Monitoring and Control Device\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bridge5asia-AMSS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Education Area Management Support System : AMSS++\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/statics/js/mdo-angular-cryptography.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"360-host guard\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Safe-Firewall\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Safe-Firewall: zhuji.360.cn\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TaskFreak\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"http://www.taskfreak.com\\\\\\\">TaskFreak\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fortinet-FortiGuard\",\n  \"logic\": \"a||b||c|| (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FortiGuard Web Filtering\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Web Filter Block Override\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/XX/YY/ZZ/CI/MGPGHGPGPFGHCDPFGGOGFGEH\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Web Filter Block Override\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/XX/YY/ZZ/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Eyou-mail system\",\n  \"logic\": \"a||b||c||d||e||f||g||h\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"eYou \\u90ae\\u4ef6\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"eYouWS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"cr\\\\\\\">eYouMail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"EMPHPSID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"content=\\\\\\\"\\u4ebf\\u90ae\\u7535\\u5b50\\u90ae\\u4ef6\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"/tpl/login/user/images/dbg.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"var loginssl = document.form_login.login_ssl.value;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"eYou MUA\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Moxa-Async-Server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Moxa Async Server \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Maipu-VPN3005S\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MPSec-VPN3005S\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Motorola-PTP Bridge\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Motorola PTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MitraStar-Gateway\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MitraStar Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ante - Safety Mail\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"\\u5317\\u4eac\\u56fd\\u4fe1\\u5b89\\u90ae\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<span> \\u5ba2\\u670d\\u90ae\\u7bb1\\uff1asupport@suremail.cn</span>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Netease-Enterprise Mailbox\",\n  \"logic\": \"(a&&b) ||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"frmvalidator\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u90ae\\u7bb1\\u7528\\u6237\\u767b\\u5f55\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<span class=\\\\\\\"warn\\\\\\\">\\u8bf7\\u60a8\\u4ece\\u7f51\\u6613\\u4f01\\u4e1a\\u90ae\\u7bb1\\u7528\\u6237\\u767b\\u5f55\\u9875\\u767b\\u5f55</span>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"src=\\\\\\\"http://mimg.qiye.163.com/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"content=\\\\\\\"\\u7f51\\u6613\\u4f01\\u4e1a\\u90ae\\u7bb1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ntop\",\n  \"logic\": \"(a&&b) ||c||d|| (e&&f) ||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Global Traffic Statistics\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: ntop\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"server: ntop\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"ntopMenuID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"/css/ntopng.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PineApp\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PineApp WebAccess - Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/admin/css/images/pineapp.ico\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OnSSI-Video_Clients\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OnSSI Video Clients\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"x-value=\\\\\\\"On-Net Surveillance Systems Inc.\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Netscape-FastTrack\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Netscape-FastTrack\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Netscape-FastTrack\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NetWin-Surgemail\",\n  \"logic\": \"a||b||c||d||e||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SurgeMail Welcome Page\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/about_mail.htm\\\\\\\">About SurgeMail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"surgemail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"surgemail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Basic realm=\\\\\\\"surgemail.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"/surgemail.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"SurgeSMTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Satlink-router\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"SatLink Terminal\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<FORM id =\\\\\\\"statussatellite\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"SatLink \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Net2Phone\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Net2Phone Init Page\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Net2Phone, Inc. All Rights\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NetBotz-Network-Monitoring-Device\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NetBotz( Network Monitoring) Appliance\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/netbotz.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"NetBotz Appliance\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"href=\\\\\\\"http://www.netbotz.com\\\\\\\" target\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"NetBotz Appliance\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"iPECS-UCP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"img/iPECS_logo_white.png\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TELTONIKA-RUT230\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Teltonika-RUT230\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Plixer-Scrutinizer-Network Traffic Management\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div id='testAlertHdrMsg'>For the best Scrutinizer experience possible, please address the issues below:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Scrutinizer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RPA-Gateway\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"- Residetial Gateway - RPA Networks\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<td align='middle' class='TB_SkyBg'>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OpenNemas\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"- OpenNeMaS administration\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"OpenNemas \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OnMinutes-CRM\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"- OnMinutes Online CRM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"extras\\\\\\\" id=\\\\\\\"password_extras\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"crm\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Norton-Cloud-Connect\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"- Norton Cloud Connect\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<h2 style=\\\\\\\"margin-left: 0px;\\\\\\\">Norton Cloud Connect</h2>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-SR8804-X\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C SR8804-X\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mercurial\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Mercurial repositories index\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"title=\\\\\\\"Mercurial\\\\\\\" style=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mashery-Proxy\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Mashery Proxy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"x-mashery-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Mashery Proxy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"x-mashery-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ManageEngine-Applications-Manager\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/appmanager.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Applications Manager \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Cookie: JSESSIONID_APM_9090\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Cookie: JSESSIONID_APM_9090\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EMC-Unisphere\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<script src=\\\\\\\"oemMessage.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"EMC Unisphere\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cloodie-HIS\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"- Cloodie HIS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/design/common/his.logo.white.svg\\\\\\\" alt=\\\\\\\"HIS Logo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"/design/design/cloodie.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AdviserLogicCli\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"- AdviserLogicCli\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"navigator.serviceWorker.register('/AdviserlogicCache.js')\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Linksys-WVBR0-25\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Model sku = WVBR0-25\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"WVBR0-25 Model Region Code\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"linksys WVBR0-25\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AVTECH-Video Monitoring\",\n  \"logic\": \"((a||b) &&c&&d&&e) || ((f||g) &&h&&i)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Linux/2.x UPnP/1.0 Avtech/1.0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Nserver: avtech/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Linux/2.x UPnP/1.0 Avtech/1.0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Nserver: avtech/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Michelangelo-PRO-V\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Michelangelo PRO-V\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Credit-MVB2000-Call Center\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MVB2000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IDEACMS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered By IdeaCMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ejnav{ideacms:cursort\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"iWebShop\",\n  \"logic\": \"(a&&b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"_skinPath\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"_themePath\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"_webUrl\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"class=\\\\\\\"pro_title\\\\\\\">iWebShop\\u652f\\u4ed8\\u6d4b\\u8bd5\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SupeSite\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"supe_sid\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"supe_sid\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LuManager\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"LuManager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EDVR\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"edvs/edvr\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ECShop\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by ECShop\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ECS_ID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"ECSHOP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"id=\\\\\\\"ECS_CARTINFO\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"ECS_ID\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MetInfo\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by MetInfo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"MetInfo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"powered_by_metinfo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/images/css/metinfo.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Npoint\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by Npoint\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"N\\u70b9\\u865a\\u62df\\u4e3b\\u673a\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"js/ajax_x.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/inc/usercode.asp?npoint=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Xiaomayi\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by \\u5c0f\\u8682\\u8681\\u5730\\u65b9\\u95e8\\u6237\\u7f51\\u7ad9\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"AntXiaouserslogin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/Template/Ant/Css/AntHomeComm.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Empire Software - Empirecms\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by EmpireCMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SMC-Cable-Router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DOCSIS1.1/DOCSIS2.0 Cable Commercial Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SMC Networks\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DHI-HCVR5116H-S2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DHI-HCVR5116H-S2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sawmill\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div id=\\\\\\\"password:error\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/picts/sawmill_logo.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Sawmill\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Sawmill\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JXJ-video surveillance\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"classid=\\\\\\\"clsid:A90F043B-7FA7-44CD-99AE-F058629CF7AA\\\\\\\" codebase='JAVOleDe.CAB#version\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yadong Technology - God Shield FS3 Document Security Sharing\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u795e\\u76feFS3\\u6587\\u6863\\u5b89\\u5168\\u5171\\u4eab\\u7cfb\\u7edfV2.0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u795e\\u76feFS<sup>3</sup>\\u6587\\u6863\\u5b89\\u5168\\u5171\\u4eab\\u7cfb\\u7edfV2.0</div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yisa-Police big data system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4ee5\\u8428\\u8b66\\u52a1\\u5927\\u6570\\u636e\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sangfor-IPSec-VPN\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Sangfor-IPSec\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sino - camera\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IPC \\u7528\\u6237\\u767b\\u5f55\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5317\\u4eac\\u4e2d\\u76fe\\u5b89\\u5168\\u6280\\u672f\\u5f00\\u53d1\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Queen Stars - Tianzhu IDS\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5929\\u9617\\u5165\\u4fb5\\u68c0\\u6d4b\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CyberSensor\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"VSAppSrv1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<div class=\\\\\\\"login_name\\\\\\\">\\u5929\\u9617\\u5165\\u4fb5\\u68c0\\u6d4b\\u4e0e\\u7ba1\\u7406\\u7cfb\\u7edfV7.0</div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kedacom-rpdata-query system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Rpdata \\u67e5\\u8be2\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ATEN-Company Products\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<META name=\\\\\\\"ATEN International Co Ltd.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"action=\\\\\\\"/cgi/login.cgi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"name=\\\\\\\"ATEN International Co Ltd.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"document.writeln(lang.LANG_LOGIN_PROMPT)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-n5000\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco NX-OS(tm) n5000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Nexus 5000 Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AX-Traffic-Manager\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AX Series Advanced Traffic Manager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PCS-XG55-Web-Control\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"PCS-XG55 Web Control\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"PCS-XG55 Web Control\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IQinVision-IQeye855\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IQinVision IQeye855\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IQeye855\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IQinVision-IQeye853\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IQinVision IQeye853\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IQeye853\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IQinVision-IQeye805\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IQinVision IQeye805\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IQeye805\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"phpPgAdmin\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"appname\\\\\\\">phpPgAdmin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"phpPgAdmin\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHPOpenChat\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PHPOpenChat Installation\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IQinVision-IQeye752\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IQinVision IQeye752\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IQeye752\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bosch-juicer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"MES3500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MES3500\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-ES-2108\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"ES-2108\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ES-2108\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Philip-M6\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"Resource/JavaScript/jKPM6.DateTime.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Star_net- Digital Signage System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var contextpath='/dmb'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HikVision-IVMS-7200 mobile video surveillance platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"onkeydown=\\\\\\\"return cms.util.keyDownPermit\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IQinVision-IQeye705\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IQinVision IQeye705\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IQeye705\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PegaRULES\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Pega-rules=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Unable to logon to the PegaRULES system\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"images/pzPegaIcon.ico\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Set-Cookie: Pega-RULES=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Open-Admin-for-Schools\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Open Admin for Schools\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"action=\\\\\\\"/cgi-bin/rptbirthday.pl\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Open Admin for Schools\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IQinVision-IQeye510\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IQinVision IQeye510\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IQeye510\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yeastar-VOIP\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Yeastar\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"l.cp.common.copyright\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BITMAIN-antminer\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"antminer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"antminer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Antminer Monitor\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"udesk\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"assets-cli.udesk.cn/im_client/js/udeskApi.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"udesk.cn/im_client/?web_plugin_id=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KOD- can be said\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"KodExplorer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/common/loading_simple.gif\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APACHE-Airflow\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/static/pin_100.png\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<span>Airflow</span>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NIUSHOP-\\u5f00\\u6e90\\u5546\\u57ce\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Niushop\\u5f00\\u6e90\\u5546\\u57ce\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"template/shop/blue\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OpsView-product\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/images/opsview_logo_large.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/images/OpsviewCommunityLogo-large.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Follow @opsview\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Opsview\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"influxdata-InfluxDB\",\n  \"logic\": \"a|| (b&&c&&d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"influxdb-version\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"influxdb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"8083\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"InfluxDB Administration\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"InfluxDB - Admin Interface\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"xdcms\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"system/templates/xdcms\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WebRay-integrated scanner\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e00\\u4f53\\u5316\\u626b\\u63cf\\u5668 \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var charindex = Math.floor(Math.random() * 32);\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Shop_Builder-MallBuilder\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"MallBuilder\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by MallBuilder\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Opengear-Management-Console\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Opengear Management Console\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"360-security route\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"360LoginFlag\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"360\\u5b89\\u5168\\u8def\\u7531\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"360\\u5bb6\\u5ead\\u9632\\u706b\\u5899\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"QTS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Native OS :QTS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TENDA-router\",\n  \"logic\": \"(a||b||c|| (d&&e) || (f&&g) ||h||i||j||k|| (l&& (m||n))) &&o&&p\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Tenda | LOGIN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Tenda|\\u767b\\u5f55\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Tenda\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Tenda \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"('TENDA '+sys_target+' Router');\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"href=\\\\\\\"http://www.nexxtsolutions.com/\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"access to tenda \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"background:url(tenda-logo-big.png)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"/css/tenda.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"TENDA 11N\\u65e0\\u7ebf\\u8def\\u7531\\u5668\\u767b\\u5f55\\u754c\\u9762\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"Tenda Web Master\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"router to restore\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"router and reset\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"360 web server\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"FAQ-Manager\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<td><font size=\\\\\\\"-1\\\\\\\">&nbsp;</font><p><b><font size=\\\\\\\"-1\\\\\\\">FAQ ADMIN AREA</font></b></td>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a href=\\\\\\\"admin/\\\\\\\">Admin Area</a></td></tr></table></body></html>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Windows-Server-2012\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Windows Server 2012\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Windows Server 2012\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"thin\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"codename\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"thin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"codename\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"thin\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TheHostingTool\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"http://thehostingtool.com/\\\\\\\" target=\\\\\\\"_blank\\\\\\\">TheHostingTool</a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<td width=\\\\\\\"20%\\\\\\\"><strong>Server OS:</strong></td>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"page=status&sub=phpinfo\\\\\\\">PHPInfo</a>)</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TeveoLive-Video-Broadcast-Software\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: TeveoLive HTTP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: TeveoLive HTTP Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"News Technology - FOOSUN\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Created by DotNetCMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"For Foosun\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Powered by www.Foosun.net,Products:Foosun Content Manage system\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Windows-8\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Native OS : Windows 8 \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Microsoft Windows 8 \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Windows-Server-2016\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Windows Server 2016\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Windows Server 2016\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Windows-8.1\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Native OS : Windows 8.1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"OS: Windows 8.1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sun-Web-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Sun-Web-Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Sun-Web-Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AVCON-on-demand platform\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AVCON-\\u70b9\\u64ad\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<form action=\\\\\\\"./avcon.action\\\\\\\" method\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SuperSalon-POS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"SuperSalon POS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"SuperSalon POS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sweler-product\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"SweetRice\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered By <a href=\\\\\\\"http://www.basic-cms.org\\\\\\\">Basic CMS SweetRice</a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Promise-WebPAM\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"js/promise/themes/apple/images/logo_promise.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"js/dojo/promise.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WSST-law enforcement information management system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"action=\\\\\\\"/?_a=login&_c=index&_m=index\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5317\\u4eac\\u667a\\u654f\\u79d1\\u6280\\u53d1\\u5c55\\u6709\\u9650\\u516c\\u53f8\\u00b7\\u7248\\u6743\\u6240\\u6709\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alarmability - Electronic Evidence Management System\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"\\u5a92\\u4f53\\u6570\\u636e\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"diag.url = \\\\\\\"iframe.php?action=announce&position=login&id=\\\\\\\"+id;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u7535\\u5b50\\u8bc1\\u636e\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u6df1\\u5733\\u8b66\\u7ffc\\u6570\\u7801\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Avaya-MCU video conferencing system\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"McuV572_1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"document.location.href = jarName + \\\\\\\"/login.asp\\\\\\\" + query\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"MCU Default Page\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"phpBB\",\n  \"logic\": \"a||b|| (c&&d&&e) ||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Set-Cookie: phpbb3_\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HttpOnly, phpbb3_\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"&copy;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"http://www.longluntan.com/zh/phpbb/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"phpBB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"phpBB Group\\\\\\\" />\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"START QUICK HACK - phpBB Statistics MOD\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-USG2130\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"USG2130\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"USG2130\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"zen_cart-shopping\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"shopping cart program by Zen Cart\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Set-Cookie: zenid=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"shoppingcartsession=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Set-Cookie: zenid=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"shoppingcartsession=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DouPHP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"DouPHP \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TWCMS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/twcms/theme/default/css/global.css\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TWCMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CICRO-Management Products\",\n  \"logic\": \"(a&&b) ||c||d|| (e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cicro\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CWS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"Cicro\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"index.files/cicro_userdefine.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"structure/index\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"window.location.href=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SiteServer\",\n  \"logic\": \"(a&&b&&c) ||d||e|| (f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"http://www.siteserver.cn\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"SiteServer CMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Powered by SiteServer CMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"T_\\u7cfb\\u7edf\\u9996\\u9875\\u6a21\\u677f\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"siteserver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"sitefiles\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-SRG3230\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SRG3230\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zhiyuan Internet-FE\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FE\\u534f\\u4f5c\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"V_show\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"V_hedden\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP3000-SERIES\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HP3000 SERIES\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Firehose_SERVICE_MONITORING\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Firehose_SERVICE_MONITORING \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<h1>Firehose_SERVICE_MONITORING Status</h1>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huawei - Enterprise Agent Server\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"User Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Huawei Technologies Co., Ltd.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<form name=\\\\\\\"frmLogon\\\\\\\" id=\\\\\\\"frmLogon\\\\\\\" method=\\\\\\\"post\\\\\\\"  action=\\\\\\\"/operatorlogin\\\\\\\" onsubmit=\\\\\\\"return check()\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Strong News Technology - ULTRACRM\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"UltraCRM by ToneThink.Soft\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"&nbsp;ToneThink.Soft&nbsp;&nbsp;All Rights Reserved\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Poly companies products\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Polycom Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"resources/webLogin-all.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"McAfee-Email_Gateway\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EG4000/SMTP Ready\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"EG4500/SMTP Ready\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"EG5000/SMTP Ready\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"EG5500/SMTP Ready\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"McAfee Email Gateway \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Trendmicro-IMSA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"220 ESMTP IMSA\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Support-Incident-Tracker\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Set-Cookie: SiTsessionID=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class='windowtitle'>SiT! - Login</div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"SiT! Support Incident Tracker\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Set-Cookie: SiTsessionID=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tenon-iTools\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"(iTools\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Mac OS X\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"(iTools\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Mac OS X\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ThoughtConduit\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<html><head><title>Error</title></head><body>Your request produced an error.</body></html>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TEK_TRONIKS-Company Products\",\n  \"logic\": \"a||b||c|| (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"DATAcentre\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Tektroniks\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Tektroniks\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<td width=\\\\\\\"100\\\\\\\"><label id=\\\\\\\"AU_LOGIN_ID_label\\\\\\\" for=\\\\\\\"AU_LOGIN_ID\\\\\\\" datatype=\\\\\\\"\\\\\\\" required=\\\\\\\"true\\\\\\\">User Name:</label></td>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"CmsEasy\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by CmsEasy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"http://www.cmseasy.cn/service_1.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"CmsEasy\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Discuz\",\n  \"logic\": \"a||b|| (c&& (d||e||f)) ||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by Discuz\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Discuz\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"discuz_uid\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"portal.php?mod=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"href=\\\\\\\"/forum.php?\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"id=\\\\\\\"discuz_tips\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Powered by <strong><a href=\\\\\\\"http://www.discuz.net\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-USG5310\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"USG5310\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PhpCMS\",\n  \"logic\": \"(a&&b) ||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"http://www.phpcms.cn\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"Phpcms\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Powered by Phpcms\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"data/config.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-AR2240\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Huawei AR2240\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Eyou-anti-spam gateway\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u53cd\\u5783\\u573e\\u90ae\\u4ef6\\u7f51\\u5173  - \\u4ebf\\u90ae\\u901a\\u8baf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"\\u4ebf\\u90ae\\u5927\\u5bb9\\u91cf\\u7535\\u5b50\\u90ae\\u4ef6\\u7cfb\\u7edf\\uff0c\\u53cd\\u5783\\u573e\\u90ae\\u4ef6\\u7f51\\u5173\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Joomla\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Joomla\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/media/system/js/core.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/media/system/js/mootools-core.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ThinkPHP\",\n  \"logic\": \"((a||b) &&c&&d) ||e|| ((f||g) &&h&&i)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"thinkphp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"think_template\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"St: upnp:rootdevice\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"href=\\\\\\\"http://www.thinkphp.cn\\\\\\\">ThinkPHP</a><sup>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"thinkphp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"think_template\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"St: upnp:rootdevice\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"\\u534e\\u4e3a-Eudemon-1000E\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Eudemon 1000E\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Eudemon1000E\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Huawei Eudemon1000E-N6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie-switch\",\n  \"logic\": \"(a&&b) || (c&&d) || (e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Red-Giant\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Ruijie Network\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Ruijie\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Switch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"AP\\u8bbe\\u5907\\u4e2d\\u7684\\u914d\\u7f6e\\u5e76\\u4e0d\\u91cd\\u8981\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"id=\\\\\\\"a_lang_switch\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-USG5150\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"USG5150\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"USG5150\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Elasticsearch\",\n  \"logic\": \"(((a&&b) || (c&&d&&e)) &&f&&g&&h) ||i||j||k|| (l&& (m||n))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"application/json\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"build_hash\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"You Know, for Search\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"DVRDVS-Webs\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<html\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"elastic\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"realm=\\\\\\\"ElasticSearch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"realm=\\\\\\\"ElasticSearch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"CommonName: elasticsearch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"realm=\\\\\\\"security\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"realm=\\\\\\\"security\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"All people network -IKey management system\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"iKEY,\\u4f17\\u4eba\\u79d1\\u6280,IKEY\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"iKEY\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<div id=\\\\\\\"ikey_conter\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JBoss-EAP\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<h3>Your JBoss Enterprise Application Platform is running.</h3>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"EAP 6\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"eap.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Amazon-Cloud Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"x-amz-error-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"x-amz-error-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sophos-firewall\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"xx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"support@sophos.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Sophos\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-USG2250\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"USG2250\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"USG2250\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-SRG2220\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SRG2220\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WisiyiLink-Print Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a class=\\\\\\\"brand\\\\\\\" href=http://www.wisiyilink.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"WiSiYiLink\\u00a92013-2017\\u7248\\u6743\\u6240\\u6709 \\u4e13\\u6ce8\\u6253\\u5370\\u670d\\u52a1\\u5668\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sophos-UTM\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"wfe/asg/js/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APACHE-ZooKeeper\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"zookeeper\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZED_3-Multimedia Scheduling System\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"document.location=\\\\\\\"main.php\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Content-Length: 73\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<a \",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"HUAWEI-USG5320\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"USG5320\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FangMail\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/fangmail/default/css/em_css.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/fangmail/cgi/index.cgi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ESMTP fangmail\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tencent - enterprise mailbox\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/cgi-bin/getinvestigate?flowid=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ssl_edition=mail.qq.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/cgi-bin/bizmail_portal\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u817e\\u8baf\\u4f01\\u4e1a\\u90ae\\u7bb1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"content=\\\\\\\"\\u767b\\u5f55\\u817e\\u8baf\\u4f01\\u4e1a\\u90ae\\u7bb1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-P-873HNUP-51B\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZyXEL P-873HNUP-51B\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZyXEL P-873HNU-51B\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ZyXEL P-873HNUP-51B\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"qmail\",\n  \"logic\": \"a|| (b&& (c||d)) ||e||f||g||h||i\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"qmail home page: http://pobox.com/~djb/qmail.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"qmail-ldap\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"smtp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"imap\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Welcome to Qmail Toaster\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"ESMTP qmail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Qmail ESMTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Qmail SMTP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"QMail 5.1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"New network interconnection - News Mail System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"cgijson/getloginimg.php?img=logo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/webmail//cssV2/Tamail.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TCExam\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a name=\\\\\\\"topofdoc\\\\\\\" id=\\\\\\\"topofdoc\\\\\\\"></a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Nicola Asuni - Tecnick.com s.r.l.\\\\\\\" />\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HANWei-Website Group Content Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"showsubpage.jsp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Phoenix-ILC-151-GSM\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ILC 151 GSM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WISEGIGA\",\n  \"logic\": \"(a||b||c) &&d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/admin/css/style_wisegiga.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"WISEGIGA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"images/i_logo01.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Onethink\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ThinkPHP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Onethink\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<a href=\\\\\\\"http://www.onethink.cn\\\\\\\" target=\\\\\\\"_blank\\\\\\\">OneThink</a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/css/onethink.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Youngzsoft-DBMail\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u9065\\u5fd7DBMail\\u90ae\\u4ef6\\u670d\\u52a1\\u5668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"http://www.dbmailserver.com\\\\\\\" target=_blank\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"DBMail/Shr\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alibaba-enterprise mailbox\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"action=\\\\\\\"/alimail/error/browserLog\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"\\u963f\\u91cc\\u4f01\\u4e1a\\u90ae\\u7bb1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"alimail_browser_instance\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"alimail_browser_instance\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"35 Enterprise Email - Mail System\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"switchingServerPopup\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"35\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"images/mail/35pushmail.app.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"class=\\\\\\\"user_define_img_btn6\\\\\\\" href=\\\\\\\"http://help.mail.35.com/mailman/81.html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CE- Yun Post\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"http://webmail.zmail300.cn\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/page/help/mailConfig/config/index.html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Toshiba-Network-Camera\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TOSHIBA Network Camera\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Toshiba-Cable-Modem\",\n  \"logic\": \"a||b||c|| (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Toshiba Cable Modem PCX3000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: PCX3000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: PCX3000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<FONT color=\\\\\\\"#980040\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"DZS-6718-W1-xDSL-Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"6718-W1 xDSL Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DAVOLINK-DV-332D\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DV-332D\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DAVOLINK-DV102FB\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DV102FB\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DAVOLINK-DV101FB\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DV101FB\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DAVOLINK-DVW-2300N\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DVW-2300N\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ECI-HiFOCuS\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ECI telecom HiFOCuS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ECOBAND-network products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ecoband Networks\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Eaton-Monitored-ePDU\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Eaton Monitored ePDU\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Partizan-Cameras\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"style=\\\\\\\"font-size:24px;float:left;\\\\\\\">Network video client\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Partizan Web Surveillance\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZKTECO-ZEM560\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZEM560 login:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"(ZEM560) for MIPS \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tencent-Foxmail-Server\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/images//FoxS_Logo.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Foxmail Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Aerofox Mail Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Xinnet - Enterprise Post\",\n  \"logic\": \"a&& (b||c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5317\\u4eac\\u65b0\\u7f51\\u6570\\u7801\\u4fe1\\u606f\\u6280\\u672f\\u6709\\u9650\\u516c\\u53f8 \\u7248\\u6743\\u6240\\u6709</span>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"mail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"webmail\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mini Technology - EQManager Mail Gateway\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"smtp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"EQManager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"263 Cloud Communication - Enterprise Mailbox\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"net263.wm.custom_login.homepage_init\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"263\\u4f01\\u4e1a\\u90ae\\u7bb1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Subject: c=CN, st=Beijing, l=Beijing, o=Beijing 263 Enterprise Correspondence CO.,Ltd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"src=\\\\\\\"/custom_login/js/net263_wm_util.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Blockdos- Product\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"server: BlockDos.net\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: BlockDOS.Net\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: BlockDOS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Observa_telecom-product\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OBSERVA\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"San Zero Shengan - Safe Mail System\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5b89\\u5168\\u7535\\u5b50\\u90ae\\u4ef6\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"30San.All Rights Reserved.</div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Subject: c=CN, st=Sichuan, l=Chengdu, o=30SAN Information System Ltd., ou=Dragon Mail 2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KafkaOffsetMonitor\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Kafka Consumer Offset Monitor\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"css/cluster-viz.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ACME-PLC-Wireless-Router\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PLC Systems, Inc.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PLC Wireless Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"lang_firmwareLogin\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Weblogic_interface_7001\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Error 404--Not Found\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"vxTarget-FTP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"vxTarget FTP server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EPC-8000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EPC-8000 FTP server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Treck-FTP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Treck FTP server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tianxing Netan - Video Image Security Monitoring Access System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<meta http-equiv=\\\\\\\"Refresh\\\\\\\" content=\\\\\\\"0;url=/userCertLoginAction.action\\\\\\\" />\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5929\\u884c\\u89c6\\u9891\\u56fe\\u50cf\\u5b89\\u5168\\u76d1\\u63a7\\u63a5\\u5165\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Strong News Technology - Talentel_Log-Recording Client\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6b22\\u8fce\\u60a8\\u4f7f\\u7528Talentel_Log-\\u5f55\\u97f3\\u5ba2\\u6237\\u7aef\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Freecom-recording platform\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"'FreeSet\\u901a\\u4fe1\\u7cfb\\u7edf\\u96c6\\u4e2d\\u7f51\\u7ba1\\u7cfb\\u7edf')\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FreeCom\\u5f55\\u97f3\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"FreeCom\\u5f55\\u97f3\\u5e73\\u53f0---\\u767b\\u5f55\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Silex-SX-3000GB\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"silex SX-3000GB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SX-3000GB\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Raytheon-DSP-2\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DSP-2 Configuration Utility\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<B>Unit Name: DSP-2</B></CENTER>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Raytheon Corporation\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Runpu Technology - Embedded Voice Recording System\",\n  \"logic\": \"a||b|| (c&&d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6da6\\u666e\\u5d4c\\u5165\\u5f0f\\u7f51\\u7edc\\u7535\\u8bdd\\u5f55\\u97f3\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<th colspan=\\\\\\\"3\\\\\\\">\\u6da6\\u666e\\u5d4c\\u5165\\u5f0f\\u7f51\\u7edc\\u7535\\u8bdd\\u5f55\\u97f3\\u7cfb\\u7edf</th>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/login.lgi?orgurl=/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Set-Cookie: orgurl=/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"\\u6da6\\u666e\\u79d1\\u6280\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Rongzhixinghua-IoT Gateway\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7269\\u8054\\u7f51\\u7f51\\u5173-\\u5317\\u4eac\\u878d\\u667a\\u5174\\u534e\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-USG6620\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Huawei USG6620\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"USG6620\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FHGis\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"onclick=\\\\\\\"goto('FHGis')\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fastjson\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"js/base/fastjson\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var json = JSON.parse\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Samsung-ML-371x-Series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Samsung ML-371x Series\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Nortel-Call-Server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NORTEL, Succession 1000/M Call Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huawei-ViewPoint Video Conference\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MCU V100R005\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"window.location.replace(pathname + \\\\\\\"login.html\\\\\\\");\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Software - Network hidden danger scanning system\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5b89\\u62d3.\\u6995\\u57fa\\u7f51\\u7edc\\u9690\\u60a3\\u626b\\u63cf\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: RJ-iTop\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: RJ-iTop\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VAA-embedded telephone recording system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"\\u5148\\u950b\\u6613\\u8baf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5148\\u950b\\u5d4c\\u5165\\u5f0f\\u7535\\u8bdd\\u5f55\\u97f3\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"iTEST3.0\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"iTEST3.0\\u767b\\u5f55\\u754c\\u9762\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/itest/static/its/lib/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GE-Security\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GE-Security\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<FRAME src=\\\\\\\"/servlets/Top\\\\\\\" name=\\\\\\\"upper\\\\\\\" marginheight=\\\\\\\"2\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Techbridge-Cloud Conference\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/common/web_meeting/index.php\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"http://www.techbridge-inc.com/\\\\\\\" target=\\\\\\\"_blank\\\\\\\"></a></span>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/images/web_meeting/tool_bg.jpg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/joinmeeting.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/common/web_meeting/index.php\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Software - Risk Management System\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6995\\u57fa\\u98ce\\u9669\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: RJ-RMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: RJ-RMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HiveMail\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Hivemail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"hivesession\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"hivesession\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"blah-FTP\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"t\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"blah FTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FreeBSD-system\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FreeBSD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"FreeBSD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"PLDSEC- Unified Safety Management and Integrated Audit System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"module/image/pldsec.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Qingyuan Network-Management System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"-moz-background-size\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"u_logo fa fa-user\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SMA-Sunny_Webbox\",\n  \"logic\": \"(a&&b&&c&&d) || (e&&f) || (g&&h) || (i&&j) ||k|| (l&&m&&n&&o) || (p&&q&&r&&s)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SMA Sunny Webbox\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: WebBox-20\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"server: WebBox-20\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Server: Sunny WebBox\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"Server: Sunny WebBox\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"<meta http-equiv=\\\\\\\"refresh\\\\\\\" content=\\\\\\\"0; url=/culture/index.dml\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"Sunny WebBox\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"q\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"r\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"s\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Huawei-video equipment\",\n  \"logic\": \"((a||b) &&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<html><body><script language=JavaScript>window.open('/CN/LOGIN.HTM','_top', null, true);</script></body></html>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Host: huaweiVP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Host: huaweiVP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Digi-RCM-2000\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location.replace(\\\\\\\"/flex\\\\\\\");\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Content-Length: 337 \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Citrix-XCP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<p/>Citrix Systems, Inc. XCP 1.6.10\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Citrix companies products\",\n  \"logic\": \"a|| (b&&c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"value=\\\\\\\"guia\\\\\\\" selected\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Citrix Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Netscape/Firefox/Opera\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"DVRDVS-Webs\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"China Telecom-Huiyitong\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/hytConfWatch/jump.jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"http\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/hytConfWatch/jump.jsp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BayTech-DS72\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DS72 Host Module\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie- Cloud Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"RCP, \\u7ba1\\u7406\\u5e73\\u53f0\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Petrochemical Yingke - Refining Enterprise Laboratory Information Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/Home/Plug_in_download\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sun-GlassFish\",\n  \"logic\": \"(a&&b&&c&&d) || (e&&f&&g) || (h&&i) || (j&&k)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: GlassFish Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"server: GlassFish Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"webui/jsf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"GlassFish Community\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Petrochemical Yingke - Process Management System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cboZT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"txtDLSJ\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"sX-Shop\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"alert(\\\\\\\"Ihr Suchbegriff muss mind. aus 3 Zeichen bestehen.\\\\\\\");\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Source WorX - Software Development\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yi Rui Authorized Access System\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/authjsp/login.jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FE0174BB-F093-42AF-AB20-7EC621D10488\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u6613\\u745e\\u6388\\u6743\\u8bbf\\u95ee\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dnaTools-dnaLIMS\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"dnaLIMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/cgi-bin/dna/password.cgi\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Jiusi Software - Collaborative Office System\",\n  \"logic\": \"a&& (b||c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e5d\\u601d\\u8f6f\\u4ef6\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"OA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u529e\\u516c\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dasan-router\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cgi-bin/top.cgi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"cgi-bin/menu.cgi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Geutebruck\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Geutebruck G-Web\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Geutebr\\u00fcck G-Web\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kibana\",\n  \"logic\": \"a||b|| (c&&d) || (e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Kibana\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"kbnVersion\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Kbn-Name: kibana\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Kbn-Version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Kbn-Name: kibana\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Kbn-Version\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Puppet-Node-Manager\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Puppet Node Manager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MongoDB-\\u6570\\u636e\\u5e93\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"/_replSet\\\\\\\">Replica set status</a></p>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"mongodb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"You are trying to access MongoDB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"mongod.exe\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IX-Series-IX3100\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IX Series IX3100\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: IX Series IX3100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-Wireless-LAN\",\n  \"logic\": \"a&& (b||c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WLAN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cloud Access Point\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Access Controller\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ipTIME-A9004M\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.a9004m.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME A9004M\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Toshiba-DBR\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"DBR-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DBR-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"appex-lotapp\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AppEx Network Corporation\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/change_lan.php?lanid=En\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"LotApp \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"LotApp \\u5e94\\u7528\\u4ea4\\u4ed8\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AsiaInfo - Safety Management and Analysis Platform\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/sso/index.do?appid=ssa\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/sso/index.do?appid=ssa\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Digi-One\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Digi One\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Digi One IAP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UBNT-EdgeSwitch\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"EdgeSwitch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kelai-Network Full Flow Security Analysis System\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u79d1\\u6765\\u7f51\\u7edc\\u5168\\u6d41\\u91cf\\u5b89\\u5168\\u5206\\u6790\\u7cfb\\u7edf - \\u670d\\u52a1\\u5668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"data-i18n=\\\\\\\"[html]USERNAME\\\\\\\">#USERNAME&nbsp;&nbsp;</td>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"nfr=\\\\\\\"true\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yasw\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Yaws\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: Yaws\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"TAC-Xenta-Controller\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: TAC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: TAC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<html><body><script>var url=\\\\\\\"https://\\\\\\\"location.hostname\\\\\\\"/www/index/Slogin.html\\\\\\\";location.href=url;</script></body></html>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"HuaWei-ManageOne\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: lbserver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: lbserver\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Freeenas-product\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"title=\\\\\\\"Welcome to FreeNAS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/images/ui/freenas-logo.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"ThinkSAAS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"https://www.thinksaas.cn/app/home/skins/default/style.css\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hua Tian Power -Oa8000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/OAapp/WebObjects/OAapp.woa\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FEX\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: fexsrv\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: fexsrv\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"mailto:fexmaster@ostc.de\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FileMakerPro\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: FileMakerPro\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Generator: Drupal \",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: FileMakerPro\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"X-Generator: Drupal \",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Fpoll\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"admincp/css.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FreakAuth\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Set-Cookie: FreakAuth\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Set-Cookie: FreakAuth\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FreePBX\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"FreePBX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"FreePBX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"FreePBX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"freepbx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-ACS\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ACS5.3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"cisco\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<meta HTTP-equiv=\\\\\\\"REFRESH\\\\\\\" content=\\\\\\\"0;url=/acsadmin\\\\\\\" />\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"href=\\\\\\\"/acsadmin\\\\\\\">Launch ACS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Lotus-Expeditor\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Lotus Expeditor Web\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Lotus Expeditor Web\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-Remote-Supervisor-Adapter\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IBM Remote Supervisor Adapter II\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<FRAME scrolling=\\\\\\\"no\\\\\\\" src=\\\\\\\"/private/userlogin_logo.ssi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/private/testcookie.ssi?sessid=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"StorageTek-NAS\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: StorageTek-HTTPD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: StorageTek-HTTPD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Sun StorageTek NAS OS Web Admin\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SIMPLE_MACHINES- Products\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"http://www.simplemachines.org/about/copyright.php\\\\\\\" title=\\\\\\\"Free Forum Software\\\\\\\" target=\\\\\\\"_blank\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<img class=\\\\\\\"floatright\\\\\\\" id=\\\\\\\"smflogo\\\\\\\" src=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"document.getElementById(\\\\\\\"upshrink\\\\\\\").src = smf_images_url + \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-Router\",\n  \"logic\": \"(a&&b) || (c&& (d||e)) ||f||g||h||i||j\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \".:: Welcome to the Web-Based Configuration::.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZyXEL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \".:: Welcome to the Web-Based Configurator::.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/zycss.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"zyxel\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"do Router ZyXEL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Welcome to ZyROUTER\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"ZyXEL Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"<friendlyName>ZyXEL Router</friendlyName>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"ZyXEL-router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Siemens-HiPath-4000\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HiPath 4000 Administration Tutorial\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: HiPath 4000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tianyi Xinde - Monitoring System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login.ashx?mode=Valid\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zidesoft-E8\\u6863\\u6848\\u7ba1\\u7406\\u7cfb\\u7edf\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"http://www.zhidesoft.com/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"E8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Network Resource Integrated Support Assist Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<b>\\u7f51\\u7edc\\u8d44\\u6e90\\u7efc\\u5408\\u652f\\u6491\\u8f85\\u52a9\\u5e73\\u53f0</b>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"REACH Rare-DSS-ENC-100\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u89c6\\u97f3\\u9891\\u7f16\\u7801\\u5668DSS-ENC-100\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u6df1\\u5733\\u5e02\\u9510\\u53d6\\u8f6f\\u4ef6\\u6280\\u672f\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \":::SD Encoder(ENC110):::\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Waspd\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Pending Waspd Activities</font>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D-Link-DSL-Router\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"DSL Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"DSL Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"DSL Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Acquisition System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"S_container_left\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"upgrade/ocx/CCDmsShell.cab#version\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Li Wei Technology - Digital Campus System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"list.asp?caseid=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"kingdee-OA\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"oa/login/logout.jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"location.href=\\\\\\\"/kingdee/index.jsp\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"logo-kingdee.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-Magic-R2+Pro\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var product_type = \\\\\\\"R2+Pro\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AlliedTelesis-Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Allied Telesis router/switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Chongqing Baiding-Baiding OA\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CA0B0334\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"onload=\\\\\\\"javascript:form1.TxtUserName.focus\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Technicolor-DOCSIS-Gateway\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Common UI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Technicolor. All rights reserved.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"grentech - centralized wireless controller\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u56fd\\u4eba\\u901a\\u4fe1 - \\u96c6\\u4e2d\\u65e0\\u7ebf\\u63a7\\u5236\\u5668\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-XRN-2010\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"$.nvr.model_name=\\\\\\\"XRN-2010\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GT866-IAD\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GT866_IAD\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zoom-Modem\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ethernet/Wireless Cable\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Zoom Telephonics, Inc.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-SND-7061\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var defaultfilename = \\\\\\\"SND-7061\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"F5-FirePass\",\n  \"logic\": \"(a|| (b&&c)) || (d|| (e))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"uRoamTestCookie\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MRHSession\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"VHOST\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"MRHIntranetSession\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"MRHCId\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Panasonic-BB-HCM511\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"GeneralUser/Administrator\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Basic realm=\\\\\\\"GeneralUser/Administrator\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-WS switch\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco Systems WS-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco Systems, Inc. WS-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<H2>Accessing Cisco WS-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"DELL-POWEREDGE-T620\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"serverinfo\\\\\\\"> PowerEdge T620\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"POWEREDGE-T620\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"id=\\\\\\\"serverinfo\\\\\\\"> T620, DBE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"POWEREDGE-T620\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-T130\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge-T130\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PowerEdge-T130\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"PowerEdge-T130\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-65UK6500PWC\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelName>65UK6500PWC</modelName>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZOOM-video conference\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"alert alert-success hideme zoom-newmessage\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-43UK6400PLF\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelName>43UK6400PLF</modelName>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Coship-router module\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Coship Electronics Wireless Route Module\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Coship Electronics Wireless Route Module\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zhuhai full vision - integrated platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5168\\u89c6\\u901a\\u96c6\\u6210\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Time-Time Shares - Call Center\",\n  \"logic\": \"(a&&b) ||c||d|| (e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6b22\\u8fce\\u60a8\\u4f7f\\u7528\\u96c6\\u65f6\\u901a\\u8baf\\u547c\\u53eb\\u4e2d\\u5fc3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"justadmin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"form.action=\\\\\\\"/justadmin/index.html\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<a href=\\\\\\\"http://www.justcall.cn\\\\\\\" target=\\\\\\\"_blank\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"userweb/index.php?module=user&action=login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"justadmin\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LinkBroad-YunGW\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"LinkBroad YunGW\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KEENETIC-\\u516c\\u53f8\\u4ea7\\u54c1\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Keenetic Web\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZEBRA-GX430t\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZTC GX430t</H1>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-MAX-206M1R\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MAX-206M1R\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Avaya-ERS-1624\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ERS-1624\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Epson-Network-Projector\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Epson Network Projector\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Epson-Scanning-Card\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EPSON\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Scanning Card\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N704M\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n704m.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n704mlg.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ipTIME-N704S\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n704s.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-Merge-PACS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<option value=\\\\\\\"Merge PACS\\\\\\\">Merge PACS</option>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Eltex-Router\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Eltex Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Eltex Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Eltex Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Shanghai Bell-EG766HW\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EG766HW-GC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EfficientIP-SOLIDserver\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EfficientIP SOLIDserver\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"QNO-4WAN_4LAN_QoS_Security_Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"4WAN_4LAN_QoS_Security_Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DrayTek-V3300\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Draytek V3300 Advanced Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"kannel\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Kannel/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Kannel/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Kannel\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fabric-OS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Fabric OS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Fabric OS (tm)  Release\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"China Unicom-CBSS system\",\n  \"logic\": \"a||b||c||d||e||f||g||h||i\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"</a>\\u767b\\u5f55cBSS\\u7cfb\\u7edf</p>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"cookie_CBSS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"BSS_JSESSIONID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<li>com.cbss.xss.filter.XSSFilter.doFilter\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"BSS_FILESERV_JSESSIONID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"BSS_HM_JSESSIONID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"BSS_ACCTMANM_JSESSIONID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"BSS_JSESSIONID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"BSS_HM_JSESSIONID\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-PageWide-Pro-452dn-Printer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: HP PageWide Pro 452dn Printer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: HP PageWide Pro 452dn Printer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-TL-WDR7500\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TP-LINK Wireless Dual Band Gigabit Router WDR7500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TP-LINK Wireless WDR7500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"TP-LINK Wireless Dual Band Gigabit Router WDR7500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"TP-LINK Wireless WDR7500\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mini Technology - EQMAIL\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"powered by eqmail!\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"eqmail.ico\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<frame src=\\\\\\\"/cgi-bin/eqwebmail?empty=1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-SR8806-X-S\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SR8806-X-S\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NCAST-product\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5e7f\\u5dde\\u76c8\\u53ef\\u89c6\\u7535\\u5b50\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\\uff08Ncast\\uff09\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"\\u76c8\\u53ef\\u89c6Ncast\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DHI-XVR5104C\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DHI-XVR5104C\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DHI-XVR4108HE\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DHI-XVR4108HE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DH-SD50220TN-HN\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DH-SD50220TN-HN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DH-SD29204T-GN-W\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DH-SD29204T-GN-W\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microba Vote Management System\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"31cms2016\\u6295\\u7968\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"\\u5fae\\u5e73\\u53f0\\u6295\\u7968\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"\\u5fae\\u5e73\\u53f0\\u6295\\u7968\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<a href=\\\\\\\"http://www.cdrbp.cn\\\\\\\">\\u5fae\\u4fe1\\u6570\\u5b57\\u6295\\u7968\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OPT-working operation management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"javascript:__doPostBack('lbAnonymous','')\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HikVision-Video Quality Diagnostic System\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u89c6\\u9891\\u8d28\\u91cf\\u8bca\\u65ad\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HIKVISION\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"id =\\\\\\\"helpDoc\\\\\\\" class=\\\\\\\"help\\\\\\\" href=\\\\\\\"common/helpDoc/VQD System User Manual(V2.4).pdf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<meta http-equiv=\\\\\\\"refresh\\\\\\\" content=\\\\\\\"0;url=VQD.Workbench.aspx\\\\\\\" /> \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DAHUA-embedded multi-screen controller\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5d4c\\u5165\\u5f0f\\u591a\\u5c4f\\u63a7\\u5236\\u5668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<!--div id=\\\\\\\"information\\\\\\\">\\u6d59\\u6c5f\\u5927\\u534e\\u6280\\u672f\\u80a1\\u4efd\\u6709\\u9650\\u516c\\u53f8</div-->\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Qianxin -NGSOC\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NGSOC\\u5173\\u8054\\u89c4\\u5219\\u5f15\\u64ce\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NGSOC\\u65e5\\u5fd7\\u91c7\\u96c6\\u63a2\\u9488\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Operation and maintenance audit system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"go_login(\\\\\\\"/iam/login.jsp\\\\\\\")\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"17mail-email\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"//\\u6613\\u4f01\\u90ae\\u6b63\\u5f0f\\u7248\\u53d1\\u5e03\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NetScout-nGeniusONE\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nGenius Redirect\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var newpath = \\\\\\\"/common/nGeniusDirect.jsp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Schneider-Modicon-M340\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Modicon M340\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cloud box\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ui/js/seaConfig.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ui/skins/black/style.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"class=\\\\\\\"client-list dm-clear\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u4e91\\u76d2\\u5b50 -- \\u767b\\u5f55\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mimosa-B5c-Firmware\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Mimosa B5c Firmware\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SDIC-Mei Bo Bo-product\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u624b\\u673a\\u6570\\u636e\\u91c7\\u96c6\\u7cfb\\u7edf - \\u7f8e\\u4e9a\\u67cf\\u79d1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Meiya Pico. All Rights Reserved\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SQL-Buddy\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"h3><a href=\\\\\\\"http://www.sqlbuddy.com/help\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"themes/bittersweet/css/main.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Squarespace\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"new Squarespace.FixedPositionTip(\\\\\\\"Logout Successful\\\\\\\", \\\\\\\"You have been successfully logged out.\\\\\\\", { xMargin: 15, yMargin: 15, icon: \\\\\\\"/universal/images/helptip-info.png\\\\\\\", orientation: \\\\\\\"upper-right\\\\\\\", viewportFixed: true, autoHide: 1800 }).show();\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"netentsec Technology - Internet Control Gateway\",\n  \"logic\": \"a||b|| (c&&d) || (e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7f51\\u5eb7\\u4e92\\u8054\\u7f51\\u63a7\\u5236\\u7f51\\u5173\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u7f51\\u5eb7\\u79d1\\u6280\\u00b7\\u4e92\\u8054\\u7f51\\u63a7\\u5236\\u7f51\\u5173\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u4e92\\u8054\\u7f51\\u63a7\\u5236\\u7f51\\u5173\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u5317\\u4eac\\u7f51\\u5eb7\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"\\u4e92\\u8054\\u7f51\\u63a7\\u5236\\u7f51\\u5173\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"function getSlotSerialNumber(slotID)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SmokePing\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<A href=\\\\\\\"http://oss.oetiker.ch/smokeping/counter.cgi/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<tr><td class=\\\\\\\"menuitem\\\\\\\" colspan=\\\\\\\"2\\\\\\\">&nbsp;-&nbsp;<a class=\\\\\\\"menulink\\\\\\\" href=\\\\\\\"?target=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Solidyne-iNET-Server\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<META HTTP-equiv=\\\\\\\"refresh\\\\\\\" content=\\\\\\\"0; url=/hmi/\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Solidyne iNET Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<frame name=\\\\\\\"frLeft\\\\\\\" scrolling=\\\\\\\"NO\\\\\\\" id=\\\\\\\"frLeft\\\\\\\" src=\\\\\\\"QFrLeft.aspx\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Softbiz-Online-Classifieds\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"http://www.softbizscripts.com/classified-ads-plus-script-features.php\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SMC-Data-Gateway\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DOCSIS \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Data Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"SMC Networks\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SAVANT-web server\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Savant\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Savant\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Savant\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"Savant\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dell-Force10\",\n  \"logic\": \"a&& (b||c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Dell Force10 \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Force10 Networks\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dell-24port-Switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Dell 24 Port Gigabit Ethernet\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Heart Sea Navigation - Psychological Consultation Platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"../regist.asp?school=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5317\\u4eac\\u5fc3\\u6d77\\u5bfc\\u822a\\u6559\\u80b2\\u79d1\\u6280\\u80a1\\u4efd\\u6709\\u9650\\u516c\\u53f8-\\u4e2d\\u56fd\\u5fc3\\u7406\\u7f51\\u7248\\u6743\\u6240\\u6709<br>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MERCURY-IP-Camera\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Mercury IP-Camera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Mercury IP-Camera\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-THR120GW-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET THR120GW series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Queen Star-Tiangle Crisp Weak Scanning and Management System\",\n  \"logic\": \"a|| (b&&c) || (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5929\\u955c\\u8106\\u5f31\\u6027\\u626b\\u63cf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"document.location=\\\\\\\"login/loginIndex.action\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<a\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"document.location=\\\\\\\"login/loginIndex.action\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Content-Length: 208\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Qi Ming Stars - Tiandong Abnormal Traffic Detection\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5929\\u6e05\\u5f02\\u5e38\\u6d41\\u91cf\\u68c0\\u6d4b\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Digi-Connect-WAN-3G\",\n  \"logic\": \"a&&b&& (c||d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Connect WAN 3G\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Watchport sensor\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"(RS232 serial)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HIGHCHARTS\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"highcharts.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"highcharts.min.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"highcharts({\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"highcharts()\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-alarm research\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6df1\\u5733\\u5e02\\u4e2d\\u5174\\u4fe1\\u606f\\u6280\\u672f\\u6709\\u9650\\u516c\\u53f8\\u7248\\u6743\\u6240\\u6709\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"img/GonAnLogo.jpg\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ARRIS-CMTS\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CMTS_V05.01.06.05\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"arris\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RSA50W-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RSA50W series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-n6000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco NX-OS(tm) n6000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-REC1550-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET REC1550 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-HMM\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"hmm_login_box_list\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HMM Web\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RE3550-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RE3550 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MF4500-Series\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Canon MF4500 Series\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<td>MF4500 Series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RE1550-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RE1550 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RE1500-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RE1500 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Red-Lion-HMI\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by <a href=http://www.redlion.net>Red Lion\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BlueCoat-SG300\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Blue Coat SG300\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Blue Coat SG300\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Avaya-Bay-Networks-Company Products\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Bay Networks, Inc.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Bay Networks\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Telecom network attack intelligent detection system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4f5b\\u5c71\\u7535\\u4fe1\\u7f51\\u7edc\\u653b\\u51fb\\u667a\\u80fd\\u68c0\\u6d4b\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-Meeting-App\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div id=\\\\\\\"cisco_meeting_application\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Asterisk-Call-Manager\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Asterisk Call Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Asterisk Call Manager Proxy\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"TD-8820\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TD-8820\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TD-8820\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Netposa-Visual Cloud Battle Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u89c6\\u4e91\\u5b9e\\u6218\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Stream media encoder\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6d41\\u5a92\\u4f53\\u7f16\\u7801\\u5668\\u4e13\\u4e1a\\u7248</span>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Video monitoring management platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \" <span>\\u5e73\\u53f0\\u91c7\\u7528\\u6700\\u65b0\\u56fe\\u50cf\\u5316\\u5c55\\u73b0\\u6280\\u672f\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Camera product\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/doc/css/rzslider.css\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PivotX-Forum\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"includes/js/pivotx.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"templates_internal/assets/pivotx.png\\\\\\\" alt=\\\\\\\"PivotX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"PivotX\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"phpMyBackupPro\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"phpMyBackupPro\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Please login (use your MySQL username and password): <a href=\\\\\\\"index.php?login=TRUE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"phpMyBackupPro\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Maintenance insurance - product\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"plugins/wbb/Barrett.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-DSL-N14U_B1\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"DSL-N14U_B1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DSL-N14U_B1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tongjie -RP information management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/Content/Home/tzjLog.ico\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H_ui\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H-ui.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"H-ui.min.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"html5shi.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/css/H-ui.min.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/css/H-ui.login.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"/h-ui.admin/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"jquerymobile\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"jquery.mobile.custom.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"jquery.mobile.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZOHO-\\u6d41\\u91cf\\u7ba1\\u7406\",\n  \"logic\": \"(a&&b) ||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NetFlow Analyzer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZOHO\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ManageEngine NetFlow\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"href=\\\\\\\"/netflow/css/netflow.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"ManageEngine Analytics Plus\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Termite\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"termite-nest\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"termite-nest\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Netcat\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-NetCat-Version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-NetCat-Version\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huangfang Information-CMS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"session.infoCss.infoCssUrl\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Parature\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"KBFolder.asp?deptid=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"RedirectPortalURL('/ics/support/custhandler.asp?\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H264DVR\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: H264DVR \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"H264DVR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Openfiler\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"http://www.openfiler.com/\\\\\\\">Openfiler\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"</strong>Openfiler NAS/SAN Appliance\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DCN-DCRS-7604E\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<B>DCRS-7604E</B>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-C1900\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"C1900 Software \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"cisco\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Cisco IOS Software, C1900\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-Catalyst-4500\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Catalyst 4500 L3 Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"elite_CMS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Elite CMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Copyright &copy; 2003 - 2017 <a href=\\\\\\\"http://www.elite-is.com/cmhome.asp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Op5-Monitor\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"op5 Monitor login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/monitor/application/views/themes/default/css/default/common.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Aztech-Router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ADSL WLAN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Aztech Systems, Ltd.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Congshi Technology-Examination Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"placeholder=\\\\\\\"\\u8bf7\\u8f93\\u5165\\u51ed\\u636e\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MantisBT\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MantisBT Administration\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by Mantis Bugtracker\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"alt=\\\\\\\"Mantis Bugtracker\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"smartlink-DIGISOL\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DIGISOL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Smartlink Network Systems LTD.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-CR16010-F\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CR16010-F\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VERTIV-KVM switch\",\n  \"logic\": \"a||b|| (c&&d) ||e||f||g||h||i||j||k||l\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MPU2032\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MPU4032DAC Explorer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"/avct.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"alt=\\\\\\\"Avocent\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"MPU4032DAC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Avocent DSR8035\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Avocent DSR2035\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"MPU1016 \\u8d44\\u6e90\\u7ba1\\u7406\\u5668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"MPU4032 \\u8d44\\u6e90\\u7ba1\\u7406\\u5668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"A1000R 02.00.21\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"A1000R 02.00.22\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"A2000R \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-AR\\u654f\\u6377\\u7f51\\u5173\",\n  \"logic\": \"(a||b||c|| (d&&e)) &&f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"document.title = 'AR Web\\u767b\\u5f55\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/verifycode.cgi?vrfcodeid=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"document.title = 'Log In to AR Web';\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"checkVoiceService.cgi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"isPbxMode_callback\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"ZTE-IX350\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Welcome to ZTE IX350</span>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NTT_docomo-L-04D\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Model Name -->L-04D Connection Manager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TREND_MICRO-\\u516c\\u53f8\\u4ea7\\u54c1\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Trend Micro Deep Security\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Deep Security</h4>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LuCI\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/luci-static/openwrt.org/cascade.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"LuCI - Lua Configuration Interface\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Powered by LuCI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"action=\\\\\\\"/cgi-bin/luci\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"href=\\\\\\\"/cgi-bin/luci\\\\\\\"></a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"<head> <meta http-equiv=\\\\\\\"refresh\\\\\\\" content=\\\\\\\"0; url=/cgi-bin/luci\\\\\\\" /> </head>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-SND-L6013\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var defaultfilename = \\\\\\\"SND-L6013\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-XRN-1610S\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"$.nvr.model_name=\\\\\\\"XRN-1610S\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-SRN-K3570S\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"$.nvr.model_name=\\\\\\\"SRN-K3570S\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EZVIZ-Cloud\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CommonName: *.ys7.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oracle-PeopleSoft\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PS_TOKENEXPIRE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PS_TOKENEXPIRE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Oracle PeopleSoft\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LiveZilla\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Thank you for using LiveZilla!\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"LiveZilla\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"http://www.livezilla.net\\\\\\\" target=\\\\\\\"_blank\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"LiveZilla is a registered trademark of LiveZilla GmbH</div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"lenel-video-management\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Lenel Remove Admin use LeftTop setup button\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DCS-IP-camera\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f) || (g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: dcs-lig-httpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: dcs-lig-httpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Checking Language...\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"var browsermsg = navigator.userAgent.toLowerCase()\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WowWee-Rovio-webcam\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"Rovio\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Basic realm=\\\\\\\"Rovio\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AVIZIO-Network-Camera\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AVIZIO Network Camera\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-Airlink-IP-webcam\",\n  \"logic\": \"((a&&b&&c&&d) &&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Camera Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Apache-Coyote\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"bv = navigator.appVersion\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LANCOM-VPN\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"LANCOM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"vpn\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"LANCOM \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \" vpn\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-telecommunications level high-end router\",\n  \"logic\": \"(a&&b) || (c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"T64E/T128\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"zte\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ZXR10_T128\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Casa-NS4000\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ns4000.twinservers.net\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ns4000.twinservers.net\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"url=https://ns4000.twinservers.net\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-UCSC-C220-M5SX\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PID:UCSC-C220-M5SX\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-UCSC-C125\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PID:UCSC-C125\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-ProLiant-BL-e-Class\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ProLiant BL e-Class\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-T410\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge-T410\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-DL180-GEN9\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DL180-GEN9\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DL180-GEN9\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-ML330-G6\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ML330-G6\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ML330-G6\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"servername=\\\\\\\"ProLiant ML330 G6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"3COM-IntelliJack\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"3Com IntelliJack\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-T310\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge-T310\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PowerEdge-T310\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-POWEREDGE-R240\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"POWEREDGE-R240\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-POWEREDGE-R730\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"POWEREDGE-R730\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"POWEREDGE-R730\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-POWEREDGE-T630\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"POWEREDGE-T630\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"POWEREDGE-T630\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-M520\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"serverinfo\\\\\\\"> PowerEdge M520\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-M620\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"serverinfo\\\\\\\"> PowerEdge M620\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerVault-NX400\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"serverinfo\\\\\\\"> PowerVault NX400\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VSS-Web\",\n  \"logic\": \"a|| (b&&c) || (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"http://www.vssweb.net/IVSWeb.exe\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: WCY_WEBServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"28ZE\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: WCY_WEBServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"28ZE\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"SonicWALL-NSA-4600\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SonicWALL NSA 4600\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SonicWALL NSA 4600 \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-RH2288-V3\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ProductName/RH2288 V3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Redis\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"redis\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Falcon\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OpsPlatform\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<h3 class=\\\\\\\"font-bold\\\\\\\">OpsPlatform</h3>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"OpsPlatform\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<h3 class=\\\\\\\"font-bold\\\\\\\">OpsPlatform</h3>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"textarea class=\\\\\\\"form-control endpoints\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Puping Stars - Firewall\",\n  \"logic\": \"((a||b) &&c) ||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var title_zh = '\\u5929\\u6e05\\u6c49\\u9a6cUSG\\u9632\\u706b\\u5899';\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Venusense FW\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u5e94\\u7528\\u4ea4\\u4ed8\\u7cfb\\u7edf\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u5929\\u6e05\\u6c49\\u9a6cUSG\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Venusense USG\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"\\u542f\\u660e\\u661f\\u8fb0 \\u5b89\\u5168\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-OLED65B9FNA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelName>OLED65B9FNA</modelName>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IQinVision-IQA13S-IQEYE07326C\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IQA13S\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IQinVision IQA13S\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yealink-VP59\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Yealink VP59\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DOClever\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"@click.prevent=\\\\\\\"login\\\\\\\" :loading=\\\\\\\"loginPending\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Knopflerfish-HTTP-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: The Knopflerfish HTTP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: The Knopflerfish HTTP Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-\\u5b89\\u5168\\u4ea7\\u54c1\\u7ba1\\u7406\\u5e73\\u53f0\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/wnm/ssl/web/frame/login.html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IgniteNet-Access-Point\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IgniteNet Access Point Configuration\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-CVR100W\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"http://www.cisco.com/go/cn/cvr100w\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CVR100W\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-OS10K\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span>Device OS10K\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-OS6860-48\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span>Device OS6860-48\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-OS6860-P24\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span>Device OS6860-P24\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"inseego-skyus-X\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"skyusCaption\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-ARE-2100\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cradlepoint 2100\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Login :: 2100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-OS6900-X40\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span>Device OS6900-X40\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Alcatel-Lucent OS6900-X40\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SangFor- Behavioral Management or Identity Authentication System\",\n  \"logic\": \"((a||b) &&c) || (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e0a\\u7f51\\u8ba4\\u8bc1\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SinforHttpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<a href=\\\\\\\"/webAuth/\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u8eab\\u4efd\\u8ba4\\u8bc1\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"class=\\\\\\\"info-inner\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fujitsu-iRMC\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"iRMC \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"iRMC \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-OfficeJet-Printer\",\n  \"logic\": \"(a||b) &&c&&d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HP Officejet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"align=\\\\\\\"center\\\\\\\">HP Officejet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"HP-System-Management\",\n  \"logic\": \"((a||b||c) &&d) ||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HP System Management Homepage\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: CompaqHTTPServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Set-Cookie: Compaq-HMMD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: CompaqHTTPServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Set-Cookie: Compaq-HMMD\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-Virtual-Connect-Manager\",\n  \"logic\": \"((a||b) &&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HP Virtual Connect Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"name='MX_HIDDEN' src=\\\\\\\"common/hiddenFrame.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"eMeeting-Online-Dating-Software\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"eMeeting Dating Software\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/_eMeetingGlobals.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u65b0\\u8f6f\\u79d1\\u6280-\\u6781\\u901aEWEBS\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/js/xajax05/xajax_js/xajax_core.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u6613\\u6b63\\u8fdc\\u7a0b\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<a href='../client/EWEBSClientsetup.exe'></a> </td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Electro-Industries-GaugeTech\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: EIG Embedded Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: EIG Embedded Web Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GFSOFT-Akuntansi-2008\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"images/Box%20Akuntansi%202008.png\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"eLitius\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"eLitius\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"target=\\\\\\\"_blank\\\\\\\" title=\\\\\\\"Affiliate\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bosch-DiBos\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DiBos - Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"style/bovisnt.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Direct-Packet-Device\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: DPWebServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: DPWebServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DnP-Firewall\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by DnP Firewall\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"name=\\\\\\\"dnp_firewall_redirect\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<form name=dnp_firewall\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"dnp_firewall_redirect\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Quest-DR\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Quest Software\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"cui-login-screen\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"China Telecom -i-040GW\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"meta_config['ModelName'] = 'I-040GW'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DVR-WebClient\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"259F9FDF-97EA-4C59-B957-5160CAB6884E\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RAISECOM-ISCOM2624G\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"color=\\\\\\\"#000000\\\\\\\">ISCOM2624G\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RAISECOM-ISCOM3048G\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"color=\\\\\\\"#000000\\\\\\\">ISCOM3048G\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RAISECOM-Router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var lang = document.getElementsByName(\\\\\\\"sRadioIndex\\\\\\\")\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Web User Login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Petrochemical Yingke -SSL-VPN-Remote Access System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"new_style/placeholderfriend.js\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tong Soft Network Technology - Cloud Education Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/Integrats/GS.Sub.SystemManager/doLogin/json\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DH-HCVR5208A\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HCVR5208A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie-NPE product\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"alt=\\\\\\\"npe \\u7f51\\u7edc\\u51fa\\u53e3\\u63a7\\u5236\\u8bbe\\u5907\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"uniview-IPC242E-WH\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IPC242E-WH\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TV-IP751WC\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TRENDnet | TV-IP751WC(TV-IP751WC)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TV-IP751WC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"TV-IP751WC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TV-IP651W\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TV-IP651W\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TV-IP651W\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"(TV-IP651W)</title>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<modelName>TV-IP651W\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TV-IP344PI\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span>TV-IP344PI</span>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TV-IP311PI\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TV-IP311PI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TV-IP311PI\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tianxing Netan - Safety One-way Import System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<meta http-equiv=\\\\\\\"Refresh\\\\\\\" content=\\\\\\\"0;url=/userMainAction.action\\\\\\\" />\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5929\\u884c\\u5b89\\u5168\\u5355\\u5411\\u5bfc\\u5165\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TPL-410AP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login to the TPL-410AP</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ChiliProject\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by <a href=\\\\\\\"https://www.chiliproject.org/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"ChiliProject\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"_chiliproject_session=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"_chiliproject_session=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CLIPCOMM-KWS-1040N\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"KWS-1040N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Maverick\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-TL-WR849N\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"(url.indexOf(\\\\\\\"tplinklogin.net\\\\\\\")\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TL-WR849N\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"B_LINK-APRouter\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"B-LINK-APRouter\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"B-LINK-APRouter\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Epson-Ethernet-Interface-Card\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Epson \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Ethernet Interface Card\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Belkin-G-Wireless-Router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"setup_top.htm\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"def_pg=\\\\\\\"status.stm\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOTO_LINK-N6004\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src =\\\\\\\"/images/login_back_zn6004.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Greenbone\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Greenbone Security Assistant\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOTO_LINK-A1004\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TOTOLINK A1004\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"A1004\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOTO_LINK-N300R+\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TOTOLINK N300R+\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOTO_LINK-A3\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TOTOLINK A3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOTO_LINK-N302R+\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src =\\\\\\\"/images/login_back_zn302rp.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOTO_LINK-N500RDG\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src =\\\\\\\"/images/login_back_n500rdg.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerConnect-Switch-Admin\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"branding.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Dell OpenManage Switch Administrator\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BlogEngineNET\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"pics/blogengine.ico\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"http://www.dotnetblogengine.net\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PCT7048\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">PCT7048\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-N2048\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">N2048\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BlueDragon\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BlueDragon\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Powered-By: BlueDragon\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Roteador-Intelbras-Wireless\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Roteador Intelbras Wireless\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Roteador Intelbras Wireless\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-PK5001Z\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \">CenturyLink&reg; Modem Configuration Zyxel PK5001Z<\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CenturyLink.com</a>\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"PK5001Z login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-NBG5615\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<li class=\\\\\\\"modelname\\\\\\\">NBG5615</li>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZyXEL NBG5615\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-NBG5715\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<li class=\\\\\\\"modelname\\\\\\\">NBG5715</li>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NBG5715\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ZyXEL NBG5715\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BlueQuartz\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"value=\\\\\\\"Copyright (C) 2000, Cobalt Networks\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Login - BlueQuartz\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TwistedWeb\",\n  \"logic\": \"(a&&b&&c&&d) || (e&&f&&g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TwistedWeb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"WindRiver-WebServer\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"TwistedWeb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"WindRiver-WebServer\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N104R\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ipTIME N104R\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N104T\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images/login_title_n104t.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N604S\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n604s.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME N604S\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N5-r1\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images/login_title_n5r1.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TVT\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cross Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DVR Components Download\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: TVT RTSP Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-A104\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/images2/login_title.a104.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N6004\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n6004.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"IPTIME N6004\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"IPTIME N6004\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N604plus-i\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n604pi.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME N604plus-i\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N604M\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n604m.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N704NS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n704ns.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Basic-PHP-Events-Lister\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by: <a href=\\\\\\\"http://www.mevin.com/\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-A104R\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.a104r.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME A104R\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ipTIME-A704NS-BCM\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.a704nb.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME A704NS BCM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-A2003NS-MU\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.a2003nm.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME A2003NS-MU\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AppServ\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"appserv/softicon.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"index.php?appservlang=th\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ipTIME-Q204\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.tq204.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\\\\\\"/images/login_back_tq204.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASProxy\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Surf the web invisibly using ASProxy power\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"btnASProxyDisplayButton\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MX450-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MX450 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MX870-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MX870 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MG4100-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MG4100 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MX860-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MX860 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Intelbras-Roteador-Wireless-N-WRN-300\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Roteador Wireless N WRN 300\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-P-661HNU-DI-F1\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"P-661HNU-DI-F1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Engenius-Company Products\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div class=\\\\\\\"rndcrnr1_top\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"LOGIN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GuardSite-WatchGuard-AP200\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WatchGuard AP200\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"epygi-QXE1T1\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Epygi        <span class=\\\\\\\"product-name\\\\\\\">QXE1T1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Epygi QXE1T1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"epygi-QX500\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Epygi            <span class=\\\\\\\"product-name\\\\\\\">QX500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Epygi QX500\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sangfor-BBC branch business management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"location.href = '/bbc/index'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"5VTechnologies-BlueAngelSoftwareSuite\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/cgi-bin/webctrl.cgi?action=index_page\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-SA520W\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"hdBoardName\\\\\\\" value=\\\\\\\"SA520W\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"h3Login\\\\\\\">Small Business Pro\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"SA520W\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"yongyou-IM -ISM\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"sheight*window.screen.deviceYDPI\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Also shoot cloud-JS library\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"b0.upaiyun.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"b0.upaiyun.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cdnjs\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cdnjs.cloudflare.com/ajax/libs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"cdnjs.cloudflare.com/ajax/libs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"cdnjs.cloudflare.com/ajax/libs\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oracle-Database-Firewall\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Oracle Database Firewall\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fastcdn-product\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"fastcdn.org\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Digital-Signage\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Pages/login.action\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"skins/default/images/loginError.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Neusoft-NetEye Network Traffic Analysis\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NetEye\\u7f51\\u7edc\\u6d41\\u91cf\\u5206\\u6790\\u4e0e\\u54cd\\u5e94\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"action=\\\\\\\"/ntars/loginAction.do\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"/ntars/css/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-NAM\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NAM Web Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NAM Traffic Analyzer</SPAN>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Whitton - E-Dip VPN\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"images/l_name.jpg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"jtpsoft STYLE1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NSFOCUS-WAF\",\n  \"logic\": \"(a&&b) || (c&&d) ||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WAF NSFOCUS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/images/logo/nsfocus.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Email Address: liuzhixu@intra.nsfocus.com \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"CommonName: WAFG2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"NSFOCUS VMWAF\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"NSFOCUS VMWAF\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZKTECO - Attendance Management\",\n  \"logic\": \"a||b|| (c&&d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZKNet\\u8003\\u52e4\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"onclick=\\\\\\\"showState(gettext('Forgotten password')) \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"zknet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"ZKSoftware Inc.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Web\\u8003\\u52e4\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Rising-anti-virus software network version\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u745e\\u661f\\u6740\\u6bd2\\u8f6f\\u4ef6\\u7f51\\u7edc\\u7248\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"RavWeb_files/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AutoSet companies\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \".logo-autoset\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"AutoSet\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-xSeries\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco xSeries\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco xSeries\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-Community Network Management System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco\\u5c0f\\u533a\\u7f51\\u7edc\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco\\u5c0f\\u533a\\u7f51\\u7edc\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HFD Software - Bibliographic Search System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div class=\\\\\\\"header_opac_logo\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ADT-TPN-2G Gateway\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"./system/usbkey.js\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TPN-2G\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TIBCO-Jaspersoft\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TIBCO Jaspersoft\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-CSP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HUAWEI CSP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-Storwize\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IBM Storwize V7000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"o=IBM, ou=SSG\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"class=\\\\\\\"poweredByStorwize\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"IBM \\u548c Storwize \\u662f IBM Corporation \\u5728\\u7f8e\\u56fd\\u548c/\\u6216\\u5176\\u4ed6\\u56fd\\u5bb6\\u6216\\u5730\\u533a\\u7684\\u6ce8\\u518c\\u5546\\u6807\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-web application firewall\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C WEB\\u5e94\\u7528\\u9632\\u706b\\u5899\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"QNO-4WAN_1LAN_QoS_Security_Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"4WAN_1LAN_QoS_Security_Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HikVision-Video Encoding Equipment Access Gateway\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<INPUT id=\\\\\\\"p_pass\\\\\\\" class=\\\\\\\"int\\\\\\\" onfocus=\\\\\\\"this.value='';\\\\\\\" tabindex=\\\\\\\"2\\\\\\\" name=\\\\\\\"p_pass\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/bncgi-bin/test.pl\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u542f\\u660e\\u661f\\u8fb0-\\u5929\\u6e05\\u6c49\\u9a6cUSG\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5929\\u6e05\\u6c49\\u9a6cUSG\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var hasloading = $changeYZM.is(\\\\\\\".item_code_loading\\\\\\\")\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"span id=\\\\\\\"changeYZM\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ShowDoc\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ShowDoc\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie-IT integrated business management platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var logincookiename = 'RIIL_ID'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ActiveHTML\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ActiveHTML\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ActiveHTML\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zhongke Bohua - Table Dragon Firewall\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u535a\\u534e\\u7f51\\u9f99\\u9632\\u706b\\u5899\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Xinhua Yun - Company Products\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<img id=\\\\\\\"CreateCheckCode\\\\\\\" src=\\\\\\\"login/pictureCheckCode\\\\\\\" name=\\\\\\\"check_code\\\\\\\" ng-click=\\\\\\\"ReloadCheckCode()\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ng-disabled=\\\\\\\"!loginForm.$valid\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Unicom Time - Information Security Integrated Management Platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4fe1\\u606f\\u5b89\\u5168\\u7efc\\u5408\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ccaq_kf@unisk.cn\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NewStart-HA-Management\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NewStart HA Management Interface\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-SYSTEMX server\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"STR_LOGIN_PLS_LOGIN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Content-Length: 3883\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"American Megatrends Inc.</FONT>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"chronograf\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Chronograf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ultra-CMDB\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CMDB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<span class=\\\\\\\"logo-text\\\\\\\">Matrix</span>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ericsson-IP-telephone\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ericsson IP telephone\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ElasticSearch-HQ\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Elastic Search - HQ\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ResourceManager\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"This is standby RM. Redirecting to the current active RM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alibaba-DTS operation and maintenance platform\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DTS\\u8fd0\\u7ef4\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"window.appname = 'alidts';\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Panasonic-Maintenance-Utility\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"panasonic_logo.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Maintenance Utility\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MemSQL\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MemSQL Ops\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<h1>This browser is not supported by MemSQL Ops</h2>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Pinpoint\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PinPoint\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"https://pinpoint.app\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-imageRUNNER2525i\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"imageRUNNER2525i\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Samsung-DVR\",\n  \"logic\": \"((a||b) &&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Samsung DVR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"SAMSUNG DVR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"SAMSUNG DVR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"China Unicom - Government Enterprise Order Center\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"\\u653f\\u4f01\\u8ba2\\u5355\\u4e2d\\u5fc3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Domain Software -Parker-FTP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Parker FTP server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-DL_MONITOR\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DL_MONITOR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DL_MONITOR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"China Unicom - Electronic Mall Network Access Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e2d\\u56fd\\u8054\\u901a\\u7535\\u5b50\\u5546\\u57ce\\u5916\\u7f51\\u63a5\\u5165\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"China Unicom - Tiangong Integrated Operation Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5929\\u5bab\\u4e00\\u4f53\\u5316\\u8fd0\\u8425\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Miranda-ftp\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Miranda FTP server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tencent - Enterprise Edition QQ\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"http://wpa.b.qq.com/cgi/wpa.php\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"http://wpa.qq.com/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-FTP\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"t\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Microsoft FTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FAST-FW300R router\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FW300R\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FW300R\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"FW300R\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-imageRUNNER2530i\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"imageRUNNER2530i\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dell-Open-Manage\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Open Manage&trade;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<img title=\\\\\\\"Open Manage\\\\\\\" alt=\\\\\\\"Open Manage\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tianren Letter -Web Application Safety Gateway\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5929\\u878d\\u4fe1WEB\\u5e94\\u7528\\u5b89\\u5168\\u7f51\\u5173\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"this.src='/style/images/rand.php?update=1'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Merry Technology - Sentinel Cloud\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u54e8\\u5175\\u4e91\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src: url(/static/fonts/LcdD.eot) format(\\\\\\\"truetype\\\\\\\"), url(/static/fonts/LcdD.TTF) format(\\\\\\\"truetype\\\\\\\");\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Heavenly Letter - Network Guardian Filter Network\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5929\\u878d\\u4fe1\\u7f51\\u7edc\\u536b\\u58eb\\u8fc7\\u6ee4\\u7f51\\u5173\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BluePacific-Content Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/visadmin/viscms/index.do\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZKTECO-Time Safety Management Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZKECO \\u65f6\\u95f4&\\u5b89\\u5168\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-GSM7224V2\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"http://kbserver.netgear.com/products/GSM7224R.asp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"GSM7224V2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NetGear GSM7224V2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZKTECO-Attendance Management System\",\n  \"logic\": \"((a||b) &&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/media/images/ZKECO16.ico\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"sessionidadms\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u8003\\u52e4\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"One-meter OA\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/yimioa.apk\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u4e00\\u7c73OA\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ShopNC\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by ShopNC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Copyright 2007-2014 ShopNC Inc\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"ShopNC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"INSPUR-storage\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ou=Storage, o=Inspur\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u6d6a\\u6f6e\\u6d77\\u91cf\\u5b58\\u50a8\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<td align=\\\\\\\"left\\\\\\\">\\u6d6a\\u6f6e\\u5b58\\u50a8 \\u60a8\\u8eab\\u8fb9\\u7684\\u5b58\\u50a8\\u4e13\\u5bb6</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hengding - Material Equipment Management System\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"wrap login_wrap\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"url(Images/yh.jpg)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GOOD10000- Final Assembly System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"value=\\\\\\\"https://mail.sinopec.com/owa/\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5317\\u4eac\\u4e07\\u4f73\\u4fe1\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Supervising information management system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/BPM_Module/Icon/BPM2.0PC.png\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"WebForm_AutoFocus('btnLogin');//]]>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WebBuilder\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"webbuilder/script/wb.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"National Digital Learning Resource Center System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u9875\\u9762\\u52a0\\u8f7d\\u4e2d,\\u8bf7\\u7a0d\\u5019\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FrontEnd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Process information integration web\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.top.location.href = \\\\\\\"DBWeb/index.aspx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"vm-sv-cgcx\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"Common/js/PanJFCommon.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Spark\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Spark Worker at\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"spark://\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"serversparkversion\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Emerson-permasense\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/permasense/app/webroot/flot/css/layout.print.ie.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Genew-NC5200C\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NC5200C\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Logging\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/static/assets/yottaweb-elements/index.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u65e5\\u5fd7\\u6613\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Veo-Observer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Veo Observer XT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Veo Observer Web Client\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"seafile\",\n  \"logic\": \"a|| (b&&c&&d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Private Seafile\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"css/seahub.min.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"SEAFILE_GLOBAL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Seafile\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Seafile\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fiberhome-network equipment\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FiberHome Networks Internetwork Operating System\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Funkwerk-Gateway\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Funkwerk BOSS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Funkwerk BOSS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Welcome to your Funkwerk Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VTL Control Center\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var tinkerAjax\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"plotkit\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zhong'an Wens - Database Audit System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"top-wrapper fn-clear\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"value=\\\\\\\"SysAdmin\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Eisoo-AnyShare\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"res/libs/webuploader/webuploader.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/res/libs/base64.min.js\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MAiPU-\\u65e0\\u7ebf\\u63a7\\u5236\\u5668\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"js/localil8n.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VTS\",\n  \"logic\": \"(a&&b&&c) ||d|| (e&&f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: VTS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: VTS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<head><title>Error Message</title><link rel=\\\\\\\"stylesheet\\\\\\\" href=\\\\\\\"/VTS.css\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Blue Shield - Document Security Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u84dd\\u76fe\\u6587\\u6863\\u5b89\\u5168\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Play-Framework\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Play! Framework\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Play! Framework\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Swagger\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"swagger-ui.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"swagger-ui.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Swagger UI\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-GS724TR\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"gs724trImage spacer50Percent topAlign rightHAlign\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"GS724TR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NetGear GS724TR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Secbi-product\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/secbiUtils.min.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NAGIOS-monitoring\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Nagios \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Nagios \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/nagios/cgi-bin/status.cgi\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Web-Data-Administrator\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Web Data Administrator - Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<form name=\\\\\\\"WebForm1\\\\\\\" method=\\\\\\\"post\\\\\\\" action=\\\\\\\"Default.aspx\\\\\\\" onsubmit=\\\\\\\"javascript:return WebForm_OnSubmit();\\\\\\\" id=\\\\\\\"WebForm1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR600LP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: IBR600LP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR600NM\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: IBR600NM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bond-AdaptUX\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: secretserver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Adapt application\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WebDVR\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WEBDVR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-\\u89c6\\u9891\\u76d1\\u63a7\",\n  \"logic\": \"(a&&b)|| (c&&d) ||e||f||g||h|| (i&&j) ||k||l|| (m&&n&&o&&p) || (q&&r) || (s&&t&&u) || (v&&w&&x&&y&&z&&nCPO&&kXLT&&djRT&&AsFY) ||FaZD|| (NhVI&&KNAR&&dtJr&&oVXD&&DFUj&&yaij&&vjrn&&Apwc)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"search_card_label\\\\\\\" for=\\\\\\\"search_PlateEnable\\\\\\\">\\u8f66\\u724c\\u53f7\\u7801</label>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"rtsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Dahua Rtsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: DaHua DRS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: DaHua DRS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Server: Dahua Rtsp Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Server: Dahua Rtsp Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"ZheJiang Dahua Technology\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Content-Length: 59552\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"ZheJiang Dahua Technology\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"Basic realm=\\\\\\\"DahuaRtsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"var g_isdeviceinited = true\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"widget/js/jquery.ui.widget.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"title::com_menu.title_setup\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"WATASHI SERVICE\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"q\",\n    \"feature\": \"css/playbackindex.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"r\",\n    \"feature\": \"class=\\\\\\\"J_content J_min_width\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"s\",\n    \"feature\": \"J_sub_con J_loginbox\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"t\",\n    \"feature\": \"overflow:hidden;background-color\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"u\",\n    \"feature\": \"js/urlParser.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"v\",\n    \"feature\": \"id=\\\\\\\"lab_loading\\\\\\\" class=\\\\\\\"J_load_p\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"w\",\n    \"feature\": \"src=\\\\\\\"/cap.js\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"x\",\n    \"feature\": \"'nav_margin').style.visibility = 'visible\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"y\",\n    \"feature\": \"WEB SERVICE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"z\",\n    \"feature\": \"/css/oem.css\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"nCPO\",\n    \"feature\": \"loginfoot\\\\\\\">WEB\\u89c6\\u9891\\u76d1\\u63a7\\u7cfb\\u7edf\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"kXLT\",\n    \"feature\": \"webApp.ability.getWebCap('showGb28181Client'\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"djRT\",\n    \"feature\": \"class=\\\\\\\"ui-tip-container\\\\\\\" id=\\\\\\\"remark_modU\\\\\\\"\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"AsFY\",\n    \"feature\": \"class=\\\\\\\"login_inputbox ui-input fn-width163\\\\\\\"\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"FaZD\",\n    \"feature\": \"tl(\\\\\\\"huazhonghua\\\\\\\")\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"NhVI\",\n    \"feature\": \"dhvideowhmode\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"KNAR\",\n    \"feature\": \"platformHtm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"dtJr\",\n    \"feature\": \"cpplus_bottom\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"oVXD\",\n    \"feature\": \"www.amcrest.com\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"DFUj\",\n    \"feature\": \"Amcrest\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"yaij\",\n    \"feature\": \"interbras_font\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"vjrn\",\n    \"feature\": \"interbras_cloud\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"Apwc\",\n    \"feature\": \"interbrasCloud\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Comrex-streaming media server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Comrex\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Netpilot-Company Products\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NetPilot\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/images/netpilot/favicon.ico\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"/sys/images/tree.css\\\\\\\" title=\\\\\\\"NetPilot\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"NetPilot\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WebSideStory\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"http://websidestory.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"WEBSIDESTORY CODE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"WEBSIDESTORY,INC. ALL RIGHTS RESERVED. U.S.PATENT No. 6,393,479B1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<!-- WebSideStory HTML for Search -->\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-ISR\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco IOS Software, ISR \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco IOS Software [Denali], ISR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Wuhan Fusite - Information Management System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6b66\\u6c49\\u5bcc\\u601d\\u7279\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5efa\\u8bbe\\u5de5\\u7a0b\\u68c0\\u6d4b\\u5b9e\\u9a8c\\u5ba4\\u4fe1\\u606f\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-USG310\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"USG310\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"USG310\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NUUO-\\u89c6\\u9891\\u76d1\\u63a7\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Web Remote Client\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"liveview-htmlskin/LiveView.html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruckus-Wireless\",\n  \"logic\": \"a||b||c||d||e||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"alt=\\\\\\\"Ruckus Wireless\\\\\\\" title=\\\\\\\"Ruckus Wireless\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"mon.  Tell me your username\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Ruckus Wireless\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"RuckusWireless\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"RuckusWireless\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Ruckus Wireless \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Ruckus Wireless\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TEG-240WS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TEG-240WS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cellopoint-product\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cellopoint\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Organization: Cellopoint\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ICALL-Background Management Center\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ICALL\\u540e\\u53f0\\u7ba1\\u7406\\u4e2d\\u5fc3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var img_obj = document.getElementById('showing');\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Trunkey-IDC / ISP Access Resource Management System\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"http://www.trunkey.com/\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by Trunkey\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \" IDC/ISP \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hinacom-Medical Image Information Management System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6d77\\u7eb3\\u533b\\u4fe1\\u533b\\u7597\\u5f71\\u50cf\\u4fe1\\u606f\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var iconbaseurl = BaseUrl + 'Content/site/icons/';\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-multi-business cloud intelligent management platform\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"index/image/multi_service.svg\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u591a\\u4e1a\\u52a1\\u4e91\\u667a\\u80fd\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Chunjs-server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"server: Chunjs/Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: Chunjs/Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SJSWPS-OiWPS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Oracle-iPlanet-Proxy-Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Oracle-iPlanet-Proxy-Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IDS-WEBCAM\",\n  \"logic\": \"(a&&b) ||c|| (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"action=\\\\\\\"webcam_login\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IDS_WEB_CHANGE_PWD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"IDS_WEB_\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<form name=\\\\\\\"form1\\\\\\\" method=\\\\\\\"POST\\\\\\\" action=\\\\\\\"webcam_login\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"IDS_WEB_PASSWORD\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"MailTraq-mail server\",\n  \"logic\": \"(a&&b) ||c|| (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Mailtraq\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Mailtraq\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Mailtraq\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<h2>Blog Comments</h2>\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Maygion-IPCamera\",\n  \"logic\": \"((a||b) && (c||d)) || (e&&f) ||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Maygion\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Maygion\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"IPCamera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"IPCamera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Product:ipcamera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Author:xwpcom@gmail.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"PCamera FtpServer(www.maygion.com)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Wei Shield IIS Firewall\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Firewall: www.weidun.com.cn\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Firewall: www.weidun.com.cn\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AirTies-WAV\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AirTies WAV-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Wireless\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"m0n0wall\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"m0n0wall\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"nm\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"octoprint\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/OctoPrint/wiki/Plugin:-Discovery\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"OctoPrint\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SONY-Network-Camera-SNC-EP550\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Sony Network Camera SNC-EP550\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Sony Network Camera SNC-EP550\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SONY-Network-Camera-SNC-EP520\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Sony Network Camera SNC-EP520\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Sony Network Camera SNC-EP520\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ATLAS-3000 video conferencing system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Aethra Video Communication system\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Navisphere\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"N A V I S P H E R E\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dell-EMC-Storage Cluster\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login - isilon\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Isilon Systems LLC. All rights reserved\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"id=\\\\\\\"dialog_title\\\\\\\">Isilon Administration</div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PortaBilling\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PortaBilling -- New Installation\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"phpMyAdmin\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Set-Cookie: phpmyadmin=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"phpMyAdmin \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"pma_password\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"phpMyAdmin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Set-Cookie: phpmyadmin=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"realm=\\\\\\\"phpMyAdmin\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EMLOG\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"emlog\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JEECMS\",\n  \"logic\": \"a|| (b&&c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by JEECMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"http://www.jeecms.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"JEECMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Shop7z\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"sitekeyword\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"id=\\\\\\\"www_zzjs_net_loding\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"function www_zzjs_net_change\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"sitekeyword\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Shenou-SOC\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SOC http://www.shenou.com soc\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LifeSize-video conference\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"js/swfobject.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"js/lsJavascript.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BACnet/IP-to-Web-Services-Gateway\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Cimetrics Eplus Web Server \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Cimetrics Eplus Web Server \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mero-MS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"http://gate.looyu.com/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"riello-202\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NetMan 202\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NetMan 202\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"nusoft system-MHG-450\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MHG-450 \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"MHG-450\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LiteSpeed-Web-Admin-Console\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"LiteSpeed Web Admin Console\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"LSWSWEBUI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"LiteSpeed WebAdmin Console\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"LSWSWEBUI\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_lucent - Enterprise Gateway\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6b22\\u8fce\\u767b\\u9646Alcatel-Lucent\\u4f01\\u4e1a\\u7f51\\u5173<p></p>\\u8bf7\\u8f93\\u5165\\u7528\\u6237\\u540d\\u548c\\u5bc6\\u7801\\uff0c3\\u6b21\\u51fa\\u9519\\u5c06\\u88ab\\u9501\\u5b9a<p>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u6b22\\u8fce\\u767b\\u9646\\u7f51\\u9875\\u914d\\u7f6e\\u754c\\u9762\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Alcatel-Lucent\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sun-ONE-Web-Server\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Sun[tm] ONE Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Sun-ONE-Web-Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"server: Sun-ONE-Web-Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"McAfee-IntruShield\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IntruShield\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"intruvert\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PhpWind\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by phpwind\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"phpwind\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TDXK-\\u901a\\u8fbeOA\",\n  \"logic\": \"a||b||c||d|| (e&&f) ||g||h|| (i&& (j||k)) ||l\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/static/templates/2013_01/index.css/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"javascript:document.form1.UNAME.focus()\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"/static/images/tongda.ico\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<link rel=\\\\\\\"shortcut icon\\\\\\\" href=\\\\\\\"/images/tongda.ico\\\\\\\" />\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"OA\\u63d0\\u793a\\uff1a\\u4e0d\\u80fd\\u767b\\u5f55OA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"\\u7d27\\u6025\\u901a\\u77e5\\uff1a\\u4eca\\u65e510\\u70b9\\u505c\\u7535\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Office Anywhere 2013\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Office Anywhere 2015\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"tongda.ico\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"OA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"\\u529e\\u516c\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"class=\\\\\\\"STYLE1\\\\\\\">\\u65b0OA\\u529e\\u516c\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Layui\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"layui-main\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"layui.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-Onboard-Administrator\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HP Onboard Administrator\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Gol Software - Signature Verification Management System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7b7e\\u540d\\u9a8c\\u8bc1\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u7248\\u6743\\u6240\\u6709\\uff1a\\u5317\\u4eac\\u683c\\u5c14\\u56fd\\u4fe1\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tianci Technology-TQ2440\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TQ2440\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Squirrelmail- Mail System\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SQMSESSID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"horde=\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"SquirrelMail - Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"function squirrelmail_loginpage_onload()\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UCloud-CDN\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: UCloud/CDN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: UCloud/CDN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RedHat-Stronghold\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Stronghold\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Stronghold\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SlingBox\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"set-cookie: _sling_skey\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"set-cookie: _sling_skey\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Site-Meter\",\n  \"logic\": \"a|| (b&&c&&d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"sitemeter.com/meter.asp?site=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"sitemeter\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<!-- Site Meter -->\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Site Meter -->\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"sitemeter.com/js/counter.js?site=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SkaLinks\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SkaLinks_include/check.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SEH-KYOCERA-PrintServer\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Print server homepage\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<FRAME src=\\\\\\\"/copyright_en.html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SentinelServer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: SentinelServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: SentinelServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Siemens-SIMATIC-PCS7\",\n  \"logic\": \"a|| (b&&c) ||d||e||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<td class=\\\\\\\"static_field\\\\\\\">Station name:</td>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"portal.mwsl\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"S7Web.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Siemens_Firmenmarke_Header.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<td class=\\\\\\\"Login_Area\\\\\\\" colspan=\\\\\\\"2\\\\\\\"><img src=\\\\\\\"/SIMATIC_CONTROLLER.png\\\\\\\" alt=\\\\\\\"Simatic S7 CP\\\\\\\"></td>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Location: /Portal0000.htm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Siemens, SIMATIC S7\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huawei- Switch\",\n  \"logic\": \"((a||b|| (c&&d) || (e&&f) || (g&&h&&i) || (j) ||k||l|| (m&&n) ||o) &&p) || ((q|| (r&&s) ||t|| (u&&v&&w) || (x&&y) ||z|| (vSkx&&OixM)) &&YPWf&&uZid) ||AQmT|| (kKbR&&vDAb)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Lanswitch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/simple/view/login.html?redirect=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"background: url('../style/default/image/diaphaPic.png');\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Huawei Technologies Co., Ltd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/view/login.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Quidway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"entPhysicalSoftwareRev\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"window.location.href=\\\\\\\"main.html?sid=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"var msg = HTTP.packageMsg(\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"<div id=\\\\\\\"zhTip\\\\\\\" style=\\\\\\\"display:none\\\\\\\">Web\\u7f51\\u7ba1\\u7cfb\\u7edf\\u521d\\u59cb\\u5316\\u4e2d\\uff0c\\u8bf7\\u7a0d\\u540e</div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"COPYRIGHT.manufacturer !== \\\\\\\"Huawei\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \" body, p, a, ul, li, dl, dt, dd, h1, h2, h3, h4, h5, h6, img\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"WLAN Web\\u767b\\u5f55\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \" id=\\\\\\\"httpTipDiv\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"/simple/view/main/modifyPwd.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"q\",\n    \"feature\": \"Server: Lanswitch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"r\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"s\",\n    \"feature\": \"Quidway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"t\",\n    \"feature\": \"/simple/view/login.html?redirect=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"u\",\n    \"feature\": \"/view/login.html?redirect=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"v\",\n    \"feature\": \"AR\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"w\",\n    \"feature\": \" 301 \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"x\",\n    \"feature\": \"/view/login.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"y\",\n    \"feature\": \"Server: Quidway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"z\",\n    \"feature\": \"Huawei Quidway \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"vSkx\",\n    \"feature\": \"/view/login.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"OixM\",\n    \"feature\": \"server: v\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"YPWf\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"uZid\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"AQmT\",\n    \"feature\": \"o=Huawei, ou=HTIPL/dnqualifier=LSW\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"kKbR\",\n    \"feature\": \"o=Huawei\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"vDAb\",\n    \"feature\": \"cn=Quidway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alarmability - Fire Mobile Electronic Evidence Management\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6d88\\u9632\\u79fb\\u52a8\\u7535\\u5b50\\u8bc1\\u636e\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u6df1\\u5733\\u5e02\\u8b66\\u7ffc\\u6570\\u7801\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DHI-HCVR4108C-S2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DHI-HCVR4108C-S2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BBSea-PortServer\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BBSea PortServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie-\\u4e0b\\u4e00\\u4ee3\\u9632\\u706b\\u5899\",\n  \"logic\": \"((a||b||c) && (d||e)) || (f&& (g||h))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"webui/images/ruijie\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u9510\\u6377\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<span>\\u00a92012 \\u9510\\u6377\\u7f51\\u7edc</span>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"NGFW\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"\\u4e0b\\u4e00\\u4ee3\\u9632\\u706b\\u5899\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"RG-WALL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"4008 111 000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"ssl_index_next.html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"gvs-server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: gvs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: gvs\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-SR7000-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET SR7000 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-UCS-KVM\",\n  \"logic\": \"((a||b) &&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco UCS KVM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/kvm_styles.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Yun Yun - Company Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6280\\u672f\\u652f\\u6301\\uff1a\\u5317\\u4eac\\u5e7f\\u901a\\u4fe1\\u8fbe\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8 <br />\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RAPID-Browser\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Welcome to Rapid Browser\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<!-- ### Bullet table ### -->\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"images/login_button.gif\\\\\\\" alt=\\\\\\\"Login to Rapid Browser\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Quest-Password-Manager\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"style=\\\\\\\"display:none\\\\\\\" id=\\\\\\\"Account_NotFilled.Textbox\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"id=\\\\\\\"GINAPageExpiration\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"id=\\\\\\\"ctl00_ctl00_ctl00_ctl00_Body\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"id=\\\\\\\"ctl00_ctl00_ctl00_ctl00_ContentPlaceHolder_PleaseWait_content\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VMware-ESX\",\n  \"logic\": \"a||b||c||d|| (e&&f) ||g||h||i||j|| (k&&l&&m) || (n&&o&&p) || (q&&r&&s)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"VMware ESXi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ID_EESX_Welcome\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"document.write(\\\\\\\"<title>\\\\\\\" + ID_EESX_Welcome + \\\\\\\"</title>\\\\\\\");\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"o=VMware, Inc, ou=VMware ESX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<meta http-equiv=\\\\\\\"refresh\\\\\\\" content=\\\\\\\"0;url='/ui'\\\\\\\"/>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Content-Length: 258\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"ID_ESX_Welcome\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"content=\\\\\\\"VMware ESX \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"document.write(ID_ESX_VIClientDesc);\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"ID_VC_Welcome\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"<meta http-equiv=\\\\\\\"refresh\\\\\\\" content=\\\\\\\"0;url='/ui'\\\\\\\"/>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"body\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"<meta http-equiv=\\\\\\\"content-type\\\\\\\" content=\\\\\\\"text/html; charset=utf8\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"<HTML><BODY><H1>501 Not Implemented</H1></BODY></HTML>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"HTTP/1.1 501 Not Implemented\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"Content-Length: 54\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"q\",\n    \"feature\": \"HTTP/1.1 501 Not Implemented\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"r\",\n    \"feature\": \"Content-Length: 54\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"s\",\n    \"feature\": \"Connection: close\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Quanterra-Q330\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Q330\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Q330\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"name=\\\\\\\"PWR\\\\\\\" value=\\\\\\\"Turn on Baler Power\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Telecom customer broadband address query system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<strong>\\u5ba2\\u6237\\u5bbd\\u5e26\\u5730\\u5740\\u67e5\\u8be2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PmWiki\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Set-Cookie: imstime=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<span class='commentout-pmwikiorg'>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<a href=\\\\\\\"http://www.pmwiki.org/\\\\\\\" target=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Set-Cookie: imstime=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Webmin\",\n  \"logic\": \"a||b||c|| (d&&e) ||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login to Webmin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Webmin server on\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<thead><tr><td><b>\\u767b\\u9646\\u5230 Webmin </b></td></tr></thead>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Webmin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"200 Document follows\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Organization: Webmin Webserver\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Artel-Video-Systems\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Artel Video Systems\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SangFor-Terminal Detection Response Platform EDR\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"dataLayer','GTM-TL7G2LW'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CommonName: 222.222.222.0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Organization: INFOSEC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Neusoft-SEnginx\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SENGINX-ROBOT-MITIGATION\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: senginx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: senginx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Comodo-WAF\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Protected by COMODO WAF\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Protected by COMODO WAF\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tenda-CH22\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var sys_target = \\\\\\\"CH22\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PhotoPost-PHP\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"adm-misc.php?admact=mainmenu\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by PhotoPost\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"http://www.photopost.com\\\\\\\">PhotoPost\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PG-Real-Estate-Solution\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PG Real Estate Solution\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \">PG Real Estate Solution - real estate web site design\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bamboocloud-BIM unified identity management platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BIM \\u5f00\\u53d1\\u914d\\u7f6e\\u4e0e\\u8fd0\\u7ef4\\u63a7\\u5236\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Perfectone-VOIP-Phone\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"color=\\\\\\\"#FFFFFF\\\\\\\"><b>Login VoIP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"onload=\\\\\\\"JavaScript:document.loginform.user.focus()\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oracle-Siebel-CRM\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ot='SiebWebMainWindow'>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Scripting is used to manage data interactions between the Siebel server/Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"onload=\\\\\\\"GotoUrl('start.swe?swecmd=Start')\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-ME340x\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco IOS Software, ME340x Software\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OpenEMR\",\n  \"logic\": \"((a||b||c) &&d) || (e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Set-Cookie: OpenEMR=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<frame src=\\\\\\\"/interface/login/filler.php\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"OpenEMR login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Location: interface/login/login.php?site=default\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oce\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Print Exec Workgroup\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/servlet/owslhtml/owslicons/header_pewg.jpg\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RemotelyAnywhere\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RemotelyAnywhere\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/img/RAlogo.png\\\\\\\" alt=\\\\\\\"RemotelyAnywhere\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: RemotelyAnywhere\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: RemotelyAnywhere\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"RemotelyAnywhere Telnet Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mahara\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"This site is powered by Mahara\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"id=\\\\\\\"powered-by\\\\\\\"><a href=\\\\\\\"http://mahara.org/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"{\\\\\\\"namedfieldempty\\\\\\\":\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MGB-OpenSource-Guestbook\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"MGB OpenSource Guestbook\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"title=\\\\\\\"MGB Homepage\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dell-KVM switch\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/avct.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/dell/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Audiocodes companies\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VENDOR: AudioCodes; \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-SRN-1673S\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"$.nvr.model_name=\\\\\\\"SRN-1673S\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mizuho companies\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Mizuho Bank, Ltd.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"libwww-perl-daemon\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: libwww-perl-daemon\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: libwww-perl-daemon\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"speco-IP-Camera\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Speco IP Camera\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"zmodo-webcam\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src='./img/bj.jpg',sizingmethod='scale'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LANCOM-\\u8bbe\\u5907\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: LANCOM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: LANCOM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AVerMedia-WebCamX\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id='WebCamX'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Depending on the Internet bandwidth, it might take a few minutes to download the software.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EasySCP\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"easyscp=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"easyscp=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content='EasySCP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/css/easyscp.login.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AWS-EC2\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ec2-Instance-Id\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Ec2-Instance-Id\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Welcome to nginx on Amazon EC2!\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"3Com-ADSL\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"3Com Wireless\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"3COM: AP8760: \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-ML150-G6\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ML150-G6\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ML150-G6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-USG5300\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"USG5300\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PowerEdge-R330\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PowerEdge-R330\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PowerEdge-R330\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Windows\",\n  \"logic\": \"(a&&b&&c&&d&&e) || (f&&g&&h) || (i&&j&&k) || (l&&m&&n&&o&&p&&q) || (r&&s) ||t|| (u&&v&&w&&x)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Microsoft\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"x-powered-by: ThinkPHP\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<h2>Blog Comments</h2>\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Win32\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"win64\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"windows\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"q\",\n    \"feature\": \"Apache,Tomcat,Jboss\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"r\",\n    \"feature\": \"Target Name\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"s\",\n    \"feature\": \"smb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"t\",\n    \"feature\": \"rdp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"u\",\n    \"feature\": \"Microsoft-Windows\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"v\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"w\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"x\",\n    \"feature\": \"Apache,Tomcat,Jboss\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"HUAWEI-CH121-V3\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ProductName/CH121 V3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-2288H-V5\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ProductName/2288H V5\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-32LF6310-CB\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelNumber>32LF6310-CB</modelNumber>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SONY-SNC-ER580\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Sony Network Camera SNC-ER580\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Sony Network Camera SNC-ER580\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NSFOCUS-NIDS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/login_logo_nids_zh_CN.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Intelligent International - Enterprise Management Software\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"background=\\\\\\\"images/login_sample_bgz.jpg\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u667a\\u90a6\\u56fd\\u9645\\u4f01\\u4e1a\\u7ba1\\u7406\\u8f6f\\u4ef6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kloxo-Single-Server\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/img/hypervm-logo.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/htmllib/js/preop.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"HyperVM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"vertx\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Set-Cookie: vertx-web.session\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Set-Cookie: vertx-web.session\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-Firepower\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"firepower\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco Systems, Inc\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Cisco Firepower\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Internet-Rimon-Filter\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Rimon: RWC_BLOCK\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Rimon: RWC_BLOCK\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Flyspray\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by Flyspray\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"START_BOOTSTRAP-Products\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"img/portfolio/thumbnails/4.jpg\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"We've got what you need!</h2>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXV10-I532_I516\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZXV10-I532_I516\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-Cognos\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/cgi-bin/cognos.cgi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cognos &#26159; International Business Machines Corp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"IBM Cognos Business Intelligence\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR650LE\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: IBR650LE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-AER1650\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: AER1650\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MikroTik-Router\",\n  \"logic\": \"(((a&&b) ||c|| (d&&e&&f)) &&g&&h&&i&&j) || (k|| (l&&m))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RouterOS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"mikrotik\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"mikrotik routeros\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Configuration\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"RouterOS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"mikrotik\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"<h2>Blog Comments</h2>\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"MikroTik RouterOS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"RouterOS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-BladeCenter\",\n  \"logic\": \"a||b||c|| (d&& (e||f)) ||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/shared/ibmbch.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/shared/ibmbcs.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"alt=\\\\\\\"IBM BladeCenter\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"BladeCenter Management Module\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"BladeCenter Advanced Management Module\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"IBM BladeCenter(R)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-OmniVista-2500-NMS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OmniVista 2500 NMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CommonName: ov2500-upam-cportal.al-enterprise.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-OS6860E-48\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span>Device OS6860E-48\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Flying Fish Star - Router\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"css/R1Login.css\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"chinesehl.js\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-J4813A\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"HP J4813A\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HP J4813A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EMC-Documentum-Webtop\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/webtop/index.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/webtop/webtop/theme/documentum/css/webtop.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Epiware\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Epiware - Project and Document Management\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Epson-Printer\",\n  \"logic\": \"a||b||c||d|| ((e||f) &&g) || (h&&i&&j) ||k||l||m\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: EPSON-HTTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: EPSON-HTTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"EpsonNet config\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"EpsonNet WebAssist\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"content=\\\\\\\"SEIKO EPSON\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"EpsonNet \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"/PRESENTATION/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"EPSON\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Print Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"<TITLE>EpsonNet Config Rev.1.0a</TITLE>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"<TITLE>EpsonNet WebAssist Rev.2.1aE</TITLE>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"<TITLE>EpsonNet WebAssist \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DLink-DI-604\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"DI-604\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DI-604\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EGROUPWARE-\\u4ea7\\u54c1\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"eGroupWare\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Su-CRM\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"runeCRM.ico\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dell-Remote-Access-Controller\",\n  \"logic\": \"((a||b||c||d||e||f|| (g&&h) || (i&&j)) &&k&&l) || (m&&n) || (o&&p) ||q||r|| (s&&t) || (u&&v)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/cgi-bin/webcgi/ssologin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: RAC_ONE_HTTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Dell Remote Access Controller\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Dell Remote Management Controller\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"javascript:getAimIntProp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"top.document.location.href = \\\\\\\"/index.html?console\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"/session?aimGetIntProp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"/index.html?console\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"/start.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Embedthis\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"<h2>Login Form</h2>\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"Dell Out-of-band\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"Remote Access Controller\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"Linux iDRAC-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"q\",\n    \"feature\": \"Server: RAC_ONE_HTTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"r\",\n    \"feature\": \"/Applications/dellUI/login.htm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"s\",\n    \"feature\": \"iDRAC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"t\",\n    \"feature\": \"/dellUI/login.htm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"u\",\n    \"feature\": \"iDRAC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"v\",\n    \"feature\": \"/dellUI/login.htm\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EDK\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<!-- /killlistable.tpl -->\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-M300V\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"alt=\\\\\\\"Cisco M300V\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco Content Security Management Virtual Appliance M300V\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"darkstat\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: darkstat\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: darkstat\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TV-IP851WC\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TV-IP851WC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TV-IP851WC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TV-IP651WI\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TV-IP651WI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TV-IP651WI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"(TV-IP651WI)</title>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<modelName>TV-IP651WI</modelName>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cloudrexx-CMS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"powered by Contrexx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Contrexx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zoom-Search-Engine\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"name=\\\\\\\"zoom_query\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BroadWin-WebAccess\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<!-- #BeginTemplate \\\\\\\"/Templates/bw_templete1.dwt\\\\\\\" -->\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/broadWeb/bwRoot.asp?username=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/broadWeb/bwRoot.asp?username=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BrowserCMS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by BrowserCMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"BrowserCMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CalendarScript\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Calendar Administration : Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by <A href=\\\\\\\"http://www.CalendarScript.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cgit\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div id='cgit'>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href='/cgit.css'/>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content='cgit\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HyperSQL-HSQLDB\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HSQLDB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"hsqldb\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cherokee\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Cherokee\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Cherokee\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"TP_LINK-TL-WR845N\",\n  \"logic\": \"(a&&b) ||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"(url.indexOf(\\\\\\\"tplinklogin.net\\\\\\\")\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TL-WR845N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"TL-WR845N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"TP-LINK Wireless N Router WR845N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"TP-LINK Wireless N Router WR845N\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cimplicity-WebView\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: CIMPLICITY-HttpSvr\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: CIMPLICITY-HttpSvr\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<APPLET name=\\\\\\\"ProwlerClientAppletObject\\\\\\\" archive=\\\\\\\"/ProwlerClient.jar\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-VPN-3000-Concentrator\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco Systems, Inc. VPN 3000 Concentrator \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOTO_LINK-A2004NS\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TOTOLINK A2004NS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src =\\\\\\\"/images2/login_back_za2ns.en.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"TOTOLINK A2004NS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"TOTOLINK A2004NS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cerberus-Helpdesk\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CerberusPublicGUI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CerberusPublicGUI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<!-- If you have your own stylesheet for HTML elements, you can remove the cerberus-html.css link\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Citrix-XenServer\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Citrix Systems, Inc. XenServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a href=\\\\\\\"XenCenterSetup.exe\\\\\\\">XenCenter installer</a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"XenServer \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-N3024F\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">N3024F\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Dell Networking N3024F\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DCS-2103\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"DCS-2103\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DCS-2103\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Omnip\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"static/style/images/tou.png\\\\\\\") no-repeat\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"File-Upload-Manager\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"File Upload Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<IMG src=\\\\\\\"/images/header.jpg\\\\\\\" alt=\\\\\\\"File Upload Manager\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BlueOnyx\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login - BlueOnyx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Thank you for using the BlueOnyx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Webcamxp-product\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ebcamX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: webcamXP 5\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: webcamXP 5\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Android-Webcam-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Android Webcam Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Android Webcam Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-SmartAX\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"Huawei SmartAX\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SmartAX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Huawei SmartAX\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-printer\",\n  \"logic\": \"(a&&b) || (c&&d) || (e&& (f||g)) || ((h&&i) &&j) ||k||l||m|| ((n||o||p||q||r||s||t||u||v) && (w||x) &&y) ||z\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HP-ChaiServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"HP LaserJet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/hp/jetdirect\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"HP ETHERNET\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"JD149\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"JD153\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"HP HTTP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Samsung\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"gzip\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"Printer Network Card\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"Server: HP-ChaiSOE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"HP ETHERNET MULTI-ENVIRONMENT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"HP Officejet Pro\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"Server: HP HTTP Server; HP OfficeJet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"HP DesignJet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"q\",\n    \"feature\": \"HP LaserJet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"r\",\n    \"feature\": \"HP PageWide Pro\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"s\",\n    \"feature\": \"HP Color LaserJet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"t\",\n    \"feature\": \"HP PageWide\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"u\",\n    \"feature\": \"Server: HP HTTP Server; HP Deskjet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"v\",\n    \"feature\": \"Server: HP HTTP Server; HP Photosmart\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"w\",\n    \"feature\": \"serial Number\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"x\",\n    \"feature\": \"@PJL INFO STATUS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"y\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"z\",\n    \"feature\": \"Hostname: HP Laserjet\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-Q504\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.q504.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\\\\\\"/images/login_back_q504.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ipTIME Q504\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Atvise-webMI\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: atvise\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"alarmlistbutton\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: atvise\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BadBlue\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: BadBlue\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: BadBlue\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BackBee\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div id=\\\\\\\"bb5-site-wrapper\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-G304\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.g304.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME G304\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ipTIME-N704QCA\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n704qc.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME N704QCA\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-Rimes\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Rimes-Cisco\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Rimes-Cisco\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Linksys-Modem\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Belkin\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Arab-Portal\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by: Arab\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ipTIME-EW302N\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.ew302.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\\\\\\"/images2/login_title.ew302nr.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ipTIME EW302N\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Linksoon-VideoOSoon Podcast Video Sharing System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Power By Linksoon - VideoSoon\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/skin/AnySoonDefault/ANYstyles.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MG4200-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MG4200 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie-RG-DBS\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/css/impl-security.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/dbaudit/authenticate\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"eZ-Publish\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Set-Cookie: eZSessionCookie\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Set-Cookie: eZSessionCookie\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D-Link-WIRELESS-AP\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"location.href = \\\\\\\"Wizard_AP.htm\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<body onload=\\\\\\\"load_initial_settings('no-auth', 'get_restore_default')\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DianCMS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DianCMS_SiteName\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DianCMS_\\u7528\\u6237\\u767b\\u9646\\u5f15\\u7528\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Vidyo-video conferencing system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VidyoRouter Configuration\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/vr2conf/themes/vidyo/vidyo.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHOTON-1FE+1GE+Wifi\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"1FE+1GE+Wifi\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GuardSite-WatchGuard-AP300\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WatchGuard AP300\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Shun Net Wireless - Router\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u987a\\u7f51\\u65e0\\u7ebf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/cgi-bin/sw_login.cgi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"document.form1.submit()\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"42Gears-SureMDM\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SureMDM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"AstroContacts\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"iKuai-\\u7231\\u5feb\\u6d41\\u63a7\\u8def\\u7531\",\n  \"logic\": \"(a&&b) ||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7231\\u5feb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/resources/images/land_prompt_ico01.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u767b\\u5f55\\u7231\\u5feb\\u6d41\\u63a7\\u8def\\u7531\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<li><a href=\\\\\\\"http://www.ikuai8.com\\\\\\\" target=\\\\\\\"_blank\\\\\\\">\\u5b98\\u7f51</a></li>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"src=/static/js/manifest.6513b08df486af67396b.js>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EMC-Connectrix\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Connectrix\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Leadsec-WAF\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div id=\\\\\\\"divLogin\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u7f51\\u5fa1WAF\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u7f51\\u5fa1Web\\u5e94\\u7528\\u5b89\\u5168\\u9632\\u62a4\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SparkLAN-Router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DHT 802.11n QoS Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"mini_httpd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Leguang-Equipment Management System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"btn btn-zx btn-modal\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"capslock\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-XNC\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Cisco XNC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Cisco XNC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LUA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"lua\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RAILS-Framework\",\n  \"logic\": \"a||b||c|| (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ruby on Rails\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Ruby on Rails \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"alt=\\\\\\\"Ruby on Rails\\\\\\\" \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/users/sign_in\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"type=\\\\\\\"hidden\\\\\\\" name=\\\\\\\"authenticity_token\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"href=\\\\\\\"/assets/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-DLT\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco-DLT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"System name: Cisco DLT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Cisco-DLT\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Startbbs\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Startbbs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"stb_csrf_cookie\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"stb_csrf_cookie\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"iLON-SmartServer\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WindRiver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"i.LON\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"WindRiver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"i.LON\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Pollution source monitoring data exchange platform\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6c61\\u67d3\\u6e90\\u76d1\\u6d4b\\u6570\\u636e\\u4ea4\\u6362\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"window.location.href = '/SyncModule/SyncHome/Index';\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"openSUSE\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"openSUSE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"openSUSE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"x01Welcome to SUSE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"SUSE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"SUSE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"1039SOFT - Home School\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"name=\\\\\\\"Hid_Qu_Type\\\\\\\" id=\\\\\\\"Hid_Qu_Type\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u767b\\u5f55_1039\\u5bb6\\u6821\\u901a\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/Handler/ValidateCode.ashx?id=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"txtyzm\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fortinet-WAF\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"fortiwafsid=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"fortiwafsid=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Eltex-R3621-W2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ELTEK R3621-W2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UNIVIEW-Data Management Server\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6570\\u636e\\u7ba1\\u7406\\u670d\\u52a1\\u5668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/webui/switch.php\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"cur_type=\\\\\\\"DEVTYPE_MS8500\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"value=DEVTYPE_DM8500 selected>DM8500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"cur_type=\\\\\\\"DEVTYPE_DM8500\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Evo-Cam\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"value=\\\\\\\"evocam.jar\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<applet archive=\\\\\\\"evocam.jar\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RSYNC\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"rsync\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Southern Data-CMS\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/SouthidcKeFu.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Copyright 2003-2015 - Southidc.net\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/Southidcj2f.Js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hadoop-Hue\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Hue - Welcome to Hue\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"jHueHdfsTreeGlobals\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"id=\\\\\\\"jHueNotify\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Hue and the Hue logo are trademarks of Cloudera, Inc.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-Inner-Web\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HUAWEI Inner Web\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"hidden_frame.html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LINKSYS-LAPAC1750\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"LAPAC1750 Wireless AC1750 Access Point with PoE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"V-SOLUTION-OLT-Web-Management\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OLT Web Management Interface\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AJA-Video-Converter\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"eParamID_SWVersion\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AIDEX-Company Products\",\n  \"logic\": \"a|| (b&&c) || (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: aidex\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"http://www.aidex.de/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: aidex\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Adobe-Connect\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/common/scripts/showContent.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"breezesession=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"breezesession=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u7f8e\\u7279\\u8f6f\\u4ef6-MetaCRM6\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MetaCRM6\\u5ba2\\u6237\\u5173\\u7cfb\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VERTIV-remote management\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Remote Management Controller\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Avocent Corporation\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ACME-EWS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Acme\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Acme\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP-LINK-TD-VG3631\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TP-LINK TD-VG3631\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TP-LINK TD-VG3631\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"0.6.0 1.0 v0001.0 Build 130413 Rel.52459n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"0.6.0 1.0 v0001.0 Build 140415 Rel.39003n\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"0.6.0 1.0 v0001.0 Build 140925 Rel.50379n\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alibaba-Cloud Resource Control Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<h1 class=\\\\\\\"white\\\\\\\">\\u4e91\\u8d44\\u6e90\\u7ba1\\u63a7\\u5e73\\u53f0</h1>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Aisino-Telecom Edition\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<font class=\\\\\\\"bottomFont\\\\\\\">\\u822a\\u5929\\u4fe1\\u606f\\u80a1\\u4efd\\u6709\\u9650\\u516c\\u53f8 \\u7535\\u4fe1\\u884c\\u4e1a\\u7248\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Billing test tool\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u8ba1\\u8d39\\u6d4b\\u8bd5\\u5de5\\u5177\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href:'/billTool/querySum'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Gold drive software -CMS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SpeakIntertScarch.aspx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-CICS-Transaction-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: IBM_CICS_Transaction_Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: IBM_CICS_Transaction_Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NcFTPd\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NcFTPd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FileZilla-Server\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"t\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FileZilla Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"iviewui\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"iView admin\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Consul-HashiCorp\",\n  \"logic\": \"a|| (b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Consul by HashiCorp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/ui/assets/consul-ui\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"consul-ui/config/environment\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"consulHost\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"consul instance\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"www.consul.io\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"vsftpd\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"t\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"vsftpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"500 OOPS: child died\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"500 OOPS: cannot locate user entry\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KNET-\\u53ef\\u4fe1\\u7f51\\u7ad9\\u6743\\u5a01\\u6570\\u636e\\u5e93\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"https://ss.knet.cn/verifyseal.dll\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KIVI-TV\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"KIVI TV\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tiandune - Website Monitoring and Automatic Repair System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5929\\u878d\\u4fe1\\u7f51\\u7ad9\\u76d1\\u6d4b\\u4e0e\\u81ea\\u52a8\\u4fee\\u590d\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IP_COM-Company Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IP-COM | LOGIN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tiandong letter - abnormal flow management and resistance service system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5929\\u878d\\u4fe1\\u5f02\\u5e38\\u6d41\\u91cf\\u7ba1\\u7406\\u4e0e\\u6297\\u62d2\\u7edd\\u670d\\u52a1\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SangFor-firewall product\",\n  \"logic\": \"a||b||c||d|| ((e|| (f&&g)) &&h) || (i&&j)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SANGFOR FW\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SANGFOR | NGAF \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"SANGFOR | AF \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"if (!this.SF)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"SF.cookie('sangfor_session_id\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"version = _(\\\\\\\"\\u5f02\\u6b65\\u83b7\\u53d6\\u63d0\\u4ea4\\u6210\\u529f\\uff0c\\u4f46\\u662f\\u83b7\\u53d6\\u7248\\u672c\\u4fe1\\u606f\\u5931\\u8d25\\\\\\\");\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"this.sf = {};\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"<div class=\\\\\\\"title title-login\\\\\\\">\\u767b\\u5f55\\u9632\\u706b\\u5899WEB\\u9632\\u7be1\\u6539\\u7ba1\\u7406\\u7cfb\\u7edf</div>\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"return decodeURIComponent(arr.join(''))\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"name=\\\\\\\"robots\\\\\\\" content=\\\\\\\"nofollow\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DH-NVR4416-HDS2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DH-NVR4416-HDS2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AMAX-Mijie Mail System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/aboutus/magicmail.gif\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Goku CRM\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u609f\\u7a7aCRM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/Public/js/5kcrm.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-Email-Security-Appliance-C690\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Email Security Appliance   C690\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SmartOA \",\n  \"logic\": \"a||b|| (c&&d) ||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/smartoa.plist\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"smartoa\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content/images/login_background.jpg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"iFrameHeight()\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"href=\\\\\\\"http://www.smartoa.com.cn/download/smartoa.apk\\\\\\\">\\u5b89\\u5353\\u5ba2\\u6237\\u7aef</a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"/smartoa/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yeastar-TG400\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG400\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: TG400\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Destoon\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Destoon\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"destoon_moduleid\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Soft label technology - cost integrated management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"name=\\\\\\\"RedirectTo\\\\\\\" value=\\\\\\\"/zym/rbkj.nsf\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-ZyWALL-USG-2000\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZyWALL USG 2000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ZyWALL USG 2000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zhirui\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"\\u667a\\u777f\\u8f6f\\u4ef6\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Zhirui.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"phpmps\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by Phpmps\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"templates/phpmps/style/index.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Changjie Tong - Enterprise Management\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7545\\u6377\\u901a\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Basler- Video Monitoring\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basler AG\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"fnord\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BPM management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BPM\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huawei-Cloud-Fortress\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=mTokenPlugin width=0 height=0 style=\\\\\\\"position: absolute;LEFT: 0px; TOP: 0px\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"type=application/x-xtx-axhost\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Organization: \\u534e\\u4e3a\\u4e91\\u5b89\\u5168\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yun An Bao - Yunxuan\",\n  \"logic\": \"(a&&b) && (c||d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=mTokenPlugin width=0 height=0 style=\\\\\\\"position: absolute;LEFT: 0px; TOP: 0px\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"type=application/x-xtx-axhost\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Domain Control Validated\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u4e91\\u5323\\u5b50\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sports Technology --SPammark Email Information Security Gateway\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Spammark\\u90ae\\u4ef6\\u4fe1\\u606f\\u5b89\\u5168\\u7f51\\u5173\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/cgi-bin/spammark?empty=1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"smtp server (Spammark\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AAKUAN - Attendance System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"Scripts/popModal.css\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"aakuan.cn\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Shenzhou Xihajo - Video On-demand system\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u89c6\\u7ff0\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u89c6\\u9891\\u70b9\\u64ad\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"background=\\\\\\\"images/cbackground.jpg\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Thunisoft - Attendance Management System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5e7f\\u5dde\\u7d2b\\u5149\\u534e\\u5b87\\u4fe1\\u606f\\u6280\\u672f\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u8003\\u52e4\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"A Tong-Company product\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/custom/GroupNewsList.aspx?groupid=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie-RCMS\",\n  \"logic\": \"(a&&b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/r/cms/www/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"jhtml\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"AcSoft\",\n  \"logic\": \"(a||b) &&c&&d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u8d39\\u7528\\u62a5\\u9500\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"login_1\\\\\\\">CA\\u5bc6\\u7801\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"window.external.AddFavorite\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u5b89\\u8d22\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"H3C-ER2100V2\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ER2100V2\\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"H3C ER2100V2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"i@Report\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ESENSOFT_IREPORT_SERVER\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"com.sanlink.server.Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ireportclient\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"css/ireport.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Environmental integrated management system\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"case \\\\\\\"Overdue\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/Content/gislogin/js/TweenLite.min.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"url: contentPath + \\\\\\\"/Login/GetNotice\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Earth Classics - Maintenance Reconstruction Information Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"action=\\\\\\\"/gqjx/loginMgr.do?method=doLogin\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ERP Comprehensive Report Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"placeholder=\\\\\\\"\\u8fd9\\u91cc\\u8f93\\u5165\\u57df\\u8d26\\u6237\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CDR_STATS-product\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CDR-Stats | Customer Interface\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/static/cdr-stats/js/jquery\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Redmine\",\n  \"logic\": \"(a&&b) ||c||d||e||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Redmine\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"authenticity_token\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"Redmine\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"_redmine_session=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://www.redmine.org/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"_redmine_session=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Redmine\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huibo Square-Labbuilder\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"LabBuilder \\u5b9e\\u9a8c\\u5ba4\\u4fe1\\u606f\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HikVision-Integrated Security Management Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/portal/common/js/commonVar.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ubuntu-system\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ubuntu\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Welcome to nginx on Ubuntu!\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"x01ubuntu\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"phpmoadmin\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"phpmoadmin\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hand - Identification and Access Control Management System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src='/Public/sheme/default/images/ajax-loader.gif'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u676d\\u5dde\\u6c49\\u9886\\u4fe1\\u606f\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-ER2100n\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ER2100n\\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"H3C ER2100n\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"North Source - Network Admission Control System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"modal_delay\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sean - Health Management Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"UpValidateFile.aspx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-WNR2020\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETGEAR WNR2020\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var model=\\\\\\\"WNR2020\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NETGEAR Wireless Router WNR2020\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"NETGEAR WNR2020\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-JWNR2010v5\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETGEAR JWNR2010v5\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"JWNR2010v5\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NETGEAR Router JWNR2010v5\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"NETGEAR Wireless Router JWNR2010v5\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"yongyou-U8-Cloud\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5f00\\u542fU8 cloud\\u4e91\\u7aef\\u4e4b\\u65c5\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-DGND3700\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETGEAR DGND3700\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NETGEAR DGND3700\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"var host_name=\\\\\\\"DGND3700\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"content=\\\\\\\"DGND3700\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u7f51\\u5eb7\\u79d1\\u6280-\\u4e0b\\u4e00\\u4ee3\\u9632\\u706b\\u5899\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7f51\\u5eb7\\u4e0b\\u4e00\\u4ee3\\u9632\\u706b\\u5899\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/images/dashboard/dashboard.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Netentsec NGFW\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hidden danger management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IE\\u8bbe\\u7f6e(\\u9690\\u60a3\\u7ba1\\u7406\\u7cfb\\u7edf\\u4e13\\u7528).reg\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OpenSolaris\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OpenSolaris\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huawei-Firewall\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Eudemon Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Eudemon Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Modify by wangxiangguang\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Tianroncraft - Data Security Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5929\\u878d\\u4fe1\\u6570\\u636e\\u5b89\\u5168\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Falcon-Web-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Falcon Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Falcon Web Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie- Application Control Engine\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.open(\\\\\\\"/login.do\\\\\\\",\\\\\\\"airWin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u9510\\u6377\\u5e94\\u7528\\u63a7\\u5236\\u5f15\\u64ce\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Lenovo companies network disk\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"client/android/bin/LenovoBox.apk\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u4e91\\u5b58\\u50a8\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"alt=\\\\\\\"\\u8054\\u60f3\\u4f01\\u4e1a\\u7f51\\u76d8Android\\u5ba2\\u6237\\u7aef\\u4e0b\\u8f7d\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"flow-framework\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FLOW/FRAMEWORK\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FLOW/FRAMEWORK\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Brickcom-video surveillance\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Brickcom\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Brickcom\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"iGENUS-webmail\",\n  \"logic\": \"(a&&b) || (c&&d&&e&&f) ||g||h||i\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"script/logo_display_set.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"check code\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"top.location='login.php';\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<head \",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"\\ufeff<script>top.location = \\\\\\\"/login.php\\\\\\\";</script>\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"text/javascript\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"iGENUS WEBMAIL SYSTEM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"href=\\\\\\\"http://www.igenus.org/\\\\\\\" target=\\\\\\\"_blank\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"iGENUS webmail\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NOALYSS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NOALYSS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Windon - Next Generation Firewall\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u60e0\\u5c14\\u987f\\u4e0b\\u4e00\\u4ee3\\u9632\\u706b\\u5899\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/base/img/login_logo_ngaf.jpg\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zenoss-Company Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/zport/dmd/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Z-Blog\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"generator\\\\\\\" content=\\\\\\\"Z-Blog\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Product: Z-Blog\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Product: Z-Blog\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"QSee-Camera\",\n  \"logic\": \"(a)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"handlerOcxEvents \\uf8f5 handlerOcxEvents.DrawNetPlayRecord(chn);\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cpanel-WHM\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"whostmgrsession\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"whostmgrsession\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"cPanel, Inc.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"WHM \\u767b\\u5f55\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"xmail\",\n  \"logic\": \"(a&&b) || (c&&d) ||e||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"xmail \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ESMTP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"XMail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<h2>Blog Comments</h2>\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Xmail-\\u4f01\\u4e1a\\u90ae\\u5c40\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"<h1 class=\\\\\\\"voice\\\\\\\">XMail Login</h1>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"xmail\\u4f01\\u4e1a\\u90ae\\u4ef6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"XAMPP\",\n  \"logic\": \"a||b||c|| (d&&e) ||f||g||h||i||j||k||l\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Xampps_info\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Xampps_info\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/xampps.jpg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"location http\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"xampp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"content=\\\\\\\"Kai Oswald Seidler\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"XAMPP for\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"XAMPP Version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"font-size: 1.2em; color: red;\\\\\\\">New XAMPP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"xampp user\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"Welcome to XAMPP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"content=\\\\\\\"XAMPP \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sophos-Cyberoam-SSLVPN\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cyberoam SSL VPN Portal\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"sslvpnuserportalloginform\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zscaler-FIREWALL\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Set-Cookie: _sm_au_d\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Set-Cookie: _sm_au_d\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Netia-Router\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Set-Cookie: rg_cookie_session_id\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Watson\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Set-Cookie: rg_cookie_session_id\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Watson SHDSL Router\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"DDNS-Company Products\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ddns:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Ddns:\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Aura-Httpd\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Sever: AuraHttpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Sever: AuraHttpd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-\\u516c\\u53f8\\u4ea7\\u54c1\",\n  \"logic\": \"(a&&b&&c) || ((d||e||f||g) &&h&&i&&j)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Mini web server 1.0 ZTE \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"ZTE Corporation\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: Mini web server 1.0 ZTE \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"SSH-2.0-ZTE_SSH.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Vendor: ZTE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"x-powered-by: ThinkPHP\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Tiandin-Topaudit\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Topsec TopAudit\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TopAudit\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"TA-W \\u767b\\u5f55\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FiberHome-Fengine\",\n  \"logic\": \"(a&&b) || (c&&d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Fengine\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FiberHome \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<h3><script>document.writeln(lang.LANG_LOGIN_PROMPT);</script></h3>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<form name=\\\\\\\"form1\\\\\\\" action=\\\\\\\"/cgi/login.cgi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Content-Length: 3772\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Openedx-product\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"footer-openedx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"footer-about-openedx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"alt=\\\\\\\"Powered by Open edX\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yu Xiang - Moral Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4f59\\u9999\\u7ecf\\u5206\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"kingCMS\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"kingcms\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"KingCMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Powered by KingCMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"USB-print server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"USB Print Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ILAS-online library\",\n  \"logic\": \"a||b||c|| (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6b22\\u8fce\\u60a8\\u4f7f\\u7528ILAS\\u7f51\\u4e0a\\u56fe\\u4e66\\u9986\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<iframe name=\\\\\\\"content\\\\\\\"  src=\\\\\\\"index_middle.html\\\\\\\" frameborder=\\\\\\\"auto\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u6b22\\u8fce\\u4f7f\\u7528Ilas\\u5c0f\\u578b\\u7248\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<select id=\\\\\\\"selProvince\\\\\\\"   onchange=\\\\\\\"getCity(this.options[this.selectedIndex].value)\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"\\u6b22\\u8fce\\u4f7f\\u7528ilas\\u7f51\\u4e0a\\u56fe\\u4e66\\u9986\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UXSINO - Next Generation Firewall\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4f18\\u70ab\\u4e0b\\u4e00\\u4ee3\\u9632\\u706b\\u5899\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"http://www.uxsino.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PIOLINK-Web-Manager\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PIOLINK Web Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<td class=col_head>Login - Piolink Web Manager</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WatchGuard-Firewall\",\n  \"logic\": \"(a&& (b||c||d)) ||e||f||g||h||i||j|| (k&&l)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"fireware\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/wgcgi.cgi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"WWUI.swf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/auth_portal/Default/logo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Basic realm=\\\\\\\"WatchGuard\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: WatchGuard Firewall\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Digest realm=\\\\\\\"WatchGuard\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Basic realm=\\\\\\\"WatchGuard\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"WatchGuard Firewall\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Digest realm=\\\\\\\"WatchGuard\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"Server: Firewall\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"WatchGuard Configuration\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"pptp-VPN\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"ppTp VPN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"ppTp VPN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ppTp VPN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<span class=subt>ppTp VPN Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fastweb\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Fw-Via: \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: FastWeb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: FastWeb\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WD-MyCloud\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"_PROJECT_MODEL_ID_KINGS_CANYON\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Welcome to WD My Cloud\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GSE\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"server: GSE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: GSE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-HTTP-Server\",\n  \"logic\": \"(a||b||c||d) || ((e||f) &&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: IBM_HTTP_Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IBM Administration Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: IBM HTTP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"IBM HTTP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: IBM HTTP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: IBM_HTTP_Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"ASUS-R6400\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ASUS-R6400\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">R6400\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TerraMaster-NAS\",\n  \"logic\": \"((a|| (b&&c&&d) || (e&&f) || ((g||h) &&i)) &&j) ||k\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.open('http://www.terra-master.com/','_blank');\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NAS Setup\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-UA-Compatible\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"nas.cgi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"TerraMaster\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"connfailed\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"class=\\\\\\\"cloud-logo\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"TerraMaster \\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"class=\\\\\\\"newlogo pngFix\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"X-Powered-By: TerraMaster\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Aastra-6755i\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Aastra 6755i\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Aastra 6755i\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Extreme companies\",\n  \"logic\": \"((a||b) &&c) ||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: ExtremeWare\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<frame src=\\\\\\\"extremetop\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Vendor: Enterasys Networks\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: ExtremeWare\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u7528\\u53cb-ERP-NC\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/nc/servlet/nc.ui.iufo.login.Index\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u7528\\u53cb\\u65b0\\u4e16\\u7eaa\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Siemens-SCALANCE-M875\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"SCALANCE M875\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SCALANCE M875\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"SCALANCE M875\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IPC@CHIP\",\n  \"logic\": \"(a&&b&&c) || (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: IPC@CHIP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"boa\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: boa\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"IPC@CHIP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"http\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"EnterCRM\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EnterCRM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NvDVR\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"XWebPlay\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NVDVR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DMS-DVR\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"operation=invalidOperation\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"&unit=DMS&id=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"operation=invalidOperation\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"&unit=DMS&id=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Baidu- Cloud Acceleration\",\n  \"logic\": \"((a||b||c) &&d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: yunjiasu\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"data-orig-ref=\\\\\\\"su.baidu.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"id=\\\\\\\"yunjiasu_link\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: yunjiasu\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"360-website guard\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"360wzb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"360wzws\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"WZWS-RAY: \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"360wzb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"360wzws\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"WZWS-RAY: \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sogou search - webmaster platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"sogou_site_verification\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"360-webmaster platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"360-site-verification\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Telerik-Sitefinity\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Telerik.Web.UI.WebResource.axd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Sitefinity\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TurboMail\",\n  \"logic\": \"a||b||c||d||e||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by TurboMail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"wzcon1 clearfix\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"TurboMail\\u90ae\\u4ef6\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<a href=\\\\\\\"http://www.turbomail.org\\\\\\\">Powered by TurboMail</a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"alt=\\\\\\\"TurboMail \\u7535\\u5b50\\u90ae\\u4ef6\\u7cfb\\u7edf\\\\\\\"/>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"TurboMail SMTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"TurboMail POP3 Service\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Windows\\u8fdc\\u7a0b\\u8fde\\u63a5\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"rdp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASPCMS\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by ASPCMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"ASPCMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/inc/AspCms_AdvJs.asp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RabbitMQ\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RabbitMQ Management\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server:RabbitMQ\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WordPress\",\n  \"logic\": \"(a|| (b&&c&&d) ) ||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"name=\\\\\\\"generator\\\\\\\" content=\\\\\\\"WordPress \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Pingback\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/xmlrpc.php\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/wp-includes/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"wordpress_test_cookie\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"wordpress_test_cookie\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dahan Software - Dahan System\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Produced By \\u5927\\u6c49\\u7f51\\u7edc\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a href='http://www.hanweb.com' style='display:none'>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<meta name='Generator' content='\\u5927\\u6c49\\u7248\\u901a'>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<meta name='Author' content='\\u5927\\u6c49\\u7f51\\u7edc'>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/jcms_files/jcms\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Drupal\",\n  \"logic\": \"a||b||c|| (d&&e&&f) ||g|| (h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Generator: Drupal\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Drupal\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"jQuery.extend(Drupal.settings\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/sites/default/files/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/sites/all/modules/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"/sites/all/themes/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"ace-drupal7prod\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Location: /core/install.php\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ESPCMS\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by ESPCMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by ESPCMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"infolist_fff\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/templates/default/style/tempates_div.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u9a91\\u58eb-74CMS\",\n  \"logic\": \"(a||b||c|| (d&&e))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"74cms.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"\\u9a91\\u58ebCMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://www.74cms.com/\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/templates/default/css/common.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"selectjobscategory\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CMSTop\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/css/cmstop-common.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/js/cmstop-common.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"cmstop-list-text.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<a class=\\\\\\\"poweredby\\\\\\\" href=\\\\\\\"http://www.cmstop.com\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Headline Encyclopedia - HDWIKI\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"powered by hdwiki!\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"HDWiki\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"http://kaiyuan.hudong.com?hf=hdwiki_copyright_kaiyuan\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"hd_sid=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"hd_sid=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bitrix-Site-Manager\",\n  \"logic\": \"a||b||c||d||e|| (f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Powered-Cms: Bitrix Site Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Powered-Cms: Bitrix Site Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Bitrix Site Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"policyref=\\\\\\\"/bitrix/p3p.xml\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"policyref=\\\\\\\"/bitrix/p3p.xml\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"BITRIX_SM_TIME_ZONE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"BX.setCSSList\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-SRG3250\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SRG3250\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HUAWEI SRG3250\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-Internet-Connection-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: ibm internet connection server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: ibm internet connection server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"McAfee_EG4500\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EG4500/SMTP \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FishEye\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Set-Cookie: FESESSIONID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Fisheye \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"fisheye-16.ico\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GridSite\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"http://www.gridsite.org/\\\\\\\">GridSite\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"gridsite-admin.cgi?cmd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Google-Talk-Chatback\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"www.google.com/talk/service/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Shusha Group - Printer\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AURORA AD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ADC223\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Aurora ADC \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Aurora ADC286\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Aurora ADC366\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FileVista\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Welcome to FileVista\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a href=\\\\\\\"http://www.gleamtech.com/products/filevista/web-file-manager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GMS-corporate product\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Gordano\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Gordano\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ancient River Electrotechnics - Router\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: GR-HTTPD Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: GR-HTTPD Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"FITELnet-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"FITELnet\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FirePHP\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"x-wf-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"meta.wildfirehq.org\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"x-wf-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"meta.wildfirehq.org\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FileNice\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"the fantabulous mechanical eviltwin code machine\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"fileNice/fileNice.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Haproxy-agent\",\n  \"logic\": \"a|| (b&&c) || (d&&e&&f&&g) ||h|| (i&&j&&k&&l&&m)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"HAProxy Statistics\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HAProxy on top of other infrastructure\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"HTTP/1.0 504 Gateway Time-out\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Cache-Control: no-cache\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Connection: close\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Content-Type: text/html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"HAProxy: service ready.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"The server didn't respond in time.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"HTTP/1.0 504 Gateway Time-out\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"Cache-Control: no-cache\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"Connection: close\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"Content-Type: text/html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Help_desk_software- product\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"target=\\\\\\\"_blank\\\\\\\">freehelpdesk.org\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HeiTel-Digital-Video-Device\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: HeiTel GmbH Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: HeiTel GmbH Web Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HESK-product\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"hesk_javascript.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"hesk_style.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://www.hesk.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Powered by <a href=\\\\\\\"https://www.hesk.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HighWire-Press\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"x-firenze-processing\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"x-highwire-sessionid\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"x-firenze-processing\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"x-highwire-sessionid\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hiki\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Hiki\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/hiki_base.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"by <a href=\\\\\\\"http://hikiwiki.org/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-Catalyst switch\",\n  \"logic\": \"a|| (b&&c) ||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco Systems Catalyst\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"cisco IOS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Catalyst L3 Switch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Cisco Catalyst Switch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Cisco Catalyst\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Cisco IOS Software, Catalyst \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hillstone-\\u6d41\\u91cf\\u7ba1\\u7406\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Hillstone\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Hillstone Networks\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Hillstone\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Web Management\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"images/login_BG.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"'Hillstone Networks', 'hillstone-logo.gif'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SolarWinds - Traffic Management\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SolarWinds\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SolarWinds\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"SolarWinds Network Management\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"SolarWinds.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie-firewall\",\n  \"logic\": \"(a&& (b||c)) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RG-WALL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"4008 111 000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ssl_index_next.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"RG-WALL-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Peak Communication - Intelligent Firewall\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7693\\u5cf0\\u9632\\u706b\\u5899\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" <body bgcolor=#ddeeff onload=\\\\\\\"document.all.user.focus()\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"style=\\\\\\\"background:url(images/login.gif) no-repeat center\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Google-Search-Appliance\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Google Search Appliance\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Google Search Appliance\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Gitweb\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"gitweb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/gitweb.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/gitweb.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Polar Database Audit System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"JDDBA 1.0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Forest-Blog\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Forest Blog\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-GoServe\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: goserve\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: goserve\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"fnord\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"fnord\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: fnord\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"fnord\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: fnord\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Glossword\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Glossword\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GETSIMPLE-CMS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"GetSimple\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by GetSimple\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GeoNode\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://geonode.org\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/catalogue/opensearch\\\\\\\" title=\\\\\\\"GeoNode Search\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"GeoNode\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bunker Fortress - Product\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7889\\u5821\\u5821\\u5792\\u673a\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"gSOAP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: gSOAP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: gSOAP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Gossamer-Forum\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"gforum.cgi?username=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Gossamer Forum\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GrandTec-X-Guard\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"WalkGuard\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"WalkGuard\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"XecureVPN\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"XECURE VPN Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"xnstyle.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Grandstream-Company products\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Grandstream\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Grandstream Device Configuration\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Grandstream\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Footprint\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Footprint \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Footprint \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FluxBB\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://fluxbb.org/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Anheng Information - Ting Yu Comprehensive Log Audit\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u660e\\u5fa1\\u7efc\\u5408\\u65e5\\u5fd7\\u5ba1\\u8ba1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GenOHM-SCADA\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GenOHM Scada Launcher\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/cgi-bin/scada-vis/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Geobytes-GeoSelect\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Geobytes-GeoSelect\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Geobytes-GeoSelect\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"i3micro\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"i3micro\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"i3micro\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hyperwave-IS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Hyperwave IS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Hyperwave IS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HyNetOS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HyNetOS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hughes-Satellite-Router\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<frame src=/fs/dynaform/dw_logo.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HUGHES Terminal\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"System Control Center\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hybrid-Cluster\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Hybrid Cluster\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Hybrid Cluster\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mailgates-system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MailGates ESMTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hitron-Cable-Modem\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DOCSIS \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cable Modem\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Hitron Technologies\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"North Tower Software-PDM Data Acquisition\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"align=\\\\\\\"center\\\\\\\" class=\\\\\\\"login_pdm\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"background: no-repeat url(../images/login/pdmdenglu1_28.png);\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Semaphore\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"www.smartlogic.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"alt=\\\\\\\"Powered by Semaphore\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Simple-Phishing-Toolkit\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span id=\\\\\\\"spt\\\\\\\"><a href=\\\\\\\"http://www.sptoolkit.com/download/\\\\\\\" target=\\\\\\\"_blank\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"welcome to spt - simple phishing toolkit.  spt is a super simple but powerful phishing toolkit.\\\\\\\" />\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SAP-management system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SAP Solution Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Logon\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MoviStar-FIOS-Router\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"movistar\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"onsubmit=\\\\\\\"uiApply\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"movistar\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ACMAILER-mail system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"http://www.acmailer.jp\\\\\\\"><img src=\\\\\\\"img/logo.jpg\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"QNO-4WAN_8LAN_IPSec_VPN_Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"4WAN_8LAN_IPSec_VPN_Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHICOMM-PSGS-2314J\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"PSGS-2314J\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"PSGS-2314J\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"5WAN_5LAN_SSL_IPSec_VPN_Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"5WAN_5LAN_SSL_IPSec_VPN_Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Apple-MacBookPro\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MacBookPro12,1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Claymores-Ethereum-Dual-Miner-Manager\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Claymore's Ethereum Dual Miner Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Claymore's Ethereum Dual Miner Manager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZKTECO-ZEM800\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZEM800 login:\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D-Link-DAR-7000\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"D-Link\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DAR-7000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Brocade-Network-Advisor\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Network Advisor Login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<span class=\\\\\\\"ui-menuitem-text\\\\\\\">About Network Advisor</span></a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"NETGEAR-R7900P\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR R7900P\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NETGEAR Router R7900P\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-R7800\",\n  \"logic\": \"a|| (b&&c) ||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR R7800\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Netgear R7800\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Netgear R7800\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"NETGEAR-R7800\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u4e2d\\u79d1\\u66d9\\u5149-\\u670d\\u52a1\\u5668\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Sugon RAID Manager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-R6900v2\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR R6900v2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NETGEAR Router R6900v2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-R6800\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR R6800\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NETGEAR Router R6800\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR R6800\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"R6800\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PaxRunner-Remote-Console\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Pax-Runner Remote Console\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OpenStage-IP-Phone\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Openstage IP Phone\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"name='WEBM_main_banner'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oriental Huadun-Autm\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"HUADUN Network Security Technology Co.,Ltd\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RedHat-CentOS system\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"centos\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Apache HTTP Server Test Page powered by CentOS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"CentOS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Servlet\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Servlet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Servlet\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-GCT\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco GCT\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TightVNC\",\n  \"logic\": \"a||b||c||d||e||f||g|| (h&&i&&j)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TightVNC \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"VNC desktop\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<APPLET archive=\\\\\\\"tightvnc-jviewer.jar\\\\\\\" \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<A href=\\\\\\\"http://www.tightvnc.com/\\\\\\\">www.TightVNC.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"js/thinvnc.sdk.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"js/thinvnc.app.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"<TITLE>VNC desktop</TITLE>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"HTTP/1.0 404 Not Found\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"The requested file could not be found.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"<HEAD><TITLE>404 Not Found</TITLE></HEAD>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-ASR\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CISCO ASR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CISCO ASR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Cisco 8600\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Cisco IOS Software, ASR1000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Cisco IOS Software, ASR900\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Aethra-Radvision Video Conference\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Welcome to RADVISION\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/icm/image/login/Network_Manager-radvision.jpg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"window.location=\\\\\\\"login/AeLogin.php\\\\\\\";\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-ECDS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco-ECDS/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Cisco-ECDS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NGI-DIAM4\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/diam4/inc/lang/fr/lang.min.js\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IDCOS-CloudBoot cloud boot loader platform\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cloudboot\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/clipboard/ZeroClipboard.min\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-IOS-XR\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Cisco IOS-XR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco IOS XR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GoAccess-Log Analysis Tool\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"by <a href=\\\\\\\"https://goaccess.io/\\\\\\\">GoAccess</a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwang - Human Face Recognition Attendance Data Inquiry System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/HWface/script/LoginCheck.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"huawei-HG531\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"300Mbps Wireless ADSL2+ Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"#d1d1d1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-Lyra_Trio\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"prod_madelName\\\\\\\">Lyra_Trio</div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ASUS Wireless Router Lyra_Trio\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BYTEVALUE-\\u667a\\u80fd\\u6d41\\u63a7\\u8def\\u7531\\u5668\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BYTEVALUE \\u667a\\u80fd\\u6d41\\u63a7\\u8def\\u7531\\u5668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a href=\\\\\\\"http://www.bytevalue.com/\\\\\\\" target=\\\\\\\"_blank\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mi-router\",\n  \"logic\": \"(a&& (b||c)) ||d||e||f||g||h||i||j||k||l||m||n\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5c0f\\u7c73\\u8def\\u7531\\u5668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Tx-Server: MiXr\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"url=/cgi-bin/luci/web\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"MiRouter-Router-2</a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"MI-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"MI-Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"MI-Routers\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"MiRouter3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"MIRouter\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"realm=\\\\\\\"MI-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"MI-Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"MI-Routers\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"MiRouter3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"MIRouter\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Verizon-Router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Verizon Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div id=\\\\\\\"bgimage\\\\\\\" class=\\\\\\\"container\\\\\\\" ng-view></div>\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Gigaset-VOIP\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"onclick=\\\\\\\"javascript:open_gigaset_help_window()\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Gigaset Communications\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-NER214W\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NER214W\\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-Prestige-660R-T1\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Prestige 660R-T1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UniFi-UniFi series routing\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"UniFi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"appGlobalHeader\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Neusoft-NetEye unified login\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NetEye \\u7edf\\u4e00\\u8eab\\u4efd\\u7ba1\\u63a7\\u7cfb\\u7edf\\u767b\\u5f55\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-EBG2800\",\n  \"logic\": \"(a||b) &&c&&d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"location.href =\\\\\\\"login_web.htm\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"https://dl.newrocktech.com/static/web/remote.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"images/load.gif\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"euseStudy\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"UserInfo/UserFP.aspx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MAiPU-\\u5b89\\u5168\\u7f51\\u5173\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/webui/images/maipu/login/login_adminbg_a.gif\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AutomatedLogicCorporation-WebCTRL\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/_common/lvl5/about/eula.jsp\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Ajax-CDN\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ajax.aspnetcdn.com/ajax\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ajax.aspnetcdn.com/ajax\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ajax.aspnetcdn.com/ajax\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHPnow\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PHPnow Works!\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"http://phpnow.org/go.php?id=1005\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"YinzCN@Gmail.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"by <a href=\\\\\\\"http://phpnow.org\\\\\\\">PHPnow.org\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-ZXMW-NR8000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NR8000!\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Horos-product\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Horos Web Portal\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NEC-Webpro\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"JavaScript/signal.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Banner.htm\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Baidu-CDN\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"apps.bdimg.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"apps.bdimg.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"libs.baidu.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"libs.baidu.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GL_iNet-Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/cgi-bin/login_cgi?action=checklogin\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TEKNOTEL-CBW700N\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CBW700N \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Olympics - Student Management Information System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5965\\u84dd\\u5b66\\u751f\\u7ba1\\u7406\\u4fe1\\u606f\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"VCode.aspx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-LTE3301\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZyXEL LTE3301\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"epygi-ecQX\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Epygi            <span class=\\\\\\\"product-name\\\\\\\">ecQX\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"epygi-QX20\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Epygi        <span class=\\\\\\\"product-name\\\\\\\">QX20\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Epygi QX20\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"hitron-\\u516c\\u53f8\\u4ea7\\u54c1\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/css/webONO.css\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GuardSite-WatchGuard-AP100\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WatchGuard AP100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHOTON-1GE+Wifi\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"1GE+Wifi\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHOTON-1FE+1GE+Wifi+CATV\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"1FE+1GE+Wifi+CATV\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-VMG3326-D20A\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VMG3326-D20A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-SPID-HTTP-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SPID HTTP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SPID HTTP Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ANECMS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Erwin Aligam - ealigam@gmail.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"log_rotate\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"mod_ log_rotate\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"mod_ log_rotate\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ceragon-router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Web Management\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<FRAME src=\\\\\\\"./responder.fcgi1?\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Intelbras-Roteador-Wireless-N-WRN342-Slim\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Roteador Wireless N WRN342 Slim\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-NE40E\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HUAWEI NE40E\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IX-Series\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IX Series\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: IX Series\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-300Mbps-Wireless-ADSL2+Router\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"300Mbps Wireless ADSL2+ Router</font></span>');\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<img src=\\\\\\\"/images/logobig.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D-Link-DIR-835\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"javascript:check_is_modified('http://support.dlink.com/')\\\\\\\">DIR-835\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a href=\\\\\\\"http://support.dlink.com.tw/\\\\\\\">DIR-835\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FrontPage-Extensions\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FrontPage\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<meta name=\\\\\\\"GENERATOR\\\\\\\" content=\\\\\\\"Microsoft FrontPage \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"FrontPage\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D-Link-DIR-110\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"http://support.dlink.com\\\\\\\" target=\\\\\\\"_blank\\\\\\\">DIR-110\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Nagios-XI\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Nagios XI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Click the link below to get started using Nagios XI.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/nagiosxi/images/favicon.ico\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Asterisk\",\n  \"logic\": \"a||b||c||d||e||f||g||h||i||j||k||l||m||n||o||p\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Asterisk\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"asterisk_rawmanPath\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Asterisk\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: AsteriskCoxo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: AsteriskNow\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: AsteriskPBX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Server: AsteriskPBX18\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Server: AsteriskTZ\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Server: Asterisk_14.3.0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Server: Asterisk_DBC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"Server: Asterisk_Eut\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"Server: Asterisk_Eutv3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"Server: mfasterisk\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"Server: MTTAsterisk\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"Server: mfasterisk\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"Asterisk\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MX850-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap width=\\\\\\\"#\\\\\\\"> Canon MX850 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-PRO-10-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon PRO-10 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MG3500-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MG3500 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MP990-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MP990 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MP640-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MP640 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MG8100-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MG8100 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MG8200-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MG8200 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MX880-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MX880 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MP560-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MP560 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MX340-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MX340 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MX510-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MX510 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MP495-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MP495 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LANCOM-firewall\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"firewall login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a href=\\\\\\\"http://www.lancom-systems.de\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"firewall\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MG5400-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MG5400 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MG3200-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MG3200 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MX410-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MX410 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Canon-MG6200-series\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nowrap>Canon MG6200 series</td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APACHE-Shiro\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"</i> Shiro</li>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"shiro-cas\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"shiro-cas\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"rememberme=deleteMe\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Apache Shiro Quickstart\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Apache-Traffic-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ApacheTrafficServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ApacheTrafficServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Astaro-Security-Gateway\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Astaro Security Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"astaro.lucentglow.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/acc_aggregated_reporting.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-Phone-Adapter-Configuration-Utility\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cisco\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Configuration Utility\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"login.cgi\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Book-Digital Library\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"UReader Digital Library\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"UReader\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"class=\\\\\\\"login-show-title\\\\\\\">DynoMedia Inc.</p>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-NXC2500\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"name=\\\\\\\"model\\\\\\\">NXC2500<\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NXC2500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"NXC2500\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-Aruba-Device\",\n  \"logic\": \"(a|| (b&&c)) &&d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/images/arubalogo.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Copyright\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Aruba Networks\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"ARRIS-Router\",\n  \"logic\": \"((a|| (b&&c) || (d&&e) ||f||g) &&h&&i) ||j\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"ARRIS 2307\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"strhtml='<title>'+i1+'</title>';\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"arris\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Copyright\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"ARRIS Group\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"/arris_style.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"realm=\\\\\\\"ARRIS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Touchstone\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"realm=\\\\\\\"ARRIS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UTT-UTT network equipment\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"utt\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"utt\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BinarySec-Firewall\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-BinarySEC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-BinarySEC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Billion-Router\",\n  \"logic\": \"a|| (b&&c) || (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Billion Sky\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Conexant-EmWeb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Basic realm=\\\\\\\"WebAdmin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Billion Electric Co.,Ltd.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"ADSL Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bentley-Systems-ProjectWise\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"ProjectWise.ico\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ProjectWise Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Bentley.websession=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Bentley.websession=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LevelOne_NVR-0208\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NVR-0208\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NVR-0208\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ACT-Enterprise Side Internet Integrated Management Platform\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4f01\\u4e1a\\u4fa7\\u4e92\\u8054\\u7f51\\u7efc\\u5408\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"url:\\\\\\\"/ucenter/login/loginAction!getTitle.action\\\\\\\",\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<script>location.href=\\\\\\\"ucenter\\\\\\\";</script>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"path=/ucenter/; Secure; HttpOnly\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ipTIME-G204\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images/login_back_g204.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\\\\\\"/images2/login_title.g204.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-G104BE\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images/login_back_g104be.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\\\\\\"/images2/login_title.g104be.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ipTIME-A7NS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.a7ns.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME A7NS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ipTIME-A1004V\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.a1004v.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME A1004V\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BEA-WebLogic-Server\",\n  \"logic\": \"((a||b||c||d||e) &&f&&g&&h&&i) || (j&&k&&l&&m&&n&&o)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<h1>BEA WebLogic Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Weblogic\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"WebLogic Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<h1>Welcome to Weblogic Application\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<h1>BEA WebLogic Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"boa\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"RouterOS\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"X-Generator: Drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Weblogic\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"m\",\n    \"feature\": \" Apache,Tomcat,Jboss\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"<h2>Blog Comments</h2>\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"ipTIME-N704\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n704.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\\\\\\"/images/login_back_n704.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ENCORE_NETWORKS-Company Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EncoreNetworks-Products\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ipTIME-N5-i\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n5i.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME N5-i\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Barracuda-LoadBalancer\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Set-Cookie: BARRACUDA_LB_COOKIE=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Set-Cookie: BARRACUDA_LB_COOKIE=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Barracuda Load Balancer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"bni_persistence=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ipTIME-N704A3\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n704a3.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME N704A3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N6\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n6.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME N6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"bbPress\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<!-- If you like showing off the fact that your server rocks -->\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"is proudly powered by <a href=\\\\\\\"http://bbpress.org\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Axway-SecureTransport\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SecureTransport\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Welcome to SecureTransport\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Axway SecureTransport\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"SecureTransport\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AxCMS\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"AxCMS.net\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Generated by AxCMS.net\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"AxCMS.net\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"AxCMS.net\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Axentra-HipServ\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Axentra\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"x-axentra-version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"x-axentra-version\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM Networks ipTIME N1\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n1.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n1p.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Avaya-IP-Office\",\n  \"logic\": \"(((a&&b&&c) ||d||e) &&f) || (g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: IPOffice/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: boa\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"boa\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"About IP Office\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"action=\\\\\\\"/login/index.php?st=11&lng=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Server: IPOffice/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"301\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N804\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n804.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-A3004NS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.a3004ns.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME A3004NS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Auxilium-PetRatePro\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"index.php?cmd=11\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N3-i\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n3i.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME N3-i\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-A3004NS-Dual\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.a3004nd.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME A3004NS Dual\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-V304\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.v304.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AutoIndex-PHP-Script\",\n  \"logic\": \"a||b||c|| (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"title=\\\\\\\"AutoIndex Default\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Set-Cookie: AutoIndex2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Set-Cookie: AutoIndex2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Powered by\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"autoindex.sourceforge.net/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N604-Black\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n604bl.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME N604 Black\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ATutor-elearning\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"ATutor\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Set-Cookie: ATutorID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Set-Cookie: ATutorID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"ATutor.course\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mikrotik-HttpProxy\",\n  \"logic\": \"(a&&b&&c&&d) || (e&&f&&g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Mikrotik HttpProxy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-Powered-By: ThinkPHP\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: Mikrotik HttpProxy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"X-Powered-By: ThinkPHP\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-A2004\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.a2004.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME A2004\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-IAD voice gateway\",\n  \"logic\": \"(a||b|| (c&&d)) &&e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/image/banner_I532.jpg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/image/I202.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/image/banner_top.jpg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"System Log In\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-A2004NS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.a2004ns.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME A2004NS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-T3008\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.t3008.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME T3008\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N904\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n904.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N1004Q\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/images2/login_title.n104q.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src =\\\\\\\"/images2/login_title.n104q.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"/images2/login_title.n104qi.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EFM-Networks-ipTIME-N704V3\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\\\\\\"/images2/login_title.n704v3.gif\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ipTIME N704V3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dreambox(TV-Reciever)\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"dreambox\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Basic realm=\\\\\\\"dreambox\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Agasio- camera\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/videostream.cgi?loginuse=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Vigil-DVR\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Vigil-DVR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Vigil-DVR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DLink-Internet-Camera\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: D-Link Internet Camera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: D-Link Internet Camera\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"D-Link Internet Camera\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VANGE- Grid\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6280\\u672f\\u652f\\u6301\\uff1a\\u7f51\\u683c\\uff08\\u798f\\u5efa\\uff09\\u667a\\u80fd\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DIGI-TransPort-WR44RR\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TransPort WR44RR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Netis-WF2429T-AP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WF2429T AP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GoAhead-Webs\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GoAhead-Webs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"GoAhead-Webs\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Trendnet-IP-Camera\",\n  \"logic\": \"a||b||c||d|| ((e||f||g) &&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"netcam\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" realm=\\\\\\\"TV-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=TV-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"window.location = \\\\\\\"rdr.cgi\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Basic realm=\\\\\\\"netcam\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \" realm=\\\\\\\"TV-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"realm=TV-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Flussonic-Video Monitoring\",\n  \"logic\": \"a&& (b||c||d||e) &&f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Flussonic\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Location: /admin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"RTSP/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Not found\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"302 Found\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"DIGI-TransPort-WR11\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"heading\\\\\\\">TransPort WR11\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-EMG2926-Q10A\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"modelname\\\\\\\">EMG2926-Q10A<\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"EMG2926-Q10A\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ZyXEL EMG2926-Q10A\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CenturyLink-Actiontec-M1000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \">CenturyLink&reg; Modem Configuration Actiontec M1000<\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DASAN-H150N\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"H150N TR-069 Admin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"H150N TR-069 Admin\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Technicolor companies\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Technicolor\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Technicolor\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Broadband-Router\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Broadband Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Internet Broadband Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Broadband Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"I-O DATA Wireless Broadband Router\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"AxgateSSLVPN\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SSL VPN Client\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"axgate\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bo School Technology - Digital Campus Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var bxnstaticresroot='/bxn-static-resource/resources'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AirLive-WIAS\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"check.shtml\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"wias\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Pantek-Smart Router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"alt=\\\\\\\"\\u6b61\\u8fce\\u4f7f\\u7528\\u667a\\u6167\\u8def\\u7531\\u5668\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-Nexus-Data-Broker\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"j_security_check\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"window.location.href = '/monitor';\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PCM8024\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">PCM8024\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-N2048P\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">N2048P\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PCM6220\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">PCM6220\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BlueNet-Video\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/cgi-bin/client_execute.cgi?tud=0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"BlueNet Video Viewer Version\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-N1148P-ON\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">N1148P-ON\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Dell EMC Networking N1148P-ON\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-PC8024\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">PC8024\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-N1548\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">N1548\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Dell Networking N1548\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"InnoMedia-Session-Border-Controller\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Enterprise Session Border Controller\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"InnoMedia Inc.;\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-N3048P\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_server_default\\\\\\\">N3048P\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Dell Networking N3048P\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Boa-WebServer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Boa\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Boa\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SAMSUNG-Wireless-Enterprise\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<h1>Wireless Enterprise Manager</h1>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOTO_LINK-N150RT\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src =\\\\\\\"/images/login_back_zn150rt.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TOTOLINK N150RT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"TOTOLINK N150RT\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOTO_LINK-A5004NS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src =\\\\\\\"/images2/login_back_za5004s.en.gif\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Moodle\",\n  \"logic\": \"a||b||c||d||e||f||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"title=\\\\\\\"Moodle\\\\\\\" href=\\\\\\\"http://moodle.org/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"moodlesession=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"moodlesession=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"content=\\\\\\\"moodle\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"MOODLEID_\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"MOODLEID_\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"M.str = {\\\\\\\"moodle\\\\\\\":\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-AC53U\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"RT-AC53U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"RT-AC53U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-AC53U\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"YAMAHA-RTX1210\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RTX1210\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP-LINK-Archer-AC3200\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"0.9.1 0.1 v004b.0 Build 160116 Rel.5035n\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-N56U\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"RT-N56U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"RT-N56U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-N56U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"class=\\\\\\\"prod_madelName\\\\\\\" style=\\\\\\\"margin-left:78px;\\\\\\\">RT-N56U\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"var product_name='RT-N56U'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"RT-N56U Wireless Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Citrix-ConfProxy\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: confproxy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: confproxy\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Claroline\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"target=\\\\\\\"_blank\\\\\\\">Claroline</a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"http://www.claroline.net\\\\\\\" rel=\\\\\\\"Copyright\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOTO_LINK-N302R-Plus\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TOTOLINK N302R Plus\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOTO_LINK-N300RB-Plus\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TOTOLINK N300RB-Plus\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Censura\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by: <a href=\\\\\\\"http://www.censura.info\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CA-SiteMinder\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<!-- SiteMinder Encoding\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Caudium companies products\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Caudium\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Got-Fish: Pike\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-Got-Fish: Pike\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"corega-BARFX2\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"CG-BAR FX2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CG-BAR FX2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ADVANTECH-WISE-3610\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/advantech/advantech/css/main.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-Archer-A5\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"if (url.indexOf(\\\\\\\"tplinklogin.net\\\\\\\")\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Archer A5\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-MSR36\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C MSR36\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Polycom-VSX-7000e\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VSX 7000e\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"zoom-ADSL-X5\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/hag/pages/home.htm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/hag/pages/home.htm\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-AC750\",\n  \"logic\": \"(a&&b) ||c||d||e|| (f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"if (url.indexOf(\\\\\\\"tplinklogin.net\\\\\\\")\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"AC750\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"TP-LINK AC750\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"TP-LINK AC750\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"var modeldesc=\\\\\\\"AC750 Wireless Dual Band Router\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"var modelname=\\\\\\\"Archer C20\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"AC750\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanbang Gaoke - Camera\",\n  \"logic\": \"((a||b||c) &&d&&e&&f) || (g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: NVR Webserver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Hanbang Web Service\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"id=\\\\\\\"ID_DOWNLOAD_COOMET\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"rtsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"HB-DVR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Trendmicro-IWSVA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IWSVA\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SMC8024L2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SMC Networks Web Interface\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OpTergy-product\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/css/optergy.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"211 Wellington Road Building C\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Rising-network security warning system\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Virus Early Warning System\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u745e\\u661f\\u7f51\\u7edc\\u5b89\\u5168\\u9884\\u8b66\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"esri-ArcGIS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"esri/discovery/admin.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AhnLab-TrusGuard-SSL-VPN\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TrusGuard SSL VPN Client\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FortiADC\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FortiADC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-FVS318Gv2\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Gigabit 8 Port VPN Firewall FVS318Gv2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FVS318Gv2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AhnLab-MDS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AhnLab MDS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-WRVS5110\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"h3Login\\\\\\\">Small Business Pro\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"WRVS5110\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Check_Point-SSL-Extender\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Check Point SVN foundation\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Check Point SVN foundation\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"TRENDnet-TV-NVR104\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TV-NVR104\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TV-NVR104\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TV-IP310PI\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TV-IP310PI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TV-IP310PI\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Calypso-ION-8r-Device\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Calypso ION-8r Device\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Calypso ION8r Device\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Calypso ION8r Device\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/A/cfg/entercmd.stm\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Campsite\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Campsite\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Camera_life-product\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Camera Life\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"This site is powered by Camera Life\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Carel-Data-Server\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/MPwebCoreFn.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: CarelDataServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: CarelDataServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bobo\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Bobo-Exception-Line\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Bobo-Exception-Line\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TV-IP321PI\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TV-IP321PI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TV-IP321PI\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bulletlink-Newspaper-Template\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/ModalPopup/core-modalpopup.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"powered by bulletlink\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TV-IP430PI\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TV-IP430PI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TV-IP430PI\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ericsson-Televsion\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ericsson Televsion\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ericsson-IPOS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ericsson IPOS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-ZyWALL\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZyWALL \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VER_MAC-Company Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VMS - Signalisation Ver-mac inc\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-\\u65e0\\u7ebf\\u8def\\u7531\\u5668\",\n  \"logic\": \"(((a&&b) || (c&&d) ||e) &&f&&g&&h) || (((i&&j) || (k&&l) || (m&&n)) &&o&&p&&q)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TP-LINK\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"wireless\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: TP-LINK\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"TL-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"javascript:goUrl('http://www.tp-link.com.cn');\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Apache,Tomcat,Jboss\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Server: TP-LINK\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"TL-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"telnet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"TL-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"TP-LINK\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"wireless\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"q\",\n    \"feature\": \"Apache,Tomcat,Jboss\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"TP_LINK-router\",\n  \"logic\": \"(a&&b&&c&&d&&e&&f&&g) || (h&&i&&j&&k&&l&&m)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TP-LINK\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"wireless\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"vpn\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"camera\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"TP-LINK\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"wireless\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"vpn\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"camera\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Fortinet-CoyotePoint-Load-Balancer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: CoyotePoint\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: CoyotePoint\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cPassMan\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Collaborative Passwords Manager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"zepto.JS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"zepto.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"zepto.min.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Comanche\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Comanche\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Comanche\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CommuniGate-Pro\",\n  \"logic\": \"a||b|| (c&&d) ||e||f||g||h\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: CommuniGatePro\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: CommuniGatePro\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"CommuniGate pro\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"-ERR access from your network is temporarily disabled\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"communigate pro\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"href=\\\\\\\"http://www.communigate.com/\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"-ERR access from your network is denied\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ATLASSIAN-Confluence\",\n  \"logic\": \"(a&&b) || (c&&d) || (e&&f) ||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Confluence-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TP-LINK Router UPnP\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-Confluence-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"TP-LINK Router UPnP\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"name=\\\\\\\"confluence-base-url\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"id=\\\\\\\"com-atlassian-confluence\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Atlassian Confluence\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"uniview-IPC-B312-IR\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IPC-B312-IR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DH-NVR2216\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NVR2216\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cybozu-Garoon\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Cybozu-WS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Cybozu-WS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u5927\\u534e-DH-NVR4432\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NVR4432\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CUPS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: CUPS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: CUPS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DH-NVR2108HS\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"x00id=DH-NVR2108HS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"id=DHI-NVR2108HS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"id=DHI-NVR2108HS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"id=DH-NVR2108HS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"id=DH-NVR2108HS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-DH-SD2304\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SD2304\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SD2304\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TOSHIBA-Canvio\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Welcome to SilverStore 2-Drive NAS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-M600V\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"alt=\\\\\\\"Cisco M600V\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco Content Security Management Virtual Appliance M600V\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-M690\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"alt=\\\\\\\"Cisco M690\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco Content Security Management Appliance M690\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SANGFOR-S5100\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"ver_title\\\\\\\">S5100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u524d\\u666f\\u4e92\\u8054-\\u7ba1\\u7406\\u7cfb\\u7edf\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/Content/Web/theme/skin01/img/p_login_logo01.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZKTECO-Time Fine Management Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"m-btn  zkgreen rnd\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"China Mobile Railcom-Yu Routing\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"img/by_web.png\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-VRP5.0\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HUAWEI-VRP5.0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-RT-AC68P\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RT-AC68P\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"RT-AC68P\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<div class=\\\\\\\"prod_madelName\\\\\\\">RT-AC68P\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RAISECOM-ISCOM-S5600\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"color=\\\\\\\"#000000\\\\\\\">ISCOM S5600\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RAISECOM-ISCOM3024GF\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"color=\\\\\\\"#000000\\\\\\\">ISCOM3024GF\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Avaya-ERS-8610\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ERS-8610\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Avaya-ERS-8606\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ERS-8606\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZEBRA-170Xi4-300dpi-ZPL\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZTC 170Xi4-300dpi ZPL</H1>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DynaWeb-httpd\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: dwhttpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: dwhttpd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZEBRA-TLP-2824-Plus\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZTC TLP 2824 Plus</H1>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dotclear\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://dotclear.org/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZEBRA-GK420t\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZTC GK420t</H1>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DoceboLMS\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by Docebo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"docebo_session=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"docebo_session=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"uniview-ezStation\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<h1>Welcome to ezStation VC Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ezStation\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DESHANG-DSMALL\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/static/plugins/js/dialog/dialog.js\\\\\\\" id=\\\\\\\"dialog_js\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-CR16008\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C CR16008\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"H3C CR16008-X\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Diaspora\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"_diaspora_session\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"x-git-update\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"x-git-revision\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"_diaspora_session\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"x-git-update\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"x-git-revision\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DeluxeBB\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"powered by DeluxeBB\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Deluge-web\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Deluge: Web UI\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SangFor - Next Generation Firewall Data Center\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.open(\\\\\\\"/LogInOut.php\\\\\\\", \\\\\\\"_top\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FAST-router\",\n  \"logic\": \"(a&&b) || (c&&d) ||e|| (f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FAST \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"FAST \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"FAST \\u65e0\\u7ebf\\u8def\\u7531\\u5668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"<a href=\\\\\\\"http://www.fastcom.com.cn\\\\\\\"><img src=\\\\\\\"../img/login/logo.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"DLink-DI-804HV\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"DI-804HV\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DI-804HV\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TEW-828DRU\",\n  \"logic\": \"(a&&b) ||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TEW-828DRU\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var wanport\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Capture(status_router.sys_model)</script></div>Trendnet TEW828DRU\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"tew-828dru\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"tew-828dru\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TEW-820AP\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TEW-820AP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<script>lang_obj.write(\\\\\\\"product_description\\\\\\\")\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"eFront\",\n  \"logic\": \"((a||b) &&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href = \\\\\\\"http://www.efrontlearning.net\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: eFront\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: eFront\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-SR6602\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C SR6602\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SR6602\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ThinkCMF\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"ThinkCMF\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Powered-By: ThinkCMF\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-Powered-By: ThinkCMF\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Made by <a href=\\\\\\\"http://www.thinkcmf.com\\\\\\\" target=\\\\\\\"_blank\\\\\\\">ThinkCMF</a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kerio-MailServer\",\n  \"logic\": \"a|| (b&&c&&d) ||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Kerio MailServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Kerio MailServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-Generator: Drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"boa\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Kerio MailServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Kerio Mail Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TEW-730APO\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login to the TEW-730APO\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"reolink-Cloud\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Reolink Cloud\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Reolink Cloud\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie-SSLVPN\",\n  \"logic\": \"a|| (b&&c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"document.cookie = \\\\\\\"rjsslvpn_encookie=yes;\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SVPNNETWORKCOOKIE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"path=/remote/network\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Ruijie\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-PMG2005-T20B\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PMG2005-T20B\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"xPON ONU</font>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"PMG2005-T20B\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KT_telecop-Digital-Video\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"https://itunes.apple.com/us/app/ismart-viewer/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u540c\\u8fc5\\u79d1\\u6280-\\u795e\\u884c\\u8005\\u8def\\u7531\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u795e\\u884c\\u8005\\u8def\\u7531\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EnGenius-wifi\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"style=\\\\\\\"background: url(/pictures/img_bg_horizon.png) repeat-x\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"And Jia Software-OA Collaborative Office System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/templates/everythingisok/index.css\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fang Tian Software -B9ERP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"name=\\\\\\\"DBNameDdl\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Daydao-Property Management Cloud Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"$(document).attr(\\\\\\\"title\\\\\\\",\\\\\\\"\\u6211\\u88ab\\u4fee\\u6539\\u5566.\\u54c8\\u54c8\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Neo-Services\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Neo Services\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Neo Services\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zhongke Shuguang - Longxin Firewall\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"login_main_text\\\\\\\">\\u66d9\\u5149\\u9f99\\u82af\\u9632\\u706b\\u5899</div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Home-Control-Box\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"hcb_web\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"hcb_web\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-OmniVista-8770-NMS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Alcatel-Lucent OmniVista 8770 NMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ABUS-TVIP21501\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TVIP21501\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TVIP21501\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ABUS-TVIP10051\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"TVIP10051\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"TVIP10051\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR1100LPE\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cplogin.model = \\\\\\\"IBR1100LPE\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Login :: IBR1100LPE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Cradlepoint IBR1100LPE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-DG834\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR DG834  \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NETGEAR DG834 ADSL Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR DG834  \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-MBR1200B\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: MBR1200B\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MBR1200B\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NAVER-MW-5155AP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"MW-5155AP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MW-5155AP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NAVER-MW-2100R\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"MW-2100R\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"MW-2100R\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-CBA750B\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: CBA750B\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR1150LPE\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: IBR1150LPE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IBR1150LPE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"National standard SIP platform gateway\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SipPuAccessServerCtx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<h5><a href=\\\\\\\"config.htm?file=config.htm\\\\\\\">start page</a></h5>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR1100LP6\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: IBR1100LP6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-IBR600\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: IBR600\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IBR600\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"cradlepoint-MBR1400\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login :: MBR1400\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MBR1400\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-OS6560-P48X4\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span>Device OS6560-P48X4\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Num 4da - Talent Evaluation System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"blackfont\\\\\\\">\\u8bfa\\u59c6\\u56db\\u8fbe\\u4eba\\u529b\\u8d44\\u6e90\\u6d4b\\u8bc4\\u54a8\\u8be2\\u670d\\u52a1\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-R8000P\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR R8000P\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NETGEAR R8000P\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"R8000P\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OpenGONGOSS-WLAN Unified Network Management System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/stylesheets/themes/wifi2/ui.theme.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"WLAN\\u7efc\\u5408\\u7f51\\u7ba1\\u7cfb\\u7edf\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huazhi Biology-Breeding Management System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/resources/metronic/scripts/hz-tools.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<h4>\\u8bf7\\u5728\\u4e0b\\u6846\\u91cc\\u753b\\u56fe\\u5f62\\u6765\\u63d0\\u4ea4\\u767b\\u5f55\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LINKSYS-WRT54G2\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WRT54G2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"WRT54G2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Linksys WRT54G2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ICBC-work and silver aggressive platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var s3_app_address=\\\\\\\"https://gyj.icbc.com.cn\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huadian Qiyuan - Customer Relationship Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"hidden-xs ewHeaderRow\\\\\\\"><img src=\\\\\\\"aspximages/htqy.png\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kedacom-streaming media server\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/grid/PropsGrid.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"js/ext/adapter/ext/ext-base.js\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-CG3300\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"CG3300CMR-1CEIFS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"CG3300CMR-1CEIFS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"POSUN- fast sale\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/view/static/js/eidpCommon.min.js\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<p>\\u5feb\\u6613\\u9500\\u516c\\u4f17\\u53f7</p>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SAS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"SAS University Edition\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"SAS University Edition\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SERCOMM-CPE\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"SERCOMM CPE Authentication\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"SERCOMM CPE Authentication\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ICOM-Router\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Icom HTTP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Icom HTTP Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APACHE-Solr\",\n  \"logic\": \"a||b||c|| (d&&e&&f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Solr Admin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SolrCore Initialization Failures\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"app_config.solr_path\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/solr/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Location\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"XOOPS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"include/xoops.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Imageview\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Imageview\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"By Jorge Schrauwen\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"http://www.blackdot.be\\\\\\\" title=\\\\\\\"Blackdot.be\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Intrinsyc-deviceWEB\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Intrinsyc deviceWEB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Intrinsyc deviceWEB\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Intoto-Router\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Intoto Http Server \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Intoto Http Server \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Intellinet-IP-Camera\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Copyright &copy;  INTELLINET NETWORK SOLUTIONS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"http://www.intellinet-network.com/driver/NetCam.exe\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Internet-Cluster-Manager\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Internet Cluster Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Internet Cluster Manager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Vicon-video surveillance\",\n  \"logic\": \"a||b||c||d|| (e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IQEYE: Live Images\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Brian Lau, IQinVision\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"loc = \\\\\\\"iqeyevid.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: IQinVision Embedded\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"IQinVision \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Version\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cyrus-\\u90ae\\u4ef6\\u7cfb\\u7edf\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cyrus IMAP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cyrus POP3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Cyrus IMAP4\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Cyrus timsieved\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Cyrus ready.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Trend-IWSS-Proxy\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Proxy-Agent: IWSS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Proxy-Agent: IWSS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JXT-Consulting\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"jxt-popup-wrapper\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered by JXT Consulting\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kampyle companies\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"http://cf.kampyle.com/k_button.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Start Kampyle Feedback Form Button\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Kayako-SupportSuite\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered By Kayako eSupport\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Help Desk Software By Kayako eSupport\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Spring-Security\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Spring Security Application\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Spring Security Application\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zend-Framework\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Zend Framework\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"zend=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Zend Framework\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"zend=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tenda-4G-Router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"3G/4G Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"id=\\\\\\\"tendaimg\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Invision-PowerBoard\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered by <a href=\\\\\\\"http://www.invisionboard.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Powered By <a href='http://www.invisionboard.com'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TENDA-Radio repeater\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"img/logo-inverse.png\\\\\\\" alt=\\\\\\\"Tenda LOGO\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Repeater\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-OP-EONU-92001Z\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OP-EONU 92001Z</font></div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZTE-D401\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"D401</font></div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Flying Sight - Video Conference System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"subNav\\\\\\\">\\u98de\\u89c6\\u7f8e</div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NEO-HomeAP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NEO-HomeAP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NIS-HAP11N\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UltraPower-identity and security control system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<li><p>\\u6b22\\u8fce\\u8fdb\\u5165\\u8eab\\u4efd\\u4e0e\\u5b89\\u5168\\u7ba1\\u63a7\\u7cfb\\u7edf</p></li>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Saint Bo Run -lansecs second generation firewall\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"LanSecS\\u7b2c\\u4e8c\\u4ee3\\u9632\\u706b\\u5899\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huayong-iPcamera\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"#/alarm\\\\\\\">{{'alarm' | translate | uppercase}}</a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cloud Wisdom - DODP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/public/vendor/monaco/vs/loader.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ADT-access control and unified authentication\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Tpn,Vpn,\\u5185\\u7f51\\u5b89\\u5168,\\u5185\\u7f51\\u63a7\\u5236,\\u4e3b\\u673a\\u9632\\u62a4\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PMWAY-E4\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u98ce<span style=\\\\\\\"padding-left: 12px;\\\\\\\"></span>\\u683c\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u70ed\\u60c5\\u4f3c\\u706b</option>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Eman - Made Manyongyouacturing Execution System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span i18n=\\\\\\\"1\\\\\\\">\\u76ca\\u6a21\\u6a21\\u5177\\u667a\\u80fd\\u5236\\u9020\\u7cfb\\u7edf</span>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-OS6860E-24\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span>Device OS6860E-24\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-OS6860U-28\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span>Device OS6860U-28\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZOHO-ManageEngine-Desktop\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ManageEngine Desktop\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-OS6860-P48\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span>Device OS6860-P48\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-OS6900-X72\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span>Device OS6900-X72\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-OS6560-P24X4\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span>Device OS6560-P24X4\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Alcatel_Lucent-OS6860-24\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span>Device OS6860-24\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IQinVision-IQA10S\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IQA10S\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NSFOCUS-RSAS\",\n  \"logic\": \"a||b||c|| (d&&e) || (f&&g) ||h||i||j\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/login_logo_rsas_zh_CN.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NSFOCUS RSAS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Aurora\\u767b\\u5f55\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"NSFOCUS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"aurorasessid=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"NSFOCUS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"aurorasessid=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Server: NSFOUCS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Server: NSFOUCS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"NSFOCUS RSAS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SONY-SNC-EP580\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Sony Network Camera SNC-EP580\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Sony Network Camera SNC-EP580\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SHARP-XG-C430X\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"XG-C430X\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"XG-C430X\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"SHARP XG-C430X\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SONY-PCS-1600\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"PCS-1600 Web Control\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Basic realm=\\\\\\\"PCS-1600 Web Control\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IntelBras-video surveillance\",\n  \"logic\": \"((a||b||c||d||e||f||g||h) &&i) || ((j||k||l) &&m&&n)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"html/playbackindex.htm\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"./webVersion.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"html/playbackindex.htm\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"class=\\\\\\\"login-input-item login-type-display\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"onclick=\\\\\\\"ocx.ShowPlayBack()\\\\\\\">\\u56de\\u653e\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"id=\\\\\\\"b_playback\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"class=\\\\\\\"main-nav-item\\\\\\\">\\u56de\\u653e\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"function startPlayAll()\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Intelbras\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"interbras_cloud\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"interbras_font\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"intelbras\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"dhvideowhmode\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"platformHtm\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BenQ-W2000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"w2000 Microsoft FTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MyFAX-Company Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/cgi-bin/ed3.cgi\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETDOIT\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"POWER BY NETDOIT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"align=\\\\\\\"center\\\\\\\"><a href=\\\\\\\"http://www.net-doit.com\\\\\\\" target=\\\\\\\"_blank\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NSFOCUS-Fortress\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/login_logo_sas_h_zh_CN.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Convision-Video\",\n  \"logic\": \"a||b|| (c&&d) ||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Convision Video Webserver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Vistabox\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Vistabox\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Convision Video Webserver\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"New Cape-Zhenggong Accessible System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"\\u6b63\\u666e\\u95e8\\u7981\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"\\u6b63\\u666e\\u95e8\\u7981\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Viewing - Video Conference\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"ctl00_TopControl1_lblSiteDescription\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RuvarHRM\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RuvarHRM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/RuvarHRM/web_login/login.aspx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"phpecms\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u51e1\\u8bfa\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"www.pcfinal.cn\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/plus/laydate/laydate.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huawei-USG firewall\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"UI_component/css/xtheme-black.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"NSFOCUS-NTA\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NSFOCUS NTA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"action=\\\\\\\"/auth/enforce\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-WebEx\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"alt=\\\\\\\"Cisco WebEx Meetings Server\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cisco Webex\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MAIPU-network switch\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Maipu Communication\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u7f51\\u7edc\\u4ea4\\u6362\\u673a\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Jiubo Shares - Network Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/cgibin?pageid=92\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Highfive\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Highfive_device_hand\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HCL-sametime\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/chat/sametime192X192.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"loopup-Meeting\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"LoopUp\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Machine:\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JUNIPer-EX4500\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"jweb-title uppercase\\\\\\\"> - ex4500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"EX4500\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SonicWALL-NSA-2600\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SonicWALL NSA 2600\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SOPHOS-Cyberoam-CR25iNG\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CR25iNG\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SOPHOS-Cyberoam-CR100iNG\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CR100iNG\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yealink-VC400\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"span id=\\\\\\\"devtype\\\\\\\">VC400\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MOTOROLA-\\u516c\\u53f8\\u4ea7\\u54c1\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Motorola\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Motorola\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-Unified-IP-Phone\",\n  \"logic\": \"((a&&b) || (c&&d)) &&e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco Unified IP Phone\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"device.statistics.configuration\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/CGI/Java/Serviceability?adapter=device.statistics.device\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Cisco Unified IP Phone\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"LG-55UM7800BNA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelNumber>55UM7800BNA</modelNumber>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Intel-Router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Intel Corporation\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u7f51\\u5fa1\\u661f\\u4e91-SSL-VPN\",\n  \"logic\": \"a||b||c||d|| (e&&f) || (g&&h) ||i\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6b22\\u8fce\\u4f7f\\u7528LeadSec\\u7f51\\u5fa1SSL VPN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/SSL/down/UsbKey.exe\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"content=\\\\\\\"SSL,VPN,SSLVPN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/SSL/down/images_pc/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: XDaemon v1.0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Server: XDaemon v1.0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"PasswordUserLogin\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-55UK6300PLB\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelNumber>55UK6300PLB</modelNumber>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SMC-network module\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SMC Networks; SW_REV: \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"model: \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASUS-Modem\",\n  \"logic\": \"a||b||c||d||e||f||g||h\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"AAM6000EV\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"AAM6010EV\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"AAM6020BI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"AAM6020VI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"realm=\\\\\\\"AAM6000EV\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"realm=\\\\\\\"AAM6010EV\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"realm=\\\\\\\"AAM6020BI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"realm=\\\\\\\"AAM6020VI\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-50UM7800ENA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelNumber>50UM7800ENA</modelNumber>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-OLED55C8PLA\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelName>OLED55C8PLA</modelName>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-43UM7100PLB\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<modelNumber>43UM7100PLB</modelNumber>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ambit-Wireless-Modem\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ambit Wireless CableModem\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Vecima-TC600\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TC600\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" Vecima Networks\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hanwha-XRN-2011\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"$.nvr.model_name=\\\\\\\"XRN-2011\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fujitsu-NetShelter-VPN\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Welcome to NetShelter\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: NetShelter\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: NetShelter\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"noVNC\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"noVNC-control-bar\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"noVNC example: simple\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<!--noVNC Buttons-->\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"noVNC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DCN-S4600-28P-SI\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<B>S4600-28P-SI</B>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TP_LINK-TL-WR1043ND\",\n  \"logic\": \"a|| (b&&c) ||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TP-Link TL-WR1043ND\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"TP-Link TL-WR1043ND\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"TL-WR1043ND\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"TP-Link TL-WR1043ND\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WS-server\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WebSocket servers index.html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huawei - glory box\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"modelName>VihomeMediaServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WIND-River\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Rapid Logic\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Logon\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"teradata-Parallel\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var currentmode ='fitToWindowOnLoad\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PowerMTA\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"PowerMTA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HTTP/1.0 403\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<html><body>Access denied.  Please consult the http-access directive in the User's Guide for more information.</body>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"PowerMTA(TM)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Date Group-CH3000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Aurora Networks CH3000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Xbrother-Annem Monitoring System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"if (!getCookie(\\\\\\\"X_GU_SID\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Thinker-intelligent gateway system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u667a\\u80fd\\u7f51\\u5173\\u7cfb\\u7edf<BR>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PROLiNK-Router\",\n  \"logic\": \"(a&&b&&c&&d) ||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<! Copyright (c) Realtek Semiconductor Corp.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MMC Technology MW\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"TW-EAV510\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"MAX-C300N\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<FRAME src=\\\\\\\"attention.htm\\\\\\\" name=\\\\\\\"attention\\\\\\\" frameborder=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"RFwell ADSL Router Status\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Profense-Firewall\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"plbsid=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Profense\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"plbsid=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Profense\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Qcodo-Development-Framework\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Zend Engine Version:</b>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<b>Qcodo Version:\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PowerDNS\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Basic realm=\\\\\\\"PowerDNS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"dns\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"PowerDNS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PRTG-Network-Monitor\",\n  \"logic\": \"((a||b||c) &&d&&e) || (f&&g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PRTG Network Monitor\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: PRTG\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"/css/prtgmini.css?prtgversion=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: PRTG\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"ProScan\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: ProScan\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: ProScan\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Vertiv - Dimensional Power and Environmental Monitoring System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var port = \\\\\\\"9528\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tisson-Hyperamover Monitoring Operation Quality Analysis System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DLQAweb_deploy/WebResource.axd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"You Shikang - gateway\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"IpxWeb/login.html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TTLiNK-TT-168L\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \">TT-168L</a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WEONLYDO-product\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: WeOnlyDo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: WeOnlyDo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"WeOnlyDo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Yeastar-S50\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Yeastar S50\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Titan-FTP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Titan FTP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Titan FTP Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RaidenHTTPD\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: RaidenHTTPD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: RaidenHTTPD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"QuiXplorer\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"QuiXplorer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"http://quixplorer.sourceforge.net\\\\\\\" target=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"target=\\\\\\\"_blank\\\\\\\">the QuiX project</A></SMALL>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-CAS\",\n  \"logic\": \"a|| (b&&c) || (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C CAS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"cas.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"cas\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<iframe src=\\\\\\\"javascript:''\\\\\\\" id=\\\\\\\"__gwt_historyFrame\\\\\\\" tabindex='-1' style=\\\\\\\"position:absolute;width:0;height:0;border:0\\\\\\\"></iframe>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"cas\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Bocom-VStor\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VStor \\u767b\\u5f55\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"bocom_titile_font\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"images/bocom.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \".bocom_titile_font{\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruis Technology - Company Products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u8fbd\\u5b81\\u745e\\u601d\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8&nbsp;&nbsp;&nbsp;&nbsp;\\u7248\\u6743\\u6240\\u6709\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AXIMCom-Product\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AXIMCom Product\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href='style/AXIM/table.css'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RackCorp-CDN\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: rackcorpcdn\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: rackcorpcdn\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Broadcom-BFC-CableModem\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"BFC cablemodem\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"VENDOR: Broadcom\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ARRIS-Cadant-C3-CMTS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cadant C3 CMTS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Juniper-BTI-7000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BTI Systems.;BTI 7000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Broadband-Home-Gateway\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Broadband Home Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RE3500-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RE3500 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RE3550-V2-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RE3550-V2 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Windows-Server-2003\",\n  \"logic\": \"((a|| (b&&c)) &&d&&e) || ((f||g||h|| (i&&j)) &&k&&l&&m)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Windows Server 2003\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/Service Pack\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"5.2.3790\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Windows Version 5.2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Windows Server 2003 \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Windows 2003\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"/Service Pack\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"5.2.3790\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"VMware-Horizon\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VMware Horizon\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href='https://www.vmware.com/go/viewclients'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"alt=\\\\\\\"VMware Horizon\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RN1200D-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RN1200D series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-n9000\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco NX-OS(tm) n9000\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"netcore-NR285P\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETCORE NR285P\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NETCORE NR285P\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"netcore-NR238\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETCORE NR238\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NETCORE NR238\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TopOffice\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TopOffice\\u534f\\u540c\\u529e\\u516c\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RN6000-V2-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RN6000-V2 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RN8600T-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RN8600T series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-RN9800T-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET RN9800T series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-TelePresence-MCU-4510\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cisco TelePresence MCU 4510\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-Flex-System-EN2092\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IBM Flex System EN2092\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"National Electronic Safety Document Management System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"</span>\\u56fd\\u8fc8\\u5b89\\u5168\\u79c1\\u6709\\u4e91\\u90e8. <span>All Rights Reserved\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u56fd\\u8fc8\\u5b89\\u5168\\u79c1\\u6709\\u4e91\\u90e8 All Rights Reserved\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-SR120-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET SR120 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-SR200-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET SR200 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-SecPath-\\u8fd0\\u7ef4\\u5ba1\\u8ba1\\u7cfb\\u7edf\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C SecPath \\u8fd0\\u7ef4\\u5ba1\\u8ba1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<span>H3C SecPath \\u8fd0\\u7ef4\\u5ba1\\u8ba1\\u7cfb\\u7edf</span></div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"China Telecom - Tianyi Broadband Government Network\",\n  \"logic\": \"(a&&b)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"loid_regist()\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"venustech-Tianqing WAG\",\n  \"logic\": \"a||b|| (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5929\\u6e05WAG\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Venusense WAF\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"vwphpsessid=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u7f51\\u5fa1WAF\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"TG-THR1000G-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET THR1000G series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-THR120G-V2-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET THR120G-V2 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-THR500G-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET THR500G series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-THR500G+-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET THR500G+ series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-THR50EW+-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET THR50EW+ series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Digi-ConnectPort-X4\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ConnectPort X4\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-THR80E-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET THR80E series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TG-WR100-series-router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TG-NET WR100 series router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MikroTik-\\u516c\\u53f8\\u4ea7\\u54c1\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"mikrotik\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-3Com-SuperStack\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"3Com SuperStack\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"apilayer-Caddy\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Caddy\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Caddy\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Actiontec-MI424WR\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"</div> Actiontec MI424WR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"jabberd\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: jabberd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: jabberd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ShareTech-NU-860H\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NU-860H\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ShareTech Information Co., LTD\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FutureSystems-WeGuardia-SSLplus\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"TSGSSL\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"sslplus\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-USG6306\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Huawei USG6306\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Huawei USG6306\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LINKSYS-E900\",\n  \"logic\": \"a||b||c||d||e|| (f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Linksys E900\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"LinksysE900\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Linksys_E900\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Linksys E900\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Linksys E900\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"var mmc = {\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Linksys E900\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LINKSYS-BEFSR41\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Linksys BEFSR41\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Linksys BEFSR41\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-USG6350\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Huawei USG6350\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Huawei USG6350\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-WNR1000v3\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR WNR1000v3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NETGEAR Router WNR1000v3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR WNR1000v3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-WNHD3004v2\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NetGear WNHD3004v2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NetGear WNHD3004v2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Conversant-SwiftCDN\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SwiftCDN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie-RGOS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: RGOS HTTP-Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: RGOS HTTP-Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-WGR614v9\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR WGR614v9\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR WGR614v9\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mocana companies products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"-Mocana SSH\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-JNR3210\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR JNR3210\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR JNR3210\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-JNR1010v2\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR JNR1010v2\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR JNR1010v2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UniView-multimedia platform\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Zhejiang Uniview Technologies Co.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Uniview MultiMedia Plat\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-EVG1500\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Netgear EVG1500\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Netgear EVG1500\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-ASA-5520\",\n  \"logic\": \"a&& (b||c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ASA5520\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SSL VPN Service\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Cisco ASDM 7.6(1)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-DG834PN\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR DG834PN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR DG834PN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-D6220\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR D6220\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR D6220\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Intel-IXDP425\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"IXDP425 Demo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Intel(R)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-D6400\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR D6400\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"D6400\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Organization: NETGEAR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-R6900\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"NETGEAR R6900\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"NETGEAR Router R6900\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Memotec-CX-U1280\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CX-U1280 RAN Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"netentsec Technology - Network Acceleration Equipment\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7f51\\u5eb7\\u5e7f\\u57df\\u7f51\\u52a0\\u901f\\u7f51\\u5173\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-Broadband-Access-Center\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Cisco_CCSP_CWMP_TCPCR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Cisco_CCSP_CWMP_TCPCR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AirLink-WL-2600CAM\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"WL-2600CAM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"WL-2600CAM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"3D people integrated data doors\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6b22\\u8fce\\u4f7f\\u7528\\u4e09\\u7ef4\\u4eba\\u50cf\\u7efc\\u5408\\u6570\\u636e\\u95e8!\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<body onload=\\\\\\\"checkExplorer('/page/login_new')\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tongyang Technology - Environmental Monitoring System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/Content/tongyang-login.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZXTD-management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"action=\\\\\\\"whichLogin.jsp\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Wisedu- Smart Campus Platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"portal/js/plugins/changeSkin.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u524d\\u7aef\\u914d\\u7f6e\\u6587\\u4ef6\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"legendsec - data automatic import system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"document.myform.btn_login.disabled = true;\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HikVision - Video Cloud\",\n  \"logic\": \"a||b|| (c&&d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: FACE-Webs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: FACE-Webs\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"placeholder=\\\\\\\"{{oLan.password}}\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"oCheckUser.szPassWd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/ui/css/style.css\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"CCTV-Cameras\",\n  \"logic\": \"a&&b&&c&&d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"style=\\\\\\\"font-size:24px;float:left;\\\\\\\">Network video client\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Partizan Web Surveillance\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"thttpd/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"esee\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Synchronet-BBS\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Synchronet BBS \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Synchronet BBS \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Spiceworks-product\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<meta name=\\\\\\\"author\\\\\\\" content=\\\\\\\"Spiceworks, Inc.\\\\\\\" />\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<link href=\\\\\\\"/stylesheets/general.css?\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<h1><img alt=\\\\\\\"Spiceworks\\\\\\\" src=\\\\\\\"/images/logos/large.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Set-Cookie: spiceworks_session=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Set-Cookie: spiceworks_session=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EMC-RecoverPoint\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RecoverPoint Management Application\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"RecoverPoint Management Application\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"scripts/services/wizardDataSharingService.js\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-dhi-HCVR4104C-S2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DHI-HCVR4104C-S2\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SMC-Cable-Gateway\",\n  \"logic\": \"(a||b||c) &&d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DOCSIS1.1/DOCSIS2.0 Cable Residential Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DOCSIS1.1/DOCSIS2.0/DOCSIS3.0 Cable Residential Commercial Router\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"DOCSIS3.0 Cable Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"SMC Networks\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Secure-SnapGear\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SnapGear Management Console\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"td class=\\\\\\\"menu\\\\\\\"><div class=\\\\\\\"logo\\\\\\\"><a href=\\\\\\\"/cgi-bin/cgix/default\\\\\\\"><img class=\\\\\\\"logo\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Simbix-Framework\",\n  \"logic\": \"((a||b||c||d) &&e) ||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Powered-By: Simbix Framework\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Simbix Framework \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"logo-lpage-owner.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<div class=\\\\\\\"image\\\\\\\"><img src=\\\\\\\"/logo-lpage.png\\\\\\\" width=\\\\\\\"40\\\\\\\" height=\\\\\\\"40\\\\\\\" alt=\\\\\\\"Simbix Framework\\\\\\\" /></div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"X-Powered-By: Simbix Framework\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hirschmann-Security-Device\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Hirschmann EAGLE Security Device\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hirschmann-MACH\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Hirschmann MACH\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Hirschmann MACH100\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SilverStripe\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"framework/javascript/HtmlEditorField.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"SilverStripe\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Set-Cookie: PastVisitor\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Set-Cookie: PastVisitor\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"siteGENIUS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var portalbrowser = window.open('popup.php?page_type='+page_type+'&lang=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SitePlayer\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: SitePlayer Telnet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: SitePlayer Telnet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"SitePlayer Telnet Configuration\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"realm=\\\\\\\"SitePlayer Telnet Configuration\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sitecom-NAS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"SITECOM LOGIN Enter Password (default is sitecom)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"SITECOM LOGIN Enter Password (default is sitecom)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-IAD\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Huawei TERMINAL Multi-service\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-VCT\",\n  \"logic\": \"((a||b|| (c&&d) ||e) &&f) ||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"vct inner web\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"system/ressrv/zh-CN.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Huawei Inner Web\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<frame name=\\\\\\\"hidden_frame\\\\\\\" id=\\\\\\\"hidden_frame\\\\\\\" src=\\\\\\\"hidden_frame.html\\\\\\\" noresize=\\\\\\\"noresize\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"TSP_HTTP_SERVER/2.1.3 VCT WEB\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"TSP_HTTP_SERVER/2.1.3 VCT WEB 1.0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Percona-XtraDB-Cluster\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Percona XtraDB Cluster node\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<a\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"HuaWei-VSP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Huawei Storage & Network Security Versatile Security Platform\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-S5328C-EI\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"S5328C-EI\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Cisco-HMS-DOCSIS-Transponder\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HMS DOCSIS Transponder\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hitachi-Wireless-Access-Point\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Hitachi Cable Wireless Access Point\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hitachi-Ethernet-Switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Hitachi Cable Ethernet Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hitachi-DF600F\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HITACHI  DF600F\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Hirschmann-Railswitch\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Hirschmann Railswitch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Hirschmann Rail Switch Power\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SIMSWeb\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<form onsubmit=\\\\\\\"sendinfo(); return false;\\\\\\\" name=\\\\\\\"LOGON\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"src=\\\\\\\"/SIMSWeb/monitor.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"SIMSWeb Loading.....\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"index.html\\\\\\\"><font color=\\\\\\\"black\\\\\\\" face=\\\\\\\"arial\\\\\\\">Loading SIMSWeb, please wait.....</font></a></h2>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SonicWALL-SSL-VPN\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f&&g) ||h||i||j\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: SonicWALL SSL-VPN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"SonicWALL SSL-VPN \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"javascript/aventail.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"SonicWall SSL VPN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"SonicWall - SSL VPN\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SONY-Projector\",\n  \"logic\": \"a||b|| ((c||d) &&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Projector\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Projector\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<BODY onload=\\\\\\\"setWindowTitle();showIndex();\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<script type=\\\\\\\"text/javascript\\\\\\\" src=\\\\\\\"sonylogoJS.js\\\\\\\"></script>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"SONY-Video-Network-Station\",\n  \"logic\": \"((a||b) &&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<TITLE>SONY SNT-V304 Video Network Station</TITLE>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SONY Video Network Station\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"SourceBans\",\n  \"logic\": \"a ||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div id=\\\\\\\"footqversion\\\\\\\">Version(\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"http://www.sourcebans.net\\\\\\\" target=\\\\\\\"_blank\\\\\\\"><img src=\\\\\\\"images/sb.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SimpleTech-SimpleShare-NAS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"SimpleShare (default user name is admin and password is simple\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"SimpleShare (default user name is admin and password is simple\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SoftPLC-Controller\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"syswww\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SoftPLC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"syswww\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"SoftPLC\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Softbiz-Online-Auctions-Script\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Powered By <a href=\\\\\\\"http://www.softbizscripts.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SmugMug-\\u516c\\u53f8\\u4ea7\\u54c1\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Powered-By: SmugMug\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Smugmug-Values\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-Powered-By: SmugMug\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"X-Smugmug-Values\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SnomPhone\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"http://snom.com\\\\\\\">snom AG</a><br>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<tr><td class=\\\\\\\"flyoutLink\\\\\\\" colspan=\\\\\\\"2\\\\\\\"><b><a href=http://\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"You can enter a simple telephone number (e.g. 0114930398330) or URI like info@snom.com.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Snap-Appliance-Server\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Snap Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Snap Appliance\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Snap Appliance\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Quantum Corporation\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: Quantum Corporation\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SMART-SOFT-VCard-Server\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: SMART-SOFT VCard HTTP/SSL server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: SMART-SOFT VCard HTTP/SSL server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<title>Error</title></head><body><h1>403 - Directory browsing not allowed</h1><hr>SMART-SOFT VCard HTTP/SSL server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"exception Directory%20browsing%20not%20allowed\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SmarterMail\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href='http://www.smartertools.com/smartermail/mail-server-software.aspx' target='_blank'>SmarterMail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Login - SmarterMail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"UTC SmarterMail Enterprise\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"SmarterMail Professional\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"SmarterMail Pro\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SmartCDS\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"smartcds Version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: smartcds\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"X-SmartCDS-Error\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"smartcds Version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: smartcds\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"X-SmartCDS-Error\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SmartThumbs\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"POWERED BY <a href=\\\\\\\"http://www.smart-scripts.com\\\\\\\">SMART THUMBS</a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SmarterStats\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Login - SmarterStats\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<td class=bar1inner>SmarterStats\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Broadcom-brocade- switch\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/switchExplorer.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"originalurl=\\\\\\\"/switchExplorer.html\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"com.brocade.web.secsan.LoginApplet\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Police wings - company products\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<p>\\u6280\\u672f\\u652f\\u6301 \\u6df1\\u5733\\u8b66\\u7ffc\\u6570\\u7801\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Avaya-Application-Enablement-Services\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<b>Application Enablement Services&nbsp;</b>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"avaya\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Middle Complex Technology - Products\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Copyright(C) 2005-2009\\u3000\\u3000EmsysChina Co.,Ltd.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<META content=\\\\\\\"\\u4e2d\\u5d4c\\u79d1\\u6280\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"lwIP\",\n  \"logic\": \"(a&&b&&c&&d) || (e&&f&&g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"lwIP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/projects/lwip\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"lwIP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"/projects/lwip\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"H3C-S5120\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C Switch S5120\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"H3C S5120\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-eSpace-IAD\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span id='lang' value='huawei_announce'></span>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"index_title\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Huawei Integrated Access Software\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HuaWei-VPP-EWS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Huawei VPP EWS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Huawei VPP EWS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AxNet-Video Monitoring\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"clsid:4AADB758-F0B9-48DC-945B-F4C4F2ACCD42\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"codebase=\\\\\\\"../axnet.cab\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-Comware\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ssh\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"COMWARE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"H3C Comware\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"armv5tejl\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"armv5tejl\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-UX products\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HP-UX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"HP-UX\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Lorex-Video Monitoring\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/Lorex_webplugin.exe\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Infortrend-Company Products\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"snmp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Infortrend SNMP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VxWorks\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VxWorks\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SugarCRM\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\" javascript:void window.open('http://support.sugarcrm.com')\\\\\\\">Support</a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<img style='margin-top: 2px' border='0' width='106' height='23' src='include/images/poweredby_sugarcrm.png' alt='Powered By SugarCRM'>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<script>var module_sugar_grp1 = 'Users';</script><script>var action_sugar_grp1 = 'Login';</script><script>jscal_today\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"index.php?action=Login&module=Users\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"SugarCRM\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sun-Java-System-Calendar-Express\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Sun Java[tm] System Calendar Express\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<img src=\\\\\\\"imx/login-logo.gif\\\\\\\" width=\\\\\\\"186\\\\\\\" height=\\\\\\\"79\\\\\\\" alt=\\\\\\\"Sun Microsystems, Inc.\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sun-Java-System-Server\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Sun-Java-System-Web\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: Sun-Java-System-Web\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Skillsoft-Skillport-LMS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<table border=\\\\\\\"0\\\\\\\" width=\\\\\\\"100%\\\\\\\" id=\\\\\\\"logobanner\\\\\\\"><tr width=\\\\\\\"100%\\\\\\\"><td  width=\\\\\\\"82%\\\\\\\"><img src=\\\\\\\"https://customer.skillport.com/spcustom/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"StatusNet\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<p>This site is powered by <a href=\\\\\\\"http://status.net/\\\\\\\">StatusNet</a> version\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"It runs the <a href=\\\\\\\"http://status.net/\\\\\\\">StatusNet</a> microblogging software, version \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ManageEngine-ADSelfService\",\n  \"logic\": \"(a&& ((b&&c) ||d)) ||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"images/adssp_favicon.ico\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SMALL_STATUS_BOX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"adsf/js/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"ManageEngine\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"ManageEngine - ADSelfService Plus\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"o=ManageEngine Zoho Corporation, ou=ADSelfService Plus\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ManageEngine-SupportCenter\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ManageEngine SupportCenter Plus\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"REDDOXX\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"148779de-1cf1-49bb-8bdb-129321cf8974\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"StarDot-Express\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<tr><td><a href=\\\\\\\"http://www.stardot.com\\\\\\\" target=\\\\\\\"_blank\\\\\\\"><img src=\\\\\\\"logo.gif\\\\\\\" alt=\\\\\\\"\\\\\\\" width=\\\\\\\"227\\\\\\\" height=\\\\\\\"45\\\\\\\"></a></td>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Express6 Live Image\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<tr><td><a href=\\\\\\\"http://www.stardot-tech.com\\\\\\\" target=\\\\\\\"_new\\\\\\\"><img src=\\\\\\\"logo.gif\\\\\\\" alt=\\\\\\\"\\\\\\\" width=\\\\\\\"227\\\\\\\" height=\\\\\\\"45\\\\\\\" border=\\\\\\\"0\\\\\\\"></a></td>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ManageEngine-AssetExplorer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ManageEngine AssetExplorer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"footerf2\\\\\\\">ManageEngine AssetExplorer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"StarNetwork companies\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \">Star Network &amp; Promotion LTD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \">Star Network and Promotion LTD\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<a href=\\\\\\\"http://www.s4u.co.il \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<a href=\\\\\\\"http://www.starltd.net\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DLink-DI-624\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"DI-624\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DI-624\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DLink-DI-524UP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"DI-524UP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"DI-524UP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"At the beginning of teaching - online test system\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6559\\u4e4b\\u521d\\u5728\\u7ebf\\u8003\\u8bd5\\u7cfb\\u7edf - JiaoZhichu\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"jiaozhichu\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"href=\\\\\\\"/ksxt/h5/images/jiaozhichu.ico\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EMC-SNAS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EMC-SNAS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"EMC Celerra File Server   Project: SNAS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-\\u5b58\\u50a8\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"document.cookie = \\\\\\\"m_language=\\\\\\\"+v+\\\\\\\"; path=/\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<IMG src=\\\\\\\"/web/images/STORAGE.jpg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"InterNiche-WebServer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"server: InterNiche Technologies WebServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: InterNiche Technologies WebServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Shi Tuo Ark - Public Security Inspection Station Document Nuclear Recription System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"\\u516c\\u5b89\\u68c0\\u67e5\\u7ad9\\u4eba\\u8138/\\u8bc1\\u4ef6\\u5408\\u4e00\\u6838\\u5f55\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"action=\\\\\\\"/Admin/Login/login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MIS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"id=\\\\\\\"extpb_host\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Nowayer-FTP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"nowayer\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SpeedTouch\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"SpeedTouch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SpeedTouch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Siemens-SpeedStream-Router\",\n  \"logic\": \"((a||b) &&c) ||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<TITLE>SpeedStream Router Management Interface</TITLE>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Siemens Subscriber Networks -->\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Siemens Subscriber Networks \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"SpeedStream \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Auxmed traffic management platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7231\\u8baf\\u6d41\\u91cf\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Solidophone traffic management platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7384\\u9e1f\\u6d41\\u91cf\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sungoin-Traffic Management Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5c1a\\u666f\\u6d41\\u91cf\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Spyglass-MicroServer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Spyglass_MicroServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: Spyglass_MicroServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Spring-Framework\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"org.springframework.web.servlet.i18n.CookieLocaleResolver.locale=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"org.springframework.web.servlet.i18n.CookieLocaleResolver.locale=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Spinnaker-product\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Spinnaker\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: Spinnaker\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Color Cube Technology - Traffic Management\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6d41\\u91cf\\u7ba1\\u7406\\u540e\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CheckCode.aspx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FXC-ES116VL\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ES116VL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ES116VL\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ES116VL\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AVM-FRITZ!Box\",\n  \"logic\": \"(a&& (b||c)) ||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FRITZ!Box\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var gNbc\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<frameset id=\\\\\\\"frame_set\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"AVM FRITZ!Box\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"FRITZ!Box \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"FRITZ!Box\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MEDIATEK-RT3883\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"rt3883\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-HDInsight\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=HDInsight\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HDInsight\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=HDInsight\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Exchange-Server-2016-CU4\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/owa/auth/15.1.669\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Exchange-Server-2016-CU8\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/owa/auth/15.1.1415\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Exchange-Server-2016-CU18\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/owa/auth/15.1.2106\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Exchange-Server-2016-CU13\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/owa/auth/15.1.1779\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Exchange-Server-2016-CU6\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/owa/auth/15.1.1034\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Exchange-Server-2016-CU10\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/owa/auth/15.1.1531\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Exchange-Server-2016-CU16\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/owa/auth/15.1.1979\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Exchange-Server-2016-CU9\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/owa/auth/15.1.1466\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Exchange-Server-2016-CU11\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/owa/auth/15.1.1591\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Exchange-Server-2016-CU5\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/owa/auth/15.1.845\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Exchange-Server-2016-CU14\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/owa/auth/15.1.1847\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Exchange-Server-2016-CU1\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/owa/auth/15.1.396\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Exchange-Server-2016-CU2\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/owa/auth/15.1.466\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Exchange-Server-2016-CU17\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/owa/auth/15.1.2044\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Exchange-Server-2016-CU7\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/owa/auth/15.1.1261\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Exchange-Server-2016-RTM\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/owa/auth/15.1.225\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Exchange-Server-2016-CU12\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/owa/auth/15.1.1713\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Exchange-Server-2016-CU3\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/owa/auth/15.1.544\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Exchange-Server-2016-CU19\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/owa/auth/15.1.2176\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Gradle_Enterprise-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<label for=\\\\\\\"controllerAddress\\\\\\\">Gradle Enterprise server</label>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div id=\\\\\\\"kc-header-wrapper\\\\\\\" class=\\\\\\\"\\\\\\\">Gradle Enterprise</div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"citrix-Endpoint-Management\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Endpoint Management - Console - Logon\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"info_text_cloud text hide\\\\\\\">You have to first configure Endpoint Management</div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oracle-E-Business-Suite\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"E-Business Suite Home Page Redirect\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OpenSMTPD\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ESMTP OpenSMTPD\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SONICWALL-Network-Security-Appliance\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Policy Jump\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"policyJump\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<frame src=\\\\\\\"emptyView4.html\\\\\\\" name=\\\\\\\"authTgtFrm\\\\\\\" noresize scrolling=\\\\\\\"no\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<frame src=\\\\\\\"emptyView4.html\\\\\\\" name=\\\\\\\"authTgtFrm\\\\\\\" id=\\\\\\\"authTgtFrm\\\\\\\" scrolling=\\\\\\\"no\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"sendinblue-mail\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Sendinblue SMTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"netqmail\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"netqmail home page: http://qmail.org/netqmail\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EAZYTEC- Management System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EazyTec\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/j_spring_security_check\\\\\\\" onsubmit=\\\\\\\"saveUsername(this);return validateForm(this)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Qrvey-Platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Qrvey Platform\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"app-root\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"China New Golden Shield - Information Security Management System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"C.alertMsg('\\u78c1\\u76d8\\u7a7a\\u95f4\\u5269\\u4f59: ' + space_available + ' M','alert_msg');\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"onclick=\\\\\\\"javascript:useAccountLogin();\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Invicti-AWVS\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"name=\\\\\\\"viewport\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Organizational Unit: Acunetix Web Vulnerability Scanner\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Organizational Unit: Acunetix Web Vulnerability Scanner\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"service\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Falcon Safety - Jinshan Terminal Safety System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6570\\u636e\\u5e93\\u8fde\\u63a5\\u5f02\\u5e38\\uff0c\\u60a8\\u53ef\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u91d1\\u5c71\\u7ec8\\u7aef\\u5b89\\u5168\\u7cfb\\u7edf\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"ISPsystem-Ispmanager\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ISPmanager-Lite\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<form name=\\\\\\\"authform\\\\\\\" action=\\\\\\\"/ispmgr\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ispsystem.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NEC-Aterm-WF1200CR\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div id=\\\\\\\"thisProduct\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<br />Aterm WF1200CR<br />\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"btnGuide\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Jellyfin\",\n  \"logic\": \"(a) || (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<meta name=\\\\\\\"application-name\\\\\\\" content=\\\\\\\"Jellyfin\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"jellyfin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Location\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Jellyfin\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"W&Jsoft-D-Security\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WNJsoft D-Security\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"WNJsoft\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/DLP/admintool/Index.jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"W&Jsoft Inc.\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Yilong Tong - Data Leak Protection (DLP)\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6570\\u636e\\u6cc4\\u9732\\u9632\\u62a4(DLP)\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/CDGServer3/index.jsp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SOMANSA-DLP\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DLP system\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/DLPCenter/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"SOMANSA\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Forcepoint-Security-Manager\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Forcepoint Security Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"class=\\\\\\\"warningDetailsHeader\\\\\\\">Forcepoint security certificate is required\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HBLink-monitor\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HBLink monitor\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WOWOSTAR-DLP\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5e37\\u5e44\\u6280\\u672f\\u5b89\\u5168\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u6570\\u636e\\u9632\\u6cc4\\u6f0f\\u7cfb\\u7edf WO-DLP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Wayos-switch centralized management system\",\n  \"logic\": \"(a&&b) || (c&&d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4ea4\\u6362\\u673a\\u96c6\\u4e2d\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u6df1\\u5733\\u7ef4\\u76df\\u79d1\\u6280\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"jxtd_TEST_user\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<form action=\\\\\\\"cgi/login\\\\\\\" method=\\\\\\\"get\\\\\\\" onSubmit=\\\\\\\"login(this)\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<span>\\u6df1\\u5733\\u7ef4\\u76df\\u79d1\\u6280\\u80a1\\u4efd\\u6709\\u9650\\u516c\\u53f8</span>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ruijie-RG-ISG\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RG-ISG\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UNIMO-3M-Network-IR-Bullet-Camera\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"3M Network IR Bullet Camera\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MERCUSYS-AC12G\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"AC12G\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Aviatrix-Controller\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Aviatrix Controller\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NSYS-Company Products\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<form id=\\\\\\\"form1\\\\\\\" name=\\\\\\\"form1\\\\\\\" method=\\\\\\\"post\\\\\\\" action=\\\\\\\"login_commit.php\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Netsys\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AVA-Resource Management Platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<form class=\\\\\\\"form-signin\\\\\\\" id=\\\\\\\"frmLogin\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<option value=\\\\\\\"AVA\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sino-Science Network-Ansec Operation and Management System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/fort_\\u65b0\\u7248UI\\u4e3b\\u7ebf\\u7248\\u672c/WebRoot/pages/commons/meta.jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u4e2d\\u79d1\\u7f51\\u5a01\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sino-Science Internet WIANG-Safe Access Gateway\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"document.getElementById(\\\\\\\"dkey_login\\\\\\\").checked=false;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<form id=\\\\\\\"form1\\\\\\\" name=\\\\\\\"form1\\\\\\\" method=\\\\\\\"post\\\\\\\" action=\\\\\\\"login_commit.php\\\\\\\" class=\\\\\\\"mainbox\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u6df1\\u5733\\u5e02\\u4e2d\\u79d1\\u7f51\\u5a01\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sino-Science Internet, Safety Control System\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div class=\\\\\\\"con_R_B_R\\\\\\\"> <input class=\\\\\\\"btn_bg\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"dkey_login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"anysec\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"login_commit.php\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DSL-6740C\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DSL-6740C\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DSL-7740C\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DSL-7740C\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DTR244DG\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DTR244DG\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sino-Science Internet Wuli-Firewall\",\n  \"logic\": \"(a&&b) ||c|| (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<input type=\\\\\\\"checkbox\\\\\\\" id=\\\\\\\"authened_type\\\\\\\" name=\\\\\\\"authened_type\\\\\\\"><i class=\\\\\\\"checkbox\\\\\\\"></i>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5317\\u4eac\\u4e2d\\u79d1\\u7f51\\u5a01\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u4e2d\\u79d1\\u7f51\\u5a01\\u9632\\u706b\\u5899\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<body onload=\\\\\\\"chkVersion();setLanguage();loading()\\\\\\\" onkeydown=\\\\\\\"keyLogin(event);\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"\\u5317\\u4eac\\u4e2d\\u79d1\\u7f51\\u5a01\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sino-Science-4A Operation Fortress Machine System\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"zk.appname='\\u4e2d\\u79d1\\u7f51\\u5a014A\\u8fd0\\u7ef4\\u5821\\u5792\\u673a\\u7cfb\\u7edf'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CommonName: \\u4e2d\\u79d1\\u7f51\\u5a014A\\u8fd0\\u7ef4\\u5821\\u5792\\u673a\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u4e2d\\u79d1\\u7f51\\u5a01-\\u62a5\\u8868\\u4e2d\\u5fc3\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e2d\\u79d1\\u7f51\\u5a01\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/images/reporter.ico\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yisheng - Network Security Audit System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4efb\\u5b50\\u884c\\u7f51\\u7edc\\u5b89\\u5168\\u5ba1\\u8ba1\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Xinta Technology - Internet Behavior Management\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<span id=\\\\\\\"copyright\\\\\\\">\\u80dc\\u946b\\u5854\\u4e0a\\u7f51\\u884c\\u4e3a\\u7ba1\\u7406</span>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-GR-1200W\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GR-1200W\\u7cfb\\u7edf\\u7ba1\\u7406\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var over_time\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-F1000\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"H3C F1000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"./webui/images/basic/login/china_logo.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"F1000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"H3C\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"secucloud-SASE\",\n  \"logic\": \"(a&&b) ||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Cloud-Security by Secucloud\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"font-family:secucloud\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Secucloud SASE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"phpMyAdmin-4.8.1\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"phpMyAdmin 4.8.1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"level_one-WBR\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"LevelOne WBR-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"LevelOne WBR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"LevelOne WBR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Saber\\u4f01\\u4e1a\\u7ea7\\u5f00\\u53d1\\u5e73\\u53f0\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Saber\\u4f01\\u4e1a\\u7ea7\\u5f00\\u53d1\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<strong>\\u5f88\\u62b1\\u6b49\\uff0c\\u5982\\u679c\\u6ca1\\u6709 JavaScript \\u652f\\u6301\\uff0cSaber \\u5c06\\u4e0d\\u80fd\\u6b63\\u5e38\\u5de5\\u4f5c\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SANGFOR-WOC-Report-Center\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Sangfor WOC Report Center\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Set-Cookie: sf_session=a%3A5%\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Set-Cookie: sf_session=a%3A5%\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tianxin SCADA System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5929\\u4fe1SCADA\\u7cfb\\u7edf-\\u767b\\u5f55\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Jump-SSLVPN Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6377\\u666eSSLVPN\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NSFOCUS-\\u7ec8\\u7aef\\u68c0\\u6d4b\\u4e0e\\u54cd\\u5e94\\u7cfb\\u7edf\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7eff\\u76df\\u7ec8\\u7aef\\u68c0\\u6d4b\\u4e0e\\u54cd\\u5e94\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/master/login/login.php\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VMware-Identity-Manager\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VMware Identity Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/cfg/help/getHelpLink\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<h2>VMware Identity Manager Portal\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VMware-vRealize-Automation-Appliance\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VMware vRealize Automation Appliance\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"VMware vRealize Automation\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-VMG3926-B10B\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Welcome toVMG3926-B10B\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"VMG3926-B10B\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WiFisky-7 layer flow control router\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WIFISKY 7\\u5c42\\u6d41\\u63a7\\u8def\\u7531\\u5668\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"frp\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"frp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Mars\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Mars - Login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Asset lighthouse system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u8d44\\u4ea7\\u706f\\u5854\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oriental Guoxin Industrial Internet Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e1c\\u65b9\\u56fd\\u4fe1\\u5de5\\u4e1a\\u4e92\\u8054\\u7f51\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JUMP - Next Generation Firewall\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6377\\u666e\\u4e0b\\u4e00\\u4ee3\\u9632\\u706b\\u5899\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"html/src/img/login/new/slogan.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JUMP-second generation firewall management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6377\\u666e\\u7b2c\\u4e8c\\u4ee3\\u9632\\u706b\\u5899\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Wayos-AC Control Platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var new_ac_username = getCookie(\\\\\\\"new_ac_username\\\\\\\");\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<span>\\u6df1\\u5733\\u7ef4\\u76df\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8</span>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Seentech-Network Police Big Data Platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<h1><span>\\u4e2d\\u79d1\\u65b0\\u4e1a\\u7f51\\u8b66\\u5b9e\\u6218\\u5927\\u6570\\u636e\\u5e73\\u53f0</span></h1>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<form action=\\\\\\\"/site/login.html\\\\\\\"\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yiso-SSL-VPN\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"src=\\\\\\\"/javascript/validation/sslvpnlogin.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Surfilter\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Organization: SURFILTER\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"CommonName: Surf-NGSAAppliance\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Iceflow - Next Generation Firewall\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<h2 class=\\\\\\\"media-heading\\\\\\\">FW\\u4e0b\\u4e00\\u4ee3\\u9632\\u706b\\u5899</h2>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<h2 class=\\\\\\\"media-heading\\\\\\\">FW \\u4e0b\\u4e00\\u4ee3\\u9632\\u706b\\u5899</h2>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<small title=\\\\\\\"http://www.iceflow.cn\\\\\\\">\\u4e0a\\u6d77\\u51b0\\u5cf0\\u8ba1\\u7b97\\u673a\\u7f51\\u7edc\\u6280\\u672f\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Lido Information-LDT Safety Gateway\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6e56\\u5317\\u529b\\u8fbe\\u79d1\\u8baf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<body onload=\\\\\\\"chkVersion();setLanguage();loading()\\\\\\\" onkeydown=\\\\\\\"keyLogin(event);\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Loongxin- Internet Behavioral Management\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location.href = 'language_set.php?lan='+document.getElementById('lang').value;\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"loongxin Co.,Ltd.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Strait Information - Black Shield Network Security Audit System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u798f\\u5efa\\u7701\\u6d77\\u5ce1\\u4fe1\\u606f\\u6280\\u672f\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Technology, Inc.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-RDP-WEB version\",\n  \"logic\": \"(a&&b) || ((c||d) &&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Set-Cookie: tswafeaturecheckcookie=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"path=/RDWeb/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Location: ./rdweb/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Location: RDWeb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"IIS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huaying Xin'an - Unified Security Defense Platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"\\u534e\\u6e05\\u4fe1\\u5b89\\u7edf\\u4e00\\u5b89\\u5168\\u9632\\u5fa1\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"window.dmsDefaultLanguage\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Huaying Xinan-TDR\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5df2\\u88ab\\u534e\\u6e05\\u4fe1\\u5b89TDR\\u62e6\\u622a\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"getInterceptUrl\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Wan Domain Duan - Internet Behavior Management System\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u534e\\u57df\\u6570\\u5b89\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Technology, Inc.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u534e\\u57df\\u6570\\u5b89\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<div class=\\\\\\\"sys-name\\\\\\\">\\u4e0a\\u7f51\\u884c\\u4e3a\\u7ba1\\u7406\\u7cfb\\u7edf</div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Wan Domain Duan - Video Integrated Security Gateway\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u534e\\u57df\\u6570\\u5b89\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"sys-name\\\\\\\">\\u89c6\\u9891\\u7efc\\u5408\\u5b89\\u5168\\u7f51\\u5173</div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Wan Domain-SD-WAN\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u534e\\u57df\\u6570\\u5b89\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"sys-name\\\\\\\">SD-WAN\\u7ba1\\u7406\\u5e73\\u53f0</div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Iceflow-Company Products\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u51b0\\u5cf0\\u7f51\\u7edc\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Web \\u914d\\u7f6e\\u4e2d\\u5fc3\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IP_COM-second generation firewall\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Technology, Inc.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u6df1\\u5733\\u5e02\\u548c\\u4e3a\\u987a\\u7f51\\u7edc\\u6280\\u672f\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UTT-security network management system\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e0a\\u6d77\\u827e\\u6cf0\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Technology, Inc.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BYZORO- Baihuo audit gateway\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u767e\\u5353\\u7f51\\u7edc\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<title> Technology, Inc.</title>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fengyuan Core Technology - Firewall\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6df1\\u5733\\u5e02\\u4e30\\u6e90\\u82af\\u79d1\\u6280\\u4ea7\\u4e1a\\u63a7\\u80a1\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<title> Technology, Inc.</title>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Synology-RackStation\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Synology&nbsp;RackStation\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"RackStation\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"QNAP-Virtualization-Station\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Virtualization Station\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var hostname\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Seven Niu Yun-QVS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Log: QVS-RTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Log: QVS-RTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Fastream-IQ-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Fastream IQ Web\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Fastream IQ Web\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"AVA-Teaching Video Application Cloud Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div id=\\\\\\\"searchChoiceList\\\\\\\" class=\\\\\\\"searchChoiceList\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"D_Link-DGSGigabit-Ethernet-Switch\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DGS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Gigabit Ethernet Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EasyPACS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Easy PACS - Home Page\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zervit-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Zervit\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Zervit\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Adtec companies\",\n  \"logic\": \"a&& (b||c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Adtec\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Service\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"armv4tl\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"armv4tl\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ATAMAN-Company Products\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ataman TCP Remote Logon Services\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Ataman Telnetd Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-UCS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CIMC Debug Firmware Utility Shell\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CesarFTP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CesarFTP server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Compex-CGX3224-Switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CGX3224 Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ComOS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ComOS - Livingston PortMaster\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ELTEK-Power-System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Eltek Power System FTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"eXtremail\",\n  \"logic\": \"a&& (b||c||d||e||f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"eXtremail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"POP3 server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ESMTP server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"eXtremail V6\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"eXtremail V7\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"IMAP4 server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Georgia_SoftWorks-Company Products\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Georgia SoftWorks\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"glFTPd\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"glFTPd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"globalscape-\\u516c\\u53f8\\u4ea7\\u54c1\",\n  \"logic\": \"(a&&b)||c||d||e||f||g||h||i||j||k\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GlobalSCAPE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ssh\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"GlobalSCAPE Secure FTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: GlobalSCAPE-Secure Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"GlobalSCAPE Secure EFT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"GlobalSCAPE EFT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Server: GlobalSCAPE-EFTServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"GlobalSCAPE Enhanced File Transfer Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"GlobalSCAPE Secure SFTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Server: GlobalSCAPE-Secure Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"Server: GlobalSCAPE-EFTServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-ProLiant-BL-Switch\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HP ProLiant BL p-Class C-GbE2 Interconnect Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"IBM-Notes\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Lotus Notes POP3 server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"IBM Notes POP3 server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ESMTP IBM Notes\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LG-LDK-300\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"LDK-300 System\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"mailfront\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"mailfront ESMTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ESMTP mailfront\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Menuet-FTP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Menuet FTP Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Schneider-NetBotz-FTP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NetBotz FTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VMS_Software-OpenVMS\",\n  \"logic\": \"(a&& (b||c)) ||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OpenVMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ssh\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \" Operating System\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"OpenVMS (TM) VAX Operating System\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"OpenVMS Alpha OS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ASCOTEL-FTP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ascotel FTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ascotel companies products\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=Ascotel domain\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Ascotel domain\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"Ascotel domain\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JDOWNLOADER\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=JDownloader\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"JDownloader\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"JDownloader\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-SPH200D\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=SPH200D\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"SPH200D\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"realm=\\\\\\\"SPH200D\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"atcom-IP-Phone\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: ATCOM-IP-Phone\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: ATCOM-IP-Phone\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Baidu-BFE\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: bfe\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: bfe\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Dahlia-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Dahlia\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Dahlia\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-Web-JetAdmin\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: HP-Web-JetAdmin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: HP-Web-JetAdmin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"HP Web Jetadmin\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Minix-httpd\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Minix httpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Minix httpd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PAW-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: PAW Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: PAW Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"remote-potato\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: remote-potato\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: remote-potato\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SnapStram-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: SnapStream\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: SnapStream\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SNMP-Research-DR-Web\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: SNMP Research DR-Web \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: SNMP Research DR-Web \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WIBU_SYSTEMS-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: WIBU-SYSTEMS HTTP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: WIBU-SYSTEMS HTTP Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MICROBAN-SilverSHielD\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SilverSHielD\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Sina-FTP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SINA FTPD\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SEATTLELAB-SLmail\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SMTP Server SLmail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"slmail ESMTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Stupid-FTPd\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Stupid-FTPd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LINKSYS-WGA600N\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WGA600N Wireless Gaming Adapter\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Worldmail- mail system\",\n  \"logic\": \"a||b||c||d||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WorldMail POP3 Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"WorldMail ESMTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ESMTP Service (Worldmail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"POP3 server ready (Worldmail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"WorldMail IMAP4\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"IMAP4 server ready (Worldmail\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"freeRTOS-RTOS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RTOS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Xitami-FTP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Xitami FTP server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Proxomitron\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"The Proxomitron\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Gordano-Messaging-Services\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Gordano Messaging Services POP3 server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Gordano Messaging Suite POP3 server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: Gordano Messaging Services Web Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: Gordano Messaging Suite Web Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHILIPS-EnvisionGateway\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"EnvisionGateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-ASG\",\n  \"logic\": \"(a&&b) || (c&& (d||e))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/php/common/checknum_creat.php?module=config_authnum&time=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Huawei\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ASG\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"HUAWEI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"ASG-5\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Poly Orange Network - Security Gateway\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SD-WAN\\u667a\\u80fd\\u5b89\\u5168\\u7f51\\u5173\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/images/logo_login.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Boda Communication - Next Generation Firewall\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u535a\\u8fbe\\u4e0b\\u4e00\\u4ee3\\u9632\\u706b\\u5899\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zhongke Dawn - Next Generation Firewall\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u66d9\\u5149\\u4e0b\\u4e00\\u4ee3\\u9632\\u706b\\u5899\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/login.html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SYSTROME-NGFW\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/php/common/checknum_creat.php?module=config_authnum&time=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Systrome NGFW\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BSC-remote image\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u8fdc\\u7a0b\\u5f71\\u50cf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<p>\\u5317\\u4eac\\u84dd\\u536b\\u901a\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8</p>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tiandy-Video Monitoring Platform\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u89c6\\u9891\\u76d1\\u63a7\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"VideoLib.EXE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"images/login/ppis_logo_transparent.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"\\u56db\\u7ea7\\u8054\\u7f51\\u89c6\\u9891\\u76d1\\u63a7\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Datang Telecom - nvs3000\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NVS3000\\u7efc\\u5408\\u89c6\\u9891\\u76d1\\u63a7\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u7efc\\u5408\\u89c6\\u9891\\u76d1\\u63a7\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Strong Technology - Teaching Management System\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u767b\\u5f55\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u6e56\\u5357\\u5f3a\\u667a\\u79d1\\u6280\\u53d1\\u5c55\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"bjkjdx_qrcode_view\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"tnftpd\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"tnftpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ftp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Synchronet-Mail-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Synchronet SMTP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Synchronet POP3 Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Tencent-QQMail\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"QQMail POP3 Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Esmtp QQ Mail Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Postmaster-Enterprise- Mail System\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"PostMaster Enterprise POP3 Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"PostMaster Enterprise SMTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"PostMaster Enterprise \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JAMES-Mail-Server\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"JAMES SMTP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"JAMES POP3 Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Apache JAMES awesome SMTP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Email Server (Apache JAMES)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"InterMail\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"InterMail SPOP3 server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"InterMail POP3 server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"ESMTP server (InterMail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"IMAP4 server (InterMail\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FirstClass-Mail-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FirstClass ESMTP Mail Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FirstClass SMTP Submission Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DavMail-Mail-System\",\n  \"logic\": \"(a&& (b||c)) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DavMail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SMTP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"POP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"IMAP4rev1 DavMail\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DavMail-Gateway\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"DavMail Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"DavMail Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: DavMail Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: DavMail Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ERICSSON-switch\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Ericsson\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HPE-OfficeConnect-Switch\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HPE OfficeConnect Switch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HPE OfficeConnect Switch\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LINKSYS-Switch\",\n  \"logic\": \"(a&&b) || (c&&d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Linksys\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Switch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Linksys\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Switch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"ZyXEL-Prestige-660ME\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Prestige 660ME\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-P-660HW-T1\",\n  \"logic\": \"(a&&b&&c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"P-660HW-T1 \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Netwave IP Camera\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"ZyXEL-Prestige-660HW\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Prestige 660HW-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Prestige 660HW-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-Prestige-652H/HW\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Prestige 652H/HW\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Prestige 652H/HW\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-Prestige-650R\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Prestige 650R-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Prestige 650R-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-Prestige-650HW\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Prestige 650HW\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Prestige 650HW\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-Prestige-623R\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Prestige 623R\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Prestige 623R\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DZS-ZNID-GPON-Router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZNID-GPON\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DZS-ZNID-GE-Router\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ZNID-GE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Router\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Westermo-MRD-Router\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Westermo MRD-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Westermo MRD-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Citec - Smart Fire Safety Management System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6d88\\u9632\\u5b89\\u5168\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/front/start/checkAccount\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHOENIX_CONTACT-TC-ROUTER\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TC ROUTER \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NETGEAR-Gateway\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NETGEAR Gateway \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"iball-Baton\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"iBall Baton \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"iBall Baton \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"iBall Baton\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CoralCDN\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"server: CoralWebPrx\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: CoralWebPrx\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"RAIDEN-RaidenFTPD\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"RaidenFTPD\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Lexmark-Optra-Printer\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Lexmark Optra\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Windows-FTP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Windows FTP Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"wizd\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: wizd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: wizd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"mercur-Messageing\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: MERCUR Messaging\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MERCUR Messaging 2005\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: MERCUR Messaging\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TiVo-Server\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: TiVo Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: tivo-httpd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: TiVo Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: tivo-httpd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NCH-FlexiServer\",\n  \"logic\": \"(a&&b) ||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"FlexiServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"www.nchsoftware.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<html><head><title>FlexiServer</title>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<title>FlexiServer</title>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Multicraft-FTP-server\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Multicraft\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"FTP server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OpenDNS-Company Products\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: OpenDNS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: OpenDNS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SHS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: SHS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: SHS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PHILIPS-Hue\",\n  \"logic\": \"a&& (b||c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"hue personal wireless lighting\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"hue-logo.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Use a modern browser to view this resource.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"hue personal wireless lighting\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BLUECAT-Meridius-Security-Gateway\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Meridius Security Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Cassini\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Microsoft-Cassini\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Microsoft-Cassini\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Conexant-EmWeb\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Conexant-EmWeb\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Conexant-EmWeb\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SimpLight-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: SIMP LIGHT\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: SIMP LIGHT\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Synchronet-FTP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Synchronet FTP Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"UNiSYS-ClearPath-MCP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \" ClearPath MCP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" ClearPath MCP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EwoMail-\\u90ae\\u4ef6\\u7cfb\\u7edf\",\n  \"logic\": \"(a&& (b||c)) || (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window.location.href = '/System/index';\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ewomail\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<form action=\\\\\\\"\\\\\\\" method=\\\\\\\"post\\\\\\\" id=\\\\\\\"myform\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Location: /Center/Index/login\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"302\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Leucotron-ISION\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: 410s05\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: 410s05\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"InterNiche-Server\",\n  \"logic\": \"a||b||c||d||e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"server: InterNiche Technologies WebServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"server: InterNiche Technologies WebServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"InterNiche embFtp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"InternicheSSHServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"InterNiche Telnet Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"uIP\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: UIP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: UIP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"ThreadX\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ThreadX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ThreadX\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CMX-TCP/IP\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CMX TCP/IP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CMX TCP/IP\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: CMX TCP/IP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Accelerated-Nucleus-PLUS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Operation System: Nucleus PLUS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"nucleus-FTP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Nucleus FTP Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"arm_KEIL-FTP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Keil FTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CMX-Systems-WebServer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: CMX Systems WebServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: CMX Systems WebServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"GUI-PROXY\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"GUI-PROXY\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CHISCDC-\\u4f53\\u68c0\\u6863\\u6848\\u67e5\\u8be2\\u7cfb\\u7edf\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div class=\\\\\\\"login_foot\\\\\\\">\\u6280\\u672f\\u652f\\u6301\\uff1a\\u4e2d\\u536b\\u4fe1\\u8f6f\\u4ef6</div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u4f53\\u68c0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Chiscdc - Confaciation Integrated Service Management System\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<div class=\\\\\\\"zwx-app-loading-sub-title\\\\\\\">\\u521d\\u6b21\\u52a0\\u8f7d\\u4f1a\\u6bd4\\u8f83\\u6162\\uff0c\\u8bf7\\u8010\\u5fc3\\u7b49\\u5f85</div>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Jiangsu Wein Software - Business System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"http://www.wbsoft.com.cn' target='_blank'>\\u7ef4\\u90a6\\u8f6f\\u4ef6</A>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"WBECV_\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Yiyou Huiyun - data large screen\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4ebf\\u53cb\\u6167\\u4e91\\u6570\\u636e\\u5927\\u5c4f\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"configOfUrl.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ONLYOFFICE\",\n  \"logic\": \"a&& (b||c||d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ONLYOFFICE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Thank you for choosing ONLYOFFICE!\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<a href=\\\\\\\"http://api.onlyoffice.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<a class=\\\\\\\"top-logo\\\\\\\" title=\\\\\\\"ONLYOFFICE\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Truwill-Digital City Management Big Data Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6570\\u5b57\\u57ce\\u7ba1\\u5927\\u6570\\u636e\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Truwill-Company Products\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u65e0\\u9521\\u6b63\\u5143\\u4fe1\\u606f\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<div class=\\\\\\\"loginbm\\\\\\\">\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Strait Information -SL-VPN\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"href=\\\\\\\"/common/SSLCAB.exe\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<p datalocal=\\\\\\\"activexNorma1\\\\\\\">\\u68c0\\u6d4b\\u5230\\u60a8\\u673a\\u5668\\u4e0aSGA\\u63a7\\u4ef6\\u4e0d\\u80fd\\u6b63\\u5e38\\u8fd0\\u884c\\uff01</p>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EAZYTEC-wire and cable cloud\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7535\\u7ebf\\u7535\\u7f06\\u4e91\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"EAZYTEC- Financial Credit System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u6c5f\\u82cf\\u5353\\u6613\\u4fe1\\u606f\\u79d1\\u6280\\u80a1\\u4efd\\u6709\\u9650\\u516c\\u53f8</a></p>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u8d22\\u52a1\\u4fe1\\u7528\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u5947\\u5b89\\u4fe1-VPN\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5947\\u5b89\\u4fe1VPN\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"href=\\\\\\\"/download/GWSetup.exe\\\\\\\" target=\\\\\\\"_blank\\\\\\\" style=\\\\\\\"\\\\\\\">\\u70b9\\u6b64\\u94fe\\u63a5\\u4e0b\\u8f7d\\u5947\\u5b89\\u4fe1VPN\\u5ba2\\u6237\\u7aef</a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"I_Campus-Lease Contract print management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u79df\\u8d41\\u5408\\u540c\\u6253\\u5370\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Vite-App\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Vite App\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Nomad-Project\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Nomad\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<meta name=\\\\\\\"nomad-ui/config/environment\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"China control Zhijia - Intelligent Operation and Maintenance Platform\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u534e\\u63a7\\u667a\\u52a0\\u667a\\u80fd\\u8fd0\\u7ef4\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Zhongke Shuguang-Dava Data Visualization\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"DAV\\u5927\\u6570\\u636e\\u53ef\\u89c6\\u5316\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"sugon\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HX2000-library management system\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HX2000\\u56fe\\u4e66\\u9986\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"WebEasyMail\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"on WebEasyMail\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"QuickMail\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"QuickMail\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SubEthaMail\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"SubEthaSMTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u53cb\\u70b9\\u5efa\\u7ad9-CMS\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"X-Powered-By: YoudianCMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Powered-By: YoudianCMS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"PRIME_COMPUTER-Server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Prime\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Prime\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Golden-FTP\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Golden FTP Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Gene6-FTP\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"G6 FTP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Gene6 FTP Server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APACHE-ATS\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: ATS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: ATS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"InSciTek-OIS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"InSciTek OIS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"THALES-SentinelKeysServer\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: SentinelKeysServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: SentinelKeysServer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LibreHealth-EHR\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Set-Cookie: librehealthehr=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"LibreHealth EHR demo installation\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Set-Cookie: librehealthehr=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dcm4che\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"dcm4che\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"eMule\",\n  \"logic\": \"a|| (b&&c) || (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: eMule\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"eMule\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<h2>Blog Comments</h2>\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Server: eMule\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Plesk-Obsidian\",\n  \"logic\": \"(a&&b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"class=\\\\\\\"sid-plesk\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<meta name=\\\\\\\"plesk-build\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"define('plesk-ui-library', window.PleskUiLibrary)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Plesk Obsidian\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Stanley-NT500\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HTTP/1.1 404 ERROR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ERROR 404\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Aventail-SSL-VPN-Concentrator\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Location: https://xweb-ext/__extraweb__/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \" HTTP/1.1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: unknown\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HORNBILL-Supportworks-Mail\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Supportworks\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SMTP\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DrayTek-Vigor-2820n\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"550 Permission denied.(Too many user login!!!)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Permission denied.(Please check access control list)\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NetApp-DFM\",\n  \"logic\": \"(a&&b&&c) || (d&&e&&f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HTTP/1.0 501 Unimplemented\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Content-Type: text/plain\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Content-Length: 17\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"HTTP/1.0 501 Unimplemented\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Content-Type: text/plain\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Content-Length: 17\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"501 Unimplemented\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OpenWrt-Server\",\n  \"logic\": \"(a&&b&&c&&d&&e) || (f&&g&&h&&i)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HTTP/1.1 403 Forbidden\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Connection: close\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Content-Type: text/plain\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Transfer-Encoding: chunked\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Rejected request from RFC1918 IP to public server address\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"HTTP/1.1 403 Forbidden\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Connection: close\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"Content-Type: text/plain\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"Transfer-Encoding: chunked\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"TRENDnet-TW100\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"TRENDnet | TW100-\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"TRENDnet | TW100-\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZeroMQ-zmtp\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"zmtp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HP-openview\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"com.hp.openview.bbc.LLBServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"com.hp.openview.bbc.LLBServer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"Heimdal-FTP\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Heimdal\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"ftp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Schneider-APC-SmartUPS\",\n  \"logic\": \"(a&&b&&c&&d) || (e&&f&&g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HTTP/1.1 302 Found\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Location: http:///home.htm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Content-Length: 0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"WebServer:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"HTTP/1.1 302 Found\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Location: http:///home.htm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Content-Length: 0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"WebServer:\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FORTINET-Fortigate-Application-filtering\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"220 Firewall Authentication required before proceeding with service\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"LiberoPops\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"+OK popserver\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"pop3 server ready\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KONICA_MINOLTA-bizhub\",\n  \"logic\": \"a&&b&&c&&d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"HTTP/1.1 301 Movprm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Location: https://\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Content-Type: text/html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Content-Length: 0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APACHE-JServer\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ajp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Atlassian-Bamboo\",\n  \"logic\": \"a|| (b&&c) || (d&&e) || (f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Atlassian Bamboo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Bamboo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \" Build dashboard\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"window.BAMBOO\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"docs.atlassian.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"content=\\\\\\\"Bamboo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"docs.atlassian.com\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"KUBESPHERE\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"KubeSphere\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Linear-eMerge\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Linear eMerge\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u81f4\\u8fdc\\u4e92\\u8054-M1\\u79fb\\u52a8\\u7aef\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"M1-Server \\u5df2\\u542f\\u52a8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FIT2CLOUD-MeterSphere\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"MeterSphere\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NSFOCUS-NIDPS\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NSFOCUS NIDPS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NSG300\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"NSG300\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Oracle-BI-Publisher-Enterprise\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Oracle BI Publisher Enterprise\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Redis-Commander\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"redisCommander.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"images/RedisCommandLogo.png\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VMware-HCX\",\n  \"logic\": \"a|| (b&&c) || (d&&e)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VMware HCX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CommonName: hcx.local\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Organization: VMware\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/hybridity/ui/hcx-client/index.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Location\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"vmware-NSX\",\n  \"logic\": \"a|| (b&&c) ||d|| (e&&f)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VMware NSX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: NSX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Server: NSX LB\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/VMW_NSX_Logo-Black-Triangle-500w.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Server: NSX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Server: NSX LB\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"vRealize-Log-Insight\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"vRealize Log Insight\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"VMware vRealize Log Insight\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u5353\\u5065\\u79d1\\u6280-\\u652f\\u4ed8\\u7f51\\u5173\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5353\\u952e\\u4fe1\\u606f\\u6280\\u672f\\u670d\\u52a1\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u652f\\u4ed8\\u7f51\\u5173\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u5171\\u521b\\u8f6f\\u4ef6-\\u56fd\\u6709\\u8d44\\u4ea7\\u7ba1\\u7406\\u4fe1\\u606f\\u7cfb\\u7edf\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7701\\u5c5e\\u9ad8\\u6821\\u56fd\\u6709\\u8d44\\u4ea7\\u7ba1\\u7406\\u4fe1\\u606f\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Dnsmasq\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"dnsmasq\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"dns\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u8d62\\u6d77\\u79d1\\u6280-\\u8239\\u8236\\u7ba1\\u7406\\u670d\\u52a1\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e13\\u6ce8\\u8239\\u8236\\u7ba1\\u7406\\u670d\\u52a1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \".winseaview-home__footer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u777f\\u6052\\u667a\\u665f\\u8f6f\\u4ef6-\\u5efa\\u8bbe\\u5de5\\u7a0b\\u9020\\u4ef7\\u5e02\\u573a\\u76d1\\u7ba1\\u76d1\\u6d4b\\u4fe1\\u606f\\u7cfb\\u7edf\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5efa\\u8bbe\\u5de5\\u7a0b\\u9020\\u4ef7\\u5e02\\u573a\\u76d1\\u7ba1\\u76d1\\u6d4b\\u4fe1\\u606f\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u6e05\\u534e\\u540c\\u65b9-\\u7edf\\u8ba1\\u8054\\u7f51\\u76f4\\u62a5\\u5e73\\u53f0\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u7edf\\u8ba1\\u8054\\u7f51\\u76f4\\u62a5\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u5b89\\u5fbd\",\n    \"is_equal\": false\n  }]\n}, {\n  \"name\": \"VisionVera-\\u76d1\\u63a7\\u63a5\\u5165\\u670d\\u52a1\\u7cfb\\u7edf\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u76d1\\u63a7\\u63a5\\u5165\\u670d\\u52a1\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"jquery.officesipApi.js?v=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u5168\\u56fd\\u623f\\u5c4b\\u5efa\\u7b51\\u548c\\u5e02\\u653f\\u8bbe\\u65bd\\u8c03\\u67e5\\u7cfb\\u7edf\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5168\\u56fd\\u623f\\u5c4b\\u5efa\\u7b51\\u548c\\u5e02\\u653f\\u8bbe\\u65bd\\u8c03\\u67e5\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"bitcoin\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"bitcoin\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Ethereum-RPC\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ethereumrpc\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"neo-ptcp\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"neop2ptcp\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"qz-Tray\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<td>QZ Tray</td>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"slf4j-log4j12\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"VirtualView\",\n  \"logic\": \"a&& (b||c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VirtualViewer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HTML5\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<h1 class=\\\\\\\"titleBannerTopH1\\\\\\\">Visual C++ virtual memory viewer</h1>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Spring-Hibernate-SpringMVC-\\u6574\\u5408\\u6846\\u67b6\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<h1>Spring + Hibernate + SpringMVC/Struts basic project.</h1>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"log4j\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APACHE-Druid\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Apache Druid\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APACHE-Tapestry\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"Tapestry Application Framework\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"content=\\\\\\\"Apache Tapestry Framework\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JavaMelody\",\n  \"logic\": \"(a&&b) || (c&&d) ||e||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"JavaMelody\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"X-Application-Context\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"JavaMelody\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"X-Application-Context\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"<a href=\\\\\\\"monitoring\\\\\\\" target=\\\\\\\"_new\\\\\\\">JavaMelody\\u76d1\\u63a7</a>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"<a href=\\\\\\\"/internal/javamelody\\\\\\\">java melody monitoring</a>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"JEECG\",\n  \"logic\": \"a||b||c||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"window._CONFIG['imgDomainURL'] = 'http://localhost:8080/jeecg-boot/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Jeecg-Boot \\u4f01\\u4e1a\\u7ea7\\u5feb\\u901f\\u5f00\\u53d1\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Jeecg \\u5feb\\u901f\\u5f00\\u53d1\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"'http://fileview.jeecg.com/onlinePreview'\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Jeeplus\",\n  \"logic\": \"a||b||c|| (d&&e) ||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"name=\\\\\\\"author\\\\\\\" content=\\\\\\\"http://www.jeeplus.org/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<meta name=\\\\\\\"author\\\\\\\" content=\\\\\\\"jeeplus\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Jeeplus vue\\u5feb\\u901f\\u5f00\\u53d1\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"jeeplus.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/static/common/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"JeePlus \\u5feb\\u901f\\u5f00\\u53d1\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"jeewms\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/Jeewms/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Location\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MyBatis\",\n  \"logic\": \"(a&&b) ||c|| (d&&e) || (f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u57fa\\u4e8eSpringBoot2.0\\u7684\\u6743\\u9650\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"mybatis\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<li><i class=\\\\\\\"fa fa-arrow-circle-o-right m-r-xs\\\\\\\"></i> Mybatis</li>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"X-Application-Context\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"include-mybatis:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"X-Application-Context\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"include-mybatis:\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u7528\\u53cb-NC-Cloud\",\n  \"logic\": \"(a&&b&&c) || (d&&e) ||f\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"nccloud\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Location\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"JSESSIONID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/platform/yonyou-yyy.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/platform/ca/nccsign.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"window.location.href=\\\\\\\"platform/pub/welcome.do\\\\\\\";\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APACHE-JMeter\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Apache JMeter Dashboard\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Jedis\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.JedisConnectionException\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.JedisException\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Apache-Log4j-Web\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"log4j-web*.jar\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"tomcat.util.scan.StandardJarScanFilter.jarsToScan\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APACHE-tika\",\n  \"logic\": \"a|| (b&& (c||d))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<h2>Tika Test Transformations</h2>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Apache Tika\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Corpora\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"vmware-Spring-Batch\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Spring Batch Admin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Spring Batch Lightmin\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"elastic-Elasticsearch-Engineer\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Index - Elasticsearch Engineer\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ECLIPSE-jetty9\",\n  \"logic\": \"a||b|| ((c||d) &&e) || (f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: jetty9\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: jetty9\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<h1>Jetty9 worked</h1>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"<h1>Welcome to Jetty 9</h1>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Jetty\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"jetty9\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"Error 404\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"druid-server\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"Druid server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"realm=\\\\\\\"Druid server\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"vmware-Workspace-ONE-Access\",\n  \"logic\": \"a|| (b&&c) || (d&& (e||f)) ||g\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Location: /workspaceone/index.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Location: /SAAS/apps/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Content-Length: 0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Workspace ONE Access\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"content=\\\\\\\"VMware, Inc.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"<div class=\\\\\\\"admin-header-org\\\\\\\">Workspace ONE Access</div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"VMware Workspace ONE\\u00ae Assist\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"vmware-Site-Recovery-Manager\",\n  \"logic\": \"a|| (b&&c) ||d\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VMware Site Recovery Manager \",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Organization: VMware, Inc.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"CommonName: SRM\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Welcome to VMware Site Recovery Manager\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"vmware-Tanzu-Observability\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Tanzu Observability\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APACHE-Zeppelin\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Zeppelin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MathJax.Hub.Config(config);\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Licensed under the Apache License\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Log4j2\",\n  \"logic\": \"(a||b||c|| (d&&e&&f&&g)) || (h||i||j) || (k) || (l||m||n||o||p) || (q) || (((r||s) &&t) ||u||v) || (w||x||y||z||xuhk) || (SRpD||nURO||Awcv) || (yJlH||eDld||cmwZ|| (SexI&&Rgky) ||ojGv) || (roZx|| (kYbP&&UDWX) || (GphA&&oJGD)) || (((tWxw||TGbB) &&RTAn)) || (((CLUF|| (qzbV&&peQb) ||cyxw) &&lzQP&&BDOk&&DpSq) || (ASkw||wZjW||VuEF) ||UQdA) || (JPts) || ((ucnt&&MLeE&&VmCg) ||vZoC||gYSv|| (ECbG&&PBWb&&bfcs&&ZCRy) || (xDKf&&Obsf) ||AFGs|| (fZHI&&FOsG)) || (OLNQ||RkJE) || (VBRm||bYdA|| (mpSD&&hUns)) || (MPnX|| (NHfV&&XWAP)) || (FdCG||AHID|| (dbgj&&KACQ)) || (nqOf&&EHhT) || (cmuQ&&mtol) || (ALNr) || ((HTPK&&MKJh) || (Tdxq) ||CPUW||ntZy||SYML|| (Scwi&&bTRp)) || (rmNn||HIip|| (KjOd&&jkQq) ||udCj||QKzy|| (jGgC&&MLSw&&nUmp) || (HmLA&&KgkT) || (LCod&&SDJr) ||uimf) || (ajXF&&mNpL) || (zJav||CiTA) || (HnGI||nOYw) || (ZtjX) || (FVKL) || ((yukb&&YsNa&&mGTH) || (XoMw&&KFpl&&JfnE) || (KsDg&&rQlI&&HQjF)) || (ZSEk) || (BWnE) || ((pCUH&&iImb&&gcWr) ||LXRJ) || (rhpx) || (xhvc||FXBZ||NxYW) || ((srJR&&Npce) || (eCnx&&YQZq)) || (TMby||tsFP||qriA||Vjsn||Onge) || (QEtC) || ((vgwJ&&WYlr&&cMBA) || (GcQb&&hKZt&&TxmS)) || ((fWPI&&InPw) ||vZbU||DYvw||sEHi) || (((fbRX&&ASEW) &&AhQC&&tbZA&&RwNT&&UeAt) || (idmJ&&KJSX&&EfjK&&Bomy&&xfsE&&JqwD) || (SATv&&PSDN&&FrJB)) || (kBZN||MKrT||wctn) || (((COuy||ONcr||BrKM) &&gkTC&&gXKl&&nSpB&&UPvR) || (dbmG&&UhVl&&gJRK&&KWyg&&BWVp&&QlqT)) || (DsYT) || (HorR) || (oNUy) || (((WMqn||NquJ||qfnk) &&QgmA&&NeYl&&veRN) || (RawC&&LsAa&&lNya)) || (kAbw) || (JCez) || (eTZt||ZOKn) || (OXJL||lFpz||apEy||YZtO) || (ifKq|| (PyZQ&&folQ) || (qJsU&&PxDX)) || (dRTt&&csPj) || (kmDl|| (CcuJ&&eRrV)) || (zsUR) || (MaGp|| (MZow&&KdTU) || (iGdr&&Altx)) || (ilwj||mFhg||vqWJ) || (XhnG|| (ugQr&&TdiH) ||BJDQ|| (bmvO&&IVsG)) || (Nzqx) || (yzJp) || (KOhm&&SjLJ) || (qUOD|| (XKqs&&WiUr) || (Wslo&& (wbZP||PCAR)) ||wEUN) || (gLsx|| (ZPil&&fmqJ)) || (cKmV||uxIv) || ((Lyqb||UiSq) &&wHlc) || (pPZh|| (fwCS&&DPGH)) || (cZPX|| (mOkN&&rksB) || (thMS&&Bnsq)) || (ViHB&&lGOo) || (wqCJ||Uhyk) || (soSe||bXxs||VJLe|| (iwEX&&KGyI)) || (kVjn&&AFVM) || (aicO|| (EDbq&&QFBT)) || (fXqv) || (vqTg&&JcHL) || (jxLa|| (VyCu&&ZgIB) ||WjVU|| (XSlK&&CTnr)) || (zjFT) || (uhev&&pgdY) || (GzfO) || (UpEL||oqdA) || ((gxBU&&puGT) || (skcO&&vZUQ) || (IvOh&&qkzS) || (kZiQ&&ZKJy))\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Solr Admin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"SolrCore Initialization Failures\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"app_config.solr_path\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"/solr/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Location\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"mapreduce\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"i\",\n    \"feature\": \"an HTTP request to a Hadoop IPC port\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"j\",\n    \"feature\": \"Name: mapreduce\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"k\",\n    \"feature\": \"SkyWalking\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"l\",\n    \"feature\": \"</i> Shiro</li>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"m\",\n    \"feature\": \"shiro-cas\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"n\",\n    \"feature\": \"shiro-cas\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"o\",\n    \"feature\": \"rememberme=deleteMe\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"p\",\n    \"feature\": \"Apache Shiro Quickstart\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"q\",\n    \"feature\": \"Powered by JEECMS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"r\",\n    \"feature\": \"jeesite.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"s\",\n    \"feature\": \"jeesite.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"t\",\n    \"feature\": \"jeesite.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"u\",\n    \"feature\": \"Set-Cookie: jeesite.session.id=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"v\",\n    \"feature\": \"Set-Cookie: jeesite.session.id=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"w\",\n    \"feature\": \" Basic realm=\\\\\\\"dubbo\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"x\",\n    \"feature\": \"Basic realm=\\\\\\\"dubbo\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"y\",\n    \"feature\": \"Dubbo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"z\",\n    \"feature\": \"Unsupported command: GET\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"xuhk\",\n    \"feature\": \"apache-dubbo\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"SRpD\",\n    \"feature\": \"Jeecg-Boot \\u4f01\\u4e1a\\u7ea7\\u5feb\\u901f\\u5f00\\u53d1\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"nURO\",\n    \"feature\": \"Jeecg \\u5feb\\u901f\\u5f00\\u53d1\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"Awcv\",\n    \"feature\": \"'http://fileview.jeecg.com/onlinePreview'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"yJlH\",\n    \"feature\": \"name=\\\\\\\"author\\\\\\\" content=\\\\\\\"http://www.jeeplus.org/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"eDld\",\n    \"feature\": \"<meta name=\\\\\\\"author\\\\\\\" content=\\\\\\\"jeeplus\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"cmwZ\",\n    \"feature\": \"Jeeplus vue\\u5feb\\u901f\\u5f00\\u53d1\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"SexI\",\n    \"feature\": \"jeeplus.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"Rgky\",\n    \"feature\": \"/static/common/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"ojGv\",\n    \"feature\": \"JeePlus \\u5feb\\u901f\\u5f00\\u53d1\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"roZx\",\n    \"feature\": \"<li><i class=\\\\\\\"fa fa-arrow-circle-o-right m-r-xs\\\\\\\"></i> Mybatis</li>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"kYbP\",\n    \"feature\": \"X-Application-Context\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"UDWX\",\n    \"feature\": \"include-mybatis:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"GphA\",\n    \"feature\": \"X-Application-Context\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"oJGD\",\n    \"feature\": \"include-mybatis:\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"tWxw\",\n    \"feature\": \"Server: Netty@SpringBoot\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"TGbB\",\n    \"feature\": \"Whitelabel Error Page\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"RTAn\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"CLUF\",\n    \"feature\": \"Apache ActiveMQ\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"qzbV\",\n    \"feature\": \"8161\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"peQb\",\n    \"feature\": \"Server: Jetty\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"cyxw\",\n    \"feature\": \"realm=\\\\\\\"ActiveMQRealm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"lzQP\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"BDOk\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"DpSq\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"ASkw\",\n    \"feature\": \"server:ActiveMQ\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"wZjW\",\n    \"feature\": \"Magic:ActiveMQ\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"VuEF\",\n    \"feature\": \"realm=\\\\\\\"ActiveMQRealm\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"UQdA\",\n    \"feature\": \"Apache ActiveMQ\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"JPts\",\n    \"feature\": \"Organizational Unit: Apache OFBiz\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"ucnt\",\n    \"feature\": \"X-Jenkins\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"MLeE\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"VmCg\",\n    \"feature\": \"X-Generator: Drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"vZoC\",\n    \"feature\": \"X-Hudson\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"gYSv\",\n    \"feature\": \"X-Required-Permission: hudson.model.Hudson.Read\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"ECbG\",\n    \"feature\": \"X-Jenkins\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"PBWb\",\n    \"feature\": \"28ze\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"bfcs\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"ZCRy\",\n    \"feature\": \"X-Generator: Drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"xDKf\",\n    \"feature\": \"X-Hudson\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"Obsf\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"AFGs\",\n    \"feature\": \"X-Required-Permission: hudson.model.Hudson.Read\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"fZHI\",\n    \"feature\": \"Jenkins-Agent-Protocols\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"FOsG\",\n    \"feature\": \"Content-Type: text/plain\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"OLNQ\",\n    \"feature\": \"RabbitMQ Management\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"RkJE\",\n    \"feature\": \"server:RabbitMQ\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"VBRm\",\n    \"feature\": \"testBanCookie\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"bYdA\",\n    \"feature\": \"testBanCookie\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"mpSD\",\n    \"feature\": \"typeof poppedWindow\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"hUns\",\n    \"feature\": \"client/jquery.client_wev8.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"MPnX\",\n    \"feature\": \"FE\\u534f\\u4f5c\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"NHfV\",\n    \"feature\": \"V_show\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"XWAP\",\n    \"feature\": \"V_hedden\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"FdCG\",\n    \"feature\": \"content=\\\\\\\"Weaver E-mobile\\\\\\\"\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"AHID\",\n    \"feature\": \"/images/login_logo@2x.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"dbgj\",\n    \"feature\": \"window.apiprifix = \\\\\\\"/emp\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"KACQ\",\n    \"feature\": \"\\u79fb\\u52a8\\u7ba1\\u7406\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"nqOf\",\n    \"feature\": \"szFeatures\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"EHhT\",\n    \"feature\": \"redirectUrl\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"cmuQ\",\n    \"feature\": \"\\u7528\\u53cb\\u65b0\\u4e16\\u7eaa\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"mtol\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"ALNr\",\n    \"feature\": \"\\u7528\\u53cbGRP-U8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"HTPK\",\n    \"feature\": \"UFIDA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"MKJh\",\n    \"feature\": \"logo/images/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"Tdxq\",\n    \"feature\": \"logo/images/ufida_nc.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"CPUW\",\n    \"feature\": \"Yonyou NC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"ntZy\",\n    \"feature\": \"<div id=\\\\\\\"nc_text\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"SYML\",\n    \"feature\": \"<div id=\\\\\\\"nc_img\\\\\\\" onmouseover=\\\\\\\"overImage('nc');\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"Scwi\",\n    \"feature\": \"\\u4ea7\\u54c1\\u767b\\u5f55\\u754c\\u9762\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"bTRp\",\n    \"feature\": \"UFIDA NC\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"rmNn\",\n    \"feature\": \"/seeyon/USER-DATA/IMAGES/LOGIN/login.gif\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"HIip\",\n    \"feature\": \"\\u7528\\u53cb\\u81f4\\u8fdcA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"KjOd\",\n    \"feature\": \"/yyoa/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"jkQq\",\n    \"feature\": \"\\u672c\\u7ad9\\u5185\\u5bb9\\u5747\\u91c7\\u96c6\\u4e8e\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"udCj\",\n    \"feature\": \"path=/yyoa\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"QKzy\",\n    \"feature\": \"SY8044\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"jGgC\",\n    \"feature\": \"A6-V5\\u4f01\\u4e1a\\u7248\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"MLSw\",\n    \"feature\": \"seeyon\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"nUmp\",\n    \"feature\": \"seeyonProductId\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"HmLA\",\n    \"feature\": \"/seeyon/common/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"KgkT\",\n    \"feature\": \"var _ctxpath = '/seeyon'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"LCod\",\n    \"feature\": \"A8-V5\\u4f01\\u4e1a\\u7248\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"SDJr\",\n    \"feature\": \"/seeyon/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"uimf\",\n    \"feature\": \"Server: SY8044\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"ajXF\",\n    \"feature\": \"/Jeewms/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"mNpL\",\n    \"feature\": \"Location\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"zJav\",\n    \"feature\": \"Hue - Welcome to Hue\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"CiTA\",\n    \"feature\": \"id=\\\\\\\"jHueNotify\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"HnGI\",\n    \"feature\": \"/static/yarn.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"nOYw\",\n    \"feature\": \"yarn.dt.plugins.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"ZtjX\",\n    \"feature\": \"<b>HttpFs service</b\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"FVKL\",\n    \"feature\": \"E-Business Suite Home Page Redirect\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"yukb\",\n    \"feature\": \"Server: Splunkd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"YsNa\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"mGTH\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"XoMw\",\n    \"feature\": \"Server: Splunkd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"KFpl\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"JfnE\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"KsDg\",\n    \"feature\": \"Splunk.util.normalizeBoolean\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"rQlI\",\n    \"feature\": \"Server: couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"HQjF\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"ZSEk\",\n    \"feature\": \"ID_Converter_Welcome\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"BWnE\",\n    \"feature\": \"Storm UI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"pCUH\",\n    \"feature\": \"nccloud\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"iImb\",\n    \"feature\": \"Location\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"gcWr\",\n    \"feature\": \"JSESSIONID\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"LXRJ\",\n    \"feature\": \"window.location.href=\\\\\\\"platform/pub/welcome.do\\\\\\\";\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"rhpx\",\n    \"feature\": \"Apache Druid\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"xhvc\",\n    \"feature\": \"org.springframework.web.servlet.i18n.CookieLocaleResolver.locale=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"FXBZ\",\n    \"feature\": \"<h1>Whitelabel Error Page</h1>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"NxYW\",\n    \"feature\": \"org.springframework.web.servlet.i18n.CookieLocaleResolver.locale=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"srJR\",\n    \"feature\": \"JavaMelody\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"Npce\",\n    \"feature\": \"X-Application-Context\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"eCnx\",\n    \"feature\": \"JavaMelody\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"YQZq\",\n    \"feature\": \"X-Application-Context\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"TMby\",\n    \"feature\": \"/opennms/login.jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"tsFP\",\n    \"feature\": \"/opennms/login.jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"qriA\",\n    \"feature\": \"OpenNMS? is a registered trademark of\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"Vjsn\",\n    \"feature\": \"opennms web console\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"Onge\",\n    \"feature\": \"/opennms/index.jsp\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"QEtC\",\n    \"feature\": \"Apache Unomi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"vgwJ\",\n    \"feature\": \"Server: Jetty\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"WYlr\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"cMBA\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"GcQb\",\n    \"feature\": \"Server: Jetty\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"hKZt\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"TxmS\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"fWPI\",\n    \"feature\": \"application/json\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"InPw\",\n    \"feature\": \"build_hash\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"vZbU\",\n    \"feature\": \"elastic\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"DYvw\",\n    \"feature\": \"realm=\\\\\\\"ElasticSearch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"sEHi\",\n    \"feature\": \"realm=\\\\\\\"ElasticSearch\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"fbRX\",\n    \"feature\": \"Welcome to JBoss\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"ASEW\",\n    \"feature\": \"Welcome to JBoss AS\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"AhQC\",\n    \"feature\": \"JBoss-EAP\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"tbZA\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"RwNT\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"UeAt\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"idmJ\",\n    \"feature\": \"JBoss\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"KJSX\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"EfjK\",\n    \"feature\": \"Routers\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"Bomy\",\n    \"feature\": \"X-Generator: Drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"xfsE\",\n    \"feature\": \"28ze\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"JqwD\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"SATv\",\n    \"feature\": \"server: JBoss\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"PSDN\",\n    \"feature\": \"server: JBoss-EAP\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"FrJB\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"kBZN\",\n    \"feature\": \"background: transparent url(images/login_logo.gif) no-repeat\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"MKrT\",\n    \"feature\": \"Openfire Admin Console\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"wctn\",\n    \"feature\": \"Openfire HTTP Binding Service\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"COuy\",\n    \"feature\": \"Weblogic\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"ONcr\",\n    \"feature\": \"content=\\\\\\\"WebLogic Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"BrKM\",\n    \"feature\": \"<h1>Welcome to Weblogic Application\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"gkTC\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"gXKl\",\n    \"feature\": \"boa\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"nSpB\",\n    \"feature\": \"RouterOS\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"UPvR\",\n    \"feature\": \"X-Generator: Drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"dbmG\",\n    \"feature\": \"Weblogic\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"UhVl\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"gJRK\",\n    \"feature\": \"drupal\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"KWyg\",\n    \"feature\": \" Apache,Tomcat,Jboss\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"BWVp\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"QlqT\",\n    \"feature\": \"<h2>Blog Comments</h2>\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"DsYT\",\n    \"feature\": \"Error 404--Not Found\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"HorR\",\n    \"feature\": \"Oracle BI Publisher Enterprise\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"oNUy\",\n    \"feature\": \"vSphere Web Client\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"WMqn\",\n    \"feature\": \"Manage this JBoss AS Instance\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"NquJ\",\n    \"feature\": \"Welcome to JBoss AS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"qfnk\",\n    \"feature\": \"JBossAS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"QgmA\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"NeYl\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"veRN\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"RawC\",\n    \"feature\": \"JBossAS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"LsAa\",\n    \"feature\": \"couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"lNya\",\n    \"feature\": \"ReeCam IP Camera\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"kAbw\",\n    \"feature\": \"sheight*window.screen.deviceYDPI\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"JCez\",\n    \"feature\": \"CAS &#8211; Central Authentication Service\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"eTZt\",\n    \"feature\": \"BMC Control-M Root CA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"ZOKn\",\n    \"feature\": \"Control-M Welcome Page\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"OXJL\",\n    \"feature\": \"JAMES SMTP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"lFpz\",\n    \"feature\": \"JAMES POP3 Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"apEy\",\n    \"feature\": \"Apache JAMES awesome SMTP Server\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"YZtO\",\n    \"feature\": \"Email Server (Apache JAMES)\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"ifKq\",\n    \"feature\": \"css/ubnt-icon\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"PyZQ\",\n    \"feature\": \"/static/js/uv3.f52e5bd5bc905aef1f095e4e2c1299b3c2bae675.min.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"folQ\",\n    \"feature\": \"NVR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"qJsU\",\n    \"feature\": \"CommonName: UniFi-Video Controller\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"PxDX\",\n    \"feature\": \"Organizational Unit: R&D\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"dRTt\",\n    \"feature\": \"j_spring_security_check\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"csPj\",\n    \"feature\": \"MobileIron\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"kmDl\",\n    \"feature\": \"CloudCenter Suite\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"CcuJ\",\n    \"feature\": \"CommonName: ccs.cisco.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"eRrV\",\n    \"feature\": \"Organization: Cisco Systems, Inc.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"zsUR\",\n    \"feature\": \"UniFi Network\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"MaGp\",\n    \"feature\": \"VMware HCX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"MZow\",\n    \"feature\": \"CommonName: hcx.local\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"KdTU\",\n    \"feature\": \"Organization: VMware\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"iGdr\",\n    \"feature\": \"/hybridity/ui/hcx-client/index.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"Altx\",\n    \"feature\": \"Location\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"ilwj\",\n    \"feature\": \"VMware Horizon\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"mFhg\",\n    \"feature\": \"href='https://www.vmware.com/go/viewclients'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"vqWJ\",\n    \"feature\": \"alt=\\\\\\\"VMware Horizon\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"XhnG\",\n    \"feature\": \"VMware NSX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"ugQr\",\n    \"feature\": \"Server: NSX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"TdiH\",\n    \"feature\": \"Server: NSX LB\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"BJDQ\",\n    \"feature\": \"/VMW_NSX_Logo-Black-Triangle-500w.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"bmvO\",\n    \"feature\": \"Server: NSX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"IVsG\",\n    \"feature\": \"Server: NSX LB\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"Nzqx\",\n    \"feature\": \"vSphere Web Client\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"yzJp\",\n    \"feature\": \"vRealize Operations Tenant App\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"KOhm\",\n    \"feature\": \"codebuild\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"SjLJ\",\n    \"feature\": \"Organization: Amazon\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"qUOD\",\n    \"feature\": \"Location: /workspaceone/index.html\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"XKqs\",\n    \"feature\": \"Location: /SAAS/apps/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"WiUr\",\n    \"feature\": \"Content-Length: 0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"Wslo\",\n    \"feature\": \"Workspace ONE Access\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"wbZP\",\n    \"feature\": \"content=\\\\\\\"VMware, Inc.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"PCAR\",\n    \"feature\": \"<div class=\\\\\\\"admin-header-org\\\\\\\">Workspace ONE Access</div>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"wEUN\",\n    \"feature\": \"VMware Workspace ONE? Assist\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"gLsx\",\n    \"feature\": \"VMware Identity Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"ZPil\",\n    \"feature\": \"/cfg/help/getHelpLink\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"fmqJ\",\n    \"feature\": \"<h2>VMware Identity Manager Portal\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"cKmV\",\n    \"feature\": \"Spring Batch Admin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"uxIv\",\n    \"feature\": \"Spring Batch Lightmin\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"Lyqb\",\n    \"feature\": \"content=\\\\\\\"OpenCms\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"UiSq\",\n    \"feature\": \"Powered by OpenCms\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"wHlc\",\n    \"feature\": \"Couchdb\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"pPZh\",\n    \"feature\": \"section-Main-WelcomeToApacheJSPWiki\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"fwCS\",\n    \"feature\": \"/scripts/jspwiki-common.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"DPGH\",\n    \"feature\": \"jspwiki_print.css\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"cZPX\",\n    \"feature\": \"<base href=\\\\\\\"/zipkin/\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"mOkN\",\n    \"feature\": \"location: /zipkin/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"rksB\",\n    \"feature\": \"Armeria\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"thMS\",\n    \"feature\": \"Location: ./zipkin/\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"Bnsq\",\n    \"feature\": \"Content-Length: 0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"ViHB\",\n    \"feature\": \"CodePipeline\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"lGOo\",\n    \"feature\": \"Organization: Amazon\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"wqCJ\",\n    \"feature\": \"vRealize Operations Manager\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"Uhyk\",\n    \"feature\": \"VMware vRealize Operations\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"soSe\",\n    \"feature\": \"Server: VMware Horizon DaaS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"bXxs\",\n    \"feature\": \"VMware Horizon DaaS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"VJLe\",\n    \"feature\": \"Server: VMware Horizon DaaS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"iwEX\",\n    \"feature\": \"Organization: VMware\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"KGyI\",\n    \"feature\": \"CommonName: DaaS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"kVjn\",\n    \"feature\": \"quicksight\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"AFVM\",\n    \"feature\": \"Organization: Amazon\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"aicO\",\n    \"feature\": \"Apache Unomi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"EDbq\",\n    \"feature\": \"Apache Unomi Welcome Page\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"QFBT\",\n    \"feature\": \"Logo Apache Unomi\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"fXqv\",\n    \"feature\": \"Index - Elasticsearch Engineer\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"vqTg\",\n    \"feature\": \"VMware Carbon Black EDR\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"JcHL\",\n    \"feature\": \"versionNumber\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"jxLa\",\n    \"feature\": \"VMware NSX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"VyCu\",\n    \"feature\": \"Server: NSX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"ZgIB\",\n    \"feature\": \"Server: NSX LB\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"WjVU\",\n    \"feature\": \"/VMW_NSX_Logo-Black-Triangle-500w.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"XSlK\",\n    \"feature\": \"Server: NSX\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"CTnr\",\n    \"feature\": \"Server: NSX LB\",\n    \"is_equal\": false\n  }, {\n    \"label\": \"zjFT\",\n    \"feature\": \"TamronOS IPTV\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"uhev\",\n    \"feature\": \"greengrass\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"pgdY\",\n    \"feature\": \"Organization: Amazon\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"GzfO\",\n    \"feature\": \"Tanzu Observability\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"UpEL\",\n    \"feature\": \"vRealize Log Insight\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"oqdA\",\n    \"feature\": \"VMware vRealize Log Insight\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"gxBU\",\n    \"feature\": \"/core/api/Console/Session\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"puGT\",\n    \"feature\": \"Location\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"skcO\",\n    \"feature\": \"/core/api/Console/Session\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"vZUQ\",\n    \"feature\": \"Location\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"IvOh\",\n    \"feature\": \"CommonName: openmanage1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"qkzS\",\n    \"feature\": \"Organization: Dell Inc.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"kZiQ\",\n    \"feature\": \"url: '/core/api/Console/Configuration'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"ZKJy\",\n    \"feature\": \"/topic/messages\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"APACHE-JSPWiki\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"section-Main-WelcomeToApacheJSPWiki\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/scripts/jspwiki-common.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"jspwiki_print.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"mobileiron-security-platform\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"j_spring_security_check\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"MobileIron\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"FORESCOUT-Administration\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Forescout Web Client\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"amazon-codebuild\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"codebuild\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Organization: Amazon\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"amazon-CodePipeline\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CodePipeline\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Organization: Amazon\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"amazon-greengrass\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"greengrass\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Organization: Amazon\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"amazon-QuickSight\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"quicksight\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Organization: Amazon\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"bmc-Discovery\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BMC Discovery Outpost: Login\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BROADCOM-Layer7-API-Gateway\",\n  \"logic\": \"a||b||c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Server: Layer7-API-Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Server: Layer7-API-Gateway\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Layer7 API Gateway\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BROADCOM-Layer7-Live-API-Creator\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var restrooturl ='/cspm/rest/'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Layer7 Live API Creator\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BROADCOM-Symantec-EDR\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Symantec EDR\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"bmc-Control-M\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"BMC Control-M Root CA\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Control-M Welcome Page\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"CISCO-CloudCenter-Suite\",\n  \"logic\": \"a|| (b&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"CloudCenter Suite\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"CommonName: ccs.cisco.com\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"Organization: Cisco Systems, Inc.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"BROADCOM-Advanced-Threat-Protection\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Symantec Advanced Threat Protection\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u706b\\u7ed2\\u5b89\\u5168-\\u7ec8\\u7aef\\u5b89\\u5168\\u63a7\\u5236\\u4e2d\\u5fc3\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u706b\\u7ed2\\u7ec8\\u7aef\\u5b89\\u5168\\u63a7\\u5236\\u4e2d\\u5fc3\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"HuorongESS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"Microsoft-Azure-Function\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"Your Azure Function App is up and running.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"OpenMRS\",\n  \"logic\": \"((a||b) && (c||d)) ||e|| (f&&g)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var openmrscontextpath = '/openmrs';\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"var openmrs_context_path = 'openmrs';\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/openmrs/images/openmrs-favicon.png\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"xmlns:openmrs=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"Partners In Health: OpenMRS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"src=\\\\\\\"openmrs.js\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"OpenMRS\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ABUS-\\u89c6\\u9891\\u76d1\\u63a7\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ui/images/abusLogo.png\\\\\\\" alt=\\\\\\\"ABUS\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"activeUsername\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"YISA-\\u9879\\u76ee\\u7ba1\\u7406\\u7cfb\\u7edf\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4ee5\\u8428\\u9879\\u76ee\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HIKVISION-\\u667a\\u80fd\\u5e94\\u7528\\u670d\\u52a1\\u5668\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"placeholder=\\\\\\\"{{oLan.password}}\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"oCheckUser.szPassWd\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/ui/css/style.css\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u7d2b\\u5149\\u534e\\u667a-\\u89c6\\u9891\\u76d1\\u63a7\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"var g_plugindownloadurl = '/video-player/unisinsight.msi';\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"loginWithNewPwd\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"uniview-\\u793e\\u4f1a\\u8d44\\u6e90\\u5b89\\u5168\\u63a5\\u5165\\u7f51\\u5173\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<h3>\\u793e\\u4f1a\\u8d44\\u6e90\\u5b89\\u5168\\u63a5\\u5165\\u7f51\\u5173</h3>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u6d59\\u6c5f\\u5b87\\u89c6\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"<form name=\\\\\\\"loginForm\\\\\\\" action=\\\\\\\"cgi-bin/main.cgi\\\\\\\" method=\\\\\\\"post\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"class=\\\\\\\"submit\\\\\\\" onclick=\\\\\\\"return validate();\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"uniview-\\u516c\\u5b89\\u56fe\\u50cf\\u5e94\\u7528\\u5e73\\u53f0\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u516c\\u5b89\\u56fe\\u50cf\\u5e94\\u7528\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u6d59\\u6c5f\\u5b87\\u89c6\\u79d1\\u6280\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"YISA-\\u89c6\\u56fe\\u5168\\u76ee\\u6807\\u5e94\\u7528\\u7cfb\\u7edf\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4ee5\\u8428\\u89c6\\u56fe\\u5168\\u76ee\\u6807\\u5e94\\u7528\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u4e91\\u4ece\\u79d1\\u6280-cloudwalk\\u76d1\\u63a7\\u4e2d\\u5fc3\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"cloudwalk\\u914d\\u7f6e\\u6587\\u4ef6\\u52a9\\u624b\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MEGVII-\\u4eba\\u50cf\\u5927\\u6570\\u636e\\u5e73\\u53f0\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4eba\\u50cf\\u5927\\u6570\\u636e\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Insight Portrait System\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"map/ol.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HIKVISION-\\u667a\\u80fd\\u5e94\\u7528\\u5e73\\u53f0\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u667a\\u80fd\\u5e94\\u7528\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/error/browser.do\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u4e2d\\u65b0\\u7f51\\u5b89-\\u4e2d\\u65b0\\u91d1\\u76fe\\u6f0f\\u6d1e\\u626b\\u63cf\\u7cfb\\u7edfZX-Scanner\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u4e2d\\u65b0\\u91d1\\u76fe\\u6f0f\\u6d1e\\u626b\\u63cf\\u7cfb\\u7edfZX-Scanner\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u91d1\\u7535\\u7f51\\u5b89-\\u5b89\\u5168\\u9694\\u79bb\\u4e0e\\u4fe1\\u606f\\u4ea4\\u6362\\u7cfb\\u7edf\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u91d1\\u7535\\u7f51\\u5b89\\u5b89\\u5168\\u9694\\u79bb\\u4e0e\\u4fe1\\u606f\\u4ea4\\u6362\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"jdwa/sysconf/oem\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u5a92\\u4f53\\u670d\\u52a1\\u5668\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u5a92\\u4f53\\u670d\\u52a1\\u5668\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Start added by h03350 for server switching\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u9752\\u85e4\\u4e91\\u5b89\\u5168-\\u4e91\\u5e73\\u53f0\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"content=\\\\\\\"\\u4e91\\u5b89\\u5168,\\u5b89\\u5168\\u4e00\\u4f53\\u5316\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/main.html\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HUAWEI-M2241\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"realm=\\\\\\\"huawei M2241\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NSFOCUS-\\u5927\\u6570\\u636e\\u5b89\\u5168\\u5e73\\u53f0\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<base href=\\\\\\\"/WebApi/login/static/dist/\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<title></title>\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"H3C-WiNet\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WiNet\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"H3C \",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u9633\\u5149\\u7535\\u6e90-\\u4ea7\\u54c1\",\n  \"logic\": \"(a||b) &&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<title class=\\\\\\\"title\\\\\\\">WiNet</title>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"<title class=\\\\\\\"title\\\\\\\">logger</title>\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"properly without JavaScript enabled.\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u5929\\u884c\\u7f51\\u5b89-\\u96c6\\u4e2d\\u76d1\\u63a7\\u4e0e\\u7ba1\\u7406\\u7cfb\\u7edf\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u96c6\\u4e2d\\u76d1\\u63a7\\u4e0e\\u7ba1\\u7406\\u7cfb\\u7edf\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"loginAction.action\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u89c6\\u9891\\u56fe\\u50cf\\u4fe1\\u606f\\u6570\\u636e\\u5e93\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u89c6\\u9891\\u56fe\\u50cf\\u4fe1\\u606f\\u6570\\u636e\\u5e93\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/web/VIIS/\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HIKVISION-\\u89c6\\u9891\\u56fe\\u50cf\\u4fe1\\u606f\\u6570\\u636e\\u5e93\",\n  \"logic\": \"(a&&b) || (c&&d)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u676d\\u5dde\\u6d77\\u5eb7\\u5a01\\u89c6\\u7cfb\\u7edf\\u6280\\u672f\\u6709\\u9650\\u516c\\u53f8\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u89c6\\u9891\\u56fe\\u50cf\\u4fe1\\u606f\\u6570\\u636e\\u5e93\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"\\u89c6\\u9891\\u56fe\\u50cf\\u4fe1\\u606f\\u6570\\u636e\\u5e93\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Set-Cookie: portal_locale_cookie.sig=\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"NetPosa-VIID\\u516c\\u5b89\\u89c6\\u9891\\u56fe\\u50cf\\u4fe1\\u606f\\u6570\\u636e\\u5e93\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VIID\\u516c\\u5b89\\u89c6\\u9891\\u56fe\\u50cf\\u4fe1\\u606f\\u6570\\u636e\\u5e93\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"MEGVII-\\u65f7\\u89c6\\u4e91\\u56fe\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u65f7\\u89c6\\u4e91\\u56fe-\\u516c\\u5b89\\u89c6\\u9891\\u56fe\\u50cf\\u4fe1\\u606f\\u6570\\u636e\\u5e93\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"dahua-NVR\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"WEB SERVICE\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"baseProj/js/component\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"src=\\\\\\\"./cap.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"DELL-EMC-OpenManage-Enterprise\",\n  \"logic\": \"(a&&b) || (c&&d) || (e&&f) || (g&&h)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"/core/api/Console/Session\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"Location\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"/core/api/Console/Session\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"Location\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"CommonName: openmanage1\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"f\",\n    \"feature\": \"Organization: Dell Inc.\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"g\",\n    \"feature\": \"url: '/core/api/Console/Configuration'\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"h\",\n    \"feature\": \"/topic/messages\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"HD-Network-Real-time-Monitoring-System\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"<a href=\\\\\\\"NetActiveX.exe\\\\\\\" id=\\\\\\\"LinkAddress\\\\\\\">\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"onkeydown=\\\\\\\"KeyDownHandler();\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"SonicWall-Email-Security\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ESMTP SonicWall\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"\\u84dd\\u4fe1\",\n  \"logic\": \"a||b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"\\u84dd\\u4fe1-\\u4f01\\u4e1a\\u7ea7\\u5b89\\u5168\\u79fb\\u52a8\\u5de5\\u4f5c\\u5e73\\u53f0\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"\\u84dd\\u4fe1\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-VPN\",\n  \"logic\": \"(a||b||c||d) &&e\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"VPN100\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"VPN300\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"VPN50\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"d\",\n    \"feature\": \"VPN1000\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"e\",\n    \"feature\": \"/ext-js/app/common/zyFunction.js\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-ATP700\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ATP700\",\n    \"is_equal\": true\n  }]\n}, {\n  \"name\": \"ZyXEL-ATP100W\",\n  \"logic\": \"a\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"ATP100W\",\n    \"is_equal\": true\n  }]\n},{\n  \"name\": \"长亭谛听蜜罐\",\n  \"logic\": \"a&&b\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"unsafe-url\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"BugScan\",\n    \"is_equal\": true\n  }]\n},{\n  \"name\": \"长亭谛听蜜罐\",\n  \"logic\": \"a&&b&&c\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"正在验证登录\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"js/jquery.min.js?t=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"后台管理框架\",\n    \"is_equal\": true\n  }]\n},{\n  \"name\": \"长亭谛听蜜罐\",\n  \"logic\": \"(a&&b)||(a&&c)\",\n  \"rule\": [{\n    \"label\": \"a\",\n    \"feature\": \"OA办公系统\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"b\",\n    \"feature\": \"/static/js/2.ca599e2d.chunk.js?t=\",\n    \"is_equal\": true\n  }, {\n    \"label\": \"c\",\n    \"feature\": \"http://127.0.0.1:8080/\",\n    \"is_equal\": true\n  },{\n    \"name\": \"长亭谛听蜜罐\",\n    \"logic\": \"(a&&b)||c\",\n    \"rule\": [{\n      \"label\": \"a\",\n      \"feature\": \"WordPress site v4.5\",\n      \"is_equal\": true\n    }, {\n      \"label\": \"b\",\n      \"feature\": \"\\u5c55\\u5f00\\u5b50\\u83dc\\u5355\",\n      \"is_equal\": true\n    }, {\n      \"label\": \"c\",\n      \"feature\": \"<script type=\\\"text/javascript\\\" src=\\\"/js/moment.js\\\" referrerpolicy=\\\"unsafe-url\\\"></script></head>\",\n      \"is_equal\": true\n    }]\n  },{\n    \"name\": \"长亭谛听蜜罐\",\n    \"logic\": \"a\",\n    \"rule\": [{\n      \"label\": \"a\",\n      \"feature\": \"<script src=\\\"/media/jui/js/jquery.min.js?t=1670805856\\\"></script>\",\n      \"is_equal\": true\n    }]\n  }]\n}]"
  },
  {
    "path": "backend/fingerprints/wappalyzer.json",
    "content": "{\r\n    \"apps\": {\r\n        \"1C-Bitrix\": {\r\n            \"cats\": [\r\n                1,\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"bitrix_sm_guest_id\": \"\",\r\n                \"bitrix_sm_last_ip\": \"\",\r\n                \"bitrix_sm_sale_uid\": \"\"\r\n            },\r\n            \"headers\": {\r\n                \"set-cookie\": \"bitrix_\",\r\n                \"x-powered-cms\": \"bitrix site manager\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"bitrix(?:\\\\.info/|/js/main/core)\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"1C-Bitrix is a system of web project management, universal software for the creation, support and successful development of corporate websites and online stores.\",\r\n            \"website\": \"https://www.1c-bitrix.ru\"\r\n        },\r\n        \"2B Advice\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"js\": [\r\n                \"bbcookiecontroler\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"2badvice-cdn\\\\.azureedge\\\\.net\"\r\n            ],\r\n            \"description\": \"2B Advice provides a plug-in to manage GDPR cookie consent.\",\r\n            \"website\": \"https://www.2b-advice.com/en/data-privacy-software/cookie-consent-plugin/\"\r\n        },\r\n        \"30namaPlayer\": {\r\n            \"cats\": [\r\n                14\r\n            ],\r\n            \"description\": \"30namaPlayer is a modified version of Video.js to work with videos on HTML using javascript.\",\r\n            \"website\": \"https://30nama.com/\"\r\n        },\r\n        \"33Across\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"tynt\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.33across\\\\.com/\",\r\n                \"\\\\.tynt\\\\.com/\"\r\n            ],\r\n            \"description\": \"33Across is a technology company focused on solving the challenge of consumer attention for automated advertising.\",\r\n            \"website\": \"https://www.33across.com\"\r\n        },\r\n        \"34SP.com\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"description\": \"34SP.com specialises in website hosting, discount domain names, low cost VPS servers and dedicated servers.\",\r\n            \"website\": \"https://www.34sp.com\"\r\n        },\r\n        \"4-Tell\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"cookies\": {\r\n                \"4tell\": \"\",\r\n                \"4tellcart\": \"\",\r\n                \"4tellsession\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"_4tellboost\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"4tellcdn\\\\.azureedge\\\\.net\"\r\n            ],\r\n            \"description\": \"4-Tell is an ecommerce software company for retailers with AI-powered personalisation and recommendations products.\",\r\n            \"website\": \"https://4-tell.com\"\r\n        },\r\n        \"42stores\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"headers\": {\r\n                \"powered-by\": \"^42stores$\"\r\n            },\r\n            \"description\": \"42stores is a French SaaS ecommerce solution that was established in 2008. It offers a range of features such as monitoring, customer support, and regular updates. The platform is known for its flexibility and modularity, making it possible to integrate with various ERP systems.\",\r\n            \"website\": \"https://www.42stores.com\"\r\n        },\r\n        \"51.LA\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"la.config.ck\"\r\n            ],\r\n            \"description\": \"51.LA is a Chinese based website visitor counter.\",\r\n            \"website\": \"https://www.51.la\"\r\n        },\r\n        \"5centsCDN\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"headers\": {\r\n                \"x-cdn\": \"^5centscdn$\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"\\\\.5centscdn\\\\.com/\"\r\n            ],\r\n            \"description\": \"5centsCDN is a content delivery networks service provider.\",\r\n            \"website\": \"https://www.5centscdn.net\"\r\n        },\r\n        \"6sense\": {\r\n            \"cats\": [\r\n                32,\r\n                76\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.6sc\\\\.co/\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"\\\\.6sc\\\\.co/\"\r\n            ],\r\n            \"description\": \"6sense is a B2B predictive intelligence platform for marketing and sales.\",\r\n            \"website\": \"https://6sense.com\"\r\n        },\r\n        \"8base\": {\r\n            \"cats\": [\r\n                3,\r\n                62\r\n            ],\r\n            \"description\": \"8base is a low-code development platform for building and running enterprise-grade digital products including SaaS solutions, marketplaces and other go-to-market applications.\",\r\n            \"website\": \"https://8base.com\"\r\n        },\r\n        \"\\u003cmodel-viewer\\u003e\": {\r\n            \"cats\": [\r\n                105\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/model-viewer/dist/model-viewer\\\\.min\\\\.js\"\r\n            ],\r\n            \"description\": \"\\u003cmodel-viewer\\u003e is an open-source web component developed by Google and maintained through GitHub. \\u003cmodel-viewer\\u003e aims at putting 3D content on the web easily with a few lines of HTML code. This was first introduced with Chrome 72 in July 2019 and enables users to view 3D in the browser and mobile devices.\",\r\n            \"website\": \"https://modelviewer.dev\"\r\n        },\r\n        \"@sulu/web\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"web.startcomponents\"\r\n            ],\r\n            \"website\": \"https://github.com/sulu/web-js\"\r\n        },\r\n        \"A-Frame\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"aframe.version\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003ca-scene[^\\u003c\\u003e]*\\u003e\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/?([\\\\d.]+)?/aframe(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"Three.js\"\r\n            ],\r\n            \"website\": \"https://aframe.io\"\r\n        },\r\n        \"A8.net\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"js\": [\r\n                \"a8sales\",\r\n                \"a8salescookierepository\",\r\n                \"map_a8\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"statics\\\\.a8\\\\.net\"\r\n            ],\r\n            \"description\": \" A8.net is an affiliate marketing network.\",\r\n            \"website\": \"https://www.a8.net\"\r\n        },\r\n        \"AB Tasty\": {\r\n            \"cats\": [\r\n                74\r\n            ],\r\n            \"js\": [\r\n                \"_abtasty\",\r\n                \"abtasty\",\r\n                \"loadabtasty\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"try\\\\.abtasty\\\\.com\"\r\n            ],\r\n            \"description\": \"AB Tasty is a customer experience optimisation company. AB Tasty offers AI-driven experimentation, personalisation, and product optimisation platforms for user testing.\",\r\n            \"website\": \"https://www.abtasty.com\"\r\n        },\r\n        \"ABOUT YOU Commerce Suite\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"description\": \"ABOUT YOU Commerce Suite is an enterprise ready infrastructure solution designed for ecommerce companies.\",\r\n            \"website\": \"https://commercesuite.aboutyou.com\"\r\n        },\r\n        \"ABP Framework\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"js\": [\r\n                \"abp.timing.timezone\",\r\n                \"abp.version\"\r\n            ],\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"description\": \"ABP Framework is a complete infrastructure to create modern web applications by following the best practices and conventions of software development.\",\r\n            \"website\": \"https://abp.io/\"\r\n        },\r\n        \"AD EBiS\": {\r\n            \"cats\": [\r\n                36,\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"ebis.c.pageurl\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.ebis\\\\.ne\\\\.jp/\"\r\n            ],\r\n            \"description\": \"AD EBiS is an advertising and marketing platform that offers advertisement effectiveness measurement, access and user analysis.\",\r\n            \"website\": \"https://www.ebis.ne.jp\"\r\n        },\r\n        \"ADAPT\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"image\": [\r\n                    \"assets\\\\.adapt\\\\.ws/\"\r\n                ]\r\n            },\r\n            \"description\": \"ADAPT is a subscription-based app that allows anyone to create video focused online store in minutes on their phone.\",\r\n            \"website\": \"https://adapt.ws\"\r\n        },\r\n        \"ADFOX\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"adfox_getcodescript\",\r\n                \"adfoxasyncparams\",\r\n                \"adfoxbiddersmap\",\r\n                \"adfoxparams\",\r\n                \"site.adfoxparams\"\r\n            ],\r\n            \"description\": \"ADFOX is an advertising management platform for media publishers.\",\r\n            \"website\": \"https://adfox.yandex.ru\"\r\n        },\r\n        \"AFThemes CoverNews\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/covernews(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"AFThemes CoverNews is a clean and elegant free WordPress theme that is perfect for online blog and magazine.\",\r\n            \"website\": \"https://afthemes.com/products/covernews\"\r\n        },\r\n        \"ALL-INKL\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"description\": \"ALL-INKL is a German-based web hosting provider that promises to offer high-performance services for fair prices.\",\r\n            \"website\": \"https://all-inkl.com\"\r\n        },\r\n        \"AMP\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"html\": [\r\n                \"\\u003chtml[^\\u003e]* (?:amp|⚡)[^-]\",\r\n                \"\\u003clink rel=\\\"amphtml\\\"\"\r\n            ],\r\n            \"description\": \"AMP, originally created by Google, is an open-source HTML framework developed by the AMP open-source Project. AMP is designed to help webpages load faster.\",\r\n            \"website\": \"https://www.amp.dev\"\r\n        },\r\n        \"AMP for WordPress\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^amp plugin v(\\\\d+\\\\.\\\\d+.*)$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"AMP\"\r\n            ],\r\n            \"description\": \"AMP for WordPress automatically adds Accelerated Mobile Pages (Google AMP Project) functionality to your WordPress site.\",\r\n            \"website\": \"https://amp-wp.org\"\r\n        },\r\n        \"AOLserver\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"aolserver/?([\\\\d.]+)?\\\\;version:\\\\1\"\r\n            },\r\n            \"website\": \"https://aolserver.com\",\r\n            \"cpe\": \"cpe:2.3:a:aol:aolserver:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"AOS\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"aos.init\",\r\n                \"aos.refresh\",\r\n                \"aos.refreshhard\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/typo3conf/ext/udem_vendor/resources/public/aos-([\\\\d\\\\.]+)\\\\;version:\\\\1\",\r\n                \"unpkg\\\\.com/aos@([\\\\d\\\\.]+)/dist/aos\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"JavaScript library to animate elements on your page as you scroll.\",\r\n            \"website\": \"https://michalsnik.github.io/aos/\"\r\n        },\r\n        \"APC\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"APC offers door-to-door parcel and mail delivery.\",\r\n            \"website\": \"https://www.apc-pli.com\"\r\n        },\r\n        \"ARI Network Services\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.ari-secure\\\\.com/\"\r\n            ],\r\n            \"description\": \"ARI Network Services provides website, software, and data solutions to help dealers, distributors, and OEMs improve their selling process.\",\r\n            \"website\": \"https://arinet.com\"\r\n        },\r\n        \"ASP.NET Boilerplate\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"js\": [\r\n                \"abp.aspnetboilerplate.version\",\r\n                \"abp.timing.utcclockprovider\"\r\n            ],\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"description\": \"ASP.NET Boilerplate is a general purpose application framework especially designed for new modern web applications. It uses already familiar tools and implements best practices around them to provide you a SOLID development experience.\",\r\n            \"website\": \"https://www.aspnetboilerplate.com\"\r\n        },\r\n        \"AT Internet Analyzer\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"atinternet\",\r\n                \"xtsite\"\r\n            ],\r\n            \"website\": \"https://atinternet.com/en\"\r\n        },\r\n        \"AT Internet XiTi\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"xt_click\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"xiti\\\\.com/hit\\\\.xiti\"\r\n            ],\r\n            \"website\": \"https://atinternet.com/en\"\r\n        },\r\n        \"ATSHOP\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.atshop\\\\.io\"\r\n            ],\r\n            \"description\": \"ATSHOP is an all-in-one ecommerce platform.\",\r\n            \"website\": \"https://atshop.io\"\r\n        },\r\n        \"AWIN\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"cookies\": {\r\n                \"_aw_xid\": \"\",\r\n                \"bagawin\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"awin.tracking\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"dwin1\\\\.com\"\r\n            ],\r\n            \"description\": \"AWIN is a global affiliate marketing network.\",\r\n            \"website\": \"https://www.awin.com\"\r\n        },\r\n        \"AWS Certificate Manager\": {\r\n            \"cats\": [\r\n                70\r\n            ],\r\n            \"implies\": [\r\n                \"Amazon Web Services\"\r\n            ],\r\n            \"description\": \"AWS Certificate Manager is a service that lets you easily provision, manage, and deploy public and private Secure Sockets Layer/Transport Layer Security (SSL/TLS) certificates for use with AWS services and your internal connected resources.\",\r\n            \"website\": \"https://aws.amazon.com/certificate-manager/\"\r\n        },\r\n        \"AWS WAF Captcha\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"headers\": {\r\n                \"x-amzn-waf-action\": \"^captcha$\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"captcha\\\\.awswaf\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Amazon Web Services\"\r\n            ],\r\n            \"description\": \"AWS WAF Captcha helps block unwanted bot traffic by requiring users to successfully complete challenges before their web request are allowed to reach AWS WAF protected resources.\",\r\n            \"website\": \"https://docs.aws.amazon.com/waf/latest/developerguide/waf-captcha.html\"\r\n        },\r\n        \"AWStats\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"awstats ([\\\\d.]+(?: \\\\(build [\\\\d.]+\\\\))?)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Perl\"\r\n            ],\r\n            \"website\": \"https://awstats.sourceforge.net\",\r\n            \"cpe\": \"cpe:2.3:a:laurent_destailleur:awstats:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"AbhiCMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"abhicms\\\\s([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"AbhiCMS is a lesser-known content management system that may not have a significant user base or active development community.\",\r\n            \"website\": \"https://website999.org\"\r\n        },\r\n        \"Abicart\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"abicart\",\r\n                    \"textalk webshop\"\r\n                ]\r\n            },\r\n            \"description\": \"Abicart is an ecommerce platform developed by the Swedish company Abicart AB.\",\r\n            \"website\": \"https://abicart.com/\"\r\n        },\r\n        \"Absorb\": {\r\n            \"cats\": [\r\n                21\r\n            ],\r\n            \"cookies\": {\r\n                \"_absorb_ui_session\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"absorblms\"\r\n            ],\r\n            \"description\": \"Absorb is a cloud-based learning management system.\",\r\n            \"website\": \"https://www.absorblms.com\"\r\n        },\r\n        \"Accentuate Custom Fields\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scripts\": [\r\n                \"\\\\.accentuate\\\\.io/\"\r\n            ],\r\n            \"description\": \"Accentuate Custom Fields is the professional and de facto solution to easily extend your Shopify store with your own custom fields such multi-language text fields, images, checkboxes, dates, selection list and custom JSON objects.\",\r\n            \"website\": \"https://www.accentuate.io\"\r\n        },\r\n        \"AccessTrade\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"accesstrade\\\\.net/js/\",\r\n                \"click\\\\.accesstra\\\\.de/js/nct/lp\\\\.js\"\r\n            ],\r\n            \"description\": \"AccessTrade is an affiliate marketing platform based on the CPA model developed by Interspace Co.\",\r\n            \"website\": \"https://accesstrade.global/\"\r\n        },\r\n        \"AccessiBe\": {\r\n            \"cats\": [\r\n                68\r\n            ],\r\n            \"js\": [\r\n                \"acsb\",\r\n                \"acsbjs\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"acsbapp?\\\\.com/.*/acsb\\\\.js\"\r\n            ],\r\n            \"description\": \"AccessiBe is an accessibility overlay which claims to provide ADA and WCAG compliance. The system scans and analyzes a website, and applies adjustments which they claim make your website ADA and WCAG 2.1 compliant.\",\r\n            \"website\": \"https://accessibe.com\"\r\n        },\r\n        \"Accessibility Toolbar Plugin\": {\r\n            \"cats\": [\r\n                68\r\n            ],\r\n            \"js\": [\r\n                \"micaccesstool.prototype.opencloseboxkeyboard\"\r\n            ],\r\n            \"description\": \"Accessibility Toolbar Plugin is an accessibility component without dependencies (clean javascript), including a variety of tools.\",\r\n            \"website\": \"https://webworks.ga/acc_toolbar\"\r\n        },\r\n        \"Accessible360\": {\r\n            \"cats\": [\r\n                68\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/accessible360/accessible-slick/slick/slick\\\\.min\\\\.js\\\\?v=([\\\\d\\\\.]+)\\\\;version:\\\\1\",\r\n                \"/npm/@accessible360/accessible-slick@([\\\\d\\\\.]+)/\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Accessible360 is a web accessibility company based in Edina, Minnesota.\",\r\n            \"website\": \"https://accessible360.com\"\r\n        },\r\n        \"Accessibly\": {\r\n            \"cats\": [\r\n                68\r\n            ],\r\n            \"js\": [\r\n                \"accessibilitywidget.name\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"accessibly\\\\.onthemapmarketing\\\\.com\"\r\n            ],\r\n            \"description\": \"Accessibly is an app which is designed to assist with meeting certain requirements of WCAG 2.1 using an overlay solution.\",\r\n            \"website\": \"https://www.onthemapmarketing.com/accessibly/\"\r\n        },\r\n        \"Accesso\": {\r\n            \"cats\": [\r\n                6,\r\n                72\r\n            ],\r\n            \"js\": [\r\n                \"accesso\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/embed/accesso\\\\.js\"\r\n            ],\r\n            \"description\": \"Accesso provides ticketing, ecommerce and Point-of-Sale (PoS) solutions.\",\r\n            \"website\": \"https://accesso.com/\"\r\n        },\r\n        \"Acconsento.click\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"js\": [\r\n                \"acconsentoapi\",\r\n                \"acconsentocreateelement\"\r\n            ],\r\n            \"description\": \"Acconsento.click is a software solution designed to assist users in achieving cookie policy compliance for their websites.\",\r\n            \"website\": \"https://shop.acconsento.click\"\r\n        },\r\n        \"AccuWeather\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"description\": \"AccuWeather provides weather forecasts and warnings and additional weather products and services.\",\r\n            \"website\": \"https://partners.accuweather.com\"\r\n        },\r\n        \"Ace\": {\r\n            \"cats\": [\r\n                24\r\n            ],\r\n            \"js\": [\r\n                \"ace.editor\",\r\n                \"ace.editsession\",\r\n                \"ace.version\"\r\n            ],\r\n            \"description\": \"Ace is an embeddable code editor written in JavaScript.\",\r\n            \"website\": \"https://github.com/ajaxorg/ace\"\r\n        },\r\n        \"Ackee\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"ackeetracker\"\r\n            ],\r\n            \"description\": \"Ackee is a self-hosted, Node.js based analytics tool with a focus on privacy.\",\r\n            \"website\": \"https://ackee.electerious.com\"\r\n        },\r\n        \"Acoustic Experience Analytics\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"tealeaf\",\r\n                \"tlt.config.core.modules.tlcookie\",\r\n                \"tlt_version\"\r\n            ],\r\n            \"description\": \"Acoustic Experience Analytics (Tealeaf), formerly known as IBM Tealeaf Customer Experience on Cloud, is a SaaS-based analytics solution that delivers Tealeaf core capabilities in an managed cloud environment. Tealeaf captures and manages each visitor interaction on your website and mobile applications.\",\r\n            \"website\": \"https://acoustic.com/tealeaf\"\r\n        },\r\n        \"Acquia Campaign Factory\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"maestro\\\\.mautic\\\\.com\",\r\n                \"mautic\\\\.net\"\r\n            ],\r\n            \"implies\": [\r\n                \"Mautic\"\r\n            ],\r\n            \"description\": \"Acquia Campaign Factory is centralized marketing management system powered by Mautic.\",\r\n            \"website\": \"https://www.acquia.com/products/marketing-cloud/campaign-factory\"\r\n        },\r\n        \"Acquia Cloud IDE\": {\r\n            \"cats\": [\r\n                47\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"https?:\\\\/\\\\/.+\\\\.web\\\\.ahdev\\\\.cloud\"\r\n            ],\r\n            \"implies\": [\r\n                \"Acquia Cloud Platform\"\r\n            ],\r\n            \"description\": \"Acquia Cloud IDE is a browser-based source code editor and a Drupal development stack running on the Acquia Cloud Platform.\",\r\n            \"website\": \"https://www.acquia.com/products/drupal-cloud/cloud-ide\"\r\n        },\r\n        \"Acquia Cloud Platform\": {\r\n            \"cats\": [\r\n                62\r\n            ],\r\n            \"headers\": {\r\n                \"x-ah-environment\": \"^(next)?.*$\\\\;version:\\\\1?next:\"\r\n            },\r\n            \"implies\": [\r\n                \"Amazon Web Services\"\r\n            ],\r\n            \"description\": \"Acquia Cloud Platform is a Drupal-tuned application lifecycle management suite with an infrastructure to support Drupal deployment workflow processes.\",\r\n            \"website\": \"https://www.acquia.com/products/drupal-cloud/cloud-platform\"\r\n        },\r\n        \"Acquia Cloud Platform CDN\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"headers\": {\r\n                \"via\": \"acquia platform cdn (.+)\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Acquia Cloud Platform\"\r\n            ],\r\n            \"website\": \"https://docs.acquia.com/cloud-platform/platformcdn/\"\r\n        },\r\n        \"Acquia Cloud Site Factory\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"sites\\\\/g\\\\/files\"\r\n            ],\r\n            \"implies\": [\r\n                \"Acquia Cloud Platform\",\r\n                \"Drupal Multisite\"\r\n            ],\r\n            \"description\": \"Acquia Site Factory is a multisite platform for Drupal.\",\r\n            \"website\": \"https://www.acquia.com/products/drupal-cloud/site-factory\"\r\n        },\r\n        \"Acquia Content Hub\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"content-hub\\\\.acquia\\\\.com\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"content-hub\\\\.acquia\\\\.com\"\r\n            ],\r\n            \"implies\": [\r\n                \"Acquia Cloud Platform\"\r\n            ],\r\n            \"description\": \"Acquia Content Hub is a cloud-based, centralized content distribution and syndication service.\",\r\n            \"website\": \"https://www.acquia.com/products/drupal-cloud/content-hub\"\r\n        },\r\n        \"Acquia Customer Data Platform\": {\r\n            \"cats\": [\r\n                97\r\n            ],\r\n            \"js\": [\r\n                \"$a1\",\r\n                \"$a1config\",\r\n                \"agiloneobject\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^https?:\\\\/\\\\/.+\\\\.agilone\\\\.com\",\r\n                \"^https?:\\\\/\\\\/scripts\\\\.agilone\\\\.com\\\\/latest\\\\/a1.js\"\r\n            ],\r\n            \"description\": \"Acquia Customer Data Platform (formerly AgilOne) is a customer data platform for Drupal.\",\r\n            \"website\": \"https://www.acquia.com/products/marketing-cloud/customer-data-platform\"\r\n        },\r\n        \"Acquia Personalization\": {\r\n            \"cats\": [\r\n                10,\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"_tcaq\",\r\n                \"acquialift\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"lift\\\\.acquia\\\\.com\"\r\n            ],\r\n            \"implies\": [\r\n                \"Acquia Cloud Platform\\\\;confidence:95\"\r\n            ],\r\n            \"description\": \"Acquia Personalization (formerly Acquia Lift) lets you track customers' behavior throughout your website.\",\r\n            \"website\": \"https://www.acquia.com/products/marketing-cloud/personalization\"\r\n        },\r\n        \"Acquia Site Studio\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"sites/\\\\w*/files/cohesion\"\r\n            ],\r\n            \"implies\": [\r\n                \"Acquia Cloud Platform\"\r\n            ],\r\n            \"description\": \"Site Studio (formerly Cohesion) is a low-code, Drupal add-on page builder.\",\r\n            \"website\": \"https://www.acquia.com/products/drupal-cloud/site-studio\"\r\n        },\r\n        \"Acquire Cobrowse\": {\r\n            \"cats\": [\r\n                19,\r\n                103\r\n            ],\r\n            \"js\": [\r\n                \"acquirecobrowsertc\",\r\n                \"acquirecobrowsesettings\",\r\n                \"acquireconfignodeserver\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.acquire\\\\.io/cobrowse/\"\r\n            ],\r\n            \"description\": \"Acquire Cobrowse is a safe and secure method of interacting with a customer's browser without downloading any additional software.\",\r\n            \"website\": \"https://acquire.io/co-browsing\"\r\n        },\r\n        \"Acquire Live Chat\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"_acquire_init_config\",\r\n                \"acquire\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.acquire\\\\.io/(?!cobrowse)\"\r\n            ],\r\n            \"description\": \"Acquire is a multi-channel customer support platform designed to provide real-time customer support to customers.\",\r\n            \"website\": \"https://acquire.io\"\r\n        },\r\n        \"Act-On\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"acton\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/cdnr/\\\\d+/acton/bn/tracker/\\\\d+\"\r\n            ],\r\n            \"description\": \"Act-On is a cloud-based SaaS product for marketing automation.\",\r\n            \"website\": \"https://act-on.com\"\r\n        },\r\n        \"ActBlue\": {\r\n            \"cats\": [\r\n                111\r\n            ],\r\n            \"js\": [\r\n                \"actblue.__configuration\"\r\n            ],\r\n            \"description\": \"ActBlue is an online fundraising platform that facilitates secure donations to Democratic candidates and progressive causes, streamlining the process of processing and distributing campaign contributions.\",\r\n            \"website\": \"https://secure.actblue.com\"\r\n        },\r\n        \"Actito\": {\r\n            \"cats\": [\r\n                32,\r\n                76\r\n            ],\r\n            \"cookies\": {\r\n                \"smartfocus\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"_actgoal\",\r\n                \"smartfocus\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.advisor\\\\.smartfocus\\\\.com\",\r\n                \"cdn\\\\.actito\\\\.be\"\r\n            ],\r\n            \"description\": \"Actito is an agile SaaS marketing automation platform.\",\r\n            \"website\": \"https://www.actito.com\"\r\n        },\r\n        \"ActiveCampaign\": {\r\n            \"cats\": [\r\n                32,\r\n                75\r\n            ],\r\n            \"js\": [\r\n                \"acenabletracking\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.ac-page\\\\.com\",\r\n                \"\\\\.activehosted\\\\.com\",\r\n                \"\\\\.app-us1\\\\.com\",\r\n                \"plugins/activecampaign-subscription-forms/site_tracking\\\\.js\"\r\n            ],\r\n            \"description\": \"ActiveCampaign is email and marketing automation software.\",\r\n            \"website\": \"https://www.activecampaign.com\"\r\n        },\r\n        \"Acuity Scheduling\": {\r\n            \"cats\": [\r\n                72\r\n            ],\r\n            \"js\": [\r\n                \"acuity_modal_init\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.acuityscheduling\\\\.com\"\r\n            ],\r\n            \"description\": \"Acuity Scheduling is a cloud-based appointment scheduling software solution.\",\r\n            \"website\": \"https://acuityscheduling.com\"\r\n        },\r\n        \"AcuityAds\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"acuityadseventqueue\",\r\n                \"acuityadspixelkey\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.acuityplatform\\\\.com\"\r\n            },\r\n            \"description\": \"AcuityAds offers automatic solutions to marketers willing to connect through clients across mobile, social, and online display advertising campaigns.\",\r\n            \"website\": \"https://www.acuityads.com\"\r\n        },\r\n        \"Ad Lightning\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.adlightning\\\\.com\"\r\n            ],\r\n            \"description\": \"Ad Lightning is an programmatic ads monitoring and audit service.\",\r\n            \"website\": \"https://www.adlightning.com\"\r\n        },\r\n        \"AdBridg\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"adbridg.cmd\"\r\n            ],\r\n            \"description\": \"AdBridg is a bidding solutions provider for publishers looking to maximize their programmatic revenues.\",\r\n            \"website\": \"https://www.adbridg.com\"\r\n        },\r\n        \"AdInfinity\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"adinfinity\\\\.com\\\\.au\"\r\n            ],\r\n            \"website\": \"https://adinfinity.com.au\"\r\n        },\r\n        \"AdOcean\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"ado.master\",\r\n                \"ado.placement\",\r\n                \"ado.slave\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"adocean\\\\.pl/files/js/ado\\\\.js\",\r\n                \"adocean\\\\.pl\\\\;confidence:80\"\r\n            ],\r\n            \"implies\": [\r\n                \"Gemius\"\r\n            ],\r\n            \"website\": \"https://adocean-global.com\"\r\n        },\r\n        \"AdOpt\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"js\": [\r\n                \"adopt_website_code\",\r\n                \"adoptapp.domain\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"tag\\\\.goadopt\\\\.io/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Svelte\"\r\n            ],\r\n            \"description\": \"AdOpt is a consent tool that prioritises privacy and usability towards the LGPD.\",\r\n            \"website\": \"https://goadopt.io\"\r\n        },\r\n        \"AdRecover\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"adrecover.ap\"\r\n            ],\r\n            \"description\": \"AdRecover is a tool that helps online publishers monetise their Adblock inventory.\",\r\n            \"website\": \"https://www.adrecover.com\"\r\n        },\r\n        \"AdRiver\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"adfoxbiddersmap.adriver\",\r\n                \"adriver\",\r\n                \"adrivercounter\",\r\n                \"adriverprebid\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.adriver\\\\.ru/\"\r\n            ],\r\n            \"description\": \"AdRiver is a company which provide internet advertising management and audit software.\",\r\n            \"website\": \"https://adriver.ru\"\r\n        },\r\n        \"AdRoll\": {\r\n            \"cats\": [\r\n                36,\r\n                77\r\n            ],\r\n            \"js\": [\r\n                \"adroll_adv_id\",\r\n                \"adroll_pix_id\",\r\n                \"adroll_version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:a|s)\\\\.adroll\\\\.com\"\r\n            ],\r\n            \"description\": \"AdRoll is a digital marketing technology platform that specializes in retargeting.\",\r\n            \"website\": \"https://adroll.com\"\r\n        },\r\n        \"AdRoll CMP System\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"js\": [\r\n                \"__adroll_consent\",\r\n                \"__adroll_consent_is_gdpr\"\r\n            ],\r\n            \"description\": \"AdRoll CMP System is a consent management solution.\",\r\n            \"website\": \"https://www.adroll.com/features/consent-management\"\r\n        },\r\n        \"AdScale\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"_adscale\",\r\n                \"adscaleaddtocart\",\r\n                \"adscaleviewproduct\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.adscale\\\\.com/\"\r\n            ],\r\n            \"description\": \"AdScale is a cloud-based, AI-powered performance optimisation platform which utilises machine learning to automate and optimise AdWords campaigns across Google Search, Google Shopping, Google Display, and YouTube.\",\r\n            \"website\": \"https://www.adscale.com\"\r\n        },\r\n        \"AdThrive\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"adthrive\",\r\n                \"adthrivevideosinjected\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"ads\\\\.adthrive\\\\.com\"\r\n            ],\r\n            \"description\": \"AdThrive is an online advertising network aka ad provider for bloggers for blog monetisation.\",\r\n            \"website\": \"https://www.adthrive.com\"\r\n        },\r\n        \"Ada\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"__adaembedconstructor\",\r\n                \"adaembed\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.ada\\\\.support\"\r\n            ],\r\n            \"description\": \"Ada is an automated customer experience company that provides chat bots used in customer support.\",\r\n            \"website\": \"https://www.ada.cx\"\r\n        },\r\n        \"AdaSiteCompliance\": {\r\n            \"cats\": [\r\n                68\r\n            ],\r\n            \"js\": [\r\n                \"adaschelper\",\r\n                \"adastoolboxappstate\"\r\n            ],\r\n            \"description\": \"AdaSiteCompliance is a web accessibility solution, making websites compliant and accessible to WCAG 2.1 and section 508 compliance standards.\",\r\n            \"website\": \"https://adasitecompliance.com\"\r\n        },\r\n        \"Adabra\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"adabra_version_panel\",\r\n                \"adabra_version_track\",\r\n                \"adabrapreview\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"track\\\\.adabra\\\\.com\"\r\n            ],\r\n            \"description\": \"Adabra is a SaaS omnichannel marketing automation platform to help boost sales. Adabra allows you to manage user segmentation, create workflow and campaigns through email, social, SMS and more.\",\r\n            \"website\": \"https://www.adabra.com\"\r\n        },\r\n        \"Adally\": {\r\n            \"cats\": [\r\n                68\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cloudfront\\\\.net/.*/adally\\\\.js\"\r\n            ],\r\n            \"website\": \"https://adally.com/\"\r\n        },\r\n        \"Adalyser\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"adalysermodules\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"c5\\\\.adalyser\\\\.com\"\r\n            ],\r\n            \"description\": \"Adalyser is an online platform offering the tools needed to get up and running with TV advertising.\",\r\n            \"website\": \"https://adalyser.com/\"\r\n        },\r\n        \"Adcash\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"ac_bgclick_url\",\r\n                \"ct_nopp\",\r\n                \"ct_nsuurl\",\r\n                \"ct_siteunder\",\r\n                \"ct_tag\",\r\n                \"suloaded\",\r\n                \"suurl\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^[^\\\\/]*//(?:[^\\\\/]+\\\\.)?adcash\\\\.com/(?:script|ad)/\"\r\n            ],\r\n            \"website\": \"https://adcash.com\"\r\n        },\r\n        \"AddEvent\": {\r\n            \"cats\": [\r\n                72\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//addevent\\\\.com/\"\r\n            ],\r\n            \"description\": \"AddEvent is used to Add to Calendar and event tools for websites and newsletters.\",\r\n            \"website\": \"https://www.addevent.com\"\r\n        },\r\n        \"AddShoppers\": {\r\n            \"cats\": [\r\n                5,\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:cdn\\\\.)?shop\\\\.pe/widget/\"\r\n            ],\r\n            \"description\": \"AddShoppers is the social media marketing command center for small-medium online retailers.\",\r\n            \"website\": \"https://www.addshoppers.com\"\r\n        },\r\n        \"AddThis\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"addthis\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"addthis\\\\.com/js/\"\r\n            ],\r\n            \"description\": \"AddThis is a social bookmarking service that can be integrated into a website with the use of a web widget.\",\r\n            \"website\": \"https://www.addthis.com\"\r\n        },\r\n        \"AddToAny\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"a2apage_init\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"addtoany\\\\.com/menu/page\\\\.js\"\r\n            ],\r\n            \"description\": \"AddToAny is a universal sharing platform that can be integrated into a website by use of a web widget or plugin.\",\r\n            \"website\": \"https://www.addtoany.com\"\r\n        },\r\n        \"AddToAny Share Buttons\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/add-to-any/addtoany\\\\.min\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"AddToAny\"\r\n            ],\r\n            \"description\": \"AddToAny Share Buttons plugin for WordPress increases traffic and engagement by helping people share your posts and pages to any service.\",\r\n            \"website\": \"https://github.com/projectestac/wordpress-add-to-any\"\r\n        },\r\n        \"Addi\": {\r\n            \"cats\": [\r\n                91\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"s3\\\\.amazonaws\\\\.com/widgets\\\\.addi\\\\.com/bundle\\\\.min\\\\.js\"\r\n            ],\r\n            \"description\": \"Addi is a service that allows users to make purchases and pay for them in installments over time\",\r\n            \"website\": \"https://co.addi.com/\"\r\n        },\r\n        \"Addsearch\": {\r\n            \"cats\": [\r\n                29\r\n            ],\r\n            \"js\": [\r\n                \"addsearchclient\",\r\n                \"addsearchui\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//addsearch\\\\.com/js/\"\r\n            ],\r\n            \"description\": \"Addsearch is a site search solution for small and large websites.\",\r\n            \"website\": \"https://www.addsearch.com/\"\r\n        },\r\n        \"Adform\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.adform\\\\.net/\"\r\n            ],\r\n            \"description\": \"Adform is an all-in-one platform for digital advertising.\",\r\n            \"website\": \"https://site.adform.com\"\r\n        },\r\n        \"Adjust\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"adjust.initsdk\"\r\n            ],\r\n            \"description\": \"Adjust is the mobile marketing analytics platform.\",\r\n            \"website\": \"https://www.adjust.com\"\r\n        },\r\n        \"Adloox\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.adlooxtracking\\\\.com/\"\r\n            ],\r\n            \"description\": \"Adloox is a European-born buy-side ad verification and insights company.\",\r\n            \"website\": \"https://www.adloox.com\"\r\n        },\r\n        \"Adminer\": {\r\n            \"cats\": [\r\n                3\r\n            ],\r\n            \"html\": [\r\n                \"adminer\\u003c/a\\u003e \\u003cspan class=\\\"version\\\"\\u003e([\\\\d.]+)\\u003c/span\\u003e\\\\;version:\\\\1\",\r\n                \"onclick=\\\"bodyclick\\\\(event\\\\);\\\" onload=\\\"verifyversion\\\\('([\\\\d.]+)'\\\\);\\\"\\u003e\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://www.adminer.org\",\r\n            \"cpe\": \"cpe:2.3:a:adminer:adminer:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Admiral\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"admiral\"\r\n            ],\r\n            \"scripts\": [\r\n                \"admiral(?:-engaged|:enabled)\"\r\n            ],\r\n            \"description\": \"Admiral is a Visitor Relationship Management (VRM) platform.\",\r\n            \"website\": \"https://www.getadmiral.com\"\r\n        },\r\n        \"Admitad\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"js\": [\r\n                \"admitad\",\r\n                \"admitad\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"artfut\\\\.com/static/(?:tracking|crossdevice)\\\\.min\\\\.js\",\r\n                \"cdn\\\\.admitad\\\\.com\"\r\n            ],\r\n            \"description\": \"Admitad is an affiliate network that acts as an intermediary between advertisers and publishers.\",\r\n            \"website\": \"https://www.admitad.com\"\r\n        },\r\n        \"Admixer\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"admixerads\",\r\n                \"admixerml\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.admixer\\\\.net/\"\r\n            ],\r\n            \"description\": \"Admixer is an independent adtech company developing an ecosystem of full-stack programmatic solutions.\",\r\n            \"website\": \"https://admixer.com\"\r\n        },\r\n        \"Admo.tv\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"admo_config\",\r\n                \"admo_tt\"\r\n            ],\r\n            \"description\": \"Admo.tv is a company developing a TV and radio analytics platform.\",\r\n            \"website\": \"https://www.admo.tv\"\r\n        },\r\n        \"Adnegah\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"headers\": {\r\n                \"x-advertising-by\": \"adnegah\\\\.net\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"\\\\.adnegah\\\\.net/\"\r\n            ],\r\n            \"description\": \"Adnegah is a digital marketing and internet advertising agency.\",\r\n            \"website\": \"https://adnegah.net\"\r\n        },\r\n        \"Adobe Analytics\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"s_c_il.0._c\",\r\n                \"s_c_il.0.constructor.name\",\r\n                \"s_c_il.1._c\",\r\n                \"s_c_il.1.constructor.name\",\r\n                \"s_c_il.2._c\",\r\n                \"s_c_il.2.constructor.name\",\r\n                \"s_c_il.3._c\",\r\n                \"s_c_il.3.constructor.name\",\r\n                \"s_c_il.4._c\",\r\n                \"s_c_il.4.constructor.name\",\r\n                \"s_c_il.5._c\",\r\n                \"s_c_il.5.constructor.name\"\r\n            ],\r\n            \"description\": \"Adobe Analytics is a web analytics, marketing and cross-channel analytics application.\",\r\n            \"website\": \"https://www.adobe.com/analytics/adobe-analytics.html\"\r\n        },\r\n        \"Adobe Audience Manager\": {\r\n            \"cats\": [\r\n                86\r\n            ],\r\n            \"cookies\": {\r\n                \"aam_uuid\": \"\",\r\n                \"demdex\": \"\"\r\n            },\r\n            \"description\": \"Adobe Audience Manager is a versatile audience data management platform.\",\r\n            \"website\": \"https://business.adobe.com/products/audience-manager/adobe-audience-manager.html\"\r\n        },\r\n        \"Adobe Client Data Layer\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"adobedatalayer.version\"\r\n            ],\r\n            \"description\": \"Adobe Client Data Layer is a framework of JavaScript objects on your site that contains all variable values used in your implementation.\",\r\n            \"website\": \"https://github.com/adobe/adobe-client-data-layer\"\r\n        },\r\n        \"Adobe ColdFusion\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"js\": [\r\n                \"_cfemails\"\r\n            ],\r\n            \"headers\": {\r\n                \"cookie\": \"cftoken=\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003c!-- start headertags\\\\.cfm\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/cfajax/\"\r\n            ],\r\n            \"implies\": [\r\n                \"CFML\"\r\n            ],\r\n            \"website\": \"https://adobe.com/products/coldfusion-family.html\",\r\n            \"cpe\": \"cpe:2.3:a:adobe:coldfusion:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Adobe DTM\": {\r\n            \"cats\": [\r\n                42\r\n            ],\r\n            \"js\": [\r\n                \"_satellite.builddate\"\r\n            ],\r\n            \"description\": \"Dynamic Tag Management (DTM) is a tag management solution for Adobe Experience Cloud applications and others.\",\r\n            \"website\": \"https://marketing.adobe.com/resources/help/en_US/dtm/c_overview.html\"\r\n        },\r\n        \"Adobe Dynamic Media Classic\": {\r\n            \"cats\": [\r\n                95\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.scene7\\\\.com\"\r\n            },\r\n            \"description\": \"Adobe Dynamic Media Classic is a platform that enables customers to manage, enhance, publish, and deliver dynamic rich media content and personal experiences to consumers across all channels and devices, including web, print material, email campaigns, desktops, social, and mobile.\",\r\n            \"website\": \"https://business.adobe.com/uk/products/experience-manager/scene7-login.html\"\r\n        },\r\n        \"Adobe Experience Manager\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cdiv class=\\\"[^\\\"]*aem-grid\",\r\n                \"\\u003cdiv class=\\\"[^\\\"]*parbase\",\r\n                \"\\u003cdiv[^\\u003e]+data-component-path=\\\"[^\\\"+]jcr:\"\r\n            ],\r\n            \"scripts\": [\r\n                \"aem-(?:gridcolumn|apps/)\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/etc/clientlibs/\",\r\n                \"/etc/designs/\",\r\n                \"/etc\\\\.clientlibs/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"description\": \"Adobe Experience Manager (AEM) is a content management solution for building websites, mobile apps and forms.\",\r\n            \"website\": \"https://www.adobe.com/marketing/experience-manager.html\",\r\n            \"cpe\": \"cpe:2.3:a:adobe:experience_manager:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Adobe Experience Manager Franklin\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^.+/scripts/lib-franklin\\\\.js$\"\r\n            ],\r\n            \"description\": \"Adobe Experience Manager Franklin, also known as Project Helix or Composability, is a new way to publish AEM pages using Google Drive or Microsoft Office via Sharepoint. Instead of components, Franklin uses blocks to build pages. Blocks are pieces of a document that will be transformed into web page content.\",\r\n            \"website\": \"https://www.hlx.live\",\r\n            \"cpe\": \"cpe:2.3:a:adobe:experience_manager:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Adobe Experience Platform Identity Service\": {\r\n            \"cats\": [\r\n                97\r\n            ],\r\n            \"js\": [\r\n                \"s_c_il.0._c\",\r\n                \"s_c_il.1._c\",\r\n                \"s_c_il.2._c\",\r\n                \"s_c_il.3._c\",\r\n                \"s_c_il.4._c\",\r\n                \"s_c_il.5._c\"\r\n            ],\r\n            \"description\": \"Adobe Experience Platform Identity Service creates identity graphs that hold customer profiles and the known identifiers that belong to individual consumers.\",\r\n            \"website\": \"https://docs.adobe.com/content/help/en/id-service/using/home.html\"\r\n        },\r\n        \"Adobe Experience Platform Launch\": {\r\n            \"cats\": [\r\n                42\r\n            ],\r\n            \"js\": [\r\n                \"_satellite.buildinfo\"\r\n            ],\r\n            \"description\": \"Adobe Experience Cloud Launch is an extendable tag management solution for Adobe Experience Cloud, Adobe Experience Platform, and other applications.\",\r\n            \"website\": \"https://docs.adobelaunch.com/getting-started\"\r\n        },\r\n        \"Adobe Flash\": {\r\n            \"cats\": [\r\n                27\r\n            ],\r\n            \"description\": \"Adobe Flash is a multimedia software platform used for production of animations, rich web applications and embedded web browser video players.\",\r\n            \"website\": \"https://www.adobe.com/products/flashplayer\",\r\n            \"cpe\": \"cpe:2.3:a:adobe:flash:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Adobe GoLive\": {\r\n            \"cats\": [\r\n                20\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"adobe golive(?:\\\\s([\\\\d.]+))?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"Adobe GoLive is a WYSIWYG HTML editor and web site management application.\",\r\n            \"website\": \"https://www.adobe.com/products/golive\",\r\n            \"cpe\": \"cpe:2.3:a:adobe:golive:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Adobe Portfolio\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"meta\": {\r\n                \"twitter:site\": [\r\n                    \"@adobeportfolio\"\r\n                ]\r\n            },\r\n            \"description\": \"Adobe Portfolio is an Adobe platform that allows you to create a web page where you can show your projects, creations, and the services you offer.\",\r\n            \"website\": \"https://portfolio.adobe.com\"\r\n        },\r\n        \"Adobe RoboHelp\": {\r\n            \"cats\": [\r\n                4\r\n            ],\r\n            \"js\": [\r\n                \"gbwhlang\",\r\n                \"gbwhmsg\",\r\n                \"gbwhproxy\",\r\n                \"gbwhutil\",\r\n                \"gbwhver\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:wh(?:utils|ver|proxy|lang|topic|msg)|ehlpdhtm)\\\\.js\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^adobe robohelp(?: ([\\\\d]+))?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"Adobe RoboHelp is a Help Authoring Tool (HAT) that allows you to create help systems, e-learning content and knowledge bases.\",\r\n            \"website\": \"https://adobe.com/products/robohelp.html\",\r\n            \"cpe\": \"cpe:2.3:a:adobe:robohelp:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Adobe Target\": {\r\n            \"cats\": [\r\n                74,\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"adobe.target\",\r\n                \"adobe.target.version\"\r\n            ],\r\n            \"description\": \"Adobe Target is an A/B testing, multi-variate testing, personalisation, and optimisation application\",\r\n            \"website\": \"https://www.adobe.com/marketing/target.html\"\r\n        },\r\n        \"AdonisJS\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"cookies\": {\r\n                \"adonis-session\": \"\",\r\n                \"adonis-session-values\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"Node.js\"\r\n            ],\r\n            \"website\": \"https://adonisjs.com\"\r\n        },\r\n        \"Advally\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"advally\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.adligature\\\\.com/.+/advally-([\\\\d.]+)\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Advally is an advertising platform for publishers.\",\r\n            \"website\": \"https://www.advally.com\"\r\n        },\r\n        \"Advanced Custom Fields\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"acf\",\r\n                \"acfl10n\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/advanced-custom-fields(?:-pro)?/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Advanced Custom Fields is a WordPress plugin which allows you to add extra content fields to your WordPress edit screens.\",\r\n            \"website\": \"https://www.advancedcustomfields.com\"\r\n        },\r\n        \"Advert Stream\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"advst_is_above_the_fold\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:ad\\\\.advertstream\\\\.com|adxcore\\\\.com)\"\r\n            ],\r\n            \"website\": \"https://www.advertstream.com\"\r\n        },\r\n        \"Adverticum\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.adverticum\\\\.net/\"\r\n            ],\r\n            \"description\": \"Adverticum is the developer and operator of Hungary's market leading online ad serving solution, the Adverticum AdServer.\",\r\n            \"website\": \"https://adverticum.net\"\r\n        },\r\n        \"Adyen\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"adyen.encrypt.version\"\r\n            ],\r\n            \"description\": \"Adyen allows businesses to accept ecommerce, mobile, and point-of-sale payments.\",\r\n            \"website\": \"https://www.adyen.com\"\r\n        },\r\n        \"Aegea\": {\r\n            \"cats\": [\r\n                11\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^(?:e2\\\\s)?aegea\\\\s(?:v)?([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"PHP\",\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"Aegea is a blog engine created by Ilya Birman.\",\r\n            \"website\": \"https://blogengine.ru\"\r\n        },\r\n        \"Aero Commerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"aeroevents.on\"\r\n            ],\r\n            \"description\": \"Aero Commerce is a performance-based platform designed with the evolving needs of retailers in mind.\",\r\n            \"website\": \"https://www.aerocommerce.com\"\r\n        },\r\n        \"Affilae\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"static\\\\.affilae\\\\.com/(?:.+v([\\\\d\\\\.]+)|.+)?\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Affilae is an affiliate marketing platform that enables brands to connect, collaborate with influencers and affiliates.\",\r\n            \"website\": \"https://affilae.com\"\r\n        },\r\n        \"Affiliate B\": {\r\n            \"cats\": [\r\n                71,\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"t\\\\.afi-b\\\\.com\"\r\n            ],\r\n            \"description\": \"Affiliate B is an advertising system that allows site operators (HP, blogs, e-mail newsletters, etc.) to place advertiser advertisements on their own sites.\",\r\n            \"website\": \"https://affiliate-b.com\"\r\n        },\r\n        \"Affiliate Future\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"tags\\\\.affiliatefuture\\\\.com\"\r\n            ],\r\n            \"description\": \"Affiliate Future is a provider of advertisers with marketing solution through its affiliate network and tools.\",\r\n            \"website\": \"https://affiliatefuture.com\"\r\n        },\r\n        \"Affiliatly\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"static\\\\.affiliatly\\\\.com/\"\r\n            ],\r\n            \"description\": \"Affiliatly is an affiliate marketing software for ecommerce store owners.\",\r\n            \"website\": \"https://www.affiliatly.com\"\r\n        },\r\n        \"Affilio\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"js\": [\r\n                \"affilio.widget\"\r\n            ],\r\n            \"description\": \"Affilio is an Iranian affiliate marketing platform.\",\r\n            \"website\": \"https://affilio.ir\"\r\n        },\r\n        \"Affilo\": {\r\n            \"cats\": [\r\n                71,\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//affilo\\\\.io/\"\r\n            ],\r\n            \"description\": \"Affilo is an all-in-one solution for referrals and affiliate marketing.\",\r\n            \"website\": \"https://affilo.io\"\r\n        },\r\n        \"Affirm\": {\r\n            \"cats\": [\r\n                41,\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"_affirm_config\",\r\n                \"affirm.rollbar\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.affirm\\\\.com/js/v([\\\\d\\\\.]+)/affirm\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Affirm is a loan company that allows users to buy goods or services offered by online merchants and pay off those purchases in fixed monthly payments.\",\r\n            \"website\": \"https://www.affirm.com\"\r\n        },\r\n        \"Afosto\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"afosto saas bv\\\\;version:2.0\"\r\n            },\r\n            \"website\": \"https://afosto.com\"\r\n        },\r\n        \"AfterBuy\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"afterbuystring\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.afterbuy\\\\.de/\"\r\n            ],\r\n            \"description\": \"AfterBuy is a software company that specialises in ecommerce software for small to enterprise level businesses.\",\r\n            \"website\": \"https://www.afterbuy.de\"\r\n        },\r\n        \"AfterShip\": {\r\n            \"cats\": [\r\n                107\r\n            ],\r\n            \"js\": [\r\n                \"aftership.__version__\"\r\n            ],\r\n            \"description\": \"AfterShip provides automated shipment tracking as a service.\",\r\n            \"website\": \"https://www.aftership.com\"\r\n        },\r\n        \"AfterShip Returns Center\": {\r\n            \"cats\": [\r\n                102\r\n            ],\r\n            \"description\": \"AfterShip Returns Center is an interactive self-service return solution.\",\r\n            \"website\": \"https://www.aftership.com/returns\"\r\n        },\r\n        \"Afterpay\": {\r\n            \"cats\": [\r\n                41,\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"afterpay\",\r\n                \"afterpay.version\",\r\n                \"afterpay_product\",\r\n                \"afterpayattractwidget\",\r\n                \"afterpaygenericerrorhtml\",\r\n                \"afterpaywidgethtml\",\r\n                \"checkout.enabledpayments.afterpay\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"afterpay-products\\\\.min\\\\.js\",\r\n                \"js\\\\.stripe\\\\.com/v3/fingerprinted/js/elements-afterpay-clearpay-message-.+\\\\.js\",\r\n                \"portal\\\\.afterpay\\\\.com\",\r\n                \"present-afterpay\\\\.js\",\r\n                \"static\\\\.afterpay\\\\.com\"\r\n            ],\r\n            \"description\": \"Afterpay is a 'buy now, pay later' platform that makes it possible to pay off purchased goods in fortnightly instalments.\",\r\n            \"website\": \"https://www.afterpay.com/\",\r\n            \"cpe\": \"cpe:2.3:a:afterpay:afterpay:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Ahoy\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"cookies\": {\r\n                \"ahoy_track\": \"\",\r\n                \"ahoy_visit\": \"\",\r\n                \"ahoy_visitor\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"ahoy\"\r\n            ],\r\n            \"implies\": [\r\n                \"Ruby on Rails\"\r\n            ],\r\n            \"description\": \"Ahoy is a Ruby gem that provides simple and powerful analytics for Ruby on Rails applications.\",\r\n            \"website\": \"https://github.com/ankane/ahoy\"\r\n        },\r\n        \"Ahrefs\": {\r\n            \"cats\": [\r\n                54,\r\n                10\r\n            ],\r\n            \"meta\": {\r\n                \"ahrefs-site-verification\": []\r\n            },\r\n            \"description\": \"Ahrefs is an online toolset utilised for search engine optimisation (SEO) and competitor analysis, which permits users to analyse their website's performance, track keyword rankings, identify backlink opportunities, and research competitors' websites, among other features.\",\r\n            \"website\": \"https://ahrefs.com\"\r\n        },\r\n        \"AiSpeed\": {\r\n            \"cats\": [\r\n                92,\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"aispeed_init\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"aispeed\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"AiSpeed is a shopify app focused on improving site speed.\",\r\n            \"website\": \"https://apps.shopify.com/aispeed\"\r\n        },\r\n        \"Aimtell\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"_aimtellload\",\r\n                \"_aimtellpushtoken\",\r\n                \"_aimtellwebhook\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.aimtell\\\\.\\\\w+/\"\r\n            ],\r\n            \"description\": \"Aimtell is a cloud-hosted marketing platform that allows digital marketers and businesses to deliver web-based push notifications.\",\r\n            \"website\": \"https://aimtell.com\"\r\n        },\r\n        \"Air360\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"air360.sdk_version\"\r\n            ],\r\n            \"description\": \"Air360 is a technology company that specialises in performance-enhancing, mobile and ecommerce experience analytics.\",\r\n            \"website\": \"https://www.air360.io\"\r\n        },\r\n        \"AirRobe\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"airrobe.app_id\"\r\n            ],\r\n            \"description\": \"AirRobe partners with brands and retailers to power the circular fashion economy.\",\r\n            \"website\": \"https://airrobe.com\"\r\n        },\r\n        \"Aircall\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^https?://cdn\\\\.aircall\\\\.io/\"\r\n            ],\r\n            \"description\": \"Aircall is a cloud-based phone system for customer support and sales teams.\",\r\n            \"website\": \"https://aircall.io\"\r\n        },\r\n        \"Airee\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^airee\"\r\n            },\r\n            \"website\": \"https://xn--80aqc2a.xn--p1ai\"\r\n        },\r\n        \"Airform\": {\r\n            \"cats\": [\r\n                110\r\n            ],\r\n            \"description\": \"Airform is a functional HTML forms for front-end developers.\",\r\n            \"website\": \"https://airform.io\"\r\n        },\r\n        \"Airship\": {\r\n            \"cats\": [\r\n                32,\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"urbanairship\\\\.\\\\w+/notify/v([\\\\d.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Airship is an American company that provides marketing and branding services. Airship allows companies to generate custom messages to consumers via push notifications, SMS messaging, and similar, and provides customer analytics services.\",\r\n            \"website\": \"https://www.airship.com\"\r\n        },\r\n        \"Airtable\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"description\": \"Airtable is a low-code platform for building collaborative apps.\",\r\n            \"website\": \"https://www.airtable.com\"\r\n        },\r\n        \"Akamai\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"headers\": {\r\n                \"x-akamai-transformed\": \"\",\r\n                \"x-edgeconnect-midmile-rtt\": \"\",\r\n                \"x-edgeconnect-origin-mex-latency\": \"\"\r\n            },\r\n            \"description\": \"Akamai is global content delivery network (CDN) services provider for media and software delivery, and cloud security solutions.\",\r\n            \"website\": \"https://akamai.com\"\r\n        },\r\n        \"Akamai Bot Manager\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"cookies\": {\r\n                \"ak_bmsc\": \"\",\r\n                \"bm_sv\": \"\",\r\n                \"bm_sz\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"Akamai\"\r\n            ],\r\n            \"description\": \"Akamai Bot Manager detect bots using device fingerprinting bot signatures.\",\r\n            \"website\": \"https://www.akamai.com/us/en/products/security/bot-manager.jsp\"\r\n        },\r\n        \"Akamai Web Application Protector\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"js\": [\r\n                \"aksb\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"aksb\\\\.min\\\\.js\\\\;confidence:50\",\r\n                \"ds-aksb-a\\\\.akamaihd\\\\.net/aksb.min.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Akamai\"\r\n            ],\r\n            \"description\": \"Akamai Web Application Protector is designed for companies looking for a more automated approach to web application firewall (WAF) and distributed denial-of-service (DDoS) security.\",\r\n            \"website\": \"https://www.akamai.com/us/en/products/security/web-application-protector-enterprise-waf-firewall-ddos-protection.jsp\"\r\n        },\r\n        \"Akamai mPulse\": {\r\n            \"cats\": [\r\n                78\r\n            ],\r\n            \"cookies\": {\r\n                \"akaas_ab-testing\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"boomr_api_key\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cscript\\u003e[\\\\s\\\\s]*?go-mpulse\\\\.net\\\\/boomerang[\\\\s\\\\s]*?\\u003c/script\\u003e\"\r\n            ],\r\n            \"implies\": [\r\n                \"Boomerang\"\r\n            ],\r\n            \"description\": \"Akamai mPulse is a real user monitoring (RUM) solution that enables companies to monitor, find, and fix website and application performance issues.\",\r\n            \"website\": \"https://developer.akamai.com/akamai-mpulse-real-user-monitoring-solution\"\r\n        },\r\n        \"Akaunting\": {\r\n            \"cats\": [\r\n                55\r\n            ],\r\n            \"headers\": {\r\n                \"x-akaunting\": \"^free accounting software$\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]+akaunting-green\\\\.css\",\r\n                \"powered by akaunting: \\u003ca [^\\u003e]*href=\\\"https?://(?:www\\\\.)?akaunting\\\\.com[^\\u003e]+\\u003e\"\r\n            ],\r\n            \"implies\": [\r\n                \"Laravel\"\r\n            ],\r\n            \"description\": \"Akaunting is a free and online accounting software.\",\r\n            \"website\": \"https://akaunting.com\"\r\n        },\r\n        \"Akilli Ticaret\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"akillitel\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.akilliticaret\\\\.com/\"\r\n            ],\r\n            \"description\": \"Akilli Ticaret is an all-in-one ecommerce platform from Turkey.\",\r\n            \"website\": \"https://akilliticaret.com\"\r\n        },\r\n        \"Akinon\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn-mgsm\\\\.akinon\\\\.net/\"\r\n            ],\r\n            \"description\": \"Akinon is a cloud-based headless commerce platform with an integrated application suite including omnichannel and marketplace capabilities, mobile and in-store solutions, and an OMS.\",\r\n            \"website\": \"https://www.akinon.com/\"\r\n        },\r\n        \"Akismet\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"ak_js.checkvalidity\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/akismet/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Akismet is a service that filters spam from comments, trackbacks, and contact form messages.\",\r\n            \"website\": \"https://akismet.com\"\r\n        },\r\n        \"Akka HTTP\": {\r\n            \"cats\": [\r\n                18,\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"akka-http(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"website\": \"https://akka.io\",\r\n            \"cpe\": \"cpe:2.3:a:lightbend:akka_http:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Aklamio\": {\r\n            \"cats\": [\r\n                94\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.aklamio\\\\.com\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"\\\\.aklamio\\\\.com/\"\r\n            ],\r\n            \"description\": \"Aklamio is a solution for enterprise level referral marketing and customer incentivisation.\",\r\n            \"website\": \"https://www.aklamio.com\"\r\n        },\r\n        \"Aksara CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"implies\": [\r\n                \"Bootstrap\",\r\n                \"CodeIgniter\",\r\n                \"MySQL\",\r\n                \"OpenLayers\",\r\n                \"PHP\",\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"Aksara CMS is a CodeIgniter based CRUD toolkit.\",\r\n            \"website\": \"https://aksaracms.com\"\r\n        },\r\n        \"Albacross\": {\r\n            \"cats\": [\r\n                10,\r\n                77\r\n            ],\r\n            \"js\": [\r\n                \"_nqsv\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.albacross\\\\.com\"\r\n            ],\r\n            \"description\": \"Albacross is a lead generation and account intelligence platform. It helps marketing and sales teams identify their ideal customers visiting their website and gives them the insights they need to generate more qualified leads, make prospecting more efficient and close more deals.\",\r\n            \"website\": \"https://albacross.com\"\r\n        },\r\n        \"AlertifyJS\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"alertify.defaults.autoreset\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/alertify/alertify\\\\.min\\\\.js\"\r\n            ],\r\n            \"description\": \"AlertifyJS is a javascript framework for developing browser dialogs and notifications.\",\r\n            \"website\": \"https://alertifyjs.com\"\r\n        },\r\n        \"Alexa Certified Site Metrics\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"_atrk_opts.domain\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.cloudfront\\\\.net/atrk\\\\.js\"\r\n            ],\r\n            \"description\": \"Alexa Certified Site Metrics is an analytics service wich monitors and analyses web traffic and can be used to keep track of user behavior.\",\r\n            \"website\": \"https://support.alexa.com/hc/en-us/sections/200063374\"\r\n        },\r\n        \"Algolia\": {\r\n            \"cats\": [\r\n                29\r\n            ],\r\n            \"cookies\": {\r\n                \"_algolia\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"__algolia\",\r\n                \"__algolia.algoliasearch.version\",\r\n                \"__global__.algolia\",\r\n                \"__next_data__.props.pageprops.appsettings.algolia_app_id\",\r\n                \"algolia_insights_src\",\r\n                \"algoliasearch\",\r\n                \"algoliasearch.version\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.algolia\"\r\n            },\r\n            \"description\": \"Algolia offers a hosted web search product delivering real-time results.\",\r\n            \"website\": \"https://www.algolia.com\"\r\n        },\r\n        \"Algolia DocSearch\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"docsearch.version\"\r\n            ],\r\n            \"implies\": [\r\n                \"Algolia\"\r\n            ],\r\n            \"description\": \"Algolia DocSearch is a search widget specifically designed for documentation websites.\",\r\n            \"website\": \"https://docsearch.algolia.com\"\r\n        },\r\n        \"Ali Reviews\": {\r\n            \"cats\": [\r\n                90,\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"alireviews_tags\"\r\n            ],\r\n            \"description\": \"Ali reviews is a shopify app to collect reviews from customers.\",\r\n            \"website\": \"https://apps.shopify.com/ali-reviews\"\r\n        },\r\n        \"Alibaba Cloud CDN\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.alicdn\\\\.com/\"\r\n            ],\r\n            \"description\": \"Alibaba Cloud CDN is a global network of servers designed to deliver high-performance, low-latency content to users around the world. It is a cloud-based service provided by Alibaba Cloud, a subsidiary of the Alibaba Group, that enables businesses to accelerate the delivery of their web content, including images, videos, and static files, to end-users.\",\r\n            \"website\": \"https://www.alibabacloud.com/product/content-delivery-network\"\r\n        },\r\n        \"Alibaba Cloud Object Storage Service\": {\r\n            \"cats\": [\r\n                63\r\n            ],\r\n            \"headers\": {\r\n                \"x-oss-object-type\": \"\",\r\n                \"x-oss-request-id\": \"\",\r\n                \"x-oss-storage-class\": \"\"\r\n            },\r\n            \"description\": \"Alibaba Cloud Object Storage Service (OSS) is a cloud-based object storage service provided by Alibaba Cloud, which allows users to store and access large amounts of data in the cloud.\",\r\n            \"website\": \"https://www.alibabacloud.com/product/object-storage-service\"\r\n        },\r\n        \"Alibaba Cloud Verification Code\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cf\\\\.aliyun\\\\.com/\"\r\n            ],\r\n            \"description\": \"Alibaba Cloud Verification Code is a security feature provided by Alibaba Cloud to help protect user accounts from unauthorised access.\",\r\n            \"website\": \"https://help.aliyun.com/document_detail/193141.html\"\r\n        },\r\n        \"All in One SEO Pack\": {\r\n            \"cats\": [\r\n                54,\r\n                87\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- all in one seo pack ([\\\\d.]+) \\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"All in One SEO plugin optimizes WordPress website and its content for search engines.\",\r\n            \"website\": \"https://aioseo.com\",\r\n            \"cpe\": \"cpe:2.3:a:aioseo:all_in_one_seo:*:*:*:*:*:wordpress:*:*\"\r\n        },\r\n        \"Alli\": {\r\n            \"cats\": [\r\n                54\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.alliai\\\\.com/\"\r\n            ],\r\n            \"description\": \"Alli is artificial intelligence for search engine optimisation.\",\r\n            \"website\": \"https://www.alliai.com\"\r\n        },\r\n        \"Alliance Auth\": {\r\n            \"cats\": [\r\n                69\r\n            ],\r\n            \"implies\": [\r\n                \"Bootstrap\",\r\n                \"Django\",\r\n                \"Font Awesome\",\r\n                \"Python\",\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"Alliance Auth is an access management platform designed for Eve Online groups. It controls access to applications and services based on in-game memberships.\",\r\n            \"website\": \"https://gitlab.com/allianceauth/allianceauth\"\r\n        },\r\n        \"AlloyUI\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"aui\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^https?://cdn\\\\.alloyui\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Bootstrap\",\r\n                \"YUI\"\r\n            ],\r\n            \"website\": \"https://www.alloyui.com\"\r\n        },\r\n        \"Allyable\": {\r\n            \"cats\": [\r\n                68\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"portal\\\\.allyable\\\\.com/\"\r\n            ],\r\n            \"description\": \"Allyable is an automated web accessibility solution with an AI engine.\",\r\n            \"website\": \"https://allyable.com\"\r\n        },\r\n        \"AlmaLinux\": {\r\n            \"cats\": [\r\n                28\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"almalinux\"\r\n            },\r\n            \"description\": \"AlmaLinux is an open-source, community-driven Linux operating system that fills the gap left by the discontinuation of the CentOS Linux stable release.\",\r\n            \"website\": \"https://almalinux.org\"\r\n        },\r\n        \"Alpine Linux\": {\r\n            \"cats\": [\r\n                28\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"alpine\"\r\n            },\r\n            \"description\": \"Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and busybox.\",\r\n            \"website\": \"https://www.alpinelinux.org\",\r\n            \"cpe\": \"cpe:2.3:o:alpinelinux:alpine_linux:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Alpine.js\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"alpine.version\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c[^\\u003e]+[^\\\\w-]x-data[^\\\\w-][^\\u003c]+\\\\;confidence:75\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/alpine(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"website\": \"https://github.com/alpinejs/alpine\"\r\n        },\r\n        \"AlternC\": {\r\n            \"cats\": [\r\n                9\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"js/alternc\\\\.js\"\r\n            ],\r\n            \"description\": \"AlternC is a set of software management on Linux shared hosting.\",\r\n            \"website\": \"https://alternc.com\"\r\n        },\r\n        \"AlumnIQ\": {\r\n            \"cats\": [\r\n                111\r\n            ],\r\n            \"cookies\": {\r\n                \"alumniq-online-giving\": \"\"\r\n            },\r\n            \"description\": \"AlumnIQ is a set of services to manage events, giving, email, volunteers, class agents, and more, all designed to work with your database of record.\",\r\n            \"website\": \"https://www.alumniq.com/platform/\"\r\n        },\r\n        \"AlvandCMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"alvandcms\\\\s([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"AlvandCMS is a PHP-based content management system that is commonly used in Iran.\",\r\n            \"website\": \"https://alvandcms.ir\"\r\n        },\r\n        \"Amaya\": {\r\n            \"cats\": [\r\n                20\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"amaya(?: v?([\\\\d.]+[a-z]))?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"Amaya is an open-source web browser editor to create and update documents on the web.\",\r\n            \"website\": \"https://www.w3.org/Amaya\"\r\n        },\r\n        \"Amazon ALB\": {\r\n            \"cats\": [\r\n                65\r\n            ],\r\n            \"cookies\": {\r\n                \"awsalb\": \"\",\r\n                \"awsalbcors\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"Amazon Web Services\"\r\n            ],\r\n            \"description\": \"Amazon Application Load Balancer (ALB) distributes incoming application traffic to increase availability and support content-based routing.\",\r\n            \"website\": \"https://aws.amazon.com/elasticloadbalancing/\"\r\n        },\r\n        \"Amazon Advertising\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.amazon-adsystem\\\\.com\"\r\n            ],\r\n            \"description\": \"Amazon Advertising (formerly AMS or Amazon Marketing Services) is a service that works in a similar way to pay-per-click ads on Google.\",\r\n            \"website\": \"https://advertising.amazon.com\"\r\n        },\r\n        \"Amazon Associates\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.associates-amazon\\\\.com\"\r\n            ],\r\n            \"description\": \"Amazon Associates is an affiliate marketing program that allows website owners and bloggers to create links and earn referral fees when customers click through and buy products from Amazon.\",\r\n            \"website\": \"https://affiliate-program.amazon.com\"\r\n        },\r\n        \"Amazon Aurora\": {\r\n            \"cats\": [\r\n                34\r\n            ],\r\n            \"implies\": [\r\n                \"Amazon Web Services\"\r\n            ],\r\n            \"description\": \"Amazon Aurora is a relational database service developed and offered by Amazon Web Services.\",\r\n            \"website\": \"https://aws.amazon.com/rds/aurora\"\r\n        },\r\n        \"Amazon CloudFront\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"headers\": {\r\n                \"via\": \"\\\\(cloudfront\\\\)$\",\r\n                \"x-amz-cf-id\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"Amazon Web Services\"\r\n            ],\r\n            \"description\": \"Amazon CloudFront is a fast content delivery network (CDN) service that securely delivers data, videos, applications, and APIs to customers globally with low latency, high transfer speeds.\",\r\n            \"website\": \"https://aws.amazon.com/cloudfront/\"\r\n        },\r\n        \"Amazon CloudWatch RUM\": {\r\n            \"cats\": [\r\n                78\r\n            ],\r\n            \"js\": [\r\n                \"awsrum\",\r\n                \"awsrumclient\",\r\n                \"awsrumclient.v\",\r\n                \"awsrumconfig\"\r\n            ],\r\n            \"description\": \"Amazon CloudWatch RUM is a real-user monitoring capability that helps you identify and debug issues in the client-side on web applications and enhance end user's digital experience.\",\r\n            \"website\": \"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM.html\"\r\n        },\r\n        \"Amazon Cognito\": {\r\n            \"cats\": [\r\n                69\r\n            ],\r\n            \"implies\": [\r\n                \"Amazon Web Services\"\r\n            ],\r\n            \"description\": \"Amazon Cognito lets you add user sign-up, sign-in, and access control to your web and mobile apps. Amazon Cognito supports sign-in with social identity providers, such as Apple, Facebook, Google, and Amazon, and enterprise identity providers via SAML 2.0 and OpenID Connect.\",\r\n            \"website\": \"https://aws.amazon.com/cognito/\"\r\n        },\r\n        \"Amazon EC2\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"\\\\(amazon\\\\)\"\r\n            },\r\n            \"implies\": [\r\n                \"Amazon Web Services\"\r\n            ],\r\n            \"description\": \"Amazon Elastic Compute Cloud is a part of Amazon.com's cloud-computing platform, Amazon Web Services, that allows users to rent virtual computers on which to run their own computer applications.\",\r\n            \"website\": \"https://aws.amazon.com/ec2/\"\r\n        },\r\n        \"Amazon ECS\": {\r\n            \"cats\": [\r\n                63\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^ecs\"\r\n            },\r\n            \"implies\": [\r\n                \"Amazon Web Services\",\r\n                \"Docker\"\r\n            ],\r\n            \"website\": \"https://aws.amazon.com/ecs/\"\r\n        },\r\n        \"Amazon EFS\": {\r\n            \"cats\": [\r\n                48\r\n            ],\r\n            \"implies\": [\r\n                \"Amazon Web Services\"\r\n            ],\r\n            \"description\": \"Amazon Elastic File System is a cloud storage service provided by Amazon Web Services.\",\r\n            \"website\": \"https://aws.amazon.com/efs/\"\r\n        },\r\n        \"Amazon ELB\": {\r\n            \"cats\": [\r\n                65\r\n            ],\r\n            \"cookies\": {\r\n                \"awselb\": \"\"\r\n            },\r\n            \"headers\": {\r\n                \"server\": \"awselb\"\r\n            },\r\n            \"implies\": [\r\n                \"Amazon Web Services\"\r\n            ],\r\n            \"description\": \"AWS ELB is a network load balancer service provided by Amazon Web Services for distributing traffic across multiple targets, such as Amazon EC2 instances, containers, IP addresses, and Lambda functions.\",\r\n            \"website\": \"https://aws.amazon.com/elasticloadbalancing/\"\r\n        },\r\n        \"Amazon Pay\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"amazonpayments\",\r\n                \"enableamazonpay\",\r\n                \"offamazonpayments\",\r\n                \"onamazonpaymentsready\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/amazonpayments(?:\\\\.min)?\\\\.js\",\r\n                \"\\\\.payments-amazon\\\\.com/\"\r\n            ],\r\n            \"meta\": {\r\n                \"id\": [\r\n                    \"amazon-payments-metadata\"\r\n                ]\r\n            },\r\n            \"description\": \"Amazon Pay is an online payments processing service that is owned by Amazon. It lets you use the payment methods associated with your Amazon account to make payments for goods and services.\",\r\n            \"website\": \"https://pay.amazon.com\"\r\n        },\r\n        \"Amazon S3\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"s3[^ ]*amazonaws\\\\.com\",\r\n                \"content-security-policy-report-only\": \"s3[^ ]*\\\\.amazonaws\\\\.com\",\r\n                \"server\": \"^amazons3$\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"s3[^ ]*\\\\.amazonaws\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Amazon Web Services\"\r\n            ],\r\n            \"description\": \"Amazon S3 or Amazon Simple Storage Service is a service offered by Amazon Web Services (AWS) that provides object storage through a web service interface.\",\r\n            \"website\": \"https://aws.amazon.com/s3/\"\r\n        },\r\n        \"Amazon SES\": {\r\n            \"cats\": [\r\n                75\r\n            ],\r\n            \"implies\": [\r\n                \"Amazon Web Services\"\r\n            ],\r\n            \"description\": \"Amazon Simple Email Service (SES) is an email service that enables developers to send mail from within any application.\",\r\n            \"website\": \"https://aws.amazon.com/ses/\"\r\n        },\r\n        \"Amazon Web Services\": {\r\n            \"cats\": [\r\n                62\r\n            ],\r\n            \"headers\": {\r\n                \"x-amz-delete-marker\": \"\",\r\n                \"x-amz-err-code\": \"\",\r\n                \"x-amz-err-message\": \"\",\r\n                \"x-amz-id-2\": \"\",\r\n                \"x-amz-req-time-micros\": \"\",\r\n                \"x-amz-request-id\": \"\",\r\n                \"x-amz-rid\": \"\",\r\n                \"x-amz-version-id\": \"\"\r\n            },\r\n            \"description\": \"Amazon Web Services (AWS) is a comprehensive cloud services platform offering compute power, database storage, content delivery and other functionality.\",\r\n            \"website\": \"https://aws.amazon.com/\"\r\n        },\r\n        \"Amazon Webstore\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"amzn\"\r\n            ],\r\n            \"description\": \"Amazon Webstore is an all-in-one hosted ecommerce website solution.\",\r\n            \"website\": \"https://aws.amazon.com/marketplace/pp/Amazon-Web-Services-Amazon-Webstore/B007NLVI2S\"\r\n        },\r\n        \"Ambassador\": {\r\n            \"cats\": [\r\n                94\r\n            ],\r\n            \"js\": [\r\n                \"_mbsy.integrations\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.getambassador\\\\.com/\"\r\n            ],\r\n            \"description\": \"Ambassador is a marketer-friendly software that simplifies referral marketing and helps automating the enrolment, tracking, rewarding and management process.\",\r\n            \"website\": \"https://www.getambassador.com\"\r\n        },\r\n        \"Amber\": {\r\n            \"cats\": [\r\n                18,\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^amber$\"\r\n            },\r\n            \"website\": \"https://amberframework.org\"\r\n        },\r\n        \"American Express\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"description\": \"American Express, also known as Amex, facilitates electronic funds transfers throughout the world, most commonly through branded credit cards, debit cards and prepaid cards.\",\r\n            \"website\": \"https://www.americanexpress.com\"\r\n        },\r\n        \"Ametys\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"ametys\\\\.js\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"(?:ametys|anyware technologies)\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"website\": \"https://ametys.org\"\r\n        },\r\n        \"Amex Express Checkout\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"aexp-static\\\\.com\"\r\n            ],\r\n            \"description\": \"Amex Express Checkout is a service that simplifies the checkout experience by auto-filling necessary cardholder payment data into merchant checkout fields.\",\r\n            \"website\": \"https://www.americanexpress.com/us/express-checkout/\"\r\n        },\r\n        \"Amiro.CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"amiro\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Amiro.CMS is a commercial content management system developed and distributed by the Russian company Amiro. Written in PHP and uses MySQL as a database.\",\r\n            \"website\": \"https://www.amiro.ru\"\r\n        },\r\n        \"Amobee\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"description\": \"Amobee is a cloud-based advertising and data management platform.\",\r\n            \"website\": \"https://www.amobee.com\"\r\n        },\r\n        \"Amplience\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"ampliancetemplates\"\r\n            ],\r\n            \"description\": \"Amplience is an API-first, headless content management platform for enterprise retail.\",\r\n            \"website\": \"https://amplience.com\"\r\n        },\r\n        \"Amplitude\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"__amplitude__\",\r\n                \"amplitude_key\",\r\n                \"amplitudeclient\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.(?:segment.+)?amplitude(?:\\\\.com|-plugins)\"\r\n            ],\r\n            \"description\": \"Amplitude is a web and mobile analytics solution with cross-platform user journey tracking, user behavior analysis and segmentation capabilities.\",\r\n            \"website\": \"https://amplitude.com\"\r\n        },\r\n        \"Analysys Ark\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"cookies\": {\r\n                \"ark_id\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"analysysagent\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"analysysfangzhou_js_sdk\\\\.min\\\\.js\\\\?v=([\\\\d.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"website\": \"https://ark.analysys.cn\"\r\n        },\r\n        \"Analyzee\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"analyzee._session\",\r\n                \"analyzee._sessionextend\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.analyzee\\\\.io/sdk/(.*)\\\\.js\"\r\n            ],\r\n            \"description\": \"Analyzee is an analytics tool that allows you to gain insights into visitor behavior and optimise your website's user experience using heatmaps and other analytics features.\",\r\n            \"website\": \"https://analyzee.io\"\r\n        },\r\n        \"AndersNoren Baskerville\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/baskerville(?:-2)?/\"\r\n            ],\r\n            \"description\": \"AndersNoren Baskerville is a responsive and retina-ready masonry WordPress theme for hoarders.\",\r\n            \"website\": \"https://andersnoren.se/teman/baskerville-wordpress-theme\"\r\n        },\r\n        \"AndersNoren Fukasawa\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/fukasawa/\"\r\n            ],\r\n            \"description\": \"AndersNoren Fukasawa is a minimal masonry style blog WordPress theme for photographers and collectors.\",\r\n            \"website\": \"https://andersnoren.se/teman/fukasawa-wordpress-theme\"\r\n        },\r\n        \"AndersNoren Hemingway\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/hemingway/\"\r\n            ],\r\n            \"description\": \"AndersNoren Hemingway is a clean and beautiful two-column WordPress theme for bloggers.\",\r\n            \"website\": \"https://andersnoren.se/teman/hemingway-wordpress-theme\"\r\n        },\r\n        \"AndersNoren Hitchcock\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/hitchcock/\"\r\n            ],\r\n            \"description\": \"AndersNoren Hitchcock is a portfolio WordPress theme for designers, photographers and other creatives.\",\r\n            \"website\": \"https://andersnoren.se/teman/hitchcock-wordpress-theme\"\r\n        },\r\n        \"AndersNoren Lovecraft\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/lovecraft/\"\r\n            ],\r\n            \"description\": \"AndersNoren Lovecraft is a beautiful two-column WordPress theme for bloggers.\",\r\n            \"website\": \"https://andersnoren.se/teman/lovecraft-wordpress-theme\"\r\n        },\r\n        \"Anetwork\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"static-cdn\\\\.anetwork\\\\.ir/\"\r\n            ],\r\n            \"website\": \"https://www.anetwork.ir\"\r\n        },\r\n        \"Angie\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^angie(?:/([\\\\d\\\\.]+))?$\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"C\",\r\n                \"Perl\"\r\n            ],\r\n            \"description\": \"Angie is a drop-in replacement for the Nginx web server aiming to extend the functionality of the original version.\",\r\n            \"website\": \"https://angie.software/en/\"\r\n        },\r\n        \"Angular\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"ng.coretokens\",\r\n                \"ng.probe\"\r\n            ],\r\n            \"implies\": [\r\n                \"TypeScript\"\r\n            ],\r\n            \"description\": \"Angular is a TypeScript-based open-source web application framework led by the Angular Team at Google.\",\r\n            \"website\": \"https://angular.io\",\r\n            \"cpe\": \"cpe:2.3:a:angularjs:angular:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Angular Material\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"js\": [\r\n                \"ngmaterial\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/([\\\\d.rc-]+)?/angular-material(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"AngularJS\"\r\n            ],\r\n            \"description\": \"Angular Material is a UI component library for Angular JS developers. Angular Material components assist in constructing attractive, consistent, and functional web pages and web applications.\",\r\n            \"website\": \"https://material.angularjs.org\"\r\n        },\r\n        \"AngularDart\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"js\": [\r\n                \"ngtestabilityregistries\"\r\n            ],\r\n            \"implies\": [\r\n                \"Dart\"\r\n            ],\r\n            \"website\": \"https://webdev.dartlang.org/angular/\"\r\n        },\r\n        \"AngularJS\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"angular\",\r\n                \"angular.version.full\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c(?:div|html)[^\\u003e]+ng-app=\",\r\n                \"\\u003cng-app\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?!angular\\\\.io)\\\\bangular.{0,32}\\\\.js\",\r\n                \"/([\\\\d.]+(?:-?rc[.\\\\d]*)*)/angular(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\",\r\n                \"angular[.-]([\\\\d.]*\\\\d)[^/]*\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"AngularJS is a JavaScript-based open-source web application framework led by the Angular Team at Google.\",\r\n            \"website\": \"https://angularjs.org\",\r\n            \"cpe\": \"cpe:2.3:a:angularjs:angular.js:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Animate.css\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"description\": \"Animate.css is a ready-to-use library collection of CSS3 animation effects.\",\r\n            \"website\": \"https://animate.style\"\r\n        },\r\n        \"Aniview Ad Server\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^(?!.*player).*aniview\\\\.com/\"\r\n            ],\r\n            \"description\": \"Aniview Ad Server is a technology developed by Aniview, a company that specialises in providing video advertising solutions. The Aniview Ad Server is a platform designed to manage and serve video ads to publishers, advertisers, and agencies.\",\r\n            \"website\": \"https://aniview.com/video-ad-servers/\"\r\n        },\r\n        \"Aniview Video Ad Player\": {\r\n            \"cats\": [\r\n                14\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"player\\\\.aniview\\\\.com/script/([\\\\d\\\\.]+)/\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"Aniview Ad Server\"\r\n            ],\r\n            \"description\": \"Aniview Video Ad Player is a video player technology developed by Aniview, a company that specialises in providing video advertising solutions.\",\r\n            \"website\": \"https://aniview.com/video-ad-player/\"\r\n        },\r\n        \"AnswerDash\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"answerdash\",\r\n                \"answerdash.__plugin\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.answerdash\\\\.com/\"\r\n            ],\r\n            \"description\": \"AnswerDash is a question and answer platform that serves business customers thereby reducing support costs and revealing customer needs.\",\r\n            \"website\": \"https://www.answerdash.com\"\r\n        },\r\n        \"Ant Design\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"js\": [\r\n                \"antd.version\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c[^\\u003e]*class=\\\"ant-(?:btn|col|row|layout|breadcrumb|menu|pagination|steps|select|cascader|checkbox|calendar|form|input-number|input|mention|rate|radio|slider|switch|tree-select|time-picker|transfer|upload|avatar|badge|card|carousel|collapse|list|popover|tooltip|table|tabs|tag|timeline|tree|alert|modal|message|notification|progress|popconfirm|spin|anchor|back-top|divider|drawer)\",\r\n                \"\\u003ci class=\\\"anticon anticon-\"\r\n            ],\r\n            \"description\": \"Ant Design is a UI library that can be used with data flow solutions and application frameworks in any React ecosystem.\",\r\n            \"website\": \"https://ant.design\"\r\n        },\r\n        \"AntV G2\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"g2.chart\",\r\n                \"g2.version\"\r\n            ],\r\n            \"description\": \"AntV G2 is a highly interactive data-driven visualisation grammar for statistical charts.\",\r\n            \"website\": \"https://g2plot.antv.vision\"\r\n        },\r\n        \"AntV G6\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"g6.graph\",\r\n                \"g6.version\"\r\n            ],\r\n            \"description\": \"AntV G6 is a graph visualisation framework in JavaScript.\",\r\n            \"website\": \"https://g6.antv.vision\"\r\n        },\r\n        \"Antee IPO\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"ipo.api.hidespinner\"\r\n            ],\r\n            \"meta\": {\r\n                \"author\": [\r\n                    \"antee\\\\ss\\\\.r\\\\.o\\\\.\"\r\n                ]\r\n            },\r\n            \"description\": \"Antee is a Czech company that will make a custom-made website for you, then you manage it in CMS IPO.\",\r\n            \"website\": \"https://ipo.antee.cz\"\r\n        },\r\n        \"Anthology Encompass\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"description\": \"Anthology Encompass is a constituent engagement management provider or educational institutions that provides modules to help you manage events, websites and content, data, and more.\",\r\n            \"website\": \"https://www.anthology.com/products/lifecycle-engagement/alumni-and-advancement/anthology-encompass\"\r\n        },\r\n        \"AntiBot.Cloud\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/antibot8/static/peel\\\\.js\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"antibot\\\\.cloud\\\\sv\\\\.\\\\s([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"AntiBot.Cloud is a PHP script and cloud service to protect websites from bots and junk traffic.\",\r\n            \"website\": \"https://antibot.cloud\"\r\n        },\r\n        \"Antsomi CDP 365\": {\r\n            \"cats\": [\r\n                97\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.cdp\\\\.asia/\"\r\n            ],\r\n            \"description\": \"Antsomi CDP 365 is a AI-enabled customer data platform from Southeast Asia.\",\r\n            \"website\": \"https://www.antsomi.com\"\r\n        },\r\n        \"AnyClip\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"anyclip\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.anyclip\\\\.com\"\r\n            ],\r\n            \"description\": \"AnyClip is a video engagement platform that uses an AI-driven content analysis engine to analyze and categorize video content in real-time to create personalised video feeds.\",\r\n            \"website\": \"https://www.anyclip.com\"\r\n        },\r\n        \"Apache APISIX\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^apisix(?:/([\\\\d\\\\.]+))?$\\\\;version:\\\\1\",\r\n                \"x-apisix-upstream-status\": \"\"\r\n            },\r\n            \"description\": \"Apache APISIX is an open-source, cloud-native API gateway developed by the Apache Software Foundation. It provides a scalable and high-performance solution for managing and securing API traffic.\",\r\n            \"website\": \"https://apisix.apache.org\",\r\n            \"cpe\": \"cpe:2.3:a:apache:apisix:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Apache HTTP Server\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"(?:apache(?:$|/([\\\\d.]+)|[^/-])|(?:^|\\\\b)httpd)\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"Apache is a free and open-source cross-platform web server software.\",\r\n            \"website\": \"https://httpd.apache.org/\",\r\n            \"cpe\": \"cpe:2.3:a:apache:http_server:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Apache JSPWiki\": {\r\n            \"cats\": [\r\n                8\r\n            ],\r\n            \"html\": [\r\n                \"\\u003chtml[^\\u003e]* xmlns:jspwiki=\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"jspwiki\"\r\n            ],\r\n            \"implies\": [\r\n                \"Apache Tomcat\"\r\n            ],\r\n            \"description\": \"Apache JSPWiki is an open-source Wiki engine, built around standard JEE components (Java, servlets, JSP).\",\r\n            \"website\": \"https://jspwiki.org\",\r\n            \"cpe\": \"cpe:2.3:a:apache:jspwiki:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Apache Tomcat\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^apache-coyote\",\r\n                \"x-powered-by\": \"\\\\btomcat\\\\b(?:-([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"description\": \"Apache Tomcat is an open-source implementation of the Java Servlet, JavaServer Pages, Java Expression Language and WebSocket technologies.\",\r\n            \"website\": \"https://tomcat.apache.org\",\r\n            \"cpe\": \"cpe:2.3:a:apache:tomcat:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Apache Traffic Server\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"ats/?([\\\\d.]+)?\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"Apache Traffic Server is an open-source caching and proxying server that serves as an HTTP/1.1 and HTTP/2 reverse proxy with caching capabilities, load balancing, request routing, SSL termination, and support for advanced HTTP features.\",\r\n            \"website\": \"https://trafficserver.apache.org/\",\r\n            \"cpe\": \"cpe:2.3:a:apache:traffic_server:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Apache Wicket\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"js\": [\r\n                \"wicket\"\r\n            ],\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"description\": \"Apache Wicket is an open-source Java web application framework for building scalable and maintainable web applications.\",\r\n            \"website\": \"https://wicket.apache.org\",\r\n            \"cpe\": \"cpe:2.3:a:apache:wicket:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Apereo CAS\": {\r\n            \"cats\": [\r\n                69\r\n            ],\r\n            \"implies\": [\r\n                \"Java\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Apereo CAS is an open and well-documented authentication protocol. The primary implementation of the protocol is an open-source Java server component by the same name hosted here, with support for a plethora of additional authentication protocols and features.\",\r\n            \"website\": \"https://www.apereo.org/projects/cas\"\r\n        },\r\n        \"ApexCharts.js\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"apexcharts\"\r\n            ],\r\n            \"description\": \"ApexCharts is a modern JavaScript charting library that empowers developers to build interactive data visualizations for commercial and non-commercial projects.\",\r\n            \"website\": \"https://apexcharts.com\"\r\n        },\r\n        \"ApexChat\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"apexchat\",\r\n                \"apexchat_dompopup_chatwindow_client\"\r\n            ],\r\n            \"description\": \"ApexChat is a company that provides businesses with live chat software and services to facilitate real-time customer engagement, support, lead generation, and enhanced online interactions.\",\r\n            \"website\": \"https://www.apexchat.com\"\r\n        },\r\n        \"ApexPages\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"salesforce\\\\.com apexpages\"\r\n            },\r\n            \"implies\": [\r\n                \"Salesforce\"\r\n            ],\r\n            \"website\": \"https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_intro.htm\"\r\n        },\r\n        \"Apigee\": {\r\n            \"cats\": [\r\n                4,\r\n                19\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/profiles/apigee\"\r\n            ],\r\n            \"description\": \"Apigee is an API gateway management tool to exchange data across cloud services and applications\",\r\n            \"website\": \"https://cloud.google.com/apigee/\"\r\n        },\r\n        \"Apisearch\": {\r\n            \"cats\": [\r\n                29\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"static\\\\.apisearch\\\\.cloud\"\r\n            ],\r\n            \"description\": \"Apisearch is a real-time search platform for ecommerce.\",\r\n            \"website\": \"https://apisearch.io\"\r\n        },\r\n        \"Aplazame\": {\r\n            \"cats\": [\r\n                41,\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"aplazame\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"aplazame\\\\.com/static/aplazame\\\\.js\",\r\n                \"cdn\\\\.aplazame\\\\.com/aplazame\\\\.js\"\r\n            ],\r\n            \"description\": \"Aplazame is a consumer credit company that provides instant financing service for online purchases. It combines an overtime payment method integrated at the ecommerce checkout with marketing tools to enable ecommerce to use financing as a promotional lever to boost sales.\",\r\n            \"website\": \"https://aplazame.com\"\r\n        },\r\n        \"Apollo\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"__apollo_client__\",\r\n                \"__apollo_client__.version\",\r\n                \"__next_data__.props.pageprops.__apollo_state__\"\r\n            ],\r\n            \"implies\": [\r\n                \"GraphQL\",\r\n                \"TypeScript\\\\;confidence:50\"\r\n            ],\r\n            \"description\": \"Apollo is a fully-featured caching GraphQL client with integrations for React, Angular, and more.\",\r\n            \"website\": \"https://www.apollographql.com\"\r\n        },\r\n        \"Apollo13Themes Rife\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/rife(?:-free)?/(?:.+script\\\\.min\\\\.js(?:\\\\?ver=([\\\\d\\\\.]+)))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Apollo13Themes Rife is a great portfolio and photography WordPress theme with 7 ready-to-use demo layouts.\",\r\n            \"website\": \"https://apollo13themes.com/rife\"\r\n        },\r\n        \"ApostropheCMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"apos.csrfcookiename\",\r\n                \"apos_dialogs.dialogattributes\"\r\n            ],\r\n            \"implies\": [\r\n                \"Node.js\"\r\n            ],\r\n            \"description\": \"ApostropheCMS is a powerful website builder platform built on an enterprise open source CMS.\",\r\n            \"website\": \"https://apostrophecms.com\"\r\n        },\r\n        \"AppDynamics\": {\r\n            \"cats\": [\r\n                10,\r\n                78\r\n            ],\r\n            \"js\": [\r\n                \"adrum.conf.agentver\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"adrum\"\r\n            ],\r\n            \"description\": \"AppDynamics is an application performance management (APM) and IT operations analytics (ITOA) company based in San Francisco.\",\r\n            \"website\": \"https://appdynamics.com\"\r\n        },\r\n        \"AppNexus\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"appnexus\",\r\n                \"appnexusvideo\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"adnxs\\\\.(?:net|com)\"\r\n            ],\r\n            \"description\": \"AppNexus is a cloud-based software platform that enables and optimizes programmatic online advertising.\",\r\n            \"website\": \"https://appnexus.com\"\r\n        },\r\n        \"Appcues\": {\r\n            \"cats\": [\r\n                58\r\n            ],\r\n            \"js\": [\r\n                \"appcues\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"fast\\\\.appcues\\\\.com\"\r\n            ],\r\n            \"description\": \"Appcues is a solution for measuring and improving product adoption.\",\r\n            \"website\": \"https://www.appcues.com/\"\r\n        },\r\n        \"Appian\": {\r\n            \"cats\": [\r\n                62\r\n            ],\r\n            \"js\": [\r\n                \"_appian_proxies_initialized\",\r\n                \"appian\",\r\n                \"appian\",\r\n                \"webpackjsonpappian\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"tempo/ui/sail-client/embeddedbootstrap\\\\.nocache\\\\.js\"\r\n            ],\r\n            \"description\": \"Appian is an enterprise low-code application platform.\",\r\n            \"website\": \"https://www.appian.com\"\r\n        },\r\n        \"Apple Business Chat\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"applebusinesschat.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/apple_business_chat_commerce/.+/apple_message_button_v([\\\\d\\\\.]+)\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Apple Business Chat is a service from Apple that allows your organization to directly chat with your customers using the Messages app.\",\r\n            \"website\": \"https://developer.apple.com/documentation/businesschat\"\r\n        },\r\n        \"Apple MapKit JS\": {\r\n            \"cats\": [\r\n                35\r\n            ],\r\n            \"js\": [\r\n                \"mapkit._tileprovider\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.apple-mapkit\\\\.com\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"//cdn\\\\.apple-mapkit\\\\.com/mk/([\\\\d\\\\.\\\\w]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Apple MapKit JS lets you embed interactive maps directly into your websites across platforms and operating systems, including iOS and Android.\",\r\n            \"website\": \"https://developer.apple.com/maps/web/\"\r\n        },\r\n        \"Apple Pay\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"applepay\",\r\n                \"applepaybuttonclicked\",\r\n                \"braintree.applepay\",\r\n                \"checkout.enabledpayments.applepay\",\r\n                \"dw.applepay\",\r\n                \"enableapplepay\"\r\n            ],\r\n            \"description\": \"Apple Pay is a mobile payment and digital wallet service by Apple that allows users to make payments in person, in iOS apps, and on the web.\",\r\n            \"website\": \"https://www.apple.com/apple-pay\"\r\n        },\r\n        \"Apple Sign-in\": {\r\n            \"cats\": [\r\n                69\r\n            ],\r\n            \"js\": [\r\n                \"appleid\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"appleid\\\\.auth\\\\.js\"\r\n            ],\r\n            \"meta\": {\r\n                \"appleid-signin-client-id\": []\r\n            },\r\n            \"description\": \"Apple Sign-in is based on OAuth 2.0 and OpenID Connect, and provides a privacy-friendly way for users to sign in to websites and apps.\",\r\n            \"website\": \"https://developer.apple.com/sign-in-with-apple/\"\r\n        },\r\n        \"Apple iCloud Mail\": {\r\n            \"cats\": [\r\n                30\r\n            ],\r\n            \"description\": \"Apple iCloud Mail is a webmail service provided by Apple, Inc.\",\r\n            \"website\": \"https://www.apple.com/icloud/\"\r\n        },\r\n        \"ApplicantStack\": {\r\n            \"cats\": [\r\n                101\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.applicantstack\\\\.com/\"\r\n            ],\r\n            \"description\": \"ApplicantStack is a full-service applicant tracking system that automates and streamlines all stages of the hiring process.\",\r\n            \"website\": \"https://www.applicantstack.com\"\r\n        },\r\n        \"Application Request Routing\": {\r\n            \"cats\": [\r\n                65\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^arr/([\\\\d\\\\.]+)$\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"IIS\"\r\n            ],\r\n            \"description\": \"Application Request Routing (ARR) is an extension to Internet Information Server (IIS), which enables an IIS server to function as a load balancer.\",\r\n            \"website\": \"https://www.iis.net/downloads/microsoft/application-request-routing\"\r\n        },\r\n        \"Appointy\": {\r\n            \"cats\": [\r\n                72\r\n            ],\r\n            \"description\": \"Appointy is a cloud-based scheduling solution that helps professionals and businesses to manage their appointment scheduling activities and routines.\",\r\n            \"website\": \"https://www.appointy.com/\"\r\n        },\r\n        \"Appsflyer\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"appsflyersdkobject\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"websdk\\\\.appsflyer\\\\.com\"\r\n            ],\r\n            \"description\": \"AppsFlyer is a SaaS mobile marketing analytics and attribution platform.\",\r\n            \"website\": \"https://www.appsflyer.com/\"\r\n        },\r\n        \"Apptus\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"cookies\": {\r\n                \"apptus.customerkey\": \"\",\r\n                \"apptus.sessionkey\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"apptusconfig\",\r\n                \"apptusdebug\",\r\n                \"apptusesales\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.esales\\\\.apptus\\\\.com.+(?:apptus-esales-api-([\\\\d.]+))\\\\.min\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Apptus is an AI-powered ecommerce optimisation software provider.\",\r\n            \"website\": \"https://www.apptus.com\"\r\n        },\r\n        \"Aprimo\": {\r\n            \"cats\": [\r\n                95\r\n            ],\r\n            \"description\": \"Aprimo is a United States-based company that develops and sells marketing automation software and digital asset management technology.\",\r\n            \"website\": \"https://www.aprimo.com\"\r\n        },\r\n        \"AptusShop\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^aptusshop\\\\.pl$\"\r\n                ]\r\n            },\r\n            \"description\": \"AptusShop is proprietary online store software created from scratch and developed by Aptus.pl.\",\r\n            \"website\": \"https://www.aptusshop.pl\"\r\n        },\r\n        \"AquilaCMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"powered-by\": [\r\n                    \"aquilacms\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Amazon Web Services\",\r\n                \"MongoDB\",\r\n                \"Next.js\",\r\n                \"Node.js\",\r\n                \"React\"\r\n            ],\r\n            \"description\": \"AquilaCMS is a fullstack, headless CMS written in JavaScript.\",\r\n            \"website\": \"https://www.aquila-cms.com/\"\r\n        },\r\n        \"Arastta\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"headers\": {\r\n                \"arastta\": \"^(.+)$\\\\;version:\\\\1\",\r\n                \"x-arastta\": \"\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"arastta\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Arastta is a free and open-source project with contributors from all over the world.\",\r\n            \"website\": \"https://arastta.org\",\r\n            \"cpe\": \"cpe:2.3:a:arastta:ecommerce:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Arc\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"js\": [\r\n                \"arc.p2pclient\",\r\n                \"arcwidgetjsonp\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"arc\\\\.io/widget\\\\.js\"\r\n            ],\r\n            \"description\": \"Arc is a peer-to-peer CDN that pays site owners for using it. Instead of expensive servers in distant datacenters, Arc's network is comprised of browsers.\",\r\n            \"website\": \"https://arc.io\"\r\n        },\r\n        \"Arc XP\": {\r\n            \"cats\": [\r\n                1,\r\n                95\r\n            ],\r\n            \"js\": [\r\n                \"fusion.arcsite\"\r\n            ],\r\n            \"description\": \"Arc XP is a cloud-based digital experience platform that helps enterprise companies, retail brands and media and entertainment organization create and distribute content, drive digital commerce, and deliver powerful experiences.\",\r\n            \"website\": \"https://www.arcxp.com\"\r\n        },\r\n        \"ArcGIS API for JavaScript\": {\r\n            \"cats\": [\r\n                35\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"basemaps\\\\.arcgis\\\\.com\",\r\n                \"js\\\\.arcgis\\\\.com\"\r\n            ],\r\n            \"description\": \"ArcGIS API for JavaScript is a tool used to embed maps and tasks in web applications.\",\r\n            \"website\": \"https://developers.arcgis.com/javascript/\"\r\n        },\r\n        \"Arena\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"arenahub.arenaidentify\",\r\n                \"arenaim.initializeliveblog\",\r\n                \"arenaliveblog\"\r\n            ],\r\n            \"description\": \"Arena widget is an embeddable widget provided by the Arena platform, which allows users to embed live blogs directly on their website.\",\r\n            \"website\": \"https://arena.im\"\r\n        },\r\n        \"Arreva\": {\r\n            \"cats\": [\r\n                111\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/arreva-onlinedonations-portlet/\"\r\n            ],\r\n            \"description\": \"Arreva is a fundraising software that provides the ability to mobilise constituents using the donor tracking system.\",\r\n            \"website\": \"https://www.arreva.com\"\r\n        },\r\n        \"Arsys Domain Parking\": {\r\n            \"cats\": [\r\n                109\r\n            ],\r\n            \"description\": \"Arsys is a Spanish domain registrar.\",\r\n            \"website\": \"https://www.arsys.es\"\r\n        },\r\n        \"Artifactory\": {\r\n            \"cats\": [\r\n                47\r\n            ],\r\n            \"js\": [\r\n                \"artifactoryupdates\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cspan class=\\\"version\\\"\\u003eartifactory(?: pro)?(?: power pack)?(?: ([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"wicket/resource/org\\\\.artifactory\\\\.\"\r\n            ],\r\n            \"website\": \"https://jfrog.com/open-source/#os-arti\",\r\n            \"cpe\": \"cpe:2.3:a:jfrog:artifactory:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Artifactory Web Server\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"artifactory(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Artifactory\"\r\n            ],\r\n            \"website\": \"https://jfrog.com/open-source/#os-arti\",\r\n            \"cpe\": \"cpe:2.3:a:jfrog:artifactory:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Aruba.it\": {\r\n            \"cats\": [\r\n                88,\r\n                62\r\n            ],\r\n            \"headers\": {\r\n                \"x-servername\": \"\\\\.aruba\\\\.it\"\r\n            },\r\n            \"description\": \"Aruba.it is an Italian company mainly active in the web hosting and domain registration businesses.\",\r\n            \"website\": \"https://www.aruba.it\"\r\n        },\r\n        \"ArvanCloud\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"js\": [\r\n                \"arvancloud\"\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"arvancloud\"\r\n            },\r\n            \"description\": \"ArvanCloud is a cloud services provider, offering a wide range of incorporated cloud services including CDN, DDoS mitigation, Cloud Managed DNS, Cloud Security, VoD/AoD Streaming, Live Streaming, Cloud Compute, Cloud Object Storage, and PaaS.\",\r\n            \"website\": \"https://www.arvancloud.ir\"\r\n        },\r\n        \"Arya CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"aryacms\"\r\n            ],\r\n            \"description\": \"Arya CMS is a lesser-known content management system that may not have a significant user base or active development community.\",\r\n            \"website\": \"https://sndigitalhub.com\"\r\n        },\r\n        \"Asana\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"description\": \"Asana is a web and mobile application designed to help teams organize, track, and manage their work.\",\r\n            \"website\": \"https://asana.com\"\r\n        },\r\n        \"AsciiDoc\": {\r\n            \"cats\": [\r\n                1,\r\n                20,\r\n                27\r\n            ],\r\n            \"js\": [\r\n                \"asciidoc\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^asciidoc ([\\\\d.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"AsciiDoc is a text document format for writing documentation, slideshows, web pages, man pages and blogs. AsciiDoc files can be translated to many formats including HTML, PDF, EPUB, man page.\",\r\n            \"website\": \"https://www.methods.co.nz/asciidoc\"\r\n        },\r\n        \"Asciidoctor\": {\r\n            \"cats\": [\r\n                4\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^asciidoctor\\\\s([\\\\d\\\\.]+)$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Ruby\"\r\n            ],\r\n            \"description\": \"Asciidoctor is an open-source text processor and publishing toolchain, written in Ruby, for converting AsciiDoc content to HTML 5, DocBook 5, and other formats.\",\r\n            \"website\": \"https://github.com/asciidoctor/asciidoctor\"\r\n        },\r\n        \"Asciinema\": {\r\n            \"cats\": [\r\n                14\r\n            ],\r\n            \"js\": [\r\n                \"asciinema\",\r\n                \"asciinemaplayer\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003casciinema-player\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"asciinema\\\\.org/\"\r\n            ],\r\n            \"description\": \"Asciinema is a free and open-source solution for recording terminal sessions and sharing them on the web.\",\r\n            \"website\": \"https://asciinema.org/\"\r\n        },\r\n        \"Asendia\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Asendia is an international mail joint venture of French La Poste and Swiss Post.\",\r\n            \"website\": \"https://www.asendia.com\"\r\n        },\r\n        \"Asgaros Forum\": {\r\n            \"cats\": [\r\n                87,\r\n                2\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/asgaros-forum/\"\r\n            ],\r\n            \"description\": \"Asgaros Forum is a lightweight and simple forum plugin for WordPress.\",\r\n            \"website\": \"https://www.asgaros.de\"\r\n        },\r\n        \"Assertive Yield\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"assertive.predict\"\r\n            ],\r\n            \"description\": \"Assertive Yield is a SaaS company that specialises in helping SSPs (Supply-Side Platforms), publishers, and ad networks optimise their advertising revenue through real-time attribution and yield optimisation strategies.\",\r\n            \"website\": \"https://www.assertiveyield.com\"\r\n        },\r\n        \"Astra\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"themes/astra\\\\s*\\\\.js(?:\\\\?ver=([0-9.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Astra is a fast, lightweight, and highly customizable WordPress Theme.\",\r\n            \"website\": \"https://wpastra.com/\"\r\n        },\r\n        \"Astra Widgets\": {\r\n            \"cats\": [\r\n                87,\r\n                5\r\n            ],\r\n            \"description\": \"Astra Widgets is a handy little free plugin that lets you display address, list icons or social profiles within the Astra Theme.\",\r\n            \"website\": \"https://wpastra.com/did-you-know-astra-is-widget-ready\"\r\n        },\r\n        \"Astro\": {\r\n            \"cats\": [\r\n                57,\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"astro\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^astro\\\\sv([\\\\d\\\\.]+)$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"Astro is a new JavaScript-based static site builder.\",\r\n            \"website\": \"https://astro.build\"\r\n        },\r\n        \"Astute Solutions\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.iperceptions\\\\.com\"\r\n            ],\r\n            \"description\": \"Astute Solutions is a customer engagement software.\",\r\n            \"website\": \"https://astutesolutions.com\"\r\n        },\r\n        \"Atatus\": {\r\n            \"cats\": [\r\n                78,\r\n                13\r\n            ],\r\n            \"js\": [\r\n                \"atatus.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/atatus\\\\.js\"\r\n            ],\r\n            \"description\": \"Atatus is a full-stack observability tool that let you identify the performance bottlenecks and helps you optimise your application at the right time.\",\r\n            \"website\": \"https://www.atatus.com\"\r\n        },\r\n        \"Athena Search\": {\r\n            \"cats\": [\r\n                29\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"wp-content/plugins/athena-search\"\r\n            ],\r\n            \"description\": \"Athena Search is a customizable autocomplete, feature-rich dashboard, smart predictions, real-time reports search engine developed from scratch by Syncit Group’s.\",\r\n            \"website\": \"https://www.athenasearch.io\"\r\n        },\r\n        \"Atlassian Bitbucket\": {\r\n            \"cats\": [\r\n                47\r\n            ],\r\n            \"js\": [\r\n                \"bitbucket\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cli\\u003eatlassian bitbucket \\u003cspan title=\\\"[a-z0-9]+\\\" id=\\\"product-version\\\" data-commitid=\\\"[a-z0-9]+\\\" data-system-build-number=\\\"[a-z0-9]+\\\"\\u003e v([\\\\d.]+)\\u003c\\\\;version:\\\\1\"\r\n            ],\r\n            \"meta\": {\r\n                \"application-name\": [\r\n                    \"bitbucket\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Python\"\r\n            ],\r\n            \"description\": \"Bitbucket is a web-based version control repository hosting service for source code and development projects that use either Mercurial or Git revision control systems.\",\r\n            \"website\": \"https://www.atlassian.com/software/bitbucket/overview/\",\r\n            \"cpe\": \"cpe:2.3:a:atlassian:bitbucket:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Atlassian Confluence\": {\r\n            \"cats\": [\r\n                8\r\n            ],\r\n            \"headers\": {\r\n                \"x-confluence-request-time\": \"\"\r\n            },\r\n            \"meta\": {\r\n                \"confluence-request-time\": []\r\n            },\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"description\": \"Atlassian Confluence is a web-based collaboration wiki tool.\",\r\n            \"website\": \"https://www.atlassian.com/software/confluence/overview/team-collaboration-software\",\r\n            \"cpe\": \"cpe:2.3:a:atlassian:confluence:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Atlassian FishEye\": {\r\n            \"cats\": [\r\n                47\r\n            ],\r\n            \"cookies\": {\r\n                \"fesessionid\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003ctitle\\u003e(?:log in to )?fisheye (?:and crucible )?([\\\\d.]+)?\\u003c/title\\u003e\\\\;version:\\\\1\"\r\n            ],\r\n            \"website\": \"https://www.atlassian.com/software/fisheye/overview/\",\r\n            \"cpe\": \"cpe:2.3:a:atlassian:fisheye:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Atlassian Jira\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"js\": [\r\n                \"jira.id\"\r\n            ],\r\n            \"meta\": {\r\n                \"application-name\": [\r\n                    \"jira\"\r\n                ],\r\n                \"data-version\": [\r\n                    \"([\\\\d.]+)\\\\;version:\\\\1\\\\;confidence:0\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"website\": \"https://www.atlassian.com/software/jira/overview/\",\r\n            \"cpe\": \"cpe:2.3:a:atlassian:jira:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Atlassian Jira Issue Collector\": {\r\n            \"cats\": [\r\n                13,\r\n                47\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"atlassian\\\\.jira\\\\.collector\\\\.plugin\",\r\n                \"jira-issue-collector-plugin\"\r\n            ],\r\n            \"description\": \"Atlassian Jira Issue Collector is a tool used to download a list of websites using with email addresses, phone numbers and LinkedIn profiles.\",\r\n            \"website\": \"https://www.atlassian.com/software/jira/overview/\"\r\n        },\r\n        \"Atlassian Statuspage\": {\r\n            \"cats\": [\r\n                13,\r\n                62\r\n            ],\r\n            \"headers\": {\r\n                \"x-statuspage-skip-logging\": \"\",\r\n                \"x-statuspage-version\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003ca[^\\u003e]*href=\\\"https?://(?:www\\\\.)?statuspage\\\\.io/powered-by[^\\u003e]+\\u003e\"\r\n            ],\r\n            \"description\": \"Statuspage is a status and incident communication tool.\",\r\n            \"website\": \"https://www.atlassian.com/software/statuspage\"\r\n        },\r\n        \"Atome\": {\r\n            \"cats\": [\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"atomewidget\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"gateway\\\\.apaylater\\\\.com/\"\r\n            ],\r\n            \"description\": \"Atome is a brand that allows users to purchase products online and pay for them in monthly installments.\",\r\n            \"website\": \"https://www.atome.sg/\"\r\n        },\r\n        \"Attentive\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"__attentive\",\r\n                \"__attentive_domain\",\r\n                \"attn_email_save\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.attn\\\\.tv\"\r\n            ],\r\n            \"description\": \"Attentive is a personalised mobile messaging platform that helps retail \\u0026 ecommerce brands acquire, retain, and interact with mobile shoppers.\",\r\n            \"website\": \"https://www.attentivemobile.com\"\r\n        },\r\n        \"Attraqt\": {\r\n            \"cats\": [\r\n                29,\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"_attraqt\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.attraqt\\\\.io\"\r\n            ],\r\n            \"description\": \"Attraqt provides AI-driven search, merchandising and personalisation solutions.\",\r\n            \"website\": \"https://www.attraqt.com/\"\r\n        },\r\n        \"AudioEye\": {\r\n            \"cats\": [\r\n                68\r\n            ],\r\n            \"js\": [\r\n                \"$ae.attrhooks\",\r\n                \"window.audioeye.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:\\\\.)?audioeye\\\\.com/(?:ae\\\\.js)?\"\r\n            ],\r\n            \"description\": \"AudioEye is an accessibility overlay which claims to provide ADA and WCAG accessibility compliance.\",\r\n            \"website\": \"https://www.audioeye.com\"\r\n        },\r\n        \"Audiohook\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"description\": \"Audiohook specializes in programmatic audio advertising.\",\r\n            \"website\": \"https://www.audiohook.com\"\r\n        },\r\n        \"Aument\": {\r\n            \"cats\": [\r\n                75,\r\n                98\r\n            ],\r\n            \"description\": \"Aument is an ecommerce toolbox with easy to use marketing actions and workflows.\",\r\n            \"website\": \"https://aument.io\"\r\n        },\r\n        \"Aura\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"js\": [\r\n                \"aura.app\"\r\n            ],\r\n            \"description\": \"Aura is an open-source UI framework built by Salesforce for developing dynamic web apps for mobile and desktop devices.\",\r\n            \"website\": \"https://github.com/forcedotcom/aura\"\r\n        },\r\n        \"Aurelia\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"_aureliaconfiguremoduleloader\",\r\n                \"localaurelia\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/aurelia[\\\\d\\\\w\\\\-\\\\.]+\\\\.js\"\r\n            ],\r\n            \"description\": \"Aurelia is an open-source UI JavaScript framework designed to create single page applications.\",\r\n            \"website\": \"https://aurelia.io\"\r\n        },\r\n        \"Auryc\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"aurycjslibconfig.base.code_version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.auryc\\\\.com/\"\r\n            ],\r\n            \"description\": \"Auryc is a client-side journey intelligence platform that surfaces real-time insights.\",\r\n            \"website\": \"https://www.auryc.com\"\r\n        },\r\n        \"Australia Post\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Australia Post is the government business enterprise that provides postal services in Australia.\",\r\n            \"website\": \"https://auspost.com.au\"\r\n        },\r\n        \"Auth0\": {\r\n            \"cats\": [\r\n                69\r\n            ],\r\n            \"headers\": {\r\n                \"x-auth0-requestid\": \"\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"/auth0(?:-js)?/([\\\\d.]+)/auth0(?:.min)?\\\\.js\\\\;version:\\\\1\",\r\n                \"/auth0-js@([\\\\d.]+)/([a-z]+)/auth0\\\\.min\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Auth0 provides authentication and authorisation as a service.\",\r\n            \"website\": \"https://auth0.github.io/auth0.js/index.html\",\r\n            \"cpe\": \"cpe:2.3:a:auth0:auth0.js:*:*:*:*:*:node.js:*:*\"\r\n        },\r\n        \"Auth0 Lock\": {\r\n            \"cats\": [\r\n                69\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/lock/([\\\\d.]+)/lock(?:.min)?\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"Auth0\"\r\n            ],\r\n            \"description\": \"Auth0 Lock enables you to easily add social identity providers, so that your users can log in seamlessly using any desired provider.\",\r\n            \"website\": \"https://auth0.com/docs/libraries/lock\"\r\n        },\r\n        \"Autoketing\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"description\": \"Autoketing is a marketing automation platform.\",\r\n            \"website\": \"https://autoketing.com\"\r\n        },\r\n        \"Autoketing Product Reviews\": {\r\n            \"cats\": [\r\n                100,\r\n                90\r\n            ],\r\n            \"js\": [\r\n                \"autoketingproduct_reivew\"\r\n            ],\r\n            \"implies\": [\r\n                \"Autoketing\",\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Autoketing Product Reviews is an application that allows shop owners to manage the product review section on their website.\",\r\n            \"website\": \"https://apps.shopify.com/product-reviews-autoketing\"\r\n        },\r\n        \"Automatad\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//go\\\\.automatad\\\\.com/\"\r\n            ],\r\n            \"description\": \"Automatad is a digital media products company that provides a suite of programmatic monetisation solutions.\",\r\n            \"website\": \"https://automatad.com/\"\r\n        },\r\n        \"Automatic.css\": {\r\n            \"cats\": [\r\n                66,\r\n                87\r\n            ],\r\n            \"description\": \"Automatic.css is a CSS framework for WordPress page builders.\",\r\n            \"website\": \"https://automaticcss.com\"\r\n        },\r\n        \"Automizely\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"am_consent_sdk.product\",\r\n                \"amstorefrontkit.hrequesteventtarget\",\r\n                \"automizelyconversions\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.automizely\\\\.com/\"\r\n            ],\r\n            \"description\": \"Automizely creates and manages enterprise-level marketing automation systems including contact and CRM mappings, lead funnels, email nurture, lead-generating pages, and blog posts, and website integrations.\",\r\n            \"website\": \"https://www.automizely.com/marketing\"\r\n        },\r\n        \"Autopilot\": {\r\n            \"cats\": [\r\n                32,\r\n                74,\r\n                75\r\n            ],\r\n            \"js\": [\r\n                \"autopilot\",\r\n                \"autopilotanywhere\"\r\n            ],\r\n            \"description\": \"Autopilot is a visual marketing software that enables users to create marketing campaigns and manage lead conversions. \",\r\n            \"website\": \"https://www.autopilothq.com\"\r\n        },\r\n        \"Autoptimize\": {\r\n            \"cats\": [\r\n                87,\r\n                92\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/autoptimize/.+\\\\.js(?:\\\\?ao_version=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Autoptimize is a WordPress plugin that optimises website performance by aggregating, minifying, and compressing HTML, CSS, and JavaScript files.\",\r\n            \"website\": \"https://autoptimize.com\"\r\n        },\r\n        \"Avada AVASHIP\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"avada_fsb.bars\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"freeshippingbar\\\\.apps\\\\.avada\\\\.io/\"\r\n            ],\r\n            \"description\": \"Avada AVASHIP is an order tracking Shopify app.\",\r\n            \"website\": \"https://apps.shopify.com/avaship\"\r\n        },\r\n        \"Avada Boost Sales\": {\r\n            \"cats\": [\r\n                100,\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"avada_bs_last_update\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"boostsales\\\\.apps\\\\.avada\\\\.io/\"\r\n            ],\r\n            \"description\": \"AVADA Boost Sales is a one-stop solution that is specially designed to increase your sales with countdown timer, trust badges, sales pop, sales boost and many more.\",\r\n            \"website\": \"https://apps.shopify.com/avada-boost-sales\"\r\n        },\r\n        \"Avada SEO\": {\r\n            \"cats\": [\r\n                100,\r\n                54\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"seo\\\\.apps\\\\.avada\\\\.io/\"\r\n            ],\r\n            \"description\": \"Avada SEO is a Shopify app built and designed following strict SEO practices.\",\r\n            \"website\": \"https://apps.shopify.com/avada-seo-suite\"\r\n        },\r\n        \"Avada Size Chart\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"sizechart\\\\.apps\\\\.avada\\\\.io/\"\r\n            ],\r\n            \"description\": \"Avada Size Chart is a thoughtful app that helps online stores reduce return rates with useful size guides.\",\r\n            \"website\": \"https://apps.shopify.com/avada-size-chart\"\r\n        },\r\n        \"Avangate\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"__avng8_callbacks\",\r\n                \"avacart.version\",\r\n                \"avaslugify\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^https?://edge\\\\.avangate\\\\.net/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Verifone 2Checkout\"\r\n            ],\r\n            \"description\": \"Avangate (2Checkout) is a digital ecommerce platform for businesses that sell physical goods or digital products.\",\r\n            \"website\": \"https://www.2checkout.com\"\r\n        },\r\n        \"Avanser\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"avansercore\",\r\n                \"avanserjs\",\r\n                \"avanseroptions\"\r\n            ],\r\n            \"description\": \"Avanser allow you to track every call and enable your business to make better-informed decisions based on your phone calls.\",\r\n            \"website\": \"https://www.avanser.com\"\r\n        },\r\n        \"Avasize\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^https?://cdn\\\\.avasize\\\\.com/\"\r\n            ],\r\n            \"website\": \"https://www.avasize.com\"\r\n        },\r\n        \"Avis Verifies\": {\r\n            \"cats\": [\r\n                90\r\n            ],\r\n            \"js\": [\r\n                \"avisverifies\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.avis-verifies\\\\.com/\"\r\n            ],\r\n            \"description\": \"Avis Verifies is a complete solution for managing your customer reviews.\",\r\n            \"website\": \"https://www.netreviews.com\"\r\n        },\r\n        \"Aweber\": {\r\n            \"cats\": [\r\n                32,\r\n                75\r\n            ],\r\n            \"js\": [\r\n                \"awt_analytics\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.aweber\\\\.com/\"\r\n            ],\r\n            \"description\": \"AWeber is an email marketing service.\",\r\n            \"website\": \"https://www.aweber.com\"\r\n        },\r\n        \"Awesomplete\": {\r\n            \"cats\": [\r\n                29\r\n            ],\r\n            \"js\": [\r\n                \"awesomplete\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]+href=\\\"[^\\u003e]*awesomplete(?:\\\\.min)?\\\\.css\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/awesomplete\\\\.js(?:$|\\\\?)\"\r\n            ],\r\n            \"description\": \"Awesomplete is a tool in the Javascript UI Libraries category of a tech stack.\",\r\n            \"website\": \"https://leaverou.github.io/awesomplete/\"\r\n        },\r\n        \"Axeptio\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"js\": [\r\n                \"axeptiosdk\",\r\n                \"axeptiosettings\"\r\n            ],\r\n            \"description\": \"Axeptio is a trusted third party that collects and archive users' consent in a GDPR compliant fashion.\",\r\n            \"website\": \"https://www.axeptio.eu\"\r\n        },\r\n        \"Axios\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"axios.get\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/axios(@|/)([\\\\d.]+)(?:/[a-z]+)?/axios(?:.min)?\\\\.js\\\\;version:\\\\2\"\r\n            ],\r\n            \"description\": \"Promise based HTTP client for the browser and node.js\",\r\n            \"website\": \"https://github.com/axios/axios\"\r\n        },\r\n        \"Azion\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^azion \"\r\n            },\r\n            \"website\": \"https://www.azion.com/\"\r\n        },\r\n        \"Azko CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//js\\\\.fw\\\\.azko\\\\.fr/\"\r\n            ],\r\n            \"description\": \"Azko CMS is a content management system developed by Azko (Septeo Group) specifically launched for lawyers in France.\",\r\n            \"website\": \"https://www.azko.fr\"\r\n        },\r\n        \"Azoya\": {\r\n            \"cats\": [\r\n                6,\r\n                106\r\n            ],\r\n            \"js\": [\r\n                \"image_cdn_host\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-azoya-webisteid\": \"\"\r\n            },\r\n            \"description\": \"Azoya helps international brands and retailers sell directly to Chinese consumers through cross-border ecommerce.\",\r\n            \"website\": \"https://www.azoyagroup.com\"\r\n        },\r\n        \"Azure\": {\r\n            \"cats\": [\r\n                62\r\n            ],\r\n            \"cookies\": {\r\n                \"arraffinity\": \"\",\r\n                \"tipmix\": \"\"\r\n            },\r\n            \"headers\": {\r\n                \"azure-regionname\": \"\",\r\n                \"azure-sitename\": \"\",\r\n                \"azure-slotname\": \"\",\r\n                \"azure-version\": \"\",\r\n                \"server\": \"^windows-azure\",\r\n                \"x-ms-client-request-id\": \"\",\r\n                \"x-ms-correlation-request-id\": \"\",\r\n                \"x-ms-gateway-requestid\": \"\"\r\n            },\r\n            \"description\": \"Azure is a cloud computing service for building, testing, deploying, and managing applications and services through Microsoft-managed data centers.\",\r\n            \"website\": \"https://azure.microsoft.com\"\r\n        },\r\n        \"Azure AD B2C\": {\r\n            \"cats\": [\r\n                69\r\n            ],\r\n            \"implies\": [\r\n                \"Azure\"\r\n            ],\r\n            \"description\": \"Azure Active Directory B2C is a customer identity access management (CIAM) solution.\",\r\n            \"website\": \"https://azure.microsoft.com/en-us/services/active-directory/external-identities/b2c/\"\r\n        },\r\n        \"Azure CDN\": {\r\n            \"cats\": [\r\n                31,\r\n                23\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^(?:ecacc|ecs|ecd)\",\r\n                \"x-ec-debug\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"Azure\"\r\n            ],\r\n            \"description\": \"Azure Content Delivery Network (CDN) reduces load times, save bandwidth and speed responsiveness.\",\r\n            \"website\": \"https://azure.microsoft.com/en-us/services/cdn/\"\r\n        },\r\n        \"Azure Edge Network\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.azureedge\\\\.net\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"\\\\.azureedge\\\\.net/\"\r\n            ],\r\n            \"description\": \"Azure Edge Network is a global network infrastructure provided by Microsoft Azure. It is designed to deliver content, applications, and services to end-users with low latency and high performance. The Azure Edge Network consists of a combination of Azure Content Delivery Network (CDN), Azure Front Door, and Azure Traffic Manager.\",\r\n            \"website\": \"https://learn.microsoft.com/en-us/azure/cdn/cdn-overview\"\r\n        },\r\n        \"Azure Front Door\": {\r\n            \"cats\": [\r\n                65\r\n            ],\r\n            \"cookies\": {\r\n                \"aslbsa\": \"\",\r\n                \"aslbsacors\": \"\"\r\n            },\r\n            \"headers\": {\r\n                \"x-azure-ref\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"Azure\"\r\n            ],\r\n            \"description\": \"Azure Front Door is a scalable and secure entry point for fast delivery of your global web applications.\",\r\n            \"website\": \"https://docs.microsoft.com/en-us/azure/frontdoor/\"\r\n        },\r\n        \"Azure Monitor\": {\r\n            \"cats\": [\r\n                10,\r\n                92\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"js\\\\.monitor\\\\.azure\\\\.com\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"js\\\\.monitor\\\\.azure\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Azure\"\r\n            ],\r\n            \"description\": \"Azure Monitor collects monitoring telemetry from a variety of on-premises and Azure sources. Azure Monitor helps you maximise the availability and performance of your applications and services.\",\r\n            \"website\": \"https://azure.microsoft.com/en-us/services/monitor\"\r\n        },\r\n        \"B2C Europe\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"B2C Europe offers logistic solutions for your ecommerce businesses.\",\r\n            \"website\": \"https://www.b2ceurope.eu/\"\r\n        },\r\n        \"BEM\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c[^\\u003e]+data-bem\"\r\n            ],\r\n            \"description\": \"BEM (Block, Element, Modifier) is a naming convention for classes in HTML and CSS what was developed by Yandex.\",\r\n            \"website\": \"https://en.bem.info\"\r\n        },\r\n        \"BIGACE\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"bigace ([\\\\d.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Bigace is a free open-source content management developed in PHP and JavaScript that uses a MySQL or ADOdb environment.\",\r\n            \"website\": \"https://github.com/bigace\"\r\n        },\r\n        \"BON Loyalty\": {\r\n            \"cats\": [\r\n                84,\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"bonshopinfo.appearance\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"app\\\\.bonloyalty\\\\.com/\"\r\n            ],\r\n            \"description\": \"BON Loyalty is a free rewards and referrals app that helps merchants increase customer engagement with captivating points, rewards \\u0026 referral program.\",\r\n            \"website\": \"https://bonloyalty.com\"\r\n        },\r\n        \"BOOM\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"x-supplied-by\": \"mana\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^boom site builder$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"WordPress\"\r\n            ],\r\n            \"website\": \"https://manaandisheh.com\"\r\n        },\r\n        \"BRT\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"BRT, also known as Bartolini, is an Italian-based logistics service provider.\",\r\n            \"website\": \"https://www.brt.it\"\r\n        },\r\n        \"BSmart\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"bsmartstate\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"bsgetbsmartstock\",\r\n                \"bsmartconfirmwindow\",\r\n                \"bsmartpricelist\"\r\n            ],\r\n            \"description\": \"BSmart is an ecommerce platform, programmed by Microline.\",\r\n            \"website\": \"https://www.bsmart.co.il/?utm_source=wappalyzer\\u0026utm_medium=referral\"\r\n        },\r\n        \"Babel\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"_babelpolyfill\"\r\n            ],\r\n            \"description\": \"Babel is a free and open-source transcompiler for writing next generation JavaScript.\",\r\n            \"website\": \"https://babeljs.io\"\r\n        },\r\n        \"Bablic\": {\r\n            \"cats\": [\r\n                89\r\n            ],\r\n            \"js\": [\r\n                \"bablic\"\r\n            ],\r\n            \"description\": \"Bablic is a localisation solution to translate your website.\",\r\n            \"website\": \"https://www.bablic.com/\"\r\n        },\r\n        \"Babylist\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"babylist\\\\.com/\"\r\n            ],\r\n            \"description\": \"Babylist is a universal wish list.\",\r\n            \"website\": \"https://www.babylist.com\"\r\n        },\r\n        \"Babylon.js\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"babylon.addressmode\"\r\n            ],\r\n            \"description\": \"Babylon.js is a real time 3D engine using a JavaScript library for displaying 3D graphics in a web browser via HTML5. The source code is available on GitHub and distributed under the Apache License 2.0.\",\r\n            \"website\": \"https://www.babylonjs.com/\"\r\n        },\r\n        \"Back In Stock\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"app\\\\.backinstock\\\\.org/\"\r\n            ],\r\n            \"description\": \"Back In Stock lets your customers choose restock alerts for specific variant combinations, including size, colour or style.\",\r\n            \"website\": \"https://backinstock.org\"\r\n        },\r\n        \"Backbone.js\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"backbone\",\r\n                \"backbone.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"backbone.*\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Underscore.js\"\r\n            ],\r\n            \"description\": \"BackboneJS is a JavaScript library that allows to develop and structure the client side applications that run in a web browser.\",\r\n            \"website\": \"https://backbonejs.org\",\r\n            \"cpe\": \"cpe:2.3:a:backbone_project:backbone:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Backdrop\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"backdrop\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-backdrop-cache\": \"\",\r\n                \"x-generator\": \"^backdrop cms(?:\\\\s([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^backdrop cms(?:\\\\s([\\\\d.]+))?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Backdrop is an open-source content management system (CMS) derived from Drupal 7, offering a user-friendly interface, customisable content types, taxonomies, views, theming capabilities, extensibility through modules, and regular security updates.\",\r\n            \"website\": \"https://backdropcms.org\",\r\n            \"cpe\": \"cpe:2.3:a:backdropcms:backdrop:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Baidu Analytics (百度统计)\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"hm\\\\.baidu\\\\.com/hm?\\\\.js\"\r\n            ],\r\n            \"description\": \"Baidu Analytics (百度统计) is a free tool for tracking and reporting traffic data of users visiting your site.\",\r\n            \"website\": \"https://tongji.baidu.com/\"\r\n        },\r\n        \"Baidu Maps\": {\r\n            \"cats\": [\r\n                35\r\n            ],\r\n            \"js\": [\r\n                \"bmap.version\",\r\n                \"bmap_api_version\"\r\n            ],\r\n            \"description\": \"Baidu Maps is a desktop and mobile web mapping service application and technology provided by Baidu, offering satellite imagery, street maps, street view and indoor view perspectives, as well as functions such as a route planner for traveling by foot, car, or with public transportation.\",\r\n            \"website\": \"https://map.baidu.com\"\r\n        },\r\n        \"BambooHR\": {\r\n            \"cats\": [\r\n                101\r\n            ],\r\n            \"js\": [\r\n                \"scrolltobamboohr\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.bamboohr\\\\.com\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"\\\\.bamboohr\\\\.com/\"\r\n            ],\r\n            \"description\": \"BambooHR is an American technology company that provides human resources software as a service.\",\r\n            \"website\": \"https://www.bamboohr.com\"\r\n        },\r\n        \"Bambuser\": {\r\n            \"cats\": [\r\n                103\r\n            ],\r\n            \"js\": [\r\n                \"_bambuser\",\r\n                \"bambuserliveshopping\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.bambuser\\\\.com/\"\r\n            ],\r\n            \"description\": \"Bambuser is a SaaS company based in Stockholm that provides live video shopping technology.\",\r\n            \"website\": \"https://bambuser.com\"\r\n        },\r\n        \"BandsInTown Events Widget\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"widget\\\\.bandsintown\\\\.com/\"\r\n            ],\r\n            \"description\": \"Bandsintown Events Widget is a free widget which makes it simple to embed your event listings and allow fans to buy tickets, RSVP, follow you and join your Email \\u0026 SMS lists.\",\r\n            \"website\": \"https://artists.bandsintown.com/support/events-widget\"\r\n        },\r\n        \"Banshee\": {\r\n            \"cats\": [\r\n                1,\r\n                18\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"banshee php framework v([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"banshee php\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Banshee is a PHP website framework with a main focus on security. Banshee is protected against common attacks like SQL injection, cross-site scripting, cross-site request forgery and session hijacking.\",\r\n            \"website\": \"https://www.banshee-php.org\"\r\n        },\r\n        \"Barba.js\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"barba.version\"\r\n            ],\r\n            \"description\": \"Barba.js is a small and easy-to-use javascript library that helps you creating fluid and smooth transitions between your website's pages.\",\r\n            \"website\": \"https://barba.js.org\"\r\n        },\r\n        \"Barilliance\": {\r\n            \"cats\": [\r\n                76,\r\n                98\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.barilliance\\\\.net/\"\r\n            ],\r\n            \"description\": \"Barilliance is an ecommerce personalisation tools including cart abandonment emails, personalised product recommendations, onsite personalisation, and live notifications.\",\r\n            \"website\": \"https://www.barilliance.com\"\r\n        },\r\n        \"Base\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"base.app.open_nav\",\r\n                \"base_api.shop_id\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"thebase\\\\.in/js\"\r\n            ],\r\n            \"meta\": {\r\n                \"base-theme-name\": [\r\n                    \"\\\\;confidence:50\"\r\n                ],\r\n                \"base-theme-version\": [\r\n                    \"\\\\d+\\\\;confidence:50\"\r\n                ]\r\n            },\r\n            \"description\": \"Base is a hosted ecommerce platform that allows business owners to set up an online store and sell their products online.\",\r\n            \"website\": \"https://thebase.in\"\r\n        },\r\n        \"Basic\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"headers\": {\r\n                \"www-authenticate\": \"^basic\"\r\n            },\r\n            \"description\": \"Basic is an authetication method used by some web servers.\",\r\n            \"website\": \"https://tools.ietf.org/html/rfc7617\"\r\n        },\r\n        \"Basil.css\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"description\": \"Basil.css is a responsive and customizable UI framework.\",\r\n            \"website\": \"https://basilcss.com\"\r\n        },\r\n        \"Basis Technologies\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn01\\\\.basis\\\\.net\"\r\n            ],\r\n            \"description\": \"Basis Technologies, formerly ‘Centro,’ provides cloud-based workflow automation and business intelligence software for marketing.\",\r\n            \"website\": \"https://basis.net/\"\r\n        },\r\n        \"Batflat\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^batflat$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\",\r\n                \"SQLite\"\r\n            ],\r\n            \"description\": \"Batflat is a lightweight CMS for free.\",\r\n            \"website\": \"https://batflat.org\"\r\n        },\r\n        \"Bazaarvoice Curation\": {\r\n            \"cats\": [\r\n                96\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.curalate\\\\.com\",\r\n                \"edge\\\\.curalate\\\\.com\"\r\n            ],\r\n            \"description\": \"Bazaarvoice Curation is a content curation service Bazaarvoice provides post it's acquisition of Curalate.\",\r\n            \"website\": \"https://www.bazaarvoice.com/products/visual-and-social-content/\"\r\n        },\r\n        \"Bazaarvoice Reviews\": {\r\n            \"cats\": [\r\n                90\r\n            ],\r\n            \"js\": [\r\n                \"bv.api\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"apps\\\\.bazaarvoice\\\\.com\"\r\n            ],\r\n            \"description\": \"Bazaarvoice is a provider of user-generated content solutions like ratings and reviews and Q\\u0026A.\",\r\n            \"website\": \"https://www.bazaarvoice.com/products/ratings-and-reviews/\"\r\n        },\r\n        \"Beam AfterSell\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"aftersell.hooks\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.aftersell\\\\.app/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"AfterSell is a Shopify app by Beam which helps brands create powerful post purchase offers.\",\r\n            \"website\": \"https://www.aftersell.com\"\r\n        },\r\n        \"Beam OutSell\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"outsellairecommendationsisenabled\",\r\n                \"outsellapp\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//outsellapp\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"OutSell is a Shopify app by Beam. Frequently Bought Together, Discounted Upsell, Also Bought.\",\r\n            \"website\": \"https://apps.shopify.com/outsell\"\r\n        },\r\n        \"Beamer\": {\r\n            \"cats\": [\r\n                85\r\n            ],\r\n            \"js\": [\r\n                \"_beamer_url\",\r\n                \"beamer.enabled\"\r\n            ],\r\n            \"description\": \"Beamer is a feature management platform that allows businesses to manage and share new product releases, feature updates, and bug fixes with their customers.\",\r\n            \"website\": \"https://www.getbeamer.com\"\r\n        },\r\n        \"Beans\": {\r\n            \"cats\": [\r\n                84\r\n            ],\r\n            \"js\": [\r\n                \"beans3\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.trybeans\\\\.com\"\r\n            ],\r\n            \"description\": \"Beans is a provider of ecommerce loyalty programs.\",\r\n            \"website\": \"https://www.trybeans.com/\"\r\n        },\r\n        \"Beehiiv\": {\r\n            \"cats\": [\r\n                11\r\n            ],\r\n            \"description\": \"Beehiiv is a relatively young, hosted newsletter platform built for businesses and creators.\",\r\n            \"website\": \"https://www.beehiiv.com\"\r\n        },\r\n        \"Beehiiv RSS feed\": {\r\n            \"cats\": [\r\n                49\r\n            ],\r\n            \"description\": \"Beehiiv RSS feed is a feature of the Beehiiv. Beehiiv is a relatively young, hosted newsletter platform built for businesses and creators.\",\r\n            \"website\": \"https://www.beehiiv.com\"\r\n        },\r\n        \"Beeketing\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"beeketinganalyticsparams\",\r\n                \"beeketingsdkloaded\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"sdk\\\\.beeketing\\\\.com/\"\r\n            ],\r\n            \"description\": \"Beeketing is a suite of marketing apps for ecommerce shop owners.\",\r\n            \"website\": \"https://beeketing.com\"\r\n        },\r\n        \"Beeswax\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"segment\\\\.prod\\\\.bidr\\\\.io\"\r\n            ],\r\n            \"description\": \"Beeswax offers Bidder-as-a-Service solution.\",\r\n            \"website\": \"https://www.beeswax.com/\"\r\n        },\r\n        \"Bentobox\": {\r\n            \"cats\": [\r\n                1,\r\n                93\r\n            ],\r\n            \"js\": [\r\n                \"bentoanalytics\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.getbento\\\\.com/\"\r\n            ],\r\n            \"description\": \"Bentobox is a restaurant website platform that handles menus, reservations, gift cards and more.\",\r\n            \"website\": \"https://getbento.com\"\r\n        },\r\n        \"Better Price\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"fc_metafield_betterprice.betterpricesuccess\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/shopify-apps//js/betterprice/betterprice\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Better Price is a Shopify app which provide coupons to real leads only when discounted price is requested build by Architechpro.\",\r\n            \"website\": \"https://apps.shopify.com/better-price\"\r\n        },\r\n        \"Better Stack\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//(?:uptime\\\\.)?(?:betteruptime|betterstack)\\\\.com/\"\r\n            ],\r\n            \"description\": \"Better Stack is the all-in-one infrastructure monitoring platform for your incident management, uptime monitoring, and status pages.\",\r\n            \"website\": \"https://betterstack.com/uptime\"\r\n        },\r\n        \"BetterDocs\": {\r\n            \"cats\": [\r\n                4\r\n            ],\r\n            \"js\": [\r\n                \"betterdocs.feedback\",\r\n                \"betterdocs_pro.feedback\",\r\n                \"betterdocspublic.post_id\"\r\n            ],\r\n            \"description\": \"BetterDocs is an advanced documentation and knowledge base plugin for WordPress and Shopify.\",\r\n            \"website\": \"https://betterdocs.co\"\r\n        },\r\n        \"BetterDocs plugin\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/betterdocs(?:-pro)?/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"BetterDocs\"\r\n            ],\r\n            \"description\": \"BetterDocs plugin is an advanced documentation and knowledge base plugin for WordPress.\",\r\n            \"website\": \"https://betterdocs.co/docs/wordpress\"\r\n        },\r\n        \"Betty Blocks\": {\r\n            \"cats\": [\r\n                47,\r\n                62\r\n            ],\r\n            \"meta\": {\r\n                \"description\": [\r\n                    \"^made with betty blocks$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"React\"\r\n            ],\r\n            \"description\": \"Betty Blocks is a cloud-based application development solution featuring a no-code, drag-and-drop interface for developing business applications.\",\r\n            \"website\": \"https://www.bettyblocks.com\"\r\n        },\r\n        \"Beyable\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"cookies\": {\r\n                \"beyable-cart\": \"\",\r\n                \"beyable-cartd\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"beyable\",\r\n                \"beyabledomain\",\r\n                \"beyablekey\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"msecnd\\\\.net/api/beyablejsv(\\\\d+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Beyable is a suite of tools that analyze website traffic to understand visitors' behaviors in real-time, through multi-channel in order to optimise conversion rate.\",\r\n            \"website\": \"https://beyable.com\"\r\n        },\r\n        \"BeyondMenu\": {\r\n            \"cats\": [\r\n                51,\r\n                93\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"static\\\\.beyondmenu\\\\.com/\"\r\n            ],\r\n            \"description\": \"BeyondMenu is an online food ordering service.\",\r\n            \"website\": \"https://www.beyondmenu.com/contactus.aspx\"\r\n        },\r\n        \"Big Cartel\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"big cartel\"\r\n                ]\r\n            },\r\n            \"description\": \"Big Cartel is a cloud-hosted ecommerce platform.\",\r\n            \"website\": \"https://www.bigcartel.com\"\r\n        },\r\n        \"BigCommerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"bigcommerce_config\",\r\n                \"bigcommerce_i18n\"\r\n            ],\r\n            \"scripts\": [\r\n                \"bigcommerceproductid\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:\\\\.|plugins/)?bigcommerce(?:\\\\.com)?/(?:assets)?\"\r\n            ],\r\n            \"description\": \"BigCommerce is a hosted ecommerce platform that allows business owners to set up an online store and sell their products online.\",\r\n            \"website\": \"https://www.bigcommerce.com\"\r\n        },\r\n        \"BigCommerce B2B Edition\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"bundleb2b.text.tpa\",\r\n                \"bundleb2bfeatureflags\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.bundleb2b\\\\.net/\"\r\n            ],\r\n            \"description\": \"BigCommerce B2B Edition is a specialised version of the BigCommerce ecommerce platform tailored for B2B companies, offering features such as custom pricing, catalogues, bulk ordering, quote requests, multi-user accounts, PO processing, and advanced reporting.\",\r\n            \"website\": \"https://www.bundleb2b.com\"\r\n        },\r\n        \"BigDataCloud IP Geolocation\": {\r\n            \"cats\": [\r\n                79\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"bigdatacloud\\\\.net\"\r\n            ],\r\n            \"description\": \"BigDataCloud IP Geolocation API provides detailed and accurate locality and security metrics of an IP address.\",\r\n            \"website\": \"https://www.bigdatacloud.com/packages/ip-geolocation\"\r\n        },\r\n        \"BigTree CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"bigtree.growling\",\r\n                \"bigtreematrix\",\r\n                \"bigtreetagadder\"\r\n            ],\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"BigTree CMS is an extremely extensible open-source CMS built on PHP and MySQL.\",\r\n            \"website\": \"https://www.bigtreecms.org\",\r\n            \"cpe\": \"cpe:2.3:a:bigtreecms:bigtree_cms:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Bigin\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"js\": [\r\n                \"bigin._checkdatasize\",\r\n                \"bigin_sdk_api\",\r\n                \"bigin_search\",\r\n                \"bigincafe24disableoptions\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"sdk\\\\.bigin\\\\.io/\"\r\n            ],\r\n            \"description\": \"Bigin is a cloud-based customer relationship management (CRM) software.\",\r\n            \"website\": \"https://en.bigin.io\"\r\n        },\r\n        \"Bigware\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"bigwadminid\": \"\",\r\n                \"bigwarecsid\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"(?:diese \\u003ca href=[^\\u003e]+bigware\\\\.de|\\u003ca href=[^\\u003e]+/main_bigware_\\\\d+\\\\.php)\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://bigware.de\",\r\n            \"cpe\": \"cpe:2.3:a:bigware:bigware_shop:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Bikayi\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"assets\\\\.bikayi\\\\.com/\"\r\n            ],\r\n            \"description\": \"Bikayi is a WhatsApp-integrated ecommerce store.\",\r\n            \"website\": \"https://bikayi.com\"\r\n        },\r\n        \"Billbee\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Billbee is an order processing and inventory management solution.\",\r\n            \"website\": \"https://www.billbee.io/\"\r\n        },\r\n        \"Binance Pay\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"description\": \"Binance Pay is a contactless, borderless, and secure cryptocurrency payment technology designed by Binance.\",\r\n            \"website\": \"https://pay.binance.com\"\r\n        },\r\n        \"Birdeye\": {\r\n            \"cats\": [\r\n                32,\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"bfiframe\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"birdeye\\\\.com\",\r\n                \"birdeye\\\\.com/embed\"\r\n            ],\r\n            \"description\": \"Birdeye is an all-in-one customer experience platform.\",\r\n            \"website\": \"https://birdeye.com\"\r\n        },\r\n        \"Bitcoin\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"description\": \"Bitcoin is a decentralized digital currency, without a central bank or single administrator, that can be sent from user to user on the peer-to-peer bitcoin network without the need for intermediaries.\",\r\n            \"website\": \"https://en.wikipedia.org/wiki/Bitcoin\"\r\n        },\r\n        \"BiteSpeed\": {\r\n            \"cats\": [\r\n                100,\r\n                98\r\n            ],\r\n            \"scripts\": [\r\n                \"app\\\\.bitespeed\\\\.co/\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.bitespeed\\\\.co/\"\r\n            ],\r\n            \"description\": \"BiteSpeed is an all-in-one Shopify marketing app which helps ecommerce brands recover revenue.\",\r\n            \"website\": \"https://www.bitespeed.co\"\r\n        },\r\n        \"Bitrix24\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"js\": [\r\n                \"b24tracker\",\r\n                \"bitrix24formloader\",\r\n                \"bitrix24formobject\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.bitrix24\\\\..+/bitrix/js/crm/form_loader\\\\.js\",\r\n                \"cdn\\\\.bitrix24\\\\.com\"\r\n            ],\r\n            \"description\": \"Bitrix24 is a set of tools for the organization and management of business processes.\",\r\n            \"website\": \"https://www.bitrix24.com\"\r\n        },\r\n        \"BittAds\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"bitt\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"bittads\\\\.com/js/bitt\\\\.js$\"\r\n            ],\r\n            \"website\": \"https://bittads.com\"\r\n        },\r\n        \"Bizweb\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"bizweb\"\r\n            ],\r\n            \"website\": \"https://www.bizweb.vn\"\r\n        },\r\n        \"Blackbaud CRM\": {\r\n            \"cats\": [\r\n                111\r\n            ],\r\n            \"js\": [\r\n                \"blackbaud\",\r\n                \"don_premium_map\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"js/convio/modules\\\\.js\"\r\n            ],\r\n            \"description\": \"Blackbaud CRM gathers fundraising, online applications, actionable prospect research and analytics, and multichannel direct marketing into one platform.\",\r\n            \"website\": \"https://www.blackbaud.com\"\r\n        },\r\n        \"Blade\": {\r\n            \"cats\": [\r\n                18,\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"blade-([\\\\w.]+)?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"website\": \"https://lets-blade.com\"\r\n        },\r\n        \"Blazor\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"blazor\\\\.host\\\\.min\\\\.js\",\r\n                \"blazor\\\\.server\\\\.js\",\r\n                \"blazor\\\\.webassembly\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"website\": \"https://dotnet.microsoft.com/apps/aspnet/web-apps/blazor\"\r\n        },\r\n        \"Blessing Skin\": {\r\n            \"cats\": [\r\n                7\r\n            ],\r\n            \"js\": [\r\n                \"blessing.version\"\r\n            ],\r\n            \"implies\": [\r\n                \"Laravel\"\r\n            ],\r\n            \"description\": \"Blessing Skin is a plubin that brings your custom skins back in offline Minecraft servers.\",\r\n            \"website\": \"https://github.com/bs-community/blessing-skin-server\"\r\n        },\r\n        \"Blesta\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"blesta_sid\": \"\"\r\n            },\r\n            \"website\": \"https://www.blesta.com\"\r\n        },\r\n        \"Blitz\": {\r\n            \"cats\": [\r\n                92\r\n            ],\r\n            \"js\": [\r\n                \"blitz\",\r\n                \"blitzreplace\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^blitz$\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003c!-- cached by blitz on\"\r\n            ],\r\n            \"implies\": [\r\n                \"Craft CMS\"\r\n            ],\r\n            \"description\": \"Blitz provides intelligent static page caching for creating lightning-fast sites with Craft CMS.\",\r\n            \"website\": \"https://putyourlightson.com/plugins/blitz\"\r\n        },\r\n        \"Blitz.js\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"js\": [\r\n                \"__blitz_middleware_hooks\",\r\n                \"__blitz_suspense_enabled\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^blitz\\\\.js?([0-9.]+)?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Next.js\"\r\n            ],\r\n            \"description\": \"Blitz.js is a web development framework that uses Next.js and React and includes features for authentication, authorization, and database integration to simplify the creation of high-performance and scalable web applications.\",\r\n            \"website\": \"https://blitzjs.com\"\r\n        },\r\n        \"Blocksy\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"blocksyjsonp\",\r\n                \"blocksyresponsivemenucache\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/blocksy/(?:.+main\\\\.js(?:\\\\?ver=([\\\\d\\\\.]+)))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Blocksy is a modern and lightweight WordPress theme designed for a variety of websites, including blogs, portfolios, ecommerce stores, and business websites.\",\r\n            \"website\": \"https://creativethemes.com/blocksy\"\r\n        },\r\n        \"Blocksy Companion\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/blocksy-companion(?:-pro)?/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Blocksy\"\r\n            ],\r\n            \"description\": \"Blocksy Companion is a WordPress plugin that provides additional functionality and features for the Blocksy theme.\",\r\n            \"website\": \"https://creativethemes.com/blocksy/companion/\"\r\n        },\r\n        \"Blogger\": {\r\n            \"cats\": [\r\n                11\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^blogger$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Python\"\r\n            ],\r\n            \"description\": \"Blogger is a blog-publishing service that allows multi-user blogs with time-stamped entries.\",\r\n            \"website\": \"https://www.blogger.com\"\r\n        },\r\n        \"Bloomreach\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c[^\\u003e]+/binaries/(?:[^/]+/)*content/gallery/\"\r\n            ],\r\n            \"website\": \"https://developers.bloomreach.com\"\r\n        },\r\n        \"Bloomreach Discovery\": {\r\n            \"cats\": [\r\n                29,\r\n                74\r\n            ],\r\n            \"js\": [\r\n                \"br_data.acct_id\",\r\n                \"brtrk.scriptversion\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.brcdn\\\\.com/\",\r\n                \"\\\\.brsrvr\\\\.com/\"\r\n            ],\r\n            \"description\": \"Bloomreach Discovery is a powerful combination of AI-powered site search, SEO, recommendations, and product merchandising.\",\r\n            \"website\": \"https://www.bloomreach.com/en/products/discovery\"\r\n        },\r\n        \"Blossom Travel\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"blossom_travel_data\",\r\n                \"blossom_travel_pro_data\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/blossom-travel(?:-pro)?/.+custom\\\\.min\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Blossom Travel is a free WordPress theme which allows you to create various types of feminine blogs such as travel blog, personal blog, fashion blog, beauty blog, and many more.\",\r\n            \"website\": \"https://blossomthemes.com/wordpress-themes/blossom-travel\"\r\n        },\r\n        \"Blotout EdgeTag\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"edgetag\",\r\n                \"edgetagproviders\"\r\n            ],\r\n            \"description\": \"Blotout EdgeTag is a technology provided by Blotout that tackles the effects of privacy changes on C-API signals by reconstructing signals around a lifetime ID, allowing for real-time remarketing of site visits.\",\r\n            \"website\": \"https://blotout.io\"\r\n        },\r\n        \"Blue\": {\r\n            \"cats\": [\r\n                77\r\n            ],\r\n            \"js\": [\r\n                \"bluecpy_id\",\r\n                \"blueproductid\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.getblue\\\\.io\"\r\n            ],\r\n            \"description\": \"Blue is a ecommerce data marketing, lead generation, real time bidding and recommendation solutions.\",\r\n            \"website\": \"https://web.getblue.io/en/\"\r\n        },\r\n        \"Blue Triangle\": {\r\n            \"cats\": [\r\n                16,\r\n                78\r\n            ],\r\n            \"js\": [\r\n                \"_bttutil.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.btttag\\\\.com/btt\\\\.js\"\r\n            ],\r\n            \"description\": \"Blue Triangle is a connected view of marketing, web performance, and third-party tag analytics while constantly monitoring website code for security vulnerabilities.\",\r\n            \"website\": \"https://bluetriangle.com\"\r\n        },\r\n        \"BlueConic\": {\r\n            \"cats\": [\r\n                97\r\n            ],\r\n            \"js\": [\r\n                \"blueconicclient\",\r\n                \"blueconicengagement\",\r\n                \"blueconicprelisteners\",\r\n                \"loadvaluesfromblueconic\"\r\n            ],\r\n            \"description\": \"BlueConic is the advanced customer data platform that liberates companies' first-party data from disparate systems.\",\r\n            \"website\": \"https://www.blueconic.com\"\r\n        },\r\n        \"Bluecore\": {\r\n            \"cats\": [\r\n                32,\r\n                75\r\n            ],\r\n            \"js\": [\r\n                \"_bluecoretrack\",\r\n                \"bluecore_action_trigger\",\r\n                \"triggermail\",\r\n                \"triggermail_email_address\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.bluecore\\\\.com\"\r\n            ],\r\n            \"description\": \"Bluecore is a retail marketing technology that uses data gained from direct marketing like email, social media, site activity.\",\r\n            \"website\": \"https://www.bluecore.com\"\r\n        },\r\n        \"Bluefish\": {\r\n            \"cats\": [\r\n                20\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"bluefish(?:\\\\s([\\\\d.]+))?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"Bluefish is a free software text editor with a variety of tools for programming in general and the development of websites.\",\r\n            \"website\": \"https://sourceforge.net/projects/bluefish\"\r\n        },\r\n        \"Bluehost\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"headers\": {\r\n                \"host-header\": \"c2hhcmvklmjsdwvob3n0lmnvbq==\"\r\n            },\r\n            \"description\": \"Bluehost is a large web host known for its WordPress expertise, variety of “one-stop-shop” services, and bargain prices.\",\r\n            \"website\": \"https://www.bluehost.com\"\r\n        },\r\n        \"Blueknow\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"blueknow\",\r\n                \"blueknowtracker\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.blueknow\\\\.com\"\r\n            ],\r\n            \"description\": \"Blueknow is a ecommerce personalisation software designed to serve enterprises, SMEs.\",\r\n            \"website\": \"https://www.blueknow.com\"\r\n        },\r\n        \"Blueshift\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn.getblueshift.com/\"\r\n            ],\r\n            \"description\": \"Blueshift offers the SmartHub CDP, which helps brands deliver relevant and connected experiences across every customer interaction.\",\r\n            \"website\": \"https://blueshift.com/\"\r\n        },\r\n        \"Bluestone PIM\": {\r\n            \"cats\": [\r\n                95\r\n            ],\r\n            \"description\": \"Bluestone PIM is primarily a product information management (PIM) solution, which is focused on managing and distributing product data across multiple channels. However, it also includes some features that are typically associated with digital asset management (DAM), such as the ability to manage and store product images, videos, and other digital assets.\",\r\n            \"website\": \"https://www.bluestonepim.com\"\r\n        },\r\n        \"Boats Group\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"description\": \"Boats Group is a website platform for boat dealers and brokers.\",\r\n            \"website\": \"https://www.boatsgroup.com/websites\"\r\n        },\r\n        \"Boba.js\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"boba(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Google Analytics\"\r\n            ],\r\n            \"website\": \"https://boba.space150.com\"\r\n        },\r\n        \"BoidCMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"boidcms\"\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"BoidCMS is a free and open-source flat file CMS for building simple websites and blogs in seconds, developed using PHP and uses JSON as a database.\",\r\n            \"website\": \"https://boidcms.github.io\"\r\n        },\r\n        \"Bokeh\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"bokeh\",\r\n                \"bokeh.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"bokeh.*\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Python\"\r\n            ],\r\n            \"website\": \"https://bokeh.org\"\r\n        },\r\n        \"Bokun\": {\r\n            \"cats\": [\r\n                5,\r\n                72\r\n            ],\r\n            \"js\": [\r\n                \"__bokunwidgets\",\r\n                \"bokunbookingchanneluuid\",\r\n                \"bokunsessionid\",\r\n                \"bokunwidgetembedder\"\r\n            ],\r\n            \"description\": \"Bokun is a cloud-based booking management solution which enables small to large travel and tourism businesses manage reservations, products content, images, categorisation, pricing, inventory, and payments.\",\r\n            \"website\": \"https://www.bokun.io\"\r\n        },\r\n        \"Bold Brain\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"bold.brain\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"brain-assets\\\\.boldapps\\\\.net/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Bold Commerce\",\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Bold Brain help customers discover more products and add more to their cart with dynamic recommendations for Shopify and use advanced analytics.\",\r\n            \"website\": \"https://boldcommerce.com/bold-brain\"\r\n        },\r\n        \"Bold Bundles\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"bold.bundles\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"bundles\\\\.boldapps\\\\.net/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Bold Commerce\",\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Bold Bundles Shopify app is designed to present recommended product widgets to cross-sell your products.\",\r\n            \"website\": \"https://boldcommerce.com/bundles\"\r\n        },\r\n        \"Bold Chat\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^https?://vmss\\\\.boldchat\\\\.com/aid/\\\\d{18}/bc\\\\.vms4/vms\\\\.js\"\r\n            ],\r\n            \"description\": \"BoldChat is a live chat platform.\",\r\n            \"website\": \"https://www.boldchat.com/\"\r\n        },\r\n        \"Bold Commerce\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.boldapps\\\\.net/\",\r\n                \"\\\\.boldcommerce\\\\.com\"\r\n            ],\r\n            \"description\": \"Bold Commerce is a software company that specialises in ecommerce websites and app development.\",\r\n            \"website\": \"https://boldcommerce.com\"\r\n        },\r\n        \"Bold Custom Pricing\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"bold.csp.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cp.\\\\.boldapps\\\\.net/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Bold Commerce\",\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Bold Custom Pricing is an app that makes it easy to create a tiered pricing structure for your customers.\",\r\n            \"website\": \"https://boldcommerce.com/custom-pricing\"\r\n        },\r\n        \"Bold Motivator\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"motivate\\\\.boldapps\\\\.net/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Bold Commerce\",\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Bold Motivator motivate customers to spend more on your store with free shipping and gifts using a customisable banner that counts down how much more they have to buy.\",\r\n            \"website\": \"https://boldcommerce.com/motivator\"\r\n        },\r\n        \"Bold Page Builder\": {\r\n            \"cats\": [\r\n                87,\r\n                51\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/bold-page-builder/\"\r\n            ],\r\n            \"description\": \"Bold Page Builder is a plugin or a theme component that allows users to structure and design responsive pages.\",\r\n            \"website\": \"https://wordpress.org/plugins/bold-page-builder\"\r\n        },\r\n        \"Bold Product Options\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"bold.options.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"option\\\\.boldapps\\\\.net/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Bold Commerce\",\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Product Options is a Shopify app which allows customers to customise products with unlimited custom options built by Bold.\",\r\n            \"website\": \"https://boldcommerce.com/product-options\"\r\n        },\r\n        \"Bold Subscriptions\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"bold.subscriptions\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"sub\\\\.boldapps\\\\.net/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Bold Commerce\",\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Bold Subscriptions provides powerful, API-driven customisation options to build and scale a subscription service that fits your business.\",\r\n            \"website\": \"https://boldcommerce.com/shopify-subscription-app\"\r\n        },\r\n        \"Bold Themes\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"boldthemes_theme_loaded\",\r\n                \"boldthemesuri\"\r\n            ],\r\n            \"implies\": [\r\n                \"WordPress\"\r\n            ],\r\n            \"description\": \"Bold Themes is a powerful and easy to use premium WordPress themes.\",\r\n            \"website\": \"https://bold-themes.com/wordpress-themes-plugins/\"\r\n        },\r\n        \"Bold Upsell\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"bold.upsell\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"upsells\\\\.boldapps\\\\.net/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Bold Commerce\",\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Bold Upsell allows the substitution or attachment of products to the customers' carts.\",\r\n            \"website\": \"https://boldcommerce.com/upsell\"\r\n        },\r\n        \"BoldGrid\": {\r\n            \"cats\": [\r\n                1,\r\n                11,\r\n                87\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink rel=[\\\"']stylesheet[\\\"'] [^\\u003e]+boldgrid\",\r\n                \"\\u003clink rel=[\\\"']stylesheet[\\\"'] [^\\u003e]+post-and-page-builder\",\r\n                \"\\u003clink[^\\u003e]+s\\\\d+\\\\.boldgrid\\\\.com\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/post-and-page-builder\"\r\n            ],\r\n            \"description\": \"BoldGrid is a free website builder for WordPress websites.\",\r\n            \"website\": \"https://boldgrid.com\"\r\n        },\r\n        \"Bolt CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"bolt\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://bolt.cm\",\r\n            \"cpe\": \"cpe:2.3:a:bolt:bolt:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Bolt Payments\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"bolt_callbacks\",\r\n                \"boltcheckout\",\r\n                \"boltpopup\",\r\n                \"bolttrack\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"account\\\\.bolt\\\\.com/\",\r\n                \"connect\\\\.bolt\\\\.com/\"\r\n            ],\r\n            \"description\": \"Bolt powers a checkout experience designed to convert shoppers.\",\r\n            \"website\": \"https://www.bolt.com/\"\r\n        },\r\n        \"Bonfire\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"cookies\": {\r\n                \"bf_session\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"powered by \\u003ca[^\\u003e]+href=\\\"https?://(?:www\\\\.)?cibonfire\\\\.com[^\\u003e]*\\u003ebonfire v([^\\u003c]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"CodeIgniter\"\r\n            ],\r\n            \"website\": \"https://cibonfire.com\"\r\n        },\r\n        \"BookDinners\": {\r\n            \"cats\": [\r\n                93\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"bookdinners\\\\.nl/widget\\\\.js\"\r\n            ],\r\n            \"description\": \"BookDinners is a restaurant table booking widget.\",\r\n            \"website\": \"https://www.bookdinners.nl\"\r\n        },\r\n        \"BookStack\": {\r\n            \"cats\": [\r\n                4\r\n            ],\r\n            \"cookies\": {\r\n                \"bookstack_session\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"Laravel\",\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"BookStack is a simple, open-source, self-hosted, easy-to-use platform for organising and storing information.\",\r\n            \"website\": \"https://www.bookstackapp.com\",\r\n            \"cpe\": \"cpe:2.3:a:bookstackapp:bookstack:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"BookThatApp\": {\r\n            \"cats\": [\r\n                100,\r\n                72\r\n            ],\r\n            \"js\": [\r\n                \"bookthatapp\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.bookthatapp\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"BookThatApp is a Shopify appointment booking, product rental and class booking app.\",\r\n            \"website\": \"https://www.bookthatapp.com\"\r\n        },\r\n        \"BookVisit\": {\r\n            \"cats\": [\r\n                72\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"online\\\\.bookvisit\\\\.com/\"\r\n            ],\r\n            \"description\": \"BookVisit is an IT services and IT consulting, recreation, and hotel company located in Goteborg,Sweden.\",\r\n            \"website\": \"https://bookvisit.com\"\r\n        },\r\n        \"Bookatable\": {\r\n            \"cats\": [\r\n                93\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"bda\\\\.bookatable\\\\.com/deploy/lbui\\\\.direct\\\\.min\\\\.js\"\r\n            ],\r\n            \"description\": \"Bookatable is a restaurant table booking widget.\",\r\n            \"website\": \"https://www.bookatable.co.uk\"\r\n        },\r\n        \"Bookeo\": {\r\n            \"cats\": [\r\n                72\r\n            ],\r\n            \"js\": [\r\n                \"bookeo_start\",\r\n                \"bookeo_startmobilelabel\"\r\n            ],\r\n            \"description\": \"Bookeo is a cloud-based booking and reservation solution that caters to tour operators, travel agencies, schools, therapists, photographers and event organizers.\",\r\n            \"website\": \"https://www.bookeo.com\"\r\n        },\r\n        \"Bookero\": {\r\n            \"cats\": [\r\n                72\r\n            ],\r\n            \"js\": [\r\n                \"bookero_config\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.bookero\\\\.pl\"\r\n            ],\r\n            \"description\": \"Bookero is online booking system for you website or Facebook page.\",\r\n            \"website\": \"https://www.bookero.org\"\r\n        },\r\n        \"Booking.com\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"aff\\\\.bstatic\\\\.com/\"\r\n            ],\r\n            \"description\": \"Booking.com is one of the largest ecommerce travel companies in the world. As an affiliate member, you can make up to 40% commission.\",\r\n            \"website\": \"https://www.booking.com/affiliate-program/v2/selfmanaged.html\"\r\n        },\r\n        \"Booking.com widget\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"q\\\\.bstatic\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Booking.com\"\r\n            ],\r\n            \"description\": \"Booking.com is one of the largest ecommerce travel companies in the world. As an affiliate member, you can make up to 40% commission.\",\r\n            \"website\": \"https://www.booking.com/affiliate-program/v2/selfmanaged.html\"\r\n        },\r\n        \"Bookingkit\": {\r\n            \"cats\": [\r\n                5,\r\n                72\r\n            ],\r\n            \"js\": [\r\n                \"bookingkitapp\"\r\n            ],\r\n            \"description\": \"Bookingkit is an online booking management solution. Bookingkit helps its users generate PDF invoices, manage day-to-day scheduling operations, and automatically sync availabilities in real time.\",\r\n            \"website\": \"https://bookingkit.net/\"\r\n        },\r\n        \"Bookly\": {\r\n            \"cats\": [\r\n                72,\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"bookly\",\r\n                \"booklycustomerprofile\",\r\n                \"booklyl10n.daysshort\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/bookly-responsive-appointment-booking-tool/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Bookly is a WordPress scheduling plugin that allows you to accept online reservations on your website and automate your booking system.\",\r\n            \"website\": \"https://www.booking-wp-plugin.com\"\r\n        },\r\n        \"Booksy\": {\r\n            \"cats\": [\r\n                5,\r\n                72\r\n            ],\r\n            \"js\": [\r\n                \"booksy\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"booksy\\\\.com/widget/code\\\\.js\"\r\n            ],\r\n            \"description\": \"Booksy is a booking system for people looking to schedule appointments for health and beauty services.\",\r\n            \"website\": \"https://booksy.com/\"\r\n        },\r\n        \"Boomerang\": {\r\n            \"cats\": [\r\n                59,\r\n                78\r\n            ],\r\n            \"js\": [\r\n                \"boomr\",\r\n                \"boomr_lstart\",\r\n                \"boomr_mq\"\r\n            ],\r\n            \"description\": \"boomerang is a JavaScript library that measures the page load time experienced by real users, commonly called RUM (Real User Measurement).\",\r\n            \"website\": \"https://akamai.github.io/boomerang\"\r\n        },\r\n        \"Boost Commerce\": {\r\n            \"cats\": [\r\n                29,\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"bcsffilterconfig.api.filterurl\",\r\n                \"boostpfsappconfig.api.filterurl\"\r\n            ],\r\n            \"description\": \"Boost Commerce provides beautiful and advanced product filter and smart site search for Shopify stores to boost sales.\",\r\n            \"website\": \"https://boostcommerce.net\"\r\n        },\r\n        \"Booster Page Speed Optimizer\": {\r\n            \"cats\": [\r\n                100,\r\n                92\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/assets/booster-page-speed-optimizer\\\\.js\"\r\n            ],\r\n            \"description\": \"The Page Speed Optimizer is a Shopify app built by BoosterApps.\",\r\n            \"website\": \"https://apps.shopify.com/page-speed-optimizer\"\r\n        },\r\n        \"Bootic\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"bootic.assetshost\"\r\n            ],\r\n            \"meta\": {\r\n                \"autor\": [\r\n                    \"^bootic$\"\r\n                ]\r\n            },\r\n            \"description\": \"Bootic is an all-in-one ecommerce platform from Chile.\",\r\n            \"website\": \"https://www.bootic.io\"\r\n        },\r\n        \"Bootstrap\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"js\": [\r\n                \"bootstrap.alert.version\",\r\n                \"jquery.fn.tooltip.constructor.version\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]* href=[^\\u003e]*?bootstrap(?:[^\\u003e]*?([0-9a-fa-f]{7,40}|[\\\\d]+(?:.[\\\\d]+(?:.[\\\\d]+)?)?)|)[^\\u003e-]*?(?:\\\\.min)?\\\\.css\\\\;version:\\\\1\",\r\n                \"\\u003cstyle\\u003e\\\\s+/\\\\*!\\\\s+\\\\* bootstrap v(\\\\d\\\\.\\\\d\\\\.\\\\d)\\\\;version:\\\\1\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"bootstrap(?:[^\\u003e]*?([0-9a-fa-f]{7,40}|[\\\\d]+(?:.[\\\\d]+(?:.[\\\\d]+)?)?)|)[^\\u003e]*?(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Bootstrap is a free and open-source CSS framework directed at responsive, mobile-first front-end web development. It contains CSS and JavaScript-based design templates for typography, forms, buttons, navigation, and other interface components.\",\r\n            \"website\": \"https://getbootstrap.com\",\r\n            \"cpe\": \"cpe:2.3:a:getbootstrap:bootstrap:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Bootstrap Icons\": {\r\n            \"cats\": [\r\n                17\r\n            ],\r\n            \"description\": \"Bootstrap Icons is a growing library of SVG icons that are designed by @mdo and maintained by the Bootstrap Team.\",\r\n            \"website\": \"https://icons.getbootstrap.com\"\r\n        },\r\n        \"Bootstrap Table\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]+href=\\\"[^\\u003e]*bootstrap-table(?:\\\\.min)?\\\\.css\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"bootstrap-table(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Bootstrap\",\r\n                \"jQuery\"\r\n            ],\r\n            \"website\": \"https://bootstrap-table.wenzhixin.net.cn/\"\r\n        },\r\n        \"Booxi\": {\r\n            \"cats\": [\r\n                72\r\n            ],\r\n            \"js\": [\r\n                \"booxi\",\r\n                \"booxicontroller\",\r\n                \"bxe_core\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/bxe_core\\\\.js\"\r\n            ],\r\n            \"description\": \"Booxi is a cloud-based appointment management platform for small to midsize businesses.\",\r\n            \"website\": \"https://www.booxi.com\"\r\n        },\r\n        \"Borderfree\": {\r\n            \"cats\": [\r\n                106\r\n            ],\r\n            \"cookies\": {\r\n                \"bfx.apikey:\": \"^[\\\\w\\\\d-]+$\",\r\n                \"bfx.country:\": \"^\\\\w+$\",\r\n                \"bfx.language\": \"^\\\\w+$\",\r\n                \"bfx.loglevel\": \"^\\\\w+$\"\r\n            },\r\n            \"js\": [\r\n                \"bfx._apikey\",\r\n                \"bfx._brand\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"bfx-objects\\\\.prd\\\\.borderfree\\\\.com\",\r\n                \"global\\\\.prd\\\\.borderfree\\\\.com\",\r\n                \"wm\\\\.prd\\\\.borderfree\\\\.com\"\r\n            ],\r\n            \"description\": \"Borderfree is an cross-border ecommerce solutions provider.\",\r\n            \"website\": \"https://www.borderfree.com\"\r\n        },\r\n        \"Borlabs Cookie\": {\r\n            \"cats\": [\r\n                67,\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"borlabscookieconfig\"\r\n            ],\r\n            \"description\": \"Borlabs Cookie is a GDPR cookie consent plugin for WordPress.\",\r\n            \"website\": \"https://borlabs.io/borlabs-cookie/\"\r\n        },\r\n        \"Botble CMS\": {\r\n            \"cats\": [\r\n                1,\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"botble_session\": \"\"\r\n            },\r\n            \"headers\": {\r\n                \"cms-version\": \"^(.+)$\\\\;version:\\\\1\\\\;confidence:0\"\r\n            },\r\n            \"implies\": [\r\n                \"Laravel\"\r\n            ],\r\n            \"website\": \"https://botble.com\"\r\n        },\r\n        \"Boutiq\": {\r\n            \"cats\": [\r\n                100,\r\n                103\r\n            ],\r\n            \"js\": [\r\n                \"caazamapp\"\r\n            ],\r\n            \"description\": \"Boutiq is a personal video shopping solution.\",\r\n            \"website\": \"https://www.getboutiq.com\"\r\n        },\r\n        \"BowNow\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"cookies\": {\r\n                \"bownow_act\": \"\",\r\n                \"bownow_aid\": \"\",\r\n                \"bownow_cid\": \"\",\r\n                \"bownow_mbid\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"_bownow_ts\"\r\n            ],\r\n            \"description\": \"BowNow is a marketing automation tool with business card management, sales support, analysis, and email magazine functions.\",\r\n            \"website\": \"https://bow-now.jp\"\r\n        },\r\n        \"Boxtal\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Boxtal is a cloud-based multi-carrier shipping solution.\",\r\n            \"website\": \"https://www.boxtal.com\"\r\n        },\r\n        \"Bpost\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Bpost, also known as the Belgian Post Group, is the Belgian company responsible for the delivery of national and international mail.\",\r\n            \"website\": \"https://www.bpost.be\"\r\n        },\r\n        \"BrainSINS\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"brainsins\",\r\n                \"brainsins_token\",\r\n                \"brainsinsrecommender\",\r\n                \"launchbrainsins\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cloudfront\\\\.net/brainsins(?:_v)?(\\\\d+)\\\\.js\\\\;version:\\\\1\",\r\n                \"mw\\\\.brainsins\\\\.com\"\r\n            ],\r\n            \"description\": \"BrainSINS is a personalisation technology and ecommerce analytics services to online retailers.\",\r\n            \"website\": \"https://brainsins.com\"\r\n        },\r\n        \"Braintree\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"braintree\",\r\n                \"braintree.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"js\\\\.braintreegateway\\\\.com\"\r\n            ],\r\n            \"description\": \"Braintree, a division of PayPal, specializes in mobile and web payment systems for ecommerce companies. Braintree provides clients with a merchant account and a payment gateway.\",\r\n            \"website\": \"https://www.braintreepayments.com\"\r\n        },\r\n        \"Branch\": {\r\n            \"cats\": [\r\n                32,\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"branch.setbranchviewdata\",\r\n                \"branch_callback__0\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"app\\\\.link/_r\\\\?sdk=web([\\\\d.]+)\\\\;version:\\\\1\",\r\n                \"cdn\\\\.branch\\\\.io\"\r\n            ],\r\n            \"description\": \"Branch is a mobile deep linking system to increase engagement and retention.\",\r\n            \"website\": \"https://branch.io\"\r\n        },\r\n        \"Brandfolder\": {\r\n            \"cats\": [\r\n                95\r\n            ],\r\n            \"js\": [\r\n                \"brandfolder.account\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.brandfolder\\\\.com/\"\r\n            ],\r\n            \"description\": \"Brandfolder is a cloud-based digital asset management platform.\",\r\n            \"website\": \"https://brandfolder.com\"\r\n        },\r\n        \"Braze\": {\r\n            \"cats\": [\r\n                32,\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"appboy\",\r\n                \"appboyqueue\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"js\\\\.appboycdn\\\\.com/web-sdk/([\\\\d.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Braze is a customer engagement platform that delivers messaging experiences across push, email, in-product, and more.\",\r\n            \"website\": \"https://www.braze.com\"\r\n        },\r\n        \"Bread\": {\r\n            \"cats\": [\r\n                41,\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"bread.apphost\",\r\n                \"breadcalc\",\r\n                \"breaderror\",\r\n                \"breadloaded\",\r\n                \"breadshopify\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.getbread\\\\.com\"\r\n            ],\r\n            \"description\": \"Bread is a buy now, pay later platform for ecommerce websites.\",\r\n            \"website\": \"https://www.breadpayments.com\"\r\n        },\r\n        \"Breadcrumb NavXT\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- breadcrumb navxt ([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Breadcrumb NavXT is a WordPress plugin compatible with WordPress versions 4.9 and up.\",\r\n            \"website\": \"https://github.com/mtekk/Breadcrumb-NavXT\"\r\n        },\r\n        \"Breakdance\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"breakdancefrontend\",\r\n                \"breakdanceheaderbuilder\",\r\n                \"breakdanceswiper\"\r\n            ],\r\n            \"description\": \"Breakdance is a page builder that features a drag-and-drop interface for users to create pages using full site editing functionality.\",\r\n            \"website\": \"https://breakdance.com\"\r\n        },\r\n        \"Breinify\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"breinify.version\"\r\n            ],\r\n            \"description\": \"Breinify is a powerful personalisation engine that enables brands to create personalised digital experiences at an individual level across web, e-mail, SMS and app channels.\",\r\n            \"website\": \"https://home.breinify.ai\"\r\n        },\r\n        \"Bricks\": {\r\n            \"cats\": [\r\n                51,\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/bricks/assets/\"\r\n            ],\r\n            \"description\": \"Bricks is a premium WordPress theme that lets you visually build performant WordPress sites.\",\r\n            \"website\": \"https://bricksbuilder.io\"\r\n        },\r\n        \"Bricksite\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"bricksite.common.apiurls.base\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^bricksite$\"\r\n                ]\r\n            },\r\n            \"description\": \"Bricksite is a free website online tool where clients can create free accounts with various themes and features.\",\r\n            \"website\": \"https://bricksite.io\"\r\n        },\r\n        \"BrightEdge\": {\r\n            \"cats\": [\r\n                54\r\n            ],\r\n            \"js\": [\r\n                \"_bright3.version\",\r\n                \"be_sdk_options\",\r\n                \"bejssdk.client_version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.brightedge\\\\.com/\"\r\n            ],\r\n            \"description\": \"BrightEdge is an SEO solution and content performance marketing platform.\",\r\n            \"website\": \"https://www.brightedge.com\"\r\n        },\r\n        \"BrightInfo\": {\r\n            \"cats\": [\r\n                32,\r\n                74\r\n            ],\r\n            \"js\": [\r\n                \"_bi_\",\r\n                \"_biq\",\r\n                \"bijsurl\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"app\\\\.brightinfo\\\\.com\"\r\n            ],\r\n            \"description\": \"BrightInfo is an automated content personalisation solution.\",\r\n            \"website\": \"https://www.brightinfo.com\"\r\n        },\r\n        \"Brightcove\": {\r\n            \"cats\": [\r\n                14\r\n            ],\r\n            \"scripts\": [\r\n                \"players\\\\.brightcove\\\\.net/\"\r\n            ],\r\n            \"description\": \"Brightcove is a cloud-based online video platform.\",\r\n            \"website\": \"https://www.brightcove.com\"\r\n        },\r\n        \"Brightspot\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^brightspot$\"\r\n            },\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"website\": \"https://www.brightspot.com\"\r\n        },\r\n        \"Brilliant Web-to-Lead\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/salesforce-wordpress-to-lead/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Salesforce\"\r\n            ],\r\n            \"description\": \"Brilliant Web-to-Lead plugin facilitates the technical integration between WordPress installations and Salesforce CRM accounts, enabling the exchange and synchronization of data.\",\r\n            \"website\": \"https://brilliantplugins.com/downloads/salesforce/\"\r\n        },\r\n        \"Brimble\": {\r\n            \"cats\": [\r\n                62\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^brimble$\",\r\n                \"x-brimble-id\": \"\"\r\n            },\r\n            \"description\": \"Brimble is a cloud platform for deploying frontend web applications.\",\r\n            \"website\": \"https://brimble.io\"\r\n        },\r\n        \"Broadstreet\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"broadstreet\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.broadstreetads\\\\.com\"\r\n            ],\r\n            \"description\": \"Broadstreet is an ad manager that caters specifically to the needs of direct, digital ad sales.\",\r\n            \"website\": \"https://broadstreetads.com\"\r\n        },\r\n        \"Bronto\": {\r\n            \"cats\": [\r\n                32,\r\n                75\r\n            ],\r\n            \"js\": [\r\n                \"bronto.versions.sca\",\r\n                \"brontocookieconsent\",\r\n                \"brontoshopify\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:snip|cdn)\\\\.bronto\\\\.com\"\r\n            ],\r\n            \"description\": \"Bronto is a cloud-based email marketing automation software.\",\r\n            \"website\": \"https://bronto.com\"\r\n        },\r\n        \"Brownie\": {\r\n            \"cats\": [\r\n                1,\r\n                6\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"brownie\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"assets\\\\.youthsrl\\\\.com/brownie\"\r\n            ],\r\n            \"implies\": [\r\n                \"Amazon Web Services\",\r\n                \"Bootstrap\",\r\n                \"MySQL\",\r\n                \"PHP\",\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"Brownie is a framework, CMS, ecommerce and ERP omni-channel platform to manage your entire business in one cloud solution.\",\r\n            \"website\": \"https://www.browniesuite.com\"\r\n        },\r\n        \"Browser-Update.org\": {\r\n            \"cats\": [\r\n                5,\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"$bu_.version\",\r\n                \"$bu_getbrowser\"\r\n            ],\r\n            \"description\": \"Browser-update.org is a tool to unobtrusively notify visitors that they should update their web browser in order to use your website.\",\r\n            \"website\": \"https://browser-update.org\"\r\n        },\r\n        \"BrowserCMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"browsercms ([\\\\d.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Ruby\"\r\n            ],\r\n            \"website\": \"https://browsercms.org\"\r\n        },\r\n        \"Bsale\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"_bsalemarket_session\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"bsale.version\"\r\n            ],\r\n            \"meta\": {\r\n                \"autor\": [\r\n                    \"bsale\"\r\n                ],\r\n                \"generator\": [\r\n                    \"bsale\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Nginx\"\r\n            ],\r\n            \"description\": \"Bsale is an store management solution for retail businesses that sell both in store and online.\",\r\n            \"website\": \"https://www.bsale.cl\"\r\n        },\r\n        \"Bubble\": {\r\n            \"cats\": [\r\n                51,\r\n                18\r\n            ],\r\n            \"js\": [\r\n                \"_bubble_page_load_data\",\r\n                \"bubble_environment\",\r\n                \"bubble_hostname_modifier\",\r\n                \"bubble_version\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-bubble-capacity-limit\": \"\",\r\n                \"x-bubble-capacity-used\": \"\",\r\n                \"x-bubble-perf\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"Node.js\"\r\n            ],\r\n            \"description\": \"Bubble is a no-code platform that lets anyone build web apps without writing any code.\",\r\n            \"website\": \"https://bubble.io\"\r\n        },\r\n        \"Budbee\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Budbee is a tech company that operates a logistics service for ecommerce.\",\r\n            \"website\": \"https://app.budbee.com/\"\r\n        },\r\n        \"BuddyPress\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/buddypress/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"BuddyPress is designed to allow schools, companies, sports teams, or any other niche community to start their own social network or communication tool.\",\r\n            \"website\": \"https://buddypress.org\"\r\n        },\r\n        \"BugHerd\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"js\": [\r\n                \"bugherdconfig\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.bugherd\\\\.com/\"\r\n            ],\r\n            \"description\": \"BugHerd is a cloud-based feedback collection and bug management tool.\",\r\n            \"website\": \"https://bugherd.com\"\r\n        },\r\n        \"BugSnag\": {\r\n            \"cats\": [\r\n                10,\r\n                13\r\n            ],\r\n            \"js\": [\r\n                \"bugsnag\",\r\n                \"bugsnag\",\r\n                \"bugsnagclient\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/bugsnag.*\\\\.js\"\r\n            ],\r\n            \"description\": \"Bugsnag is a cross-platform error monitoring, reporting, and resolution software.\",\r\n            \"website\": \"https://bugsnag.com\"\r\n        },\r\n        \"Bugcrowd\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"description\": \"Bugcrowd is a crowdsourced cybersecurity platform.\",\r\n            \"website\": \"https://www.bugcrowd.com\"\r\n        },\r\n        \"Bugzilla\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"cookies\": {\r\n                \"bugzilla_login_request_cookie\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"bugzilla\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003ca href=\\\"https?://www\\\\.bugzilla\\\\.org/docs/([0-9.]+)/[^\\u003e]+\\u003ehelp\\u003c\\\\;version:\\\\1\",\r\n                \"\\u003cmain id=\\\"bugzilla-body\\\"\",\r\n                \"\\u003cspan id=\\\"information\\\" class=\\\"header_addl_info\\\"\\u003eversion ([\\\\d.]+)\\u003c\\\\;version:\\\\1\",\r\n                \"href=\\\"enter_bug\\\\.cgi\\\"\\u003e\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"bugzilla ?([\\\\d.]+)?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Perl\"\r\n            ],\r\n            \"website\": \"https://www.bugzilla.org\",\r\n            \"cpe\": \"cpe:2.3:a:mozilla:bugzilla:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Builder.io\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"description\": \"Builder.io is a headless CMS with a powerful drag-and-drop visual editor that lets you build and optimize digital experiences with speed and flexibility. \",\r\n            \"website\": \"https://builder.io\"\r\n        },\r\n        \"Buildertrend\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"website\": \"https://buildertrend.com\"\r\n        },\r\n        \"Bulma\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"js\": [\r\n                \"bulma.version\"\r\n            ],\r\n            \"description\": \"Bulma is a free class-based framework for CSS.\",\r\n            \"website\": \"https://bulma.io\"\r\n        },\r\n        \"Bump\": {\r\n            \"cats\": [\r\n                4\r\n            ],\r\n            \"description\": \"Bump is an API contract management platform that helps document and track APIs by identifying changes in API structure, and keeping developers informed through an elegant documentation.\",\r\n            \"website\": \"https://bump.sh\"\r\n        },\r\n        \"Bunny\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^bunnycdn\"\r\n            },\r\n            \"website\": \"https://bunny.net\"\r\n        },\r\n        \"Bunny Fonts\": {\r\n            \"cats\": [\r\n                17\r\n            ],\r\n            \"implies\": [\r\n                \"Bunny\"\r\n            ],\r\n            \"description\": \"Bunny Fonts is an open-source, privacy-first web font platform designed to put privacy back into the internet.\",\r\n            \"website\": \"https://fonts.bunny.net\"\r\n        },\r\n        \"Business Catalyst\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- bc_obnw --\\u003e\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"catalystscripts\"\r\n            ],\r\n            \"website\": \"https://businesscatalyst.com\"\r\n        },\r\n        \"Business Website Builder\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"website\": \"https://businesswebsites.google.com/welcome\"\r\n        },\r\n        \"ButterCMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"description\": \"ButterCMS is a cloud-based headless content management system.\",\r\n            \"website\": \"https://buttercms.com\"\r\n        },\r\n        \"Buttonizer\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"buttonizer\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.buttonizer\\\\.io/\",\r\n                \"wp-content/plugins/buttonizer-multifunctional-button/\"\r\n            ],\r\n            \"description\": \"Buttonizer is a widget that enables website owners to incorporate custom and attention-grabbing call-to-action (CTA) buttons into their website design.\",\r\n            \"website\": \"https://buttonizer.pro\"\r\n        },\r\n        \"Buy me a coffee\": {\r\n            \"cats\": [\r\n                5,\r\n                111\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdnjs\\\\.buymeacoffee\\\\.com/([\\\\d.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Buy me a coffee is a service for online content creators that they may use to receive tips and donations to support their work.\",\r\n            \"website\": \"https://www.buymeacoffee.com\"\r\n        },\r\n        \"Buy with Prime\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"bwp.sku\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"code\\\\.buywithprime\\\\.amazon\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Amazon Pay\"\r\n            ],\r\n            \"description\": \"Buy with Prime is a feature offered by Amazon that allows Amazon Prime members to make purchases with the benefits associated with their Prime membership.\",\r\n            \"website\": \"https://buywithprime.amazon.com\"\r\n        },\r\n        \"BuySellAds\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"_bsa\",\r\n                \"_bsap\",\r\n                \"_bsap_serving_callback\",\r\n                \"_bsapro\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^https?://s\\\\d\\\\.buysellads\\\\.com/\",\r\n                \"servedby-buysellads\\\\.com/monetization(?:\\\\.[\\\\w\\\\d]+)?\\\\.js\"\r\n            ],\r\n            \"website\": \"https://buysellads.com\"\r\n        },\r\n        \"Buyapowa\": {\r\n            \"cats\": [\r\n                94\r\n            ],\r\n            \"js\": [\r\n                \"buyapowa.canarycheck\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.co-buying\\\\.com/\"\r\n            ],\r\n            \"description\": \"Buyapowa is a scalable referral marketing and advocacy platform designed for all industries.\",\r\n            \"website\": \"https://www.buyapowa.com\"\r\n        },\r\n        \"BySide\": {\r\n            \"cats\": [\r\n                32,\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"byside\",\r\n                \"bysidewebcare_banner\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"webcare\\\\.byside\\\\.com/\"\r\n            ],\r\n            \"description\": \"BySide is a personalisation and marketing automation platform.\",\r\n            \"website\": \"https://byside.com\"\r\n        },\r\n        \"Bynder\": {\r\n            \"cats\": [\r\n                95\r\n            ],\r\n            \"cookies\": {\r\n                \"bynder\": \"^[\\\\da-z]+-[\\\\da-z]+-[\\\\da-z]+-[\\\\da-z]+$\"\r\n            },\r\n            \"js\": [\r\n                \"bynder.cloudfront\"\r\n            ],\r\n            \"description\": \"Bynder is a cloud-based marketing platform where brands create, find, and use all their digital content.\",\r\n            \"website\": \"https://www.bynder.com\"\r\n        },\r\n        \"C\": {\r\n            \"cats\": [\r\n                27\r\n            ],\r\n            \"description\": \"C is a general-purpose, procedural computer programming language supporting structured programming, lexical variable scope, and recursion, with a static type system.\",\r\n            \"website\": \"https://www.open-std.org/jtc1/sc22/wg14/\"\r\n        },\r\n        \"CCV Shop\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/website/javascript/vertoshop\\\\.js\"\r\n            ],\r\n            \"website\": \"https://ccvshop.be\"\r\n        },\r\n        \"CDN77\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^cdn77-turbo$\"\r\n            },\r\n            \"description\": \"CDN77 is a content delivery network (CDN).\",\r\n            \"website\": \"https://www.cdn77.com\"\r\n        },\r\n        \"CEMax\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"description\": \"CEMax is a premium customer engagement platform.\",\r\n            \"website\": \"https://cemax.ai\"\r\n        },\r\n        \"CFML\": {\r\n            \"cats\": [\r\n                27\r\n            ],\r\n            \"description\": \"ColdFusion Markup Language (CFML), is a scripting language for web development that runs on the JVM, the .NET framework, and Google App Engine.\",\r\n            \"website\": \"https://adobe.com/products/coldfusion-family.html\"\r\n        },\r\n        \"CIVIC\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cc\\\\.cdn\\\\.civiccomputing\\\\.com\"\r\n            ],\r\n            \"description\": \"Civic provides cookie control for user consent and the use of cookies.\",\r\n            \"website\": \"https://www.civicuk.com/cookie-control\"\r\n        },\r\n        \"CJDropshipping app\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"app\\\\.cjdropshipping\\\\.com/\"\r\n            ],\r\n            \"description\": \"CJDropshipping is a dropshipping supplier and fulfillment service from China.\",\r\n            \"website\": \"https://apps.shopify.com/cucheng\"\r\n        },\r\n        \"CKEditor\": {\r\n            \"cats\": [\r\n                24\r\n            ],\r\n            \"js\": [\r\n                \"apex.libversions.ckeditor5\",\r\n                \"ckeditor\",\r\n                \"ckeditor.version\",\r\n                \"ckeditor_basepath\",\r\n                \"ckeditor_version\"\r\n            ],\r\n            \"description\": \"CKEditor is a WYSIWYG rich text editor which enables writing content directly inside of web pages or online applications. Its core code is written in JavaScript and it is developed by CKSource. CKEditor is available under open-source and commercial licenses.\",\r\n            \"website\": \"https://ckeditor.com\",\r\n            \"cpe\": \"cpe:2.3:a:ckeditor:ckeditor:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"CMS Made Simple\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"cmssessid\": \"\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"cms made simple\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://cmsmadesimple.org\",\r\n            \"cpe\": \"cpe:2.3:a:cmsmadesimple:cms_made_simple:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"CMSimple\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"cmsimple( [\\\\d.]+)?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://www.cmsimple.org/en\",\r\n            \"cpe\": \"cpe:2.3:a:cmsimple:cmsimple:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"CNZZ\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"cnzz_protocol\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//[^./]+\\\\.cnzz\\\\.com/(?:z_stat.php|core)\\\\?\"\r\n            ],\r\n            \"website\": \"https://web.umeng.com/\"\r\n        },\r\n        \"CPABuild\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"js\": [\r\n                \"cpabuildlock\"\r\n            ],\r\n            \"description\": \"CPABuild is a next generation CPA network with integrated template building and sharing functionality.\",\r\n            \"website\": \"https://cpabuild.com\"\r\n        },\r\n        \"CPG Dragonfly\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^dragonfly cms\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"cpg dragonfly\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://dragonflycms.org\"\r\n        },\r\n        \"CRM+\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"implies\": [\r\n                \"MariaDB\",\r\n                \"Sentry\",\r\n                \"Vtiger\",\r\n                \"amCharts\"\r\n            ],\r\n            \"description\": \"CRM+ is a German CRM software product building on Vtiger with GDPR-compliant extensions and improvements.\",\r\n            \"website\": \"https://www.brainformatik.com\"\r\n        },\r\n        \"CS Cart\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"fn_buy_together_apply_discount\",\r\n                \"fn_calculate_total_shipping\",\r\n                \"fn_compare_strings\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"var/cache/misc/assets/js/tygh/scripts-(?:[\\\\d\\\\w]+)\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"CS Cart is a turnkey ecommerce shopping cart software solution.\",\r\n            \"website\": \"https://www.cs-cart.com\"\r\n        },\r\n        \"CSSIgniter Olsen Light\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/olsen-light/.+scripts(?:\\\\.min)?\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"CSSIgniter Olsen Light is a clean, minimal, stylish and elegant WordPress blog theme, perfect for lifestyle, food, cooking, fashion, travel, wedding, health \\u0026 fitness, photography and beauty blogging.\",\r\n            \"website\": \"https://www.cssigniter.com/themes/olsen-light\"\r\n        },\r\n        \"CTT\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"CTT operates as the national postal service of Portugal.\",\r\n            \"website\": \"https://www.ctt.pt\"\r\n        },\r\n        \"Caast.tv\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"caast.open\",\r\n                \"caastinstance\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.caast\\\\.tv/\"\r\n            ],\r\n            \"description\": \"Caast.tv is a digital commercial animation solution integrated into the ecommerce customer journey.\",\r\n            \"website\": \"https://en.caast.tv\"\r\n        },\r\n        \"CacheFly\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^cfs \",\r\n                \"x-cf1\": \"\",\r\n                \"x-cf2\": \"\"\r\n            },\r\n            \"description\": \"CacheFly is a content delivery network (CDN) which offers CDN service that relies solely on IP anycast for routing, rather than DNS based global load balancing.\",\r\n            \"website\": \"https://www.cachefly.com\"\r\n        },\r\n        \"Cachet\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"js\": [\r\n                \"cachet.notifier\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Cachet is the free and open-source status page for your API, service or company.\",\r\n            \"website\": \"https://cachethq.io\"\r\n        },\r\n        \"CactiveCloud\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^cactive$\"\r\n            },\r\n            \"description\": \"CactiveCloud is a freemium based cloud provider and web server for static deployments of websites with HTML builds and serverless functions.\",\r\n            \"website\": \"https://cactivecloud.com\"\r\n        },\r\n        \"Caddy\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^caddy$\"\r\n            },\r\n            \"website\": \"https://caddyserver.com\",\r\n            \"cpe\": \"cpe:2.3:a:caddyserver:caddy:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Cafe24\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"ec_global_datetime\",\r\n                \"ec_global_info\",\r\n                \"ec_root_domain\"\r\n            ],\r\n            \"description\": \"Cafe24 is a global ecommerce platform that provides everything people need to build an online DTC store in one stop.\",\r\n            \"website\": \"https://www.cafe24.com/en/\"\r\n        },\r\n        \"Caisy\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"description\": \"Caisy is a headless CMS platform providing flexible content management, seamless integration with various devices and channels, and API access for structured content delivery.\",\r\n            \"website\": \"https://caisy.io\"\r\n        },\r\n        \"CakePHP\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"cookies\": {\r\n                \"cakephp\": \"\"\r\n            },\r\n            \"meta\": {\r\n                \"application-name\": [\r\n                    \"cakephp\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"CakePHP is an open-source web framework. It follows the model–view–controller (MVC) approach and is written in PHP.\",\r\n            \"website\": \"https://cakephp.org\",\r\n            \"cpe\": \"cpe:2.3:a:cakephp:cakephp:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Caldera Forms\": {\r\n            \"cats\": [\r\n                87,\r\n                110\r\n            ],\r\n            \"js\": [\r\n                \"calderaforms\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/caldera-forms/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Caldera Forms is the free WordPress form builder plugin.\",\r\n            \"website\": \"https://calderaforms.com\"\r\n        },\r\n        \"CalendarHero\": {\r\n            \"cats\": [\r\n                72\r\n            ],\r\n            \"js\": [\r\n                \"zoomai.vars\"\r\n            ],\r\n            \"description\": \"CalendarHero (formerly Zoom.ai) is meeting scheduling software that helps you book meetings automatically.\",\r\n            \"website\": \"https://calendarhero.com\"\r\n        },\r\n        \"Calendly\": {\r\n            \"cats\": [\r\n                72\r\n            ],\r\n            \"js\": [\r\n                \"calendly\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"assets\\\\.calendly\\\\.com/\"\r\n            ],\r\n            \"description\": \"Calendly is an app for scheduling appointments, meetings, and events.\",\r\n            \"website\": \"https://calendly.com/\"\r\n        },\r\n        \"CallRail\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"calltrk\",\r\n                \"calltrkswap\",\r\n                \"crwpver\"\r\n            ],\r\n            \"description\": \"CallRail is a service that tracks and manages your phone leads, helping businesses to determine which marketing campaigns are driving quality leads.\",\r\n            \"website\": \"https://www.callrail.com\"\r\n        },\r\n        \"CallTrackingMetrics\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"__ctm.numbers\",\r\n                \"__ctm_tracked_numbers\"\r\n            ],\r\n            \"description\": \"CallTrackingMetrics is a call tracking and marketing attribution solution for contact centers and agencies.\",\r\n            \"website\": \"https://www.calltrackingmetrics.com\"\r\n        },\r\n        \"Callbell\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"callbell\",\r\n                \"callbellsettings\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.callbell\\\\.eu/\"\r\n            ],\r\n            \"description\": \"Callbell is a web-based live chat solution designed to help businesses manage team collaboration via multiple communication channels.\",\r\n            \"website\": \"https://www.callbell.eu\"\r\n        },\r\n        \"Campaign Monitor\": {\r\n            \"cats\": [\r\n                32,\r\n                75\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.createsend1\\\\.com/\"\r\n            ],\r\n            \"description\": \"Campaign Monitor is a global technology company that provides an email marketing platform.\",\r\n            \"website\": \"https://www.campaignmonitor.com\"\r\n        },\r\n        \"Candid Themes Fairy\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/fairy(?:-premium)?/.+custom\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Fairy is a free and minimal WordPress blog theme by Candid Themes.\",\r\n            \"website\": \"https://www.candidthemes.com/themes/fairy\"\r\n        },\r\n        \"Canny\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"js\": [\r\n                \"canny\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"//canny\\\\.io\"\r\n            },\r\n            \"description\": \"Canny is a cloud-based solution that helps small to large businesses collect, analyse, prioritise and track user feedback to make informed product decisions.\",\r\n            \"website\": \"https://canny.io\"\r\n        },\r\n        \"Canto\": {\r\n            \"cats\": [\r\n                95\r\n            ],\r\n            \"description\": \"Canto is a digital asset management solution.\",\r\n            \"website\": \"https://www.canto.com\"\r\n        },\r\n        \"Canva\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"canva_debounceresize\",\r\n                \"canva_scriptexecutor\"\r\n            ],\r\n            \"description\": \"Canva is an online graphic design platform that allows users to create various visual content using pre-designed templates and a library of elements.\",\r\n            \"website\": \"https://www.canva.com\"\r\n        },\r\n        \"Canvas LMS\": {\r\n            \"cats\": [\r\n                21\r\n            ],\r\n            \"js\": [\r\n                \"webpackchunkcanvas_lms\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-canvas-meta\": \"login/canvas\"\r\n            },\r\n            \"implies\": [\r\n                \"React\",\r\n                \"Ruby on Rails\"\r\n            ],\r\n            \"description\": \"Canvas LMS is a web-based learning management system, or LMS.\",\r\n            \"website\": \"https://www.instructure.com/canvas\"\r\n        },\r\n        \"CanvasJS\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"canvasjs.chart\",\r\n                \"canvasjs.chart.version\"\r\n            ],\r\n            \"description\": \"CanvasJS charts is a data visualisation library that runs across multiple devices and browsers.\",\r\n            \"website\": \"https://canvasjs.com\"\r\n        },\r\n        \"Captch Me\": {\r\n            \"cats\": [\r\n                16,\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"captchme\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^https?://api\\\\.captchme\\\\.net/\"\r\n            ],\r\n            \"website\": \"https://captchme.com\"\r\n        },\r\n        \"Captivate.fm\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"captivate_player_app_url\"\r\n            ],\r\n            \"description\": \"Captivate.fm is a podcast hosting and analytics platform that provides tools for creating, hosting, and distributing podcasts.\",\r\n            \"website\": \"https://www.captivate.fm\"\r\n        },\r\n        \"Carbon Ads\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"_carbonads\",\r\n                \"_carbonads_go\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.carbonads\\\\.com/\"\r\n            ],\r\n            \"description\": \"Carbon Ads is an ad tech company, that connects advertisers to users through targeted verticals called Circles.\",\r\n            \"website\": \"https://carbonads.net\"\r\n        },\r\n        \"CareCart\": {\r\n            \"cats\": [\r\n                98,\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"app\\\\.carecart\\\\.io/api/abandoned-cart/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"CareCart is a smart app to recover big value carts on all sizes of shopify stores.\",\r\n            \"website\": \"https://carecart.io/abandoned-cart-recovery-app\"\r\n        },\r\n        \"CareCart Sales Pop Up\": {\r\n            \"cats\": [\r\n                100,\r\n                5\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"sales-pop\\\\.carecart\\\\.io/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"CareCart Sales Pop Up is a stock countdown timer, recent sales notifications, live sales pop up widget.\",\r\n            \"website\": \"https://carecart.io/sales-pop-up-app\"\r\n        },\r\n        \"Cargo\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"__cargo_js_ver__\",\r\n                \"cargo.config\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?\\u003c!elo\\\\.io)/cargo\\\\.\"\r\n            ],\r\n            \"meta\": {\r\n                \"cargo_title\": []\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Cargo is a professional site building platform for designers and artists.\",\r\n            \"website\": \"https://cargo.site\"\r\n        },\r\n        \"Carrd\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"scripts\": [\r\n                \"\\\\(\\\\!section\\\\s\\\\|\\\\|\\\\ssection\\\\.tagname\\\\s\\\\!\\\\=\\\\s\\\\'section\\\\'\\\\)\"\r\n            ],\r\n            \"description\": \"Carrd is a platform for building simple, responsive, one-page sites.\",\r\n            \"website\": \"https://carrd.co\"\r\n        },\r\n        \"Carro\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/carro\\\\.min\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\",\r\n                \"\\\\.getcarro\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Carro connects participating Shopify stores together to enable cross-store selling or the ability for like-minded partners to directly sell each other products without the need for inventory, managing returns, or minimum order quantities.\",\r\n            \"website\": \"https://getcarro.com\"\r\n        },\r\n        \"Carrot quest\": {\r\n            \"cats\": [\r\n                10,\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"carrotquest\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.carrotquest\\\\.app\"\r\n            },\r\n            \"description\": \"Carrot quest is a customer engagement and communication platform that aids businesses in improving interactions with users and customers through targeted messaging, in-app messaging, live chat, email campaigns, and user behavior tracking.\",\r\n            \"website\": \"https://www.carrotquest.io\"\r\n        },\r\n        \"Cart Functionality\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"google_tag_params.ecomm_pagetype\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"googlecommerce\\\\.com/trustedstores/api/js\"\r\n            ],\r\n            \"description\": \"Websites that have a shopping cart or checkout page, either using a known ecommerce platform or a custom solution.\",\r\n            \"website\": \"https://www.wappalyzer.com/technologies/ecommerce/cart-functionality\"\r\n        },\r\n        \"Cart.com\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"ac.storedomain\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.americommerce\\\\.com/\"\r\n            ],\r\n            \"description\": \"Cart.com is an ecommerce platform built for high volume online stores and complex products with features such as multi-store management.\",\r\n            \"website\": \"https://www.americommerce.com\"\r\n        },\r\n        \"Cart.js\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:shopify-cartjs/([\\\\d\\\\.]+)|assets)/rivets-cart\\\\.min\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Cart.js is a very small open-source Javascript library that makes the addition of powerful Ajax cart functionality to your Shopify theme a breeze.\",\r\n            \"website\": \"https://cartjs.org\"\r\n        },\r\n        \"CartKit\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.cartkitcdn\\\\.com/\"\r\n            ],\r\n            \"description\": \"CartKit build apps from fuss-free multi-channel marketing automation and campaigns to social proof popups and user session recording.\",\r\n            \"website\": \"https://www.cartkit.com\"\r\n        },\r\n        \"CartStack\": {\r\n            \"cats\": [\r\n                98\r\n            ],\r\n            \"js\": [\r\n                \"_cartstack\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"api\\\\.cartstack\\\\.\\\\w+\"\r\n            ],\r\n            \"description\": \"CartStack is a SaaS solution that allows any company with an ecommerce site or reservation system to increase revenue through reminding/encouraging consumers to return to their abandoned cart and complete their purchase.\",\r\n            \"website\": \"https://www.cartstack.com\"\r\n        },\r\n        \"Carts Guru\": {\r\n            \"cats\": [\r\n                32,\r\n                75\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.cartsguru\\\\.io/\"\r\n            ],\r\n            \"description\": \"Carts Guru is the all-in-one marketing automation tool for ecommerce stores.\",\r\n            \"website\": \"https://www.carts.guru\"\r\n        },\r\n        \"Catberry.js\": {\r\n            \"cats\": [\r\n                12,\r\n                18\r\n            ],\r\n            \"js\": [\r\n                \"catberry\",\r\n                \"catberry.version\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"catberry\"\r\n            },\r\n            \"implies\": [\r\n                \"Node.js\"\r\n            ],\r\n            \"website\": \"https://catberry.github.io/\"\r\n        },\r\n        \"Catch\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"catch\"\r\n            ],\r\n            \"description\": \"Catch is a payment solution which allows merchants to use payments via bank payments instead of credit/debit cards.\",\r\n            \"website\": \"https://www.getcatch.com/\"\r\n        },\r\n        \"Catch Themes Catch Box\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/catch-box(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"Catch Box is a lightweight, box shaped, clean responsive WordPress theme by Catch Themes.\",\r\n            \"website\": \"https://catchthemes.com/themes/catch-box\"\r\n        },\r\n        \"Catch Themes Fotografie\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/fotografie(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"Fotografie is a modern photography WordPress theme that comes with high-quality features and minimal design by Catch Themes.\",\r\n            \"website\": \"https://catchthemes.com/themes/fotografie\"\r\n        },\r\n        \"Cecil\": {\r\n            \"cats\": [\r\n                57\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^cecil(?: ([0-9.]+))?$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"Cecil is a CLI application, powered by PHP, that merge plain text files (written in Markdown), images and Twig templates to generate a static website.\",\r\n            \"website\": \"https://cecil.app\"\r\n        },\r\n        \"Celeritas\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Celeritas offers transportation logistics services for package deliveries.\",\r\n            \"website\": \"https://celeritastransporte.com\"\r\n        },\r\n        \"Celum\": {\r\n            \"cats\": [\r\n                95\r\n            ],\r\n            \"description\": \"Celum is a software developer that specialises in enterprise digital asset management and marketing content management systems.\",\r\n            \"website\": \"https://www.celum.com\"\r\n        },\r\n        \"Cendyn\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^nextguest cms\"\r\n            },\r\n            \"description\": \"Cendyn (formerly NextGuest) is a hospitality focused content management system.\",\r\n            \"website\": \"https://www.cendyn.com\"\r\n        },\r\n        \"Censhare\": {\r\n            \"cats\": [\r\n                95\r\n            ],\r\n            \"description\": \"Censhare is a commercial digital experience platform in the form of an enterprise content management system.\",\r\n            \"website\": \"https://www.censhare.com\"\r\n        },\r\n        \"CentOS\": {\r\n            \"cats\": [\r\n                28\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"centos\",\r\n                \"x-powered-by\": \"centos\"\r\n            },\r\n            \"description\": \"CentOS is a Linux distribution that provides a free, community-supported computing platform functionally compatible with its upstream source, Red Hat Enterprise Linux (RHEL).\",\r\n            \"website\": \"https://centos.org\",\r\n            \"cpe\": \"cpe:2.3:o:centos:centos:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Centminmod\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"centminmod\"\r\n            },\r\n            \"implies\": [\r\n                \"CentOS\",\r\n                \"Nginx\",\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://centminmod.com\"\r\n        },\r\n        \"Centra\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"centra_image_sizes\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.centra(?:cdn)?\\\\.(?:com|net)\"\r\n            },\r\n            \"scripts\": [\r\n                \"centracheckoutscript\"\r\n            ],\r\n            \"description\": \"Centra is the headless ecommerce platform.\",\r\n            \"website\": \"https://centra.com\"\r\n        },\r\n        \"Chabokan\": {\r\n            \"cats\": [\r\n                62\r\n            ],\r\n            \"headers\": {\r\n                \"ch-powered-by\": \"chabokan\\\\s\\\\(chabokan\\\\.net\\\\)\"\r\n            },\r\n            \"description\": \"Chabokan is a cloud services provider, offering a wide range of incorporated cloud services including Cloud Object Storage, DBaaS, BaaS, and PaaS.\",\r\n            \"website\": \"https://chabokan.net\"\r\n        },\r\n        \"Chakra UI\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.chakra-ui\\\\.\"\r\n            ],\r\n            \"implies\": [\r\n                \"React\"\r\n            ],\r\n            \"description\": \"Chakra UI is a simple, modular and accessible component library that gives you the building blocks you need to build your React applications.\",\r\n            \"website\": \"https://chakra-ui.com\"\r\n        },\r\n        \"Chameleon\": {\r\n            \"cats\": [\r\n                58\r\n            ],\r\n            \"js\": [\r\n                \"chmln.snippet.urls.fast\",\r\n                \"chmlndata.organizationattributes\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.trychameleon\\\\.com/\"\r\n            ],\r\n            \"description\": \"Chameleon is a sophisticated no-code platform for product success, empowering SaaS teams to build self-service user onboarding, feature adoption, and feedback collection.\",\r\n            \"website\": \"https://www.trychameleon.com\"\r\n        },\r\n        \"Chameleon system\": {\r\n            \"cats\": [\r\n                1,\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"chameleon cms/shop system\"\r\n                ]\r\n            },\r\n            \"description\": \"Chameleon system is an ecommerce and content management system all-in-one, capable of being integrated straight from the manufacturer.\",\r\n            \"website\": \"https://www.chameleon-system.de\"\r\n        },\r\n        \"Chamilo\": {\r\n            \"cats\": [\r\n                21\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"chamilo ([\\\\d.]+)\\\\;version:\\\\1\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"chamilo ([\\\\d.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Chamilo is an open-source learning management and collaboration system.\",\r\n            \"website\": \"https://www.chamilo.org\",\r\n            \"cpe\": \"cpe:2.3:a:chamilo:chamilo_lms:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Channel.io\": {\r\n            \"cats\": [\r\n                52,\r\n                53\r\n            ],\r\n            \"js\": [\r\n                \"channelio\"\r\n            ],\r\n            \"description\": \"Channel.io is an all-in-one business communication platform that helps businesses connect with customers.\",\r\n            \"website\": \"https://channel.io\"\r\n        },\r\n        \"ChannelAdvisor\": {\r\n            \"cats\": [\r\n                10,\r\n                32\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.channeladvisor\\\\.com/\"\r\n            ],\r\n            \"description\": \"ChannelAdvisor is a provider of cloud-based solutions to ecommerce companies.\",\r\n            \"website\": \"https://www.channeladvisor.com\"\r\n        },\r\n        \"ChannelApe\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"description\": \"ChannelApe is an ecommerce and inventory management solution for the footwear and apparel industry.\",\r\n            \"website\": \"https://www.channelape.com\"\r\n        },\r\n        \"Chaport\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"chaport\",\r\n                \"chaportconfig\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.chaport\\\\.com\"\r\n            ],\r\n            \"description\": \"Chaport is a multi-channel live chat and chatbot software for business.\",\r\n            \"website\": \"https://www.chaport.com\"\r\n        },\r\n        \"ChargeAfter\": {\r\n            \"cats\": [\r\n                41,\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"chargeafter\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.chargeafter\\\\.com\"\r\n            ],\r\n            \"description\": \"ChargeAfter is a platform that connects retailers and lenders to offer consumers personalized Point of Sale Financing options at checkout from multiple lenders. \",\r\n            \"website\": \"https://chargeafter.com/\"\r\n        },\r\n        \"Chargebee\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"chargebee\",\r\n                \"chargebeetrackfunc\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"js\\\\.chargebee\\\\.com/v([\\\\d.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Chargebee is a PCI Level 1 certified recurring billing platform for SaaS and subscription-based businesses.\",\r\n            \"website\": \"https://www.chargebee.com\"\r\n        },\r\n        \"Chart.js\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"chart\",\r\n                \"chart.ctx.beziercurveto\",\r\n                \"chart.defaults.doughnut\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/chart(?:\\\\.bundle)?(?:\\\\.min)?\\\\.js\\\\;confidence:75\",\r\n                \"cdn\\\\.jsdelivr\\\\.net/(?:npm|gh/chartjs)/chart\\\\.js@([\\\\d.]+(?:-[^/]+)?|latest)/dist/chart.*\\\\.js\\\\;version:\\\\1\",\r\n                \"cdnjs\\\\.cloudflare\\\\.com/ajax/libs/chart\\\\.js/([\\\\d.]+(?:-[^/]+)?)/chart.*\\\\.js\\\\;version:\\\\1\",\r\n                \"chartjs\\\\.org/dist/([\\\\d.]+(?:-[^/]+)?|master|latest)/chart.*\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Chart.js is an open-source JavaScript library that allows you to draw different types of charts by using the HTML5 canvas element.\",\r\n            \"website\": \"https://www.chartjs.org\"\r\n        },\r\n        \"Chartbeat\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"_sf_async_config\",\r\n                \"_sf_endpt\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"chartbeat\\\\.js\"\r\n            ],\r\n            \"website\": \"https://chartbeat.com\"\r\n        },\r\n        \"ChatStack\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"chatstack.chatstate\",\r\n                \"chatstack.server\"\r\n            ],\r\n            \"description\": \"ChatStack is a self-hosted live chat software for websites.\",\r\n            \"website\": \"https://www.chatstack.com\"\r\n        },\r\n        \"Chatango\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"st\\\\.chatango\\\\.com\"\r\n            ],\r\n            \"description\": \"Chatango is a website used for connecting to a large selection of users.\",\r\n            \"website\": \"https://chatango.com\"\r\n        },\r\n        \"Chatra\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"chatraid\",\r\n                \"chatrasetup\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"call\\\\.chatra\\\\.io/chatra\\\\.js\"\r\n            ],\r\n            \"description\": \"Chatra is a cloud-based live chat platform aimed at small businesses and ecommerce retailers.\",\r\n            \"website\": \"https://chatra.com\"\r\n        },\r\n        \"Chatwoot\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"$chatwoot\",\r\n                \"chatwootsdk\"\r\n            ],\r\n            \"description\": \"Chatwoot is a customer support tool for instant messaging channels.\",\r\n            \"website\": \"https://www.chatwoot.com\"\r\n        },\r\n        \"Checkfront\": {\r\n            \"cats\": [\r\n                5,\r\n                72\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.checkfront\\\\.com/\"\r\n            ],\r\n            \"description\": \"Checkfront is a cloud-based booking management application and ecommerce platform.\",\r\n            \"website\": \"https://www.checkfront.com\"\r\n        },\r\n        \"Checkly\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"js\": [\r\n                \"__nuxt__.config.public.apiurl\"\r\n            ],\r\n            \"description\": \"Checkly is the API and E2E monitoring platform for the modern stack: programmable, flexible and loving JavaScript.\",\r\n            \"website\": \"https://www.checklyhq.com\"\r\n        },\r\n        \"Checkout.com\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.checkout\\\\.com/js/.+js(?:\\\\?ver=)?([\\\\d\\\\.]+)?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Checkout.com is an international payment platform that processes different payment methods across a variety of currencies.\",\r\n            \"website\": \"https://www.checkout.com\"\r\n        },\r\n        \"Chekkit\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"chekkitsettings.togglechat\"\r\n            ],\r\n            \"description\": \"Chekkit is an all-in-one review, messaging, and lead inbox software.\",\r\n            \"website\": \"https://www.chekkit.io\"\r\n        },\r\n        \"Cherokee\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^cherokee(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"website\": \"https://www.cherokee-project.com\",\r\n            \"cpe\": \"cpe:2.3:a:cherokee-project:cherokee:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"CherryPy\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"cherrypy(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"CherryPy is an object-oriented web application framework using the Python programming language.\",\r\n            \"website\": \"https://cherrypy.org/\"\r\n        },\r\n        \"Chevereto\": {\r\n            \"cats\": [\r\n                7,\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"chevereto.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/chevereto\\\\.js\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"chevereto\\\\s(?:[\\\\d\\\\.]+)\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Chevereto is an image hosting software that allows you to create a full-featured image hosting website on your own server.\",\r\n            \"website\": \"https://chevereto.com\"\r\n        },\r\n        \"Chicago Boss\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"cookies\": {\r\n                \"_boss_session\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"Erlang\"\r\n            ],\r\n            \"description\": \"Chicago Boss is a web framework for Erlang.\",\r\n            \"website\": \"https://github.com/ChicagoBoss/ChicagoBoss\"\r\n        },\r\n        \"Chili Piper\": {\r\n            \"cats\": [\r\n                72\r\n            ],\r\n            \"js\": [\r\n                \"chilipiper\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"js\\\\.chilipiper\\\\.com/marketing\\\\.js\"\r\n            ],\r\n            \"description\": \"Chili Piper is a suite of automated scheduling tools that help revenue teams convert leads.\",\r\n            \"website\": \"https://www.chilipiper.com/\"\r\n        },\r\n        \"Chimpmatic\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"implies\": [\r\n                \"Contact Form 7\",\r\n                \"MailChimp\"\r\n            ],\r\n            \"description\": \"Chimpmatic is a premium Contact Form 7 and Mailchimp integration plugin.\",\r\n            \"website\": \"https://chimpmatic.com\"\r\n        },\r\n        \"Chinese Menu Online\": {\r\n            \"cats\": [\r\n                51,\r\n                93\r\n            ],\r\n            \"description\": \"Chinese Menu Online is an online food ordering service.\",\r\n            \"website\": \"https://www.chinesemenuonline.com\"\r\n        },\r\n        \"Chitika\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"ch_client\",\r\n                \"ch_color_site_link\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"scripts\\\\.chitika\\\\.net/\"\r\n            ],\r\n            \"website\": \"https://chitika.com\"\r\n        },\r\n        \"Choices\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"choices\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/modules/choices/js/choices\\\\.js\",\r\n                \"choices\\\\.js(?:@|/)?([\\\\d\\\\.]+)?.+choices\\\\.min\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Choices.js is a lightweight, configurable select box/text input plugin.\",\r\n            \"website\": \"https://github.com/Choices-js/Choices\"\r\n        },\r\n        \"Chord\": {\r\n            \"cats\": [\r\n                52,\r\n                103\r\n            ],\r\n            \"js\": [\r\n                \"chordconnect\",\r\n                \"chordconnect.__esmodule\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"chord\\\\.us/embeddable/client-([\\\\d\\\\.]+)\\\\.min\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Chord is a video-enabled social community and communication platform completely customised to your brand.\",\r\n            \"website\": \"https://m.chord.us\"\r\n        },\r\n        \"Chorus\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"_chorus_geoip_continent\": \"\",\r\n                \"chorus_preferences\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"chorus.addscript\",\r\n                \"chorusads.beforeadsrequested\",\r\n                \"choruscampaigns.recordclickurl\"\r\n            ],\r\n            \"description\": \"Chorus is the only all-in-one publishing, audience, and revenue platform built for modern media companies.\",\r\n            \"website\": \"https://getchorus.voxmedia.com\"\r\n        },\r\n        \"Chronofresh\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Chronofresh is an express transport service for food products.\",\r\n            \"website\": \"https://www.chronofresh.fr\"\r\n        },\r\n        \"Chronopost\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Chronopost provides a domestic and international express shipping and delivery service.\",\r\n            \"website\": \"https://www.chronopost.fr\"\r\n        },\r\n        \"ChurnZero\": {\r\n            \"cats\": [\r\n                97\r\n            ],\r\n            \"js\": [\r\n                \"churnzero\",\r\n                \"churnzero.version\"\r\n            ],\r\n            \"description\": \"ChurnZero is a real-time customer success platform that helps subscription businesses fight customer churn.\",\r\n            \"website\": \"https://churnzero.net\"\r\n        },\r\n        \"CitrusPay\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"checkout-static\\\\.citruspay\\\\.com/\"\r\n            ],\r\n            \"description\": \"CitrusPay provides payement gateway and wallet services.\",\r\n            \"website\": \"https://consumers.citruspay.com/\"\r\n        },\r\n        \"City Hive\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"cityhivesites\",\r\n                \"cityhivewebsitename\"\r\n            ],\r\n            \"description\": \"City Hive's all in one ecommerce platform for wine and spirit shops.\",\r\n            \"website\": \"https://www.cityhive.net\"\r\n        },\r\n        \"CityMail\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"CityMail is a private postal organisation operating in Sweden.\",\r\n            \"website\": \"https://www.citymail.se\"\r\n        },\r\n        \"CiviCRM\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"description\": \"CiviCRM is a web-based suite of internationalised open-source software for constituency relationship management.\",\r\n            \"website\": \"https://civicrm.org\"\r\n        },\r\n        \"CiviCRM plugins\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"wp-content/plugins/(?:[\\\\w\\\\-]+)?civicrm(?:[\\\\w\\\\-]+)?/\"\r\n            ],\r\n            \"implies\": [\r\n                \"CiviCRM\"\r\n            ],\r\n            \"description\": \"CiviCRM is a web-based suite of internationalised open-source software for constituency relationship management.\",\r\n            \"website\": \"https://wordpress.org/plugins/search/civicrm/\"\r\n        },\r\n        \"CivicTheme\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"description\": \"CivicTheme is an open source, inclusive and component-based design system. It was created so governments and corporations can rapidly assemble modern, consistent and compliant digital experiences.\",\r\n            \"website\": \"https://www.civictheme.io/\"\r\n        },\r\n        \"Ckan\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"access-control-allow-headers\": \"x-ckan-api-key\",\r\n                \"link\": \"\\u003chttp://ckan\\\\.org/\\u003e; rel=shortlink\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^ckan ?([0-9.]+)$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Java\",\r\n                \"PostgreSQL\",\r\n                \"Python\",\r\n                \"Solr\"\r\n            ],\r\n            \"website\": \"https://ckan.org/\"\r\n        },\r\n        \"Clarip\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"js\": [\r\n                \"claripcdnhost\",\r\n                \"clariphost\",\r\n                \"pagedata.claripconsentjsurl\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//cdn\\\\.clarip\\\\.com/\"\r\n            ],\r\n            \"description\": \"Clarip is an enterprise data privacy and risk management platform.\",\r\n            \"website\": \"https://www.clarip.com\"\r\n        },\r\n        \"Claris FileMaker\": {\r\n            \"cats\": [\r\n                34\r\n            ],\r\n            \"description\": \"Claris FileMaker is a cross-platform relational database application from Claris International.\",\r\n            \"website\": \"https://www.claris.com/filemaker\"\r\n        },\r\n        \"Clarity\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"js\": [\r\n                \"clarityicons\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"clr-angular(?:\\\\.umd)?(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Angular\"\r\n            ],\r\n            \"description\": \"Clarity is an open-source design system that brings together UX guidelines, an HTML/CSS framework, and Angular components.\",\r\n            \"website\": \"https://clarity.design\"\r\n        },\r\n        \"Classeh\": {\r\n            \"cats\": [\r\n                21\r\n            ],\r\n            \"meta\": {\r\n                \"author\": [\r\n                    \"^fanavar\\\\.org$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\",\r\n                \"Python\",\r\n                \"React\"\r\n            ],\r\n            \"description\": \"Classeh is a LMS that allows user to participate in webinars and also use LMS options like messanger,finances,homework,quiz and some extra options like sending messages and more.\",\r\n            \"website\": \"https://fanavar.org\"\r\n        },\r\n        \"Classy\": {\r\n            \"cats\": [\r\n                111\r\n            ],\r\n            \"js\": [\r\n                \"classy.clientid\"\r\n            ],\r\n            \"scripts\": [\r\n                \"classy\\\\.org\"\r\n            ],\r\n            \"description\": \"Classy is an online fundraising platform.\",\r\n            \"website\": \"https://www.classy.org/\"\r\n        },\r\n        \"ClearSale\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"csdm\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"device\\\\.clearsale\\\\.com\\\\.br\"\r\n            ],\r\n            \"description\": \"ClearSale offers fraud management and chargeback protection services.\",\r\n            \"website\": \"https://www.clear.sale/\"\r\n        },\r\n        \"Clearbit Reveal\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"reveal\\\\.clearbit\\\\.com/v[(0-9)]/\"\r\n            ],\r\n            \"description\": \"Clearbit Reveal identifies anonymous visitors to websites.\",\r\n            \"website\": \"https://clearbit.com/reveal\"\r\n        },\r\n        \"Clerk\": {\r\n            \"cats\": [\r\n                69\r\n            ],\r\n            \"js\": [\r\n                \"clerk.authenticatewithmetamask\",\r\n                \"clerk.opensignin\",\r\n                \"clerk.version\"\r\n            ],\r\n            \"description\": \"Clerk is a user management platform.\",\r\n            \"website\": \"https://clerk.dev\"\r\n        },\r\n        \"Clerk.io\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"__clerk_cb_0\",\r\n                \"__clerk_q\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.clerk\\\\.io/\"\r\n            ],\r\n            \"description\": \"Clerk.io is an all-in-one ecommerce personalisation platform.\",\r\n            \"website\": \"https://clerk.io\"\r\n        },\r\n        \"CleverTap\": {\r\n            \"cats\": [\r\n                32,\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"clevertap\"\r\n            ],\r\n            \"description\": \"CleverTap is a SaaS based customer lifecycle management and mobile marketing company headquartered in Mountain View, California.\",\r\n            \"website\": \"https://clevertap.com\"\r\n        },\r\n        \"Cleverbridge\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"cbcartproductselection\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"static-cf\\\\.cleverbridge\\\\.\\\\w+/js/shop\\\\.js\"\r\n            ],\r\n            \"description\": \"Cleverbridge is a all-in-one ecommerce and subscription billing solution for software, (SaaS) and digital goods.\",\r\n            \"website\": \"https://www.cleverbridge.com\"\r\n        },\r\n        \"Click \\u0026 Pledge\": {\r\n            \"cats\": [\r\n                111\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.clickandpledge\\\\.com/\"\r\n            ],\r\n            \"description\": \"Click \\u0026 Pledge is an all-in-one digital fundraising platform.\",\r\n            \"website\": \"https://clickandpledge.com\"\r\n        },\r\n        \"ClickCease\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.clickcease\\\\.com/monitor/\"\r\n            ],\r\n            \"description\": \"ClickCease is an ad fraud and click-fraud detection and protection service software.\",\r\n            \"website\": \"https://www.clickcease.com\"\r\n        },\r\n        \"ClickDimensions\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"clickdimensions\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"analytics\\\\.clickdimensions\\\\.com/\"\r\n            ],\r\n            \"description\": \"ClickDimensions is a SaaS marketing automation platform built on the Microsoft Windows Azure platform.\",\r\n            \"website\": \"https://clickdimensions.com\"\r\n        },\r\n        \"ClickFunnels\": {\r\n            \"cats\": [\r\n                32,\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"cfaddpolyfill\",\r\n                \"cfappdomain\",\r\n                \"cfsurveyparticipantid\",\r\n                \"clickfunnels\"\r\n            ],\r\n            \"meta\": {\r\n                \"cf:app_domain:\": [\r\n                    \"app\\\\.clickfunnels\\\\.com\"\r\n                ]\r\n            },\r\n            \"description\": \"ClickFunnels is an online sales funnel builder that helps businesses market, sell, and deliver their products online.\",\r\n            \"website\": \"https://www.clickfunnels.com\"\r\n        },\r\n        \"ClickHeat\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"clickheatserver\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"clickheat.*\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://www.labsmedia.com/clickheat/index.html\"\r\n        },\r\n        \"ClickOnce\": {\r\n            \"cats\": [\r\n                47\r\n            ],\r\n            \"css\": [\r\n                \"\\\\.ClickOnceInfoText\"\r\n            ],\r\n            \"description\": \"ClickOnce is a Microsoft .NET deployment technology that enables the creation of self-updating Windows-based applications that can be installed and run with minimal user interaction.\",\r\n            \"website\": \"https://learn.microsoft.com/en-us/visualstudio/deployment/clickonce-security-and-deployment\"\r\n        },\r\n        \"ClickTale\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"clicktale\",\r\n                \"clicktaleevent\",\r\n                \"clicktaleglobal\",\r\n                \"clicktalestarteventsignal\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.clicktale\\\\.net\"\r\n            ],\r\n            \"description\": \"ClickTale is a SaaS solution enabling organisations to gain visual in-page analytics.\",\r\n            \"website\": \"https://www.clicktale.com\"\r\n        },\r\n        \"Clickbank\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"js\": [\r\n                \"cbtb\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"r\\\\.wdfl\\\\.co\"\r\n            ],\r\n            \"website\": \"https://www.clickbank.com/\"\r\n        },\r\n        \"Clicky\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"clicky\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"static\\\\.getclicky\\\\.com\"\r\n            ],\r\n            \"description\": \"Clicky is web an analytics tool which helps you to get real-time analysis including spy view.\",\r\n            \"website\": \"https://getclicky.com\"\r\n        },\r\n        \"ClientJS\": {\r\n            \"cats\": [\r\n                59,\r\n                83\r\n            ],\r\n            \"js\": [\r\n                \"clientjs\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/clientjs/(?:(\\\\d.*?)/)?\\\\;version:\\\\1\",\r\n                \"/clientjs@(\\\\d.*?)/\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"ClientJS is a JavaScript library for generating browser fingerprints, exposing all the browser data-points.\",\r\n            \"website\": \"https://clientjs.org\"\r\n        },\r\n        \"ClientXCMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"clientxcmscurrency\"\r\n            ],\r\n            \"description\": \"ClientXCMS is a content management system that provides a drag-and-drop interface, customisable templates, user and media management, and website analytics to help businesses manage their website content.\",\r\n            \"website\": \"https://clientxcms.com\"\r\n        },\r\n        \"Clinch\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.clinch\\\\.co\"\r\n            ],\r\n            \"description\": \"Clinch delivers hyper-personalized creative experiences and consumer intelligence across all channels.\",\r\n            \"website\": \"https://clinch.co/\"\r\n        },\r\n        \"Clipboard.js\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"clipboard(?:-([\\\\d.]+))?(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"website\": \"https://clipboardjs.com/\"\r\n        },\r\n        \"Clockwork\": {\r\n            \"cats\": [\r\n                47\r\n            ],\r\n            \"headers\": {\r\n                \"x-clockwork-version\": \"^([\\\\d\\\\.]+)$\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Clockwork is a development tool for PHP available right in your browser.\",\r\n            \"website\": \"https://github.com/underground-works/clockwork-app\"\r\n        },\r\n        \"Closure Library\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"description\": \"Closure Library is a JavaScript library developed by Google for building robust web applications, offering utilities for DOM manipulation, event handling, data structures, and more.\",\r\n            \"website\": \"https://github.com/google/closure-library\"\r\n        },\r\n        \"CloudCart\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/cloudcart-(?:assets|storage)/\"\r\n            ],\r\n            \"meta\": {\r\n                \"author\": [\r\n                    \"^cloudcart llc$\"\r\n                ]\r\n            },\r\n            \"website\": \"https://cloudcart.com\"\r\n        },\r\n        \"CloudSuite\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"cs_secure_session\": \"\"\r\n            },\r\n            \"website\": \"https://cloudsuite.com\"\r\n        },\r\n        \"Cloudbeds\": {\r\n            \"cats\": [\r\n                72\r\n            ],\r\n            \"js\": [\r\n                \"cloudbeds_widget\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.cloudbeds\\\\.com/\"\r\n            ],\r\n            \"description\": \"Cloudbeds is a cloud-based hotel management platform which includes tools for managing reservations, availability, rates, distribution channels, payments, guests, housekeeping, and more.\",\r\n            \"website\": \"https://www.cloudbeds.com\"\r\n        },\r\n        \"Cloudera\": {\r\n            \"cats\": [\r\n                34\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"cloudera\"\r\n            },\r\n            \"description\": \"Cloudera is a software platform for data engineering, data warehousing, machine learning and analytics that runs in the cloud or on-premises.\",\r\n            \"website\": \"https://www.cloudera.com\"\r\n        },\r\n        \"Cloudflare\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"cookies\": {\r\n                \"__cfduid\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"cloudflare\"\r\n            ],\r\n            \"headers\": {\r\n                \"cf-cache-status\": \"\",\r\n                \"cf-ray\": \"\",\r\n                \"server\": \"^cloudflare$\"\r\n            },\r\n            \"meta\": {\r\n                \"image\": [\r\n                    \"//cdn\\\\.cloudflare\"\r\n                ]\r\n            },\r\n            \"description\": \"Cloudflare is a web-infrastructure and website-security company, providing content-delivery-network services, DDoS mitigation, Internet security, and distributed domain-name-server services.\",\r\n            \"website\": \"https://www.cloudflare.com\"\r\n        },\r\n        \"Cloudflare Bot Management\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"cookies\": {\r\n                \"__cf_bm\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"Cloudflare\"\r\n            ],\r\n            \"description\": \"Cloudflare bot management solution identifies and mitigates automated traffic to protect websites from bad bots.\",\r\n            \"website\": \"https://www.cloudflare.com/en-gb/products/bot-management/\"\r\n        },\r\n        \"Cloudflare Browser Insights\": {\r\n            \"cats\": [\r\n                10,\r\n                78\r\n            ],\r\n            \"js\": [\r\n                \"__cfbeaconcustomtag\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"static\\\\.cloudflareinsights\\\\.com/beacon(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"description\": \"Cloudflare Browser Insights is a tool that measures the performance of websites from the perspective of users.\",\r\n            \"website\": \"https://www.cloudflare.com\"\r\n        },\r\n        \"Cloudflare Rocket Loader\": {\r\n            \"cats\": [\r\n                92\r\n            ],\r\n            \"js\": [\r\n                \"__cfqr.done\",\r\n                \"__cfrlunblockhandlers\"\r\n            ],\r\n            \"description\": \"Cloudflare Rocket Loader is responsible for prioritising over website's content by delaying the loading of Javascript until rendering.\",\r\n            \"website\": \"https://support.cloudflare.com/hc/en-us/articles/200168056-Understanding-Rocket-Loader\"\r\n        },\r\n        \"Cloudflare Stream\": {\r\n            \"cats\": [\r\n                14,\r\n                103\r\n            ],\r\n            \"description\": \"Cloudflare Stream is a serverless live and on-demand video streaming platform.\",\r\n            \"website\": \"https://www.cloudflare.com/products/cloudflare-stream\"\r\n        },\r\n        \"Cloudflare Turnstile\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"js\": [\r\n                \"turnstile\"\r\n            ],\r\n            \"description\": \"Turnstile is Cloudflare's smart CAPTCHA alternative.\",\r\n            \"website\": \"https://www.cloudflare.com/products/turnstile\"\r\n        },\r\n        \"Cloudflare Workers\": {\r\n            \"cats\": [\r\n                62\r\n            ],\r\n            \"implies\": [\r\n                \"Cloudflare\"\r\n            ],\r\n            \"description\": \"Cloudflare Workers is a serverless execution environment that allows you to create entirely new applications or augment existing ones without configuring or maintaining infrastructure.\",\r\n            \"website\": \"https://workers.cloudflare.com\"\r\n        },\r\n        \"Cloudflare Zaraz\": {\r\n            \"cats\": [\r\n                92\r\n            ],\r\n            \"js\": [\r\n                \"zaraz\",\r\n                \"zarazdata\"\r\n            ],\r\n            \"description\": \"Cloudflare Zaraz gives you complete control over third-party tools and services for your website, and allows you to offload them to Cloudflare’s edge, improving the speed and security of your website.\",\r\n            \"website\": \"https://www.cloudflare.com/products/zaraz/\"\r\n        },\r\n        \"Cloudify.store\": {\r\n            \"cats\": [\r\n                6,\r\n                93\r\n            ],\r\n            \"cookies\": {\r\n                \"cloudify_session\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\",\r\n                \"React\"\r\n            ],\r\n            \"description\": \"Cloudify.store is a subscription-based platform that allows anyone to set up a hyperlocal quick commerce business.\",\r\n            \"website\": \"https://cloudify.store\"\r\n        },\r\n        \"Cloudimage\": {\r\n            \"cats\": [\r\n                31,\r\n                95\r\n            ],\r\n            \"js\": [\r\n                \"ciresponsive.config.domain\"\r\n            ],\r\n            \"description\": \"Cloudimage automates the transformation and optimisation of images on the fly and accelerates their distribution via the Content Delivery Network (CDN).\",\r\n            \"website\": \"https://www.cloudimage.io\"\r\n        },\r\n        \"Cloudinary\": {\r\n            \"cats\": [\r\n                31,\r\n                95\r\n            ],\r\n            \"js\": [\r\n                \"_cloudinary\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"player\\\\.cloudinary\\\\.com\"\r\n            },\r\n            \"description\": \"Cloudinary is an end-to-end image- and video-management solution for websites and mobile apps, covering everything from image and video uploads, storage, manipulations, optimisations to delivery.\",\r\n            \"website\": \"https://cloudinary.com\"\r\n        },\r\n        \"Cloudrexx\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^cloudrexx$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Cloudrexx is a proprietary content management system that provides customisable templates and built-in modules for managing content, ecommerce, events, newsletters, and more, along with tools for SEO, social media integration, and multilingual support.\",\r\n            \"website\": \"https://www.cloudrexx.com\"\r\n        },\r\n        \"Cloudways\": {\r\n            \"cats\": [\r\n                62\r\n            ],\r\n            \"headers\": {\r\n                \"cache-provider\": \"cloudways-cache-de\"\r\n            },\r\n            \"description\": \"Cloudways offers managed cloud-hosting services for WordPress sites on a cloud server where multiple copies of your content will be replicated throughout your chosen data center.\",\r\n            \"website\": \"https://www.cloudways.com\"\r\n        },\r\n        \"Cloverly\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"removecloverly\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"apps\\\\.cloverly\\\\.com/\"\r\n            ],\r\n            \"description\": \"Cloverly is an API integration for ethical ecommerce brands to help their customers offset the carbon footprint of their online transactions.\",\r\n            \"website\": \"https://www.cloverly.com\"\r\n        },\r\n        \"Cluep\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cas\\\\.cluep\\\\.com\"\r\n            ],\r\n            \"description\": \"Cluep's artificially intelligent mobile ad platform targets people based on what they are sharing, how they are feeling and where they go in the physical world.\",\r\n            \"website\": \"https://cluep.com/\"\r\n        },\r\n        \"ClustrMaps Widget\": {\r\n            \"cats\": [\r\n                35\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"clustrmaps\\\\.com\"\r\n            ],\r\n            \"description\": \"ClustrMaps widget is a visitor tracker, designed for general web and blog use.\",\r\n            \"website\": \"https://clustrmaps.com/\"\r\n        },\r\n        \"Clutch\": {\r\n            \"cats\": [\r\n                90,\r\n                5\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//widget\\\\.clutch\\\\.co/\"\r\n            ],\r\n            \"description\": \"Clutch review widgets are stand-alone applications that you can embed on your website to show your dynamic ratings and reviews.\",\r\n            \"website\": \"https://clutch.co/content/add-review-widget-your-website\"\r\n        },\r\n        \"CoConstruct\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"website\": \"https://www.coconstruct.com\"\r\n        },\r\n        \"CoRover\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"corover_tag\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.corover\\\\.mobi/\"\r\n            ],\r\n            \"description\": \"CoRover is a conversational AI chatbot platform with proprietary cognitive AI technology.\",\r\n            \"website\": \"https://corover.ai\"\r\n        },\r\n        \"Coaster CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^coaster cms v([\\\\d.]+)$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Laravel\"\r\n            ],\r\n            \"website\": \"https://www.coastercms.org\",\r\n            \"cpe\": \"cpe:2.3:a:web-feet:coaster_cms:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Cococart\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"description\": \"Cococart is an ecommerce platform.\",\r\n            \"website\": \"https://www.cococart.co\"\r\n        },\r\n        \"CoconutSoftware\": {\r\n            \"cats\": [\r\n                5,\r\n                72\r\n            ],\r\n            \"cookies\": {\r\n                \"coconut_calendar\": \"\"\r\n            },\r\n            \"description\": \"Coconut is a cloud-based appointment scheduling solution designed for enterprise financial services organisations such as credit unions, retail banks and more.\",\r\n            \"website\": \"https://www.coconutsoftware.com/\"\r\n        },\r\n        \"Cocos2d\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"cocosengine\"\r\n            ],\r\n            \"description\": \"Cocos2d is a mature open source cross-platform game development framework.\",\r\n            \"website\": \"https://www.cocos.com/en/cocos2dx\"\r\n        },\r\n        \"CodeIgniter\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"cookies\": {\r\n                \"ci_csrf_token\": \"^(.+)$\\\\;version:\\\\1?2+:\",\r\n                \"ci_session\": \"\",\r\n                \"exp_last_activity\": \"\",\r\n                \"exp_tracker\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003cinput[^\\u003e]+name=\\\"ci_csrf_token\\\"\\\\;version:2+\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://codeigniter.com\",\r\n            \"cpe\": \"cpe:2.3:a:codeigniter:codeigniter:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"CodeMirror\": {\r\n            \"cats\": [\r\n                20\r\n            ],\r\n            \"js\": [\r\n                \"codemirror\",\r\n                \"codemirror.version\"\r\n            ],\r\n            \"description\": \"CodeMirror is a JavaScript component that provides a code editor in the browser.\",\r\n            \"website\": \"https://codemirror.net\"\r\n        },\r\n        \"CodeSandbox\": {\r\n            \"cats\": [\r\n                5,\r\n                20\r\n            ],\r\n            \"description\": \"CodeSandbox is an online code editor and prototyping tool that makes creating and sharing web apps faster.\",\r\n            \"website\": \"https://codesandbox.io/\"\r\n        },\r\n        \"Coin Currency Converter\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/apps/coin/coin\\\\.js.+\\\\.myshopify\\\\.com\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Coin Currency Converter is an automatic currency conversion app for Shopify.\",\r\n            \"website\": \"https://apps.shopify.com/coin\"\r\n        },\r\n        \"CoinHive\": {\r\n            \"cats\": [\r\n                56\r\n            ],\r\n            \"js\": [\r\n                \"coinhive\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\/(?:coinhive|(authedmine))(?:\\\\.min)?\\\\.js\\\\;version:\\\\1?opt-in:\",\r\n                \"coinhive\\\\.com/lib\"\r\n            ],\r\n            \"description\": \"Coinhive is a cryptocurrency mining service.\",\r\n            \"website\": \"https://coinhive.com\"\r\n        },\r\n        \"CoinHive Captcha\": {\r\n            \"cats\": [\r\n                16,\r\n                56\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"https?://authedmine\\\\.com/(?:lib/captcha|captcha)\"\r\n            ],\r\n            \"description\": \"Coinhive Captcha provides captcha service that is simple to integrate, where your users’ devices need to solve a number of hashes, adjustable by you, in order to login or post a comment to your site.\",\r\n            \"website\": \"https://coinhive.com\"\r\n        },\r\n        \"Coinbase Commerce\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"description\": \"Coinbase Commerce is a platform that enables merchants to accept cryptocurrency payments.\",\r\n            \"website\": \"https://commerce.coinbase.com/\"\r\n        },\r\n        \"Coinhave\": {\r\n            \"cats\": [\r\n                56\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"https?://coin-have\\\\.com/c/[0-9a-za-z]{4}\\\\.js\"\r\n            ],\r\n            \"description\": \"CoinHave is a cryptocurrency mining service.\",\r\n            \"website\": \"https://coin-have.com/\"\r\n        },\r\n        \"Coinimp\": {\r\n            \"cats\": [\r\n                56\r\n            ],\r\n            \"js\": [\r\n                \"client.anonymous\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"https?://www\\\\.hashing\\\\.win/scripts/min\\\\.js\"\r\n            ],\r\n            \"description\": \"CoinImp is a cryptocurrency mining service.\",\r\n            \"website\": \"https://www.coinimp.com\"\r\n        },\r\n        \"Colbass\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"colbassrunning\"\r\n            ],\r\n            \"description\": \"Colbass is AI System that transforms text into real-human voiceovers.\",\r\n            \"website\": \"https://colbass.com\"\r\n        },\r\n        \"Colibri WP\": {\r\n            \"cats\": [\r\n                80,\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"colibri\",\r\n                \"colibridata\",\r\n                \"colibrifrontenddata\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/colibri-page-builder.+\\\\.js(?:.+ver=([\\\\d\\\\.\\\\-\\\\w]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Colibri WP is a drag-and-drop WordPress website builder.\",\r\n            \"website\": \"https://colibriwp.com\"\r\n        },\r\n        \"Colis Privé\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Colis Privé is a private parcel delivery service provider specialised in last-mile delivery.\",\r\n            \"website\": \"https://www.colisprive.fr\"\r\n        },\r\n        \"Colissimo\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Colissimo is a 'drop off' parcel delivery service.\",\r\n            \"website\": \"https://www.colissimo.entreprise.laposte.fr\"\r\n        },\r\n        \"ColorMag\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"themes/colormag.*\\\\.js(?:\\\\?ver=([0-9.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"ColorMag theme is for creating news, magazine, newspaper and other kinds of publishing sites. Compatible with Elementor.\",\r\n            \"website\": \"https://themegrill.com/themes/colormag/\"\r\n        },\r\n        \"ColorMeShop\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"colorme\"\r\n            ],\r\n            \"description\": \"ColorMeShop is an ecommerce platform from Japan.\",\r\n            \"website\": \"https://shop-pro.jp\"\r\n        },\r\n        \"Colorlib Activello\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"activelloismobile\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/activello/\"\r\n            ],\r\n            \"description\": \"Colorlib Activello is a clean, minimal multipurpose WordPress blog theme developer using the Bootstrap frontend framework making it fully responsive and mobile-friendly.\",\r\n            \"website\": \"https://colorlib.com/wp/themes/activello\"\r\n        },\r\n        \"Colorlib Illdy\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/illdy/\"\r\n            ],\r\n            \"description\": \"Colorlib Illdy is a stunning multipurpose WordPress theme built based on Bootstrap frontend framework making it fully responsive and mobile friendly.\",\r\n            \"website\": \"https://colorlib.com/wp/themes/illdy\"\r\n        },\r\n        \"Colorlib Shapely\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"shapelyadminobject\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/shapely/\"\r\n            ],\r\n            \"description\": \"Colorlib Shapely is considered as a powerful, clean and beautiful full-width free WordPress theme.\",\r\n            \"website\": \"https://colorlib.com/wp/themes/shapely\"\r\n        },\r\n        \"Colorlib Sparkling\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/sparkling/\"\r\n            ],\r\n            \"description\": \"Colorlib Sparkling is a clean, modern, flat design WordPress theme developed using Bootstrap.\",\r\n            \"website\": \"https://colorlib.com/wp/themes/sparkling\"\r\n        },\r\n        \"Colorlib Travelify\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"travelify_slider_value\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/travelify/\"\r\n            ],\r\n            \"description\": \"Colorlib Travelify is a responsive, free, travel WordPress theme.\",\r\n            \"website\": \"https://colorlib.com/wp/themes/travelify\"\r\n        },\r\n        \"Combahton FlowShield\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"cookies\": {\r\n                \"flowproxy-origin\": \"\"\r\n            },\r\n            \"headers\": {\r\n                \"server\": \"antiddos/flowproxy\",\r\n                \"x-flowproxy-author\": \"\"\r\n            },\r\n            \"description\": \"Combahton FlowShield is a network security solution designed to protect networks and servers from various cyber threats, including DDoS attacks, malware, and other types of malicious traffic.\",\r\n            \"website\": \"https://combahton.net\"\r\n        },\r\n        \"Combeenation\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"description\": \"Combeenation is a powerful cloud-based configurator platform.\",\r\n            \"website\": \"https://www.combeenation.com\"\r\n        },\r\n        \"Combodo iTop\": {\r\n            \"cats\": [\r\n                13,\r\n                19\r\n            ],\r\n            \"description\": \"Combodo iTop is an open-source IT service management (ITSM) and IT operations management (ITOM) platform developed by Combodo, a software company based in France.\",\r\n            \"website\": \"https://www.combodo.com/itop-193\"\r\n        },\r\n        \"Comeet\": {\r\n            \"cats\": [\r\n                5,\r\n                101\r\n            ],\r\n            \"js\": [\r\n                \"comeet\",\r\n                \"comeetinit\"\r\n            ],\r\n            \"description\": \"Comeet is an Collaborative Recruiting, and Applicant Tracking System.\",\r\n            \"website\": \"https://www.comeet.com\"\r\n        },\r\n        \"Comm100\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"comm100_chatbutton\",\r\n                \"comm100_livechat_open_link\",\r\n                \"comm100api\"\r\n            ],\r\n            \"description\": \"Comm100 is a provider of customer service and communication products.\",\r\n            \"website\": \"https://www.comm100.com\"\r\n        },\r\n        \"Commanders Act TagCommander\": {\r\n            \"cats\": [\r\n                42\r\n            ],\r\n            \"js\": [\r\n                \"tc_vars\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.tagcommander\\\\.com\"\r\n            ],\r\n            \"description\": \"Commanders Act TagCommander is a European company providing a tag management product designed to handle website tags.\",\r\n            \"website\": \"https://www.commandersact.com/en/solutions/tagcommander/\"\r\n        },\r\n        \"Commanders Act TrustCommander\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.trustcommander\\\\.net/privacy/.+_v([\\\\d]+)_([\\\\d]+)\\\\.js\\\\;version:\\\\1.\\\\2\"\r\n            ],\r\n            \"description\": \"Commanders Act TrustCommander is a consent management platform (CMP) which allows you to comply with the general data protection regulation (GDPR) regulation in terms of collecting consent.\",\r\n            \"website\": \"https://www.commandersact.com/en/solutions/trustcommander/\"\r\n        },\r\n        \"Commerce Server\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"headers\": {\r\n                \"commerce-server-software\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"website\": \"https://commerceserver.net\",\r\n            \"cpe\": \"cpe:2.3:a:microsoft:commerce_server:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Commerce.js\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"commercejsspace\"\r\n            ],\r\n            \"headers\": {\r\n                \"chec-version\": \".*\",\r\n                \"x-powered-by\": \"commerce.js\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.chec\\\\.io/v(\\\\d+)/commerce\\\\.js\\\\;version:\\\\1\",\r\n                \"chec/commerce\\\\.js\"\r\n            ],\r\n            \"description\": \"Commerce.js is an API-first ecommerce platform for developers and businesses.\",\r\n            \"website\": \"https://www.commercejs.com\"\r\n        },\r\n        \"Commerce7\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.commerce7\\\\.com\"\r\n            ],\r\n            \"description\": \"Commerce7 is an ecommerce platform for wineries.\",\r\n            \"website\": \"https://commerce7.com\"\r\n        },\r\n        \"Commercelayer\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"description\": \"Commercelayer is a headless ecommerce platform that permits businesses to create customisable and scalable online shopping experiences via an API-first architecture that allows developers to use any programming language or framework for building ecommerce sites and applications.\",\r\n            \"website\": \"https://commercelayer.io\"\r\n        },\r\n        \"Community Funded\": {\r\n            \"cats\": [\r\n                111\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//give\\\\.communityfunded\\\\.com/\"\r\n            ],\r\n            \"description\": \"Community Funded is a digital fundraising and engagement platform.\",\r\n            \"website\": \"https://www.communityfunded.com\"\r\n        },\r\n        \"Complianz\": {\r\n            \"cats\": [\r\n                74,\r\n                67,\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"complianz.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"wp-content/plugins/complianz-gdpr-premium\"\r\n            ],\r\n            \"description\": \"Complianz is a GDPR/CCPA Cookie Consent plugin that supports GDPR, DSGVO, CCPA and PIPEDA with a conditional Cookie Notice and customized Cookie Policy based on the results of the built-in Cookie Scan.\",\r\n            \"website\": \"https://complianz.io\"\r\n        },\r\n        \"Concrete CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"concrete5\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"ccm_image_path\",\r\n                \"concrete\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/concrete/js/\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^concrete5(?: - ([\\\\d.]+)$)?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://www.concretecms.com/\",\r\n            \"cpe\": \"cpe:2.3:a:concrete5:concrete5:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Conekta\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.conekta\\\\.\\\\w+/js/(?:v([\\\\d.]+)|)\\\\;version:\\\\1\",\r\n                \"conektaapi/v([\\\\d.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Conekta is a Mexican payment platform.\",\r\n            \"website\": \"https://conekta.com\"\r\n        },\r\n        \"Confer With\": {\r\n            \"cats\": [\r\n                103\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.conferwith\\\\.io/\"\r\n            ],\r\n            \"description\": \"Confer With triggers live streaming video calls between shoppers and instore experts from a website, or outside a store.\",\r\n            \"website\": \"https://conferwith.io\"\r\n        },\r\n        \"Confiant\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"js\": [\r\n                \"confiant\"\r\n            ],\r\n            \"description\": \"Confiant is a cybersecurity company specialising in ad security and ad quality assurance for digital publishers, programmatic platforms, and advertisers.\",\r\n            \"website\": \"https://www.confiant.com\"\r\n        },\r\n        \"Congressus\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"_gat_congressus_analytics\": \"\",\r\n                \"congressus_session\": \"\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^congressus\\\\s-\\\\s.+$\"\r\n                ]\r\n            },\r\n            \"description\": \"Congressus is a Dutch-language online application for member administration, financial management, communication and a linked website with webshop.\",\r\n            \"website\": \"https://congressus.nl\"\r\n        },\r\n        \"Conjured\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"app\\\\.conjured\\\\.co/\"\r\n            ],\r\n            \"description\": \"Conjured provides Shopify brands with Shopify apps and custom development.\",\r\n            \"website\": \"https://conjured.co\"\r\n        },\r\n        \"Connectif\": {\r\n            \"cats\": [\r\n                76,\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"connectif.version\",\r\n                \"connectifinfo.store\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.connectif\\\\.cloud/\"\r\n            ],\r\n            \"description\": \"Connectif is a marketing automation and personalisation data-first action platform, powered by AI.\",\r\n            \"website\": \"https://connectif.ai\"\r\n        },\r\n        \"Constant Contact\": {\r\n            \"cats\": [\r\n                32,\r\n                75\r\n            ],\r\n            \"js\": [\r\n                \"_ctct_m\",\r\n                \"ctctonloadcallback\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.ctctcdn\\\\.com/\"\r\n            ],\r\n            \"description\": \"Constant Contact is a marketing automation and email marketing solution.\",\r\n            \"website\": \"https://www.constantcontact.com\"\r\n        },\r\n        \"Contabo\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"description\": \"Contabo is a German hosting provider, previously known by the name Giga-International.\",\r\n            \"website\": \"https://contabo.com\"\r\n        },\r\n        \"Contact Form 7\": {\r\n            \"cats\": [\r\n                87,\r\n                110\r\n            ],\r\n            \"js\": [\r\n                \"wpcf7\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/contact-form-7/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Contact Form 7 is an WordPress plugin which can manage multiple contact forms. The form supports Ajax-powered submitting, CAPTCHA, Akismet spam filtering.\",\r\n            \"website\": \"https://contactform7.com\"\r\n        },\r\n        \"Container Media Group\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.containermedia\\\\.net/\"\r\n            ],\r\n            \"description\": \"Container Media Group offers technical solutions for agencies and brands to plan, execute, optimise, and report on advertising campaigns. They specialise in creating engaging custom creatives and utilise advanced tracking pixels to monitor user advertising activity across media channels.\",\r\n            \"website\": \"https://containermedia.net\"\r\n        },\r\n        \"Contao\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^contao open source cms$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Contao is an open source CMS that allows you to create websites and scalable web applications.\",\r\n            \"website\": \"https://contao.org\",\r\n            \"cpe\": \"cpe:2.3:a:contao:contao_cms:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Contenido\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"contenido ([\\\\d.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://contenido.org/en\",\r\n            \"cpe\": \"cpe:2.3:a:contenido:contendio:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Contensis\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"contensis cms version ([\\\\d.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"CFML\",\r\n                \"Java\"\r\n            ],\r\n            \"website\": \"https://zengenti.com/en-gb/products/contensis\"\r\n        },\r\n        \"ContentBox\": {\r\n            \"cats\": [\r\n                1,\r\n                11\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"contentbox powered by coldbox\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Adobe ColdFusion\"\r\n            ],\r\n            \"website\": \"https://www.gocontentbox.org\"\r\n        },\r\n        \"ContentStudio\": {\r\n            \"cats\": [\r\n                96\r\n            ],\r\n            \"description\": \"ContentStudio is an integrated cloud-based social media management and content marketing solution.\",\r\n            \"website\": \"https://contentstudio.io\"\r\n        },\r\n        \"Contentful\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"x-contentful-request-id\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003c[^\\u003e]+(?:assets|downloads|images|videos)\\\\.(?:ct?fassets\\\\.net|contentful\\\\.com)\"\r\n            ],\r\n            \"description\": \"Contentful is an API-first content management platform to create, manage and publish content on any digital channel.\",\r\n            \"website\": \"https://www.contentful.com\"\r\n        },\r\n        \"Contently\": {\r\n            \"cats\": [\r\n                96\r\n            ],\r\n            \"js\": [\r\n                \"_contently.siteid\"\r\n            ],\r\n            \"description\": \"Contently is a SaaS content marketing platform from the company of the same name headquartered in New York.\",\r\n            \"website\": \"https://contently.com\"\r\n        },\r\n        \"Contentsquare\": {\r\n            \"cats\": [\r\n                10,\r\n                74\r\n            ],\r\n            \"js\": [\r\n                \"cs_conf.trackerdomain\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.contentsquare\\\\.net/\"\r\n            ],\r\n            \"description\": \"Contentsquare is an enterprise-level UX optimisation platform.\",\r\n            \"website\": \"https://contentsquare.com\"\r\n        },\r\n        \"Contentstack\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"description\": \"Contentstack is a headless CMS software designed to help businesses deliver personalised content experiences to audiences via multiple channels.\",\r\n            \"website\": \"https://www.contentstack.com\"\r\n        },\r\n        \"Contlo\": {\r\n            \"cats\": [\r\n                90,\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"contlo_env\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.contlo\\\\.com/\"\r\n            ],\r\n            \"description\": \"Contlo is an AI powered marketing software.\",\r\n            \"website\": \"https://www.contlo.com\"\r\n        },\r\n        \"Conversant Consent Tool\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"js\": [\r\n                \"conversant\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.conversant\\\\.mgr\\\\.consensu\\\\.org/\"\r\n            ],\r\n            \"description\": \"Conversant Consent Tool is a free tool to gain GDPR and ePD compliant consent for digital advertising.\",\r\n            \"website\": \"https://www.conversantmedia.eu/consent-tool\"\r\n        },\r\n        \"Conversio\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"conversio.settings\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.conversio\\\\.com/\"\r\n            ],\r\n            \"description\": \"Conversio is an optimisation and analytics agency.\",\r\n            \"website\": \"https://conversio.com\"\r\n        },\r\n        \"Conversio App\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.conversio\\\\.com/.+\\\\.myshopify\\\\.com\"\r\n            ],\r\n            \"implies\": [\r\n                \"Conversio\"\r\n            ],\r\n            \"description\": \"Conversio App is an optimisation and analytics app for Shopify stores.\",\r\n            \"website\": \"https://apps.shopify.com/conversio\"\r\n        },\r\n        \"Convert\": {\r\n            \"cats\": [\r\n                74\r\n            ],\r\n            \"js\": [\r\n                \"convert\",\r\n                \"convert_temp\",\r\n                \"convertdata\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.convertexperiments\\\\.com/js\"\r\n            ],\r\n            \"description\": \"Convert Experiences is an enterprise A/B testing and personalisation solution for conversion optimisation and data-driven decisions in high-traffic websites.\",\r\n            \"website\": \"https://www.convert.com\"\r\n        },\r\n        \"ConvertFlow\": {\r\n            \"cats\": [\r\n                10,\r\n                74\r\n            ],\r\n            \"js\": [\r\n                \"convertflow\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:app|js)\\\\.convertflow\\\\.co\"\r\n            ],\r\n            \"description\": \"ConvertFlow is the all-in-one conversion marketing platform.\",\r\n            \"website\": \"https://www.convertflow.com\"\r\n        },\r\n        \"ConvertKit\": {\r\n            \"cats\": [\r\n                32,\r\n                75\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.convertkit\\\\.com\"\r\n            ],\r\n            \"description\": \"ConvertKit is an email marketing tool built for content creators.\",\r\n            \"website\": \"https://convertkit.com\"\r\n        },\r\n        \"Convertcart\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.convertcart\\\\.com\"\r\n            ],\r\n            \"description\": \"ConvertCart helps online businesses deliver outstanding experiences to customers throughout their journey.\",\r\n            \"website\": \"https://www.convertcart.com/\"\r\n        },\r\n        \"Convertr\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"author\": [\r\n                    \"^convertr commerce$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Amazon Web Services\",\r\n                \"MySQL\",\r\n                \"Nuxt.js\",\r\n                \"PHP\",\r\n                \"Vue.js\"\r\n            ],\r\n            \"description\": \"Convertr is a Brazilian ecommerce platform, fashion specialist.\",\r\n            \"website\": \"https://convertr.com.br\"\r\n        },\r\n        \"Convertri\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"convertri_constants\",\r\n                \"convertrianalytics\",\r\n                \"convertriparameters\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.convertri\\\\.com/\"\r\n            ],\r\n            \"description\": \"Convertri is a sales funnel building solution.\",\r\n            \"website\": \"https://www.convertri.com\"\r\n        },\r\n        \"ConveyThis\": {\r\n            \"cats\": [\r\n                89\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.conveythis\\\\.com\"\r\n            ],\r\n            \"description\": \"ConveyThis is a website translation service.\",\r\n            \"website\": \"https://www.conveythis.com/\"\r\n        },\r\n        \"Conviva\": {\r\n            \"cats\": [\r\n                14,\r\n                103\r\n            ],\r\n            \"js\": [\r\n                \"conviva\",\r\n                \"conviva.client\",\r\n                \"conviva.client.version\"\r\n            ],\r\n            \"description\": \"Conviva is a census, continuous measurement and engagement platform for streaming media.\",\r\n            \"website\": \"https://www.conviva.com\"\r\n        },\r\n        \"Cookie Information\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"js\": [\r\n                \"cookieinformation.config.cdnurl\"\r\n            ],\r\n            \"description\": \"Cookie Information is a privacy tech company that develops software that helps making company websites and mobile apps GDPR and ePrivacy compliant.\",\r\n            \"website\": \"https://cookieinformation.com\"\r\n        },\r\n        \"Cookie Information plugin\": {\r\n            \"cats\": [\r\n                87,\r\n                67\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/wp-gdpr-compliance/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Cookie Information\"\r\n            ],\r\n            \"description\": \"Cookie Information plugin helps your website stay compliant with GDPR using a free cookie pop-up, consent log, and more.\",\r\n            \"website\": \"https://wordpress.org/plugins/wp-gdpr-compliance\"\r\n        },\r\n        \"Cookie Notice\": {\r\n            \"cats\": [\r\n                67,\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/cookie-notice/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Cookie Notice provides a simple, customizable website banner that can be used to help your website comply with certain cookie consent requirements under the EU GDPR cookie law and CCPA regulations and includes seamless integration with Cookie Compliance to help your site comply with the latest updates to existing consent laws.\",\r\n            \"website\": \"https://wordpress.org/plugins/cookie-notice\"\r\n        },\r\n        \"Cookie Script\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.cookie-script\\\\.com/\"\r\n            ],\r\n            \"description\": \"Cookie-Script automatically scans, categorizes and adds description to all cookies found on your website.\",\r\n            \"website\": \"https://cookie-script.com\"\r\n        },\r\n        \"CookieFirst\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"js\": [\r\n                \"cookiefirst_show_settings\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"consent\\\\.cookiefirst\\\\.com/\"\r\n            ],\r\n            \"description\": \"CookieFirst is an GDPR and CCPA compliant consent management platform.\",\r\n            \"website\": \"https://cookiefirst.com\"\r\n        },\r\n        \"CookieHub\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cookiehub\\\\.net/.*\\\\.js\"\r\n            ],\r\n            \"website\": \"https://www.cookiehub.com\"\r\n        },\r\n        \"CookieYes\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"js\": [\r\n                \"cookieyes\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/cookie-law-info/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\",\r\n                \"app\\\\.cookieyes\\\\.com/client_data/\",\r\n                \"cdn-cookieyes\\\\.com/client_data/\"\r\n            ],\r\n            \"website\": \"https://www.cookieyes.com/\"\r\n        },\r\n        \"Cookiebot\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"js\": [\r\n                \"cookiebot.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"consent\\\\.cookiebot\\\\.com\"\r\n            ],\r\n            \"description\": \"Cookiebot is a cloud-driven solution that automatically controls cookies and trackers, enabling full GDPR/ePrivacy and CCPA compliance for websites.\",\r\n            \"website\": \"https://www.cookiebot.com\"\r\n        },\r\n        \"Cooladata\": {\r\n            \"cats\": [\r\n                97\r\n            ],\r\n            \"js\": [\r\n                \"cooladata\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.cooladata\\\\.com/\"\r\n            ],\r\n            \"description\": \"Cooladata is a data warehouse and behavioral analytics platform designed for gaming, elearning, ecommerce, SaaS, and media companies.\",\r\n            \"website\": \"https://www.cooladata.com\"\r\n        },\r\n        \"Coppermine\": {\r\n            \"cats\": [\r\n                7\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!--coppermine photo gallery ([\\\\d.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Coppermine is an open-source image gallery application.\",\r\n            \"website\": \"https://coppermine-gallery.net\",\r\n            \"cpe\": \"cpe:2.3:a:coppermine-gallery:coppermine_photo_gallery:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"CopyPoison\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"copypoison\\\\.com/cp\\\\.js\"\r\n            ],\r\n            \"description\": \"Copypoison is a plagarism protection tool that protects content by replacing text with symbols that are visually similar.\",\r\n            \"website\": \"https://copypoison.com/\"\r\n        },\r\n        \"CoreMedia Content Cloud\": {\r\n            \"cats\": [\r\n                1,\r\n                95\r\n            ],\r\n            \"meta\": {\r\n                \"coremedia_content_id\": [],\r\n                \"generator\": [\r\n                    \"^coremedia c(?:ontent cloud|ms)$\"\r\n                ]\r\n            },\r\n            \"description\": \"CoreMedia Content Cloud is an agile content management and digital asset management platform.\",\r\n            \"website\": \"https://www.coremedia.com\"\r\n        },\r\n        \"CoreUI\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"js\": [\r\n                \"coreui\"\r\n            ],\r\n            \"scripts\": [\r\n                \"webpackjsonp@coreui/coreui\"\r\n            ],\r\n            \"description\": \"CoreUI provides cloud hosting, web and mobile design, animations, wireframes, and UX testing services.\",\r\n            \"website\": \"https://coreui.io\"\r\n        },\r\n        \"Corebine\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"corebine\"\r\n            ],\r\n            \"description\": \"Corebine is a content management system designed for Sports\",\r\n            \"website\": \"https://corebine.com\"\r\n        },\r\n        \"Correos\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Correos is a state-owned company responsible for providing postal service in Spain.\",\r\n            \"website\": \"https://www.correos.es\"\r\n        },\r\n        \"Correos Ecommerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"comandia\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.mycorreosecommerce\\\\.com/\"\r\n            ],\r\n            \"description\": \"Correos Ecommerce is an ecommerce platfrom from Spain.\",\r\n            \"website\": \"https://www.correosecommerce.com\"\r\n        },\r\n        \"Cosmic\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"description\": \"Cosmic is a cloud-based CMS that provides developers with an API and web interface for content management, enabling the creation of custom content types, relationship definitions, and webhooks for actions based on content changes.\",\r\n            \"website\": \"https://www.cosmicjs.com\"\r\n        },\r\n        \"Cosmoshop\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cosmoshop_functions\\\\.js\"\r\n            ],\r\n            \"website\": \"https://cosmoshop.de\",\r\n            \"cpe\": \"cpe:2.3:a:cosmoshop:cosmoshop:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Cotonti\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"cotonti\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://www.cotonti.com\",\r\n            \"cpe\": \"cpe:2.3:a:cotonti:cotonti_siena:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"CouchDB\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"couchdb/([\\\\d.]+)\\\\;version:\\\\1\"\r\n            },\r\n            \"website\": \"https://couchdb.apache.org\",\r\n            \"cpe\": \"cpe:2.3:a:apache:couchdb:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Countly\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"countly\"\r\n            ],\r\n            \"website\": \"https://count.ly\"\r\n        },\r\n        \"Coureon\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Coureon is a digital logistics carrier for international shipping.\",\r\n            \"website\": \"https://www.coureon.com\"\r\n        },\r\n        \"Coveo\": {\r\n            \"cats\": [\r\n                29,\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"coveo\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"static\\\\.cloud\\\\.coveo\\\\.com\"\r\n            ],\r\n            \"description\": \"Coveo designs enterprise search and predictive insights platforms for businesses.\",\r\n            \"website\": \"https://www.coveo.com/\"\r\n        },\r\n        \"CoverManager\": {\r\n            \"cats\": [\r\n                93\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.covermanager\\\\.com/\"\r\n            ],\r\n            \"description\": \"CoverManager is a restaurant table booking widget.\",\r\n            \"website\": \"https://www.covermanager.com\"\r\n        },\r\n        \"Covet.pics\": {\r\n            \"cats\": [\r\n                96,\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.covet\\\\.pics/\"\r\n            ],\r\n            \"description\": \"Covet.pics is a customizable Shopify app for Instagram and Lookbook shoppable galleries.\",\r\n            \"website\": \"https://covet.pics\"\r\n        },\r\n        \"Cowboy\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^cowboy$\"\r\n            },\r\n            \"implies\": [\r\n                \"Erlang\"\r\n            ],\r\n            \"description\": \"Cowboy is a small, fast, modular HTTP server written in Erlang.\",\r\n            \"website\": \"https://github.com/ninenines/cowboy\"\r\n        },\r\n        \"Cozy AntiTheft\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"cozyecoadnsua\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdncozyantitheft\\\\.addons\\\\.business/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Cozy AntiTheft helps you to protect your store content, images and texts from being stolen with a few simple clicks.\",\r\n            \"website\": \"https://apps.shopify.com/cozy-antitheft-for-images-and-more\"\r\n        },\r\n        \"CppCMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^cppcms/([\\\\d.]+)$\\\\;version:\\\\1\"\r\n            },\r\n            \"website\": \"https://cppcms.com\"\r\n        },\r\n        \"Craft CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"craftsessionid\": \"\"\r\n            },\r\n            \"headers\": {\r\n                \"x-powered-by\": \"\\\\bcraft cms\\\\b\"\r\n            },\r\n            \"implies\": [\r\n                \"Yii\"\r\n            ],\r\n            \"description\": \"Craft CMS is a content management system for building bespoke websites.\",\r\n            \"website\": \"https://craftcms.com/\",\r\n            \"cpe\": \"cpe:2.3:a:craftcms:craft_cms:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Craft Commerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"\\\\bcraft commerce\\\\b\"\r\n            },\r\n            \"implies\": [\r\n                \"Craft CMS\"\r\n            ],\r\n            \"website\": \"https://craftcommerce.com\"\r\n        },\r\n        \"Craftum\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^craftum cms$\"\r\n                ]\r\n            },\r\n            \"description\": \"Craftum is an Russian website builder.\",\r\n            \"website\": \"https://craftum.com\"\r\n        },\r\n        \"Cratejoy\": {\r\n            \"cats\": [\r\n                1,\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"cratejoy_muffin42\": \"\",\r\n                \"statjoy_metrics\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"statjoyserver\"\r\n            ],\r\n            \"description\": \"Cratejoy is a brand new ecommerce platform with a focus on subscription payments.\",\r\n            \"website\": \"https://www.cratejoy.com\"\r\n        },\r\n        \"Crazy Egg\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"ce2\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"script\\\\.crazyegg\\\\.com/pages/scripts/\\\\d+/\\\\d+\\\\.js\"\r\n            ],\r\n            \"website\": \"https://crazyegg.com\"\r\n        },\r\n        \"CreateJS\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"code\\\\.createjs\\\\.com/\"\r\n            ],\r\n            \"description\": \"CreateJS is a suite of modular libraries and tools which work together or independently to enable interactive content on open web technologies via HTML5.\",\r\n            \"website\": \"https://code.createjs.com\"\r\n        },\r\n        \"Creatium\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^creatium$\"\r\n                ]\r\n            },\r\n            \"description\": \"Creatium is a website builder developed in Russia that provides a user-friendly drag-and-drop interface and a variety of customisation options for creating websites without coding knowledge.\",\r\n            \"website\": \"https://creatium.io\"\r\n        },\r\n        \"Creativ.eMail\": {\r\n            \"cats\": [\r\n                87,\r\n                75\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/creative-mail-by-constant-contact/\"\r\n            ],\r\n            \"description\": \"Creativ.eMail is a email editor WordPress plugin which simplifies email marketing campaign creation and pulls your WordPress blog posts, website images and WooCommerce products right into your email content.\",\r\n            \"website\": \"https://www.creativemail.com\"\r\n        },\r\n        \"Crikle\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"crikle.contactid\",\r\n                \"crikle.openconvertwidget\"\r\n            ],\r\n            \"description\": \"Crikle is a multichannel customer engagement software.\",\r\n            \"website\": \"https://www.crikle.com\"\r\n        },\r\n        \"Crisp Live Chat\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"$__crisp_included\",\r\n                \"$crisp\",\r\n                \"crisp_website_id\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"client\\\\.crisp\\\\.chat/\"\r\n            ],\r\n            \"description\": \"Crisp Live Chat is a live chat solution with free and paid options.\",\r\n            \"website\": \"https://crisp.chat/\"\r\n        },\r\n        \"Criteo\": {\r\n            \"cats\": [\r\n                36,\r\n                77\r\n            ],\r\n            \"js\": [\r\n                \"criteo\",\r\n                \"criteo_pubtag\",\r\n                \"criteo_q\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//(?:cas\\\\.criteo\\\\.com|(?:[^/]\\\\.)?criteo\\\\.net)/\",\r\n                \"//static\\\\.criteo\\\\.net/js/ld/ld\\\\.js\"\r\n            ],\r\n            \"description\": \"Criteo provides personalised retargeting that works with Internet retailers to serve personalised online display advertisements to consumers who have previously visited the advertiser's website.\",\r\n            \"website\": \"https://criteo.com\"\r\n        },\r\n        \"Crobox\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"crobox\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.crobox\\\\.com\"\r\n            ],\r\n            \"website\": \"https://crobox.com/\"\r\n        },\r\n        \"Crocoblock JetElements\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"jetelements\"\r\n            ],\r\n            \"description\": \"Crocoblock JetElements is an addon for Elementor that adds additional customisation options to the page builder.\",\r\n            \"website\": \"https://crocoblock.com/plugins/jetelements\"\r\n        },\r\n        \"Cross Pixel\": {\r\n            \"cats\": [\r\n                77\r\n            ],\r\n            \"js\": [\r\n                \"cp_c4w1ldn2d9pmvrkn\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"tag\\\\.crsspxl\\\\.com\"\r\n            ],\r\n            \"description\": \"Cross Pixel is an advertising platform through which advertisers can leverage the marriage of partner audience synergies with the power of retargeting.\",\r\n            \"website\": \"https://crosspixel.net\"\r\n        },\r\n        \"Cross Sell\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"load\\\\.csell\\\\.co\"\r\n            ],\r\n            \"implies\": [\r\n                \"Cart Functionality\",\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Cross Sell provide recommendations solution for Shopify based sites.\",\r\n            \"website\": \"https://csell.io/\"\r\n        },\r\n        \"CrossBox\": {\r\n            \"cats\": [\r\n                30\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"cbx-ws\"\r\n            },\r\n            \"description\": \"CrossBox is a webmail client.\",\r\n            \"website\": \"https://crossbox.io\"\r\n        },\r\n        \"CrownPeak\": {\r\n            \"cats\": [\r\n                1,\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"crownpeakautocomplete\",\r\n                \"crownpeaksearch\"\r\n            ],\r\n            \"scripts\": [\r\n                \"crownpeak\\\\.net\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"js/crownpeak\\\\.\"\r\n            ],\r\n            \"description\": \"CrownPeak is a cloud-based Digital Experience Platform (DXP).\",\r\n            \"website\": \"https://www.crownpeak.com\"\r\n        },\r\n        \"Cryout Creations Bravada\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/bravada(?:-plus)?/.+frontend\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Bravada is an unparalleled fullscreen WordPress theme created by Cryout Creations.\",\r\n            \"website\": \"https://www.cryoutcreations.eu/wordpress-themes/bravada\"\r\n        },\r\n        \"Cryout Creations Fluida\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/fluida(?:-plus)?/.+frontend\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Fluida is a modern, crystal clear and squeaky clean WordPress theme by Cryout Creations.\",\r\n            \"website\": \"https://www.cryoutcreations.eu/wordpress-themes/fluida\"\r\n        },\r\n        \"Cryout Creations Mantra\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"mantra_mobilemenu_init\",\r\n                \"mantra_onload\",\r\n                \"mantra_options\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/mantra(?:-plus)?/.+frontend\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Mantra is a do-it-yourself WordPress theme, featuring a pack of over 100 customization option created by Cryout Creations.\",\r\n            \"website\": \"https://www.cryoutcreations.eu/wordpress-themes/mantra\"\r\n        },\r\n        \"Cryout Creations Parabola\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"parabola_mobilemenu_init\",\r\n                \"parabola_settings\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/parabola/.+frontend\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Parabola is an fully responsive, clean and elegant design WordPress theme created by Cryout Creations.\",\r\n            \"website\": \"https://www.cryoutcreations.eu/wordpress-themes/parabola\"\r\n        },\r\n        \"Crypto-Loot\": {\r\n            \"cats\": [\r\n                56\r\n            ],\r\n            \"js\": [\r\n                \"crlt.config.asmjs_name\",\r\n                \"cryptoloot\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/crlt\\\\.js\\\\;confidence:75\",\r\n                \"^/crypto-loot\\\\.com/lib/\",\r\n                \"^/cryptoloot\\\\.pro/\",\r\n                \"^/webmine\\\\.pro/\"\r\n            ],\r\n            \"description\": \"Crypto-Loot is a browser based web miner for the uPlexa Blockchain.\",\r\n            \"website\": \"https://crypto-loot.com/\"\r\n        },\r\n        \"Crystallize\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"__crystallizeconfig.api_url\"\r\n            ],\r\n            \"description\": \"Crystallize is an ecommerce platform that offers a headless ecommerce solution for businesses.\",\r\n            \"website\": \"https://crystallize.com\"\r\n        },\r\n        \"CubeCart\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"cubecart\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"CubeCart is a free ecommerce platform that businesses can use to build, manage, and market their online stores.\",\r\n            \"website\": \"https://www.cubecart.com\",\r\n            \"cpe\": \"cpe:2.3:a:cubecart:cubecart:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Cubyn\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Cubyn is B2B logistics company headquartered in France.\",\r\n            \"website\": \"https://www.cubyn.com\"\r\n        },\r\n        \"Cufon\": {\r\n            \"cats\": [\r\n                17\r\n            ],\r\n            \"js\": [\r\n                \"cufon\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cufon-yui\\\\.js\"\r\n            ],\r\n            \"description\": \"Cufon is a tool used to overlap real text with an image.\",\r\n            \"website\": \"https://cufon.shoqolate.com\"\r\n        },\r\n        \"Custom Fonts\": {\r\n            \"cats\": [\r\n                87,\r\n                17\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/custom-fonts/\"\r\n            ],\r\n            \"description\": \"Custom Fonts plugin helps you easily embed custom fonts files (woff2, woff, ttf, svg, eot, otf) easily in your WordPress website.\",\r\n            \"website\": \"https://github.com/brainstormforce/custom-fonts\"\r\n        },\r\n        \"Customer.io\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"assets\\\\.customer\\\\.io\"\r\n            ],\r\n            \"description\": \"Customer.io is an automated messaging platform for marketers.\",\r\n            \"website\": \"https://customer.io/\"\r\n        },\r\n        \"Customily\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"customily.sticky\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:cdn|app)\\\\.customily\\\\.com/\"\r\n            ],\r\n            \"description\": \"Customily is an online product personalisation software.\",\r\n            \"website\": \"https://www.customily.com\"\r\n        },\r\n        \"Cwicly\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/cwicly/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Gutenberg\"\r\n            ],\r\n            \"description\": \"Cwicly is an advanced professional design and block toolkit that integrates directly with the WordPress editor.\",\r\n            \"website\": \"https://cwicly.com\"\r\n        },\r\n        \"Cxense\": {\r\n            \"cats\": [\r\n                76,\r\n                86\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.cxense\\\\.com/\"\r\n            ],\r\n            \"meta\": {\r\n                \"cxenseparse:itm-meta-keywords\": [],\r\n                \"cxenseparse:pageclass\": [],\r\n                \"cxenseparse:publishtime\": [],\r\n                \"cxenseparse:url\": []\r\n            },\r\n            \"description\": \"Cxense was an AI-powered data management and intelligent personalisation platform.\",\r\n            \"website\": \"https://www.cxense.com\"\r\n        },\r\n        \"CyberChimps Responsive\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/responsive(?:pro)?/\"\r\n            ],\r\n            \"description\": \"CyberChimps Responsive is a modern, lightweight, fully customizable, fast and responsive WordPress theme.\",\r\n            \"website\": \"https://cyberchimps.com/responsive\"\r\n        },\r\n        \"Cybersource\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cybersource\\\\..+\\\\.js\"\r\n            ],\r\n            \"description\": \"Cybersource is an ecommerce credit card payment system solution.\",\r\n            \"website\": \"https://www.cybersource.com/\"\r\n        },\r\n        \"Czater\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"$czater\",\r\n                \"$czatermethods\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.czater\\\\.pl\"\r\n            ],\r\n            \"description\": \"Czater is an live chat solution with extended CRM and videochat features.\",\r\n            \"website\": \"https://www.czater.pl\"\r\n        },\r\n        \"D3\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"d3.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/d3(?:\\\\. v\\\\d+)?(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"description\": \"D3.js is a JavaScript library for producing dynamic, interactive data visualisations in web browsers.\",\r\n            \"website\": \"https://d3js.org\",\r\n            \"cpe\": \"cpe:2.3:a:d3.js_project:d3.js:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"DDoS-Guard\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^ddos-guard$\"\r\n            },\r\n            \"description\": \"DDoS-Guard is a Russian Internet infrastructure company which provides DDoS protection, content delivery network services, and web hosting services.\",\r\n            \"website\": \"https://ddos-guard.net\"\r\n        },\r\n        \"DERAK.CLOUD\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"cookies\": {\r\n                \"__derak_auth\": \"\",\r\n                \"__derak_user\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"derakcloud.init\"\r\n            ],\r\n            \"headers\": {\r\n                \"derak-umbrage\": \"\",\r\n                \"server\": \"^derak\\\\.cloud$\"\r\n            },\r\n            \"website\": \"https://derak.cloud\"\r\n        },\r\n        \"DHL\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"DHL is an international courier, package delivery and express mail service, which is a division of the German logistics firm Deutsche Post.\",\r\n            \"website\": \"https://www.dhl.com\"\r\n        },\r\n        \"DHTMLX\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"dhtmldraganddropobject\",\r\n                \"dhtmlxtreeitemobject\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/dhtmlxcommon\\\\.js\"\r\n            ],\r\n            \"description\": \"DHTMLX specialises in building JavaScript UI libraries for project management, event planning, big data visualisation, and reporting.\",\r\n            \"website\": \"https://dhtmlx.com\"\r\n        },\r\n        \"DM Polopoly\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"description\": \"DM Polopoly is a web content management solution focused on enhancing the user experience built by Atex.\",\r\n            \"website\": \"https://www.atex.com/products/dm-polopoly\"\r\n        },\r\n        \"DNN\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"dotnetnukeanonymous\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"dnn.apiversion\",\r\n                \"dotnetnuke\"\r\n            ],\r\n            \"headers\": {\r\n                \"cookie\": \"dnn_ismobile=\",\r\n                \"dnnoutputcache\": \"\",\r\n                \"x-compressed-by\": \"dotnetnuke\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003c!-- by dotnetnuke corporation\",\r\n                \"\\u003c!-- dnn platform\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/js/dnn\\\\.js\",\r\n                \"/js/dnncore\\\\.js\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"dotnetnuke\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"website\": \"https://www.dnnsoftware.com/\",\r\n            \"cpe\": \"cpe:2.3:a:dnnsoftware:dotnetnuke:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"DPD\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"DPD is an international parcel delivery service for sorter compatible parcels.\",\r\n            \"website\": \"https://www.dpd.com\"\r\n        },\r\n        \"DPlayer\": {\r\n            \"cats\": [\r\n                14\r\n            ],\r\n            \"js\": [\r\n                \"dplayer\",\r\n                \"dplayer.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/dplayer\\\\.js\"\r\n            ],\r\n            \"description\": \"DPlayer is an HTML 5 video player that supports pop-up.\",\r\n            \"website\": \"https://dplayer.js.org\"\r\n        },\r\n        \"DTScout\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.dtscout\\\\.com/\"\r\n            ],\r\n            \"description\": \"DTScout is a marketing data intelligence software.\",\r\n            \"website\": \"https://www.dtscout.com\"\r\n        },\r\n        \"DX\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"DX (also known as DX Freight) is a British mail, courier and logistics company.\",\r\n            \"website\": \"https://www.dxdelivery.com\"\r\n        },\r\n        \"DX1\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"js\": [\r\n                \"dx1.dnn\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.dx1app\\\\.com/\"\r\n            ],\r\n            \"description\": \"DX1 is an entirely cloud-based dealership management system for the motorcycle and powersports industry. Offering DMS, website, CRM and marketing tools.\",\r\n            \"website\": \"https://www.dx1app.com\"\r\n        },\r\n        \"Dachser\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Dachser is a German freight company.\",\r\n            \"website\": \"https://www.dachser.com\"\r\n        },\r\n        \"Daily Deals\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"ddaddtocheckout\",\r\n                \"ddaddtoorder\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"assets\\\\.dailydeals\\\\.ai/\"\r\n            ],\r\n            \"description\": \"Daily Deals is a flash sale, limited-time discounts, countdown timers, and sales analytics solution.\",\r\n            \"website\": \"https://dailydeals.ai\"\r\n        },\r\n        \"DailyKarma\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"dk_widget\",\r\n                \"dkwidgetinit\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"assets\\\\.dailykarma\\\\.io/\"\r\n            ],\r\n            \"description\": \"DailyKarma is a turnkey cause marketing solutions for ecommerce merchants.\",\r\n            \"website\": \"https://www.dailykarma.com\"\r\n        },\r\n        \"Dailymotion\": {\r\n            \"cats\": [\r\n                14\r\n            ],\r\n            \"meta\": {\r\n                \"name\": [\r\n                    \"dailymotion-domain-verification\"\r\n                ]\r\n            },\r\n            \"description\": \"Dailymotion is a French video-sharing technology platform.\",\r\n            \"website\": \"https://www.dailymotion.com\"\r\n        },\r\n        \"Dancer\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"perl dancer ([\\\\d.]+)\\\\;version:\\\\1\",\r\n                \"x-powered-by\": \"perl dancer ([\\\\d.]+)\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Perl\"\r\n            ],\r\n            \"description\": \"Mono.net delivers the a Software-as-a-Service (SaaS) platform to build and sell websites and other digital products.\",\r\n            \"website\": \"https://perldancer.org\"\r\n        },\r\n        \"Danneo CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"cms danneo ([\\\\d.]+)\\\\;version:\\\\1\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"danneo cms ([\\\\d.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Apache HTTP Server\",\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://danneo.com\"\r\n        },\r\n        \"Daphne\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"daphne\"\r\n            },\r\n            \"implies\": [\r\n                \"Python\",\r\n                \"TwistedWeb\",\r\n                \"Zope\"\r\n            ],\r\n            \"website\": \"https://github.com/django/daphne\"\r\n        },\r\n        \"Darkmode.js\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"darkmode\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"darkmode-js@([\\\\d\\\\.]+)/lib/darkmode-js\\\\.min\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Darkmode.js is a JavaScript library that enables an HTML element to switch between CSS themes.\",\r\n            \"website\": \"https://github.com/sandoche/Darkmode.js\"\r\n        },\r\n        \"Dart\": {\r\n            \"cats\": [\r\n                27\r\n            ],\r\n            \"js\": [\r\n                \"$__dart_deferred_initializers__\",\r\n                \"___dart__$dart_dartobject_zxyxx_0_\",\r\n                \"___dart_dispatch_record_zxyxx_0_\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/(?:\\\\.)?(?:dart)(?:\\\\.js)?/\"\r\n            ],\r\n            \"description\": \"Dart is an open-source, general-purpose, object-oriented programming language developed by Google.\",\r\n            \"website\": \"https://dart.dev\"\r\n        },\r\n        \"Darwin\": {\r\n            \"cats\": [\r\n                28\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"darwin\",\r\n                \"x-powered-by\": \"darwin\"\r\n            },\r\n            \"description\": \"Darwin is the open-source operating system from Apple that forms the basis for macOS.\",\r\n            \"website\": \"https://opensource.apple.com\"\r\n        },\r\n        \"DataDome\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"cookies\": {\r\n                \"datadome\": \"\",\r\n                \"datadome-_zldp\": \"\",\r\n                \"datadome-_zldt\": \"\"\r\n            },\r\n            \"headers\": {\r\n                \"server\": \"^datadome$\",\r\n                \"x-datadome\": \"\",\r\n                \"x-datadome-cid\": \"\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"^https://ct\\\\.datadome\\\\.co/[a-z]\\\\.js$\"\r\n            ],\r\n            \"description\": \"DataDome is a cybersecurity platform that specialises in bot protection and mitigation, offering advanced solutions to safeguard websites and mobile applications against malicious bot traffic, credential stuffing, scraping, and other automated threats.\",\r\n            \"website\": \"https://datadome.co\"\r\n        },\r\n        \"DataLife Engine\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"dle_root\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"datalife engine\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Apache HTTP Server\",\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://dle-news.ru\",\r\n            \"cpe\": \"cpe:2.3:a:dleviet:datalife_engine:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"DataMilk\": {\r\n            \"cats\": [\r\n                10,\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"datamilkmagicaiexecuted\"\r\n            ],\r\n            \"description\": \"DataMilk is an AI tool which autonomously optimises customer UI for ecommerce customers in order to increase conversions.\",\r\n            \"website\": \"https://www.datamilk.ai\"\r\n        },\r\n        \"DataTables\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"$.fn.datatable.version\",\r\n                \"jquery.fn.datatable.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"datatables.*\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"DataTables is a plug-in for the jQuery Javascript library adding advanced features like pagination, instant search, themes, and more to any HTML table.\",\r\n            \"website\": \"https://datatables.net\",\r\n            \"cpe\": \"cpe:2.3:a:datatables:datatables.net:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Datadog\": {\r\n            \"cats\": [\r\n                78,\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"dd_logs\",\r\n                \"dd_rum\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"www\\\\.datadoghq-browser-agent\\\\.com\"\r\n            ],\r\n            \"description\": \"Datadog is a SaaS-based monitoring and analytics platform for large-scale applications and infrastructure.\",\r\n            \"website\": \"https://www.datadoghq.com\"\r\n        },\r\n        \"Datatrics\": {\r\n            \"cats\": [\r\n                97\r\n            ],\r\n            \"js\": [\r\n                \"datatricsclick\",\r\n                \"datatricsevents\"\r\n            ],\r\n            \"description\": \"Datatrics is a data-driven marketing platform that provides businesses with advanced tools and analytics to optimise customer experiences, personalise marketing campaigns, and drive engagement through data-driven insights and automation.\",\r\n            \"website\": \"https://datatrics.com\"\r\n        },\r\n        \"DatoCMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.datocms-assets\\\\.com\"\r\n            },\r\n            \"description\": \"DatoCMS is a cloud-based headless Content as a service (CaaS) platform created to work with static websites, mobile apps and server-side applications of any kind.\",\r\n            \"website\": \"https://www.datocms.com\"\r\n        },\r\n        \"Day.js\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"dayjs\"\r\n            ],\r\n            \"website\": \"https://github.com/iamkun/dayjs\"\r\n        },\r\n        \"Dealer Spike\": {\r\n            \"cats\": [\r\n                36,\r\n                32\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.dealerspike\\\\.com\"\r\n            ],\r\n            \"description\": \"Dealer Spike is a digital marketing and advertising company focused that helps dealers grow their business.\",\r\n            \"website\": \"https://www.dealerspike.com\"\r\n        },\r\n        \"Debian\": {\r\n            \"cats\": [\r\n                28\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"debian\",\r\n                \"x-powered-by\": \"(?:debian|dotdeb|(potato|woody|sarge|etch|lenny|squeeze|wheezy|jessie|stretch|buster|sid))\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"Debian is a Linux software which is a free open-source software.\",\r\n            \"website\": \"https://debian.org\",\r\n            \"cpe\": \"cpe:2.3:o:debian:debian_linux:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Decibel\": {\r\n            \"cats\": [\r\n                10,\r\n                74\r\n            ],\r\n            \"js\": [\r\n                \"decibelinsight\",\r\n                \"decibelinsightlayer\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.decibelinsight\\\\.net\"\r\n            ],\r\n            \"description\": \"Decibel is a behavioral analysis solution that helps users gain actionable insights about their digital audience.\",\r\n            \"website\": \"https://decibel.com\"\r\n        },\r\n        \"DedeCMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"dedecontainer\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"dedeajax\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://dedecms.com\",\r\n            \"cpe\": \"cpe:2.3:a:dedecms:dedecms:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Delacon\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"dela_247_call\",\r\n                \"delaconphonenums\"\r\n            ],\r\n            \"description\": \"Delacon provides Australian businesses with Call Tracking, Call Management and Speech Analytics solutions.\",\r\n            \"website\": \"https://www.delacon.com.au\"\r\n        },\r\n        \"Delivengo\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Delivengo is an international shipping service powered by La Poste.\",\r\n            \"website\": \"https://mydelivengo.laposte.fr/\"\r\n        },\r\n        \"Deliverr\": {\r\n            \"cats\": [\r\n                107\r\n            ],\r\n            \"js\": [\r\n                \"deliverrscript\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"fast-tags\\\\.deliverr\\\\.com\"\r\n            ],\r\n            \"implies\": [\r\n                \"Cart Functionality\"\r\n            ],\r\n            \"description\": \"Deliverr is a fulfilment service that facilitates shipping services for ecommerce businesses.\",\r\n            \"website\": \"https://deliverr.com\"\r\n        },\r\n        \"Demandbase\": {\r\n            \"cats\": [\r\n                10,\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"demandbase\",\r\n                \"demandbase.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"tag.demandbase.com\"\r\n            ],\r\n            \"description\": \"Demandbase is a targeting and personalization platform for business-to-business companies.\",\r\n            \"website\": \"https://www.demandbase.com\"\r\n        },\r\n        \"Deno\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"description\": \"A modern runtime for JavaScript and TypeScript.\",\r\n            \"website\": \"https://deno.land\"\r\n        },\r\n        \"Deno Deploy\": {\r\n            \"cats\": [\r\n                62\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^deno/*\"\r\n            },\r\n            \"implies\": [\r\n                \"Deno\"\r\n            ],\r\n            \"description\": \"Deno Deploy is a distributed system that runs JavaScript, TypeScript, and WebAssembly at the edge, worldwide.\",\r\n            \"website\": \"https://deno.land/\"\r\n        },\r\n        \"Depict\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"description\": \"Depict is an ecommerce personalisation solution for fashion.\",\r\n            \"website\": \"https://depict.ai\"\r\n        },\r\n        \"DeskPro\": {\r\n            \"cats\": [\r\n                1,\r\n                53\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^deskpro.+$\"\r\n                ]\r\n            },\r\n            \"description\": \"DeskPro is multi channel helpdesk software for managing customer and citizen requests via email, forms, chat, social and voice.\",\r\n            \"website\": \"https://www.deskpro.com\",\r\n            \"cpe\": \"cpe:2.3:a:deskpro:deskpro:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"DeskPro Chat\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"deskpro_widget_options.chat\"\r\n            ],\r\n            \"description\": \"DeskPro is multi channel helpdesk software for managing customer and citizen requests via email, forms, chat, social and voice.\",\r\n            \"website\": \"https://www.deskpro.com/product/chat\"\r\n        },\r\n        \"Deta\": {\r\n            \"cats\": [\r\n                62\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^deta$\"\r\n            },\r\n            \"description\": \"Deta is a cloud platform for building and deploying apps.\",\r\n            \"website\": \"https://deta.sh\"\r\n        },\r\n        \"Detectify\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"description\": \"Detectify is an automated scanner that checks your web application for vulnerabilities.\",\r\n            \"website\": \"https://detectify.com/\"\r\n        },\r\n        \"Deutsche Post\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Deutsche Post is a German multinational package delivery and supply chain management company in Germany.\",\r\n            \"website\": \"https://www.deutschepost.de\"\r\n        },\r\n        \"DiamondCDN\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^diamondcdn$\"\r\n            },\r\n            \"description\": \"DiamondCDN is a CDN with DDoS mitigation for free.\",\r\n            \"website\": \"https://diamondcdn.com\"\r\n        },\r\n        \"Dianomi\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.dianomi\\\\.com/\"\r\n            ],\r\n            \"description\": \"Dianomi is an advertiser campaign management software for financial services, premium lifestyle, technology and corporate sectors.\",\r\n            \"website\": \"https://www.dianomi.com\"\r\n        },\r\n        \"Didomi\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"sdk\\\\.privacy-center\\\\.org/.*/loader\\\\.js\"\r\n            ],\r\n            \"description\": \"Didomi is a consent management platform helping brands and businesses collect, store and leverage their customer consents.\",\r\n            \"website\": \"https://www.didomi.io/en/consent-preference-management\"\r\n        },\r\n        \"Digest\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"headers\": {\r\n                \"www-authenticate\": \"^digest\"\r\n            },\r\n            \"description\": \"Digest is an authentication method based on a MD5 hash used by web servers.\",\r\n            \"website\": \"https://tools.ietf.org/html/rfc7616\"\r\n        },\r\n        \"DigiCert\": {\r\n            \"cats\": [\r\n                70\r\n            ],\r\n            \"website\": \"https://www.digicert.com/\"\r\n        },\r\n        \"Digismoothie Candy Rack\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"candyrack_document_listener\",\r\n                \"candyrackenabledebug\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Digismoothie Candy Rack is an upsell app for Shopify which allow merchants to offer custom services or bundle products.\",\r\n            \"website\": \"https://www.digismoothie.com/apps/candy-rack\"\r\n        },\r\n        \"Digistore24\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"js\": [\r\n                \"digistore_link_id_key\",\r\n                \"digistore_vendorkey\",\r\n                \"getthesourcefordigistorelinks\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"digistore/digistore\\\\.js\",\r\n                \"www\\\\.digistore24\\\\.com\"\r\n            ],\r\n            \"description\": \"Digistore24 is a German digital reselling and affiliate marketing platform.\",\r\n            \"website\": \"https://www.digistore24.com\"\r\n        },\r\n        \"Digital Showroom\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"description\": \"Digital Showroom is an ecommerce platform.\",\r\n            \"website\": \"https://digitalshowroom.in\"\r\n        },\r\n        \"DigitalOcean Spaces\": {\r\n            \"cats\": [\r\n                31,\r\n                63\r\n            ],\r\n            \"description\": \"DigitalOcean Spaces is a cloud-based object storage service provided by DigitalOcean, a cloud infrastructure provider. It allows users to store and retrieve large amounts of data, such as images, videos, audio files, backups, and logs, using a simple RESTful API or a web-based graphical user interface (GUI).\",\r\n            \"website\": \"https://www.digitalocean.com/products/spaces\"\r\n        },\r\n        \"DigitalRiver\": {\r\n            \"cats\": [\r\n                6,\r\n                41\r\n            ],\r\n            \"cookies\": {\r\n                \"x-dr-shopper-ets\": \"\",\r\n                \"x-dr-theme\": \"^\\\\d+$\"\r\n            },\r\n            \"js\": [\r\n                \"digitalriver\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.digitalriver\\\\.com/\"\r\n            ],\r\n            \"description\": \"Digital River provides global ecommerce, payments and marketing services.\",\r\n            \"website\": \"https://www.digitalriver.com\"\r\n        },\r\n        \"DirectAdmin\": {\r\n            \"cats\": [\r\n                9\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"directadmin daemon v([\\\\d.]+)\\\\;version:\\\\1\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003ca[^\\u003e]+\\u003edirectadmin\\u003c/a\\u003e web control panel\"\r\n            ],\r\n            \"implies\": [\r\n                \"Apache HTTP Server\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"DirectAdmin is a graphical web-based web hosting control panel designed to make administration of websites easier.\",\r\n            \"website\": \"https://www.directadmin.com\",\r\n            \"cpe\": \"cpe:2.3:a:directadmin:directadmin:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Directus\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^directus$\"\r\n            },\r\n            \"implies\": [\r\n                \"TinyMCE\",\r\n                \"Vue.js\",\r\n                \"core-js\"\r\n            ],\r\n            \"description\": \"Directus is a free and open-source headless CMS framework for managing custom SQL-based databases.\",\r\n            \"website\": \"https://directus.io\"\r\n        },\r\n        \"Discourse\": {\r\n            \"cats\": [\r\n                2\r\n            ],\r\n            \"js\": [\r\n                \"discourse\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"discourse(?: ?/?([\\\\d.]+\\\\d))?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Ruby on Rails\"\r\n            ],\r\n            \"description\": \"Discourse is an open-source internet forum and mailing list management software application.\",\r\n            \"website\": \"https://discourse.org\"\r\n        },\r\n        \"Discuz! X\": {\r\n            \"cats\": [\r\n                2\r\n            ],\r\n            \"js\": [\r\n                \"discuz_uid\",\r\n                \"discuzcode\",\r\n                \"discuzversion\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"discuz! x([\\\\d\\\\.]+)?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Discuz! X is an internet forum software written in PHP and supports MySQL and PostgreSQL databases.\",\r\n            \"website\": \"https://www.discuz.net\"\r\n        },\r\n        \"Disqus\": {\r\n            \"cats\": [\r\n                15\r\n            ],\r\n            \"js\": [\r\n                \"disqus\",\r\n                \"disqus_shortname\",\r\n                \"disqus_url\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"disqus_url\"\r\n            ],\r\n            \"description\": \"Disqus is a worldwide blog comment hosting service for web sites and online communities that use a networked platform.\",\r\n            \"website\": \"https://disqus.com\",\r\n            \"cpe\": \"cpe:2.3:a:disqus:disqus_comment_system:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Distributor\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"headers\": {\r\n                \"x-distributor\": \"yes\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/distributor\"\r\n            ],\r\n            \"description\": \"Distributor is a WordPress plugin that helps distribute and reuse content across your websites.\",\r\n            \"website\": \"https://distributorplugin.com\"\r\n        },\r\n        \"District M\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"description\": \"District M is a programmatic advertising exchange.\",\r\n            \"website\": \"https://districtm.net\"\r\n        },\r\n        \"Dito\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"js\": [\r\n                \"dito.appsettings\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"storage\\\\.googleapis\\\\.com/dito/sdk\\\\.js\"\r\n            ],\r\n            \"description\": \"Dito is a tool that centralizes and manages the relationship between brands and their customers.\",\r\n            \"website\": \"https://www.dito.com.br\"\r\n        },\r\n        \"Divi\": {\r\n            \"cats\": [\r\n                51,\r\n                80,\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"divi\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"divi/js/custom\\\\.(?:min|unified)\\\\.js\\\\?ver=([\\\\d.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"divi(?:\\\\sv\\\\.([\\\\d\\\\.]+))?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"Divi is a WordPress Theme and standalone WordPress plugin from Elegant themes that allows users to build websites using the visual drag-and-drop Divi page builder.\",\r\n            \"website\": \"https://www.elegantthemes.com/gallery/divi\"\r\n        },\r\n        \"DivideBuy\": {\r\n            \"cats\": [\r\n                41,\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"display_dividebuy_modal\"\r\n            ],\r\n            \"description\": \"Dividebuy provides retailer financing solutions.\",\r\n            \"website\": \"https://dividebuy.co.uk/\"\r\n        },\r\n        \"Divido\": {\r\n            \"cats\": [\r\n                41,\r\n                91\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.divido\\\\.com\"\r\n            ],\r\n            \"description\": \"Divio is a Buy now pay later solution. Divido provided whitelabel platform connects lenders, retailers and channel partners at the point of sale\",\r\n            \"website\": \"https://www.divido.com/\"\r\n        },\r\n        \"Django\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"cookies\": {\r\n                \"django_language\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"__admin_media_prefix__\",\r\n                \"django\"\r\n            ],\r\n            \"html\": [\r\n                \"(?:powered by \\u003ca[^\\u003e]+\\u003edjango ?([\\\\d.]+)?\\u003c\\\\/a\\u003e|\\u003cinput[^\\u003e]*name=[\\\"']csrfmiddlewaretoken[\\\"'][^\\u003e]*\\u003e)\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"Python\"\r\n            ],\r\n            \"description\": \"Django is a Python-based free and open-source web application framework.\",\r\n            \"website\": \"https://djangoproject.com\",\r\n            \"cpe\": \"cpe:2.3:a:djangoproject:django:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Django CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/djangocms_\"\r\n            ],\r\n            \"implies\": [\r\n                \"Django\",\r\n                \"PostgreSQL\",\r\n                \"Python\"\r\n            ],\r\n            \"description\": \"Django CMS is a free and open source content management system platform for publishing content on the World Wide Web and intranets.\",\r\n            \"website\": \"https://www.django-cms.org\"\r\n        },\r\n        \"DocFX\": {\r\n            \"cats\": [\r\n                4\r\n            ],\r\n            \"meta\": {\r\n                \"docfx:navrel\": [\r\n                    \"toc.html\"\r\n                ],\r\n                \"docfx:tocrel\": [\r\n                    \"toc.html\"\r\n                ],\r\n                \"generator\": [\r\n                    \"docfx\\\\s([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"DocFX is a tool for building and publishing API documentation for .NET projects.\",\r\n            \"website\": \"https://github.com/dotnet/docfx\"\r\n        },\r\n        \"Docker\": {\r\n            \"cats\": [\r\n                60\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- this comment is expected by the docker healthcheck  --\\u003e\"\r\n            ],\r\n            \"description\": \"Docker is a tool designed to make it easier to create, deploy, and run applications by using containers.\",\r\n            \"website\": \"https://www.docker.com/\",\r\n            \"cpe\": \"cpe:2.3:a:docker:engine:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Docsify\": {\r\n            \"cats\": [\r\n                4\r\n            ],\r\n            \"js\": [\r\n                \"docsify.version\",\r\n                \"docsifycompiler\"\r\n            ],\r\n            \"description\": \"Docsify is an open-source documentation generator for creating user-friendly documentation websites.\",\r\n            \"website\": \"https://docsify.js.org\"\r\n        },\r\n        \"DocuSign\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"description\": \"DocuSign allows organisations to manage electronic agreements.\",\r\n            \"website\": \"https://www.docusign.com\"\r\n        },\r\n        \"Docusaurus\": {\r\n            \"cats\": [\r\n                4,\r\n                57\r\n            ],\r\n            \"js\": [\r\n                \"__docusaurus_insert_baseurl_banner\",\r\n                \"docusaurus\",\r\n                \"search.indexname\"\r\n            ],\r\n            \"meta\": {\r\n                \"docusaurus_locale\": [],\r\n                \"docusaurus_tag\": [],\r\n                \"generator\": [\r\n                    \"^docusaurus(?: v(.+))?$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"React\",\r\n                \"Webpack\"\r\n            ],\r\n            \"description\": \"Docusaurus is a tool for teams to publish documentation websites.\",\r\n            \"website\": \"https://docusaurus.io/\"\r\n        },\r\n        \"Dojo\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"dojo\",\r\n                \"dojo.version.major\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"([\\\\d.]+)/dojo/dojo(?:\\\\.xd)?\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"website\": \"https://dojotoolkit.org\",\r\n            \"cpe\": \"cpe:2.3:a:dojotoolkit:dojo:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Dokan\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"dokan\"\r\n            ],\r\n            \"description\": \"Dokan offers a multi-vendor marketplace solution built on top of wordpress and woocommerce.\",\r\n            \"website\": \"https://wedevs.com/dokan\"\r\n        },\r\n        \"Dokeos\": {\r\n            \"cats\": [\r\n                21\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"dokeos\"\r\n            },\r\n            \"html\": [\r\n                \"(?:portal \\u003ca[^\\u003e]+\\u003edokeos|@import \\\"[^\\\"]+dokeos_blue)\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"dokeos\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\",\r\n                \"Xajax\",\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"Dokeos is an e-learning and course management web application.\",\r\n            \"website\": \"https://dokeos.com\"\r\n        },\r\n        \"DokuWiki\": {\r\n            \"cats\": [\r\n                8\r\n            ],\r\n            \"cookies\": {\r\n                \"dokuwiki\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"doku_edit_text_content\",\r\n                \"doku_tpl\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^dokuwiki( release [\\\\d-]+)?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"DokuWiki is a free open-source wiki software.\",\r\n            \"website\": \"https://www.dokuwiki.org\",\r\n            \"cpe\": \"cpe:2.3:a:dokuwiki:dokuwiki:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"DomainFactory\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"description\": \"DomainFactory has been operating as a web hosting company. It is owned by GoDaddy and targets businesses in Austria and Germany.\",\r\n            \"website\": \"https://www.df.eu\"\r\n        },\r\n        \"Dominate WooCommerce\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/iwd-checkout-connector/\"\r\n            ],\r\n            \"description\": \"Dominate WooCommerce is a cloud-based checkout-page which supports PayPal Smart buttons for Venmo, PayPal Credit, and other payment methods.\",\r\n            \"website\": \"https://www.dominate.co/woocommerce\"\r\n        },\r\n        \"DonorPerfect\": {\r\n            \"cats\": [\r\n                111\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.donorperfect\\\\.net/\"\r\n            ],\r\n            \"description\": \"DonorPerfect is a fundraising management software.\",\r\n            \"website\": \"https://www.donorperfect.com\"\r\n        },\r\n        \"Donorbox\": {\r\n            \"cats\": [\r\n                111\r\n            ],\r\n            \"js\": [\r\n                \"donorbox\",\r\n                \"donorbox\",\r\n                \"donorbox_check_donation_period\"\r\n            ],\r\n            \"description\": \"Donorbox is a US-based technology company. It offers an online fundraising software that allows individuals and nonprofit organisations to receive donations over the Internet.\",\r\n            \"website\": \"https://donorbox.org\"\r\n        },\r\n        \"Doofinder\": {\r\n            \"cats\": [\r\n                29\r\n            ],\r\n            \"js\": [\r\n                \"doofinder.classic.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.doofinder\\\\.com/\"\r\n            ],\r\n            \"description\": \"Doofinder is a search site solution that enables users to include advanced and smart search engine capabilities in their ecommerce website.\",\r\n            \"website\": \"https://www.doofinder.com\"\r\n        },\r\n        \"Doppler\": {\r\n            \"cats\": [\r\n                75\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//(?:hub|cdn)\\\\.fromdoppler\\\\.com/\"\r\n            ],\r\n            \"description\": \"Doppler is an email marketing and transactional email service.\",\r\n            \"website\": \"https://www.fromdoppler.com\"\r\n        },\r\n        \"Doppler Forms\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/doppler-form/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"Doppler\"\r\n            ],\r\n            \"description\": \"The Doppler Forms plugin allows you to create fully customised subscription forms that you can add to your website or blog.\",\r\n            \"website\": \"https://wordpress.org/plugins/doppler-form/\"\r\n        },\r\n        \"Doppler for WooCommerce\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/doppler-for-woocommerce/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"Doppler\"\r\n            ],\r\n            \"description\": \"The Doppler for WooCommerce plugin adds submit your WooCommerce customers and buyers to a Doppler List.\",\r\n            \"website\": \"https://wordpress.org/plugins/doppler-for-woocommerce/\"\r\n        },\r\n        \"Dotclear\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"x-dotclear-static-cache\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://dotclear.org\",\r\n            \"cpe\": \"cpe:2.3:a:dotclear:dotclear:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Dotdigital\": {\r\n            \"cats\": [\r\n                32,\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"dm_insight_id\",\r\n                \"dmpt\",\r\n                \"dmtrackingobjectname\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"js/_dmptv([\\\\d.]+)\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Dotdigital is an all-in-one cloud-based customer engagement multichannel marketing platform.\",\r\n            \"website\": \"https://dotdigital.com\"\r\n        },\r\n        \"Dotdigital Chat\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"_ddgchatconfig.urlbase\"\r\n            ],\r\n            \"implies\": [\r\n                \"Dotdigital\"\r\n            ],\r\n            \"description\": \"Dotdigital Chat is a smart, customisable widget that makes it easy for shoppers to communicate in real-time with members of your team.\",\r\n            \"website\": \"https://dotdigital.com\"\r\n        },\r\n        \"Doteasy\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"description\": \"Doteasy is a web hosting company that provides web hosting services, domain registration, and other related services for businesses and individuals. The company was founded in 2000 and is based in Vancouver, Canada.\",\r\n            \"website\": \"https://www.doteasy.com\"\r\n        },\r\n        \"Doteasy Website Builder\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"fsdata.fs\"\r\n            ],\r\n            \"implies\": [\r\n                \"Doteasy\"\r\n            ],\r\n            \"description\": \"Doteasy Website Builder is a tool provided by Doteasy, a web hosting company that enables users to create and personalise their own websites without necessitating any technical knowledge or expertise in website design.\",\r\n            \"website\": \"https://www.doteasy.com/website-builder/\"\r\n        },\r\n        \"DoubleClick Ad Exchange (AdX)\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"googlesyndication\\\\.com.*abg\\\\.js\",\r\n                \"googlesyndication\\\\.com/pagead/show_ads\\\\.js\",\r\n                \"tpc\\\\.googlesyndication\\\\.com/safeframe\"\r\n            ],\r\n            \"description\": \"DoubleClick Ad Exchange is a real-time marketplace to buy and sell display advertising space.\",\r\n            \"website\": \"https://www.doubleclickbygoogle.com/solutions/digital-marketing/ad-exchange/\"\r\n        },\r\n        \"DoubleClick Campaign Manager (DCM)\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"2mdn\\\\.net\"\r\n            ],\r\n            \"website\": \"https://www.doubleclickbygoogle.com/solutions/digital-marketing/campaign-manager/\"\r\n        },\r\n        \"DoubleClick Floodlight\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"https?://fls\\\\.doubleclick\\\\.net\"\r\n            ],\r\n            \"website\": \"https://support.google.com/ds/answer/6029713?hl=en\"\r\n        },\r\n        \"DoubleClick for Publishers (DFP)\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"googletagservices\\\\.com/tag/js/gpt(?:_mobile)?\\\\.js\"\r\n            ],\r\n            \"description\": \"DoubleClick for Publishers (DFP) is a hosted ad serving platform that streamlines your ad management.\",\r\n            \"website\": \"https://www.google.com/dfp\"\r\n        },\r\n        \"DoubleVerify\": {\r\n            \"cats\": [\r\n                36,\r\n                10\r\n            ],\r\n            \"description\": \"DoubleVerify is a software platform for digital media measurement, data, and analytics.\",\r\n            \"website\": \"https://doubleverify.com\"\r\n        },\r\n        \"Dovetale\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"js\": [\r\n                \"dovetale\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"dttrk\\\\.com\"\r\n            ],\r\n            \"description\": \"Dovetale (Acquired by Shopify) helps e-commerce stores recruit, manage, \\u0026 grow their sales with communities of people who love their products.\",\r\n            \"website\": \"https://dovetale.com/\"\r\n        },\r\n        \"Download Monitor\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"dlm_xhr_download\",\r\n                \"dlmxhr.prevent_duplicates\"\r\n            ],\r\n            \"meta\": {\r\n                \"dlm-version\": [\r\n                    \"^([\\\\d\\\\.]+)$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"Download Monitor is a plugin for selling, uploading and managing downloads, tracking downloads and displaying links.\",\r\n            \"website\": \"https://www.download-monitor.com\"\r\n        },\r\n        \"Doxygen\": {\r\n            \"cats\": [\r\n                4\r\n            ],\r\n            \"html\": [\r\n                \"(?:\\u003c!-- generated by doxygen ([\\\\d.]+)|\\u003clink[^\\u003e]+doxygen\\\\.css)\\\\;version:\\\\1\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"doxygen ([\\\\d.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"Doxygen is a documentation generator, a tool for writing software reference documentation.\",\r\n            \"website\": \"https://www.doxygen.nl/\",\r\n            \"cpe\": \"cpe:2.3:a:doxygen:doxygen:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Draft.js\": {\r\n            \"cats\": [\r\n                20\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"draft-js(@|/)([\\\\d.]+)\\\\;version:\\\\2\"\r\n            ],\r\n            \"description\": \"Draft.js is a JavaScript rich text editor framework, built for React.\",\r\n            \"website\": \"https://draftjs.org/\"\r\n        },\r\n        \"Draftpress HFCM\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!--[^\\u003e]*hfcm\\\\sby\\\\s99\\\\srobots\"\r\n            ],\r\n            \"description\": \"Header Footer Code Manager by Draftpress is a easy interface to add snippets to the header or footer or above or below the content of your page.\",\r\n            \"website\": \"https://draftpress.com/products/header-footer-code-manager-pro/\"\r\n        },\r\n        \"Dragon\": {\r\n            \"cats\": [\r\n                27\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"dragon native ([\\\\d.]+)\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Apache HTTP Server\"\r\n            ],\r\n            \"description\": \"Dragon is a general-purpose programming language.\",\r\n            \"website\": \"https://dragon-lang.org\"\r\n        },\r\n        \"Drapr\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"drapr_data\",\r\n                \"drapr_deferloading\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"draprpubsubtest\\\\.firebaseapp\\\\.com/\"\r\n            ],\r\n            \"description\": \"Drapr is an ecommerce startup and online application based on technology that enables customers to quickly create 3D avatars and virtually try on clothing.\",\r\n            \"website\": \"https://www.drapr.com\"\r\n        },\r\n        \"DreamApply\": {\r\n            \"cats\": [\r\n                101,\r\n                19\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"app\\\\.cdn\\\\.dreamapply\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Facebook Login\",\r\n                \"Google Sign-in\",\r\n                \"Linkedin Sign-in\"\r\n            ],\r\n            \"description\": \"DreamApply is a specialised student application management system designed with and for education institutions.\",\r\n            \"website\": \"https://dreamapply.com\"\r\n        },\r\n        \"DreamHost\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"description\": \"DreamHost is a Los Angeles-based web hosting provider and domain name registrar.\",\r\n            \"website\": \"https://www.dreamhost.com\"\r\n        },\r\n        \"DreamWeaver\": {\r\n            \"cats\": [\r\n                20\r\n            ],\r\n            \"js\": [\r\n                \"mm_preloadimages\",\r\n                \"mm_showhidelayers\",\r\n                \"mm_showmenu\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- #begintemplate\\\\s\\\"[\\\\d_\\\\w/]+\\\\.dwt\",\r\n                \"\\u003c!--[^\\u003e]*(?:instancebegineditable|dreamweaver([^\\u003e]+)target|dwlayoutdefaulttable)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Dreamweaver is a development tool for creating, publishing, and managing websites and mobile content.\",\r\n            \"website\": \"https://www.adobe.com/products/dreamweaver.html\",\r\n            \"cpe\": \"cpe:2.3:a:adobe:dreamweaver:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Dreamdata\": {\r\n            \"cats\": [\r\n                32,\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"bizible\",\r\n                \"biztrackinga\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.bizible\\\\.com/\"\r\n            ],\r\n            \"description\": \"Dreamdata is a B2B revenue attribution platform.\",\r\n            \"website\": \"https://dreamdata.io\"\r\n        },\r\n        \"Drift\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"drift\",\r\n                \"driftt\"\r\n            ],\r\n            \"description\": \"Drift is a conversational marketing platform.\",\r\n            \"website\": \"https://www.drift.com/\"\r\n        },\r\n        \"Drip\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.getdrip\\\\.com/\"\r\n            ],\r\n            \"description\": \"Drip is a marketing automation platform built for ecommerce.\",\r\n            \"website\": \"https://www.drip.com\"\r\n        },\r\n        \"Drop A Hint\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"dropahint.baseurl\",\r\n                \"dropahinttypeproduct\"\r\n            ],\r\n            \"description\": \"Drop A Hint is an Shopify app which help share hints via email, SMS, WhatsApp and messengers.\",\r\n            \"website\": \"https://apps.shopify.com/drop-a-hint-v2\"\r\n        },\r\n        \"DropInBlog\": {\r\n            \"cats\": [\r\n                11\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.dropinblog\\\\.com/\"\r\n            ],\r\n            \"description\": \"DropInBlog is a remotely hosted, cloud based platform that is designed to embed a blog into your html site.\",\r\n            \"website\": \"https://dropinblog.com\"\r\n        },\r\n        \"Dropbox\": {\r\n            \"cats\": [\r\n                95\r\n            ],\r\n            \"website\": \"https://www.dropbox.com\"\r\n        },\r\n        \"Dropzone\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"dropzone\",\r\n                \"dropzone.version\"\r\n            ],\r\n            \"description\": \"Dropzone is a JavaScript library that turns any HTML element into a dropzone.\",\r\n            \"website\": \"https://www.dropzone.dev\"\r\n        },\r\n        \"Droxit\": {\r\n            \"cats\": [\r\n                68\r\n            ],\r\n            \"cookies\": {\r\n                \"droxit_a11y_state\": \"\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"/droxit-a11y/js/activator\\\\.js\"\r\n            ],\r\n            \"description\": \"Droxit is an automated web accessibility solution.\",\r\n            \"website\": \"https://www.droxit.com\"\r\n        },\r\n        \"Droz Bot\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"chat-app\\\\.meudroz\\\\.com/\"\r\n            ],\r\n            \"description\": \"Droz Bot is a multi-channel, customisable chatbot designed to help brands provide customer service across commonly used social apps.\",\r\n            \"website\": \"https://meudroz.com/droz-bot/\"\r\n        },\r\n        \"Drubbit\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^drubbit commerce$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"Node.js\"\r\n            ],\r\n            \"description\": \"Drubbit is an ecommerce platform with a Content Management System (CMS) for creating product pages, managing checkout processes, facilitating payments, and handling shipping.\",\r\n            \"website\": \"https://drubbit.com\"\r\n        },\r\n        \"Drupal\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"drupal\"\r\n            ],\r\n            \"headers\": {\r\n                \"expires\": \"19 nov 1978\",\r\n                \"x-drupal-cache\": \"\",\r\n                \"x-generator\": \"^drupal(?:\\\\s([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003c(?:link|style)[^\\u003e]+\\\"/sites/(?:default|all)/(?:themes|modules)/\"\r\n            ],\r\n            \"scripts\": [\r\n                \"drupal_internal__nid\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"drupal\\\\.js\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^drupal(?:\\\\s([\\\\d.]+))?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Drupal is a free and open-source web content management framework.\",\r\n            \"website\": \"https://www.drupal.org/\",\r\n            \"cpe\": \"cpe:2.3:a:drupal:drupal:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Drupal Commerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c[^\\u003e]+(?:id=\\\"block[_-]commerce[_-]cart[_-]cart|class=\\\"commerce[_-]product[_-]field)\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/modules/(?:contrib/)?commerce/js/conditions\\\\.js\\\\;confidence:50\",\r\n                \"/profiles/commerce_kickstart/modules/contrib/commerce/modules/checkout/commerce_checkout\\\\.js\\\\;confidence:50\",\r\n                \"/sites/(?:all|default)/modules/(?:contrib/)?commerce/modules/checkout/commerce_checkout\\\\.js\\\\;confidence:50\"\r\n            ],\r\n            \"implies\": [\r\n                \"Drupal\"\r\n            ],\r\n            \"description\": \"Drupal Commerce is open-source ecommerce software that augments the content management system Drupal.\",\r\n            \"website\": \"https://drupalcommerce.org\",\r\n            \"cpe\": \"cpe:2.3:a:commerceguys:commerce:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Drupal Multisite\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/sites/(?!(?:default|all)/).*/(?:files|themes|modules)/\"\r\n            ],\r\n            \"description\": \"Drupal Multisite enables separate, independent sites to be served from a single codebase.\",\r\n            \"website\": \"https://www.drupal.org/docs/multisite-drupal\"\r\n        },\r\n        \"Duda\": {\r\n            \"cats\": [\r\n                1,\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"d_version\",\r\n                \"systemid\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"dd-cdn\\\\.multiscreensite\\\\.com/\"\r\n            ],\r\n            \"description\": \"Duda is a user-friendly website builder and CMS platform that enables businesses and individuals to create responsive, mobile-friendly websites without extensive coding knowledge.\",\r\n            \"website\": \"https://www.duda.co\"\r\n        },\r\n        \"Duel\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"cookies\": {\r\n                \"_duelcsrf\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"duel.apiurl\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.duel\\\\.me/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Angular\",\r\n                \"MongoDB\",\r\n                \"Node.js\"\r\n            ],\r\n            \"description\": \"Duel is a customer advocacy marketing platform.\",\r\n            \"website\": \"https://www.duel.tech\"\r\n        },\r\n        \"Dukaan\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"apps\\\\.mydukaan\\\\.io/\"\r\n            ],\r\n            \"meta\": {\r\n                \"apple-mobile-web-app-title\": [\r\n                    \"^mydukaan$\"\r\n                ]\r\n            },\r\n            \"description\": \"Dukaan is a hosted ecommerce solution made in India.\",\r\n            \"website\": \"https://mydukaan.io\"\r\n        },\r\n        \"Duopana\": {\r\n            \"cats\": [\r\n                1,\r\n                11,\r\n                51\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.beracode\\\\.com/\"\r\n            ],\r\n            \"description\": \"Duopana is a platform for creating online communities, blogs and managing collaborative content.\",\r\n            \"website\": \"https://duopana.com\"\r\n        },\r\n        \"Dynamic Yield\": {\r\n            \"cats\": [\r\n                74,\r\n                76\r\n            ],\r\n            \"cookies\": {\r\n                \"_dy_geo\": \"\",\r\n                \"_dy_ses_load_seq\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"_dy_memstore\",\r\n                \"dy.addetection\",\r\n                \"dyexps.sectionconfig\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn(?:-eu)?\\\\.dynamicyield\\\\.\\\\w+/\"\r\n            ],\r\n            \"description\": \"Dynamic Yield is a provider of automated conversion optimisation tools for marketers and retailers.\",\r\n            \"website\": \"https://www.dynamicyield.com\"\r\n        },\r\n        \"Dynamicweb\": {\r\n            \"cats\": [\r\n                1,\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"dynamicweb\": \"\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"dynamicweb ([\\\\d.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"description\": \"Dynamicweb is a all-in-one platform for content management, ecommerce, digital marketing​, product information management (PIM) and integration.\",\r\n            \"website\": \"https://www.dynamicweb.dk\"\r\n        },\r\n        \"Dynatrace\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"cookies\": {\r\n                \"dtcookie1\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"dtrum\"\r\n            ],\r\n            \"description\": \"Dynatrace is a technology company that produces a software intelligence platform based on artificial intelligence to monitor and optimise application performance and development, IT infrastructure, and user experience for businesses and government agencies throughout the world.\",\r\n            \"website\": \"https://www.dynatrace.com\"\r\n        },\r\n        \"Dynatrace RUM\": {\r\n            \"cats\": [\r\n                78\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/ruxitagentjs_(?:.+)_(?:.+)\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Dynatrace\"\r\n            ],\r\n            \"description\": \"Dynatrace RUM is a AI powered, full stack, automated real user monutoring platform built by Dynatrace.\",\r\n            \"website\": \"https://www.dynatrace.com/platform/real-user-monitoring\"\r\n        },\r\n        \"Dyte\": {\r\n            \"cats\": [\r\n                103\r\n            ],\r\n            \"css\": [\r\n                \"\\\\.dyte-client-selfVideo\"\r\n            ],\r\n            \"js\": [\r\n                \"triggerdyterecording\"\r\n            ],\r\n            \"implies\": [\r\n                \"WebRTC\"\r\n            ],\r\n            \"description\": \"Dyte is a developer-friendly, real-time audio and video communication software development kit (SDK).\",\r\n            \"website\": \"https://dyte.io\"\r\n        },\r\n        \"E-Com Plus\": {\r\n            \"cats\": [\r\n                108\r\n            ],\r\n            \"js\": [\r\n                \"ecompassport.storagekey\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^e-com\\\\splus\\\\sstorefront$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"TypeScript\",\r\n                \"Vue.js\"\r\n            ],\r\n            \"description\": \"E-Com Plus is an open fair-code ecommerce platform designed to be used with headless commerce APIs.\",\r\n            \"website\": \"https://www.ecomplus.io\"\r\n        },\r\n        \"E-monsite\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^e-monsite\\\\s\\\\(e-monsite\\\\.com\\\\)$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"Symfony\"\r\n            ],\r\n            \"description\": \"E-monsite is a web-based platform that allows users to create and customise their own websites using a range of templates and features, without requiring coding or technical skills.\",\r\n            \"website\": \"https://www.e-monsite.com\"\r\n        },\r\n        \"EC-CUBE\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"eccube\\\\.js\",\r\n                \"win_op\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"EC-CUBE is an open source package used to build ecommerce sites.\",\r\n            \"website\": \"https://www.ec-cube.net\",\r\n            \"cpe\": \"cpe:2.3:a:lockon:ec-cube:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"ECharts\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/echarts(?:\\\\.simple)?(?:\\\\.esm)?(?:\\\\.common)?(?:\\\\.min)?\\\\.js\",\r\n                \"/echarts\\\\.min\\\\.[a-za-z0-9]*\\\\.js\",\r\n                \"cdn\\\\.jsdelivr\\\\.net/(?:npm|gh/apache)/echarts@([\\\\d.]+(?:-[^/]+)?|latest)/dist/echarts.*\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"ECharts is an open-source JavaScript visualisation library.\",\r\n            \"website\": \"https://echarts.apache.org/\"\r\n        },\r\n        \"EKM\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"ekmpowershop\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"_ekmpinpoint\"\r\n            ],\r\n            \"description\": \"EKM is an all-in-one online store builder, with the company based in the UK.\",\r\n            \"website\": \"https://www.ekm.com\"\r\n        },\r\n        \"ELOG\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"html\": [\r\n                \"\\u003ctitle\\u003eelog logbook selection\\u003c/title\\u003e\"\r\n            ],\r\n            \"website\": \"https://midas.psi.ch/elog\"\r\n        },\r\n        \"ELOG HTTP\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"elog http ?([\\\\d.-]+)?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"ELOG\"\r\n            ],\r\n            \"website\": \"https://midas.psi.ch/elog\"\r\n        },\r\n        \"EPrints\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"epjs_menu_template\",\r\n                \"eprints\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"eprints ([\\\\d.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Perl\"\r\n            ],\r\n            \"website\": \"https://www.eprints.org\"\r\n        },\r\n        \"ERPNext\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"erpnext.shopping_cart\",\r\n                \"erpnext.subscribe_to_newsletter\"\r\n            ],\r\n            \"implies\": [\r\n                \"Frappe\"\r\n            ],\r\n            \"description\": \"ERPNext is a free and open-source integrated Enterprise Resource Planning (ERP) software developed by Frappe Technologies.\",\r\n            \"website\": \"https://erpnext.com\",\r\n            \"cpe\": \"cpe:2.3:a:frappe:erpnext:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"ESW\": {\r\n            \"cats\": [\r\n                106\r\n            ],\r\n            \"js\": [\r\n                \"eshopworld\",\r\n                \"eswretailerdisplayconfiguration\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"eswhooks\\\\.js\"\r\n            ],\r\n            \"description\": \"ESW (eShopWorld) is a company providing payments, shipping, and delivery services focusing on cross-border ecommerce.\",\r\n            \"website\": \"https://esw.com\"\r\n        },\r\n        \"EWWW Image Optimizer\": {\r\n            \"cats\": [\r\n                87,\r\n                92\r\n            ],\r\n            \"js\": [\r\n                \"ewww_webp_supported\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/ewww-image-optimizer/\"\r\n            ],\r\n            \"description\": \"EWWW Image Optimizer is an image optimisation WordPress plugin designed to improve the performance of your website.\",\r\n            \"website\": \"https://github.com/nosilver4u/ewww-image-optimizer\"\r\n        },\r\n        \"EX.CO\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"__exco\",\r\n                \"__exco_integration_type\",\r\n                \"excopixelurl\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.ex\\\\.co\",\r\n                \"\\\\.playbuzz\\\\.com\"\r\n            ],\r\n            \"description\": \"EX.CO (formerly Playbuzz) is an online publishing platform for publishers, brand agencies, and individual content creators to create content in interactive formats such as polls, quizzes, lists, video snippets, slideshows, and countdowns.\",\r\n            \"website\": \"https://ex.co\"\r\n        },\r\n        \"EZproxy\": {\r\n            \"cats\": [\r\n                22,\r\n                64\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^ezproxy$\"\r\n            },\r\n            \"description\": \"EZproxy is a web server and a reverse proxy that is usually used by libraries as a reverse proxy in front of electronic educational resources databases (e.g.: Scopus, PubMed, or Web of Science) in order to provide authentication and protect privacy.\",\r\n            \"website\": \"https://www.oclc.org/en/ezproxy.html\"\r\n        },\r\n        \"Easy Hide PayPal\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"easyhide\\\\.herculesapps\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Easy Hide PayPal hides PayPal button from product page, cart and checkout but keep PayPal as payment option in checkout.\",\r\n            \"website\": \"https://apps.shopify.com/easyhide\"\r\n        },\r\n        \"Easy Orders\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"implies\": [\r\n                \"Go\",\r\n                \"Node.js\",\r\n                \"PostgreSQL\"\r\n            ],\r\n            \"description\": \"Easy Orders is an ecommerce platform that offers a pricing plan where users can create their online store and pay a fee of 0.5 EGP per order.\",\r\n            \"website\": \"https://www.easy-orders.net\"\r\n        },\r\n        \"Easy Redirects\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"easy-redirects\\\\..+/redirect-app\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Easy Redirects is a Shopify app built by Eastside, and part of the best Shopify Apps collection.\",\r\n            \"website\": \"https://apps.shopify.com/easyredirects\"\r\n        },\r\n        \"EasyDigitalDownloads\": {\r\n            \"cats\": [\r\n                6,\r\n                87\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^easy digital downloads v(.*)$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"Easy Digital Downloads is a WordPress ecommerce plugin that focuses purely on digital products.\",\r\n            \"website\": \"https://easydigitaldownloads.com\"\r\n        },\r\n        \"EasyEngine\": {\r\n            \"cats\": [\r\n                47,\r\n                9\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^easyengine (.*)$\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Docker\"\r\n            ],\r\n            \"description\": \"EasyEngine is a command-line tool for the Nginx web servers to manage WordPress sites that are running on the LEMP Stack.\",\r\n            \"website\": \"https://easyengine.io\"\r\n        },\r\n        \"EasyGift\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"easygift.nontargetingrules\",\r\n                \"easygiftscriptloaded\"\r\n            ],\r\n            \"description\": \"EasyGift is a tool that automates the addition of free gifts or products to the cart based on custom rules, allowing for upsells, BOGO (Buy 1 Get 1) offers, and the creation of rules based on cart value or specific products, with the ability to schedule start times for offer activation.\",\r\n            \"website\": \"https://apps.shopify.com/gifter-cart-auto-include\"\r\n        },\r\n        \"EasyStore\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"easystore\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.easystore\\\\.co/\"\r\n            ],\r\n            \"description\": \"EasyStore is a multi sales channel ecommerce platform.\",\r\n            \"website\": \"https://www.easystore.co\"\r\n        },\r\n        \"Easylog\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"EasyLog is a logistics company based in Brazil.\",\r\n            \"website\": \"https://www.easylog.com.br\"\r\n        },\r\n        \"Ebasnet\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdnebasnet\\\\.com/\"\r\n            ],\r\n            \"meta\": {\r\n                \"author\": [\r\n                    \"^ebasnet web solutions$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\",\r\n                \"Symfony\",\r\n                \"Varnish\"\r\n            ],\r\n            \"description\": \"Ebasnet is a web project creation and management platform in the cloud. It allows anyone to set up an online store or corporate website without prior IT knowledge.\",\r\n            \"website\": \"https://ebasnet.com\"\r\n        },\r\n        \"EcForce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"ecforce.models\",\r\n                \"ecforce.models.shop\"\r\n            ],\r\n            \"implies\": [\r\n                \"Nginx\",\r\n                \"Ruby\",\r\n                \"Ruby on Rails\"\r\n            ],\r\n            \"description\": \"EcForce is an all-in-one ecommerce platform with all the functions necessary for ecommerce, from landing-page creation to order and customer data management analysis.\",\r\n            \"website\": \"https://ec-force.com\"\r\n        },\r\n        \"Ecovium\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Ecovium is an end-to-end logistics company in Germany.\",\r\n            \"website\": \"https://ecovium.com\"\r\n        },\r\n        \"Ecwid\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"ecwid\",\r\n                \"ecwidcart\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"https://app\\\\.ecwid\\\\.com/script\\\\.js\",\r\n                \"https://app\\\\.multiscreenstore\\\\.com/script\\\\.js\"\r\n            ],\r\n            \"description\": \"Ecwid is a shopping cart plugin that turns any existing website into an online store.\",\r\n            \"website\": \"https://www.ecwid.com/\"\r\n        },\r\n        \"EdgeCast\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^ecd\\\\s\\\\(\\\\s+\\\\)\"\r\n            },\r\n            \"description\": \"EdgeCast is a content delivery network (CDN) that accelerated and delivers static content to users around the world.\",\r\n            \"website\": \"https://www.edgecast.com\"\r\n        },\r\n        \"Edgio\": {\r\n            \"cats\": [\r\n                31,\r\n                62\r\n            ],\r\n            \"cookies\": {\r\n                \"layer0_bucket\": \"\",\r\n                \"layer0_destination\": \"\",\r\n                \"layer0_eid\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"layer0.metrics\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-0-status\": \"\",\r\n                \"x-0-t\": \"\",\r\n                \"x-0-version\": \"^\\\\d+ ([\\\\d.]+) \\\\;version:\\\\1\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"/__layer0__/cache-manifest\\\\.js\"\r\n            ],\r\n            \"description\": \"Edgio is an integrated suite of Edge services, from Delivery to Compute.\",\r\n            \"website\": \"https://edg.io\"\r\n        },\r\n        \"Editor.js\": {\r\n            \"cats\": [\r\n                24\r\n            ],\r\n            \"js\": [\r\n                \"editorjs\"\r\n            ],\r\n            \"description\": \"Editor.js is a Javascript library which allows developers to implement a block base text editor with plugins on their page.\",\r\n            \"website\": \"https://editorjs.io\"\r\n        },\r\n        \"Efilli\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"js\": [\r\n                \"efilli\",\r\n                \"efilli.__cookieblocker\",\r\n                \"efilli_global_options\"\r\n            ],\r\n            \"description\": \"Efilli is a tool used to manage cookies on websites, providing users with data privacy control through GDPR compliance.\",\r\n            \"website\": \"https://efilli.com\"\r\n        },\r\n        \"Eggplant\": {\r\n            \"cats\": [\r\n                78\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.eggplant\\\\.cloud\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"\\\\.eggplant\\\\.cloud/\"\r\n            ],\r\n            \"description\": \"Eggplant is a software testing and monitoring company.\",\r\n            \"website\": \"https://www.eggplantsoftware.com\"\r\n        },\r\n        \"Ektron CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"ektron\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/ektron\\\\.javascript\\\\.ashx\"\r\n            ],\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"description\": \"Ektron CMS is developed on the Microsoft .NET framework and is 100% ASP.NET. In 2015 Ektron merged with EPiServer.\",\r\n            \"website\": \"https://www.optimizely.com/ektron-cms\",\r\n            \"cpe\": \"cpe:2.3:a:ektron:ektron_content_management_system:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Elastic APM\": {\r\n            \"cats\": [\r\n                10,\r\n                13,\r\n                78\r\n            ],\r\n            \"js\": [\r\n                \"elasticapm\"\r\n            ],\r\n            \"implies\": [\r\n                \"Elasticsearch\"\r\n            ],\r\n            \"description\": \"Elastic APM offers free and open application performance monitoring.\",\r\n            \"website\": \"https://www.elastic.co/apm\"\r\n        },\r\n        \"ElasticPress\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"headers\": {\r\n                \"x-elasticpress-query\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"Elasticsearch\"\r\n            ],\r\n            \"description\": \"ElasticPress is a hosting service that connects your WordPress site to search hosting.\",\r\n            \"website\": \"https://www.elasticpress.io/\"\r\n        },\r\n        \"ElasticSuite\": {\r\n            \"cats\": [\r\n                29\r\n            ],\r\n            \"cookies\": {\r\n                \"stuid\": \"\\\\;confidence:50\",\r\n                \"stvid\": \"\\\\;confidence:50\"\r\n            },\r\n            \"js\": [\r\n                \"smiletracker\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/smile_elasticsuitetracker/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Elasticsearch\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"ElasticSuite is a merchandising suite for Magento and OroCommerce.\",\r\n            \"website\": \"https://elasticsuite.io\"\r\n        },\r\n        \"Elasticsearch\": {\r\n            \"cats\": [\r\n                29\r\n            ],\r\n            \"description\": \"Elasticsearch is a search engine based on the Lucene library. It provides a distributed, multitenant-capable full-text search engine with an HTTP web interface and schema-free JSON documents.\",\r\n            \"website\": \"https://www.elastic.co\",\r\n            \"cpe\": \"cpe:2.3:a:elastic:elasticsearch:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Elcodi\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"headers\": {\r\n                \"x-elcodi\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"PHP\",\r\n                \"Symfony\"\r\n            ],\r\n            \"website\": \"https://elcodi.io\"\r\n        },\r\n        \"Elcom\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^elcomcms\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"description\": \"The Elcom Platform is a web content management and intranet portal software written in Microsoft ASP.NET and SQL Server by Elcom Technology.\",\r\n            \"website\": \"https://www.elcom.com.au/\"\r\n        },\r\n        \"Eleanor CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"eleanor\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://eleanor-cms.ru\",\r\n            \"cpe\": \"cpe:2.3:a:eleanor-cms:eleanor_cms:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Element\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"meta\": {\r\n                \"application-name\": [\r\n                    \"^element$\"\r\n                ]\r\n            },\r\n            \"description\": \"Element is a Matrix-based end-to-end encrypted messenger and secure collaboration app.\",\r\n            \"website\": \"https://element.io\"\r\n        },\r\n        \"Element UI\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"description\": \"Element UI is an open-source component library specifically designed for Vue.js, offering a collection of pre-designed UI components such as buttons, forms, tables, and modals.\",\r\n            \"website\": \"https://element.eleme.io/\"\r\n        },\r\n        \"Elementor\": {\r\n            \"cats\": [\r\n                51,\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"elementorfrontend.getelements\",\r\n                \"elementorfrontendconfig.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/elementor(?:-pro)?/.+frontend-modules\\\\.min\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^elementor\\\\s([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"Elementor is a website builder platform for professionals on WordPress.\",\r\n            \"website\": \"https://elementor.com\"\r\n        },\r\n        \"Elementor Cloud\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"elementor cloud\"\r\n            },\r\n            \"implies\": [\r\n                \"Elementor\",\r\n                \"WordPress\"\r\n            ],\r\n            \"description\": \"Elementor Cloud is a platform for creating and hosting WordPress websites with Elementor.\",\r\n            \"website\": \"https://elementor.com\"\r\n        },\r\n        \"Elementor Header \\u0026 Footer Builder\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"implies\": [\r\n                \"Elementor\"\r\n            ],\r\n            \"description\": \"Elementor Header \\u0026 Footer Builder is a simple yet powerful WordPress plugin that allows you to create a layout with Elementor and set it as.\",\r\n            \"website\": \"https://github.com/brainstormforce/header-footer-elementor\"\r\n        },\r\n        \"ElementsKit\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"elementskit\",\r\n                \"elementskit_helper\"\r\n            ],\r\n            \"description\": \"ElementsKit is an addon for Elementor that adds additional customisation options to the page builder.\",\r\n            \"website\": \"https://wpmet.com/plugin/elementskit\"\r\n        },\r\n        \"Elevar\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"elevar_gtm_errors\",\r\n                \"elevargtmsuite\",\r\n                \"webpackchunkelevar_gtm_suite_scripts\"\r\n            ],\r\n            \"description\": \"Elevar is an official Shopify Plus Partner data collection and marketing monitoring tool.\",\r\n            \"website\": \"https://www.getelevar.com\"\r\n        },\r\n        \"Eleventy\": {\r\n            \"cats\": [\r\n                57\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^eleventy\\\\sv([\\\\d\\\\.]+)$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"Eleventy (11ty) a simpler static site generator.\",\r\n            \"website\": \"https://www.11ty.dev\"\r\n        },\r\n        \"Elfsight\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.elfsight\\\\.com/\"\r\n            ],\r\n            \"description\": \"Elfsight is an all-in-one platform offering 70+ customisable widgets for websites.\",\r\n            \"website\": \"https://elfsight.com\"\r\n        },\r\n        \"Elixir\": {\r\n            \"cats\": [\r\n                27\r\n            ],\r\n            \"implies\": [\r\n                \"Erlang\"\r\n            ],\r\n            \"description\": \"Elixir is a dynamic, functional language designed for building scalable and maintainable applications.\",\r\n            \"website\": \"https://elixir-lang.org\"\r\n        },\r\n        \"ElkArte\": {\r\n            \"cats\": [\r\n                2\r\n            ],\r\n            \"js\": [\r\n                \"elk_forum_action\",\r\n                \"elk_iso_case_folding\"\r\n            ],\r\n            \"implies\": [\r\n                \"MySQL\"\r\n            ],\r\n            \"description\": \"ElkArte is an open-source PHP-based forum software with MySQL integration, offering features such as user authentication, topic categorisation, post formatting, private messaging, moderation tools, and customisable themes and extensions.\",\r\n            \"website\": \"https://www.elkarte.net\"\r\n        },\r\n        \"Ellucian CRM Recruit\": {\r\n            \"cats\": [\r\n                53,\r\n                101\r\n            ],\r\n            \"js\": [\r\n                \"ellucian.recruit\",\r\n                \"ellucianaddresschooselabel\"\r\n            ],\r\n            \"description\": \"Ellucian CRM Recruit is a comprehensive solution that supports your entire recruiting and admissions lifecycle.\",\r\n            \"website\": \"https://www.ellucian.com/solutions/ellucian-crm-recruit\"\r\n        },\r\n        \"Elm\": {\r\n            \"cats\": [\r\n                27,\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"elm.main.embed\",\r\n                \"elm.main.init\"\r\n            ],\r\n            \"description\": \"Elm is a statically typed functional programming language created by Evan Czaplicki in 2012 for building web applications.\",\r\n            \"website\": \"https://elm-lang.org/\"\r\n        },\r\n        \"Elm-ui\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cstyle\\u003e[\\\\s\\\\s]*\\\\.explain \\u003e \\\\.s[\\\\s\\\\s]*\\\\.explain \\u003e \\\\.ctr \\u003e \\\\.s\"\r\n            ],\r\n            \"implies\": [\r\n                \"Elm\"\r\n            ],\r\n            \"description\": \"Elm-UI is a library for creating user interfaces in Elm programming language. It provides a set of functions and abstractions for building responsive and reusable UI components, such as buttons, forms, and layouts, in a declarative and type-safe way.\",\r\n            \"website\": \"https://github.com/mdgriffith/elm-ui\"\r\n        },\r\n        \"Eloomi\": {\r\n            \"cats\": [\r\n                21\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//cdn\\\\.eloomi\\\\.com/\"\r\n            ],\r\n            \"description\": \"Eloomi is a cloud-based learning management system (LMS) and performance management platform.\",\r\n            \"website\": \"https://eloomi.com\"\r\n        },\r\n        \"Eloqua\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"cookies\": {\r\n                \"eloqua\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"_elq\",\r\n                \"_elqq\",\r\n                \"eloqcontactdata\",\r\n                \"eloquaactionsettings\",\r\n                \"elq_global\",\r\n                \"elqcookievalue\",\r\n                \"elqcuresite\",\r\n                \"elqload\",\r\n                \"elqsiteid\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"elqcfg\\\\.js\"\r\n            ],\r\n            \"description\": \"Eloqua is a Software-as-a-Service (SaaS) platform for marketing automation offered that aims to help B2B marketers and organisations manage marketing campaigns and sales lead generation.\",\r\n            \"website\": \"https://eloqua.com\"\r\n        },\r\n        \"EmailJS\": {\r\n            \"cats\": [\r\n                75\r\n            ],\r\n            \"js\": [\r\n                \"emailjs.sendform\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"([\\\\d\\\\.]+)?(?:/dist)?/email\\\\.min\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"EmailJS is a cloud-based email delivery service that allows you to send emails directly from your client-side JavaScript code without the need for a server-side implementation.\",\r\n            \"website\": \"https://www.emailjs.com\"\r\n        },\r\n        \"Emarsys\": {\r\n            \"cats\": [\r\n                32,\r\n                97\r\n            ],\r\n            \"js\": [\r\n                \"scarab\",\r\n                \"scarabqueue\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:static|cdn)\\\\.scarabresearch\\\\.com\"\r\n            ],\r\n            \"description\": \"Emarsys is a cloud-based B2C marketing platform.\",\r\n            \"website\": \"https://emarsys.com/\"\r\n        },\r\n        \"Ematic Solutions\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"ematicapikey\",\r\n                \"ematics\",\r\n                \"ematicsobject\",\r\n                \"ematicssubscribe\"\r\n            ],\r\n            \"description\": \"Ematic Solutions is part of Ematic Group and started to revolve around transforming email marketing into an ROI machine.\",\r\n            \"website\": \"https://www.ematicsolutions.com\"\r\n        },\r\n        \"EmbedPlus\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/youtube-embed-plus(?:-pro)?/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"EmbedPlus is a WordPress plugin for YouTube allows you to embed gallery, channel, playlist, or even live stream on your webpage.\",\r\n            \"website\": \"https://www.embedplus.com\"\r\n        },\r\n        \"EmbedSocial\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"embedsocialhashtag\",\r\n                \"embedsocialiframelightbox\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"embedsocial\\\\.com/\"\r\n            ],\r\n            \"description\": \"EmbedSocial is a social media management platform.\",\r\n            \"website\": \"https://embedsocial.com\"\r\n        },\r\n        \"EmbedThis Appweb\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"mbedthis-appweb(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"website\": \"https://embedthis.com/appweb\",\r\n            \"cpe\": \"cpe:2.3:a:embedthis:appweb:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Embedly\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"embedly\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.embedly\\\\.com/\"\r\n            ],\r\n            \"description\": \"Embedly is a service that allows developers to convert URLs into rich previews and embeddable content.\",\r\n            \"website\": \"https://embed.ly\"\r\n        },\r\n        \"Ember.js\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"ember\",\r\n                \"ember.version\",\r\n                \"emberenv\"\r\n            ],\r\n            \"scripts\": [\r\n                \"@overview\\\\s+ember -[\\\\s\\\\s]+@version\\\\s+(.+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"website\": \"https://emberjs.com\",\r\n            \"cpe\": \"cpe:2.3:a:emberjs:ember.js:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Emotion\": {\r\n            \"cats\": [\r\n                12,\r\n                47\r\n            ],\r\n            \"description\": \"Emotion is a library designed for writing CSS styles with JavaScript.\",\r\n            \"website\": \"https://emotion.sh\"\r\n        },\r\n        \"Emotive\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"emotivepopupinitializing\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"emotivecdn\\\\.io/\"\r\n            ],\r\n            \"description\": \"Emotive is a computer software company that provides SaaS, Mobile Marketing, NLP, machine learning, and B2B.\",\r\n            \"website\": \"https://emotive.io\"\r\n        },\r\n        \"Empretienda\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"headers\": {\r\n                \"set-cookie\": \"^empretienda_session\"\r\n            },\r\n            \"description\": \"Empretienda is a platform that allows you to create and manage your own online store.\",\r\n            \"website\": \"https://www.empretienda.com\"\r\n        },\r\n        \"Enable\": {\r\n            \"cats\": [\r\n                68\r\n            ],\r\n            \"js\": [\r\n                \"enable_toolbar.is_premium\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.enable\\\\.co\\\\.il/\"\r\n            ],\r\n            \"description\": \"Enable is a web accessibility plugin by uPress.\",\r\n            \"website\": \"https://www.enable.co.il\"\r\n        },\r\n        \"Endurance Page Cache\": {\r\n            \"cats\": [\r\n                87,\r\n                23\r\n            ],\r\n            \"headers\": {\r\n                \"x-endurance-cache-level\": \"\"\r\n            },\r\n            \"description\": \"Endurance Page Cache adds basic file-based caching to WordPress.\",\r\n            \"website\": \"https://github.com/bluehost/endurance-page-cache\"\r\n        },\r\n        \"Engagio\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"web-analytics\\\\.engagio\\\\.com/api/\",\r\n                \"web-analytics\\\\.engagio\\\\.com/js/ei\\\\.js\"\r\n            ],\r\n            \"website\": \"https://www.engagio.com/\"\r\n        },\r\n        \"Engintron\": {\r\n            \"cats\": [\r\n                33\r\n            ],\r\n            \"headers\": {\r\n                \"x-server-powered-by\": \"^engintron$\"\r\n            },\r\n            \"description\": \"Engintron is a plugin that integrates Nginx to cPanel/WHM server.\",\r\n            \"website\": \"https://github.com/engintron/engintron\"\r\n        },\r\n        \"Enigma\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/enigma/\"\r\n            ],\r\n            \"description\": \"Enigma is the popular superfine multipurpose responsive WordPress theme from Infigo Software.\",\r\n            \"website\": \"https://wordpress.org/themes/enigma\"\r\n        },\r\n        \"Enjin CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"enjin_core_storage_cache\",\r\n                \"enjin_ui\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.enjin\\\\.com/\"\r\n            ],\r\n            \"description\": \"Enjin CMS is a content management system which focused creation of websites for gaming guilds, clans, Minecraft servers, or fan communities.\",\r\n            \"website\": \"https://www.enjin.com\"\r\n        },\r\n        \"Enlistly\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.enlistly\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Enlistly tracks referral orders in realtime. Orders that are partially refunded, refunded, or cancelled update on the fly.\",\r\n            \"website\": \"https://enlistly.com\"\r\n        },\r\n        \"Ensi\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"headers\": {\r\n                \"x-ensi-platform\": \"\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"ensi platform\"\r\n                ]\r\n            },\r\n            \"description\": \"Ensi is an open source ecommerce platform based on service oriented architecture.\",\r\n            \"website\": \"https://ensi.tech\"\r\n        },\r\n        \"Ensighten\": {\r\n            \"cats\": [\r\n                42\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//nexus\\\\.ensighten\\\\.com/\"\r\n            ],\r\n            \"description\": \"Ensighten is a solution that enables secure management, implementation and control of website technologies.\",\r\n            \"website\": \"https://success.ensighten.com/hc/en-us\"\r\n        },\r\n        \"Envialia\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"website\": \"https://www.envialia.com\"\r\n        },\r\n        \"Envo Shop\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/envo-shop/.+customscript\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Envo Shop is a fast, clean and modern-looking responsive free WooCommerce WordPress theme by Envo Themes.\",\r\n            \"website\": \"https://envothemes.com/free-envo-shop\"\r\n        },\r\n        \"Envo Storefront\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/envo-storefront/.+customscript\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Envo Storefront is a fast, clean and modern-looking responsive WooCommerce theme for WordPress.\",\r\n            \"website\": \"https://envothemes.com/free-envo-storefront\"\r\n        },\r\n        \"Envo eCommerce\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/envo-ecommerce/.+customscript\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Envo eCommerce is a fast, clean and modern-looking responsive free WooCommerce theme for WordPress.\",\r\n            \"website\": \"https://envothemes.com/free-envo-ecommerce/\"\r\n        },\r\n        \"Envoy\": {\r\n            \"cats\": [\r\n                64\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^envoy$\",\r\n                \"x-envoy-upstream-service-time\": \"\"\r\n            },\r\n            \"description\": \"Envoy is an open-source edge and service proxy, designed for cloud-native applications.\",\r\n            \"website\": \"https://www.envoyproxy.io/\",\r\n            \"cpe\": \"cpe:2.3:a:envoyproxy:envoy:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Envybox\": {\r\n            \"cats\": [\r\n                5,\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"envywidget\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"static\\\\.saas-support\\\\.com/\"\r\n            ],\r\n            \"description\": \"Envybox is a multiservice for increasing sales.\",\r\n            \"website\": \"https://envybox.io\"\r\n        },\r\n        \"Enyo\": {\r\n            \"cats\": [\r\n                12,\r\n                26\r\n            ],\r\n            \"js\": [\r\n                \"enyo\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"enyo\\\\.js\"\r\n            ],\r\n            \"description\": \"Enyo is an open-source JavaScript framework for cross-platform for mobile, desktop, TV and web applications.\",\r\n            \"website\": \"https://enyojs.com\"\r\n        },\r\n        \"Epoch\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]+?href=\\\"[^\\\"]+epoch(?:\\\\.min)?\\\\.css\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"epoch(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"D3\"\r\n            ],\r\n            \"website\": \"https://fastly.github.io/epoch\"\r\n        },\r\n        \"Epom\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"epomcustomparams\"\r\n            ],\r\n            \"website\": \"https://epom.com\"\r\n        },\r\n        \"EqualWeb\": {\r\n            \"cats\": [\r\n                68\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.equalweb\\\\.com.*\\\\.js\"\r\n            ],\r\n            \"description\": \"EqualWeb provides a web accessibility overlay, and helps some people with disabilities access digital information.\",\r\n            \"website\": \"https://www.equalweb.com/\"\r\n        },\r\n        \"EraofEcom Cartroids\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"cartroids.appbase\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"EraofEcom Cartroids makes it easy for you to create highly targeted upsells, cross-sells and bundle offers.\",\r\n            \"website\": \"https://eraofecom.org/collections/tech/products/cartroids\"\r\n        },\r\n        \"EraofEcom MTL\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"mtl\\\\.eraofecom\\\\.org\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"EraofEcom MTL is a Shopify pop up app that enables you to catch your website visitors.\",\r\n            \"website\": \"https://eraofecom.org/collections/tech/products/milk-the-leads\"\r\n        },\r\n        \"EraofEcom WinAds\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"win_ads.baseurl\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"EraofEcom WinAds is an all-in-one Facebook pixel app for Shopify.\",\r\n            \"website\": \"https://eraofecom.org/collections/tech/products/win-ads-manager\"\r\n        },\r\n        \"Erlang\": {\r\n            \"cats\": [\r\n                27\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"erlang( otp/(?:[\\\\d.abr-]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"Erlang is a general-purpose, concurrent, functional programming language, and a garbage-collected runtime system.\",\r\n            \"website\": \"https://www.erlang.org\",\r\n            \"cpe\": \"cpe:2.3:a:erlang:erlang%2fotp:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Errorception\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"_errs\"\r\n            ],\r\n            \"description\": \"Errorception is a error reporting service for client-side in-browser JavaScript errors.\",\r\n            \"website\": \"https://errorception.com\"\r\n        },\r\n        \"Essent SiteBuilder Pro\": {\r\n            \"cats\": [\r\n                1,\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^essent® sitebuilder pro$\"\r\n                ]\r\n            },\r\n            \"description\": \"Essent SiteBuilder Pro is a fully-integrated web-based website design system, content management and ecommerce system.\",\r\n            \"website\": \"https://www.essent.com/SiteBuilderPro.html\"\r\n        },\r\n        \"Essential Addons for Elementor\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/uploads/essential-addons-elementor/\"\r\n            ],\r\n            \"description\": \"Essential Addons for Elementor gives you 70+ creative elements and extensions to help you extend the stock features of Elementor page builder.\",\r\n            \"website\": \"https://essential-addons.com/elementor/\"\r\n        },\r\n        \"Essential JS 2\": {\r\n            \"cats\": [\r\n                12,\r\n                59\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c[^\\u003e]+ class ?= ?\\\"(?:e-control|[^\\\"]+ e-control)(?: )[^\\\"]* e-lib\\\\b\"\r\n            ],\r\n            \"website\": \"https://www.syncfusion.com/javascript-ui-controls\"\r\n        },\r\n        \"Estore Compare\": {\r\n            \"cats\": [\r\n                74\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\d+\\\\.estore\\\\.jp/\"\r\n            ],\r\n            \"description\": \"Estore Compare is a website optimisation software that offers A/B testing, CVR and LTV measuring tools.\",\r\n            \"website\": \"https://estore.co.jp/estorecompare/\"\r\n        },\r\n        \"Estore Shopserve\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cart\\\\d+\\\\.shopserve\\\\.jp/\"\r\n            ],\r\n            \"description\": \"Estore Shopserve is an all-in-one payment processing and ecommerce solution.\",\r\n            \"website\": \"https://estore.co.jp/shopserve\"\r\n        },\r\n        \"Etherpad\": {\r\n            \"cats\": [\r\n                24\r\n            ],\r\n            \"js\": [\r\n                \"padeditbar\",\r\n                \"padimpexp\"\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^etherpad\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"/ep_etherpad-lite/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Node.js\"\r\n            ],\r\n            \"description\": \"Etherpad is an open-source, web-based collaborative real-time editor, allowing authors to simultaneously edit a text document, and see all of the participants' edits in real-time, with the ability to display each author's text in their own colour.\",\r\n            \"website\": \"https://etherpad.org\",\r\n            \"cpe\": \"cpe:2.3:a:etherpad:etherpad:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Ethers\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"_ethers\"\r\n            ],\r\n            \"description\": \"Ethers is a complete, tiny and simple Ethereum library.\",\r\n            \"website\": \"https://ethers.org/\"\r\n        },\r\n        \"EthicalAds\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"media\\\\.ethicalads\\\\.io\"\r\n            ],\r\n            \"description\": \"EthicalAds is a privacy-preserving ad network targeting developers.\",\r\n            \"website\": \"https://www.ethicalads.io/\"\r\n        },\r\n        \"Eticex\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.eticex\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\",\r\n                \"React\"\r\n            ],\r\n            \"description\": \"Eticex is as an ecommerce infrastructure provider that offers ecommerce packages and customisable high-performance ecommerce solutions.\",\r\n            \"website\": \"https://www.eticex.com\"\r\n        },\r\n        \"Etix\": {\r\n            \"cats\": [\r\n                104\r\n            ],\r\n            \"js\": [\r\n                \"etix.javacontext\"\r\n            ],\r\n            \"description\": \"Etix is an international web-based ticketing service provider for the entertainment, travel, and sports industries.\",\r\n            \"website\": \"https://hello.etix.com\"\r\n        },\r\n        \"Etracker\": {\r\n            \"cats\": [\r\n                10,\r\n                74\r\n            ],\r\n            \"js\": [\r\n                \"_etracker\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.etracker\\\\.com\"\r\n            ],\r\n            \"description\": \"Etracker is a web optimisation solution.\",\r\n            \"website\": \"https://www.etracker.com\"\r\n        },\r\n        \"EventOn\": {\r\n            \"cats\": [\r\n                72,\r\n                87\r\n            ],\r\n            \"description\": \"EventON is event calendar for WordPress.\",\r\n            \"website\": \"https://www.myeventon.com\"\r\n        },\r\n        \"Everflow\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"everflow\\\\.js\"\r\n            ],\r\n            \"description\": \"Everflow is a partner marketing analytics platform.\",\r\n            \"website\": \"https://www.everflow.io\"\r\n        },\r\n        \"EveryAction\": {\r\n            \"cats\": [\r\n                111\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.everyaction\\\\.com/\"\r\n            ],\r\n            \"description\": \"EveryAction provides fundraising software, donor management software, and CRM software to nonprofit organisations.\",\r\n            \"website\": \"https://www.everyaction.com\"\r\n        },\r\n        \"Eveve\": {\r\n            \"cats\": [\r\n                5,\r\n                72\r\n            ],\r\n            \"html\": [\r\n                \"\\u003ciframe[^\\u003e]*[\\\\w]+\\\\.eveve\\\\.com\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Eveve is a restaurant table booking widget.\",\r\n            \"website\": \"https://www.eveve.com\"\r\n        },\r\n        \"Evidon\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"js\": [\r\n                \"eb.evidonconsent\",\r\n                \"evidon\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.evidon\\\\.com/\"\r\n            ],\r\n            \"description\": \"Evidon is a transparency company that helps organizations educate consumers on how and why data is collected, as well as provide consumers with the ability to give and withdraw consent to their data being used.\",\r\n            \"website\": \"https://www.evidon.com\"\r\n        },\r\n        \"ExactMetrics\": {\r\n            \"cats\": [\r\n                87,\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"exactmetrics\",\r\n                \"exactmetrics_frontend\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/google-analytics-dashboard-for-wp/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"ExactMetrics (formerly Google Analytics Dashboard for WP) plugin helps you properly setup all the powerful Google Analytics tracking features without writing any code or hiring a developer.\",\r\n            \"website\": \"https://www.exactmetrics.com\"\r\n        },\r\n        \"Exemptify\": {\r\n            \"cats\": [\r\n                106,\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"exemptifytriggerupdate\",\r\n                \"m4u_ex_vat_postfix_txt\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.modules4u\\\\.biz/shopify/exemptify\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Exemptify allows you to conduct proper EU B2B transactions by validating EU VAT IDs.\",\r\n            \"website\": \"https://modules4u.biz/exemptify\"\r\n        },\r\n        \"Exhibit\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"exhibit\",\r\n                \"exhibit.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"exhibit.*\\\\.js\"\r\n            ],\r\n            \"website\": \"https://simile-widgets.org/exhibit/\"\r\n        },\r\n        \"ExitIntel\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"exitintel.version\",\r\n                \"exitintelaccount\",\r\n                \"exitintelconfig\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:get.)?exitintel\\\\.com\"\r\n            ],\r\n            \"description\": \"ExitIntel is a full service conversion optimisation agency that focuses on ecommerce companies.\",\r\n            \"website\": \"https://exitintelligence.com\"\r\n        },\r\n        \"ExoClick\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.exoclick\\\\.com/\"\r\n            ],\r\n            \"meta\": {\r\n                \"exoclick-site-verification\": []\r\n            },\r\n            \"description\": \"ExoClick is a Barcelona-based online advertising company, which provides online advertising services to both advertisers and publishers.\",\r\n            \"website\": \"https://www.exoclick.com\"\r\n        },\r\n        \"ExpertRec\": {\r\n            \"cats\": [\r\n                29\r\n            ],\r\n            \"js\": [\r\n                \"_er_config\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"expertrec\\\\.com/api/js/ci_common\\\\.js\\\\?id=.*\"\r\n            ],\r\n            \"description\": \"ExpertRec is a collaborative Web search engine, which allows users share search histories through a web browser.\",\r\n            \"website\": \"https://www.expertrec.com/\"\r\n        },\r\n        \"Expivi\": {\r\n            \"cats\": [\r\n                105\r\n            ],\r\n            \"js\": [\r\n                \"expivi\",\r\n                \"expivicomponent\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.expivi\\\\.(?:com|net)/\"\r\n            ],\r\n            \"description\": \"Expivi specialises in 3D visualisation technology for ecommerce stores.\",\r\n            \"website\": \"https://www.expivi.com\"\r\n        },\r\n        \"Exponea\": {\r\n            \"cats\": [\r\n                97\r\n            ],\r\n            \"js\": [\r\n                \"exponea.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:\\\\.exponea\\\\.com)?/js/exponea\\\\.min\\\\.js\"\r\n            ],\r\n            \"description\": \"Exponea is a cloud-based marketing analysis platform suitable for large and midsize organisations in a variety of industries.\",\r\n            \"website\": \"https://go.exponea.com\"\r\n        },\r\n        \"Express\": {\r\n            \"cats\": [\r\n                18,\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^express(?:$|,)\"\r\n            },\r\n            \"implies\": [\r\n                \"Node.js\"\r\n            ],\r\n            \"description\": \"Express is a web application framework for Node.js, released as free and open-source software under the MIT License. It is designed for building web applications and APIs.\",\r\n            \"website\": \"https://expressjs.com\",\r\n            \"cpe\": \"cpe:2.3:a:expressjs:express:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"ExpressionEngine\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"exp_csrf_token\": \"\",\r\n                \"exp_last_activity\": \"\",\r\n                \"exp_tracker\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"ExpressionEngine is a free and open-source CMS.\",\r\n            \"website\": \"https://expressionengine.com/\",\r\n            \"cpe\": \"cpe:2.3:a:ellislab:expressionengine:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"ExtJS\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"ext\",\r\n                \"ext.version\",\r\n                \"ext.versions.extjs.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"ext-base\\\\.js\"\r\n            ],\r\n            \"website\": \"https://www.sencha.com\",\r\n            \"cpe\": \"cpe:2.3:a:sencha:ext_js:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"ExtendThemes Calliope\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/calliope/\"\r\n            ],\r\n            \"description\": \"ExtendThemes Calliope is an flexible, multipurpose WordPress child theme of Colibri WP.\",\r\n            \"website\": \"https://wordpress.org/themes/calliope\"\r\n        },\r\n        \"ExtendThemes EmpowerWP\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/empowerwp(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"ExtendThemes EmpowerWP is an flexible, multipurpose WordPress theme.\",\r\n            \"website\": \"https://extendthemes.com/empowerwp\"\r\n        },\r\n        \"ExtendThemes Highlight\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/highlight(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"ExtendThemes Highlight is an flexible, multipurpose WordPress theme.\",\r\n            \"website\": \"https://extendthemes.com/highlight\"\r\n        },\r\n        \"ExtendThemes Materialis\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"materialis_theme_pro_settings\",\r\n                \"materialissetheadertopspacing\",\r\n                \"materialistheme\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/materialis(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"ExtendThemes Materialis is an flexible, multipurpose WordPress theme.\",\r\n            \"website\": \"https://extendthemes.com/materialis\"\r\n        },\r\n        \"ExtendThemes Mesmerize\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"mesmerizedomready\",\r\n                \"mesmerizefooterparalax\",\r\n                \"mesmerizekube\",\r\n                \"mesmerizemenusticky\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/mesmerize(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"ExtendThemes Mesmerize is an flexible, multipurpose WordPress theme.\",\r\n            \"website\": \"https://extendthemes.com/mesmerize\"\r\n        },\r\n        \"Extole\": {\r\n            \"cats\": [\r\n                94,\r\n                84\r\n            ],\r\n            \"js\": [\r\n                \"extole.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.(?:extole|xtlo)\\\\.(?:com|net)/\"\r\n            ],\r\n            \"description\": \"Extole is an online marketing platform that enables brands and businesses to get new customers through loyalty and referral programs.\",\r\n            \"website\": \"https://www.extole.com\"\r\n        },\r\n        \"Ezoic\": {\r\n            \"cats\": [\r\n                10,\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"ezoica\",\r\n                \"ezoicbanger\",\r\n                \"ezoictestactive\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.ezo(?:js|ic|dn)\\\\.(?:com|net)\"\r\n            ],\r\n            \"description\": \"Ezoic is a website optimisation platform for digital publishers and website owners powered by machine learning.\",\r\n            \"website\": \"https://www.ezoic.com\"\r\n        },\r\n        \"F5 BigIP\": {\r\n            \"cats\": [\r\n                64\r\n            ],\r\n            \"cookies\": {\r\n                \"f5_fullwt\": \"\",\r\n                \"f5_ht_shrinked\": \"\",\r\n                \"f5_st\": \"\",\r\n                \"lastmrh_session\": \"\",\r\n                \"mrhsequence\": \"\",\r\n                \"mrhsession\": \"\",\r\n                \"mrhshint\": \"\",\r\n                \"tin\": \"\"\r\n            },\r\n            \"headers\": {\r\n                \"server\": \"^big-?ip$\"\r\n            },\r\n            \"description\": \"F5's BIG-IP is a family of products covering software and hardware designed around application availability, access control, and security solutions.\",\r\n            \"website\": \"https://www.f5.com/products/big-ip-services\",\r\n            \"cpe\": \"cpe:2.3:a:f5:big-ip:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"FARFETCH Black \\u0026 White\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn-static\\\\.farfetch-contents.com\\\\.js\"\r\n            ],\r\n            \"description\": \"Farfetch Platform Solutions is a full service platform and agency providing end-to-end, multichannel e-commerce solutions for luxury fashion brands under the name Farfetch Black \\u0026 White.\",\r\n            \"website\": \"https://www.farfetchplatformsolutions.com/\"\r\n        },\r\n        \"FAST ESP\": {\r\n            \"cats\": [\r\n                29\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cform[^\\u003e]+id=\\\"fastsearch\\\"\"\r\n            ],\r\n            \"description\": \"FAST ESP is a service-oriented architecture development platform which is geared towards production searchable indexes. It provided a flexible framework for creating ETL applications for efficient indexing of searchable content.\",\r\n            \"website\": \"https://microsoft.com/enterprisesearch\"\r\n        },\r\n        \"FAST Search for SharePoint\": {\r\n            \"cats\": [\r\n                29\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cinput[^\\u003e]+ name=\\\"parametricsearch\"\r\n            ],\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\",\r\n                \"Microsoft SharePoint\"\r\n            ],\r\n            \"description\": \"FAST Search for SharePoint is the search engine for Microsoft's SharePoint collaboration platform. Its purpose is helping SharePoint users locate and retrieve stored enterprise content.\",\r\n            \"website\": \"https://sharepoint.microsoft.com/en-us/product/capabilities/search/Pages/Fast-Search.aspx\"\r\n        },\r\n        \"FUDforum\": {\r\n            \"cats\": [\r\n                2\r\n            ],\r\n            \"js\": [\r\n                \"fud_msg_focus\",\r\n                \"fud_tree_msg_focus\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\",\r\n                \"Perl\"\r\n            ],\r\n            \"description\": \"FUDforum is a discussion forum software with support for posts, topics, polls and attachments.\",\r\n            \"website\": \"https://github.com/fudforum/FUDforum\",\r\n            \"cpe\": \"cpe:2.3:a:fudforum:fudforum:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Fabric\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"powered-by\": [\r\n                    \"fabricinc\"\r\n                ]\r\n            },\r\n            \"description\": \"Fabric is a headless commerce platform helping direct-to-consumer and B2B brands utilize an ecommerce platform designed for their needs.\",\r\n            \"website\": \"https://fabric.inc\"\r\n        },\r\n        \"Facebook Ads\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"description\": \"Facebook Ads is an online advertising platform developed by Facebook.\",\r\n            \"website\": \"https://www.facebook.com/business/ads\"\r\n        },\r\n        \"Facebook Chat Plugin\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"facebookchatsettings\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"connect\\\\.facebook\\\\.net/.+\\\\.customerchat\\\\.js\"\r\n            ],\r\n            \"description\": \"Facebook Chat Plugin is a website plugin that businesses with a Facebook Page can install on their website.\",\r\n            \"website\": \"https://developers.facebook.com/docs/messenger-platform/discovery/facebook-chat-plugin/\"\r\n        },\r\n        \"Facebook Login\": {\r\n            \"cats\": [\r\n                69\r\n            ],\r\n            \"js\": [\r\n                \"fb.getloginstatus\"\r\n            ],\r\n            \"description\": \"Facebook Login is a way for people to create accounts and log into your app across multiple platforms.\",\r\n            \"website\": \"https://developers.facebook.com/docs/facebook-login/\"\r\n        },\r\n        \"Facebook Pay\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"description\": \"Facebook pay is a payment solution which can be used on any site or app outside Facebook ecosystem.\",\r\n            \"website\": \"https://pay.facebook.com/\"\r\n        },\r\n        \"Facebook Pixel\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"_fbq\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"connect\\\\.facebook.\\\\w+/signals/config/\\\\d+\\\\?v=([\\\\d\\\\.]+)\\\\;version:\\\\1\",\r\n                \"connect\\\\.facebook\\\\.\\\\w+/.+/fbevents\\\\.js\"\r\n            ],\r\n            \"description\": \"Facebook pixel is an analytics tool that allows you to measure the effectiveness of your advertising.\",\r\n            \"website\": \"https://facebook.com\"\r\n        },\r\n        \"Facil-iti\": {\r\n            \"cats\": [\r\n                68\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"ws\\\\.facil-iti\\\\.com/tag/faciliti-tag\\\\.min\\\\.js\"\r\n            ],\r\n            \"description\": \"Facil-iti is a web accessibility overlay which provides support for some people with disabilities and seniors.\",\r\n            \"website\": \"https://www.facil-iti.com/\"\r\n        },\r\n        \"Fact Finder\": {\r\n            \"cats\": [\r\n                29\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- factfinder\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"suggest\\\\.ff\"\r\n            ],\r\n            \"description\": \"Fact Finder is a platform which, combines search, navigation, and merchandising solutions to streamline online search and power sales.\",\r\n            \"website\": \"https://fact-finder.com\"\r\n        },\r\n        \"FalguniThemes Nisarg\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"nisargpro_script_vars\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/nisarg(?:pro)?/\"\r\n            ],\r\n            \"description\": \"FalguniThemes Nisarg is a new fully responsive and translation ready WordPress theme.\",\r\n            \"website\": \"https://www.falgunithemes.com/downloads/nisarg\"\r\n        },\r\n        \"FameThemes OnePress\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"onepress_js_settings\",\r\n                \"onepress_plus\",\r\n                \"onepressismobile\"\r\n            ],\r\n            \"description\": \"FameThemes OnePress is a free portfolio one page WordPress theme suited for an individual or digital agency.\",\r\n            \"website\": \"https://www.famethemes.com/themes/onepress\"\r\n        },\r\n        \"FameThemes Screenr\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"screenr.autoplay\",\r\n                \"screenr_plus\"\r\n            ],\r\n            \"description\": \"FameThemes Screenr is a fullscreen parallax WordPress theme suited for business, portfolio, digital agency, freelancers.\",\r\n            \"website\": \"https://www.famethemes.com/themes/screenr\"\r\n        },\r\n        \"FancyBox\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"$.fancybox.version\",\r\n                \"fancybox.version\",\r\n                \"jquery.fancybox.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"jquery\\\\.fancybox(?:\\\\.pack|\\\\.min)?\\\\.js(?:\\\\?v=([\\\\d.]+))?$\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"FancyBox is a tool for displaying images, html content and multi-media in a Mac-style 'lightbox' that floats overtop of web page.\",\r\n            \"website\": \"https://fancyapps.com/fancybox\"\r\n        },\r\n        \"Fanplayr\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"fanplayr.platform.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.fanplayr\\\\.com/.+/([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Fanplayr is a real-time insights platform that provides website optimisation and personalisation solutions for businesses.\",\r\n            \"website\": \"https://fanplayr.com\"\r\n        },\r\n        \"FaraPy\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- powered by farapy.\"\r\n            ],\r\n            \"implies\": [\r\n                \"Python\"\r\n            ],\r\n            \"website\": \"https://faral.tech\"\r\n        },\r\n        \"FareHarbor\": {\r\n            \"cats\": [\r\n                5,\r\n                72\r\n            ],\r\n            \"html\": [\r\n                \"\\u003ciframe[^\\u003e]+fareharbor\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"fareharbor\\\\.com/embeds/api/\"\r\n            ],\r\n            \"description\": \"FareHarbor is an booking and schedule management solution intended for tour and activity companies.\",\r\n            \"website\": \"https://fareharbor.com\"\r\n        },\r\n        \"Fast Bundle\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"fastbundleconf.bundlebox\",\r\n                \"fastbundleconf.cartinfo.app_version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"api\\\\.fastbundle\\\\.co/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Fast Bundle gives you the ability to create product bundle offers with discounts.\",\r\n            \"website\": \"https://fastbundle.co\"\r\n        },\r\n        \"Fast Checkout\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"fast.events\",\r\n                \"fast_version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"js\\\\.fast\\\\.co/\"\r\n            ],\r\n            \"description\": \"Fast Checkout is a one-click purchases for buyers without requiring a password to log in.\",\r\n            \"website\": \"https://www.fast.co\"\r\n        },\r\n        \"FastComet\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"description\": \"FastComet is a hosting service company from San Francisco, California.\",\r\n            \"website\": \"https://www.fastcomet.com\"\r\n        },\r\n        \"Fastcommerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^fastcommerce\"\r\n                ]\r\n            },\r\n            \"website\": \"https://www.fastcommerce.com.br\"\r\n        },\r\n        \"Fasterize\": {\r\n            \"cats\": [\r\n                92\r\n            ],\r\n            \"js\": [\r\n                \"fstrz\"\r\n            ],\r\n            \"description\": \"Fasterize is a website accelerator service.\",\r\n            \"website\": \"https://www.fasterize.com/\"\r\n        },\r\n        \"Fastly\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"headers\": {\r\n                \"fastly-debug-digest\": \"\",\r\n                \"server\": \"fastly\",\r\n                \"vary\": \"fastly-ssl\",\r\n                \"x-fastly-origin\": \"\",\r\n                \"x-fastly-request-id\": \"\",\r\n                \"x-via-fastly:\": \"\"\r\n            },\r\n            \"description\": \"Fastly is a cloud computing services provider. Fastly's cloud platform provides a content delivery network, Internet security services, load balancing, and video \\u0026 streaming services.\",\r\n            \"website\": \"https://www.fastly.com\"\r\n        },\r\n        \"Fastspring\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"html\": [\r\n                \"\\u003ca [^\\u003e]*href=\\\"https?://sites\\\\.fastspring\\\\.com\",\r\n                \"\\u003cform [^\\u003e]*action=\\\"https?://sites\\\\.fastspring\\\\.com\"\r\n            ],\r\n            \"website\": \"https://fastspring.com\"\r\n        },\r\n        \"Fat Zebra\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c(?:iframe)[^\\u003e]+fatzebraframe\",\r\n                \"\\u003c(?:iframe|img|form)[^\\u003e]+paynow\\\\.pmnts\\\\.io\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"paynow\\\\.pmnts\\\\.io\"\r\n            ],\r\n            \"description\": \"Fat Zebra provides a process of accepting credit card payments online.\",\r\n            \"website\": \"https://www.fatzebra.com/\"\r\n        },\r\n        \"Fat-Free Framework\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^fat-free framework$\"\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://fatfreeframework.com\"\r\n        },\r\n        \"FatherShops\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"fathershop/view/theme/fs/\"\r\n            ],\r\n            \"description\": \"FatherShops is an ecommerce platform.\",\r\n            \"website\": \"https://fathershops.com\"\r\n        },\r\n        \"Fathom\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"fathom.blocktrackingforme\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.usefathom\\\\.com/\"\r\n            ],\r\n            \"description\": \"Fathom is easy-yet-powerful website analytics that protects digital privacy.\",\r\n            \"website\": \"https://usefathom.com\"\r\n        },\r\n        \"Fbits\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"fbits\"\r\n            ],\r\n            \"website\": \"https://www.traycorp.com.br\"\r\n        },\r\n        \"FeatherX\": {\r\n            \"cats\": [\r\n                90\r\n            ],\r\n            \"js\": [\r\n                \"featherx.clientid\"\r\n            ],\r\n            \"description\": \"FeatherX captures content from all major reviews and social media channels.\",\r\n            \"website\": \"https://featherx.ai\"\r\n        },\r\n        \"FedEx\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"FedEx is an American multinational company which focuses on transportation, ecommerce and business services.\",\r\n            \"website\": \"https://www.fedex.com\"\r\n        },\r\n        \"Fedora\": {\r\n            \"cats\": [\r\n                28\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"fedora\"\r\n            },\r\n            \"description\": \"Fedora is a free open-source Linux-based operating system.\",\r\n            \"website\": \"https://fedoraproject.org\",\r\n            \"cpe\": \"cpe:2.3:o:fedoraproject:fedora:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Feedback Fish\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^https://feedback\\\\.fish/ff\\\\.js\"\r\n            ],\r\n            \"description\": \"Feedback Fish is a widget for collecting website feedback from users.\",\r\n            \"website\": \"https://feedback.fish\"\r\n        },\r\n        \"Feefo\": {\r\n            \"cats\": [\r\n                90\r\n            ],\r\n            \"js\": [\r\n                \"feefotracker\",\r\n                \"feefowidget\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.feefo\\\\.com/\"\r\n            ],\r\n            \"description\": \"Feefo is a cloud-based consumer review and rating management software.\",\r\n            \"website\": \"https://www.feefo.com\"\r\n        },\r\n        \"Fenicio\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"_fn.validadortelefono\",\r\n                \"fnecommerce.micompravisto\",\r\n                \"fnwishlist.cargarinfoarticulos\"\r\n            ],\r\n            \"description\": \"Fenicio is a cloud platform that handles all aspects of ecommerce sales channel operation and management.\",\r\n            \"website\": \"https://fenicio.io\"\r\n        },\r\n        \"Fera\": {\r\n            \"cats\": [\r\n                90\r\n            ],\r\n            \"js\": [\r\n                \"fera\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.fera\\\\.ai\"\r\n            ],\r\n            \"description\": \"Fera is a product review and social proof application for ecommerce websites.\",\r\n            \"website\": \"https://fera.ai/\"\r\n        },\r\n        \"Fera Product Reviews App\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"ferajsurl\"\r\n            ],\r\n            \"implies\": [\r\n                \"Fera\",\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Fera Product Reviews App is a product review and social proof app for Shopify.\",\r\n            \"website\": \"https://apps.shopify.com/fera\"\r\n        },\r\n        \"FilePond\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"filepond\",\r\n                \"filepond.create\",\r\n                \"filepond.setoptions\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"filepond.js\"\r\n            ],\r\n            \"description\": \"FilePond is a JavaScript library for file uploads.\",\r\n            \"website\": \"https://pqina.nl/filepond/\"\r\n        },\r\n        \"FinanceAds\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"description\": \"FinanceAds is a performance marketing agency that has grown affiliate network for the financial sector.\",\r\n            \"website\": \"https://www.financeads.com\"\r\n        },\r\n        \"Findify\": {\r\n            \"cats\": [\r\n                29,\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"findify\",\r\n                \"findifyanalytics\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"@findify/bundle@([\\\\d.]+)/dist/.+\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Findify is an intelligent ecommerce search, navigation and personalisation solution.\",\r\n            \"website\": \"https://www.findify.io\"\r\n        },\r\n        \"Findmeashoe\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"fmasgendersizetextvariantidcollection\",\r\n                \"fmasjavascript\",\r\n                \"fmasuniversalwidgetjsfilename\"\r\n            ],\r\n            \"description\": \"Findmeashoe is a footwear recommendation portal that aims to improve shopping efficiency and experience of footwear shoppers.\",\r\n            \"website\": \"https://findmeashoe.com\"\r\n        },\r\n        \"Fing\": {\r\n            \"cats\": [\r\n                62\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^fing\"\r\n            },\r\n            \"description\": \"Fing is a cloud service to deploy and manage your applications without being worried about your infrastructure and environment.\",\r\n            \"website\": \"https://fing.ir\"\r\n        },\r\n        \"FingerprintJS\": {\r\n            \"cats\": [\r\n                59,\r\n                83\r\n            ],\r\n            \"js\": [\r\n                \"fingerprint\",\r\n                \"fingerprint2\",\r\n                \"fingerprint2.version\",\r\n                \"fingerprintjs\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"fingerprint(?:/fp)?(\\\\d)?(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\",\r\n                \"fingerprintjs(?:\\\\-pro|2)?(?:@|/)(\\\\d.*?)?/\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"FingerprintJS is a browser fingerprinting library that queries browser attributes and computes a hashed visitor identifier from them.\",\r\n            \"website\": \"https://fingerprintjs.com\"\r\n        },\r\n        \"FintechOS\": {\r\n            \"cats\": [\r\n                58\r\n            ],\r\n            \"js\": [\r\n                \"ftos.core.getb2cculture\",\r\n                \"ftoschat\"\r\n            ],\r\n            \"meta\": {\r\n                \"ftos-app-version\": [\r\n                    \"\\\\sv([\\\\d\\\\.]+)\\\\s\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"FintechOS is a low-code platform for banking and insurance.\",\r\n            \"website\": \"https://fintechos.com\"\r\n        },\r\n        \"FireApps Ali Reviews\": {\r\n            \"cats\": [\r\n                100,\r\n                90\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//alireviews\\\\.fireapps\\\\.io/\"\r\n            ],\r\n            \"description\": \"FireApps Ali Reviews is an all-in-one solution that helps to collect, showcase, and manage impactful reviews.\",\r\n            \"website\": \"https://apps.shopify.com/ali-reviews\"\r\n        },\r\n        \"Firebase\": {\r\n            \"cats\": [\r\n                34,\r\n                47\r\n            ],\r\n            \"js\": [\r\n                \"firebase.sdk_version\"\r\n            ],\r\n            \"headers\": {\r\n                \"vary\": \"x-fh-requested-host\"\r\n            },\r\n            \"scripts\": [\r\n                \"\\\\.gstatic\\\\.com/firebasejs/([\\\\d\\\\.]+)/\\\\;version:\\\\1\",\r\n                \"firebase(?:config|io\\\\.com)\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/(?:([\\\\d.]+)/)?firebase(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\",\r\n                \"/firebasejs/([\\\\d.]+)/firebase\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Firebase is a Google-backed application development software that enables developers to develop iOS, Android and Web apps.\",\r\n            \"website\": \"https://firebase.google.com\",\r\n            \"cpe\": \"cpe:2.3:a:google:firebase_cloud_messaging:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Fireblade\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"fbs\"\r\n            },\r\n            \"website\": \"https://fireblade.com\"\r\n        },\r\n        \"Firepush\": {\r\n            \"cats\": [\r\n                32,\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.firepush\\\\.\\\\w+\",\r\n                \"fpcdn\\\\.me/.+shopify\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Firepush is an omnichannel marketing app that helps Shopify stores to drive sales with automated web push, email and SMS campaigns.\",\r\n            \"website\": \"https://getfirepush.com\"\r\n        },\r\n        \"FirstHive\": {\r\n            \"cats\": [\r\n                97\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"firsthive\\\\.com/engage/\"\r\n            ],\r\n            \"description\": \"FirstHive is a full-stack customer data platform that enables consumer marketers and brands to take control of their first-party data from all sources.\",\r\n            \"website\": \"https://firsthive.com\"\r\n        },\r\n        \"FirstImpression.io\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"fi.options\",\r\n                \"fiprebidanalyticshandler\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.firstimpression\\\\.io\"\r\n            ],\r\n            \"description\": \"FirstImpression.io is a customized ad placements for publisher websites on their platform, with zero technical work.\",\r\n            \"website\": \"https://www.firstimpression.io\"\r\n        },\r\n        \"FirstPromoter\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"js\": [\r\n                \"firstpromoterapi\",\r\n                \"fprom_obj_\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.firstpromoter\\\\.com/\"\r\n            ],\r\n            \"description\": \"FirstPromoter is a software platform that helps businesses to create, manage and track their affiliate marketing programs.\",\r\n            \"website\": \"https://firstpromoter.com\"\r\n        },\r\n        \"Fit Analytics\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"_fitanalytics\",\r\n                \"fitanalyticswidget\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.fitanalytics\\\\.com\"\r\n            ],\r\n            \"description\": \"Fit Analytics is a platform that provides clothing size recommendations for online customers by measuring individual dimensions via webcams.\",\r\n            \"website\": \"https://www.fitanalytics.com\"\r\n        },\r\n        \"FlagSmith\": {\r\n            \"cats\": [\r\n                85\r\n            ],\r\n            \"js\": [\r\n                \"flagsmith\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.flagsmith\\\\.com/\"\r\n            ],\r\n            \"description\": \"FlagSmith is an open-source, fully supported feature flag \\u0026 remote configuration solution, which provides hosted API to help deployment to a private cloud or on-premises environment.\",\r\n            \"website\": \"https://flagsmith.com\"\r\n        },\r\n        \"Flarum\": {\r\n            \"cats\": [\r\n                2\r\n            ],\r\n            \"js\": [\r\n                \"app.cache.discussionlist\",\r\n                \"app.forum.freshness\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cdiv id=\\\"flarum-loading\\\"\"\r\n            ],\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Flarum is a discussion platform.\",\r\n            \"website\": \"https://flarum.org/\",\r\n            \"cpe\": \"cpe:2.3:a:flarum:flarum:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Flask\": {\r\n            \"cats\": [\r\n                18,\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"werkzeug/?([\\\\d\\\\.]+)?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Python\"\r\n            ],\r\n            \"description\": \"Flask is a Python micro web framework ideal for rapidly constructing web applications, offering minimalism, flexibility, and modularity.\",\r\n            \"website\": \"https://github.com/pallets/flask/\",\r\n            \"cpe\": \"cpe:2.3:a:palletsprojects:flask:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Flat UI\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]* href=[^\\u003e]+flat-ui(?:\\\\.min)?\\\\.css\"\r\n            ],\r\n            \"implies\": [\r\n                \"Bootstrap\"\r\n            ],\r\n            \"website\": \"https://designmodo.github.io/Flat-UI/\"\r\n        },\r\n        \"Flazio\": {\r\n            \"cats\": [\r\n                1,\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"_exaudiflazio\",\r\n                \"flazio_global_conversion\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//flazio\\\\.org/\"\r\n            ],\r\n            \"description\": \"Flazio is an Italian website builder.\",\r\n            \"website\": \"https://flazio.com\"\r\n        },\r\n        \"Fleksa\": {\r\n            \"cats\": [\r\n                93\r\n            ],\r\n            \"implies\": [\r\n                \"Next.js\",\r\n                \"Node.js\"\r\n            ],\r\n            \"description\": \"Fleksa is an online ordering system for restaurants and delivery.\",\r\n            \"website\": \"https://fleksa.com\"\r\n        },\r\n        \"FlexCMP\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"x-flex-lang\": \"\",\r\n                \"x-powered-by\": \"flexcmp.+\\\\[v\\\\. ([\\\\d.]+)\\\\;version:\\\\1\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003c!--[^\\u003e]+flexcmp[^\\u003ev]+v\\\\. ([\\\\d.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^flexcmp\"\r\n                ]\r\n            },\r\n            \"website\": \"https://www.flexcmp.com/cms/home\"\r\n        },\r\n        \"FlexSlider\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"jquery\\\\.flexslider(?:\\\\.min)?\\\\.js$\"\r\n            ],\r\n            \"implies\": [\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"FlexSlider is a free jQuery slider plugin.\",\r\n            \"website\": \"https://woocommerce.com/flexslider/\"\r\n        },\r\n        \"Flickity\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"flickity\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"flickity(?:/|@)([\\\\d\\\\.]+).+flickity(?:\\\\.pkgd)?(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Flickity is a JavaScript slider library, built by David DeSandro of Metafizzy fame.\",\r\n            \"website\": \"https://flickity.metafizzy.co\"\r\n        },\r\n        \"FlippingBook\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"__flippingbook_csrf__\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"online\\\\.flippingbook\\\\.com/\"\r\n            ],\r\n            \"description\": \"FlippingBook is a web-based software platform that enables users to create, publish, and share digital publications such as magazines, brochures, catalogs, and presentations.\",\r\n            \"website\": \"https://flippingbook.com\"\r\n        },\r\n        \"Flits\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"flitsobjects.accountpage\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Flits is a customer account pages that get all your shopper data in one place.\",\r\n            \"website\": \"https://getflits.com\"\r\n        },\r\n        \"Flocktory\": {\r\n            \"cats\": [\r\n                94,\r\n                84\r\n            ],\r\n            \"js\": [\r\n                \"flocktory\",\r\n                \"flocktorypurchase\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.flocktory\\\\.com/\"\r\n            ],\r\n            \"description\": \"Flocktory is a social referral marketing platform that enables users to share personalised offers via social networks.\",\r\n            \"website\": \"https://www.flocktory.com\"\r\n        },\r\n        \"Flow\": {\r\n            \"cats\": [\r\n                106\r\n            ],\r\n            \"js\": [\r\n                \"flow.cart\",\r\n                \"flow.countrypicker\",\r\n                \"flow_cart_localize\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:shopify-)?cdn\\\\.flow\\\\.io/\"\r\n            ],\r\n            \"description\": \"Flow is an ecommerce platform that enables brands and retailers to sell their merchandise to customers internationally by creating localized shopping experiences.\",\r\n            \"website\": \"https://www.flow.io/\"\r\n        },\r\n        \"Flowbite\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/flowbite(?:@([\\\\d\\\\.]+)/|\\\\.bundle\\\\.js)\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"Tailwind CSS\"\r\n            ],\r\n            \"description\": \"Flowbite is an open-source library of UI components based on the utility-first Tailwind CSS framework featuring dark mode support, a Figma design system, and more.\",\r\n            \"website\": \"https://github.com/themesberg/flowbite\"\r\n        },\r\n        \"Flowplayer\": {\r\n            \"cats\": [\r\n                14\r\n            ],\r\n            \"js\": [\r\n                \"flowplayer\",\r\n                \"flowplayer.version\"\r\n            ],\r\n            \"description\": \"Flowplayer is a scalable, performance-first HTML 5 video player and platform hosting solution for publishers, broadcasters and digital media.\",\r\n            \"website\": \"https://flowplayer.com\"\r\n        },\r\n        \"Flutter\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"js\": [\r\n                \"_flutter.loader\",\r\n                \"_flutter_web_set_location_strategy\",\r\n                \"fluttercanvaskit\"\r\n            ],\r\n            \"meta\": {\r\n                \"id\": [\r\n                    \"^flutterweb-theme$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Dart\"\r\n            ],\r\n            \"description\": \"Flutter is an open source framework by Google for building beautiful, natively compiled, multi-platform applications from a single codebase.\",\r\n            \"website\": \"https://flutter.dev\"\r\n        },\r\n        \"FluxBB\": {\r\n            \"cats\": [\r\n                2\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cp id=\\\"poweredby\\\"\\u003e[^\\u003c]+\\u003ca href=\\\"https?://fluxbb\\\\.org/\\\"\\u003e\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://fluxbb.org\",\r\n            \"cpe\": \"cpe:2.3:a:fluxbb:fluxbb:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Fly.io\": {\r\n            \"cats\": [\r\n                62\r\n            ],\r\n            \"cookies\": {\r\n                \"_fly\": \"\"\r\n            },\r\n            \"headers\": {\r\n                \"fly-request-id\": \"\",\r\n                \"server\": \"^fly/[\\\\w]+\\\\s\\\\(.*\\\\)$\",\r\n                \"via\": \"^.*\\\\sfly\\\\.io$\"\r\n            },\r\n            \"description\": \"Fly is a platform for running full stack apps and databases.\",\r\n            \"website\": \"https://fly.io\"\r\n        },\r\n        \"Flying Analytics\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/flying-analytics/\"\r\n            ],\r\n            \"description\": \"Flying Analytics is a performance optimisation plugin for WordPress websites designed to reduce page load times and improve the user experience.\",\r\n            \"website\": \"https://wordpress.org/plugins/flying-analytics/\"\r\n        },\r\n        \"Flying Images\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"flyingimages\"\r\n            ],\r\n            \"description\": \"Flying Images is a performance optimisation plugin for WordPress websites designed to reduce page load times and improve the user experience.\",\r\n            \"website\": \"https://wordpress.org/plugins/nazy-load/\"\r\n        },\r\n        \"Flying Pages\": {\r\n            \"cats\": [\r\n                87,\r\n                92\r\n            ],\r\n            \"js\": [\r\n                \"flyingpages\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/flying-pages/.+\\\\.js(?:\\\\?ver=([\\\\d\\\\.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Flying Pages is a performance optimisation plugin for WordPress websites designed to reduce page load times and improve the user experience.\",\r\n            \"website\": \"https://wordpress.org/plugins/flying-pages/\"\r\n        },\r\n        \"FlyingPress\": {\r\n            \"cats\": [\r\n                87,\r\n                92\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/flying-press/\"\r\n            ],\r\n            \"description\": \"FlyingPress is a WordPress plugin that helps to improve website performance by optimising various aspects of a WordPress site. The plugin offers a range of features, including caching, image optimisation, lazy loading, database optimisation, and more.\",\r\n            \"website\": \"https://flying-press.com\"\r\n        },\r\n        \"Flyspray\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"cookies\": {\r\n                \"flyspray_project\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"(?:\\u003ca[^\\u003e]+\\u003epowered by flyspray|\\u003cmap id=\\\"projectsearchform)\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://flyspray.org\"\r\n        },\r\n        \"Flywheel\": {\r\n            \"cats\": [\r\n                62,\r\n                88\r\n            ],\r\n            \"headers\": {\r\n                \"x-fw-hash\": \"\",\r\n                \"x-fw-serve\": \"\",\r\n                \"x-fw-server\": \"^flywheel(?:/([\\\\d.]+))?\\\\;version:\\\\1\",\r\n                \"x-fw-static\": \"\",\r\n                \"x-fw-type\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"WordPress\"\r\n            ],\r\n            \"website\": \"https://getflywheel.com\"\r\n        },\r\n        \"Fomo\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"fomo.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"fomo\\\\.com/api/v\"\r\n            ],\r\n            \"description\": \"Fomo is a social proof marketing platform.\",\r\n            \"website\": \"https://fomo.com\"\r\n        },\r\n        \"Font Awesome\": {\r\n            \"cats\": [\r\n                17\r\n            ],\r\n            \"js\": [\r\n                \"___font_awesome___\",\r\n                \"fontawesomecdnconfig\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:f|f)o(?:n|r)t-?(?:a|a)wesome(?:.*?([0-9a-fa-f]{7,40}|[\\\\d]+(?:.[\\\\d]+(?:.[\\\\d]+)?)?)|)\",\r\n                \"\\\\.fontawesome\\\\.com/([0-9a-z]+).js\"\r\n            ],\r\n            \"description\": \"Font Awesome is a font and icon toolkit based on CSS and Less.\",\r\n            \"website\": \"https://fontawesome.com/\"\r\n        },\r\n        \"FontServer\": {\r\n            \"cats\": [\r\n                17\r\n            ],\r\n            \"description\": \"FontServer is a online font delivery network service-provider for websites.\",\r\n            \"website\": \"https://fontserver.ir\"\r\n        },\r\n        \"Fontify\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"fontify\\\\.nitroapps\\\\.co/\"\r\n            ],\r\n            \"description\": \"Fontify allows you to utilise any font without having to alter code.\",\r\n            \"website\": \"https://apps.shopify.com/fontify-change-customize-font-for-your-store\"\r\n        },\r\n        \"FooPlugins FooGallery\": {\r\n            \"cats\": [\r\n                87,\r\n                7\r\n            ],\r\n            \"js\": [\r\n                \"foogallery\"\r\n            ],\r\n            \"description\": \"FooPlugins FooGallery is a great image gallery plugin for WordPress.\",\r\n            \"website\": \"https://fooplugins.com/foogallery-wordpress-gallery-plugin\"\r\n        },\r\n        \"Food-Ordering.co.uk\": {\r\n            \"cats\": [\r\n                6,\r\n                93\r\n            ],\r\n            \"js\": [\r\n                \"disablecollection\",\r\n                \"disabledelivery\",\r\n                \"getorderacceptfor\",\r\n                \"storetoc\"\r\n            ],\r\n            \"description\": \"Food-Ordering.co.uk is a multi-lingual food ordering system for several hospitality scenarios including online ordering for delivery/takeout, in-store ordering (order at table, room service, self ordering kiosk), telephone ordering with callerID, and table booking.\",\r\n            \"website\": \"https://www.food-ordering.co.uk\"\r\n        },\r\n        \"FoodBooking\": {\r\n            \"cats\": [\r\n                93\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.(?:fbgcdn|foodbooking)\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"GloriaFood\"\r\n            ],\r\n            \"description\": \"FoodBooking is a virtual food court based on a curated list of restaurants that use the GloriaFood ordering system.\",\r\n            \"website\": \"https://www.foodbooking.com\"\r\n        },\r\n        \"Foodomaa\": {\r\n            \"cats\": [\r\n                93\r\n            ],\r\n            \"cookies\": {\r\n                \"foodomaa_session\": \"\"\r\n            },\r\n            \"description\": \"Foodomaa is a multi-restaurant food ordering and restaurant membership system.\",\r\n            \"website\": \"https://foodomaa.com\"\r\n        },\r\n        \"Forethought Solve\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"solve-widget\\\\.forethought\\\\.ai/\"\r\n            ],\r\n            \"description\": \"Forethought Solve is a live-chat widget that uses generative AI to automate responses for common questions across all channels.\",\r\n            \"website\": \"https://forethought.ai/platform/solve/\"\r\n        },\r\n        \"Fork Awesome\": {\r\n            \"cats\": [\r\n                17\r\n            ],\r\n            \"description\": \"Fork Awesome is now a community effort based on Font Awesome by Dave Gandy.\",\r\n            \"website\": \"https://forkaweso.me\"\r\n        },\r\n        \"Fork CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^fork cms$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Symfony\"\r\n            ],\r\n            \"description\": \"Fork CMS is an open-source content management system.\",\r\n            \"website\": \"https://www.fork-cms.com\",\r\n            \"cpe\": \"cpe:2.3:a:fork-cms:fork_cms:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"FormAssembly\": {\r\n            \"cats\": [\r\n                110\r\n            ],\r\n            \"js\": [\r\n                \"wforms.version\"\r\n            ],\r\n            \"description\": \"FormAssembly is a platform that enables to collection of data and processing via workflow.\",\r\n            \"website\": \"https://www.formassembly.com\"\r\n        },\r\n        \"FormBold\": {\r\n            \"cats\": [\r\n                110\r\n            ],\r\n            \"description\": \"FormBold is a complete web forms solution for static websites that allows you to create forms, collect data, and send notifications.\",\r\n            \"website\": \"https://formbold.com\"\r\n        },\r\n        \"Formaloo\": {\r\n            \"cats\": [\r\n                110\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//formaloo\\\\.net/\"\r\n            ],\r\n            \"description\": \"Formaloo is a no-code collaboration platform that helps businesses create custom data-driven business applications and internal tools, automate their processes and engage their audience.\",\r\n            \"website\": \"https://www.formaloo.com\"\r\n        },\r\n        \"Formidable Form\": {\r\n            \"cats\": [\r\n                87,\r\n                73,\r\n                110\r\n            ],\r\n            \"description\": \"Formidable Forms is a WordPress plugin that enables you to create quizzes, surveys, calculators, timesheets, multi-page application forms.\",\r\n            \"website\": \"https://formidableforms.com\"\r\n        },\r\n        \"Formitable\": {\r\n            \"cats\": [\r\n                93\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.formitable\\\\.com\",\r\n                \"formitable\\\\.js(?:\\\\?ver=([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Formitable is an reservation management system for restaurants.\",\r\n            \"website\": \"https://formitable.com\"\r\n        },\r\n        \"Formli\": {\r\n            \"cats\": [\r\n                110\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:app|cdn)\\\\.(?:formli|humanagency)\\\\.(?:com|org)/\"\r\n            ],\r\n            \"description\": \"Formli is a web-based form builder service that permits users to produce and personalise online forms for different purposes, including surveys, feedback forms, event registrations, and others.\",\r\n            \"website\": \"https://formli.com\"\r\n        },\r\n        \"ForoshGostar\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"aws.customer\": \"\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^forosh\\\\s?gostar.*|arsina webshop.*$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"website\": \"https://www.foroshgostar.com\"\r\n        },\r\n        \"Forte\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"checkout\\\\.forte\\\\.net\"\r\n            ],\r\n            \"description\": \"Forte, a CSG Company offers merchants and partners a broad range of payment solutions.\",\r\n            \"website\": \"https://www.forte.net\"\r\n        },\r\n        \"Forter\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"cookies\": {\r\n                \"fortertoken\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"ftr__startscriptload\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"forter\\\\.com\"\r\n            ],\r\n            \"description\": \"Forter is a SaaS company that provides fraud prevention technology for online retailers and marketplaces.\",\r\n            \"website\": \"https://www.forter.com\"\r\n        },\r\n        \"Fortinet FortiGate\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"cookies\": {\r\n                \"fgtserver\": \"\"\r\n            },\r\n            \"description\": \"Fortinet FortiGate is a family of network security appliances that provide firewall, VPN, intrusion prevention, antivirus, web filtering, and other security features to protect and secure networks and data.\",\r\n            \"website\": \"https://www.fortinet.com/products/next-generation-firewall\"\r\n        },\r\n        \"Fortune3\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"html\": [\r\n                \"(?:\\u003clink [^\\u003e]*href=\\\"[^\\\\/]*\\\\/\\\\/www\\\\.fortune3\\\\.com\\\\/[^\\\"]*siterate\\\\/rate\\\\.css|powered by \\u003ca [^\\u003e]*href=\\\"[^\\\"]+fortune3\\\\.com)\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cartjs\\\\.php\\\\?(?:.*\\u0026)?s=[^\\u0026]*myfortune3cart\\\\.com\"\r\n            ],\r\n            \"website\": \"https://fortune3.com\"\r\n        },\r\n        \"Foswiki\": {\r\n            \"cats\": [\r\n                8\r\n            ],\r\n            \"cookies\": {\r\n                \"foswikistrikeone\": \"\",\r\n                \"sfoswikisid\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"foswiki\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-foswikiaction\": \"\",\r\n                \"x-foswikiuri\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003cdiv class=\\\"foswiki(?:copyright|page|main)\\\"\\u003e\"\r\n            ],\r\n            \"meta\": {\r\n                \"foswiki.servertime\": [],\r\n                \"foswiki.wikiname\": []\r\n            },\r\n            \"implies\": [\r\n                \"Perl\"\r\n            ],\r\n            \"description\": \"Foswiki is a free open-source collaboration platform.\",\r\n            \"website\": \"https://foswiki.org\",\r\n            \"cpe\": \"cpe:2.3:a:foswiki:foswiki:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Four\": {\r\n            \"cats\": [\r\n                41,\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"four\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"scripts\\\\.paywithfour\\\\.com\"\r\n            ],\r\n            \"description\": \"Pay with four is a Buy now pay later solution.\",\r\n            \"website\": \"https://paywithfour.com/\"\r\n        },\r\n        \"Foursixty\": {\r\n            \"cats\": [\r\n                96\r\n            ],\r\n            \"js\": [\r\n                \"foursixtyembed\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"foursixty\\\\.com\"\r\n            ],\r\n            \"description\": \"Foursixty is a widget which turns Instagram content and user-generated content into shoppable galleries.\",\r\n            \"website\": \"https://foursixty.com/\"\r\n        },\r\n        \"Fourthwall\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"fourthwallanalytics\",\r\n                \"fourthwalltheme\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.fourthwall\\\\.com\"\r\n            ],\r\n            \"meta\": {\r\n                \"version\": [\r\n                    \"^(.+)$\\\\;version:\\\\1\\\\;confidence:0\"\r\n                ]\r\n            },\r\n            \"description\": \"Fourthwall helps to create and launch a branded website.\",\r\n            \"website\": \"https://fourthwall.com/\"\r\n        },\r\n        \"Foxy.io\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.foxycart\\\\.com\"\r\n            ],\r\n            \"description\": \"Foxy’s hosted cart \\u0026 payment page allow you to sell anything, using your existing website or platform.\",\r\n            \"website\": \"https://www.foxy.io\"\r\n        },\r\n        \"Framer Sites\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"__framer_importfrompackage\",\r\n                \"framer\",\r\n                \"framer.animatable\",\r\n                \"framer.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"framerusercontent\\\\.com\"\r\n            ],\r\n            \"implies\": [\r\n                \"React\"\r\n            ],\r\n            \"description\": \"Framer is primarily a design and prototyping tool. It allows you to design interactive prototypes of websites and applications using production components and real data.\",\r\n            \"website\": \"https://framer.com/sites\"\r\n        },\r\n        \"Frames\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"description\": \"Frames is a tool that allows you to create wireframes in real time, design and develop systems, and access a library of components to help you build custom websites quickly and easily, without any restrictions on your creative input.\",\r\n            \"website\": \"https://getframes.io\"\r\n        },\r\n        \"France Express\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"France Express is a delivery service based in France.\",\r\n            \"website\": \"https://www.france-express.com\"\r\n        },\r\n        \"Frappe\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"js\": [\r\n                \"frappe.avatar\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^frappe$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"MariaDB\",\r\n                \"Python\"\r\n            ],\r\n            \"description\": \"Frappe is a full stack, batteries-included, web framework written in Python and Javascript.\",\r\n            \"website\": \"https://frappeframework.com\"\r\n        },\r\n        \"FraudLabs Pro\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"js\": [\r\n                \"fraudlabsproagent\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.fraudlabspro\\\\.com/\"\r\n            ],\r\n            \"description\": \"FraudLabs Pro is a fraud prevention service offered by the company FraudLabs Pro, which specialises in online fraud detection and risk management for businesses.\",\r\n            \"website\": \"https://www.fraudlabspro.com\"\r\n        },\r\n        \"FreakOut\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"_fout_jsurl\",\r\n                \"_fout_queue\",\r\n                \"fout\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.fout\\\\.jp/\"\r\n            ],\r\n            \"description\": \"FreakOut is a marketing technology company with programmatic solutions (DSP,SSP) that delivers in-feed display and video formats across global publishers.\",\r\n            \"website\": \"https://www.fout.co.jp\"\r\n        },\r\n        \"FreeBSD\": {\r\n            \"cats\": [\r\n                28\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"freebsd(?: ([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"FreeBSD is a free and open-source Unix-like operating system.\",\r\n            \"website\": \"https://freebsd.org\",\r\n            \"cpe\": \"cpe:2.3:o:freebsd:freebsd:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"FreeTextBox\": {\r\n            \"cats\": [\r\n                24\r\n            ],\r\n            \"js\": [\r\n                \"ftb_addevent\",\r\n                \"ftb_api\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- \\\\* freetextbox v\\\\d \\\\((\\\\d+\\\\.\\\\d+\\\\.\\\\d+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"description\": \"FreeTextBox is a free open-source HTML Editor.\",\r\n            \"website\": \"https://freetextbox.com\"\r\n        },\r\n        \"Freespee\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"analytics\\\\.freespee\\\\.com/js/external/fs\\\\.(?:min\\\\.)?js\"\r\n            ],\r\n            \"website\": \"https://www.freespee.com\"\r\n        },\r\n        \"Frequenceo\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Frequenceo is a fixed-rate postage service in France.\",\r\n            \"website\": \"https://www.laposte.fr/entreprise/produit-entreprise/frequenceo\"\r\n        },\r\n        \"Frequently Bought Together\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.codeblackbelt\\\\.com/js/modules/frequently-bought-together/\"\r\n            ],\r\n            \"description\": \"Frequently Bought Together is a Shopify app which add Amazon-like 'Customers Who Bought This Item Also Bought' product recommendations to your store.\",\r\n            \"website\": \"https://www.codeblackbelt.com\"\r\n        },\r\n        \"Fresco\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"fresco.version\"\r\n            ],\r\n            \"description\": \"Fresco is a responsive lightbox. Fresco comes with thumbnail support, fullscreen zoom, Youtube and Vimeo integration for HTML5 video and a powerful Javascript API.\",\r\n            \"website\": \"https://github.com/staaky/fresco\"\r\n        },\r\n        \"Fresh\": {\r\n            \"cats\": [\r\n                18,\r\n                22\r\n            ],\r\n            \"implies\": [\r\n                \"Deno\",\r\n                \"Preact\"\r\n            ],\r\n            \"description\": \"Fresh is a full stack modern web framework for JavaScript and TypeScript developers, designed to make it trivial to create high-quality, performant, and personalized web applications.\",\r\n            \"website\": \"https://fresh.deno.dev\"\r\n        },\r\n        \"Freshchat\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"freshbots\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"wchat\\\\.freshchat\\\\.com/js/widget\\\\.js\"\r\n            ],\r\n            \"description\": \"Freshchat is a cloud-hosted live messaging and engagement application.\",\r\n            \"website\": \"https://www.freshworks.com/live-chat-software/\"\r\n        },\r\n        \"Freshop\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"freshop\",\r\n                \"freshopinitialized\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"asset(?:cdn)?\\\\.freshop\\\\.com/\"\r\n            ],\r\n            \"meta\": {\r\n                \"author\": [\r\n                    \"^freshop, inc\\\\.$\"\r\n                ]\r\n            },\r\n            \"description\": \"Freshop is an online platform for grocers.\",\r\n            \"website\": \"https://www.freshop.com\"\r\n        },\r\n        \"Freshteam\": {\r\n            \"cats\": [\r\n                101\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"assets\\\\.freshteam\\\\.com/\"\r\n            ],\r\n            \"description\": \"Freshteam is a cloud-based HR and applicant tracking solution offered by Freshworks.\",\r\n            \"website\": \"https://www.freshworks.com/hrms/\"\r\n        },\r\n        \"Freshworks CRM\": {\r\n            \"cats\": [\r\n                53,\r\n                32,\r\n                74\r\n            ],\r\n            \"js\": [\r\n                \"zarget\",\r\n                \"zargetapi\",\r\n                \"zargetform\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.freshmarketer\\\\.com\",\r\n                \"cdn\\\\.zarget\\\\.com\"\r\n            ],\r\n            \"description\": \"Freshworks CRM is a cloud-based customer relationship management (CRM) solution. Key features include one-click phone, sales lead tracking, sales management, event tracking and more.\",\r\n            \"website\": \"https://www.freshworks.com/crm\"\r\n        },\r\n        \"Friendbuy\": {\r\n            \"cats\": [\r\n                94\r\n            ],\r\n            \"js\": [\r\n                \"friendbuy\",\r\n                \"friendbuyapi.merchantid\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.cloudfront\\\\.net/js/friendbuy\\\\.min\\\\.js\",\r\n                \"static\\\\.fbot\\\\.me/friendbuy\\\\.js\"\r\n            ],\r\n            \"description\": \"Friendbuy is a cloud-based referral marketing solution designed to help ecommerce businesses of all sizes.\",\r\n            \"website\": \"https://www.friendbuy.com\"\r\n        },\r\n        \"Friendly Captcha\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"scripts\": [\r\n                \"x-frc-client\\\",\\\"js-(\\\\d+(\\\\.\\\\d+)+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Friendly Captcha is a proof-of-work based solution in which the user’s device does all the work.\",\r\n            \"website\": \"https://friendlycaptcha.com\"\r\n        },\r\n        \"Frizbit\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"frizbit.configurationmanager\",\r\n                \"frizbit.remoteconfigs\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.frizbit\\\\.com/\"\r\n            ],\r\n            \"description\": \"Frizbit is a marketing tool that helps digital marketeers increase web traffic and revenue by combining web push notification.\",\r\n            \"website\": \"https://frizbit.com\"\r\n        },\r\n        \"Froala Editor\": {\r\n            \"cats\": [\r\n                24\r\n            ],\r\n            \"js\": [\r\n                \"froalaeditor.version\"\r\n            ],\r\n            \"implies\": [\r\n                \"Font Awesome\",\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"Froala Editor is a WYSIWYG HTML Editor written in Javascript that enables rich text editing capabilities for applications.\",\r\n            \"website\": \"https://froala.com/wysiwyg-editor\"\r\n        },\r\n        \"Front Chat\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"frontchat\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//chat-assets\\\\.frontapp\\\\.com/\"\r\n            ],\r\n            \"description\": \"Front Chat is the live website chat solution that you can manage straight from your inbox.\",\r\n            \"website\": \"https://front.com\"\r\n        },\r\n        \"Front-Commerce\": {\r\n            \"cats\": [\r\n                108\r\n            ],\r\n            \"implies\": [\r\n                \"GraphQL\",\r\n                \"Node.js\",\r\n                \"PWA\",\r\n                \"React\",\r\n                \"Webpack\"\r\n            ],\r\n            \"description\": \"Front-Commerce is a React-based ecommerce framework that provides a development environment and tools for building online stores, offering seamless integration with backend systems through GraphQL and supporting popular platforms like Adobe Commerce, BigCommerce, OpenMage, Contentful or Prismic.\",\r\n            \"website\": \"https://front-commerce.com\"\r\n        },\r\n        \"FrontPage\": {\r\n            \"cats\": [\r\n                20\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"microsoft frontpage(?:\\\\s((?:express )?[\\\\d.]+))?\\\\;version:\\\\1\"\r\n                ],\r\n                \"progid\": [\r\n                    \"^frontpage\\\\.\"\r\n                ]\r\n            },\r\n            \"description\": \"FrontPage is a program for developing and maintaining websites.\",\r\n            \"website\": \"https://office.microsoft.com/frontpage\",\r\n            \"cpe\": \"cpe:2.3:a:microsoft:frontpage:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Frontastic\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"headers\": {\r\n                \"frontastic-request-id\": \"\"\r\n            },\r\n            \"description\": \"Frontastic is a Commerce Frontend Platform that unites business and development teams to build commerce sites on headless.\",\r\n            \"website\": \"https://www.frontastic.cloud/\"\r\n        },\r\n        \"Frontify\": {\r\n            \"cats\": [\r\n                95\r\n            ],\r\n            \"description\": \"Frontify is a cloud-based brand management platform for creators and collaborators of brands.\",\r\n            \"website\": \"https://www.frontify.com\"\r\n        },\r\n        \"Frontity\": {\r\n            \"cats\": [\r\n                12,\r\n                18\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^frontity\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"React\",\r\n                \"Webpack\",\r\n                \"WordPress\"\r\n            ],\r\n            \"description\": \"Frontity is a React open-source framework focused on WordPress.\",\r\n            \"website\": \"https://frontity.org\"\r\n        },\r\n        \"Frosmo\": {\r\n            \"cats\": [\r\n                32,\r\n                74\r\n            ],\r\n            \"js\": [\r\n                \"_frosmo\",\r\n                \"frosmo\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"frosmo\\\\.easy\\\\.js\"\r\n            ],\r\n            \"description\": \"Frosmo is a SaaS company which provides AI-driven personalisation products.\",\r\n            \"website\": \"https://frosmo.com\"\r\n        },\r\n        \"FullCalendar\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"fullcalendar.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/fullcalendar\\\\.min\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"TypeScript\"\r\n            ],\r\n            \"description\": \"FullCalendar is a full-sized drag and drop JavaScript event calendar.\",\r\n            \"website\": \"https://fullcalendar.io\"\r\n        },\r\n        \"FullContact\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"fullcontact\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"tags\\\\.fullcontact\\\\.com/\"\r\n            ],\r\n            \"description\": \"FullContact is a privacy-safe Identity Resolution company building trust between people and brands.\",\r\n            \"website\": \"https://www.fullcontact.com\"\r\n        },\r\n        \"FullStory\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"fs.clearusercookie\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.fullstory\\\\.com/\"\r\n            ],\r\n            \"description\": \"FullStory is a web-based digital intelligence system that helps optimize the client experience.\",\r\n            \"website\": \"https://www.fullstory.com\"\r\n        },\r\n        \"FunCaptcha\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"description\": \"FunCaptcha is a type of CAPTCHA, which is a security measure used to protect websites and online services from spam, bots, and other forms of automated abuse.\",\r\n            \"website\": \"https://www.arkoselabs.com/arkose-matchkey/\"\r\n        },\r\n        \"Fundiin\": {\r\n            \"cats\": [\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"websiteenablesuggestfundiin\",\r\n                \"websitemaximumsuggestfundiinwithprediction\"\r\n            ],\r\n            \"description\": \"Fundiin is the BNPL leader in Vietnam in providing zero-cost buy-now-pay-later facilities.\",\r\n            \"website\": \"https://fundiin.vn\"\r\n        },\r\n        \"Funding Choices\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"js\": [\r\n                \"__googlefc\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"fundingchoicesmessages\\\\.google\\\\.com\"\r\n            ],\r\n            \"description\": \"Funding Choices is a messaging tool that can help you comply with the EU General Data Protection Regulation (GDPR), and recover lost revenue from ad blocking users.\",\r\n            \"website\": \"https://developers.google.com/funding-choices\"\r\n        },\r\n        \"Fundraise Up\": {\r\n            \"cats\": [\r\n                111\r\n            ],\r\n            \"js\": [\r\n                \"fundraiseup\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.fundraiseup\\\\.com/\"\r\n            ],\r\n            \"description\": \"Fundraise Up is a platform for online donations.\",\r\n            \"website\": \"https://fundraiseup.com\"\r\n        },\r\n        \"FunnelCockpit\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.funnelcockpit\\\\.com/\"\r\n            ],\r\n            \"description\": \"FunnelCockpit is an all-in-one funnel builder.\",\r\n            \"website\": \"https://funnelcockpit.com\"\r\n        },\r\n        \"Funnelish\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"funnelish\"\r\n            ],\r\n            \"description\": \"Funnelish is a software tool that helps businesses create and optimise sales funnels for their websites to increase their conversion rates and revenue. Funnelish page builder is a funnel builder focused on building ecommerce funnels.\",\r\n            \"website\": \"https://funnelish.com\"\r\n        },\r\n        \"Funraise\": {\r\n            \"cats\": [\r\n                111\r\n            ],\r\n            \"js\": [\r\n                \"fr.image_base_url\"\r\n            ],\r\n            \"description\": \"Funraise is a nonprofit fundraising platform that enables organisations to build fundraising websites as well as manage donations and campaigns.\",\r\n            \"website\": \"https://funraise.org\"\r\n        },\r\n        \"FurnitureDealer\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.furnituredealer\\\\.net/\"\r\n            ],\r\n            \"description\": \"FurnitureDealer is the internet partner of more than 100 leading local full service brick and mortar furniture retailers.\",\r\n            \"website\": \"https://www.furnituredealer.net\"\r\n        },\r\n        \"Fusion Ads\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"_fusion\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^[^\\\\/]*//[ac]dn\\\\.fusionads\\\\.net/(?:api/([\\\\d.]+)/)?\\\\;version:\\\\1\"\r\n            ],\r\n            \"website\": \"https://fusionads.net\"\r\n        },\r\n        \"FusionCharts\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"fusioncharts\",\r\n                \"fusionchartsdataformats\",\r\n                \"fusionmaps\"\r\n            ],\r\n            \"description\": \"FusionCharts is a comprehensive charting solution for websites.\",\r\n            \"website\": \"https://www.fusioncharts.com/charts\"\r\n        },\r\n        \"Future Shop\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"future-shop.*\\\\.js\"\r\n            ],\r\n            \"website\": \"https://www.future-shop.jp\"\r\n        },\r\n        \"Futurio\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/futurio/.+customscript\\\\.js(?:\\\\?ver=([\\\\d\\\\.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Futurio is a lightweight and customizable multi-purpose and WooCommerce WordPress theme.\",\r\n            \"website\": \"https://futuriowp.com\"\r\n        },\r\n        \"Fynd Platform\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"__fyndaction\"\r\n            ],\r\n            \"implies\": [\r\n                \"Vue.js\"\r\n            ],\r\n            \"description\": \"Fynd Platform is a subscription based software as a service where brands can mange their catalog, send marketing sms/emailers and sell their products.\",\r\n            \"website\": \"https://platform.fynd.com\"\r\n        },\r\n        \"GEODIS\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"GEODIS is a global transport and logistics company.\",\r\n            \"website\": \"https://geodis.com\"\r\n        },\r\n        \"GEOvendas\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"description\": \"GEOvendas is an ecommerce platform with analytics, sales force, B2B and B2C products.\",\r\n            \"website\": \"https://www.geovendas.com\"\r\n        },\r\n        \"GLPI\": {\r\n            \"cats\": [\r\n                18,\r\n                53\r\n            ],\r\n            \"js\": [\r\n                \"glpiunsavedformchanges\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//.*glpi.+common\\\\.min\\\\.js\\\\?v=(\\\\d+\\\\.\\\\d+\\\\.\\\\d+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"meta\": {\r\n                \"glpi:csrf_token\": []\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"GLPI is an open-source IT Asset Management, issue tracking and service desk system.\",\r\n            \"website\": \"https://glpi-project.org\",\r\n            \"cpe\": \"cpe:2.3:a:glpi-project:glpi:*:*:*:*:*:*:*:* \"\r\n        },\r\n        \"GLS\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"GLS offers parcel, logistics and express services, throughout Europe as well as in the US and in Canada.\",\r\n            \"website\": \"https://gls-group.eu\"\r\n        },\r\n        \"GOV.UK Elements\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cdiv[^\\u003e]+govuk-box-highlight\\\\;confidence:25\",\r\n                \"\\u003cdiv[^\\u003e]+phase-banner-alpha\\\\;confidence:25\",\r\n                \"\\u003cdiv[^\\u003e]+phase-banner-beta\\\\;confidence:25\",\r\n                \"\\u003clink[^\\u003e]+elements-page[^\\u003e\\\"]+css\\\\;confidence:25\"\r\n            ],\r\n            \"implies\": [\r\n                \"GOV.UK Toolkit\"\r\n            ],\r\n            \"website\": \"https://github.com/alphagov/govuk_elements/\"\r\n        },\r\n        \"GOV.UK Frontend\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"js\": [\r\n                \"govukfrontend\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003ca[^\\u003e]+govuk-link\\\\;confidence:10\",\r\n                \"\\u003cbody[^\\u003e]+govuk-template__body\\\\;confidence:80\",\r\n                \"\\u003clink[^\\u003e]* href=[^\\u003e]*?govuk-frontend(?:[^\\u003e]*?([0-9a-fa-f]{7,40}|[\\\\d]+(?:.[\\\\d]+(?:.[\\\\d]+)?)?)|)[^\\u003e]*?(?:\\\\.min)?\\\\.css\\\\;version:\\\\1\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"govuk-frontend(?:[^\\u003e]*?([0-9a-fa-f]{7,40}|[\\\\d]+(?:.[\\\\d]+(?:.[\\\\d]+)?)?)|)[^\\u003e]*?(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"website\": \"https://design-system.service.gov.uk/\"\r\n        },\r\n        \"GOV.UK Template\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"js\": [\r\n                \"govuk\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]+govuk-template-ie6[^\\u003e\\\"]+css\",\r\n                \"\\u003clink[^\\u003e]+govuk-template-ie7[^\\u003e\\\"]+css\",\r\n                \"\\u003clink[^\\u003e]+govuk-template-ie8[^\\u003e\\\"]+css\",\r\n                \"\\u003clink[^\\u003e]+govuk-template-print[^\\u003e\\\"]+css\",\r\n                \"\\u003clink[^\\u003e]+govuk-template[^\\u003e\\\"]+css\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"govuk-template\\\\.js\"\r\n            ],\r\n            \"website\": \"https://github.com/alphagov/govuk_template/\"\r\n        },\r\n        \"GOV.UK Toolkit\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"js\": [\r\n                \"govuk.details\",\r\n                \"govuk.modules\",\r\n                \"govuk.primarylinks\"\r\n            ],\r\n            \"website\": \"https://github.com/alphagov/govuk_frontend_toolkit\"\r\n        },\r\n        \"GPT AI Power\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/gpt3-ai-content-generator/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"GPT AI Power is a WordPress plugin that offers a comprehensive AI package.\",\r\n            \"website\": \"https://gptaipower.com\"\r\n        },\r\n        \"GSAP\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"gsap.version\",\r\n                \"gsapversions\",\r\n                \"tweenlite.version\",\r\n                \"tweenmax.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"tweenmax(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"description\": \"GSAP is an animation library that allows you to create animations with JavaScript.\",\r\n            \"website\": \"https://greensock.com/gsap\"\r\n        },\r\n        \"GTranslate\": {\r\n            \"cats\": [\r\n                87,\r\n                89\r\n            ],\r\n            \"description\": \"GTranslate is a website translator which can translate any website to any language automatically.\",\r\n            \"website\": \"https://gtranslate.io\"\r\n        },\r\n        \"GTranslate app\": {\r\n            \"cats\": [\r\n                100,\r\n                89\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"gtranslate\\\\.io/shopify/\"\r\n            ],\r\n            \"description\": \"GTranslate app is a website translator which can translate any website to any language automatically.\",\r\n            \"website\": \"https://apps.shopify.com/multilingual-shop-by-gtranslate\"\r\n        },\r\n        \"GX WebManager\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!--\\\\s+powered by gx\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"gx webmanager(?: ([\\\\d.]+))?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"website\": \"https://www.gxsoftware.com/en/products/web-content-management.htm\"\r\n        },\r\n        \"Gallery\": {\r\n            \"cats\": [\r\n                7\r\n            ],\r\n            \"js\": [\r\n                \"$.fn.gallery_valign\",\r\n                \"galleryauthtoken\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003ca href=\\\"http://gallery\\\\.sourceforge\\\\.net\\\"\\u003e\\u003cimg[^\\u003e]+powered by gallery\\\\s*(?:(?:v|version)\\\\s*([0-9.]+))?\\\\;version:\\\\1\",\r\n                \"\\u003cdiv id=\\\"gsnavbar\\\" class=\\\"gcborder1\\\"\\u003e\"\r\n            ],\r\n            \"description\": \"Gallery is an open-source web based photo album organiser.\",\r\n            \"website\": \"https://galleryproject.org/\"\r\n        },\r\n        \"Gambio\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"gambio\"\r\n            ],\r\n            \"html\": [\r\n                \"(?:\\u003clink[^\\u003e]* href=\\\"templates/gambio/|\\u003ca[^\\u003e]content\\\\.php\\\\?coid=\\\\d|\\u003c!-- gambio eof --\\u003e|\\u003c!--[\\\\s=]+shopsoftware by gambio gmbh \\\\(c\\\\))\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"gm_javascript\\\\.js\\\\.php\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Gambio is an all-in-one shopping cart solution for small to medium sized businesses.\",\r\n            \"website\": \"https://gambio.de\"\r\n        },\r\n        \"Gameball\": {\r\n            \"cats\": [\r\n                84\r\n            ],\r\n            \"js\": [\r\n                \"gbreferralcodeinput\",\r\n                \"gbsdk.settings.shop\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"assets\\\\.gameball\\\\.co/\"\r\n            ],\r\n            \"description\": \"Gameball is a loyalty \\u0026 retention platform that offers gamified customer engagement tools for customers such as rewards, points, and referrals.\",\r\n            \"website\": \"https://www.gameball.co\"\r\n        },\r\n        \"Gatsby\": {\r\n            \"cats\": [\r\n                57,\r\n                12\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^gatsby(?: ([0-9.]+))?$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"React\",\r\n                \"Webpack\"\r\n            ],\r\n            \"description\": \"Gatsby is a React-based open-source framework with performance, scalability and security built-in.\",\r\n            \"website\": \"https://www.gatsbyjs.org/\"\r\n        },\r\n        \"Gatsby Cloud Image CDN\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"description\": \"Image CDN is a new feature of hosting on Gatsby Cloud. Instead of processing images at build time, Image CDN defers and offloads image processing to the edge.\",\r\n            \"website\": \"https://www.gatsbyjs.com/products/cloud/image-cdn\"\r\n        },\r\n        \"Gauges\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"cookies\": {\r\n                \"_gauges_\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"_gauges\"\r\n            ],\r\n            \"website\": \"https://get.gaug.es\"\r\n        },\r\n        \"GeeTest\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.geetest\\\\.com\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"\\\\.geetest\\\\.com/\"\r\n            ],\r\n            \"description\": \"GeeTest is a CAPTCHA and bot management provider, protects websites, mobile apps, and APIs from automated bot-driven attacks, like ATO, credential stuffing, web scalping, etc.\",\r\n            \"website\": \"https://www.geetest.com\"\r\n        },\r\n        \"GemPages\": {\r\n            \"cats\": [\r\n                100,\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"gemstore\",\r\n                \"gemvendor\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/files/gempagev\\\\d+\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"GemPages is a powerful Shopify landing page buidler that empowers SMEs, agency, and freelancers to build their brands and sell online.\",\r\n            \"website\": \"https://gempages.net\"\r\n        },\r\n        \"Gemius\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"gemius_hit\",\r\n                \"gemius_init\",\r\n                \"gemius_pending\",\r\n                \"pp_gemius_hit\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003ca [^\\u003e]*onclick=\\\"gemius_hit\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"hit\\\\.gemius\\\\.pl/xgemius\\\\.js\",\r\n                \"hit\\\\.gemius\\\\.pl\\\\;confidence:80\",\r\n                \"xgemius\\\\.js\\\\;confidence:30\"\r\n            ],\r\n            \"website\": \"https://www.gemius.com\"\r\n        },\r\n        \"GeneXus\": {\r\n            \"cats\": [\r\n                27\r\n            ],\r\n            \"js\": [\r\n                \"gx.gxversion\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]+?id=\\\"gxtheme_css_reference\\\"\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/static/gxgral\\\\.js\",\r\n                \"/static/gxtimezone\\\\.js\"\r\n            ],\r\n            \"website\": \"https://www.genexus.com/\"\r\n        },\r\n        \"GenerateBlocks\": {\r\n            \"cats\": [\r\n                87,\r\n                51\r\n            ],\r\n            \"description\": \"GenerateBlocks is a WordPress plugin that has the trappings of a page builder.\",\r\n            \"website\": \"https://generateblocks.com\"\r\n        },\r\n        \"GeneratePress\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"generatepressmenu\",\r\n                \"generatepressnavsearch\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"themes/generatepress\\\\s*\\\\.js(?:\\\\?ver=([0-9.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"GeneratePress is a lightweight WordPress theme that focuses on speed, stability, and accessibility\",\r\n            \"website\": \"https://generatepress.com\"\r\n        },\r\n        \"GeneratePress GP Premium\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/gp-premium/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"GeneratePress\"\r\n            ],\r\n            \"description\": \"GP Premium is a premium add-on plugin for the GeneratePress WordPress theme.\",\r\n            \"website\": \"https://docs.generatepress.com/article/installing-gp-premium/\"\r\n        },\r\n        \"Genesis theme\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"genesis_responsive_menu\",\r\n                \"genesisblocksshare\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/genesis/lib/js/\"\r\n            ],\r\n            \"description\": \"Genesis theme is a WordPress theme that has been developed using the Genesis Framework from Studiopress.\",\r\n            \"website\": \"https://www.studiopress.com/themes/genesis\"\r\n        },\r\n        \"Genesys Cloud\": {\r\n            \"cats\": [\r\n                32,\r\n                5,\r\n                75\r\n            ],\r\n            \"js\": [\r\n                \"purecloud_webchat_frame_config\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"apps\\\\.mypurecloud\\\\.\\\\w+\",\r\n                \"apps\\\\.mypurecloud\\\\.\\\\w+/widgets/([\\\\d.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Genesys Cloud is an all-in-one cloud-based contact center software built to improve the customer experience.\",\r\n            \"website\": \"https://www.genesys.com\"\r\n        },\r\n        \"Geniee\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.gsspcln\\\\.jp/\"\r\n            ],\r\n            \"description\": \"Geniee is an ad technology company.\",\r\n            \"website\": \"https://geniee.co.jp\"\r\n        },\r\n        \"Gentoo\": {\r\n            \"cats\": [\r\n                28\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"gentoo\"\r\n            },\r\n            \"description\": \"Gentoo is a free operating system based on Linux.\",\r\n            \"website\": \"https://www.gentoo.org\",\r\n            \"cpe\": \"cpe:2.3:o:gentoo:linux:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Geo Targetly\": {\r\n            \"cats\": [\r\n                79\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"geotargetly\\\\.co/\"\r\n            ],\r\n            \"description\": \"Geo Targetly is a website geo personalisation software.\",\r\n            \"website\": \"https://geotargetly.com\"\r\n        },\r\n        \"Gerrit\": {\r\n            \"cats\": [\r\n                47\r\n            ],\r\n            \"js\": [\r\n                \"gerrit\",\r\n                \"gerrit_ui\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c(?:div|style) id=\\\"gerrit_\",\r\n                \"\\u003egerrit code review\\u003c/a\\u003e\\\\s*\\\"\\\\s*\\\\(([0-9.]+)\\\\)\\\\;version:\\\\1\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^gerrit_ui/gerrit_ui\"\r\n            ],\r\n            \"meta\": {\r\n                \"title\": [\r\n                    \"^gerrit code review$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Java\",\r\n                \"git\"\r\n            ],\r\n            \"website\": \"https://www.gerritcodereview.com\"\r\n        },\r\n        \"Get Satisfaction\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"js\": [\r\n                \"gsfn\"\r\n            ],\r\n            \"website\": \"https://getsatisfaction.com/corp/\"\r\n        },\r\n        \"GetButton\": {\r\n            \"cats\": [\r\n                5,\r\n                52\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.getbutton\\\\.io/\"\r\n            ],\r\n            \"description\": \"The chat button by GetButton takes website visitor directly to the messaging app such as Facebook Messenger or WhatsApp and allows them to initiate a conversation with you.\",\r\n            \"website\": \"https://getbutton.io\"\r\n        },\r\n        \"GetFeedback\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"js\": [\r\n                \"usabilla_live\"\r\n            ],\r\n            \"description\": \"GetFeedback (formerly Usabilla) is a user feedback solution for collecting qualitative and quantitative user feedback across digital channels including websites, apps and emails.\",\r\n            \"website\": \"https://www.getfeedback.com\"\r\n        },\r\n        \"GetMeAShop\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"gmas_base_url\",\r\n                \"search_api_base_uri\"\r\n            ],\r\n            \"description\": \"GetMeAShop is a cloud-based ecommerce solution for small and midsize businesses across industries such as retail and manufacturing.\",\r\n            \"website\": \"https://www.getmeashop.com\"\r\n        },\r\n        \"GetResponse\": {\r\n            \"cats\": [\r\n                32,\r\n                75\r\n            ],\r\n            \"js\": [\r\n                \"grapp\",\r\n                \"grwf2\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.getresponse\\\\.com/\"\r\n            ],\r\n            \"description\": \"GetResponse is an email marketing app that allows you to create a mailing list and capture data onto it.\",\r\n            \"website\": \"https://www.getresponse.com\"\r\n        },\r\n        \"GetSimple CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"getsimple\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://get-simple.info\",\r\n            \"cpe\": \"cpe:2.3:a:get-simple:getsimple_cms:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"GetSocial\": {\r\n            \"cats\": [\r\n                69,\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"getsocial_version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"api\\\\.at\\\\.getsocial\\\\.io\"\r\n            ],\r\n            \"description\": \"GetSocial is a social analytics and publishing platform.\",\r\n            \"website\": \"https://getsocial.io\"\r\n        },\r\n        \"GetYourGuide\": {\r\n            \"cats\": [\r\n                72\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.getyourguide\\\\.com/\"\r\n            ],\r\n            \"description\": \"GetYourGuide is a Berlin-based online travel agency and online marketplace for tour guides and excursions.\",\r\n            \"website\": \"https://partner.getyourguide.com\"\r\n        },\r\n        \"Getintent\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"description\": \"Getintent is an adtech company that offers AI-powered programmatic suite for agencies, publishers, broadcasters and content owners.\",\r\n            \"website\": \"https://getintent.com\"\r\n        },\r\n        \"Getsitecontrol\": {\r\n            \"cats\": [\r\n                5,\r\n                73\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.getsitecontrol\\\\.com/\"\r\n            ],\r\n            \"description\": \"Getsitecontrol is a form and popup builder.\",\r\n            \"website\": \"https://getsitecontrol.com\"\r\n        },\r\n        \"Ghost\": {\r\n            \"cats\": [\r\n                1,\r\n                11\r\n            ],\r\n            \"headers\": {\r\n                \"x-ghost-cache-status\": \"\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"ghost(?:\\\\s([\\\\d.]+))?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Node.js\"\r\n            ],\r\n            \"description\": \"Ghost is a powerful app for new-media creators to publish, share, and grow a business around their content.\",\r\n            \"website\": \"https://ghost.org\"\r\n        },\r\n        \"Gigalixir\": {\r\n            \"cats\": [\r\n                62\r\n            ],\r\n            \"description\": \"Gigalixir is a PaaS focused on deployments of Elixir and Phoenix web apps\",\r\n            \"website\": \"https://gigalixir.com/\"\r\n        },\r\n        \"Gist\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"gist.setappid \"\r\n            ],\r\n            \"description\": \"Gist is email marketing automation, live chat, and helpdesk software.\",\r\n            \"website\": \"https://getgist.com/live-chat\"\r\n        },\r\n        \"Gist Giftship\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"assets/js/giftship\\\\.([\\\\d\\\\.]+)\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Gist Giftship is a gifting app on Shopify that allows your customers to complete all of their gift shopping at once.\",\r\n            \"website\": \"https://gist-apps.com/giftship\"\r\n        },\r\n        \"GitBook\": {\r\n            \"cats\": [\r\n                4\r\n            ],\r\n            \"js\": [\r\n                \"__gitbook_initial_props__\",\r\n                \"__gitbook_initial_state__\",\r\n                \"__gitbook_lazy_modules__\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"gitbook ([\\\\d.]+)?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"GitBook is a command-line tool for creating documentation using Git and Markdown.\",\r\n            \"website\": \"https://www.gitbook.com\"\r\n        },\r\n        \"GitHub Pages\": {\r\n            \"cats\": [\r\n                62\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^github\\\\.com$\",\r\n                \"x-github-request-id\": \"\"\r\n            },\r\n            \"description\": \"GitHub Pages is a static site hosting service.\",\r\n            \"website\": \"https://pages.github.com/\"\r\n        },\r\n        \"GitLab\": {\r\n            \"cats\": [\r\n                13,\r\n                47\r\n            ],\r\n            \"cookies\": {\r\n                \"_gitlab_session\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"gitlab\",\r\n                \"gl.dashboardoptions\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cheader class=\\\"navbar navbar-fixed-top navbar-gitlab with-horizontal-nav\\\"\\u003e\",\r\n                \"\\u003cmeta content=\\\"https?://[^/]+/assets/gitlab_logo-\"\r\n            ],\r\n            \"meta\": {\r\n                \"og:site_name\": [\r\n                    \"^gitlab$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Ruby on Rails\",\r\n                \"Vue.js\"\r\n            ],\r\n            \"description\": \"GitLab is a web-based DevOps lifecycle tool that provides a Git-repository manager providing wiki, issue-tracking and continuous integration and deployment pipeline features, using an open-source license.\",\r\n            \"website\": \"https://about.gitlab.com\",\r\n            \"cpe\": \"cpe:2.3:a:gitlab:gitlab:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"GitLab CI/CD\": {\r\n            \"cats\": [\r\n                44,\r\n                47\r\n            ],\r\n            \"meta\": {\r\n                \"description\": [\r\n                    \"gitlab ci/cd is a tool built into gitlab for software development through continuous methodologies.\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Ruby on Rails\"\r\n            ],\r\n            \"website\": \"https://about.gitlab.com/gitlab-ci\"\r\n        },\r\n        \"Gitea\": {\r\n            \"cats\": [\r\n                47\r\n            ],\r\n            \"cookies\": {\r\n                \"i_like_gitea\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003cdiv class=\\\"ui left\\\"\\u003e\\\\n\\\\s+© gitea version: ([\\\\d.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"meta\": {\r\n                \"keywords\": [\r\n                    \"^go,git,self-hosted,gitea$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Go\"\r\n            ],\r\n            \"description\": \"Gitea is an open-source forge software package for hosting software development version control using Git as well as other collaborative features like bug tracking, wikis and code review. It supports self-hosting but also provides a free public first-party instance hosted on DiDi's cloud.\",\r\n            \"website\": \"https://gitea.io\",\r\n            \"cpe\": \"cpe:2.3:a:gitea:gitea:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Gitiles\": {\r\n            \"cats\": [\r\n                47\r\n            ],\r\n            \"html\": [\r\n                \"powered by \\u003ca href=\\\"https://gerrit\\\\.googlesource\\\\.com/gitiles/\\\"\\u003egitiles\\u003c\"\r\n            ],\r\n            \"implies\": [\r\n                \"Java\",\r\n                \"git\"\r\n            ],\r\n            \"website\": \"https://gerrit.googlesource.com/gitiles/\"\r\n        },\r\n        \"GiveCampus\": {\r\n            \"cats\": [\r\n                111\r\n            ],\r\n            \"meta\": {\r\n                \"author\": [\r\n                    \"^givecampus$\"\r\n                ]\r\n            },\r\n            \"description\": \"GiveCampus is a fundraising platform for nonprofit educational institutions.\",\r\n            \"website\": \"https://go.givecampus.com\"\r\n        },\r\n        \"GiveSmart\": {\r\n            \"cats\": [\r\n                111\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.givesmart\\\\.com/\"\r\n            ],\r\n            \"description\": \"GiveSmart is an event fund gathering technology that offers customisable event size, mobile bidding, text-to-donate, enhanced dashboard and reporting, seating arrangement, and more.\",\r\n            \"website\": \"https://www.givesmart.com\"\r\n        },\r\n        \"GiveWP\": {\r\n            \"cats\": [\r\n                111,\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"give.donor\",\r\n                \"giveapisettings\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/give/.+give\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"GiveWP is a donation plugin for WordPress.\",\r\n            \"website\": \"https://givewp.com\"\r\n        },\r\n        \"GivingFuel\": {\r\n            \"cats\": [\r\n                111\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.givingfuel\\\\.com/\"\r\n            ],\r\n            \"description\": \"GivingFuel is a fundraising software solution.\",\r\n            \"website\": \"https://www.givingfuel.com\"\r\n        },\r\n        \"Gladly\": {\r\n            \"cats\": [\r\n                52,\r\n                53\r\n            ],\r\n            \"js\": [\r\n                \"gladly\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.gladly\\\\.com\"\r\n            ],\r\n            \"description\": \"Gladly is a customer service platform.\",\r\n            \"website\": \"https://www.gladly.com\"\r\n        },\r\n        \"GlassFish\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"glassfish(?: server)?(?: open source edition)?(?: ?/?([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"website\": \"https://glassfish.java.net\",\r\n            \"cpe\": \"cpe:2.3:a:oracle:glassfish_server:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Glassbox\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"sessioncamconfiguration\",\r\n                \"sessioncamrecorder\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.glassboxcdn\\\\.com/\"\r\n            ],\r\n            \"description\": \"Glassbox is an Israeli software company. It sells session-replay analytics software and services.\",\r\n            \"website\": \"https://www.glassbox.com\"\r\n        },\r\n        \"Glassix\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"glassixwidgetclient\"\r\n            ],\r\n            \"description\": \"Glassix is an omnichannel messaging platform for service, sales, and support centers.\",\r\n            \"website\": \"https://glassix.co.il\"\r\n        },\r\n        \"Glide.js\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"glide\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/@glidejs/glide(?:@([\\\\d\\\\.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Glide.js is a dependency-free JavaScript ES6 slider and carousel.\",\r\n            \"website\": \"https://glidejs.com\"\r\n        },\r\n        \"Glider.js\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:/|@)?([\\\\d\\\\.]{2,})?/glider\\\\.min\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Glider.js is a fast, lightweight, responsive, dependency-free scrollable list with customisable paging controls.\",\r\n            \"website\": \"https://nickpiscitelli.github.io/Glider.js\"\r\n        },\r\n        \"Glitch\": {\r\n            \"cats\": [\r\n                62\r\n            ],\r\n            \"description\": \"Glitch is a collaborative programming environment that lives in your browser and deploys code as you type.\",\r\n            \"website\": \"https://glitch.com\"\r\n        },\r\n        \"Global-e\": {\r\n            \"cats\": [\r\n                106\r\n            ],\r\n            \"cookies\": {\r\n                \"globale_ct_data\": \"\",\r\n                \"globale_data\": \"\",\r\n                \"globale_supportthirdpartcookies\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"globale\",\r\n                \"globale_engine_config\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.global-e\\\\.com\"\r\n            ],\r\n            \"description\": \"Global-e is a provider of cross-border ecommerce solutions.\",\r\n            \"website\": \"https://www.global-e.com\"\r\n        },\r\n        \"GlobalShopex\": {\r\n            \"cats\": [\r\n                106\r\n            ],\r\n            \"js\": [\r\n                \"gsxminicheckout\",\r\n                \"gsxpreviewcheckout\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//globalshopex\\\\.com/\"\r\n            ],\r\n            \"description\": \"GlobalShopex offers a logistics ecommerce solution easy to integrate, which helps online businesses to sell in over 200 countries.\",\r\n            \"website\": \"https://www.globalshopex.com\"\r\n        },\r\n        \"Globo Also Bought\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"assets/globo\\\\.alsobought\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Also Bought is a conversion Shopify app by Globo.\",\r\n            \"website\": \"https://apps.shopify.com/globo-related-products\"\r\n        },\r\n        \"Globo Color Swatch\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"assets/globo\\\\.swatch\\\\.data\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Globo Color Swatch app gives you an easy-to-use tool to display product variants on both collection page, homepage and product page creatively as a means to enhance customers' experience and stimulate them to purchase.\",\r\n            \"website\": \"https://apps.shopify.com/globo-related-products\"\r\n        },\r\n        \"Globo Form Builder\": {\r\n            \"cats\": [\r\n                100,\r\n                110\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/assets/globo\\\\.formbuilder\\\\.init\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Form Builder is a Shopify form builder app for contact form built by Globo.\",\r\n            \"website\": \"https://apps.shopify.com/form-builder-contact-form\"\r\n        },\r\n        \"Globo Pre-Order\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"globopreorderparams\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Globo Pre-Order is a Shopify app for building pre-order functionality on Shopify stores.\",\r\n            \"website\": \"https://apps.shopify.com/pre-order-pro\"\r\n        },\r\n        \"Glopal\": {\r\n            \"cats\": [\r\n                106\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.glopal\\\\.com/\"\r\n            ],\r\n            \"description\": \"Glopal provides advanced international marketing solutions for ecommerce retailers and brands seeking to grow their businesses' globally.\",\r\n            \"website\": \"https://www.glopal.com\"\r\n        },\r\n        \"GloriaFood\": {\r\n            \"cats\": [\r\n                93\r\n            ],\r\n            \"js\": [\r\n                \"glfbindbuttons\",\r\n                \"glfwidget\"\r\n            ],\r\n            \"description\": \"GloriaFood is an online ordering and food delivery platform that helps restaurant owners manage orders and streamline point-of-sale operations.\",\r\n            \"website\": \"https://www.gloriafood.com\"\r\n        },\r\n        \"Glyphicons\": {\r\n            \"cats\": [\r\n                17\r\n            ],\r\n            \"html\": [\r\n                \"(?:\\u003clink[^\\u003e]* href=[^\\u003e]+glyphicons(?:\\\\.min)?\\\\.css|\\u003cimg[^\\u003e]* src=[^\\u003e]+glyphicons)\"\r\n            ],\r\n            \"description\": \"Glyphicons are icon fonts which you can use in your web projects.\",\r\n            \"website\": \"https://glyphicons.com\"\r\n        },\r\n        \"Gnuboard\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"g4_bbs_img\",\r\n                \"g4_is_admin\",\r\n                \"g5_is_admin\",\r\n                \"g5_js_ver\"\r\n            ],\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Gnuboard is an open-source bulletin board system or CMS from South Korea.\",\r\n            \"website\": \"https://github.com/gnuboard\"\r\n        },\r\n        \"Go\": {\r\n            \"cats\": [\r\n                27\r\n            ],\r\n            \"website\": \"https://golang.org\",\r\n            \"cpe\": \"cpe:2.3:a:golang:go:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Go Instore\": {\r\n            \"cats\": [\r\n                103\r\n            ],\r\n            \"js\": [\r\n                \"gisapp.videojsctrl\",\r\n                \"gisapplib.postrobot\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.goinstore\\\\.com\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"//gis\\\\.goinstore\\\\.com/\"\r\n            ],\r\n            \"description\": \"Go Instore uses high-definition live video to connect online customers with in-store product experts.\",\r\n            \"website\": \"https://goinstore.com\"\r\n        },\r\n        \"GoAffPro\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"js\": [\r\n                \"gfp_api_server\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"api\\\\.goaffpro\\\\.com/loader\\\\.js\"\r\n            ],\r\n            \"description\": \"Goaffpro is an affiliate marketing solution for ecommerce stores.\",\r\n            \"website\": \"https://goaffpro.com/\"\r\n        },\r\n        \"GoAhead\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"goahead\"\r\n            },\r\n            \"website\": \"https://embedthis.com/products/goahead/index.html\",\r\n            \"cpe\": \"cpe:2.3:a:embedthis:goahead:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"GoAnywhere\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"appcontainer\"\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"goanywhere\"\r\n            },\r\n            \"description\": \"GoAnywhere by HelpSystems is a Managed File Transfer (MFT) system with sharing and collaboration features\",\r\n            \"website\": \"https://www.goanywhere.com/\"\r\n        },\r\n        \"GoCache\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^gocache$\",\r\n                \"x-gocache-cachestatus\": \"\"\r\n            },\r\n            \"description\": \"GoCache is an in-memory key:value store/cache similar to memcached that is suitable for applications running on a single machine.\",\r\n            \"website\": \"https://www.gocache.com.br/\"\r\n        },\r\n        \"GoCertify\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"cookies\": {\r\n                \"_gocertify_session\": \"\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"assets\\\\.gocertify\\\\.me/\"\r\n            ],\r\n            \"description\": \"GoCertify is a conversion-focused and cost-effective way to verify students, key workers, under-26s, over-60s, military and more for exclusive discounts.\",\r\n            \"website\": \"https://www.gocertify.me\"\r\n        },\r\n        \"GoDaddy\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"description\": \"GoDaddy is used as a web host and domain registrar.\",\r\n            \"website\": \"https://www.godaddy.com\"\r\n        },\r\n        \"GoDaddy CoBlocks\": {\r\n            \"cats\": [\r\n                87,\r\n                51\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/coblocks/\"\r\n            ],\r\n            \"description\": \"GoDaddy CoBlocks is a suite of professional page building content blocks for the WordPress Gutenberg block editor.\",\r\n            \"website\": \"https://github.com/godaddy-wordpress/coblocks\"\r\n        },\r\n        \"GoDaddy Domain Parking\": {\r\n            \"cats\": [\r\n                109\r\n            ],\r\n            \"scripts\": [\r\n                \"wsimg\\\\.com/parking-lander\"\r\n            ],\r\n            \"description\": \"GoDaddy is used as a web host and domain registrar.\",\r\n            \"website\": \"https://www.godaddy.com\"\r\n        },\r\n        \"GoDaddy Escapade\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"description\": \"GoDaddy Escapade is a GoDaddy Primer child theme with a unique sidebar navigation.\",\r\n            \"website\": \"https://github.com/godaddy-wordpress/primer-child-escapade\"\r\n        },\r\n        \"GoDaddy Go\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"gofrontend.openmenuonhover\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/go/.+frontend\\\\.min\\\\.js(?:.+ver=([\\\\d\\\\.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"GoDaddy Go is a flexible Gutenberg-first WordPress theme built for go-getters everywhere.\",\r\n            \"website\": \"https://github.com/godaddy-wordpress/go\"\r\n        },\r\n        \"GoDaddy Lyrical\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"description\": \"GoDaddy Lyrical is a GoDaddy Primer child theme with a focus on photography and beautiful fonts.\",\r\n            \"website\": \"https://github.com/godaddy-wordpress/primer-child-lyrical\"\r\n        },\r\n        \"GoDaddy Online Store\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"headers\": {\r\n                \"via\": \"^1\\\\.1 mysimplestore\\\\.com$\"\r\n            },\r\n            \"website\": \"https://www.godaddy.com/en-uk/websites/online-store\"\r\n        },\r\n        \"GoDaddy Primer\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/primer/.+navigation\\\\.min\\\\.js(?:.+ver=([\\\\d\\\\.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"GoDaddy Primer is a powerful theme that brings clarity to your content in a fresh design. This is the parent for all themes in the GoDaddy Primer theme family.\",\r\n            \"website\": \"https://github.com/godaddy-wordpress/primer\"\r\n        },\r\n        \"GoDaddy Uptown Style\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"description\": \"GoDaddy Uptown Style is a GoDaddy Primer child theme with elegance and class.\",\r\n            \"website\": \"https://github.com/godaddy-wordpress/primer-child-uptownstyle\"\r\n        },\r\n        \"GoDaddy Website Builder\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"dps_site_id\": \"\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"go daddy website builder (.+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"website\": \"https://www.godaddy.com/websites/website-builder\"\r\n        },\r\n        \"GoJS\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"go.graphobject\",\r\n                \"go.version\"\r\n            ],\r\n            \"website\": \"https://gojs.net/\"\r\n        },\r\n        \"GoKwik\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"gokwikbuynow\",\r\n                \"gokwikcheckoutapp\",\r\n                \"gokwiksdk\"\r\n            ],\r\n            \"description\": \"GoKwik is a platform for solving shopping experience problems on ecommerce websites on the internet.\",\r\n            \"website\": \"https://www.gokwik.co\"\r\n        },\r\n        \"GoMage\": {\r\n            \"cats\": [\r\n                108\r\n            ],\r\n            \"js\": [\r\n                \"gomage_navigation_loadinfo_text\",\r\n                \"gomage_navigation_urlhash\",\r\n                \"gomagenavigation\",\r\n                \"gomagenavigationclass\",\r\n                \"gomagespinnermodal\"\r\n            ],\r\n            \"implies\": [\r\n                \"Magento\\\\;version:2\",\r\n                \"PWA\"\r\n            ],\r\n            \"description\": \"GoMage is a Magento development company with 10 years of experience.\",\r\n            \"website\": \"https://www.gomage.com/magento-2-pwa\"\r\n        },\r\n        \"GoStats\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"_go_track_src\",\r\n                \"_gostatsrun\",\r\n                \"go_msie\"\r\n            ],\r\n            \"website\": \"https://gostats.com/\"\r\n        },\r\n        \"GoatCounter\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"gc\\\\.zgo\\\\.at/count\\\\.js\"\r\n            ],\r\n            \"description\": \"GoatCounter is an open source web analytics platform available as a hosted service (free for non-commercial use) or self-hosted app. It aims to offer easy to use and meaningful privacy-friendly web analytics as an alternative to Google Analytics or Matomo.\",\r\n            \"website\": \"https://www.goatcounter.com/\"\r\n        },\r\n        \"Goftino\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"goftino.setwidget\",\r\n                \"goftino_1\",\r\n                \"goftino_geturl\",\r\n                \"goftinoremoveload\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.goftino\\\\.com/\"\r\n            ],\r\n            \"description\": \"Goftino is an online chat service for web users.\",\r\n            \"website\": \"https://www.goftino.com\"\r\n        },\r\n        \"Gogs\": {\r\n            \"cats\": [\r\n                47\r\n            ],\r\n            \"cookies\": {\r\n                \"i_like_gogits\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003cbutton class=\\\"ui basic clone button\\\" id=\\\"repo-clone-ssh\\\" data-link=\\\"gogs@\",\r\n                \"\\u003cdiv class=\\\"ui left\\\"\\u003e\\\\n\\\\s+© \\\\d{4} gogs version: ([\\\\d.]+) page:\\\\;version:\\\\1\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"js/gogs\\\\.js\"\r\n            ],\r\n            \"meta\": {\r\n                \"keywords\": [\r\n                    \"go, git, self-hosted, gogs\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Go\",\r\n                \"Macaron\"\r\n            ],\r\n            \"description\": \"Gogs is a self-hosted Git service written in Go.\",\r\n            \"website\": \"https://gogs.io\",\r\n            \"cpe\": \"cpe:2.3:a:gogs:gogs:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Gomag\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"$gomagconfig\",\r\n                \"gomagform\"\r\n            ],\r\n            \"headers\": {\r\n                \"author\": \"^gomag$\"\r\n            },\r\n            \"description\": \"Gomag is a B2B and B2C ecommerce platform from Romania.\",\r\n            \"website\": \"https://www.gomag.ro\"\r\n        },\r\n        \"Google AdSense\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"__google_ad_urls\",\r\n                \"adsbygoogle\",\r\n                \"goog_adsense_\",\r\n                \"goog_adsense_osdadapter\",\r\n                \"google_ad_\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"2mdn\\\\.net\",\r\n                \"ad\\\\.ca\\\\.doubleclick\\\\.net\",\r\n                \"ad\\\\.ca\\\\.doubleclick\\\\.net\",\r\n                \"googlesyndication\\\\.com/\"\r\n            ],\r\n            \"description\": \"Google AdSense is a program run by Google through which website publishers serve advertisements that are targeted to the site content and audience.\",\r\n            \"website\": \"https://www.google.com/adsense/start/\"\r\n        },\r\n        \"Google Ads\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"description\": \"Google Ads is an online advertising platform developed by Google.\",\r\n            \"website\": \"https://ads.google.com\"\r\n        },\r\n        \"Google Ads Conversion Tracking\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"google_trackconversion\"\r\n            ],\r\n            \"scripts\": [\r\n                \"gtag\\\\([^)]+'(aw-)\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.googleadservices\\\\.com/pagead/conversion_async\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Google Ads\"\r\n            ],\r\n            \"description\": \"Google Ads Conversion Tracking is a free tool that shows you what happens after a customer interacts with your ads.\",\r\n            \"website\": \"https://support.google.com/google-ads/answer/1722022\"\r\n        },\r\n        \"Google Analytics\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"cookies\": {\r\n                \"__utma\": \"\",\r\n                \"_ga\": \"\",\r\n                \"_ga_*\": \"\\\\;version:ga4\",\r\n                \"_gat\": \"\\\\;version:ua\"\r\n            },\r\n            \"js\": [\r\n                \"gaglobal\",\r\n                \"googleanalyticsobject\"\r\n            ],\r\n            \"scripts\": [\r\n                \"gtag\\\\([^)]+'(g-)\\\\;version:\\\\1?ga4:\",\r\n                \"gtag\\\\([^)]+'(ua-)\\\\;version:\\\\1?ua:\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"google-analytics\\\\.com/(?:ga|urchin|analytics)\\\\.js\",\r\n                \"googletagmanager\\\\.com/gtag/js\"\r\n            ],\r\n            \"description\": \"Google Analytics is a free web analytics service that tracks and reports website traffic.\",\r\n            \"website\": \"https://google.com/analytics\"\r\n        },\r\n        \"Google Analytics Enhanced eCommerce\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"gaplugins.ec\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"google-analytics\\\\.com\\\\/plugins\\\\/ua\\\\/(?:ec|ecommerce)\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Cart Functionality\",\r\n                \"Google Analytics\"\r\n            ],\r\n            \"description\": \"Google analytics enhanced ecommerce is a plug-in which enables the measurement of user interactions with products on ecommerce websites.\",\r\n            \"website\": \"https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce\"\r\n        },\r\n        \"Google App Engine\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"website\": \"https://cloud.google.com/appengine\"\r\n        },\r\n        \"Google Call Conversion Tracking\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"_googcalltrackingimpl\",\r\n                \"google_wcc_status\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"gstatic\\\\.com/call-tracking/.+\\\\.js\"\r\n            ],\r\n            \"description\": \"Google Call Conversion Tracking is conversion tracking that shows which search keywords are driving the most calls.\",\r\n            \"website\": \"https://support.google.com/google-ads/answer/6100664\"\r\n        },\r\n        \"Google Charts\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"__googlevisualizationabstractrendererelementscount__\",\r\n                \"__gvizguard__\"\r\n            ],\r\n            \"description\": \"Google Charts is an interactive web service that creates graphical charts from user-supplied information.\",\r\n            \"website\": \"https://developers.google.com/chart/\"\r\n        },\r\n        \"Google Cloud\": {\r\n            \"cats\": [\r\n                63\r\n            ],\r\n            \"description\": \"Google Cloud is a suite of cloud computing services.\",\r\n            \"website\": \"https://cloud.google.com\",\r\n            \"cpe\": \"cpe:2.3:a:google:cloud_platform:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Google Cloud CDN\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"headers\": {\r\n                \"via\": \"^1\\\\.1 google$\"\r\n            },\r\n            \"implies\": [\r\n                \"Google Cloud\"\r\n            ],\r\n            \"description\": \"Cloud CDN uses Google's global edge network to serve content closer to users.\",\r\n            \"website\": \"https://cloud.google.com/cdn\"\r\n        },\r\n        \"Google Cloud Storage\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"headers\": {\r\n                \"x-goog-storage-class\": \"^\\\\w+$\"\r\n            },\r\n            \"implies\": [\r\n                \"Google Cloud\"\r\n            ],\r\n            \"description\": \"Google Cloud Storage allows world-wide storage and retrieval of any amount of data at any time.\",\r\n            \"website\": \"https://cloud.google.com/storage\"\r\n        },\r\n        \"Google Cloud Trace\": {\r\n            \"cats\": [\r\n                92\r\n            ],\r\n            \"headers\": {\r\n                \"x-cloud-trace-context\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"Google Cloud\"\r\n            ],\r\n            \"description\": \"Google Cloud Trace is a distributed tracing system that collects latency data from applications and displays it in the Google Cloud Console.\",\r\n            \"website\": \"https://cloud.google.com/trace\"\r\n        },\r\n        \"Google Code Prettify\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"prettyprint\"\r\n            ],\r\n            \"website\": \"https://code.google.com/p/google-code-prettify\"\r\n        },\r\n        \"Google Customer Reviews\": {\r\n            \"cats\": [\r\n                90\r\n            ],\r\n            \"description\": \"Google Customer Reviews is a badge on your site that can help users identify your site with the Google brand and can be placed on any page of your site.\",\r\n            \"website\": \"https://support.google.com/merchants/answer/7105655?hl=en\"\r\n        },\r\n        \"Google Font API\": {\r\n            \"cats\": [\r\n                17\r\n            ],\r\n            \"js\": [\r\n                \"webfonts\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"googleapis\\\\.com/.+webfont\"\r\n            ],\r\n            \"description\": \"Google Font API is a web service that supports open-source font files that can be used on your web designs.\",\r\n            \"website\": \"https://google.com/fonts\"\r\n        },\r\n        \"Google Forms\": {\r\n            \"cats\": [\r\n                110\r\n            ],\r\n            \"description\": \"Google Forms is a free online form builder that allows you to create and publish online forms, surveys, quizzes, order forms, and more.\",\r\n            \"website\": \"https://www.google.com/forms/about/\"\r\n        },\r\n        \"Google Hosted Libraries\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"ajax\\\\.googleapis\\\\.com/ajax/libs/\"\r\n            ],\r\n            \"description\": \"Google Hosted Libraries is a stable, reliable, high-speed, globally available content distribution network for the most popular, open-source JavaScript libraries.\",\r\n            \"website\": \"https://developers.google.com/speed/libraries\"\r\n        },\r\n        \"Google Maps\": {\r\n            \"cats\": [\r\n                35\r\n            ],\r\n            \"js\": [\r\n                \"googlemap\",\r\n                \"googlemapsconfig\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:maps\\\\.google\\\\.com/maps\\\\?file=api(?:\\u0026v=([\\\\d.]+))?|maps\\\\.google\\\\.com/maps/api/staticmap)\\\\;version:api v\\\\1\",\r\n                \"//maps\\\\.google(?:apis)?\\\\.com/maps/api/js\"\r\n            ],\r\n            \"description\": \"Google Maps is a web mapping service. It offers satellite imagery, aerial photography, street maps, 360° interactive panoramic views of streets, real-time traffic conditions, and route planning for traveling by foot, car, bicycle and air, or public transportation.\",\r\n            \"website\": \"https://maps.google.com\"\r\n        },\r\n        \"Google My Business\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"website\": \"https://www.google.com/business/website-builder\"\r\n        },\r\n        \"Google Optimize\": {\r\n            \"cats\": [\r\n                74\r\n            ],\r\n            \"js\": [\r\n                \"google_optimize\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"googleoptimize\\\\.com/optimize\\\\.js\"\r\n            ],\r\n            \"description\": \"Google Optimize allows you to test variants of web pages and see how they perform.\",\r\n            \"website\": \"https://optimize.google.com\"\r\n        },\r\n        \"Google PageSpeed\": {\r\n            \"cats\": [\r\n                23,\r\n                33,\r\n                92\r\n            ],\r\n            \"headers\": {\r\n                \"x-mod-pagespeed\": \"([\\\\d.]+)\\\\;version:\\\\1\",\r\n                \"x-page-speed\": \"(.+)\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"Google PageSpeed is a family of tools designed to help websites performance optimisations.\",\r\n            \"website\": \"https://developers.google.com/speed/pagespeed/mod\"\r\n        },\r\n        \"Google Pay\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"pay\\\\.google\\\\.com/([a-z/]+)/pay\\\\.js\"\r\n            ],\r\n            \"description\": \"Google Pay is a digital wallet platform and online payment system developed by Google to power in-app and tap-to-pay purchases on mobile devices, enabling users to make payments with Android phones, tablets or watches.\",\r\n            \"website\": \"https://pay.google.com\"\r\n        },\r\n        \"Google Publisher Tag\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"googletagservices\\\\.com/tag/js/gpt\\\\.js\",\r\n                \"pagead2\\\\.googlesyndication\\\\.com/tag/js/gpt\\\\.js\",\r\n                \"securepubads\\\\.g\\\\.doubleclick.net/tag/js/gpt\\\\.js\"\r\n            ],\r\n            \"description\": \"Google Publisher Tag (GPT) is an ad tagging library for Google Ad Manager which is used to dynamically build ad requests.\",\r\n            \"website\": \"https://developers.google.com/publisher-tag/guides/get-started\"\r\n        },\r\n        \"Google Sign-in\": {\r\n            \"cats\": [\r\n                69\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"accounts\\\\.google\\\\.com/gsi/client\"\r\n            ],\r\n            \"meta\": {\r\n                \"google-signin-client_id\": [],\r\n                \"google-signin-scope\": []\r\n            },\r\n            \"description\": \"Google Sign-In is a secure authentication system that reduces the burden of login for users, by enabling them to sign in with their Google account.\",\r\n            \"website\": \"https://developers.google.com/identity/sign-in/web\"\r\n        },\r\n        \"Google Sites\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"website\": \"https://sites.google.com\"\r\n        },\r\n        \"Google Tag Manager\": {\r\n            \"cats\": [\r\n                42\r\n            ],\r\n            \"js\": [\r\n                \"googletag\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- (?:end )?google tag manager --\\u003e\",\r\n                \"googletagmanager\\\\.com/ns\\\\.html[^\\u003e]+\\u003e\\u003c/iframe\\u003e\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"googletagmanager\\\\.com/gtm\\\\.js\"\r\n            ],\r\n            \"description\": \"Google Tag Manager is a tag management system (TMS) that allows you to quickly and easily update measurement codes and related code fragments collectively known as tags on your website or mobile app.\",\r\n            \"website\": \"https://www.google.com/tagmanager\"\r\n        },\r\n        \"Google Tag Manager for WordPress\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/duracelltomi-google-tag-manager/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"Google Tag Manager\"\r\n            ],\r\n            \"description\": \"Google Tag Manager for WordPress plugin places the GTM container code snippets onto your wordpress website so that you do not need to add this manually.\",\r\n            \"website\": \"https://gtm4wp.com\"\r\n        },\r\n        \"Google Wallet\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"checkout\\\\.google\\\\.com\",\r\n                \"wallet\\\\.google\\\\.com\"\r\n            ],\r\n            \"website\": \"https://wallet.google.com\"\r\n        },\r\n        \"Google Web Server\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"gws\"\r\n            },\r\n            \"website\": \"https://en.wikipedia.org/wiki/Google_Web_Server\",\r\n            \"cpe\": \"cpe:2.3:a:google:web_server:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Google Web Toolkit\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"js\": [\r\n                \"__gwt_\",\r\n                \"__gwt_activemodules\",\r\n                \"__gwt_getmetaproperty\",\r\n                \"__gwt_isknownpropertyvalue\",\r\n                \"__gwt_stylesloaded\",\r\n                \"__gwtlistener\"\r\n            ],\r\n            \"meta\": {\r\n                \"gwt:property\": []\r\n            },\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"description\": \"Google Web Toolkit (GWT) is an open-source Java software development framework that makes writing AJAX applications.\",\r\n            \"website\": \"https://developers.google.com/web-toolkit\",\r\n            \"cpe\": \"cpe:2.3:a:google:web_toolkit:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Google Workspace\": {\r\n            \"cats\": [\r\n                30,\r\n                75\r\n            ],\r\n            \"description\": \"Google Workspace, formerly G Suite, is a collection of cloud computing, productivity and collaboration tools.\",\r\n            \"website\": \"https://workspace.google.com/\"\r\n        },\r\n        \"Gorgias\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"gorgiaschat\"\r\n            ],\r\n            \"description\": \"Gorgias is a helpdesk and chat solution designed for ecommerce stores.\",\r\n            \"website\": \"https://www.gorgias.com/\"\r\n        },\r\n        \"GotiPath\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"headers\": {\r\n                \"x-cache\": \"\\\\.swiftserve\\\\.com\"\r\n            },\r\n            \"description\": \"GotiPath is a content delivery network (CDN) provider that is associated with telecom giant Telekom Malaysia Berhad.\",\r\n            \"website\": \"https://gotipath.com\"\r\n        },\r\n        \"Govalo\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"govalo.meta\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.shopify\\\\.com/extensions/.+/([\\\\d\\\\.]+)/assets/govalo\\\\.min\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Govalo is a software startup company that builds a Shopify app.\",\r\n            \"website\": \"https://govalo.com\"\r\n        },\r\n        \"Grab Pay Later\": {\r\n            \"cats\": [\r\n                41,\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"grab_widget_money_format\",\r\n                \"grabwidget\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"grab-paylater\\\\.js\"\r\n            ],\r\n            \"description\": \"Grab Pay Later is a buy now pay later solution offered by Grab.\",\r\n            \"website\": \"https://www.grab.com/sg/finance/pay-later/\"\r\n        },\r\n        \"Grafana\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"__grafana_public_path__\"\r\n            ],\r\n            \"scripts\": [\r\n                \".+latestversion\\\":\\\"[\\\\d\\\\.\\\\w\\\\-]+\\\"\\\\,\\\"version\\\":\\\"([\\\\d\\\\.]+)\\\\;version:\\\\1\\\\;confidence:75\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"grafana\\\\..+\\\\.com/public/build/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Go\",\r\n                \"Macaron\"\r\n            ],\r\n            \"description\": \"Grafana is a multi-platform open source analytics and interactive visualisation web application.\",\r\n            \"website\": \"https://grafana.com\"\r\n        },\r\n        \"Graffiti CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"graffitibot\": \"\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"/graffiti\\\\.js\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"graffiti cms ([^\\\"]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"website\": \"https://graffiticms.codeplex.com\"\r\n        },\r\n        \"GrandNode\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"grand.customer\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"(?:\\u003c!--grandnode |\\u003ca[^\\u003e]+grandnode - powered by |powered by: \\u003ca[^\\u003e]+nopcommerce)\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"grandnode\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"website\": \"https://grandnode.com\"\r\n        },\r\n        \"Granim.js\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"granim\"\r\n            ],\r\n            \"description\": \"Granim.js is a lightweight javascript library to create fluid and interactive gradients animations.\",\r\n            \"website\": \"https://sarcadass.github.io/granim.js\"\r\n        },\r\n        \"GrapesJS\": {\r\n            \"cats\": [\r\n                51,\r\n                18\r\n            ],\r\n            \"js\": [\r\n                \"grapesjs.version\"\r\n            ],\r\n            \"description\": \"GrapesJS is an open-source, multi-purpose page builder which combines different plugins and intuitive drag and drop interface.\",\r\n            \"website\": \"https://grapesjs.com\",\r\n            \"cpe\": \"cpe:2.3:a:grapesjs:grapesjs:*:*:*:*:*:node.js:*:*\"\r\n        },\r\n        \"GraphCMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"implies\": [\r\n                \"Go\",\r\n                \"GraphQL\",\r\n                \"PostgreSQL\",\r\n                \"TypeScript\"\r\n            ],\r\n            \"description\": \"GraphCMS is a GraphQL headless CMS for content federation and omnichannel headless content management.\",\r\n            \"website\": \"https://graphcms.com\"\r\n        },\r\n        \"GraphQL\": {\r\n            \"cats\": [\r\n                27\r\n            ],\r\n            \"meta\": {\r\n                \"store-config\": [\r\n                    \"graphqlmethod\"\r\n                ]\r\n            },\r\n            \"description\": \"GraphQL is a query language for APIs and a runtime for fulfilling those queries with your existing data.\",\r\n            \"website\": \"https://graphql.org\"\r\n        },\r\n        \"Graphene\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"graphenegetinfscrollbtnlbl\",\r\n                \"graphenejs.templateurl\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/graphene(?:-plus)?/.+graphene\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Graphene is a WordPress theme created by Graphene Themes.\",\r\n            \"website\": \"https://www.graphene-theme.com/graphene-theme\"\r\n        },\r\n        \"Grasp\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"casengo.widget\",\r\n                \"casengo_inline_cookie\",\r\n                \"casengoupdatewidget\"\r\n            ],\r\n            \"description\": \"Grasp is a customer support software company that offers a cloud-based helpdesk and live chat solution for businesses of all sizes.\",\r\n            \"website\": \"https://www.getgrasp.com\"\r\n        },\r\n        \"Grav\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"gravcms(?:\\\\s([\\\\d.]+))?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://getgrav.org\"\r\n        },\r\n        \"Gravatar\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"gravatar\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c[^\\u003e]+gravatar\\\\.com/avatar/\"\r\n            ],\r\n            \"description\": \"Gravatar is a service for providing globally unique avatars.\",\r\n            \"website\": \"https://gravatar.com\"\r\n        },\r\n        \"Gravitec\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"gravitec\",\r\n                \"gravitecwebpackjsonp\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:cdn|id)\\\\.gravitec\\\\.(?:media|net)\"\r\n            ],\r\n            \"description\": \"Gravitec is a push notification tool.\",\r\n            \"website\": \"https://gravitec.net\"\r\n        },\r\n        \"Gravity Forms\": {\r\n            \"cats\": [\r\n                87,\r\n                110\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cdiv class=(?:\\\"|')[^\\u003e]*gform_body\",\r\n                \"\\u003cdiv class=(?:\\\"|')[^\\u003e]*gform_wrapper\",\r\n                \"\\u003clink [^\\u003e]*href=(?:\\\"|')[^\\u003e]*wp-content/plugins/gravityforms/css/\",\r\n                \"\\u003cul [^\\u003e]*class=(?:\\\"|')[^\\u003e]*gform_fields\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/gravityforms/js/[^/]+\\\\.js\\\\?ver=([\\\\d.]+)$\\\\;version:\\\\1\"\r\n            ],\r\n            \"website\": \"https://gravityforms.com\"\r\n        },\r\n        \"GreatPages\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.greatpages\\\\.com\\\\.br/\"\r\n            ],\r\n            \"description\": \"GreatPages is a multi-purpose page builder software developed in Brazil.\",\r\n            \"website\": \"https://www.greatpages.com.br\"\r\n        },\r\n        \"Green Valley CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cimg[^\\u003e]+/dsresource\\\\?objectid=\"\r\n            ],\r\n            \"meta\": {\r\n                \"dc.identifier\": [\r\n                    \"/content\\\\.jsp\\\\?objectid=\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Apache Tomcat\"\r\n            ],\r\n            \"website\": \"https://www.greenvalley.nl/Public/Producten/Content_Management/CMS\"\r\n        },\r\n        \"Greenhouse\": {\r\n            \"cats\": [\r\n                101\r\n            ],\r\n            \"js\": [\r\n                \"populategreenhousejobs\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.greenhouse\\\\.io/\"\r\n            ],\r\n            \"description\": \"Greenhouse is an applicant tracking and hiring tool. Greenhouse features automated workflow, recruitment analytics, CRM, and onboarding.\",\r\n            \"website\": \"https://www.greenhouse.io\"\r\n        },\r\n        \"Griddo\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^griddo$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Gatsby\",\r\n                \"React\"\r\n            ],\r\n            \"description\": \"Griddo is an Martech Experience Platform for creating custom digital experiences.\",\r\n            \"website\": \"https://griddo.io\"\r\n        },\r\n        \"Gridsome\": {\r\n            \"cats\": [\r\n                57\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^gridsome v([\\\\d.]+)$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Vue.js\"\r\n            ],\r\n            \"description\": \"Gridsome is a free and open-source Vue-powered static site generator for building static websites.\",\r\n            \"website\": \"https://gridsome.org\"\r\n        },\r\n        \"Grin\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"grin\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"grin-sdk\\\\.js\"\r\n            ],\r\n            \"description\": \"Grin is a influence marketing platform.\",\r\n            \"website\": \"https://grin.co/\"\r\n        },\r\n        \"GrocerKey\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.grocerywebsite\\\\.com/\",\r\n                \"grocerkey-widget\\\\.s3\\\\.amazonaws\\\\.com/\"\r\n            ],\r\n            \"description\": \"GrocerKey is an ecommerce platform that helps grocery stores build an online store.\",\r\n            \"website\": \"https://grocerkey.com\"\r\n        },\r\n        \"GroupBy\": {\r\n            \"cats\": [\r\n                29\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.groupbycloud\\\\.com\"\r\n            ],\r\n            \"description\": \"GroupBy is a search enging for eCommerce sites.\",\r\n            \"website\": \"https://groupbyinc.com/\"\r\n        },\r\n        \"Growave\": {\r\n            \"cats\": [\r\n                32,\r\n                69\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.socialshopwave\\\\.com/\"\r\n            ],\r\n            \"description\": \"Growave is the all-in-one app: social login and sharing, reviews, wishlists, instagram feed, automated emails and more.\",\r\n            \"website\": \"https://growave.io\"\r\n        },\r\n        \"GrowingIO\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"cookies\": {\r\n                \"gr_user_id\": \"\",\r\n                \"grwng_uid\": \"\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"assets\\\\.growingio\\\\.com/([\\\\d.]+)/gio\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"website\": \"https://www.growingio.com/\"\r\n        },\r\n        \"Guestonline\": {\r\n            \"cats\": [\r\n                93\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"ib\\\\.guestonline\\\\.\\\\w+\"\r\n            ],\r\n            \"description\": \"Guestonline is a restaurant table booking widget.\",\r\n            \"website\": \"https://www.guestonline.io\"\r\n        },\r\n        \"GuideIT\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"headers\": {\r\n                \"platform\": \"^guideit$\"\r\n            },\r\n            \"description\": \"GuideIT is a cloud hosting provider.\",\r\n            \"website\": \"https://guideit.uk\"\r\n        },\r\n        \"GumGum\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"description\": \"GumGum is a technology and media company specializing in contextual intelligence.\",\r\n            \"website\": \"https://gumgum.com\"\r\n        },\r\n        \"Gumlet\": {\r\n            \"cats\": [\r\n                92\r\n            ],\r\n            \"js\": [\r\n                \"gumlet\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.gumlet\\\\.com\"\r\n            ],\r\n            \"description\": \"Gumlet is a solution to optimize images.\",\r\n            \"website\": \"https://www.gumlet.com/\"\r\n        },\r\n        \"Gumroad\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"_gumroad_app_session\": \"\",\r\n                \"_gumroad_guid\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"creategumroadoverlay\",\r\n                \"gumroadoverlay\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"gumroad\\\\.com/js/gumroad-embed\\\\.js\",\r\n                \"gumroad\\\\.com/js/gumroad\\\\.js\",\r\n                \"gumroad\\\\.com/packs/js/\"\r\n            ],\r\n            \"description\": \"Gumroad is a self-publishing digital marketplace platform to sell digital services such as books, memberships, courses and other digital services.\",\r\n            \"website\": \"https://gumroad.com\"\r\n        },\r\n        \"Gumstack\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"gumstack\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"w\\\\.gumstack\\\\.com\"\r\n            ],\r\n            \"description\": \"Gumstack provides a live video shopping solution for eCommerce.\",\r\n            \"website\": \"https://gumstack.com/\"\r\n        },\r\n        \"Gutenberg\": {\r\n            \"cats\": [\r\n                87,\r\n                20\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/gutenberg/\"\r\n            ],\r\n            \"description\": \"Gutenberg is the code name for the new block based editor introduced in WordPress 5.\",\r\n            \"website\": \"https://github.com/WordPress/gutenberg\"\r\n        },\r\n        \"H2O\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"cookies\": {\r\n                \"h2o_casper\": \"\"\r\n            },\r\n            \"headers\": {\r\n                \"server\": \"^h2o(?:/)?([\\\\d\\\\.]+)?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"C\",\r\n                \"HTTP/2\"\r\n            ],\r\n            \"description\": \"H2O is a fast and secure HTTP/2 server written in C by Kazuho Oku.\",\r\n            \"website\": \"https://github.com/h2o/h2o\"\r\n        },\r\n        \"HCL Commerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scripts\": [\r\n                \"/webapp/wcs/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"description\": \"HCL Commerce is a software platform framework for ecommerce, including marketing, sales, customer and order processing functionality.\",\r\n            \"website\": \"https://www.hcltechsw.com/commerce\"\r\n        },\r\n        \"HCL Digital Experience\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"ibmcfg.themeconfig.moduleswebappbaseuri\"\r\n            ],\r\n            \"headers\": {\r\n                \"ibm-web2-location\": \"\",\r\n                \"itx-generated-timestamp\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"description\": \"HCL Digital Experience software empowers you to create, manage and deliver engaging omni-channel digital experiences to virtually all audiences.\",\r\n            \"website\": \"https://www.hcltechsw.com/dx\",\r\n            \"cpe\": \"cpe:2.3:a:ibm:websphere_portal:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"HCL Domino\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^lotus-domino$\"\r\n            },\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"description\": \"HCL Domino, formerly called IBM Domino (1995) and Lotus Domino (1989), is an enterprise server application development platform.\",\r\n            \"website\": \"https://www.hcltechsw.com/domino\",\r\n            \"cpe\": \"cpe:2.3:a:ibm:lotus_domino:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"HHVM\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"hhvm/?([\\\\d.]+)?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"PHP\\\\;confidence:75\"\r\n            ],\r\n            \"website\": \"https://hhvm.com\",\r\n            \"cpe\": \"cpe:2.3:a:facebook:hhvm:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"HP Compact Server\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"hp_compact_server(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"website\": \"https://hp.com\"\r\n        },\r\n        \"HP iLO\": {\r\n            \"cats\": [\r\n                22,\r\n                46\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"hp-ilo-server(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"HP iLO is a tool that provides multiple ways to configure, update, monitor, and run servers remotely.\",\r\n            \"website\": \"https://hp.com\",\r\n            \"cpe\": \"cpe:2.3:h:hp:integrated_lights-out:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"HSTS\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"headers\": {\r\n                \"strict-transport-security\": \"\"\r\n            },\r\n            \"description\": \"HTTP Strict Transport Security (HSTS) informs browsers that the site should only be accessed using HTTPS.\",\r\n            \"website\": \"https://www.rfc-editor.org/rfc/rfc6797#section-6.1\"\r\n        },\r\n        \"HTTP/2\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"headers\": {\r\n                \"alt-svc\": \"h2\",\r\n                \"x-firefox-spdy\": \"h2\"\r\n            },\r\n            \"description\": \"HTTP/2 (originally named HTTP/2.0) is a major revision of the HTTP network protocol used by the World Wide Web.\",\r\n            \"website\": \"https://http2.github.io\"\r\n        },\r\n        \"HTTP/3\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"headers\": {\r\n                \"alt-svc\": \"h3\",\r\n                \"x-firefox-http3\": \"h3\"\r\n            },\r\n            \"description\": \"HTTP/3 is the third major version of the Hypertext Transfer Protocol used to exchange information on the World Wide Web.\",\r\n            \"website\": \"https://httpwg.org/\"\r\n        },\r\n        \"Haddock\": {\r\n            \"cats\": [\r\n                4\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cp\\u003eproduced by \\u003ca href=\\\"http://www\\\\.haskell\\\\.org/haddock/\\\"\\u003ehaddock\\u003c/a\\u003e version ([0-9.]+)\\u003c/p\\u003e\\\\;version:\\\\1\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"haddock-util\\\\.js\"\r\n            ],\r\n            \"description\": \"Haddock is a tool for automatically generating documentation from annotated Haskell source code.\",\r\n            \"website\": \"https://www.haskell.org/haddock/\"\r\n        },\r\n        \"Halo\": {\r\n            \"cats\": [\r\n                1,\r\n                11\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"halo ([\\\\d.]+)?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"website\": \"https://halo.run\"\r\n        },\r\n        \"Hamechio\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"hamech\\\\.io/\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Hamechio is a web application framework.\",\r\n            \"website\": \"https://hamech.io\"\r\n        },\r\n        \"Hammer.js\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"ha.version\",\r\n                \"hammer\",\r\n                \"hammer.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"hammer(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"website\": \"https://hammerjs.github.io\"\r\n        },\r\n        \"Handlebars\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"handlebars\",\r\n                \"handlebars.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"handlebars(?:\\\\.runtime)?(?:-v([\\\\d.]+?))?(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Handlebars is a JavaScript library used to create reusable webpage templates.\",\r\n            \"website\": \"https://handlebarsjs.com\",\r\n            \"cpe\": \"cpe:2.3:a:handlebars.js_project:handlebars.js:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Handtalk\": {\r\n            \"cats\": [\r\n                68\r\n            ],\r\n            \"js\": [\r\n                \"handtalk\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"api\\\\.handtalk\\\\.me\"\r\n            ],\r\n            \"description\": \"Handtalk is an accessiblity plug-in which uses sign language to make sites accessible.\",\r\n            \"website\": \"https://www.handtalk.me/\"\r\n        },\r\n        \"Hansel\": {\r\n            \"cats\": [\r\n                58\r\n            ],\r\n            \"js\": [\r\n                \"hansel\",\r\n                \"hanselpx\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.hansel\\\\.io/web/([\\\\d\\\\.]+)/\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Hansel is a B2B enterprise software that deploys real-time Nudges to drive feature adoption and address user drop-offs, at scale.\",\r\n            \"website\": \"https://hansel.io\"\r\n        },\r\n        \"Happy Returns\": {\r\n            \"cats\": [\r\n                102\r\n            ],\r\n            \"description\": \"Happy Returns is a return software and reverse logistics company, provides a packaging-free, in-person way for customers to return an online purchase for an immediate refund.\",\r\n            \"website\": \"https://happyreturns.com\"\r\n        },\r\n        \"HappyFox Helpdesk\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.happyfox\\\\.com/media/\"\r\n            ],\r\n            \"description\": \"HappyFox is a help desk ticketing system that is hosted on cloud, supporting multiple customer support channels like email, voice and live chat.\",\r\n            \"website\": \"https://www.happyfox.com/customer-service-software/\"\r\n        },\r\n        \"HappyFox Live Chat\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"happyfoxchatobject\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.happyfoxchat\\\\.com/\"\r\n            ],\r\n            \"description\": \"HappyFox is a help desk ticketing system that is hosted on cloud, supporting multiple customer support channels like email, voice and live chat.\",\r\n            \"website\": \"https://www.happyfox.com/live-chat\"\r\n        },\r\n        \"Haptik\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"haptik\",\r\n                \"haptikinitsettings\",\r\n                \"haptiksdk\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.haptikapi\\\\.com/\"\r\n            ],\r\n            \"description\": \"Haptik is an Indian enterprise conversational AI platform founded in August 2013, and acquired by Reliance Industries Limited in 2019.\",\r\n            \"website\": \"https://www.haptik.ai\"\r\n        },\r\n        \"Haravan\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"haravan\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"haravan.*\\\\.js\"\r\n            ],\r\n            \"description\": \"Haravan is a multi-channel ecommerce services provider from Vietnam.\",\r\n            \"website\": \"https://www.haravan.com\"\r\n        },\r\n        \"Harbor\": {\r\n            \"cats\": [\r\n                60\r\n            ],\r\n            \"implies\": [\r\n                \"Go\"\r\n            ],\r\n            \"description\": \"Harbor is an open-source registry that secures artifacts with policies and role-based access control, ensures images are scanned and free from vulnerabilities, and signs images as trusted.\",\r\n            \"website\": \"https://goharbor.io\"\r\n        },\r\n        \"HashThemes Total\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/(?:t|t)otal(?:-plus)?/\"\r\n            ],\r\n            \"description\": \"HashThemes Total is the powerful and creative multipurpose WordPress theme.\",\r\n            \"website\": \"https://hashthemes.com/wordpress-theme/total\"\r\n        },\r\n        \"Hashnode\": {\r\n            \"cats\": [\r\n                11\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"hashnode\\\\.com\"\r\n            ],\r\n            \"description\": \"Hashnode is a free developer blogging platform that allows you to publish articles on your own domain and helps you stay connected with a global developer community.\",\r\n            \"website\": \"https://hashnode.com/\"\r\n        },\r\n        \"Hashtag Labs\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"htlbid.cmd\"\r\n            ],\r\n            \"description\": \"Hashtag Labs is a full-service digital ad operations company.\",\r\n            \"website\": \"https://hashtag-labs.com\"\r\n        },\r\n        \"Haskell\": {\r\n            \"cats\": [\r\n                27\r\n            ],\r\n            \"website\": \"https://wiki.haskell.org/Haskell\"\r\n        },\r\n        \"Hatena Blog\": {\r\n            \"cats\": [\r\n                1,\r\n                11\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.blog\\\\.st-hatena\\\\.com/\"\r\n            ],\r\n            \"description\": \"Hatena Blog is one of the traditional blog platforms in Japan.\",\r\n            \"website\": \"https://hatenablog.com\"\r\n        },\r\n        \"HeadJS\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"head.browser.name\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c[^\\u003e]*data-headjs-load\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"head\\\\.(?:core|load)(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"website\": \"https://headjs.com\"\r\n        },\r\n        \"Header Bidding Ai\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.headerbidding\\\\.ai/\"\r\n            ],\r\n            \"description\": \"Header Bidding Ai is a provider of an automated and managed header bidding solution. Header bidding cutting-edge technique where publishers offer their ad inventory to many ad exchanges.\",\r\n            \"website\": \"https://headerbidding.ai\"\r\n        },\r\n        \"Headless UI\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"description\": \"Headless UI is an unstyled component library for either React.js or Vue.js from the same people that created Tailwind CSS.\",\r\n            \"website\": \"https://headlessui.dev\"\r\n        },\r\n        \"Heap\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"heap.version.heapjsversion\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.heapanalytics\\\\.com\",\r\n                \"heap-\\\\d+\\\\.js\"\r\n            ],\r\n            \"description\": \"Heap is an analytics platform.\",\r\n            \"website\": \"https://heap.io\"\r\n        },\r\n        \"Heartland Payment Systems\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.heartlandportico\\\\.com\"\r\n            ],\r\n            \"description\": \"Heartland Payment Systems is a US-based payment processing and technology provider.\",\r\n            \"website\": \"https://www.heartlandpaymentsystems.com\"\r\n        },\r\n        \"Helhost\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"helhost\"\r\n            },\r\n            \"description\": \"Helhost is a web hosting provider and internet domain registrar from Democratic Republic of Congo.\",\r\n            \"website\": \"https://www.helhost.com\"\r\n        },\r\n        \"HeliumWeb\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"js\": [\r\n                \"helium.js\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"adrikikicp development\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"helium/src/helium.js/helium_web.js\",\r\n                \"http://maven.enriquitomcfh.ml/helium.js/helium_web.js\",\r\n                \"http://maven.enriquitomcfh.ml/helium.js/helium_web.min.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"HeliumWeb is a server-side (backend) web framework written in PHP \\u0026 JavaScript\",\r\n            \"website\": \"https://heliumweb.adrikikicp-development.ml\"\r\n        },\r\n        \"Helix Ultimate\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"implies\": [\r\n                \"Joomla\"\r\n            ],\r\n            \"description\": \"Helix Ultimate a free template framework for Joomla.\",\r\n            \"website\": \"https://www.joomshaper.com/joomla-templates/helixultimate\"\r\n        },\r\n        \"Helixo UFE\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"ufe.funneldata\",\r\n                \"ufestore.carttotal\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Helixo UFE is a lightweight Shopify upsell sales funnel app.\",\r\n            \"website\": \"https://helixo.co/upsell-funnel-engine/\"\r\n        },\r\n        \"Hello Bar\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"hellobar\",\r\n                \"hellobarsitesettings\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.?hellobar\\\\.(?:com|js)\"\r\n            ],\r\n            \"description\": \"Hello Bar is a customizable notification bar that draws visitors to an important call to action on the website.\",\r\n            \"website\": \"https://hellobar.com\"\r\n        },\r\n        \"Hello Elementor\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"implies\": [\r\n                \"Elementor\"\r\n            ],\r\n            \"description\": \"Hello Elementor is a WordPress theme built for the Elementor website builder platform. It uses minimal styling and scripts for maximum speed and design freedom.\",\r\n            \"website\": \"https://elementor.com/hello-theme/\"\r\n        },\r\n        \"Help Scout\": {\r\n            \"cats\": [\r\n                13,\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"__onbeacondestroy\",\r\n                \"beaconstore\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.helpscout\\\\.net/\"\r\n            ],\r\n            \"description\": \"Help Scout is a customer service platform including email, a knowledge base tool and live chat.\",\r\n            \"website\": \"https://www.helpscout.com\"\r\n        },\r\n        \"HelpDocs\": {\r\n            \"cats\": [\r\n                4\r\n            ],\r\n            \"js\": [\r\n                \"hd_instant_search\",\r\n                \"hdanalytics\",\r\n                \"hdutils\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.helpdocs\\\\.io\"\r\n            ],\r\n            \"description\": \"HelpDocs is an knowledge management system.\",\r\n            \"website\": \"https://www.helpdocs.io\"\r\n        },\r\n        \"Here\": {\r\n            \"cats\": [\r\n                35\r\n            ],\r\n            \"js\": [\r\n                \"h.buildinfo\",\r\n                \"h.geo\",\r\n                \"h.util\"\r\n            ],\r\n            \"description\": \"HERE is a PaaS for creating custom maps, visualize location datasets, gather insights and buy and sell location assets.\",\r\n            \"website\": \"https://www.here.com\"\r\n        },\r\n        \"Hermes\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Hermes offers integrated solutions along the supply chain and partners with national and international trading companies.\",\r\n            \"website\": \"https://www.hermesworld.com\"\r\n        },\r\n        \"Hero\": {\r\n            \"cats\": [\r\n                103\r\n            ],\r\n            \"js\": [\r\n                \"herowebpluginsettings\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.usehero\\\\.com\"\r\n            ],\r\n            \"implies\": [\r\n                \"Cart Functionality\"\r\n            ],\r\n            \"description\": \"Hero is a virtual shopping platform for ecommerce and retail stores.\",\r\n            \"website\": \"https://www.usehero.com/\"\r\n        },\r\n        \"Heroku\": {\r\n            \"cats\": [\r\n                62\r\n            ],\r\n            \"headers\": {\r\n                \"via\": \"[\\\\d.-]+ vegur$\"\r\n            },\r\n            \"description\": \"Heroku is a cloud platform as a service (PaaS) supporting several programming languages.\",\r\n            \"website\": \"https://www.heroku.com/\"\r\n        },\r\n        \"Hestia\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"themes/hestia.*\\\\.js(?:\\\\?ver=([0-9.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Hestia is a modern WordPress theme for professionals a multipurpose one-page design, widgetized footer, blog/news page, and a clean look.\",\r\n            \"website\": \"https://themeisle.com/themes/hestia/\"\r\n        },\r\n        \"HetrixTools\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"js\": [\r\n                \"htoolz\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.hetrixtools\\\\.com\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"\\\\.hetrixtools\\\\.com/\"\r\n            ],\r\n            \"description\": \"HetrixTools is an uptime and blacklist monitoring platform.\",\r\n            \"website\": \"https://hetrixtools.com\"\r\n        },\r\n        \"Hetzner\": {\r\n            \"cats\": [\r\n                88,\r\n                62\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"heray\",\r\n                \"x-powered-by\": \"hetzner\"\r\n            },\r\n            \"description\": \"Hetzner provides dedicated hosting, shared web hosting, virtual private servers, managed servers, domain names, SSL certificates, storage boxes, and cloud.\",\r\n            \"website\": \"https://www.hetzner.com\"\r\n        },\r\n        \"Hexo\": {\r\n            \"cats\": [\r\n                57\r\n            ],\r\n            \"html\": [\r\n                \"powered by \\u003ca href=\\\"https?://hexo\\\\.io/?\\\"[^\\u003e]*\\u003ehexo\\u003c/\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"hexo(?: v?([\\\\d.]+))?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Node.js\"\r\n            ],\r\n            \"description\": \"Hexo is a blog framework powered by Node.js.\",\r\n            \"website\": \"https://hexo.io\"\r\n        },\r\n        \"Hextom Free Shipping Bar\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.hextom\\\\.com/js/freeshippingbar\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Free Shipping Bar is a Shopify app built by Hextom. Free Shipping Bar help promote free shipping with progressive messages to motivate customers to buy more.\",\r\n            \"website\": \"https://hextom.com/case_study/free-shipping-bar\"\r\n        },\r\n        \"Hextom Ultimate Sales Boost\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"hextom_usb\",\r\n                \"ht_usb.isloaded\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.hextom\\\\.com/js/ultimatesalesboost\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Ultimate Sales Boost by Hextom is an app designed to help you drive more sales by creating a sense of urgency, scarcity and trust.\",\r\n            \"website\": \"https://hextom.com/case_study/ultimate-sales-boost\"\r\n        },\r\n        \"Hi Platform\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.hiplatform\\\\.com/\"\r\n            ],\r\n            \"description\": \"Hi Platform provider of an online customer relationship platform.\",\r\n            \"website\": \"https://www.hiplatform.com\"\r\n        },\r\n        \"Hiawatha\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"hiawatha v([\\\\d.]+)\\\\;version:\\\\1\"\r\n            },\r\n            \"website\": \"https://hiawatha-webserver.org\"\r\n        },\r\n        \"HighLevel\": {\r\n            \"cats\": [\r\n                32,\r\n                53\r\n            ],\r\n            \"js\": [\r\n                \"leadconnector.chatwidget\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.leadconnectorhq\\\\.com/\"\r\n            ],\r\n            \"description\": \"HighLevel is an all-in-one marketing and automation platform designed for marketing agencies and small businesses to manage CRM, marketing campaigns, sales funnels, appointment scheduling, and more.\",\r\n            \"website\": \"https://www.gohighlevel.com\"\r\n        },\r\n        \"HighStore\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^highstore\\\\.ir$\"\r\n                ],\r\n                \"hs:version\": [\r\n                    \"^([\\\\d\\\\.]+)$\\\\;version:\\\\1\\\\;confidence:50\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"description\": \"HighStore is an ecommerce platform from Iran.\",\r\n            \"website\": \"https://digitalserver.ir\"\r\n        },\r\n        \"Highcharts\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"highcharts\",\r\n                \"highcharts.version\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003csvg[^\\u003e]*\\u003e\\u003cdesc\\u003ecreated with highcharts ([\\\\d.]*)\\\\;version:\\\\1\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"highcharts.*\\\\.js\"\r\n            ],\r\n            \"description\": \"Highcharts is a charting library written in pure JavaScript, for adding interactive charts to a website or web application. Highcharts meets accessibility standards and works with Python, Angular, React, iOS, Android, and more.\",\r\n            \"website\": \"https://www.highcharts.com\"\r\n        },\r\n        \"Highlight.js\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"hljs.highlightblock\",\r\n                \"hljs.listlanguages\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/(?:([\\\\d.])+/)?highlight(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"website\": \"https://highlightjs.org/\"\r\n        },\r\n        \"Highstock\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"html\": [\r\n                \"\\u003csvg[^\\u003e]*\\u003e\\u003cdesc\\u003ecreated with highstock ([\\\\d.]*)\\\\;version:\\\\1\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"highstock[.-]?([\\\\d\\\\.]*\\\\d).*\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"website\": \"https://highcharts.com/products/highstock\"\r\n        },\r\n        \"HikeOrders\": {\r\n            \"cats\": [\r\n                68\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"hikeorders\\\\.com/main/assets/js/hko-accessibility\\\\.min\\\\.js\"\r\n            ],\r\n            \"description\": \"HikeOrders is a web accessibility overlay that claims to make your site disability friendly.\",\r\n            \"website\": \"https://hikeorders.com/\"\r\n        },\r\n        \"Hinza Advanced CMS\": {\r\n            \"cats\": [\r\n                1,\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"hinzacms\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Laravel\"\r\n            ],\r\n            \"website\": \"https://hinzaco.com\"\r\n        },\r\n        \"Hireology\": {\r\n            \"cats\": [\r\n                101\r\n            ],\r\n            \"description\": \"Hireology is a staffing and hiring platform for the franchise and retail-automotive industries.\",\r\n            \"website\": \"https://hireology.com\"\r\n        },\r\n        \"Hirschmann HiOS\": {\r\n            \"cats\": [\r\n                28\r\n            ],\r\n            \"description\": \"Hirschmann HiOS is an operating system for industrial network equipment.\",\r\n            \"website\": \"https://hirschmann.com/\",\r\n            \"cpe\": \"cpe:2.3:o:belden:hirschmann_hios:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Histats\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"histats.ver\"\r\n            ],\r\n            \"description\": \"Histats is a simple website visitor analysis and tracking tool.\",\r\n            \"website\": \"https://www.histats.com\"\r\n        },\r\n        \"History\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/history(@|/)([\\\\d.]+)(?:/[a-z]+)?/history(?:(.production|.development))?(?:.min)?\\\\.js\\\\;version:\\\\2\"\r\n            ],\r\n            \"description\": \"Manage session history with JavaScript\",\r\n            \"website\": \"https://github.com/ReactTraining/history\"\r\n        },\r\n        \"HockeyStack\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"hockeystack\"\r\n            ],\r\n            \"description\": \"HockeyStack is a San Francisco-based analytics and attribution tool for B2B companies.\",\r\n            \"website\": \"https://hockeystack.com\"\r\n        },\r\n        \"Hoefler\\u0026Co\": {\r\n            \"cats\": [\r\n                17\r\n            ],\r\n            \"description\": \"Hoefler\\u0026Co is a digital type foundry (font design studio) in Woburn, Massachusetts (formerly New York City), founded by type designer Jonathan Hoefler. Hoefler\\u0026Co designs typefaces for clients and for retail on its website.\",\r\n            \"website\": \"https://www.typography.com\"\r\n        },\r\n        \"Hogan.js\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"hogan\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"([\\\\d.]+)/hogan(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\",\r\n                \"hogan-[.-]([\\\\d.]*\\\\d)[^/]*\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"website\": \"https://twitter.github.io/hogan.js/\"\r\n        },\r\n        \"Homerr\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Homerr is a logistics company operating in the Netherlands and Belgium.\",\r\n            \"website\": \"https://www.homerr.com\"\r\n        },\r\n        \"Homestead\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^homestead sitebuilder$\"\r\n                ]\r\n            },\r\n            \"description\": \"Homestead is a website builder.\",\r\n            \"website\": \"https://www.homestead.com\"\r\n        },\r\n        \"Honeybadger\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"js\": [\r\n                \"honeybadger\",\r\n                \"inithoneybadger\"\r\n            ],\r\n            \"description\": \"Honeybadger provides exception and uptime monitoring to keep your web apps error-free.\",\r\n            \"website\": \"https://www.honeybadger.io\"\r\n        },\r\n        \"Hono\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"hono\"\r\n            },\r\n            \"description\": \"Hono is a small, simple, and ultrafast web framework for the Edge.\",\r\n            \"website\": \"https://hono.dev\"\r\n        },\r\n        \"HostEurope\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"description\": \"HostEurope is a European website hosting, email and domain name registrar company headquartered Hayes, West London.\",\r\n            \"website\": \"https://www.hosteurope.de\"\r\n        },\r\n        \"Hostens\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"description\": \"Hostens is a web hosting company specialising in hosting services, virtual private server hosting, and the domain name or transition.\",\r\n            \"website\": \"https://www.hostens.com\"\r\n        },\r\n        \"Hostgator\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"description\": \"HostGator is a Houston-based provider of shared, reseller, virtual private server, and dedicated web hosting with an additional presence in Austin, Texas.\",\r\n            \"website\": \"https://www.hostgator.com\"\r\n        },\r\n        \"Hosting Ukraine\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"description\": \"Hosting Ukraine is a web hosting provider and internet domain registrar.\",\r\n            \"website\": \"https://www.ukraine.com.ua\"\r\n        },\r\n        \"Hostinger\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"headers\": {\r\n                \"platform\": \"hostinger\"\r\n            },\r\n            \"description\": \"Hostinger is an employee-owned Web hosting provider and internet domain registrar.\",\r\n            \"website\": \"https://www.hostinger.com\"\r\n        },\r\n        \"Hostinger CDN\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"hcdn\"\r\n            },\r\n            \"description\": \"Hostinger Content Delivery Network (CDN).\",\r\n            \"website\": \"https://www.hostinger.com\"\r\n        },\r\n        \"Hostinger Website Builder\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"userapp\\\\.zyrosite\\\\.com/\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"hostinger website builder\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Vue.js\"\r\n            ],\r\n            \"description\": \"Hostinger Website Builder is a web-based platform that allows users to create and design websites without needing to write code or have extensive technical knowledge.\",\r\n            \"website\": \"https://www.hostinger.com\"\r\n        },\r\n        \"Hostiq\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"description\": \"Hostiq is a web hosting provider and internet domain registrar.\",\r\n            \"website\": \"https://hostiq.ua\"\r\n        },\r\n        \"Hostmeapp\": {\r\n            \"cats\": [\r\n                93,\r\n                72\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"tables\\\\.hostmeapp\\\\.com\"\r\n            ],\r\n            \"description\": \"Hostmeapp is an restaurant software. Includes reservation, waitlist, guestbook and marketing tools.\",\r\n            \"website\": \"https://www.hostmeapp.com\"\r\n        },\r\n        \"Hostpoint\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"description\": \"Hostpoint is a Switzerland-based web hosting company.\",\r\n            \"website\": \"https://www.hostpoint.ch\"\r\n        },\r\n        \"Hotaru CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"hotaru_mobile\": \"\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"hotaru cms\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://hotarucms.org\"\r\n        },\r\n        \"Hotjar\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"hj.apiurlbase\",\r\n                \"hotleadcontroller\",\r\n                \"hotleadfactory\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//static\\\\.hotjar\\\\.com/\"\r\n            ],\r\n            \"description\": \"Hotjar is a suite of analytic tools to assist in the gathering of qualitative data, providing feedback through tools such as heatmaps, session recordings, and surveys.\",\r\n            \"website\": \"https://www.hotjar.com\"\r\n        },\r\n        \"Hotjar Incoming Feedback\": {\r\n            \"cats\": [\r\n                73\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.hotjar\\\\.com/preact-incoming-feedback\"\r\n            ],\r\n            \"description\": \"Hotjar Incoming Feedback is a widget that sits at the edge of a page.\",\r\n            \"website\": \"https://www.hotjar.com\"\r\n        },\r\n        \"Howler.js\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"howler\",\r\n                \"howlerglobal\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"howler/([\\\\d.]+)/howler(?:\\\\.core)?\\\\.min\\\\.js\\\\;version:\\\\1\",\r\n                \"howler@([\\\\d.]+)/dist/howler\\\\.min\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Howler.js is an audio library with support for the Web Audio API and a fallback mechanism for HTML5 Audio.\",\r\n            \"website\": \"https://howlerjs.com\"\r\n        },\r\n        \"HrFlow.ai\": {\r\n            \"cats\": [\r\n                101\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.hrflow\\\\.ai\"\r\n            ],\r\n            \"description\": \"HrFlow.ai is an HR data automation API platform.\",\r\n            \"website\": \"https://hrflow.ai\"\r\n        },\r\n        \"Htmx\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"htmx\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/htmx\\\\.org@([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Htmx is a JavaScript library for performing AJAX requests, triggering CSS transitions, and invoking WebSocket and server-sent events directly from HTML elements.\",\r\n            \"website\": \"https://htmx.org\"\r\n        },\r\n        \"HubSpot\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"_hsq\",\r\n                \"hubspot\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- start of async hubspot\"\r\n            ],\r\n            \"description\": \"HubSpot is a marketing and sales software that helps companies attract visitors, convert leads, and close customers.\",\r\n            \"website\": \"https://www.hubspot.com\"\r\n        },\r\n        \"HubSpot Analytics\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"js\\\\.hs-analytics\\\\.net/analytics\"\r\n            ],\r\n            \"description\": \"HubSpot is a marketing and sales software that helps companies attract visitors, convert leads, and close customers.\",\r\n            \"website\": \"https://www.hubspot.com/products/marketing/analytics\"\r\n        },\r\n        \"HubSpot CMS Hub\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"x-hs-hub-id\": \"\",\r\n                \"x-powered-by\": \"hubspot\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"hubspot\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"HubSpot\"\r\n            ],\r\n            \"description\": \"CMS Hub is a content management platform by HubSpot for marketers to manage, optimize, and track content performance on websites, blogs, and landing pages.\",\r\n            \"website\": \"https://www.hubspot.com/products/cms\"\r\n        },\r\n        \"HubSpot Chat\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"hubspotconversations\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"js\\\\.usemessages\\\\.com\"\r\n            ],\r\n            \"description\": \"HubSpot Chat is a tool where you can view, manage, and reply to incoming messages from multiple channels.\",\r\n            \"website\": \"https://www.hubspot.com/products/crm/live-chat\"\r\n        },\r\n        \"HubSpot Cookie Policy Banner\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"description\": \"HubSpot Cookie Policy banner is a cookie compliance functionality from HubSpot.\",\r\n            \"website\": \"https://knowledge.hubspot.com/reports/customize-your-cookie-tracking-settings-and-privacy-policy-alert\"\r\n        },\r\n        \"HubSpot WordPress plugin\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"leadin_wordpress.leadinpluginversion\"\r\n            ],\r\n            \"implies\": [\r\n                \"HubSpot\",\r\n                \"HubSpot Analytics\"\r\n            ],\r\n            \"description\": \"HubSpot is a platform with all the tools and integrations you need for marketing, sales, and customer service. HubSpot WordPress plugin allows you to manage contacts (CRM), engage visitors with live chat and chatbots, add beautiful forms to pages, create engaging email marketing campaigns, and more.\",\r\n            \"website\": \"https://wordpress.org/plugins/leadin/\"\r\n        },\r\n        \"Hubalz\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"hubalz.getclickdetails\",\r\n                \"hubalz_script.noinputtracking\"\r\n            ],\r\n            \"description\": \"Hubalz is an all-in-one analytics and marketing tool.\",\r\n            \"website\": \"https://www.hubalz.com\"\r\n        },\r\n        \"Huberway\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"huberway_session\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Huberway is a content management system, based on PHP and JavaScript, used to create advanced sales portals oriented towards industrialization 4.0.\",\r\n            \"website\": \"https://www.huberway.com\"\r\n        },\r\n        \"Huberway Analytics\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"analytics\\\\.huberway\\\\.com/pixel/\"\r\n            ],\r\n            \"description\": \"Huberway Analytics is a free web analytics service that tracks and reports website traffic.\",\r\n            \"website\": \"https://www.huberway.com/analytics-software\"\r\n        },\r\n        \"Huddle\": {\r\n            \"cats\": [\r\n                21\r\n            ],\r\n            \"js\": [\r\n                \"huddleevent\",\r\n                \"huddleuser\"\r\n            ],\r\n            \"description\": \"Huddle is a digital product agency based in Amsterdam, Netherlands, specialising in developing and designing custom software solutions for startups and enterprises, including e-learning products, community platforms, and mobile applications.\",\r\n            \"website\": \"https://www.thehuddle.nl\"\r\n        },\r\n        \"Hugo\": {\r\n            \"cats\": [\r\n                57\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"hugo ([\\\\d.]+)?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"Hugo is an open-source static site generator written in Go.\",\r\n            \"website\": \"https://gohugo.io\"\r\n        },\r\n        \"HulkApps Age Verification\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"age-verification\\\\.hulkapps\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"HulkApps Age Verification allow your customers to certify their age before they land in your store.\",\r\n            \"website\": \"https://www.hulkapps.com/products/age-verification-shopify\"\r\n        },\r\n        \"HulkApps Form Builder\": {\r\n            \"cats\": [\r\n                73,\r\n                100,\r\n                110\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"formbuilder\\\\.hulkapps\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"HulkApps Form Builder is an application that creates customizable, job-specific forms for unit needs.\",\r\n            \"website\": \"https://www.hulkapps.com/products/form-builder-shopify\"\r\n        },\r\n        \"HulkApps GDPR/CCPA Compliance Manager\": {\r\n            \"cats\": [\r\n                67,\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"hulksetcookie\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cookiebar\\\\.hulkapps\\\\.com/hulk_cookie_bar\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"HulkApps GDPR/CCPA Compliance Manager is a consent management solution.\",\r\n            \"website\": \"https://www.hulkapps.com/products/gdpr-ccpa-cookie-manager-shopify-app\"\r\n        },\r\n        \"HulkApps Infinite Product Options\": {\r\n            \"cats\": [\r\n                76,\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"hulkapps.po_url\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"HulkApps Infinite Product Options is a unlimited custom options for products. Display variant options as buttons, color and image swatches, and more.\",\r\n            \"website\": \"https://www.hulkapps.com/products/infinite-product-options-shopify\"\r\n        },\r\n        \"HulkApps Product Reviews\": {\r\n            \"cats\": [\r\n                90,\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"hulkappsproductreview\",\r\n                \"hulkappsreviews\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"HulkApps Product Reviews is a customer product reviews app for building social proof for store.\",\r\n            \"website\": \"https://www.hulkapps.com/products/product-reviews-shopify\"\r\n        },\r\n        \"Human Presence\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/.*\\\\.humanpresence\\\\.(?:io|app)/\"\r\n            ],\r\n            \"description\": \"Human Presence is a bot detection and spam protection software for WordPress and Shopify.\",\r\n            \"website\": \"https://www.humanpresence.io\"\r\n        },\r\n        \"Humm\": {\r\n            \"cats\": [\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"checkout.enabledpayments.humm\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/oxipay-payment-gateway/\",\r\n                \"widgets\\\\.shophumm\\\\.com\"\r\n            ],\r\n            \"description\": \"Humm (formerly Flexigroup) is a buy now pay later service operating in Australia.\",\r\n            \"website\": \"https://www.shophumm.com\"\r\n        },\r\n        \"Hund.io\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.hund\\\\.io/\"\r\n            ],\r\n            \"description\": \"Hund.io is an automated status pages with monitoring.\",\r\n            \"website\": \"https://hund.io\"\r\n        },\r\n        \"Hushly\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"__hly_widget_object\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.hushly\\\\.com/\"\r\n            ],\r\n            \"description\": \"Hushly is an all-in-one B2B marketing software platform.\",\r\n            \"website\": \"https://www.hushly.com\"\r\n        },\r\n        \"Hydra-Shield\": {\r\n            \"cats\": [\r\n                64\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^hydra-shield\\\\sv([\\\\d\\\\.]+)$\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"Hydra-Shield is an anti-DDoS protection reverse proxy that filters and mitigates malicious traffic to safeguard servers from distributed denial-of-service attacks.\",\r\n            \"website\": \"https://hydra-shield.fr\"\r\n        },\r\n        \"Hydrogen\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"headers\": {\r\n                \"powered-by\": \"^shopify-hydrogen$\"\r\n            },\r\n            \"implies\": [\r\n                \"React\",\r\n                \"Shopify\",\r\n                \"Vite\"\r\n            ],\r\n            \"description\": \"Hydrogen is a front-end web development framework used for building Shopify custom storefronts.\",\r\n            \"website\": \"https://hydrogen.shopify.dev\"\r\n        },\r\n        \"Hypercorn\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"hypercorn\"\r\n            },\r\n            \"implies\": [\r\n                \"Python\"\r\n            ],\r\n            \"website\": \"https://pgjones.gitlab.io/hypercorn/\"\r\n        },\r\n        \"Hyperspeed\": {\r\n            \"cats\": [\r\n                92,\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"hyperscripts\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.shopify\\\\.com/.+/assets/hs-(?:instantload|lazysizes)\\\\.min\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Instant.Page\",\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Hyperspeed is the most advanced speed booster for Shopify.\",\r\n            \"website\": \"https://www.hyperspeed.me\"\r\n        },\r\n        \"Hypervisual Page Builder\": {\r\n            \"cats\": [\r\n                51,\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"hypervisualpreflight\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.gethypervisual\\\\.com/\"\r\n            ],\r\n            \"description\": \"Hypervisual Page Builder is a page builder for Shopify.\",\r\n            \"website\": \"https://gethypervisual.com\"\r\n        },\r\n        \"Hypestyle CSS\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"implies\": [\r\n                \"Sass\"\r\n            ],\r\n            \"description\": \"Hypestyle CSS is a small CSS library build on utility classes and components.\",\r\n            \"website\": \"https://www.hypestylecss.xyz\"\r\n        },\r\n        \"Hyros\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/v1/lst/universal-script\\\\?ph\\\\=\"\r\n            ],\r\n            \"description\": \"Hyros is a marketing analytics and optimisation platform.\",\r\n            \"website\": \"https://hyros.com\"\r\n        },\r\n        \"Hyva Themes\": {\r\n            \"cats\": [\r\n                108\r\n            ],\r\n            \"headers\": {\r\n                \"x-built-with\": \"^hyva themes$\"\r\n            },\r\n            \"implies\": [\r\n                \"Alpine.js\",\r\n                \"Magento\\\\;version:2\",\r\n                \"Tailwind CSS\"\r\n            ],\r\n            \"description\": \"Hyva Themes is a performance-optimised theme for Magento 2 which eliminated the third-party libraries and having only two dependencies Alpine.js and Tailwind CSS.\",\r\n            \"website\": \"https://hyva.io\"\r\n        },\r\n        \"IBM Coremetrics\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cmdatatagutils\\\\.js\"\r\n            ],\r\n            \"website\": \"https://ibm.com/software/marketing-solutions/coremetrics\"\r\n        },\r\n        \"IBM DataPower\": {\r\n            \"cats\": [\r\n                64\r\n            ],\r\n            \"headers\": {\r\n                \"x-backside-transport\": \"\",\r\n                \"x-global-transaction-id\": \"\"\r\n            },\r\n            \"description\": \"IBM DataPower Gateway is a single multi-channel gateway designed to help provide security, control, integration and optimized access to a full range of mobile, web, application programming interface (API), service-oriented architecture (SOA), B2B and cloud workloads.\",\r\n            \"website\": \"https://www.ibm.com/products/datapower-gateway\",\r\n            \"cpe\": \"cpe:2.3:a:ibm:datapower_gateway:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"IBM HTTP Server\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"ibm_http_server(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"website\": \"https://ibm.com/software/webservers/httpservers\",\r\n            \"cpe\": \"cpe:2.3:a:ibm:http_server:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"ID5\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"cookies\": {\r\n                \"id5\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"__id5_instances\",\r\n                \"id5._version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^https://(?:cdn\\\\.)?id5-sync\\\\.com/\"\r\n            ],\r\n            \"description\": \"ID5 is a company that offers an identity solution for digital advertising, providing a Universal ID that enables privacy-compliant user recognition and tracking across websites without relying on personal information or third-party cookies.\",\r\n            \"website\": \"https://id5.io/\"\r\n        },\r\n        \"IIS\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^(?:microsoft-)?iis(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Windows Server\"\r\n            ],\r\n            \"description\": \"Internet Information Services (IIS) is an extensible web server software created by Microsoft for use with the Windows NT family.\",\r\n            \"website\": \"https://www.iis.net\",\r\n            \"cpe\": \"cpe:2.3:a:microsoft:internet_information_server:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"INFOnline\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"iam_data\",\r\n                \"szmvars\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^https?://(?:[^/]+\\\\.)?i(?:oam|v)wbox\\\\.de/\"\r\n            ],\r\n            \"website\": \"https://www.infonline.de\"\r\n        },\r\n        \"IONOS\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"description\": \"IONOS is the web hosting and cloud partner for small and medium-sized businesses.\",\r\n            \"website\": \"https://www.ionos.com\"\r\n        },\r\n        \"IP2Location.io\": {\r\n            \"cats\": [\r\n                79\r\n            ],\r\n            \"cookies\": {\r\n                \"ip2location_redirection_first_visit\": \"\"\r\n            },\r\n            \"description\": \"IP2Location.io is a web service that provides geolocation data based on IP addresses through its API, allowing developers to integrate accurate physical location information into their applications.\",\r\n            \"website\": \"https://www.ip2location.io\"\r\n        },\r\n        \"IPB\": {\r\n            \"cats\": [\r\n                2\r\n            ],\r\n            \"cookies\": {\r\n                \"ipbwwlmodpids\": \"\",\r\n                \"ipbwwlsession_id\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"ipb_var\",\r\n                \"ipboard\",\r\n                \"ipssettings\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]+ipb_[^\\u003e]+\\\\.css\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"jscripts/ips_\"\r\n            ],\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://invisioncommunity.com/\"\r\n        },\r\n        \"IPFS\": {\r\n            \"cats\": [\r\n                48\r\n            ],\r\n            \"headers\": {\r\n                \"x-cf-ipfs-cache-status\": \"\",\r\n                \"x-ipfs-datasize\": \"\",\r\n                \"x-ipfs-gateway-host\": \"\",\r\n                \"x-ipfs-lb-pop\": \"\",\r\n                \"x-ipfs-path\": \"\",\r\n                \"x-ipfs-pop\": \"\",\r\n                \"x-ipfs-root\": \"\",\r\n                \"x-ipfs-root-cid\": \"\",\r\n                \"x-ipfs-roots\": \"\"\r\n            },\r\n            \"description\": \"IPFS is a peer-to-peer hypermedia protocol that provides a distributed hypermedia web.\",\r\n            \"website\": \"https://ipfs.tech/\"\r\n        },\r\n        \"IPInfoDB\": {\r\n            \"cats\": [\r\n                79\r\n            ],\r\n            \"description\": \"IPInfoDB is the API that returns the location of an IP address.\",\r\n            \"website\": \"https://www.ipinfodb.com/\"\r\n        },\r\n        \"IPinfo\": {\r\n            \"cats\": [\r\n                79\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"ipinfo\\\\.io/\"\r\n            ],\r\n            \"description\": \"IPinfo is an IP address data provider.\",\r\n            \"website\": \"https://ipinfo.io\"\r\n        },\r\n        \"ISAY\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"description\": \"ISAY (Internet Pages Management) is a CMS service provided by the Turkish Ministry of Interior for governorships, district governorships and various official websites.\",\r\n            \"website\": \"https://www.icisleri.gov.tr/internet-sayfalari-yonetimi-isay\"\r\n        },\r\n        \"Iamport\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"imp.request_pay\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.iamport\\\\.kr/js/iamport\\\\.payment-([\\\\d\\\\.]+)\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Iamport is an information technology company based in South Korea.\",\r\n            \"website\": \"https://www.iamport.kr\"\r\n        },\r\n        \"Ibexa DXP \": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^ibexa\\\\sexperience\\\\sv([\\\\d\\\\.]+)$\\\\;version:\\\\1\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^ez platform\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\",\r\n                \"Symfony\"\r\n            ],\r\n            \"description\": \"Ibexa DXP is an open-source enterprise PHP content management system (CMS) and Digital Experience Platform (DXP) developed by the company Ibexa (known previously as eZ Systems).\",\r\n            \"website\": \"https://www.ibexa.co\"\r\n        },\r\n        \"Ideasoft\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.myideasoft\\\\.com/([\\\\d.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Ideasoft is a Turkish software company providing web-based software solutions, software design, ecommerce solutions, and other services.\",\r\n            \"website\": \"https://www.ideasoft.com.tr\"\r\n        },\r\n        \"Identrust\": {\r\n            \"cats\": [\r\n                70\r\n            ],\r\n            \"description\": \"denTrust is a digital identity authentication solution.\",\r\n            \"website\": \"https://www.identrust.com/\"\r\n        },\r\n        \"IdoSell Shop\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"iai_ajax\"\r\n            ],\r\n            \"description\": \"IdoSell Shop is a fully functional ecommerce software platform.\",\r\n            \"website\": \"https://www.idosell.com\"\r\n        },\r\n        \"Ikas\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"ikasevents.subscribe\"\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^ikas$\",\r\n                \"x-powered-by\": \"^ikas$\"\r\n            },\r\n            \"implies\": [\r\n                \"GraphQL\",\r\n                \"MongoDB\",\r\n                \"Next.js\"\r\n            ],\r\n            \"description\": \"Ikas is a new generation ecommerce platform designed for small businesses.\",\r\n            \"website\": \"https://ikas.com\"\r\n        },\r\n        \"Iluria\": {\r\n            \"cats\": [\r\n                6,\r\n                63\r\n            ],\r\n            \"js\": [\r\n                \"iluria\",\r\n                \"iluriashowpagination\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"template-assets\\\\.iluria\\\\.com/commons/\"\r\n            ],\r\n            \"description\": \"Iluria is a hosted ecommerce platform from Brazil.\",\r\n            \"website\": \"https://www.iluria.com.br\"\r\n        },\r\n        \"Image Relay\": {\r\n            \"cats\": [\r\n                95\r\n            ],\r\n            \"js\": [\r\n                \"imagerelay.accounts\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"static\\\\.imagerelay\\\\.com/\"\r\n            ],\r\n            \"description\": \"Image Relay is a digital asset management system that allows organizations to upload, manage, organize, monitor and track their digital assets.\",\r\n            \"website\": \"https://www.imagerelay.com\"\r\n        },\r\n        \"ImageEngine\": {\r\n            \"cats\": [\r\n                31,\r\n                92\r\n            ],\r\n            \"description\": \"ImageEngine is an intelligent image content delivery network. ImageEngine will resize your image content tailored to the end users device.\",\r\n            \"website\": \"https://imageengine.io\"\r\n        },\r\n        \"Imagely NextGEN Gallery\": {\r\n            \"cats\": [\r\n                87,\r\n                7\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/nextgen-gallery(?:-pro|-plus)?/\"\r\n            ],\r\n            \"description\": \"NextGEN Gallery is a WordPress gallery plugin maintained by Imagely.\",\r\n            \"website\": \"https://www.imagely.com/wordpress-gallery-plugin\"\r\n        },\r\n        \"Imber\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"$imber.getvisitor\",\r\n                \"imber_id\",\r\n                \"imber_socket\"\r\n            ],\r\n            \"description\": \"Imber is an all-in-one marketing automation platform built for customer support (live chat), sales, and marketing.\",\r\n            \"website\": \"https://imber.live\"\r\n        },\r\n        \"Imgix\": {\r\n            \"cats\": [\r\n                31,\r\n                95\r\n            ],\r\n            \"description\": \"Imgix is a visual media platform for managing, processing, rendering, optimising and delivering your existing images.\",\r\n            \"website\": \"https://imgix.com/\"\r\n        },\r\n        \"Immutable.js\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"immutable\",\r\n                \"immutable.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^immutable\\\\.(?:min\\\\.)?js$\"\r\n            ],\r\n            \"website\": \"https://facebook.github.io/immutable-js/\"\r\n        },\r\n        \"Impact\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"js\": [\r\n                \"impactradiusevent\",\r\n                \"irevent\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"d\\\\.impactradius-event\\\\.com\"\r\n            ],\r\n            \"description\": \"Impact helps businesses contract and pay partners.\",\r\n            \"website\": \"https://impact.com/\"\r\n        },\r\n        \"Imperva\": {\r\n            \"cats\": [\r\n                16,\r\n                31\r\n            ],\r\n            \"headers\": {\r\n                \"x-cdn\": \"^imperva\",\r\n                \"x-iinfo\": \"\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"/_incapsula_resource\"\r\n            ],\r\n            \"description\": \"Imperva is a cyber security software and services company for networking, data, and application security.\",\r\n            \"website\": \"https://www.imperva.com/\"\r\n        },\r\n        \"ImpressCMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"icmssession\": \"\",\r\n                \"impresscms\": \"\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"include/linkexternal\\\\.js\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"impresscms\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://www.impresscms.org\",\r\n            \"cpe\": \"cpe:2.3:a:impresscms:impresscms:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"ImpressPages\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"impresspages(?: cms)?( [\\\\d.]*)?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://impresspages.org\",\r\n            \"cpe\": \"cpe:2.3:a:impresspages:impresspages_cms:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Imunify360\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"imunify360-webshield/([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"Imunify360 is a comprehensive security platform for Linux web servers which utilises machine learning technology and other advanced techniques to provide protection against various types of cyber threats, such as malware, viruses, and other attacks.\",\r\n            \"website\": \"https://www.imunify360.com\"\r\n        },\r\n        \"Imweb\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"imweb_template\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"vendor-cdn\\\\.imweb\\\\.me/\"\r\n            ],\r\n            \"description\": \"Imweb is a ecommerce website builder software.\",\r\n            \"website\": \"https://imweb.me\"\r\n        },\r\n        \"In Cart Upsell \\u0026 Cross-Sell\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.incartupsell\\\\.com/\"\r\n            ],\r\n            \"description\": \"In Cart Upsell \\u0026 Cross-Sell is a Shopify app built by InCart Upsell, provides targeted upsells and cross-sells directly in your cart and product page.\",\r\n            \"website\": \"https://incartupsell.com\"\r\n        },\r\n        \"InMoment\": {\r\n            \"cats\": [\r\n                10,\r\n                73\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.inmoment\\\\.com\",\r\n                \"content-security-policy-report-only\": \"\\\\.inmoment\\\\.com\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"\\\\.inmoment\\\\.com(?:\\\\.\\\\w+)?/\"\r\n            ],\r\n            \"description\": \"InMoment provides SaaS based customer survey and enterprise feedback management solutions.\",\r\n            \"website\": \"https://inmoment.com\"\r\n        },\r\n        \"InSyncai\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"description\": \"InSyncai offers a conversational platform for enterprises to design and build chatbots having applications in customer support and services.\",\r\n            \"website\": \"https://www.insyncai.com\"\r\n        },\r\n        \"Incapsula\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"headers\": {\r\n                \"x-cdn\": \"incapsula\"\r\n            },\r\n            \"description\": \"Incapsula is a cloud-based application delivery platform. It uses a global content delivery network to provide web application security, DDoS mitigation, content caching, application delivery, load balancing and failover services.\",\r\n            \"website\": \"https://www.incapsula.com\"\r\n        },\r\n        \"Includable\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"headers\": {\r\n                \"x-includable-version\": \"\"\r\n            },\r\n            \"website\": \"https://includable.com\"\r\n        },\r\n        \"Index Exchange\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"description\": \"Index Exchange is a customizable exchange technology that enables sell side media firms to monetize ad inventories programmatically and in real time.\",\r\n            \"website\": \"https://www.indexexchange.com\"\r\n        },\r\n        \"Indexhibit\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c(?:link|a href) [^\\u003e]+ndxz-studio\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"indexhibit\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Apache HTTP Server\",\r\n                \"Exhibit\",\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://www.indexhibit.org\",\r\n            \"cpe\": \"cpe:2.3:a:indexhibit:indexhibit:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Indi\": {\r\n            \"cats\": [\r\n                94\r\n            ],\r\n            \"js\": [\r\n                \"indi.formatstats\",\r\n                \"indi_carousel.productcta\",\r\n                \"indicountly.check_any_consent\"\r\n            ],\r\n            \"description\": \"Indi is a video social network where everyone - artists, brands, retailers, nonprofits, celebrities and individuals - can connect with fans and supporters to interact directly with your brand utilising exclusive Video Challenges and Video Threads tailor made by you.\",\r\n            \"website\": \"https://indi.com\"\r\n        },\r\n        \"Indico\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"makacsession\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"powered by\\\\s+(?:cern )?\\u003ca href=\\\"http://(?:cdsware\\\\.cern\\\\.ch/indico/|indico-software\\\\.org|cern\\\\.ch/indico)\\\"\\u003e(?:cds )?indico( [\\\\d\\\\.]+)?\\\\;version:\\\\1\"\r\n            ],\r\n            \"website\": \"https://indico-software.org\"\r\n        },\r\n        \"Indy\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"indy(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"website\": \"https://indyproject.org\"\r\n        },\r\n        \"Inertia.js\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"headers\": {\r\n                \"vary\": \"x-inertia\",\r\n                \"x-inertia\": \"\"\r\n            },\r\n            \"description\": \"Inertia.js is a protocol for creating monolithic single-page applications.\",\r\n            \"website\": \"https://inertiajs.com\"\r\n        },\r\n        \"InfernoJS\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"inferno\",\r\n                \"inferno.version\"\r\n            ],\r\n            \"website\": \"https://infernojs.org\"\r\n        },\r\n        \"Infogram\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"infogramembeds\"\r\n            ],\r\n            \"description\": \"Infogram is a web-based data visualisation and infographics platform.\",\r\n            \"website\": \"https://infogram.com\"\r\n        },\r\n        \"Infolinks\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"infolinks_pid\",\r\n                \"infolinks_wsid\"\r\n            ],\r\n            \"description\": \"Infolinks is an online advertising platform for publishers and advertisers.\",\r\n            \"website\": \"https://www.infolinks.com\"\r\n        },\r\n        \"Infomaniak\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"description\": \"Infomaniak is a hosting company based in Geneva, Switzerland.\",\r\n            \"website\": \"https://www.infomaniak.com\"\r\n        },\r\n        \"InforUMobile\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"description\": \"InforUMobile is a multi-channel system that enables digital communication with customers, offering various channels for interacting and engaging with users, developed by the Shamir Systems Group.\",\r\n            \"website\": \"https://www.inforu.co.il\"\r\n        },\r\n        \"Infoset\": {\r\n            \"cats\": [\r\n                52,\r\n                53\r\n            ],\r\n            \"js\": [\r\n                \"infosetchat\",\r\n                \"infosetroot\"\r\n            ],\r\n            \"description\": \"Infoset is an advanced communication and support solutions.\",\r\n            \"website\": \"https://infoset.app\"\r\n        },\r\n        \"Insider\": {\r\n            \"cats\": [\r\n                97\r\n            ],\r\n            \"js\": [\r\n                \"insider\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"api\\\\.useinsider\\\\.\\\\w+/\"\r\n            ],\r\n            \"description\": \"Insider is the first integrated Growth Management Platform helping digital marketers drive growth across the funnel, from Acquisition to Activation, Retention, and Revenue from a unified platform powered by Artificial Intelligence and Machine Learning.\",\r\n            \"website\": \"https://useinsider.com\"\r\n        },\r\n        \"Insightly CRM\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.insightly\\\\.services/\"\r\n            ],\r\n            \"description\": \"Insightly CRM is a cloud-based customer relationship management software, helps businesses manage leads, contacts, and opportunities, track customer interactions, create custom reports, automate workflows, and integrate with third-party applications, improving customer engagement and streamlining business processes.\",\r\n            \"website\": \"https://www.insightly.com/crm/\"\r\n        },\r\n        \"Inspectlet\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"__insp\",\r\n                \"__inspld\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- (?:begin|end) inspectlet embed code --\\u003e\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.inspectlet\\\\.com\"\r\n            ],\r\n            \"website\": \"https://www.inspectlet.com/\"\r\n        },\r\n        \"Instabot\": {\r\n            \"cats\": [\r\n                5,\r\n                10,\r\n                32,\r\n                52,\r\n                58\r\n            ],\r\n            \"js\": [\r\n                \"instabot\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/rokoinstabot\\\\.js\"\r\n            ],\r\n            \"description\": \"Instabot is a conversion chatbot that understands your users, and curates information, answers questions, captures contacts, and books meetings instantly.\",\r\n            \"website\": \"https://instabot.io/\"\r\n        },\r\n        \"Instafeed\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"instafeed\\\\.nfcube\\\\.com/\"\r\n            ],\r\n            \"description\": \"Instafeed is an official Instagram app.\",\r\n            \"website\": \"https://apps.shopify.com/instafeed\"\r\n        },\r\n        \"Instamojo\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"initial_state.seller.avatar\",\r\n                \"instamojo\"\r\n            ],\r\n            \"description\": \"Instamojo is a Bangalore-based company that provides a platform for selling digital goods and collecting payment online.\",\r\n            \"website\": \"https://www.instamojo.com/\"\r\n        },\r\n        \"Instana\": {\r\n            \"cats\": [\r\n                10,\r\n                13,\r\n                78\r\n            ],\r\n            \"js\": [\r\n                \"ineum\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"eum\\\\.instana\\\\.io\"\r\n            ],\r\n            \"description\": \"Instana is a Kubernetes-native APM tool which is built for new-stack including Microservices and lately Serverless but also supports the existing VM based stacks  including several supported technologies.\",\r\n            \"website\": \"https://www.instana.com\"\r\n        },\r\n        \"Instant.Page\": {\r\n            \"cats\": [\r\n                59,\r\n                92\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"instant\\\\.page\"\r\n            ],\r\n            \"description\": \"Instant.Page is a JavaScript library which uses just-in-time preloading technique to make websites faster.\",\r\n            \"website\": \"https://instant.page/\"\r\n        },\r\n        \"InstantCMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"instantcms[logdate]\": \"\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"instantcms\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://www.instantcms.ru\",\r\n            \"cpe\": \"cpe:2.3:a:instantcms:instantcms:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"InstantClick\": {\r\n            \"cats\": [\r\n                59,\r\n                92\r\n            ],\r\n            \"js\": [\r\n                \"instantclick\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"instantclick\\\\.min\\\\.js\"\r\n            ],\r\n            \"description\": \"InstantClick is a JavaScript library that speeds up your website, making navigation faster.\",\r\n            \"website\": \"https://instantclick.io/\"\r\n        },\r\n        \"InstantGeo\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"geojs\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"js\\\\.instantgeo\\\\.info\",\r\n                \"script\\\\.instantgeo\\\\.info\"\r\n            ],\r\n            \"description\": \"InstantGeo is a service that provides IP geolocation to web pages\",\r\n            \"website\": \"https://instantgeo.info\"\r\n        },\r\n        \"Instapage\": {\r\n            \"cats\": [\r\n                51,\r\n                74,\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"_instapagesnowplow\",\r\n                \"instapagesp\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.instapagemetrics\\\\.com\",\r\n                \"heatmap-events-collector\\\\.instapage\\\\.com\"\r\n            ],\r\n            \"implies\": [\r\n                \"Lua\",\r\n                \"Node.js\"\r\n            ],\r\n            \"description\": \"Instapage is a cloud-based landing page platform designed for marketing teams and agencies.\",\r\n            \"website\": \"https://instapage.com\"\r\n        },\r\n        \"Instatus\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"description\": \"Instatus is a status and incident communication tool.\",\r\n            \"website\": \"https://instatus.com\"\r\n        },\r\n        \"Integral Ad Science\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.adsafeprotected\\\\.com/\"\r\n            ],\r\n            \"description\": \"Integral Ad Science is an American publicly owned technology company that analyses the value of digital advertising placements.\",\r\n            \"website\": \"https://integralads.com\"\r\n        },\r\n        \"Intel Active Management Technology\": {\r\n            \"cats\": [\r\n                22,\r\n                46\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"intel\\\\(r\\\\) active management technology(?: ([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"Intel Active Management Technology (AMT) is a proprietary remote management and control system for personal computers with Intel CPUs.\",\r\n            \"website\": \"https://intel.com\",\r\n            \"cpe\": \"cpe:2.3:a:intel:active_management_technology:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"IntenseDebate\": {\r\n            \"cats\": [\r\n                15\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"intensedebate\\\\.com\"\r\n            ],\r\n            \"description\": \"IntenseDebate is a blog commenting system that supports Typepad, Blogger and Wordpress blogs. The system allows blog owners to track and moderate comments from one place with features like threading, comment analytics, user reputation, and comment aggregation.\",\r\n            \"website\": \"https://intensedebate.com\"\r\n        },\r\n        \"Interact\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"interactapp.name\",\r\n                \"interactpromotionobject\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.tryinteract\\\\.com/\"\r\n            ],\r\n            \"description\": \"Interact is a tool for creating online quizzes.\",\r\n            \"website\": \"https://www.tryinteract.com\"\r\n        },\r\n        \"Intercom\": {\r\n            \"cats\": [\r\n                52,\r\n                53\r\n            ],\r\n            \"js\": [\r\n                \"intercom\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:api\\\\.intercom\\\\.io/api|static\\\\.intercomcdn\\\\.com/intercom\\\\.v1)\"\r\n            ],\r\n            \"description\": \"Intercom is an American software company that produces a messaging platform which allows businesses to communicate with prospective and existing customers within their app, on their website, through social media, or via email.\",\r\n            \"website\": \"https://www.intercom.com\"\r\n        },\r\n        \"Intercom Articles\": {\r\n            \"cats\": [\r\n                4\r\n            ],\r\n            \"html\": [\r\n                \"\\u003ca href=\\\"https://www.intercom.com/intercom-link[^\\\"]+solution=customer-support[^\\u003e]+\\u003ewe run on intercom\"\r\n            ],\r\n            \"description\": \"Intercom Articles is a tool to create, organise and publish help articles.\",\r\n            \"website\": \"https://www.intercom.com/articles\"\r\n        },\r\n        \"Internet Brands\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"description\": \"Internet Brands is a technology company that operates a variety of web portals and online communities, providing information and services to consumers and businesses across a range of industries.\",\r\n            \"website\": \"https://www.internetbrands.com\"\r\n        },\r\n        \"Intersection Observer\": {\r\n            \"cats\": [\r\n                92,\r\n                59\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/assets/(?:.+)?intersection-observer\\\\.[\\\\d\\\\w\\\\.]+\\\\.js\",\r\n                \"cdn\\\\.jsdelivr\\\\.net/npm/intersection-observer@([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Intersection Observer is a browser API that provides a way to observe the visibility and position of a DOM element relative to the containing root element or viewport.\",\r\n            \"website\": \"https://www.w3.org/TR/intersection-observer\"\r\n        },\r\n        \"Intershop\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cish-root\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:is-bin|intershop)\"\r\n            ],\r\n            \"description\": \"Intershop is an ecommerce platform, tailored to the needs of complex business processes and major organisations.\",\r\n            \"website\": \"https://intershop.com\"\r\n        },\r\n        \"Invenio\": {\r\n            \"cats\": [\r\n                50\r\n            ],\r\n            \"cookies\": {\r\n                \"inveniosession\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"(?:powered by|system)\\\\s+(?:cern )?\\u003ca (?:class=\\\"footer\\\" )?href=\\\"http://(?:cdsware\\\\.cern\\\\.ch(?:/invenio)?|invenio-software\\\\.org|cern\\\\.ch/invenio)(?:/)?\\\"\\u003e(?:cds )?invenio\\u003c/a\\u003e\\\\s*v?([\\\\d\\\\.]+)?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Invenio is an open-source software framework for large-scale digital repositories that provides the tools for management of digital assets in an institutional repository and research data management systems.\",\r\n            \"website\": \"https://invenio-software.org\"\r\n        },\r\n        \"Inventrue\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"author\": [\r\n                    \"^inventrue, llc.$\"\r\n                ]\r\n            },\r\n            \"description\": \"Inventrue creates websites for RV, Motorsports and Trailer Dealerships.\",\r\n            \"website\": \"https://www.inventrue.com\"\r\n        },\r\n        \"Inveon\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"inv.customer\": \"\\\\;confidence:50\",\r\n                \"inveonsessionid\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"invapp\",\r\n                \"invtagmanagerparams\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"scripts/_app/inv(?:\\\\w+)\\\\.js\\\\?v=(.+)$\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Inveon is a technology company that has been delivering ecommerce infrastructure software and mcommerce applications.\",\r\n            \"website\": \"https://www.inveon.com\"\r\n        },\r\n        \"Invoca\": {\r\n            \"cats\": [\r\n                32,\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"invoca.pnapi.version\",\r\n                \"invocatagid\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.dialogtech\\\\.com/\"\r\n            ],\r\n            \"description\": \"Invoca is an AI-powered call tracking and conversational analytics company.\",\r\n            \"website\": \"https://www.invoca.com\"\r\n        },\r\n        \"Ionic\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"js\": [\r\n                \"ionic.config\",\r\n                \"ionic.version\"\r\n            ],\r\n            \"description\": \"Ionic is an open-source framework that enables developers to create cross-platform mobile, web, and desktop applications using web technologies like HTML, CSS, and JavaScript.\",\r\n            \"website\": \"https://ionicframework.com\"\r\n        },\r\n        \"Ionicons\": {\r\n            \"cats\": [\r\n                17\r\n            ],\r\n            \"description\": \"Ionicons is an open-source icon set crafted for web, iOS, Android, and desktop apps.\",\r\n            \"website\": \"https://ionicons.com\"\r\n        },\r\n        \"IrisLMS\": {\r\n            \"cats\": [\r\n                21\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.irislms\\\\.ir/\"\r\n            ],\r\n            \"description\": \"IrisLMS comprehensive education management system, in order to support e-learning and provide suitable conditions for holding online and offline classes with all facilities.\",\r\n            \"website\": \"https://irislms.ir\"\r\n        },\r\n        \"Irroba\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"html\": [\r\n                \"\\u003ca[^\\u003e]*href=\\\"https://www\\\\.irroba\\\\.com\\\\.br\"\r\n            ],\r\n            \"website\": \"https://www.irroba.com.br/\"\r\n        },\r\n        \"Isotope\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"init_isotope\",\r\n                \"isotope\"\r\n            ],\r\n            \"description\": \"Isotope.js is a JavaScript library that makes it easy to sort, filter, and add Masonry layouts to items on a webpage.\",\r\n            \"website\": \"https://isotope.metafizzy.co\"\r\n        },\r\n        \"Isso\": {\r\n            \"cats\": [\r\n                15\r\n            ],\r\n            \"js\": [\r\n                \"isso.fetchcomments\"\r\n            ],\r\n            \"implies\": [\r\n                \"Python\"\r\n            ],\r\n            \"description\": \"Isso is a lightweight commenting server written in Python and JavaScript, referred to as \\\"Ich schrei sonst\\\" in German.\",\r\n            \"website\": \"https://github.com/posativ/isso/\"\r\n        },\r\n        \"Issuu\": {\r\n            \"cats\": [\r\n                19,\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"issuupanel\",\r\n                \"issuureaders\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.issuu\\\\.com/\"\r\n            ],\r\n            \"description\": \"Issuu is a digital discovery and publishing platform.\",\r\n            \"website\": \"https://issuu.com\"\r\n        },\r\n        \"Iterable\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"iterableanalytics\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"js\\\\.iterable\\\\.com\"\r\n            ],\r\n            \"description\": \"Iterable is a cross-channel marketing platform that powers unified customer experiences.\",\r\n            \"website\": \"https://iterable.com/\"\r\n        },\r\n        \"Ivory Search\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"ivory_search_analytics\",\r\n                \"ivorysearchvars\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/add-search-to-menu/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Ivory Search is a WordPress search plugin that improves WordPress search by providing advanced options to extend search or exclude specific content from search.\",\r\n            \"website\": \"https://ivorysearch.com\"\r\n        },\r\n        \"Izooto\": {\r\n            \"cats\": [\r\n                32,\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"_izooto\",\r\n                \"izooto\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.izooto\\\\.\\\\w+\"\r\n            ],\r\n            \"description\": \"iZooto is a user engagement and retention tool that leverages web push notifications to help business to drive repeat traffic, leads and sales.\",\r\n            \"website\": \"https://www.izooto.com\"\r\n        },\r\n        \"J2Store\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"j2storeurl\"\r\n            ],\r\n            \"implies\": [\r\n                \"Joomla\"\r\n            ],\r\n            \"description\": \"J2Store is a Joomla shopping cart and ecommerce extension.\",\r\n            \"website\": \"https://www.j2store.org\",\r\n            \"cpe\": \"cpe:2.3:a:j2store:j2store:*:*:*:*:*:joomla\\\\!:*:*\"\r\n        },\r\n        \"JANet\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"description\": \"JANet is an affiliate marketing network.\",\r\n            \"website\": \"https://j-a-net.jp\"\r\n        },\r\n        \"JAlbum\": {\r\n            \"cats\": [\r\n                7\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"jalbum( [\\\\d.]+)?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"description\": \"jAlbum is across-platform photo website software for creating and uploading galleries from images and videos.\",\r\n            \"website\": \"https://jalbum.net/en\"\r\n        },\r\n        \"JBoss Application Server\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"jboss(?:-([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"website\": \"https://jboss.org/jbossas.html\",\r\n            \"cpe\": \"cpe:2.3:a:redhat:jboss_application_server:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"JBoss Web\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"jbossweb(?:-([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"JBoss Application Server\"\r\n            ],\r\n            \"website\": \"https://jboss.org/jbossweb\",\r\n            \"cpe\": \"cpe:2.3:a:redhat:jbossweb:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"JET Enterprise\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"headers\": {\r\n                \"powered\": \"jet-enterprise\"\r\n            },\r\n            \"website\": \"https://www.jetecommerce.com.br/\"\r\n        },\r\n        \"JS Charts\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"jschart\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"jscharts.{0,32}\\\\.js\"\r\n            ],\r\n            \"website\": \"https://www.jscharts.com\"\r\n        },\r\n        \"JSEcoin\": {\r\n            \"cats\": [\r\n                56\r\n            ],\r\n            \"js\": [\r\n                \"jsemine\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^(?:https):?//load\\\\.jsecoin\\\\.com/load/\"\r\n            ],\r\n            \"description\": \"JSEcoin is a way to mine, receive payments for your goods or services and transfer cryptocurrency\",\r\n            \"website\": \"https://jsecoin.com/\"\r\n        },\r\n        \"JSS\": {\r\n            \"cats\": [\r\n                12,\r\n                47\r\n            ],\r\n            \"description\": \"JSS is an authoring tool for CSS which allows you to use JavaScript to describe styles in a declarative, conflict-free and reusable way.\",\r\n            \"website\": \"https://cssinjs.org/\"\r\n        },\r\n        \"JShop\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"jss_1stepdeliverytype\",\r\n                \"jss_1stepfillshipping\"\r\n            ],\r\n            \"description\": \"JShop is the ecommerce database solution marketed by Whorl Ltd. worldwide.\",\r\n            \"website\": \"https://www.whorl.co.uk\"\r\n        },\r\n        \"JTL Shop\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"jtlshop\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"(?:\\u003cinput[^\\u003e]+name=\\\"jtlshop|\\u003ca href=\\\"jtl\\\\.php)\"\r\n            ],\r\n            \"description\": \"JTL Shop is an ecommerce product created by JTL Software company.\",\r\n            \"website\": \"https://www.jtl-software.de/online-shopsystem\"\r\n        },\r\n        \"JUST\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"checkout-button-.+/just-pay-button\\\\.js\"\r\n            ],\r\n            \"description\": \"JUST is a one-click payment solution for online business and online shoppers.\",\r\n            \"website\": \"https://www.getjusto.com\"\r\n        },\r\n        \"JW Player\": {\r\n            \"cats\": [\r\n                14\r\n            ],\r\n            \"js\": [\r\n                \"jwdefaults\",\r\n                \"jwplayer\",\r\n                \"jwplayerapiurl\",\r\n                \"webpackjsonpjwplayer\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.jwpcdn\\\\.com\",\r\n                \"\\\\.jwplayer\\\\.com\"\r\n            ],\r\n            \"description\": \"JW Player is a online video player with video engagement analytics, custom video player skins, and live video streaming capability.\",\r\n            \"website\": \"https://www.jwplayer.com\"\r\n        },\r\n        \"Jahia DX\": {\r\n            \"cats\": [\r\n                1,\r\n                47\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cscript id=\\\"staticassetaggregatedjavascrip\"\r\n            ],\r\n            \"website\": \"https://www.jahia.com/dx\"\r\n        },\r\n        \"Jalios\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"jalios\"\r\n                ]\r\n            },\r\n            \"website\": \"https://www.jalios.com\"\r\n        },\r\n        \"Java\": {\r\n            \"cats\": [\r\n                27\r\n            ],\r\n            \"cookies\": {\r\n                \"jsessionid\": \"\"\r\n            },\r\n            \"description\": \"Java is a class-based, object-oriented programming language that is designed to have as few implementation dependencies as possible.\",\r\n            \"website\": \"https://java.com\",\r\n            \"cpe\": \"cpe:2.3:a:oracle:jre:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Java Servlet\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"servlet(?:\\\\/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"website\": \"https://www.oracle.com/technetwork/java/index-jsp-135475.html\"\r\n        },\r\n        \"JavaScript Infovis Toolkit\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"$jit\",\r\n                \"$jit.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"jit(?:-yc)?\\\\.js\"\r\n            ],\r\n            \"website\": \"https://philogb.github.io/jit/\"\r\n        },\r\n        \"JavaServer Faces\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"jsf(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"website\": \"https://javaserverfaces.java.net\"\r\n        },\r\n        \"JavaServer Pages\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"jsp(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"website\": \"https://www.oracle.com/technetwork/java/javaee/jsp/index.html\"\r\n        },\r\n        \"Javadoc\": {\r\n            \"cats\": [\r\n                4\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- generated by javadoc --\\u003e\"\r\n            ],\r\n            \"description\": \"Javadoc is a tool used for generating Java code documentation in HTML format from Java source code.\",\r\n            \"website\": \"https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javadoc.html\"\r\n        },\r\n        \"Jekyll\": {\r\n            \"cats\": [\r\n                57\r\n            ],\r\n            \"js\": [\r\n                \"simplejekyllsearch\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- begin jekyll seo tag\",\r\n                \"\\u003c!-- created with jekyll now -\",\r\n                \"powered by \\u003ca href=\\\"https?://jekyllrb\\\\.com\\\"[^\\u003e]*\\u003ejekyll\\u003c/\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"jekyll\\\\sv([\\\\d.]+)?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Ruby\"\r\n            ],\r\n            \"description\": \"Jekyll is a blog-aware, static site generator for personal, project, or organisation sites.\",\r\n            \"website\": \"https://jekyllrb.com\",\r\n            \"cpe\": \"cpe:2.3:a:jekyllrb:jekyll:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Jenkins\": {\r\n            \"cats\": [\r\n                44\r\n            ],\r\n            \"js\": [\r\n                \"jenkinsciglobal\",\r\n                \"jenkinsrules\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-jenkins\": \"([\\\\d.]+)\\\\;version:\\\\1\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003cspan class=\\\"jenkins_ver\\\"\\u003e\\u003ca href=\\\"https://jenkins\\\\.io/\\\"\\u003ejenkins ver\\\\. ([\\\\d.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"description\": \"Jenkins is an open-source automation tool written in Java with plugins built for Continuous Integration (CI) purposes.\",\r\n            \"website\": \"https://jenkins.io/\",\r\n            \"cpe\": \"cpe:2.3:a:jenkins:jenkins:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Jetpack\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/jetpack/\"\r\n            ],\r\n            \"description\": \"Jetpack is a popular WordPress plugin created by Automattic, the people behind WordPress.com.\",\r\n            \"website\": \"https://jetpack.com\"\r\n        },\r\n        \"Jetpack Boost\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/jetpack-boost/\"\r\n            ],\r\n            \"description\": \"Jetpack Boost – Website Speed, Performance and Critical CSS.\",\r\n            \"website\": \"https://jetpack.com\"\r\n        },\r\n        \"Jetshop\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"jetshopdata\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c(?:div|aside) id=\\\"jetshop-branding\\\"\\u003e\"\r\n            ],\r\n            \"website\": \"https://jetshop.se\"\r\n        },\r\n        \"Jetty\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"jetty(?:\\\\(([\\\\d\\\\.]*\\\\d+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"website\": \"https://www.eclipse.org/jetty\"\r\n        },\r\n        \"Jibres\": {\r\n            \"cats\": [\r\n                6,\r\n                55\r\n            ],\r\n            \"cookies\": {\r\n                \"jibres\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"jibres\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"jibres\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"/jibres\\\\.js\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"jibres\"\r\n                ]\r\n            },\r\n            \"description\": \"Jibres is an ecommerce solution with an online store builder and Point-of-Sale (PoS) software.\",\r\n            \"website\": \"https://jibres.com\"\r\n        },\r\n        \"Jilt App\": {\r\n            \"cats\": [\r\n                100,\r\n                98\r\n            ],\r\n            \"js\": [\r\n                \"jiltstorefrontparams.platform\"\r\n            ],\r\n            \"description\": \"Jilt App helps ecommerce store owners track and recover abandoned orders. Works seamlessly with Shopify and WooCommerce.\",\r\n            \"website\": \"https://community.shopify.com/c/shopify-apps/jilt-is-over-what-app-to-use-for-abandoned-carts-now/td-p/1575095\"\r\n        },\r\n        \"Jilt plugin\": {\r\n            \"cats\": [\r\n                87,\r\n                98\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.jilt\\\\.com/.+/jilt\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Jilt plugin helps ecommerce store owners track and recover abandoned orders. Works seamlessly with Shopify and WooCommerce.\",\r\n            \"website\": \"https://wordpress.org/plugins/jilt-for-woocommerce\"\r\n        },\r\n        \"Jimdo\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"jimdodolphindata\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-jimdo-instance\": \"\",\r\n                \"x-jimdo-wid\": \"\"\r\n            },\r\n            \"description\": \"Jimdo is a website-builder and all-in-one hosting solution, designed to enable users to build their own websites.\",\r\n            \"website\": \"https://www.jimdo.com\"\r\n        },\r\n        \"Jirafe\": {\r\n            \"cats\": [\r\n                10,\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"jirafe\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/jirafe\\\\.js\"\r\n            ],\r\n            \"website\": \"https://docs.jirafe.com\"\r\n        },\r\n        \"Jitsi\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"lib-jitsi-meet.*\\\\.js\"\r\n            ],\r\n            \"description\": \"Jitsi is a free and open-source multiplatform voice (VoIP), videoconferencing and instant messaging applications for the web platform.\",\r\n            \"website\": \"https://jitsi.org\"\r\n        },\r\n        \"Jive\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"headers\": {\r\n                \"x-jive-chrome-wrapped\": \"\",\r\n                \"x-jive-flow-id\": \"\",\r\n                \"x-jive-request-id\": \"\",\r\n                \"x-jive-user-id\": \"\",\r\n                \"x-jsl\": \"\"\r\n            },\r\n            \"website\": \"https://www.jivesoftware.com\"\r\n        },\r\n        \"JivoChat\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"jivo_api\",\r\n                \"jivo_version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.jivosite\\\\.com\"\r\n            ],\r\n            \"description\": \"JivoChat is a live chat solution for websites offering customizable web and mobile chat widgets.\",\r\n            \"website\": \"https://www.jivosite.com\"\r\n        },\r\n        \"Jivox\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.jivox\\\\.com/\"\r\n            ],\r\n            \"description\": \"Jivox is a cloud-based, data-driven platform for delivering personalised digital advertising and marketing experiences at scale.\",\r\n            \"website\": \"https://jivox.com\"\r\n        },\r\n        \"JobAdder\": {\r\n            \"cats\": [\r\n                101\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.jobadder\\\\.com/\"\r\n            ],\r\n            \"description\": \"JobAdder is a cloud-based recruitment management platform for staffing agencies and in-house corporate hiring teams.\",\r\n            \"website\": \"https://jobadder.com\"\r\n        },\r\n        \"JobberBase\": {\r\n            \"cats\": [\r\n                19,\r\n                101\r\n            ],\r\n            \"js\": [\r\n                \"jobber\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"jobberbase\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Jobberbase is an open-source job board platform that enables the creation of job sites.\",\r\n            \"website\": \"https://www.jobberbase.com\"\r\n        },\r\n        \"Jobvite\": {\r\n            \"cats\": [\r\n                101\r\n            ],\r\n            \"js\": [\r\n                \"jobvite\"\r\n            ],\r\n            \"description\": \"Jobvite is an applicant tracking software and recruiting platform.\",\r\n            \"website\": \"https://www.jobvite.com\"\r\n        },\r\n        \"JoomShopping\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"joomshoppingvideohtml5\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/components/com_jshopping/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Joomla\"\r\n            ],\r\n            \"description\": \"JoomShopping is an open-source ecommerce plugin for Joomla.\",\r\n            \"website\": \"https://www.webdesigner-profi.de/joomla-webdesign/joomla-shop\"\r\n        },\r\n        \"Joomla\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"jcomments\",\r\n                \"joomla\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-content-encoded-by\": \"joomla! ([\\\\d.]+)\\\\;version:\\\\1\"\r\n            },\r\n            \"html\": [\r\n                \"(?:\\u003cdiv[^\\u003e]+id=\\\"wrapper_r\\\"|\\u003c(?:link|script)[^\\u003e]+(?:feed|components)/com_|\\u003ctable[^\\u003e]+class=\\\"pill)\\\\;confidence:50\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"joomla!(?: ([\\\\d.]+))?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Joomla is a free and open-source content management system for publishing web content.\",\r\n            \"website\": \"https://www.joomla.org/\",\r\n            \"cpe\": \"cpe:2.3:a:joomla:joomla:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"JouwWeb\": {\r\n            \"cats\": [\r\n                1,\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"jouwweb\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:cdn)?\\\\.(?:jwwb|jouwweb)\\\\.nl/\"\r\n            ],\r\n            \"description\": \"JouwWeb is an online website builder that allows internet users to create own website.\",\r\n            \"website\": \"https://www.jouwweb.nl\"\r\n        },\r\n        \"JsObservable\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"description\": \"JsObservable is integrated with JsViews and facilitates observable data manipulations that are immediately reflected in the data-bound templates. The library is developed and maintained by Microsoft employee Boris Moore and is used in projects such as Outlook.com and Windows Azure.\",\r\n            \"website\": \"https://www.jsviews.com/#jsobservable\"\r\n        },\r\n        \"JsRender\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"([\\\\d\\\\.]+)?/jsrender(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"JsViews\"\r\n            ],\r\n            \"description\": \"JsRender is the template library. The library is developed and maintained by Microsoft employee Boris Moore and is used in projects such as Outlook.com and Windows Azure.\",\r\n            \"website\": \"https://www.jsviews.com/#jsrender\"\r\n        },\r\n        \"JsViews\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"([\\\\d\\\\.]+)?/jsviews(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"JsObservable\",\r\n                \"JsRender\"\r\n            ],\r\n            \"description\": \"JsViews is the MVVM library which provides two-way data binding for the template. The library is developed and maintained by Microsoft employee Boris Moore and is used in projects such as Outlook.com and Windows Azure.\",\r\n            \"website\": \"https://www.jsviews.com/#jsviews\"\r\n        },\r\n        \"Judge.me\": {\r\n            \"cats\": [\r\n                90\r\n            ],\r\n            \"js\": [\r\n                \"judgeme\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.judge\\\\.me\"\r\n            ],\r\n            \"description\": \"Judge.me is a reviews app that helps you collect and display product reviews and site reviews with photos, videos and Q\\u0026A.\",\r\n            \"website\": \"https://judge.me\"\r\n        },\r\n        \"JuicyAds\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"adsbyjuicy\"\r\n            ],\r\n            \"meta\": {\r\n                \"juicyads-site-verification\": []\r\n            },\r\n            \"description\": \"JuicyAds is a legitimate advertising network that specializes in adult content.\",\r\n            \"website\": \"https://www.juicyads.com\"\r\n        },\r\n        \"Jumbo\": {\r\n            \"cats\": [\r\n                92\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"mt\\\\.tryjumbo\\\\.com\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Jumbo is a page speed optimizer app for Shopify based sites.\",\r\n            \"website\": \"https://www.tryjumbo.com/\"\r\n        },\r\n        \"Jumio\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"description\": \"Jumio is an online mobile payments and identity verification company that provides card and ID scanning and validation products for mobile and web transactions.\",\r\n            \"website\": \"https://www.jumio.com\"\r\n        },\r\n        \"Jumpseller\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"jumpseller\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"assets\\\\.jumpseller\\\\.\\\\w+/\",\r\n                \"jumpseller-apps\\\\.herokuapp\\\\.\\\\w+/\"\r\n            ],\r\n            \"description\": \"Jumpseller is a cloud ecommerce solution for small businesses.\",\r\n            \"website\": \"https://jumpseller.com\"\r\n        },\r\n        \"June\": {\r\n            \"cats\": [\r\n                10,\r\n                97\r\n            ],\r\n            \"cookies\": {\r\n                \"_june_session\": \"\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"static\\\\.june\\\\.so/analytics\\\\.js/\"\r\n            ],\r\n            \"description\": \"June is a product analytics for subscription businesses. It automatically generates graphs of the metrics users should track by connecting their segment account.\",\r\n            \"website\": \"https://june.so\"\r\n        },\r\n        \"Junip\": {\r\n            \"cats\": [\r\n                90\r\n            ],\r\n            \"js\": [\r\n                \"juniploaded\",\r\n                \"webpackchunkjunip_scripts\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.juniphq\\\\.com/\"\r\n            ],\r\n            \"description\": \"Junip provider of a ecommerce brand review platform designed to share customers' story, send review requests and display review content.\",\r\n            \"website\": \"https://junip.co\"\r\n        },\r\n        \"Juo\": {\r\n            \"cats\": [\r\n                74\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.juo\\\\.io/\"\r\n            ],\r\n            \"description\": \"Juo is a centralised experimentation platform for innovative marketing and product teams.\",\r\n            \"website\": \"https://get.juo.io\"\r\n        },\r\n        \"Juspay\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"juspay\"\r\n            ],\r\n            \"description\": \"Juspay is a developer of an online platform designed to be used for mobile-based payments.\",\r\n            \"website\": \"https://juspay.in\"\r\n        },\r\n        \"Justo\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.getjusto\\\\.com/\"\r\n            ],\r\n            \"description\": \"Justo is a subscription-based software that allows anyone to set up an online store and sell their products with delivery options.\",\r\n            \"website\": \"https://www.getjusto.com\"\r\n        },\r\n        \"Justuno\": {\r\n            \"cats\": [\r\n                76,\r\n                98\r\n            ],\r\n            \"js\": [\r\n                \"justunoapp\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.justuno\\\\.com\",\r\n                \"my\\\\.jst\\\\.ai\"\r\n            ],\r\n            \"description\": \"Justuno is a visitor conversion optimisation platform.\",\r\n            \"website\": \"https://www.justuno.com\"\r\n        },\r\n        \"Justuno App\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//scripttags\\\\.justuno\\\\.com/shopify_justuno\"\r\n            ],\r\n            \"implies\": [\r\n                \"Justuno\"\r\n            ],\r\n            \"description\": \"Justuno is a premium conversion marketing and analytics platform that provides retailers with powerful tools to increase conversions.\",\r\n            \"website\": \"https://apps.shopify.com/justuno-pop-ups-email-conversion\"\r\n        },\r\n        \"K-Sup\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^k-sup \\\\(([\\\\d.r]+)\\\\)$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"description\": \"K-Sup is an open-source CMS/portal solution dedicated to higher education and research created by Kosmos Education.\",\r\n            \"website\": \"https://www.ksup.org/\"\r\n        },\r\n        \"K2\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"k2ratingurl\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!--(?: joomlaworks \\\"k2\\\"| start k2)\"\r\n            ],\r\n            \"implies\": [\r\n                \"Joomla\"\r\n            ],\r\n            \"website\": \"https://getk2.org\"\r\n        },\r\n        \"KAMAR\": {\r\n            \"cats\": [\r\n                21\r\n            ],\r\n            \"js\": [\r\n                \"kamar.has_address_ben_found\"\r\n            ],\r\n            \"description\": \"KAMAR is a Student Management System utilised by secondary schools.\",\r\n            \"website\": \"https://kamar.nz\"\r\n        },\r\n        \"KISSmetrics\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"km_cookie_domain\"\r\n            ],\r\n            \"website\": \"https://www.kissmetrics.com\"\r\n        },\r\n        \"KMK\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"description\": \"KMK is a company that offers ecommerce software technology in C2C, B2B, B2C areas.\",\r\n            \"website\": \"https://www.kmk.net.tr\"\r\n        },\r\n        \"KPHP\": {\r\n            \"cats\": [\r\n                27\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^kphp/([\\\\d\\\\.]+)$\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"KPHP (kPHP or KittenPHP) is a free PHP-to- C++ source-to-source translator, developed by VKontakte.\",\r\n            \"website\": \"https://vkcom.github.io/kphp\"\r\n        },\r\n        \"KQS.store\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"kqs_box\",\r\n                \"kqs_off\"\r\n            ],\r\n            \"description\": \"KQS.store is an ecommerce software.\",\r\n            \"website\": \"https://www.kqs.pl\"\r\n        },\r\n        \"KaTeX\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"katex\",\r\n                \"katex.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"katex(@|/)[0-9.]+(?:/dist)?/katex(?:\\\\.min)?\\\\.(mjs|js|css)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"KaTeX is a cross-browser JavaScript library that displays mathematical notation in web browsers.\",\r\n            \"website\": \"https://katex.org/\"\r\n        },\r\n        \"Kadence WP Blocks\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/kadence-blocks/dist/.+/kb-form-block\\\\.min\\\\.js(?:\\\\?ver=([\\\\d\\\\.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"Gutenberg\"\r\n            ],\r\n            \"description\": \"Kadence WP Blocks is a plugin for WordPress that provides a collection of custom blocks for the Gutenberg editor, allowing users to create custom layouts and designs for their website without needing to know how to code.\",\r\n            \"website\": \"https://www.kadencewp.com/kadence-blocks/\"\r\n        },\r\n        \"Kadence WP Kadence\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"kadence\",\r\n                \"kadenceconfig\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/kadence/.+navigation\\\\.min\\\\.js(?:\\\\?ver=([\\\\d\\\\.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Kadence WP Kadence is a multipurpose WordPress theme that is available for free download and also offers a pro version.\",\r\n            \"website\": \"https://www.kadencewp.com/kadence-theme\"\r\n        },\r\n        \"Kadence WP Virtue\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/virtue/.+main-min\\\\.js(?:\\\\?ver=([\\\\d\\\\.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Kadence WP Virtue is a multipurpose WordPress theme that is available for free download and also offers a pro version.\",\r\n            \"website\": \"https://www.kadencewp.com/product/virtue-free-theme\"\r\n        },\r\n        \"Kaira Vogue\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/vogue(?:-child)?/\"\r\n            ],\r\n            \"description\": \"Vogue is a very easy to use multipurpose WordPress theme created by Kaira.\",\r\n            \"website\": \"https://kairaweb.com/wordpress-theme/vogue\"\r\n        },\r\n        \"Kajabi\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"_kjb_session\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"kajabi\"\r\n            ],\r\n            \"website\": \"https://kajabi.com\"\r\n        },\r\n        \"Kakao\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"kakao.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.kakao\\\\.com/\"\r\n            ],\r\n            \"description\": \"Kakao platform provides various services such as Kakao Talk, Kakao Talk Channel, Kakao Story as well as Kakao Pay, Kakao Commerce, Kakao Page provided by the subsidiaries. Users can use all Kakao platform services with a united account called Kakao Account.\",\r\n            \"website\": \"https://developers.kakao.com/product\"\r\n        },\r\n        \"Kaltura\": {\r\n            \"cats\": [\r\n                14,\r\n                103\r\n            ],\r\n            \"js\": [\r\n                \"kalturaiframeembed\",\r\n                \"kgetkalturaembedsettings\",\r\n                \"kgetkalturaplayerlist\",\r\n                \"kplayer\",\r\n                \"restorekalturakdpcallback\"\r\n            ],\r\n            \"scripts\": [\r\n                \"kalturaplayer\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"api\\\\.kaltura\\\\.(?:nordu\\\\.net|com)/\"\r\n            ],\r\n            \"description\": \"Kaltura is a video content management platform that allows users to upload, manage, share, publish, and stream videos.\",\r\n            \"website\": \"https://corp.kaltura.com\"\r\n        },\r\n        \"Kameleoon\": {\r\n            \"cats\": [\r\n                74\r\n            ],\r\n            \"cookies\": {\r\n                \"kameleoonvisitorcode\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"kameleoon.gatherer.script_version\",\r\n                \"kameleoonendloadtime\",\r\n                \"kameleoons\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.kameleoon\\\\.\\\\w+/kameleoon\\\\.js\"\r\n            ],\r\n            \"description\": \"Kameleoon is a personalisation technology platform for real-time omnichannel optimisation and conversion.\",\r\n            \"website\": \"https://kameleoon.com/\"\r\n        },\r\n        \"Kamva\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"kamva\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.mykamva\\\\.ir\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"[ck]amva\"\r\n                ]\r\n            },\r\n            \"website\": \"https://kamva.ir\"\r\n        },\r\n        \"Kapix Studio\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"__initial_state__\",\r\n                \"kapixversion\"\r\n            ],\r\n            \"implies\": [\r\n                \"TypeScript\",\r\n                \"Vite\"\r\n            ],\r\n            \"description\": \"Kapix Studio is a no-code platform that lets anyone build web apps without writing any code.\",\r\n            \"website\": \"https://studio.kapix.fr\"\r\n        },\r\n        \"Kapture CRM\": {\r\n            \"cats\": [\r\n                52,\r\n                53\r\n            ],\r\n            \"js\": [\r\n                \"kap_chat_js\",\r\n                \"kapchat\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.kapturecrm\\\\.com/.+\\\\?ver=([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Kapture CRM is an enterprise-grade SaaS-based customer support automation platform.\",\r\n            \"website\": \"https://www.kapturecrm.com\"\r\n        },\r\n        \"Karma\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"karma.vars.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"karma\\\\.mdpcdn\\\\.com\"\r\n            ],\r\n            \"implies\": [\r\n                \"Node.js\"\r\n            ],\r\n            \"description\": \"Karma is a test runner for JavaScript that runs on Node.js.\",\r\n            \"website\": \"https://karma-runner.github.io\"\r\n        },\r\n        \"Karte\": {\r\n            \"cats\": [\r\n                74,\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"__karte_live\",\r\n                \"__karte_loaded\",\r\n                \"__karte_rewrite_admin_config\",\r\n                \"__karte_tracker\"\r\n            ],\r\n            \"description\": \"Karte is a customer engagement and marketing automation platform that enables businesses to understand their customers, deliver personalised experiences, and optimise marketing strategies.\",\r\n            \"website\": \"https://karte.io\"\r\n        },\r\n        \"Kartra\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"init_kartra_tracking\",\r\n                \"kartra_tracking_loaded\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"app\\\\.kartra\\\\.com\"\r\n            ],\r\n            \"description\": \"Kartra is an online business platform that offers marketing and sales tools.\",\r\n            \"website\": \"https://home.kartra.com\"\r\n        },\r\n        \"Kasada\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"cookies\": {\r\n                \"kp_uidz\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"kpsdk.configure\"\r\n            ],\r\n            \"description\": \"Kasada is a cybersecurity company that provides a platform to protect websites and web applications from bot attacks and malicious activities.\",\r\n            \"website\": \"https://www.kasada.io\"\r\n        },\r\n        \"Keap\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.infusionsoft\\\\.com/\"\r\n            ],\r\n            \"description\": \"Keap offers an email marketing and sales platform for small businesses, including products to manage customers, customer relationship management, marketing, and ecommerce.\",\r\n            \"website\": \"https://keap.com\"\r\n        },\r\n        \"Keen Delivery\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Keen Delivery is a Dutch shipping platform \",\r\n            \"website\": \"https://www.keendelivery.com\"\r\n        },\r\n        \"Keen-Slider\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"keenslider\"\r\n            ],\r\n            \"description\": \"Keen-Slider is a free library agnostic touch slider with native touch/swipe behavior.\",\r\n            \"website\": \"https://keen-slider.io\"\r\n        },\r\n        \"Kemal\": {\r\n            \"cats\": [\r\n                18,\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"kemal\"\r\n            },\r\n            \"website\": \"https://kemalcr.com\"\r\n        },\r\n        \"Kendo UI\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"js\": [\r\n                \"kendo\",\r\n                \"kendo.version\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]*\\\\s+href=[^\\u003e]*styles/kendo\\\\.common(?:\\\\.min)?\\\\.css[^\\u003e]*/\\u003e\"\r\n            ],\r\n            \"implies\": [\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"Kendo UI is a HTML5 user interface framework for building interactive and high-performance websites and applications.\",\r\n            \"website\": \"https://www.telerik.com/kendo-ui\"\r\n        },\r\n        \"Kentico CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"cmscookielevel\": \"\",\r\n                \"cmspreferredculture\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"cms.application\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/cmspages/getresource\\\\.ashx\",\r\n                \"/kentico\\\\.resource\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"kentico cms ([\\\\d.r]+ \\\\(build [\\\\d.]+\\\\))\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"Kentico CMS is a web content management system for building websites, online stores, intranets, and Web 2.0 community sites.\",\r\n            \"website\": \"https://www.kentico.com\",\r\n            \"cpe\": \"cpe:2.3:a:kentico:kentico_cms:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Keptify\": {\r\n            \"cats\": [\r\n                98\r\n            ],\r\n            \"js\": [\r\n                \"_keptify.version\",\r\n                \"keptify_base_url\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"app\\\\.keptify\\\\.com/\"\r\n            ],\r\n            \"description\": \"Keptify helps ecommerce sites of any size to increase sales and conversion rates by providing visitors with a personalised shopping experience.\",\r\n            \"website\": \"https://keptify.com\"\r\n        },\r\n        \"Kerberos\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"headers\": {\r\n                \"www-authenticate\": \"^kerberos\"\r\n            },\r\n            \"description\": \"Kerberos is an authentication method commonly used by Windows servers\",\r\n            \"website\": \"https://tools.ietf.org/html/rfc4559\"\r\n        },\r\n        \"Kestrel\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^kestrel\"\r\n            },\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"website\": \"https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel\"\r\n        },\r\n        \"Ketch\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.ketchcdn\\\\.com/\"\r\n            ],\r\n            \"description\": \"Ketch is a data control platform that manages compliance with privacy regulations.\",\r\n            \"website\": \"https://www.ketch.com\"\r\n        },\r\n        \"Kevel\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"ados\",\r\n                \"adosresults\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"adzerk\\\\.net/\"\r\n            ],\r\n            \"description\": \"Kevel (formerly Adzerk) is a developer of ad-serving APIs to help developers build server-side ad platforms.\",\r\n            \"website\": \"https://www.kevel.com\"\r\n        },\r\n        \"KeyCDN\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^keycdn-engine$\"\r\n            },\r\n            \"description\": \"KeyCDN is a content delivery network (CDN).\",\r\n            \"website\": \"https://www.keycdn.com\"\r\n        },\r\n        \"Keybase\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"description\": \"Keybase is for keeping everyone's chats and files safe, from families to communities to companies. MacOS, Windows, Linux, iPhone, and Android.\",\r\n            \"website\": \"https://keybase.io/\"\r\n        },\r\n        \"Kibana\": {\r\n            \"cats\": [\r\n                29,\r\n                25\r\n            ],\r\n            \"headers\": {\r\n                \"kbn-name\": \"kibana\",\r\n                \"kbn-version\": \"^([\\\\d.]+)$\\\\;version:\\\\1\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003ctitle\\u003ekibana\\u003c/title\\u003e\"\r\n            ],\r\n            \"implies\": [\r\n                \"Elasticsearch\",\r\n                \"Node.js\"\r\n            ],\r\n            \"description\": \"Kibana is an open-source data visualisation dashboard for Elasticsearch. It provides visualisation capabilities on top of the content indexed on an Elasticsearch cluster. Users can create bar, line and scatter plots, or pie charts and maps on top of large volumes of data.\",\r\n            \"website\": \"https://www.elastic.co/products/kibana\",\r\n            \"cpe\": \"cpe:2.3:a:elasticsearch:kibana:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Kibo Commerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn-tp\\\\d+\\\\.mozu\\\\.com\"\r\n            ],\r\n            \"description\": \"Kibo Commerce is a enterprise ecommerce platform  that offers a cloud-based, end-to-end commerce solution for retailers and branded manufacturers.\",\r\n            \"website\": \"https://kibocommerce.com\"\r\n        },\r\n        \"Kibo Personalization\": {\r\n            \"cats\": [\r\n                76,\r\n                74\r\n            ],\r\n            \"js\": [\r\n                \"baynoteapi\",\r\n                \"baynotejsversion\",\r\n                \"certona.recommendations\",\r\n                \"certonarecommendations\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.baynote\\\\.net\",\r\n                \"\\\\.certona\\\\.net\"\r\n            ],\r\n            \"description\": \"Kibo Personalization is a omnichannel personalisation software powered by machine learning to deliver individualized customer experiences and powered by Monetate and Certona.\",\r\n            \"website\": \"https://kibocommerce.com/personalization-software\"\r\n        },\r\n        \"Kicksite\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"cookies\": {\r\n                \"_kicksite_session\": \"\"\r\n            },\r\n            \"description\": \"Kicksite is a gym and martial arts member management software with attendance tracking, automated billing, free texting, lead capture forms and more.\",\r\n            \"website\": \"https://kicksite.com\"\r\n        },\r\n        \"Kiliba\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"description\": \"Kiliba has developed a module that automates the marketing process from creating an email to distributing it.\",\r\n            \"website\": \"https://en.kiliba.com\"\r\n        },\r\n        \"Kindful\": {\r\n            \"cats\": [\r\n                111\r\n            ],\r\n            \"js\": [\r\n                \"bloomerang.version\",\r\n                \"bloomerangloadstarted\",\r\n                \"kindful_gtag\",\r\n                \"kindfulpaymentsconnect\"\r\n            ],\r\n            \"description\": \"Kindful is a cloud-based donor management and fundraising software and database designed for nonprofit organisations.\",\r\n            \"website\": \"https://kindful.com\"\r\n        },\r\n        \"KineticJS\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"kinetic\",\r\n                \"kinetic.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"kinetic(?:-v?([\\\\d.]+))?(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"website\": \"https://github.com/ericdrowell/KineticJS/\"\r\n        },\r\n        \"Kinsta\": {\r\n            \"cats\": [\r\n                62,\r\n                88\r\n            ],\r\n            \"headers\": {\r\n                \"x-kinsta-cache\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"WordPress\"\r\n            ],\r\n            \"website\": \"https://kinsta.com\"\r\n        },\r\n        \"Kirki Customizer Framework\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/kirki/\"\r\n            ],\r\n            \"description\": \"Kirki Customizer Framework is a toolkit allowing WordPress developers to use the Customizer and take advantage of its advanced features and flexibility by abstracting the code.\",\r\n            \"website\": \"https://kirki.org\"\r\n        },\r\n        \"Kitcart\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"implies\": [\r\n                \"Laravel\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"KitCart is a cloud-based solution that helps businesses build ecommerce stores, manage inventory, and more.\",\r\n            \"website\": \"https://kitcart.net\"\r\n        },\r\n        \"Kiwi Sizing\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"kiwisizing\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.static\\\\.kiwisizing\\\\.com/\"\r\n            ],\r\n            \"description\": \"Kiwi Sizing is a size chart and a recommender plugin on the Shopify platform.\",\r\n            \"website\": \"https://www.kiwisizing.com\"\r\n        },\r\n        \"Klarna Checkout\": {\r\n            \"cats\": [\r\n                41,\r\n                91\r\n            ],\r\n            \"cookies\": {\r\n                \"ku1-sid\": \"\",\r\n                \"ku1-vid\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"_klarnacheckout\",\r\n                \"klarnaonsiteservice\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.klarna(?:cdn|services)\\\\.(?:net|com)\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"\\\\.klarnaservices\\\\.com/lib\\\\.js\"\r\n            ],\r\n            \"description\": \"Klarna Checkout is a complete payment solution where Klarna handles a store's entire checkout.\",\r\n            \"website\": \"https://www.klarna.com/international/\"\r\n        },\r\n        \"Klaro\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"js\": [\r\n                \"klaro\",\r\n                \"klaroconfig\"\r\n            ],\r\n            \"description\": \"Klaro is a simple consent management platform and privacy tool.\",\r\n            \"website\": \"https://heyklaro.com\"\r\n        },\r\n        \"Klasha\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"klashaclient\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"klasha-integration\\\\.js\"\r\n            ],\r\n            \"description\": \"Klasha is a payment solution provider that handles a store's entire checkout.\",\r\n            \"website\": \"https://www.klasha.com/\"\r\n        },\r\n        \"Klaviyo\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"klaviyo\",\r\n                \"klaviyosubscribe\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"klaviyo\\\\.com\"\r\n            ],\r\n            \"description\": \"Klaviyo is an email marketing platform for online businesses.\",\r\n            \"website\": \"https://www.klaviyo.com/\"\r\n        },\r\n        \"Klevu\": {\r\n            \"cats\": [\r\n                29\r\n            ],\r\n            \"js\": [\r\n                \"klevu.version\",\r\n                \"klevu_apikey\",\r\n                \"klevu_layout\",\r\n                \"klevu_sessionid\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"js\\\\.klevu\\\\.\\\\w+/klevu-js-v([\\\\d.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Klevu is a highly advanced AI-Powered search solution for ecommerce platforms.\",\r\n            \"website\": \"https://www.klevu.com\"\r\n        },\r\n        \"KlickPages\": {\r\n            \"cats\": [\r\n                32,\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"klickart.analytics\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.klickpages\\\\.com\\\\.br/\"\r\n            ],\r\n            \"meta\": {\r\n                \"klickart:url\": []\r\n            },\r\n            \"description\": \"KlickPages is a landing page management software designed to help businesses execute email marketing campaigns and capture leads.\",\r\n            \"website\": \"https://klickpages.com.br\"\r\n        },\r\n        \"Klickly\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"analytics\\\\.klickly\\\\.com/pixel\\\\.js\\\\?v=([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Klickly is an invite-only, commission-based advertising platform.\",\r\n            \"website\": \"https://www.klickly.com\"\r\n        },\r\n        \"Knak\": {\r\n            \"cats\": [\r\n                75\r\n            ],\r\n            \"description\": \"Knak is a platform that provides customisable email and landing page templates to simplify the creation of visually appealing marketing campaigns.\",\r\n            \"website\": \"https://knak.com\"\r\n        },\r\n        \"Knockout.js\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"ko.version\"\r\n            ],\r\n            \"description\": \"Knockout.js is basically a library written in JavaScript, based on MVVM pattern that helps developers build rich and responsive websites.\",\r\n            \"website\": \"https://knockoutjs.com\"\r\n        },\r\n        \"Ko-fi\": {\r\n            \"cats\": [\r\n                5,\r\n                111\r\n            ],\r\n            \"js\": [\r\n                \"kofiwidget2\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"ko-fi\\\\.com/widgets\"\r\n            ],\r\n            \"description\": \"Ko-fi is an online platform that helps content creators get the financial support.\",\r\n            \"website\": \"https://ko-fi.com\"\r\n        },\r\n        \"Koa\": {\r\n            \"cats\": [\r\n                18,\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^koa$\"\r\n            },\r\n            \"implies\": [\r\n                \"Node.js\"\r\n            ],\r\n            \"website\": \"https://koajs.com\"\r\n        },\r\n        \"Koala\": {\r\n            \"cats\": [\r\n                10,\r\n                53\r\n            ],\r\n            \"js\": [\r\n                \"koalasdk\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.getkoala\\\\.com/\"\r\n            ],\r\n            \"description\": \"Koala is an analytical product with CRM features that helps businesses efficiently identify and track prospects, providing valuable insights and streamlining the sales process.\",\r\n            \"website\": \"https://getkoala.com/\"\r\n        },\r\n        \"Koala Framework\": {\r\n            \"cats\": [\r\n                1,\r\n                18\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!--[^\\u003e]+this website is powered by koala web framework cms\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^koala web framework cms\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://koala-framework.org\"\r\n        },\r\n        \"KobiMaster\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"kmgetsession\",\r\n                \"kmpageinfo\"\r\n            ],\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"website\": \"https://www.kobimaster.com.tr\"\r\n        },\r\n        \"Koha\": {\r\n            \"cats\": [\r\n                50\r\n            ],\r\n            \"js\": [\r\n                \"koha\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003ca href=\\\"/cgi-bin/koha/\",\r\n                \"\\u003cinput name=\\\"koha_login_context\\\" value=\\\"intranet\\\" type=\\\"hidden\\\"\\u003e\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^koha ([\\\\d.]+)$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Perl\"\r\n            ],\r\n            \"description\": \"Koha is an open-source Integrated Library System (ILS).\",\r\n            \"website\": \"https://koha-community.org/\",\r\n            \"cpe\": \"cpe:2.3:a:koha:koha:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Kohana\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"cookies\": {\r\n                \"kohanasession\": \"\"\r\n            },\r\n            \"headers\": {\r\n                \"x-powered-by\": \"kohana framework ([\\\\d.]+)\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://kohanaframework.org\",\r\n            \"cpe\": \"cpe:2.3:a:kohanaframework:kohana:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Koken\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"koken_referrer\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003c!--\\\\s+koken debugging\",\r\n                \"\\u003chtml lang=\\\"en\\\" class=\\\"k-source-essays k-lens-essays\\\"\\u003e\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"koken(?:\\\\.js\\\\?([\\\\d.]+)|/storage)\\\\;version:\\\\1\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"koken ([\\\\d.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://koken.me\"\r\n        },\r\n        \"Komodo CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^komodo cms\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://www.komodocms.com\"\r\n        },\r\n        \"Konduto\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"js\": [\r\n                \"getkondutoid\",\r\n                \"konduto\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.k-analytix\\\\.com\"\r\n            ],\r\n            \"description\": \"Konduto is a fraud detection service for ecommerce.\",\r\n            \"website\": \"https://www.konduto.com\"\r\n        },\r\n        \"Kong\": {\r\n            \"cats\": [\r\n                64\r\n            ],\r\n            \"headers\": {\r\n                \"via\": \"^kong/([\\\\d\\\\.]+)(?:.+)?$\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"Kong is an open-source API gateway and platform that acts as middleware between compute clients and the API-centric applications.\",\r\n            \"website\": \"https://konghq.com\"\r\n        },\r\n        \"Kontent.ai\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.kc-usercontent\\\\.com\"\r\n            },\r\n            \"description\": \"Kontent.ai is a SaaS-based modular content platform.\",\r\n            \"website\": \"https://kontent.ai\"\r\n        },\r\n        \"Koobi\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!--[^k\\u003e-]+koobi ([a-z\\\\d.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"koobi\"\r\n                ]\r\n            },\r\n            \"website\": \"https://dream4.de/cms\"\r\n        },\r\n        \"Kooboo CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"x-kooboocms-version\": \"^(.+)$\\\\;version:\\\\1\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"/kooboo\"\r\n            ],\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"website\": \"https://kooboo.com\"\r\n        },\r\n        \"Kooomo\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"kooomo(?: v([\\\\d.]+))?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Kooomo is a SaaS ecommerce platform with a focus on localisation and internationalisation.\",\r\n            \"website\": \"https://www.kooomo.com\"\r\n        },\r\n        \"Kotisivukone\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"kotisivukone(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"website\": \"https://www.kotisivukone.fi\"\r\n        },\r\n        \"Kotlin\": {\r\n            \"cats\": [\r\n                27\r\n            ],\r\n            \"description\": \"Kotlin is a general purpose, free, open-source, statically typed “pragmatic” programming language initially designed for the JVM (Java Virtual Machine) and Android that combines object-oriented and functional programming features.\",\r\n            \"website\": \"https://kotlinlang.org\",\r\n            \"cpe\": \"cpe:2.3:a:jetbrains:kotlin:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Kount\": {\r\n            \"cats\": [\r\n                10,\r\n                16\r\n            ],\r\n            \"js\": [\r\n                \"ka.clientsdk\",\r\n                \"ka.collectdata\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"shopify\\\\.kount\\\\.net/js\"\r\n            ],\r\n            \"description\": \"Kount is a suite of fraud detection and prevention solutions for ecommerce businesses.\",\r\n            \"website\": \"https://kount.com\"\r\n        },\r\n        \"Ktor\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^ktor/debug$\",\r\n                \"x-engine\": \"^ktor$\"\r\n            },\r\n            \"implies\": [\r\n                \"Kotlin\"\r\n            ],\r\n            \"description\": \"Ktor is a Kotlin framework that allow developers to write asynchronous clients and servers applications, in Kotlin.\",\r\n            \"website\": \"https://ktor.io\",\r\n            \"cpe\": \"cpe:2.3:a:jetbrains:ktor:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Kubernetes Dashboard\": {\r\n            \"cats\": [\r\n                47\r\n            ],\r\n            \"website\": \"https://kubernetes.io/\",\r\n            \"cpe\": \"cpe:2.3:a:kubernetes:kubernetes:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Kudobuzz\": {\r\n            \"cats\": [\r\n                90\r\n            ],\r\n            \"js\": [\r\n                \"kudos.apiserver\"\r\n            ],\r\n            \"implies\": [\r\n                \"Svelte\"\r\n            ],\r\n            \"description\": \"Kudobuzz is a tool for collecting and managing customer reviews.\",\r\n            \"website\": \"https://kudobuzz.com/\"\r\n        },\r\n        \"KueskiPay\": {\r\n            \"cats\": [\r\n                41,\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"kueskypushhead\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.kueskipay\\\\.com\"\r\n            ],\r\n            \"implies\": [\r\n                \"Cart Functionality\"\r\n            ],\r\n            \"description\": \"KueskiPay is a buy-now-pay-later solution.\",\r\n            \"website\": \"https://kueskipay.com/\"\r\n        },\r\n        \"Kustomer\": {\r\n            \"cats\": [\r\n                52,\r\n                53\r\n            ],\r\n            \"js\": [\r\n                \"kustomer\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.kustomerapp\\\\.com\"\r\n            ],\r\n            \"description\": \"Kustomer is a CRM platform.\",\r\n            \"website\": \"https://www.kustomer.com/\"\r\n        },\r\n        \"Kwai pixel\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"kwaianalyticsobject\",\r\n                \"kwaiq\"\r\n            ],\r\n            \"description\": \"Kwai is a social network for short videos and trends.\",\r\n            \"website\": \"https://www.kwai.com\"\r\n        },\r\n        \"LEPTON\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"lepton\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://www.lepton-cms.org\",\r\n            \"cpe\": \"cpe:2.3:a:lepton-cms:lepton:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"LGC\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^lgc$\"\r\n                ]\r\n            },\r\n            \"description\": \"LGC is a modern CMS designed to improve the management of your website.\",\r\n            \"website\": \"https://luigigabrieleconti.com\"\r\n        },\r\n        \"LINE Login\": {\r\n            \"cats\": [\r\n                69\r\n            ],\r\n            \"js\": [\r\n                \"constants.authorization_request_url\"\r\n            ],\r\n            \"description\": \"LINE Login is an API that allows you to implement a login function into your services, regardless of whether they are web apps or native apps.\",\r\n            \"website\": \"https://developers.line.biz/en/services/line-login/\"\r\n        },\r\n        \"LKQD\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"lkqd_http_response\",\r\n                \"lkqdcall\",\r\n                \"lkqderrorcount\",\r\n                \"lkqdsettings\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.lkqd\\\\.net\"\r\n            ],\r\n            \"description\": \"LKQD is a video advertising platform that enables publishers to serve video ads across multiple devices and formats.\",\r\n            \"website\": \"https://wiki.lkqd.com\"\r\n        },\r\n        \"LOU\": {\r\n            \"cats\": [\r\n                58\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.louassist\\\\.com*\"\r\n            ],\r\n            \"description\": \"LOU is a Digital Adoption Platform that streamlines user onboarding and training.\",\r\n            \"website\": \"https://www.louassist.com\"\r\n        },\r\n        \"Lagoon\": {\r\n            \"cats\": [\r\n                62\r\n            ],\r\n            \"headers\": {\r\n                \"x-lagoon\": \"\"\r\n            },\r\n            \"description\": \"The Open Source Application Delivery Platform for Kubernetes.\",\r\n            \"website\": \"https://lagoon.sh/\"\r\n        },\r\n        \"Landbot\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"initlandbot\",\r\n                \"landbotlivechat\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.landbot\\\\.io/.*-([\\\\d\\\\.]+)\\\\.js\"\r\n            ],\r\n            \"description\": \"Landbot is a no code conversational chatbots, conversational landing pages and website, interactive survey and lead generation bot.\",\r\n            \"website\": \"https://landbot.io\"\r\n        },\r\n        \"LandingPress\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/landingpress-wp/.+script\\\\.min\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"LandingPress is a WordPress theme.\",\r\n            \"website\": \"https://landingpress.net\"\r\n        },\r\n        \"LangShop\": {\r\n            \"cats\": [\r\n                100,\r\n                89\r\n            ],\r\n            \"js\": [\r\n                \"langshop\",\r\n                \"langshopconfig\",\r\n                \"langshopsdk\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.langshop\\\\.app/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"LangShop is an app for translating Shopify stores.\",\r\n            \"website\": \"https://langshop.io\"\r\n        },\r\n        \"Laravel\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"cookies\": {\r\n                \"laravel_session\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"laravel\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Laravel is a free, open-source PHP web framework.\",\r\n            \"website\": \"https://laravel.com\",\r\n            \"cpe\": \"cpe:2.3:a:laravel:laravel:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Laravel Echo\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"echo.connector\",\r\n                \"echo.connector\"\r\n            ],\r\n            \"implies\": [\r\n                \"Laravel\"\r\n            ],\r\n            \"description\": \"Laravel Echo is a JavaScript library that makes it painless to subscribe to channels and listen for events broadcast by Laravel.\",\r\n            \"website\": \"https://laravel.com/docs/broadcasting#client-side-installation\"\r\n        },\r\n        \"Laterpay\": {\r\n            \"cats\": [\r\n                41,\r\n                91\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"https?://connectormwi\\\\.laterpay\\\\.net/([0-9.]+)[a-za-z-]*/live/[\\\\w-]+\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"meta\": {\r\n                \"laterpay:connector:callbacks:on_user_has_access\": [\r\n                    \"deobfuscatetext\"\r\n                ]\r\n            },\r\n            \"description\": \"Laterpay is a service that simplifies payments on the Internet. In addition to the classic immediate purchase option, Laterpay also allows you to buy digital content such as articles or videos now and pay later.\",\r\n            \"website\": \"https://www.laterpay.net/\"\r\n        },\r\n        \"LatitudePay\": {\r\n            \"cats\": [\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"checkout.enabledpayments.latitudepay\",\r\n                \"wc_ga_pro.available_gateways.latitudepay\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.latitudepayapps\\\\.com/\"\r\n            ],\r\n            \"description\": \"LatitudePay is an interest-free, buy now, pay later solution.\",\r\n            \"website\": \"https://www.latitudepay.com\"\r\n        },\r\n        \"LaunchDarkly\": {\r\n            \"cats\": [\r\n                85\r\n            ],\r\n            \"js\": [\r\n                \"ddc.ws.state\",\r\n                \"launchdarkly\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:\\\\.|\\\\-)launchdarkly(?:\\\\.com/|\\\\-sdk\\\\.)\"\r\n            ],\r\n            \"description\": \"LaunchDarkly is a continuous delivery and feature flags as a service platform that integrates into a company's current development cycle.\",\r\n            \"website\": \"https://launchdarkly.com\"\r\n        },\r\n        \"Launchrock\": {\r\n            \"cats\": [\r\n                51,\r\n                75\r\n            ],\r\n            \"js\": [\r\n                \"lrignition\",\r\n                \"lrignition\",\r\n                \"lrloadedjs\",\r\n                \"lrsiterenderingdata.apiendpoint\",\r\n                \"lrsitesettingasboolean\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"builder\\\\.launchrock\\\\.com\"\r\n            ],\r\n            \"description\": \"Launchrock is an online tool designed to help capture email addresses and create online product launching events.\",\r\n            \"website\": \"https://www.launchrock.com\"\r\n        },\r\n        \"LayBuy\": {\r\n            \"cats\": [\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"checkout.enabledpayments.laybuy\",\r\n                \"laybuyenablecart\",\r\n                \"laybuyhelper\",\r\n                \"laybuymoneyoverides\",\r\n                \"wc_ga_pro.available_gateways.laybuy\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/woo-laybuy/\",\r\n                \"\\\\.laybuy\\\\.com/\"\r\n            ],\r\n            \"description\": \"Laybuy is a payment service that lets you receive your purchase now and spread the total cost over 6 weekly automatic payments interest free.\",\r\n            \"website\": \"https://www.laybuy.com\"\r\n        },\r\n        \"LayoutHub\": {\r\n            \"cats\": [\r\n                100,\r\n                51\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"app\\\\.layouthub\\\\.com/shopify/layouthub\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"LayoutHub is an easy page builder that helps merchants quickly set up an online store with any kind of page type by using our library of pre-designed layouts and blocks.\",\r\n            \"website\": \"https://layouthub.com\"\r\n        },\r\n        \"Layui\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"js\": [\r\n                \"layui.v\"\r\n            ],\r\n            \"description\": \"Layui is an open-source modular front-end UI component library.\",\r\n            \"website\": \"https://layui.gitee.io\"\r\n        },\r\n        \"Lazada\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"aplus-auto-exp\": [\r\n                    \"lzdhome\\\\.desktop\\\\.\"\r\n                ]\r\n            },\r\n            \"description\": \"Lazada is a B2B2C marketplace model in which so-called merchants sell goods on their platform.\",\r\n            \"website\": \"https://www.lazada.com\"\r\n        },\r\n        \"LazySizes\": {\r\n            \"cats\": [\r\n                59,\r\n                92\r\n            ],\r\n            \"js\": [\r\n                \"lazysizes\",\r\n                \"lazysizesconfig\"\r\n            ],\r\n            \"description\": \"LazySizes is a JavaScript library used to delay the loading of images (iframes, scripts, etc) until they come into view.\",\r\n            \"website\": \"https://github.com/aFarkas/lazysizes\"\r\n        },\r\n        \"LazySizes unveilhooks plugin\": {\r\n            \"cats\": [\r\n                59,\r\n                92\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"ls\\\\.unveilhooks(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"description\": \"LazySizes unveilhooks plugin extends lazySizes to lazyload scripts/widgets, background images, styles and video/audio elements.\",\r\n            \"website\": \"https://github.com/aFarkas/lazysizes/tree/gh-pages/plugins/unveilhooks\"\r\n        },\r\n        \"LeadChat\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?://|\\\\.)chatsystem\\\\.io/\"\r\n            ],\r\n            \"description\": \"LeadChat offers live-operators and CRM solutions that utilise LiveChat chat software to facilitate real-time engagement with website visitors for businesses.\",\r\n            \"website\": \"https://www.leadchat.com\"\r\n        },\r\n        \"Leadfeeder\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"ldfdr.gettracker\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.(?:lfeeder|leadfeeder)\\\\.com\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"\\\\.leadfeeder\\\\.com/\"\r\n            ],\r\n            \"description\": \"Leadfeeder is a B2B visitor identification software that tracks and identifies companies that visit your website.\",\r\n            \"website\": \"https://www.leadfeeder.com\"\r\n        },\r\n        \"Leadinfo\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"globalleadinfonamespace\",\r\n                \"leadinfo\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.leadinfo\\\\.net\"\r\n            ],\r\n            \"description\": \"Leadinfo is a lead generation software that enables you to recognise B2B website visitors.\",\r\n            \"website\": \"https://www.leadinfo.com\"\r\n        },\r\n        \"Leadster\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"neurolead.convoscript\",\r\n                \"neurolead.elchatbot\",\r\n                \"neuroleadlanguage\"\r\n            ],\r\n            \"description\": \"Leadster is a conversation marketing plataform based on chatbot.\",\r\n            \"website\": \"https://leadster.com.br\"\r\n        },\r\n        \"Leaflet\": {\r\n            \"cats\": [\r\n                35\r\n            ],\r\n            \"js\": [\r\n                \"l.distancegrid\",\r\n                \"l.posanimation\",\r\n                \"l.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"leaflet.{0,32}\\\\.js(?!.+shopify)\"\r\n            ],\r\n            \"description\": \"Leaflet is the open-source JavaScript library for mobile-friendly interactive maps.\",\r\n            \"website\": \"https://leafletjs.com\"\r\n        },\r\n        \"Leaflet platform\": {\r\n            \"cats\": [\r\n                100,\r\n                74\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"scripts\\\\.leaflet\\\\.co/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Leaflet is the price testing platform for Shopify.\",\r\n            \"website\": \"https://join.leaflet.co\"\r\n        },\r\n        \"Leanplum\": {\r\n            \"cats\": [\r\n                32,\r\n                74\r\n            ],\r\n            \"js\": [\r\n                \"leanplum\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"npm/leanplum-sdk\\\\@([\\\\d.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Leanplum is a multi-channel messaging and campaign orchestration platform.\",\r\n            \"website\": \"https://www.leanplum.com\"\r\n        },\r\n        \"LearnDash\": {\r\n            \"cats\": [\r\n                21,\r\n                87\r\n            ],\r\n            \"description\": \"LearnDash is a WordPress plugin that enables the creation and management of online courses, quizzes, and educational content within a website.\",\r\n            \"website\": \"https://www.learndash.com\"\r\n        },\r\n        \"LearnWorlds\": {\r\n            \"cats\": [\r\n                21\r\n            ],\r\n            \"js\": [\r\n                \"lwclient.ebooks\",\r\n                \"lwsettings.deactive_components\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.mycourse\\\\.app/v([\\\\d\\\\.]+)/\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"LearnWorlds is a powerful yet lightweight, user-friendly, white-labeled cloud-based LMS ideal for versatile employee training.\",\r\n            \"website\": \"https://www.learnworlds.com\"\r\n        },\r\n        \"Leaseweb\": {\r\n            \"cats\": [\r\n                63,\r\n                88\r\n            ],\r\n            \"description\": \"Leaseweb is an Infrastructure-as-a-Service (IaaS) provider offering dedicated servers, CDN, cloud hosting and hybrid cloud on a global network.\",\r\n            \"website\": \"https://www.leaseweb.com\"\r\n        },\r\n        \"Lede\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"ledechartbeatviews\",\r\n                \"ledeengagement\",\r\n                \"ledeengagementreset\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003ca [^\\u003e]*href=\\\"[^\\\"]+joinlede.com\"\r\n            ],\r\n            \"meta\": {\r\n                \"og:image\": [\r\n                    \"https?\\\\:\\\\/\\\\/lede-admin\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"WordPress\",\r\n                \"WordPress VIP\"\r\n            ],\r\n            \"description\": \"Lede is a publishing platform and growth program designed to support journalism startups and news media.\",\r\n            \"website\": \"https://joinlede.com/\"\r\n        },\r\n        \"Legal Monster\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"js\": [\r\n                \"legal.__version__\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.legalmonster\\\\.com/\"\r\n            ],\r\n            \"description\": \"Legal Monster is a consent and privacy management solution, which helps businesses maintain compliance with ePrivacy, marketing requirements and General Data Protection Regulation (GDPR).\",\r\n            \"website\": \"https://www.legalmonster.com\"\r\n        },\r\n        \"Lemon Squeezy\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"lemonsqueezy\",\r\n                \"lemonsqueezyaffiliateconfig\"\r\n            ],\r\n            \"description\": \"Lemon Squeezy is a platform designed for SaaS businesses, providing functionalities such as payment processing, subscription management, global tax compliance, fraud prevention, multi-currency support, failed payment recovery, and integration with PayPal, with the aim of facilitating the operational management of software businesses.\",\r\n            \"website\": \"https://www.lemonsqueezy.com\"\r\n        },\r\n        \"Lengow\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.lengow\\\\.com/\"\r\n            ],\r\n            \"description\": \"Lengow is an ecommerce automation solution that enables brands and retailers to integrate, structure and optimise their product content across all distribution channels: marketplaces, comparison shopping engines, affiliate platforms, display and retargeting.\",\r\n            \"website\": \"https://www.lengow.com\"\r\n        },\r\n        \"Lenis\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"lenisversion\"\r\n            ],\r\n            \"description\": \"Lenis is a smooth scroll library to normalise the scrolling experience across devices.\",\r\n            \"website\": \"https://lenis.studiofreight.com\"\r\n        },\r\n        \"Leptos\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"js\": [\r\n                \"__leptos_pending_resources\",\r\n                \"__leptos_resolved_resources\",\r\n                \"__leptos_resource_resolvers\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!--hk=_.*\"\r\n            ],\r\n            \"scripts\": [\r\n                \"export function microtask\\\\(f\\\\)\\\\;confidence:75\"\r\n            ],\r\n            \"implies\": [\r\n                \"Rust\"\r\n            ],\r\n            \"description\": \"Leptos is a full-stack, isomorphic Rust web framework leveraging fine-grained reactivity to build declarative user interfaces.\",\r\n            \"website\": \"https://leptos.dev\"\r\n        },\r\n        \"Less\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]+ rel=\\\"stylesheet/less\\\"\"\r\n            ],\r\n            \"website\": \"https://lesscss.org\"\r\n        },\r\n        \"Let's Encrypt\": {\r\n            \"cats\": [\r\n                70\r\n            ],\r\n            \"description\": \"Let's Encrypt is a free, automated, and open certificate authority.\",\r\n            \"website\": \"https://letsencrypt.org/\"\r\n        },\r\n        \"Letro\": {\r\n            \"cats\": [\r\n                90,\r\n                96\r\n            ],\r\n            \"js\": [\r\n                \"__letrougcgadget\",\r\n                \"letrougcset\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"letro\\\\.jp/tags\"\r\n            ],\r\n            \"description\": \"Letro is a UGC and review tool for ecommerce platforms.\",\r\n            \"website\": \"https://service.aainc.co.jp/product/letro/\"\r\n        },\r\n        \"Levar\": {\r\n            \"cats\": [\r\n                105\r\n            ],\r\n            \"js\": [\r\n                \"levar.session_info\",\r\n                \"levar_onload_variant_id\",\r\n                \"levaractivationhelper\"\r\n            ],\r\n            \"description\": \"Levar specialises in 3D visualisation technology for ecommerce stores.\",\r\n            \"website\": \"https://levar.io\"\r\n        },\r\n        \"Level 5\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"l5_inventory_url\"\r\n            ],\r\n            \"description\": \"Level 5 is a page builder constructed with WordPress and powered with WP Engine hosting featuring advanced caching and performance optimisation.\",\r\n            \"website\": \"https://level5advertising.com/websites/\"\r\n        },\r\n        \"Lever\": {\r\n            \"cats\": [\r\n                101\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.lever\\\\.co\"\r\n            },\r\n            \"description\": \"Lever is a software company headquartered in San Francisco, California and Toronto, Canada that provides an applicant tracking system for hiring.\",\r\n            \"website\": \"https://www.lever.co\"\r\n        },\r\n        \"Lexity\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.lexity\\\\.com/\"\r\n            ],\r\n            \"description\": \"Lexity is the one-stop-shop of ecommerce services for SMBs.\",\r\n            \"website\": \"https://lexity.com\"\r\n        },\r\n        \"Liberapay\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//liberapay\\\\.com/\"\r\n            ],\r\n            \"description\": \"Liberapay is a non-profit organisation subscription payment platform.\",\r\n            \"website\": \"https://liberapay.com/\"\r\n        },\r\n        \"Libravatar\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"description\": \"Libravatar is a service for fetching avatar images for e-mail addresses and OpenIDs in a privacy respecting way.\",\r\n            \"website\": \"https://www.libravatar.org/\"\r\n        },\r\n        \"Lieferando\": {\r\n            \"cats\": [\r\n                1,\r\n                93\r\n            ],\r\n            \"js\": [\r\n                \"tealium.pagedata.country\"\r\n            ],\r\n            \"description\": \"Lieferando is an online portal for food orders.\",\r\n            \"website\": \"https://www.lieferando.de\"\r\n        },\r\n        \"Liferay\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"liferay\"\r\n            ],\r\n            \"headers\": {\r\n                \"liferay-portal\": \"[a-z\\\\s]+([\\\\d.]+)\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"description\": \"Liferay is an open-source company that provides free documentation and paid professional service to users of its software.\",\r\n            \"website\": \"https://www.liferay.com/\",\r\n            \"cpe\": \"cpe:2.3:a:liferay:liferay_portal:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Lift\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"headers\": {\r\n                \"x-lift-version\": \"(.+)\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Scala\"\r\n            ],\r\n            \"website\": \"https://liftweb.net\",\r\n            \"cpe\": \"cpe:2.3:a:liftweb:lift:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"LightMon Engine\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"lm_online\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003c!-- lightmon engine copyright lightmon\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"lightmon engine\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://lightmon.ru\"\r\n        },\r\n        \"Lightbox\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"lightbox.$lightbox\",\r\n                \"lightbox.activeimage\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"lightbox(?:-plus-jquery)?.{0,32}\\\\.js\"\r\n            ],\r\n            \"description\": \"Lightbox is small javascript library used to overlay images on top of the current page.\",\r\n            \"website\": \"https://lokeshdhakar.com/projects/lightbox2/\",\r\n            \"cpe\": \"cpe:2.3:a:lightbox_photo_gallery_project:lightbox_photo_gallery:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Lightning\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"lightningopt.header_scrool\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/lightning(?:-pro)?/.+lightning\\\\.min\\\\.js(?:.+ver=([\\\\d\\\\.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Lightning is a very simple and easy to customize WordPress theme which is based on the Bootstrap.\",\r\n            \"website\": \"https://lightning.vektor-inc.co.jp/en/\"\r\n        },\r\n        \"Lightspeed eCom\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- \\\\[start\\\\] 'blocks/head\\\\.rain' --\\u003e\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"http://assets\\\\.webshopapp\\\\.com\"\r\n            ],\r\n            \"website\": \"https://www.lightspeedhq.com/products/ecommerce/\"\r\n        },\r\n        \"LimeChat\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.limechat\\\\.ai/\"\r\n            ],\r\n            \"description\": \"LimeChat is India's first level-3 AI chatbot company.\",\r\n            \"website\": \"https://www.limechat.ai\"\r\n        },\r\n        \"LimeSpot\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"limespot.cartitems\",\r\n                \"limespot.recommendations\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.personalizer\\\\.io/\"\r\n            ],\r\n            \"description\": \"LimeSpot is an AI-powered personalisation platform for marketers and ecommerce professionals.\",\r\n            \"website\": \"https://www.limespot.com\"\r\n        },\r\n        \"Limepay\": {\r\n            \"cats\": [\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"limepayidentity\",\r\n                \"wc_ga_pro.available_gateways.limepay\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/limepay-installment-show\\\\.js\",\r\n                \"/wp-content/plugins/limepay-v\\\\d+/\"\r\n            ],\r\n            \"description\": \"Limepay is a buy now, pay later platform that's fully integrated with the merchant's payment platform.\",\r\n            \"website\": \"https://www.limepay.com.au\"\r\n        },\r\n        \"Limit Login Attempts Reloaded\": {\r\n            \"cats\": [\r\n                87,\r\n                16\r\n            ],\r\n            \"description\": \"Limit Login Attempts Reloaded stops brute-force attacks and optimizes your site performance by limiting the number of login attempts that are possible through the normal login as well as XMLRPC, Woocommerce and custom login pages.\",\r\n            \"website\": \"https://www.limitloginattempts.com\"\r\n        },\r\n        \"Linen\": {\r\n            \"cats\": [\r\n                2\r\n            ],\r\n            \"js\": [\r\n                \"__next_data__.props.pageprops.currentcommunity.logourl\"\r\n            ],\r\n            \"implies\": [\r\n                \"Elixir\",\r\n                \"TypeScript\"\r\n            ],\r\n            \"description\": \"Linen is a real-time chat platform built for communities.\",\r\n            \"website\": \"https://www.linen.dev\"\r\n        },\r\n        \"LinkMink\": {\r\n            \"cats\": [\r\n                10,\r\n                71\r\n            ],\r\n            \"js\": [\r\n                \"linkmink\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.linkmink\\\\.com/lm-js/([\\\\d\\\\.]+)/\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"LinkMink is an affiliate tracking and management for SaaS companies.\",\r\n            \"website\": \"https://linkmink.com\"\r\n        },\r\n        \"Linkedin Ads\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"px\\\\.ads\\\\.linkedin\\\\.com\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003cimg [^\\u003e]*src=\\\"[^/]*//[^/]*px\\\\.ads\\\\.linkedin\\\\.com\"\r\n            ],\r\n            \"description\": \"Linkedin Ads is a paid marketing tool that offers access to Linkedin social networks through various sponsored posts and other methods.\",\r\n            \"website\": \"https://business.linkedin.com/marketing-solutions/ads\"\r\n        },\r\n        \"Linkedin Insight Tag\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"_linkedin_data_partner_id\",\r\n                \"_linkedin_partner_id\",\r\n                \"oribi\"\r\n            ],\r\n            \"scripts\": [\r\n                \"_linkedin_partner_id\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.oribi\\\\.io\",\r\n                \"snap\\\\.licdn\\\\.com/li\\\\.lms-analytics/insight\\\\.min\\\\.js\"\r\n            ],\r\n            \"description\": \"LinkedIn Insight Tag is a lightweight JavaScript tag that powers conversion tracking, website audiences, and website demographics.\",\r\n            \"website\": \"https://business.linkedin.com/marketing-solutions/insight-tag\"\r\n        },\r\n        \"Linkedin Sign-in\": {\r\n            \"cats\": [\r\n                69\r\n            ],\r\n            \"js\": [\r\n                \"onlinkedinauth\",\r\n                \"onlinkedinload\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"platform\\\\.linkedin\\\\.com/(?:.*)?in\\\\.js(?:\\\\?version)?([\\\\d.]+)?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Linkedin Sign-In is an authentication system that reduces the burden of login for users, by enabling them to sign in with their Linkedin account.\",\r\n            \"website\": \"https://www.linkedin.com/developers\"\r\n        },\r\n        \"Linx Commerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"ezgacfg.config.store\",\r\n                \"ezgacfg.shopper\",\r\n                \"linximpulse.config.integrationflags.platformprovider\"\r\n            ],\r\n            \"description\": \"Linx Commerce is an ecommerce platform, which provides seamless and personalised cross-channel solution that enables a true omni-channel shopping experience.\",\r\n            \"website\": \"https://www.linx.com.br/linx-commerce\"\r\n        },\r\n        \"Linx Impulse\": {\r\n            \"cats\": [\r\n                77,\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"linx.banner\",\r\n                \"linximpulse.config\",\r\n                \"linximpulseinitialized\"\r\n            ],\r\n            \"description\": \"Linx Impulse is a personalisation, media and retargeting solutions built by Linx.\",\r\n            \"website\": \"https://www.linx.com.br/linx-impulse\"\r\n        },\r\n        \"Liquid Web\": {\r\n            \"cats\": [\r\n                62,\r\n                88\r\n            ],\r\n            \"headers\": {\r\n                \"x-lw-cache\": \"\"\r\n            },\r\n            \"description\": \"Liquid Web is a US-based host offering premium managed web hosting solutions.\",\r\n            \"website\": \"https://www.liquidweb.com\"\r\n        },\r\n        \"List.js\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"list\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"@([\\\\d.]+)/(?:/dist)?list\\\\.(?:min\\\\.)?js\\\\;version:\\\\1\",\r\n                \"list\\\\.js/\\\\;confidence:50\"\r\n            ],\r\n            \"website\": \"https://listjs.com\"\r\n        },\r\n        \"Listrak\": {\r\n            \"cats\": [\r\n                32,\r\n                97\r\n            ],\r\n            \"js\": [\r\n                \"_ltksignup\",\r\n                \"_ltksubscriber\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:cdn|s1)\\\\.listrakbi\\\\.com\",\r\n                \"services\\\\.listrak\\\\.com\"\r\n            ],\r\n            \"description\": \"Listrak is a AI-based marketing automation and CRM solutions that unify, interpret and personalise data to engage customer across channels and devices.\",\r\n            \"website\": \"https://www.listrak.com\"\r\n        },\r\n        \"LiteSpeed\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^litespeed$\"\r\n            },\r\n            \"description\": \"LiteSpeed is a high-scalability web server.\",\r\n            \"website\": \"https://litespeedtech.com\",\r\n            \"cpe\": \"cpe:2.3:a:litespeedtech:litespeed_web_server:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Litespeed Cache\": {\r\n            \"cats\": [\r\n                23,\r\n                87\r\n            ],\r\n            \"headers\": {\r\n                \"x-litespeed-cache\": \"\",\r\n                \"x-turbo-charged-by\": \"litespeed\"\r\n            },\r\n            \"description\": \"LiteSpeed Cache is an all-in-one site acceleration plugin for WordPress.\",\r\n            \"website\": \"https://wordpress.org/plugins/litespeed-cache/\"\r\n        },\r\n        \"Lithium\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"lithiumvisitor\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"lithium\"\r\n            ],\r\n            \"html\": [\r\n                \" \\u003ca [^\\u003e]+powered by lithium\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://www.lithium.com\"\r\n        },\r\n        \"Littledata\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"littledatalayer\",\r\n                \"littledatalayer.version\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Littledata provides a seamless connection between your Shopify site, marketing channels, and Google Analytics.\",\r\n            \"website\": \"https://www.littledata.io\"\r\n        },\r\n        \"Live Story\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"livestory\",\r\n                \"lshelpers\"\r\n            ],\r\n            \"website\": \"https://www.livestory.nyc/\"\r\n        },\r\n        \"LiveAgent\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"liveagent\"\r\n            ],\r\n            \"description\": \"LiveAgent is an online live chat platform. The software provides a ticket management system.\",\r\n            \"website\": \"https://www.liveagent.com\"\r\n        },\r\n        \"LiveCanvas\": {\r\n            \"cats\": [\r\n                87,\r\n                51\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/livecanvas/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Bootstrap\"\r\n            ],\r\n            \"description\": \"LiveCanvas is a Bootstrap 5 WordPress page builder.\",\r\n            \"website\": \"https://livecanvas.com\"\r\n        },\r\n        \"LiveChat\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"livechatwidget\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.livechatinc\\\\.com/.*tracking\\\\.js\"\r\n            ],\r\n            \"description\": \"LiveChat is an online customer service software with online chat, help desk software, and web analytics capabilities.\",\r\n            \"website\": \"https://www.livechat.com/\"\r\n        },\r\n        \"LiveHelp\": {\r\n            \"cats\": [\r\n                52,\r\n                53\r\n            ],\r\n            \"js\": [\r\n                \"lhready\"\r\n            ],\r\n            \"description\": \"LiveHelp is an online chat tool.\",\r\n            \"website\": \"https://www.livehelp.it\"\r\n        },\r\n        \"LiveIntent\": {\r\n            \"cats\": [\r\n                75,\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"li.advertiserid\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.liadm\\\\.com\"\r\n            ],\r\n            \"description\": \"LiveIntent is an email ad monetization platform.\",\r\n            \"website\": \"https://www.liveintent.com\"\r\n        },\r\n        \"LiveJournal\": {\r\n            \"cats\": [\r\n                11\r\n            ],\r\n            \"description\": \"LiveJournal is a social networking service where users can keep a blog, journal or diary.\",\r\n            \"website\": \"https://www.livejournal.com\"\r\n        },\r\n        \"LivePerson\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"lptag.chronos\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.(?:liveperson|contactatonce)?\\\\.(?:com|net|co\\\\.uk)/\"\r\n            ],\r\n            \"description\": \"LivePerson is a tool for conversational chatbots and messaging.\",\r\n            \"website\": \"https://www.liveperson.com\"\r\n        },\r\n        \"LiveRamp DPM\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"dpmcomscorevars\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"c\\\\.tvpixel\\\\.com/js/current/dpm_pixel_min\\\\.js\"\r\n            ],\r\n            \"description\": \"LiveRamp DPM is a TV advertising metrics and analytics platform.\",\r\n            \"website\": \"https://liveramp.com/data-plus-math\"\r\n        },\r\n        \"LiveRamp PCM\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"js\": [\r\n                \"wpjsonpliverampgdprcmp\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"gdpr\\\\.privacymanager\\\\.io\"\r\n            ],\r\n            \"description\": \"LiveRamp PCM is a preference and consent management platform that enables comply with the ePrivacy Directive, GDPR, CCPA, and other data protection and privacy laws and regulations.\",\r\n            \"website\": \"https://liveramp.com/our-platform/preference-consent-management\"\r\n        },\r\n        \"LiveSession\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.livesession\\\\.io\"\r\n            ],\r\n            \"description\": \"LiveSession helps increase conversion rates using session replays, and event-based product analytics.\",\r\n            \"website\": \"https://livesession.io/\"\r\n        },\r\n        \"LiveStreet CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"livestreet_security_key\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"livestreet cms\"\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://livestreetcms.com\"\r\n        },\r\n        \"LiveZilla\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"lz_chat_execute\",\r\n                \"lz_code_id\",\r\n                \"lz_tracking_set_widget_visibility\"\r\n            ],\r\n            \"description\": \"LiveZilla is a web-based live support platform.\",\r\n            \"website\": \"https://www.livezilla.net\"\r\n        },\r\n        \"Livefyre\": {\r\n            \"cats\": [\r\n                15\r\n            ],\r\n            \"js\": [\r\n                \"fyre\",\r\n                \"fyreloader\",\r\n                \"l.version\",\r\n                \"lf.commentcount\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c[^\\u003e]+(?:id|class)=\\\"livefyre\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"livefyre_init\\\\.js\"\r\n            ],\r\n            \"description\": \"Livefyre is a platform that integrates with the social web to boost social interaction.\",\r\n            \"website\": \"https://livefyre.com\"\r\n        },\r\n        \"Liveinternet\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!--/liveinternet--\\u003e\",\r\n                \"\\u003c!--liveinternet counter--\\u003e\",\r\n                \"\\u003ca href=\\\"http://www\\\\.liveinternet\\\\.ru/click\\\"\",\r\n                \"\\u003cscript [^\\u003e]*\\u003e[\\\\s\\\\s]*//counter\\\\.yadro\\\\.ru/hit\"\r\n            ],\r\n            \"website\": \"https://liveinternet.ru/rating/\"\r\n        },\r\n        \"Livescale\": {\r\n            \"cats\": [\r\n                100,\r\n                103\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.livescale\\\\.tv/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Livescale is a video platform that enables teams to transform content and ecommerce into a live shopping experience that reaches engages and monetizes audiences with LiveShopping.\",\r\n            \"website\": \"https://www.livescale.tv\"\r\n        },\r\n        \"Livewire\": {\r\n            \"cats\": [\r\n                18,\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"livewire\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c[^\\u003e]{1,512}\\\\bwire:\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"livewire(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Laravel\"\r\n            ],\r\n            \"description\": \"Livewire is a full-stack Laravel framework for building dynamic interfaces.\",\r\n            \"website\": \"https://laravel-livewire.com\"\r\n        },\r\n        \"LlamaLink Cloud Server\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^llamalink\"\r\n            },\r\n            \"implies\": [\r\n                \"Nginx\"\r\n            ],\r\n            \"description\": \"LlamaLink Cloud Server is a custom dynamic web server based on Nginx Web server that load balance user traffic between hosting nodes and allows fast and cached experience to web and app users.\",\r\n            \"website\": \"https://llamalink.net\"\r\n        },\r\n        \"Loadable-Components\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"__loadable_loaded_chunks__\"\r\n            ],\r\n            \"description\": \"Loadable-Components is a library to solve the React code-splitting client-side and server-side.\",\r\n            \"website\": \"https://github.com/gregberge/loadable-components\"\r\n        },\r\n        \"Loadify\": {\r\n            \"cats\": [\r\n                92,\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.loadifyapp\\\\.ninety9\\\\.dev\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Loadify is a shopify app which helps merchants deploy performance techniques like loading screen, transitions \\u0026 lazy Load.\",\r\n            \"website\": \"https://apps.shopify.com/loadify\"\r\n        },\r\n        \"LocalFocus\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"html\": [\r\n                \"\\u003ciframe[^\\u003e]+\\\\blocalfocus\\\\b\"\r\n            ],\r\n            \"implies\": [\r\n                \"Angular\",\r\n                \"D3\"\r\n            ],\r\n            \"website\": \"https://www.localfocus.nl/en/\"\r\n        },\r\n        \"Localised\": {\r\n            \"cats\": [\r\n                106\r\n            ],\r\n            \"description\": \"Localised is local-first ecommerce platform.\",\r\n            \"website\": \"https://www.localised.com\"\r\n        },\r\n        \"Locksmith\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"locksmith\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Locksmith is a shopify app for adding access control capability on shopify stores.\",\r\n            \"website\": \"https://apps.shopify.com/locksmith\"\r\n        },\r\n        \"LocomotiveCMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]*/sites/[a-z\\\\d]{24}/theme/stylesheets\"\r\n            ],\r\n            \"implies\": [\r\n                \"MongoDB\",\r\n                \"Ruby on Rails\"\r\n            ],\r\n            \"website\": \"https://www.locomotivecms.com\"\r\n        },\r\n        \"Lodash\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"_.differenceby\",\r\n                \"_.templatesettings.imports._.templatesettings.imports._.version\",\r\n                \"_.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"lodash.*\\\\.js\"\r\n            ],\r\n            \"description\": \"Lodash is a JavaScript library which provides utility functions for common programming tasks using the functional programming paradigm.\",\r\n            \"website\": \"https://www.lodash.com\",\r\n            \"cpe\": \"cpe:2.3:a:lodash:lodash:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"LogRocket\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"logrocket._buffer\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.(?:lr-ingest|logrocket)\\\\.(?:com|io)\"\r\n            ],\r\n            \"description\": \"LogRocket is a logging and session replay platform that helps developers identify and troubleshoot issues in web applications by recording and replaying user sessions, along with capturing logs and user interactions in real-time.\",\r\n            \"website\": \"https://logrocket.com\"\r\n        },\r\n        \"Loggly\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"logglytracker\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.loggly\\\\.com/\"\r\n            ],\r\n            \"description\": \"Loggly is a cloud-based log management service provider.\",\r\n            \"website\": \"https://www.loggly.com\"\r\n        },\r\n        \"LogiCommerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"logicommerceglobal\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^logicommerce$\"\r\n                ],\r\n                \"logicommerce\": []\r\n            },\r\n            \"description\": \"LogiCommerce is the headless ecommerce platform.\",\r\n            \"website\": \"https://www.logicommerce.com\"\r\n        },\r\n        \"Login with Amazon\": {\r\n            \"cats\": [\r\n                69\r\n            ],\r\n            \"js\": [\r\n                \"onamazonloginready\"\r\n            ],\r\n            \"description\": \"Login with Amazon allows you use your Amazon user name and password to sign into and share information with participating third-party websites or apps.\",\r\n            \"website\": \"https://developer.amazon.com/apps-and-games/login-with-amazon\"\r\n        },\r\n        \"LoginRadius\": {\r\n            \"cats\": [\r\n                69\r\n            ],\r\n            \"js\": [\r\n                \"loginradius\",\r\n                \"loginradiusdefaults\",\r\n                \"loginradiussdk\",\r\n                \"loginradiusutility\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.loginradius\\\\.com\",\r\n                \"\\\\.lrcontent\\\\.com\"\r\n            ],\r\n            \"description\": \"LoginRadius is a cloud based SaaS Customer Identity Access Management platform based in Canada.\",\r\n            \"website\": \"https://www.loginradius.com\"\r\n        },\r\n        \"Loglib\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"llc\",\r\n                \"lli\"\r\n            ],\r\n            \"description\": \"Loglib is a Open Source and Privacy-First web analytics that aims to provide simple yet can be powerful based on your needs.\",\r\n            \"website\": \"https://www.loglib.io\"\r\n        },\r\n        \"LogoiX\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"LogoiX is a German shipping company.\",\r\n            \"website\": \"https://www.logoix.com\"\r\n        },\r\n        \"Loja Integrada\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"loja_id\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"vtex-integrated-store\"\r\n            },\r\n            \"website\": \"https://lojaintegrada.com.br/\"\r\n        },\r\n        \"Loja Mestre\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"lojamestre\\\\.\\\\w+\\\\.br\"\r\n            ],\r\n            \"meta\": {\r\n                \"webmaster\": [\r\n                    \"www\\\\.lojamestre\\\\.\\\\w+\\\\.br\"\r\n                ]\r\n            },\r\n            \"description\": \"Loja Mestre is an all-in-one ecommerce platform from Brazil.\",\r\n            \"website\": \"https://www.lojamestre.com.br/\"\r\n        },\r\n        \"Loja Virtual\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"id_loja_virtual\",\r\n                \"link_loja_virtual\",\r\n                \"loja_sem_dominio\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/js/ljvt_v(\\\\d+)/\\\\;version:\\\\1\\\\;confidence:20\",\r\n                \"cdn1\\\\.solojavirtual\\\\.com\"\r\n            ],\r\n            \"description\": \"Loja Virtual is an all-in-one ecommerce platform from Brazil.\",\r\n            \"website\": \"https://www.lojavirtual.com.br\"\r\n        },\r\n        \"Loja2\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"loja2\\\\.com\\\\.br\"\r\n            ],\r\n            \"description\": \"Loja2 is an all-in-one ecommerce platform from Brazil.\",\r\n            \"website\": \"https://www.loja2.com.br\"\r\n        },\r\n        \"Loom\": {\r\n            \"cats\": [\r\n                103\r\n            ],\r\n            \"website\": \"https://www.loom.com\"\r\n        },\r\n        \"Loop Returns\": {\r\n            \"cats\": [\r\n                102\r\n            ],\r\n            \"js\": [\r\n                \"loop.config.variantparam\",\r\n                \"looponstore\"\r\n            ],\r\n            \"description\": \"Loop Returns is a return portal that automated all the returns and refunds of products.\",\r\n            \"website\": \"https://www.loopreturns.com\"\r\n        },\r\n        \"Loop54\": {\r\n            \"cats\": [\r\n                29,\r\n                76\r\n            ],\r\n            \"cookies\": {\r\n                \"loop54user\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"loop54.config.libversion\"\r\n            ],\r\n            \"description\": \"Loop54 is a ecommerce search and navigation SaaS product.\",\r\n            \"website\": \"https://www.loop54.com\"\r\n        },\r\n        \"Lootly\": {\r\n            \"cats\": [\r\n                84,\r\n                94\r\n            ],\r\n            \"js\": [\r\n                \"lootly.config\",\r\n                \"lootlywidgetinit\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"lootly\\\\.io/\"\r\n            ],\r\n            \"description\": \"Lootly is a loyalty and referral marketing automation software suite for ecommerce businesses.\",\r\n            \"website\": \"https://lootly.io\"\r\n        },\r\n        \"Loox\": {\r\n            \"cats\": [\r\n                90\r\n            ],\r\n            \"js\": [\r\n                \"loox_global_hash\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"loox\\\\.io/widget\"\r\n            ],\r\n            \"description\": \"Loox is a reviews app for Shopify that helps you gather reviews and user-generated photos from your customers.\",\r\n            \"website\": \"https://loox.app\"\r\n        },\r\n        \"Loqate\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"loqateaccountcode\",\r\n                \"pca.platform.productlist\"\r\n            ],\r\n            \"description\": \"Loqate is an address verification solution.\",\r\n            \"website\": \"https://www.loqate.com\"\r\n        },\r\n        \"LottieFiles\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"lottie.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/dist/lottie-player\\\\.js\",\r\n                \"/dist/tgs-player\\\\.js\"\r\n            ],\r\n            \"description\": \"LottieFiles is an open-source animation file format that's tiny, high quality, interactive, and can be manipulated at runtime.\",\r\n            \"website\": \"https://lottiefiles.com\"\r\n        },\r\n        \"LoyaltyLion\": {\r\n            \"cats\": [\r\n                84\r\n            ],\r\n            \"js\": [\r\n                \"loyaltylion.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"sdk\\\\.loyaltylion\\\\.net/\"\r\n            ],\r\n            \"description\": \"LoyaltyLion is a data-driven ecommerce loyalty and engagement platform.\",\r\n            \"website\": \"https://loyaltylion.com\"\r\n        },\r\n        \"Lozad.js\": {\r\n            \"cats\": [\r\n                59,\r\n                92\r\n            ],\r\n            \"js\": [\r\n                \"lozad\"\r\n            ],\r\n            \"scripts\": [\r\n                \"/lozad\\\\.min\\\\.js\"\r\n            ],\r\n            \"description\": \"Lozad.js is a lightweight lazy-loading library that's just 535 bytes minified \\u0026 gzipped.\",\r\n            \"website\": \"https://apoorv.pro/lozad.js/\"\r\n        },\r\n        \"Lua\": {\r\n            \"cats\": [\r\n                27\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"\\\\blua(?: ([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"Lua is a multi-paradigm programming language designed primarily for embedded use in applications.\",\r\n            \"website\": \"https://www.lua.org\",\r\n            \"cpe\": \"cpe:2.3:a:lua:lua:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Luana\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"js\": [\r\n                \"luanaframework\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^luana\\\\sframework\\\\s([\\\\d\\\\.]+)$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PWA\"\r\n            ],\r\n            \"description\": \"Luana is a web framework that uses web browser APIs and features to make a cross-platform web app look like a Native one and bring the same experience.\",\r\n            \"website\": \"https://luanaframework.github.io\"\r\n        },\r\n        \"Lucene\": {\r\n            \"cats\": [\r\n                34\r\n            ],\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"description\": \"Lucene is a free and open-source search engine software library.\",\r\n            \"website\": \"https://lucene.apache.org/core/\",\r\n            \"cpe\": \"cpe:2.3:a:apache:lucene:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Lucky Orange\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"__wtw_lucky_site_id\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.luckyorange\\\\.com/\"\r\n            ],\r\n            \"description\": \"Lucky Orange is a conversion optimisation tool with features including heatmaps, session recording, conversion funnels, form analytics, and chat.\",\r\n            \"website\": \"https://www.luckyorange.com\"\r\n        },\r\n        \"Luigi’s Box\": {\r\n            \"cats\": [\r\n                10,\r\n                29\r\n            ],\r\n            \"js\": [\r\n                \"luigis\"\r\n            ],\r\n            \"website\": \"https://www.luigisbox.com\"\r\n        },\r\n        \"Lume\": {\r\n            \"cats\": [\r\n                57\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^lume\\\\sv([\\\\d\\\\.]+)$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Deno\"\r\n            ],\r\n            \"description\": \"Lume is a static site generator based on Deno.\",\r\n            \"website\": \"https://lume.land\"\r\n        },\r\n        \"Luna\": {\r\n            \"cats\": [\r\n                105\r\n            ],\r\n            \"js\": [\r\n                \"ditto.__esmodule\",\r\n                \"dittoidlifetime\",\r\n                \"globaldittokey\",\r\n                \"globaldittoserver\",\r\n                \"jstextmap.dittosdkurl\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"bsdk\\\\.api\\\\.ditto.com\"\r\n            },\r\n            \"description\": \"Luna is a company that sells software that aids eyewear companies sell their products online using virtual fitting.\",\r\n            \"website\": \"https://luna.io\"\r\n        },\r\n        \"LyraThemes Kale\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"kale_responsive_videos\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/kale(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"LyraThemes Kale is a charming and elegant, aesthetically minimal and uncluttered food blog WordPress theme.\",\r\n            \"website\": \"https://www.lyrathemes.com/kale\"\r\n        },\r\n        \"Lytics\": {\r\n            \"cats\": [\r\n                97\r\n            ],\r\n            \"js\": [\r\n                \"__lytics__jstag__.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.lytics\\\\.io/\"\r\n            ],\r\n            \"description\": \"Lytics is a customer data platform built for marketing teams.\",\r\n            \"website\": \"https://www.lytics.com\"\r\n        },\r\n        \"MAAK\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"author\": [\r\n                    \"^maak$\"\r\n                ]\r\n            },\r\n            \"description\": \"MAAK is a Laravel based CMS developed by Mahdi Akbari.\",\r\n            \"website\": \"https://maak-code.ir\"\r\n        },\r\n        \"MAJIN\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"ma.touch\"\r\n            ],\r\n            \"description\": \"MAJIN reads the hearts and minds of each customer using real-world data to automate optimal marketing processes.\",\r\n            \"website\": \"https://ma-jin.jp\"\r\n        },\r\n        \"MATORI.NET\": {\r\n            \"cats\": [\r\n                64\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"matori.net\"\r\n            },\r\n            \"implies\": [\r\n                \"OpenResty\"\r\n            ],\r\n            \"description\": \"MATORI.NET is a fully managed reverse proxy.\",\r\n            \"website\": \"https://matori.net\"\r\n        },\r\n        \"MDBootstrap\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"js\": [\r\n                \"mdb.scrollspy\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:/mdbootstrap/([\\\\d\\\\.]+)/)?js/mdb\\\\.min\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"Bootstrap\"\r\n            ],\r\n            \"description\": \"MDBootstrap (Material Design for Bootstrap) is a complete UI package that can be integrated with other frameworks such as Angular, React, Vue, etc. It is used to design a fully responsive and mobile-friendly layout using various components, plugins, animation.\",\r\n            \"website\": \"https://mdbootstrap.com\"\r\n        },\r\n        \"MDBootstrap WP theme\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"implies\": [\r\n                \"MDBootstrap\"\r\n            ],\r\n            \"description\": \"MDBootstrap WP theme is a WordPress theme built on top of the MDBootstrap front-end UI library. It provides a set of pre-designed layouts, widgets, and components that can be easily customised and integrated into WordPress websites.\",\r\n            \"website\": \"https://mdbgo.com/docs/projects/wordpress/\"\r\n        },\r\n        \"MDS Brand\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"description\": \"MDS Brand is a provider of website, CRM, vrtual BDC, SEO, PPC, and live chat solutions for Marine, RV, Powersports, and automotive industries.\",\r\n            \"website\": \"https://mdsbrand.com\"\r\n        },\r\n        \"MDUI\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"js\": [\r\n                \"_mduieventid\",\r\n                \"mdui.drawer\"\r\n            ],\r\n            \"description\": \"MDUI is a CSS Framework based on material design.\",\r\n            \"website\": \"https://www.mdui.org\"\r\n        },\r\n        \"MGID\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"mgsensor.mgqworker\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.mgid\\\\.com/\"\r\n            ],\r\n            \"description\": \"MGID is a programmatic advertising platform frequently used by misinformation websites.\",\r\n            \"website\": \"https://www.mgid.com\"\r\n        },\r\n        \"MGPanel\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.mgpanel\\\\.org/\"\r\n            ],\r\n            \"implies\": [\r\n                \"MySQL\"\r\n            ],\r\n            \"description\": \"MGPanel has it all, a content management system that gives programmers the freedom to create professional web pages from scratch, also providing their clients with a self-managing platform.\",\r\n            \"website\": \"https://mgpanel.org\"\r\n        },\r\n        \"MIYN Online Appointment\": {\r\n            \"cats\": [\r\n                72\r\n            ],\r\n            \"js\": [\r\n                \"miynlive.settings\"\r\n            ],\r\n            \"description\": \"MIYN Online Appointment is an advanced cloud-based online appointment scheduling software.\",\r\n            \"website\": \"https://miyn.app/online-appointment\"\r\n        },\r\n        \"MODX\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"modx\",\r\n                \"modx_media_path\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^modx\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003c!-- modx process time debug info --\\u003e\",\r\n                \"\\u003c(?:link|script)[^\\u003e]+assets/snippets/\\\\;confidence:20\",\r\n                \"\\u003ca[^\\u003e]+\\u003epowered by modx\\u003c/a\\u003e\",\r\n                \"\\u003cform[^\\u003e]+id=\\\"ajaxsearch_form\\\\;confidence:20\",\r\n                \"\\u003cinput[^\\u003e]+id=\\\"ajaxsearch_input\\\\;confidence:20\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/assets/components/templates/\\\\;confidence:50\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"modx[^\\\\d.]*([\\\\d.]+)?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"MODX (originally MODx) is an open source content management system and web application framework for publishing content on the World Wide Web and intranets.\",\r\n            \"website\": \"https://modx.com/content-management-framework\",\r\n            \"cpe\": \"cpe:2.3:a:modx:modx_revolution:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"MRW\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"MRW is a Spanish courier company specialised in express national and international shipping services.\",\r\n            \"website\": \"https://www.mrw.es\"\r\n        },\r\n        \"MSHOP\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"static\\\\.hotishop\\\\.com/\"\r\n            ],\r\n            \"description\": \"MSHOP is an all-in-one ecommerce platform.\",\r\n            \"website\": \"https://hotishop.com\"\r\n        },\r\n        \"MTCaptcha\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"js\": [\r\n                \"mtcaptcha.getverifiedtoken\",\r\n                \"mtcaptchaconfig.sitekey\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"service(?:2)?\\\\.mtcaptcha\\\\.com/\"\r\n            ],\r\n            \"description\": \"MTCaptcha is a captcha service that is GDPR and WCAG compliant, providing the confidence of privacy and accessibility.\",\r\n            \"website\": \"https://www.mtcaptcha.com\"\r\n        },\r\n        \"MUI\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"css\": [\r\n                \"\\\\.MuiPaper-root\"\r\n            ],\r\n            \"implies\": [\r\n                \"React\"\r\n            ],\r\n            \"description\": \"MUI(formerly Material UI) is a simple and customisable component library to build faster, beautiful, and more accessible React applications.\",\r\n            \"website\": \"https://mui.com\"\r\n        },\r\n        \"Macaron\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"implies\": [\r\n                \"Go\"\r\n            ],\r\n            \"description\": \"Macaron is a high productive and modular web framework in Go.\",\r\n            \"website\": \"https://go-macaron.com\"\r\n        },\r\n        \"MachoThemes NewsMag\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/newsmag(?:-child)?/\"\r\n            ],\r\n            \"description\": \"MachoThemes Newsmag is a clean and modern magazine, news or blog WordPress theme.\",\r\n            \"website\": \"https://www.machothemes.com/item/newsmag-lite\"\r\n        },\r\n        \"MadAdsMedia\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"setmiframe\",\r\n                \"setmrefurl\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^https?://(?:ads-by|pixel)\\\\.madadsmedia\\\\.com/\"\r\n            ],\r\n            \"website\": \"https://madadsmedia.com\"\r\n        },\r\n        \"MadCap Software\": {\r\n            \"cats\": [\r\n                96\r\n            ],\r\n            \"js\": [\r\n                \"madcap.accessibility\",\r\n                \"madcap.debug\"\r\n            ],\r\n            \"description\": \"MadCap Software is a company that specialises in creating software tools for technical writers to author and publish various types of content, including user manuals, online help systems, and knowledge bases.\",\r\n            \"website\": \"https://www.madcapsoftware.com\"\r\n        },\r\n        \"Magazord\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"web-author\": [\r\n                    \"^magazord$\"\r\n                ]\r\n            },\r\n            \"description\": \"Magazord is an all-in-one ecommerce platform.\",\r\n            \"website\": \"https://www.magazord.com.br\"\r\n        },\r\n        \"MageWorx Search Autocomplete\": {\r\n            \"cats\": [\r\n                29\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"mageworx_searchsuiteautocomplete\"\r\n            ],\r\n            \"description\": \"MageWorx Search Autocomplete extension offers an AJAX-based popup window that displays and updates relevant search results while a customer forms his or her query.\",\r\n            \"website\": \"https://github.com/mageworx/search-suite-autocomplete\"\r\n        },\r\n        \"Magento\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"frontend\": \"\\\\;confidence:50\",\r\n                \"mage-cache-storage\": \"\",\r\n                \"mage-cache-storage-section-invalidation\": \"\",\r\n                \"mage-translation-file-version\": \"\",\r\n                \"mage-translation-storage\": \"\",\r\n                \"x-magento-vary\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"mage\",\r\n                \"varienform\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"js/mage\",\r\n                \"skin/frontend/(?:default|(enterprise))\\\\;version:\\\\1?1 (enterprise):1 (community)\",\r\n                \"skin/frontend/\\\\;confidence:50\\\\;version:\\\\1\",\r\n                \"static/_requirejs\\\\;confidence:50\\\\;version:2\"\r\n            ],\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Magento is an open-source ecommerce platform written in PHP.\",\r\n            \"website\": \"https://magento.com\",\r\n            \"cpe\": \"cpe:2.3:a:magento:magento:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Magewire\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"magewire\",\r\n                \"magewire.connection-author\"\r\n            ],\r\n            \"implies\": [\r\n                \"Laravel\",\r\n                \"Livewire\"\r\n            ],\r\n            \"description\": \"Magewire is a Laravel Livewire port for Magento 2.\",\r\n            \"website\": \"https://github.com/magewirephp/magewire\"\r\n        },\r\n        \"Magisto\": {\r\n            \"cats\": [\r\n                14\r\n            ],\r\n            \"js\": [\r\n                \"magisto_server\",\r\n                \"magistoplayerframe\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.magisto\\\\.com/\"\r\n            ],\r\n            \"description\": \"Magisto is a video management solution designed to help marketing professionals, agencies, and businesses of all sizes.\",\r\n            \"website\": \"https://www.magisto.com\"\r\n        },\r\n        \"Magixite\": {\r\n            \"cats\": [\r\n                68\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"acc\\\\.magixite\\\\.com/\"\r\n            ],\r\n            \"description\": \"Magixite offers the Web Content Accessibility Guidelines (WCAG), a set of guidelines and requirements designed to help designers and developers improve the accessibility of web content, ensuring it can be effectively used by individuals with disabilities.\",\r\n            \"website\": \"https://acc.magixite.com\"\r\n        },\r\n        \"MailChimp\": {\r\n            \"cats\": [\r\n                32,\r\n                75\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- begin mailchimp signup form --\\u003e\",\r\n                \"\\u003cinput [^\\u003e]*id=\\\"mc-email\\\"\\\\;confidence:20\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn-images\\\\.mailchimp\\\\.com/[^\\u003e]*\\\\.css\",\r\n                \"chimpstatic\\\\.com/mcjs-connected\",\r\n                \"s3\\\\.amazonaws\\\\.com/downloads\\\\.mailchimp\\\\.com/js/mc-validate\\\\.js\"\r\n            ],\r\n            \"description\": \"Mailchimp is a marketing automation platform and email marketing service.\",\r\n            \"website\": \"https://mailchimp.com\",\r\n            \"cpe\": \"cpe:2.3:a:thinkshout:mailchimp:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"MailChimp for WooCommerce\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/mailchimp-for-woocommerce/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"MailChimp\"\r\n            ],\r\n            \"description\": \"MailChimp for WooCommerce gives you the ability to automatically sync customer purchase data to your MailChimp account.\",\r\n            \"website\": \"https://mailchimp.com/integrations/woocommerce\"\r\n        },\r\n        \"MailChimp for WordPress\": {\r\n            \"cats\": [\r\n                87,\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"mc4wp\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/mailchimp-for-wp/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"MailChimp\"\r\n            ],\r\n            \"description\": \"MailChimp for WordPress is an email marketing plugin that enables you to build subscriber lists.\",\r\n            \"website\": \"https://www.mc4wp.com\"\r\n        },\r\n        \"MailerLite\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"mailerliteobject\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.mailerlite\\\\.com/\"\r\n            ],\r\n            \"description\": \"MailerLite is an email marketing tool and website builder for businesses of all shapes and sizes.\",\r\n            \"website\": \"https://www.mailerlite.com\"\r\n        },\r\n        \"MailerLite Website Builder\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.mailerlite\\\\.com/moment/moment\\\\.min\\\\.js\"\r\n            ],\r\n            \"description\": \"MailerLite Website Builder is a free drag \\u0026 drop website builder with interactive blocks and ecommerce integrations.\",\r\n            \"website\": \"https://www.mailerlite.com/features/website-builder\"\r\n        },\r\n        \"MailerLite plugin\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/woo-mailerlite/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"MailerLite\"\r\n            ],\r\n            \"description\": \"The official MailerLite signup forms plugin makes it easy to grow your newsletter subscriber list from your WordPress blog or website. The plugin automatically integrates your WordPress form with your MailerLite email marketing account.\",\r\n            \"website\": \"https://ru.wordpress.org/plugins/official-mailerlite-sign-up-forms/\"\r\n        },\r\n        \"Mailgun\": {\r\n            \"cats\": [\r\n                75\r\n            ],\r\n            \"description\": \"Mailgun is a transactional email API service for developers.\",\r\n            \"website\": \"https://www.mailgun.com/\"\r\n        },\r\n        \"Mailjet\": {\r\n            \"cats\": [\r\n                75\r\n            ],\r\n            \"description\": \"Mailjet is an email delivery service for marketing and developer teams.\",\r\n            \"website\": \"https://www.mailjet.com/\"\r\n        },\r\n        \"Mailman\": {\r\n            \"cats\": [\r\n                75\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/mailman\\\\d+/static/.+\\\\.js\",\r\n                \"/static/(?:hyperkitty|django-mailman3)/.+\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Python\"\r\n            ],\r\n            \"description\": \"Mailman is free software for managing electronic mail discussion and e-newsletter lists. Mailman is integrated with the web, making it easy for users to manage their accounts and for list owners to administer their lists. Mailman supports built-in archiving, automatic bounce processing, content filtering, digest delivery, spam filters, and more.\",\r\n            \"website\": \"https://list.org\",\r\n            \"cpe\": \"cpe:2.3:a:gnu:mailman:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Mailmunch\": {\r\n            \"cats\": [\r\n                75,\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"mailmunch\",\r\n                \"mailmunchwidgets\"\r\n            ],\r\n            \"description\": \"Mailmunch is a lead generation tool that combines landing pages, forms, and email marketing.\",\r\n            \"website\": \"https://www.mailmunch.com\"\r\n        },\r\n        \"MainAd\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.mainadv\\\\.com/\"\r\n            ],\r\n            \"description\": \"MainAd is an international advertising technology company specialising in real-time bidding and programmatic ad retargeting.\",\r\n            \"website\": \"https://www.mainad.com\"\r\n        },\r\n        \"Make-Sense\": {\r\n            \"cats\": [\r\n                68\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"mk-sense\\\\.com/aweb\\\\?license\"\r\n            ],\r\n            \"website\": \"https://mk-sense.com/\"\r\n        },\r\n        \"MakeShop\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"makeshop_ga_gtag\",\r\n                \"makeshop_topsearch\"\r\n            ],\r\n            \"description\": \"MakeShop is a Japanese ecommerce platform.\",\r\n            \"website\": \"https://www.makeshop.jp\"\r\n        },\r\n        \"MakeShopKorea\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"makeshop\",\r\n                \"makeshoploguniqueid\"\r\n            ],\r\n            \"description\": \"MakeShopKorea is a Korean hosting brand that focuses on building ecommerce stores.\",\r\n            \"website\": \"https://www.makeshop.co.kr\"\r\n        },\r\n        \"Malomo\": {\r\n            \"cats\": [\r\n                107\r\n            ],\r\n            \"js\": [\r\n                \"malomo\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.gomalomo\\\\.com/\"\r\n            ],\r\n            \"description\": \"Malomo is a cloud-based shipment tracking solution that helps small to midsize eCommerce businesses provide customers with shipping updates via white-label package tracking pages.\",\r\n            \"website\": \"https://gomalomo.com\"\r\n        },\r\n        \"Mambo\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"mambo\"\r\n                ]\r\n            },\r\n            \"website\": \"https://mambo-foundation.org\"\r\n        },\r\n        \"Mangeznotez\": {\r\n            \"cats\": [\r\n                5,\r\n                72\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\w+.mangeznotez\\\\.\\\\w+(?:.*\\\\?ver=([\\\\d.]+))?\\\\;version:\\\\1\",\r\n                \"www\\\\.mangeznotez\\\\.\\\\w+\"\r\n            ],\r\n            \"description\": \"Mangeznotez is a restaurant table booking widget.\",\r\n            \"website\": \"https://www.mangeznotez.com\"\r\n        },\r\n        \"Mantine\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"implies\": [\r\n                \"TypeScript\"\r\n            ],\r\n            \"description\": \"Mantine is an open-source UI framework and component library for React.\",\r\n            \"website\": \"https://mantine.dev\"\r\n        },\r\n        \"MantisBT\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"implies\": [\r\n                \"MySQL\"\r\n            ],\r\n            \"description\": \"MantisBT is an open-source, web-based issue tracking system written in PHP with a MySQL database backend, designed to facilitate bug tracking and project management for software development teams.\",\r\n            \"website\": \"https://www.mantisbt.org\",\r\n            \"cpe\": \"cpe:2.3:a:mantisbt:mantisbt:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"ManyChat\": {\r\n            \"cats\": [\r\n                32,\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"mcwidget\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"widget\\\\.manychat\\\\.com\"\r\n            ],\r\n            \"description\": \"ManyChat is a service that allows you to create chatbots for Facebook Messenger.\",\r\n            \"website\": \"https://manychat.com/\"\r\n        },\r\n        \"ManyContacts\": {\r\n            \"cats\": [\r\n                32,\r\n                5\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.manycontacts\\\\.com\"\r\n            ],\r\n            \"description\": \"ManyContacts is an attention-grabbing contact form sitting on top of your website that helps to increase conversion by converting visitors into leads.\",\r\n            \"website\": \"https://www.manycontacts.com\"\r\n        },\r\n        \"MapLibre GL JS\": {\r\n            \"cats\": [\r\n                35\r\n            ],\r\n            \"js\": [\r\n                \"apex.libversions.maplibre\",\r\n                \"maplibregl\",\r\n                \"rmap2.maplibreglcompare\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"maplibre-gl@([\\\\d\\\\.]+)/dist/maplibre-gl\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"MapLibre GL JS is an open-source library for publishing maps on your websites.\",\r\n            \"website\": \"https://github.com/maplibre/maplibre-gl-js\"\r\n        },\r\n        \"Mapbox GL JS\": {\r\n            \"cats\": [\r\n                35\r\n            ],\r\n            \"js\": [\r\n                \"mapboxgl.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"mapbox-gl\\\\.js\"\r\n            ],\r\n            \"description\": \"Mapbox GL JS is a JavaScript library that uses WebGL to render interactive maps from vector tiles and Mapbox styles.\",\r\n            \"website\": \"https://github.com/mapbox/mapbox-gl-js\"\r\n        },\r\n        \"Mapbox.js\": {\r\n            \"cats\": [\r\n                35\r\n            ],\r\n            \"scripts\": [\r\n                \"api\\\\.mapbox\\\\.com/mapbox\\\\.js/v([\\\\d\\\\.]+)/\\\\;version:\\\\1\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"api\\\\.mapbox\\\\.com/mapbox\\\\.js/v([\\\\d\\\\.]+)/\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"Leaflet\"\r\n            ],\r\n            \"description\": \"Mapbox.js is a JavaScript library provided by Mapbox for working with interactive maps and geospatial data.\",\r\n            \"website\": \"https://github.com/mapbox/mapbox.js\"\r\n        },\r\n        \"Mapp\": {\r\n            \"cats\": [\r\n                10,\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"webtrekk\",\r\n                \"webtrekkconfig\",\r\n                \"webtrekkheatmapobjects\",\r\n                \"webtrekklinktrackobjects\",\r\n                \"webtrekkunloadobjects\",\r\n                \"webtrekkv3\",\r\n                \"webtrekkv3\",\r\n                \"wt_tt\",\r\n                \"wt_ttv2\",\r\n                \"wtsmart\"\r\n            ],\r\n            \"description\": \"Mapp is designed specifically to help consumer-facing brands run highly personalised, cross-channel marketing campaigns powered by real-time customer data and generated insights.\",\r\n            \"website\": \"https://mapp.com\"\r\n        },\r\n        \"Mapplic\": {\r\n            \"cats\": [\r\n                35\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/include/mapplic/mapplic\\\\.js\",\r\n                \"wp-content/plugins/mapplic/\"\r\n            ],\r\n            \"description\": \"Mapplic is a plugin for creating interactive maps based on simple image (jpg, png) or vector (svg) files.\",\r\n            \"website\": \"https://mapplic.com\"\r\n        },\r\n        \"Maptalks\": {\r\n            \"cats\": [\r\n                35\r\n            ],\r\n            \"js\": [\r\n                \"map._eventmap\",\r\n                \"maptalks.geojson\"\r\n            ],\r\n            \"description\": \"Maptalks is a light and plugable JavaScript library for integrated 2D/3D maps.\",\r\n            \"website\": \"https://maptalks.org\"\r\n        },\r\n        \"Marchex\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.marchex\\\\.io/\"\r\n            ],\r\n            \"description\": \"Marchex is a B2B call and conversational analytics company.\",\r\n            \"website\": \"https://www.marchex.com\"\r\n        },\r\n        \"Marfeel\": {\r\n            \"cats\": [\r\n                10,\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"marfeel\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.marfeel\\\\.com/\",\r\n                \"\\\\.mrf\\\\.io/\"\r\n            ],\r\n            \"description\": \"Marfeel is a publisher platform that allows publishers to create, optimise and monetise their mobile websites.\",\r\n            \"website\": \"https://www.marfeel.com\"\r\n        },\r\n        \"MariaDB\": {\r\n            \"cats\": [\r\n                34\r\n            ],\r\n            \"description\": \"MariaDB is an open-source relational database management system compatible with MySQL.\",\r\n            \"website\": \"https://mariadb.org\",\r\n            \"cpe\": \"cpe:2.3:a:mariadb_project:mariadb:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Marionette.js\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"marionette\",\r\n                \"marionette.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"backbone\\\\.marionette.*\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Backbone.js\",\r\n                \"Underscore.js\"\r\n            ],\r\n            \"description\": \"Marionette is a composite application library for Backbone.js that aims to simplify the construction of large scale JavaScript applications. It is a collection of common design and implementation patterns found in applications.\",\r\n            \"website\": \"https://marionettejs.com\"\r\n        },\r\n        \"Marked\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"marked\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/marked(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"website\": \"https://marked.js.org\",\r\n            \"cpe\": \"cpe:2.3:a:marked_project:marked:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Marker\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"js\": [\r\n                \"markerconfig\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"edge\\\\.marker\\\\.io\"\r\n            ],\r\n            \"description\": \"Marker.io is an issue tracker solution for Project Managers, QA Testers and Agency Clients to report feedback \\u0026 bugs to developers.\",\r\n            \"website\": \"https://marker.io\"\r\n        },\r\n        \"Marketo\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"munchkin\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"munchkin\\\\.marketo\\\\.\\\\w+/(?:([\\\\d.]+)/)?munchkin\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Marketo develops and sells marketing automation software for account-based marketing and other marketing services and products including SEO and content creation.\",\r\n            \"website\": \"https://www.marketo.com\"\r\n        },\r\n        \"Marketo Forms\": {\r\n            \"cats\": [\r\n                5,\r\n                110\r\n            ],\r\n            \"js\": [\r\n                \"formatmarketoform\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"marketo\\\\.\\\\w+/js/forms(?:[\\\\d.]+)/js/forms([\\\\d.]+)\\\\.min\\\\.js\\\\;version:\\\\1\",\r\n                \"v([\\\\d.]+)/js/marketo-alt-form\\\\.min\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Marketo Forms help create web forms without programming knowledge. Forms can reside on Marketo landing pages and also be embedded on any page of website.\",\r\n            \"website\": \"https://www.marketo.com\"\r\n        },\r\n        \"Marketpath CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"_mp_permissions\": \"^session\\\\^\"\r\n            },\r\n            \"implies\": [\r\n                \"Azure\",\r\n                \"ZURB Foundation\"\r\n            ],\r\n            \"description\": \"Marketpath CMS is a hosted website content management system used by businesses, churches and schools.\",\r\n            \"website\": \"https://www.marketpath.com\"\r\n        },\r\n        \"Marko\": {\r\n            \"cats\": [\r\n                18,\r\n                66\r\n            ],\r\n            \"js\": [\r\n                \"markocomponent\",\r\n                \"markosections\",\r\n                \"markovars\"\r\n            ],\r\n            \"scripts\": [\r\n                \"\\\\.marko(\\\\.js)?\"\r\n            ],\r\n            \"implies\": [\r\n                \"Node.js\"\r\n            ],\r\n            \"description\": \"Marko is HTML re-imagined as a language for building dynamic and reactive user interfaces.\",\r\n            \"website\": \"https://markojs.com\"\r\n        },\r\n        \"Master Slider\": {\r\n            \"cats\": [\r\n                7\r\n            ],\r\n            \"js\": [\r\n                \"masterslider\",\r\n                \"masterslider.version\"\r\n            ],\r\n            \"description\": \"Master Slider is an SEO friendly, responsive image and video slider.\",\r\n            \"website\": \"https://www.masterslider.com\"\r\n        },\r\n        \"Master Slider Plugin\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"implies\": [\r\n                \"Master Slider\"\r\n            ],\r\n            \"description\": \"Master Slider Plugin is an SEO friendly, responsive image and video slider plugin for WordPress.\",\r\n            \"website\": \"https://wordpress.org/plugins/master-slider\"\r\n        },\r\n        \"Mastercard\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"description\": \"MasterCard facilitates electronic funds transfers throughout the world, most commonly through branded credit cards, debit cards and prepaid cards.\",\r\n            \"website\": \"https://www.mastercard.com\"\r\n        },\r\n        \"MasterkinG32 Framework\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-framework\": \"masterking(?:)\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^masterking(?:)\"\r\n                ]\r\n            },\r\n            \"description\": \"MasterkinG32 framework.\",\r\n            \"website\": \"https://masterking32.com\"\r\n        },\r\n        \"Mastodon\": {\r\n            \"cats\": [\r\n                2\r\n            ],\r\n            \"cookies\": {\r\n                \"_mastodon_session\": \"\"\r\n            },\r\n            \"headers\": {\r\n                \"server\": \"^mastodon$\"\r\n            },\r\n            \"description\": \"Mastodon is a free and open-source self-hosted social networking service.\",\r\n            \"website\": \"https://joinmastodon.org\"\r\n        },\r\n        \"Matajer\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.mapp\\\\.sa/\"\r\n            ],\r\n            \"description\": \"Matajer is an ecommerce platform from Saudi Arabia.\",\r\n            \"website\": \"https://mapp.sa\"\r\n        },\r\n        \"Material Design Lite\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"js\": [\r\n                \"materialicontoggle\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]* href=\\\"[^\\\"]*material(?:\\\\.[\\\\w]+-[\\\\w]+)?(?:\\\\.min)?\\\\.css\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:/([\\\\d.]+))?/material(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Material Design Lite is a library of components for web developers.\",\r\n            \"website\": \"https://getmdl.io\"\r\n        },\r\n        \"Materialize CSS\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"([\\\\d\\\\.]+)/.*/materialize\\\\.min\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Materialize CSS is a front-end framework that helps developers create responsive and mobile-first web applications. It is based on Google's Material Design guidelines.\",\r\n            \"website\": \"https://materializecss.com\"\r\n        },\r\n        \"MathJax\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"mathjax\",\r\n                \"mathjax.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"([\\\\d.]+)?/mathjax\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"MathJax is a cross-browser JavaScript library that displays mathematical notation in web browsers, using MathML, LaTeX and ASCIIMathML markup.\",\r\n            \"website\": \"https://www.mathjax.org\"\r\n        },\r\n        \"Matomo Analytics\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"cookies\": {\r\n                \"piwik_sessid\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"_paq\",\r\n                \"matomo\",\r\n                \"piwik\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"piwik\\\\.js|piwik\\\\.php\"\r\n            ],\r\n            \"meta\": {\r\n                \"apple-itunes-app\": [\r\n                    \"app-id=737216887\"\r\n                ],\r\n                \"generator\": [\r\n                    \"(?:matomo|piwik) - open source web analytics\"\r\n                ],\r\n                \"google-play-app\": [\r\n                    \"app-id=org\\\\.piwik\\\\.mobile2\"\r\n                ]\r\n            },\r\n            \"description\": \"Matomo Analytics is a free and open-source web analytics application, that runs on a PHP/MySQL web-server.\",\r\n            \"website\": \"https://matomo.org\",\r\n            \"cpe\": \"cpe:2.3:a:matomo:matomo:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Matomo Tag Manager\": {\r\n            \"cats\": [\r\n                42\r\n            ],\r\n            \"js\": [\r\n                \"matomotagmanager\"\r\n            ],\r\n            \"description\": \"Matomo Tag Manager manages tracking and marketing tags.\",\r\n            \"website\": \"https://developer.matomo.org/guides/tagmanager/introduction\"\r\n        },\r\n        \"Mattermost\": {\r\n            \"cats\": [\r\n                2\r\n            ],\r\n            \"js\": [\r\n                \"mm_config\",\r\n                \"mm_current_user_id\",\r\n                \"mm_license\",\r\n                \"mm_user\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cnoscript\\u003e to use mattermost, please enable javascript\\\\. \\u003c/noscript\\u003e\"\r\n            ],\r\n            \"implies\": [\r\n                \"Go\",\r\n                \"React\"\r\n            ],\r\n            \"website\": \"https://about.mattermost.com\",\r\n            \"cpe\": \"cpe:2.3:a:jenkins:mattermost:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Mautic\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"mauticformvalidations\",\r\n                \"mauticsdk\",\r\n                \"mautictrackingobject\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"[^a-z]mtc.*\\\\.js\"\r\n            ],\r\n            \"description\": \"Mautic is a free and open-source marketing automation tool for Content Management, Social Media, Email Marketing, and can be used for the integration of social networks, campaign management, forms, questionnaires, reports, etc.\",\r\n            \"website\": \"https://www.mautic.org/\",\r\n            \"cpe\": \"cpe:2.3:a:mautic:mautic:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Mavo\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"mavo\",\r\n                \"mavo.version\"\r\n            ],\r\n            \"description\": \"Mavo is a JavaScript library that enables web developers to turn regular HTML into reactive web applications without the need for writing custom JavaScript.\",\r\n            \"website\": \"https://mavo.io\"\r\n        },\r\n        \"MaxCDN\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^netdna\",\r\n                \"x-cdn-forward\": \"^maxcdn$\"\r\n            },\r\n            \"description\": \"MaxCDN is a content delivery network, which accelerates web-sites and decreases the server load.\",\r\n            \"website\": \"https://www.maxcdn.com\"\r\n        },\r\n        \"MaxMind\": {\r\n            \"cats\": [\r\n                79,\r\n                83\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:device|js)\\\\.maxmind\\\\.com/\",\r\n                \"geoip-js\\\\.com/.+/v([\\\\d\\\\.]+)/\\\\;version:\\\\1\",\r\n                \"geoip\\\\.maxmind\\\\.min\\\\.js\"\r\n            ],\r\n            \"description\": \"MaxMind is a provider of geolocation and online fraud detection tools.\",\r\n            \"website\": \"https://www.maxmind.com\"\r\n        },\r\n        \"MaxSite CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"maxsite cms\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://max-3000.com\"\r\n        },\r\n        \"Maxemail\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"mxm.basket\",\r\n                \"mxm.formhandler\",\r\n                \"mxm.tracker\"\r\n            ],\r\n            \"website\": \"https://maxemail.xtremepush.com\"\r\n        },\r\n        \"MaxenceDEVCMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"author\": [\r\n                    \"^maxencedev$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"MaxenceDEVCMS is a simple CMS for ecommerce, esport, landing page.\",\r\n            \"website\": \"https://cms.maxencedev.fr\"\r\n        },\r\n        \"Measured\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"tag\\\\.measured\\\\.com\"\r\n            ],\r\n            \"description\": \"Measured is an analytics platform to measure efficiency of marketing channels.\",\r\n            \"website\": \"https://www.measured.com\"\r\n        },\r\n        \"Medallia\": {\r\n            \"cats\": [\r\n                10,\r\n                13,\r\n                73\r\n            ],\r\n            \"cookies\": {\r\n                \"k_visit\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"k_track\",\r\n                \"kampyle\",\r\n                \"kampyle_common\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cf\\\\.kampyle\\\\.com/k_button\\\\.js\"\r\n            ],\r\n            \"description\": \"Medallia (formerly Kampyle) is a complete customer feedback platform that helps digital enterprises listen, understand, and act across all digital touch-points.\",\r\n            \"website\": \"https://www.medallia.com\"\r\n        },\r\n        \"Media.net\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.media\\\\.net/\"\r\n            ],\r\n            \"description\": \"Media.net is an advertising company focused on providing monetization products to digital publishers.\",\r\n            \"website\": \"https://www.media.net\"\r\n        },\r\n        \"MediaElement.js\": {\r\n            \"cats\": [\r\n                14\r\n            ],\r\n            \"js\": [\r\n                \"mejs\",\r\n                \"mejs.version\"\r\n            ],\r\n            \"description\": \"MediaElement.js is a set of custom Flash plugins that mimic the HTML5 MediaElement API for browsers that don't support HTML5 or don't support the media codecs.\",\r\n            \"website\": \"https://www.mediaelementjs.com\"\r\n        },\r\n        \"MediaWiki\": {\r\n            \"cats\": [\r\n                8\r\n            ],\r\n            \"js\": [\r\n                \"mw.util.toggletoc\",\r\n                \"wgtitle\",\r\n                \"wgversion\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c(?:a|img)[^\\u003e]+\\u003epowered by mediawiki\\u003c/a\\u003e\",\r\n                \"\\u003ca[^\\u003e]+/special:whatlinkshere/\",\r\n                \"\\u003cbody[^\\u003e]+class=\\\"mediawiki\\\"\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^mediawiki ?(.+)$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"MediaWiki is a free and open-source wiki engine.\",\r\n            \"website\": \"https://www.mediawiki.org\",\r\n            \"cpe\": \"cpe:2.3:a:mediawiki:mediawiki:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Mediavine\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"cookies\": {\r\n                \"mediavine_session\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"$mediavine.web\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.mediavine\\\\.com/\"\r\n            ],\r\n            \"description\": \"Mediavine is a full service ad management platform.\",\r\n            \"website\": \"https://www.mediavine.com\"\r\n        },\r\n        \"Medium\": {\r\n            \"cats\": [\r\n                11\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^medium$\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"medium\\\\.com\"\r\n            ],\r\n            \"implies\": [\r\n                \"Node.js\"\r\n            ],\r\n            \"description\": \"Medium is an online publishing platform.\",\r\n            \"website\": \"https://medium.com\"\r\n        },\r\n        \"Meebo\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"html\": [\r\n                \"(?:\\u003ciframe id=\\\"meebo-iframe\\\"|meebo\\\\('domready'\\\\))\"\r\n            ],\r\n            \"website\": \"https://www.meebo.com\"\r\n        },\r\n        \"Meeting Scheduler\": {\r\n            \"cats\": [\r\n                5,\r\n                72\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"bookmenow\\\\.info/(?:runtime|main).+\\\\.js\"\r\n            ],\r\n            \"description\": \"Meeting Scheduler is a schedule appointments widget.\",\r\n            \"website\": \"https://bookmenow.info\"\r\n        },\r\n        \"Megagroup CMS.S3\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"megacounter_key\"\r\n            ],\r\n            \"description\": \"Megagroup CMS.S3 management system is provided not as a “boxed product”, but as a separate service, that is, it works using SaaS technology. This means that you manage your site directly through your browser using an intuitive interface.\",\r\n            \"website\": \"https://megagroup.ru/cms\"\r\n        },\r\n        \"Meilisearch\": {\r\n            \"cats\": [\r\n                29\r\n            ],\r\n            \"js\": [\r\n                \"ac_apsulis_meilisearch\",\r\n                \"instantmeilisearch\",\r\n                \"meilisearch\",\r\n                \"meilisearchapierror\",\r\n                \"meilisearchtimeouterror\"\r\n            ],\r\n            \"description\": \"Meilisearch is a search engine created by Meili, a software development company based in France.\",\r\n            \"website\": \"https://www.meilisearch.com\"\r\n        },\r\n        \"Melis Platform\": {\r\n            \"cats\": [\r\n                1,\r\n                6,\r\n                11,\r\n                32\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- rendered with melis cms v2\",\r\n                \"\\u003c!-- rendered with melis platform\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^melis platform\\\\.\"\r\n                ],\r\n                \"powered-by\": [\r\n                    \"^melis cms\\\\.\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Apache HTTP Server\",\r\n                \"Laravel\",\r\n                \"MySQL\",\r\n                \"PHP\",\r\n                \"Symfony\",\r\n                \"Zend\"\r\n            ],\r\n            \"website\": \"https://www.melistechnology.com/\",\r\n            \"cpe\": \"cpe:2.3:a:melisplatform:melisplatform:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"MemberStack\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"memberstack\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"memberstack\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"memberstack\\\\.js\"\r\n            ],\r\n            \"description\": \"MemberStack is a no-code membership platform for Webflow.\",\r\n            \"website\": \"https://www.memberstack.io\"\r\n        },\r\n        \"Mention Me\": {\r\n            \"cats\": [\r\n                94\r\n            ],\r\n            \"js\": [\r\n                \"mentionme\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.mention-me\\\\.com/\"\r\n            ],\r\n            \"description\": \"Mention Me is a referral marketing platform for conversion-obsessed ecommerce brands.\",\r\n            \"website\": \"https://www.mention-me.com\"\r\n        },\r\n        \"Menufy Online Ordering\": {\r\n            \"cats\": [\r\n                93\r\n            ],\r\n            \"description\": \"Menufy is an online and mobile meal ordering service.\",\r\n            \"website\": \"https://restaurant.menufy.com\"\r\n        },\r\n        \"Menufy Website\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"views_website_layouts_footer_menufy\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"sitecontent-menufycom\\\\.netdna-ssl\\\\.com/\"\r\n            ],\r\n            \"description\": \"Menufy is an online and mobile meal ordering service.\",\r\n            \"website\": \"https://restaurant.menufy.com\"\r\n        },\r\n        \"Mercado Shops\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"_mshops_ga_gid\": \"\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"frontend-assets/mshops-web-home/vendor\"\r\n            ],\r\n            \"description\": \"Mercado Shops is an all-in-one ecommerce platform.\",\r\n            \"website\": \"https://www.mercadoshops.com\"\r\n        },\r\n        \"Mermaid\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"mermaid\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cdiv [^\\u003e]*class=[\\\"']mermaid[\\\"']\\u003e\\\\;confidence:90\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/mermaid(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"website\": \"https://mermaidjs.github.io/\"\r\n        },\r\n        \"MetaSlider\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/ml-slider(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"MetaSlider is a WordPress plugin for adding responsive sliders and carousels to websites.\",\r\n            \"website\": \"https://www.metaslider.com\"\r\n        },\r\n        \"Meteor\": {\r\n            \"cats\": [\r\n                12,\r\n                18\r\n            ],\r\n            \"js\": [\r\n                \"meteor\",\r\n                \"meteor.release\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]+__meteor-css__\"\r\n            ],\r\n            \"implies\": [\r\n                \"MongoDB\",\r\n                \"Node.js\"\r\n            ],\r\n            \"website\": \"https://www.meteor.com\"\r\n        },\r\n        \"Methode\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- methode uuid: \\\"[a-f\\\\d]+\\\" ?--\\u003e\"\r\n            ],\r\n            \"meta\": {\r\n                \"eomportal-id\": [\r\n                    \"\\\\d+\"\r\n                ],\r\n                \"eomportal-instanceid\": [\r\n                    \"\\\\d+\"\r\n                ],\r\n                \"eomportal-lastupdate\": [],\r\n                \"eomportal-loid\": [\r\n                    \"[\\\\d.]+\"\r\n                ],\r\n                \"eomportal-uuid\": [\r\n                    \"[a-f\\\\d]+\"\r\n                ]\r\n            },\r\n            \"website\": \"https://www.eidosmedia.com/\"\r\n        },\r\n        \"Metomic\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"metomic\\\\.js\"\r\n            ],\r\n            \"website\": \"https://metomic.io\"\r\n        },\r\n        \"Metrilo\": {\r\n            \"cats\": [\r\n                10,\r\n                75\r\n            ],\r\n            \"js\": [\r\n                \"metrilo\",\r\n                \"metrilobotregexp\",\r\n                \"metrilocookie\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.metrilo\\\\.com/\"\r\n            ],\r\n            \"description\": \"Metrilo is an ecommerce analytics, email marketing software provider.\",\r\n            \"website\": \"https://www.metrilo.com\"\r\n        },\r\n        \"MetroUI\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"js\": [\r\n                \"metro.version\"\r\n            ],\r\n            \"description\": \"MetroUI is an open-source frontend toolkit inspired by Microsoft Fluent (former Metro) design principles.\",\r\n            \"website\": \"https://github.com/olton/Metro-UI-CSS\"\r\n        },\r\n        \"Mews\": {\r\n            \"cats\": [\r\n                72\r\n            ],\r\n            \"js\": [\r\n                \"mews\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.mews\\\\.li/\"\r\n            ],\r\n            \"description\": \"Mews is a hospitalitions service that enables hotels to track their bookings.\",\r\n            \"website\": \"https://www.mews.com\"\r\n        },\r\n        \"Microsoft 365\": {\r\n            \"cats\": [\r\n                30,\r\n                75\r\n            ],\r\n            \"description\": \"Microsoft 365 is a line of subscription services offered by Microsoft as part of the Microsoft Office product line.\",\r\n            \"website\": \"https://www.microsoft.com/microsoft-365\"\r\n        },\r\n        \"Microsoft ASP.NET\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"cookies\": {\r\n                \"asp.net_sessionid\": \"\",\r\n                \"aspsession\": \"\"\r\n            },\r\n            \"headers\": {\r\n                \"set-cookie\": \"\\\\.aspnetcore\",\r\n                \"x-aspnet-version\": \"(.+)\\\\;version:\\\\1\",\r\n                \"x-powered-by\": \"^asp\\\\.net\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003cinput[^\\u003e]+name=\\\"__viewstate\"\r\n            ],\r\n            \"description\": \"ASP.NET is an open-source, server-side web-application framework designed for web development to produce dynamic web pages.\",\r\n            \"website\": \"https://www.asp.net\",\r\n            \"cpe\": \"cpe:2.3:a:microsoft:asp.net:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Microsoft Advertising\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"cookies\": {\r\n                \"_uetsid\": \"\\\\w+\",\r\n                \"_uetvid\": \"\\\\w+\"\r\n            },\r\n            \"js\": [\r\n                \"uet\",\r\n                \"uetq\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"bat\\\\.bing\\\\.com/bat\\\\.js\"\r\n            ],\r\n            \"description\": \"Microsoft Advertising is an online advertising platform developed by Microsoft.\",\r\n            \"website\": \"https://ads.microsoft.com\"\r\n        },\r\n        \"Microsoft Ajax Content Delivery Network\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"ajax\\\\.aspnetcdn\\\\.com/ajax/\"\r\n            ],\r\n            \"description\": \"Microsoft Ajax Content Delivery Network hosts popular third party JavaScript libraries such as jQuery and enables you to easily add them to your web applications.\",\r\n            \"website\": \"https://docs.microsoft.com/en-us/aspnet/ajax/cdn/overview\"\r\n        },\r\n        \"Microsoft Application Insights\": {\r\n            \"cats\": [\r\n                78\r\n            ],\r\n            \"js\": [\r\n                \"appinsights.addtelemetryinitializer\",\r\n                \"appinsights.severitylevel\",\r\n                \"appinsightssdk\"\r\n            ],\r\n            \"description\": \"Microsoft Application Insights is a feature of Azure Monitor that provides extensible application performance management (APM) and monitoring for live web apps.\",\r\n            \"website\": \"https://docs.microsoft.com/en-us/azure/azure-monitor/app/app-insights-overview\"\r\n        },\r\n        \"Microsoft Authentication\": {\r\n            \"cats\": [\r\n                69,\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"msal.authority\",\r\n                \"msal.authorityinstance\",\r\n                \"msalconfig.auth\"\r\n            ],\r\n            \"description\": \"The Microsoft Authentication Library for JavaScript enables both client-side and server-side JavaScript applications to authenticate users using Azure AD for work and school accounts (AAD), Microsoft personal accounts (MSA), and social identity providers like Facebook, Google, LinkedIn, Microsoft accounts, etc. through Azure AD B2C service.\",\r\n            \"website\": \"https://github.com/AzureAD/microsoft-authentication-library-for-js\"\r\n        },\r\n        \"Microsoft Azure Maps\": {\r\n            \"cats\": [\r\n                35,\r\n                79\r\n            ],\r\n            \"meta\": {\r\n                \"enabled-features\": [\r\n                    \"geojson_azure_maps\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Azure\"\r\n            ],\r\n            \"description\": \"Microsoft Azure Maps is a cloud-based mapping and geospatial platform provided by Microsoft.\",\r\n            \"website\": \"https://azure.microsoft.com/en-us/products/azure-maps/\"\r\n        },\r\n        \"Microsoft Clarity\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"clarity\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"www\\\\.clarity\\\\.ms/.+/([\\\\d.]+)/clarity\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Microsoft's Clarity is a analytics tool which provides website usage statistics, session recording, and heatmaps.\",\r\n            \"website\": \"https://clarity.microsoft.com\"\r\n        },\r\n        \"Microsoft Dynamics 365 Commerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.dynamics365commerce\\\\.ms/\"\r\n            ],\r\n            \"description\": \"Microsoft Dynamics 365 Commerce, an omnichannel ecommerce solution that allows you to build a website, connect physical and digital stores, track customer behaviours and requirements, deliver personalised experiences.\",\r\n            \"website\": \"https://dynamics.microsoft.com/commerce/overview\"\r\n        },\r\n        \"Microsoft Excel\": {\r\n            \"cats\": [\r\n                20\r\n            ],\r\n            \"html\": [\r\n                \"(?:\\u003chtml [^\\u003e]*xmlns:w=\\\"urn:schemas-microsoft-com:office:excel\\\"|\\u003c!--\\\\s*(?:start|end) of output from excel publish as web page wizard\\\\s*--\\u003e|\\u003cdiv [^\\u003e]*x:publishsource=\\\"?excel\\\"?)\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"microsoft excel( [\\\\d.]+)?\\\\;version:\\\\1\"\r\n                ],\r\n                \"progid\": [\r\n                    \"^excel\\\\.\"\r\n                ]\r\n            },\r\n            \"description\": \"Microsoft Excel is an electronic spreadsheet program used for storing, organizing, and manipulating data.\",\r\n            \"website\": \"https://office.microsoft.com/excel\",\r\n            \"cpe\": \"cpe:2.3:a:microsoft:excel:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Microsoft HTTPAPI\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"microsoft-httpapi(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"Microsoft HTTPAPI is a kernel-mode HTTP driver in the Windows operating system responsible for handling HTTP requests and responses with efficiency, scalability, and security.\",\r\n            \"website\": \"https://learn.microsoft.com/en-us/windows/win32/http/http-api-start-page\"\r\n        },\r\n        \"Microsoft PowerPoint\": {\r\n            \"cats\": [\r\n                20\r\n            ],\r\n            \"html\": [\r\n                \"(?:\\u003chtml [^\\u003e]*xmlns:w=\\\"urn:schemas-microsoft-com:office:powerpoint\\\"|\\u003clink rel=\\\"?presentation-xml\\\"? href=\\\"?[^\\\"]+\\\\.xml\\\"?\\u003e|\\u003co:presentationformat\\u003e[^\\u003c]+\\u003c/o:presentationformat\\u003e[^!]+\\u003co:slides\\u003e\\\\d+\\u003c/o:slides\\u003e(?:[^!]+\\u003co:version\\u003e([\\\\d.]+)\\u003c/o:version\\u003e)?)\\\\;version:\\\\1\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"microsoft powerpoint ( [\\\\d.]+)?\\\\;version:\\\\1\"\r\n                ],\r\n                \"progid\": [\r\n                    \"^powerpoint\\\\.\"\r\n                ]\r\n            },\r\n            \"description\": \"Microsoft PowerPoint is a tool to create presentations using simple drag and drop tools.\",\r\n            \"website\": \"https://office.microsoft.com/powerpoint\",\r\n            \"cpe\": \"cpe:2.3:a:microsoft:powerpoint:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Microsoft Publisher\": {\r\n            \"cats\": [\r\n                20\r\n            ],\r\n            \"html\": [\r\n                \"(?:\\u003chtml [^\\u003e]*xmlns:w=\\\"urn:schemas-microsoft-com:office:publisher\\\"|\\u003c!--[if pub]\\u003e\\u003cxml\\u003e)\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"microsoft publisher( [\\\\d.]+)?\\\\;version:\\\\1\"\r\n                ],\r\n                \"progid\": [\r\n                    \"^publisher\\\\.\"\r\n                ]\r\n            },\r\n            \"description\": \"Microsoft Publisher is an application that allows you to create professional documents such as newsletters, postcards, flyers, invitations, brochures.\",\r\n            \"website\": \"https://office.microsoft.com/publisher\",\r\n            \"cpe\": \"cpe:2.3:a:microsoft:publisher:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Microsoft SharePoint\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"_spbodyonloadcalled\",\r\n                \"spdesignerprogid\"\r\n            ],\r\n            \"headers\": {\r\n                \"microsoftsharepointteamservices\": \"^(.+)$\\\\;version:\\\\1\",\r\n                \"sharepointhealthscore\": \"\",\r\n                \"sprequestguid\": \"\",\r\n                \"x-sharepointhealthscore\": \"\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"microsoft sharepoint\"\r\n                ]\r\n            },\r\n            \"description\": \"SharePoint is a cloud-based collaborative platform to manage and share content.\",\r\n            \"website\": \"https://sharepoint.microsoft.com\",\r\n            \"cpe\": \"cpe:2.3:a:microsoft:sharepoint_server:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Microsoft Visual Studio\": {\r\n            \"cats\": [\r\n                47\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^microsoft\\\\svisual\\\\sstudio\"\r\n                ]\r\n            },\r\n            \"description\": \"Microsoft Visual Studio is an integrated development environment from Microsoft.\",\r\n            \"website\": \"https://visualstudio.microsoft.com\"\r\n        },\r\n        \"Microsoft Word\": {\r\n            \"cats\": [\r\n                20\r\n            ],\r\n            \"html\": [\r\n                \"(?:\\u003chtml [^\\u003e]*xmlns:w=\\\"urn:schemas-microsoft-com:office:word\\\"|\\u003cw:worddocument\\u003e|\\u003cdiv [^\\u003e]*class=\\\"?wordsection1[\\\" \\u003e]|\\u003cstyle[^\\u003e]*\\u003e[^\\u003e]*@page wordsection1)\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"microsoft word( [\\\\d.]+)?\\\\;version:\\\\1\"\r\n                ],\r\n                \"progid\": [\r\n                    \"^word\\\\.\"\r\n                ]\r\n            },\r\n            \"description\": \"MS Word is a word-processing program used primarily for creating documents.\",\r\n            \"website\": \"https://office.microsoft.com/word\",\r\n            \"cpe\": \"cpe:2.3:a:microsoft:word:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Miestro\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.miestro\\\\.com\"\r\n            ],\r\n            \"meta\": {\r\n                \"base_url\": [\r\n                    \".+\\\\.miestro\\\\.com\"\r\n                ]\r\n            },\r\n            \"description\": \"Miestro is an all-in-one ecommerce platform wich allow create online course and membership sites.\",\r\n            \"website\": \"https://miestro.com\"\r\n        },\r\n        \"Mighty Network\": {\r\n            \"cats\": [\r\n                2,\r\n                21\r\n            ],\r\n            \"js\": [\r\n                \"mighty.broadcastbotapp\"\r\n            ],\r\n            \"implies\": [\r\n                \"Ruby\",\r\n                \"Ruby on Rails\"\r\n            ],\r\n            \"description\": \"Mighty Networks is a platform that facilitates the creation and management of online communities, offering customisable websites, discussion forums, member profiles, events, courses, and multimedia content sharing for individuals and organisations.\",\r\n            \"website\": \"https://www.mightynetworks.com\"\r\n        },\r\n        \"Milestone CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^milestone\\\\scms\\\\s([\\\\d\\\\.]+)$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"description\": \"Milestone CMS is a SEO-first CMS that offers built-in advanced schema markups and Core Web Vitals conformance for improved search performance.\",\r\n            \"website\": \"https://www.milestoneinternet.com/products/milestone-cms\"\r\n        },\r\n        \"Milligram\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]+?href=\\\"[^\\\"]+milligram(?:\\\\.min)?\\\\.css\"\r\n            ],\r\n            \"website\": \"https://milligram.io\"\r\n        },\r\n        \"MinMaxify\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"minmaxify.checklimits\",\r\n                \"minmaxify.shop\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"MinMaxify is an app that allows Shopify store owners to set minimum and maximum values for customer orders built by Intillium.\",\r\n            \"website\": \"https://apps.shopify.com/order-limits-minmaxify\"\r\n        },\r\n        \"MindBody\": {\r\n            \"cats\": [\r\n                5,\r\n                72\r\n            ],\r\n            \"js\": [\r\n                \"healcodewidget\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\w+\\\\.healcode\\\\.com\"\r\n            ],\r\n            \"description\": \"Mindbody is a (SaaS) company that provides cloud-based online scheduling and other business management software for the wellness services industry.\",\r\n            \"website\": \"https://www.mindbodyonline.com\"\r\n        },\r\n        \"Mindbox\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"mindbox\",\r\n                \"mindboxbatchedmodulesinitialized\",\r\n                \"mindboxendpointsettings\"\r\n            ],\r\n            \"description\": \"Mindbox is a marketing automation platform.\",\r\n            \"website\": \"https://mindbox.ru\"\r\n        },\r\n        \"Minero.cc\": {\r\n            \"cats\": [\r\n                56\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//minero\\\\.cc/lib/minero(?:-miner|-hidden)?\\\\.min\\\\.js\"\r\n            ],\r\n            \"description\": \"Minero.cc is a bot that helps run crypto mining application.\",\r\n            \"website\": \"https://minero.cc/\"\r\n        },\r\n        \"MiniServ\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"miniserv/([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Webmin\"\r\n            ],\r\n            \"website\": \"https://github.com/webmin/webmin/blob/master/miniserv.pl\"\r\n        },\r\n        \"Mint\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"mint\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"mint/\\\\?js\"\r\n            ],\r\n            \"description\": \"Mint is an extensible, self-hosted web site analytics program.\",\r\n            \"website\": \"https://haveamint.com\"\r\n        },\r\n        \"Mintlify\": {\r\n            \"cats\": [\r\n                57,\r\n                4\r\n            ],\r\n            \"js\": [\r\n                \"__next_data__.props.pageprops.favicons.browserconfig\"\r\n            ],\r\n            \"description\": \"Mintlify is a platform that enables developers to create and maintain documentation for their projects using Markdown format and automatically generate and deploy static websites via a continuous integration and deployment system.\",\r\n            \"website\": \"https://mintlify.com\"\r\n        },\r\n        \"Miso\": {\r\n            \"cats\": [\r\n                29,\r\n                76\r\n            ],\r\n            \"description\": \"Miso is a real-time personalisation APIs for search, recommendation, and marketing.\",\r\n            \"website\": \"https://miso.ai\"\r\n        },\r\n        \"Misskey\": {\r\n            \"cats\": [\r\n                2\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- thank you for using misskey! @syuilo --\\u003e\"\r\n            ],\r\n            \"meta\": {\r\n                \"application-name\": [\r\n                    \"misskey\"\r\n                ]\r\n            },\r\n            \"description\": \"Misskey is a distributed microblogging platform.\",\r\n            \"website\": \"https://join.misskey.page/\"\r\n        },\r\n        \"Mittwald\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"description\": \"Mittwald is a web hosting agency, established in 2003 in Espelkamp, Germany\",\r\n            \"website\": \"https://www.mittwald.de\"\r\n        },\r\n        \"Miva\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"mivajs\",\r\n                \"mivajs.page\",\r\n                \"mivajs.product_code\",\r\n                \"mivajs.product_id\",\r\n                \"mivajs.screen\",\r\n                \"mivajs.store_code\",\r\n                \"mivavm_api\",\r\n                \"mivavm_version\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-disposition\": \"filename=(?:mvga\\\\.js|mivaevents\\\\.js)\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"mvga\\\\.js\"\r\n            ],\r\n            \"description\": \"Miva is a privately owned ecommerce shopping cart software and hosting company with headquarters in San Diego.\",\r\n            \"website\": \"https://www.miva.com\"\r\n        },\r\n        \"Mixin\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"mixin_hash_id\": []\r\n            },\r\n            \"description\": \"Mixin is a highly-available ecommerce cloud.\",\r\n            \"website\": \"https://mixin.ir\"\r\n        },\r\n        \"Mixpanel\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"mixpanel\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"api\\\\.mixpanel\\\\.com/track\",\r\n                \"cdn\\\\.mxpnl\\\\.com/libs/mixpanel\\\\-([0-9.]+)\\\\.min\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Mixpanel provides a business analytics service. It tracks user interactions with web and mobile applications and provides tools for targeted communication with them. Its toolset contains in-app A/B tests and user survey forms.\",\r\n            \"website\": \"https://mixpanel.com\"\r\n        },\r\n        \"MizbanCloud\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^mizbancloud$\"\r\n            },\r\n            \"description\": \"MizbanCloud is a total cloud infrastructure solutions, CDN service provider and Cloud Computing Services, Cloud DNS, Cloud Security, VoD Streaming Service, Live Streaming, Cloud Object Storage.\",\r\n            \"website\": \"https://mizbancloud.com\"\r\n        },\r\n        \"MkDocs\": {\r\n            \"cats\": [\r\n                4\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^mkdocs-([\\\\d.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Python\"\r\n            ],\r\n            \"description\": \"MkDocs is a static site generator, used for building project documentation.\",\r\n            \"website\": \"https://www.mkdocs.org/\"\r\n        },\r\n        \"MoEngage\": {\r\n            \"cats\": [\r\n                32,\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"downloadmoengage\",\r\n                \"moengage\",\r\n                \"moengage_api_key\",\r\n                \"moengage_object\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.moengage\\\\.\\\\w+\"\r\n            ],\r\n            \"description\": \"MoEngage is an intelligent customer engagement platform for the customer-obsessed marketer.\",\r\n            \"website\": \"https://www.moengage.com\"\r\n        },\r\n        \"MobX\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"__mobxglobal\",\r\n                \"__mobxglobals\",\r\n                \"__mobxinstancecount\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:/([\\\\d\\\\.]+))?/mobx(?:\\\\.[a-z]+){0,2}\\\\.js(?:$|\\\\?)\\\\;version:\\\\1\"\r\n            ],\r\n            \"website\": \"https://mobx.js.org\"\r\n        },\r\n        \"Mobify\": {\r\n            \"cats\": [\r\n                6,\r\n                26\r\n            ],\r\n            \"js\": [\r\n                \"mobify\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"mobify\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"//a\\\\.mobify\\\\.com/\",\r\n                \"//cdn\\\\.mobify\\\\.com/\"\r\n            ],\r\n            \"description\": \"Mobify is a web storefront platform for headless commerce.\",\r\n            \"website\": \"https://www.mobify.com\"\r\n        },\r\n        \"Mobirise\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- site made with mobirise website builder v([\\\\d.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^mobirise v([\\\\d.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"Mobirise is a free offline app for Windows and Mac to easily create small/medium websites, landing pages, online resumes and portfolios.\",\r\n            \"website\": \"https://mobirise.com\"\r\n        },\r\n        \"MochiKit\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"mochikit\",\r\n                \"mochikit.mochikit.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"mochikit(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"website\": \"https://mochi.github.io/mochikit/\"\r\n        },\r\n        \"MochiWeb\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"mochiweb(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"website\": \"https://github.com/mochi/mochiweb\",\r\n            \"cpe\": \"cpe:2.3:a:mochiweb_project:mochiweb:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Modernizr\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"modernizr._version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"([\\\\d.]+)?/modernizr(?:\\\\.([\\\\d.]+))?.*\\\\.js\\\\;version:\\\\1?\\\\1:\\\\2\"\r\n            ],\r\n            \"description\": \"Modernizr is a JavaScript library that detects the features available in a user's browser.\",\r\n            \"website\": \"https://modernizr.com\"\r\n        },\r\n        \"ModiFace\": {\r\n            \"cats\": [\r\n                105\r\n            ],\r\n            \"js\": [\r\n                \"initmodiface\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.modiface\\\\.com\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"\\\\.modiface\\\\.com/\"\r\n            ],\r\n            \"description\": \"ModiFace is a provider of Augmented Reality technology for the beauty industry.\",\r\n            \"website\": \"https://modiface.com\"\r\n        },\r\n        \"Modified\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"\\\\(c\\\\) by modified ecommerce shopsoftware ------ http://www\\\\.modified-shop\\\\.org\"\r\n                ]\r\n            },\r\n            \"website\": \"https://www.modified-shop.org/\"\r\n        },\r\n        \"Module Federation\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"scripts\": [\r\n                \"container initialization failed as it has already been initialized with a different share scope\",\r\n                \"data-webpack\\\\;confidence:50\"\r\n            ],\r\n            \"implies\": [\r\n                \"Webpack\"\r\n            ],\r\n            \"description\": \"Module Federation is a webpack technology for dynamically loading parts of other independently deployed builds.\",\r\n            \"website\": \"https://webpack.js.org/concepts/module-federation/\"\r\n        },\r\n        \"Moguta.CMS\": {\r\n            \"cats\": [\r\n                1,\r\n                6\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]+href=[\\\"'][^\\\"]+mg-(?:core|plugins|templates)/\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"mg-(?:core|plugins|templates)/\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://moguta.ru\"\r\n        },\r\n        \"MoinMoin\": {\r\n            \"cats\": [\r\n                8\r\n            ],\r\n            \"cookies\": {\r\n                \"moin_session\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"show_switch2gui\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"moin(?:_static(\\\\d)(\\\\d)(\\\\d)|.+)/common/js/common\\\\.js\\\\;version:\\\\1.\\\\2.\\\\3\"\r\n            ],\r\n            \"implies\": [\r\n                \"Python\"\r\n            ],\r\n            \"description\": \"MoinMoin is a wiki engine implemented in Python.\",\r\n            \"website\": \"https://moinmo.in\",\r\n            \"cpe\": \"cpe:2.3:a:moinmo:moinmoin:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Mojolicious\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^mojolicious\",\r\n                \"x-powered-by\": \"mojolicious\"\r\n            },\r\n            \"implies\": [\r\n                \"Perl\"\r\n            ],\r\n            \"website\": \"https://mojolicio.us\"\r\n        },\r\n        \"Mokka\": {\r\n            \"cats\": [\r\n                41,\r\n                91\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"revoiframe\\\\.js\"\r\n            ],\r\n            \"description\": \"Mokka is a Buy Now Pay Later solution that connects target customer acquisition and settlement costs through marketing and promotion.\",\r\n            \"website\": \"https://mokka.ro\"\r\n        },\r\n        \"Mollie\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"mollie\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/mollie-payments-for-woocommerce/\"\r\n            ],\r\n            \"description\": \"Mollie is a payment provider for Belgium and the Netherlands, offering payment methods such as credit card, iDEAL, Bancontact/Mister cash, PayPal, SCT, SDD, and others.\",\r\n            \"website\": \"https://www.mollie.com\"\r\n        },\r\n        \"Mollom\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cimg[^\\u003e]+\\\\.mollom\\\\.com\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"mollom(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"website\": \"https://mollom.com\",\r\n            \"cpe\": \"cpe:2.3:a:acquia:mollom:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Moment Timezone\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"moment-timezone(?:-data)?(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Moment.js\"\r\n            ],\r\n            \"website\": \"https://momentjs.com/timezone/\"\r\n        },\r\n        \"Moment.js\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"moment\",\r\n                \"moment.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"moment(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"description\": \"Moment.js is a free and open-source JavaScript library that removes the need to use the native JavaScript Date object directly.\",\r\n            \"website\": \"https://momentjs.com\",\r\n            \"cpe\": \"cpe:2.3:a:momentjs:moment:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Monaco Editor\": {\r\n            \"cats\": [\r\n                24\r\n            ],\r\n            \"css\": [\r\n                \"\\\\.monaco-editor\"\r\n            ],\r\n            \"js\": [\r\n                \"apex.libversions.monacoeditor\",\r\n                \"monaco.editor\",\r\n                \"monacoenvironment\"\r\n            ],\r\n            \"description\": \"Monaco Editor is the code editor that powers VS Code. Monaco Editor is a tool in the text editor category of a tech stack.\",\r\n            \"website\": \"https://microsoft.github.io/monaco-editor/\"\r\n        },\r\n        \"Mondial Relay\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Mondial Relay is a parcel shipping and delivery service in Europe.\",\r\n            \"website\": \"https://www.mondialrelay.com\"\r\n        },\r\n        \"Mondo Media\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"mondo shop\"\r\n                ]\r\n            },\r\n            \"website\": \"https://mondo-media.de\"\r\n        },\r\n        \"Moneris\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"initialserverdata.monerisconfiguration\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.moneris\\\\.com\"\r\n            },\r\n            \"description\": \"Moneris (formerly Moneris Solutions) is Canada's largest financial technology company that specialises in payment processing.\",\r\n            \"website\": \"https://www.moneris.com\"\r\n        },\r\n        \"Moneris Payment Gateway\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"wc_moneris_hosted_tokenization_params\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/woocommerce-gateway-moneris/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Moneris\",\r\n                \"WooCommerce\"\r\n            ],\r\n            \"description\": \"Moneris is Canada’s leading processor of Debit and credit card payments. This WooCommerce extension automatically adds moneris payment gateway to your woocommerce website and allows you to keep the customer on your site for the checkout process.\",\r\n            \"website\": \"https://wordpress.org/plugins/wc-moneris-payment-gateway\"\r\n        },\r\n        \"Monetate\": {\r\n            \"cats\": [\r\n                74,\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"monetate\",\r\n                \"monetateq\",\r\n                \"monetatet\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.monetate\\\\.net\"\r\n            ],\r\n            \"description\": \"Monetate is a company that specializes in providing personalisation and customer experience optimisation solutions to businesses.\",\r\n            \"website\": \"https://monetate.com\"\r\n        },\r\n        \"MongoDB\": {\r\n            \"cats\": [\r\n                34\r\n            ],\r\n            \"description\": \"MongoDB is a document-oriented NoSQL database used for high volume data storage.\",\r\n            \"website\": \"https://www.mongodb.org\",\r\n            \"cpe\": \"cpe:2.3:a:mongodb:mongodb:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Mongrel\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"mongrel\"\r\n            },\r\n            \"implies\": [\r\n                \"Ruby\"\r\n            ],\r\n            \"website\": \"https://mongrel2.org\",\r\n            \"cpe\": \"cpe:2.3:a:zed_shaw:mongrel:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Monkey HTTP Server\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"monkey/?([\\\\d.]+)?\\\\;version:\\\\1\"\r\n            },\r\n            \"website\": \"https://monkey-project.com\"\r\n        },\r\n        \"Mono\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"mono\"\r\n            },\r\n            \"website\": \"https://mono-project.com\",\r\n            \"cpe\": \"cpe:2.3:a:mono:mono:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Mono.net\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"_monotracker\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"monotracker(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Matomo Analytics\"\r\n            ],\r\n            \"website\": \"https://www.mono.net/en\"\r\n        },\r\n        \"Monsido\": {\r\n            \"cats\": [\r\n                10,\r\n                67,\r\n                68\r\n            ],\r\n            \"js\": [\r\n                \"_monsido\",\r\n                \"monsido_tracking\"\r\n            ],\r\n            \"description\": \"Monsido provides a website management platform that automates processes, ensures regulatory compliance, improves collaboration in web and marketing teams, and streamlines reporting.\",\r\n            \"website\": \"https://monsido.com\"\r\n        },\r\n        \"MonsterInsights\": {\r\n            \"cats\": [\r\n                87,\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"monsterinsights\",\r\n                \"monsterinsights_frontend\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/google-analytics-for-wordpress/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"MonsterInsights is the most popular Google Analytics plugin for WordPress.\",\r\n            \"website\": \"https://www.monsterinsights.com\"\r\n        },\r\n        \"MooTools\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"mootools\",\r\n                \"mootools.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"mootools.*\\\\.js\"\r\n            ],\r\n            \"website\": \"https://mootools.net\"\r\n        },\r\n        \"Moodle\": {\r\n            \"cats\": [\r\n                21\r\n            ],\r\n            \"cookies\": {\r\n                \"moodleid_\": \"\",\r\n                \"moodlesession\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"m.core\",\r\n                \"y.moodle\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cimg[^\\u003e]+moodlelogo\"\r\n            ],\r\n            \"meta\": {\r\n                \"keywords\": [\r\n                    \"^moodle\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Moodle is a free and open-source Learning Management System (LMS) written in PHP and distributed under the GNU General Public License.\",\r\n            \"website\": \"https://moodle.org\",\r\n            \"cpe\": \"cpe:2.3:a:moodle:moodle:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Moon\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/moon(?:\\\\.min)?\\\\.js$\"\r\n            ],\r\n            \"website\": \"https://kbrsh.github.io/moon/\"\r\n        },\r\n        \"Moove GDPR Consent\": {\r\n            \"cats\": [\r\n                67,\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"moove_frontend_gdpr_scripts\"\r\n            ],\r\n            \"description\": \"Moove GDPR Consent is a GDPR Cookie Compliance plugin for Wordpress.\",\r\n            \"website\": \"https://www.mooveagency.com/wordpress/gdpr-cookie-compliance-plugin\"\r\n        },\r\n        \"Mopinion\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"js\": [\r\n                \"pastease\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"deploy\\\\.mopinion\\\\.com/\"\r\n            ],\r\n            \"description\": \"Mopinion is an all-in-one user feedback platform that helps digital enterprises listen, understand, and act across all digital touchpoints.\",\r\n            \"website\": \"https://mopinion.com\"\r\n        },\r\n        \"Moshimo\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.moshimo\\\\.com/af/\"\r\n            ],\r\n            \"description\": \"Moshimo is a free affiliate service for individuals.\",\r\n            \"website\": \"https://af.moshimo.com\"\r\n        },\r\n        \"Motherhost\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"headers\": {\r\n                \"platform\": \"^motherhost$\"\r\n            },\r\n            \"description\": \"Motherhost is a web hosting company based in India that offers a range of hosting services, including shared hosting, VPS hosting, dedicated servers, and cloud hosting.\",\r\n            \"website\": \"https://www.motherhost.com\"\r\n        },\r\n        \"MotoCMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink [^\\u003e]*href=\\\"[^\\u003e]*\\\\/mt-content\\\\/[^\\u003e]*\\\\.css\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/mt-includes/js/website(?:assets)?\\\\.(?:min)?\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"AngularJS\",\r\n                \"PHP\",\r\n                \"jQuery\"\r\n            ],\r\n            \"website\": \"https://motocms.com\"\r\n        },\r\n        \"Mouse Flow\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"_mfq\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.mouseflow\\\\.com\"\r\n            ],\r\n            \"website\": \"https://mouseflow.com/\"\r\n        },\r\n        \"Movable Ink\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"movableinktrack\"\r\n            ],\r\n            \"description\": \"Movable Ink is a technology company that allows marketers to change emails after they have been sent out.\",\r\n            \"website\": \"https://movableink.com\"\r\n        },\r\n        \"Movable Type\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"movable type\"\r\n                ]\r\n            },\r\n            \"website\": \"https://movabletype.org\",\r\n            \"cpe\": \"cpe:2.3:a:sixapart:movable_type:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Mozard Suite\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"author\": [\r\n                    \"mozard\"\r\n                ]\r\n            },\r\n            \"website\": \"https://mozard.nl\"\r\n        },\r\n        \"Mulberry\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"mulberry.cta\",\r\n                \"mulberryshop\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.getmulberry\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Cart Functionality\"\r\n            ],\r\n            \"description\": \"Mulberry is a developer of personalised product protection solutions used to help brands unlock additional revenue.\",\r\n            \"website\": \"https://www.getmulberry.com\"\r\n        },\r\n        \"Mura CMS\": {\r\n            \"cats\": [\r\n                1,\r\n                11\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"mura\\\\scms\\\\s([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Adobe ColdFusion\"\r\n            ],\r\n            \"description\": \"Mura CMS is the cloud-based, API driven, content management platform.\",\r\n            \"website\": \"https://www.getmura.com\",\r\n            \"cpe\": \"cpe:2.3:a:blueriver:muracms:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Mustache\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"mustache.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"mustache(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"description\": \"Mustache is a web template system.\",\r\n            \"website\": \"https://mustache.github.io\"\r\n        },\r\n        \"Muuri\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"muuri\"\r\n            ],\r\n            \"description\": \"Muuri is a JavaScript layout engine that allows you to build all kinds of layouts and make them responsive, sortable, filterable, draggable and/or animated.\",\r\n            \"website\": \"https://muuri.dev\"\r\n        },\r\n        \"My Flying Box\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"My Flying Box is an international parcel shipping company.\",\r\n            \"website\": \"https://www.myflyingbox.com/\"\r\n        },\r\n        \"My Food Link\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"myfoodlink\",\r\n                \"myfoodlink\"\r\n            ],\r\n            \"description\": \"My Food Link provides a fully hosted specialist online supermarket ecommerce platform to supermarkets and grocers.\",\r\n            \"website\": \"https://www.myfoodlink.com.au\"\r\n        },\r\n        \"MyBB\": {\r\n            \"cats\": [\r\n                2\r\n            ],\r\n            \"cookies\": {\r\n                \"mybb[lastactive]\": \"\",\r\n                \"mybb[lastvisit]\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"mybb\",\r\n                \"mybbeditor\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"MyBB is a free and open-source forum software written in PHP.\",\r\n            \"website\": \"https://mybb.com\",\r\n            \"cpe\": \"cpe:2.3:a:mybb:mybb:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"MyBlogLog\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"pub\\\\.mybloglog\\\\.com\"\r\n            ],\r\n            \"website\": \"https://www.mybloglog.com\"\r\n        },\r\n        \"MyCashFlow\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"headers\": {\r\n                \"x-mcf-id\": \"\"\r\n            },\r\n            \"website\": \"https://www.mycashflow.fi/\"\r\n        },\r\n        \"MyFonts\": {\r\n            \"cats\": [\r\n                17\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.myfonts\\\\.net\"\r\n            },\r\n            \"description\": \"MyFonts is a digital fonts distributor, based in Woburn, Massachusetts.\",\r\n            \"website\": \"https://www.myfonts.com\"\r\n        },\r\n        \"MyLiveChat\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"mylivechat.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"mylivechat\\\\.com/\"\r\n            ],\r\n            \"description\": \"MyLiveChat is a live chat developed by CuteSoft.\",\r\n            \"website\": \"https://mylivechat.com\"\r\n        },\r\n        \"MyOnlineStore\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"mijnwebwinkel\"\r\n                ]\r\n            },\r\n            \"description\": \"MyOnlineStore is a web shop system in the Netherlands.\",\r\n            \"website\": \"https://www.myonlinestore.com/ \"\r\n        },\r\n        \"MySQL\": {\r\n            \"cats\": [\r\n                34\r\n            ],\r\n            \"description\": \"MySQL is an open-source relational database management system.\",\r\n            \"website\": \"https://mysql.com\",\r\n            \"cpe\": \"cpe:2.3:a:mysql:mysql:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"MySiteNow\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"meta\": {\r\n                \"app-platform\": [\r\n                    \"^mysitenow$\"\r\n                ]\r\n            },\r\n            \"description\": \"MySiteNow provides cloud-based web development services, allowing users to create HTML5 websites and mobile sites.\",\r\n            \"website\": \"https://mysitenow.gr\"\r\n        },\r\n        \"MyWebsite\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"systemid\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"ionos mywebsite\\\\;version:8\"\r\n                ]\r\n            },\r\n            \"description\": \"MyWebsite is website builder designed for easy editing and fast results.\",\r\n            \"website\": \"https://www.ionos.com\"\r\n        },\r\n        \"MyWebsite Creator\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"mywebsite-editor\\\\.com\",\r\n                \"website-editor\\\\.net\"\r\n            ],\r\n            \"implies\": [\r\n                \"Duda\"\r\n            ],\r\n            \"description\": \"MyWebsite Creator is website builder designed for easy editing and fast results.\",\r\n            \"website\": \"https://www.ionos.com\"\r\n        },\r\n        \"MyWebsite Now\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"mywebsite now\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"GraphQL\",\r\n                \"Node.js\",\r\n                \"React\"\r\n            ],\r\n            \"description\": \"MyWebsite Now is a website builder designed for getting online quickly.\",\r\n            \"website\": \"https://www.ionos.com\"\r\n        },\r\n        \"Myhkw player\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"myhk_player_songid\",\r\n                \"myhkplayerlist\"\r\n            ],\r\n            \"description\": \"Myhkw player is a website music player.\",\r\n            \"website\": \"https://myhkw.cn\"\r\n        },\r\n        \"Mynetcap\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"mynetcap\"\r\n                ]\r\n            },\r\n            \"website\": \"https://www.netcap-creation.fr\"\r\n        },\r\n        \"Mysitefy\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"description\": \"Mysitefy is a digital platform for B2B enterprises. It provides companies with a closed-loop digital application system from website building to marketing, to customer and order management.\",\r\n            \"website\": \"https://www.mysitefy.com\"\r\n        },\r\n        \"MysteryThemes News Portal\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/news-portal(?:-pro)?/.+np-custom-scripts\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"News Portal is the ultimate magazine WordPress theme by MysteryThemes.\",\r\n            \"website\": \"https://mysterythemes.com/wp-themes/news-portal\"\r\n        },\r\n        \"MysteryThemes News Portal Lite\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"description\": \"News Portal Lite is child theme of News Portal ultimate magazine WordPress theme by MysteryThemes.\",\r\n            \"website\": \"https://mysterythemes.com/wp-themes/news-portal-lite\"\r\n        },\r\n        \"MysteryThemes News Portal Mag\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"description\": \"News Portal Mag is child theme of News Portal ultimate magazine WordPress theme by MysteryThemes.\",\r\n            \"website\": \"https://mysterythemes.com/wp-themes/news-portal-mag\"\r\n        },\r\n        \"NACEX\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"NACEX is an express courier company in Spain, Andorra and Portugal.\",\r\n            \"website\": \"https://www.nacex.es\"\r\n        },\r\n        \"NEO - Omnichannel Commerce Platform\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"headers\": {\r\n                \"powered\": \"jet-neo\"\r\n            },\r\n            \"description\": \"NEO is an ecommerce software that manages multiple online stores.\",\r\n            \"website\": \"https://www.jetecommerce.com.br\"\r\n        },\r\n        \"NSW Design System\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"js\": [\r\n                \"nsw.initsite\"\r\n            ],\r\n            \"website\": \"https://www.digital.nsw.gov.au/digital-design-system\"\r\n        },\r\n        \"NTLM\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"headers\": {\r\n                \"www-authenticate\": \"^ntlm\"\r\n            },\r\n            \"description\": \"NTLM is an authentication method commonly used by Windows servers\",\r\n            \"website\": \"https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-ntht/\"\r\n        },\r\n        \"NVD3\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"nv.addgraph\",\r\n                \"nv.version\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]* href=[^\\u003e]+nv\\\\.d3(?:\\\\.min)?\\\\.css\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"nv\\\\.d3(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"D3\"\r\n            ],\r\n            \"description\": \"NVD3 is a JavaScript visualisation library that is a free open-source tool.\",\r\n            \"website\": \"https://nvd3.org\"\r\n        },\r\n        \"Nacelle\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"__next_data__.props.pageprops.page.nacelleentryid\",\r\n                \"nacelleeventdata\"\r\n            ],\r\n            \"implies\": [\r\n                \"GraphQL\"\r\n            ],\r\n            \"description\": \"Nacelle is a headless ecommerce platform.\",\r\n            \"website\": \"https://nacelle.com\"\r\n        },\r\n        \"NagaCommerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^nagacommerce$\"\r\n                ]\r\n            },\r\n            \"description\": \"NagaCommerce is an ecommerce platform provided as a service.\",\r\n            \"website\": \"https://www.nagacommerce.com\"\r\n        },\r\n        \"Nagich\": {\r\n            \"cats\": [\r\n                68\r\n            ],\r\n            \"js\": [\r\n                \"interdeal.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.nagich\\\\.co(?:m|\\\\.il)/core/([\\\\d.]+)/accessibility\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Nagich is a website accessibility overlay provider from Israel.\",\r\n            \"website\": \"https://www.nagich.co.il\"\r\n        },\r\n        \"NagishLi\": {\r\n            \"cats\": [\r\n                68\r\n            ],\r\n            \"js\": [\r\n                \"$nagishli\",\r\n                \"initnagishli\",\r\n                \"nagishli_commons.version\"\r\n            ],\r\n            \"description\": \"NagishLi is a free accessibility plugin from Localize*, created to provide an equal oppurtunity for webmasters to make their website accessible and make the internet more accessible for people with disability.\",\r\n            \"website\": \"https://www.nagish.li\"\r\n        },\r\n        \"Naive UI\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"implies\": [\r\n                \"TypeScript\",\r\n                \"Vue.js\"\r\n            ],\r\n            \"description\": \"Naive UI is a Vue.js UI library written in TypeScript, offering more than 80 treeshakable components.\",\r\n            \"website\": \"https://www.naiveui.com\"\r\n        },\r\n        \"Najva\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"najva.identifyemailsubscriber\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"app\\\\.najva\\\\.com/\"\r\n            ],\r\n            \"description\": \"Najva is a retention marketing solution that offers push notification and email marketing.\",\r\n            \"website\": \"https://www.najva.com\"\r\n        },\r\n        \"Narrativ\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"static\\\\.narrativ\\\\.com/\"\r\n            ],\r\n            \"description\": \"Narrativ is a subscription technology platform for brands to acquire new customers through trusted creators.\",\r\n            \"website\": \"https://narrativ.com/\"\r\n        },\r\n        \"Narvar\": {\r\n            \"cats\": [\r\n                102,\r\n                99\r\n            ],\r\n            \"js\": [\r\n                \"narvar\",\r\n                \"narvarjs_url\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.narvar\\\\.com\"\r\n            },\r\n            \"description\": \"Narvar is a customer experience platform that helps retailers inspire long-term customer loyalty, at all steps of the post-purchase journey.\",\r\n            \"website\": \"https://corp.narvar.com\"\r\n        },\r\n        \"NationBuilder\": {\r\n            \"cats\": [\r\n                1,\r\n                53\r\n            ],\r\n            \"js\": [\r\n                \"nb.fbappid\",\r\n                \"nb.liquid\"\r\n            ],\r\n            \"description\": \"NationBuilder is a Los Angeles based technology start-up that develops content management and customer relationship management (CRM) software.\",\r\n            \"website\": \"https://nationbuilder.com\"\r\n        },\r\n        \"Nativo\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"ntvconfig\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.ntv\\\\.io/\",\r\n                \"\\\\.postrelease\\\\.com/\"\r\n            ],\r\n            \"description\": \"Nativo is an advertising technology provider.\",\r\n            \"website\": \"https://www.nativo.com\"\r\n        },\r\n        \"Navegg\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"tag\\\\.navdmp\\\\.com\"\r\n            ],\r\n            \"website\": \"https://www.navegg.com/\"\r\n        },\r\n        \"Naver Analytics\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"wcs\\\\.naver\\\\.net/wcslog\\\\.js\"\r\n            ],\r\n            \"meta\": {\r\n                \"naver-site-verification\": []\r\n            },\r\n            \"description\": \"Naver Analytics is a Korean based analytics service.\",\r\n            \"website\": \"https://analytics.naver.com\"\r\n        },\r\n        \"Naver Maps\": {\r\n            \"cats\": [\r\n                35\r\n            ],\r\n            \"js\": [\r\n                \"naver.maps\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"openapi\\\\.map\\\\.naver\\\\.com/openapi/v([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Naver Maps help develop location-based services which provided by Naver.\",\r\n            \"website\": \"https://www.ncloud.com/product/applicationService/maps\"\r\n        },\r\n        \"Naver RUA\": {\r\n            \"cats\": [\r\n                92,\r\n                78\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"rua-api\\\\.ncloud\\\\.com/\"\r\n            ],\r\n            \"description\": \"Naver RUA (Real User Analytics) collects performance data from real users to analyze the speed of your website by country, operating system, and browser.\",\r\n            \"website\": \"https://analytics.naver.com\"\r\n        },\r\n        \"Navidium Shipping Protection\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"nvdshop\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^.*/navidium-extension-checker\\\\.js$\"\r\n            ],\r\n            \"description\": \"Navidium is a shipping insurance company that covers packages that are lost, stolen, or damaged in transit. Navidium Shipping Protection is an optional shipping protection service where, in the event of an incident (the order is damaged, lost, or stolen during transit), we will immediately re-ship any damaged, lost, or stolen products.\",\r\n            \"website\": \"https://navidiumapp.com\"\r\n        },\r\n        \"Neat A/B testing\": {\r\n            \"cats\": [\r\n                74,\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.neatab\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Neat A/B Testing is a Shopify app built by NeatShift.\",\r\n            \"website\": \"https://neatab.com\"\r\n        },\r\n        \"Neon CRM\": {\r\n            \"cats\": [\r\n                53,\r\n                111\r\n            ],\r\n            \"js\": [\r\n                \"_neoncrm_ga\",\r\n                \"neoncrm_email_ajax_object\",\r\n                \"neonpaycard\"\r\n            ],\r\n            \"description\": \"Neon CRM, a Neon One company, is a cloud-based customer relationship management (CRM) software suite for nonprofits of all sizes. Applications include fundraising management, donor management, membership management, event registration and management, customised reporting, and more.\",\r\n            \"website\": \"https://neonone.com\"\r\n        },\r\n        \"Neos CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"x-flow-powered\": \"neos/?(.+)?$\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Neos Flow\"\r\n            ],\r\n            \"website\": \"https://neos.io\"\r\n        },\r\n        \"Neos Flow\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"headers\": {\r\n                \"x-flow-powered\": \"flow/?(.+)?$\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://flow.neos.io\"\r\n        },\r\n        \"Nepso\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-cms\": \"nepso\"\r\n            },\r\n            \"website\": \"https://www.nepso.com\"\r\n        },\r\n        \"Nestify\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"headers\": {\r\n                \"x-nestify-cache\": \"\"\r\n            },\r\n            \"description\": \"Nestify is a fully managed WordPress hosting platform that runs on AWS graviton processors.\",\r\n            \"website\": \"https://nestify.io\"\r\n        },\r\n        \"NetSuite\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"ns_ver\": \"\"\r\n            },\r\n            \"website\": \"https://netsuite.com\"\r\n        },\r\n        \"Netcore Cloud\": {\r\n            \"cats\": [\r\n                97,\r\n                32\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.netcoresmartech\\\\.com/\"\r\n            ],\r\n            \"description\": \"Netcore Cloud is a globally recognised marketing technology SaaS company.\",\r\n            \"website\": \"https://netcorecloud.com\"\r\n        },\r\n        \"Netdeal\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"netdealbuildnumber\",\r\n                \"netdealjs.paywall\",\r\n                \"netdealstartsession\"\r\n            ],\r\n            \"description\": \"Netdeal is a marketing automation platform.\",\r\n            \"website\": \"https://www.netdeal.com.br\"\r\n        },\r\n        \"Netlify\": {\r\n            \"cats\": [\r\n                62,\r\n                31\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^netlify\",\r\n                \"x-nf-request-id\": \"\"\r\n            },\r\n            \"description\": \"Netlify providers hosting and server-less backend services for web applications and static websites.\",\r\n            \"website\": \"https://www.netlify.com/\"\r\n        },\r\n        \"Netlify Forms\": {\r\n            \"cats\": [\r\n                110\r\n            ],\r\n            \"implies\": [\r\n                \"Netlify\"\r\n            ],\r\n            \"description\": \"Netlify Forms is a serverless form handling solution for static websites.\",\r\n            \"website\": \"https://www.netlify.com/products/forms\"\r\n        },\r\n        \"Neto\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"neto\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"jquery\\\\.neto.*\\\\.js\"\r\n            ],\r\n            \"description\": \"Neto is the only Australian B2B and multi-channel ecommerce platform that provides an all-in-one solution for ecommerce, POS, inventory management, order management, and shipping labelling.\",\r\n            \"website\": \"https://www.neto.com.au\"\r\n        },\r\n        \"Nette Framework\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"cookies\": {\r\n                \"nette-browser\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"nette\",\r\n                \"nette.version\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^nette framework\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003cdiv[^\\u003e]+id=\\\"snippet-\",\r\n                \"\\u003cinput[^\\u003e]+data-nette-rules\",\r\n                \"\\u003cinput[^\\u003e]+id=\\\"frm-\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://nette.org\"\r\n        },\r\n        \"Network for Good\": {\r\n            \"cats\": [\r\n                111\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.networkforgood\\\\.com/\"\r\n            ],\r\n            \"description\": \"Network for Good is an American certified B Corporation software company that offers fundraising software and coaching for charities and non-profit organisations.\",\r\n            \"website\": \"https://www.networkforgood.com\"\r\n        },\r\n        \"Neve\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"themes/neve\\\\s*\\\\.js(?:\\\\?ver=([0-9.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Neve is a super-fast, easily customizable, multi-purpose theme that works perfectly with Gutenberg and the most popular page builders as well as WooCommerce\",\r\n            \"website\": \"https://themeisle.com/themes/neve/\"\r\n        },\r\n        \"New Relic\": {\r\n            \"cats\": [\r\n                78\r\n            ],\r\n            \"js\": [\r\n                \"newrelic\",\r\n                \"nreum\"\r\n            ],\r\n            \"description\": \"New Relic is a SaaS offering that focuses on performance and availability monitoring.\",\r\n            \"website\": \"https://newrelic.com\"\r\n        },\r\n        \"NewStore\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"highstreetbanner.config\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.api\\\\.highstreetapp\\\\.com/\"\r\n            ],\r\n            \"description\": \"NewStore is the only integrated platform offering omnichannel solutions for stores and consumers.\",\r\n            \"website\": \"https://www.newstore.com\"\r\n        },\r\n        \"Newspack\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"description\": \"Newspack is an open-source publishing platform built on WordPress for small to medium sized news organizations. It is an “opinionated” platform that stakes out clear, best-practice positions on technology, design, and business practice for news publishers.\",\r\n            \"website\": \"https://github.com/Automattic/newspack-plugin\"\r\n        },\r\n        \"Newspack by Automattic\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"headers\": {\r\n                \"host-header\": \"newspack\"\r\n            },\r\n            \"implies\": [\r\n                \"Newspack\"\r\n            ],\r\n            \"description\": \"Automattic's Newspack service is an all-in-one platform designed for small and medium-sized news organizations that simplifies publishing and drives audience and revenue right out of the box.\",\r\n            \"website\": \"https://newspack.pub/\"\r\n        },\r\n        \"Nexcess\": {\r\n            \"cats\": [\r\n                62,\r\n                88\r\n            ],\r\n            \"headers\": {\r\n                \"x-hostname\": \"nxcli\\\\.net$\"\r\n            },\r\n            \"description\": \"Nexcess is a web hosting service.\",\r\n            \"website\": \"https://www.nexcess.net\"\r\n        },\r\n        \"Nexive\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Nexive is a postal operator in Italy.\",\r\n            \"website\": \"https://www.nexive.it\"\r\n        },\r\n        \"Next Total\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"nextbasket.nextunlimited\",\r\n                \"nextfavourites.busy\",\r\n                \"nextfavourites.data.shoppinglists\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.nextdirect\\\\.com/\"\r\n            ],\r\n            \"description\": \"Next is leveraging the expertise, infrastructure and software it has developed for its own online business to provide a third-party ecommerce outsourcing service named Total Platform.\",\r\n            \"website\": \"https://www.next.co.uk\"\r\n        },\r\n        \"Next.js\": {\r\n            \"cats\": [\r\n                12,\r\n                18,\r\n                22,\r\n                57\r\n            ],\r\n            \"js\": [\r\n                \"__next_data__\",\r\n                \"next.version\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^next\\\\.js ?([0-9.]+)?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Node.js\",\r\n                \"React\",\r\n                \"Webpack\"\r\n            ],\r\n            \"description\": \"Next.js is a React framework for developing single page Javascript applications.\",\r\n            \"website\": \"https://nextjs.org\",\r\n            \"cpe\": \"cpe:2.3:a:zeit:next.js:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"NextAuth.js\": {\r\n            \"cats\": [\r\n                69\r\n            ],\r\n            \"cookies\": {\r\n                \"__host-next-auth.csrf-token\": \"\",\r\n                \"__secure-next-auth.callback-url\": \"\"\r\n            },\r\n            \"description\": \"NextAuth.js is a complete open-source authentication solution for Next.js applications.\",\r\n            \"website\": \"https://next-auth.js.org\"\r\n        },\r\n        \"NextGEN Gallery\": {\r\n            \"cats\": [\r\n                7,\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"nextgen_lightbox_settings.static_path\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- \\u003cmeta name=\\\"nextgen\\\" version=\\\"([\\\\d.]+)\\\" /\\u003e --\\u003e\\\\;version:\\\\1\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/nextgen-gallery/js/\"\r\n            ],\r\n            \"description\": \"NextGEN Gallery is a free open-source image management plugin for the WordPress content management system.\",\r\n            \"website\": \"https://www.imagely.com/wordpress-gallery-plugin\",\r\n            \"cpe\": \"cpe:2.3:a:imagely:nextgen_gallery:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"NextUI\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"css\": [\r\n                \"--nextui-(?:colors-accents1|colors-text|space-0|fonts-sans|fonts-mono)\"\r\n            ],\r\n            \"implies\": [\r\n                \"React\",\r\n                \"Stitches\"\r\n            ],\r\n            \"description\": \"NextUI allows you to make beautiful, modern, and fast websites/applications regardless of your design experience, created with React.js and Stitches, based on React Aria and inspired by Vuesax.\",\r\n            \"website\": \"https://nextui.org/\"\r\n        },\r\n        \"Nextcloud\": {\r\n            \"cats\": [\r\n                95,\r\n                19\r\n            ],\r\n            \"cookies\": {\r\n                \" __host-nc_samesitecookielax\": \"\",\r\n                \"__host-nc_samesitecookiestrict\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"oc_config.version\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Nextcloud is a suite of client-server software for creating and using file hosting services.\",\r\n            \"website\": \"https://nextcloud.com\",\r\n            \"cpe\": \"cpe:2.3:a:nextcloud:nextcloud:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Nextdoor Ads\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"ads\\\\.nextdoor\\\\.com/\"\r\n            ],\r\n            \"description\": \"Nextdoor Ads is an easy-to-use expansion of Nextdoor’s proprietary self-serve campaign management platform, designed to help small and medium-sized businesses (SMBs) advertise on Nextdoor.\",\r\n            \"website\": \"https://help.nextdoor.com/s/article/About-Neighborhood-Ad-Center-NAC-Conversion-Pixel\"\r\n        },\r\n        \"Nextra\": {\r\n            \"cats\": [\r\n                57\r\n            ],\r\n            \"js\": [\r\n                \"__nextra_internal__\",\r\n                \"__nextra_pagecontext__\"\r\n            ],\r\n            \"description\": \"Nextra is Next.js based static site generator.\",\r\n            \"website\": \"https://nextra.site/\"\r\n        },\r\n        \"Nextsale\": {\r\n            \"cats\": [\r\n                5,\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"nextsaleobject\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:api|sdk)\\\\.nextsale\\\\.io/\"\r\n            ],\r\n            \"description\": \"Nextsale is a conversion optimisation platform that provides social proof and urgency tools for ecommerce websites.\",\r\n            \"website\": \"https://nextsale.io\"\r\n        },\r\n        \"NexusPHP\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^nexusphp$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\",\r\n                \"Redis\"\r\n            ],\r\n            \"description\": \"NexusPHP is an open-sourced private tracker script written in PHP.\",\r\n            \"website\": \"https://nexusphp.org\",\r\n            \"cpe\": \"cpe:2.3:a:nexusphp:nexusphp:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"NexusPIPE\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^nexuspipe.com\"\r\n            },\r\n            \"description\": \"NexusPIPE is a ADC and DDoS mitigation Company.\",\r\n            \"website\": \"https://nexuspipe.com\"\r\n        },\r\n        \"Nginx\": {\r\n            \"cats\": [\r\n                22,\r\n                64\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"nginx(?:/([\\\\d.]+))?\\\\;version:\\\\1\",\r\n                \"x-fastcgi-cache\": \"\"\r\n            },\r\n            \"description\": \"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.\",\r\n            \"website\": \"https://nginx.org/en\",\r\n            \"cpe\": \"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Niagahoster\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"niagahoster\"\r\n            },\r\n            \"implies\": [\r\n                \"Niagahoster\"\r\n            ],\r\n            \"description\": \"Niagahoster is a web hosting service for small and medium enterprises. It provides shared hosting, WordPress hosting, Virtual Private Server (VPS), and more.\",\r\n            \"website\": \"https://niagahoster.co.id\"\r\n        },\r\n        \"Nicepage\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"_npaccordioninit\",\r\n                \"_npdialogsinit\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"nicepage\\\\s([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"Nicepage is a free website building tool that requires no coding skills and integrates seamlessly with all leading CMS systems.\",\r\n            \"website\": \"https://nicepage.com\"\r\n        },\r\n        \"Nift\": {\r\n            \"cats\": [\r\n                84\r\n            ],\r\n            \"js\": [\r\n                \"niftanalytics\",\r\n                \"niftjs\"\r\n            ],\r\n            \"description\": \"Nift is a marketing program for pools of local businesses. Businesses give Nift gift cards to thank and reward their customers for taking actions, like signing up for a newsletter, referring a friend, or making a purchase.\",\r\n            \"website\": \"https://www.gonift.com\"\r\n        },\r\n        \"Ninja Forms\": {\r\n            \"cats\": [\r\n                87,\r\n                110\r\n            ],\r\n            \"js\": [\r\n                \"nfforms\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/ninja-forms/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Ninja Forms is the WordPress form builder.\",\r\n            \"website\": \"https://ninjaforms.com\"\r\n        },\r\n        \"NitroPack\": {\r\n            \"cats\": [\r\n                23,\r\n                92\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"nitropack\"\r\n                ]\r\n            },\r\n            \"description\": \"NitroPack creates optimised HTML cache for fast page loading experience.\",\r\n            \"website\": \"https://nitropack.io/\"\r\n        },\r\n        \"NoFraud\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"services\\\\.nofraud\\\\.com/\"\r\n            ],\r\n            \"description\": \"NoFraud is a fraud prevention solution for ecommerce businesses.\",\r\n            \"website\": \"https://www.nofraud.com\"\r\n        },\r\n        \"Noddus\": {\r\n            \"cats\": [\r\n                10,\r\n                32\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"noddus\\\\.com/\"\r\n            ],\r\n            \"description\": \"Noddus offers brands and agencies access to an advanced proprietary content marketing platform automating content production, distribution and analytics.\",\r\n            \"website\": \"https://www.enterprise.noddus.com\"\r\n        },\r\n        \"Node.js\": {\r\n            \"cats\": [\r\n                27\r\n            ],\r\n            \"description\": \"Node.js is an open-source, cross-platform, JavaScript runtime environment that executes JavaScript code outside a web browser.\",\r\n            \"website\": \"https://nodejs.org\",\r\n            \"cpe\": \"cpe:2.3:a:nodejs:node.js:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"NodeBB\": {\r\n            \"cats\": [\r\n                2\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^nodebb$\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"/nodebb\\\\.min\\\\.js\\\\?\"\r\n            ],\r\n            \"implies\": [\r\n                \"Node.js\"\r\n            ],\r\n            \"description\": \"NodeBB forum software is powered by Node.js and built on either a Redis or MongoDB database.\",\r\n            \"website\": \"https://nodebb.org\",\r\n            \"cpe\": \"cpe:2.3:a:nodebb:nodebb:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"NodePing\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"description\": \"NodePing is a tool in the Website Monitoring category of a tech stack. NodePing is an open source tool with GitHub stars and GitHub forks.\",\r\n            \"website\": \"https://nodeping.com\"\r\n        },\r\n        \"Nogin\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"nogin.wishlist\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.nogin\\\\.com/\"\r\n            ],\r\n            \"description\": \"Nogin is a platform operating as Commerce-as-a-Service (CaaS), offering cloud-based ecommerce functionalities and infrastructure for seamless integration and development of ecommerce solutions.\",\r\n            \"website\": \"https://www.nogin.com\"\r\n        },\r\n        \"Noibu\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"js\": [\r\n                \"noibujs_config\"\r\n            ],\r\n            \"description\": \"Noibu helps ecommerce websites detect revenue-impacting errors on their websites and provides them with the information needed to resolve them.\",\r\n            \"website\": \"https://noibu.com\"\r\n        },\r\n        \"Norton Shopping Guarantee\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"js\": [\r\n                \"do_norton_shopping\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"nsg\\\\.symantec\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Cart Functionality\"\r\n            ],\r\n            \"description\": \"Norton Shopping Guarantee offering a third-party shopping guarantee to customers provides added protection and validation that you are safe to buy from.\",\r\n            \"website\": \"https://norton.buysafe.com\"\r\n        },\r\n        \"Nosto\": {\r\n            \"cats\": [\r\n                76,\r\n                74\r\n            ],\r\n            \"js\": [\r\n                \"nosto\",\r\n                \"nostojs\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"connect\\\\.nosto\\\\.\\\\w+/\"\r\n            ],\r\n            \"meta\": {\r\n                \"nosto-version\": [\r\n                    \"([\\\\d.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"Nosto is an ecommerce platform providing product recommendations based on individual behavioral data.\",\r\n            \"website\": \"https://www.nosto.com\"\r\n        },\r\n        \"Nosto Visual UGC\": {\r\n            \"cats\": [\r\n                96\r\n            ],\r\n            \"js\": [\r\n                \"stackla\",\r\n                \"stacklawidgetjsonp\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.stackla\\\\.com/\"\r\n            ],\r\n            \"description\": \"Nosto Visual UGC (Earlier known as Stackla) is a cloud-based content marketing platform that helps discover, curate, display and engage with user-generated content across all digital marketing platforms.\",\r\n            \"website\": \"https://www.nosto.com/products/visual-ugc/\"\r\n        },\r\n        \"Notion\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"description\": \"Notion is a collaboration platform with modified Markdown support that integrates kanban boards, tasks, wikis, and database.\",\r\n            \"website\": \"https://notion.so\"\r\n        },\r\n        \"Nudgify\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"nudgify.cart\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.nudgify\\\\.com/\",\r\n                \"cdn\\\\.convertize\\\\.com/nudgify-shopify\\\\.js\"\r\n            ],\r\n            \"description\": \"Nudgify is a Social Proof \\u0026 Fomo App tool that integrates seamlessly with ecommerce platform such as Shopify, WooCommerce and Magento.\",\r\n            \"website\": \"https://www.nudgify.com\"\r\n        },\r\n        \"Nukeviet CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"nv_digitalclock\",\r\n                \"nv_is_change_act_confirm\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"nukeviet v([\\\\d.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"NukeViet CMS is a Vietnamese content management system.\",\r\n            \"website\": \"https://nukeviet.vn/en/\"\r\n        },\r\n        \"Nuqlium\": {\r\n            \"cats\": [\r\n                76,\r\n                29\r\n            ],\r\n            \"js\": [\r\n                \"nuqliumobject\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.nuqlium\\\\.com/api\"\r\n            ],\r\n            \"description\": \"Nuqlium is an integrated cloud-based online merchandising platform.\",\r\n            \"website\": \"https://www.nuqlium.com\"\r\n        },\r\n        \"Nuvemshop\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"ls.store.url\",\r\n                \"nuvemshopidproduct\"\r\n            ],\r\n            \"description\": \"Nuvemshop is a website builder with customizable layouts, product, shipping and payment management, marketing tools and a mobile app.\",\r\n            \"website\": \"https://www.nuvemshop.com.br\"\r\n        },\r\n        \"Nuxt.js\": {\r\n            \"cats\": [\r\n                12,\r\n                18,\r\n                22,\r\n                57\r\n            ],\r\n            \"js\": [\r\n                \"$nuxt\",\r\n                \"usenuxtapp\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cdiv [^\\u003e]*id=\\\"__nuxt\\\"\",\r\n                \"\\u003cscript [^\\u003e]*\\u003ewindow\\\\.__nuxt__\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/_nuxt/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Node.js\",\r\n                \"Vue.js\"\r\n            ],\r\n            \"description\": \"Nuxt is a Vue framework for developing modern web applications.\",\r\n            \"website\": \"https://nuxt.com\"\r\n        },\r\n        \"OTYS\": {\r\n            \"cats\": [\r\n                101\r\n            ],\r\n            \"js\": [\r\n                \"otys.siteid\",\r\n                \"otysselect\"\r\n            ],\r\n            \"description\": \"OTYS is a Dutch company that specialises in providing recruitment and staffing agencies with software solutions to manage their workflows, including applicant tracking systems, job board integrations, and candidate sourcing tools.\",\r\n            \"website\": \"https://www.otys.nl\"\r\n        },\r\n        \"OVHcloud\": {\r\n            \"cats\": [\r\n                62,\r\n                88\r\n            ],\r\n            \"description\": \"OVHcloud is a global, cloud provider delivering hosted private cloud, public cloud, and dedicated server solutions.\",\r\n            \"website\": \"https://www.ovhcloud.com\"\r\n        },\r\n        \"OWL Carousel\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink [^\\u003e]*href=\\\"[^\\\"]+owl\\\\.carousel(?:\\\\.min)?\\\\.css\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"owl\\\\.carousel.*\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"OWL Carousel is an enabled jQuery plugin that lets you create responsive carousel sliders.\",\r\n            \"website\": \"https://owlcarousel2.github.io/OwlCarousel2/\"\r\n        },\r\n        \"OXID eShop\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"sid_key\": \"oxid\"\r\n            },\r\n            \"js\": [\r\n                \"oxcookienote\",\r\n                \"oxinputvalidator\",\r\n                \"oxloginbox\",\r\n                \"oxminibasket\",\r\n                \"oxmodalpopup\",\r\n                \"oxtopmenu\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"OXID eShop is a free, open source ecommerce solution built using object oriented programming and PHP.\",\r\n            \"website\": \"https://www.oxid-esales.com\"\r\n        },\r\n        \"OXID eShop Community Edition\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!--[^-]*oxid eshop community edition, version (\\\\d+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"OXID eShop Community Edition is a free, open source ecommerce solution built using object oriented programming and PHP.\",\r\n            \"website\": \"https://www.oxid-esales.com\"\r\n        },\r\n        \"OXID eShop Enterprise Edition\": {\r\n            \"cats\": [\r\n                6,\r\n                62\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!--[^-]*oxid eshop enterprise edition, version (\\\\d+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"OXID eShop Enterprise Edition is a B2B or B2C ecommerce solution built using object oriented programming and PHP.\",\r\n            \"website\": \"https://www.oxid-esales.com\"\r\n        },\r\n        \"OXID eShop Professional Edition\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!--[^-]*oxid eshop professional edition, version (\\\\d+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"OXID eShop Professional Edition is an e-ommerce platform for both small start-up companies and experience online retailers with a wide range of functions, software maintenance and support.\",\r\n            \"website\": \"https://exchange.oxid-esales.com/OXID-Products/OXID-eShop/OXID-eShop-Professional-Edition-6-Professional-Edition-6-Stable-PE-6-0-x.html\"\r\n        },\r\n        \"Obsidian Incentivize\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"obsidian.incentiveapi\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.shopify\\\\.com/extensions/.+/([\\\\.\\\\d]{3,})/assets/upsell\\\\.min\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Obsidian Incentivize is designed to increase your average order size through in-cart upsells, cross sells and personalised product recommendations.\",\r\n            \"website\": \"https://obsidianapps.co\"\r\n        },\r\n        \"Obsidian Publish\": {\r\n            \"cats\": [\r\n                4\r\n            ],\r\n            \"js\": [\r\n                \"siteinfo.host\"\r\n            ],\r\n            \"implies\": [\r\n                \"PIXIjs\",\r\n                \"Prism\"\r\n            ],\r\n            \"description\": \"Obsidian Publish is an official, paid plugin for Obsidian that allows users to post selected notes to a directory on the publish.obsidian.md domain.\",\r\n            \"website\": \"https://obsidian.md/publish\"\r\n        },\r\n        \"Obviyo\": {\r\n            \"cats\": [\r\n                100,\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"__hic.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"deploy\\\\.hiconversion\\\\.com\"\r\n            ],\r\n            \"description\": \"Obviyo is an ecommerce intelligence platform helping merchants personalise and optimise shopping experience.\",\r\n            \"website\": \"https://www.obviyo.com\"\r\n        },\r\n        \"Occasion\": {\r\n            \"cats\": [\r\n                72\r\n            ],\r\n            \"js\": [\r\n                \"occsn.stack\",\r\n                \"occsnmerchanttoken\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"app\\\\.getoccasion\\\\.com\"\r\n            ],\r\n            \"description\": \"Occasion is an online booking system.\",\r\n            \"website\": \"https://www.getoccasion.com\"\r\n        },\r\n        \"OceanWP\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"themes/oceanwp\\\\s*\\\\.js(?:\\\\?ver=([0-9.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"OceanWP is a fast-loading WordPress theme that has great support for third-party plugins and drag-and-drop page builders.\",\r\n            \"website\": \"https://oceanwp.org\"\r\n        },\r\n        \"Ochanoko\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"ocnkproducts\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"ocnk-min\\\\.js\"\r\n            ],\r\n            \"description\": \"Ochanoko is a ecommerce online shopping cart solutions, ecommerce web site hosting.\",\r\n            \"website\": \"https://www.ocnk.com\"\r\n        },\r\n        \"Oct8ne\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"oct8ne.agentsavailable\",\r\n                \"oct8neapi\",\r\n                \"oct8nevars.pluginversion\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.oct8ne\\\\.com/\"\r\n            ],\r\n            \"description\": \"Oct8ne is a visual customer service software.\",\r\n            \"website\": \"https://oct8ne.com\"\r\n        },\r\n        \"Octane AI\": {\r\n            \"cats\": [\r\n                5,\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"octaneconfig\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.octaneai\\\\.com/\"\r\n            ],\r\n            \"description\": \"Octane AI provides an all-in-one platform for engaging quizzes, data collection, and personalised Facebook Messenger and SMS automation.\",\r\n            \"website\": \"https://www.octaneai.com\"\r\n        },\r\n        \"October CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"october_session\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"ocjson\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"octobercms\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Laravel\"\r\n            ],\r\n            \"description\": \"October is a free, open-source, self-hosted CMS platform based on the Laravel PHP Framework.\",\r\n            \"website\": \"https://octobercms.com\"\r\n        },\r\n        \"Octopress\": {\r\n            \"cats\": [\r\n                57\r\n            ],\r\n            \"html\": [\r\n                \"powered by \\u003ca href=\\\"http://octopress\\\\.org\\\"\\u003e\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/octopress\\\\.js\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"octopress\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Jekyll\"\r\n            ],\r\n            \"description\": \"Octopress is a static blogging framework.\",\r\n            \"website\": \"https://octopress.org\"\r\n        },\r\n        \"Ocuco FitMix\": {\r\n            \"cats\": [\r\n                105\r\n            ],\r\n            \"js\": [\r\n                \"fitmix.widget_base_url\"\r\n            ],\r\n            \"description\": \"Ocuco is now offering its customers FittingBox's FitMix, a virtual frame try-on tool.\",\r\n            \"website\": \"https://www.ocuco.com/fitmix\"\r\n        },\r\n        \"Odoo\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"odoo.session_info\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]* href=[^\\u003e]+/web/css/(?:web\\\\.assets_common/|website\\\\.assets_frontend/)\\\\;confidence:25\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/web/js/(?:web\\\\.assets_common/|website\\\\.assets_frontend/)\\\\;confidence:25\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"odoo\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Less\",\r\n                \"PostgreSQL\",\r\n                \"Python\"\r\n            ],\r\n            \"description\": \"Odoo is business management software which includes CRM, ecommerce, billing, accounting, manufacturing, warehouse, project management, and inventory management.\",\r\n            \"website\": \"https://odoo.com\",\r\n            \"cpe\": \"cpe:2.3:a:odoo:odoo:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Oh Dear\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"js\": [\r\n                \"__next_data__.props.pageprops.config.useragent\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.ohdear\\\\.app/\"\r\n            ],\r\n            \"description\": \"The all-in-one monitoring tool for your entire website. Oh Dear monitors uptime, SSL certificates, broken links, scheduled tasks, application health, DNS, domain expiry and more.\",\r\n            \"website\": \"https://ohdear.app\"\r\n        },\r\n        \"Okendo\": {\r\n            \"cats\": [\r\n                90,\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"okendoreviews\",\r\n                \"okereviewswidgetoninit\",\r\n                \"okewidgetcontrolinit\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Okendo is a customer marketing platform with product ratings and reviews, customer photos and videos to help personalise experiences.\",\r\n            \"website\": \"https://www.okendo.io\"\r\n        },\r\n        \"Okta\": {\r\n            \"cats\": [\r\n                69\r\n            ],\r\n            \"js\": [\r\n                \"isoktaenabled\",\r\n                \"okta.cdnurlhostname\",\r\n                \"okta.locale\",\r\n                \"oktaauth\",\r\n                \"oktacurrentsessionurl\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"oktacdn\\\\.com/.+/([\\\\d.]+)/\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Okta is a platform in the Identity-as-a-Service (IDaaS) category. Okta features include Provisioning, Single Sign-On (SSO), Active Directory (AD) and LDAP integration, the centralized de-provisioning of users, multi-factor authentication (MFA), mobile identity management.\",\r\n            \"website\": \"https://developer.okta.com\",\r\n            \"cpe\": \"cpe:2.3:a:okta:*:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Olapic\": {\r\n            \"cats\": [\r\n                96\r\n            ],\r\n            \"js\": [\r\n                \"olapic\",\r\n                \"olapic.version\"\r\n            ],\r\n            \"description\": \"Olapic is a content marketing tool specifically focused on visual marketing content.\",\r\n            \"website\": \"https://www.olapic.com\"\r\n        },\r\n        \"Olark\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"olark\",\r\n                \"olarkuserdata\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.olark\\\\.com/\"\r\n            ],\r\n            \"description\": \"Olark is a cloud-based live chat solution.\",\r\n            \"website\": \"https://www.olark.com/\"\r\n        },\r\n        \"Omeka\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"omeka\"\r\n            ],\r\n            \"description\": \"Omeka is a free Content Management System (CMS) used by archives, historical societies, libraries, museums, and individual researchers for publishing digital collections.\",\r\n            \"website\": \"https://omeka.org\",\r\n            \"cpe\": \"cpe:2.3:a:omeka:omeka:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Ometria\": {\r\n            \"cats\": [\r\n                32,\r\n                97\r\n            ],\r\n            \"cookies\": {\r\n                \"ometria\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"addometriabasket\",\r\n                \"addometriaidentify\",\r\n                \"ometria\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.ometria\\\\.com\"\r\n            ],\r\n            \"description\": \"Ometria is a customer insight and marketing automation platform.\",\r\n            \"website\": \"https://ometria.com\"\r\n        },\r\n        \"Omise\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"omise\",\r\n                \"omisecard\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.omise\\\\.co\"\r\n            ],\r\n            \"description\": \"Omise is a payment gateway for Thailand, Japan and Singapore. Providing both online and offline payment solutions to merchants.\",\r\n            \"website\": \"https://www.omise.co\"\r\n        },\r\n        \"Omni CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"description\": \"Omni CMS (formerly OU Campus) is a web content management system developed by Modern Campus. Modern Campus is a SaaS-based student lifecycle management software designed to manage continuing education and non-degree programs.\",\r\n            \"website\": \"https://moderncampus.com/products/web-content-management.html\"\r\n        },\r\n        \"Omniconvert\": {\r\n            \"cats\": [\r\n                74\r\n            ],\r\n            \"js\": [\r\n                \"_omni\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.omniconvert\\\\.com\"\r\n            ],\r\n            \"description\": \"Omniconvert is an award-winning conversion rate optimisation (CRO) software that can be used for A/B testing, online surveys, traffic segmentation.\",\r\n            \"website\": \"https://www.omniconvert.com\"\r\n        },\r\n        \"Omnisend\": {\r\n            \"cats\": [\r\n                32,\r\n                75\r\n            ],\r\n            \"cookies\": {\r\n                \"omnisendsessionid\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"_omnisend\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"omnisrc\\\\.com\"\r\n            ],\r\n            \"meta\": {\r\n                \"omnisend-site-verification\": []\r\n            },\r\n            \"description\": \"Omnisend is an ecommerce marketing automation platform that provides an omnichannel marketing strategy for businesses.\",\r\n            \"website\": \"https://www.omnisend.com\"\r\n        },\r\n        \"Omnisend Email Marketing \\u0026 SMS\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"omnis(?:nippet1|rc)\\\\.com/inshop/embed/shopify\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Omnisend\"\r\n            ],\r\n            \"description\": \"Omnisend Email Marketing \\u0026 SMS is an omnichannel marketing automation channel that allows Shopify store owners to manage their SMS, web push notifications, WhatsApp, Facebook messenger, pop-ups, segmentation, and dynamic Facebook and Google ad integrations.\",\r\n            \"website\": \"https://apps.shopify.com/omnisend\"\r\n        },\r\n        \"Omny Studio\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"description\": \"Omny Studio is a podcast hosting solution, which enables radio stations and enterprises to manage, monetize, publish, share, edit and analyze audio episodes.\",\r\n            \"website\": \"https://omnystudio.com\"\r\n        },\r\n        \"Omurga Sistemi\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^os-omurga sistemi\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://www.os.com.tr\"\r\n        },\r\n        \"OnShop\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"onshop ecommerce\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"OnShop is an ecommerce platform for online merchants.\",\r\n            \"website\": \"https://onshop.asia\"\r\n        },\r\n        \"OnUniverse\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"description\": \"OnUniverse is the first website builder and commerce platform built for mobile devices.\",\r\n            \"website\": \"https://onuniverse.com\"\r\n        },\r\n        \"One.com\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"description\": \"One.com is a Denmark-based company offering bargain-priced WordPress and shared web hosting plans.\",\r\n            \"website\": \"https://www.one.com\"\r\n        },\r\n        \"OneAPM\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"bweum\"\r\n            ],\r\n            \"website\": \"https://www.oneapm.com\"\r\n        },\r\n        \"OneAll\": {\r\n            \"cats\": [\r\n                69\r\n            ],\r\n            \"js\": [\r\n                \"oa_social_login\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"api\\\\.oneall\\\\.com/socialize\"\r\n            ],\r\n            \"description\": \"OneAll is a social login solution enables your users to sign into their accounts on your website or mobile app using their login details from networking sites.\",\r\n            \"website\": \"https://www.oneall.com\"\r\n        },\r\n        \"OneCause\": {\r\n            \"cats\": [\r\n                111\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.onecause\\\\.com/\"\r\n            ],\r\n            \"description\": \"OneCause is a fundraising platform designed for nonprofits to manage all types of fundraising campaigns.\",\r\n            \"website\": \"https://www.onecause.com\"\r\n        },\r\n        \"OnePage Express\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"one_page_express_settings\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/one-page-express(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"OnePage Express is a beautiful WordPress theme that can be used to create a one page website in minutes by drag and drop.\",\r\n            \"website\": \"https://onepageexpress.com\"\r\n        },\r\n        \"OnePress Social Locker\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"__pandalockers\",\r\n                \"bizpanda\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/social-?locker(?:-next-premium)?/bizpanda/assets/\"\r\n            ],\r\n            \"description\": \"Social Locker locks your most valuable site content behind a set of social buttons until the visitor likes, shares, +1s or tweets your page.\",\r\n            \"website\": \"https://wordpress.org/plugins/social-locker\"\r\n        },\r\n        \"OneSignal\": {\r\n            \"cats\": [\r\n                32,\r\n                74\r\n            ],\r\n            \"js\": [\r\n                \"__onesignalsdkloadcount\",\r\n                \"onesignal\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.onesignal\\\\.com\"\r\n            ],\r\n            \"description\": \"OneSignal is a customer engagement messaging solution.\",\r\n            \"website\": \"https://onesignal.com\"\r\n        },\r\n        \"OneStat\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"onestat_pageview\"\r\n            ],\r\n            \"website\": \"https://www.onestat.com\"\r\n        },\r\n        \"OneTrust\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"cookies\": {\r\n                \"optanonconsent\": \"\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.cookielaw\\\\.org\",\r\n                \"cdn\\\\.cookielaw\\\\.org\",\r\n                \"optanon\\\\.blob\\\\.core\\\\.windows\\\\.net\",\r\n                \"optanon\\\\.blob\\\\.core\\\\.windows\\\\.net\",\r\n                \"otsdkstub\\\\.js\"\r\n            ],\r\n            \"description\": \"OneTrust is a cloud-based data privacy management compliance platform.\",\r\n            \"website\": \"https://www.onetrust.com\"\r\n        },\r\n        \"Oney\": {\r\n            \"cats\": [\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"isoneyactive\",\r\n                \"oneymarketplace\",\r\n                \"openoneylayer\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/modules/oney(?:/)?/views/js/front\\\\.js\"\r\n            ],\r\n            \"description\": \"Oney is an app that gives consumers back the power over their spending and makes split payments universal.\",\r\n            \"website\": \"https://www.oney.com\"\r\n        },\r\n        \"Onfido\": {\r\n            \"cats\": [\r\n                16,\r\n                69\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"(?:api|sync)\\\\.onfido\\\\.com\"\r\n            },\r\n            \"description\": \"Onfido is a technology company that helps businesses verify people's identities using a photo-based identity document, a selfie and artificial intelligence algorithms.\",\r\n            \"website\": \"https://onfido.com\"\r\n        },\r\n        \"Ookla Speedtest Custom\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.speedtestcustom\\\\.com\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"\\\\.speedtestcustom\\\\.com/\"\r\n            ],\r\n            \"description\": \"Speedtest Custom is a robust and accurate testing solution that is HTML5-based, Flash-free and supports both mobile and desktop browsers built by Ookla.\",\r\n            \"website\": \"https://www.ookla.com/speedtest-custom\"\r\n        },\r\n        \"Oopy\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"__oopy__\"\r\n            ],\r\n            \"implies\": [\r\n                \"Next.js\",\r\n                \"Notion\"\r\n            ],\r\n            \"description\": \"Oopy provides you with a simple and easy way to turn your Notion page into a performant website.\",\r\n            \"website\": \"https://oopy.us/\"\r\n        },\r\n        \"Open AdStream\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"oas_ad\"\r\n            ],\r\n            \"website\": \"https://www.xaxis.com\"\r\n        },\r\n        \"Open Classifieds\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"author\": [\r\n                    \"open-classifieds\\\\.com\"\r\n                ],\r\n                \"copyright\": [\r\n                    \"open classifieds ?([0-9.]+)?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"website\": \"https://open-classifieds.com\",\r\n            \"cpe\": \"cpe:2.3:a:open-classifieds:open_classifieds:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Open Graph\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"description\": \"Open Graph is a protocol that is used to integrate any web page into the social graph.\",\r\n            \"website\": \"https://ogp.me\"\r\n        },\r\n        \"Open Journal Systems\": {\r\n            \"cats\": [\r\n                50\r\n            ],\r\n            \"cookies\": {\r\n                \"ojssid\": \"\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"open journal systems(?: ([\\\\d.]+))?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Open Journal Systems (OJS) is an open-source software application for managing and publishing scholarly journals.\",\r\n            \"website\": \"https://pkp.sfu.ca/ojs\",\r\n            \"cpe\": \"cpe:2.3:a:public_knowledge_project:open_journal_systems:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Open Web Analytics\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"owa.config.baseurl\",\r\n                \"owa_baseurl\",\r\n                \"owa_cmds\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- (?:start|end) open web analytics tracker --\\u003e\"\r\n            ],\r\n            \"website\": \"https://www.openwebanalytics.com\",\r\n            \"cpe\": \"cpe:2.3:a:openwebanalytics:open_web_analytics:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Open eShop\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"author\": [\r\n                    \"open-eshop\\\\.com\"\r\n                ],\r\n                \"copyright\": [\r\n                    \"open eshop ?([0-9.]+)?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://open-eshop.com/\"\r\n        },\r\n        \"Open-Xchange App Suite\": {\r\n            \"cats\": [\r\n                30,\r\n                75\r\n            ],\r\n            \"js\": [\r\n                \"ox.version\"\r\n            ],\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"description\": \"Open-Xchange is a web-based communication, collaboration and office productivity software suite.\",\r\n            \"website\": \"https://www.open-xchange.com/\",\r\n            \"cpe\": \"cpe:2.3:a:open-xchange:app_suite:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"OpenBSD httpd\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^openbsd httpd\"\r\n            },\r\n            \"website\": \"https://man.openbsd.org/httpd.8\",\r\n            \"cpe\": \"cpe:2.3:a:openbsd:openbsd:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"OpenCV\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"opencvisready\"\r\n            ],\r\n            \"implies\": [\r\n                \"WebAssembly\"\r\n            ],\r\n            \"description\": \"OpenCV (Open Source Computer Vision Library) is an open source computer vision and machine learning software library.\",\r\n            \"website\": \"https://opencv.org\"\r\n        },\r\n        \"OpenCart\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"ocsessid\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"OpenCart is a free and open-source ecommerce platform used for creating and managing online stores. It is written in PHP and uses a MySQL database to store information.\",\r\n            \"website\": \"https://www.opencart.com\",\r\n            \"cpe\": \"cpe:2.3:a:opencart:opencart:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"OpenCities\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"opencities\"\r\n            ],\r\n            \"description\": \"OpenCities is a content management system built for government organizations.\",\r\n            \"website\": \"https://granicus.com/solution/govaccess/opencities/\"\r\n        },\r\n        \"OpenCms\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"opencms\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003clink href=\\\"/opencms/\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"opencms\"\r\n            ],\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"website\": \"https://www.opencms.org\",\r\n            \"cpe\": \"cpe:2.3:a:alkacon:opencms:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"OpenElement\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"oe.getools\",\r\n                \"oeconfwemenu\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"openelement\\\\s\\\\(([\\\\d\\\\.]+)\\\\)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"OpenElement is a free website building application with a WYSIWYG interface.\",\r\n            \"website\": \"https://openelement.uk\"\r\n        },\r\n        \"OpenGSE\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"gse\"\r\n            },\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"description\": \"OpenGSE is a test suite used for testing servlet compliance. It is deployed by using WAR files that are deployed on the server engine.\",\r\n            \"website\": \"https://code.google.com/p/opengse\"\r\n        },\r\n        \"OpenGrok\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"cookies\": {\r\n                \"opengrok\": \"\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"opengrok(?: v?([\\\\d.]+))?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"website\": \"https://hub.opensolaris.org/bin/view/Project+opengrok/WebHome\"\r\n        },\r\n        \"OpenLayers\": {\r\n            \"cats\": [\r\n                35\r\n            ],\r\n            \"js\": [\r\n                \"ol.canvasmap\",\r\n                \"openlayers.version_number\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"openlayers\"\r\n            ],\r\n            \"description\": \"OpenLayers is an open-source JavaScript library for displaying map data in web browser.\",\r\n            \"website\": \"https://openlayers.org\"\r\n        },\r\n        \"OpenNemas\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"opennemas\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"opennemas\"\r\n                ]\r\n            },\r\n            \"website\": \"https://www.opennemas.com\"\r\n        },\r\n        \"OpenPay\": {\r\n            \"cats\": [\r\n                41,\r\n                91\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"openpay\\\\.com.\\\\au\"\r\n            ],\r\n            \"description\": \"Openpay is an innovative online and in-store payment solution enabling you to purchase now and pay later, with no interest.\",\r\n            \"website\": \"https://www.openpay.com.au/\"\r\n        },\r\n        \"OpenResty\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"openresty(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Nginx\"\r\n            ],\r\n            \"description\": \"OpenResty is a web platform based on nginx which can run Lua scripts using its LuaJIT engine.\",\r\n            \"website\": \"https://openresty.org\"\r\n        },\r\n        \"OpenSSL\": {\r\n            \"cats\": [\r\n                33\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"openssl(?:/([\\\\d.]+[a-z]?))?\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"OpenSSL is a software library for applications that secure communications over computer networks against eavesdropping or need to identify the party at the other end.\",\r\n            \"website\": \"https://openssl.org\",\r\n            \"cpe\": \"cpe:2.3:a:openssl:openssl:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"OpenStreetMap\": {\r\n            \"cats\": [\r\n                35\r\n            ],\r\n            \"description\": \"OpenStreetMap is a free, editable map of the whole world that is being built by volunteers largely from scratch and released with an open-content license.\",\r\n            \"website\": \"https://www.openstreetmap.org\"\r\n        },\r\n        \"OpenSwoole\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"openswoole(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"OpenSwoole is a high-performance, asynchronous, event-driven, coroutine-based PHP framework.\",\r\n            \"website\": \"https://openswoole.com\"\r\n        },\r\n        \"OpenTable\": {\r\n            \"cats\": [\r\n                93\r\n            ],\r\n            \"description\": \"OpenTable is an online restaurant-reservation service company founded by Sid Gorham, Eric Moe and Chuck Templeton on 2 July 1998 and is based in San Francisco, California.\",\r\n            \"website\": \"https://restaurant.opentable.com\"\r\n        },\r\n        \"OpenText Web Solutions\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!--[^\\u003e]+published by open text web solutions\"\r\n            ],\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"website\": \"https://websolutions.opentext.com\"\r\n        },\r\n        \"OpenUI5\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"sap.ui.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"sap-ui-core\\\\.js\"\r\n            ],\r\n            \"website\": \"https://openui5.org/\"\r\n        },\r\n        \"OpenWeb\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"spotim.initconversation\"\r\n            ],\r\n            \"meta\": {\r\n                \"spotim-ads\": []\r\n            },\r\n            \"description\": \"OpenWeb is a social engagement platform that builds online communities around digital content.\",\r\n            \"website\": \"https://www.openweb.com\"\r\n        },\r\n        \"OpenX\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"openx.name\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"https?://[^/]*\\\\.openx\\\\.net\",\r\n                \"https?://[^/]*\\\\.servedbyopenx\\\\.com\"\r\n            ],\r\n            \"description\": \"OpenX is a programmatic advertising technology company.\",\r\n            \"website\": \"https://openx.com\",\r\n            \"cpe\": \"cpe:2.3:a:openx:openx:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"OperateBeyond\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//dealer-cdn\\\\.com/\"\r\n            ],\r\n            \"description\": \"OperateBeyond is a software development company that offers website design, automated inventory management, CRM, dealer websites, and DMS.\",\r\n            \"website\": \"https://operatebeyond.com/dealer-websites-marketing\"\r\n        },\r\n        \"Opigno LMS\": {\r\n            \"cats\": [\r\n                21\r\n            ],\r\n            \"scripts\": [\r\n                \"opigno_(?:commerce|wtp_app|scorm|learning_path)\"\r\n            ],\r\n            \"description\": \"Opigno LMS is an open-source Learning Management System (LMS) based on Drupal, designed for creating and delivering online courses and educational content.\",\r\n            \"website\": \"https://www.opigno.org\"\r\n        },\r\n        \"OpinionLab\": {\r\n            \"cats\": [\r\n                73\r\n            ],\r\n            \"js\": [\r\n                \"ooo.browser\",\r\n                \"ooo.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.foresee\\\\.com/code/([\\\\d.]+)-oo/oo_engine\\\\.min\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"OpinionLab is a omnichannel customer feedback solution provider.\",\r\n            \"website\": \"https://www.opinionlab.com\"\r\n        },\r\n        \"OptiMonk\": {\r\n            \"cats\": [\r\n                98,\r\n                77\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.optimonk\\\\.com/\"\r\n            ],\r\n            \"description\": \"OptiMonk is an on-site message toolkit used to improve conversions using action-based popups ad bars.\",\r\n            \"website\": \"https://www.optimonk.com\"\r\n        },\r\n        \"Optimise\": {\r\n            \"cats\": [\r\n                71,\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"omid\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"track\\\\.omguk\\\\.com\"\r\n            ],\r\n            \"description\": \"Optimise Media Group is a UK-based performance advertising network.\",\r\n            \"website\": \"https://www.optimisemedia.com\"\r\n        },\r\n        \"Optimizely\": {\r\n            \"cats\": [\r\n                74,\r\n                76\r\n            ],\r\n            \"cookies\": {\r\n                \"optimizelyenduserid\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"optimizely\",\r\n                \"optimizelyclient.clientversion\",\r\n                \"optimizelysdk\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"optimizely\\\\.com.*\\\\.js\"\r\n            ],\r\n            \"description\": \"Optimizely is an experimentation platform that helps developers build and run A/B tests on websites.\",\r\n            \"website\": \"https://www.optimizely.com\"\r\n        },\r\n        \"Optimizely Commerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"epi:statemarker\": \"\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"episerver\"\r\n                ]\r\n            },\r\n            \"description\": \"Optimizely Commerce is a complete suite for digital ecommerce and content management that uses artificial intelligence to deliver personalised experiences, individualised search rankings and product recommendations.\",\r\n            \"website\": \"https://www.optimizely.com/products/commerce/b2c/\"\r\n        },\r\n        \"Optimizely Content Management\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"epi:statemarker\": \"\",\r\n                \"episerver\": \"\",\r\n                \"episessionid\": \"\",\r\n                \"epitrace\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"epi.episerver\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.episerver\\\\.net\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"\\\\.episerver.net/\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"episerver\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"description\": \"Optimizely Content Management (formerly EPiServer) is digital content, ecommerce, and marketing management solution designed for editors and marketers.\",\r\n            \"website\": \"https://www.optimizely.com/products/content/\",\r\n            \"cpe\": \"cpe:2.3:a:episerver:episerver:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Optimove\": {\r\n            \"cats\": [\r\n                97\r\n            ],\r\n            \"js\": [\r\n                \"optimovesdk\",\r\n                \"optimovesdkversion\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.optimove\\\\.net/.+v([\\\\d\\\\.]+)\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Optimove is a relationship marketing hub powered by a combination of advanced customer modeling, predictive micro-segmentation and campaign automation technologies.\",\r\n            \"website\": \"https://www.optimove.com\"\r\n        },\r\n        \"OptinMonster\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"optinmonsterapp\"\r\n            ],\r\n            \"description\": \"OptinMonster is a conversion optimisation tool that allows you to grow your email list.\",\r\n            \"website\": \"https://optinmonster.com\"\r\n        },\r\n        \"OptinMonster plugin\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/optinmonster/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"OptinMonster\"\r\n            ],\r\n            \"description\": \"OptinMonster is a lead-generation plugin for WordPress.\",\r\n            \"website\": \"https://optinmonster.com\"\r\n        },\r\n        \"Oracle Application Express\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"apex.libversions\",\r\n                \"apex_img_dir\"\r\n            ],\r\n            \"description\": \"Oracle Application Express (APEX) is an enterprise low-code development platform from Oracle Corporation. APEX is a fully supported no-cost feature of Oracle Database.\",\r\n            \"website\": \"https://apex.oracle.com\"\r\n        },\r\n        \"Oracle Application Server\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"oracle[- ]application[- ]server(?: containers for j2ee)?(?:[- ](\\\\d[\\\\da-z./]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"website\": \"https://www.oracle.com/technetwork/middleware/ias/overview/index.html\",\r\n            \"cpe\": \"cpe:2.3:a:oracle:application_server:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Oracle BlueKai\": {\r\n            \"cats\": [\r\n                86\r\n            ],\r\n            \"js\": [\r\n                \"bluekailoaded\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"tags\\\\.(?:bluekai|bkrtx)\\\\.com/\"\r\n            ],\r\n            \"description\": \"Oracle BlueKai is a cloud-based big data platform that enables companies to personalise online, offline, and mobile marketing campaigns.\",\r\n            \"website\": \"https://www.oracle.com/cx/marketing/data-management-platform\"\r\n        },\r\n        \"Oracle Commerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"headers\": {\r\n                \"x-atg-version\": \"(?:atgplatform/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"Oracle Commerce is a unified B2B and B2C ecommerce platform.\",\r\n            \"website\": \"https://www.oracle.com/applications/customer-experience/commerce/products/commerce-platform/index.html\",\r\n            \"cpe\": \"cpe:2.3:a:oracle:commerce_platform:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Oracle Commerce Cloud\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"headers\": {\r\n                \"oraclecommercecloud-version\": \"^(.+)$\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"Oracle Commerce Cloud is a cloud-native, fully featured, extensible SaaS ecommerce solution, delivered in the Oracle Cloud, supporting B2C and B2B models in a single platform.\",\r\n            \"website\": \"https://cloud.oracle.com/commerce-cloud\"\r\n        },\r\n        \"Oracle Dynamic Monitoring Service\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"headers\": {\r\n                \"x-oracle-dms-ecid\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"Oracle WebLogic Server\"\r\n            ],\r\n            \"description\": \"Oracle Dynamic Monitoring Service is a feature of Oracle WebLogic Server that provides real-time monitoring and diagnostic capabilities for Java applications running on the WebLogic Server.\",\r\n            \"website\": \"https://oracle.com\"\r\n        },\r\n        \"Oracle HTTP Server\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"oracle-http-server(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"website\": \"https://oracle.com\",\r\n            \"cpe\": \"cpe:2.3:a:oracle:http_server:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Oracle Infinity\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"c\\\\.oracleinfinity\\\\.io\"\r\n            ],\r\n            \"description\": \"Oracle Infinity is a digital analytics platform for tracking, measuring, and optimizing the performance and visitor behavior of enterprise websites and mobile apps.\",\r\n            \"website\": \"https://www.oracle.com/cx/marketing/digital-intelligence/\"\r\n        },\r\n        \"Oracle Maxymiser\": {\r\n            \"cats\": [\r\n                74,\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"maxy\",\r\n                \"mmsystem.getconfig\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"service\\\\.maxymiser\\\\.net\"\r\n            ],\r\n            \"description\": \"Oracle Maxymiser is a real-time behavioral targeting, in-session personalisation, and product recommendations platform.\",\r\n            \"website\": \"https://www.oracle.com/uk/cx/marketing/personalization-testing\"\r\n        },\r\n        \"Oracle Moat Measurement\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"moatads\\\\.com\"\r\n            ],\r\n            \"description\": \"Oracle Moat delivers solutions that are critical to measuring advertising effectiveness, including verification and attention, reach, and frequency as well as sales lift measurement.\",\r\n            \"website\": \"https://www.oracle.com/cx/advertising/measurement/\"\r\n        },\r\n        \"Oracle Recommendations On Demand\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"atgsvcs.+atgsvcs\\\\.js\"\r\n            ],\r\n            \"website\": \"https://www.oracle.com/us/products/applications/commerce/recommendations-on-demand/index.html\"\r\n        },\r\n        \"Oracle Web Cache\": {\r\n            \"cats\": [\r\n                23\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"oracle(?:as)?[- ]web[- ]cache(?:[- /]([\\\\da-z./]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"Oracle Web Cache is a browser and content management server, which improves the performance of web sites.\",\r\n            \"website\": \"https://oracle.com\",\r\n            \"cpe\": \"cpe:2.3:a:oracle:web_cache:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Oracle WebLogic Server\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"description\": \"Oracle WebLogic Server is a Java-based application server that provides a platform for developing, deploying, and running enterprise-level Java applications.\",\r\n            \"website\": \"https://www.oracle.com/java/weblogic/\",\r\n            \"cpe\": \"cpe:2.3:a:bea:weblogic_server:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Orankl\": {\r\n            \"cats\": [\r\n                90\r\n            ],\r\n            \"js\": [\r\n                \"orankl\",\r\n                \"oranklinit\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"www\\\\.orankl\\\\.com/\"\r\n            ],\r\n            \"description\": \"Orankl is a provider email marketing and review services.\",\r\n            \"website\": \"https://www.orankl.com\"\r\n        },\r\n        \"OrbitFox\": {\r\n            \"cats\": [\r\n                87,\r\n                5\r\n            ],\r\n            \"description\": \"OrbitFox is a multi-featured WordPress plugin that works with the Elementor, Beaver Builder and Gutenberg site-building utilities by Themeisle.\",\r\n            \"website\": \"https://themeisle.com/plugins/orbit-fox-companion\"\r\n        },\r\n        \"Orchard Core\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"x-generator\": \"^orchard$\",\r\n                \"x-powered-by\": \"orchardcore\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"/orchardcore\\\\.\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"orchard\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"description\": \"Orchard Core is an open-source modular and multi-tenant application framework built with ASP.NET Core, and a content management system (CMS).\",\r\n            \"website\": \"https://orchardcore.net\",\r\n            \"cpe\": \"cpe:2.3:a:orchardcore:orchard_core:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Orckestra\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"headers\": {\r\n                \"x-orckestra-commerce\": \".net client\",\r\n                \"x-powered-by\": \"orckestra\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^c1 cms foundation - free open source from orckestra and https://github.com/orckestra/c1-cms-foundation$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"description\": \"Orckestra is a provider of cloud-based digital unified and omnichannel commerce solutions for retail and manufacturing industries.\",\r\n            \"website\": \"https://www.orckestra.com\"\r\n        },\r\n        \"Order Deadline\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"orderdeadlineappbyeesl\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Order Deadline is an estimated delivery, countdown timer, shipping date Shopify app.\",\r\n            \"website\": \"https://apps.shopify.com/order-deadline\"\r\n        },\r\n        \"OrderCast\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"implies\": [\r\n                \"Python\",\r\n                \"React\"\r\n            ],\r\n            \"description\": \"OrderCast is a B2B ecommerce platform focused on streamlining wholesale operations, offering SKU management, order handling, and customisable online store features for improved customer experience.\",\r\n            \"website\": \"https://www.ordercast.io\"\r\n        },\r\n        \"OrderLogic app\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"orderlogic.alerts_key\",\r\n                \"orderlogic.cartdata\",\r\n                \"orderlogic.default_money_format\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"OrderLogic app allows you to define minimum and maximum product quantities for all products in your Shopify store.\",\r\n            \"website\": \"https://apps.shopify.com/orderlogic\"\r\n        },\r\n        \"OrderYOYO\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"smartbanneroy\"\r\n            ],\r\n            \"description\": \"OrderYOYO is an online ordering, payment, and marketing software solution provider.\",\r\n            \"website\": \"https://orderyoyo.com\"\r\n        },\r\n        \"Ordergroove\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.ordergroove\\\\.com\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"\\\\.ordergroove\\\\.com/\"\r\n            ],\r\n            \"description\": \"Ordergroove provides a SaaS (Software as a Service) based subscription and membership commerce platform.\",\r\n            \"website\": \"https://www.ordergroove.com/\"\r\n        },\r\n        \"Ordersify Product Alerts\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"ordersify_bis.stockremainingsetting\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.ordersify\\\\.com/sdk/productalerts-shopify\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Ordersify Product Alerts is a Shopify app which detects automatically product stock and send email alerts to contact immediately after your products are restocked.\",\r\n            \"website\": \"https://ordersify.com/products/product-alerts\"\r\n        },\r\n        \"OroCommerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cscript [^\\u003e]+data-requiremodule=\\\"oro/\",\r\n                \"\\u003cscript [^\\u003e]+data-requiremodule=\\\"oroui/\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"oro\\\\.min\\\\.js\\\\?version=([\\\\d.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://oroinc.com\"\r\n        },\r\n        \"Osano\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"js\": [\r\n                \"osano\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cmp\\\\.osano\\\\.com/\"\r\n            ],\r\n            \"description\": \"Osano is a data privacy platform that helps your website become compliant with laws such as GDPR and CCPA.\",\r\n            \"website\": \"https://www.osano.com\"\r\n        },\r\n        \"Osterreichische Post\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Österreichische Post is an Austrian logistics and postal services provider.\",\r\n            \"website\": \"https://www.post.at\"\r\n        },\r\n        \"OutSystems\": {\r\n            \"cats\": [\r\n                47\r\n            ],\r\n            \"js\": [\r\n                \"outsystems\",\r\n                \"outsystemsdebugger\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"scripts/outsystems(?:[\\\\w]+)?\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"IIS\",\r\n                \"Windows Server\"\r\n            ],\r\n            \"description\": \"OutSystems is a low-code platform which provides tools for companies to develop, deploy and manage omnichannel enterprise applications.\",\r\n            \"website\": \"https://www.outsystems.com\"\r\n        },\r\n        \"OutTheBoxThemes Panoramic\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/panoramic/.+custom\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Panoramic is a fully responsive WordPress theme with a homepage slider by OutTheBoxThemes.\",\r\n            \"website\": \"https://www.outtheboxthemes.com/wordpress-themes/panoramic\"\r\n        },\r\n        \"Outbrain\": {\r\n            \"cats\": [\r\n                5,\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"ob_adv_id\",\r\n                \"ob_releasever\",\r\n                \"obapi.version\",\r\n                \"outbrainpermalink\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.outbrain\\\\.com/\"\r\n            ],\r\n            \"description\": \"Outbrain is a web advertising platform that displays boxes of links, known as chumboxes, to pages within websites.\",\r\n            \"website\": \"https://www.outbrain.com\"\r\n        },\r\n        \"Outlook Web App\": {\r\n            \"cats\": [\r\n                30\r\n            ],\r\n            \"js\": [\r\n                \"isowapremiumbrowser\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-owa-version\": \"([\\\\d\\\\.]+)?\\\\;version:\\\\1\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]+/owa/auth/([\\\\d\\\\.]+)/themes/resources\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"description\": \"Outlook on the web is an information manager web app. It includes a web-based email client, a calendar tool, a contact manager, and a task manager.\",\r\n            \"website\": \"https://help.outlook.com\",\r\n            \"cpe\": \"cpe:2.3:a:microsoft:outlook_web_access:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Oxatis\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^oxatis\\\\s\\\\(www\\\\.oxatis\\\\.com\\\\)$\"\r\n                ]\r\n            },\r\n            \"description\": \"Oxatis is a cloud-based ecommerce solution which enables users to create and manage their own online store websites.\",\r\n            \"website\": \"https://www.oxatis.com/\"\r\n        },\r\n        \"Oxi Social Login\": {\r\n            \"cats\": [\r\n                69\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"social-login\\\\.oxiapps\\\\.com\"\r\n            ],\r\n            \"description\": \"Oxi Social Login provides one click login with services like Facebook, Google and many more.\",\r\n            \"website\": \"https://www.oxiapps.com/\"\r\n        },\r\n        \"Oxygen\": {\r\n            \"cats\": [\r\n                51,\r\n                87\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cbody class=(?:\\\"|')[^\\\"']*oxygen-body\",\r\n                \"\\u003clink [^\\u003e]*href=(?:\\\"|')[^\\u003e]*wp-content/plugins/oxygen/\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"wp-content/plugins/oxygen\"\r\n            ],\r\n            \"description\": \"Oxygen Builder is a tool to build a WordPress website.\",\r\n            \"website\": \"https://oxygenbuilder.com\"\r\n        },\r\n        \"PCRecruiter\": {\r\n            \"cats\": [\r\n                101\r\n            ],\r\n            \"js\": [\r\n                \"pcrbaseurl\",\r\n                \"pcrdialog\",\r\n                \"pcrframeoptions\"\r\n            ],\r\n            \"description\": \"PCRecruiter is an ATS/CRM hybrid SaaS solution for recruiting and sourcing professionals.\",\r\n            \"website\": \"https://www.pcrecruiter.net\"\r\n        },\r\n        \"PDF.js\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"_pdfjscompatibilitychecked\",\r\n                \"pdfjs\",\r\n                \"pdfjs.version\",\r\n                \"pdfjsdistbuildpdf.version\",\r\n                \"pdfjslib.version\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c\\\\/div\\u003e\\\\s*\\u003c!-- outercontainer --\\u003e\\\\s*\\u003cdiv\\\\s*id=\\\"printcontainer\\\"\\u003e\\u003c\\\\/div\\u003e\"\r\n            ],\r\n            \"website\": \"https://mozilla.github.io/pdf.js/\"\r\n        },\r\n        \"PHP\": {\r\n            \"cats\": [\r\n                27\r\n            ],\r\n            \"cookies\": {\r\n                \"phpsessid\": \"\"\r\n            },\r\n            \"headers\": {\r\n                \"server\": \"php/?([\\\\d.]+)?\\\\;version:\\\\1\",\r\n                \"x-powered-by\": \"^php/?([\\\\d.]+)?\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"PHP is a general-purpose scripting language used for web development.\",\r\n            \"website\": \"https://php.net\",\r\n            \"cpe\": \"cpe:2.3:a:php:php:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"PHP-Nuke\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c[^\\u003e]+powered by php-nuke\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"php-nuke\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://phpnuke.org\",\r\n            \"cpe\": \"cpe:2.3:a:phpnuke:php-nuke:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"PHPDebugBar\": {\r\n            \"cats\": [\r\n                47\r\n            ],\r\n            \"js\": [\r\n                \"phpdebugbar\",\r\n                \"phpdebugbar\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"debugbar.*\\\\.js\"\r\n            ],\r\n            \"website\": \"https://phpdebugbar.com/\"\r\n        },\r\n        \"PHPFusion\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"x-phpfusion\": \"(.+)$\\\\;version:\\\\1\",\r\n                \"x-powered-by\": \"phpfusion (.+)$\\\\;version:\\\\1\"\r\n            },\r\n            \"html\": [\r\n                \"powered by \\u003ca href=\\\"[^\\u003e]+php-fusion\",\r\n                \"powered by \\u003ca href=\\\"[^\\u003e]+phpfusion\"\r\n            ],\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://phpfusion.com\",\r\n            \"cpe\": \"cpe:2.3:a:phpfusion:phpfusion:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"PIXIjs\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"pixi\",\r\n                \"pixi.version\",\r\n                \"pixi_webworker_url\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"pixi(?:\\\\.min|-legacy)?\\\\.js$\"\r\n            ],\r\n            \"description\": \"PIXIjs is a free open-source 2D engine used to make animated websites and HTML5 games.\",\r\n            \"website\": \"https://www.pixijs.com\"\r\n        },\r\n        \"POLi Payment\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"wc_ga_pro.available_gateways.poli\"\r\n            ],\r\n            \"description\": \"POLi Payment(formerly known as Centricom) is an online payment service in Australia and New Zealand.\",\r\n            \"website\": \"https://www.polipayments.com\"\r\n        },\r\n        \"POWR\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"loadpowr\",\r\n                \"powr_receivers\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"www\\\\.powr\\\\.io/powr\\\\.js\"\r\n            ],\r\n            \"description\": \"POWR is a cloud-based system of plugins that work on almost any website.\",\r\n            \"website\": \"https://www.powr.io\"\r\n        },\r\n        \"PRONOTE\": {\r\n            \"cats\": [\r\n                21\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^pronote\\\\s[\\\\d]{4}\\\\s-\\\\s([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n            },\r\n            \"meta\": {\r\n                \"application-name\": [\r\n                    \"^pronote$\"\r\n                ]\r\n            },\r\n            \"description\": \"PRONOTE is an information system created by Index Education, a French company, designed for deployment in approximately 7,400 schools to enable streamlined communication among administrative personnel, teachers, and families.\",\r\n            \"website\": \"https://www.index-education.com/fr/logiciel-gestion-vie-scolaire.php\"\r\n        },\r\n        \"PWA\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"description\": \"Progressive Web Apps (PWAs) are web apps built and enhanced with modern APIs to deliver enhanced capabilities, reliability, and installability while reaching anyone, anywhere, on any device, all with a single codebase.\",\r\n            \"website\": \"https://web.dev/progressive-web-apps/\"\r\n        },\r\n        \"PWA Studio\": {\r\n            \"cats\": [\r\n                108\r\n            ],\r\n            \"js\": [\r\n                \"__fetchlocaledata__\",\r\n                \"fetchrootcomponent\"\r\n            ],\r\n            \"scripts\": [\r\n                \"rootcmp_cms_page\"\r\n            ],\r\n            \"description\": \"PWA Studio is a collection of tools that lets developers build complex Progressive Web Applications on top of Magento 2 or Adobe Commerce stores.\",\r\n            \"website\": \"https://developer.adobe.com/commerce/pwa-studio/\"\r\n        },\r\n        \"Pace\": {\r\n            \"cats\": [\r\n                41,\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"pacepay\",\r\n                \"rely_month_installment\",\r\n                \"rely_shop_currency\",\r\n                \"rely_shop_money_format\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"pay\\\\.pacenow\\\\.co\"\r\n            ],\r\n            \"description\": \"PacePay offers a BNPL (Buy now pay later) solution for merchants.\",\r\n            \"website\": \"https://pacenow.co/\"\r\n        },\r\n        \"Packlink PRO\": {\r\n            \"cats\": [\r\n                100,\r\n                99\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"packlink-spf-pro\\\\.appspot\\\\.com/.+myshopify\\\\.com\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Packlink PRO is a multicarrier shipping solutions for ecommerce and marketplaces.\",\r\n            \"website\": \"https://apps.shopify.com/packlink-pro\"\r\n        },\r\n        \"Paddle\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"paddle.checkout\",\r\n                \"paddlescriptlocation\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.paddle\\\\.com/paddle/paddle\\\\.js\"\r\n            ],\r\n            \"description\": \"Paddle is a billing and payment gateway for B2B SaaS companies.\",\r\n            \"website\": \"https://paddle.com/\"\r\n        },\r\n        \"PagSeguro\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"_pagsegurodirectpayment\",\r\n                \"pagsegurodirectpayment\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.pagseguro\\\\.uol\\\\.com\\\\.br/\"\r\n            ],\r\n            \"description\": \"PagSeguro is an online or mobile payment-based ecommerce service for commercial operations.\",\r\n            \"website\": \"https://pagseguro.uol.com.br\"\r\n        },\r\n        \"Pagar.me\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"pagarme.balance\",\r\n                \"pagarmecheckout\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"assets\\\\.pagar\\\\.me/\"\r\n            ],\r\n            \"description\": \"Pagar.me is a Portuguese-language online payments solution for businesses in Brazil.\",\r\n            \"website\": \"https://pagar.me\"\r\n        },\r\n        \"Page Builder Framework\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/page-builder-framework/.+site-min\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Page Builder Framework is a lightweight (less than 50kb on the frontend) and highly customizible WordPress theme.\",\r\n            \"website\": \"https://wp-pagebuilderframework.com\"\r\n        },\r\n        \"PageFly\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"__pagefly_setting__\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"pagefly\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.pagefly\\\\.io\"\r\n            ],\r\n            \"description\": \"PageFly is an app for Shopify that allows you to build landing pages, product pages, blogs, and FAQs.\",\r\n            \"website\": \"https://pagefly.io\"\r\n        },\r\n        \"Pagefai CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"pagefai cms\"\r\n            },\r\n            \"description\": \"Pagefai is a cloud-based platform that offers software-as-a-service solutions to businesses, including the Pagefai CMS which provides ecommerce functionality and other business tools.\",\r\n            \"website\": \"https://www.pagefai.com\"\r\n        },\r\n        \"Pagekit\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"pagekit\"\r\n                ]\r\n            },\r\n            \"website\": \"https://pagekit.com\",\r\n            \"cpe\": \"cpe:2.3:a:pagekit:pagekit:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Pagely\": {\r\n            \"cats\": [\r\n                62,\r\n                88\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^pagely\"\r\n            },\r\n            \"implies\": [\r\n                \"Amazon Web Services\",\r\n                \"WordPress\"\r\n            ],\r\n            \"website\": \"https://pagely.com/\"\r\n        },\r\n        \"Pagevamp\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"pagevamp\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-servedby\": \"pagevamp\"\r\n            },\r\n            \"website\": \"https://www.pagevamp.com\"\r\n        },\r\n        \"Paidy\": {\r\n            \"cats\": [\r\n                41,\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"constants.paidy\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"apps\\\\.paidy\\\\.com\"\r\n            ],\r\n            \"description\": \"Paidy is basically a two-sided payments service, acting as a middleman between consumers and merchants in Japan.\",\r\n            \"website\": \"https://paidy.com\"\r\n        },\r\n        \"Paloma\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"paloma.createcookie\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.getpaloma\\\\.com/\"\r\n            ],\r\n            \"description\": \"Paloma helps ecommerce businesses sell directly to customers in messaging channels, with automated personal shopping conversations.\",\r\n            \"website\": \"https://www.getpaloma.com\"\r\n        },\r\n        \"Panda CSS\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"css\": [\r\n                \"--made-with-panda\"\r\n            ],\r\n            \"description\": \"Panda is a styling engine that generates styling primitives to author atomic CSS and recipes in a type-safe and readable manner.\",\r\n            \"website\": \"https://panda-css.com/\"\r\n        },\r\n        \"Panelbear\": {\r\n            \"cats\": [\r\n                10,\r\n                13\r\n            ],\r\n            \"js\": [\r\n                \"panelbear\"\r\n            ],\r\n            \"description\": \"Panelbear is a simple website performance and traffic analytics tool.\",\r\n            \"website\": \"https://panelbear.com\"\r\n        },\r\n        \"Pantheon\": {\r\n            \"cats\": [\r\n                62\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^pantheon\",\r\n                \"x-pantheon-styx-hostname\": \"\",\r\n                \"x-styx-req-id\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"Fastly\",\r\n                \"MariaDB\",\r\n                \"Nginx\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Pantheon is a WebOps (Website Operations) and Management Platform for WordPress and Drupal.\",\r\n            \"website\": \"https://pantheon.io/\"\r\n        },\r\n        \"Paradox\": {\r\n            \"cats\": [\r\n                101\r\n            ],\r\n            \"js\": [\r\n                \"_applybase\",\r\n                \"oliviachatbaseurl\"\r\n            ],\r\n            \"description\": \"Paradox is an AI company that helps companies capture and screen candidates, improve conversions, and answer all candidate questions.\",\r\n            \"website\": \"https://www.paradox.ai\"\r\n        },\r\n        \"Parcelforce\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Parcelforce is a courier and logistics service in the United Kingdom.\",\r\n            \"website\": \"https://www.parcelforce.com\"\r\n        },\r\n        \"ParkingCrew\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"pcrewadloaded\"\r\n            ],\r\n            \"scripts\": [\r\n                \"var\\\\slink\\\\s=\\\\s'www\\\\.parkingcrew\\\\.net'\"\r\n            ],\r\n            \"description\": \"ParkingCrew is a direct navigation monetisation provider.\",\r\n            \"website\": \"https://www.parkingcrew.com\"\r\n        },\r\n        \"Parmin Cloud\": {\r\n            \"cats\": [\r\n                63\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^parmincloud$\"\r\n            },\r\n            \"description\": \"Parmin Cloud operates in the field of cloud services.\",\r\n            \"website\": \"https://parmin.cloud\"\r\n        },\r\n        \"Pars Elecom Portal\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"pars elecom portal\"\r\n            },\r\n            \"meta\": {\r\n                \"copyright\": [\r\n                    \"pars elecom portal\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"IIS\",\r\n                \"Microsoft ASP.NET\",\r\n                \"Windows Server\"\r\n            ],\r\n            \"website\": \"https://parselecom.net\"\r\n        },\r\n        \"Parse.ly\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"parsely\"\r\n            ],\r\n            \"website\": \"https://www.parse.ly\"\r\n        },\r\n        \"Partial.ly\": {\r\n            \"cats\": [\r\n                41,\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"partiallybutton\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"partial\\\\.ly\"\r\n            ],\r\n            \"description\": \"Partial.ly payment plan software lets businesses offer customizable payment plans to their customers.\",\r\n            \"website\": \"https://partial.ly/\"\r\n        },\r\n        \"Partnerize\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"description\": \"Partnerize is the only partnership management solution for marketers seeking high quality, scalable subsidies to primary channels.\",\r\n            \"website\": \"https://prf.hn\"\r\n        },\r\n        \"Parttrap ONE\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"pt.analytics.additem\",\r\n                \"pt.sections.checkout\",\r\n                \"pt.translation.basketisempty\"\r\n            ],\r\n            \"implies\": [\r\n                \"Bootstrap\",\r\n                \"Handlebars\",\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"description\": \"Parttrap ONE is a complete solution including PIM, CMS, business optimization and ERP integration.\",\r\n            \"website\": \"https://www.parttrap.com\"\r\n        },\r\n        \"Partytown\": {\r\n            \"cats\": [\r\n                92\r\n            ],\r\n            \"js\": [\r\n                \"partytown\"\r\n            ],\r\n            \"description\": \"Partytown is a lazy-loaded library to help relocate resource intensive scripts into a web worker, and off of the main thread.\",\r\n            \"website\": \"https://partytown.builder.io/\"\r\n        },\r\n        \"Passage\": {\r\n            \"cats\": [\r\n                69\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.1password\\\\.com/\"\r\n            ],\r\n            \"description\": \"Passage, a feature provided by 1Password, enables easy implementation of passwordless authentication methods on websites and apps.\",\r\n            \"website\": \"https://passage.1password.com\"\r\n        },\r\n        \"Paths.js\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"paths(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"website\": \"https://github.com/andreaferretti/paths-js\"\r\n        },\r\n        \"Patreon\": {\r\n            \"cats\": [\r\n                5,\r\n                41\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"patreon-connect/assets/.+ver=([\\\\d.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Patreon is an American membership platform that provides business tools for content creators to run a subscription service.\",\r\n            \"website\": \"https://www.patreon.com\"\r\n        },\r\n        \"Pattern by Etsy\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"etsy\"\r\n            ],\r\n            \"description\": \"Pattern is an offering by Etsy to set up a website for Etsy sellers, in addition to Etsy shop.\",\r\n            \"website\": \"https://www.etsy.com/pattern\"\r\n        },\r\n        \"Pay It Later\": {\r\n            \"cats\": [\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"payitlater\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/payitlater-gateway-for-woocommerce/(?:.+\\\\?ver=([\\\\d\\\\.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Pay It Later collect payments in weekly instalments from you when you make a purchase online, so you can buy now and pay it later.\",\r\n            \"website\": \"https://www.payitlater.com.au\"\r\n        },\r\n        \"PayBright\": {\r\n            \"cats\": [\r\n                41,\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"_paybright_config\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"app\\\\.paybright\\\\.com\"\r\n            ],\r\n            \"description\": \"PayBright is a Canadian fintech company that offers short-term interest-free installment loans for online shopping to consumers at checkout.\",\r\n            \"website\": \"https://paybright.com\"\r\n        },\r\n        \"PayFast\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"description\": \"PayFast is a payments processing service for South Africans \\u0026 South African websites.\",\r\n            \"website\": \"https://www.payfast.co.za/\"\r\n        },\r\n        \"PayGreen\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"paygreenjs\"\r\n            ],\r\n            \"description\": \"PayGreen is a French payment processor.\",\r\n            \"website\": \"https://www.paygreen.io\"\r\n        },\r\n        \"PayJustNow\": {\r\n            \"cats\": [\r\n                91\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.payjustnow\\\\.com/\"\r\n            ],\r\n            \"description\": \"PayJustNow is a buy now, pay later checkout option for ecommerce sites.\",\r\n            \"website\": \"https://payjustnow.com\"\r\n        },\r\n        \"PayKickStart\": {\r\n            \"cats\": [\r\n                5,\r\n                71\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"app\\\\.paykickstart\\\\.com\"\r\n            ],\r\n            \"description\": \"PayKickstart is an online shopping cart and affiliate management platform with built-in conversion enhancing features like one-click upsells for credit card/paypal, order bumps, custom checkout pages/widgets/embed forms, coupon management, auto-complete shipping fields, subscription saver sequences, and more.\",\r\n            \"website\": \"https://paykickstart.com\"\r\n        },\r\n        \"PayPal\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"__paypal_global__\",\r\n                \"checkout.enabledpayments.paypal\",\r\n                \"enablepaypal\",\r\n                \"paypal\",\r\n                \"paypal\",\r\n                \"paypalclientid\",\r\n                \"paypaljs\",\r\n                \"wc_ga_pro.available_gateways.paypal\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.paypal\\\\.com\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"paypalobjects\\\\.com\"\r\n            ],\r\n            \"meta\": {\r\n                \"id\": [\r\n                    \"in-context-paypal-metadata\"\r\n                ]\r\n            },\r\n            \"description\": \"PayPal is an online payments system that supports online money transfers and serves as an electronic alternative to traditional paper methods like checks and money orders.\",\r\n            \"website\": \"https://paypal.com\",\r\n            \"cpe\": \"cpe:2.3:a:paypal:paypal:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"PayPal Credit\": {\r\n            \"cats\": [\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"paypalcreditpopover\",\r\n                \"paypaloffersobject\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.paypalobjects\\\\.com/.+/smart-credit-message@([\\\\d\\\\.]+)\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"PayPal\"\r\n            ],\r\n            \"description\": \"PayPal Credit is a reusable line of credit that lets you pay for online purchases over time.\",\r\n            \"website\": \"https://www.paypal.com/uk/webapps/mpp/paypal-virtual-credit\"\r\n        },\r\n        \"PayPal Marketing Solutions\": {\r\n            \"cats\": [\r\n                10,\r\n                32\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.paypal\\\\.com/tagmanager/pptm\\\\.js\",\r\n                \"\\\\.paypalobjects\\\\.com/muse/\"\r\n            ],\r\n            \"implies\": [\r\n                \"PayPal\"\r\n            ],\r\n            \"description\": \"PayPal Marketing Solutions enables merchants to see shopper insights and provide custom rewards for buyers with PayPal accounts.\",\r\n            \"website\": \"https://developer.paypal.com/docs/marketing-solutions\"\r\n        },\r\n        \"PayWhirl\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"paywhirlforshopifysettings\"\r\n            ],\r\n            \"description\": \"PayWhirl provides widgets and tools to handle recurring payments.\",\r\n            \"website\": \"https://app.paywhirl.com/\"\r\n        },\r\n        \"Payflex\": {\r\n            \"cats\": [\r\n                41,\r\n                91\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"partpayassets\\\\.blob\\\\.core\\\\.windows\\\\.net\"\r\n            ],\r\n            \"description\": \"Payflex offers an online payment gateway solution to South African merchants that allows shoppers to pay over 6 weeks, interest-free.\",\r\n            \"website\": \"https://payflex.co.za/\"\r\n        },\r\n        \"Payl8r\": {\r\n            \"cats\": [\r\n                41,\r\n                91\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"payl8r\\\\.com\"\r\n            ],\r\n            \"description\": \"PayL8r.com offers repayment plans and online finance which allow you to purchase products online.\",\r\n            \"website\": \"https://payl8r.com/\"\r\n        },\r\n        \"Paylocity\": {\r\n            \"cats\": [\r\n                101\r\n            ],\r\n            \"description\": \"Paylocity is an American company which provides cloud-based payroll and human capital management software.\",\r\n            \"website\": \"https://www.paylocity.com\"\r\n        },\r\n        \"Paymenter\": {\r\n            \"cats\": [\r\n                1,\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"paymenter_session\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\",\r\n                \"Tailwind CSS\"\r\n            ],\r\n            \"description\": \"Paymenter is an open-source webshop solution for hosting companies.\",\r\n            \"website\": \"https://paymenter.org\"\r\n        },\r\n        \"Payplug\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"payplug.card\",\r\n                \"payplug_ajax_url\",\r\n                \"payplug_domain\"\r\n            ],\r\n            \"description\": \"Payplug is a French omnichannel payment solution dedicated to merchants.\",\r\n            \"website\": \"https://www.payplug.com\"\r\n        },\r\n        \"Paysafe\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"paysafe\",\r\n                \"paysafe.checkout\",\r\n                \"paysafe.fields\",\r\n                \"paysafe.threedsecure\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/hosted\\\\.paysafe\\\\.com/\"\r\n            ],\r\n            \"description\": \"Paysafe is a payment platform that enables businesses and consumers to connect and transact by payment processing, digital wallet, and online cash solutions.\",\r\n            \"website\": \"https://www.paysafe.com/en\"\r\n        },\r\n        \"PebblePost\": {\r\n            \"cats\": [\r\n                77\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.pbbl\\\\.co/\"\r\n            ],\r\n            \"description\": \"PebblePost provides marketers a way to transform recent online data into intelligent direct mail programs that perform.\",\r\n            \"website\": \"https://www.pebblepost.com\"\r\n        },\r\n        \"Peek\": {\r\n            \"cats\": [\r\n                5,\r\n                72\r\n            ],\r\n            \"js\": [\r\n                \"_peekconfig\",\r\n                \"peek\",\r\n                \"peekjsapi\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"js\\\\.peek\\\\.\\\\w+\"\r\n            ],\r\n            \"description\": \"Peek is a online booking system for tour and activity providers.\",\r\n            \"website\": \"https://www.peek.com/\"\r\n        },\r\n        \"PeerBoard\": {\r\n            \"cats\": [\r\n                2\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.peerboard\\\\.com/\"\r\n            ],\r\n            \"description\": \"PeerBoard is a plug-and-play community solution, which helps groups, clubs, startups, marketplaces and businesses create discussion forums.\",\r\n            \"website\": \"https://peerboard.com\"\r\n        },\r\n        \"PeerTube\": {\r\n            \"cats\": [\r\n                2\r\n            ],\r\n            \"meta\": {\r\n                \"og:platform\": [\r\n                    \"^peertube$\"\r\n                ]\r\n            },\r\n            \"description\": \"PeerTube is a free and open-source, decentralized, federated video platform powered by ActivityPub and WebTorrent.\",\r\n            \"website\": \"https://joinpeertube.org/\"\r\n        },\r\n        \"Pelican\": {\r\n            \"cats\": [\r\n                57\r\n            ],\r\n            \"html\": [\r\n                \"powered by \\u003ca href=\\\"[^\\u003e]+getpelican\\\\.com\",\r\n                \"powered by \\u003ca href=\\\"https?://pelican\\\\.notmyidea\\\\.org\"\r\n            ],\r\n            \"implies\": [\r\n                \"Python\"\r\n            ],\r\n            \"website\": \"https://blog.getpelican.com/\"\r\n        },\r\n        \"PencilBlue\": {\r\n            \"cats\": [\r\n                1,\r\n                11\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"pencilblue\"\r\n            },\r\n            \"implies\": [\r\n                \"Node.js\"\r\n            ],\r\n            \"website\": \"https://github.com/pencilblue/pencilblue\"\r\n        },\r\n        \"Pendo\": {\r\n            \"cats\": [\r\n                10,\r\n                58\r\n            ],\r\n            \"js\": [\r\n                \"pendo.host\",\r\n                \"pendo.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.pendo\\\\.io/\"\r\n            ],\r\n            \"description\": \"Pendo is a product analytics platform used in release to enrich the product experience and provide insights to the product management team.\",\r\n            \"website\": \"https://www.pendo.io\"\r\n        },\r\n        \"Pepperjam\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"js\": [\r\n                \"pepperjam\",\r\n                \"pepperjamtracking\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.pepperjam\\\\.com/\"\r\n            ],\r\n            \"description\": \"Pepperjam is an affiliate marketing solutions provider.\",\r\n            \"website\": \"https://www.pepperjam.com\"\r\n        },\r\n        \"Percona\": {\r\n            \"cats\": [\r\n                34\r\n            ],\r\n            \"description\": \"Percona server is an opensource, fully compatible, enhanced drop-in replacement for MySQL, providing superior performance, scalability, and instrumentation.\",\r\n            \"website\": \"https://www.percona.com\"\r\n        },\r\n        \"Percussion\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c[^\\u003e]+class=\\\"perc-region\\\"\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"(?:percussion|rhythmyx)\"\r\n                ]\r\n            },\r\n            \"website\": \"https://percussion.com\"\r\n        },\r\n        \"PerfectApps Swift\": {\r\n            \"cats\": [\r\n                100,\r\n                92\r\n            ],\r\n            \"js\": [\r\n                \"ps_apiuri\",\r\n                \"ps_storeurl\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"swift\\\\.perfectapps\\\\.io/\"\r\n            ],\r\n            \"description\": \"Swift is a page speed solution for ecommerce store owners built by PerfectApps.\",\r\n            \"website\": \"https://apps.shopify.com/swift\"\r\n        },\r\n        \"Perfex CRM\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/assets/themes/perfex/js/global\\\\.min\\\\.js(?:\\\\?v=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Perfex CRM is self hosted customer relationship management software that is a great fit for almost any company, freelancer or many other uses.\",\r\n            \"website\": \"https://www.perfexcrm.com\"\r\n        },\r\n        \"Perfmatters\": {\r\n            \"cats\": [\r\n                87,\r\n                92\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/(?:plugins|cache|uploads)/perfmatters/\"\r\n            ],\r\n            \"description\": \"Perfmatters is a performance optimisation plugin for WordPress websites.\",\r\n            \"website\": \"https://perfmatters.io\"\r\n        },\r\n        \"Performance Lab\": {\r\n            \"cats\": [\r\n                87,\r\n                92\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^performance lab ?([\\\\d.]+)?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"Performance plugin from the WordPress Performance Group, which is a collection of standalone performance modules.\",\r\n            \"website\": \"https://wordpress.org/plugins/performance-lab/\"\r\n        },\r\n        \"PerimeterX\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"cookies\": {\r\n                \"_px3\": \"\",\r\n                \"_pxff_cc\": \"\",\r\n                \"_pxhd\": \"\",\r\n                \"_pxvid\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"_pxappid\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"client\\\\.a\\\\.pxi\\\\.pub/\"\r\n            ],\r\n            \"description\": \"PerimeterX is a provider of scalable, behavior-based threat protection technology for the web, cloud, and mobile.\",\r\n            \"website\": \"https://www.perimeterx.com\"\r\n        },\r\n        \"Periodic\": {\r\n            \"cats\": [\r\n                72\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/integrations/embed/periodic-embed-resize\\\\.js\"\r\n            ],\r\n            \"description\": \"Periodic is a white-label scheduling system.\",\r\n            \"website\": \"https://periodic.is\"\r\n        },\r\n        \"Peripl\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"description\": \"Peripl is a French software company that provides cloud-based software solutions for business management, including accounting, invoicing, payroll, and project management.\",\r\n            \"website\": \"https://www.peripl.fr\"\r\n        },\r\n        \"Perl\": {\r\n            \"cats\": [\r\n                27\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"\\\\bperl\\\\b(?: ?/?v?([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"Perl is a family of two high-level, general-purpose, interpreted, dynamic programming languages.\",\r\n            \"website\": \"https://perl.org\",\r\n            \"cpe\": \"cpe:2.3:a:perl:perl:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Permutive\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"permutive\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.permutive\\\\.com\"\r\n            ],\r\n            \"description\": \"Permutive is a publisher-focused data management platform.\",\r\n            \"website\": \"https://permutive.com\"\r\n        },\r\n        \"PersonaClick\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"personaclick\",\r\n                \"personaclick_callback\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.personaclick\\\\.com/v([\\\\d.]+)\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"PersonaClick is a provide personalisation, recommandation and multi channel services.\",\r\n            \"website\": \"https://www.personaclick.com\"\r\n        },\r\n        \"Personio\": {\r\n            \"cats\": [\r\n                101\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.cdn\\\\.personio\\\\.\"\r\n            ],\r\n            \"description\": \"Personio is the all-in-one HR software for small- and medium-sized companies with 10 to 2000 employees.\",\r\n            \"website\": \"https://www.personio.com\"\r\n        },\r\n        \"Personizely\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"personizely\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"static\\\\.personizely\\\\.net/\"\r\n            ],\r\n            \"description\": \"Personizely is a conversion marketing toolkit which helps websites and ecommerce stores better engage with visitors using website widgets and personalisation.\",\r\n            \"website\": \"https://www.personizely.net\"\r\n        },\r\n        \"Perzonalization\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.perzonalization\\\\.com\"\r\n            ],\r\n            \"description\": \"Perzonalization is a AI powered personalization engine for eCommerce\",\r\n            \"website\": \"https://www.perzonalization.com/\"\r\n        },\r\n        \"Phabricator\": {\r\n            \"cats\": [\r\n                13,\r\n                47\r\n            ],\r\n            \"cookies\": {\r\n                \"phsid\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003c[^\\u003e]+(?:class|id)=\\\"phabricator-\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/phabricator/[a-f0-9]{8}/rsrc/js/phui/[a-z-]+\\\\.js$\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Phabricator is a suite of web-based software development collaboration tools, including the Differential code review tool, the Diffusion repository browser, the Herald change monitoring tool, the Maniphest bug tracker and the Phriction wiki. Phabricator integrates with Git, Mercurial, and Subversion.\",\r\n            \"website\": \"https://phacility.com\"\r\n        },\r\n        \"Phaser\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"phaser\",\r\n                \"phaser.version\"\r\n            ],\r\n            \"website\": \"https://phaser.io\"\r\n        },\r\n        \"Phenomic\": {\r\n            \"cats\": [\r\n                57\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c[^\\u003e]+id=\\\"phenomic(?:root)?\\\"\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/phenomic\\\\.browser\\\\.[a-f0-9]+\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"React\"\r\n            ],\r\n            \"description\": \"Phenomic is a modular website compiler.\",\r\n            \"website\": \"https://phenomic.io/\"\r\n        },\r\n        \"Philomena\": {\r\n            \"cats\": [\r\n                2\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^philomena$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Elixir\",\r\n                \"Erlang\"\r\n            ],\r\n            \"description\": \"Philomena is an imageboard software.\",\r\n            \"website\": \"https://github.com/derpibooru/philomena\"\r\n        },\r\n        \"Phlox\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/phlox(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"Phlox is a modern, lightweight and customizable WordPress theme gratify for almost any type of website.\",\r\n            \"website\": \"https://www.phlox.pro\"\r\n        },\r\n        \"Phoenix\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^phoenix\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Node.js\",\r\n                \"React\",\r\n                \"Webpack\"\r\n            ],\r\n            \"website\": \"https://github.com/Sazito/phoenix/\"\r\n        },\r\n        \"Phoenix Framework\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"js\": [\r\n                \"phoenix.channel\"\r\n            ],\r\n            \"implies\": [\r\n                \"Elixir\"\r\n            ],\r\n            \"description\": \"Phoenix Framework is an open-source web application framework built using the Elixir programming language.\",\r\n            \"website\": \"https://www.phoenixframework.org\"\r\n        },\r\n        \"Phoenix LiveView\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"js\": [\r\n                \"livesocket.socket\"\r\n            ],\r\n            \"implies\": [\r\n                \"Phoenix Framework\"\r\n            ],\r\n            \"description\": \"Phoenix LiveView is a library that brings live, interactive, real-time user experiences to your Phoenix applications.\",\r\n            \"website\": \"https://hexdocs.pm/phoenix_live_view/Phoenix.LiveView.html\"\r\n        },\r\n        \"Phoenix Site\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"phoenix_p_session\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"phxsite.pages_version\"\r\n            ],\r\n            \"description\": \"Phoenix Site software has been developed by the Internet Marketing Union and is especially intended for entrepreneurs (without technical knowledge) who want to score better in Google (SEO) and get more leads and customers (conversion) from their website.\",\r\n            \"website\": \"https://phoenixsite.nl\"\r\n        },\r\n        \"Photo Gallery\": {\r\n            \"cats\": [\r\n                87,\r\n                7\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/photo-gallery/.+scripts\\\\.min\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Photo Gallery plugin is a feature-rich, yet easy-to-use WordPress tool, which lets you add mobile-friendly image galleries and gallery groups to your website by 10Web.\",\r\n            \"website\": \"https://10web.io/plugins/wordpress-photo-gallery\"\r\n        },\r\n        \"PhotoShelter\": {\r\n            \"cats\": [\r\n                1,\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.psecn\\\\.photoshelter\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\",\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"PhotoShelter is a cloud storage service that doubles as a website and ecommerce platform for photographers.\",\r\n            \"website\": \"https://www.photoshelter.com\"\r\n        },\r\n        \"PhotoShelter for Brands\": {\r\n            \"cats\": [\r\n                95\r\n            ],\r\n            \"description\": \"PhotoShelter for Brands is a cloud-based media management system for companies and organizations.\",\r\n            \"website\": \"https://brands.photoshelter.com\"\r\n        },\r\n        \"PhotoSwipe\": {\r\n            \"cats\": [\r\n                7,\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"photoswipe\",\r\n                \"photoswipeparsehash\",\r\n                \"photoswipeui_default\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"photoswipe/([\\\\d\\\\.]+)/photoswipe\\\\.min\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"PhotoSwipe is an open-source gallery to support JavaScript-based image zooming.\",\r\n            \"website\": \"https://photoswipe.com\"\r\n        },\r\n        \"Photoslurp\": {\r\n            \"cats\": [\r\n                96\r\n            ],\r\n            \"js\": [\r\n                \"photoslurp\",\r\n                \"photoslurp_script\",\r\n                \"photoslurp_wdgts\",\r\n                \"photoslurpwidgetsettings\"\r\n            ],\r\n            \"description\": \"Photoslurp is a visual commerce platform that collects photos and videos of customers using your products from across social networks.\",\r\n            \"website\": \"https://hi.photoslurp.com\"\r\n        },\r\n        \"Phusion Passenger\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"phusion passenger ([\\\\d.]+)\\\\;version:\\\\1\",\r\n                \"x-powered-by\": \"phusion passenger(?:\\\\(r\\\\))? ?([\\\\d.]+)?\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"Phusion Passenger is a free web server and application server with support for Ruby, Python and Node.js.\",\r\n            \"website\": \"https://phusionpassenger.com\",\r\n            \"cpe\": \"cpe:2.3:a:phusionpassenger:phusion_passenger:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Piano\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"gcidatapiano\",\r\n                \"pianoespconfig\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.piano\\\\.io\",\r\n                \"\\\\.tinypass\\\\.com\"\r\n            ],\r\n            \"description\": \"Piano is a enterprise SaaS company which specializing in advanced media business processes and ecommerce optimisation.\",\r\n            \"website\": \"https://piano.io\"\r\n        },\r\n        \"PickyStory\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"pickystory.overridestore\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.pickystory\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"PickyStory is the ecommerce conversion platform.\",\r\n            \"website\": \"https://pickystory.com\"\r\n        },\r\n        \"Pico\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"js\": [\r\n                \"pico\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"widget\\\\.pico\\\\.tools\"\r\n            ],\r\n            \"website\": \"https://trypico.com\"\r\n        },\r\n        \"Pico CSS\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"description\": \"Pico CSS is a minimal CSS framework for semantic HTML, without using classes.\",\r\n            \"website\": \"https://picocss.com\"\r\n        },\r\n        \"Picreel\": {\r\n            \"cats\": [\r\n                77,\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"picreel\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.picreel\\\\.com\"\r\n            ],\r\n            \"description\": \"Picreel is a conversion optimisation software.\",\r\n            \"website\": \"https://www.picreel.com\"\r\n        },\r\n        \"Picturepark\": {\r\n            \"cats\": [\r\n                95\r\n            ],\r\n            \"js\": [\r\n                \"pictureparkconfiguration\"\r\n            ],\r\n            \"description\": \"Picturepark is designed to facilitate your DAM policies by storing, tagging, searching and delivering files in an automated and controlled way.\",\r\n            \"website\": \"https://picturepark.com\"\r\n        },\r\n        \"Piman\": {\r\n            \"cats\": [\r\n                68\r\n            ],\r\n            \"description\": \"Piman is an open-source accessibility UI framework create by Blueplanet Inc.\",\r\n            \"website\": \"https://piman.cc\"\r\n        },\r\n        \"Pimcore\": {\r\n            \"cats\": [\r\n                1,\r\n                6\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^pimcore$\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"/pimcorecore/js/targeting\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Pimcore is an open-source digital platform that aggregates, enriches, and manages enterprise data and provides up-to-date, consistent, and personalised experiences to customers.\",\r\n            \"website\": \"https://pimcore.com/en/digital-experience-platform\",\r\n            \"cpe\": \"cpe:2.3:a:pimcore:pimcore:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Pin Payments\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"api\\\\.pinpayments\\\\.com\"\r\n            ],\r\n            \"description\": \"Pin Payments is an all-in-one online payment system. It offers merchants a simple JSON API, secure credit card storage, multi-currency capabilities, bank account compatibility, onsite payment processing and automatic fund transfer to specified bank accounts.\",\r\n            \"website\": \"https://www.pinpayments.com/\"\r\n        },\r\n        \"Pingdom RUM\": {\r\n            \"cats\": [\r\n                78\r\n            ],\r\n            \"js\": [\r\n                \"_prum\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"rum-static\\\\.pingdom\\\\.net\"\r\n            ],\r\n            \"description\": \"Pingdom RUM(Real User Monitoring) is a feature of the Pingdom website monitoring and performance testing service. RUM enables you to collect and analyse data on how real users are experiencing your website.\",\r\n            \"website\": \"https://www.pingdom.com/real-user-monitoring/\"\r\n        },\r\n        \"Pingdom Uptime Monitoring\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"meta\": {\r\n                \"title\": [\r\n                    \"^pingdom public reports overview$\"\r\n                ]\r\n            },\r\n            \"description\": \"Pingdom Uptime Monitoring is a feature provided by the Pingdom website monitoring and performance testing service. It allows you to monitor the uptime and availability of your website.\",\r\n            \"website\": \"https://www.pingdom.com/product/uptime-monitoring/\"\r\n        },\r\n        \"Pingoteam\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"designer\": [\r\n                    \"pingoteam\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://www.pingoteam.ir/\"\r\n        },\r\n        \"PinnacleCart\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"user_delete_address\",\r\n                \"user_delete_payment_profile\"\r\n            ],\r\n            \"description\": \"PinnacleCart is an ecommerce platform.\",\r\n            \"website\": \"https://www.pinnaclecart.com\"\r\n        },\r\n        \"Pinterest\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//assets\\\\.pinterest\\\\.com/js/pinit\\\\.js\"\r\n            ],\r\n            \"description\": \"Pinterest is an image sharing and social media service designed to enable saving and discovery of information.\",\r\n            \"website\": \"https://pinterest.com\"\r\n        },\r\n        \"Pinterest Ads\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"description\": \"Pinterest Ads is an online advertising platform developed by Pinterest.\",\r\n            \"website\": \"https://ads.pinterest.com/\"\r\n        },\r\n        \"Pinterest Conversion Tag\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"pintrk\"\r\n            ],\r\n            \"description\": \"Pinterest Conversion Tag allows you to track actions people take on your website after viewing your Promoted Pin.\",\r\n            \"website\": \"https://www.pinterest.com.au/business/\"\r\n        },\r\n        \"Pipedrive\": {\r\n            \"cats\": [\r\n                52,\r\n                53\r\n            ],\r\n            \"js\": [\r\n                \"leadbooster\"\r\n            ],\r\n            \"description\": \"Pipedrive is a cloud-based sales CRM.\",\r\n            \"website\": \"https://www.pipedrive.com/\"\r\n        },\r\n        \"Piwigo\": {\r\n            \"cats\": [\r\n                7\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^piwigo\\\\s\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"MySQL\"\r\n            ],\r\n            \"description\": \"Piwigo is an open-source photo management software designed for creating and managing online photo galleries.\",\r\n            \"website\": \"https://piwigo.com\"\r\n        },\r\n        \"Piwik PRO Core\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.piwik\\\\.pro/\"\r\n            ],\r\n            \"description\": \"Piwik PRO Core is a free alternative to Google Analytics that is privacy \\u0026 compliance focused.\",\r\n            \"website\": \"https://piwik.pro\"\r\n        },\r\n        \"Pixc\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//pixc\\\\.com/\"\r\n            ],\r\n            \"description\": \"Pixc is human powered image editing platform.\",\r\n            \"website\": \"https://pixc.com\"\r\n        },\r\n        \"PixelFed\": {\r\n            \"cats\": [\r\n                2\r\n            ],\r\n            \"implies\": [\r\n                \"Laravel\"\r\n            ],\r\n            \"description\": \"PixelFed is an activitypub based image sharing platform.\",\r\n            \"website\": \"https://pixelfed.org\"\r\n        },\r\n        \"PixelYourSite\": {\r\n            \"cats\": [\r\n                87,\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"pys.facebook\",\r\n                \"pys_generate_token\",\r\n                \"pysoptions\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/pixelyoursite/\"\r\n            ],\r\n            \"description\": \"PixelyourSite is now probably the most complex tracking tool for WordPress, managing the Facebook Pixel, Google Analytics, Google Ads Remarketing, Pinterest Tag, Bing Tag, and virtually any other script.\",\r\n            \"website\": \"https://www.pixelyoursite.com\"\r\n        },\r\n        \"Pixieset Store\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"pixiesetproducteditor\",\r\n                \"pixiesetproductoptionselection\"\r\n            ],\r\n            \"description\": \"Pixieset Store lets you sell professional print products, digital downloads, and other items directly from your galleries.\",\r\n            \"website\": \"https://pixieset.com\"\r\n        },\r\n        \"Pixieset Website\": {\r\n            \"cats\": [\r\n                1,\r\n                51\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^pixieset$\"\r\n                ]\r\n            },\r\n            \"description\": \"Pixieset Website is a space to create your own beautiful photography website.\",\r\n            \"website\": \"https://pixieset.com\"\r\n        },\r\n        \"Pixlee TurnTo\": {\r\n            \"cats\": [\r\n                96\r\n            ],\r\n            \"js\": [\r\n                \"pixlee\",\r\n                \"pixlee_analytics\",\r\n                \"turnto\",\r\n                \"turntoconfig\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"assets\\\\.pixlee\\\\.com\"\r\n            ],\r\n            \"description\": \"Pixlee TurnTo is a social UGC, ratings and reviews, and influencer marketing platform for community-driven brands.\",\r\n            \"website\": \"https://pixlee.com\"\r\n        },\r\n        \"Pixnet\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"pix.mib\"\r\n            ],\r\n            \"description\": \"Pixnet is an Taiwanese mobile photo sharing, blogging, and social networking service.\",\r\n            \"website\": \"https://www.pixnet.net\"\r\n        },\r\n        \"PizzaNetz\": {\r\n            \"cats\": [\r\n                1,\r\n                93\r\n            ],\r\n            \"description\": \"PizzaNetz is an ordering system and shop system for pizzerias, Chinese restaurant and kebabs.\",\r\n            \"website\": \"https://www.pizzanetz.de\"\r\n        },\r\n        \"Plaid\": {\r\n            \"cats\": [\r\n                41,\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"plaid.version\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"cdn\\\\.plaid\\\\.com/\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"\\\\.plaid\\\\.com/\"\r\n            ],\r\n            \"description\": \"Plaid is a fintech company that facilitates communication between financial services apps and users' banks and credit card providers.\",\r\n            \"website\": \"https://plaid.com\"\r\n        },\r\n        \"Planet\": {\r\n            \"cats\": [\r\n                49\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^planet(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"Planet is a feed aggregator, which creates pages with entries from the original feeds in chronological order, most recent entries first.\",\r\n            \"website\": \"https://planetplanet.org\"\r\n        },\r\n        \"Plasmic\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"__next_data__.props.pageprops.plasmicdata\"\r\n            ],\r\n            \"description\": \"Plasmic is a visual, no-code headless page/content builder for any website or codebase.\",\r\n            \"website\": \"https://www.plasmic.app\"\r\n        },\r\n        \"Platform.sh\": {\r\n            \"cats\": [\r\n                62\r\n            ],\r\n            \"headers\": {\r\n                \"x-platform-cluster\": \"\",\r\n                \"x-platform-processor\": \"\",\r\n                \"x-platform-router\": \"\",\r\n                \"x-platform-server\": \"\"\r\n            },\r\n            \"website\": \"https://platform.sh\"\r\n        },\r\n        \"PlatformOS\": {\r\n            \"cats\": [\r\n                1,\r\n                62\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^platformos$\"\r\n            },\r\n            \"website\": \"https://www.platform-os.com\"\r\n        },\r\n        \"Platforma LP\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.lpcdn\\\\.site/\"\r\n            ],\r\n            \"description\": \"Platforma LP is a web design and development platform that provides ready-to-use website templates for various industries and purposes. It is a collection of over 500 website templates that can be customised and edited according to user needs.\",\r\n            \"website\": \"https://platformalp.ru\"\r\n        },\r\n        \"PlatinMarket\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"platinmarket\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//platincdn\\\\.com/\"\r\n            ],\r\n            \"description\": \"PlatinMarket is an ecommerce platform that provides solutions for online businesses to create and manage their online stores.\",\r\n            \"website\": \"https://www.platinmarket.com\"\r\n        },\r\n        \"Plausible\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"plausible\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"plausible\\\\.io/js/plausible\\\\.js\"\r\n            ],\r\n            \"description\": \"Plausible is an open-source alternative to Google Analytics.\",\r\n            \"website\": \"https://plausible.io/\"\r\n        },\r\n        \"Play\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"cookies\": {\r\n                \"play_session\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"Scala\"\r\n            ],\r\n            \"website\": \"https://www.playframework.com\",\r\n            \"cpe\": \"cpe:2.3:a:playframework:play_framework:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Plaza\": {\r\n            \"cats\": [\r\n                103\r\n            ],\r\n            \"description\": \"Plaza is a ecommerce platform that allows brands and retailers to communicate with customers via live video.\",\r\n            \"website\": \"https://www.useplaza.com\"\r\n        },\r\n        \"Pleroma\": {\r\n            \"cats\": [\r\n                2\r\n            ],\r\n            \"description\": \"Pleroma is a free, federated social networking server built on open protocols.\",\r\n            \"website\": \"https://pleroma.social/\"\r\n        },\r\n        \"Plesk\": {\r\n            \"cats\": [\r\n                9\r\n            ],\r\n            \"js\": [\r\n                \"plesk.form\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^plesk(?:l|w)in\",\r\n                \"x-powered-by-plesk\": \"^plesk\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"common\\\\.js\\\\?plesk\"\r\n            ],\r\n            \"meta\": {\r\n                \"plesk-build\": []\r\n            },\r\n            \"description\": \"Plesk is a web hosting and server data centre automation software with a control panel developed for Linux and Windows-based retail hosting service providers.\",\r\n            \"website\": \"https://www.plesk.com\",\r\n            \"cpe\": \"cpe:2.3:a:parallels:parallels_plesk_panel:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Pligg\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"pligg_\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cspan[^\\u003e]+id=\\\"xvotes-0\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"pligg\"\r\n                ]\r\n            },\r\n            \"website\": \"https://pligg.com\",\r\n            \"cpe\": \"cpe:2.3:a:pligg:pligg_cms:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Plone\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^/\\\\+\\\\+resource\\\\+\\\\+\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"plone\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Python\"\r\n            ],\r\n            \"description\": \"Plone is a free and open source content management system (CMS) built on top of the Zope application server.\",\r\n            \"website\": \"https://plone.org/\",\r\n            \"cpe\": \"cpe:2.3:a:plone:plone:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Plotly\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"plotly.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"https?://cdn\\\\.plot\\\\.ly/plotly\"\r\n            ],\r\n            \"implies\": [\r\n                \"D3\"\r\n            ],\r\n            \"website\": \"https://plot.ly/javascript/\"\r\n        },\r\n        \"Plug\\u0026Pay\": {\r\n            \"cats\": [\r\n                6,\r\n                41\r\n            ],\r\n            \"cookies\": {\r\n                \"plug_pay_session\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"Laravel\"\r\n            ],\r\n            \"description\": \"Plug\\u0026Pay is a payment processor that provides payment solutions for ecommerce businesses.\",\r\n            \"website\": \"https://plugandpay.nl\"\r\n        },\r\n        \"Plyr\": {\r\n            \"cats\": [\r\n                14\r\n            ],\r\n            \"css\": [\r\n                \"--plyr-progress\"\r\n            ],\r\n            \"js\": [\r\n                \"plyr\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.plyr\\\\.io/([0-9.]+)/.+\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Plyr is a simple, lightweight, accessible and customizable HTML5, YouTube and Vimeo media player that supports modern browsers.\",\r\n            \"website\": \"https://plyr.io\"\r\n        },\r\n        \"Po.st\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"pwidget_config\"\r\n            ],\r\n            \"website\": \"https://www.po.st/\"\r\n        },\r\n        \"Pocket\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"widgets\\\\.getpocket\\\\.com/\"\r\n            ],\r\n            \"meta\": {\r\n                \"pocket-site-verification'\": []\r\n            },\r\n            \"description\": \"Pocket is a social bookmarking service that can be integrated into a website with the use of a web widget.\",\r\n            \"website\": \"https://getpocket.com\"\r\n        },\r\n        \"Podia\": {\r\n            \"cats\": [\r\n                21,\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"_podia_storefront_visitor_id\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"podia.checkout\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.podia\\\\.com\"\r\n            ],\r\n            \"description\": \"Podia is a platform to host and sell online courses, memberships, and digital downloads.\",\r\n            \"website\": \"https://www.podia.com\"\r\n        },\r\n        \"Podigee\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"podigeepodcastplayers\"\r\n            ],\r\n            \"description\": \"Podigee is an independent company for podcast publishers. Podigee offers hosting, distribution, analytics and monetisation of podcasts.\",\r\n            \"website\": \"https://www.podigee.com\"\r\n        },\r\n        \"Podium\": {\r\n            \"cats\": [\r\n                5,\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"podiumwebchat\",\r\n                \"podiumwebsitewidgetloaded\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.podium\\\\.com/\"\r\n            ],\r\n            \"description\": \"Podium is a customer communication platform for businesses who interact with customers on a local level.\",\r\n            \"website\": \"https://www.podium.com\"\r\n        },\r\n        \"Podsights\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.pdst\\\\.fm\"\r\n            ],\r\n            \"description\": \"Podsights is attribution technology platform that brands and agencies use to measure and scale their podcast advertising\",\r\n            \"website\": \"https://podsights.com/\"\r\n        },\r\n        \"Pojo.me\": {\r\n            \"cats\": [\r\n                68\r\n            ],\r\n            \"js\": [\r\n                \"pojoa11yoptions\"\r\n            ],\r\n            \"description\": \"Pojo.me provides a Accessibility overlay plug-in for any WordPress Theme or Page Builder.\",\r\n            \"website\": \"https://pojo.me/plugins/accessibility/\"\r\n        },\r\n        \"Poloriz\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"widget\\\\.poloriz\\\\.com/\"\r\n            ],\r\n            \"description\": \"Poloriz's technology automatically creates a personalised, full-screen, mobile-first, cross-selling user experience for shoppers.\",\r\n            \"website\": \"https://www.poloriz.com\"\r\n        },\r\n        \"Polyfill\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"polyfill\\\\.io/v([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Polyfill is a service which accepts a request for a set of browser features and returns only the polyfills that are needed by the requesting browser.\",\r\n            \"website\": \"https://polyfill.io\"\r\n        },\r\n        \"Polylang\": {\r\n            \"cats\": [\r\n                87,\r\n                89\r\n            ],\r\n            \"cookies\": {\r\n                \"pll_language\": \"[a-z]{2}\"\r\n            },\r\n            \"headers\": {\r\n                \"x-redirected-by\": \"polylang(?: (pro))?\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"Polylang is a WordPress plugin which allows you to create multilingual WordPress site.\",\r\n            \"website\": \"https://wordpress.org/plugins/polylang\"\r\n        },\r\n        \"Polymer\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"polymer.version\"\r\n            ],\r\n            \"html\": [\r\n                \"(?:\\u003cpolymer-[^\\u003e]+|\\u003clink[^\\u003e]+rel=\\\"import\\\"[^\\u003e]+/polymer\\\\.html\\\")\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"polymer\\\\.js\"\r\n            ],\r\n            \"website\": \"https://polymer-project.org\"\r\n        },\r\n        \"Popmenu\": {\r\n            \"cats\": [\r\n                1,\r\n                93\r\n            ],\r\n            \"cookies\": {\r\n                \"popmenu-token\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"popmenu_client\",\r\n                \"popmenuhydrated\"\r\n            ],\r\n            \"implies\": [\r\n                \"Apollo\",\r\n                \"React\"\r\n            ],\r\n            \"description\": \"Popmenu is a restaurant platform which offers CMS, online menus, ordering and delivery and marketing automation solutions.\",\r\n            \"website\": \"https://get.popmenu.com\"\r\n        },\r\n        \"Popper\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"createpopper\",\r\n                \"popper.applystyles\",\r\n                \"popper.defaults\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/popper(?:\\\\.min)?\\\\.js(?:/([0-9.]+))?\\\\;version:\\\\1\",\r\n                \"popperjs(?:/|-)core(?:@|-)([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Popper is a positioning engine, its purpose is to calculate the position of an element to make it possible to position it near a given reference element.\",\r\n            \"website\": \"https://popper.js.org\"\r\n        },\r\n        \"PopularFX\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/popularfx/.+\\\\?ver=([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"PopularFX is a fully customizable responsive WordPress theme. It comes with drag and drop page builder.\",\r\n            \"website\": \"https://popularfx.com\"\r\n        },\r\n        \"Popup Maker\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"pum_popups\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/popup-maker/(?:.+site(?:\\\\.min)?\\\\.js\\\\?.+ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Popup Maker is a plugin that lets you create popup windows for your WordPress website.\",\r\n            \"website\": \"https://wppopupmaker.com\"\r\n        },\r\n        \"Post Affiliate Pro\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"js\": [\r\n                \"postaffaction\",\r\n                \"postaffcookie\",\r\n                \"postaffinfo\",\r\n                \"postafftracker\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:affiliate|associate)\\\\..+/scripts/trackjs\\\\.js\",\r\n                \"postaffiliatepro\\\\.com/scripts/trackjs\\\\.js\"\r\n            ],\r\n            \"description\": \"Post Affiliate Pro is a software built for online stores and ecommerce websites that need to track and monitor their affiliate network.\",\r\n            \"website\": \"https://www.postaffiliatepro.com\"\r\n        },\r\n        \"PostHog\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"posthog\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"app\\\\.posthog\\\\.com/\"\r\n            ],\r\n            \"description\": \"PostHog is the open-source, all-in-one product analytics platform.\",\r\n            \"website\": \"https://posthog.com\"\r\n        },\r\n        \"PostNL\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"PostNL (formerly TNT) is a mail, parcel and ecommerce corporation with operations in the Netherlands, Germany, Italy, Belgium, and the United Kingdom.\",\r\n            \"website\": \"https://postnl.post\"\r\n        },\r\n        \"Poste Italiane\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Poste Italiane is the Italian postal service provider.\",\r\n            \"website\": \"https://www.poste.it\"\r\n        },\r\n        \"Posterous\": {\r\n            \"cats\": [\r\n                1,\r\n                11\r\n            ],\r\n            \"js\": [\r\n                \"posterous\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cdiv class=\\\"posterous\"\r\n            ],\r\n            \"website\": \"https://posterous.com\"\r\n        },\r\n        \"PostgreSQL\": {\r\n            \"cats\": [\r\n                34\r\n            ],\r\n            \"description\": \"PostgreSQL, also known as Postgres, is a free and open-source relational database management system emphasizing extensibility and SQL compliance.\",\r\n            \"website\": \"https://www.postgresql.org/\",\r\n            \"cpe\": \"cpe:2.3:a:postgresql:postgresql:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Postpay\": {\r\n            \"cats\": [\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"postpay\",\r\n                \"postpayjsconfig\",\r\n                \"wc_postpay_init_params\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.postpay\\\\.io/(?:.+\\\\?ver=([\\\\d\\\\.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Postpay is a payment solution that allows you to split your purchase amount into instalments.\",\r\n            \"website\": \"https://postpay.io\"\r\n        },\r\n        \"Postscript\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"postscript.getsubscriberid\",\r\n                \"postscript.issubscriberinputchecked\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"sdk\\\\.postscript\\\\.io/\"\r\n            ],\r\n            \"description\": \"Postscript is an SMS and MMS marketing platform for Shopify stores.\",\r\n            \"website\": \"https://www.postscript.io\"\r\n        },\r\n        \"Potions\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"potions.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.get-potions\\\\.com/\"\r\n            ],\r\n            \"description\": \"Potions is a personalisation technology for customising the ecommerce experience for site visitors without the use of cookies.\",\r\n            \"website\": \"https://get-potions.com\"\r\n        },\r\n        \"PowerReviews\": {\r\n            \"cats\": [\r\n                90\r\n            ],\r\n            \"js\": [\r\n                \"powerreviews\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"ui\\\\.powerreviews\\\\.com\"\r\n            ],\r\n            \"description\": \"Powerreviews is a provider of UGC solutions like ratings and reviews.\",\r\n            \"website\": \"https://www.powerreviews.com/\"\r\n        },\r\n        \"PowerSchool\": {\r\n            \"cats\": [\r\n                21\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.powerschool\\\\.com\"\r\n            },\r\n            \"meta\": {\r\n                \"application-name\": [\r\n                    \"^powerschool$\"\r\n                ]\r\n            },\r\n            \"description\": \"PowerSchool is a widely used student information system (SIS) used by K-12 schools, districts, and other educational institutions to manage student data and information. The software is developed and marketed by PowerSchool Group LLC, which is based in California, USA.\",\r\n            \"website\": \"https://www.powerschool.com\"\r\n        },\r\n        \"Powerboutique\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"powerboutique\"\r\n            ],\r\n            \"website\": \"https://www.powerboutique.com/\"\r\n        },\r\n        \"Powergap\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"html\": [\r\n                \"\\u003ca[^\\u003e]+title=\\\"powergap\",\r\n                \"\\u003cinput type=\\\"hidden\\\" name=\\\"shopid\\\"\"\r\n            ],\r\n            \"website\": \"https://powergap.de\"\r\n        },\r\n        \"Preact\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"description\": \"Preact is a JavaScript library that describes itself as a fast 3kB alternative to React with the same ES6 API.\",\r\n            \"website\": \"https://preactjs.com\"\r\n        },\r\n        \"Prebid\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"pbjs\",\r\n                \"pbjs.version\",\r\n                \"prebid_timeout\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/prebid\\\\.js\",\r\n                \"adnxs\\\\.com/[^\\\"]*(?:prebid|/pb\\\\.js)\"\r\n            ],\r\n            \"description\": \"Prebid is an open-source header bidding wrapper. It forms the core of our Nucleus ad platform, helping maximize revenue and performance for publishers.\",\r\n            \"website\": \"https://prebid.org\"\r\n        },\r\n        \"Prediggo\": {\r\n            \"cats\": [\r\n                76,\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"prediggo\",\r\n                \"prediggosearchformexternalac\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"js/prediggo/(?:[\\\\w]+)\\\\.js\"\r\n            ],\r\n            \"description\": \"Prediggo is an ecommerce personalisation and marketing automation software provider.\",\r\n            \"website\": \"https://prediggo.com\"\r\n        },\r\n        \"Prefix-Free\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"prefixfree\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"prefixfree\\\\.js\"\r\n            ],\r\n            \"website\": \"https://leaverou.github.io/prefixfree/\"\r\n        },\r\n        \"Preline UI\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/preline\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Tailwind CSS\"\r\n            ],\r\n            \"description\": \"Preline UI is an open-source set of prebuilt UI components based on the utility-first Tailwind CSS framework.\",\r\n            \"website\": \"https://preline.co\"\r\n        },\r\n        \"Premio Chaty\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"chaty_settings.chaty_widgets\",\r\n                \"chaty_settings.object_settings\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/chaty/\"\r\n            ],\r\n            \"description\": \"Chat with your website visitors via their favorite channels with Chaty by Premio.\",\r\n            \"website\": \"https://premio.io/downloads/chaty\"\r\n        },\r\n        \"Prepr\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"__prepr_uid\": \"\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"\\\\.prepr\\\\.io/\"\r\n            ],\r\n            \"meta\": {\r\n                \"prepr:id\": []\r\n            },\r\n            \"description\": \"Prepr is a headless CMS with data-driven capabilities.\",\r\n            \"website\": \"https://prepr.io\"\r\n        },\r\n        \"Press Customizr\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/customizr/.+js(?:\\\\?ver=([\\\\d\\\\.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Press Customizr is a multipurpose WordPress theme suitable for small businesses and ecommerce sites.\",\r\n            \"website\": \"https://presscustomizr.com/customizr\"\r\n        },\r\n        \"Press Hueman\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"huparams\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/hueman/.+scripts\\\\.min\\\\.js(?:\\\\?ver=([\\\\d\\\\.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Press Hueman is a mobile friendly WordPress theme for blogs, magazines and business websites.\",\r\n            \"website\": \"https://presscustomizr.com/hueman\"\r\n        },\r\n        \"PressMaximum Customify\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"customify\",\r\n                \"customify_is_mobile\",\r\n                \"customify_js\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/customify/.+theme\\\\.min\\\\.js(?:.+ver=([\\\\d\\\\.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"PressMaximum Customify is lightweight, responsive and flexible multipurpose WordPress theme.\",\r\n            \"website\": \"https://pressmaximum.com/customify\"\r\n        },\r\n        \"Pressable\": {\r\n            \"cats\": [\r\n                62\r\n            ],\r\n            \"headers\": {\r\n                \"host-header\": \"^pressable\"\r\n            },\r\n            \"implies\": [\r\n                \"WordPress\"\r\n            ],\r\n            \"description\": \"Pressable is a managed hoting platform for WordPress.\",\r\n            \"website\": \"https://pressable.com\"\r\n        },\r\n        \"PrestaShop\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"prestashop\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"freeproducttranslation\",\r\n                \"prestashop\",\r\n                \"pricedisplaymethod\",\r\n                \"pricedisplayprecision\",\r\n                \"rcanalyticsevents.eventprestashopcheckout\"\r\n            ],\r\n            \"headers\": {\r\n                \"powered-by\": \"^prestashop$\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003c!-- /block [a-z ]+ module (?:header|top)?\\\\s?--\\u003e\",\r\n                \"\\u003c!-- /module block [a-z ]+ --\\u003e\",\r\n                \"powered by \\u003ca\\\\s+[^\\u003e]+\\u003eprestashop\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"prestashop\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"PrestaShop is a freemium, open-source ecommerce solution, written in the PHP programming language with support for the MySQL database management system.\",\r\n            \"website\": \"https://www.prestashop.com\",\r\n            \"cpe\": \"cpe:2.3:a:prestashop:prestashop:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Pretty Links\": {\r\n            \"cats\": [\r\n                87,\r\n                71\r\n            ],\r\n            \"description\": \"Pretty Links is a WordPress plugin URL shortener, link cloaker, branded link, and QR code generator.\",\r\n            \"website\": \"https://prettylinks.com\"\r\n        },\r\n        \"PriceSpider\": {\r\n            \"cats\": [\r\n                97\r\n            ],\r\n            \"js\": [\r\n                \"pricespider.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.pricespider\\\\.com/\"\r\n            ],\r\n            \"description\": \"PriceSpider is an advanced retail data technology company that provides insights about consumer purchasing behavior.\",\r\n            \"website\": \"https://www.pricespider.com\"\r\n        },\r\n        \"PrimeNG\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"css\": [\r\n                \"\\\\.p-(?:toast|calendar|dialog-mask|menuitem-text)(?:-content)?\\\\{\"\r\n            ],\r\n            \"description\": \"PrimeNG is a rich set of open-source UI Components for Angular.\",\r\n            \"website\": \"https://www.primefaces.org\"\r\n        },\r\n        \"PrimeReact\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"css\": [\r\n                \"\\\\.p-(?:toast|calendar|dialog-mask|menuitem-text)(?:-content)?\\\\{\"\r\n            ],\r\n            \"description\": \"PrimeReact is a rich set of open-source UI Components for React.\",\r\n            \"website\": \"https://www.primefaces.org\"\r\n        },\r\n        \"PrimeVue\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"css\": [\r\n                \"\\\\.p-(?:toast|calendar|dialog-mask|menuitem-text)(?:-content)?\\\\{\"\r\n            ],\r\n            \"description\": \"PrimeVue is a rich set of open-source UI Components for Vue.js.\",\r\n            \"website\": \"https://www.primefaces.org\"\r\n        },\r\n        \"Primis\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"sekindodisplayedplacement\",\r\n                \"sekindoflowingplayeron\",\r\n                \"sekindonativeskinapi\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.sekindo\\\\.com\"\r\n            ],\r\n            \"description\": \"Primis is a video discovery platform for publishers.\",\r\n            \"website\": \"https://www.primis.tech\"\r\n        },\r\n        \"Printful\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"static\\\\.cdn\\\\.printful\\\\.com\"\r\n            ],\r\n            \"implies\": [\r\n                \"Cart Functionality\"\r\n            ],\r\n            \"description\": \"Printful offers print-on-demand drop shipping solution for ecommerce sites.\",\r\n            \"website\": \"https://www.printful.com/\"\r\n        },\r\n        \"Priority Hints\": {\r\n            \"cats\": [\r\n                92\r\n            ],\r\n            \"description\": \"Priority Hints exposes a mechanism for developers to signal a relative priority for browsers to consider when fetching resources.\",\r\n            \"website\": \"https://wicg.github.io/priority-hints/\"\r\n        },\r\n        \"Prism\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"apex.libversions.prismjs\",\r\n                \"prism\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"prism\\\\.js\"\r\n            ],\r\n            \"description\": \"Prism is an extensible syntax highlighter.\",\r\n            \"website\": \"https://prismjs.com\"\r\n        },\r\n        \"Prismic\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.prismic\\\\.io/\"\r\n            ],\r\n            \"description\": \"Prismic is a headless CMS for Jamstack.\",\r\n            \"website\": \"https://prismic.io\"\r\n        },\r\n        \"Privy\": {\r\n            \"cats\": [\r\n                32,\r\n                75\r\n            ],\r\n            \"js\": [\r\n                \"privy\",\r\n                \"privysettings\",\r\n                \"privywidget\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.privy\\\\.com/\"\r\n            ],\r\n            \"description\": \"Privy is a all-in-one marketing automation platform for ecommerce.\",\r\n            \"website\": \"https://www.privy.com\"\r\n        },\r\n        \"Privy App\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//shopify\\\\.privy\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Privy\"\r\n            ],\r\n            \"description\": \"Privy App helps you improve your website conversion rate, grow your email list, automate your email marketing, drive repeat purchases and much more.\",\r\n            \"website\": \"https://apps.shopify.com/privy\"\r\n        },\r\n        \"ProcessWire\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"processwire\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"processwire cms\"\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"ProcessWire is an open source content management system (CMS) and framework (CMF).\",\r\n            \"website\": \"https://processwire.com/\"\r\n        },\r\n        \"Product Hunt\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"description\": \"Product Hunt is a community-based website that allows makers and marketers to launch their products or services and get in touch with their first real users.\",\r\n            \"website\": \"https://www.producthunt.com\"\r\n        },\r\n        \"Product Personalizer\": {\r\n            \"cats\": [\r\n                100,\r\n                76\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/product-personalizer/pplr_common\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Product Personalizer apps can help you to customise your products and offer a more personalised experience for your customers.\",\r\n            \"website\": \"https://productpersonalizer.com\"\r\n        },\r\n        \"ProfilePress\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"cookies\": {\r\n                \"ppwp_wp_session\": \"\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/wp-user-avatar(?:-pro)?/.+frontend\\\\.min\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"ProfilePress is a WordPress registration plugin that lets you create login forms, registration forms, user profiles, and more.\",\r\n            \"website\": \"https://profilepress.net\"\r\n        },\r\n        \"Profitwell\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"profitwell\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"profitwell\\\\.js\"\r\n            ],\r\n            \"website\": \"https://www.profitwell.com/\"\r\n        },\r\n        \"Progress MOVEit\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"headers\": {\r\n                \"x-moveitisapi-version\": \"^(.+)$\\\\;version:\\\\1\"\r\n            },\r\n            \"meta\": {\r\n                \"apple-itunes-app\": [\r\n                    \"app-id=1500056420\"\r\n                ],\r\n                \"google-play-app\": [\r\n                    \"app-id=com\\\\.progress\\\\.moveit\\\\.transfer\\\\.dev\\\\.appid\"\r\n                ]\r\n            },\r\n            \"description\": \"Progress MOVEit is a managed file transfer solution that enables secure and compliant transfer of sensitive files while providing automation, central management, and auditing capabilities.\",\r\n            \"website\": \"https://www.progress.com/moveit\"\r\n        },\r\n        \"Progress Sitefinity\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"sfdataintell\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^sitefinity\\\\s([\\\\s]{3,9})\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"description\": \"Progress Sitefinity is a content management system (CMS) that you use to create, store, manage, and present content on your website.\",\r\n            \"website\": \"https://www.sitefinity.com\",\r\n            \"cpe\": \"cpe:2.3:a:progress:sitefinity:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Progress WS_FTP\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/thinclient/(?:wtm|webresource)(?:\\\\.axd|/public)\\\\;confidence:60\"\r\n            ],\r\n            \"description\": \"Progress WS_FTP is a file transfer client software developed by Progress Software Corporation, supporting FTP, FTPS, SFTP, and HTTPS protocols with features like drag-and-drop support, file synchronization, and encrypted data transmission.\",\r\n            \"website\": \"https://www.progress.com/ws_ftp\",\r\n            \"cpe\": \"cpe:2.3:a:progress:ws_ftp_server:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Project Wonderful\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"pw_adloader\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cdiv[^\\u003e]+id=\\\"pw_adbox_\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^https?://(?:www\\\\.)?projectwonderful\\\\.com/(?:pwa\\\\.js|gen\\\\.php)\"\r\n            ],\r\n            \"website\": \"https://projectwonderful.com\"\r\n        },\r\n        \"Projesoft\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"projesoft\\\\.js\"\r\n            ],\r\n            \"website\": \"https://www.projesoft.com.tr\"\r\n        },\r\n        \"PromoBuilding\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"cookies\": {\r\n                \"promobuilding_session\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"promoapi\",\r\n                \"promodomain\",\r\n                \"promoisover\",\r\n                \"promostart\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- made with https://promobuilding\\\\.ru\"\r\n            ],\r\n            \"description\": \"PromoBuilding is a subscription-based website builder for optimising budgets for creating promotional campaigns.\",\r\n            \"website\": \"https://promobuilding.ru\"\r\n        },\r\n        \"Proton Mail\": {\r\n            \"cats\": [\r\n                30\r\n            ],\r\n            \"description\": \"Proton Mail is the world’s largest secure email service with over 70 million users. Available on Web, iOS, Android, and desktop. Protected by Swiss privacy law.\",\r\n            \"website\": \"https://proton.me/mail\"\r\n        },\r\n        \"Prototype\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"prototype.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:prototype|protoaculous)(?:-([\\\\d.]*[\\\\d]))?.*\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Prototype is a JavaScript Framework that aims to ease development of web applications.\",\r\n            \"website\": \"https://www.prototypejs.org\",\r\n            \"cpe\": \"cpe:2.3:a:prototypejs:prototype:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Protovis\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"protovis\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"protovis.*\\\\.js\"\r\n            ],\r\n            \"website\": \"https://mbostock.github.io/protovis\"\r\n        },\r\n        \"ProvenExpert\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"provenexpert\\\\.\\\\w+/widget\"\r\n            ],\r\n            \"description\": \"ProvenExpert is a review based marketing platform that allows users to create customer surveys, provides aggregate reviews and ratings.\",\r\n            \"website\": \"https://www.provenexpert.com\"\r\n        },\r\n        \"Provide Support\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.providesupport\\\\.com\"\r\n            ],\r\n            \"description\": \"Provide Support is a SaaS for customer service that includes live chat, real-time website monitoring, chat statistics.\",\r\n            \"website\": \"https://www.providesupport.com\"\r\n        },\r\n        \"Proximis\": {\r\n            \"cats\": [\r\n                5,\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"widget-commerce(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"website\": \"https://www.proximis.com\"\r\n        },\r\n        \"Proximis Unified Commerce\": {\r\n            \"cats\": [\r\n                6,\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"__change\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003chtml[^\\u003e]+data-ng-app=\\\"rbschangeapp\\\"\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"proximis unified commerce\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"AngularJS\",\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://www.proximis.com\"\r\n        },\r\n        \"Proxmox Mail Gateway\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"js\": [\r\n                \"pmg-mail-tracker\",\r\n                \"pmg-spam-archive\"\r\n            ],\r\n            \"description\": \"Proxmox Mail Gateway is a mail security and anti-spam solution designed to protect email servers and ensure secure and reliable email communication.\",\r\n            \"website\": \"https://proxmox.com/en/proxmox-mail-gateway\"\r\n        },\r\n        \"Proxmox VE\": {\r\n            \"cats\": [\r\n                60\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"pve-api-daemon/[\\\\d\\\\.]+\"\r\n            },\r\n            \"description\": \"Proxmox VE is an open-source virtualisation and containerisation platform that provides a web-based management interface to manage virtual machines, containers, storage, and networking.\",\r\n            \"website\": \"https://proxmox.com/en/proxmox-ve\"\r\n        },\r\n        \"Pterodactyl Panel\": {\r\n            \"cats\": [\r\n                9\r\n            ],\r\n            \"cookies\": {\r\n                \"pterodactyl_session\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"Go\",\r\n                \"Laravel\",\r\n                \"PHP\",\r\n                \"React\"\r\n            ],\r\n            \"description\": \"Pterodactyl Panel is a free, open-source game server management panel built with PHP, React, and Go.\",\r\n            \"website\": \"https://pterodactyl.io\"\r\n        },\r\n        \"PubGuru\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"pg.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.pubguru\\\\.com/\"\r\n            ],\r\n            \"description\": \"PubGuru is a header wrapper and ad ops platform.\",\r\n            \"website\": \"https://pubguru.com\"\r\n        },\r\n        \"PubLive\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"description\": \"PubLive is a headless CMS for online publishers.\",\r\n            \"website\": \"https://thepublive.com\"\r\n        },\r\n        \"PubMatic\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"https?://[^/]*\\\\.pubmatic\\\\.com\"\r\n            ],\r\n            \"description\": \"PubMatic is a company that develops and implements online advertising software and strategies for the digital publishing and advertising industry.\",\r\n            \"website\": \"https://www.pubmatic.com/\"\r\n        },\r\n        \"PubSubJS\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"pubsub\",\r\n                \"pubsub.version\"\r\n            ],\r\n            \"description\": \"PubSubJS is a topic-based publish/subscribe library written in JavaScript.\",\r\n            \"website\": \"https://github.com/mroderick/PubSubJS\"\r\n        },\r\n        \"Public CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"publiccms_user\": \"\"\r\n            },\r\n            \"headers\": {\r\n                \"x-powered-publiccms\": \"^(.+)$\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"website\": \"https://www.publiccms.com\"\r\n        },\r\n        \"Pulse Secure\": {\r\n            \"cats\": [\r\n                46\r\n            ],\r\n            \"cookies\": {\r\n                \"dssignin\": \"\"\r\n            },\r\n            \"description\": \"Pulse Secure allows to deploy VPNs to securely to your internal resources.\",\r\n            \"website\": \"https://www.pulsesecure.net/products/remote-access-overview/\",\r\n            \"cpe\": \"cpe:2.3:a:pulsesecure:pulse_connect_secure:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Pure CSS\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cdiv[^\\u003e]+class=\\\"[^\\\"]*pure-u-(?:sm-|md-|lg-|xl-)?\\\\d-\\\\d\",\r\n                \"\\u003clink[^\\u003e]+(?:([\\\\d.])+/)?pure(?:-min)?\\\\.css\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Pure CSS is a set of small, responsive CSS modules that can be used in web projects.\",\r\n            \"website\": \"https://purecss.io\"\r\n        },\r\n        \"Pure Chat\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"pcwidget\",\r\n                \"purechatapi\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"app\\\\.purechat\\\\.com\"\r\n            ],\r\n            \"description\": \"Pure Chat is a live chat solution for small to mid-sized teams.\",\r\n            \"website\": \"https://www.purechat.com\"\r\n        },\r\n        \"PureCars\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"_purecars\"\r\n            ],\r\n            \"description\": \"PureCars is an automotive software and managed services company serving dealerships, advertising associations, and OEMs across the North American retail automotive industry.\",\r\n            \"website\": \"https://www.purecars.com\"\r\n        },\r\n        \"PurpleAds\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.purpleads\\\\.io/\"\r\n            ],\r\n            \"meta\": {\r\n                \"purpleads-verification\": []\r\n            },\r\n            \"description\": \"PurpleAds is an online advertising solution that businesses use to promote their products and services on Google Search, YouTube and other sites across the web.\",\r\n            \"website\": \"https://purpleads.io\"\r\n        },\r\n        \"PushDaddy Whatsapp Chat\": {\r\n            \"cats\": [\r\n                100,\r\n                98\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.shopify\\\\.com/.+/pushdaddy_v([\\\\d\\\\.]+).*\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\",\r\n                \"WhatsApp Business Chat\"\r\n            ],\r\n            \"description\": \"Whatsapp Chat is an live chat and abondoned cart solution built by PushDaddy.\",\r\n            \"website\": \"https://apps.shopify.com/whatsapp-chat-for-support\"\r\n        },\r\n        \"PushEngage\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"clientcdn\\\\.pushengage\\\\.\\\\w+/core\"\r\n            ],\r\n            \"description\": \"PushEngage is a browser push notification platform that helps content website managers engage visitors by automatically segmenting and sending web push messages.\",\r\n            \"website\": \"https://www.pushengage.com\"\r\n        },\r\n        \"PushOwl\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"pushowl\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.pushowl\\\\.com\"\r\n            ],\r\n            \"description\": \"PushOwl is a push notification platform for ecommerce stores.\",\r\n            \"website\": \"https://pushowl.com\"\r\n        },\r\n        \"PushOwl Web Push Notifications\": {\r\n            \"cats\": [\r\n                98,\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/sdks/pushowl-shopify\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"PushOwl\"\r\n            ],\r\n            \"description\": \"PushOwl Web Push Notifications are a Shopify app which helps recover abandoned carts and market better with web push.\",\r\n            \"website\": \"https://apps.shopify.com/pushowl\"\r\n        },\r\n        \"PushPushGo\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.pushpushgo\\\\.com/\"\r\n            ],\r\n            \"description\": \"PushPushGo is a GDPR-ready platform which enables startups, SMBs and corporations to create and send automatic web push notification campaigns on desktop and via mobile to manage various scenarios including abandoned carts, segmentation, cross-selling, customer engagement, and return rates.\",\r\n            \"website\": \"https://pushpushgo.com\"\r\n        },\r\n        \"Pushnami\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"api\\\\.pushnami\\\\.com\"\r\n            ],\r\n            \"description\": \"Pushnami is an AI-powered messaging platform that uses intelligent analytics to deliver superior push, social, and email performance.\",\r\n            \"website\": \"https://pushnami.com\"\r\n        },\r\n        \"Pushpay\": {\r\n            \"cats\": [\r\n                111\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//pushpay\\\\.com/\"\r\n            ],\r\n            \"description\": \"Pushpay is a digital giving and engagement platform designed to help churches manage processes related to donations and fundraising.\",\r\n            \"website\": \"https://pushpay.com\"\r\n        },\r\n        \"PyScript\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"description\": \"PyScript is a python script that can be run in the browser using a mix of Python and standard HTML.\",\r\n            \"website\": \"https://pyscript.net\"\r\n        },\r\n        \"Pygments\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]+pygments\\\\.css[\\\"']\"\r\n            ],\r\n            \"website\": \"https://pygments.org\",\r\n            \"cpe\": \"cpe:2.3:a:pygments:pygments:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"PyroCMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"pyrocms\": \"\"\r\n            },\r\n            \"headers\": {\r\n                \"x-streams-distribution\": \"pyrocms\"\r\n            },\r\n            \"implies\": [\r\n                \"Laravel\"\r\n            ],\r\n            \"website\": \"https://pyrocms.com\"\r\n        },\r\n        \"Python\": {\r\n            \"cats\": [\r\n                27\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"(?:^|\\\\s)python(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"Python is an interpreted and general-purpose programming language.\",\r\n            \"website\": \"https://python.org\",\r\n            \"cpe\": \"cpe:2.3:a:python:python:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"PythonAnywhere\": {\r\n            \"cats\": [\r\n                62,\r\n                88\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^pythonanywhere$\"\r\n            },\r\n            \"implies\": [\r\n                \"Python\"\r\n            ],\r\n            \"description\": \"PythonAnywhere is an online integrated development environment (IDE) and web hosting service (Platform as a service) based on the Python programming language.\",\r\n            \"website\": \"https://www.pythonanywhere.com\"\r\n        },\r\n        \"Q4\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"js\": [\r\n                \"q4app.a11yannouncement\",\r\n                \"q4defaults.fancysignup\"\r\n            ],\r\n            \"description\": \"Q4 is a SaaS platform that provides communication and intelligence solutions to investor relations professionals.\",\r\n            \"website\": \"https://www.q4inc.com/products/investor-relations-websites/default.aspx\"\r\n        },\r\n        \"Q4 Cookie Monster\": {\r\n            \"cats\": [\r\n                5,\r\n                67\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"widgets\\\\.q4app\\\\.com/widgets/q4\\\\.cookiemonster\\\\.([\\\\d\\\\.]+)\\\\.min\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Q4 Cookie Monster is an cookie compliance widget built by Q4.\",\r\n            \"website\": \"https://q4mobile.github.io/q4widgets-jquery-ui/doc_html/q4.cookieMonster.html\"\r\n        },\r\n        \"QUIC.cloud\": {\r\n            \"cats\": [\r\n                92,\r\n                23,\r\n                31\r\n            ],\r\n            \"description\": \"QUIC.cloud is a content delivery network (CDN) and optimisation service that uses the QUIC protocol, a next-generation internet transport protocol developed by Google, to deliver content faster and more securely over the internet.\",\r\n            \"website\": \"https://www.quic.cloud\"\r\n        },\r\n        \"Qgiv\": {\r\n            \"cats\": [\r\n                111\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//secure\\\\.qgiv\\\\.com/\"\r\n            ],\r\n            \"description\": \"Qgiv is an online fundraising platform helping nonprofit, faith-based, healthcare, and education organisations raise funds.\",\r\n            \"website\": \"https://www.qgiv.com\"\r\n        },\r\n        \"Qikify\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"sdk\\\\.qikify\\\\.com/\"\r\n            ],\r\n            \"description\": \"Qikify is a trusted Shopify Expert providing services for over 35,000 Shopify merchants through Shopify Apps or custom modifications.\",\r\n            \"website\": \"https://qikify.com\"\r\n        },\r\n        \"Qstomizer\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"jqueryqsmz\",\r\n                \"loadscript_qsmz\",\r\n                \"qstomizer_script\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/qsmz-scripttag/qstomizer_st(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"description\": \"Qstomizer app is the app for Shopify and Woocomerce that allows you to add a visual custom product designer to your shop.\",\r\n            \"website\": \"https://www.qstomizer.com\"\r\n        },\r\n        \"Qualaroo\": {\r\n            \"cats\": [\r\n                73\r\n            ],\r\n            \"js\": [\r\n                \"qualaroo_dnt\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.qualaroo\\\\.com\"\r\n            ],\r\n            \"description\": \"Qualaroo provides surveys on websites and apps to get user feedback.\",\r\n            \"website\": \"https://qualaroo.com\"\r\n        },\r\n        \"Qualified\": {\r\n            \"cats\": [\r\n                52,\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"qualifiedobject\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.qualified\\\\.com/\"\r\n            ],\r\n            \"description\": \"Qualified is a B2B marketer that allows buyers and sales reps to connect through real-time website conversations.\",\r\n            \"website\": \"https://www.qualified.com\"\r\n        },\r\n        \"Qualtrics\": {\r\n            \"cats\": [\r\n                73\r\n            ],\r\n            \"js\": [\r\n                \"qsi.clientsidetargeting\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.qualtrics\\\\.com/\"\r\n            ],\r\n            \"description\": \"Qualtrics is an cloud-based platform for creating and distributing web-based surveys.\",\r\n            \"website\": \"https://www.qualtrics.com\"\r\n        },\r\n        \"Quanta\": {\r\n            \"cats\": [\r\n                78,\r\n                10\r\n            ],\r\n            \"cookies\": {\r\n                \"_qta_rum\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"quanta.app_id\",\r\n                \"quantatagrumspeedindex\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.quanta\\\\.io/(?:.+/quanta-rum-v([\\\\d\\\\.]+)\\\\.min\\\\.js)?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Quanta is web performance management solution. Quanta offers the only analytics solution specifically designed to enable business and technical members of ecommerce teams to collaborate effectively with the end in mind: use web performance to directly impact online revenue at all times.\",\r\n            \"website\": \"https://www.quanta.io\"\r\n        },\r\n        \"Quantcast Choice\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"quantcast\\\\.mgr\\\\.consensu\\\\.org\"\r\n            ],\r\n            \"description\": \"Quantcast Choice is a free consent management platform to meet key privacy requirements stemming from ePrivacy Directive, GDPR, and CCPA.\",\r\n            \"website\": \"https://www.quantcast.com/products/choice-consent-management-platform\"\r\n        },\r\n        \"Quantcast Measure\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"quantserve\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.quantserve\\\\.com/quant\\\\.js\"\r\n            ],\r\n            \"description\": \"Quantcast Measure is an audience insights and analytics tool.\",\r\n            \"website\": \"https://www.quantcast.com/products/measure-audience-insights\"\r\n        },\r\n        \"Quantum Metric\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.quantummetric\\\\.com\"\r\n            ],\r\n            \"description\": \"Quantum Metric is a continuous product design platform that helps organizations build better products faster.\",\r\n            \"website\": \"https://www.quantummetric.com/\"\r\n        },\r\n        \"Quasar\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"description\": \"Quasar is an open-source Vue.js based framework.\",\r\n            \"website\": \"https://quasar.dev\"\r\n        },\r\n        \"Qubit\": {\r\n            \"cats\": [\r\n                74,\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"__qubit\",\r\n                \"onqubitready\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"static\\\\.goqubit\\\\.com\"\r\n            ],\r\n            \"description\": \"Qubit is a SaaS based persuasive personalisation at scale services.\",\r\n            \"website\": \"https://www.qubit.com\"\r\n        },\r\n        \"Question2Answer\": {\r\n            \"cats\": [\r\n                15\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- powered by question2answer\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\./qa-content/qa-page\\\\.js\\\\?([0-9.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Question2Answer (Q2A) is a popular open-source Q\\u0026A platform for PHP/MySQL.\",\r\n            \"website\": \"https://www.question2answer.org\"\r\n        },\r\n        \"Queue-it\": {\r\n            \"cats\": [\r\n                92\r\n            ],\r\n            \"js\": [\r\n                \"queueit.javascript.version\",\r\n                \"queueit_clientside_config\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.queue-it\\\\.net/\"\r\n            ],\r\n            \"description\": \"Queue-it is a virtual waiting room platform designed to protect your website and mobile app from slowdowns or crashes during end-user peaks.\",\r\n            \"website\": \"https://queue-it.com\"\r\n        },\r\n        \"Quick.CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"html\": [\r\n                \"\\u003ca href=\\\"[^\\u003e]+opensolution\\\\.org/\\\"\\u003ecms by\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"quick\\\\.cms(?: v([\\\\d.]+))?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"website\": \"https://opensolution.org\",\r\n            \"cpe\": \"cpe:2.3:a:opensolution:quick.cms:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Quick.Cart\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"html\": [\r\n                \"\\u003ca href=\\\"[^\\u003e]+opensolution\\\\.org/\\\"\\u003e(?:shopping cart by|sklep internetowy)\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"quick\\\\.cart(?: v([\\\\d.]+))?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"website\": \"https://opensolution.org\"\r\n        },\r\n        \"QuickSell\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.quicksell\\\\.co/\"\r\n            ],\r\n            \"description\": \"QuickSell is a sales acceleration platform helping businesses transform conversations to conversions by leveraging personal commerce.\",\r\n            \"website\": \"https://quicksell.co\"\r\n        },\r\n        \"Quickbutik\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.quickbutik\\\\.com/\"\r\n            ],\r\n            \"meta\": {\r\n                \"author\": [\r\n                    \"^quickbutik$\"\r\n                ]\r\n            },\r\n            \"description\": \"Quickbutik is an all-in-one ecommerce platform from Sweden.\",\r\n            \"website\": \"https://quickbutik.com\"\r\n        },\r\n        \"Quicklink\": {\r\n            \"cats\": [\r\n                59,\r\n                92\r\n            ],\r\n            \"js\": [\r\n                \"drupalsettings.quicklink\",\r\n                \"quicklink\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"quicklink@([\\\\d.]+)/dist/quicklink.*\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Quicklink is a JS library which aims to be a drop-in solution for sites to prefetch links based on what is in the user's viewport.\",\r\n            \"website\": \"https://getquick.link/\"\r\n        },\r\n        \"Quicq\": {\r\n            \"cats\": [\r\n                92\r\n            ],\r\n            \"description\": \"Quicq is an image optimisation tool by Afosto.\",\r\n            \"website\": \"https://afosto.com/apps/quicq\"\r\n        },\r\n        \"Quill\": {\r\n            \"cats\": [\r\n                24\r\n            ],\r\n            \"js\": [\r\n                \"quill\"\r\n            ],\r\n            \"description\": \"Quill is a free open-source WYSIWYG editor.\",\r\n            \"website\": \"https://quilljs.com\"\r\n        },\r\n        \"Quintype\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"qtype-session\": \"\"\r\n            },\r\n            \"headers\": {\r\n                \"link\": \"fea\\\\.assettype\\\\.com/quintype-ace\"\r\n            },\r\n            \"description\": \"Quintype is a digital publishing platform that provides content management, audience engagement, and monetisation solutions for digital media organisations.\",\r\n            \"website\": \"https://www.quintype.com\"\r\n        },\r\n        \"Quora Pixel\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"qp.qp\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.quora\\\\.com/\"\r\n            ],\r\n            \"description\": \"Quora Pixel is a tool that is placed in your website code to track traffic and conversions.\",\r\n            \"website\": \"https://quoraadsupport.zendesk.com/hc/en-us/categories/115001573928-Pixels-Tracking\"\r\n        },\r\n        \"Qwik\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"description\": \"Qwik is designed for the fastest possible page load time, by delivering pure HTML with near 0 JavaScript.\",\r\n            \"website\": \"https://qwik.builder.io\"\r\n        },\r\n        \"RBS Change\": {\r\n            \"cats\": [\r\n                1,\r\n                6\r\n            ],\r\n            \"html\": [\r\n                \"\\u003chtml[^\\u003e]+xmlns:change=\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"rbs change\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://www.rbschange.fr\"\r\n        },\r\n        \"RCMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^(?:rcms|reallycms)\"\r\n                ]\r\n            },\r\n            \"website\": \"https://www.rcms.fi\"\r\n        },\r\n        \"RD Station\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"rdstation\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"d335luupugsy2\\\\.cloudfront\\\\.net/js/loader-scripts/.*-loader\\\\.js\"\r\n            ],\r\n            \"description\": \"RD Station is a platform that helps medium and small businesses manage and automate their Digital Marketing strategy.\",\r\n            \"website\": \"https://rdstation.com.br\"\r\n        },\r\n        \"RDoc\": {\r\n            \"cats\": [\r\n                4\r\n            ],\r\n            \"js\": [\r\n                \"rdoc_rel_prefix\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]+href=\\\"[^\\\"]*rdoc-style\\\\.css\",\r\n                \"generated by \\u003ca href=\\\"https:\\\\/\\\\/ruby\\\\.github\\\\.io\\\\/rdoc\\\\/\\\"\\u003erdoc\\u003c\\\\/a\\u003e ([\\\\d.]*\\\\d)\\\\;version:\\\\1\",\r\n                \"generated by \\u003ca[^\\u003e]+href=\\\"https?://rdoc\\\\.rubyforge\\\\.org[^\\u003e]+\\u003erdoc\\u003c/a\\u003e ([\\\\d.]*\\\\d)\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"Ruby\"\r\n            ],\r\n            \"description\": \"RDoc produces HTML and command-line documentation for Ruby projects.\",\r\n            \"website\": \"https://github.com/ruby/rdoc\",\r\n            \"cpe\": \"cpe:2.3:a:dave_thomas:rdoc:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"REDAXO\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"redaxo\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"REDAXO is a content management system that provides business optimisation through web projects and output codes.\",\r\n            \"website\": \"https://redaxo.org\"\r\n        },\r\n        \"REG.RU\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"description\": \"REG.RU is a web hosting provider and internet domain registrar.\",\r\n            \"website\": \"https://www.reg.ru\"\r\n        },\r\n        \"RND\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/scripts/plugins/rnd-mobilemenu/\"\r\n            ],\r\n            \"description\": \"RND is a software technology used for companies to set up ecommerce infrastructure.\",\r\n            \"website\": \"https://www.rnd.com.tr/en/\"\r\n        },\r\n        \"RSS\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"description\": \"RSS is a family of web feed formats used to publish frequently updated works—such as blog entries, news headlines, audio, and video—in a standardized format.\",\r\n            \"website\": \"https://www.rssboard.org/rss-specification\"\r\n        },\r\n        \"RTB House\": {\r\n            \"cats\": [\r\n                77\r\n            ],\r\n            \"description\": \"RTB House is a company that provides learning-powered retargeting solutions for brands and agencies.\",\r\n            \"website\": \"https://www.rtbhouse.com\"\r\n        },\r\n        \"RX Web Server\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"rx-web\"\r\n            },\r\n            \"website\": \"https://developers.rokitax.co.uk/projects/rxweb\"\r\n        },\r\n        \"RackCache\": {\r\n            \"cats\": [\r\n                23\r\n            ],\r\n            \"headers\": {\r\n                \"x-rack-cache\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"Ruby\"\r\n            ],\r\n            \"description\": \"RackCache is a quick drop-in component to enable HTTP caching for Rack-based applications.\",\r\n            \"website\": \"https://github.com/rtomayko/rack-cache\"\r\n        },\r\n        \"Radix UI\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"css\": [\r\n                \"--radix-accordion-content-height\",\r\n                \"--radix-context-menu-content-available-height\",\r\n                \"--radix-context-menu-content-transform-origin\",\r\n                \"--radix-dropdown-menu-content-available-height\",\r\n                \"--radix-dropdown-menu-content-transform-origin\",\r\n                \"--radix-hover-card-content-transform-origin\",\r\n                \"--radix-navigation-menu-viewport-height\",\r\n                \"--radix-navigation-menu-viewport-width\",\r\n                \"--radix-popover-content-transform-origin\",\r\n                \"--radix-popover-trigger-width\",\r\n                \"--radix-select-content-available-height\",\r\n                \"--radix-select-content-transform-origin\",\r\n                \"--radix-select-trigger-height\",\r\n                \"--radix-select-trigger-width\",\r\n                \"--radix-select-trigger-width\",\r\n                \"--radix-toast-swipe-end-x\",\r\n                \"--radix-toast-swipe-move-x\",\r\n                \"--radix-tooltip-content-transform-origin\"\r\n            ],\r\n            \"description\": \"Radix UI is a React-based user interface component library that offers accessible, responsive, and customisable components for building web applications.\",\r\n            \"website\": \"https://www.radix-ui.com\"\r\n        },\r\n        \"Rain\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.rainpos\\\\.com/\"\r\n            ],\r\n            \"description\": \"Rain is a cloud-based point of sale (POS) system for small to midsized retailers.\",\r\n            \"website\": \"https://www.rainpos.com\"\r\n        },\r\n        \"RainLoop\": {\r\n            \"cats\": [\r\n                30\r\n            ],\r\n            \"js\": [\r\n                \"rainloop\",\r\n                \"rainloopi18n\"\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^rainloop\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]href=\\\"rainloop/v/([0-9.]+)/static/apple-touch-icon\\\\.png/\\u003e\\\\;version:\\\\1\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^rainloop/v/([0-9.]+)/\\\\;version:\\\\1\"\r\n            ],\r\n            \"meta\": {\r\n                \"rlappversion\": [\r\n                    \"^([0-9.]+)$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"RainLoop is a web-based email client.\",\r\n            \"website\": \"https://www.rainloop.net/\"\r\n        },\r\n        \"RaiseDonors\": {\r\n            \"cats\": [\r\n                111\r\n            ],\r\n            \"meta\": {\r\n                \"author\": [\r\n                    \"^raisedonors$\"\r\n                ]\r\n            },\r\n            \"description\": \"RaiseDonors is for anyone raising money and cultivating donor relationships online.\",\r\n            \"website\": \"https://explore.raisedonors.com\"\r\n        },\r\n        \"Raisely\": {\r\n            \"cats\": [\r\n                111\r\n            ],\r\n            \"js\": [\r\n                \"__raiselydebug\",\r\n                \"raiselycomponents\",\r\n                \"wpraisely\"\r\n            ],\r\n            \"description\": \"Raisely is a cloud-based fundraising platform that helps non-profits and charities drive fundraising campaigns and collect donations.\",\r\n            \"website\": \"https://raisely.com\"\r\n        },\r\n        \"Rakuten\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"cookies\": {\r\n                \"rakuten-source\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"rakutenranmid\",\r\n                \"rakutensource\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.linksynergy\\\\.com\",\r\n                \"tag\\\\.rmp\\\\.rakuten\\\\.com\"\r\n            ],\r\n            \"description\": \"Rakuten (formerly Ebates) allows you to earn cash-back rewards.\",\r\n            \"website\": \"https://www.rakuten.com/\"\r\n        },\r\n        \"Rakuten Advertising\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"tag\\\\.rmp\\\\.rakuten\\\\.com\"\r\n            ],\r\n            \"website\": \"https://rakutenadvertising.com/\"\r\n        },\r\n        \"Rakuten Digital Commerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"rakutenapplication\"\r\n            ],\r\n            \"website\": \"https://digitalcommerce.rakuten.com.br\"\r\n        },\r\n        \"Ramda\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"ramda.*\\\\.js\"\r\n            ],\r\n            \"website\": \"https://ramdajs.com\"\r\n        },\r\n        \"RankMath SEO\": {\r\n            \"cats\": [\r\n                87,\r\n                54\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/seo-by-rank-math(?:-pro)?/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"RankMath SEO is a search engine optimisation plugin for WordPress.\",\r\n            \"website\": \"https://rankmath.com\"\r\n        },\r\n        \"Raphael\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"raphael.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"raphael(?:-([\\\\d.]+))?(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Raphael is a cross-browser JavaScript library that draws Vector graphics for websites.\",\r\n            \"website\": \"https://dmitrybaranovskiy.github.io/raphael/\"\r\n        },\r\n        \"RapidSec\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.rapidsec\\\\.net\",\r\n                \"content-security-policy-report-only\": \"\\\\.rapidsec\\\\.net\",\r\n                \"report-to\": \"\\\\.rapidsec\\\\.net\"\r\n            },\r\n            \"description\": \"RapidSec offers automated client-side security and monitoring.\",\r\n            \"website\": \"https://rapidsec.com\"\r\n        },\r\n        \"RapidSpike\": {\r\n            \"cats\": [\r\n                13,\r\n                78\r\n            ],\r\n            \"js\": [\r\n                \"rspike_timing\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.rapidspike\\\\.com/\"\r\n            ],\r\n            \"description\": \"RapidSpike is an uptime and performance monitoring service for web sites and applications.\",\r\n            \"website\": \"https://www.rapidspike.com\"\r\n        },\r\n        \"Raptor\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"onraptorloaded\",\r\n                \"raptor\",\r\n                \"raptorbase64\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"api\\\\.raptorsmartadvisor\\\\.com\",\r\n                \"msecnd\\\\.net/script/raptor-([\\\\d.]+)\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Raptor is a personalisation engine based on machine learning that analyses and learns about the user's behavior and unique browser history.\",\r\n            \"website\": \"https://raptorsmartadvisor.com\"\r\n        },\r\n        \"Raspbian\": {\r\n            \"cats\": [\r\n                28\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"raspbian\",\r\n                \"x-powered-by\": \"raspbian\"\r\n            },\r\n            \"description\": \"Raspbian is a free operating system for the Raspberry Pi hardware.\",\r\n            \"website\": \"https://www.raspbian.org/\"\r\n        },\r\n        \"RateParity\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"code\\\\.rateparity\\\\.com/\"\r\n            ],\r\n            \"description\": \"RateParity is a conversion rate optimisation platform for hotels.\",\r\n            \"website\": \"https://www.rateparity.com\"\r\n        },\r\n        \"Rawabit\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"cookies\": {\r\n                \"rawabit_session\": \"\"\r\n            },\r\n            \"meta\": {\r\n                \"powered-by\": [\r\n                    \"^rawabit$\"\r\n                ]\r\n            },\r\n            \"description\": \"Rawabit is a website builder that lets small businesses design landing pages, modify sections, and embed content links using a drag and drop editor.\",\r\n            \"website\": \"https://www.rawabit.me\"\r\n        },\r\n        \"Raychat\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"raychat\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"app\\\\.raychat\\\\.io/scripts/js\"\r\n            ],\r\n            \"description\": \"Raychat is a free customer messaging platform.\",\r\n            \"website\": \"https://raychat.io\"\r\n        },\r\n        \"Raygun\": {\r\n            \"cats\": [\r\n                78,\r\n                13\r\n            ],\r\n            \"js\": [\r\n                \"raygun\",\r\n                \"raygunenabled\",\r\n                \"raygunfactory\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.raygun\\\\.io\"\r\n            ],\r\n            \"description\": \"Raygun is a cloud-based networking monitoring and bug tracking application.\",\r\n            \"website\": \"https://raygun.com\"\r\n        },\r\n        \"Rayo\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"rayo\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^rayo\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"AngularJS\",\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"website\": \"https://www.rayo.ir\"\r\n        },\r\n        \"Razorpay\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"razorpay\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"checkout\\\\.razorpay\\\\.com\"\r\n            ],\r\n            \"description\": \"Razorpay is a provider of an online payment gateway that allows businesses to accept, process, and disburse payments.\",\r\n            \"website\": \"https://razorpay.com/\"\r\n        },\r\n        \"Re:amaze\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"reamaze.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.reamaze\\\\.com/\"\r\n            ],\r\n            \"description\": \"Re:amaze is a multi-brand customer service, live chat, and help desk solution.\",\r\n            \"website\": \"https://www.reamaze.com\"\r\n        },\r\n        \"ReCaptcha v2 for Contact Form 7\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/wpcf7-recaptcha/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"Contact Form 7\"\r\n            ],\r\n            \"description\": \"Contact Form 7 v5.1 dropped support for reCaptcha v2 along with the [recaptcha] tag December 2018. This plugin brings that functionality back from Contact Form 7 5.0.5 and re-adds the [recaptcha] tag.\",\r\n            \"website\": \"https://wordpress.org/plugins/wpcf7-recaptcha/\"\r\n        },\r\n        \"ReConvert\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.stilyoapps\\\\.com/reconvert/assets/js/store_reconvert_node\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"ReConvert is a post-purchase upsell \\u0026 thank you page.\",\r\n            \"website\": \"https://www.reconvert.io\"\r\n        },\r\n        \"ReDoc\": {\r\n            \"cats\": [\r\n                4\r\n            ],\r\n            \"js\": [\r\n                \"redoc.version\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003credoc \"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/redoc\\\\.(?:min\\\\.)?js\"\r\n            ],\r\n            \"implies\": [\r\n                \"React\"\r\n            ],\r\n            \"description\": \"Redoc is an open-source tool that generates API documentation from OpenAPI specifications.\",\r\n            \"website\": \"https://github.com/Rebilly/ReDoc\"\r\n        },\r\n        \"React\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"__react_on_rails_event_handlers_ran_once__\",\r\n                \"react.version\",\r\n                \"reactonrails\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c[^\\u003e]+data-react\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/([\\\\d\\\\.]+)/react(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\",\r\n                \"^react\\\\b.*\\\\.js\",\r\n                \"react(?:-with-addons)?[.-](\\\\d+(?:\\\\.\\\\d+)+)[^/]*\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"meta\": {\r\n                \"description\": [\r\n                    \"^web site created using create-react-app$\"\r\n                ]\r\n            },\r\n            \"description\": \"React is an open-source JavaScript library for building user interfaces or UI components.\",\r\n            \"website\": \"https://reactjs.org\",\r\n            \"cpe\": \"cpe:2.3:a:facebook:react:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"React Bricks\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"implies\": [\r\n                \"React\"\r\n            ],\r\n            \"description\": \"React Bricks is a visual editing CMS based on React components.\",\r\n            \"website\": \"https://reactbricks.com\"\r\n        },\r\n        \"React Redux\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/react-redux(@|/)([\\\\d.]+)(?:/[a-z]+)?/react-redux(?:.min)?\\\\.js\\\\;version:\\\\2\"\r\n            ],\r\n            \"implies\": [\r\n                \"React\",\r\n                \"Redux\"\r\n            ],\r\n            \"description\": \"React Redux is the official React binding for Redux.\",\r\n            \"website\": \"https://react-redux.js.org/\"\r\n        },\r\n        \"React Router\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:/react-router(@|/)([\\\\d.]+)(?:/[a-z]+)?)?/react-router(?:\\\\.min)?\\\\.js\\\\;version:\\\\2\"\r\n            ],\r\n            \"implies\": [\r\n                \"React\"\r\n            ],\r\n            \"description\": \"React Router provides declarative routing for React.\",\r\n            \"website\": \"https://reactrouter.com\"\r\n        },\r\n        \"Reactive\": {\r\n            \"cats\": [\r\n                1,\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"reactive\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Ruby on Rails\"\r\n            ],\r\n            \"description\": \"Reactive is a subscription-based software that allows you to set up an online store and website. It has a CMS and has been created to support retail, coffee bars, restaurants owners and accomodation properties such as hotels or villas. With Reactive one can sell products or accept reservations and online orders.\",\r\n            \"website\": \"https://reactiveonline.io\"\r\n        },\r\n        \"ReadAloud\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"description\": \"The SiteSpeaker text-to-speech widget is embedded into your posts and give users an alternate way to consume your content as audio.\",\r\n            \"website\": \"https://www.readaloudwidget.com\"\r\n        },\r\n        \"ReadMe\": {\r\n            \"cats\": [\r\n                4,\r\n                1\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/cdn\\\\.readme\\\\.io/js/\"\r\n            ],\r\n            \"meta\": {\r\n                \"readme-deploy\": [\r\n                    \"^[\\\\d\\\\.]+$\"\r\n                ],\r\n                \"readme-version\": [\r\n                    \"^[\\\\d\\\\.]+$\"\r\n                ]\r\n            },\r\n            \"description\": \"ReadMe is a content management system that businesses use to create and manage technical or API documentation.\",\r\n            \"website\": \"https://readme.com\"\r\n        },\r\n        \"ReadSpeaker\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"readspeaker\",\r\n                \"readspeaker.meta.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.readspeaker\\\\.com/\"\r\n            ],\r\n            \"description\": \"ReadSpeaker is an intuitive text-to-speech API that converts text into natural-sounding audio files for websites and applications.\",\r\n            \"website\": \"https://www.readspeaker.com\"\r\n        },\r\n        \"Readymag\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^readymag$\"\r\n                ]\r\n            },\r\n            \"description\": \"Readymag is a browser-based design tool that helps create websites, portfolios and all kinds of online publications without coding.\",\r\n            \"website\": \"https://readymag.com\"\r\n        },\r\n        \"Really Simple CAPTCHA\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"description\": \"Really Simple CAPTCHA does not work alone and is intended to work with other plugins. It is originally created for Contact Form 7, however, you can use it with your own plugin.\",\r\n            \"website\": \"https://wordpress.org/plugins/really-simple-captcha\"\r\n        },\r\n        \"RebelMouse\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"x-rebelmouse-cache-control\": \"\",\r\n                \"x-rebelmouse-surrogate-control\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003c!-- powered by rebelmouse\\\\.\"\r\n            ],\r\n            \"website\": \"https://www.rebelmouse.com/\"\r\n        },\r\n        \"Rebuy\": {\r\n            \"cats\": [\r\n                76,\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"rebuyconfig\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"rebuyengine\\\\.com\"\r\n            ],\r\n            \"implies\": [\r\n                \"Cart Functionality\"\r\n            ],\r\n            \"description\": \"Rebuy offers personlisation solutions for ecommerce sites.\",\r\n            \"website\": \"https://rebuyengine.com/\"\r\n        },\r\n        \"Recapture\": {\r\n            \"cats\": [\r\n                98\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.recapture\\\\.io/.+\\\\?v=\\\\d+(?:\\u0026ver=([\\\\d\\\\.]+)?)?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Recapture is an abandoned cart recovery and email marketing solution.\",\r\n            \"website\": \"https://recapture.io\"\r\n        },\r\n        \"Recart\": {\r\n            \"cats\": [\r\n                98\r\n            ],\r\n            \"js\": [\r\n                \"__recart\",\r\n                \"recart\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"api\\\\.recart\\\\.com\"\r\n            ],\r\n            \"description\": \"Recart is a tool to engage users who abandoned their shopping cart via Facebook Messenger.\",\r\n            \"website\": \"https://recart.com/\"\r\n        },\r\n        \"Recent Posts Widget With Thumbnails\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"description\": \"Recent Posts Widget With Thumbnails is based on the well-known WordPress default widget 'Recent Posts' and extended to display more informations about the posts.\",\r\n            \"website\": \"https://wordpress.org/plugins/recent-posts-widget-with-thumbnails/\"\r\n        },\r\n        \"Recharge\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"rechargewidget\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.rechargecdn\\\\.com/\",\r\n                \"rechargeassets-bootstrapheroes-rechargeapps\\\\.netdna-ssl\\\\.com\"\r\n            ],\r\n            \"implies\": [\r\n                \"Cart Functionality\"\r\n            ],\r\n            \"description\": \"Recharge is the a subscription payments platform designed for merchants to set up and manage dynamic recurring billing across web and mobile.\",\r\n            \"website\": \"https://rechargepayments.com\"\r\n        },\r\n        \"Recharts\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"implies\": [\r\n                \"React\"\r\n            ],\r\n            \"description\": \"Recharts is a component-based charting library, which is exclusively built for React applications.\",\r\n            \"website\": \"https://recharts.org/\"\r\n        },\r\n        \"Recite Me\": {\r\n            \"cats\": [\r\n                68\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"api\\\\.reciteme\\\\.com/asset/js\"\r\n            ],\r\n            \"description\": \"Recite Me is a web accessibility overlay that claims to allow website visitors to customize a site in a way that works for them.\",\r\n            \"website\": \"https://reciteme.com/\"\r\n        },\r\n        \"Recomify\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"app\\\\.recomify\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Recomify is a 1-click install, cost-effective smart product recommendation engine.\",\r\n            \"website\": \"https://www.recomify.com\"\r\n        },\r\n        \"RecoverMyCart\": {\r\n            \"cats\": [\r\n                76,\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.recovermycart\\\\.com\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"RecoverMyCart is a Shopify app for abandoned basket recovery.\",\r\n            \"website\": \"https://app.recovermycart.com/\"\r\n        },\r\n        \"Recruitee\": {\r\n            \"cats\": [\r\n                101\r\n            ],\r\n            \"js\": [\r\n                \"rtapp.mapboxtoken\"\r\n            ],\r\n            \"description\": \"Recruitee is an integrated cloud-based recruitment management and applicant tracking system.\",\r\n            \"website\": \"https://recruitee.com\"\r\n        },\r\n        \"Recurate\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"scripts\": [\r\n                \"\\\"(?:vendor|title)?\\\"\\\\:\\\"recurate\\\"\"\r\n            ],\r\n            \"description\": \"Recurate is a tech-enabled resale service that empowers brands \\u0026 retailers to establish their own integrated resale platforms directly on their ecommerce sites.\",\r\n            \"website\": \"https://www.recurate.com\"\r\n        },\r\n        \"Recurly\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"recurly.version\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cinput[^\\u003e]+data-recurly\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"js\\\\.recurly\\\\.com\"\r\n            ],\r\n            \"description\": \"Recurly provides enterprise-class subscription billing and recurring payment management for thousands of businesses worldwide.\",\r\n            \"website\": \"https://recurly.com\"\r\n        },\r\n        \"Red Hat\": {\r\n            \"cats\": [\r\n                28\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"red hat\",\r\n                \"x-powered-by\": \"red hat\"\r\n            },\r\n            \"description\": \"Red Hat is an open-source Linux operating system.\",\r\n            \"website\": \"https://www.redhat.com\",\r\n            \"cpe\": \"cpe:2.3:o:redhat:linux:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Red Hat Gluster\": {\r\n            \"cats\": [\r\n                48\r\n            ],\r\n            \"description\": \"Gluster is a free and open source scalable network filesystem.\",\r\n            \"website\": \"https://www.gluster.org\"\r\n        },\r\n        \"Red je Pakketje\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Red je Pakketje is a Dutch company specialised in same-day-delivery.\",\r\n            \"website\": \"https://redjepakketje.nl\"\r\n        },\r\n        \"RedCart\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"rc2c-erotica\": \"\\\\d+\"\r\n            },\r\n            \"js\": [\r\n                \"rc_shop_id\"\r\n            ],\r\n            \"description\": \"RedCart is an all-in-one ecommerce platform from Poland.\",\r\n            \"website\": \"https://redcart.pl\"\r\n        },\r\n        \"RedShop\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"implies\": [\r\n                \"Amazon S3\",\r\n                \"Next.js\",\r\n                \"React\",\r\n                \"TypeScript\"\r\n            ],\r\n            \"description\": \"RedShop provides a platform for SMEs to manage their ecommerce business.\",\r\n            \"website\": \"https://www.redshop.io\"\r\n        },\r\n        \"Reddit\": {\r\n            \"cats\": [\r\n                2\r\n            ],\r\n            \"js\": [\r\n                \"reddit\"\r\n            ],\r\n            \"html\": [\r\n                \"(?:\\u003ca[^\\u003e]+powered by reddit|powered by \\u003ca[^\\u003e]+\\u003ereddit\\u003c)\"\r\n            ],\r\n            \"implies\": [\r\n                \"Python\"\r\n            ],\r\n            \"website\": \"https://code.reddit.com\"\r\n        },\r\n        \"Reddit Ads\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"www\\\\.redditstatic\\\\.com\"\r\n            ],\r\n            \"description\": \"Reddit Ads is an online advertising offering from Reddit.\",\r\n            \"website\": \"https://advertising.reddithelp.com/\"\r\n        },\r\n        \"Redis\": {\r\n            \"cats\": [\r\n                34\r\n            ],\r\n            \"description\": \"Redis is an in-memory data structure project implementing a distributed, in-memory key–value database with optional durability. Redis supports different kinds of abstract data structures, such as strings, lists, maps, sets, sorted sets, HyperLogLogs, bitmaps, streams, and spatial indexes.\",\r\n            \"website\": \"https://redis.io\",\r\n            \"cpe\": \"cpe:2.3:a:redislabs:redis:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Redis Object Cache\": {\r\n            \"cats\": [\r\n                23\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!--\\\\s+performance optimized by redis object cache\"\r\n            ],\r\n            \"implies\": [\r\n                \"Redis\",\r\n                \"WordPress\"\r\n            ],\r\n            \"website\": \"https://wprediscache.com\"\r\n        },\r\n        \"Redmine\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"cookies\": {\r\n                \"_redmine_session\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"powered by \\u003ca href=\\\"[^\\u003e]+redmine\"\r\n            ],\r\n            \"meta\": {\r\n                \"description\": [\r\n                    \"redmine\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Ruby on Rails\"\r\n            ],\r\n            \"description\": \"Redmine is a free and open-source, web-based project management and issue tracking tool.\",\r\n            \"website\": \"https://www.redmine.org\",\r\n            \"cpe\": \"cpe:2.3:a:redmine:redmine:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Redonner\": {\r\n            \"cats\": [\r\n                84\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.redonner\\\\.fr/\"\r\n            ],\r\n            \"description\": \"This company promotes the collection and recycling of textiles by rewarding each donation of clothing made on its website with 'Re' points, allowing you to benefit from advantages and discounts at more than 70 partner brands.\",\r\n            \"website\": \"https://www.redonner.fr\"\r\n        },\r\n        \"Redux\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/redux(@|/)([\\\\d.]+)(?:/[a-z]+)?/redux(?:.min)?\\\\.js\\\\;version:\\\\2\"\r\n            ],\r\n            \"description\": \"Redux is a predictable state container for JavaScript applications.\",\r\n            \"website\": \"https://redux.js.org\"\r\n        },\r\n        \"Redux Framework\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"meta\": {\r\n                \"framework\": [\r\n                    \"redux\\\\s([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n                ],\r\n                \"generator\": [\r\n                    \"redux\\\\s([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"Redux Framework is a modular PHP library that allows developers to create customisable settings panels and controls for WordPress projects, providing a consistent user interface for managing options and settings.\",\r\n            \"website\": \"https://redux.io\"\r\n        },\r\n        \"RedwoodJS\": {\r\n            \"cats\": [\r\n                12,\r\n                18\r\n            ],\r\n            \"implies\": [\r\n                \"GraphQL\",\r\n                \"React\",\r\n                \"TypeScript\"\r\n            ],\r\n            \"description\": \"RedwoodJS is a full-stack serverless web application framework built by Tom Preston Werner (co-founder of Github) et al.\",\r\n            \"website\": \"https://redwoodjs.com\"\r\n        },\r\n        \"Reelevant\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"reel.companyid\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.reelevant\\\\.com\"\r\n            },\r\n            \"description\": \"Reelevant is a visual content platform that helps businesses to create on-demand content for their viewers in order to increase conversion rates.\",\r\n            \"website\": \"https://try.reelevant.com\"\r\n        },\r\n        \"Reevoo\": {\r\n            \"cats\": [\r\n                90\r\n            ],\r\n            \"js\": [\r\n                \"reevooaccesscode\",\r\n                \"reevooapi\",\r\n                \"reevooloader.tracking\",\r\n                \"reevoourl\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.reevoo\\\\.com/\"\r\n            ],\r\n            \"description\": \"Reevoo is a provider of UGC solutions like reviews.\",\r\n            \"website\": \"https://www.reevoo.com\"\r\n        },\r\n        \"ReferralCandy\": {\r\n            \"cats\": [\r\n                94,\r\n                84\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.referralcandy\\\\.com/\"\r\n            ],\r\n            \"description\": \"ReferralCandy is a marketing platform that gets shoppers to refer their friends.\",\r\n            \"website\": \"https://www.referralcandy.com\"\r\n        },\r\n        \"Refersion\": {\r\n            \"cats\": [\r\n                71,\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.refersion\\\\.com\"\r\n            ],\r\n            \"description\": \"Refersion is an affiliate management app.\",\r\n            \"website\": \"https://refersion.com\"\r\n        },\r\n        \"Reflektion\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"rfk_deploy_time\",\r\n                \"rfkparams\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.cloudfront\\\\.net/js/reflektion\\\\.js\"\r\n            ],\r\n            \"description\": \"Reflektion is a customer centric personalisation platform that optimizes customer experiences on an individual basis in real time.\",\r\n            \"website\": \"https://reflektion.com\"\r\n        },\r\n        \"Refundid\": {\r\n            \"cats\": [\r\n                102\r\n            ],\r\n            \"js\": [\r\n                \"launchrefundidpopup\"\r\n            ],\r\n            \"description\": \"Refundid provides ecommerce customers instant refunds for their online returns.\",\r\n            \"website\": \"https://refundid.com\"\r\n        },\r\n        \"Regiondo\": {\r\n            \"cats\": [\r\n                5,\r\n                72\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.regiondo\\\\.net\"\r\n            ],\r\n            \"description\": \"Regiondo is a online booking system for tour and activity providers.\",\r\n            \"website\": \"https://www.regiondo.com\"\r\n        },\r\n        \"Reinvigorate\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"reinvigorate\"\r\n            ],\r\n            \"website\": \"https://www.reinvigorate.net\"\r\n        },\r\n        \"Relais Colis\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Relais Colis is a French parcel delivery network.\",\r\n            \"website\": \"https://www.relaiscolis.com\"\r\n        },\r\n        \"Relewise\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"relewiseconfig\",\r\n                \"relewisetracking\"\r\n            ],\r\n            \"description\": \"Relewise is a platform that uses personalisation technology to provide customised online experiences through personalised search and recommendations.\",\r\n            \"website\": \"https://relewise.com\"\r\n        },\r\n        \"Remarkable Commerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"remarkable.basketitems\"\r\n            ],\r\n            \"description\": \"Remarkable Commerce is a technology and services company which provides a ecommerce platform for mid-sized retailers.\",\r\n            \"website\": \"https://remarkable.net/\"\r\n        },\r\n        \"Remix\": {\r\n            \"cats\": [\r\n                18,\r\n                22\r\n            ],\r\n            \"js\": [\r\n                \"__remixcontext\"\r\n            ],\r\n            \"implies\": [\r\n                \"React\"\r\n            ],\r\n            \"description\": \"Remix is a React framework used for server-side rendering (SSR).\",\r\n            \"website\": \"https://remix.run/\"\r\n        },\r\n        \"Remixd\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"tags\\\\.remixd\\\\.com/player\"\r\n            ],\r\n            \"description\": \"Remixd is a platform that enables podcast creators to efficiently produce and share their podcasts with a worldwide audience. The platform provides various tools and features to support podcast creation, hosting, and distribution, such as podcast hosting, analytics, monetisation, and social media integration.\",\r\n            \"website\": \"https://www.remixd.com\"\r\n        },\r\n        \"Render\": {\r\n            \"cats\": [\r\n                62\r\n            ],\r\n            \"headers\": {\r\n                \"x-render-origin-server\": \"render\"\r\n            },\r\n            \"description\": \"Render is a cloud computing platform that provides a wide range of services, including web hosting, cloud computing, and application development. Render offers several hosting options, including static site hosting, web application hosting, and managed databases.\",\r\n            \"website\": \"https://render.com\"\r\n        },\r\n        \"Render Better\": {\r\n            \"cats\": [\r\n                92,\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"renderbetter\"\r\n            ],\r\n            \"description\": \"Render Better is automated site speed and core web vital optimisation platform for Shopify.\",\r\n            \"website\": \"https://www.renderbetter.com\"\r\n        },\r\n        \"Replicache\": {\r\n            \"cats\": [\r\n                12,\r\n                23\r\n            ],\r\n            \"headers\": {\r\n                \"x-replicache-requestid\": \"\"\r\n            },\r\n            \"description\": \"Replicache is a JavaScript framework for building high-performance, offline-capable, collaborative web apps.\",\r\n            \"website\": \"https://replicache.dev/\"\r\n        },\r\n        \"Replit\": {\r\n            \"cats\": [\r\n                47\r\n            ],\r\n            \"headers\": {\r\n                \"expect-ct\": \"\\\\.repl\\\\.it/\",\r\n                \"replit-cluster\": \"\"\r\n            },\r\n            \"description\": \"Replit is a platform for creating and sharing software.\",\r\n            \"website\": \"https://replit.com\"\r\n        },\r\n        \"Reputon\": {\r\n            \"cats\": [\r\n                90,\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.reputon\\\\.com/\"\r\n            ],\r\n            \"description\": \"Reputon is an customer reviews Shopify app.\",\r\n            \"website\": \"https://reputon.com\"\r\n        },\r\n        \"RequireJS\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"requirejs.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"require.*\\\\.js\"\r\n            ],\r\n            \"description\": \"RequireJS is a JavaScript library and file loader which manages the dependencies between JavaScript files and in modular programming.\",\r\n            \"website\": \"https://requirejs.org\"\r\n        },\r\n        \"ResDiary\": {\r\n            \"cats\": [\r\n                93\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.resdiary\\\\.\\\\w+/\"\r\n            ],\r\n            \"description\": \"ResDiary, is a online reservation system for hospitality operators.\",\r\n            \"website\": \"https://www.resdiary.com\"\r\n        },\r\n        \"Resengo\": {\r\n            \"cats\": [\r\n                93\r\n            ],\r\n            \"js\": [\r\n                \"wpjsonpresengoreservationwidget\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"www\\\\.resengo\\\\.\\\\w+\"\r\n            ],\r\n            \"description\": \"Resengo is a restaurant table booking widget.\",\r\n            \"website\": \"https://wwc.resengo.com\"\r\n        },\r\n        \"Reserve In-Store\": {\r\n            \"cats\": [\r\n                100,\r\n                93\r\n            ],\r\n            \"js\": [\r\n                \"reserveinstore.version\",\r\n                \"reserveinstorejsurl\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Reserve In-Store app will allow customers to reserve an item in your store online to come to pick it up or view the item before making the purchase.\",\r\n            \"website\": \"https://www.reserveinstore.com\"\r\n        },\r\n        \"Reservio\": {\r\n            \"cats\": [\r\n                93,\r\n                72\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"static\\\\.reservio\\\\.com\"\r\n            ],\r\n            \"description\": \"Reservio is a cloud-based appointment scheduling and online booking solution.\",\r\n            \"website\": \"https://www.reservio.com\"\r\n        },\r\n        \"Resin\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^resin(?:/(\\\\s*))?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"website\": \"https://caucho.com\",\r\n            \"cpe\": \"cpe:2.3:a:caucho:resin:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Resmio\": {\r\n            \"cats\": [\r\n                93\r\n            ],\r\n            \"js\": [\r\n                \"resmiobutton\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"static\\\\.resmio\\\\.\\\\w+/static/\"\r\n            ],\r\n            \"description\": \"Resmio is a restaurant table booking widget.\",\r\n            \"website\": \"https://www.resmio.com\"\r\n        },\r\n        \"Resova\": {\r\n            \"cats\": [\r\n                72\r\n            ],\r\n            \"js\": [\r\n                \"baseurl\",\r\n                \"initresova\"\r\n            ],\r\n            \"description\": \"Resova is an online booking software.\",\r\n            \"website\": \"https://resova.com\"\r\n        },\r\n        \"Responsive Lightbox \\u0026 Gallery\": {\r\n            \"cats\": [\r\n                87,\r\n                7\r\n            ],\r\n            \"js\": [\r\n                \"rl_hide_image\",\r\n                \"rl_view_image\",\r\n                \"rlargs.activegalleries\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/responsive-lightbox/.+front\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Responsive Lightbox \\u0026 Gallery plugin is a lightweight WordPress gallery plugin by Digital Factory.\",\r\n            \"website\": \"https://dfactory.eu/products/responsive-lightbox-gallery-extensions/\"\r\n        },\r\n        \"ResponsiveVoice\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"responsivevoice.version\"\r\n            ],\r\n            \"description\": \"ResponsiveVoice is a Text-To-Speech API supported in 51 languages.\",\r\n            \"website\": \"https://responsivevoice.org\"\r\n        },\r\n        \"Resy\": {\r\n            \"cats\": [\r\n                93\r\n            ],\r\n            \"js\": [\r\n                \"resywidget\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"widgets\\\\.resy\\\\.\\\\w+\"\r\n            ],\r\n            \"description\": \"Resy is an technology and media company that provides an app and back-end management software for restaurant reservations.\",\r\n            \"website\": \"https://resy.com\"\r\n        },\r\n        \"Retail Rocket\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"cookies\": {\r\n                \"rr-testcookie\": \"testvalue\",\r\n                \"rrpvid\": \"^\\\\d+$\"\r\n            },\r\n            \"js\": [\r\n                \"retailrocket\",\r\n                \"rraddtobasket\",\r\n                \"rrapionready\",\r\n                \"rrlibrary\",\r\n                \"rrpartnerid\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.retailrocket\\\\.net\"\r\n            ],\r\n            \"description\": \"Retail Rocket is a big data-based personalisation platform for ecommerce websites.\",\r\n            \"website\": \"https://retailrocket.net\"\r\n        },\r\n        \"Return Prime\": {\r\n            \"cats\": [\r\n                100,\r\n                102\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//return-prime-proxy-prod\\\\.s3[^ ]*\\\\.amazonaws\\\\.com/\"\r\n            ],\r\n            \"description\": \"Return Prime is an application to manage returns for Shopify stores.\",\r\n            \"website\": \"https://www.returnprime.com/\"\r\n        },\r\n        \"ReturnGO\": {\r\n            \"cats\": [\r\n                102\r\n            ],\r\n            \"js\": [\r\n                \"returngocanberun\",\r\n                \"returngointegrationdata\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.returngo\\\\.ai/\"\r\n            ],\r\n            \"description\": \"ReturnGO's AI-driven returns management platform significantly improves customer lifetime value and post-purchase experience.\",\r\n            \"website\": \"https://returngo.ai\"\r\n        },\r\n        \"Returnly\": {\r\n            \"cats\": [\r\n                102\r\n            ],\r\n            \"js\": [\r\n                \"returnly.containerswitcher\",\r\n                \"returnly.internaleventtracker\"\r\n            ],\r\n            \"description\": \"Returnly is the provider of digital return experiences for direct-to-consumer brands.\",\r\n            \"website\": \"https://returnly.com\"\r\n        },\r\n        \"Retype\": {\r\n            \"cats\": [\r\n                57\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"retype\\\\s([\\\\d\\\\.]+)?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Node.js\"\r\n            ],\r\n            \"description\": \"Retype is an open-source static site generator built with Node.js that allows users to create and manage websites with ease using Markdown as the primary content format.\",\r\n            \"website\": \"https://retype.com\"\r\n        },\r\n        \"RevJet\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"description\": \"RevJet is the first comprehensive Ad Experience Platform, for every audience, channel, format, inventory, and device.\",\r\n            \"website\": \"https://www.revjet.com\"\r\n        },\r\n        \"RevLifter\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"cookies\": {\r\n                \"revlifter\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"revlifter\",\r\n                \"revlifterobject\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"assets\\\\.revlifter\\\\.io\"\r\n            ],\r\n            \"description\": \"RevLifter is an AI-powered coupon technology which allows brands to offer personalised incentives to their customers based on real-time basket data.\",\r\n            \"website\": \"https://www.revlifter.com\"\r\n        },\r\n        \"Reveal.js\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"reveal.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:^|/)reveal(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Highlight.js\"\r\n            ],\r\n            \"website\": \"https://lab.hakim.se/reveal-js\"\r\n        },\r\n        \"Revel\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"cookies\": {\r\n                \"revel_flash\": \"\",\r\n                \"revel_session\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"Go\"\r\n            ],\r\n            \"website\": \"https://revel.github.io\"\r\n        },\r\n        \"RevenueHunt\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"admin\\\\.revenuehunt\\\\.com/\"\r\n            ],\r\n            \"description\": \"RevenueHunt is an affiliate marketing and advertising company specializing in paid surveys and cost per lead campaigns.\",\r\n            \"website\": \"https://revenuehunt.com\"\r\n        },\r\n        \"Revieve\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"revieve.__esmodule\",\r\n                \"revieveconfig.onclickproduct\"\r\n            ],\r\n            \"description\": \"Revieve is a technology company delivering consumer-centric personalised digital brand experiences powered by AI/AR.\",\r\n            \"website\": \"https://www.revieve.com\"\r\n        },\r\n        \"ReviewSolicitors\": {\r\n            \"cats\": [\r\n                90\r\n            ],\r\n            \"js\": [\r\n                \"rs.getwidgethtml\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.reviewsolicitors\\\\.co\\\\.uk/\"\r\n            ],\r\n            \"description\": \"ReviewSolicitors is a free and independent client-led review platform focusing on the UK legal market.\",\r\n            \"website\": \"https://www.reviewsolicitors.co.uk\"\r\n        },\r\n        \"Reviews.io\": {\r\n            \"cats\": [\r\n                90\r\n            ],\r\n            \"js\": [\r\n                \"reviewsio_hasvoted\",\r\n                \"reviewsio_sharelink\"\r\n            ],\r\n            \"description\": \"Reviews.io is a review collection tool for companies to collect merchant (company) \\u0026 product reviews from genuine customers, then share these on Google.\",\r\n            \"website\": \"https://www.reviews.io\"\r\n        },\r\n        \"RevolverMaps\": {\r\n            \"cats\": [\r\n                35\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.revolvermaps\\\\.com\"\r\n            ],\r\n            \"description\": \"RevolverMaps is a collection of real-time visitor statistics widgets for website or blog. Interactive visitor mappings to a globe rendered by the Revolver Engine.\",\r\n            \"website\": \"https://www.revolvermaps.com\"\r\n        },\r\n        \"Revv\": {\r\n            \"cats\": [\r\n                111\r\n            ],\r\n            \"meta\": {\r\n                \"revv-api-domain\": []\r\n            },\r\n            \"description\": \"Revv is a lead optimisation and donation platform.\",\r\n            \"website\": \"https://revv.com\"\r\n        },\r\n        \"Revy\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"revyapp\",\r\n                \"revybundle\",\r\n                \"revyupsell\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"api\\\\.revy\\\\.io/\"\r\n            ],\r\n            \"description\": \"Revy is dedicated to build Shopify Apps to generate more sales for merchants.\",\r\n            \"website\": \"https://revy.io\"\r\n        },\r\n        \"Rewardful\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"js\": [\r\n                \"rewardful\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"r\\\\.wdfl\\\\.co\"\r\n            ],\r\n            \"description\": \"Rewardful is a way for SaaS companies to setup affiliate and referral programs with Stripe.\",\r\n            \"website\": \"https://www.getrewardful.com/\"\r\n        },\r\n        \"Rezdy\": {\r\n            \"cats\": [\r\n                5,\r\n                72\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"rezdy\\\\.\\\\w+/pluginjs\"\r\n            ],\r\n            \"description\": \"Rezdy is an online booking software for tours and attractions.\",\r\n            \"website\": \"https://www.rezdy.com\"\r\n        },\r\n        \"Rezgo\": {\r\n            \"cats\": [\r\n                5,\r\n                72\r\n            ],\r\n            \"description\": \"Rezgo is a tour operator software that provides online booking system.\",\r\n            \"website\": \"https://www.rezgo.com\"\r\n        },\r\n        \"Rich Plugins Reviews\": {\r\n            \"cats\": [\r\n                87,\r\n                90\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/widget-google-reviews/\"\r\n            ],\r\n            \"description\": \"Rich Plugins Reviews is a WordPress plugin that integrates verified reviews from trusted sources such as Google and Facebook.\",\r\n            \"website\": \"https://richplugins.com/business-reviews-bundle-wordpress-plugin\"\r\n        },\r\n        \"RichRelevance\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"rr.u\",\r\n                \"rr_v\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.richrelevance\\\\.com/\"\r\n            ],\r\n            \"description\": \"RichRelevance is a cloud-based omnichannel personalisation platform built to help Retailers, B2B, financial services, travel and hospitality, and branded manufacturers personalise their customer experiences.\",\r\n            \"website\": \"https://richrelevance.com\"\r\n        },\r\n        \"Richpanel\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"js\": [\r\n                \"richpanel.plugin_api_url\",\r\n                \"richpanel_messenger_url\",\r\n                \"richpanelappproxy\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.richpanel\\\\.com/\"\r\n            ],\r\n            \"description\": \"Richpanel is a purpose-built CRM and customer support platform for ecommerce and DTC brands.\",\r\n            \"website\": \"https://www.richpanel.com\"\r\n        },\r\n        \"Rickshaw\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"rickshaw\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"rickshaw(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"D3\"\r\n            ],\r\n            \"website\": \"https://code.shutterstock.com/rickshaw/\"\r\n        },\r\n        \"RightJS\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"rightjs\"\r\n            ],\r\n            \"description\": \"RightJS is a modular JavaScript framework.\",\r\n            \"website\": \"https://github.com/rightjs\"\r\n        },\r\n        \"Riot\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"riot\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"riot(?:\\\\+compiler)?(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"website\": \"https://riot.js.org/\"\r\n        },\r\n        \"Ripple\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"headers\": {\r\n                \"x-sdp-app-type\": \"ripple\"\r\n            },\r\n            \"implies\": [\r\n                \"Drupal\",\r\n                \"Nuxt.js\",\r\n                \"Vue.js\"\r\n            ],\r\n            \"description\": \"Ripple is the frontend framework for Single Digital Presence, delivered using Nuxt and Vue.js.\",\r\n            \"website\": \"https://dpc-sdp.github.io/sdp-docs/ripple/\"\r\n        },\r\n        \"Rise.ai\": {\r\n            \"cats\": [\r\n                84,\r\n                94\r\n            ],\r\n            \"js\": [\r\n                \"rise.shop\",\r\n                \"risestorefront\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"strn\\\\.rise-ai\\\\.com/\"\r\n            ],\r\n            \"description\": \"Rise.ai is a strategic re-engagement solution that provides brands and retailers with a unique currency of their own.\",\r\n            \"website\": \"https://rise.ai\"\r\n        },\r\n        \"Riskified\": {\r\n            \"cats\": [\r\n                10,\r\n                16\r\n            ],\r\n            \"js\": [\r\n                \"riskifiedbeaconload\",\r\n                \"riskx\"\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"riskified server\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003c[^\\u003e]*beacon\\\\.riskified\\\\.com\",\r\n                \"\\u003c[^\\u003e]*c\\\\.riskified\\\\.com\"\r\n            ],\r\n            \"description\": \"Riskified is a privately held company that provides SaaS fraud and chargeback prevention technology.\",\r\n            \"website\": \"https://www.riskified.com/\"\r\n        },\r\n        \"RiteCMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^ritecms(?: (.+))?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\",\r\n                \"SQLite\\\\;confidence:80\"\r\n            ],\r\n            \"website\": \"https://ritecms.com\"\r\n        },\r\n        \"Rive\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"rive.rive\"\r\n            ],\r\n            \"description\": \"Rive is a real-time interactive design and animation tool.\",\r\n            \"website\": \"https://rive.app\"\r\n        },\r\n        \"RoadRunner\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"roadrunner\"\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"RoadRunner is a high-performance PHP application server, load balancer, and process manager written in Golang.\",\r\n            \"website\": \"https://roadrunner.dev\"\r\n        },\r\n        \"Roadiz CMS\": {\r\n            \"cats\": [\r\n                1,\r\n                11\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"roadiz cms\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^roadiz ?(?:master|develop)? v?([0-9\\\\.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\",\r\n                \"Symfony\"\r\n            ],\r\n            \"website\": \"https://www.roadiz.io\"\r\n        },\r\n        \"Robin\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"_robin_getrobinjs\",\r\n                \"robin_settings\",\r\n                \"robin_storage_settings\"\r\n            ],\r\n            \"website\": \"https://www.robinhq.com\"\r\n        },\r\n        \"RockRMS\": {\r\n            \"cats\": [\r\n                1,\r\n                11,\r\n                32\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^rock v([0-9.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"IIS\",\r\n                \"Microsoft ASP.NET\",\r\n                \"Windows Server\"\r\n            ],\r\n            \"description\": \"Rock RMS is a free, open-source Relationship Management System (RMS) built for churches and businesses.\",\r\n            \"website\": \"https://www.rockrms.com\"\r\n        },\r\n        \"Rockerbox\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"rb.source\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"wxyz\\\\.rb\\\\.js\"\r\n            ],\r\n            \"description\": \"Rockerbox is a provider of multi-touch attribution software.\",\r\n            \"website\": \"https://www.rockerbox.com\"\r\n        },\r\n        \"Rocket.Chat\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"rocketchat.livechat\"\r\n            ],\r\n            \"description\": \"Rocket.Chat is a communication hub that facilitates team collaboration and organizes conversations.\",\r\n            \"website\": \"https://rocket.chat\"\r\n        },\r\n        \"Rocketfy\": {\r\n            \"cats\": [\r\n                6,\r\n                51\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.rocketfy\\\\.mx/\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^rocketfy\\\\smaker\\\\s-\\\\sv([\\\\d\\\\.]+)$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Next.js\",\r\n                \"React\"\r\n            ],\r\n            \"description\": \"Rocketfy is a platform that allows users to build an online store and allows dropshipping at the same time.\",\r\n            \"website\": \"https://rocketfy.mx\"\r\n        },\r\n        \"Roistat\": {\r\n            \"cats\": [\r\n                10,\r\n                74\r\n            ],\r\n            \"js\": [\r\n                \"roistathost\",\r\n                \"roistatprojectid\"\r\n            ],\r\n            \"description\": \"Roistat is a marketing analytics system.\",\r\n            \"website\": \"https://roistat.com/\"\r\n        },\r\n        \"Rokt\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.rokt\\\\.com\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"\\\\.rokt\\\\.com/\"\r\n            ],\r\n            \"description\": \"Rokt is an ecommerce marketing technology that gives customers a personalised and relevant experience while buying online.\",\r\n            \"website\": \"https://www.rokt.com\"\r\n        },\r\n        \"Rollbar\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"rollbar\\\\.js/([0-9.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"website\": \"https://rollbar.com/\"\r\n        },\r\n        \"Rosti\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"headers\": {\r\n                \"x-rosti\": \"\"\r\n            },\r\n            \"description\": \"Rosti is a hosting service suitable for development and production deployment of web applications.\",\r\n            \"website\": \"https://rosti.cz\"\r\n        },\r\n        \"Rotic\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"rotic.setting\"\r\n            ],\r\n            \"description\": \"Rotic is a conversion chatbot that answers questions, captures contacts, and books meetings.\",\r\n            \"website\": \"https://rotic.io\"\r\n        },\r\n        \"RoundCube\": {\r\n            \"cats\": [\r\n                30\r\n            ],\r\n            \"js\": [\r\n                \"rcmail\",\r\n                \"roundcube\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003ctitle\\u003eroundcube\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"RoundCube is free and open-source web-based IMAP email client.\",\r\n            \"website\": \"https://roundcube.net\",\r\n            \"cpe\": \"cpe:2.3:a:roundcube:webmail:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Route\": {\r\n            \"cats\": [\r\n                107\r\n            ],\r\n            \"js\": [\r\n                \"routeapp\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//cdn.routeapp.io/\"\r\n            ],\r\n            \"description\": \"Route is a delivery and shipping tracking app\",\r\n            \"website\": \"https://route.com/\"\r\n        },\r\n        \"Royal Mail\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Royal Mail is a British multinational postal service and courier company.\",\r\n            \"website\": \"https://www.royalmail.com\"\r\n        },\r\n        \"Rubedo\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"rubedoconfig\"\r\n            ],\r\n            \"implies\": [\r\n                \"Elasticsearch\",\r\n                \"MongoDB\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Rubedo is an open-source PHP CMS powered by the Zend Framework, NoSQL MongoDB, Elasticsearch, and AngularJS, offering advanced features for content management and development.\",\r\n            \"website\": \"https://github.com/WebTales/rubedo\"\r\n        },\r\n        \"Rubicon Project\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"https?://[^/]*\\\\.rubiconproject\\\\.com\"\r\n            ],\r\n            \"description\": \"Rubicon Project is an advertising automation platform enabling publishers to transact advertising brands.\",\r\n            \"website\": \"https://rubiconproject.com/\"\r\n        },\r\n        \"Ruby\": {\r\n            \"cats\": [\r\n                27\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"(?:mongrel|ruby(?:/([\\\\d\\\\.]+))?)\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"Ruby is an open-source object-oriented programming language.\",\r\n            \"website\": \"https://ruby-lang.org\",\r\n            \"cpe\": \"cpe:2.3:a:ruby-lang:ruby:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Ruby Receptionists\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"rubyapi\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"chatwidget\\\\.ruby\\\\.com\"\r\n            ],\r\n            \"description\": \"Ruby Receptionists is a Portland, Oregon based virtual answering service for small businesses.\",\r\n            \"website\": \"https://www.ruby.com\"\r\n        },\r\n        \"Ruby on Rails\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"cookies\": {\r\n                \"_session_id\": \"\\\\;confidence:75\"\r\n            },\r\n            \"js\": [\r\n                \"__react_on_rails_event_handlers_ran_once__\",\r\n                \"_rails_loaded\",\r\n                \"reactonrails\"\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"mod_(?:rails|rack)\",\r\n                \"x-powered-by\": \"mod_(?:rails|rack)\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"/assets/application-[a-z\\\\d]{32}/\\\\.js\\\\;confidence:50\"\r\n            ],\r\n            \"meta\": {\r\n                \"csrf-param\": [\r\n                    \"^authenticity_token$\\\\;confidence:50\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Ruby\"\r\n            ],\r\n            \"description\": \"Ruby on Rails is a server-side web application framework written in Ruby under the MIT License.\",\r\n            \"website\": \"https://rubyonrails.org\",\r\n            \"cpe\": \"cpe:2.3:a:rubyonrails:rails:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Rudderstack\": {\r\n            \"cats\": [\r\n                97\r\n            ],\r\n            \"js\": [\r\n                \"rudderanalytics\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.rudderlabs\\\\.com\"\r\n            ],\r\n            \"description\": \"Rudderstack is a customer data platform (CDP) that helps you collect, clean, and control your customer data.\",\r\n            \"website\": \"https://rudderstack.com/\"\r\n        },\r\n        \"Rumble\": {\r\n            \"cats\": [\r\n                14\r\n            ],\r\n            \"js\": [\r\n                \"rumble.gdpr\",\r\n                \"rumble.resize\"\r\n            ],\r\n            \"description\": \"Rumble is a Canadian video-streaming platform that presents itself as an alternative to YouTube.\",\r\n            \"website\": \"https://rumble.com\"\r\n        },\r\n        \"Rust\": {\r\n            \"cats\": [\r\n                27\r\n            ],\r\n            \"description\": \"Rust is a multi-paradigm, general-purpose programming language designed for performance and safety, especially safe concurrency.\",\r\n            \"website\": \"https://www.rust-lang.org\"\r\n        },\r\n        \"RxJS\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"rx.compositedisposable\",\r\n                \"rx.symbol\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"rx(?:\\\\.\\\\w+)?(?:\\\\.compat|\\\\.global)?(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"description\": \"RxJS is a reactive library used to implement reactive programming to deal with async implementation, callbacks, and event-based programs.\",\r\n            \"website\": \"https://reactivex.io\"\r\n        },\r\n        \"Ryviu\": {\r\n            \"cats\": [\r\n                90\r\n            ],\r\n            \"js\": [\r\n                \"ryviu_global_settings\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.ryviu\\\\.com\"\r\n            ],\r\n            \"description\": \"Ryviu is customer product reviews app for building social proof for store.\",\r\n            \"website\": \"https://www.ryviu.com/\"\r\n        },\r\n        \"SALESmanago\": {\r\n            \"cats\": [\r\n                97,\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"salesmanagoobject\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.salesmanago\\\\.com/\"\r\n            ],\r\n            \"description\": \"SALESmanago is a no-code marketing automation and customer data platform designed for mid-sized buinesses and enterprises.\",\r\n            \"website\": \"https://www.salesmanago.com\"\r\n        },\r\n        \"SAP\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"sap netweaver application server\"\r\n            },\r\n            \"website\": \"https://sap.com\",\r\n            \"cpe\": \"cpe:2.3:a:sap:netweaver_application_server:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"SAP Commerce Cloud\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"_hybris\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"acc.config.commonresourcepath\",\r\n                \"acc.config.rootpath\",\r\n                \"acc.config.themeresourcepath\",\r\n                \"getproductattrfromhybris\",\r\n                \"getproductavailabilityhybris\",\r\n                \"hybrisid\",\r\n                \"passlgdatatohybris\",\r\n                \"smartedit\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c[^\\u003e]+/(?:sys_master|hybr|_ui/(?:.*responsive/)?(?:desktop|common(?:/images|/img|/css|ico)?))/\",\r\n                \"\\u003cscript[^\\u003e].*hybris.*.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"description\": \"SAP Commerce Cloud is a cloud-native omnichannel commerce solution for B2B, B2C, and B2B2C companies.\",\r\n            \"website\": \"https://www.sap.com/products/commerce-cloud.html\",\r\n            \"cpe\": \"cpe:2.3:a:sap:commerce_cloud:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"SAP Customer Data Cloud Sign-in\": {\r\n            \"cats\": [\r\n                69\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.gigya\\\\.com/js/gigya\\\\.js\"\r\n            ],\r\n            \"website\": \"https://www.sap.com/uk/acquired-brands/what-is-gigya.html\"\r\n        },\r\n        \"SAP Upscale Commerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"description\": \"SAP Upscale Commerce is a SaaS solution for small-to-medium organizations selling directly to consumers.\",\r\n            \"website\": \"https://www.sapstore.com/solutions/47000/SAP-Upscale-Commerce\"\r\n        },\r\n        \"SDL Tridion\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cimg[^\\u003e]+_tcm\\\\d{2,3}-\\\\d{6}\\\\.\"\r\n            ],\r\n            \"website\": \"https://www.sdl.com/products/tridion\"\r\n        },\r\n        \"SEMrush\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"semrush\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"www\\\\.semrush\\\\.com\"\r\n            ],\r\n            \"description\": \"SEMrush is an all-in-one tool suite for improving online visibility and discovering marketing insights.\",\r\n            \"website\": \"https://www.semrush.com\"\r\n        },\r\n        \"SEOmatic\": {\r\n            \"cats\": [\r\n                54\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^seomatic$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Craft CMS\"\r\n            ],\r\n            \"description\": \"SEOmatic facilitates modern SEO best practices \\u0026 implementation for Craft CMS 3.\",\r\n            \"website\": \"https://plugins.craftcms.com/seomatic\"\r\n        },\r\n        \"SEUR\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"SEUR is a Spanish shipments and express transport company.\",\r\n            \"website\": \"https://www.seur.com\"\r\n        },\r\n        \"SHE Media\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"blogherads.adq\",\r\n                \"shemedia\"\r\n            ],\r\n            \"description\": \"SHE Media is an ad network, which means that they basically serve as a coordinator between advertisers and publishers (bloggers).\",\r\n            \"website\": \"https://www.shemedia.com\"\r\n        },\r\n        \"SIDEARM Sports\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"sidearmcomponents\",\r\n                \"sidearmsports\"\r\n            ],\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"description\": \"SIDEARM Sports provides the software and technology that powers the websites, livestats, and video streaming for athletic programs North America.\",\r\n            \"website\": \"https://sidearmsports.com/websites\"\r\n        },\r\n        \"SIMsite\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/sim(?:site|core)/js\"\r\n            ],\r\n            \"meta\": {\r\n                \"sim.medium\": []\r\n            },\r\n            \"website\": \"https://simgroep.nl/internet/portfolio-contentbeheer_41623/\"\r\n        },\r\n        \"SNO Flex\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"sno_infographics_ajax_object\"\r\n            ],\r\n            \"description\": \"SNO Flex is a WordPress theme developed by SNO Sites. SNO Sites is a company that specialises in providing website solutions for schools and educational institutions.\",\r\n            \"website\": \"https://snosites.com\"\r\n        },\r\n        \"SOBI 2\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"html\": [\r\n                \"(?:\\u003c!-- start of sigsiu online business index|\\u003cdiv[^\\u003e]* class=\\\"sobi2)\"\r\n            ],\r\n            \"implies\": [\r\n                \"Joomla\"\r\n            ],\r\n            \"website\": \"https://www.sigsiu.net/sobi2.html\"\r\n        },\r\n        \"SPDY\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"headers\": {\r\n                \"x-firefox-spdy\": \"\\\\d\\\\.\\\\d\"\r\n            },\r\n            \"website\": \"https://chromium.org/spdy\"\r\n        },\r\n        \"SPIP\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"composed-by\": \"spip ([\\\\d.]+) @\\\\;version:\\\\1\",\r\n                \"x-spip-cache\": \"\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"(?:^|\\\\s)spip(?:\\\\s([\\\\d.]+(?:\\\\s\\\\[\\\\d+\\\\])?))?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"SPIP is a content management system written in PHP that uses one or more databases like SQL, SQLite or PostgreSQL.\",\r\n            \"website\": \"https://www.spip.net\",\r\n            \"cpe\": \"cpe:2.3:a:spip:spip:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"SPNEGO\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"headers\": {\r\n                \"www-authenticate\": \"^negotiate\"\r\n            },\r\n            \"description\": \"SPNEGO is an authentication method commonly used in Windows servers to allow NTLM or Kerberos authentication.\",\r\n            \"website\": \"https://tools.ietf.org/html/rfc4559\"\r\n        },\r\n        \"SQL Buddy\": {\r\n            \"cats\": [\r\n                3\r\n            ],\r\n            \"html\": [\r\n                \"(?:\\u003ctitle\\u003esql buddy\\u003c/title\\u003e|\\u003c[^\\u003e]+onclick=\\\"sidemainclick\\\\(\\\"home\\\\.php)\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"SQL Buddy is an open-source web-based application written in PHP to handle the administration of MySQL and SQLite with the use of a Web browser.\",\r\n            \"website\": \"https://www.sqlbuddy.com\"\r\n        },\r\n        \"SQLite\": {\r\n            \"cats\": [\r\n                34\r\n            ],\r\n            \"website\": \"https://www.sqlite.org\",\r\n            \"cpe\": \"cpe:2.3:a:sqlite:sqlite:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"STN Video\": {\r\n            \"cats\": [\r\n                36,\r\n                14\r\n            ],\r\n            \"scripts\": [\r\n                \"embed\\\\.sendtonews\\\\.com/\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"embed\\\\.sendtonews\\\\.com/\"\r\n            ],\r\n            \"description\": \"STN Video is a online video platform that solves digital video for publishers, content creators, and advertisers.\",\r\n            \"website\": \"https://www.stnvideo.com\"\r\n        },\r\n        \"STUDIO\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^studio$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Firebase\",\r\n                \"Google Cloud\",\r\n                \"Google Tag Manager\",\r\n                \"Nuxt.js\",\r\n                \"Vue.js\"\r\n            ],\r\n            \"description\": \"STUDIO is a Japan-based company and SaaS application for designing and hosting websites. The service includes a visual editor with built-in CMS and analytics.\",\r\n            \"website\": \"https://studio.design\"\r\n        },\r\n        \"SUSE\": {\r\n            \"cats\": [\r\n                28\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"suse(?:/?\\\\s?-?([\\\\d.]+))?\\\\;version:\\\\1\",\r\n                \"x-powered-by\": \"suse(?:/?\\\\s?-?([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"SUSE is a Linux-based server operating system.\",\r\n            \"website\": \"https://suse.com\"\r\n        },\r\n        \"SVG Support\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/svg-support/\"\r\n            ],\r\n            \"description\": \"SVG Support is a WordPress plugin which allows you to safely upload SVG files to your media library and use them like any other image.\",\r\n            \"website\": \"https://github.com/wp-plugins/svg-support\"\r\n        },\r\n        \"SWC\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"description\": \"SWC is an extensible Rust-based platform for the next generation of fast developer tools.\",\r\n            \"website\": \"https://swc.rs\"\r\n        },\r\n        \"SWFObject\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"swfobject\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"swfobject.*\\\\.js\"\r\n            ],\r\n            \"description\": \"SWFObject is an open-source JavaScript library used to embed Adobe Flash content onto web pages.\",\r\n            \"website\": \"https://github.com/swfobject/swfobject\"\r\n        },\r\n        \"SaaSquatch\": {\r\n            \"cats\": [\r\n                94,\r\n                84\r\n            ],\r\n            \"js\": [\r\n                \"saasquatch_tenant_alias\",\r\n                \"squatch.ctawidget\",\r\n                \"squatchquery\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:\\\\.cloudfront\\\\.net/assets/javascripts/(?:v2/)?|/sas)squatch\\\\.min\\\\.js\"\r\n            ],\r\n            \"description\": \"SaaSquatch is a cloud-based loyalty, referral and rewards marketing platform.\",\r\n            \"website\": \"https://www.saasquatch.com\"\r\n        },\r\n        \"Saba.Host\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"description\": \"Saba.Host is a total web-hosting solutions. It provides shared hosting, WordPress hosting, dedicated server, virtual private server (VPS), SSL and more.\",\r\n            \"website\": \"https://saba.host\"\r\n        },\r\n        \"SabaVision\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"__sabavision_get_add_timeout\",\r\n                \"sabavisionelement\",\r\n                \"sabavisionwebsiteid\",\r\n                \"sabavisionwebsitepage\"\r\n            ],\r\n            \"meta\": {\r\n                \"sabavision_zone\": []\r\n            },\r\n            \"description\": \"SabaVision, one of the core products of SabaIdea, is Iran's largest online advertising agency.\",\r\n            \"website\": \"https://www.sabavision.com\"\r\n        },\r\n        \"Saber\": {\r\n            \"cats\": [\r\n                57\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cdiv [^\\u003e]*id=\\\"_saber\\\"\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^saber v([\\\\d.]+)$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Vue.js\"\r\n            ],\r\n            \"description\": \"Saber is a framework for building static websites.\",\r\n            \"website\": \"https://saber.land/\"\r\n        },\r\n        \"Sails.js\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"cookies\": {\r\n                \"sails.sid\": \"\"\r\n            },\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^sails(?:$|[^a-z0-9])\"\r\n            },\r\n            \"implies\": [\r\n                \"Express\"\r\n            ],\r\n            \"website\": \"https://sailsjs.org\"\r\n        },\r\n        \"Sailthru\": {\r\n            \"cats\": [\r\n                32,\r\n                75,\r\n                76\r\n            ],\r\n            \"cookies\": {\r\n                \"sailthru_pageviews\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"sailthru\",\r\n                \"sailthruidentify\",\r\n                \"sailthrunewsletterregistration\",\r\n                \"tracksailthruuser\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"ak\\\\.sail-horizon\\\\.com\"\r\n            ],\r\n            \"meta\": {\r\n                \"sailthru.image.full\": [],\r\n                \"sailthru.title\": []\r\n            },\r\n            \"description\": \"Sailthru is a marketing automation software and multi-channel personalisation tool that serves ecommerce and media brands.\",\r\n            \"website\": \"https://www.sailthru.com\"\r\n        },\r\n        \"Sakai\": {\r\n            \"cats\": [\r\n                21\r\n            ],\r\n            \"cookies\": {\r\n                \"sakaiid\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"sakai\",\r\n                \"sakaiportalwindow\",\r\n                \"sakaitutorialskin\"\r\n            ],\r\n            \"description\": \"Sakai is a robust open-source learning management system created by higher ed for higher ed.\",\r\n            \"website\": \"https://www.sakailms.org\",\r\n            \"cpe\": \"cpe:2.3:a:sakailms:sakai:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Sakura Internet\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"description\": \"Sakura Internet is a web hosting provider that has been operating for almost 30 years.\",\r\n            \"website\": \"https://www.sakura.ad.jp\"\r\n        },\r\n        \"SaleCycle\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"description\": \"SaleCycle is a UK based global behavioral marketing firm.\",\r\n            \"website\": \"https://www.salecycle.com\"\r\n        },\r\n        \"Saleor\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"___next_data__.runtimeconfig.saleor\",\r\n                \"__next_data__.runtimeconfig.saleor\"\r\n            ],\r\n            \"implies\": [\r\n                \"GraphQL\"\r\n            ],\r\n            \"description\": \"Saleor is a headless, GraphQL ecommerce platform.\",\r\n            \"website\": \"https://saleor.io\"\r\n        },\r\n        \"SalesFire\": {\r\n            \"cats\": [\r\n                76,\r\n                29\r\n            ],\r\n            \"js\": [\r\n                \"loadsalesfire\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.salesfire\\\\.co\\\\.uk/\"\r\n            ],\r\n            \"description\": \"SalesFire is a SaaS company specialising in conversion rate optimisation, intelligent personalisation and on-site search solutions.\",\r\n            \"website\": \"https://www.salesfire.co.uk\"\r\n        },\r\n        \"SalesReps.io\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"api\\\\.salesreps\\\\.io/\"\r\n            ],\r\n            \"description\": \"SalesReps.io is a sales representative performance and commission reporting software provider.\",\r\n            \"website\": \"https://salesreps.io\"\r\n        },\r\n        \"Salesfloor\": {\r\n            \"cats\": [\r\n                5,\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"nmconfig.salesfloor_env\",\r\n                \"salesfloorhost\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.salesfloor\\\\.net/\"\r\n            ],\r\n            \"description\": \"Salesfloor is a mobile clienteling and virtual selling platform designed for store associates to connect with customers-beyond the store and a mpos platform for frictionless in-store experiences.\",\r\n            \"website\": \"https://salesfloor.net\"\r\n        },\r\n        \"Salesforce\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"cookies\": {\r\n                \"com.salesforce\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"sfdcapp\",\r\n                \"sfdccmp\",\r\n                \"sfdcpage\",\r\n                \"sfdcsessionvars\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c[^\\u003e]+=\\\"brandquaternaryfgrs\\\"\"\r\n            ],\r\n            \"description\": \"Salesforce is a cloud computing service software (SaaS) that specializes in customer relationship management (CRM).\",\r\n            \"website\": \"https://www.salesforce.com\",\r\n            \"cpe\": \"cpe:2.3:a:salesforce:*:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Salesforce Audience Studio\": {\r\n            \"cats\": [\r\n                86,\r\n                97\r\n            ],\r\n            \"js\": [\r\n                \"krux\",\r\n                \"updatekruxcookie\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.krxd\\\\.net/\"\r\n            ],\r\n            \"description\": \"Salesforce Audience Studio is a customer data marketplace that only other platform users can access.\",\r\n            \"website\": \"https://www.salesforce.com/products/marketing-cloud/data-management\"\r\n        },\r\n        \"Salesforce Commerce Cloud\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"dw_dnt\": \"\",\r\n                \"dwsid\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"dwanalytics\"\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"demandware ecommerce server\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"/demandware\\\\.static/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Salesforce\"\r\n            ],\r\n            \"description\": \"Salesforce Commerce Cloud is a cloud-based software-as-a-service (SaaS) ecommerce solution.\",\r\n            \"website\": \"https://demandware.com\"\r\n        },\r\n        \"Salesforce Desk\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^/s/sfsites/aurafw/\"\r\n            ],\r\n            \"description\": \"Salesforce Desk(Desk.com) is software as a service (SaaS) tool on the help desk.\",\r\n            \"website\": \"https://www.salesforce.com/solutions/small-business-solutions/help-desk-software/\"\r\n        },\r\n        \"Salesforce Interaction Studio\": {\r\n            \"cats\": [\r\n                76,\r\n                86\r\n            ],\r\n            \"js\": [\r\n                \"evergage\",\r\n                \"evergagehidesections\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.evgnet\\\\.com\"\r\n            ],\r\n            \"description\": \"Salesforce Interaction Studio (formerly Evergage) is a cloud-based software that allows users to collect, analyze, and respond to user behavior on their websites and web applications in real-time.\",\r\n            \"website\": \"https://www.salesforce.com/products/marketing-cloud/customer-interaction\"\r\n        },\r\n        \"Salesforce Marketing Cloud Account Engagement\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"piaid\",\r\n                \"picid\",\r\n                \"pihostname\",\r\n                \"piprotocol\",\r\n                \"pitracker\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-pardot-lb\": \"\",\r\n                \"x-pardot-route\": \"\",\r\n                \"x-pardot-rsp\": \"\"\r\n            },\r\n            \"description\": \"Salesforce Marketing Cloud Account Engagement (formerly known as Pardot) is an application specifically designed for B2B marketing automation.\",\r\n            \"website\": \"https://www.salesforce.com/products/marketing-cloud/marketing-automation\"\r\n        },\r\n        \"Salesforce Marketing Cloud Email Studio\": {\r\n            \"cats\": [\r\n                75\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.exacttarget\\\\.com/\"\r\n            },\r\n            \"description\": \"Salesforce Marketing Cloud Email Studio is a powerful tool that allows you to build and send personalised emails.\",\r\n            \"website\": \"https://www.salesforce.com/products/marketing-cloud/email-marketing\"\r\n        },\r\n        \"Salesforce Service Cloud\": {\r\n            \"cats\": [\r\n                52,\r\n                53\r\n            ],\r\n            \"js\": [\r\n                \"embedded_svc\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"service\\\\.force\\\\.com\"\r\n            ],\r\n            \"implies\": [\r\n                \"Salesforce\"\r\n            ],\r\n            \"description\": \"Salesforce Service Cloud is a customer relationship management (CRM) platform for customer service and support.\",\r\n            \"website\": \"https://www.salesforce.com/au/products/service-cloud/\"\r\n        },\r\n        \"Salesloft\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"slscout\",\r\n                \"slscoutobject\"\r\n            ],\r\n            \"description\": \"Salesloft is a cloud-based sales engagement platform.\",\r\n            \"website\": \"https://salesloft.com\"\r\n        },\r\n        \"Salesnauts\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"description\": \"Salesnauts is a fashion ecommerce platform.\",\r\n            \"website\": \"https://salesnauts.com\"\r\n        },\r\n        \"Salla\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"salla.shop\",\r\n                \"sallaapplepay\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-frame-options\": \"\\\\.salla\\\\.sa\",\r\n                \"x-powered-by\": \"^salla$\"\r\n            },\r\n            \"description\": \"Salla is an ecommerce platform specifically tailored to serve businesses and customers in Saudi Arabia.\",\r\n            \"website\": \"https://salla.sa\"\r\n        },\r\n        \"Salonist\": {\r\n            \"cats\": [\r\n                72\r\n            ],\r\n            \"description\": \"Salonist is a salon management software.\",\r\n            \"website\": \"https://salonist.io\"\r\n        },\r\n        \"Salsify\": {\r\n            \"cats\": [\r\n                95\r\n            ],\r\n            \"description\": \"Salsify is a product experience management platform which connects digital asset management, content syndication, and digital catalog capabilities.\",\r\n            \"website\": \"https://www.salsify.com\"\r\n        },\r\n        \"Saly\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"application-name\": [\r\n                    \"^saly\\\\sb2b\\\\splatform$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\",\r\n                \"Svelte\"\r\n            ],\r\n            \"description\": \"Saly is an enterprise-class B2B ecommerce platform. Dedicated to solving problems faced by manufacturers, wholesalers and distributors.\",\r\n            \"website\": \"https://saly.pl\"\r\n        },\r\n        \"Sana Commerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"sana.ui\"\r\n            ],\r\n            \"description\": \"Sana Commerce is an ecommerce platform for SAP and Microsoft Dynamics.\",\r\n            \"website\": \"https://www.sana-commerce.com\"\r\n        },\r\n        \"Sanity\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"cdn\\\\.sanity\\\\.io\",\r\n                \"x-sanity-shard\": \"\"\r\n            },\r\n            \"description\": \"Sanity is a platform for structured content. It comes with an open-source, headless CMS that can be customized with Javascript, a real-time hosted data store and an asset delivery pipeline.\",\r\n            \"website\": \"https://www.sanity.io\"\r\n        },\r\n        \"Sapper\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"js\": [\r\n                \"__sapper__\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cscript[^\\u003e]*\\u003e__sapper__\"\r\n            ],\r\n            \"implies\": [\r\n                \"Node.js\",\r\n                \"Svelte\"\r\n            ],\r\n            \"website\": \"https://sapper.svelte.dev\"\r\n        },\r\n        \"Sapren\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^saprenco.com website builder$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Laravel\",\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Sapren is a CMS produced by PHP, Laravel framework and MySQL.\",\r\n            \"website\": \"https://www.sapren.net\"\r\n        },\r\n        \"Sarka-SPIP\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"sarka-spip(?:\\\\s([\\\\d.]+))?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"SPIP\"\r\n            ],\r\n            \"website\": \"https://sarka-spip.net\"\r\n        },\r\n        \"Sass\": {\r\n            \"cats\": [\r\n                27\r\n            ],\r\n            \"description\": \"Sass is an extension of CSS that enables you to use things like variables, nested rules, inline imports and more.\",\r\n            \"website\": \"https://sass-lang.com\"\r\n        },\r\n        \"Satori\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"satoriform\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"satori\\\\.segs\\\\.jp/\"\r\n            ],\r\n            \"description\": \"Satori provides marketing automation software.\",\r\n            \"website\": \"https://satori.marketing\"\r\n        },\r\n        \"Satori Studio Bento\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/bento/\"\r\n            ],\r\n            \"description\": \"Satori Studio Bento is a powerful yet user-friendly free WordPress theme intended for use in the broadest range of web projects.\",\r\n            \"website\": \"https://satoristudio.net/bento-free-wordpress-theme\"\r\n        },\r\n        \"Sazito\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"sazito\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^sazito\"\r\n                ]\r\n            },\r\n            \"website\": \"https://sazito.com\"\r\n        },\r\n        \"Scala\": {\r\n            \"cats\": [\r\n                27\r\n            ],\r\n            \"description\": \"Scala is a general-purpose programming language providing support for both object-oriented programming and functional programming.\",\r\n            \"website\": \"https://www.scala-lang.org\"\r\n        },\r\n        \"Scalapay\": {\r\n            \"cats\": [\r\n                41,\r\n                91\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.scalapay\\\\.com\"\r\n            ],\r\n            \"description\": \"Scalapay is a payment method for e-commerce merchants in Europe that allows customers to buy now and pay later (BNPL).\",\r\n            \"website\": \"https://www.scalapay.com/\"\r\n        },\r\n        \"Scalefast\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn-prod\\\\.scalefast\\\\.com/(?:.+\\\\.js\\\\?version=([\\\\d\\\\.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Scalefast is an outsourced ecommerce solution designed to build and manage global ecommerce for brands, with customer loyalty programs.\",\r\n            \"website\": \"https://www.scalefast.com\"\r\n        },\r\n        \"ScandiPWA\": {\r\n            \"cats\": [\r\n                108\r\n            ],\r\n            \"implies\": [\r\n                \"Magento\\\\;version:2\",\r\n                \"PWA\",\r\n                \"React\"\r\n            ],\r\n            \"description\": \"ScandiPWA is the next generation Magento 2 PWA theme developed in React.\",\r\n            \"website\": \"https://scandipwa.com\",\r\n            \"cpe\": \"cpe:2.3:a:scandipwa:magento-scripts:*:*:*:*:*:node.js:*:*\"\r\n        },\r\n        \"Schedule Engine\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"webchat.scheduleengine.net\"\r\n            ],\r\n            \"description\": \"Schedule Engine is a customer support solution built for contractors.\",\r\n            \"website\": \"https://www.scheduleengine.com/\"\r\n        },\r\n        \"Scientific Linux\": {\r\n            \"cats\": [\r\n                28\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"scientific linux\",\r\n                \"x-powered-by\": \"scientific linux\"\r\n            },\r\n            \"description\": \"Scientific Linux (SL) is a free open-source operating system based on Red Hat Enterprise Linux.\",\r\n            \"website\": \"https://scientificlinux.org\"\r\n        },\r\n        \"Scissor Themes Writee\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/writee(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"Writee is an elegant free personal WordPress blog theme and well suited for personal, food, travel, fashion, corporate, or any other amazing blog.\",\r\n            \"website\": \"https://www.scissorthemes.com/themes/writee-free\"\r\n        },\r\n        \"Scoop.it\": {\r\n            \"cats\": [\r\n                96\r\n            ],\r\n            \"description\": \"Scoop.it is a content marketing software company based in San Francisco which provide content curation platform.\",\r\n            \"website\": \"https://www.scoop.it\"\r\n        },\r\n        \"Scorpion\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"process.userdata\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c[^\\u003e]+id=\\\"hsscorpion\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn.cxc.scorpion.direct\"\r\n            ],\r\n            \"description\": \"Scorpion is a marketing and technology provider.\",\r\n            \"website\": \"https://www.scorpion.co/\"\r\n        },\r\n        \"Scrivito\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"scrivito\",\r\n                \"scrivito\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^scrivito\\\\sby\\\\sinfopark\\\\sag\\\\s\\\\(scrivito\\\\.com\\\\)$\"\r\n                ]\r\n            },\r\n            \"description\": \"Scrivito is a decoupled/headless enterprise web CMS.\",\r\n            \"website\": \"https://www.scrivito.com\"\r\n        },\r\n        \"ScrollMagic\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"scrollmagic\",\r\n                \"scrollmagic.version\"\r\n            ],\r\n            \"implies\": [\r\n                \"GSAP\",\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"ScrollMagic is a jQuery plugin which essentially lets you use the scrollbar like a playback scrub control.\",\r\n            \"website\": \"https://scrollmagic.io\"\r\n        },\r\n        \"Scully\": {\r\n            \"cats\": [\r\n                57\r\n            ],\r\n            \"js\": [\r\n                \"scullyio\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^scully\\\\s([\\\\d\\\\.]+)$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Angular\"\r\n            ],\r\n            \"description\": \"Scully is a static site generator for Angular projects looking to embrace the Jamstack.\",\r\n            \"website\": \"https://scully.io\"\r\n        },\r\n        \"SeQura\": {\r\n            \"cats\": [\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"sequra\",\r\n                \"sequraconfiguration\",\r\n                \"sequraproducts\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"live\\\\.sequracdn\\\\.com/\"\r\n            ],\r\n            \"description\": \"SeQura is a FinTech company based in Barcelona, providing digital flexible payment solutions, with a geographical focus on Southern Europe and Latin America.\",\r\n            \"website\": \"https://www.sequra.es\"\r\n        },\r\n        \"Seal Subscriptions\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"sealsubs.checkout\",\r\n                \"sealsubscriptions_settings_updated\",\r\n                \"sealsubsloaded\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.sealsubscriptions\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Seal Subscriptions is a Shopify subscriptions app, packed with lots of features, such as automated product swaps, interval changes, payment calendar, Quick Checkout Wizard, and more.\",\r\n            \"website\": \"https://www.sealsubscriptions.com\"\r\n        },\r\n        \"SeamlessCMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^seamless\\\\.?cms\"\r\n                ]\r\n            },\r\n            \"website\": \"https://www.seamlesscms.com\"\r\n        },\r\n        \"SearchFit\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"sfui.checkout\"\r\n            ],\r\n            \"meta\": {\r\n                \"generation-copyright\": [\r\n                    \"by\\\\ssearchfit\\\\sshopping\\\\scart\\\\sv([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"Searchfit provides top ecommerce software, solutions and ecommerce website design for enterprise and mid-level retailers.\",\r\n            \"website\": \"https://www.searchfit.com\"\r\n        },\r\n        \"Searchanise\": {\r\n            \"cats\": [\r\n                29\r\n            ],\r\n            \"js\": [\r\n                \"searchanise\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"searchanise(?:-.+\\\\.kxcdn)?\\\\.com/\"\r\n            ],\r\n            \"description\": \"Searchanise is a complete search and filter solution for ecommerce.\",\r\n            \"website\": \"https://start.searchanise.com\"\r\n        },\r\n        \"SearchiQ\": {\r\n            \"cats\": [\r\n                29\r\n            ],\r\n            \"js\": [\r\n                \"siq_version\",\r\n                \"siqconfig.version\"\r\n            ],\r\n            \"description\": \"SearchiQ is a cloud-based search engine solution that can be integrated into a website.\",\r\n            \"website\": \"https://www.searchiq.co\"\r\n        },\r\n        \"Searchspring\": {\r\n            \"cats\": [\r\n                29\r\n            ],\r\n            \"js\": [\r\n                \"searchspring\",\r\n                \"searchspringconf\",\r\n                \"searchspringinit\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.searchspring\\\\.net\"\r\n            ],\r\n            \"description\": \"Searchspring is a site search and merchandising platform designed to help ecommerce.\",\r\n            \"website\": \"https://searchspring.com\"\r\n        },\r\n        \"Secomapp\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"secomapp\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.secomapp\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Secomapp is a trusted Shopify Expert providing services through Shopify Apps.\",\r\n            \"website\": \"https://www.secomapp.com\"\r\n        },\r\n        \"Sectigo\": {\r\n            \"cats\": [\r\n                70\r\n            ],\r\n            \"description\": \"Sectigo provides SSL certificate and computer security products.\",\r\n            \"website\": \"https://sectigo.com/\"\r\n        },\r\n        \"Section.io\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"headers\": {\r\n                \"section-io-id\": \"\",\r\n                \"section-io-origin-status\": \"\",\r\n                \"section-io-origin-time-seconds\": \"\"\r\n            },\r\n            \"description\": \"Section.io is a Content Delivery Network (CDN).\",\r\n            \"website\": \"https://www.section.io\"\r\n        },\r\n        \"Sections.design Shopify App Optimization\": {\r\n            \"cats\": [\r\n                92,\r\n                100\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Sections.design Shopify App Optimization is a Shopify section written in liquid for the purpose of improving performance of Shopify stores by optimizing how Shopify app loads.\",\r\n            \"website\": \"https://github.com/mirceapiturca/Sections/tree/master/App%20Optimization\"\r\n        },\r\n        \"SeedProd Coming Soon\": {\r\n            \"cats\": [\r\n                87,\r\n                51\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/coming-soon/\"\r\n            ],\r\n            \"description\": \"SeedProd Coming Soon is a page builder allows you to add a new website under construction page to your WordPress site without hiring a developer.\",\r\n            \"website\": \"https://www.seedprod.com/features/coming-soon-page-templates-for-wordpress\"\r\n        },\r\n        \"Seers\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"seersco.com/script/cb\\\\.js\"\r\n            ],\r\n            \"website\": \"https://www.seersco.com\"\r\n        },\r\n        \"Segmanta\": {\r\n            \"cats\": [\r\n                73\r\n            ],\r\n            \"js\": [\r\n                \"segmanta__dynamic_embed_config\",\r\n                \"segmanta__user_metadata\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"pge\\\\.segmanta\\\\.com/widget_embed_js(?:/widgetembed-v([\\\\d.]+)\\\\.min\\\\.js)?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Segmanta is a mobile-first survey platform designed for product feedback, brand awareness and concept testing research.\",\r\n            \"website\": \"https://segmanta.com\"\r\n        },\r\n        \"Segment\": {\r\n            \"cats\": [\r\n                97\r\n            ],\r\n            \"js\": [\r\n                \"__segment_inspector__\",\r\n                \"analytics.snippet_version\",\r\n                \"analytics.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/segment-wrapper\\\\.min\\\\.js\",\r\n                \"cdn\\\\.segment\\\\.com/analytics\\\\.js\"\r\n            ],\r\n            \"description\": \"Segment is a customer data platform (CDP) that helps you collect, clean, and control your customer data.\",\r\n            \"website\": \"https://segment.com\"\r\n        },\r\n        \"Segment Consent Manager \": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"js\": [\r\n                \"consentmanager.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"@segment/consent-manager@([\\\\d.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \" Segment Consent Manager is a tool that automates the process of requesting consent for data usage, stores data on user privacy preferences, and updates these preferences when users request changes.\",\r\n            \"website\": \"https://segment.com/blog/how-to-build-consent-management-into-your-site-in-less-than-a-week\"\r\n        },\r\n        \"SegmentStream\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"segmentstream.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.segmentstream\\\\.com\"\r\n            ],\r\n            \"description\": \"SegmentStream is a AI-powered marketing analytics platform built for data-driven CMOs, web analysts and performance marketing teams.\",\r\n            \"website\": \"https://segmentstream.com\"\r\n        },\r\n        \"Seko OmniReturns\": {\r\n            \"cats\": [\r\n                102\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//cdn\\\\.omniparcelreturns\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Seko OmniReturns is an online portal used on ecommerce websites for customers to create returns and shipping labels globally. Seko is a global logistics company offering both the technology and reverse logistics.\",\r\n            \"website\": \"https://www.sekologistics.com/us/global-cross-border-returns\"\r\n        },\r\n        \"Select2\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"jquery.fn.select2\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"select2(?:\\\\.min|\\\\.full)?\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"Select2 is a jQuery based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results.\",\r\n            \"website\": \"https://select2.org/\"\r\n        },\r\n        \"Selectize\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"selectize\",\r\n                \"selectize\"\r\n            ],\r\n            \"implies\": [\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"Selectize is an extensible jQuery-based custom \\u003cselect\\u003e UI control.\",\r\n            \"website\": \"https://selectize.dev\"\r\n        },\r\n        \"Sellacious\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"sellaciousviewcartaio\"\r\n            ],\r\n            \"implies\": [\r\n                \"Joomla\"\r\n            ],\r\n            \"description\": \"Sellacious is an open-source ecommerce and marketplace platform for integrated POS and online stores.\",\r\n            \"website\": \"https://www.sellacious.com\"\r\n        },\r\n        \"Selldone\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"webpackchunkselldone\"\r\n            ],\r\n            \"meta\": {\r\n                \"selldone-capi\": [],\r\n                \"selldone-cdn-id\": [],\r\n                \"selldone-cdn-images\": [],\r\n                \"selldone-iframe\": []\r\n            },\r\n            \"implies\": [\r\n                \"PHP\",\r\n                \"Vue.js\"\r\n            ],\r\n            \"description\": \"Selldone is an all-in-one, ready-to-use ecommerce platform.\",\r\n            \"website\": \"https://selldone.com\"\r\n        },\r\n        \"SellersCommerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.sellerscommerce\\\\.com/\"\r\n            ],\r\n            \"description\": \"SellersCommerce is a medium ecommerce software company that provides b2b ecommerce platform to retail companies.\",\r\n            \"website\": \"https://www.sellerscommerce.com\"\r\n        },\r\n        \"Selless\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"__next_data__.assetprefix\"\r\n            ],\r\n            \"description\": \"Selless is an all-in-one, ready-to-use ecommerce platform.\",\r\n            \"website\": \"https://selless.com\"\r\n        },\r\n        \"Sellfy\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"_sellfy.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"sellfy\\\\.com/js/\"\r\n            ],\r\n            \"description\": \"Sellfy is an ecommerce platform designed specifically for selling digital products, such as music, illustrations, photos, books or videos in digital files.\",\r\n            \"website\": \"https://sellfy.com\"\r\n        },\r\n        \"Sellingo\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"sellingoquantitycalc\"\r\n            ],\r\n            \"description\": \"Sellingo is a Polish ecommerce platform.\",\r\n            \"website\": \"https://sellingo.pl\"\r\n        },\r\n        \"Sellix\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.sellix\\\\.io/static/js/embed\\\\.js\"\r\n            ],\r\n            \"description\": \"Sellix is an ecommerce payment processor. It accepts PayPal, PerfectMoney and popular cryptocurrencies.\",\r\n            \"website\": \"https://sellix.io/\"\r\n        },\r\n        \"Sellsy\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"js\": [\r\n                \"sellsysnippet\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.sellsy\\\\.com/\"\r\n            ],\r\n            \"description\": \"Sellsy is a cloud-based sales management solution for small to midsize businesses\",\r\n            \"website\": \"https://go.sellsy.com\"\r\n        },\r\n        \"Selly\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"embed\\\\.selly\\\\.(?:gg|io)\"\r\n            ],\r\n            \"description\": \"Selly is an ecommerce platform for selling digital goods.\",\r\n            \"website\": \"https://selly.io/\"\r\n        },\r\n        \"Semantic UI\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]+semantic(?:\\\\.min)\\\\.css\\\"\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/semantic(?:-([\\\\d.]+))?(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Semantic UI is a front-end development framework, powered by LESS and jQuery.\",\r\n            \"website\": \"https://semantic-ui.com/\"\r\n        },\r\n        \"Sematext Experience\": {\r\n            \"cats\": [\r\n                78\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.sematext\\\\.com/experience\\\\.js\"\r\n            ],\r\n            \"description\": \"Sematext Experience for Real User Monitoring Analyze data collected from real-user sessions, detect anomalies, send alerts in real-time, and enhance overall customer digital experience.\",\r\n            \"website\": \"https://sematext.com/experience\"\r\n        },\r\n        \"Semplice\": {\r\n            \"cats\": [\r\n                80,\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"semplice.template_dir\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/semplice(?:\\\\d+)?(?:-child)?(?:-theme)?/\"\r\n            ],\r\n            \"description\": \"Semplice is a Wordpress-based website builder made by designers for designers.\",\r\n            \"website\": \"https://www.semplice.com\"\r\n        },\r\n        \"Sencha Touch\": {\r\n            \"cats\": [\r\n                12,\r\n                26\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"sencha-touch.*\\\\.js\"\r\n            ],\r\n            \"description\": \"Sencha Touch is a user interface (UI) JavaScript library, or web framework, specifically built for the Mobile Web.\",\r\n            \"website\": \"https://www.sencha.com/products/touch\"\r\n        },\r\n        \"SendPulse\": {\r\n            \"cats\": [\r\n                32,\r\n                75\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.sendpulse\\\\.com/\"\r\n            ],\r\n            \"description\": \"SendPulse is an email marketing platform with additional channels: SMS, web push notifications, Facebook and WhatsApp chatbots.\",\r\n            \"website\": \"https://sendpulse.com\"\r\n        },\r\n        \"Sendgrid\": {\r\n            \"cats\": [\r\n                75\r\n            ],\r\n            \"description\": \"SendGrid is a cloud-based email delivery platform for transactional and marketing emails.\",\r\n            \"website\": \"https://sendgrid.com/\"\r\n        },\r\n        \"Sendinblue\": {\r\n            \"cats\": [\r\n                32,\r\n                75\r\n            ],\r\n            \"js\": [\r\n                \"sendinblue\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"sib(?:automation|forms)\\\\.com/\"\r\n            ],\r\n            \"description\": \"Sendinblue is an email marketing solution for small and medium-sized businesses that want to send and automate email marketing campaigns.\",\r\n            \"website\": \"https://www.sendinblue.com\"\r\n        },\r\n        \"Sensors Data\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"cookies\": {\r\n                \"sensorsdata2015jssdkcross\": \"\",\r\n                \"sensorsdata2015session\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"sa.lib_version\",\r\n                \"sensorsdata_app_js_bridge_call_js\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"sensorsdata\"\r\n            ],\r\n            \"website\": \"https://www.sensorsdata.cn\"\r\n        },\r\n        \"Sentry\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"js\": [\r\n                \"__sentry__\",\r\n                \"raven.config\",\r\n                \"ravenoptions.whitelisturls\",\r\n                \"sentry\",\r\n                \"sentry.sdk_version\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cscript[^\\u003e]*\\u003e\\\\s*raven\\\\.config\\\\('[^']*', \\\\{\\\\s+release: '([0-9\\\\.]+)'\\\\;version:\\\\1\",\r\n                \"\\u003cscript[^\\u003e]*src=\\\"[^\\\"]*browser\\\\.sentry\\\\-cdn\\\\.com/([0-9.]+)/bundle(?:\\\\.tracing)?(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"browser\\\\.sentry\\\\-cdn\\\\.com/([0-9.]+)/bundle(?:\\\\.tracing)?(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Sentry is an open-source platform for workflow productivity, aggregating errors from across the stack in real time.\",\r\n            \"website\": \"https://sentry.io/\"\r\n        },\r\n        \"Seravo\": {\r\n            \"cats\": [\r\n                62,\r\n                88\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^seravo\"\r\n            },\r\n            \"implies\": [\r\n                \"WordPress\"\r\n            ],\r\n            \"website\": \"https://seravo.com\"\r\n        },\r\n        \"Serendipity\": {\r\n            \"cats\": [\r\n                1,\r\n                11\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"serendipity(?: v\\\\.([\\\\d.]+))?\\\\;version:\\\\1\"\r\n                ],\r\n                \"powered-by\": [\r\n                    \"serendipity v\\\\.([\\\\d.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://s9y.org\"\r\n        },\r\n        \"Service Management Group\": {\r\n            \"cats\": [\r\n                73\r\n            ],\r\n            \"js\": [\r\n                \"smgetrackparams\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.smg\\\\.com/\"\r\n            ],\r\n            \"description\": \"Service Management Group offers customer experience measurement, employee engagement, social monitoring, publishing, and brand research services.\",\r\n            \"website\": \"https://www.smg.com\"\r\n        },\r\n        \"Service Provider Pro\": {\r\n            \"cats\": [\r\n                41,\r\n                53\r\n            ],\r\n            \"cookies\": {\r\n                \"spp_csrf\": \"\\\\;confidence:25\",\r\n                \"spp_orderform\": \"\",\r\n                \"spp_session\": \"\\\\;confidence:25\"\r\n            },\r\n            \"js\": [\r\n                \"spporderform\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.spp\\\\.io/js/\",\r\n                \"js/spp_clients\\\\.js\\\\;confidence:50\"\r\n            ],\r\n            \"meta\": {\r\n                \"server\": [\r\n                    \"app.spp.co\"\r\n                ]\r\n            },\r\n            \"description\": \"Service Provider Pro is a client management \\u0026 billing software for productized service agencies.\",\r\n            \"website\": \"https://spp.co\"\r\n        },\r\n        \"ServiceNow\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"description\": \"ServiceNow is a cloud computing platform to help companies manage digital workflows for enterprise operations.\",\r\n            \"website\": \"https://www.servicenow.com\"\r\n        },\r\n        \"Setmore\": {\r\n            \"cats\": [\r\n                5,\r\n                72\r\n            ],\r\n            \"js\": [\r\n                \"setmorepopup\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/setmore-appointments/script/\",\r\n                \"my\\\\.setmore\\\\.\\\\w+/\"\r\n            ],\r\n            \"description\": \"Setmore is a cloud-based appointment scheduling solution.\",\r\n            \"website\": \"https://www.setmore.com\"\r\n        },\r\n        \"SevenRooms\": {\r\n            \"cats\": [\r\n                5,\r\n                72\r\n            ],\r\n            \"js\": [\r\n                \"sevenroomswidget\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"sevenrooms\\\\.\\\\w+/widget/embed\\\\.js\"\r\n            ],\r\n            \"description\": \"SevenRooms is an fully-integrated reservation, seating and restaurant management system.\",\r\n            \"website\": \"https://sevenrooms.com\"\r\n        },\r\n        \"Sezzle\": {\r\n            \"cats\": [\r\n                41,\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"awesomesezzle\",\r\n                \"rendersezzleiframe\",\r\n                \"sezzle_footer_images\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"widget\\\\.sezzle\\\\.(?:in|com)\"\r\n            ],\r\n            \"meta\": {\r\n                \"sezzle_cid\": []\r\n            },\r\n            \"description\": \"Sezzle offers a buy-now-pay-later solution.\",\r\n            \"website\": \"https://sezzle.com/\"\r\n        },\r\n        \"Shaka Player\": {\r\n            \"cats\": [\r\n                14\r\n            ],\r\n            \"js\": [\r\n                \"shaka.player.version\"\r\n            ],\r\n            \"description\": \"Shaka Player is an open-source JavaScript library for adaptive media.\",\r\n            \"website\": \"https://github.com/shaka-project/shaka-player\"\r\n        },\r\n        \"Shanon\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.shanon-services\\\\.com\"\r\n            ],\r\n            \"description\": \"Shanon provides marketing automation software.\",\r\n            \"website\": \"https://www.shanon.co.jp\"\r\n        },\r\n        \"Shapecss\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"js\": [\r\n                \"shapecss\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]* href=\\\"[^\\\"]*shapecss(?:\\\\.min)?\\\\.css\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/([\\\\d.]+)/shapecss(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\",\r\n                \"shapecss.*\\\\.js\",\r\n                \"shapecss[-.]([\\\\d.]*\\\\d)[^/]*\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"website\": \"https://shapecss.com\"\r\n        },\r\n        \"ShareThis\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"__sharethis__docready\",\r\n                \"sharethis\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.sharethis\\\\.com/\"\r\n            ],\r\n            \"description\": \"ShareThis provides free engagement and growth tools (e.g., share buttons, follow buttons, and reaction buttons) for site owners.\",\r\n            \"website\": \"https://sharethis.com\"\r\n        },\r\n        \"Shareaholic\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"shareaholic\"\r\n            ],\r\n            \"description\": \"Shareaholic is a all-in-one content amplification and monetisation platform.\",\r\n            \"website\": \"https://www.shareaholic.com/\"\r\n        },\r\n        \"Sharethrough\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.sharethrough\\\\.com/\"\r\n            ],\r\n            \"description\": \"Sharethrough is a software company that powers in-feed advertising for brands and publishers.\",\r\n            \"website\": \"https://www.sharethrough.com\"\r\n        },\r\n        \"Sharetribe\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.sharetribe\\\\.com/\"\r\n            ],\r\n            \"description\": \"Sharetribe is cloud-based platform for small to medium businesses, which helps businesses to create and manage custom online marketplaces.\",\r\n            \"website\": \"https://www.sharetribe.com\"\r\n        },\r\n        \"SharpSpring\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"sharpspring_tracking_installed\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.marketingautomation\\\\.services.+(?:ver=)([\\\\d.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"SharpSpring is a cloud-based marketing tool that offers customer relationship management, marketing automation, mobile and social marketing, sales team automation, customer service and more, all within one solution.\",\r\n            \"website\": \"https://sharpspring.com\"\r\n        },\r\n        \"SharpSpring Ads\": {\r\n            \"cats\": [\r\n                77\r\n            ],\r\n            \"js\": [\r\n                \"_pa\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.perfectaudience\\\\.com\"\r\n            ],\r\n            \"description\": \"SharpSpring Ads is an all-in-one retargeting platform.\",\r\n            \"website\": \"https://sharpspring.com/ads\"\r\n        },\r\n        \"SheerID\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"sheerid\",\r\n                \"sheerid\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.sheerid\\\\.com\",\r\n                \"content-security-policy-report-only\": \"\\\\.sheerid\\\\.com\"\r\n            },\r\n            \"scripts\": [\r\n                \"\\\"sheeridendpoint\\\":\"\r\n            ],\r\n            \"description\": \"SheerID is a highly specialised solution offering online verification support for retailers, marketers and service providers.\",\r\n            \"website\": \"https://www.sheerid.com/\"\r\n        },\r\n        \"Shelf\": {\r\n            \"cats\": [\r\n                33\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"dart:io with shelf\",\r\n                \"x-powered-by\": \"dart with package:shelf\"\r\n            },\r\n            \"implies\": [\r\n                \"Dart\"\r\n            ],\r\n            \"description\": \"Shelf is a server framework for Dart.\",\r\n            \"website\": \"https://pub.dev/packages/shelf\"\r\n        },\r\n        \"ShellInABox\": {\r\n            \"cats\": [\r\n                46\r\n            ],\r\n            \"js\": [\r\n                \"shellinabox\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003ctitle\\u003eshell in a box\\u003c/title\\u003e\",\r\n                \"must be enabled for shellinabox\\u003c/noscript\\u003e\"\r\n            ],\r\n            \"description\": \"Shell In A Box implements a web server that can export arbitrary command line tools to a web based terminal emulator.\",\r\n            \"website\": \"https://shellinabox.com\"\r\n        },\r\n        \"Shift4Shop\": {\r\n            \"cats\": [\r\n                1,\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"3dvisit\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"_3d_cart.subtotal\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"3dcart\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"(?:twlh(?:track)?\\\\.asp|3d_upsell\\\\.js)\"\r\n            ],\r\n            \"description\": \"Shift4Shop, formerly known as 3Dcart, is an ecommerce software provider for online businesses.\",\r\n            \"website\": \"https://www.shift4shop.com\"\r\n        },\r\n        \"Shiny\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"js\": [\r\n                \"shiny.addcustommessagehandler\"\r\n            ],\r\n            \"website\": \"https://shiny.rstudio.com\"\r\n        },\r\n        \"ShinyStat\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"sssdk\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cimg[^\\u003e]*\\\\s+src=['\\\"]?https?://www\\\\.shinystat\\\\.com/cgi-bin/shinystat\\\\.cgi\\\\?[^'\\\"\\\\s\\u003e]*['\\\"\\\\s/\\u003e]\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^https?://codice(?:business|ssl|pro|isp)?\\\\.shinystat\\\\.com/cgi-bin/getcod\\\\.cgi\"\r\n            ],\r\n            \"website\": \"https://shinystat.com\"\r\n        },\r\n        \"ShipStation\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"ShipStation is a web-based shipping software designed to help ecommerce businesses streamline their shipping processes. It allows businesses to import, manage, and ship their orders from multiple sales channels, including marketplaces, shopping carts, and ecommerce platforms.\",\r\n            \"website\": \"https://www.shipstation.com\"\r\n        },\r\n        \"ShipTection\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"app\\\\.shiptection\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"ShipTection is the easiest way to offer shipping protection on your Shopify site.\",\r\n            \"website\": \"https://wamapps.io/pages/shiptection-protection\"\r\n        },\r\n        \"ShippyPro\": {\r\n            \"cats\": [\r\n                102\r\n            ],\r\n            \"js\": [\r\n                \"shippyproreturnform\"\r\n            ],\r\n            \"description\": \"ShippyPro is the complete shipping software for ecommerce that helps worldwide merchants to ship, track, and manage returns for their orders.\",\r\n            \"website\": \"https://www.shippypro.com\"\r\n        },\r\n        \"Shoefitr.io\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"description\": \"Shoefitr.io is data-based shoe size advice service where we measure the length, width, ball, and instep.\",\r\n            \"website\": \"https://www.shoefitr.io\"\r\n        },\r\n        \"Shogun Frontend\": {\r\n            \"cats\": [\r\n                108\r\n            ],\r\n            \"description\": \"Shogun Frontend is an all-in-one ecommerce frontend platform. Shogun Frontend pairs with leading backends: Shopify, BigCommerce, Magento (Adobe Commerce), and more.\",\r\n            \"website\": \"https://getshogun.com/frontend\"\r\n        },\r\n        \"Shogun Landing Page Builder\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.getshogun\\\\.com/.+\\\\.myshopify\\\\.com\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shogun Page Builder\"\r\n            ],\r\n            \"description\": \"Shogun Landing Page Builder is a drag and drop Shopify page builder for creating high-converting store pages.\",\r\n            \"website\": \"https://apps.shopify.com/shogun\"\r\n        },\r\n        \"Shogun Page Builder\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"shogunanalytics\"\r\n            ],\r\n            \"description\": \"Shogun is a page builder commonly used with headless implementations.\",\r\n            \"website\": \"https://getshogun.com/page-builder\"\r\n        },\r\n        \"Shop Pay\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"shopifypay.apihost\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.shopify\\\\.com/shopifycloud/shopify_pay/\"\r\n            ],\r\n            \"description\": \"Shop Pay is an accelerated checkout that lets customers save their email address, credit card, and shipping and billing information so they can complete their transaction faster the next time they are directed to the Shopify checkout.\",\r\n            \"website\": \"https://shop.app\"\r\n        },\r\n        \"Shop Pay Installments\": {\r\n            \"cats\": [\r\n                91\r\n            ],\r\n            \"implies\": [\r\n                \"Affirm\",\r\n                \"Shop Pay\"\r\n            ],\r\n            \"description\": \"Shop Pay Installments allows customers to pay for orders between 50 USD and 3,000 USD in 4 interest-free installments.\",\r\n            \"website\": \"https://shoppay.affirm.com\"\r\n        },\r\n        \"ShopBase\": {\r\n            \"cats\": [\r\n                6,\r\n                106\r\n            ],\r\n            \"js\": [\r\n                \"sbsdk.checkout.setenableabtestcustomer\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"(?:accounts|templates)\\\\.shopbase\\\\.com\"\r\n            },\r\n            \"description\": \" ShopBase is a cross-border ecommerce platform for all Dropshipping/Print-on-Demand novices and experienced merchants.\",\r\n            \"website\": \"https://www.shopbase.com\"\r\n        },\r\n        \"ShopGold\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"egold\": \"^\\\\w+$\",\r\n                \"popup_shopgold\": \"\",\r\n                \"popup_shopgold_time\": \"\"\r\n            },\r\n            \"description\": \"ShopGold is an all-in-one payment processing and ecommerce solution.\",\r\n            \"website\": \"https://www.shopgold.pl\"\r\n        },\r\n        \"ShopPad Infinite Options\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"shoppad.apps.infiniteoptions\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"ShopPad Infinite Options allows you to create as many custom option fields for your product pages as you need.\",\r\n            \"website\": \"https://apps.shopify.com/custom-options\"\r\n        },\r\n        \"ShopWired\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.amazonaws\\\\.com/shopwired-theme-assets/\"\r\n            ],\r\n            \"description\": \"ShopWired is a UK based, fully hosted ecommerce platform that is focused on the UK market.\",\r\n            \"website\": \"https://www.shopwired.co.uk\"\r\n        },\r\n        \"Shopaholic\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"shopaholic_cart_id\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"shopaholiccart\"\r\n            ],\r\n            \"description\": \"Shopaholic is an open-source ecosystem of plugins and themes for rapid ecommerce website development that allows building projects from small to large online shops.\",\r\n            \"website\": \"https://shopaholic.one\"\r\n        },\r\n        \"Shopapps\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"istockurl\",\r\n                \"iwishurl\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.myshopapps\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Shopapps is a trusted Shopify Expert providing services through Shopify Apps.\",\r\n            \"website\": \"https://www.shopapps.in\"\r\n        },\r\n        \"Shopatron\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"shpturl\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cbody class=\\\"shopatron\",\r\n                \"\\u003cimg[^\\u003e]+mediacdn\\\\.shopatron\\\\.com\\\\;confidence:50\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"mediacdn\\\\.shopatron\\\\.com\"\r\n            ],\r\n            \"meta\": {\r\n                \"keywords\": [\r\n                    \"shopatron\"\r\n                ]\r\n            },\r\n            \"website\": \"https://ecommerce.shopatron.com\"\r\n        },\r\n        \"Shopcada\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"shopcada\"\r\n            ],\r\n            \"website\": \"https://shopcada.com\"\r\n        },\r\n        \"Shoper\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"shoper\"\r\n            ],\r\n            \"website\": \"https://www.shoper.pl\"\r\n        },\r\n        \"Shopery\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"headers\": {\r\n                \"x-shopery\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"Elcodi\",\r\n                \"PHP\",\r\n                \"Symfony\"\r\n            ],\r\n            \"website\": \"https://shopery.com\"\r\n        },\r\n        \"Shopfa\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"shopfa\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^shopfa ([\\\\d.]+)$\\\\;version:\\\\1\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^shopfa ([\\\\d.]+)$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"website\": \"https://shopfa.com\"\r\n        },\r\n        \"ShopiMind\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"_spmq.id_cart\",\r\n                \"_spmq.spm_ident\"\r\n            ],\r\n            \"description\": \"ShopiMind is a multi-channel marketing automation solution for all ecommerce activities.\",\r\n            \"website\": \"https://www.shopimind.com\"\r\n        },\r\n        \"Shopify\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"_shopify_s\": \"\",\r\n                \"_shopify_y\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"shopify\",\r\n                \"shopify_api_base_url\",\r\n                \"shopifyapi\",\r\n                \"shopifycustomer\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-shopid\": \"\\\\;confidence:50\",\r\n                \"x-shopify-stage\": \"\"\r\n            },\r\n            \"scripts\": [\r\n                \"shopifytag\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.shopify\\\\.com\",\r\n                \"sdks\\\\.shopifycdn\\\\.com\"\r\n            ],\r\n            \"meta\": {\r\n                \"shopify-checkout-api-token\": [],\r\n                \"shopify-digital-wallet\": []\r\n            },\r\n            \"description\": \"Shopify is a subscription-based software that allows anyone to set up an online store and sell their products. Shopify store owners can also sell in physical locations using Shopify POS, a point-of-sale app and accompanying hardware.\",\r\n            \"website\": \"https://shopify.com\"\r\n        },\r\n        \"Shopify Buy Button\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"shopifybuy\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"sdk\\\\. shopifycdn\\\\.com/buy-button/latest/\"\r\n            ],\r\n            \"description\": \"Shopify Buy Button is an app from Shopify which allows merchant to embed buy functionality for any product or collection into another website or blog.\",\r\n            \"website\": \"https://apps.shopify.com/buy-button\"\r\n        },\r\n        \"Shopify Chat\": {\r\n            \"cats\": [\r\n                52,\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.shopify\\\\.com/shopifycloud/shopify_chat/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Shopify Chat is Shopify's native live chat function that allows you to have real-time conversations with customers visiting your Shopify store.\",\r\n            \"website\": \"https://www.shopify.com/inbox\"\r\n        },\r\n        \"Shopify Consent Management\": {\r\n            \"cats\": [\r\n                67,\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cookie_consent_shopify\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Shopify Consent Management let's you create a tracking consent banner for EU customers.\",\r\n            \"website\": \"https://apps.shopify.com/customer-privacy-banner\"\r\n        },\r\n        \"Shopify Geolocation App\": {\r\n            \"cats\": [\r\n                100,\r\n                79\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"geolocation-recommendations\\\\.shopifycloud\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Shopify Geolocation App makes language and country recommendations to your customers based on their geographic location and browser or device language.\",\r\n            \"website\": \"https://apps.shopify.com/geolocation\"\r\n        },\r\n        \"Shopify Product Reviews\": {\r\n            \"cats\": [\r\n                90,\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"spr\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"productreviews\\\\.shopifycdn\\\\.com\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Shopify Product reviews allows you to add a customer review feature to your products.\",\r\n            \"website\": \"https://apps.shopify.com/product-reviews\"\r\n        },\r\n        \"Shopistry\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"description\": \"Shopistry is a data-driven, headless customer management system.\",\r\n            \"website\": \"https://www.shopistry.com/\"\r\n        },\r\n        \"Shoplazza\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"shoplazza_source\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"shoplazza\",\r\n                \"shoplazza\"\r\n            ],\r\n            \"description\": \"Shoplazza is a SaaS ecommerce platform.\",\r\n            \"website\": \"https://www.shoplazza.com\"\r\n        },\r\n        \"Shopline\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"shopline\",\r\n                \"shoplytics\"\r\n            ],\r\n            \"description\": \"Shopline provides solutions for merchants to set up an online store.\",\r\n            \"website\": \"https://shoplineapp.com/\"\r\n        },\r\n        \"Shoplo\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"shoploajax\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.shoplo\\\\.\\\\w+/\"\r\n            ],\r\n            \"description\": \"Shoplo is an all-in-one ecommerce platform.\",\r\n            \"website\": \"https://www.shoplo.com\"\r\n        },\r\n        \"Shopmatic\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"shopmatic-facebook-pixels-id\": []\r\n            },\r\n            \"description\": \"Shopmatic is an ecommerce website builder.\",\r\n            \"website\": \"https://goshopmatic.com\"\r\n        },\r\n        \"Shoporama\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"shoporama\"\r\n                ]\r\n            },\r\n            \"website\": \"https://www.shoporama.dk\"\r\n        },\r\n        \"Shoppiko\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"description\": \"Shoppiko is an ecommerce platform solution in India, which provides ecommerce website or ecommerce mobile application.\",\r\n            \"website\": \"https://shoppiko.com\"\r\n        },\r\n        \"ShoppingFeeder\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"sfdrorderdata\",\r\n                \"sfdruniqid\"\r\n            ],\r\n            \"description\": \"ShoppingFeeder is a feed management solution for online retailers.\",\r\n            \"website\": \"https://sfdr.co\"\r\n        },\r\n        \"ShoppingGives\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"sgobservables.getcharities\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.shoppinggives\\\\.com/\"\r\n            ],\r\n            \"description\": \"ShoppingGives is a B2B social ecommerce platform that allows companies of all sizes to make charitable donations through their customers' purchases.\",\r\n            \"website\": \"https://shoppinggives.com\"\r\n        },\r\n        \"Shoppub\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"shoppub.store\"\r\n            ],\r\n            \"meta\": {\r\n                \"author\": [\r\n                    \"^shoppub$\"\r\n                ]\r\n            },\r\n            \"description\": \"Shoppub is an ecommerce platform that focuses on implementing advanced business rules.\",\r\n            \"website\": \"https://www.shoppub.com.br\"\r\n        },\r\n        \"Shoppy\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"shoppy\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.shoppy\\\\.gg\"\r\n            ],\r\n            \"description\": \"Shoppy is an all-in-one payment processing and ecommerce solution.\",\r\n            \"website\": \"https://shoppy.gg\"\r\n        },\r\n        \"Shoprenter\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"shoprenter.customer\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.cdn\\\\.shoprenter\\\\.hu/\"\r\n            ],\r\n            \"description\": \"Shoprenter offers a platform for building and running an ecommerce store.\",\r\n            \"website\": \"https://www.shoprenter.hu\"\r\n        },\r\n        \"Shoprunner\": {\r\n            \"cats\": [\r\n                107,\r\n                102\r\n            ],\r\n            \"js\": [\r\n                \"_shoprunner_com\",\r\n                \"_shoprunner_com.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/shoprunner/shoprunner_init\\\\.js\"\r\n            ],\r\n            \"description\": \"ShopRunner is a service offering consumers free two-day shipping and returns on online orders placed with certain retailers.\",\r\n            \"website\": \"https://www.shoprunner.com\"\r\n        },\r\n        \"Shoptet\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"shoptet\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink [^\\u003e]*href=\\\"https?://cdn\\\\.myshoptet\\\\.com/\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^https?://cdn\\\\.myshoptet\\\\.com/\"\r\n            ],\r\n            \"meta\": {\r\n                \"web_author\": [\r\n                    \"^shoptet\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Shoptet is an ecommerce solutions from store builder, inventory management of online payments.\",\r\n            \"website\": \"https://www.shoptet.cz\"\r\n        },\r\n        \"Shopware\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"shopstudiogoogletagmanagercloudgtagcallback\"\r\n            ],\r\n            \"headers\": {\r\n                \"sw-context-token\": \"^[\\\\w]{32}$\\\\;version:6\",\r\n                \"sw-invalidation-states\": \"\\\\;version:6\",\r\n                \"sw-language-id\": \"^[a-fa-f0-9]{32}$\\\\;version:6\",\r\n                \"sw-version-id\": \"\\\\;version:6\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003ctitle\\u003eshopware ([\\\\d\\\\.]+) [^\\u003c]+\\\\;version:\\\\1\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:(shopware)|/web/cache/[0-9]{10}_.+)\\\\.js\\\\;version:\\\\1?4:5\",\r\n                \"/engine/shopware/\",\r\n                \"/jquery\\\\.shopware\\\\.min\\\\.js\"\r\n            ],\r\n            \"meta\": {\r\n                \"application-name\": [\r\n                    \"shopware\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\",\r\n                \"Symfony\",\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"Shopware is an enterprise-level ecommerce platform.\",\r\n            \"website\": \"https://www.shopware.com\",\r\n            \"cpe\": \"cpe:2.3:a:shopware:shopware:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"ShortPixel Image Optimizer\": {\r\n            \"cats\": [\r\n                87,\r\n                92\r\n            ],\r\n            \"js\": [\r\n                \"sppictest\"\r\n            ],\r\n            \"description\": \"ShortPixel Image Optimizer is a lightweight WordPress plugin that can compress all of your site's images and PDF documents.\",\r\n            \"website\": \"https://shortpixel.com\"\r\n        },\r\n        \"Shortcodes Ultimate\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/shortcodes-ultimate/.+index\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Shortcodes Ultimate is a comprehensive collection of visual components for WordPress.\",\r\n            \"website\": \"https://getshortcodes.com\"\r\n        },\r\n        \"Shortly\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//shortly\\\\.shop/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Shortly help create short URLs for influencer-marketing, social media posts \\u0026 email-marketing campaigns with your own store domain.\",\r\n            \"website\": \"https://apps.shopify.com/shortly\"\r\n        },\r\n        \"ShoutOut\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.shoutout\\\\.global/\"\r\n            ],\r\n            \"description\": \"ShoutOut is a multi-level marketing SaaS solution that allows tracking of affiliates.\",\r\n            \"website\": \"https://www.shoutout.global\"\r\n        },\r\n        \"Showit\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"showit.default.siteid\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"lib\\\\.showit\\\\.co/engine/([\\\\d\\\\.]+)/\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Showit is a drag-and-drop, no-code website builder for photographers and creative professionals.\",\r\n            \"website\": \"https://showit.co\"\r\n        },\r\n        \"Shuttle\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"shuttle.frontapp\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"shuttle(?:-assets-new|-storage)\\\\.s3\\\\.amazonaws\\\\.com\"\r\n            ],\r\n            \"implies\": [\r\n                \"Amazon Web Services\",\r\n                \"Laravel\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Shuttle is a website development platform.\",\r\n            \"website\": \"https://www.devisto.com\"\r\n        },\r\n        \"Sift\": {\r\n            \"cats\": [\r\n                10,\r\n                16\r\n            ],\r\n            \"js\": [\r\n                \"__siftflashcb\",\r\n                \"_sift\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.sift(?:science)?\\\\.com/s\\\\.js\"\r\n            ],\r\n            \"description\": \"Sift is a CA-based fraud prevention company.\",\r\n            \"website\": \"https://sift.com/\"\r\n        },\r\n        \"Signal\": {\r\n            \"cats\": [\r\n                32,\r\n                42\r\n            ],\r\n            \"js\": [\r\n                \"signaldata\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//s\\\\.btstatic\\\\.com/tag\\\\.js\",\r\n                \"//s\\\\.thebrighttag\\\\.com/iframe\\\\?\"\r\n            ],\r\n            \"description\": \"Signal is a cross-platform encrypted messaging service.\",\r\n            \"website\": \"https://www.signal.co/\"\r\n        },\r\n        \"Signifyd\": {\r\n            \"cats\": [\r\n                10,\r\n                16\r\n            ],\r\n            \"js\": [\r\n                \"signifyd_global\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.signifyd\\\\.com\"\r\n            ],\r\n            \"description\": \"Signifyd is a provider of an enterprise-grade fraud technology solution for ecommerce stores.\",\r\n            \"website\": \"https://www.signifyd.com\"\r\n        },\r\n        \"Silverstripe\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"html\": [\r\n                \"powered by \\u003ca href=\\\"[^\\u003e]+silverstripe\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^silverstripe\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Silverstripe CMS is a free and open source Content Management System and Framework for creating and maintaining websites and web applications.\",\r\n            \"website\": \"https://www.silverstripe.org/\"\r\n        },\r\n        \"Simbel\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"headers\": {\r\n                \"powered\": \"simbel\"\r\n            },\r\n            \"website\": \"https://simbel.com.ar/\"\r\n        },\r\n        \"Simon\": {\r\n            \"cats\": [\r\n                97\r\n            ],\r\n            \"js\": [\r\n                \"simondata\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"static\\\\.simonsignal\\\\.com\"\r\n            ],\r\n            \"description\": \"Simon is a customer data platform (CDP) that helps you collect, clean, and control your customer data.\",\r\n            \"website\": \"https://www.simondata.com/\"\r\n        },\r\n        \"Simpl\": {\r\n            \"cats\": [\r\n                41,\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"simplsettings\"\r\n            ],\r\n            \"description\": \"Simpl is a fintech company that offers a cardless payment network with multiple solutions for merchants and consumers.\",\r\n            \"website\": \"https://getsimpl.com\"\r\n        },\r\n        \"Simple Analytics\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"sa_event\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"simpleanalytics\\\\.com\",\r\n                \"simpleanalytics\\\\.io\",\r\n                \"simpleanalyticscdn\\\\.com\"\r\n            ],\r\n            \"description\": \"Simple Analytics is a privacy-friendly Google Analytics alternative.\",\r\n            \"website\": \"https://simpleanalytics.com\"\r\n        },\r\n        \"Simple Machines Forum\": {\r\n            \"cats\": [\r\n                2\r\n            ],\r\n            \"js\": [\r\n                \"smf_avatarresize\",\r\n                \"smf_default_theme_url\",\r\n                \"smf_theme_url\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Simple Machines Forum is a free open-source software, used for community forums and is written in PHP.\",\r\n            \"website\": \"https://www.simplemachines.org\",\r\n            \"cpe\": \"cpe:2.3:a:simplemachines:simple_machine_forum:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"SimpleHTTP\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"simplehttp(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"website\": \"https://example.com\"\r\n        },\r\n        \"SimpleSAMLphp\": {\r\n            \"cats\": [\r\n                69\r\n            ],\r\n            \"cookies\": {\r\n                \"simplesaml\": \"\",\r\n                \"simplesamlsessionid\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"SimpleSAMLphp is an open-source PHP authentication application that provides support for SAML 2.0 as a Service Provider (SP) or Identity Provider (IdP).\",\r\n            \"website\": \"https://simplesamlphp.org\"\r\n        },\r\n        \"Simplero\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"simplero\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.simplero\\\\.com/\"\r\n            ],\r\n            \"description\": \"Simplero is an all-in-one marketing software.\",\r\n            \"website\": \"https://simplero.com\"\r\n        },\r\n        \"Simplero Websites\": {\r\n            \"cats\": [\r\n                21\r\n            ],\r\n            \"cookies\": {\r\n                \"_simplero_session_id\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"Cart Functionality\"\r\n            ],\r\n            \"description\": \"Simplero Websites are a learning management system which suited for courses, coaching programs, memberships and digital products by Simplero.\",\r\n            \"website\": \"https://simplero.com/websites\"\r\n        },\r\n        \"Simpli.fi\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.simpli\\\\.fi\"\r\n            ],\r\n            \"description\": \"Simpli.fi is a programmatic advertising and agency management software.\",\r\n            \"website\": \"https://simpli.fi/\"\r\n        },\r\n        \"Simplio Upsells\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//upsell\\\\.simplio\\\\.app/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Simplio Upsells сreate more revenue with promotions and post purchase upsells.\",\r\n            \"website\": \"https://apps.shopify.com/simple-promotions-and-upsells\"\r\n        },\r\n        \"Simplo7\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.simplo7\\\\.\\\\w+/\"\r\n            ],\r\n            \"description\": \"Simplo7 is an all-in-one ecommerce product.\",\r\n            \"website\": \"https://www.simplo7.com.br\"\r\n        },\r\n        \"Simplébo\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"x-servedby\": \"simplebo\"\r\n            },\r\n            \"website\": \"https://www.simplebo.fr\"\r\n        },\r\n        \"Simvoly\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"simvoly\"\r\n            ],\r\n            \"description\": \"Simvoly is a drag-and-drop website builder for small and medium-sized businesses, agencies, and freelancers.\",\r\n            \"website\": \"https://simvoly.com\"\r\n        },\r\n        \"Sinatra\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"sinatra_vars.nonce\",\r\n                \"sinatraslideup\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/sinatra/.+sinatra\\\\.min\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Sinatra is a lightweight and highly customizable multi-purpose WordPress theme.\",\r\n            \"website\": \"https://try.sinatrawp.com\"\r\n        },\r\n        \"Sirclo\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"sirclo\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"template\\\\.sirclocdn\\\\.com/\"\r\n            ],\r\n            \"description\": \"Sirclo offers online business solutions.\",\r\n            \"website\": \"https://sirclo.com/\"\r\n        },\r\n        \"Sirdata\": {\r\n            \"cats\": [\r\n                97,\r\n                67,\r\n                86\r\n            ],\r\n            \"js\": [\r\n                \"sddan.cmp\",\r\n                \"sddan.cmploaded\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:choices|cache)\\\\.consentframework\\\\.com/\",\r\n                \"js\\\\.sddan\\\\.com/\"\r\n            ],\r\n            \"description\": \"Sirdata is a self-service, third party data-collecting platform that specialises in the collection of behavioural data, predictive targeting and selling of audience segments.\",\r\n            \"website\": \"https://www.sirdata.com\"\r\n        },\r\n        \"Sirge\": {\r\n            \"cats\": [\r\n                10,\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.app\\\\.sirge\\\\.com/\"\r\n            ],\r\n            \"description\": \"Sirge is an analytics platform that tracks website visits, customer behavior, and provides insights to optimise return on ad spend (ROAS) and conversions.\",\r\n            \"website\": \"https://www.sirge.com\"\r\n        },\r\n        \"Sirvoy\": {\r\n            \"cats\": [\r\n                72\r\n            ],\r\n            \"js\": [\r\n                \"sirvoybookingwidget\"\r\n            ],\r\n            \"description\": \"Sirvoy is a cloud-based hotel management software that streamlines various hotel operations, including reservation management, channel management, online booking, and property management.\",\r\n            \"website\": \"https://sirvoy.com\"\r\n        },\r\n        \"Site Kit\": {\r\n            \"cats\": [\r\n                10,\r\n                87\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^site kit by google ?([\\\\d.]+)?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"Site Kit is a one-stop solution for WordPress users to use everything Google has to offer to make them successful on the web.\",\r\n            \"website\": \"https://sitekit.withgoogle.com/\"\r\n        },\r\n        \"Site Meter\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"sitemeter\\\\.com/js/counter\\\\.js\\\\?site=\"\r\n            ],\r\n            \"website\": \"https://www.sitemeter.com\"\r\n        },\r\n        \"Site Search 360\": {\r\n            \"cats\": [\r\n                29\r\n            ],\r\n            \"js\": [\r\n                \"ss360config\"\r\n            ],\r\n            \"description\": \"Site Search 360 is a site search as a service solution.\",\r\n            \"website\": \"https://www.sitesearch360.com/\"\r\n        },\r\n        \"Site24x7\": {\r\n            \"cats\": [\r\n                78\r\n            ],\r\n            \"js\": [\r\n                \"s247rum\",\r\n                \"s247rumqueueimpl\",\r\n                \"site24x7rum\",\r\n                \"site24x7rumerror\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.site24x7rum\\\\.com\"\r\n            ],\r\n            \"description\": \"Site24x7 is a cloud-based website and server monitoring platform.\",\r\n            \"website\": \"https://www.site24x7.com\"\r\n        },\r\n        \"SiteEdit\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"siteedit\"\r\n                ]\r\n            },\r\n            \"website\": \"https://www.siteedit.ru\"\r\n        },\r\n        \"SiteGround\": {\r\n            \"cats\": [\r\n                62,\r\n                88\r\n            ],\r\n            \"headers\": {\r\n                \"host-header\": \"192fc2e7e50945beb8231a492d6a8024|b7440e60b07ee7b8044761568fab26e8|624d5be7be38418a3e2a818cc8b7029b|6b7412fb82ca5edfd0917e3957f05d89\"\r\n            },\r\n            \"description\": \"SiteGround is a web hosting service.\",\r\n            \"website\": \"https://www.siteground.com\"\r\n        },\r\n        \"SiteGuard WP Plugin\": {\r\n            \"cats\": [\r\n                87,\r\n                16\r\n            ],\r\n            \"description\": \"SiteGurad WP Plugin is the plugin specialised for the protection against the attack to the management page and login.\",\r\n            \"website\": \"https://www.jp-secure.com/siteguard_wp_plugin_en\"\r\n        },\r\n        \"SiteJabber\": {\r\n            \"cats\": [\r\n                90\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"biz\\\\.sitejabber\\\\.com\"\r\n            ],\r\n            \"description\": \"Sitejabber is the leading destination for customer ratings and reviews of businesses. Consumers find ratings and read reviews to ensure they buy from the best companies.\",\r\n            \"website\": \"https://www.sitejabber.com/\"\r\n        },\r\n        \"SiteManager\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"sm_cookiesmodal\",\r\n                \"sm_modal\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"s\\\\d+\\\\.sitemn\\\\.gr/\"\r\n            ],\r\n            \"description\": \"SiteManager is a collaborative no-code/low-code web design platform for agencies and marketing teams.\",\r\n            \"website\": \"https://www.sitemanager.io\"\r\n        },\r\n        \"SiteMinder\": {\r\n            \"cats\": [\r\n                5,\r\n                72\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"widget\\\\.siteminder\\\\.com\"\r\n            ],\r\n            \"description\": \"SiteMinder is a appointment booking solution designed for hotels.\",\r\n            \"website\": \"https://www.siteminder.com\"\r\n        },\r\n        \"SiteOrigin Page Builder\": {\r\n            \"cats\": [\r\n                87,\r\n                51\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/siteorigin-panels/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Page Builder by SiteOrigin makes it easy to build responsive grid-based page content that adapts to mobile devices with pixel perfect accuracy.\",\r\n            \"website\": \"https://siteorigin.com/page-builder\"\r\n        },\r\n        \"SiteOrigin Vantage\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/vantage/\"\r\n            ],\r\n            \"description\": \"SiteOrigin Vantage is a response, multi-purpose theme carefully developed with seamless integration into an array of amazing third-party plugins.\",\r\n            \"website\": \"https://siteorigin.com/theme/vantage\"\r\n        },\r\n        \"SiteOrigin Widgets Bundle\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/so-widgets-bundle/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"SiteOrigin Widgets Bundle is a WordPress plugin that gives you all the elements you need to build modern, responsive, and engaging website pages.\",\r\n            \"website\": \"https://siteorigin.com/widgets-bundle\"\r\n        },\r\n        \"SitePad\": {\r\n            \"cats\": [\r\n                57\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^sitepad(?:\\\\s([\\\\d\\\\.]+))?$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"SitePad is a WYSIWYG drag and drop website building and maintenance program.\",\r\n            \"website\": \"https://sitepad.com\"\r\n        },\r\n        \"SiteSpect\": {\r\n            \"cats\": [\r\n                74\r\n            ],\r\n            \"js\": [\r\n                \"ss_dom_var\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/__ssobj/core\\\\.js\"\r\n            ],\r\n            \"description\": \"SiteSpect is the A/B testing and optimisation solution.\",\r\n            \"website\": \"https://www.sitespect.com\"\r\n        },\r\n        \"SiteVibes\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"sitevibesmanager\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"app\\\\.sitevibes\\\\.com/\"\r\n            ],\r\n            \"description\": \"SiteVibes is a cloud-based user generated content and visual marketing platform.\",\r\n            \"website\": \"https://sitevibes.com\"\r\n        },\r\n        \"SiteW\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"description\": \"SiteW is a French-based company that offers a website building service.\",\r\n            \"website\": \"https://www.en.sitew.com\"\r\n        },\r\n        \"Sitecore\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"sc_analytics_global_cookie\": \"\",\r\n                \"sc_expview\": \"\",\r\n                \"sc_os_sessionid\": \"\",\r\n                \"sxa_site\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"sitecoreutilities\"\r\n            ],\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"description\": \"Sitecore provides web content management, and multichannel marketing automation software.\",\r\n            \"website\": \"https://www.sitecore.com/\",\r\n            \"cpe\": \"cpe:2.3:a:sitecore:*:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Sitecore Engagement Cloud\": {\r\n            \"cats\": [\r\n                97\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/sitecore-engage-v\\\\.([\\\\d\\\\.]+)\\\\.min\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"Sitecore\"\r\n            ],\r\n            \"description\": \"Sitecore Engagement Cloud is a cloud-based customer experience management platform offering content management, personalisation, marketing automation, analytics, and omni-channel delivery for enhancing digital marketing efforts and improving customer experiences.\",\r\n            \"website\": \"https://www.sitecore.com/products/engagement-cloud\"\r\n        },\r\n        \"Sitecore Experience Edge\": {\r\n            \"cats\": [\r\n                23\r\n            ],\r\n            \"implies\": [\r\n                \"GraphQL\",\r\n                \"Sitecore Experience Platform\"\r\n            ],\r\n            \"description\": \"Sitecore Experience Edge is a product that optimises content delivery by utilising edge computing and caching technologies to enhance website performance and user experience.\",\r\n            \"website\": \"https://doc.sitecore.com/xp/en/developers/101/developer-tools/experience-edge-for-xm-apis.html\"\r\n        },\r\n        \"Sitecore Experience Platform\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"description\": \"Sitecore Experience Platform is a digital platform used by businesses to create, manage, and deliver personalised content and experiences to users across different channels.\",\r\n            \"website\": \"https://www.sitecore.com/products/sitecore-experience-platform\"\r\n        },\r\n        \"Siteglide\": {\r\n            \"cats\": [\r\n                1,\r\n                53\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"siteglide\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"PlatformOS\"\r\n            ],\r\n            \"description\": \"SiteGlide is a Digital Experience Platform (DEP) for ecommerce stores, membership sites and customer portals.\",\r\n            \"website\": \"https://www.siteglide.com\"\r\n        },\r\n        \"Siteimprove\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"_sz.analytics.heatmap\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:\\\\.|//)siteimprove(?:analytics)?\\\\.com/js/siteanalyze\"\r\n            ],\r\n            \"description\": \"Siteimprove is a digital analytics and content QA platform.\",\r\n            \"website\": \"https://www.siteimprove.com\"\r\n        },\r\n        \"Sitepark IES\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^sitepark\\\\sinformation\\\\senterprise\\\\sserver\\\\s-\\\\sies\\\\sgenerator\\\\sv([\\\\d\\\\.]+)$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Lucene\",\r\n                \"MySQL\"\r\n            ],\r\n            \"description\": \"Sitepark IES is a content management system written in PHP and paired with a MySQL database.\",\r\n            \"website\": \"https://www.sitepark.com/oeffentlicher-sektor/produkte/cms-technologie.php\",\r\n            \"cpe\": \"cpe:2.3:a:sitepark:information_enterprise_server:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Sitepark InfoSite\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^infosite\\\\s([\\\\d\\\\.]+)\\\\s-\\\\ssitepark\\\\sinformation\\\\senterprise\\\\sserver$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Sitepark IES\"\r\n            ],\r\n            \"description\": \"Sitepark InfoSite is a content management system and complete application of Sitepark IES which written in PHP and paired with a MySQL database.\",\r\n            \"website\": \"https://www.sitepark.com/mittelstand/content-management-system/index.php\"\r\n        },\r\n        \"Sitevision CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"sitevisionltm\": \"\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"sitevision/system-resource/(?:[\\\\w\\\\d]+)/envision/envision\\\\.js\\\\;confidence:50\",\r\n                \"sitevision/system-resource/(?:[\\\\w\\\\d]+)/js/appregistry\\\\.js\\\\;confidence:25\",\r\n                \"sitevision/system-resource/(?:[\\\\w\\\\d]+)/js/docready-min\\\\.js\\\\;confidence:25\",\r\n                \"sitevision/system-resource/(?:[\\\\w\\\\d]+)/webapps/webapp_sdk-min\\\\.js\\\\;confidence:50\"\r\n            ],\r\n            \"description\": \"Sitevision CMS is a platform for web publishing that consists of flexible and pre-made modules. Available as self-hosed software and Cloud SaaS.\",\r\n            \"website\": \"https://www.sitevision.se\"\r\n        },\r\n        \"Sivuviidakko\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"sivuviidakko\"\r\n                ]\r\n            },\r\n            \"website\": \"https://sivuviidakko.fi\"\r\n        },\r\n        \"Sizebay\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"sizebay\",\r\n                \"sizebayparams\"\r\n            ],\r\n            \"description\": \"Sizebay is a virtual fitting room that helps ecommerce and even brick-and-mortar stores provide their shoppers with a personalised shopping.\",\r\n            \"website\": \"https://sizebay.com\"\r\n        },\r\n        \"Sizmek\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"html\": [\r\n                \"(?:\\u003ca [^\\u003e]*href=\\\"[^/]*//[^/]*serving-sys\\\\.com/|\\u003cimg [^\\u003e]*src=\\\"[^/]*//[^/]*serving-sys\\\\.com/)\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"serving-sys\\\\.com/\"\r\n            ],\r\n            \"website\": \"https://sizmek.com\"\r\n        },\r\n        \"Skai\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"ktag_constants\"\r\n            ],\r\n            \"scripts\": [\r\n                \"\\\\.xg4ken\\\\.com\"\r\n            ],\r\n            \"description\": \"Skai (formerly Kenshoo) is a marketing activation solution for brands and agencies.\",\r\n            \"website\": \"https://skai.io\"\r\n        },\r\n        \"Skedify\": {\r\n            \"cats\": [\r\n                72\r\n            ],\r\n            \"js\": [\r\n                \"skedify.plugin.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"plugin\\\\.skedify\\\\.io\"\r\n            ],\r\n            \"description\": \"Skedify is an appointment booking solution created for enterprises.\",\r\n            \"website\": \"https://calendly.com/\"\r\n        },\r\n        \"Skilldo\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"cms-name\": \"^skilldo$\",\r\n                \"cms-version\": \"([\\\\d\\\\.]+)\\\\;version:\\\\1\\\\;confidence:0\"\r\n            },\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Skilldo is a content management system written in PHP and paired with a MySQL or MariaDB database.\",\r\n            \"website\": \"https://developers.sikido.vn/docs/cms/\"\r\n        },\r\n        \"Skilljar\": {\r\n            \"cats\": [\r\n                21\r\n            ],\r\n            \"js\": [\r\n                \"skilljar_dashboard_globals\",\r\n                \"skilljarcatalogpage\",\r\n                \"skilljarthemeversionmajor\",\r\n                \"skilljartranslate\"\r\n            ],\r\n            \"description\": \"Skilljar is a B2B customer training platform and learning management system.\",\r\n            \"website\": \"https://www.skilljar.com/\"\r\n        },\r\n        \"Skimlinks\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"js\": [\r\n                \"__skim_js_global__\",\r\n                \"addskimlinks\",\r\n                \"skimlinksapi\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.skimresources\\\\.com\"\r\n            ],\r\n            \"description\": \"Skimlinks is a content monetization platform for online publishers.\",\r\n            \"website\": \"https://skimlinks.com\"\r\n        },\r\n        \"Skio\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.skio\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Skio helps brands on Shopify sell subscriptions without ripping their hair out.\",\r\n            \"website\": \"https://skio.com\"\r\n        },\r\n        \"Skolengo\": {\r\n            \"cats\": [\r\n                1,\r\n                21\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"skolengo\"\r\n                ],\r\n                \"version\": [\r\n                    \"^([\\\\d\\\\.]+)$\\\\;version:\\\\1\\\\;confidence:0\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Apache Tomcat\",\r\n                \"Java\",\r\n                \"MariaDB\"\r\n            ],\r\n            \"description\": \"Skolengo is an Education Management Software developed by Kosmos Education.\",\r\n            \"website\": \"https://www.skolengo.com\"\r\n        },\r\n        \"Sky-Shop\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"l.continue_shopping\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"sky-shop\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Bootstrap\",\r\n                \"PHP\",\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"Sky-Shop.pl is a platform for dropshipping an online sales on Allegro, eBay and Amazon.\",\r\n            \"website\": \"https://sky-shop.pl\"\r\n        },\r\n        \"SkyVerge\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"sv_wc_payment_gateway_payment_form_param\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"sv-wc-payment-gateway-payment-form\\\\.js(?:\\\\?ver=([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"WooCommerce\"\r\n            ],\r\n            \"description\": \"SkyVerge  is a company which develop extension tools for WooCommerce stores.\",\r\n            \"website\": \"https://www.skyverge.com\"\r\n        },\r\n        \"Skyflow\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"js\": [\r\n                \"skyflow.elementtype.card_number\",\r\n                \"skyflow.validationruletype\"\r\n            ],\r\n            \"description\": \"Skyflow is a company that provides a secure data privacy platform and API.\",\r\n            \"website\": \"https://www.skyflow.com\"\r\n        },\r\n        \"Slate\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"slate-technolutions-net\\\\.cdn\\\\.technolutions\\\\.net/\"\r\n            ],\r\n            \"description\": \"Slate is a CRM system designed specifically for higher education institutions, which helps them to manage student interactions, track admissions, and analyze student data in a flexible and user-friendly way.\",\r\n            \"website\": \"https://technolutions.com\"\r\n        },\r\n        \"Sleeknote\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"sleeknote.sleeknotes\",\r\n                \"sleeknotemarketingconsent\",\r\n                \"sleeknotescripttag\",\r\n                \"sleeknotesitedata\"\r\n            ],\r\n            \"description\": \"Sleeknote is a cloud-based software that helps online businesses reach conversion goals through website popups.\",\r\n            \"website\": \"https://sleeknote.com\"\r\n        },\r\n        \"Sleekplan\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.sleekplan\\\\.com/\"\r\n            ],\r\n            \"description\": \"Sleekplan is a customer feedback and product management platform that enables businesses to collect, analyse, and act upon user feedback, prioritise feature requests, track bugs, and collaborate on product development.\",\r\n            \"website\": \"https://sleekplan.com\"\r\n        },\r\n        \"Slice\": {\r\n            \"cats\": [\r\n                93\r\n            ],\r\n            \"description\": \"Slice is an online food ordering platform for independent pizzerias.\",\r\n            \"website\": \"https://slicelife.com/owners\"\r\n        },\r\n        \"Slick\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink [^\\u003e]+(?:/([\\\\d.]+)/)?slick-theme\\\\.css\\\\;version:\\\\1\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:/([\\\\d.]+))?/slick(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"jQuery\"\r\n            ],\r\n            \"website\": \"https://kenwheeler.github.io/slick\"\r\n        },\r\n        \"SlickStack\": {\r\n            \"cats\": [\r\n                47,\r\n                9\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"slickstack\"\r\n            },\r\n            \"implies\": [\r\n                \"WordPress\"\r\n            ],\r\n            \"description\": \"SlickStack is a free LEMP stack automation script written in Bash designed to enhance and simplify WordPress provisioning, performance, and security.\",\r\n            \"website\": \"https://slickstack.io\"\r\n        },\r\n        \"Slider Captcha\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"js\": [\r\n                \"slidercaptcha\"\r\n            ],\r\n            \"implies\": [\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"Slider Captcha is a free service that helps protect websites from spam and abuse.\",\r\n            \"website\": \"https://github.com/ArgoZhang/SliderCaptcha\"\r\n        },\r\n        \"Slider Revolution\": {\r\n            \"cats\": [\r\n                5,\r\n                7\r\n            ],\r\n            \"js\": [\r\n                \"revapi1\",\r\n                \"revapi2\",\r\n                \"revapi3\",\r\n                \"revapi4\",\r\n                \"revapi5\",\r\n                \"revslider_showdoublejqueryerror\",\r\n                \"rs_modules.main.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/revslider/\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"powered\\\\sby\\\\sslider revolution\\\\s([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"Slider Revolution is a flexible and highly customisable slider.\",\r\n            \"website\": \"https://www.sliderrevolution.com\"\r\n        },\r\n        \"Slimbox\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink [^\\u003e]*href=\\\"[^/]*slimbox(?:-rtl)?\\\\.css\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"slimbox\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"MooTools\"\r\n            ],\r\n            \"website\": \"https://www.digitalia.be/software/slimbox\"\r\n        },\r\n        \"Slimbox 2\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink [^\\u003e]*href=\\\"[^/]*slimbox2(?:-rtl)?\\\\.css\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"slimbox2\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"jQuery\"\r\n            ],\r\n            \"website\": \"https://www.digitalia.be/software/slimbox2\"\r\n        },\r\n        \"Smart Ad Server\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"smartadserver\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.sascdn\\\\.com/\"\r\n            ],\r\n            \"description\": \"Smart Ad Server is an adserving and RTB platform.\",\r\n            \"website\": \"https://smartadserver.com\"\r\n        },\r\n        \"Smart Slider 3\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/smart-slider-3(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"Smart Slider 3 is a responsive, SEO optimised WordPress plugin.\",\r\n            \"website\": \"https://smartslider3.com\"\r\n        },\r\n        \"SmartRecruiters\": {\r\n            \"cats\": [\r\n                101\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.smartrecruiters\\\\.com/\"\r\n            ],\r\n            \"description\": \"SmartRecruiters is a web-based talent acquisition platform.\",\r\n            \"website\": \"https://www.smartrecruiters.com\"\r\n        },\r\n        \"SmartSite\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c[^\\u003e]+/smartsite\\\\.(?:dws|shtml)\\\\?id=\"\r\n            ],\r\n            \"meta\": {\r\n                \"author\": [\r\n                    \"redacteur smartinstant\"\r\n                ]\r\n            },\r\n            \"website\": \"https://www.seneca.nl/pub/Smartsite/Smartsite-Smartsite-iXperion\"\r\n        },\r\n        \"SmartWeb\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^smartweb$\"\r\n                ]\r\n            },\r\n            \"description\": \"SmartWeb is an ecommerce platform from Denmark.\",\r\n            \"website\": \"https://www.smartweb.dk\"\r\n        },\r\n        \"Smarter Click\": {\r\n            \"cats\": [\r\n                77\r\n            ],\r\n            \"js\": [\r\n                \"$smcinstall\",\r\n                \"$smct5\",\r\n                \"$smctdata\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.?smct\\\\.(?:io|co)/\"\r\n            ],\r\n            \"description\": \"Smarter Click is a marketing technology company.\",\r\n            \"website\": \"https://smarterclick.com\"\r\n        },\r\n        \"Smartling\": {\r\n            \"cats\": [\r\n                89\r\n            ],\r\n            \"js\": [\r\n                \"populatesmartlingddl\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.smartling\\\\.com/\"\r\n            ],\r\n            \"description\": \"Smartling is a cloud-based translation management system.\",\r\n            \"website\": \"https://www.smartling.com\"\r\n        },\r\n        \"Smartlook\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"smartlook\",\r\n                \"smartlook_key\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.smartlook\\\\.com/\"\r\n            ],\r\n            \"description\": \"Smartlook is a qualitative analytics solution for websites and mobile apps.\",\r\n            \"website\": \"https://www.smartlook.com\"\r\n        },\r\n        \"Smartstore\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"smartstore.customer\": \"\",\r\n                \"smartstore.visitor\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003c!--powered by smart[ss]tore\",\r\n                \"\\u003cmeta property=\\\"sm:pagedata\\\"\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^smart[ss]tore(.net)? (.+)$\\\\;version:\\\\2\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"description\": \"Smartstore is an open-source ecommerce system with CMS capabilities.\",\r\n            \"website\": \"https://www.smartstore.com\"\r\n        },\r\n        \"Smartstore Page Builder\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"css\": [\r\n                \"\\\\.g-stage \\\\.g-stage-root\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003csection[^\\u003e]+class=\\\"g-stage\"\r\n            ],\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"website\": \"https://www.smartstore.com\"\r\n        },\r\n        \"Smartstore biz\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"smjslib\\\\.js\"\r\n            ],\r\n            \"website\": \"https://smartstore.com\"\r\n        },\r\n        \"Smartsupp\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"$smartsupp.options.widgetversion\",\r\n                \"smartsupp\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.smartsuppchat\\\\.com\"\r\n            ],\r\n            \"description\": \"Smartsupp is a live chat tool that offers visitor recording feature.\",\r\n            \"website\": \"https://www.smartsupp.com\"\r\n        },\r\n        \"Smash Balloon Instagram Feed\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/instagram-feed/\"\r\n            ],\r\n            \"description\": \"Instagram Feed displays Instagram posts from your Instagram accounts, either in the same single feed or in multiple different ones. Created by Smash Balloon.\",\r\n            \"website\": \"https://smashballoon.com/instagram-feed\"\r\n        },\r\n        \"Smile\": {\r\n            \"cats\": [\r\n                84\r\n            ],\r\n            \"js\": [\r\n                \"smile.channel_key\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.(?:smile|sweettooth)\\\\.io/\"\r\n            ],\r\n            \"description\": \"Smile is a provider of ecommerce loyalty programs.\",\r\n            \"website\": \"https://smile.io\"\r\n        },\r\n        \"Smile App\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"js\\\\.smile\\\\.io/.+smile-shopify\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Smile\"\r\n            ],\r\n            \"description\": \"Smile App offers a loyalty program for Shopify stores.\",\r\n            \"website\": \"https://apps.shopify.com/smile-io\"\r\n        },\r\n        \"SmtpJS\": {\r\n            \"cats\": [\r\n                75\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/smtpjs\\\\.com/(?:v([\\\\d\\\\.]+)/)?smtp\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"SmtpJS is a free library you can use for sending emails from JavaScript.\",\r\n            \"website\": \"https://smtpjs.com\"\r\n        },\r\n        \"SmugMug\": {\r\n            \"cats\": [\r\n                7\r\n            ],\r\n            \"js\": [\r\n                \"_smugsp\"\r\n            ],\r\n            \"headers\": {\r\n                \"smug-cdn\": \"\"\r\n            },\r\n            \"description\": \"SmugMug is a paid image sharing, image hosting service, and online video platform on which users can upload photos and videos.\",\r\n            \"website\": \"https://www.smugmug.com\"\r\n        },\r\n        \"Snap\": {\r\n            \"cats\": [\r\n                18,\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"snap/([.\\\\d]+)\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Haskell\"\r\n            ],\r\n            \"website\": \"https://snapframework.com\"\r\n        },\r\n        \"Snap Pixel\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"__snappixel\",\r\n                \"snaptr.pixelidlist\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"intg\\\\.snapchat\\\\.com/\"\r\n            ],\r\n            \"description\": \"Snap Pixel is a piece of JavaScript code that helps advertisers measure the cross-device impact of campaigns.\",\r\n            \"website\": \"https://businesshelp.snapchat.com/s/article/snap-pixel-about\"\r\n        },\r\n        \"Snap.svg\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"snap.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"snap\\\\.svg(?:-min)?\\\\.js\"\r\n            ],\r\n            \"website\": \"https://snapsvg.io\"\r\n        },\r\n        \"SnapEngage\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"snapengage\",\r\n                \"snapengage_mobile\",\r\n                \"snapengagechat\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- begin snapengage\"\r\n            ],\r\n            \"description\": \"SnapEngage is a live chat solution that caters to businesses across various industries.\",\r\n            \"website\": \"https://snapengage.com/\"\r\n        },\r\n        \"SnapWidget\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"snapwidget\\\\.com/\"\r\n            ],\r\n            \"description\": \"SnapWidget is a set of interactive Instagram, Twitter and 500px widgets.\",\r\n            \"website\": \"https://snapwidget.com\"\r\n        },\r\n        \"Snipcart\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"snipcart-cart\": \"\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"https://cdn\\\\.snipcart\\\\.com/themes/v([\\\\w.]+)/default/snipcart\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Snipcart is a shopping cart platform that can be integrated into any website with simple HTML and JavaScript.\",\r\n            \"website\": \"https://snipcart.com\"\r\n        },\r\n        \"SniperFast\": {\r\n            \"cats\": [\r\n                29\r\n            ],\r\n            \"js\": [\r\n                \"sniper_search_key\",\r\n                \"sniperenablesearch\",\r\n                \"sniperfast_page_id\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.sniperfast\\\\.com\"\r\n            ],\r\n            \"description\": \"SniperFast is instant search system for ecommerce sites.\",\r\n            \"website\": \"https://www.sniperfast.com\"\r\n        },\r\n        \"Sniply\": {\r\n            \"cats\": [\r\n                96\r\n            ],\r\n            \"js\": [\r\n                \"sniply.create_sniply_bar\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"gosniply\\\\.com/\"\r\n            ],\r\n            \"description\": \"Sniply is a special URL shortener that allows to add a call-to-action to any landing page.\",\r\n            \"website\": \"https://sniply.io\"\r\n        },\r\n        \"Snoobi\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"snoobi\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"snoobi\\\\.com/snoop\\\\.php\"\r\n            ],\r\n            \"website\": \"https://www.snoobi.com\"\r\n        },\r\n        \"Snowplow Analytics\": {\r\n            \"cats\": [\r\n                10,\r\n                63\r\n            ],\r\n            \"cookies\": {\r\n                \"_sp_id\": \"\",\r\n                \"sp\": \"\\\\;confidence:50\"\r\n            },\r\n            \"js\": [\r\n                \"globalsnowplownamespace\",\r\n                \"snowplow\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.jsdelivr\\\\.net/gh/snowplow/sp-js-assets@(?:.+)/sp\\\\.js\",\r\n                \"cdn\\\\.jsdelivr\\\\.net/npm/@snowplow/javascript-tracker@(?:.+)/dist/sp\\\\.js\",\r\n                \"cdnjs\\\\.cloudflare\\\\.com/ajax/libs/snowplow/(?:.+)/sp.*\\\\.js\",\r\n                \"d1fc8wv8zag5ca\\\\.cloudfront\\\\.net/.+/sp\\\\.js\",\r\n                \"sp\\\\.js\\\\;confidence:50\",\r\n                \"unpkg.com/@snowplow/javascript-tracker@(?:.+)/dist/sp.*\\\\.js\"\r\n            ],\r\n            \"description\": \"Snowplow is an open-source behavioral data management platform for businesses.\",\r\n            \"website\": \"https://snowplowanalytics.com\"\r\n        },\r\n        \"SobiPro\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"sobiprourl\"\r\n            ],\r\n            \"implies\": [\r\n                \"Joomla\"\r\n            ],\r\n            \"website\": \"https://sigsiu.net/sobipro.html\"\r\n        },\r\n        \"Social9\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"social9\\\\.com/.+\\\\.js(?:\\\\?ver=([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Social9 is a social sharing widgets and plugins.\",\r\n            \"website\": \"https://social9.com\"\r\n        },\r\n        \"SocialJuice\": {\r\n            \"cats\": [\r\n                90,\r\n                5\r\n            ],\r\n            \"description\": \"SocialJuice is a simple tool to collect video testimonials or textual testimonials from your clients.\",\r\n            \"website\": \"https://socialjuice.io\"\r\n        },\r\n        \"SocialLadder\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"socialladder\\\\.rkiapps\\\\.com/\"\r\n            ],\r\n            \"description\": \"SocialLadder is a complete end-to-end creator management solution for brands looking to maximize and scale their brand ambassador, influencer, and affiliate marketing efforts.\",\r\n            \"website\": \"https://socialladderapp.com\"\r\n        },\r\n        \"Societe des Avis Garantis\": {\r\n            \"cats\": [\r\n                87,\r\n                90\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/ag-core/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Societe des Avis Garantis is a French company that provides customer review and rating services for businesses through its online platform.\",\r\n            \"website\": \"https://www.societe-des-avis-garantis.fr\"\r\n        },\r\n        \"Socket.io\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"io.socket\",\r\n                \"io.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"socket\\\\.io.*\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Node.js\"\r\n            ],\r\n            \"website\": \"https://socket.io\"\r\n        },\r\n        \"SoftTr\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"author\": [\r\n                    \"softtr e-ticaret sitesi yazılımı\"\r\n                ]\r\n            },\r\n            \"website\": \"https://www.softtr.com\"\r\n        },\r\n        \"Softr\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"description\": \"Softr is a tool designed to help users build custom websites, web apps, clients portals, or internal tools using Airtable or Google Sheets data.\",\r\n            \"website\": \"https://www.softr.io\"\r\n        },\r\n        \"Soisy\": {\r\n            \"cats\": [\r\n                91\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.soisy\\\\.it/\"\r\n            ],\r\n            \"description\": \"Soisy is a buy now, pay later solution provider.\",\r\n            \"website\": \"https://www.soisy.it\"\r\n        },\r\n        \"SolidJS\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"solid$$\"\r\n            ],\r\n            \"description\": \"SolidJS is a purely reactive library. It was designed from the ground up with a reactive core. It's influenced by reactive principles developed by previous libraries.\",\r\n            \"website\": \"https://www.solidjs.com/\"\r\n        },\r\n        \"SolidPixels\": {\r\n            \"cats\": [\r\n                1,\r\n                6,\r\n                4\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^https?://cdn\\\\.solidpixels\\\\.net/\"\r\n            ],\r\n            \"meta\": {\r\n                \"web_author\": [\r\n                    \"^solidpixels\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"React\"\r\n            ],\r\n            \"description\": \"Solidpixels is platform to build websites.\",\r\n            \"website\": \"https://www.solidpixels.net\"\r\n        },\r\n        \"SolidStart\": {\r\n            \"cats\": [\r\n                18,\r\n                22\r\n            ],\r\n            \"js\": [\r\n                \"_$hy.init\"\r\n            ],\r\n            \"implies\": [\r\n                \"SolidJS\"\r\n            ],\r\n            \"description\": \"SolidStart is the Solid app framework.\",\r\n            \"website\": \"https://start.solidjs.com\"\r\n        },\r\n        \"Solodev\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"solodev_session\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003cdiv class=[\\\"']dynamicdiv[\\\"'] id=[\\\"']dd\\\\.\\\\d\\\\.\\\\d(?:\\\\.\\\\d)?[\\\"']\\u003e\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://www.solodev.com\"\r\n        },\r\n        \"Solr\": {\r\n            \"cats\": [\r\n                34\r\n            ],\r\n            \"implies\": [\r\n                \"Lucene\"\r\n            ],\r\n            \"description\": \"Solr is an open-source enterprise-search platform, written in Java.\",\r\n            \"website\": \"https://lucene.apache.org/solr/\",\r\n            \"cpe\": \"cpe:2.3:a:apache:solr:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Solusquare OmniCommerce Cloud\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"_solusquare\": \"\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^solusquare$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Adobe ColdFusion\"\r\n            ],\r\n            \"website\": \"https://www.solusquare.com\"\r\n        },\r\n        \"Solve Media\": {\r\n            \"cats\": [\r\n                16,\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"_acpuzzle\",\r\n                \"_adcopy-puzzle-image-image\",\r\n                \"acpuzzle\",\r\n                \"adcopy-puzzle-image-image\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^https?://api\\\\.solvemedia\\\\.com/\"\r\n            ],\r\n            \"website\": \"https://solvemedia.com\"\r\n        },\r\n        \"Solvemate\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"solvemate.config.solvematecdn\",\r\n                \"solvematecli\",\r\n                \"solvemateconfig\"\r\n            ],\r\n            \"description\": \"Solvemate is a customer service automation platform that enables brands to deliver quality customer service through meaningful conversations via chatbots.\",\r\n            \"website\": \"https://www.solvemate.com\"\r\n        },\r\n        \"Solvvy\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"solvvy\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.solvvy\\\\.com/\"\r\n            ],\r\n            \"description\": \"Solvvy provides live chat and chatbot services.\",\r\n            \"website\": \"https://solvvy.com/\"\r\n        },\r\n        \"SonarQubes\": {\r\n            \"cats\": [\r\n                47\r\n            ],\r\n            \"js\": [\r\n                \"sonarmeasures\",\r\n                \"sonarrequest\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink href=\\\"/css/sonar\\\\.css\\\\?v=([\\\\d.]+)\\\\;version:\\\\1\",\r\n                \"\\u003ctitle\\u003esonarqube\\u003c/title\\u003e\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^/js/bundles/sonar\\\\.js?v=([\\\\d.]+)$\\\\;version:\\\\1\"\r\n            ],\r\n            \"meta\": {\r\n                \"application-name\": [\r\n                    \"^sonarqubes$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"description\": \"SonarQube is an open-source platform for the continuous inspection of code quality to perform automatic reviews with static analysis of code to detect bugs, code smells, and security vulnerabilities on 20+ programming languages.\",\r\n            \"website\": \"https://www.sonarqube.org/\"\r\n        },\r\n        \"Sonobi\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"description\": \"Sonobi is an ad technology developer that designs advertising tools and solutions for the media publishers, brand advertisers and media agencies.\",\r\n            \"website\": \"https://sonobi.com\"\r\n        },\r\n        \"Sortable\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"deployads\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.deployads\\\\.com/\"\r\n            ],\r\n            \"description\": \"Sortable is a broad-spectrum platform that helps publishers unify demand partners, data, and tools.\",\r\n            \"website\": \"https://sortable.com\"\r\n        },\r\n        \"Sorted Return\": {\r\n            \"cats\": [\r\n                102\r\n            ],\r\n            \"js\": [\r\n                \"clicksit_window_on_load\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"return\\\\.clicksit\\\\.com/\"\r\n            ],\r\n            \"description\": \"Sorted is a global SaaS company that provides data-driven software for checkouts, warehouses, and shipping.\",\r\n            \"website\": \"https://sorted.com/give-your-customers-a-5-returns-experience/\"\r\n        },\r\n        \"SoteShop\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"soteshop\": \"^\\\\w+$\"\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"SoteShop is an e-shop management software.\",\r\n            \"website\": \"https://www.soteshop.com/\"\r\n        },\r\n        \"Sotel\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"sotel\"\r\n                ]\r\n            },\r\n            \"website\": \"https://www.soteledu.com/en/\"\r\n        },\r\n        \"Sotoon\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^sotoon$\"\r\n            },\r\n            \"description\": \"Sotoon is a CDN provider serving users specially in the MENA region.\",\r\n            \"website\": \"https://sotoon.ir\"\r\n        },\r\n        \"SoundCloud\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"sc.widget.events.play\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.sndcdn\\\\.com/\"\r\n            ],\r\n            \"description\": \"SoundCloud widget gives you the ability to upload, manage and share tracks.\",\r\n            \"website\": \"https://developers.soundcloud.com/docs/api/html5-widget\"\r\n        },\r\n        \"SoundManager\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"baconplayer\",\r\n                \"soundmanager\",\r\n                \"soundmanager.version\"\r\n            ],\r\n            \"website\": \"https://www.schillmania.com/projects/soundmanager2\"\r\n        },\r\n        \"Sourcepoint\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"cookies\": {\r\n                \"_sp_enable_dfp_personalized_ads\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"tealium_sourcepoint\"\r\n            ],\r\n            \"scripts\": [\r\n                \"sourcepoint_mms_domain\"\r\n            ],\r\n            \"description\": \"Sourcepoint is the data privacy software company for the digital marketing ecosystem.\",\r\n            \"website\": \"https://sourcepoint.com\"\r\n        },\r\n        \"Sovrn\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"sovrn\",\r\n                \"sovrn_render\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.(?:linksmart|lijit)\\\\.com/\"\r\n            ],\r\n            \"description\": \"Sovrn is a advertising products and services provider for publishers.\",\r\n            \"website\": \"https://www.sovrn.com\"\r\n        },\r\n        \"Sovrn//Commerce\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"js\": [\r\n                \"vglnk\",\r\n                \"vl_cb\",\r\n                \"vl_disable\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:^[^/]*//[^/]*viglink\\\\.com/api/|vglnk\\\\.js)\"\r\n            ],\r\n            \"description\": \"Sovrn//Commerce is  a content monetization tool for publishers.\",\r\n            \"website\": \"https://www.sovrn.com/publishers/commerce/\"\r\n        },\r\n        \"SparkPost\": {\r\n            \"cats\": [\r\n                75\r\n            ],\r\n            \"description\": \"SparkPost is an email infrastructure provider.\",\r\n            \"website\": \"https://www.sparkpost.com/\"\r\n        },\r\n        \"Spatie Laravel Cookie Consent\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"js\": [\r\n                \"laravelcookieconsent\"\r\n            ],\r\n            \"implies\": [\r\n                \"Laravel\"\r\n            ],\r\n            \"description\": \"Spatie Laravel Cookie Consent is a banner that is displayed on websites to ask visitors for consent for the use of cookies.\",\r\n            \"website\": \"https://github.com/spatie/laravel-cookie-consent\"\r\n        },\r\n        \"Spatie Media Library Pro\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"scripts\": [\r\n                \"media\\\\-library\\\\-pro\\\\-core\"\r\n            ],\r\n            \"implies\": [\r\n                \"Laravel\"\r\n            ],\r\n            \"description\": \"Spatie Media Library Pro is a set of customizable UI components for Spatie Media Library.\",\r\n            \"website\": \"https://medialibrary.pro\"\r\n        },\r\n        \"Spatie Support Bubble\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"implies\": [\r\n                \"Laravel\",\r\n                \"Tailwind CSS\"\r\n            ],\r\n            \"description\": \"Spatie Support Bubble is a non-intrusive support form.\",\r\n            \"website\": \"https://github.com/spatie/laravel-support-bubble\"\r\n        },\r\n        \"Spectra\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/ultimate-addons-for-gutenberg/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"Gutenberg\"\r\n            ],\r\n            \"description\": \"Spectra is a WordPress plugin that provides a collection of new and enhanced blocks for the Gutenberg editor.\",\r\n            \"website\": \"https://wpspectra.com\"\r\n        },\r\n        \"Speed Kit\": {\r\n            \"cats\": [\r\n                92\r\n            ],\r\n            \"js\": [\r\n                \"speedkit\"\r\n            ],\r\n            \"description\": \"Speed Kit develops a performance add-on that uses caching algorithms to minimize loading times of ecommerce websites.\",\r\n            \"website\": \"https://www.speedkit.com\"\r\n        },\r\n        \"SpeedCurve\": {\r\n            \"cats\": [\r\n                78\r\n            ],\r\n            \"js\": [\r\n                \"lux.version\",\r\n                \"lux_t_end\",\r\n                \"lux_t_start\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.speedcurve\\\\.com\"\r\n            ],\r\n            \"description\": \"SpeedCurve is a front-end performance monitoring service.\",\r\n            \"website\": \"https://www.speedcurve.com\"\r\n        },\r\n        \"SpeedSize\": {\r\n            \"cats\": [\r\n                92\r\n            ],\r\n            \"scripts\": [\r\n                \"data-speedsize-(?:srcset|src|params)?\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/speedsize(?:-sw)?\\\\.js\\\\;confidence:90\",\r\n                \"\\\\.speedsize\\\\.com/\"\r\n            ],\r\n            \"description\": \"SpeedSize is an AI-based media-compression technology that can auto-detect and compress all of a website's images and videos down to 99% of their original size without lowering the image quality.\",\r\n            \"website\": \"https://speedsize.com\"\r\n        },\r\n        \"Speedimize\": {\r\n            \"cats\": [\r\n                92\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.shopify\\\\.com/.+/assets/speedimize\\\\.js\"\r\n            ],\r\n            \"description\": \"Speedimize is a Shopify agency that focuses on website speed optimisation and performance issues.\",\r\n            \"website\": \"https://speedimize.io\"\r\n        },\r\n        \"Sphinx\": {\r\n            \"cats\": [\r\n                4\r\n            ],\r\n            \"js\": [\r\n                \"documentation_options\"\r\n            ],\r\n            \"html\": [\r\n                \"created using \\u003ca href=\\\"https?://(?:www\\\\.)?sphinx-doc\\\\.org/\\\"\\u003esphinx\\u003c/a\\u003e ([0-9.]+)\\\\.\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Sphinx is a tool that makes it easy to create documentation.\",\r\n            \"website\": \"https://www.sphinx-doc.org/\"\r\n        },\r\n        \"SpiceThemes SpicePress\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/spicepress(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"SpicePress is a responsive and fully customizable business template by SpiceThemes.\",\r\n            \"website\": \"https://spicethemes.com/spicepress-wordpress-theme\"\r\n        },\r\n        \"Spin-a-Sale\": {\r\n            \"cats\": [\r\n                100,\r\n                5\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"client\\\\.spinasale\\\\.com/\"\r\n            ],\r\n            \"description\": \"Spin-a-Sale adds the intensity of gamification to your site. Spin-a-Sale overlay displays a special prize wheel for visitors that you can fully configure.\",\r\n            \"website\": \"https://spinasale.com\"\r\n        },\r\n        \"Spinnakr\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"_spinnakr_site_id\"\r\n            ],\r\n            \"description\": \"Spinnakr is a startup with a platform designed to personalise messages on blogs and websites.\",\r\n            \"website\": \"https://www.spinnakr.com\"\r\n        },\r\n        \"SpiritShop\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"spiritshop_id\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"SpiritShop is an ecommerce plataform.\",\r\n            \"website\": \"https://spiritshop.com.br\"\r\n        },\r\n        \"Splide\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"splide.name\",\r\n                \"splide.states\"\r\n            ],\r\n            \"description\": \"Splide.js is a lightweight, responsive, and customizable slider and carousel library for JavaScript.\",\r\n            \"website\": \"https://splidejs.com\"\r\n        },\r\n        \"Split\": {\r\n            \"cats\": [\r\n                85,\r\n                74\r\n            ],\r\n            \"js\": [\r\n                \"split_shopper_client\",\r\n                \"split_visitor_client\",\r\n                \"splitio\",\r\n                \"splitio_api_key\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.split\\\\.io/(?:sdk/split-([\\\\d\\\\.]+)\\\\.min\\\\.js)?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Split is a feature delivery platform that powers feature flag management, software experimentation, and continuous delivery.\",\r\n            \"website\": \"https://www.split.io\"\r\n        },\r\n        \"SplitIt\": {\r\n            \"cats\": [\r\n                41,\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"splitit\",\r\n                \"wc_ga_pro.available_gateways.splitit\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.production\\\\.splitit\\\\.com/\"\r\n            ],\r\n            \"description\": \"SplitIt is a payment solution that divides a purchase into smaller monthly installments.\",\r\n            \"website\": \"https://www.splitit.com\"\r\n        },\r\n        \"Splitbee\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"splitbee\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^https://cdn\\\\.splitbee\\\\.io/sb\\\\.js\"\r\n            ],\r\n            \"website\": \"https://splitbee.io\"\r\n        },\r\n        \"SplittyPay\": {\r\n            \"cats\": [\r\n                91\r\n            ],\r\n            \"description\": \"SplittyPay is an alternative payment platform designed for group reservations and purchases.\",\r\n            \"website\": \"https://www.splittypay.com\"\r\n        },\r\n        \"Splunk RUM\": {\r\n            \"cats\": [\r\n                78\r\n            ],\r\n            \"js\": [\r\n                \"plumbr._core.selfurl\",\r\n                \"plumbr._core.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"browser\\\\.plumbr\\\\.io/pa(?:-early)?\\\\.js\"\r\n            ],\r\n            \"description\": \"Splunk RUM is a real-time, front-end user monitoring and troubleshooting.\",\r\n            \"website\": \"https://www.splunk.com/en_us/observability/real-user-monitoring.html\"\r\n        },\r\n        \"Splunkd\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"splunkd\"\r\n            },\r\n            \"description\": \"Splunkd is the system process that handles indexing, searching, forwarding.\",\r\n            \"website\": \"https://splunk.com\"\r\n        },\r\n        \"SpotHopper\": {\r\n            \"cats\": [\r\n                51,\r\n                32,\r\n                75\r\n            ],\r\n            \"js\": [\r\n                \"spothopper\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"static\\\\.spotapps\\\\.co/\"\r\n            ],\r\n            \"description\": \"SpotHopper is an all-in-one marketing and online revenue platform for restaurants.\",\r\n            \"website\": \"https://www.spothopperapp.com\"\r\n        },\r\n        \"SpotX\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"spotx.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"js\\\\.spotx\\\\.tv\"\r\n            ],\r\n            \"description\": \"SpotX is a video advertising platform.\",\r\n            \"website\": \"https://www.spotx.tv\"\r\n        },\r\n        \"Spotify Web API\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"getspotifydata\",\r\n                \"spotify_tracks\",\r\n                \"spotifyme\"\r\n            ],\r\n            \"description\": \"Spotify Web API endpoints return JSON metadata about music artists, albums, and tracks, directly from the Spotify Data Catalogue.\",\r\n            \"website\": \"https://developer.spotify.com/documentation/web-api\"\r\n        },\r\n        \"Spotify Widgets\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"description\": \"Spotify Widgets provide an embeddable view of a track, artist, album, user, playlist, podcast or episode for use within your web project.\",\r\n            \"website\": \"https://developer.spotify.com/documentation/widgets\"\r\n        },\r\n        \"Spotii\": {\r\n            \"cats\": [\r\n                41,\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"spotiiconfig\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"widget\\\\.spotii\\\\.me\"\r\n            ],\r\n            \"description\": \"Spotii is a tech-enabled payments platform where anyone can Shop Now and Pay Later with absolutely zero interest or cost.\",\r\n            \"website\": \"https://www.spotii.com/\"\r\n        },\r\n        \"Spree\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"html\": [\r\n                \"(?:\\u003clink[^\\u003e]*/assets/store/all-[a-z\\\\d]{32}\\\\.css[^\\u003e]+\\u003e|\\u003cscript\\u003e\\\\s*spree\\\\.(?:routes|translations|api_key))\"\r\n            ],\r\n            \"implies\": [\r\n                \"Ruby on Rails\"\r\n            ],\r\n            \"website\": \"https://spreecommerce.org\"\r\n        },\r\n        \"Sprig\": {\r\n            \"cats\": [\r\n                73,\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"userleap\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.userleap\\\\.com/\"\r\n            ],\r\n            \"description\": \"Sprig is a UX analysis and management tool to understand what motivates customers to sign up, engage, and remain loyal to products.\",\r\n            \"website\": \"https://sprig.com\"\r\n        },\r\n        \"Sprig plugin\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"description\": \"Sprig is a free plugin for Craft CMS that allows you to create reactive components from Twig templates ​or PHP classes.\",\r\n            \"website\": \"https://putyourlightson.com/plugins/sprig\"\r\n        },\r\n        \"Spring\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"headers\": {\r\n                \"x-application-context\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"website\": \"https://spring.io/\"\r\n        },\r\n        \"Spring for creators\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"webpackjsonpteespring-custom-storefront\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.creator-spring\\\\.com/\"\r\n            ],\r\n            \"description\": \"Spring for creators (formerly Teespring) is a creator-centric social ecommerce platform.\",\r\n            \"website\": \"https://www.spri.ng\"\r\n        },\r\n        \"SprintHub\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"sprinthub\",\r\n                \"sprinthubloaded\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.sprinthub\\\\.io/\"\r\n            ],\r\n            \"description\": \"SprintHub is an all-in-one marketing platform.\",\r\n            \"website\": \"https://lp.sprinthub.com\"\r\n        },\r\n        \"SpriteSpin\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"spritespin\"\r\n            ],\r\n            \"description\": \"SpriteSpin is a JavaScript plugin that enables users to create 360-degree image spin animations on their websites.\",\r\n            \"website\": \"https://github.com/giniedp/spritespin\"\r\n        },\r\n        \"Spryker\": {\r\n            \"cats\": [\r\n                6,\r\n                62\r\n            ],\r\n            \"js\": [\r\n                \"spryker.config\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"spryker\"\r\n                ]\r\n            },\r\n            \"description\": \"Spryker is a ecommerce technology platform that enables global enterprises to build transactional business models.\",\r\n            \"website\": \"https://www.spryker.com\"\r\n        },\r\n        \"SpurIT\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"spurit.global.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn-spurit\\\\.com/shopify-apps/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"SpurIT is a team of certified Shopify experts which provide ecommerce software solutions.\",\r\n            \"website\": \"https://spur-i-t.com\"\r\n        },\r\n        \"SpurIT Abandoned Cart Reminder\": {\r\n            \"cats\": [\r\n                98,\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"acr_spurit_params.foldercss\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn-spurit\\\\.com/shopify-apps/abandoned-cart-reminder/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"SpurIT Abandoned Cart Reminder bring back your Shopify store visitors who moved to another tab by blinking your store tab.\",\r\n            \"website\": \"https://spur-i-t.com/shopify-apps/abandoned-cart-reminder/\"\r\n        },\r\n        \"SpurIT Loyalty App\": {\r\n            \"cats\": [\r\n                84,\r\n                94,\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"spurit.loyaltypoints\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn-spurit\\\\.com/shopify-apps/loyaltypoints/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"SpurIT Loyalty App is a turnkey solution allowing you to reward existing customers in a number of ways.\",\r\n            \"website\": \"https://spur-i-t.com/shopify-apps/loyalty-points-manager\"\r\n        },\r\n        \"SpurIT Partial Payments App\": {\r\n            \"cats\": [\r\n                41,\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn-spurit\\\\.com/shopify-apps/split-payments/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"SpurIT Partial Payments App allow your customers to pay for the order in several ways or to share a payment with other people.\",\r\n            \"website\": \"https://spur-i-t.com/shopify-apps/split-partial-payments/\"\r\n        },\r\n        \"SpurIT Recurring Payments App\": {\r\n            \"cats\": [\r\n                41,\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"spurit.recurringinvoices\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn-spurit\\\\.com/shopify-apps/recurring-invoices/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"SpurIT Recurring Payments App is a simple way to create a system of bill payment,subscriptions and invoicing.\",\r\n            \"website\": \"https://spur-i-t.com/shopify-apps/recurring-order-subscription\"\r\n        },\r\n        \"Sqreen\": {\r\n            \"cats\": [\r\n                16,\r\n                19\r\n            ],\r\n            \"headers\": {\r\n                \"x-protected-by\": \"^sqreen$\"\r\n            },\r\n            \"description\": \"Sqreen is the application security platform for the modern enterprise. Acquired by Datadog in Apr 2021.\",\r\n            \"website\": \"https://sqreen.io\"\r\n        },\r\n        \"Squadata\": {\r\n            \"cats\": [\r\n                77\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//asset\\\\.easydmp\\\\.net/\"\r\n            ],\r\n            \"description\": \"Squadata provides data based marketing and advertising solutions including email retargeting, CRM onboarding, data monetisation, data management platform.\",\r\n            \"website\": \"https://www.squadata.net\"\r\n        },\r\n        \"Squadded\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"static\\\\.squadded\\\\.co\"\r\n            ],\r\n            \"implies\": [\r\n                \"Cart Functionality\"\r\n            ],\r\n            \"description\": \"Squadded is a social ecommerce solution that allows visitors to shop together with their friends and with other members of the brands online community.\",\r\n            \"website\": \"https://www.squadded.co\"\r\n        },\r\n        \"Square\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"__bootstrap_state__.storeinfo.square_application_id\",\r\n                \"sqpaymentform\",\r\n                \"square.analytics\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"js\\\\.squareup\\\\.com\"\r\n            ],\r\n            \"description\": \"Square is a mobile payment company that offers business software, payment hardware products and small business services.\",\r\n            \"website\": \"https://squareup.com/\"\r\n        },\r\n        \"Square Online\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"app_origin\"\r\n            ],\r\n            \"implies\": [\r\n                \"Weebly\"\r\n            ],\r\n            \"description\": \"Square Online is a subscription based service that provides ecommerce solutions to small and medium sized businesses.\",\r\n            \"website\": \"https://squareup.com/us/en/online-store\"\r\n        },\r\n        \"Squarespace\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"squarespace\",\r\n                \"static.squarespace_context.templateversion\"\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"squarespace\"\r\n            },\r\n            \"description\": \"Squarespace provides Software-as-a-Service (SaaS) for website building and hosting, and allows users to use pre-built website templates.\",\r\n            \"website\": \"https://www.squarespace.com\"\r\n        },\r\n        \"Squarespace Commerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"squarespace_rollups.squarespace-commerce\",\r\n                \"static.squarespace_context.templateversion\"\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"squarespace\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"assets\\\\.squarespace\\\\.\\\\w+/universal/scripts-compressed/commerce-\\\\w+-min\\\\.[\\\\w+\\\\-]+\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Squarespace\"\r\n            ],\r\n            \"description\": \"Squarespace Commerce is an ecommerce platform designed to facilitate the creation of websites and online stores, with domain registration and web hosting included.\",\r\n            \"website\": \"https://www.squarespace.com/ecommerce-website\"\r\n        },\r\n        \"Squeezely\": {\r\n            \"cats\": [\r\n                97\r\n            ],\r\n            \"js\": [\r\n                \"sqzlcommon.getvariantname\",\r\n                \"sqzlpersonalization\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//squeezely\\\\.tech/\"\r\n            ],\r\n            \"description\": \"Squeezely is a customer data platform (CDP) that provides technical capabilities for data collection, segmentation, audience targeting, campaign orchestration, and analytics, empowering businesses to personalise customer experiences and optimise marketing efforts.\",\r\n            \"website\": \"https://www.squeezely.tech\"\r\n        },\r\n        \"SquirrelMail\": {\r\n            \"cats\": [\r\n                30\r\n            ],\r\n            \"js\": [\r\n                \"squirrelmail_loginpage_onload\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003csmall\\u003esquirrelmail version ([.\\\\d]+)[^\\u003c]*\\u003cbr \\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"SquirrelMail is an open-source web-mail package that is based on PHP language. It provides a web-based-email client and a proxy server for IMAP protocol.\",\r\n            \"website\": \"https://squirrelmail.org\",\r\n            \"cpe\": \"cpe:2.3:a:squirrelmail:squirrelmail:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Squiz Matrix\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"squiz matrix\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003c!--\\\\s+running (?:mysource|squiz) matrix\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/__data/assets/(js_file_folder|git_bridge|js_file)/\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"squiz matrix\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"A flexible, low-code enterprise content management system designed to manage multiple sites with many editors.\",\r\n            \"website\": \"https://www.squiz.net/matrix\",\r\n            \"cpe\": \"cpe:2.3:a:squiz:matrix:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Stack Analytix\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"stackanalysis\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"api\\\\.stackanalytix\\\\.com\"\r\n            ],\r\n            \"description\": \"Stack Analytix offers heatmaps, session recording, conversion analysis and user engagement tools.\",\r\n            \"website\": \"https://www.stackanalytix.com\"\r\n        },\r\n        \"StackCommerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"stacksonar\"\r\n            ],\r\n            \"description\": \"StackCommerce is a product discovery platform.\",\r\n            \"website\": \"https://www.stackcommerce.com/\"\r\n        },\r\n        \"StackPath\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"headers\": {\r\n                \"x-backend-server\": \"hosting\\\\.stackcp\\\\.net$\",\r\n                \"x-provided-by\": \"^stackcdn(?: ([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"StackPath is a cloud computing and services provider.\",\r\n            \"website\": \"https://www.stackpath.com\"\r\n        },\r\n        \"Stackable\": {\r\n            \"cats\": [\r\n                87,\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"stackable.resturl\",\r\n                \"stackableanimations\"\r\n            ],\r\n            \"implies\": [\r\n                \"Gutenberg\"\r\n            ],\r\n            \"description\": \"Stackable is a plugin for WordPress that offers a collection of blocks, templates, and other design tools to help users create custom, professional-looking websites.\",\r\n            \"website\": \"https://wpstackable.com\"\r\n        },\r\n        \"Stackbit\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"__next_data__.props.pageprops.withstackbit\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.stackbit\\\\.com\"\r\n            ],\r\n            \"description\": \"Stackbit is a visual experience platform for building decoupled websites.\",\r\n            \"website\": \"https://www.stackbit.com\"\r\n        },\r\n        \"StackerHQ\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"stacker.install_feature\"\r\n            ],\r\n            \"description\": \"StackerHQ is a tool in the low code platforms and application builders categories.\",\r\n            \"website\": \"https://www.stackerhq.com\"\r\n        },\r\n        \"Stackify\": {\r\n            \"cats\": [\r\n                13,\r\n                78\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.stackify\\\\.com/\"\r\n            ],\r\n            \"description\": \"Stackify offers the only solution that fully integrates application performance monitoring with errors and logs.\",\r\n            \"website\": \"https://stackify.com\"\r\n        },\r\n        \"Stage Try\": {\r\n            \"cats\": [\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"stage_cart_change_events\",\r\n                \"stage_cart_total_price\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.stagetry\\\\.io/\"\r\n            ],\r\n            \"description\": \"Stage Try is an end-to-end ecommerce platform amplifying AOV and conversions of online stores.\",\r\n            \"website\": \"https://stagetry.com\"\r\n        },\r\n        \"Stamped\": {\r\n            \"cats\": [\r\n                90\r\n            ],\r\n            \"js\": [\r\n                \"stampedfn\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.stamped\\\\.io/\"\r\n            ],\r\n            \"description\": \"Stamped is a provider of reviews and ratings solution.\",\r\n            \"website\": \"https://stamped.io/\"\r\n        },\r\n        \"Starhost\": {\r\n            \"cats\": [\r\n                51,\r\n                62\r\n            ],\r\n            \"headers\": {\r\n                \"cache-control\": \"starhost\",\r\n                \"x-starhost\": \"\"\r\n            },\r\n            \"description\": \"Starhost provides a Platform-as-a-Service (PaaS) for website building, web hosting, and domain registration.\",\r\n            \"website\": \"https://starhost.verbosec.com\"\r\n        },\r\n        \"Starlet\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^plack::handler::starlet\"\r\n            },\r\n            \"implies\": [\r\n                \"Perl\"\r\n            ],\r\n            \"website\": \"https://metacpan.org/pod/Starlet\"\r\n        },\r\n        \"Statamic\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"statamic\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^statamic$\"\r\n            },\r\n            \"implies\": [\r\n                \"Laravel\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Statamic is an open-source and self-hosted content management system based on the PHP programming language.\",\r\n            \"website\": \"https://statamic.com\",\r\n            \"cpe\": \"cpe:2.3:a:statamic:statamic:*:*:*:*:*:laravel:*:*\"\r\n        },\r\n        \"Statcounter\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"_statcounter\",\r\n                \"sc_project\",\r\n                \"sc_security\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"statcounter\\\\.com/counter/counter\"\r\n            ],\r\n            \"website\": \"https://www.statcounter.com\"\r\n        },\r\n        \"Statically\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^statically$\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.statically\\\\.io/\"\r\n            ],\r\n            \"description\": \"Statically is a free, fast and modern CDN for open-source projects, WordPress, images, and any static assets.\",\r\n            \"website\": \"https://statically.io\"\r\n        },\r\n        \"Statping\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"description\": \"Statping is an open-source status monitoring tool that helps you to monitor and analyse the performance of your websites, applications, and services. It can monitor multiple endpoints such as HTTP, HTTPS, TCP, DNS, and more.\",\r\n            \"website\": \"https://github.com/statping/statping\"\r\n        },\r\n        \"Statsig\": {\r\n            \"cats\": [\r\n                10,\r\n                85\r\n            ],\r\n            \"js\": [\r\n                \"statsig\",\r\n                \"statsiginitialized\",\r\n                \"statsigwww\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-statsig-region\": \"\"\r\n            },\r\n            \"description\": \"Statsig is a modern product experimentation platform that helps product teams continuously measure impact of every single feature they launch.\",\r\n            \"website\": \"https://statsig.com/\"\r\n        },\r\n        \"Status.io\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"static\\\\.status\\\\.io/\"\r\n            ],\r\n            \"description\": \"Status.io is a hosted system status page manager with features such as customised incident tracking, subscriber notifications, and more.\",\r\n            \"website\": \"https://status.io\"\r\n        },\r\n        \"StatusCast\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"js\": [\r\n                \"statuscast.libs.datatables\",\r\n                \"statuscast.ui\"\r\n            ],\r\n            \"description\": \"StatusCast is a hosted status page management software.\",\r\n            \"website\": \"https://statuscast.com/status-page/\"\r\n        },\r\n        \"Statuspal\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//statuspal\\\\.io/\"\r\n            ],\r\n            \"description\": \"Statuspal is a hosted status page and monitoring software for businesses of all kinds.\",\r\n            \"website\": \"https://statuspal.io\"\r\n        },\r\n        \"Staytus\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^staytus/([\\\\d\\\\.]+)$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"Staytus is a free, open-source status site that you can install on your own servers.\",\r\n            \"website\": \"https://staytus.co\"\r\n        },\r\n        \"SteelHouse\": {\r\n            \"cats\": [\r\n                77\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.steelhousemedia\\\\.com/(?:spx\\\\?dxver=([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"SteelHouse is an advertising software company which provides services for brands, agencies, and direct marketers.\",\r\n            \"website\": \"https://steelhouse.com\"\r\n        },\r\n        \"Stencil\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"js\": [\r\n                \"stencil.inspect\"\r\n            ],\r\n            \"description\": \"Stenciljs is an open-source web component compiler that enables developers to create reusable, interoperable UI components that can work across different frameworks and platforms.\",\r\n            \"website\": \"https://stenciljs.com\"\r\n        },\r\n        \"Stimulus\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c[^\\u003e]+data-controller\"\r\n            ],\r\n            \"description\": \"A modest JavaScript framework for the HTML you already have.\",\r\n            \"website\": \"https://stimulusjs.org/\"\r\n        },\r\n        \"StimulusReflex\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"scripts\": [\r\n                \"\\\\.stimulate\"\r\n            ],\r\n            \"implies\": [\r\n                \"Ruby on Rails\",\r\n                \"Stimulus\"\r\n            ],\r\n            \"description\": \"StimulusReflex lets you create reactive web interfaces with Ruby on Rails.\",\r\n            \"website\": \"https://docs.stimulusreflex.com\"\r\n        },\r\n        \"Stitches\": {\r\n            \"cats\": [\r\n                12,\r\n                47\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^c-[a-za-z]{5}$\"\r\n                ]\r\n            },\r\n            \"description\": \"Stitches is a is a CSS-in-JS styling framework with near-zero runtime, SSR, and multi-variant support.\",\r\n            \"website\": \"https://stitches.dev\"\r\n        },\r\n        \"StoreHippo\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"description\": \"StoreHippo is a SaaS based ecommerce platform.\",\r\n            \"website\": \"https://www.storehippo.com\"\r\n        },\r\n        \"Storeden\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"storeden\"\r\n            },\r\n            \"website\": \"https://www.storeden.com\"\r\n        },\r\n        \"Storefront UI\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"implies\": [\r\n                \"Vue.js\"\r\n            ],\r\n            \"description\": \"Storefront UI is an independent, Vue. js-based, library of UI components.\",\r\n            \"website\": \"https://vuestorefront.io/storefront-ui\"\r\n        },\r\n        \"Storeino\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"storeinoapp\"\r\n            ],\r\n            \"meta\": {\r\n                \"platform\": [\r\n                    \"^storeino$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Express\",\r\n                \"MongoDB\",\r\n                \"Node.js\"\r\n            ],\r\n            \"description\": \"Storeino is an ecommerce platform that enables businesses and physical store owners to open a professional online store and sell products online regardless of their geographical location.\",\r\n            \"website\": \"https://www.storeino.com\"\r\n        },\r\n        \"Storeplum\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"description\": \"Storeplum is a no-code ecommerce platform.\",\r\n            \"website\": \"https://www.storeplum.com\"\r\n        },\r\n        \"StorifyMe\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.storifyme\\\\.com/\"\r\n            ],\r\n            \"description\": \"StorifyMe is a storytelling platform for creating and distributing web stories on social networks and the open web.\",\r\n            \"website\": \"https://www.storifyme.com\"\r\n        },\r\n        \"StoryStream\": {\r\n            \"cats\": [\r\n                96\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"apps\\\\.storystream\\\\.ai/\"\r\n            ],\r\n            \"description\": \"StoryStream is a content curation platform that specialises in user generated content.\",\r\n            \"website\": \"https://storystream.ai\"\r\n        },\r\n        \"Storyblok\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"storyblokbridge\",\r\n                \"storyblokregisterevent\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"app\\\\.storyblok\\\\.com\",\r\n                \"x-frame-options\": \"app\\\\.storyblok\\\\.com\"\r\n            },\r\n            \"description\": \"Storyblok is a headless CMS with a visual editor for developers, marketers and content editors. Storyblok helps your team to manage content and digital experiences for every use-case from corporate websites, ecommerce, helpdesks, mobile apps, screen displays, and more.\",\r\n            \"website\": \"https://www.storyblok.com\"\r\n        },\r\n        \"Storybook\": {\r\n            \"cats\": [\r\n                47,\r\n                66\r\n            ],\r\n            \"js\": [\r\n                \"__storybook_addons\"\r\n            ],\r\n            \"description\": \"Storybook is a frontend workshop for building UI components and pages in isolation.\",\r\n            \"website\": \"https://storybook.js.org\"\r\n        },\r\n        \"Strapdown.js\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"strapdown\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Bootstrap\",\r\n                \"Google Code Prettify\"\r\n            ],\r\n            \"website\": \"https://strapdownjs.com\"\r\n        },\r\n        \"Strapi\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^strapi\"\r\n            },\r\n            \"description\": \"Strapi is an open-source headless CMS used for building fast and easily manageable APIs written in JavaScript.\",\r\n            \"website\": \"https://strapi.io\"\r\n        },\r\n        \"Strato\": {\r\n            \"cats\": [\r\n                88,\r\n                62\r\n            ],\r\n            \"description\": \"Strato is an internet hosting service provider headquartered in Berlin, Germany which provide dedicated server hosting, a website builder and a cloud storage services.\",\r\n            \"website\": \"https://www.strato.com\"\r\n        },\r\n        \"Strato Website\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"strftime.configuration\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"strato-editor\\\\.com/\"\r\n            ],\r\n            \"description\": \"Strato Website is a website builder by Strato hosting provider.\",\r\n            \"website\": \"https://www.strato.de/homepage-baukasten\"\r\n        },\r\n        \"Strattic\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"strattic\"\r\n            },\r\n            \"implies\": [\r\n                \"WordPress\"\r\n            ],\r\n            \"description\": \"Strattic offers static and headless hosting for WordPress sites.\",\r\n            \"website\": \"https://www.strattic.com/\"\r\n        },\r\n        \"Strikingly\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- powered by strikingly\\\\.com\"\r\n            ],\r\n            \"website\": \"https://strikingly.com\"\r\n        },\r\n        \"Stripe\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"cookies\": {\r\n                \"__stripe_mid\": \"\",\r\n                \"__stripe_sid\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"__next_data__.props.pageprops.appsettings.stripe_api_public_key\",\r\n                \"checkout.enabledpayments.stripe\",\r\n                \"stripe.version\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cinput[^\\u003e]+data-stripe\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"js\\\\.stripe\\\\.com\"\r\n            ],\r\n            \"description\": \"Stripe offers online payment processing for internet businesses as well as fraud prevention, invoicing and subscription management.\",\r\n            \"website\": \"https://stripe.com\"\r\n        },\r\n        \"StrutFit\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"rerenderstrutfit\"\r\n            ],\r\n            \"description\": \"StrutFit is an online sizing platform for footwear retailers.\",\r\n            \"website\": \"https://www.strut.fit\"\r\n        },\r\n        \"Stylitics\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"stylitics\",\r\n                \"stylitics\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/stylitics/js/stylitics\\\\.js\\\\?ver=v([\\\\d.]+)\\\\;version:\\\\1\",\r\n                \"\\\\.stylitics\\\\.com/v([\\\\d.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Stylitics is a cloud-based SaaS platform for retailers to automate and distribute visual content at scale.\",\r\n            \"website\": \"https://stylitics.com\"\r\n        },\r\n        \"Sub2Tech\": {\r\n            \"cats\": [\r\n                97\r\n            ],\r\n            \"js\": [\r\n                \"sub2.codebaseversion\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.sub2tech\\\\.com/\"\r\n            ],\r\n            \"description\": \"Sub2Tech is combining real time customer data with industry-leading technology.\",\r\n            \"website\": \"https://www.sub2tech.com\"\r\n        },\r\n        \"Subbly\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"subblyproducturlbase\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"static\\\\.subbly\\\\.me/assets/\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^subbly$\"\r\n                ]\r\n            },\r\n            \"description\": \"Subbly is a web-based subscription ecommerce platform designed to help businesses build websites, enhance marketing automation, create coupon and discount codes and manage customers.\",\r\n            \"website\": \"https://www.subbly.co\"\r\n        },\r\n        \"Sublime\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"loadsublimeskinz\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.ayads\\\\.co/\"\r\n            ],\r\n            \"description\": \"Sublime (formerly Sublime Skinz) operator of an advertising agency intended to offer skin-based advertising services to clients.\",\r\n            \"website\": \"https://www.sublime.xyz\"\r\n        },\r\n        \"SublimeVideo\": {\r\n            \"cats\": [\r\n                14\r\n            ],\r\n            \"js\": [\r\n                \"sublimevideo\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.sublimevideo\\\\.net/js/[a-z\\\\d]+\\\\.js\"\r\n            ],\r\n            \"description\": \"SublimeVideo is a framework for HTML5 Video Player.\",\r\n            \"website\": \"https://sublimevideo.net\"\r\n        },\r\n        \"Subrion\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-cms\": \"subrion cms\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^subrion \"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://subrion.com\"\r\n        },\r\n        \"Substack\": {\r\n            \"cats\": [\r\n                11\r\n            ],\r\n            \"headers\": {\r\n                \"x-cluster\": \"substack\",\r\n                \"x-served-by\": \"substack\"\r\n            },\r\n            \"description\": \"Substack is an American online platform that provides publishing, payment, analytics, and design infrastructure to support subscription newsletters.\",\r\n            \"website\": \"https://substack.com/\"\r\n        },\r\n        \"Sucuri\": {\r\n            \"cats\": [\r\n                31,\r\n                16\r\n            ],\r\n            \"headers\": {\r\n                \"x-sucuri-cache:\": \"\",\r\n                \"x-sucuri-id\": \"\"\r\n            },\r\n            \"description\": \"Sucuri is a cybersecurity company that provides website security solutions and services.\",\r\n            \"website\": \"https://sucuri.net/\"\r\n        },\r\n        \"Suiteshare\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"static\\\\.suiteshare\\\\.com\"\r\n            ],\r\n            \"description\": \"Suiteshare powers conversational shopping experiences.\",\r\n            \"website\": \"https://suiteshare.com/\"\r\n        },\r\n        \"Sulu\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"sulu_config.suluversion\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-generator\": \"sulu/?(.+)?$\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Symfony\"\r\n            ],\r\n            \"description\": \"Sulu is the go-to CMS for back-end projects written within the PHP Symfony framework.\",\r\n            \"website\": \"https://sulu.io\"\r\n        },\r\n        \"SummerCart\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"scevents\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"SummerCart is an ecommerce platform written in PHP.\",\r\n            \"website\": \"https://www.summercart.com\"\r\n        },\r\n        \"Summernote\": {\r\n            \"cats\": [\r\n                20\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/(?:s|s)ummernote(?:\\\\.min)?\\\\.js\",\r\n                \"/summernote(?:@|-)([\\\\d\\\\.]+)/\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Summernote is an open-source JavaScript library that offers a feature-rich WYSIWYG editor for web applications, allowing users to create and edit formatted content in a familiar word processor-like interface.\",\r\n            \"website\": \"https://summernote.org\"\r\n        },\r\n        \"Sumo\": {\r\n            \"cats\": [\r\n                5,\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"sumo\",\r\n                \"sumome\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.sumo(?:me)?\\\\.com/\"\r\n            ],\r\n            \"description\": \"Sumo is a plugin offering set of marketing tools to automate a website's growth. These tools help drive extra traffic, engage visitors, increase email subscribers and build community.\",\r\n            \"website\": \"https://sumo.com\"\r\n        },\r\n        \"SunOS\": {\r\n            \"cats\": [\r\n                28\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"sunos( [\\\\d\\\\.]+)?\\\\;version:\\\\1\",\r\n                \"servlet-engine\": \"sunos( [\\\\d\\\\.]+)?\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"SunOS is a Unix-branded operating system developed by Sun Microsystems for their workstation and server computer systems.\",\r\n            \"website\": \"https://oracle.com/solaris\",\r\n            \"cpe\": \"cpe:2.3:o:oracle:sunos:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Suncel\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"__next_data__.props.pageprops.suncel\"\r\n            ],\r\n            \"description\": \"Suncel is a powerful and versatile content platform with a simple visual builder for marketers and publishers.\",\r\n            \"website\": \"https://suncel.io\"\r\n        },\r\n        \"Supabase\": {\r\n            \"cats\": [\r\n                47\r\n            ],\r\n            \"js\": [\r\n                \"__nuxt__.config.public.supabase\",\r\n                \"__nuxt__.config.public.supabase_url\"\r\n            ],\r\n            \"implies\": [\r\n                \"PostgreSQL\"\r\n            ],\r\n            \"description\": \"Supabase is an open-source platform that offers a Postgres database, Authentication, APIs, Edge Functions, Realtime subscriptions, Storage, and Vector embeddings for project development.\",\r\n            \"website\": \"https://supabase.com\"\r\n        },\r\n        \"Super Builder\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"implies\": [\r\n                \"Next.js\",\r\n                \"Notion\"\r\n            ],\r\n            \"description\": \"Super Builder is a new tool for creating sleek landing pages right in Notion.\",\r\n            \"website\": \"https://super.so\"\r\n        },\r\n        \"Super Socializer\": {\r\n            \"cats\": [\r\n                69,\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"plugins/super-socializer/.+?ver=([\\\\d.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Super Socializer is a multipurpose social media plugin for WordPress.\",\r\n            \"website\": \"https://super-socializer-wordpress.heateor.com\"\r\n        },\r\n        \"SuperLemon app\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/files/superlemon_.+\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"WhatsApp Business Chat\"\r\n            ],\r\n            \"description\": \"SuperLemon app is an all-in-one WhatsApp plugin for Shopify stores.\",\r\n            \"website\": \"https://apps.shopify.com/whatsapp-chat-button\"\r\n        },\r\n        \"SuperPWA\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"superpwa_sw\"\r\n            ],\r\n            \"implies\": [\r\n                \"PWA\",\r\n                \"WordPress\"\r\n            ],\r\n            \"description\": \"SuperPWA helps to easily convert your WordPress website into Progressive Web Apps instantly through our widely used PWA software without in coding.\",\r\n            \"website\": \"https://superpwa.com\"\r\n        },\r\n        \"Supersized\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"supersized(?:\\\\.([\\\\d.]*[\\\\d]))?.*\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"website\": \"https://buildinternet.com/project/supersized\"\r\n        },\r\n        \"Superspeed\": {\r\n            \"cats\": [\r\n                92\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"superspeed\\\\.gadget-edge\\\\.com\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Superspeed is a page speed optimizer app for Shopify based sites.\",\r\n            \"website\": \"https://apps.shopify.com/superspeed-free-speed-boost\"\r\n        },\r\n        \"Support Hero\": {\r\n            \"cats\": [\r\n                4,\r\n                13\r\n            ],\r\n            \"js\": [\r\n                \"supporthero\",\r\n                \"supportherowidget\"\r\n            ],\r\n            \"description\": \"Support Hero is a knowledge base solution to reduce inbound support requests.\",\r\n            \"website\": \"https://www.supporthero.com/\"\r\n        },\r\n        \"Survicate\": {\r\n            \"cats\": [\r\n                73\r\n            ],\r\n            \"js\": [\r\n                \"survicate\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"api\\\\.survicate\\\\.com\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"\\\\.survicate\\\\.com/\"\r\n            ],\r\n            \"description\": \"Survicate is an all-in-one customer feedback tool that allows you collect feedback.\",\r\n            \"website\": \"https://survicate.com\"\r\n        },\r\n        \"Svbtle\": {\r\n            \"cats\": [\r\n                11\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^svbtle\\\\.com$\"\r\n                ]\r\n            },\r\n            \"website\": \"https://www.svbtle.com\"\r\n        },\r\n        \"Svelte\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"description\": \"Svelte is a free and open-source front end compiler created by Rich Harris and maintained by the Svelte core team members.\",\r\n            \"website\": \"https://svelte.dev\"\r\n        },\r\n        \"SvelteKit\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"sveltekit\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Node.js\",\r\n                \"Svelte\",\r\n                \"Vite\"\r\n            ],\r\n            \"description\": \"SvelteKit is the official Svelte framework for building web applications with a flexible filesystem-based routing.\",\r\n            \"website\": \"https://kit.svelte.dev\"\r\n        },\r\n        \"Swagger UI\": {\r\n            \"cats\": [\r\n                4\r\n            ],\r\n            \"js\": [\r\n                \"swaggeruibundle\",\r\n                \"swaggeruistandalonepreset\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:/([\\\\d.]+))?/swagger-ui-bundle\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Swagger UI is a collection of HTML, JavaScript, and CSS assets that dynamically generate documentation from a Swagger-compliant API.\",\r\n            \"website\": \"https://swagger.io/tools/swagger-ui\"\r\n        },\r\n        \"Swagify\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"swagify\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"api\\\\.swagifyapp\\\\.com/\"\r\n            ],\r\n            \"description\": \"Swagify allows you to upsell, cross-sell, and promote, by creating as many completely customizable offers as you want.\",\r\n            \"website\": \"https://swagifyapp.com\"\r\n        },\r\n        \"SweetAlert\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"sweet(?:-)?alert(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"description\": \"SweetAlert is a JavaScript library that provides alternative alert and modal dialog boxes for web applications, with customisable features, aiming to improve the user interface of the default browser dialogs.\",\r\n            \"website\": \"https://sweetalert.js.org\"\r\n        },\r\n        \"SweetAlert2\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"sweetalert2\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/npm/sweetalert2@([\\\\d.]+)\\\\;version:\\\\1\",\r\n                \"limonte-sweetalert2/([\\\\d.]+)/sweetalert2(?:\\\\.all)(?:\\\\.min)\\\\.js\",\r\n                \"sweetalert2(?:\\\\.all)?(?:\\\\.min)?\\\\.js\",\r\n                \"sweetalert2@([\\\\d.]+)/dist/sweetalert2(?:\\\\.all)(?:\\\\.min)\\\\.js\"\r\n            ],\r\n            \"description\": \"SweetAlert2 is a JavaScript library that provides customisable, visually appealing, and responsive alert and modal dialog boxes for web applications.\",\r\n            \"website\": \"https://sweetalert2.github.io/\"\r\n        },\r\n        \"Swell\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"swell-session\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"swell.version\"\r\n            ],\r\n            \"description\": \"Swell is a headless ecommerce platform for modern brands, startups, and agencies.\",\r\n            \"website\": \"https://www.swell.is\"\r\n        },\r\n        \"Swiffy Slider\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/npm/swiffy-slider@([\\\\d\\\\.]+)/\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Swiffy Slider is a wrapper defined in html with slides, navigation and indicators as its children.\",\r\n            \"website\": \"https://swiffyslider.com\"\r\n        },\r\n        \"Swiftype\": {\r\n            \"cats\": [\r\n                29\r\n            ],\r\n            \"js\": [\r\n                \"swiftype\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"swiftype\\\\.com/embed\\\\.js$\"\r\n            ],\r\n            \"description\": \"Swiftype provides search software for organisations, websites, and computer programs.\",\r\n            \"website\": \"https://swiftype.com\"\r\n        },\r\n        \"Swiper\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"swiper\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"swiper(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"description\": \"Swiper is a JavaScript library that creates modern touch sliders with hardware-accelerated transitions.\",\r\n            \"website\": \"https://swiperjs.com\"\r\n        },\r\n        \"Swym Wishlist Plus\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"swappname\",\r\n                \"swymcart.attributes\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Swym Wishlist Plus enables your customers to bookmark their favorite products and pick up where they left off when they return.\",\r\n            \"website\": \"https://swym.it/apps/wishlist/\"\r\n        },\r\n        \"Sylius\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"syliusgtmenhancedecommerceplugin\",\r\n                \"syliusshop/script\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Symfony\"\r\n            ],\r\n            \"description\": \"Sylius is an open-source ecommerce framework based on Symfony full stack.\",\r\n            \"website\": \"https://sylius.com\"\r\n        },\r\n        \"Symfony\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"cookies\": {\r\n                \"sf_redirect\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"sfjs\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Symfony is a PHP web application framework and a set of reusable PHP components/libraries.\",\r\n            \"website\": \"https://symfony.com\",\r\n            \"cpe\": \"cpe:2.3:a:sensiolabs:symfony:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Sympa\": {\r\n            \"cats\": [\r\n                30\r\n            ],\r\n            \"html\": [\r\n                \"\\u003ca href=\\\"https?://www\\\\.sympa\\\\.org\\\"\\u003e\\\\s*powered by sympa\\\\s*\\u003c/a\\u003e\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^sympa$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Perl\"\r\n            ],\r\n            \"description\": \"Sympa is an open-source mailing list management (MLM) software.\",\r\n            \"website\": \"https://www.sympa.org/\"\r\n        },\r\n        \"Syndeca\": {\r\n            \"cats\": [\r\n                10,\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"syndecaanalyticsobject\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.syndeca\\\\.com/\"\r\n            ],\r\n            \"description\": \"Syndeca is a visual commerce platform that allows brands to quickly create engaging, actionable campaigns.\",\r\n            \"website\": \"https://www.syndeca.com\"\r\n        },\r\n        \"Synerise\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"snrcdn\\\\.net/sdk/(3\\\\.0)/synerise-javascript-sdk\\\\.min\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"website\": \"https://synerise.com/\"\r\n        },\r\n        \"Synology DiskStation\": {\r\n            \"cats\": [\r\n                48\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cnoscript\\u003e\\u003cdiv class='syno-no-script'\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"webapi/entry\\\\.cgi\\\\?api=syno\\\\.(?:core|filestation)\\\\.desktop\\\\.\"\r\n            ],\r\n            \"meta\": {\r\n                \"application-name\": [\r\n                    \"synology diskstation\"\r\n                ],\r\n                \"description\": [\r\n                    \"^diskstation provides a full-featured network attached storage\"\r\n                ]\r\n            },\r\n            \"description\": \"DiskStation provides a full-featured network attached storage.\",\r\n            \"website\": \"https://synology.com\"\r\n        },\r\n        \"SyntaxHighlighter\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"syntaxhighlighter\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c(?:script|link)[^\\u003e]*sh(?:core|brush|themedefault)\"\r\n            ],\r\n            \"website\": \"https://github.com/syntaxhighlighter\"\r\n        },\r\n        \"Systeme.io\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//systeme\\\\.io/\"\r\n            ],\r\n            \"description\": \"Systeme.io is an all-in-one marketing platform that helps businesses create and launch sales funnels, affiliate programs, email marketing campaigns, online courses, blogs, and websites.\",\r\n            \"website\": \"https://systeme.io\"\r\n        },\r\n        \"Syte\": {\r\n            \"cats\": [\r\n                76,\r\n                29\r\n            ],\r\n            \"js\": [\r\n                \"syteapi.getbinimagebb\",\r\n                \"syteapp.analytics\",\r\n                \"sytepixel\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.syteapi\\\\.com/\"\r\n            ],\r\n            \"description\": \"Syte is a provider of visual AI technology that aims to improve retailers' site navigation, product discovery, and user experience by powering solutions that engage and convert shoppers.\",\r\n            \"website\": \"https://www.syte.ai\"\r\n        },\r\n        \"T-Soft\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"html\": [\r\n                \"\\u003ca href=\\\"http://www\\\\.tsoft\\\\.com\\\\.tr\\\" target=\\\"_blank\\\" title=\\\"t-soft e-ticaret sistemleri\\\"\\u003e\"\r\n            ],\r\n            \"website\": \"https://www.tsoft.com.tr/\"\r\n        },\r\n        \"T1 Comercios\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^t1comercios$\"\r\n                ]\r\n            },\r\n            \"description\": \"T1 Comercios is an integrator platform with marketplaces(https://www.claroshop.com/,https://www.sears.com.mx/,https://www.sanborns.com.mx/).\",\r\n            \"website\": \"https://www.t1comercios.com\"\r\n        },\r\n        \"T1 Envios\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^t1envios$\"\r\n                ]\r\n            },\r\n            \"description\": \"T1 Envios is a delivery solution, allows the business to select the best courier to send their packages.\",\r\n            \"website\": \"https://t1envios.com\"\r\n        },\r\n        \"T1 Paginas\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^t1paginas$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"AngularJS\",\r\n                \"MongoDB\",\r\n                \"Node.js\"\r\n            ],\r\n            \"description\": \"T1 Paginas is an ecommerce platform.\",\r\n            \"website\": \"https://t1paginas.com\"\r\n        },\r\n        \"T1 Pagos\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^t1pagos$\"\r\n                ]\r\n            },\r\n            \"description\": \"T1 Pagos is a payment processing platform.\",\r\n            \"website\": \"https://www.t1pagos.com\"\r\n        },\r\n        \"TCAdmin\": {\r\n            \"cats\": [\r\n                9\r\n            ],\r\n            \"js\": [\r\n                \"tcadmin\"\r\n            ],\r\n            \"description\": \"TCAdmin is the game hosting control panel.\",\r\n            \"website\": \"https://www.tcadmin.com\"\r\n        },\r\n        \"TDesign\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"tdesign\\\\.gtimg\\\\.com/\"\r\n            ],\r\n            \"description\": \"TDesign launched by Tencent contains rich and reusable design component resources, such as color system, text system, motion design, etc.\",\r\n            \"website\": \"https://tdesign.tencent.com\"\r\n        },\r\n        \"THG Ingenuity\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"thehut-.*\\\\.js\"\r\n            ],\r\n            \"description\": \"THG Ingenuity is completely unique in that it's both a peer-to-peer ecommerce retailer and a service provider to global cross-border commerce operations.\",\r\n            \"website\": \"https://www.thgingenuity.com\"\r\n        },\r\n        \"THRON\": {\r\n            \"cats\": [\r\n                95\r\n            ],\r\n            \"js\": [\r\n                \"thronhlsjs\",\r\n                \"thronplayer\"\r\n            ],\r\n            \"description\": \"THRON is a digital asset management platform that provides a centralised hub for storing, organising, and distributing digital assets like images, videos, and documents.\",\r\n            \"website\": \"https://www.thron.com\"\r\n        },\r\n        \"TN Express Web\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"tnew\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"Tessitura\"\r\n            ],\r\n            \"description\": \"Tessitura is an enterprise application to manage activities in ticketing, fundraising, customer relationship management, and marketing.\",\r\n            \"website\": \"https://www.tessituranetwork.com\"\r\n        },\r\n        \"TNS Payments\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"secure\\\\.ap\\\\.tnspayments\\\\.com\"\r\n            ],\r\n            \"description\": \"TNS Payments, is designed to deliver payment transaction information to banks, merchants, processors and other payment institutions.\",\r\n            \"website\": \"https://tnsi.com/products/payments/\"\r\n        },\r\n        \"TRISOshop\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"description\": \"TRISOshop is an ecommerce platform.\",\r\n            \"website\": \"https://www.trisoshop.pl\"\r\n        },\r\n        \"TRUENDO\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"js\": [\r\n                \"truendo\",\r\n                \"truendocookiecontrolcallback\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.priv\\\\.center/\",\r\n                \"cdn\\\\.truendo\\\\.com/\"\r\n            ],\r\n            \"description\": \"TRUENDO is a GDPR compliance software.\",\r\n            \"website\": \"https://truendo.com\"\r\n        },\r\n        \"TVSquared\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"_tvq\",\r\n                \"tv2track\"\r\n            ],\r\n            \"description\": \"TVSquared is a cross-platform TV ad measurement, analytics and optimisation platform.\",\r\n            \"website\": \"https://www.tvsquared.com\"\r\n        },\r\n        \"TWiki\": {\r\n            \"cats\": [\r\n                8\r\n            ],\r\n            \"cookies\": {\r\n                \"twikisid\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003cimg [^\\u003e]*(?:title|alt)=\\\"this site is powered by the twiki collaboration platform\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:twikijavascripts|twikilib(?:\\\\.min)?\\\\.js)\"\r\n            ],\r\n            \"implies\": [\r\n                \"Perl\"\r\n            ],\r\n            \"description\": \"TWiki is an open-source wiki and application platform.\",\r\n            \"website\": \"https://twiki.org\"\r\n        },\r\n        \"TYPO3 CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^/?typo3(?:conf|temp)/\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"typo3\\\\s+(?:cms\\\\s+)?(?:[\\\\d.]+)?(?:\\\\s+cms)?\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"TYPO3 is a free and open-source Web content management system written in PHP.\",\r\n            \"website\": \"https://typo3.org/\",\r\n            \"cpe\": \"cpe:2.3:a:typo3:typo3:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Tabarnapp\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"tabarnapp_loaded_ad\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.tabarn\\\\.app/\"\r\n            ],\r\n            \"description\": \"Tabarnapp is a platform for Shopify apps and themes.\",\r\n            \"website\": \"https://tabarnapp.com\"\r\n        },\r\n        \"Tabby\": {\r\n            \"cats\": [\r\n                41,\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"tabby\",\r\n                \"tabbypromo\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"checkout\\\\.tabby\\\\.ai\"\r\n            ],\r\n            \"description\": \"Tabby is a Buy now pay later solution from Middle East.\",\r\n            \"website\": \"https://tabby.ai/\"\r\n        },\r\n        \"TableBooker\": {\r\n            \"cats\": [\r\n                93\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"reservations\\\\.tablebooker\\\\.\\\\w+/\"\r\n            ],\r\n            \"description\": \"Tablebooker is an online reservation system for restaurants.\",\r\n            \"website\": \"https://www.tablebooker.com\"\r\n        },\r\n        \"TableCheck\": {\r\n            \"cats\": [\r\n                93\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"tc_widget\\\\.js\"\r\n            ],\r\n            \"description\": \"TableCheck is a restaurant table booking widget.\",\r\n            \"website\": \"https://www.tablecheck.com\"\r\n        },\r\n        \"TablePress\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"description\": \"TablePress is a free and open source plugin for the WordPress publishing platform. It enables you to create and manage tables on your website, without any coding knowledge.\",\r\n            \"website\": \"https://tablepress.org\"\r\n        },\r\n        \"Taboola\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"cookies\": {\r\n                \"taboola_session_id\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"_taboola\",\r\n                \"taboola_view_id\",\r\n                \"trcimpl.global\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.taboola\\\\.com\"\r\n            ],\r\n            \"description\": \"Taboola is a content discovery \\u0026 native advertising platform for publishers and advertisers.\",\r\n            \"website\": \"https://www.taboola.com\"\r\n        },\r\n        \"Tachyons\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"js\": [\r\n                \"webpackchunkgatsby_starter_blog_tachyons\"\r\n            ],\r\n            \"description\": \"Tachyons is a functional CSS framework.\",\r\n            \"website\": \"https://tachyons.io\"\r\n        },\r\n        \"Tada\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.trytada\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Tada offers interactive website popups that allow Shopify merchants to collect more emails and increase sales by engaging website visitors through gamification.\",\r\n            \"website\": \"https://trytada.com\"\r\n        },\r\n        \"TagPro\": {\r\n            \"cats\": [\r\n                42\r\n            ],\r\n            \"js\": [\r\n                \"initadprotags\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"tagpro\\\\.adpromedia\\\\.net/\"\r\n            ],\r\n            \"description\": \"TagPro is software that updates and allows you to manage tags within websites, identifying various types of variables to optimise loads for advertising.\",\r\n            \"website\": \"https://tagpro.adpromedia.net\"\r\n        },\r\n        \"Tagboard\": {\r\n            \"cats\": [\r\n                96\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.tagboard\\\\.com/\"\r\n            ],\r\n            \"description\": \"Tagboard is a platform which allows users to aggregate data from major social networking websites and embed, repost and redisplay it on various media.\",\r\n            \"website\": \"https://tagboard.com\"\r\n        },\r\n        \"Tagembed\": {\r\n            \"cats\": [\r\n                96,\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"tagembedwidget\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//widget\\\\.tagembed\\\\.com/\"\r\n            ],\r\n            \"description\": \"Tagembed is a social media aggregator that collects and displays engaging user-generated content from any social media network such as Instagram, Facebook, Twitter, Youtube, Tiktok, Google Reviews, Airbnb, and 18+ networks.\",\r\n            \"website\": \"https://tagembed.com\"\r\n        },\r\n        \"Taggbox\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"taggboxajaxurl\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.taggbox\\\\.com\",\r\n                \"taggbox\\\\.com/app/js/embed\\\\.min\\\\.js(?:\\\\?ver=([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Taggbox is an UGC platform to collect, curate, manage rights, and publish user-generated content marketing campaigns across multiple channels.\",\r\n            \"website\": \"https://taggbox.com/\"\r\n        },\r\n        \"Taiga\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"js\": [\r\n                \"taigaconfig\"\r\n            ],\r\n            \"implies\": [\r\n                \"AngularJS\",\r\n                \"Django\"\r\n            ],\r\n            \"website\": \"https://taiga.io\"\r\n        },\r\n        \"Tail\": {\r\n            \"cats\": [\r\n                97\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.tailtarget\\\\.com/\"\r\n            ],\r\n            \"description\": \"Tail is a customer data management platform.\",\r\n            \"website\": \"https://www.tail.digital\"\r\n        },\r\n        \"Tailwind CSS\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"css\": [\r\n                \"--tw-(?:rotate|translate|space-x|text-opacity|border-opacity)\"\r\n            ],\r\n            \"js\": [\r\n                \"tailwind\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.tailwindcss(?:tailwind-config-cdn)?\\\\.(?:com|js)\"\r\n            ],\r\n            \"description\": \"Tailwind is a utility-first CSS framework.\",\r\n            \"website\": \"https://tailwindcss.com/\"\r\n        },\r\n        \"TakeDrop\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"webpackjsonptakedrop-react\"\r\n            ],\r\n            \"description\": \"TakeDrop is an ecommerce platform.\",\r\n            \"website\": \"https://takedrop.pl\"\r\n        },\r\n        \"Talkable\": {\r\n            \"cats\": [\r\n                74,\r\n                84,\r\n                94\r\n            ],\r\n            \"js\": [\r\n                \"talkable.config.version\"\r\n            ],\r\n            \"description\": \"Talkable is a cloud-based referral marketing system that assists medium to large businesses with campaign creation and channel performance tracking.\",\r\n            \"website\": \"https://www.talkable.com\"\r\n        },\r\n        \"Tallentor\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"tallentor\\\\.com/js/script_tracker\\\\.js\"\r\n            ],\r\n            \"description\": \"Tallentor is a subscription-based software website analytics, heatmap, channel chat intergration.\",\r\n            \"website\": \"https://tallentor.com\"\r\n        },\r\n        \"Tallentor Widget\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"cookies\": {\r\n                \"tallentor_widget\": \"\"\r\n            },\r\n            \"description\": \"Tallentor is a subscription-based software website analytics, heatmap, channel chat intergration.\",\r\n            \"website\": \"https://tallentor.com\"\r\n        },\r\n        \"Tally\": {\r\n            \"cats\": [\r\n                73\r\n            ],\r\n            \"js\": [\r\n                \"tally\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//tally\\\\.so/\"\r\n            ],\r\n            \"description\": \"Tally is the simplest way to create free forms \\u0026 surveys. Create any type of form in seconds, without knowing how to code, and for free.\",\r\n            \"website\": \"https://tally.so/\"\r\n        },\r\n        \"Tamago\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink [^\\u003e]*href=\\\"http://tamago\\\\.temonalab\\\\.com\"\r\n            ],\r\n            \"website\": \"https://tamago.temonalab.com\"\r\n        },\r\n        \"Tamara\": {\r\n            \"cats\": [\r\n                41,\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"tamaraproductwidget\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.tamara\\\\.co\"\r\n            ],\r\n            \"description\": \"Tamara ia a BNPL (Buy now pay later) provider in Saudi Arabia.\",\r\n            \"website\": \"https://tamara.co/\"\r\n        },\r\n        \"Tangled Network\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"headers\": {\r\n                \"x-hosting-provider\": \"tangled network\"\r\n            },\r\n            \"description\": \"Tangled Network provides a managed services in website devleopment, web and database hosting and domain registration, with a focus on everything managed for small and medium sized businesses.\",\r\n            \"website\": \"https://tanglednetwork.com\"\r\n        },\r\n        \"Tapad\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"description\": \"Tapad is a venture-funded startup company that develops and markets software and services for cross-device advertising and content delivery.\",\r\n            \"website\": \"https://www.tapad.com\"\r\n        },\r\n        \"Tapcart\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"tapcartwebbanner\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.tapcart\\\\.com/\"\r\n            ],\r\n            \"description\": \"Tapcart is a mobile commerce SaaS platform that integrates directly with Shopify.\",\r\n            \"website\": \"https://tapcart.com\"\r\n        },\r\n        \"Tapfiliate\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"js\": [\r\n                \"tapfiliateobject\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.tapfiliate\\\\.com/\"\r\n            ],\r\n            \"description\": \"Tapfiliate is a cloud-based affiliate marketing software that helps businesses to create, track, and optimise their own affiliate marketing programs.\",\r\n            \"website\": \"https://tapfiliate.com\"\r\n        },\r\n        \"Target2Sell\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"static\\\\.target2sell\\\\.com\"\r\n            ],\r\n            \"description\": \"Target2Sell is a personalisation solution for ecommerce sites.\",\r\n            \"website\": \"https://www.target2sell.com/\"\r\n        },\r\n        \"Tatari\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"tatari\"\r\n            ],\r\n            \"description\": \"Tatari is a data and analytics company focused on buying and measuring ads across TV and streaming platforms.\",\r\n            \"website\": \"https://www.tatari.tv\"\r\n        },\r\n        \"Tawk.to\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"cookies\": {\r\n                \"tawkconnectiontime\": \"\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"//embed\\\\.tawk\\\\.to\"\r\n            ],\r\n            \"description\": \"Tawk.to is a free messaging app to monitor and chat with the visitors to a website, mobile app.\",\r\n            \"website\": \"https://tawk.to\"\r\n        },\r\n        \"Teachable\": {\r\n            \"cats\": [\r\n                21\r\n            ],\r\n            \"cookies\": {\r\n                \"_gat_teachabletracker\": \"\\\\d+\"\r\n            },\r\n            \"js\": [\r\n                \"isteachable\",\r\n                \"teachableicons\",\r\n                \"trackteachablegaevent\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.teachablecdn\\\\.com\"\r\n            ],\r\n            \"meta\": {\r\n                \"asset_host\": [\r\n                    \"\\\\.teachablecdn\\\\.com\"\r\n                ]\r\n            },\r\n            \"description\": \"Teachable is a learning management system or LMS platform.\",\r\n            \"website\": \"https://teachable.com\"\r\n        },\r\n        \"Teads\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"teads\\\\.tv\"\r\n            ],\r\n            \"description\": \"Teads is a technology provider that sells ads on publisher websites.\",\r\n            \"website\": \"https://www.teads.com\"\r\n        },\r\n        \"Tealium\": {\r\n            \"cats\": [\r\n                42,\r\n                97\r\n            ],\r\n            \"js\": [\r\n                \"tealiumenabled\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/tealium/utag\\\\.js$\",\r\n                \"^(?:https?:)?//tags\\\\.tiqcdn\\\\.com/\"\r\n            ],\r\n            \"description\": \"Tealium provides a sales enterprise tag management system and marketing software.\",\r\n            \"website\": \"https://tealium.com\"\r\n        },\r\n        \"Tealium AudienceStream\": {\r\n            \"cats\": [\r\n                86\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.tealiumiq\\\\.com\"\r\n            ],\r\n            \"description\": \"Tealium AudienceStream is an omnichannel customer segmentation and real-time action engine.\",\r\n            \"website\": \"https://tealium.com/products/audiencestream\"\r\n        },\r\n        \"Tealium Consent Management\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"description\": \"Tealium Consent Management adds consent and data privacy support.\",\r\n            \"website\": \"https://docs.tealium.com/platforms/getting-started/consent-management\"\r\n        },\r\n        \"TeamBrain\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"teambrainexternalapp\"\r\n            ],\r\n            \"description\": \"TeamBrain is a knowledge management solution which allows to use a self-learning dynamic FAQ on a website or widget on the bottom right of any page.\",\r\n            \"website\": \"https://www.teambrain.io\"\r\n        },\r\n        \"TeamCity\": {\r\n            \"cats\": [\r\n                44\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cspan class=\\\"versiontag\\\"\\u003e\\u003cspan class=\\\"vword\\\"\\u003eversion\\u003c/span\\u003e ([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"meta\": {\r\n                \"application-name\": [\r\n                    \"teamcity\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Apache Tomcat\",\r\n                \"Java\",\r\n                \"Moment.js\",\r\n                \"Prototype\",\r\n                \"React\",\r\n                \"Underscore.js\",\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"TeamCity is a build management and continuous integration server from JetBrains.\",\r\n            \"website\": \"https://www.jetbrains.com/teamcity/\"\r\n        },\r\n        \"Teamtailor\": {\r\n            \"cats\": [\r\n                101\r\n            ],\r\n            \"js\": [\r\n                \"teamtailor.ziggeo\"\r\n            ],\r\n            \"description\": \"Teamtailor is an applicant tracking system, career site and analytics dashboard combined, mobile friendly, and  all-in-one recruitment platform.\",\r\n            \"website\": \"https://www.teamtailor.com\"\r\n        },\r\n        \"Tebex\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"headers\": {\r\n                \"tb-cache-country\": \"^\\\\w+$\\\\;confidence:50\",\r\n                \"tb-cache-group\": \"^webstore$\\\\;confidence:50\"\r\n            },\r\n            \"scripts\": [\r\n                \"\\\\.tebexlogin\"\r\n            ],\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\",\r\n                \"Sass\"\r\n            ],\r\n            \"description\": \"Tebex specialises in providing gcommerce solutions for online games.\",\r\n            \"website\": \"https://www.tebex.io\"\r\n        },\r\n        \"Telescope\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"telescope\"\r\n            ],\r\n            \"implies\": [\r\n                \"Meteor\",\r\n                \"React\"\r\n            ],\r\n            \"website\": \"https://telescopeapp.org\"\r\n        },\r\n        \"Tencent Analytics (腾讯分析)\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"tajs\\\\.qq\\\\.com/stats\"\r\n            ],\r\n            \"website\": \"https://ta.qq.com/\"\r\n        },\r\n        \"Tencent Cloud\": {\r\n            \"cats\": [\r\n                31,\r\n                62\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.tencent-cloud\\\\.(?:cn|com)/\"\r\n            ],\r\n            \"meta\": {\r\n                \"copyright\": [\r\n                    \"^.+tencent\\\\scloud\\\\.$\"\r\n                ]\r\n            },\r\n            \"description\": \"Tencent Cloud is China's leading public cloud service provider.\",\r\n            \"website\": \"https://intl.cloud.tencent.com\"\r\n        },\r\n        \"Tencent QQ\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"description\": \"Tencent QQ also known as QQ, is an instant messaging software service and web portal developed by the Chinese tech giant Tencent.\",\r\n            \"website\": \"https://im.qq.com\"\r\n        },\r\n        \"Tencent Waterproof Wall\": {\r\n            \"cats\": [\r\n                9,\r\n                16\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/tcaptcha\\\\.js\",\r\n                \"captcha\\\\.qq\\\\.com/.*\"\r\n            ],\r\n            \"website\": \"https://007.qq.com/\"\r\n        },\r\n        \"Tengine\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"tengine\"\r\n            },\r\n            \"description\": \"Tengine is a web server which is based on the Nginx HTTP server.\",\r\n            \"website\": \"https://tengine.taobao.org\"\r\n        },\r\n        \"Termly\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"app\\\\.termly\\\\.io/embed\\\\.min\\\\.js\"\r\n            ],\r\n            \"description\": \"Termly provides free website policy resources and web-based policy creation software.\",\r\n            \"website\": \"https://termly.io/\"\r\n        },\r\n        \"Tern\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"live\\\\.tern-returns\\\\.eastsideapps\\\\.io/\"\r\n            ],\r\n            \"description\": \"Tern is a plug and play ecommerce app, built for Shopify, that offers merchants the ability to provide a seamless trade-in service.\",\r\n            \"website\": \"https://www.tern.eco\"\r\n        },\r\n        \"TerriaJS\": {\r\n            \"cats\": [\r\n                35\r\n            ],\r\n            \"description\": \"TerriaJS is an open-source framework for web-based geospatial catalogue explorers.\",\r\n            \"website\": \"https://terria.io/\"\r\n        },\r\n        \"Tessitura\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!--[^\\u003e]+tessitura version: (\\\\d*\\\\.\\\\d*\\\\.\\\\d*)?\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"IIS\",\r\n                \"Microsoft ASP.NET\",\r\n                \"Windows Server\"\r\n            ],\r\n            \"website\": \"https://www.tessituranetwork.com\"\r\n        },\r\n        \"TestFreaks\": {\r\n            \"cats\": [\r\n                90\r\n            ],\r\n            \"js\": [\r\n                \"applytestfreaks\",\r\n                \"testfreaks\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.testfreaks\\\\.com/\"\r\n            ],\r\n            \"description\": \"TestFreaks is an impartial source that provides product and seller review content for ecommerce websites.\",\r\n            \"website\": \"https://www.testfreaks.com\"\r\n        },\r\n        \"Texthelp\": {\r\n            \"cats\": [\r\n                68\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"browsealoud\\\\.com/.*/browsealoud\\\\.js\"\r\n            ],\r\n            \"description\": \"TextHelp is a literacy, accessibility and dyslexia software developer for people with reading and writing difficulties.\",\r\n            \"website\": \"https://www.texthelp.com/en-gb/products/browsealoud/\"\r\n        },\r\n        \"Textpattern CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"textpattern\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://textpattern.com\"\r\n        },\r\n        \"The Arena Group\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^tempest\\\\s-\\\\smaven\\\\.io$\"\r\n                ]\r\n            },\r\n            \"description\": \"The Arena Group is a media coalition of professional content destinations. It operates on a shared digital publishing, advertising, and distribution platform, providing a major media-scale alternative to news and information distributed on social platforms.\",\r\n            \"website\": \"https://thearenagroup.net\"\r\n        },\r\n        \"The Church Co\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^thechurchco\\\\s([\\\\d\\\\.]+)$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"The Church Co is a church-focused website development platform that provides tools and features specifically designed to support the growth and online presence of churches and religious organisations.\",\r\n            \"website\": \"https://thechurchco.com\"\r\n        },\r\n        \"The Events Calendar\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"tribe_l10n_datatables\",\r\n                \"tribecalendar\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/the-events-calendar(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"The Events Calendar is a free event management plugin for WordPress.\",\r\n            \"website\": \"https://theeventscalendar.com\"\r\n        },\r\n        \"The Hotels Network\": {\r\n            \"cats\": [\r\n                10,\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"thn.data.version\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.thehotelsnetwork\\\\.com\",\r\n                \"content-security-policy-report-only\": \"\\\\.thehotelsnetwork\\\\.com\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"\\\\.thehotelsnetwork\\\\.com/\"\r\n            ],\r\n            \"description\": \"The Hotels Network provides a SaaS software that enhances hotelier websites with predictive marketing personalisation and user behavior analytics.\",\r\n            \"website\": \"https://thehotelsnetwork.com\"\r\n        },\r\n        \"The SEO Framework\": {\r\n            \"cats\": [\r\n                54,\r\n                87\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!--[^\\u003e]+the seo framework by sybre waaijer\"\r\n            ],\r\n            \"description\": \"The SEO Framework is the only WordPress plugin that can intelligently generate critical SEO meta tags by reading your WordPress environment.\",\r\n            \"website\": \"https://theseoframework.com\"\r\n        },\r\n        \"The Theme Foundry Make\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"makedynamicstylesheet\",\r\n                \"makefrontend\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/make(?:-child)?/.+frontend\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Make is a free, open-source builder WordPress theme by The Theme Foundry.\",\r\n            \"website\": \"https://thethemefoundry.com/wordpress-themes/make\"\r\n        },\r\n        \"The.com\": {\r\n            \"cats\": [\r\n                18,\r\n                51\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"the-dotcom-public-cdn\\\\.s3\\\\.amazonaws\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Amazon S3\",\r\n                \"React\"\r\n            ],\r\n            \"description\": \"The.com is a low-code website building platform with community-created components that you can share and own.\",\r\n            \"website\": \"https://www.the.com\"\r\n        },\r\n        \"Thefork\": {\r\n            \"cats\": [\r\n                93\r\n            ],\r\n            \"description\": \"Thefork is a restaurant booking, managing system.\",\r\n            \"website\": \"https://www.thefork.com\"\r\n        },\r\n        \"Thelia\": {\r\n            \"cats\": [\r\n                1,\r\n                6\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c(?:link|style|script)[^\\u003e]+/assets/frontoffice/\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\",\r\n                \"Symfony\"\r\n            ],\r\n            \"website\": \"https://thelia.net\"\r\n        },\r\n        \"Theme Freesia Edge\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"edge_slider_value\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/edge(?:-plus)?/\"\r\n            ],\r\n            \"description\": \"Edge is a responsive blogger WordPress theme by Theme Freesia.\",\r\n            \"website\": \"https://themefreesia.com/themes/edge\"\r\n        },\r\n        \"Theme Freesia Photograph\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/photograph(?:-plus)?/\"\r\n            ],\r\n            \"description\": \"Photograph is a WordPress theme exclusively built for photographer, blogger, portfolio, photography agency or photo studio websites.\",\r\n            \"website\": \"https://themefreesia.com/themes/Photograph\"\r\n        },\r\n        \"Theme Freesia ShoppingCart\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"shoppingcart_slider_value\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/shoppingcart(?:-plus)?/\"\r\n            ],\r\n            \"description\": \"ShoppingCart is a WordPress theme especially build for store and ecommerce by Theme Freesia.\",\r\n            \"website\": \"https://themefreesia.com/themes/shoppingcart\"\r\n        },\r\n        \"Theme Horse Attitude\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/attitude(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"Attitude is a simple, clean and responsive retina ready WordPress theme by Theme Horse.\",\r\n            \"website\": \"https://www.themehorse.com/themes/attitude\"\r\n        },\r\n        \"Theme Horse NewsCard\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/newscard(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"NewsCard is a multi-purpose magazine/news WordPress theme by Theme Horse.\",\r\n            \"website\": \"https://www.themehorse.com/themes/newscard\"\r\n        },\r\n        \"Theme Vision Agama\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"agama\",\r\n                \"agama_pro\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/agama(?:-pro)?/.+functions\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Agama is a free multi-purpose WordPress theme by Theme Vision.\",\r\n            \"website\": \"https://theme-vision.com/agama\"\r\n        },\r\n        \"Theme4Press Evolve\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"evolve_js_local_vars\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/evolve(?:-plus)?/\"\r\n            ],\r\n            \"description\": \"Theme4Press Evolve is an multipurpose and minimal WordPress theme.\",\r\n            \"website\": \"https://theme4press.com/evolve-multipurpose-wordpress-theme\"\r\n        },\r\n        \"ThemeGrill Accelerate\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/accelerate(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"ThemeGrill Accelerate is free minimal WordPress theme.\",\r\n            \"website\": \"https://themegrill.com/themes/accelerate\"\r\n        },\r\n        \"ThemeGrill Cenote\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/cenote(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"ThemeGrill Cenote is a creative blogging WordPress theme, fully compatible with WooCommerce and popular page builders.\",\r\n            \"website\": \"https://themegrill.com/themes/cenote\"\r\n        },\r\n        \"ThemeGrill ColorMag\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/colormag(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"ThemeGrill ColorMag is most popular magazine-newspaper style WordPress theme.\",\r\n            \"website\": \"https://themegrill.com/themes/colormag\"\r\n        },\r\n        \"ThemeGrill Flash\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/flash(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"ThemeGrill Flash is one of the most flexible multipurpose WordPress themes.\",\r\n            \"website\": \"https://themegrill.com/themes/flash\"\r\n        },\r\n        \"ThemeGrill Radiate\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"radiatescriptparam\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/radiate(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"ThemeGrill Radiate is a simple and minimal WordPress theme focused on blogging.\",\r\n            \"website\": \"https://themegrill.com/themes/radiate\"\r\n        },\r\n        \"ThemeGrill Spacious\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"spacious_slider_value\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/spacious(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"ThemeGrill Spacious is beautiful small to medium business responsive WordPress theme.\",\r\n            \"website\": \"https://themegrill.com/themes/spacious\"\r\n        },\r\n        \"ThemeGrill eStore\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/e(?:s|s)tore(?:-pro)?/\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"estore v\\\\.([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Cart Functionality\"\r\n            ],\r\n            \"description\": \"ThemeGrill eStore is one of the most popular WooCommerce integrated WordPress themes.\",\r\n            \"website\": \"https://themegrill.com/themes/estore\"\r\n        },\r\n        \"ThemeIsle Menu Icons\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"description\": \"ThemeIsle Menu Icons plugin gives you the ability to add icons to your menu items, similar to the look of the latest dashboard menu.\",\r\n            \"website\": \"https://wordpress.org/plugins/menu-icons\"\r\n        },\r\n        \"ThemeZee Donovan\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"donovan_menu_title\",\r\n                \"donovanscreenreadertext\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/donovan/\"\r\n            ],\r\n            \"description\": \"ThemeZee Donovan is a flexible, yet easy-to-use blogging WordPress theme.\",\r\n            \"website\": \"https://themezee.com/themes/donovan\"\r\n        },\r\n        \"ThemeZee Poseidon\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"poseidonscreenreadertext\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/poseidon/\"\r\n            ],\r\n            \"description\": \"ThemeZee Poseidon is an elegant designed WordPress theme featuring a splendid fullscreen image slideshow.\",\r\n            \"website\": \"https://themezee.com/themes/poseidon\"\r\n        },\r\n        \"ThemeZee Wellington\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"wellingtonscreenreadertext\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/wellington/\"\r\n            ],\r\n            \"description\": \"Wellington is a clean and simple magazine WordPress theme by ThemeZee.\",\r\n            \"website\": \"https://themezee.com/themes/wellington\"\r\n        },\r\n        \"Themeansar Newsberg\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"description\": \"Themeansar Newsberg is a fast, clean, modern-looking, responsive news magazine WordPress theme.\",\r\n            \"website\": \"https://themeansar.com/free-themes/newsberg\"\r\n        },\r\n        \"Themeansar Newsup\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/newsup(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"Themeansar Newsup is a fast, clean, modern-looking responsive news magazine WordPress theme.\",\r\n            \"website\": \"https://themeansar.com/free-themes/newsup\"\r\n        },\r\n        \"Themebeez Cream Magazine\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"cream_magazine_script_obj\"\r\n            ],\r\n            \"description\": \"Cream Magazine is a news and magazine WordPress theme by Themebeez.\",\r\n            \"website\": \"https://themebeez.com/themes/cream-magazine\"\r\n        },\r\n        \"Themebeez Orchid Store\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"orchid_store_obj\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/orchid-store(?:-child)?/.+bundle\\\\.min\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Orchid Store is a clean, flexible, stylish and dynamic ecommerce WordPress theme by Themebeez.\",\r\n            \"website\": \"https://themebeez.com/themes/orchid-store\"\r\n        },\r\n        \"Themegraphy Graphy\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/graphy(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"Themegraphy Graphy is now compatible with WordPress 5.0 and Gutenberg blog-oriented WordPress theme.\",\r\n            \"website\": \"https://themegraphy.com/wordpress-themes/graphy\"\r\n        },\r\n        \"Themes4Wp Bulk\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/bulk(?:-pro)?/.+customscript\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Themes4Wp Bulk is a modern and responsive multipurpose WordPress theme.\",\r\n            \"website\": \"https://themes4wp.com/theme/bulk\"\r\n        },\r\n        \"ThemezHut Bam\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/bam(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"ThemezHut Bam is a great flexible WordPress theme for blogging sites.\",\r\n            \"website\": \"https://themezhut.com/themes/bam\"\r\n        },\r\n        \"ThemezHut HitMag\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/hitmag(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"ThemezHut HitMag is a stylish and powerful WordPress theme crafted for magazines, newspapers or personal blogs.\",\r\n            \"website\": \"https://themezhut.com/themes/hitmag\"\r\n        },\r\n        \"Themonic Iconic One\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/iconic-one(?:-[\\\\w]+)?/\"\r\n            ],\r\n            \"description\": \"Themonic Iconic One is a premium quality WordPress theme with pixel perfect typography and responsiveness and is built for speed.\",\r\n            \"website\": \"https://themonic.com/iconic-one\"\r\n        },\r\n        \"Thesis\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"thix.history\",\r\n                \"thix.t\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"thix\\\\.ttsep\\\\.com/\"\r\n            ],\r\n            \"description\": \"Thesis is a conversion rate optimisation company.\",\r\n            \"website\": \"https://www.thesistesting.com\"\r\n        },\r\n        \"ThimPress Course Review\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"description\": \"Course Review is a WordPress plugin by ThimPress. Course Review gives students the opportunity to evaluate and provide feedback in order to improve the course.\",\r\n            \"website\": \"https://wordpress.org/plugins/learnpress-course-review\"\r\n        },\r\n        \"ThimPress Course Wishlist\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"description\": \"Course Wishlist is a WordPress plugin by ThimPress. Course Wishlist bring wishlist feature for LearnPress.\",\r\n            \"website\": \"https://wordpress.org/plugins/learnpress-wishlist\"\r\n        },\r\n        \"ThimPress Gradebook\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"description\": \"Gradebook is a WordPress plugin by ThimPress. Gradebook add-on for LearnPress makes it easier to track the students learning progress and result.\",\r\n            \"website\": \"https://thimpress.com/product/gradebook-add-on-for-learnpress\"\r\n        },\r\n        \"ThimPress LearnPress\": {\r\n            \"cats\": [\r\n                87,\r\n                21\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/learnpress/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"LearnPress is a WordPress LMS plugin by ThimPress.\",\r\n            \"website\": \"https://wordpress.org/plugins/learnpress\"\r\n        },\r\n        \"Thimatic\": {\r\n            \"cats\": [\r\n                90,\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"thimatic-apps\\\\.com/product_review/.*?v=([\\\\d.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Thimatic is a Shopify app for product reviews.\",\r\n            \"website\": \"https://thimatic-apps.com/\"\r\n        },\r\n        \"Think Up Themes Consulting\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/consulting(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"Think Up Themes Consulting is a multipurpose WordPress theme that is available for free download and also offers a pro version.\",\r\n            \"website\": \"https://www.thinkupthemes.com/themes/consulting\"\r\n        },\r\n        \"Think Up Themes Minamaze\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/minamaze(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"Think Up Themes Minamaze is a multipurpose WordPress theme that is available for free download and also offers a pro version.\",\r\n            \"website\": \"https://www.thinkupthemes.com/themes/minamaze\"\r\n        },\r\n        \"ThinkPHP\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"cookies\": {\r\n                \"thinkphp_show_page_trace\": \"\"\r\n            },\r\n            \"headers\": {\r\n                \"x-powered-by\": \"thinkphp\"\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"ThinkPHP is an open-source PHP framework with MVC structure developed and maintained by Shanghai Topthink Company.\",\r\n            \"website\": \"https://www.thinkphp.cn\",\r\n            \"cpe\": \"cpe:2.3:a:thinkphp:thinkphp:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Thinkific\": {\r\n            \"cats\": [\r\n                21\r\n            ],\r\n            \"cookies\": {\r\n                \"_thinkific_session\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"thinkific\",\r\n                \"thinkificanalytics\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn(?:-themes)?\\\\.thinkific\\\\.com\"\r\n            ],\r\n            \"description\": \"Thinkific is a software platform that enables entrepreneurs to create, market, sell, and deliver their own online courses.\",\r\n            \"website\": \"https://www.thinkific.com\"\r\n        },\r\n        \"ThreatMetrix\": {\r\n            \"cats\": [\r\n                16,\r\n                83\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.online-metrix\\\\.net\"\r\n            ],\r\n            \"description\": \"LexisNexis ThreatMetrix is an enterprise solution for online risk and fraud protection ('digital identity intelligence and digital authentication').\",\r\n            \"website\": \"https://risk.lexisnexis.com/products/threatmetrix\"\r\n        },\r\n        \"Three.js\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"__three__\",\r\n                \"three.revision\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"three(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"description\": \"Three.js is a cross-browser JavaScript library and application programming interface used to create and display animated 3D computer graphics in a web browser using WebGL.\",\r\n            \"website\": \"https://threejs.org\"\r\n        },\r\n        \"Threekit\": {\r\n            \"cats\": [\r\n                105,\r\n                95\r\n            ],\r\n            \"js\": [\r\n                \"threekit.configuratorform\",\r\n                \"threekitar\",\r\n                \"threekitplayer\"\r\n            ],\r\n            \"description\": \"Threekit is a visual customer experience solution that enables brands to create, manage and scale photorealistic images and 3D product visuals, all from a single design file.\",\r\n            \"website\": \"https://www.threekit.com\"\r\n        },\r\n        \"Thrive Apprentice\": {\r\n            \"cats\": [\r\n                87,\r\n                21\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/thrive-apprentice/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Thrive Apprentice is a WordPress plugin for creating online courses and also a membership plugin.\",\r\n            \"website\": \"https://thrivethemes.com/apprentice/\"\r\n        },\r\n        \"Thrive Architect\": {\r\n            \"cats\": [\r\n                87,\r\n                51\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/thrive-visual-editor/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Thrive Architect is the visual page builder for WordPress.\",\r\n            \"website\": \"https://thrivethemes.com/architect/\"\r\n        },\r\n        \"Thrive Comments\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/thrive-comments/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Thrive Comments plugin replaces the standard WordPress comments from your website.\",\r\n            \"website\": \"https://thrivethemes.com/comments/\"\r\n        },\r\n        \"Thrive Leads\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/thrive-leads/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Thrive Leads is an all-in-one email list building plugin for WordPress.\",\r\n            \"website\": \"https://thrivethemes.com/leads/\"\r\n        },\r\n        \"Thrive Quiz Builder\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/thrive-quiz-builder/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Thrive Quiz Builder is a powerful WordPress plugin that can help you to create quizzes for your website or blog.\",\r\n            \"website\": \"https://thrivethemes.com/quizbuilder\"\r\n        },\r\n        \"Thrive Ultimatum\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/thrive-ultimatum/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Thrive Ultimatum is a WordPress scarcity marketing plugin with built-in templates and campaign tracking tools from developer Thrive Themes.\",\r\n            \"website\": \"https://thrivethemes.com/ultimatum/\"\r\n        },\r\n        \"ThriveCart\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"thrivecart\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"thrivecart\\\\.js\"\r\n            ],\r\n            \"description\": \"ThriveCart is a sales cart solution that lets you create checkout pages for your online products and services.\",\r\n            \"website\": \"https://thrivecart.com\"\r\n        },\r\n        \"Ticimax\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.ticimax\\\\.com/\"\r\n            ],\r\n            \"website\": \"https://www.ticimax.com\"\r\n        },\r\n        \"Tictail\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]*tictail\\\\.com\"\r\n            ],\r\n            \"website\": \"https://tictail.com\"\r\n        },\r\n        \"TiddlyWiki\": {\r\n            \"cats\": [\r\n                1,\r\n                2,\r\n                4,\r\n                8\r\n            ],\r\n            \"js\": [\r\n                \"tiddler\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c[^\\u003e]*type=[^\\u003e]text\\\\/vnd\\\\.tiddlywiki\"\r\n            ],\r\n            \"meta\": {\r\n                \"application-name\": [\r\n                    \"^tiddlywiki$\"\r\n                ],\r\n                \"copyright\": [\r\n                    \"^tiddlywiki created by jeremy ruston\"\r\n                ],\r\n                \"generator\": [\r\n                    \"^tiddlywiki$\"\r\n                ],\r\n                \"tiddlywiki-version\": [\r\n                    \"^(.+)$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"TiddlyWiki is an open-source notebook for capturing, organising and sharing complex information.\",\r\n            \"website\": \"https://tiddlywiki.com\"\r\n        },\r\n        \"Tidio\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"tidiochatapi\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"code\\\\.tidio\\\\.co\"\r\n            ],\r\n            \"description\": \"Tidio is a customer communication product. It provides multi-channel support so users can communicate with customers on the go. Live chat, messenger, or email are all supported.\",\r\n            \"website\": \"https://www.tidio.com\"\r\n        },\r\n        \"Tiendanube\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"ls.store.url\"\r\n            ],\r\n            \"description\": \"Tiendanube is an ecommerce platform.\",\r\n            \"website\": \"https://www.tiendanube.com\"\r\n        },\r\n        \"Tiiny Host\": {\r\n            \"cats\": [\r\n                62\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?://|\\\\.)tiiny\\\\.(?:host|site)/\"\r\n            ],\r\n            \"description\": \"Tiiny Host is a web hosting service for static sites with support for custom domains, SSL, password protection, and built-in analytics.\",\r\n            \"website\": \"https://tiiny.host\"\r\n        },\r\n        \"TikTok Pixel\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"tiktokanalyticsobject\"\r\n            ],\r\n            \"website\": \"https://ads.tiktok.com\"\r\n        },\r\n        \"Tiki Wiki CMS Groupware\": {\r\n            \"cats\": [\r\n                1,\r\n                2,\r\n                8,\r\n                11,\r\n                13\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:/|_)tiki\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^tiki\"\r\n                ]\r\n            },\r\n            \"description\": \"Tiki Wiki is a free and open-source wiki-based content management system and online office suite written primarily in PHP.\",\r\n            \"website\": \"https://tiki.org\"\r\n        },\r\n        \"Tiktak Pro\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"author\": [\r\n                    \"^tiktak-themes$\"\r\n                ]\r\n            },\r\n            \"description\": \"Tiktak Pro is an all-in-one ecommerce platform from Tunisia.\",\r\n            \"website\": \"https://tiktakpro.tn\"\r\n        },\r\n        \"Tilda\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]* href=[^\\u003e]+tilda(?:cdn|\\\\.ws|-blocks)\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"tilda(?:cdn|\\\\.ws|-blocks)\"\r\n            ],\r\n            \"description\": \"Tilda is a web design tool.\",\r\n            \"website\": \"https://tilda.cc\"\r\n        },\r\n        \"Tiledesk\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"tiledesk\",\r\n                \"tiledesk\",\r\n                \"tiledeskasyncinit\",\r\n                \"tiledesksettings\"\r\n            ],\r\n            \"description\": \"Tiledesk is the full-stack open-source Live Chat with built-in Chatbots, written in Node.js and Angular.\",\r\n            \"website\": \"https://tiledesk.com\"\r\n        },\r\n        \"Timeplot\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"timeplot\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"timeplot.*\\\\.js\"\r\n            ],\r\n            \"website\": \"https://www.simile-widgets.org/timeplot/\"\r\n        },\r\n        \"Timify\": {\r\n            \"cats\": [\r\n                72\r\n            ],\r\n            \"js\": [\r\n                \"timifywidget\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.timify\\\\.com/\"\r\n            ],\r\n            \"description\": \"Timify is an online scheduling and resource management software for small, medium and large businesses.\",\r\n            \"website\": \"https://www.timify.com\"\r\n        },\r\n        \"Tiny Slider\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:/([\\\\d\\\\.]+)/min/)?tiny-slider(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Tiny Slider is a vanilla javascript slider for all purposes.\",\r\n            \"website\": \"https://github.com/ganlanyuan/tiny-slider\"\r\n        },\r\n        \"TinyMCE\": {\r\n            \"cats\": [\r\n                24\r\n            ],\r\n            \"js\": [\r\n                \"tinymce\",\r\n                \"tinymce.majorversion\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/tiny_?mce(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"description\": \"TinyMCE is an online rich-text editor released as open-source software. TinyMCE is designed to integrate with JavaScript libraries, Vue.js, and AngularJS as well as content management systems such as Joomla!, and WordPress.\",\r\n            \"website\": \"https://www.tiny.cloud/tinymce/\",\r\n            \"cpe\": \"cpe:2.3:a:tiny:tinymce:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Tinybird\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"tinybird\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.tinybird.co/js/index\\\\.js\"\r\n            ],\r\n            \"description\": \"Tinybird is a cloud-native data processing platform that allows developers and data teams to build real-time data pipelines and perform complex data transformations and analysis at scale.\",\r\n            \"website\": \"https://www.tinybird.co/\"\r\n        },\r\n        \"Tippy.js\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"tippy.defaultprops\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/tippy\\\\.js(?:@|/)?([\\\\d\\\\.]+)?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Tippy.js is the complete tooltip, popover, dropdown, and menu solution for the web, powered by Popper.\",\r\n            \"website\": \"https://atomiks.github.io/tippyjs\"\r\n        },\r\n        \"Tipsa\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"TIPSA is a parcel delivery company in Spain, Portugal and Andorra.\",\r\n            \"website\": \"https://www.tip-sa.com\"\r\n        },\r\n        \"Tiqets\": {\r\n            \"cats\": [\r\n                5,\r\n                71\r\n            ],\r\n            \"js\": [\r\n                \"__tiqets_loader_reinit\"\r\n            ],\r\n            \"description\": \"Tiqets provides a complete overview of a city - museums, attractions, zoos, canal cruises, concerts. Publishers joined to the Tiqets affiliate program can receive 6% commission during our 30-day cookie window from completed total bookings resulting from featuring links to Tiqets products and content across their brand: blog/website, social media, newsletters, etc.\",\r\n            \"website\": \"https://www.tiqets.com/affiliate\"\r\n        },\r\n        \"Tistory\": {\r\n            \"cats\": [\r\n                1,\r\n                11\r\n            ],\r\n            \"js\": [\r\n                \"tistoryblog\"\r\n            ],\r\n            \"description\": \"Tistory is a South Korean blog-publishing service that allows private or multi-user blogs.\",\r\n            \"website\": \"https://tistory.com\"\r\n        },\r\n        \"Titan\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"titan\",\r\n                \"titanenabled\"\r\n            ],\r\n            \"website\": \"https://titan360.com\"\r\n        },\r\n        \"Tolt\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"js\": [\r\n                \"tolt_referral\",\r\n                \"toltapi\",\r\n                \"toltio\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.tolt\\\\.io/\"\r\n            ],\r\n            \"description\": \"Tolt is an affiliate marketing software designed for SaaS startups.\",\r\n            \"website\": \"https://tolt.io\"\r\n        },\r\n        \"TomTom Maps\": {\r\n            \"cats\": [\r\n                35\r\n            ],\r\n            \"js\": [\r\n                \"tomtom.map\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"api\\\\.tomtom\\\\.com\"\r\n            ],\r\n            \"description\": \"TomTom Maps is a web mapping service.\",\r\n            \"website\": \"https://www.tomtom.com\"\r\n        },\r\n        \"TomatoCart\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"ajaxshoppingcart\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"tomatocart\"\r\n                ]\r\n            },\r\n            \"website\": \"https://tomatocart.com\"\r\n        },\r\n        \"TornadoServer\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"tornadoserver(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"website\": \"https://tornadoweb.org\"\r\n        },\r\n        \"TotalCode\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^totalcode$\"\r\n            },\r\n            \"website\": \"https://www.totalcode.com\"\r\n        },\r\n        \"Totango\": {\r\n            \"cats\": [\r\n                97\r\n            ],\r\n            \"js\": [\r\n                \"totango\",\r\n                \"totangoloader\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.amazonaws\\\\.com/totango-cdn/totango\\\\d\\\\.js\",\r\n                \"\\\\.totango\\\\.com/totango([\\\\d\\\\.]+)\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Totango is a customer success platform that helps recurring revenue businesses simplify the complexities of customer success by connecting the dots of customer data, actively monitoring customer health changes, and driving proactive engagements.\",\r\n            \"website\": \"https://www.totango.com\"\r\n        },\r\n        \"Totara\": {\r\n            \"cats\": [\r\n                21\r\n            ],\r\n            \"cookies\": {\r\n                \"totarasession\": \"\"\r\n            },\r\n            \"description\": \"Totara is a learning management system designed for businesses.\",\r\n            \"website\": \"https://www.totaralearning.com\"\r\n        },\r\n        \"Touch2Success\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"content\": [\r\n                    \"^touch2success$\"\r\n                ]\r\n            },\r\n            \"description\": \"Touch2Success is a fully featured restaurant POS software designed to serve startups, enterprises.\",\r\n            \"website\": \"https://www.touch2success.com\"\r\n        },\r\n        \"TownNews\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"tncms\",\r\n                \"tnstats_tracker\",\r\n                \"tntracker\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-tncms\": \"\"\r\n            },\r\n            \"description\": \"TownNews is a CMS platform built for local media organizations.\",\r\n            \"website\": \"https://townnews.com/\"\r\n        },\r\n        \"Trac\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"html\": [\r\n                \"\\u003ca id=\\\"tracpowered\",\r\n                \"powered by \\u003ca href=\\\"[^\\\"]*\\\"\\u003e\\u003cstrong\\u003etrac(?:[ /]([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"Python\"\r\n            ],\r\n            \"website\": \"https://trac.edgewall.org\"\r\n        },\r\n        \"TrackJs\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"trackjs\",\r\n                \"trackjs\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.trackjs\\\\.com\"\r\n            ],\r\n            \"description\": \"TrackJS is an error monitoring agent for production web sites and applications.\",\r\n            \"website\": \"https://trackjs.com\"\r\n        },\r\n        \"Trackify X\": {\r\n            \"cats\": [\r\n                100,\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"trackifyx\\\\.redretarget\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Trackify X is a pixel engine that helps merchants backup their pixel data and manage multiple pixels.\",\r\n            \"website\": \"https://trackifyapp.com\"\r\n        },\r\n        \"Tradedoubler\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"swrap\\\\.tradedoubler\\\\.com\"\r\n            ],\r\n            \"description\": \"Tradedoubler is a global affiliate marketing network.\",\r\n            \"website\": \"https://www.tradedoubler.com/\"\r\n        },\r\n        \"TradingView\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"description\": \"TradingView is used to show world chart, chats and trades markets.\",\r\n            \"website\": \"https://www.tradingview.com\"\r\n        },\r\n        \"Traek\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"traek\"\r\n            ],\r\n            \"description\": \"Traek is a website insights, analytics and lead generation tool.\",\r\n            \"website\": \"https://www.traek.io\"\r\n        },\r\n        \"TrafficStars\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.tsyndicate\\\\.com/\"\r\n            ],\r\n            \"description\": \"TrafficStars is a self-served ad network and ad exchange that operates mainly in adult-related verticals.\",\r\n            \"website\": \"https://trafficstars.com\"\r\n        },\r\n        \"Transcend\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"js\": [\r\n                \"transcend\"\r\n            ],\r\n            \"description\": \"Transcend is data privacy management compliance platform.\",\r\n            \"website\": \"https://www.transcend.io\"\r\n        },\r\n        \"Transcy\": {\r\n            \"cats\": [\r\n                89,\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"_transcy\",\r\n                \"transcy_apiuri\",\r\n                \"transcy_shopifylocales\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Transcy is a Shopify translation app. Transcy allows you to translate your whole store content into target languages to reach different nation shoppers.\",\r\n            \"website\": \"https://transcy.io\"\r\n        },\r\n        \"Transifex\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"transifex.live.lib_version\"\r\n            ],\r\n            \"website\": \"https://www.transifex.com\"\r\n        },\r\n        \"Transistor.fm\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"description\": \"Transistor.fm is a podcast host, distribution and management platform.\",\r\n            \"website\": \"https://transistor.fm\"\r\n        },\r\n        \"Translate WordPress\": {\r\n            \"cats\": [\r\n                87,\r\n                89\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/google-language-translator/.+scripts\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Translate WordPress is a website translator plugin which can translate any website to any language automatically. Translate WordPress plugin is now a part of GTranslate family.\",\r\n            \"website\": \"https://gtranslate.io\"\r\n        },\r\n        \"Transmart\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Transmart is a shipping company in Turkey.\",\r\n            \"website\": \"https://transmartshipping.com\"\r\n        },\r\n        \"Tray\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"tcdn\\\\.com\\\\.br\"\r\n            ],\r\n            \"description\": \"Tray is an all-in-one ecommerce platform from Brazil.\",\r\n            \"website\": \"https://www.tray.com.br\"\r\n        },\r\n        \"Trbo\": {\r\n            \"cats\": [\r\n                74,\r\n                76\r\n            ],\r\n            \"cookies\": {\r\n                \"trbo_session\": \"^(?:[\\\\d]+)$\",\r\n                \"trbo_usr\": \"^(?:[\\\\d\\\\w]+)$\"\r\n            },\r\n            \"js\": [\r\n                \"_trbo\",\r\n                \"_trbo_start\",\r\n                \"_trboq\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.trbo\\\\.com\"\r\n            ],\r\n            \"description\": \"Trbo is a personalisation, recommendations, A/B testing platform from Germany.\",\r\n            \"website\": \"https://www.trbo.com\"\r\n        },\r\n        \"Treasure Data\": {\r\n            \"cats\": [\r\n                97\r\n            ],\r\n            \"js\": [\r\n                \"treasure.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.treasuredata\\\\.com/\"\r\n            ],\r\n            \"description\": \"Treasure Data is the only enterprise customer data platform.\",\r\n            \"website\": \"https://www.treasuredata.com\"\r\n        },\r\n        \"Trengo\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"trengo.eventbus\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.widget\\\\.trengo\\\\.eu/\"\r\n            ],\r\n            \"description\": \"Trengo is an omnichannel communication platform that unifies all messaging channels into one single view.\",\r\n            \"website\": \"https://trengo.com\"\r\n        },\r\n        \"Triggerbee\": {\r\n            \"cats\": [\r\n                76,\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"triggerbee\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"t\\\\.myvisitors\\\\.se\"\r\n            ],\r\n            \"description\": \"Triggerbee is an onsite personalisation platform that lets you use customer and behavioral data to build and launch personalised campaigns.\",\r\n            \"website\": \"https://triggerbee.com\"\r\n        },\r\n        \"Trinity Audio\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"trinity_display\",\r\n                \"trinity_player\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//trinitymedia\\\\.ai/\"\r\n            ],\r\n            \"description\": \"Trinity Audio's AI-driven solutions help publishers and content creators create a world of smart audio experiences for their audiences, covering every stage of the audio journey from creation to distribution.\",\r\n            \"website\": \"https://www.trinityaudio.ai\"\r\n        },\r\n        \"Tripadviser.Widget\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"tripadvisor\\\\.[\\\\w]+/widgetembed\"\r\n            ],\r\n            \"description\": \"Tripadvisor embed reviews widget.\",\r\n            \"website\": \"https://www.tripadvisor.com/Widgets\"\r\n        },\r\n        \"Triple Whale\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"description\": \"The Triple Whale platform combines centralization, visualization, and attribution into a dashboard that presents and illustrates KPIs in an actionable way.\",\r\n            \"website\": \"https://triplewhale.com/\"\r\n        },\r\n        \"TripleLift\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"description\": \"TripleLift is an advertising technology company providing native programmatic to buyers and sellers.\",\r\n            \"website\": \"https://triplelift.com\"\r\n        },\r\n        \"Tritac Katana Commerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"powered-by\": [\r\n                    \"^katana\\\\scommerce$\"\r\n                ]\r\n            },\r\n            \"description\": \"Katana Commerce is Tritac's B2B and B2C ecommerce platform.\",\r\n            \"website\": \"https://www.tritac.com/nl/producten/katana-commerce/\"\r\n        },\r\n        \"Trix\": {\r\n            \"cats\": [\r\n                24\r\n            ],\r\n            \"js\": [\r\n                \"trix.version\"\r\n            ],\r\n            \"description\": \"Trix is an open-source project from Basecamp, the creators of Ruby on Rails.\",\r\n            \"website\": \"https://trix-editor.org\"\r\n        },\r\n        \"Trove Recommerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"headers\": {\r\n                \"x-trove-app-name\": \"\",\r\n                \"x-trove-country-code\": \"\",\r\n                \"x-trove-order-uuid\": \"\",\r\n                \"x-yerdle-app-name\": \"\"\r\n            },\r\n            \"description\": \"Trove (formerly Yerdle) builds white-label technology and end-to-end operations for ecommerce platforms.\",\r\n            \"website\": \"https://trove.co\"\r\n        },\r\n        \"TruValidate\": {\r\n            \"cats\": [\r\n                16,\r\n                83\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"ci-mpsnare\\\\.iovation\\\\.com\",\r\n                \"mpsnare\\\\.iesnare\\\\.com\"\r\n            ],\r\n            \"description\": \"TransUnion TruValidate (previously ReputationShield/IDVision from iovation) is an online risk and fraud detection platform.\",\r\n            \"website\": \"https://www.transunion.com/solution/truvalidate\"\r\n        },\r\n        \"True Fit\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.truefitcorp\\\\.com/(?:.+/([\\\\d\\\\.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"True Fit is a data-driven personalisation platform for footwear and apparel retailers.\",\r\n            \"website\": \"https://www.truefit.com\"\r\n        },\r\n        \"TrueCommerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.nexternal\\\\.com/\"\r\n            ],\r\n            \"description\": \"TrueCommerce is an eCommerce platform.\",\r\n            \"website\": \"https://www.truecommerce.com\"\r\n        },\r\n        \"Truepush\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"truepush\",\r\n                \"truepushversioninfo.key\"\r\n            ],\r\n            \"description\": \"Truepush is web-based push notification service available for PWA, AMP, WordPress, and Shopify.\",\r\n            \"website\": \"https://www.truepush.com\"\r\n        },\r\n        \"Trumba\": {\r\n            \"cats\": [\r\n                72\r\n            ],\r\n            \"js\": [\r\n                \"$trumba\",\r\n                \"$trumba.version\",\r\n                \"trumba\"\r\n            ],\r\n            \"description\": \"Trumba offers web-hosted event calendar software for publishing online, interactive, calendars of events.\",\r\n            \"website\": \"https://www.trumba.com\"\r\n        },\r\n        \"Trunkrs\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Trunkrs is a Dutch parcel delivery service.\",\r\n            \"website\": \"https://trunkrs.nl\"\r\n        },\r\n        \"TrustArc\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"consent\\\\.trustarc\\\\.com\"\r\n            ],\r\n            \"description\": \"TrustArc provides software and services to help corporations update their privacy management processes so they comply with government laws and best practices.\",\r\n            \"website\": \"https://trustarc.com\"\r\n        },\r\n        \"TrustYou\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"description\": \"TrustYou is guest feedback and hotel reputation software company located in Germany.\",\r\n            \"website\": \"https://www.trustyou.com\"\r\n        },\r\n        \"Trusted Shops\": {\r\n            \"cats\": [\r\n                90\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"widgets\\\\.trustedshops\\\\.com/\"\r\n            ],\r\n            \"description\": \"Trusted Shops is a company that acts as a 3'rd party representing the common interests of both consumers and retailers.\",\r\n            \"website\": \"https://www.trustedshops.co.uk\"\r\n        },\r\n        \"Trustindex\": {\r\n            \"cats\": [\r\n                90\r\n            ],\r\n            \"js\": [\r\n                \"trustindex\"\r\n            ],\r\n            \"description\": \"Trustindex is a review management tool that helps businesses effectively manage and monitor customer reviews.\",\r\n            \"website\": \"https://www.trustindex.io\"\r\n        },\r\n        \"Trustpilot\": {\r\n            \"cats\": [\r\n                90\r\n            ],\r\n            \"js\": [\r\n                \"trustpilot\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.trustpilot\\\\.com\"\r\n            ],\r\n            \"description\": \"Trustpilot is a Danish consumer review website which provide embed stand-alone applications in your website to show your most recent reviews, TrustScore, and star ratings.\",\r\n            \"website\": \"https://business.trustpilot.com\"\r\n        },\r\n        \"Trustspot\": {\r\n            \"cats\": [\r\n                90\r\n            ],\r\n            \"js\": [\r\n                \"trustspot_key\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"trustspot\\\\.io\"\r\n            ],\r\n            \"description\": \"TrustSpot provides a solution to capture ratings \\u0026 reviews, video testimonials, photos, social experiences, and product Q\\u0026A.\",\r\n            \"website\": \"https://trustspot.io/\"\r\n        },\r\n        \"Trustvox\": {\r\n            \"cats\": [\r\n                90\r\n            ],\r\n            \"js\": [\r\n                \"_trustvox\",\r\n                \"_trustvox_colt\",\r\n                \"_trustvox_shelf_rate\",\r\n                \"trustvox_id\",\r\n                \"trustvoxcertificatewidget\",\r\n                \"trustvoxrateswidget\"\r\n            ],\r\n            \"description\": \"Trustvox collects reviews from customers who purchased ecommerce products and publishes them on product pages with Sincerity Seals.\",\r\n            \"website\": \"https://site.trustvox.com.br\"\r\n        },\r\n        \"TryNow\": {\r\n            \"cats\": [\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"trynowcheckout\",\r\n                \"trynowconfig\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.trynow\\\\.net/shopify/([\\\\d\\\\.]+)/\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"TryNow is an ecommerce platform designed to offer a try before you buy experience for shoppers.\",\r\n            \"website\": \"https://www.trynow.io\"\r\n        },\r\n        \"Tumblr\": {\r\n            \"cats\": [\r\n                11\r\n            ],\r\n            \"headers\": {\r\n                \"x-tumblr-user\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003ciframe src=\\\"[^\\u003e]+tumblr\\\\.com\"\r\n            ],\r\n            \"description\": \"Tumblr is a microblogging and social networking website. The service allows users to post multimedia and other content to a short-form blog.\",\r\n            \"website\": \"https://www.tumblr.com\"\r\n        },\r\n        \"Turbo\": {\r\n            \"cats\": [\r\n                92\r\n            ],\r\n            \"js\": [\r\n                \"turbo\"\r\n            ],\r\n            \"description\": \"Turbo is a JavaScript framework for building fast web applications.\",\r\n            \"website\": \"https://turbo.hotwired.dev/\"\r\n        },\r\n        \"Turbolinks\": {\r\n            \"cats\": [\r\n                92\r\n            ],\r\n            \"js\": [\r\n                \"turbolinks\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"turolinks\\\\.js\"\r\n            ],\r\n            \"description\": \"Turbolinks is a Rails feature, available as a gem and enabled by default in new Rails apps. It is intended to speed up navigating between pages of your application.\",\r\n            \"website\": \"https://github.com/turbolinks/turbolinks\"\r\n        },\r\n        \"TurfJS\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"turf.feature\",\r\n                \"turf.point\",\r\n                \"turf.random\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(turf@[\\\\d.]+)?/?turf\\\\.min\\\\.js\"\r\n            ],\r\n            \"description\": \"Turf is a modular geospatial engine written in JavaScript.\",\r\n            \"website\": \"https://turfjs.org/\"\r\n        },\r\n        \"Twenty Eleven\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"description\": \"Twenty Eleven is the default WordPress theme for 2011.\",\r\n            \"website\": \"https://wordpress.org/themes/twentyeleven\"\r\n        },\r\n        \"Twenty Fifteen\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/twentyfifteen/\"\r\n            ],\r\n            \"description\": \"Twenty Fifteen is the default WordPress theme for 2015.\",\r\n            \"website\": \"https://wordpress.org/themes/twentyfifteen\"\r\n        },\r\n        \"Twenty Fourteen\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/twentyfourteen/\"\r\n            ],\r\n            \"description\": \"Twenty Fourteen is the default WordPress theme for 2014.\",\r\n            \"website\": \"https://wordpress.org/themes/twentyfourteen\"\r\n        },\r\n        \"Twenty Nineteen\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/twentynineteen/\"\r\n            ],\r\n            \"description\": \"Twenty Nineteen is the default WordPress theme for 2019.\",\r\n            \"website\": \"https://wordpress.org/themes/twentynineteen\"\r\n        },\r\n        \"Twenty Seventeen\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"twentyseventeenscreenreadertext\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/twentyseventeen/\"\r\n            ],\r\n            \"description\": \"Twenty Seventeen is the default WordPress theme for 2017.\",\r\n            \"website\": \"https://wordpress.org/themes/twentyseventeen\"\r\n        },\r\n        \"Twenty Sixteen\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/twentysixteen/\"\r\n            ],\r\n            \"description\": \"Twenty Sixteen is the default WordPress theme for 2016.\",\r\n            \"website\": \"https://wordpress.org/themes/twentysixteen\"\r\n        },\r\n        \"Twenty Ten\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/twentyten/\"\r\n            ],\r\n            \"description\": \"Twenty Ten is the default WordPress theme for 2010.\",\r\n            \"website\": \"https://wordpress.org/themes/twentyten\"\r\n        },\r\n        \"Twenty Thirteen\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/twentythirteen/\"\r\n            ],\r\n            \"description\": \"Twenty Thirteen is the default WordPress theme for 2013.\",\r\n            \"website\": \"https://wordpress.org/themes/twentythirteen\"\r\n        },\r\n        \"Twenty Twelve\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/twentytwelve/\"\r\n            ],\r\n            \"description\": \"Twenty Twelve is the default WordPress theme for 2012.\",\r\n            \"website\": \"https://wordpress.org/themes/twentytwelve\"\r\n        },\r\n        \"Twenty Twenty\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"twentytwenty\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/twentytwenty/\"\r\n            ],\r\n            \"description\": \"Twenty Twenty is the default WordPress theme for 2020.\",\r\n            \"website\": \"https://wordpress.org/themes/twentytwenty\"\r\n        },\r\n        \"Twenty Twenty-One\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"twentytwentyonecollapsemenuonclickoutside\",\r\n                \"twentytwentyoneresponsiveembeds\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/twentytwentyone/\"\r\n            ],\r\n            \"description\": \"Twenty Twenty-One is the default WordPress theme for 2021.\",\r\n            \"website\": \"https://wordpress.org/themes/twentytwentyone\"\r\n        },\r\n        \"Twenty Twenty-Three\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"description\": \"Twenty Twenty-Three is the default WordPress theme for 2023.\",\r\n            \"website\": \"https://wordpress.org/themes/twentytwentythree\"\r\n        },\r\n        \"Twenty Twenty-Two\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"description\": \"Twenty Twenty-Two is the default WordPress theme for 2022.\",\r\n            \"website\": \"https://wordpress.org/themes/twentytwentytwo\"\r\n        },\r\n        \"TwicPics\": {\r\n            \"cats\": [\r\n                31,\r\n                59\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^twicpics/\\\\d+\\\\.\\\\d+\\\\.\\\\d+$\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \".+\\\\.twic\\\\.pics\"\r\n            ],\r\n            \"description\": \"TwicPics offers on-demand responsive image generation.\",\r\n            \"website\": \"https://www.twicpics.com\"\r\n        },\r\n        \"Twik\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"twik_id\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.twik\\\\.io\"\r\n            ],\r\n            \"description\": \"Twik provides a automated, no-configuration business intelligence \\u0026 personalization automation engine.\",\r\n            \"website\": \"https://www.twik.io/\"\r\n        },\r\n        \"Twikoo\": {\r\n            \"cats\": [\r\n                15\r\n            ],\r\n            \"js\": [\r\n                \"twikoo.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/twikoo/dist/twikoo\\\\.all\\\\.min\\\\.js\"\r\n            ],\r\n            \"description\": \"Twikoo is a simple, safe, free comment system.\",\r\n            \"website\": \"https://twikoo.js.org\"\r\n        },\r\n        \"Twilight CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-cms\": \"twilight cms\"\r\n            },\r\n            \"website\": \"https://www.twilightcms.com\"\r\n        },\r\n        \"Twilio Authy\": {\r\n            \"cats\": [\r\n                69\r\n            ],\r\n            \"js\": [\r\n                \"authy\"\r\n            ],\r\n            \"description\": \"Twilio Authy provides Two-factor authentication (2FA) adds an additional layer of protection beyond passwords.\",\r\n            \"website\": \"https://authy.com\"\r\n        },\r\n        \"TwistPHP\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"twistphp\"\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://twistphp.com\"\r\n        },\r\n        \"TwistedWeb\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"twistedweb(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"website\": \"https://twistedmatrix.com/trac/wiki/TwistedWeb\"\r\n        },\r\n        \"Twitch Player\": {\r\n            \"cats\": [\r\n                14\r\n            ],\r\n            \"js\": [\r\n                \"twitch.player\"\r\n            ],\r\n            \"description\": \"Twitch is an American video live streaming service that focuses on video game live streaming, including broadcasts of esports competitions.\",\r\n            \"website\": \"https://dev.twitch.tv/docs/embed/video-and-clips/\"\r\n        },\r\n        \"Twitter\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//platform\\\\.twitter\\\\.com/widgets\\\\.js\"\r\n            ],\r\n            \"description\": \"Twitter is a 'microblogging' system that allows you to send and receive short posts called tweets.\",\r\n            \"website\": \"https://twitter.com\"\r\n        },\r\n        \"Twitter Ads\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"twttr\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"static\\\\.ads-twitter\\\\.com/uwt\\\\.js\"\r\n            ],\r\n            \"description\": \"Twitter Ads is an advertising platform for Twitter 'microblogging' system.\",\r\n            \"website\": \"https://ads.twitter.com\"\r\n        },\r\n        \"Twitter Analytics\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"analytics\\\\.twitter\\\\.com\"\r\n            ],\r\n            \"description\": \"Twitter Analytics is a built-in data-tracking platform that shows you insights specific to your Twitter account and activity.\",\r\n            \"website\": \"https://analytics.twitter.com\"\r\n        },\r\n        \"Twitter Emoji (Twemoji)\": {\r\n            \"cats\": [\r\n                17\r\n            ],\r\n            \"js\": [\r\n                \"twemoji\",\r\n                \"twemoji.base\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"twemoji(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"description\": \"Twitter Emoji is a set of open-source emoticons and emojis for Twitter, TweetDeck, and also for Android and iOS versions of the application.\",\r\n            \"website\": \"https://twitter.github.io/twemoji/\"\r\n        },\r\n        \"Twitter Flight\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"flight\"\r\n            ],\r\n            \"implies\": [\r\n                \"jQuery\"\r\n            ],\r\n            \"website\": \"https://flightjs.github.io/\"\r\n        },\r\n        \"Twitter typeahead.js\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"typeahead\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:typeahead|bloodhound)\\\\.(?:jquery|bundle)?(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"jQuery\"\r\n            ],\r\n            \"website\": \"https://twitter.github.io/typeahead.js\"\r\n        },\r\n        \"TypeDoc\": {\r\n            \"cats\": [\r\n                4\r\n            ],\r\n            \"implies\": [\r\n                \"TypeScript\"\r\n            ],\r\n            \"description\": \"TypeDoc is an API documentation generator for TypeScript projects.\",\r\n            \"website\": \"https://typedoc.org\"\r\n        },\r\n        \"TypePad\": {\r\n            \"cats\": [\r\n                11\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"typepad\"\r\n                ]\r\n            },\r\n            \"description\": \"Typepad is a blog hosting service.\",\r\n            \"website\": \"https://www.typepad.com\"\r\n        },\r\n        \"TypeScript\": {\r\n            \"cats\": [\r\n                27\r\n            ],\r\n            \"description\": \"TypeScript is an open-source language which builds on JavaScript  by adding static type definitions.\",\r\n            \"website\": \"https://www.typescriptlang.org\"\r\n        },\r\n        \"Typecho\": {\r\n            \"cats\": [\r\n                11\r\n            ],\r\n            \"js\": [\r\n                \"typechocomment\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"typecho( [\\\\d.]+)?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Typecho is a PHP Blogging Platform.\",\r\n            \"website\": \"https://typecho.org/\"\r\n        },\r\n        \"Typeform\": {\r\n            \"cats\": [\r\n                73\r\n            ],\r\n            \"js\": [\r\n                \"tf.createpopover\",\r\n                \"tf.createwidget\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"embed\\\\.typeform\\\\.com/\"\r\n            ],\r\n            \"description\": \"Typeform is a Spanish online software as a service (SaaS) company that specialises in online form building and online surveys.\",\r\n            \"website\": \"https://www.typeform.com\"\r\n        },\r\n        \"Typekit\": {\r\n            \"cats\": [\r\n                17\r\n            ],\r\n            \"js\": [\r\n                \"typekit.config.js\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink [^\\u003e]*href=\\\"[^\\\"]+use\\\\.typekit\\\\.(?:net|com)\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"use\\\\.typekit\\\\.com\"\r\n            ],\r\n            \"description\": \"Typekit is an online service which offers a subscription library of fonts.\",\r\n            \"website\": \"https://typekit.com\"\r\n        },\r\n        \"Typof\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"typof_session\": \"\\\\;confidence:50\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"portal/js/typof\\\\.js\\\\;confidence:50\"\r\n            ],\r\n            \"description\": \"Typof is an ecommerce platform for artisans that allows to create a premium website and sell items directly to the consumer.\",\r\n            \"website\": \"https://typof.com\"\r\n        },\r\n        \"Tyslo EasySell\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"opentysloform\",\r\n                \"tysloapplydiscount\",\r\n                \"tysloconfigversion\",\r\n                \"tysloeasysellconfig\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Tyslo EasySell replaces default Shopify checkout process by embedding (or popup) a simple order form on the product or cart page.\",\r\n            \"website\": \"https://tyslo.com\"\r\n        },\r\n        \"U-KOMI\": {\r\n            \"cats\": [\r\n                90\r\n            ],\r\n            \"js\": [\r\n                \"getukomislideriteminfo\",\r\n                \"ukomiinstalikestep01\"\r\n            ],\r\n            \"description\": \"U-KOMI is a user generated content review marketing tool.\",\r\n            \"website\": \"https://u-komi.com/en/\"\r\n        },\r\n        \"UIKit\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c[^\\u003e]+class=\\\"[^\\\"]*(?:uk-container|uk-section)\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"uikit.*\\\\.js\"\r\n            ],\r\n            \"description\": \"UIKit is the framework used for developing iOS applications.\",\r\n            \"website\": \"https://getuikit.com\"\r\n        },\r\n        \"UK Mail\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"UK Mail is a postal service company operating in the United Kingdom.\",\r\n            \"website\": \"https://www.ukmail.com\"\r\n        },\r\n        \"UKFast\": {\r\n            \"cats\": [\r\n                88,\r\n                62\r\n            ],\r\n            \"description\": \"UKFast is a business-to-business internet hosting company based in Manchester, UK.\",\r\n            \"website\": \"https://www.ukfast.co.uk\"\r\n        },\r\n        \"UMI.CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"x-generated-by\": \"umi\\\\.cms\"\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://www.umi-cms.ru\"\r\n        },\r\n        \"UNIX\": {\r\n            \"cats\": [\r\n                28\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"unix\"\r\n            },\r\n            \"description\": \"Unix is a family of multitasking, multiuser computer operating systems.\",\r\n            \"website\": \"https://unix.org\"\r\n        },\r\n        \"UPS\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"UPS is an American multinational shipping \\u0026 receiving and supply chain management company.\",\r\n            \"website\": \"https://www.ups.com\"\r\n        },\r\n        \"USPS\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"The United States Postal Service (USPS) is an independent agency of the executive branch of the United States federal government responsible for providing postal service in the United States.\",\r\n            \"website\": \"https://www.usps.com\"\r\n        },\r\n        \"USWDS\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"js\": [\r\n                \"uswdspresent\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\buswds\\\\b\"\r\n            ],\r\n            \"description\": \"USWDS is a design system for the federal government.\",\r\n            \"website\": \"https://designsystem.digital.gov\"\r\n        },\r\n        \"Ubercart\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"uc_cart/uc_cart_block\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Drupal\"\r\n            ],\r\n            \"website\": \"https://www.ubercart.org\"\r\n        },\r\n        \"Ubiliz\": {\r\n            \"cats\": [\r\n                5,\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"ubilizsettings\"\r\n            ],\r\n            \"description\": \"Ubiliz is a gift voucher ecommerce solution.\",\r\n            \"website\": \"https://www.ubiliz.com\"\r\n        },\r\n        \"Ubuntu\": {\r\n            \"cats\": [\r\n                28\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"ubuntu\",\r\n                \"x-powered-by\": \"ubuntu\"\r\n            },\r\n            \"description\": \"Ubuntu is a free and open-source operating system on Linux for the enterprise server, desktop, cloud, and IoT.\",\r\n            \"website\": \"https://www.ubuntu.com/server\",\r\n            \"cpe\": \"cpe:2.3:o:canonical:ubuntu_linux:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Ueeshop\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"ueeshop_config\"\r\n            ],\r\n            \"description\": \"Ueeshop is a ecommerce platform from China.\",\r\n            \"website\": \"https://www.ueeshop.com\"\r\n        },\r\n        \"Ultimate Addons for Elementor\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"uael_particles_script.particles_url\"\r\n            ],\r\n            \"implies\": [\r\n                \"Elementor\"\r\n            ],\r\n            \"description\": \"Ultimate Addons for Elementor is a plugin that adds new widgets and modules to the Elementor page builder for WordPress, providing additional design options and functionality.\",\r\n            \"website\": \"https://ultimateelementor.com\"\r\n        },\r\n        \"Ultimate Bulletin Board\": {\r\n            \"cats\": [\r\n                2\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^ubb\\\\.threads\\\\s([\\\\d\\\\.]+)$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Ultimate Bulletin Board is an internet forum software designed for online communities, offering features such as user registration, thread organisation, moderation tools, search functionality, and customisable design options to facilitate discussions and community engagement.\",\r\n            \"website\": \"https://www.ubbcentral.com\"\r\n        },\r\n        \"Ultimate GDPR \\u0026 CCPA\": {\r\n            \"cats\": [\r\n                67,\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"ct_ultimate_gdpr_cookie\"\r\n            ],\r\n            \"description\": \"Ultimate GDPR \\u0026 CCPA is a compliance toolkit for WordPress by createIT\",\r\n            \"website\": \"https://www.createit.com/gdpr\"\r\n        },\r\n        \"UltimatelySocial\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/ultimate-social-media-icons/\"\r\n            ],\r\n            \"description\": \"Ultimately Social (Share Buttons \\u0026 Sharing Icons) is a plugin that allows you to place fancy social media icons and buttons on your WordPress website.\",\r\n            \"website\": \"https://www.ultimatelysocial.com\"\r\n        },\r\n        \"UltraCart\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"uccatalog\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cform [^\\u003e]*action=\\\"[^\\\"]*\\\\/cgi-bin\\\\/uceditor\\\\?(?:[^\\\"]*\\u0026)?merchantid=[^\\\"]\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cgi-bin\\\\/ucjavascript\\\\?\"\r\n            ],\r\n            \"website\": \"https://ultracart.com\"\r\n        },\r\n        \"Umami\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"umami\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"umami\\\\.js\"\r\n            ],\r\n            \"description\": \"Umami is a self-hosted web analytics solution. It's goal is to provide a friendlier, privacy-focused alternative to Google Analytics and a free, open-sourced alternative to paid solutions.\",\r\n            \"website\": \"https://umami.is/\"\r\n        },\r\n        \"Umbraco\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"merchello\": \"\\\\;version:7\"\r\n            },\r\n            \"js\": [\r\n                \"item_info_service\",\r\n                \"uc_image_service\",\r\n                \"uc_item_info_service\",\r\n                \"uc_settings\",\r\n                \"umbraco\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-umbraco-version\": \"^(.+)$\\\\;version:\\\\1\"\r\n            },\r\n            \"scripts\": [\r\n                \"/umbraco/api/\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"umbraco\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"description\": \"Umbraco is an open-source Microsoft ASP.NET based content management system.\",\r\n            \"website\": \"https://umbraco.com/\"\r\n        },\r\n        \"UmiJs\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"g_umi.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/umi(\\\\.[\\\\w\\\\d]{8})?\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Node.js\"\r\n            ],\r\n            \"description\": \"UmiJs is a scalable, enterprise-class frontend application framework that supports both configuration and conventional routing while maintaining functional completeness, such as dynamic routing, nested routing, and permission routing.\",\r\n            \"website\": \"https://umijs.org\"\r\n        },\r\n        \"Umso\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"scripts\": [\r\n                \"ispriorblockingenabled\\\\;confidence:75\"\r\n            ],\r\n            \"description\": \"Umso is a website builder for Startups.\",\r\n            \"website\": \"https://www.umso.com\"\r\n        },\r\n        \"Unas\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"unasid\": \"\",\r\n                \"unasserviceproxyid\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"unas.shop\",\r\n                \"unas_shop_url\"\r\n            ],\r\n            \"description\": \"Unas is an all-in-one ecommerce platform from Hungary.\",\r\n            \"website\": \"https://unas.hu\"\r\n        },\r\n        \"Unbounce\": {\r\n            \"cats\": [\r\n                20,\r\n                51\r\n            ],\r\n            \"headers\": {\r\n                \"x-unbounce-pageid\": \"\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"ubembed\\\\.com\"\r\n            ],\r\n            \"description\": \"Unbounce is a tool to build landing pages.\",\r\n            \"website\": \"https://unbounce.com\"\r\n        },\r\n        \"Unbxd\": {\r\n            \"cats\": [\r\n                76,\r\n                29\r\n            ],\r\n            \"js\": [\r\n                \"unbxd.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.cloudfront\\\\.net/unbxdanalytics\\\\.js\",\r\n                \"unbxd\\\\.s\\\\d\\\\.amazonaws\\\\.com\"\r\n            ],\r\n            \"description\": \"Unbxd is an ecommerce product discovery platform that applies artificial intelligence and advanced data sciences to connect shoppers to the products they are most likely to buy.\",\r\n            \"website\": \"https://unbxd.com\"\r\n        },\r\n        \"Underscore.js\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"_.restarguments\",\r\n                \"_.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"underscore.*\\\\.js(?:\\\\?ver=([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Underscore.js is a JavaScript library which provides utility functions for common programming tasks. It is comparable to features provided by Prototype.js and the Ruby language, but opts for a functional programming design instead of extending object prototypes.\",\r\n            \"website\": \"https://underscorejs.org\"\r\n        },\r\n        \"Understrap\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"wp-content/themes/understrap(?:[masterchild-]+)?(?:[masterchild-]+)?/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Bootstrap\",\r\n                \"Underscore.js\"\r\n            ],\r\n            \"description\": \"Understrap is a renowned WordPress starter theme framework that combined Underscores and Bootstrap.\",\r\n            \"website\": \"https://understrap.com\"\r\n        },\r\n        \"UniFi OS\": {\r\n            \"cats\": [\r\n                28\r\n            ],\r\n            \"js\": [\r\n                \"unificonstant.version\"\r\n            ],\r\n            \"description\": \"UniFi OS is the operating system for UniFi products, which provides a user interface.\",\r\n            \"website\": \"https://www.ui.com/\"\r\n        },\r\n        \"Uniconsent\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cmp\\\\.uniconsent\\\\.mgr\\\\.consensu\\\\.org/dfp\\\\.js\"\r\n            ],\r\n            \"website\": \"https://www.uniconsent.com/\"\r\n        },\r\n        \"Unicorn Platform\": {\r\n            \"cats\": [\r\n                1,\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"unicornplatform\"\r\n            ],\r\n            \"description\": \"Unicorn Platform is a drag and drop website and blog builder for startups, mobile apps, and SaaS.\",\r\n            \"website\": \"https://unicornplatform.com\"\r\n        },\r\n        \"UnoCSS\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"css\": [\r\n                \"--un-(?:rotate|translate|space-x|text-opacity|border-opacity)\"\r\n            ],\r\n            \"description\": \"UnoCSS is instant on-demand Atomic CSS engine.\",\r\n            \"website\": \"https://uno.antfu.me/\"\r\n        },\r\n        \"Unpkg\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"unpkg\\\\.com/\"\r\n            ],\r\n            \"description\": \"Unpkg is a content delivery network for everything on npm.\",\r\n            \"website\": \"https://unpkg.com\"\r\n        },\r\n        \"Unruly\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"unruly.native\"\r\n            ],\r\n            \"description\": \"Unruly is a video advertising platform.\",\r\n            \"website\": \"https://unruly.co\"\r\n        },\r\n        \"UpSellit\": {\r\n            \"cats\": [\r\n                98\r\n            ],\r\n            \"js\": [\r\n                \"usi_analytics\",\r\n                \"usi_app\",\r\n                \"usi_commons\",\r\n                \"usi_cookies\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"www\\\\.upsellit\\\\.com/\"\r\n            ],\r\n            \"description\": \"UpSellit is a performance based lead and cart abandonment recovery solutions.\",\r\n            \"website\": \"https://us.upsellit.com\"\r\n        },\r\n        \"UpSolution Zephyr\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/zephyr/.+us\\\\.theme\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Zephyr is a WordPress theme developed by UpSolution, a software development company based in Ukraine that specialises in creating themes and plugins for WordPress.\",\r\n            \"website\": \"https://zephyr.us-themes.com\"\r\n        },\r\n        \"Upfluence\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.upfluence\\\\.co/\"\r\n            ],\r\n            \"description\": \"Upfluence is the all-in-one affiliate and influencer marketing platform for ecommerce and direct-to-consumer brands.\",\r\n            \"website\": \"https://www.upfluence.com\"\r\n        },\r\n        \"Uploadcare\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"js\": [\r\n                \"uploadcare.version\"\r\n            ],\r\n            \"description\": \"Uploadcare is a complete file handling platform for online business. Receive files from you users via File Uploader or File Upload API, implement image optimization and transformations with Image CDN API, and get HIPAA-compliant storage.\",\r\n            \"website\": \"https://uploadcare.com\"\r\n        },\r\n        \"Upptime\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"description\": \"Upptime is the open-source uptime monitor and status page, powered entirely by GitHub Actions, Issues, and Pages.\",\r\n            \"website\": \"https://upptime.js.org\"\r\n        },\r\n        \"Upserve\": {\r\n            \"cats\": [\r\n                93\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"app\\\\.upserve\\\\.com/\"\r\n            ],\r\n            \"description\": \"Upserve is a restaurant management solution featuring an Android or iOS-based point-of-sale system, online ordering, contactless payments, automated inventory management, sales analytics, and more.\",\r\n            \"website\": \"https://onlineordering.upserve.com\"\r\n        },\r\n        \"UptimeRobot\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.uptimerobot\\\\.com\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"\\\\.uptimerobot\\\\.com/\"\r\n            ],\r\n            \"description\": \"UptimeRobot is a web-based software that is designed to monitor the sites frequently to check whether any site is down owing to server problem or any bug in coding.\",\r\n            \"website\": \"https://uptimerobot.com\"\r\n        },\r\n        \"Uptrends\": {\r\n            \"cats\": [\r\n                78,\r\n                13\r\n            ],\r\n            \"js\": [\r\n                \"utboomr.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.uptrendsdata\\\\.com/\"\r\n            ],\r\n            \"description\": \"Uptrends is a website and web performance monitoring solution.\",\r\n            \"website\": \"https://www.uptrends.com\"\r\n        },\r\n        \"Upvoty\": {\r\n            \"cats\": [\r\n                47\r\n            ],\r\n            \"js\": [\r\n                \"upvoty\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://upvoty.com\"\r\n        },\r\n        \"UsableNet\": {\r\n            \"cats\": [\r\n                68\r\n            ],\r\n            \"js\": [\r\n                \"enableusablenetassistive\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.usablenet\\\\.com/pt/\"\r\n            ],\r\n            \"description\": \"UsableNet is a technology for web accessibility and digital transformation, providing end-to-end services.\",\r\n            \"website\": \"https://usablenet.com\"\r\n        },\r\n        \"Uscreen\": {\r\n            \"cats\": [\r\n                14\r\n            ],\r\n            \"js\": [\r\n                \"analyticshost\"\r\n            ],\r\n            \"description\": \"Uscreen is a CMS to monetize VOD and live content. They provide site hosting, video hosting, and a payment gateway for selling video based content.\",\r\n            \"website\": \"https://uscreen.tv/\"\r\n        },\r\n        \"User Accessibility\": {\r\n            \"cats\": [\r\n                68\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//system\\\\.user-a\\\\.co\\\\.il/\"\r\n            ],\r\n            \"description\": \"User Accessibility is a solution incorporating automated site scanning and machine learning for future updates, while utilising JS to conform to WECAG standards for improved website and application accessibility.\",\r\n            \"website\": \"https://user-a.co.il\"\r\n        },\r\n        \"UserLike\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"__userlike_mount_guard__\",\r\n                \"userlike\",\r\n                \"userlikeinit\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//userlike-cdn-widgets\\\\.\",\r\n                \"api\\\\.userlike\\\\.com\",\r\n                \"userlike\\\\.min\\\\.js\",\r\n                \"userlikelib\\\\.min\\\\.js\"\r\n            ],\r\n            \"description\": \"Userlike is a cloud-based live chat solution that can be integrated with existing websites.\",\r\n            \"website\": \"https://userlike.com\"\r\n        },\r\n        \"UserReport\": {\r\n            \"cats\": [\r\n                13,\r\n                73\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.userreport\\\\.com/\"\r\n            ],\r\n            \"description\": \"UserReport is an online survey and feedback management platform.\",\r\n            \"website\": \"https://www.userreport.com\"\r\n        },\r\n        \"UserRules\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"js\": [\r\n                \"_usrp\"\r\n            ],\r\n            \"website\": \"https://www.userrules.com\"\r\n        },\r\n        \"UserVoice\": {\r\n            \"cats\": [\r\n                13,\r\n                73\r\n            ],\r\n            \"js\": [\r\n                \"uservoice\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.uservoice\\\\.com/\"\r\n            ],\r\n            \"description\": \"UserVoice is a management to collect and analyse feedback from customers.\",\r\n            \"website\": \"https://uservoice.com\"\r\n        },\r\n        \"UserWay\": {\r\n            \"cats\": [\r\n                68\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.userway\\\\.org/widget.*\\\\.js\"\r\n            ],\r\n            \"description\": \"UserWay is a web accessibility overlay for websites that claims to improve compliance with accessibility standards.\",\r\n            \"website\": \"https://userway.org/\"\r\n        },\r\n        \"UserZoom\": {\r\n            \"cats\": [\r\n                74,\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.userzoom\\\\.com/\"\r\n            ],\r\n            \"description\": \"UserZoom is a cloud-based user experience solution.\",\r\n            \"website\": \"https://www.userzoom.com\"\r\n        },\r\n        \"Usercentrics\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"js\": [\r\n                \"usercentrics.appversion\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.usercentrics\\\\.eu/.+\\\\.js\"\r\n            ],\r\n            \"description\": \"Usercentrics is a SaaS enterprise solution for Consent Management (CMP) that helps enterprise customers to obtain, manage and document the user consent.\",\r\n            \"website\": \"https://usercentrics.com\"\r\n        },\r\n        \"Userflow\": {\r\n            \"cats\": [\r\n                58\r\n            ],\r\n            \"js\": [\r\n                \"userflow.endallflows\",\r\n                \"userflow.endchecklist\",\r\n                \"userflowjs_queue\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.userflow\\\\.com/\"\r\n            ],\r\n            \"description\": \"Userflow is a user onboarding software for building product tours and onboarding checklists, tailored to your app and your users.\",\r\n            \"website\": \"https://userflow.com\"\r\n        },\r\n        \"Userpilot\": {\r\n            \"cats\": [\r\n                58,\r\n                97\r\n            ],\r\n            \"js\": [\r\n                \"userpilot.triggerbyid\",\r\n                \"userpilotinitiatorsdk\",\r\n                \"userpilotpako\"\r\n            ],\r\n            \"description\": \"Userpilot is a cloud-based product experience platform designed for customer success and product teams to onboard users and increase product adoption through behavior-triggered experiences.\",\r\n            \"website\": \"https://userpilot.com\"\r\n        },\r\n        \"Ushahidi\": {\r\n            \"cats\": [\r\n                1,\r\n                35\r\n            ],\r\n            \"cookies\": {\r\n                \"ushahidi\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"ushahidi\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/js/ushahidi\\\\.js$\"\r\n            ],\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"OpenLayers\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Ushahidi is a tool that collects crowdsourced data and targeted survey responses from multiple data sources.\",\r\n            \"website\": \"https://www.ushahidi.com\"\r\n        },\r\n        \"Usizy\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"usizyuniversal\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"static\\\\.usizy\\\\.es/\"\r\n            ],\r\n            \"description\": \"Usizy is the top size recommendation and prediction solution for ecommerce using machine learning, big data, and isomoprhic algorythms.\",\r\n            \"website\": \"https://usizy.com\"\r\n        },\r\n        \"Uvicorn\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"uvicorn\"\r\n            },\r\n            \"implies\": [\r\n                \"Python\"\r\n            ],\r\n            \"website\": \"https://www.uvicorn.org/\"\r\n        },\r\n        \"Uvodo\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.uvo\\\\.do/\"\r\n            ],\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\",\r\n                \"React\"\r\n            ],\r\n            \"description\": \"Uvodo is an ecommerce platform built with React, PHP, and MySQL, offering local and global payment integration, robust selling tools, and no additional expenses.\",\r\n            \"website\": \"https://uvodo.com\"\r\n        },\r\n        \"VAPTCHA\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"js\": [\r\n                \"vaptcha\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.vaptcha\\\\.com/v([\\\\d\\\\.]+)\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"VAPTCHA is the abbreviation of (Variation Analysis based Public Turing Test to Tell Computers and Humans Apart), also known as gesture verification code, is a human-machine verification solution based on artificial intelligence and big data.\",\r\n            \"website\": \"https://en.vaptcha.com\"\r\n        },\r\n        \"VDX.tv\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.exponential\\\\.com\",\r\n                \"\\\\.tribalfusion\\\\.com/\"\r\n            ],\r\n            \"description\": \"VDX.tv (formerly Exponential) is a global advertising technology company that is transforming the way brands connect with relevant audiences in today's converging video landscape.\",\r\n            \"website\": \"https://vdx.tv\"\r\n        },\r\n        \"VIVVO\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"vivvosessionid\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"vivvo\"\r\n            ],\r\n            \"website\": \"https://vivvo.net\"\r\n        },\r\n        \"VK Pixel\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"vk\\\\.com/js/api/openapi\\\\.js\"\r\n            ],\r\n            \"description\": \"VK is a Russian online social media and social networking service.\",\r\n            \"website\": \"https://vk.com/\"\r\n        },\r\n        \"VKUI\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"description\": \"VKUI is a set of React components with which you can create interfaces that are visually indistinguishable from our iOS and Android applications.\",\r\n            \"website\": \"https://vkcom.github.io/VKUI\"\r\n        },\r\n        \"VP-ASP\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"html\": [\r\n                \"\\u003ca[^\\u003e]+\\u003epowered by vp-asp shopping cart\\u003c/a\\u003e\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"vs350\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"website\": \"https://www.vpasp.com\"\r\n        },\r\n        \"VTEX\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"vtex_session\": \"\",\r\n                \"vtexfingerprint\": \"\",\r\n                \"vtexstoreversion\": \"\",\r\n                \"vtexworkspace\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"vtex\"\r\n            ],\r\n            \"headers\": {\r\n                \"powered\": \"vtex\",\r\n                \"server\": \"^vtex io$\"\r\n            },\r\n            \"description\": \"VTEX is an ecommerce software that manages multiple online stores.\",\r\n            \"website\": \"https://vtex.com/\"\r\n        },\r\n        \"VWO\": {\r\n            \"cats\": [\r\n                10,\r\n                74\r\n            ],\r\n            \"js\": [\r\n                \"__vwo\",\r\n                \"_vwo_code\",\r\n                \"_vwo_settings_timer\",\r\n                \"vwo\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/visual-website-optimizer/([\\\\d\\\\.])\\\\;version:\\\\1\",\r\n                \"dev\\\\.visualwebsiteoptimizer\\\\.com/\"\r\n            ],\r\n            \"description\": \"VWO is a website testing and conversion optimisation platform.\",\r\n            \"website\": \"https://vwo.com\"\r\n        },\r\n        \"VWO Engage\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"_pushcrewdebuggingqueue\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.pushcrew\\\\.\\\\w+\"\r\n            ],\r\n            \"description\": \"VWO Engage is a part of the VWO Platform, which is a web-based push notification platform used by SaaS and B2B marketers, online content publishers, and ecommerce store owners.\",\r\n            \"website\": \"https://vwo.com/engage\"\r\n        },\r\n        \"Vaadin\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"js\": [\r\n                \"vaadin\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"vaadinbootstrap\\\\.js(?:\\\\?v=([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"description\": \"Vaadin is an open-source framework for building user interfaces and single-page applications using Java and TypeScript.\",\r\n            \"website\": \"https://vaadin.com\"\r\n        },\r\n        \"ValueCommerce\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.valuecommerce\\\\.com\"\r\n            ],\r\n            \"description\": \"ValueCommerce is a pay-per-performance advertising affiliate marketing network.\",\r\n            \"website\": \"https://www.valuecommerce.co.jp\"\r\n        },\r\n        \"Vanco Payment Solutions\": {\r\n            \"cats\": [\r\n                111,\r\n                41\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.eservicepayments\\\\.com/\"\r\n            ],\r\n            \"description\": \"Vanco Payment Solutions provides credit card processing to nonprofits.\",\r\n            \"website\": \"https://www.vancopayments.com\"\r\n        },\r\n        \"Vanilla\": {\r\n            \"cats\": [\r\n                2\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"vanilla\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003cbody id=\\\"(?:discussionspage|vanilla)\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Vanilla is a both a cloud-based (SaaS) open-source community forum software.\",\r\n            \"website\": \"https://vanillaforums.org\"\r\n        },\r\n        \"Vant\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"js\": [\r\n                \"vant.version\"\r\n            ],\r\n            \"implies\": [\r\n                \"TypeScript\"\r\n            ],\r\n            \"description\": \"Vant is a lightweight, customisable Vue UI library for mobile web apps.\",\r\n            \"website\": \"https://github.com/youzan/vant\"\r\n        },\r\n        \"Varbase\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"drupalsettings.ajaxpagestate.libraries\"\r\n            ],\r\n            \"implies\": [\r\n                \"Drupal\"\r\n            ],\r\n            \"website\": \"https://www.vardot.com/solutions/varbase\",\r\n            \"cpe\": \"cpe:2.3:a:vardot:varbase:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Variti\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"headers\": {\r\n                \"x-variti-ccr\": \"\"\r\n            },\r\n            \"description\": \"Variti is a network security solutions firm that blocks bad bots, protects users from various automated abuse, attacks and fraud techniques.\",\r\n            \"website\": \"https://variti.io\"\r\n        },\r\n        \"Varnish\": {\r\n            \"cats\": [\r\n                23\r\n            ],\r\n            \"headers\": {\r\n                \"via\": \"varnish(?: \\\\(varnish/([\\\\d.]+)\\\\))?\\\\;version:\\\\1\",\r\n                \"x-varnish\": \"\",\r\n                \"x-varnish-action\": \"\",\r\n                \"x-varnish-age\": \"\",\r\n                \"x-varnish-cache\": \"\",\r\n                \"x-varnish-hostname\": \"\"\r\n            },\r\n            \"description\": \"Varnish is a reverse caching proxy.\",\r\n            \"website\": \"https://www.varnish-cache.org\",\r\n            \"cpe\": \"cpe:2.3:a:varnish-software:varnish_cache:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Ve Global\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"vetagdata.appsservicesurl\"\r\n            ],\r\n            \"description\": \"Ve Global, formerly known as Ve Interactive, is a global technology company that provides ecommerce businesses with a managed-service of proprietary marketing software and digital advertising solutions.\",\r\n            \"website\": \"https://ve.com\"\r\n        },\r\n        \"Vectary\": {\r\n            \"cats\": [\r\n                105\r\n            ],\r\n            \"description\": \"Vectary is fully-featured 3D modeling tool with photorealistic real-time rendering, augmented reality, interactions and animations.\",\r\n            \"website\": \"https://www.vectary.com\"\r\n        },\r\n        \"Vendre\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"vendre_config\",\r\n                \"vendremap.maps_loaded\"\r\n            ],\r\n            \"description\": \"Vendre is a module-based ecommerce system where you choose which functions your organisation needs.\",\r\n            \"website\": \"https://vendre.io\"\r\n        },\r\n        \"Venmo\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"description\": \"Venmo is a mobile payment service owned by PayPal. Venmo account holders can transfer funds to others via a mobile phone app.\",\r\n            \"website\": \"https://venmo.com\"\r\n        },\r\n        \"VentraIP\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"description\": \"VentraIP is the largest privately owned web host and domain name registrar in Australia.\",\r\n            \"website\": \"https://ventraip.com.au\"\r\n        },\r\n        \"VentryShield\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"cookies\": {\r\n                \"ventryshield_pre\": \"\"\r\n            },\r\n            \"headers\": {\r\n                \"x-ventryshield-cache-status\": \"no-cache\",\r\n                \"x-ventryshield-sid\": \"\"\r\n            },\r\n            \"description\": \"VentryShield offers DDoS Protected VPS and Web Hosting.\",\r\n            \"website\": \"https://ventryshield.net\"\r\n        },\r\n        \"Veoxa\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"vuveoxacontent\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cimg [^\\u003e]*src=\\\"[^\\\"]+tracking\\\\.veoxa\\\\.com\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"tracking\\\\.veoxa\\\\.com\"\r\n            ],\r\n            \"website\": \"https://veoxa.com\"\r\n        },\r\n        \"Vercel\": {\r\n            \"cats\": [\r\n                62\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^now|vercel$\",\r\n                \"x-now-trace\": \"\",\r\n                \"x-vercel-cache\": \"\",\r\n                \"x-vercel-id\": \"\"\r\n            },\r\n            \"description\": \"Vercel is a cloud platform for static frontends and serverless functions.\",\r\n            \"website\": \"https://vercel.com\"\r\n        },\r\n        \"Vercel Analytics\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"va\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/_vercel/insights/script\\\\.js\",\r\n                \"/va/script\\\\.js\"\r\n            ],\r\n            \"website\": \"https://vercel.com/analytics\"\r\n        },\r\n        \"Verifone 2Checkout\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"scripts\": [\r\n                \"2checkout\\\\.com\"\r\n            ],\r\n            \"description\": \"Verifone is an American multinational corporation headquartered in Coral Springs, Florida, that provides technology for electronic payment transactions and value-added services at the point-of-sale.\",\r\n            \"website\": \"https://www.2checkout.com\"\r\n        },\r\n        \"VerifyPass\": {\r\n            \"cats\": [\r\n                5,\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"verifypass_api_instantiator\",\r\n                \"verifypass_is_loaded\",\r\n                \"verifypass_popup\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.id\\\\.services\",\r\n                \"cdn\\\\.verifypass\\\\.com\"\r\n            ],\r\n            \"description\": \"VerifyPass is a company which provide secure identity proofing, authentication, and group affiliation verification for teachers and students.\",\r\n            \"website\": \"https://verifypass.com\"\r\n        },\r\n        \"Verizon Media\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.advertising\\\\.com\",\r\n                \"\\\\.vidible\\\\.tv/\"\r\n            ],\r\n            \"description\": \"Verizon Media is a tech and media company with global assets for advertisers, consumers and media companies.\",\r\n            \"website\": \"https://www.verizonmedia.com\"\r\n        },\r\n        \"Verloop\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"verloop\"\r\n            ],\r\n            \"description\": \"Verloop is provider of conversational AI platform for customer support automation.\",\r\n            \"website\": \"https://verloop.io/\"\r\n        },\r\n        \"VerticalScope\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"description\": \"VerticalScope is a Canadian-based technology company that owns and operates a network of online communities and discussion forums focused on a variety of interests and hobbies, such as cars, pets, sports, and technology. VerticalScope generates revenue primarily through advertising, including banner ads, sponsored content, and affiliate marketing.\",\r\n            \"website\": \"https://www.verticalscope.com\"\r\n        },\r\n        \"Very Good Security\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"js\": [\r\n                \"vgscollect\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.verygoodvault\\\\.com\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"js\\\\.verygoodvault\\\\.com/\"\r\n            ],\r\n            \"description\": \"Very Good Security (VGS) is a data security and compliance platform that enables developers to securely handle sensitive data by encrypting, tokenising, and transmitting it through an intermediary service.\",\r\n            \"website\": \"https://www.verygoodsecurity.com\"\r\n        },\r\n        \"Vev\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"vev.app.compare\",\r\n                \"vev.default_app_state\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.vev\\\\.design/\"\r\n            ],\r\n            \"description\": \"Vev is a cloud-based design and publishing platform that enables users to create interactive digital content without coding, using a drag-and-drop interface and built-in templates and integrations.\",\r\n            \"website\": \"https://www.vev.design\"\r\n        },\r\n        \"ViaBill\": {\r\n            \"cats\": [\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"viabilloptions.state.subscriptions\",\r\n                \"viabillpricetaginternal.conf.productsbylocale\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.viabill\\\\.com/\"\r\n            ],\r\n            \"description\": \"ViaBill is a cloud-based payment management solution designed to help small to midsize retailers and webshops.\",\r\n            \"website\": \"https://viabill.com\"\r\n        },\r\n        \"Viafoura\": {\r\n            \"cats\": [\r\n                86\r\n            ],\r\n            \"js\": [\r\n                \"dfm_viafoura_options\",\r\n                \"viafoura.bootstrap\",\r\n                \"viafoura.core\"\r\n            ],\r\n            \"description\": \"Viafoura is an audience engagement and social monetisation platform.\",\r\n            \"website\": \"https://viafoura.com\"\r\n        },\r\n        \"Vidazoo\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"__vidazooplayer__\",\r\n                \"vidazoo\",\r\n                \"vidazoo.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.vidazoo\\\\.com\"\r\n            ],\r\n            \"description\": \"Vidazoo is a video content and yield management platform.\",\r\n            \"website\": \"https://www.vidazoo.com\"\r\n        },\r\n        \"Video Greet\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"__vg.video_greet_button_src\"\r\n            ],\r\n            \"description\": \"Video Greet lets your customers add a video message to gifts with QR codes.\",\r\n            \"website\": \"https://apps.shopify.com/videogreet-gift-messages\"\r\n        },\r\n        \"VideoJS\": {\r\n            \"cats\": [\r\n                14\r\n            ],\r\n            \"css\": [\r\n                \"\\\\.video-js\\\\;confidence:25\",\r\n                \"\\\\.vjs-big-play-button\\\\;confidence:75\"\r\n            ],\r\n            \"js\": [\r\n                \"videojs\",\r\n                \"videojs\",\r\n                \"videojs.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdnjs\\\\.cloudflare\\\\.com\\\\/ajax\\\\/libs\\\\/video\\\\.js\\\\/([\\\\d\\\\.]+)\\\\/\\\\;version:\\\\1\",\r\n                \"zencdn\\\\.net/c/video\\\\.js\"\r\n            ],\r\n            \"description\": \"Video.js is a JavaScript and CSS library that makes it easier to work with and build on HTML5 video.\",\r\n            \"website\": \"https://videojs.com\"\r\n        },\r\n        \"Vigbo\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"_gphw_mode\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]* href=[^\\u003e]+(?:\\\\.vigbo\\\\.com|\\\\.gophotoweb\\\\.com)\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:\\\\.vigbo\\\\.com|\\\\.gophotoweb\\\\.com)\"\r\n            ],\r\n            \"website\": \"https://vigbo.com\"\r\n        },\r\n        \"Vigil\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"implies\": [\r\n                \"Docker\",\r\n                \"Rust\"\r\n            ],\r\n            \"description\": \"Vigil is a microservices status page. Monitors a distributed infrastructure and sends alerts (Slack, SMS, etc.).\",\r\n            \"website\": \"https://github.com/valeriansaliou/vigil\"\r\n        },\r\n        \"Vignette\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c[^\\u003e]+=\\\"vgn-?ext\"\r\n            ],\r\n            \"website\": \"https://www.vignette.com\"\r\n        },\r\n        \"Vimeo\": {\r\n            \"cats\": [\r\n                14\r\n            ],\r\n            \"js\": [\r\n                \"vimeo.player\",\r\n                \"vimeoplayer\"\r\n            ],\r\n            \"description\": \"Vimeo is a video hosting, sharing and services platform. Vimeo operation an ad-free basis by providing subscription plans.\",\r\n            \"website\": \"https://vimeo.com\"\r\n        },\r\n        \"Vimeo OTT\": {\r\n            \"cats\": [\r\n                14\r\n            ],\r\n            \"js\": [\r\n                \"_vhx\",\r\n                \"vhx.config\"\r\n            ],\r\n            \"implies\": [\r\n                \"Vimeo\"\r\n            ],\r\n            \"description\": \"Vimeo OTT allows brands and creators to launch their own white-label video subscription channels, where subscribers can access video content for free, as a rental, or for purchase.\",\r\n            \"website\": \"https://vimeo.com/ott\"\r\n        },\r\n        \"Viqeo\": {\r\n            \"cats\": [\r\n                14\r\n            ],\r\n            \"js\": [\r\n                \"viqeo\"\r\n            ],\r\n            \"description\": \"Viqeo is a short video platform to make media and ecommerce more visual and interesting.\",\r\n            \"website\": \"https://viqeo.tv\"\r\n        },\r\n        \"Viral Loops\": {\r\n            \"cats\": [\r\n                94\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"app\\\\.viral-loops\\\\.com/\"\r\n            ],\r\n            \"description\": \"Viral Loops is a viral and referral marketing platform to launch ranking competitions, sweepstakes, pre-launch and referral programs.\",\r\n            \"website\": \"https://viral-loops.com\"\r\n        },\r\n        \"Virgool\": {\r\n            \"cats\": [\r\n                11\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^virgool$\"\r\n            },\r\n            \"website\": \"https://virgool.io\"\r\n        },\r\n        \"Virtooal\": {\r\n            \"cats\": [\r\n                105\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.virtooal\\\\.com/\"\r\n            ],\r\n            \"description\": \"Virtooal allows shoppers to try on and combine decorative cosmetics, sunglasses, contact lenses, jewellery and fashion accessories using models, their own photo or a live webcam feed.\",\r\n            \"website\": \"https://try.virtooal.com\"\r\n        },\r\n        \"Virtuagym\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"js\": [\r\n                \"open_vg_custom_modal\",\r\n                \"trigger_vg_neutral_message\",\r\n                \"vgtutorial\"\r\n            ],\r\n            \"description\": \"Virtuagym is a cloud-based membership management and coaching platform designed for personal trainers and fitness businesses of all sizes.\",\r\n            \"website\": \"https://business.virtuagym.com\"\r\n        },\r\n        \"Virtual Chat\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"virtual-chat\\\\.co\\\\.il/\"\r\n            ],\r\n            \"description\": \"Virtual Chat is a live-chat service for web sites.\",\r\n            \"website\": \"https://www.virtual-chat.co.il\"\r\n        },\r\n        \"VirtualSpirits\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"vspiritbutton\",\r\n                \"vspirits_chat_client\",\r\n                \"vspiritsizeheight\"\r\n            ],\r\n            \"description\": \"VirtualSpirits is a chatbot and live-chat service for websites.\",\r\n            \"website\": \"https://www.virtualspirits.com\"\r\n        },\r\n        \"VirtueMart\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cdiv id=\\\"vmmainpage\"\r\n            ],\r\n            \"implies\": [\r\n                \"Joomla\"\r\n            ],\r\n            \"website\": \"https://virtuemart.net\"\r\n        },\r\n        \"Virtuoso\": {\r\n            \"cats\": [\r\n                34\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"virtuoso/?([0-9.]+)?\\\\;version:\\\\1\"\r\n            },\r\n            \"meta\": {\r\n                \"copyright\": [\r\n                    \"^copyright \\u0026copy; \\\\d{4} openlink software\"\r\n                ],\r\n                \"keywords\": [\r\n                    \"^openlink virtuoso sparql\"\r\n                ]\r\n            },\r\n            \"website\": \"https://virtuoso.openlinksw.com/\"\r\n        },\r\n        \"Virtuous\": {\r\n            \"cats\": [\r\n                111\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.virtuoussoftware\\\\.com/\"\r\n            ],\r\n            \"description\": \"Virtuous is the responsive fundraising software platform.\",\r\n            \"website\": \"https://virtuous.org\"\r\n        },\r\n        \"Virtusize\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.virtusize\\\\.jp/\"\r\n            ],\r\n            \"description\": \"Virtusize is a personalisation service that provides size and product recommendations specific to a user's size and trend preferences.\",\r\n            \"website\": \"https://www.virtusize.com\"\r\n        },\r\n        \"Visa\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"visaapi\",\r\n                \"visaimage\",\r\n                \"visasrc\"\r\n            ],\r\n            \"website\": \"https://www.visa.com\"\r\n        },\r\n        \"Visa Checkout\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"secure\\\\.checkout\\\\.visa\\\\.com\"\r\n            ],\r\n            \"description\": \"Visa facilitates electronic funds transfers throughout the world, most commonly through Visa-branded credit cards, debit cards and prepaid cards.\",\r\n            \"website\": \"https://checkout.visa.com\"\r\n        },\r\n        \"Visely\": {\r\n            \"cats\": [\r\n                100,\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"visely.recommendationsapi\",\r\n                \"viselycartproductids\",\r\n                \"viselypage\"\r\n            ],\r\n            \"description\": \"Visely is a Shopify app which personalise product recommendations for Shopify sites.\",\r\n            \"website\": \"https://visely.io\"\r\n        },\r\n        \"Visual Composer\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"powered by visual composer website builder\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\",\r\n                \"WordPress\"\r\n            ],\r\n            \"description\": \"Visual Composer is an all-in-one web design tool for anyone who uses WordPress.\",\r\n            \"website\": \"https://visualcomposer.com\"\r\n        },\r\n        \"Visual Portfolio\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"vpdata.screensizes\",\r\n                \"vpdata.version\"\r\n            ],\r\n            \"description\": \"Visual Portfolio is a plugin with a robust set of features, designed to help you create galleries that effectively display your creative projects.\",\r\n            \"website\": \"https://visualportfolio.co\"\r\n        },\r\n        \"Visual Quiz Builder\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//whai-cdn\\\\.nyc\\\\d\\\\.cdn\\\\.digitaloceanspaces\\\\.com/\"\r\n            ],\r\n            \"description\": \"Visual Quiz Builder is a Shopify app built by AskWhai.\",\r\n            \"website\": \"https://apps.shopify.com/product-recommendation-quiz\"\r\n        },\r\n        \"Visualsoft\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"vscommerce\": \"\"\r\n            },\r\n            \"meta\": {\r\n                \"vs_status_checker_version\": [\r\n                    \"\\\\d+\"\r\n                ],\r\n                \"vsvatprices\": []\r\n            },\r\n            \"description\": \"Visualsoft is an ecommerce agency that delivers web design, development and marketing services to online retailers.\",\r\n            \"website\": \"https://www.visualsoft.co.uk/\"\r\n        },\r\n        \"Visx\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"description\": \"Visx is a collection of React-based data visualisation tools developed by Airbnb.\",\r\n            \"website\": \"https://airbnb.io/visx/\"\r\n        },\r\n        \"Vitals\": {\r\n            \"cats\": [\r\n                100,\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"vitals\",\r\n                \"vitals_app_cache_keys_v1\",\r\n                \"vitals_country_code\",\r\n                \"vitals_product_data\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//appsolve\\\\.io/\"\r\n            ],\r\n            \"description\": \"Vitals is an all-in-one Shopify marketing software.\",\r\n            \"website\": \"https://vitals.co\"\r\n        },\r\n        \"Vite\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"__vite_is_modern_browser\"\r\n            ],\r\n            \"description\": \"Vite is a rapid development tool for modern web projects.\",\r\n            \"website\": \"https://vitejs.dev\"\r\n        },\r\n        \"VitePress\": {\r\n            \"cats\": [\r\n                57\r\n            ],\r\n            \"js\": [\r\n                \"__vp_hash_map__\"\r\n            ],\r\n            \"implies\": [\r\n                \"Vite\",\r\n                \"Vue.js\"\r\n            ],\r\n            \"description\": \"VitePress is a Vite \\u0026 Vue Powered Static Site Generator.\",\r\n            \"website\": \"https://vitepress.vuejs.org/\"\r\n        },\r\n        \"Vitrin.me\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.vitrin\\\\.me/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Django\",\r\n                \"Next.js\",\r\n                \"Python\",\r\n                \"React\"\r\n            ],\r\n            \"description\": \"Vitrin.me is a no-code platform that lets anyone build web apps without writing any code.\",\r\n            \"website\": \"https://vitrin.me\"\r\n        },\r\n        \"Vizury\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"safarivizury\",\r\n                \"vizury_data\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.vizury\\\\.com\"\r\n            ],\r\n            \"description\": \"Vizury is a ecommerce marketing platform.\",\r\n            \"website\": \"https://www.vizury.com\"\r\n        },\r\n        \"Vnda\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"vnda.checkout\",\r\n                \"vnda.loadcartpopup\"\r\n            ],\r\n            \"meta\": {\r\n                \"image\": [\r\n                    \"cdn\\\\.vnda\\\\.com\\\\.br/\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Amazon Web Services\",\r\n                \"Node.js\"\r\n            ],\r\n            \"description\": \"Vnda is a omnichannel ecommerce platform.\",\r\n            \"website\": \"https://www.vnda.com.br\"\r\n        },\r\n        \"Vntana\": {\r\n            \"cats\": [\r\n                105\r\n            ],\r\n            \"description\": \"Vntana (stylised as VNTANA) is an American social augmented reality company.\",\r\n            \"website\": \"https://www.vntana.com\"\r\n        },\r\n        \"Volusion\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"volusion\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cbody [^\\u003e]*data-vn-page-name\\\\;version:2\",\r\n                \"\\u003clink [^\\u003e]*href=\\\"[^\\\"]*/vspfiles/\\\\;version:1\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/volusion\\\\.js(?:\\\\?([\\\\d.]*))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Volusion is a cloud-based, hosted ecommerce solution.\",\r\n            \"website\": \"https://www.volusion.com\"\r\n        },\r\n        \"Vonage Video API\": {\r\n            \"cats\": [\r\n                103\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.opentok\\\\.com/\"\r\n            ],\r\n            \"description\": \"Vonage Video API platform makes it easy to embed real-time, high-quality interactive video, messaging, screen-sharing, and more into web and mobile apps.\",\r\n            \"website\": \"https://www.vonage.com/communications-apis/video/\"\r\n        },\r\n        \"Voog.com Website Builder\": {\r\n            \"cats\": [\r\n                1,\r\n                6\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cscript [^\\u003e]*src=\\\"[^\\\"]*voog\\\\.com/tracker\\\\.js\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"voog\\\\.com/tracker\\\\.js\"\r\n            ],\r\n            \"website\": \"https://www.voog.com/\"\r\n        },\r\n        \"Voracio\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"voracio_csrf_token\": \"\",\r\n                \"voracio_sessionid\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"voracio\"\r\n            ],\r\n            \"description\": \"Voracio is a cloud SaaS ecommerce platform powered by Microsoft .NET and built on the Microsoft Azure cloud framework.\",\r\n            \"website\": \"https://www.voracio.co.uk\"\r\n        },\r\n        \"Vtiger\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"js\": [\r\n                \"vtiger\",\r\n                \"vtiger_base_js\",\r\n                \"vtiger_helper_js\"\r\n            ],\r\n            \"description\": \"Vtiger is a cloud-based suite of marketing, sales and help desk offerings, which can be deployed separately or as an integrated, all-in-one ecosystem.\",\r\n            \"website\": \"https://www.vtiger.com\",\r\n            \"cpe\": \"cpe:2.3:a:vtiger:vtiger_crm:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"VuFind\": {\r\n            \"cats\": [\r\n                29\r\n            ],\r\n            \"js\": [\r\n                \"vufind.defaultsearchbackend\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^vufind\\\\s([\\\\d\\\\.]+)$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"VuFind is a library resource portal designed and developed by Villanova University library.\",\r\n            \"website\": \"https://vufind.org\"\r\n        },\r\n        \"Vue Storefront\": {\r\n            \"cats\": [\r\n                108\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"vsf-layout\\\\;version:1\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^vue storefront ([0-9.]+)?$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Vue.js\"\r\n            ],\r\n            \"description\": \"Vue Storefront is a frontend platform for headless ecommerce.\",\r\n            \"website\": \"https://www.vuestorefront.io/\"\r\n        },\r\n        \"Vue.ai\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"getvueurlsegments\",\r\n                \"vuex\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"vue_ai\\\\.js\",\r\n                \"vuex\\\\.vue\\\\.ai\"\r\n            ],\r\n            \"description\": \"Vue.ai is an AI-powered experience management suite which combines the power of product, customer and business intelligence using computer vision and NLP.\",\r\n            \"website\": \"https://vue.ai\"\r\n        },\r\n        \"Vue.js\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"css\": [\r\n                \"\\\\.vue-notification-group\"\r\n            ],\r\n            \"js\": [\r\n                \"__vue__\",\r\n                \"__vue_hot_map__\",\r\n                \"vue\",\r\n                \"vue.version\",\r\n                \"vuedll\",\r\n                \"vueroot\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c[^\\u003e]+\\\\sdata-v(?:ue)?-\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:/([\\\\d.]+))?/vue(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\",\r\n                \"vue[.-]([\\\\d.]*\\\\d)[^/]*\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Vue.js is an open-source model–view–viewmodel JavaScript framework for building user interfaces and single-page applications.\",\r\n            \"website\": \"https://vuejs.org\"\r\n        },\r\n        \"Vue2-animate\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"implies\": [\r\n                \"Animate.css\",\r\n                \"Sass\",\r\n                \"Vue.js\"\r\n            ],\r\n            \"description\": \"Vue2-animate is a Vue.js port of Animate.css.\",\r\n            \"website\": \"https://github.com/asika32764/vue2-animate\"\r\n        },\r\n        \"VuePress\": {\r\n            \"cats\": [\r\n                57\r\n            ],\r\n            \"js\": [\r\n                \"__vuepress__.version\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^vuepress(?: ([0-9.]+)(-[a-z]+.[0-9]+)?)?$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Vue.js\"\r\n            ],\r\n            \"description\": \"VuePress is a static site generator with a Vue-powered theming system, and a default theme for writing technical documentation.\",\r\n            \"website\": \"https://vuepress.vuejs.org/\"\r\n        },\r\n        \"Vuetify\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"css\": [\r\n                \"\\\\.v-application \\\\.d-block\"\r\n            ],\r\n            \"implies\": [\r\n                \"Vue.js\"\r\n            ],\r\n            \"description\": \"Vuetify is a reusable semantic component framework for Vue.js that aims to provide clean, semantic and reusable components.\",\r\n            \"website\": \"https://vuetifyjs.com\"\r\n        },\r\n        \"Vuex\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"vuex.version\"\r\n            ],\r\n            \"implies\": [\r\n                \"Vue.js\"\r\n            ],\r\n            \"description\": \"Vuex is a state management pattern + library for Vue.js applications.\",\r\n            \"website\": \"https://vuex.vuejs.org/\"\r\n        },\r\n        \"Vultr\": {\r\n            \"cats\": [\r\n                62\r\n            ],\r\n            \"description\": \"Vultr is a cloud computing service provider.\",\r\n            \"website\": \"https://www.vultr.com\"\r\n        },\r\n        \"Vuukle\": {\r\n            \"cats\": [\r\n                15\r\n            ],\r\n            \"js\": [\r\n                \"vuukle_config\"\r\n            ],\r\n            \"description\": \"Vuukle is an audience engagement and commenting platform.\",\r\n            \"website\": \"https://vuukle.com\"\r\n        },\r\n        \"W3 Total Cache\": {\r\n            \"cats\": [\r\n                23,\r\n                87\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"w3 total cache(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003c!--[^\\u003e]+w3 total cache\"\r\n            ],\r\n            \"description\": \"W3 Total Cache (W3TC) improves the SEO and increases website performance and reducing load times by leveraging features like content delivery network (CDN) integration and the latest best practices.\",\r\n            \"website\": \"https://www.w3-edge.com/wordpress-plugins/w3-total-cache\"\r\n        },\r\n        \"W3.CSS\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"description\": \"W3.CSS is a CSS framework developed by the World Wide Web Consortium (W3C), the main international standards organisation for the World Wide Web.\",\r\n            \"website\": \"https://www.w3schools.com/w3css/\"\r\n        },\r\n        \"W3Counter\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"w3counter\\\\.com/tracker\\\\.js\"\r\n            ],\r\n            \"website\": \"https://www.w3counter.com\"\r\n        },\r\n        \"WEBDEV\": {\r\n            \"cats\": [\r\n                20\r\n            ],\r\n            \"headers\": {\r\n                \"webdevsrc\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003c!-- [a-za-z0-9_]+ [\\\\d/]+ [\\\\d:]+ webdev \\\\d\\\\d ([\\\\d.]+) --\\u003e\\\\;version:\\\\1\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^webdev$\"\r\n                ]\r\n            },\r\n            \"description\": \"WEBDEV is a tool to develop internet and intranet sites and applications that support data and processes\",\r\n            \"website\": \"https://www.windev.com/webdev/index.html\"\r\n        },\r\n        \"WEBXPAY\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"webxpay\"\r\n            ],\r\n            \"description\": \"WEBXPAY is a specialised online payment gateway that expedites buying and selling in a highly secured environment.\",\r\n            \"website\": \"https://webxpay.com\"\r\n        },\r\n        \"WEBrick\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^webrick/([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"WEBrick is a lightweight HTTP server library in Ruby, included in the standard library, primarily used for local development and testing of Ruby web applications.\",\r\n            \"website\": \"https://docs.ruby-lang.org/en/2.4.0/WEBrick.html\",\r\n            \"cpe\": \"cpe:2.3:a:ruby-lang:webrick:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"WEN Themes Education Hub\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"educationhubscreenreadertext\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/education-hub(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"WEN Themes Education Hub is a clean and elegant WordPress education theme.\",\r\n            \"website\": \"https://wenthemes.com/item/wordpress-themes/education-hub\"\r\n        },\r\n        \"WEN Themes Signify Dark\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"signifyoptions\"\r\n            ],\r\n            \"description\": \"Signify Dark is a free dark blog and corporate WordPress theme that is trendy, responsive, and dynamic by WEN Themes.\",\r\n            \"website\": \"https://wenthemes.com/item/wordpress-themes/signify-dark\"\r\n        },\r\n        \"WHMCS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"whmcs\"\r\n            ],\r\n            \"description\": \"WHMCS is an automation platform that simplifies and automates all aspects of operating an online web hosting and domain registrar business.\",\r\n            \"website\": \"https://www.whmcs.com\"\r\n        },\r\n        \"WP Automatic\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/wp-automatic/\"\r\n            ],\r\n            \"description\": \"WP Automatic is a WordPress plugin that automates the process of creating posts on your WordPress site by automatically fetching content from various sources like RSS feeds, Amazon, eBay, ClickBank, and more.\",\r\n            \"website\": \"https://wpautomatic.com\"\r\n        },\r\n        \"WP Engine\": {\r\n            \"cats\": [\r\n                62,\r\n                88\r\n            ],\r\n            \"headers\": {\r\n                \"wpe-backend\": \"\",\r\n                \"x-pass-why\": \"\",\r\n                \"x-powered-by\": \"wp engine\",\r\n                \"x-wpe-loopback-upstream-addr\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"WordPress\"\r\n            ],\r\n            \"description\": \"WP Engine is a website hosting provider.\",\r\n            \"website\": \"https://wpengine.com\"\r\n        },\r\n        \"WP Fastest Cache\": {\r\n            \"cats\": [\r\n                87,\r\n                92\r\n            ],\r\n            \"js\": [\r\n                \"wpfcll\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/cache/wpfc-minified/\"\r\n            ],\r\n            \"description\": \"WP Fastest Cache is one of a number of plugins for WordPress designed to accelerate the performance of your website.\",\r\n            \"website\": \"https://www.wpfastestcache.com\"\r\n        },\r\n        \"WP Featherlight\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wpfeatherlight\\\\.pkgd\\\\.min\\\\.js\"\r\n            ],\r\n            \"description\": \"WP Featherlight is a WordPress lightbox plugin for adding a minimal, high-performance, responsive jQuery lightbox to your WordPress website.\",\r\n            \"website\": \"https://wordpress.org/plugins/wp-featherlight\"\r\n        },\r\n        \"WP Google Map Plugin\": {\r\n            \"cats\": [\r\n                87,\r\n                35\r\n            ],\r\n            \"js\": [\r\n                \"wpgmp_local\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/wp-google-map-plugin/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"WP Google Map Plugin allows you to create google maps shortcodes to display responsive google maps on pages, widgets and custom templates.\",\r\n            \"website\": \"https://www.wpmapspro.com\"\r\n        },\r\n        \"WP Job Openings\": {\r\n            \"cats\": [\r\n                87,\r\n                101\r\n            ],\r\n            \"js\": [\r\n                \"awsmjobs\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/wp-job-openings/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"WP Job Openings is a job listing and recruitment plugin for WordPress websites.\",\r\n            \"website\": \"https://wpjobopenings.com\"\r\n        },\r\n        \"WP Live Visitor Counter\": {\r\n            \"cats\": [\r\n                87,\r\n                5\r\n            ],\r\n            \"description\": \"WP Live Visitor Counter is a WordPress plugin that displays the number of online visitors on a website in real-time.\",\r\n            \"website\": \"https://wordpress.org/plugins/wp-visitors-widget/\"\r\n        },\r\n        \"WP Maintenance Mode\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"wpmm_vars\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/wp-maintenance-mode/.+wpmm\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"WP Maintenance Mode is a WordPress plugin which add a maintenance page to your blog.\",\r\n            \"website\": \"https://github.com/andrianvaleanu/WP-Maintenance-Mode\"\r\n        },\r\n        \"WP Portfolio\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/astra-portfolio/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"WP Portfolio is a premium standalone WordPress plugin designed for creating and showcasing portfolios.\",\r\n            \"website\": \"https://wpportfolio.net\"\r\n        },\r\n        \"WP Puzzle Basic\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/basic/\"\r\n            ],\r\n            \"description\": \"WP Puzzle Basic is fully responsive, clean and minimal WordPress theme.\",\r\n            \"website\": \"https://wp-puzzle.com/basic\"\r\n        },\r\n        \"WP Rocket\": {\r\n            \"cats\": [\r\n                23,\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"rocket_lazy\",\r\n                \"rocketlazyloadscripts\",\r\n                \"rocketpreloadlinksconfig\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"wp rocket(?:/([\\\\d.]+))?\\\\;version:\\\\1\",\r\n                \"x-rocket-nginx-bypass\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003c!--[^\\u003e]+wp rocket\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/wp-rocket/\"\r\n            ],\r\n            \"description\": \"WP Rocket is a caching and performance optimisation plugin to improve the loading speed of WordPress websites.\",\r\n            \"website\": \"https://wp-rocket.me\"\r\n        },\r\n        \"WP-Optimize\": {\r\n            \"cats\": [\r\n                87,\r\n                92\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!--[^\\u003e]+cached by wp-optimize\"\r\n            ],\r\n            \"description\": \"WP-Optimize is an all-in-one WordPress plugin that cleans your database, compresses your large images and caches your site.\",\r\n            \"website\": \"https://getwpo.com\"\r\n        },\r\n        \"WP-PageNavi\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"description\": \"WP-PageNavi is a WordPress plugin which adds a more advanced paging navigation interface to your WordPress blog.\",\r\n            \"website\": \"https://github.com/lesterchan/wp-pagenavi\"\r\n        },\r\n        \"WP-Royal Ashe\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"ashepreloader\",\r\n                \"ashestickysidebar\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/ashe(?:-pro-premium)?/\"\r\n            ],\r\n            \"description\": \"WP-Royal Ashe is a personal and multi-author WordPress blog theme.\",\r\n            \"website\": \"https://wp-royal.com/themes/item-ashe-free\"\r\n        },\r\n        \"WP-Royal Bard\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/bard(?:-pro-premium)?/\"\r\n            ],\r\n            \"description\": \"WP-Royal Bard is a personal and multi-author WordPress blog theme.\",\r\n            \"website\": \"https://wp-royal.com/themes/item-bard-free\"\r\n        },\r\n        \"WP-Statistics\": {\r\n            \"cats\": [\r\n                10,\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"wp_statistics_http\",\r\n                \"wps_statistics_object\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- analytics by wp-statistics v([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"WP-Statistics is a WordPress plugin which allows you to know your website statistics.\",\r\n            \"website\": \"https://wp-statistics.com\"\r\n        },\r\n        \"WPCacheOn\": {\r\n            \"cats\": [\r\n                23,\r\n                87\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^optimized by wpcacheon\"\r\n            },\r\n            \"description\": \"WPCacheOn is a caching and performance optimisation plugin, which improves the loading speed of WordPress websites.\",\r\n            \"website\": \"https://wpcacheon.io\"\r\n        },\r\n        \"WPForms\": {\r\n            \"cats\": [\r\n                87,\r\n                110\r\n            ],\r\n            \"js\": [\r\n                \"wpforms\",\r\n                \"wpforms_settings\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/wpforms(?:-lite)?/.+(?:frontend\\\\.min|wpforms)\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"WPForms is a drag and drop WordPress form builder.\",\r\n            \"website\": \"https://wpforms.com\"\r\n        },\r\n        \"WPML\": {\r\n            \"cats\": [\r\n                87,\r\n                89\r\n            ],\r\n            \"cookies\": {\r\n                \"wp-wpml_current_language\": \"\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/sitepress-multilingual-cms/\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^wpml\\\\sver\\\\:([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"WPML plugin makes it possible to build and run fully multilingual WordPress sites.\",\r\n            \"website\": \"https://wpml.org/\"\r\n        },\r\n        \"WPMU DEV Smush\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/wp-smushit(?:-pro)?/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"WPMU DEV Smush is a WordPress plugin that allows you to optimise images without losing quality.\",\r\n            \"website\": \"https://wpmudev.com/project/wp-smush-pro\"\r\n        },\r\n        \"WPS Visitor Counter\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"wpspagevisit\"\r\n            ],\r\n            \"description\": \"WPS Visitor Counter is a plugin for WordPress that counts the number of visitors to a website.\",\r\n            \"website\": \"https://wordpress.org/plugins/wps-visitor-counter/\"\r\n        },\r\n        \"Wagtail\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"implies\": [\r\n                \"Django\",\r\n                \"Python\"\r\n            ],\r\n            \"description\": \"Wagtail is a Django content management system (CMS) focused on flexibility and user experience.\",\r\n            \"website\": \"https://wagtail.org\",\r\n            \"cpe\": \"cpe:2.3:a:torchbox:wagtail:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Wair\": {\r\n            \"cats\": [\r\n                76,\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"predictv3.default.version\",\r\n                \"predictwidget\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"getwair\\\\.com\"\r\n            ],\r\n            \"description\": \"Wair is the widget to personalised fit.\",\r\n            \"website\": \"https://getwair.com\"\r\n        },\r\n        \"Waitlist\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"gw_backend_url\",\r\n                \"gw_waitlist_name\"\r\n            ],\r\n            \"description\": \"Waitlist is a web-based tool that helps businesses to create a waitlist for their product or service.\",\r\n            \"website\": \"https://www.getwaitlist.com\"\r\n        },\r\n        \"Wakav Performance Monitoring\": {\r\n            \"cats\": [\r\n                78\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"rum\\\\.wakav\\\\.ir/\"\r\n            ],\r\n            \"description\": \"Wakav Performance Monitoring is a real user monitoring (RUM), Web/App performance and availability test platform.\",\r\n            \"website\": \"https://www.wakav.ir\"\r\n        },\r\n        \"WalkMe\": {\r\n            \"cats\": [\r\n                58\r\n            ],\r\n            \"js\": [\r\n                \"_walkmeconfig\",\r\n                \"walkmeapi\"\r\n            ],\r\n            \"description\": \"WalkMe is a cloud-based interactive guidance and engagement platform.\",\r\n            \"website\": \"https://www.walkme.com\"\r\n        },\r\n        \"Wangsu\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"js\": [\r\n                \"__cdnroute\",\r\n                \"playurl.wangsu\"\r\n            ],\r\n            \"description\": \"Wangsu is a China-based company that provides content delivery network and internet data center services.\",\r\n            \"website\": \"https://en.wangsu.com\"\r\n        },\r\n        \"Warp\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^warp/(\\\\d+(?:\\\\.\\\\d+)+)?$\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Haskell\"\r\n            ],\r\n            \"website\": \"https://www.stackage.org/package/warp\"\r\n        },\r\n        \"Wask\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"wask_analytics\"\r\n            ],\r\n            \"description\": \"Wask is a platform that offers businesses a dedicated library code to analyse website visitors, track visitor behaviour, monitor website events, and gather retention cohort data effectively.\",\r\n            \"website\": \"https://www.wask.co\"\r\n        },\r\n        \"Waveform\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"waveform\"\r\n            ],\r\n            \"description\": \"Waveform is a media player that supports various media formats, including audio, video, Youtube, and Vimeo, and includes a waveform visualisation feature, utilising Web Audio API and HTML5 Canvas technologies.\",\r\n            \"website\": \"https://music.flatfull.com/waveme/about/\"\r\n        },\r\n        \"Waveme\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"implies\": [\r\n                \"Gutenberg\",\r\n                \"Waveform\"\r\n            ],\r\n            \"description\": \"Waveme is a WordPress theme that is suitable for individuals or businesses involved in the music industry, such as music producers, record labels, artist managers, or independent artists.\",\r\n            \"website\": \"https://music.flatfull.com/waveme/about/\"\r\n        },\r\n        \"WayForPay\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"secure\\\\.wayforpay\\\\.com\"\r\n            ],\r\n            \"description\": \"WayForPay is a payment processing service provider based in Europe.\",\r\n            \"website\": \"https://wayforpay.com\"\r\n        },\r\n        \"Wazimo\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"wz.mmconfig.buildversion\"\r\n            ],\r\n            \"description\": \"Wazimo is a digital media company focused on combining engaging content with advanced real-time tendering (RTB) capabilities.\",\r\n            \"website\": \"https://wazimo.com\"\r\n        },\r\n        \"WeWeb\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"wwg_designinfo.wewebpreviewurl\"\r\n            ],\r\n            \"description\": \"WeWeb is a no-code front-end builder that allows customers to build on-top of any back-end.\",\r\n            \"website\": \"https://www.weweb.io\"\r\n        },\r\n        \"Weaver Xtreme\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"weaverxbottomfooter\",\r\n                \"weaverxmonitorcontent\",\r\n                \"weaverxonresize\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/weaver-xtreme/.+weaverxjslib-end\\\\.min\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Weaver Xtreme is the orginal options-based WordPress theme.\",\r\n            \"website\": \"https://weavertheme.com\"\r\n        },\r\n        \"Web Shop Manager\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"wsm.tracking\",\r\n                \"wsm_catalogtabby\",\r\n                \"wsm_chart_colors_opaque\",\r\n                \"wsmhidehelpbox\"\r\n            ],\r\n            \"description\": \"Web Shop Manager is an ecommerce and search platform for the automotive industry and markets with complex product catalogs.\",\r\n            \"website\": \"https://webshopmanager.com\"\r\n        },\r\n        \"Web Stories\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"implies\": [\r\n                \"AMP\"\r\n            ],\r\n            \"description\": \"Web Stories is a format for visual storytelling for the open web.\",\r\n            \"website\": \"https://amp.dev/about/stories/\"\r\n        },\r\n        \"Web Stories for WordPress\": {\r\n            \"cats\": [\r\n                20,\r\n                87\r\n            ],\r\n            \"meta\": {\r\n                \"amp-story-generator-name\": [\r\n                    \"^web stories for wordpress$\"\r\n                ],\r\n                \"amp-story-generator-version\": [\r\n                    \"^(.+)$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Web Stories\"\r\n            ],\r\n            \"description\": \"Web Stories for WordPress is a visual editor for creating Web Stories.\",\r\n            \"website\": \"https://wp.stories.google\"\r\n        },\r\n        \"Web Wiz Forums\": {\r\n            \"cats\": [\r\n                2\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^web\\\\swiz\\\\sforums(?:\\\\s([\\\\d\\\\.]+))?$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"description\": \"Web Wiz Forums is a web-based forum software that enables developers to create and manage online discussion boards or forums for engaging user interactions and community building.\",\r\n            \"website\": \"https://www.webwizforums.com\"\r\n        },\r\n        \"Web2py\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"web2py\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"web2py\\\\.js\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^web2py\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Python\",\r\n                \"jQuery\"\r\n            ],\r\n            \"website\": \"https://web2py.com\"\r\n        },\r\n        \"WebAssembly\": {\r\n            \"cats\": [\r\n                27\r\n            ],\r\n            \"js\": [\r\n                \"wasmbinary\",\r\n                \"wasmbinaryfile\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-type\": \"application/wasm\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"/wasm_exec\\\\.js\"\r\n            ],\r\n            \"description\": \"WebAssembly (abbreviated Wasm) is a binary instruction format for a stack-based virtual machine. Wasm is designed as a portable compilation target for programming languages, enabling deployment on the web for client and server applications.\",\r\n            \"website\": \"https://webassembly.org/\"\r\n        },\r\n        \"WebEngage\": {\r\n            \"cats\": [\r\n                32,\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"webengage.__v\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.webengage\\\\.co(?:m)?/\"\r\n            ],\r\n            \"description\": \"WebEngage is a customer data platform and marketing automation suite.\",\r\n            \"website\": \"https://webengage.com\"\r\n        },\r\n        \"WebFactory Maintenance\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"mtnc_front_options\"\r\n            ],\r\n            \"description\": \"WebFactory Maintenance is a WordPress plugin which allows you to create an maintenance page.\",\r\n            \"website\": \"https://wordpress.org/plugins/maintenance\"\r\n        },\r\n        \"WebFactory Under Construction\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"description\": \"WebFactory Under Construction is a WordPress plugin which allows you to create an under construction page.\",\r\n            \"website\": \"https://wordpress.org/plugins/under-construction-page\"\r\n        },\r\n        \"WebGUI\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"wgsession\": \"\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^webgui ([\\\\d.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Perl\"\r\n            ],\r\n            \"website\": \"https://www.webgui.org\"\r\n        },\r\n        \"WebHostUK\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"description\": \"WebHostUK is a UK based web hosting company offering cheap yet reliable and secure web hosting solutions on both Linux and Windows servers.\",\r\n            \"website\": \"https://www.webhostuk.co.uk\"\r\n        },\r\n        \"WebMetric\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"cookies\": {\r\n                \"_wmuid\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"_wmid\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.webmetric\\\\.ir\"\r\n            ],\r\n            \"website\": \"https://webmetric.ir/\"\r\n        },\r\n        \"WebNode\": {\r\n            \"cats\": [\r\n                1,\r\n                51\r\n            ],\r\n            \"cookies\": {\r\n                \"_gat_wnd_header\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"wnd.$system\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^webnode(?:\\\\s([\\\\d.]+))?$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"Webnode is a drag-and-drop online website builder.\",\r\n            \"website\": \"https://www.webnode.com\"\r\n        },\r\n        \"WebRTC\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"description\": \"WebRTC is an open-source project that enables real-time voice, text and video communications capabilities between web browsers and devices.\",\r\n            \"website\": \"https://webrtc.org\"\r\n        },\r\n        \"WebSite X5\": {\r\n            \"cats\": [\r\n                20\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"incomedia website x5 (\\\\w+ [\\\\d.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"WebSite X5 is a tools to create and publish websites.\",\r\n            \"website\": \"https://websitex5.com\"\r\n        },\r\n        \"WebToffee Stripe Payment Plugin for WooCommerce\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"implies\": [\r\n                \"Stripe\",\r\n                \"WooCommerce\"\r\n            ],\r\n            \"description\": \"WebToffee Stripe Payment Plugin for WooCommerce is a software add-on that allows online retailers using the WooCommerce ecommerce platform to accept payments through the Stripe payment gateway.\",\r\n            \"website\": \"https://www.webtoffee.com/product/woocommerce-stripe-payment-gateway/\"\r\n        },\r\n        \"WebZi\": {\r\n            \"cats\": [\r\n                1,\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"webzicart\",\r\n                \"webzivalidate\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//webzi\\\\.ir/\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^webzi\\\\.ir\\\\swebsite\\\\sbuilder$\"\r\n                ]\r\n            },\r\n            \"description\": \"WebZi is a professional website builder.\",\r\n            \"website\": \"https://webzi.ir\"\r\n        },\r\n        \"Webasyst Shop-Script\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"shop_cityselect.lib\",\r\n                \"shopordercallconfigstaticurl\"\r\n            ],\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Webasyst Shop-Script is a feature-rich PHP ecommerce framework and shopping cart solution.\",\r\n            \"website\": \"https://www.shop-script.com\"\r\n        },\r\n        \"Webeyez\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"___webeyez_cache\",\r\n                \"___webeyez_register_error\",\r\n                \"webeyez_wzpageentrykey\",\r\n                \"webeyezstartall\"\r\n            ],\r\n            \"description\": \"Webeyez is an ecommerce monitoring and analytics solution designed to assist teams in identifying, alerting, prioritising, and resolving operational and technical issues for revenue recovery.\",\r\n            \"website\": \"https://www.webeyez.com\"\r\n        },\r\n        \"Webflow\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"webflow\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"webflow\"\r\n                ]\r\n            },\r\n            \"description\": \"Webflow is Software-as-a-Service (SaaS) for website building and hosting.\",\r\n            \"website\": \"https://webflow.com\"\r\n        },\r\n        \"Webflow Ecommerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"__webflow_currency_settings\"\r\n            ],\r\n            \"description\": \"Webflow is a zero-code visual website builder, with Webflow Ecommerce, you can build and design online stores.\",\r\n            \"website\": \"https://webflow.com/ecommerce\"\r\n        },\r\n        \"Webgains\": {\r\n            \"cats\": [\r\n                71\r\n            ],\r\n            \"js\": [\r\n                \"itclkq\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"analytics\\\\.webgains\\\\.io\"\r\n            ],\r\n            \"description\": \"Webgains is an affiliate marketing network.\",\r\n            \"website\": \"https://www.webgains.com/\"\r\n        },\r\n        \"Webix\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"webix\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\bwebix\\\\.js\"\r\n            ],\r\n            \"website\": \"https://webix.com\"\r\n        },\r\n        \"Weblication\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^weblication® cms$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\",\r\n                \"XSLT\"\r\n            ],\r\n            \"description\": \"Weblication is an enterprise-class website content management system developed by Scholl Communications AG in Germany.\",\r\n            \"website\": \"https://weblication.de\",\r\n            \"cpe\": \"cpe:2.3:a:weblication:cms_core_\\u0026_grid:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Weblium\": {\r\n            \"cats\": [\r\n                1,\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"res2\\\\.weblium\\\\.site/common/core\\\\.min\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Node.js\",\r\n                \"OpenResty\",\r\n                \"React\"\r\n            ],\r\n            \"description\": \"Weblium let's you create a web site or online store without the need for a web developer or designer.\",\r\n            \"website\": \"https://weblium.com\"\r\n        },\r\n        \"Weblogic Server\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^weblogic\\\\sserver\\\\s([\\\\d\\\\.]+)?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"JavaServer Pages\"\r\n            ],\r\n            \"description\": \"WebLogic Server is an Application Server that runs on a middle tier, between back-end databases and related applications and browser-based thin clients.\",\r\n            \"website\": \"https://www.oracle.com/java/weblogic\"\r\n        },\r\n        \"Webmin\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"implies\": [\r\n                \"Perl\"\r\n            ],\r\n            \"description\": \"Webmin is a free, open-source application for Linux server administration.\",\r\n            \"website\": \"https://www.webmin.com\"\r\n        },\r\n        \"Webolytics\": {\r\n            \"cats\": [\r\n                10,\r\n                71\r\n            ],\r\n            \"js\": [\r\n                \"webolytics_site_tag\",\r\n                \"webolytics_webhook_call\"\r\n            ],\r\n            \"description\": \"Webolytics is an open API platform designed to track return on advertising spend.\",\r\n            \"website\": \"https://www.webolytics.com\"\r\n        },\r\n        \"Webpack\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"webpackchunk\",\r\n                \"webpackjsonp\"\r\n            ],\r\n            \"description\": \"Webpack is an open-source JavaScript module bundler.\",\r\n            \"website\": \"https://webpack.js.org/\"\r\n        },\r\n        \"Webpushr\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"webpushr.notificationcard\",\r\n                \"webpushr_display_button\"\r\n            ],\r\n            \"scripts\": [\r\n                \"cdn\\\\.webpushr\\\\.com/app\\\\.min\\\\.js\"\r\n            ],\r\n            \"description\": \"Webpushr is a web push notification platform that supports mobile and desktop devices.\",\r\n            \"website\": \"https://www.webpushr.com\"\r\n        },\r\n        \"Webriti Busiprof\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/busiprof(?:-pro)?/\"\r\n            ],\r\n            \"description\": \"Busiprof is a fully responsive and translation-ready WordPress theme by Webriti.\",\r\n            \"website\": \"https://webriti.com/busiprof-premium-wordpress-theme-1\"\r\n        },\r\n        \"WebsPlanet\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"websplanet\"\r\n                ]\r\n            },\r\n            \"website\": \"https://websplanet.com\"\r\n        },\r\n        \"Websale\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"websale_ac\": \"\"\r\n            },\r\n            \"website\": \"https://websale.de\"\r\n        },\r\n        \"Website Creator\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"website creator by hosttech\"\r\n                ],\r\n                \"wsc_rendermode\": []\r\n            },\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\",\r\n                \"Vue.js\"\r\n            ],\r\n            \"website\": \"https://www.hosttech.ch/websitecreator\"\r\n        },\r\n        \"WebsiteBaker\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"websitebaker\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://websitebaker2.org/en/home.php\"\r\n        },\r\n        \"WebsiteBuilder\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"_site.urls.dataproxy\"\r\n            ],\r\n            \"description\": \"WebsiteBuilder is a page-builder for creating web pages without knowledge of programming languages.\",\r\n            \"website\": \"https://www.websitebuilder.com\"\r\n        },\r\n        \"Websocket\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c(?:link|a)[^\\u003e]+href=[\\\"']wss?://\",\r\n                \"\\u003clink[^\\u003e]+rel=[\\\"']web-socket[\\\"']\"\r\n            ],\r\n            \"website\": \"https://en.wikipedia.org/wiki/WebSocket\"\r\n        },\r\n        \"Webtrends\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"webtrends\",\r\n                \"wtoptimize\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cimg[^\\u003e]+id=\\\"dcsimg\\\"[^\\u003e]+webtrends\"\r\n            ],\r\n            \"website\": \"https://worldwide.webtrends.com\"\r\n        },\r\n        \"Webx\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"description\": \"Webx is a hosted ecommerce solution from Pakistan.\",\r\n            \"website\": \"https://www.webx.pk\"\r\n        },\r\n        \"Webzie\": {\r\n            \"cats\": [\r\n                1,\r\n                6,\r\n                51\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^webzie\\\\.com\\\\swebsite\\\\sbuilder$\"\r\n                ]\r\n            },\r\n            \"description\": \"Webzie is a website builder optimised for performance.\",\r\n            \"website\": \"https://www.webzie.com/\"\r\n        },\r\n        \"Weebly\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"_w.configdomain\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\d+\\\\.editmysite\\\\.com\"\r\n            ],\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Weebly is a website and ecommerce service.\",\r\n            \"website\": \"https://www.weebly.com\"\r\n        },\r\n        \"Weglot\": {\r\n            \"cats\": [\r\n                89\r\n            ],\r\n            \"headers\": {\r\n                \"weglot-translated\": \"\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.weglot\\\\.com\",\r\n                \"wp-content/plugins/weglot\"\r\n            ],\r\n            \"website\": \"https://www.weglot.com\"\r\n        },\r\n        \"Welcart\": {\r\n            \"cats\": [\r\n                6,\r\n                87\r\n            ],\r\n            \"cookies\": {\r\n                \"usces_cookie\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003c!-- welcart version : v([\\\\d.]+)\\\\;version:\\\\1\",\r\n                \"\\u003clink[^\\u003e]+?href=\\\"[^\\\"]+usces_default(?:\\\\.min)?\\\\.css\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"uscesl10n\"\r\n            ],\r\n            \"description\": \"Welcart is a free ecommerce plugin for WordPress with top market share in Japan.\",\r\n            \"website\": \"https://www.welcart.com\",\r\n            \"cpe\": \"cpe:2.3:a:welcart:welcart:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"WeltPixel Pearl Theme\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"pearl\"\r\n            ],\r\n            \"implies\": [\r\n                \"Magento\\\\;version:2\"\r\n            ],\r\n            \"description\": \"Pearl Theme for Magento 2 by WeltPixel. Pearl Theme is following the Magento architecture, layouts and best practice in order to assure highest compatibility with 3rd party extensions.\",\r\n            \"website\": \"https://www.weltpixel.com/magento-2-theme-pearl\"\r\n        },\r\n        \"Whatfix\": {\r\n            \"cats\": [\r\n                58\r\n            ],\r\n            \"js\": [\r\n                \"_wfx_add_logger\",\r\n                \"_wfx_settings\",\r\n                \"wfx_is_playing__\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.whatfix\\\\.com/\"\r\n            ],\r\n            \"description\": \"Whatfix is a SaaS based platform which provides in-app guidance and performance support for web applications and software products.\",\r\n            \"website\": \"https://whatfix.com\"\r\n        },\r\n        \"WhatsApp Business Chat\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"description\": \"WhatsApp Business is a free to download app available on Android and iPhone using which businesses can connect with their customers.\",\r\n            \"website\": \"https://www.whatsapp.com/business\"\r\n        },\r\n        \"Wheelio\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"wheelioapp\\\\.azureedge\\\\.net\"\r\n            ],\r\n            \"description\": \"Wheelio is gamified pop-up/widget for ecommerce sites.\",\r\n            \"website\": \"https://wheelio-app.com/\"\r\n        },\r\n        \"Whistl\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Whistl is a postal delivery company operating in the United Kingdom.\",\r\n            \"website\": \"https://www.whistl.co.uk\"\r\n        },\r\n        \"Whooshkaa\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"html\": [\r\n                \"\\u003ciframe src=\\\"[^\\u003e]+whooshkaa\\\\.com\"\r\n            ],\r\n            \"website\": \"https://www.whooshkaa.com\"\r\n        },\r\n        \"WideBundle\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//widebundle\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"WideBundle is a Shopify application that allows a merchant to set up bundles on his store.\",\r\n            \"website\": \"https://en.widebundle.com\"\r\n        },\r\n        \"Widen\": {\r\n            \"cats\": [\r\n                95\r\n            ],\r\n            \"js\": [\r\n                \"widensessiontimer\",\r\n                \"widenui\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"assets/\\\\d+-\\\\d+/stack/en/widenjs\\\\.js\"\r\n            ],\r\n            \"description\": \"Widen is a digital asset management and product information management solutions provider.\",\r\n            \"website\": \"https://www.widen.com\"\r\n        },\r\n        \"WidgetWhats\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"wwwa_loaded\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.widgetwhats\\\\.com/\"\r\n            ],\r\n            \"description\": \"WidgetWhats is a fully customizable chat widget with appearance, text, color, button style and position.\",\r\n            \"website\": \"https://widgetwhats.com\"\r\n        },\r\n        \"Wigzo\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"wigzo\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"app\\\\.wigzo\\\\.com\"\r\n            ],\r\n            \"description\": \"Wigzo is e-commerce marketing automation platform that helps businesses of every size dig deeper into data to find opportunities to increase their sales and revenue.\",\r\n            \"website\": \"https://www.wigzo.com/\"\r\n        },\r\n        \"Wiki.js\": {\r\n            \"cats\": [\r\n                4\r\n            ],\r\n            \"js\": [\r\n                \"wiki.$_apolloinitdata\",\r\n                \"wiki.$apolloprovider\"\r\n            ],\r\n            \"implies\": [\r\n                \"Node.js\"\r\n            ],\r\n            \"description\": \"Wiki.js is a wiki engine running on Node.js and written in JavaScript.\",\r\n            \"website\": \"https://js.wiki\"\r\n        },\r\n        \"Wikinggruppen\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- wikinggruppen\"\r\n            ],\r\n            \"website\": \"https://wikinggruppen.se/\"\r\n        },\r\n        \"WikkaWiki\": {\r\n            \"cats\": [\r\n                8\r\n            ],\r\n            \"html\": [\r\n                \"powered by \\u003ca href=\\\"[^\\u003e]+wikkawiki\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"wikkawiki\"\r\n                ]\r\n            },\r\n            \"description\": \"WikkaWiki is an open-source wiki application written in PHP.\",\r\n            \"website\": \"https://wikkawiki.org\"\r\n        },\r\n        \"WildJar\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"trkcall\\\\.com/scripts\"\r\n            ],\r\n            \"description\": \"WildJar is a call tracking and intelligence platform which helps you understand where your leads are coming from, who is calling you, what your conversations are about and connect that data into other platforms.\",\r\n            \"website\": \"https://www.wildjar.com\"\r\n        },\r\n        \"Windows CE\": {\r\n            \"cats\": [\r\n                28\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"\\\\bwince\\\\b\"\r\n            },\r\n            \"description\": \"Windows CE is an operating system designed for small footprint devices or embedded systems.\",\r\n            \"website\": \"https://microsoft.com\"\r\n        },\r\n        \"Windows Server\": {\r\n            \"cats\": [\r\n                28\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"win32|win64\"\r\n            },\r\n            \"description\": \"Windows Server is a brand name for a group of server operating systems.\",\r\n            \"website\": \"https://microsoft.com/windowsserver\"\r\n        },\r\n        \"WineDirect\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"vin65.checkout\",\r\n                \"vin65remote\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^winedirect\\\\secommerce\"\r\n                ]\r\n            },\r\n            \"description\": \"WineDirect is an all-in-one ecommerce and POS (Point of Sale) platform that is specifically designed for wineries and wine retailers.\",\r\n            \"website\": \"https://www.winedirect.com\"\r\n        },\r\n        \"Wink\": {\r\n            \"cats\": [\r\n                26,\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"wink.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:_base/js/base|wink).*\\\\.js\"\r\n            ],\r\n            \"description\": \"Wink Toolkit is a JavaScript toolkit used to build mobile web apps.\",\r\n            \"website\": \"https://winktoolkit.org\"\r\n        },\r\n        \"Winstone Servlet Container\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"winstone servlet (?:container|engine) v?([\\\\d.]+)?\\\\;version:\\\\1\",\r\n                \"x-powered-by\": \"winstone(?:\\\\/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"website\": \"https://winstone.sourceforge.net\"\r\n        },\r\n        \"Wirecard\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"wirecardhpp\",\r\n                \"wirecardpaymentpage\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.wirecard\\\\.com/\"\r\n            ],\r\n            \"description\": \"Wirecard is a defunct German payment processor and financial services provider.\",\r\n            \"website\": \"https://www.wirecard.com\"\r\n        },\r\n        \"Wisepops\": {\r\n            \"cats\": [\r\n                5,\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"wisepops._api\",\r\n                \"wisepopsobject\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"loader\\\\.wisepops\\\\.com/get-loader\\\\.js\"\r\n            ],\r\n            \"description\": \"Wisepops is an intelligent popup and marketing automation system that offers marketers a single platform from which to create and manage website popups.\",\r\n            \"website\": \"https://wisepops.com\"\r\n        },\r\n        \"Wishlist King\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"appmate.version\",\r\n                \"appmate.wk\"\r\n            ],\r\n            \"description\": \"Wishlist King is a Shopify app which helps you to add your favorite products or share the wishlist with your friends built by Appmate.\",\r\n            \"website\": \"https://appmate.io\"\r\n        },\r\n        \"Wistia\": {\r\n            \"cats\": [\r\n                14\r\n            ],\r\n            \"js\": [\r\n                \"wistia\",\r\n                \"wistiaembeds\",\r\n                \"wistiautils\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.wistia\\\\.com\"\r\n            ],\r\n            \"description\": \"Wistia is designed exclusively to serve companies using video on their websites for marketing, support, and sales.\",\r\n            \"website\": \"https://wistia.com\"\r\n        },\r\n        \"With Reach\": {\r\n            \"cats\": [\r\n                106\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.rch\\\\.io/\",\r\n                \"checkout\\\\.gointerpay\\\\.net\"\r\n            ],\r\n            \"description\": \"With Reach is a fintech/payments service provider that helps retailers connect with customers around the world.\",\r\n            \"website\": \"https://www.withreach.com\"\r\n        },\r\n        \"Wix\": {\r\n            \"cats\": [\r\n                1,\r\n                11\r\n            ],\r\n            \"cookies\": {\r\n                \"domain\": \"\\\\.wix\\\\.com\"\r\n            },\r\n            \"js\": [\r\n                \"wixbisession\",\r\n                \"wixperformancemeasurements\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-wix-renderer-server\": \"\",\r\n                \"x-wix-request-id\": \"\",\r\n                \"x-wix-server-artifact-id\": \"\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"static\\\\.parastorage\\\\.com\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"wix\\\\.com website builder\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"React\"\r\n            ],\r\n            \"description\": \"Wix provides cloud-based web development services, allowing users to create HTML5 websites and mobile sites.\",\r\n            \"website\": \"https://www.wix.com\"\r\n        },\r\n        \"Wix Answers\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.wixanswers\\\\.com/\"\r\n            ],\r\n            \"description\": \"Wix Answers is a cloud-based help desk software.\",\r\n            \"website\": \"https://www.wixanswers.com\"\r\n        },\r\n        \"Wix eCommerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"implies\": [\r\n                \"Wix\"\r\n            ],\r\n            \"website\": \"https://www.wix.com/freesitebuilder/tae-store\"\r\n        },\r\n        \"WiziShop\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"wiziblock_array\",\r\n                \"wiziblocks_list\",\r\n                \"wscfg.bnavajust\"\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^wiziserver$\"\r\n            },\r\n            \"description\": \"WiziShop is an ecommerce solution provider.\",\r\n            \"website\": \"https://wizishop.com\"\r\n        },\r\n        \"Wizpay\": {\r\n            \"cats\": [\r\n                91\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"wp-content/plugins/creditcorp-wizardpay/.+\\\\?ver=([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Wizpay is a buy now pay later solution.\",\r\n            \"website\": \"https://www.wizpay.com.au\"\r\n        },\r\n        \"Wolf CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"html\": [\r\n                \"(?:\\u003ca href=\\\"[^\\u003e]+wolfcms\\\\.org[^\\u003e]+\\u003ewolf cms(?:\\u003c/a\\u003e)? inside|thank you for using \\u003ca[^\\u003e]+\\u003ewolf cms)\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://www.wolfcms.org\"\r\n        },\r\n        \"Woltlab Community Framework\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"wcf\\\\..*\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://www.woltlab.com\"\r\n        },\r\n        \"WooCommerce\": {\r\n            \"cats\": [\r\n                6,\r\n                87\r\n            ],\r\n            \"js\": [\r\n                \"woocommerce_params\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/woocommerce(?:\\\\.min)?\\\\.js(?:\\\\?ver=([0-9.]+))?\\\\;version:\\\\1\",\r\n                \"woocommerce\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"woocommerce ([\\\\d.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"WooCommerce is an open-source ecommerce plugin for WordPress.\",\r\n            \"website\": \"https://woocommerce.com\"\r\n        },\r\n        \"WooCommerce Blocks\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"description\": \"WooCommerce Blocks offers a range of Gutenberg blocks you can use to build and customise your site.\",\r\n            \"website\": \"https://github.com/woocommerce/woocommerce-gutenberg-products-block\"\r\n        },\r\n        \"WooCommerce Multilingual\": {\r\n            \"cats\": [\r\n                87,\r\n                89\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/woocommerce-multilingual/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"WooCommerce Multilingual plugin makes it possible to run fully multilingual ecommerce sites using WooCommerce and WPML.\",\r\n            \"website\": \"https://wordpress.org/plugins/woocommerce-multilingual\"\r\n        },\r\n        \"WooCommerce PayPal Checkout Payment Gateway\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/woocommerce-gateway-paypal-express-checkout/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"PayPal\"\r\n            ],\r\n            \"description\": \"WooCommerce PayPal Checkout Payment Gateway is a WordPress plugin which allows you to securely sell your products and subscriptions online using in-context checkout.\",\r\n            \"website\": \"https://github.com/woocommerce/woocommerce-gateway-paypal-express-checkout\"\r\n        },\r\n        \"WooCommerce PayPal Payments\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/woocommerce-paypal-payments/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"PayPal\"\r\n            ],\r\n            \"description\": \"WooCommerce PayPal Payments is a latest WordPress plugin with most complete payment processing solution. Accept PayPal exclusives, credit/debit cards and local payment methods.\",\r\n            \"website\": \"https://github.com/woocommerce/woocommerce-paypal-payments\"\r\n        },\r\n        \"WooCommerce Stripe Payment Gateway\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/woocommerce-gateway-stripe/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Stripe\"\r\n            ],\r\n            \"description\": \"WooCommerce Stripe Payment Gateway plugin extends WooCommerce allowing you to take payments directly on your store via Stripe’s API.\",\r\n            \"website\": \"https://woocommerce.com/products/stripe\"\r\n        },\r\n        \"WooCommerce Subscriptions\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"implies\": [\r\n                \"WooCommerce\"\r\n            ],\r\n            \"description\": \"WooCommerce Subscriptions primarily allows you to create and sell subscription products from your WooCommerce shop.\",\r\n            \"website\": \"https://woocommerce.com/products/woocommerce-subscriptions\"\r\n        },\r\n        \"Woopra\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"static\\\\.woopra\\\\.com\"\r\n            ],\r\n            \"website\": \"https://www.woopra.com\"\r\n        },\r\n        \"Woostify\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"woostify_woocommerce_general\",\r\n                \"woostifyconditionscrolling\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/woostify/\"\r\n            ],\r\n            \"implies\": [\r\n                \"WooCommerce\"\r\n            ],\r\n            \"description\": \"Woostify is fast, lightweight, responsive and flexible WooCommerce theme built with SEO, speed, and usability in mind.\",\r\n            \"website\": \"https://woostify.com\"\r\n        },\r\n        \"WoowUp\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"js\": [\r\n                \"wu._trackproductvtexfield\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"assets-cdn\\\\.woowup\\\\.com/\"\r\n            ],\r\n            \"description\": \"WoowUp is a tool of CRM and predictive marketing.\",\r\n            \"website\": \"https://www.woowup.com\"\r\n        },\r\n        \"WordAds\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.pubmine\\\\.com/\"\r\n            ],\r\n            \"description\": \"WordAds is an advertising platform run by Automatic that allows bloggers and website owners to place advertisements on their blogs and websites.\",\r\n            \"website\": \"https://wordads.co\"\r\n        },\r\n        \"WordPress\": {\r\n            \"cats\": [\r\n                1,\r\n                11\r\n            ],\r\n            \"js\": [\r\n                \"wp_username\"\r\n            ],\r\n            \"headers\": {\r\n                \"link\": \"rel=\\\"https://api\\\\.w\\\\.org/\\\"\",\r\n                \"x-pingback\": \"/xmlrpc\\\\.php$\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003clink rel=[\\\"']stylesheet[\\\"'] [^\\u003e]+/wp-(?:content|includes)/\",\r\n                \"\\u003clink[^\\u003e]+s\\\\d+\\\\.wp\\\\.com\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-(?:content|includes|admin)/\",\r\n                \"wp-embed\\\\.min\\\\.js\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^wordpress(?: ([\\\\d.]+))?\\\\;version:\\\\1\"\r\n                ],\r\n                \"shareaholic:wp_version\": []\r\n            },\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"WordPress is a free and open-source content management system written in PHP and paired with a MySQL or MariaDB database. Features include a plugin architecture and a template system.\",\r\n            \"website\": \"https://wordpress.org\",\r\n            \"cpe\": \"cpe:2.3:a:wordpress:wordpress:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"WordPress Default\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/default/\"\r\n            ],\r\n            \"description\": \"WordPress Default is a default WordPress theme.\",\r\n            \"website\": \"https://wordpress.org/themes/default\"\r\n        },\r\n        \"WordPress Multisite\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"description\": \"A multisite network is a collection of sites that all share the same WordPress installation core files. \",\r\n            \"website\": \"https://wordpress.org/documentation/article/create-a-network/\"\r\n        },\r\n        \"WordPress Super Cache\": {\r\n            \"cats\": [\r\n                23,\r\n                87\r\n            ],\r\n            \"headers\": {\r\n                \"wp-super-cache\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003c!--[^\\u003e]+wp-super-cache\"\r\n            ],\r\n            \"description\": \"WordPress Super Cache is a static caching plugin for WordPress.\",\r\n            \"website\": \"https://z9.io/wp-super-cache/\"\r\n        },\r\n        \"WordPress VIP\": {\r\n            \"cats\": [\r\n                62\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^wordpress vip|wpvip\\\\.com\"\r\n            },\r\n            \"implies\": [\r\n                \"WordPress\"\r\n            ],\r\n            \"description\": \"WordPress VIP is a managed hosting platform for WordPress.\",\r\n            \"website\": \"https://wpvip.com\"\r\n        },\r\n        \"WordPress.com\": {\r\n            \"cats\": [\r\n                62\r\n            ],\r\n            \"headers\": {\r\n                \"host-header\": \"wordpress\\\\.com\"\r\n            },\r\n            \"implies\": [\r\n                \"WordPress\"\r\n            ],\r\n            \"description\": \"WordPress.com is a platform for self-publishing that is popular for blogging and other works.\",\r\n            \"website\": \"https://wordpress.com\"\r\n        },\r\n        \"Wordfence\": {\r\n            \"cats\": [\r\n                87,\r\n                16\r\n            ],\r\n            \"js\": [\r\n                \"wordfenceajaxwatcher\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/wordfence/.+admin\\\\.ajaxwatcher\\\\.\\\\d+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Wordfence is a security plugin for sites that use WordPress. Wordfence includes an endpoint firewall and malware scanner.\",\r\n            \"website\": \"https://www.wordfence.com\"\r\n        },\r\n        \"Wordfence Login Security\": {\r\n            \"cats\": [\r\n                87,\r\n                16\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/wordfence/.+login\\\\.\\\\d+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Wordfence Login Security contains a subset of the functionality found in the full Wordfence plugin: Two-factor Authentication, XML-RPC Protection and Login Page CAPTCHA.\",\r\n            \"website\": \"https://www.wordfence.com\"\r\n        },\r\n        \"Workable\": {\r\n            \"cats\": [\r\n                101\r\n            ],\r\n            \"js\": [\r\n                \"webpackchunk_workable_candidate\"\r\n            ],\r\n            \"description\": \"Workable is the all-in-one hiring solution.\",\r\n            \"website\": \"https://www.workable.com\"\r\n        },\r\n        \"Workarea\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"weblinc.cartcount\",\r\n                \"workarea\"\r\n            ],\r\n            \"implies\": [\r\n                \"Elasticsearch\",\r\n                \"MongoDB\",\r\n                \"Ruby on Rails\"\r\n            ],\r\n            \"description\": \"Workarea is a SaaS ecommerce platform for medium to large businesses.\",\r\n            \"website\": \"https://www.workarea.com\"\r\n        },\r\n        \"World4You\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"description\": \"World4You operates homepage and domain solutions. World4Youu operates data centers in Austria and provides data protection.\",\r\n            \"website\": \"https://www.world4you.com\"\r\n        },\r\n        \"WorldPay\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"description\": \"WorldPay is a merchant services and payment processing provider offering a payment gateway for online transactions.\",\r\n            \"website\": \"https://online.worldpay.com\"\r\n        },\r\n        \"WorldShopping\": {\r\n            \"cats\": [\r\n                106\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"checkout-api\\\\.worldshopping\\\\.jp/(v\\\\d+)?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"WorldShopping makes online purchases in Japan easier for international visitors.\",\r\n            \"website\": \"https://www.worldshopping.global/\"\r\n        },\r\n        \"Worldz\": {\r\n            \"cats\": [\r\n                5,\r\n                76\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.worldztool\\\\.com/\"\r\n            ],\r\n            \"description\": \"Worldz calculates the economic value of a user’s social popularity (qualitatively and quantitatively). In proportion to this value, it provides a personalised discount, which can be applied in exchange for a social sharing by the user on their Instagram or Facebook profile.\",\r\n            \"website\": \"https://www.worldz-business.net\"\r\n        },\r\n        \"Wowza Video Player\": {\r\n            \"cats\": [\r\n                14\r\n            ],\r\n            \"js\": [\r\n                \"wowzaplayer\",\r\n                \"wowzaplayer.jsplayer\"\r\n            ],\r\n            \"description\": \"Wowza Video Player is a robust, industry standard player that provides HTML5, HLS, MPEG-DASH, and LL-DASH playback.\",\r\n            \"website\": \"https://www.wowza.com/video/player\"\r\n        },\r\n        \"Wufoo\": {\r\n            \"cats\": [\r\n                73\r\n            ],\r\n            \"description\": \"Wufoo is an online form builder that creates forms including contact forms, online payments, online surveys and event registrations.\",\r\n            \"website\": \"https://www.wufoo.com\"\r\n        },\r\n        \"Wuilt\": {\r\n            \"cats\": [\r\n                1,\r\n                51\r\n            ],\r\n            \"implies\": [\r\n                \"Node.js\",\r\n                \"React\"\r\n            ],\r\n            \"description\": \"Wuilt is the first Arab platform of its kind to help individuals and businesses create ready-made websites and ecommerce stores.\",\r\n            \"website\": \"https://wuilt.com\"\r\n        },\r\n        \"Wunderkind\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"bouncex\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.smarterhq\\\\.io\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"\\\\.bounceexchange\\\\.com\",\r\n                \"\\\\.smarterhq\\\\.io/\"\r\n            ],\r\n            \"description\": \"Wunderkind (Formerly BounceX) is a software for behavioural marketing technologies, created to de-anonymise site visitors, analyse their digital behaviour and create relevant digital experiences regardless of channel or device.\",\r\n            \"website\": \"https://www.wunderkind.co\"\r\n        },\r\n        \"Wurfl\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"wurfl\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.wurfl\\\\.io\"\r\n            ],\r\n            \"description\": \"WURFL.js is JavaScript that detects device models of smartphones, tablets, smart TVs and game consoles accessing your website.\",\r\n            \"website\": \"https://web.wurfl.io/\"\r\n        },\r\n        \"WysiBB\": {\r\n            \"cats\": [\r\n                24\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/jquery\\\\.wysibb\\\\.min\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"WysiBB very simple and functional open-source WYSIWYG BBCode editor based on jQuery.\",\r\n            \"website\": \"https://wysibb.com\"\r\n        },\r\n        \"X-Cart\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"xcart_web_dir\",\r\n                \"xliteconfig\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"x-cart(?: (\\\\d+))?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \" X-Cart is an open source PHP shopping cart ecommerce software platform.\",\r\n            \"website\": \"https://kb.x-cart.com\"\r\n        },\r\n        \"X.ai\": {\r\n            \"cats\": [\r\n                72\r\n            ],\r\n            \"js\": [\r\n                \"xdotaiaction\",\r\n                \"xdotaibutton\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:cdn)?x\\\\.ai/.*/xdotai-embed\\\\.js\"\r\n            ],\r\n            \"description\": \"X.ai is a scheduling tool that organizes meeting times and improves lead conversion by adding embedded booking buttons to websites or within live chat applications.\",\r\n            \"website\": \"https://x.ai\"\r\n        },\r\n        \"XAMPP\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"html\": [\r\n                \"\\u003ctitle\\u003exampp(?: version ([\\\\d\\\\.]+))?\\u003c/title\\u003e\\\\;version:\\\\1\"\r\n            ],\r\n            \"meta\": {\r\n                \"author\": [\r\n                    \"kai oswald seidler\\\\;confidence:10\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Apache HTTP Server\",\r\n                \"MySQL\",\r\n                \"PHP\",\r\n                \"Perl\"\r\n            ],\r\n            \"website\": \"https://www.apachefriends.org/en/xampp.html\"\r\n        },\r\n        \"XGen Ai\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//assets\\\\.xgen\\\\.dev/\"\r\n            ],\r\n            \"description\": \"XGen Ai is a cloud-based customer journey mapping tool that helps businesses manage product recommendations via artificial intelligence (AI).\",\r\n            \"website\": \"https://xgen.ai\"\r\n        },\r\n        \"XMB\": {\r\n            \"cats\": [\r\n                2\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- powered by xmb\"\r\n            ],\r\n            \"website\": \"https://www.xmbforum.com\"\r\n        },\r\n        \"XOOPS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"xoops\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"xoops\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://xoops.org\"\r\n        },\r\n        \"XRegExp\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"xregexp.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/([\\\\d.]+)/xregexp(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\",\r\n                \"xregexp.*\\\\.js\",\r\n                \"xregexp[.-]([\\\\d.]*\\\\d)[^/]*\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"website\": \"https://xregexp.com\"\r\n        },\r\n        \"XSLT\": {\r\n            \"cats\": [\r\n                27\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cxsl[^\\u003e]* version=\\\"(.+)\\\"\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"XSLT is designed for use as part of XSL, which is a stylesheet language for XML.\",\r\n            \"website\": \"https://www.w3.org/TR/xslt-10\"\r\n        },\r\n        \"XWiki\": {\r\n            \"cats\": [\r\n                8\r\n            ],\r\n            \"html\": [\r\n                \"\\u003chtml[^\\u003e]data-xwiki-[^\\u003e]\\u003e\"\r\n            ],\r\n            \"meta\": {\r\n                \"wiki\": [\r\n                    \"xwiki\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Java\\\\;confidence:99\"\r\n            ],\r\n            \"description\": \"XWiki is a free wiki software platform written in Java.\",\r\n            \"website\": \"https://www.xwiki.org\"\r\n        },\r\n        \"Xajax\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"xajax_core.*\\\\.js\"\r\n            ],\r\n            \"website\": \"https://xajax-project.org\"\r\n        },\r\n        \"Xanario\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"xanario shopsoftware\"\r\n                ]\r\n            },\r\n            \"website\": \"https://xanario.de\"\r\n        },\r\n        \"XenForo\": {\r\n            \"cats\": [\r\n                2\r\n            ],\r\n            \"cookies\": {\r\n                \"xf_csrf\": \"\",\r\n                \"xf_session\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"xf.guestusername\"\r\n            ],\r\n            \"html\": [\r\n                \"(?:jquery\\\\.extend\\\\(true, xenforo|\\u003ca[^\\u003e]+\\u003eforum software by xenforo™|\\u003c!--xf:branding|\\u003chtml[^\\u003e]+id=\\\"xenforo\\\")\",\r\n                \"\\u003chtml id=\\\"xf\\\" \"\r\n            ],\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"XenForo is a PHP-based forum hosting program for communities that is designed to be deployed on a remote web server.\",\r\n            \"website\": \"https://xenforo.com\"\r\n        },\r\n        \"Xeora\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"xeoraengine\",\r\n                \"x-powered-by\": \"xeoracube\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003cinput type=\\\"hidden\\\" name=\\\"_sys_bind_\\\\d+\\\" id=\\\"_sys_bind_\\\\d+\\\" /\\u003e\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/_bi_sps_v.+\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"website\": \"https://www.xeora.org\"\r\n        },\r\n        \"Xitami\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"xitami(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"website\": \"https://xitami.com\"\r\n        },\r\n        \"Xonic\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"html\": [\r\n                \"powered by \\u003ca href=\\\"http://www\\\\.xonic-solutions\\\\.de/index\\\\.php\\\" target=\\\"_blank\\\"\\u003exonic-solutions shopsoftware\\u003c/a\\u003e\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"core/jslib/jquery\\\\.xonic\\\\.js\\\\.php\"\r\n            ],\r\n            \"meta\": {\r\n                \"keywords\": [\r\n                    \"xonic-solutions\"\r\n                ]\r\n            },\r\n            \"website\": \"https://www.xonic-solutions.de\"\r\n        },\r\n        \"XpressEngine\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"xpressengine\"\r\n                ]\r\n            },\r\n            \"website\": \"https://www.xpressengine.com/\"\r\n        },\r\n        \"Xpresslane\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"apps\\\\.xpresslane\\\\.in/\"\r\n            ],\r\n            \"description\": \"Xpresslane is a checkout platform for ecommerce that focuses on increasing conversion during the checkout process.\",\r\n            \"website\": \"https://www.xpresslane.in\"\r\n        },\r\n        \"Xretail\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"author\": [\r\n                    \"^xretail team$\"\r\n                ]\r\n            },\r\n            \"description\": \"Xretail is a subscription based product that enables the omni-channel ecommerce approach to its customers.\",\r\n            \"website\": \"https://xretail.com\"\r\n        },\r\n        \"Xserver\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"description\": \"Xserver engages in web hosting, web application and internet-related services.\",\r\n            \"website\": \"https://www.xserver.ne.jp\"\r\n        },\r\n        \"Xtra\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/xtra/.+custom\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Xtra is a creative, responsive, live drag and drop and easy-to-use WordPress theme for any kind of websites.\",\r\n            \"website\": \"https://xtratheme.com\"\r\n        },\r\n        \"Xtremepush\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"xtremepush\"\r\n            ],\r\n            \"description\": \"Xtremepush is a customer engagement, personalisation and data platform. It's purpose-built for multichannel and mobile marketing.\",\r\n            \"website\": \"https://xtremepush.com\"\r\n        },\r\n        \"YMQ Product Options Variant Option\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"ymq_option.v\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"YMQ Product Options Variant Option help add an unlimited number of product options to your items so you're not restricted by Shopify's limit of 3 options and 100 variants.\",\r\n            \"website\": \"https://apps.shopify.com/ymq-options\"\r\n        },\r\n        \"YNAP Ecommerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"ycookieapiurl\",\r\n                \"ytos\"\r\n            ],\r\n            \"description\": \"YNAP provides a suite of B2B luxury services including online and mobile store development, omnichannel logistics, customer care, digital marketing, data-driven merchandising and global strategy development.\",\r\n            \"website\": \"https://www.ynap.com/pages/about-us/what-we-do/monobrand/\"\r\n        },\r\n        \"YUI\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"yahoo.version\",\r\n                \"yui.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:/yui/|yui\\\\.yahooapis\\\\.com)\"\r\n            ],\r\n            \"description\": \"YUI is a JavaScript and CSS library with more than 30 unique components including low-level DOM utilities and high-level user-interface widgets.\",\r\n            \"website\": \"https://clarle.github.io/yui3\",\r\n            \"cpe\": \"cpe:2.3:a:yahoo:yui:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"YUI Doc\": {\r\n            \"cats\": [\r\n                4\r\n            ],\r\n            \"html\": [\r\n                \"(?:\\u003chtml[^\\u003e]* yuilibrary\\\\.com/rdf/[\\\\d.]+/yui\\\\.rdf|\\u003cbody[^\\u003e]+class=\\\"yui3-skin-sam)\"\r\n            ],\r\n            \"description\": \"UIDoc is a Node.js application used at build time to generate API documentation.\",\r\n            \"website\": \"https://developer.yahoo.com/yui/yuidoc\"\r\n        },\r\n        \"YaBB\": {\r\n            \"cats\": [\r\n                2\r\n            ],\r\n            \"html\": [\r\n                \"powered by \\u003ca href=\\\"[^\\u003e]+yabbforum\"\r\n            ],\r\n            \"website\": \"https://www.yabbforum.com\"\r\n        },\r\n        \"Yahoo Advertising\": {\r\n            \"cats\": [\r\n                36,\r\n                77\r\n            ],\r\n            \"js\": [\r\n                \"adxinserthtml\",\r\n                \"yahoo_retargeting_pv_id\",\r\n                \"yahoo_ydn_conv_label\",\r\n                \"yahoo_ydn_conv_transaction_id\",\r\n                \"yahoocvload\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:adinterax|adserver\\\\.yahoo)\\\\.com\"\r\n            ],\r\n            \"description\": \"Yahoo Advertising includes a comprehensive suite of web, mobile, and video ad products across native, audience, and premium display, which are accessible through a new buying platform.\",\r\n            \"website\": \"https://www.adtech.yahooinc.com\"\r\n        },\r\n        \"Yahoo! Ecommerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"ystore\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-xrds-location\": \"/ystore/\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]+store\\\\.yahoo\\\\.net\"\r\n            ],\r\n            \"website\": \"https://smallbusiness.yahoo.com/ecommerce\"\r\n        },\r\n        \"Yahoo! Tag Manager\": {\r\n            \"cats\": [\r\n                42\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- (?:end )?yahoo! tag manager --\\u003e\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"b\\\\.yjtag\\\\.jp/iframe\"\r\n            ],\r\n            \"website\": \"https://tagmanager.yahoo.co.jp/\"\r\n        },\r\n        \"Yahoo! Web Analytics\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"ywa\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"d\\\\.yimg\\\\.com/mi/ywa\\\\.js\"\r\n            ],\r\n            \"website\": \"https://web.analytics.yahoo.com\"\r\n        },\r\n        \"YalinHost\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"description\": \"YalinHost is a web hosting service provider.\",\r\n            \"website\": \"https://yalinhost.com\"\r\n        },\r\n        \"Yampi Checkout\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"yampicheckouturl\"\r\n            ],\r\n            \"description\": \"Yampi Checkout is an payment processor from Brazil.\",\r\n            \"website\": \"https://www.yampi.com.br/checkout\"\r\n        },\r\n        \"Yampi Virtual store\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"yampi.api_domain\",\r\n                \"yampi.cart_token\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.yampi\\\\.io/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Yampi Checkout\"\r\n            ],\r\n            \"description\": \"Yampi Virtual store is an ecommerce platform from Brazil.\",\r\n            \"website\": \"https://www.yampi.com.br/loja-virtual\"\r\n        },\r\n        \"Yandex SmartCaptcha\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"headers\": {\r\n                \"x-yandex-captcha\": \"\"\r\n            },\r\n            \"description\": \"Yandex SmartCaptcha is a service for verifying queries to identify user requests and block bots.\",\r\n            \"website\": \"https://cloud.yandex.com/en/services/smartcaptcha\"\r\n        },\r\n        \"Yandex.Cloud\": {\r\n            \"cats\": [\r\n                62\r\n            ],\r\n            \"description\": \"Yandex.Cloud is a public cloud platform where companies can create and develop projects using Yandex's scalable computing power, advanced technologies, and infrastructure.\",\r\n            \"website\": \"https://cloud.yandex.com/en/\"\r\n        },\r\n        \"Yandex.Cloud CDN\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"implies\": [\r\n                \"Yandex.Cloud\"\r\n            ],\r\n            \"description\": \"Yandex.Cloud CDN helps you streamline static content delivery for your web service.\",\r\n            \"website\": \"https://cloud.yandex.com/en/services/cdn\"\r\n        },\r\n        \"Yandex.Direct\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"yandex_ad_format\",\r\n                \"yandex_partner_id\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cyatag class=\\\"ya-partner__ads\\\"\\u003e\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"https?://an\\\\.yandex\\\\.ru/\"\r\n            ],\r\n            \"description\": \"Yandex Direct is the platform designed for sponsored ad management.\",\r\n            \"website\": \"https://partner.yandex.com\"\r\n        },\r\n        \"Yandex.Messenger\": {\r\n            \"cats\": [\r\n                5,\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"yandexchatwidget\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"chat\\\\.s3\\\\.yandex\\\\.net/widget\\\\.js\"\r\n            ],\r\n            \"description\": \"Yandex.Messenger is an instant messaging application.\",\r\n            \"website\": \"https://dialogs.yandex.ru\"\r\n        },\r\n        \"Yandex.Metrika\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"yandex_metrika\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.jsdelivr\\\\.net/npm/yandex\\\\-metrica\\\\-watch/watch\\\\.js\",\r\n                \"mc\\\\.yandex\\\\.ru/metrika/(?:tag|watch)\\\\.js\"\r\n            ],\r\n            \"description\": \"Yandex.Metrica is a free web analytics service that tracks and reports website traffic.\",\r\n            \"website\": \"https://metrika.yandex.com\"\r\n        },\r\n        \"Yapla\": {\r\n            \"cats\": [\r\n                111\r\n            ],\r\n            \"js\": [\r\n                \"yaplaconsent.cookiename\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^yapla\\\\sv([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"Yapla is a web-based software platform that provides event management and fundraising solutions for non-profit organisations, associations, and event planners.\",\r\n            \"website\": \"https://www.yapla.com\"\r\n        },\r\n        \"Yaws\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"yaws(?: ([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"Yaws (Yet Another Web Server) is an open-source web server designed to deliver dynamic content efficiently. It was developed by Claes (klacke) Wikström and is written in Erlang, a functional programming language.\",\r\n            \"website\": \"https://github.com/erlyaws/yaws\"\r\n        },\r\n        \"Ycode\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"description\": \"Ycode is a no-code development platform that allows users to create web and mobile applications without any coding skills.\",\r\n            \"website\": \"https://www.ycode.com\"\r\n        },\r\n        \"Yektanet\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"yektanet\"\r\n            ],\r\n            \"meta\": {\r\n                \"yektanet_session_last_activity\": []\r\n            },\r\n            \"description\": \"Yektanet is the biggest and most advanced native advertising network in Iran.\",\r\n            \"website\": \"https://www.yektanet.com\"\r\n        },\r\n        \"Yelp Reservations\": {\r\n            \"cats\": [\r\n                93\r\n            ],\r\n            \"description\": \"Yelp Reservations is a cloud-based restaurant management system.\",\r\n            \"website\": \"https://yelp.com\"\r\n        },\r\n        \"Yelp Review Badge\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"yelp\\\\.com/biz_badge_js\"\r\n            ],\r\n            \"description\": \"Yelp Review Badges showcase business reviews from Yelp on websites.\",\r\n            \"website\": \"https://yelp.com\"\r\n        },\r\n        \"Yepcomm\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"author\": [\r\n                    \"yepcomm tecnologia\"\r\n                ],\r\n                \"copyright\": [\r\n                    \"yepcomm tecnologia\"\r\n                ]\r\n            },\r\n            \"website\": \"https://www.yepcomm.com.br\"\r\n        },\r\n        \"Yett\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"js\": [\r\n                \"yett_blacklist\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/yett@([\\\\d\\\\.]+)/dist/yett\\\\.min\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Yett is a small webpage library to control the execution of (third party) scripts like analytics.\",\r\n            \"website\": \"https://github.com/elbywan/yett\"\r\n        },\r\n        \"Yext\": {\r\n            \"cats\": [\r\n                29,\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"answers._analyticsreporterservice._baseurl\",\r\n                \"yext.analytics\",\r\n                \"yext.baseurl\",\r\n                \"yext_analytics\",\r\n                \"yextanalyticsenabled\",\r\n                \"yextanalyticsobject\"\r\n            ],\r\n            \"description\": \"Yext is a technology company that provides a cloud-based platform for managing digital knowledge and online reputation.\",\r\n            \"website\": \"https://www.yext.com\"\r\n        },\r\n        \"Yieldify\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"_yieldify\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.yieldify\\\\.com\"\r\n            ],\r\n            \"description\": \"Yieldify is a customer journey optimisation platform that brings personalisation to the full customer journey.\",\r\n            \"website\": \"https://www.yieldify.com\"\r\n        },\r\n        \"Yieldlab\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^https?://(?:[^/]+\\\\.)?yieldlab\\\\.net/\"\r\n            ],\r\n            \"website\": \"https://yieldlab.de\"\r\n        },\r\n        \"Yii\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"cookies\": {\r\n                \"yii_csrf_token\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003c!\\\\[cdata\\\\[yii-block-(?:head|body-begin|body-end)\\\\]\",\r\n                \"\\u003cinput type=\\\"hidden\\\" value=\\\"[a-za-z0-9]{40}\\\" name=\\\"yii_csrf_token\\\" \\\\/\\u003e\",\r\n                \"powered by \\u003ca href=\\\"http://www\\\\.yiiframework\\\\.com/\\\" rel=\\\"external\\\"\\u003eyii framework\\u003c/a\\u003e\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/assets/[a-za-z0-9]{8}\\\\/yii\\\\.js$\",\r\n                \"/yii\\\\.(?:validation|activeform)\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Yii is an open-source, object-oriented, component-based MVC PHP web application framework.\",\r\n            \"website\": \"https://www.yiiframework.com\"\r\n        },\r\n        \"Yoast Duplicate Post\": {\r\n            \"cats\": [\r\n                87\r\n            ],\r\n            \"description\": \"Yoast Duplicate Post is a WordPress plugin which allows users to clone posts of any type, or copy them to new drafts for further editing.\",\r\n            \"website\": \"https://wordpress.org/plugins/duplicate-post\"\r\n        },\r\n        \"Yoast SEO\": {\r\n            \"cats\": [\r\n                54,\r\n                87\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- this site is optimized with the yoast (?:wordpress )?seo plugin v([^\\\\s]+) -\\\\;version:\\\\1\",\r\n                \"\\u003c!-- this site is optimized with the yoast seo premium plugin v(?:[^\\\\s]+) \\\\(yoast seo v([^\\\\s]+)\\\\) -\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"WordPress\"\r\n            ],\r\n            \"description\": \"Yoast SEO is a search engine optimisation plugin for WordPress and other platforms.\",\r\n            \"website\": \"https://yoast.com/wordpress/plugins/seo/\"\r\n        },\r\n        \"Yoast SEO Premium\": {\r\n            \"cats\": [\r\n                54\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- this site is optimized with the yoast seo premium plugin v([^\\\\s]+) \\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"Yoast SEO Premium is a search engine optimisation plugin for WordPress and other platforms.\",\r\n            \"website\": \"https://yoast.com/wordpress/plugins/seo/\"\r\n        },\r\n        \"Yoast SEO for Shopify\": {\r\n            \"cats\": [\r\n                54,\r\n                100\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- this site is optimized with yoast seo for shopify --\\u003e\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Yoast SEO for Shopify optimizes Shopify shops.\",\r\n            \"website\": \"https://yoast.com/shopify/apps/yoast-seo/\"\r\n        },\r\n        \"Yodel\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Yodel is a delivery company for B2B and B2C orders in the United Kingdom.\",\r\n            \"website\": \"https://www.yodel.co.uk/\"\r\n        },\r\n        \"Yola\": {\r\n            \"cats\": [\r\n                51\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.yola(?:cdn)?\\\\.(?:net|com)/\"\r\n            ],\r\n            \"description\": \"Yola is a website builder and website hosting company headquartered in San Francisco.\",\r\n            \"website\": \"https://www.yola.com\"\r\n        },\r\n        \"YooMoney\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.yoomoney\\\\.ru\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"\\\\.yoomoney\\\\.ru/\"\r\n            ],\r\n            \"description\": \"YooMoney is an IT company working with electronic payments on the Internet, creating and supporting financial services for individuals and businesses.\",\r\n            \"website\": \"https://yoomoney.ru\"\r\n        },\r\n        \"Yoori\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scripts\": [\r\n                \"console\\\\.log\\\\(\\\\'yoori-ecommerce\"\r\n            ],\r\n            \"implies\": [\r\n                \"Laravel\",\r\n                \"MySQL\",\r\n                \"PHP\",\r\n                \"PWA\",\r\n                \"Vue.js\",\r\n                \"cPanel\"\r\n            ],\r\n            \"description\": \"Yoori is a multi-vendor PWA ecommerce CMS.\",\r\n            \"website\": \"https://spagreen.net/yoori-ecommerce-solution\"\r\n        },\r\n        \"Yotpo Loyalty \\u0026 Referrals\": {\r\n            \"cats\": [\r\n                84\r\n            ],\r\n            \"js\": [\r\n                \"swellapi\",\r\n                \"swellconfig\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn(?:-loyalty)?\\\\.(?:swellrewards|yotpo)\\\\.com/\"\r\n            ],\r\n            \"description\": \"Yotpo is a user-generated content marketing platform.\",\r\n            \"website\": \"https://www.yotpo.com/platform/loyalty/\"\r\n        },\r\n        \"Yotpo Reviews\": {\r\n            \"cats\": [\r\n                90\r\n            ],\r\n            \"js\": [\r\n                \"yotpo\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?!cdn-loyalty)\\\\.yotpo\\\\.com/\"\r\n            ],\r\n            \"description\": \"Yotpo is a user-generated content marketing platform.\",\r\n            \"website\": \"https://www.yotpo.com/platform/reviews/\"\r\n        },\r\n        \"Yotpo SMSBump\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"smsbumpform\"\r\n            ],\r\n            \"description\": \"SMS Bump is a SMS marketing and automations app which was acquired by Yotpo.\",\r\n            \"website\": \"https://www.yotpo.com/platform/smsbump-sms-marketing/\"\r\n        },\r\n        \"Yottaa\": {\r\n            \"cats\": [\r\n                42,\r\n                74,\r\n                92\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.yottaa\\\\.\\\\w+/\"\r\n            ],\r\n            \"meta\": {\r\n                \"x-yottaa-metrics\": [],\r\n                \"x-yottaa-optimizations\": []\r\n            },\r\n            \"description\": \"Yottaa is an ecommerce optimisation platform that helps with conversions, performance and security.\",\r\n            \"website\": \"https://www.yottaa.com\"\r\n        },\r\n        \"YouCam Makeup\": {\r\n            \"cats\": [\r\n                105\r\n            ],\r\n            \"js\": [\r\n                \"ymk.applymakeupbylook\",\r\n                \"ymk.caldeltae\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"plugins-media\\\\.(?:perfectcorp|makeupar)\\\\.com/\"\r\n            ],\r\n            \"description\": \"YouCam Makeup is a cross-platform virtual makeup solution for omnichannel ecommerce.\",\r\n            \"website\": \"https://www.perfectcorp.com/business/products/virtual-makeup\"\r\n        },\r\n        \"YouCan\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"ycpay\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"youcan\\\\.private\\\\.dc/\"\r\n            },\r\n            \"implies\": [\r\n                \"Laravel\",\r\n                \"MySQL\",\r\n                \"PHP\",\r\n                \"Redis\"\r\n            ],\r\n            \"description\": \"YouCan is an integrated platform specialised in ecommerce, offering a wide range of services needed by merchants and entrepreneurs.\",\r\n            \"website\": \"https://youcan.shop\"\r\n        },\r\n        \"YouPay\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"js\": [\r\n                \"youpay.buttonwindow\",\r\n                \"youpayready\",\r\n                \"youpaystatus\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"app\\\\.youpay\\\\.ai/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"YouPay is an alternative method of payment that allows you to give someone else the ability to pay for your shopping cart with no fees or interest.\",\r\n            \"website\": \"https://youpay.co\"\r\n        },\r\n        \"YouTrack\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"html\": [\r\n                \"data-reactid=\\\"[^\\\"]+\\\"\\u003eyoutrack ([0-9.]+)\\u003c\\\\;version:\\\\1\",\r\n                \"no-title=\\\"youtrack\\\"\\u003e\",\r\n                \"type=\\\"application/opensearchdescription\\\\+xml\\\" title=\\\"youtrack\\\"/\\u003e\"\r\n            ],\r\n            \"description\": \"YouTrack is a browser-based bug tracker, issue tracking system and project management software.\",\r\n            \"website\": \"https://www.jetbrains.com/youtrack/\"\r\n        },\r\n        \"YouTube\": {\r\n            \"cats\": [\r\n                14\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c(?:param|embed|iframe)[^\\u003e]+youtube(?:-nocookie)?\\\\.com/(?:v|embed)\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.youtube\\\\.com/\"\r\n            ],\r\n            \"description\": \"YouTube is a video sharing service where users can create their own profile, upload videos, watch, like and comment on other videos.\",\r\n            \"website\": \"https://www.youtube.com\"\r\n        },\r\n        \"YunoHost\": {\r\n            \"cats\": [\r\n                28\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/ynh_portal\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Debian\"\r\n            ],\r\n            \"description\": \"YunoHost is a server operating system that is free and open-source, allowing users to host their own web applications, email services, and other online tools. It is based on Debian GNU/Linux.\",\r\n            \"website\": \"https://yunohost.org\",\r\n            \"cpe\": \"cpe:2.3:o:yunohost:yunohost:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"ZK\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- zk [.\\\\d\\\\s]+--\\u003e\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"zkau/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"website\": \"https://zkoss.org\"\r\n        },\r\n        \"ZURB Foundation\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"js\": [\r\n                \"foundation.version\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cdiv [^\\u003e]*class=\\\"[^\\\"]*(?:small|medium|large)-\\\\d{1,2} columns\",\r\n                \"\\u003clink[^\\u003e]+foundation[^\\u003e\\\"]+css\"\r\n            ],\r\n            \"description\": \"Zurb Foundation is used to prototype in the browser. Allows rapid creation of websites or applications while leveraging mobile and responsive technology. The front end framework is the collection of HTML, CSS, and Javascript containing design patterns.\",\r\n            \"website\": \"https://foundation.zurb.com\"\r\n        },\r\n        \"Zabbix\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"zbxcallpostscripts\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cbody[^\\u003e]+zbxcallpostscripts\"\r\n            ],\r\n            \"meta\": {\r\n                \"author\": [\r\n                    \"zabbix sia\\\\;confidence:70\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://zabbix.com\",\r\n            \"cpe\": \"cpe:2.3:a:zabbix:zabbix:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Zakeke\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"zakekeboot\",\r\n                \"zakekecustomizelabel\",\r\n                \"zakekeloading\",\r\n                \"zakekeproductpage\"\r\n            ],\r\n            \"description\": \"Zakeke is a product customisation tool compatible with services and apps mostly used to manage ecommerce store.\",\r\n            \"website\": \"https://www.zakeke.com\"\r\n        },\r\n        \"Zakeke Interactive Product Designer\": {\r\n            \"cats\": [\r\n                87,\r\n                76\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/zakeke-interactive-product-designer/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"Zakeke\"\r\n            ],\r\n            \"description\": \"Zakeke Interactive Product Designer lets customers personalise any product and visualise how they’ll look before checking out.\",\r\n            \"website\": \"https://www.zakeke.com\"\r\n        },\r\n        \"Zakeke Visual Customizer\": {\r\n            \"cats\": [\r\n                100,\r\n                76\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.zakeke\\\\.com/scripts/integration/shopify/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Zakeke\"\r\n            ],\r\n            \"description\": \"Zakeke Visual Customizer is a cloud-connected visual ecommerce tool that allows brands and retailers to offer live, personalised, 2D, 3D, and augmented reality (AR) functionality for their products.\",\r\n            \"website\": \"https://www.zakeke.com\"\r\n        },\r\n        \"Zakra\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"js\": [\r\n                \"zakrafrontend\",\r\n                \"zakranavhelper.dimension\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/zakra/\"\r\n            ],\r\n            \"description\": \"Zakra is flexible, fast, lightweight and modern multipurpose WordPress theme that comes with many starter free sites.\",\r\n            \"website\": \"https://zakratheme.com\"\r\n        },\r\n        \"Zanox\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"zanox\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cimg [^\\u003e]*src=\\\"[^\\\"]+ad\\\\.zanox\\\\.com\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"zanox\\\\.com/scripts/zanox\\\\.js$\"\r\n            ],\r\n            \"website\": \"https://zanox.com\"\r\n        },\r\n        \"Zeabur\": {\r\n            \"cats\": [\r\n                62\r\n            ],\r\n            \"headers\": {\r\n                \"x-zeabur-request-id\": \"\"\r\n            },\r\n            \"description\": \"Zeabur is a platform for running full stack apps and databases.\",\r\n            \"website\": \"https://zeabur.com\"\r\n        },\r\n        \"Zeald\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"zes_backend\": \"zeald\"\r\n            },\r\n            \"description\": \"Zeald is a full-service website design and digital marketing company.\",\r\n            \"website\": \"https://www.zeald.com\"\r\n        },\r\n        \"Zeleris\": {\r\n            \"cats\": [\r\n                99\r\n            ],\r\n            \"description\": \"Zeleris provides door to door shipment delivery to Ireland, UK and the EU.\",\r\n            \"website\": \"https://www.zeleris.com\"\r\n        },\r\n        \"Zen Cart\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"zen cart\"\r\n                ]\r\n            },\r\n            \"website\": \"https://www.zen-cart.com\"\r\n        },\r\n        \"Zend\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"cookies\": {\r\n                \"zendserversessid\": \"\"\r\n            },\r\n            \"headers\": {\r\n                \"x-powered-by\": \"zend(?:server)?(?:[\\\\s/]?([0-9.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"website\": \"https://zend.com\",\r\n            \"cpe\": \"cpe:2.3:a:zend:zend_server:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"Zendesk\": {\r\n            \"cats\": [\r\n                4,\r\n                13,\r\n                52\r\n            ],\r\n            \"cookies\": {\r\n                \"_help_center_session\": \"\",\r\n                \"_zendesk_cookie\": \"\",\r\n                \"_zendesk_shared_session\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"zendesk\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-zendesk-user-id\": \"\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"static\\\\.zdassets\\\\.com\"\r\n            ],\r\n            \"description\": \"Zendesk is a cloud-based help desk management solution offering customizable tools to build customer service portal, knowledge base and online communities.\",\r\n            \"website\": \"https://zendesk.com\"\r\n        },\r\n        \"Zendesk Chat\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"v2\\\\.zopim\\\\.com\"\r\n            ],\r\n            \"description\": \"Zendesk Chat is a live chat and communication widget.\",\r\n            \"website\": \"https://zopim.com\"\r\n        },\r\n        \"Zendesk Sunshine Conversations\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.smooch\\\\.io/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Zendesk\"\r\n            ],\r\n            \"description\": \"Zendesk Sunshine Conversations lets you share a single, continuous conversation with every team in your business. With a unified API and native connectors to popular business applications like Zendesk and Slack, everyone in your organization can get access to a single view of the customer conversation.\",\r\n            \"website\": \"https://www.zendesk.com/platform/conversations\"\r\n        },\r\n        \"Zenfolio\": {\r\n            \"cats\": [\r\n                7\r\n            ],\r\n            \"js\": [\r\n                \"zenfolio\"\r\n            ],\r\n            \"description\": \"Zenfolio is a photography website builder.\",\r\n            \"website\": \"https://zenfolio.com\"\r\n        },\r\n        \"Zeotap\": {\r\n            \"cats\": [\r\n                97\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.zeotap\\\\.com\"\r\n            ],\r\n            \"description\": \"Zeotap is a customer intelligence platform that helps brands better understand their customers and predict behaviors.\",\r\n            \"website\": \"https://zeotap.com\"\r\n        },\r\n        \"Zepto\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"zepto\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"zepto.*\\\\.js\"\r\n            ],\r\n            \"website\": \"https://zeptojs.com\"\r\n        },\r\n        \"ZestMoney\": {\r\n            \"cats\": [\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"zestbind\",\r\n                \"zestmerchant\",\r\n                \"zestmoneywidget\"\r\n            ],\r\n            \"description\": \"ZestMoney is a fintech company that uses digital EMI without the need for a credit card or a credit score.\",\r\n            \"website\": \"https://www.zestmoney.in\"\r\n        },\r\n        \"Zeus Technology\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"zeus.version\",\r\n                \"zeusadunitpath\"\r\n            ],\r\n            \"description\": \"Zeus Technology is a media monetisation platform that levels the playing field for publishers and advertisers of all sizes.\",\r\n            \"website\": \"https://www.zeustechnology.com\"\r\n        },\r\n        \"Zid\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"zid_catalog_session\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"zid.store\",\r\n                \"zidtracking.sendgaproductremovefromcartevent\"\r\n            ],\r\n            \"description\": \"Zid is an ecommerce SaaS that allows merchants to build and manage their online stores.\",\r\n            \"website\": \"https://zid.sa\"\r\n        },\r\n        \"Ziggy\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"ziggy\"\r\n            ],\r\n            \"implies\": [\r\n                \"Inertia.js\",\r\n                \"Laravel\"\r\n            ],\r\n            \"description\": \"Ziggy is a library that allows using Laravel named routes in JavaScript.\",\r\n            \"website\": \"https://github.com/tighten/ziggy\"\r\n        },\r\n        \"Zimbra\": {\r\n            \"cats\": [\r\n                30\r\n            ],\r\n            \"cookies\": {\r\n                \"zm_test\": \"true\"\r\n            },\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"website\": \"https://www.zimbra.com/\",\r\n            \"cpe\": \"cpe:2.3:a:zimbra:zimbra:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"ZingChart\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"zingchart\"\r\n            ],\r\n            \"description\": \"ZingChart is a open-source and free JavaScript library for building interactive and intuitive charts.\",\r\n            \"website\": \"https://www.zingchart.com\"\r\n        },\r\n        \"Zinnia\": {\r\n            \"cats\": [\r\n                11\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"zinnia\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Django\"\r\n            ],\r\n            \"description\": \"Zimbra is a is a collaborative software suite that includes an email server and a web client.\",\r\n            \"website\": \"https://django-blog-zinnia.com\"\r\n        },\r\n        \"Zinrelo\": {\r\n            \"cats\": [\r\n                84\r\n            ],\r\n            \"js\": [\r\n                \"zrl_mi\"\r\n            ],\r\n            \"description\": \"Zinrelo is an enterprise-grade, loyalty rewards platform.\",\r\n            \"website\": \"https://www.zinrelo.com\"\r\n        },\r\n        \"Zip\": {\r\n            \"cats\": [\r\n                41,\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"checkout.enabledpayments.zip\",\r\n                \"quadpayid\",\r\n                \"quadpayshopify\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"quadpay\\\\.com\",\r\n                \"static\\\\.zipmoney\\\\.com\\\\.au\",\r\n                \"zip\\\\.co\"\r\n            ],\r\n            \"description\": \"Zip is a payment service that lets you receive your purchase now and spread the total cost over a interest-free payment schedule.\",\r\n            \"website\": \"https://www.zip.co/\"\r\n        },\r\n        \"Zipify OCU\": {\r\n            \"cats\": [\r\n                100\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/zipify-oneclickupsell-vendor\\\\.js\"\r\n            ],\r\n            \"description\": \"Zipify OCU allows you to add upsells and cross-sells to your checkout sequence.\",\r\n            \"website\": \"https://zipify.com/apps/ocu/\"\r\n        },\r\n        \"Zipify Pages\": {\r\n            \"cats\": [\r\n                100,\r\n                51\r\n            ],\r\n            \"js\": [\r\n                \"zipifypages\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"Zipify Pages the first landing page builder uniquely designed for ecommerce.\",\r\n            \"website\": \"https://zipify.com/apps/pages/\"\r\n        },\r\n        \"Zipkin\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"headers\": {\r\n                \"x-b3-flags\": \"\",\r\n                \"x-b3-parentspanid\": \"\",\r\n                \"x-b3-sampled\": \"\",\r\n                \"x-b3-spanid\": \"\",\r\n                \"x-b3-traceid\": \"\"\r\n            },\r\n            \"website\": \"https://zipkin.io/\"\r\n        },\r\n        \"Zmags Creator\": {\r\n            \"cats\": [\r\n                95\r\n            ],\r\n            \"js\": [\r\n                \"__zmags\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"c(?:reator)?\\\\.zmags\\\\.com/\"\r\n            ],\r\n            \"description\": \"Zmags Creator enables marketers to design and publish endless types of interactive digital experiences without coding.\",\r\n            \"website\": \"https://www.creatorbyzmags.com\"\r\n        },\r\n        \"Zocdoc\": {\r\n            \"cats\": [\r\n                72\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"offsiteschedule\\\\.zocdoc\\\\.com\"\r\n            ],\r\n            \"description\": \"Zocdoc is a New York City-based company offering an online service that allows people to find and book in-person or telemedicine appointments for medical or dental care.\",\r\n            \"website\": \"https://www.zocdoc.com\"\r\n        },\r\n        \"Zoey\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"zoey.developer\",\r\n                \"zoey.module\",\r\n                \"zoeydev\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdna4\\\\.zoeysite\\\\.com\"\r\n            ],\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Zoey is a cloud-based ecommerce platform for B2B and wholesale businesses.\",\r\n            \"website\": \"https://www.zoey.com/\"\r\n        },\r\n        \"Zoho\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"description\": \"Zoho is a web-based online office suite.\",\r\n            \"website\": \"https://www.zoho.com/\"\r\n        },\r\n        \"Zoho Mail\": {\r\n            \"cats\": [\r\n                75\r\n            ],\r\n            \"implies\": [\r\n                \"Zoho\"\r\n            ],\r\n            \"description\": \"Zoho Mail is an email hosting service for businesses.\",\r\n            \"website\": \"https://www.zoho.com/mail/\"\r\n        },\r\n        \"Zoho PageSense\": {\r\n            \"cats\": [\r\n                74,\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"$pagesense\",\r\n                \"pagesense\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.pagesense\\\\.(?:cn|io)?\"\r\n            ],\r\n            \"implies\": [\r\n                \"Zoho\"\r\n            ],\r\n            \"description\": \"Zoho PageSense is a conversion optimisation platform which combines the power of web analytics, A/B testing, and personalisation.\",\r\n            \"website\": \"https://www.zoho.com/pagesense/\"\r\n        },\r\n        \"Zoko\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"__zoko_app_version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"zoko-shopify-prod\\\\.web\\\\.app\"\r\n            ],\r\n            \"implies\": [\r\n                \"WhatsApp Business Chat\"\r\n            ],\r\n            \"description\": \"Zoko is an all-in-one system that leverages the WhatsApp API to help you do business, on WhatsApp\",\r\n            \"website\": \"https://www.zoko.io/\"\r\n        },\r\n        \"Zone.js\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"zone.root\"\r\n            ],\r\n            \"implies\": [\r\n                \"Angular\"\r\n            ],\r\n            \"website\": \"https://github.com/angular/angular/tree/master/packages/zone.js\"\r\n        },\r\n        \"Zonos\": {\r\n            \"cats\": [\r\n                106\r\n            ],\r\n            \"js\": [\r\n                \"zonos\",\r\n                \"zonos\",\r\n                \"zonoscheckout\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.zonos\\\\.com/\"\r\n            ],\r\n            \"description\": \"Zonos is a cross-border ecommerce software and app solution for companies with international business.\",\r\n            \"website\": \"https://zonos.com\"\r\n        },\r\n        \"ZoodPay\": {\r\n            \"cats\": [\r\n                91\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"wp-content/plugins/zoodpay/(?:.+\\\\?ver=([\\\\d\\\\.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"website\": \"https://www.zoodpay.com\"\r\n        },\r\n        \"Zoominfo\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"ws\\\\.zoominfo\\\\.com\"\r\n            ],\r\n            \"description\": \"ZoomInfo provides actionable B2B contact and company information for sales and marketing teams.\",\r\n            \"website\": \"https://www.zoominfo.com/\"\r\n        },\r\n        \"Zoominfo Chat\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"madstreetden\\\\.widget\\\\.insent\\\\.ai\"\r\n            ],\r\n            \"description\": \"ZoomInfo chat is a live chat solution.\",\r\n            \"website\": \"https://www.zoominfo.com/chat\"\r\n        },\r\n        \"Zope\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"^zope/\"\r\n            },\r\n            \"website\": \"https://zope.org\"\r\n        },\r\n        \"Zotabox\": {\r\n            \"cats\": [\r\n                32\r\n            ],\r\n            \"js\": [\r\n                \"zotabox\",\r\n                \"zotabox_init\"\r\n            ],\r\n            \"description\": \"Zotabox is marketing tool which includes popups, header bars, page/form builder, testimonial, live chat, etc.\",\r\n            \"website\": \"https://info.zotabox.com\"\r\n        },\r\n        \"Zozo\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"zozo-main\\\\.min\\\\.js\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"zozo ecommerce\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"Zozo is a multi-channel ecommerce services provider from Vietnam.\",\r\n            \"website\": \"https://zozo.vn\"\r\n        },\r\n        \"Zuppler\": {\r\n            \"cats\": [\r\n                93\r\n            ],\r\n            \"description\": \"Zuppler is a complete and branded online ordering solution for restaurants and caterers with multi-locations.\",\r\n            \"website\": \"https://www.zuppler.com\"\r\n        },\r\n        \"_hyperscript \": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"_hyperscript\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//unpkg\\\\.com/hyperscript\\\\.org@([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"_​hyperscript is a scripting language for adding interactivity to the front-end.\",\r\n            \"website\": \"https://hyperscript.org\"\r\n        },\r\n        \"a-blog cms\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"a-blog cms\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://www.a-blogcms.jp\"\r\n        },\r\n        \"a3 Lazy Load\": {\r\n            \"cats\": [\r\n                87,\r\n                92\r\n            ],\r\n            \"js\": [\r\n                \"a3_lazyload_extend_params\",\r\n                \"a3_lazyload_params\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/a3-lazy-load/.+\\\\.js(?:\\\\?ver=(\\\\d+(?:\\\\.\\\\d+)+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"a3 Lazy Load is a mobile oriented, very simple to use plugin that will speed up sites page load speed.\",\r\n            \"website\": \"https://a3rev.com/shop/a3-lazy-load/\"\r\n        },\r\n        \"aThemes Airi\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/airi/\"\r\n            ],\r\n            \"description\": \"aThemes Airi is a powerful yet lightweight and flexible WordPress theme for organization or freelancer.\",\r\n            \"website\": \"https://athemes.com/theme/airi\"\r\n        },\r\n        \"aThemes Astrid\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/astrid/\"\r\n            ],\r\n            \"description\": \"aThemes Astrid is a powerful yet lightweight and flexible WordPress theme.\",\r\n            \"website\": \"https://athemes.com/theme/astrid\"\r\n        },\r\n        \"aThemes Hiero\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/hiero/\"\r\n            ],\r\n            \"description\": \"aThemes Hiero is an awesome magazine theme for your WordPress site feature bold colors and details to the content.\",\r\n            \"website\": \"https://athemes.com/theme/hiero\"\r\n        },\r\n        \"aThemes Moesia\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/moesia(?:-pro-ii)?/\"\r\n            ],\r\n            \"description\": \"aThemes Moesia is the business theme you need in order to build your presence on the Internet.\",\r\n            \"website\": \"https://athemes.com/theme/moesia\"\r\n        },\r\n        \"aThemes Sydney\": {\r\n            \"cats\": [\r\n                80\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/themes/sydney(?:-pro-ii)?/\"\r\n            ],\r\n            \"description\": \"aThemes Sydney is a powerful business WordPress theme that provides a fast way for companies or freelancers to create an online presence.\",\r\n            \"website\": \"https://athemes.com/theme/sydney\"\r\n        },\r\n        \"actionhero.js\": {\r\n            \"cats\": [\r\n                18,\r\n                22\r\n            ],\r\n            \"js\": [\r\n                \"actionheroclient\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"actionhero api\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"actionheroclient\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"Node.js\"\r\n            ],\r\n            \"website\": \"https://www.actionherojs.com\"\r\n        },\r\n        \"amCharts\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"amcharts\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003csvg[^\\u003e]*\\u003e\\u003cdesc\\u003ejavascript chart by amcharts ([\\\\d.]*)\\\\;version:\\\\1\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"amcharts.*\\\\.js\"\r\n            ],\r\n            \"description\": \"amCharts is a JavaScript-based interactive charts and maps programming library and tool.\",\r\n            \"website\": \"https://amcharts.com\"\r\n        },\r\n        \"amoCRM\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"js\": [\r\n                \"amo_pixel_client\",\r\n                \"amocrm\",\r\n                \"amoformswidget\",\r\n                \"amosocialbutton\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.amocrm\\\\.(?:ru|com)\"\r\n            ],\r\n            \"description\": \"amoCRM is a web-based customer relationship management software solution.\",\r\n            \"website\": \"https://www.amocrm.com\"\r\n        },\r\n        \"anime.js\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"anime.version\"\r\n            ],\r\n            \"description\": \"Anime.js (/ˈæn.ə.meɪ/) is a lightweight JavaScript animation library with a simple, yet powerful API.It works with CSS properties, SVG, DOM attributes and JavaScript Objects.\",\r\n            \"website\": \"https://animejs.com/\"\r\n        },\r\n        \"augmented-ui\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"description\": \"augmented-ui is a UI framework inspired by cyberpunk and sci-fi.\",\r\n            \"website\": \"https://augmented-ui.com\"\r\n        },\r\n        \"authorize.net\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"config.authorizenet_public_client_key\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.authorize\\\\.net\\\\s\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"\\\\.authorize\\\\.net/\"\r\n            ],\r\n            \"description\": \"Authorize.net is a secure online payment gateway service that enables businesses to accept payments through various channels, such as ecommerce websites, mobile devices, and retail stores, providing a trusted platform for processing credit card and electronic cheque payments.\",\r\n            \"website\": \"https://www.authorize.net\"\r\n        },\r\n        \"autoComplete.js\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"@tarekraafat/autocomplete\\\\.js@([\\\\d\\\\.]+)/\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"autoComplete.js is a simple, pure vanilla Javascript library.\",\r\n            \"website\": \"https://tarekraafat.github.io/autoComplete.js\"\r\n        },\r\n        \"bSecure\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"bsecure_js_object\"\r\n            ],\r\n            \"description\": \"bSecure is a one-click checkout solution for selling your products all across the globe instantly.\",\r\n            \"website\": \"https://www.bsecure.pk\"\r\n        },\r\n        \"basket.js\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"basket.isvaliditem\"\r\n            ],\r\n            \"website\": \"https://addyosmani.github.io/basket.js/\"\r\n        },\r\n        \"bdok\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.ibdok\\\\.ir/\"\r\n            ],\r\n            \"meta\": {\r\n                \"bdok\": []\r\n            },\r\n            \"description\": \"bdok is a cloud-based platform which provides the capability to create and manage online stores with no technical knowledge.\",\r\n            \"website\": \"https://bdok.ir\"\r\n        },\r\n        \"cPanel\": {\r\n            \"cats\": [\r\n                9\r\n            ],\r\n            \"cookies\": {\r\n                \"cprelogin\": \"\",\r\n                \"cpsession\": \"\"\r\n            },\r\n            \"headers\": {\r\n                \"server\": \"cpsrvd/([\\\\d.]+)\\\\;version:\\\\1\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003c!-- cpanel\"\r\n            ],\r\n            \"description\": \"cPanel is a web hosting control panel. The software provides a graphical interface and automation tools designed to simplify the process of hosting a website.\",\r\n            \"website\": \"https://www.cpanel.net\",\r\n            \"cpe\": \"cpe:2.3:a:cpanel:cpanel:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"cState\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"cstate v([\\\\d\\\\.]+)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"cState is an open-source static (serverless) status page.\",\r\n            \"website\": \"https://github.com/cstate/cstate\"\r\n        },\r\n        \"cashew\": {\r\n            \"cats\": [\r\n                91\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"\\\\.cashewpayments\\\\.com\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"\\\\.cashewpayments\\\\.com/\"\r\n            ],\r\n            \"description\": \"Cashew is a buy now, pay later platform that allows its customers to shop now and pay later in equal monthly installments.\",\r\n            \"website\": \"https://www.cashewpayments.com\"\r\n        },\r\n        \"cdnjs\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdnjs\\\\.cloudflare\\\\.com\"\r\n            ],\r\n            \"implies\": [\r\n                \"Cloudflare\"\r\n            ],\r\n            \"description\": \"cdnjs is a free distributed JS library delivery service.\",\r\n            \"website\": \"https://cdnjs.com\"\r\n        },\r\n        \"cgit\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^cgit v([\\\\d.a-z-]+)$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"C\",\r\n                \"git\"\r\n            ],\r\n            \"description\": \"cgit is a web interface (cgi) for Git repositories, written in C. licensed under GPLv2.\",\r\n            \"website\": \"https://git.zx2c4.com/cgit\"\r\n        },\r\n        \"clickio\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"clickio\\\\.mgr\\\\.consensu\\\\.org/t/consent_[0-9]+\\\\.js\"\r\n            ],\r\n            \"description\": \"Clickio Consent Tool collects and communicates consent both to IAB Framework vendors and to Google Ads products.\",\r\n            \"website\": \"https://www.gdpr.clickio.com/\"\r\n        },\r\n        \"comScore\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"_comscore\",\r\n                \"comscore\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.scorecardresearch\\\\.com/beacon\\\\.js|comscore\\\\.beacon\"\r\n            ],\r\n            \"description\": \"comScore is an American media measurement and analytics company providing marketing data and analytics to enterprises; media and advertising agencies; and publishers.\",\r\n            \"website\": \"https://comscore.com\"\r\n        },\r\n        \"commercetools\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"__next_data__.props.pageprops.commercetoolsentity\",\r\n                \"commerce_tools_host_att\",\r\n                \"commerce_tools_project_key_att\"\r\n            ],\r\n            \"implies\": [\r\n                \"GraphQL\"\r\n            ],\r\n            \"description\": \"commercetools is a headless commerce platform.\",\r\n            \"website\": \"https://commercetools.com\"\r\n        },\r\n        \"core-js\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"__core-js_shared__\",\r\n                \"__core-js_shared__.versions.0.version\",\r\n                \"_babelpolyfill\",\r\n                \"core\",\r\n                \"core.version\"\r\n            ],\r\n            \"description\": \"core-js is a modular standard library for JavaScript, with polyfills for cutting-edge ECMAScript features.\",\r\n            \"website\": \"https://github.com/zloirock/core-js\"\r\n        },\r\n        \"crypto-js\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"cryptojs.algo\",\r\n                \"cryptojs.rabbit\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:/([\\\\d\\\\.-]+))?/crypto-js(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"crypto-js is a JavaScript library of crypto standards.\",\r\n            \"website\": \"https://github.com/brix/crypto-js\"\r\n        },\r\n        \"daisyUI\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"implies\": [\r\n                \"Tailwind CSS\"\r\n            ],\r\n            \"description\": \"daisyUI is a customisable Tailwind CSS component library that prevents verbose markup in frontend applications. With a focus on customising and creating themes for user interfaces, daisyUI uses pure CSS and Tailwind utility classes, allowing developers to write clean HTML.\",\r\n            \"website\": \"https://daisyui.com\"\r\n        },\r\n        \"db-ip\": {\r\n            \"cats\": [\r\n                79\r\n            ],\r\n            \"js\": [\r\n                \"env.dbip\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.db-ip\\\\.com\"\r\n            ],\r\n            \"description\": \"dbip is a geolocation API and database.\",\r\n            \"website\": \"https://db-ip.com/\"\r\n        },\r\n        \"decimal.js\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"decimal.round_half_floor\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/([\\\\d.]*\\\\d+)/decimal(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\",\r\n                \"decimal(?:\\\\.min)?\\\\.js(?:\\\\?ver(?:sion)?=([\\\\d.]*\\\\d+))?\\\\;version:\\\\1\",\r\n                \"decimal[.-]([\\\\d.]*\\\\d+)(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"website\": \"https://mikemcl.github.io/decimal.js/\"\r\n        },\r\n        \"deepMiner\": {\r\n            \"cats\": [\r\n                56\r\n            ],\r\n            \"js\": [\r\n                \"deepminer\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"deepminer\\\\.js\"\r\n            ],\r\n            \"website\": \"https://github.com/deepwn/deepMiner\"\r\n        },\r\n        \"e-Shop Commerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/template_inc/eshopstoresframework\"\r\n            ],\r\n            \"description\": \"e-Shop is a all-in-one Software-as-a-Service (SaaS) that allows Israeli customers to set up an online store and sell their products.\",\r\n            \"website\": \"https://www.e-shop.co.il\"\r\n        },\r\n        \"e-goi\": {\r\n            \"cats\": [\r\n                32,\r\n                75\r\n            ],\r\n            \"js\": [\r\n                \"_egoiaq\",\r\n                \"egoimmerce\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.e-goi\\\\.com/egoimmerce\\\\.js\"\r\n            ],\r\n            \"description\": \"e-goi is a multichannel marketing automation software for ecommerce.\",\r\n            \"website\": \"https://www.e-goi.com\"\r\n        },\r\n        \"e107\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"e107_tz\": \"\"\r\n            },\r\n            \"headers\": {\r\n                \"x-powered-by\": \"e107\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"[^a-z\\\\d]e107\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://e107.org\"\r\n        },\r\n        \"eBay Partner Network\": {\r\n            \"cats\": [\r\n                71,\r\n                94\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"epnt\\\\.ebay\\\\.com/\"\r\n            ],\r\n            \"description\": \"eBay Partner Network is an online referral program where eBay pays commissions to referrers on sales generated by customers they’ve referred.\",\r\n            \"website\": \"https://partnernetwork.ebay.com\"\r\n        },\r\n        \"eCaupo\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.ecaupo\\\\.(?:at|com)/\"\r\n            ],\r\n            \"description\": \"eCaupo is no delivery portal, but your own shop.\",\r\n            \"website\": \"https://www.ecaupo.com\"\r\n        },\r\n        \"eClass\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"fe_eclass\",\r\n                \"fe_eclass_guest\"\r\n            ],\r\n            \"description\": \"eClass is an online learning platform.\",\r\n            \"website\": \"https://www.eclass.com.hk\"\r\n        },\r\n        \"eDokan\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"implies\": [\r\n                \"Angular\",\r\n                \"MongoDB\",\r\n                \"Node.js\"\r\n            ],\r\n            \"description\": \"eDokan is hosted ecommerce platform with drag-drop template builder and zero programming knowledge.\",\r\n            \"website\": \"https://edokan.co\"\r\n        },\r\n        \"eKomi\": {\r\n            \"cats\": [\r\n                5\r\n            ],\r\n            \"js\": [\r\n                \"ekomiwidgetmain\"\r\n            ],\r\n            \"description\": \"eKomi is a German supplier and product review service.\",\r\n            \"website\": \"https://www.ekomi.de\"\r\n        },\r\n        \"eNamad\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"meta\": {\r\n                \"enamad\": [\r\n                    \"^\\\\d+$\"\r\n                ]\r\n            },\r\n            \"description\": \"eNamad is an electronic trust symbol.\",\r\n            \"website\": \"https://enamad.ir/\"\r\n        },\r\n        \"ePages\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"epages\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-epages-requestid\": \"\"\r\n            },\r\n            \"description\": \"ePages is a provider of cloud-based online shop solutions.\",\r\n            \"website\": \"https://www.epages.com/\"\r\n        },\r\n        \"eSSENTIAL Accessibility\": {\r\n            \"cats\": [\r\n                68\r\n            ],\r\n            \"description\": \"eSSENTIAL Accessibility is a digital accessibility-as-a-service platform.\",\r\n            \"website\": \"https://www.essentialaccessibility.com\"\r\n        },\r\n        \"eShopCRM\": {\r\n            \"cats\": [\r\n                53\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"eshopcrm\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Shopify\"\r\n            ],\r\n            \"description\": \"eShopCRM is an ecommerce CRM for Shopify.\",\r\n            \"website\": \"https://eshopcrm.com\"\r\n        },\r\n        \"eSputnik\": {\r\n            \"cats\": [\r\n                32,\r\n                97\r\n            ],\r\n            \"js\": [\r\n                \"essdk\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?://|\\\\.)esputnik\\\\.com/\"\r\n            ],\r\n            \"description\": \"eSputnik is a marketing automation service for ecommerce.\",\r\n            \"website\": \"https://esputnik.com\"\r\n        },\r\n        \"eSyndiCat\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"esyndicat\"\r\n            ],\r\n            \"headers\": {\r\n                \"x-drectory-script\": \"^esyndicat\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^esyndicat \"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://esyndicat.com\"\r\n        },\r\n        \"eWAY Payments\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cimg [^\\u003e]*src=\\\"[^/]*//[^/]*eway\\\\.com\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"secure\\\\.ewaypayments\\\\.com\"\r\n            ],\r\n            \"description\": \"eWAY is a global omnichannel payment provider. The company processes secure credit card payments for merchants. eWay works through eCommerce.\",\r\n            \"website\": \"https://www.eway.com.au/\"\r\n        },\r\n        \"eZ Publish\": {\r\n            \"cats\": [\r\n                1,\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"ezsessid\": \"\"\r\n            },\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^ez publish\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"ez publish\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://github.com/ezsystems/ezpublish-legacy\",\r\n            \"cpe\": \"cpe:2.3:a:ez:ez_publish:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"ebisumart\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"ebisu.fontchanger\",\r\n                \"ebisu.fontchanger.map.l\",\r\n                \"ebisu_conv\"\r\n            ],\r\n            \"description\": \"ebisumart is a cloud-based storefront system for developing and renewing high-quality ecommerce websites.\",\r\n            \"website\": \"https://www.ebisumart.com\"\r\n        },\r\n        \"ef.js\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"ef.version\",\r\n                \"efcore\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/ef(?:-core)?(?:\\\\.min|\\\\.dev)?\\\\.js\"\r\n            ],\r\n            \"website\": \"https://ef.js.org\"\r\n        },\r\n        \"emBlue\": {\r\n            \"cats\": [\r\n                32,\r\n                75\r\n            ],\r\n            \"js\": [\r\n                \"emblueonsiteapp\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.embluemail\\\\.com/(?:library/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"emBlue is an email and marketing automation platform.\",\r\n            \"website\": \"https://www.embluemail.com/en\"\r\n        },\r\n        \"enduro.js\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^enduro\\\\.js\"\r\n            },\r\n            \"implies\": [\r\n                \"Node.js\"\r\n            ],\r\n            \"website\": \"https://endurojs.com\"\r\n        },\r\n        \"etika\": {\r\n            \"cats\": [\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"etikabannerinject\",\r\n                \"etikaglobal\",\r\n                \"etikaproductjshelper\"\r\n            ],\r\n            \"description\": \"etika is a fintech company based in Manchester which provide buy now pay later solution.\",\r\n            \"website\": \"https://etika.com\"\r\n        },\r\n        \"eucookie.eu\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"eucookie\\\\.eu/public/gdpr-cookie-consent\\\\.js\"\r\n            ],\r\n            \"website\": \"https://www.eucookie.eu/\"\r\n        },\r\n        \"experiencedCMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^experiencedcms$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://experiencedcms.berkearas.de\",\r\n            \"cpe\": \"cpe:2.3:a:experiencedcms:experiencedcms:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"fullPage.js\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"fullpage_api.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/fullpage\\\\.js(?:/([\\\\d\\\\.]+)/)?\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"fullPage.js a jQuery and vanilla JavaScript plugin for fullscreen scrolling websites.\",\r\n            \"website\": \"https://github.com/alvarotrigo/fullpage.js\"\r\n        },\r\n        \"genezio\": {\r\n            \"cats\": [\r\n                47\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^genezio$\"\r\n            },\r\n            \"description\": \"Genezio is a code generation tool that facilitates app logic focus, organises backend API code in deployable classes, autogenerates class interfaces with JSON-RPC for typesafe API calls, supports REST and Webhooks, enables simple API code deployment on pre-configured infrastructure using a shell command, and provides an SDK that eliminates the need to handle URLs, headers.\",\r\n            \"website\": \"https://genez.io\"\r\n        },\r\n        \"git\": {\r\n            \"cats\": [\r\n                47\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"\\\\bgit/([\\\\d.]+\\\\d)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"website\": \"https://git-scm.com\",\r\n            \"cpe\": \"cpe:2.3:a:git-scm:git:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"gitlist\": {\r\n            \"cats\": [\r\n                47\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cp\\u003epowered by \\u003ca[^\\u003e]+\\u003egitlist ([\\\\d.]+)\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\",\r\n                \"git\"\r\n            ],\r\n            \"website\": \"https://gitlist.org\",\r\n            \"cpe\": \"cpe:2.3:a:gitlist:gitlist:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"gitweb\": {\r\n            \"cats\": [\r\n                47\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- git web interface version ([\\\\d.]+)?\\\\;version:\\\\1\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"static/gitweb\\\\.js$\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"gitweb(?:/([\\\\d.]+\\\\d))?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Perl\",\r\n                \"git\"\r\n            ],\r\n            \"website\": \"https://git-scm.com\"\r\n        },\r\n        \"govCMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"drupal ([\\\\d]+) \\\\(http:\\\\/\\\\/drupal\\\\.org\\\\) \\\\+ govcms\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Drupal\"\r\n            ],\r\n            \"website\": \"https://www.govcms.gov.au\"\r\n        },\r\n        \"gunicorn\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"gunicorn(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Python\"\r\n            ],\r\n            \"website\": \"https://gunicorn.org\"\r\n        },\r\n        \"h5ai\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/_h5ai/(?:public|client)/js/scripts\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"h5ai is a modern HTTP web server index for Apache httpd, lighttpd, and nginx.\",\r\n            \"website\": \"https://github.com/lrsjng/h5ai\"\r\n        },\r\n        \"hCaptcha\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"css\": [\r\n                \"#cf-hcaptcha-container\"\r\n            ],\r\n            \"js\": [\r\n                \"hcaptcha.getrespkey\",\r\n                \"hcaptcha_sitekey\",\r\n                \"hcaptchaonload\"\r\n            ],\r\n            \"headers\": {\r\n                \"content-security-policy\": \"(?:\\\\.|//)hcaptcha\\\\.com\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"hcaptcha\\\\.com/([\\\\d]+?)/api\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"hCaptcha is an anti-bot solution that protects user privacy and rewards websites.\",\r\n            \"website\": \"https://www.hcaptcha.com\"\r\n        },\r\n        \"hantana\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"hantana\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"//hantana\\\\.org/widget\"\r\n            ],\r\n            \"website\": \"https://hantana.org/\"\r\n        },\r\n        \"hoolah\": {\r\n            \"cats\": [\r\n                91\r\n            ],\r\n            \"js\": [\r\n                \"hoolah\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"merchant\\\\.cdn\\\\.hoolah\\\\.co/\"\r\n            ],\r\n            \"description\": \"hoolah is Asia's omni-channel buy now pay later platform.\",\r\n            \"website\": \"https://www.hoolah.co\"\r\n        },\r\n        \"i-MSCP\": {\r\n            \"cats\": [\r\n                9\r\n            ],\r\n            \"meta\": {\r\n                \"application-name\": [\r\n                    \"^i-mscp$\"\r\n                ]\r\n            },\r\n            \"description\": \"i-MSCP (internet Multi Server Control Panel) is a software for shared hosting environments management on Linux servers.\",\r\n            \"website\": \"https://github.com/i-MSCP/imscp\"\r\n        },\r\n        \"i-mobile\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.i-mobile\\\\.co\\\\.jp/\"\r\n            ],\r\n            \"description\": \"i-mobile is a advertising platform for clients to advertise their product and for publishers to monetize their cyberspace.\",\r\n            \"website\": \"https://www2.i-mobile.co.jp\"\r\n        },\r\n        \"i30con\": {\r\n            \"cats\": [\r\n                17\r\n            ],\r\n            \"description\": \"i30con is an icon toolkit based on CSS and JavaScript.\",\r\n            \"website\": \"https://30nama.com/\"\r\n        },\r\n        \"iAdvize\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.iadvize\\\\.com/\"\r\n            ],\r\n            \"description\": \"iAdvize is a conversational marketing platform that connects customers in need of advice with experts who are available 24/7 via messaging.\",\r\n            \"website\": \"https://www.iadvize.com\"\r\n        },\r\n        \"iEXExchanger\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"cookies\": {\r\n                \"iexexchanger_session\": \"\"\r\n            },\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"iexexchanger\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Angular\",\r\n                \"Apache HTTP Server\",\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://exchanger.iexbase.com\"\r\n        },\r\n        \"iGoDigital\": {\r\n            \"cats\": [\r\n                76\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.igodigital\\\\.com/\"\r\n            ],\r\n            \"description\": \"iGoDigital provides web-based commerce tools, personalisation, and product recommendations designed to increase customer interaction.\",\r\n            \"website\": \"https://www.igodigital.com\"\r\n        },\r\n        \"iHomefinder IDX\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"ihfjquery\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.idxhome\\\\.com/\"\r\n            ],\r\n            \"description\": \"iHomefinder provides IDX property search, built-in CRM, and marketing tools.\",\r\n            \"website\": \"https://www.ihomefinder.com\"\r\n        },\r\n        \"iPresta\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"designer\": [\r\n                    \"ipresta\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\",\r\n                \"PrestaShop\"\r\n            ],\r\n            \"website\": \"https://ipresta.ir\"\r\n        },\r\n        \"iSina Chat\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"chat\\\\.isina\\\\.agency/\"\r\n            ],\r\n            \"description\": \"iSina Chat is a live chat service that provides online support and FAQ for customers.\",\r\n            \"website\": \"https://isina.agency\"\r\n        },\r\n        \"iThemes Security\": {\r\n            \"cats\": [\r\n                87,\r\n                16\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/wp-content/plugins/better-wp-security/\"\r\n            ],\r\n            \"description\": \" iThemes Security(formerly known as Better WP Security) plugin enhances the security and protection of your WordPress website.\",\r\n            \"website\": \"https://ithemes.com/security\"\r\n        },\r\n        \"iWeb\": {\r\n            \"cats\": [\r\n                20\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^iweb( [\\\\d.]+)?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"iWeb is a web site creation tool.\",\r\n            \"website\": \"https://apple.com/ilife/iweb\"\r\n        },\r\n        \"idCloudHost\": {\r\n            \"cats\": [\r\n                88\r\n            ],\r\n            \"description\": \"idCloudHost is a local web service provider based in Indonesia that offer a wide range of services including domain name registration and cloud hosting.\",\r\n            \"website\": \"https://idcloudhost.com\"\r\n        },\r\n        \"ikiwiki\": {\r\n            \"cats\": [\r\n                8\r\n            ],\r\n            \"html\": [\r\n                \"\\u003ca href=\\\"/(?:cgi-bin/)?ikiwiki\\\\.cgi\\\\?do=\",\r\n                \"\\u003clink rel=\\\"alternate\\\" type=\\\"application/x-wiki\\\" title=\\\"edit this page\\\" href=\\\"[^\\\"]*/ikiwiki\\\\.cgi\"\r\n            ],\r\n            \"description\": \"ikiwiki is a free and open-source wiki application.\",\r\n            \"website\": \"https://ikiwiki.info\"\r\n        },\r\n        \"imperia CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^imperia\\\\s([\\\\d\\\\.\\\\_]+)\\\\;version:\\\\1\"\r\n                ],\r\n                \"x-imperia-live-info\": []\r\n            },\r\n            \"implies\": [\r\n                \"Perl\"\r\n            ],\r\n            \"description\": \"imperia CMS is a headless content management for large editorial.\",\r\n            \"website\": \"https://www.pirobase-imperia.com/de/solutions/imperia-cms\"\r\n        },\r\n        \"inSales\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"insales\",\r\n                \"insalesgeocoderesults\",\r\n                \"insalesui\"\r\n            ],\r\n            \"meta\": {\r\n                \"insales-redefined-api-method\": []\r\n            },\r\n            \"description\": \"inSales is a SaaS ecommerce platform with multichannel integration.\",\r\n            \"website\": \"https://www.insales.com\"\r\n        },\r\n        \"inSided\": {\r\n            \"cats\": [\r\n                97\r\n            ],\r\n            \"js\": [\r\n                \"insided\",\r\n                \"insideddata\"\r\n            ],\r\n            \"description\": \"inSided is the only Customer Success Community Platform built to help SaaS companies improve customer success and retention.\",\r\n            \"website\": \"https://www.insided.com\"\r\n        },\r\n        \"ip-api\": {\r\n            \"cats\": [\r\n                79\r\n            ],\r\n            \"website\": \"https://ip-api.com/\"\r\n        },\r\n        \"ip-label\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"clobs\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"clobs\\\\.js\"\r\n            ],\r\n            \"website\": \"https://www.ip-label.com\"\r\n        },\r\n        \"ipapi\": {\r\n            \"cats\": [\r\n                79\r\n            ],\r\n            \"description\": \"ipapi is a real-time geolocation and reverse IP lookup REST API.\",\r\n            \"website\": \"https://ipapi.com\"\r\n        },\r\n        \"ipapi.co\": {\r\n            \"cats\": [\r\n                79\r\n            ],\r\n            \"description\": \"ipapi.co is a web analytics provider with IP address lookup and location API.\",\r\n            \"website\": \"https://ipapi.co\"\r\n        },\r\n        \"ipbase\": {\r\n            \"cats\": [\r\n                79\r\n            ],\r\n            \"description\": \"ipbase offers an API that supports both IPv4 and IPv6 and provides precise location data from IP addresses.\",\r\n            \"website\": \"https://ipbase.com\"\r\n        },\r\n        \"ipdata\": {\r\n            \"cats\": [\r\n                79\r\n            ],\r\n            \"description\": \"ipdata is a JSON IP Address Geolocation API that allows to lookup the location of both IPv4 and IPv6.\",\r\n            \"website\": \"https://ipdata.co/\"\r\n        },\r\n        \"ipgeolocation\": {\r\n            \"cats\": [\r\n                79\r\n            ],\r\n            \"description\": \"ipgeolocation is an IP Geolocation API and Accurate IP Lookup Database.\",\r\n            \"website\": \"https://ipgeolocation.co/\"\r\n        },\r\n        \"ipify\": {\r\n            \"cats\": [\r\n                79\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.ipify\\\\.org\"\r\n            ],\r\n            \"description\": \"ipify is a service which provide public IP address API, IP geolocation API, VPN and Proxy detection API products.\",\r\n            \"website\": \"https://ipify.org\"\r\n        },\r\n        \"ipstack\": {\r\n            \"cats\": [\r\n                79\r\n            ],\r\n            \"js\": [\r\n                \"env.ipstackaccesstoken\"\r\n            ],\r\n            \"description\": \"ipstack is a real-time IP to geolocation API capable of looking at location data and assessing security threats originating from risky IP addresses.\",\r\n            \"website\": \"https://ipstack.com\"\r\n        },\r\n        \"iubenda\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"js\": [\r\n                \"_iub\",\r\n                \"addiubendacs\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"iubenda\\\\.com/\"\r\n            ],\r\n            \"description\": \"iubenda is a compliance software used by businesses for their websites and apps.\",\r\n            \"website\": \"https://www.iubenda.com\"\r\n        },\r\n        \"iyzico\": {\r\n            \"cats\": [\r\n                41\r\n            ],\r\n            \"js\": [\r\n                \"iyz.ideasoft\",\r\n                \"iyz.position\"\r\n            ],\r\n            \"description\": \"iyzico is a payment receipt system management platform that offers ePayment solutions.\",\r\n            \"website\": \"https://www.iyzico.com\"\r\n        },\r\n        \"jComponent\": {\r\n            \"cats\": [\r\n                12,\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"main.version\"\r\n            ],\r\n            \"implies\": [\r\n                \"jQuery\"\r\n            ],\r\n            \"website\": \"https://componentator.com\"\r\n        },\r\n        \"jPlayer\": {\r\n            \"cats\": [\r\n                14,\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"jplayerplaylist\"\r\n            ],\r\n            \"scripts\": [\r\n                \"jquery\\\\.jplayer\\\\.min\\\\.js\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/jquery\\\\.jplayer\\\\.min\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"jPlayer is a cross-browser JavaScript library developed as a jQuery plugin which facilitates the embedding of web based media, notably HTML5 audio and video in addition to Adobe Flash based media.\",\r\n            \"website\": \"https://jplayer.org\"\r\n        },\r\n        \"jQTouch\": {\r\n            \"cats\": [\r\n                26\r\n            ],\r\n            \"js\": [\r\n                \"jqt\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"jqtouch.*\\\\.js\"\r\n            ],\r\n            \"description\": \"jQTouch is an open-source Zepto/ jQuery plugin with native animations, automatic navigation, and themes for mobile WebKit browsers like iPhone, G1 (Android), and Palm Pre.\",\r\n            \"website\": \"https://jqtouch.com\"\r\n        },\r\n        \"jQuery\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"$.fn.jquery\",\r\n                \"jquery.fn.jquery\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/(\\\\d+\\\\.\\\\d+\\\\.\\\\d+)/jquery[/.-][^u]\\\\;version:\\\\1\",\r\n                \"/jquery(?:-(\\\\d+\\\\.\\\\d+\\\\.\\\\d+))[/.-]\\\\;version:\\\\1\",\r\n                \"jquery\"\r\n            ],\r\n            \"description\": \"jQuery is a JavaScript library which is a free, open-source software designed to simplify HTML DOM tree traversal and manipulation, as well as event handling, CSS animation, and Ajax.\",\r\n            \"website\": \"https://jquery.com\",\r\n            \"cpe\": \"cpe:2.3:a:jquery:jquery:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"jQuery CDN\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"code\\\\.jquery\\\\.com/\"\r\n            ],\r\n            \"implies\": [\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"jQuery CDN is a way to include jQuery in your website without actually downloading and keeping it your website's folder.\",\r\n            \"website\": \"https://code.jquery.com/\"\r\n        },\r\n        \"jQuery DevBridge Autocomplete\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"$.devbridgeautocomplete\",\r\n                \"jquery.devbridgeautocomplete\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/devbridgeautocomplete(?:-min)?\\\\.js\",\r\n                \"/jquery\\\\.devbridge-autocomplete/([0-9.]+)/jquery\\\\.autocomplete(?:.min)?\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"Ajax Autocomplete for jQuery allows you to easily create autocomplete/autosuggest boxes for text input fields.\",\r\n            \"website\": \"https://www.devbridge.com/sourcery/components/jquery-autocomplete/\"\r\n        },\r\n        \"jQuery Migrate\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"jquery.migrateversion\",\r\n                \"jquery.migratewarnings\",\r\n                \"jquerymigrate\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"jquery[.-]migrate(?:-([\\\\d.]+))?(?:\\\\.min)?\\\\.js(?:\\\\?ver=([\\\\d.]+))?\\\\;version:\\\\1?\\\\1:\\\\2\"\r\n            ],\r\n            \"implies\": [\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"Query Migrate is a javascript library that allows you to preserve the compatibility of your jQuery code developed for versions of jQuery older than 1.9.\",\r\n            \"website\": \"https://github.com/jquery/jquery-migrate\"\r\n        },\r\n        \"jQuery Mobile\": {\r\n            \"cats\": [\r\n                26\r\n            ],\r\n            \"js\": [\r\n                \"jquery.mobile.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"jquery[.-]mobile(?:-([\\\\d.]))?(?:\\\\.min)?\\\\.js(?:\\\\?ver=([\\\\d.]+))?\\\\;version:\\\\1?\\\\1:\\\\2\"\r\n            ],\r\n            \"implies\": [\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"jQuery Mobile is a HTML5-based user interface system designed to make responsive web sites and apps that are accessible on all smartphone, tablet and desktop devices.\",\r\n            \"website\": \"https://jquerymobile.com\"\r\n        },\r\n        \"jQuery Modal\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"jquery-modal/([\\\\d\\\\.]+)/jquery\\\\.modal\\\\.min\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"jQuery Modal is an overlay dialog box or in other words, a popup window that is made to display on the top or 'overlayed' on the current page.\",\r\n            \"website\": \"https://jquerymodal.com\"\r\n        },\r\n        \"jQuery Sparklines\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"jquery\\\\.sparkline.*\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"jQuery Sparklines is a plugin that generates sparklines (small inline charts) directly in the browser using data supplied either inline in the HTML, or via javascript.\",\r\n            \"website\": \"https://omnipotent.net/jquery.sparkline/\"\r\n        },\r\n        \"jQuery UI\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"jquery.ui.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"([\\\\d.]+)/jquery-ui(?:\\\\.min)?\\\\.js\\\\;version:\\\\1\",\r\n                \"jquery-ui.*\\\\.js\",\r\n                \"jquery-ui[.-]([\\\\d.]*\\\\d)[^/]*\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"jQuery UI is a collection of GUI widgets, animated visual effects, and themes implemented with jQuery, Cascading Style Sheets, and HTML.\",\r\n            \"website\": \"https://jqueryui.com\",\r\n            \"cpe\": \"cpe:2.3:a:jquery:jquery_ui:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"jQuery-pjax\": {\r\n            \"cats\": [\r\n                26\r\n            ],\r\n            \"js\": [\r\n                \"jquery.pjax\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cdiv[^\\u003e]+data-pjax-container\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"jquery[.-]pjax(?:-([\\\\d.]))?(?:\\\\.min)?\\\\.js(?:\\\\?ver=([\\\\d.]+))?\\\\;version:\\\\1?\\\\1:\\\\2\"\r\n            ],\r\n            \"meta\": {\r\n                \"pjax-push\": [],\r\n                \"pjax-replace\": [],\r\n                \"pjax-timeout\": []\r\n            },\r\n            \"implies\": [\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"jQuery PJAX is a plugin that uses AJAX and pushState.\",\r\n            \"website\": \"https://github.com/defunkt/jquery-pjax\"\r\n        },\r\n        \"jqPlot\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"jqplot.*\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"jQuery\"\r\n            ],\r\n            \"website\": \"https://www.jqplot.com\"\r\n        },\r\n        \"jsDelivr\": {\r\n            \"cats\": [\r\n                31\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.jsdelivr\\\\.net\"\r\n            ],\r\n            \"description\": \"JSDelivr is a free public CDN for open-source projects. It can serve web files directly from the npm registry and GitHub repositories without any configuration.\",\r\n            \"website\": \"https://www.jsdelivr.com/\"\r\n        },\r\n        \"k-eCommerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"k-ecommerce\"\r\n                ]\r\n            },\r\n            \"description\": \"k-eCommerce is mdf commerce’s platform for SMBs, providing all-in-one ecommerce and digital payment solutions integrated to Microsoft Dynamics and SAP Business One. \",\r\n            \"website\": \"https://www.k-ecommerce.com\"\r\n        },\r\n        \"keep. archeevo\": {\r\n            \"cats\": [\r\n                95\r\n            ],\r\n            \"js\": [\r\n                \"archeevosnippets.mostvieweddocumentsurl\",\r\n                \"embedarcheevobasicsearch\"\r\n            ],\r\n            \"description\": \"keep. archeevo is an archival management software that aims to support all the functional areas of an archival institution, covering activities ranging from archival description to employee performance assessment.\",\r\n            \"website\": \"https://www.keep.pt/en/produts/archeevo-archival-management-software\"\r\n        },\r\n        \"langify\": {\r\n            \"cats\": [\r\n                89\r\n            ],\r\n            \"js\": [\r\n                \"langify\",\r\n                \"langify\",\r\n                \"langify.settings.switcher.version\"\r\n            ],\r\n            \"description\": \"langify translate your shop into multiple languages. langify comes with a visual configurator that allows you to add language switchers that integrate seamlessly into your existing design.\",\r\n            \"website\": \"https://langify-app.com\"\r\n        },\r\n        \"libphonenumber\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"libphonenumber.asyoutype\",\r\n                \"libphonenumber.digits\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:/([\\\\d\\\\.]+))?/libphonenumber(?:-js\\\\.min)?\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"libphonenumber is a JavaScript library for parsing, formatting, and validating international phone numbers.\",\r\n            \"website\": \"https://github.com/google/libphonenumber\"\r\n        },\r\n        \"libwww-perl-daemon\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"libwww-perl-daemon(?:/([\\\\d\\\\.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Perl\"\r\n            ],\r\n            \"website\": \"https://metacpan.org/pod/HTTP::Daemon\"\r\n        },\r\n        \"lighttpd\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"(?:l|l)ight(?:y)?(?:tpd)?(?:/([\\\\d\\\\.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"description\": \"Lighttpd is an open-source web server optimised for speed-critical environment.\",\r\n            \"website\": \"https://www.lighttpd.net\"\r\n        },\r\n        \"lit-element\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"litelementversions.0\"\r\n            ],\r\n            \"description\": \"lit-element is a simple base class for creating web components that work in any web page with any framework. lit-element uses lit-html to render into shadow DOM, and adds API to manage properties and attributes.\",\r\n            \"website\": \"https://lit.dev\"\r\n        },\r\n        \"lit-html\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"lithtmlversions.0\"\r\n            ],\r\n            \"description\": \"lit-html is a simple, modern, safe, small and fast HTML templating library for JavaScript.\",\r\n            \"website\": \"https://lit.dev\"\r\n        },\r\n        \"lite-youtube-embed\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"implies\": [\r\n                \"YouTube\"\r\n            ],\r\n            \"description\": \"The lite-youtube-embed technique renders the YouTube video inside the IFRAME tag only when the play button in clicked thus improving the core web vitals score of your website.\",\r\n            \"website\": \"https://github.com/paulirish/lite-youtube-embed\"\r\n        },\r\n        \"mParticle\": {\r\n            \"cats\": [\r\n                97\r\n            ],\r\n            \"js\": [\r\n                \"mparticle\",\r\n                \"mparticle.config.snippetversion\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.mparticle\\\\.com/\"\r\n            ],\r\n            \"description\": \"mParticle is a mobile-focused event tracking and data ingestion tool.\",\r\n            \"website\": \"https://www.mparticle.com\"\r\n        },\r\n        \"math.js\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"mathjs\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"math(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"description\": \"Math.js a JavaScript library that provides a comprehensive set of mathematical functions and capabilities for performing complex calculations and operations in web applications.\",\r\n            \"website\": \"https://mathjs.org\"\r\n        },\r\n        \"mdBook\": {\r\n            \"cats\": [\r\n                4\r\n            ],\r\n            \"scripts\": [\r\n                \"localstorage\\\\.getitem\\\\('mdbook-(?:sidebar|theme)'\\\\)\"\r\n            ],\r\n            \"description\": \"mdBook is a utility to create modern online books from Markdown files.\",\r\n            \"website\": \"https://github.com/rust-lang/mdBook\"\r\n        },\r\n        \"metisMenu\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"metismenu\",\r\n                \"metismenu\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:/|\\\\.)metismenu(?:js)?(?:\\\\.min)?\\\\.js(?:\\\\?([\\\\d\\\\.]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"jQuery\"\r\n            ],\r\n            \"description\": \"metisMenu is a collapsible jQuery menu plugin.\",\r\n            \"website\": \"https://github.com/onokumus/metismenu\"\r\n        },\r\n        \"microCMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"description\": \"microCMS is a Japan-based headless CMS that enables editors and developers to build delicate sites and apps.\",\r\n            \"website\": \"https://microcms.io\"\r\n        },\r\n        \"mini_httpd\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"mini_httpd(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"website\": \"https://acme.com/software/mini_httpd\"\r\n        },\r\n        \"mirrAR\": {\r\n            \"cats\": [\r\n                105\r\n            ],\r\n            \"js\": [\r\n                \"initmirrarui\",\r\n                \"loadmirrar\"\r\n            ],\r\n            \"description\": \"mirrAR is a real-time augmented reality platform for retail brands that enables consumers to virtually try on products and experience how it feels to own them before the actual purchase, both in-store and online.\",\r\n            \"website\": \"https://www.mirrar.com\"\r\n        },\r\n        \"mobicred\": {\r\n            \"cats\": [\r\n                41,\r\n                91\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"app\\\\.mobicredwidget\\\\.co\\\\.za\"\r\n            ],\r\n            \"description\": \"Mobicred is a credit facility that allows you to safely shop online with our participating retailers.\",\r\n            \"website\": \"https://mobicred.co.za/\"\r\n        },\r\n        \"mod_auth_pam\": {\r\n            \"cats\": [\r\n                33\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"mod_auth_pam(?:/([\\\\d\\\\.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Apache HTTP Server\"\r\n            ],\r\n            \"description\": \"Mod_auth_pam is used to configure ways for authenticating users.\",\r\n            \"website\": \"https://pam.sourceforge.net/mod_auth_pam\"\r\n        },\r\n        \"mod_dav\": {\r\n            \"cats\": [\r\n                33\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"\\\\b(?:mod_)?dav\\\\b(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Apache HTTP Server\"\r\n            ],\r\n            \"description\": \"Mod_dav is an Apache module to provide WebDAV capabilities for your Apache web server. It is an open-source module, provided under an Apache-style license.\",\r\n            \"website\": \"https://webdav.org/mod_dav\"\r\n        },\r\n        \"mod_fastcgi\": {\r\n            \"cats\": [\r\n                33\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"mod_fastcgi(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Apache HTTP Server\"\r\n            ],\r\n            \"description\": \"Mod_fcgid is a high performance alternative to mod_cgi or mod_cgid, which starts a sufficient number instances of the CGI program to handle concurrent requests, and these programs remain running to handle further incoming requests.\",\r\n            \"website\": \"https://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html\"\r\n        },\r\n        \"mod_jk\": {\r\n            \"cats\": [\r\n                33\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"mod_jk(?:/([\\\\d\\\\.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Apache HTTP Server\",\r\n                \"Apache Tomcat\"\r\n            ],\r\n            \"description\": \"Mod_jk is an Apache module used to connect the Tomcat servlet container with web servers such as Apache, iPlanet, Sun ONE (formerly Netscape) and even IIS using the Apache JServ Protocol. A web server waits for client HTTP requests.\",\r\n            \"website\": \"https://tomcat.apache.org/tomcat-3.3-doc/mod_jk-howto.html\"\r\n        },\r\n        \"mod_perl\": {\r\n            \"cats\": [\r\n                33\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"mod_perl(?:/([\\\\d\\\\.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Apache HTTP Server\",\r\n                \"Perl\"\r\n            ],\r\n            \"description\": \"Mod_perl is an optional module for the Apache HTTP server. It embeds a Perl interpreter into the Apache server. In addition to allowing Apache modules to be written in the Perl programming language, it allows the Apache web server to be dynamically configured by Perl programs.\",\r\n            \"website\": \"https://perl.apache.org\",\r\n            \"cpe\": \"cpe:2.3:a:apache:mod_perl:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"mod_python\": {\r\n            \"cats\": [\r\n                33\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"mod_python(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Apache HTTP Server\",\r\n                \"Python\"\r\n            ],\r\n            \"description\": \"Mod_python is an Apache HTTP Server module that integrates the Python programming language with the server. It is intended to provide a Python language binding for the Apache HTTP Server. \",\r\n            \"website\": \"https://www.modpython.org\",\r\n            \"cpe\": \"cpe:2.3:a:apache:mod_python:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"mod_rack\": {\r\n            \"cats\": [\r\n                33\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"mod_rack(?:/([\\\\d.]+))?\\\\;version:\\\\1\",\r\n                \"x-powered-by\": \"mod_rack(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Apache HTTP Server\",\r\n                \"Ruby on Rails\\\\;confidence:50\"\r\n            ],\r\n            \"description\": \"Mod_rack is a free web server and application server with support for Ruby, Python and Node.js.\",\r\n            \"website\": \"https://phusionpassenger.com\"\r\n        },\r\n        \"mod_rails\": {\r\n            \"cats\": [\r\n                33\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"mod_rails(?:/([\\\\d.]+))?\\\\;version:\\\\1\",\r\n                \"x-powered-by\": \"mod_rails(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Apache HTTP Server\",\r\n                \"Ruby on Rails\\\\;confidence:50\"\r\n            ],\r\n            \"description\": \"Mod_rails is a free web server and application server with support for Ruby, Python and Node.js.\",\r\n            \"website\": \"https://phusionpassenger.com\"\r\n        },\r\n        \"mod_ssl\": {\r\n            \"cats\": [\r\n                33\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"mod_ssl(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Apache HTTP Server\"\r\n            ],\r\n            \"description\": \"mod_ssl is an optional module for the Apache HTTP Server. It provides strong cryptography for the Apache web server via the Secure Sockets Layer (SSL) and Transport Layer Security (TLS) cryptographic protocols by the help of the open-source SSL/TLS toolkit OpenSSL.\",\r\n            \"website\": \"https://modssl.org\",\r\n            \"cpe\": \"cpe:2.3:a:modssl:mod_ssl:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"mod_wsgi\": {\r\n            \"cats\": [\r\n                33\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"mod_wsgi(?:/([\\\\d.]+))?\\\\;version:\\\\1\",\r\n                \"x-powered-by\": \"mod_wsgi(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"implies\": [\r\n                \"Apache HTTP Server\",\r\n                \"Python\\\\;confidence:50\"\r\n            ],\r\n            \"description\": \"mod_wsgi is an Apache HTTP Server module that provides a WSGI compliant interface for hosting Python based web applications under Apache.\",\r\n            \"website\": \"https://code.google.com/p/modwsgi\",\r\n            \"cpe\": \"cpe:2.3:a:modwsgi:mod_wsgi:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"nghttpx - HTTP/2 proxy\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"nghttpx nghttp2/?([\\\\d.]+)?\\\\;version:\\\\1\"\r\n            },\r\n            \"website\": \"https://nghttp2.org\"\r\n        },\r\n        \"nopCommerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"nop.customer\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"(?:\\u003c!--powered by nopcommerce|powered by: \\u003ca[^\\u003e]+nopcommerce)\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^nopcommerce$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"description\": \"nopCommerce is an open-source ecommerce solution based on Microsoft's ASP​.NET Core framework and MS SQL Server 2012 (or higher) backend database.\",\r\n            \"website\": \"https://www.nopcommerce.com\"\r\n        },\r\n        \"nopStation\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"implies\": [\r\n                \"Microsoft ASP.NET\"\r\n            ],\r\n            \"description\": \"nopStation is a one stop ecommerce solution with custom integrations and custom built plugins based on custom tailored requirements on top of nopCommerce.\",\r\n            \"website\": \"https://www.nop-station.com\"\r\n        },\r\n        \"novomind iSHOP\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"_ishopevents\",\r\n                \"_ishopevents_url\",\r\n                \"ishop.config.baseurl\"\r\n            ],\r\n            \"description\": \"novomind iSHOP can be introduced rapidly, is highly scalable, has open APIs headless ecommerce and GDPR-compliant in the novomind Cloud.\",\r\n            \"website\": \"https://www.novomind.com/en/shopsystem/novomind-ishop-software\"\r\n        },\r\n        \"ocStore\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!--[^\\u003e]+ocstore(?:\\\\s([\\\\d\\\\.a-z]+))?\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"OpenCart\"\r\n            ],\r\n            \"description\": \"ocStore is an online store based on Opencart and open-source.\",\r\n            \"website\": \"https://ocstore.com\"\r\n        },\r\n        \"onpublix\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^onpublix\\\\s([\\\\d\\\\.]+)$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"description\": \"onpublix is a web content management system (CMS) platform for eBusinesses.\",\r\n            \"website\": \"https://www.onpublix.de\"\r\n        },\r\n        \"osCommerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"cookies\": {\r\n                \"oscsid\": \"\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003c(?:input|a)[^\\u003e]+name=\\\"oscsid\\\"\",\r\n                \"\\u003c(?:tr|td|table)class=\\\"[^\\\"]*infoboxheading\",\r\n                \"\\u003cbr /\\u003epowered by \\u003ca href=\\\"https?://www\\\\.oscommerce\\\\.com\"\r\n            ],\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"OsCommerce is an open-source ecommerce and online store-management software program​.\",\r\n            \"website\": \"https://www.oscommerce.com\"\r\n        },\r\n        \"osTicket\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"cookies\": {\r\n                \"ostsessid\": \"\"\r\n            },\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://osticket.com\"\r\n        },\r\n        \"otrs\": {\r\n            \"cats\": [\r\n                13\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"otrs ([\\\\d.]+)\\\\;version:\\\\1\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003c!--\\\\s+otrs: copyright\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"^/otrs-web/js/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Perl\"\r\n            ],\r\n            \"website\": \"https://www.otrs.com\"\r\n        },\r\n        \"ownCloud\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"html\": [\r\n                \"\\u003ca href=\\\"https://owncloud\\\\.com\\\" target=\\\"_blank\\\"\\u003eowncloud inc\\\\.\\u003c/a\\u003e\\u003cbr/\\u003eyour cloud, your data, your way!\"\r\n            ],\r\n            \"meta\": {\r\n                \"apple-itunes-app\": [\r\n                    \"app-id=543672169\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://owncloud.org\"\r\n        },\r\n        \"papaya CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]*/papaya-themes/\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://papaya-cms.com\"\r\n        },\r\n        \"parcel\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"js\": [\r\n                \"parcelrequire\"\r\n            ],\r\n            \"implies\": [\r\n                \"SWC\"\r\n            ],\r\n            \"website\": \"https://parceljs.org/\"\r\n        },\r\n        \"particles.js\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"particlesjs\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/particles(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"description\": \"Particles.js is a JavaScript library for creating particles.\",\r\n            \"website\": \"https://github.com/VincentGarreau/particles.js\"\r\n        },\r\n        \"petite-vue\": {\r\n            \"cats\": [\r\n                19\r\n            ],\r\n            \"scripts\": [\r\n                \"/petite-vue@([\\\\d\\\\.]+)/\\\\;version:\\\\1\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/petite-vue\"\r\n            ],\r\n            \"description\": \"petite-vue is an alternative distribution of Vue optimised for progressive enhancement.\",\r\n            \"website\": \"https://github.com/vuejs/petite-vue\"\r\n        },\r\n        \"phpAlbum\": {\r\n            \"cats\": [\r\n                7\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!--phpalbum ([.\\\\d\\\\s]+)--\\u003e\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"phpAlbum is an open-source PHP script which allows you to create your personal photo album.\",\r\n            \"website\": \"https://phpalbum.net\"\r\n        },\r\n        \"phpBB\": {\r\n            \"cats\": [\r\n                2\r\n            ],\r\n            \"cookies\": {\r\n                \"phpbb\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"phpbb\",\r\n                \"style_cookie_settings\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c[^\\u003e]+styles/(?:sub|pro)silver/theme\",\r\n                \"\\u003cdiv class=phpbb_copyright\\u003e\",\r\n                \"\\u003cimg[^\\u003e]+i_icon_mini\",\r\n                \"\\u003ctable class=\\\"[^\\\"]*forumline\",\r\n                \"powered by \\u003ca[^\\u003e]+phpbb\"\r\n            ],\r\n            \"meta\": {\r\n                \"copyright\": [\r\n                    \"phpbb group\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"phpBB is a free open-source Internet forum package in the PHP scripting language.\",\r\n            \"website\": \"https://phpbb.com\",\r\n            \"cpe\": \"cpe:2.3:a:phpbb:phpbb:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"phpCMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"js\": [\r\n                \"phpcms\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://phpcms.de\",\r\n            \"cpe\": \"cpe:2.3:a:phpcms:phpcms:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"phpDocumentor\": {\r\n            \"cats\": [\r\n                4\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c!-- generated by phpdocumentor\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"phpDocumentor is an open-source documentation generator written in PHP.\",\r\n            \"website\": \"https://www.phpdoc.org\"\r\n        },\r\n        \"phpMyAdmin\": {\r\n            \"cats\": [\r\n                3\r\n            ],\r\n            \"js\": [\r\n                \"pma_absolute_uri\"\r\n            ],\r\n            \"headers\": {\r\n                \"set-cookie\": \"phpmyadmin_https\"\r\n            },\r\n            \"html\": [\r\n                \"!\\\\[cdata\\\\[[^\\u003c]*pma_version:\\\\\\\"([\\\\d.]+)\\\\;version:\\\\1\",\r\n                \"(?: \\\\| phpmyadmin ([\\\\d.]+)\\u003c\\\\/title\\u003e|pma_sendheaderlocation\\\\(|\\u003clink [^\\u003e]*href=\\\"[^\\\"]*phpmyadmin\\\\.css\\\\.php)\\\\;version:\\\\1\"\r\n            ],\r\n            \"implies\": [\r\n                \"MySQL\",\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"PhpMyAdmin is a free and open-source administration tool for MySQL and MariaDB.\",\r\n            \"website\": \"https://www.phpmyadmin.net\",\r\n            \"cpe\": \"cpe:2.3:a:phpmyadmin:phpmyadmin:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"phpPgAdmin\": {\r\n            \"cats\": [\r\n                3\r\n            ],\r\n            \"html\": [\r\n                \"(?:\\u003ctitle\\u003ephppgadmin\\u003c/title\\u003e|\\u003cspan class=\\\"appname\\\"\\u003ephppgadmin)\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://phppgadmin.sourceforge.net\",\r\n            \"cpe\": \"cpe:2.3:a:phppgadmin_project:phppgadmin:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"phpRS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^phprs$\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"phpRS is a content management software written in PHP.\",\r\n            \"website\": \"https://phprs.net\"\r\n        },\r\n        \"phpSQLiteCMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^phpsqlitecms(?: (.+))?$\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\",\r\n                \"SQLite\"\r\n            ],\r\n            \"website\": \"https://phpsqlitecms.net\"\r\n        },\r\n        \"phpwind\": {\r\n            \"cats\": [\r\n                1,\r\n                2\r\n            ],\r\n            \"html\": [\r\n                \"(?:powered|code) by \\u003ca href=\\\"[^\\\"]+phpwind\\\\.net\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^phpwind(?: v([0-9-]+))?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://www.phpwind.net\"\r\n        },\r\n        \"pinoox\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"cookies\": {\r\n                \"pinoox_session\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"pinoox\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://pinoox.com\"\r\n        },\r\n        \"pirobase CMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c(?:script|link)[^\\u003e]/site/[a-z0-9/._-]+/resourcecached/[a-z0-9/._-]+\",\r\n                \"\\u003cinput[^\\u003e]+cbi:///cms/\"\r\n            ],\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"website\": \"https://www.pirobase-imperia.com/de/produkte/produktuebersicht/pirobase-cms\"\r\n        },\r\n        \"plentyShop LTS\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"headers\": {\r\n                \"x-plenty-shop\": \"ceres\"\r\n            },\r\n            \"description\": \"The official template plugin developed by plentymarkets. plentyShop LTS is the default template for plentymarkets online stores.\",\r\n            \"website\": \"https://www.plentymarkets.com/product/modules/online-shop/\"\r\n        },\r\n        \"plentymarkets\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"headers\": {\r\n                \"x-plenty-shop\": \"\"\r\n            },\r\n            \"scriptSrc\": [\r\n                \"plenty\\\\.shop\\\\.(?:min\\\\.)?js\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"plentymarkets\"\r\n                ]\r\n            },\r\n            \"description\": \"plentymarkets is a cloud-based all-in-one ecommerce ERP solution.\",\r\n            \"website\": \"https://www.plentymarkets.com/\"\r\n        },\r\n        \"prettyPhoto\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"pp_alreadyinitialized\",\r\n                \"pp_descriptions\",\r\n                \"pp_images\",\r\n                \"pp_titles\"\r\n            ],\r\n            \"html\": [\r\n                \"(?:\\u003clink [^\\u003e]*href=\\\"[^\\\"]*prettyphoto(?:\\\\.min)?\\\\.css|\\u003ca [^\\u003e]*rel=\\\"prettyphoto)\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"jquery\\\\.prettyphoto\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"jQuery\"\r\n            ],\r\n            \"website\": \"https://no-margin-for-errors.com/projects/prettyphoto-jquery-lightbox-clone/\"\r\n        },\r\n        \"punBB\": {\r\n            \"cats\": [\r\n                2\r\n            ],\r\n            \"js\": [\r\n                \"punbb\"\r\n            ],\r\n            \"html\": [\r\n                \"powered by \\u003ca href=\\\"[^\\u003e]+punbb\"\r\n            ],\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://punbb.informer.com\"\r\n        },\r\n        \"qiankun\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"scripts\": [\r\n                \"__powered_by_qiankun__\"\r\n            ],\r\n            \"description\": \"qiankun is a JS library who helps developers to build a micro frontends system.\",\r\n            \"website\": \"https://qiankun.umijs.org\"\r\n        },\r\n        \"reCAPTCHA\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"js\": [\r\n                \"recaptcha\",\r\n                \"recaptcha\"\r\n            ],\r\n            \"scripts\": [\r\n                \"/recaptcha/api\\\\.js\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/recaptcha/(?:api|enterprise)\\\\.js\",\r\n                \"api-secure\\\\.recaptcha\\\\.net\",\r\n                \"recaptcha_ajax\\\\.js\"\r\n            ],\r\n            \"description\": \"reCAPTCHA is a free service from Google that helps protect websites from spam and abuse.\",\r\n            \"website\": \"https://www.google.com/recaptcha/\"\r\n        },\r\n        \"sIFR\": {\r\n            \"cats\": [\r\n                17\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"sifr\\\\.js\"\r\n            ],\r\n            \"description\": \"sIFR is a JavaScript and Adobe Flash dynamic web fonts implementation.\",\r\n            \"website\": \"https://www.mikeindustries.com/blog/sifr\"\r\n        },\r\n        \"sNews\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"snews\"\r\n                ]\r\n            },\r\n            \"website\": \"https://snewscms.com\"\r\n        },\r\n        \"script.aculo.us\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"js\": [\r\n                \"scriptaculous.version\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/(?:scriptaculous|protoaculous)(?:\\\\.js|/)\"\r\n            ],\r\n            \"website\": \"https://script.aculo.us\"\r\n        },\r\n        \"scrollreveal\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"html\": [\r\n                \"\\u003c[^\\u003e]+data-sr(?:-id)\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"scrollreveal(?:\\\\.min)(?:\\\\.js)\"\r\n            ],\r\n            \"website\": \"https://scrollrevealjs.org\"\r\n        },\r\n        \"shadcn/ui\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"css\": [\r\n                \"--destructive-foreground\"\r\n            ],\r\n            \"implies\": [\r\n                \"Radix UI\",\r\n                \"Tailwind CSS\"\r\n            ],\r\n            \"description\": \"shadcn/ui is a component system built with Radix UI and Tailwind CSS.\",\r\n            \"website\": \"https://ui.shadcn.com\"\r\n        },\r\n        \"shine.js\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"shine\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"shine(?:\\\\.min)?\\\\.js\"\r\n            ],\r\n            \"website\": \"https://bigspaceship.github.io/shine.js/\"\r\n        },\r\n        \"siimple\": {\r\n            \"cats\": [\r\n                66\r\n            ],\r\n            \"description\": \"siimple is a minimal CSS toolkit for building flat, clean and responsive web designs.\",\r\n            \"website\": \"https://siimple.xyz\"\r\n        },\r\n        \"snigel AdConsent\": {\r\n            \"cats\": [\r\n                67\r\n            ],\r\n            \"js\": [\r\n                \"adconsent.version\",\r\n                \"snhb.basesettings\",\r\n                \"snhb.info.cmpversion\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:staging-)?cdn\\\\.snigelweb\\\\.com/(?:snhb|adconsent)/\"\r\n            ],\r\n            \"description\": \"snigel AdConsent is a IAB-registered consent management platfrom (CMP) which help keep sites speed intact while remaining compliant with GDPR and CCPA.\",\r\n            \"website\": \"https://www.snigel.com/adconsent/\"\r\n        },\r\n        \"snigel AdEngine\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"(?:staging-)?cdn\\\\.snigelweb\\\\.com/adengine/\",\r\n                \"adengine\\\\.snigelweb\\\\.com\"\r\n            ],\r\n            \"description\": \"snigel AdEngine is a header bidding solution product from snigel.\",\r\n            \"website\": \"https://www.snigel.com/adengine/\"\r\n        },\r\n        \"stores.jp\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"stores_jp\"\r\n            ],\r\n            \"implies\": [\r\n                \"Mastercard\",\r\n                \"Visa\"\r\n            ],\r\n            \"description\": \"stores.jp is an ecommerce platform which allows users to create their own ecommerce website.\",\r\n            \"website\": \"https://stores.jp/ec/\"\r\n        },\r\n        \"styled-components\": {\r\n            \"cats\": [\r\n                12,\r\n                47\r\n            ],\r\n            \"js\": [\r\n                \"styled\"\r\n            ],\r\n            \"implies\": [\r\n                \"React\"\r\n            ],\r\n            \"description\": \"Styled components is a CSS-in-JS styling framework that uses tagged template literals in JavaScript.\",\r\n            \"website\": \"https://styled-components.com\"\r\n        },\r\n        \"theTradeDesk\": {\r\n            \"cats\": [\r\n                36\r\n            ],\r\n            \"js\": [\r\n                \"ttd_dom_ready\",\r\n                \"ttduniversalpixelapi\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.adsrvr\\\\.org/\"\r\n            ],\r\n            \"description\": \"theTradeDesk is an technology company that markets a software platform used by digital ad buyers to purchase data-driven digital advertising campaigns across various ad formats and devices.\",\r\n            \"website\": \"https://www.thetradedesk.com\"\r\n        },\r\n        \"thttpd\": {\r\n            \"cats\": [\r\n                22\r\n            ],\r\n            \"headers\": {\r\n                \"server\": \"\\\\bthttpd(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"website\": \"https://acme.com/software/thttpd\",\r\n            \"cpe\": \"cpe:2.3:a:acme:thttpd:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"toastr\": {\r\n            \"cats\": [\r\n                12\r\n            ],\r\n            \"js\": [\r\n                \"toastr.version\"\r\n            ],\r\n            \"description\": \"toastr is a Javascript library for non-blocking notifications. The goal is to create a simple core library that can be customized and extended.\",\r\n            \"website\": \"https://github.com/CodeSeven/toastr\"\r\n        },\r\n        \"total.js\": {\r\n            \"cats\": [\r\n                18\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"^total\\\\.js\"\r\n            },\r\n            \"implies\": [\r\n                \"Node.js\"\r\n            ],\r\n            \"website\": \"https://totaljs.com\"\r\n        },\r\n        \"uKnowva\": {\r\n            \"cats\": [\r\n                1,\r\n                2,\r\n                50\r\n            ],\r\n            \"headers\": {\r\n                \"x-content-encoded-by\": \"uknowva ([\\\\d.]+)\\\\;version:\\\\1\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003ca[^\\u003e]+\\u003epowered by uknowva\\u003c/a\\u003e\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"/media/conv/js/jquery\\\\.js\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"uknowva (?: ([\\\\d.]+))?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://uknowva.com\"\r\n        },\r\n        \"uLogin\": {\r\n            \"cats\": [\r\n                69\r\n            ],\r\n            \"js\": [\r\n                \"ulogin.version\"\r\n            ],\r\n            \"description\": \"uLogin is a tool that enables its users to get unified access to various Internet services.\",\r\n            \"website\": \"https://ulogin.ru\"\r\n        },\r\n        \"uMarketingSuite\": {\r\n            \"cats\": [\r\n                10,\r\n                76\r\n            ],\r\n            \"js\": [\r\n                \"umarketingsuite\"\r\n            ],\r\n            \"implies\": [\r\n                \"Umbraco\"\r\n            ],\r\n            \"description\": \"uMarketingSuite is a set of diverse features that together form a full marketing suite for the Umbraco platform.\",\r\n            \"website\": \"https://www.umarketingsuite.com\"\r\n        },\r\n        \"uPlot\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"uplot\"\r\n            ],\r\n            \"description\": \"uPlot is a small, fast chart for time series, lines, areas, ohlc and bars.\",\r\n            \"website\": \"https://leeoniya.github.io/uPlot\"\r\n        },\r\n        \"uPortal\": {\r\n            \"cats\": [\r\n                21\r\n            ],\r\n            \"js\": [\r\n                \"uportal\"\r\n            ],\r\n            \"meta\": {\r\n                \"description\": [\r\n                    \" uportal \"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"Java\"\r\n            ],\r\n            \"description\": \"uPortal is an open source enterprise portal framework built by and for higher education institutions.\",\r\n            \"website\": \"https://www.apereo.org/projects/uportal\"\r\n        },\r\n        \"uRemediate\": {\r\n            \"cats\": [\r\n                68\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"fecdn\\\\.user1st\\\\.info/loader/head\"\r\n            ],\r\n            \"description\": \"uRemediate provides web accessibility testing tools and accessibility overlays.\",\r\n            \"website\": \"https://www.user1st.com/uremediate/\"\r\n        },\r\n        \"user.com\": {\r\n            \"cats\": [\r\n                10\r\n            ],\r\n            \"js\": [\r\n                \"userengage\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cdiv[^\\u003e]+/id=\\\"ue_widget\\\"\"\r\n            ],\r\n            \"website\": \"https://user.com\"\r\n        },\r\n        \"utterances\": {\r\n            \"cats\": [\r\n                15\r\n            ],\r\n            \"description\": \"Utterances is a lightweight comments widget built on GitHub issues.\",\r\n            \"website\": \"https://utteranc.es/\"\r\n        },\r\n        \"v4Guard Checkpoint\": {\r\n            \"cats\": [\r\n                16\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.v4guard\\\\.io/checkpoint\"\r\n            ],\r\n            \"description\": \"Checkpoint is a product of v4Guard that verifies website users and prevents fraudulent access to sensitive areas, by checking for any use of anonymisation services with a captcha-like widget.\",\r\n            \"website\": \"https://v4guard.io\"\r\n        },\r\n        \"vBulletin\": {\r\n            \"cats\": [\r\n                2\r\n            ],\r\n            \"cookies\": {\r\n                \"bblastactivity\": \"\",\r\n                \"bblastvisit\": \"\",\r\n                \"bbsessionhash\": \"\"\r\n            },\r\n            \"js\": [\r\n                \"vbulletin\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cdiv id=\\\"copyright\\\"\\u003epowered by vbulletin\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"vbulletin ?([\\\\d.]+)?\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"vBulletin is tool that is used to create and manage online forums or discussion boards. It is written in PHP and uses a MySQL database server.\",\r\n            \"website\": \"https://www.vbulletin.com\",\r\n            \"cpe\": \"cpe:2.3:a:vbulletin:vbulletin:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"vcita\": {\r\n            \"cats\": [\r\n                53,\r\n                72\r\n            ],\r\n            \"js\": [\r\n                \"livesite.btcheckout\",\r\n                \"vcita\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"widgets\\\\.vcdnita\\\\.com/\",\r\n                \"www\\\\.vcita\\\\.com/widgets/\"\r\n            ],\r\n            \"description\": \"vcita is an all-in-one customer service and business management software designed for service providers.\",\r\n            \"website\": \"https://www.vcita.com\"\r\n        },\r\n        \"vibecommerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"meta\": {\r\n                \"designer\": [\r\n                    \"vibecommerce\"\r\n                ],\r\n                \"generator\": [\r\n                    \"vibecommerce\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"website\": \"https://vibecommerce.com.br\"\r\n        },\r\n        \"vxe-table\": {\r\n            \"cats\": [\r\n                59\r\n            ],\r\n            \"description\": \"vxe-table is a Vue.js based PC form component, support add, delete, change, virtual scroll, lazy load, shortcut menu, data validation, tree structure, print export, form rendering, data paging, virtual list, modal window, custom template, renderer, flexible configuration items, extension interface.\",\r\n            \"website\": \"https://vxetable.cn\"\r\n        },\r\n        \"wBuy\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"\\\\.sistemawbuy\\\\.com\\\\.br/\"\r\n            ],\r\n            \"description\": \"wBuy is a SaaS ecommerce platform.\",\r\n            \"website\": \"https://www.wbuy.com.br\"\r\n        },\r\n        \"wap.store\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"js\": [\r\n                \"wapstore.categoria\"\r\n            ],\r\n            \"implies\": [\r\n                \"MySQL\"\r\n            ],\r\n            \"description\": \"The wap.store provides a range of services for ecommerce businesses, including a platform, a marketplace hub, and a digital agency.\",\r\n            \"website\": \"https://www.wapstore.com.br\"\r\n        },\r\n        \"web-vitals\": {\r\n            \"cats\": [\r\n                59,\r\n                78\r\n            ],\r\n            \"js\": [\r\n                \"webvitals\"\r\n            ],\r\n            \"scripts\": [\r\n                \"(8999999999999[\\\\s\\\\s]+1e12[\\\\s\\\\s]+(largest-contentful-paint|first-input|layout-shift)|(largest-contentful-paint|first-input|layout-shift)[\\\\s\\\\s]+8999999999999[\\\\s\\\\s]+1e12)\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"web-vitals@([\\\\d.]+)/dist/web-vitals.*\\\\.js\\\\;version:\\\\1\"\r\n            ],\r\n            \"description\": \"The web-vitals JavaScript is a tiny, modular library for measuring all the web vitals metrics on real users.\",\r\n            \"website\": \"https://github.com/GoogleChrome/web-vitals\"\r\n        },\r\n        \"webEdition\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"dc.title\": [\r\n                    \"webedition\"\r\n                ],\r\n                \"generator\": [\r\n                    \"webedition\"\r\n                ]\r\n            },\r\n            \"website\": \"https://webedition.de/en\",\r\n            \"cpe\": \"cpe:2.3:a:webedition:webedition_cms:*:*:*:*:*:*:*:*\"\r\n        },\r\n        \"wisyCMS\": {\r\n            \"cats\": [\r\n                1\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"^wisy cms[ v]{0,3}([0-9.,]*)\\\\;version:\\\\1\"\r\n                ]\r\n            },\r\n            \"website\": \"https://wisy.3we.de\"\r\n        },\r\n        \"wpBakery\": {\r\n            \"cats\": [\r\n                51,\r\n                87\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"wpbakery\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"WPBakery is a drag and drop visual page builder plugin for WordPress.\",\r\n            \"website\": \"https://wpbakery.com\"\r\n        },\r\n        \"wpCache\": {\r\n            \"cats\": [\r\n                23,\r\n                87\r\n            ],\r\n            \"headers\": {\r\n                \"x-powered-by\": \"wpcache(?:/([\\\\d.]+))?\\\\;version:\\\\1\"\r\n            },\r\n            \"html\": [\r\n                \"\\u003c!--[^\\u003e]+wpcache\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"wpcache\"\r\n                ],\r\n                \"keywords\": [\r\n                    \"wpcache\"\r\n                ]\r\n            },\r\n            \"implies\": [\r\n                \"PHP\"\r\n            ],\r\n            \"description\": \"WPCache is a static caching plugin for WordPress.\",\r\n            \"website\": \"https://wpcache.co\"\r\n        },\r\n        \"xCharts\": {\r\n            \"cats\": [\r\n                25\r\n            ],\r\n            \"js\": [\r\n                \"xchart\"\r\n            ],\r\n            \"html\": [\r\n                \"\\u003clink[^\\u003e]* href=\\\"[^\\\"]*xcharts(?:\\\\.min)?\\\\.css\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"xcharts\\\\.js\"\r\n            ],\r\n            \"implies\": [\r\n                \"D3\"\r\n            ],\r\n            \"website\": \"https://tenxer.github.io/xcharts/\"\r\n        },\r\n        \"xtCommerce\": {\r\n            \"cats\": [\r\n                6\r\n            ],\r\n            \"html\": [\r\n                \"\\u003cdiv class=\\\"copyright\\\"\\u003e[^\\u003c]+\\u003ca[^\\u003e]+\\u003ext:commerce\"\r\n            ],\r\n            \"meta\": {\r\n                \"generator\": [\r\n                    \"xt:commerce\"\r\n                ]\r\n            },\r\n            \"website\": \"https://www.xt-commerce.com\"\r\n        },\r\n        \"yellow.ai\": {\r\n            \"cats\": [\r\n                52\r\n            ],\r\n            \"js\": [\r\n                \"ymconfig\"\r\n            ],\r\n            \"scriptSrc\": [\r\n                \"cdn\\\\.yellowmessenger\\\\.com\"\r\n            ],\r\n            \"description\": \"yellow.ai provides chatbot and automation services.\",\r\n            \"website\": \"https://yellow.ai/\"\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "backend/manage.py",
    "content": "#!/usr/bin/env python\n\"\"\"Django's command-line utility for administrative tasks.\"\"\"\nimport os\nimport sys\n\n\ndef main():\n    \"\"\"Run administrative tasks.\"\"\"\n    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')\n    try:\n        from django.core.management import execute_from_command_line\n    except ImportError as exc:\n        raise ImportError(\n            \"Couldn't import Django. Are you sure it's installed and \"\n            \"available on your PYTHONPATH environment variable? Did you \"\n            \"forget to activate a virtual environment?\"\n        ) from exc\n    execute_from_command_line(sys.argv)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "backend/pyproject.toml",
    "content": "[tool.pytest.ini_options]\nDJANGO_SETTINGS_MODULE = \"config.settings\"\npython_files = [\"test_*.py\", \"*_test.py\"]\npython_classes = [\"Test*\"]\npython_functions = [\"test_*\"]\ntestpaths = [\"apps\"]\naddopts = \"-v --reuse-db\"\n\n[tool.pylint]\ndjango-settings-module = \"config.settings\"\nload-plugins = \"pylint_django\"\n\n[tool.pylint.messages_control]\ndisable = [\n  \"missing-docstring\",\n  \"invalid-name\",\n  \"too-few-public-methods\",\n  \"no-member\",\n  \"import-error\",\n  \"no-name-in-module\",\n  \"wrong-import-position\",   # 允许函数内导入（防循环依赖）\n  \"import-outside-toplevel\", # 同上\n  \"too-many-arguments\",      # Django 视图/服务方法参数常超过5个\n  \"too-many-locals\",         # 复杂业务逻辑局部变量多\n  \"duplicate-code\",          # 某些模式代码相似是正常的\n]\n\n[tool.pylint.format]\nmax-line-length = 120\n\n[tool.pylint.basic]\ngood-names = [\n  \"i\",\n  \"j\",\n  \"k\",\n  \"ex\",\n  \"Run\",\n  \"_\",\n  \"id\",\n  \"pk\",\n  \"ip\",\n  \"url\",\n  \"db\",\n  \"qs\",\n]\n"
  },
  {
    "path": "backend/requirements.txt",
    "content": "# Django 核心\nDjango==5.2.7\ndjangorestframework==3.15.2\ndjangorestframework-camel-case==1.4.2\npsycopg2-binary==2.9.10\n\n# API 文档\ndrf-yasg==1.21.7\nsetuptools==75.6.0\n\n# CORS 支持\ndjango-cors-headers==4.3.1\n\n# 过滤器支持\ndjango-filter==24.3\n\n# 环境变量管理\npython-dotenv==1.0.1\n\n# 异步任务和工作流编排\nprefect==3.4.25\nfastapi==0.115.5  # 锁定版本，0.123+ 与 Prefect 不兼容\nredis==5.0.3  # 可选：用于缓存\nAPScheduler>=3.10.0  # 定时任务调度器\n\n# WebSocket 支持\nchannels==4.0.0\nchannels-redis==4.2.0\nuvicorn[standard]==0.30.1\n\n# SSH & 远程部署\nparamiko>=3.0.0\n\n# Docker 管理\ndocker>=6.0.0  # Python Docker SDK\npackaging>=21.0  # 版本比较\n\n# 测试框架\npytest==8.0.0\npytest-django==4.7.0\nhypothesis>=6.100.0  # 属性测试框架\n\n# 工具库\npython-dateutil==2.9.0\nPillow>=10.0.0  # 图像处理（截图服务）\nplaywright>=1.40.0  # 浏览器自动化（截图服务）\npytz==2024.1\nvalidators==0.22.0\nPyYAML==6.0.1\nruamel.yaml>=0.18.0  # 保留注释的 YAML 解析\ncolorlog==6.8.2  # 彩色日志输出\npython-json-logger==2.0.7  # JSON 结构化日志\nJinja2>=3.1.6  # 命令模板引擎\ncroniter>=2.0.0  # Cron 表达式解析（定时扫描）\npsutil>=5.9.0\n\n# 缓存\ncachetools>=5.3.0\n"
  },
  {
    "path": "backend/resources/resolvers.txt",
    "content": "99.99.99.193\n99.93.24.105\n99.92.207.51\n99.87.255.60\n99.83.147.72\n99.79.50.252\n99.79.182.170\n99.70.82.25\n99.42.199.193\n99.227.243.184\n98.28.219.202\n98.26.23.128\n98.213.193.14\n98.213.192.240\n98.213.192.223\n98.213.192.217\n98.191.57.131\n98.189.213.222\n98.186.137.171\n98.185.36.75\n98.175.83.14\n98.175.116.85\n98.171.255.37\n98.164.41.54\n98.154.40.78\n98.154.21.253\n98.153.167.29\n98.153.113.3\n98.152.244.50\n98.152.244.34\n98.13.82.63\n98.124.65.10\n98.116.5.254\n98.114.102.244\n98.102.44.156\n98.102.248.54\n98.102.153.162\n98.101.59.106\n98.101.240.164\n98.101.194.137\n98.100.232.5\n97.94.219.213\n97.90.61.98\n97.87.21.84\n97.84.39.242\n97.79.42.154\n97.78.76.116\n97.78.189.245\n97.75.162.89\n97.74.87.35\n97.74.86.124\n97.68.236.229\n97.68.173.14\n97.65.200.94\n97.64.128.163\n97.105.100.20\n96.95.223.105\n96.95.146.25\n96.93.138.5\n96.92.154.9\n96.88.179.101\n96.85.5.153\n96.82.69.210\n96.82.121.113\n96.81.30.194\n96.80.250.221\n96.8.17.30\n96.8.17.29\n96.8.17.26\n96.8.17.2\n96.8.17.142\n96.8.17.139\n96.8.17.131\n96.8.17.130\n96.76.85.122\n96.76.237.249\n96.74.213.233\n96.73.116.75\n96.73.116.29\n96.72.81.89\n96.72.43.162\n96.71.85.74\n96.71.165.73\n96.70.61.241\n96.70.191.213\n96.7.139.2\n96.7.139.1\n96.7.138.2\n96.7.137.92\n96.7.137.90\n96.7.137.82\n96.7.137.78\n96.7.137.64\n96.7.137.63\n96.7.137.32\n96.7.137.31\n96.7.137.250\n96.7.137.249\n96.7.137.227\n96.7.137.21\n96.7.137.208\n96.7.137.188\n96.7.137.184\n96.7.137.171\n96.7.137.169\n96.7.137.162\n96.7.137.150\n96.7.137.15\n96.7.137.142\n96.7.137.140\n96.7.137.137\n96.7.137.13\n96.7.137.12\n96.7.137.102\n96.7.137.0\n96.7.136.90\n96.7.136.86\n96.7.136.77\n96.7.136.63\n96.7.136.44\n96.7.136.41\n96.7.136.4\n96.7.136.254\n96.7.136.249\n96.7.136.242\n96.7.136.227\n96.7.136.216\n96.7.136.2\n96.7.136.199\n96.7.136.188\n96.7.136.169\n96.7.136.161\n96.7.136.160\n96.7.136.159\n96.7.136.146\n96.7.136.144\n96.7.136.140\n96.7.136.134\n96.7.136.123\n96.7.136.115\n96.7.136.114\n96.7.136.111\n96.7.136.107\n96.69.146.137\n96.68.29.97\n96.68.207.177\n96.68.152.180\n96.65.169.149\n96.56.97.5\n96.56.235.235\n96.5.131.84\n96.45.46.46\n96.45.45.45\n96.39.26.82\n96.36.248.12\n96.36.19.25\n96.35.169.218\n96.30.79.13\n96.30.126.36\n96.250.208.198\n96.235.35.5\n96.231.106.122\n96.127.154.165\n96.11.55.179\n96.10.55.75\n96.10.247.60\n96.10.218.162\n96.10.126.38\n95.97.79.58\n95.97.77.138\n95.97.113.102\n95.87.216.107\n95.86.164.205\n95.85.95.85\n95.85.86.194\n95.84.198.236\n95.84.192.62\n95.84.162.246\n95.80.93.89\n95.80.217.164\n95.80.104.128\n95.77.99.62\n95.77.96.79\n95.77.96.73\n95.73.60.213\n95.71.9.162\n95.71.2.54\n95.71.127.75\n95.68.245.145\n95.66.165.93\n95.66.164.102\n95.66.148.208\n95.66.142.11\n95.66.132.26\n95.65.9.171\n95.64.212.6\n95.64.205.42\n95.64.204.142\n95.64.202.178\n95.64.190.122\n95.64.186.94\n95.64.180.2\n95.64.167.46\n95.64.146.206\n95.64.141.190\n95.64.138.174\n95.64.134.98\n95.61.156.70\n95.58.145.254\n95.57.155.125\n95.54.192.158\n95.52.240.151\n95.50.82.150\n95.50.138.20\n95.47.59.113\n95.47.183.189\n95.47.180.171\n95.47.167.149\n95.47.164.83\n95.47.164.204\n95.47.148.218\n95.47.146.28\n95.47.140.179\n95.47.103.3\n95.47.103.2\n95.46.73.236\n95.46.6.43\n95.46.6.17\n95.46.141.236\n95.45.222.78\n95.43.241.218\n95.43.228.188\n95.43.223.164\n95.43.211.168\n95.43.125.251\n95.43.124.241\n95.43.101.183\n95.42.221.245\n95.42.22.30\n95.31.8.45\n95.31.52.10\n95.31.43.164\n95.31.40.207\n95.31.32.102\n95.31.233.13\n95.31.219.189\n95.31.208.124\n95.31.130.43\n95.30.250.9\n95.30.250.76\n95.30.250.69\n95.30.222.92\n95.30.216.187\n95.30.216.186\n95.255.67.120\n95.22.2.114\n95.216.72.9\n95.216.141.159\n95.216.12.41\n95.215.230.195\n95.215.19.53\n95.214.62.26\n95.214.106.135\n95.213.248.111\n95.213.208.251\n95.213.208.250\n95.213.146.181\n95.209.148.227\n95.190.199.158\n95.189.105.37\n95.189.104.1\n95.188.64.22\n95.183.55.91\n95.183.46.13\n95.182.107.243\n95.181.49.102\n95.181.143.56\n95.181.131.198\n95.180.218.10\n95.179.217.24\n95.179.143.35\n95.174.99.75\n95.174.99.34\n95.174.113.47\n95.174.111.27\n95.174.108.33\n95.174.101.212\n95.173.184.115\n95.172.87.14\n95.172.55.54\n95.172.52.114\n95.171.21.182\n95.171.117.141\n95.171.11.125\n95.168.224.139\n95.168.210.20\n95.168.195.130\n95.167.29.50\n95.167.216.17\n95.167.214.59\n95.167.214.38\n95.167.16.237\n95.167.150.28\n95.166.165.146\n95.165.90.159\n95.165.33.44\n95.165.255.106\n95.165.25.118\n95.165.200.74\n95.165.192.206\n95.165.192.190\n95.165.171.143\n95.165.167.48\n95.165.166.215\n95.165.162.79\n95.165.158.193\n95.165.146.162\n95.165.134.141\n95.165.12.86\n95.164.66.78\n95.164.65.17\n95.163.155.83\n95.161.228.110\n95.161.199.82\n95.161.198.130\n95.161.181.66\n95.161.166.46\n95.160.8.158\n95.160.31.73\n95.160.31.126\n95.160.230.148\n95.160.117.90\n95.160.117.47\n95.160.116.6\n95.160.116.42\n95.160.116.38\n95.160.116.34\n95.158.68.162\n95.158.37.247\n95.158.170.43\n95.158.146.166\n95.158.129.2\n95.158.128.2\n95.157.76.5\n95.156.4.114\n95.154.88.78\n95.154.88.72\n95.154.85.199\n95.154.80.145\n95.154.79.17\n95.154.78.70\n95.154.75.70\n95.154.72.135\n95.154.66.69\n95.154.180.65\n95.154.178.63\n95.154.177.60\n95.154.145.151\n95.154.110.85\n95.154.106.156\n95.154.103.131\n95.153.244.248\n95.143.242.138\n95.143.12.246\n95.142.88.177\n95.142.217.29\n95.141.82.202\n95.141.40.109\n95.141.23.145\n95.140.30.33\n95.140.203.92\n95.140.18.241\n95.140.17.94\n95.130.177.82\n95.129.147.156\n95.129.137.3\n95.128.72.180\n95.128.137.166\n95.124.245.102\n95.111.255.50\n95.111.252.8\n95.111.248.242\n95.111.239.88\n95.111.234.149\n95.111.231.0\n95.111.230.53\n95.111.226.67\n95.110.222.190\n95.110.208.189\n95.110.191.26\n95.110.185.167\n95.110.166.62\n95.110.154.72\n95.110.144.85\n95.110.135.8\n95.110.134.114\n95.110.133.36\n95.110.132.25\n95.110.131.72\n95.110.131.139\n95.107.53.22\n95.105.89.98\n95.105.89.28\n95.104.194.159\n95.104.194.108\n95.104.126.235\n94.79.33.27\n94.76.206.195\n94.76.203.216\n94.75.71.1\n94.75.110.66\n94.73.244.135\n94.73.231.219\n94.73.223.67\n94.73.216.61\n94.73.166.124\n94.72.61.194\n94.72.28.16\n94.72.10.94\n94.70.86.230\n94.70.224.14\n94.70.174.128\n94.68.84.250\n94.61.250.150\n94.51.107.254\n94.46.21.66\n94.46.175.93\n94.45.222.178\n94.43.99.154\n94.42.194.28\n94.41.86.120\n94.41.108.33\n94.40.112.196\n94.32.106.53\n94.30.9.110\n94.30.76.241\n94.29.75.49\n94.29.72.176\n94.26.96.84\n94.26.215.242\n94.26.147.16\n94.26.129.214\n94.255.145.226\n94.254.249.29\n94.253.9.230\n94.253.9.221\n94.253.15.114\n94.253.14.211\n94.253.13.82\n94.253.13.38\n94.253.12.85\n94.253.12.232\n94.249.192.20\n94.247.62.77\n94.247.61.239\n94.247.43.254\n94.247.208.90\n94.247.208.128\n94.243.61.94\n94.243.219.86\n94.243.131.250\n94.241.90.71\n94.240.43.117\n94.240.35.102\n94.24.54.252\n94.24.235.114\n94.24.107.161\n94.237.98.149\n94.236.210.227\n94.236.164.81\n94.233.73.10\n94.233.27.82\n94.232.62.66\n94.232.62.253\n94.232.62.169\n94.232.24.10\n94.232.217.81\n94.232.217.1\n94.232.216.81\n94.232.216.60\n94.232.216.217\n94.232.216.113\n94.232.11.178\n94.231.251.5\n94.231.212.65\n94.231.164.11\n94.231.164.10\n94.230.242.146\n94.230.241.186\n94.230.190.34\n94.230.190.226\n94.230.140.123\n94.230.130.151\n94.230.130.111\n94.23.81.37\n94.23.53.47\n94.23.205.212\n94.229.82.148\n94.229.237.174\n94.228.237.1\n94.228.207.117\n94.228.200.88\n94.228.198.76\n94.228.198.137\n94.228.187.149\n94.21.91.28\n94.21.91.189\n94.21.243.35\n94.21.243.250\n94.21.228.198\n94.209.111.121\n94.206.40.206\n94.206.40.14\n94.205.51.210\n94.205.48.98\n94.205.48.254\n94.203.136.10\n94.200.81.142\n94.200.80.94\n94.200.134.30\n94.200.113.250\n94.200.113.238\n94.20.88.35\n94.20.81.90\n94.20.68.142\n94.20.230.180\n94.20.230.175\n94.20.20.20\n94.20.142.202\n94.199.79.178\n94.199.75.180\n94.199.48.245\n94.199.48.243\n94.199.193.138\n94.198.55.64\n94.190.231.72\n94.190.216.177\n94.190.214.173\n94.190.213.131\n94.190.209.180\n94.190.206.66\n94.187.158.243\n94.18.210.70\n94.177.240.27\n94.177.203.192\n94.177.186.211\n94.174.238.188\n94.168.100.234\n94.158.157.142\n94.155.241.3\n94.154.86.60\n94.154.57.51\n94.154.27.222\n94.154.220.93\n94.153.241.134\n94.152.184.178\n94.141.135.186\n94.140.193.187\n94.140.15.15\n94.140.14.59\n94.140.14.49\n94.140.14.141\n94.140.14.140\n94.140.14.14\n94.140.104.242\n94.139.240.121\n94.139.221.136\n94.139.206.143\n94.138.81.162\n94.137.233.220\n94.135.228.220\n94.127.63.9\n94.127.63.6\n94.127.63.11\n94.127.59.8\n94.127.59.6\n94.127.59.14\n94.127.59.12\n94.127.59.11\n94.127.59.10\n94.127.135.212\n94.126.25.130\n94.124.199.113\n94.124.152.158\n94.102.6.142\n94.101.54.44\n94.101.234.229\n94.101.200.165\n94.100.65.225\n94.100.56.157\n94.100.11.64\n93.99.54.195\n93.97.214.4\n93.97.212.7\n93.95.99.250\n93.95.98.79\n93.95.103.70\n93.94.223.233\n93.93.56.1\n93.92.92.2\n93.92.65.2\n93.92.203.96\n93.92.202.187\n93.92.202.178\n93.92.196.238\n93.91.173.158\n93.91.153.178\n93.91.119.90\n93.91.119.230\n93.91.118.90\n93.91.116.100\n93.89.202.139\n93.89.111.13\n93.89.111.12\n93.88.78.116\n93.88.76.113\n93.88.195.34\n93.88.136.186\n93.87.72.62\n93.87.43.248\n93.87.43.227\n93.87.43.226\n93.87.42.218\n93.87.28.142\n93.87.244.161\n93.87.12.184\n93.87.119.92\n93.86.62.127\n93.86.51.162\n93.86.255.186\n93.85.92.173\n93.85.92.171\n93.85.241.30\n93.84.101.34\n93.83.47.82\n93.81.246.24\n93.81.243.138\n93.64.47.86\n93.64.222.78\n93.63.254.50\n93.63.229.132\n93.63.130.2\n93.62.185.99\n93.62.185.102\n93.62.185.101\n93.56.53.221\n93.56.53.218\n93.56.39.106\n93.56.11.92\n93.55.84.115\n93.51.241.141\n93.47.71.126\n93.46.55.233\n93.46.196.158\n93.46.163.31\n93.46.163.27\n93.43.95.134\n93.43.7.68\n93.42.199.134\n93.39.79.221\n93.34.4.222\n93.240.63.136\n93.240.228.186\n93.240.221.83\n93.240.174.186\n93.191.59.50\n93.191.14.176\n93.190.240.140\n93.190.224.140\n93.190.111.55\n93.189.251.101\n93.189.145.8\n93.187.183.52\n93.186.252.89\n93.186.245.247\n93.184.104.17\n93.183.204.1\n93.180.185.63\n93.180.179.93\n93.179.83.20\n93.179.254.253\n93.177.158.73\n93.177.126.4\n93.177.126.189\n93.175.245.14\n93.175.204.4\n93.174.79.88\n93.174.37.17\n93.174.241.154\n93.171.79.160\n93.171.4.66\n93.171.4.60\n93.171.4.51\n93.171.4.45\n93.171.4.43\n93.171.4.32\n93.171.4.25\n93.171.214.135\n93.171.182.249\n93.171.165.39\n93.170.94.8\n93.170.59.59\n93.170.5.238\n93.170.218.216\n93.170.209.77\n93.170.200.216\n93.170.190.130\n93.170.131.133\n93.170.118.246\n93.170.118.123\n93.170.116.147\n93.170.114.86\n93.170.114.62\n93.159.183.102\n93.159.156.82\n93.159.141.38\n93.158.35.34\n93.158.35.221\n93.158.35.220\n93.158.35.210\n93.158.35.197\n93.158.35.192\n93.158.35.189\n93.158.35.188\n93.158.35.174\n93.158.235.219\n93.158.228.243\n93.158.218.249\n93.157.46.181\n93.157.235.27\n93.157.168.222\n93.157.150.14\n93.153.229.38\n93.153.201.154\n93.153.170.202\n93.153.146.242\n93.150.45.238\n93.150.23.67\n93.150.21.150\n93.147.190.83\n93.147.179.161\n93.147.164.56\n93.145.96.230\n93.145.79.188\n93.145.22.2\n93.145.138.138\n93.126.113.230\n93.125.3.22\n93.125.121.128\n93.123.98.74\n93.123.96.46\n93.123.186.60\n93.123.16.124\n93.122.164.198\n93.122.145.238\n93.120.228.226\n93.115.28.114\n93.115.25.103\n93.115.138.251\n93.115.138.250\n93.115.136.236\n93.109.251.146\n93.109.243.17\n93.109.234.70\n93.109.228.14\n93.105.11.226\n93.104.240.206\n93.104.195.2\n93.103.221.171\n93.103.220.170\n92.92.218.109\n92.87.237.111\n92.80.101.210\n92.79.86.172\n92.67.160.10\n92.62.72.147\n92.62.65.237\n92.62.65.147\n92.62.65.138\n92.61.44.7\n92.60.50.40\n92.60.48.3\n92.59.185.58\n92.55.97.23\n92.55.56.232\n92.55.37.189\n92.55.27.172\n92.55.22.35\n92.53.124.134\n92.53.104.56\n92.53.101.219\n92.51.17.17\n92.51.12.60\n92.50.144.230\n92.50.144.154\n92.50.143.122\n92.50.141.22\n92.50.131.67\n92.49.159.116\n92.47.64.90\n92.45.23.168\n92.43.37.236\n92.43.224.1\n92.42.8.23\n92.42.210.43\n92.42.209.138\n92.42.127.220\n92.42.120.232\n92.39.93.72\n92.39.78.230\n92.39.169.159\n92.39.107.106\n92.38.43.2\n92.38.133.221\n92.33.1.1\n92.27.159.59\n92.26.84.139\n92.255.97.70\n92.255.95.138\n92.255.12.62\n92.252.243.93\n92.252.240.59\n92.249.219.159\n92.249.148.88\n92.249.143.119\n92.246.205.155\n92.245.30.25\n92.245.149.15\n92.245.109.24\n92.244.225.211\n92.243.164.125\n92.242.70.219\n92.242.54.211\n92.241.87.74\n92.241.86.42\n92.241.86.102\n92.241.8.225\n92.241.72.162\n92.241.69.226\n92.241.248.123\n92.241.19.83\n92.241.19.26\n92.241.17.234\n92.241.15.201\n92.241.143.147\n92.241.12.152\n92.241.111.8\n92.241.108.142\n92.241.102.13\n92.241.100.47\n92.241.100.200\n92.241.100.101\n92.240.251.48\n92.223.145.93\n92.223.105.162\n92.222.227.224\n92.222.221.29\n92.222.117.114\n92.205.63.50\n92.205.26.69\n92.205.21.96\n92.205.110.190\n92.204.241.140\n92.204.170.2\n92.203.123.237\n92.203.123.235\n92.198.57.36\n92.198.57.34\n92.198.20.43\n92.190.137.96\n92.182.99.142\n92.182.5.167\n92.182.38.172\n92.182.113.155\n92.182.111.64\n92.174.145.165\n92.174.128.197\n92.173.103.29\n92.154.25.213\n92.126.197.178\n92.124.99.58\n92.124.195.22\n92.124.156.129\n92.111.221.246\n92.101.192.202\n91.90.216.190\n91.90.190.58\n91.90.184.66\n91.90.179.50\n91.82.202.62\n91.81.60.206\n91.80.163.136\n91.74.90.206\n91.74.88.86\n91.74.66.94\n91.73.236.195\n91.73.167.42\n91.72.205.67\n91.72.185.26\n91.25.225.252\n91.25.225.251\n91.25.225.250\n91.249.242.34\n91.249.242.218\n91.249.238.157\n91.249.142.66\n91.247.250.178\n91.247.249.171\n91.247.234.78\n91.246.213.201\n91.246.213.161\n91.246.108.44\n91.245.159.2\n91.245.157.39\n91.244.230.115\n91.244.221.14\n91.244.172.167\n91.244.171.96\n91.244.113.72\n91.241.237.42\n91.240.86.14\n91.240.45.182\n91.240.211.83\n91.240.209.25\n91.240.103.2\n91.239.8.150\n91.239.237.150\n91.238.56.251\n91.238.56.20\n91.238.28.48\n91.238.234.38\n91.238.234.26\n91.238.234.226\n91.238.233.122\n91.237.183.242\n91.237.183.241\n91.237.183.225\n91.237.183.15\n91.237.183.1\n91.237.182.203\n91.237.109.151\n91.236.52.154\n91.236.238.91\n91.236.200.2\n91.236.176.148\n91.236.140.23\n91.236.137.82\n91.236.133.228\n91.236.114.66\n91.236.112.226\n91.235.253.248\n91.235.195.221\n91.235.100.31\n91.233.95.74\n91.233.7.209\n91.233.25.196\n91.233.25.138\n91.233.237.201\n91.233.176.248\n91.233.173.30\n91.233.173.28\n91.233.172.225\n91.232.188.7\n91.232.146.7\n91.232.141.91\n91.232.141.157\n91.232.105.138\n91.230.86.124\n91.230.68.158\n91.230.136.135\n91.229.62.10\n91.229.59.172\n91.229.216.3\n91.229.136.106\n91.228.32.110\n91.228.178.92\n91.227.23.66\n91.227.217.230\n91.227.216.11\n91.226.8.87\n91.226.8.182\n91.226.237.97\n91.226.223.235\n91.226.178.2\n91.226.172.139\n91.225.229.207\n91.225.228.86\n91.225.228.170\n91.224.61.250\n91.224.230.93\n91.224.206.30\n91.224.125.219\n91.224.124.184\n91.223.89.202\n91.223.74.126\n91.223.37.203\n91.223.224.254\n91.223.224.249\n91.223.120.25\n91.223.106.229\n91.221.57.203\n91.219.98.69\n91.219.83.40\n91.219.7.202\n91.219.7.166\n91.219.6.228\n91.219.6.226\n91.219.245.27\n91.219.203.237\n91.219.201.10\n91.218.210.19\n91.218.169.69\n91.218.100.11\n91.217.86.4\n91.217.22.56\n91.217.187.1\n91.217.109.128\n91.215.65.184\n91.215.227.18\n91.215.192.9\n91.215.150.74\n91.212.60.162\n91.212.228.198\n91.211.26.206\n91.211.142.138\n91.211.124.53\n91.210.86.199\n91.210.47.115\n91.210.25.81\n91.210.206.13\n91.210.179.88\n91.210.151.72\n91.209.174.71\n91.209.128.173\n91.208.20.17\n91.207.7.47\n91.206.231.155\n91.206.18.77\n91.205.72.51\n91.205.69.100\n91.205.3.65\n91.205.209.93\n91.205.208.46\n91.205.166.15\n91.205.144.27\n91.205.130.120\n91.205.129.144\n91.205.128.73\n91.204.96.164\n91.204.189.39\n91.204.165.174\n91.204.109.203\n91.203.82.231\n91.203.70.201\n91.203.36.75\n91.203.239.179\n91.203.195.253\n91.203.11.189\n91.202.26.198\n91.202.26.149\n91.201.235.186\n91.201.22.58\n91.201.19.243\n91.201.19.242\n91.201.17.47\n91.201.17.132\n91.201.17.117\n91.201.16.93\n91.201.16.81\n91.201.16.64\n91.201.136.36\n91.201.122.40\n91.200.67.156\n91.200.46.180\n91.200.45.108\n91.200.160.30\n91.200.0.15\n91.199.93.119\n91.197.209.222\n91.197.207.50\n91.197.204.2\n91.197.172.86\n91.197.135.24\n91.195.86.213\n91.195.71.1\n91.194.247.193\n91.194.246.45\n91.194.246.223\n91.194.22.2\n91.194.19.109\n91.193.12.196\n91.192.73.137\n91.192.68.66\n91.192.2.111\n91.192.196.131\n91.192.195.13\n91.192.194.207\n91.192.194.196\n91.192.168.212\n91.192.168.1\n91.191.251.122\n91.191.248.98\n91.191.14.15\n91.190.234.94\n91.190.234.87\n91.190.234.73\n91.190.234.69\n91.190.233.78\n91.190.142.200\n91.189.39.69\n91.189.27.242\n91.188.6.194\n91.188.188.64\n91.187.75.18\n91.187.59.84\n91.187.218.50\n91.185.238.152\n91.185.236.127\n91.183.7.14\n91.183.182.210\n91.183.104.102\n91.151.226.102\n91.150.93.128\n91.150.92.232\n91.150.126.174\n91.149.142.24\n91.148.109.139\n91.147.41.34\n91.147.40.118\n91.144.22.198\n91.143.58.198\n91.143.50.231\n91.143.44.36\n91.143.38.218\n91.138.253.87\n91.138.161.1\n91.137.131.25\n91.137.13.186\n91.135.7.77\n91.135.212.85\n91.135.212.62\n91.134.235.49\n91.134.159.109\n91.134.145.62\n91.133.83.97\n91.126.71.82\n91.126.217.123\n91.126.216.87\n91.126.187.228\n91.122.35.209\n91.122.198.34\n91.121.62.94\n91.121.59.192\n91.121.59.147\n91.121.52.36\n91.121.41.140\n91.121.33.31\n91.121.132.141\n91.121.114.217\n91.121.102.104\n91.120.22.182\n91.117.205.251\n91.109.95.22\n91.109.21.163\n91.109.192.227\n91.108.26.215\n91.103.29.245\n91.100.17.202\n90.84.225.87\n90.83.44.89\n90.63.223.17\n90.63.218.76\n90.63.218.189\n90.63.179.152\n90.24.152.179\n90.189.165.119\n90.189.113.130\n90.188.56.152\n90.188.38.38\n90.183.151.107\n90.183.151.106\n90.182.181.18\n90.176.22.74\n90.170.174.67\n90.163.132.67\n90.161.204.178\n90.161.140.133\n90.160.60.166\n90.160.60.162\n90.160.60.156\n90.160.60.154\n90.160.136.117\n90.160.105.117\n90.158.200.15\n90.154.63.26\n90.154.124.189\n90.151.106.86\n90.150.224.94\n90.150.180.71\n90.150.16.56\n90.115.109.242\n9.9.9.9\n9.9.9.13\n9.9.9.12\n9.9.9.11\n9.9.9.10\n89.91.15.9\n89.47.58.30\n89.45.183.165\n89.43.33.100\n89.43.16.202\n89.42.28.193\n89.42.219.139\n89.42.219.106\n89.42.218.22\n89.42.218.20\n89.40.227.132\n89.40.184.9\n89.39.246.235\n89.39.0.125\n89.38.58.131\n89.38.139.180\n89.37.108.2\n89.35.91.201\n89.35.117.216\n89.33.238.214\n89.32.32.32\n89.31.33.207\n89.29.229.12\n89.28.65.201\n89.28.12.62\n89.26.62.250\n89.26.124.93\n89.26.115.34\n89.252.129.2\n89.251.59.190\n89.251.146.145\n89.250.27.165\n89.250.27.162\n89.250.213.174\n89.250.197.225\n89.250.193.23\n89.250.185.137\n89.25.83.84\n89.25.247.114\n89.25.240.230\n89.25.190.187\n89.25.183.149\n89.248.196.6\n89.247.227.57\n89.246.181.158\n89.244.135.203\n89.24.22.210\n89.24.21.237\n89.24.206.253\n89.239.69.44\n89.238.255.150\n89.238.246.6\n89.238.206.66\n89.236.235.54\n89.236.106.156\n89.234.141.66\n89.233.118.207\n89.232.194.185\n89.232.194.184\n89.232.156.238\n89.232.144.82\n89.232.134.178\n89.231.26.73\n89.231.11.170\n89.228.9.42\n89.222.216.104\n89.222.200.210\n89.222.168.18\n89.222.168.162\n89.221.247.15\n89.221.160.202\n89.22.66.217\n89.22.66.209\n89.22.55.179\n89.22.54.83\n89.22.54.136\n89.22.182.5\n89.22.174.177\n89.22.17.167\n89.22.166.122\n89.22.103.79\n89.218.142.170\n89.216.62.4\n89.216.40.254\n89.216.39.214\n89.216.35.131\n89.216.27.28\n89.216.25.76\n89.216.118.84\n89.216.118.100\n89.216.116.23\n89.216.114.121\n89.216.107.221\n89.216.107.102\n89.216.103.45\n89.216.103.191\n89.215.246.3\n89.212.52.44\n89.212.4.181\n89.21.204.117\n89.208.74.74\n89.208.34.12\n89.208.115.14\n89.207.68.206\n89.207.66.38\n89.207.66.174\n89.207.219.73\n89.202.181.139\n89.201.3.8\n89.201.137.2\n89.20.45.88\n89.20.45.22\n89.20.42.122\n89.20.200.142\n89.190.66.2\n89.190.65.200\n89.190.48.201\n89.190.253.60\n89.19.178.21\n89.19.174.179\n89.19.14.82\n89.189.185.67\n89.189.180.151\n89.189.152.147\n89.189.132.22\n89.189.128.3\n89.189.10.50\n89.188.170.40\n89.188.126.31\n89.188.124.178\n89.188.117.36\n89.187.43.146\n89.187.129.97\n89.186.17.222\n89.186.11.171\n89.186.11.169\n89.186.11.168\n89.185.94.144\n89.185.93.88\n89.185.93.238\n89.185.93.143\n89.185.93.131\n89.185.75.83\n89.185.75.117\n89.185.121.250\n89.18.44.47\n89.179.78.108\n89.179.242.179\n89.175.90.58\n89.175.5.69\n89.175.4.66\n89.175.23.236\n89.175.224.214\n89.175.218.191\n89.175.205.42\n89.175.193.150\n89.175.123.174\n89.175.116.90\n89.175.115.74\n89.174.71.249\n89.174.53.66\n89.174.39.102\n89.17.54.132\n89.17.54.131\n89.165.142.251\n89.163.155.202\n89.154.1.233\n89.151.167.214\n89.151.139.149\n89.151.137.246\n89.151.134.157\n89.151.133.30\n89.148.55.251\n89.147.252.172\n89.147.205.66\n89.147.204.226\n89.147.203.186\n89.147.200.35\n89.145.240.121\n89.145.240.120\n89.145.220.205\n89.144.19.55\n89.143.244.210\n89.143.228.230\n89.143.12.246\n89.140.186.3\n89.135.52.29\n89.135.247.130\n89.134.183.233\n89.134.183.229\n89.134.150.125\n89.133.95.173\n89.133.95.169\n89.133.95.163\n89.133.8.25\n89.133.217.138\n89.133.217.137\n89.132.179.89\n89.121.250.206\n89.113.112.4\n89.111.245.17\n89.111.205.26\n89.111.112.10\n89.109.54.73\n89.109.54.251\n89.109.54.171\n89.109.41.125\n89.109.40.32\n89.109.34.95\n89.109.34.207\n89.109.255.92\n89.109.238.209\n89.109.237.52\n89.109.232.83\n89.109.22.129\n89.109.13.45\n89.109.1.202\n89.108.93.9\n89.108.122.128\n89.108.120.212\n89.108.118.228\n89.108.109.72\n89.108.108.208\n89.108.108.131\n89.107.210.249\n89.107.125.18\n89.107.122.68\n89.104.102.252\n89.100.164.115\n88.99.201.228\n88.97.71.154\n88.87.181.244\n88.87.139.12\n88.86.80.161\n88.86.126.179\n88.86.116.45\n88.85.160.175\n88.84.222.101\n88.84.213.98\n88.80.187.145\n88.80.113.55\n88.80.113.35\n88.30.53.40\n88.30.40.21\n88.30.33.64\n88.30.12.135\n88.28.202.213\n88.28.201.36\n88.28.198.59\n88.221.163.91\n88.221.163.90\n88.221.163.79\n88.221.163.67\n88.221.163.65\n88.221.163.61\n88.221.163.52\n88.221.163.45\n88.221.163.42\n88.221.163.4\n88.221.163.39\n88.221.163.37\n88.221.163.33\n88.221.163.32\n88.221.163.28\n88.221.163.255\n88.221.163.240\n88.221.163.24\n88.221.163.239\n88.221.163.238\n88.221.163.235\n88.221.163.230\n88.221.163.228\n88.221.163.227\n88.221.163.220\n88.221.163.22\n88.221.163.207\n88.221.163.205\n88.221.163.204\n88.221.163.203\n88.221.163.200\n88.221.163.196\n88.221.163.193\n88.221.163.190\n88.221.163.156\n88.221.163.146\n88.221.163.141\n88.221.163.129\n88.221.163.127\n88.221.163.120\n88.221.163.109\n88.221.162.94\n88.221.162.72\n88.221.162.66\n88.221.162.55\n88.221.162.37\n88.221.162.33\n88.221.162.32\n88.221.162.28\n88.221.162.27\n88.221.162.253\n88.221.162.233\n88.221.162.231\n88.221.162.229\n88.221.162.228\n88.221.162.223\n88.221.162.222\n88.221.162.204\n88.221.162.203\n88.221.162.199\n88.221.162.196\n88.221.162.194\n88.221.162.193\n88.221.162.191\n88.221.162.18\n88.221.162.179\n88.221.162.172\n88.221.162.157\n88.221.162.153\n88.221.162.146\n88.221.162.141\n88.221.162.140\n88.221.162.14\n88.221.162.122\n88.221.162.101\n88.221.162.0\n88.220.66.252\n88.220.134.11\n88.216.116.47\n88.214.176.182\n88.210.29.61\n88.208.244.225\n88.208.212.37\n88.208.192.73\n88.205.234.250\n88.200.204.5\n88.200.135.94\n88.199.63.137\n88.198.92.222\n88.198.45.136\n88.157.98.214\n88.157.68.26\n88.157.226.242\n88.157.154.134\n88.157.148.18\n88.157.103.191\n88.156.167.50\n88.156.167.34\n88.156.164.210\n88.156.164.122\n88.150.229.18\n88.149.212.184\n88.149.205.195\n88.149.203.57\n88.148.19.98\n88.147.210.10\n88.147.189.85\n88.147.188.243\n88.147.146.27\n88.147.142.131\n88.140.102.107\n88.135.187.88\n88.135.187.80\n88.135.187.70\n88.135.187.68\n88.135.187.66\n88.135.187.64\n88.135.187.62\n88.135.187.59\n88.135.187.39\n88.135.187.3\n88.135.187.231\n88.135.187.14\n88.135.187.120\n88.133.216.180\n88.132.48.28\n88.130.189.222\n88.130.169.13\n88.119.95.68\n88.119.94.177\n88.119.87.88\n88.119.249.83\n88.119.203.210\n88.119.203.196\n88.119.189.16\n88.119.189.110\n88.119.185.209\n88.119.153.69\n88.119.143.195\n88.119.142.115\n88.119.136.7\n88.119.135.155\n88.116.60.98\n88.116.159.130\n88.116.117.118\n87.98.254.244\n87.98.184.129\n87.98.167.47\n87.98.165.97\n87.98.153.70\n87.98.141.221\n87.98.137.178\n87.98.134.58\n87.98.128.51\n87.97.60.156\n87.76.14.207\n87.76.11.24\n87.76.1.77\n87.62.97.71\n87.61.108.250\n87.56.54.35\n87.54.6.134\n87.54.39.142\n87.49.54.222\n87.48.141.126\n87.27.112.23\n87.255.27.168\n87.255.13.196\n87.255.11.36\n87.255.0.242\n87.253.77.111\n87.252.169.6\n87.251.254.116\n87.251.125.156\n87.251.100.100\n87.250.61.31\n87.249.8.246\n87.249.8.245\n87.249.51.90\n87.249.34.186\n87.249.10.110\n87.249.10.108\n87.247.68.60\n87.246.232.231\n87.246.232.229\n87.245.23.57\n87.245.172.166\n87.244.9.206\n87.244.9.204\n87.244.225.200\n87.244.225.197\n87.244.16.6\n87.242.131.238\n87.241.174.184\n87.241.140.133\n87.239.246.167\n87.239.128.25\n87.238.232.158\n87.238.210.155\n87.238.187.6\n87.238.187.5\n87.237.42.29\n87.237.236.154\n87.237.212.36\n87.236.233.117\n87.236.232.5\n87.235.254.129\n87.234.200.113\n87.229.99.1\n87.229.85.250\n87.229.238.241\n87.229.232.219\n87.228.230.243\n87.226.222.210\n87.225.111.250\n87.225.109.218\n87.224.37.77\n87.224.138.249\n87.213.72.41\n87.213.68.86\n87.213.68.130\n87.213.16.123\n87.213.100.113\n87.204.28.12\n87.204.158.27\n87.201.133.14\n87.197.176.58\n87.197.175.186\n87.197.128.229\n87.197.127.219\n87.197.114.194\n87.193.62.211\n87.193.220.18\n87.193.184.254\n87.140.52.172\n87.139.53.21\n87.129.62.99\n87.123.215.162\n87.123.213.137\n87.121.157.130\n87.117.8.47\n87.117.6.229\n87.117.45.162\n87.117.38.34\n87.117.25.95\n87.117.176.149\n87.116.28.8\n87.105.251.234\n87.103.198.142\n86.96.197.235\n86.65.9.129\n86.63.79.174\n86.63.69.86\n86.63.216.70\n86.63.181.75\n86.63.125.7\n86.63.124.78\n86.63.124.46\n86.57.236.90\n86.57.198.13\n86.49.188.146\n86.48.27.73\n86.47.80.46\n86.47.80.38\n86.43.125.181\n86.35.6.75\n86.35.6.74\n86.32.3.225\n86.32.120.135\n86.32.120.134\n86.32.120.133\n86.188.131.209\n86.127.67.242\n86.126.7.188\n86.125.39.49\n86.124.63.76\n86.124.61.214\n86.123.161.217\n86.122.94.69\n86.122.61.3\n86.122.55.7\n86.122.48.169\n86.122.28.141\n86.122.185.167\n86.121.221.240\n86.120.45.162\n86.120.155.37\n86.120.115.227\n86.110.30.24\n86.109.195.190\n86.107.76.135\n86.107.237.94\n86.107.197.206\n86.107.187.184\n86.106.9.201\n86.102.89.26\n86.102.57.190\n86.102.49.170\n86.102.182.10\n86.102.157.118\n86.102.116.54\n86.101.76.5\n86.101.76.1\n86.101.57.229\n86.100.63.150\n85.95.169.250\n85.95.168.122\n85.94.179.243\n85.94.179.20\n85.93.46.25\n85.93.43.178\n85.90.160.69\n85.90.160.238\n85.9.133.77\n85.9.129.38\n85.9.129.36\n85.9.128.229\n85.89.169.24\n85.88.213.221\n85.88.213.199\n85.8.42.33\n85.72.141.81\n85.62.89.32\n85.62.5.74\n85.62.34.221\n85.62.209.5\n85.62.190.161\n85.62.110.170\n85.61.75.220\n85.60.12.49\n85.58.120.134\n85.53.144.232\n85.51.224.115\n85.51.202.225\n85.51.13.115\n85.50.252.66\n85.50.124.34\n85.31.250.103\n85.30.24.11\n85.30.235.216\n85.30.214.16\n85.30.195.133\n85.28.166.179\n85.27.252.136\n85.27.249.19\n85.26.239.136\n85.26.236.33\n85.26.230.60\n85.26.227.200\n85.26.175.138\n85.255.161.120\n85.255.160.106\n85.25.194.140\n85.24.222.227\n85.238.35.29\n85.238.106.185\n85.238.100.178\n85.237.62.128\n85.237.61.88\n85.237.61.86\n85.237.54.68\n85.237.46.168\n85.237.43.89\n85.237.43.237\n85.237.33.65\n85.236.26.130\n85.236.163.74\n85.235.62.212\n85.235.59.11\n85.235.49.25\n85.235.237.9\n85.235.197.66\n85.235.170.130\n85.235.167.178\n85.234.143.236\n85.234.128.209\n85.234.122.73\n85.234.10.120\n85.222.94.42\n85.222.68.162\n85.222.191.214\n85.222.111.74\n85.222.104.150\n85.221.249.126\n85.221.238.146\n85.221.211.26\n85.221.196.198\n85.221.191.177\n85.221.172.30\n85.221.172.18\n85.221.162.46\n85.220.213.165\n85.22.58.63\n85.22.147.21\n85.217.207.230\n85.217.158.4\n85.215.89.8\n85.215.212.48\n85.215.208.231\n85.215.204.9\n85.215.169.96\n85.215.167.110\n85.215.165.82\n85.215.163.63\n85.215.118.202\n85.214.96.146\n85.214.88.66\n85.214.86.130\n85.214.84.167\n85.214.71.38\n85.214.60.94\n85.214.52.216\n85.214.252.174\n85.214.24.14\n85.214.225.217\n85.214.217.89\n85.214.214.223\n85.214.205.60\n85.214.163.21\n85.214.152.133\n85.214.133.14\n85.214.130.83\n85.214.128.36\n85.214.121.235\n85.214.107.212\n85.214.107.154\n85.21.235.183\n85.21.210.86\n85.21.144.107\n85.209.89.231\n85.209.124.82\n85.209.124.182\n85.206.69.149\n85.206.44.91\n85.206.44.78\n85.206.44.68\n85.206.28.132\n85.206.27.22\n85.206.25.100\n85.206.161.70\n85.206.12.136\n85.204.172.66\n85.203.37.2\n85.203.37.1\n85.202.4.174\n85.202.236.50\n85.202.13.79\n85.200.209.58\n85.198.247.2\n85.195.99.211\n85.195.86.247\n85.195.75.106\n85.195.233.252\n85.195.226.210\n85.194.70.174\n85.194.70.173\n85.194.245.75\n85.193.195.73\n85.192.34.191\n85.192.166.185\n85.192.134.38\n85.19.64.212\n85.187.97.75\n85.187.87.204\n85.187.42.39\n85.187.42.112\n85.187.224.74\n85.187.221.8\n85.187.202.75\n85.187.202.45\n85.187.183.107\n85.187.10.222\n85.183.150.165\n85.18.102.42\n85.175.46.130\n85.175.46.122\n85.175.4.212\n85.175.227.77\n85.175.111.150\n85.173.252.9\n85.173.252.39\n85.173.252.16\n85.173.252.14\n85.173.246.147\n85.173.245.32\n85.173.244.203\n85.173.244.123\n85.173.114.248\n85.172.96.75\n85.172.67.34\n85.172.190.146\n85.172.189.154\n85.172.15.126\n85.172.12.190\n85.172.11.139\n85.172.11.115\n85.172.105.63\n85.172.1.34\n85.169.94.218\n85.169.120.6\n85.163.40.146\n85.163.138.114\n85.159.211.160\n85.159.110.163\n85.152.8.29\n85.15.189.108\n85.15.176.243\n85.15.140.68\n85.146.233.162\n85.146.204.98\n85.143.250.146\n85.143.24.62\n85.143.207.42\n85.143.206.18\n85.143.177.66\n85.143.164.154\n85.143.104.195\n85.140.36.44\n85.140.127.182\n85.14.5.203\n85.14.121.2\n85.14.100.154\n85.132.85.85\n85.132.8.70\n85.132.179.206\n85.132.12.178\n85.132.110.243\n85.132.110.193\n85.132.110.152\n85.132.110.126\n85.12.32.49\n85.119.74.82\n85.119.44.134\n85.117.63.10\n85.117.62.190\n85.117.36.140\n85.116.125.177\n85.116.106.42\n85.115.130.4\n85.114.55.238\n85.114.40.50\n85.113.9.73\n85.113.7.94\n85.113.7.225\n85.113.6.113\n85.113.26.54\n85.113.24.209\n85.113.219.162\n85.113.141.159\n85.11.126.108\n85.11.126.105\n85.11.125.123\n84.96.26.139\n84.96.26.129\n84.95.251.42\n84.95.207.132\n84.94.193.66\n84.92.240.109\n84.79.235.2\n84.7.212.177\n84.55.163.147\n84.54.64.35\n84.54.234.98\n84.54.226.50\n84.54.222.125\n84.54.131.65\n84.54.130.98\n84.54.115.40\n84.54.115.253\n84.54.115.248\n84.53.243.78\n84.53.239.236\n84.53.217.83\n84.53.206.212\n84.53.206.210\n84.53.201.130\n84.52.118.82\n84.47.118.5\n84.47.118.21\n84.46.91.66\n84.43.207.80\n84.43.207.18\n84.42.50.126\n84.42.124.162\n84.41.105.242\n84.40.91.18\n84.40.106.218\n84.38.95.223\n84.33.97.60\n84.33.95.44\n84.33.86.63\n84.255.30.153\n84.255.255.191\n84.255.244.10\n84.255.237.64\n84.255.173.210\n84.254.63.214\n84.254.54.243\n84.254.51.145\n84.254.40.4\n84.253.60.42\n84.253.52.126\n84.253.140.132\n84.248.207.134\n84.247.233.18\n84.247.225.173\n84.245.81.62\n84.245.80.52\n84.243.56.254\n84.239.39.125\n84.236.142.130\n84.233.182.251\n84.232.73.171\n84.232.69.179\n84.232.61.2\n84.232.101.210\n84.23.33.186\n84.22.63.117\n84.22.58.134\n84.22.51.168\n84.22.47.218\n84.22.46.238\n84.22.46.163\n84.22.46.162\n84.22.43.34\n84.22.43.190\n84.22.40.29\n84.22.158.239\n84.22.154.182\n84.22.139.144\n84.22.139.104\n84.21.227.234\n84.205.98.5\n84.205.98.130\n84.205.24.55\n84.204.8.164\n84.204.41.194\n84.204.40.166\n84.204.40.14\n84.203.162.227\n84.201.165.116\n84.201.138.148\n84.200.70.40\n84.200.69.80\n84.20.68.210\n84.20.37.78\n84.199.93.50\n84.199.239.165\n84.19.90.72\n84.17.232.22\n84.15.57.196\n84.15.45.178\n84.15.104.40\n84.14.48.246\n84.14.219.62\n84.14.115.173\n84.1.26.208\n83.99.195.157\n83.98.38.147\n83.97.105.48\n83.96.104.7\n83.87.202.7\n83.85.40.128\n83.71.132.188\n83.69.248.59\n83.69.216.149\n83.69.193.2\n83.69.10.10\n83.68.83.76\n83.48.80.205\n83.48.48.80\n83.48.43.148\n83.48.103.9\n83.246.141.45\n83.244.182.72\n83.244.182.58\n83.243.37.53\n83.243.33.204\n83.242.250.110\n83.242.104.195\n83.242.104.151\n83.240.244.121\n83.239.77.86\n83.239.75.46\n83.239.72.114\n83.239.62.214\n83.239.57.166\n83.239.56.218\n83.239.229.237\n83.239.229.164\n83.239.20.238\n83.239.117.66\n83.239.108.174\n83.235.34.161\n83.235.210.35\n83.235.105.234\n83.234.160.138\n83.233.23.208\n83.230.38.148\n83.229.85.77\n83.229.82.70\n83.229.82.151\n83.229.72.62\n83.229.68.13\n83.229.5.227\n83.229.5.216\n83.229.2.224\n83.228.107.193\n83.228.106.130\n83.223.146.120\n83.221.208.66\n83.221.207.123\n83.221.202.188\n83.220.53.218\n83.220.168.61\n83.220.162.43\n83.219.238.103\n83.219.1.220\n83.218.69.232\n83.212.12.67\n83.211.85.27\n83.211.248.38\n83.211.204.182\n83.206.50.49\n83.19.198.69\n83.174.235.52\n83.174.227.213\n83.174.226.183\n83.174.225.95\n83.174.224.244\n83.174.223.134\n83.174.220.149\n83.174.213.133\n83.174.212.101\n83.174.208.218\n83.173.203.174\n83.172.181.67\n83.172.181.64\n83.172.181.252\n83.172.181.251\n83.171.99.165\n83.171.88.30\n83.171.70.185\n83.171.127.235\n83.171.123.93\n83.171.114.10\n83.171.113.239\n83.171.113.17\n83.171.113.14\n83.171.110.201\n83.171.107.214\n83.171.106.177\n83.17.231.90\n83.169.247.254\n83.169.247.130\n83.169.217.22\n83.167.221.46\n83.167.101.179\n83.151.232.66\n83.151.14.204\n83.15.45.148\n83.149.125.95\n83.145.86.8\n83.145.86.7\n83.145.153.112\n83.145.133.2\n83.144.119.70\n83.143.8.249\n83.142.194.92\n83.142.189.68\n83.142.189.67\n83.142.127.39\n83.142.126.151\n83.142.116.148\n83.142.105.67\n83.14.136.180\n83.139.173.210\n83.137.41.9\n83.137.41.8\n83.137.218.126\n83.136.95.13\n83.136.95.12\n83.135.16.46\n83.13.214.38\n83.13.105.212\n83.110.139.58\n83.1.88.194\n83.1.221.110\n83.1.216.170\n83.1.215.1\n83.1.213.1\n83.1.191.242\n83.1.184.198\n83.1.108.26\n83.1.102.78\n83.0.57.50\n83.0.124.106\n83.0.114.235\n82.98.169.6\n82.97.198.50\n82.97.198.122\n82.97.19.9\n82.96.65.2\n82.96.64.2\n82.81.243.65\n82.80.232.24\n82.80.219.220\n82.80.207.94\n82.80.207.92\n82.79.60.33\n82.79.151.215\n82.78.94.101\n82.78.175.232\n82.78.168.19\n82.77.63.193\n82.77.48.243\n82.77.28.143\n82.77.137.111\n82.77.100.255\n82.76.32.233\n82.69.88.225\n82.69.53.72\n82.68.135.30\n82.66.221.168\n82.66.200.96\n82.66.181.223\n82.66.112.123\n82.65.161.62\n82.65.126.5\n82.64.73.173\n82.64.52.182\n82.64.35.106\n82.64.26.100\n82.64.206.162\n82.64.199.74\n82.64.136.152\n82.64.134.25\n82.64.128.90\n82.64.108.41\n82.3.55.75\n82.223.43.222\n82.223.210.127\n82.223.149.133\n82.223.107.139\n82.222.49.18\n82.220.99.203\n82.214.84.133\n82.214.162.54\n82.214.135.118\n82.214.100.214\n82.213.32.29\n82.210.34.38\n82.209.223.144\n82.209.203.56\n82.208.72.214\n82.208.146.164\n82.208.137.137\n82.204.207.198\n82.204.202.66\n82.204.200.246\n82.204.199.7\n82.204.198.50\n82.204.197.153\n82.204.175.198\n82.204.163.234\n82.204.138.46\n82.202.247.47\n82.202.215.178\n82.200.29.130\n82.198.78.140\n82.196.13.196\n82.195.16.29\n82.195.16.13\n82.194.244.140\n82.194.19.99\n82.194.19.147\n82.194.17.111\n82.193.241.125\n82.193.211.186\n82.192.169.38\n82.179.33.70\n82.177.14.166\n82.177.113.62\n82.165.76.185\n82.165.65.153\n82.165.26.30\n82.163.117.181\n82.162.58.236\n82.162.34.19\n82.152.37.235\n82.151.97.230\n82.151.90.1\n82.151.70.84\n82.151.127.188\n82.151.122.19\n82.151.115.85\n82.151.114.180\n82.151.114.140\n82.151.114.130\n82.149.209.86\n82.149.203.82\n82.148.69.71\n82.146.40.201\n82.146.26.2\n82.144.139.147\n82.143.81.146\n82.142.67.86\n82.142.156.186\n82.142.135.213\n82.140.97.198\n82.140.114.98\n82.140.114.174\n82.139.9.113\n82.138.82.214\n82.138.35.46\n82.138.31.164\n82.138.117.102\n82.137.27.130\n82.137.245.41\n82.135.26.24\n82.135.255.112\n82.135.215.108\n82.135.203.178\n82.135.197.108\n82.135.137.106\n82.135.112.130\n82.134.43.3\n82.127.85.3\n82.127.6.40\n82.119.154.40\n82.119.145.126\n82.118.243.190\n82.118.243.189\n82.118.129.158\n82.117.67.57\n82.117.219.138\n82.117.212.246\n82.117.211.18\n82.117.201.6\n82.117.196.42\n82.116.54.164\n82.116.39.182\n82.116.37.214\n82.115.76.160\n82.115.131.47\n82.114.85.25\n82.114.79.146\n82.114.67.150\n82.114.56.37\n82.114.240.34\n82.114.240.195\n82.114.240.112\n82.114.240.101\n82.112.49.97\n82.112.48.94\n82.112.48.182\n82.112.44.81\n82.112.40.153\n82.112.189.177\n82.103.129.240\n82.102.44.137\n82.102.41.117\n82.102.188.168\n82.102.147.34\n82.100.87.86\n81.95.207.16\n81.95.132.94\n81.95.130.202\n81.95.121.214\n81.95.113.2\n81.94.65.196\n81.94.164.237\n81.94.152.38\n81.94.134.205\n81.93.99.230\n81.93.89.116\n81.93.71.254\n81.93.185.19\n81.93.141.162\n81.9.198.217\n81.9.198.206\n81.9.198.202\n81.9.198.12\n81.9.198.118\n81.9.122.9\n81.89.79.245\n81.88.220.59\n81.88.197.178\n81.88.118.201\n81.83.4.18\n81.83.13.159\n81.82.232.125\n81.82.201.45\n81.7.94.177\n81.7.94.169\n81.7.16.249\n81.7.16.240\n81.7.104.226\n81.63.169.142\n81.62.235.182\n81.5.20.254\n81.5.1.54\n81.45.78.156\n81.45.43.133\n81.45.174.150\n81.45.138.117\n81.43.68.191\n81.42.248.139\n81.42.230.57\n81.4.149.154\n81.4.128.130\n81.4.126.70\n81.4.104.170\n81.4.100.121\n81.30.254.133\n81.30.219.213\n81.30.217.41\n81.30.213.34\n81.30.212.189\n81.30.209.107\n81.30.200.197\n81.30.197.178\n81.30.177.172\n81.3.27.54\n81.29.139.76\n81.29.132.3\n81.28.173.204\n81.28.164.44\n81.27.217.7\n81.27.212.130\n81.27.162.100\n81.26.23.193\n81.26.23.192\n81.255.9.173\n81.250.247.144\n81.250.234.100\n81.248.42.55\n81.248.237.119\n81.248.236.204\n81.248.1.164\n81.247.30.57\n81.246.99.1\n81.246.95.66\n81.246.88.101\n81.24.82.71\n81.24.122.118\n81.23.193.28\n81.23.180.70\n81.23.178.14\n81.23.153.203\n81.23.124.190\n81.23.120.122\n81.221.24.181\n81.221.123.173\n81.22.26.6\n81.219.64.202\n81.218.223.79\n81.218.223.76\n81.218.223.12\n81.218.223.112\n81.218.222.1\n81.216.9.94\n81.216.9.110\n81.211.98.234\n81.211.72.146\n81.211.5.194\n81.211.115.142\n81.21.82.86\n81.21.104.102\n81.201.51.140\n81.201.125.236\n81.200.28.216\n81.200.251.111\n81.200.18.145\n81.20.87.21\n81.20.82.131\n81.20.203.120\n81.199.16.1\n81.199.137.188\n81.198.81.165\n81.198.65.163\n81.198.189.160\n81.196.169.226\n81.192.193.134\n81.19.62.62\n81.183.253.121\n81.183.248.213\n81.183.234.98\n81.183.232.240\n81.183.230.143\n81.183.227.40\n81.183.224.48\n81.183.223.33\n81.183.223.225\n81.183.216.211\n81.183.215.141\n81.183.212.194\n81.183.211.172\n81.182.250.40\n81.182.246.69\n81.182.245.238\n81.182.244.148\n81.182.243.24\n81.181.130.105\n81.181.130.101\n81.18.218.218\n81.177.48.216\n81.177.255.67\n81.177.25.15\n81.177.166.162\n81.177.136.80\n81.176.229.165\n81.174.11.225\n81.173.126.239\n81.171.5.222\n81.170.150.234\n81.17.94.238\n81.17.232.196\n81.17.232.194\n81.169.244.26\n81.169.239.124\n81.169.233.218\n81.169.226.26\n81.169.214.46\n81.169.201.113\n81.169.179.146\n81.169.174.224\n81.169.172.226\n81.169.136.222\n81.169.135.209\n81.167.4.243\n81.167.0.163\n81.163.61.183\n81.163.61.170\n81.162.208.105\n81.162.111.11\n81.16.9.2\n81.16.8.46\n81.16.18.228\n81.150.98.206\n81.150.164.193\n81.150.126.65\n81.15.197.242\n81.15.180.110\n81.15.162.218\n81.15.133.90\n81.149.151.43\n81.147.49.247\n81.147.49.246\n81.147.49.229\n81.144.94.247\n81.144.94.246\n81.144.94.245\n81.133.149.153\n81.130.148.128\n81.130.132.247\n81.128.152.229\n81.0.77.6\n81.0.56.180\n81.0.220.118\n80.97.254.218\n80.96.4.194\n80.96.177.217\n80.94.225.100\n80.94.22.200\n80.93.37.202\n80.93.254.202\n80.93.251.162\n80.92.211.80\n80.91.22.151\n80.91.17.230\n80.91.17.200\n80.91.17.101\n80.90.132.107\n80.89.196.225\n80.89.145.83\n80.87.39.34\n80.87.33.242\n80.87.187.82\n80.87.146.13\n80.87.144.80\n80.87.144.184\n80.87.144.17\n80.87.144.111\n80.86.231.136\n80.86.230.58\n80.86.157.100\n80.83.239.194\n80.83.137.135\n80.82.55.71\n80.82.36.158\n80.82.20.42\n80.81.232.202\n80.81.2.50\n80.81.147.82\n80.80.98.8\n80.80.98.68\n80.80.218.218\n80.80.127.135\n80.80.108.12\n80.80.104.7\n80.79.245.138\n80.79.179.2\n80.79.176.2\n80.78.134.11\n80.78.132.79\n80.78.132.65\n80.77.53.58\n80.76.229.62\n80.76.184.6\n80.73.90.54\n80.73.88.21\n80.73.71.4\n80.73.66.90\n80.73.206.205\n80.72.64.99\n80.72.64.108\n80.72.30.35\n80.72.30.129\n80.72.179.29\n80.72.179.141\n80.72.178.140\n80.72.178.139\n80.72.17.248\n80.70.99.200\n80.67.6.98\n80.67.213.14\n80.67.105.163\n80.66.156.98\n80.65.83.104\n80.65.80.230\n80.64.162.43\n80.58.157.223\n80.58.155.32\n80.55.205.229\n80.54.51.106\n80.54.26.254\n80.54.219.186\n80.54.119.66\n80.53.75.34\n80.53.158.122\n80.52.60.2\n80.50.138.234\n80.50.129.22\n80.50.128.70\n80.48.33.33\n80.48.212.83\n80.48.178.106\n80.48.173.212\n80.48.126.12\n80.27.3.5\n80.27.3.4\n80.27.3.17\n80.27.2.228\n80.27.2.222\n80.27.2.221\n80.27.0.158\n80.254.123.70\n80.253.17.46\n80.252.177.227\n80.252.177.226\n80.252.156.90\n80.252.145.154\n80.252.145.132\n80.252.145.130\n80.252.144.228\n80.252.140.198\n80.250.210.218\n80.250.174.254\n80.249.81.151\n80.249.3.204\n80.249.188.53\n80.249.168.172\n80.248.57.28\n80.248.55.14\n80.248.51.229\n80.248.155.94\n80.247.35.20\n80.246.23.3\n80.246.15.4\n80.245.54.153\n80.245.226.219\n80.244.174.192\n80.242.237.178\n80.242.196.55\n80.241.248.162\n80.241.241.226\n80.241.208.210\n80.240.26.135\n80.240.253.76\n80.240.216.153\n80.240.21.21\n80.234.37.46\n80.234.32.136\n80.233.254.186\n80.233.254.181\n80.233.149.67\n80.232.240.91\n80.232.239.44\n80.232.219.35\n80.232.217.137\n80.229.31.179\n80.228.76.154\n80.228.231.48\n80.228.231.122\n80.228.226.132\n80.227.67.106\n80.227.38.26\n80.220.131.128\n80.211.51.57\n80.211.45.12\n80.211.36.243\n80.211.21.112\n80.211.208.74\n80.211.179.15\n80.209.71.197\n80.209.176.170\n80.194.118.138\n80.186.145.164\n80.179.255.238\n80.179.183.9\n80.179.160.8\n80.178.255.122\n80.178.170.176\n80.158.47.193\n80.156.145.201\n80.155.181.190\n80.154.108.233\n80.153.45.254\n80.152.176.239\n80.151.70.192\n80.151.54.36\n80.151.237.57\n80.151.224.157\n80.151.165.101\n80.151.11.49\n80.150.109.197\n80.15.204.212\n80.15.18.130\n80.15.128.201\n80.15.123.60\n80.147.95.112\n80.147.47.252\n80.147.198.229\n80.147.187.89\n80.147.181.115\n80.147.16.148\n80.147.151.133\n80.147.145.111\n80.14.71.233\n80.14.67.41\n80.13.98.191\n80.13.86.74\n80.13.34.124\n80.13.229.72\n80.13.138.211\n80.13.108.61\n80.125.41.162\n80.125.21.2\n80.125.0.246\n80.123.196.122\n80.118.230.106\n80.118.142.178\n80.113.19.90\n80.110.42.36\n80.11.47.121\n80.11.245.33\n8.8.8.8\n8.8.50.1\n8.8.4.4\n8.47.17.249\n8.43.56.34\n8.42.68.81\n8.42.68.209\n8.42.146.74\n8.41.124.193\n8.38.73.60\n8.38.18.201\n8.36.152.1\n8.36.139.129\n8.36.139.1\n8.35.35.35\n8.34.34.34\n8.33.239.244\n8.33.239.235\n8.33.239.234\n8.33.1.11\n8.33.1.10\n8.30.39.40\n8.30.39.39\n8.30.39.37\n8.30.39.35\n8.30.36.94\n8.30.192.171\n8.30.101.125\n8.30.101.124\n8.30.101.123\n8.30.101.118\n8.29.64.122\n8.29.3.77\n8.29.3.76\n8.29.3.75\n8.29.3.74\n8.29.3.67\n8.29.3.66\n8.29.3.37\n8.29.3.36\n8.29.3.34\n8.29.3.228\n8.29.3.227\n8.29.3.226\n8.29.3.221\n8.29.3.219\n8.29.3.213\n8.29.3.211\n8.29.3.140\n8.29.3.139\n8.29.3.138\n8.29.3.133\n8.29.3.132\n8.29.3.131\n8.29.2.139\n8.29.2.133\n8.29.2.132\n8.29.2.130\n8.28.113.202\n8.28.109.99\n8.28.109.85\n8.28.109.84\n8.28.109.83\n8.28.109.82\n8.28.109.77\n8.28.109.75\n8.28.109.74\n8.28.109.70\n8.28.109.69\n8.28.109.68\n8.28.109.62\n8.28.109.60\n8.28.109.6\n8.28.109.5\n8.28.109.46\n8.28.109.44\n8.28.109.42\n8.28.109.4\n8.28.109.3\n8.28.109.254\n8.28.109.252\n8.28.109.251\n8.28.109.247\n8.28.109.246\n8.28.109.244\n8.28.109.237\n8.28.109.235\n8.28.109.233\n8.28.109.231\n8.28.109.230\n8.28.109.229\n8.28.109.228\n8.28.109.226\n8.28.109.13\n8.28.109.126\n8.28.109.125\n8.28.109.124\n8.28.109.123\n8.28.109.122\n8.28.109.117\n8.28.109.116\n8.28.109.115\n8.28.109.114\n8.28.109.110\n8.28.109.11\n8.28.109.109\n8.28.109.106\n8.28.109.102\n8.28.109.101\n8.28.109.10\n8.26.56.99\n8.26.56.97\n8.26.56.96\n8.26.56.95\n8.26.56.94\n8.26.56.93\n8.26.56.92\n8.26.56.90\n8.26.56.89\n8.26.56.88\n8.26.56.87\n8.26.56.86\n8.26.56.85\n8.26.56.84\n8.26.56.83\n8.26.56.82\n8.26.56.80\n8.26.56.8\n8.26.56.78\n8.26.56.77\n8.26.56.74\n8.26.56.73\n8.26.56.72\n8.26.56.70\n8.26.56.7\n8.26.56.68\n8.26.56.65\n8.26.56.64\n8.26.56.63\n8.26.56.62\n8.26.56.6\n8.26.56.58\n8.26.56.57\n8.26.56.56\n8.26.56.54\n8.26.56.53\n8.26.56.52\n8.26.56.51\n8.26.56.48\n8.26.56.46\n8.26.56.45\n8.26.56.44\n8.26.56.42\n8.26.56.41\n8.26.56.40\n8.26.56.39\n8.26.56.38\n8.26.56.37\n8.26.56.36\n8.26.56.35\n8.26.56.34\n8.26.56.33\n8.26.56.31\n8.26.56.30\n8.26.56.3\n8.26.56.29\n8.26.56.28\n8.26.56.27\n8.26.56.26\n8.26.56.255\n8.26.56.252\n8.26.56.250\n8.26.56.25\n8.26.56.249\n8.26.56.247\n8.26.56.246\n8.26.56.245\n8.26.56.244\n8.26.56.243\n8.26.56.242\n8.26.56.241\n8.26.56.240\n8.26.56.24\n8.26.56.238\n8.26.56.237\n8.26.56.236\n8.26.56.233\n8.26.56.232\n8.26.56.230\n8.26.56.23\n8.26.56.228\n8.26.56.227\n8.26.56.226\n8.26.56.223\n8.26.56.222\n8.26.56.221\n8.26.56.22\n8.26.56.219\n8.26.56.218\n8.26.56.217\n8.26.56.216\n8.26.56.214\n8.26.56.213\n8.26.56.212\n8.26.56.211\n8.26.56.210\n8.26.56.209\n8.26.56.208\n8.26.56.206\n8.26.56.205\n8.26.56.204\n8.26.56.203\n8.26.56.202\n8.26.56.201\n8.26.56.20\n8.26.56.199\n8.26.56.198\n8.26.56.197\n8.26.56.196\n8.26.56.195\n8.26.56.194\n8.26.56.193\n8.26.56.192\n8.26.56.190\n8.26.56.19\n8.26.56.186\n8.26.56.184\n8.26.56.183\n8.26.56.182\n8.26.56.180\n8.26.56.18\n8.26.56.179\n8.26.56.178\n8.26.56.175\n8.26.56.174\n8.26.56.173\n8.26.56.171\n8.26.56.17\n8.26.56.169\n8.26.56.168\n8.26.56.167\n8.26.56.164\n8.26.56.163\n8.26.56.162\n8.26.56.161\n8.26.56.160\n8.26.56.16\n8.26.56.159\n8.26.56.158\n8.26.56.157\n8.26.56.156\n8.26.56.155\n8.26.56.154\n8.26.56.153\n8.26.56.151\n8.26.56.150\n8.26.56.15\n8.26.56.149\n8.26.56.148\n8.26.56.147\n8.26.56.146\n8.26.56.144\n8.26.56.143\n8.26.56.142\n8.26.56.141\n8.26.56.139\n8.26.56.137\n8.26.56.136\n8.26.56.135\n8.26.56.134\n8.26.56.133\n8.26.56.131\n8.26.56.13\n8.26.56.129\n8.26.56.127\n8.26.56.126\n8.26.56.125\n8.26.56.124\n8.26.56.123\n8.26.56.122\n8.26.56.12\n8.26.56.119\n8.26.56.118\n8.26.56.117\n8.26.56.116\n8.26.56.115\n8.26.56.114\n8.26.56.113\n8.26.56.112\n8.26.56.111\n8.26.56.110\n8.26.56.11\n8.26.56.109\n8.26.56.108\n8.26.56.107\n8.26.56.106\n8.26.56.105\n8.26.56.104\n8.26.56.103\n8.26.56.102\n8.26.56.101\n8.26.56.100\n8.26.56.10\n8.26.56.0\n8.25.185.132\n8.25.185.131\n8.25.184.254\n8.25.184.253\n8.25.184.252\n8.25.184.251\n8.25.184.107\n8.243.126.9\n8.243.126.19\n8.243.126.18\n8.243.126.14\n8.243.126.127\n8.243.126.126\n8.243.126.123\n8.243.126.122\n8.243.126.120\n8.243.126.11\n8.243.126.10\n8.243.113.189\n8.242.73.84\n8.242.6.242\n8.242.201.150\n8.242.153.171\n8.242.153.169\n8.242.153.166\n8.242.153.165\n8.242.153.162\n8.242.144.203\n8.24.104.109\n8.23.82.186\n8.224.34.74\n8.215.30.242\n8.213.0.112\n8.213.0.111\n8.212.10.42\n8.210.22.68\n8.209.66.67\n8.209.2.129\n8.208.2.65\n8.20.37.37\n8.20.37.35\n8.20.247.98\n8.20.247.97\n8.20.247.95\n8.20.247.94\n8.20.247.93\n8.20.247.92\n8.20.247.91\n8.20.247.90\n8.20.247.9\n8.20.247.89\n8.20.247.88\n8.20.247.87\n8.20.247.86\n8.20.247.85\n8.20.247.81\n8.20.247.80\n8.20.247.8\n8.20.247.79\n8.20.247.78\n8.20.247.77\n8.20.247.76\n8.20.247.74\n8.20.247.72\n8.20.247.71\n8.20.247.70\n8.20.247.7\n8.20.247.69\n8.20.247.67\n8.20.247.66\n8.20.247.65\n8.20.247.64\n8.20.247.63\n8.20.247.62\n8.20.247.61\n8.20.247.60\n8.20.247.6\n8.20.247.59\n8.20.247.58\n8.20.247.57\n8.20.247.56\n8.20.247.55\n8.20.247.54\n8.20.247.53\n8.20.247.52\n8.20.247.51\n8.20.247.5\n8.20.247.49\n8.20.247.47\n8.20.247.45\n8.20.247.43\n8.20.247.42\n8.20.247.41\n8.20.247.4\n8.20.247.39\n8.20.247.38\n8.20.247.37\n8.20.247.36\n8.20.247.35\n8.20.247.34\n8.20.247.33\n8.20.247.31\n8.20.247.30\n8.20.247.3\n8.20.247.26\n8.20.247.254\n8.20.247.251\n8.20.247.250\n8.20.247.25\n8.20.247.249\n8.20.247.247\n8.20.247.246\n8.20.247.245\n8.20.247.242\n8.20.247.241\n8.20.247.240\n8.20.247.239\n8.20.247.238\n8.20.247.236\n8.20.247.235\n8.20.247.234\n8.20.247.233\n8.20.247.231\n8.20.247.230\n8.20.247.23\n8.20.247.227\n8.20.247.225\n8.20.247.224\n8.20.247.223\n8.20.247.222\n8.20.247.221\n8.20.247.220\n8.20.247.219\n8.20.247.218\n8.20.247.217\n8.20.247.215\n8.20.247.214\n8.20.247.213\n8.20.247.212\n8.20.247.211\n8.20.247.210\n8.20.247.21\n8.20.247.207\n8.20.247.205\n8.20.247.202\n8.20.247.201\n8.20.247.200\n8.20.247.20\n8.20.247.2\n8.20.247.199\n8.20.247.197\n8.20.247.196\n8.20.247.193\n8.20.247.192\n8.20.247.191\n8.20.247.190\n8.20.247.19\n8.20.247.189\n8.20.247.188\n8.20.247.187\n8.20.247.185\n8.20.247.184\n8.20.247.183\n8.20.247.182\n8.20.247.18\n8.20.247.179\n8.20.247.178\n8.20.247.177\n8.20.247.176\n8.20.247.175\n8.20.247.174\n8.20.247.172\n8.20.247.171\n8.20.247.170\n8.20.247.17\n8.20.247.169\n8.20.247.168\n8.20.247.166\n8.20.247.165\n8.20.247.164\n8.20.247.163\n8.20.247.161\n8.20.247.16\n8.20.247.159\n8.20.247.157\n8.20.247.155\n8.20.247.154\n8.20.247.153\n8.20.247.152\n8.20.247.150\n8.20.247.149\n8.20.247.148\n8.20.247.146\n8.20.247.142\n8.20.247.141\n8.20.247.140\n8.20.247.139\n8.20.247.138\n8.20.247.137\n8.20.247.134\n8.20.247.133\n8.20.247.132\n8.20.247.13\n8.20.247.129\n8.20.247.128\n8.20.247.127\n8.20.247.126\n8.20.247.125\n8.20.247.124\n8.20.247.121\n8.20.247.120\n8.20.247.12\n8.20.247.119\n8.20.247.118\n8.20.247.115\n8.20.247.113\n8.20.247.112\n8.20.247.110\n8.20.247.11\n8.20.247.109\n8.20.247.108\n8.20.247.107\n8.20.247.106\n8.20.247.105\n8.20.247.103\n8.20.247.102\n8.20.247.101\n8.20.247.10\n8.20.247.0\n8.20.207.157\n8.20.207.156\n8.20.207.155\n8.20.207.154\n8.20.207.150\n8.20.207.149\n8.20.207.148\n8.20.207.146\n8.20.205.206\n8.20.205.205\n8.20.205.198\n8.20.205.196\n8.20.205.194\n8.19.63.58\n8.19.225.254\n8.18.4.20\n8.18.4.19\n8.17.40.98\n8.17.40.109\n8.17.40.108\n8.17.40.107\n8.17.40.106\n8.17.40.102\n8.17.40.101\n8.17.40.100\n8.17.30.61\n8.14.63.94\n8.14.63.93\n8.14.63.91\n8.14.63.90\n8.14.63.85\n8.14.63.82\n8.14.62.70\n8.14.62.69\n8.14.62.68\n8.14.62.67\n8.14.172.177\n8.0.7.0\n8.0.6.128\n8.0.41.16\n8.0.11.0\n79.98.222.23\n79.98.147.146\n79.98.138.6\n79.77.56.123\n79.61.138.153\n79.190.241.168\n79.188.180.106\n79.187.201.181\n79.187.201.179\n79.175.7.7\n79.174.52.122\n79.174.36.83\n79.174.187.207\n79.173.96.37\n79.173.81.152\n79.173.251.155\n79.170.252.236\n79.170.252.235\n79.170.252.233\n79.170.252.226\n79.170.189.235\n79.170.184.201\n79.170.160.62\n79.163.66.142\n79.163.65.188\n79.162.243.32\n79.162.211.34\n79.162.192.189\n79.161.9.164\n79.161.154.90\n79.143.72.246\n79.143.177.243\n79.143.160.90\n79.143.148.8\n79.142.84.242\n79.142.50.30\n79.141.82.250\n79.141.81.250\n79.140.29.116\n79.140.22.126\n79.140.190.191\n79.140.19.164\n79.140.180.219\n79.139.31.188\n79.138.160.93\n79.137.66.87\n79.137.66.85\n79.137.66.229\n79.137.190.174\n79.137.181.102\n79.137.110.166\n79.136.81.112\n79.136.81.111\n79.136.18.131\n79.135.61.9\n79.135.61.7\n79.135.61.11\n79.134.56.10\n79.134.54.190\n79.133.62.62\n79.131.108.227\n79.129.93.46\n79.129.62.57\n79.129.52.33\n79.129.35.6\n79.129.204.120\n79.129.100.212\n79.129.1.120\n79.125.163.222\n79.125.163.149\n79.124.50.245\n79.120.79.54\n79.120.79.194\n79.120.7.126\n79.120.54.186\n79.120.33.122\n79.120.32.170\n79.110.205.107\n79.110.204.58\n79.110.203.165\n79.110.199.229\n79.110.198.178\n79.106.24.13\n79.106.231.170\n79.106.172.70\n79.104.8.10\n79.104.30.170\n79.104.3.158\n79.104.26.58\n79.104.18.118\n79.104.17.30\n79.101.62.46\n79.101.46.218\n79.101.39.65\n79.101.38.164\n79.0.73.35\n78.96.119.60\n78.9.110.22\n78.88.188.98\n78.88.188.206\n78.85.41.38\n78.85.33.152\n78.85.33.129\n78.85.32.234\n78.85.241.59\n78.85.24.193\n78.85.22.141\n78.85.21.175\n78.83.183.104\n78.83.11.170\n78.80.47.119\n78.46.80.82\n78.46.173.177\n78.41.171.147\n78.40.107.141\n78.36.4.51\n78.36.203.181\n78.36.202.75\n78.36.196.87\n78.31.85.18\n78.31.67.99\n78.31.64.193\n78.31.59.12\n78.31.150.6\n78.31.100.237\n78.31.100.115\n78.30.249.249\n78.30.243.152\n78.30.217.153\n78.30.197.31\n78.30.194.253\n78.30.194.13\n78.29.28.10\n78.29.19.18\n78.28.158.220\n78.26.148.136\n78.25.86.148\n78.25.155.61\n78.25.155.56\n78.25.155.101\n78.25.128.130\n78.199.59.111\n78.159.157.89\n78.157.163.69\n78.157.162.147\n78.156.255.42\n78.155.252.220\n78.155.23.143\n78.155.172.11\n78.153.224.243\n78.153.138.70\n78.153.137.234\n78.142.85.182\n78.142.37.74\n78.142.234.75\n78.142.234.4\n78.142.233.245\n78.142.233.163\n78.142.232.70\n78.142.232.35\n78.140.59.25\n78.140.56.107\n78.140.4.85\n78.140.27.177\n78.140.24.168\n78.140.205.14\n78.140.12.87\n78.140.10.3\n78.136.108.192\n78.134.68.101\n78.134.63.198\n78.134.212.20\n78.134.210.176\n78.132.142.171\n78.131.88.3\n78.131.87.208\n78.131.12.155\n78.131.12.126\n78.131.11.248\n78.131.11.118\n78.130.65.38\n78.130.38.68\n78.130.38.64\n78.130.231.66\n78.130.147.3\n78.130.147.134\n78.130.147.109\n78.129.243.107\n78.129.243.105\n78.129.231.117\n78.129.138.112\n78.111.144.27\n78.111.121.102\n78.111.115.198\n78.110.160.53\n78.110.157.178\n78.110.151.199\n78.109.98.132\n78.109.191.90\n78.109.131.76\n78.108.77.75\n78.108.70.133\n78.108.164.58\n78.108.164.125\n78.108.160.207\n78.108.102.212\n78.108.101.23\n78.107.63.165\n78.107.31.203\n78.107.30.33\n78.107.235.83\n78.107.234.187\n77.95.52.251\n77.94.97.150\n77.94.205.70\n77.94.124.18\n77.93.193.202\n77.92.245.50\n77.92.138.166\n77.91.245.76\n77.91.21.106\n77.89.4.114\n77.89.204.186\n77.89.180.166\n77.88.8.88\n77.88.8.8\n77.88.8.7\n77.88.8.3\n77.88.8.2\n77.88.8.1\n77.88.105.215\n77.87.86.196\n77.87.85.126\n77.87.103.181\n77.87.100.52\n77.85.204.242\n77.85.195.234\n77.85.194.207\n77.85.170.99\n77.79.248.43\n77.79.248.249\n77.79.227.107\n77.79.191.49\n77.79.184.131\n77.79.134.94\n77.79.133.19\n77.79.132.7\n77.78.205.175\n77.78.201.59\n77.78.201.103\n77.78.196.3\n77.78.159.210\n77.78.154.9\n77.78.153.198\n77.78.148.30\n77.77.24.10\n77.77.215.98\n77.76.190.71\n77.76.188.247\n77.76.174.200\n77.76.148.204\n77.75.93.86\n77.75.8.229\n77.75.35.139\n77.75.35.138\n77.74.31.171\n77.73.41.121\n77.72.195.10\n77.71.9.243\n77.71.69.6\n77.71.66.144\n77.71.62.125\n77.71.54.253\n77.71.28.137\n77.71.21.188\n77.69.37.70\n77.69.141.243\n77.68.94.230\n77.68.79.87\n77.68.240.102\n77.68.240.101\n77.68.23.47\n77.68.127.184\n77.66.201.215\n77.66.179.73\n77.66.178.208\n77.66.177.235\n77.66.176.135\n77.65.6.210\n77.65.52.106\n77.65.46.150\n77.65.43.187\n77.65.36.222\n77.65.19.202\n77.65.117.250\n77.55.224.248\n77.55.208.167\n77.51.209.243\n77.51.209.226\n77.51.204.184\n77.51.203.241\n77.51.190.77\n77.51.186.203\n77.50.152.126\n77.50.132.62\n77.48.45.234\n77.48.176.3\n77.48.159.46\n77.46.152.99\n77.46.136.160\n77.45.125.84\n77.45.111.74\n77.45.111.51\n77.45.110.84\n77.44.72.68\n77.43.73.228\n77.43.58.56\n77.42.253.91\n77.42.220.110\n77.41.161.202\n77.41.159.250\n77.41.155.86\n77.41.150.30\n77.40.51.241\n77.40.49.9\n77.39.99.247\n77.39.63.143\n77.39.233.134\n77.39.229.161\n77.38.204.210\n77.37.196.136\n77.37.164.143\n77.37.158.108\n77.37.146.43\n77.34.74.185\n77.34.49.120\n77.34.2.94\n77.32.126.208\n77.28.96.25\n77.28.114.147\n77.26.214.15\n77.26.196.60\n77.246.57.132\n77.246.236.114\n77.245.114.45\n77.245.112.174\n77.244.76.153\n77.244.223.130\n77.243.98.99\n77.243.4.154\n77.243.112.230\n77.242.96.158\n77.242.186.206\n77.242.18.69\n77.242.142.123\n77.242.138.149\n77.242.108.167\n77.242.107.172\n77.242.107.110\n77.238.209.242\n77.238.129.116\n77.237.8.175\n77.237.15.126\n77.236.65.19\n77.235.8.83\n77.235.29.159\n77.235.27.18\n77.235.19.147\n77.233.6.226\n77.233.192.110\n77.233.10.104\n77.232.26.104\n77.232.167.89\n77.232.167.27\n77.232.167.181\n77.232.167.127\n77.232.162.90\n77.232.160.249\n77.232.160.229\n77.231.171.44\n77.230.66.172\n77.230.19.121\n77.222.170.103\n77.221.90.86\n77.220.187.242\n77.220.136.22\n77.198.214.82\n77.158.164.186\n77.158.163.134\n77.158.145.234\n77.156.224.84\n77.137.26.185\n77.137.26.184\n77.129.200.109\n77.129.181.101\n77.129.160.137\n77.121.33.221\n77.109.21.186\n77.108.97.105\n77.108.81.236\n77.108.30.218\n77.106.201.102\n77.106.181.58\n77.105.0.17\n77.104.252.137\n77.104.247.101\n77.104.247.100\n76.9.245.205\n76.85.68.107\n76.80.58.102\n76.80.221.14\n76.79.232.163\n76.76.2.5\n76.76.2.44\n76.76.2.4\n76.76.2.38\n76.76.2.37\n76.76.2.36\n76.76.2.35\n76.76.2.34\n76.76.2.33\n76.76.2.32\n76.76.2.2\n76.76.2.11\n76.76.2.1\n76.76.2.0\n76.76.10.5\n76.76.10.4\n76.76.10.38\n76.76.10.37\n76.76.10.36\n76.76.10.35\n76.76.10.34\n76.76.10.33\n76.76.10.32\n76.76.10.2\n76.76.10.155\n76.76.10.1\n76.76.10.0\n76.72.141.20\n76.240.86.154\n76.190.97.130\n76.181.207.75\n76.16.127.159\n76.144.87.168\n76.122.251.76\n75.60.238.51\n75.2.53.153\n75.190.205.136\n75.150.23.1\n75.150.197.154\n75.148.63.169\n75.148.33.61\n75.146.225.151\n75.144.168.25\n75.127.62.190\n75.10.63.140\n75.10.57.38\n74.95.17.85\n74.93.8.236\n74.93.61.233\n74.9.229.243\n74.87.93.226\n74.87.71.130\n74.87.171.129\n74.85.157.195\n74.84.156.35\n74.82.42.42\n74.75.115.158\n74.63.199.2\n74.62.175.3\n74.220.250.149\n74.220.244.105\n74.219.86.186\n74.214.190.148\n74.214.183.94\n74.208.27.110\n74.208.229.185\n74.208.217.104\n74.208.207.175\n74.208.191.19\n74.203.184.12\n74.202.142.162\n74.174.200.5\n74.143.124.121\n74.142.66.246\n74.142.233.195\n74.124.54.13\n74.123.230.1\n74.122.68.33\n74.122.134.108\n74.121.124.153\n74.120.41.197\n74.120.30.97\n74.120.29.129\n74.120.249.24\n74.120.24.97\n74.120.24.129\n74.117.241.12\n74.114.234.146\n74.113.40.2\n74.113.101.251\n74.112.48.13\n74.112.164.55\n73.76.100.239\n73.232.202.74\n73.213.55.199\n73.198.65.77\n73.181.42.153\n73.130.2.237\n73.121.146.21\n73.111.103.128\n73.100.143.241\n72.95.12.221\n72.69.161.7\n72.45.194.226\n72.45.186.19\n72.45.131.66\n72.44.21.239\n72.44.21.223\n72.28.117.69\n72.28.117.68\n72.255.245.68\n72.255.242.63\n72.255.226.226\n72.253.176.39\n72.24.115.38\n72.237.212.21\n72.237.212.20\n72.234.100.183\n72.223.30.166\n72.215.205.36\n72.211.20.43\n72.211.20.35\n72.20.142.226\n72.19.3.8\n72.19.20.12\n72.19.20.10\n72.18.200.5\n72.18.200.12\n72.167.54.236\n72.167.42.99\n72.167.39.214\n72.167.39.167\n72.14.186.159\n72.14.11.161\n72.131.206.67\n72.129.184.111\n72.128.132.211\n72.10.3.46\n71.93.47.214\n71.9.227.214\n71.86.3.190\n71.82.235.38\n71.78.93.66\n71.78.178.237\n71.76.82.147\n71.67.219.165\n71.67.195.27\n71.67.154.107\n71.66.18.58\n71.6.132.177\n71.6.132.173\n71.45.244.59\n71.41.254.5\n71.41.252.75\n71.4.247.50\n71.4.247.100\n71.19.251.34\n71.167.28.213\n71.162.144.157\n71.14.165.4\n71.13.68.78\n71.10.184.57\n70.97.122.111\n70.95.157.116\n70.94.34.23\n70.94.151.84\n70.91.107.93\n70.90.215.209\n70.89.219.49\n70.88.50.197\n70.63.90.202\n70.61.254.130\n70.61.240.4\n70.44.71.55\n70.35.134.178\n70.232.178.32\n70.184.213.142\n70.180.24.59\n70.180.24.58\n70.117.56.250\n70.114.18.4\n69.75.213.219\n69.70.21.150\n69.67.97.2\n69.67.97.18\n69.64.54.93\n69.64.54.66\n69.63.73.234\n69.63.64.12\n69.60.160.203\n69.60.160.196\n69.46.63.34\n69.30.174.72\n69.28.54.203\n69.229.5.233\n69.229.1.41\n69.194.131.163\n69.179.102.1\n69.169.190.211\n69.167.171.210\n69.163.32.8\n69.131.56.8\n69.13.210.208\n69.11.6.154\n69.10.42.239\n69.1.129.3\n68.89.132.250\n68.234.119.76\n68.225.2.46\n68.188.22.22\n68.183.179.157\n68.177.59.111\n68.175.51.49\n68.171.221.3\n68.171.15.196\n68.171.15.195\n68.15.188.99\n68.132.214.45\n67.97.247.52\n67.97.247.50\n67.79.47.3\n67.79.250.226\n67.78.98.178\n67.72.109.56\n67.60.177.71\n67.242.6.250\n67.231.37.113\n67.227.132.89\n67.225.137.83\n67.222.123.6\n67.219.112.206\n67.212.188.107\n67.210.146.50\n67.21.80.164\n67.21.172.197\n67.207.87.107\n67.206.237.78\n67.206.161.69\n67.204.8.226\n67.203.4.92\n67.200.141.228\n67.20.140.233\n67.192.111.202\n67.17.215.133\n67.17.215.132\n67.148.21.250\n67.135.161.240\n67.134.197.97\n67.134.102.128\n67.132.197.48\n67.130.9.121\n67.130.66.225\n67.128.201.121\n67.128.146.151\n67.128.146.144\n66.93.87.2\n66.92.64.2\n66.92.224.2\n66.92.159.2\n66.85.129.172\n66.85.121.14\n66.82.4.8\n66.82.4.12\n66.76.212.177\n66.45.254.11\n66.42.98.203\n66.28.0.61\n66.28.0.45\n66.251.35.130\n66.249.99.130\n66.246.119.145\n66.244.65.197\n66.243.10.180\n66.23.227.204\n66.223.231.66\n66.219.255.23\n66.216.47.29\n66.212.60.103\n66.209.73.153\n66.207.46.201\n66.206.167.2\n66.206.166.2\n66.199.10.93\n66.199.10.92\n66.199.10.80\n66.198.220.119\n66.198.193.78\n66.193.38.100\n66.193.240.4\n66.181.166.164\n66.175.212.65\n66.175.203.202\n66.175.146.133\n66.173.0.3\n66.163.0.173\n66.163.0.161\n66.162.85.79\n66.162.113.119\n66.161.231.242\n66.155.216.122\n66.135.47.183\n66.111.127.99\n66.11.107.97\n66.109.229.6\n66.109.229.4\n65.75.74.124\n65.75.74.123\n65.56.156.249\n65.56.156.242\n65.49.37.195\n65.39.166.201\n65.39.166.199\n65.39.166.198\n65.39.166.197\n65.39.166.134\n65.39.166.132\n65.39.166.131\n65.255.197.147\n65.246.64.217\n65.246.64.210\n65.244.0.14\n65.220.42.38\n65.220.15.2\n65.203.131.152\n65.199.61.96\n65.184.247.241\n65.172.241.13\n65.158.43.95\n65.158.116.106\n65.157.28.247\n65.155.70.65\n65.155.237.199\n65.155.232.151\n65.155.226.137\n65.155.222.14\n65.155.206.25\n65.155.188.22\n65.155.159.33\n65.155.15.167\n65.155.149.95\n65.155.105.152\n65.154.177.78\n65.154.130.142\n65.153.59.41\n65.152.254.167\n65.144.5.126\n65.144.155.7\n65.144.141.168\n65.144.134.146\n65.144.127.56\n65.141.190.234\n65.141.175.23\n65.141.101.136\n65.140.26.130\n65.140.231.106\n65.140.174.97\n65.133.71.9\n65.133.11.222\n65.133.11.219\n65.132.219.239\n65.127.10.47\n65.124.240.88\n65.123.108.7\n65.123.108.6\n65.121.81.162\n65.115.176.233\n65.115.175.241\n65.114.81.96\n65.114.195.96\n65.113.9.39\n65.112.207.1\n65.112.204.79\n65.109.93.205\n65.108.81.207\n65.108.195.182\n65.108.192.36\n64.90.83.57\n64.9.50.67\n64.81.79.2\n64.81.45.2\n64.81.159.2\n64.81.127.2\n64.80.255.251\n64.80.255.240\n64.80.203.194\n64.76.23.84\n64.76.163.165\n64.72.212.20\n64.6.65.6\n64.6.64.6\n64.6.128.62\n64.6.128.59\n64.50.242.202\n64.50.241.167\n64.50.241.166\n64.50.232.30\n64.50.232.2\n64.5.130.2\n64.45.190.98\n64.45.185.87\n64.31.5.1\n64.29.77.253\n64.237.97.69\n64.237.97.185\n64.237.68.238\n64.235.48.80\n64.233.219.99\n64.233.217.2\n64.233.207.2\n64.233.207.16\n64.233.206.99\n64.227.2.211\n64.223.246.26\n64.222.176.152\n64.215.98.149\n64.215.98.148\n64.212.76.178\n64.212.106.85\n64.212.106.84\n64.201.233.59\n64.20.37.186\n64.191.214.29\n64.19.105.113\n64.183.6.54\n64.17.20.1\n64.16.44.102\n64.157.242.118\n64.156.223.254\n64.146.144.50\n64.146.142.186\n64.145.73.4\n64.139.97.3\n64.132.94.250\n64.132.113.16\n64.130.151.75\n64.129.67.113\n64.129.104.46\n64.121.65.187\n64.119.80.100\n64.119.128.166\n64.107.45.5\n63.73.11.2\n63.47.189.218\n63.45.211.2\n63.45.209.164\n63.45.164.170\n63.42.55.88\n63.41.58.251\n63.40.220.21\n63.40.18.84\n63.40.15.230\n63.250.57.141\n63.246.224.30\n63.239.222.155\n63.238.99.81\n63.237.240.226\n63.234.98.153\n63.234.229.208\n63.232.89.67\n63.232.110.166\n63.226.4.97\n63.226.4.1\n63.225.136.120\n63.218.191.114\n63.215.98.144\n63.209.139.112\n63.197.115.100\n63.156.24.246\n63.151.93.198\n63.151.67.7\n63.151.57.183\n63.149.93.185\n63.149.147.193\n63.148.180.7\n63.146.221.254\n63.146.216.50\n63.145.180.22\n63.143.98.90\n62.96.215.140\n62.94.243.1\n62.93.33.21\n62.91.19.67\n62.89.15.179\n62.89.15.136\n62.89.15.131\n62.77.232.226\n62.77.122.168\n62.76.90.254\n62.76.76.62\n62.76.62.76\n62.76.30.148\n62.74.229.107\n62.74.216.213\n62.74.209.241\n62.64.89.42\n62.55.249.49\n62.55.249.17\n62.55.232.201\n62.55.207.217\n62.54.21.85\n62.54.20.179\n62.54.20.107\n62.48.163.166\n62.38.34.118\n62.36.9.107\n62.32.70.134\n62.29.140.29\n62.28.68.66\n62.28.181.242\n62.28.12.234\n62.28.102.188\n62.255.208.69\n62.245.225.55\n62.245.225.225\n62.233.128.21\n62.233.128.18\n62.233.128.17\n62.232.138.94\n62.231.172.178\n62.23.35.22\n62.23.170.194\n62.225.15.253\n62.221.253.107\n62.219.67.76\n62.217.77.45\n62.214.3.13\n62.210.137.184\n62.210.136.158\n62.210.122.43\n62.210.111.63\n62.201.217.194\n62.20.83.209\n62.2.213.120\n62.193.72.151\n62.182.223.11\n62.176.126.3\n62.173.181.238\n62.171.167.67\n62.168.30.102\n62.168.248.82\n62.168.242.110\n62.168.116.44\n62.161.245.137\n62.159.231.11\n62.157.169.104\n62.154.160.3\n62.153.165.107\n62.153.122.2\n62.152.53.218\n62.150.77.106\n62.150.254.82\n62.149.23.91\n62.149.183.45\n62.149.132.2\n62.149.128.4\n62.149.128.2\n62.146.202.2\n62.146.2.48\n62.140.239.1\n62.14.234.233\n62.122.99.198\n62.122.102.98\n62.12.114.10\n62.117.91.149\n62.112.116.86\n62.106.59.147\n62.105.17.234\n61.98.131.212\n61.97.13.38\n61.93.197.46\n61.85.98.198\n61.83.186.56\n61.83.152.140\n61.82.49.33\n61.82.39.88\n61.82.108.138\n61.8.255.8\n61.8.0.113\n61.79.82.241\n61.79.146.73\n61.76.83.69\n61.72.206.211\n61.7.197.1\n61.58.64.6\n61.5.134.35\n61.42.23.140\n61.41.17.6\n61.41.17.16\n61.39.168.66\n61.35.33.5\n61.34.243.102\n61.32.254.2\n61.255.135.199\n61.254.39.30\n61.251.111.227\n61.250.196.36\n61.244.186.189\n61.244.186.188\n61.244.14.62\n61.238.97.254\n61.222.77.165\n61.221.26.25\n61.219.97.68\n61.219.41.109\n61.219.165.25\n61.213.137.58\n61.213.119.145\n61.206.159.194\n61.206.115.16\n61.199.203.240\n61.199.193.74\n61.193.129.2\n61.19.42.34\n61.19.108.46\n61.127.14.130\n61.120.9.219\n61.111.22.3\n61.111.22.2\n61.108.103.134\n61.100.13.50\n61.1.106.16\n60.56.215.73\n60.45.155.205\n60.32.232.49\n60.32.220.90\n60.32.160.57\n60.32.149.50\n60.32.107.162\n60.251.238.89\n60.250.41.183\n60.250.235.122\n60.250.159.76\n60.250.134.27\n60.250.134.25\n60.249.212.149\n60.249.174.18\n60.249.11.234\n60.248.84.140\n60.248.55.151\n60.248.242.133\n60.248.225.123\n60.248.191.21\n60.248.191.20\n60.248.142.203\n60.248.142.199\n60.248.10.164\n60.244.121.98\n60.242.246.234\n60.240.176.183\n59.9.198.232\n59.31.156.154\n59.28.197.231\n59.28.162.183\n59.28.140.6\n59.27.124.209\n59.2.117.160\n59.190.126.235\n59.188.10.22\n59.18.227.35\n59.18.227.32\n59.18.227.14\n59.159.170.34\n59.158.8.83\n59.152.238.147\n59.152.206.146\n59.148.14.33\n59.144.177.217\n59.127.80.104\n59.127.40.140\n59.127.38.136\n59.127.244.123\n59.125.99.157\n59.125.83.54\n59.125.7.96\n59.125.43.223\n59.125.246.99\n59.125.229.34\n59.125.209.82\n59.125.155.62\n59.124.72.210\n59.124.69.19\n59.124.62.3\n59.124.6.82\n59.124.50.36\n59.124.26.210\n59.124.229.165\n59.124.17.180\n59.124.141.174\n59.124.122.196\n59.120.84.217\n59.120.52.200\n59.120.186.158\n59.120.143.151\n59.120.141.160\n59.120.125.129\n59.120.1.176\n59.120.1.175\n59.12.193.91\n59.12.146.87\n59.12.136.7\n59.103.231.38\n59.10.116.10\n59.1.58.227\n58.96.20.1\n58.82.152.44\n58.79.26.85\n58.72.252.65\n58.71.19.113\n58.71.125.1\n58.69.9.25\n58.69.88.193\n58.69.78.37\n58.69.7.42\n58.69.41.17\n58.69.29.58\n58.69.224.103\n58.69.21.74\n58.69.174.39\n58.69.17.105\n58.69.125.152\n58.27.196.114\n58.26.163.10\n58.26.121.130\n58.229.253.16\n58.228.61.2\n58.227.193.227\n58.191.61.42\n58.185.89.201\n58.185.71.113\n58.185.58.129\n58.185.54.17\n58.185.165.125\n58.181.52.190\n58.181.206.82\n58.180.176.3\n58.177.179.58\n58.177.158.254\n58.162.206.206\n58.147.189.90\n58.138.143.62\n58.137.148.83\n58.120.226.2\n54.94.175.250\n54.37.30.59\n54.252.183.4\n54.251.190.247\n54.214.161.74\n54.174.40.213\n52.6.246.21\n52.3.100.184\n52.29.2.17\n52.24.103.199\n52.233.186.232\n52.23.148.124\n52.229.172.73\n52.171.61.133\n52.119.88.204\n51.91.22.145\n51.91.130.132\n51.91.124.225\n51.83.13.211\n51.79.99.90\n51.79.144.245\n51.77.158.23\n51.75.131.205\n51.68.81.95\n51.68.227.204\n51.68.206.207\n51.68.199.234\n51.68.141.96\n51.68.128.120\n51.38.62.213\n51.38.148.132\n51.38.134.82\n51.38.125.60\n51.38.125.153\n51.255.94.135\n51.255.84.177\n51.255.43.23\n51.255.23.2\n51.255.128.121\n51.255.128.114\n51.254.5.245\n51.250.66.51\n51.210.86.116\n51.210.122.169\n51.178.84.208\n51.178.56.235\n51.178.20.235\n51.159.77.56\n51.15.183.246\n51.15.183.212\n51.15.174.81\n51.11.226.128\n51.104.34.175\n50.86.78.84\n50.78.97.124\n50.78.224.131\n50.78.108.5\n50.77.74.201\n50.76.207.170\n50.65.169.147\n50.49.246.2\n50.47.32.116\n50.45.183.18\n50.29.128.137\n50.28.52.102\n50.27.156.170\n50.249.22.169\n50.247.134.226\n50.246.249.43\n50.242.61.85\n50.237.34.1\n50.237.114.76\n50.236.212.9\n50.235.228.46\n50.235.153.225\n50.235.131.130\n50.234.132.241\n50.234.125.182\n50.231.115.22\n50.230.4.242\n50.229.170.233\n50.226.171.1\n50.226.170.222\n50.225.95.30\n50.225.71.126\n50.223.23.54\n50.223.162.29\n50.223.140.253\n50.220.47.51\n50.220.130.1\n50.218.46.1\n50.217.25.205\n50.217.25.204\n50.217.25.200\n50.215.49.13\n50.215.184.91\n50.213.203.33\n50.208.220.49\n50.207.85.66\n50.207.237.130\n50.206.9.62\n50.206.226.80\n50.206.226.42\n50.204.174.98\n50.204.174.58\n50.203.148.198\n50.198.91.121\n50.194.130.97\n50.192.13.172\n50.175.159.202\n50.170.46.89\n50.168.185.113\n50.125.234.126\n50.117.0.170\n50.115.205.166\n5.96.198.66\n5.9.94.16\n5.9.72.202\n5.9.44.83\n5.89.30.10\n5.83.75.10\n5.8.9.2\n5.79.101.123\n5.63.164.75\n5.63.163.69\n5.63.111.235\n5.63.106.250\n5.61.8.20\n5.61.203.112\n5.59.137.234\n5.58.131.22\n5.53.244.8\n5.53.122.54\n5.45.103.22\n5.42.248.31\n5.39.78.104\n5.39.71.50\n5.39.65.110\n5.39.38.184\n5.32.90.30\n5.32.72.134\n5.32.55.10\n5.32.183.251\n5.32.132.85\n5.28.131.139\n5.28.131.134\n5.255.9.232\n5.255.29.101\n5.255.27.54\n5.255.26.65\n5.255.24.99\n5.255.20.15\n5.255.172.42\n5.255.15.16\n5.255.13.115\n5.255.12.215\n5.255.12.13\n5.255.11.205\n5.254.198.142\n5.254.197.224\n5.254.196.61\n5.253.253.215\n5.253.252.232\n5.253.252.130\n5.253.146.177\n5.252.171.157\n5.252.170.88\n5.252.170.127\n5.249.141.46\n5.23.103.11\n5.227.66.64\n5.226.78.34\n5.21.5.130\n5.21.242.81\n5.21.242.111\n5.21.242.103\n5.21.241.87\n5.21.241.85\n5.206.235.55\n5.200.50.249\n5.200.42.113\n5.200.38.113\n5.2.33.111\n5.2.207.124\n5.2.197.180\n5.2.196.93\n5.199.141.5\n5.199.141.30\n5.199.130.141\n5.196.43.50\n5.196.186.81\n5.189.181.251\n5.189.172.127\n5.189.161.18\n5.189.160.125\n5.189.150.220\n5.189.149.51\n5.189.148.106\n5.189.128.74\n5.188.65.196\n5.188.64.139\n5.188.59.211\n5.188.139.235\n5.188.137.182\n5.187.78.146\n5.185.96.232\n5.185.94.131\n5.185.73.91\n5.185.32.122\n5.185.250.26\n5.185.245.69\n5.185.243.40\n5.185.243.38\n5.185.243.32\n5.185.243.27\n5.185.241.212\n5.185.240.128\n5.185.21.53\n5.185.2.96\n5.181.210.184\n5.180.183.129\n5.180.1.52\n5.178.82.106\n5.178.76.172\n5.178.114.78\n5.175.26.208\n5.172.188.118\n5.17.92.172\n5.17.89.68\n5.164.31.60\n5.164.27.185\n5.164.26.24\n5.161.16.131\n5.161.118.243\n5.158.124.92\n5.158.119.176\n5.154.120.75\n5.152.206.180\n5.151.63.237\n5.151.62.227\n5.149.91.66\n5.149.222.186\n5.149.221.236\n5.149.210.54\n5.149.206.139\n5.149.141.82\n5.148.5.210\n5.148.1.21\n5.143.233.106\n5.141.87.218\n5.141.29.82\n5.140.233.239\n5.140.233.185\n5.140.212.239\n5.140.162.52\n5.135.61.142\n5.135.221.207\n5.135.221.204\n5.135.221.201\n5.135.221.200\n5.135.166.77\n5.135.148.143\n5.135.137.224\n5.135.1.165\n5.134.48.218\n5.134.218.78\n5.130.61.37\n5.129.34.75\n5.128.66.56\n5.128.37.237\n5.128.120.3\n5.11.39.22\n5.11.11.5\n5.11.11.11\n5.104.166.26\n5.102.81.98\n5.101.79.57\n5.101.76.193\n5.101.76.185\n5.101.73.58\n5.101.200.62\n5.101.11.191\n5.100.252.54\n5.100.249.231\n5.10.25.83\n5.10.138.214\n5.1.66.255\n5.1.38.155\n49.50.70.170\n49.255.4.22\n49.255.194.141\n49.254.144.223\n49.254.144.195\n49.248.155.86\n49.248.102.209\n49.248.101.78\n49.231.237.181\n49.231.229.117\n49.229.56.21\n49.229.158.61\n49.229.100.162\n49.212.149.131\n49.156.53.166\n49.143.189.55\n49.1.168.71\n49.0.90.4\n49.0.82.21\n49.0.64.179\n47.57.147.61\n47.49.148.38\n47.48.67.238\n47.47.144.22\n47.44.3.69\n47.254.217.105\n47.253.24.2\n47.207.31.201\n47.206.64.128\n47.181.203.175\n47.180.199.94\n47.176.183.12\n47.176.153.236\n46.8.33.200\n46.8.252.136\n46.8.249.194\n46.8.105.12\n46.55.253.26\n46.55.223.223\n46.55.168.3\n46.47.127.251\n46.45.32.82\n46.45.19.35\n46.44.171.105\n46.44.1.11\n46.44.0.68\n46.42.19.218\n46.42.19.104\n46.40.245.69\n46.40.244.249\n46.40.244.137\n46.40.227.57\n46.40.219.164\n46.40.218.15\n46.40.214.43\n46.40.213.53\n46.40.2.237\n46.40.0.5\n46.4.70.20\n46.4.53.12\n46.37.4.202\n46.36.27.78\n46.30.172.121\n46.29.78.51\n46.29.169.6\n46.29.12.142\n46.254.130.47\n46.249.39.8\n46.246.29.68\n46.245.253.5\n46.243.181.193\n46.243.181.161\n46.243.179.123\n46.242.28.69\n46.242.130.233\n46.238.93.169\n46.235.85.142\n46.234.101.153\n46.233.57.170\n46.231.76.240\n46.231.72.212\n46.228.93.118\n46.227.67.134\n46.227.200.9\n46.226.143.86\n46.226.143.83\n46.221.5.123\n46.22.99.226\n46.216.182.238\n46.21.250.23\n46.21.171.193\n46.21.128.118\n46.199.82.115\n46.199.76.130\n46.196.212.8\n46.19.103.248\n46.188.53.34\n46.188.47.18\n46.188.22.50\n46.185.139.130\n46.183.220.64\n46.182.19.48\n46.174.0.245\n46.172.192.236\n46.171.144.226\n46.167.233.65\n46.166.189.67\n46.165.54.24\n46.160.173.208\n46.16.226.250\n46.16.226.116\n46.149.86.139\n46.148.26.40\n46.148.26.231\n46.140.228.158\n46.13.5.26\n46.107.231.70\n46.107.228.164\n46.101.65.164\n45.90.31.94\n45.90.31.82\n45.90.31.75\n45.90.31.74\n45.90.31.68\n45.90.31.6\n45.90.31.55\n45.90.31.5\n45.90.31.41\n45.90.31.4\n45.90.31.3\n45.90.31.250\n45.90.31.219\n45.90.31.217\n45.90.31.204\n45.90.31.2\n45.90.31.199\n45.90.31.194\n45.90.31.191\n45.90.31.189\n45.90.31.185\n45.90.31.183\n45.90.31.182\n45.90.31.179\n45.90.31.168\n45.90.31.167\n45.90.31.163\n45.90.31.16\n45.90.31.148\n45.90.31.144\n45.90.31.137\n45.90.31.136\n45.90.31.135\n45.90.31.128\n45.90.31.124\n45.90.31.117\n45.90.31.114\n45.90.31.112\n45.90.31.1\n45.90.30.99\n45.90.30.98\n45.90.30.97\n45.90.30.96\n45.90.30.95\n45.90.30.94\n45.90.30.93\n45.90.30.92\n45.90.30.91\n45.90.30.90\n45.90.30.9\n45.90.30.89\n45.90.30.88\n45.90.30.87\n45.90.30.86\n45.90.30.85\n45.90.30.84\n45.90.30.83\n45.90.30.82\n45.90.30.81\n45.90.30.80\n45.90.30.8\n45.90.30.79\n45.90.30.78\n45.90.30.77\n45.90.30.76\n45.90.30.75\n45.90.30.74\n45.90.30.73\n45.90.30.72\n45.90.30.71\n45.90.30.70\n45.90.30.7\n45.90.30.69\n45.90.30.68\n45.90.30.67\n45.90.30.66\n45.90.30.65\n45.90.30.64\n45.90.30.63\n45.90.30.62\n45.90.30.61\n45.90.30.60\n45.90.30.6\n45.90.30.59\n45.90.30.58\n45.90.30.57\n45.90.30.56\n45.90.30.55\n45.90.30.54\n45.90.30.53\n45.90.30.52\n45.90.30.51\n45.90.30.50\n45.90.30.5\n45.90.30.49\n45.90.30.48\n45.90.30.47\n45.90.30.46\n45.90.30.45\n45.90.30.44\n45.90.30.43\n45.90.30.42\n45.90.30.41\n45.90.30.40\n45.90.30.39\n45.90.30.38\n45.90.30.37\n45.90.30.36\n45.90.30.35\n45.90.30.34\n45.90.30.33\n45.90.30.32\n45.90.30.31\n45.90.30.30\n45.90.30.3\n45.90.30.29\n45.90.30.28\n45.90.30.27\n45.90.30.26\n45.90.30.254\n45.90.30.253\n45.90.30.252\n45.90.30.251\n45.90.30.250\n45.90.30.25\n45.90.30.249\n45.90.30.248\n45.90.30.247\n45.90.30.246\n45.90.30.245\n45.90.30.244\n45.90.30.243\n45.90.30.242\n45.90.30.241\n45.90.30.240\n45.90.30.24\n45.90.30.239\n45.90.30.238\n45.90.30.237\n45.90.30.236\n45.90.30.235\n45.90.30.234\n45.90.30.233\n45.90.30.232\n45.90.30.231\n45.90.30.230\n45.90.30.23\n45.90.30.229\n45.90.30.228\n45.90.30.227\n45.90.30.226\n45.90.30.225\n45.90.30.224\n45.90.30.223\n45.90.30.222\n45.90.30.221\n45.90.30.220\n45.90.30.22\n45.90.30.219\n45.90.30.218\n45.90.30.217\n45.90.30.216\n45.90.30.215\n45.90.30.214\n45.90.30.213\n45.90.30.212\n45.90.30.211\n45.90.30.210\n45.90.30.21\n45.90.30.209\n45.90.30.208\n45.90.30.207\n45.90.30.206\n45.90.30.205\n45.90.30.204\n45.90.30.203\n45.90.30.202\n45.90.30.201\n45.90.30.200\n45.90.30.20\n45.90.30.2\n45.90.30.199\n45.90.30.198\n45.90.30.197\n45.90.30.196\n45.90.30.195\n45.90.30.194\n45.90.30.193\n45.90.30.192\n45.90.30.191\n45.90.30.190\n45.90.30.19\n45.90.30.189\n45.90.30.188\n45.90.30.187\n45.90.30.186\n45.90.30.185\n45.90.30.184\n45.90.30.183\n45.90.30.182\n45.90.30.181\n45.90.30.180\n45.90.30.18\n45.90.30.179\n45.90.30.178\n45.90.30.177\n45.90.30.176\n45.90.30.175\n45.90.30.174\n45.90.30.173\n45.90.30.172\n45.90.30.171\n45.90.30.170\n45.90.30.17\n45.90.30.169\n45.90.30.168\n45.90.30.167\n45.90.30.166\n45.90.30.165\n45.90.30.164\n45.90.30.163\n45.90.30.162\n45.90.30.161\n45.90.30.160\n45.90.30.16\n45.90.30.159\n45.90.30.158\n45.90.30.157\n45.90.30.156\n45.90.30.155\n45.90.30.154\n45.90.30.153\n45.90.30.152\n45.90.30.151\n45.90.30.150\n45.90.30.15\n45.90.30.149\n45.90.30.148\n45.90.30.147\n45.90.30.146\n45.90.30.145\n45.90.30.144\n45.90.30.143\n45.90.30.142\n45.90.30.141\n45.90.30.140\n45.90.30.14\n45.90.30.139\n45.90.30.138\n45.90.30.137\n45.90.30.136\n45.90.30.135\n45.90.30.134\n45.90.30.133\n45.90.30.132\n45.90.30.131\n45.90.30.130\n45.90.30.13\n45.90.30.129\n45.90.30.128\n45.90.30.127\n45.90.30.126\n45.90.30.125\n45.90.30.124\n45.90.30.123\n45.90.30.122\n45.90.30.121\n45.90.30.120\n45.90.30.12\n45.90.30.119\n45.90.30.118\n45.90.30.117\n45.90.30.116\n45.90.30.115\n45.90.30.114\n45.90.30.113\n45.90.30.112\n45.90.30.111\n45.90.30.110\n45.90.30.11\n45.90.30.109\n45.90.30.108\n45.90.30.107\n45.90.30.106\n45.90.30.105\n45.90.30.104\n45.90.30.103\n45.90.30.102\n45.90.30.101\n45.90.30.100\n45.90.30.10\n45.90.30.1\n45.90.30.0\n45.90.29.99\n45.90.29.98\n45.90.29.97\n45.90.29.95\n45.90.29.94\n45.90.29.93\n45.90.29.91\n45.90.29.89\n45.90.29.87\n45.90.29.86\n45.90.29.84\n45.90.29.83\n45.90.29.82\n45.90.29.81\n45.90.29.77\n45.90.29.75\n45.90.29.74\n45.90.29.73\n45.90.29.72\n45.90.29.69\n45.90.29.68\n45.90.29.67\n45.90.29.66\n45.90.29.64\n45.90.29.63\n45.90.29.59\n45.90.29.57\n45.90.29.254\n45.90.29.253\n45.90.29.252\n45.90.29.251\n45.90.29.249\n45.90.29.248\n45.90.29.244\n45.90.29.242\n45.90.29.241\n45.90.29.240\n45.90.29.239\n45.90.29.236\n45.90.29.235\n45.90.29.233\n45.90.29.230\n45.90.29.226\n45.90.29.225\n45.90.29.223\n45.90.29.222\n45.90.29.221\n45.90.29.220\n45.90.29.22\n45.90.29.218\n45.90.29.216\n45.90.29.215\n45.90.29.214\n45.90.29.213\n45.90.29.212\n45.90.29.211\n45.90.29.209\n45.90.29.208\n45.90.29.207\n45.90.29.206\n45.90.29.204\n45.90.29.203\n45.90.29.201\n45.90.29.198\n45.90.29.196\n45.90.29.193\n45.90.29.189\n45.90.29.187\n45.90.29.186\n45.90.29.185\n45.90.29.184\n45.90.29.183\n45.90.29.182\n45.90.29.180\n45.90.29.179\n45.90.29.178\n45.90.29.177\n45.90.29.176\n45.90.29.173\n45.90.29.172\n45.90.29.170\n45.90.29.168\n45.90.29.166\n45.90.29.163\n45.90.29.162\n45.90.29.161\n45.90.29.159\n45.90.29.157\n45.90.29.156\n45.90.29.155\n45.90.29.154\n45.90.29.152\n45.90.29.151\n45.90.29.149\n45.90.29.148\n45.90.29.147\n45.90.29.146\n45.90.29.142\n45.90.29.139\n45.90.29.134\n45.90.29.133\n45.90.29.132\n45.90.29.130\n45.90.29.128\n45.90.29.125\n45.90.29.123\n45.90.29.122\n45.90.29.120\n45.90.29.119\n45.90.29.118\n45.90.29.117\n45.90.29.114\n45.90.29.112\n45.90.29.111\n45.90.29.108\n45.90.29.107\n45.90.29.103\n45.90.29.10\n45.90.28.96\n45.90.28.95\n45.90.28.91\n45.90.28.9\n45.90.28.89\n45.90.28.86\n45.90.28.85\n45.90.28.83\n45.90.28.82\n45.90.28.81\n45.90.28.80\n45.90.28.8\n45.90.28.78\n45.90.28.75\n45.90.28.74\n45.90.28.73\n45.90.28.71\n45.90.28.68\n45.90.28.67\n45.90.28.65\n45.90.28.64\n45.90.28.60\n45.90.28.6\n45.90.28.59\n45.90.28.58\n45.90.28.57\n45.90.28.52\n45.90.28.51\n45.90.28.50\n45.90.28.5\n45.90.28.44\n45.90.28.43\n45.90.28.42\n45.90.28.41\n45.90.28.36\n45.90.28.35\n45.90.28.33\n45.90.28.31\n45.90.28.30\n45.90.28.3\n45.90.28.26\n45.90.28.253\n45.90.28.252\n45.90.28.251\n45.90.28.250\n45.90.28.25\n45.90.28.247\n45.90.28.246\n45.90.28.245\n45.90.28.244\n45.90.28.241\n45.90.28.240\n45.90.28.238\n45.90.28.236\n45.90.28.234\n45.90.28.233\n45.90.28.232\n45.90.28.230\n45.90.28.229\n45.90.28.227\n45.90.28.226\n45.90.28.225\n45.90.28.224\n45.90.28.221\n45.90.28.22\n45.90.28.217\n45.90.28.216\n45.90.28.215\n45.90.28.214\n45.90.28.213\n45.90.28.211\n45.90.28.210\n45.90.28.21\n45.90.28.208\n45.90.28.202\n45.90.28.201\n45.90.28.200\n45.90.28.20\n45.90.28.197\n45.90.28.196\n45.90.28.195\n45.90.28.194\n45.90.28.192\n45.90.28.191\n45.90.28.19\n45.90.28.186\n45.90.28.184\n45.90.28.183\n45.90.28.182\n45.90.28.18\n45.90.28.177\n45.90.28.175\n45.90.28.174\n45.90.28.170\n45.90.28.169\n45.90.28.167\n45.90.28.165\n45.90.28.164\n45.90.28.161\n45.90.28.16\n45.90.28.159\n45.90.28.158\n45.90.28.157\n45.90.28.156\n45.90.28.154\n45.90.28.152\n45.90.28.151\n45.90.28.15\n45.90.28.149\n45.90.28.148\n45.90.28.147\n45.90.28.144\n45.90.28.143\n45.90.28.138\n45.90.28.136\n45.90.28.135\n45.90.28.131\n45.90.28.130\n45.90.28.13\n45.90.28.129\n45.90.28.128\n45.90.28.125\n45.90.28.124\n45.90.28.123\n45.90.28.121\n45.90.28.120\n45.90.28.12\n45.90.28.118\n45.90.28.117\n45.90.28.116\n45.90.28.113\n45.90.28.112\n45.90.28.111\n45.90.28.11\n45.90.28.109\n45.90.28.107\n45.90.28.106\n45.90.28.105\n45.90.28.104\n45.90.28.102\n45.87.235.187\n45.84.187.6\n45.84.169.143\n45.83.43.103\n45.83.40.44\n45.80.220.213\n45.77.236.229\n45.77.198.113\n45.76.91.140\n45.76.90.190\n45.76.35.187\n45.76.155.194\n45.76.115.6\n45.74.89.59\n45.73.0.118\n45.71.203.144\n45.7.228.232\n45.67.33.48\n45.65.225.220\n45.65.225.202\n45.65.225.196\n45.65.173.96\n45.65.173.105\n45.65.172.15\n45.64.173.74\n45.63.86.216\n45.63.105.236\n45.62.200.26\n45.6.136.231\n45.58.8.74\n45.58.38.166\n45.58.11.132\n45.55.112.11\n45.5.94.206\n45.5.94.178\n45.5.241.225\n45.4.97.49\n45.32.238.248\n45.32.202.187\n45.255.126.214\n45.249.122.82\n45.249.120.60\n45.248.78.99\n45.248.138.158\n45.239.239.130\n45.238.20.140\n45.236.169.151\n45.232.108.30\n45.231.221.1\n45.231.154.65\n45.230.252.238\n45.229.28.239\n45.228.32.139\n45.228.19.18\n45.228.181.252\n45.228.181.248\n45.226.50.27\n45.224.96.67\n45.224.22.25\n45.224.149.238\n45.224.148.188\n45.224.148.180\n45.224.148.177\n45.224.148.172\n45.224.148.169\n45.221.84.210\n45.191.104.200\n45.191.104.170\n45.186.99.45\n45.183.172.129\n45.180.114.21\n45.178.74.107\n45.177.74.202\n45.177.211.188\n45.176.96.42\n45.176.227.244\n45.175.237.66\n45.174.92.172\n45.174.70.10\n45.174.240.139\n45.173.140.190\n45.173.12.139\n45.172.89.11\n45.172.247.174\n45.172.222.69\n45.172.152.13\n45.171.180.81\n45.170.224.187\n45.168.133.38\n45.167.95.160\n45.167.92.103\n45.167.181.34\n45.167.112.2\n45.166.56.6\n45.164.175.174\n45.163.40.82\n45.163.220.58\n45.163.147.122\n45.162.100.248\n45.160.188.222\n45.159.18.99\n45.157.214.92\n45.152.120.51\n45.147.122.36\n45.143.120.250\n45.141.58.191\n45.14.48.185\n45.131.108.160\n45.129.19.20\n45.126.21.60\n45.125.211.11\n45.125.208.8\n45.123.201.235\n45.120.54.191\n45.118.217.3\n45.117.80.109\n45.117.63.81\n45.117.63.75\n45.117.63.46\n45.117.63.42\n45.117.63.26\n45.117.63.224\n45.117.63.221\n45.117.63.205\n45.117.63.192\n45.117.63.107\n45.117.63.105\n45.11.45.11\n43.252.88.130\n43.252.244.118\n43.251.253.202\n43.251.159.130\n43.249.65.207\n43.249.227.14\n43.249.112.98\n43.247.16.2\n43.240.226.242\n43.231.234.17\n43.230.201.109\n43.229.54.31\n43.228.229.130\n43.154.235.48\n43.132.205.118\n42.82.57.6\n42.61.73.150\n42.61.42.249\n42.61.19.26\n42.61.19.254\n42.61.107.9\n42.200.91.189\n42.200.196.122\n42.2.230.61\n42.116.255.185\n42.116.255.182\n42.116.255.181\n42.116.255.180\n42.116.255.179\n41.87.158.170\n41.87.158.142\n41.87.147.158\n41.87.144.169\n41.85.252.37\n41.84.143.206\n41.79.47.6\n41.76.241.135\n41.76.215.94\n41.76.101.174\n41.76.100.130\n41.72.216.234\n41.63.249.222\n41.63.244.89\n41.63.240.79\n41.60.129.80\n41.59.200.123\n41.59.197.135\n41.58.130.18\n41.57.120.177\n41.33.166.19\n41.231.62.166\n41.23.99.30\n41.23.99.247\n41.23.98.218\n41.23.253.80\n41.23.253.31\n41.23.253.134\n41.23.240.216\n41.23.240.123\n41.23.234.88\n41.23.234.37\n41.23.234.129\n41.23.234.114\n41.23.216.154\n41.23.216.150\n41.23.190.90\n41.23.185.218\n41.23.184.40\n41.23.184.250\n41.23.184.235\n41.23.184.193\n41.23.184.182\n41.23.184.151\n41.23.184.125\n41.23.184.111\n41.23.115.51\n41.23.114.62\n41.23.114.42\n41.23.114.41\n41.23.114.186\n41.23.113.90\n41.23.113.86\n41.23.113.210\n41.23.113.130\n41.228.23.167\n41.228.23.165\n41.228.23.137\n41.221.203.153\n41.221.192.167\n41.221.192.166\n41.218.90.154\n41.217.204.165\n41.216.159.6\n41.216.125.179\n41.215.248.143\n41.215.243.43\n41.214.150.122\n41.214.138.238\n41.211.125.242\n41.208.73.31\n41.205.195.162\n41.204.85.34\n41.203.87.157\n41.203.62.146\n41.191.220.77\n41.188.183.82\n41.185.21.252\n41.185.10.153\n41.184.254.94\n41.184.212.17\n41.184.174.151\n41.184.151.186\n41.174.182.214\n41.174.104.223\n41.173.23.150\n41.165.19.186\n41.162.120.85\n41.139.226.83\n41.139.206.39\n41.139.202.86\n41.139.147.86\n41.138.133.123\n41.138.101.251\n41.128.225.226\n41.111.204.186\n41.111.135.226\n41.0.170.154\n40.70.19.156\n40.127.12.40\n40.122.215.219\n40.114.69.73\n40.114.125.120\n4.79.244.118\n4.79.132.219\n4.7.220.241\n4.7.175.6\n4.59.81.39\n4.53.9.50\n4.53.160.75\n4.53.133.131\n4.4.211.46\n4.4.204.130\n4.4.178.34\n4.35.168.46\n4.34.37.186\n4.31.24.192\n4.31.189.137\n4.30.165.222\n4.26.151.242\n4.26.143.250\n4.26.143.210\n4.26.137.250\n4.2.2.6\n4.2.2.5\n4.2.2.4\n4.2.2.3\n4.2.2.2\n4.2.2.1\n4.16.3.86\n4.1.67.166\n4.1.67.145\n4.1.37.10\n4.1.240.35\n4.1.131.250\n4.0.0.53\n39.125.55.218\n39.110.226.206\n39.110.209.44\n39.110.201.118\n38.80.70.1\n38.74.61.221\n38.52.221.126\n38.51.48.158\n38.242.133.215\n38.142.225.131\n38.141.25.244\n38.135.49.152\n38.132.106.139\n38.125.161.1\n38.124.242.186\n38.122.24.30\n38.111.185.57\n37.99.224.30\n37.97.93.166\n37.9.57.142\n37.9.170.176\n37.79.202.114\n37.79.150.141\n37.59.83.245\n37.49.218.38\n37.44.45.238\n37.32.79.106\n37.29.96.183\n37.28.156.34\n37.26.170.60\n37.251.160.252\n37.25.36.181\n37.235.213.241\n37.235.174.43\n37.235.128.87\n37.232.70.214\n37.232.65.230\n37.232.47.14\n37.230.223.159\n37.228.93.107\n37.220.215.242\n37.208.127.214\n37.208.124.37\n37.202.49.2\n37.194.251.191\n37.187.55.202\n37.187.155.58\n37.187.133.168\n37.186.124.135\n37.186.115.160\n37.18.74.136\n37.18.29.33\n37.18.29.217\n37.18.26.2\n37.18.255.71\n37.18.105.149\n37.17.53.108\n37.157.177.192\n37.148.235.164\n37.128.95.86\n37.120.172.191\n37.114.62.26\n37.114.34.106\n37.111.142.222\n37.0.70.118\n36.50.50.50\n35.199.20.182\n35.167.25.37\n35.155.221.215\n34.94.84.140\n34.80.2.188\n34.76.9.111\n32.141.0.226\n31.7.37.37\n31.7.36.36\n31.46.42.149\n31.45.234.58\n31.44.247.221\n31.42.31.2\n31.42.179.75\n31.41.226.9\n31.40.97.86\n31.40.113.204\n31.40.100.86\n31.3.135.232\n31.28.113.156\n31.28.0.248\n31.221.33.250\n31.22.0.186\n31.210.69.163\n31.210.218.84\n31.206.52.78\n31.202.16.125\n31.192.98.158\n31.182.37.74\n31.182.36.26\n31.182.124.131\n31.173.244.149\n31.173.203.246\n31.173.165.18\n31.172.250.244\n31.172.133.253\n31.171.110.240\n31.170.113.126\n31.163.200.36\n31.163.192.96\n31.162.165.69\n31.156.55.106\n31.154.3.161\n31.148.48.205\n31.148.127.100\n31.146.83.206\n31.146.5.166\n31.146.216.174\n31.146.161.194\n31.135.92.50\n31.135.16.194\n31.128.75.116\n31.11.204.241\n31.11.132.161\n31.11.132.129\n31.0.162.2\n3.214.203.108\n3.20.144.103\n3.14.242.170\n3.139.141.82\n3.136.88.129\n27.72.58.161\n27.7.175.204\n27.54.166.204\n27.33.60.66\n27.32.252.176\n27.32.174.151\n27.174.14.71\n27.174.13.64\n27.174.10.206\n27.160.23.132\n27.147.48.26\n27.147.164.86\n27.135.204.65\n27.131.191.90\n27.131.162.193\n27.126.4.14\n27.126.155.4\n27.126.155.1\n27.124.6.225\n27.122.254.83\n27.113.241.18\n27.111.32.42\n27.110.245.97\n27.110.239.50\n27.110.232.161\n27.110.231.42\n27.110.185.10\n27.110.176.225\n27.110.163.162\n27.110.152.250\n27.110.148.225\n27.110.146.233\n27.110.139.78\n24.56.102.20\n24.56.100.20\n24.48.255.252\n24.39.127.26\n24.39.107.174\n24.37.245.42\n24.32.73.75\n24.244.219.147\n24.237.135.25\n24.230.77.131\n24.209.241.222\n24.182.239.198\n24.182.14.205\n24.172.82.94\n24.172.34.250\n24.152.48.66\n24.152.37.40\n24.149.93.51\n24.124.66.35\n24.123.203.111\n24.119.69.70\n24.116.92.101\n24.116.195.164\n24.105.237.170\n24.104.140.255\n24.104.140.229\n24.104.140.222\n24.104.140.212\n24.104.140.206\n24.104.140.201\n24.100.136.104\n23.92.212.178\n23.81.140.234\n23.59.249.67\n23.59.249.61\n23.59.249.226\n23.59.248.248\n23.59.248.226\n23.59.248.171\n23.59.248.145\n23.59.248.128\n23.56.161.88\n23.56.161.53\n23.56.161.5\n23.56.161.255\n23.56.161.246\n23.56.161.240\n23.56.161.23\n23.56.161.213\n23.56.161.18\n23.56.161.167\n23.56.161.147\n23.56.161.13\n23.56.161.12\n23.56.161.107\n23.56.160.79\n23.56.160.36\n23.56.160.252\n23.56.160.232\n23.56.160.213\n23.56.160.195\n23.56.160.15\n23.56.160.14\n23.56.160.116\n23.31.51.242\n23.30.232.82\n23.253.230.65\n23.25.183.97\n23.246.82.186\n23.242.22.236\n23.216.53.97\n23.216.53.83\n23.216.53.70\n23.216.53.58\n23.216.53.46\n23.216.53.34\n23.216.53.230\n23.216.53.229\n23.216.53.222\n23.216.53.194\n23.216.53.155\n23.216.53.152\n23.216.53.151\n23.216.53.15\n23.216.53.14\n23.216.53.128\n23.216.53.106\n23.216.52.80\n23.216.52.42\n23.216.52.34\n23.216.52.29\n23.216.52.228\n23.216.52.188\n23.216.52.163\n23.216.52.159\n23.216.52.154\n23.216.52.138\n23.216.52.128\n23.216.52.127\n23.216.52.102\n23.189.48.79\n23.115.93.66\n23.115.125.217\n23.111.184.9\n223.6.6.82\n223.6.6.81\n223.6.6.72\n223.6.6.68\n223.6.6.6\n223.6.6.56\n223.6.6.48\n223.6.6.46\n223.6.6.43\n223.6.6.41\n223.6.6.34\n223.6.6.253\n223.6.6.245\n223.6.6.241\n223.6.6.237\n223.6.6.232\n223.6.6.204\n223.6.6.199\n223.6.6.198\n223.6.6.196\n223.6.6.195\n223.6.6.191\n223.6.6.184\n223.6.6.183\n223.6.6.171\n223.6.6.170\n223.6.6.17\n223.6.6.169\n223.6.6.151\n223.6.6.150\n223.6.6.147\n223.6.6.143\n223.6.6.141\n223.6.6.139\n223.6.6.133\n223.6.6.127\n223.6.6.0\n223.5.5.93\n223.5.5.91\n223.5.5.84\n223.5.5.82\n223.5.5.79\n223.5.5.78\n223.5.5.70\n223.5.5.64\n223.5.5.59\n223.5.5.51\n223.5.5.50\n223.5.5.5\n223.5.5.47\n223.5.5.45\n223.5.5.41\n223.5.5.4\n223.5.5.38\n223.5.5.31\n223.5.5.252\n223.5.5.248\n223.5.5.241\n223.5.5.231\n223.5.5.23\n223.5.5.228\n223.5.5.224\n223.5.5.219\n223.5.5.204\n223.5.5.203\n223.5.5.200\n223.5.5.190\n223.5.5.19\n223.5.5.187\n223.5.5.170\n223.5.5.17\n223.5.5.168\n223.5.5.163\n223.5.5.159\n223.5.5.157\n223.5.5.151\n223.5.5.15\n223.5.5.148\n223.5.5.136\n223.5.5.13\n223.5.5.129\n223.5.5.124\n223.5.5.123\n223.5.5.112\n223.5.5.111\n223.5.5.110\n223.5.5.0\n223.29.52.106\n223.255.176.196\n223.255.176.195\n223.25.232.2\n223.22.243.241\n223.197.185.46\n223.171.73.95\n222.99.168.132\n222.98.43.84\n222.98.187.134\n222.98.115.251\n222.98.115.219\n222.97.189.7\n222.255.237.207\n222.255.206.232\n222.255.167.61\n222.255.144.115\n222.253.48.106\n222.252.14.239\n222.239.76.18\n222.239.221.250\n222.239.110.51\n222.235.176.47\n222.231.63.77\n222.231.61.196\n222.230.138.105\n222.228.150.127\n222.151.203.57\n222.127.7.54\n222.127.61.166\n222.127.25.226\n222.127.168.25\n222.127.151.3\n222.127.140.178\n222.122.82.24\n222.122.21.3\n222.122.166.141\n222.122.149.60\n222.121.55.99\n222.119.29.168\n222.118.225.33\n222.110.103.39\n222.107.91.130\n222.106.70.250\n222.104.22.126\n222.104.139.4\n222.103.228.194\n222.101.9.213\n222.101.9.212\n221.186.19.122\n221.163.194.3\n221.163.155.133\n221.162.247.60\n221.162.19.50\n221.162.19.157\n221.159.225.51\n221.156.92.194\n221.154.98.205\n221.154.146.204\n221.151.144.34\n221.151.144.12\n221.150.72.183\n221.143.46.205\n221.143.46.154\n221.143.216.58\n221.143.20.131\n221.139.13.130\n221.132.89.147\n221.125.130.98\n220.90.96.3\n220.90.201.8\n220.88.49.223\n220.83.87.2\n220.81.64.1\n220.78.162.11\n220.77.228.2\n220.73.162.155\n220.73.162.132\n220.73.139.8\n220.245.192.186\n220.241.227.4\n220.158.164.243\n220.149.56.99\n220.135.28.237\n220.135.20.47\n220.135.105.31\n220.134.170.52\n220.133.235.235\n220.132.88.194\n220.132.221.129\n220.130.55.196\n220.130.130.141\n220.130.12.85\n220.130.12.22\n220.130.10.250\n220.125.183.29\n220.119.186.100\n220.117.241.194\n220.110.160.2\n219.87.164.152\n219.87.162.222\n219.85.163.52\n219.252.2.100\n219.252.1.100\n219.252.0.1\n219.250.36.130\n219.166.235.130\n219.166.16.122\n219.166.11.146\n219.166.109.122\n219.163.11.226\n219.127.86.6\n219.118.161.57\n219.117.237.252\n219.106.241.34\n219.103.63.145\n218.44.251.210\n218.44.234.170\n218.44.187.8\n218.38.136.62\n218.36.68.254\n218.32.222.5\n218.255.18.2\n218.236.85.1\n218.236.49.18\n218.236.241.132\n218.235.251.3\n218.235.251.2\n218.234.23.53\n218.234.19.131\n218.234.18.181\n218.223.34.93\n218.216.72.194\n218.208.115.68\n218.208.114.28\n218.189.82.194\n218.188.52.18\n218.188.223.182\n218.188.217.219\n218.188.210.196\n218.161.68.137\n218.161.40.163\n218.159.112.240\n218.159.112.239\n218.159.100.172\n218.158.8.12\n218.158.8.11\n218.156.163.51\n218.152.207.197\n218.151.83.209\n218.151.134.214\n218.149.84.50\n218.146.34.200\n218.146.255.235\n218.145.31.139\n218.145.31.132\n218.102.13.133\n217.97.139.128\n217.79.247.238\n217.79.18.121\n217.78.177.110\n217.76.33.82\n217.73.31.10\n217.7.81.136\n217.7.80.40\n217.7.63.1\n217.69.228.142\n217.69.169.25\n217.67.190.98\n217.67.184.254\n217.65.3.81\n217.64.148.33\n217.64.136.254\n217.40.46.142\n217.38.149.236\n217.33.153.162\n217.30.250.167\n217.30.163.159\n217.28.153.27\n217.27.219.122\n217.27.148.125\n217.27.123.226\n217.27.116.145\n217.27.116.144\n217.26.19.166\n217.26.171.146\n217.25.237.141\n217.25.228.98\n217.244.13.14\n217.24.190.106\n217.23.199.77\n217.23.146.60\n217.223.161.177\n217.22.164.126\n217.218.155.155\n217.218.127.127\n217.21.43.3\n217.196.23.122\n217.194.215.91\n217.194.213.253\n217.19.153.18\n217.182.200.38\n217.182.192.218\n217.182.192.123\n217.182.158.123\n217.182.137.224\n217.182.112.181\n217.18.206.22\n217.18.206.12\n217.174.14.101\n217.173.202.194\n217.170.128.27\n217.17.48.11\n217.17.41.146\n217.17.34.68\n217.17.34.10\n217.168.130.197\n217.164.255.37\n217.164.255.35\n217.160.70.42\n217.16.79.246\n217.150.58.17\n217.150.35.129\n217.15.202.106\n217.15.146.124\n217.145.86.12\n217.145.54.100\n217.145.49.185\n217.14.178.67\n217.14.143.18\n217.13.80.252\n217.13.211.2\n217.12.214.244\n217.119.160.99\n217.119.126.221\n217.119.121.146\n217.116.61.153\n217.114.181.99\n217.113.195.244\n217.113.125.26\n217.111.39.134\n217.111.148.201\n217.111.114.4\n217.109.45.177\n217.107.102.103\n217.100.187.236\n217.0.43.50\n216.98.4.252\n216.98.109.133\n216.85.168.28\n216.80.113.2\n216.75.21.70\n216.55.99.220\n216.55.100.220\n216.54.204.186\n216.47.224.66\n216.33.116.102\n216.27.175.2\n216.254.95.2\n216.250.141.137\n216.241.25.83\n216.239.34.40\n216.239.32.40\n216.238.98.60\n216.231.41.2\n216.229.0.25\n216.228.104.3\n216.222.152.16\n216.222.134.250\n216.218.31.74\n216.218.245.200\n216.218.215.117\n216.21.169.147\n216.21.129.22\n216.21.128.22\n216.207.95.191\n216.207.40.128\n216.199.54.9\n216.199.46.11\n216.197.192.203\n216.194.29.204\n216.194.28.69\n216.194.28.42\n216.194.28.33\n216.175.203.51\n216.171.253.13\n216.171.184.243\n216.170.153.146\n216.169.160.23\n216.169.160.2\n216.165.129.158\n216.165.129.157\n216.165.128.161\n216.160.246.151\n216.160.226.49\n216.16.136.146\n216.155.92.110\n216.155.91.251\n216.152.244.77\n216.146.36.36\n216.146.35.35\n216.137.13.22\n216.136.95.83\n216.136.95.82\n216.136.95.67\n216.136.95.35\n216.136.95.34\n216.136.95.3\n216.136.95.2\n216.136.95.19\n216.136.82.113\n216.136.33.82\n216.135.79.125\n216.135.79.118\n216.135.79.115\n216.135.0.10\n216.130.230.144\n216.126.220.4\n216.120.247.231\n216.12.255.2\n216.12.255.1\n216.12.254.250\n216.108.238.70\n213.91.195.139\n213.91.143.246\n213.90.6.14\n213.85.168.57\n213.85.143.246\n213.79.89.138\n213.76.155.132\n213.76.114.107\n213.74.223.74\n213.74.195.52\n213.73.3.164\n213.68.194.51\n213.6.77.30\n213.6.20.57\n213.59.128.41\n213.57.91.138\n213.5.71.47\n213.5.120.3\n213.4.82.7\n213.39.74.43\n213.34.140.206\n213.33.237.106\n213.33.158.134\n213.32.252.91\n213.3.42.193\n213.26.25.3\n213.251.61.42\n213.251.57.217\n213.251.48.193\n213.25.71.2\n213.249.20.207\n213.248.45.60\n213.246.55.57\n213.241.67.226\n213.241.37.244\n213.241.37.234\n213.240.24.242\n213.234.30.118\n213.234.17.74\n213.230.97.216\n213.230.91.58\n213.230.67.186\n213.230.125.148\n213.230.111.191\n213.230.108.161\n213.226.186.10\n213.226.11.210\n213.223.36.242\n213.222.25.130\n213.221.37.215\n213.217.16.106\n213.216.64.102\n213.214.30.78\n213.212.145.1\n213.211.50.2\n213.211.50.1\n213.211.33.58\n213.21.225.67\n213.208.183.59\n213.207.46.220\n213.207.46.218\n213.207.187.249\n213.207.158.201\n213.207.141.97\n213.207.132.189\n213.207.131.97\n213.205.80.82\n213.202.255.96\n213.201.78.48\n213.200.218.61\n213.200.211.110\n213.194.123.26\n213.193.122.202\n213.191.222.21\n213.180.53.103\n213.180.182.246\n213.178.54.62\n213.176.242.166\n213.171.205.61\n213.171.192.34\n213.166.247.100\n213.163.127.229\n213.163.120.82\n213.16.110.117\n213.16.110.112\n213.157.57.133\n213.157.50.130\n213.156.44.184\n213.155.160.240\n213.154.80.203\n213.154.18.59\n213.153.223.21\n213.149.177.25\n213.145.3.44\n213.145.151.190\n213.145.137.102\n213.142.215.190\n213.140.41.194\n213.14.11.162\n213.136.88.86\n213.136.84.5\n213.136.75.64\n213.136.71.68\n213.136.36.155\n213.133.91.249\n213.133.116.14\n213.131.40.230\n213.129.114.98\n213.124.39.21\n213.115.174.71\n213.111.121.178\n213.108.174.218\n213.108.172.182\n213.108.160.205\n212.98.146.97\n212.97.32.2\n212.97.129.35\n212.97.129.34\n212.96.1.70\n212.93.29.112\n212.93.121.72\n212.93.121.60\n212.93.118.21\n212.93.117.80\n212.93.111.192\n212.92.200.165\n212.91.246.11\n212.87.243.194\n212.87.243.120\n212.83.168.230\n212.78.216.109\n212.74.192.40\n212.73.221.107\n212.73.221.104\n212.73.198.88\n212.73.140.66\n212.73.138.38\n212.73.128.182\n212.72.130.21\n212.72.130.20\n212.70.156.160\n212.67.71.84\n212.65.208.193\n212.58.12.245\n212.56.212.194\n212.56.209.18\n212.5.221.202\n212.5.128.228\n212.48.52.94\n212.48.153.245\n212.48.152.160\n212.47.12.21\n212.46.205.34\n212.44.128.18\n212.41.1.87\n212.4.138.238\n212.4.121.10\n212.39.106.154\n212.38.26.132\n212.38.2.130\n212.34.245.179\n212.34.232.70\n212.33.190.215\n212.32.252.131\n212.3.223.82\n212.3.154.18\n212.3.131.158\n212.3.101.130\n212.26.7.10\n212.26.144.58\n212.251.32.202\n212.247.80.50\n212.247.176.202\n212.247.102.181\n212.244.210.91\n212.237.127.127\n212.237.125.216\n212.236.18.126\n212.233.125.20\n212.230.255.129\n212.230.255.1\n212.225.218.80\n212.224.71.71\n212.220.115.146\n212.22.128.20\n212.210.2.2\n212.210.2.15\n212.210.2.14\n212.203.109.67\n212.200.34.37\n212.200.169.182\n212.200.115.156\n212.2.230.69\n212.199.114.12\n212.199.114.11\n212.191.1.46\n212.186.200.123\n212.185.196.10\n212.185.180.3\n212.184.191.2\n212.184.191.193\n212.184.191.100\n212.182.95.26\n212.160.242.185\n212.160.162.67\n212.160.147.19\n212.154.131.115\n212.150.211.99\n212.150.211.114\n212.146.97.154\n212.143.39.243\n212.14.18.110\n212.139.214.147\n212.13.82.7\n212.126.102.138\n212.124.35.25\n212.122.53.126\n212.122.52.11\n212.122.4.2\n212.121.229.233\n212.12.28.30\n212.12.28.126\n212.12.27.29\n212.12.18.113\n212.12.15.128\n212.12.14.122\n212.118.12.22\n212.118.0.2\n212.118.0.1\n212.117.148.54\n212.116.122.201\n212.113.0.3\n212.112.180.131\n212.111.192.246\n212.105.78.7\n212.105.78.6\n212.105.78.3\n212.104.43.3\n212.104.43.2\n212.102.46.89\n212.102.46.84\n212.100.159.226\n212.0.208.189\n211.9.37.1\n211.76.112.60\n211.76.112.59\n211.75.76.173\n211.75.48.98\n211.75.165.163\n211.75.15.177\n211.75.139.191\n211.72.124.193\n211.63.16.5\n211.62.56.125\n211.60.96.137\n211.60.199.66\n211.59.242.36\n211.54.182.7\n211.53.64.18\n211.53.40.133\n211.51.150.131\n211.5.228.210\n211.5.228.209\n211.5.209.194\n211.47.188.226\n211.46.120.1\n211.44.250.215\n211.41.128.71\n211.40.52.5\n211.40.52.2\n211.35.76.100\n211.35.20.27\n211.34.118.2\n211.33.136.94\n211.33.121.235\n211.254.92.254\n211.252.106.130\n211.251.24.241\n211.245.239.40\n211.24.100.198\n211.239.127.57\n211.236.20.2\n211.234.111.74\n211.233.65.13\n211.233.50.4\n211.233.50.3\n211.232.158.254\n211.232.116.3\n211.232.110.114\n211.23.246.116\n211.23.233.180\n211.23.144.240\n211.228.195.162\n211.228.100.115\n211.226.88.54\n211.226.180.60\n211.226.143.43\n211.223.193.200\n211.222.204.5\n211.220.224.12\n211.220.194.152\n211.22.52.82\n211.22.146.115\n211.219.86.1\n211.219.83.226\n211.217.195.226\n211.215.23.77\n211.21.220.171\n211.21.138.151\n211.21.133.123\n211.203.71.5\n211.203.18.17\n211.202.2.28\n211.20.146.109\n211.199.149.131\n211.198.50.2\n211.194.164.158\n211.194.140.3\n211.193.204.3\n211.193.134.134\n211.193.106.59\n211.192.139.216\n211.188.180.22\n211.188.180.21\n211.184.196.130\n211.182.233.3\n211.182.233.2\n211.181.222.135\n211.177.101.116\n211.170.243.20\n211.170.122.12\n211.169.2.100\n211.129.155.175\n211.126.202.126\n211.123.77.97\n211.121.135.181\n211.12.254.10\n211.119.47.110\n211.116.138.5\n211.115.66.175\n211.115.194.5\n211.115.194.4\n211.115.194.3\n211.115.194.2\n211.115.194.1\n211.114.53.85\n211.114.145.7\n211.111.172.72\n211.111.172.71\n211.110.10.36\n211.105.7.5\n211.104.6.1\n211.10.168.1\n210.99.77.210\n210.99.180.194\n210.98.146.2\n210.94.0.73\n210.94.0.7\n210.93.0.2\n210.91.32.187\n210.91.32.171\n210.90.197.1\n210.87.253.60\n210.87.250.156\n210.87.250.154\n210.8.28.194\n210.79.34.137\n210.61.97.241\n210.61.48.168\n210.59.209.19\n210.56.14.146\n210.5.98.46\n210.5.98.130\n210.5.92.6\n210.5.89.193\n210.5.87.146\n210.5.72.33\n210.5.72.30\n210.5.72.24\n210.5.72.21\n210.5.72.2\n210.5.72.12\n210.5.67.241\n210.5.64.10\n210.5.56.146\n210.5.56.145\n210.5.125.6\n210.5.124.161\n210.5.104.28\n210.5.101.242\n210.3.252.27\n210.3.239.131\n210.3.143.206\n210.3.138.237\n210.254.50.20\n210.251.126.97\n210.245.87.16\n210.245.8.9\n210.245.31.102\n210.245.21.123\n210.245.21.102\n210.245.111.195\n210.243.121.155\n210.233.117.1\n210.230.193.68\n210.230.193.66\n210.23.129.34\n210.228.80.253\n210.224.86.126\n210.222.176.66\n210.220.163.82\n210.220.16.6\n210.220.16.2\n210.219.173.18\n210.216.217.254\n210.213.75.161\n210.213.74.41\n210.213.74.129\n210.213.65.118\n210.213.242.242\n210.213.218.233\n210.213.213.206\n210.213.192.241\n210.213.126.161\n210.212.210.91\n210.211.20.225\n210.211.16.230\n210.207.236.2\n210.206.183.39\n210.206.162.2\n210.205.247.4\n210.2.138.68\n210.196.68.174\n210.196.251.66\n210.193.195.118\n210.190.25.80\n210.190.105.66\n210.19.157.131\n210.187.50.146\n210.181.4.25\n210.181.1.24\n210.180.98.69\n210.18.214.38\n210.178.75.16\n210.176.210.4\n210.172.81.186\n210.172.23.114\n210.172.103.18\n210.172.1.251\n210.171.38.41\n210.168.248.242\n210.163.158.224\n210.162.99.34\n210.161.166.69\n210.16.67.138\n210.141.99.89\n210.14.13.209\n210.14.12.50\n210.14.12.22\n210.134.0.130\n210.127.61.151\n210.127.253.120\n210.125.136.7\n210.123.136.39\n210.121.229.1\n210.114.225.223\n210.114.175.182\n210.107.84.3\n210.107.84.2\n210.107.239.132\n210.107.239.131\n210.104.21.1\n210.104.203.3\n210.104.203.2\n210.103.63.70\n210.102.252.3\n210.102.248.37\n210.100.192.2\n210.10.238.133\n210.1.94.54\n210.1.88.137\n210.1.86.1\n210.1.83.201\n210.1.81.40\n210.0.255.216\n210.0.255.144\n210.0.128.251\n210.0.128.250\n210.0.128.242\n210.0.128.241\n209.90.160.221\n209.87.64.70\n209.84.253.11\n209.80.159.21\n209.51.161.14\n209.45.48.205\n209.37.92.138\n209.33.101.220\n209.3.124.160\n209.253.113.2\n209.253.113.10\n209.250.128.6\n209.244.0.53\n209.244.0.4\n209.244.0.3\n209.239.11.98\n209.234.196.12\n209.232.116.6\n209.23.9.76\n209.222.125.10\n209.216.160.2\n209.216.160.131\n209.216.129.4\n209.209.217.168\n209.201.40.112\n209.201.3.13\n209.181.232.128\n209.164.189.56\n209.164.189.55\n209.164.189.54\n209.160.252.138\n209.159.152.77\n209.150.154.1\n209.144.50.123\n209.143.0.10\n209.137.239.50\n209.130.139.2\n209.130.136.2\n209.126.106.217\n208.99.243.17\n208.93.60.20\n208.93.158.1\n208.91.112.53\n208.91.112.52\n208.91.112.220\n208.89.96.20\n208.89.96.11\n208.89.131.200\n208.87.98.94\n208.84.156.150\n208.84.156.137\n208.79.56.204\n208.74.71.20\n208.74.69.5\n208.72.160.67\n208.72.120.204\n208.70.255.220\n208.68.92.38\n208.67.29.251\n208.67.222.222\n208.67.222.220\n208.67.222.2\n208.67.220.222\n208.67.220.220\n208.67.220.2\n208.67.220.120\n208.48.253.106\n208.46.96.168\n208.38.65.35\n208.38.26.33\n208.254.148.100\n208.253.57.5\n208.249.244.2\n208.249.244.1\n208.180.0.251\n208.180.0.250\n208.157.146.14\n208.125.139.6\n208.123.219.155\n208.118.69.226\n208.113.128.45\n208.111.1.2\n208.111.1.1\n208.103.33.22\n208.100.13.10\n207.99.46.118\n207.99.12.105\n207.91.5.32\n207.59.153.242\n207.53.228.67\n207.254.17.115\n207.248.57.11\n207.248.236.85\n207.248.224.72\n207.248.224.71\n207.248.111.242\n207.246.98.123\n207.243.201.24\n207.243.150.98\n207.236.186.187\n207.230.75.50\n207.230.65.98\n207.2.105.196\n207.195.35.143\n207.191.51.250\n207.191.50.250\n207.191.50.10\n207.191.1.10\n207.180.217.214\n207.180.212.30\n207.177.83.1\n207.177.61.103\n207.172.157.201\n207.17.190.5\n207.162.218.5\n207.159.121.241\n207.159.104.10\n207.154.212.113\n207.144.37.198\n207.140.152.71\n207.109.67.32\n207.108.84.1\n207.108.220.16\n206.84.63.62\n206.81.207.41\n206.81.195.82\n206.78.19.8\n206.51.143.55\n206.41.4.36\n206.253.33.131\n206.253.33.130\n206.252.232.95\n206.222.97.94\n206.222.97.82\n206.222.97.50\n206.222.107.70\n206.222.107.38\n206.222.107.34\n206.222.107.130\n206.221.178.134\n206.196.97.89\n206.189.92.228\n206.189.238.147\n206.180.165.149\n206.170.79.50\n206.169.200.135\n206.169.151.40\n206.165.6.12\n206.165.6.11\n206.15.226.2\n206.138.18.20\n206.125.134.19\n205.243.120.83\n205.233.14.44\n205.171.3.66\n205.171.3.65\n205.171.3.26\n205.171.202.66\n205.171.202.166\n205.171.2.65\n205.171.2.25\n205.170.181.146\n205.169.93.95\n205.168.62.216\n205.168.234.48\n205.168.155.0\n204.95.160.2\n204.9.215.185\n204.9.144.70\n204.9.109.57\n204.88.31.246\n204.85.36.31\n204.74.67.99\n204.74.67.98\n204.74.67.97\n204.74.67.94\n204.74.67.92\n204.74.67.89\n204.74.67.88\n204.74.67.87\n204.74.67.86\n204.74.67.85\n204.74.67.83\n204.74.67.8\n204.74.67.78\n204.74.67.77\n204.74.67.74\n204.74.67.73\n204.74.67.70\n204.74.67.7\n204.74.67.69\n204.74.67.67\n204.74.67.66\n204.74.67.65\n204.74.67.64\n204.74.67.63\n204.74.67.62\n204.74.67.61\n204.74.67.58\n204.74.67.57\n204.74.67.56\n204.74.67.52\n204.74.67.51\n204.74.67.50\n204.74.67.5\n204.74.67.48\n204.74.67.46\n204.74.67.45\n204.74.67.44\n204.74.67.43\n204.74.67.42\n204.74.67.40\n204.74.67.37\n204.74.67.34\n204.74.67.31\n204.74.67.30\n204.74.67.3\n204.74.67.28\n204.74.67.26\n204.74.67.253\n204.74.67.252\n204.74.67.251\n204.74.67.250\n204.74.67.247\n204.74.67.246\n204.74.67.245\n204.74.67.244\n204.74.67.243\n204.74.67.241\n204.74.67.239\n204.74.67.236\n204.74.67.235\n204.74.67.233\n204.74.67.232\n204.74.67.231\n204.74.67.229\n204.74.67.226\n204.74.67.225\n204.74.67.224\n204.74.67.223\n204.74.67.221\n204.74.67.220\n204.74.67.219\n204.74.67.217\n204.74.67.215\n204.74.67.213\n204.74.67.212\n204.74.67.210\n204.74.67.209\n204.74.67.207\n204.74.67.205\n204.74.67.203\n204.74.67.201\n204.74.67.20\n204.74.67.2\n204.74.67.198\n204.74.67.197\n204.74.67.195\n204.74.67.194\n204.74.67.192\n204.74.67.19\n204.74.67.189\n204.74.67.187\n204.74.67.185\n204.74.67.184\n204.74.67.183\n204.74.67.181\n204.74.67.180\n204.74.67.18\n204.74.67.176\n204.74.67.174\n204.74.67.173\n204.74.67.17\n204.74.67.169\n204.74.67.167\n204.74.67.166\n204.74.67.165\n204.74.67.163\n204.74.67.162\n204.74.67.161\n204.74.67.160\n204.74.67.159\n204.74.67.154\n204.74.67.152\n204.74.67.151\n204.74.67.149\n204.74.67.146\n204.74.67.145\n204.74.67.144\n204.74.67.141\n204.74.67.139\n204.74.67.137\n204.74.67.135\n204.74.67.134\n204.74.67.132\n204.74.67.130\n204.74.67.13\n204.74.67.127\n204.74.67.125\n204.74.67.124\n204.74.67.122\n204.74.67.121\n204.74.67.120\n204.74.67.12\n204.74.67.118\n204.74.67.117\n204.74.67.116\n204.74.67.114\n204.74.67.111\n204.74.67.110\n204.74.67.11\n204.74.67.107\n204.74.67.106\n204.74.67.105\n204.74.67.102\n204.74.67.101\n204.74.67.10\n204.74.67.1\n204.74.66.99\n204.74.66.98\n204.74.66.97\n204.74.66.95\n204.74.66.93\n204.74.66.92\n204.74.66.91\n204.74.66.90\n204.74.66.83\n204.74.66.82\n204.74.66.80\n204.74.66.8\n204.74.66.77\n204.74.66.76\n204.74.66.73\n204.74.66.72\n204.74.66.69\n204.74.66.68\n204.74.66.66\n204.74.66.64\n204.74.66.61\n204.74.66.58\n204.74.66.57\n204.74.66.56\n204.74.66.55\n204.74.66.54\n204.74.66.53\n204.74.66.52\n204.74.66.50\n204.74.66.49\n204.74.66.48\n204.74.66.47\n204.74.66.45\n204.74.66.41\n204.74.66.40\n204.74.66.38\n204.74.66.36\n204.74.66.35\n204.74.66.34\n204.74.66.33\n204.74.66.32\n204.74.66.31\n204.74.66.27\n204.74.66.26\n204.74.66.253\n204.74.66.251\n204.74.66.250\n204.74.66.247\n204.74.66.246\n204.74.66.245\n204.74.66.242\n204.74.66.241\n204.74.66.24\n204.74.66.239\n204.74.66.238\n204.74.66.237\n204.74.66.233\n204.74.66.23\n204.74.66.229\n204.74.66.227\n204.74.66.225\n204.74.66.224\n204.74.66.223\n204.74.66.222\n204.74.66.22\n204.74.66.215\n204.74.66.214\n204.74.66.213\n204.74.66.210\n204.74.66.208\n204.74.66.206\n204.74.66.204\n204.74.66.200\n204.74.66.2\n204.74.66.199\n204.74.66.198\n204.74.66.197\n204.74.66.195\n204.74.66.194\n204.74.66.193\n204.74.66.192\n204.74.66.191\n204.74.66.19\n204.74.66.189\n204.74.66.187\n204.74.66.186\n204.74.66.185\n204.74.66.183\n204.74.66.182\n204.74.66.18\n204.74.66.179\n204.74.66.178\n204.74.66.177\n204.74.66.176\n204.74.66.175\n204.74.66.174\n204.74.66.173\n204.74.66.172\n204.74.66.171\n204.74.66.170\n204.74.66.165\n204.74.66.164\n204.74.66.161\n204.74.66.160\n204.74.66.159\n204.74.66.158\n204.74.66.157\n204.74.66.156\n204.74.66.155\n204.74.66.152\n204.74.66.151\n204.74.66.149\n204.74.66.147\n204.74.66.146\n204.74.66.144\n204.74.66.143\n204.74.66.139\n204.74.66.138\n204.74.66.137\n204.74.66.134\n204.74.66.133\n204.74.66.131\n204.74.66.130\n204.74.66.13\n204.74.66.129\n204.74.66.128\n204.74.66.127\n204.74.66.126\n204.74.66.122\n204.74.66.121\n204.74.66.117\n204.74.66.115\n204.74.66.114\n204.74.66.113\n204.74.66.112\n204.74.66.110\n204.74.66.11\n204.74.66.109\n204.74.66.107\n204.74.66.106\n204.74.66.105\n204.74.66.104\n204.74.66.103\n204.74.66.102\n204.74.66.10\n204.74.66.1\n204.74.115.99\n204.74.115.98\n204.74.115.91\n204.74.115.90\n204.74.115.9\n204.74.115.88\n204.74.115.87\n204.74.115.86\n204.74.115.84\n204.74.115.83\n204.74.115.82\n204.74.115.81\n204.74.115.80\n204.74.115.8\n204.74.115.79\n204.74.115.78\n204.74.115.77\n204.74.115.76\n204.74.115.72\n204.74.115.71\n204.74.115.70\n204.74.115.69\n204.74.115.68\n204.74.115.67\n204.74.115.65\n204.74.115.63\n204.74.115.6\n204.74.115.59\n204.74.115.55\n204.74.115.54\n204.74.115.52\n204.74.115.5\n204.74.115.49\n204.74.115.45\n204.74.115.44\n204.74.115.42\n204.74.115.41\n204.74.115.40\n204.74.115.4\n204.74.115.39\n204.74.115.38\n204.74.115.37\n204.74.115.36\n204.74.115.35\n204.74.115.34\n204.74.115.33\n204.74.115.32\n204.74.115.31\n204.74.115.3\n204.74.115.28\n204.74.115.27\n204.74.115.26\n204.74.115.254\n204.74.115.25\n204.74.115.248\n204.74.115.246\n204.74.115.245\n204.74.115.244\n204.74.115.243\n204.74.115.242\n204.74.115.240\n204.74.115.24\n204.74.115.239\n204.74.115.236\n204.74.115.234\n204.74.115.233\n204.74.115.231\n204.74.115.229\n204.74.115.225\n204.74.115.223\n204.74.115.221\n204.74.115.220\n204.74.115.219\n204.74.115.216\n204.74.115.213\n204.74.115.212\n204.74.115.211\n204.74.115.210\n204.74.115.21\n204.74.115.208\n204.74.115.207\n204.74.115.205\n204.74.115.204\n204.74.115.203\n204.74.115.201\n204.74.115.2\n204.74.115.199\n204.74.115.197\n204.74.115.196\n204.74.115.193\n204.74.115.192\n204.74.115.190\n204.74.115.189\n204.74.115.186\n204.74.115.184\n204.74.115.182\n204.74.115.181\n204.74.115.18\n204.74.115.179\n204.74.115.176\n204.74.115.174\n204.74.115.173\n204.74.115.171\n204.74.115.169\n204.74.115.168\n204.74.115.166\n204.74.115.165\n204.74.115.164\n204.74.115.163\n204.74.115.161\n204.74.115.160\n204.74.115.159\n204.74.115.158\n204.74.115.157\n204.74.115.156\n204.74.115.152\n204.74.115.151\n204.74.115.150\n204.74.115.15\n204.74.115.149\n204.74.115.148\n204.74.115.147\n204.74.115.145\n204.74.115.144\n204.74.115.141\n204.74.115.140\n204.74.115.138\n204.74.115.136\n204.74.115.134\n204.74.115.133\n204.74.115.132\n204.74.115.131\n204.74.115.128\n204.74.115.127\n204.74.115.124\n204.74.115.120\n204.74.115.118\n204.74.115.116\n204.74.115.115\n204.74.115.114\n204.74.115.112\n204.74.115.11\n204.74.115.109\n204.74.115.108\n204.74.115.106\n204.74.115.104\n204.74.114.98\n204.74.114.97\n204.74.114.96\n204.74.114.95\n204.74.114.93\n204.74.114.90\n204.74.114.9\n204.74.114.89\n204.74.114.86\n204.74.114.78\n204.74.114.77\n204.74.114.69\n204.74.114.64\n204.74.114.62\n204.74.114.61\n204.74.114.58\n204.74.114.55\n204.74.114.54\n204.74.114.51\n204.74.114.48\n204.74.114.47\n204.74.114.46\n204.74.114.45\n204.74.114.44\n204.74.114.43\n204.74.114.39\n204.74.114.34\n204.74.114.33\n204.74.114.30\n204.74.114.3\n204.74.114.28\n204.74.114.253\n204.74.114.252\n204.74.114.246\n204.74.114.243\n204.74.114.241\n204.74.114.238\n204.74.114.236\n204.74.114.235\n204.74.114.231\n204.74.114.229\n204.74.114.227\n204.74.114.224\n204.74.114.223\n204.74.114.222\n204.74.114.221\n204.74.114.218\n204.74.114.213\n204.74.114.205\n204.74.114.202\n204.74.114.201\n204.74.114.200\n204.74.114.20\n204.74.114.199\n204.74.114.198\n204.74.114.197\n204.74.114.190\n204.74.114.187\n204.74.114.180\n204.74.114.178\n204.74.114.176\n204.74.114.175\n204.74.114.174\n204.74.114.172\n204.74.114.170\n204.74.114.17\n204.74.114.169\n204.74.114.165\n204.74.114.163\n204.74.114.160\n204.74.114.16\n204.74.114.159\n204.74.114.155\n204.74.114.152\n204.74.114.151\n204.74.114.150\n204.74.114.147\n204.74.114.144\n204.74.114.143\n204.74.114.142\n204.74.114.141\n204.74.114.140\n204.74.114.14\n204.74.114.139\n204.74.114.135\n204.74.114.134\n204.74.114.132\n204.74.114.129\n204.74.114.126\n204.74.114.125\n204.74.114.124\n204.74.114.123\n204.74.114.120\n204.74.114.117\n204.74.114.116\n204.74.114.113\n204.74.114.111\n204.74.114.110\n204.74.114.11\n204.74.114.108\n204.74.114.105\n204.74.114.104\n204.74.111.99\n204.74.111.96\n204.74.111.95\n204.74.111.94\n204.74.111.93\n204.74.111.91\n204.74.111.90\n204.74.111.9\n204.74.111.87\n204.74.111.86\n204.74.111.85\n204.74.111.82\n204.74.111.81\n204.74.111.80\n204.74.111.8\n204.74.111.79\n204.74.111.74\n204.74.111.73\n204.74.111.71\n204.74.111.68\n204.74.111.65\n204.74.111.64\n204.74.111.61\n204.74.111.60\n204.74.111.59\n204.74.111.58\n204.74.111.57\n204.74.111.56\n204.74.111.55\n204.74.111.54\n204.74.111.53\n204.74.111.52\n204.74.111.5\n204.74.111.49\n204.74.111.47\n204.74.111.46\n204.74.111.45\n204.74.111.41\n204.74.111.40\n204.74.111.38\n204.74.111.37\n204.74.111.36\n204.74.111.35\n204.74.111.33\n204.74.111.32\n204.74.111.3\n204.74.111.29\n204.74.111.27\n204.74.111.253\n204.74.111.252\n204.74.111.251\n204.74.111.250\n204.74.111.249\n204.74.111.247\n204.74.111.246\n204.74.111.245\n204.74.111.241\n204.74.111.238\n204.74.111.236\n204.74.111.235\n204.74.111.234\n204.74.111.233\n204.74.111.232\n204.74.111.23\n204.74.111.229\n204.74.111.227\n204.74.111.225\n204.74.111.223\n204.74.111.220\n204.74.111.22\n204.74.111.219\n204.74.111.218\n204.74.111.217\n204.74.111.216\n204.74.111.215\n204.74.111.214\n204.74.111.212\n204.74.111.211\n204.74.111.21\n204.74.111.208\n204.74.111.207\n204.74.111.205\n204.74.111.204\n204.74.111.203\n204.74.111.20\n204.74.111.2\n204.74.111.199\n204.74.111.197\n204.74.111.196\n204.74.111.194\n204.74.111.192\n204.74.111.191\n204.74.111.189\n204.74.111.188\n204.74.111.186\n204.74.111.185\n204.74.111.182\n204.74.111.181\n204.74.111.18\n204.74.111.179\n204.74.111.178\n204.74.111.176\n204.74.111.175\n204.74.111.173\n204.74.111.172\n204.74.111.171\n204.74.111.169\n204.74.111.168\n204.74.111.166\n204.74.111.164\n204.74.111.163\n204.74.111.162\n204.74.111.16\n204.74.111.158\n204.74.111.157\n204.74.111.156\n204.74.111.155\n204.74.111.154\n204.74.111.152\n204.74.111.150\n204.74.111.146\n204.74.111.145\n204.74.111.144\n204.74.111.143\n204.74.111.14\n204.74.111.139\n204.74.111.138\n204.74.111.137\n204.74.111.136\n204.74.111.133\n204.74.111.132\n204.74.111.13\n204.74.111.125\n204.74.111.124\n204.74.111.12\n204.74.111.118\n204.74.111.117\n204.74.111.115\n204.74.111.111\n204.74.111.11\n204.74.111.107\n204.74.111.106\n204.74.111.104\n204.74.111.103\n204.74.111.100\n204.74.111.10\n204.74.111.1\n204.74.110.96\n204.74.110.95\n204.74.110.93\n204.74.110.90\n204.74.110.89\n204.74.110.84\n204.74.110.83\n204.74.110.81\n204.74.110.80\n204.74.110.78\n204.74.110.77\n204.74.110.74\n204.74.110.72\n204.74.110.7\n204.74.110.66\n204.74.110.63\n204.74.110.62\n204.74.110.6\n204.74.110.58\n204.74.110.56\n204.74.110.50\n204.74.110.5\n204.74.110.47\n204.74.110.44\n204.74.110.43\n204.74.110.42\n204.74.110.35\n204.74.110.34\n204.74.110.33\n204.74.110.30\n204.74.110.3\n204.74.110.29\n204.74.110.28\n204.74.110.254\n204.74.110.252\n204.74.110.25\n204.74.110.249\n204.74.110.245\n204.74.110.244\n204.74.110.242\n204.74.110.241\n204.74.110.24\n204.74.110.238\n204.74.110.236\n204.74.110.235\n204.74.110.224\n204.74.110.223\n204.74.110.221\n204.74.110.220\n204.74.110.216\n204.74.110.211\n204.74.110.210\n204.74.110.21\n204.74.110.209\n204.74.110.203\n204.74.110.200\n204.74.110.195\n204.74.110.193\n204.74.110.192\n204.74.110.19\n204.74.110.188\n204.74.110.182\n204.74.110.180\n204.74.110.18\n204.74.110.176\n204.74.110.173\n204.74.110.172\n204.74.110.166\n204.74.110.165\n204.74.110.164\n204.74.110.163\n204.74.110.162\n204.74.110.161\n204.74.110.16\n204.74.110.156\n204.74.110.154\n204.74.110.153\n204.74.110.151\n204.74.110.150\n204.74.110.15\n204.74.110.149\n204.74.110.148\n204.74.110.147\n204.74.110.138\n204.74.110.137\n204.74.110.134\n204.74.110.131\n204.74.110.128\n204.74.110.127\n204.74.110.124\n204.74.110.121\n204.74.110.120\n204.74.110.119\n204.74.110.116\n204.74.110.111\n204.74.110.108\n204.74.110.103\n204.74.110.1\n204.74.109.99\n204.74.109.98\n204.74.109.97\n204.74.109.96\n204.74.109.95\n204.74.109.94\n204.74.109.90\n204.74.109.89\n204.74.109.88\n204.74.109.86\n204.74.109.84\n204.74.109.83\n204.74.109.81\n204.74.109.8\n204.74.109.76\n204.74.109.74\n204.74.109.73\n204.74.109.72\n204.74.109.71\n204.74.109.70\n204.74.109.69\n204.74.109.68\n204.74.109.65\n204.74.109.63\n204.74.109.62\n204.74.109.6\n204.74.109.59\n204.74.109.57\n204.74.109.52\n204.74.109.51\n204.74.109.48\n204.74.109.46\n204.74.109.45\n204.74.109.43\n204.74.109.41\n204.74.109.40\n204.74.109.4\n204.74.109.39\n204.74.109.38\n204.74.109.37\n204.74.109.35\n204.74.109.34\n204.74.109.33\n204.74.109.31\n204.74.109.30\n204.74.109.3\n204.74.109.29\n204.74.109.28\n204.74.109.254\n204.74.109.252\n204.74.109.247\n204.74.109.246\n204.74.109.244\n204.74.109.243\n204.74.109.242\n204.74.109.24\n204.74.109.239\n204.74.109.237\n204.74.109.236\n204.74.109.235\n204.74.109.233\n204.74.109.232\n204.74.109.228\n204.74.109.227\n204.74.109.221\n204.74.109.219\n204.74.109.218\n204.74.109.216\n204.74.109.215\n204.74.109.214\n204.74.109.213\n204.74.109.211\n204.74.109.210\n204.74.109.207\n204.74.109.206\n204.74.109.204\n204.74.109.203\n204.74.109.202\n204.74.109.201\n204.74.109.200\n204.74.109.198\n204.74.109.197\n204.74.109.193\n204.74.109.192\n204.74.109.191\n204.74.109.19\n204.74.109.189\n204.74.109.186\n204.74.109.185\n204.74.109.184\n204.74.109.183\n204.74.109.181\n204.74.109.180\n204.74.109.179\n204.74.109.175\n204.74.109.174\n204.74.109.172\n204.74.109.171\n204.74.109.170\n204.74.109.17\n204.74.109.169\n204.74.109.168\n204.74.109.167\n204.74.109.166\n204.74.109.165\n204.74.109.164\n204.74.109.161\n204.74.109.16\n204.74.109.159\n204.74.109.158\n204.74.109.155\n204.74.109.154\n204.74.109.152\n204.74.109.150\n204.74.109.149\n204.74.109.148\n204.74.109.147\n204.74.109.146\n204.74.109.145\n204.74.109.143\n204.74.109.141\n204.74.109.140\n204.74.109.138\n204.74.109.137\n204.74.109.136\n204.74.109.133\n204.74.109.132\n204.74.109.131\n204.74.109.130\n204.74.109.129\n204.74.109.128\n204.74.109.127\n204.74.109.126\n204.74.109.125\n204.74.109.124\n204.74.109.122\n204.74.109.121\n204.74.109.119\n204.74.109.118\n204.74.109.117\n204.74.109.116\n204.74.109.114\n204.74.109.113\n204.74.109.112\n204.74.109.111\n204.74.109.110\n204.74.109.11\n204.74.109.105\n204.74.109.104\n204.74.109.103\n204.74.109.102\n204.74.109.100\n204.74.109.10\n204.74.108.97\n204.74.108.96\n204.74.108.95\n204.74.108.94\n204.74.108.91\n204.74.108.90\n204.74.108.89\n204.74.108.85\n204.74.108.84\n204.74.108.82\n204.74.108.80\n204.74.108.8\n204.74.108.79\n204.74.108.78\n204.74.108.77\n204.74.108.72\n204.74.108.71\n204.74.108.7\n204.74.108.69\n204.74.108.68\n204.74.108.67\n204.74.108.63\n204.74.108.62\n204.74.108.6\n204.74.108.55\n204.74.108.52\n204.74.108.51\n204.74.108.49\n204.74.108.48\n204.74.108.45\n204.74.108.43\n204.74.108.41\n204.74.108.39\n204.74.108.38\n204.74.108.37\n204.74.108.36\n204.74.108.34\n204.74.108.33\n204.74.108.32\n204.74.108.30\n204.74.108.28\n204.74.108.252\n204.74.108.251\n204.74.108.249\n204.74.108.248\n204.74.108.247\n204.74.108.246\n204.74.108.244\n204.74.108.242\n204.74.108.238\n204.74.108.237\n204.74.108.234\n204.74.108.23\n204.74.108.229\n204.74.108.228\n204.74.108.227\n204.74.108.225\n204.74.108.224\n204.74.108.220\n204.74.108.22\n204.74.108.219\n204.74.108.218\n204.74.108.217\n204.74.108.215\n204.74.108.213\n204.74.108.211\n204.74.108.208\n204.74.108.207\n204.74.108.206\n204.74.108.203\n204.74.108.201\n204.74.108.200\n204.74.108.20\n204.74.108.2\n204.74.108.199\n204.74.108.198\n204.74.108.197\n204.74.108.196\n204.74.108.194\n204.74.108.193\n204.74.108.192\n204.74.108.191\n204.74.108.190\n204.74.108.19\n204.74.108.189\n204.74.108.187\n204.74.108.185\n204.74.108.183\n204.74.108.180\n204.74.108.18\n204.74.108.178\n204.74.108.176\n204.74.108.174\n204.74.108.171\n204.74.108.169\n204.74.108.167\n204.74.108.164\n204.74.108.163\n204.74.108.162\n204.74.108.161\n204.74.108.160\n204.74.108.16\n204.74.108.159\n204.74.108.156\n204.74.108.155\n204.74.108.152\n204.74.108.151\n204.74.108.150\n204.74.108.149\n204.74.108.147\n204.74.108.144\n204.74.108.142\n204.74.108.141\n204.74.108.140\n204.74.108.139\n204.74.108.138\n204.74.108.137\n204.74.108.133\n204.74.108.132\n204.74.108.131\n204.74.108.130\n204.74.108.124\n204.74.108.123\n204.74.108.122\n204.74.108.121\n204.74.108.12\n204.74.108.118\n204.74.108.115\n204.74.108.114\n204.74.108.113\n204.74.108.109\n204.74.108.105\n204.74.108.103\n204.74.108.102\n204.74.108.100\n204.74.101.99\n204.74.101.98\n204.74.101.97\n204.74.101.96\n204.74.101.95\n204.74.101.94\n204.74.101.93\n204.74.101.92\n204.74.101.91\n204.74.101.90\n204.74.101.89\n204.74.101.87\n204.74.101.86\n204.74.101.82\n204.74.101.81\n204.74.101.80\n204.74.101.79\n204.74.101.78\n204.74.101.77\n204.74.101.76\n204.74.101.75\n204.74.101.74\n204.74.101.73\n204.74.101.72\n204.74.101.71\n204.74.101.7\n204.74.101.69\n204.74.101.67\n204.74.101.64\n204.74.101.63\n204.74.101.62\n204.74.101.61\n204.74.101.60\n204.74.101.6\n204.74.101.59\n204.74.101.58\n204.74.101.57\n204.74.101.56\n204.74.101.55\n204.74.101.53\n204.74.101.51\n204.74.101.49\n204.74.101.48\n204.74.101.47\n204.74.101.45\n204.74.101.40\n204.74.101.39\n204.74.101.38\n204.74.101.37\n204.74.101.36\n204.74.101.35\n204.74.101.34\n204.74.101.33\n204.74.101.31\n204.74.101.29\n204.74.101.254\n204.74.101.251\n204.74.101.250\n204.74.101.25\n204.74.101.249\n204.74.101.248\n204.74.101.246\n204.74.101.244\n204.74.101.243\n204.74.101.242\n204.74.101.241\n204.74.101.24\n204.74.101.238\n204.74.101.237\n204.74.101.236\n204.74.101.235\n204.74.101.233\n204.74.101.232\n204.74.101.231\n204.74.101.23\n204.74.101.228\n204.74.101.227\n204.74.101.225\n204.74.101.224\n204.74.101.223\n204.74.101.222\n204.74.101.220\n204.74.101.22\n204.74.101.219\n204.74.101.217\n204.74.101.214\n204.74.101.213\n204.74.101.209\n204.74.101.207\n204.74.101.205\n204.74.101.203\n204.74.101.200\n204.74.101.20\n204.74.101.2\n204.74.101.197\n204.74.101.196\n204.74.101.195\n204.74.101.192\n204.74.101.191\n204.74.101.19\n204.74.101.186\n204.74.101.185\n204.74.101.182\n204.74.101.180\n204.74.101.18\n204.74.101.179\n204.74.101.178\n204.74.101.175\n204.74.101.173\n204.74.101.169\n204.74.101.166\n204.74.101.164\n204.74.101.162\n204.74.101.16\n204.74.101.153\n204.74.101.151\n204.74.101.150\n204.74.101.149\n204.74.101.148\n204.74.101.144\n204.74.101.143\n204.74.101.140\n204.74.101.137\n204.74.101.136\n204.74.101.135\n204.74.101.133\n204.74.101.132\n204.74.101.131\n204.74.101.13\n204.74.101.128\n204.74.101.125\n204.74.101.122\n204.74.101.121\n204.74.101.12\n204.74.101.118\n204.74.101.117\n204.74.101.115\n204.74.101.113\n204.74.101.111\n204.74.101.11\n204.74.101.109\n204.74.101.107\n204.74.101.106\n204.74.101.105\n204.74.101.104\n204.74.101.101\n204.74.101.10\n204.70.127.128\n204.70.127.127\n204.69.234.99\n204.69.234.98\n204.69.234.96\n204.69.234.95\n204.69.234.93\n204.69.234.91\n204.69.234.90\n204.69.234.9\n204.69.234.89\n204.69.234.88\n204.69.234.87\n204.69.234.86\n204.69.234.84\n204.69.234.83\n204.69.234.82\n204.69.234.81\n204.69.234.80\n204.69.234.79\n204.69.234.78\n204.69.234.77\n204.69.234.72\n204.69.234.71\n204.69.234.70\n204.69.234.7\n204.69.234.69\n204.69.234.68\n204.69.234.67\n204.69.234.64\n204.69.234.62\n204.69.234.61\n204.69.234.60\n204.69.234.59\n204.69.234.58\n204.69.234.57\n204.69.234.54\n204.69.234.53\n204.69.234.51\n204.69.234.50\n204.69.234.49\n204.69.234.48\n204.69.234.47\n204.69.234.46\n204.69.234.44\n204.69.234.42\n204.69.234.41\n204.69.234.40\n204.69.234.4\n204.69.234.39\n204.69.234.38\n204.69.234.33\n204.69.234.32\n204.69.234.31\n204.69.234.28\n204.69.234.27\n204.69.234.26\n204.69.234.253\n204.69.234.252\n204.69.234.25\n204.69.234.249\n204.69.234.246\n204.69.234.245\n204.69.234.244\n204.69.234.243\n204.69.234.242\n204.69.234.241\n204.69.234.240\n204.69.234.24\n204.69.234.238\n204.69.234.237\n204.69.234.232\n204.69.234.231\n204.69.234.230\n204.69.234.23\n204.69.234.229\n204.69.234.228\n204.69.234.227\n204.69.234.225\n204.69.234.224\n204.69.234.221\n204.69.234.220\n204.69.234.219\n204.69.234.218\n204.69.234.217\n204.69.234.216\n204.69.234.215\n204.69.234.214\n204.69.234.210\n204.69.234.21\n204.69.234.207\n204.69.234.206\n204.69.234.205\n204.69.234.203\n204.69.234.202\n204.69.234.201\n204.69.234.200\n204.69.234.199\n204.69.234.198\n204.69.234.197\n204.69.234.196\n204.69.234.195\n204.69.234.193\n204.69.234.192\n204.69.234.191\n204.69.234.190\n204.69.234.19\n204.69.234.189\n204.69.234.188\n204.69.234.187\n204.69.234.185\n204.69.234.181\n204.69.234.180\n204.69.234.18\n204.69.234.178\n204.69.234.177\n204.69.234.176\n204.69.234.175\n204.69.234.174\n204.69.234.173\n204.69.234.172\n204.69.234.171\n204.69.234.17\n204.69.234.168\n204.69.234.166\n204.69.234.165\n204.69.234.164\n204.69.234.163\n204.69.234.162\n204.69.234.160\n204.69.234.16\n204.69.234.158\n204.69.234.157\n204.69.234.155\n204.69.234.154\n204.69.234.152\n204.69.234.151\n204.69.234.150\n204.69.234.148\n204.69.234.145\n204.69.234.143\n204.69.234.142\n204.69.234.14\n204.69.234.139\n204.69.234.137\n204.69.234.135\n204.69.234.133\n204.69.234.130\n204.69.234.129\n204.69.234.127\n204.69.234.125\n204.69.234.124\n204.69.234.123\n204.69.234.122\n204.69.234.121\n204.69.234.120\n204.69.234.12\n204.69.234.118\n204.69.234.117\n204.69.234.116\n204.69.234.115\n204.69.234.113\n204.69.234.112\n204.69.234.111\n204.69.234.110\n204.69.234.107\n204.69.234.106\n204.69.234.105\n204.69.234.103\n204.69.234.102\n204.69.234.100\n204.69.234.1\n204.62.22.103\n204.57.66.2\n204.50.102.243\n204.48.24.104\n204.48.22.68\n204.246.56.12\n204.246.56.100\n204.246.1.36\n204.238.24.10\n204.225.44.3\n204.209.20.154\n204.2.152.19\n204.199.129.38\n204.199.103.180\n204.194.234.200\n204.194.232.200\n204.191.10.5\n204.186.80.193\n204.156.192.68\n204.15.148.186\n204.131.92.115\n204.131.88.138\n204.131.229.119\n204.116.57.2\n204.111.39.9\n204.106.240.4\n203.96.180.18\n203.89.132.4\n203.86.200.253\n203.85.128.252\n203.82.42.180\n203.8.201.11\n203.8.201.10\n203.78.194.179\n203.69.232.60\n203.66.57.148\n203.59.131.91\n203.54.212.126\n203.52.58.169\n203.52.58.161\n203.50.2.71\n203.47.150.183\n203.47.150.176\n203.39.3.133\n203.38.224.193\n203.36.134.238\n203.253.64.1\n203.253.179.3\n203.253.179.2\n203.251.201.1\n203.251.183.5\n203.249.171.2\n203.249.161.2\n203.249.112.101\n203.248.252.2\n203.248.116.42\n203.246.40.2\n203.242.200.6\n203.242.200.5\n203.240.193.11\n203.239.133.223\n203.239.131.1\n203.239.130.3\n203.239.130.1\n203.236.20.11\n203.236.123.10\n203.236.120.80\n203.236.1.12\n203.232.27.11\n203.232.186.58\n203.232.166.2\n203.232.148.3\n203.230.220.2\n203.229.206.20\n203.228.22.223\n203.227.168.2\n203.225.255.11\n203.225.255.10\n203.215.186.37\n203.215.181.201\n203.213.96.4\n203.212.200.209\n203.209.181.154\n203.202.248.5\n203.201.60.5\n203.198.214.41\n203.198.167.39\n203.198.161.89\n203.190.43.46\n203.190.43.107\n203.190.27.235\n203.190.27.234\n203.190.254.3\n203.188.242.211\n203.186.102.170\n203.178.136.36\n203.177.88.250\n203.177.84.2\n203.177.215.1\n203.177.190.130\n203.177.0.158\n203.176.237.36\n203.176.102.68\n203.174.48.83\n203.173.163.89\n203.169.48.8\n203.169.4.1\n203.167.92.254\n203.162.39.66\n203.159.77.77\n203.158.9.5\n203.158.15.67\n203.154.91.1\n203.154.62.1\n203.154.58.1\n203.154.177.8\n203.153.41.205\n203.151.59.20\n203.150.48.128\n203.150.37.11\n203.150.37.10\n203.150.199.17\n203.150.197.136\n203.150.167.19\n203.150.128.133\n203.147.94.71\n203.147.6.30\n203.144.139.244\n203.144.13.250\n203.141.198.193\n203.135.31.114\n203.131.211.181\n203.129.31.67\n203.129.25.39\n203.128.16.2\n203.127.160.67\n203.127.160.66\n203.127.112.132\n203.126.30.39\n203.126.118.38\n203.125.83.122\n203.125.208.78\n203.121.145.77\n203.119.8.106\n203.115.130.74\n203.114.39.110\n203.113.148.12\n203.113.135.28\n203.113.135.26\n202.90.137.75\n202.89.125.8\n202.87.214.253\n202.87.213.253\n202.86.8.100\n202.86.149.20\n202.86.149.18\n202.84.37.99\n202.84.37.100\n202.83.175.188\n202.83.175.187\n202.83.175.182\n202.82.66.142\n202.82.121.113\n202.80.247.34\n202.78.224.130\n202.78.224.129\n202.73.30.98\n202.72.201.46\n202.70.77.101\n202.70.76.13\n202.69.50.49\n202.69.50.161\n202.67.10.108\n202.64.161.118\n202.63.197.114\n202.62.77.2\n202.62.222.222\n202.62.222.220\n202.61.251.9\n202.60.193.137\n202.6.96.4\n202.58.18.18\n202.57.32.1\n202.55.176.11\n202.55.176.10\n202.5.200.8\n202.5.192.9\n202.46.34.75\n202.46.34.74\n202.46.33.250\n202.44.52.1\n202.43.108.1\n202.41.213.33\n202.30.143.44\n202.30.143.41\n202.30.143.11\n202.30.0.11\n202.3.229.2\n202.29.9.46\n202.29.53.4\n202.29.51.130\n202.29.33.51\n202.29.242.222\n202.29.240.110\n202.29.239.134\n202.29.236.57\n202.29.232.113\n202.29.228.142\n202.29.225.26\n202.29.22.4\n202.29.219.154\n202.29.218.142\n202.29.218.138\n202.29.216.54\n202.29.214.86\n202.29.214.22\n202.29.173.61\n202.28.66.3\n202.248.37.74\n202.248.20.133\n202.248.175.138\n202.238.55.204\n202.233.9.234\n202.229.255.8\n202.219.63.253\n202.213.33.133\n202.210.190.99\n202.188.124.58\n202.186.1.57\n202.184.80.21\n202.183.195.162\n202.183.153.140\n202.182.0.2\n202.182.0.1\n202.181.242.131\n202.181.233.243\n202.181.178.163\n202.175.86.206\n202.175.66.122\n202.175.45.2\n202.175.113.124\n202.173.208.2\n202.173.208.1\n202.166.161.107\n202.165.94.226\n202.164.153.87\n202.164.153.108\n202.164.150.220\n202.164.140.95\n202.164.140.93\n202.164.140.88\n202.164.140.67\n202.164.140.31\n202.164.140.203\n202.163.110.163\n202.157.177.4\n202.155.222.251\n202.155.202.75\n202.155.197.230\n202.153.110.47\n202.151.81.209\n202.149.205.59\n202.149.205.15\n202.149.204.207\n202.146.34.251\n202.143.118.53\n202.142.189.98\n202.142.179.66\n202.142.133.126\n202.14.14.99\n202.14.14.97\n202.138.73.149\n202.136.180.57\n202.136.120.187\n202.133.101.116\n202.131.73.38\n202.130.97.66\n202.130.97.65\n202.129.59.69\n202.129.207.29\n202.129.207.28\n202.129.206.237\n202.129.196.242\n202.129.1.186\n202.129.0.27\n202.126.100.157\n202.125.84.197\n202.124.192.10\n202.124.128.3\n202.123.179.205\n201.96.47.101\n201.96.27.129\n201.76.162.156\n201.76.161.162\n201.6.254.155\n201.54.224.134\n201.48.9.5\n201.48.9.4\n201.253.120.219\n201.251.135.168\n201.251.135.167\n201.247.112.236\n201.238.243.245\n201.238.128.199\n201.234.210.179\n201.234.186.234\n201.234.186.225\n201.234.138.252\n201.229.68.14\n201.222.53.130\n201.222.50.30\n201.219.218.130\n201.219.193.1\n201.219.154.75\n201.218.223.138\n201.218.219.210\n201.218.125.251\n201.217.57.148\n201.216.230.100\n201.21.195.129\n201.200.130.36\n201.200.130.35\n201.194.193.31\n201.190.178.156\n201.190.11.254\n201.184.60.178\n201.184.237.218\n201.184.225.210\n201.184.224.50\n201.184.187.98\n201.184.180.58\n201.184.175.242\n201.184.167.2\n201.184.126.218\n201.182.70.106\n201.182.66.37\n201.182.22.253\n201.174.80.34\n201.174.80.178\n201.174.235.68\n201.171.254.115\n201.170.249.229\n201.165.54.242\n201.164.60.34\n201.164.154.202\n201.163.94.65\n201.163.81.90\n201.16.253.25\n201.16.214.164\n201.156.1.226\n201.151.40.54\n201.151.196.110\n201.151.196.107\n201.150.35.124\n201.149.94.61\n201.148.95.234\n201.148.17.116\n201.148.17.110\n201.148.107.70\n201.148.107.14\n201.147.242.124\n201.147.242.119\n201.144.40.97\n201.143.181.110\n201.140.157.33\n201.140.114.161\n201.132.162.254\n201.130.73.234\n201.101.2.38\n200.95.184.33\n200.95.184.22\n200.95.144.3\n200.94.26.115\n200.94.26.114\n200.94.21.29\n200.94.156.193\n200.92.202.26\n200.91.34.20\n200.91.28.35\n200.9.155.203\n200.89.142.74\n200.89.134.202\n200.85.7.28\n200.85.61.90\n200.85.61.34\n200.85.39.94\n200.80.232.12\n200.80.203.75\n200.78.242.11\n200.76.52.60\n200.76.5.147\n200.75.8.110\n200.74.203.116\n200.73.113.158\n200.69.79.50\n200.69.226.98\n200.69.212.177\n200.68.46.21\n200.62.147.66\n200.6.253.74\n200.58.84.94\n200.58.182.186\n200.58.180.50\n200.57.7.61\n200.56.98.145\n200.56.98.113\n200.56.224.11\n200.56.117.25\n200.55.59.102\n200.55.59.101\n200.55.248.253\n200.54.9.138\n200.54.51.6\n200.54.22.74\n200.52.80.60\n200.5.90.102\n200.5.119.178\n200.5.115.26\n200.49.1.8\n200.45.14.178\n200.44.190.134\n200.41.174.20\n200.41.102.254\n200.39.23.4\n200.37.71.3\n200.37.203.90\n200.35.94.41\n200.35.79.41\n200.35.110.9\n200.33.3.123\n200.29.255.3\n200.29.255.2\n200.29.109.112\n200.29.108.64\n200.25.254.134\n200.248.178.54\n200.24.131.97\n200.229.252.65\n200.229.252.196\n200.229.252.171\n200.229.252.17\n200.221.11.101\n200.221.11.100\n200.219.224.172\n200.214.186.3\n200.21.227.130\n200.207.143.93\n200.201.191.91\n200.2.116.245\n200.195.170.186\n200.195.154.122\n200.19.203.1\n200.186.194.135\n200.186.1.135\n200.182.63.96\n200.171.40.210\n200.169.8.1\n200.169.2.2\n200.150.103.60\n200.142.106.130\n200.125.171.220\n200.125.171.219\n200.125.171.171\n200.125.171.170\n200.125.171.117\n200.124.124.190\n200.123.208.126\n200.12.251.226\n200.119.222.242\n200.116.231.27\n200.114.96.11\n200.114.113.67\n200.113.10.155\n200.112.143.5\n200.111.82.197\n200.111.47.43\n200.111.143.146\n200.110.219.225\n200.110.219.162\n200.110.168.42\n200.11.52.202\n200.11.138.12\n200.11.138.11\n200.108.46.242\n200.108.139.254\n200.108.131.206\n200.106.167.196\n200.106.167.195\n200.105.96.57\n200.105.192.6\n200.10.231.110\n200.10.221.16\n200.10.156.62\n200.1.104.36\n200.1.104.35\n20.93.144.220\n20.92.135.165\n20.71.128.65\n20.65.24.202\n20.46.112.146\n20.44.248.67\n20.44.201.37\n20.43.154.54\n20.38.170.198\n20.36.30.173\n20.242.194.111\n20.220.73.158\n20.212.94.189\n20.203.40.214\n20.203.17.58\n20.193.27.225\n20.14.83.169\n20.112.30.229\n20.106.145.8\n2.85.181.242\n2.78.57.194\n2.63.220.22\n2.63.188.10\n2.63.175.22\n2.60.245.18\n2.60.117.118\n2.59.241.54\n2.59.241.250\n2.59.241.23\n2.59.135.250\n2.56.220.2\n2.56.182.37\n2.55.72.107\n2.55.127.105\n2.52.252.252\n2.47.138.139\n2.40.63.222\n2.40.45.218\n2.40.119.162\n2.32.175.178\n2.229.72.225\n2.229.16.101\n2.207.170.66\n2.189.44.44\n2.188.21.130\n2.136.93.224\n2.136.37.48\n2.119.131.34\n2.105.69.220\n199.88.158.1\n199.85.127.30\n199.85.127.20\n199.85.127.10\n199.85.126.30\n199.85.126.20\n199.85.126.10\n199.76.39.72\n199.7.69.99\n199.7.69.98\n199.7.69.96\n199.7.69.94\n199.7.69.93\n199.7.69.91\n199.7.69.90\n199.7.69.9\n199.7.69.88\n199.7.69.87\n199.7.69.85\n199.7.69.83\n199.7.69.82\n199.7.69.81\n199.7.69.8\n199.7.69.79\n199.7.69.78\n199.7.69.73\n199.7.69.72\n199.7.69.71\n199.7.69.7\n199.7.69.68\n199.7.69.66\n199.7.69.65\n199.7.69.64\n199.7.69.62\n199.7.69.6\n199.7.69.58\n199.7.69.56\n199.7.69.54\n199.7.69.53\n199.7.69.49\n199.7.69.46\n199.7.69.45\n199.7.69.44\n199.7.69.43\n199.7.69.36\n199.7.69.34\n199.7.69.32\n199.7.69.31\n199.7.69.3\n199.7.69.29\n199.7.69.26\n199.7.69.254\n199.7.69.251\n199.7.69.250\n199.7.69.25\n199.7.69.249\n199.7.69.248\n199.7.69.246\n199.7.69.243\n199.7.69.242\n199.7.69.24\n199.7.69.239\n199.7.69.238\n199.7.69.234\n199.7.69.231\n199.7.69.230\n199.7.69.229\n199.7.69.226\n199.7.69.225\n199.7.69.221\n199.7.69.214\n199.7.69.213\n199.7.69.212\n199.7.69.210\n199.7.69.208\n199.7.69.201\n199.7.69.200\n199.7.69.20\n199.7.69.2\n199.7.69.198\n199.7.69.189\n199.7.69.188\n199.7.69.184\n199.7.69.181\n199.7.69.179\n199.7.69.178\n199.7.69.176\n199.7.69.174\n199.7.69.171\n199.7.69.170\n199.7.69.17\n199.7.69.167\n199.7.69.164\n199.7.69.162\n199.7.69.161\n199.7.69.160\n199.7.69.16\n199.7.69.159\n199.7.69.156\n199.7.69.154\n199.7.69.151\n199.7.69.15\n199.7.69.147\n199.7.69.145\n199.7.69.144\n199.7.69.143\n199.7.69.141\n199.7.69.140\n199.7.69.139\n199.7.69.137\n199.7.69.136\n199.7.69.134\n199.7.69.133\n199.7.69.131\n199.7.69.13\n199.7.69.126\n199.7.69.125\n199.7.69.124\n199.7.69.123\n199.7.69.121\n199.7.69.12\n199.7.69.119\n199.7.69.117\n199.7.69.115\n199.7.69.113\n199.7.69.112\n199.7.69.109\n199.7.69.108\n199.7.69.106\n199.7.69.103\n199.7.69.100\n199.7.69.10\n199.7.69.1\n199.7.68.99\n199.7.68.97\n199.7.68.93\n199.7.68.92\n199.7.68.91\n199.7.68.9\n199.7.68.89\n199.7.68.88\n199.7.68.86\n199.7.68.85\n199.7.68.83\n199.7.68.82\n199.7.68.77\n199.7.68.76\n199.7.68.75\n199.7.68.73\n199.7.68.72\n199.7.68.71\n199.7.68.70\n199.7.68.69\n199.7.68.68\n199.7.68.66\n199.7.68.63\n199.7.68.62\n199.7.68.56\n199.7.68.53\n199.7.68.52\n199.7.68.51\n199.7.68.49\n199.7.68.48\n199.7.68.45\n199.7.68.44\n199.7.68.43\n199.7.68.41\n199.7.68.4\n199.7.68.38\n199.7.68.36\n199.7.68.35\n199.7.68.34\n199.7.68.32\n199.7.68.29\n199.7.68.27\n199.7.68.26\n199.7.68.251\n199.7.68.250\n199.7.68.25\n199.7.68.248\n199.7.68.244\n199.7.68.243\n199.7.68.240\n199.7.68.24\n199.7.68.239\n199.7.68.237\n199.7.68.236\n199.7.68.234\n199.7.68.233\n199.7.68.231\n199.7.68.23\n199.7.68.229\n199.7.68.227\n199.7.68.226\n199.7.68.225\n199.7.68.223\n199.7.68.222\n199.7.68.221\n199.7.68.219\n199.7.68.217\n199.7.68.216\n199.7.68.215\n199.7.68.214\n199.7.68.213\n199.7.68.212\n199.7.68.211\n199.7.68.210\n199.7.68.21\n199.7.68.209\n199.7.68.208\n199.7.68.207\n199.7.68.204\n199.7.68.203\n199.7.68.202\n199.7.68.201\n199.7.68.200\n199.7.68.20\n199.7.68.198\n199.7.68.197\n199.7.68.195\n199.7.68.192\n199.7.68.188\n199.7.68.185\n199.7.68.184\n199.7.68.181\n199.7.68.18\n199.7.68.179\n199.7.68.175\n199.7.68.173\n199.7.68.172\n199.7.68.171\n199.7.68.17\n199.7.68.168\n199.7.68.167\n199.7.68.166\n199.7.68.165\n199.7.68.161\n199.7.68.160\n199.7.68.159\n199.7.68.158\n199.7.68.157\n199.7.68.156\n199.7.68.153\n199.7.68.152\n199.7.68.149\n199.7.68.148\n199.7.68.145\n199.7.68.144\n199.7.68.143\n199.7.68.141\n199.7.68.140\n199.7.68.14\n199.7.68.139\n199.7.68.137\n199.7.68.134\n199.7.68.133\n199.7.68.132\n199.7.68.131\n199.7.68.13\n199.7.68.128\n199.7.68.127\n199.7.68.124\n199.7.68.123\n199.7.68.121\n199.7.68.119\n199.7.68.118\n199.7.68.115\n199.7.68.113\n199.7.68.110\n199.7.68.109\n199.7.68.108\n199.7.68.104\n199.7.68.102\n199.7.68.101\n199.7.68.100\n199.7.68.10\n199.58.81.218\n199.44.194.3\n199.44.194.2\n199.243.95.1\n199.241.172.22\n199.218.114.27\n199.203.56.218\n199.195.54.137\n199.193.83.137\n199.193.80.46\n199.193.74.45\n199.193.74.42\n199.192.161.86\n199.192.161.23\n199.192.160.102\n199.166.6.62\n199.166.6.2\n199.127.219.254\n199.117.92.73\n199.116.57.181\n199.101.48.17\n198.99.193.2\n198.99.193.1\n198.82.247.98\n198.82.247.66\n198.82.247.34\n198.71.62.239\n198.71.117.66\n198.60.22.22\n198.60.22.2\n198.54.117.11\n198.54.117.10\n198.52.242.90\n198.41.223.98\n198.41.223.93\n198.41.223.83\n198.41.223.73\n198.41.223.64\n198.41.223.63\n198.41.223.61\n198.41.223.55\n198.41.223.42\n198.41.223.40\n198.41.223.38\n198.41.223.251\n198.41.223.250\n198.41.223.245\n198.41.223.238\n198.41.223.224\n198.41.223.215\n198.41.223.210\n198.41.223.207\n198.41.223.204\n198.41.223.200\n198.41.223.189\n198.41.223.177\n198.41.223.127\n198.41.223.124\n198.41.223.112\n198.41.222.87\n198.41.222.8\n198.41.222.75\n198.41.222.67\n198.41.222.6\n198.41.222.57\n198.41.222.49\n198.41.222.42\n198.41.222.36\n198.41.222.32\n198.41.222.249\n198.41.222.24\n198.41.222.239\n198.41.222.237\n198.41.222.236\n198.41.222.233\n198.41.222.230\n198.41.222.229\n198.41.222.227\n198.41.222.226\n198.41.222.221\n198.41.222.220\n198.41.222.205\n198.41.222.198\n198.41.222.197\n198.41.222.194\n198.41.222.188\n198.41.222.186\n198.41.222.172\n198.41.222.170\n198.41.222.169\n198.41.222.167\n198.41.222.159\n198.41.222.150\n198.41.222.15\n198.41.222.147\n198.41.222.145\n198.41.222.142\n198.41.222.141\n198.41.222.14\n198.41.222.128\n198.41.222.120\n198.41.222.116\n198.41.222.110\n198.41.222.107\n198.41.222.101\n198.251.100.2\n198.245.51.147\n198.243.48.167\n198.233.215.56\n198.190.195.80\n198.180.225.180\n198.175.228.44\n198.175.228.33\n198.153.194.60\n198.153.194.50\n198.153.194.40\n198.153.194.210\n198.153.194.200\n198.153.194.140\n198.153.194.130\n198.153.194.120\n198.153.194.1\n198.153.192.50\n198.153.192.40\n198.153.192.32\n198.153.192.210\n198.153.192.140\n198.153.192.1\n198.136.58.194\n198.135.221.2\n197.91.185.58\n197.91.174.198\n197.91.170.214\n197.90.203.87\n197.90.203.50\n197.253.36.34\n197.251.239.245\n197.251.204.34\n197.248.131.203\n197.248.125.181\n197.248.0.34\n197.243.90.62\n197.235.15.47\n197.232.66.154\n197.232.52.61\n197.232.21.96\n197.232.155.47\n197.232.124.205\n197.231.180.83\n197.230.97.29\n197.230.92.90\n197.230.84.1\n197.230.250.150\n197.230.245.130\n197.230.189.218\n197.230.188.74\n197.230.174.153\n197.230.162.89\n197.230.161.193\n197.230.161.122\n197.230.15.206\n197.230.145.10\n197.230.103.202\n197.221.82.226\n197.221.82.2\n197.215.217.251\n197.214.248.66\n197.210.211.1\n197.159.180.2\n197.159.180.1\n197.155.92.21\n197.155.92.20\n197.155.72.149\n197.155.71.114\n197.155.230.206\n197.148.74.19\n197.148.74.18\n197.13.5.134\n196.61.20.249\n196.43.199.61\n196.43.199.60\n196.33.103.134\n196.31.251.146\n196.3.132.154\n196.3.132.153\n196.29.199.76\n196.28.84.126\n196.28.244.3\n196.27.106.21\n196.251.156.82\n196.25.155.102\n196.216.252.65\n196.216.15.56\n196.216.134.71\n196.21.186.253\n196.203.86.4\n196.203.125.131\n196.201.244.7\n196.201.228.22\n196.200.176.2\n196.179.250.95\n196.179.250.93\n196.179.250.91\n196.179.250.89\n196.179.250.50\n196.179.250.11\n196.179.250.10\n196.179.196.177\n196.178.99.16\n196.178.97.91\n196.178.97.85\n196.178.97.84\n196.178.97.52\n196.178.97.42\n196.178.97.250\n196.178.97.193\n196.178.97.16\n196.178.100.224\n196.15.211.117\n196.13.243.20\n196.13.158.51\n196.13.141.10\n195.99.66.220\n195.98.85.66\n195.97.74.14\n195.96.250.194\n195.93.149.199\n195.90.183.90\n195.9.94.122\n195.9.190.22\n195.9.166.86\n195.88.74.2\n195.88.223.73\n195.80.119.99\n195.80.119.101\n195.70.113.203\n195.69.65.98\n195.69.65.1\n195.69.217.130\n195.68.174.244\n195.63.61.189\n195.63.103.144\n195.62.19.125\n195.62.19.119\n195.60.71.123\n195.46.7.225\n195.46.39.40\n195.46.39.39\n195.46.39.151\n195.46.39.103\n195.46.20.65\n195.43.12.163\n195.4.138.12\n195.34.234.228\n195.34.193.16\n195.3.204.225\n195.3.169.67\n195.3.135.101\n195.29.76.12\n195.27.1.1\n195.251.19.1\n195.250.72.134\n195.250.39.16\n195.25.89.202\n195.248.65.72\n195.246.42.210\n195.245.237.35\n195.243.214.4\n195.239.39.250\n195.239.230.40\n195.239.138.198\n195.238.40.45\n195.235.225.10\n195.230.115.3\n195.230.115.2\n195.23.75.151\n195.23.236.90\n195.23.100.180\n195.228.81.117\n195.228.39.166\n195.228.230.148\n195.226.187.130\n195.226.148.211\n195.225.49.20\n195.225.49.131\n195.225.48.193\n195.225.48.17\n195.224.45.182\n195.224.191.221\n195.224.148.52\n195.222.45.135\n195.22.77.99\n195.22.237.106\n195.22.131.230\n195.219.98.40\n195.216.58.18\n195.216.58.16\n195.214.240.136\n195.211.85.70\n195.211.219.141\n195.211.101.223\n195.210.172.46\n195.210.172.43\n195.21.58.113\n195.21.54.113\n195.21.137.153\n195.21.13.234\n195.209.144.228\n195.208.5.1\n195.208.4.1\n195.208.108.75\n195.205.9.65\n195.205.39.18\n195.201.246.253\n195.201.192.29\n195.201.100.11\n195.200.176.2\n195.20.154.230\n195.192.9.141\n195.192.86.170\n195.191.13.87\n195.19.40.237\n195.19.4.32\n195.19.102.93\n195.186.4.192\n195.186.4.162\n195.186.4.111\n195.186.4.110\n195.186.1.162\n195.186.1.111\n195.186.1.110\n195.182.147.74\n195.18.16.140\n195.178.56.180\n195.178.56.179\n195.178.33.46\n195.167.86.34\n195.167.136.57\n195.167.123.245\n195.166.180.239\n195.162.81.125\n195.16.47.53\n195.158.87.192\n195.158.82.92\n195.158.8.30\n195.158.250.101\n195.158.0.5\n195.158.0.3\n195.154.57.169\n195.154.31.170\n195.140.195.21\n195.14.49.27\n195.138.90.226\n195.138.88.134\n195.138.79.162\n195.136.206.181\n195.136.206.159\n195.136.206.155\n195.136.206.152\n195.136.163.57\n195.135.30.64\n195.133.157.159\n195.133.149.106\n195.117.218.206\n195.116.52.251\n195.116.242.247\n195.116.242.240\n195.114.7.252\n195.112.128.222\n195.110.25.248\n195.110.24.248\n195.11.179.142\n195.11.179.140\n195.10.195.195\n194.93.2.70\n194.88.93.22\n194.88.54.158\n194.88.245.142\n194.88.153.197\n194.77.8.1\n194.74.6.42\n194.72.35.195\n194.72.35.194\n194.70.90.162\n194.69.195.2\n194.69.194.3\n194.68.95.4\n194.67.40.47\n194.67.38.7\n194.65.30.2\n194.61.59.25\n194.61.232.18\n194.6.227.60\n194.6.227.180\n194.6.227.18\n194.6.227.150\n194.6.227.15\n194.55.140.138\n194.50.50.3\n194.48.151.213\n194.48.151.200\n194.48.151.145\n194.48.151.132\n194.48.151.130\n194.44.67.95\n194.44.45.242\n194.44.216.58\n194.44.216.10\n194.44.211.78\n194.44.139.88\n194.44.138.10\n194.36.144.87\n194.33.76.1\n194.31.5.18\n194.31.153.61\n194.30.254.138\n194.29.10.6\n194.28.61.114\n194.250.242.105\n194.25.0.68\n194.25.0.62\n194.25.0.60\n194.25.0.52\n194.249.67.20\n194.247.184.53\n194.242.217.239\n194.236.230.132\n194.236.230.131\n194.233.86.28\n194.228.54.34\n194.228.165.168\n194.224.216.170\n194.22.51.35\n194.209.90.8\n194.209.225.15\n194.204.225.18\n194.204.223.244\n194.2.0.50\n194.2.0.20\n194.190.84.137\n194.190.43.87\n194.190.175.17\n194.187.242.10\n194.187.240.10\n194.187.150.71\n194.186.90.74\n194.186.44.69\n194.186.232.214\n194.186.215.150\n194.177.56.1\n194.177.50.125\n194.177.210.210\n194.177.199.1\n194.172.160.4\n194.168.8.123\n194.168.4.123\n194.158.78.137\n194.150.118.100\n194.149.145.132\n194.146.249.146\n194.146.24.191\n194.145.241.6\n194.145.240.7\n194.145.240.6\n194.141.30.177\n194.135.45.87\n194.135.230.86\n194.135.11.210\n194.126.183.208\n194.126.167.2\n194.125.133.10\n194.12.15.222\n193.95.93.77\n193.95.93.243\n193.95.221.141\n193.93.237.230\n193.85.30.34\n193.77.25.50\n193.77.216.22\n193.58.251.251\n193.58.251.105\n193.58.251.104\n193.58.251.103\n193.58.251.102\n193.58.251.101\n193.57.73.100\n193.56.149.89\n193.56.148.228\n193.53.252.195\n193.47.83.251\n193.42.159.2\n193.42.153.26\n193.42.153.107\n193.39.71.5\n193.39.71.4\n193.39.71.3\n193.33.100.206\n193.253.234.127\n193.252.209.127\n193.248.131.101\n193.243.138.50\n193.242.177.92\n193.242.151.45\n193.242.107.8\n193.238.33.131\n193.238.102.55\n193.233.153.193\n193.232.36.242\n193.230.247.195\n193.228.134.195\n193.227.50.3\n193.227.29.241\n193.227.29.10\n193.226.61.1\n193.225.126.61\n193.219.27.222\n193.219.27.220\n193.219.102.62\n193.215.26.18\n193.215.179.34\n193.214.73.78\n193.202.121.50\n193.202.111.250\n193.200.151.69\n193.200.144.35\n193.2.246.9\n193.192.37.178\n193.192.113.146\n193.19.64.88\n193.19.253.254\n193.19.103.4\n193.186.170.50\n193.17.47.1\n193.168.243.5\n193.165.122.190\n193.165.116.70\n193.159.181.250\n193.141.116.163\n193.138.92.130\n193.138.92.129\n193.135.142.198\n193.115.248.226\n193.115.217.24\n193.111.200.191\n193.110.81.9\n193.110.81.0\n193.106.58.211\n193.106.192.9\n193.106.192.6\n193.106.192.14\n193.104.79.138\n192.77.22.74\n192.71.166.92\n192.69.77.66\n192.248.191.138\n192.248.176.219\n192.227.71.86\n192.221.177.0\n192.221.176.16\n192.221.176.0\n192.221.142.128\n192.221.142.0\n192.221.139.0\n192.221.138.0\n192.221.135.0\n192.210.16.184\n192.203.138.17\n192.203.138.11\n192.198.0.2\n192.182.146.202\n192.172.250.8\n192.169.154.227\n192.166.218.28\n192.166.218.146\n192.166.144.12\n192.165.9.158\n192.165.9.157\n192.165.252.20\n192.162.85.48\n192.162.240.66\n192.162.237.50\n192.162.233.20\n192.141.106.20\n192.140.40.253\n192.133.129.2\n192.12.111.30\n192.119.70.155\n192.116.91.229\n192.109.241.6\n192.100.164.125\n192.100.159.34\n191.97.9.99\n191.97.9.225\n191.97.53.229\n191.97.47.93\n191.6.138.137\n191.5.179.151\n191.37.23.73\n191.36.234.58\n191.36.234.143\n191.36.234.135\n191.36.233.57\n191.36.233.100\n191.33.230.226\n191.241.245.108\n191.241.161.70\n191.240.254.238\n191.209.29.122\n191.189.30.99\n191.182.203.8\n191.13.135.23\n191.102.89.6\n191.102.89.2\n191.102.82.83\n191.102.57.58\n191.102.56.57\n191.102.107.237\n191.100.20.116\n190.96.94.98\n190.96.93.74\n190.94.212.10\n190.93.189.30\n190.93.189.28\n190.93.176.126\n190.90.21.101\n190.89.8.146\n190.89.142.141\n190.89.142.129\n190.86.205.194\n190.85.118.18\n190.85.117.140\n190.82.70.214\n190.81.47.205\n190.71.49.122\n190.63.160.34\n190.60.84.243\n190.60.81.50\n190.60.67.138\n190.60.37.226\n190.6.31.100\n190.6.200.161\n190.58.23.133\n190.57.234.194\n190.56.148.54\n190.5.81.230\n190.43.92.243\n190.4.48.3\n190.4.18.218\n190.255.35.60\n190.25.241.210\n190.249.170.32\n190.249.168.212\n190.249.158.58\n190.248.67.34\n190.248.67.206\n190.248.143.210\n190.24.142.107\n190.223.55.37\n190.217.155.118\n190.216.56.107\n190.215.115.214\n190.211.104.94\n190.211.104.93\n190.210.255.132\n190.210.245.247\n190.210.127.98\n190.208.41.11\n190.202.135.58\n190.195.158.55\n190.187.243.222\n190.187.201.179\n190.187.200.243\n190.186.41.66\n190.186.131.245\n190.186.1.46\n190.184.224.206\n190.183.128.74\n190.181.63.242\n190.181.33.58\n190.171.26.34\n190.167.220.185\n190.152.219.135\n190.151.78.115\n190.151.76.90\n190.151.144.21\n190.151.104.178\n190.151.10.179\n190.15.205.212\n190.15.193.168\n190.149.193.229\n190.148.235.254\n190.148.193.146\n190.145.65.197\n190.145.196.114\n190.145.164.130\n190.145.136.210\n190.144.90.226\n190.144.123.122\n190.14.224.45\n190.14.154.78\n190.13.210.157\n190.13.210.148\n190.13.146.123\n190.128.225.58\n190.128.224.237\n190.128.224.236\n190.128.224.234\n190.128.214.90\n190.128.194.46\n190.124.39.34\n190.124.166.45\n190.123.85.89\n190.123.85.117\n190.121.4.63\n190.121.144.48\n190.120.188.98\n190.12.95.170\n190.12.67.210\n190.119.186.205\n190.119.105.85\n190.116.37.110\n190.113.88.165\n190.113.190.162\n190.113.172.24\n190.113.125.182\n190.111.246.169\n190.111.246.128\n190.111.207.83\n190.11.225.2\n190.109.64.49\n190.109.224.227\n190.109.2.245\n190.108.72.6\n190.107.20.164\n190.106.26.6\n190.105.214.36\n190.104.247.202\n190.104.243.44\n190.104.173.150\n190.104.168.155\n190.104.134.90\n190.103.31.90\n190.102.109.41\n190.0.62.118\n190.0.59.102\n190.0.32.94\n190.0.236.22\n190.0.14.18\n189.90.138.250\n189.90.114.109\n189.9.55.9\n189.8.80.34\n189.8.108.104\n189.7.49.85\n189.56.123.82\n189.51.118.34\n189.50.97.37\n189.4.83.33\n189.254.40.179\n189.254.225.213\n189.223.164.93\n189.223.164.9\n189.223.164.81\n189.22.227.194\n189.206.248.177\n189.206.218.22\n189.206.141.193\n189.206.125.227\n189.204.6.253\n189.204.240.235\n189.203.66.130\n189.203.141.69\n189.202.244.234\n189.196.91.198\n189.196.47.87\n189.196.17.222\n189.195.30.67\n189.194.63.25\n189.19.254.196\n189.16.248.21\n189.126.93.129\n189.126.192.4\n189.125.208.154\n189.112.160.165\n189.10.242.138\n188.94.227.38\n188.93.235.3\n188.93.135.180\n188.92.214.1\n188.92.209.129\n188.92.208.46\n188.75.33.210\n188.75.186.152\n188.69.227.55\n188.69.227.53\n188.69.130.183\n188.6.165.9\n188.6.164.43\n188.6.161.26\n188.43.239.146\n188.40.239.99\n188.40.205.205\n188.40.138.230\n188.36.126.131\n188.26.217.1\n188.254.49.206\n188.254.47.154\n188.227.136.44\n188.227.135.6\n188.226.64.126\n188.225.225.25\n188.207.12.98\n188.191.165.58\n188.191.161.121\n188.18.145.68\n188.18.141.247\n188.173.163.40\n188.170.5.117\n188.170.248.157\n188.170.130.91\n188.166.243.215\n188.165.254.29\n188.165.250.96\n188.165.220.211\n188.165.204.74\n188.165.135.96\n188.165.135.209\n188.163.170.130\n188.16.13.79\n188.135.60.42\n188.135.50.178\n188.135.50.138\n188.135.49.95\n188.135.14.80\n188.135.12.158\n188.126.60.67\n188.124.226.58\n188.122.4.78\n188.122.24.142\n188.122.212.56\n188.120.252.242\n188.117.151.126\n188.117.137.97\n188.117.137.81\n188.117.137.71\n188.117.137.37\n188.0.190.47\n188.0.190.35\n188.0.167.35\n188.0.166.185\n187.95.236.236\n187.95.184.142\n187.95.18.51\n187.95.125.180\n187.93.73.138\n187.93.105.85\n187.92.139.86\n187.87.224.3\n187.87.139.51\n187.85.179.189\n187.85.179.186\n187.84.81.62\n187.72.231.113\n187.63.156.236\n187.60.217.204\n187.6.84.178\n187.51.127.93\n187.49.77.178\n187.45.96.90\n187.45.127.228\n187.45.101.123\n187.44.188.134\n187.44.162.196\n187.44.0.18\n187.33.253.130\n187.32.90.61\n187.32.81.223\n187.32.81.194\n187.28.39.146\n187.251.227.50\n187.251.130.25\n187.218.44.161\n187.216.86.65\n187.216.41.205\n187.216.100.162\n187.190.50.24\n187.190.112.108\n187.19.101.65\n187.189.99.168\n187.189.23.177\n187.188.98.54\n187.188.57.147\n187.188.199.38\n187.188.150.41\n187.188.112.16\n187.18.156.188\n187.174.97.82\n187.174.213.18\n187.174.134.212\n187.157.84.101\n187.141.99.33\n187.141.176.81\n187.141.169.250\n187.141.133.236\n187.130.63.137\n187.120.173.2\n187.111.31.78\n187.11.242.42\n187.103.15.117\n187.1.163.30\n186.97.218.42\n186.97.208.18\n186.97.195.122\n186.97.194.162\n186.97.169.125\n186.97.130.130\n186.97.102.226\n186.96.98.138\n186.96.53.86\n186.96.145.231\n186.96.11.240\n186.75.32.30\n186.68.87.82\n186.67.26.198\n186.67.172.51\n186.56.57.194\n186.4.212.236\n186.4.206.188\n186.4.115.64\n186.38.33.98\n186.38.32.139\n186.251.103.3\n186.251.103.10\n186.250.118.34\n186.248.66.34\n186.24.9.1\n186.238.18.99\n186.236.102.88\n186.225.10.4\n186.216.162.70\n186.215.192.243\n186.215.137.186\n186.208.112.202\n186.200.32.84\n186.195.225.250\n186.194.160.118\n186.192.255.36\n186.190.237.140\n186.190.236.11\n186.190.228.83\n186.182.51.17\n186.179.241.146\n186.177.77.238\n186.177.211.202\n186.177.204.203\n186.177.203.161\n186.177.193.132\n186.176.200.35\n186.166.202.49\n186.159.4.66\n186.159.15.86\n186.154.241.226\n186.151.152.210\n186.150.201.138\n186.147.249.90\n186.124.22.114\n186.121.214.98\n186.116.6.75\n186.113.2.86\n186.103.175.74\n186.103.167.190\n186.10.94.57\n186.10.6.226\n186.1.41.92\n186.0.171.147\n185.99.89.250\n185.99.77.92\n185.97.204.135\n185.96.87.18\n185.95.67.151\n185.93.240.188\n185.93.180.140\n185.93.180.131\n185.90.73.17\n185.84.19.163\n185.84.19.115\n185.81.9.44\n185.8.221.20\n185.74.85.200\n185.74.5.5\n185.74.5.1\n185.70.182.166\n185.67.94.146\n185.66.9.142\n185.66.131.108\n185.65.175.161\n185.65.122.90\n185.61.93.2\n185.60.178.253\n185.56.191.2\n185.55.65.48\n185.53.233.178\n185.52.46.209\n185.51.10.213\n185.50.209.49\n185.49.20.20\n185.49.111.249\n185.49.108.48\n185.48.176.53\n185.47.209.34\n185.46.96.38\n185.46.197.124\n185.45.244.221\n185.44.24.27\n185.44.216.221\n185.43.135.1\n185.42.96.217\n185.42.192.114\n185.38.226.18\n185.38.208.200\n185.34.23.23\n185.34.23.139\n185.34.21.133\n185.32.5.65\n185.31.160.26\n185.3.69.37\n185.3.52.19\n185.254.7.169\n185.249.92.4\n185.248.172.8\n185.247.225.17\n185.246.188.51\n185.244.217.202\n185.243.19.67\n185.242.177.8\n185.242.177.7\n185.242.113.232\n185.24.81.66\n185.24.196.118\n185.24.122.178\n185.234.52.80\n185.234.228.65\n185.23.114.146\n185.229.101.28\n185.228.169.9\n185.228.168.9\n185.228.168.12\n185.228.141.154\n185.226.160.76\n185.222.222.222\n185.221.30.35\n185.220.182.179\n185.22.235.137\n185.214.10.175\n185.21.80.54\n185.21.66.253\n185.200.144.27\n185.192.244.202\n185.190.40.87\n185.190.105.61\n185.189.216.21\n185.189.126.185\n185.189.103.195\n185.189.100.92\n185.188.218.86\n185.188.216.101\n185.186.80.122\n185.184.233.210\n185.183.242.130\n185.182.107.236\n185.181.61.24\n185.180.41.221\n185.180.34.180\n185.18.7.7\n185.177.127.100\n185.175.11.110\n185.174.211.155\n185.171.208.153\n185.170.35.69\n185.170.35.60\n185.170.35.232\n185.170.35.229\n185.170.32.31\n185.17.133.88\n185.165.96.225\n185.160.39.186\n185.158.67.203\n185.156.198.183\n185.155.89.187\n185.153.92.223\n185.153.92.221\n185.153.92.211\n185.153.92.199\n185.153.92.197\n185.153.92.1\n185.150.99.255\n185.15.63.136\n185.15.210.98\n185.15.191.31\n185.147.71.84\n185.147.58.134\n185.146.215.230\n185.145.126.191\n185.144.201.195\n185.142.30.40\n185.14.234.242\n185.14.214.60\n185.14.150.6\n185.139.125.150\n185.136.78.181\n185.135.180.60\n185.134.232.35\n185.133.208.32\n185.132.201.202\n185.132.1.221\n185.130.44.20\n185.130.153.92\n185.129.115.86\n185.127.27.251\n185.127.227.98\n185.123.194.28\n185.123.188.23\n185.121.110.228\n185.12.71.241\n185.12.227.99\n185.12.2.210\n185.117.243.18\n185.116.229.115\n185.113.49.23\n185.112.224.247\n185.110.21.141\n185.11.49.180\n185.109.169.66\n185.108.215.229\n185.108.21.6\n185.108.21.45\n185.106.131.224\n185.106.131.141\n185.105.171.128\n185.101.185.149\n184.95.49.172\n184.68.102.2\n184.184.114.202\n184.183.89.198\n184.177.9.34\n184.164.96.251\n184.154.158.134\n184.149.25.55\n183.99.226.197\n183.98.206.253\n183.91.3.242\n183.178.69.52\n183.178.58.215\n183.178.110.4\n183.177.101.51\n183.107.20.90\n183.107.106.231\n183.104.61.35\n183.104.157.72\n183.100.49.21\n182.93.25.98\n182.93.25.100\n182.78.166.110\n182.78.164.254\n182.78.137.21\n182.75.205.90\n182.75.174.228\n182.73.54.193\n182.71.68.161\n182.71.61.207\n182.71.145.153\n182.58.134.111\n182.48.251.137\n182.239.78.192\n182.237.214.37\n182.237.16.7\n182.23.44.5\n182.211.210.55\n182.19.95.98\n182.176.111.188\n182.171.70.161\n182.171.233.145\n182.171.231.25\n182.162.73.17\n182.162.73.16\n182.16.171.164\n182.158.74.175\n182.158.73.179\n182.156.93.102\n182.156.242.178\n182.156.155.26\n182.156.155.142\n182.156.155.14\n182.156.154.98\n182.156.154.12\n182.156.153.39\n182.156.153.209\n182.156.153.111\n182.156.152.94\n182.156.152.89\n182.156.152.247\n182.156.152.240\n182.156.152.209\n182.156.152.2\n182.156.152.130\n182.156.152.119\n182.156.152.115\n181.94.247.163\n181.94.246.48\n181.94.245.137\n181.94.197.197\n181.80.17.44\n181.67.191.133\n181.57.149.82\n181.49.102.254\n181.48.92.218\n181.48.218.42\n181.48.196.182\n181.48.195.159\n181.48.195.157\n181.40.92.86\n181.40.122.102\n181.229.1.116\n181.224.225.3\n181.212.39.92\n181.210.92.7\n181.209.95.2\n181.209.91.154\n181.209.89.29\n181.209.86.250\n181.209.82.154\n181.209.78.67\n181.209.72.90\n181.209.194.198\n181.209.119.114\n181.209.111.149\n181.209.109.210\n181.209.105.158\n181.209.105.156\n181.209.105.154\n181.209.104.234\n181.205.83.202\n181.205.72.18\n181.205.7.26\n181.205.65.194\n181.205.61.122\n181.205.60.162\n181.205.57.154\n181.205.47.219\n181.205.34.122\n181.205.28.162\n181.205.252.242\n181.205.224.98\n181.205.219.202\n181.205.206.162\n181.205.204.163\n181.205.199.2\n181.205.178.122\n181.205.146.74\n181.205.142.178\n181.205.129.210\n181.205.124.50\n181.205.0.122\n181.204.9.106\n181.204.80.106\n181.204.8.66\n181.204.77.250\n181.204.75.178\n181.204.73.182\n181.204.72.122\n181.204.36.42\n181.204.232.2\n181.204.214.146\n181.204.20.138\n181.204.185.18\n181.204.183.74\n181.204.15.250\n181.204.14.218\n181.191.223.83\n181.191.223.59\n181.189.219.251\n181.188.148.18\n181.177.141.190\n181.171.232.10\n181.15.193.19\n181.143.66.122\n181.143.37.202\n181.143.27.98\n181.143.215.50\n181.143.204.98\n181.143.20.186\n181.143.196.83\n181.129.74.58\n181.129.70.106\n181.129.69.226\n181.129.57.146\n181.129.48.10\n181.129.42.138\n181.129.36.242\n181.129.31.210\n181.129.225.26\n181.129.14.3\n181.129.138.114\n181.129.121.42\n181.129.117.226\n181.12.158.108\n181.119.105.29\n181.118.92.14\n181.118.176.23\n181.118.167.110\n181.118.148.20\n181.118.148.189\n181.115.204.122\n181.115.203.138\n181.115.184.75\n181.115.184.142\n181.114.62.1\n181.114.60.225\n181.114.59.245\n181.114.5.150\n181.114.217.3\n181.114.212.34\n181.114.118.242\n181.112.60.126\n181.110.241.74\n181.105.122.76\n181.105.122.62\n181.105.122.196\n181.105.122.135\n181.105.121.99\n181.10.155.250\n180.94.94.195\n180.94.94.194\n180.92.170.100\n180.69.75.37\n180.69.254.143\n180.69.214.252\n180.64.246.59\n180.43.164.18\n180.42.15.9\n180.255.64.234\n180.255.3.49\n180.232.96.162\n180.232.81.98\n180.211.183.206\n180.193.221.81\n180.193.189.154\n180.193.184.97\n180.193.184.137\n180.193.183.230\n180.193.179.26\n180.193.179.18\n180.193.179.138\n180.193.170.33\n180.189.167.34\n180.180.244.53\n180.178.139.210\n180.150.51.109\n180.150.42.169\n180.150.13.108\n180.150.119.18\n180.150.105.246\n18.254.96.167\n18.163.103.200\n179.96.29.230\n179.93.80.111\n179.61.90.22\n179.60.244.53\n179.60.235.209\n179.60.235.153\n179.60.232.14\n179.60.232.10\n179.51.237.31\n179.43.97.147\n179.228.250.125\n179.228.207.216\n179.191.66.250\n179.189.226.125\n179.189.21.60\n179.184.102.46\n179.111.216.102\n179.1.133.89\n178.77.243.102\n178.75.220.2\n178.73.210.182\n178.72.73.23\n178.70.70.151\n178.69.14.158\n178.63.25.202\n178.62.197.147\n178.54.198.71\n178.49.184.32\n178.47.34.77\n178.46.160.85\n178.46.159.220\n178.46.158.13\n178.46.128.150\n178.35.238.134\n178.34.180.229\n178.34.159.215\n178.33.45.223\n178.33.250.245\n178.33.164.91\n178.32.107.33\n178.255.79.70\n178.255.191.166\n178.252.114.250\n178.249.64.22\n178.248.211.216\n178.248.211.177\n178.248.211.174\n178.248.208.20\n178.248.151.131\n178.239.225.58\n178.239.224.161\n178.238.28.70\n178.235.148.35\n178.222.250.29\n178.222.249.245\n178.220.230.54\n178.219.174.62\n178.219.174.3\n178.219.173.190\n178.219.163.177\n178.219.161.211\n178.219.149.47\n178.218.244.86\n178.217.140.7\n178.216.163.13\n178.216.111.85\n178.214.241.150\n178.213.114.193\n178.212.222.102\n178.212.102.76\n178.210.129.161\n178.205.108.200\n178.183.131.200\n178.176.63.46\n178.176.24.185\n178.172.225.2\n178.170.166.98\n178.17.127.129\n178.160.198.130\n178.16.32.129\n178.158.234.89\n178.155.72.98\n178.151.205.106\n178.134.36.178\n178.134.27.51\n178.134.155.82\n178.130.94.122\n178.128.46.208\n177.99.206.131\n177.99.161.122\n177.93.45.236\n177.93.1.250\n177.92.18.202\n177.92.123.158\n177.91.75.139\n177.87.96.4\n177.87.57.15\n177.84.120.203\n177.8.173.164\n177.8.163.162\n177.8.162.132\n177.75.74.0\n177.73.160.206\n177.69.127.41\n177.66.0.46\n177.52.247.201\n177.52.151.132\n177.47.128.2\n177.43.124.234\n177.43.102.34\n177.39.102.189\n177.36.241.38\n177.36.214.1\n177.36.196.106\n177.244.25.118\n177.242.151.222\n177.241.250.42\n177.241.245.222\n177.240.8.182\n177.240.18.182\n177.234.226.92\n177.234.209.111\n177.234.132.8\n177.229.223.74\n177.223.234.119\n177.223.107.235\n177.221.41.221\n177.220.156.202\n177.220.153.162\n177.220.149.10\n177.22.38.165\n177.22.203.220\n177.21.15.122\n177.200.69.231\n177.200.196.85\n177.20.183.3\n177.190.222.139\n177.190.199.35\n177.19.150.218\n177.19.145.82\n177.184.176.5\n177.174.112.253\n177.159.101.225\n177.152.93.246\n177.152.52.99\n177.152.159.199\n177.152.104.139\n177.144.128.64\n177.131.29.211\n177.131.29.209\n177.128.24.188\n177.104.64.2\n177.101.35.197\n177.10.162.82\n176.99.5.15\n176.98.80.97\n176.98.80.149\n176.96.240.86\n176.9.93.198\n176.9.54.219\n176.9.29.119\n176.9.204.129\n176.9.163.161\n176.9.100.254\n176.9.1.117\n176.65.63.119\n176.62.79.18\n176.62.189.246\n176.58.119.151\n176.58.113.172\n176.53.10.136\n176.33.142.139\n176.31.248.107\n176.31.103.216\n176.28.250.122\n176.28.107.12\n176.241.192.31\n176.241.110.51\n176.235.135.204\n176.197.7.54\n176.197.228.243\n176.196.53.70\n176.193.76.23\n176.192.123.190\n176.124.144.35\n176.122.71.107\n176.122.24.201\n176.122.21.137\n176.121.9.144\n176.120.203.38\n176.12.122.226\n176.118.26.2\n176.114.228.63\n176.114.128.30\n176.108.36.129\n176.107.131.32\n176.107.118.206\n176.106.252.22\n176.105.213.126\n176.105.207.93\n176.103.72.103\n176.102.137.49\n176.102.128.154\n176.101.247.53\n176.100.76.240\n175.45.16.253\n175.213.232.126\n175.213.132.85\n175.213.132.56\n175.209.22.21\n175.208.49.10\n175.208.229.187\n175.207.242.72\n175.202.234.243\n175.199.45.229\n175.144.214.180\n175.143.98.42\n175.139.176.60\n175.138.229.245\n175.138.182.115\n175.126.106.69\n175.117.145.35\n175.110.54.135\n175.101.18.20\n175.101.18.18\n175.101.132.109\n174.71.211.178\n174.69.43.159\n174.47.194.76\n174.141.219.114\n174.141.212.61\n174.138.21.128\n174.138.185.110\n174.138.182.182\n173.9.160.113\n173.27.123.175\n173.251.21.58\n173.249.48.6\n173.249.41.233\n173.249.10.12\n173.248.232.249\n173.248.155.77\n173.246.249.1\n173.245.59.99\n173.245.59.88\n173.245.59.87\n173.245.59.82\n173.245.59.59\n173.245.59.56\n173.245.59.55\n173.245.59.52\n173.245.59.49\n173.245.59.25\n173.245.59.237\n173.245.59.230\n173.245.59.225\n173.245.59.208\n173.245.59.203\n173.245.59.186\n173.245.59.172\n173.245.59.17\n173.245.59.167\n173.245.59.165\n173.245.59.163\n173.245.59.156\n173.245.59.147\n173.245.59.146\n173.245.59.139\n173.245.59.131\n173.245.59.127\n173.245.59.123\n173.245.59.122\n173.245.59.12\n173.245.59.117\n173.245.59.102\n173.245.59.10\n173.245.58.95\n173.245.58.93\n173.245.58.89\n173.245.58.86\n173.245.58.74\n173.245.58.67\n173.245.58.6\n173.245.58.49\n173.245.58.39\n173.245.58.237\n173.245.58.223\n173.245.58.215\n173.245.58.201\n173.245.58.184\n173.245.58.180\n173.245.58.18\n173.245.58.177\n173.245.58.167\n173.245.58.137\n173.245.58.136\n173.245.58.127\n173.245.58.126\n173.245.58.118\n173.245.58.113\n173.245.58.106\n173.241.228.10\n173.239.57.92\n173.239.23.84\n173.227.163.200\n173.226.143.254\n173.223.99.98\n173.223.99.92\n173.223.99.83\n173.223.99.81\n173.223.99.71\n173.223.99.66\n173.223.99.3\n173.223.99.26\n173.223.99.250\n173.223.99.226\n173.223.99.220\n173.223.99.201\n173.223.99.194\n173.223.99.175\n173.223.99.172\n173.223.99.168\n173.223.99.15\n173.223.99.124\n173.223.99.115\n173.223.99.112\n173.223.99.103\n173.223.98.53\n173.223.98.49\n173.223.98.29\n173.223.98.244\n173.223.98.213\n173.223.98.205\n173.223.98.198\n173.223.98.191\n173.223.98.181\n173.223.98.180\n173.223.98.174\n173.223.98.168\n173.223.98.137\n173.223.98.118\n173.223.98.117\n173.223.98.112\n173.223.101.9\n173.223.101.48\n173.223.101.46\n173.223.100.9\n173.223.100.50\n173.223.100.10\n173.219.2.16\n173.212.6.5\n173.212.243.123\n173.212.242.89\n173.212.241.35\n173.212.239.87\n173.212.228.2\n173.197.161.35\n173.166.181.209\n173.163.101.137\n173.161.65.201\n173.161.248.250\n173.15.132.155\n173.13.186.37\n173.12.123.37\n173.0.43.38\n172.64.47.93\n172.64.47.91\n172.64.47.9\n172.64.47.85\n172.64.47.75\n172.64.47.67\n172.64.47.50\n172.64.47.45\n172.64.47.44\n172.64.47.29\n172.64.47.254\n172.64.47.250\n172.64.47.242\n172.64.47.227\n172.64.47.226\n172.64.47.224\n172.64.47.221\n172.64.47.216\n172.64.47.210\n172.64.47.204\n172.64.47.200\n172.64.47.195\n172.64.47.186\n172.64.47.181\n172.64.47.180\n172.64.47.18\n172.64.47.178\n172.64.47.174\n172.64.47.171\n172.64.47.170\n172.64.47.168\n172.64.47.167\n172.64.47.166\n172.64.47.158\n172.64.47.154\n172.64.47.153\n172.64.47.147\n172.64.47.143\n172.64.47.133\n172.64.47.124\n172.64.47.12\n172.64.47.113\n172.64.47.110\n172.64.47.107\n172.64.47.106\n172.64.47.104\n172.64.47.103\n172.64.47.102\n172.64.47.10\n172.64.46.9\n172.64.46.84\n172.64.46.83\n172.64.46.80\n172.64.46.72\n172.64.46.66\n172.64.46.62\n172.64.46.53\n172.64.46.52\n172.64.46.50\n172.64.46.47\n172.64.46.46\n172.64.46.45\n172.64.46.42\n172.64.46.36\n172.64.46.35\n172.64.46.34\n172.64.46.31\n172.64.46.29\n172.64.46.28\n172.64.46.27\n172.64.46.255\n172.64.46.253\n172.64.46.252\n172.64.46.243\n172.64.46.236\n172.64.46.230\n172.64.46.229\n172.64.46.227\n172.64.46.22\n172.64.46.217\n172.64.46.213\n172.64.46.211\n172.64.46.209\n172.64.46.203\n172.64.46.202\n172.64.46.200\n172.64.46.198\n172.64.46.192\n172.64.46.191\n172.64.46.179\n172.64.46.177\n172.64.46.176\n172.64.46.173\n172.64.46.17\n172.64.46.161\n172.64.46.160\n172.64.46.159\n172.64.46.144\n172.64.46.142\n172.64.46.137\n172.64.46.13\n172.64.46.127\n172.64.46.124\n172.64.46.111\n172.64.46.109\n172.64.46.106\n172.64.46.103\n172.64.38.95\n172.64.38.84\n172.64.38.79\n172.64.38.71\n172.64.38.56\n172.64.38.47\n172.64.38.30\n172.64.38.28\n172.64.38.241\n172.64.38.232\n172.64.38.227\n172.64.38.220\n172.64.38.215\n172.64.38.211\n172.64.38.205\n172.64.38.198\n172.64.38.197\n172.64.38.195\n172.64.38.190\n172.64.38.182\n172.64.38.179\n172.64.38.177\n172.64.38.175\n172.64.38.169\n172.64.38.155\n172.64.38.14\n172.64.38.128\n172.64.38.12\n172.64.38.10\n172.64.38.1\n172.64.37.99\n172.64.37.98\n172.64.37.97\n172.64.37.96\n172.64.37.95\n172.64.37.94\n172.64.37.93\n172.64.37.92\n172.64.37.91\n172.64.37.90\n172.64.37.9\n172.64.37.89\n172.64.37.88\n172.64.37.87\n172.64.37.86\n172.64.37.85\n172.64.37.84\n172.64.37.83\n172.64.37.82\n172.64.37.81\n172.64.37.80\n172.64.37.8\n172.64.37.79\n172.64.37.78\n172.64.37.77\n172.64.37.76\n172.64.37.75\n172.64.37.74\n172.64.37.73\n172.64.37.72\n172.64.37.71\n172.64.37.70\n172.64.37.7\n172.64.37.69\n172.64.37.68\n172.64.37.66\n172.64.37.65\n172.64.37.64\n172.64.37.63\n172.64.37.62\n172.64.37.61\n172.64.37.60\n172.64.37.6\n172.64.37.59\n172.64.37.58\n172.64.37.57\n172.64.37.56\n172.64.37.55\n172.64.37.54\n172.64.37.53\n172.64.37.52\n172.64.37.51\n172.64.37.50\n172.64.37.5\n172.64.37.49\n172.64.37.48\n172.64.37.47\n172.64.37.46\n172.64.37.45\n172.64.37.44\n172.64.37.43\n172.64.37.42\n172.64.37.41\n172.64.37.40\n172.64.37.4\n172.64.37.39\n172.64.37.38\n172.64.37.37\n172.64.37.35\n172.64.37.34\n172.64.37.33\n172.64.37.32\n172.64.37.31\n172.64.37.30\n172.64.37.3\n172.64.37.29\n172.64.37.28\n172.64.37.27\n172.64.37.26\n172.64.37.254\n172.64.37.253\n172.64.37.252\n172.64.37.251\n172.64.37.250\n172.64.37.25\n172.64.37.249\n172.64.37.248\n172.64.37.247\n172.64.37.246\n172.64.37.245\n172.64.37.244\n172.64.37.243\n172.64.37.242\n172.64.37.241\n172.64.37.240\n172.64.37.24\n172.64.37.239\n172.64.37.238\n172.64.37.237\n172.64.37.236\n172.64.37.235\n172.64.37.234\n172.64.37.232\n172.64.37.231\n172.64.37.230\n172.64.37.23\n172.64.37.229\n172.64.37.228\n172.64.37.227\n172.64.37.226\n172.64.37.225\n172.64.37.224\n172.64.37.223\n172.64.37.222\n172.64.37.221\n172.64.37.220\n172.64.37.22\n172.64.37.219\n172.64.37.218\n172.64.37.217\n172.64.37.216\n172.64.37.215\n172.64.37.214\n172.64.37.213\n172.64.37.212\n172.64.37.211\n172.64.37.210\n172.64.37.21\n172.64.37.209\n172.64.37.208\n172.64.37.207\n172.64.37.206\n172.64.37.205\n172.64.37.204\n172.64.37.203\n172.64.37.201\n172.64.37.200\n172.64.37.20\n172.64.37.2\n172.64.37.199\n172.64.37.198\n172.64.37.197\n172.64.37.196\n172.64.37.195\n172.64.37.194\n172.64.37.193\n172.64.37.192\n172.64.37.191\n172.64.37.190\n172.64.37.19\n172.64.37.189\n172.64.37.188\n172.64.37.187\n172.64.37.186\n172.64.37.185\n172.64.37.184\n172.64.37.183\n172.64.37.182\n172.64.37.181\n172.64.37.180\n172.64.37.18\n172.64.37.179\n172.64.37.178\n172.64.37.177\n172.64.37.176\n172.64.37.175\n172.64.37.174\n172.64.37.173\n172.64.37.172\n172.64.37.171\n172.64.37.170\n172.64.37.17\n172.64.37.169\n172.64.37.168\n172.64.37.167\n172.64.37.166\n172.64.37.165\n172.64.37.164\n172.64.37.163\n172.64.37.162\n172.64.37.161\n172.64.37.160\n172.64.37.16\n172.64.37.159\n172.64.37.157\n172.64.37.156\n172.64.37.155\n172.64.37.154\n172.64.37.153\n172.64.37.152\n172.64.37.151\n172.64.37.150\n172.64.37.15\n172.64.37.149\n172.64.37.148\n172.64.37.147\n172.64.37.146\n172.64.37.145\n172.64.37.144\n172.64.37.143\n172.64.37.142\n172.64.37.141\n172.64.37.140\n172.64.37.14\n172.64.37.139\n172.64.37.138\n172.64.37.137\n172.64.37.136\n172.64.37.135\n172.64.37.134\n172.64.37.133\n172.64.37.132\n172.64.37.131\n172.64.37.130\n172.64.37.13\n172.64.37.129\n172.64.37.128\n172.64.37.127\n172.64.37.126\n172.64.37.125\n172.64.37.124\n172.64.37.123\n172.64.37.122\n172.64.37.121\n172.64.37.120\n172.64.37.12\n172.64.37.119\n172.64.37.118\n172.64.37.117\n172.64.37.116\n172.64.37.115\n172.64.37.114\n172.64.37.113\n172.64.37.112\n172.64.37.111\n172.64.37.110\n172.64.37.11\n172.64.37.109\n172.64.37.108\n172.64.37.107\n172.64.37.106\n172.64.37.105\n172.64.37.104\n172.64.37.103\n172.64.37.102\n172.64.37.101\n172.64.37.100\n172.64.37.10\n172.64.37.1\n172.64.37.0\n172.64.36.99\n172.64.36.98\n172.64.36.97\n172.64.36.96\n172.64.36.95\n172.64.36.94\n172.64.36.93\n172.64.36.92\n172.64.36.91\n172.64.36.90\n172.64.36.9\n172.64.36.89\n172.64.36.88\n172.64.36.87\n172.64.36.86\n172.64.36.85\n172.64.36.84\n172.64.36.83\n172.64.36.82\n172.64.36.81\n172.64.36.80\n172.64.36.8\n172.64.36.79\n172.64.36.78\n172.64.36.77\n172.64.36.76\n172.64.36.75\n172.64.36.74\n172.64.36.73\n172.64.36.72\n172.64.36.71\n172.64.36.70\n172.64.36.7\n172.64.36.69\n172.64.36.68\n172.64.36.67\n172.64.36.66\n172.64.36.65\n172.64.36.64\n172.64.36.63\n172.64.36.62\n172.64.36.61\n172.64.36.60\n172.64.36.6\n172.64.36.59\n172.64.36.58\n172.64.36.57\n172.64.36.56\n172.64.36.55\n172.64.36.54\n172.64.36.53\n172.64.36.52\n172.64.36.51\n172.64.36.50\n172.64.36.5\n172.64.36.49\n172.64.36.48\n172.64.36.47\n172.64.36.46\n172.64.36.45\n172.64.36.44\n172.64.36.43\n172.64.36.42\n172.64.36.41\n172.64.36.40\n172.64.36.4\n172.64.36.39\n172.64.36.38\n172.64.36.37\n172.64.36.36\n172.64.36.35\n172.64.36.34\n172.64.36.33\n172.64.36.32\n172.64.36.31\n172.64.36.30\n172.64.36.3\n172.64.36.29\n172.64.36.28\n172.64.36.27\n172.64.36.26\n172.64.36.255\n172.64.36.254\n172.64.36.253\n172.64.36.252\n172.64.36.251\n172.64.36.250\n172.64.36.25\n172.64.36.249\n172.64.36.248\n172.64.36.247\n172.64.36.246\n172.64.36.245\n172.64.36.244\n172.64.36.243\n172.64.36.241\n172.64.36.240\n172.64.36.24\n172.64.36.239\n172.64.36.238\n172.64.36.237\n172.64.36.236\n172.64.36.235\n172.64.36.233\n172.64.36.232\n172.64.36.231\n172.64.36.230\n172.64.36.23\n172.64.36.229\n172.64.36.228\n172.64.36.227\n172.64.36.226\n172.64.36.225\n172.64.36.224\n172.64.36.223\n172.64.36.222\n172.64.36.221\n172.64.36.22\n172.64.36.219\n172.64.36.218\n172.64.36.217\n172.64.36.216\n172.64.36.215\n172.64.36.214\n172.64.36.213\n172.64.36.212\n172.64.36.211\n172.64.36.210\n172.64.36.21\n172.64.36.209\n172.64.36.208\n172.64.36.207\n172.64.36.206\n172.64.36.205\n172.64.36.204\n172.64.36.203\n172.64.36.202\n172.64.36.201\n172.64.36.200\n172.64.36.20\n172.64.36.2\n172.64.36.199\n172.64.36.198\n172.64.36.197\n172.64.36.196\n172.64.36.195\n172.64.36.194\n172.64.36.193\n172.64.36.192\n172.64.36.191\n172.64.36.190\n172.64.36.19\n172.64.36.189\n172.64.36.188\n172.64.36.187\n172.64.36.186\n172.64.36.185\n172.64.36.184\n172.64.36.183\n172.64.36.182\n172.64.36.181\n172.64.36.180\n172.64.36.18\n172.64.36.179\n172.64.36.178\n172.64.36.177\n172.64.36.176\n172.64.36.175\n172.64.36.174\n172.64.36.173\n172.64.36.172\n172.64.36.171\n172.64.36.170\n172.64.36.17\n172.64.36.169\n172.64.36.168\n172.64.36.167\n172.64.36.166\n172.64.36.165\n172.64.36.164\n172.64.36.163\n172.64.36.162\n172.64.36.161\n172.64.36.160\n172.64.36.16\n172.64.36.159\n172.64.36.158\n172.64.36.157\n172.64.36.156\n172.64.36.155\n172.64.36.154\n172.64.36.153\n172.64.36.152\n172.64.36.151\n172.64.36.150\n172.64.36.15\n172.64.36.149\n172.64.36.148\n172.64.36.147\n172.64.36.146\n172.64.36.145\n172.64.36.144\n172.64.36.143\n172.64.36.142\n172.64.36.141\n172.64.36.140\n172.64.36.14\n172.64.36.139\n172.64.36.138\n172.64.36.137\n172.64.36.136\n172.64.36.135\n172.64.36.134\n172.64.36.133\n172.64.36.132\n172.64.36.131\n172.64.36.130\n172.64.36.13\n172.64.36.129\n172.64.36.128\n172.64.36.127\n172.64.36.126\n172.64.36.125\n172.64.36.124\n172.64.36.123\n172.64.36.122\n172.64.36.121\n172.64.36.120\n172.64.36.12\n172.64.36.119\n172.64.36.118\n172.64.36.117\n172.64.36.116\n172.64.36.115\n172.64.36.114\n172.64.36.113\n172.64.36.112\n172.64.36.111\n172.64.36.110\n172.64.36.11\n172.64.36.109\n172.64.36.108\n172.64.36.107\n172.64.36.106\n172.64.36.105\n172.64.36.104\n172.64.36.103\n172.64.36.102\n172.64.36.101\n172.64.36.100\n172.64.36.1\n172.64.36.0\n172.64.35.92\n172.64.35.87\n172.64.35.84\n172.64.35.73\n172.64.35.72\n172.64.35.71\n172.64.35.64\n172.64.35.48\n172.64.35.43\n172.64.35.42\n172.64.35.40\n172.64.35.26\n172.64.35.252\n172.64.35.230\n172.64.35.228\n172.64.35.204\n172.64.35.192\n172.64.35.17\n172.64.35.168\n172.64.35.166\n172.64.35.153\n172.64.35.150\n172.64.35.146\n172.64.35.130\n172.64.35.124\n172.64.35.111\n172.64.35.11\n172.64.35.108\n172.64.35.106\n172.64.34.88\n172.64.34.75\n172.64.34.74\n172.64.34.66\n172.64.34.56\n172.64.34.50\n172.64.34.49\n172.64.34.42\n172.64.34.33\n172.64.34.244\n172.64.34.242\n172.64.34.241\n172.64.34.235\n172.64.34.231\n172.64.34.206\n172.64.34.204\n172.64.34.202\n172.64.34.201\n172.64.34.195\n172.64.34.159\n172.64.34.151\n172.64.34.129\n172.64.34.124\n172.64.34.123\n172.64.34.121\n172.64.34.117\n172.64.33.90\n172.64.33.81\n172.64.33.76\n172.64.33.74\n172.64.33.57\n172.64.33.49\n172.64.33.47\n172.64.33.44\n172.64.33.33\n172.64.33.252\n172.64.33.25\n172.64.33.245\n172.64.33.243\n172.64.33.225\n172.64.33.218\n172.64.33.217\n172.64.33.213\n172.64.33.207\n172.64.33.206\n172.64.33.20\n172.64.33.2\n172.64.33.188\n172.64.33.18\n172.64.33.179\n172.64.33.178\n172.64.33.176\n172.64.33.144\n172.64.33.124\n172.64.33.121\n172.64.33.116\n172.64.33.107\n172.64.33.103\n172.64.33.0\n172.64.32.99\n172.64.32.58\n172.64.32.56\n172.64.32.54\n172.64.32.52\n172.64.32.5\n172.64.32.49\n172.64.32.46\n172.64.32.44\n172.64.32.39\n172.64.32.254\n172.64.32.253\n172.64.32.250\n172.64.32.247\n172.64.32.243\n172.64.32.240\n172.64.32.239\n172.64.32.238\n172.64.32.216\n172.64.32.209\n172.64.32.191\n172.64.32.179\n172.64.32.178\n172.64.32.163\n172.64.32.153\n172.64.32.135\n172.64.32.131\n172.64.32.129\n172.64.32.127\n172.64.32.119\n172.64.32.105\n172.64.32.104\n172.2.219.18\n172.109.185.34\n172.109.128.250\n172.105.152.133\n172.104.93.80\n172.104.57.181\n172.104.29.247\n171.33.152.31\n171.25.251.148\n171.244.23.49\n171.224.241.161\n170.84.108.11\n170.83.240.248\n170.81.9.4\n170.39.180.34\n170.249.203.131\n170.247.198.22\n170.246.105.242\n170.244.57.8\n170.244.57.7\n170.239.207.95\n170.239.207.211\n170.239.206.88\n170.239.206.125\n170.239.204.247\n170.239.204.239\n170.239.204.231\n170.239.204.230\n170.239.204.181\n170.239.204.175\n170.239.204.168\n170.239.204.156\n170.239.204.148\n170.239.144.20\n170.238.239.67\n170.238.212.154\n170.238.117.68\n170.238.10.65\n170.233.74.158\n170.231.205.55\n170.231.205.49\n170.231.205.44\n170.231.205.43\n170.231.205.22\n170.210.83.34\n170.150.222.243\n170.150.155.85\n170.0.15.49\n169.55.51.86\n169.55.102.246\n169.53.182.124\n169.255.135.218\n169.239.80.214\n169.239.236.101\n169.237.229.88\n168.95.192.1\n168.95.1.1\n168.93.88.114\n168.9.36.114\n168.61.172.232\n168.243.48.33\n168.235.75.84\n168.232.20.58\n168.228.51.197\n168.228.232.251\n168.227.102.42\n168.215.210.50\n168.205.124.9\n168.196.78.22\n168.196.78.18\n168.196.144.214\n168.195.135.71\n168.195.135.67\n168.181.87.38\n168.181.247.94\n168.181.247.54\n168.181.247.33\n168.181.247.29\n168.181.247.27\n168.181.247.20\n168.181.247.2\n168.181.247.124\n168.181.247.115\n168.181.247.10\n168.181.161.2\n168.154.245.252\n168.154.224.50\n168.154.160.5\n168.154.160.4\n168.126.63.2\n168.126.63.1\n168.126.246.2\n168.121.97.42\n168.121.97.36\n168.100.172.1\n167.99.168.38\n167.98.87.164\n167.98.253.194\n167.98.191.45\n167.98.176.51\n167.98.174.81\n167.98.171.242\n167.98.161.42\n167.98.161.41\n167.86.119.212\n167.86.109.163\n167.71.34.203\n167.250.99.85\n167.249.249.250\n167.235.59.243\n167.235.247.108\n167.224.103.4\n167.224.103.3\n167.172.60.99\n167.157.20.2\n167.128.4.101\n166.252.14.91\n166.203.165.254\n166.203.128.183\n166.200.113.63\n166.200.113.59\n166.200.113.122\n166.168.39.152\n166.146.42.193\n166.130.64.24\n166.102.165.32\n166.102.165.13\n166.102.165.11\n165.87.201.244\n165.87.201.242\n165.87.194.244\n165.87.13.129\n165.84.188.244\n165.73.82.119\n165.73.132.203\n165.246.10.2\n165.21.13.90\n165.166.159.198\n165.166.159.147\n165.16.68.129\n165.16.68.1\n165.16.58.124\n165.16.116.172\n165.156.20.90\n165.156.20.9\n165.156.20.80\n165.156.20.72\n165.156.20.7\n165.156.20.68\n165.156.20.65\n165.156.20.64\n165.156.20.62\n165.156.20.60\n165.156.20.6\n165.156.20.59\n165.156.20.56\n165.156.20.52\n165.156.20.49\n165.156.20.46\n165.156.20.44\n165.156.20.4\n165.156.20.30\n165.156.20.28\n165.156.20.26\n165.156.20.252\n165.156.20.243\n165.156.20.242\n165.156.20.235\n165.156.20.221\n165.156.20.217\n165.156.20.213\n165.156.20.208\n165.156.20.205\n165.156.20.203\n165.156.20.196\n165.156.20.192\n165.156.20.186\n165.156.20.174\n165.156.20.171\n165.156.20.158\n165.156.20.157\n165.156.20.155\n165.156.20.154\n165.156.20.152\n165.156.20.145\n165.156.20.144\n165.156.20.14\n165.156.20.131\n165.156.20.130\n165.156.20.129\n165.156.20.127\n165.156.20.124\n165.156.20.123\n165.156.20.121\n165.156.20.12\n165.156.20.103\n165.156.18.99\n165.156.18.98\n165.156.18.97\n165.156.18.96\n165.156.18.94\n165.156.18.93\n165.156.18.91\n165.156.18.9\n165.156.18.88\n165.156.18.87\n165.156.18.86\n165.156.18.85\n165.156.18.84\n165.156.18.83\n165.156.18.82\n165.156.18.80\n165.156.18.8\n165.156.18.78\n165.156.18.77\n165.156.18.76\n165.156.18.75\n165.156.18.74\n165.156.18.73\n165.156.18.71\n165.156.18.70\n165.156.18.7\n165.156.18.69\n165.156.18.68\n165.156.18.67\n165.156.18.64\n165.156.18.63\n165.156.18.62\n165.156.18.60\n165.156.18.6\n165.156.18.59\n165.156.18.57\n165.156.18.54\n165.156.18.52\n165.156.18.51\n165.156.18.50\n165.156.18.49\n165.156.18.46\n165.156.18.44\n165.156.18.43\n165.156.18.41\n165.156.18.4\n165.156.18.38\n165.156.18.37\n165.156.18.36\n165.156.18.32\n165.156.18.30\n165.156.18.27\n165.156.18.26\n165.156.18.254\n165.156.18.253\n165.156.18.251\n165.156.18.250\n165.156.18.25\n165.156.18.249\n165.156.18.244\n165.156.18.242\n165.156.18.24\n165.156.18.237\n165.156.18.236\n165.156.18.235\n165.156.18.232\n165.156.18.231\n165.156.18.230\n165.156.18.23\n165.156.18.228\n165.156.18.227\n165.156.18.223\n165.156.18.222\n165.156.18.220\n165.156.18.22\n165.156.18.213\n165.156.18.21\n165.156.18.209\n165.156.18.208\n165.156.18.207\n165.156.18.206\n165.156.18.203\n165.156.18.202\n165.156.18.201\n165.156.18.200\n165.156.18.20\n165.156.18.2\n165.156.18.198\n165.156.18.195\n165.156.18.192\n165.156.18.191\n165.156.18.190\n165.156.18.19\n165.156.18.187\n165.156.18.186\n165.156.18.185\n165.156.18.182\n165.156.18.181\n165.156.18.18\n165.156.18.177\n165.156.18.176\n165.156.18.171\n165.156.18.17\n165.156.18.169\n165.156.18.167\n165.156.18.166\n165.156.18.165\n165.156.18.164\n165.156.18.163\n165.156.18.162\n165.156.18.160\n165.156.18.16\n165.156.18.159\n165.156.18.158\n165.156.18.157\n165.156.18.156\n165.156.18.155\n165.156.18.154\n165.156.18.152\n165.156.18.15\n165.156.18.147\n165.156.18.145\n165.156.18.144\n165.156.18.143\n165.156.18.141\n165.156.18.140\n165.156.18.14\n165.156.18.137\n165.156.18.136\n165.156.18.135\n165.156.18.134\n165.156.18.133\n165.156.18.131\n165.156.18.130\n165.156.18.128\n165.156.18.127\n165.156.18.126\n165.156.18.125\n165.156.18.124\n165.156.18.122\n165.156.18.120\n165.156.18.119\n165.156.18.118\n165.156.18.116\n165.156.18.115\n165.156.18.114\n165.156.18.113\n165.156.18.111\n165.156.18.11\n165.156.18.108\n165.156.18.106\n165.156.18.105\n165.156.18.104\n165.156.18.102\n165.156.18.101\n165.156.18.100\n165.156.18.10\n165.156.18.1\n165.156.17.99\n165.156.17.98\n165.156.17.96\n165.156.17.95\n165.156.17.94\n165.156.17.93\n165.156.17.92\n165.156.17.91\n165.156.17.90\n165.156.17.88\n165.156.17.87\n165.156.17.86\n165.156.17.84\n165.156.17.83\n165.156.17.82\n165.156.17.81\n165.156.17.80\n165.156.17.8\n165.156.17.79\n165.156.17.78\n165.156.17.77\n165.156.17.76\n165.156.17.75\n165.156.17.74\n165.156.17.73\n165.156.17.72\n165.156.17.71\n165.156.17.70\n165.156.17.7\n165.156.17.69\n165.156.17.68\n165.156.17.66\n165.156.17.65\n165.156.17.64\n165.156.17.63\n165.156.17.61\n165.156.17.59\n165.156.17.58\n165.156.17.57\n165.156.17.55\n165.156.17.54\n165.156.17.53\n165.156.17.50\n165.156.17.5\n165.156.17.47\n165.156.17.46\n165.156.17.45\n165.156.17.44\n165.156.17.42\n165.156.17.41\n165.156.17.4\n165.156.17.39\n165.156.17.37\n165.156.17.36\n165.156.17.34\n165.156.17.33\n165.156.17.32\n165.156.17.31\n165.156.17.3\n165.156.17.28\n165.156.17.27\n165.156.17.26\n165.156.17.252\n165.156.17.251\n165.156.17.250\n165.156.17.25\n165.156.17.248\n165.156.17.247\n165.156.17.246\n165.156.17.244\n165.156.17.243\n165.156.17.242\n165.156.17.241\n165.156.17.240\n165.156.17.24\n165.156.17.239\n165.156.17.236\n165.156.17.235\n165.156.17.234\n165.156.17.233\n165.156.17.232\n165.156.17.231\n165.156.17.23\n165.156.17.229\n165.156.17.228\n165.156.17.227\n165.156.17.225\n165.156.17.224\n165.156.17.223\n165.156.17.222\n165.156.17.220\n165.156.17.22\n165.156.17.219\n165.156.17.218\n165.156.17.216\n165.156.17.215\n165.156.17.214\n165.156.17.212\n165.156.17.211\n165.156.17.210\n165.156.17.21\n165.156.17.206\n165.156.17.205\n165.156.17.202\n165.156.17.20\n165.156.17.2\n165.156.17.197\n165.156.17.196\n165.156.17.195\n165.156.17.194\n165.156.17.193\n165.156.17.192\n165.156.17.190\n165.156.17.19\n165.156.17.189\n165.156.17.188\n165.156.17.187\n165.156.17.185\n165.156.17.184\n165.156.17.183\n165.156.17.182\n165.156.17.181\n165.156.17.180\n165.156.17.18\n165.156.17.178\n165.156.17.177\n165.156.17.176\n165.156.17.174\n165.156.17.173\n165.156.17.172\n165.156.17.171\n165.156.17.170\n165.156.17.17\n165.156.17.169\n165.156.17.168\n165.156.17.167\n165.156.17.166\n165.156.17.163\n165.156.17.161\n165.156.17.160\n165.156.17.159\n165.156.17.158\n165.156.17.155\n165.156.17.153\n165.156.17.152\n165.156.17.15\n165.156.17.148\n165.156.17.147\n165.156.17.146\n165.156.17.145\n165.156.17.144\n165.156.17.143\n165.156.17.142\n165.156.17.141\n165.156.17.140\n165.156.17.14\n165.156.17.138\n165.156.17.137\n165.156.17.136\n165.156.17.131\n165.156.17.130\n165.156.17.13\n165.156.17.129\n165.156.17.128\n165.156.17.127\n165.156.17.126\n165.156.17.124\n165.156.17.123\n165.156.17.122\n165.156.17.121\n165.156.17.120\n165.156.17.119\n165.156.17.117\n165.156.17.116\n165.156.17.115\n165.156.17.114\n165.156.17.112\n165.156.17.110\n165.156.17.11\n165.156.17.109\n165.156.17.108\n165.156.17.107\n165.156.17.105\n165.156.17.104\n165.156.17.103\n165.156.17.102\n165.156.17.101\n165.156.17.100\n165.156.17.10\n165.156.17.1\n165.156.16.97\n165.156.16.95\n165.156.16.93\n165.156.16.92\n165.156.16.86\n165.156.16.85\n165.156.16.83\n165.156.16.82\n165.156.16.81\n165.156.16.80\n165.156.16.8\n165.156.16.78\n165.156.16.75\n165.156.16.73\n165.156.16.72\n165.156.16.71\n165.156.16.70\n165.156.16.7\n165.156.16.68\n165.156.16.67\n165.156.16.64\n165.156.16.62\n165.156.16.61\n165.156.16.51\n165.156.16.50\n165.156.16.5\n165.156.16.49\n165.156.16.48\n165.156.16.45\n165.156.16.44\n165.156.16.41\n165.156.16.40\n165.156.16.35\n165.156.16.32\n165.156.16.31\n165.156.16.3\n165.156.16.29\n165.156.16.28\n165.156.16.26\n165.156.16.254\n165.156.16.253\n165.156.16.251\n165.156.16.250\n165.156.16.25\n165.156.16.248\n165.156.16.247\n165.156.16.241\n165.156.16.240\n165.156.16.232\n165.156.16.228\n165.156.16.227\n165.156.16.226\n165.156.16.224\n165.156.16.222\n165.156.16.220\n165.156.16.218\n165.156.16.216\n165.156.16.215\n165.156.16.214\n165.156.16.213\n165.156.16.212\n165.156.16.208\n165.156.16.207\n165.156.16.206\n165.156.16.205\n165.156.16.204\n165.156.16.203\n165.156.16.202\n165.156.16.20\n165.156.16.2\n165.156.16.198\n165.156.16.197\n165.156.16.196\n165.156.16.192\n165.156.16.191\n165.156.16.19\n165.156.16.189\n165.156.16.186\n165.156.16.184\n165.156.16.183\n165.156.16.18\n165.156.16.178\n165.156.16.177\n165.156.16.176\n165.156.16.175\n165.156.16.173\n165.156.16.172\n165.156.16.168\n165.156.16.165\n165.156.16.163\n165.156.16.160\n165.156.16.16\n165.156.16.159\n165.156.16.158\n165.156.16.157\n165.156.16.156\n165.156.16.154\n165.156.16.151\n165.156.16.149\n165.156.16.148\n165.156.16.147\n165.156.16.143\n165.156.16.142\n165.156.16.141\n165.156.16.140\n165.156.16.14\n165.156.16.133\n165.156.16.131\n165.156.16.130\n165.156.16.13\n165.156.16.129\n165.156.16.127\n165.156.16.126\n165.156.16.124\n165.156.16.122\n165.156.16.121\n165.156.16.120\n165.156.16.119\n165.156.16.118\n165.156.16.116\n165.156.16.112\n165.156.16.109\n165.156.16.108\n165.156.16.104\n165.156.16.102\n165.156.16.101\n165.156.16.100\n165.156.16.10\n165.140.185.34\n165.140.185.254\n164.77.156.235\n164.77.129.37\n164.68.108.7\n164.68.108.101\n164.163.74.82\n164.163.133.21\n164.163.1.90\n164.132.210.88\n164.132.170.198\n164.132.167.189\n164.124.107.9\n164.124.101.2\n163.47.202.150\n163.44.49.226\n163.182.174.241\n163.172.31.111\n162.75.12.97\n162.75.12.201\n162.253.133.97\n162.251.82.99\n162.251.82.98\n162.251.82.97\n162.251.82.96\n162.251.82.95\n162.251.82.94\n162.251.82.93\n162.251.82.92\n162.251.82.91\n162.251.82.90\n162.251.82.9\n162.251.82.89\n162.251.82.88\n162.251.82.87\n162.251.82.86\n162.251.82.85\n162.251.82.84\n162.251.82.83\n162.251.82.82\n162.251.82.81\n162.251.82.80\n162.251.82.8\n162.251.82.79\n162.251.82.78\n162.251.82.77\n162.251.82.76\n162.251.82.75\n162.251.82.74\n162.251.82.73\n162.251.82.72\n162.251.82.71\n162.251.82.7\n162.251.82.69\n162.251.82.68\n162.251.82.67\n162.251.82.66\n162.251.82.65\n162.251.82.64\n162.251.82.63\n162.251.82.62\n162.251.82.61\n162.251.82.60\n162.251.82.6\n162.251.82.59\n162.251.82.58\n162.251.82.57\n162.251.82.56\n162.251.82.55\n162.251.82.54\n162.251.82.53\n162.251.82.52\n162.251.82.51\n162.251.82.50\n162.251.82.5\n162.251.82.49\n162.251.82.48\n162.251.82.47\n162.251.82.46\n162.251.82.45\n162.251.82.44\n162.251.82.42\n162.251.82.41\n162.251.82.40\n162.251.82.4\n162.251.82.39\n162.251.82.37\n162.251.82.36\n162.251.82.35\n162.251.82.34\n162.251.82.33\n162.251.82.32\n162.251.82.31\n162.251.82.30\n162.251.82.3\n162.251.82.29\n162.251.82.28\n162.251.82.27\n162.251.82.25\n162.251.82.245\n162.251.82.243\n162.251.82.242\n162.251.82.241\n162.251.82.240\n162.251.82.24\n162.251.82.239\n162.251.82.238\n162.251.82.237\n162.251.82.236\n162.251.82.235\n162.251.82.234\n162.251.82.233\n162.251.82.232\n162.251.82.231\n162.251.82.230\n162.251.82.23\n162.251.82.229\n162.251.82.228\n162.251.82.227\n162.251.82.226\n162.251.82.225\n162.251.82.224\n162.251.82.223\n162.251.82.222\n162.251.82.221\n162.251.82.220\n162.251.82.22\n162.251.82.219\n162.251.82.218\n162.251.82.217\n162.251.82.216\n162.251.82.215\n162.251.82.214\n162.251.82.213\n162.251.82.212\n162.251.82.211\n162.251.82.210\n162.251.82.21\n162.251.82.209\n162.251.82.208\n162.251.82.207\n162.251.82.206\n162.251.82.205\n162.251.82.204\n162.251.82.203\n162.251.82.202\n162.251.82.201\n162.251.82.200\n162.251.82.20\n162.251.82.199\n162.251.82.198\n162.251.82.197\n162.251.82.196\n162.251.82.195\n162.251.82.194\n162.251.82.193\n162.251.82.192\n162.251.82.191\n162.251.82.190\n162.251.82.19\n162.251.82.189\n162.251.82.188\n162.251.82.187\n162.251.82.186\n162.251.82.185\n162.251.82.184\n162.251.82.183\n162.251.82.182\n162.251.82.181\n162.251.82.180\n162.251.82.18\n162.251.82.179\n162.251.82.178\n162.251.82.177\n162.251.82.176\n162.251.82.175\n162.251.82.174\n162.251.82.173\n162.251.82.172\n162.251.82.171\n162.251.82.170\n162.251.82.17\n162.251.82.169\n162.251.82.168\n162.251.82.167\n162.251.82.166\n162.251.82.165\n162.251.82.164\n162.251.82.163\n162.251.82.162\n162.251.82.161\n162.251.82.160\n162.251.82.16\n162.251.82.159\n162.251.82.158\n162.251.82.157\n162.251.82.156\n162.251.82.155\n162.251.82.154\n162.251.82.153\n162.251.82.152\n162.251.82.151\n162.251.82.150\n162.251.82.15\n162.251.82.149\n162.251.82.148\n162.251.82.147\n162.251.82.146\n162.251.82.145\n162.251.82.144\n162.251.82.143\n162.251.82.142\n162.251.82.141\n162.251.82.140\n162.251.82.14\n162.251.82.139\n162.251.82.138\n162.251.82.137\n162.251.82.136\n162.251.82.135\n162.251.82.134\n162.251.82.133\n162.251.82.132\n162.251.82.131\n162.251.82.130\n162.251.82.13\n162.251.82.129\n162.251.82.128\n162.251.82.127\n162.251.82.126\n162.251.82.12\n162.251.82.117\n162.251.82.116\n162.251.82.115\n162.251.82.114\n162.251.82.113\n162.251.82.112\n162.251.82.111\n162.251.82.110\n162.251.82.11\n162.251.82.109\n162.251.82.108\n162.251.82.107\n162.251.82.106\n162.251.82.105\n162.251.82.104\n162.251.82.103\n162.251.82.102\n162.251.82.101\n162.251.82.100\n162.251.82.10\n162.251.82.1\n162.251.82.0\n162.251.158.88\n162.251.146.91\n162.247.183.205\n162.246.127.108\n162.243.172.61\n162.241.132.129\n162.223.90.104\n162.221.187.229\n162.218.154.2\n162.212.19.235\n162.211.33.243\n162.210.104.17\n162.191.88.204\n162.191.201.179\n162.19.92.206\n162.19.58.10\n162.17.81.57\n162.159.9.87\n162.159.9.83\n162.159.9.78\n162.159.9.68\n162.159.9.66\n162.159.9.53\n162.159.9.46\n162.159.9.4\n162.159.9.31\n162.159.9.29\n162.159.9.250\n162.159.9.248\n162.159.9.24\n162.159.9.238\n162.159.9.233\n162.159.9.229\n162.159.9.219\n162.159.9.216\n162.159.9.214\n162.159.9.211\n162.159.9.21\n162.159.9.204\n162.159.9.185\n162.159.9.167\n162.159.9.160\n162.159.9.159\n162.159.9.155\n162.159.9.147\n162.159.9.142\n162.159.9.140\n162.159.9.135\n162.159.9.119\n162.159.9.105\n162.159.9.103\n162.159.8.92\n162.159.8.82\n162.159.8.80\n162.159.8.76\n162.159.8.46\n162.159.8.45\n162.159.8.38\n162.159.8.36\n162.159.8.32\n162.159.8.29\n162.159.8.27\n162.159.8.254\n162.159.8.252\n162.159.8.241\n162.159.8.232\n162.159.8.215\n162.159.8.21\n162.159.8.194\n162.159.8.192\n162.159.8.175\n162.159.8.159\n162.159.8.146\n162.159.8.136\n162.159.8.128\n162.159.8.118\n162.159.8.114\n162.159.8.111\n162.159.8.100\n162.159.7.99\n162.159.7.89\n162.159.7.85\n162.159.7.84\n162.159.7.79\n162.159.7.77\n162.159.7.248\n162.159.7.247\n162.159.7.215\n162.159.7.211\n162.159.7.201\n162.159.7.199\n162.159.7.188\n162.159.7.183\n162.159.7.18\n162.159.7.164\n162.159.7.163\n162.159.7.159\n162.159.7.149\n162.159.7.140\n162.159.7.139\n162.159.7.129\n162.159.7.126\n162.159.7.119\n162.159.7.113\n162.159.7.101\n162.159.7.10\n162.159.7.1\n162.159.6.99\n162.159.6.64\n162.159.6.62\n162.159.6.45\n162.159.6.35\n162.159.6.28\n162.159.6.254\n162.159.6.252\n162.159.6.250\n162.159.6.229\n162.159.6.215\n162.159.6.211\n162.159.6.203\n162.159.6.189\n162.159.6.178\n162.159.6.177\n162.159.6.175\n162.159.6.169\n162.159.6.138\n162.159.6.134\n162.159.6.123\n162.159.6.107\n162.159.58.98\n162.159.58.94\n162.159.58.92\n162.159.58.89\n162.159.58.86\n162.159.58.37\n162.159.58.251\n162.159.58.223\n162.159.58.219\n162.159.58.217\n162.159.58.214\n162.159.58.201\n162.159.58.198\n162.159.58.188\n162.159.58.186\n162.159.58.185\n162.159.58.183\n162.159.58.179\n162.159.58.166\n162.159.58.156\n162.159.58.14\n162.159.58.133\n162.159.58.131\n162.159.58.125\n162.159.58.119\n162.159.58.115\n162.159.58.111\n162.159.58.110\n162.159.58.102\n162.159.56.86\n162.159.56.84\n162.159.56.75\n162.159.56.59\n162.159.56.47\n162.159.56.43\n162.159.56.18\n162.159.50.79\n162.159.50.74\n162.159.50.4\n162.159.50.3\n162.159.50.27\n162.159.5.73\n162.159.5.71\n162.159.5.64\n162.159.5.49\n162.159.5.44\n162.159.5.31\n162.159.5.228\n162.159.5.226\n162.159.5.22\n162.159.5.211\n162.159.5.206\n162.159.5.20\n162.159.5.194\n162.159.5.18\n162.159.5.171\n162.159.5.170\n162.159.5.165\n162.159.5.161\n162.159.5.152\n162.159.5.149\n162.159.5.147\n162.159.5.137\n162.159.5.125\n162.159.5.123\n162.159.5.118\n162.159.5.104\n162.159.5.101\n162.159.46.92\n162.159.46.90\n162.159.46.8\n162.159.46.73\n162.159.46.71\n162.159.46.70\n162.159.46.56\n162.159.46.55\n162.159.46.53\n162.159.46.51\n162.159.46.48\n162.159.46.47\n162.159.46.42\n162.159.46.38\n162.159.46.28\n162.159.46.26\n162.159.46.250\n162.159.46.249\n162.159.46.247\n162.159.46.239\n162.159.46.232\n162.159.46.23\n162.159.46.224\n162.159.46.223\n162.159.46.221\n162.159.46.219\n162.159.46.218\n162.159.46.214\n162.159.46.202\n162.159.46.197\n162.159.46.194\n162.159.46.190\n162.159.46.185\n162.159.46.182\n162.159.46.18\n162.159.46.177\n162.159.46.175\n162.159.46.172\n162.159.46.167\n162.159.46.166\n162.159.46.165\n162.159.46.161\n162.159.46.151\n162.159.46.15\n162.159.46.147\n162.159.46.144\n162.159.46.134\n162.159.46.120\n162.159.46.119\n162.159.46.117\n162.159.46.115\n162.159.46.1\n162.159.46.0\n162.159.45.99\n162.159.45.98\n162.159.45.97\n162.159.45.96\n162.159.45.95\n162.159.45.94\n162.159.45.93\n162.159.45.92\n162.159.45.91\n162.159.45.90\n162.159.45.9\n162.159.45.89\n162.159.45.88\n162.159.45.87\n162.159.45.86\n162.159.45.85\n162.159.45.84\n162.159.45.83\n162.159.45.82\n162.159.45.81\n162.159.45.80\n162.159.45.8\n162.159.45.79\n162.159.45.78\n162.159.45.77\n162.159.45.76\n162.159.45.75\n162.159.45.74\n162.159.45.73\n162.159.45.72\n162.159.45.71\n162.159.45.70\n162.159.45.7\n162.159.45.69\n162.159.45.68\n162.159.45.67\n162.159.45.66\n162.159.45.65\n162.159.45.64\n162.159.45.63\n162.159.45.62\n162.159.45.61\n162.159.45.60\n162.159.45.6\n162.159.45.59\n162.159.45.58\n162.159.45.57\n162.159.45.56\n162.159.45.55\n162.159.45.54\n162.159.45.53\n162.159.45.52\n162.159.45.51\n162.159.45.50\n162.159.45.5\n162.159.45.49\n162.159.45.48\n162.159.45.47\n162.159.45.46\n162.159.45.45\n162.159.45.44\n162.159.45.43\n162.159.45.42\n162.159.45.41\n162.159.45.40\n162.159.45.4\n162.159.45.39\n162.159.45.38\n162.159.45.37\n162.159.45.36\n162.159.45.35\n162.159.45.34\n162.159.45.33\n162.159.45.32\n162.159.45.31\n162.159.45.30\n162.159.45.3\n162.159.45.29\n162.159.45.28\n162.159.45.27\n162.159.45.26\n162.159.45.254\n162.159.45.253\n162.159.45.252\n162.159.45.251\n162.159.45.250\n162.159.45.25\n162.159.45.249\n162.159.45.248\n162.159.45.247\n162.159.45.246\n162.159.45.245\n162.159.45.244\n162.159.45.243\n162.159.45.242\n162.159.45.241\n162.159.45.240\n162.159.45.24\n162.159.45.239\n162.159.45.238\n162.159.45.237\n162.159.45.236\n162.159.45.235\n162.159.45.234\n162.159.45.233\n162.159.45.232\n162.159.45.231\n162.159.45.230\n162.159.45.23\n162.159.45.229\n162.159.45.228\n162.159.45.227\n162.159.45.226\n162.159.45.225\n162.159.45.224\n162.159.45.223\n162.159.45.222\n162.159.45.221\n162.159.45.220\n162.159.45.22\n162.159.45.219\n162.159.45.218\n162.159.45.217\n162.159.45.216\n162.159.45.215\n162.159.45.214\n162.159.45.213\n162.159.45.212\n162.159.45.211\n162.159.45.210\n162.159.45.21\n162.159.45.209\n162.159.45.208\n162.159.45.207\n162.159.45.206\n162.159.45.205\n162.159.45.204\n162.159.45.203\n162.159.45.202\n162.159.45.201\n162.159.45.200\n162.159.45.20\n162.159.45.2\n162.159.45.199\n162.159.45.198\n162.159.45.197\n162.159.45.196\n162.159.45.195\n162.159.45.194\n162.159.45.193\n162.159.45.192\n162.159.45.191\n162.159.45.190\n162.159.45.19\n162.159.45.189\n162.159.45.188\n162.159.45.187\n162.159.45.186\n162.159.45.185\n162.159.45.184\n162.159.45.183\n162.159.45.182\n162.159.45.181\n162.159.45.180\n162.159.45.18\n162.159.45.179\n162.159.45.178\n162.159.45.177\n162.159.45.176\n162.159.45.175\n162.159.45.174\n162.159.45.173\n162.159.45.172\n162.159.45.171\n162.159.45.170\n162.159.45.17\n162.159.45.169\n162.159.45.168\n162.159.45.167\n162.159.45.166\n162.159.45.165\n162.159.45.164\n162.159.45.163\n162.159.45.162\n162.159.45.161\n162.159.45.160\n162.159.45.16\n162.159.45.159\n162.159.45.158\n162.159.45.157\n162.159.45.156\n162.159.45.155\n162.159.45.154\n162.159.45.153\n162.159.45.152\n162.159.45.151\n162.159.45.150\n162.159.45.15\n162.159.45.149\n162.159.45.148\n162.159.45.147\n162.159.45.146\n162.159.45.145\n162.159.45.144\n162.159.45.143\n162.159.45.142\n162.159.45.141\n162.159.45.140\n162.159.45.14\n162.159.45.139\n162.159.45.138\n162.159.45.137\n162.159.45.136\n162.159.45.135\n162.159.45.134\n162.159.45.133\n162.159.45.132\n162.159.45.131\n162.159.45.130\n162.159.45.13\n162.159.45.129\n162.159.45.128\n162.159.45.127\n162.159.45.126\n162.159.45.125\n162.159.45.124\n162.159.45.123\n162.159.45.122\n162.159.45.121\n162.159.45.120\n162.159.45.12\n162.159.45.119\n162.159.45.118\n162.159.45.117\n162.159.45.116\n162.159.45.115\n162.159.45.114\n162.159.45.113\n162.159.45.112\n162.159.45.111\n162.159.45.110\n162.159.45.11\n162.159.45.109\n162.159.45.108\n162.159.45.107\n162.159.45.106\n162.159.45.105\n162.159.45.104\n162.159.45.103\n162.159.45.102\n162.159.45.101\n162.159.45.100\n162.159.45.10\n162.159.45.1\n162.159.45.0\n162.159.44.99\n162.159.44.98\n162.159.44.97\n162.159.44.96\n162.159.44.95\n162.159.44.94\n162.159.44.93\n162.159.44.92\n162.159.44.91\n162.159.44.90\n162.159.44.9\n162.159.44.89\n162.159.44.88\n162.159.44.87\n162.159.44.86\n162.159.44.85\n162.159.44.84\n162.159.44.83\n162.159.44.82\n162.159.44.81\n162.159.44.80\n162.159.44.8\n162.159.44.79\n162.159.44.78\n162.159.44.77\n162.159.44.76\n162.159.44.75\n162.159.44.74\n162.159.44.73\n162.159.44.72\n162.159.44.71\n162.159.44.70\n162.159.44.7\n162.159.44.69\n162.159.44.68\n162.159.44.67\n162.159.44.66\n162.159.44.65\n162.159.44.64\n162.159.44.63\n162.159.44.62\n162.159.44.61\n162.159.44.60\n162.159.44.6\n162.159.44.59\n162.159.44.58\n162.159.44.57\n162.159.44.56\n162.159.44.55\n162.159.44.54\n162.159.44.53\n162.159.44.52\n162.159.44.51\n162.159.44.50\n162.159.44.5\n162.159.44.49\n162.159.44.48\n162.159.44.47\n162.159.44.46\n162.159.44.45\n162.159.44.44\n162.159.44.43\n162.159.44.42\n162.159.44.41\n162.159.44.40\n162.159.44.4\n162.159.44.39\n162.159.44.38\n162.159.44.37\n162.159.44.36\n162.159.44.35\n162.159.44.34\n162.159.44.33\n162.159.44.32\n162.159.44.31\n162.159.44.30\n162.159.44.3\n162.159.44.29\n162.159.44.28\n162.159.44.27\n162.159.44.26\n162.159.44.255\n162.159.44.254\n162.159.44.253\n162.159.44.252\n162.159.44.251\n162.159.44.250\n162.159.44.25\n162.159.44.249\n162.159.44.248\n162.159.44.247\n162.159.44.246\n162.159.44.245\n162.159.44.244\n162.159.44.243\n162.159.44.242\n162.159.44.241\n162.159.44.240\n162.159.44.24\n162.159.44.239\n162.159.44.238\n162.159.44.237\n162.159.44.236\n162.159.44.235\n162.159.44.234\n162.159.44.233\n162.159.44.232\n162.159.44.231\n162.159.44.230\n162.159.44.23\n162.159.44.229\n162.159.44.228\n162.159.44.227\n162.159.44.226\n162.159.44.225\n162.159.44.224\n162.159.44.223\n162.159.44.222\n162.159.44.221\n162.159.44.220\n162.159.44.22\n162.159.44.219\n162.159.44.218\n162.159.44.217\n162.159.44.216\n162.159.44.215\n162.159.44.214\n162.159.44.213\n162.159.44.212\n162.159.44.211\n162.159.44.210\n162.159.44.21\n162.159.44.209\n162.159.44.208\n162.159.44.207\n162.159.44.206\n162.159.44.205\n162.159.44.204\n162.159.44.203\n162.159.44.202\n162.159.44.201\n162.159.44.200\n162.159.44.20\n162.159.44.2\n162.159.44.199\n162.159.44.198\n162.159.44.197\n162.159.44.196\n162.159.44.195\n162.159.44.194\n162.159.44.193\n162.159.44.192\n162.159.44.191\n162.159.44.190\n162.159.44.19\n162.159.44.189\n162.159.44.188\n162.159.44.187\n162.159.44.186\n162.159.44.185\n162.159.44.184\n162.159.44.183\n162.159.44.182\n162.159.44.181\n162.159.44.180\n162.159.44.18\n162.159.44.179\n162.159.44.178\n162.159.44.177\n162.159.44.176\n162.159.44.175\n162.159.44.174\n162.159.44.173\n162.159.44.172\n162.159.44.171\n162.159.44.170\n162.159.44.17\n162.159.44.169\n162.159.44.168\n162.159.44.167\n162.159.44.166\n162.159.44.165\n162.159.44.164\n162.159.44.163\n162.159.44.162\n162.159.44.161\n162.159.44.160\n162.159.44.16\n162.159.44.159\n162.159.44.158\n162.159.44.157\n162.159.44.156\n162.159.44.155\n162.159.44.154\n162.159.44.153\n162.159.44.152\n162.159.44.151\n162.159.44.150\n162.159.44.15\n162.159.44.149\n162.159.44.148\n162.159.44.147\n162.159.44.146\n162.159.44.145\n162.159.44.144\n162.159.44.143\n162.159.44.142\n162.159.44.141\n162.159.44.140\n162.159.44.14\n162.159.44.139\n162.159.44.138\n162.159.44.137\n162.159.44.136\n162.159.44.135\n162.159.44.134\n162.159.44.133\n162.159.44.132\n162.159.44.131\n162.159.44.130\n162.159.44.13\n162.159.44.129\n162.159.44.128\n162.159.44.127\n162.159.44.126\n162.159.44.125\n162.159.44.124\n162.159.44.123\n162.159.44.122\n162.159.44.121\n162.159.44.120\n162.159.44.12\n162.159.44.119\n162.159.44.118\n162.159.44.117\n162.159.44.116\n162.159.44.115\n162.159.44.114\n162.159.44.113\n162.159.44.112\n162.159.44.111\n162.159.44.110\n162.159.44.11\n162.159.44.109\n162.159.44.108\n162.159.44.107\n162.159.44.106\n162.159.44.105\n162.159.44.104\n162.159.44.103\n162.159.44.102\n162.159.44.101\n162.159.44.100\n162.159.44.10\n162.159.44.1\n162.159.44.0\n162.159.43.99\n162.159.43.98\n162.159.43.97\n162.159.43.96\n162.159.43.95\n162.159.43.94\n162.159.43.93\n162.159.43.92\n162.159.43.91\n162.159.43.90\n162.159.43.9\n162.159.43.89\n162.159.43.88\n162.159.43.87\n162.159.43.86\n162.159.43.85\n162.159.43.84\n162.159.43.83\n162.159.43.82\n162.159.43.81\n162.159.43.80\n162.159.43.8\n162.159.43.79\n162.159.43.78\n162.159.43.77\n162.159.43.76\n162.159.43.75\n162.159.43.74\n162.159.43.73\n162.159.43.72\n162.159.43.71\n162.159.43.70\n162.159.43.7\n162.159.43.69\n162.159.43.68\n162.159.43.67\n162.159.43.66\n162.159.43.65\n162.159.43.64\n162.159.43.63\n162.159.43.62\n162.159.43.61\n162.159.43.60\n162.159.43.6\n162.159.43.59\n162.159.43.58\n162.159.43.57\n162.159.43.56\n162.159.43.55\n162.159.43.54\n162.159.43.53\n162.159.43.52\n162.159.43.51\n162.159.43.50\n162.159.43.5\n162.159.43.49\n162.159.43.48\n162.159.43.47\n162.159.43.46\n162.159.43.45\n162.159.43.44\n162.159.43.43\n162.159.43.42\n162.159.43.41\n162.159.43.40\n162.159.43.4\n162.159.43.39\n162.159.43.38\n162.159.43.37\n162.159.43.36\n162.159.43.35\n162.159.43.34\n162.159.43.33\n162.159.43.32\n162.159.43.31\n162.159.43.30\n162.159.43.3\n162.159.43.29\n162.159.43.28\n162.159.43.27\n162.159.43.26\n162.159.43.254\n162.159.43.253\n162.159.43.252\n162.159.43.251\n162.159.43.250\n162.159.43.25\n162.159.43.249\n162.159.43.248\n162.159.43.247\n162.159.43.246\n162.159.43.245\n162.159.43.244\n162.159.43.243\n162.159.43.242\n162.159.43.241\n162.159.43.240\n162.159.43.24\n162.159.43.239\n162.159.43.238\n162.159.43.237\n162.159.43.236\n162.159.43.235\n162.159.43.234\n162.159.43.233\n162.159.43.232\n162.159.43.231\n162.159.43.230\n162.159.43.23\n162.159.43.229\n162.159.43.228\n162.159.43.227\n162.159.43.226\n162.159.43.225\n162.159.43.224\n162.159.43.223\n162.159.43.222\n162.159.43.221\n162.159.43.220\n162.159.43.22\n162.159.43.219\n162.159.43.218\n162.159.43.217\n162.159.43.216\n162.159.43.215\n162.159.43.214\n162.159.43.213\n162.159.43.212\n162.159.43.211\n162.159.43.210\n162.159.43.21\n162.159.43.209\n162.159.43.208\n162.159.43.207\n162.159.43.206\n162.159.43.205\n162.159.43.204\n162.159.43.203\n162.159.43.202\n162.159.43.201\n162.159.43.200\n162.159.43.20\n162.159.43.2\n162.159.43.199\n162.159.43.198\n162.159.43.197\n162.159.43.196\n162.159.43.195\n162.159.43.194\n162.159.43.193\n162.159.43.192\n162.159.43.191\n162.159.43.190\n162.159.43.19\n162.159.43.189\n162.159.43.188\n162.159.43.187\n162.159.43.186\n162.159.43.185\n162.159.43.184\n162.159.43.183\n162.159.43.182\n162.159.43.181\n162.159.43.180\n162.159.43.18\n162.159.43.179\n162.159.43.178\n162.159.43.177\n162.159.43.176\n162.159.43.175\n162.159.43.174\n162.159.43.173\n162.159.43.172\n162.159.43.171\n162.159.43.170\n162.159.43.17\n162.159.43.169\n162.159.43.168\n162.159.43.167\n162.159.43.166\n162.159.43.165\n162.159.43.164\n162.159.43.163\n162.159.43.162\n162.159.43.161\n162.159.43.160\n162.159.43.16\n162.159.43.159\n162.159.43.158\n162.159.43.157\n162.159.43.156\n162.159.43.155\n162.159.43.154\n162.159.43.153\n162.159.43.152\n162.159.43.151\n162.159.43.150\n162.159.43.15\n162.159.43.149\n162.159.43.148\n162.159.43.147\n162.159.43.146\n162.159.43.145\n162.159.43.144\n162.159.43.143\n162.159.43.142\n162.159.43.141\n162.159.43.140\n162.159.43.14\n162.159.43.139\n162.159.43.138\n162.159.43.137\n162.159.43.136\n162.159.43.135\n162.159.43.134\n162.159.43.133\n162.159.43.132\n162.159.43.131\n162.159.43.130\n162.159.43.13\n162.159.43.129\n162.159.43.128\n162.159.43.127\n162.159.43.126\n162.159.43.125\n162.159.43.124\n162.159.43.123\n162.159.43.122\n162.159.43.121\n162.159.43.120\n162.159.43.12\n162.159.43.119\n162.159.43.118\n162.159.43.117\n162.159.43.116\n162.159.43.115\n162.159.43.114\n162.159.43.113\n162.159.43.112\n162.159.43.111\n162.159.43.110\n162.159.43.11\n162.159.43.109\n162.159.43.108\n162.159.43.107\n162.159.43.106\n162.159.43.105\n162.159.43.104\n162.159.43.103\n162.159.43.102\n162.159.43.101\n162.159.43.100\n162.159.43.10\n162.159.43.1\n162.159.43.0\n162.159.42.99\n162.159.42.98\n162.159.42.97\n162.159.42.96\n162.159.42.95\n162.159.42.94\n162.159.42.93\n162.159.42.92\n162.159.42.91\n162.159.42.90\n162.159.42.9\n162.159.42.89\n162.159.42.88\n162.159.42.87\n162.159.42.86\n162.159.42.85\n162.159.42.84\n162.159.42.83\n162.159.42.82\n162.159.42.81\n162.159.42.80\n162.159.42.8\n162.159.42.79\n162.159.42.78\n162.159.42.77\n162.159.42.76\n162.159.42.75\n162.159.42.74\n162.159.42.73\n162.159.42.72\n162.159.42.71\n162.159.42.70\n162.159.42.7\n162.159.42.69\n162.159.42.68\n162.159.42.67\n162.159.42.66\n162.159.42.65\n162.159.42.64\n162.159.42.63\n162.159.42.62\n162.159.42.61\n162.159.42.60\n162.159.42.6\n162.159.42.59\n162.159.42.58\n162.159.42.57\n162.159.42.56\n162.159.42.55\n162.159.42.54\n162.159.42.53\n162.159.42.52\n162.159.42.51\n162.159.42.50\n162.159.42.5\n162.159.42.49\n162.159.42.48\n162.159.42.47\n162.159.42.46\n162.159.42.45\n162.159.42.44\n162.159.42.43\n162.159.42.42\n162.159.42.41\n162.159.42.40\n162.159.42.4\n162.159.42.39\n162.159.42.38\n162.159.42.37\n162.159.42.36\n162.159.42.35\n162.159.42.34\n162.159.42.33\n162.159.42.32\n162.159.42.31\n162.159.42.30\n162.159.42.3\n162.159.42.29\n162.159.42.28\n162.159.42.27\n162.159.42.26\n162.159.42.255\n162.159.42.254\n162.159.42.253\n162.159.42.252\n162.159.42.251\n162.159.42.250\n162.159.42.25\n162.159.42.249\n162.159.42.248\n162.159.42.247\n162.159.42.246\n162.159.42.245\n162.159.42.244\n162.159.42.243\n162.159.42.242\n162.159.42.241\n162.159.42.240\n162.159.42.24\n162.159.42.239\n162.159.42.238\n162.159.42.237\n162.159.42.236\n162.159.42.235\n162.159.42.234\n162.159.42.233\n162.159.42.232\n162.159.42.231\n162.159.42.230\n162.159.42.23\n162.159.42.229\n162.159.42.228\n162.159.42.227\n162.159.42.226\n162.159.42.225\n162.159.42.224\n162.159.42.223\n162.159.42.222\n162.159.42.221\n162.159.42.220\n162.159.42.22\n162.159.42.219\n162.159.42.218\n162.159.42.217\n162.159.42.216\n162.159.42.215\n162.159.42.214\n162.159.42.213\n162.159.42.212\n162.159.42.211\n162.159.42.210\n162.159.42.21\n162.159.42.209\n162.159.42.208\n162.159.42.207\n162.159.42.206\n162.159.42.205\n162.159.42.204\n162.159.42.203\n162.159.42.202\n162.159.42.201\n162.159.42.200\n162.159.42.20\n162.159.42.2\n162.159.42.199\n162.159.42.198\n162.159.42.197\n162.159.42.196\n162.159.42.195\n162.159.42.194\n162.159.42.193\n162.159.42.192\n162.159.42.191\n162.159.42.190\n162.159.42.19\n162.159.42.189\n162.159.42.188\n162.159.42.187\n162.159.42.186\n162.159.42.185\n162.159.42.184\n162.159.42.183\n162.159.42.182\n162.159.42.181\n162.159.42.180\n162.159.42.18\n162.159.42.179\n162.159.42.178\n162.159.42.177\n162.159.42.176\n162.159.42.175\n162.159.42.174\n162.159.42.173\n162.159.42.172\n162.159.42.171\n162.159.42.170\n162.159.42.17\n162.159.42.169\n162.159.42.168\n162.159.42.167\n162.159.42.166\n162.159.42.165\n162.159.42.164\n162.159.42.163\n162.159.42.162\n162.159.42.161\n162.159.42.160\n162.159.42.16\n162.159.42.159\n162.159.42.158\n162.159.42.157\n162.159.42.156\n162.159.42.155\n162.159.42.154\n162.159.42.153\n162.159.42.152\n162.159.42.151\n162.159.42.150\n162.159.42.15\n162.159.42.149\n162.159.42.148\n162.159.42.147\n162.159.42.146\n162.159.42.145\n162.159.42.144\n162.159.42.143\n162.159.42.142\n162.159.42.141\n162.159.42.140\n162.159.42.14\n162.159.42.139\n162.159.42.138\n162.159.42.137\n162.159.42.136\n162.159.42.135\n162.159.42.134\n162.159.42.133\n162.159.42.132\n162.159.42.131\n162.159.42.130\n162.159.42.13\n162.159.42.129\n162.159.42.128\n162.159.42.127\n162.159.42.126\n162.159.42.125\n162.159.42.124\n162.159.42.123\n162.159.42.122\n162.159.42.121\n162.159.42.120\n162.159.42.12\n162.159.42.119\n162.159.42.118\n162.159.42.117\n162.159.42.116\n162.159.42.115\n162.159.42.114\n162.159.42.113\n162.159.42.112\n162.159.42.111\n162.159.42.110\n162.159.42.11\n162.159.42.109\n162.159.42.108\n162.159.42.107\n162.159.42.106\n162.159.42.105\n162.159.42.104\n162.159.42.103\n162.159.42.102\n162.159.42.101\n162.159.42.100\n162.159.42.10\n162.159.42.1\n162.159.42.0\n162.159.41.84\n162.159.41.77\n162.159.41.75\n162.159.41.70\n162.159.41.65\n162.159.41.64\n162.159.41.59\n162.159.41.42\n162.159.41.36\n162.159.41.35\n162.159.41.34\n162.159.41.32\n162.159.41.28\n162.159.41.27\n162.159.41.235\n162.159.41.223\n162.159.41.218\n162.159.41.202\n162.159.41.201\n162.159.41.191\n162.159.41.182\n162.159.41.18\n162.159.41.170\n162.159.41.17\n162.159.41.158\n162.159.41.151\n162.159.41.147\n162.159.41.134\n162.159.41.110\n162.159.41.107\n162.159.41.104\n162.159.41.1\n162.159.41.0\n162.159.40.91\n162.159.40.86\n162.159.40.83\n162.159.40.74\n162.159.40.42\n162.159.40.27\n162.159.40.229\n162.159.40.226\n162.159.40.215\n162.159.40.209\n162.159.40.207\n162.159.40.203\n162.159.40.202\n162.159.40.189\n162.159.40.186\n162.159.40.184\n162.159.40.183\n162.159.40.182\n162.159.40.172\n162.159.40.170\n162.159.40.165\n162.159.40.15\n162.159.40.1\n162.159.4.95\n162.159.4.86\n162.159.4.81\n162.159.4.71\n162.159.4.70\n162.159.4.66\n162.159.4.62\n162.159.4.6\n162.159.4.59\n162.159.4.57\n162.159.4.56\n162.159.4.45\n162.159.4.42\n162.159.4.37\n162.159.4.3\n162.159.4.29\n162.159.4.27\n162.159.4.25\n162.159.4.248\n162.159.4.244\n162.159.4.243\n162.159.4.227\n162.159.4.220\n162.159.4.208\n162.159.4.198\n162.159.4.193\n162.159.4.188\n162.159.4.16\n162.159.4.158\n162.159.4.147\n162.159.4.142\n162.159.4.135\n162.159.4.123\n162.159.4.111\n162.159.4.106\n162.159.4.100\n162.159.39.99\n162.159.39.98\n162.159.39.97\n162.159.39.96\n162.159.39.95\n162.159.39.94\n162.159.39.93\n162.159.39.92\n162.159.39.91\n162.159.39.90\n162.159.39.9\n162.159.39.89\n162.159.39.88\n162.159.39.87\n162.159.39.86\n162.159.39.85\n162.159.39.84\n162.159.39.83\n162.159.39.82\n162.159.39.81\n162.159.39.80\n162.159.39.8\n162.159.39.79\n162.159.39.78\n162.159.39.77\n162.159.39.76\n162.159.39.75\n162.159.39.74\n162.159.39.73\n162.159.39.72\n162.159.39.71\n162.159.39.70\n162.159.39.7\n162.159.39.69\n162.159.39.67\n162.159.39.66\n162.159.39.65\n162.159.39.64\n162.159.39.63\n162.159.39.62\n162.159.39.61\n162.159.39.60\n162.159.39.6\n162.159.39.59\n162.159.39.58\n162.159.39.57\n162.159.39.56\n162.159.39.55\n162.159.39.54\n162.159.39.53\n162.159.39.52\n162.159.39.51\n162.159.39.50\n162.159.39.5\n162.159.39.49\n162.159.39.48\n162.159.39.47\n162.159.39.46\n162.159.39.45\n162.159.39.44\n162.159.39.43\n162.159.39.42\n162.159.39.41\n162.159.39.40\n162.159.39.4\n162.159.39.39\n162.159.39.38\n162.159.39.37\n162.159.39.36\n162.159.39.35\n162.159.39.34\n162.159.39.33\n162.159.39.32\n162.159.39.31\n162.159.39.30\n162.159.39.3\n162.159.39.29\n162.159.39.28\n162.159.39.27\n162.159.39.26\n162.159.39.254\n162.159.39.253\n162.159.39.252\n162.159.39.251\n162.159.39.250\n162.159.39.25\n162.159.39.249\n162.159.39.248\n162.159.39.247\n162.159.39.246\n162.159.39.245\n162.159.39.244\n162.159.39.243\n162.159.39.242\n162.159.39.241\n162.159.39.240\n162.159.39.24\n162.159.39.239\n162.159.39.238\n162.159.39.237\n162.159.39.236\n162.159.39.235\n162.159.39.234\n162.159.39.233\n162.159.39.232\n162.159.39.231\n162.159.39.230\n162.159.39.23\n162.159.39.229\n162.159.39.228\n162.159.39.227\n162.159.39.226\n162.159.39.225\n162.159.39.224\n162.159.39.223\n162.159.39.222\n162.159.39.221\n162.159.39.220\n162.159.39.22\n162.159.39.219\n162.159.39.218\n162.159.39.217\n162.159.39.216\n162.159.39.215\n162.159.39.214\n162.159.39.213\n162.159.39.212\n162.159.39.211\n162.159.39.210\n162.159.39.21\n162.159.39.209\n162.159.39.208\n162.159.39.207\n162.159.39.206\n162.159.39.205\n162.159.39.204\n162.159.39.203\n162.159.39.202\n162.159.39.201\n162.159.39.200\n162.159.39.20\n162.159.39.2\n162.159.39.199\n162.159.39.198\n162.159.39.197\n162.159.39.196\n162.159.39.195\n162.159.39.194\n162.159.39.193\n162.159.39.192\n162.159.39.191\n162.159.39.190\n162.159.39.19\n162.159.39.189\n162.159.39.188\n162.159.39.187\n162.159.39.186\n162.159.39.184\n162.159.39.183\n162.159.39.182\n162.159.39.181\n162.159.39.180\n162.159.39.18\n162.159.39.179\n162.159.39.178\n162.159.39.177\n162.159.39.176\n162.159.39.175\n162.159.39.174\n162.159.39.173\n162.159.39.172\n162.159.39.171\n162.159.39.170\n162.159.39.17\n162.159.39.169\n162.159.39.168\n162.159.39.167\n162.159.39.166\n162.159.39.165\n162.159.39.164\n162.159.39.163\n162.159.39.162\n162.159.39.161\n162.159.39.160\n162.159.39.16\n162.159.39.159\n162.159.39.158\n162.159.39.157\n162.159.39.156\n162.159.39.155\n162.159.39.154\n162.159.39.153\n162.159.39.152\n162.159.39.151\n162.159.39.150\n162.159.39.15\n162.159.39.149\n162.159.39.148\n162.159.39.147\n162.159.39.146\n162.159.39.145\n162.159.39.144\n162.159.39.143\n162.159.39.142\n162.159.39.141\n162.159.39.140\n162.159.39.14\n162.159.39.139\n162.159.39.138\n162.159.39.137\n162.159.39.136\n162.159.39.135\n162.159.39.134\n162.159.39.133\n162.159.39.132\n162.159.39.131\n162.159.39.130\n162.159.39.13\n162.159.39.129\n162.159.39.128\n162.159.39.127\n162.159.39.126\n162.159.39.125\n162.159.39.124\n162.159.39.123\n162.159.39.122\n162.159.39.121\n162.159.39.120\n162.159.39.12\n162.159.39.119\n162.159.39.118\n162.159.39.117\n162.159.39.116\n162.159.39.115\n162.159.39.114\n162.159.39.113\n162.159.39.112\n162.159.39.111\n162.159.39.110\n162.159.39.11\n162.159.39.109\n162.159.39.108\n162.159.39.107\n162.159.39.106\n162.159.39.105\n162.159.39.104\n162.159.39.103\n162.159.39.102\n162.159.39.101\n162.159.39.100\n162.159.39.10\n162.159.39.1\n162.159.39.0\n162.159.38.99\n162.159.38.98\n162.159.38.97\n162.159.38.96\n162.159.38.95\n162.159.38.94\n162.159.38.93\n162.159.38.92\n162.159.38.91\n162.159.38.90\n162.159.38.9\n162.159.38.89\n162.159.38.88\n162.159.38.87\n162.159.38.86\n162.159.38.85\n162.159.38.84\n162.159.38.83\n162.159.38.82\n162.159.38.81\n162.159.38.80\n162.159.38.8\n162.159.38.79\n162.159.38.78\n162.159.38.77\n162.159.38.76\n162.159.38.75\n162.159.38.74\n162.159.38.73\n162.159.38.72\n162.159.38.71\n162.159.38.70\n162.159.38.7\n162.159.38.69\n162.159.38.68\n162.159.38.67\n162.159.38.66\n162.159.38.65\n162.159.38.64\n162.159.38.63\n162.159.38.62\n162.159.38.61\n162.159.38.60\n162.159.38.6\n162.159.38.59\n162.159.38.58\n162.159.38.57\n162.159.38.56\n162.159.38.55\n162.159.38.54\n162.159.38.53\n162.159.38.52\n162.159.38.51\n162.159.38.50\n162.159.38.5\n162.159.38.49\n162.159.38.48\n162.159.38.47\n162.159.38.46\n162.159.38.45\n162.159.38.44\n162.159.38.43\n162.159.38.42\n162.159.38.41\n162.159.38.40\n162.159.38.4\n162.159.38.39\n162.159.38.38\n162.159.38.37\n162.159.38.36\n162.159.38.35\n162.159.38.34\n162.159.38.33\n162.159.38.32\n162.159.38.31\n162.159.38.30\n162.159.38.3\n162.159.38.29\n162.159.38.28\n162.159.38.27\n162.159.38.26\n162.159.38.255\n162.159.38.254\n162.159.38.253\n162.159.38.252\n162.159.38.251\n162.159.38.250\n162.159.38.25\n162.159.38.249\n162.159.38.248\n162.159.38.247\n162.159.38.245\n162.159.38.244\n162.159.38.243\n162.159.38.242\n162.159.38.241\n162.159.38.240\n162.159.38.24\n162.159.38.239\n162.159.38.238\n162.159.38.237\n162.159.38.236\n162.159.38.235\n162.159.38.234\n162.159.38.233\n162.159.38.232\n162.159.38.231\n162.159.38.230\n162.159.38.23\n162.159.38.229\n162.159.38.228\n162.159.38.227\n162.159.38.226\n162.159.38.225\n162.159.38.224\n162.159.38.223\n162.159.38.222\n162.159.38.221\n162.159.38.220\n162.159.38.22\n162.159.38.219\n162.159.38.218\n162.159.38.217\n162.159.38.216\n162.159.38.215\n162.159.38.214\n162.159.38.213\n162.159.38.212\n162.159.38.211\n162.159.38.210\n162.159.38.21\n162.159.38.209\n162.159.38.208\n162.159.38.207\n162.159.38.206\n162.159.38.205\n162.159.38.204\n162.159.38.203\n162.159.38.202\n162.159.38.201\n162.159.38.200\n162.159.38.20\n162.159.38.2\n162.159.38.199\n162.159.38.198\n162.159.38.197\n162.159.38.196\n162.159.38.195\n162.159.38.194\n162.159.38.193\n162.159.38.192\n162.159.38.191\n162.159.38.190\n162.159.38.19\n162.159.38.189\n162.159.38.188\n162.159.38.187\n162.159.38.186\n162.159.38.185\n162.159.38.184\n162.159.38.183\n162.159.38.182\n162.159.38.181\n162.159.38.180\n162.159.38.18\n162.159.38.179\n162.159.38.178\n162.159.38.177\n162.159.38.176\n162.159.38.175\n162.159.38.174\n162.159.38.173\n162.159.38.172\n162.159.38.171\n162.159.38.170\n162.159.38.17\n162.159.38.169\n162.159.38.168\n162.159.38.167\n162.159.38.166\n162.159.38.165\n162.159.38.164\n162.159.38.163\n162.159.38.162\n162.159.38.161\n162.159.38.160\n162.159.38.16\n162.159.38.159\n162.159.38.158\n162.159.38.157\n162.159.38.156\n162.159.38.155\n162.159.38.154\n162.159.38.153\n162.159.38.152\n162.159.38.151\n162.159.38.150\n162.159.38.15\n162.159.38.149\n162.159.38.148\n162.159.38.147\n162.159.38.146\n162.159.38.145\n162.159.38.144\n162.159.38.143\n162.159.38.142\n162.159.38.141\n162.159.38.140\n162.159.38.14\n162.159.38.139\n162.159.38.138\n162.159.38.137\n162.159.38.136\n162.159.38.135\n162.159.38.134\n162.159.38.133\n162.159.38.132\n162.159.38.131\n162.159.38.130\n162.159.38.13\n162.159.38.129\n162.159.38.128\n162.159.38.127\n162.159.38.126\n162.159.38.125\n162.159.38.124\n162.159.38.123\n162.159.38.122\n162.159.38.121\n162.159.38.120\n162.159.38.12\n162.159.38.119\n162.159.38.118\n162.159.38.117\n162.159.38.116\n162.159.38.115\n162.159.38.114\n162.159.38.113\n162.159.38.112\n162.159.38.111\n162.159.38.110\n162.159.38.11\n162.159.38.109\n162.159.38.108\n162.159.38.107\n162.159.38.106\n162.159.38.105\n162.159.38.104\n162.159.38.103\n162.159.38.102\n162.159.38.101\n162.159.38.100\n162.159.38.10\n162.159.38.1\n162.159.38.0\n162.159.36.96\n162.159.36.86\n162.159.36.7\n162.159.36.64\n162.159.36.61\n162.159.36.6\n162.159.36.58\n162.159.36.46\n162.159.36.43\n162.159.36.36\n162.159.36.253\n162.159.36.252\n162.159.36.25\n162.159.36.249\n162.159.36.247\n162.159.36.243\n162.159.36.240\n162.159.36.237\n162.159.36.230\n162.159.36.227\n162.159.36.226\n162.159.36.224\n162.159.36.220\n162.159.36.216\n162.159.36.199\n162.159.36.190\n162.159.36.185\n162.159.36.181\n162.159.36.175\n162.159.36.158\n162.159.36.152\n162.159.36.141\n162.159.36.139\n162.159.36.136\n162.159.36.134\n162.159.36.132\n162.159.36.126\n162.159.36.125\n162.159.36.123\n162.159.36.115\n162.159.36.114\n162.159.36.110\n162.159.36.11\n162.159.36.104\n162.159.36.1\n162.159.35.99\n162.159.35.98\n162.159.35.97\n162.159.35.96\n162.159.35.95\n162.159.35.94\n162.159.35.93\n162.159.35.92\n162.159.35.91\n162.159.35.90\n162.159.35.9\n162.159.35.89\n162.159.35.88\n162.159.35.87\n162.159.35.86\n162.159.35.85\n162.159.35.84\n162.159.35.83\n162.159.35.82\n162.159.35.81\n162.159.35.80\n162.159.35.8\n162.159.35.79\n162.159.35.78\n162.159.35.77\n162.159.35.76\n162.159.35.75\n162.159.35.74\n162.159.35.73\n162.159.35.72\n162.159.35.71\n162.159.35.70\n162.159.35.7\n162.159.35.69\n162.159.35.68\n162.159.35.67\n162.159.35.66\n162.159.35.65\n162.159.35.64\n162.159.35.63\n162.159.35.62\n162.159.35.61\n162.159.35.60\n162.159.35.6\n162.159.35.59\n162.159.35.58\n162.159.35.57\n162.159.35.56\n162.159.35.55\n162.159.35.54\n162.159.35.53\n162.159.35.52\n162.159.35.51\n162.159.35.50\n162.159.35.5\n162.159.35.49\n162.159.35.48\n162.159.35.47\n162.159.35.46\n162.159.35.45\n162.159.35.44\n162.159.35.43\n162.159.35.42\n162.159.35.41\n162.159.35.40\n162.159.35.4\n162.159.35.39\n162.159.35.38\n162.159.35.37\n162.159.35.36\n162.159.35.35\n162.159.35.34\n162.159.35.33\n162.159.35.32\n162.159.35.31\n162.159.35.30\n162.159.35.3\n162.159.35.29\n162.159.35.28\n162.159.35.27\n162.159.35.26\n162.159.35.254\n162.159.35.253\n162.159.35.251\n162.159.35.250\n162.159.35.25\n162.159.35.249\n162.159.35.248\n162.159.35.247\n162.159.35.246\n162.159.35.245\n162.159.35.244\n162.159.35.243\n162.159.35.242\n162.159.35.241\n162.159.35.240\n162.159.35.24\n162.159.35.239\n162.159.35.238\n162.159.35.237\n162.159.35.236\n162.159.35.235\n162.159.35.234\n162.159.35.233\n162.159.35.232\n162.159.35.231\n162.159.35.230\n162.159.35.23\n162.159.35.229\n162.159.35.228\n162.159.35.227\n162.159.35.226\n162.159.35.225\n162.159.35.224\n162.159.35.223\n162.159.35.222\n162.159.35.221\n162.159.35.220\n162.159.35.22\n162.159.35.219\n162.159.35.218\n162.159.35.217\n162.159.35.216\n162.159.35.215\n162.159.35.214\n162.159.35.213\n162.159.35.212\n162.159.35.211\n162.159.35.210\n162.159.35.21\n162.159.35.209\n162.159.35.208\n162.159.35.207\n162.159.35.206\n162.159.35.205\n162.159.35.204\n162.159.35.203\n162.159.35.202\n162.159.35.201\n162.159.35.200\n162.159.35.20\n162.159.35.2\n162.159.35.199\n162.159.35.198\n162.159.35.197\n162.159.35.196\n162.159.35.195\n162.159.35.194\n162.159.35.193\n162.159.35.192\n162.159.35.191\n162.159.35.190\n162.159.35.19\n162.159.35.189\n162.159.35.188\n162.159.35.187\n162.159.35.186\n162.159.35.185\n162.159.35.184\n162.159.35.183\n162.159.35.182\n162.159.35.181\n162.159.35.180\n162.159.35.18\n162.159.35.179\n162.159.35.178\n162.159.35.177\n162.159.35.176\n162.159.35.175\n162.159.35.174\n162.159.35.173\n162.159.35.172\n162.159.35.171\n162.159.35.170\n162.159.35.17\n162.159.35.169\n162.159.35.168\n162.159.35.167\n162.159.35.166\n162.159.35.165\n162.159.35.164\n162.159.35.163\n162.159.35.162\n162.159.35.161\n162.159.35.160\n162.159.35.16\n162.159.35.159\n162.159.35.158\n162.159.35.157\n162.159.35.156\n162.159.35.155\n162.159.35.154\n162.159.35.153\n162.159.35.152\n162.159.35.151\n162.159.35.150\n162.159.35.15\n162.159.35.149\n162.159.35.148\n162.159.35.147\n162.159.35.146\n162.159.35.145\n162.159.35.144\n162.159.35.143\n162.159.35.142\n162.159.35.141\n162.159.35.140\n162.159.35.14\n162.159.35.139\n162.159.35.138\n162.159.35.137\n162.159.35.136\n162.159.35.135\n162.159.35.134\n162.159.35.133\n162.159.35.132\n162.159.35.131\n162.159.35.130\n162.159.35.13\n162.159.35.129\n162.159.35.128\n162.159.35.127\n162.159.35.126\n162.159.35.125\n162.159.35.124\n162.159.35.123\n162.159.35.122\n162.159.35.121\n162.159.35.120\n162.159.35.12\n162.159.35.119\n162.159.35.118\n162.159.35.117\n162.159.35.116\n162.159.35.115\n162.159.35.114\n162.159.35.113\n162.159.35.112\n162.159.35.111\n162.159.35.110\n162.159.35.11\n162.159.35.109\n162.159.35.108\n162.159.35.107\n162.159.35.106\n162.159.35.105\n162.159.35.104\n162.159.35.103\n162.159.35.102\n162.159.35.101\n162.159.35.100\n162.159.35.10\n162.159.35.1\n162.159.35.0\n162.159.34.99\n162.159.34.98\n162.159.34.97\n162.159.34.96\n162.159.34.95\n162.159.34.94\n162.159.34.93\n162.159.34.92\n162.159.34.91\n162.159.34.90\n162.159.34.9\n162.159.34.89\n162.159.34.88\n162.159.34.87\n162.159.34.86\n162.159.34.85\n162.159.34.84\n162.159.34.83\n162.159.34.82\n162.159.34.81\n162.159.34.80\n162.159.34.8\n162.159.34.79\n162.159.34.78\n162.159.34.77\n162.159.34.76\n162.159.34.75\n162.159.34.74\n162.159.34.73\n162.159.34.72\n162.159.34.71\n162.159.34.70\n162.159.34.7\n162.159.34.69\n162.159.34.68\n162.159.34.67\n162.159.34.66\n162.159.34.65\n162.159.34.64\n162.159.34.63\n162.159.34.62\n162.159.34.61\n162.159.34.60\n162.159.34.6\n162.159.34.59\n162.159.34.58\n162.159.34.57\n162.159.34.56\n162.159.34.55\n162.159.34.54\n162.159.34.53\n162.159.34.52\n162.159.34.51\n162.159.34.50\n162.159.34.5\n162.159.34.49\n162.159.34.48\n162.159.34.47\n162.159.34.46\n162.159.34.45\n162.159.34.44\n162.159.34.43\n162.159.34.42\n162.159.34.41\n162.159.34.40\n162.159.34.4\n162.159.34.39\n162.159.34.38\n162.159.34.37\n162.159.34.36\n162.159.34.35\n162.159.34.34\n162.159.34.33\n162.159.34.32\n162.159.34.31\n162.159.34.30\n162.159.34.3\n162.159.34.29\n162.159.34.28\n162.159.34.27\n162.159.34.26\n162.159.34.255\n162.159.34.254\n162.159.34.253\n162.159.34.252\n162.159.34.251\n162.159.34.250\n162.159.34.25\n162.159.34.249\n162.159.34.248\n162.159.34.247\n162.159.34.246\n162.159.34.245\n162.159.34.244\n162.159.34.243\n162.159.34.242\n162.159.34.241\n162.159.34.240\n162.159.34.24\n162.159.34.239\n162.159.34.238\n162.159.34.237\n162.159.34.236\n162.159.34.235\n162.159.34.234\n162.159.34.233\n162.159.34.232\n162.159.34.231\n162.159.34.230\n162.159.34.23\n162.159.34.229\n162.159.34.228\n162.159.34.227\n162.159.34.226\n162.159.34.225\n162.159.34.224\n162.159.34.223\n162.159.34.222\n162.159.34.221\n162.159.34.220\n162.159.34.22\n162.159.34.219\n162.159.34.218\n162.159.34.217\n162.159.34.216\n162.159.34.215\n162.159.34.214\n162.159.34.213\n162.159.34.212\n162.159.34.211\n162.159.34.210\n162.159.34.21\n162.159.34.209\n162.159.34.208\n162.159.34.207\n162.159.34.206\n162.159.34.205\n162.159.34.204\n162.159.34.203\n162.159.34.202\n162.159.34.201\n162.159.34.200\n162.159.34.20\n162.159.34.2\n162.159.34.199\n162.159.34.198\n162.159.34.197\n162.159.34.196\n162.159.34.195\n162.159.34.194\n162.159.34.193\n162.159.34.192\n162.159.34.191\n162.159.34.190\n162.159.34.19\n162.159.34.189\n162.159.34.188\n162.159.34.187\n162.159.34.186\n162.159.34.185\n162.159.34.184\n162.159.34.183\n162.159.34.182\n162.159.34.181\n162.159.34.180\n162.159.34.18\n162.159.34.179\n162.159.34.178\n162.159.34.177\n162.159.34.176\n162.159.34.175\n162.159.34.174\n162.159.34.173\n162.159.34.172\n162.159.34.171\n162.159.34.170\n162.159.34.17\n162.159.34.169\n162.159.34.168\n162.159.34.167\n162.159.34.166\n162.159.34.165\n162.159.34.164\n162.159.34.163\n162.159.34.162\n162.159.34.161\n162.159.34.160\n162.159.34.16\n162.159.34.159\n162.159.34.158\n162.159.34.157\n162.159.34.156\n162.159.34.155\n162.159.34.154\n162.159.34.153\n162.159.34.152\n162.159.34.151\n162.159.34.150\n162.159.34.15\n162.159.34.149\n162.159.34.148\n162.159.34.147\n162.159.34.146\n162.159.34.145\n162.159.34.144\n162.159.34.143\n162.159.34.142\n162.159.34.141\n162.159.34.140\n162.159.34.14\n162.159.34.139\n162.159.34.138\n162.159.34.137\n162.159.34.136\n162.159.34.135\n162.159.34.134\n162.159.34.133\n162.159.34.132\n162.159.34.131\n162.159.34.130\n162.159.34.13\n162.159.34.129\n162.159.34.128\n162.159.34.127\n162.159.34.126\n162.159.34.125\n162.159.34.124\n162.159.34.123\n162.159.34.122\n162.159.34.121\n162.159.34.120\n162.159.34.12\n162.159.34.119\n162.159.34.118\n162.159.34.117\n162.159.34.116\n162.159.34.115\n162.159.34.114\n162.159.34.113\n162.159.34.112\n162.159.34.111\n162.159.34.110\n162.159.34.11\n162.159.34.109\n162.159.34.108\n162.159.34.107\n162.159.34.106\n162.159.34.105\n162.159.34.104\n162.159.34.103\n162.159.34.102\n162.159.34.101\n162.159.34.100\n162.159.34.10\n162.159.34.1\n162.159.34.0\n162.159.33.93\n162.159.33.92\n162.159.33.83\n162.159.33.74\n162.159.33.68\n162.159.33.59\n162.159.33.57\n162.159.33.54\n162.159.33.251\n162.159.33.247\n162.159.33.238\n162.159.33.234\n162.159.33.23\n162.159.33.227\n162.159.33.224\n162.159.33.22\n162.159.33.217\n162.159.33.216\n162.159.33.211\n162.159.33.204\n162.159.33.197\n162.159.33.186\n162.159.33.17\n162.159.33.165\n162.159.33.154\n162.159.33.152\n162.159.33.143\n162.159.33.141\n162.159.33.130\n162.159.33.127\n162.159.33.121\n162.159.33.119\n162.159.33.115\n162.159.33.110\n162.159.32.99\n162.159.32.95\n162.159.32.90\n162.159.32.72\n162.159.32.7\n162.159.32.50\n162.159.32.49\n162.159.32.46\n162.159.32.34\n162.159.32.26\n162.159.32.255\n162.159.32.252\n162.159.32.249\n162.159.32.238\n162.159.32.23\n162.159.32.211\n162.159.32.210\n162.159.32.206\n162.159.32.204\n162.159.32.177\n162.159.32.175\n162.159.32.174\n162.159.32.169\n162.159.32.155\n162.159.32.153\n162.159.32.139\n162.159.32.135\n162.159.32.119\n162.159.32.118\n162.159.32.109\n162.159.3.98\n162.159.3.93\n162.159.3.91\n162.159.3.72\n162.159.3.71\n162.159.3.68\n162.159.3.65\n162.159.3.61\n162.159.3.27\n162.159.3.246\n162.159.3.245\n162.159.3.235\n162.159.3.234\n162.159.3.233\n162.159.3.229\n162.159.3.224\n162.159.3.190\n162.159.3.183\n162.159.3.182\n162.159.3.179\n162.159.3.176\n162.159.3.169\n162.159.3.157\n162.159.3.156\n162.159.3.136\n162.159.3.135\n162.159.3.131\n162.159.3.123\n162.159.3.121\n162.159.3.120\n162.159.3.118\n162.159.3.117\n162.159.3.104\n162.159.27.173\n162.159.27.162\n162.159.26.49\n162.159.25.85\n162.159.25.84\n162.159.25.206\n162.159.25.167\n162.159.24.87\n162.159.24.85\n162.159.24.69\n162.159.24.244\n162.159.24.197\n162.159.24.129\n162.159.23.93\n162.159.23.84\n162.159.23.82\n162.159.23.80\n162.159.23.66\n162.159.23.41\n162.159.23.39\n162.159.23.37\n162.159.23.240\n162.159.23.236\n162.159.23.230\n162.159.23.205\n162.159.23.194\n162.159.23.184\n162.159.23.181\n162.159.23.16\n162.159.23.158\n162.159.23.154\n162.159.23.145\n162.159.23.144\n162.159.23.138\n162.159.23.137\n162.159.23.13\n162.159.23.124\n162.159.23.122\n162.159.23.120\n162.159.23.118\n162.159.23.111\n162.159.23.106\n162.159.23.102\n162.159.22.95\n162.159.22.92\n162.159.22.90\n162.159.22.79\n162.159.22.73\n162.159.22.71\n162.159.22.66\n162.159.22.65\n162.159.22.38\n162.159.22.37\n162.159.22.28\n162.159.22.226\n162.159.22.221\n162.159.22.219\n162.159.22.214\n162.159.22.212\n162.159.22.211\n162.159.22.209\n162.159.22.207\n162.159.22.196\n162.159.22.193\n162.159.22.192\n162.159.22.186\n162.159.22.185\n162.159.22.183\n162.159.22.180\n162.159.22.161\n162.159.22.16\n162.159.22.159\n162.159.22.154\n162.159.22.150\n162.159.22.149\n162.159.22.144\n162.159.22.132\n162.159.22.131\n162.159.22.125\n162.159.22.123\n162.159.22.121\n162.159.22.115\n162.159.21.96\n162.159.21.94\n162.159.21.91\n162.159.21.86\n162.159.21.84\n162.159.21.83\n162.159.21.74\n162.159.21.73\n162.159.21.64\n162.159.21.5\n162.159.21.33\n162.159.21.244\n162.159.21.231\n162.159.21.221\n162.159.21.22\n162.159.21.218\n162.159.21.184\n162.159.21.18\n162.159.21.178\n162.159.21.167\n162.159.21.16\n162.159.21.159\n162.159.21.153\n162.159.21.147\n162.159.21.127\n162.159.21.118\n162.159.21.11\n162.159.21.108\n162.159.20.79\n162.159.20.73\n162.159.20.7\n162.159.20.5\n162.159.20.42\n162.159.20.28\n162.159.20.247\n162.159.20.243\n162.159.20.232\n162.159.20.23\n162.159.20.224\n162.159.20.218\n162.159.20.211\n162.159.20.208\n162.159.20.206\n162.159.20.194\n162.159.20.192\n162.159.20.191\n162.159.20.170\n162.159.20.169\n162.159.20.161\n162.159.20.155\n162.159.20.15\n162.159.20.139\n162.159.20.137\n162.159.20.134\n162.159.20.132\n162.159.20.129\n162.159.20.121\n162.159.20.108\n162.159.20.106\n162.159.20.104\n162.159.2.99\n162.159.2.97\n162.159.2.96\n162.159.2.94\n162.159.2.89\n162.159.2.88\n162.159.2.85\n162.159.2.73\n162.159.2.62\n162.159.2.61\n162.159.2.57\n162.159.2.48\n162.159.2.46\n162.159.2.32\n162.159.2.28\n162.159.2.253\n162.159.2.25\n162.159.2.243\n162.159.2.218\n162.159.2.215\n162.159.2.210\n162.159.2.190\n162.159.2.183\n162.159.2.181\n162.159.2.180\n162.159.2.18\n162.159.2.178\n162.159.2.174\n162.159.2.166\n162.159.2.161\n162.159.2.152\n162.159.2.140\n162.159.2.14\n162.159.2.139\n162.159.2.138\n162.159.2.136\n162.159.2.129\n162.159.2.121\n162.159.2.112\n162.159.2.110\n162.159.2.11\n162.159.2.106\n162.159.2.1\n162.159.19.80\n162.159.19.7\n162.159.19.68\n162.159.19.62\n162.159.19.35\n162.159.19.3\n162.159.19.26\n162.159.19.25\n162.159.19.248\n162.159.19.244\n162.159.19.235\n162.159.19.21\n162.159.19.206\n162.159.19.204\n162.159.19.203\n162.159.19.201\n162.159.19.199\n162.159.19.173\n162.159.19.170\n162.159.19.168\n162.159.19.165\n162.159.19.163\n162.159.19.159\n162.159.19.147\n162.159.19.139\n162.159.19.13\n162.159.19.125\n162.159.18.79\n162.159.18.72\n162.159.18.64\n162.159.18.44\n162.159.18.38\n162.159.18.32\n162.159.18.252\n162.159.18.233\n162.159.18.224\n162.159.18.215\n162.159.18.208\n162.159.18.200\n162.159.18.2\n162.159.18.196\n162.159.18.192\n162.159.18.191\n162.159.18.172\n162.159.18.167\n162.159.18.162\n162.159.18.151\n162.159.18.150\n162.159.18.145\n162.159.18.143\n162.159.18.140\n162.159.18.139\n162.159.18.136\n162.159.18.133\n162.159.18.128\n162.159.18.126\n162.159.18.12\n162.159.18.114\n162.159.18.112\n162.159.18.111\n162.159.18.106\n162.159.17.95\n162.159.17.85\n162.159.17.82\n162.159.17.79\n162.159.17.75\n162.159.17.70\n162.159.17.51\n162.159.17.49\n162.159.17.43\n162.159.17.32\n162.159.17.29\n162.159.17.24\n162.159.17.234\n162.159.17.232\n162.159.17.221\n162.159.17.205\n162.159.17.194\n162.159.17.183\n162.159.17.182\n162.159.17.178\n162.159.17.172\n162.159.17.165\n162.159.17.152\n162.159.17.146\n162.159.17.139\n162.159.17.134\n162.159.17.127\n162.159.17.122\n162.159.17.117\n162.159.16.90\n162.159.16.83\n162.159.16.58\n162.159.16.47\n162.159.16.43\n162.159.16.34\n162.159.16.240\n162.159.16.225\n162.159.16.212\n162.159.16.201\n162.159.16.200\n162.159.16.195\n162.159.16.180\n162.159.16.166\n162.159.16.159\n162.159.16.153\n162.159.16.146\n162.159.16.140\n162.159.16.127\n162.159.16.123\n162.159.16.117\n162.159.16.102\n162.159.15.95\n162.159.15.75\n162.159.15.71\n162.159.15.36\n162.159.15.33\n162.159.15.3\n162.159.15.29\n162.159.15.26\n162.159.15.244\n162.159.15.235\n162.159.15.22\n162.159.15.216\n162.159.15.21\n162.159.15.206\n162.159.15.197\n162.159.15.182\n162.159.15.178\n162.159.15.166\n162.159.15.161\n162.159.15.16\n162.159.15.157\n162.159.15.154\n162.159.15.148\n162.159.15.132\n162.159.15.131\n162.159.15.121\n162.159.15.119\n162.159.15.117\n162.159.15.112\n162.159.15.110\n162.159.15.106\n162.159.15.103\n162.159.14.94\n162.159.14.91\n162.159.14.87\n162.159.14.73\n162.159.14.72\n162.159.14.66\n162.159.14.60\n162.159.14.4\n162.159.14.28\n162.159.14.26\n162.159.14.251\n162.159.14.247\n162.159.14.21\n162.159.14.201\n162.159.14.2\n162.159.14.197\n162.159.14.192\n162.159.14.189\n162.159.14.134\n162.159.14.131\n162.159.14.130\n162.159.14.13\n162.159.14.125\n162.159.14.12\n162.159.13.98\n162.159.13.85\n162.159.13.77\n162.159.13.74\n162.159.13.58\n162.159.13.55\n162.159.13.50\n162.159.13.47\n162.159.13.41\n162.159.13.39\n162.159.13.35\n162.159.13.3\n162.159.13.253\n162.159.13.246\n162.159.13.244\n162.159.13.223\n162.159.13.198\n162.159.13.194\n162.159.13.19\n162.159.13.171\n162.159.13.168\n162.159.13.165\n162.159.13.153\n162.159.13.151\n162.159.13.15\n162.159.13.126\n162.159.13.123\n162.159.13.114\n162.159.13.106\n162.159.13.104\n162.159.12.69\n162.159.12.65\n162.159.12.55\n162.159.12.5\n162.159.12.42\n162.159.12.39\n162.159.12.36\n162.159.12.254\n162.159.12.247\n162.159.12.228\n162.159.12.223\n162.159.12.207\n162.159.12.199\n162.159.12.195\n162.159.12.172\n162.159.12.157\n162.159.12.13\n162.159.12.125\n162.159.12.123\n162.159.12.111\n162.159.12.108\n162.159.12.10\n162.159.11.99\n162.159.11.91\n162.159.11.87\n162.159.11.84\n162.159.11.78\n162.159.11.75\n162.159.11.26\n162.159.11.247\n162.159.11.235\n162.159.11.232\n162.159.11.208\n162.159.11.198\n162.159.11.192\n162.159.11.173\n162.159.11.168\n162.159.11.167\n162.159.11.162\n162.159.11.157\n162.159.11.139\n162.159.11.135\n162.159.11.130\n162.159.11.13\n162.159.11.122\n162.159.11.111\n162.159.11.106\n162.159.11.10\n162.159.10.96\n162.159.10.9\n162.159.10.69\n162.159.10.65\n162.159.10.58\n162.159.10.55\n162.159.10.49\n162.159.10.38\n162.159.10.254\n162.159.10.249\n162.159.10.247\n162.159.10.221\n162.159.10.207\n162.159.10.203\n162.159.10.199\n162.159.10.195\n162.159.10.181\n162.159.10.178\n162.159.10.161\n162.159.10.155\n162.159.10.154\n162.159.10.145\n162.159.10.143\n162.159.10.141\n162.159.10.14\n162.159.10.138\n162.159.10.134\n162.159.10.133\n162.159.10.13\n162.159.10.120\n162.159.10.109\n162.159.10.105\n162.159.10.103\n162.159.10.100\n162.159.1.97\n162.159.1.75\n162.159.1.67\n162.159.1.62\n162.159.1.60\n162.159.1.48\n162.159.1.36\n162.159.1.35\n162.159.1.32\n162.159.1.243\n162.159.1.24\n162.159.1.238\n162.159.1.235\n162.159.1.226\n162.159.1.221\n162.159.1.20\n162.159.1.194\n162.159.1.185\n162.159.1.170\n162.159.1.154\n162.159.1.136\n162.159.1.122\n162.159.1.120\n162.159.1.1\n162.159.0.97\n162.159.0.93\n162.159.0.88\n162.159.0.80\n162.159.0.76\n162.159.0.73\n162.159.0.70\n162.159.0.7\n162.159.0.69\n162.159.0.63\n162.159.0.6\n162.159.0.44\n162.159.0.31\n162.159.0.28\n162.159.0.250\n162.159.0.245\n162.159.0.230\n162.159.0.228\n162.159.0.226\n162.159.0.210\n162.159.0.208\n162.159.0.195\n162.159.0.188\n162.159.0.15\n162.159.0.149\n162.159.0.137\n162.159.0.132\n162.159.0.118\n162.159.0.110\n162.159.0.11\n162.159.0.106\n162.159.0.10\n162.155.248.54\n162.142.63.110\n162.142.28.10\n162.142.105.146\n162.14.21.56\n162.14.21.178\n161.97.85.60\n161.97.149.103\n161.82.184.70\n161.49.226.194\n161.49.215.50\n161.49.215.28\n161.35.196.248\n161.230.203.238\n161.200.96.9\n161.11.228.11\n161.11.226.170\n161.0.62.217\n160.86.109.33\n160.72.33.26\n160.19.99.98\n160.16.111.164\n160.153.251.73\n160.119.101.224\n160.0.192.36\n16.62.171.163\n159.69.72.157\n159.69.68.181\n159.69.114.157\n159.255.187.250\n159.255.183.217\n159.203.125.234\n159.196.50.130\n159.196.204.14\n159.192.97.99\n159.192.142.225\n159.192.139.224\n159.192.104.150\n158.75.195.29\n158.69.31.60\n158.51.134.53\n158.46.37.156\n158.247.210.85\n158.174.73.94\n157.55.83.218\n157.25.58.57\n157.245.139.171\n157.231.209.248\n157.185.70.98\n157.175.242.142\n157.157.166.191\n157.157.138.227\n157.119.201.134\n157.100.63.48\n157.100.58.252\n157.100.55.226\n156.67.54.58\n156.154.71.56\n156.154.71.50\n156.154.71.5\n156.154.71.46\n156.154.71.44\n156.154.71.43\n156.154.71.42\n156.154.71.40\n156.154.71.33\n156.154.71.29\n156.154.71.26\n156.154.71.25\n156.154.71.22\n156.154.71.20\n156.154.71.2\n156.154.71.18\n156.154.71.13\n156.154.71.12\n156.154.71.11\n156.154.71.1\n156.154.70.7\n156.154.70.64\n156.154.70.60\n156.154.70.57\n156.154.70.5\n156.154.70.44\n156.154.70.43\n156.154.70.42\n156.154.70.40\n156.154.70.33\n156.154.70.29\n156.154.70.26\n156.154.70.25\n156.154.70.22\n156.154.70.2\n156.154.70.18\n156.154.70.16\n156.154.70.14\n156.154.70.13\n156.154.70.12\n156.154.70.11\n156.154.70.10\n156.154.70.1\n156.154.69.99\n156.154.69.96\n156.154.69.95\n156.154.69.94\n156.154.69.93\n156.154.69.91\n156.154.69.9\n156.154.69.88\n156.154.69.87\n156.154.69.86\n156.154.69.85\n156.154.69.84\n156.154.69.83\n156.154.69.82\n156.154.69.81\n156.154.69.80\n156.154.69.79\n156.154.69.77\n156.154.69.76\n156.154.69.75\n156.154.69.73\n156.154.69.72\n156.154.69.70\n156.154.69.69\n156.154.69.66\n156.154.69.64\n156.154.69.63\n156.154.69.62\n156.154.69.60\n156.154.69.6\n156.154.69.58\n156.154.69.53\n156.154.69.52\n156.154.69.50\n156.154.69.5\n156.154.69.49\n156.154.69.45\n156.154.69.44\n156.154.69.41\n156.154.69.4\n156.154.69.39\n156.154.69.36\n156.154.69.35\n156.154.69.34\n156.154.69.33\n156.154.69.31\n156.154.69.30\n156.154.69.29\n156.154.69.28\n156.154.69.253\n156.154.69.252\n156.154.69.251\n156.154.69.250\n156.154.69.25\n156.154.69.249\n156.154.69.247\n156.154.69.246\n156.154.69.243\n156.154.69.241\n156.154.69.239\n156.154.69.237\n156.154.69.236\n156.154.69.235\n156.154.69.234\n156.154.69.232\n156.154.69.230\n156.154.69.23\n156.154.69.229\n156.154.69.227\n156.154.69.224\n156.154.69.223\n156.154.69.222\n156.154.69.220\n156.154.69.219\n156.154.69.218\n156.154.69.214\n156.154.69.213\n156.154.69.211\n156.154.69.210\n156.154.69.21\n156.154.69.209\n156.154.69.207\n156.154.69.206\n156.154.69.205\n156.154.69.203\n156.154.69.201\n156.154.69.200\n156.154.69.2\n156.154.69.199\n156.154.69.198\n156.154.69.197\n156.154.69.196\n156.154.69.195\n156.154.69.194\n156.154.69.193\n156.154.69.192\n156.154.69.191\n156.154.69.190\n156.154.69.19\n156.154.69.189\n156.154.69.188\n156.154.69.187\n156.154.69.183\n156.154.69.182\n156.154.69.178\n156.154.69.177\n156.154.69.176\n156.154.69.174\n156.154.69.169\n156.154.69.168\n156.154.69.166\n156.154.69.165\n156.154.69.164\n156.154.69.161\n156.154.69.160\n156.154.69.16\n156.154.69.159\n156.154.69.158\n156.154.69.157\n156.154.69.156\n156.154.69.155\n156.154.69.154\n156.154.69.153\n156.154.69.152\n156.154.69.151\n156.154.69.149\n156.154.69.148\n156.154.69.147\n156.154.69.146\n156.154.69.145\n156.154.69.144\n156.154.69.143\n156.154.69.138\n156.154.69.137\n156.154.69.135\n156.154.69.134\n156.154.69.133\n156.154.69.132\n156.154.69.131\n156.154.69.13\n156.154.69.128\n156.154.69.127\n156.154.69.121\n156.154.69.12\n156.154.69.119\n156.154.69.117\n156.154.69.115\n156.154.69.114\n156.154.69.112\n156.154.69.111\n156.154.69.110\n156.154.69.11\n156.154.69.109\n156.154.69.108\n156.154.69.105\n156.154.69.104\n156.154.69.103\n156.154.69.102\n156.154.69.100\n156.154.69.10\n156.154.68.99\n156.154.68.98\n156.154.68.97\n156.154.68.96\n156.154.68.95\n156.154.68.94\n156.154.68.93\n156.154.68.92\n156.154.68.91\n156.154.68.90\n156.154.68.9\n156.154.68.89\n156.154.68.88\n156.154.68.87\n156.154.68.86\n156.154.68.85\n156.154.68.84\n156.154.68.82\n156.154.68.81\n156.154.68.8\n156.154.68.79\n156.154.68.78\n156.154.68.77\n156.154.68.76\n156.154.68.75\n156.154.68.74\n156.154.68.73\n156.154.68.72\n156.154.68.71\n156.154.68.70\n156.154.68.7\n156.154.68.69\n156.154.68.68\n156.154.68.67\n156.154.68.66\n156.154.68.64\n156.154.68.62\n156.154.68.61\n156.154.68.60\n156.154.68.6\n156.154.68.59\n156.154.68.58\n156.154.68.57\n156.154.68.55\n156.154.68.53\n156.154.68.52\n156.154.68.51\n156.154.68.50\n156.154.68.5\n156.154.68.49\n156.154.68.48\n156.154.68.47\n156.154.68.46\n156.154.68.45\n156.154.68.44\n156.154.68.43\n156.154.68.42\n156.154.68.41\n156.154.68.40\n156.154.68.4\n156.154.68.39\n156.154.68.38\n156.154.68.37\n156.154.68.36\n156.154.68.35\n156.154.68.34\n156.154.68.33\n156.154.68.32\n156.154.68.31\n156.154.68.30\n156.154.68.3\n156.154.68.29\n156.154.68.28\n156.154.68.27\n156.154.68.26\n156.154.68.254\n156.154.68.253\n156.154.68.252\n156.154.68.251\n156.154.68.250\n156.154.68.25\n156.154.68.249\n156.154.68.248\n156.154.68.247\n156.154.68.245\n156.154.68.244\n156.154.68.243\n156.154.68.242\n156.154.68.241\n156.154.68.240\n156.154.68.24\n156.154.68.239\n156.154.68.237\n156.154.68.236\n156.154.68.235\n156.154.68.233\n156.154.68.232\n156.154.68.231\n156.154.68.230\n156.154.68.23\n156.154.68.229\n156.154.68.228\n156.154.68.227\n156.154.68.226\n156.154.68.225\n156.154.68.224\n156.154.68.223\n156.154.68.222\n156.154.68.221\n156.154.68.220\n156.154.68.22\n156.154.68.219\n156.154.68.218\n156.154.68.217\n156.154.68.216\n156.154.68.214\n156.154.68.213\n156.154.68.212\n156.154.68.211\n156.154.68.210\n156.154.68.21\n156.154.68.209\n156.154.68.207\n156.154.68.206\n156.154.68.205\n156.154.68.204\n156.154.68.203\n156.154.68.201\n156.154.68.200\n156.154.68.20\n156.154.68.2\n156.154.68.199\n156.154.68.198\n156.154.68.197\n156.154.68.195\n156.154.68.194\n156.154.68.193\n156.154.68.192\n156.154.68.191\n156.154.68.19\n156.154.68.189\n156.154.68.188\n156.154.68.187\n156.154.68.186\n156.154.68.185\n156.154.68.184\n156.154.68.183\n156.154.68.182\n156.154.68.181\n156.154.68.180\n156.154.68.18\n156.154.68.179\n156.154.68.178\n156.154.68.176\n156.154.68.175\n156.154.68.174\n156.154.68.173\n156.154.68.172\n156.154.68.171\n156.154.68.170\n156.154.68.17\n156.154.68.169\n156.154.68.168\n156.154.68.167\n156.154.68.166\n156.154.68.164\n156.154.68.163\n156.154.68.162\n156.154.68.161\n156.154.68.160\n156.154.68.16\n156.154.68.159\n156.154.68.158\n156.154.68.156\n156.154.68.155\n156.154.68.154\n156.154.68.153\n156.154.68.152\n156.154.68.151\n156.154.68.150\n156.154.68.15\n156.154.68.149\n156.154.68.148\n156.154.68.147\n156.154.68.146\n156.154.68.145\n156.154.68.143\n156.154.68.142\n156.154.68.141\n156.154.68.140\n156.154.68.139\n156.154.68.138\n156.154.68.137\n156.154.68.136\n156.154.68.135\n156.154.68.134\n156.154.68.133\n156.154.68.132\n156.154.68.131\n156.154.68.130\n156.154.68.13\n156.154.68.129\n156.154.68.128\n156.154.68.127\n156.154.68.126\n156.154.68.125\n156.154.68.124\n156.154.68.123\n156.154.68.122\n156.154.68.121\n156.154.68.120\n156.154.68.12\n156.154.68.119\n156.154.68.118\n156.154.68.117\n156.154.68.116\n156.154.68.115\n156.154.68.114\n156.154.68.113\n156.154.68.112\n156.154.68.111\n156.154.68.110\n156.154.68.11\n156.154.68.109\n156.154.68.108\n156.154.68.107\n156.154.68.106\n156.154.68.105\n156.154.68.104\n156.154.68.103\n156.154.68.102\n156.154.68.101\n156.154.68.100\n156.154.68.10\n156.154.68.1\n156.154.67.99\n156.154.67.97\n156.154.67.96\n156.154.67.95\n156.154.67.94\n156.154.67.93\n156.154.67.92\n156.154.67.9\n156.154.67.88\n156.154.67.86\n156.154.67.85\n156.154.67.84\n156.154.67.83\n156.154.67.82\n156.154.67.80\n156.154.67.8\n156.154.67.79\n156.154.67.78\n156.154.67.76\n156.154.67.74\n156.154.67.73\n156.154.67.72\n156.154.67.70\n156.154.67.69\n156.154.67.67\n156.154.67.66\n156.154.67.65\n156.154.67.63\n156.154.67.62\n156.154.67.6\n156.154.67.59\n156.154.67.56\n156.154.67.55\n156.154.67.54\n156.154.67.53\n156.154.67.5\n156.154.67.49\n156.154.67.48\n156.154.67.45\n156.154.67.43\n156.154.67.42\n156.154.67.40\n156.154.67.4\n156.154.67.39\n156.154.67.34\n156.154.67.33\n156.154.67.3\n156.154.67.29\n156.154.67.28\n156.154.67.27\n156.154.67.26\n156.154.67.253\n156.154.67.252\n156.154.67.251\n156.154.67.250\n156.154.67.249\n156.154.67.248\n156.154.67.245\n156.154.67.244\n156.154.67.242\n156.154.67.241\n156.154.67.240\n156.154.67.24\n156.154.67.238\n156.154.67.237\n156.154.67.236\n156.154.67.235\n156.154.67.234\n156.154.67.230\n156.154.67.23\n156.154.67.229\n156.154.67.227\n156.154.67.226\n156.154.67.225\n156.154.67.224\n156.154.67.223\n156.154.67.221\n156.154.67.220\n156.154.67.22\n156.154.67.219\n156.154.67.217\n156.154.67.216\n156.154.67.215\n156.154.67.213\n156.154.67.212\n156.154.67.211\n156.154.67.209\n156.154.67.208\n156.154.67.207\n156.154.67.206\n156.154.67.201\n156.154.67.20\n156.154.67.199\n156.154.67.198\n156.154.67.197\n156.154.67.195\n156.154.67.193\n156.154.67.191\n156.154.67.189\n156.154.67.182\n156.154.67.180\n156.154.67.18\n156.154.67.179\n156.154.67.178\n156.154.67.177\n156.154.67.176\n156.154.67.173\n156.154.67.170\n156.154.67.169\n156.154.67.168\n156.154.67.167\n156.154.67.164\n156.154.67.163\n156.154.67.161\n156.154.67.160\n156.154.67.16\n156.154.67.159\n156.154.67.157\n156.154.67.155\n156.154.67.154\n156.154.67.153\n156.154.67.151\n156.154.67.15\n156.154.67.148\n156.154.67.147\n156.154.67.144\n156.154.67.143\n156.154.67.142\n156.154.67.140\n156.154.67.139\n156.154.67.137\n156.154.67.135\n156.154.67.131\n156.154.67.127\n156.154.67.126\n156.154.67.125\n156.154.67.124\n156.154.67.123\n156.154.67.122\n156.154.67.120\n156.154.67.119\n156.154.67.115\n156.154.67.113\n156.154.67.109\n156.154.67.106\n156.154.67.104\n156.154.67.103\n156.154.67.102\n156.154.67.10\n156.154.66.99\n156.154.66.97\n156.154.66.96\n156.154.66.91\n156.154.66.90\n156.154.66.9\n156.154.66.89\n156.154.66.88\n156.154.66.87\n156.154.66.86\n156.154.66.85\n156.154.66.81\n156.154.66.8\n156.154.66.78\n156.154.66.75\n156.154.66.74\n156.154.66.73\n156.154.66.72\n156.154.66.7\n156.154.66.68\n156.154.66.67\n156.154.66.66\n156.154.66.65\n156.154.66.64\n156.154.66.63\n156.154.66.62\n156.154.66.61\n156.154.66.58\n156.154.66.57\n156.154.66.56\n156.154.66.54\n156.154.66.53\n156.154.66.52\n156.154.66.51\n156.154.66.50\n156.154.66.5\n156.154.66.49\n156.154.66.48\n156.154.66.47\n156.154.66.46\n156.154.66.45\n156.154.66.44\n156.154.66.42\n156.154.66.41\n156.154.66.35\n156.154.66.34\n156.154.66.32\n156.154.66.3\n156.154.66.29\n156.154.66.28\n156.154.66.254\n156.154.66.253\n156.154.66.251\n156.154.66.248\n156.154.66.247\n156.154.66.245\n156.154.66.244\n156.154.66.243\n156.154.66.241\n156.154.66.239\n156.154.66.237\n156.154.66.236\n156.154.66.235\n156.154.66.234\n156.154.66.233\n156.154.66.230\n156.154.66.23\n156.154.66.229\n156.154.66.228\n156.154.66.227\n156.154.66.224\n156.154.66.223\n156.154.66.222\n156.154.66.221\n156.154.66.220\n156.154.66.22\n156.154.66.218\n156.154.66.215\n156.154.66.214\n156.154.66.210\n156.154.66.21\n156.154.66.208\n156.154.66.206\n156.154.66.205\n156.154.66.203\n156.154.66.202\n156.154.66.20\n156.154.66.199\n156.154.66.198\n156.154.66.197\n156.154.66.195\n156.154.66.194\n156.154.66.193\n156.154.66.192\n156.154.66.190\n156.154.66.19\n156.154.66.189\n156.154.66.188\n156.154.66.187\n156.154.66.185\n156.154.66.184\n156.154.66.183\n156.154.66.181\n156.154.66.180\n156.154.66.179\n156.154.66.178\n156.154.66.175\n156.154.66.173\n156.154.66.172\n156.154.66.170\n156.154.66.17\n156.154.66.168\n156.154.66.167\n156.154.66.165\n156.154.66.162\n156.154.66.161\n156.154.66.16\n156.154.66.159\n156.154.66.157\n156.154.66.156\n156.154.66.152\n156.154.66.150\n156.154.66.15\n156.154.66.149\n156.154.66.145\n156.154.66.143\n156.154.66.141\n156.154.66.14\n156.154.66.139\n156.154.66.138\n156.154.66.137\n156.154.66.136\n156.154.66.135\n156.154.66.131\n156.154.66.130\n156.154.66.13\n156.154.66.127\n156.154.66.125\n156.154.66.123\n156.154.66.122\n156.154.66.121\n156.154.66.120\n156.154.66.12\n156.154.66.119\n156.154.66.118\n156.154.66.116\n156.154.66.115\n156.154.66.113\n156.154.66.112\n156.154.66.11\n156.154.66.109\n156.154.66.106\n156.154.66.105\n156.154.66.103\n156.154.66.102\n156.154.66.101\n156.154.66.10\n156.154.66.1\n156.154.65.98\n156.154.65.97\n156.154.65.96\n156.154.65.95\n156.154.65.93\n156.154.65.92\n156.154.65.91\n156.154.65.9\n156.154.65.89\n156.154.65.88\n156.154.65.86\n156.154.65.84\n156.154.65.83\n156.154.65.82\n156.154.65.81\n156.154.65.80\n156.154.65.8\n156.154.65.78\n156.154.65.76\n156.154.65.75\n156.154.65.74\n156.154.65.73\n156.154.65.71\n156.154.65.7\n156.154.65.68\n156.154.65.67\n156.154.65.66\n156.154.65.64\n156.154.65.63\n156.154.65.62\n156.154.65.60\n156.154.65.6\n156.154.65.59\n156.154.65.58\n156.154.65.57\n156.154.65.56\n156.154.65.55\n156.154.65.53\n156.154.65.52\n156.154.65.50\n156.154.65.5\n156.154.65.49\n156.154.65.48\n156.154.65.47\n156.154.65.44\n156.154.65.43\n156.154.65.42\n156.154.65.41\n156.154.65.40\n156.154.65.39\n156.154.65.38\n156.154.65.37\n156.154.65.36\n156.154.65.35\n156.154.65.34\n156.154.65.33\n156.154.65.32\n156.154.65.31\n156.154.65.30\n156.154.65.3\n156.154.65.29\n156.154.65.28\n156.154.65.254\n156.154.65.253\n156.154.65.252\n156.154.65.251\n156.154.65.250\n156.154.65.25\n156.154.65.249\n156.154.65.248\n156.154.65.243\n156.154.65.242\n156.154.65.241\n156.154.65.240\n156.154.65.24\n156.154.65.239\n156.154.65.235\n156.154.65.234\n156.154.65.233\n156.154.65.232\n156.154.65.231\n156.154.65.23\n156.154.65.228\n156.154.65.227\n156.154.65.226\n156.154.65.225\n156.154.65.224\n156.154.65.223\n156.154.65.220\n156.154.65.22\n156.154.65.219\n156.154.65.218\n156.154.65.216\n156.154.65.215\n156.154.65.214\n156.154.65.213\n156.154.65.212\n156.154.65.211\n156.154.65.210\n156.154.65.21\n156.154.65.207\n156.154.65.206\n156.154.65.204\n156.154.65.203\n156.154.65.200\n156.154.65.20\n156.154.65.2\n156.154.65.199\n156.154.65.198\n156.154.65.196\n156.154.65.195\n156.154.65.193\n156.154.65.192\n156.154.65.191\n156.154.65.190\n156.154.65.189\n156.154.65.188\n156.154.65.187\n156.154.65.185\n156.154.65.184\n156.154.65.183\n156.154.65.182\n156.154.65.181\n156.154.65.180\n156.154.65.18\n156.154.65.179\n156.154.65.178\n156.154.65.176\n156.154.65.175\n156.154.65.174\n156.154.65.173\n156.154.65.172\n156.154.65.171\n156.154.65.17\n156.154.65.168\n156.154.65.167\n156.154.65.166\n156.154.65.163\n156.154.65.162\n156.154.65.161\n156.154.65.160\n156.154.65.159\n156.154.65.158\n156.154.65.157\n156.154.65.155\n156.154.65.153\n156.154.65.152\n156.154.65.150\n156.154.65.149\n156.154.65.148\n156.154.65.147\n156.154.65.146\n156.154.65.145\n156.154.65.144\n156.154.65.142\n156.154.65.141\n156.154.65.140\n156.154.65.14\n156.154.65.139\n156.154.65.138\n156.154.65.136\n156.154.65.135\n156.154.65.134\n156.154.65.133\n156.154.65.132\n156.154.65.131\n156.154.65.130\n156.154.65.129\n156.154.65.128\n156.154.65.127\n156.154.65.125\n156.154.65.124\n156.154.65.123\n156.154.65.121\n156.154.65.120\n156.154.65.12\n156.154.65.119\n156.154.65.117\n156.154.65.116\n156.154.65.115\n156.154.65.114\n156.154.65.113\n156.154.65.111\n156.154.65.110\n156.154.65.11\n156.154.65.108\n156.154.65.107\n156.154.65.106\n156.154.65.105\n156.154.65.103\n156.154.65.102\n156.154.65.101\n156.154.65.10\n156.154.65.1\n156.154.64.99\n156.154.64.98\n156.154.64.97\n156.154.64.96\n156.154.64.93\n156.154.64.90\n156.154.64.9\n156.154.64.88\n156.154.64.85\n156.154.64.84\n156.154.64.82\n156.154.64.81\n156.154.64.8\n156.154.64.79\n156.154.64.78\n156.154.64.77\n156.154.64.75\n156.154.64.74\n156.154.64.72\n156.154.64.70\n156.154.64.68\n156.154.64.66\n156.154.64.65\n156.154.64.63\n156.154.64.60\n156.154.64.6\n156.154.64.59\n156.154.64.58\n156.154.64.56\n156.154.64.55\n156.154.64.54\n156.154.64.52\n156.154.64.51\n156.154.64.5\n156.154.64.49\n156.154.64.48\n156.154.64.47\n156.154.64.46\n156.154.64.43\n156.154.64.42\n156.154.64.41\n156.154.64.38\n156.154.64.36\n156.154.64.35\n156.154.64.32\n156.154.64.31\n156.154.64.30\n156.154.64.27\n156.154.64.254\n156.154.64.253\n156.154.64.252\n156.154.64.251\n156.154.64.250\n156.154.64.25\n156.154.64.249\n156.154.64.248\n156.154.64.247\n156.154.64.246\n156.154.64.245\n156.154.64.243\n156.154.64.242\n156.154.64.241\n156.154.64.24\n156.154.64.239\n156.154.64.238\n156.154.64.237\n156.154.64.236\n156.154.64.234\n156.154.64.233\n156.154.64.231\n156.154.64.230\n156.154.64.228\n156.154.64.227\n156.154.64.226\n156.154.64.225\n156.154.64.223\n156.154.64.22\n156.154.64.219\n156.154.64.218\n156.154.64.216\n156.154.64.215\n156.154.64.213\n156.154.64.212\n156.154.64.211\n156.154.64.210\n156.154.64.21\n156.154.64.209\n156.154.64.208\n156.154.64.207\n156.154.64.206\n156.154.64.205\n156.154.64.204\n156.154.64.202\n156.154.64.201\n156.154.64.200\n156.154.64.199\n156.154.64.197\n156.154.64.196\n156.154.64.195\n156.154.64.194\n156.154.64.191\n156.154.64.19\n156.154.64.189\n156.154.64.188\n156.154.64.183\n156.154.64.182\n156.154.64.181\n156.154.64.18\n156.154.64.177\n156.154.64.176\n156.154.64.175\n156.154.64.174\n156.154.64.173\n156.154.64.172\n156.154.64.170\n156.154.64.17\n156.154.64.168\n156.154.64.167\n156.154.64.166\n156.154.64.165\n156.154.64.162\n156.154.64.157\n156.154.64.156\n156.154.64.155\n156.154.64.154\n156.154.64.153\n156.154.64.151\n156.154.64.150\n156.154.64.15\n156.154.64.148\n156.154.64.146\n156.154.64.142\n156.154.64.14\n156.154.64.139\n156.154.64.138\n156.154.64.137\n156.154.64.136\n156.154.64.135\n156.154.64.134\n156.154.64.133\n156.154.64.131\n156.154.64.130\n156.154.64.13\n156.154.64.129\n156.154.64.128\n156.154.64.127\n156.154.64.123\n156.154.64.121\n156.154.64.120\n156.154.64.119\n156.154.64.118\n156.154.64.117\n156.154.64.116\n156.154.64.115\n156.154.64.114\n156.154.64.112\n156.154.64.111\n156.154.64.11\n156.154.64.109\n156.154.64.108\n156.154.64.107\n156.154.64.104\n156.154.64.103\n156.154.64.102\n156.154.64.100\n156.154.64.1\n156.154.55.15\n156.154.55.1\n156.154.54.8\n156.154.54.15\n156.154.54.13\n156.154.143.99\n156.154.143.98\n156.154.143.92\n156.154.143.91\n156.154.143.9\n156.154.143.89\n156.154.143.87\n156.154.143.82\n156.154.143.79\n156.154.143.78\n156.154.143.77\n156.154.143.76\n156.154.143.73\n156.154.143.72\n156.154.143.71\n156.154.143.68\n156.154.143.64\n156.154.143.60\n156.154.143.55\n156.154.143.53\n156.154.143.51\n156.154.143.48\n156.154.143.46\n156.154.143.45\n156.154.143.44\n156.154.143.43\n156.154.143.42\n156.154.143.41\n156.154.143.39\n156.154.143.38\n156.154.143.37\n156.154.143.34\n156.154.143.32\n156.154.143.31\n156.154.143.3\n156.154.143.29\n156.154.143.28\n156.154.143.254\n156.154.143.253\n156.154.143.252\n156.154.143.250\n156.154.143.248\n156.154.143.247\n156.154.143.245\n156.154.143.243\n156.154.143.242\n156.154.143.241\n156.154.143.240\n156.154.143.237\n156.154.143.235\n156.154.143.232\n156.154.143.230\n156.154.143.23\n156.154.143.226\n156.154.143.225\n156.154.143.224\n156.154.143.223\n156.154.143.222\n156.154.143.221\n156.154.143.22\n156.154.143.218\n156.154.143.217\n156.154.143.216\n156.154.143.215\n156.154.143.213\n156.154.143.212\n156.154.143.211\n156.154.143.210\n156.154.143.207\n156.154.143.206\n156.154.143.204\n156.154.143.20\n156.154.143.199\n156.154.143.198\n156.154.143.196\n156.154.143.194\n156.154.143.191\n156.154.143.190\n156.154.143.189\n156.154.143.188\n156.154.143.184\n156.154.143.182\n156.154.143.181\n156.154.143.178\n156.154.143.173\n156.154.143.171\n156.154.143.170\n156.154.143.165\n156.154.143.164\n156.154.143.160\n156.154.143.159\n156.154.143.151\n156.154.143.150\n156.154.143.15\n156.154.143.148\n156.154.143.146\n156.154.143.145\n156.154.143.140\n156.154.143.14\n156.154.143.136\n156.154.143.135\n156.154.143.134\n156.154.143.133\n156.154.143.131\n156.154.143.130\n156.154.143.128\n156.154.143.120\n156.154.143.12\n156.154.143.119\n156.154.143.117\n156.154.143.113\n156.154.143.112\n156.154.143.106\n156.154.143.105\n156.154.143.103\n156.154.143.10\n156.154.142.86\n156.154.142.84\n156.154.142.79\n156.154.142.71\n156.154.142.7\n156.154.142.61\n156.154.142.59\n156.154.142.53\n156.154.142.5\n156.154.142.49\n156.154.142.46\n156.154.142.43\n156.154.142.41\n156.154.142.4\n156.154.142.36\n156.154.142.31\n156.154.142.28\n156.154.142.23\n156.154.142.225\n156.154.142.213\n156.154.142.203\n156.154.142.201\n156.154.142.200\n156.154.142.195\n156.154.142.179\n156.154.142.169\n156.154.142.166\n156.154.142.165\n156.154.142.164\n156.154.142.16\n156.154.142.156\n156.154.142.152\n156.154.142.150\n156.154.142.149\n156.154.142.142\n156.154.142.14\n156.154.142.133\n156.154.142.132\n156.154.142.128\n156.154.142.119\n156.154.142.112\n156.154.142.102\n156.154.141.91\n156.154.141.9\n156.154.141.88\n156.154.141.85\n156.154.141.82\n156.154.141.81\n156.154.141.71\n156.154.141.69\n156.154.141.46\n156.154.141.254\n156.154.141.236\n156.154.141.235\n156.154.141.230\n156.154.141.229\n156.154.141.227\n156.154.141.217\n156.154.141.213\n156.154.141.203\n156.154.141.201\n156.154.141.198\n156.154.141.19\n156.154.141.188\n156.154.141.185\n156.154.141.176\n156.154.141.159\n156.154.141.153\n156.154.141.148\n156.154.141.146\n156.154.141.138\n156.154.141.127\n156.154.141.120\n156.154.140.98\n156.154.140.96\n156.154.140.94\n156.154.140.93\n156.154.140.9\n156.154.140.89\n156.154.140.87\n156.154.140.81\n156.154.140.76\n156.154.140.75\n156.154.140.74\n156.154.140.72\n156.154.140.71\n156.154.140.63\n156.154.140.60\n156.154.140.50\n156.154.140.41\n156.154.140.4\n156.154.140.37\n156.154.140.36\n156.154.140.33\n156.154.140.28\n156.154.140.252\n156.154.140.251\n156.154.140.250\n156.154.140.248\n156.154.140.246\n156.154.140.244\n156.154.140.243\n156.154.140.242\n156.154.140.238\n156.154.140.237\n156.154.140.234\n156.154.140.233\n156.154.140.23\n156.154.140.229\n156.154.140.227\n156.154.140.224\n156.154.140.220\n156.154.140.215\n156.154.140.212\n156.154.140.203\n156.154.140.201\n156.154.140.199\n156.154.140.198\n156.154.140.196\n156.154.140.195\n156.154.140.193\n156.154.140.188\n156.154.140.183\n156.154.140.180\n156.154.140.179\n156.154.140.178\n156.154.140.172\n156.154.140.169\n156.154.140.168\n156.154.140.165\n156.154.140.163\n156.154.140.161\n156.154.140.156\n156.154.140.153\n156.154.140.152\n156.154.140.145\n156.154.140.144\n156.154.140.14\n156.154.140.134\n156.154.140.131\n156.154.140.130\n156.154.140.129\n156.154.140.127\n156.154.140.120\n156.154.140.119\n156.154.140.117\n156.154.140.116\n156.154.140.111\n156.154.140.108\n156.154.140.107\n156.154.140.1\n155.4.163.233\n155.33.195.106\n155.133.119.188\n154.72.69.26\n154.70.151.53\n154.70.149.42\n154.66.240.30\n154.65.61.1\n154.63.11.0\n154.61.69.45\n154.44.130.160\n154.27.66.183\n154.236.179.226\n154.160.70.6\n154.159.248.54\n154.14.16.251\n154.127.234.250\n154.126.92.178\n154.126.209.249\n154.118.190.94\n154.113.65.122\n154.10.6.11\n153.246.64.54\n153.246.37.6\n153.19.89.89\n153.19.161.6\n153.19.105.120\n153.156.93.5\n153.153.150.28\n153.150.154.214\n153.120.88.148\n152.26.59.3\n152.231.78.50\n152.230.47.28\n152.230.113.98\n152.230.112.34\n152.228.172.176\n152.200.186.94\n152.165.116.5\n152.158.36.48\n152.149.40.2\n152.149.135.10\n152.117.254.193\n152.101.123.194\n151.80.42.104\n151.80.28.5\n151.80.28.48\n151.80.25.178\n151.80.238.97\n151.80.19.146\n151.80.177.171\n151.80.140.68\n151.8.37.148\n151.237.86.81\n151.237.55.39\n151.237.141.109\n151.237.111.135\n151.192.63.2\n151.192.60.134\n151.192.44.238\n151.14.208.163\n151.1.212.6\n151.1.165.85\n151.0.52.85\n150.254.190.122\n150.240.97.236\n150.240.97.199\n150.240.97.192\n150.220.181.150\n15.236.150.25\n15.235.33.251\n15.204.157.214\n15.188.45.248\n149.91.3.9\n149.76.67.57\n149.62.241.50\n149.255.28.62\n149.202.84.49\n149.202.82.130\n149.202.81.7\n149.202.36.53\n149.202.157.139\n149.202.145.242\n149.154.159.92\n149.129.119.137\n149.126.23.226\n149.112.149.112\n149.112.122.30\n149.112.122.20\n149.112.122.10\n149.112.121.30\n149.112.121.20\n149.112.121.10\n149.112.112.9\n149.112.112.13\n149.112.112.12\n149.112.112.112\n149.112.112.11\n149.112.112.10\n149.106.172.178\n148.81.188.146\n148.78.200.7\n148.76.114.50\n148.72.246.219\n148.72.144.60\n148.251.24.48\n148.251.202.168\n148.251.133.165\n148.247.156.27\n148.245.196.68\n148.244.91.61\n148.244.89.212\n148.244.211.136\n148.244.179.157\n148.244.114.30\n148.244.108.33\n148.243.227.67\n148.243.195.206\n148.243.126.229\n148.235.82.66\n148.235.148.162\n148.233.136.82\n148.205.40.11\n148.205.228.17\n148.205.228.11\n148.102.51.97\n148.102.50.30\n147.50.47.189\n147.50.47.185\n147.50.47.181\n147.50.36.138\n147.50.18.146\n147.135.207.73\n147.135.131.46\n147.135.130.233\n146.88.67.162\n146.88.38.231\n146.71.84.161\n146.71.76.129\n146.59.15.173\n146.196.40.203\n146.158.30.143\n146.155.226.12\n146.120.19.126\n146.112.41.5\n146.112.41.4\n146.112.41.2\n146.0.23.67\n145.255.5.183\n145.255.31.145\n145.239.94.164\n145.239.196.217\n145.239.186.86\n145.236.190.166\n145.131.24.226\n145.131.142.83\n144.91.97.18\n144.91.69.91\n144.91.123.182\n144.91.122.26\n144.91.107.114\n144.48.115.72\n144.48.109.239\n144.48.109.231\n144.202.20.89\n144.139.9.180\n144.137.210.182\n144.129.45.42\n144.126.129.147\n143.244.162.177\n143.244.136.178\n143.233.233.142\n143.208.182.103\n143.208.0.14\n143.0.226.116\n143.0.111.78\n142.44.192.51\n142.190.83.129\n142.11.217.5\n142.11.215.140\n142.11.213.209\n142.11.200.36\n141.95.65.106\n141.95.155.209\n141.94.143.35\n141.195.95.131\n141.193.223.166\n141.136.112.107\n141.101.234.131\n141.1.27.249\n141.1.1.1\n141.0.102.130\n140.227.38.198\n14.97.85.129\n14.97.106.65\n14.96.97.193\n14.96.97.162\n14.96.97.160\n14.96.106.114\n14.63.225.15\n14.63.217.237\n14.63.217.12\n14.63.196.128\n14.56.77.168\n14.54.45.37\n14.52.27.10\n14.51.109.49\n14.50.118.125\n14.47.217.72\n14.43.82.31\n14.42.230.214\n14.41.60.11\n14.41.60.10\n14.36.32.8\n14.35.201.12\n14.33.27.243\n14.33.27.240\n14.241.35.56\n14.241.236.220\n14.241.225.212\n14.225.246.17\n14.225.16.66\n14.224.129.15\n14.200.94.202\n14.200.249.18\n14.198.169.236\n14.198.168.140\n14.192.25.141\n14.178.144.53\n14.161.47.108\n14.161.36.134\n14.161.252.185\n14.160.87.86\n14.140.206.30\n14.139.234.242\n14.128.21.30\n139.91.235.18\n139.64.162.129\n139.18.25.34\n139.18.25.33\n139.162.33.25\n139.162.122.189\n139.162.107.204\n139.135.130.148\n139.134.5.51\n139.134.2.190\n139.130.4.4\n139.130.124.242\n138.99.205.1\n138.97.177.27\n138.94.56.4\n138.91.252.187\n138.91.167.7\n138.68.74.166\n138.255.167.106\n138.255.108.121\n138.219.50.74\n138.219.249.221\n138.204.240.26\n138.201.225.189\n138.186.166.164\n138.185.2.206\n138.185.16.6\n138.128.241.232\n138.122.4.226\n138.121.114.217\n138.121.114.185\n138.0.89.142\n138.0.120.199\n137.74.226.27\n137.66.16.204\n137.220.33.124\n137.184.216.0\n137.118.1.32\n137.118.1.106\n137.103.64.198\n136.244.97.119\n136.243.93.187\n136.243.170.238\n136.243.151.59\n136.243.103.8\n135.181.20.96\n134.90.140.29\n134.75.195.7\n134.75.122.2\n134.35.6.220\n134.35.192.16\n134.35.188.122\n134.35.185.31\n134.35.172.170\n134.255.247.23\n134.236.245.30\n134.209.17.114\n134.195.4.2\n134.17.4.251\n134.122.47.67\n134.122.23.38\n134.119.184.220\n134.119.184.218\n133.18.71.5\n133.167.104.150\n132.255.228.168\n132.148.83.193\n132.148.78.54\n132.148.18.164\n132.145.89.151\n131.255.137.57\n131.255.136.10\n131.221.81.1\n131.196.220.10\n131.196.22.222\n131.196.115.45\n131.196.115.39\n131.196.115.190\n131.148.181.242\n131.100.51.65\n131.100.48.73\n130.93.54.181\n130.93.191.141\n130.93.184.27\n130.61.69.123\n130.61.64.122\n130.255.159.152\n130.255.153.137\n130.255.145.195\n130.255.121.9\n130.244.126.99\n130.105.145.84\n13.95.90.89\n13.76.130.172\n13.67.61.31\n13.49.107.2\n13.237.33.153\n129.7.81.41\n129.7.81.40\n129.7.234.150\n129.250.35.251\n129.250.35.250\n129.153.52.146\n129.126.84.102\n129.126.63.122\n129.126.150.172\n129.126.119.238\n128.92.65.181\n128.92.36.51\n128.238.2.38\n128.134.180.196\n128.134.135.200\n128.127.90.39\n128.127.17.20\n126.249.83.70\n126.249.64.222\n126.249.167.193\n126.249.167.161\n125.7.139.15\n125.63.106.202\n125.61.60.151\n125.61.60.133\n125.61.60.132\n125.254.55.83\n125.254.55.66\n125.235.11.66\n125.234.238.3\n125.234.121.6\n125.23.227.44\n125.229.59.173\n125.229.181.204\n125.229.101.233\n125.228.97.10\n125.228.209.195\n125.228.169.101\n125.228.144.5\n125.227.89.44\n125.227.77.87\n125.227.128.229\n125.214.90.2\n125.213.255.4\n125.209.80.106\n125.209.101.172\n125.206.226.66\n125.206.220.10\n125.206.218.49\n125.20.46.206\n125.19.19.84\n125.18.241.103\n125.16.252.73\n125.143.136.8\n125.141.226.248\n125.141.226.247\n125.141.196.236\n125.140.123.200\n125.138.119.126\n125.134.180.69\n125.130.169.142\n124.9.53.99\n124.82.2.186\n124.40.249.202\n124.35.154.159\n124.35.115.150\n124.33.8.69\n124.32.115.205\n124.254.74.246\n124.248.191.83\n124.155.197.234\n124.146.185.97\n124.137.207.115\n124.107.131.17\n124.107.126.1\n124.107.105.97\n124.106.99.238\n124.106.234.45\n124.106.13.147\n124.106.103.113\n124.105.219.222\n124.105.219.198\n124.105.219.106\n124.105.217.62\n124.105.217.50\n124.105.214.82\n124.105.214.174\n124.105.214.110\n124.105.212.198\n124.105.212.194\n124.105.212.158\n124.105.212.146\n124.105.209.234\n124.105.157.110\n124.105.154.90\n124.105.154.238\n124.105.151.86\n124.105.150.94\n123.51.244.77\n123.49.39.106\n123.30.27.24\n123.30.210.134\n123.30.187.240\n123.30.184.141\n123.30.175.83\n123.30.175.82\n123.30.116.18\n123.252.254.74\n123.252.254.26\n123.252.254.22\n123.252.215.25\n123.252.214.45\n123.252.213.83\n123.25.15.217\n123.25.129.97\n123.248.242.21\n123.243.55.86\n123.24.206.120\n123.226.235.68\n123.215.198.209\n123.205.156.16\n123.200.168.132\n123.200.11.90\n123.176.98.140\n123.176.4.39\n123.176.4.227\n123.176.4.224\n123.176.4.2\n123.176.31.226\n123.176.27.94\n123.142.124.146\n123.140.194.2\n123.109.246.249\n122.55.80.210\n122.55.4.89\n122.55.34.214\n122.55.31.181\n122.55.242.174\n122.55.236.166\n122.55.216.174\n122.55.204.1\n122.55.203.38\n122.55.16.1\n122.55.159.150\n122.55.158.66\n122.55.158.162\n122.55.145.178\n122.55.145.150\n122.55.143.226\n122.55.143.170\n122.55.142.178\n122.55.142.154\n122.55.111.98\n122.55.102.170\n122.54.95.78\n122.54.86.193\n122.54.86.1\n122.54.78.230\n122.54.69.14\n122.54.69.130\n122.54.62.137\n122.54.51.2\n122.54.23.49\n122.54.21.218\n122.54.17.114\n122.53.95.26\n122.53.95.126\n122.53.221.170\n122.53.218.12\n122.53.214.65\n122.53.213.74\n122.53.191.170\n122.53.190.38\n122.53.184.177\n122.53.179.133\n122.53.148.218\n122.53.148.193\n122.53.122.234\n122.52.251.163\n122.52.229.125\n122.52.117.51\n122.3.232.38\n122.3.22.133\n122.3.205.241\n122.252.241.166\n122.252.222.157\n122.214.1.141\n122.211.89.209\n122.210.62.171\n122.2.5.42\n122.2.29.66\n122.187.48.102\n122.186.116.209\n122.185.99.78\n122.185.99.106\n122.185.251.225\n122.185.198.242\n122.185.135.135\n122.185.113.244\n122.18.242.92\n122.18.232.147\n122.160.254.158\n122.155.37.109\n122.155.1.72\n122.154.136.56\n122.15.192.21\n122.147.248.147\n122.117.187.15\n122.117.151.111\n122.116.8.109\n122.11.249.26\n122.1.33.1\n121.91.48.192\n121.78.116.111\n121.58.248.195\n121.58.203.4\n121.50.200.15\n121.4.4.41\n121.4.4.246\n121.254.193.196\n121.254.171.228\n121.254.134.99\n121.202.148.156\n121.189.15.8\n121.188.121.59\n121.184.236.110\n121.183.253.122\n121.183.146.212\n121.182.244.180\n121.182.199.17\n121.182.194.189\n121.181.11.82\n121.180.180.71\n121.180.117.234\n121.176.16.144\n121.174.253.216\n121.174.236.100\n121.166.56.200\n121.166.237.218\n121.166.237.204\n121.166.157.11\n121.156.65.149\n121.156.120.240\n121.156.104.183\n121.156.104.182\n121.155.94.225\n121.153.88.212\n121.152.181.152\n121.151.111.5\n121.146.2.10\n121.139.218.165\n121.133.171.50\n121.131.194.203\n121.129.56.60\n121.128.176.211\n121.125.71.40\n121.125.71.213\n121.125.68.67\n121.122.55.58\n121.119.138.109\n120.88.120.137\n120.72.85.169\n120.72.85.167\n120.72.106.125\n120.57.113.146\n120.53.53.84\n120.53.53.198\n120.53.53.137\n120.53.53.116\n120.50.42.142\n120.28.196.176\n120.28.194.84\n120.138.27.84\n120.138.22.174\n12.97.172.197\n12.71.198.244\n12.71.108.154\n12.68.237.194\n12.55.50.170\n12.51.21.245\n12.40.39.6\n12.40.39.5\n12.28.98.3\n12.221.3.59\n12.221.135.162\n12.218.209.130\n12.216.90.50\n12.216.22.17\n12.200.123.164\n12.20.121.22\n12.189.150.34\n12.186.153.128\n12.181.159.78\n12.171.191.58\n12.148.208.86\n12.127.17.72\n12.127.17.71\n12.127.16.77\n12.127.16.67\n12.12.131.134\n12.109.212.19\n12.107.114.42\n12.0.210.194\n119.93.121.146\n119.92.80.57\n119.92.65.97\n119.92.223.242\n119.92.197.6\n119.92.192.241\n119.92.191.34\n119.92.187.97\n119.92.163.10\n119.92.150.133\n119.92.117.102\n119.9.73.44\n119.75.28.242\n119.73.184.241\n119.73.138.17\n119.73.105.7\n119.68.137.99\n119.59.117.3\n119.59.113.138\n119.207.62.155\n119.205.209.167\n119.204.80.25\n119.203.236.251\n119.201.211.21\n119.201.108.71\n119.199.215.81\n119.198.142.165\n119.197.120.3\n119.18.36.102\n119.17.75.70\n119.156.24.134\n119.152.243.157\n119.110.212.115\n119.10.181.138\n118.99.210.36\n118.98.223.17\n118.91.129.65\n118.91.10.17\n118.70.203.68\n118.70.177.223\n118.69.65.41\n118.69.246.104\n118.69.197.82\n118.69.157.184\n118.69.134.83\n118.69.109.45\n118.47.242.4\n118.45.48.177\n118.40.29.112\n118.38.9.207\n118.37.195.251\n118.3.227.163\n118.26.111.53\n118.238.203.252\n118.238.11.132\n118.233.57.133\n118.232.137.224\n118.220.172.122\n118.220.16.99\n118.218.6.137\n118.217.180.182\n118.21.162.12\n118.201.56.26\n118.201.53.209\n118.201.211.82\n118.201.187.122\n118.179.84.158\n118.175.16.66\n118.173.197.174\n118.163.7.54\n118.163.40.163\n118.143.97.54\n118.127.62.178\n118.103.239.9\n118.103.239.33\n117.55.243.14\n117.54.3.237\n117.53.152.76\n117.52.99.143\n117.4.91.86\n117.206.156.235\n117.20.67.244\n117.20.54.245\n117.20.54.242\n117.2.80.119\n117.2.18.50\n117.16.191.7\n117.122.125.106\n117.121.215.99\n117.121.215.101\n117.103.228.101\n117.102.214.93\n116.91.115.190\n116.82.248.104\n116.73.110.135\n116.71.135.74\n116.68.126.100\n116.58.187.189\n116.50.230.138\n116.50.180.210\n116.48.144.195\n116.48.132.6\n116.250.217.39\n116.212.100.98\n116.203.32.217\n116.203.181.6\n116.203.180.236\n116.202.21.65\n116.125.157.67\n116.125.124.79\n116.122.39.197\n116.121.52.43\n116.121.27.10\n116.120.11.6\n116.12.215.137\n116.12.206.109\n116.12.172.241\n116.118.119.167\n116.100.88.123\n115.99.215.16\n115.99.213.7\n115.99.212.118\n115.99.187.128\n115.99.102.41\n115.96.208.210\n115.96.149.199\n115.95.56.126\n115.84.79.71\n115.79.7.63\n115.79.5.78\n115.73.220.183\n115.70.225.190\n115.69.240.6\n115.68.110.146\n115.42.222.113\n115.42.210.81\n115.42.204.234\n115.31.133.178\n115.23.219.218\n115.178.53.146\n115.160.160.146\n115.147.21.134\n115.146.254.38\n115.146.252.198\n115.146.250.193\n115.146.249.49\n115.146.199.242\n115.146.192.90\n115.146.192.218\n115.146.189.170\n115.146.174.102\n115.146.127.181\n115.146.120.140\n115.126.20.15\n114.7.120.14\n114.6.46.153\n114.34.176.73\n114.33.89.166\n114.33.53.151\n114.33.41.219\n114.32.23.229\n114.199.226.206\n114.198.144.44\n114.179.13.90\n114.160.59.146\n114.160.203.201\n114.160.194.67\n114.156.146.116\n114.143.91.103\n114.143.88.197\n114.143.37.233\n114.143.34.54\n114.143.34.228\n114.143.34.218\n114.130.5.6\n114.130.5.5\n114.114.115.115\n114.114.114.114\n114.108.141.187\n113.61.224.12\n113.52.197.14\n113.42.99.133\n113.28.94.231\n113.28.71.243\n113.28.67.147\n113.28.67.105\n113.255.5.34\n113.22.113.64\n113.198.254.2\n113.196.55.130\n113.190.253.229\n113.176.7.202\n113.174.246.243\n113.165.96.215\n113.165.94.135\n113.164.80.4\n113.163.222.44\n113.162.247.163\n113.161.76.34\n113.161.71.132\n113.161.30.2\n113.161.230.20\n113.161.230.19\n113.161.208.18\n113.161.196.15\n113.161.180.214\n113.161.18.44\n113.161.169.161\n113.161.163.169\n113.161.116.150\n113.160.250.45\n113.160.232.172\n113.160.227.246\n113.160.226.179\n113.160.155.57\n113.160.116.252\n113.149.254.97\n112.76.169.12\n112.76.132.49\n112.220.81.150\n112.216.251.98\n112.216.19.69\n112.216.19.68\n112.216.138.50\n112.199.115.40\n112.198.179.23\n112.196.19.243\n112.186.103.96\n112.175.232.142\n112.173.44.139\n112.172.7.207\n112.169.182.143\n112.157.117.247\n112.154.101.76\n112.133.241.244\n112.133.198.54\n112.133.114.222\n112.121.184.34\n111.92.96.96\n111.92.96.19\n111.92.85.233\n111.92.189.105\n111.92.106.148\n111.92.105.39\n111.92.100.55\n111.68.108.215\n111.68.108.200\n111.125.72.190\n111.118.223.243\n111.118.147.236\n110.9.165.5\n110.78.18.44\n110.77.149.172\n110.76.152.20\n110.49.95.45\n110.49.78.20\n110.49.144.179\n110.49.124.74\n110.49.124.73\n110.49.123.26\n110.49.123.187\n110.49.11.170\n110.45.182.88\n110.44.123.48\n110.4.40.214\n110.174.24.94\n110.170.140.105\n110.164.95.66\n110.164.71.170\n110.164.241.236\n110.164.193.206\n110.164.151.194\n110.164.139.66\n110.164.139.186\n110.15.182.99\n110.15.182.145\n110.145.166.222\n110.145.154.62\n110.143.26.239\n110.143.148.183\n110.142.40.60\n109.96.66.14\n109.92.27.159\n109.92.133.78\n109.75.45.3\n109.75.41.201\n109.73.42.171\n109.73.39.154\n109.72.239.247\n109.69.6.30\n109.68.15.212\n109.68.14.61\n109.5.33.66\n109.248.212.9\n109.248.2.1\n109.248.157.46\n109.248.157.118\n109.245.230.145\n109.241.116.68\n109.238.224.178\n109.237.94.186\n109.235.216.5\n109.234.249.10\n109.234.248.10\n109.233.192.72\n109.232.88.4\n109.232.88.3\n109.228.8.84\n109.228.8.83\n109.228.22.126\n109.228.21.223\n109.228.16.144\n109.228.1.132\n109.228.0.238\n109.226.199.197\n109.224.233.190\n109.224.233.174\n109.203.100.192\n109.202.11.6\n109.200.180.226\n109.199.77.76\n109.199.253.44\n109.197.71.34\n109.197.107.104\n109.195.146.245\n109.194.118.24\n109.168.65.86\n109.163.232.228\n109.160.96.238\n109.125.204.16\n109.117.16.197\n109.111.9.14\n109.111.8.0\n109.111.75.114\n109.111.117.212\n109.111.112.58\n109.110.44.12\n109.110.40.41\n109.110.40.214\n109.110.238.65\n109.105.55.39\n109.105.45.31\n109.105.45.30\n109.105.40.34\n108.41.102.212\n108.162.196.93\n108.162.196.91\n108.162.196.79\n108.162.196.77\n108.162.196.75\n108.162.196.67\n108.162.196.62\n108.162.196.3\n108.162.196.245\n108.162.196.238\n108.162.196.229\n108.162.196.219\n108.162.196.212\n108.162.196.21\n108.162.196.205\n108.162.196.20\n108.162.196.199\n108.162.196.180\n108.162.196.173\n108.162.196.17\n108.162.196.16\n108.162.196.15\n108.162.196.129\n108.162.196.12\n108.162.195.95\n108.162.195.94\n108.162.195.93\n108.162.195.91\n108.162.195.8\n108.162.195.7\n108.162.195.67\n108.162.195.65\n108.162.195.45\n108.162.195.42\n108.162.195.36\n108.162.195.31\n108.162.195.30\n108.162.195.29\n108.162.195.247\n108.162.195.246\n108.162.195.220\n108.162.195.208\n108.162.195.202\n108.162.195.197\n108.162.195.183\n108.162.195.181\n108.162.195.172\n108.162.195.167\n108.162.195.163\n108.162.195.137\n108.162.195.135\n108.162.195.132\n108.162.195.127\n108.162.195.118\n108.162.195.113\n108.162.194.93\n108.162.194.87\n108.162.194.85\n108.162.194.78\n108.162.194.64\n108.162.194.6\n108.162.194.56\n108.162.194.5\n108.162.194.40\n108.162.194.36\n108.162.194.35\n108.162.194.32\n108.162.194.3\n108.162.194.252\n108.162.194.251\n108.162.194.25\n108.162.194.249\n108.162.194.24\n108.162.194.23\n108.162.194.229\n108.162.194.227\n108.162.194.215\n108.162.194.213\n108.162.194.201\n108.162.194.193\n108.162.194.186\n108.162.194.182\n108.162.194.180\n108.162.194.177\n108.162.194.159\n108.162.194.153\n108.162.194.152\n108.162.194.150\n108.162.194.141\n108.162.194.127\n108.162.194.120\n108.162.194.112\n108.162.194.11\n108.162.194.105\n108.162.194.103\n108.162.194.10\n108.162.193.99\n108.162.193.94\n108.162.193.83\n108.162.193.70\n108.162.193.37\n108.162.193.33\n108.162.193.32\n108.162.193.250\n108.162.193.242\n108.162.193.227\n108.162.193.226\n108.162.193.225\n108.162.193.224\n108.162.193.221\n108.162.193.207\n108.162.193.201\n108.162.193.198\n108.162.193.181\n108.162.193.161\n108.162.193.154\n108.162.193.151\n108.162.193.139\n108.162.193.130\n108.162.193.112\n108.162.193.111\n108.162.193.108\n108.162.193.106\n108.162.193.104\n108.162.192.8\n108.162.192.79\n108.162.192.66\n108.162.192.65\n108.162.192.45\n108.162.192.35\n108.162.192.3\n108.162.192.27\n108.162.192.254\n108.162.192.248\n108.162.192.238\n108.162.192.237\n108.162.192.234\n108.162.192.208\n108.162.192.200\n108.162.192.19\n108.162.192.185\n108.162.192.183\n108.162.192.164\n108.162.192.162\n108.162.192.149\n108.162.192.146\n108.162.192.140\n108.162.192.14\n108.162.192.136\n108.162.192.134\n108.162.192.127\n108.162.192.124\n108.161.133.137\n107.80.51.240\n107.80.230.195\n107.80.230.178\n107.241.236.99\n107.241.236.106\n107.241.170.173\n107.189.31.10\n107.182.193.69\n107.170.102.45\n107.144.121.130\n107.130.51.137\n107.125.177.89\n107.0.218.126\n106.0.61.250\n105.30.247.93\n105.29.89.225\n105.255.121.94\n105.247.182.102\n105.244.179.78\n105.244.179.225\n105.243.201.129\n105.243.179.28\n105.243.179.199\n105.243.179.17\n105.243.178.87\n105.242.63.54\n104.60.85.131\n104.245.55.17\n104.245.144.98\n104.232.6.1\n104.207.130.197\n104.187.69.92\n104.168.159.220\n104.155.237.225\n104.131.163.103\n103.99.150.10\n103.99.110.113\n103.95.148.6\n103.93.150.184\n103.90.162.6\n103.9.88.154\n103.86.99.100\n103.86.96.100\n103.86.135.166\n103.86.103.29\n103.84.96.6\n103.84.132.2\n103.84.119.230\n103.84.119.226\n103.84.119.192\n103.84.119.172\n103.83.33.13\n103.82.242.153\n103.82.241.138\n103.80.1.193\n103.79.74.1\n103.78.35.229\n103.77.227.162\n103.77.188.19\n103.77.188.18\n103.74.230.32\n103.74.228.89\n103.74.228.39\n103.74.228.177\n103.7.172.8\n103.7.172.7\n103.68.156.122\n103.67.152.193\n103.65.240.147\n103.59.52.3\n103.59.176.154\n103.58.120.120\n103.57.71.89\n103.57.71.38\n103.57.71.2\n103.57.71.156\n103.57.71.145\n103.57.71.140\n103.57.71.137\n103.57.71.120\n103.57.71.102\n103.57.70.98\n103.57.70.62\n103.57.70.34\n103.57.70.220\n103.57.70.103\n103.53.228.24\n103.51.144.216\n103.51.144.214\n103.51.144.212\n103.51.139.51\n103.50.215.236\n103.5.148.99\n103.5.148.100\n103.48.78.157\n103.48.78.156\n103.48.207.78\n103.35.140.52\n103.35.140.43\n103.30.245.97\n103.28.39.63\n103.28.37.218\n103.28.114.57\n103.26.170.103\n103.251.105.188\n103.250.28.6\n103.249.33.206\n103.247.156.200\n103.246.244.143\n103.242.58.167\n103.242.58.166\n103.242.124.7\n103.241.181.28\n103.239.32.81\n103.239.32.36\n103.239.165.34\n103.237.97.164\n103.237.147.46\n103.237.127.20\n103.232.32.246\n103.23.223.249\n103.228.35.43\n103.225.36.238\n103.225.36.226\n103.22.245.50\n103.22.181.122\n103.217.216.122\n103.215.16.230\n103.213.202.166\n103.211.26.243\n103.211.153.41\n103.209.199.8\n103.209.199.6\n103.209.199.114\n103.209.199.107\n103.206.247.194\n103.205.178.9\n103.204.68.85\n103.204.68.48\n103.204.68.219\n103.204.68.165\n103.204.246.241\n103.202.221.88\n103.202.221.69\n103.202.221.53\n103.202.221.40\n103.202.221.34\n103.202.221.224\n103.202.221.210\n103.202.221.200\n103.202.221.178\n103.202.221.163\n103.202.221.149\n103.202.221.12\n103.202.221.107\n103.200.218.78\n103.200.218.77\n103.20.28.2\n103.20.184.97\n103.20.184.81\n103.20.152.11\n103.198.19.2\n103.196.38.8\n103.196.38.39\n103.196.38.38\n103.196.16.2\n103.196.136.7\n103.191.85.74\n103.191.85.56\n103.191.85.50\n103.191.85.46\n103.191.85.45\n103.191.85.168\n103.191.85.164\n103.191.84.84\n103.191.84.54\n103.191.84.50\n103.191.84.28\n103.191.84.186\n103.191.84.112\n103.191.84.10\n103.190.43.95\n103.190.43.24\n103.190.43.227\n103.190.43.148\n103.190.178.190\n103.190.169.4\n103.186.253.5\n103.186.253.244\n103.186.253.243\n103.186.253.240\n103.186.253.185\n103.186.253.114\n103.186.253.112\n103.186.253.109\n103.186.252.56\n103.186.252.29\n103.186.252.218\n103.185.25.167\n103.184.180.241\n103.183.16.25\n103.181.123.94\n103.181.123.9\n103.181.123.86\n103.181.123.83\n103.181.123.76\n103.181.123.68\n103.181.123.65\n103.181.123.5\n103.181.123.36\n103.181.123.241\n103.181.123.231\n103.181.123.212\n103.181.123.196\n103.181.123.19\n103.181.123.188\n103.181.123.141\n103.181.123.134\n103.181.123.109\n103.181.122.92\n103.181.122.6\n103.181.122.249\n103.181.122.241\n103.181.122.236\n103.181.122.17\n103.181.122.16\n103.181.122.158\n103.181.122.148\n103.181.122.131\n103.181.122.108\n103.181.122.105\n103.181.122.101\n103.18.138.20\n103.179.182.47\n103.179.182.237\n103.178.86.41\n103.178.194.131\n103.177.234.10\n103.176.159.18\n103.175.2.235\n103.174.224.9\n103.174.224.87\n103.174.224.84\n103.174.224.70\n103.174.224.50\n103.174.224.41\n103.174.224.39\n103.174.224.38\n103.174.224.247\n103.174.224.241\n103.174.224.225\n103.174.224.222\n103.174.224.22\n103.174.224.21\n103.174.224.208\n103.174.224.184\n103.174.224.151\n103.174.224.140\n103.174.224.124\n103.174.224.119\n103.174.224.117\n103.174.224.10\n103.174.224.0\n103.174.102.61\n103.173.173.173\n103.173.152.233\n103.172.197.43\n103.172.172.51\n103.171.182.73\n103.171.180.48\n103.170.90.121\n103.170.172.95\n103.170.172.79\n103.170.172.77\n103.170.172.73\n103.170.172.61\n103.170.172.50\n103.170.172.38\n103.170.172.3\n103.170.172.254\n103.170.172.252\n103.170.172.249\n103.170.172.246\n103.170.172.232\n103.170.172.221\n103.170.172.220\n103.170.172.203\n103.170.172.199\n103.170.172.185\n103.170.172.182\n103.170.172.175\n103.170.172.164\n103.170.172.163\n103.170.172.162\n103.170.172.157\n103.170.172.151\n103.170.172.148\n103.170.172.147\n103.170.172.138\n103.170.172.127\n103.170.172.113\n103.170.172.111\n103.17.176.84\n103.17.176.81\n103.17.176.73\n103.17.176.32\n103.17.176.31\n103.17.176.3\n103.17.176.251\n103.17.176.240\n103.17.176.231\n103.17.176.215\n103.17.176.214\n103.17.176.182\n103.17.176.181\n103.17.176.175\n103.17.176.173\n103.17.176.146\n103.17.176.133\n103.17.176.128\n103.17.176.117\n103.17.176.115\n103.169.187.67\n103.168.29.185\n103.168.177.230\n103.166.171.69\n103.165.4.82\n103.165.39.50\n103.165.165.68\n103.165.154.1\n103.165.118.76\n103.165.118.179\n103.164.116.180\n103.163.117.61\n103.163.117.223\n103.162.57.37\n103.161.42.2\n103.161.31.137\n103.161.128.130\n103.161.128.128\n103.16.63.166\n103.16.25.47\n103.16.25.46\n103.16.118.11\n103.159.251.209\n103.159.195.40\n103.159.195.234\n103.159.195.156\n103.157.152.6\n103.156.86.78\n103.156.86.29\n103.156.75.132\n103.156.66.254\n103.156.239.193\n103.156.239.106\n103.155.64.208\n103.155.42.204\n103.155.42.150\n103.155.42.130\n103.155.199.45\n103.155.198.142\n103.155.174.87\n103.155.174.85\n103.155.174.68\n103.155.174.113\n103.155.174.109\n103.154.49.74\n103.154.241.252\n103.154.2.93\n103.154.16.58\n103.154.16.5\n103.154.16.34\n103.154.16.32\n103.154.16.30\n103.154.16.255\n103.154.16.25\n103.154.16.238\n103.154.16.228\n103.154.16.217\n103.154.16.210\n103.154.16.208\n103.154.16.177\n103.154.16.148\n103.154.16.136\n103.154.16.128\n103.154.16.115\n103.154.16.101\n103.153.49.82\n103.153.49.41\n103.153.49.251\n103.153.48.83\n103.153.48.27\n103.153.48.25\n103.153.191.42\n103.153.190.78\n103.153.190.238\n103.152.143.244\n103.152.101.135\n103.151.246.46\n103.151.226.62\n103.151.226.42\n103.151.155.21\n103.15.246.182\n103.149.165.83\n103.149.165.162\n103.148.178.80\n103.148.178.77\n103.148.178.7\n103.148.178.63\n103.148.178.59\n103.148.178.54\n103.148.178.50\n103.148.178.35\n103.148.178.3\n103.148.178.20\n103.148.178.179\n103.148.178.161\n103.148.178.104\n103.148.130.112\n103.148.112.146\n103.146.55.82\n103.146.55.67\n103.146.55.61\n103.146.55.53\n103.146.55.49\n103.146.55.48\n103.146.55.39\n103.146.55.27\n103.146.55.250\n103.146.55.247\n103.146.55.243\n103.146.55.171\n103.146.55.157\n103.146.55.153\n103.146.55.142\n103.146.55.14\n103.146.55.137\n103.146.55.133\n103.146.55.131\n103.146.55.124\n103.146.55.108\n103.146.54.25\n103.146.54.247\n103.146.54.244\n103.146.54.24\n103.146.54.218\n103.146.54.217\n103.146.54.112\n103.146.54.104\n103.145.36.151\n103.145.165.91\n103.145.165.7\n103.145.165.59\n103.145.165.42\n103.145.165.235\n103.145.165.233\n103.145.165.226\n103.145.165.213\n103.145.165.206\n103.145.165.204\n103.145.165.196\n103.145.165.172\n103.145.165.155\n103.145.165.116\n103.145.164.99\n103.145.164.94\n103.145.164.85\n103.145.164.81\n103.145.164.77\n103.145.164.70\n103.145.164.57\n103.145.164.52\n103.145.164.51\n103.145.164.50\n103.145.164.5\n103.145.164.39\n103.145.164.32\n103.145.164.247\n103.145.164.239\n103.145.164.234\n103.145.164.231\n103.145.164.226\n103.145.164.221\n103.145.164.218\n103.145.164.206\n103.145.164.203\n103.145.164.186\n103.145.164.18\n103.145.164.178\n103.145.164.162\n103.145.164.153\n103.145.164.141\n103.145.164.14\n103.145.164.113\n103.144.144.58\n103.143.237.9\n103.143.237.85\n103.143.237.82\n103.143.237.40\n103.143.237.206\n103.143.237.172\n103.143.237.165\n103.143.237.140\n103.143.237.136\n103.143.237.10\n103.143.236.96\n103.143.236.89\n103.143.236.37\n103.143.236.233\n103.143.236.219\n103.143.236.203\n103.143.236.200\n103.143.236.181\n103.143.236.142\n103.143.236.105\n103.142.147.14\n103.141.200.98\n103.141.200.97\n103.141.200.75\n103.141.200.12\n103.140.25.69\n103.140.25.43\n103.140.25.36\n103.140.25.223\n103.140.25.191\n103.140.25.121\n103.140.25.115\n103.140.25.100\n103.140.24.95\n103.140.24.75\n103.140.24.248\n103.140.24.244\n103.140.24.209\n103.140.24.201\n103.140.24.175\n103.140.24.158\n103.140.24.148\n103.140.24.14\n103.140.24.130\n103.140.24.125\n103.140.24.124\n103.140.24.115\n103.140.24.105\n103.140.24.102\n103.140.17.242\n103.139.14.2\n103.138.51.141\n103.138.175.58\n103.138.175.22\n103.137.156.3\n103.137.10.193\n103.135.172.78\n103.135.172.73\n103.135.172.60\n103.135.172.37\n103.135.172.31\n103.135.172.28\n103.135.172.199\n103.135.172.197\n103.135.172.191\n103.135.172.141\n103.135.172.117\n103.135.138.6\n103.135.135.64\n103.134.44.222\n103.133.122.148\n103.132.52.32\n103.132.52.31\n103.132.242.59\n103.130.4.82\n103.130.4.8\n103.13.41.2\n103.13.123.16\n103.13.112.251\n103.129.211.142\n103.129.211.13\n103.126.87.123\n103.126.201.33\n103.126.201.129\n103.126.201.1\n103.125.163.241\n103.124.225.75\n103.123.226.10\n103.123.225.10\n103.122.65.97\n103.122.29.129\n103.122.252.82\n103.122.252.81\n103.121.228.5\n103.121.228.1\n103.120.111.2\n103.12.31.83\n103.12.2.11\n103.119.146.46\n103.119.126.68\n103.119.109.162\n103.119.109.160\n103.118.178.18\n103.117.63.67\n103.115.119.41\n103.115.118.210\n103.115.118.201\n103.115.118.197\n103.115.118.113\n103.112.207.159\n103.112.204.37\n103.112.12.214\n103.111.122.2\n103.109.39.79\n103.109.239.243\n103.109.239.242\n103.108.9.217\n103.107.186.1\n103.106.219.117\n103.105.78.207\n103.105.64.163\n103.105.212.98\n103.103.88.39\n103.103.127.169\n103.103.126.6\n103.103.126.110\n103.103.125.253\n103.103.125.247\n103.103.125.133\n103.103.125.130\n103.103.124.70\n103.103.124.247\n103.103.124.212\n103.103.124.200\n103.103.124.144\n103.103.124.120\n103.102.250.37\n103.102.250.209\n103.102.250.127\n103.102.250.102\n103.102.136.102\n103.10.171.230\n102.91.8.126\n102.68.79.77\n102.67.139.204\n102.64.76.49\n102.50.253.95\n102.33.47.78\n102.33.46.203\n102.33.45.23\n102.33.45.152\n102.221.92.53\n102.221.244.1\n102.221.12.46\n102.22.81.43\n102.22.81.114\n102.22.72.24\n102.22.108.2\n102.219.209.155\n102.218.172.222\n102.217.29.78\n102.217.123.98\n102.216.69.18\n102.216.223.14\n102.212.226.177\n102.176.81.182\n102.164.255.149\n102.16.68.12\n102.141.244.134\n102.133.139.27\n101.255.119.209\n101.198.198.198\n101.110.40.25\n101.102.196.118\n101.102.103.104\n101.101.101.101\n101.0.97.70\n101.0.6.195\n1.9.70.93\n1.9.70.86\n1.9.70.84\n1.9.165.210\n1.9.111.99\n1.9.111.97\n1.4.203.13\n1.4.155.85\n1.38.3.52\n1.38.3.168\n1.38.3.167\n1.34.94.130\n1.34.58.188\n1.34.189.116\n1.33.204.121\n1.33.199.58\n1.33.199.57\n1.33.129.233\n1.255.134.74\n1.253.233.47\n1.253.233.42\n1.252.22.37\n1.251.44.10\n1.250.66.91\n1.250.66.88\n1.250.246.15\n1.249.43.20\n1.249.207.225\n1.248.31.204\n1.247.32.84\n1.246.219.171\n1.246.201.9\n1.246.201.53\n1.246.201.38\n1.246.201.12\n1.245.51.74\n1.245.143.166\n1.242.141.19\n1.241.255.203\n1.238.6.146\n1.237.46.97\n1.237.229.208\n1.236.11.126\n1.236.11.121\n1.235.89.75\n1.235.89.4\n1.235.186.131\n1.234.79.82\n1.234.72.207\n1.234.72.165\n1.234.72.146\n1.234.66.81\n1.234.4.150\n1.234.31.2\n1.234.178.2\n1.233.8.222\n1.231.163.67\n1.229.87.167\n1.229.87.157\n1.229.87.138\n1.229.79.96\n1.229.71.72\n1.229.184.91\n1.228.42.28\n1.228.32.93\n1.228.224.139\n1.228.122.57\n1.227.9.73\n1.227.9.134\n1.227.56.61\n1.226.193.136\n1.226.190.17\n1.225.165.101\n1.224.187.102\n1.221.232.82\n1.21.10.81\n1.209.148.129\n1.179.228.10\n1.179.166.229\n1.179.153.125\n1.12.13.53\n1.11.251.105\n1.10.10.10\n1.1.1.3\n1.1.1.2\n1.1.1.1\n1.0.241.30\n1.0.161.80\n1.0.158.183\n1.0.153.150\n1.0.0.3\n1.0.0.2\n1.0.0.19\n1.0.0.1"
  },
  {
    "path": "backend/scripts/generate_test_data_sql.py",
    "content": "#!/usr/bin/env python3\n\"\"\"\n直接通过 SQL 插入测试数据\n\n用法：\n    # 生成常规测试数据\n    python backend/scripts/generate_test_data_sql.py\n    python backend/scripts/generate_test_data_sql.py --clear  # 清除后重新生成\n    \n    # 生成百万级测试数据(用于测试 Dashboard 卡片溢出)\n    python backend/scripts/generate_test_data_sql.py --million\n    python backend/scripts/generate_test_data_sql.py --million --clear  # 清除后生成百万级数据\n    \n百万级数据说明：\n    - 目标: 1,000\n    - 子域名: 200,000\n    - 网站: 200,000\n    - 端点: 200,000\n    - IP (host_port_mapping): 200,000\n    - 漏洞: 200,000 (critical: 50k, high: 50k, medium: 50k, low: 30k, info: 20k)\n    - 总资产: ~660,000\n\"\"\"\n\nimport argparse\nimport random\nimport json\nimport os\nfrom datetime import datetime, timedelta\nfrom decimal import Decimal\nfrom pathlib import Path\n\nimport psycopg2\nfrom psycopg2.extras import execute_values\n\n\ndef generate_fixed_length_url(target_name: str, length: int = 245, path_hint: str = '') -> str:\n    \"\"\"\n    生成固定长度的 URL\n    \n    Args:\n        target_name: 目标域名\n        length: 目标URL长度，默认245\n        path_hint: 可选的路径提示，用于区分不同类型的URL\n    \n    Returns:\n        固定长度的URL字符串\n    \"\"\"\n    base = f'https://{target_name}'\n    \n    # 基础路径\n    paths = [\n        '/api/v3/enterprise/security-assessment/vulnerability-management',\n        '/admin/dashboard/system-configuration/advanced-settings',\n        '/portal/user-authentication/multi-factor/verification',\n        '/services/cloud-infrastructure/monitoring/metrics',\n        '/internal/system-administration/audit-logging/events',\n    ]\n    \n    path = random.choice(paths) if not path_hint else f'/{path_hint}'\n    url = f'{base}{path}'\n    \n    # 添加查询参数\n    param_idx = 0\n    while len(url) < length - 20:\n        param_idx += 1\n        param = f'p{param_idx}={random.randint(10000000, 99999999)}'\n        separator = '?' if '?' not in url else '&'\n        url = f'{url}{separator}{param}'\n    \n    # 精确调整到目标长度\n    if len(url) < length:\n        # 添加填充参数\n        padding_needed = length - len(url) - 1  # -1 for '&' or '?'\n        if padding_needed > 0:\n            separator = '?' if '?' not in url else '&'\n            # 创建精确长度的填充\n            padding = 'x' * padding_needed\n            url = f'{url}{separator}{padding}'\n    \n    # 截断到精确长度\n    if len(url) > length:\n        url = url[:length]\n    \n    return url\n\n\ndef generate_fixed_length_text(length: int = 300, text_type: str = 'description') -> str:\n    \"\"\"\n    生成固定长度的文本内容\n    \n    Args:\n        length: 目标文本长度，默认300\n        text_type: 文本类型，用于选择不同的内容模板\n    \n    Returns:\n        固定长度的文本字符串\n    \"\"\"\n    # 基础文本模板\n    templates = {\n        'description': [\n            'A critical security vulnerability was discovered in the application authentication module. This vulnerability allows attackers to bypass security controls and gain unauthorized access to sensitive system resources. The issue stems from improper input validation and insufficient access control mechanisms. Exploitation could lead to complete system compromise, data exfiltration, and service disruption. Immediate remediation is strongly recommended including implementing proper input sanitization, strengthening authentication mechanisms, and deploying additional security monitoring. The vulnerability affects multiple components including user authentication, session management, API endpoints, and data processing pipelines. Risk assessment indicates high severity with potential for significant business impact.',\n            'Server-side request forgery (SSRF) vulnerability detected in the API gateway service. An attacker can manipulate server-side requests to access internal network resources, potentially exposing sensitive configuration data, internal services, and cloud metadata endpoints. The vulnerability exists due to insufficient URL validation in the proxy functionality. This could allow attackers to scan internal networks, access cloud instance metadata, retrieve sensitive credentials, and pivot to other internal systems. Recommended mitigations include implementing strict URL allowlisting, blocking requests to internal IP ranges, and adding network segmentation controls. The vulnerability has been assigned a high severity rating due to potential for lateral movement.',\n            'Remote code execution vulnerability identified in the file upload processing module. Insufficient file type validation allows attackers to upload malicious executable files that can be triggered to execute arbitrary code on the server. The vulnerability bypasses existing security controls through specially crafted file headers and extension manipulation. Successful exploitation grants attackers full control over the affected server, enabling data theft, malware deployment, and establishment of persistent backdoor access. Critical remediation steps include implementing strict file type validation, sandboxed file processing, content inspection, and removal of execution permissions from upload directories. This vulnerability requires immediate attention.',\n            'Cross-site scripting (XSS) vulnerability found in the user profile management interface. User-supplied input is rendered without proper encoding, allowing injection of malicious JavaScript code. Attackers can exploit this to steal session tokens, perform actions on behalf of authenticated users, redirect victims to phishing sites, and exfiltrate sensitive personal information. The vulnerability affects multiple input fields including display name, bio, and custom URL parameters. Remediation requires implementing context-aware output encoding, Content Security Policy headers, and input validation. Additionally, consider implementing HTTP-only and Secure flags on session cookies to limit the impact of successful XSS attacks.',\n            'SQL injection vulnerability discovered in the advanced search functionality. The application constructs database queries using unsanitized user input, enabling attackers to manipulate query logic, extract sensitive data, modify database contents, or execute administrative operations. The vulnerability affects the product search, user lookup, and reporting modules. Exploitation could result in complete database compromise, unauthorized data access, data manipulation, and potential privilege escalation. Immediate remediation includes implementing parameterized queries, stored procedures, input validation, and principle of least privilege for database accounts. Consider deploying a web application firewall as an additional defense layer.',\n        ],\n        'organization': [\n            'A leading global technology corporation specializing in enterprise software solutions, cloud computing infrastructure, cybersecurity services, and digital transformation consulting. The organization operates across multiple continents with regional headquarters in North America, Europe, and Asia-Pacific. Core business units include enterprise resource planning systems, customer relationship management platforms, supply chain optimization tools, and advanced analytics solutions. The company maintains strategic partnerships with major cloud providers and technology vendors. Annual revenue exceeds several billion dollars with consistent year-over-year growth. The organization employs thousands of professionals including software engineers, security researchers, and business consultants.',\n            'An innovative financial technology company providing comprehensive digital banking services, payment processing solutions, and investment management platforms. The organization serves millions of customers globally through mobile applications, web portals, and API integrations. Key offerings include real-time payment processing, cryptocurrency trading, automated investment advisory, and small business lending. The company maintains regulatory compliance across multiple jurisdictions and holds various financial services licenses. Security infrastructure includes advanced fraud detection, multi-factor authentication, and end-to-end encryption. The organization has received multiple industry awards for innovation and customer satisfaction.',\n            'A healthcare technology enterprise focused on electronic health records, telemedicine platforms, medical device integration, and healthcare analytics. The organization partners with hospitals, clinics, and healthcare systems worldwide to improve patient outcomes and operational efficiency. Core products include comprehensive EHR systems, patient engagement portals, clinical decision support tools, and population health management platforms. The company maintains strict compliance with healthcare regulations including HIPAA, GDPR, and regional data protection requirements. Research and development investments focus on artificial intelligence applications in diagnostics, treatment optimization, and predictive health analytics.',\n        ],\n        'title': [\n            'Enterprise Resource Planning System - Comprehensive Business Management Dashboard with Real-time Analytics, Workflow Automation, and Multi-department Integration Capabilities for Global Operations Management and Strategic Decision Support',\n            'Advanced Security Operations Center - Unified Threat Detection and Response Platform featuring Machine Learning-powered Anomaly Detection, Automated Incident Response, and Comprehensive Security Posture Management',\n            'Customer Experience Management Platform - Omnichannel Engagement Solution with AI-driven Personalization, Journey Orchestration, Sentiment Analysis, and Predictive Customer Behavior Modeling Capabilities',\n            'Cloud Infrastructure Management Console - Multi-cloud Orchestration Platform supporting AWS, Azure, and GCP with Automated Provisioning, Cost Optimization, Compliance Monitoring, and Performance Analytics',\n            'Data Analytics and Business Intelligence Suite - Self-service Analytics Platform with Advanced Visualization, Predictive Modeling, Natural Language Query Processing, and Automated Report Generation',\n        ],\n    }\n    \n    # 选择模板\n    template_list = templates.get(text_type, templates['description'])\n    base_text = random.choice(template_list)\n    \n    # 调整到目标长度\n    if len(base_text) < length:\n        # 需要扩展文本\n        padding_words = [\n            'Additionally', 'Furthermore', 'Moreover', 'Consequently', 'Subsequently',\n            'comprehensive', 'implementation', 'infrastructure', 'configuration', 'authentication',\n            'vulnerability', 'exploitation', 'remediation', 'mitigation', 'assessment',\n        ]\n        while len(base_text) < length - 20:\n            base_text += f' {random.choice(padding_words)}'\n        # 精确填充\n        if len(base_text) < length:\n            padding_needed = length - len(base_text)\n            base_text += ' ' + 'x' * (padding_needed - 1)\n    \n    # 截断到精确长度\n    if len(base_text) > length:\n        base_text = base_text[:length]\n    \n    return base_text\n\n\ndef load_env_file(env_path: str) -> dict:\n    \"\"\"从 .env 文件加载环境变量\"\"\"\n    env_vars = {}\n    if os.path.exists(env_path):\n        with open(env_path, 'r') as f:\n            for line in f:\n                line = line.strip()\n                if line and not line.startswith('#') and '=' in line:\n                    key, value = line.split('=', 1)\n                    env_vars[key.strip()] = value.strip()\n    return env_vars\n\n\ndef get_db_config() -> dict:\n    \"\"\"从 docker/.env 读取数据库配置\"\"\"\n    # 获取项目根目录\n    script_dir = Path(__file__).resolve().parent\n    project_root = script_dir.parent.parent\n    env_path = project_root / 'docker' / '.env'\n    \n    env_vars = load_env_file(str(env_path))\n    \n    # 获取数据库配置，docker/.env 中 DB_HOST=postgres 是容器内地址，本地运行需要用 localhost\n    db_host = env_vars.get('DB_HOST', 'postgres')\n    if db_host == 'postgres':\n        db_host = 'localhost'  # 本地运行脚本时使用 localhost\n    \n    return {\n        'host': db_host,\n        'port': int(env_vars.get('DB_PORT', 5432)),\n        'dbname': env_vars.get('DB_NAME', 'xingrin'),\n        'user': env_vars.get('DB_USER', 'postgres'),\n        'password': env_vars.get('DB_PASSWORD', ''),\n    }\n\n\ndef generate_raw_response_headers(headers_dict: dict) -> str:\n    \"\"\"\n    将响应头字典转换为原始 HTTP 响应头字符串格式\n    \n    Args:\n        headers_dict: 响应头字典\n    \n    Returns:\n        原始 HTTP 响应头字符串，格式如：\n        HTTP/1.1 200 OK\n        Server: nginx\n        Content-Type: text/html\n        ...\n    \"\"\"\n    lines = ['HTTP/1.1 200 OK']\n    for key, value in headers_dict.items():\n        # 将下划线转换为连字符，并首字母大写\n        header_name = key.replace('_', '-').title()\n        lines.append(f'{header_name}: {value}')\n    return '\\r\\n'.join(lines)\n\n\nDB_CONFIG = get_db_config()\n\n\nclass TestDataGenerator:\n    def __init__(self, clear: bool = False):\n        self.conn = psycopg2.connect(**DB_CONFIG)\n        self.conn.autocommit = False\n        self.clear = clear\n        \n    def run(self):\n        try:\n            if self.clear:\n                print(\"🗑️  清除现有数据...\")\n                self.clear_data()\n                \n            print(\"🚀 开始生成测试数据...\\n\")\n            \n            engine_ids = self.create_engines()\n            worker_ids = self.create_workers()\n            org_ids = self.create_organizations()\n            target_ids = self.create_targets(org_ids)\n            scan_ids = self.create_scans(target_ids, engine_ids, worker_ids)\n            self.create_scheduled_scans(org_ids, target_ids, engine_ids)\n            self.create_subdomains(target_ids)\n            website_ids = self.create_websites(target_ids)\n            self.create_endpoints(target_ids)\n            self.create_directories(target_ids, website_ids)\n            self.create_host_port_mappings(target_ids)\n            self.create_vulnerabilities(target_ids)\n            \n            # 生成快照数据(扫描历史详细页面使用)\n            self.create_subdomain_snapshots(scan_ids)\n            self.create_website_snapshots(scan_ids)\n            self.create_endpoint_snapshots(scan_ids)\n            self.create_directory_snapshots(scan_ids)\n            self.create_host_port_mapping_snapshots(scan_ids)\n            self.create_vulnerability_snapshots(scan_ids)\n            \n            # 生成指纹数据\n            self.create_ehole_fingerprints()\n            self.create_goby_fingerprints()\n            self.create_wappalyzer_fingerprints()\n            self.create_fingers_fingerprints()\n            self.create_fingerprinthub_fingerprints()\n            self.create_arl_fingerprints()\n            \n            self.conn.commit()\n            print(\"\\n✅ 测试数据生成完成！\")\n        except Exception as e:\n            self.conn.rollback()\n            print(f\"\\n❌ 生成失败: {e}\")\n            raise\n        finally:\n            self.conn.close()\n\n    def clear_data(self):\n        \"\"\"清除所有测试数据\"\"\"\n        cur = self.conn.cursor()\n        \n        # 先删除 IMMV（避免 pg_ivm 的 anyarray bug）\n        print(\"  删除 IMMV...\")\n        cur.execute(\"DROP TABLE IF EXISTS asset_search_view CASCADE\")\n        self.conn.commit()\n        \n        tables = [\n            # 指纹表\n            'ehole_fingerprint', 'goby_fingerprint', 'wappalyzer_fingerprint',\n            'fingers_fingerprint', 'fingerprinthub_fingerprint', 'arl_fingerprint',\n            # 快照表(先删除，因为有外键依赖 scan)\n            'vulnerability_snapshot', 'host_port_mapping_snapshot', 'directory_snapshot',\n            'endpoint_snapshot', 'website_snapshot', 'subdomain_snapshot',\n            # 资产表\n            'vulnerability', 'host_port_mapping', 'directory', 'endpoint',\n            'website', 'subdomain', 'scheduled_scan', 'scan',\n            'organization_targets', 'target', 'organization',\n            'nuclei_template_repo', 'wordlist', 'scan_engine', 'worker_node'\n        ]\n        for table in tables:\n            cur.execute(f\"DELETE FROM {table}\")\n        self.conn.commit()\n        \n        # 重建 IMMV\n        print(\"  重建 IMMV...\")\n        cur.execute(\"\"\"\n            SELECT pgivm.create_immv('asset_search_view', $$\n                SELECT \n                    w.id,\n                    w.url,\n                    w.host,\n                    w.title,\n                    w.tech,\n                    w.status_code,\n                    w.response_headers,\n                    w.response_body,\n                    w.created_at,\n                    w.target_id\n                FROM website w\n            $$)\n        \"\"\")\n        self.conn.commit()\n        print(\"  ✓ 数据清除完成\\n\")\n\n    def create_workers(self) -> list:\n        \"\"\"创建 Worker 节点\"\"\"\n        print(\"👷 创建 Worker 节点...\")\n        cur = self.conn.cursor()\n        \n        # 生成随机后缀确保唯一性\n        suffix = random.randint(1000, 9999)\n        \n        regions = ['asia-singapore-1', 'asia-singapore-2', 'asia-tokyo-1', 'asia-tokyo-2', 'asia-hongkong-1', \n                   'asia-mumbai-1', 'asia-seoul-1', 'asia-sydney-1', 'asia-jakarta-1', 'asia-osaka-1',\n                   'europe-frankfurt-1', 'europe-frankfurt-2', 'europe-london-1', 'europe-london-2', \n                   'europe-paris-1', 'europe-ireland-1', 'europe-stockholm-1', 'europe-milan-1',\n                   'us-east-virginia-1', 'us-east-virginia-2', 'us-east-ohio-1', 'us-west-oregon-1', \n                   'us-west-oregon-2', 'us-west-california-1', 'us-central-iowa-1',\n                   'australia-sydney-1', 'australia-melbourne-1', 'brazil-saopaulo-1', \n                   'canada-montreal-1', 'southafrica-capetown-1', 'middleeast-bahrain-1']\n        statuses = ['online', 'offline', 'pending', 'deploying', 'maintenance', 'error', 'upgrading']\n        \n        workers = [\n            (f'local-worker-primary-high-performance-{suffix}', '127.0.0.1', True, 'online'),\n            (f'local-worker-secondary-backup-{suffix}', '127.0.0.2', True, 'online'),\n        ]\n        \n        # 随机生成 30-50 个远程 worker\n        num_remote = random.randint(30, 50)\n        selected_regions = random.sample(regions, min(num_remote, len(regions)))\n        for i, region in enumerate(selected_regions):\n            ip = f'192.168.{random.randint(1, 254)}.{random.randint(1, 254)}'\n            status = random.choice(statuses)\n            workers.append((f'remote-worker-{region}-{suffix}-{i:02d}', ip, False, status))\n        \n        ids = []\n        for name, ip, is_local, status in workers:\n            cur.execute(\"\"\"\n                INSERT INTO worker_node (name, ip_address, ssh_port, username, password, is_local, status, created_at, updated_at)\n                VALUES (%s, %s, 22, 'root', '', %s, %s, NOW(), NOW())\n                ON CONFLICT (name) DO UPDATE SET updated_at = NOW()\n                RETURNING id\n            \"\"\", (name, ip, is_local, status))\n            row = cur.fetchone()\n            if row:\n                ids.append(row[0])\n                \n        print(f\"  ✓ 创建了 {len(ids)} 个 Worker 节点\\n\")\n        return ids\n\n    def create_engines(self) -> list:\n        \"\"\"创建扫描引擎\"\"\"\n        print(\"⚙️  创建扫描引擎...\")\n        cur = self.conn.cursor()\n        \n        suffix = random.randint(1000, 9999)\n        \n        engine_templates = [\n            ('Full-Comprehensive-Security-Assessment-Enterprise-Grade-Vulnerability-Detection-System', 'subdomain_discovery:\\n  enabled: true\\n  tools: [subfinder, amass, findomain, assetfinder, chaos]\\n  timeout: {timeout}\\n  resolvers: [8.8.8.8, 1.1.1.1, 9.9.9.9]\\nvulnerability_scanning:\\n  enabled: true\\n  nuclei:\\n    severity: critical,high,medium,low,info\\n    rate_limit: {rate}\\n    concurrency: {conc}\\n    templates: [cves, vulnerabilities, exposures, misconfigurations, default-logins]'),\n            ('Quick-Reconnaissance-Fast-Discovery-Lightweight-Asset-Enumeration', 'subdomain_discovery:\\n  enabled: true\\n  tools: [subfinder, assetfinder]\\n  timeout: {timeout}\\n  passive_only: true\\nport_scanning:\\n  enabled: true\\n  top_ports: {ports}\\n  rate: {rate}'),\n            ('Deep-Vulnerability-Assessment-Extended-Security-Analysis-Framework', 'vulnerability_scanning:\\n  enabled: true\\n  nuclei:\\n    severity: critical,high,medium,low,info\\n    templates: [cves, vulnerabilities, exposures, misconfigurations, default-logins, takeovers]\\n    rate_limit: {rate}\\n    concurrency: {conc}\\n  dalfox:\\n    enabled: true\\n    blind_xss: true\\n  sqlmap:\\n    enabled: true\\n    level: 3\\n    risk: 2'),\n            ('Passive-Information-Gathering-OSINT-Intelligence-Collection-Platform', 'subdomain_discovery:\\n  enabled: true\\n  passive_only: true\\n  sources: [crtsh, hackertarget, threatcrowd, virustotal, securitytrails, shodan, censys, binaryedge]\\n  timeout: {timeout}\\n  dns_bruteforce: false'),\n            ('Web-Application-Security-Scanner-OWASP-Compliance-Testing-Suite', 'web_discovery:\\n  enabled: true\\n  httpx:\\n    threads: {conc}\\n    follow_redirects: true\\n    screenshot: true\\nvulnerability_scanning:\\n  enabled: true\\n  dalfox:\\n    enabled: true\\n    blind_xss: true\\n  nuclei:\\n    templates: [cves, vulnerabilities, exposures]'),\n            ('API-Endpoint-Security-Audit-RESTful-GraphQL-Assessment-Tool', 'endpoint_discovery:\\n  enabled: true\\n  katana:\\n    depth: {depth}\\n    concurrency: {conc}\\n    js_crawl: true\\n    automatic_form_fill: true\\nvulnerability_scanning:\\n  enabled: true\\n  nuclei:\\n    templates: [exposures, misconfigurations]'),\n            ('Infrastructure-Port-Scanner-Network-Service-Detection-Engine', 'port_scanning:\\n  enabled: true\\n  naabu:\\n    top_ports: {ports}\\n    rate: {rate}\\n    scan_all_ips: true\\n  service_detection: true\\n  version_detection: true\\n  os_detection: true'),\n            ('Directory-Bruteforce-Engine-Content-Discovery-Fuzzing-Platform', 'directory_bruteforce:\\n  enabled: true\\n  ffuf:\\n    threads: {conc}\\n    wordlist: [common.txt, raft-large-directories.txt, raft-large-files.txt]\\n    recursion_depth: {depth}\\n    extensions: [php, asp, aspx, jsp, html, js, json, xml]'),\n            ('Cloud-Infrastructure-Security-Assessment-AWS-Azure-GCP-Scanner', 'cloud_scanning:\\n  enabled: true\\n  providers: [aws, azure, gcp]\\n  services: [s3, ec2, rds, lambda, storage, compute, sql]\\n  misconfigurations: true\\n  public_exposure: true'),\n            ('Container-Security-Scanner-Kubernetes-Docker-Vulnerability-Detector', 'container_scanning:\\n  enabled: true\\n  kubernetes:\\n    enabled: true\\n    rbac_audit: true\\n    network_policies: true\\n  docker:\\n    enabled: true\\n    image_scanning: true\\n    dockerfile_lint: true'),\n            ('Mobile-Application-Security-Testing-iOS-Android-Assessment-Framework', 'mobile_scanning:\\n  enabled: true\\n  platforms: [ios, android]\\n  static_analysis: true\\n  dynamic_analysis: true\\n  api_testing: true\\n  ssl_pinning_bypass: true'),\n            ('Compliance-Audit-Scanner-PCI-DSS-HIPAA-SOC2-Assessment-Tool', 'compliance_scanning:\\n  enabled: true\\n  frameworks: [pci-dss, hipaa, soc2, gdpr, iso27001]\\n  automated_reporting: true\\n  evidence_collection: true'),\n        ]\n        \n        # 随机选择 8-12 个引擎模板\n        num_engines = random.randint(8, 12)\n        selected = random.sample(engine_templates, min(num_engines, len(engine_templates)))\n        \n        ids = []\n        for name_base, config_template in selected:\n            name = f'{name_base}-{suffix}'\n            config = config_template.format(\n                rate=random.choice([100, 150, 200, 300]),\n                conc=random.choice([10, 20, 50, 100]),\n                timeout=random.choice([300, 600, 900, 1200]),\n                ports=random.choice([100, 1000, 'full']),\n                depth=random.choice([2, 3, 4, 5])\n            )\n            cur.execute(\"\"\"\n                INSERT INTO scan_engine (name, configuration, created_at, updated_at)\n                VALUES (%s, %s, NOW(), NOW())\n                ON CONFLICT (name) DO UPDATE SET configuration = EXCLUDED.configuration, updated_at = NOW()\n                RETURNING id\n            \"\"\", (name, config))\n            row = cur.fetchone()\n            if row:\n                ids.append(row[0])\n                \n        print(f\"  ✓ 创建了 {len(ids)} 个扫描引擎\\n\")\n        return ids\n\n    def create_organizations(self) -> list:\n        \"\"\"创建组织\"\"\"\n        print(\"🏢 创建组织...\")\n        cur = self.conn.cursor()\n        \n        suffix = random.randint(1000, 9999)\n        \n        org_templates = [\n            ('Acme Corporation', '全球领先的技术解决方案提供商，专注于企业级软件开发、云计算服务和网络安全解决方案。公司成立于1995年，总部位于硅谷，在全球50多个国家设有分支机构，员工超过10万人，年营收超过500亿美元。'),\n            ('TechStart Innovation Labs', '专注于人工智能、机器学习和区块链技术研发的创新实验室。拥有超过200名博士级研究人员，与全球顶尖大学建立了深度合作关系，已获得超过500项技术专利。'),\n            ('Global Financial Services', '提供全方位数字银行服务的金融科技公司，包括移动支付、在线贷款、投资理财等服务。服务覆盖全球180个国家和地区，注册用户超过5亿，日均交易额超过100亿美元。'),\n            ('HealthCare Plus Medical', '医疗信息化解决方案提供商，专注于电子病历系统、医院信息管理系统和远程医疗平台开发。产品已部署在全球3000多家医疗机构，服务超过1亿患者。'),\n            ('E-Commerce Mega Platform', '亚太地区最大的电子商务平台之一，提供 B2B、B2C 和 C2C 多种交易模式。平台入驻商家超过500万，SKU数量超过10亿，日均订单量超过5000万单。'),\n            ('Smart City Infrastructure', '智慧城市基础设施解决方案提供商，专注于物联网传感器网络、智能交通系统、城市大脑平台开发。已在全球100多个城市部署智慧城市解决方案，管理超过1000万个IoT设备。'),\n            ('Educational Technology', '在线教育技术联盟，提供 K-12 和高等教育在线学习平台。平台拥有超过10万门课程，注册学员超过1亿人，与全球500多所知名大学建立了合作关系。'),\n            ('Green Energy Solutions', '可再生能源管理系统提供商，专注于太阳能、风能发电站的监控、调度和优化管理。管理的清洁能源装机容量超过100GW，每年减少碳排放超过5000万吨。'),\n            ('CyberSec Defense Corp', '网络安全防御公司，提供渗透测试、漏洞评估和安全咨询服务。拥有超过1000名认证安全专家，服务全球500强企业中的300多家，年处理安全事件超过100万起。'),\n            ('CloudNative Systems', '云原生系统开发商，专注于 Kubernetes、微服务架构和 DevOps 工具链。产品被全球超过10万家企业采用，管理的容器实例超过1亿个，是CNCF的核心贡献者。'),\n            ('DataFlow Analytics', '大数据分析平台，提供实时数据处理、商业智能和预测分析服务。平台日处理数据量超过100PB，支持超过1000种数据源接入，服务全球5000多家企业客户。'),\n            ('MobileFirst Technologies', '移动优先技术公司，专注于 iOS/Android 应用开发和跨平台解决方案。已开发超过5000款移动应用，累计下载量超过50亿次，月活跃用户超过10亿。'),\n            ('Quantum Computing Research', '量子计算研究机构，致力于量子算法、量子纠错和量子网络的前沿研究。拥有全球最先进的量子计算机之一，已实现1000+量子比特的稳定运算。'),\n            ('Autonomous Vehicles Corp', '自动驾驶技术公司，专注于L4/L5级别自动驾驶系统研发。测试车队已累计行驶超过1亿公里，在全球20个城市开展商业化运营。'),\n            ('Biotech Innovations', '生物技术创新企业，专注于基因编辑、细胞治疗和精准医疗。拥有超过100项生物技术专利，多款创新药物已进入临床试验阶段。'),\n            ('Space Technology Systems', '航天技术系统公司，提供卫星通信、遥感数据和太空探索服务。已成功发射超过500颗卫星，建立了覆盖全球的低轨卫星互联网星座。'),\n        ]\n        \n        divisions = ['Global Division', 'Asia Pacific', 'EMEA Region', 'Americas', 'R&D Center', 'Digital Platform', \n                     'Cloud Services', 'Security Team', 'Innovation Lab', 'Enterprise Solutions', 'Consumer Products',\n                     'Infrastructure Services', 'Data Analytics', 'AI Research', 'Mobile Development', 'DevOps Platform']\n        \n        # 随机选择 15-20 个组织\n        num_orgs = random.randint(15, 20)\n        selected = random.sample(org_templates, min(num_orgs, len(org_templates)))\n        \n        ids = []\n        for name_base, _ in selected:\n            division = random.choice(divisions)\n            name = f'{name_base} - {division} ({suffix})'\n            # 生成固定 300 长度的描述\n            desc = generate_fixed_length_text(length=300, text_type='organization')\n            cur.execute(\"\"\"\n                INSERT INTO organization (name, description, created_at, deleted_at)\n                VALUES (%s, %s, NOW() - INTERVAL '%s days', NULL)\n                ON CONFLICT DO NOTHING\n                RETURNING id\n            \"\"\", (name, desc, random.randint(0, 365)))\n            row = cur.fetchone()\n            if row:\n                ids.append(row[0])\n                \n        print(f\"  ✓ 创建了 {len(ids)} 个组织\\n\")\n        return ids\n\n\n    def create_targets(self, org_ids: list) -> list:\n        \"\"\"创建扫描目标\"\"\"\n        print(\"🎯 创建扫描目标...\")\n        cur = self.conn.cursor()\n        \n        suffix = random.randint(1000, 9999)\n        \n        # 超长域名生成，目标 200 字符左右\n        # 格式: {env}-{region}-{service}-{version}.{subdomain}.{company}-{project}-{team}-{suffix}.{domain}{tld}\n        envs = ['production', 'staging', 'development', 'testing', 'integration', 'performance', 'security-audit']\n        regions = ['us-east-1', 'us-west-2', 'eu-central-1', 'ap-southeast-1', 'ap-northeast-1', 'sa-east-1', 'eu-west-3']\n        services = ['api-gateway', 'authentication-service', 'user-management', 'payment-processing', 'notification-center', 'analytics-engine', 'content-delivery', 'search-indexer']\n        versions = ['v1', 'v2', 'v3', 'v2-beta', 'v3-alpha', 'v1-legacy', 'v2-stable']\n        subdomains = ['internal-services', 'external-facing', 'partner-integration', 'customer-portal', 'admin-dashboard', 'developer-tools', 'monitoring-system']\n        companies = ['acme-corporation-international', 'techstart-innovation-labs', 'globalfinance-services-group', 'healthcare-plus-medical-systems', 'ecommerce-platform-solutions', 'smartcity-infrastructure-development', 'cybersecurity-defense-corporation', 'cloudnative-enterprise-systems']\n        projects = ['digital-transformation-initiative', 'cloud-migration-project', 'security-enhancement-program', 'customer-experience-platform', 'data-analytics-modernization', 'infrastructure-automation-suite']\n        teams = ['engineering-team-alpha', 'devops-squad-bravo', 'security-team-charlie', 'platform-team-delta', 'infrastructure-team-echo']\n        domains = ['enterprise', 'platform', 'services', 'solutions', 'systems']\n        tlds = ['.com', '.io', '.net', '.org', '.dev', '.app', '.cloud', '.tech', '.systems']\n        \n        ids = []\n        \n        # 随机生成 100-150 个域名目标\n        num_domains = random.randint(100, 150)\n        used_domains = set()\n        \n        for i in range(num_domains):\n            env = random.choice(envs)\n            region = random.choice(regions)\n            service = random.choice(services)\n            version = random.choice(versions)\n            subdomain = random.choice(subdomains)\n            company = random.choice(companies)\n            project = random.choice(projects)\n            team = random.choice(teams)\n            domain_name = random.choice(domains)\n            tld = random.choice(tlds)\n            # 生成超长域名，约 150-200 字符\n            domain = f'{env}-{region}-{service}-{version}.{subdomain}.{company}-{project}-{team}-{suffix}.{domain_name}{tld}'\n            \n            if domain in used_domains:\n                continue\n            used_domains.add(domain)\n            \n            cur.execute(\"\"\"\n                INSERT INTO target (name, type, created_at, last_scanned_at, deleted_at)\n                VALUES (%s, 'domain', NOW() - INTERVAL '%s days', NOW() - INTERVAL '%s days', NULL)\n                ON CONFLICT DO NOTHING\n                RETURNING id\n            \"\"\", (domain, random.randint(30, 365), random.randint(0, 30)))\n            row = cur.fetchone()\n            if row:\n                ids.append(row[0])\n                # 随机关联到组织\n                if org_ids:\n                    # 20% 概率关联多个组织(3-5个)，50% 概率关联1个组织，30% 不关联\n                    rand_val = random.random()\n                    if rand_val < 0.2:\n                        # 关联多个组织 (3-5个)\n                        num_orgs = min(random.randint(3, 5), len(org_ids))\n                        selected_orgs = random.sample(org_ids, num_orgs)\n                        for org_id in selected_orgs:\n                            cur.execute(\"\"\"\n                                INSERT INTO organization_targets (organization_id, target_id)\n                                VALUES (%s, %s)\n                                ON CONFLICT DO NOTHING\n                            \"\"\", (org_id, row[0]))\n                    elif rand_val < 0.7:\n                        # 关联1个组织\n                        org_id = random.choice(org_ids)\n                        cur.execute(\"\"\"\n                            INSERT INTO organization_targets (organization_id, target_id)\n                            VALUES (%s, %s)\n                            ON CONFLICT DO NOTHING\n                        \"\"\", (org_id, row[0]))\n        \n        # 随机生成 50-80 个 IP 目标\n        num_ips = random.randint(50, 80)\n        for _ in range(num_ips):\n            # 使用文档保留的 IP 范围\n            ip_ranges = [\n                (203, 0, 113),   # TEST-NET-3\n                (198, 51, 100),  # TEST-NET-2\n                (192, 0, 2),     # TEST-NET-1\n            ]\n            base = random.choice(ip_ranges)\n            ip = f'{base[0]}.{base[1]}.{base[2]}.{random.randint(1, 254)}'\n            \n            cur.execute(\"\"\"\n                INSERT INTO target (name, type, created_at, last_scanned_at, deleted_at)\n                VALUES (%s, 'ip', NOW() - INTERVAL '%s days', NOW() - INTERVAL '%s days', NULL)\n                ON CONFLICT DO NOTHING\n                RETURNING id\n            \"\"\", (ip, random.randint(30, 365), random.randint(0, 30)))\n            row = cur.fetchone()\n            if row:\n                ids.append(row[0])\n        \n        # 随机生成 30-50 个 CIDR 目标\n        num_cidrs = random.randint(30, 50)\n        cidr_bases = ['10.0', '172.16', '172.17', '172.18', '192.168']\n        for _ in range(num_cidrs):\n            base = random.choice(cidr_bases)\n            third_octet = random.randint(0, 255)\n            mask = random.choice([24, 25, 26, 27, 28])\n            cidr = f'{base}.{third_octet}.0/{mask}'\n            \n            cur.execute(\"\"\"\n                INSERT INTO target (name, type, created_at, last_scanned_at, deleted_at)\n                VALUES (%s, 'cidr', NOW() - INTERVAL '%s days', NOW() - INTERVAL '%s days', NULL)\n                ON CONFLICT DO NOTHING\n                RETURNING id\n            \"\"\", (cidr, random.randint(30, 365), random.randint(0, 30)))\n            row = cur.fetchone()\n            if row:\n                ids.append(row[0])\n                \n        print(f\"  ✓ 创建了 {len(ids)} 个扫描目标\\n\")\n        return ids\n\n    def create_scans(self, target_ids: list, engine_ids: list, worker_ids: list) -> list:\n        \"\"\"创建扫描任务\"\"\"\n        print(\"🔍 创建扫描任务...\")\n        cur = self.conn.cursor()\n        \n        if not target_ids or not engine_ids:\n            print(\"  ⚠ 缺少目标或引擎，跳过\\n\")\n            return []\n        \n        statuses = ['cancelled', 'completed', 'failed', 'initiated', 'running']\n        status_weights = [0.05, 0.6, 0.1, 0.1, 0.15]  # completed 占比最高\n        stages = ['subdomain_discovery', 'port_scanning', 'web_discovery', 'vulnerability_scanning', 'directory_bruteforce', 'endpoint_discovery']\n        \n        error_messages = [\n            'Connection timeout while scanning target. Please check network connectivity.',\n            'DNS resolution failed for target domain.',\n            'Rate limit exceeded. Scan paused and will resume automatically.',\n            'Worker node disconnected during scan execution.',\n            'Insufficient disk space on worker node.',\n            'Target returned too many errors, scan aborted.',\n            'Authentication failed for protected resources.',\n        ]\n        \n        # 获取引擎名称映射\n        cur.execute(\"SELECT id, name FROM scan_engine WHERE id = ANY(%s)\", (engine_ids,))\n        engine_name_map = {row[0]: row[1] for row in cur.fetchall()}\n        \n        ids = []\n        # 随机选择目标数量 - 增加到 80-120 个\n        num_targets = min(random.randint(80, 120), len(target_ids))\n        selected_targets = random.sample(target_ids, num_targets)\n        \n        for target_id in selected_targets:\n            # 每个目标随机 3-15 个扫描任务\n            num_scans = random.randint(3, 15)\n            for _ in range(num_scans):\n                status = random.choices(statuses, weights=status_weights)[0]\n                # 随机选择 1-3 个引擎\n                num_engines = random.randint(1, min(3, len(engine_ids)))\n                selected_engine_ids = random.sample(engine_ids, num_engines)\n                selected_engine_names = [engine_name_map.get(eid, f'Engine-{eid}') for eid in selected_engine_ids]\n                worker_id = random.choice(worker_ids) if worker_ids else None\n                \n                progress = random.randint(10, 95) if status == 'running' else (100 if status == 'completed' else random.randint(0, 50))\n                stage = random.choice(stages) if status == 'running' else ''\n                error_msg = random.choice(error_messages) if status == 'failed' else ''\n                \n                # 随机生成更真实的统计数据\n                subdomains = random.randint(50, 2000)\n                websites = random.randint(10, 500)\n                endpoints = random.randint(100, 5000)\n                ips = random.randint(20, 300)\n                directories = random.randint(200, 8000)\n                vulns_critical = random.randint(0, 20)\n                vulns_high = random.randint(0, 50)\n                vulns_medium = random.randint(0, 100)\n                vulns_low = random.randint(0, 150)\n                vulns_total = vulns_critical + vulns_high + vulns_medium + vulns_low + random.randint(0, 100)  # info\n                \n                days_ago = random.randint(0, 90)\n                \n                cur.execute(\"\"\"\n                    INSERT INTO scan (\n                        target_id, engine_ids, engine_names, yaml_configuration, status, worker_id, progress, current_stage,\n                        results_dir, error_message, container_ids, stage_progress,\n                        cached_subdomains_count, cached_websites_count, cached_endpoints_count,\n                        cached_ips_count, cached_directories_count, cached_screenshots_count, cached_vulns_total,\n                        cached_vulns_critical, cached_vulns_high, cached_vulns_medium, cached_vulns_low,\n                        created_at, stopped_at, deleted_at\n                    ) VALUES (\n                        %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,\n                        %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,\n                        NOW() - INTERVAL '%s days', %s, NULL\n                    )\n                    RETURNING id\n                \"\"\", (\n                    target_id, selected_engine_ids, json.dumps(selected_engine_names), '', status, worker_id, progress, stage,\n                    f'/app/results/scan_{target_id}_{random.randint(1000, 9999)}', error_msg, '{}', '{}',\n                    subdomains, websites, endpoints, ips, directories, 0, vulns_total,\n                    vulns_critical, vulns_high, vulns_medium, vulns_low,\n                    days_ago,\n                    datetime.now() - timedelta(days=days_ago, hours=random.randint(0, 23)) if status in ['completed', 'failed', 'cancelled'] else None\n                ))\n                row = cur.fetchone()\n                if row:\n                    ids.append(row[0])\n                    \n        print(f\"  ✓ 创建了 {len(ids)} 个扫描任务\\n\")\n        return ids\n\n    def create_scheduled_scans(self, org_ids: list, target_ids: list, engine_ids: list):\n        \"\"\"创建定时扫描任务\"\"\"\n        print(\"⏰ 创建定时扫描任务...\")\n        cur = self.conn.cursor()\n        \n        if not engine_ids:\n            print(\"  ⚠ 缺少引擎，跳过\\n\")\n            return\n        \n        suffix = random.randint(1000, 9999)\n        \n        schedule_templates = [\n            ('Daily-Full-Security-Assessment-Enterprise-Wide-Comprehensive-Vulnerability-Detection', '0 {hour} * * *'),\n            ('Weekly-Vulnerability-Scan-Critical-Infrastructure-Protection-Program', '0 {hour} * * {dow}'),\n            ('Monthly-Penetration-Testing-External-Attack-Surface-Management', '0 {hour} {dom} * *'),\n            ('Hourly-Quick-Reconnaissance-Real-Time-Threat-Intelligence-Gathering', '{min} * * * *'),\n            ('Bi-Weekly-Compliance-Check-Regulatory-Standards-Verification-Audit', '0 {hour} 1,15 * *'),\n            ('Quarterly-Infrastructure-Audit-Network-Security-Posture-Assessment', '0 {hour} 1 1,4,7,10 *'),\n            ('Daily-API-Security-Scan-RESTful-GraphQL-Endpoint-Protection', '{min} {hour} * * *'),\n            ('Weekly-Web-Application-Scan-OWASP-Top-10-Vulnerability-Detection', '0 {hour} * * {dow}'),\n            ('Nightly-Asset-Discovery-Shadow-IT-Detection-Inventory-Management', '0 {hour} * * *'),\n            ('Weekend-Deep-Scan-Intensive-Security-Analysis-Full-Coverage', '0 {hour} * * 0,6'),\n            ('Business-Hours-Monitor-Real-Time-Security-Event-Detection-Response', '0 9-17 * * 1-5'),\n            ('Off-Hours-Intensive-Scan-Low-Impact-Comprehensive-Assessment', '0 {hour} * * *'),\n            ('Continuous-Monitoring-Zero-Day-Vulnerability-Detection-System', '{min} * * * *'),\n            ('Cloud-Infrastructure-Security-Assessment-AWS-Azure-GCP-Multi-Cloud', '0 {hour} * * *'),\n            ('Container-Security-Scan-Kubernetes-Docker-Image-Vulnerability-Check', '0 {hour} * * {dow}'),\n            ('Database-Security-Audit-SQL-Injection-Data-Exposure-Prevention', '0 {hour} {dom} * *'),\n            ('Network-Perimeter-Scan-Firewall-Configuration-Compliance-Check', '0 {hour} * * *'),\n            ('SSL-TLS-Certificate-Monitoring-Expiration-Vulnerability-Detection', '0 {hour} * * *'),\n            ('DNS-Security-Assessment-Zone-Transfer-Subdomain-Takeover-Check', '0 {hour} * * {dow}'),\n            ('Email-Security-Scan-SPF-DKIM-DMARC-Configuration-Verification', '0 {hour} {dom} * *'),\n            ('Mobile-Application-Security-Testing-iOS-Android-API-Assessment', '0 {hour} * * *'),\n            ('IoT-Device-Security-Scan-Firmware-Vulnerability-Network-Exposure', '0 {hour} * * {dow}'),\n            ('Third-Party-Risk-Assessment-Vendor-Security-Posture-Evaluation', '0 {hour} 1 * *'),\n            ('Incident-Response-Readiness-Security-Control-Effectiveness-Test', '0 {hour} 15 * *'),\n            ('Ransomware-Prevention-Scan-Backup-Integrity-Recovery-Verification', '0 {hour} * * *'),\n        ]\n        \n        # 随机选择 40-50 个定时任务\n        num_schedules = random.randint(40, 50)\n        selected = random.sample(schedule_templates, min(num_schedules, len(schedule_templates)))\n        \n        # 获取引擎名称映射\n        cur.execute(\"SELECT id, name FROM scan_engine WHERE id = ANY(%s)\", (engine_ids,))\n        engine_name_map = {row[0]: row[1] for row in cur.fetchall()}\n        \n        count = 0\n        for name_base, cron_template in selected:\n            name = f'{name_base}-{suffix}-{count:02d}'\n            cron = cron_template.format(\n                hour=random.randint(0, 23),\n                min=random.randint(0, 59),\n                dow=random.randint(0, 6),\n                dom=random.randint(1, 28)\n            )\n            enabled = random.random() > 0.3  # 70% 启用\n            \n            # 随机选择 1-3 个引擎\n            num_engines = random.randint(1, min(3, len(engine_ids)))\n            selected_engine_ids = random.sample(engine_ids, num_engines)\n            selected_engine_names = [engine_name_map.get(eid, f'Engine-{eid}') for eid in selected_engine_ids]\n            \n            # 随机决定关联组织还是目标\n            if org_ids and target_ids:\n                if random.random() > 0.5:\n                    org_id = random.choice(org_ids)\n                    target_id = None\n                else:\n                    org_id = None\n                    target_id = random.choice(target_ids)\n            elif org_ids:\n                org_id = random.choice(org_ids)\n                target_id = None\n            elif target_ids:\n                org_id = None\n                target_id = random.choice(target_ids)\n            else:\n                org_id = None\n                target_id = None\n            \n            run_count = random.randint(0, 200)\n            has_run = random.random() > 0.2  # 80% 已运行过\n            \n            cur.execute(\"\"\"\n                INSERT INTO scheduled_scan (\n                    name, engine_ids, engine_names, yaml_configuration, organization_id, target_id, cron_expression, is_enabled,\n                    run_count, last_run_time, next_run_time, created_at, updated_at\n                ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, NOW() - INTERVAL '%s days', NOW())\n                ON CONFLICT DO NOTHING\n            \"\"\", (\n                name, selected_engine_ids, json.dumps(selected_engine_names), '', org_id, target_id, cron, enabled,\n                run_count if has_run else 0,\n                datetime.now() - timedelta(days=random.randint(0, 14), hours=random.randint(0, 23)) if has_run else None,\n                datetime.now() + timedelta(hours=random.randint(1, 336))  # 最多 2 周后\n            , random.randint(30, 180)))\n            count += 1\n            \n        print(f\"  ✓ 创建了 {count} 个定时扫描任务\\n\")\n\n\n    def create_subdomains(self, target_ids: list):\n        \"\"\"创建子域名\"\"\"\n        print(\"🌐 创建子域名...\")\n        cur = self.conn.cursor()\n        \n        prefixes = [\n            # 基础服务\n            'api', 'admin', 'portal', 'dashboard', 'app', 'mobile', 'staging', 'dev',\n            'test', 'qa', 'uat', 'beta', 'alpha', 'demo', 'sandbox', 'internal',\n            'secure', 'auth', 'login', 'sso', 'oauth', 'identity', 'accounts',\n            'mail', 'smtp', 'imap', 'webmail', 'ftp', 'sftp', 'files', 'storage',\n            'cdn', 'static', 'assets', 'media', 'db', 'database', 'mysql', 'postgres',\n            'redis', 'mongo', 'elastic', 'vpn', 'remote', 'gateway', 'proxy',\n            'monitoring', 'metrics', 'grafana', 'prometheus', 'kibana', 'logs',\n            'jenkins', 'ci', 'cd', 'gitlab', 'jira', 'confluence', 'kubernetes', 'k8s',\n            'www', 'www2', 'www3', 'ns1', 'ns2', 'mx', 'mx1', 'mx2', 'autodiscover',\n            'webdisk', 'cpanel', 'whm', 'webmail2', 'email', 'smtp2', 'pop', 'pop3',\n            'imap2', 'calendar', 'contacts', 'drive', 'docs', 'sheets', 'slides',\n            'meet', 'chat', 'teams', 'slack', 'discord', 'zoom', 'video', 'stream',\n            'blog', 'news', 'press', 'media2', 'images', 'img', 'photos', 'video2',\n            'shop', 'store', 'cart', 'checkout', 'pay', 'payment', 'billing', 'invoice',\n            'support', 'help', 'helpdesk', 'ticket', 'tickets', 'status', 'health',\n            'api-v1', 'api-v2', 'api-v3', 'graphql', 'rest', 'soap', 'rpc', 'grpc',\n            # 扩展服务\n            'analytics', 'reporting', 'bi', 'data', 'warehouse', 'etl', 'pipeline',\n            'ml', 'ai', 'inference', 'training', 'model', 'prediction', 'recommendation',\n            'search', 'solr', 'elasticsearch', 'opensearch', 'algolia', 'typesense',\n            'cache', 'memcached', 'varnish', 'haproxy', 'loadbalancer', 'nginx-lb',\n            'queue', 'rabbitmq', 'kafka', 'pulsar', 'nats', 'activemq', 'sqs',\n            'workflow', 'airflow', 'prefect', 'dagster', 'temporal', 'conductor',\n            'registry', 'harbor', 'nexus', 'artifactory', 'pypi', 'npm-registry',\n            'vault', 'secrets', 'keycloak', 'okta', 'auth0', 'cognito', 'firebase-auth',\n            'notification', 'push', 'websocket', 'socket', 'realtime', 'pubsub',\n            'backup', 'archive', 'snapshot', 'restore', 'disaster-recovery', 'dr',\n            'audit', 'compliance', 'security', 'waf', 'firewall', 'ids', 'ips',\n            'tracing', 'jaeger', 'zipkin', 'tempo', 'honeycomb', 'lightstep',\n            'config', 'consul', 'etcd', 'zookeeper', 'nacos', 'apollo-config',\n            'service-mesh', 'istio', 'linkerd', 'envoy', 'traefik', 'kong',\n        ]\n        \n        # 二级前缀，用于生成更复杂的子域名\n        secondary_prefixes = ['', 'prod-', 'dev-', 'staging-', 'test-', 'int-', 'ext-', 'us-', 'eu-', 'ap-', \n                              'us-east-', 'us-west-', 'eu-central-', 'ap-southeast-', 'ap-northeast-',\n                              'primary-', 'secondary-', 'backup-', 'dr-', 'canary-', 'blue-', 'green-']\n        \n        # 获取域名目标\n        cur.execute(\"SELECT id, name FROM target WHERE type = 'domain' AND deleted_at IS NULL\")\n        domain_targets = cur.fetchall()\n        \n        count = 0\n        batch_data = []\n        for target_id, target_name in domain_targets:\n            # 每个目标随机 80-150 个子域名\n            num = random.randint(80, 150)\n            selected = random.sample(prefixes, min(num, len(prefixes)))\n            \n            for prefix in selected:\n                # 随机添加二级前缀\n                sec_prefix = random.choice(secondary_prefixes) if random.random() > 0.7 else ''\n                subdomain_name = f'{sec_prefix}{prefix}.{target_name}'\n                days_ago = random.randint(0, 90)\n                batch_data.append((subdomain_name, target_id, days_ago))\n                count += 1\n        \n        # 批量插入\n        if batch_data:\n            execute_values(cur, \"\"\"\n                INSERT INTO subdomain (name, target_id, created_at)\n                VALUES %s\n                ON CONFLICT DO NOTHING\n            \"\"\", batch_data, template=\"(%s, %s, NOW() - INTERVAL '%s days')\")\n                \n        print(f\"  ✓ 创建了 {count} 个子域名\\n\")\n\n    def create_websites(self, target_ids: list) -> list:\n        \"\"\"创建网站\"\"\"\n        print(\"🌍 创建网站...\")\n        cur = self.conn.cursor()\n        \n        titles = [\n            'Enterprise Resource Planning System - Comprehensive Dashboard | Acme Corporation International Global Operations Management Portal v3.2.1 - Integrated Business Process Automation and Real-time Analytics Platform for Enterprise-wide Resource Optimization',\n            'Customer Relationship Management Platform - Secure Login Portal | Multi-Factor Authentication Enabled - Advanced Customer Data Analytics and Sales Pipeline Management System with AI-Powered Insights and Predictive Modeling',\n            'Human Resources Information System - Employee Self Service Portal v3.2.1 | Comprehensive Payroll Benefits Time-Off Management - Performance Review Talent Acquisition Onboarding Workflow Automation Platform',\n            'Supply Chain Management - Global Logistics Tracking Dashboard | Real-time Updates - Worldwide Distribution Network Monitor with Predictive Analytics Inventory Optimization and Supplier Relationship Management',\n            'Business Intelligence Analytics - Executive Summary Report Generator | Advanced Data Visualization Decision Support System - Machine Learning Powered Predictive Analytics and Custom Dashboard Builder',\n            'Content Management System - Admin Panel | Headless CMS API Gateway - Multi-tenant Enterprise Publishing Platform with Workflow Automation Digital Asset Management and Multi-language Support',\n            'Project Management Collaboration Tools - Team Workspace | Agile Board - Sprint Planning Resource Allocation Time Tracking Budget Management Gantt Charts Kanban Boards and Team Communication Hub',\n            'E-Commerce Platform - Product Catalog Management | Inventory Control - Order Processing Fulfillment System with Multi-channel Sales Integration Payment Gateway and Customer Analytics Dashboard',\n            'Financial Trading Platform - Real-time Market Data Dashboard | Portfolio Management Risk Analysis System - Algorithmic Trading Support Technical Analysis Tools and Regulatory Compliance Reporting',\n            'Healthcare Patient Management System - Electronic Health Records | HIPAA Compliant Medical Information Portal - Appointment Scheduling Prescription Management Lab Results Integration and Telemedicine Support',\n        ]\n        \n        webservers = ['nginx/1.24.0', 'nginx/1.25.3', 'nginx/1.26.0', 'Apache/2.4.57', 'Apache/2.4.58', 'Apache/2.4.59', \n                      'Microsoft-IIS/10.0', 'Microsoft-IIS/8.5', 'Microsoft-IIS/7.5', 'cloudflare', \n                      'gunicorn/21.2.0', 'gunicorn/22.0.0', 'gunicorn/23.0.0', 'uvicorn/0.24.0', 'uvicorn/0.25.0',\n                      'Caddy/2.7.5', 'Caddy/2.8.0', 'LiteSpeed', 'LiteSpeed/6.1', 'OpenResty/1.21.4', 'OpenResty/1.25.3',\n                      'Tomcat/10.1.15', 'Tomcat/9.0.83', 'Jetty/11.0.18', 'Jetty/12.0.5', 'WildFly/30.0.0',\n                      'Kestrel', 'Puma/6.4.0', 'Unicorn/6.1.0', 'Passenger/6.0.18', 'Waitress/2.1.2',\n                      'Hypercorn/0.16.0', 'Daphne/4.0.0', 'Twisted/23.10.0', 'CherryPy/18.9.0']\n        tech_stacks = [\n            ['React 18.2.0', 'React Router 6.21', 'Redux Toolkit 2.0', 'RTK Query', 'Node.js 20.10 LTS', 'Express 4.18.2', 'MongoDB 7.0.4', 'Mongoose 8.0', 'Redis 7.2.3', 'Bull Queue 4.12', 'Nginx 1.25.3', 'Docker 24.0', 'Kubernetes 1.28.4', 'Helm 3.13', 'Prometheus 2.48', 'Grafana 10.2'],\n            ['Vue.js 3.4.5', 'Vuex 4.1', 'Vue Router 4.2', 'Pinia 2.1', 'Nuxt 3.9.0', 'Django 5.0.1', 'Django REST Framework 3.14', 'PostgreSQL 16.1', 'Celery 5.3.6', 'RabbitMQ 3.12.10', 'Gunicorn 21.2', 'Nginx 1.25', 'Docker Compose', 'Prometheus', 'Grafana', 'Sentry'],\n            ['Angular 17.1.0', 'NgRx 17.0', 'RxJS 7.8', 'Angular Material 17', 'Spring Boot 3.2.1', 'Spring Security 6.2', 'Spring Data JPA', 'MySQL 8.2.0', 'Elasticsearch 8.11.3', 'Apache Kafka 3.6.1', 'Grafana 10.2', 'Jenkins 2.426', 'SonarQube 10.3', 'JUnit 5.10', 'Mockito 5.8'],\n            ['Next.js 14.0.4', 'React 18.2', 'TypeScript 5.3', 'Tailwind CSS 3.4', 'FastAPI 0.109.0', 'Pydantic 2.5', 'SQLAlchemy 2.0', 'Redis 7.2', 'PostgreSQL 16', 'Docker 24.0', 'Kubernetes 1.28', 'Istio 1.20', 'ArgoCD 2.9', 'Prometheus', 'Grafana', 'Jaeger'],\n            ['Svelte 4.2.8', 'SvelteKit 2.0.6', 'TypeScript 5.3', 'Tailwind CSS 3.4', 'Go 1.21.5', 'Gin 1.9', 'GORM 1.25', 'CockroachDB 23.2', 'NATS 2.10.7', 'Traefik 3.0', 'Consul 1.17', 'Vault 1.15', 'Terraform 1.6', 'Prometheus', 'Grafana', 'Loki'],\n            ['React 18.2.0', 'NestJS 10.3.0', 'TypeORM 0.3.17', 'GraphQL 16.8', 'Apollo Server 4.10', 'PostgreSQL 16.1', 'Bull 4.12', 'Redis 7.2.3', 'Swagger 7.1', 'Jest 29.7', 'Supertest 6.3', 'Docker', 'Kubernetes', 'Helm', 'ArgoCD', 'Datadog'],\n            ['Vue.js 3.4.5', 'Inertia.js 1.0', 'Laravel 10.40', 'PHP 8.3', 'MySQL 8.2', 'Redis 7.2', 'Laravel Horizon 5.21', 'Laravel Telescope', 'Nginx 1.25', 'Vite 5.0', 'PHPUnit 10.5', 'Pest 2.28', 'Docker', 'GitHub Actions', 'Sentry', 'New Relic'],\n            ['Angular 17.1', 'NgRx 17.0', '.NET 8.0', 'Entity Framework Core 8.0', 'ASP.NET Core 8.0', 'SQL Server 2022', 'Azure Service Bus', 'Azure Functions', 'IIS 10', 'SignalR 8.0', 'xUnit 2.6', 'Moq 4.20', 'Azure DevOps', 'Application Insights', 'Azure Monitor'],\n        ]\n        \n        # 真实的 body preview 内容\n        response_bodies = [\n            '<!DOCTYPE html><html lang=\"en\"><head><meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><title>Login - Enterprise Portal</title><link rel=\"stylesheet\" href=\"/assets/css/main.css\"></head><body><div id=\"app\"></div><script src=\"/assets/js/bundle.js\"></script></body></html>',\n            '<!DOCTYPE html><html><head><title>Dashboard</title><meta name=\"description\" content=\"Enterprise management dashboard for monitoring and analytics\"><link rel=\"icon\" href=\"/favicon.ico\"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id=\"root\"></div></body></html>',\n            '{\"status\":\"ok\",\"version\":\"2.4.1\",\"environment\":\"production\",\"timestamp\":\"2024-12-22T10:30:00Z\",\"services\":{\"database\":\"healthy\",\"cache\":\"healthy\",\"queue\":\"healthy\"},\"uptime\":864000}',\n            '<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>403 Forbidden</title></head><body><h1>403 Forbidden</h1><p>You don\\'t have permission to access this resource. Please contact the administrator if you believe this is an error.</p><hr><address>nginx/1.24.0</address></body></html>',\n            '<!DOCTYPE html><html lang=\"zh-CN\"><head><meta charset=\"UTF-8\"><title>系统维护中</title><style>body{font-family:Arial,sans-serif;text-align:center;padding:50px;}</style></head><body><h1>系统正在维护中</h1><p>预计恢复时间：2024-12-23 08:00</p></body></html>',\n            '{\"error\":\"Unauthorized\",\"message\":\"Invalid or expired authentication token. Please login again.\",\"code\":\"AUTH_001\",\"timestamp\":\"2024-12-22T15:45:30.123Z\",\"path\":\"/api/v1/users/profile\"}',\n            '<!DOCTYPE html><html><head><title>Welcome to nginx!</title><style>body{width:35em;margin:0 auto;font-family:Tahoma,Verdana,Arial,sans-serif;}</style></head><body><h1>Welcome to nginx!</h1><p>If you see this page, the nginx web server is successfully installed and working.</p></body></html>',\n            '<?xml version=\"1.0\" encoding=\"UTF-8\"?><error><code>500</code><message>Internal Server Error</message><details>An unexpected error occurred while processing your request. Please try again later or contact support.</details><requestId>req_abc123xyz789</requestId></error>',\n            '<!DOCTYPE html><html><head><meta http-equiv=\"refresh\" content=\"0;url=https://login.example.com/sso\"><title>Redirecting...</title></head><body><p>Redirecting to login page...</p><a href=\"https://login.example.com/sso\">Click here if not redirected</a></body></html>',\n            '{\"data\":{\"user\":{\"id\":12345,\"username\":\"admin\",\"email\":\"admin@example.com\",\"role\":\"administrator\",\"lastLogin\":\"2024-12-21T18:30:00Z\",\"permissions\":[\"read\",\"write\",\"delete\",\"admin\"]},\"token\":\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\"}}',\n            '<!DOCTYPE html><html><head><title>API Documentation - Swagger UI</title><link rel=\"stylesheet\" type=\"text/css\" href=\"/swagger-ui.css\"><link rel=\"icon\" type=\"image/png\" href=\"/favicon-32x32.png\"></head><body><div id=\"swagger-ui\"></div><script src=\"/swagger-ui-bundle.js\"></script></body></html>',\n            '{\"openapi\":\"3.0.3\",\"info\":{\"title\":\"Enterprise API\",\"description\":\"RESTful API for enterprise resource management\",\"version\":\"1.0.0\",\"contact\":{\"email\":\"api-support@example.com\"}},\"servers\":[{\"url\":\"https://api.example.com/v1\"}]}',\n            '<!DOCTYPE html><html><head><title>404 Not Found</title><style>*{margin:0;padding:0;}body{background:#f1f1f1;font-family:Arial;}.container{max-width:600px;margin:100px auto;text-align:center;}</style></head><body><div class=\"container\"><h1>404</h1><p>Page not found</p></div></body></html>',\n            'PING OK - Packet loss = 0%, RTA = 0.45 ms|rta=0.450000ms;100.000000;500.000000;0.000000 pl=0%;20;60;0',\n            '{\"metrics\":{\"requests_total\":1234567,\"requests_per_second\":450.5,\"avg_response_time_ms\":23.4,\"error_rate\":0.02,\"active_connections\":1250,\"memory_usage_mb\":2048,\"cpu_usage_percent\":45.6}}',\n            '<!DOCTYPE html><html><head><title>Under Construction</title></head><body style=\"background:#000;color:#0f0;font-family:monospace;padding:20px;\"><pre>  _   _           _             ____                _                   _   _             \\n | | | |_ __   __| | ___ _ __  / ___|___  _ __  ___| |_ _ __ _   _  ___| |_(_) ___  _ __  \\n | | | | \\'_ \\\\ / _` |/ _ \\\\ \\'__|| |   / _ \\\\| \\'_ \\\\/ __| __| \\'__| | | |/ __| __| |/ _ \\\\| \\'_ \\\\ \\n | |_| | | | | (_| |  __/ |   | |__| (_) | | | \\\\__ \\\\ |_| |  | |_| | (__| |_| | (_) | | | |\\n  \\\\___/|_| |_|\\\\__,_|\\\\___|_|    \\\\____\\\\___/|_| |_|___/\\\\__|_|   \\\\__,_|\\\\___|\\\\__|_|\\\\___/|_| |_|\\n</pre><p>Coming Soon...</p></body></html>',\n            '{\"success\":false,\"error\":{\"type\":\"ValidationError\",\"message\":\"Request validation failed\",\"details\":[{\"field\":\"email\",\"message\":\"Invalid email format\"},{\"field\":\"password\",\"message\":\"Password must be at least 8 characters\"}]}}',\n            'Server: Apache/2.4.57 (Ubuntu)\\nX-Powered-By: PHP/8.2.0\\nContent-Type: text/html; charset=UTF-8\\nSet-Cookie: PHPSESSID=abc123; path=/; HttpOnly; Secure\\n\\n<!DOCTYPE html><html><head><title>phpinfo()</title></head><body>PHP Version 8.2.0</body></html>',\n        ]\n        \n        # 获取域名目标\n        cur.execute(\"SELECT id, name FROM target WHERE type = 'domain' AND deleted_at IS NULL LIMIT 80\")\n        domain_targets = cur.fetchall()\n        \n        batch_data = []\n        for target_id, target_name in domain_targets:\n            for i in range(random.randint(15, 30)):\n                # 生成固定 245 长度的 URL\n                url = generate_fixed_length_url(target_name, length=245, path_hint=f'website/{i:04d}')\n                \n                # 生成模拟的响应头数据\n                response_headers = {\n                    'server': random.choice(['nginx', 'Apache', 'cloudflare', 'Microsoft-IIS/10.0']),\n                    'content_type': 'text/html; charset=utf-8',\n                    'x_powered_by': random.choice(['PHP/8.2', 'ASP.NET', 'Express', None]),\n                    'x_frame_options': random.choice(['DENY', 'SAMEORIGIN', None]),\n                    'strict_transport_security': 'max-age=31536000; includeSubDomains' if random.choice([True, False]) else None,\n                    'set_cookie': f'session={random.randint(100000, 999999)}; HttpOnly; Secure' if random.choice([True, False]) else None,\n                }\n                # 移除 None 值\n                response_headers = {k: v for k, v in response_headers.items() if v is not None}\n                \n                batch_data.append((\n                    url, target_id, target_name, random.choice(titles),\n                    random.choice(webservers), random.choice(tech_stacks),\n                    random.choice([200, 301, 302, 403, 404]),\n                    random.randint(1000, 500000), 'text/html; charset=utf-8',\n                    f'https://{target_name}/login' if random.choice([True, False]) else '',\n                    random.choice(response_bodies),\n                    random.choice([True, False, None]),\n                    generate_raw_response_headers(response_headers)\n                ))\n        \n        # 批量插入\n        ids = []\n        if batch_data:\n            execute_values(cur, \"\"\"\n                INSERT INTO website (\n                    url, target_id, host, title, webserver, tech, status_code,\n                    content_length, content_type, location, response_body, vhost,\n                    response_headers, created_at\n                ) VALUES %s\n                ON CONFLICT DO NOTHING\n                RETURNING id\n            \"\"\", batch_data, template=\"(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, NOW())\")\n            ids = [row[0] for row in cur.fetchall()]\n                    \n        print(f\"  ✓ 创建了 {len(batch_data)} 个网站\\n\")\n        return ids\n\n    def create_endpoints(self, target_ids: list):\n        \"\"\"创建端点\"\"\"\n        print(\"🔗 创建端点...\")\n        cur = self.conn.cursor()\n        \n        paths = [\n            '/api/v1/users/authentication/login', '/api/v1/users/authentication/logout',\n            '/api/v1/users/profile/settings/preferences', '/api/v2/products/catalog/categories/list',\n            '/api/v2/orders/checkout/payment-processing', '/api/v3/analytics/dashboard/metrics/summary',\n            '/graphql/query', '/graphql/mutation', '/admin/dashboard/overview',\n            '/admin/users/management/list', '/admin/settings/configuration/system',\n            '/portal/customer/account/billing-history', '/internal/health/readiness-check',\n            '/internal/metrics/prometheus-endpoint', '/webhook/payment/stripe/callback',\n            '/oauth/authorize', '/oauth/token', '/swagger/v1/swagger.json', '/openapi/v3/api-docs',\n            # 扩展路径\n            '/api/v1/organizations/enterprise/departments/teams/members/list',\n            '/api/v2/inventory/warehouse/locations/zones/shelves/products',\n            '/api/v3/reporting/financial/quarterly/revenue/breakdown/by-region',\n            '/admin/system/configuration/security/authentication/providers/saml',\n            '/admin/audit/logs/security/events/authentication/failures/export',\n            '/portal/enterprise/dashboard/analytics/performance/metrics/realtime',\n            '/internal/monitoring/infrastructure/kubernetes/pods/health/status',\n            '/webhook/integration/salesforce/opportunity/stage-change/notification',\n            '/api/v1/customers/enterprise/contracts/subscriptions/billing/invoices',\n            '/api/v2/shipping/carriers/fedex/tracking/packages/delivery-status',\n            '/api/v3/notifications/channels/email/templates/marketing/campaigns',\n            '/admin/content/management/pages/blog/articles/drafts/review-queue',\n            '/portal/support/tickets/priority/critical/escalation/management',\n            '/internal/jobs/scheduler/cron/tasks/execution/history/logs',\n            '/api/v1/search/elasticsearch/indices/products/documents/query',\n            '/api/v2/cache/redis/clusters/primary/keys/invalidation/batch',\n            '/api/v3/queue/rabbitmq/exchanges/notifications/bindings/routes',\n            '/admin/database/migrations/schema/versions/rollback/history',\n            '/portal/analytics/google/tag-manager/containers/tags/triggers',\n            '/internal/secrets/vault/kv/applications/credentials/rotation',\n        ]\n        \n        gf_patterns = [\n            ['debug', 'config', 'api', 'json', 'upload', 'file', 'admin', 'auth', 'secrets', 'credentials'],\n            ['backup', 'archive', 'debug', 'trace', 'log', 'error', 'exception', 'stack', 'dump', 'memory'],\n            ['api', 'rest', 'graphql', 'websocket', 'grpc', 'soap', 'xml', 'json', 'yaml', 'protobuf'],\n            ['auth', 'login', 'logout', 'session', 'token', 'jwt', 'oauth', 'saml', 'sso', 'mfa', 'otp', '2fa'],\n            ['upload', 'download', 'file', 'attachment', 'document', 'image', 'video', 'audio', 'media', 'asset'],\n            ['admin', 'dashboard', 'panel', 'console', 'management', 'settings', 'config', 'system', 'control'],\n            ['database', 'sql', 'query', 'table', 'schema', 'migration', 'backup', 'restore', 'dump', 'export'],\n            ['cache', 'redis', 'memcached', 'session', 'storage', 'temp', 'buffer', 'queue', 'message', 'event'],\n            ['security', 'vulnerability', 'exploit', 'injection', 'xss', 'csrf', 'ssrf', 'rce', 'lfi', 'sqli'],\n            ['payment', 'billing', 'invoice', 'subscription', 'checkout', 'cart', 'order', 'transaction', 'refund'],\n            ['user', 'profile', 'account', 'password', 'email', 'phone', 'address', 'preference', 'notification'],\n            ['api-key', 'secret-key', 'access-token', 'refresh-token', 'private-key', 'public-key', 'certificate'],\n            ['debug', 'trace', 'log', 'error', 'warning', 'info', 'verbose', 'metric', 'monitor', 'health'],\n            ['internal', 'private', 'restricted', 'confidential', 'sensitive', 'protected', 'secure', 'encrypted'],\n            ['test', 'staging', 'development', 'production', 'sandbox', 'demo', 'preview', 'beta', 'alpha'],\n            [],  # 空的情况\n        ]\n        \n        # 100字符长度的标题\n        titles = [\n            'Enterprise API Gateway - RESTful Service Documentation with OpenAPI 3.0 Specification and Interactive',\n            'User Authentication Service - OAuth 2.0 and SAML 2.0 Single Sign-On Integration Platform Dashboard',\n            'Payment Processing Gateway - PCI-DSS Compliant Transaction Management System Administration Panel',\n            'Content Delivery Network - Global Edge Cache Management and Real-time Analytics Dashboard Interface',\n            'Database Administration Console - PostgreSQL Cluster Management with Automated Backup and Recovery',\n            'Kubernetes Container Orchestration - Pod Deployment and Service Mesh Configuration Control Panel',\n            'Message Queue Management - RabbitMQ Exchange and Binding Configuration with Dead Letter Handling',\n            'Search Engine Administration - Elasticsearch Index Management and Query Performance Optimization',\n            'Monitoring and Alerting System - Prometheus Metrics Collection with Grafana Dashboard Integration',\n            'Security Operations Center - Vulnerability Assessment and Incident Response Management Platform',\n            'API Rate Limiting Service - Request Throttling and Quota Management with Real-time Usage Analytics',\n            'File Storage Management - S3-Compatible Object Storage with Lifecycle Policy and Access Control',\n            'Email Notification Service - SMTP Gateway with Template Management and Delivery Status Tracking',\n            'Webhook Integration Platform - Event-Driven Architecture with Retry Logic and Failure Handling',\n            'GraphQL API Playground - Interactive Query Builder with Schema Introspection and Documentation',\n        ]\n        \n        # 扩展的技术栈列表（用于生成10-20个技术）\n        all_techs = [\n            'React 18.2.0', 'Vue.js 3.4', 'Angular 17.1', 'Next.js 14.0', 'Nuxt 3.9', 'Svelte 4.2',\n            'Node.js 20.10', 'Express 4.18', 'NestJS 10.3', 'Fastify 4.25', 'Koa 2.15',\n            'Python 3.12', 'Django 5.0', 'FastAPI 0.109', 'Flask 3.0', 'Tornado 6.4',\n            'Go 1.21', 'Gin 1.9', 'Echo 4.11', 'Fiber 2.52', 'Chi 5.0',\n            'Java 21', 'Spring Boot 3.2', 'Quarkus 3.6', 'Micronaut 4.2',\n            'PostgreSQL 16.1', 'MySQL 8.2', 'MongoDB 7.0', 'Redis 7.2', 'Elasticsearch 8.11',\n            'Kubernetes 1.28', 'Docker 24.0', 'Nginx 1.25', 'Apache 2.4', 'Traefik 3.0',\n            'GraphQL 16.8', 'gRPC 1.60', 'WebSocket', 'REST API', 'OpenAPI 3.0',\n            'JWT', 'OAuth 2.0', 'SAML 2.0', 'OIDC', 'Passport.js',\n            'Webpack 5.89', 'Vite 5.0', 'esbuild 0.19', 'Rollup 4.9', 'Parcel 2.11',\n            'TypeScript 5.3', 'Tailwind CSS 3.4', 'Bootstrap 5.3', 'Material UI 5.15',\n            'Jest 29.7', 'Vitest 1.1', 'Cypress 13.6', 'Playwright 1.40',\n            'Prometheus', 'Grafana 10.2', 'Jaeger', 'Zipkin', 'OpenTelemetry',\n            'RabbitMQ 3.12', 'Kafka 3.6', 'NATS 2.10', 'Redis Streams',\n            'AWS Lambda', 'Azure Functions', 'Google Cloud Functions', 'Cloudflare Workers',\n        ]\n        \n        # 真实的 API 响应 body preview\n        response_bodies = [\n            '{\"status\":\"success\",\"data\":{\"user_id\":12345,\"username\":\"john_doe\",\"email\":\"john@example.com\",\"role\":\"user\",\"created_at\":\"2024-01-15T10:30:00Z\",\"last_login\":\"2024-12-22T08:45:00Z\"}}',\n            '{\"success\":true,\"message\":\"Authentication successful\",\"token\":\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c\",\"expires_in\":3600}',\n            '{\"error\":\"Unauthorized\",\"code\":\"AUTH_FAILED\",\"message\":\"Invalid credentials provided. Please check your username and password.\",\"timestamp\":\"2024-12-22T15:30:45.123Z\",\"request_id\":\"req_abc123xyz\"}',\n            '{\"data\":{\"products\":[{\"id\":1,\"name\":\"Enterprise License\",\"price\":999.99,\"currency\":\"USD\"},{\"id\":2,\"name\":\"Professional License\",\"price\":499.99,\"currency\":\"USD\"},{\"id\":3,\"name\":\"Basic License\",\"price\":99.99,\"currency\":\"USD\"}],\"total\":3,\"page\":1,\"per_page\":10}}',\n            '{\"health\":{\"status\":\"healthy\",\"version\":\"2.4.1\",\"uptime\":\"15d 6h 32m\",\"checks\":{\"database\":\"ok\",\"redis\":\"ok\",\"elasticsearch\":\"ok\",\"rabbitmq\":\"ok\"},\"memory\":{\"used\":\"2.1GB\",\"total\":\"8GB\"},\"cpu\":\"23%\"}}',\n            '{\"errors\":[{\"field\":\"email\",\"message\":\"Email address is already registered\"},{\"field\":\"password\",\"message\":\"Password must contain at least one uppercase letter, one number, and one special character\"}],\"code\":\"VALIDATION_ERROR\"}',\n            '{\"result\":{\"query\":\"SELECT * FROM users WHERE id = ?\",\"rows_affected\":1,\"execution_time_ms\":12,\"cached\":false},\"data\":[{\"id\":1,\"name\":\"Admin User\",\"status\":\"active\"}]}',\n            '<!DOCTYPE html><html><head><title>GraphQL Playground</title><link rel=\"stylesheet\" href=\"/graphql/playground.css\"></head><body><div id=\"root\"><div class=\"loading\">Loading GraphQL Playground...</div></div><script src=\"/graphql/playground.js\"></script></body></html>',\n            '{\"swagger\":\"2.0\",\"info\":{\"title\":\"Enterprise API\",\"description\":\"RESTful API for enterprise resource management\",\"version\":\"1.0.0\"},\"host\":\"api.example.com\",\"basePath\":\"/v1\",\"schemes\":[\"https\"],\"paths\":{\"/users\":{\"get\":{\"summary\":\"List users\"}}}}',\n            '{\"openapi\":\"3.0.3\",\"info\":{\"title\":\"User Management API\",\"version\":\"2.0.0\",\"description\":\"API for managing user accounts and permissions\",\"contact\":{\"email\":\"api@example.com\"}},\"servers\":[{\"url\":\"https://api.example.com/v2\",\"description\":\"Production server\"}]}',\n            '{\"metrics\":{\"http_requests_total\":{\"value\":1523456,\"labels\":{\"method\":\"GET\",\"status\":\"200\"}},\"http_request_duration_seconds\":{\"value\":0.023,\"labels\":{\"quantile\":\"0.99\"}},\"process_cpu_seconds_total\":{\"value\":12345.67}}}',\n            '# HELP http_requests_total Total number of HTTP requests\\n# TYPE http_requests_total counter\\nhttp_requests_total{method=\"GET\",status=\"200\"} 1523456\\nhttp_requests_total{method=\"POST\",status=\"201\"} 45678\\n# HELP http_request_duration_seconds HTTP request latency\\nhttp_request_duration_seconds{quantile=\"0.5\"} 0.012',\n            '{\"order\":{\"id\":\"ORD-2024-123456\",\"status\":\"processing\",\"items\":[{\"sku\":\"PROD-001\",\"name\":\"Widget Pro\",\"quantity\":2,\"price\":49.99}],\"subtotal\":99.98,\"tax\":8.00,\"shipping\":5.99,\"total\":113.97,\"created_at\":\"2024-12-22T14:30:00Z\"}}',\n            '{\"session\":{\"id\":\"sess_abc123xyz789\",\"user_id\":12345,\"ip_address\":\"192.168.1.100\",\"user_agent\":\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36\",\"created_at\":\"2024-12-22T10:00:00Z\",\"expires_at\":\"2024-12-22T22:00:00Z\",\"is_active\":true}}',\n            '{\"rate_limit\":{\"limit\":1000,\"remaining\":847,\"reset\":1703260800,\"retry_after\":null},\"request_id\":\"req_xyz789abc123\",\"timestamp\":\"2024-12-22T16:45:30Z\"}',\n            '{\"webhook\":{\"id\":\"wh_123456\",\"event\":\"payment.completed\",\"data\":{\"payment_id\":\"pay_abc123\",\"amount\":9999,\"currency\":\"usd\",\"status\":\"succeeded\",\"customer_id\":\"cus_xyz789\"},\"created\":1703260800}}',\n            '{\"oauth\":{\"access_token\":\"ya29.a0AfH6SMBx...\",\"token_type\":\"Bearer\",\"expires_in\":3600,\"refresh_token\":\"1//0gYx...\",\"scope\":\"openid email profile\"}}',\n            '{\"debug\":{\"request\":{\"method\":\"POST\",\"path\":\"/api/v1/users\",\"headers\":{\"Content-Type\":\"application/json\",\"Authorization\":\"Bearer ***\"},\"body\":{\"email\":\"test@example.com\"}},\"response\":{\"status\":201,\"time_ms\":45},\"trace_id\":\"trace_abc123\"}}',\n            '{\"config\":{\"app\":{\"name\":\"Enterprise Portal\",\"version\":\"3.2.1\",\"environment\":\"production\"},\"features\":{\"dark_mode\":true,\"beta_features\":false,\"maintenance_mode\":false},\"limits\":{\"max_upload_size\":\"50MB\",\"rate_limit\":\"1000/hour\"}}}',\n            '{\"analytics\":{\"page_views\":{\"today\":12345,\"this_week\":87654,\"this_month\":345678},\"unique_visitors\":{\"today\":4567,\"this_week\":23456,\"this_month\":98765},\"bounce_rate\":\"32.5%\",\"avg_session_duration\":\"4m 32s\"}}',\n            '{\"search\":{\"query\":\"enterprise software\",\"results\":[{\"id\":1,\"title\":\"Enterprise Resource Planning\",\"score\":0.95},{\"id\":2,\"title\":\"Enterprise Security Suite\",\"score\":0.87}],\"total\":156,\"took_ms\":23,\"page\":1,\"per_page\":10}}',\n            '{\"batch\":{\"id\":\"batch_123\",\"status\":\"completed\",\"total_items\":1000,\"processed\":1000,\"failed\":3,\"started_at\":\"2024-12-22T10:00:00Z\",\"completed_at\":\"2024-12-22T10:15:32Z\",\"errors\":[{\"item_id\":45,\"error\":\"Invalid format\"},{\"item_id\":123,\"error\":\"Duplicate entry\"}]}}',\n            '{\"notification\":{\"id\":\"notif_abc123\",\"type\":\"email\",\"recipient\":\"user@example.com\",\"subject\":\"Your order has shipped\",\"status\":\"delivered\",\"sent_at\":\"2024-12-22T14:30:00Z\",\"opened_at\":\"2024-12-22T15:45:00Z\"}}',\n            '{\"cache\":{\"status\":\"hit\",\"key\":\"user:12345:profile\",\"ttl\":3600,\"size_bytes\":2048,\"created_at\":\"2024-12-22T10:00:00Z\",\"last_accessed\":\"2024-12-22T16:30:00Z\",\"hit_count\":156}}',\n            '{\"queue\":{\"name\":\"email_notifications\",\"messages\":{\"pending\":234,\"processing\":12,\"completed\":45678,\"failed\":23},\"consumers\":3,\"avg_processing_time_ms\":150,\"oldest_message_age\":\"2m 15s\"}}',\n        ]\n        \n        # 获取域名目标\n        cur.execute(\"SELECT id, name FROM target WHERE type = 'domain' AND deleted_at IS NULL LIMIT 80\")\n        domain_targets = cur.fetchall()\n        \n        count = 0\n        batch_data = []\n        for target_id, target_name in domain_targets:\n            num = random.randint(50, 100)\n            selected = random.sample(paths, min(num, len(paths)))\n            \n            for idx, path in enumerate(selected):\n                # 生成固定 245 长度的 URL\n                url = generate_fixed_length_url(target_name, length=245, path_hint=f'endpoint/{idx:04d}')\n                \n                # 生成 100 字符的标题\n                title = random.choice(titles)\n                \n                # 生成 10-20 个技术\n                num_techs = random.randint(10, 20)\n                tech_list = random.sample(all_techs, min(num_techs, len(all_techs)))\n                \n                # 生成 10-20 个 tags (gf_patterns)\n                tags = random.choice(gf_patterns)\n                \n                # 生成模拟的响应头数据\n                response_headers = {\n                    'server': random.choice(['nginx', 'gunicorn', 'uvicorn', 'Apache']),\n                    'content_type': 'application/json',\n                    'x_request_id': f'req_{random.randint(100000, 999999)}',\n                    'x_ratelimit_limit': str(random.choice([100, 1000, 5000])),\n                    'x_ratelimit_remaining': str(random.randint(0, 1000)),\n                    'cache_control': random.choice(['no-cache', 'max-age=3600', 'private', None]),\n                }\n                # 移除 None 值\n                response_headers = {k: v for k, v in response_headers.items() if v is not None}\n                \n                batch_data.append((\n                    url, target_id, target_name, title,\n                    random.choice(['nginx/1.24.0', 'gunicorn/21.2.0']),\n                    random.choice([200, 201, 301, 400, 401, 403, 404, 500]),\n                    random.randint(100, 50000), 'application/json',\n                    tech_list,\n                    '', random.choice(response_bodies),\n                    random.choice([True, False, None]), tags,\n                    generate_raw_response_headers(response_headers)\n                ))\n                count += 1\n        \n        # 批量插入\n        if batch_data:\n            execute_values(cur, \"\"\"\n                INSERT INTO endpoint (\n                    url, target_id, host, title, webserver, status_code, content_length,\n                    content_type, tech, location, response_body, vhost, matched_gf_patterns,\n                    response_headers, created_at\n                ) VALUES %s\n                ON CONFLICT DO NOTHING\n            \"\"\", batch_data, template=\"(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, NOW())\")\n                \n        print(f\"  ✓ 创建了 {count} 个端点\\n\")\n\n\n    def create_directories(self, target_ids: list, website_ids: list):\n        \"\"\"创建目录\"\"\"\n        print(\"📁 创建目录...\")\n        cur = self.conn.cursor()\n        \n        dir_paths = [\n            '/admin/', '/administrator/', '/wp-admin/', '/wp-content/', '/backup/', '/backups/',\n            '/old/', '/archive/', '/temp/', '/test/', '/dev/', '/staging/', '/config/',\n            '/api/', '/api/v1/', '/api/v2/', '/uploads/', '/files/', '/documents/', '/docs/',\n            '/images/', '/assets/', '/static/', '/css/', '/js/', '/logs/', '/debug/',\n            '/private/', '/secure/', '/internal/', '/data/', '/database/', '/phpmyadmin/',\n            '/cgi-bin/', '/includes/', '/lib/', '/vendor/', '/node_modules/', '/plugins/',\n            '/themes/', '/templates/', '/src/', '/app/', '/portal/', '/dashboard/', '/panel/',\n            '/user/', '/users/', '/account/', '/profile/', '/member/', '/customer/',\n            # 扩展目录\n            '/api/v3/', '/api/internal/', '/api/admin/', '/api/public/', '/api/private/',\n            '/admin/config/', '/admin/logs/', '/admin/backup/', '/admin/users/', '/admin/settings/',\n            '/system/', '/system/config/', '/system/logs/', '/system/backup/', '/system/cache/',\n            '/storage/', '/storage/uploads/', '/storage/temp/', '/storage/cache/', '/storage/logs/',\n            '/resources/', '/resources/images/', '/resources/documents/', '/resources/templates/',\n            '/public/', '/public/assets/', '/public/uploads/', '/public/images/', '/public/files/',\n            '/private/data/', '/private/config/', '/private/keys/', '/private/certificates/',\n            '/backup/daily/', '/backup/weekly/', '/backup/monthly/', '/backup/database/',\n            '/logs/access/', '/logs/error/', '/logs/audit/', '/logs/security/', '/logs/application/',\n            '/cache/', '/cache/views/', '/cache/data/', '/cache/sessions/', '/cache/compiled/',\n            '/tmp/', '/tmp/uploads/', '/tmp/sessions/', '/tmp/cache/', '/tmp/exports/',\n            '/exports/', '/exports/reports/', '/exports/data/', '/exports/csv/', '/exports/pdf/',\n            '/imports/', '/imports/data/', '/imports/csv/', '/imports/xml/', '/imports/json/',\n            '/reports/', '/reports/daily/', '/reports/weekly/', '/reports/monthly/', '/reports/annual/',\n            '/media/', '/media/images/', '/media/videos/', '/media/audio/', '/media/documents/',\n            '/downloads/', '/downloads/software/', '/downloads/documents/', '/downloads/updates/',\n        ]\n        \n        content_types = ['text/html; charset=utf-8', 'application/json', 'text/plain', 'text/css', \n                         'application/xml', 'application/javascript', 'text/xml']\n        \n        # 直接获取域名目标来生成目录数据\n        cur.execute(\"SELECT id, name FROM target WHERE type = 'domain' AND deleted_at IS NULL LIMIT 100\")\n        domain_targets = cur.fetchall()\n        \n        if not domain_targets:\n            print(\"  ⚠ 没有域名目标，跳过\\n\")\n            return\n        \n        count = 0\n        batch_data = []\n        for target_id, target_name in domain_targets:\n            num = random.randint(60, 100)\n            selected = random.sample(dir_paths, min(num, len(dir_paths)))\n            \n            for idx, path in enumerate(selected):\n                # 生成固定 245 长度的 URL\n                url = generate_fixed_length_url(target_name, length=245, path_hint=f'directory/{idx:04d}')\n                batch_data.append((\n                    url, target_id,\n                    random.choice([200, 301, 302, 403, 404, 500]),\n                    random.randint(0, 100000), random.randint(0, 5000), random.randint(0, 500),\n                    random.choice(content_types), random.randint(10000000, 5000000000)\n                ))\n                count += 1\n        \n        # 批量插入\n        if batch_data:\n            execute_values(cur, \"\"\"\n                INSERT INTO directory (\n                    url, target_id, status, content_length, words, lines,\n                    content_type, duration, created_at\n                ) VALUES %s\n                ON CONFLICT DO NOTHING\n            \"\"\", batch_data, template=\"(%s, %s, %s, %s, %s, %s, %s, %s, NOW())\")\n                \n        print(f\"  ✓ 创建了 {count} 个目录\\n\")\n\n    def create_host_port_mappings(self, target_ids: list):\n        \"\"\"创建主机端口映射\"\"\"\n        print(\"🔌 创建主机端口映射...\")\n        cur = self.conn.cursor()\n        \n        # 扩展端口列表，包含更多常见端口\n        ports = [\n            # 常见服务端口\n            20, 21, 22, 23, 25, 26, 53, 69, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,\n            110, 111, 113, 119, 123, 135, 137, 138, 139, 143, 161, 162, 179, 194, 199,\n            389, 443, 444, 445, 465, 500, 512, 513, 514, 515, 520, 523, 524, 548, 554,\n            # 数据库端口\n            1433, 1434, 1521, 1522, 1525, 1526, 1527, 1528, 1529, 1530,\n            3306, 3307, 3308, 5432, 5433, 5434, 6379, 6380, 6381,\n            9200, 9201, 9300, 9301, 27017, 27018, 27019, 28017,\n            # Web 服务端口\n            8000, 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010,\n            8080, 8081, 8082, 8083, 8084, 8085, 8086, 8087, 8088, 8089, 8090,\n            8443, 8444, 8445, 8888, 8889, 9000, 9001, 9002, 9003, 9090, 9091, 9443,\n            # 消息队列和缓存\n            5672, 5673, 15672, 25672, 4369, 11211, 11212, 11213,\n            # 容器和编排\n            2375, 2376, 2377, 2379, 2380, 6443, 6444, 10250, 10251, 10252, 10255,\n            # 监控和日志\n            3000, 3001, 3002, 9090, 9091, 9093, 9094, 9100, 9104, 9115, 9116,\n            5601, 5602, 9600, 9601, 24224, 24225,\n            # 其他常见端口\n            993, 995, 1080, 1081, 1723, 2049, 2181, 2182, 2183, 3128, 3129, 3389, 3390,\n            4443, 4444, 5000, 5001, 5002, 5003, 5900, 5901, 5902, 5984, 5985,\n            6000, 6001, 6002, 7001, 7002, 7003, 7070, 7071, 7443, 7474, 7687,\n            8161, 8162, 8180, 8181, 8200, 8201, 8280, 8281, 8300, 8301, 8400, 8401,\n            8500, 8501, 8600, 8601, 8686, 8687, 8787, 8788, 8880, 8881, 8983, 8984,\n            9418, 9419, 9999, 10000, 10001, 10002, 11111, 12345, 15000, 15001,\n            16379, 16380, 18080, 18081, 19999, 20000, 22222, 27018, 27019, 28015, 28016,\n            29015, 29016, 30000, 30001, 31337, 32768, 33060, 33061, 44818, 47001, 49152,\n            50000, 50001, 50070, 50075, 50090, 54321, 55555, 60000, 60001, 61616, 61617,\n        ]\n        # 去重\n        ports = list(set(ports))\n        \n        # 获取域名目标\n        cur.execute(\"SELECT id, name FROM target WHERE type = 'domain' AND deleted_at IS NULL LIMIT 80\")\n        domain_targets = cur.fetchall()\n        \n        count = 0\n        batch_data = []\n        for target_id, target_name in domain_targets:\n            num_ips = random.randint(15, 30)\n            \n            for _ in range(num_ips):\n                ip = f'192.168.{random.randint(1, 254)}.{random.randint(1, 254)}'\n                # 增加每个 IP 的端口数量，30-60 个端口\n                num_ports = random.randint(30, 60)\n                selected_ports = random.sample(ports, min(num_ports, len(ports)))\n                \n                for port in selected_ports:\n                    batch_data.append((target_id, target_name, ip, port))\n                    count += 1\n        \n        # 批量插入\n        if batch_data:\n            execute_values(cur, \"\"\"\n                INSERT INTO host_port_mapping (target_id, host, ip, port, created_at)\n                VALUES %s\n                ON CONFLICT DO NOTHING\n            \"\"\", batch_data, template=\"(%s, %s, %s, %s, NOW())\")\n                    \n        print(f\"  ✓ 创建了 {count} 个主机端口映射\\n\")\n\n    def create_vulnerabilities(self, target_ids: list):\n        \"\"\"创建漏洞（基于 website URL 前缀）\"\"\"\n        print(\"🐛 创建漏洞...\")\n        cur = self.conn.cursor()\n        \n        vuln_types = [\n            'sql-injection-authentication-bypass-vulnerability-',\n            'cross-site-scripting-xss-stored-persistent-attack-',\n            'cross-site-request-forgery-csrf-token-validation--',\n            'server-side-request-forgery-ssrf-internal-access--',\n            'xml-external-entity-xxe-injection-vulnerability---',\n            'remote-code-execution-rce-command-injection-flaw--',\n            'local-file-inclusion-lfi-path-traversal-exploit---',\n            'directory-traversal-arbitrary-file-read-access----',\n            'authentication-bypass-session-management-flaw-----',\n            'insecure-direct-object-reference-idor-access-ctrl-',\n            'sensitive-data-exposure-information-disclosure----',\n            'security-misconfiguration-default-credentials-----',\n            'broken-access-control-privilege-escalation-vuln---',\n            'cors-misconfiguration-cross-origin-data-leakage---',\n            'subdomain-takeover-dns-misconfiguration-exploit---',\n            'exposed-admin-panel-unauthorized-access-control---',\n            'default-credentials-weak-authentication-bypass----',\n            'information-disclosure-sensitive-data-exposure----',\n            'command-injection-os-command-execution-exploit----',\n            'ldap-injection-directory-service-manipulation-----',\n        ]\n        \n        sources = [\n            'nuclei-vulnerability-scanner--',\n            'dalfox-xss-parameter-analysis-',\n            'sqlmap-sql-injection-testing--',\n            'crlfuzz-crlf-injection-finder-',\n            'httpx-web-probe-fingerprint---',\n            'manual-penetration-testing----',\n            'burp-suite-professional-scan--',\n            'owasp-zap-security-scanner----',\n        ]\n        severities = ['unknown', 'info', 'low', 'medium', 'high', 'critical']\n        \n        # 漏洞路径后缀（会追加到 website URL 后面）\n        vuln_paths = [\n            '/api/users?id=1',\n            '/api/admin/config',\n            '/api/v1/auth/login',\n            '/api/v2/data/export',\n            '/admin/settings',\n            '/debug/console',\n            '/backup/db.sql',\n            '/.env',\n            '/.git/config',\n            '/wp-admin/',\n            '/phpmyadmin/',\n            '/api/graphql',\n            '/swagger.json',\n            '/actuator/health',\n            '/metrics',\n        ]\n        \n        # 获取所有 website 的 URL 和 target_id\n        cur.execute(\"SELECT id, url, target_id FROM website LIMIT 500\")\n        websites = cur.fetchall()\n        \n        if not websites:\n            print(\"  ⚠ 没有 website 数据，跳过漏洞生成\\n\")\n            return\n        \n        count = 0\n        batch_data = []\n        for website_id, website_url, target_id in websites:\n            # 每个 website 生成 1-5 个漏洞\n            num_vulns = random.randint(1, 5)\n            \n            for idx in range(num_vulns):\n                severity = random.choice(severities)\n                cvss_ranges = {\n                    'critical': (9.0, 10.0), 'high': (7.0, 8.9), 'medium': (4.0, 6.9),\n                    'low': (0.1, 3.9), 'info': (0.0, 0.0), 'unknown': (0.0, 10.0)\n                }\n                cvss_range = cvss_ranges.get(severity, (0.0, 10.0))\n                cvss_score = round(random.uniform(*cvss_range), 1)\n                \n                # 漏洞 URL = website URL + 漏洞路径\n                # 先移除 website URL 中的查询参数\n                base_url = website_url.split('?')[0]\n                vuln_url = base_url + random.choice(vuln_paths)\n                \n                description = generate_fixed_length_text(length=300, text_type='description')\n                \n                raw_output = json.dumps({\n                    'template': f'CVE-2024-{random.randint(10000, 99999)}',\n                    'matcher_name': 'default',\n                    'severity': severity,\n                    'matched_at': vuln_url,\n                })\n                \n                batch_data.append((\n                    target_id, vuln_url, random.choice(vuln_types), severity,\n                    random.choice(sources), cvss_score, description, raw_output\n                ))\n                count += 1\n        \n        # 批量插入\n        if batch_data:\n            execute_values(cur, \"\"\"\n                INSERT INTO vulnerability (\n                    target_id, url, vuln_type, severity, source, cvss_score,\n                    description, raw_output, created_at\n                ) VALUES %s\n            \"\"\", batch_data, template=\"(%s, %s, %s, %s, %s, %s, %s, %s, NOW())\")\n                \n        print(f\"  ✓ 创建了 {count} 个漏洞\\n\")\n\n    def create_subdomain_snapshots(self, scan_ids: list):\n        \"\"\"创建子域名快照\"\"\"\n        print(\"📸 创建子域名快照...\")\n        cur = self.conn.cursor()\n        \n        if not scan_ids:\n            print(\"  ⚠ 缺少扫描任务，跳过\\n\")\n            return\n        \n        prefixes = [\n            'api', 'admin', 'portal', 'dashboard', 'app', 'mobile', 'staging', 'dev',\n            'test', 'qa', 'uat', 'beta', 'mail', 'vpn', 'cdn', 'static',\n            'auth', 'login', 'sso', 'oauth', 'identity', 'accounts', 'secure',\n            'monitoring', 'metrics', 'grafana', 'prometheus', 'kibana', 'logs',\n            'jenkins', 'ci', 'cd', 'gitlab', 'jira', 'confluence', 'kubernetes',\n            'www', 'www2', 'ns1', 'ns2', 'mx', 'mx1', 'autodiscover', 'webmail',\n            'api-v1', 'api-v2', 'api-v3', 'internal', 'external', 'public', 'private',\n            'gateway', 'proxy', 'cache', 'redis', 'mongo', 'mysql', 'postgres',\n            'elastic', 'search', 'analytics', 'reporting', 'billing', 'payment',\n            'checkout', 'cart', 'shop', 'store', 'catalog', 'inventory', 'orders',\n            'users', 'customers', 'partners', 'vendors', 'suppliers', 'merchants',\n            'docs', 'help', 'support', 'faq', 'kb', 'wiki', 'blog', 'news',\n            'status', 'health', 'ping', 'heartbeat', 'uptime', 'monitor',\n            'backup', 'archive', 'storage', 'files', 'uploads', 'downloads',\n            'assets', 'images', 'media', 'video', 'audio', 'fonts', 'icons',\n            'api-gateway', 'load-balancer', 'reverse-proxy', 'edge', 'origin',\n            'primary', 'secondary', 'failover', 'replica', 'master', 'slave',\n            'prod', 'stage', 'preprod', 'sandbox', 'demo', 'preview', 'canary',\n        ]\n        \n        count = 0\n        batch_data = []\n        for scan_id in scan_ids:  # 为所有扫描创建快照\n            # 获取扫描对应的目标域名\n            cur.execute(\"\"\"\n                SELECT t.name FROM scan s \n                JOIN target t ON s.target_id = t.id \n                WHERE s.id = %s AND t.type = 'domain'\n            \"\"\", (scan_id,))\n            row = cur.fetchone()\n            if not row:\n                continue\n            target_name = row[0]\n            \n            num = random.randint(60, 100)\n            selected = random.sample(prefixes, min(num, len(prefixes)))\n            \n            for prefix in selected:\n                subdomain_name = f'{prefix}.{target_name}'\n                batch_data.append((scan_id, subdomain_name))\n                count += 1\n        \n        # 批量插入\n        if batch_data:\n            execute_values(cur, \"\"\"\n                INSERT INTO subdomain_snapshot (scan_id, name, created_at)\n                VALUES %s\n                ON CONFLICT DO NOTHING\n            \"\"\", batch_data, template=\"(%s, %s, NOW())\")\n                \n        print(f\"  ✓ 创建了 {count} 个子域名快照\\n\")\n\n    def create_website_snapshots(self, scan_ids: list):\n        \"\"\"创建网站快照\"\"\"\n        print(\"📸 创建网站快照...\")\n        cur = self.conn.cursor()\n        \n        if not scan_ids:\n            print(\"  ⚠ 缺少扫描任务，跳过\\n\")\n            return\n        \n        titles = [\n            'Enterprise Portal - Login | Secure Access Required - Multi-Factor Authentication',\n            'Admin Dashboard - System Management | Configuration Settings Overview',\n            'API Documentation - Swagger UI | RESTful Endpoints Reference Guide',\n            'Customer Portal - Account Management | Billing Subscription Services',\n            'Developer Console - Application Management | API Keys Webhooks Configuration',\n            'Support Center - Help Desk | Knowledge Base FAQ Ticket System',\n            'Analytics Dashboard - Business Intelligence | Real-time Metrics Reporting',\n            'Security Center - Threat Detection | Vulnerability Assessment Reports',\n            'User Management - Identity Access Control | Role Permission Administration',\n            'Content Management System - Publishing Platform | Media Library Editor',\n        ]\n        webservers = ['nginx/1.24.0', 'nginx/1.25.3', 'Apache/2.4.57', 'Apache/2.4.58', \n                      'cloudflare', 'gunicorn/21.2.0', 'Microsoft-IIS/10.0']\n        tech_stacks = [['React', 'Node.js', 'Express'], ['Vue.js', 'Django', 'PostgreSQL'], \n                       ['Angular', 'Spring Boot', 'MySQL'], ['Next.js', 'FastAPI', 'Redis'],\n                       ['Svelte', 'Go', 'MongoDB'], ['React', 'NestJS', 'TypeORM']]\n        \n        count = 0\n        batch_data = []\n        for scan_id in scan_ids:  # 为所有扫描创建快照\n            cur.execute(\"\"\"\n                SELECT t.name FROM scan s \n                JOIN target t ON s.target_id = t.id \n                WHERE s.id = %s AND t.type = 'domain'\n            \"\"\", (scan_id,))\n            row = cur.fetchone()\n            if not row:\n                continue\n            target_name = row[0]\n            \n            for i in range(random.randint(30, 60)):\n                # 生成固定 245 长度的 URL\n                url = generate_fixed_length_url(target_name, length=245, path_hint=f'website-snap/{i:04d}')\n                \n                # 生成模拟的响应头数据\n                response_headers = {\n                    'server': random.choice(['nginx', 'Apache', 'cloudflare']),\n                    'content_type': 'text/html; charset=utf-8',\n                    'x_frame_options': random.choice(['DENY', 'SAMEORIGIN', None]),\n                }\n                # 移除 None 值\n                response_headers = {k: v for k, v in response_headers.items() if v is not None}\n                \n                batch_data.append((\n                    scan_id, url, target_name, random.choice(titles),\n                    random.choice(webservers), random.choice(tech_stacks),\n                    random.choice([200, 301, 403]),\n                    random.randint(1000, 50000), 'text/html; charset=utf-8',\n                    '',  # location 字段\n                    '<!DOCTYPE html><html><head><title>Test</title></head><body>Content</body></html>',\n                    generate_raw_response_headers(response_headers)\n                ))\n                count += 1\n        \n        # 批量插入\n        if batch_data:\n            execute_values(cur, \"\"\"\n                INSERT INTO website_snapshot (\n                    scan_id, url, host, title, webserver, tech, status_code,\n                    content_length, content_type, location, response_body,\n                    response_headers, created_at\n                ) VALUES %s\n                ON CONFLICT DO NOTHING\n            \"\"\", batch_data, template=\"(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, NOW())\")\n                \n        print(f\"  ✓ 创建了 {count} 个网站快照\\n\")\n\n    def create_endpoint_snapshots(self, scan_ids: list):\n        \"\"\"创建端点快照\"\"\"\n        print(\"📸 创建端点快照...\")\n        cur = self.conn.cursor()\n        \n        if not scan_ids:\n            print(\"  ⚠ 缺少扫描任务，跳过\\n\")\n            return\n        \n        paths = [\n            '/api/v1/users', '/api/v1/auth/login', '/api/v2/products',\n            '/admin/dashboard', '/graphql', '/health', '/metrics',\n            '/api/v1/organizations/departments/teams/members',\n            '/api/v2/inventory/warehouse/locations/products',\n            '/api/v3/reporting/analytics/metrics/summary',\n            '/admin/system/configuration/security/settings',\n            '/portal/customer/account/billing/invoices',\n            '/internal/monitoring/kubernetes/pods/status',\n            '/webhook/integration/payment/callback/handler',\n            '/oauth/authorize/callback/redirect',\n            '/swagger/v1/api-docs/openapi.json',\n        ]\n        \n        # 100字符长度的标题\n        titles = [\n            'Enterprise API Gateway - RESTful Service Documentation with OpenAPI 3.0 Specification and Interactive',\n            'User Authentication Service - OAuth 2.0 and SAML 2.0 Single Sign-On Integration Platform Dashboard',\n            'Payment Processing Gateway - PCI-DSS Compliant Transaction Management System Administration Panel',\n            'Content Delivery Network - Global Edge Cache Management and Real-time Analytics Dashboard Interface',\n            'Database Administration Console - PostgreSQL Cluster Management with Automated Backup and Recovery',\n        ]\n        \n        # 扩展的技术栈列表\n        all_techs = [\n            'React 18.2.0', 'Vue.js 3.4', 'Angular 17.1', 'Next.js 14.0', 'Node.js 20.10',\n            'Express 4.18', 'Python 3.12', 'Django 5.0', 'FastAPI 0.109', 'Go 1.21',\n            'PostgreSQL 16.1', 'MySQL 8.2', 'MongoDB 7.0', 'Redis 7.2', 'Elasticsearch 8.11',\n            'Kubernetes 1.28', 'Docker 24.0', 'Nginx 1.25', 'GraphQL 16.8', 'JWT',\n        ]\n        \n        # 扩展的 tags\n        all_tags = [\n            'debug', 'config', 'api', 'json', 'upload', 'file', 'admin', 'auth',\n            'secrets', 'credentials', 'backup', 'archive', 'trace', 'log', 'error',\n            'security', 'vulnerability', 'payment', 'user', 'internal', 'private',\n        ]\n        \n        count = 0\n        batch_data = []\n        for scan_id in scan_ids:  # 为所有扫描创建快照\n            cur.execute(\"\"\"\n                SELECT t.name FROM scan s \n                JOIN target t ON s.target_id = t.id \n                WHERE s.id = %s AND t.type = 'domain'\n            \"\"\", (scan_id,))\n            row = cur.fetchone()\n            if not row:\n                continue\n            target_name = row[0]\n            \n            for idx, path in enumerate(random.sample(paths, min(random.randint(40, 80), len(paths)))):\n                # 生成固定 245 长度的 URL\n                url = generate_fixed_length_url(target_name, length=245, path_hint=f'endpoint-snap/{idx:04d}')\n                \n                # 生成 100 字符的标题\n                title = random.choice(titles)\n                \n                # 生成 10-20 个技术\n                num_techs = random.randint(10, 20)\n                tech_list = random.sample(all_techs, min(num_techs, len(all_techs)))\n                \n                # 生成 10-20 个 tags\n                num_tags = random.randint(10, 20)\n                tags = random.sample(all_tags, min(num_tags, len(all_tags)))\n                \n                # 生成模拟的响应头数据\n                response_headers = {\n                    'server': 'nginx/1.24.0',\n                    'content_type': 'application/json',\n                    'x_request_id': f'req_{random.randint(100000, 999999)}',\n                }\n                \n                batch_data.append((\n                    scan_id, url, target_name, title,\n                    random.choice([200, 201, 401, 403, 404]),\n                    random.randint(100, 5000),\n                    '',  # location\n                    'nginx/1.24.0',\n                    'application/json', tech_list,\n                    '{\"status\":\"ok\",\"data\":{}}',\n                    tags,\n                    generate_raw_response_headers(response_headers)\n                ))\n                count += 1\n        \n        # 批量插入\n        if batch_data:\n            execute_values(cur, \"\"\"\n                INSERT INTO endpoint_snapshot (\n                    scan_id, url, host, title, status_code, content_length,\n                    location, webserver, content_type, tech, response_body,\n                    matched_gf_patterns, response_headers, created_at\n                ) VALUES %s\n                ON CONFLICT DO NOTHING\n            \"\"\", batch_data, template=\"(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, NOW())\")\n                \n        print(f\"  ✓ 创建了 {count} 个端点快照\\n\")\n\n    def create_directory_snapshots(self, scan_ids: list):\n        \"\"\"创建目录快照\"\"\"\n        print(\"📸 创建目录快照...\")\n        cur = self.conn.cursor()\n        \n        if not scan_ids:\n            print(\"  ⚠ 缺少扫描任务，跳过\\n\")\n            return\n        \n        dirs = [\n            '/admin/', '/backup/', '/config/', '/uploads/', '/static/',\n            '/assets/', '/images/', '/js/', '/css/', '/api/',\n            '/admin/config/', '/admin/logs/', '/admin/backup/', '/admin/users/',\n            '/system/', '/system/config/', '/system/logs/', '/system/cache/',\n            '/storage/', '/storage/uploads/', '/storage/temp/', '/storage/cache/',\n            '/resources/', '/resources/images/', '/resources/documents/',\n            '/public/', '/public/assets/', '/public/uploads/', '/public/images/',\n            '/private/data/', '/private/config/', '/private/keys/',\n            '/backup/daily/', '/backup/weekly/', '/backup/database/',\n            '/logs/access/', '/logs/error/', '/logs/audit/', '/logs/security/',\n            '/cache/', '/cache/views/', '/cache/data/', '/cache/sessions/',\n            '/tmp/', '/tmp/uploads/', '/tmp/sessions/', '/tmp/exports/',\n            '/exports/', '/exports/reports/', '/exports/data/', '/exports/csv/',\n        ]\n        \n        count = 0\n        batch_data = []\n        for scan_id in scan_ids:  # 为所有扫描创建快照\n            cur.execute(\"\"\"\n                SELECT t.name FROM scan s \n                JOIN target t ON s.target_id = t.id \n                WHERE s.id = %s AND t.type = 'domain'\n            \"\"\", (scan_id,))\n            row = cur.fetchone()\n            if not row:\n                continue\n            target_name = row[0]\n            \n            for idx, d in enumerate(random.sample(dirs, min(random.randint(50, 80), len(dirs)))):\n                # 生成固定 245 长度的 URL\n                url = generate_fixed_length_url(target_name, length=245, path_hint=f'dir-snap/{idx:04d}')\n                batch_data.append((\n                    scan_id, url, random.choice([200, 301, 403]),\n                    random.randint(500, 10000), random.randint(50, 500),\n                    random.randint(10, 100), 'text/html',\n                    random.randint(10000000, 500000000)  # 纳秒\n                ))\n                count += 1\n        \n        # 批量插入\n        if batch_data:\n            execute_values(cur, \"\"\"\n                INSERT INTO directory_snapshot (\n                    scan_id, url, status, content_length, words, lines,\n                    content_type, duration, created_at\n                ) VALUES %s\n                ON CONFLICT DO NOTHING\n            \"\"\", batch_data, template=\"(%s, %s, %s, %s, %s, %s, %s, %s, NOW())\")\n                \n        print(f\"  ✓ 创建了 {count} 个目录快照\\n\")\n\n    def create_host_port_mapping_snapshots(self, scan_ids: list):\n        \"\"\"创建主机端口映射快照\"\"\"\n        print(\"📸 创建主机端口映射快照...\")\n        cur = self.conn.cursor()\n        \n        if not scan_ids:\n            print(\"  ⚠ 缺少扫描任务，跳过\\n\")\n            return\n        \n        common_ports = [22, 80, 443, 3306, 5432, 6379, 8080, 8443, 9000,\n                        21, 23, 25, 53, 110, 143, 389, 445, 993, 995,\n                        1433, 1521, 2049, 2181, 3000, 3389, 5000, 5672,\n                        6443, 7001, 8000, 8081, 8888, 9090, 9200, 27017]\n        \n        count = 0\n        batch_data = []\n        for scan_id in scan_ids:  # 为所有扫描创建快照\n            cur.execute(\"\"\"\n                SELECT t.name FROM scan s \n                JOIN target t ON s.target_id = t.id \n                WHERE s.id = %s AND t.type = 'domain'\n            \"\"\", (scan_id,))\n            row = cur.fetchone()\n            if not row:\n                continue\n            target_name = row[0]\n            \n            # 生成多个随机 IP\n            for _ in range(random.randint(10, 20)):\n                ip = f'192.168.{random.randint(1, 254)}.{random.randint(1, 254)}'\n                \n                for port in random.sample(common_ports, min(random.randint(20, 35), len(common_ports))):\n                    batch_data.append((scan_id, target_name, ip, port))\n                    count += 1\n        \n        # 批量插入\n        if batch_data:\n            execute_values(cur, \"\"\"\n                INSERT INTO host_port_mapping_snapshot (\n                    scan_id, host, ip, port, created_at\n                ) VALUES %s\n                ON CONFLICT DO NOTHING\n            \"\"\", batch_data, template=\"(%s, %s, %s, %s, NOW())\")\n                \n        print(f\"  ✓ 创建了 {count} 个主机端口映射快照\\n\")\n\n    def create_vulnerability_snapshots(self, scan_ids: list):\n        \"\"\"创建漏洞快照\"\"\"\n        print(\"📸 创建漏洞快照...\")\n        cur = self.conn.cursor()\n        \n        if not scan_ids:\n            print(\"  ⚠ 缺少扫描任务，跳过\\n\")\n            return\n        \n        vuln_types = [\n            'sql-injection-authentication-bypass-vulnerability-',\n            'cross-site-scripting-xss-stored-persistent-attack-',\n            'server-side-request-forgery-ssrf-internal-access--',\n            'remote-code-execution-rce-command-injection-flaw--',\n            'insecure-direct-object-reference-idor-access-ctrl-',\n            'authentication-bypass-session-management-flaw-----',\n            'cors-misconfiguration-cross-origin-data-leakage---',\n            'command-injection-os-command-execution-exploit----',\n            'deserialization-vulnerability-object-injection----',\n            'jwt-vulnerability-token-forgery-authentication----',\n            'open-redirect-url-redirection-phishing-attack-----',\n            'path-traversal-arbitrary-file-read-access-vuln----',\n        ]\n        severities = ['critical', 'high', 'medium', 'low', 'info']\n        sources = [\n            'nuclei-vulnerability-scanner--',\n            'dalfox-xss-parameter-analysis-',\n            'sqlmap-sql-injection-testing--',\n            'burp-suite-professional-scan--',\n            'owasp-zap-security-scanner----',\n            'nmap-network-service-scanner--',\n            'nikto-web-server-scanner------',\n        ]\n        \n        count = 0\n        batch_data = []\n        for scan_id in scan_ids:  # 为所有扫描创建快照\n            cur.execute(\"\"\"\n                SELECT t.name FROM scan s \n                JOIN target t ON s.target_id = t.id \n                WHERE s.id = %s AND t.type = 'domain'\n            \"\"\", (scan_id,))\n            row = cur.fetchone()\n            if not row:\n                continue\n            target_name = row[0]\n            \n            for idx in range(random.randint(30, 60)):\n                severity = random.choice(severities)\n                cvss_ranges = {\n                    'critical': (9.0, 10.0), 'high': (7.0, 8.9), 'medium': (4.0, 6.9),\n                    'low': (0.1, 3.9), 'info': (0.0, 0.0)\n                }\n                cvss_range = cvss_ranges.get(severity, (0.0, 10.0))\n                cvss_score = round(random.uniform(*cvss_range), 1)\n                \n                # 生成固定 245 长度的 URL\n                url = generate_fixed_length_url(target_name, length=245, path_hint=f'vuln-snap/{idx:04d}')\n                \n                # 生成固定 300 长度的描述\n                description = generate_fixed_length_text(length=300, text_type='description')\n                \n                batch_data.append((\n                    scan_id, url, random.choice(vuln_types), severity,\n                    random.choice(sources), cvss_score,\n                    description,\n                    json.dumps({'template': f'CVE-2024-{random.randint(10000, 99999)}'})\n                ))\n                count += 1\n        \n        # 批量插入\n        if batch_data:\n            execute_values(cur, \"\"\"\n                INSERT INTO vulnerability_snapshot (\n                    scan_id, url, vuln_type, severity, source, cvss_score,\n                    description, raw_output, created_at\n                ) VALUES %s\n            \"\"\", batch_data, template=\"(%s, %s, %s, %s, %s, %s, %s, %s, NOW())\")\n                \n        print(f\"  ✓ 创建了 {count} 个漏洞快照\\n\")\n\n    def create_ehole_fingerprints(self):\n        \"\"\"创建 EHole 指纹数据\"\"\"\n        print(\"🔍 创建 EHole 指纹...\")\n        cur = self.conn.cursor()\n        \n        # CMS/产品名称模板（长名称）\n        cms_templates = [\n            'WordPress-Enterprise-Content-Management-System-Professional-Edition',\n            'Drupal-Open-Source-CMS-Platform-Community-Extended-Version',\n            'Joomla-Web-Content-Management-Framework-Business-Suite',\n            'Magento-E-Commerce-Platform-Enterprise-Cloud-Edition',\n            'Shopify-Online-Store-Builder-Professional-Business-Plan',\n            'PrestaShop-E-Commerce-Solution-Multi-Store-Edition',\n            'OpenCart-Shopping-Cart-System-Enterprise-Features',\n            'WooCommerce-WordPress-E-Commerce-Plugin-Extended',\n            'Laravel-PHP-Framework-Application-Boilerplate',\n            'Django-Python-Web-Framework-Admin-Dashboard',\n            'Spring-Boot-Java-Microservices-Framework-Starter',\n            'Express-Node-JS-Web-Application-Framework-API',\n            'Ruby-on-Rails-MVC-Framework-Application-Template',\n            'ASP-NET-Core-Microsoft-Web-Framework-Enterprise',\n            'Flask-Python-Micro-Framework-REST-API-Template',\n            'FastAPI-Python-Modern-Web-Framework-OpenAPI',\n            'Next-JS-React-Framework-Server-Side-Rendering',\n            'Nuxt-JS-Vue-Framework-Universal-Application',\n            'Angular-Universal-Server-Side-Rendering-Platform',\n            'Svelte-Kit-Web-Application-Framework-Compiler',\n            'Apache-Tomcat-Java-Servlet-Container-Server',\n            'Nginx-Web-Server-Reverse-Proxy-Load-Balancer',\n            'Microsoft-IIS-Internet-Information-Services-Server',\n            'Apache-HTTP-Server-Web-Server-Platform',\n            'Caddy-Web-Server-Automatic-HTTPS-Configuration',\n            'LiteSpeed-Web-Server-High-Performance-HTTP',\n            'Oracle-WebLogic-Server-Java-EE-Application',\n            'IBM-WebSphere-Application-Server-Enterprise',\n            'JBoss-EAP-Enterprise-Application-Platform-RedHat',\n            'GlassFish-Server-Open-Source-Java-EE-Reference',\n        ]\n        \n        methods = ['keyword', 'faviconhash', 'regula']\n        locations = ['body', 'header', 'title', 'server', 'cookie', 'cert']\n        types = ['CMS', 'Framework', 'Server', 'Database', 'Cache', 'CDN', 'WAF', 'Load-Balancer', 'Container', 'Cloud']\n        \n        # 关键词模板（多个长关键词）\n        keyword_templates = [\n            ['wp-content/themes/', 'wp-includes/js/', 'wp-admin/css/', 'wordpress-hash-', 'wp-json/wp/v2/'],\n            ['sites/all/modules/', 'misc/drupal.js', 'drupal-settings-json', 'X-Drupal-Cache', 'X-Generator: Drupal'],\n            ['media/jui/js/', 'administrator/index.php', 'Joomla!', 'com_content', 'mod_custom'],\n            ['skin/frontend/', 'Mage.Cookies', 'MAGENTO_CACHE', 'varien/js.js', 'mage/cookies.js'],\n            ['cdn.shopify.com', 'Shopify.theme', 'shopify-section', 'shopify-payment-button', 'myshopify.com'],\n            ['prestashop', 'PrestaShop', 'ps_versions_compliancy', 'prestashop-page', 'id_product'],\n            ['catalog/view/theme/', 'index.php?route=', 'OpenCart', 'text_home', 'common/home'],\n            ['woocommerce', 'WooCommerce', 'wc-ajax', 'woocommerce-page', 'add_to_cart_button'],\n            ['laravel_session', 'XSRF-TOKEN', 'Laravel', 'laravel-livewire', 'laravel_token'],\n            ['csrfmiddlewaretoken', 'django.contrib', 'Django', '__admin_media_prefix__', 'django-debug-toolbar'],\n            ['X-Application-Context', 'spring-boot', 'Spring', 'actuator/health', 'spring-security'],\n            ['X-Powered-By: Express', 'express-session', 'connect.sid', 'express.static', 'express-validator'],\n            ['X-Powered-By: Phusion', 'Rails', 'csrf-token', 'action_controller', 'rails-ujs'],\n            ['X-AspNet-Version', 'ASP.NET', '__VIEWSTATE', '__EVENTVALIDATION', 'aspnetcore-'],\n            ['Werkzeug', 'Flask', 'flask-login', 'flask-wtf', 'flask-session'],\n        ]\n        \n        count = 0\n        batch_data = []\n        \n        for i in range(200):  # 生成 200 条 EHole 指纹\n            cms = f'{random.choice(cms_templates)}-{random.randint(1000, 9999)}'\n            method = random.choice(methods)\n            location = random.choice(locations)\n            keywords = random.choice(keyword_templates) + [f'custom-keyword-{random.randint(10000, 99999)}' for _ in range(random.randint(3, 8))]\n            is_important = random.choice([True, False])\n            fp_type = random.choice(types)\n            \n            batch_data.append((\n                cms, method, location, json.dumps(keywords), is_important, fp_type\n            ))\n            count += 1\n        \n        if batch_data:\n            execute_values(cur, \"\"\"\n                INSERT INTO ehole_fingerprint (cms, method, location, keyword, is_important, type, created_at)\n                VALUES %s\n                ON CONFLICT DO NOTHING\n            \"\"\", batch_data, template=\"(%s, %s, %s, %s, %s, %s, NOW())\")\n        \n        print(f\"  ✓ 创建了 {count} 个 EHole 指纹\\n\")\n\n    def create_goby_fingerprints(self):\n        \"\"\"创建 Goby 指纹数据\"\"\"\n        print(\"🔍 创建 Goby 指纹...\")\n        cur = self.conn.cursor()\n        \n        # 产品名称模板（长名称）\n        name_templates = [\n            'Apache-Tomcat-Java-Servlet-Container-Application-Server-Enterprise',\n            'Nginx-High-Performance-Web-Server-Reverse-Proxy-Load-Balancer',\n            'Microsoft-Exchange-Server-Email-Collaboration-Platform-Enterprise',\n            'VMware-vCenter-Server-Virtual-Infrastructure-Management-Platform',\n            'Cisco-Adaptive-Security-Appliance-Firewall-VPN-Concentrator',\n            'Fortinet-FortiGate-Next-Generation-Firewall-Security-Platform',\n            'Palo-Alto-Networks-Firewall-Threat-Prevention-Platform',\n            'F5-BIG-IP-Application-Delivery-Controller-Load-Balancer',\n            'Citrix-NetScaler-Application-Delivery-Controller-Gateway',\n            'Juniper-Networks-SRX-Series-Services-Gateway-Firewall',\n            'Oracle-WebLogic-Server-Java-Enterprise-Application-Platform',\n            'IBM-WebSphere-Application-Server-Java-EE-Enterprise-Edition',\n            'SAP-NetWeaver-Application-Server-Business-Suite-Platform',\n            'Adobe-Experience-Manager-Content-Management-System-Enterprise',\n            'Atlassian-Confluence-Team-Collaboration-Wiki-Platform-Server',\n            'Atlassian-Jira-Project-Issue-Tracking-Software-Server-Edition',\n            'GitLab-DevOps-Platform-Source-Code-Management-CI-CD-Pipeline',\n            'Jenkins-Automation-Server-Continuous-Integration-Deployment',\n            'SonarQube-Code-Quality-Security-Analysis-Platform-Enterprise',\n            'Elasticsearch-Distributed-Search-Analytics-Engine-Cluster',\n            'Kibana-Data-Visualization-Dashboard-Elasticsearch-Frontend',\n            'Grafana-Observability-Platform-Metrics-Logs-Traces-Dashboard',\n            'Prometheus-Monitoring-System-Time-Series-Database-Alerting',\n            'Zabbix-Enterprise-Monitoring-Solution-Network-Server-Cloud',\n            'Nagios-Infrastructure-Monitoring-Alerting-System-Enterprise',\n            'Redis-In-Memory-Data-Structure-Store-Cache-Message-Broker',\n            'MongoDB-Document-Database-NoSQL-Distributed-Cluster-Platform',\n            'PostgreSQL-Advanced-Open-Source-Relational-Database-System',\n            'MySQL-Enterprise-Relational-Database-Management-System-Server',\n            'Microsoft-SQL-Server-Relational-Database-Management-Platform',\n        ]\n        \n        # 逻辑表达式模板\n        logic_templates = [\n            '(a&&b)||c', 'a||(b&&c)', '(a||b)&&(c||d)', 'a&&b&&c', 'a||b||c',\n            '((a&&b)||c)&&d', '(a||(b&&c))&&(d||e)', 'a&&(b||c)&&d',\n            '(a&&b&&c)||(d&&e)', '((a||b)&&c)||(d&&e&&f)',\n        ]\n        \n        # 规则模板\n        rule_labels = ['body', 'header', 'title', 'server', 'cert', 'banner', 'protocol', 'port']\n        \n        count = 0\n        batch_data = []\n        \n        for i in range(200):  # 生成 200 条 Goby 指纹\n            name = f'{random.choice(name_templates)}-{random.randint(1000, 9999)}'\n            logic = random.choice(logic_templates)\n            \n            # 生成 5-15 条规则\n            num_rules = random.randint(5, 15)\n            rules = []\n            for j in range(num_rules):\n                rule = {\n                    'label': random.choice(rule_labels),\n                    'feature': f'feature-pattern-{random.randint(10000, 99999)}-{random.choice([\"regex\", \"keyword\", \"hash\"])}',\n                    'is_equal': random.choice([True, False])\n                }\n                rules.append(rule)\n            \n            batch_data.append((name, logic, json.dumps(rules)))\n            count += 1\n        \n        if batch_data:\n            execute_values(cur, \"\"\"\n                INSERT INTO goby_fingerprint (name, logic, rule, created_at)\n                VALUES %s\n                ON CONFLICT DO NOTHING\n            \"\"\", batch_data, template=\"(%s, %s, %s, NOW())\")\n        \n        print(f\"  ✓ 创建了 {count} 个 Goby 指纹\\n\")\n\n    def create_wappalyzer_fingerprints(self):\n        \"\"\"创建 Wappalyzer 指纹数据\"\"\"\n        print(\"🔍 创建 Wappalyzer 指纹...\")\n        cur = self.conn.cursor()\n        \n        # 应用名称模板（长名称）\n        name_templates = [\n            'WordPress-Content-Management-System-Open-Source-Blogging-Platform',\n            'React-JavaScript-Library-User-Interface-Components-Facebook',\n            'Vue-JS-Progressive-JavaScript-Framework-Reactive-Components',\n            'Angular-Platform-Web-Application-Framework-Google-TypeScript',\n            'jQuery-JavaScript-Library-DOM-Manipulation-Event-Handling',\n            'Bootstrap-CSS-Framework-Responsive-Design-Mobile-First',\n            'Tailwind-CSS-Utility-First-Framework-Rapid-UI-Development',\n            'Node-JS-JavaScript-Runtime-Server-Side-V8-Engine-Platform',\n            'Express-JS-Web-Application-Framework-Node-JS-Middleware',\n            'Django-Python-Web-Framework-Batteries-Included-MTV-Pattern',\n            'Flask-Python-Micro-Framework-Lightweight-WSGI-Application',\n            'Ruby-on-Rails-MVC-Framework-Convention-Over-Configuration',\n            'Laravel-PHP-Framework-Elegant-Syntax-Expressive-Beautiful',\n            'Spring-Framework-Java-Enterprise-Application-Development',\n            'ASP-NET-Core-Cross-Platform-Web-Framework-Microsoft-Open',\n            'Nginx-Web-Server-Reverse-Proxy-Load-Balancer-HTTP-Cache',\n            'Apache-HTTP-Server-Web-Server-Cross-Platform-Open-Source',\n            'Cloudflare-CDN-DDoS-Protection-Web-Application-Firewall',\n            'Amazon-Web-Services-Cloud-Computing-Platform-Infrastructure',\n            'Google-Cloud-Platform-Cloud-Computing-Services-Infrastructure',\n            'Microsoft-Azure-Cloud-Computing-Service-Platform-Enterprise',\n            'Docker-Container-Platform-Application-Deployment-Orchestration',\n            'Kubernetes-Container-Orchestration-Platform-Cloud-Native',\n            'Elasticsearch-Search-Analytics-Engine-Distributed-RESTful',\n            'Redis-In-Memory-Data-Store-Cache-Message-Broker-Database',\n            'MongoDB-Document-Database-NoSQL-Scalable-High-Performance',\n            'PostgreSQL-Object-Relational-Database-System-Open-Source',\n            'MySQL-Relational-Database-Management-System-Oracle-Open',\n            'GraphQL-Query-Language-API-Runtime-Data-Fetching-Facebook',\n            'Webpack-Module-Bundler-JavaScript-Asset-Pipeline-Build-Tool',\n        ]\n        \n        # 分类 ID\n        cats_options = [\n            [1, 2, 3], [4, 5], [6, 7, 8, 9], [10, 11, 12], [13, 14, 15, 16],\n            [17, 18], [19, 20, 21], [22, 23, 24, 25], [26, 27], [28, 29, 30],\n        ]\n        \n        # 描述模板\n        descriptions = [\n            'A powerful and flexible content management system designed for enterprise-level web applications with extensive plugin ecosystem and community support.',\n            'Modern JavaScript framework for building interactive user interfaces with component-based architecture and virtual DOM for optimal performance.',\n            'High-performance web server and reverse proxy with advanced load balancing, caching, and security features for production deployments.',\n            'Comprehensive cloud computing platform providing infrastructure as a service, platform as a service, and software as a service solutions.',\n            'Enterprise-grade database management system with ACID compliance, advanced security features, and horizontal scaling capabilities.',\n            'Container orchestration platform for automating deployment, scaling, and management of containerized applications across clusters.',\n            'Full-stack web application framework with built-in ORM, authentication, and admin interface for rapid development.',\n            'Lightweight and modular CSS framework with utility classes for building responsive and customizable user interfaces.',\n            'Real-time search and analytics engine with distributed architecture for handling large-scale data processing workloads.',\n            'In-memory data structure store supporting various data types with persistence options and pub/sub messaging capabilities.',\n        ]\n        \n        count = 0\n        batch_data = []\n        \n        for i in range(200):  # 生成 200 条 Wappalyzer 指纹\n            name = f'{random.choice(name_templates)}-{random.randint(1000, 9999)}'\n            cats = random.choice(cats_options)\n            \n            # 生成 cookies 规则\n            cookies = {}\n            for j in range(random.randint(2, 5)):\n                cookies[f'cookie_name_{j}'] = f'regex_pattern_{random.randint(1000, 9999)}'\n            \n            # 生成 headers 规则\n            headers = {}\n            header_names = ['X-Powered-By', 'Server', 'X-Generator', 'X-Framework', 'X-Application']\n            for h in random.sample(header_names, random.randint(2, 4)):\n                headers[h] = f'pattern_{random.randint(1000, 9999)}'\n            \n            # 生成 script_src 规则\n            script_src = [f'/js/lib/framework-{random.randint(100, 999)}.min.js' for _ in range(random.randint(3, 8))]\n            \n            # 生成 js 变量规则\n            js_vars = [f'window.Framework{random.randint(100, 999)}' for _ in range(random.randint(2, 6))]\n            \n            # 生成 implies 依赖\n            implies = [f'Dependency-{random.randint(100, 999)}' for _ in range(random.randint(1, 4))]\n            \n            # 生成 meta 规则\n            meta = {}\n            meta_names = ['generator', 'framework', 'application-name', 'author', 'description']\n            for m in random.sample(meta_names, random.randint(2, 4)):\n                meta[m] = f'meta_pattern_{random.randint(1000, 9999)}'\n            \n            # 生成 html 规则\n            html = [f'<div class=\"framework-{random.randint(100, 999)}\">' for _ in range(random.randint(3, 7))]\n            \n            description = random.choice(descriptions)\n            website = f'https://www.example-framework-{random.randint(1000, 9999)}.com'\n            cpe = f'cpe:/a:vendor:product:{random.randint(1, 10)}.{random.randint(0, 9)}.{random.randint(0, 9)}'\n            \n            batch_data.append((\n                name, json.dumps(cats), json.dumps(cookies), json.dumps(headers),\n                json.dumps(script_src), json.dumps(js_vars), json.dumps(implies),\n                json.dumps(meta), json.dumps(html), description, website, cpe\n            ))\n            count += 1\n        \n        if batch_data:\n            execute_values(cur, \"\"\"\n                INSERT INTO wappalyzer_fingerprint (\n                    name, cats, cookies, headers, script_src, js, implies,\n                    meta, html, description, website, cpe, created_at\n                ) VALUES %s\n                ON CONFLICT DO NOTHING\n            \"\"\", batch_data, template=\"(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, NOW())\")\n        \n        print(f\"  ✓ 创建了 {count} 个 Wappalyzer 指纹\\n\")\n\n    def create_fingers_fingerprints(self):\n        \"\"\"创建 Fingers 指纹数据\"\"\"\n        print(\"🔍 创建 Fingers 指纹...\")\n        cur = self.conn.cursor()\n        \n        # 应用名称模板（长名称）\n        name_templates = [\n            'Apache-HTTP-Server-Web-Application-Platform-Open-Source-Software',\n            'Nginx-High-Performance-Web-Server-Reverse-Proxy-Load-Balancer',\n            'Microsoft-IIS-Internet-Information-Services-Windows-Web-Server',\n            'Tomcat-Java-Servlet-Container-Apache-Application-Server-Platform',\n            'WordPress-Content-Management-System-Blogging-Platform-PHP-MySQL',\n            'Drupal-CMS-Content-Management-Framework-PHP-Community-Platform',\n            'Joomla-Open-Source-CMS-Web-Content-Management-System-Framework',\n            'Laravel-PHP-Framework-Web-Application-Development-MVC-Pattern',\n            'Django-Python-Web-Framework-High-Level-MTV-Architecture-Pattern',\n            'Ruby-on-Rails-Web-Application-Framework-MVC-Convention-Configuration',\n            'Express-JS-Node-JS-Web-Application-Framework-Minimal-Flexible',\n            'Spring-Boot-Java-Framework-Microservices-Enterprise-Application',\n            'ASP-NET-Core-Cross-Platform-Web-Framework-Microsoft-Open-Source',\n            'React-JavaScript-Library-Building-User-Interfaces-Facebook-Meta',\n            'Vue-JS-Progressive-JavaScript-Framework-Web-Application-Development',\n            'Angular-TypeScript-Platform-Framework-Web-Applications-Google',\n            'jQuery-JavaScript-Library-DOM-Manipulation-Ajax-Event-Handling',\n            'Bootstrap-CSS-Framework-Responsive-Mobile-First-Web-Development',\n            'Tailwind-CSS-Utility-First-Framework-Rapid-UI-Development-Tool',\n            'Docker-Container-Platform-Application-Deployment-Virtualization',\n            'Kubernetes-Container-Orchestration-Platform-Cloud-Native-Apps',\n            'Redis-In-Memory-Data-Structure-Store-Database-Cache-Broker',\n            'MongoDB-Document-NoSQL-Database-Scalable-High-Performance',\n            'PostgreSQL-Relational-Database-Management-System-Open-Source',\n            'MySQL-Database-Management-System-Relational-Database-Oracle',\n            'Elasticsearch-Search-Analytics-Engine-Distributed-RESTful-API',\n            'RabbitMQ-Message-Broker-Advanced-Message-Queuing-Protocol',\n            'Jenkins-Automation-Server-Continuous-Integration-Deployment',\n            'GitLab-DevOps-Platform-Git-Repository-CI-CD-Pipeline-Management',\n            'Grafana-Observability-Platform-Metrics-Visualization-Dashboard',\n        ]\n        \n        # 标签模板\n        tag_options = [\n            ['web-server', 'http', 'apache', 'linux'],\n            ['web-server', 'reverse-proxy', 'nginx', 'high-performance'],\n            ['web-server', 'windows', 'microsoft', 'iis'],\n            ['cms', 'php', 'wordpress', 'blog', 'mysql'],\n            ['cms', 'php', 'drupal', 'content-management'],\n            ['framework', 'php', 'laravel', 'mvc', 'modern'],\n            ['framework', 'python', 'django', 'full-stack'],\n            ['framework', 'ruby', 'rails', 'mvc', 'convention'],\n            ['framework', 'javascript', 'nodejs', 'express', 'backend'],\n            ['framework', 'java', 'spring', 'enterprise', 'microservices'],\n            ['framework', 'dotnet', 'aspnet', 'microsoft', 'cross-platform'],\n            ['library', 'javascript', 'react', 'frontend', 'ui'],\n            ['framework', 'javascript', 'vue', 'progressive', 'reactive'],\n            ['framework', 'typescript', 'angular', 'google', 'spa'],\n            ['database', 'nosql', 'mongodb', 'document', 'json'],\n            ['database', 'relational', 'postgresql', 'sql', 'open-source'],\n            ['database', 'relational', 'mysql', 'sql', 'oracle'],\n            ['cache', 'database', 'redis', 'in-memory', 'key-value'],\n            ['search', 'analytics', 'elasticsearch', 'distributed', 'restful'],\n            ['container', 'docker', 'virtualization', 'deployment'],\n        ]\n        \n        # 规则模板\n        rule_templates = [\n            # favicon hash 规则\n            [{'method': 'faviconhash', 'favicon': f'-{random.randint(1000000000, 9999999999)}'}],\n            # keyword 规则\n            [{'method': 'keyword', 'keyword': ['X-Powered-By', 'Server', 'X-Generator']}],\n            # 混合规则\n            [\n                {'method': 'keyword', 'keyword': ['content=\"WordPress', 'wp-content/', 'wp-includes/']},\n                {'method': 'faviconhash', 'favicon': f'-{random.randint(1000000000, 9999999999)}'}\n            ],\n            # header 规则\n            [{'method': 'keyword', 'keyword': ['Server: nginx', 'X-Powered-By: PHP']}],\n            # body 规则\n            [{'method': 'keyword', 'keyword': ['<meta name=\"generator\"', 'Powered by', 'Built with']}],\n        ]\n        \n        # 端口模板\n        port_options = [\n            [80, 443],\n            [80, 443, 8080, 8443],\n            [80, 443, 8000, 8080, 8443],\n            [3000, 3001, 5000],\n            [8080, 8081, 8888, 9000],\n            [443, 8443, 9443],\n            [],  # 空数组\n        ]\n        \n        count = 0\n        batch_data = []\n        \n        for i in range(200):  # 生成 200 条 Fingers 指纹\n            name = f'{random.choice(name_templates)}-{random.randint(1000, 9999)}'\n            link = f'https://www.example-{random.randint(1000, 9999)}.com'\n            rule = random.choice(rule_templates)\n            tag = random.choice(tag_options)\n            focus = random.choice([True, False])\n            default_port = random.choice(port_options)\n            \n            batch_data.append((\n                name, link, json.dumps(rule), json.dumps(tag), focus, json.dumps(default_port)\n            ))\n            count += 1\n        \n        if batch_data:\n            execute_values(cur, \"\"\"\n                INSERT INTO fingers_fingerprint (name, link, rule, tag, focus, default_port, created_at)\n                VALUES %s\n                ON CONFLICT (name) DO NOTHING\n            \"\"\", batch_data, template=\"(%s, %s, %s, %s, %s, %s, NOW())\")\n        \n        print(f\"  ✓ 创建了 {count} 个 Fingers 指纹\\n\")\n\n    def create_fingerprinthub_fingerprints(self):\n        \"\"\"创建 FingerPrintHub 指纹数据\"\"\"\n        print(\"🔍 创建 FingerPrintHub 指纹...\")\n        cur = self.conn.cursor()\n        \n        # FP ID 前缀\n        fp_id_prefixes = [\n            'web', 'cms', 'framework', 'server', 'database', 'cache', 'cdn',\n            'waf', 'load-balancer', 'proxy', 'api', 'admin', 'monitoring'\n        ]\n        \n        # 应用名称模板\n        name_templates = [\n            'Apache-HTTP-Server-Detection-Web-Platform-Fingerprint',\n            'Nginx-Web-Server-Identification-Reverse-Proxy-Detection',\n            'WordPress-CMS-Detection-Content-Management-System-Fingerprint',\n            'Drupal-CMS-Identification-Web-Content-Platform-Detection',\n            'Joomla-CMS-Detection-Web-Content-Management-Framework',\n            'Laravel-Framework-Detection-PHP-Web-Application-Platform',\n            'Django-Framework-Identification-Python-Web-Framework-Detection',\n            'Spring-Boot-Framework-Detection-Java-Enterprise-Application',\n            'React-Library-Detection-JavaScript-UI-Framework-Fingerprint',\n            'Vue-JS-Framework-Detection-Progressive-JavaScript-Platform',\n            'Angular-Framework-Identification-TypeScript-Web-Platform',\n            'Docker-Container-Detection-Virtualization-Platform-Fingerprint',\n            'Kubernetes-Orchestration-Detection-Container-Management-Platform',\n            'Redis-Cache-Detection-In-Memory-Database-Fingerprint',\n            'MongoDB-Database-Detection-NoSQL-Document-Store-Platform',\n            'PostgreSQL-Database-Detection-Relational-Database-System',\n            'MySQL-Database-Detection-Relational-Database-Management',\n            'Elasticsearch-Search-Detection-Analytics-Engine-Platform',\n            'Jenkins-CI-CD-Detection-Automation-Server-Platform',\n            'GitLab-DevOps-Detection-Version-Control-Platform-System',\n            'Grafana-Monitoring-Detection-Observability-Platform-Dashboard',\n            'Prometheus-Monitoring-Detection-Time-Series-Database-System',\n            'Kibana-Visualization-Detection-Data-Dashboard-Platform',\n            'Cloudflare-CDN-Detection-Web-Application-Firewall-Platform',\n            'Akamai-CDN-Detection-Content-Delivery-Network-Platform',\n            'AWS-CloudFront-CDN-Detection-Amazon-Web-Services-Platform',\n            'Microsoft-IIS-Detection-Internet-Information-Services-Server',\n            'Tomcat-Server-Detection-Java-Servlet-Container-Platform',\n            'JBoss-Server-Detection-Enterprise-Application-Platform',\n            'WebLogic-Server-Detection-Oracle-Application-Server-Platform',\n        ]\n        \n        # 作者模板\n        authors = [\n            'security-research-team', 'fingerprint-detection-group', 'web-security-lab',\n            'cyber-threat-intelligence', 'vulnerability-research-team', 'security-automation-team',\n            'open-source-security', 'community-contributors', 'detection-engineering-team'\n        ]\n        \n        # 严重程度\n        severities = ['info', 'low', 'medium', 'high', 'critical']\n        \n        # metadata 模板\n        metadata_templates = [\n            {\n                'vendor': 'Apache Software Foundation',\n                'product': 'Apache HTTP Server',\n                'verified': True,\n                'max-request': 1,\n                'shodan-query': 'http.server:\"Apache\"'\n            },\n            {\n                'vendor': 'Nginx Inc',\n                'product': 'Nginx Web Server',\n                'verified': True,\n                'max-request': 1,\n                'shodan-query': 'http.server:\"nginx\"'\n            },\n            {\n                'vendor': 'WordPress',\n                'product': 'WordPress CMS',\n                'verified': True,\n                'max-request': 2,\n                'fofa-query': 'body=\"wp-content\"'\n            },\n            {\n                'vendor': 'Various',\n                'product': 'Web Framework',\n                'verified': False,\n                'max-request': 1\n            },\n        ]\n        \n        # HTTP 规则模板\n        http_templates = [\n            [{\n                'method': 'GET',\n                'path': ['{{BaseURL}}'],\n                'matchers': [{\n                    'type': 'word',\n                    'words': ['Server: nginx', 'X-Powered-By'],\n                    'condition': 'or'\n                }]\n            }],\n            [{\n                'method': 'GET',\n                'path': ['{{BaseURL}}/admin'],\n                'matchers': [{\n                    'type': 'status',\n                    'status': [200, 401, 403]\n                }]\n            }],\n            [{\n                'method': 'GET',\n                'path': ['{{BaseURL}}'],\n                'matchers': [{\n                    'type': 'word',\n                    'words': ['wp-content', 'wordpress'],\n                    'part': 'body',\n                    'condition': 'and'\n                }]\n            }],\n        ]\n        \n        # source_file 模板\n        source_files = [\n            'fingerprints/web-servers/apache.yaml',\n            'fingerprints/web-servers/nginx.yaml',\n            'fingerprints/cms/wordpress.yaml',\n            'fingerprints/cms/drupal.yaml',\n            'fingerprints/frameworks/laravel.yaml',\n            'fingerprints/frameworks/django.yaml',\n            'fingerprints/frameworks/spring.yaml',\n            'fingerprints/databases/mongodb.yaml',\n            'fingerprints/databases/postgresql.yaml',\n            'fingerprints/cache/redis.yaml',\n        ]\n        \n        count = 0\n        batch_data = []\n        \n        for i in range(200):  # 生成 200 条 FingerPrintHub 指纹\n            fp_id = f'{random.choice(fp_id_prefixes)}-detection-{random.randint(10000, 99999)}'\n            name = f'{random.choice(name_templates)}-{random.randint(1000, 9999)}'\n            author = random.choice(authors)\n            tags = ','.join(random.sample(['web', 'cms', 'framework', 'server', 'detection', 'fingerprint'], random.randint(2, 4)))\n            severity = random.choice(severities)\n            metadata = random.choice(metadata_templates).copy()\n            http = random.choice(http_templates)\n            source_file = random.choice(source_files)\n            \n            batch_data.append((\n                fp_id, name, author, tags, severity,\n                json.dumps(metadata), json.dumps(http), source_file\n            ))\n            count += 1\n        \n        if batch_data:\n            execute_values(cur, \"\"\"\n                INSERT INTO fingerprinthub_fingerprint (\n                    fp_id, name, author, tags, severity, metadata, http, source_file, created_at\n                )\n                VALUES %s\n                ON CONFLICT (fp_id) DO NOTHING\n            \"\"\", batch_data, template=\"(%s, %s, %s, %s, %s, %s, %s, %s, NOW())\")\n        \n        print(f\"  ✓ 创建了 {count} 个 FingerPrintHub 指纹\\n\")\n\n    def create_arl_fingerprints(self):\n        \"\"\"创建 ARL 指纹数据\"\"\"\n        print(\"🔍 创建 ARL 指纹...\")\n        cur = self.conn.cursor()\n        \n        # 应用名称模板\n        name_templates = [\n            'Apache-HTTP-Server-Web-Platform-Application-Server',\n            'Nginx-High-Performance-Web-Server-Reverse-Proxy',\n            'Microsoft-IIS-Internet-Information-Services-Server',\n            'WordPress-Content-Management-System-Blogging-Platform',\n            'Drupal-Open-Source-CMS-Content-Management-Framework',\n            'Joomla-Web-Content-Management-System-Framework',\n            'Laravel-PHP-Web-Application-Framework-MVC-Pattern',\n            'Django-Python-Web-Framework-MTV-Architecture',\n            'Spring-Boot-Java-Enterprise-Application-Framework',\n            'Express-Node-JS-Web-Application-Framework-Minimal',\n            'React-JavaScript-Library-User-Interface-Components',\n            'Vue-JS-Progressive-JavaScript-Framework-Reactive',\n            'Angular-TypeScript-Web-Application-Framework-Google',\n            'Docker-Container-Platform-Application-Deployment',\n            'Kubernetes-Container-Orchestration-Cloud-Native',\n            'Redis-In-Memory-Database-Cache-Message-Broker',\n            'MongoDB-Document-NoSQL-Database-Scalable-Platform',\n            'PostgreSQL-Relational-Database-Management-System',\n            'MySQL-Database-Management-Relational-Database-Oracle',\n            'Elasticsearch-Search-Analytics-Engine-Distributed',\n            'Jenkins-Automation-Server-Continuous-Integration',\n            'GitLab-DevOps-Platform-Git-Repository-CI-CD-Pipeline',\n            'Grafana-Observability-Metrics-Visualization-Dashboard',\n            'Prometheus-Monitoring-Time-Series-Database-Alerting',\n            'RabbitMQ-Message-Broker-AMQP-Protocol-Queue-System',\n            'Tomcat-Java-Servlet-Container-Application-Server',\n            'JBoss-Enterprise-Application-Platform-Java-EE-Server',\n            'WebLogic-Oracle-Application-Server-Java-Enterprise',\n            'Cloudflare-CDN-DDoS-Protection-Web-Firewall-Platform',\n            'Amazon-CloudFront-CDN-Content-Delivery-Network-AWS',\n        ]\n        \n        # 规则表达式模板\n        rule_templates = [\n            # 简单规则\n            'header=\"Server\" && header=\"nginx\"',\n            'body=\"WordPress\" && body=\"wp-content\"',\n            'title=\"Admin Panel\" || title=\"Dashboard\"',\n            'header=\"X-Powered-By\" && header=\"PHP\"',\n            'body=\"Powered by\" && body=\"Laravel\"',\n            # 复杂规则\n            '(header=\"Server\" && header=\"Apache\") || (body=\"Apache\" && title=\"Apache\")',\n            '(body=\"wp-content\" && body=\"wp-includes\") || (header=\"X-Powered-By\" && header=\"WordPress\")',\n            '(title=\"Jenkins\" && body=\"Jenkins\") || (header=\"X-Jenkins\" && status=\"200\")',\n            '(body=\"Spring\" && body=\"Whitelabel Error Page\") || header=\"X-Application-Context\"',\n            '(body=\"React\" && body=\"react-dom\") || (body=\"__REACT\" && body=\"reactRoot\")',\n            # 带状态码规则\n            'status=\"200\" && body=\"nginx\" && title=\"Welcome to nginx\"',\n            'status=\"403\" && body=\"Apache\" && header=\"Server\"',\n            'status=\"401\" && header=\"WWW-Authenticate\" && body=\"Unauthorized\"',\n            # 多条件规则\n            'header=\"Server\" && (body=\"PHP\" || body=\"Laravel\" || body=\"Symfony\")',\n            'body=\"Django\" && (header=\"X-Frame-Options\" || body=\"csrfmiddlewaretoken\")',\n            '(title=\"GitLab\" && body=\"gitlab\") || (header=\"X-GitLab-Feature-Category\")',\n            # JSON API 规则\n            'body=\"{\\\\\"version\\\\\"\" && body=\"api\" && header=\"Content-Type\"',\n            'status=\"200\" && body=\"swagger\" && body=\"openapi\"',\n            # 错误页面规则\n            'status=\"404\" && body=\"Not Found\" && body=\"nginx\"',\n            'status=\"500\" && body=\"Internal Server Error\" && body=\"Apache\"',\n        ]\n        \n        count = 0\n        batch_data = []\n        \n        for i in range(200):  # 生成 200 条 ARL 指纹\n            name = f'{random.choice(name_templates)}-{random.randint(1000, 9999)}'\n            rule = random.choice(rule_templates)\n            \n            batch_data.append((name, rule))\n            count += 1\n        \n        if batch_data:\n            execute_values(cur, \"\"\"\n                INSERT INTO arl_fingerprint (name, rule, created_at)\n                VALUES %s\n                ON CONFLICT (name) DO NOTHING\n            \"\"\", batch_data, template=\"(%s, %s, NOW())\")\n        \n        print(f\"  ✓ 创建了 {count} 个 ARL 指纹\\n\")\n\n\nclass MillionDataGenerator:\n    \"\"\"\n    百万级数据生成器 - 用于测试 Dashboard 卡片溢出\n    \n    生成数据量：\n    - 子域名: 200,000\n    - 网站: 200,000\n    - 端点: 200,000\n    - IP (host_port_mapping): 200,000\n    - 漏洞: 200,000 (critical: 50k, high: 50k, medium: 50k, low: 30k, info: 20k)\n    - 目标: 1,000\n    - 历史统计: 7天\n    \"\"\"\n    \n    def __init__(self, clear: bool = False):\n        self.conn = psycopg2.connect(**DB_CONFIG)\n        self.conn.autocommit = False\n        self.clear = clear\n        \n    def run(self):\n        try:\n            if self.clear:\n                print(\"🗑️  清除现有数据...\")\n                self.clear_data()\n                \n            print(\"🚀 开始生成百万级测试数据(用于 Dashboard 溢出测试)...\\n\")\n            \n            target_ids = self.create_targets()\n            self.create_subdomains(target_ids)\n            self.create_websites(target_ids)\n            self.create_endpoints(target_ids)\n            self.create_host_port_mappings(target_ids)\n            self.create_vulnerabilities(target_ids)\n            self.create_statistics_history()  # 生成趋势图数据\n            self.update_asset_statistics()\n            \n            self.conn.commit()\n            print(\"\\n✅ 百万级测试数据生成完成！\")\n            print(\"📊 请刷新 Dashboard 页面查看效果\")\n        except Exception as e:\n            self.conn.rollback()\n            print(f\"\\n❌ 生成失败: {e}\")\n            raise\n        finally:\n            self.conn.close()\n\n    def clear_data(self):\n        \"\"\"清除所有测试数据\"\"\"\n        cur = self.conn.cursor()\n        tables = [\n            'vulnerability_snapshot', 'host_port_mapping_snapshot', 'directory_snapshot',\n            'endpoint_snapshot', 'website_snapshot', 'subdomain_snapshot',\n            'vulnerability', 'host_port_mapping', 'directory', 'endpoint',\n            'website', 'subdomain', 'scheduled_scan', 'scan',\n            'organization_targets', 'target', 'organization',\n            'statistics_history', 'asset_statistics',\n        ]\n        for table in tables:\n            try:\n                cur.execute(f\"DELETE FROM {table}\")\n            except Exception:\n                pass  # 表可能不存在\n        self.conn.commit()\n        print(\"  ✓ 数据清除完成\\n\")\n\n    def create_targets(self) -> list:\n        \"\"\"创建 1000 个扫描目标\"\"\"\n        print(\"🎯 创建扫描目标 (1,000 个)...\")\n        cur = self.conn.cursor()\n        \n        suffix = random.randint(1000, 9999)\n        domains = [\n            'example', 'test', 'demo', 'staging', 'production', 'api', 'app', 'web',\n            'portal', 'admin', 'dashboard', 'service', 'platform', 'cloud', 'data',\n            'analytics', 'security', 'enterprise', 'global', 'internal', 'external'\n        ]\n        tlds = ['.com', '.io', '.net', '.org', '.dev', '.app', '.cloud', '.tech']\n        \n        ids = []\n        for i in range(1000):\n            domain = f'{random.choice(domains)}-{suffix}-{i:04d}{random.choice(tlds)}'\n            cur.execute(\"\"\"\n                INSERT INTO target (name, type, created_at, deleted_at)\n                VALUES (%s, 'domain', NOW() - INTERVAL '%s days', NULL)\n                ON CONFLICT DO NOTHING\n                RETURNING id\n            \"\"\", (domain, random.randint(0, 365)))\n            row = cur.fetchone()\n            if row:\n                ids.append(row[0])\n                \n        print(f\"  ✓ 创建了 {len(ids)} 个扫描目标\\n\")\n        return ids\n\n    def create_subdomains(self, target_ids: list):\n        \"\"\"创建 200,000 个子域名\"\"\"\n        print(\"🌐 创建子域名 (200,000 个)...\")\n        cur = self.conn.cursor()\n        \n        prefixes = [\n            'api', 'admin', 'portal', 'dashboard', 'app', 'mobile', 'staging', 'dev',\n            'test', 'qa', 'uat', 'beta', 'alpha', 'demo', 'sandbox', 'internal',\n            'secure', 'auth', 'login', 'sso', 'oauth', 'identity', 'accounts',\n            'mail', 'smtp', 'imap', 'webmail', 'ftp', 'sftp', 'files', 'storage',\n            'cdn', 'static', 'assets', 'media', 'db', 'database', 'mysql', 'postgres',\n            'redis', 'mongo', 'elastic', 'vpn', 'remote', 'gateway', 'proxy',\n            'monitoring', 'metrics', 'grafana', 'prometheus', 'kibana', 'logs',\n            'jenkins', 'ci', 'cd', 'gitlab', 'jira', 'confluence', 'kubernetes', 'k8s',\n            'www', 'www2', 'www3', 'ns1', 'ns2', 'mx', 'mx1', 'mx2', 'autodiscover',\n        ]\n        secondary = ['', 'prod-', 'dev-', 'staging-', 'test-', 'us-', 'eu-', 'ap-']\n        \n        cur.execute(\"SELECT id, name FROM target WHERE type = 'domain' AND deleted_at IS NULL\")\n        domain_targets = cur.fetchall()\n        \n        count = 0\n        batch_data = []\n        batch_size = 50000  # 增加批量大小\n        target_count = 200000\n        per_target = target_count // len(domain_targets) + 1\n        \n        for target_id, target_name in domain_targets:\n            for i in range(per_target):\n                if count >= target_count:\n                    break\n                prefix = random.choice(prefixes)\n                sec = random.choice(secondary)\n                subdomain_name = f'{sec}{prefix}-{i:04d}.{target_name}'\n                batch_data.append((subdomain_name, target_id, random.randint(0, 90)))\n                count += 1\n                \n                if len(batch_data) >= batch_size:\n                    execute_values(cur, \"\"\"\n                        INSERT INTO subdomain (name, target_id, created_at)\n                        VALUES %s ON CONFLICT DO NOTHING\n                    \"\"\", batch_data, template=\"(%s, %s, NOW() - INTERVAL '%s days')\")\n                    self.conn.commit()  # 每批次提交\n                    batch_data = []\n                    print(f\"    ✓ {count:,} / {target_count:,}\")\n            if count >= target_count:\n                break\n        \n        if batch_data:\n            execute_values(cur, \"\"\"\n                INSERT INTO subdomain (name, target_id, created_at)\n                VALUES %s ON CONFLICT DO NOTHING\n            \"\"\", batch_data, template=\"(%s, %s, NOW() - INTERVAL '%s days')\")\n            self.conn.commit()\n                \n        print(f\"  ✓ 创建了 {count:,} 个子域名\\n\")\n\n    def create_websites(self, target_ids: list):\n        \"\"\"创建 200,000 个网站\"\"\"\n        print(\"🌍 创建网站 (200,000 个)...\")\n        cur = self.conn.cursor()\n        \n        cur.execute(\"SELECT id, name FROM target WHERE type = 'domain' AND deleted_at IS NULL\")\n        domain_targets = cur.fetchall()\n        \n        count = 0\n        batch_data = []\n        batch_size = 50000  # 增加批量大小\n        target_count = 200000\n        per_target = target_count // len(domain_targets) + 1\n        \n        for target_id, target_name in domain_targets:\n            for i in range(per_target):\n                if count >= target_count:\n                    break\n                # 生成固定 245 长度的 URL\n                url = generate_fixed_length_url(target_name, length=245, path_hint=f'million-website/{i:06d}')\n                \n                batch_data.append((\n                    url, target_id, target_name, f'Website Title {count}',\n                    'nginx/1.24.0', ['React', 'Node.js'],\n                    random.choice([200, 301, 403]), random.randint(1000, 50000),\n                    'text/html', '', '<!DOCTYPE html><html></html>'\n                ))\n                count += 1\n                \n                if len(batch_data) >= batch_size:\n                    execute_values(cur, \"\"\"\n                        INSERT INTO website (url, target_id, host, title, webserver, tech, \n                            status_code, content_length, content_type, location, response_body, \n                            vhost, response_headers, created_at)\n                        VALUES %s ON CONFLICT DO NOTHING\n                    \"\"\", batch_data, template=\"(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, NULL, '', NOW())\")\n                    self.conn.commit()\n                    batch_data = []\n                    print(f\"    ✓ {count:,} / {target_count:,}\")\n            if count >= target_count:\n                break\n        \n        if batch_data:\n            execute_values(cur, \"\"\"\n                INSERT INTO website (url, target_id, host, title, webserver, tech, \n                    status_code, content_length, content_type, location, response_body, \n                    vhost, response_headers, created_at)\n                VALUES %s ON CONFLICT DO NOTHING\n            \"\"\", batch_data, template=\"(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, NULL, '', NOW())\")\n            self.conn.commit()\n                \n        print(f\"  ✓ 创建了 {count:,} 个网站\\n\")\n\n    def create_endpoints(self, target_ids: list):\n        \"\"\"创建 200,000 个端点\"\"\"\n        print(\"🔗 创建端点 (200,000 个)...\")\n        cur = self.conn.cursor()\n        \n        paths = ['/api/v1/', '/api/v2/', '/admin/', '/portal/', '/graphql/', '/health/', '/metrics/']\n        \n        # 100字符长度的标题\n        titles = [\n            'Enterprise API Gateway - RESTful Service Documentation with OpenAPI 3.0 Specification and Interactive',\n            'User Authentication Service - OAuth 2.0 and SAML 2.0 Single Sign-On Integration Platform Dashboard',\n            'Payment Processing Gateway - PCI-DSS Compliant Transaction Management System Administration Panel',\n            'Content Delivery Network - Global Edge Cache Management and Real-time Analytics Dashboard Interface',\n            'Database Administration Console - PostgreSQL Cluster Management with Automated Backup and Recovery',\n        ]\n        \n        # 扩展的技术栈列表\n        all_techs = [\n            'React 18.2.0', 'Vue.js 3.4', 'Angular 17.1', 'Next.js 14.0', 'Node.js 20.10',\n            'Express 4.18', 'Python 3.12', 'Django 5.0', 'FastAPI 0.109', 'Go 1.21',\n            'PostgreSQL 16.1', 'MySQL 8.2', 'MongoDB 7.0', 'Redis 7.2', 'Elasticsearch 8.11',\n            'Kubernetes 1.28', 'Docker 24.0', 'Nginx 1.25', 'GraphQL 16.8', 'JWT',\n        ]\n        \n        # 扩展的 tags\n        all_tags = [\n            'debug', 'config', 'api', 'json', 'upload', 'file', 'admin', 'auth',\n            'secrets', 'credentials', 'backup', 'archive', 'trace', 'log', 'error',\n            'security', 'vulnerability', 'payment', 'user', 'internal', 'private',\n        ]\n        \n        cur.execute(\"SELECT id, name FROM target WHERE type = 'domain' AND deleted_at IS NULL\")\n        domain_targets = cur.fetchall()\n        \n        count = 0\n        batch_data = []\n        batch_size = 50000  # 增加批量大小\n        target_count = 200000\n        per_target = target_count // len(domain_targets) + 1\n        \n        for target_id, target_name in domain_targets:\n            for i in range(per_target):\n                if count >= target_count:\n                    break\n                # 生成固定 245 长度的 URL\n                url = generate_fixed_length_url(target_name, length=245, path_hint=f'million-endpoint/{i:06d}')\n                \n                # 生成 100 字符的标题\n                title = random.choice(titles)\n                \n                # 生成 10-20 个技术\n                num_techs = random.randint(10, 20)\n                tech_list = random.sample(all_techs, min(num_techs, len(all_techs)))\n                \n                # 生成 10-20 个 tags\n                num_tags = random.randint(10, 20)\n                tags = random.sample(all_tags, min(num_tags, len(all_tags)))\n                \n                batch_data.append((\n                    url, target_id, target_name, title,\n                    'nginx/1.24.0', random.choice([200, 201, 401, 403]),\n                    random.randint(100, 5000), 'application/json',\n                    tech_list, '', '{\"status\":\"ok\"}', None, tags\n                ))\n                count += 1\n                \n                if len(batch_data) >= batch_size:\n                    execute_values(cur, \"\"\"\n                        INSERT INTO endpoint (url, target_id, host, title, webserver, status_code,\n                            content_length, content_type, tech, location, response_body, vhost, \n                            matched_gf_patterns, response_headers, created_at)\n                        VALUES %s ON CONFLICT DO NOTHING\n                    \"\"\", batch_data, template=\"(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, '', NOW())\")\n                    self.conn.commit()\n                    batch_data = []\n                    print(f\"    ✓ {count:,} / {target_count:,}\")\n            if count >= target_count:\n                break\n        \n        if batch_data:\n            execute_values(cur, \"\"\"\n                INSERT INTO endpoint (url, target_id, host, title, webserver, status_code,\n                    content_length, content_type, tech, location, response_body, vhost, \n                    matched_gf_patterns, response_headers, created_at)\n                VALUES %s ON CONFLICT DO NOTHING\n            \"\"\", batch_data, template=\"(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, '', NOW())\")\n            self.conn.commit()\n                \n        print(f\"  ✓ 创建了 {count:,} 个端点\\n\")\n\n    def create_host_port_mappings(self, target_ids: list):\n        \"\"\"创建 200,000 个主机端口映射(用于 IP 统计)\"\"\"\n        print(\"🔌 创建主机端口映射 (200,000 个)...\")\n        cur = self.conn.cursor()\n        \n        ports = [22, 80, 443, 3306, 5432, 6379, 8080, 8443, 9000, 9200, 27017]\n        \n        cur.execute(\"SELECT id, name FROM target WHERE type = 'domain' AND deleted_at IS NULL\")\n        domain_targets = cur.fetchall()\n        \n        count = 0\n        batch_data = []\n        batch_size = 50000  # 增加批量大小\n        target_count = 200000\n        per_target = target_count // len(domain_targets) + 1\n        \n        for target_id, target_name in domain_targets:\n            for i in range(per_target):\n                if count >= target_count:\n                    break\n                ip = f'192.168.{random.randint(1, 254)}.{random.randint(1, 254)}'\n                port = random.choice(ports)\n                \n                batch_data.append((target_id, target_name, ip, port))\n                count += 1\n                \n                if len(batch_data) >= batch_size:\n                    execute_values(cur, \"\"\"\n                        INSERT INTO host_port_mapping (target_id, host, ip, port, created_at)\n                        VALUES %s ON CONFLICT DO NOTHING\n                    \"\"\", batch_data, template=\"(%s, %s, %s, %s, NOW())\")\n                    self.conn.commit()\n                    batch_data = []\n                    print(f\"    ✓ {count:,} / {target_count:,}\")\n            if count >= target_count:\n                break\n        \n        if batch_data:\n            execute_values(cur, \"\"\"\n                INSERT INTO host_port_mapping (target_id, host, ip, port, created_at)\n                VALUES %s ON CONFLICT DO NOTHING\n            \"\"\", batch_data, template=\"(%s, %s, %s, %s, NOW())\")\n            self.conn.commit()\n                \n        print(f\"  ✓ 创建了 {count:,} 个主机端口映射\\n\")\n\n    def create_vulnerabilities(self, target_ids: list):\n        \"\"\"创建 200,000 个漏洞 (critical: 50k, high: 50k, medium: 50k, low: 30k, info: 20k)\"\"\"\n        print(\"🐛 创建漏洞 (200,000 个)...\")\n        cur = self.conn.cursor()\n        \n        vuln_types = [\n            'sql-injection-authentication-bypass-vulnerability-',\n            'cross-site-scripting-xss-stored-persistent-attack-',\n            'server-side-request-forgery-ssrf-internal-access--',\n            'remote-code-execution-rce-command-injection-flaw--',\n            'local-file-inclusion-lfi-path-traversal-exploit---',\n            'xml-external-entity-xxe-injection-vulnerability---',\n            'cross-site-request-forgery-csrf-token-validation--',\n            'insecure-direct-object-reference-idor-access-ctrl-',\n        ]\n        sources = [\n            'nuclei-vulnerability-scanner--',\n            'dalfox-xss-parameter-analysis-',\n            'sqlmap-sql-injection-testing--',\n            'burp-suite-professional-scan--',\n            'owasp-zap-security-scanner----',\n        ]\n        \n        # 按严重程度分配数量\n        severity_counts = {\n            'critical': 50000,\n            'high': 50000,\n            'medium': 50000,\n            'low': 30000,\n            'info': 20000,\n        }\n        \n        cur.execute(\"SELECT id, name FROM target WHERE type = 'domain' AND deleted_at IS NULL\")\n        domain_targets = cur.fetchall()\n        \n        count = 0\n        batch_data = []\n        batch_size = 50000  # 增加批量大小\n        \n        for severity, target_count in severity_counts.items():\n            print(f\"    创建 {severity} 级别漏洞: {target_count:,} 个\")\n            cvss_ranges = {\n                'critical': (9.0, 10.0), 'high': (7.0, 8.9), 'medium': (4.0, 6.9),\n                'low': (0.1, 3.9), 'info': (0.0, 0.0)\n            }\n            cvss_range = cvss_ranges.get(severity, (0.0, 10.0))\n            \n            severity_count = 0\n            per_target = target_count // len(domain_targets) + 1\n            \n            for target_id, target_name in domain_targets:\n                for i in range(per_target):\n                    if severity_count >= target_count:\n                        break\n                    \n                    cvss_score = round(random.uniform(*cvss_range), 1)\n                    # 生成固定 245 长度的 URL\n                    url = generate_fixed_length_url(target_name, length=245, path_hint=f'million-vuln/{severity_count:06d}')\n                    \n                    # 生成固定 300 长度的描述\n                    description = generate_fixed_length_text(length=300, text_type='description')\n                    \n                    batch_data.append((\n                        target_id, url, random.choice(vuln_types), severity,\n                        random.choice(sources), cvss_score,\n                        description,\n                        json.dumps({'template': f'CVE-2024-{random.randint(10000, 99999)}'})\n                    ))\n                    severity_count += 1\n                    count += 1\n                    \n                    if len(batch_data) >= batch_size:\n                        execute_values(cur, \"\"\"\n                            INSERT INTO vulnerability (target_id, url, vuln_type, severity, source,\n                                cvss_score, description, raw_output, created_at)\n                            VALUES %s\n                        \"\"\", batch_data, template=\"(%s, %s, %s, %s, %s, %s, %s, %s, NOW())\")\n                        self.conn.commit()\n                        batch_data = []\n                        print(f\"      ✓ {severity_count:,} / {target_count:,}\")\n                if severity_count >= target_count:\n                    break\n        \n        if batch_data:\n            execute_values(cur, \"\"\"\n                INSERT INTO vulnerability (target_id, url, vuln_type, severity, source,\n                    cvss_score, description, raw_output, created_at)\n                VALUES %s\n            \"\"\", batch_data, template=\"(%s, %s, %s, %s, %s, %s, %s, %s, NOW())\")\n            self.conn.commit()\n                \n        print(f\"  ✓ 创建了 {count:,} 个漏洞\\n\")\n\n    def create_statistics_history(self):\n        \"\"\"创建 7 天的统计历史数据(用于趋势图)\"\"\"\n        print(\"📈 创建统计历史数据 (7 天)...\")\n        cur = self.conn.cursor()\n        \n        # 先清除旧的历史数据\n        cur.execute(\"DELETE FROM statistics_history\")\n        \n        # 生成 7 天的历史数据，数值逐渐增长\n        base_values = {\n            'total_targets': 800,\n            'total_subdomains': 150000,\n            'total_ips': 150000,\n            'total_endpoints': 150000,\n            'total_websites': 150000,\n            'total_vulns': 150000,\n        }\n        \n        for i in range(7):\n            date = datetime.now().date() - timedelta(days=6-i)\n            growth_factor = 1 + (i * 0.05)  # 每天增长 5%\n            \n            total_targets = int(base_values['total_targets'] * growth_factor)\n            total_subdomains = int(base_values['total_subdomains'] * growth_factor)\n            total_ips = int(base_values['total_ips'] * growth_factor)\n            total_endpoints = int(base_values['total_endpoints'] * growth_factor)\n            total_websites = int(base_values['total_websites'] * growth_factor)\n            total_vulns = int(base_values['total_vulns'] * growth_factor)\n            total_assets = total_subdomains + total_ips + total_endpoints + total_websites\n            \n            cur.execute(\"\"\"\n                INSERT INTO statistics_history (\n                    date, total_targets, total_subdomains, total_ips, total_endpoints,\n                    total_websites, total_vulns, total_assets, created_at, updated_at\n                ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, NOW(), NOW())\n                ON CONFLICT (date) DO UPDATE SET\n                    total_targets = EXCLUDED.total_targets,\n                    total_subdomains = EXCLUDED.total_subdomains,\n                    total_ips = EXCLUDED.total_ips,\n                    total_endpoints = EXCLUDED.total_endpoints,\n                    total_websites = EXCLUDED.total_websites,\n                    total_vulns = EXCLUDED.total_vulns,\n                    total_assets = EXCLUDED.total_assets,\n                    updated_at = NOW()\n            \"\"\", (date, total_targets, total_subdomains, total_ips, total_endpoints,\n                  total_websites, total_vulns, total_assets))\n        \n        print(f\"  ✓ 创建了 7 天的统计历史数据\\n\")\n\n    def update_asset_statistics(self):\n        \"\"\"更新资产统计表(Dashboard 卡片使用)\"\"\"\n        print(\"📊 更新资产统计表...\")\n        cur = self.conn.cursor()\n        \n        # 统计实际数据\n        cur.execute(\"SELECT COUNT(*) FROM target WHERE deleted_at IS NULL\")\n        total_targets = cur.fetchone()[0]\n        \n        cur.execute(\"SELECT COUNT(*) FROM subdomain\")\n        total_subdomains = cur.fetchone()[0]\n        \n        cur.execute(\"SELECT COUNT(DISTINCT ip) FROM host_port_mapping\")\n        total_ips = cur.fetchone()[0]\n        \n        cur.execute(\"SELECT COUNT(*) FROM endpoint\")\n        total_endpoints = cur.fetchone()[0]\n        \n        cur.execute(\"SELECT COUNT(*) FROM website\")\n        total_websites = cur.fetchone()[0]\n        \n        cur.execute(\"SELECT COUNT(*) FROM vulnerability\")\n        total_vulns = cur.fetchone()[0]\n        \n        total_assets = total_subdomains + total_ips + total_endpoints + total_websites\n        \n        # 更新或插入统计数据\n        cur.execute(\"\"\"\n            INSERT INTO asset_statistics (\n                id, total_targets, total_subdomains, total_ips, total_endpoints,\n                total_websites, total_vulns, total_assets,\n                prev_targets, prev_subdomains, prev_ips, prev_endpoints,\n                prev_websites, prev_vulns, prev_assets,\n                updated_at\n            ) VALUES (\n                1, %s, %s, %s, %s, %s, %s, %s,\n                %s, %s, %s, %s, %s, %s, %s, NOW()\n            )\n            ON CONFLICT (id) DO UPDATE SET\n                total_targets = EXCLUDED.total_targets,\n                total_subdomains = EXCLUDED.total_subdomains,\n                total_ips = EXCLUDED.total_ips,\n                total_endpoints = EXCLUDED.total_endpoints,\n                total_websites = EXCLUDED.total_websites,\n                total_vulns = EXCLUDED.total_vulns,\n                total_assets = EXCLUDED.total_assets,\n                prev_targets = asset_statistics.total_targets,\n                prev_subdomains = asset_statistics.total_subdomains,\n                prev_ips = asset_statistics.total_ips,\n                prev_endpoints = asset_statistics.total_endpoints,\n                prev_websites = asset_statistics.total_websites,\n                prev_vulns = asset_statistics.total_vulns,\n                prev_assets = asset_statistics.total_assets,\n                updated_at = NOW()\n        \"\"\", (total_targets, total_subdomains, total_ips, total_endpoints,\n              total_websites, total_vulns, total_assets,\n              int(total_targets * 0.9), int(total_subdomains * 0.9), int(total_ips * 0.9),\n              int(total_endpoints * 0.9), int(total_websites * 0.9), int(total_vulns * 0.9),\n              int(total_assets * 0.9)))\n        \n        print(f\"  ✓ 统计数据已更新:\")\n        print(f\"    - 目标: {total_targets:,}\")\n        print(f\"    - 子域名: {total_subdomains:,}\")\n        print(f\"    - IP: {total_ips:,}\")\n        print(f\"    - 端点: {total_endpoints:,}\")\n        print(f\"    - 网站: {total_websites:,}\")\n        print(f\"    - 漏洞: {total_vulns:,}\")\n        print(f\"    - 总资产: {total_assets:,}\\n\")\n\n\ndef main():\n    parser = argparse.ArgumentParser(description=\"直接通过 SQL 生成测试数据\")\n    parser.add_argument('--clear', action='store_true', help='清除现有数据后重新生成')\n    parser.add_argument('--million', action='store_true', help='生成百万级数据(用于 Dashboard 溢出测试)')\n    args = parser.parse_args()\n    \n    if args.million:\n        generator = MillionDataGenerator(clear=args.clear)\n    else:\n        generator = TestDataGenerator(clear=args.clear)\n    generator.run()\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "backend/scripts/performance/monitor_pg_performance.sh",
    "content": "#!/bin/bash\n\n# PostgreSQL 性能监控脚本\n# 用法：./monitor_pg_performance.sh [数据库名] [间隔秒数]\n\n# 尝试从 .env 加载数据库配置\nSCRIPT_DIR=\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" && pwd )\"\nPROJECT_DIR=\"$(dirname \"$SCRIPT_DIR\")\"\n\nif [ -f \"$PROJECT_DIR/.env\" ]; then\n    export PGHOST=$(grep \"^DB_HOST=\" \"$PROJECT_DIR/.env\" | cut -d '=' -f2)\n    export PGPORT=$(grep \"^DB_PORT=\" \"$PROJECT_DIR/.env\" | cut -d '=' -f2)\n    export PGUSER=$(grep \"^DB_USER=\" \"$PROJECT_DIR/.env\" | cut -d '=' -f2)\n    export PGPASSWORD=$(grep \"^DB_PASSWORD=\" \"$PROJECT_DIR/.env\" | cut -d '=' -f2)\n    PGDATABASE=$(grep \"^DB_NAME=\" \"$PROJECT_DIR/.env\" | cut -d '=' -f2)\nfi\n\nDB_NAME=${1:-${PGDATABASE:-xingrin}}\nINTERVAL=${2:-2}\n\necho \"========================================\"\necho \"  PostgreSQL 性能监控\"\necho \"========================================\"\necho \"数据库: $DB_NAME\"\necho \"刷新间隔: ${INTERVAL}秒\"\necho \"按 Ctrl+C 停止监控\"\necho \"========================================\"\necho \"\"\n\n# 颜色定义\nRED='\\033[0;31m'\nGREEN='\\033[0;32m'\nYELLOW='\\033[1;33m'\nBLUE='\\033[0;34m'\nNC='\\033[0m' # No Color\n\nwhile true; do\n    clear\n    echo -e \"${BLUE}========================================\"\n    echo \"  PostgreSQL 实时性能监控\"\n    echo \"========================================${NC}\"\n    echo \"时间: $(date '+%Y-%m-%d %H:%M:%S')\"\n    echo \"\"\n    \n    # 1. 数据库连接数\n    echo -e \"${GREEN}[1] 连接数统计${NC}\"\n    psql -d $DB_NAME -c \"\n        SELECT \n            count(*) as total_connections,\n            count(*) FILTER (WHERE state = 'active') as active,\n            count(*) FILTER (WHERE state = 'idle') as idle,\n            count(*) FILTER (WHERE state = 'idle in transaction') as idle_in_transaction\n        FROM pg_stat_activity \n        WHERE datname = '$DB_NAME';\n    \" -t\n    \n    # 2. 当前活跃查询\n    echo -e \"${GREEN}[2] 活跃查询 (Top 5)${NC}\"\n    psql -d $DB_NAME -c \"\n        SELECT \n            pid,\n            usename,\n            application_name,\n            state,\n            EXTRACT(EPOCH FROM (now() - query_start))::int as duration_sec,\n            LEFT(query, 60) as query_preview\n        FROM pg_stat_activity \n        WHERE datname = '$DB_NAME' \n          AND state != 'idle'\n          AND query NOT LIKE '%pg_stat_activity%'\n        ORDER BY query_start \n        LIMIT 5;\n    \"\n    \n    # 3. 表级统计（插入速度）\n    echo -e \"${GREEN}[3] 表插入统计${NC}\"\n    psql -d $DB_NAME -c \"\n        SELECT \n            schemaname || '.' || relname as table_name,\n            n_tup_ins as inserts,\n            n_tup_upd as updates,\n            n_tup_del as deletes,\n            n_live_tup as live_rows\n        FROM pg_stat_user_tables \n        WHERE schemaname = 'public'\n          AND relname IN ('subdomain', 'ip_address', 'port', 'website', 'endpoint', 'directory')\n        ORDER BY n_tup_ins DESC;\n    \"\n    \n    # 4. 锁等待\n    echo -e \"${GREEN}[4] 锁等待情况${NC}\"\n    psql -d $DB_NAME -c \"\n        SELECT \n            COUNT(*) as waiting_queries\n        FROM pg_stat_activity \n        WHERE wait_event_type = 'Lock' \n          AND datname = '$DB_NAME';\n    \" -t\n    \n    # 5. 数据库大小\n    echo -e \"${GREEN}[5] 数据库大小${NC}\"\n    psql -d $DB_NAME -c \"\n        SELECT \n            pg_size_pretty(pg_database_size('$DB_NAME')) as database_size;\n    \" -t\n    \n    # 6. 缓存命中率\n    echo -e \"${GREEN}[6] 缓存命中率${NC}\"\n    psql -d $DB_NAME -c \"\n        SELECT \n            sum(heap_blks_hit) / nullif(sum(heap_blks_hit) + sum(heap_blks_read), 0) * 100 as cache_hit_ratio\n        FROM pg_statio_user_tables;\n    \" -t\n    \n    # 7. IO 统计\n    echo -e \"${GREEN}[7] 磁盘 IO 统计${NC}\"\n    psql -d $DB_NAME -c \"\n        SELECT \n            sum(heap_blks_read) as blocks_read,\n            sum(heap_blks_hit) as blocks_hit,\n            sum(idx_blks_read) as idx_blocks_read,\n            sum(idx_blks_hit) as idx_blocks_hit\n        FROM pg_statio_user_tables;\n    \" -t\n    \n    # 8. 长时间运行的事务\n    echo -e \"${YELLOW}[8] 长时间运行事务 (>30秒)${NC}\"\n    psql -d $DB_NAME -c \"\n        SELECT \n            pid,\n            usename,\n            EXTRACT(EPOCH FROM (now() - xact_start))::int as transaction_duration_sec,\n            state,\n            LEFT(query, 50) as query_preview\n        FROM pg_stat_activity \n        WHERE datname = '$DB_NAME' \n          AND state != 'idle'\n          AND xact_start IS NOT NULL\n          AND EXTRACT(EPOCH FROM (now() - xact_start)) > 30\n        ORDER BY xact_start;\n    \"\n    \n    echo \"\"\n    echo -e \"${BLUE}下次刷新: ${INTERVAL}秒后...${NC}\"\n    sleep $INTERVAL\ndone\n"
  },
  {
    "path": "backend/scripts/performance/pg_stats_after_test.sql",
    "content": "-- 测试后记录对比数据\n-- 用法：psql -d xingrin -f pg_stats_after_test.sql > stats_after.txt\n\n\\echo '========================================'\n\\echo '  PostgreSQL 测试后统计数据'\n\\echo '========================================'\n\\echo ''\n\n\\echo '当前时间:'\nSELECT now();\n\n\\echo ''\n\\echo '表记录数（测试后）:'\nSELECT \n    schemaname || '.' || relname as table_name,\n    n_live_tup as row_count,\n    n_dead_tup as dead_rows,\n    pg_size_pretty(pg_total_relation_size(schemaname||'.'||relname)) as total_size,\n    last_vacuum,\n    last_autovacuum,\n    last_analyze,\n    last_autoanalyze\nFROM pg_stat_user_tables \nWHERE schemaname = 'public'\n  AND relname IN ('subdomain', 'ip_address', 'port', 'website', 'endpoint', 'directory', 'scan')\nORDER BY n_live_tup DESC;\n\n\\echo ''\n\\echo '表膨胀检查:'\nSELECT \n    schemaname || '.' || relname as table_name,\n    pg_size_pretty(pg_total_relation_size(schemaname||'.'||relname)) as total_size,\n    n_live_tup as live_rows,\n    n_dead_tup as dead_rows,\n    CASE \n        WHEN n_live_tup = 0 THEN 0\n        ELSE round((n_dead_tup::numeric / n_live_tup) * 100, 2)\n    END as dead_ratio_percent\nFROM pg_stat_user_tables \nWHERE schemaname = 'public'\n  AND relname IN ('subdomain', 'ip_address', 'port', 'website', 'endpoint', 'directory')\nORDER BY n_dead_tup DESC;\n\n\\echo ''\n\\echo '索引使用情况:'\nSELECT \n    schemaname || '.' || relname as table_name,\n    indexname,\n    idx_scan as index_scans,\n    idx_tup_read as rows_read,\n    idx_tup_fetch as rows_fetched,\n    pg_size_pretty(pg_relation_size(indexname::regclass)) as index_size\nFROM pg_stat_user_indexes \nWHERE schemaname = 'public'\n  AND relname IN ('subdomain', 'ip_address', 'port', 'website', 'endpoint', 'directory')\nORDER BY idx_scan DESC;\n\n\\echo ''\n\\echo '表统计增量（本次测试产生）:'\nSELECT \n    schemaname || '.' || relname as table_name,\n    n_tup_ins as total_inserts,\n    n_tup_upd as total_updates,\n    n_tup_del as total_deletes,\n    n_tup_hot_upd as hot_updates\nFROM pg_stat_user_tables \nWHERE schemaname = 'public'\n  AND relname IN ('subdomain', 'ip_address', 'port', 'website', 'endpoint', 'directory')\nORDER BY n_tup_ins DESC;\n\n\\echo ''\n\\echo '缓存命中率（测试后）:'\nSELECT \n    sum(heap_blks_hit) as heap_blocks_hit,\n    sum(heap_blks_read) as heap_blocks_read,\n    CASE \n        WHEN sum(heap_blks_hit) + sum(heap_blks_read) = 0 THEN 0\n        ELSE round((sum(heap_blks_hit)::numeric / (sum(heap_blks_hit) + sum(heap_blks_read))) * 100, 2)\n    END as cache_hit_ratio_percent\nFROM pg_statio_user_tables\nWHERE schemaname = 'public';\n\n\\echo ''\n\\echo 'IO 统计:'\nSELECT \n    sum(heap_blks_read) as heap_blocks_read_from_disk,\n    sum(heap_blks_hit) as heap_blocks_hit_in_cache,\n    sum(idx_blks_read) as index_blocks_read_from_disk,\n    sum(idx_blks_hit) as index_blocks_hit_in_cache\nFROM pg_statio_user_tables\nWHERE schemaname = 'public';\n\n\\echo ''\n\\echo '长时间运行查询:'\nSELECT \n    pid,\n    usename,\n    application_name,\n    state,\n    EXTRACT(EPOCH FROM (now() - query_start))::int as duration_seconds,\n    query\nFROM pg_stat_activity \nWHERE datname = current_database()\n  AND state != 'idle'\n  AND query NOT LIKE '%pg_stat_activity%'\nORDER BY query_start;\n\n\\echo ''\n\\echo '数据库总大小:'\nSELECT \n    pg_size_pretty(pg_database_size(current_database())) as database_size;\n\n\\echo ''\n\\echo '========================================'\n"
  },
  {
    "path": "backend/scripts/performance/pg_stats_before_test.sql",
    "content": "-- 测试前记录基准数据\n-- 用法：psql -d xingrin -f pg_stats_before_test.sql > stats_before.txt\n\n\\echo '========================================'\n\\echo '  PostgreSQL 测试前基准数据'\n\\echo '========================================'\n\\echo ''\n\n\\echo '当前时间:'\nSELECT now();\n\n\\echo ''\n\\echo '数据库连接配置:'\nSHOW max_connections;\nSHOW shared_buffers;\nSHOW work_mem;\nSHOW maintenance_work_mem;\n\n\\echo ''\n\\echo '表记录数（测试前）:'\nSELECT \n    schemaname || '.' || relname as table_name,\n    n_live_tup as row_count,\n    pg_size_pretty(pg_total_relation_size(schemaname||'.'||relname)) as total_size\nFROM pg_stat_user_tables \nWHERE schemaname = 'public'\n  AND relname IN ('subdomain', 'ip_address', 'port', 'website', 'endpoint', 'directory', 'scan')\nORDER BY n_live_tup DESC;\n\n\\echo ''\n\\echo '索引信息:'\nSELECT \n    schemaname || '.' || tablename as table_name,\n    indexname,\n    pg_size_pretty(pg_relation_size(indexname::regclass)) as index_size\nFROM pg_indexes \nWHERE schemaname = 'public'\n  AND tablename IN ('subdomain', 'ip_address', 'port', 'website', 'endpoint', 'directory')\nORDER BY tablename, indexname;\n\n\\echo ''\n\\echo '当前活跃连接数:'\nSELECT \n    count(*) as total,\n    count(*) FILTER (WHERE state = 'active') as active,\n    count(*) FILTER (WHERE state = 'idle') as idle\nFROM pg_stat_activity \nWHERE datname = current_database();\n\n\\echo ''\n\\echo '表统计信息（累计）:'\nSELECT \n    schemaname || '.' || relname as table_name,\n    seq_scan as sequential_scans,\n    seq_tup_read as seq_rows_read,\n    idx_scan as index_scans,\n    idx_tup_fetch as idx_rows_fetched,\n    n_tup_ins as inserts,\n    n_tup_upd as updates,\n    n_tup_del as deletes\nFROM pg_stat_user_tables \nWHERE schemaname = 'public'\n  AND relname IN ('subdomain', 'ip_address', 'port', 'website', 'endpoint', 'directory')\nORDER BY relname;\n\n\\echo ''\n\\echo '缓存命中率:'\nSELECT \n    sum(heap_blks_hit) as heap_blocks_hit,\n    sum(heap_blks_read) as heap_blocks_read,\n    CASE \n        WHEN sum(heap_blks_hit) + sum(heap_blks_read) = 0 THEN 0\n        ELSE round((sum(heap_blks_hit)::numeric / (sum(heap_blks_hit) + sum(heap_blks_read))) * 100, 2)\n    END as cache_hit_ratio_percent\nFROM pg_statio_user_tables\nWHERE schemaname = 'public';\n\n\\echo ''\n\\echo '========================================'\n"
  },
  {
    "path": "backend/scripts/performance/start_performance_test.sh",
    "content": "#!/bin/bash\n\n# 性能测试快速启动脚本\n# 用法：./start_performance_test.sh\n\nset -e\n\nSCRIPT_DIR=\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" && pwd )\"\nPROJECT_DIR=\"$(dirname \"$(dirname \"$SCRIPT_DIR\")\")\"\n\necho \"========================================\"\necho \"  PostgreSQL 性能测试工具\"\necho \"========================================\"\necho \"\"\n\n# 加载 .env 文件中的数据库配置\nif [ -f \"$PROJECT_DIR/.env\" ]; then\n    echo \"加载数据库配置...\"\n    export PGHOST=$(grep \"^DB_HOST=\" \"$PROJECT_DIR/.env\" | cut -d '=' -f2)\n    export PGPORT=$(grep \"^DB_PORT=\" \"$PROJECT_DIR/.env\" | cut -d '=' -f2)\n    export PGUSER=$(grep \"^DB_USER=\" \"$PROJECT_DIR/.env\" | cut -d '=' -f2)\n    export PGPASSWORD=$(grep \"^DB_PASSWORD=\" \"$PROJECT_DIR/.env\" | cut -d '=' -f2)\n    export PGDATABASE=$(grep \"^DB_NAME=\" \"$PROJECT_DIR/.env\" | cut -d '=' -f2)\n    \n    echo \"  主机: $PGHOST:$PGPORT\"\n    echo \"  用户: $PGUSER\"\n    echo \"  数据库: $PGDATABASE\"\nelse\n    echo \"[WARN]  未找到 .env 文件\"\nfi\necho \"\"\n\n# 检查 PostgreSQL 连接\necho \"检查数据库连接...\"\ncd \"$PROJECT_DIR\"\nif ! source \"$PROJECT_DIR/../.venv/bin/activate\" && python -c \"\nimport os\nimport django\nos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')\ndjango.setup()\nfrom django.db import connection\ntry:\n    with connection.cursor() as cursor:\n        cursor.execute('SELECT 1')\n        print('✓ 数据库连接正常')\nexcept Exception as e:\n    print(f'[ERROR] 数据库连接失败: {e}')\n    exit(1)\n\" > /dev/null 2>&1; then\n    echo \"[ERROR] 无法连接到数据库 $PGDATABASE\"\n    echo \"\"\n    echo \"请检查：\"\n    echo \"  1. VPS 防火墙是否开放 5432 端口\"\n    echo \"  2. PostgreSQL 的 pg_hba.conf 是否允许远程连接\"\n    echo \"  3. .env 文件中的数据库配置是否正确\"\n    echo \"  4. Django 设置是否正确\"\n    echo \"\"\n    echo \"手动测试连接：\"\n    echo \"  cd $PROJECT_DIR && source $PROJECT_DIR/../.venv/bin/activate && python manage.py dbshell\"\n    exit 1\nfi\necho \"✓ 数据库连接正常\"\necho \"\"\n\n# 菜单选择\necho \"请选择操作：\"\necho \"  1) 测试批次大小（推荐先执行）\"\necho \"  2) 生成 1 万条测试数据\"\necho \"  3) 生成 10 万条测试数据\"\necho \"  4) 生成 100 万条测试数据\"\necho \"  5) 启动实时监控（独立运行）\"\necho \"  6) 查看测试前基准数据\"\necho \"  7) 查看测试后统计数据\"\necho \"  8) 完整测试流程（自动化）\"\necho \"  0) 退出\"\necho \"\"\nread -p \"请输入选项 (0-8): \" choice\n\ncase $choice in\n    1)\n        echo \"\"\n        echo \"开始测试批次大小...\"\n        cd \"$PROJECT_DIR\"\n        source \"$PROJECT_DIR/../.venv/bin/activate\"\n        \n        # 自动创建测试目标\n        echo \"创建测试目标...\"\n        python -c \"\nimport os\nimport django\nos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')\ndjango.setup()\nfrom apps.targets.models import Target, Organization\n\n# 创建默认组织\norg, _ = Organization.objects.get_or_create(\n    name='测试组织',\n    defaults={'description': '性能测试专用组织'}\n)\n\n# 创建测试目标\nfor i in range(1, 4):\n    target_name = f'test{i}.com'\n    target, created = Target.objects.get_or_create(\n        name=target_name\n    )\n    if created:\n        # 将目标添加到组织\n        org.targets.add(target)\n        print(f'✓ 创建目标: {target_name}')\n    else:\n        print(f'✓ 目标已存在: {target_name}')\n\"\n        echo \"\"\n        \n        python manage.py generate_test_data --target test1.com --count 10000 --test-batch-sizes\n        ;;\n    2)\n        echo \"\"\n        echo \"使用默认批次大小: 5000\"\n        echo \"开始生成 1 万条数据...\"\n        cd \"$PROJECT_DIR\"\n        source \"$PROJECT_DIR/../.venv/bin/activate\"\n        \n        # 自动创建测试目标\n        echo \"创建测试目标...\"\n        python -c \"\nimport os\nimport django\nos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')\ndjango.setup()\nfrom apps.targets.models import Target, Organization\n\n# 创建默认组织\norg, _ = Organization.objects.get_or_create(\n    name='测试组织',\n    defaults={'description': '性能测试专用组织'}\n)\n\n# 创建测试目标\nfor i in range(1, 4):\n    target_name = f'test{i}.com'\n    target, created = Target.objects.get_or_create(\n        name=target_name\n    )\n    if created:\n        # 将目标添加到组织\n        org.targets.add(target)\n        print(f'✓ 创建目标: {target_name}')\n    else:\n        print(f'✓ 目标已存在: {target_name}')\n\"\n        echo \"\"\n        \n        python manage.py generate_test_data \\\n            --target test1.com \\\n            --count 10000 \\\n            --batch-size 5000 \\\n            --benchmark\n        ;;\n    3)\n        echo \"\"\n        echo \"使用默认批次大小: 5000\"\n        echo \"开始生成 10 万条数据...\"\n        cd \"$PROJECT_DIR\"\n        source \"$PROJECT_DIR/../.venv/bin/activate\"\n        \n        # 自动创建测试目标\n        echo \"创建测试目标...\"\n        python -c \"\nimport os\nimport django\nos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')\ndjango.setup()\nfrom apps.targets.models import Target, Organization\n\n# 创建默认组织\norg, _ = Organization.objects.get_or_create(\n    name='测试组织',\n    defaults={'description': '性能测试专用组织'}\n)\n\n# 创建测试目标\nfor i in range(1, 4):\n    target_name = f'test{i}.com'\n    target, created = Target.objects.get_or_create(\n        name=target_name\n    )\n    if created:\n        # 将目标添加到组织\n        org.targets.add(target)\n        print(f'✓ 创建目标: {target_name}')\n    else:\n        print(f'✓ 目标已存在: {target_name}')\n\"\n        echo \"\"\n        \n        python manage.py generate_test_data \\\n            --target test2.com \\\n            --count 100000 \\\n            --batch-size 5000 \\\n            --benchmark\n        ;;\n    4)\n        echo \"\"\n        echo \"使用默认批次大小: 5000\"\n        echo \"[WARN]  警告：这将生成 100 万条数据，可能需要 2-4 小时\"\n        read -p \"确认继续? (y/N): \" confirm\n        if [[ $confirm == [yY] ]]; then\n            echo \"\"\n            echo \"开始生成 100 万条数据...\"\n            cd \"$PROJECT_DIR\"\n            source \"$PROJECT_DIR/../.venv/bin/activate\"\n            \n            # 自动创建测试目标\n            echo \"创建测试目标...\"\n            python -c \"\nimport os\nimport django\nos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')\ndjango.setup()\nfrom apps.targets.models import Target, Organization\n\n# 创建默认组织\norg, _ = Organization.objects.get_or_create(\n    name='测试组织',\n    defaults={'description': '性能测试专用组织'}\n)\n\n# 创建测试目标\nfor i in range(1, 4):\n    target_name = f'test{i}.com'\n    target, created = Target.objects.get_or_create(\n        name=target_name\n    )\n    if created:\n        # 将目标添加到组织\n        org.targets.add(target)\n        print(f'✓ 创建目标: {target_name}')\n    else:\n        print(f'✓ 目标已存在: {target_name}')\n\"\n            echo \"\"\n            \n            python manage.py generate_test_data \\\n                --target test3.com \\\n                --count 1000000 \\\n                --batch-size 5000 \\\n                --benchmark\n        fi\n        ;;\n    5)\n        echo \"\"\n        read -p \"刷新间隔（秒，推荐 2-5）: \" interval\n        interval=${interval:-2}\n        echo \"\"\n        echo \"启动 PostgreSQL 实时监控...\"\n        echo \"按 Ctrl+C 停止监控\"\n        sleep 2\n        \"$SCRIPT_DIR/monitor_pg_performance.sh\" xingrin \"$interval\"\n        ;;\n    6)\n        echo \"\"\n        echo \"记录测试前基准数据...\"\n        mkdir -p \"$PROJECT_DIR/logs\"\n        psql -d \"$PGDATABASE\" -f \"$SCRIPT_DIR/pg_stats_before_test.sql\" > \"$PROJECT_DIR/logs/stats_before.txt\"\n        echo \"✓ 已保存到: $PROJECT_DIR/logs/stats_before.txt\"\n        echo \"\"\n        read -p \"是否查看内容? (y/N): \" view\n        if [[ $view == [yY] ]]; then\n            less \"$PROJECT_DIR/logs/stats_before.txt\"\n        fi\n        ;;\n    7)\n        echo \"\"\n        echo \"记录测试后统计数据...\"\n        mkdir -p \"$PROJECT_DIR/logs\"\n        psql -d \"$PGDATABASE\" -f \"$SCRIPT_DIR/pg_stats_after_test.sql\" > \"$PROJECT_DIR/logs/stats_after.txt\"\n        echo \"✓ 已保存到: $PROJECT_DIR/logs/stats_after.txt\"\n        echo \"\"\n        read -p \"是否对比测试前后? (y/N): \" compare\n        if [[ $compare == [yY] ]] && [ -f \"$PROJECT_DIR/logs/stats_before.txt\" ]; then\n            echo \"\"\n            echo \"差异对比:\"\n            diff \"$PROJECT_DIR/logs/stats_before.txt\" \"$PROJECT_DIR/logs/stats_after.txt\" || true\n        fi\n        ;;\n    8)\n        echo \"\"\n        echo \"========================================\"\n        echo \"  完整自动化测试流程\"\n        echo \"========================================\"\n        echo \"\"\n        echo \"步骤 1：创建测试目标\"\n        cd \"$PROJECT_DIR\"\n        source \"$PROJECT_DIR/../.venv/bin/activate\"\n        python -c \"\nimport os\nimport django\nos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')\ndjango.setup()\nfrom apps.targets.models import Target, Organization\n\n# 创建默认组织\norg, _ = Organization.objects.get_or_create(\n    name='测试组织',\n    defaults={'description': '性能测试专用组织'}\n)\n\n# 创建测试目标\nfor i in range(1, 4):\n    target_name = f'test{i}.com'\n    target, created = Target.objects.get_or_create(\n        name=target_name\n    )\n    if created:\n        # 将目标添加到组织\n        org.targets.add(target)\n        print(f'✓ 创建目标: {target_name}')\n    else:\n        print(f'✓ 目标已存在: {target_name}')\n\"\n        echo \"✓ 完成\"\n        echo \"\"\n        \n        echo \"步骤 2：记录测试前基准数据\"\n        mkdir -p \"$PROJECT_DIR/logs\"\n        psql -d \"$PGDATABASE\" -f \"$SCRIPT_DIR/pg_stats_before_test.sql\" > \"$PROJECT_DIR/logs/stats_before.txt\" 2>&1\n        echo \"✓ 完成\"\n        echo \"\"\n        \n        echo \"步骤 3：测试批次大小\"\n        python manage.py generate_test_data --target test1.com --count 10000 --test-batch-sizes | tee \"$PROJECT_DIR/logs/batch_size_test.txt\"\n        echo \"\"\n        \n        # 自动提取最优批次大小，如果没有找到则使用默认值5000\n        optimal_batch=$(grep \"推荐批次大小:\" \"$PROJECT_DIR/logs/batch_size_test.txt\" | awk '{print $2}' || echo \"5000\")\n        optimal_batch=${optimal_batch:-5000}\n        echo \"✓ 自动选择最优批次: $optimal_batch\"\n        echo \"\"\n        \n        echo \"步骤 4：生成 10 万条数据\"\n        python manage.py generate_test_data \\\n            --target test3.com \\\n            --count 100000 \\\n            --batch-size \"$optimal_batch\" \\\n            --benchmark | tee \"$PROJECT_DIR/logs/test_results.txt\"\n        echo \"\"\n        \n        echo \"步骤 5：记录测试后统计\"\n        psql -d \"$PGDATABASE\" -f \"$SCRIPT_DIR/pg_stats_after_test.sql\" > \"$PROJECT_DIR/logs/stats_after.txt\" 2>&1\n        echo \"✓ 完成\"\n        echo \"\"\n        \n        # 生成性能报告\n        echo \"步骤 6：生成性能报告\"\n        report_file=\"$PROJECT_DIR/logs/performance_report.txt\"\n        \n        echo \"========================================\" > \"$report_file\"\n        echo \"  XingRin 性能测试报告\" >> \"$report_file\"\n        echo \"========================================\" >> \"$report_file\"\n        echo \"\" >> \"$report_file\"\n        echo \"测试时间: $(date '+%Y-%m-%d %H:%M:%S')\" >> \"$report_file\"\n        echo \"数据库: $PGHOST:$PGPORT/$PGDATABASE\" >> \"$report_file\"\n        echo \"最优批次: $optimal_batch\" >> \"$report_file\"\n        echo \"\" >> \"$report_file\"\n        \n        # 提取批次测试结果\n        echo \"========================================\" >> \"$report_file\"\n        echo \"  批次大小性能对比\" >> \"$report_file\"\n        echo \"========================================\" >> \"$report_file\"\n        grep -A 10 \"批次大小对比结果\" \"$PROJECT_DIR/logs/batch_size_test.txt\" | tail -n +4 >> \"$report_file\"\n        echo \"\" >> \"$report_file\"\n        \n        # 提取详细测试结果\n        echo \"========================================\" >> \"$report_file\"\n        echo \"  10万条数据生成性能\" >> \"$report_file\"\n        echo \"========================================\" >> \"$report_file\"\n        grep \"性能测试报告\" -A 20 \"$PROJECT_DIR/logs/test_results.txt\" | tail -n +3 >> \"$report_file\"\n        echo \"\" >> \"$report_file\"\n        \n        # 提取总耗时\n        total_time=$(grep \"总耗时:\" \"$PROJECT_DIR/logs/test_results.txt\" | head -1)\n        echo \"========================================\" >> \"$report_file\"\n        echo \"  总体性能\" >> \"$report_file\"\n        echo \"========================================\" >> \"$report_file\"\n        echo \"$total_time\" >> \"$report_file\"\n        echo \"\" >> \"$report_file\"\n        \n        echo \"========================================\" >> \"$report_file\"\n        echo \"  测试文件\" >> \"$report_file\"\n        echo \"========================================\" >> \"$report_file\"\n        echo \"- 测试前基准: logs/stats_before.txt\" >> \"$report_file\"\n        echo \"- 批次测试: logs/batch_size_test.txt\" >> \"$report_file\"\n        echo \"- 性能结果: logs/test_results.txt\" >> \"$report_file\"\n        echo \"- 测试后统计: logs/stats_after.txt\" >> \"$report_file\"\n        echo \"- 性能报告: logs/performance_report.txt\" >> \"$report_file\"\n        echo \"\" >> \"$report_file\"\n        \n        echo \"✓ 性能报告已生成\"\n        echo \"\"\n        \n        echo \"========================================\"\n        echo \"  ✓ 自动化测试完成！\"\n        echo \"========================================\"\n        echo \"\"\n        \n        # 显示性能报告\n        cat \"$report_file\"\n        echo \"\"\n        echo \"详细报告已保存到: $report_file\"\n        echo \"\"\n        ;;\n    0)\n        echo \"退出\"\n        exit 0\n        ;;\n    *)\n        echo \"无效选项\"\n        exit 1\n        ;;\nesac\n\necho \"\"\necho \"完成！\"\n"
  },
  {
    "path": "backend/scripts/worker-deploy/agent.sh",
    "content": "#!/bin/bash\n# ============================================\n# XingRin Agent\n# 用途：心跳上报 + 负载监控 + 版本检查\n# 适用：远程 VPS 或 Docker 容器内\n# ============================================\n\n# 检查是否禁用 Agent\nif [ \"${AGENT_DISABLED:-false}\" = \"true\" ]; then\n    echo \"[AGENT] 已禁用，跳过启动\"\n    exit 0\nfi\n\n# 配置\nMARKER_DIR=\"/opt/xingrin\"\nSRC_DIR=\"${MARKER_DIR}/src\"\nENV_FILE=\"${SRC_DIR}/backend/.env\"\nINTERVAL=${AGENT_INTERVAL:-3}\n\n# Agent 版本（从环境变量获取，由 Docker 镜像构建时注入）\nAGENT_VERSION=\"${IMAGE_TAG:-unknown}\"\n\n# 颜色定义\nGREEN='\\033[0;32m'\nRED='\\033[0;31m'\nYELLOW='\\033[0;33m'\nNC='\\033[0m'\n\nlog() {\n    echo -e \"[$(date +'%Y-%m-%d %H:%M:%S')] [AGENT] $1\"\n}\n\n# 检测运行模式：容器内 or 远程 VPS\n# 如果 /.dockerenv 存在，说明在容器内\nif [ -f \"/.dockerenv\" ]; then\n    RUN_MODE=\"container\"\n    log \"运行模式: Docker 容器内\"\nelse\n    RUN_MODE=\"remote\"\n    log \"运行模式: 远程 VPS\"\n    \n    # 远程模式：检测 Docker 命令\n    if docker info >/dev/null 2>&1; then\n        DOCKER_CMD=\"docker\"\n    else\n        DOCKER_CMD=\"sudo docker\"\n    fi\nfi\n\n# 加载环境变量（远程模式从文件，容器模式从环境变量）\nif [ \"$RUN_MODE\" = \"remote\" ] && [ -f \"$ENV_FILE\" ]; then\n    set -a\n    source \"$ENV_FILE\"\n    set +a\nfi\n\n# 获取配置\n# SERVER_URL: 后端 API 地址（容器内用 http://server:8888，远程用 https://{PUBLIC_HOST}）\nAPI_URL=\"${HEARTBEAT_API_URL:-${SERVER_URL:-}}\"\nWORKER_NAME=\"${WORKER_NAME:-}\"\nIS_LOCAL=\"${IS_LOCAL:-false}\"\n\n# 容器模式默认标记为本地节点\nif [ \"$RUN_MODE\" = \"container\" ]; then\n    IS_LOCAL=\"true\"\nfi\n\nlog \"${GREEN}Agent 启动...${NC}\"\nlog \"心跳间隔: ${INTERVAL}s\"\n\nif [ -z \"$API_URL\" ]; then\n    log \"${RED}错误: 未配置 API 地址 (HEARTBEAT_API_URL 或 SERVER_URL)${NC}\"\n    exit 1\nfi\n\nlog \"API 地址: ${API_URL}\"\n\n# ============================================\n# 自注册功能（如果 WORKER_ID 未设置）\n# ============================================\nregister_worker() {\n    if [ -z \"$WORKER_NAME\" ]; then\n        WORKER_NAME=\"Worker-$(hostname)\"\n    fi\n    \n    log \"注册 Worker: ${WORKER_NAME}...\"\n    \n    REGISTER_DATA=$(cat <<EOF\n{\n    \"name\": \"$WORKER_NAME\",\n    \"is_local\": $IS_LOCAL\n}\nEOF\n)\n    \n    RESPONSE=$(curl -k -s -X POST \\\n        -H \"Content-Type: application/json\" \\\n        -H \"X-Worker-API-Key: ${WORKER_API_KEY}\" \\\n        -d \"$REGISTER_DATA\" \\\n        \"${API_URL}/api/workers/register/\" 2>/dev/null)\n    \n    if [ $? -eq 0 ]; then\n        # 解析返回的 workerId（API 使用 camelCase）\n        WORKER_ID=$(echo \"$RESPONSE\" | grep -oE '\"workerId\":\\s*[0-9]+' | grep -oE '[0-9]+')\n        if [ -n \"$WORKER_ID\" ]; then\n            log \"${GREEN}注册成功: ${WORKER_NAME} (ID: ${WORKER_ID})${NC}\"\n            return 0\n        fi\n    fi\n    \n    log \"${RED}注册失败: ${RESPONSE}${NC}\"\n    return 1\n}\n\n# 如果没有 WORKER_ID，执行自注册\nif [ -z \"$WORKER_ID\" ]; then\n    # 等待 Server 就绪\n    log \"等待 Server 就绪...\"\n    for i in $(seq 1 30); do\n        if curl -k -s -H \"X-Worker-API-Key: ${WORKER_API_KEY}\" \"${API_URL}/api/workers/config/?is_local=${IS_LOCAL}\" > /dev/null 2>&1; then\n            log \"${GREEN}Server 已就绪${NC}\"\n            break\n        fi\n        log \"Server 未就绪，等待... ($i/30)\"\n        sleep 5\n    done\n    \n    # 注册\n    while ! register_worker; do\n        log \"${YELLOW}注册失败，5 秒后重试...${NC}\"\n        sleep 5\n    done\nfi\n\nlog \"Worker ID: ${WORKER_ID}\"\n\n# ============================================\n# 心跳循环\n# Agent 独立运行，始终发送心跳\n# 主服务器根据心跳数据选择负载最低的节点分发任务\n# ============================================\nwhile true; do\n    # 收集系统负载（CPU + 内存）\n    # 容器内使用挂载的 /host/proc 获取宿主机数据\n    if [ -d \"/host/proc\" ]; then\n        PROC_DIR=\"/host/proc\"\n    else\n        PROC_DIR=\"/proc\"\n    fi\n    \n    # CPU 使用率（百分比数值）\n    # /proc/stat 是累计值，需要两次采样计算差值\n    CPU_STAT1=$(grep 'cpu ' ${PROC_DIR}/stat | awk '{print $2,$3,$4,$5,$6,$7,$8}')\n    sleep 0.5\n    CPU_STAT2=$(grep 'cpu ' ${PROC_DIR}/stat | awk '{print $2,$3,$4,$5,$6,$7,$8}')\n    CPU_PERCENT=$(echo \"$CPU_STAT1 $CPU_STAT2\" | awk '{\n        user1=$1; nice1=$2; sys1=$3; idle1=$4; iowait1=$5; irq1=$6; softirq1=$7;\n        user2=$8; nice2=$9; sys2=$10; idle2=$11; iowait2=$12; irq2=$13; softirq2=$14;\n        total1=user1+nice1+sys1+idle1+iowait1+irq1+softirq1;\n        total2=user2+nice2+sys2+idle2+iowait2+irq2+softirq2;\n        idle_diff=idle2-idle1;\n        total_diff=total2-total1;\n        if(total_diff>0) printf \"%.1f\", (1-idle_diff/total_diff)*100;\n        else printf \"0.0\";\n    }')\n    \n    # 内存使用率（百分比数值）\n    if [ -d \"/host/proc\" ]; then\n        # 从 /host/proc/meminfo 读取\n        MEM_TOTAL=$(grep 'MemTotal' ${PROC_DIR}/meminfo | awk '{print $2}')\n        MEM_AVAILABLE=$(grep 'MemAvailable' ${PROC_DIR}/meminfo | awk '{print $2}')\n        MEM_PERCENT=$(awk \"BEGIN {printf \\\"%.1f\\\", 100 - ($MEM_AVAILABLE / $MEM_TOTAL * 100)}\")\n    else\n        # 使用 free 命令\n        MEM_PERCENT=$(free | grep Mem | awk '{printf \"%.1f\", $3/$2 * 100}')\n    fi\n\n    # 构建 JSON 数据（使用数值而非字符串，便于比较和排序）\n    # 包含版本号，供 Server 端检查版本一致性\n    JSON_DATA=$(cat <<EOF\n{\n    \"cpu_percent\": $CPU_PERCENT,\n    \"memory_percent\": $MEM_PERCENT,\n    \"version\": \"$AGENT_VERSION\"\n}\nEOF\n)\n    \n    # 发送心跳，获取响应内容\n    RESPONSE_FILE=$(mktemp)\n    HTTP_CODE=$(curl -k -s -o \"$RESPONSE_FILE\" -w \"%{http_code}\" -X POST \\\n        -H \"Content-Type: application/json\" \\\n        -H \"X-Worker-API-Key: ${WORKER_API_KEY}\" \\\n        -d \"$JSON_DATA\" \\\n        \"${API_URL}/api/workers/${WORKER_ID}/heartbeat/\" 2>/dev/null || echo \"000\")\n    RESPONSE_BODY=$(cat \"$RESPONSE_FILE\" 2>/dev/null)\n    rm -f \"$RESPONSE_FILE\"\n        \n    if [ \"$HTTP_CODE\" != \"200\" ] && [ \"$HTTP_CODE\" != \"201\" ]; then\n        log \"${YELLOW}心跳发送失败 (HTTP $HTTP_CODE)${NC}\"\n    else\n        # 检查是否需要更新\n        NEED_UPDATE=$(echo \"$RESPONSE_BODY\" | grep -oE '\"need_update\":\\s*(true|false)' | grep -oE '(true|false)')\n        if [ \"$NEED_UPDATE\" = \"true\" ]; then\n            SERVER_VERSION=$(echo \"$RESPONSE_BODY\" | grep -oE '\"server_version\":\\s*\"[^\"]+\"' | sed 's/.*\"\\([^\"]*\\)\"$/\\1/')\n            log \"${YELLOW}检测到版本不匹配: Agent=$AGENT_VERSION, Server=$SERVER_VERSION${NC}\"\n            log \"${GREEN}正在自动更新...${NC}\"\n            \n            # 执行自动更新\n            if [ \"$RUN_MODE\" = \"container\" ]; then\n                # 容器模式：通知外部重启（退出后由 docker-compose restart policy 重启）\n                log \"容器模式：退出以触发重启更新\"\n                exit 0\n            else\n                # 远程模式：拉取新镜像并重启 agent 容器\n                log \"远程模式：更新 agent 镜像...\"\n                DOCKER_USER=\"${DOCKER_USER:-yyhuni}\"\n                NEW_IMAGE=\"${DOCKER_USER}/xingrin-agent:${SERVER_VERSION}\"\n                \n                # 拉取新镜像\n                if $DOCKER_CMD pull \"$NEW_IMAGE\" 2>/dev/null; then\n                    log \"${GREEN}镜像拉取成功: $NEW_IMAGE${NC}\"\n                    \n                    # 停止当前容器并用新镜像重启\n                    CONTAINER_NAME=\"xingrin-agent\"\n                    $DOCKER_CMD stop \"$CONTAINER_NAME\" 2>/dev/null || true\n                    $DOCKER_CMD rm \"$CONTAINER_NAME\" 2>/dev/null || true\n                    \n                    # 重新启动（使用相同的环境变量）\n                    $DOCKER_CMD run -d \\\n                        --name \"$CONTAINER_NAME\" \\\n                        --restart unless-stopped \\\n                        -e HEARTBEAT_API_URL=\"$API_URL\" \\\n                        -e WORKER_ID=\"$WORKER_ID\" \\\n                        -e IMAGE_TAG=\"$SERVER_VERSION\" \\\n                        -v /proc:/host/proc:ro \\\n                        \"$NEW_IMAGE\"\n                    \n                    log \"${GREEN}Agent 已更新到 $SERVER_VERSION${NC}\"\n                    exit 0\n                else\n                    log \"${RED}镜像拉取失败: $NEW_IMAGE${NC}\"\n                fi\n            fi\n        fi\n    fi\n\n    # 休眠\n    sleep $INTERVAL\ndone\n"
  },
  {
    "path": "backend/scripts/worker-deploy/bootstrap.sh",
    "content": "#!/bin/bash\n# ============================================\n# XingRin 环境初始化脚本 (通用)\n# 用途：安装基础依赖（git, tmux, curl 等）\n# 支持：Ubuntu / Debian\n# 适用：主机 & Worker VPS\n# 特点：幂等执行，重复运行不会重复安装\n# ============================================\n\nset -e\n\n# 版本标记（修改此版本号会触发重新安装）\nBOOTSTRAP_VERSION=\"v1\"\nMARKER_DIR=\"/opt/xingrin\"\nMARKER_FILE=\"${MARKER_DIR}/.bootstrap_done_${BOOTSTRAP_VERSION}\"\n\n# 颜色定义\nRED='\\033[0;31m'\nGREEN='\\033[0;32m'\nYELLOW='\\033[0;33m'\nBLUE='\\033[0;34m'\nNC='\\033[0m'\n\nlog_info() {\n    echo -e \"${BLUE}[XingRin]${NC} $1\"\n}\n\nlog_success() {\n    echo -e \"${GREEN}[XingRin]${NC} $1\"\n}\n\nlog_warn() {\n    echo -e \"${YELLOW}[XingRin]${NC} $1\"\n}\n\nlog_error() {\n    echo -e \"${RED}[XingRin]${NC} $1\"\n}\n\n# 等待 apt 锁释放（最多等待 60 秒）\nwait_for_apt_lock() {\n    local max_wait=60\n    local waited=0\n    while sudo fuser /var/lib/apt/lists/lock >/dev/null 2>&1 || \\\n          sudo fuser /var/lib/dpkg/lock >/dev/null 2>&1 || \\\n          sudo fuser /var/lib/dpkg/lock-frontend >/dev/null 2>&1; do\n        if [ $waited -eq 0 ]; then\n            log_info \"等待 apt 锁释放...\"\n        fi\n        sleep 2\n        waited=$((waited + 2))\n        if [ $waited -ge $max_wait ]; then\n            log_warn \"等待 apt 锁超时，继续尝试...\"\n            break\n        fi\n    done\n}\n\n# 检查是否已完成初始化（返回 0 表示已完成，返回 1 表示需要初始化）\ncheck_already_done() {\n    if [ -f \"$MARKER_FILE\" ]; then\n        log_success \"环境已初始化 (${BOOTSTRAP_VERSION})，跳过\"\n        return 0  # 不要 exit，让后续脚本继续执行\n    fi\n    return 1\n}\n\n# 检查操作系统\ncheck_os() {\n    if ! command -v apt-get &> /dev/null; then\n        log_error \"仅支持 Ubuntu/Debian 系统\"\n        exit 1\n    fi\n    log_info \"检测到 Ubuntu/Debian 系统\"\n}\n\n# 安装基础依赖\ninstall_dependencies() {\n    log_info \"安装基础依赖...\"\n    \n    # 等待 apt 锁释放\n    wait_for_apt_lock\n    \n    # 更新包索引\n    sudo apt-get update -qq 2>/dev/null || true\n    \n    # 安装 git（必须）\n    if ! command -v git &> /dev/null; then\n        log_info \"  - 安装 git...\"\n        sudo apt-get install -y -qq git >/dev/null 2>&1\n    else\n        log_info \"  - git 已安装\"\n    fi\n    \n    # 安装 tmux（会话持久化）\n    if ! command -v tmux &> /dev/null; then\n        log_info \"  - 安装 tmux...\"\n        sudo apt-get install -y -qq tmux >/dev/null 2>&1\n    else\n        log_info \"  - tmux 已安装\"\n    fi\n    \n    # 安装 curl（网络请求）\n    if ! command -v curl &> /dev/null; then\n        log_info \"  - 安装 curl...\"\n        sudo apt-get install -y -qq curl >/dev/null 2>&1\n    else\n        log_info \"  - curl 已安装\"\n    fi\n    \n    # 安装 jq（JSON 处理，可选）\n    if ! command -v jq &> /dev/null; then\n        log_info \"  - 安装 jq...\"\n        sudo apt-get install -y -qq jq >/dev/null 2>&1\n    else\n        log_info \"  - jq 已安装\"\n    fi\n}\n\n# 创建工作目录\ncreate_directories() {\n    log_info \"创建工作目录...\"\n    sudo mkdir -p \"$MARKER_DIR\"\n    sudo mkdir -p \"${MARKER_DIR}/logs\"\n    sudo mkdir -p \"${MARKER_DIR}/data\"\n    sudo chmod 755 \"$MARKER_DIR\"\n    sudo chown -R $USER:$USER \"$MARKER_DIR\"\n}\n\n# 写入完成标记\nwrite_marker() {\n    echo \"Bootstrap completed at $(date)\" | sudo tee \"$MARKER_FILE\" > /dev/null\n    log_success \"环境初始化完成\"\n}\n\n# 主流程\nmain() {\n    log_info \"==========================================\"\n    log_info \"  XingRin 环境初始化\"\n    log_info \"==========================================\"\n    \n    # 检查是否已初始化，如果已初始化则跳过初始化步骤（但不退出，让后续部署脚本继续执行）\n    if check_already_done; then\n        return 0  # 跳过初始化，继续执行后续脚本（Docker 部署、启动容器等）\n    fi\n    \n    check_os\n    create_directories\n    install_dependencies\n    write_marker\n    \n    log_info \"==========================================\"\n    log_success \"  ✓ 初始化完成\"\n    log_info \"==========================================\"\n}\n\nmain \"$@\"\n"
  },
  {
    "path": "backend/scripts/worker-deploy/install.sh",
    "content": "#!/bin/bash\n# ============================================\n# XingRin 远程节点安装脚本\n# 用途：安装 Docker 环境 + 预拉取镜像\n# 支持：Ubuntu / Debian / Kali\n# \n# 架构说明：\n# 1. 安装 Docker 环境\n# 2. 预拉取 worker 镜像（避免任务执行时网络延迟）\n# 3. agent 通过 start-agent.sh 启动（心跳上报）\n# 4. 扫描任务由主服务器通过 SSH 执行 docker run\n# \n# 镜像版本管理：\n# - IMAGE_TAG 由主服务器传入，确保版本一致性\n# - 预拉取后，任务执行时使用 --pull=missing 直接用本地镜像\n# ============================================\n\nset -e\n\nMARKER_DIR=\"/opt/xingrin\"\nDOCKER_MARKER=\"${MARKER_DIR}/.docker_installed\"\n\n# 颜色定义\nGREEN='\\033[0;32m'\nYELLOW='\\033[0;33m'\nBLUE='\\033[0;34m'\nRED='\\033[0;31m'\nNC='\\033[0m'\n\n# 渐变色定义\nCYAN='\\033[0;36m'\nMAGENTA='\\033[0;35m'\nBOLD='\\033[1m'\nDIM='\\033[2m'\n\nlog_info() { echo -e \"${CYAN}  ▸${NC} $1\"; }\nlog_success() { echo -e \"${GREEN}  ✔${NC} $1\"; }\nlog_warn() { echo -e \"${YELLOW}  ⚠${NC} $1\"; }\nlog_error() { echo -e \"${RED}  ✖${NC} $1\"; }\n\n# 炫酷 Banner\nshow_banner() {\n    echo -e \"\"\n    echo -e \"${CYAN}${BOLD}    ██╗  ██╗██╗███╗   ██╗ ██████╗ ██████╗ ██╗███╗   ██╗${NC}\"\n    echo -e \"${CYAN}    ╚██╗██╔╝██║████╗  ██║██╔════╝ ██╔══██╗██║████╗  ██║${NC}\"\n    echo -e \"${BLUE}${BOLD}     ╚███╔╝ ██║██╔██╗ ██║██║  ███╗██████╔╝██║██╔██╗ ██║${NC}\"\n    echo -e \"${BLUE}     ██╔██╗ ██║██║╚██╗██║██║   ██║██╔══██╗██║██║╚██╗██║${NC}\"\n    echo -e \"${MAGENTA}${BOLD}    ██╔╝ ██╗██║██║ ╚████║╚██████╔╝██║  ██║██║██║ ╚████║${NC}\"\n    echo -e \"${MAGENTA}    ╚═╝  ╚═╝╚═╝╚═╝  ╚═══╝ ╚═════╝ ╚═╝  ╚═╝╚═╝╚═╝  ╚═══╝${NC}\"\n    echo -e \"\"\n    echo -e \"${DIM}    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\"\n    echo -e \"${BOLD}      🚀 分布式安全扫描平台 │ Worker 节点部署${NC}\"\n    echo -e \"${DIM}    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\"\n    echo -e \"\"\n}\n\n# 完成 Banner\nshow_complete() {\n    echo -e \"\"\n    echo -e \"${GREEN}${BOLD}    ╔═══════════════════════════════════════════════════╗${NC}\"\n    echo -e \"${GREEN}${BOLD}    ║                                                   ║${NC}\"\n    echo -e \"${GREEN}${BOLD}    ║   ██████╗  ██████╗ ███╗   ██╗███████╗██╗          ║${NC}\"\n    echo -e \"${GREEN}${BOLD}    ║   ██╔══██╗██╔═══██╗████╗  ██║██╔════╝██║          ║${NC}\"\n    echo -e \"${GREEN}${BOLD}    ║   ██║  ██║██║   ██║██╔██╗ ██║█████╗  ██║          ║${NC}\"\n    echo -e \"${GREEN}${BOLD}    ║   ██║  ██║██║   ██║██║╚██╗██║██╔══╝  ╚═╝          ║${NC}\"\n    echo -e \"${GREEN}${BOLD}    ║   ██████╔╝╚██████╔╝██║ ╚████║███████╗██╗          ║${NC}\"\n    echo -e \"${GREEN}${BOLD}    ║   ╚═════╝  ╚═════╝ ╚═╝  ╚═══╝╚══════╝╚═╝          ║${NC}\"\n    echo -e \"${GREEN}${BOLD}    ║                                                   ║${NC}\"\n    echo -e \"${GREEN}${BOLD}    ║       ✨ XingRin Worker 节点部署完成！            ║${NC}\"\n    echo -e \"${GREEN}${BOLD}    ║                                                   ║${NC}\"\n    echo -e \"${GREEN}${BOLD}    ╚═══════════════════════════════════════════════════╝${NC}\"\n    echo -e \"\"\n}\n\n# 等待 apt 锁释放\nwait_for_apt_lock() {\n    local max_wait=60\n    local waited=0\n    while sudo fuser /var/lib/apt/lists/lock >/dev/null 2>&1 || \\\n          sudo fuser /var/lib/dpkg/lock >/dev/null 2>&1 || \\\n          sudo fuser /var/lib/dpkg/lock-frontend >/dev/null 2>&1; do\n        if [ $waited -eq 0 ]; then\n            log_info \"等待 apt 锁释放...\"\n        fi\n        sleep 2\n        waited=$((waited + 2))\n        if [ $waited -ge $max_wait ]; then\n            log_warn \"等待 apt 锁超时，继续尝试...\"\n            break\n        fi\n    done\n}\n\n# 检测操作系统\ndetect_os() {\n    if [ -f /etc/os-release ]; then\n        . /etc/os-release\n        OS=$ID\n    else\n        log_error \"无法检测操作系统\"\n        exit 1\n    fi\n    \n    if [[ \"$OS\" != \"ubuntu\" && \"$OS\" != \"debian\" && \"$OS\" != \"kali\" ]]; then\n        log_error \"仅支持 Ubuntu/Debian/Kali 系统\"\n        exit 1\n    fi\n}\n\n# 安装 Docker\ninstall_docker() {\n    if command -v docker &> /dev/null; then\n        log_info \"Docker 已安装: $(docker --version)\"\n        return 0\n    fi\n    \n    log_info \"安装 Docker...\"\n    \n    wait_for_apt_lock\n    \n    # 安装依赖\n    sudo apt-get update -qq\n    sudo apt-get install -y -qq ca-certificates curl gnupg lsb-release >/dev/null 2>&1\n    \n    # 添加 Docker GPG key\n    sudo mkdir -p /etc/apt/keyrings\n    curl -fsSL https://download.docker.com/linux/${OS}/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg 2>/dev/null\n    \n    # 添加 Docker 源\n    echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/${OS} $(lsb_release -cs) stable\" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n    \n    # 安装 Docker\n    sudo apt-get update -qq\n    sudo apt-get install -y -qq docker-ce docker-ce-cli containerd.io docker-compose-plugin >/dev/null 2>&1\n    \n    # 启动 Docker\n    sudo systemctl enable docker >/dev/null 2>&1 || true\n    sudo systemctl start docker >/dev/null 2>&1 || true\n    \n    # 添加当前用户到 docker 组\n    sudo usermod -aG docker $USER 2>/dev/null || true\n    \n    log_success \"Docker 安装完成\"\n}\n\n# 创建数据目录\ncreate_dirs() {\n    log_info \"创建数据目录...\"\n    sudo mkdir -p \"${MARKER_DIR}/results\"\n    sudo mkdir -p \"${MARKER_DIR}/logs\"\n    sudo mkdir -p \"${MARKER_DIR}/fingerprints\"\n    sudo mkdir -p \"${MARKER_DIR}/wordlists\"\n    sudo chmod -R 777 \"${MARKER_DIR}\"\n    log_success \"数据目录已创建\"\n}\n\n# 清理旧容器\ncleanup_old_containers() {\n    log_info \"清理旧容器...\"\n    \n    # 停止并删除旧的 agent 容器\n    docker stop xingrin-agent 2>/dev/null || true\n    docker rm xingrin-agent 2>/dev/null || true\n    \n    # 兼容旧名称\n    docker stop xingrin-watchdog 2>/dev/null || true\n    docker rm xingrin-watchdog 2>/dev/null || true\n    \n    log_success \"旧容器已清理\"\n}\n\n# 拉取 Worker 镜像（预先拉取，避免任务执行时网络延迟）\n# \n# 镜像拉取策略：\n# 1. 安装时预先拉取 worker 镜像到本地\n# 2. 后续任务执行时使用 --pull=missing，直接用本地镜像\n# 3. 版本由主服务器的 IMAGE_TAG 决定，确保版本一致性\npull_image() {\n    log_info \"拉取 Worker 镜像...\"\n    # 镜像版本由部署时传入（deploy_service.py 注入 IMAGE_TAG 环境变量）\n    if [ -z \"$IMAGE_TAG\" ]; then\n        log_error \"IMAGE_TAG 未设置，请确保部署时传入版本号\"\n        exit 1\n    fi\n    local docker_user=\"${DOCKER_USER:-yyhuni}\"\n    # 拉取指定版本的 worker 镜像（用于执行扫描任务）\n    sudo docker pull \"${docker_user}/xingrin-worker:${IMAGE_TAG}\"\n    log_success \"镜像拉取完成: ${docker_user}/xingrin-worker:${IMAGE_TAG}\"\n}\n\n# 主流程\nmain() {\n    show_banner\n    \n    detect_os\n    install_docker\n    cleanup_old_containers\n    create_dirs\n    pull_image\n    \n    touch \"$DOCKER_MARKER\"\n    \n    show_complete\n}\n\nmain \"$@\"\n"
  },
  {
    "path": "backend/scripts/worker-deploy/start-agent.sh",
    "content": "#!/bin/bash\n# ============================================\n# XingRin Agent 启动脚本\n# 用途：启动 agent 容器（心跳上报 + 负载监控）\n# \n# 架构说明：\n# - 使用 docker run 直接启动 agent 容器\n# - agent 负责心跳上报和系统负载监控\n# - 扫描任务由主服务器通过 SSH 执行独立的 worker 容器\n# - 镜像版本由主服务器传入，确保版本一致性\n# \n# 镜像拉取：\n# - 使用 --pull=missing，优先使用本地镜像\n# - 如果本地没有则从 Docker Hub 拉取\n# ============================================\n\nset -e\n\nMARKER_DIR=\"/opt/xingrin\"\nCONTAINER_NAME=\"xingrin-agent\"\n# 使用轻量 agent 镜像（~30MB），仅包含心跳上报功能\n# 镜像版本由部署时传入（必须设置）\nDOCKER_USER=\"${DOCKER_USER:-yyhuni}\"\nif [ -z \"$IMAGE_TAG\" ]; then\n    echo \"[ERROR] IMAGE_TAG 未设置，请确保部署时传入版本号\"\n    exit 1\nfi\nIMAGE=\"${DOCKER_USER}/xingrin-agent:${IMAGE_TAG}\"\n\n# 预设变量（远程部署时由 deploy_service.py 替换）\nPRESET_SERVER_URL=\"{{HEARTBEAT_API_URL}}\"\nPRESET_WORKER_ID=\"{{WORKER_ID}}\"\nPRESET_API_KEY=\"{{WORKER_API_KEY}}\"\n\n# 颜色定义\nGREEN='\\033[0;32m'\nBLUE='\\033[0;34m'\nNC='\\033[0m'\n\nlog_info() { echo -e \"${BLUE}[XingRin]${NC} $1\"; }\nlog_success() { echo -e \"${GREEN}[XingRin]${NC} $1\"; }\n\n# 停止旧容器\nstop_old() {\n    if docker ps -a --format '{{.Names}}' | grep -q \"^${CONTAINER_NAME}$\"; then\n        log_info \"停止旧的 agent 容器...\"\n        docker stop ${CONTAINER_NAME} 2>/dev/null || true\n        docker rm ${CONTAINER_NAME} 2>/dev/null || true\n    fi\n    # 兼容旧名称\n    if docker ps -a --format '{{.Names}}' | grep -q \"^xingrin-watchdog$\"; then\n        docker stop xingrin-watchdog 2>/dev/null || true\n        docker rm xingrin-watchdog 2>/dev/null || true\n    fi\n}\n\n# 启动 agent\nstart_agent() {\n    log_info \"==========================================\"\n    log_info \"  XingRin Agent 启动\"\n    log_info \"==========================================\"\n    \n    log_info \"启动 agent 容器...\"\n    # --pull=missing: 本地没有镜像时才拉取\n    # 版本更新由服务端通过 SSH 显式 docker pull 触发\n    docker run -d --pull=missing \\\n        --name ${CONTAINER_NAME} \\\n        --restart always \\\n        -e SERVER_URL=\"${PRESET_SERVER_URL}\" \\\n        -e WORKER_ID=\"${PRESET_WORKER_ID}\" \\\n        -e IMAGE_TAG=\"${IMAGE_TAG}\" \\\n        -e WORKER_API_KEY=\"${PRESET_API_KEY}\" \\\n        -v /proc:/host/proc:ro \\\n        ${IMAGE}\n    \n    log_success \"Agent 已启动\"\n}\n\n# 显示完成信息\nshow_completion() {\n    echo \"\"\n    log_success \"==========================================\"\n    log_success \"  ✓ Agent 已启动\"\n    log_success \"==========================================\"\n    echo \"\"\n    log_info \"管理命令：\"\n    echo \"  - 查看日志: docker logs -f ${CONTAINER_NAME}\"\n    echo \"  - 重启: docker restart ${CONTAINER_NAME}\"\n    echo \"  - 停止: docker stop ${CONTAINER_NAME}\"\n    echo \"\"\n}\n\n# 主流程\nmain() {\n    stop_old\n    start_agent\n    show_completion\n}\n\nmain \"$@\"\n"
  },
  {
    "path": "backend/scripts/worker-deploy/uninstall.sh",
    "content": "#!/bin/bash\n# ============================================\n# XingRin 远程节点卸载脚本\n# 用途：停止 agent 容器并清理环境\n# 支持：Ubuntu / Debian\n# ============================================\n\nset -e\n\nMARKER_DIR=\"/opt/xingrin\"\n\nGREEN='\\033[0;32m'\nBLUE='\\033[0;34m'\nNC='\\033[0m'\n\nlog_info() { echo -e \"${BLUE}[XingRin]${NC} $1\"; }\nlog_success() { echo -e \"${GREEN}[XingRin]${NC} $1\"; }\n\n# 停止 agent 容器\nstop_agent() {\n    log_info \"停止 agent 容器...\"\n    \n    # 停止新名称容器\n    docker stop xingrin-agent 2>/dev/null || true\n    docker rm xingrin-agent 2>/dev/null || true\n    \n    # 兼容旧名称\n    docker stop xingrin-watchdog 2>/dev/null || true\n    docker rm xingrin-watchdog 2>/dev/null || true\n    \n    log_success \"Agent 已停止\"\n}\n\n# 清理数据目录\ncleanup_data() {\n    log_info \"清理数据目录...\"\n    \n    if [ -d \"${MARKER_DIR}\" ]; then\n        sudo rm -rf \"${MARKER_DIR}\"\n        log_success \"数据目录已清理\"\n    fi\n}\n\n# 显示完成信息\nshow_completion() {\n    echo \"\"\n    log_success \"==========================================\"\n    log_success \"  ✓ 卸载完成\"\n    log_success \"==========================================\"\n    echo \"\"\n    log_info \"注意：Docker 未卸载，如需卸载请手动执行\"\n}\n\n# 主流程\nmain() {\n    log_info \"==========================================\"\n    log_info \"  XingRin 节点卸载\"\n    log_info \"==========================================\"\n    \n    stop_agent\n    cleanup_data\n    show_completion\n}\n\nmain \"$@\"\n"
  },
  {
    "path": "backend/wordlist/dir_default.txt",
    "content": "/api/admin/v1/users/all\r\n/registerSuccess.do\r\n/getALLUsers\r\n/swagger/static/index.html\r\n/swagger-ui/index.html\r\n/dubbo-provider/distv2/index.html\r\n/user/swagger-ui.html\r\n/swagger-dubbo/api-docs\r\n/distv2/index.html\r\n/static/swagger.json\r\n/api/index.html\r\n/v2/swagger.json\r\n/actuator/hystrix.stream\r\n/intergrationgraph\r\n/druid\r\n/swagger-ui/html\r\n/api/v2/api-docs\r\n/swagger/codes\r\n/template/swagger-ui.html\r\n/spring-security-rest/api/swagger-ui.html\r\n/spring-security-oauth-resource/swagger-ui.html\r\n/v2/api-docs\r\n/api.html\r\n/sw/swagger-ui.html\r\n/~www\r\n/~xfs\r\n/~uucp\r\n/~user5\r\n/~web\r\n/~user4\r\n/~user3\r\n/~user\r\n/~user1\r\n/~toor\r\n/~user2\r\n/~sync\r\n/~system\r\n/~testuser\r\n/~test\r\n/~shutdown\r\n/~sql\r\n/~root\r\n/~staff\r\n/~rpc\r\n/~reception\r\n/~rpcuser\r\n/~operator\r\n/~office\r\n/~nscd\r\n/~postmaster\r\n/~pop\r\n/~nobody\r\n/~news\r\n/~mailnull\r\n/~mail\r\n/~lp\r\n/~ident\r\n/~http\r\n/~helpdesk\r\n/~help\r\n/~halt\r\n/~gdm\r\n/~gopher\r\n/~guest\r\n/~games\r\n/~fwuser\r\n/~fwadmin\r\n/~firewall\r\n/~fw\r\n/~db\r\n/~database\r\n/~backup\r\n/~ftp\r\n/~data\r\n/~daemon\r\n/~bin\r\n/~apache\r\n/~admin/\r\n/~/\r\n/~anonymous\r\n/~administrator\r\n/zipkin/\r\n/~admin\r\n/~adm\r\n/zimbra\r\n/zf_backend.php\r\n/zone-h.php\r\n/zimbra/\r\n/yonetim.php\r\n/zeroclipboard.swf\r\n/zebra.conf\r\n/zehir.php\r\n/zabbix/\r\n/yum.log\r\n/yonetim.html\r\n/yonetici\r\n/ylwrap\r\n/yonetici.html\r\n/yonetici.php\r\n/yonetim\r\n/yarn.lock\r\n/yarn-error.log\r\n/yarn-debug.log\r\n/yaml_cron.log\r\n/xw.php\r\n/xx.php\r\n/yaml.log\r\n/xw1.php\r\n/xsql/lib/XSQLConfig.xml\r\n/xslt/\r\n/xsl/common.xsl\r\n/xsl/\r\n/xsl/_common.xsl\r\n/xsql/\r\n/xshell.php\r\n/xmlrpc.php\r\n/xphpMyAdmin/\r\n/xprober.php\r\n/xmlrpc_server.php\r\n/xphperrors.log\r\n/xmlrpc\r\n/xml/_common.xml\r\n/xml/common.xml\r\n/xml/\r\n/xls/\r\n/xml\r\n/xcuserdata/\r\n/xlogin/\r\n/xiaoma.php\r\n/xferlog\r\n/xd.php\r\n/xampp/phpmyadmin/scripts/setup.php\r\n/xampp/phpmyadmin/index.php\r\n/xampp/phpmyadmin/\r\n/xampp/\r\n/x.php\r\n/wwwstats.htm\r\n/wwwstat\r\n/wwwroot.zip\r\n/wwwroot.tgz\r\n/wwwroot.tar.bz2\r\n/wwwroot.tar.gz\r\n/wwwlog\r\n/wwwroot.tar\r\n/wwwroot.7z\r\n/wwwroot.sql\r\n/wwwroot.rar\r\n/wwwboard/passwd.txt\r\n/wwwboard/\r\n/www.zip\r\n/www/phpMyAdmin/index.php\r\n/www-error.log\r\n/www.tgz\r\n/www.tar.bz2\r\n/www-test/\r\n/www.tar\r\n/www.rar\r\n/www.tar.gz"
  },
  {
    "path": "backend/wordlist/subdomains-top1million-110000.txt",
    "content": "www\nmail\nftp\nlocalhost\nwebmail\nsmtp\nwebdisk\npop\ncpanel\nwhm\nns1\nns2\nautodiscover\nautoconfig\nns\ntest\nm\nblog\ndev\nwww2\nns3\npop3\nforum\nadmin\nmail2\nvpn\nmx\nimap\nold\nnew\nmobile\nmysql\nbeta\nsupport\ncp\nsecure\nshop\ndemo\ndns2\nns4\ndns1\nstatic\nlists\nweb\nwww1\nimg\nnews\nportal\nserver\nwiki\napi\nmedia\nimages\nwww.blog\nbackup\ndns\nsql\nintranet\nwww.forum\nwww.test\nstats\nhost\nvideo\nmail1\nmx1\nwww3\nstaging\nwww.m\nsip\nchat\nsearch\ncrm\nmx2\nads\nipv4\nremote\nemail\nmy\nwap\nsvn\nstore\ncms\ndownload\nproxy\nwww.dev\nmssql\napps\ndns3\nexchange\nmail3\nforums\nns5\ndb\noffice\nlive\nfiles\ninfo\nowa\nmonitor\nhelpdesk\npanel\nsms\nnewsletter\nftp2\nweb1\nweb2\nupload\nhome\nbbs\nlogin\napp\nen\nblogs\nit\ncdn\nstage\ngw\ndns4\nwww.demo\nssl\ncn\nsmtp2\nvps\nns6\nrelay\nonline\nservice\ntest2\nradio\nntp\nlibrary\nhelp\nwww4\nmembers\ntv\nwww.shop\nextranet\nhosting\nldap\nservices\nwebdisk.blog\ns1\ni\nsurvey\ns\nwww.mail\nwww.new\nc-n7k-v03-01.rz\ndata\ndocs\nc-n7k-n04-01.rz\nad\nlegacy\nrouter\nde\nmeet\ncs\nav\nsftp\nserver1\nstat\nmoodle\nfacebook\ntest1\nphoto\npartner\nnagios\nmrtg\ns2\nmailadmin\ndev2\nts\nautoconfig.blog\nautodiscover.blog\ngames\njobs\nimage\nhost2\ngateway\npreview\nwww.support\nim\nssh\ncorreo\ncontrol\nns0\nvpn2\ncloud\narchive\ncitrix\nwebdisk.m\nvoip\nconnect\ngame\nsmtp1\naccess\nlib\nwww5\ngallery\nredmine\nes\nirc\nstream\nqa\ndl\nbilling\nconstrutor\nlyncdiscover\npainel\nfr\nprojects\na\npgsql\nmail4\ntools\niphone\nserver2\ndbadmin\nmanage\njabber\nmusic\nwebmail2\nwww.beta\nmailer\nphpmyadmin\nt\nreports\nrss\npgadmin\nimages2\nmx3\nwww.webmail\nws\ncontent\nsv\nweb3\ncommunity\npoczta\nwww.mobile\nftp1\ndialin\nus\nsp\npanelstats\nvip\ncacti\ns3\nalpha\nvideos\nns7\npromo\ntesting\nsharepoint\nmarketing\nsitedefender\nmember\nwebdisk.dev\nemkt\ntraining\nedu\nautoconfig.m\ngit\nautodiscover.m\ncatalog\nwebdisk.test\njob\nww2\nwww.news\nsandbox\nelearning\nfb\nwebmail.cp\ndownloads\nspeedtest\ndesign\nstaff\nmaster\npanelstatsmail\nv2\ndb1\nmailserver\nbuilder.cp\ntravel\nmirror\nca\nsso\ntickets\nalumni\nsitebuilder\nwww.admin\nauth\njira\nns8\npartners\nml\nlist\nimages1\nclub\nbusiness\nupdate\nfw\ndevel\nlocal\nwp\nstreaming\nzeus\nimages3\nadm\nimg2\ngate\npay\nfile\nseo\nstatus\nshare\nmaps\nzimbra\nwebdisk.forum\ntrac\noa\nsales\npost\nevents\nproject\nxml\nwordpress\nimages4\nmain\nenglish\ne\nimg1\ndb2\ntime\nredirect\ngo\nbugs\ndirect\nwww6\nsocial\nwww.old\ndevelopment\ncalendar\nwww.forums\nru\nwww.wiki\nmonitoring\nhermes\nphotos\nbb\nmx01\nmail5\ntemp\nmap\nns10\ntracker\nsport\nuk\nhr\nautodiscover.test\nconference\nfree\nautoconfig.test\nclient\nvpn1\nautodiscover.dev\nb2b\nautoconfig.dev\nnoc\nwebconf\nww\npayment\nfirewall\nintra\nrt\nv\nclients\nwww.store\ngis\nm2\nevent\norigin\nsite\ndomain\nbarracuda\nlink\nns11\ninternal\ndc\nsmtp3\nzabbix\nmdm\nassets\nimages6\nwww.ads\nmars\nmail01\npda\nimages5\nc\nns01\ntech\nms\nimages7\nautoconfig.forum\npublic\ncss\nautodiscover.forum\nwebservices\nwww.video\nweb4\norion\npm\nfs\nw3\nstudent\nwww.chat\ndomains\nbook\nlab\no1.email\nserver3\nimg3\nkb\nfaq\nhealth\nin\nboard\nvod\nwww.my\ncache\natlas\nphp\nimages8\nwwww\nvoip750101.pg6.sip\ncas\norigin-www\ncisco\nbanner\nmercury\nw\ndirectory\nmailhost\ntest3\nshopping\nwebdisk.demo\nip\nmarket\npbx\ncareers\nauto\nidp\nticket\njs\nns9\noutlook\nfoto\nwww.en\npro\nmantis\nspam\nmovie\ns4\nlync\njupiter\ndev1\nerp\nregister\nadv\nb\ncorp\nsc\nns12\nimages0\nenet1\nmobil\nlms\nnet\nstorage\nss\nns02\nwork\nwebcam\nwww7\nreport\nadmin2\np\nnl\nlove\npt\nmanager\nd\ncc\nandroid\nlinux\nreseller\nagent\nweb01\nsslvpn\nn\nthumbs\nlinks\nmailing\nhotel\npma\npress\nvenus\nfinance\nuesgh2x\nnms\nds\njoomla\ndoc\nflash\nresearch\ndashboard\ntrack\nwww.img\nx\nrs\nedge\ndeliver\nsync\noldmail\nda\norder\neng\ntestbrvps\nuser\nradius\nstar\nlabs\ntop\nsrv1\nmailers\nmail6\npub\nhost3\nreg\nlb\nlog\nbooks\nphoenix\ndrupal\naffiliate\nwww.wap\nwebdisk.support\nwww.secure\ncvs\nst\nwksta1\nsaturn\nlogos\npreprod\nm1\nbackup2\nopac\ncore\nvc\nmailgw\npluto\nar\nsoftware\njp\nsrv\nnewsite\nwww.members\nopenx\notrs\ntitan\nsoft\nanalytics\ncode\nmp3\nsports\nstg\nwhois\napollo\nweb5\nftp3\nwww.download\nmm\nart\nhost1\nwww8\nwww.radio\ndemo2\nclick\nsmail\nw2\nfeeds\ng\neducation\naffiliates\nkvm\nsites\nmx4\nautoconfig.demo\ncontrolpanel\nautodiscover.demo\ntr\nebook\nwww.crm\nhn\nblack\nmcp\nadserver\nwww.staging\nstatic1\nwebservice\nf\ndevelop\nsa\nkatalog\nas\nsmart\npr\naccount\nmon\nmunin\nwww.games\nwww.media\ncam\nschool\nr\nmc\nid\nnetwork\nwww.live\nforms\nmath\nmb\nmaintenance\npic\nagk\nphone\nbt\nsm\ndemo1\nns13\ntw\nps\ndev3\ntracking\ngreen\nusers\nint\nathena\nwww.static\nwww.info\nsecurity\nmx02\nprod\n1\nteam\ntransfer\nwww.facebook\nwww10\nv1\ngoogle\nproxy2\nfeedback\nvpgk\nauction\nview\nbiz\nvpproxy\nsecure2\nwww.it\nnewmail\nsh\nmobi\nwm\nmailgate\ndms\n11192521404255\nautoconfig.support\nplay\n11192521403954\nstart\nlife\nautodiscover.support\nantispam\ncm\nbooking\niris\nwww.portal\nhq\ngc._msdcs\nneptune\nterminal\nvm\npool\ngold\ngaia\ninternet\nsklep\nares\nposeidon\nrelay2\nup\nresources\nis\nmall\ntraffic\nwebdisk.mail\nwww.api\njoin\nsmtp4\nwww9\nw1\nupl\nci\ngw2\nopen\naudio\nfax\nalfa\nwww.images\nalex\nspb\nxxx\nac\nedm\nmailout\nwebtest\nnfs01.jc\nme\nsun\nvirtual\nspokes\nns14\nwebserver\nmysql2\ntour\nigk\nwifi\npre\nabc\ncorporate\nadfs\nsrv2\ndelta\nloopback\nmagento\nbr\ncampus\nlaw\nglobal\ns5\nweb6\norange\nawstats\nstatic2\nlearning\nwww.seo\nchina\ngs\nwww.gallery\ntmp\nezproxy\ndarwin\nbi\nbest\nmail02\nstudio\nsd\nsignup\ndir\nserver4\narchives\ngolf\nomega\nvps2\nsg\nns15\nwin\nreal\nwww.stats\nc1\neshop\npiwik\ngeo\nmis\nproxy1\nweb02\npascal\nlb1\napp1\nmms\napple\nconfluence\nsns\nlearn\nclassifieds\npics\ngw1\nwww.cdn\nrp\nmatrix\nrepository\nupdates\nse\ndeveloper\nmeeting\ntwitter\nartemis\nau\ncat\nsystem\nce\necommerce\nsys\nra\norders\nsugar\nir\nwwwtest\nbugzilla\nlistserv\nwww.tv\nvote\nwebmaster\nwebdev\nsam\nwww.de\nvps1\ncontact\ngalleries\nhistory\njournal\nhotels\nwww.newsletter\npodcast\ndating\nsub\nwww.jobs\nwww.intranet\nwww.email\nmt\nscience\ncounter\ndns5\n2\npeople\nww3\nwww.es\nntp1\nvcenter\ntest5\nradius1\nocs\npower\npg\npl\nmagazine\nsts\nfms\ncustomer\nwsus\nbill\nwww.hosting\nvega\nnat\nsirius\nlg\n11285521401250\nsb\nhades\nstudents\nuat\nconf\nap\nuxr4\neu\nmoon\nwww.search\nchecksrv\nhydra\nusa\ndigital\nwireless\nbanners\nmd\nmysite\nwebmail1\nwindows\ntraveler\nwww.poczta\nhrm\ndatabase\nmysql1\ninside\ndebian\npc\nask\nbackend\ncz\nmx0\nmini\nautodiscover.mail\nrb\nwebdisk.shop\nmba\nwww.help\nwww.sms\ntest4\ndm\nsubscribe\nsf\npassport\nred\nvideo2\nag\nautoconfig.mail\nall.edge\nregistration\nns16\ncamera\nmyadmin\nns20\nuxr3\nmta\nbeauty\nfw1\nepaper\ncentral\ncert\nbackoffice\nbiblioteca\nmob\nabout\nspace\nmovies\nu\nms1\nec\nforum2\nserver5\nmoney\nradius2\nprint\nns18\nthunder\nnas\nww1\nwebdisk.webmail\nedit\nwww.music\nplanet\nm3\nvstagingnew\napp2\nrepo\nprueba\nhouse\nntp2\ndragon\npandora\nstock\nform\npp\nwww.sport\nphysics\nfood\ngroups\nantivirus\nprofile\nwww.online\nstream2\nhp\nd1\nnhko1111\nlogs\neagle\nv3\nmail7\ngamma\ncareer\nvpn3\nipad\ndom\nwebdisk.store\niptv\nwww.promo\nhd\nmag\nbox\ntalk\nhera\nf1\nwww.katalog\nsyslog\nfashion\nt1\n2012\nsoporte\nteste\nscripts\nwelcome\nhk\nparis\nwww.game\nmultimedia\nneo\nbeta2\nmsg\nio\nportal2\nsky\nwebdisk.beta\nweb7\nexam\ncluster\nwebdisk.new\nimg4\nsurveys\nwebmail.controlpanel\nerror\nprivate\nbo\nkids\ncard\nvmail\nswitch\nmessenger\ncal\nplus\ncars\nmanagement\nfeed\nxmpp\nns51\npremium\nwww.apps\nbackup1\nasp\nns52\nwebsite\npos\nlb2\nwww.foto\nws1\ndomino\nmailman\nasterisk\nweather\nmax\nma\nnode1\nwebapps\nwhite\nns17\ncdn2\ndealer\npms\ntg\ngps\nwww.travel\nlistas\nchelyabinsk-rnoc-rr02.backbone\nhub\ndemo3\nminecraft\nns22\nhw70f395eb456e\ndns01\nwpad\nnm\nch\nwww.catalog\nns21\nweb03\nwww.videos\nrc\nwww.web\ngemini\nbm\nlp\npdf\nwebapp\nnoticias\nmyaccount\nsql1\nhercules\nct\nfc\nmail11\npptp\ncontest\nwww.us\nmsk\nwidget\nstudy\n11290521402560\nposta\nee\nrealestate\nout\ngalaxy\nkms\nthor\nworld\nwebdisk.mobile\nwww.test2\nbase\ncd\nrelay1\ntaurus\ncgi\nwww0\nres\nd2\nintern\nc2\nwebdav\nmail10\nrobot\nvcs\nam\ndns02\ngroup\nsilver\nwww.dl\nadsl\nids\nex\nariel\ni2\ntrade\nims\nking\nwww.fr\nsistemas\necard\nthemes\nbuilder.controlpanel\nblue\nz\nsecuremail\nwww-test\nwmail\n123\nsonic\nnetflow\nenterprise\nextra\nwebdesign\nreporting\nlibguides\noldsite\nautodiscover.secure\ncheck\nwebdisk.secure\nluna\nwww11\ndown\nodin\nent\nweb10\ninternational\nfw2\nleo\npegasus\nmailbox\naaa\ncom\nacs\nvdi\ninventory\nsimple\ne-learning\nfire\ncb\nedi\nrsc\nyellow\nwww.sklep\nwww.social\nwebmail.cpanel\nact\nbc\nportfolio\nhb\nsmtp01\ncafe\nnexus\nwww.edu\nping\nmovil\nas2\nbuilder.control\nautoconfig.secure\npayments\ncdn1\nsrv3\nopenvpn\ntm\ncisco-capwap-controller\ndolphin\nwebmail3\nminerva\nco\nwwwold\nhotspot\nsuper\nproducts\nnova\nr1\nblackberry\nmike\npe\nacc\nlion\ntp\ntiger\nstream1\nwww12\nadmin1\nmx5\nserver01\nwebdisk.forums\nnotes\nsuporte\nfocus\nkm\nspeed\nrd\nlyncweb\nbuilder.cpanel\npa\nmx10\nwww.files\nfi\nkonkurs\nbroadcast\na1\nbuild\nearth\nwebhost\nwww.blogs\naurora\nreview\nmg\nlicense\nhomer\nservicedesk\nwebcon\ndb01\ndns6\ncfd297\nspider\nexpo\nnewsletters\nh\nems\ncity\nlotus\nfun\nautoconfig.webmail\nstatistics\nams\nall.videocdn\nautodiscover.shop\nautoconfig.shop\ntfs\nwww.billing\nhappy\ncl\nsigma\njwc\ndream\nsv2\nwms\none\nls\neuropa\nldap2\na4\nmerlin\nbuy\nweb11\ndk\nautodiscover.webmail\nro\nwidgets\nsql2\nmysql3\ngmail\nselfservice\nsdc\ntt\nmailrelay\na.ns\nns19\nwebstats\nplesk\nnsk\ntest6\nclass\nagenda\nadam\ngerman\nwww.v2\nrenew\ncar\ncorreio\nbk\ndb3\nvoice\nsentry\nalt\ndemeter\nwww.projects\nmail8\nbounce\ntc\noldwww\nwww.directory\nuploads\ncarbon\nall\nmark\nbbb\neco\n3g\ntestmail\nms2\nnode2\ntemplate\nandromeda\nwww.photo\nmedia2\narticles\nyoda\nsec\nactive\nnemesis\nautoconfig.new\nautodiscover.new\npush\nenews\nadvertising\nmail9\napi2\ndavid\nsource\nkino\nprime\no\nvb\ntestsite\nfm\nc4anvn3\nsamara\nreklama\nmade.by\nsis\nq\nmp\nnewton\nelearn\nautodiscover.beta\ncursos\nfilter\nautoconfig.beta\nnews2\nmf\nubuntu\ned\nzs\na.mx\ncenter\nwww.sandbox\nimg5\ntranslate\nwebmail.control\nmail0\nsmtp02\ns6\ndallas\nbob\nautoconfig.store\nstu\nrecruit\nmailtest\nreviews\nautodiscover.store\n2011\nwww.iphone\nfp\nd3\nrdp\nwww.design\ntest7\nbg\nconsole\noutbound\njpkc\next\ninvest\nweb8\ntestvb\nvm1\nfamily\ninsurance\natlanta\naqua\nfilm\ndp\nws2\nwebdisk.cdn\nwww.wordpress\nwebdisk.news\nat\nocean\ndr\nyahoo\ns8\nhost2123\nlibra\nrose\ncloud1\nalbum\n3\nantares\nwww.a\nipv6\nbridge\ndemos\ncabinet\ncrl\nold2\nangel\ncis\nwww.panel\nisis\ns7\nguide\nwebinar\npop2\ncdn101\ncompany\nexpress\nspecial\nloki\naccounts\nvideo1\nexpert\nclientes\np1\nloja\nblog2\nimg6\nl\nmail12\nstyle\nhcm\ns11\nmobile2\ntriton\ns12\nkr\nwww.links\ns13\nfriends\nwww.office\nshadow\nmymail\nautoconfig.forums\nns03\nneu\nautodiscover.forums\nwww.home\nroot\nupgrade\npuppet\nstorm\nwww.service\nisp\nget\nforo\nmytest\ntest10\ndesktop\npo\nmac\nwww.member\nph\nblackboard\ndspace\ndev01\nftp4\ntestwww\npresse\nldap1\nrock\nwow\nsw\nmsn\nmas\nscm\nits\nvision\ntms\nwww.wp\nhyperion\nnic\nhtml\nsale\nisp-caledon.cit\nwww.go\ndo\nmedia1\nweb9\nua\nenergy\nhelios\nchicago\nwebftp\ni1\ncommerce\nwww.ru\nunion\nnetmon\naudit\nvm2\nmailx\nweb12\npainelstats\nsol\nz-hn.nhac\nkvm2\nchris\nwww.board\napache\ntube\nmarvin\nbug\nexternal\npki\nviper\nwebadmin\nproduction\nr2\nwin2\nvpstun\nmx03\nios\nwww.uk\nsmile\nwww.fb\naa\nwww13\ntrinity\nwww.upload\nwww.testing\namazon\nhosting2\nbip\nmw\nwww.health\nindia\nweb04\nrainbow\ncisco-lwapp-controller\nuranus\nqr\ndomaindnszones\neditor\nwww.stage\nmanual\nnice\nrobin\ngandalf\nj\nbuzz\npassword\nautoconfig.mobile\ngb\nidea\neva\nwww.i\nserver6\nwww.job\nresults\nwww.test1\nmaya\npix\nwww.cn\ngz\nth\nwww.lib\nautodiscover.mobile\nb1\nhorus\nzero\nsv1\nwptest\ncart\nbrain\nmbox\nbd\ntester\nfotos\ness\nns31\nblogx.dev\nceres\ngatekeeper\ncsr\nwww.cs\nsakura\nchef\nparking\nidc\ndesarrollo\nmirrors\nsunny\nkvm1\nprtg\nmo\ndns0\nchaos\navatar\nalice\ntask\nwww.app\ndev4\nsl\nsugarcrm\nyoutube\nic-vss6509-gw\nsimon\nm4\ndexter\ncrystal\nterra\nfa\nserver7\njournals\niron\nuc\npruebas\nmagic\nead\nwww.helpdesk\n4\nserver10\ncomputer\ngalileo\ndelivery\naff\naries\nwww.development\nel\nlivechat\nhost4\nstatic3\nwww.free\nsk\npuma\ncoffee\ngh\njava\nfish\ntemplates\ntarbaby\nmtest\nlight\nwww.link\nsas\npoll\ndirector\ndestiny\naquarius\nvps3\nbravo\nfreedom\nboutique\nlite\nns25\nshop2\nic\nfoundation\ncw\nras\npark\nnext\ndiana\nsecure1\nk\neuro\nmanagedomain\ncastor\nwww-old\ncharon\nnas1\nla\njw\ns10\nweb13\nmxbackup2\neurope\noasis\ndonate\ns9\nftps\nfalcon\ndepot\ngenesis\nmysql4\nrms\nns30\nwww.drupal\nwholesale\nforestdnszones\nwww.alumni\nmarketplace\ntesla\nstatistik\ncountry\nimap4\nbrand\ngift\nshell\nwww.dev2\napply\nnc\nkronos\nepsilon\ntestserver\nsmtp-out\npictures\nautos\norg\nmysql5\nfrance\nshared\ncf\nsos\nstun\nchannel\n2013\nmoto\npw\noc.pool\neu.pool\nna.pool\ncams\nwww.auto\npi\nimage2\ntest8\nhi\ncasino\nmagazin\nwwwhost-roe001\nz-hcm.nhac\ntrial\ncam1\nvictor\nsig\nctrl\nwwwhost-ox001\nweblog\nrds\nfirst\nfarm\nwhatsup\npanda\ndummy\nstream.origin\ncanada\nwc\nflv\nwww.top\nemerald\nsim\nace\nsap\nga\nbank\net\nsoap\nguest\nmdev\nwww.client\nwww.partner\neasy\nst1\nwebvpn\nbaby\ns14\ndelivery.a\nwwwhost-port001\nhideip\ngraphics\nwebshop\ncatalogue\ntom\nrm\nperm\nwww.ad\nad1\nmail03\nwww.sports\nwater\nintranet2\nautodiscover.news\nbj\nnsb\ncharge\nexport\ntestweb\nsample\nquit\nproxy3\nemail2\nb2\nservicios\nnovo\nnew2\nmeta\nsecure3\najax\nautoconfig.news\nghost\nwww.cp\ngood\nbookstore\nkiwi\nft\ndemo4\nwww.archive\nsquid\npublish\nwest\nfootball\nprinter\ncv\nny\nboss\nsmtp5\nrsync\nsip2\nks\nleon\na3\nmta1\nepay\ntst\nmgmt\ndeals\ndropbox\nwww.books\n2010\ntorrent\nwebdisk.ads\nmx6\nwww.art\nchem\niproxy\nwww.pay\nanime\nccc\nanna\nns23\nhs\ncg\nacm\npollux\nlt\nmeteo\nowncloud\nandrew\nv4\nwww-dev\noxygen\njaguar\npanther\npersonal\nab\ndcp\nmed\nwww.joomla\njohn\nwatson\nmotor\nmails\nkiev\nasia\ncampaign\nwin1\ncards\nfantasy\ntj\nmartin\nhelium\nnfs\nads2\nscript\nanubis\nimail\ncp2\nmk\nbw\nem\ncreative\nwww.elearning\nad2\nstars\ndiscovery\nfriend\nreservations\nbuffalo\ncdp\nuxs2r\natom\ncosmos\nwww.business\na2\nxcb\nallegro\nom\nufa\ndw\ncool\nfiles2\nwebdisk.chat\nford\noma\nzzb\nstaging2\ntexas\nib\ncwc\naphrodite\nre\nspark\nwww.ftp\noscar\natlantis\nosiris\nos\nm5\ndl1\nwww.shopping\nice\nbeta1\nmcu\ninter\ninterface\ngm\nkiosk\nso\ndss\nwww.survey\ncustomers\nfx\nnsa\ncsg\nmi\nurl\ndl2\nshow\nwww.classifieds\nmexico\nknowledge\nfrank\ntests\naccounting\nkrasnodar\num\nhc\nwww.nl\necho\nproperty\ngms\nlondon\nwww.clients\nacademy\ncyber\nwww.english\nmuseum\npoker\nwww.downloads\ngp\ncr\narch\ngd\nvirgo\nsi\nsmtp-relay\nipc\ngay\ngg\noracle\nruby\ngrid\nweb05\ni3\ntool\nbulk\njazz\nprice\npan\nwebdisk.admin\nagora\nw4\nmv\nwww.moodle\nphantom\nweb14\nradius.auth\nvoyager\nmint\neinstein\nwedding\nsqladmin\ncam2\nautodiscover.chat\ntrans\nche\nbp\ndsl\nkazan\nautoconfig.chat\nal\npearl\ntransport\nlm\nh1\ncondor\nhomes\nair\nstargate\nai\nwww.www2\nhot\npaul\nnp\nkp\nengine\nts3\nnano\ntesttest\nsss\njames\ngk\nep\nox\ntomcat\nns32\nsametime\ntornado\ne1\ns16\nquantum\nslave\nshark\nautoconfig.cdn\nwww.love\nbackup3\nwebdisk.wiki\naltair\nyouth\nkeys\nsite2\nserver11\nphobos\ncommon\nautodiscover.cdn\nkey\ntest9\ncore2\nsnoopy\nlisa\nsoccer\ntld\nbiblio\nsex\nfast\ntrain\nwww.software\ncredit\np2\ncbf1\nns24\nmailin\ndj\nwww.community\nwww-a\nwww-b\nsmtps\nvictoria\nwww.docs\ncherry\ncisl-murcia.cit\nborder\ntest11\nnemo\npass\nmta2\n911\nxen\nhg\nbe\nwa\nweb16\nbiologie\nbes\nfred\nturbo\nbiology\nindigo\nplan\nwww.stat\nhosting1\npilot\nwww.club\ndiamond\nwww.vip\ncp1\nics\nwww.library\nautoconfig.admin\njapan\nautodiscover.admin\nquiz\nlaptop\ntodo\ncdc\nmkt\nmu\ndhcp.pilsnet\ndot\nxenon\ncsr21.net\nhorizon\nvp\ncentos\ninf\nwolf\nmr\nfusion\nretail\nlogo\nline\n11\nsr\nshorturl\nspeedy\nwebct\nomsk\ndns7\nebooks\napc\nrus\nlanding\npluton\nwww.pda\nw5\nsan\ncourse\naws\nuxs1r\nspirit\nts2\nsrv4\nclassic\nwebdisk.staging\ng1\nops\ncomm\nbs\nsage\ninnovation\ndynamic\nwww.www\nresellers\nresource\ncolo\ntest01\nswift\nbms\nmetro\ns15\nvn\ncallcenter\nwww.in\nscc\njerry\nsite1\nprofiles\npenguin\nsps\nmail13\nportail\nfaculty\neis\nrr\nmh\ncount\npsi\nflorida\nmango\nmaple\nssltest\ncloud2\ngeneral\nwww.tickets\nmaxwell\nweb15\nfamiliar\narc\naxis\nng\nadmissions\ndedicated\ncash\nnsc\nwww.qa\ntea\ntpmsqr01\nrnd\njocuri\noffice2\nmario\nxen2\nmradm.letter\ncwa\nninja\namur\ncore1\nmiami\nwww.sales\ncerberus\nixhash\nie\naction\ndaisy\nspf\np3\njunior\noss\npw.openvpn\nalt-host\nfromwl\nnobl\nisphosts\nns26\nhelomatch\ntest123\ntftp\nwebaccess\ntienda\nhostkarma\nlv\nfreemaildomains\nsbc\ntestbed\nbart\nironport\nserver8\ndh\ncrm2\nwatch\nskynet\nmiss\ndante\nwww.affiliates\nlegal\nwww.ip\ntelecom\ndt\nblog1\nwebdisk.email\nip-us\npixel\nwww.t\ndnswl\nkorea\ninsight\ndd\nwww.rss\ntestbl\nwww01\nauth-hack\nwww.cms\nabuse-report\npb\ncasa\neval\nbio\napp3\ncobra\nwww.ar\nsolo\nwall\noc\ndc1\nbeast\ngeorge\neureka\nsit\ndemo5\nholiday\nwebhosting\nsrv01\nrouter2\nssp\nserver9\nquotes\neclipse\nentertainment\nkc\nm0\naf\ncpa\npc.jura-gw1\nfox\ndeal\ndav\nwww.training\nwebdisk.old\nhost5\nmix\nvendor\nuni\nmypage\nspa\nsoa\naura\nref\narm\ndam\nconfig\naustin\naproxy\ndevelopers\ncms2\nwww15\nwomen\nwwwcache\nabs\ntestportal\ninet\ngt\ntestshop\ng2\nwww.ca\npinnacle\nsupport2\nsunrise\nsnake\nwww-new\npatch\nlk\nsv3\nb.ns\npython\nstarwars\ncube\nsj\ns0\ngc\nstud\nmicro\nwebstore\ncoupon\nperseus\nmaestro\nrouter1\nhawk\npf\nh2\nwww.soft\ndns8\nfly\nunicorn\nsat\nna\nxyz\ndf\nlynx\nactivate\nsitemap\nt2\ncats\nmmm\nvolgograd\ntest12\nsendmail\nhardware\nara\nimport\nces\ncinema\narena\ntext\na5\nastro\ndoctor\ncasper\nsmc\nvoronezh\neric\nagency\nwf\navia\nplatinum\nbutler\nyjs\nhospital\nnursing\nadmin3\npd\nsafety\nteszt\ntk\ns20\nmoscow\nkaren\ncse\nmessages\nwww.adserver\nasa\neros\nwww.server\nplayer\nraptor\ndocuments\nsrv5\nwww.photos\nxb\nexample\nculture\ndemo6\ndev5\njc\nict\nback\np2p\nstuff\nwb\nccs\nsu\nwebinars\nkt\nhope\nhttp\ntry\ntel\nm9\nnewyork\ngov\nwww.marketing\nrelax\nsetup\nfileserver\nmoodle2\ncourses\nannuaire\nfresh\nwww.status\nrpc\nzeta\nibank\nhelm\nautodiscover.ads\nmailgateway\nintegration\nviking\nmetrics\nc.ns.e\nwebdisk.video\nwww.host\ntasks\nmonster\nfirefly\nicq\nsaratov\nwww.book\nsmtp-out-01\ntourism\ndz\nzt\ndaniel\nroundcube\npaper\n24\nsus\nsplash\nzzz\n10\nchat2\nautoconfig.ads\nmailhub\nneon\nmessage\nseattle\nftp5\nport\nsolutions\noffers\nseth\nserver02\npeter\nns29\nmaillist\nwww.konkurs\nd.ns.e\ntoto\nguides\nae\nhealthcare\nssc\nmproxy\nmetis\nestore\nmailsrv\nsingapore\nhm\nmedusa\nbl\nbz\ni5\ndan\nthomas\nexchbhlan5\nalert\nwww.spb\nst2\nwww.tools\nrigel\ne.ns.e\nkvm3\nastun\ntrk\nwww.law\nqavgatekeeper\ncollab\nstyx\nwebboard\ncag\nwww.student\ngaleria\ncheckout\ngestion\nmailgate2\ndraco\nn2\nberlin\ntouch\nseminar\nolympus\nqavmgk\nf.ns.e\nintl\nstats2\nplato\nsend\nidm\nm7\nmx7\nm6\ncoco\ndenver\ns32\ntoronto\nabuse\ndn\nsophos\nbear\nlogistics\ncancer\ns24\nr25\ns22\ninstall\nistun\nitc\noberon\ncps\npaypal\n7\nmail-out\nportal1\ncase\nhideip-usa\nf3\npcstun\nip-usa\nwarehouse\nwebcast\nds1\nbn\nrest\nlogger\nmarina\ntula\nvebstage3\nwebdisk.static\ninfinity\npolaris\nkoko\npraca\nfl\npackages\nmstun\nwww.staff\nsunshine\nmirror1\njeff\nmailservers\njenkins\nadministration\nmlr-all\nblade\nqagatekeeper\ncdn3\naria\nvulcan\nparty\nfz\nluke\nstc\nmds\nadvance\nandy\nsubversion\ndeco\n99\ndiemthi\nliberty\nread\nsmtprelayout\nfitness\nvs\ndhcp.zmml\ntsg\nwww.pt\nwin3\ndavinci\ntwo\nstella\nitsupport\naz\nns27\nhyper\nm10\ndrm\nvhost\nmir\nwebspace\nmail.test\nargon\nhamster\nlivehelp\n2009\nbwc\nman\nada\nexp\nmetal\npk\nmsp\nhotline\narticle\ntwiki\ngl\nhybrid\nwww.login\ncbf8\nsandy\nanywhere\nsorry\nenter\neast\nislam\nwww.map\nquote\nop\ntb\nzh\neuro2012\nhestia\nrwhois\nmail04\nschedule\nww5\nservidor\nivan\nserenity\ndave\nmobile1\nok\nlc\nsynergy\nmyspace\nsipexternal\nmarc\nbird\nrio\nwww.1\ndebug\nhouston\npdc\nwww.xxx\nnews1\nha\nmirage\nfe\njade\nroger\nava\ntopaz\na.ns.e\nmadrid\nkh\ncharlotte\ndownload2\nelite\ntenders\npacs\ncap\nfs1\nmyweb\ncalvin\nextreme\ntypo3\ndealers\ncds\ngrace\nwebchat\ncomet\nwww.maps\nranking\nhawaii\npostoffice\narts\nb.ns.e\npresident\nmatrixstats\nwww.s\neden\ncom-services-vip\nwww.pics\nil\nsolar\nwww.loja\ngr\nns50\nsvc\nbackups\nsq\npinky\njwgl\ncontroller\nwww.up\nsn\nmedical\nspamfilter\nprova\nmembership\ndc2\nwww.press\ncsc\ngry\ndrweb\nweb17\nf2\nnora\nmonitor1\ncalypso\nnebula\nlyris\npenarth.cit\nwww.mp3\nssl1\nns34\nns35\nmel\nas1\nwww.x\ncricket\nns2.cl\ngeorgia\ncallisto\nexch\ns21\neip\ncctv\nlucy\nbmw\ns23\nsem\nmira\nsearch2\nftp.blog\nrealty\nftp.m\nwww.hrm\npatrick\nfind\ntcs\nts1\nsmtp6\nlan\nimage1\ncsi\nnissan\nsjc\nsme\nstone\nmodel\ngitlab\nspanish\nmichael\nremote2\nwww.pro\ns17\nm.dev\nwww.soporte\ncheckrelay\ndino\nwoman\naragorn\nindex\nzj\ndocumentation\nfelix\nwww.events\nwww.au\nadult\ncoupons\nimp\noz\nwww.themes\ncharlie\nrostov\nsmtpout\nwww.faq\nff\nfortune\nvm3\nvms\nsbs\nstores\nteamspeak\nw6\njason\ntennis\nnt\nshine\npad\nwww.mobil\ns25\nwoody\ntechnology\ncj\nvisio\nrenewal\nwww.c\nwebdisk.es\nsecret\nhost6\nwww.fun\npolls\nweb06\nturkey\nwww.hotel\necom\ntours\nproduct\nwww.reseller\nindiana\nmercedes\ntarget\nload\narea\nmysqladmin\ndon\ndodo\nsentinel\nwebdisk.img\nwebsites\nwww.dir\nhoney\nasdf\nspring\ntag\nastra\nmonkey\nns28\nben\nwww22\nwww.journal\neas\nwww.tw\ntor\npage\nwww.bugs\nmedias\nwww17\ntoledo\nvip2\nland\nsistema\nwin4\ndell\nunsubscribe\ngsa\nspot\nfin\nsapphire\nul-cat6506-gw\nwww.ns1\nbell\ncod\nlady\nwww.eng\nclick3\npps\nc3\nregistrar\nwebsrv\ndatabase2\nprometheus\natm\nwww.samara\napi1\nedison\nmega\ncobalt\neos\ndb02\nsympa\ndv\nwebdisk.games\ncoop\n50\nblackhole\n3d\ncma\nehr\ndb5\netc\nwww14\nopera\nzoom\nrealmedia\nfrench\ncmc\nshanghai\nns33\nbatman\nifolder\nns61\nalexander\nsong\nproto\ncs2\nhomologacao\nips\nvanilla\nlegend\nwebmail.hosting\nchat1\nwww.mx\ncoral\ntim\nmaxim\nadmission\niso\npsy\nprogress\nshms2\nmonitor2\nlp2\nthankyou\nissues\ncultura\nxyh\nspeedtest2\ndirac\nwww.research\nwebs\ne2\nsave\ndeploy\nemarketing\njm\nnn\nalfresco\nchronos\npisces\ndatabase1\nreservation\nxena\ndes\ndirectorio\nshms1\npet\nsauron\nups\nwww.feedback\nwww.usa\nteacher\nwww.magento\nnis\nftp01\nbaza\nkjc\nroma\ncontests\ndelphi\npurple\noak\nwin5\nviolet\nwww.newsite\ndeportes\nwww.work\nmusica\ns29\nautoconfig.es\nidentity\nwww.fashion\nforest\nflr-all\nwww.german\nlead\nfront\nrabota\nmysql7\njack\nvladimir\nsearch1\nns3.cl\npromotion\nplaza\ndevtest\ncookie\neris\nwebdisk.images\natc\nautodiscover.es\nlucky\njuno\nbrown\nrs2\nwww16\nbpm\nwww.director\nvictory\nfenix\nrich\ntokyo\nns36\nsrc\n12\nmilk\nssl2\nnotify\nno\nlivestream\npink\nsony\nvps4\nscan\nwwws\novpn\ndeimos\nsmokeping\nva\nn7pdjh4\nlyncav\nwebdisk.directory\ninteractive\nrequest\napt\npartnerapi\nalbert\ncs1\nns62\nbus\nyoung\nsina\npolice\nworkflow\nasset\nlasvegas\nsaga\np4\nwww.image\ndag\ncrazy\ncolorado\nwebtrends\nbuscador\nhongkong\nrank\nreserve\nautoconfig.wiki\nautodiscover.wiki\nnginx\nhu\nmelbourne\nzm\ntoolbar\ncx\nsamsung\nbender\nsafe\nnb\njjc\ndps\nap1\nwin7\nwl\ndiendan\nwww.preview\nvt\nkalender\ntestforum\nexmail\nwizard\nqq\nwww.film\nxxgk\nwww.gold\nirkutsk\ndis\nzenoss\nwine\ndata1\nremus\nkelly\nstalker\nautoconfig.old\neverest\nftp.test\nspain\nautodiscover.old\nobs\nocw\nicare\nideas\nmozart\nwillow\ndemo7\ncompass\njapanese\noctopus\nprestige\ndash\nargos\nforum1\nimg7\nwebdisk.download\nmysql01\njoe\nflex\nredir\nviva\nge\nmod\npostfix\nwww.p\nimagine\nmoss\nwhmcs\nquicktime\nrtr\nds2\nfuture\ny\nsv4\nopt\nmse\nselene\nmail21\ndns11\nserver12\ninvoice\nclicks\nimgs\nxen1\nmail14\nwww20\ncit\nweb08\ngw3\nmysql6\nzp\nwww.life\nleads\ncnc\nbonus\nweb18\nsia\nflowers\ndiary\ns30\nproton\ns28\npuzzle\ns27\nr2d2\norel\neo\ntoyota\nfront2\nwww.pl\ndescargas\nmsa\nesx2\nchallenge\nturing\nemma\nmailgw2\nelections\nwww.education\nrelay3\ns31\nwww.mba\npostfixadmin\nged\nscorpion\nhollywood\nfoo\nholly\nbamboo\ncivil\nvita\nlincoln\nwebdisk.media\nstory\nht\nadonis\nserv\nvoicemail\nef\nmx11\npicard\nc3po\nhelix\napis\nhousing\nuptime\nbet\nphpbb\ncontents\nrent\nwww.hk\nvela\nsurf\nsummer\ncsr11.net\nbeijing\nbingo\nwww.jp\nedocs\nmailserver2\nchip\nstatic4\necology\nengineering\ntomsk\niss\ncsr12.net\ns26\nutility\npac\nky\nvisa\nta\nweb22\nernie\nfis\ncontent2\neduroam\nyouraccount\nplayground\nparadise\nserver22\nrad\ndomaincp\nppc\nautodiscover.video\ndate\nf5\nopenfire\nmail.blog\ni4\nwww.reklama\netools\nftptest\ndefault\nkaluga\nshop1\nmmc\n1c\nserver15\nautoconfig.video\nve\nwww21\nimpact\nlaura\nqmail\nfuji\ncsr31.net\narcher\nrobo\nshiva\ntps\nwww.eu\nivr\nforos\nebay\nwww.dom\nlime\nmail20\nb3\nwss\nvietnam\ncable\nwebdisk.crm\nx1\nsochi\nvsp\nwww.partners\npolladmin\nmaia\nfund\nasterix\nc4\nwww.articles\nfwallow\nall-nodes\nmcs\nesp\nhelena\ndoors\natrium\nwww.school\npopo\nmyhome\nwww.demo2\ns18\nautoconfig.email\ncolumbus\nautodiscover.email\nns60\nabo\nclassified\nsphinx\nkg\ngate2\nxg\ncronos\nchemistry\nnavi\narwen\nparts\ncomics\nwww.movies\nwww.services\nsad\nkrasnoyarsk\nh3\nvirus\nhasp\nbid\nstep\nreklam\nbruno\nw7\ncleveland\ntoko\ncruise\np80.pool\nagri\nleonardo\nhokkaido\npages\nrental\nwww.jocuri\nfs2\nipv4.pool\nwise\nha.pool\nrouternet\nleopard\nmumbai\ncanvas\ncq\nm8\nmercurio\nwww.br\nsubset.pool\ncake\nvivaldi\ngraph\nld\nrec\nwww.temp\nbach\nmelody\ncygnus\nwww.charge\nmercure\nprogram\nbeer\nscorpio\nupload2\nsiemens\nlipetsk\nbarnaul\ndialup\nmssql2\neve\nmoe\nnyc\nwww.s1\nmailgw1\nstudent1\nuniverse\ndhcp1\nlp1\nbuilder\nbacula\nww4\nwww.movil\nns42\nassist\nmicrosoft\nwww.careers\nrex\ndhcp\nautomotive\nedgar\ndesigner\nservers\nspock\njose\nwebdisk.projects\nerr\narthur\nnike\nfrog\nstocks\npns\nns41\ndbs\nscanner\nhunter\nvk\ncommunication\ndonald\npower1\nwcm\nesx1\nhal\nsalsa\nmst\nseed\nsz\nnz\nproba\nyx\nsmp\nbot\neee\nsolr\nby\nface\nhydrogen\ncontacts\nars\nsamples\nnewweb\neprints\nctx\nnoname\nportaltest\ndoor\nkim\nv28\nwcs\nats\nzakaz\npolycom\nchelyabinsk\nhost7\nwww.b2b\nxray\ntd\nttt\nsecure4\nrecruitment\nmolly\nhumor\nsexy\ncare\nvr\ncyclops\nbar\nnewserver\ndesk\nrogue\nlinux2\nns40\nalerts\ndvd\nbsc\nmec\n20\nm.test\neye\nwww.monitor\nsolaris\nwebportal\ngoto\nkappa\nlifestyle\nmiki\nmaria\nwww.site\ncatalogo\n2008\nempire\nsatellite\nlosangeles\nradar\nimg01\nn1\nais\nwww.hotels\nwlan\nromulus\nvader\nodyssey\nbali\nnight\nc5\nwave\nsoul\nnimbus\nrachel\nproyectos\njy\nsubmit\nhosting3\nserver13\nd7\nextras\naustralia\nfilme\ntutor\nfileshare\nheart\nkirov\nwww.android\nhosted\njojo\ntango\njanus\nvesta\nwww18\nnew1\nwebdisk.radio\ncomunidad\nxy\ncandy\nsmg\npai\ntuan\ngauss\nao\nyaroslavl\nalma\nlpse\nhyundai\nja\ngenius\nti\nski\nasgard\nwww.id\nrh\nimagenes\nkerberos\nwww.d\nperu\nmcq-media-01.iutnb\nazmoon\nsrv6\nig\nfrodo\nafisha\n25\nfactory\nwinter\nharmony\nnetlab\nchance\nsca\narabic\nhack\nraven\nmobility\nnaruto\nalba\nanunturi\nobelix\nlibproxy\nforward\ntts\nautodiscover.static\nbookmark\nwww.galeria\nsubs\nba\ntestblog\napex\nsante\ndora\nconstruction\nwolverine\nautoconfig.static\nofertas\ncall\nlds\nns45\nwww.project\ngogo\nrussia\nvc1\nchemie\nh4\n15\ndvr\ntunnel\n5\nkepler\nant\nindonesia\ndnn\npicture\nencuestas\nvl\ndiscover\nlotto\nswf\nash\npride\nweb21\nwww.ask\ndev-www\numa\ncluster1\nring\nnovosibirsk\nmailold\nextern\ntutorials\nmobilemail\nwww.2\nkultur\nhacker\nimc\nwww.contact\nrsa\nmailer1\ncupid\nmember2\ntesty\nsystems\nadd\nmail.m\ndnstest\nwebdisk.facebook\nmama\nhello\nphil\nns101\nbh\nsasa\npc1\nnana\nowa2\nwww.cd\ncompras\nwebdisk.en\ncorona\nvista\nawards\nsp1\nmz\niota\nelvis\ncross\naudi\ntest02\nmurmansk\nwww.demos\ngta\nautoconfig.directory\nargo\ndhcp2\nwww.db\nwww.php\ndiy\nws3\nmediaserver\nautodiscover.directory\nncc\nwww.nsk\npresent\ntgp\nitv\ninvestor\npps00\njakarta\nboston\nwww.bb\nspare\nif\nsar\nwin11\nrhea\nconferences\ninbox\nvideoconf\ntsweb\nwww.xml\ntwr1\njx\napps2\nglass\nmonit\npets\nserver20\nwap2\ns35\nanketa\nwww.dav75.users\nanhth\nmontana\nsierracharlie.users\nsp2\nparents\nevolution\nanthony\nwww.noc\nyeni\nnokia\nwww.sa\ngobbit.users\nns2a\nza\nwww.domains\nultra\nrebecca.users\ndmz\norca\ndav75.users\nstd\nev\nfirmware\nece\nprimary\nsao\nmina\nweb23\nast\nsms2\nwww.hfccourse.users\nwww.v28\nformacion\nweb20\nist\nwind\nopensource\nwww.test2.users\ne3\nclifford.users\nxsc\nsw1\nwww.play\nwww.tech\ndns12\noffline\nvds\nxhtml\nsteve\nmail.forum\nwww.rebecca.users\nhobbit\nmarge\nwww.sierracharlie.users\ndart\nsamba\ncore3\ndevil\nserver18\nlbtest\nmail05\nsara\nalex.users\nwww.demwunz.users\nwww23\nvegas\nitalia\nez\ngollum\ntest2.users\nhfccourse.users\nana\nprof\nwww.pluslatex.users\nmxs\ndance\navalon\npidlabelling.users\ndubious.users\nwebdisk.search\nquery\nclientweb\nwww.voodoodigital.users\npharmacy\ndenis\nchi\nseven\nanimal\ncas1\ns19\ndi\nautoconfig.images\nwww.speedtest\nyes\nautodiscover.images\nwww.galleries\necon\nwww.flash\nwww.clifford.users\nln\norigin-images\nwww.adrian.users\nsnow\ncad\nvoyage\nwww.pidlabelling.users\ncameras\nvolga\nwallace\nguardian\nrpm\nmpa\nflower\nprince\nexodus\nmine\nmailings\ncbf3\nwww.gsgou.users\nwellness\ntank\nvip1\nname\nbigbrother\nforex\nrugby\nwebdisk.sms\ngraduate\nwebdisk.videos\nadrian\nmic\n13\nfirma\nwww.dubious.users\nwindu\nhit\nwww.alex.users\ndcc\nwagner\nlaunch\ngizmo\nd4\nrma\nbetterday.users\nyamato\nbee\npcgk\ngifts\nhome1\nwww.team\ncms1\nwww.gobbit.users\nskyline\nogloszenia\nwww.betterday.users\nwww.data\nriver\neproc\nacme\ndemwunz.users\nnyx\ncloudflare-resolve-to\nyou\nsci\nvirtual2\ndrive\nsh2\ntoolbox\nlemon\nhans\npsp\ngoofy\nfsimg\nlambda\nns55\nvancouver\nhkps.pool\nadrian.users\nns39\nvoodoodigital.users\nkz\nns1a\ndelivery.b\nturismo\ncactus\npluslatex.users\nlithium\neuclid\nquality\ngsgou.users\nonyx\ndb4\nwww.domain\npersephone\nvalidclick\nelibrary\nwww.ts\npanama\nwww.wholesale\nui\nrpg\nwww.ssl\nxenapp\nexit\nmarcus\nphd\nl2tp-us\ncas2\nrapid\nadvert\nmalotedigital\nbluesky\nfortuna\nchief\nstreamer\nsalud\nweb19\nstage2\nmembers2\nwww.sc\nalaska\nspectrum\nbroker\noxford\njb\njim\ncheetah\nsofia\nwebdisk.client\nnero\nrain\ncrux\nmls\nmrtg2\nrepair\nmeteor\nsamurai\nkvm4\nural\ndestek\npcs\nmig\nunity\nreporter\nftp-eu\ncache2\nvan\nsmtp10\nnod\nchocolate\ncollections\nkitchen\nrocky\npedro\nsophia\nst3\nnelson\nak\njl\nslim\nwap1\nsora\nmigration\nwww.india\nns04\nns37\nums\nwww.labs\nblah\nadimg\nyp\ndb6\nxtreme\ngroupware\ncollection\nblackbox\nsender\nt4\ncollege\nkevin\nvd\neventos\ntags\nus2\nmacduff\nwwwnew\npublicapi\nweb24\njasper\nvladivostok\ntender\npremier\ntele\nwwwdev\nwww.pr\npostmaster\nhaber\nzen\nnj\nrap\nplanning\ndomain2\nveronica\nisa\nwww.vb\nlamp\ngoldmine\nwww.geo\nwww.math\nmcc\nwww.ua\nvera\nnav\nnas2\nautoconfig.staging\ns33\nboards\nthumb\nautodiscover.staging\ncarmen\nferrari\njordan\nquatro\ngazeta\nwww.test3\nmanga\ntechno\nvm0\nvector\nhiphop\nwww.bbs\nrootservers\ndean\nwww.ms\nwin12\ndreamer\nalexandra\nsmtp03\njackson\nwing\nldap3\nwww.webmaster\nhobby\nmen\ncook\nns70\nolivia\ntampa\nkiss\nnevada\nlive2\ncomputers\ntina\nfestival\nbunny\njump\nmilitary\nfj\nkira\npacific\ngonzo\nftp.dev\nsvpn\nserial\nwebster\nwww.pe\ns204\nromania\ngamers\nguru\nsh1\nlewis\npablo\nyoshi\nlego\ndivine\nitaly\nwallpapers\nnd\nmyfiles\nneptun\nwww.world\nconvert\nwww.cloud\nproteus\nmedicine\nbak\nlista\ndy\nrhino\ndione\nsip1\ncalifornia\n100\ncosmic\nelectronics\nopenid\ncsm\nadm2\nsoleil\ndisco\nwww.pp\nxmail\nwww.movie\npioneer\nphplist\nelephant\nftp6\ndepo\nicon\nwww.ns2\nwww.youtube\nota\ncapacitacion\nmailfilter\nswitch1\nryazan\nauth2\npaynow\nwebtv\npas\nwww.v3\nstorage1\nrs1\nsakai\npim\nvcse\nko\noem\ntheme\ntumblr\nsmtp0\nserver14\nlala\nstorage2\nk2\necm\nmoo\ncan\nimode\nwebdisk.gallery\nwebdisk.jobs\nhoward\nmes\neservices\nnoah\nsupport1\nsoc\ngamer\nekb\nmarco\ninformation\nheaven\nty\nkursk\nwilson\nwebdisk.wp\nfreebsd\nphones\nvoid\nesx3\nempleo\naida\ns01\napc1\nmysites\nwww.kazan\ncalc\nbarney\nprohome\nfd\nkenny\nwww.filme\nebill\nd6\nera\nbig\ngoodluck\nrdns2\neverything\nns43\nmonty\nbib\nclip\nalf\nquran\naim\nlogon\nwg\nrabbit\nntp3\nupc\nwww.stream\nwww.ogloszenia\nabcd\nautodiscover.en\nblogger\npepper\nautoconfig.en\nstat1\njf\nsmtp7\nvideo3\neposta\ncache1\nekaterinburg\ntalent\njewelry\necs\nbeta3\nwww.proxy\nzsb\n44\nww6\nnautilus\nangels\nservicos\nsmpp\nwe\nsiga\nmagnolia\nsmt\nmaverick\nfranchise\ndev.m\nwebdisk.info\npenza\nshrek\nfaraday\ns123\naleph\nvnc\nchinese\nglpi\nunix\nleto\nwin10\nanswers\natt\nwebtools\nsunset\nextranet2\nkirk\nmitsubishi\nppp\ncargo\ncomercial\nbalancer\naire\nkarma\nemergency\nzy\ndtc\nasb\nwin8\nwalker\ncougar\nautodiscover.videos\nbugtracker\nautoconfig.videos\nicm\ntap\nnuevo\nganymede\ncell\nwww02\nticketing\nnature\nbrazil\nwww.alex\ntroy\navatars\naspire\ncustom\nwww.mm\nebiz\nwww.twitter\nkong\nbeagle\nchess\nilias\ncodex\ncamel\ncrc\nmicrosite\nmlm\nautoconfig.crm\no2\nhuman\nken\nsonicwall\nbiznes\npec\nflow\nautoreply\ntips\nlittle\nautodiscover.crm\nhardcore\negypt\nryan\ndoska\nmumble\ns34\npds\nplaton\ndemo8\ntotal\nug\ndas\ngx\njust\ntec\narchiv\nul\ncraft\nfranklin\nspeedtest1\nrep\nsupplier\ncrime\nmail-relay\nluigi\nsaruman\ndefiant\nrome\ntempo\nsr2\ntempest\nazure\nhorse\npliki\nbarracuda2\nwww.gis\ncuba\nadslnat-curridabat-128\naw\ntest13\nbox1\naaaa\nx2\nexchbhlan3\nsv6\ndisk\nenquete\neta\nvm4\ndeep\nmx12\ns111\nbudget\narizona\nautodiscover.media\nya\nwebmin\nfisto\norbit\nbean\nmail07\nautoconfig.media\nberry\njg\nwww.money\nstore1\nsydney\nkraken\nauthor\ndiablo\nwwwww\nword\nwww.gmail\nwww.tienda\nsamp\ngolden\ntravian\nwww.cat\nwww.biz\n54\ndemo10\nbambi\nivanovo\nbig5\negitim\nhe\nunregistered.zmc\namanda\norchid\nkit\nrmr1\nrichard\noffer\nedge1\ngermany\ntristan\nseguro\nkyc\nmaths\ncolumbia\nsteven\nwings\nwww.sg\nns38\ngrand\ntver\nnatasha\nr3\nwww.tour\npdns\nm11\ndweb\nnurse\ndsp\nwww.market\nmeme\nwww.food\nmoda\nns44\nmps\njgdw\nm.stage\nbdsm\nmech\nrosa\nsx\ntardis\ndomreg\neugene\nhome2\nvpn01\nscott\nexcel\nlyncdiscoverinternal\nncs\npagos\nrecovery\nbastion\nwwwx\nspectre\nstatic.origin\nquizadmin\nwww.abc\nulyanovsk\ntest-www\ndeneb\nwww.learn\nnagano\nbronx\nils\nmother\ndefender\nstavropol\ng3\nlol\nnf\ncaldera\ncfd185\ntommy\nthink\nthebest\ngirls\nconsulting\nowl\nnewsroom\nus.m\nhpc\nss1\ndist\nvalentine\n9\npumpkin\nqueens\nwatchdog\nserv1\nweb07\npmo\ngsm\nspam1\ngeoip\ntest03\nftp.forum\nserver19\nwww.update\ntac\nvlad\nsaprouter\nlions\nlider\nzion\nc6\npalm\nukr\namsterdam\nhtml5\nwd\nestadisticas\nblast\nphys\nrsm\n70\nvvv\nkris\nagro\nmsn-smtp-out\nlabor\nuniversal\ngapps\nfutbol\nbaltimore\nwt\navto\nworkshop\nwww.ufa\nboom\nautodiscover.jobs\nunknown\nalliance\nwww.svn\nduke\nkita\ntic\nkiller\nip176-194\nmillenium\ngarfield\nassets2\nauctions\npoint\nrussian\nsuzuki\nclinic\nlyncedge\nwww.tr\nla2\noldwebmail\nshipping\ninformatica\nage\ngfx\nipsec\nlina\nautoconfig.jobs\nzoo\nsplunk\nsy\nurban\nfornax\nwww.dating\nclock\nbalder\nsteam\nut\nzz\nwashington\nlightning\nfiona\nim2\nenigma\nfdc\nzx\nsami\neg\ncyclone\nacacia\nyb\nnps\nupdate2\nloco\ndiscuss\ns50\nkurgan\nsmith\nplant\nlux\nwww.kino\nwww.extranet\ngas\npsychologie\n01\ns02\ncy\nmodem\nstation\nwww.reg\nzip\nboa\nwww.co\nmx04\nopenerp\nbounces\ndodge\npaula\nmeetings\nfirmy\nweb26\nxz\nutm\ns40\npanorama\nphoton\nvas\nwar\nmarte\ngateway2\ntss\nanton\nhirlevel\nwinner\nfbapps\nvologda\narcadia\nwww.cc\nutil\n16\ntyumen\ndesire\nperl\nprincess\npapa\nlike\nmatt\nsgs\ndatacenter\natlantic\nmaine\ntech1\nias\nvintage\nlinux1\ngzs\ncip\nkeith\ncarpediem\nserv2\ndreams\nfront1\nlyncaccess\nfh\nmailer2\nwww.chem\nnatural\nstudent2\nsailing\nradio1\nmodels\nevo\ntcm\nbike\nbancuri\nbaseball\nmanuals\nimg8\nimap1\noldweb\nsmtpgw\npulsar\nreader\nwill\nstream3\noliver\nmail15\nlulu\ndyn\nbandwidth\nmessaging\nus1\nibm\nidaho\ncamping\nverify\nseg\nvs1\nautodiscover.sms\nblade1\nblade2\nleda\nmail17\nhoro\ntestdrive\ndiet\nwww.start\nmp1\nclaims\nte\ngcc\nwww.whois\nnieuwsbrief\nxeon\neternity\ngreetings\ndata2\nasf\nautoconfig.sms\nkemerovo\nolga\nhaha\necc\nprestashop\nrps\nimg0\nolimp\nbiotech\nqa1\nswan\nbsd\nwebdisk.sandbox\nsanantonio\ndental\nwww.acc\nzmail\nstatics\nns102\n39\nidb\nh5\nconnect2\njd\nchristian\nluxury\nten\nbbtest\nblogtest\nself\nwww.green\nforumtest\nolive\nwww.lab\nns63\nfreebies\nns64\nwww.g\njake\nwww.plus\nejournal\nletter\nworks\npeach\nspoon\nsie\nlx\naol\nbaobab\ntv2\nedge2\nsign\nwebdisk.help\nwww.mobi\nphp5\nwebdata\naward\ngf\nrg\nlily\nricky\npico\nnod32\nopus\nsandiego\nemploi\nsfa\napplication\ncomment\nautodiscover.search\nwww.se\nrecherche\nafrica\nwebdisk.members\nmulti\nwood\nxx\nfan\nreverse\nmissouri\nzinc\nbrutus\nlolo\nimap2\nwww.windows\naaron\nwebdisk.wordpress\ncreate\nbis\naps\nxp\noutlet\nwww.cpanel\nbloom\n6\nni\nwww.vestibular\nwebdisk.billing\nroman\nmyshop\njoyce\nqb\nwalter\nwww.hr\nfisher\ndaily\nwebdisk.files\nmichelle\nmusik\nsic\ntaiwan\njewel\ninbound\ntrio\nmts\ndog\nmustang\nspecials\nwww.forms\ncrew\ntes\nwww.med\nelib\ntestes\nrichmond\nautodiscover.travel\nmccoy\naquila\nwww.saratov\nbts\nhornet\nelection\ntest22\nkaliningrad\nlistes\ntx\nwebdisk.travel\nonepiece\nbryan\nsaas\nopel\nflorence\nblacklist\nskin\nworkspace\ntheta\nnotebook\nfreddy\nelmo\nwww.webdesign\nautoconfig.travel\nsql3\nfaith\ncody\nnuke\nmemphis\nchrome\ndouglas\nwww24\nautoconfig.search\nwww.analytics\nforge\ngloria\nharry\nbirmingham\nzebra\nwww.123\nlaguna\nlamour\nigor\nbrs\npolar\nlancaster\nwebdisk.portal\nautoconfig.img\nautodiscover.img\nother\nwww19\nsrs\ngala\ncrown\nv5\nfbl\nsherlock\nremedy\ngw-ndh\nmushroom\nmysql8\nsv5\ncsp\nmarathon\nkent\ncritical\ndls\ncapricorn\nstandby\ntest15\nwww.portfolio\nsavannah\nimg13\nveritas\nmove\nrating\nsound\nzephyr\ndownload1\nwww.ticket\nexchange-imap.its\nb5\nandrea\ndds\nepm\nbanana\nsmartphone\nnicolas\nphpadmin\nwww.subscribe\nprototype\nexperts\nmgk\nnewforum\nresult\nwww.prueba\ncbf2\ns114\nspp\ntrident\nmirror2\ns112\nsonia\nnnov\nwww.china\nalabama\nphotogallery\nblackjack\nlex\nhathor\ninc\nxmas\ntulip\nand\ncommon-sw1\nbetty\nvo\nwww.msk\npc2\nschools\ns102\npittsburgh\ns101\nrw\nozone\ncommon-sw2\nragnarok\nvenezuela\nntp0\nosaka\nwx\nthe\nwww.register\nwh\ncommon-sw\nprivacy\npromos\nprov2\nc.ns\n88\noyun\nalexandria\nsecond\nrouter-b\nkentucky\nnickel\nwww.physics\nwsb\nbruce\nwww.connect\ncc1\nwww.history\nbert\ngraphite\nnina\nck\nkq\ncmts1-all.gw\nmickey\ngoods\nwas\nramses\nteach\non\nhelen\nmng\ndotnet\namir\nptc\nnucleus\nprm\npogoda\nfrontend\nrails\nliga\noutgoing\nthumbnails\nins\nggg\nlisten\nscs\ndark\nsav\nredaktion\nviewer\nfiles1\nparker\nshib\nchandra\nmapa\ncartoon\nadmin.test\nmad\nmail25\nwebdisk.www2\ncrossroads\nwebserver2\nwww.file\nda2\ngratis\nupd\nmomo\nlost\nvps5\nchelsea\nironman\nhive\ngadget\ncfd307\nalan\nsm1\nkansas\nstat2\nmorpheus\nmail18\nbleach\njoy\nsolomon\nimgup-lb\njk\nhammer\nea\nhonda\nomar\ntrust\nnino\nimg9\nwebmasters\nmona\nimaps\nwww.backup\nwsp\nregistro\ncooper\nuniform\nq3\nbetav2\nmagellan\nris\npoetry\nclio\nmetropolis\nteen\nphonebook\napp5\nwww.bank\nbrilliant\nunderground\nhero\ns51\namber\nwww.f\norlando\nautodiscover.wp\nserver21\nautoconfig.games\npop1\nsean\nautoconfig.wp\nforever\nism\nwww.studio\napp4\nyum\nfermat\ndemosite\nsea\ncelebrity\nautodiscover.games\ntestadmin\nles\nwww.realestate\ndemo01\nmsm\nmediacenter\njxjy\nholidays\nahmed\nstlouis\nbilbo\ncoupang4\nfb12\nwlan-switch\n21\noffsite\nfluffy\njoker\narcade\ncielo\n17\nserver16\nmss\nwonder\nsmolensk\ndg\nesc\nw8\nwww.aa\nnone\nbreeze\nnba\ntoys\nfakalipit-mbp.cit\nnss\ngen\ntmg\nwww.perm\nfishing\nldapauth\ncup\ndhl\nwww.join\neps\ndove\ntuning\nconference.jabber\nliste\nsmtptest\nwebstat\nwww.beauty\nfiles3\nresolver1\nrevolution\njacksonville\nwww.aff\npv\nwebdisk.tv\nia\nfog\nmason\nodessa\nwww.kb\nwebdisk.newsletter\nim1\niweb\ntower\nmemo\nemperor\nfinancial\nstm\nnewwww\nchel\nsupernova\nc8\nrai\nhannibal\nlava\nwww.manager\ncaesar\nssb\nwww.az\nftp7\nitunes\njulia\nworldcup\nwhatever\nalpha1\ntablet\ngrad\ntony\n14\n18\nmemory\njeu\nanuncios\nsmtp11\ncolocation\nclean\nanh\ncrash\nppm\nwww.ct\nwww.cards\nsti\nest\ngoat\nsg1\netherpad\n37\naplicaciones\nwww.webinar\nthai\niceman\nmass\nhqjt\nregion\nitech\n1234\ndemo11\nwww.ic\norenburg\ncron\nautoconfig.info\nautodiscover.info\nreset\namis\noptimus\nelectra\nbitrix\nbolt\nmrs\nlook\nthanatos\nwowza\nistanbul\nwww.banners\nhttps\ntimesheet\nwww.s2\nibs\nlupus\nnutrition\nreturn\nwww.ph\ns36\nwww.ir\nprojetos\namerica\ncirrus\ntax\ntrash\nmsc\ncep\nwww.control\nda1\napi-test\nwww.bt\nadams\nxserve\nwww.dealer\norient\nretro\nwww.krasnodar\nyour\nanderson\nwww.internet\ngts\nhits\npat\npayroll\noblivion\nnotice\nandre\ndany\nportland\napplications\nmailin11mx\nwww.google\nnr\nphotography\nxxxx\nconcept\nmasters\nc.ns.email\nstartrek\nmailin10mx\nl2\nhost11\nalpha2\nvmailin02mx\ncic\nd.ns.email\npomoc\nmelon\nprovisioning\ngx2\negov\nranger\npod\ncsr41.net\notto\npj\ngodzilla\nwww.house\nmgw\nweb30\nmail.demo\nspc\nuniver\neweb\nbeacon\nmerchant\nexclusive\nsensor\nimagens\nbu\npathfinder\noops\ntnt\nsrv11\nmage\nfernando\nurchin\ndetroit\ncetus\ndaemon\nirk\nseneca\nsummit\nchimera\nnadia\ndisney\ncrane\ncleo\nsahara\ncartman\nb.mx\nhls\npx\nwarren\nspam2\nscooter\nmailin13mx\ne.ns.email\nsmarthost\ntlc\nvmailin01mx\nmailin16mx\nonix\nkite\njeep\nwww.internal\nwww.b\nax\ntorrents\nmailin15mx\nmailserver1\ntotem\nanh-mobileth\nttc\npolo\nw10\notp\nmailin14mx\nojs\nksp\nwebdisk.apps\nkyoto\nuniversity\nacademico\npension\nwww.remote\ncast\nns91\nmailin12mx\nwww.h\ncbs\nfacilities\nads1\nns92\npublisher\nlunar\nesd\ntrip\nsac\not\nwilliam\nserwis\nstk\noj\ndragonfly\nb.ns.email\na.ns.email\ndsa\nadvertise\ns45\nyz\nwww.lists\nresume\nt3\ns47\nredesign\ntoy\npelican\npopgate\nwww.ap\nplasma\nrocket\npatty\nsrv8\npizza\ndmt\nasd\nsrv7\nbulgaria\nsvn2\ndrivers\nventas\nwww.pc\nanimation\nmonica\nsantiago\ntucson\nmary\nwm2\nsalem\nlinda\ntamil\narmstrong\n79\nnorman\nquartz\nscheduler\nsocrates\nregist\nserver24\ncampusvirtual\nip4\nalien\nwww.dev3\nwww.vps\nip1\nmisc\ncapella\nwww.mike\nwww.pruebas\nsion\ntestdb\nnat2\nwww.am\nanc\nmapas\nzombie\ncac\nnikita\nfreestyle\ndude\nrail\nrea\nran\ns103\ns104\nsarah\nwebm\nmazda\nclaire\nesx4\nmail22\npaste\nhy\ns106\nnh\nelara\nmail23\nvod2\nautodiscover.projects\nlineage\ns107\nf.ns.email\negw\napollon\ns108\ns109\ncyrus\nrecruiter\nautoconfig.projects\nmahara\nchopin\nfat\nemp\ntitanium\nwww.bip\nchili\ncumulus\nblues\nu2\niam\ndonna\ndelivery.swid\namy\ncampaigns\nwstest\ncms3\nwebeoc\nbasic\nuag\nvip3\nxl\nroberto\nkarriere\npirates\nhelpme\neconomy\nwww.moto\nwww.corp\nnirvana\n35\niklan\ncommercial\nrooster\ncbf7\nbkp\nns53\nwebdisk.iphone\ncanon\ntest.www\nwww.super\ndts\ngforge\njam\nadtest\ncedar\nwns1\nsuperman\nautoconfig.facebook\nns66\nesx\ntv1\nkarta\nchile\ndotproject\nted\nusuarios\nrelaunch\nismtp\n49\nisrael\nwww.click\ns110\nwww.st\nwww.teste\nimages.a\nofficial\nautodiscover.facebook\nhentai\nbss\ndali\nsparky\nwww.car\ncosmo\nemm\ndigit\nlandmark\ncrs\ns208\nwww.com\nvoipa075\nvoipa019\nstandard\nmyworld\nbrasil\nvoipa062\nmegatron\nvoipa04a\ngroupwise\nvoipa07e\nns72\nbyron\nvoipa03f\nimg02\nvoipa029\namos\nvoipa079\ns125\nvoipa04d\nbam\nvoipa017\nns58\nvoipa03d\ns124\nvoipa03c\ncolossus\noregon\nfilemaker\namethyst\nwp1\nwebdisk.member\nvoipa03a\nprojekt\nopa\nn1.eu.cdn\nwww-origin\ntattoo\ndriver\nvoipa038\nrdns1\ns121\nvoipa031\nvoipa035\nvoipa02f\nsolution\nfreehost\ns119\nmx20\nrobert\ns116\nqueen\nwww.magazin\nacesso\nvoipa040\nriot\ntemp2\nvoipa05e\nwww.sale\nwww.praca\nvoipa039\ntaylor\nwww.bm\ngrs\naruba-master\nvoipa047\ns113\nyoyo\nflora\nwww.voronezh\nverdi\nyc\neuler\npooh\nvoipa02e\ngy\nsmtp8\nvoipa02d\nvoipa02c\niec\n114\nvoipa037\nquest\nmail30\nwww.vpn\nj2\nmail26\nvoipa02a\norigen-www\nserver17\nvoip1\nws4\nvoipa04c\nvoipa036\nbrowser\nj1\nvoipa073\nrelease\nvoipa072\ns105\nvoipa048\nvoipa071\nmail16\nkoala\nserver23\nvoipa01f\nsrilanka\nvoipa04e\nsoma\nws-lon-oauth1\nvoipa01d\nvoipa049\nvoipa04f\nf4\nblitz\ncine\nhost8\nvoipa05a\nzb\nvoipa060\neportal\nvoipa034\nh6\nvoipa033\nvoipa032\ndigi\nvoipa030\nservice3\njoshua\ncarlos\nprojets\nkitty\ncloud9\nmailinglist\nmoonlight\nwebdisk.link\nvoipa05b\nwww25\nina\ndiscount\nirc.sac\nvoipa028\ncsa\nstories\nvoipa05c\nparfum\nvoipa06a\nvoipa01c\nwww.local\nvoipa01b\nvoipa06c\nvoipa027\nnag\nwww.sl\nrobin.exseed\nvoipa06d\nvoipa06e\nvoipa026\nvoipa06f\nwww.magazine\nwis\nvoipa07a\nvoipa025\nbenny\nrcs\nminsk\nvoipa064\nvps7\nstash\nimage3\nnoc2\nwww.canada\nsmi\nvoipa059\nvoipa065\nwebdisk.classifieds\nnote\nvoipa024\nmaggie\nplanetarium\nluis\nvoipa01a\nsocialmedia\nvoipa023\nsweet\nrmt\ncmt\nserena\ncollaboration\nftpmini\nesxi\nwww.advertising\nwebadvisor\nm.demo\npsychology\ngraphs\nly\nppa\nvoipa063\nnetworks\ns48\npub2\npower2\ngreece\nxoap\nsib\ncarla\nvoipa061\nrts\nvoipa058\nbranch\nmediawiki\nclark\ntwin\nb4\nweb25\npty11165b\nlighthouse\nvoipa066\nvoipa057\nwebmeeting\nbrian\nircip\nwww.conference\nweb27\nocsp\nuranium\nautodiscover.billing\nmarley\ncorreoweb\nfc2\nfiesta\nvelocity\nsanatate\nac2\ndentist\nu1\ntechsupport\nendpoint\nvestibular\nvoipa022\nclone\nfrontpage\nwww.turystyka\nsamuel\naws-smail\ngabriel\nbookings\nwebdisk.stage\nb7\nenroll\nwmt\nanonymous\nali\nyukon\ngw.bnsc\nwikitest\nbv\ntutorial\nzaphod\nvoipa056\nvoipa067\nmaint\nvoipa01e\ntau\nvoipa055\nren\natl\nnat-pool\nvoipa021\nvoipa054\nturystyka\nvoipa020\ncomic\nvoipa053\nvoipa052\ninfonet\nshe\nas400\nautoconfig.billing\nvoipa070\nbabylon\nvoipa018\nlee\nwww.trade\nbadger\nnospam\nsrv12\nwww.kr\nchase\nsrvc67\nicc\nmoderator\nstark\nvoipa074\nmail-2\nhenry\nm-test\noud\nvincent\nlyra\nskinner\nguard\nsphere\nbalance\nvoipa016\nlara\nsrvc52\ndogs\nvoipa051\nvoipa02b\nantonio\nsilicon\nsrvc47\nolympic\nkings\nactivesync\ntriumph\nwww.freedom\nlena\nsolarwinds\nvoipa015\nxerox\nvoipa014\nriverside\ngx4\ncdb\nto\nvoipa013\nvault\nfisheye\ntron\n29\nchevrolet\nsquare\nsrvc42\nbbs1\ndollar\nadnet\nvoipa012\nvoipa011\nsouth\nccm\nhamilton\nsrvc57\nprepaid\nvoipa010\nkairos\nintel\nlogin2\ncreditcard\neportfolio\nrproxy\nalfred\nsce\nnat1\nriga\nblogdev\nvoipa076\nitchy\nnewsletter2\nvoipa041\ngx3\ngx1\nwww.tmp\nvoipa050\nromeo\nnara\nlegolas\npol\nical\nchristmas\nwebmailtest\nvw\nvoipa07b\nportals\nenvios\nsandbox2\namateur\nautoconfig.www2\nvoipa07c\nvoipa077\nemily\numwelt\nshops\nstarnet\nwww.mc\nelena\ns03\nbnet\nsrvc62\nlazarus\ndaphne\nwww.investor\nautodiscover.www2\nvoipa042\nillusion\nah\nnewlife\nwww.th\nequinox\nwww.agent\ntz\nmilano\npresence\nautoconfig.tv\nvoipa078\nnovi\npretty\nbasil\ndcs\nagencias\nvoipa03b\nvenom\nerato\nata\nvoipa03e\nsipac\nprograms\nmyftp\ntestdns\ngray\nautodiscover.tv\nhorde\nhideip-uk\nd.ns\nmanuel\nwww.adv\nvoipa046\nthailand\nwww.women\narnold\ndemo12\nstyles\nfrost\nvoipa04b\ntherapists\napc2\nhugo\nepp\ngal\ngin\nwlc\nautodiscover.members\nnevis\nmart\nvoipa045\nnitrogen\nautoconfig.members\nlxy\nzone\nvoipa068\ns201\nibook\naprisostg\nvalidation\nvoipa043\ntpm\nwww.tula\nbluebird\nwww.access\n0\nvoipa069\ndeath\n8\njustin\nwww.innovation\nfaust\nwww.banner\nwww.md\ngals\nstaging.secure\nint.www\nint.api\npn\nwww.share\nmylife\nipod\npiano\nwns2\npulse\nvoipa05d\nltx\nvoipa07f\nlj\njwxt\n19\nklm\nvoipa05f\ncie\nvoipa044\nc7\nvoipa06b\n1000\nsmtp12\nliquid\ncollector\njokes\nevasys\nemailmarketing\nvoipa07d\nroyal\nobservium\nnode3\nvis\niks\nwww.affiliate\ninferno\ndrac\nbella\nieee\nfran\ncomp\nwarszawa\nasync\nstl\nwpb\nnagios2\nlinkedin\nmars2\nkei\ngeography\nwww.david\napolo\nrazor\ninfinite\nlucifer\nw9\n48\nbgs\ntzb\ndennis\ncs3\nsls\nfhg\nqs\ngina\nboris\nhps\nrandy\ncatalyst\nrandom\nwww.soccer\ncon\nani\nplayers\ntroll\nruben\namg\nimmigration\nvanessa\nsynapse\nizhevsk\nhikari\npri\nbryansk\nlw\ncalcium\ngsc\nnashville\nnor\npskov\nchita\nimg11\nturtle\nphiladelphia\nscoreboard\nloghost\nredes\nws01\nprov\nakira\nuy\nmalaysia\nlovely\nbond\nyuri\nprism\njun\ngoldfish\nbrandon\nsteel\nwww.review\nora\nami\ncorpmail\ndemo9\nromance\nwww.sex\nwww.track\nmmp\nfk\nmentor\nbutterfly\ncommunications\nnao\nwww.talk\nmem\nshort\nwww.anunturi\nmssql3\ns53\njennifer\ntito\nstitch\nwww.ss\nods\nbigbang\nwww.intra\nsdo\nmoa\nstreams\nkav\nroom\ngastro\nmat\nbarbara\nepo\nmorris\njabba\ndl3\npeace\nwin6\nbologna\nalpine\nbenjamin\nexperience\nmtg\nsrv9\nwww.ecommerce\nindian\nwilma\nphotoshop\nteens\ner\nwww.e\npine\nmortgage\nespace\nwish\nob\ndarkstar\nwinwin\nnx\ncam3\ndota\nb12\ncolor\nmarie\nwww.happy\nserver27\narchitecture\nokinawa\njess\nitest\nns48\nxj\nfine\nadmins\nflux\nbasket\nprofiler\nathens\nnest\nbison\nroadrunner\nmobileapp\nneko\nimg170\ncharity\nfile2\napptest\nshowroom\nlima\nwww.gry\nzoe\narrakis\nrss0\nhowto\naikido\nvps6\noperator\nrv\nsasuke\nmodules\nsniper\nwww.pm\narmani\nwebdisk.dev2\nsms1\nwww.wm\nddd\nvtiger\nyam\nemployment\nsir\npaintball\nproj\nmgt\nsoso\naldebaran\nbim\nloto\nron\nxml2\noslo\npic2\nsnap\nmsdnaa\npromotions\ndevadmin\nalta-gsw\nviajes\nram\nagents\nbash\nmemberpbp\napi3\ntaxi\nfrontier\nyuyu\n34\nreading\nvm02\nventure\nbeheer\nhz\ntf\nsierra-db\nhulk\nplugin\nns05\nwww.science\nsamson\nespanol\narsenal\ncpanel2\nvadim\nlord\ntrend\nbrest\nlesbian\navs\nempresas\nxavier\nflamingo\nnas3\nalive\ncname\njss\namd\nterminator\nnewworld\ncpe\nprofessional\nvisit\nwww.ee\nspm\npresta\nyellowpages\nblock\nrosemary\nns65\ngoblin\neduc\npiter\ncrow\nzenith\n46\nsabrina\nvoip2\njet\nimg14\nnebraska\ni0\nadidas\nafrodita\ni6\ngimli\nbara\ntreehouse\nsolid\n51\nvaliant\nvm5\nmichigan\nembed\nlimesurvey\nsc2\nrossi\nwww.friends\nxoxo\nmeetingplace\ngod\nwww.family\ns122\nimg03\nlicensing\npetra\ns118\nwww.traffic\nwww.ford\ns117\nsee\ntrunk\nmystery\nwww.golf\ns115\nmail19\nels\nmail33\ncrimea\nx3\ninformer\npublicidad\nwww.clientes\nbirthday\nlivesupport\ntrance\nwww.biblioteca\nmail24\nms3\nbbm\nlcs\nabraham\njonas\nstephanie\nsalam\nsws\nwww.tm\njuan\nrage\nbattle\nrdc\ntimeclock\nkat\ndna\nbit\nforce\nwinnie\nliverpool\nstatic5\nbeaker\nlit\nservice2\nspica\nadvertiser\nsalon\nyo\nfichiers\nprov1\necards\nautodiscover.wordpress\npublishing\ncaptcha\npodcasts\norg-www\norc\nuploader\nweb33\nek-cat6506-gw\nkrang\ndani\nfotografia\norb\nsitesearch\nlivestats\nwww.ro\npantera\nwww.ac\nautoconfig.wordpress\nmilan\nclasses\nneutron\ndcms\nwww30\nbeethoven\nmail36\naccommodation\nmacbook\nap2\ntesta\nwebprint\ndewey\ncrmdev\nqc\nsociety\npsycho\njacob\nknowledgebase\nvg\ncem\ns221\ns216\nraovat\ntara\nlea\nobserver\nandrei\nelsa\ncss1\nchs\nhomepage\nwww.ec\naloha\nspartan\ncs16\nzdrowie\ndual\nspin\niis\nec2\ntrace\ncompare\nphoto2\nica\nbadboy\ngourmet\nobsidian\ncpc\nmode\napril\nyuki\nonlineshop\nwww.volgograd\numfrage\nadmin.dev\nsiteadmin\nphptest\nsom\nmani\natendimento\npagerank\nolivier\nwww.gay\nfbapp\nwww.redmine\no2.email\nnewdesign\ns207\nssd\nsuppliers\nhelsinki\ncheese\ntest19\nwww.as\ns203\n27\nautodiscover.radio\nne\nfinanceiro\nwww.sp\nautoconfig.radio\nphpmyadmin2\nsaransk\ntyr\nvic\ncluster2\ndev6\nxs\nbliss\n60\ntatiana\nmature\nbabel\n26\nxinli\npustaka\nmydesktop\nwww.n\ncarter\n22\nkobe\ntesting2\nmy2\n90\nexplorer\nwy\nftp9\naovivo\narmy\ndx\nkiki\nphoebe\nclasificados\nsurvey2\nravi\norigin-cdn\ndial\nwww.legacy\nftp8\nwz\nwww-c\nnws\ns202\n80\nbgr01swd\nvoltage-pp-0000\nitm\nim.rtpete\n23\nassets1\njohnny\nstreet\ndev7\nban\nip-uk\nweightloss\nlpm\niraq\nparadox\nfermi\nvino\noban\ntest14\nmusa\nperpustakaan\nradius3\nrtpeteim\ngame2\npro-oh\nregions\nhcm.m\ndns10\nsmx\nmans\ntns\npozycjonowanie\ngonghui\nmuller\nnick\nchurch\nservices2\nhana\nimperial\nporno\nhama\nshowcase\nsputnik\nwww.stock\nskywalker\nwww.tomsk\nstorefront\ncrater\nchan\nlocalhost.m\nchloe\npharm\npavel\nnational\nbarcelona\nsilvia\nremoteaccess\nwebdisk.seo\nsrv02\njt\nrecim\nalc\nfear\naulavirtual\nprog\ntimer\nkana\ncardinal\nhn.m\nm12\ntimetable\ndev.www\nmaxi\ncyan\nwww.customer\nids1\nric\nlucas\nganesh\nmik\nmember1\n31\nmali\nnoel\nero\npack\ndba\nreza\npapillon\nkps\npolitics\ns222\nnavigator\nhost12\ndesigns\ncar40.net\nelc\nlp3\nsta\ncsr21.arch\npallas\nnostromo\ncarl\nnlp\nterry\ncmts2-all.gw\npyramid\nmonk\nkeeper\nmagpie\nspike\nwolves\nconsumer\njay\nmediakit\ntopics\ninfosys\nlolita\nwww.pozycjonowanie\npr1\noldftp\nritz\nwww-1\npastebin\nnowy\npoland\ntds\nrami\nmami\nmybook\ntopsites\nstatistic\n66\ngomez\npamela\nlistings\nonly\nwebdisk.my\nspeak\nkl-cat4900-gw\nmedia3\noriginal\nadmintest\npreview2\ngame1\nvideoconferencia\nacademic\nvdp\nautoconfig.iphone\nteachers\nflame\nmy1\nnewage\nmx05\nsofa\nwww.smart\ndwcloudorigin\nautodiscover.iphone\nwww.templates\nsorigin\ntama\ncde\nc21\nfw01\nross\nonlinegames\ncfd264\nsell\nteddy\nbos\nftp.cp\nedwin\nmapsorigin\nsync1\nfbm\ncshm-sbsc01.v10.csngok.ok\nwarez\nwwworigin\ndwiorigin\nwww.mob\nwxdataorigin\njustice\nmaporigin\nmorigin\nlira\nold1\nkbox\nlegion\nklub\nhurricane\nfcgi\nmay\nxxxxx\ngolestan\ndworigin\ntorigin\nnvpgk1\ndataorigin\nsed\nmp2\nwww.islam\nnvpgk\nfilter2\nmandarin\nstaging.www\nmwiorigin\ntl\nsoon\nomni\nwww.adm\nlc1\nanders\nicinga\nwawa\nquestionnaire\ndynamics\nbia\nwww.km\nkf\ncognos\npmb\nsslorigin\njana\nnw1\nfedora\nwww.devel\nmyportal\ngromit\nwww.finance\ntoday\nprelive\nkermit\np5\ns219\nlancelot\njura\ncyc\nepi\ns206\npenelope\nnewdev\ndetox\nsimba\nwww26\nwww.wedding\nwisconsin\nphilippines\nfad\ngirl\nwww.novo\napps3\nstb\nconsulta\ndingo\ncmail\n67\nsaba\nfairy\nbluemoon\nauth1\nathos\nguia\nsongs\nsiam\nnovelty\ntera\nwww.eshop\ns205\nclarity\npdu1\nelias\nlawrence\nsds\nweb0\nsrv20\nfireball\nwww.list\nsv8\ns100\ncambridge\nmission\nkamera\natest\nns69\nrtpqaim\nfair\nc-asa5580-v03-01.rz\ns42\nbeyond\ndemoshop\nhoroscope\npuck\negroupware\n40\nsup\nsv7\nthree\noption\nozzy\nmail06\nmhs\npasca\nwps\n53\npostit\nwii\nsmf\nspitfire\ncstrike\nutopia\nvm01\nvi\ndms1\n52\ncitrix2\nmxbackup\nvm6\nzeon\ns126\nclassroom\nwebalizer\nhalo\ns131\nilliad\ns133\narchivio\ns134\ncns\nbelgorod\nldapclient\nklient\nbatch\nfabio\ns211\ns214\nphaim22\nsfs\ngiporigin\ns215\nmelissa\ns213\ns120\nabel\ncow\ny2k\ns130\ngem\ngoliath\ndemo15\ntang\nftpserver\nwww.kaluga\nkia\nclips\nham\nsilence\nquad\nwebinfo\nplugins\nwww.article\nvolvo\nmb1\ncris\nayuda\nkingdom\njuegos\nns82\ni10\nautodiscover.portal\nautoconfig.portal\nts01\nns81\ncaramel\nzc\ncircle\nipplan\nautomation\nrob\ntwister\npoznan\nc9\nmoskva\nns71\nredhat\nsecured\nrr1\nmorgan\nstr\nacademia\nresearcher\nns59\nmuse\nwww.monitoring\nmei\nns56\nmeridian\nwendy\nns46\nbrains\nbla\nautoconfig.sandbox\ntraf\nautodiscover.sandbox\nvma\nnieruchomosci\nsimpsons\nark\ndbase\nbulldog\nlyon\nkkk\ndesign2\nsequoia\ncentro\npro-ky\neternal\nwww.kids\njasmin\ntyb\nnewspaper\nrtpclientim\nargentina\nwww.net\nnancy\najuda\nbosch\nvpnc\nmagnitogorsk\ncolombia\ncws\nmee\nconvergence\ntech2\nscully\ndeneme\nrudy\ncab\nday\nmonalisa\nblade7\ngaleri\nacer\nqwerty\nas.iso\nhsp\nproof\n3c\nwww.gs\nhost01\nindy\npaolo\nns49\nblade5\nharris\ngw4\nselect\nwebdisk.reseller\nweber\nwxy\ndictionary\ndmedia-g\ninfo1\nverify.apple\nsandra\nb2btest\npic1\nstrong\nsuny\nclientftp\nsml\nemba\nwww.allegro\ntmc\ngaladriel\nsun1\ngary\nmedios\nandromede\nstatistiche\nmail.99\neat\ncdn4\nvps8\nsloth\nray\nelectro\noms\narchangel\nwww.s3\nim.rtpqa\nbible\nwww.alpha\nlovers\neconomics\nsma\nelectric\nip2\nnene\nplanner\nnw\nanita\nwww.ws\nhomolog\nmyown\nrtpim\nfirewallix\ntraveller\nbulletin\nwww.demo1\nbenchmark\nwhisper\nann\ngreg\nhost25\nmarshall\nspiderman\ncrowd\nsprite\ntot\nharvey\ntrs\ngtest\nshuttle\nmodern\njudas\nbackstage\ndeti\nsterling\nss2\ncoconut\nxlzx\nwin13\nscarlet\nwww.sistemas\nebs\nargus\nlh\nmaryland\nyn\nserver29\nrelay4\nsexshop\nfutaba\nhistoria\nb11\nb10\nmarkets\nxc\nwww.av\nsantafe\nusedcars\npresentation\ncpm\nnorway\nbcs\nkrishna\ncastle\nrewards\nalexa\nsonata\nformation\nwww.assets\nradon\nzelda\nautoconfig.loja\nwyoming\nfate\npanel2\nimap3\ncm2\nautodiscover.gallery\nmssqladmin\nautoconfig.gallery\nwww.gps\nautodiscover.loja\nsmtp9\nwakeup\nd5\nindependent\njulie\nstiri\nselenium\nwww.archives\nplatform\ndaisuke\ndc3\nernesto\nwww.ps\nfes\nwww.pb\nd9\nporn\natomic\nwww.correo\nchatter\nrbs\nemto277627\ntdb\nmilwaukee\ntintin\nwww.cl\nastral\nlottery\npaint\ncomments\nthegame\nforyou\ntruba\nmozilla\nborg\nnode\nvps9\nworker\nwiki2\noutdoor\nmonaco\nmimosa\nsid\nbody\nstardust\ndevserver\negresados\nseagull\nserver44\nwebdisk.host\ncp3\nswansea.cit\nchicken\napi.test\nserver03\nmssql4\nlucia\nnfc\nvs2\nvale\nimss\ns41\ns43\nprojekty\npicasso\nblossom\neleven\ntaobao\npapyrus\npharma\nlaila\nautodiscover.it\nevans\nngs\nfailover\nrajesh\nprofit\nenlace\npodarok\namira\nlouis\nreboot\nplaneta\nowner\nwww.blackberry\nresponse\nserver30\npil\ndel\ngeyser\nmtc\nvanguard\ncec\nblackcat\nprezenty\nclubs\nyun\nprimus\nwww.2012\napollo2\nwww.corporate\ndubai\ndevapi\nfinanse\nautoconfig.music\nautodiscover.music\nphenix\nmadison\ntambov\nbcc\nvpnssl\nwp2\nwww.hc\nwebdisk.music\nmambo\nwww.r\nwww.europe\nroy\napartment\nwww.memberpbp\nhod\nserver41\nmugen\nprimula\ngoodlife\nserver25\nevil\nidp2\nwww.memberall\nb15\nmx9\nmemberall\nblade3\nwww.pic\nunreal\nb13\n112\nacp\nharu\nmailservice\nno1\nwww.irc\ntpl\nweekly\nwebmail.forum\ntestapi\nironport2\nfree2\nbrothers\nblade6\nbayern\ndaedalus\ncincinnati\nwww.aurora\nwi\navon\nnmc\nseason\nzorro\nwww.at\nfruit\nmx-1\nmagneto\natmail\nwicked\nwebmail4\nsanfrancisco\nwww.central\nsurgut\nadwords\nesl\nsalah\ncmp\nmania\nmebel\naviator\nchennai\nser\ntccgalleries\nblogg\njj\njh\nsmtp04\nwww.op\nwww.tracker\ngui.m\nsomeone\nimac\ntanya\ndrew\nns112\nkai\nandrey\nion\nplum\naplus\nweekend\nbaker\news\nqp\nmoodle1\ntheater\nwww.phoenix\neducacion\nparser\nlimbo\nmak\nns54\nprofil\narg\nfreemail\nns57\n42\nshara\nopal\nwww.css\nmil\nstorex\ndownload3\nwww.apple\nnil\nmssql1\nrecords\nv6\nvine\necuador\nwebdisk.health\nwebdisk.social\nbones\npopup\ni24\nphilosophy\nbarry\namadeus\nwww.yaroslavl\nbluebell\n45\nsmtp13\nwww.tutorial\ndrop\nwww.cars\nud\nsql02\nsmtp14\nwww.meteo\nviktor\ntaz\nwww.calendar\npartner2\nh7\ntwilight\nbat\nemo\nrealtime\ndemo13\nsasha\ntoshiba\ndeli\nmq\nwww.todo\nadel\n47\ndrake\ninfo2\nmktg\nwebzone\ncertificate\ns212\nthemis\nnewchat\ns218\ns217\nmusic1\nyoyaku\nshibboleth\ns139\ngordon\ni7\nemployee\nhavoc\ncs01\nlb01\ns138\nblueberry\nmobile3\nadelaide\ns137\ni8\ns136\ni9\ns135\nwebdisk.it\nptt\nzippy\ncamp\nfnc\nm2m\ns132\ngaming\ndarius\nlapis\nnetstorage\ns129\nwww.singapore\nhunting\nmaker\nwin9\nssh2\nnorth\nlabel\ncjc\noneway\nkuba\nsapporo\nlin\nfull\nbodybuilding\nwww.phpmyadmin\npopular\nvoodoo\nportal3\nwildcat\nlucius\nproject2\nsumire\nmn\ntestm\nbritney\nmagma\nbilder\nasian\nan\ns58\nwww.cinema\npassion\nvds1\nsklad\neform\ndevdb\nwww.test4\n61\nwww.like\ns224\nandres\nsunflower\nupdate1\ngbs\nbasij\npavlov\nfancy\nlocator\nbmail\nthalia\ntip\nkaiser\ndsc\nsv9\nsuccess\ninvite\nwellbeing\nemailadmin\nldap01\nsrv21\nmstage\nwww.booking\nxen3\nasg\nstrike\nunique\ntitus\nuran\nled\nwebdisk.us\n69\njuniper\nshams\nrepos\ncerbere\nwww.tracking\nwwwstg\nhair\nsulu\nfile1\nwww.australia\nopsview\norigin-static\nappdev\nwww.open\nbursa\nnet1\nweddings\nwww.org\ns210\njust4fun\nhalley\ns144\njimmy\nwanda\ntest1234\ns143\ns209\nipac\nwebview\ngcs\namazing\npubs\ndemon\nutah\ngls\nhertz\nwww.wwww\nsipinternal\nlua\nwww.exchange\nmyblog\npic3\nhappylife\nxiaobao\nknight\npapercut\ntimothy\nrns1\n77\nshin\nprimrose\ndep\nadministrator\nfiler2\nsharon\nkayako\nredaccion\ntsunami\nbelle\npokemon\nsleep\nmail40\napl\nsrv10\nenvironment\nadc\navedge\ntop10\nsaint\nsvm\nsonar\nbutters\nwarning\nused\njeux\nchouchou\nwww.learning\nlong\nfirewall2\ndemo02\ncredito\nwallpaper\naeon\nbilling2\nanal\nns-2\nfurniture\ntitania\nelmer\nwwu\nautodiscover.files\nkaraoke\nglory\nautoconfig.files\ndeai\ngamez\ncristal\nsgm\ngates\ngregory\nacorn\nrice\nvenice\nkid\nfiat\ngeek\nmail27\nmedia4\nafp\nservicetest\npje\nadp\nwww.hn\nseminars\nsql01\nb6\nsama\nremax\nvortex\nsharing\nmox\nvince\npts\nrrr\nmimi\nmca\nconcours\nhehe\nweb28\nphi\npirate\ntrent\nbpa\njs1\nxszz\npipe\nglacier\nbacchus\npuffin\nwebim\nchatbox\ncharles\nelement\nwww.students\nsana\nibrahim\napidev\nnnn\nwebcache\nautodiscover.help\nlili\nautoconfig.help\nshaman\ns227\nremont\nlexus\nftp.demo\nwww.pomoc\nqm\neddy\n32\nabsolute\nkan\nespresso\nindra\nmweb\nrama\ncolibri\nanti\na8\nwindowsupdate\ninspire\ncmstest\nrive\nnow\nnini\nannunci\nelrond\nheron\nlineage2\nkenzo\nfeng\nenvy\nabc123\npersonel\nrides\nd8\nlust\n360\nkarim\nsims\nnats\nnash\nalumnos\nstop\nbk1\nobiwan\nwww.feeds\narquivos\nstore2\nwww.futbol\nlexington\nhardy\ninfocenter\npxe\nedu2\nevaluation\nwww.foro\ntrading\ntiny\nwww.biznes\nautodiscover.helpdesk\nlarry\nmuzik\nautoconfig.client\nvolleyball\nkultura\neman\nautoconfig.download\nautodiscover.download\nitadmin\nultra1\nyamaha\n57\nmust\nnewman\n63\nmail-gw\nautodiscover.client\nbbs2\ntopsite\nworkplace\nmari\nmailgate1\nmysql10\npublications\nka\ndevsite\nreport1\nstudent3\nyy\nautoconfig.helpdesk\nwww.ww\nlang\nmasaki\ncostarica\nset\nlabo\noriflame\nwww.noticias\ndevwww\n30\nwww.festival\ntpc\nnet-xb.ohx\nfeatures\nbgp\nwww.georgia\nwebdisk.loja\nwww.kaliningrad\nazerty\nwww.chelyabinsk\nnovgorod\ncamfrog\ndig\nanyserver\nhiroshima\nzend\nwww.sites\ncarrie\n76\nolap\ndc4\nbinary\nwww.24\ncolors\nmynet\nsalary\njudo\nwebdisk.tickets\ngravity\nwebdisk.design\naviation\nrst\n94\nboxer\nhilbert\nherbalife\ncarrier\n64\nnexgen\nintranet1\nwillie\napi.staging\nsiena\ndoom\nrecord\nadmin.m\nl2tp\nmail.dev\nariadne\nwww.transport\nalaa\narea51\nwebmail.demo\nwww.reviews\ncantor\nwebdisk.links\nautoconfig.member\ntest17\nautodiscover.member\ns05\nmail250\ngateway1\nsmb\nweb29\nscrubs\ntransit\nchewbacca\nweb34\nkoha\nproperties\ntori\nvc2\nmail37\nmail38\ncss2\nmail39\nfoxtrot\nprinting\nbigben\nneworleans\nwww.dms\nvns\nteams\nwriters\ncmdb\nmuenchen\noldforum\n111\nlibweb\nesx5\nbenefits\nwww.asia\nscl\npws\nesx6\n28\ngutenberg\ndjango\ncaldav\nvar\ntracker2\nmov\nlumiere\ntracker1\n33\nmanhattan\nkaku\nmaga\nkumi\nkesc-vpn\ndns9\nkelvin\ninsider\nwww.car-line\nmastermind\nsw2\nns80\nwildersol1\ndns14\nns75\navasin\ndns.class\nwebdisk.server\nhandy\nns68\nns67\nseco\ntrinidad\npuppetmaster\nimmobilien\nregina\nnantes\nwm1\nns47\n41\ncitrix1\ncitron\nzw\ndialog\nns90\nns111\nbomgar\nwww.doc\ndiscountfinder\nlb02\ntao\npsg\nwww.website\nresim\nwww.sm\nresolver2\nns120\nwwb\n101\npatriot\nportugal\nporsche\ntreinamento\nns110\nmarilyn\nl2tp-uk\naladin\nzim\nsophie\nfrancisco\nquebec\ndepot1\nmsw\nonlyyou\nthu\nparrot\nwww.ces\ninterior\nwins\nhh\nsr1\nll\ntf2\ntallow.cit\nsv10\nbigmac\nlock\nri\nvtest\nwww.products\nmus\nbewerbung\nwww.international\nmoc\ntata\nsrm-atlas-2.gridpp\nbane\nwwwc\ncfg\nbuilding\nlinux.pp\ndev-api\nprintserver\nautodiscover.online\nautoconfig.online\ngw.pp\npierre\ncnr\npressroom\ncox\nfmc\namin\nvtp.data\nanis\nsrm-atlas.gridpp\ndhs\nlegacymail\nws6\nfig\ndevel2\ndia\nmaximus\nheritage\nsmoke\nlo.vip\n163\nsanta\npopeye\nprefs.vip\nasc\ns04\nlingua\namc\n203\ndnsadmin\njsj\ns66\nwww.toko\netoile\ns49\ntrafic\ncircus\norientation\nwww.im\nlsg\nharold\n666\nemail3\nvirtual1\nww8\nrs3\nserver33\nserver28\nii\ndialer\neds\nisatap\nnpc\ncreditbank\nperfume\ngarden\ncream\nkuku\nflorian\nphy\nicq.jabber\npop3s\nsnort\ntiki\nright\nlounge\ngreat\nwww.best\nkato\nslc\nwj\nwww.delivery.a\nmind\ncover\nor\nadx\npasteur\nchitchat\ninspiration\nkanji\nhari\nideal\nsocrate\nmc2\nwinchester\nwww.sanatate\nwww.bancuri\nchen\ngalois\nsgd\nrecipe\ncountdown\neditorial\nhitech\n365\nfield\nretracker\nstrider\nfleur\nisaac\nsignin\ntestcms\ncbc\ns140\nmarwan\nbobo\neda\ncontribute\nwww.directorio\nmoldova\nwww.gift\nkura\ns226\ndolly\npsa\nvolunteer\nrelatorio\ndraft\niowa\ns127\ns128\nmaat\ncanary\nnorton\ns141\nwww.resources\ns142\nbackup5\nxbox360\ns156\ns225\ndiego\nwww.order\ns220\nthayer\nsacramento\ngap\nnac\nkassa\nxbox\nuser1\nnm2\nmisty\ncarina\nethics\nsundance\nperson\ncharm\nconfirm\nvalue\ninfoweb\nreportes\ndiane\natenea\nserene\nwww.omsk\nasdfg\noral\ncmd\nadobe\nahmad\nirving\ntheia\nwww.vladivostok\nm19\nfatima\nmillennium\navenger\nfreechat\nwebdemo\nmovie2\nanand\nwww.sub\nfranky\ncleaning\narhangelsk\nartem\nbarcode\nblink\norion2\neuterpe\nwfa\nencuesta\nwalking\ncapa\nape\nayoub\nsftp3\ndanny\nxa\nsquirrel\ngwmail\ncoins\nservis\nkd\nwebhard\nscylla\ncoleman\nweblink\ndoris\ndrama\napc4\nwip\nmistral\nprisma\nelisa\noutage\nkangaroo\nmpr\nterm\nhakim\nconcord\npear\nemailing\nrunning\ns230\nscrapbook\ncaroline\ndistance\nwww.sf\nflight\necampus\nhost10\nwww.la\nairport\nviola\ncbt\nwww.dp\nwww.ci\nnds\nill\nids2\ncatering\nuser2\nup1\nup2\nwww.pliki\nimpulse\ntheseus\nmcafee\nflc\nlvs2\nmyphp\nfor\nforums2\nphillip\nmaster1\nsaturno\ncowboy\nrebel\nburbank\nlenta\nwellington\nicarus\nwww.football\nmidnight\nmafia\nlis\ncosign\nwhiterose\ncalliope\npenny\ngeology\nwebdisk.api\nmamba\nmit\nole\njoseph\nrcp\nsubscriptions\nmfs\nracoon\nmaroc\nfg\ngra\ntsgw\nspravka\nsda\ncai\nabacus\nfreegift\ndelicious\nmail-old\ntitanic\nwww03\nigra\nuno\nplm\nclc\neko\numbrella\ncpan\nprod2\ncdl\npebbles\nglobe\nnightlife\nhelper\nchampions\njoel\nli\nyumi\ntuanwei\nflirt\nscholar\njon\nangela\nrecette\nrahul\npotato\nhlrdap\napp6\ntree\nbaku\nper\nsuperstar\ntops\neu.edge\nbcm\nadminmail\nautoconfig.classifieds\nnec\nmanaged\nautodiscover.classifieds\nronny\nrover\nttalk\nvalentina\nboletines\nithelp\nida\nedoc\npartenaires\nrestore\npunk\nexcellent\nowen\nwww.premium\ntcc\nwww.2011\nemmy\nremotesupport\ngama\nbulkmail\nmd1\ngera\nmailout2\nrbl\ndb0\nalta\nosc\ntestdomain\nemail1\nnasa\nmika\nredwood\nagata\nvoltage-ps-0000\nwilly\nsrv13\nwww.phone\nleaf\nsga\nnitro\nwebdb\nb16\nsantabarbara\nissue\nenv\npma2\nerwin\nkungfu\ncadillac\nantony\nsfx\nfury\ncalls\ntypo\nwww.js\nrestaurant\ncheers\nait\nsirsi\ndust\nelec\nesther\nwebcom\nwww.suporte\nactivation\ncassini\ndots\nsally\nspacewalk\nselfcare\npia\nocelot\nfic\ncute\nproxy5\nps1\ndice\nwww.cm\nek\narchiwum\nnguyen\nwebdisk.archive\ncel\nvirginia\nwebmailx\nwww.mail2\nrepositorio\nkrypton\nftp.new\nurano\nwhitelabel\npure\nmundo\nwalnut\ntrillian\nmail32\nbilly\nsof\nfriendship\ntlt\nmail09\nwebcam1\nst4\nnico\nmuzica\nwww.card\npolicy\nanon\nmia\nremix\naviva\nlaplace\ndos\nshs\nshout\nfsproxyhn.kis\ninscription\nhsl\nmypc\npaco\nextend\nwww.mysql\nicms\nmagnum\nsp4\nfsproxyst.kis\nbcst-xb.ohx\nsebastian\nmobiletest\nmrm\nies\ncampus2\nrtr-xb.ohx\nitservicedesk\nspss\nvilla\nepost\nreports2\nzozo\ntomo\nmiracle\nultimate\nproxy4\nwww.cultura\nsenator\ncdr\nwerbung\nchelyabinsk-rnoc-rr02.backbone.urc.ac.ru\nwww.moda\nrosetta\nsmhecpsc01-v60.ok\nf6\nhrms\nassets3\noas\npgsql2\npgsql1\nhell\nstar2\ndprhensimmta\nnothing\nffm\nxq\nwww.manage\njin\nwww.do\nrohan\nmx8\ncanoe\nwww.dc\neclass\nhotthiscodecs\nkn\ncodecsworld\nmegamediadm\nsymphony\nkea\nbestmediafiles\nenjoymediafile\neasymediadm\ndevblog\nwww.cf\nlivedigitaldownloads\ndownloadmediadm\nadmin01\nallstar\nbestlivecodecs\nwww.ls\nlib2\ns52\ntime2\nwww.security\npow\nsearchdigitalcodecs\nteaching\nsiri\nthezone\nfindfreecodecs\nbestdigitalcodecs\nluggage\ncu\njj-cat4900-gw\nwww.realty\ntxt\nenjoythiscodecs\nhoneymoon\nwww.tourism\ntomato\nwww.computer\nfindmymediafiles\nnewmediacodecs\nhj-cat4900-gw\nmydigitalcodecs\nflat\noptima\nasso\nariane\npie\ntuna\ngtm1\nmediacodecsworld\naurelia\nnestor\nfastprodownloads\nsrm\nfreedigitalcodecs\ndelivery.platform\nsgr\nmegamediadownloads\ncopyright\ntimon\nldc\nlanguages\nfundraising\nfastmediadm\nvidar\ngetthiscodecs\nlinux3\npy\ngis1\nwebdisk.office\nlivepromanager\nnetworking\nsilica\nfastdigitaldownloads\nnewdigitalcodecs\nmythiscodecs\nskype\ndod\nrrd\nazalea\nbackupmx\nweibo\nsuperprodownloads\nfukuoka\nwebdisk.x\npractice\nmuffin\nmystic\nwww.germany\nxerxes\nglobus\nfreedownload\nals\nassistance\nlada\nfreemediadownloads\ngsk\nwha\nwww.vietnam\ndownloaddigitaldownloads\nfastmediamanager\nlivedigitaldm\ngaston\nmegaprodownloads\ninternship\nliveprocodecs\narte\nmegadigitalmanager\ndownloadpromanager\nmeg\nsow\ncherokee\neasydigitaldm\nfreemediadm\neasymediamanager\nsupervision\nvarnish\nhn.ipad\nressources\npaiement\nslm\nlivemediacodecs\nthethiscodecs\nsql4\nchum\n1trmst2hn\nwww.post\nvlg\nwww.erp\nwww.bd\ntimes\nnewdigitalmanager\ndddd\nirina\ndeer\nleech\nnewprocodecs\nlaser\nwww.orders\nlukasz\ngan\nnascar\nceo\ndataservices\naccess2\ncontrol2\nesf\nsearchmediafilesinc\njoke\ngetmediacodecs\nthemediacodecs\nfreehdcodecs\nsifa\nringo\nthenewcodecs\nfreeprodownloads\nfinddigitalcodecs\nback2\ntolkien\npuskom\nstage1\nbestfreecodecs\nsupermediamanager\nfreedigitalmanager\nsudan\nwww.zdrowie\nmendel\nico\ndigilib\napunts2\njs.hindi\nhospitality\nvod3\nnewprodm\nenet\nwww.laptop\nhostel\njing\nwww.e-learning\njoan\nmegamediamanager\ntibia\nsearchlivecodecs\nb14\nwww.insurance\npesquisa\nmymediacodecs\nboo\nliveprodownloads\njuli\nnewmediadownloads\nbestmediafilesinc\nfreeprodm\ngotcha\nsearchmediafiles\nlien\ndreamteam\nlilo\nwsc\nsysmon\nrbt\nresolver\nloli\nwww.mt\nstaf\ngarant\nfindthiscodecs\nclienti\nway\nfastprodm\npronto\nchampion\nterms\ndata3\nwww.global\npr2\ncallback\nsede\nerbium\nmadmax\nku\nnono\npkg\nformula1\nvodafone\nwww.11\nevision\ncp01\ncosme\ndarkness\nwww.kursk\nopportunity\nwebdisk.joomla\nwww.zabbix\nraja\ndumbo\nsogo\nxfiles\nantispam2\nclover\nfreemediamanager\nwebdisk.blogs\nautoconfig.blogs\nmarcopolo\nautodiscover.blogs\nsierra\nfiler\ndana\nhappiness\nwebconnect\nicp\nwww.zp\nshanti\nsuperdigitaldm\nmynewcodecs\nwww.notes\nwebapi\neasyprodm\nwebconference\nastrahan\ntaos\npromociones\nsupermediadownloads\nwww-staging\ndickson\nlivemediamanager\nnewdigitaldm\nkostroma\n777\njpk\nldap-test\nmegadigitaldm\nlogan\nairsoft\nfastmediacodecs\nteal\nipam\nadvanced\napp7\nswitch2\nhidden\nunited\nunderdog\nyaya\nwww.system\npwa\nlib1\nfinder\nyoga\nlz\nwww.podcast\nhobbes\nhani\nfindmymediafileinc\nyork\nbars\nwww.fx\nskoda\nmysql02\nnueva\ntyler\npdm\nwander\nns00\nfastdigitaldm\nvalencia\ndar\nmns\neasypromanager\nwww.afisha\nmegapromanager\nfastprocodecs\nsuperdigitalmanager\nsynd\nwes\nsurabaya\ncomcast\ndemo14\nbestmediafileinc\nmouse\nprofesionales\nxgb\nreal-estate\ntad\nrl\nrecreation\nwww.cz\ndmc\nbestdeal\nfastpromanager\nfrey\neldorado\npepsi\ndmg\noldman\nmerak\nwww.planet\nraw\nlivedigitalcodecs\nmarta\nfindmediafileinc\nmegadigitaldownloads\nsft\nfindmediafilesinc\nhotlivecodecs\nwww.musica\nmtn\ngondor\nspy\nwww.dz\npdb\ncracker\nwww.digital\ndownloadhdcodecs\nfreepromanager\nwarrior\nbestthiscodecs\nsearchmediafileinc\nmailmx\nwww.mini\nwww.kiev\nkizuna\nenjoylivecodecs\nmmedia\nidefix\nsearchmediacodecs\nrdg\npigeon\nwebdisk.testing\nsearchfreecodecs\neb\nenjoymediafilesinc\nfit\ntelefon\npoints\npla\neli\nfreedigitaldownloads\nparanormal\nms4\nhotdigitalcodecs\nawa\njesse\nenjoymediafiles\nlimited\nsgw\n12345\nworldwide\naga\ngetlivecodecs\nwww.gb\nwww.he\nfindnewcodecs\neasymediadownloads\nconnection\nns2.hosting\ngucci\nns1.hosting\nwww.rc\nmojo\nfreya\ntimeline\nsignal\nmet\npmt\nuk2\nwww.expo\nhasan\nrambo\neca\nmylivecodecs\npoisk\nfasthdcodecs\ns233\ns236\napk\nmenu\nskipper\ns237\ntwins\ns239\nmgm\neski\ngrass\nstarlight\nns2b\nwww.rent\nismail\nechelon\nkitten\nbollywood\nenjoymediafileinc\nfastdigitalcodecs\ndownloaddigitaldm\ndownloadprocodecs\nmotion\npax\nlalala\nlivemediadownloads\njonathan\narcturus\nwww.poker\ns238\nnewshop\nbonjour\naccent\nwin14\nencore\nraphael\ndownloadprodownloads\ntarik\ndonkey\nfindmediacodecs\nhudson\nfreedigitaldm\nbauer\nnewprodownloads\nsafari\nadvokat\nhotmediacodecs\nmfr\nbubba\neasydigitalmanager\napi-dev\nqa-partner-portal\nfreeprocodecs\nilearn\nlivehdcodecs\nplusone\nnewhdcodecs\nthelivecodecs\nbrisbane\nmidas\nnewdigitaldownloads\nfantasia\ntas\nsuperprodm\ndevon\nblaze\nfindmediafile\neasydigitaldownloads\ndownloaddigitalcodecs\nfindmymediafile\nlivedigitalmanager\nkw\nenq\ndownloadmediamanager\norigami\nwww.lipetsk\nmongo\nswallow\nemotion\nmegaprodm\nqarvip\nam1\ngetdigitalcodecs\nwww.star\nbrother\nsearchnewcodecs\ninfotech\nperformance\nnewpromanager\nenjoymediacodecs\nhonduras\neowyn\nqa-verio-portal\nwww.insight\nwww.script\nproxy01\nbaron\nkif\nfreemediacodecs\njurnal\ngoogle1\nhotfreecodecs\nlivemediadm\ncheboksary\nwww.multimedia\nwebapps2\nwin17\nhannah\nwww.rostov\nentrepreneurs\nwww.mag\ntarot\nfindlivecodecs\nrambler\nwin16\niridium\nwin18\nwww.al\nenjoyfreecodecs\ninform\ntrackit\nasher\nwww.sd\nsecmail\nqa.legacy\nsuperpromanager\nmobiledev\nprod.tools\nprod.new\nwww.newyork\nrejestracja\nenjoycodecs\n132\nsearchthiscodecs\nferry\nfindcodecs\ncwcx\nfindmediafiles\nsusan\nwww.dashboard\ninsomnia\nhotnewcodecs\nocadmin\ncfd\nbestnewcodecs\ncoder\nporter\nsuperdigitaldownloads\nsep\ngetfreecodecs\nblood\nbestmediacodecs\nsupermediadm\ndownloadmediadownloads\ntheone\nkpi\nnetman\nepic\nsearchmediafile\nfastmediadownloads\nprospect\nmatilda\nronaldo\nenjoynewcodecs\nlove1\nmyfreecodecs\nesxi03\nshire\nesxi02\nesxi01\nold-www\ngeronimo\nconfigurator\ndownloadprodm\nwww.zoo\ngetnewcodecs\npepito\nof\nfo\nwms1\nnewmediamanager\nisland\nmensa\nchallenger\nwww.ds\nwww.stiri\nfindmymediafilesinc\ncentre\nchaplin\nonlyone\nmalcolm\nthedigitalcodecs\neasyprodownloads\ncra\nmembers3\nmembers1\nlookatme\nmailbackup\ntest07\ngetcodecs\ndownloadmediacodecs\ncopper\ngroup4\nginza\ndsf\nconcurso\nbright\nirc2\ndelhi\nground\nsdp\nraspberry\nnewmediadm\nlegendary\nwhy\nkarina\nganesha\nliveprodm\nenjoydigitalcodecs\nd10\ntrevor\ntri\nbestmediafile\nczat\nbestcodecs\nazrael\ntwinkle\njosh\nlvs1\nlaos\ndownloaddigitalmanager\nspo\nthefreecodecs\nwww.pos\nautodiscover.stage\nmta01-40-auultimo\nmta02-60-auultimo\nmta01-bpo-80-auultimo\nmta02-bpo-80-auultimo\nmta01-50-auultimo\nadriana\nmta02-70-auultimo\ndcm\nmta01-bpo-10-auultimo\nnts\nip5\nmta02-bpo-10-auultimo\nbilling1\nmta01-bpo-90-auultimo\nmta02-bpo-90-auultimo\nmta01-60-auultimo\nmta02-80-auultimo\nmta01-bpo-20-auultimo\nmta02-bpo-20-auultimo\nmta01-70-auultimo\nmta02-90-auultimo\nautoconfig.stage\nfastdigitalmanager\ncitroen\npopcorn\nmta01-bpo-30-auultimo\ncrm1\nmemberold\nmta02-bpo-30-auultimo\nmta02-20-auultimo\nmta01-80-auultimo\nmta01-bpo-40-auultimo\nintro\niq\nmta02-bpo-40-auultimo\nmta01-10-auultimo\nmta02-30-auultimo\nrk\nmta01-90-auultimo\nmta02-10-auultimo\nmta01-bpo-50-auultimo\nmta02-bpo-50-auultimo\nvmc\nmobileapps\nwww41\nmta01-20-auultimo\nmta02-40-auultimo\nfreeman\nnox\nmta01-bpo-60-auultimo\nmta02-bpo-60-auultimo\nadsense\nstudios\nmta01-30-auultimo\nmta02-50-auultimo\nmta01-bpo-70-auultimo\nmta02-bpo-70-auultimo\nnet2\nankiety\nbaran\nkami\nkutuphane\nkk\nacl\nkmc\nsmarty\nm.m\ns63\nsh3\nanalysis\nasi\ncapital\nhrd\nheracles\nwebcalendar\ninfra\nmks\ni75\nservizi\nsupra\ni74\nzixvpm\nasetus1\ni72\nasetus3\nmail.85st\nsmtp-in\nasetus2\nbtc\nmail.shop\nmarconi\nmrtg3\nfleet\nmontreal\nsm2\nxyy\nwww.christian\nesa\nctp\nz3950\ndb8\nwww.vhs\nbscw\njive\nscope\ncri\nszkolenia\n85st\naya\nsmtpout2\norganic\nbdc\nw0\nminnesota\nrita\nillinois\nmada\nlouisiana\nito\nmail.eyny\neyny\nses\ncloud3\ngs1\nmie\nalbatros\ndieta\ncisl-plaisir.cit\nexams\nalbatross\nwww.prod\naims\nqaweb1\nqaweb2\nwww.atlanta\nimg10\nhx\nns100\nlogout\ntbs\nsif\narthouse\np7\nvid\nwww.pa\nunifi\nwtf\ngeoportal\nblade4\nmonarch\nsmithers\ndakota\ngladiator\nplace\nkrakow\ncrm3\nrecipes\nadi\nho\naka\nispace\nabyss\narchivo\nns95\nwina\nhenri\ntrixbox\ninv\nathletics\nedo\ncobbler\nnewdemo\nmorningstar\n43\nsava\nulysse\nns73\nns74\nautodiscover.server\nautoconfig.server\nns77\nmonet\nwebdisk.site\nalchemy\nbaobao\nhis\ndns22\nnida\nmoms\n120\nnu\nming\ndns21\nterre\nmonitor3\nquark\nwcp\nmtv\nns-1\nns-3\nindus\nsoho\nucenter\nkdc\nwww.www1\nwww.main\ni14\nalexandre\ni12\niwww\nstable\ni11\nmin\ndisplay\nwebdisk.helpdesk\nebuy\nvendors\nvmware\ntick\nges\ntsa\nfloyd\nmadonna\nreplay\nmail46\nsaa\nentrepreneur\nmail43\ns38\naero\naslan\nbyte\ngerald\nwww.webstore\nftp12\nwhoson\nroa\nweb31\ngiving\nmail08\nspamd\nvconf\naxel\nnews01\ngems\nsnmp\nsweden\ntsc\nacdc\ntest20\naroma\nwww.minecraft\ndeborah\nbronze\nweb101\ndomain3\ninsite\nshoptest\nsec1\nlogin1\nrochester\nhf\nsight\nwww.openx\napitest\nwww.trk\ndispatch\ndownloader\nsupply\nmj\nsecure5\n65\npythagoras\njr\nsoulmate\ndump\nhao\nns.forum\nwww.myspace\nopencart\nresolve\ncar40.eng\nwww.4\nhound\npeggy\nwww27\nwww.3\nwebdisk.v2\nreborn\nnetra\nquasar\nzipcode\nmoria\nakashi\neoffice\niportal\nrescue\nmail34\nstream4\nhamza\nseal\nbtp\nsurya\nik\ntui\nachilles\nibis\nbazar\nwww.w\ninstant\nimperia\neaster\nimagehost\nboleto\noffice1\ngalerie\nricardo\ncomplaints\nlark\nwww.manual\n87\ncc2\nexchange01\navg\nosprey\nbackup01\ndaa\nserg\n89\nbor\n91\nwww.fotografia\ndiesel\nlynch\nkestrel\nwww.ekaterinburg\nnetbackup\nrafael\nwebdev1\ntunisie\nxvideos\n71\nfuck\nlens\ndominus\nanakin\nvhs\niw\nmywebsite\nukraina\npyatigorsk\n58\nremoto\nssl-vpn\n56\nscreenshot\nworldmusic\ntest18\ndomaincontrol\ntest16\n55\nwww.16\naras\ngiovanni\nwebdisk.development\ncca\nhussein\nwww001\ncdi\nrancid\nfiletransfer\nandi\nautodiscover.reseller\nlogistic\ngib\nbeatles\nwebdisk.sports\nsnapshot\nautoconfig.business\nautodiscover.sports\nautoconfig.reseller\nhyouon32\nval\nautodiscover.business\nautoconfig.sports\nsdf\nwebdisk.business\n#www\nwebdisk.fb\nshp\nwinfm\ngorod\nvserver\ngss\nauriga\nmrb\ngiant\nnix\nmuonline\nwebserver1\nkunden\nwww.ti\nns99\nspec\njen\nhale\ndesignfd\naldan\nsip3\ntest.m\nwebdisk.hosting\nnewcom\nmonmon\nfreeweb\ncrm-dev\nbackbone\nsalad\nwww.tester\ntrc\nnewport\ncollaborate\nasp2\ndavis\nyang\ncaptain\ntintuc\nns103\nns104\nsd1\npmp\nartefact\nkss\nns123\nwww.accounts\nstingray\nwwa\nns121\ntweb\nwww.sip\ntees\nwww.energy\norigin.fhg3\nsecureauth\nnetworld\ncxzy\nerasmus\nottawa\nusername\norigin.fhg\norigin.fhg2\nmaxx\nacrux\nemoney\nwww61\nweb36\npusher\nnsm\niloveyou\ntakeoff\npnd\nwwwt\nzeropia\nmagnus\nmud\nautodiscover.us\nautoconfig.us\npsm\ncorvus\nvolans\nfirme\naris\nwebdisk.wholesale\nim3\nmsx\nmail.tw\nkom\nbuilder.hosting\nessen\nzulu\nwww.ak\nteknik\nwww-spd\nbbc\ncam4\nbap\nbay\nwebdisk.online\nwww.nieruchomosci\naoa\nbhm\npoems\ntcl\nannonces\nmoj\nwww.bg\ngtm\ndct\ns4357\nbibliotheque\nwww.finanse\nwww.prezenty\neie\nksi\nvu\ndnc\nego\ncpp\nbugtrack\navl\naso\nporthos\nz1\npaginasamarillas\nh14\n204\nhandmade\ncharts\nh12\nafs\ns37\nsa2\nkanri\ncosta\nhebe\nssotest\nserver45\nmsi\nserver42\nmilo\nweb32\nclic\nstargazer\npm1\nweb35\nleia\nwww.mms\nomg\nooo\nzhaosheng\nnagi\nbaki\ncharger\nseer\nwww.arm\nstan\nm.staging\nteleworker\ngis2\nrun\ntux\nflickr\nvin\nfds\nkane\naquarium\npsn\nwww.redirect\nlove2\naramis\njweb\npmx\nconvention\nvdc\npele\nbangkok\nwww.voip\nwww.profiles\nwebdisk.clients\nsentinelle\nhartford\nrwxy\ni19\nedu1\nc-asa5550-v03-03.rz\nsita\nosi\nc-asa5580-v03-02.rz\nautoconfig.director\nmassive\nautodiscover.director\nwww.biotech\nlenny\novh\ngalactica\nidata\ntesco\nelma\nmayak\nesse\nmassachusetts\nedmonton\nsv01\nmilton\nhapi\nhats\nnaples\nori\nvirgil\ninmobiliarias\nmidwest\nslice\npart\nbelarus\nmysql11\nmysql9\nclassificados\nbrahms\nmailb\npurchasing\nchannels\ni16\netech\nvod1\ntransparencia\npdi\ni20\nmurakami\nwindowsts\nhagrid\njuice\nhosts\nestate\nmxout\nbordeaux\nmico\ncelular\nfotki\naudrey\ni23\nmarx\nterminalservices\npetrozavodsk\nplone\nwww.fl\nnauka\ncontinuum\ni25\ni26\ni27\nnomad\nb8\nb9\neservice\ni28\nwebdisk.movil\nbsf\nparked\ncorreu\njoom\nquick\npoligon\nentest\nserv3\nmailhost2\nsafein\nasus\nres1\nredbox\nkarate\ngzc\nmom\nmitchell\nloyalty\ngea\nsapi\njavier\npark2\npark1\nnews3\ns234\ns229\ns228\nmail-1\nshampoo\nrss2\ncourier\nasterisk2\nzarzadzanie\nsavenow\ntoulouse\ns235\ns231\nemall\ns232\nstaging1\nnagasaki\nprosper\nrideofthemonth\nhideki\nimedia\nwww.groups\nplastics\nwetter\nbin\naos-creative\ncs02\ntrailer\nmops\ninvestigacion\nankieta\nlivestreamfiold.videocdn\nangus\nuss\nsunday\nstartup\nyuva\nwindows2008r2\nmid\nsharp\nwebdisk.i\nsimix\nradios\nsct\nontime\nwww.sh\ndevmail\nwww.tyumen\nwww.10\nwww.ml\n103\nscrap\nmailex\nwww-uat\nekonomi\naster\nbouncer\nfms1\nisg\nwms2\nwww.mkt\nleague\nsrv15\nwww.comics\ndbserver\nmusicman\nhosting01\noff\nsparrow\nsrv14\nabhi\nwww.fenix\nrouter-h\nstrawberry\nswordfish\nwindows7\nlims\nfrozen\nwww.2013\nys\nsuperhero\nrisk\nkansascity\nlouisville\nflint\nwww.v1\njoanna\nepayment\njesus\nhep\ncarme\ngewinnspiel\nsaturne\ngum\ngerard\ncrypton\n110\nrsvp\nans\nrealestate2\nautoconfig.archive\nldap02\nautodiscover.archive\nvs3\nsecureftp\nclothing\nsql5\nwww.ebooks\nbull\nwww.group\nrocks\nseoul\nfaxserver\nheineken\nams2\nwebauth\nphilippe\nmailboxes\nwww.russia\nagile\nfacturacion\nkimchi\nwww.japan\niran\nbck\nselena\nincoming\nscout\ntsm\nnigeria\nmarble\nbom\nyara\nns1.ha\nns2.ha\nautoconfig.it\nwww.florida\ngalatea\nroku\nvip7\nfederation\nvaio\nbazaar\nwww.mu\nmailserv\nmarry\nsigrh\nwizzard\ncls\nwww.ae\ntopic\nwww.by\nwww.hi\nwww.eventos\nwebdisk.fr\nipv4.forum\nwww.ka\nxm\nwebdisk.cn\nmarks\ns64\nchromakey\ns57\ns56\npoc\nhun\nbds\nwww.sql\nnewunse\nwww.ok\nhammerfest-gsw\nverona\nunderworld\nseti\nlandscape\ntrek\ncertification\nhemera\nxw\nmassage\nwww.space\nic-asa5520-vpn-fw\ncstest\nautoconfig.link\n404\nautodiscover.link\ntoast\nwww.15\ngwia\nhector\nreligion\nwww.sk\npc-cat4900-gw\nkj\nwww.mailer\nyl\npiranha\nasap\ntoken\nktv\ngranada\niws\ntruck\nwww.tt\nebisu\nssss\nul-asa5520-vpn-fw\nwww.europa\nautodiscover.seo\narun\nreload\nhiggs\nautoconfig.seo\ncgp\nwindmill\nwotan\nrmail\nhabarovsk\npromote\nbass\nwww.zakaz\nwww.msf\nubs\nelektro\nvixen\nnsq\npath\nwww.hawaii\nsylvester\nbbq\nnoor\nlaptops\ncottage\nlighting\nrina\nbang\nnona\nduck\nc11\ntravis\nprotect\nnowhere\nakatsuki\nmura\nrac2\nnimble\nkosmos\ncrmtest\nktc\njson\nmagix\nsponsor\nfreelance\nvip5\ncci\nlbs\nsro\nkaitori\nmail31\nwinston\nskc\nsocket\nshi\nsei\ntop1\nbono\nwebmarketing\ntoad\nsole\nfanclub\ncos\npipeline\nima\nwww.fm\ncopy\nkarin\ntechweb\ndidi\nhost9\nb19\nmci\nreda\nagriculture\ndoit\nip6\ndemo20\nprosfores\njpn\nvkontakte\nfake\nmiguel\nboxoffice\ndung\ndbd\naplikasi\nprocess\nsunil\nscp\nirene\nnoir\nhanoi\ngigi\nyusuf\nautoconfig.newsletter\nshakira\nautodiscover.newsletter\nwww.pms\nedc\nwww.plan\nserve\n125\njean\ntemp1\nfiler1\npcgames\nmetc\nassistenza\nmake\nzcc\nvbulletin\nchange\nibanking\nbackup4\nvps102\nsubmitimages\nawesome\npresto\nmiel\nwww.ea\nnada\nmarcel\nimvu\ntn\nmanado\nsvs\nincom\nwww.linux\nwww.base\nstring\nmaurice\noil\noscommerce\nvivian\nlynn\ngundam\ngoodtimes\n123456\nsword\nescape\nplacement\nnuri\nkumar\nworking\nxml-gw-host\nglow\nturner\nginger\nnuovo\nbrad\nshaggy\nyesterday\nrrhh\ndedi\nsalt\nwww.management\nvip8\nsand\nuhspo\nscom\niris2\nmasa\ndada\nwww.eco\nhms\nnataly\nsmart1\ninb\nwebsvn\npersonals\nsola\ntwist\nsuri\npunto\nting\nwonderland\nakari\nvh\ngenetics\nprophet\nwww.invest\nwww.master\nwww.ksp\nmailsv\nwww.journals\nmarcos\npolit\nwww.event\nsrv24\ningenieria\nxsh\ngrey\nbogota\nretete\ninforma\ndracula\na6\no1.mail\nwww.bc\nmateo\nmylove\nprovision\ndominios\ntvonline\nccp\nvir\nxpress\nmgr\nmurat\ndemo16\ndemo18\npocket\nbulten\nwww.crimea\nbumblebee\nabcde\nhanna\nlb3\ncynthia\nsnowflake\nnap\nse2\nibc\nbulksms\nbeeline\nwa1\nwww.power\nwww.rnd\nwww.ma\ncathy\nmaster2\njeremy\nlsrp\nanything\nps3\nwww.luna\nhonolulu\nfilter1\nege\nhellokitty\nacad\nswiss\neschool\nari\nmio\nslf\nira\nraman\nmammoth\nons\njsp\neroom\nsmiles\nmail.de\nramon\njessica\ncheckpoint\ndawn\ns153\nlvs\nhost13\nkerio\npin\nagnes\nglobo\ngarage\nbox2\ntake\nstar4\nsparkle\ns190\nrdm\nspotlight\ns176\ncedric\nnut\ntestaccount\nbudapest\nframe\nunico\ntamara\nfas\nignite\nzodiac\nstuart\nkasper\nwebapps1\nstart2\nced\ncpn\nstp\nnewyear\nbeach\nvaruna\nleap\ntigers\nhotmail\nweb09\nimaginary\nconnections\nss4\nmein\nehsan\nmssql5\nsayac\ncbf4\ngoddess\nmailcheck\nscotty\nreferat\ncecilia\nbaco\natelier\nonline1\nwww.turismo\nweaver\ncbf5\nmarian\ns223\nexchange1\ndorado\niserver\nbarracuda1\nprada\nstreaming2\ngisweb\npsd\ndaffy\nmusicbox\nralph\nacid\nroland\na7\nshelly\npikachu\nmailstore\ntecnologia\nadvice\ns186\ns167\nastrology\nlm1\ncocoa\nsecrets\nmiranda\nwebstar\nalone\nawc\nyounes\ncrawler\nadele\nshamrock\nprimavera\nned\nwebdisk.login\nautoconfig.login\nautodiscover.login\ncp5\nspiral\nsyktyvkar\nfuzzy\njessie\ni90\nmakemoney\ntelnet\ndanger\ndollars\nproc\nas3\naaaaa\nindustrial\nwww.network\nwebdisk.portfolio\nserv83\noverflow\nwww.kirov\nboron\nbirds\nbehzad\nfaces\nwebdisk.live\ntamer\nwww-2\nlilac\ndevcms\nwarranty\nmcq-indus-01.iutnb\nsupreme\nhangman\ncancel\nmcq-projet-01.iutnb\nsrv0\nslash\nchild\ngeoweb\nnowa\nconrad\nwebdisk.free\nindesign\n86\nsbe\ncurtis\nmyforum\ninfra1\nuniv\nweb4004\nrune\n81\nduplo\nmail35\nwam\nskins\nhimalaya\nbeatrice\nkrs\nfinland\nharrier\nfw02\nperfect\ngoose\ngenealogy\nerik\nmarriage\nheimdall\nautocad\npony\nstranger\nhilda\nadvisor\n75\nwin15\nkaizen\nns150\nregulus\nadler\nzakaria\npay2\nwww.reports\ncpanel1\n74\npatricia\ni80\nwww28\nwww.kemerovo\nwww.stud\nhighway\nsecurelogin\nwww.l\ninsane\ninti\n68\nwww.barnaul\ntomtom\njedi\nspeech\nfilebox\nrdns3\nnoda\nintegra\nelan\nkingkong\nakash\nwww.irkutsk\n62\nseeker\nkeyword\nlog1\nvtc\nwww.report\nagape\nmara\nresponsive\nwan\nipv4.demo\nbca\ntest23\n96\nmoments\namp\nwww.12\nwww.travian\nescrow\nnights\nwww.13\ndev10\npo2\nssh1\nwww.man\nw11\nwebdisk.upload\nwww.20\nsurat\ntoro\ngo2\nwassup\npleiades\nconan\nalef\ncaravan\namjad\nsmtp.mail\nwww.smolensk\ncanopus\nwww.9\ntsgateway\ncolt\n02\ncpt\nwww.mama\nredsun\ndac\nfdm\ncdn5\nmyip\nwww.stavropol\npuertorico\nisc\nzhaopin\nwww.esp\nturizm\neticket\nassets4\nthewall\nadserver2\nimg05\nautodiscover.main\nwin20\ndoi\nwww.developer\nportale\nkhorshid\ncounters\nprs\npsc\nromans\n222\noneclick\ncheap\nimg165\nneuron\ntrigger\nsecure10\nnobel\ndakar\nwww.dvd\nsecure11\nwww.demo3\nsavebig\ntaka\nsdns\nrhythm\nadagio\nwww.property\nnoproxy\nmrp\nsou\npaygate\nsailor\n#mail\nbillpay\nitp\nvolta\nhris\nsinope\ndoodle\ndrc\nxchange\nshield\nrdns\nhubble\npredator\nwww.url\nturan\nmurphy\nvoting\nboletim\ncollins\nprogamers\nns97\nns96\nhost03\npct\nwatt\norinoco\nsa1\nsecureweb\npharos\nnota\npicnic\neduardo\ncongo\nns78\nns76\naquamarine\nwww44\nsot\npadma\nmosaic\nhw\nx4\nrocker\nfathi\nconverter\nderek\nfullmoon\nrns2\npersia\nt5\nmurray\nvps104\nbsm\nutil01\nbarbados\nessence\nmain2\npcworld\ntis\nmailsvr\nkirakira\namigo\nns79\nsmash\ncassiopeia\nfairytale\nns105\njnp\nwww.puzzle\nmulberry\nsolusvm\nbfm\nns117\nmclaren\nmx13\nns122\ntechnet\ndemo19\nlocal.api\nwww.account\nsmtp-out-02\nsonet\nvol\njinx\ndamian\neminem\nphotobook\nwww.wd\nvps107\natlant\nhamid\nbambino\nbismarck\nsecdns\nfcs\nwww.piwik\nkkkk\njackpot\nexcelsior\ntootoo\nalani\nspi\nvids\namal\nnewhost\npingpong\nmail-in\norigin.www\nmister\nwww.deals\nkorean\ndinosaur\nkristine\nccl\nempty\nshining\nww9\nrays\nautoconfig.links\nautodiscover.wholesale\nwww.vc\nclay\nsch\nnagoya\nminmin\nphs\nwww.shadow\nyuan\npmc\nautodiscover.links\nsmiley\nrews\nolsztyn\nmot\nbioinfo\nosm\nmacho\nmime\nglamour\notter\nkx\nimran\nautoconfig.wholesale\nwww.mailing\n85cc\nwww.prestige\nprofi\navril\nmail.fc2\nbb1\ncorner\nlegends\nbongda\nsobek\nasta\nprep\nsogox\n8591\nalcatraz\nwaffle\nidiots\nmail.8591\nmail.77p2p\nspawn\nvalerie\nass\nemailer\nfilmy\ncho\nbsa\nwww.irk\nvip4\ncristian\naj\naccess1\ncouncil\nden\nelysium\ngsf\nwww.msn\nvcon\ndrp\nemg\ncme\ngcm\nwww.firmy\nworkstation\n5278\ngadgets\nmail.5278\ntapety\nholocaust\nmail.sogox\nmobiles\njorge\nm18\nobject\napps1\nmediasite\nspectro\nlister\nos2\nhcp\n228\ngos\ns46\namar\nwww.template\ncet\nkor\nq10\ndsadmin\nmocha\nkiran\nlps\nblago\nmarin\nsparc\nhost02\nbellatrix\ncuriosity\nmail.85cc\nbiuro\noursogo\nmail.oursogo\nmahdi\nfemdom\nmerida\nlanguage\nalto\nwww.delivery\nkopia\nmalik\ndave1\neburg\nweb52\nweb51\nserver47\nsenior\nserver46\nmvp\nclan\ndomaincontrolpanel\nreferral\nwww.develop\nhalloween\nfee\nmedea\nrobotics\nmehdi\nserver32\nmssql01\njiuye\nserver26\ntrauma\ndesert\ntu\nharrison\nbox11\nmiass\ndarklord\n77p2p\nsoluciones\nosd\nslk\nav8d\ndentistry\nmx-2\nmonroe\nmail.av8d\nsimorgh\nwww.telecom\nkerala\nwuhan\nmoody\nerc\nsantander\nsharefile\nniobe\naca\norangecounty\nm01\npta\nmail41\nvc3\nwww.7\neleanor\nhvac\nassassin\nsacs\nmex\ntales\nwebdisk.go\nautodiscover.exchange\nmail44\nmail.news\nmail45\nurania\nwww.photography\nhamlet\nfreebox\nbianca\nhadron\nvcd\nblake\nsync2\npdu2\nkonvict\nlobo\nfw3\nsmtp-gw\nnhac1\nmail.corp\nas4\nomicron\nwww.black\nngo\nwww.autos\ntrends\ntweety\nkinder\nttl\nceleste\npitbull\nzxc\nexchange2\ngroovy\nwww.bridge\noglasi\ndesa\nzara\noplata\nwww.ece\nsrv22\nblizzard\niti\nems1\nwintermute\ngroove\nsrv23\npearson\nwww.ebook\n109\nrtc\nhandbook\nvitrin\nws02\ncdm\nadv2\nbugatti\nwww.int\nwww.rec\nwww.tk\npostal\nchou\nmontgomery\npriem\nbailey\nwww.tender\nfileupload\nbestseller\ndongwon\ncomet2\nleviathan\npoze\nmac1\nebusiness\nwww.vitrin\nconcursos\nmerry\n129\ncso\nnsp\nwww.profile\nmowgli\nchewie\nalla\nannapolis\npreston\nnos\nets\nkv\nleasing\ntest007\napricot\nykt\nflog\nslx\nalgerie\nindicadores\nexcellence\nleslie\nfresno\nfreeworld\nmoby\ngestalt\nwebdisk.jocuri\nzakupki\nedu3\nmarion\nthalassa\nautoconfig.jocuri\njefferson\ntp1\nromi\nmpe\nstuttgart\nwww.fotos\ntimmy\ntakaki\nwww.bug\nmnemosyne\nartist\nmatador\nautodiscover.jocuri\ndesi\nencrypt\nbulkemail\ni13\nassociation\nesupport\nalgeria\nwww.elite\nkennedy\nyedek\ntires\nremo\nwww.motoryzacja\nmotoryzacja\nmystore\naula\npakistan\nsocialwork\nihome\ndept\nraid\ndeepblue\nreserved\nwww.dream\ncaracas\ntsp\nwvpn\ntriplex\njobsearch\nsushi\nontario\nwww.losangeles\nszb\nshoutcast\nmga\nfart\nvito\nvmtest\nsqueeze\nexperiment\ntal\nmos\nblocked\nnewsfeed\nlc2\nwebdisk.newsite\ndarling\nimageserver\nvpn4\ncreme\nesmeralda\namerican\npstest\ntabletennis\nwww.virtual\nhost23\nwww.counter\nmb2\nyar\nvrn\nwww-demo\npc11\nglobal2\nwww.destek\nbysj\nquarantine\nwww.ga\nchandler\nevp\nreed\na0\nwww.dreams\nhelpdesk2\ntitans\ndq\ntermin\nmota\nkamel\nnewtech\n128\ntttt\nred5\ninews\nmanchester\ne10\ncyberspace\nsaigon\nwww.users\nsrv03\nwww.bali\nlojas\nfilosofia\noperations\nwww.program\nregional\nauthors\nmalibu\nghosthunter\npacman\nladolcevita\nwww.style\nwww.andy\nwww.mr\nelectron\nwww.cert\nwebmail10\nbabbage\ngiga\ng6\npmm\ndixie\nbea\nstamp\nnmail\nkage\ntrials\neforms\ncontent6\nmarkov\nsw3\nwatches\nsnowy\nmarvel\ncontent7\nmaru\nwoodstock\nmano\npara\nmarkus\nmako\nsrv16\nsrv17\nsrv18\ncsweb\nwww.chinese\nwww.casino\nmail42\nmail47\nlevi\nwww.arabic\nstudent4\nwww.prestashop\nlana\ndomini\nkamikaze\nopenmeetings\nftpadmin\nchristianity\niep\nemc\nlabrador\npoly\nxuebao\nredline\ntiamat\naq\nboc\nsilk\ninfos\nxweb\nmsite\nthehub\nrainbow2\nbola\nandreas\njane\nwww.ny\nwebdisk.novo\nbsh\nitem\nfrancis\ngeorges\nrainbow3\nschulen\nkaty\nhoster\ngaruda\nfsm\ndatasync\ngreatdeal\ni33\ngamezone\nlawyer\nmarcelo\nsl1\nconsult\nhoge\nellie\nhlj\npussy\njersey\nviolette\nkagoshima\ngenerator\nwebdisk.book\nsal\ndatabases\nquestions\nwww.mantis\nzeus1\nweb10656\ncenturion\nnika\nsix\nprimer\nroche\nbarra\nwww.scripts\nmerkur\nwww.spa\nradyo\nalvis\ncoa\ncch\nilo\nclear\nwww.mark\nbells\nwww.mars\nwikis\nautoconfig.i\nthot\nfreeze\nsahil\nquattro\nwww.klient\nlive1\nrtg\ntinker\nautodiscover.i\npera\nmirror3\nwww.z\nbc1\neon\nwww.poznan\ncommunities\nmfc\nrem\nwww.hp\nsimg\nd22\nsaber\nplanck\nsmr\njoey\nsalesforce\nwired\nkernel\nqatar\nitsm\ndima\nh8\nunlimited\nwww.nice\nvodka\nsud\ntestlink\nwww.dental\nthreads\ninca\nnull\nnate\nblade9\nlifeline\npaf\n105\nsaman\nb18\nb17\nhachi\nstick\nmta3\nprashant\npavo\nserver51\ncoc\nsonny\napus\nibiza\nwww.wallpapers\nlukas\nthera\nfmipa\nblade10\nzxcv\nxf\nym\nzd\noklahoma\nespana\nkool\nbaba\nerrors\nsable\nwww.victoria\ntokens\nigate\nwebdisk.web\nwww.mercedes\ninstyle\naion\nwarcraft\ncrawl\nmrc\norion1\nemu\ncisl-gijon.cit\nopros\nteamwork\nppt\nkang\nscore\nintegral\nstealth\nlo\nsupervisor\ntempus\nc13\nvmware2\nbubbles\nchiba\nsorbete\nmido\nwebdisk.docs\nporky\nautodiscover.health\nsha\nivory\ntrue\nlfs\nvtour\naha\nhost21\nnato\nwild\nchristopher\npapaya\nohio\npermits\ncct\nheroes\nautoconfig.health\nuntitled\nxnet\nxian\nwww.rsc\nwww.alfa\nbilet\njas\n118\nparagon\nbem\nmordor\nfe1\nhdr\nwww.tc\ncustomersupport\nmillion\nipcam\nwww.hub\nns.demo\njms\npro2\ns76\nlts\nwww.donate\nddi\ncolorful\nolymp\nwww.about\ni61\nlongevity\nappstore\nsra\ntortuga\nwww.vn\nsigadmin\njuliet\naml\nsi1d\nrates\ns55\nwww.lady\npres\nkos\nwhale\nmal\new\nfender\nautodiscover.live\nsolus\ntestvpn\ncaos\nautoconfig.live\nwww.gg\nfans\nnoob\nautodiscover.cn\ntdc\nwheat\nagua\npineapple\nsilva\nanne\nwebdisk.de\nnour\nconferencia\ns68\nantiques\nwww.me\nrevista\ncs4\nshepherd\nramazan\nzena\ns54\nlsh\ndnp\nctc\ntaha\ndoku\nmail.in\nsm3\nboole\nsssss\noceanus\nproactive\nzakon\nkobayashi\nwww.photogallery\nhook\nsrd\nstor1\narhiva\npreproduccion\nomid\nwp3\nsse\nwebmail01\nspiker\nwww.no\navalanche\nadds\ncrl2\nplayboy\ncontador\nsela\nblessing\nmijn\nluther\nstephen\ngj\nananke\nkomi\nwww.auction\ndionysos\nwww.king\ntrix\ntomate\nwww.center\nluck\narif\nalmighty\nclimate\nvz2\nwww.bio\ndocumentos\ntechblog\nzuzu\nwww.invoice\nleader\nchevy\ndune\nwww.linkedin\nwww.shared\nbiyou\ncoach\nliterature\namazone\nterranova\narion\nloulou\ntyphoon\nsupersite\ngtm2\nwebmail.test\nnets\nfunny\nvienna\nbf\ns1103\nrick\nforza\nsergio\ncdn103\ninterno\nsdi\ni35\nneumann\nwww.va\nmoca\ni67\nnepal\ndme\npurgatory\naxiom\ninvision\nsylar\nrape\nrams\nreference\ncdn102\nsaid\ni69\ntino\nmedi\nwww.et\noh\ndauphin\nwebdisk.books\nwww.galaxy\ntechinfo\ni71\nlyncwebconf\nminnie\nectest\nwww.newsletters\ni66\ntomy\ni73\nkst\nrace\nfiction\nsala\nsbb\nexec\njester\nfix\nwww.nissan\nnishi\nhummer\nmatrix2\nlimelight\nhttp2\nwarp\nsunlight\nkar\nmapy\ndistributor\nscratchy\nxk\nlola\ncashing\npgp\nsirena\nb30\nracks\nwash\nwww.ko\ntaganrog\ngpm\nwww.mb\ncha\nomer\nvalhalla\nmerci\nvz\ncache3\nsucre\nwaptest\nsexo\nkani\niad\ni76\nscr\nbreezy\nappcgi\ndangan\nws11\nwww.pk\nwww.pg\ni65\ntennessee\nwww.ns\nfoot\nlams\ncsng.ok\nwww.auctions\ni64\ntraining2\nabf\nobninsk\ncjxy\ni63\npcsupport.bnsc\npcb\naussie\nbuddy\nweb6400\ni77\ns67\nd0\nlinkin\nstar9\ntranslation\nwww.gamers\nflseok\nsota\ngpu\ncandle\nautoconfig.de\nbae\nwww.img1\nwww.ig\nlic\nelegant\nmymoney\ns73\nwww.fh\nchrysler\nhime\nmyname\nautodiscover.de\ngu\ns77\nbigtits\nautoconfig.cn\nilab\nclaude\ni78\ns78\nchildren\nstreaming1\ni79\nberyl\ncosmetic\ns06\nyummy\nguitar\nvpngw\nlcgbdii.gridpp\nimpuls\ni62\nbaghdad\nssrs\nbackpack\nfenrir\nkurs\nmyapps\nmkc\nderecho\nanil\ngames2\n119\nteamo\nhts\nmail.newsletter\nlpta001.itd\nlpta009.itd\nad3\ni81\nzurich\ntrex\npeso\nsecure6\ncambodia\ngw.nd\ngmt\nirm\nmagnet\nras2\nvpn02\ngw.ag\nscholarships\nestrella\nataman\nhoanganh\ncf165.conf\nmailhub.kis\nwww.hiphop\nrtr-xa.ohx\naldo\nlastminute\nniki\nshadows\ncatalogs\nshuzai\ncaca\nnet-xa.ohx\nmonavie\nulises\nkaspersky\ncf195.conf\nwestern\nbcst-xa.ohx\ncf175.conf\nemprego\ni82\nyutaka\ncf185.conf\nreddot\nxing\ncf155.conf\nregis\nrtr-oa.ohx\nwat\nusub\ncmi\nwartung\nnet-oa.ohx\nsur\nlfc-atlas.gridpp\nbcst-oa.ohx\nsever\nmarcom\nmon2\nstatic0\nmock\nbmb\nautodiscover.x\nmaillists\nautoconfig.x\nmody\ni60\nmacos\nveeam\nbrett\nbrazzers\nmain1\ni58\nmbs\ncda\nesi\npanfs2-nfs.esc\nlila\npptp01\ne-mail\ni57\nnorthstar\nmail29\nracer\nendeavour\nwww.fs\nwebdisk.articles\ncamper\nexercise\ngost\nintrepid\nzaki\ntheworld\ni83\nwww.france\nwww.israel\nhandball\nstephane\nhanson\nplug\npmd\nadsl2\ni56\nsweets\npivot\ni55\nasp-winterville.cit\nmail28\nwww.crazy\nautodiscover.soporte\nrcc\ndragonnew\nc64\nblacksun\nsolaria\nwww.hardware\nkaro\ncontinental\nboon\nmce\nluxor\nkawaii\nultra2\ntan\ncompunet\ncaro\nmaxime\ninternetr-all\nm.beta\nhcm.ipad\nei\ni54\nz-diemthi\nrac\nbomber\nreiki\nimg.e\nciao\ni53\nddns\nchanges\nsmog\nmask\ndmca\nservice1\nwww.plgto.edu\npepe\nalis\nbk2\nhindi\nbk3\ni84\nmedicina\nalibaba\nntc\nwww.easy\ngymnastics\nhq2\nkaka\ni52\nsdr\nork\nzf\nnatura\nracine\nquake\ni85\nxmen\nentertain\ncocoon\nbubu\nwww.pets\nprensa\nstat4\nwww.server2\nhst\nlexi\nwww.resellers\nmailhub2\ngarnet\npain\nbelka\nmorena\ncoca\nrz\nun121101225938\nsagittarius\nb33\npci\nstart.ru\nabcdef\nplgto.edu\ni51\nb32\nb31\nich\nmyway\nwts\nmacedonia\nm-dev\nwww.m2\ni86\ncitibank\nexplore\njunk\ncupcake\npixie\ntest.shop\n212\nabdo\nb26\nautomail\newa\nhunters\nb20\nimagini\n121\npalermo\nfrink\nb23\nsmtp-in-01.mx-fs2\nfrida\ni50\nnstest\nreplica\nhj\narctest\nthulium\nb21\ni48\nsmtp-in-03.mx-fs2\ninvestment\ni47\ni46\ncompton\nsmtp-in-02.mx-fs2\nunused.aa2\nhome.stage\ng5\ncheyenne\nhostmaster\nwebdisk.soporte\ng4\ncallme\ni87\nrobby\nwww.lider\nvds4\ni88\ni45\nzahir\ncp4\ni44\ndojo\nindustry\nbandung\ntumen\nadmin5\npba\nhideip-europe\ni89\njaka\nora-placeholder-ps-db.srv\nfab\nclara\noks\ncor\nfish1\nbomba\nformosa\nmailweb\ne6\nautoconfig.soporte\ni43\ni42\nrad1\nwww.v\nnatalia\ndigitalmedia\ni41\nwebserver01\nhermes2\ni40\ne4\nseas\nnicole\nwebdisk.analytics\nhackers\njungle\ni91\nwww.holiday\niva\ni38\ncomplete\nnode01\ni92\nfifa\nhealing\ni37\nabiturient\ngato\nsh7\njv\ncreator\nsote\ninfiniti\nnit\nsmsc\nmstudio\nfour\nappli\ni93\nsecure7\ni36\nivy\nvaleria\nsmtp16\nrohit\nkonto\nwww.fz\nliberte\npti\nvideo4\nprotech\nvss\nkygl\nmp4\nmost\nhoroscop\nwww34\nhino\nim4\nopinion\nipo\npingu\nwww.door\nstellar\ncro\nwww.horoscop\ni94\nreunion\nxion\ni39\natropos\ntraining1\ni30\nyw\ninnova\ntatooine\ndr-www\naustria\nwebdisk.bugs\ni34\nhood\nshop3\nwww.dr\nchester\nhora\ni96\nkenobi\nwww.xy\nradius4\ndatenschutz\ni97\nvod4\ncanopy\ndop\nhost20\ni98\nstatic-mal-g-in-g01-s\nsisko\neol\nwahlen\ni99\n126\nissa\npig\nauth3\nleela\ntva\nuk1\nmta01\nalp\nonion\ndle\nmlp\nliza\nkhan\nmxmail\ni32\nmobileiron\nlian\nminos\nwww.worker\ntsb\nmld\nwww.build\nkick\nrtx\nvds3\nsammy\nvet\nchatting\nmaplestory\ni31\nplay1\nmaki\nreyes\nskala\nmail49\naddicted\nautodiscover.movil\nmailgateway3\nclosed\ni29\ndoctors\nautoconfig.movil\ncalgary\npdb2\nmach\nsilverstar\nold3\nmichiko\nbkm\nkl\narctic\nutils\nvulcano\nmadi\ntest-m\nd28\nd27\nhorses\nregistry\nwin22\nwww.code\nishop\nwww.tenders\nwww.dd\nhorror\nclassico\nautodiscover.dev2\ncmsdev\nbbss\nwide\nprima\nautoconfig.dev2\ncarpenter\nmymusic\njelly\nmoga\nwww.gd\noswald\nwhiteboard\nsmallbusiness\nwww.mp\ncfs\nrcm\nwww.mv\nben10\nwww.conf\nneuro\nverwaltung\nwww.cabinet\nwww.ng\ntw.blog\nwww.rr\niman\nolympia\ns241\ndolce\nloko\nauc\nm.pool\npartner1\nwww.spanish\ni22\nmoka\ndev.admin\nwww.rus\ncdn01\nmws\nmalaga\nmono\nwww.firme\nmineral\ni21\ndipsy\nxd\nthebe\nwww-hold\nwinxp\nwww.payment\ni18\ni17\nporto\nwww.hf\nhomeless\nwell\nguangzhou\nwww.sis\nsmall\nwww-stg\ncanal\nwww.cats\nsab\ni15\ntsi\ndiscus\nhay\nslides\nstarlife\ntrader\no1.sendgrid\nipphone\nhungary\ntopstar\n3w\ncairo\nwww.dns\nts.kmf\nnuts\noper\nsitemanager\njang\nvpn5\ndionysus\nasdzxc\ngss1\ntetris\nincubator\noren\nnewhaven\ncuda2\npty13213b\nwww.date\nestonia\nmrtg1\nwroclaw\ngreenapple\nthumbs.origin\ndomination\nc2c\ncreation\nkawagoe\nmyhost\npong\nvts\nfaperta\nts.fef\nlebanon\ngrapher\n000\nvestnik\nlip\nmyrtle\nts.ydyo\npsbfarm\nnewww\nromantic\nsyria\npergamum\ntpi\ndede\nedms\ncatfish\nwww.o\negcdn\nwww.author\ndiscuz\n106\nwww.hobby\nstatystyki\ncontrib\nresearch1\ncharleston\nkatowice\nanimals\nseraph\ndarknight\nnasty\nsari\nchronicle\nstats1\nvz1\ngibbs\ndoll\nvia\n11091521400593\nobservatorio\nspice\nsokol\nemails\nwww.act\nkhalid\ntucker\nmatch\ncounterstrike\ntesting1\nwebdisk.director\nwww.print\nfatih\nodie\nrush\nepro\nbelize\nsamer\nripe\nc-asa5550-v03-01.rz\northo\nc-asa5550-v03-02.rz\nbarrie\nikaros\nimobiliare\nconcurs\ncypress\ncgs\nashley\nshu\nticker\nteleservices\nlover\nsitelife\nlhr\nwww.max\nffl\ngooogle\nwww.lms\nlistsrv\nwww.city\nwww.discovery\nncp\nwiwi\ndoc2\nomi\nguestbook\nke\njustme\ntown\ncomet1\nignition\nphim\ntestonly\nryder\nfobos\nlobby\nyahya\neucalyptus\nbmc\nfps\nvivo\n230\nwww.ops\nabba\nringtones\nwebd\nwebmail-original\nmailrelay2\nisv\nsrv19\nwww.storm\nultima\nnaughty\nwebproxy\npriya\napp8\nwww.vladimir\nyoko\ntinkerbell\nsouthpark\njulius\nreach\nperidot\nwww.pre\nwww.private\nyachts\nbeehive\nati\nviejo\nhanybal\nhamm\nhn.nhac\nwww.mirror\nbangbang\nasha\neragon\nprobe\nmysql03\nemmanuel\nit1\nluka\nchillax\nkanto\nipmonitor\nwebworld\nwww.evolution\nchetan\nsun2\noauth\nweb100004\ntmb\napi.dev\nvh2\nsph\ndmm\nsod\nhsi\noficina\nmarcin\ntoni\ngilda\noffcampus\nnightmare\nsomething\ncas3\nredbull\nvtb\ni49\ntam\ntbc\naxa\ncoyote\navm\neventum\nalbion\nnanda\nfivestar\nqwe\nip3\nwww.ava\nrev\n234\npinger\nresort\nbdog\npcc\ntestpage\nwombat\naplicativos\naudition\nwww.lan\nnhce\nwebplus\nwyx\nwww.cdn2\nblackandwhite\nericsson\nwebdisk.home\nmikey\narirang\nmst3k\nrepublic\npf1\nwww.alaska\neiger\nwebsearch\nvegetarian\nlocalhost.blog\ninput\nwww.forum2\navcome\ndat154\nwww.sim\nfront3\npbs\nlords\nsiva\nodc\nreverseproxy\ndys\ntomahawk\nse1\nserver43\nmarko\nnrg\npooky\nmarek\nchilli\ntestuser\nmiko\n080\nlys\nmobile-test\nkaito\nnine\nshelter\nhoteles\nmail.xvdieos\nmail.avcome\npraha\nalbany\npss\nadvertisers\nhost04\nhost05\ncotton\np8\nmysqltest\nwebdisk.webdesign\ncbr\nherakles\ni59\nh10\nserendipity\nautoconfig.my\ns39\nftp.shop\nfoxy\n233\nwww.moscow\nlv121101224239\nemilia\nh11\nautodiscover.my\ns59\njcc\ndev.shop\ns62\npiglet\ndamdam\nh13\ntigger\nduncan\ns44\nh15\nmadagascar\nsportal\nhank\nplaceholder\n170\nwww.k\ning\namt\nbeth\niii\njudith\nwww.notebook\nserver35\nrdweb\ncacti1\njoshi\nvideoserver\nxvdieos\nhey\ngenie\nwww.nano\nalt.relay\nnewmedia\nkamil\nyugioh\ndigisys\nmartialarts\nwww.adrian\nmailing2\nsfr\nsm01\nm20\nwww.wroclaw\noddbanner\nwebgis\ns4242\nproposal\nsmpp2\nwwwadmin\nsss2\ndio\ncul\nalvarez\nhs1\nfen\neso\nencoder\nevm\nartur\nmajor\nmcm\nnils\nsohbet\nwebdisk.marketing\nmobile4\nmalta\nsamar\naaaaaa\nalborz\nsks\ncentaurus\ncitadel\nwww.password\ncdrom\nmariana\nda17\nisengard\nangelina\nhttp1\nipp\nmermaid\nmargaret\nama\nimg2081\nhawthorn\nmkg\nroxy\nweb002\nki\nwww.mak\nicpmupdate\nenquetes\nilluminati\nhost101\nbubble\napproval\ndfp\noctans\nwww.uat\nuruguay\neagles\ndistributors\nmail50\nmsl\ntrailers\naks\nimg142\nmarianne\nenjoylife\nnsi\nears\nboomer\nomail\ns157\nfranco\nmysmis\ns159\nmarine\nmicros\ncrafts\ngogle\nholy\nsnowball\nwww.fin\nwebpro\nmx.mse4\nsimply\nkali\nbogdan\nmx.mse3\njules\naddons\nappel\ns173\nreality\nnewt\ntatsumi\nwrestling\nsr3\nun121101224723\nwww.gm\nmx.mse5\nrsync1\nrsync2\nhansa\nwww.cde\nssi\nsssttt\nklara\nsudoku\ndoraemon\ns175\nmx.mse21\nwww51\nbps\nshino\nimg181\nmiyabi\nelk\nmx.cs\nbluerain\nver\nwww.cps\nward\nphoto1\nblacklabel\nwww.people\ntandem\nwebhost2\nabc1\nmail.mse4\nns119\nvirgin\nmail.mse3\npanzer\nvds2\nwww.cv\nrouter11v06.zdv\nwxdatasecure\nsachin\nwws\nrack10u24\nimwxsecure\ntutos\nblade8\ncreater\nxmlsecure\nssl3\nmarktwain\nislamic\nocsweb\nns116\nrtp\necshop\ncorp2\ncure\norigin-api\nisf\nzina\nasr\nv6.staging\njang3572\nmail.mse21\nwww.om\nburn\nwww.wifi\nclickme\nfloor\nmakalu\ncorvette\napi.ext\nbon\nexchbhorl2\nwww.updates\nns115\nns114\ncploginky\nwww.tea\nns113\nhaven\nhilfe\nns109\nns108\ntest.secure\ndarkfire\nns107\nns106\nvpn-uk\nlogging\napi.int\nyd\naugust\ndulich\nmurdock\npeanuts\nautoplataforma\nsalman\ndeb\nsafa\numbriel\nmidian\ncim\nbru\ndesign3\ncploginoh\npmi\nvps11\nfrankfurt\nelaine\nssl4\ndem\npontus\njalal\nmacbeth\ntet\nsupernatural\nmmoem\nwestside\ncp01int\nlinode\nvps103\nblackpearl\nproje\nwww.theme\nqueue\niceland\nvivi\ngdi\nnixon\nesxi04\nicpmdirectory\nemr\nyu\ngif\nredrose\ngti\ncucumber\nsmtp-ha\ndogma\nnewlook\nns83\nmoi\naspera\nwww.projekty\nferi\nnovorossiysk\nonline2\nmail-mobile\nsinsei\nvideochat\nns98\noutside\nhoover\nbiblioteka\neddie\ncsf\nfreeland\nharmonia\nkas\nwww.aaa\ncamera3\nmustafa\npaz\nanalog\nmirkwood\ngeonetwork\ndiddy\nmobile9\nngw\nsounds\nian\nmgs\nhawkingdialinrouterport1\nnewwebmail\njigsaw\nun\nblade13\ncookbook\npal\nwww33\nsven\nlapin\nfargo\nplanb\nelpaso\nwww.lol\nptn\nsmtp.mse21\nmassmail\nfresco\nsooreh\nfraise\nsgp\nnstri\nahwp\nfreeforall\nservicenet\nvicky\nwww.avia\nhip\ndirectories\nkart\nimg06\nparto\nstt\nr0\ndingorio\npeppermint\nmon3\ngio\nwww.threads\nitcenter\nhermes1\nycg\nwww.mir\nturism\nstar3\nwww.turism\nwww.pop\nwww.avto\nbac\nisee\nceline\nsavings\nconquest\nmyth\nbrave\ns185\nrta\nfptest\nsupporter\nsurgery\nexcalibur\nservice4\nmail.mse5\nwww.19\nkenshin\ninnovate\nadms\nrhodes\nwebda\nsting\nwww.cep\nweb156\nsug\npete\nsangsang\nftp10\nnam\nmxm\ndingdong\nwww.25\nwww.logo\nweb151\n93\ns200\npostgre\nftp14\nalvin\nborder-odd.nntp.priv\nbritneyspears\nlancer\nftp15\nwww.kiss\nborder-even.nntp.priv\nddns1\nsalina\nr7\nwww.18\nwww.17\nub\nrecycle\ntest04\nattendance\nsmsgw\nscholarship\ncristina\nabe\nmobile.dev\njoinus\nintermapper\nindi-web130\nnk\n97\ncontract\nwalk\ncoke\nbetaa\ncamera2\nhussain\nmahachkala\nwww.gt\nendeavor\nesales\nsb1\nfreezone\nldaptest\ndns-2\nblacky\ninternetmarketing\necomm1\n59\noneman\nplatypus\nakita\nts17\nsagan\napu\nsuspended\nqms\namigos\ndharma\n95\ntachibana\nbeautiful\nbarton\naladdin\nfinn\ni68\netna\nvmscanus\nvbox\ngfstest\nange\nhall\njerome\ncdo\nmonitoring2\nhsbc\ntemp01\ncweb\ni95\nwww.president\n72\ncharmed\n36\nblog3\nalina\nwww.clasificados\npanasonic\ncsr31.eng\ncar21.net\nbba\nadnan\nwww.coupon\nauk\ncub\nkoyo\nrizzo\nescobar\nwww.murmansk\nstamps\nmoha\nmore\ncristi\nflyers\nsagar\nanger\npeek\nnovokuznetsk\nsecondary\npimp\nmayur\nwww-org\ndigg\nite\nasahi\nwww31\nbackup02\nwww32\nwww36\namaranth\nwww37\nstriker\nbuddha\nextension\nfaceboook\nrise\ncompaq\nintertest\nholding\nwww.penza\nmurdoch\nmypictures\nwww.montana\nhelloworld\ncanna\nswati\nwww.tvonline\ncarlo\nseba\nophelia\nadserv\nkatrina\ni70\ntobi\nwinupdate\nfreetime\nwww.translate\nptrmedia\ntolyatti\ngoran\nthesis\nburns\nreservas\nblend\nocc\nblade11\nrisingsun\nweb5516\nweb3423\nweb3424\nweb3425\nmx06\nweb18328\noman\nweb3426\nweb3427\nweb18327\nweb18770\nweb3430\nweb3422\nweb3431\ninfotec\nweb18326\nweb18325\nweb3421\nweb3432\nweb18324\nweb3433\nweb3434\nweb18323\nweb18322\nwww.salon\nweb3435\ntopgun\nweb3436\nweb18321\nweb44\nweb3437\nweb3438\nweb3440\nweb3420\nsco\nweb18319\nweb3441\nddp\nweb18318\nddl\nweb3442\nweb18317\ninfra2\nweb3443\nweb18316\nweb18315\nweb88\nweb18314\nweb3444\nweb90\nweb3418\nweb3445\nwww.statystyki\nchaitanya\nrf\nweb18313\nweb3446\nweb3417\nweb3447\nweb3448\nweb3416\ncdserver\nweb3450\nstudyabroad\nweb3451\ngreendog\nweb3452\nweb3415\ntomas\nweb3453\nweb3454\nweb3414\nweb18312\nweb3455\nccd\nweb3413\nname1\nweb18311\nkyokushin\nweb18310\nbr1\nweb3412\nweb3456\nweb3411\nweb18298\nweb3457\nws9\nweb18297\nweb3410\nweb3458\nweb18330\nweb3461\nweb3462\nweb18331\ncirce\nweb3463\nweb3408\nweb3464\nweb3407\nsilent\nweb3466\nweb3467\nweb18776\nweb3406\nweb3470\nweb3405\nweb3404\nsupersonic\njudy\nweb3403\nweb3402\nweb3471\nweb3472\nweb3473\nweb3474\nweb3401\nweb3475\nweb3476\nweb3388\ncakes\nweb3477\nweb3387\n73\nweb3478\n92\nweb3480\nweb3386\nweb3481\nweb3482\nweb3483\nmh2\nweb3484\nweb3485\nweb3385\nhinata\nweb3486\nweb3384\nweb3383\nweb18296\nweb3487\nweb3382\ncasas\nseema\nweb18779\nweb18332\nadvancement\nweb3500\nweb18333\nessai\nweb3501\nweb3380\nweb3502\nweb3503\nweb3504\nweb3378\nweb18295\nallstars\nweb3505\nweb18294\nweb18293\nweb3506\nweb3507\nweb3508\nweb3510\nweb3511\nweb3512\nweb3377\nweb18292\nweb3376\nweb3513\nweb3514\nweb3515\nweb3516\nweb3517\nweb3375\nweb18783\nweb3520\nweb3521\nweb18291\nweb3522\nria\nweb3523\nweb3524\nweb3374\nweb3525\nweb18334\nweb3373\nweb3372\nweb3526\ngreenfox\nweb3371\nweb3527\nrms2\nweb3370\nweb3528\nweb3531\nweb3532\nweb3368\nweb18290\nweb3533\nweb3534\nweb18335\nweb3535\nweb3536\nweb18288\nclans\nstudent5\nmgmg\npif\namon\nweb3537\nweb3367\nweb3538\nweb3540\nweb18287\nwww.rd\nweb3541\nweb110\nweb3366\nweb3542\nweb18286\nisi\nweb3543\nchantal\nweb3544\nweb3545\nweb3546\nident\nweb3547\nweb3365\nweb18285\nwww.oasis\nweb18284\nweb3548\nsecure.dev\nweb111\nweb18283\nweb3550\nweb3554\nweb126\nweb18790\nearn\nkeyboard\nweb18791\nwww.oregon\ncrema\nweb18792\ncryo\nwww.prince\nweb18803\nweb18804\ntestonline\nweb18805\nweb3364\nweb18796\nmuzyka\nweb3611\nfaster\nweb3612\nweb3613\nweb3363\nweb3614\nweb18807\nweb3362\nweb3617\nweb18282\nweb3618\nweb18281\nweb18279\nweb3361\nweb18278\nweb3620\nweb18336\nweb3360\nwiki.dev\nweb18759\nweb3621\nweb18808\nweb18277\nforum5\nweb3623\nweb18276\nweb18275\nweb3624\nweb3625\nweb18274\nweb18273\nweb3626\nweb18337\nweb18809\nweb3630\nmetallica\nftp13\nweb3631\nskunk\nweb3632\nweb3633\nweb3634\nweb3635\ndanube\nkylie\nalim\niceberg\nweb3636\nariana\nweb3357\ncae\nweb3637\ntgn\nflo\nweb18338\nweb3638\nweb3640\nzeppelin\nweb3641\nweb18272\nweb3642\nweb3643\natb\ndb9\nweb3644\nweb18271\nweb3645\nccb\nweb3646\nweb3648\nweb3650\nweb3651\nwww.oriflame\nweb3652\nweb3356\nweb3653\nweb3654\nweb3655\nweb18269\nweb18339\ncea\nweb3656\nweb3657\nnsr2\nweb18268\naza\nweb18341\nbrief\nweb3355\nchm\nweb3658\nweb3661\ndiabolo\nweb3662\nweb3354\nweb3353\nweb3352\n03\nweb3663\nagus\nweb3664\nweb3665\nweb3666\nweb3351\nweb3350\nmanta\nweb3667\nweb3668\nweb3670\nweb3671\ndev0\nweb3672\nlongisland\nweb3673\nweb3348\nweb18267\nweb3347\nweb3674\ndet\nweb3346\nweb3675\nweb18342\nweb3345\nweb3676\nweb3344\nweb18266\nweb3677\nweb3678\nweb3680\nweb18265\nweb17080\nelton\nweb18264\ngenome\nweb18263\nwin19\nweb3343\nxgc\nweb3682\ncloud4\nautodiscover-redirect\nweb3683\nweb18262\nemd\nweb3342\nelo\nkcc\nweb18261\nweb3684\nblondie\nweb18259\nmerlot\nweb3685\nweb3341\nisle\nweb3686\nweb3687\nweb18819\nweb3340\nweb3700\nweb3338\nweb3701\nweb3702\nweb3337\nweb3703\nmedu\nweb3704\nweb3336\nweb18258\nweb18257\ngci\nwebdisk.main\nweb3705\nweb18256\nweb3706\nweb3707\nweb18343\nsok\nweb3708\nweb3711\nweb3712\nweb3713\nweb3714\nwmv\nwisdom\nweb3715\nweb3335\nweb3334\nweb18255\nweb3716\nweb3333\nweb3717\npgames\nweb3718\nweb3720\nweb18254\nweb3721\nweb3332\nweb3331\nwww.sss\nnetscape\nweb3722\nweb3723\nweb3328\nautoconfig.main\nweb3724\nweb3725\nweb18253\nweb3726\nweb3327\nweb3727\nweb18252\nweb3728\nweb3731\nqazwsx\nlastchance\nweb3732\nweb3326\nweb3325\nweb3324\nrol\nweb3322\nweb3321\nweb3733\nweb3734\nweb3735\nweb3736\nweb3737\nweb18251\nweb18249\nweb3320\nweb3738\nweb3740\nweb3741\nhofman\nweb3318\nweb3317\nweb3742\ncrunch\nweb3743\nweb3315\nmailgate3\nweb3314\nweb3744\nweb3745\nganges\nweb3746\nthehouse\nweb3747\nns141\nweb3313\nweb3748\nuninews\nweb18248\nweb3750\nweb3752\nweb3312\nskl\nweb3311\nweb18749\nweb18740\ninno\nweb3753\nweb3754\nsae\nweb18344\nweb3755\nbookshop\nweb3756\nweb3757\nweb18247\nweb18729\nweb18720\nweb18246\nweb18716\nwww.solutions\nweb18245\nweb10679\nweb18829\nteste1\nachieve\nmym\nweb18650\nweb3760\nweb3761\nweb3762\nweb3763\nweb18640\nderby\nweb18630\nweb18619\nweb4894\nweb3764\nxi\nweb18244\nweb3765\nweb3766\nweb3767\nweb10669\nweb3768\nuds\nweb3770\nns94\nweb3771\nmississippi\nweb3772\nweb18243\nweb3773\nns89\nweb3774\nkaltura\nns88\nweb3775\nns87\nns86\nweb3776\nns85\nweb3777\nns84\nweb3778\nweb3780\nweb18613\nweb18242\nweb3781\nweb3782\nweb18609\nweb18598\nweb3783\nweb3784\nweb18597\nweb18241\nweb3785\nweb18606\nweb18595\nalcyone\nweb3786\nweb18240\nweb18209\nweb18594\nroamer\nweb18593\nweb18592\nprojet\nweb18238\nweb18591\nweb18237\nwatcher\norz\nweb3787\nweb18236\nweb18235\npip\nweb18234\nweb3788\nweb18345\nweb18600\nweb18580\nweb18346\nweb18569\nweb3801\nweb18563\nweb3802\nsuport\nweb18347\nns93\nweb3803\ntime1\nweb18233\nweb3804\nweb18562\ndurga\nweb3805\nweb18561\nweb3807\nxmlrpc\nweb3808\nweb3810\nweb18559\nweb18557\nweb18348\nweb18232\nweb18231\nweb18556\nweb18555\nweb3811\nweb3812\nwww.dictionary\nwww.campaign\nweb18554\nspr\n38\njoomla25\nweb18229\ngt2\nfcc\nweb18228\nweb3459\nweb18549\nweb18189\nns124\nweb3814\nweb18540\nweb5933\nweb3815\nweb18530\nns118\nweb5932\nweb18520\nweb18509\nothers\nweb18507\nweb3816\nwebnews\nweb18504\nweb3817\ncsd\nweb3818\nweb18503\nweb3820\nweb18502\nweb3821\nweb18350\nwww.sia\nweb3822\nweb18227\nweb3823\nweb3824\nweb18501\nweb3825\nweb3826\nweb18226\nweb16917\nchalet\nweb3827\nweb3939\ncgm\nweb18839\nweb3830\nweb3831\nweb3832\nweb3833\nweb3834\nweb3835\nweb3836\nweb3837\nweb18480\nweb3838\nweb3841\nlucca\nweb3842\nweb18225\nweb6023\nweb5923\nsidon\nweb3843\nweb18470\nweb3844\nweb3845\nmyoffice\nweb18450\nweb3846\nlearn2\nweb18224\nweb3847\nweb6689\nweb18223\nweb3848\nweb5915\nweb3850\nsen\nweb18222\nweb7439\nwww52\nconsultant\nweb18221\nweb18846\nhobart\nweb18430\nvns1\nweb6100\nweb18219\nweb16918\nweb18850\nwww.baby\nweb18420\nweb4000\nweb5924\nweb18218\nslot\nweb4001\nhcc\nweb4002\nweb18217\nds6\nweb4005\nlanka\nweb18216\nweb7409\nweb7407\nweb5898\nweb7396\nweb18215\nds3\nweb7395\nnavarro\nweb4006\nthc\nnata\nweb7394\nweb5897\nweb18214\nweb16919\nweb4007\nweb7391\nweb7376\nserver31\nweb7400\nweb4008\nwww.sys\nweb5896\nweb4011\nweb7385\nwww.chevrolet\nwww.lg\nweb4012\nprogramas\nweb4013\nweb4014\nweb4015\ndarkorbit\nweb4017\nweb18853\nwwe\nweb4020\nafm\nweb5895\netv\nartwork\nweb4021\nweb4022\nweb7379\nweb4024\nweb4025\nweb7378\nweb18213\nweb5894\nweb4026\nweb7446\nweb7369\nweb4027\nwpc\nweb18212\ndrogo\nweb4028\nweb4031\nweb4032\nweb5903\nweb4033\nweb4034\nezadmin\nweb5941\norac\nweb4035\nweb18211\nweb4036\nweb4037\nweb7445\nsyd\nweb18210\nweb4038\nweb5892\nweb4040\nweb6699\nweb7361\nweb4041\nsrl\nweb4042\nweb4043\nweb5891\nblackbird\nweb7357\nweb16921\nweb18349\nweb5890\nweb4044\nds10\nweb18198\nweb4045\nweb4046\ns1012\nweb4047\nweb18197\nweb4048\nweb7352\nweb7350\nweb4050\ngs2\nweb18196\nhost122\nweb4051\nmail.kuku\nweb4052\nag1\nweb4053\nweb18195\nweb18340\nweb4054\nweb7339\nrmc\nweb5886\nweb18329\nimt\nweb4055\nweb4056\nreseller2\nweb5926\nweb18194\nfist\nweb18193\nott\nweb7330\nweb7325\nweb4057\nweb18320\nwebdisk.gmail\nsmm\nweb7323\nweb4060\nweb4061\nweb16922\nweb18192\nanas\norl\ngene\nweb7319\nweb4062\nweb4063\nweb4064\nweb4065\nweb4066\nweb5927\nweb4067\nhost120\nweb7318\nweb4068\nvhost2\nsdm\nweb4070\nweb4071\nimg04\nyy568\nweb4072\nweb7316\nweb4073\nvoyeur\nweb4074\nweb18191\nweb4075\ntwc\nmila\nweb18190\nwww.red\nweb18299\nweb4076\nweb4077\nweb4078\nengels\nweb4080\nweb18308\nweb4081\nweb18307\nweb4082\nweb18306\n666av\nsrp\nweb7311\ntestapp\nweb16923\nweb18305\nweb18188\nweb4084\nweb4085\nweb4086\nweb4088\nldp\nius\nweb4100\nweb5928\ndof\namb\nweb7310\nweb18304\nwww.kh\nsmpp1\nweb16924\nweb18303\nweb18187\nweb4101\nweb4102\nweb4103\neoe\nweb4104\nweb4105\nweb7297\nfatality\nweb18186\ndpt\nvv\nweb18302\nweb4106\nipn\nweb4107\njbc\nweb18185\nexo\nweb18866\nweb6030\ndownload4\nweb4110\nweb7296\nweb18411\nger\nweb18184\nweb4111\nweb18183\nweb18182\nweb18301\nactivity\nweb18181\nweb4112\nepg\nweb4113\nweb4114\nweb4115\nweb7295\nweb4116\nweb4117\nweb4118\nweb18300\nfir\nwww.scc\nweb4120\nedelweiss\nweb7304\nm13\nserver40\nweb18179\nweb18178\nweb4121\nweb4122\nweb7303\nweb18177\nweb4123\nweb5880\ncamaras\nweb18412\nweb18413\nweb7292\nweb4124\nweb4125\nweb18414\nweb4127\nweb7291\nweb7290\nweb18870\nweb4130\nannualreport\nweb3729\nweb18176\njiaowu\nweb5789\nweb18175\ntruyen\nweb4132\ntf1\nweb18415\nkds\nh21\nweb7286\nweb18174\nweb18173\nscd\nweb18416\nkir\nweb18280\nweb7284\nweb7281\nweb7280\nweb4133\nweb4134\nwww.malaysia\n205\nweb18270\nweb18172\nweb7273\nweb7271\nadadmin\nweb7269\nmae\nweb4135\nweb18417\nfreebooks\nweb6696\nweb7266\nktm\ngrd\ncyprus\nweb4136\nweb4137\nweb4138\nrecon\nweb4141\nweb18171\nweb18418\ngore\nweb18260\nweb4142\nvitrine\nhektor\nelijah\narp\nfamous\nweb10719\np6\nweb7260\nweb18170\nweb4143\nweb5873\nany\nweb3959\nweb4144\nweb4145\nweb4146\nweb18168\nweb4147\nckarea\nweb4148\nweb18167\ne-commerce\nweb4150\nweb6095\nmail.yy568\nserver49\nwww.informatica\nmsd\nserver48\nwww.thumbs\nweb18250\nslpda\nweb18166\nfrm\nweb18165\nmail.666av\naic\nweb4429\n1111\nmail.080\npizzahut\nweb7253\nweb10698\nweb18880\nweb7251\nweb6096\nweb7249\nweb10695\nweb4211\nweb4212\njpadult\nweb4213\nweb4214\nmail.jpadult\nweb4215\nweb4216\nweb4217\nwww.orel\nweb4218\nweb18419\nmail.ckarea\nweb10694\nweb4220\nspor\nost\nweb4221\nweb7246\nweb4222\nweb18164\nweb4223\nalpha5\nweb10692\nweb18421\nweb18239\nprd\nwww.memberlite\nweb4224\nweb4225\nweb10691\nweb4226\nweb4227\nweb4228\nweb4230\nweb4231\nesports\nweb5869\nweb18163\nacca\nvolterra\nweb4232\nweb4233\nweb4234\nweb18422\nweb18162\nwww.s4\nweb7242\nvirt\nweb7312\nweb7240\nweb18161\nweb7421\nweb4235\nweb4237\nweb10682\nweb18230\nweb18886\nsgt\nweb7233\nweb4240\nweb4241\nweb18159\nweb4242\nweb4243\nweb7219\n235\nantigo\nweb18158\nweb18157\narsenic\nweb4244\ngallium\nweb7229\nweb4245\nweb18156\nweb18155\nweb7226\nje\nweb5866\nfirefox\nweb4246\nsw5\nweb18423\nhl\nweb18220\nweb10670\nvh1\nweb18424\nweb18154\nweb18153\nweb10668\nweb4247\nweb4248\nweb18152\nwr\nweb3710\nufo\nweb6039\nweb4250\nweb4251\nns201\nweb7220\nwww.tennis\nweb7217\nout1\nns.blog\nweb18199\nrq\nweb18425\nweb4252\nweb18208\nweb7213\nvio\nns161\ndarkside\ndict\nweb18151\nweb18149\ngear\nnalog\nweb18207\nweb18206\nweb18148\ncovers\nweb18147\nweb18146\nweb4253\nweb18145\nweb18205\nzee\nweb4254\nweb18144\nvasco\nweb4255\nweb18204\nweb4256\nweb4257\ncrt\nweb18426\nweb18900\nfrontdoor\nweb4260\nweb-02\nweb18143\nweb18142\ngaspar\nautoconfig.fb\nautodiscover.fb\nweb4261\nweb4262\ndns13\nweb18203\nitec\nweb18427\nweb18428\nweb4263\nweb4264\nweb18202\nweb18201\nweb18891\nweb18141\nweb-01\nweb4266\nness\nwishlist\nweb18200\nweb4267\nweb18139\nautoconfig.lists\nautodiscover.lists\nwebcam2\nsumy\nstudentmail\nweb4419\nlogic\nweb10649\nweb4268\nkfree\nweb4270\nprotector\nweb18138\nweb4271\njuventus\nweb18892\nweb18137\nweb18136\ncentennial\nweb18429\nweb18135\nweb4273\nweb10642\nwww.teacher\ncsj\nweb4274\nautodiscover.student\nweb18431\nwww.inventory\nweb18180\nmac2\nweb4275\nwebclasseur\nweb10639\nnotes1\nweb4276\nweb18432\nweb4277\nclaymore\nweb18903\nthetis\nweb18134\nweb4280\nautodiscover.clients\nweb3698\nnoise\nweb18133\nwww.anime\nautoconfig.clients\nweb4281\nweb18132\nd101\nweb5860\nweb6693\nweb4282\nweb18131\nweb18169\nlibanswers\nweb10629\nweb7399\nweb10622\nweb18129\nniagara\nattach\nmichal\nweb18128\nbanner2\nweb18127\nweb4283\nweb4284\nwww.audio\nmusique\nweb7398\nnamed\nodds\nwebdisk.teste\nweb18126\nweb18894\nnaomi\nredcross\nweb4286\nwww.orange\nweb18125\npaprika\nwww.ajax\nweb4287\nweb4288\nweb4301\nweb18124\nweb18123\nlance\nweb18895\nhahaha\nweb18160\ncalendario\nwww.www3\nknox\nfafa\nweb4303\nweb10619\nweb18121\njquery\nweb4304\nweb4305\nweb18119\nwww.sso\nweb7397\nweb18118\nweb18117\nweb6739\nweb4306\nweb18116\nkokoro\nweb10613\nweb18115\nweb18150\nweb18896\njimbo\nweb18114\ntakumi\nweb4310\nweb3697\nweb3970\nweb4311\nfisip\nweb18113\npdfs\nweb18112\nseptember\nweb4312\nbroadway\nfkip\nweb4313\nweb18140\nweb4399\nunderwear\nnelly\nweb4314\nweb18111\nperfil\nweb17999\nweb7393\nweb17998\nweb18907\nweb17997\nweb4316\nweb4317\nweb17996\nweb17995\npari\nweb18130\nweb5849\nweb17994\nweb4318\nweb4320\nweb17993\narie\nweb7392\nmoran\nweb18122\nallen\nweb4321\nwww.2010\nweb3696\nweb17992\nweb17991\nslide\nmarlboro\nweb18120\norigin-blog\nniche\nweb17990\nweb4395\nleeds\ncomsci\nweb7390\nweb18898\nweb4323\nweb17988\nweb4324\nweb3958\nweb4325\nweb4326\nweb17987\nweb4392\nweb3692\nweb18910\nweb4330\nweb17986\nweb4331\nmascot\nweb4332\nweb4333\nweb17989\nweb18433\nweb17985\nweb17984\nweb4334\nmyphotos\nwww.denver\nweb4335\nweb4336\nweb17983\nweb18434\ngfs\nweb4337\nweb18435\nweb4338\nfortmyers\nctl\nweb4340\nweb17982\nweb4341\nweb17980\nweb4342\nwww.quran\nweb4389\nweb4343\nweb17981\nweb4344\nweb17979\nweb4345\nweb6700\nweb17978\nmodule\nweb17977\nweb4346\ncpl\nwww.rp\nwww.sb\nweb4347\nweb4348\nweb4350\nweb17970\nweb4351\nweb17960\nweb4352\nptr\ndowntown\nweb3999\nweb4899\nweb18436\nweb4353\nweb4354\nwww.focus\nweb4355\nfrederick\nweb4356\nweb17976\nweb4357\nadder\nweb5938\nweb4358\nwww.foros\nlidia\nweb3694\nweb4360\nweb18050\nweb4361\nfgc\nweb17975\nweb18048\nweb18047\nweb18046\ndiffusion\nweb18045\nweb18044\nnsd\nwww.ghost\nweb18437\naukcje\nweb4362\nweb4363\nraki\nweb17974\nweb4364\ncrimson\nwww.glass\nweb17973\nsite5\nrival\nweb17972\nweb17971\nlst\nvtls\nweb4365\nweb4366\ngjc\nweb18043\nweb4367\notc\nriker\nwww.che\nweb17969\npanic\nweb4368\ntallahassee\nweb17968\nweb17967\nweb4370\nweb4371\narcgis\ndocument\nweb4372\nwen\nweb18438\nweb4373\nweb4374\nsurrey\nweb4375\nwww.inter\nres2\nddh\nweb18042\nweb4376\nweb4377\nweb4378\nweb18041\nweb4380\nweb18040\nmyjob\nperiodismo\nwww.livehelp\nwsus2\nbase2\nweb17966\nwww.keith\nweb4381\nweb18038\nubezpieczenia\nwww.ubezpieczenia\nweb18037\nredstone\nweb18440\nweb18036\nweb18035\nweb4382\nweb4383\nweb4384\ndma\nweb18034\nweb18033\nlmc\nweb18032\nweb18031\nhosting4\nweb17929\nweb18028\nweb18027\ns242\nweb18026\nweb18025\nweb17965\nweb17964\nweb17963\ngraffiti\nweb18024\nwww.miami\nweb18023\neu1\nvalidate\nweb18441\nweb4385\nsinger\nseis\nweb18442\nweb5831\nweb18022\nweb18021\nweb17962\nddc\nweb17961\nyalta\nweb4386\njiwei\ntest001\nweb17959\nweb4387\ncs5\ntest111\nwww.digi\nmailserver3\nbabyface\ntest333\narjuna\nweb18019\nweb17958\ngjs\nweb18018\nkalendarz\nehealth\nweb18017\nweb18919\nhicham\nweb4400\nweb5829\nmdc\nweb4401\nweb18016\nabood\nweb17915\nweb4402\nweb17914\ncmcc\nweb18013\nweb18012\nweb4403\nweb18443\nwww.wj\nhikaru\nwww.sn\nduster\nvcm\nwww.mg\nnv\nweb18444\nweb17957\nwebmail.admin\nbuilder.admin\nweb17956\nweb18445\nweb18011\nweb17899\nweb18008\nandorra\nweb18007\nweb4404\nweb18006\nwww.secret\nweb17955\nrodeo\nweb18446\nbrainstorm\nweb18005\nextensions\nbks\nconcorde\nweb4405\npolly\nwww.ve\nweb4406\nweb17954\nweb17953\nweb4407\noutbound1\nweb17952\nweb17951\nweb4408\nporta\nweb18004\nweb4410\nweb18003\nweb18447\nweb18049\nweb4411\nweb4412\npodolsk\nweb18002\nweb4413\nconfirmation\nweb18001\nweb4414\nharley\nweb4415\nwww.nn\ns253\nweb17890\nweb10449\nweb4416\nweb4417\nweb17880\nweb10439\ntivi\nweb10434\nsnr\nweb4418\nweb4420\nweb17870\nmatematika\nzabawki\nweb17948\nweb18448\nfms2\nweb6151\nweb4421\nweb18449\ncptest\nswww\nvle\nweb17947\nweb17946\nwww.zabawki\nweb17945\nweb4422\nweb3691\nweb17860\nweb5819\nweb17944\nweb4423\nweb17943\nweb17850\ncrl1\nweb17942\nweb17941\nweb4424\nweb7359\ninformatika\nkeystone\nweb18039\nweb17938\nweb6850\nmana\nedesign\nweb4425\nweb6149\nweb17840\nbase1\nsla\nweb6843\nweb4426\nweb3792\nweb6842\nwww.cpa\nweb4427\ndoberman\nweb3690\nweb6836\nsexuality\nweb17830\nweb6830\nweb17820\nweb6823\nweb4428\nweb17937\nweb4909\nweb4431\nweb6819\nweb17936\nbebe\nweb17935\nwww.greetings\nwikileaks\nweb6816\nweb5809\npor\nweb4432\nweb4433\nrevelation\nweb4434\nweb4435\nprecious\nautoconfig.web\nweb4436\nweb4437\nweb5937\nweb3688\nweb18451\nweb6809\nweb4438\nweb17934\nwm3\nzing\nweb6798\nquetzal\nweb4440\nweb6797\nweb5798\nweb4441\nweb4442\nweb18452\nweb6796\nweb4443\nweb4444\nweb17933\nweb4445\nautodiscover.web\nweb17932\nex2\nweb17931\nweb17930\nweb6795\nstages\nniko\nwww.vologda\nweb4446\nweb4447\nweb17928\nweb6794\nweb18453\nweb6803\nkatana\nhippo\nweb4448\nweb17927\nweb6792\nweb5797\nksu\nweb6791\nweb4450\nweb18929\nwww.onlinegames\nweb5899\nweb17926\nsh4\nweb17925\nwarm\nweb17924\nweb18454\nweb7349\ngorilla\nweb18455\nweb18456\nweb6790\nweb5796\nweb6780\nwww.songs\nweb17923\nweb18457\nweb18458\nweb5794\nweb6773\nweb4511\nweb17922\ninventario\nws191\nweb4512\nweb5239\nws182\nws201\nweb4513\nweb6769\nweb5793\nweb6768\nws102\nws101\nyogi\nweb6766\nws192\nkodak\nweb18460\nc0\nvive\nweb4349\nweb4514\nweb18461\nweb5792\nweb6760\nrondo\nnetsys\ncombo\nweb4515\nweb4516\nmychart\nweb5791\nweb4517\nweb18462\nvisualbasic\nweb17750\nbbt\nweb5949\nweb6753\nshady\nparkour\nweb17921\nweb18463\nhiho\nrooms\nweb5790\nweb4518\nwww.indonesia\nweb18464\nweb18020\nweb4520\nweb4521\nweb17918\nweb4522\nweb6749\nftpweb\nweb4523\nholidayoffer\nweb17917\nweb4524\nweb18465\nweb6746\nweb18466\nqt\nweb4525\nweb4526\nsmtp.out\nweb4527\nweb18939\nweb17916\nweb17740\nweb6743\nweb4530\nweb6740\nweb4531\nweb4532\nwww.weather\ntehran\nweb17030\nweb17730\nweb6729\nweb4533\nweb4534\nweb18467\nweb18015\nweb17949\nweb4535\nweb18014\nweb6726\nmemories\nweb17720\nweb4536\ndic\nmailmx2\nmailmx1\nweb4537\nweb6720\nweb4538\nfpa\nweb17699\nweb4339\nweb17913\nweb4540\nweb17912\nweb4541\nweb17911\nweb6713\nweb4542\nsly\nweb4543\nweb4544\nweb17910\nweb17707\nweb17706\nweb4545\nsmtp15\nweb4546\nweb4547\nweb17705\njgxy\nweb4548\nweb6709\nweb4550\nweb17898\nphp54\nweb4551\nfe2\nweb17907\nweb4552\nweb4553\nweb17906\nweb17704\nweb6698\nalles\nweb18468\nweb17703\nweb6697\nweb17702\nweb4554\nweb17905\nmanufacturing\nrevistas\nweb17904\nweb18469\nnasc\nweb17893\ntvr\nwww.mall\nweb4555\nletsgo\nweb6706\nweb4556\nweb4557\nswap\nweb4558\nweb17701\nwww.daniel\nweb6695\nsecurity2\nweb4561\nweb4562\nweb17690\nsagitta\nweb6694\nweb4563\ncamus\nweb18471\nweb4564\nweb6703\nweb6692\nita\nweb17892\nweb4565\nweb4567\nweb6691\nweb4568\nbrowse\nweb4570\nweb18909\nweb4571\nweb4572\nweb4574\nweb4575\ntiga\nweb4576\nbetablog\nweb4577\nweb17680\nweb17891\nweb4578\nweb4581\nweb4582\ntetra\nweb17900\nweb4583\ntraders\nsrt\nweb6683\nweb7329\nsklep2\nweb4584\notaku\nweb17888\nweb17887\nweb17886\nvm11\nweb4585\nweb4587\nweb17885\ndev02\nweb6416\nweb6679\nweb18949\nweb4600\nweb17884\nmasoud\ntmn\ns74\nwww.yes\ns72\nweb6676\nweb17883\nweb17669\nweb6670\nweb17939\nnms2\nsoto\nweb17882\nnir\nwww.men\nweb17881\nweb17660\nciscoworks\nweb6663\nricette\nweb17879\ngraduation\nwww.upgrade\nweb4601\ns65\nvds22\nweb6659\nteck\nweb17878\nyearbook\nweb17649\nweb17877\nweb17876\nqwertyuiop\nweb4602\nweb4329\nweb5936\nweb17875\nweb6650\nuslugi\nkeitai\npixels\nweb4604\nsisa\nweb4605\nlars\nweb17874\nweb4328\nfacts\nrdb\nweb17873\nweb17872\nweb4606\nfsa\nanaconda\nstack\nweb17871\nsire\nweb4607\nweb4608\nweb4611\nweb4612\nexile\nweb4613\nweb17869\ngallery2\nweb4614\nh120\nweb4615\nweb4617\nweb17868\nweb17867\nweb17866\nweb4618\nweb4620\nweb18472\nweb17865\nweb17640\nweb6644\nweb6643\nadminpc\nweb18473\nweb4327\nweb6639\nweb17864\ntestvps\nweb17863\nweb4621\nweb17862\nweb17861\njaime\nweb4622\nshane\nweb6636\nnnm\nweb4624\nweb17630\nseat\ncpnew\nkmm\nunplugged\nweb6630\nweb17620\nweb6623\nswamp\njury\nweb4626\nweb18030\nchacha\nweb4627\nweb4322\nriza\nweb17599\nwww.player\nweb18474\nsondage\nwww.agora\nweb4628\npolycom1\nweb17859\nweb18475\nq2\nweb4631\nweb17608\nweb17607\nweb4632\no1\nweb17606\nweb17605\nweb17604\nweb4633\nweb17858\nredirector\nweb17857\nweb17856\nzeit\nantigua\nfroggy\necp\nlarch\nweb17603\nweb18476\nnaoki\nvs4\nweb17602\nbluesea\nweb4634\nklaus\nweb17855\nwww.ben\nweb17854\nvpn-test\nweb4635\nchromium\nweb17601\nweb18477\nweb4636\nweb4637\nweb17590\nweb17853\nweb4638\nestates\nweb17852\nweb17851\nweb17849\nweb17848\nweb4319\nzia\nweb18478\nhost41\nweb17847\nweb17846\nweb18479\nweb4641\nriad\nvertex\nweb3681\nweb17580\nweb17845\nweb7429\nweb17844\nweb17843\nweb17570\nweb4642\nweb4643\nfileproxy\nwww.entertainment\nweb17842\ndce\nrana\nremote1\nweb4315\nweb7309\nweb17560\npaola\nnutri\nweb17841\nweb4644\nprinter2\nweb17839\nweb17838\nmdb\nweb7298\nweb4645\nfunzone\nweb17837\nweb17836\nweb4599\nweb17835\nweb4647\nweb17834\nweb3679\nweb17550\nxmlfeed\nweb4648\nweb17833\nf11\nweb4650\nweb6043\ncamera1\nweb17832\nnozaki\nweb4651\nweb4652\nweb4653\nst01\nweb4654\nweb4655\ntpe\nweb6549\nweb17540\nweb4656\nweb17831\nrumba\nmessagerie\nweb4657\nweb4309\nweb7294\nwww.painel\nyamada\nweb18481\nweb4658\nbill2\nwebmail5\nwebdisk.drupal\nautoresponder\nweb18482\nweb4660\nsoledad\nweb18483\nnetserv1\nweb6539\nweb4661\nweb4308\nweb4662\nweb17829\nns.math\nweb17828\nweb17827\nweb18484\ntracks\ncisco1\nashi\nd16\nwww.tours\nsf2\nweb17826\nweb4663\nd15\nweb7293\nweb4664\nweb4665\nd14\nd13\nd12\nd11\nwww.amazon\nweb4666\ncesar\nrandall\nweb4667\nterri\nweb17530\nweb4668\nalmaty\nmab\ncameron\nweb4670\ncalipso\nweb3790\nweb4671\nweb18485\npostbox\npap\nnord\ntls\nweb17825\nweb4672\nweb4673\nweb18486\nweb4674\nweb17824\nweb18487\nweb4675\nweb18488\nmeganet\nweb4307\ntomita\nweb18489\nweb4676\nweb17823\nwww.dj\nweb17822\nweb4677\nwebdisk.magento\nweb4678\nweb4680\ntest55\nweb6530\ntsubasa\nweb4681\nweb4682\nsprint\nweb4296\nweb17821\nweb17819\nweb4684\nweb4685\novs\nweb4686\nbcp\nrehab\nweb17520\ncomodo\nweb17818\ntierra\nwww.lite\nwww.bulk\nweb4687\nsmbc\nbabe\nbada\nweb4295\nweb4688\nc12\nweb17817\nweb4294\nweb18491\nwww.silver\nweb4293\nweb17816\nweb4701\nweb6509\nweb18009\nweb4702\nweb4703\nrosebud\namor\nweb6498\nweb6497\nweb18492\nweb18493\nweb6496\nweb4704\nweb17815\nweb17814\nchin\nweb6495\nweb4705\nweb4706\nwww.mo\ndaybyday\nweb17813\nweb4707\nweb4302\nweb5935\nwww.antiques\nweb4708\nweb17812\nweb6494\nweb18494\nweb4710\nbaito\nsunpower\nweb17811\nweb17908\nwraith\nweb6493\nweb5199\nweb4029\nsite4\nweb6492\ncliente\nweb6491\nnaboo\nmon1\nweb17749\nweb4711\nweb4712\nweb6500\nweb17748\nweb17747\nnaps\nspl\ntoaster\nogre\nweb17746\nweb3949\nmimo\nweb17745\nmica\nhayato\niproxy1\nweb17744\nweb17897\nppi\notr\nweb17743\nweb4714\nhispania\nitnet\nweb17742\nweb4715\nweb6485\nwww.torun\ngame5\nweb17741\nweb4716\nweb4300\nwebdisk.dating\nweb17739\nweb18495\nquentin\nweb4717\nobmen\nuniversum\nweb17738\nweb17896\njulian\nweb18496\nweb17737\nweb18497\ndogbert\nweb17736\nweb4718\nweb4720\nweb4721\nweb17735\ncdms\nweb6479\njns\nmiller\nplesk1\nweb4722\nweb17895\nweb17894\nwww.tube\nweb4723\nweb4724\nweb18498\nwww-backup\nkolo\ntriple\nlibopac\nweb6469\nweb17734\nweb17733\nroza\nweb17732\ncoin\ncome\nweb17731\nmag1\ncoms\nweb4725\nweb4726\nweb16940\nlantern\nhappytime\nmailmaster\nweb4893\nnsmaster\nweb18511\nweb17903\nweb4285\nweb4727\nweb17902\ndiva\nweb17729\nwww.example\nwpdemo\nweb6459\nb22\nweb17901\nsona\nwriter\nweb4728\nweb17728\nweb6449\nweb18512\nweb17727\nweb4730\nmmk\nweb4731\nimaging\nkerr\nweb4732\nweb18000\nfe01\nweb6439\nweb4733\nseller\nweb6438\nweb4734\nweb4735\ntaichi\nmighty\nweb7275\ne5\nweb18513\nindira\nwww.technology\na9\nweb4736\nweb3758\nweb4737\nweb4738\nweb4279\nweb4740\nweb6669\nolya\nweb17726\nweb4690\nmidget\nweb4741\nweb4278\nweb4692\nweb6049\nweb4742\nadsrv\nweb17725\nweb4292\nweb4744\nweb3759\noleg\nweb4745\nremove\nweb4900\nweb4746\nweb4747\nweb17724\nweb17723\nweb4939\nweb17722\nweb7389\nweb3969\npancho\nweb17721\nweb4713\nweb6409\nvsa\nweb6398\nweb17719\nweb17718\nrelay01\nweb5919\nweb3489\nnippon\nweb6397\nweb6430\nweb6396\nweb4719\nrelay02\nweb18514\nweb4748\nweb4750\nweb4099\nwww.herbalife\nweb6394\nweb5279\nhash\nweb17717\nwww.time\nweb17716\nweb5945\nweb17715\ngman\nweb4812\nrailway\nfai\nweb17714\nweb4813\nweb4814\nweb4815\nweb4816\nweb17713\ngong\nweb4817\nweb4818\nweb4820\nweb4821\nhide\nhumanresources\nweb4822\nweb4823\nweb4824\nweb6393\nweb10699\nweb4219\nhist\nweb4825\nweb4827\nsoi\nshredder\nmuzika\nweb4828\nweb4831\nweb4832\nweb4833\nweb4834\nzvezda\nweb4835\nweb5950\nweb4836\nweb17712\nhola\nfed\ngip\nweb18515\nweb4837\nweb4838\nweb6390\nweb4840\nyoucef\nweb17711\nweb4841\nweb4842\nweb4843\nduma\njain\nweb18439\nweb4272\nftp02\nweb4844\nweb4890\nweb4845\nradikal\nweb4846\nweb17029\nweb4847\nweb17710\nweb3929\nlori\nraymond\nweb17698\nweb4848\nweb17909\nweb4850\nweb4269\n211\nweb4829\nweb6360\nlizard\nweb4851\nweb4852\nweb6099\nweb17697\nforum-test\nweb4853\nweb17696\nweb5946\nweb4854\nweb4855\nweb4856\nweb4857\nweb6489\nweb3399\nweb4858\nweb4860\nweb4861\nweb4862\nweb4863\nweb6349\nweb4864\nweb17009\nkari\nweb4865\nweb4098\nweb4866\nweb4867\nweb5934\nweb18516\nweb4868\nweb4920\nweb6339\nasterisk1\nmydomain\npkm\nwww.cart\nweb4870\nk1\nweb4871\nweb4872\nlazy\nweb6329\nweb4873\njune\nweb4874\nweb17695\nalberto\nweb16911\nweb17694\nweb17693\nweb16912\nweb18517\nquack\nweb4259\nweb16913\nweb4875\nkepegawaian\nweb4258\nkoti\nweb5920\nweb4876\nweb16914\nweb16915\nweb5299\nweb4877\nweb4878\nd37\nd36\nweb17016\nwww.cool\nweb4906\nweb4880\nd34\nlimo\nd32\nswitch3\nweb4881\nd31\nmale\nweb7299\nweb18459\nweb6129\nweb17692\npersona\nweb3769\nweb4882\nweb4883\nweb4884\nweb3669\nweb17691\nweb4885\nweb4949\nweb4886\nweb17700\nweb4887\nmaze\nweb4888\nweb5001\nweb17688\nweb18800\nkuma\nweb5002\nweb4249\nweb17687\nweb5003\nwebdisk.team\nweb5004\nweb5005\nspruce\nweb6391\nweb5007\nmess\nshooter\npubliker\nweb5008\nkyle\nserver08\nzabbix2\nweb6249\nvisions\nsw4\nweb17103\nweb5010\nwww.kz\nweb5011\nweb17686\nweb17019\nweb5012\nmiku\nweb17685\nweb5013\nweb100000\nweb5014\nweb5015\nweb5016\nmiso\nweb5017\nweb5018\nweb7239\nswanson\ncomposite\nmonika\nweb17684\ncarnival\nweb6239\nweb100001\nweb5020\nweb5021\nweb100002\nweb5022\nwww.test6\nweb5023\nweb5024\nweb5025\nweb5026\ncpd\naukro\nbullet\nweb18518\nweb6230\nweb17683\nde1\nweb5027\nweb5028\nrosie\nweb4039\nweb5030\nmaximum\nican\nweb5031\nmohsen\nweb5032\nweb17682\nweb5033\nweb18519\nweb18521\nweb4239\nweb17681\nweb5034\nweb5035\ntunisia\nsidious\nweb17679\nweb5036\nweb18522\nweb5037\nweb17678\nweb5038\nweb5040\nweb5041\nworkfromhome\ncw01host9\ncw01host8\nweb17677\nweb17676\nnathan\ncw01host7\nweb17675\nweb5042\nweb5323\nweb5043\nweb5044\nweb17674\nweb5045\nweb17673\nweb5046\nweb3329\nglad\nweb5047\nretailer\nweb5048\nweb5050\nweb5729\nweb4951\nweb4952\nweb4953\nweb17672\nweb4954\nweb4955\nweb17671\nweb4956\nweb4957\nweb4958\nweb16925\nweb4962\nforu\nweb4963\nlow\nweb4964\nweb17670\nweb4965\nnore\nxo\nweb17668\nweb4966\nprogramming\nmx00\nichi\nrapids\nmpi\npana\nweb16926\napp9\nweb4967\nweb4968\nweb16927\nweb17667\nweb17666\nweb17665\nweb4970\nchihiro\nweb16928\nweb17664\nweb17663\ngunther\nweb16930\ncw01host6\nshemale\nweb4971\nweb17662\nweb4972\nweb4973\nweb4974\ncw01host5\nweb4975\nweb4976\nweb4977\nweb17661\nweb4978\nmeetme\ncw01host4\nweb4980\nweb18523\nweb4981\nmegara\nweb4982\nweb4983\nbeta.admin\nweb4984\nwww.profesionales\ncw01host3\nweb3499\nweb17659\nweb18524\nweb4985\nnumbers\nweb16931\nweb5859\nweb3799\nweb4987\nweb4990\ncw01host2\nweb16932\nweb18525\nautoconfig.joomla\nwarriors\nautodiscover.joomla\nwushu\nweb16933\npola\nweb16934\npreview1\nminus\nweb4991\nprivat\nweb16935\ncw01host1\nradio2\nireland\nweb17089\nweb4993\npull\nweb6209\nbeekeeping\nweb4994\npobeda\nweb4995\nbenz\ncost\nweb17658\nweb17657\nzhang\nweb4996\ndeva\nrt1\nweb18526\nweb18527\nweb17656\nthanh\ndominio\nweb4997\nweb6198\nphilips\nweb4998\nweb4999\nweb5111\nweb5112\nweb17655\nweb17036\nweb5113\nweb18528\nweb3709\nweb16937\nweb18529\nogame\nweb17654\nweb18531\nyasin\nweb17653\npopmail\nweb17652\nweb5114\nweb16938\nweb5115\nweb5116\nweb5117\nweb5118\nweb5120\nweb4238\nweb17040\nweb5121\nweb6197\nweb5122\nweb16941\nweb16942\nweb6196\nweb6194\nweb16943\nweb5123\nweb6193\ndevils\nwww.ch\nweb5124\nweb5125\nweb5126\nweb6191\nweb5127\nweb6190\nweb17651\nweb17650\nweb5128\nweb5131\nmarino\nweb5132\nweb5133\nweb5589\nweb5134\nweb5135\nweb5136\nweb5137\ntma\nns.test\nweb17648\nweb5138\nweb5140\nweb5141\nweb4236\nweb5142\nweb16944\nweb6180\nweb5143\nweb5144\nweb6173\nweb5145\nweb17647\nweb5146\nweb5147\nweb5148\nweb5150\nweb5151\nweb6169\nfinal\nnadya\nweb17646\nweb6167\nweb5152\nweb5153\nwww.mi\nweb5154\nweb5155\nweb5156\ngus\nweb16945\nweb16946\ncombat\nweb5157\nweb5158\nroeder\nweb4579\nweb17645\nweb18490\nweb6160\nweb5161\nweb16947\ntowa\nweb17039\nweb17150\nweb17644\nweb5162\nweb17643\ncallpilot\nweb5163\nlp4\nweb5164\nmailto\nweb17642\nweb5165\nweb5166\npostman\nfriendly\nweb5167\nweb5168\nweb5170\nweb5591\nweb5171\nweb5172\nweb4229\nweb18532\nweb5173\nweb5174\nweb16950\nzona\nweb5175\nweb5176\nweb5177\ntopdog\nweb16951\nweb16952\nweb18505\nweb18506\nweb4299\nweb17139\nweb5178\nweb17641\nweb6139\nweb5180\nweb17129\nweb6131\nweb17639\nvital\nmyplace\nvermeer\nweb4922\nweb5181\nweb5182\npalmsprings\nweb5184\nweb5185\nweb16954\nweb17119\nweb17638\nboost\nweb5329\nweb18508\nweb5186\nweb5187\nscream\nwoow\nweb17637\nweb5188\nwww.torrent\nweb5201\nweb18950\nweb17636\nweb18948\nweb5202\nweb18947\nweb16956\nweb5203\na01\nweb18946\nweb3349\nweb5204\nweb5205\nweb5206\nweb18945\nweb5207\nweb5208\nweb5210\nweb5211\nweb18944\nweb5212\nweb5213\nweb18533\nweb5214\nwww.bi\nweb18510\nnick2\nweb18943\nweb16957\nweb5215\nweb16958\nweb17635\nweb17634\nweb18942\nweb17060\nweb18941\nweb5216\nweb16961\nweb17633\nweb17632\nweb3359\nweb5217\nweb17631\nweb3779\nweb17629\ntiamo\nweb5218\nweb7419\nweb5220\nweb5221\nweb17069\nweb17072\nweb18534\nweb5222\nweb18940\nbackupserver\nweb18938\nhihihi\nttk\nweb18937\nweb16974\nweb4819\nwww.mega\nweb16995\nweb5223\nbuck\ndex\nweb16975\nweb16976\nweb5224\nbestway\nweb5225\nweb18936\nweb3369\nadvertisement\nptest\nstar7\nweb16977\nweb18935\nprod1\nsyzx\nweb18934\nweb17628\nweb5226\nweb5227\nmonitoreo\nyellowstone\nweb18933\nweb5228\nweb18932\ndemo17\nnewstest\ndemo21\nweb17627\nweb18535\nweb18931\nweb16978\nweb5230\nweb5231\nweb5195\nmarius\nweb17626\nweb5232\nhadi\nwww.boutique\nweb5233\narslan\nweb17079\nweb5234\nweb18930\nweb4826\nfullhouse\nweb17625\nwww.all\nweb5235\nweb5236\nironport1\nweb5237\nweb18928\nweb18927\nweb5238\nweb6369\nweb17624\nweb16984\nweb5241\nbeta4\nrusty\nweb18536\nweb16985\nrod\nweb18926\nweb5242\norigin.m\nweb18925\nweb18924\nweb18537\nweb5243\noldadmin\nsite3\nweb5244\nshaka\nweb16986\nhecate\nweb5245\nweb5246\nweb17623\nweb5247\nweb5248\n192\nweb5250\nhptest\nweb5251\nweb5252\nweb18923\nweb5253\nweb5254\nweb3379\nweb18500\nmystyle\nweb17622\nwww.cod\nweb5255\ncheckmate\nweb5256\nweb16987\nweb3381\nweb18538\nweb5257\nweb5258\nse3\nweb18289\nweb16988\nweb18539\nweb5262\nweb3739\nweb5264\nsheldon\nweb5265\nweb5267\nweb18922\nweb18921\nweb5268\nweb5270\nautoconfig.api\nweb18920\nsajan\nweb5271\nweb17090\nnotifications\nweb5272\nweb5274\nweb18918\nweb5275\nweb18917\nweb18916\nweb5276\nweb5277\nweb17621\nautodiscover.api\nweb5278\nweb5281\nweb17619\npkd\nweb5282\nweb17101\nweb5283\nweb5019\nweb17618\nkon\nweb5285\nweb5287\nweb5419\nweb5288\nweb5301\nskills\nweb16992\nweb5302\nweb18915\nweb18541\nkoa\nweb18914\nweb17617\nweb5304\nweb18913\nweb5305\nweb18542\nautodiscover.testing\nweb6379\npolitik\ncomunity\nweb5306\nsqlserver\nweb17616\nautoconfig.testing\nweb18912\nweb5307\nimmortal\nweb5308\nweb16948\nweb18911\nweb17093\nweb17110\nweb6779\nweb17615\nweb17614\nweb5311\nweb18908\nweb17613\nweb17612\nmall1\ncasting\nweb5312\nweb5313\nwww.contest\nweb5314\nweb5315\nweb5317\nweb5318\nweb17611\nweb17609\nweb18897\nweb5320\nweb5321\nwww.sync\nweb18906\nweb5324\nweb17094\nweb5325\ngo4it\nweb18905\ns240\nzcgl\nweb5326\nslave1\nosama\nweb5327\nlayout\nweb18904\nwsa\nomkar\nweb5328\nweb5331\npatel\nweb5332\nsalim\nweb5333\nweb18543\nweb5334\nweb4839\nweb5335\nbasel\nweb5336\ndei\nweb5338\nweb17598\nweb5340\nweb18893\nweb5341\nwww.models\nnoe\nweb5342\nwanderer\nweb18544\nweb17597\nvidyo\nweb5343\nweb17596\nweb17105\nweb17595\nweb17594\nweb5344\nweb17593\nweb5345\nweb18902\nweb17592\nweb5346\nweb18901\nparaguay\nlicense1\narrow\nweb18889\nweb17591\nweb5347\nweb17589\nweb18888\nweb5348\nweb18887\nweb17588\nweb17587\nweb5350\nweb3693\nweb17106\nweb3400\nweb16997\nweb17586\nbad\nfortran\nweb4586\nweb5411\nweb17107\nweb18885\nweb18884\nweb3391\nweb18883\nweb5412\nweb5413\npse\nweb5414\nweb17585\nweb5415\ntin\nweb18882\nweb18881\nweb17050\nweb17108\nb99\nnecro\nweb18879\nweb18878\nweb17584\nweb18877\nweb5416\nweb17583\nheadhunter\nweb5417\nweb18876\nweb5420\nweb5421\nweb5422\nborabora\nweb5423\nweb5424\nweb3392\nweb5425\nwww.nnov\nweb5426\nweb17582\nweb3439\nweb5427\nweb17099\nweb5428\nweb5430\nweb5431\nweb17581\nweb5432\nweb3393\napteka\nrector\npegas\nweb3394\nliebe\nweb5433\nweb5434\nweb5435\nweb17579\nweb5436\nweb17578\nweb5437\nweb6389\nweb3395\nkapital\nweb16996\nweb5438\nweb17577\nlolol\nweb5440\nweb3396\nweb18875\nweb5441\nclubhouse\nweb5442\nkraft\nweb5443\nweb18874\nweb5444\nweb18873\njxcg\nweb6392\nweb5445\nweb17576\nweb4849\nweb5446\nwindow\nklimt\nweb3397\nweb5447\nweb17575\nmur\ndsi\nweb5448\ndedicado\nweb17574\nwww.mail1\nweb5450\nweb18545\nweb18872\nweb5451\nweb18871\nweb5452\nweb3398\nweb5453\nweb5454\nmarly\nweb17573\ncrayon\nweb13129\nweb18546\ngoodfeel\nweb18869\nweb17572\nkuban\nweb5455\nweb18868\nsanctuary\nbaloo\nweb6519\nweb3409\nweb18560\nweb6395\nweb5456\nweb5457\nbsd1\nweb17571\nweb5458\nweb13139\nweb10690\nweb17569\nweb5461\nweb17568\nmedium\nweb5462\nweb5463\nweb13149\nweb5464\nweb5465\nmayor\nweb5466\nlucky7\nzlatoust\nweb5467\nweb18867\nweb13152\nweb17567\nweb17104\nwin21\nweb13157\nweb5468\nweb5470\nweb5471\npsms\ntorun\nweb5473\nweb5474\nevergreen\nleila\nyume\ncuda\nmaher\nweb13159\nweb18865\nweb5475\nweb17566\noe\nweb5476\nweb5477\nweb6399\nsalama\nweb5478\nweb18864\nweb17565\nweb18863\nweb5480\nweb5481\nlimon\ngaga\nweb18862\nwww.america\nlibre\nlithuania\nweb13163\nsancho\nwww.saransk\nonelove\nweb17564\nweb5482\nwww.quotes\nweb17563\nweb3990\nweb17562\nweb5483\njumbo\nweb5484\njulio\nweb13168\nmetamorphosis\nweb5485\nkhalil\nweb5486\nweb5487\nweb13169\nweb5488\nparanoia\nkhaled\nbigdog\nweb5500\nweb7428\nweb18547\nweb4589\nweb5502\nweb4859\nweb5503\nweb13179\nweb13182\nweb3419\nweb5504\nmaven\nweb5505\nweb3800\nweb13190\nweb18548\nweb5506\nweb5507\nweb17561\nweb18861\nopenemm\nweb5508\nweb18550\nbilal\nweb17559\nnicaragua\nweb5510\ntif\nweb18860\nweb17558\nweb5511\nweb13191\nlcc\nadmini\nding\nweb5512\nweb13192\nmcb\nweb5513\nweb13193\nweb5514\nweb5515\nweb17557\nweb13194\njolly\nweb18858\nissam\nartis\nweb5517\nweb17556\nweb13195\nweb17555\nweb13196\nalisa\nweb5518\nredtube\nweb18857\ncolgate\nweb13197\nweb5520\ndemocracy\nweb13198\nweb13209\nplesk2\nweb18856\nweb18855\nweb13212\nweb5521\nweb18551\nweb5522\nweb13213\nliliana\nweb5523\nbookman\nvf\nweb5524\nweb13216\nweb13217\nweb5525\nweb5526\nweb5527\nweb17554\nweb17553\nweb17552\nweb13219\nweb6419\nweb13229\nweb5912\nweb5528\nweb18854\ngrants\nweb5531\nweb4869\nweb10693\nweb13238\nweb5532\nweb5533\nweb5534\nweb3428\nweb13239\nweb17551\nc10\nzoot\nweb4289\nweb3989\nweb3429\nweb5535\nweb13245\nripley\nweb5536\nweb5537\nrockon\nweb5538\nrawan\nweb17092\nweb13250\nweb3529\nweb4699\nrasta\nweb5540\nweb5541\nweb5799\nweb5542\nonlineworld\nweb17549\nweb17548\nweb5879\nweb5543\nweb4879\njimo\nweb5544\nweb5545\nstaging.shop\nns129\nweb5546\nweb18552\nrogers\nweb5547\nweb5548\nrodrigo\nweb18499\nweb18589\nweb17547\nweb3794\nns128\nweb17546\nweb18553\nweb10696\nepage\nweb6789\nweb5550\nweb18558\nns126\nns125\nweb5551\nweb5552\nweb5553\nweb5554\ntemporal\njamie\nweb5000\nweb3795\nterence\nweb18564\nweb4901\nweb4902\nweb5555\ntecnica\nweb17545\nweb3449\njamal\ntesting123\nweb5556\nweb10697\nwww.california\nweb5557\nweb18599\nweb4903\nweb5558\nweb16960\nweb5560\nweb4904\nweb16949\nweb4889\nweb4905\nwww.tlc\nweb5006\nweb4907\nigloo\nweb4908\ndreamland\nhosam\nweb17544\nweb4911\nweb4897\nweb4912\nweb5561\nasdfghjkl\ndevsecure\nprize\nweb3460\nweb5562\nweb18565\nweb4913\nweb16998\nweb17543\nmerpati\nweb4914\nweb5563\nweb5564\nweb5565\nweb6457\nadmin6\ngca\nperso\nweb4915\nweb17542\nweb17541\nweb5566\nweb4592\nweb6793\nweb17539\nweb17538\nweb5568\nendymion\nweb4916\nweb4917\nfunky\nweb5572\nwebdisk.photos\nweb5573\nweb5574\nweb17537\nweb3465\nweb18566\ndns03\nsawyer\nweb5575\nweb5576\nweb5577\nweb4918\nweb4921\nweb3468\nweb3469\nweb5578\nharis\nweb3809\nvideocenter\nmoncompte\nweb4896\nweb5580\nweb6429\nracktables\nredondo\nweb17536\nweb17535\nweb3479\nisidore\nweb18567\nweb18639\nweb17534\nweb5581\nweb17533\npradeep\nshouji\nweb5909\nweb4935\nweb5889\nweb5582\nweb5583\nweb4940\nweb5584\ndock\nweb5585\nweb3488\nvps106\nweb10715\nweb7443\nmagenta\nweb3490\nnakamura\ngadmin\nhabbo\nweb3930\nweb5586\nweb3491\nweb5587\nweb5588\ntraffic2\nweb3492\nspambox\nchaotic\n2006\nweb3493\nntv\nweb18309\nweb17532\nforte\nweb5602\nweb5603\nweb3494\nweb5604\nweb6490\nweb3660\nweb18568\nweb18570\nvps115\nweb5605\nweb5606\nisabel\nfile01\nweb5607\nweb3496\nweb5608\nweb5610\nweb4593\nweb5612\nweb6799\nweb5613\nlacoste\nweb5614\neidos\nweb17531\nwww.public\nweb4950\naccelerator\nweb3497\nweb5615\nweb5616\nweb5617\nweb3498\nweb5618\nweb5620\nweb17529\nweb10689\ninlove\nweb3509\nweb5622\nod\nweb5623\nweb5624\nweb5625\nweb5893\nfilex\nweb5626\ncw07web01\nvps108\nweb6499\nweb4959\nweb5627\nweb3518\nweb5628\nweb6759\nweb5630\nweb5631\nmohamed\nweb3519\nelegance\nweb3998\nweb5632\nwebalbum\nweb5633\nweb6520\nweb3530\nweb3819\ncpanel3\nweb6059\nweb18571\nweb7449\nweb18572\nweb6529\nweb18789\nmelinda\nsimpletest\nproxy02\nweb3979\nweb5634\nweb5635\nweb3539\nweb4895\nweb5259\nweb3549\nweb5637\nweb5910\nweb5638\nweb5911\nweb4992\nweb5942\nweb5795\nweb6839\nweb5640\nweb5913\nweb5929\nprove\nweb5641\nweb5642\nhangout\nweb5643\nweb18852\ndarkman\nweb16980\nrefresh\nweb5644\nweb5645\nweb17920\nweb5646\nweb5647\nweb5648\nweb5914\n209\nweb5119\nsatan\nangie\nweb6119\nweb5650\nweb18730\nweb4595\nweb5711\nweb7289\nweb5712\nannex\nweb10729\nweb5713\nweb17889\nweb5714\nweb5715\nweb5716\nweb5717\nweb4139\nweb17528\nweb5718\nweb5720\nbauhaus\nweb5721\nweb5722\nweb6016\nrudolf\nweb5129\nweb5723\nweb5724\nweb5725\nweb5726\nangola\nweb5917\nweb5727\nunavailable\nweb18810\nwebdisk.partners\nweb5918\nweb5728\nweb5731\ngi\nweb6019\nweb5732\nweb5733\nweb6849\ncw03host1\nweb5734\nwhynot\nweb5735\ncw03host2\nweb5921\nanimes\nweb18851\nweb3719\nweb18849\nweb5922\nweb3615\nweb3616\nweb6829\nweb5159\nweb5736\nmercator\nweb3619\nweb16990\nweb17527\nweb6616\npublica\nejournals\nweb5737\nweb3622\nweb5738\nweb5740\nexterno\nweb3316\nweb3319\nweb17526\nweb5741\nautodiscover.host\nhighland\nweb18573\nweb17525\nautoconfig.host\nweb5742\nweb5743\nweb5744\nweb17524\nweb17523\nweb5745\nweb5746\nwww.cam\nweb5747\nweb5750\ndrago\ntest002\nweb5751\nweb17522\nweb5752\nweb5753\nweb3323\nimk\nweb6619\nspaces\nweb3628\nweb5754\nweb3629\nweb3358\nweb5755\nwww.bill\nweb5757\ndofus\nweb5758\nweb5760\nweb18010\nweb5761\nweb18574\nweb18848\nweb3495\nedson\nweb5762\nweb5763\nweb5764\nweb5765\nweb5219\nweb5766\nweb5767\nweb17521\nweb5768\nweb18847\nweb5770\nweb5771\nweb5772\ndivya\nweb5773\nweb16999\ngigabyte\nrealmadrid\ntiago\nweb17919\ndrumandbass\nweb5774\nweb17091\nweb18845\nweb5775\nweb18575\nweb5776\nweb3806\nweb3798\nweb6719\nweb5777\ncalculus\nweb18576\nweb18890\nweb5778\nweb18029\nweb3943\nreb\nweb3944\nebank\nweb3945\nweb17519\nweb5780\nweb3948\nweb5781\nweb5782\nweb4049\nweb5783\nweb5290\nweb3953\nfso\nweb5784\nwww.acs\nweb17518\nweb4059\nfortress\nweb5785\nphilip\nwww.ams\nweb17517\nmilkyway\nlive3\nweb17516\nweb5786\nweb5787\nweb5788\nweb3961\nweb3963\nicom\nweb5801\nweb5802\nweb5803\nweb5804\nweb18899\nwww.ict\nweb5805\nweb17515\nweb5806\neuro2008\nweb5807\nweb5808\nmms2\nwww.cis\nweb5810\nweb5811\nterror\nweb3965\nweb5812\nweb17514\nweb3966\nweb5813\nweb3975\nweb4079\nweb5814\nweb3981\nweb3984\nweb5815\nproblem\nweb5816\nweb5817\ndeuce\nweb17513\nweb3985\nweb5818\nweb4087\nweb5820\nweb5821\nweb5822\nweb17512\nweb5823\nweb3988\nweb5824\nclare\nweb4093\nweb4097\nweb5825\nweb3330\nweb10709\nweb3791\nweb4291\nweb5826\nweb5827\nweb3793\nweb18577\nweb17940\nweb3796\nweb3797\nweb17511\nweb5800\nweb3813\nweb5779\nweb5931\nnazgul\nweb5828\nweb5830\nweb4609\ncraig\nweb5832\nweb5833\nweb5834\nweb4359\nweb4369\nweb5835\nweb4379\nweb4919\nweb5836\nwebtech\nweb5837\nasdasd\nweb4089\nguava\nweb5838\nweb5841\nweb6649\nenzo\naztec\nweb5842\nweb4388\nweb5843\nweb4390\nchill\nweb5844\nweb4391\nweb5845\ns155\nweb5846\nweb5769\nweb5847\nashish\nweb18578\nweb5848\nweb4393\nweb4394\nweb5621\nweb18844\nweb5850\nweb5851\nweb4396\nweb4397\nweb5852\nweb5853\nweb18843\nweb5854\nweb4398\nweb5855\nlab1\nweb5856\nweb5857\ndesperado\nweb5858\nweb5861\nweb5862\nweb5863\nweb5864\nweb5865\nweb5867\nbandar\nweb18842\nbk01\nweb4409\nweb5868\nweb5870\nweb5871\nweb5872\nweb5874\ndoggy\nweb5875\nweb3689\nweb5876\nweb5877\nweb5878\ndolls\naymen\nnewmoon\nweb4430\nweb4439\nweb4290\nweb5619\nweb3828\nweb5759\nkagami\nweb5881\ntournament\nweb5882\nweb5883\nweb5884\nweb5885\nweb5756\nweb5749\nweb5887\nrespect\nxanadu\nterminus\nweb18579\nweb5888\nweb5900\nweb5901\nweb5902\nweb5748\nweb5904\nweb5905\nblazer\nweb5906\ndrift\nweb4449\nweb18841\nweb5907\nweb5908\nfarmer\nweb6011\nweb18581\nelis\nweb6012\nweb3829\nweb5739\nweb6013\nweb6014\nweb6015\nweb3339\nweb6017\nweb6018\nweb6020\nweb3983\nweb6021\nweb6022\nbills\nweb6024\nweb4519\nweb6025\nweb18582\nweb3840\nwww.sochi\nweb18583\nannie\nsaffron\nalter\nweb4528\nweb18584\nweb6026\nweb18840\nsimplex\nweb4539\nweb18585\nweb18586\nweb18838\nweb6027\nweb3991\nweb4549\nweb6028\nweb3389\nweb18837\nweb4560\nweb3849\nweb18587\namity\nweb4566\ntestphp\nweb6031\nweb18836\nweb6032\nweb6033\ns169\nweb18588\ncelcom\nweb6034\ntmm\nweb6035\ntania\nweb4569\nweb6036\nfreely\ncyberzone\nweb6037\nrascal\nvampire\nweb18835\nweb6038\ndaum\nweb4573\nweb18834\nweb17149\neplus\nweb4580\nweb6040\nweb6041\nweb6042\nweb6044\nweb6045\nweb6046\nweb16953\nweb4929\ndzone\nerica\nerika\ngaban\nweb17148\ns158\nweb6047\nweb6048\nweb6050\nweb17147\nwww.krasnoyarsk\nweb17950\nweb6051\nweb4898\nweb18833\nweb6052\nweb6053\nweb18601\nweb6054\nweb17146\nweb6055\nmountainbike\nweb4588\nweb6056\nsurvey1\nentry\nweb4590\nkeira\nmybaby\nweb17145\nweb18832\npra\nweb4591\nweb18602\nrti\nweb6057\nweb6058\nweb6060\nweb18831\nweb4603\nweb18830\nweb4594\nweb6061\nweb18603\nweb6062\nweb17144\nweb4596\ngears\nweb6063\nweb4597\nweb6064\nweb6065\nbikini\narmada\nvideobox\nweb6066\nweb17143\nwww.td\nweb6067\nwsi\nweb4598\nweb6068\nweb6070\nweb18828\nweb6071\nweb4610\nweb17142\nweb18827\nsmstest\nweb6072\nweb6073\nweb6074\nens\nweb17141\nbns\nweb17140\nweb5944\nwww.ulyanovsk\ndiamante\nweb6075\nweb6076\nweb10356\nweb18604\nweb6077\nweb17138\npower4\ndepression\nweb6078\nweb6080\nweb17137\nweb6081\nweb4623\nweb6082\nweb4625\nweb6083\nweb6084\nftp.secure\nweb4630\nweb10431\nweb53\nweb6085\nweb6086\nweb6087\nweb18826\nweb10432\nginny\nweb54\nweb17136\nshortcuts\nweb10433\nweb18825\nweb10435\nvillage\nweb43\nweb6088\nweb10436\nwww.izhevsk\nweb6101\nweb6102\nmylive\nweb6103\nweb18824\nweb6104\nhermit\nweb10437\nweb17135\nshh\nweb18823\nrinrin\nweb6105\nweb18822\nweb10438\nweb6106\nweb10440\nweb6108\nweb6110\nweb17134\nweb10441\nweb6111\nweb6112\nheadlines\nweb6113\nweb6114\nweb18821\nweb6115\nweb10442\nweb18820\nweb10443\nweb6116\nweb6117\nweb10444\nweb6118\nweb6120\nfairtrade\nspartacus\nweb18605\nweb17133\nweb10445\nweb6121\nweb6122\nwww.stu\nweb6123\nweb10446\nweb6124\nwebdisk.club\nweb17132\nweb18818\nweb18817\nweb17131\nweb6125\nfadi\nweb18596\nweb10447\nweb10448\nweb18607\nweb6126\nweb10450\nweb18816\nweb18815\nyokohama\nweb10451\nexporter\nweb6127\nweb6128\nweb18814\nweb6130\nweb4640\nnightwing\nweb6132\nweb6133\nspectra\nbread\nweb4646\nweb6134\nweb4649\nweb6135\nweb6136\ngort\nweb6137\nweb4659\nweb10611\nweb18813\nweb17130\nweb10612\nweb18859\nrekrutacja\nwww.rekrutacja\nweb6138\nweb18812\nweb10614\nforum3\nthekey\nweb6140\nweb10615\nweb18811\nweb6141\nweb6142\nweb6143\nweb10616\nweb10617\nweb10618\nweb17128\nweb10620\nweb10621\nweb6144\nmydev\nweb6145\nweb6146\nweb18799\nweb6147\nastronomy\ndomi\nweb6148\nweb10623\nrtmp\nweb6150\nweb4616\nbappeda\nweb6152\nweb18608\nweb10624\nweb18610\nweb6153\nweb10625\nweb6154\nweb6155\nweb6156\nwww.mdm\ncnet\ngoodies\nweb18611\nweb18612\nhappy123\nweb18798\nweb16955\nweb6157\nweb6158\nweb18614\nweb18797\needition\nweb17127\nweb18615\nradium\nweb10626\nweb6161\nweb17126\nwww.testsite\nweb18616\nweb6162\nportalweb\nweb18806\nweb6163\nweb10627\nmandrake\nweb6164\nweb6165\nweb18795\nweb18794\nweb10628\nweb6166\nweb18793\noam\nweb10630\nweb5839\nweb10631\nweb10632\nweb10633\nweb10634\nweb10635\nweb10636\nweb10637\neasymoney\nbomb\nbangbros\nweb10638\nweb18617\nweb6168\nweb10640\nweb10641\nserver07\nweb10643\nbackup6\nweb10644\njenny\nserver06\nweb18802\nweb18618\nhshs\nweb10645\nweb17125\nweb6170\nweb10646\nonlinetest\nweb6171\nweb10647\nweb10648\nweb10650\nweb10651\nweb10652\nweb18801\ntpp\nweb6172\ntunis\nweb6174\nweb6175\nweb10653\nweb16983\nweb18620\nweb6176\nfreeads\nswim\nweb10654\nweb10655\nmuzic\nweb10657\nmofos\nweb10658\nweb10660\nweb18788\nweb10661\nweb6177\nweb10662\nweb18621\nweb6178\nrealitykings\nbhc\nweb10663\nweb10664\nweb18622\nweb10665\nweb10666\nweb10667\nweb4669\nweb6159\nweb10671\nweb10672\niservice\nsmurf\nweb6181\nweb18787\nwww.oc\nide\nweb18786\narmageddon\nweb6182\nweb17124\nweb18785\nweb6183\nweb6184\nweb10673\nweb10674\nweb6185\nweb6186\nkain\nssl7\nweb10675\nweb6187\nweb10676\nweb6188\nweb10677\nweb18623\nweb18624\nweb10678\nweb10680\nweb6200\nweb6201\nweb10681\nweb10683\nweb6202\nweb6203\nweb10684\nweb18784\nitservices\nweb6204\nweb17123\nalterego\nweb16982\nweb10685\nweb18782\nweb10686\npinetree\nweb18625\nweb6205\nweb6206\nweb6207\ntemple\nweb10687\nweb10688\nd21\nweb6208\nweb6210\nweb6211\nweb10700\nweb10701\nweb18626\nweb6212\nweb6213\nweb6214\nweb18781\nweb6215\nweb17122\nweb18627\nweb18780\nbas\nweb10702\nweb6216\nweb18628\nweb10703\ndbs1\nweb6217\nweb6218\nweb17121\nloves\nprado\nweb18778\nweb6220\ngoya\nweb6221\nweb6222\nweb6223\nweb10704\nweb6224\nweb10705\niftp\nweb18629\nhoken\nweb6225\nweb6226\nreform\neasydns2\nweb17120\neasydns1\nweb6227\nweb10706\nweb10707\nweb6228\nweb10708\nweb17118\nwebdisk.foro\nweb17117\nweb18631\nweb10710\nweb6231\nweb18632\nweb10711\nweb10712\ndaugia\nweb10713\nweb10714\ndev-admin\nweb6232\nodp\ndl5\nweb17116\nweb17115\nweb18633\nweb6233\nweb10716\nsergey\nweb10717\nweb6234\nweb6235\nweb6236\nweb6237\nminotaur\nweb6238\nweb18777\nweb6240\nweb6241\nweb16981\nweb10718\nbuu\nweb6242\niraqi\nweb17114\nweb17113\nweb6243\nbowling\nweb17112\nweb6244\nweb18634\nweb18635\nweb18636\nweb18637\nweb18775\nweb6245\nweb6246\nweb6247\nweb18774\nweb18638\nweb6248\nweb10720\nweb17111\nweb18773\nns131\nweb17109\nweb17059\nnessus\nweb6250\nweb17098\nweb17097\nweb10721\nwww.designer\nweb10722\nweb18641\naziz\nweb10723\nmelpomene\nechidna\npolish\nixion\nweb18642\nsanat\nwww.ventas\nweb18643\nweb10724\nweb17096\nmalabar\nweb18772\nweb17095\nweb16994\nprotocolo\nweb4619\nweb10725\nwho\nweb6311\nweb16993\nweb17102\nweb6312\nweb6313\nweb6314\njak\nweb10726\nweb18644\nweb6315\ntottori\nweb6316\nweb6317\nweb16991\nweb10727\nwww.fis\nweb6318\nweb6320\nweb6321\nweb10728\nweb17100\nweb6322\nweb6323\nweb18771\nweb6324\nweb18645\nweb6325\nweb6326\nweb17088\nweb6327\nweb6328\nstrauss\nweb6330\nweb17087\nvm03\nvspace\nweb10730\nweb4679\nweb6331\nweb6332\nweb18769\nweb6333\nwww.agro\nweb17086\nweb6334\nweb17085\nweb4683\nweb6335\nweb6336\nweb6337\nweb6338\nnew3\nweb6340\nolm\nweb4700\nlyncext\nweb6341\nweb6342\nweb6343\nweb3992\nweb17084\ncgc\nweb4693\nweb4694\nweb6344\nwww.cams\nwww.casa\nweb6345\nweb4695\nweb6346\nweb4696\nweb4697\nweb17083\nweb6347\nsm4\nweb18768\narda\nweb18767\nbnc\nweb6348\nweb17082\nweb6350\nweb6351\nwww.chef\nweb6352\nweb6353\ncjy\nweb6354\nweb6355\nghc\nweb6356\nweb17081\nweb6357\nweb6358\nweb6361\nweb6362\nweb6363\nweb6364\nweb4698\nweb4709\nweb18766\nwww.buzz\nweb6365\nweb6366\nweb6367\nns140\nwww.core\nweb6368\nweb6370\necdl\nweb18765\narab\nweb6371\nweb6372\nweb6373\nweb16979\nweb17078\nweb6374\nweb6375\nabdullah\nweb6376\nweb6377\ndeepak\nweb6378\nbeny\nweb4891\nweb4729\nweb17077\nweb6380\nweblync\nweb17076\nwww003\nweb17075\nweb17074\nweb18590\nweb6381\nweb3730\nweb18764\nweb4739\nweb4743\nweb6382\nwww.plant\nweb5009\nweb17073\nlogserver\nweb18763\nweb6383\nweb16972\nweb18762\nweb17600\nweb17071\nweb6384\nweb16970\nweb18761\nweb6385\nweb6386\nweb6387\nweb17068\nweb6388\ndiscussion\nweb4749\nweb17067\nweb6401\nweb6402\nweb6403\nweb18760\nweb6404\nweb6405\nweb18758\nweb4529\nweb4297\nweb17610\nweb4003\nweb6406\nweb18757\njericho\nweb6407\nweb18756\nweb6408\nweb6410\nqv\nweb4811\nweb4010\nweb17066\nweb17065\njoin2\nweb6411\nweb6412\nweb3911\nweb18755\nweb6413\nweb17064\nweb18754\nweb6414\nweb3912\nmemoria\nweb16963\nsigam\nweb3913\narkansas\nweb17062\nweb18753\nweb3914\nweb6415\nweb6417\nweb18752\n117\nweb6418\nweb17061\nadvocate\nweb6420\nweb18751\nweb16959\nweb18750\nweb6421\nweb3915\nweb6422\nwww.washington\nweb6423\nweb17058\nweb6424\nhassan\nweb17057\nweb6425\nweb18748\nweb4016\nweb17056\nweb18747\nweb6426\nweb5459\nweb6427\nweb6428\nharper\nweb6431\nweb6432\nweb18746\nweb18745\nbits\nweb6433\nweb18744\nfiles4\nweb6434\nweb6435\nweb17055\nweb6436\nweb17054\nvscan\nweb6437\nweb3917\nweb6440\nweb4018\ntesoreria\nweb6441\nrentals\nweb17053\nweb4019\nweb17052\nweb3921\nweb17051\nweb17049\nweb17048\nweb17047\nweb6442\nbacon\nweb3627\nweb3922\nweb5925\nweb6443\nweb6444\nweb17046\nkochi\nweb4023\nweb6445\nweb6446\nweb17045\nweb4923\nweb17044\nweb6447\ncasanova\nweb18743\nweb4924\nweb6448\nweb17043\nwww.the\nweb6450\nweb6451\nweb3924\nweb4925\nweb6452\nweb4926\nweb6453\nweb4927\nbeam\nweb4928\nkawaji\noptics\nmidgard\nweb5029\n130\nweb17042\nbayside.cit\nweb17041\nweb6454\nweb3925\ndiamant\nweb16939\nweb17038\nweb17037\nweb5940\nweb16936\nweb4931\nweb6455\nweb6456\nweb17035\nweb4933\nweb4934\nweb6458\nweb3926\nceramics\nweb6460\nweb4936\nweb4937\nradioweb\nweb17034\nweb17033\nweb17032\nweb17031\nweb6461\nweb5939\nweb6462\nweb6463\nmusicworld\nweb6464\nweb4938\nwwwa\nwwwb\nweb6465\nweb5039\ngrassroots\nweb16929\nweb10659\nweb6466\nweb18742\nweb6467\nweb5309\nweb17028\nweb4941\nweb3927\nweb6468\nweb6470\nweb4942\nweb6471\nweb4943\nweb18741\njz\nweb4944\nyh\nchat4\nweb6472\nadis\nweb18739\nweb4945\nweb4946\nweb6473\nweb3928\nweb4947\nloadtest\nweb4948\nlocate\nvpbx\nssr\nweb6229\nweb5049\nweb6474\nweb4030\ndtk\nweb13189\nwww.quality\nweb3931\nweb17027\nweb4960\nweb4961\njavascript\nmicco\nmicos\nweb6475\nweb3932\nweb6476\nweb6477\nweb6478\nweb3933\nweb6480\nweb4969\nwww.html\nweb6481\nweb17026\nweb17025\nweb6079\nweb18738\nweb6482\nweb18737\nweb6483\nweb3934\nweb7259\nweb4979\nweb6484\nweb4910\nweb17024\nweb6486\nweb3935\nfaktury\nweb4265\nweb3936\nweb6487\nweb6488\nweb17023\nweb6501\nweb6502\nweb6503\nweb4986\nweb4988\nweb6504\nweb4989\nweb3937\nweb3938\nweb3994\nsubscriber\nweb6505\nsurvivors\nweb18736\nweb13199\nweb18735\nweb6506\nweb3941\nweb3942\nsparta\nweb6507\npgsql3\nweb5130\nweb6097\nweb13125\nweb17020\nweb13126\nweb6508\nweb13127\nweb6510\nweb6511\nweb13128\nveterinaria\nweb6512\nweb17022\nweb13130\nweb6513\nvlc\nweb17021\nweb13131\nweb6514\nwww.mta\nweb18734\nbabes\nweb13132\nweb6515\nturf\nweb6516\nweb6517\ntres\nldaps\nweb6518\nweb16920\nweb6521\nweb13133\nweb6522\nweb6523\nweb13134\nweb6524\nweb13135\nweb17018\nweb6525\nweb18733\nrunner\nweb13136\nweb17017\nweb6526\nwfb\nweb6527\nweb6528\nrenoir\nweb18732\nweb18731\nweb16973\nreka\nweb13137\nweb13138\nweb13140\nforwarding\nweb6089\nweb16916\nweb17015\nweb17014\nweb6531\nweb13141\nweb13142\nweb17013\nweb17012\nweb13143\nweb6532\nweb6533\nweb6534\nweb6535\ninex\nweb6219\nweb6536\nlc3\nweb6537\nots\nweb17011\nweb6538\nweb13144\nsantosh\nweb6540\nweb6541\nweb13145\nweb18728\nweb5189\nweb6542\nweb13146\nweb18727\nweb202\nweb6543\ncannes\nweb6544\nweb18726\nblog-dev\nweb13147\nweb13148\nweb18725\nweb13150\nweb18724\nweb13151\nweb6545\nweb17010\nweb6546\nweb201\nweb17008\nweb18723\nweb6547\nweb18722\ncl1\nweb18721\nweb13153\nblanco\nweb13154\ntalos\nweb6548\nweb6550\nweb4629\nweb6611\nweb6612\nweb6613\nweb13155\nweb13156\nweb6614\nweb18719\nweb13158\nweb6615\nweb6617\nweb17007\ncw01host10\nweb5948\nweb13160\nweb17006\nweb6618\nweb17005\nweb6620\nweb13161\nweb13162\nweb13164\nweb6621\nweb18718\nweb6622\nweb13165\nweb17004\nweb6624\nweb13166\nweb6625\nweb13167\nweb6626\nweb6627\nsuche\nweb5139\nweb17003\nbackyard\nweb6628\nweb17002\nopendata\nweb13170\nnita\nweb3919\nweb6631\nweb17001\nweb6632\nweb18717\nweb6633\nweb16989\nweb6634\ninout\nweb16971\nweb6635\nweb6637\nfastcash\nftp.staging\nweb6319\nweb17000\nweb6640\nweb6641\nweb5599\nweb6642\nweb5289\nweb6645\nweb6199\nweb13171\nweb6646\nweb13172\nnaif\njackass\nweb13173\nweb13174\nweb13175\nweb5840\nweb6647\nweb6648\nweb6651\nweb6652\nweb6653\nalms\nweb13176\ndragons\niina\nweb13177\nwww.tibia\nweb6654\nweb18715\nweb6655\nweb4932\nbacklink\nweb13178\nweb4559\nweb13180\nweb13181\nweb13183\nweb13184\nthegallery\nweb6656\n007\nst6\nweb4298\nweb6657\nweb18714\nnlb\nweb6658\niview\nweb18713\nweb18712\nweb4149\nweb18711\nweb6660\nweb6661\nweb6662\nfeedme\nweb13185\nweb5592\nweb17070\nweb6664\nweb13186\nweb6665\nwargames\nearnmoney\nweb16968\nedu4\nweb13187\nweb13188\nweb6666\nweb16967\nwww.test5\nweb6667\nweb6668\nweb16966\nweb13200\nweb13201\nweb3390\nweb6671\nweb6672\nweb6673\nweb6674\nweb6675\nweb6677\nwww.ld\nweb3699\nweb13202\nweb5590\nweb6678\nimagegallery\nweb6680\nweb5492\nweb6681\nweb16965\nweb13203\nweb13204\nweb3923\nweb5649\nweb13205\nweb13206\nweb6682\nweb6684\nwww.fan\nweb13207\nweb6685\nwebdisk.movies\nweb13208\nmountain\njoko\ndmx\nweb5639\nweb13210\nweb6069\nweb13211\nweb16964\nweb6686\nweb6195\nweb6687\nweb17063\nweb6688\nblik\nkala\nweb5719\nweb6701\nweb6702\nweb6704\nwww.gov\nweb16962\nweb6705\nsociology\nweb6707\nweb13214\nweb13215\nweb3946\nweb13218\nweb13220\nweb13221\nweb6708\nweb6710\nweb13222\nweb7450\nweb13223\nweb6711\nweb7448\nholland\nweb13224\nweb13225\nweb6712\nweb7447\nweb13226\nweb6714\nweb6715\nweb6716\nweb7279\nweb6717\nweb6718\nweb13227\nweb5636\nweb13228\nweb13230\nweb6109\nweb13231\nweb6721\nweb13232\nebi\nweb4830\nweb6029\nweb6722\nweb6723\nweb5629\nweb6724\nweb6725\nweb3649\niapps\nweb7444\nweb5192\nweb6727\nweb6728\nweb6730\nweb6731\nweb7442\nweb5916\nweb6732\nweb4140\nweb6733\nweb6734\nweb7441\nweb7440\nweb6735\nweb5611\nweb18646\nnatal\nweb13233\nweb5609\nweb6736\nweb5598\nweb5597\nweb7438\nweb7437\nweb6737\nweb6738\ndiaspora\nweb6741\nweb6098\nweb13234\nweb18647\nweb13235\nweb13236\nweb5596\nweb7436\nweb5595\nweb5594\nweb13237\nweb5149\nweb13240\nweb7435\nweb7434\nbydgoszcz\nweb13241\nweb5593\nweb7433\nweb6742\nweb7432\nweb7431\nlloyd\nweb6744\nweb6745\nweb6747\nweb7430\nweb6748\nweb13242\nweb6750\nweb6751\nweb6752\nweb6754\nweb6755\nweb7427\nweb4892\nweb5601\nweb7426\nweb5600\nweb13243\nweb7425\nweb7424\nweb6756\nweb6757\nweb13244\nweb6758\nengage\nweb6761\nweb6762\nweb5489\ntest.support\nweb6763\nweb13246\nweb7423\nweb13247\nrelais\nweb6764\nweb7422\nweb6765\nweb6767\nweb13248\nweb7420\nweb6770\nweb6771\nweb7418\nweb7417\nweb7416\nweb7415\nweb6772\nx22\never\nweb5579\nweb6774\nweb3947\nweb5571\nweb5491\nweb5570\nweb5160\nweb3950\nweb6775\nweb6776\nweb7414\nweb6777\nweb18648\nweb6778\nweb6781\nweb7413\nendor\nweb6782\ngaza\nweb6107\nwebdisk.app\nfigaro\nweb5567\nweb7412\nweb3647\nweb6783\nweb7411\nweb7410\nweb6784\nweb6785\nmsuperserv\nweb7408\nweb3695\nsalix\nweb3951\nweb7406\nweb6786\nwww.webstats\nweb5190\ncdf\nweb4131\nweb6787\nweb6788\nweb6800\nweb7405\nweb6801\nwebdisk.community\nweb6802\nweb5169\nweb6804\nweb6805\nweb6806\nweb6807\nweb5494\nweb3952\nweb5495\nweb6808\nweb6810\nweb6811\nweb3920\nweb4691\nweb6812\nweb5179\npalembang\nweb6813\najs\nweb7404\nweb7403\nsmtp05\necr\nweb6814\nweb7402\nweb7401\nfinch\ntdr\nweb4129\nweb6815\nweb6817\nien\nbedroom\nweb5183\nweb6818\nhre\nweb6820\nweb6821\nweb3954\nweb7388\nweb5200\nweb6822\nweb7387\nweb6824\nweb5549\ndeve\nweb3955\nweb4128\nweb5569\nweb5191\nweb5539\nweb6825\nweb7386\nweb6826\nweb4126\nweb6827\ninnovo\nweb5193\nweb6828\nweb7384\nweb7383\nweb6831\nadrms\nweb5943\nweb6832\nweb6833\nweb5194\nweb6834\nweb6835\nweb6837\nweb3956\nweb7382\nweb6838\nweb5196\nweb5530\nweb6840\nweb7381\nweb6841\nweb5947\nweb3918\nweb6844\nweb5197\nweb6845\nweb7380\nweb5509\nweb5498\ntiens\nweb6846\nxen4\nweb6847\nweb6848\nchicco\nsgb\nweb7377\nweb6179\neasyway\nweb3659\nweb5198\nweb5209\ndeedee\nweb4639\nweb5519\nweb5499\npwc\nweb18649\nb161\nweb3749\nweb5497\nweb4930\nweb5496\nb123\njellyfish\nweb-hosting\nweb5493\nweb6690\nweb7211\nweb4119\nweb5501\nfukushima\nweb5490\nnebo\nweb5559\nweb3957\nweb7212\nweb7214\nweb5479\nweb7215\nweb7216\nweb4058\nweb7218\nweb7221\nselly\nweb6094\nbindu\nweb7375\nweb7222\nweb7223\nweb7224\nweb7225\nweb6629\nweb7227\nadil\nweb7374\nweb7373\nweb7228\nweb5472\nweb7372\nweb5469\nweb3916\nweb7230\nweb7371\nweb7370\nweb7368\nblaster\nweb6638\nweb3960\nweb7231\nweb7367\nstarweb\nweb5229\nweb5460\nweb16969\nweb3962\nweb7232\nweb5240\nweb5449\nweb3964\nweb3789\nweb5249\nweb7366\nweb7234\nweb3839\nle\nweb7235\nweb6093\nelgg\nweb7365\nweb4109\nhud\neset\nweb7236\nweb7237\nweb3995\nasp1\nkingston\nweb5260\nweb5261\nntt\nsamho\nwebdisk.ip\nweb3967\nweb7364\nweb7238\nweb7363\nfaisal\nsingh\nweb7362\nweb7360\nweb5263\nweb5439\nweb7358\nweb7241\nfabian\nweb4108\nweb7243\nweb5266\nweb7244\nweb7245\nweb3968\nweb5269\nwww29\nweb4069\nwww39\nwww35\nweb7247\nweb3997\nweb5273\nweb6192\nweb4009\nweb5429\nweb7248\nweb3971\nweb7250\nweb7356\nweb5280\nweb7355\nweb7354\nweb7252\nweb5730\nweb6359\nweb4096\nweb7254\ntmp7\ndarkknight\nweb3972\nweb7353\nanswer\nweb4095\nweb5284\nmail.pics\nweb7255\nweb7256\nweb7257\nweb6092\nweb7351\nweb5930\nweb7258\nver2\nweb7348\nweb7261\nweb7262\nweb5286\nweb7347\nweb5418\n137\nweb7263\nsysadmin\nweb7346\nweb3996\nweb7345\nweb7344\nweb7264\nweb7343\nweb4094\nweb7265\nweb3973\nweb7342\nakasaka\ngroupon\nweb5300\nweb5291\nweb3993\nweb7341\nweb7340\nweb7267\nweb5292\nweb7268\nweb5303\nweb5294\noyster\nweb7270\nseabird\ndocman\nweb3974\nweb5295\nweb17709\nweb3940\nweb5296\nweb7272\nweb4689\nweb7338\nweb5297\nweb4092\nwww.6\nwww.5\nweb5298\nweb7274\nweb7276\nweb7277\nhmc\nweb17708\nweb7278\nweb7337\nweb4091\nweb5310\nweb4090\nweb7336\nweb6189\nweb6091\nweb7282\nweb3976\ntableau\nweb3987\nweb3986\nfirebird\nweb7335\nvisual\nweb7334\nwebpay\nhoth\nwww.bo\nweb7333\nweb5316\nweb5319\nvishnu\nweb7283\nreisen\nweb7285\nweb7287\nweb7288\nweb7300\nweb7301\nweb7332\nweb7331\nweb5529\nweb6090\nweb3977\nweb5349\ncosanostra\nweb7328\nrat\nweb5322\nws02qa000\nweb7327\nweb7302\nweb7326\nweb5293\nwalrus\nweb7305\nws02qa001\nscooby\nskylight\nvelma\nws02qa002\nweb3751\nweb7324\nws02qa003\nws02qa004\nweb3978\nweb5330\nweb7306\nsleepy\nsandbox1\nmorton\nweb3980\nweb7322\nwww.novosibirsk\nmathematics\nweb7307\nweb13249\ncroatia\nsst\nweb5337\nweb7321\nweb4083\nweb7320\nweb5339\nweb3982\nweb7317\nweb17689\nreps\nweb7308\nhomeschooling\nweb7315\nweb7314\nweb7313\nweb3639\nmemberlite\ntestmobile\nb.i61\norbital\nscrapbooking\nb.i59\nb.i62\nb.i58\ntherock\nabcdefg\nb.i57\nmyinfo\nb.i63\nb.i64\nb.i65\nb.i56\nb.i55\nb.i66\nb.i67\ndevforum\nb.i54\nsmpt\nb.i53\ndrupaltest\nb.i52\nvenkat\nkimoto\nb.i68\nb.i69\nb.i51\nb.i49\nfaceebook\nb.i48\neac\nvhosts\nb.i47\nb.i46\nwww.uy\nb.i71\nb.i45\nb.i44\nb.i43\nb.i42\nb.i41\nb.i72\nwww.14\nb.i40\nb.i38\nb.i37\nb.i36\nb.i73\nyoussef\nb.i35\nb.i74\nb.i75\nb.i34\ncuckoo\nxink\nb.i33\nb.i32\n169\nb.i31\n237\nb.i29\nohyes\nb.i76\nb.i77\nb.i28\nb.i27\ntimemachine\nresimler\nb.i78\nautodiscover.design\nb.i26\nb.i25\nb.i24\npylon\nb.i79\nwww.financial\nretailers\nb.i81\nmomen\nb.i82\nautoconfig.design\nfsc\nb.i23\nb.i22\nb.i21\nguideline\n131\nreef\n134\nh2media\nfunnyman\nb.i83\nafshin\nchoose\nwww.ffm\n162\neforce\nstorm2\nopenvz\nb.i84\nb.i20\nbestcar\nb.i18\nmilkbar\nb.i85\nb.i17\npunjabi\nlogiciel\nb.i86\ndreamz\nclk\nb.i16\nautodiscover.tickets\nb.i15\nb.i87\nautoconfig.tickets\nhuygens\nthales\njason1\nalertus\ninvent\nb.i14\nkopenhagen\nb.i13\nb.i12\nb.i88\nt10\nb.i11\nb.i89\nb.i10\nb.i91\ngeotech\nb.i92\nd.i40\nd.i91\nd.i90\nhamburg\nmarie1\nschubert\nwhiterabbit\njaney\nr230.i90\nd.i86\nd.i85\ncontractor\nd.i80\nb.i93\nqa.secure\nqa.www\nstaffs\nb.i94\njambo\nuws\nbuild.www\nak47\nb.i95\nsplayer\nb.i96\nr230.i80\ntranslator\nqa-lohika.www\nelnino\nfreesoft\nlocal.www\nb.i97\nlocal.secure\nanilkumar\nb.i98\nbuild-lohika.www\nd.i70\nusertest\nb.i0\nrolando\nkath\nbuild.secure\nrotor\npolychrome\nimhere\nopmanager\nr230.i69\ncourrier\ndn2\nshinbus\nmasq\nd.i59\nanto\nb117\nmayrose\ntribuna\nb148\nmtb2000\nr230.i59\nservicecenter\nfastnet\na1234567\nhayden\nd.i49\nanarchy\nhbf\nredwing\nbrew\nconnector\nfishbook\nwww.phys\nidp-test\nsmart2\nd.i99\nd.i98\nd.i97\nd.i96\nqweasd\nd.i95\nfunfunfun\nd.i94\nd.i93\namoozesh\nb.i1\ncomedy\ncraiova\nwww.sante\ndaesin\nd.i92\nb.i2\nr230.i50\nd.i89\nb.i3\nzoidberg\nfarhangi\nd.i88\nd.i87\nebm\nlilith\ni-origin\nlogbook\nb.i4\nd.i46\nielts\nww7\nimis\nd.i84\nbarlow\ngestao\nbacklinks\nd.i83\nateam\nalgol\ndenebola\nd.i82\nb.i5\nb.i6\nd.i81\nb.i7\nd.i79\nfs5\n_domainkey\nwebdisk.card\nd.i78\nautodiscover.app\nb.i8\nb.i9\nautoconfig.app\ngarm\ngava\nwww.shop2\nd.i77\ncamilla\nptah\nmcd-www2\nd.i76\nx10\nx11\ngareth\nd.i75\nautodiscover.v2\nautoconfig.v2\nd.i74\nd.i73\nversion1\nav1\nd.i72\nqh\nmansour\nd.i71\nd.i69\nd.i68\nd.i67\njulliet\ndrupal7\nkepa\nd.i66\nsafer\nd.i65\ntextile\nmf1\nispadmin\nd.i64\nd.i63\nfuel\nspooky\ngobo\naoi\nwww.new1\nkrsk\nd.i62\nd.i61\nd.i60\nautoconfig.webdesign\nroo\nd.i58\nd.i57\nd.i56\ndns18\nd.i55\nd.i54\ndns20\nautodiscover.webdesign\nd.i53\nd.i52\nscreen\ncontext\ndns19\nwebdisk.labs\nmafiawars\nserv4\nd.i51\nd.i50\nd.i48\ncleverskincare\nd.i47\nrapidleech\nhideip-canada\ngarcia\nd.i39\nd.i45\nwedge\nflames\nd.i44\ncsm-nat-10\nd.i43\nd.i42\nd.i41\nd.i38\nitd\nboky\ngautam\nwww.afaceri\ncpw\nmiyazaki\nip-ca\nici\npclab\nautodiscover.movies\nhideip-hongkong\nautoconfig.movies\nwebclient\ndame\nip-hk\nslipknot\nip-it\nwww012\nmysql41\nwww.imagegallery\nmapz\nmall49\nkota\nl2tp-ca\ndcode\nmidori\nl2tp-hk\nhighschool\nl2tp-it\ngapi\nwhisky\nflores\ngmax\ngogl\nmedo\ngshf\nhideip-italy\nloke\ngardena\nwww.zero\nwindows1\nfap\nbaikal\ndriss\njuridico\ngoldman\nlemur\njoen\ndk2\nouroboros\nmathews\nmathias\nql\npsyche\nsyed\nnikolai\nwww.study\nmaruwa\nrender\nwww.zend\nwww.xtreme\nbanane\nocio\nedu10\nasgadmin\ntopcat\nfs3\nfs4\namail\nshivam\nj3\nkurihara\nmd5\nvie\nreni\nhairy\nstyleguide\nraza\nsyndication\nsotm\nartlove\nafd\nsinbad\nbypass\njsd\nachille\ngreenhouse\ngmc\ndimension\nfervor\nsmtpmail\nwisla\nwww.advert\narquivo\nl1\ndayton\np1-all1\nnirwana\nbeian\nmutation\noffice3\nfilter3\nwww.mlm\n104\nlyncsip\nvhost1\nsis2\nseek\ncompetitions\niperf\nneotest\nhifoods\ndwarf\nchat3\nsupergirl\ndt1\nlklp1\nlklp2\nlklp3\nlklp4\nlklp5\nrflp4\nrflp1\nrflp2\ninuyasha\nrflp3\nwww.estore\nrflp5\nst0\nst7\nvpn11\nmsdesign\nausbildung\nghost2\ncomtax\njrhms\nmolotok\nwakayama\ntokushima\nmadan\nbaja\nsavoy\nwww.p2p\npace\naucc\nefile\nspamfilter2\nkitahara\nshenyang\nspamtest\nwww.porn\nmalak\nphoto4\ncass\nwww.kansas\nwww.webservice\nwww.park\nonlinekatalog\nwww.louisiana\ncoding\nwww.next\nwww.utah\ndelaware\ngameover\npennsylvania\nwww.maine\ngambit\nwww.lost\nalok\nbongo\nwww100\nmpc\nwww.liga\nzaid\nchandan\napollo-v\nd.i0\nd.i1\nhavok\nwarta\nbanshee\nws21\nwww011\nd.i2\nwww-hac\nws22\nd.i3\nmys\nd.i4\nvisage\nwebdisk.central\nwww.ecom\ntarek\ncreativemind\nazur\nd.i5\nopr\ninfo7\nwww.clip\nbcr\nedf\nwww.boom\nns130\nsm11\nwww.cr\npar\nurlaub\nnadir\nasad\nd.i6\nwww.mailbox\nd.i7\ncallum\nwww.tasks\nucupdates-r2\nsptest\nwww.aaaa\nkal\nvm04\nopenhouse\nbans\nd.i8\nthiago\nd.i9\nvm05\nscuttle\nsearch3\nweb50\nwww.hu\nlucky777\narno\ninblue\ndomino2\npegase\nosp\nhichem\npc10\nipade\nbk15\nwww.fa\nlandau\nw3c\nkvm01\nlares\nbounty\njsw\nyassine\nvalley\nwww.relax\nhephaistos\nsesame\neole\nirce.sac\nirco.sac\nlove4ever\ndsj\naliraqi\nzono\nwsj\ncorreo2\ndawood\nsaddam\ndavido\nhaydar\narchivos\nouranos\ntns21\nwww.u\nb.i70\nwebdisk.webinar\nwww.test123\ncomfort\nwebtrack\nafaceri\ntribal\nthelord\nkauai\npnj\nwebdisk.noticias\ne-shop\nlazaro\nwww.alt\natos\nblop\nzabava\nwebdisk.ask\nduckbill\nwww.gc\nume\n135\nwww.fishing\ntest008\neveryday\nwww.spam\nhacked\nrp1\nbattery\nwww.um\nskate\nssl8\necos\narco\nflashgame\nmyproject\nwww.il\nmyfriend\ncadastro\nnicky\nchucky\ncot\nlollipop\nkrystal\nando\nmdt\nwww.bw\ncoolweb\n122\nlab2\nhyena\ncal02\ncal01\n127\nrad01\nbots\npicpost\nddos\nfarhad\ns154\nwww.messenger\nmort\njasmine\nlcr\norigen\nmanagement-uat\nfernanda\ncpmail\nzixgateway02\nwww.eedition\nhavefun\nhotsex\nftp.mail\ncina\npcserver2\ndavy\nmmsc\nstudenti\nshit\nboletin\niem\nprague\nparceiros\nnereid\nwebtrac\noutcast\nescort\nmicasa\n168\nnitrox\n202\nwww.anuncios\n999\nwww.honduras\ndoremi\nr80.i0\nwww.magnitogorsk\nr80.i1\nr80.i2\nstylist\nveda\nverity\ncisco-capwap-controller.net\njanice\ngekoo\nmellow\nsurfing\nr80.i3\nvivek\ncuc\napophis\npaulo\nshah\n2000\nidiomas\nfurni\nwww.lifestyle\ngolf2\nskkk22\nnomade\nmaterial\nsophosav\nseeit\nlsmb01c.lsdf\nrentacar\npower3\nr80.i4\nbigcity\nwww.pedro\nsonic3\nimanager\nr80.i5\nacura\nlsmb02.lsdf\nr80.i6\nwww.deal\nraiderz\nr80.i7\nr80.i8\nafroz\nr80.i9\nfound\nmembers4\nqatest1\nprestige2\ncontenidos\nmp7\nwww.nokia\nmp26\nr230.i0\nr230.i1\ndnd\nr230.i2\nwww.argentina\nr230.i3\nloadbalancer\nzxcvbnm\ndpa\nsonic4\nr230.i4\nsonic2\nlucian\ns170\nwww.holidays\nbox13\nlorena\nmrelay\nr230.i5\nsgmail\nchihuahua\ntmd\nwebdev2\nmelkor\nbox3\nvermont\nstevens\nr230.i6\nmyprofile\nprotein\novz1\nap3\nmyweb20\nspamserv\nnewgeneration\nonapp\nwww.ssp\nandri\nbelal\ndahlia\nbetta\negis\nfetish\nxe\ndominion\ndrugs\nashok\ndrone\ntesttesttest\njanuary\nelly\nmontada\nfrancois\nportia\nmongoose\nemil\nchang\ndraconis\nesxi05\nbisnis\nashraf\nmyrose\nchico\nhotplace\nreflex\nwww.hot\ns198\nvantage\ncrisp\nbnat\nash977\nr230.i7\nautoconfig.novo\ndario\nautodiscover.novo\nwebzine\nasd123\naisha\nspanky\naiolos\ndejan\nton\nwww.box\nreg1\nzixgateway01\nwww.admission\nwww.wa\nwww.bid\nlive4\nwww.arts\ndimas\ncawaii\ndandy\nverio\nwww.ada\nwww.ace\nextmail\nnsw\nassess\ncna\nspamfilter1\nbrics\ntechie\nchips\nr230.i8\nr230.i9\nnetlog\njohnson\nwww.imagens\nr230.i70\ndrlee\nwww.nic\nr230.i10\nchara\naxion\nblade14\nvps024\ncyril\ntsl\nmyserver\nuae\nvps100\nvps101\nwww.euro2012\nfarah\nedtech\nnetshop\nr230.i11\nbcd\nr230.i12\ncardiology\nreynolds\ncarol\ndevapps\nr230.i13\nrosso\nvps105\nhp2\napi.new\nresnet\nr230.i14\narora\nkakashi\nkalyan\nhibu-portal\nfendi\ncasablanca\nrvip\nmegaupload\ntkd\nesoft\nwhsil\nblackfriday\nfilestore\nvps119\nr4\nr230.i15\nrajiv\nbassem\nmovie1\nbassam\nverio-portal\nr230.i16\n2007\nrit\nhml\nhaker\nworldwar\nplaygames\nr230.i17\npackage\nbaraka\nvps109\nr230.i18\nmunna\nchipmunk\nuh\nwebmail.panel\nnyc2\nraj\nbuilder.panel\nkaylee\nvps114\nhawai\nbasketball\napac\nmetric\ndeadly\nguess\nr230.i19\nenrique\ndarkangel\nentourage\nfilemanager\nwww.camp\nr230.i21\nmonolith\ntiffany\npartner-portal\nhoang\naspirin\nr230.i22\napollo1\nwonderful\nhours\ngoogleservice\nr230.i23\nshabaz\nholistic\ntab\nronald\nelink\nexp1\nfolkart\niherb\nebanking\ntaekwondo\nmadness\navp\nns127\natlantida\nmii\npil.qa\nukraine\njackbauer\nhomework\npilqa\npnp\nbenben\nsaerom\nseverodvinsk\noac\npossible\nlv121101224503\nlibrary2\niwillbe\nflute\nkarel\ncc3\ntheking\npetrus\nadolfo\nr230.i24\nkatja\n83\nhadar\noffice-gw\nlas\nr230.i25\ndomain.control-panel\nwecare\namore\namara\nbesmart\nr230.i26\nthoth\nmf3\nr230.i27\nr1soft\nwebdataadmin\nwww.mails\ndreamers\npdu4\nwww.chel\noverdrive\nallianz\nr230.i28\napc5\nbillion\nsantos\nr230.i30\nteta\nmizar\nproject1\nsingularity\nsimolly\nasma\nsakshi\nr230.i31\nr230.i32\nserv01\nhost14\nfim\nmajid\nwww.mybook\nwakaba\nrouter11v13.zdv\nmanny\nr230.i33\nlviv\nproxmox\nsena\nsuncity\nstaff2\nseguridad\nwww.museum\nlocation\nr230.i34\ncnki\nths\nwlddy129\nwww.rainbow\ndaesung\nwww.catalogue\noracle1\niframe\nr230.i35\nsmaug\nr230.i36\nwww.east\nportuguese\nm360\nabcxyz\nss3\nlavender\nmicky\nuv\nr230.i37\nlewis.ucs\nnaser\nrajawali\nnavid\ngalactus\ninvoices\njamestest\nr230.i38\nrecursos\nwww.warriors\ncdnet\nr230.i40\nbrownie\nmohan\nfax2\nhss\nnameless\nzerocool\nakram\nr230.i41\nbasement\nrik\nshopping1\nr230.i42\nzin\nbohr\nringtone\nroundtable\npodarki\nsleipnir\nfinaid\nharem\nr230.i43\ncastest\nbst\nloving\nwww.kitchen\nbci\nmybox\npdu3\nblogs1\nblackrock\ndol\nabcabc\nr230.i44\nr230.i45\nnibbler\nkoka\ndangban\nartgallery\nflyhigh\npiero\npost2\nr230.i46\njdc\ntta\ntest123456789\nmusicvideo\nr230.i47\nslave2\nvitality\nenomoto\nr230.i48\ncts\nsolidworks\nrenata\nfra\nspokane\ninvestors\nr230.i49\nlearnenglish\ncms01\nr230.i51\nr230.i52\nrafik\ncompanion\nwww.merlin\nr230.i53\nr230.i54\nr230.i55\ntahiti\nphototheque\nrakuen\nr230.i56\nsnoop\njaya\nwww.action\nthea\nslider\nnorbert\nyasser\naffiliation\nnotification\nwebmail.blog\n123456789\nrowdy\nmostwanted\nr230.i57\nwww.gls\nlistmail\nr230.i58\nflashback\nroach\nronin\nvz10\niakas\nbuzon\nalgebra\nplesktest\nwww.ccc\nrim\nsportscards\nhumanrights\nwww.ash\ngate5\na10\norwell\nshibby\nyouyou\nspade\nasdasdasd\nmail.new\nvam\nshenzhen\nfreetv\nimperium\ncrocodile\nyosep\nr230.i60\nr230.i61\ndemo22\nr230.i62\nmcr\nr230.i63\nvideo01\nquestion\ndejavu\nr230.i64\nr230.i65\nped\ncookies\njava1\ntmail\nr230.i66\nheath\nmedic\nsumit\nwww.enterprise\nsuraj\nskincare\nhabbocoins\nwww.view\nmoment\nraymond1\nsiren\nmma\nafl\nyomi\nspeedup\ntiara\na11\nactividades\nyjsh\nmercy\nwww.exam\npc01\nwake\ncomplex\nasptest\nsrv25\nvpndr\ntyrex\nimarketing\ntoolkit\nsunray\nwhat\nmmail\nwawan\nr230.i67\nwww.aqua\nminimalist\nr230.i68\nfantasio\nrockstar\nflor\nb.i19\nr230.i71\nr230.i72\nmakeup\nr230.i73\nwww.yo\nhacks\ntrivia\ndjh\nwww.os\nnewtest\ntong\nbusca\ntoma\nwww.mk\nsugi\nabdellah\ntiti\nvitamins\nr230.i74\nmangos\nwww.hm\nosx\nr230.i75\nyah00\nr230.i76\nkumquat\ndania\nadmin.staging\nin-discountvouchers\nmarios\nin-v4\ngds\nreserv\nr230.i77\nr230.i78\nnorma\nbibliotecas\nwww.rich\ngoga\nvilnius\nexim\nlimit\nwww.warszawa\nturquoise\ncascade\nstarworld\nthumper\ninfamous\nwww.empresas\ncapture\ncentenario\nsv0\narius\nvini\nr230.i79\npon\nr230.i81\nrema\nrn\ncolumn\nalfredo\nwebmail.extend\nhex\nr230.i82\nr230.i83\nsvn3\nr230.i84\nkona\nlms2\npsicologia\nsweeps\nbangalore\nadweb\nr230.i85\nfirepass\nhiroyuki\nwlan-controller\ncrucible\npoem\nr230.i86\nella\notrs2\nupload3\njdih\nfutsal\ntalktalk\nsai\nlu\nr230.i87\nde.test\nmental\nprivate.search\nwww.pandora\nactus\nhc2\nwww.station\nhg2\ngeonet\npauline\nvodoley\ngugu\nelsalvador\nblueteam\nsuzhou\nbene\nhobo\nhttp3\nsmsapi\nevelyn\nflair\nmotd\nmarket1\nlol123\ncleopatra\nr230.i88\njordan23\nwww.klub\nsimbridge\nwww.lang\nmoro\nwebsoft\nmedya\nnasser\nswp\nvps01\nmyvideos\nasl\nhealthline\nr230.i89\nblueocean\nkeywords\nmoma\nfozzie\npmis\nadmindev\nclever\nherb\ngrandfantasia\nimad\nedition\nlistserver\ngram\nsantacruz\nspeaker\nru1\nelizabeth\ndegreeworks\nfr2\nwww.espanol\npkp\nnani\nuz\nmile\ngratuit\nr230.i91\ncisco5\nserver09\nmichaelm\nxyz1\nwww.dk\nr230.i92\nautoshow\nbuzzard\nlppm\nflashchat\nmate\nmann\nlouise\nsprinter\nsportsmedicine\nless\nipkvm\ncorp1\nversion2\nkoda\nr230.i93\nmunich\nr230.i94\ndns2.inf\nmydream\nwww.free2\nk3\nbse\nr230.i95\nr230.i96\ngym\nurp\nstumail\ngreencard\nbaike\nillu\nalcohol\nr230.i97\nr230.i98\nvnet\nlionel\nmysql55\nfreegames\ngk1\nhoya\nmuslim\nbradesco\nznakomstva\nalex123\nwww.face\nhong\nr230.i99\nb.i30\nrincon\naviso\ngorgon\nnsr\nb.i39\nfreeway\nhigh\nr80.i20\nb.i50\nr80.i30\narb\nautodiscover.newsletters\nv8\nhead\npaginas\nhappyhour\nwww.advance\nautoconfig.newsletters\nb.i60\ndalian\nr80.i10\nglam\nalireza\nshura\nonlineshopping\nwww.hentai\noldbbs\ntoa\nskif\nyjsb\nrobson\nipa\nzlgc\nwww.fusion\ngggg\npankaj\nsleeper\nfm1\nryohchan\ngamp\nfive\npeer\noffshore\nrenegade\npic4\nback1\nsymfonia\nslogan\nartek\nvioletta\nramen\nkiko\nmabs\nwww.hacker\ntest1111\nwww.juegos\nb24\nr80.i11\nr80.i12\nreaders\nr80.i13\nusvpn\ndca\nb25\nmicro2\nrudolph\ntrabajo\nfsp\nr80.i14\nb28\nb29\ncona\netax\nkenko\nwww.admissions\nwww.campus\nkoks\nr80.i15\nmodx\nmail99\nhealthy\npl2\nkec\nr80.i16\nkorn\nb39\nps2\nactivities\ndisability\nedukacja\ndevweb\nwebline\ndale\ntema\nmegaplan\nlionking\nmanu\ndonation\nr80.i17\ntravelworld\nb49\nmetall\nmash\nkuki\nr80.i18\nmero\npalma\nyavin\nrapport\nwww.webhosting\nr80.i19\nmasha\nr80.i21\nloly\ninstitut\nfleo\nr80.i22\nkatia\ntanit\nautomobiles\nourspace\nwebdisk.tutorial\nnejm\ncaronte\nwww.tp\ncara\nwww.rs\narti\ntsukasa\nwww.nz\nr80.i23\nstorage3\nasem\nmoza\nwww.mz\nes1\npissing\nadmin.demo\numc\nyuka\nrouting\nanni\nstarscream\nwww.lp\nmip\nrel\nr80.i24\ngardening\nlille\nr80.i25\nmylib\nedt\npurchase\nr80.i26\ntomasz\ncta\niga\nknow\neffect\nrand\nwww.fj\nsono\naeris\nwww.el\nmount\nr80.i27\nchoice\nautodiscover.magento\nr80.i28\nautoconfig.magento\nr80.i29\naccord\nr80.i31\nnetoffice\nwebstyle\nr80.i32\ntupper\nhotjobs\ndreamseed\nc36\nlast\nsedna\nr80.i33\nquimica\nkasai\nbrutal\nmailout1\nkill\nvlast\nr80.i34\nr80.i35\nwww.try\nd17\nr80.i36\nd18\nwww.empleo\nnyc1\ncisco2\nfotograf\npaysites\nmora\nkenya\nr80.i37\nhdd\nr80.i38\nd23\nr80.i39\nd24\nr80.i41\ntvs\nr80.i42\nr80.i43\nr80.i40\nr80.i45\nr80.i46\ntribe\nd25\nmods\nnewsupport\nr80.i47\nr80.i48\nr80.i49\nd26\nd30\nsublime\ndesign1\nr80.i51\nsusu\ntenis\nbackend2\npvc\nsmartnet\nr80.i52\nr80.i53\nr80.i54\naddc\nr80.i55\nr80.i56\nr80.i57\nr80.i58\nr80.i59\nr80.i61\nsears\nposh\npochta\nr80.i62\nsvi\nhostgator\nr80.i63\nbuffy\ne22\ncontracts\ncontent-test\nr80.i64\nnat4\nspongebob\nsynchro\ncitrus\nstaffmail\nr80.i65\nr80.i66\nyves\nprem\nlonewolf\nherbal\nstandards\nautodiscover.books\nautoconfig.books\ntoucan\nkora\nsql6\nhost29\nsup1\nfw-ext\nhost31\nnat3\nchubby\nkbs\nwebdisk.legacy\nvmware1\npool-node\nr80.i67\nwww.filosofia\nwww.systems\nfpk\nb151\nball\ncanberra\nwww.cursos\nzebulon\nsimona\nboca\nchrist\nbluestar\ncosmin\navdesk\nwebdisk.shopping\nsyrup\n214\n4ever\nmtk\nwww.logos\nsago\nns.m\nebe\nr80.i68\nantenna\ndemoweb\nr80.i69\nabl\nects\nmssql7\ntj200\nmssql6\nborderless\nbremen\nkater\nwoo\npu\nq4\nfop\nr80.i44\natv\nblabla\nsaki\nwebservices2\nmayhem\nr80.i72\ntuk\nc20\nr80.i73\ncpk\nd20\nr80.i74\nr80.i75\nd29\nigame\nr80.i76\neducatie\nwikipedia\nr80.i77\ntemplar\nr80.i78\nsue\nkvm6\nf10\nsemi\nwmail2\nsera\nr80.i79\ngrc\nshon\nhabitat\nskt\nr80.i81\nr80.i82\nstill\nr80.i83\nsmsgateway\nmiroslav\nscuba\nrip\nstar1\nowa1\nslate\nr80.i84\ndandelion\nlivetest\nols\nwww.bj\nmeetingplace2\nwebdisk.auctions\nvds7\nwarlords\nr80.i85\nchichi\nvds15\nhqc\nworkshops\nvds16\nnewportal\nvds10\nvds12\nmrx\nme2\nwebdisk.hotels\ndroid\ncrack\nvds18\ns71\neight\nvds5\nvds6\nsour\nautoconfig.fr\nvds8\nautodiscover.fr\nr80.i86\nrowing\nloveyou\nveranstaltungen\nvm10\n35114\ncocos\n36114\nfr1\ns91\ntico\ndnsmaster\narh\nkefu\nksc\nilove\nresultats\nkao\nubnt\nr80.i87\nsule\nr80.i88\npcgame\nsnail\nvds9\nr80.i89\nlyrics\nidol\ndlp\nr80.i91\ns75\ntris\ngnu\nwaf\nturk\npaulus\nwaps\ncir\nr80.i92\nr80.i93\nwsn\nr80.i94\nr80.i95\npanoramix\niflow\nwww.ai\nold.nrelate\nmomo1\nwww.maths\nxeno\nontheroad\nr80.i96\nactu\ninternalmailrelay\nsgc\nwww.mech\nmystique\nr80.i97\nr80.i98\nbtb\nspe\nautoconfig.articles\nxone\nautodiscover.uk\noskar\nwww.horoscope\nharace\nwww.miss\npathway\nwww.brazil\naki\nautodiscover.articles\nwebdisk.uk\nr80.i99\nhelp1\nwww.revolution\nr80.i50\nb.i80\nwww.korea\ncreatives\nkep\ndynamic1\nr80.i60\nst5\ncons\nb.i90\nshake\ningrid\nimpala\nramadan\nbolivia\nstrategy\nuspeh\nbestfriend\napp02\nr80.i70\nsanjay\ncmax\nr80.i71\nwww.webcam\nwed\nmail-3\nmens\nresonance\nwww.form\ncharming\neld\nncaa\nfairytail\nwww.outlet\na.ext\nranma\nr80.i80\nimage4\nfiorekorea\nr80.i90\nenlighten\noscars\nems2\nwebdisk.suporte\nwebsitepanel\nrubin\nzola\nobi\nmonopoly\nbelinda\ngiochi\ndarko\nsunjoy\ndealclick\ninterhost\nex1\nr230.i20\nd.i19\nwebdisk.themes\nautodiscover.themes\nautoconfig.themes\ntd3xgamma\nreddragon\nunic\nwww.cas\ngdc\nr230.i29\nadhara\nwww.cma\nzoro\necms\nhao123\nm.qa\ntorque\nd.i29\nd.i31\nstupid\ntechwiki\ntrustees\nd.i10\nwww.eva\nlookup\nd.i11\nd.i12\nwebdisk.contact\nquan\nadam3\nkobi\nwww.stone\nd.i13\nasti\nwww.stars\nadam2\nmailhub1\nd.i14\ninvisible\nwww.owa\nnfs1\nwww.onepiece\nd.i15\ngranite\nabnormal\nparliament\nadventure\nobm\nenoch\nwww.salud\nprops\nwww.cb\nghost1\nenergia\nprecision\ncore4\nsbaweb\nrybinsk\nwebsystem\nautodiscover.analytics\nwww.tumen\njumper\nhse\ntone\nconcierge\nwww.est\nudp\nserv5\nautodiscover.social\nautoconfig.usa\npiggy\nwebdisk.usa\nmailscan\nrestaurants\nautoconfig.analytics\nwebdisk.track\nzenit\ncampbell\nautodiscover.usa\nthomson\nnoreply\ngrafik\nd.i16\ncoal\nd.i17\nsadewa\nreebok\navrora\nwac\nmaila\nczech\nfip\nclassics\nigre\nfeynman\nkonferencje\nd.i18\nala\nd.i20\nwww.be\nelm\nnori\nonline-test\nd.i21\npushmail\nd.i22\nd.i23\nkarolina\nwaterloo\ngoethe\nwww.eb\nd.i24\noferta\ncepheus\ns243\nwww.fish\nksk\nd.i25\nqd\nspoc\nwizards\nmam\nwww.seed\nwww.rap\narms\nd.i26\nadmin.new\nd.i27\nwindsor\nwebdisk.s\nd.i28\nd.i30\ntur\nr230.i39\nwww.3d\nnuage\nspx\nwww.houston\nbode\ncloud5\npchan\nd.i32\ncomtest\nnewblog\nd.i33\ntribute\nnweb\nformat\nclinton\nkb1\nqzlx\nabram\naruba\nwww.historia\nable\nwww.clinic\ntyper\nvacation\nxxh\ncancer.ucs\ncntest\nbohemia\nwww.berlin\nsouthwest\nwww.starwars\nc-asa5550-v04-02.rz\nwww.adidas\npodcasting\naristotle\nwww.mh\nunicom\ndev9\nd.i34\nvaughan\ngamebox\nc-3640-v03-02.rz\nzamani\nrencontre\nmerkury\natmos\nfibonacci\nc-4402-v03-01.rz\nc-asa5550-v04-01.rz\nworcester\ngreenville\nmontage\nrx\nb75\nketban\nrobinson\nb73\npczone\nblack1\nsri\nolddev\ndublin\nothello\nsitio\netraining\nakron\nprofessor\nlucky13\nprom\nharvest\nwww.backoffice\nwww.golden\nflv1\nautodiscover.tools\nautoconfig.tools\nflash1\nbht\ndoc1\nchibi\naman\nsenat\nnou\nfourier\ngcweb\nkgb\ndemotest\nd102\nwww.ayuda\nabby\nwn\nmycroft\nwww.mca\nwww.tb\nrussell\nvcenter5\ndl4\nldap4\nintouch\nautoconfig.teste\ndirsync\nautodiscover.teste\ncmsadmin\npune\nzigzag\nxboxadmin\nredapple\nkenneth\nmicah\nwebdesigner\nd.i35\nwww.alice\nniel\nd.i36\nnhac\nposte\nmerc\nvpscp\nfairfield\ndev.mobile\nsecondlife\njeeves\nav2\npublicftp\nwild10\nd.i37\nd100\nwww.chicago\nbangladesh\ncardiff\nrenaissance\niblog\nleadership\nkimjm\nofis\nwww.smtp\nafterimage\nwebmail.manage\nombudsman\ndla\nfibo\nfort\ngrenoble\naoc\nnieuw\nscreenshots\nzillion\ntestservice\nxxl\nminfin\nwww.gap\nzan\nsamo\nirc1\nernest\neh\nprospero\nphoenixguild\nwiz\ngv\nwww.oxford\nhspc\njo\nws122\nnet3\ndpr\nm.media\nns171\nns181\nrowlf\ncockpit\nautodiscover.go\nzpanel\nnofear\nucc\ncena\nws202\nbayes\nautoconfig.go\npyrite\nmail003\nsysaid\npm2\nsni\ntokiohotel\nsng\nandante\n236\nshy\nwww.s5\nwww.surveys\ncatapult\nwww64\npeugeot\nmct\naap\npowerdns\nqqq\nacr\nupi\nzerone\nmetin\nelohim\nsaab\nosa\nserver34\nwww.halloween\nserver37\nfausto\nserver39\nvcenter2\nimghosting\nserver55\ndining\napa\nmlb\nrhubarb\nlsj\nlsd\nmatin\ngiuseppe\nnas4\nsalut\nceti\ndido\nmft\nlpg\nhogar\nmedved\nllama\nh70\nwww.college\nm15\nh16\nh17\nh18\nlf\nh19\njks\nere\ndenial\nwww.wow\nfirenze\nddr\njhc\njap\nesx8\ns60\npaddy\ndmp\nngwnameserver2\nmycampus\ndrs\ndsm\nimgmulti\nnewwebsite\npartizan\nusa2\nconstellation\nwww.production\netm\nwww.v5\nevg\nhan\ngep\nwebdisk.panel\nteststore\ngil\nggs\nwebdisk.erp\npromo1\nautoconfig.erp\nmisaki\nautodiscover.erp\nipt\nelt\ncivicrm\nprogramy\ndks\nsigma2\nlap\noperation\nbookit\ndin\nmail.sex\nchj\nngwnameserver\nwww.its\nboy\nwww.tapety\ninmotion\ncbm\nsaeed\nextrem\nh2h\nhustler\nxcite\nossec\nbch\nvideodemo\ninhouse\nwww.ftptest\nraghu\nbb2\nhost112\nsheila\narhiv\nverne\nloan\norigin-m\nx5\nwebui\nbigone\nsmtpauth\ngilbert\nmamo\nwww.bib\nsv51\nmaca\nvpc\ncadmium\ndago\nsoar\nteo\nmusic2\nwot\nonenet\ncongress\nbunker\nabaco\nlazer\nwebqa\ngaby\nkkkkk\nserveur\nwww71\nwww66\nwww49\nwww74\nwww54\nwww62\nds7\naron\njuly\nwww63\nnoodle\nwww65\nwww67\ntoot\nwww56\nnc1\nwww55\nwww.imagine\nredirection\ngreenday\nwww48\nhost100\nadb\nwww53\nhost103\nmda\nvik\neveryone\naberdeen\nooc\nlatitude\nsubdomain\nwww.direct\nloans\nwww.omega\ntmt\nstv\ndistribution\nseb\ntsw\neam\nweb2008\ndnt\ngbp\nhns\nkdl\nesg\nbpi\nannapurna\nstaging3\ntestwebsite\ncs7\ncurie\nsdx\nmx.dev\nvertigo\nsandie\nghs\nhost114\nautodiscover.dir\ngtp\nptm\nwebdisk.dir\nbluebox\nshinbodenki\nhost115\nitf\nwebwork\npdg\ntigris\nautoconfig.dir\nsccm\nsimka\nautodiscover.hosting\nqam\nmonitor-dev\nautoconfig.hosting\nmsf\nangeldesign\nhost118\nwww.properties\nol\nmsweb\nwu\nnonprofit\nflying\nphuket\nmna\nkobold\nshx\nuucp\nweixin\npam\nmdp\npit\nlota\npinnacle2\ns150\nns151\ndhcp3\nzhuanti\nnetinfo\njulien\nkundencenter\nfortis\nliveupdate\nsavremote\nbishop\nsii\nfotoservice\ntgs\nfmp\nsvn1\npolis\nfil\nvb4\nharrypotter\nphpmyadmin1\nwin29\nbistro\nwin26\nwin25\nwin24\ncrm2011\nnewhome\nwindows2\ncurso\nmack\nshoes\nwin01\nbetelgeuse\ncavalier\noutils\nesolutions\narena1\ndylan\nmichaeljackson\ngrab\n09\nband\ncle\nalpha3\npumba\ngunsnroses\nmysoft\nweb155\nwww.offers\nbetting\ncomps\nweb153\ndb7\nbeko\ndb10\nwww101\n4all\nweb152\npriv\nautodiscover.development\nflyfishing\nhimawari\nautoconfig.development\nw12\nbowie\nportable\nrobbie\ndhcp.zfn\nftp16\ngail\nerptest\nftp17\nbiblos\naragon\nprovider\ngemini2\nweb134\nkakaku\ntest08\nweb112\ncornerstone\nwww.genesis\ncp03\ncorex\ncapecod\ndrag\nmm1\nstaging-www\nweb103\nemax\ncp14\nwww.biology\npsearch\npyro\nweb100\ndarshan\nover\nws111\nangeles\npagamento\nftp20\ninformatik\ndns-1\nsba\nanalyzer\nterminal2\nbanking\nship\nse4\nelsword\nital\nws112\njoda\nkila\nnsf\nws121\ntemp3\nws131\nnizhnevartovsk\nws132\nwww.gfx\nsoftball\npano\ntheory\nweb211\nws141\nexch1\n78\nprefect\nwww43\nws142\nclyde\nws151\nws152\nalexx\ngeo2\nws161\nws162\nenjoy\nginga\ncoma\nremi\nilan\nws171\nweb81\nweb55\n82\nzimbra1\nws172\nsiti\nweb37\nfilr\nmoses\n85\nws181\nstatic6\nwebdisk.services\nws211\nwww.jb\ntess\nenlaces\nsge\nfinancialaid\n84\nwebapp1\nws212\nwebsvr1\ntabi\nindianapolis\nconnect3\ncp16\ncp11\ncp05\npromise\nhistorico.vestibular\ndevshop\nfencing\nvmhost1\ndbtest1\nsc1\nprecios\nwww.extreme\nmvs\nhubbard\nmanabi\nstraylight\nplanetlab2\nplanetlab1\ngw8\nwebserv\npayonline\nwww.j\nappgatecl\njimi\npdns5\nkhayam\nstu1\nsu1\ndena\nsahand\natena\nacme2\naxle\nscar\nresize\nacceso\nquince\nredirect1\nnet4\nmx-4\nsdfs\nbelgique\npier\njuggler\npepo\nonex\ndell1\nallinone\nblackshark\ncmf\nmovi\nsrinivas\nmylink\nd112\nmcdata\nforma\nhcm.nhac\nsessions\nus.nhac\nintranets\ndev8\nangarsk\nvm-jorum-live\nulanude\nsanger\nwww.katalogi\nkatalogi\nshaw\nkitkat\nkidney\nyew\nweboffice\ndms2\npwd\nwww.everything\nimgg\nimax\nvalentin\nyankee\nhexa\nhere\naccount2\nmetalib\nmensagens\nws-payment\nwww.czat\nbipolar\nbeneficios\ncs13\naac\nedd\nwww.50\nwww.po\nsaravana\nwin03\niba\ns10145\nhost40\nhost37\nbenten\nups1\nwww.dh\ncaf\nssmtp\nspd\nvs6\nhost27\nsantamaria\nargent\nhost26\ndcm2\ntyros\ncarreras\nso1\ncyrene\nnathaniel\nworkgroup\nterpsichore\nmail001\nelecciones\ninteract\nseshat\narek\ncallofduty\nlibcatalog\ntorch\nwww.lego\nbosei.goto\nimages.platform\ndco\ndec\nfuze\ninterracial\nsantalucia\nfolderman\nblag\ndom2\nacache\nhost24\necn\nantiguo\nccache\nhiring\nfern\nhost50\nwww.chatbox\nprofessionals\nhost34\ndpe\nwww.sami\npreview-domain\nhost32\ndivinity\nfet\nwww.database\nselma\nkarnage\nficheros\ncl01\nwww.hack\nwww.killer\nemeeting\nwomenshealth\nmajestic\ndomainadmin\nmxi\nmxo\nlohas\nknowhow\nwww.miass\nmsu\njag\nvyborg\norigins\nnorthwest\nvps128\nvps127\nmuhammed\njst\ncloudcomputing\nvps020\nwebdisk.www\nwww.signup\nvps110\nvps034\nmedia-1\npics1\npics2\nmcserver\nmvm\ndiz\ndga\nwww.arhangelsk\nulan-ude\nwww.police\nsankt-peterburg\nwww.ivanovo\nepub\nhiraoka\nlbc\nkhb\nmatsunaga\nseto\npoplar\nadachi\nssl6\nssl11\ndalton\nioc\nilm\ncamille\njan\nsolon\ndjinn\nrko\nmuppet\nvenise\nmoorea\nbudo\ntest.api\niif\nitalian\nzazcloud3\nzazcloud2\nzazcloud1\nishare\ntik\ngad\nfer\ncasual\nfec\nuo\nwww.si\nfca\nfao\ndta\nlibftp\ngrendel\ne-learn\nntp01\nmantenimiento\nonecard\nermis\nbeautystyle\new54384r9c9hyy\ncompany1\nfreespace\nnfe\nrw2\nrw1\ntos\nibk\nmftp\nbragg\ntest003\ntest005\namd97\ntest0429\nnetowl008\noldhost\nnbc\ntubo0626\narthritis\npainting\ncce\necomm\ncharis\numar\nitil\nbahamas\nwwwstage\nwww06\nwww05\nbigfoot\nmessageboards\nwww07\nstage01\nwww.answers\ncountrymusic\nvox\nvweb1\nworms\nzep\nadmiral\nk4\nbrenda\nlemlit\nwww.ranking\nwww.harmony\nbiologi\nproxy6\ngw01\nquitsmoking\ndestination\npartnersite\nexperimental\ncmsdemo\nwincp\nxs2\nlll\nrc1\nelms\nwww.secrets\nsaurabh\ndomainmanager\nwww.bolivia\nconcrete\nbsi\nvalera\nwww.filmy\nwww.muzica\nksiazki\nrda\nwww.interface\nwww.millenium\ndepartments\n112233\ntse\njail\nlocalhost.test\nnwoclan\nwww.roma\nwww.ptc\nusp\nzn\nzappa\nhaunter\ngs3\naspnet\nsym\nsv55\nsv33\nsv32\nsv12\nsv11\nwww.dn\nsv14\ncorina\nkurdistan\nmalina\nkvm5\nwww.bulgaria\noto\ngods\nhala\ndmo3\nxymon\ntlp\nwww.emperor\ntribalwars\nsitestudio\nwesam\ncomprar\nhutch\nwilkesbarre\nmtm\naozora\nmrt\ncristy\nbench\nmusicians\nstarz\nmonitor4\nsysy\nwww.key\nfiatlux\nralf\nanimax\nchapel\nwww.les\nwww.belgorod\nsadik\nreign\n6arab\nctn\nedn\nwww.neu\nena\nkaizer\nepk\nbuyandsell\nkaz\nese\nocm\nwitnesses\nweb2011\nweb2009\n11111\naspect\ninthebox\nsantamonica\nparody\nbenji\nadmon\nzmm\nmx.blog\ngrandcoteau\ngi5\n229\ncours\nmypics\nfem\nalucard\nftp.media\ncalidad\nwww.sexshop\ngradius\n7oob\ntai\nwww.egresados\nacj\nvbtest\nangel2\nnail\npotter\nakb48\nhoneypot\ncsl\nminimal\ntvguide\ntv3\ncoe\nbolton\ndisclaimer\ncmg\nwebdocs\nvacancy\nbro\ncitrine\nmprod\nawp\npraxis\ncate\ngb2\npixfirewall\nboardroom\ncoolstuff\napplyonline\nf8\nmodelo\nasm\ncapitol\nnewbbs\nweblab\nkettler\naigle\nrainier\napn\nwww.dell\nwww.surf\nkmv\nbron\namu\nazc\nsanok\nsustainability\nindo\nh24\nale\nacs3\nftp.ads\nlocalhost.new\nvcp\namie\ns925\nsturm\nmt4\nwww.sanok\ne-academy\nitmail\nsignature\npeanut\nwww.bydgoszcz\nszczecin\nmail-in2\naces\nadm1\nwww.olsztyn\nkay\nfaye\nmxrelay\nactiva\nwww.xbox360\nsig2\ntda\nwhistler\nroses\nchao\nbta\ndevsupport\nethel\nmcdonalds\nrecall\nallison\narsiv\nyi\nmikolajki\nlsaccess\npila\nike\nwww.underground\nvioleta\noce\nxara\niz\nxfer\ngag\nntserver\npolling\nvitesse\n124\nlemmy\n115\nwww.psd\n108\n3e\n102\ninternacional\n107\ncyrille\nmt2\nwebedi\nvungtau\nbuff\nothman\nvpnex\nagw\ndst\ndarin\nantivir\ninventor\nssg\nmist\nkurt\nclient2\njona\nstanley\nespero\nraul\nsmooth\nmum\nvolt\nreuters\ndb03\nwww.deportes\nrpl\nstorehouse\nmiri\nalex1\n2pac\nalternativa\nsecim\nwee\nonetwothree\nreese\nintermed\nkolkata\ntus\nloc\nwww.arena\nparanoid\nwww.bingo\nkobra\nprazdnik\nchaser\ndasher\nwww.tambov\nmony\nwww.tms\ndpstar\nhos\nsev\nneptuno\ncampfire\nwww.chaos\nmsg2\nwm4\nwww.brand\nwww.konferencje\nloop\nentrance\nspider1\nomserver-iscsi1.srv\nminer\nbux\ncop\nserv11\nnw2\nenergo\nst16\nplotki\nst10\nst13\naip\nwhitepapers\nwww.denis\nfw4\nwww.intl\nwww.princess\nwww.dot\nrets\nims1\ntheboss\nkes\naspen\nwww.olympic\nchemical\noid\nmanila\nwww.annuaire\nhiburan\nsalomon\npland\npbx2\nrave\ncob\nbanco\nsaul\nout2\ncarnage\ndoug\njtest\nhilal\nmaintain\nrptest\nsalo\nwww.cyber\nlwp\nsabre\njjxy\nautoconfig.wap\nwebdisk.wap\nautodiscover.wap\nwfs\nmink\ndstest\nsstest\navantgarde\nmote\ntalon\nfulcrum\nluckystar\nwww.first\nwebmoney\nyana\nachinsk\noceanos\nariadna\nwww.popup\nfreehosting\nzaza\nwww.girls\ngluttony\nauckland\nmme\nwww.ed\ndoin\nlibcat\ntuananh\ncarto\nmakassar\naann\nadda\nmisa\naddy\nbadr\nalix\ndim\nally\nbmw1\nguanli\nbeat\nbebo\namun\nidp1\newb\nlp-infracom\nmanis\nlp-interbusiness\nbibo\ncaci\nasif\nashu\narya\nwww.stk\namway\nappa\nvladikavkaz\nnsl\ngaz\nkolomna\nhooligan\nmole\nwebdisk.hr\ntut\nbold\nboot\nazad\nchiz\ndano\ndavi\nburo\nacct\nbk4\nwww.kevin\nehab\ncarte\ncccam\nseotools\nwww.beta2\nbod\nhajj\nresidentevil\nhosting0\nbox4\nmartins\nlilly\nkhabarovsk\ntycho\nclement\ndilbert\nsipfed\nagni\nfulton\nweb70\nshelby\ngreene\nbertha\nmail.plus\nwww.basket\nbigstar\nkabu\nmiledi\nvili\ngapp\nwww.motor\nvineyard\ncitrixmobile\ngraham\nmaks\nord\nwww.politics\ngodlike\nkampanj\npeixun\njsb\n200\nkontakt\ngertrude\nqks\nplease\nluisa\nmagia\nagm\ngauguin\nglenn\nkristina\nfurious\nosk\ngmp\nipb\nipd\nsintra\nlav\nwww.andrew\nfoxx\nome\nmail.staging\ntat\nkxfz\nbwch\nvit\noverlook\nadmintools\nfito\npc02\nsitebuilder2\nwolfe\ntati\nuniverso\ngola\ndelo\ndies\ngora\nedem\nsvet\nwww.rabota\noscar1\nskorpion\nhina\nhinh\nrtrarccore\nmuaythai\nsysteminfo\nneruda\nscruffy\nehra\njago\nelektra\nhieu\nimas\nda3\nsibir\nimghost\niter\nfacility\nskill\nforfree\nradiomaster\nmail.office\nmatan\ndnepr\ntashkent\nania\nwww.doska\nmirror4\ngamedev\nexpresso\nmail.info\nkely\nwww.sonic\nwww.texas\nmmr\nnep\nportrait\ntogether\nstarstyle\nmta4\nwww.diamond\npop.m\nsmtp.m\nftp.shopping\ndnscheck\nwebdisk.stream\nmaas\nlips\nak1\nkuro\nwww.vegas\ngerardo\nmich\ncmo\ndivision\nneha\nmrak\nnikki\nengel\nhomeloans\nlyncws\nkras\nwww.special\nlnx\nmedia01\nwww.avatar\nweb2010\npein\nrico\npeng\nmedia03\nopia\npos1\nwww.promote\ncontingencia\noutmail\npop01\nredo\nkks\n195\nfst\npelops\n4arab\nraa\nron2\ncrypt\nphorum\nlombard\nshar\nwebdisk.traffic\nsimi\nsimo\nwlw\niweb1\ntami\nfreemusic\nstormwater\nsouk\nautodiscoverredirect\nwww.asp\nwebdisk.pt\nstfu\nlsm\nusmail\nvulkan\ncnmail\ntobe\ntuba\nnetapp\nflexmaster\nsenna\nwala\nxdsl\naloe\nworldnews\nfallback.preprod\ninw\nautoconfig.vietnam\nabner\nkuwait\nwww.mock\nwww.wetter\nwww.mexico\nautodiscover.vietnam\nwww.mmm\nautoconfig.uk\nwww.egypt\nlecture\nss01\nmbeta\ndenise\njuju\nwww.kerala\nsharepoint2010\npbi\nprasad\nserver81\nwww.smf\nbc2\nwg1\nwww.webmail2\ntm1\nwebdisk.events\nseo1\ntriad\nkrasnogorsk\nwww.44\nwww-neu\nwww.vl\ncms4\nwebprod\nwww.pagerank\nwww.kurgan\ntourist\nemag\nrmm\nsimpeg\npsinfo\nkariera\nopenvas\nodysseus\nflag\nwww.jamie.users\nwww.eozkural.users\nfwwilson.users\nwww.angelware.users\ndavard.users\nwww.malkara.users\nmarkufo.users\nwww.mg4rci4.users\ncitrix3\nwww.trial-4e2df4.users\nzsjy\njessicagrehan.users\njonathanmann88.users\nldapserver\nhelensoraya.users\ntimesheets\nwww.sls\nwww.kruse.users\nadm3\nwww.trial-14d203.users\nwww.lukestuff\nchltlahs\nwww.finntimberhomes.co.uk.users\narias\nwww.trial-f40c2e.users\nwww.rubber-facts.users\nwww.johnmcmanus.users\nwww.test1.users\nwww.premieredance.users\nwww.securehost2044.users\nwww.moonrakers.users\nbleronuka.users\nwww.test.andi.users\nwww.humble.users\ndb12\ndb11\ndecor\nvm14\nvm13\nrobtest1.users\nconta\nskippy\nwww.moonjam.users\ndhcp02\nwww.tpj.users\nwww.mariajane.users\nwww.bohemia\nlovejoy\nvds20\nvds19\nstarmusa.users\ndrink\nwww.sunrise\npcbscott.users\nvds11\nvds17\nminneapolis\nwww.alexmountford.users\nwww.alexb.users\nwww.carly.users\nwww.cyanideshock.users\nvds24\nvds23\nwww.a1\nvds21\njezz.users\nkata69.users\nsweepstakes\nmolibi.users\nnewmarket\ntrial-4e2df4.users\nmichael999.users\nvm9\nvm8\ntoupiao\nmushroomgod.users\nmacau\nstuckey.users\ngomobile\nyandex\nbuka\ntadimeti.users\nbeasiswa\nwww.ukbikerz.users\nwww.omoikitte.users\nflore\nflori\nwww.cardigan.users\nsocialengine\nbrp\nprzemo\nbanks\nfreud\nwww.jessicagrehan.users\nfireworxstore.users\nmikepower.users\nbex.users\nmst2\nbertrand387.users\npublicshare.users\nwww.mrmarkmountford.users\nalutto.users\nnewchurch\nwww.plants1966.users\nwww.slider69gdw.users\nphpmyadmin01\npaulmasters.users\npoptest\nblackcat.users\nnew.shop\nbackup1-10\nwww.msfbiz.users\nguido\nwww.alex3410.users\nrouge.users\nphone3\nwww.artsutorus.users\nlaboratorio\nhoshi\nlmarsden2.users\nwww.c-electrical.users\nchrischarlton.users\npasadena\nwww.php54\nwww.onlinedatingguru.users\nwww.fireworxstore.users\nwww.lyonsqc.users\nwww.europa108.users\ntrial-14d203.users\nbackup1-1\nbackup1-2\nbackup1-3\nbackup1-4\nbackup1-5\nbackup1-6\nbackup1-7\nbackup1-8\nbackup1-9\nwww.trial-37e040.users\nkhainestar.users\ntrial-38af15.users\nwww.forasf.users\njinerenco.users\nredhotme.users\nwww.reumatologia.users\nwww.magento.sapin.users\ncartridgeworld.users\nwww.robtest4.users\nwww.dynamic\no3\ndhingli.users\nivana\nhindsjohn2.users\nwww.kandyug.users\nwww.takeley.users\nitube\nforsale\nsvc1\nwww.chrischarlton.users\nkerry\nac1\nmockingbird\nwww.mfarry.users\nthebeach.users\nreumatologia.users\nfuturewasp.users\nnode4\nassistlink.users\nwww.thepropertyjungle.users\nwww.blackbeard.users\nrfine.users\ncat2\neai\nwww.binary.users\nsamus\ndna-decals.users\nwww.digitalfilmmedia.users\nmagna\nm.apps\nsecurehost2044.users\nwww.paulie.users\nwww.timhoverd.users\nmclean\nwww.custom\nlb4\nwww.asb\nwww.razzz.users\nwww.sina\nwww.invertedmonkey.users\nwww.dsimkin.users\nfinntimberhomes.co.uk.users\nnewengland\nwww.talos.users\nwww.scottcook.users\nnoobs\nwww.rsmith1.users\ncfos.users\nlr\nmagali\nvip6\nwww.kata69.users\nwww.jackson\nphp1\nwww.dtc\nlfm\nwww.tumpin.users\nwww.bertrand387.users\nchrismartin60.users\nwww.publicshare.users\nwebdisk.sales\nhobe1.users\nmoonrakers.users\nmlsw.users\nermm2\nphp4\nwww.imagines.jinerenco.users\nwww.davemountjoy.users\nwww.text\nhandjob\ndbutler.users\nthetwistshow.users\nwww.stuckey.users\nchristophe\nwww.gingenious.users\nosh\nwww.kitay-na-dom.users\nwww.jayvanbuiten.users\nnapa\nrobtest2.users\ntest.jmarnold.users\nsql5-replicat\nla-tardiviere.users\nwww.educacion\nwww.elskitchen.users\nsave1\nquito\nshiki\nlongbeach\nwww.can.users\nsquid1\ndarranstewart.users\nwww.bendidit.users\nwww.g4axx.users\nadamcrohill.users\nblog.pcbscott.users\nlukewhiston.users\nwww.chrismartin60.users\nvideo.etools\negysoft\nedicion\nsenate\nwww.testt3.typo3gardens.users\nlatex-facts.users\nwww.woman\nanilaurie.users\nmsfbiz.users\ntest99\nwvagc.users\nmailrelay1\nrocio\nepic2\npgu\ngeorgesbigshed.users\nesra\neconomica\nbeef.users\nlaurencepeacock.users\nwww.elle.users\nmoneyonline\nrui\nartsutorus.users\nwww.jquery\ncinar\nsfera\notsukaru.users\nvs10\nbinary.users\nwww.clean-wheels.users\nbullets.users\naddy.users\nbeartrio.users\nkate.users\nwww.cgt.users\nplaces\ngrevstad.users\nwww.trial-38af15.users\nrainbowmassage.users\nforasf.users\nradu\nwww.darranstewart.users\nadmanager\nwww.q4nobody.users\nwww.nfenn.users\ndigitalfilmmedia.users\nc-electrical.users\nwww.techit.users\nbanda\nwww.unicorn\nwww.victory\ncan.users\ncalculator\nwww.wordpress.typo3gardens.users\nsketchbook.users\nwww.de-jay.users\nautoconfig.home\ntrrocket.users\njohnmcmanus.users\nautodiscover.home\nsforum\ntanga\ntesting.another.users\nwww.blueleaf.users\nwww.lexicon.users\nwww.latex-facts.users\nwww.cpmotors.users\nwww.beacon.users\ninspectoriguana.users\nmail.666\nwww.paminfo.users\nmfarry.users\nattorney\nukbikerz.users\nrobtest3.users\nonecandle.users\neozkural.users\nwww.imaginary\ntpb\nserver69\nwww.tmedwaysmith.users\nwww.philcain.users\nadmin-dev\nwww.html5\ns61\nheatsinkbikes.users\npaulie.users\nblackbeard.users\nwww.zaphod\nstar5\nautoconfig.office\ncgt.users\nwww.heaven.users\ns82\nautodiscover.office\ncarly.users\nwww.thetwistshow.users\nwww.timmargh.users\ns69\nwww.bex.users\nwww.paulg.users\ntumpin.users\ntest.andi.users\nwims\nssa\nwww.szkolenia\nacross\nbadminton\nwww.lmarsden999.users\nkmail\nwww.adamcrohill.users\nwww.eleven\nwako\nwww.veritas\neggs\nwww.lukewhiston.users\nwww.jezz.users\nccr\nmail.dora\nthien\nwww.albarnes.users\nadserve\nwww.buy\nwww.pingpong\nimsandy\nrecorder\nwww.davidives.users\nwww.weightloss\njackdavies.users\nigrey.users\ntkk\nokami\nrwd\npremieredance.users\ncommunication.users\ncrossfire\nhvc\nwww.dhingli.users\ngoa\nsander\ndsk\napo\nwww.medicine\n7stars\nwrite\nqw\ndns147\ndns148\nbrianna\nwebserver3\nwww.smash\nwww.heatsinkbikes.users\nweb83\nwww.nagios\nweb77\nshankar\nnsx\nkxfzg\nbih\nftp21\nserver04\nweb183\nweb182\nwww.ks\ncardigan.users\ntpj.users\nlb0\nvideo6\nalexatack.users\nwww.jasonthain.users\nwww.lv\nuni-regensburg\nsarahedwards.users\nvideo5\nwww.nm\ncaoshea.users\nelskitchen.users\nweb170\nwww.thebeach.users\nwww.cyberwhelk.users\nstand\nishtar\nwww.flameboy.users\nwww.helensoraya.users\nleeanderton.users\nnab\nwww.wolf\nthepropertyjungle.users\nblade01\ng3las.users\nnavajo\nwww.mushroomgod.users\ninstitutii\nhesham\nmaiden\nalex3410.users\nwww.masters\nldapintern\nweb157\nfleetwoodmac\nbuttercup\ncomms\ndtest\nmining\nweb150\nwww.noapacherestart\nweb148\nwww.knowledge\nweb147\nweb146\nwww.purple\nefi\nweb145\nnames\nwww.genius\nhomeworkhelp\nweb143\nweb142\nweb141\nweb140\nwww.institutii\nwebdisk.catalog\nwww.worldspan.users\nmarch-dmz\nlibros\nmy3\nsupporttest\nweb138\nweb136\nweb133\nweb132\nweb123\ncorreio2\nwww.cse\npup\nco.users\nmisocial.users\nsterlitamak\nimob\nabakan\nwww.communication.users\nincest\nras1\nnfenn.users\nweb130\nweb214\nweb212\nntp4\nmacro\nwinners\nphi11ip.users\nwww.q\nweb207\nweb206\nwww.tadimeti.users\nmagento.sapin.users\ndaleel\nweb204\neleulma\nhi-tech\nweb203\nrpa\nwww47\npaloma\nweb217\nweb216\nm.store\nsigaa\npokeworld\nnusantara\nweb215\nbottletop.users\nwebdisk.ns2\nwww.jonathanmann88.users\nwww.millwood.users\nwc1\nweb87\nangelo.users\nweb86\nweb82\nweb80\nmynews\nmilka\nweb78\nwww.csr\nnanas\nairtel\ngreyhound\nwww.lmarsden.users\nweb137\nchrismadin2000.users\njacquimarsden.users\nuserweb\nmychat\nweb135\nweb131\nweb129\nweb118\nhayabusa\nweb205\nweb99\ntechit.users\nmx07\nautoconfig.services\nnoelle\njammer\nichat\nwww.lista\nmariko\nstw\nradioclub\nautodiscover.services\npublic1\nwww.tax\ntravel2\npublic2\nimb\nautodiscover.apps\nautoconfig.apps\ngerenciador\ndemon-gw\ntoplist\nsayuri\nwww.xceed.users\nhappydays\nirmucka.users\nhastane\nstream5\niibf\nursula\ntblern-scan\nblern-scan\nhabbohotel\nde-jay.users\ncrab\nwebdisk.demo1\nrac-scan\nkonstantin\nsidekick\ntblern1-scan\nclaudia\nsecondary006\nbra\ncsr12.crsc\ncsr11.sci\ngupta\ncar13.net\nmytime\ncar31.net\nstrm\nindi\namepop\nwww.dbutler.users\njayvanbuiten.users\nbookmarks\nwww.paris\ncird\nblitzkrieg\nleos\nthreadgoldj.users\nmillwood.users\nwww.chrismadin2000.users\nszablony\nwww.asfdgh.users\nrobtest4.users\nsh5\nsh10\nsh11\nnirmal\ndev03\npushingarrows.users\nise\ncdns1\nauthentication\nwebdisk.kb\ntest05\nigri\ntptest\nfarmasi\nwww.bleronuka.users\nplatforma\nftp.www\nsmail1\nseguranca\ndrucker\norig\nintra2\nunica\nprincipal\njamie.users\ntakeaway\nwww.tomfox.users\nwalid\nsmtp-1\nreminder\nwordpress.typo3gardens.users\nrov\ndesenvolvimento\ndimdim\nwww.sarahedwards.users\nbeacon.users\nheaven.users\nwww.df\nstuart.users\nwww.cfos.users\nwww.la-tardiviere.users\nvijay\nwww.fc\nbackdoor\nkruse.users\ncorpvpn\nwww.ff\npadang\nsecure01\nmonicabatsukh.users\nblackmamba\nwww.fi\nhost181\navc\nweb-prod\nmilestone\nmailgate4\nmagnesium\ns148\nskat\nsh13\nioa\nwww.cmc\ncosmology\nmemorial\nfuturama\nutc\nmail.uk\nhost127\nhost123\nhost117\necho360\nsh6\nhandle\nmosta\nfreenas\nmmorpg\nwww.webshop\nmekong\nex01\nwww.freestyle\nwww.w2\nwebhost1\ntraktor\nchart\ntechnologie\ntupac\nscreensaver\ncsu\ncentreon\nwww.ica\nsp3\nattpos\nfreelancer\nmariano\nketi\nvns2\nbkk\ncdp1\nwww81\nwww77\nwww80\npix2\nrsync3\narchie\neyeos\nnarnia\nsh12\nintranet3\npostino\narchon\ncashier\nmoodle3\ntest33\ngruber\nwww.meme\nundead\ntelephone\nwallflower\nfuckyou\nmaha\ntracy\nstandup\nloginlive\ninmail\ngecko\ntethys\ngator\nsombra\nunnamed\nwirtschaft\nmedien\nhost126\nhost121\nacn\nat1\ntoker\nvhost3\nhost119\nwww.peru\ntug\nautoconfig.drupal\nautodiscover.drupal\ntestw\nbuc\nidtest\nctm\nsunflowers\nsmpp4\nene\nsmpp3\nmando\ngo3\nhbs\nrtb\ncensus\nwww.sexy\nh20\njumpers\nm16\nm14\nwww.drupal.publicshare.users\nh79\nh78\ncitycenter\nh77\nh76\nh75\nconverse\nwww.candy\nvdr\nh74\num-mailsafe-00\num-mailsafe-01\nh73\nh72\nmedica\nh71\nlaboutique\nsm07\nh69\nh62\nwww.test.jmarnold.users\nesx7\nink\njes\neuropa108.users\ntest1.users\niri\nisu\nmsupdate\nh23\nsmtp06\nh80\nwww.bullets.users\nfreepbx\nwww.rouge.users\nwww.fwwilson.users\npunisher\nadverts\ninstaller\nakademik\nwww.pushingarrows.users\nearnonline\nnex\nmovistar\nmill\nopenfiler\nsin\nwebdisk.forum2\noob\nlexicon.users\ncims\nfoobar\nrgb\nbabyboy\nauthenticate\nyemen\nwink\nsay\nkarsten\nm02\nhandel\nshree\ntnc\nns202\nns162\nns191\nbadboyz\nirc3\nnavier\nzap\nmaroon\nysj\nmarlon\nyuu\nmarseille\nmecha\nmarkos\nwww.ce\nwww.cg\nnumber\nbabar\nwww.dsp\nwebdisk.lists\nlovestyle\ntheboy\nmarche\nstest\ncrdp\nsocks\nnomercy\nboardportal\nzephir\nkirei\nmangas\nkms1\nmilky\nfacstaff\nlistserv2\nmindy\n315\nnatty\nfff\nwww.rb\nparadis\nreckless\nhannover\nkin\nicecream\nladder\nclarion\nwin32\nmmmmm\nmobel\nkimo\nzizo\npetunia\nnexon\nmoral\nkansai\nmilou\nbraveheart\nwww.yar\nathome\narianna\nu3\ncarrot\nkiseki\nn218\npika\nblackmoon\nvremea\nwww.vremea\nsada\nwug\nwoodland\nknockout\npronet\nqk\nliteratura\nblackrose\nmservices\naji\nwww.presentation\nattack\niadmin\nomani\nwww.1c\nparks\nversion\ngossipgirl\nyaka\nwww.ck\nwww.ly\nsega\npicka\ntweet\nhelpcenter\nunder\ntanto\nrenshi\nhouqin\ncolombo\nreferencement\nkusanagi\numail\nsponsors\nnid\ndfs\nmtu\nhcl\nkomik\nvarun\nirma\nhughes\nadmin8\nvisionadmin\nadmin4\nteste2\nwww.kronos\nroller\nvero\ndelete\nturnkey\nsvr1\njiu\ntucows\nleonard\nwapmail\naddiction\nvdb\nwww.thebest\nvgrp1\nplatina\nfree1\nnintendods\njourney\nsuperb\nwelcometo\nlunaris\nsense\nspook\nwww.luxury\nwww.servicos\noa1\nbonbon\nmacha\ngreenlight\nrodin\ntalbot\nans3\nbreakdown\nwww.ant\nserge\nletras\nrules\nautoconfig.docs\ndu\nautodiscover.docs\nade\nsheng\nwww.pma\nwww.out\ndth\ntammy\ncia\nads.be\niavfatnfoopio.be\nsiham\nzhidao\nimhn\nnagatacho\nbistrooz\nwww.cit\ngnt\nnobody\nsexxx\ndeki\nstadia\nnp13\nkth\numegari\nteebo\niml\nwhd\nwww.csi\nsquirrelmail\nsatya\nksm\nqy\nij\nnotepad\nsanti\nnes\nnickelodeon\nautobahn\nneverdie\nfls\nwww.developers\npis\nhacker1\nvoda\nwww.ideas\nkento\nsajad\niit\nwww.synergy\nwww.sci\nsnp\nwww.koko\nsor\nsatoshi\numk\nwet\nwmc\ndoctorwho\nstudio5\nguesswho\nsynth\nsysop\nezone\njoris\nmaize\nhusky\nyamanaka\ncachalot\nthesaurus\nharuka\ncollect\nrajat\nshikaku\nsylvan\nfoxnet\npeterpan\nkogao\ncamelot\nd35\nd33\npraga\ngraphic\nrudeboy\nmsdn\nanyconnect\na001\nd19\nfree123\nscorpius\naska\nyakutsk\nlicense2\nundercover\nsalmon\nmackay\nlakeshore\nqwer\ndarlings\nsowhat\nscf\nwww.mirage\nudec\nformula\naid\nwww.camera\npsychic\nsession\nzgloszenia\nlorenzo\nelf\nipv4.blog\nc26\neagleeye\nsmap\nucs\nleonidas\nkagura\nalban\nakiko\nasas\ndevi\nbefriend\npandy\nbe1\nwindy\nsalvation\nuto\ncain\npoweradmin\nkaras\namol\nb83\nb77\npiracy\naton\nb71\nflp\nohana\ndefault-mx\nesta\npso\nmunch\npsf\nqed\nb59\ntestns\ncrosslink\nrising\nb52\nb51\nchoi\na-hm-3107-diemthi\ndala\nmail.beta\nwww.mlsw.users\nwww.blog.pcbscott.users\nmfl\nmomo2\nalexb.users\ndann\nspaziocloud.users\nwww.leeanderton.users\nwww.jstebbings.users\nlac\ntmedwaysmith.users\nnet4u\nwww.khainestar.users\nwww.imperial\nlos\nwww.jacquimarsden.users\nchezzer.users\nwww.robtest.users\nlukestuff\nwww.madmax\nwww.foobaz.users\nwww.marlin2001.users\nwww.robtest1.users\nwww.monicabatsukh.users\nnaren\nwww.cartridgeworld.users\nwww.hobe1.users\nmotorola\nwww.stuart.users\nbendidit.users\nmayyubiradar.users\ncult\nwww.dkproperty.users\nh9\nema\nnabil\nonlinedatingguru.users\nefe\nmihai\ncwj\ne7\nmisato\nimagines.jinerenco.users\ntimhoverd.users\nlouie\nwww.jinerenco.users\nscottcook.users\njiji\nfaro\nnishiyama\ndusk\ncyberwhelk.users\nfeel\nwww.ermm2\nmetas\nprisca\nretry\naci\nlivetv\nwww.beef.users\nkunal\nmarlin2000.users\nmazen\nwendensambo.users\nerin\nrubber-facts.users\nmarty\nwww.electro\nmarsa\nwww.mikepower.users\nriverside.users\njasonthain.users\nnoapacherestart\nwww.threadgoldj.users\nwww.addy.users\npetehowells.users\nwww.kate.users\nwww.phi11ip.users\ninvertedmonkey.users\nwww.blackcat.users\ncyanideshock.users\nwww.anilaurie12.users\nmalkara.users\nhada\nmg4rci4.users\nvacuum\ngol\nvw1\nbsdb-cluster\nlmarsden999.users\nautoconfig.book\nq4nobody.users\nhhhh\nwww.aln.users\nautodiscover.book\nc2i\nwww.wvagc.users\nkrazy\nwww.angelo.users\nwww.rfine.users\nwww.kiding.users\nwww.markufo.users\nkoora\nigo\ngweb\nlevis\nblueleaf.users\nkokon\npro01\ndsimkin.users\nrazzz.users\nlenin\nasfdgh.users\ncpmotors.users\nmicho\nmoonjam.users\njuicy\nwww.caoshea.users\nwww.automation\nplaystation\nqa3\nlamar\ncronica\nmail.out\ntalos.users\nmaillog\nyf\nphilcain.users\ntomfox.users\nbestgames\nyyxy\nns8-l2\ntypo3.heaven.users\nmyanmar\nns4-l2\nkeen\nwww.spaziocloud.users\nwww.bottletop.users\njoint\nclimax\nperistilo.users\ntimmargh.users\naln.users\nangelware.users\ntrial-37e040.users\ngingenious.users\nomoikitte.users\nwww.georgesbigshed.users\nrobtest.users\nwww.davard.users\nplants1966.users\nwww.robtest2.users\nalbarnes.users\nwww.anilaurie.users\nwww.irmucka.users\njuni\nwww.redhotme.users\nwww.rainbowmassage.users\nwww.wendensambo.users\nfoobaz.users\njstebbings.users\nputra\nlyonsqc.users\nrgmcdermott.users\nwww.laurencepeacock.users\nmrmarkmountford.users\nwww.petehowells.users\nmarlin2001.users\nwww.michael999.users\njessy\nwww.testing.another.users\nthethink.users\nhumble.users\ng4axx.users\npreview02\nwww.thethink.users\nwww.jackdavies.users\nhukum\nwww.lmarsden2.users\ncheater\nflameboy.users\nboise\nwww.igrey.users\nwww.molibi.users\ndkproperty.users\nwww.sketchbook.users\nkandyug.users\ntakeley.users\nlin1\nanilaurie12.users\nwww.riverside.users\njairo\nwww.misocial.users\nwww.alutto.users\nsmtpa\ndrupal.publicshare.users\nwww.inspectoriguana.users\nwww.g3las.users\nmaro\ndavemountjoy.users\ns330\naaaaaaaaaa\nwww.marlin2000.users\nlemonade\nlmarsden.users\nmaul\nmayo\nwww.tomfender.users\nhumas\ncoba\nwww.simpletest\nkitay-na-dom.users\ngross\nkiding.users\nrsmith1.users\ntheo\ngreek\ngreg1\nwww.typo3.heaven.users\ngracia\nrockers\nwww.otsukaru.users\nelle.users\nwww.chezzer.users\nvirtual4\nwww.grace\nbitacora\nwww.baseball\nwww.beartrio.users\nhazem\nhayat\nwww.clienti\nwww.grevstad.users\nslider69gdw.users\nwww.retro\npaminfo.users\nwww.indiana\ntrial-f40c2e.users\nwww.onecandle.users\ntomfender.users\nwww.pcbscott.users\nwww.robtest3.users\nhanif\nwww.hindsjohn2.users\ndebugger\nxceed.users\nhallo\nhamad\nwww.trrocket.users\nworldspan.users\nmariajane.users\nwww.mayyubiradar.users\nwww.futurewasp.users\nwww.assistlink.users\nclean-wheels.users\nwww.peristilo.users\neplans\nwww.starmusa.users\nfreak\nwww.co.users\nwww.pool\nwww.test7\nwww.alexatack.users\nwww.dna-decals.users\nalexmountford.users\nnar\nwells\ndavidives.users\nechoes\ntestt3.typo3gardens.users\nevita\npaulg.users\nmmmm\nluxe\nsmail01\nwww.paulmasters.users\nska\nneno\nnera\n987654321\nwww.rgmcdermott.users\ndaniela\nwww.kit\nsli\nganga\nervin\nwa2\nwww.recruitment\neslam\nwebco\nfilms\nmmg\nmori\nepoch\nmoya\ncorps\nmsis\nimage165\ntest0\nimage163\nramona\nnoma\nqingdao\ntlm\nuranus2\ntorr\none1\npostgresql\nakbar\nfatma\nvip99\norso\ntyx\nproductos\nwebdisk.demos\nevolve\nppms\nhs2\nqqqq\nprint1\nsang\ngearsofwar\ndiabetes\nlostandfound\nshak\nfoa\nunm\ndaidalos\nsoya\norigin1\nsw93\nvesti\nsbm\nhummingbird\ntriathlon\ntoki\nshekinah\ntoku\ntoyo\ntrap\nibrands\nfcr\nxworld\njisan\nunas\nwww.bologna\nwait\npre-prod\nwant\nwww.career\nwebx\ndebate\nmonique\nwwwe\nendless\narmenia\nyohan\nzero1\nzeros\nshadowz\nspamd2\nspamd1\ninmed\ntibet\nyouxi\nwww.ccs\naccelerando\npub1\nfurax\ntogo\nhotaru\nwww.dan\ngmi\nitproject\nblackadder\ncoda\nfaceb00k\ndaver\naether\nrost\nlocked\nwww.don\nfacbook\ncabaret\ngame3\nroadshow\nesb\nzzzzz\nlsty\nautodiscover.scripts\nwebdisk.scripts\nautoconfig.scripts\nbrock\nmywedding\nensemble\nrenato\nayumi\nwolfgang\nwww.jen\nveg\nwww.samsung\nwww.isp\nhosting02\nwww.cash\ninclude\nwww.joe\nwww.gifts\nhibiscus\nkasumi\nrevolt\nmch\ngrid1\ncte\nnovember\nmaxxx\nsweetie\nsunfire\nwww.psych\nregi\nmycp\nivc\nmusical\ngamingzone\nwestend\nathan\nimagination\ndaydreamer\ndementia\ngrades\naslam\nagg\nhome01\narmin\nwww.sam\nfountain\narief\npasha\njobsite\narchi\nisabella\nwww2011\nwww.ek\nenergizer\nrevproxy\nslh\nsabine\nthinker\ndaisuki\ndutch\njustforfun\nwww.sky\nlfg\nknights\nflexible\nkahori\nschoolnet\nriseup\nptp\nwanted\nwww.ssd\nandes\nsaleem\nda18\nredirect2\nwww.ver\nwdc\ngentry\ndenmark\ncentaur\nnaos\nautodiscover.iklan\nautoconfig.iklan\nameer\napc3\naamir\nthefactory\npyxis\nvps12\ncdp2\ntest-mail\namour\nrealize\nis2\nbasma\nwww.nightlife\nsatsat\nlockerz\nphpmailer\njis\nnathalie\nbabak\nbdg\nfantastico\nstarnew\nrebecca\ngroup12\nwww.naruto\nasx\nskyview\nimusic\ntra\nwww.jewelry\nmaui\nadmis\nuser3\nfati\ncisco-pv2\ngooglemail\nbora\nlivescore\nhomebusiness\ngangster\nbigbluebutton\nabdul\nabdou\nabbas\ndotcom\ninfoline\nprobando\nsurface\nsensation\nfavorites\nbahrain\njeevan\ndreamgirl\nmsb\nblackfox\numzug\nimagestest\nvivid\nmlsrv\nmuzica9\nceit\ninra\nshanks\ncooking\nshiraz\nsoundbox\nerepublik\nloading\nrobocop\ndream1\nonestop\nimagem\nwebdisk.android\nsmartgroup\nautodiscover.photos\nmema\nadonai\ncrazyman\nautoconfig.photos\ncrypto\ndns04\ngamenet\nstronghold\nblogshop\npostcode\nrevolver\nstarpower\nsrvc\nwww.spider\nbromo\nsimulation\nmptest\nradiomix\npop.mail\nhangame\nrabbits\nadstat\ndever\nmydns\ndandi\nacademics\nwebacc\nbuggy\nsa01\nburgerking\nkant\nceltic\nnightingale\nhomebase\nimagelibrary\nbatista\nhobbies\nbbbbb\njacksparrow\nwebos\nm.new\nalmaz\nzoltan\nwww.proyectos\nfn\ndeutsch\ndevcenter\nwww.street\nmentalhealth\nfreelife\nphotoart\nwww.zeus\ntiptop\nhifriends\nftp.us\nsupport-test\ngalena\nwww.arizona\nautodiscover.portfolio\nautoconfig.portfolio\ncabin\ncacao\nfrankenstein\ncatch\nappserver\nhost53\nankush\nshopper\nsunbeam\nwww.tds\ndevin\nfcbarcelona\nvogue\nmailint\niskandar\nblade12\nmailscanner\nstic\nmagritte\nphysical\neoa\nanniversary\nnetgear\nbreak\npersonnel\nchoco\nlovegame\ntheghost\nfluorine\nbobtail\nwww.legal\nwww.pd\nwww.umwelt\nbhakti\ncindy\nsd2\nquota\nde2\napple1\ndokuwiki\nwww.arch\nhansol\nwww.educ\nsilkroad\nshalom\nwww.audit\nreg2\ns1013\ns1011\njny\ns184\npersian\npcdoctor\ncrazyworld\ncreativity\nspiele\nwww.hg\nalegria\nemploy\nela\nthienan\ns199\nhakunamatata\nexposed\npch\nhogwarts\nkabuto\nmerino\ncosmopolitan\nthames\nwww.vision\nmerian\nemilio\narvind\nbratsk\nichigo\nechos\ncydia\nmoore\neurovision\nlinkinpark\nmargie\ncastro\npcsupport\nfatal\ntomodachi\ns197\nstates\nfriendster\nnightwolf\nftpw\ns196\nhitman\nchameleon\nravindra\ntestman\nwww.cdc\nguatemala\nwww.cec\nwww.cem\ntestowa\ngustavo\nyousef\nwww.sugar\nprolife\nredstorm\ndaredevil\ns166\ncybertron\ndancemusic\nshushu\ns160\ns194\ns165\nsupermario\nwww.cartoon\ndear\ngrigor\ns193\nalicia\nnatsu\nmata\nelham\nsyntaxerror\nsuresh\nalvaro\nveteran\nfaithless\nnightfall\nethan\nthehacker\nmikes\nfall\nwww.delivery.b\nemailserver\nsilverlight\nmp6\nmp5\nnomore\nvm12\nitools\nlbmaster\nfranz\nbigboss\nrenew2\nalam\nlbslave\nfront5\nfront4\nwestcoast\nselling\nhydro\ndudu\ndresden\nkalki\ntarzan\nerebus\ngana\ngazette\ninstinct\ncluster3\nhiden\npalette\nmysql15\ngovind\ngreed\nmysql12\nwww.cine\narabtimes\nbrands\nblacksheep\nkam\ntop100\ngill\nuganda\nwww.ra\ntoip\nlinux5\ntheearth\nether\nbobcat\ns163\nwww.fear\nsmile2\nzi\ninstrumental\nfwd\nmyroom\nwww.content\njessi\nhypnos\njupiter2\nscarlett\nsirocco\nvpdn\ndestroyer\narar\nwarlord\nbuh\nrestricted\ntka\nphotonics\nlyceum\nfs10\ncipher\nkaze\naist\nfond\ncardio\na-dtap.kalender\nt-dtap.kalender\nd-dtap.kalender\nfile4\npass3\ngames4all\nlvov\nwww.c1\nsantarita\nfuturo\ncccc\nasturias\nwww.ivan\narmand\nhorizons\nsufian\nmohammad\nitb\ntesti\nwww.check\nscipio\ndavide\ntjj\nregistrasi\nwebcheck\nmetalhead\ntellus\nclick2\nfgw\nafghan\nsaravanan\nsamantha\nchatbook\nns134\nns135\nns137\nvagina\nminiclip\ndumbledore\npc13\nburhan\nharman\nnaim\nbamse\nwww.read\nzarabotok\nlog2\nwww.sara\nlogger1\npc5\nanzeigen\nsm10\nwww.wolves\nsearchengine\nyxy\nxgxt\nforum7\nhaitam\nwww.promotion\ntwit\najaykumar\nws7\npreguntas\nnewdb\npiramida\nws12\namicus\nmourad\ncordelia\ntc2\nwords\nautoweb\netic\npmail\nsuma\nkrasota\nmmi\nsmtpout1\nwww.ssc\nediweb\nemail02\nsout\nkomachi\narchiver\nms01\nms02\nphoto3\nnethack\nvpn10\nwww.mci\ncont\ngifu\nokayama\nwww.questions\nshashank\nyamagata\noec\nportaldev\ncmusic\nnotifier\ntns1\nwww.oklahoma\nwww.michigan\nannarbor\ntulsa\nmybb\npmg\nkabas\nbizcenter\nzl\nyj\npostgres\nantivirus2\ndaemyung\ndent\nsecure-test\nhelpnet\ndevcrm\nthinking\nwww.recipes\nmobileconnect\neuq\nclube\nsalesadmin\nis1\nsamy\nyess\nwww.flowers\ntstore\nvial\nsysm\nbibliotheek\nwww.tom\nvesper\nux\nmegaman\nwww.la2\nrainbow4\nrainbow1\nlikelike\nwww.yahoo\nfile5\nbrittany\npoas\nj25\nclass2\ngoogle2\nwww.pai\nedu11\nnewb\nwww.sommeraktion\ncrg\nhistorico.concurso\nsommeraktion\nautoconfig.community\nautodiscover.community\nsa3\nlinkproof1\nrouter3\nwww.gameover\nmoschino\nkoolstuff\nbeef\ntest25\ntechnical\nimai\nmailsecure\ntestftp\niaso\ngown\ntwp\nvadmin\nhealthlife\nserver38\nsearay\nlicai\nbackup60\nkamakura\npeliculas\nwww.nicaragua\nnoa\nyukari\neq\nhalle\ntestcrm\nnima\nste\ninfoview\nwww.nod32\ngena\nbabygreen\ndbgs\nsigahu\nwebmail45\nwww.blue\nwww.nas\nbrn\nstarmax\nwebmail40\ntamara3\nwebtera\ncampus1\nlsi\nhcs\nbecas\nwww.ie\nchois\nching\nnadi\nwebmail43\nwebmail42\nwww.sme\nwebmail47\nmartini\nwebmail46\nwebmail44\nwebmail41\nmena\nwebmail39\nwebmail38\nwebmail37\nwebmail36\nwebmail17\nlando\njango\nboba\nconimg\nwebdisk.galeria\nhost227\nreferrals\nstarmaroc\nctxweb\nmf4\nanket\neob\nwww.tas\ncwrumtas\nkess\nqaupl\nmesa-gnu01\nmesv-transit01\nmesv-transit02\nwww.venezuela\nmesv-transit03\nmesv-transit04\nkoma\nmesv-transit05\nwww.chocolate\nmesv-transit06\nmesv-transit07\nmesv-transit08\nmesa-para4\nnewmusic\nvpnslc\neng-core\nslc-para-poc2\nslc-para-poc3\nslc-para-poc4\nmvrscorea\nslc-wad01.sorensoncomm\nyacine\nmesva-vp-para3\nvcmessagea\necon-upl-vip\nmesa-ios-para1\nmesa-ios-para2\nmesa-ios-para3\necov-mo-para1\nisma\nyama\necov-mo-para2\necov-mo-para3\nflavio\njimm\necov-mo-para4\necov-mo-para5\nslc-para4\necon-gnu01\necon-gnu02\necon-gnu03\necon-gnu04\nwww.tamil\nsurprise\necon-gnu05\necon-gnu06\necon-gnu07\njeje\necon-gnu08\nhi5\necov-transit01\necov-transit02\nweb001\necov-transit03\necov-transit05\necov-transit06\necov-transit07\necov-transit08\nsc-email01\nmesa-para3\ncon-wad02\ndiemchuan2009\nfrancesco\nslccorpweb\ndns15\ndns16\ndns17\nnguyenvong2009\nslc-cuda03\ngrim\nmesa-para5\nchold\ncon-sql-sign01\nhydrus\nmvrsmessagea\nsmi-gurgle\nhrftp\ncon-tux01\ncon-tux02\ncon-tux03\nabsolut\ncontactus\ncon-tux04\nnaka\nslcv-ts-para1\nspanking\nslc-para1\nmesa-mo-para1\nmesa-mo-para2\nmesa-mo-para3\nmesa-mo-para4\nserverdesk\nmesa-sql-sign\nxnxx\nqava-para1\nqava-para2\next2\ndev.api\nqava-para3\nqava-para4\nslc-para-poc1\ndr-sojo-cuda\nonyxlb\nlistman\nmvrs-core-staging\necon-vmscuda1\necon-vmscuda2\nsogtest\nrealtunnel\nwoohoo\nslc-tux01\nslc-tux02\nslc-tux03\nslc-tux04\nliber\nmesa-upl-vip\ndrs-tux-01\ndbm\ndrs-tux-02\ndrs-tux-03\ndrs-tux-04\nmesa-vmscuda1\nmesva-ios-para6\necon-cuda01\nvpnmes\necon-sql-sign1\nmesacorpweb\ncuda05\nmvrs-statenotify-staging\nsc-email02\nurc\nfamilymedicine\ndboardiprelay\nmesva-vp-para1\nwerock\nmesva-vp-para2\nobchod\ncon-nimbus\nflasher\nmesva-vp-para4\nmesb-hold7\nslc-para2\nslc-para3\nlandscaping\nalejandro\ncon-ldap01\ncon-ldap02\nvrsiilms\nmessage3\necov-pc-para1\necov-pc-para2\necov-pc-para3\necov-pc-para4\necov-pc-para5\nmesva-ios-para4\nmesva-ios-para5\npatent\nnci\necon-tux1\nandy1\necon-tux2\necon-tux3\necon-tux4\nqadownload\necov-vp-para1\necov-vp-para2\necov-vp-para3\necov-vp-para4\necov-vp-para5\nmesva-ios-para7\nblackdahlia\nmvrsstatenotifya\ncuda6\nbourbon\nsymantec\ncuda7\nmesa-ldap2\nmesa-ns2\nsaltwapolycom\natik\nmesa-nimbus1\nmvrs-message-staging\nbluehost\nntouchftp\nproduction-www\nbastet\nmesa-tux1\ncomunidade\nmesa-tux2\nmesa-tux3\nmesa-tux4\nmesa-para1\nvccorea\nfelipe\nwonderdesk\nstatenotify3\nchenfeng\nkate\nqa-auth\necov-transit04\nreddwarf\necov-ios-para1\necov-ios-para2\necov-ios-para3\necov-ios-para4\necov-ios-para5\necov-ios-para6\necov-ios-para7\necov-ios-para8\nmesa-para2\necov-vp-para6\nslc-syslog01\nslcv-exedge01\nengftp\nmesa-ldap1\nwww.cdf\nue\nww0\nmataram\noi\nnewtimes\nspud\nusage\nwwx\nwebdisk.ar\nkirari\nmainweb\npajero\nlunch\nflagship\nfisica\ndevang\ndwalker\ndaejin\namiad\nadmin02\ngfactory\nsslvpn2\nzihu\ntranny\nchoral\ntomson\nboeken\nwidi\ntoons\nhull\ndars\nfarzan\nmillionaire\nbol\ncompetition\nfreewatch\nbilgi\nlaunchpad\nb319\nb318\nb314\nb312\nb320\nplanet1\nb122\nb120\nb115\nschneider\nwebdisk.toko\nshair\nroma1\nsummerschool\nsenal\nsejin\nhummel\nshinya\nbombit\nwww.vote\nwww.sitemap\ntimehost\nautoconfig.ip\nautodiscover.ip\necoplus\ngst\nkoeln\nstylen\nsubnow\nreweb\nhost08\ngwsync\nimg44\n193\nwww40\nstat3\nhitachi\nzencart\n207\n167\ninet2\n151\nsadmin\nstlike\n133\nmoodletest\nchester3\nadmin-remote\nimg15\nimg16\nwebdisk.tools\nnteam\nkcp\nverygood\nwww.22\nbuch\nmrbig\nnice9\ncolin\nbiyori\ngreenhands\ndiff\ncommunicator\nfelicity\nscrappy\npostcard\nhabby\nvender\nrot\nnextgen\ndev-blog\nwww.novgorod\ndevs\nbarak\noptical\nfacebook1\nfacebook2\nwebdisk.ns1\nsoftzone\nsandbox4\nsandbox3\nkatsuya\nhamsa\nad01\nspor0\nsecim0\nw13\nartisan\nvulture\nfotogaleri0\nwasabi\npriyanka\ndebbie\nows\nsondakika0\nresident\nfileserver1\nrudi\nwin36\ngannet\nlafayette\nasw01swd\nturkish\nnetuno\nfirdaus\nadminservice\nbattlefield\nwattle\nedward\nwww.img2\njcraft\nmallard\nwassim\nshaun\nwww.darwin\nstork\nhoneymoons\nwaseem\nbf2\nqatest3\nmap1\ncw12\nsubekan\ntechnics\ncw11\ngraphicdesign\ncp07\nbelmont\nwaleed\nwren\nbelleza\nsybil\nweb11301\nvishal\nw01\nweb11111\ncaladan\nweb11101\nweb10205\njmf\nn6564321\nchatroom\nwww.paula\ndb05\nwalmart\ntopgames\nbowser\noneness\nwww.hep\nvbc\nsff\nlse\nsecureserve\nsnap-scheduler.round-robin\ncrying\nmasseyanywhere\nhelal\nking89\nautoproxy\nsnap-event-sink.round-robin\nflw\nebdaa3\ntur-ldap\namnesia\ngetmyip\ndevstore\nsportcom\nalb-ldap\nete\nsnap-developer.round-robin\npregnancy\nfight\nadoption\nfatherhood\ngoogle3\nmailstore1\nsnap-docs.round-robin\nbidding\nsnap-scheduler.site\nsnap-event-sink.site\nrapide-web.class\nwebpages\nicprovision.cic\nmu-mailbe\nparth\nsnap-server.round-robin\nwww.pogoda\ncyborg\nschmidt\nnewgames\nokc\nrosie-glow.co.uk\napi-web.class\nbobbins\nttest\nsnap-home.round-robin\nlak\nwindward\ndrcorna-bms\nbiomass\naccount1\nhollander\neskandari\nts08\ncelestial\neslami\nturnip\njongho7410\ntmdrbs2\ngw6\ntecnico\npricing\npcsuw020\ndhcpfa1a\ndhcpfa3d\nnuvola\ndhcpfa3a\nhyejin24\ndhcpfa2f\narmode21\nmaen2002\nwww.mytest\ndhcpfa1f\nnewel\nmadinah\ndhcpfa39\nphase4\ndhcpfa31\ndhcpfa30\nwww.responsive\nbluesee710\ndhcpfa27\nhalifax\ngenx\ndhcpfa23\nvision1\nzangbie\nfff327\nmyspace2\ndhcpfa21\nrsj\nstaging01\ntur-cache\nchoigoda\ndhcpfa19\nheylis98\ndhcpfa16\njong7188\nvico\ndhcpfa14\ndodream\ndhcpfa12\nqorthd\nandriy\nwatch1\ndhcpfa10\ngachimaker\nwww.sv\nwww.21\nmousavi\nfololo\nmushi\nwww.23\npc-hwell-10\nlikekid\ncasinoonline\nbrandlab\nconnect-test\nwel-ldap\ndhcpfa3e\negotrip\nnasr\ndhcpfa3c\nolympics\ngoldencontent\ntinies\nnonos\nuas\nwww.32\nkimaa79\ndhcpfa3b\nklmwook1\npdns1\nblackroid\npdns2\ndocentes\npdns6\njinakim\ndhcpfa2e\ndhcpfa2d\nkhaiser\ndhcpfa2c\nv1002\nsungdong\ndhcpfa2b\ndhcpfa2a\ncrossover\ndhcpfa1e\nphoenixadmin\nsamwootech\nmadhatter\ndhcpfa1d\nsesp\ndhcpfa1c\nnursery\nsunwoo1\nmave\nhsj234\nparsons\nmatome\ndhcpfa1b\ndhcpfa38\ngoung4242\ntur-print\nkjj8101\nuploadtest\ndhcpfa37\ndhcpfa35\nopendoor\ngid045\nwebdisk.entertainment\njuese1\ndhcpfa34\ndhcpfa33\ndhcpfa32\nemad\nm.mobile\njia1728\ngogogogo\ncherrypink\ndhcpfa28\nssooal\ndunya\nasal\nryuhyuna\narak\njunseok\nsjpeach\ndhcpfa26\nkurosaki\nbest-life\ndhcpfa25\ndhcpfa24\nhellsing\ndhcpfa22\nnavision\ndhcpfa20\nimg24\nderkuss0706\njuli45\ndomato\ndragos\neflow1\n136\ndonati\n139\ndhcpfa18\nandys\ndhcpfa17\nacer12\ndongui\nbestpeople\n150\ndhcpfa15\nsucre7\ndhcpfa13\ndhcpfa11\nbryce\nwebchin9\nwww.teszt\npuff\npc-hwell-9\nhaken\nfishinggear\npartyhouse\nbigeye\nswvpngw-ssbcom\nppp2\nppp3\n201\nplanetx\nchelm\ncontabilidad\nhanbok\nwww.wf\nweb11121\nmonik\nweb10198\nrobyn\nwebct4\nwww-4\nwww42\njjodash\nauracom\nehouse\nmulticare\nzcs1\nhusain\nlinuxadmin\nalberta\npoincare\nzapf\ngravityfree\nnun\ndrkeyn-voip\nwebposrt\nipro\nmaster.ldap\nwlc1-ap-mgr5\nmaebong\nklein\nokey\ngameboy\nvostok\ndnv\nworf\nadrastea\nmisery\nwebdisk.survey\nelumitec\ndhcp120\ndhcp116\nzenwsimport\nweb10169\ndhcp117\ndhcp118\ntkts01\naspdemo\nsalewa\njyoon\ndhcp119\nleed20\nevergreen2\nvibe\ndhcp121\nbartok\niac\npepin\nsamjin\nt15\nevecare\nredmoonpo\nacomma\nnews07\nluciano\ndhcp122\nmatematicas\nwww.virginia\ncmr\nhabiba\ndhcp123\nmoohan\npcadmin\ndhcp124\njayeon\ndhcp125\nsmartplace\nnjell249\nhost225\nkgoodtime\ncomeback\nnaty\nhost226\ntamar\nelmasry\ncoffee01\nhmmedical\ndhcpfa36\ndhcpfa29\noldenburg\ngate.ocn\ngate.so-net\nyahooblog\nwebdisk.whois\nc-4402-v03-02.rz\najh0381004\nkook\nwww.cleveland\ngate.yahoo\nfaheem\ncomunicacion\ngate.biglobe\neadmin\nsaksham\nhekate\ncheck001\npromoman\nv6.ext\nwycieczki\ndevnull\nstudio3\nrosehill\ngate.yahoopremium\ngilead\nkeko\ngate.nifty\nyahia\ncarshop\nserver112\nedexcel\nshyduke1\ndrcornb-bms\nforestry\ntest0000\ngangsta\npongdang\nwww.cai\nrosse\nsupportdesk\nksm0759\njohndoe\nhappyh\njmac\nimgsrc\nernst\ndrcorn-bms\nnefarious\ndrmrala-suep\nheon1567\nwww.nautilus\ndrkeyn-swmgmt\nsinbi\npc7misc059\nnavinavi\namo\ntequila\naltmediaadmin\nb152\nwww.phs\nsstp\nwww.uni\nbosque\ngre\nit3000\nmgcp-cgoon01ca\npots-cgoon01ptc\nasm-cgolab01ain\npots-cgolab01ptc\nsim-cgolab01ca\nkokomo\ncharleskim1\nsonghee\nshspa85\nasm-cgoon01ain\ndeathknight\nsteph\nfarhan\nauctionboard\nsia-cgolab01ca\nniche2012\ntoastmasters\ntjy0514\ndarknet\nsim-cgoon01ca\nmgcp-cgolab01ca\nithelpdesk\nsia-cgoon01ca\nwebdisk.adserver\nsia-cgoon02ca\najkzz429\npsh4637\nsung3moon\ndksxodhr\ngreeneyes\nnegative\nvclub\nmauritius\nboomtime\nheungwon\nder\nwww.colocation\nfuse\nonlyu\npawpaw\nidp-dev\nwww.kings\nbprock\nyjs9535\nchuck\nssiso\nelba\npayment-callback\ndelivery-ng\nindustrycert\npw01\nmstg\npw02\nfoxit\ngeos\ngogopro\neduforum\nnikkip\nbaige111\neurekasa\ndagon\nfacebook-callback\ndb-test\nmicrosites\nkryptonite\nvmware-controller\ninner2\nseafood1\nscurve\ncontratti\npvcs\nkees\nip214\nip225\nws-partner\nip227\ndolarge17\ninnerlight\nmineco21\ntestocn2\n3ring\ntory1\nkaiser1\nip231\nseesun\nip232\nip233\ncrashdump\nfacebook-log\nseptember9\nsip-fw\nufficio-old\nip234\nip235\nip236\napm1010\nsmtp-local\nip237\ncoolingmusic\nip238\nbbang\nredjinah\nbuilder.hcp\nclean123\nvacanze\ncocomong\ngodqhrgotdj\nip240\nwebmail.hcp\netec\nnutricion\nprometeo\nbarron\ncasadeaur\nip248\nnewtemplate\nip250\nmidia\ntricolor\nwebconf.um\naccess.um\ngkthdud9\nsip.um\nip202\nkwonsusan\nav.um\nwww.cacti\nameli\nbcode\nwww.mia\nwww.translator\ncinbui\nuncle\ntae056666\nfina\ncs03\ndongin99\nhomeandgarden\nbata\ntemplate1\nprojectpier\nwww.msc\nmckerli\nmlg\nftpbackup\nnetwatch\ntest9d\nautodiscover.hotels\nemployees\nhyung0502\nmihosubir\nelit\nip213\ntest9c\nip230\nip249\ntest9b\nstoc\ndbservice\n0000\nsyd-gw2\nbesttimes\nautoconfig.hotels\nautodiscover.ar\ntr-tn-0002-gsw\nvs7\ntest9a\nqueenie\nd205.dev\nvs8\nd101.dev\nvufind\nd213.dev\nd209.dev\nwwp\nautoconfig.ar\nd221.dev\nd222.dev\ntr-tn-0001-gsw\nd228.dev\ntest8d\nhost45\ncommunity2\nlenovo\nkaoyan\nimoplataforma\nweb11142\nd207.dev\nposter\ntest8c\nterminalserver\nhb-gw3\nd215.dev\nwww.publiker\nendang\nfondation\nd210.dev\nantena\nd223.dev\npcservice\ndinamica\nd217.dev\nipmi\ncolaboracion\nbrok\ncod4\n252\nchuy\n253\nuruk\nbobi\nwww.kls\ntest8b\nceco\ntest8a\npowered\ntestwp\ntest7b\nconsultoria\ntest7a\ntest6c\nagn\ntest6b\ntest6a\ntest5f\nweb11858\nwww.webster\ncba\npeacock\ntest5e\ntest5d\nkmp\nmssql02\nlivia\nyoshimura\nwww.computers\nhandyman\nya-ali\nsakamoto\ncee\nsrv05\namazonia\nwork4\nwebdisk.image\nwww.edukacja\nmx14\nseven7\nflv2\nthoitrang\naide\nautoconfig.proposal\nrepositoriocemabe\nyouandme\nwerner\nwebdisk.proposal\nwww.proposal\nautodiscover.proposal\nrockadmin\nnudist\nmx1.mail\nelab\ntims\nacti\nacsi\ntakepic\nbcache\nnereus\nadops\nwlan-switch.hist\nwlan-switch.khm\nwlan-switch.svet\nhme\nfirework\nwlan-switch.soch\nahmedali\nwlan-switch.circle\nkabin\near\nwlan-switch.saco\negao\nlinux01\nvvvvvv\nen2\nkamome\nmandalay\ntop2\nwlan-switch.plan\nwlan-switch.teol\nabhijit\nsm02\nwlan-switch.kult\nkarem\nhistorico\nmta001\nwlan-switch.psychology\nwlan-switch.igsh\nwlan-switch.esss\nevan\nwlan-switch.ekol\nautodiscover.manage\nwlan-switch.bygg\nwlan-switch.cait\njenkins1\nwlan-switch.botmus\nsirio\nwlan-switch.guesthouse\nphotographer\nmoviestar\nwww-tt\ndirectaccess\nwlan-switch.hum.sol\nwlan-switch.lundakarnevalen\ncdn.origin\nrss.origin\nwlan-switch.sambib\nimages.origin\ngian\nwww.iwww\nwlan-switch.lunet\nwlan-switch.lumes\nmailrcv\nmc1\nwlan-switch.gerdahallen\nwlan-switch.li.sol\nmail.bb\nwlan-switch.kongresscentrum\nwlan-switch.englund\nmoviezone\nggw\nlogin.omv\ngamecenter\nwebsrv3\nparsian\ndns30\nwlan-switch.konferens\ndns2-br\ndns31\nwlan-switch.rektor\ntsnsql17\nb3ta\nroyalty\nwlan-switch.iiiee\namavis\ntsnsql18\nsportnet\nwww2-spd\ngamesx\nmicro1\nwlan-switch.ub\nwlan-switch.pi\nwlan-switch.upv\nwlan-switch.stu\nx86\nwebdisk.ticket\nmentoring\ndebica\nkarthik\ngwweb\nmail2.pics\nwlan-switch.srv\nbiyoloji\nwlan-switch.sol\nwlan-switch.soc\nwlan-switch.net\nwlan-switch.lub\npublishers\nwlan-switch.mhm\nwww.vancouver\nqtss\nq123\netime\nwlan-switch.ldc\nwww.oldsite\noita\nwlan-switch.fpi\ngaurav\nkumamoto\nwlan-switch.etn\ndpi\niwan\nexhub\nwlan-switch.fil\nwlan-switch.ced\nwlan-switch.ark\nkip\nwlan-switch.adk\nwlan-switch.kansliht\nwww.bma\nwlan-switch.oresund\nwlan-switch.botan\ncoaching\nraleigh\nwlan-switch.pedagog\nvreme\npodpora\nwlan-switch.kultur\nwlan-switch.astro\nclient1\nmuaban\nwlan-switch.evaluat\nwlan-switch.luinnovation\nsoraya\ndreamweaver\nwebservice2\nautodiscover.legacy\nautoconfig.legacy\ncontentx\nkearney\nthinktank\nmillhouse\nile\nkls\nmailservices\nleroymerlin\ntomek\nwww.internetmarketing\nnetstats\nukvpn\ngut\ntnp\nadios\nhost22\nwaza\nk2000\nokna\na12\nlior\nsyt\nhost19\npager\naida01\nhost18\nsmtprelay\nstor\napi4\nabbey\nidximg01\nlito\neii\ns321\nhost17\nmoulin\nvideoblog\nwww.baza\ngdb\nspiceworks\noa2\nvitrin.vitrin\ngofla010\netu\ndamavand\nvpn-server\ngenerali\narchimedes\ncust\nsiberia\n5star\nhost15\nbetawww\ngate1\nntagil\naddress\nautoconfig.labs\nautodiscover.labs\ngpr\nrivne\njiratest\nibe\nwww.lviv\nv6.int\npashmina\npadme\nkharkov\nvblog\nassessment\nsocialnetwork\nerevan\noola\ngodang\nkirovograd\nifc\nlimbo1\nlimbo2\nhansolo\nrom\nrok\ntallinn\nikar\nwww.mid\nclearance\ntree76\ntpvlfh\nbcaisp\nlhc\nswatcher\nwww.celular\nparati\ngdcaisp\npvp\njpg\nwww.platinum\nshcaisp\nvps118\nvps113\nvps111\nwbt\nbergman\n1983\nvps029\nndh8134\njscaisp\nwoohaha121\nconstructor\npng\n3000\nlovebug\nchon1\nlmb\nvps117\nlalala3\ndnglobal\nloncapa\nbbnb\nhema\nvps116\nvps112\nlss\nip20\npics3\nnoi\nmte\nzcaisp\nvps015\nxms\nwwwmail\njal\nsukien\nffs\nstarfox\nssm\ncar4\nmedia7\nwww2dev\ndamko\njunauto\nvdi2\noldnews\ngsp\nwww.orenburg\nnew4\nwww.chita\nmongolia\nwww.tver\nlte\npak\nperseo\nbigstar19\nwww.inspiration\nfallout\nnewzealand\nsanchit\nregistr\npruebas2\ndoa0614\nkiso\nkubota\nmaruya\nvitruvius\nlin2\nmagokoro\nswingers\nbwby\nrealclub\nansa\ninterfaces\nkusakabe\noko\nperro\npho\nwww.euro\nonline3\nnoilly\ngold777\nwww.bz\ncozy\nbstore\noceanblue\nwww.nt\nssl16\nplt\nsandeep\nmx21\nvcenter01\nwww.watches\nparos\nsassafras\nsandesh\nmontenegro\nfarma\nhht\npreprod.m\nhca\ngkc\nenciclopedia\ncanit\nmahler\nmainz\nsandman\ndolf\nczen\nmirabelle\nsdb\nraoul\ncatalpa\nsfc\nsmile2233\ngoldline\nev12\nfoshan\nfuzhou\nwww.giftshop\nlettledyr\ndialogic\ndread\n176\nreward\netp\nfkm\ngat\nweb154\nbaekse\nemi\npub3\nweb104\ngongji\nhideip-france\n001\n010\nhideip-india\nhideip-germany\nl2tp-in\nl2tp-de\ncals2579\nip-in\ndev98\nip-de\nmantienilatuaprivacy\nip-fr\nvideo-italy\nwebreport\ncertificados\ndsb\nredrock\nbonsai\napplet\ncheonji\noldschool\ngook\ntlb\nonthespot\nfunnystuff\ntantra\nwww.boa\nlibtest\ngpnp\ndht\nanimezone\nkshare\nchem1\nbys\nwhitewing1\nbaesunhappy\njin123\nlje1265\nmtp\ndgp\njdev\ngirlbygirl\nigc\ninni\nipas\niotv\njiae\nqmailadmin\nyell-sandbox\nd220.dev\njkbn\nd225.dev\nbbmy486\nairljs\nd201.dev\nadforms4yell\nd204.dev\nd100.dev\noneorzero\nmyschool\nd212.dev\nd219.dev\nd211.dev\nallabout\nintra1\nbaccharis\npond\nd227.dev\nmushi3\npoint2\nlockwood\nd229.dev\ninternal2\nlinkproof2\nd206.dev\nd214.dev\nmakk\nd208.dev\nhostings\nd216.dev\npaulsmith\nd224.dev\nsandbox4yell\nwerkstatttest\nict4\nadforms\nleadservice\nmail.fis\ndaten\njjibbong\nd202.dev\nd203.dev\nkoko1234\nwww.werkstatttest\nproxya\nwww.pet\nd218.dev\nrawl\neyecandy\nd226.dev\ntime119\nl-ukicalifia.it\nyeslee\njoule3700.its\nkagayaki\nedu21\nedu26\nl-s-a000307.it\nunicef\ne-uskj5y59e.eps\nballo001\nv100\ngymiin\nsq2\ncl5\nold4\nwww.adult\nwebdb1\ntkr\nhwaya0952\nvideoteca\njinhwa\nsiegen\ngprs\npingu313\nerb\ntmobile\nplayerint\nmain39\nndc\nbcast\nadoc\npuny\nbc01\nbc02\nsqltest\nchr\nholycow\nnecco\nbabysoo\nwebserver02\nplaylist\ncid\nwww.catalogo\nsban\nautoconfig.properties\ntennshoku\nawe\nautodiscover.properties\nenergie\nicepeach\nhosting11\nceb\ngesundheit\ncumall\nproxyb\nverbraucherschutz\nwomenshistory\nempresa\ninstitucional\nm-relay\ngsd\noda\nphilosophie\ntransact\nem2\nihm\nbartar\nflanagan\nwoohyun\nnetsecurity\nmjjproduct\nsiemens1\nstudium\naddison\nastro1\nsl2\nsl3\n8888\ntestapps\ncrossstitch\nmilenio\ntrackandfield\n187-122.owo\nsv126\nfarm2\nnorthernnj\nblk\nwww.webboard\nmarcas\nmooncho5\nprivado\nsdca\natr\niphonerepair\nkoras\nsaml\nautoracing\nmutualfunds\nrmsnlf2140\nsilctl\nvpn-dev\nbie\ncasinogambling\nusedcar\nonedrink\nthreestar\nimhotep\nworldsoccer\nvpntest\nbfg\np1-all2\nsfl\nzk\napi-staging\nusnews\nas6\ntheotherside\nzata\ngouk\nhra\nglobalfood\nroadtrips\nfarming\nsinjin\nfallingstar\nsytkfkdgo3\nslave4\nbosfood\neconomia\nspecialed\nm1234\nlss0918\nwww.opencart\namr\nsv125\ncplus\ncalendar2\nlacrosse\noriginals\nnasan\nneuroscience\nzyxw\nbeta5\ncommons\nmoviles\nbellavista\nsymccloud\nwww.sato\ntrgovina\nbookclub\nbandits\nmka\nqa-www\nproskate\nartcom\nboardgames\nkasina\nalking\nartdesign\nwww.clothing\nvpn0\ncage\ncookware\nmagaza\nitalianfood\nccap\nreplicant\nmani671\nxpressconnect\nk11\nk12\n3com\nslartibartfast\nazteca\nwebdb2\ngq\nbhs\nabra\nwebtesting\nkredyt\nadsonline\ndid8535\ne4life\nthezoo\nhjs\npman\njcs\nlhs\nmedizone\nfbs\nthesimpsons\nqmc\nwww.lineage\nshoutbox\nwax\nwjdtjs3460\nwriting\nforecast\ndagger\npharmacology\nwww.columbus\namericanhistory\npledge\nwww.so\nkaczor\nst8\nmundomagico\nsmsgate\nwww.dennis\nwww.user\nlax\nallure\ncor1\nwww.los\npediatrics\ncollegefootball\ninsp\nzzttfg\ntamiky\nwap.naujas\nrtfm\nmenace\nlovej\nfenris\nwww.naujas\nwww.courses\ntouch.test\nwap.test\nbobae524\nm.naujas\ntouch.naujas\nchangpo\narkadia\nfeelers\nwww.mapa\nshan\nhen\nfrugalliving\nshimane\nmuzeum\nwhiskey\nfukui\nyamaguchi\nfrenchfood\nwww.dev01\npreprod2\nwww.dev02\nkittysh1\nwww.play1\nfreemind\nsmax\nwww.www02\nwmail1\nstatistika\nsonda\nwww.aukcje\nszkola\nwww.typer\ndemonstration\nadminnt1004.admin\nlcgfts3.gridpp\ndcap.pp\neblp14.ebl\nlpta097.admin\nlcgft-atlas.gridpp\nlpta153.itd\ntcom6-pc.cc\nburton\ndgs\nlpta142.ebw\nkurumsal\nmc5\nsrm-lhcb2.gridpp\noomnamoo\nit2\nphoneplaza\nbinghwa\nprop\nnewhampshire\nsrm-superb.gridpp\nwww.tennessee\npipipsrv\none-test2.gridpp\nsrm-ilc.gridpp\ncastorns.ads\nzak\nicsm\nsrm-preprod.gridpp\nnewjersey\nburger\ncernvmfs.gridpp\nghosty\nwww.documentation\nlpta117.admin\nlpta006.admin\nwww.wyoming\npca370.ebw\nnero.cc\nwww.office365\natlas-squid.gridpp\nwww.pennsylvania\nsrm-dteam.gridpp\nsrm-gen.gridpp\ndml\nconnecticut\ncypher\nsrm-t2k.gridpp\npca103.itd\npca240.itd\nwww.ohio\natlassquid.pp\nwww.kentucky\naiv-emc01.ag\nsrm-mice.gridpp\nwww.missouri\nsrm-cms.gridpp\nsrm-hone.gridpp\nwww.maryland\nhaste\nwww.iowa\noutbox-og\nsrm-cert.gridpp\nlpta141.ebw\ncfi\ngw.inf\nlcgft-atlas-test.gridpp\ncms-squid.gridpp\nwww.ldp\nrider\nopennms\ntouched\nsrm-na62.gridpp\nbabylove\nvenz\nrack7u39\nlpta100.admin\nlinux4.pp\nl26\nlinux5.pp\nhepwin2008p.pp\nrack7u38\nbarbie\ngw.cc\nrack7u28\nxat\nlpta141.admin\nsrm-cms-2.gridpp\nlfc.gridpp\nrack7u13\nosman\nsrm-minos.gridpp\ncndlaptop.clf\npca150.itd\nrichman\nwww.debug\nscnt92.sci\npca095.admin\nsrm-biomed.gridpp\na3obulogon.itd\nharmoni\nsite-bdii.gridpp\natlas.pp\npakiti.gridpp\ncoches\nstewart\nrack7u29\nlcgfts.gridpp\ngengar\nvww\nwww.bin\nlhcb-lfc.gridpp\nlpta131.admin\numbraco\nscnt97.sci\nsv30\nsv35\nlpta142.admin\noutbox-mx\nsrm-snoplus.gridpp\nhabbot\nwww.asf\nsv54\nsrm-lhcb.gridpp\nsrm-cms-disk.gridpp\nsv53\nsv52\nrapidshare\nsrm-alice.gridpp\ncaramel1\nmongo-tuk-c0\nwww.flex\nsv50\nsv34\ntmk\nsv31\npublicity\necho.sc\nza-switch\nkbn2430\nsv16\nsv15\nwww.atm\nmedia101\nwww.bmw\ngallery1\npnr\nkirkenes-gsw\nwww.sirius\nrbc\nmofo\nwww009\nwww008\nwww007\nwww006\nwww005\nwww004\nthumbs3\nwww002\nwww010\nwww013\neconet\ndesignfactory\nwww.truyen\nwww.roberto\ngigic\nwww.topsites\nrack10u20\ndoa\nmoritz\nosb\notm\neben\nrack22u36\nrack22u12\nbristol\nrep1\nnewtop\ndaftpunk\ntournesol\nolx\nwaka\ndens\nws5\nvans\nodo\ndow\nwww.servers\nfzgh\nmetradar\nhaianh\nd1-1\nceg\nvice\nwebradio\nmylinks\nns200\nhandson\nmtt\nsm5\nmilforce\nbusted\nplaystation3\nnsr1\nbiolab\npang\ncyberwarrior\nappweb\nm.es\napns\ndillon\nphongvu\nkemper\njyzx\nkdk\nthierry\nwww.ural\nwww.memoria\nhaohao\nirs\ncapita\npcx\ndesarrolloweb\nwww.ols\nisp2\nwww.mel\njbo\nxmltest\npc4\npc3\ntek\nwww.dw\nwww.cel\nspectacle\nadman\nmailmaga\nnadmin\nwww.soul\nvm06\nsearch4\nwww.mix\nwww.evo\nhoy\nhoa\nwww.ngs\nludo\npalladium\notis\npc12\nalternativeenergy\nifr\np01\nweb2020\nspidernet\nsmartmaru\nkirey\nkkami\nsheriff1\nns160\nwww.nwr\nspacetech\nsurgery1\nkamis\nwww.osp\ncherryb\njmp\nlexcorp\nvulcain\nwww.psi\nwww.san\nns139\ngam\nrefer\nns136\nhyderabad\nwildstyle\nlovesome\ndws\naccel\nlocalhost.media\nclick1\ntrojan\naxs\neung32\nnausicaa\npre-a\nkingmotors\nleepd\nadam123\neunhee\nlaurent\nxxb\nredmay\npromethee\nglecor\nmultisam\nstartimes\ndavids\nwww.networks\ndsg\ns18-254-fi800\nm.videos\nfreestuff\narcas\ndeporte\nyolanda\ndse\ncmail2\ncmail1\nwww.lolo\nhaidar\nmakemoneyonline\nmapit\ntest.cg.vip\nsilo\nwww.serwis\nwww.mary\nwebdisk.update\nfinger\ncg.vip\narttech\nlocg.vip\nwo1\narmor\nboapi.vip\nwxaut.d3s.ili\nperi\nwxstor.d3s.ili\ntest.lott.vip\nkeuangan\ntest.tt.vip\ntrendy\npokermail\nlott.vip\nakshay\nwww.winter\nwww.mart\ncoach6new\nautoconfig.foro\nbyt\ntopsalesclub\njpa\nlaith\nauthwsop\nauthwsop.vip\nsmartfund\nciscovpn\ntest.locg.vip\ndgi\ncol\nosol\nftp.allegro\ntolga\ncasio\nupload1\nautodiscover.foro\nwww.teszt2\ncov\ngenerica\nimmobilier\nstaging40\nzeko\nlms1\nbibliotecadigital\nabcdefgh\nphotomania\nado\nsbt\nm.staging.apps\nmbi\ncaxton\nwww.sitebuilder\nfilip\nwww.sharepoint\nwww.48\nlevon\nfizika\nw2p\nhmm\nbiologia\ninfomedia\nfotoboek\nwww.guia\naoladmin\nliriklagu\nasig\nmurdoc\npantyhose\nonlinemarketing\ngamezer\nwww.poseidon\ntct\nbios\nblackbook\nbink\nwcms\nmsds\nnovel\nwebdesk\neatingdisorders\nads4\npartytime\njust4u\nwww.gina\nwww.exit\noptout\nfs11\nbmi\nhrselfservice\natf\nitsme\nmecatronica\nweb189\nakg\nwww.fire\nkingfisher\nhemant\npg2\nfs12\nfs13\neducar\nwww-t\nchop\nalps\nisweb\nfs14\nfs15\nf7\nfs16\nxwiki\nmimas\nkarol\nitservice\nfs6\nckp\nkaori\ncybozu\nate\ntomorrow\nviolin\ntonton\nfs7\nfs8\nhendry\ncontrolescolar\nglobaltrade\nwar3\ntoontown\nkairo\nwww.microsoft\nthisisatest\njanette\ndom1\ncvo\nspace2\ninco\nneve\nmobilesync\nproveedores\nrikardo\nshinigami\nvm-dns\nwww.bmi\naos\nkenkou\ninformatique\nlocalhost.demo\nhurley\nherman\nvz6\noceania\nwww.aspire\ncinnamon\nrainyday\nlivescores\nwww.eric\neduca\nwebdisk.staff\nabd\ncopernico\nastarte\nhache\nexc\nenvious\nespacio\npkpk87111\namh\nghqks1203\nwww.szczecin\nnettuno\nbbf\njeunesse\nagt\nsoil\nbitcoin\nirbis\nwww.ef\nagb\nnewyahoo\nwilk\ndsr\nwmp\nisp1\nwwwmobile\nmt1\nafc\nmail.mail\nafa\nkimkim\ntjdwh18\nwww.elk\nthermal\nbebero\nshyduke\nwjdthal1\nitshop\nelvira\ns149\nbotany\nuis\nfolder\nonlinemoney\ntungsten\nwww.lancut\nalexia\nsipav\nfedex\nboromir\nreaper\nscratch\naisa\ngenerations\nangkor\nsudheer\nyoung7197\nmytree\nyosemite\npdu8\nwww.belchatow\ngoodhope1\nbildung\npleasure\n173\naprs\nferret\noldpop\nej\n888\n4x4\nradiance\npraise\nambition\nradom\nwww.pokeworld\nmegan\ndead\nclearwater\nyk\ncarpet\nwo\nairwatch\nsimmons\naccolade\nonlinedating\nwoozoo\nrj\nlancut\nbelchatow\namelia\nbcl\nyvonne\neeee\nufl\npalas\ngoldap\npha\nwww.aria\ninsa\nbree\nmanda\nwww.error\nwww.nevada\ngn\nmatterhorn\nkwon\ntum\nvips\nbachelor\ngrisu\ndatastore\nerotic\n113\ncollector1\nexotica\nredemption\nezine\nlocal-www\nnamaste\nflex1\nvpne\ngh0st\nsubzero\nkamino\nhighvoltage\nboomboom\nmscanus\njiminy\ndeviance\nwww.rea\nwebteam\ndcweb\nskintech\nbosna\ngolf6\nstarone\niptbai\ncontent3\ntruol.parcerias\ninfoma\nvpn1-uk\nwww.gearsofwar\nrubens\nbackup7\nnsd2\ntruol.parceiros\nshequ\nautopay\nstaging.admin\nvengeance\nacadia\nftp.moodle\nbk5\nprx\nmyself1\nwww.karaoke\nimag\nnewdns\n140\nbimbo\ndetails\nwebmarket\ncharly\naiadmin\nkakao\nfacedog\nkulinar\nhack1\npd5\ngagushow\nictc\nwebmaker\nhabin\nadriano\nprema\nmartian\ntoros\nearl\ndeepee\napm\ndez\npenta\ndvb\nbeibet\nfreyr\na12345\ncoolboy\nmail.um\njen0615\nsupertop\nwire\nturn\nseif\nkwons\nbkbfate\nmaz\nlucent\nwww.pub\nvm7\ndiab\nujjwal\nprestige1\nur\nrjsgml5694\ngenom\nlamy\nsecurelab\nvchat\nwww.liliana\ntdm\namelie\ndentoo09\nencoder2\nsatanas\ndynamo\nmp8\nmp9\nmp20\ncreateadmin\nmp28\nmp30\nmp10\nmp11\nmp12\nmp13\nmp14\nmp15\nmp16\nmp17\nmp18\nmp19\nmp21\nmp22\nmp24\nmp25\nmp23\nmp27\nmp29\nmp31\nshuffle\ndailies\nmaac\nyourworld\nwtc\nmulan\nasasas\nipv4.test\nwww.pure\nwww.ahmed\nsilicium\nlobster\nferrum\nnok\nihb\nester\nfaw\nhill\nbkr\ntechshare\nroxas\nwww.anita\nsiwa\naraba\nmobo\nmili\ns191\ntakamiya\ncometogether\nislamona\ntorrentz\ngreenbee\nmercadolibre\nwww.bells\nkhenzi\ngurgaon\nchamp\nfloria\nnonsensical\nsmdesign\nsg108\nwdh0517\nwww.extra\njinny1004\nluffy\nhumantech\nplf\npd4\nsimsim\nnie\nhumberto\nire\nkankan\nloveparty\nfateh\nvdp1\nfuntime\nvps36.dc1\nbnt\nsurfin\ns168\ns171\nuchiha\nbf3\nds4\nwww.fv\nthunderbirds\nwww.nato\nwww.att\netravel\nstar8\npapi\nkamyshin\nsanjose\nsudhir\nrustam\naldrin\navh\nhuron\ntest888\ndasha\nspammer\ntest-it\ntest009\ncima\nakhilesh\nimba\ns177\nsars\nbloody\njyx\ncco\nbetatest\nwww.atc\nwww.tao\nnobile\ncoolboys\njn\nbackup-server\ns178\ntesttravel\nghvpn\nwww.bola\nwinmail\nlistserv1\nts.inf\nts.mmf\nts.eef\nts.labktp\nmisslee\nts.iif\nts.ist\nts.myo\nts.mkf\nwebmedia\nts.laby\ncodec\nthuong\ntimes2\njs2\nshowme\nautoconfig.contact\nshutter\nautodiscover.contact\nlipstick\nasthma\nwww.brain\nwup\nblack2\nrisa\ntingting\nwww.coop\nthejoker\nwww.spark\ngpa\nrealworld\nsuboffer\nsanluis\nupdown\nnetmovies24.edge\nthienphuc\ntia\nbeni\nlee002200\nhugoboss\nalfa2\nwww.bike\nshow-tmp\ndomenapanel\nleather\ndoc3\nsyzran\nruslan\nmediaserv01\nwww.death\nst02\nst18\nsnowvalley\ncarina00v\nhojung\nvpn03\nwww.doit\narthas\nkniga\nmoren\nexhibition\nphpbb3\nmonjali\nlift\ncstool\nwww.aol\namsp\nwww.sra\ns180\nwww.iic\ns188\ndizzy\nmayg193\nbenebene\nwww.communication\nj123456781234567\nwww.coins\nciberlynx-wsvn-web1\nrtm\niphone5\nna1\ntice\nasdfgh\nstafford\nwww.panda\nmsadmin\nwww.is\nadma\norigin2\nen97ea4c\ntmp3\nogrod\nmcbox\nrpi\ndoktoranci\nwww.edc\ncorn\nwww.vas\nroyals\nsherry\nforbidden\ns183\nestimate\nsagitarius\ngsearch\nbuilder.extend\nhandsome\nkinomania\nlibro\nvp01\nsmartcard\nselenagomez\nq1w2e3\nmotaz\nstrm3\nforall\nsviluppo\ns181\nlsb\nbestof\nwebdisk.ayuda\nnewsearch\ncali\nwww.eagle\ns192\nsoup\nssbtest\nservidores\nkandydat\ngps2\namulya\nquercus\ncmos\nchiko\nnahyun\nkaizoku\ngermanium\ntelechargement\nphysik\nasean\nsourabh\nrc2\nclown\nmhm\nwww.idc\nticket2\nirish\nssltest2\narch1\nlondres\ns1018\nstarsoft\nwww.pdf\ndip\nadvisortrac\naileen\nblacknight\nvcr\nsips\nautodiscover.ns1\ndanco\nprashanth\nwww.cyberspace\nautoconfig.ns1\niprint\nn6\nmanualidades\norgs\npancake\nfreaks\ncorsair\nbrook\nhoop\nlifetime\nomega2\nwww.gamma\nns155\nkissmin\nfarida\nwww.firma\nmojtaba\nmessiah\nviki\nlifes\ndelight\nkangdy777\nsweetdona\nrkd2885\nwww.thegame\ndlfmaekdns\ncodysale\nwebdisk.vip\nanjongbok\nteflon\ngksghktjs\nyumi89choi\ninmobiliaria\ntaehwa5\nbutiroom\ncomtech\nberyllium\neodks\nddok1213\ncustomerservice\nhjs0997\nzeeshan\nheeseung\nkaustubh\nautoconfig.vb\nkamzi80\ncheuk\ncheng\nooccc\nautodiscover.vb\nwebdisk.vb\ninchan21\ncheckmate3\nndnasd\nqkswlenro\nujjwweu12\nwww.comunidad\nrarakk2\nansari\ncips\npippo\nkdoy3\nbrand94\ntelius\nsangzero\nbnshdj267\nnewdata\narchiv11\nya54\nbblues\nxmaseves\nlty5229\nwww.worldcup\nccudi68\ndapin\nsinhk71\ngirlsunit\nangelia22\nffdesign\nupdate3\nverified\nnicekim72\nlovely1st\neloah\nruddls333\nmrcteoqkr\nskumar\nbless\nanta182\njinwomall\nbeyourself\nblank\nkeerthi\nihappy\ndoremi3652\nenkistar\nbbonamall\ndum24\nstweb\nblair\nvnfmadid\nwww.ppc\npropose\nchinatown\njsmith\ntwee\nagencia\nwebdisk.downloads\ntkagmd\nfriends4ever\nrena1730\nadslcolor\nac3513\ntencent\nimage670\nttbe\nrachman\nppp725\ne-business\nbmw2120\nwapp\nbluemint\nconstructii\nokadam\nirusy\nformulare\nguy2me\ndkflfkd77\ntest2007\nnojom\nmatthias\njejewa\nrng002\nsondari1\ngongg777\ntaufik\nanimo\nwww.yoga\neasysdh\nhp1\nstwvudtod\nocnswjfs\nwjdakfdn\nbs1973\nsadness917\na1231a\nrs3beta\nzzezze\nsrkjh\nthsoj\nwww.prova\neventhouse1234454\nbmw0520\nfunstyler\nhooraing\nfreefree\ndeathstar\nmyohan72\nenurizone\nbshtheone\ntarlan\nev0726\ncyzoo\nsarapul\nprocyon\nmanyenalda\nxvshebnjw\ndamien\npaws\namac\njohiok\navenue\nbhvf547\nsynjy00\nkuoemyhws\ngood0353\nsj8253\nda6atelier\nkopnwx\nrainbowaa\nts04\npianojs\nmstore\nzyn3103\nfnqltjs\nqkr3584\ninobell\nkimjk1191001\nkwonhi21\namalia\nwhoami\nohygtk\nfontane\nkettle\nk9180\nhesse\nalison\nneofrom\npoorinbag\nwhispers\nkdmsekdnsr\nfabrics\nadimg2\nklpkorea\nam2\nanlion\nnanna022\nsmisslee\ncomp2020\nksaraki\ncountzero\ngaga2525\nknife\nhamsat\njcjong21\nnamiezuki\njahanzeb\nteam8club\nculamoto\nsorro\nedwards\ngg1477\ninix3039\ninha35\njintoy\nicolor\nivwss2\nizziban\njm2k7\nbabymam\nb127\ntangerine\neyevee\nzemnmn\nautoconfig.backup\ncjhmylove\nhyun0011\nfactorial\nmuzzy417\nautodiscover.backup\nwiseyjy\nwnsgml3370\nwooritoy\nmoonmih\nbdiweb\npp77\nyeosi\nalbums\nfreaky\nkjy102938\nwebdisk.backup\nfastguy75\nwnetworks\ndollhero\npubftp\nromario\nwtest\nepc\nmf2\nrlaendus11\ngadeuk\nprogress1\nlscompany\ngospel81\nflyinghorse\ngospel80\nnonfiction\njinjin8858\ntemin78\nwww.union\nwahid\nmbbs\ntnlrdl\ntraffic1\nautoconfig.upload\nkimmyungsoo\nautodiscover.upload\ntntworld\nnext700\nato6193\nggamigirl\nwindowsxp\nh4x0r\npolter\ntaken\nr-pa1\nmta001.kmm.mobile\nfeature\nbashar\nrtsp\npk62\nyoungwar85\nyouungs\nhappyyim\niidong\naryan\nskawnddl84\nsms0656\ngoodloan24\nbanned\nbeaver\nbasri0310001\nwww.gamezone\nphotobucket\nkgb212\nuiuiui\nsj4322\nallonrigs\nsurajit\nhamo\npsw2024\ngowcaizer\nany4love\nrlagusrl39\nobus\nsjansjan\ns333ss\nitem119\ncassandra\nedgestyle\ncjstnsdjq\nm.order\nmembres\nschatz\nbestfood\niloveu\nsy3381\nredirects\nteatime\npearlngem\nsunytest\nquenya\nvitadolce\neilkuk\npresupuestos\nmusumm\nservice5\nlimkorea\nkorea8585\nnarasimha\nwww.monster\nsavior\npbk4959\nksczerny\nunivision7\ndgfshhw\ngar119\ntheplace\ndicamp\nkulkulku\nruru57\nj7\nwinners09\nstarlove\naaabbbccc\nmbap\nsarangme\ngang5064\nme09\nfitbow\nwww.mirror1\ngreenf5\nzizibe0316\njhy914\nsj1062\nguinea\nmephisto\nohontaek\nnewkissq\nares2\nsulgi0566\nrancho\nlove83js\nwshow\napollo4\napollo5\nlohasbank\nkim3929\ntestdev\nsomerset\npczoom\nvicious\nshakti\nshaker\nhiphopjr\nmadammoa\nvanda\ninis\nnono099\ngauthier\nsohosoho\noaoqnfakd\nkarma01\netisalat\nkj49\nrack\nmsbig\nwww.newhome\nsjsj825\nblackice\nkyh90100\ndea8520\nmycampus-315-admin\ninotes\nvudiwbjsw\nccmjbr\nmycampus-256-admin\nexp2\niface\njin987\np725\nnewbie\nmbc\nshapping\nmegastar\naboutme78\ngywns20000\nsakuma\nwjdduqdl12002\nwjdduqdl12001\nm28\nm27\nrlawngus71\npnpink\nchamomile\nbotanyadmin\nsystem32\ncw8989\nfrogmeat\nceid\nmyth0505\nmr8032\njuju8598\nroyday\nsmoothguy\nigii\nniceuni\ndiamonds\nadamas\nacc2\nqkrrjsals\nripple\nygfactory\ngrolsch\ninterview\nnongae75\nkaban\nsoogi3333\nin001\nheat\nhulkmall\nscarecrow\nchina1230\norangesky\nstudent6\nadamo\nas5\nadapt\nglimpse\nmstr\nfanfiction\nubersmith\njudy8055\nnamissam\nbowlpark\nin7041\nupm\nwww.images2\njuju7236\nqweqwe\ntest18501w\nwww.forex\nwww.images4\ngogreen\nmabelmari\ninline\nthesun\nthgml884\nkjhlhj0313002\nourworld\ncodeigniter\nkjhlhj0313001\nunik\nmtr\npanini\nnewvision\nbizhanna\nanpara\nchun7436\nmemento\nmahmood\njungjbk\nmnmnq25\ncony\ncinfo\nzangmanenc\nrealtop\nboogug\nryusuc\nheytaehoon\nforum4\ndestroy\naubade001\nnight0070\nnm1\ndnc103\nmedmsal\nyounocke\nhoya811218\naccent70\ncaligula\ndufjk232\nvaco27\nsade\nyks4267\naccessories\nmungushop7\nsavage\nzzeshop\nyameyuco\nzeeman\nservlet\nksongha\nenbe\nnothingjh\ndesigners\nnaturally\ndelirium\nnectar\nsado911\nluxury2304\ndragonse\nalclswlfkf\njoa282\nwangenni59\ntheggun\nswe\nkds221\nwww.hamza\nckdvmfh11\nskssso\nlargo\nbewithme\nwhoops12\nparanlp\nalcor\nsathya\nleibniz\ndmtest\nenjdhf238\nnocturne\nlucie\nregor\nhomeworks\ngember\nzealor\nkkkkkyta\nwlr79\nchoi3241\nbestop\ntkthcjswo\nrulrulru99\nalias\nqkstjr1107\nskydriver\ndbsak\nzrnmebdzq\ntrustbike\npporori83\npporori80\ntate\nsmtp.forum\npop.forum\nmamababa1\nastronaut\nallan\ndaacc56\nscfan\nmskgreen\nwebdisk.iklan\ngjdjdrmfl0\nwww.sakura\nwww.wwe\ntopsecret\nwww.iklan\ngucci8596\nwww.woo\namine\nwww.war\nritter\nfrutas\nljs4394\ndasf\nqwerty123\nwww.poland\ntem\nskycity\nebmzone\nmail.lists\nskyblue\nbecky\nxoghzkb\njps\nmailsender\ns2handi\nprune\nsajjad\naardvark\nzaqwe9713\nduo\nsbboa\nangle\nanika\ngreenroom\noctober\nhayanpibu\nmodelboa\nbdr\nbaksu74\nbeowulf\nfallback\nparadigm\nrevive\nkillerjjh\nkbsbond\namrit\nsafran\nartiman\nsafdar\nmdesign\ndemo23\ninbmall\nyagudosa\ngsb\ngsh\nankit\nhyunsoo1\nankur\nird\nau11\nahmedabad\nlovesukjun\ncamden\ndnddlek81\nbywoong\ndesignart\nmomkids\nusldskel\nrouter1v105.zdv\nmkk9894\nt1234\nbess-proxy\nnexzen\nhothot\nletstalk\npgm\nsadhu\nhavana\nkjhlhj0313\nanoop\namaranda\ntulipe\ngrn01\ntodytody\nevangelion\nplanner001\nhyu21ni\ndnflkskfk\nsky4005\nbebequ\nusb52614\nstarshop\nheyckim\nshyness37\nuser01\nwbg\nurologyadmin\ntruegirl\neboya4\ncardiary\nsluggo\nqnrrudrud\nkyois\nakai\nsuny58\ncochise\nanwar\nzxweb\nmypopstyle\nqqbox\nhellowyp\narash\nsuperior\nhellboy\nvosko\nqkdl0922\nstarsbc\nhombrecokr\narman\nsudafun\nmoja\nkim389\nwww.sad\nalfi\nalin\nmsproject\ncodibank\nzyz\noakland\nasoka\nkathmandu\nmomsbebe\names\nmcse\ncomuriji\ngotsodrl\nbusdayrim\nmoonyelf\nseinz\ncarka\nleninache\nbbre5241\ngiri\nmailcleaner\nssailor\nkhdesign\nstyleshop\nuf\ncoffeehao\nfrc\nwww.progamers\nstatic1-org\nsimu\niop\nsherif\ncasta\nwww.pow\napcompany\nautoconfig.az\ntemporary\nautodiscover.az\nwebdisk.az\nfiorekorea001\nproyecto\nkingmaker\nwww.one\nloveyou1\nhaemir\nwelook\nsky0958\nbme\ni486yhs\nhjnm34\nblanca\ninfoshare\nbenisjw\npolymer\nedp\nsungjo2001\nmintshop\ngsncom\nbombom\nbess\ngmrao\npulleaum\nsang248\nct1\nnomad21\ntonic\n247\ndsh\nsang247\nwww.violet\nwedro\nallot\nallah\ntheshadow\ncunsung\neod\nottomall\nwww.enigma\nmollym\nparkhunuk\nnmg\nneture\ndreamworld\nevenewyork\narka\nhlsports\nsunytest001\nwww.trans\nmcoup\nqatest\nalger\nfungo\ndeo3000\nthermo\nhss7333\ndikfmj28\nessential\npueblo\nfufififi\nbiscuit\nkrisberry\nelita\ntherapy\nhyymlove\nmisskar\ncrochet\ngrid2\nchanz\nnetnews\nbadboyshop\nushng02\nwww.lit\nassi\ncokokk\nrubychi\nguardians\nwww.srilanka\narkorea1\nwww.idaho\npcportal\ngimminhyun\nbrokers\nsonemart\nautopro\nqopnbvevb\nbobkjd\nstasis\nkyung2299\nayman\nautoparts\nbyhappy365\nehdgoanrh\nkoopreme\nhightech\nhan2gage\naaa123\njisuandj\ntachikawa\ncheesecake\nshinagawa\nemnbxjkst\nbelieve\nenjdfm323\nhanax\nshoesbal\nwww.irs\nwww.ips\njiyugaoka\ncf2\nhanab\nmeysam\nnfl\nseriat\nlomcehia1\nabcd1234\nkai202\ngoonis21\nwww.agents\nmeo1973\nsunwoojin1\nzerosumz\nnahyenmom001\nqlzlsl\nshababcool\nwww.gtm\nbenedict\nwebkey1\nkbs3749\nazalia1020\namiltd\nmonkey202\nabracadabra\nonedirection\nalas\ndlfwhago\ngoodr39\nkbi3229\nkct3000\nwww.submit\ndivertimen\nstate\nstarhome\nmin0501\nhajimeru\nhongsham\npaparazzi\nhamuske\nrepairman\nsoaps\ncogygud\nt18503\nwhqudgus81\nhotel4989\nmfe\nayan\nmangojelly\ngdguy15\njun0970\nc52\nthehill\ngrp\nbuffer\nwww.epi\ntbi\npporf\noyesloan\nxxxl80\napple10cme\nbusstop1\nwww.pix\ncomeon\nmeteor76\nalstjd0001\nampere\nas77as\nwp-test\ninstrument\nmogi01\nredcap\nyayoi\nsysweb\nwins20\nlifelike\nnostalgia\neccube\ndugian\ninquiry\nyanstory\ncocochi\nsahra\nhpcc\nunqpuio\nhalogen\noutsourcing\nhot2012\nrnxgwmuor\nmondayshow\ninschrijven\ngastory\nbran\nbris\nmelowyelow\ndriving\nllomn365\ndldms06\ntundra\nchyi87\nwww.btc\nrino54\ngeocoder\njeh0907\ncold\nrad02\ndisc\nfacebookadmin\nnaco3535\nwk\ndbslzhs\nmagicworld\nfashionadmin\nacn-net-cojp\novirt\nmindf-jp\nbma\npc001\npc002\nsuny2858\nbluehorizon\nmycampus-314-admin\najtgm-info\nalice5\neriana-jp\nloveae99\nmaxmobile\nosorymall\nguilherme\ngabinetevirtual\ncontrole\nautodiscover.vip\ndelfin\nczar\ndarkworld\nwww.cds\nsitelifestage\nz2\nstaging02\nhwjj1004\nm7043\nrk5558\nvirt2\njinpw73\ndeves\nilovez001\nmailproxy\ncomon\neunseong\nkiki0705\neuniii\nusers2\nclstyle\ncariere\neventhouse\ninneo\nzip1\nzico\nmmnxringk\nredfly\neagle9753\nyeunddang\nfreemu\nhslove80\npoli2003\nramarama\nrlaxotjd\ntidgodl\nhami0323\ngndo00\nkooragoo\ntimeleft\nilearning\nus3502\nsnowman\nccyulim\nfame\narabian\nqnubenhs23\nhsh7933\nlj4100\nwww.fp\ndnfl1206\niworld\nifdesign\nhjs7985\neyoung2003\nanydaum\nwebdisk.todo\nwww.econ\nkatze1004\ns0319y\ndadasa2\nriugombo\nyann\nyagi\nl33650\nas011\nju8646\nwow1\nkjy1823\ncestlavie\netoss\nmssql2005\nholylove\ndand1135\nrlekfuwlp\naugusta\nazul\nsechuna1\nautodiscover.pms\nww12\nautoconfig.pms\nspyro\nwg12\nwww.pictures\nsilkworm\nautodiscover.todo\nwebdisk.pms\nkado2\npokeradmin\nkimjr1941\nevrika\nburnhorn123\nnso\nkingchoon001\nwww.rms\nstoryone\nhma5400\ncomune\ntrud\ncjb\nnami000\nsaytool\nvatek\ndo504005\nvava\nautoconfig.todo\ncrush\nprimo\ndo504004\nnpart11\ndlink\ndbsdngus\nehfdkrksms\ntory\n800\ngoogleadmin\nleglong77\nesx01\ncocktails\nparosa\nhczerny\nsure\nqboouy890\nksy3151\nsuny2858002\ndox\nxboxlive\nverde\nkilo\ndisaster\nvirus0316\ntonga\nisshoe\nwww.light\nnextel\njimmys\ntimo\njaca\nrunews\nstation1\ntian\nyci2000\nhubert\nnmshdjsu78\nwww.mango\nchoichino\ndoniworld\nwww.porno\nsirent\nttu264288\nweeds2251\njina2493\noden\nen.test\nvertrieb\ntest-ssl\ntest27\nwww.maxim\nbigshan\npuddles\njoyongkore\npp725\ninet1\ntada\ncorporativo\nmc277668\nshot\ncotacao\nshoesadmin\naomyunswbs\ngujecat\njustfun\nhellyhs\ngrowing\ncar040404\ndub\ntoilfox\nika\ncap1122\npilot83\nlachy\nsejinilove\nkws1388\nnoyoung\nzixvpm01\nr0921\nsham\nhwa4394\nfeel701\nrota\nyahho\nbebezzang\nroof\nyiwutc\ncontrol1\nspamcontrol\nald1034\ngoodfeel64\nroad\noratest\nyws\nyeoli9\ngarrison\nsare\namf\nskola\nbluelucky\nmuledeer\nbulkflow\nsake\nondemand\nepicprintservice\nlaylie\nriko\ndonau\ntok2580\nfajar\nwww.adams\nxixi\nbrooks\nssonda\nyozme\nreim\nl9051\nvrs\nclouds\ndedi21\ndudwnls10\ndnjsdl79\nrayo\npixel3\nkhn1212\nwww.tlt\ninerjjang\nwww.anthony\ndept2\narchi80\nqhrhvmssu\nadonis9966\nbeijin2783\ntake1001\nanswn0240\ndgdz\nautoconfig.bugs\npiyo\nautodiscover.bugs\nfarid\nackbar\nwww-prod\narchive1\ntpa\nkcs0713\nalden\nserbia\nklink\nsignups\ndistribuidor\ngalls\nwww.solaris\nyenim\npeep\nbestoffer\nisfahan\nterrier\nmarlene\nalwin\ntohoku\nbalsa\nha1\nvmp\nkyushu\nns001\nsica\ninstructor\nfm2\nmyfirstsite\nredman\nveterans\ntelefonia\nladybird\nmilos\nvesna\nadina\ndcjark2\nmusicstore\nzhengzhou\nkristian\nbasset\nwww.te\nddb\nmxb\nmortel\nwww.party\ndazzlers\nprogrammer\nlarissa\nelise\nattachments\ntkm\nhomeloan\nflip\nwww.jf\naer\nradion\nserialkiller\nrtr-cadre\nbal\nelements\ntww\nsecuretest\nemran\nreio\noksana\nstress\nraido\nblackstars\nsurvivor\nmundial\neka\nning\nwww.andrea\niip\nsocios\njpp\n123123\nvgw\nproviders\nsoe\ngaara\nwit\nasser\nmoni\npmr\nlil\nwww.payroll\ngajah\nmone\naston\nwww.otaku\nbutik\nrin\nwww.cdn1\nptl\nnetmotion\nwww.karta\nrgp\nap30\noldstats\ntch\nparabola\ncaritas\nwww.animal\nawww\nwww.sbt\nwww2012\nmail.nsk\ntestserver1\nvmk\nvoz\norbita\nblimeyl\nwww.bird\nangelica\nwww.kg\nkassem\noldham\nimperio\nhellen\nmladen\nfmail\ndolcevita\nhonest\nhams\nhard\nlinden\nru2\npulp\nadriaan\nsankyo\nwineadmin\nalternative\nconfidence\nsidney\nnewstyle\nwww.prada\nstile\nlune\nkazama\ndare\nvybor\nebony\nshannon\nmilksugar\nhaya\nabhishek\narma\nyourhealth\ndeus\ngoli\nhackz\nhelptest\nvipmaster\nftp.web\nvds13\ncomenius\npdu7\npdu6\npdu5\nadela\naeolus\nekat\nsesam\nrag\nchimp\nlaurence\ngithub\nhatim\nfaza\ncollectd\nniconico\ngren\nvektor\ncerium\nambrosia\nwww.cap\nglas\nwww.animals\nhava\nniranjan\nbrucelee\njaan\nmidi\njaja\nmuneer\nchet\nonlinecasinos\naverell\nwunder\ntizer\ngraf\nr2.reboot\nilly\nmesa\ninda\njeet\nmargarita\nstrona\ns276\nlakshmi\nliving\ngtaiv\nwww.protocolo\nastana\nlexx\nmstar\ns425\nkarl\niro\nrabat\nmmo\nwww.titans\nlogistik\nkoleso\nweb369\nhotro\nmup\nleszek\nblogspot\ns247\ns245\njacko\nwelcom\nwww-d\nbeetle\nohashi\nwww.speed\njacky\ndogwood\nftp.ask\naruaru\nforlife\nip14\nwindylion\njove\nneweb\nwww.sound\nflyaway\ndtp\nkivi\njafar\nlapa\nniv\nd54\ncelsius\nwds\nvideogames\npowerschool\nklon\njahan\nmta6\nmafalda\nmta5\nzoya\nliam\njanet\npdu\nlexa\npropane\nuchi\nmail.main\nkore\nmonterey\njatin\ndreamhouse\nkoro\nromanos\nmala\nlapcooked.com\ntrantor\nextweb\nwww.automotive\nthessaloniki\novz\nmailgateway2\nmarg\nmats\nwww82\nwww.ultra\nmeka\nintranetdev\nipg\nmesi\nharvard\ngiorgios\nmygroup\nmiao\nwww.venom\navanti\nnama\nluan\nnccs\nneda\nbuster\nnena\nmcg\nveni\njung\nkarak\npawel\nneto\nkaram\nbonanza\nmao\nmyhealth\nelina\nnilo\nmarkanthony\ncluj\npagan\nrac3\ncentury\ndinara\nzel\nrackspace\nnarod\ncauchy\nvolgodonsk\nnunu\ndlib\niguana\nnintendo\ntproxy\norg2\npion\nchemlab\npma1\nloja2\ntattooadmin\ncesantia\nprix\nradi\ncameroon\nvsmtp\nsolicitarclave\nkeng\ncbg\nmlab\nkenta\nrasa\nrawr\nkee\nrenz\nkata\nwww.mohamed\nsaeb\ngenesys\n189\nkamo\nwww.bugtracker\n188\nsark\nproshop\nrclwp791749\nikarus\n154\nstrat\nshun\nhyip\nvertical\nintact\nstatic.dev\nwww.makemoney\nprograma\nautoconfig.auctions\nbbstest\nschedules\nesms\nautodiscover.auctions\nugc\nzg\nsonu\nbackupmail\njsoft\nsosa\nkaseya\nremoteapp\nscot\nspro\nanimeworld\nimagen\nartists\niserv\nstil\narr\nbalthazar\nmusictv\njamesbond\nsupport-ru\nuday\nrayan\nholz\nsusi\nmasterdb\nkondor\nkolik\nwww-cache-all\nrotary\nwebdisk.deals\ngunz\nmessageboard\ntestforums\ncumbia\nwapes\nwww.jump\nufos\nregalo\nwsam\nwireless2\nsamorzadstudencki\neic\ntutu\nundo\nhihi\nwww.pro.glass\ntheclub\nspeedtest.nic-west.cy\npatton\nyjsgl\namen\nwael\njusttesting\nwww.chalet\nwww.chance\npro.glass\nwww.illusion\nwww.mypage\nalonso\nkeaton\nhand\nsima\ntakeshi\nin01\nmaket\nftpmaster\nvieclam\nmaniac\nbostonadmin\nbomail\nhearing\nmini2\npapers\nwww.myblog\nxman\nexia\nwww.welcome\nkemahasiswaan\nmarianna\nevol\nmanel\nhro\nwwwn\nautoconfig.indonesia\nwww.spravka\nwww.horo\nwww.vd\nwww.fair\nmariam\nbrightside\nwww.italy\nbonilla\ndynamic2\nmagazines\nascom\nmachi\nwww.elektro\nwww.philippines\nrci\ngage\nautodiscover.indonesia\nwebdisk.vietnam\nsystec\nwebdisk.indonesia\nhtmltest\ndynasty\ns4104\nmachida\nthumbweb\nofficespace\npsu\nmehul\nadj\nheri\nlopes\nlopez\nfarshad\nbconley.com.inbound\nwasf-law.com.inbound\nredmine2\nds01\ntopten\nlemonde\nizolda\nzita\nwww.alexander\ndrug\nwww.martin\nkato1\nassoc\nlotfi\nfact\nlou\nbud\nfrisbee\ncmb\ndee\nwebdisk.pay\nfabi\nwww.freebies\nverification\nrelay5\ne8\ne9\nakademi\naig\nsecure8\nwoodruffsweitzer.com.inbound\nmidwestglove.com.inbound\ndome\noci\nserver61\nmodental.org.inbound\nhannibalbpw.org.inbound\nlogin3\nsife\nophthalmology\ndini\nmisha\nnajme\ntoluca\nmiddleware\nkomenmidmissouri.org.inbound\nedge01\nwg2\ntestr\neigo\ncommunitybankmarshall.com.inbound\nwebstage\naic.org.inbound\ntheatre\nibf\niap\nmsma.org.inbound\nfbc-columbia.org.inbound\nkaiteki\nhsa\nb35\nauta\ndayz\nwww.odessa\nb37\ntix\ndaffodil\ndfm\ngerke.com.inbound\nfreezer\nb38\nwww.fe\nmohak\ndr-mail\nwithersradio.net.inbound\nwww.kostroma\nastrakhan\nmail.oyun\nmikekehoe.com.inbound\nb41\nkse\nns.oyun\nmaison\nb43\nkmfc.com.inbound\nipv4.oyun\nmgn\nkopn.org.inbound\nwebmail.oyun\nmosab\nautoconfig.play\nkrcg.com.inbound\nmustapha\nb47\nthedoctorshelper.com.inbound\nb48\nvampire1\nmpl\ncheckmail1\ndaw\ncafw\nmri\ncheckmail2\nkpo\nnidal\ninterconnect\nautodiscover.play\nemac\npcm\nwebdisk.play\nrahmat\nwww.sie\nnikos\ntechnica\nhsd\nautoconfig.social\nmoberlymonitor.com.inbound\ndanielboonell.org.inbound\nrce\nv21\ntechops\nblogi\njoycebremer.com.inbound\nklik\ngsr\nbln-stpt\ngardenia\ncbofmo.com.inbound\nmanitoba\nwww.lc\nwww.zzb\ndementor\nedhardy\ndouga\nda4\nfreesms\nm23\nwww.cw\nsslgate\ncao\nshilohranch.org.inbound\nmfaoil.com.inbound\nhidamari\nfblmo.com.inbound\nexecutiveadvantagellc.com.inbound\nnotas\natoz\nnewmy\nleestirecompany.com.inbound\nloveallrv.com.inbound\nwww.integration\ncpps-ofallon.org.inbound\ngoriley.com.inbound\nbarsa\nmoroni\ntakahashi\nleave\ncano\nsinergia\ncana\nwww.fantasy\nwww.marketplace\nprb\nprl\ntanaka\nvalery\navila\nzdh\nleaves\npop4\nbolsa\ncountryside\nlinus\naod\nsahar\nwww.nuovo\njxgc\nwebdisk.preview\nphe\nltc\nbibi\nwwwakamai\nsmartpc\nzjc\ngi-6-1.edge-r.fra.de\nte-1-4.core-r.lar.cy\ntactics\nlpdns\nbras\nwebdisk.t\nzch\nplymouth\nwebdisk.g\nanta\ncny\nperforce\nroll\nbioinformatics\nstalin\nforrest\ncolour\narmadillo\nautoconfig.orders\nwww.nj\ndeuxface\nhokuto\nwww.rm\nmini1\nlibero\nepica\npentest\nwww.podarok\nautodiscover.orders\nwebdisk.orders\nmj289\nwww.camfrog\nwww.coffee\nsmk\nwww.dubai\nwww.hits\nriv\ngreenfield\nallergies\nc14\nwww.distance\nfianet.xml\nwww.boston\npartenariats\nc15\ngelen\nkazuma\nc16\nc17\nwebdisk.press\nnewcity\nhiro\nfreetalk\nc18\nmail.support\nc19\nrobotic\nalexey\ncadremploi\nc22\npartxml\ngogogo\nback.partxml\nimg12\nc23\nc24\nhelio\ngomel\nbrooklyn\nengineer\nc25\npatches\nanek\nc27\nhiper\nhooloo\nwww.crafts\nsmtp-2\nsaqib\nwww.peliculas\nolder\nrunrun\nc28\nperry\nstat7\nwestpalmbeach\nc29\nequipment\nstat6\nseventh\nsace\nlx1\nc31\nnegocios\nc32\nc33\nq35\nq21\nhq3\nkaden\nraf\nq8\nwww.urban\nkarlo\nc34\nwatanabe\nc35\nliming\nfortworth\nwilkinson\nboulder\nwww.behzad\nwww.melbourne\nlunchbox\nnevertheless\nq1\nwww.membership\nc37\nwojtek\nspeedway\nwww.span\nc45\ncallobserver\nhomewood\noutput\nwww.origami\nhrnet\nmedina\noaw\nhajar\nwww.limited\namakusa\nanaheim\niron2\nwww.haj\nmixer\nyuriy\njohan\nwww.present\nlevelup\nfritz\nwww.orlando\nholyspirit\nsquid2\npauli\nwaltz\nwww.bodybuilding\ntegrity\npooya\ncbk\nlaurel\ndavidjones\ngreenwich\nblackpool\nbotamedi\nprovidence\nmemcache1\nanshin\ncaelum\nlionheart\nwww.gsc\nplane\nphp2\nwww.gta\nwww.ali\nvip11\npnc\nwww.tim\nbushido\nethereal\ne12\nmythos\nlifeup\nwww.dragon\nsevilla\nd3.files\ntoplevel\nkuperkorea\ne24\nwww.good\nd1.files\nsaif\naram\nscary\nd2.files\ntototo\ndell2\nvip10\ne107\ngameserver\nwww.pol\n31sumai\nresona-gr\nwebdisk.form\ndaybreak\nzenrosai\npcw.istmhd\npcw1.cyahd\nraouf\nautoconfig.form\nkeele-nnw-leis-mc-leis.net\nwww.nyc\nautodiscover.form\nreplicas.ldap\nautodiscover.galeria\nautoconfig.galeria\nlib-ht-2.net\nr-es-1.net\nlib-ht-1.net\nxtermsrvr.gradsch\nbcst-rs.hor\ndownloads4\nwww.wpb\nrecfs.kis\nkuwahara\nrtr-t.lin\nlib-ln-1.net\n61-e.lin\nblakout\nucb\nsoaptest\nr-ch-1.net\npcw1.cechd\nautodiscover.dating\nautoconfig.dating\nopenathens\nwww.mic\nrtr-rs.hor\nhuda\ngnat\nsarasa\nwc00300.wifi192\nnet-x.bar\nyamaneko\nbootstrap\nbuilder.manage\nwww.seminars\nmuzee\nanapa\ntreat\npcw1.ugmhd\ndeniz\nnet-w.bar\nncom\nnet-s.lin\nshares\nwc00300.wifi160\nnfreya.net\ntrail\nrlaguswndl2\nfujisan\npcw.cyahd\nafs.cyahd\nafs.pmed\nwww.ken\nr-dw-1.net\nbcst-ob.ohx\nwc00300.wifi96\nmail-backup\nnet-e.lin\nwww.moj\nmitsu\nliens\nafs.medx\ncmstore\nxtermsrvr.netwshop\nrtr-x.bar\nbcst-cta.lin\ncabal\nrtr-w.bar\nlib-oa-2.net\nrtr-s.lin\nnet-ob.ohx\ndarkdream\nwww.formula1\nsn2\nnet-t.lin\nrtr-m.lin\nrefah\npcw.cechd\nagentfox\nzeal\nwin27\nafs.istmhd\nafs.cechd\nrtr-cta.lin\nbe2.server.twtmail\nwin23\nr-ht-2.net\nr-ht-1.net\nicand\nxtermsrvr.kopen\nwebdisk.intranet\ntoddy\npcsrc.kis\nwww.aikido\ndanesh\nwww.cake\ngara\nmagda\nh101\nwww.onix\npcw.ugmhd\nafs.ugmhd\nclubtest\nwww.vle\nwww.dev1\nforsaken\nbe1.server.twtmail\nafs.kis\nemea\nlexmark\npsb\nanson\nfreya.net\n61-cta.lin\nbe3.server.twtmail\nlib-ln-2.net\nmisterx\nminimax\nrtr-ob.ohx\nb40\nxtermsrvr.temp\nb50\nefc\nc30\ne20\nscimte\nhitec\nrtr-e.lin\nfluxus\nmail.hi99\nstfafs.kis\nxtermsrvr.lect\nr-oa-2.net\nmil5500\nhwbgz01\ndemo-webconfa\nsjm\nso4\nhi99\nwww.karin\nr-oa-1.net\nshore\nbcst-hj.hor\ngboard\ntibor\npcw.pmed\nr-hx-1.net\nvolcano\nbuiltin\nbcst-x.bar\namoxicillin\nchiron\naiken\nmikyung3422\nnewsms\npun\nmail.av9\nserver56\nserver57\nmohammed\npcw.medx\nbcst-w.bar\nvpngate\nuni-netebas\nitunesu\nszxmam01-sen\npcw1.libhd\nbcst-t.lin\nbcst-s.lin\nnet-hj.hor\nlib-oa-1.net\nsalar\ntr2\nsameh\ninner\npcw1.istmhd\nlkpf-dx\nreestr\neverdream\nprint-mo.net\nbcst-m.lin\nxtermsrvr.lib\nxtermsrvr.kpa\nnov\ns70\nwww.new2\nrtr-hj.hor\ntivoli\nszxmam02-sen\nspas\nsamir\nnet-rs.hor\nbcst-e.lin\nsjpostad\nkm7007\nstarsky\nstuafs.kis\nmail.int\nmun\nupdates.kis\nijeltz\nbb.vle\nxtermsrvr.plroom\nmvc\npcw1.pmed\ns81\nsalto\nsanda\nr-is-1-2.net\ndlv\ns83\nsaran\nbighand\nkookoo\nspill\nlsf\npcw1.medx\nlsc\npagamentos\ns07\nsauce\nmbb\nwc00300.wifi64\nsolis\ns09\nwww.joom\nsayed\ns87\nwww.ijeltz\nkik\nnet-cta.lin\nav9\nwhitelist\nkcl\nsobee\nhaj\nwww.testy\nlocalhost.cc\nr-ln-2.net\nerp2\nwww.det\nankitjain\nmyhosting\nstraight\nbustup\nfr.test\nsenha\nskydive\nmizu\ndemo123\nproxima\npcw.libhd\nwww.cnr\nr-ln-1.net\ngpt\nwww.programy\nshani\noceans\nrowan\nmail.av9898\nafs.libhd\nstaffprintcluster.kis\neys\nvpspanel\ncs-utils-rtr.net\nav9898\nw-htgb-a.net\ndad\ncreo\ngbc\nunite\nshona\nuriel\ndarts\n4test\nsinfo\ngalerias\nequilibrium\nbusiness2\ngarp\ninst\nwww.eos\noptin5\nidisk\nwww.amb\noptin10\necontent\nshyam\noptin1\noptin2\noptin3\noptin4\noptin6\noptin7\noptin8\noptin9\nharlem\nheavensgate\ncoffeeshop\nwebdisk.assets\nwww.wb\nqzone\nharami\nebenezer\ntasha\nwebeoc2\nautodiscover.realestate\nautoconfig.realestate\nmomiji\nshift\nszmail\nappserv\nwebdisk.realestate\nyas\nrudra\nsheep\nwww.ni\nb2bqa\nesprit\nmakeawish\nwww.christmas\nfc1\nwww.paysites\nwww.empire\nosl\nslick\nboogie\npdl\napp10\nlop\nans1\nans2\nbellevue\nkirara\nbooboo\naltemis\nsober\ncinderella\nsynnexdns\nblu\nghs.google.com\nfcp\nglxy\nsyslog1\nb46\nmargot\necity\nryan1\narsenalfc\nfts\nvideoman\nnolimits\nsaleh\nchb\nr8\nwww.ab\nlunatic\nfonts\nautoconfig.suporte\nsammi\nautodiscover.suporte\nwww.af\ncntt\nwww.ag\nmainserver\ncatia\ndns117\nwww.theater\nsnowflakes\nproofing\nwww.dv\nroot2\ntigre\ntimex\nassassins\ncluster4\nwww.ha\nnastik\nns4a\nlovestory\nns3a\nwww.hb\nplastic\nweb3d\ncosplay\ndesignme\nwww.gr\nweb47\ngtb\nweb42\nweb40\ndmi\nftp.video\nsmarterstats\nvideogame\nappletree\npuppy\nmserver\nftp27\nftp26\nmail.edu\nftp25\nwww.marcus\nshib-idp\nftp24\npmu\nftp23\nmysql51\npsyco\nbite\nstunt\nravin\nftp22\nwww.jv\ninfo3\nlpc\nns142\niwin\nftp19\nftp18\nphiphi\nw23\nftp11\ndnsmanager\nwww.presse\nwww.mf\nwww.lt\nmercurial\navail\nankara\npshop\nsoldier\nsodium\nindie\npdc1\naccept\npc110\nwww.oz\nftp.crm\nsotestapi\nwww.nw\nchatterbox\nwww.africa\ncookiemonster\npos1234.netcologne-mw\nlitchfield\nc-kurs\nwww.panama\nthistle\nhermes3\nconferencing\narcheage\nblade02\nfreshy\nwww.doors\nsomi\nktel\nmyradio\ndenny\nmousika\nantallages\nworldofwarcraft\nxartis\nsport2\nwww.drivers\ncolumbo\nwww.xmas\nthetikienergeia\nwww.viva\ntravels\nwww.michaeljackson\nqmail2\nbonjovi\npluss\npl1\nstaffweb\nchopper\nreliance\nwww.ecology\nrural\nxpam\nplus1\naggelies\nplaisir\nptolemaida\nshirley\nchouaib\numair\ngw5\nmag2\ngw7\nmany\nrd1\nwww.interactive\nfirstline\npars\ntraveler1\nmim\nwww.mysite\nhosanna\npainkiller\nsweethome\nweb128\nweb127\nwww.nirvana\nweb113\nwww.fotograf\naurore\npinto\npinta\nsvn01\ndummy2\nintruder\nthevoid\nweb108\nweb107\nnaijatuale.com\nweb106\nwww.jx\nweb105\ntechtest\nvgame\nwww.ys\nadvantage\nweb102\nmonitoramento\nnetcom\napocalypse\nsalavat\nwww.hassan\nperla\nurdu\nyamayama\nsuperuser\niplist\npecan\nnak\nvoltage\nwww.testshop\nscn\nrehan\ncelebrate\nspirou\ngamblers\nwww.adsense\nyancancook.net\nweb209\njatt007\npanta\nwww.gazeta\ntaimoor\nlom\ntudou\ntello\nsirius1\nwww.deathnote\nwww.hospital\napple123\nwww.sco\npandawa\nbnp\nmatsuzaki\nkaa\nilikeit\nbr2\nbackup03\nadarsh\ngutschein\nalkelaa\nweb62\ndemo-imeetinga\nsaikat\nmadoka\nmail-ext\nwww.junior\nnoisy\nweb208\nautoconfig.ns2\nautodiscover.ns2\nweb98\nmath2\nramadhan\nfree-software\ndailynews\ngeoffrey\nclaudio\nweb49\na123456\nweb46\nweb41\nrek\nweb39\nzags\nwalia\nweb38\nrockwell\ndnevnik\nwaqas\nhellraiser\nhome3\nemarket\nkb2\nxatka\nstatic8\nposgraduacao\nwasup\nleisure\nmx09\nmx08\nlampung\nsip.abas\nmerchants\nmsoft\nlilili\nb74\nwww.enciclopedia\nmatthew\nrivers\nstartimes2\nsingles\nneverland\nmail.mobile\nbengal\nwww.egitim\naubade\ngok\nn62\nsakata\nfarzana\nsacred\nmozzi\nnetsoft\nwww.myworld\ndni\nlinlin\nindico\nmangesh\nhackermaster\nstream6\nmonia\nnever\nblackmarket\nkareem\nweb-2\ndemo-reg-hostingconfa\nduality\nwww.clickbank\nrevival\ndragonball\nrunescapebeta\ntest12345\ns520\nreddevil\nyms\ncc4\nfira\nmuneeb\nsireg\naco\nmas3\nmichail\nvertikal\npositron\ngoodwin\nxlab\nwebdisk.2011\nbirth\nchair\nmukesh\nrio2\nmahmud\nfakultas\ndph\npacket\ncanaan\nmilad\nmail.mse17\ncherepovec\nwww.ufo\nnalchik\nwebstaff\nmissworld\nhabbomusic\nnesa\njkt\npcclub\ngaokao\nlikewater\njk2\nduffman\nnass\nludus\ndocs.dev\nwww.lj\njameson\nshaheen\ngraveyard\nautodiscover.aff\nwww.load\ndiag\nwebdisk.aff\nautoconfig.aff\ncsn\neastwood\npieter\nmarcela\npppp\nmikki\nmsgs\nshaimaa\negg\nwww.anti\nfiles5\nmanuka\nmail.mse7\nsh8\nwebapps-test\nlongitude\nxiang\nwww-qa\nserveradmin\nsh9\nbicycle\nwww.ares\nfreecoins\nmail.mse20\nwww.hd\nslovenia\nwww.ke\nbbs7\nmail.mse8\nuzair\nshaper\nmedialab\nedetail\ntest47\nips.vds\npunch\nwebdisk.au\nwww.cq\nwebmailnew\ncdns2\ntest09\nmx.mse12\ngoal\ndwp\nmail.mse9\nnews02\nwww.bh\nmontpellier\nftp33\nmartha\ncdn161\nsarg\npile\nworkorder\nwww.olympus\nnicholas\nftp30\nvsv\niwt\nmasumi\ncomponents\nmiya\nlake\nhelpdesk1\nuna\nprisonbreak\nthanks\nbranding\nsjbluecn\nmobileworld\nns211\nsyb\nns231\ntelefonica\nrampart\nhimki\nseychelles\nssk\ncorleone\nwww.boss\nsmu\npm3\nmx.mse20\nasa2\noverland\nftp29\ndila\nkickoff\nftp28\ncas4\nwinweb01\nm03\nm04\nctb\nshc\nsgg\nelwood\nmail.www\nwuxin\nmx.mse22\nmh1\nsmtp-test\ndn1\nkonoha\nethos\nwww.eda\nrenault\nthesource\nwin31\ncavin\nmailhost1\nflare\nwin34\nmice\ncavuit\nparaiso\npml\noceanic\nnyhetsbrev\nurl-server-cn-3\nwebdisk.love\nopx\nxiaoban\nwww09\ndev40\nsnickers\nbdb\nautodiscover.love\ncftv\nlexikon\nwin30\nwin35\nautodiscover.filme\npf2\nhost-1\nmelina\nunicreditsim.investor\nsnx\nautoconfig.filme\nakademie\nnns\nwebdisk.filme\nvinny\nsmtp.mse17\nsmtp.mse18\ngenealogie\nsmtp.mse19\nsmtp.mse23\nsmtp.mse22\nleblanc\nfacebooklogin\ndynamite\nilink\nid2\nwww.fitness\nno8\nmow\nwebbank\nmnm\nmnk\ncrtrieste.investor\nautoconfig.love\nwww.em\nnan\nsgi\nzaurus\nretriever\nnewtechadmin\nvpnb\nxelion.investor\nmo2\nkym\nmfa\naffinity\nairfrance\ndhcp4\nsnapper\nkdm\nbancacrt.investor\nhost196\nbarman\nhost193\nsmtp.mse20\nh26\nwww.ib\nsecure13\nwww.streaming\nautismadmin\nsciences\nnaveed\nartykuly\nordini\nwww.pi\ncassamarca.investor\nksl\nksg\nharare\nlch\nwww.investimenti\nricerca-ac\nlay\nkkn\ncariverona.investor\nfhm\njsk\ncaritro.investor\nesmtp\nsmtp07\nsmtp08\nntb\nh22\ndaniels\nwww.short\nh25\nhtd\nwww.ug\nmarch\ndnsb\njjj\nshop4\nfavorit\nwww.lineage2\nwww.call\ngooglemini\nesk\nppl\nhost131\nproxytest\nhost124\nscores\nrho\nbiochem\nshibidp\nadmin.mail\nchaka\nrunescape\nhost116\ncrick\nrsport\neliza\ncityweb\ngabrielle\nwww.bloom\nmailuk\nhost113\nhancock\nuu\nmyface\nbigred\nyamuna\nglitter\nmail.mse10\nmlc\nrenegades\nmyspace-login\nmail.mse11\nmail.mse12\nstaging.administration\nhost111\nifb\nmail.mse14\nmail.mse15\nmail.mse16\nautoconfig.sales\nhost109\nautodiscover.sales\nmail.mse18\nmail.mse19\nwww.if\nzubin\nsyllabus\nchutiya\nmail.mse22\nm17\nmail.mse2\nwww.hope\nparse\nksoft\nnagios3\ngwa\nmailsystem\nserversupport\nwww.dolphin\nhost108\nwowinfo\naut\nhy.lhzs\nstg.www\nhost107\nvlab\ncitizen\nhost105\nhost104\nwww.healthcare\ncsis\ntimekeeper\nhas\nduluth\nschsmtp\nstatler\nfacebok\nfre\ndownload5\nturnir\nasa1\nwww.gct\nflashtest\nmx.mse7\nwww.just4fun\nktech\nproject7\ncher\ntestwiki\nmhsmtp\nlogins\nrlp\nkisa\ngct\neet\nhost102\ncum\npontos\nspenden\nephraim\nstockholm\ngeodns\nkitt\nreno\nalexis\nmail.mse23\nmail.mse6\nvigi\nsmeagol\nbpk\nmx.mse10\nmx.mse11\nevaftp\nrenaud\nmx.mse14\nvhost4\nunibanking-test\nsmasb2b01\nmailspam02\napif\nwww58\nwww57\nautoconfig.gmail\nemail2003\nmail-out02\nane\nautodiscover.gmail\nmx.mse15\nwebdisk.calendar\nmx.mse16\nbbv\nevabid\nwebdisk.moodle\nhost106\nbb9\nmx.mse17\ncargoappmsg\nmail-out01\nhifisweb\nmx.mse18\nmx.mse19\neva-rms\nclassicrock\nhost110\nflighttrace01\nflighttrace02\nunibid\nmyegsc\nmyeva\ncurry\nhacking\nlinna\nweblogs\nwww.replay\nav01\nimmeet\nwww73\ncargoecdvp\nhail\nmx.mse23\nhost137\nmyforas\nwww.wirtschaft\nwww75\nmki\nelc01\nfisnet\nmyeva3\nlibrary1\nparque\nmyeva2\ntosh\ngibson\nevapm\nwww.album\nfiswebservice\ncmscpbs\nkenken\ngogoeva\nhost125\ntransformers\nlayer\nfpsweb\nelearnqa\nmx.mse8\nfisoem\nspsowa\nwww68\nnaresh\nmailspam01\nreal2\nshivani\nambsweb\nladybug\nmx.mse9\nevaflow\nsanthosh\nevawt3\nmx.mse6\nwww.leon\ngcstest\ncorreos\narkan\ncomercio\ntest31\napifweb\nmyegat\nsmtp20\nsmtp17\nsmtp18\nsmtp19\nsoldat\nimextabs\nshinobi\nevakpi\nmx.mse1\nepos\nmx.mse2\nslartibartfast.itd\ns80.as\ndiagnostics\npastel\ns105.as\nkram\nhost170\narchives2\nmotoki\nwww.akatsuki\nmado\nansar\nnamnam\ns3.svr.tdzs\ns13.as\nhost171\nhost173\ntrainer\nhost176\ntest24\nmail.europe\npejman\nfod\nconfigure\nsan2\nsmalltalk\ns104.as\nwww.akira\nhost177\noujda\nhost188\nthe-best\nhost150\ntruestory\ndystopia\nmigrate\ns190.as\nwww.tournament\ns106.as\nfujifilm\nsnooze\nhost130\ns1004\ns1125\nfreedownloads\nhost133\nmabel\nisca\ndragonzone\nalumnitest\nb92\ns103.as\ns134.as\nhost135\ns107.as\nautoclub\nwww.arc\neuphoria\nnsg\nn5\nzpg\nbb8\name\ns108.as\nweareone\nmexicanfood\ns17.as\nh2o\nwinvps\nscorpions\nbli\nfourseasons\npradnya\nvanna\nsidebar\npaulina\ndev-web\nwhich\nretailtest\nbelfast\nwww.sidebar\nthegrove\nsangam\ns110.as\ncrazychat\nkawasaki\ns102.as\nziggy\nmetin2\nsabra\npunta\nloginfacebook\nmarengo\nmesbah\nlacie\nbotnet\nportabilidad\nurbanstyle\nexeter\nl23\nbloodlust\nwww.seth\nnimes\neno\nmarryme\ns111.as\ncerebrum\nwww.ad2\nruch\nw2w\ncdntest\nmima\nzynga\nwww.whmcs\nautoconfig.panel\nautodiscover.panel\ns19.as\ngrafika\nfattony\ns101.as\ndarkangels\ns5.tdzs\nnairobi\nzagreb\ncercetare\nmcbain\nlukman\ngwb\nstrategia\ns112.as\nadmitere\nhic\nwww.mec\nded\nhig\nmontero\ntickers\nparamore\ndalibor\ngri\nkul\narlequin\ngup\ns100.as\nmartine\nredis\nhomologa\ns21.as\ns97.as\nh88\nh87\nnews5\nh86\nh85\nh84\nmobs\ns4.tdzs\nh83\nh82\nh81\nhoteltest\nmehmet\nwww.april\nmietwagen\ncooltech\nwishmaster\nwebdisk.mob\nmagnacarta\ndico\nzombi\nhamdy\nandros\niapetus\nbats\nh67\nh66\nhoo\ns113.as\nmailus\nhotman\nzizou\nh57\nphorcys\npotomac\nh56\nh55\nepimetheus\nhsk\ncoldwater\ncoltrane\nhtv\nwww.hoteles\ns60.as\nadmin.mysql\nh51\nmomos\nh49\ns22.as\nwww.cuba\nparana\nwww.yoyo\nasavpn\nislamway\nelbe\nupk\nzidan\nvali\nh43\nh41\nmgc\nupsilon\nwww.gaby\nh38\nefiling\nh37\nh36\nh35\ngeoserver\nh34\nyosef\nhost132\nh29\nspv\nwww.coupons\nhost134\ngangstas\nh27\nview2\nprt\ns513\nthird\ns114.as\nadeline\nzgame\nbanca\nmq01\ns23.as\nwww.tg\nhost172\ns322\nh90\nanjali\nwww.rt\nhost174\nhost175\nwww.sj\nh68\ngamerboy\nh50\ngss2\nh48\nh30\nwww.jl\nh28\nktf\nnakatomi\nhost194\nraquel\nmdl\nhost199\nwyse\nkarman\nsoyokaze\ngamepark\nsecure04\ns115.as\nsecure03\ncau\nmater\nwww.affinity\nwww.ep\ncooldude\nluz\nmagnetic\nradioadmin\npc252\nupdater\nxtrem\nshoping\nwww.eg\nmrv\nobl\nmug\ns116.as\nid1\nwww.umfrage\nlistados\nautoconfig.forum2\npc104\nanca\nliu\nmyst\ns25.as\nbugreport\nxx163xx\nusagi\ncruiser\nberserk\nwtv\nconteudo\nautodiscover.forum2\nop2\nzabbo\nprepress\nlivecams\nhotsite\nfesta\nore\ns117.as\nmayank\nwww08\npo1\ndev143\nduty\nwww.emc\nnorilsk\nabit\nwaldo\nxserve2\npowers\nmaximo\nkeep\nhabboretro\nalpha4\nmaxis\ncib\nelab1\nencyclopedia\nsyscom\nqlikview\nofficemail\nyemin\nsaw\nwin02\ns118.as\nusu\nwww.cce\nwww.musicworld\nwww.bla\nguppy\nicons\nalka\nmcd\nsax\nwww.dany\nhtc\npopa\nglossary\nposta2\ntb1\ns27.as\njafari\ngamefree\ntak\nslg\ntcp\nkstyle\npm4\npm5\nwins01\nsum\nwww.kinder\nwww.seychelles\nmaumau\ns120.as\ndiverse\ntre\nns182\nawm\nras03\nolivos\nwww.farmasi\nwebshare\nservo\nns172\ncmsweb\nlogica\nesxi06\nns192\ntde\nmanager2\nnikhil\nnorthside\naudio2\nwbs\nvov\nmoomin\nprtest\ncache01\nmarthe\nidpdev\nasimov\nclockwork\nwsf\nsecure9\nsurveyor\nmtech\nmall6\nyyy\nlync-edge\ns121.as\nbath\nwww.bk\ns1.svr.tdzs\nerina\nnormande\nuos\ntest21\ntile\nwww.aris\nking3\nwelcomeback\nhomme\ntest28\nwebcontrol\nclematis\nmarcia\nmobile.news\nlittlesister\nwww.bangladesh\nchefkoch\ninternet2\nevi\nandra\nopenwebmail\nspccore-router\nmomoiro\nlotos\nssearch\nextvideo\ns122.as\nolimpo\nstf\nproxynp\ns8.tdzs\nflashmedia\nwallet\ncarousel\npublinet\nwww.gw\nfiles7\ns31.as\nwww.szablony\nblog.dev\nmbr\nprestyle\nxavi\nmslogin\nmiley\nwww.ht\npubnet\ndatafeed\nwww.kc\ndwb\ns123.as\njhb\nmilhouse\nchrisss\namefirew\nbomberman\nkodos\nsideshowbob\nsound9\njinzai\nsandbox.api\nrichie\nzixun\npetshop\nprimequizzes\nmstyle\nlakhdar\nwww.hobbies\njacobs\nichigoichie\nijs\nmailru\nshimada\nrotaract\nquanghuy\nnnovgorod\nfool\nodm\ndetectiveconan\njack2566\nmymy\nmegha\nimager\nkailash\ntd1\nclicker\ncontra\ncrus\nirecruit\nlwbsb\nsecure-mail\ns124.as\ngatekeeper2\nold-mail\nmyself\nmth\ndarkshadow\ns64.as\ngenero\nsaya\nfunnyhaha\ngoogle-search\noktober\nmedvedev\ns3.tdzs\nhikaku\ns33.as\nmimic\nbober\nundernet\nbackmail\nspeedtest3\nwww.trial\nseasonal\neasynet\nhifive\nhemali\nbuenosaires\nlaperla\nplo\nmariposa\ncatharina\nexpertise\ncerber\nprimetech\nlinkbox\nctv\nspiritchapel\noriental\nfelicita\nbidb\nserious\nuygulama\nblackboardtest\ninfra3\nfishy\nmusicon\nmaildr\nnude\nadministrador\nmadura\ns125.as\nwww.maya\neapps\nwww.staf\nempleos\nwww.legend\nsatelite\ntime3\nwww.splash\ned2\nfaccebook\nogrenci\nwww90\nwww.legion\nnazuna\nspecial1\necommerceadmin\nwesele\nb72\nsimpson\npac2\nwww.gratis\noreo\nweb56\ntgc\npina\nmonsoon\nandesite\ns126.as\nwww.budget\nanduril\ncomp1\nhyde\nweb96\nvladi\nadmin11\nfastdownload\nbrora\ngladius\nthewarriors\nsvod\nnewfacebook\ns35.as\nharshit\nin1\nweb181\nfletcher\nusoft\nloveandpeace\nav99\nwww.techno\nnaman\ngo2av\nweb163\nweb48\nexistenz\nlamejor\nweb75\nweb76\nnovice\nmail.z\nwc2\ns8.svr.tdzs\nweb85\nmail.go2av\nu6\naadhaar\ngameon\nmail.plus28\nautodiscover.clientes\nwww203\nmanish\nweb91\nweb92\nweb93\nweb95\nweb97\nplus28\nweb178\nweb180\nweb224\nwebdisk.clientes\nklas\nautoconfig.clientes\nmail.99770\nmail.av99\nvipul\nweb210\nmail.9son\n9son\nmyweb1\nmomus\nweb213\nmail.adiscuz\nmywebs\nkunde\nmycom\ns36.as\nmail.tudou\nljm\nweb65\nadiscuz\nexchange07\nms13\nexotic\n99770\ndummy0\nweb225\nviral\nweb226\nweb227\nweb229\nmss1\nkcb\nweb231\nblackstar\nap5\nweb232\nwww.liriklagu\nonline-casino\nvinod\nhotmeil\nravel\nsldss\nmail90\nvenere\nautodiscover.s\nwww.asus\nwww.heaven\ntriangle\nautoconfig.s\nbrainbox\nnose\ndinesh\nnsz\nrmr\nmxbackup1\nwalle\nwww.oil\ntemp4\nyr\nhalcyon\nlauren\nse8\nacms\nwww.consulta\nwww.yp\npinocchio\ncaptiva\ntestserver2\nwebpr\nnaat\ntekno\npetit\nbiysk\nse6\nmaykop\ns129.as\nsmtp170\nse5\norsk\nvicki\nwww.ky\nwww.armageddon\nvps0\nvpsa\ntaylorswift\nscouts\nnew.test\nexpo2010\nvpsb\napolon\ndummy1\ns2.svr.tdzs\ns38.as\nventa\ns204.as\nyourspace\noo\nwww.watch\nkarachi\ns131.as\nzq\nweb115\nweb116\nweb117\nweb120\nweb121\nweb122\nwww.ecuador\nweb125\nitnews\nbaa\npitta\nstage-admin\nwww.supermario\nneonet\nddns2\nwww.libros\ntanis\nshambhala\nconexao\ns39.as\ngemini1\nautoconfig.catalog\nautodiscover.catalog\nmdmc\nmail2sms\nfasttrack\nnarutoworld\nwww.exodus\nflowershop\nstatusquo\nyjsc\nrns\ns132.as\ntopper\nallergan\nnetworth\nfellows\npunjab\nwww.eternity\nkazekage\nwww.word\nmallorca\nffmpeg\ndrluke\npardis\nwww.crazyworld\ns41.as\nanimales\npinkfloyd\nwww102\ncyberhacker\nundertow\namuse\nmatsu\nenchanted\nwww.statusquo\nwww124\nwww123\ngim\nitsolution\nweb158\nweb160\nweb161\nrapunzel\nhendrix\nwww.domeny\nwww.uto\nweb162\nolddb\ndomeny\nweb165\nwww.fiesta\nsshot\nbrc\ntruth\nweb166\npuccini\ns133.as\ns119.as\nshoe\noes\neager\ncurriculum\nduranduran\ntgate\nweb167\nweb168\nfiji\nhackerpro\nzone1\nzombies\nw50\nbsk\nvpnx\nsvr\nxplay\ncre\nprana\ntrung\npercussion\nweb171\nwww.nr\ntest999\nweb172\nkannon\ntehnika\nadmin7\nweb173\nsercom\nwww.nh\nwww.ne\njdm\nweb175\nsharktech\nartesia\nweb176\npo3\nweb177\nbx\nwms3\nsumi\nvideo7\nns251\nwww.makeup\nnewstore\ntonto\nwww.listas\nvideo8\nctt\nvideo9\nns241\nwww.kq\nwww.hongkong\nrooney\nwww.bangkok\nedge3\ncelina\nsharks\nkostas\ntomi\nbassel\ns135.as\ntora\nwebdisk.updates\nmea\nftp.news\nallnews\nfb1\ngilson\nfairyland\nweb230\nweb233\nscutum\nremember\nweb45\nwww.jr\nmaximizer\nperiodicos\nwww.registrar\nstacy\nmatematica\nmt5\nnsy\nwww.guru\nheadstart\nyantai\ndaniel1\nfreire\nmontecarlo\ntwig\nbok\nwww.dm\nmonza\nwww.bp\ndkp\ntestws\nwww.myforum\nleona\nwww.bl\nnickname\nwww.an\ns136.as\nmediatheque\npea\ncorazon\nmays\nkeiba\nwww.picture\nsanae\nwww.spotlight\ndev.services\nwww.madison\nvignesh\nalb\nwww.medicina\nautodiscover.test1\nsmtp.test\niodine\nedm2\ndob\nftm\nsqmail\ngit2\nsupplierportal\nwrx\ns205.as\nfsg\nnmp\nyakitori\nwww.gadget\nshifa\njmk\nryo\nconsigna\nvirtualserver\nazmusic\nwww.anp\nwww.d3\nlca\nlcf\nwww.records\npav\napp01\npst\ntcg\nseaside\nwww.bia\ns46.as\nmoderato\nokada\nsoyuz\ntow\nvpp\nravenous\nlethal\ntasya\nhongha\nwww.holy\ndrawing\ndienthoai\nkevindev\npop.out\nald\nramune\nwww.proto\nomc\nshinhan\nftp.out\nwebeoc1\nbmr\nmagica\nwww.asi\nswimming\nmyapp\nwww.mn\nharima\ncog\nwww.dragonballz\ndemoserver\nwww.ars\nwww.dsa\nintramail\nwww.nms\ntalia\nwww.eminem\nwww.cci\nwww.goa\nbusiness1\ntvm\ndoh\nfte\npsych\nwww.nsr\nwww.seg\nnoavaran\nmjc\nwww.costarica\nprocessmaker\nsitemail\nchanel\ndev-mobile\nwww.writers\ncyn\ns139.as\nmfm\ntestsite1\nautomobile\nmanas\ncln\nchatchat\nyosi\ns48.as\nregal\nwww.cdl\nlove520\nmenslife\nhat\nvosges\nwindstar\nnguyenhoang\nsahoo\nwww.cytaty\nlifeisbeautiful\nwww.das\ngrg\nsaudi\nnoz\ndreamweb\nwww.openid\nfundacion\ns141.as\niea\nsergo\nhoi\nzoeken\nmybill\nsongoku\nshash\nsecretpage\ni4u\nmostafa\nteksty\nsegar\nwww.get\ndns201\nlocalhost.cs\nwww.humor\ndns202\ncytaty\nmail.students\nbloodlines\nencounter\nexoticpets\nmatchup\nsofie\nsethi\nblueprint\nvolkswagen\nwebmail.pec\ns08\ns86\ns85\nsasan\nwww.famous\ns84\ns51.as\nsanty\nnable\nsando\nwonko\nkrew\ns79\nbbdb\nbizadm\nimation\nctd\nismp\n2005\nmwe\nsam2\nrgs\njeltz\nmy-test\nstaty\nstage.api\nwww.09\nvks\nfemme\nsamin\ns206.as\nwww.fly\ndedecms\nelog\nvs01\ntams\nwww.dienthoai\nmymeeting\nb149\npalmbeachgardens\ntime4\ns144.as\nearthquake\nb139\nspan\nwrt\nh206\nombre\nsaira\nh205\nwww.gym\nreddevils\nanan\nsadia\nvs12\nqna\nunreality\nwolfpack\nserver53\nh204\nh203\nh202\nh201\nint1\nedv\nongame\nlynda\nipadmin\nkeine\nwww.jam\ntmms\nqqqqq\namana\nwww.adel\nwww.ipc\nricha\ndetudoumpouco\nwww.psychology\nwww.sib\nwww.opt\nsheepdog\nbillie\nttr\nwww.ipp\ns146.as\nwww.trailers\nh126\nftp-dev\nsculpture\nmarc1\nsupportadmin\nozelders\nswing\nwoe\nwww.kai\nwol\ns55.as\nh116\ntalks\nwww.esports\nexorcist\nbluehat\nlinde\nh100\nf113\nwww.ist\nwst\nwww.startrek\nspeakout\nmarka\ne178\nclearing\nsaria\ns147.as\nc251\ndaotao\nshape\nc250\nymd\nc247\nc123\nddv\ns56.as\nready\ntonny\nc117\nlebron\nwww.lop\nnarutofan\nnovosti\ntooth\nwww.itv\nb158\njosephine\nnosferatu\nsadeghi\nb157\nexpert1\nsiteantigo\nwww.dss\nb156\nwww.mahdi\ns148.as\nwww.poetry\nb155\ndina\nmacserver\nliveon\nwebha\nitacademy\ngovernment\ncolosseum\nhavilah\nwww.formation\nrafting\nnguyentu\nb154\ns57.as\nwww.log\ndaiwa\nwinkel\nshowbiz\nwww.stocks\nmirai\ntraum\nbulletproof\nb153\nsecur\nrezerv\nlalaland\nb147\nprocon\nkeiko\ncancun\nwww.moo\ns149.as\nwww.msi\nkasa\nb146\nlocalhost.lib\nvvp\nmaiko\npentaho\nkotobuki\nmedaka\ns50.as\ncounter2\nwww.pec\nb145\nroble\nyunus\ndownloads2\nbelair\nb144\ns7.tdzs\nwww.thai\ns58.as\ncom01\nperth\niconi\nb143\ngiftforyou\nanet\nb142\nchuchu\ns207.as\nostrov\nwww.c2\nwww.savannah\nmargate\nb140\nb138\nokapi\nb137\nb136\nb129\ntp2\nb111\nbakersfield\nb108\ndialogue\nb102\ntowers\nh91\nrajan\nlonestar\nwww.rds\ns59.as\ntimeout\nwww.sic\nyanagi\nfantastic\ne23\ncrazyboys\nwyd\ndslab\nalbuquerque\ntaiyo\nwww.ecc\nrando\nfalah\nwww.stp\ndnsbl\ninge\nandover\nd67\nwww.colorado\nwww.dallas\nbrowny\nd61\nplati\nd56\nupset\nvernon\nrosario\nsssssss\nmashup\nmerrick\nstarstruck\nmemcache2\ngonzalo\ngekiyasu\nwww.colombia\nmicronet\nwww.trabajo\nexchange-test\nwww.dollar\nwildwest\nchistes\npooja\nupskirt\nlive5\nserv206\nss8\noikos\narchivepro\nbridge-sp\nnoble\nwww.zs\nwww.aim\nreclamos\nmyheart\nplog\nourschool\ns153.as\nmoros\nwww.toronto\ntog\nwww.ryan\nnettv\ndaikokuya\nm.news\ntelcel\nfotoweb\nc128\nmorrow\nandrews\nchestnut\nnewhosting\npsql\nlilium\nstms\nstatic-test\nnetworker\ns7.svr.tdzs\nmerch\nagassi\ntrips\nnewads\nwww.mining\nde.dev\ns62.as\nshowa\nes.dev\nsouthdakota\nfr.dev\ncastlerock\nglobalsoft\nwww.kent\ndrmail\nwww.servicios\ncgi-bin\nmartinez\nwww.site1\nrnt\nc44\naidan\nallyes\nprinceton\nq60\nasu\ndrt\nweba\nwebstory\nd001\nwww.proxy1\nredstar\nmicrolab\npialadunia\nnouveau\nitcom\nrivera\nprotocollo\nhq1\nimga\nplutus\ngraceful\ntoda\nq77\nmn1\nlei\nbeatz\nintec\nrestaurante\ncam5\ncam7\nwww.publichealth\nseashell\nzaiko\nmx001\nhugin\nprova1\nsmtpin\neastern\nsonora\nkendall\nv12\nwww.zgloszenia\nwestgate\nwww.learnenglish\nperic\ns155.as\nphone1\nreslife\ndreamcatcher\ndnscache1\ndnscache2\nwww.guide\nlavoro\nkensington\nkvm7\nrahimi\ngofree\nfergus\nstudiofun\nsandi\nspeed2\naabb\nqa2\nabc2\nwww.cosmos\npass2\nyoshi3\ngongyi\nidrive\nwww.diablo\nherring\nacha\npeterborough\nwww.regal\nshopshop\npawan\nautodiscover.press\nlatest\nautoconfig.press\ncollect2\nwww.future\ns156.as\nunet\nmetropolitan\nhima\nbandb\nwww.storage\npavan\nberkay\nwww.venus\nmavericks\nwww.veronica\nperpus\ndavenport\nbbms\ns65.as\ntape\npreview-m\nbahonar\napparel\nsdk\nb98\nautodiscover.register\nallo\nwww.bloodlines\npcbbs\nwww.ilove\nkiemtien\nwarrock\nwww.esf\nplc\nsnack\nthietkeweb\npenrith\nmxserv1\nwebdisk.domain\nb97\nautoconfig.register\ntrademark\nwebdisk.register\nddm\ns157.as\nns.dev\nclink\nkamila\naimages\npz\nbotan\nphilly\neelab\nprod3\ndsweb\nwww.riverside\ns69.as\nb95\nxgzx\ngamestation\nmedialink\nwww.delta\nfalco\nparag\nwebdisk.stats\ns66.as\nbeto\ncodetest\naone\ndcadmin\nb94\ncpadmin\nb93\nserver0\nfearless\naran\nh4ck\njimbob\neclub\ncomex\ndb14\nclima\nmacon\nravage\nb91\nvaevictis\nforumweb\nwww.adwords\nwww.pmb\nb89\nanakonda\nwatashi\nmiyake\nhys\ngmailservice\nb86\nplay-online\nboing\nsalvador\nsugimoto\nbogus\nbobba\nnetkuu\nnihongo\nraijin\npsion\nanfro2580\nyuyuyuyu\nwww.george\nfamilies\ns158.as\nlibrarians\nb85\nb84\nwebdisk.fa\nbeton\ncomunidades\nnoone\nnonon\nbayer\nmaildb\nb79\nmnr\nghostrider\nb76\nfujiyama\ntexte\negress\nwitch\nserwer\nb69\nb67\nmusashi\nacceptatie\nb66\nisolde\ntomioka\nwebmailold\nsbi\nbuyersguide\nb65\narchibus\nvoltaire\nnikka\nb63\ninvictus\nchem2\nb61\nanimemanga\nhelpline\nvtech\narl\nfufu\nizumi\nlusitania\nstylus\nbbp\nwww.trinity\nclerk\nwww.leads\nadvantage1\nwloclawek\nenum\nnimex\nimm\nsaglik\ns68.as\nb57\ns4.svr.tdzs\nb55\ncompatible\nwww.emag\nazar\nwww.offer\nfuchsia\nb53\nboys\nnip\nbtest\nhebrew\nwww.universum\ns143.as\nmytischi\naimhigh\nnetcafe\nthanhnhan\nb45\ns70.as\nshinsei\nwww.newlife\ndbms\nraghav\nchain\nwww.ryazan\ndax\nrad2\nhossein\nmohit\ncms5\nser2\nmail.cn\nwww.descargas\nolahraga\nwukong\ndanu\ns162.as\nelex\nwww.myweb\npaw\ndeutschland\nplume\nsasi\nwww.auta\nwww.region\nautoconfig.md\nwb1\nwb2\nacoustic\nautodiscover.md\nahxxxhot\nmikrotik\nseo3\ngto\nldgateway\ndemi\nseo2\nipi\neiko\ns163.as\nsimoon\nns1.vps\nns2.vps\nb27\nwww.weblog\nhabbomix\nzope\ns72.as\ndrec\ncrea\nzsys\nbundle\nconversion\ndive\nnails\ndoan\nsucuri\ndocu\npratap\ntp3\nserver71\nharish\nmini8\nairworks\nprints\ns164.as\ng7\nipad2\nlambert\nzubi\ndlc\nyuma\npoisson\nmichi\ngudanggaram\nwww.sanane\nloser\ncandidats\nmamami\nmoving\nyudi\ntakayama\nwww.bihar\ntestserver01\nzima\nroh\nbalzac\nmychoice\nbihar\nedl\ns90.as\ns165.as\nwww.survivors\nzevs\nwww.academia\nm-sta\nelife\nrasputin\nyong\nesmf\nm-qa\nmobile-preview\nmycolors\ndigimon\nwww.nigeria\nptw\nmassi\nkuber\nzaxc\nprimaria\ntuktuk\nheavymetal\nwww.lada\ntedu\nwww.nebraska\nzain\nagama\nwww.nofear\ntest2013\nwww.turkey\nradiology\nmanly\nneocorp\ngaru\nglobalbusiness\nisilon\ngcg\nwebdisk.china\nautoconfig.china\nzack\nautodiscover.china\nwww.iran\ncve\ns1.tdzs\nmamun\ns166.as\ndw1\nrumah\nmanji\nyeye\nmanik\nautotrader\nembedded\nibaraki\nmaman\nlowie\nmaxima\nwic\njiaoyou\nwww.turkteam\nyami\ns75.as\njjw\nwhj\nimtech\nmicrowave\nvvvv\nwww.skyline\nfinances\nwww.360\nweka\nezio\ncaiwu\ndown2\ntv4\nhbc\nwww.agenda\nwayne\nwww.seeker\npassat\nwap3\nwebdisk.list\nfuny\npatria\nv9\ndolores\nwebdisk.dvd\nt8\nspel\ntryout\nmanolo\nmaddy\nonlineweb\nwww.lh\ns76.as\nmadar\nautodiscover.list\nconsul\ns1234\nhastings\nautoconfig.list\nonlinepr\nkriss\ngranit\ngreenboy\ntota\nlibya\nhip-hop\nnade\nigm\nempik\nsuzu\nvlounge\ns168.as\nmuhammad\nfinanzas\nsuna\nrandevu\ntalisker\nhopi\ndevice\ns77.as\ntemis\nstav\ncfengine\nstag\ntink\nwww.index\nwww.fatal\ndiler\nhrc\nmedianet\nip10\nhuawei\nfathers\ntecno\ns6.svr.tdzs\njace\nregister2\nbiztositas\nwww.biztositas\nlon\nsharingan\nmra\ntere\ntyphon\nhaifa\nruna\nsandro\nucakbileti\nwww.vanilla\nwww.academy\nintranett\nwww.celcom\nmatius\nkinks\nwww.darkness\niut\njens\ninsu\nanmeldung\nautoconfig.traffic\nautodiscover.traffic\nmorning\nwww.prog\n208\ncd-cat3750-sw\nhealth2\nmabo\nrony\ntodofutbol\nroni\njiin\nlivingstone\nursa\ns78.as\n155\nbkzs\nnejc\n156\nmoons\nwww.mailadmin\nqube\n165\nsniffer\nmame\nsany\nsamm\n182\n185\nkhang\nwww.merc\n191\njkim\n197\nlamia\nrino\n198\nsaed\nkasi\nvpn6\nfcserver\nwww.austin\nresh\nhearts\nsources\nplants\ntaotao\njonah\nwebmail.stage\nrazi\npierrot\nrara\nfav\nftpsearch\nrani\nwebdisk.test1\nkenji\nvc-cat3560-gw\ns171.as\nragu\nscala\ndike\ntmp5\nwebmail.haber\nchristine\nns.haber\nwww.blackjack\nwww.challenge\nhospedagem\nipv4.haber\npoke\nkika\nkimi\nmail.haber\nwww.meeting\nkenan\ndevnet\ns79.as\nmitsuba\ndragonballz\nkebab\njmark\ndods\nwww.bleach\nkkok\nnewtracker\nnetcommunity\nokajima\nlandings\nautodiscover.id\npayback\njokers\nwww.icm\nautoconfig.id\nchinook\nssl26\nvdns1\nwww.tecnologia\ntomiko\nfeliz\nwww.carter\nsasaki\ndb-master\nssl28\nvalinor\nssl24\nssl22\nssl20\nstijn\nssl18\noradea\nwebcat\nmail.omsk\nnise\nkassi\nweal\nniit\nellen\nitsmylife\nluca\nmoyo\nwww.religion\ntaty\nllc\nwww.wmw\nnt4\nmomi\ns81.as\ncurrency\nkapil\nnadeshiko\nkamar\nhotrod\nluyi\nkamal\nlmd\nsupermarket\nnath\nishan\nmizo\nnard\nwww.bellavista\nsmak\nalbina\nbestshop\nwww.katowice\ns173.as\nkabul\nsmsservice\nwebman\nironhide\nloll\nd148\nznaki\nmer\ninova\nmfe1\nkush\nindir\nmaxy\nbelyaeva\npreview01\nnt1\nwww.y\njure\ns82.as\nrate\nautoconfig.monitor\nwebdisk.monitor\nnewstar\nmugs\nautodiscover.monitor\nmlf\nwww.tutor\niknow\ntais\nwebmail20\nwww.asgard\nkopi\njavad\ns2.tdzs\nshoggoth\njuguetes\ninstallation\nwebmail26\njanez\ntack\nkpop\ns270\nuroda\nlele\nwww.tribe\njanem\ns310\nwww.sunny\njandk\ntenki\nrebelion\nleah\njupi\nd49\ns145.as\nd41\nd40\nceltics\nd55\nd53\nrammy\nklds\nmakh\nmagical\nd51\nfuneral\nd50\nd48\nkink\nmp33\nduplicate\nd47\nd46\nd45\natempo\nevrm\ns83.as\nfits\nzarafa\nd44\ns200.as\nd43\nd42\nd39\nsmtp-in1\nwww.rugby\nwww.shine\njoao\nmaj\nsmtp-out1\nshinsekai\nmaka\nwebirc\njul\nweb911\nwww.sears\nreiya\nmirror5\nwww.pixels\nvdns2\nemiliano\ns255\nwealth\ns256\npracticas\nworldgame\nmiva\njman\nkyiv\nitsa\ndesigncom\nwww.gamestation\ns258\nnomura\nlogin.cqgd\ntaipei\nfreebook\ns262\noneworld\ns84.as\ns264\ns265\ns266\ngunit\nwww.ragnarok\npoison\nakadem\ntorus\nisra\ns271\nhiren\nisni\nstronger\ninna\nkabo\ns272\narsen\nwww.tizer\nsheva\nmell\ns278\ntetanus\ncasino-online\nwww.quote\ndosen\nmelt\nsevastopol\nhunt\nleonid\ndoladowania\nhuli\ns285\ns287\ns176.as\nmert\nrealgaming\njawa\ngia\norlov\navailable\ncisco7\ncisco6\nconsider\ns288\nauster\ns911\nvanadium\n2b\njani\ngrant\ns305\ndisease\ns311\ntestbench\nsw6\nwww.animale\ndialup-63\ndialup-62\ndialup-61\ndialup-59\ndialup-58\ndialup-57\ndialup-56\ndialup-55\ndialup-54\ndialup-53\ndialup-52\ndialup-51\ndialup-50\ndialup-48\ndialup-46\ndialup-45\ndialup-44\ndialup-43\ndialup-42\ndialup-41\ndialup-40\ndialup-38\ndialup-37\ndialup-36\ndialup-35\ndialup-34\ndialup-33\ndialup-32\ndialup-47\nhoor\ndialup-60\ndialup-49\ndialup-39\nhold\nshade\ns312\nsafire\ngolds\nhaos\ns313\ns314\ns85.as\nhactar\ns316\nviktoria\ns317\nfallenangel\nsankar\nsnd\nblacklight\ns318\ns324\ns325\nwww.chemistry\nnami\nwww.viajes\ncharter\nelen\ns326\nsastra\nsilvanus\nharsh\nditweb\nsepia\ns329\nwww.champions\nmy-life\nmrbean\nmp3music\ntendo\nhansy\ndroopy\ns332\nyawaragi\ntex\naustral\ns335\nfamilie\ns336\nnetdrive\nbethesda\nhamed\nkazuya\ns337\nnewway\nwww.marco\nwebgate\ndatarecovery\ns338\nwww.ski\ns86.as\ndaneel\ngoku\nmiyu\ndeng\nhabib\nnatali\ns340\nanytime\ns341\ndomtest\nfeb2\nwww.thekings\ngeel\ns422\ngiel\ns427\natma\ngnys\ndittest\nrahman\ns440\nfreed\nartemida\nwww.rachel\nstarway\nprosperity\npositive\nnaya\nsanangel\npc03\nsftp2\nokra\ns178.as\nintegrate\nchandru\nmedialive\niccs\nrenat\nsamira\nmuz\nstef\nhelga\ns87.as\nrse\ntinyurl\nawake\nspeakers\nspectral\njoe11\nwww.counterstrike\nisec\nfrn\nsrv04\ncltest\ns179.as\nmoin\nextdev\ncsadmin\nbpt\nclxy\nweb2005\ntsd\nrvr\nwww.pixel\ntatyana\nkartik\nascent\nmoko\nswarm\nsupercars\nolk\nmpacc\nmog\nwww.cdn3\ns88.as\nramesh\ngalan\nvaleo\nyxxt\nbegemot\nfires\nmont\ns181.as\nwww.andres\nsleepless\nix\nhau\ndagobah\nhp5500\ngav\ndwd\narbiter\nrcb\nwsapi\nfofo\nnarcissus\nwww.safety\ns89.as\nraisa\nphpmyadm\navr\ngeld\nopac.lib\nnewns2\nnrs\nishika\nwww.vts\njinan\nrosi\nhilary\npollen\njelle\nqingyuan\ncourant\ngamesworld\nwww.gazette\ns182.as\nmybusiness\nprairie\nivona\nmehran\nannemie\npoczta2\nnoop\nloka\ngoodjob\ngringo\npaka\nbrightstar\nnanobio\nacd\nwww.musik\nnoto\nmg2\nprivate2\nyulin\nmastercard\npowerweb\ns91.as\npp11\necat\nsp01\nyourway\nnumb\nkameleon\ndelmar\nfbook\nweb500\ncd2\nweb89\nsupportteam\nteodora\ns183.as\ndavies\nboson\nhamedan\npproject\namina\nsafir\ndtd\ncelebration\ntiku\nrns3\nmail.spb\ns92.as\nsometimes\nmydreams\nxnova\naleks\ncf1\nservi1\npill\nmaster007\nwec\npino\nsyjx\nwhitaker\ndevdashboard\ns184.as\nfaraz\nplot\npole\nautoconfig.demos\nxxzx\nnewscs\nautodiscover.demos\ngeovax\ndosa\nraso\ns5.svr.tdzs\ndedi24\ndedi12\nreve\nemedia\ndedi10\ns109.as\ntalkfusion\nstarbook\nribi\nwww.warren\nprophecy\nkailas\nfocus2\nmarquez\nwww.rebelion\npaule\nsaza\nengagement\ns186.as\nwww.sell\nnodo21\nnodo12\nseng\nfs29\ndbtest2\nwuss\nfs31\nsherwood\ns95.as\ncogito\nrdgateway\nfs30\ndevel1\nfian\nsec2\ngate01\nshed\nwebshield\nfs28\ngoodbuy\nfs27\nino\nfs24\nfs18\nm.cafe\ncelebratelife\nttu265662\nm.gas\ntour2\nsien\nkomatsu\nworkers1\nfs17\npopopo\nchery\nmail.nl\nfranquias\npreisvergleich\nphaeton\nrainbird\nbluray\nslow\ncycle\ndtm\nwww.talkfusion\nmnp\nsooo\ns188.as\nwww.maroc\nthat\nwww.macro\nmdx\nanesthesiology\ns1.as\ncyb3r\nmerengue\nztc\namaryllis\nsrv00\novernight\nssra\nduff\nlacc\nwebdesigning\nbil\nreporte\nelem\nyogurt\nwww.sion\nsplendor\nucp\nfmsadmin\nnightclub\nville\nwonderboy\ndiony\ndictionar\nunis\ntsr\ndipak\ntobolsk\nhahahaha\nfashionhouse\nbox5\ncontrast\nwww.test22\nwww.pilot\ns201.as\nupup\nbox9\nwada\nwang\nvariety\nrm2\ndiogo\ns99.as\nwebp\nweed\nhypatia\nbox12\nsrv50\nbox25\nwww.fund\nvvip\nwww.elearn\nyadi\ncafedawha\ns202.as\nforester\nradha\nyawn\nmiu\nwww.bbb\nwww.amt\ndiezz\nives\nwww.big\ngrupa\ndiani\nceca\ntrabzon\nheather\ndistant\nspamd3\nworm\njewoo\nwww.sap\nwww.newforum\ns203.as\nwww.craciun\norigin-community.qa\norigin-community.qat4\norigin-community.qat3\norigin-community.qat2\ns130.as\ncraciun\ninsem\ns5.as\nwww.midnight\ntestvideo\norigin-community.devstage7\norigin-community.devstage5\norigin-community.devstage4\norigin-community.devstage3\norigin-community.devstage2\norigin-community.psqa\nsungyeon\nyupi\nwww.cae\nricerca\nkaktus\nrpt\ndrak\nlucho\negor\ndelux\nbengali\nwww.gf\nareon\nimagesrv\nx-nova\ndasm\next02\ndoni\ndeka\nwww.autodiscover\nmekuri\ndody\nhns1\ncocoro\ncubo\ndixi\ndemo03\ncrop\ncrib\nneuroshima\nyocto\ncam01\ndeni\ndene\nmainframe\nhinet\nhns2\nirawan\nwww.kelly\nbuda\nwww.shadowcompany\nnds1\nbooster\nwww.kat\nwww.dgm\ntuttifrutti\nspencer\nbuza\nxxxxxx\npld\njeffrey\nnon\ndamn\nkuroneko\nomniping\nvz8\ncollin\nwww.csc\nseemann\nwww.edr\nbestofthebest\nbyebye\nelcamino\nnscache2\nnscache1\ntheleo\ns6.tdzs\nmediatech\nwww.presta\nrafiki\ndamir\nctmail\nmochi\nhap\nayam\ndalet\ngoogleapps\nshina\ninbloom\nwww.almaty\nabril\nwww.karen\nwww.newworld\nnikon\nkvik\nwww.gem\nwww.ghe\naaaaaaaaa\ns29.as\nwww.gmi\nunbreakable\nesperanza\nchorale\nand1\nwww.gsm\ns208.as\nthegirl\nlydia\nshibboleth2\nwhitewolf\n789\naristo\nwww.ing\nbeautysalon\nwww.codex\ntariq\ngrowingup\nrelief\nfdl\nmatsumoto\nangry\nbobs\ncristiano\nawan\nmediaadmin\nazizi\nnatale\nhakata\nmoneta\njonny\nshonan\navar\nchema\nthongke\nbower\nwww.itm\nhdtv\nsfzx\nfutbolka\nsomewhere\nbarca\nsmtp-in2\nnovamed\nchatx\ns150.as\ncoffeebreak\ndok\nblak\nmirza\ncyberman\nvba\ncaps\ngeol\nemail01\nwww.mer\nalcantara\nvist\nfara\nsity\nwebmail02\nxtremex\nwww.ba\nkindergarten\nasli\nwww.jerry\nvenue\nwildlife\nsazan\ns40.as\nzxcvbn\nfukushi\nmagus\nmrtg4\ns1.jzwc\npistache\nna4\nlastresort\nwanfang\njgm\nweb179\nna3\nherbalife1\nwww.we\ndimple\num1\nuploading\nwww.mvm\ngeranium\ns002\ncsstrike\nnetmeeting\napic\nde9\nfineart\nanuj\npftp\nansi\njp2\nmail.fr\nsofttech\ncsadm\nisel\nvinnitsa\ngive\nshuzai.canoekayak\nreason\ncommissions\nredred\nwww.horse\nprocurement\nspamtitan\ninfinit\npartnership\nboomerang\ncarik\nanbu\nwenxue\nmiriam\nshenji\ngodaddy\nguy\nasmar\nwebkinz\nbioinf\njwxt2\nwww.psp\nalii\nalif\nglenwood\nhoffman\nbbs8\nroel\nholmes\nkobato\nruda\ntest6398\nwww.roy\nnanako\nwebdirectory\nsrch\ncameleon\nwww.rsm\nbala\nbeter\nsteps\nsams\nhac\nfamilypet\naira\nsammisound\nrenuka\ndaeryuk\ntotaleclipse\nnew-world\nbaha\nfakebook\nmyworks\nextragames\nar1\nqueenbee\nhotdog\nrouter11v04.zdv\ngabriella\nbabu\nsabur\nmalvern\nrecados\naidi\nashish123\nadri\nmpg\nwww.gucci\naden\nwww.proba\nwww.grand\nacen\norleans\nstrategic\nsmtpi\nfranquicias\npomme\nfever\nanisa\nflower12\nalyssa\nemailsecurity\nmegane\nformer\nsoftpro\nvmail1\nerotica\ncassandre\nmyconnect\nsagent\nfss\ngrape\nmanutd\nsairam\nananas\nptu\nscan2\ncloudtest\nnutella\nwww.hello\nvoyageur\nsalimi\nserc\naerospace\narnaud\nswitzerland\npreps\nzo0om\nammar\nwww.testowa\ngirtab\nwww.wws\nhappyday\nbellydance\nsqlbackup\naliza\nlululu\ndecision\nwaseda\necolife\nizar\nlondoneye\nwww.xc\nvps10\njibong\ntc01\nsascha\nkawanishi\nrecover\ncezanne\nsartaj\nasaka\nweb-proxy\nautodiscovery\nelectronic\ndcvpn\nxspace\ntester2\nsatish\nclermont\nryugaku\ncroma\ntoutatis\nwww.dedicated\nwww.encuesta\narjun\napc6\nautoconfig.xml\nautodiscover.xml\nwebdisk.xml\nall4u\nstaging0\nasdas\nmure\nbardo\nrewat\nosvaldo\ninsect\nespoir\nsavixx\nwww.conferences\nbadar\nahsan\nmediastream\nwwwh\nfunkymonkey\ndownloadzone\nwww.install\nidesign\nwww.sanfrancisco\nkum\nteng\nnetsystem\nrodman\nsys2\nopale\ncomunicacao\ncybele\nmahmoud\nvak\nhogan\nwoodward\nsabina\nmercado\naddme\nkapo\nabuja\nscs2\nbemine\nbestfriends\npercy\nacc1\nteahouse\nblister\nhopeless\ntest-site\nwww.homework\nfullmovies\nsearches\nwww.proteccioncivil\naddict\nsendto\nsepehr\nsex169\nonlinebanking\nwhitenight\nwebmeet\nartsandcrafts\natlantica\nmx23\npeyote\nmonday\nindex1\n138\nnightwish\nmorgoth\nromana\ntribune\nwvw\ngoodstyle\ncardmaster\ntestabc\ncfp\nbab\nozgur\nblackout\npoochie\nproteccioncivil\nhkshop\napollo3\nblackhorse\nblackwolf\nfrancais\nspringtime\nshark2\ncatalogues\nwww.smiles\ntheunknown\nkerman\nhunt3r\nweb139\nepr\none12\nwww.energia\nsbc1\nroxana\nairmax\nchocho88\nservice6\nmoveon\nexcite\nj4\nfanatic\nlostmind\nda5\nberich\nwebdisk.weather\ncantabria\nmorrison\nsamsungindustry\nwww.surat\ninnocent\nnewsdev\nviruz\nicarus6\nencoder1\nhooka\namra\njanko\nblacksmith\ndarkarrow\najmail\nafrique\nbandit\nsidali\nanythinggoes\ntheway\npacco\ngideon\ngamerevolution\nwww.websites\nhedgehog\nmrcool\ntribunal\nexecute\nhorseman\nksiegowosc\nr9\nmms1\nr6\nbasecamp\nr5\nmytool\nvendetta\npunchline\ngameonline\nrhn\nshurik\nmundotkm\nalex99\nsimmer\nsimon1\nsimran\nalexam\nmechanic\nalexan\nservicio\ninfoservice\nbaxter\nwebdisk.cms\nwales\nroshan\naddax\nweiss\nadmin159\nbaceco\nfuyu\nthebrain\nspicy\naliman\nwebworks\nmysample\nfivestars\nhardservice\nonlygirl\nsol1\nover40\noutlaws\nhwachang\nmoodle-dev\njacket\nmohajer\nwebdisk.dashboard\nmohamad\nseesaw\ninet-gw\nweb149\nlazlo\nbillybob\nwpp\narchitekten\nipcheck\nlessing\nbluegrass\noussama\ninformes\nwww.ecards\ntede\nphwt\nalians\npropaganda\nmadewithlove\nwebdisk.advertise\nalbireo\nbourahla\ndbs3\ndbs2\nweb2012\nwww.excel\nts05\nzav\nraider\nvbox2\nshadowland\nntk\nbayan\nalike\nallin\nmsss\nuap\nhewitt\nanthem\nlyncpool\nenrollment\nmoregames\nwww.helix\nvconference\nansan\nlsweb-ext\ninstitute\nexchange2010\nandrej\nprojectx\nandris\njamaica\nwww.mtg\nftp.in\nwlse\nsurplus\nwww.medical\nasia2\narche\nhowies\nashes\nhost002\nblanc\njhoncena\nohm\nskating\nappsrv\nwww.timeline\nnikobellic\nradiant\nmcu2\nyusuke\natrix\nbenito\ndominos\nmilkshake\nhealthylife\nmusicpro\nwww.uae\nsonicboom\nsumatra\nbereal\nwebint\nwebmail7\nsmartbox\nmagdalena\nwww-3\ntechnosoft\nhyphen\nchell\nrookie\nchime\nchino\nanurag\nwww.mastermind\nucm\nhammadi\nprueva\nwebseed\nchong\npersonal2\nredskins\nserv40\nmikimiki\nbacktrack\nwww.ipod\nnicko\nender\nvanguardia\ndc02\nwww.gamer\nlmm\nhessen\nathlon\nshared2\nsas1\nwww.handmade\ncatalog2\njavelin\nmyhousing\nwftest\ntr1\nfang\nletsplay\nbackfire\nlestat\ndalek\ntala\nwww.webservices\nroscoe\nadmin2012\nwww.drink\nbridal\nwww.drama\ns1019\nbearmail\nbanquetes\nhonors\nbblearn\nmatematik\nwww.poll\nnewyorkcity\nstarteam\nsoft32\ns1017\ns1016\nwww.era\nmanhthang\nofficescan\ntuma\ngrill\nvdo\ns1015\nsohail\ns1014\nwww.earth\noutofcontrol\noviedo\ns1010\nhappyfriday\ndarklife\ns1008\nnotificaciones\nfilemon\nbadabing\nperception\ntestnew\nspacer\nwww.cross\nexodo\nsbp\nhost52\nhost58\nbfc\npersada\nphotograph\nezequiel\ndeepa\ns187\ntrf\npscn\ns1009\nblogweb\nstoplight\ndrupal6\nwww.koala\nchiro\nnetstar\nat2\nsantana\ncools\nwww.cgc\nhowl\nwww.chr\nwww.craft\ntestlogin\nwww.coa\nwww.referat\ncitrix01\npippin\nserpent\nteste123\nwww.coral\ntested\nsomali\nfilin\nidm1\nmeli\ncorea\nagentur\nmitch\nsteamgames\nwebanalytics\nwww.devil\nkonsole\nazeroth\ntomec\nvietnamese\nhabanero\nwww.dig\nfzghc\nmail.voronezh\nzaqwsx\nvm52\ngranja\npericles\noutsider\nnokian\ncocopop\nnch\ngosolar\nteplo\ndays\nsorrel\nmorocco\nwww.color\noxo\nwww.soso\nwww.demo7\nredbike\ns182\nbiogas\nminet\npri1\nht001\nwww.ym\nlivestock\nwww.ipo\ndozer\nwww.dx\nidkort\nlyncrp\nwww.plotki\nopc\nwww.dop\nmwp\nstargolf\nmaelstrom\narshad\norganizer\nst22\nshibu\nwww.kcc\nst12\nwww.infocenter\nst28\nwww.lb\nst26\njrsystem\ninit\nst29\nst23\nst21\nst20\nthecodi\ne-services\nst15\nst14\nst11\nst03\ncaution\neconom\nhotspring\nserv10\nbrano\niletisim\nwww.civil\ndipesh\ndvs\nzup\nblagoveshensk\nwww.chris\narchive2\ndl45\ndl12\nnizhnekamsk\npietro\nh216\nbambam\nfemale\npartnernet\nwoorifood\nradmin\ntomatoelec\nauthority\ncorps2\nphuc\njinjin\nblackhawk\nwww.brett\nmorad\nczone\nwww.bravo\nwww.iti\nvanillasky\nbigdeal\nwww.tala\nwww.zarzadzanie\nbigsavings\ndotop\nkimberly\ngudang\nwebber\npt2\nwth\nsiesta\njimmie\nwebct2\nmonthly\nreferendum\ndoc4\nnewuser\nolea\ngirish\nfilez\ncary\nmusic4you\ncave\nweblogin\nfaint\nwww.t1\nhighspeed\nconestoga\nyorkshire\nwww.issues\ns179\nim5\ngamespace\ncharlie1\nordinary\nwww.todofutbol\netforum\nafghanistan\nboni\nnatan\nspeakup\njanedoe\nstefan\nmailserve\narchery\nd01\npongo\nbase12\ns1121\nstigma\nhorseracing\nauthen\ngoodboy\nsuchet\nitclub\npase\ns174\ngns\ncici\nzerogravity\nstyleicon\nwww.tst\ngrover\nh323\nbenefit\nds11\npatrik\n555\nloic\ns172\naea\ngiveme\nds8\naqa\nomt\ntongji\ngeneva\nvek\nwab\nbaltazar\narabsex\nmalek\nnewcore\njjjjjj\nfacelook\nclm\nkannel\nwww.cargo\nnazim\nips1\ncordoba\ns164\nptb\nreputer\nreq\ns162\ns161\nwww.hardcore\nmkmaster\nwww.melody\ngrafitti\nbharat\nsg123\nkorrg\ngoodfood\nlanders\nzloty\naceofspades\ndarkhunter\nbirdie\nrid\nwww.mumbai\nshockwave\ngachi\nbelgrado\ntestbb\ns189\nthelast\nwww.pune\nfixer\nhotmailmsn\nwebmailadmin\nwww.tad\nwww.thi\ntabasco\nthekings\nmarafon\nviagra\ngameronline\ns1039\nwww.step\nesxi3\ns1038\ns1037\nmm2\ngaa\nwolfram\nbugz\nks1\ngabba\nsing\ns1023\npbc\nrihanna\neplant\njm2\nflexi\ns1024\ns1022\nthi\nigoogle\nsvt\nthepit\nzapisy\nhangover\nnst\nadvent\ngames2play\nedan\neduline\nmsh\nblob\nbanan\nbors\noffice5\nbonzai\nlovehate\ngarf\nnead\nviso\nggyy\nt34\ngemma\nwns\nworldpaper\nwww99\nesample\nconstruccion\nsatyr\nsweb\nivanov\nnine9\nwalt\nexplorer1\ngrb\nnowayout\nkendo\nwvvw\nwww.images.a\nwww.outlook\nestilo\nzoli\ncat4\ndiversion\nfront6\nwww.owner\niphonetest\nsprint1\nbeckham\nimed\nwww.sif\nalo\nlantana\nnotenote\nguzhou\nwww.testforum\nmusic4u\nspartans\nkendra\nepicure\nvoyager1\npilates\nhaley\nhammy\npt5\niconnect\nbebop\nmegapig\nsabo\nbernard\namod\nwww.kulinar\nuppic\nfudge\nuniversitario\nlguplus\nlovingyou\nthemaine\nhappyhouse\nsovet\nonemoon\ne-office\ncrazynet\najay\nsicherheit\nmathe\nsancasia\nglock\ngrabber\ndigimarket\nhannes\nconcerto\nkashmir\nhom\nwebclub\nvitalis\ngamerz\nserkan\nblog9\nslavik\nwww.poems\ngeocode\nfor-you\nvincestatic\nalexandrestatic\nhomesweethome\nlorangerstatic\nacropolis\nloranger\nwebst\ncyrillestatic\nreply\nplayhouse\nshopdemo\ndevtok\nfolkmusic\nhanaliving\nitce\nandong\nouvidoria\n4u\nexplo\nhtl\nsugarray\nchaotix\ncdt\ncaiman\nrzd\ntaster\nkish\ni2i\nmarca\naes\nflyff\nwww.apex\n116\ngorky\njiajia\nwow-europe\nlococo\nlab3\nfv\nxchat\nenertec\nsorteo\namulet\ndut\nliviu\nmysql50\nclassmates\nfifi\nwith\n360grad\nbpd\nbrahim\ngtl\nsupergames\nuri\nweboa\nwww.asdf\nwww.axis\nadministracion\nyahoo-mail\nattila\nchirag\nloveme\ndeejay\nsxx\nwiki-test\ntest011\nocb\nprzemysl\nandyb\nwhitefox\nroute\nx-ray\nruth\nkara\nnellie\ndorothy\nwww.personal\nwww.dash\nlucille\necop\nchl\nsienna\nwww.pila\nmurasaki\nwww.express\nelemental\nspw\nwww.gniezno\nhrss\ndevis\ns1002\nnissan1\ns1001\niena\nruss\nmelba\nmcsupport\nyak\nbri\ngniezno\nprzeworsk\ncustomercare\nwww.vita\nforgetmenot\nwww.przemysl\nwww.nisko\nninjaworld\n24h\nxiaoshuo\ns2008\ngsoft\nsiscom\nalcoholism\neternita\ngreentools\nwww.cook\nelder\nphotoblog\ncapi\nanimatrix\nelblag\nwww.diet\nlinux10\nwww.dino\nwww.grid\nwww.elec\nsi1\ngospel\nwww.img3\nwww.brodnica\nhaxx0r\nrozan\nxtime\nwebcare\nn3\nminigolf\ntoxic\nboinc\namma\ndeparture\nherbarium\nwhirlwind\nwww.mikolajki\nbadboys\ndaylight\ndiscordia\ngomi\nkatherine\nhowdy\norly\nchai\neggplant\nsanandreas\nwww.blacksun\nwww.przeworsk\naddon\naba\nwww.krakow\ndix\ncnb\nns-master\nwowwow\ncosway\ncpr\nnisko\nconfucius\nhaze\nabn\nstarcraft\nszukaj\nenable\nadn\nhana5\nzizhu\nlists.mail\nskysky\nthesky\nbrodnica\ngander\ndr2\nmpf\ngomail\nwww.kmm\nwer\nhpt\necrm\ndirector1\ntiburon\ns152\ns151\nelites\nimail2\ns147\ns146\nwww.planeta\ns145\nplanetlove\nxvideo\norione\nivo\ndbu\ndvds\nacs2\nhata\nwww.images1\nqrcode\nmagazyn\nwww.led\nanp\nkluge\nomnibus\nduarte\nyq\nteamcenter\nretiree\nopti\nserver05\navemaria\ntectec\nnewhorizon\nclab\nanyang\ndyndns\nwww.mitsubishi\ncomingsoon\nagate\ntcserver\nbetamail\nvot\njihad\nirony\nkalam\nmicrotech\ncoucou\nhrportal\nweb11290\nweb00\nwebsvr\nsoftphone\ntestbbs\nlowry\noutdoors\njohannes\ntimeserver\ntopweb\nwormhole\nchucho\nsilviu\nwebb\nwww.ebay\ntorres\nletterbox\nhendro\nwebdoc\nxiaojie\nweb193\nfed1\naccenture\ncastrol\nbluecard\nshortcut\nhomeshop\ncyberia\nbroadband\nardi\npeterson\nfantomas\nnikola\nwww.geek\nmimizu\npolygon\nads3\nlao\njukebox\nave\nfather\nblo\nbluedragon\nwww.sugarcrm\nwww.axiom\npxetest\nanatoli\nformulaire\nnetadmin\np0\ncarrefour\nccnet\nmchs\nteardrop\nwww.greece\nbne\nvacancies\nwww.full\naua\nres12\nres11\nbmx\njobshop\ndftp\ncer\nbigdaddy\nweb194\njones\nwww.jake\nnolan\ngrayhat\nbrunei\nicts\nvmm\nweb195\ngryps\nmail.mailer\nwapsite\nrashed\nautoconfig.sitebuilder\ntweeter\narindam\nsubaru\nautodiscover.sitebuilder\nwww.brown\nwww.hvac\ncig2\ngonzaga\nhabbocredits\ncng\nwl2\ntelefony\ndanish\natif\nwww.wii\ncarr\nvanle\ncata\nlegato\nfunfun\nrakuten\nwww.http\ncachorro\nsmd\ne-pay\nbazinga\nmhamad\nwww.kolo\ntvi\nwww.papa\nalzahra\nautodiscover.noticias\nvoldemort\ncmis\naccess3\ngmaill\ncst\nwww.v4\ncvresearch\nwww.vds\nhaddock\nctech\nkeene\nwww.calendario\njiro\nfreevideo\nspiders\ncvt\nv19\nspidey\nkarbala\namxbans\ncwp\ngmaile\nwww.brotherhood\ndpp\nmothersday\nocean1\nautoconfig.noticias\nwwwj\nkimura\nwww.toy\nml2\nroxio\nwww.loto\norpheus\nkoe\nwww.luis\nadad\npowernet\ne250\ngfc\nagamemnon\nerotika\nwinters\nyoshikawa\ncletus\nwww.snd\nintegracao\npre.www\narges\ndowntime\ngatti\nfreefall\nhrishikesh\njackie\nmail.hk\nfy\nlovetale\nemy\nkrish\nns132\nq17\nwww.neon\nrecep1\nq16\nq15\nepn\nangelwing\nworship\nmk4\nwww.sas\nwww.pack\nyahoomail\nns138\npnt\nns143\ntp4\nns144\nphoto6\netl\nwatchfreetv\npartage\nq100\naditya\nautoconfig.vip\nwww.aspect\nkillua\nns147\nspalla\nmikids\nmascara\nwww.pepo\njuann\nnxy\nallkind\nns153\nns156\ntruong\nweb1021\nns158\nshabab\ndaekyung\nhashem\nmeduse\nweb1111\nweb1116\nbasem\nweb1127\nweb1131\nwww.bannersbroker\nhouse2\nwww.earnonline\nwww.msg\nweb2006\nweb2007\ncomputertalk\ns-107\nminhngoc\nweiwei\nwww.opel\nalmuslim\nrene\nwww.zh\ngfp\nwww.pooh\nsellit\ngfw\nanduin\ndivino\npc14\nmaxgame\npc15\nwww.als\nwww.arg\nicg\nclick2call\nwww.mes\nhtm\nwww.ffl\nkamensk-uralskiy\nmahir\nwww.gib\nwww.htd\ntadmin\nsupernet\npc6\npc7\nwww.sws\ntejas\nwww.upd\ncooltimes\nmhl\ncucm\nwww.ppp\nferien\nupfile\nmarocsat\nkdb\nmgw1\nipass\nyado\n98\nfuruhon\nabm\nstirling\njom\npwk\nceshi\nfrancoise\nwww.lak\nichiro\nmdr\nskp\nyszx\nwww.domination\ncronaldo\nsm13\nahbab\nclickbank\nvinci\nasdasd1\nbroom\nsm9\nehx\ndeviant\njeroen\nelamal\npartages\ncppro\nuksas\nrstools\nthenews\nas7ap\nsons\npeewee\nfxy\nmzmz\nftp.cloud\ndecode\nworldofgame\nns159\ntechnicalsupport\npao\njjs\nminhquan\npfm\ntmf\njayne\njaws\nwireframe\nxplode\nhebergement\ncogs\nnye\nwww.parkour\nwebdisk.account\njszx\nabdelrahman\nwww.designs\nstartimes55\nntg\nfsed\nshadowcompany\ndireccion\neurotour\nfp2\ncontraloria\nautosurf\nvpns\nthumbs2\nknoz\nwww.anis\nwww.asma\nwww.jokes\nfriki\ntpx\nwww.general\nwww.cjc\ne3lanat\nforums1\ntc1\nsv19\nwww.hq\nwww.ats\nftp.www2\nng2\nftp.cs\ntareas\nsv17\nsv20\nymir\ntmx\nmyonline\nswat\nriddler\nhabbox\nwww.professional\nguitarman\nttd\nkfz\nhivemind\nsql2008\nsart\nchiltern\nsofi\nisas\nsumo\nsmg1\nwww.iraq\nwww.anc\nwww.tempest\ndwh\nalma3rifa\ndeluxe\nwww.nail\nmaor\nuva\nwww.delphi\nwww.raid\nvs5\npna\njubilee\nwww.romantic\nclickonce\nbannersbroker\nweb190\nwwwwww\ndecima\nweb191\nweb192\nvoiptest\nso3\nso2\nultras\nsampark\nservices.irc\nago\nharyana\nwww.paranormal\nstarcity\nheroo\nwww.studyabroad\ngamersparadise\nuweb\nwwwprod\nwhitney\nvacations\nzon\nhmsat\ncorus\nmarocstar\ntopshop\nkaba\ncogent\nbabylon5\nbarclays\nrozrywka\nmakarenko\nwww.ksiazki\nsoni\nsjs\nelectronik\nwww.rozrywka\nadminpanel\nstarlink\nacte\nmontcalm\nsmit\nukdev\neefi\nmke\ntest46\nbhushan\nwww.experience\nrassegna\nwww.wis\nerm\nautoconfig.track\nautodiscover.track\nkiturami\nautoconfig.c\nautodiscover.c\nupper\nwebdisk.c\nshsh\nishikawa\nwww.anders\nfouad\naomori\ncervantes\npdr\namerika\ntoyama\nwww.sr\nexchange2003\nweb197\nhabbouniverse\nlookbook\nnucleo\nragtime\nkanagawa\necologia\nyoungl\npic6\natilla\ncatv\ngw-vpn\nctf\nloven\narchaeology\ns58b\ns58a\ns53b\ns53a\ns51a\nj5\nxs1\nmasashi\npolarbear\nvagabond\nftp.live\nwww.miracle\nwww.mybaby\nmedall\ntour1\ntesting3\nwww.administrator\nwww.tour1\nistudy\nim8\ntroubleshoot\nmail.live\nblognew\nmx-3\nitlife\nbackup55\nwww.vivaldi\nmssql2008\nwww.webinars\nganpati\nudon\nactie\nstandrews\ns-34\nwso\nbackup65\noklahomacity\nlandingpage\nasteroid\nwww.archiwum\nbackup70\nwww.nowy\nhofmann\noraculo\nwww.arquivos\nyumi2\nboeing\nktp\notomotif\nfhs\nxh\nmodernstyle\ns-95\nposs\nkarir\nswd\npaidtoclick\nwww.encuestas\nk8\nk7\nproblems\nb2b-test\nk6\nbeta.www\nistar\ntreasurehunt\nkvm8\nwebquest\nesoteric\ncanli\nids05\nwww.gestion\nchus\nwww.touch\ndaemyong\nhighperformance\nvweb\nembroidery\ngefest\nfreshwater\nlib-db\ncommencement\nstudy2\ngrifone\nzproxy\ncsportal\nnamdo\nnintendowii\nhamleys\nseahorse\nresidence\ntoollove\nsms3\nportal-test\nksa\nchivas\naegir\nlovemusica\nchats\naccreditation\nmomentum\nagd\nutv\nsupporters\nwww.admanager\nladylove\nfavicon\nanimalrights\ncariart\nfiera\niix\ntaki\nartpop\ndecoline\ncorefit\ncars2\nb2c\nlvs01\nsaku\nomedia\n220\nwww.schools\ntrains\nhomerecording\nmomshug\nxwing\ngreen2\ngepir\nbluebrain\nlandrover\nreptiles\nmai\nbentley\ncamps\nsuperforum\nqos\nfreetimes\nthinkup\nemdev\nmail-dr\nsafi\ndaycare\nsouthbend\nquotations\noldwebsite\nwebdisk.photo\ngrinder\nconcur\nshtech\npekanbaru\ngiftsadmin\nsogokju\ntiendaonline\nsumai\nprueba2\nver3\npk1\nns06\npdamail\ndg01\nclouddevapps\nwlc02\nfunds\nlicensing1\nlicensing2\ntvco\nhitchcock\nhbtest\nwebsurvey\nmi2\ncybergames\naetos\nwww.mississippi\ncloudapps\nnnf\nxenapp02\nxenapp01\nhomevideo\nastro2\nsl4\nhp4200\nshuzai.soapoperadigest\nsuen\nssmi\nibg\nchinadev\nguest1\nitg\ntft\nforumz\nheartman\nfda\nsua\npixies\nchrysalis\nglobedesign\nccn\nkasanokarbu\nbkd\narchitektur\nttserver\nslgp\npbl\noyabin\ncentrix\ngroucho\nnotitia\nseojapan\nevoque\nfinaid2\nau10152771\nrongtail\nalecto\nrkis\nwebridge01\nwebdisk.properties\nwww.tuning\ngamewiki\nserv9\ngulliver\ncolle\nvamos\nfile6\ncgi2\napple2\nbbgolf\nvag\necl\nchattest\nocsrp\nmd2\nautoconfig.domains\njinsun\nwebdisk.domains\nsiphon\ncio\nlaue\nwebdisk.affiliates\namer\ninfobell\nautodiscover.domains\nterminals\nnoema\nkangoshi\nwlc01\nharpo\nconstantin\nweare\nbura\nwns4\nwns3\nbase01\nbase02\nattitude\nbase03\nremotehelp\nozon\nmobilesentry\nfandango\njls\ngslb2\ndda\ngslb1\nmail-a\nrw5\ndde\neport\nsto\nmusicmaster\nwww.curtis\nimpress\ncerise\nuol\niris12\nmarinm\nbk06\npartner.dev\noverseer\ngreg2\nwww.poligon\ncnt\nfollow\npipo\nscissors\ndgm\nhsms\nlaxmi\nautoconfig.newsite\nautodiscover.newsite\ncalltracking\nkids1\nmagicbox\ndib\neditest\nlocations\ncw2\nwholesaler\nengdev\nebaystore\ns88\ns89\njabapos\ns90\nspeed1\nkubrick\nntp02\nucs2\nguerrilla\nalquran\nhepa\nww11\nwebcast02\nwebcast01\nsanjuan\nbugati\ndra\ngp1maindns2\ndzb\nvmt\nrockfish\njalisco\ndev97\ndev77\nnoni\ndev29\ndev23\nteambox\nweb1070\nweb1080\nut3\ntufi\nweb144\nasa3\nweb1109\njungang\nweb184\nweb185\nemt\nweb187\nweb188\net6000\nweb218\nwebdisk.lms\nautoconfig.lms\nautodiscover.lms\nbwing\n172\ncnm\nsrf\nweb408\nbuzz2\nwww.graduate\necare\nwww.epaper\nirsa\nwww.networking\niptel\nnovidades\ncosmoinc\nghe\nvivalavida\ntakara\nvanille\nprost\nfreestyler\nr-timc\nmayflower\nginkgo\nsaphir\nmixi\ndcustom\nedu5\ndobby\nulm\nprunus\nvirtualoffice\nchemnitz\naachen\nlaurier\nwww.oferta\npattaya\nkama\nmajuro\nhpm\ndbmart\nprg\nwww.amar\nvmhost2\nds09\nipcop\nnile\nwebsupport\nweb4test\nbackma\nbeta-admin\ngokmul\nssl14\nlumen\nwww.karma\nssl10\nwww.re\nwww.np\nipm\nnewdomain\nssl9\nmasrawy\nwww.fo\nwww.kw\nhscl\nssl5\nwww.ielts\nmoriyama\nwww.einstein\nisac\nprogramacion\nkatayama\ntanimoto\naset\njos\nfujigaoka\nwcf\nstarwar\nwww.instant\nmcch\nalbania\nishida\nveyron\nonodera\nkelso\nkawakami\ntanpopo\nney\nmiwa\nmizuho\nkodiak\ntalento\nchapters\ncremona\nwww.moe\nkoh\ncopenhagen\nlia\nrostov-na-donu\nambiente\nogr\napuntes\nchemwatch\nslovakia\nwww.cheboksary\nwww.bryansk\ncirculo\npublicidade\nwww.sankt-peterburg\niptv2\ngerencia\ndanju\nrweb\nbubbel\nnhacchuong\nlws\nplaneacion\nfarmers\nmedia10\nmedia5\nbeta.m\napi.beta\nwinit\ndownload.im\nzc2\nwww.transfer\nnik\nvps006\nvps010\nvps012\nvps013\nmysite.sharepoint\nbfn2\nbfn1\nisidro\nvps016\nvps017\nvps019\nvps021\nglobalnet\nvps023\nvps026\nvps027\nvps028\nwwwtest2\nvps030\nlists2\nwhitetail\nvps031\nvps032\nmyo\nvps033\nmpk\nmail.chem\nmanet\nredalert\nspear-login.rcc\nspear-login.hpc\nymfood\nmge\nvps124\nautodiscover.www\nnwd\nautoconfig.www\nxterm\nvps126\nvps129\nvps009\nreport2\nadia\nrevenge\nwww.fms\nmonsters\nlamasbella\nmiks\nwade\nviscon\ndecobox\nbobmarley\nprosoft\nvps125\nwwwl\nmeer\ngeo1\nwww.desarrollo\nwww.lookatme\ndamusi\nnapoli\nlomis\nlugansk\narkhangelsk\npetersburg\ncherepovets\ncenha\nlatvia\nwww.rivne\nbmsys\neng1\nrandomhouse\nthrawn\nwww.moldova\ndvclub\namk\necatalogue\nlidl\nfun4kids\nwww.czech\nsmena\nwww.xat\nwww.sibir\nvid2\nwww.belarus\ntvadmin\nrostovnadonu\ncarros\nhgc\nodesa\nnew-york\nmshop\nwww.kuban\nwww.sts\nla1\nuliss\nderbent\ndnepropetrovsk\nmichele\nkipper\ntallis\nserv17\nneworld\nwefactory\nhost16\nanm\nknightmare\nsqs\natoum\nvds14\naddr\ncms02\nsth\nstrelka\neseries\ntech4\nssrpm\nvoa\noxi\nwww.tmm\ncompta\nambre\ntks\nvcc\na25\nbsec\nip7\nnocps\nintersport\ncns2\ncns1\ncasimir\njabri\nthemaster\nmailarchive\nap02\ncanter\nclicks2\nbowmore\ncamilo\nmailbck\nfbe\neec\nura\nwww.typo3\nemoticons\nbulut\nlido\ntyt\npmwiki\nmpp\naljoker\nwww.mambo\nwww.mcc\nnewland\nneopolis\ndva\nvpo\ncategory\npropiedades\nkeygen\nwww.digimon\ntheforum\nwww.firefly\nmariner\nlum\nkili\nacmilan\nwebdisk.tracking\ndigipath\nseattle4\nautoconfig.tracking\nautodiscover.tracking\nwebdisk.job\nbib2\npre-www\ncpns\nfac\nx31\nx19\nestyle\nregion2\ndos2\nhost33\ndeathproof\nisit\nadmin-test\nwebdisk.oldsite\nhost38\nnpd\nanjing\nsabe\nsdcserver\nm07\njyw\nebys\ndominican\ncurs\nahlamontada\nwww.hit\njame\nloginlivecom\nautodiscover.katalog\nautoconfig.katalog\nposttest\ntemara\nwhereareyou\nipadadmin\nantivirus1\nwww.thehub\nwww.royalty\nstatm\nwww.yourgames\nsteampowerd\nwww.devblog\ntol\nmysterious\njunction\npower7\nwww.hooligans\nkiku\nfileup\nmarket2\nkaede\nvmb\ncenterpoint\nwww.stories\nwww.ww5\ncore-rn\nwww.besiktas\ngreenbeans\nsphynx\nasteria\ncoffeetalk\ntestingtesting\nback01\ngerrit\nwebdisk.mag\nelja\nkyocera\ntest.admin\nparenting\nwww.stamps\nwww.nintendowii\nwww-all\nmanohar\nfunforum\nkaran\nendo\nprewww\nmanjula\nrhc\nwww.agency\nbahrami\nbcn\nlabnet\nwebdisk.host2\nfdo\nshahrukh\ndide\na123\nd217\ndias\ndiar\nvaliasr\nwww.risk\ndiba\nwebdisk.ssl\nwww.thailand\nect\nwww.regional\ndesenv\nhsr\nele\nf123\nlink2\nvai\npecs\nacis\njhony\ninstalator\nns.in\nsmalltits\ncrossdressers\ncfnm\npregnant\ngyno\nnudesport\nacne\npov\ngroupsex\nmenstruation\nkic\nswtest\nweb-ns\nbudi\nnonnude\nbisexual\nctu\nshitting\nbote\nlivesex\nbaum\ndit\nye\nstrapon\nfolio\ngoly\nnightshift\nprpr\nmanya\npush3\nnatter\npangea\nrde\nsdl\nnubiles\nwsz\nbilbao\nws82\neagent\n1221\nwww.delivery.swid\natop\ndevwiki\npfizer\nkak\ndrafts\nferhat\nmeng\nzine\nfanli\nwww.web-hosting\nf0\nwebmail03\named\neventhorizon\npowerlink\nmasuda\nlink1\ngraystone\niuno\nwww.apply\ncheshirecat\nbday\namsa\nf5-2\narge\ncarz\nhoax\nvoyages\nader\nhabibi\nmotorcycle\nf5-1\naben\nestrategia\nsyracuse\ngames3\nmx30\nrhiannon\nwww.teen\n255\ndacs\nelinux\nako\nnema\ncms6\nsupertramp\ndasa\nvltava\nficus\nwww.dl2\nbyblos\nclaw\nclik\ndion\nhost28\ndish\nqas\nluthien\nweihnachten\necko\nspellcheck\nxcart\ndony\nsymposium\nwww.testblog\nworklife\nacces\nbeluga\n1001\nsolicitud\nweb-test\nhost42\nhost43\nhost44\nsubject\nadmision\nautoupdate\nbrahma\nemilie\nns1.l\nautoconfig.cl\ncentral2\nns2.l\nhost39\nwebdisk.cl\nmasterhack\njocker\nvs9\nsoftwares\nwando\ndaisy1\nautodiscover.co\nwebdisk.art\nautodiscover.cl\nrepl\nwww.publicidad\ntrustee\ncthulhu\npolaris32\n0001\nslots\nbloomingcard\ndrum\nwww.nec\nwww.steve\npingdom\nhanmaum\ncortes\narquitectura\ncadence\nprotest\nbs01\nsoz123\nvmbackup\nasl1\nip196\ncrawl3\nbrotherhood\ndetali\nhgw\nautoconfig.cpanel\nautodiscover.cpanel\ntmr\npastime\nwebdisk.cpanel\nproducer\nwebdisk.journal\niroiro\nfed2\nantispam1\nchris123\nmyportfolio\nforeign\nzcs\nchroma\ndaesungco\nbatam\nmaxworld\nvideotutorial\nsmtp25\nfavour\naniac\ncrm4\npinguin\ncrawl2\nip193\nwww.primus\nmfo\nshadi\nabdallah\ngoldencity\nstudyroom\niasi\nwebsrv01\numma\ngtc\nburmese\nip253\nicelandic\ninfrared\nnewscenter\nsitenovo\ndevesh\nip245\nautoconfig.partners\nsalesdemo1\nbarone\nsalesdemo2\nautodiscover.partners\nbastman\nwebdisk.phpmyadmin\nmobilux\ndemocms\nangelsofdeath\npandu\ncs11\ndiets\nrgu\nip217\nfactory4\nroe\ncs12\nugo\nip210\npension1\nip205\nip204\nip203\nip188\nip164\nip162\nacris\nip147\nno1cafe\nip119\ndatafeed2\nangelus\nip106\nauthtest\nyouhei\nfrom\nd1-4\nnikesb\ndns40\nkeele\nrcworld\nfpo\nsendblaster\nyekwangco\nchoice1\nssada\nkorack\nsubsidy\nr1back\ningolf\ntikal\nbigmusic\nuc2\nessex\nsonax\nserver-0090\norangemusic\npsworld\nticket1\nwww.old2\nsongjin\nbeaunix\ntimecoach\nfannan\nemprendimiento\nwww.dic\nkolang\niklangratis\ntestversie\nweb717\n1004\ncofe\npls\n1012\nhwajin\nreise\nb133\nb124\nmansoor\nalico\ntheoden\nsinix\nheliopolis\nregret\ntaean\nwww.elsalvador\nvpnserver\n4free\nkame\nspare-240\nspare-248\nwww.quimica\nrodan\nvm110\nmoist\nokdspack\nlinux02\nserver-0087\naurora2\nwww.port\nfon\nparsley\nnettest1\nnettest2\nret\nabs2\nnettest3\ncorridor\nnettest4\nwaitingroom\ninsidepro\npreview.cmf.staging\ndte\nfotoklub\nwww.twilight\njoka\ntns3\ntns2\ntumble\npeyman\nhanics\nnightwatch\nmyapi\nrei\ntweets\nelizabet\nwww201\nnovosib\nwww.pasca\nespeciales\nheffalump\nctk\nsutech\njwdesign\nfeeds2\nkobalt\nsoulteam\nsargon\nmegazone\neprint\ntopsoft\nplayer7\nmext\nexplorers\nbigsave\nniels\nflowersky\nleipzig\nselli\nwww.opensource\nbosphorus\nlittlethings\nsamwon\nmodi\nd142\nd141\nt7\nyounghwa\nd140\nd138\nd137\nd135\nd134\nd133\nd132\nd131\nd129\nt6\nd128\nd127\nd126\nd125\nd124\nd123\nd122\nd121\nd119\nd118\nd117\nd116\nd115\nd114\nd113\nsungju\nd111\nsungil\nsungho\nfaq2\nnghenhac\nwww.rover\nsalonb\nwww.franchise\nedomain\nwin2008\nwww.eko\npasiphae\nsecuretransfer\nmosk\ngoedel\nsycompany\nsuzukishop\npicdev\nd139\namalthea\nimage99\nd130\njensen\nd120\nboanerges\nd110\nd108\nd106\nd105\nd103\nnorn\nwww.countdown\ntest-vip\ncaen\nsave-big\nbestone\nhost06\nhost07\ntokai\ngingerbread\nadminweb\noliveland\nswitchvox\nmoonstone\ncheops\nironbox\nbabypark\ngasgiveaway\nd109\nautoconfig.prueba\ncmf.staging\nd107\nwindows3\nd104\nwebdisk.prueba\nautodiscover.prueba\nforeclosure\nabbot\nopposite\navtech\nsql2005\nwww.oh\nsiberian\nvargas\nmeru\nv001\npreview.cmf\ncacti2\nwww.bookstore\nblue-sky\nwww.cristian\nqadb1\nesxi1\nstat5\ntopup\ninvaders\npita\nwww45\nwww46\nosos\nwww.404\nnet7\ndc1002\nxray2\ndgw\ntenshoku\nsysadm\nmywebpage\n180\npers\nplexus\n160\n153\nwww.mailboxes\nlibreria\nsyscon\nspare-44\nspare-96\ncasi\nmobileshop\nworldpc\nspascal\nlinksys\norangeave\ngeomusic\npilote\ndongin\nmotorhead\nrocinante\nsupporto\ncvsweb\nframe1\nschumann\ntimestore\nssv\nbain\nsoho1004\nimg32\ndev.support\nconsultants\nganz\nsignals\ne001\nsaib\nbesthouse\nphotoss\nonclick\nmidiland\nedubot\nmaleki\nmyra\nmechanics\npolomix\ndigiweb\nunicoh\nifree\nserveri\nslam\nluckymart\ncornea\nwww.8\npdns3\nwww.42\nwww.37\nwww.36\nwww.33\ntnns\nvica\nwww.30\nwww.27\nwww.26\ndpec\nmanatee\nnanotech\nmjstyle\ntrax\nshkorea\nprojecta\nwhw\nartshop\nadmin9\nomerta\nsunline\nbalkan\nwww.ns3\nlaforge\nnayely\nwwwneu\nbackend1\ntintagel\nmg1\nvegeta\nvworld\nracing\nteak\nwooster\nn4\nthecube\nnetdisco\ncosmas\nling\npectus\nfile3\ndimitri\nanimale\nprojekte\ndevdocs\ndory\nunlock\nlago\neeyore\noverlord\ncaesium\nwechat\ncs6\njiang\ngaspode\nnawras\nwww.romance\npreview-www\nhappyfamily\ncompra\nbrava\ndevportal\nudb\npasta\nlexicon\nrzeszow\ngao\nwww.dolls\nwindowslive\nsan1\npns2\nviceroy\nwww.mylife\ntuts\nweight-loss\ncys\nmapserver\nstary\nsporting\nmta7\nmobilewap\nischool\nblackblood\nlabyrinth\nmi6\nfws\npims\nvictorhugo\nrax\nzeus.cc\nclp\nstagingcms\nmdf\nns1.cs\nnet5\nruralvia\npwtest\nvmhost3\nthefamily\nastute\nvikram\ntraveltips\ndb04\nautomate\nw15\nautokb\nive\nlettuce\nbennett\nwww.invaders\nadmin123\ncabbage\naluminum\ncullen\nnkh\nhealthyhabits\npier999\ncp09\ncreativa\ntimm\nbuffett\ncp22\nwangyi\nsteampowered\n3arab\nvcops\nmapping\nabtech\nwta\nsaltlake\nwww.valhalla\nsmtphk\nwaters\npbx1\nfileserver2\nfree-sms\ngoldeneye\nmaarouf\nhosting5\nhayate\ndbprosearch01perf\npresd07\ndbapp01-6120\nweb11690\ndbsearch01dbnet\nts16b\nweb11689\nweb11009\nu1204s\nweb12789\ndbhps01dbnet\nweb10242\nweb10239\ndbbuild01dev-6120\nweb11679\nweb10809\nweb11678\ndbapp01qa-6120\nweb10235\nweb11677\nweb10808\nweb10229\nweb11672\nweb10228\nweb12199\nweb11669\nws292\nws291\nweb11668\ncmdev\nws282\nws281\ndbadmin02\ndbadmin01\nws272\nws271\nweb10929\nws262\nws261\nts05b\nws252\nws251\nws242\nws241\nweb12349\nws232\nws231\nweb10918\nws222\nws221\nweb10247\nrtpmaster03ete\nrouternet30subnet2oemail\nweb11982\nweb11665\nweb10248\ntrade9950-test\nweb10249\nweb12889\nloggingky\nweb13096\nweb10222\nweb10765\nrecimmaster00\nrecimmaster01\nrecimmaster02\ndb03perfext\nrecimmaster03\nweb11696\nweb12211\nweb10219\nweb10796\nweb13124\nweb13121\nweb13120\nweb13118\nweb13117\nweb13116\nweb13114\nweb13113\nweb13112\nweb13111\nweb13110\nweb10996\ndbsearch01collectorky\nweb13104\nweb13103\nweb13101\nweb13100\nweb13088\nweb13087\nweb13086\nweb13083\nweb13082\nfpftp01qa\nweb13080\nweb13077\nweb13076\nweb13075\nweb13074\nweb13073\nweb11659\nweb13070\nweb13068\nweb13067\nweb13066\nweb13064\nweb13060\nweb13058\nweb13057\nweb13056\nweb13055\nweb13054\nweb13053\nweb13051\nweb13050\nweb13048\nweb13047\nweb13046\nweb13044\nweb13043\nweb13042\nweb13041\nweb13036\nweb13035\nweb13034\nweb13033\nwin2ktestpc\nweb13030\nweb13028\nweb13027\nweb13026\nweb13024\nweb13023\nweb13022\nweb13021\nweb13020\nweb13017\nweb13016\nweb13015\nweb12305\nweb13013\nweb13011\nweb12910\nweb12908\nweb12907\nweb12904\nweb12903\nweb12902\nweb12901\nweb12900\nweb12887\nweb12886\nweb12884\nweb12883\nweb12881\nweb12880\nweb12878\nweb12877\nweb12876\nweb12874\nweb12873\nweb12872\nweb12871\nweb12870\nweb12867\nweb12866\nweb12865\nweb10795\nweb12861\nweb12860\nweb12858\nweb12857\nweb12856\nweb12854\nweb12853\nweb12851\nweb12847\nweb12845\nweb12844\nweb12843\nweb12841\nweb12840\nweb12838\nweb12837\nweb12836\nweb12834\nweb12833\ndbbiddata01-6120\nweb12830\nweb12827\nweb12826\nweb11339\nweb12824\nweb12823\nweb12821\nweb12818\nweb12817\nweb12816\nweb12813\nweb12812\nweb12811\nweb12810\nweb12806\nweb12805\nweb12804\nweb12803\nweb12801\nweb12800\nweb12788\nweb12786\nweb12784\nweb12783\nweb12782\nweb12781\nweb12780\nweb12776\nweb12775\nweb12774\nweb12773\nweb12771\nweb12770\nweb12768\nweb12767\nweb12766\nweb12764\nweb12763\nweb12762\nweb12761\nweb12760\nweb12757\nweb12756\nweb12755\nweb12754\nweb12753\nweb12750\nweb12748\nweb12747\nweb12746\nweb12744\nweb12743\nweb12742\nweb12741\nweb12737\nweb12736\nweb12735\nnet27sub04\nweb12731\nnet27sub01\nweb12728\nweb12727\nweb12726\nweb12723\nweb10209\nweb12721\nweb12720\nweb11652\nweb12716\nweb12715\nweb12714\nweb12713\nweb12711\ncp07dev\nweb11709\ncw09\ncw07\ncw06\ncw05\nweb10208\ncw03\ncw01\ncw00\nweb12346\nweb12650\nweb12647\nweb12646\nweb10207\nweb11650\nweb12640\nweb12638\nweb12637\nweb12636\nweb12634\nweb12633\nweb12631\nweb12630\nweb12627\nweb12626\nweb12625\nweb12624\nweb12623\nweb12620\nweb12618\nweb12617\nweb12616\nweb12614\nweb12613\nweb12612\nweb10196\nweb12607\nweb12606\nweb12605\nweb12604\nweb12603\nweb12601\nweb12587\nweb12586\nweb12584\nweb12583\nweb12582\nweb12581\nweb12580\nweb12577\nweb12576\nweb12575\nweb12574\nweb12573\niftp03\nweb12570\nweb12568\nweb10195\nweb12566\nweb12564\nweb12563\nweb12562\nweb12561\nweb12560\nweb12557\nweb12556\nweb12553\nweb11700\nweb12551\nweb12550\nweb12548\nweb12547\nweb12546\nweb12544\nweb12543\nweb12542\nweb12541\nweb12540\nweb12537\nweb12536\nweb12535\nweb12531\nweb12530\nweb12528\nweb12527\nweb12526\nweb12524\nweb12521\nweb12520\nweb12516\nweb12515\nweb12514\nweb12513\nweb12511\ncp05dev\nweb12508\nweb12507\nweb12506\nweb12504\nweb12503\nweb12502\nweb10803\nweb12500\nweb12487\nweb11645\nweb12485\nthirdwriteback01ete\nweb12483\nweb12481\nweb12480\ndbhps01qa-6120\nweb12473\nweb12472\nweb12471\nweb12470\nweb12467\nweb12466\nweb12465\nweb12464\nweb12463\nweb12461\nweb12460\ncmqa\nweb10192\nweb12454\nweb12452\nweb12451\nweb12450\ncollector2\nweb12446\nweb12444\nweb12443\nweb12441\nweb12440\nweb12438\nweb12437\nweb12436\nweb12433\nweb12432\nweb12431\nweb12430\nweb12427\nweb12426\nweb10191\nweb12423\nweb12421\nnet30sub01uploads\nweb12417\nweb12416\nweb12414\nweb12413\nweb12411\nweb12198\nweb10190\nweb11933\nwebmaildev\nweb12350\nweb12348\nweb12347\ndcoh\nweb12344\nweb11641\nweb12342\nweb12341\nweb12340\nweb12337\nweb12336\nweb12334\nweb12331\nweb12328\nweb12327\nweb12326\nweb12324\nweb12323\nweb12322\nweb12321\nweb12320\nweb12317\nweb12316\nweb12315\nweb10187\nweb12313\nweb12311\nweb11640\nweb12308\nweb12307\nweb12303\nweb12302\nweb12301\nweb12287\nweb12286\nweb12285\nweb12283\nweb12281\nweb12280\ncs04\nweb12274\nweb12273\nweb12272\nweb10186\nweb12270\nweb12267\nweb11638\nweb12265\nweb12264\nweb12263\nweb12261\nweb12260\nweb12258\nweb12257\nweb12253\nweb12252\nweb12251\nweb12250\nweb12245\nweb12244\nweb12243\nweb12241\nweb12238\nweb10185\nweb12236\nweb12234\nweb11637\nweb12232\nweb12231\nweb12227\nweb12226\nweb12224\nweb12223\nweb12221\nweb12220\nweb12218\nweb12217\nweb12216\nweb12213\nweb12212\nweb12210\nweb12207\nweb12206\nweb12205\ndbsearch01dev-6120b\nweb12203\nweb12201\nweb12200\nweb12188\nweb12187\nweb12186\nweb12184\nweb12183\nweb12181\nweb12180\nweb12177\nweb12176\nweb12175\nweb12174\nweb12173\nweb12171\nweb12170\nweb12168\nweb12167\nweb12166\nweb12164\nweb12163\nweb12162\nweb12161\nweb12160\nweb12157\nweb12156\nweb12155\nweb12154\nweb12153\nweb12151\nweb12150\nweb12147\nweb12146\nweb12142\nweb12141\nweb12140\nweb12137\nweb12136\nweb12135\nweb12134\nweb12133\nweb12131\nweb12130\nweb12128\nweb12126\nweb12124\nweb11634\nweb12122\nweb12121\nweb12120\nweb12117\nweb12116\nweb12115\nweb12114\nweb12111\nweb11998\nweb11997\nweb11996\nweb11994\nweb11993\nweb11992\nweb11991\nweb11990\nweb11987\nweb11986\nweb11985\nweb11983\nweb11981\nweb11980\nweb11978\nweb11977\nweb11976\nweb11974\nweb11973\nweb11972\nweb11971\nweb11966\nweb11965\nweb11964\nweb11963\nweb11960\nweb11958\nweb11957\nweb11956\nweb11952\nweb12050\nweb12047\nweb11632\nweb12045\nweb12044\nweb12043\nweb12041\nweb12040\nweb12037\nweb12036\nweb12033\nweb12032\nweb12031\nweb12030\nweb12027\nweb12026\nweb12025\nweb12024\nweb12023\nweb12021\nweb12020\nweb12018\norionb\nweb12016\nweb12014\nweb12012\nweb12011\nweb12010\ncp24\nweb12007\nweb10493\nweb12005\ncp20\ncp18\ncollector1b\nweb12000\ndb01perfext\nweb11886\ndbadmin01-6120\ntrade9955-test\nweb11883\nweb11714\nweb11881\nweb11838\nweb10979\nweb11876\nweb11873\nweb11871\nweb11629\nweb11868\nweb11867\nweb11866\nweb11863\nweb11861\nweb11860\nweb11857\nweb11856\nweb11855\nweb11854\nweb11853\nweb11850\nweb11848\nweb11847\nweb11846\nweb11844\nweb11842\ndbhps01dbtmp\nweb11840\nweb11837\nweb11836\nweb10789\nweb11834\nweb11833\nweb11831\nweb11830\nweb11827\nweb11826\nweb11824\nweb11823\nweb11822\nweb11821\nweb11820\nweb11817\nweb11816\nweb11815\nweb11814\ncp08dev20\ncp08dev17\ncp08dev16\ncp08dev15\ncp08dev14\ncp08dev13\ncp08dev11\ncp08dev10\nweb11626\nweb11750\nweb11747\nweb11746\nweb11745\nweb11744\nweb11743\nweb11741\nweb11740\nweb11738\nweb11736\nweb11734\nweb11733\nweb11732\nweb11731\nweb11730\nweb11727\nweb11625\nweb11725\nweb11724\nweb11723\nweb11721\nweb11720\nweb11718\nweb11717\nweb11716\nweb11712\nweb11711\nweb11710\nweb11707\nweb11706\nweb11705\nweb11704\nweb11703\nweb11688\nweb10172\nweb11686\nweb11684\nweb11683\nweb11682\nweb11681\nweb11680\nweb11676\nweb11675\nweb11674\nweb11673\nweb11671\nweb11670\nweb11667\nweb11666\nweb11664\nweb11663\nweb11662\nweb11661\nweb11660\nweb11657\nweb11656\nweb11655\nweb11654\nweb11653\nweb11651\nweb11623\nweb11648\nweb11647\nweb11646\nweb11644\nweb11643\nweb11642\nweb11636\nweb11635\nweb11633\nweb11631\nweb11630\nweb11628\nweb11627\nweb11392\nweb11624\nweb11622\nweb11621\nweb11620\nweb11617\nweb10976\nweb11614\nweb11613\nweb11611\nweb11610\nweb11608\nweb11607\nweb11606\nweb11604\nweb11603\nweb11602\nweb11601\nweb11600\nweb11588\nweb11586\nweb11585\nweb11584\nweb11583\nweb11581\nweb11580\nweb11578\nweb11577\nweb11576\nweb11574\nweb11573\nweb11572\nweb11571\nweb11570\nweb11567\nweb11566\nweb11565\nweb11563\nweb11562\nweb11560\nweb11558\nweb11557\nweb11556\nweb11553\nweb11552\nweb11551\nweb11550\nweb11548\nweb11547\nweb11546\nweb11545\nweb11544\nweb11543\nweb11542\nweb11541\nweb11540\nweb11538\nweb11537\nweb11536\nweb11535\nweb11534\nweb11533\nweb11532\nweb11531\nweb11530\nweb11527\nweb11526\nweb11525\nweb11524\nweb11523\nweb11522\nweb11521\nweb11518\nweb11517\nweb11516\nweb11514\nweb11513\nweb11512\nweb11511\ncp04dev\nbobj\nweb11618\nbobd\nwebadmin03qa\nts06\nweb10787\nweb11450\nweb11448\nweb11447\nweb11446\nweb11445\nweb11444\nweb11443\nweb11442\nweb11441\nweb11437\nweb11436\nweb11435\nweb11434\nweb11433\nweb11432\nweb11431\nweb11427\nweb11426\nweb11425\nweb11424\nss01qa\nweb11422\nweb11421\nweb11420\nweb11418\nweb11417\nweb11416\nweb11415\nweb11414\nweb11413\nweb11412\nweb11411\nweb11410\nweb11408\nweb11407\nweb11406\nweb11405\nweb11404\nwin95testpc\nweb11402\nweb11401\nweb11400\nweb11388\nweb11387\nweb11386\nweb11385\nweb11384\nweb11383\nweb11382\nweb11381\nweb11380\nweb11378\nweb11377\nweb11376\nweb11375\nweb11374\nweb11372\nweb11371\nweb11370\nweb11367\nweb11366\nweb11365\nweb11363\nweb11361\nweb11360\nweb11358\nweb11357\nweb11356\nweb11355\nweb11354\nweb11353\nweb11352\nweb11351\nweb11350\nweb11348\nweb11347\nweb11346\nweb11345\ncp03dev-1\nweb11343\nweb11342\nweb11341\nweb11338\nweb11337\nweb11336\nweb11335\nweb11333\nweb11332\nweb11331\nweb11330\nweb11326\nweb11325\nweb11324\nweb11323\nweb11322\nweb11321\nweb11320\nweb11318\nimnode05qa\nweb11316\nweb11315\nweb11314\nweb11313\nweb11312\nweb11311\ndbhps01qa\nweb11307\nweb11306\nweb11305\nweb11304\nweb11303\nweb11302\ndbprosearch01perf-6120\nweb11300\nweb11288\nweb11287\nweb11286\nweb11285\nweb11284\nweb11283\nweb11282\nweb11281\nweb11280\nweb11278\nweb11277\nweb11274\nweb11273\nwebadmin01qa\nweb11270\nweb11268\nweb11267\nweb11266\nweb11264\nweb11262\nrouternet22\nweb11260\nweb11258\nweb11257\nweb11256\nweb11255\nweb11254\nweb10831\nweb11250\nweb11248\nrouternet20\nweb11246\nweb11245\nweb11244\nweb11243\nweb11241\nweb11240\nweb11237\nweb11236\nweb11235\nweb11234\nweb11233\nweb11231\nweb11228\ncheckmate6\nweb11226\nweb11224\nweb11223\nweb11222\nweb11221\nweb11220\nweb11217\nweb11216\nweb11214\nweb11213\nweb11598\ndbhps01db\nws01qa010\nws01qa008\nweb11150\nweb11147\nweb11146\nweb11145\nweb11144\nweb11143\nweb11141\nweb11140\nweb11138\nweb11137\nweb11136\nweb11134\nweb11133\nweb11132\nweb11130\nweb11127\nweb11126\nweb11125\nweb11124\nweb11123\nweb11118\nimnode03qa\nweb11114\nweb11113\nweb11112\nws01perf\nweb11110\nweb11107\nweb11106\nweb11104\nweb11103\nweb10815\nweb11100\nweb10785\nweb11087\nweb11086\nweb11084\nweb12259\ns-test1\ngreenberg\nweb11083\nweb11082\nweb11081\nweb11080\nweb11077\nweb11075\nweb11074\nweb11073\nweb11071\nweb11070\nweb11068\nweb11067\nweb11066\nweb11064\nweb11063\nweb11062\nweb11061\nweb11060\nweb11057\nweb11056\nweb11055\nweb11054\nweb11053\nweb11051\nweb11050\nweb11048\nweb11047\nweb11046\nweb11044\nweb11042\nweb11041\nweb11040\nweb11037\nweb11036\nweb11035\nweb11034\nweb11033\nweb11031\nweb11030\nweb11028\nweb11027\nweb11026\nweb11024\nweb11023\nweb11022\nweb11021\nweb11020\nweb11017\nweb11015\nweb11014\nweb11013\nweb11011\nweb11008\nweb11007\nweb11006\nweb11004\nweb11003\nweb11002\nweb11000\nweb11593\ncplogin01ete\nweb10149\nweb10847\nweb10846\nweb10845\nweb10844\nweb10843\nweb10841\nweb10840\nweb10838\nweb10837\nweb10836\nweb10833\nweb10832\nweb10830\nweb10826\nweb10825\nweb10823\nweb10821\nweb10820\nimnode01qa\nweb10816\nweb10814\nweb10813\nweb10812\nweb10811\nweb10810\nweb10807\nweb10806\nweb10805\nweb10804\nweb10801\nweb10800\nweb10788\nweb10786\nweb10784\nweb10783\nweb10782\nweb10781\nweb10780\nweb10777\nweb10776\nweb10775\nweb10774\nweb10773\nweb10771\nweb10770\nweb10768\nweb10767\nweb10766\nweb10764\nweb10763\nweb10762\nweb10761\nweb10760\nweb10757\nweb10756\nweb10755\nweb10754\nweb10753\nweb10751\nweb10750\nweb10748\nweb10747\nweb10746\nweb10744\nweb10743\nweb10742\nweb10741\nweb10740\nweb10737\nweb10736\nweb10735\nweb10734\nweb10733\nweb10731\ndbadmin01perf\nindustrymail\nweb10499\nweb10550\nweb10548\nweb10547\nweb10546\nweb10544\nweb10543\nweb10542\nweb10541\nweb10540\nweb10537\nweb10536\nweb10535\nweb10534\nweb10533\nweb10531\nweb10530\nweb10527\nweb10526\nweb10524\nweb10523\nweb10522\nweb10521\nweb10520\nweb10517\nweb10516\nweb10515\nweb10514\nweb10513\nweb10511\ncp03dev\nweb10508\nweb10507\nweb10506\nweb10504\nweb10503\nweb10502\nweb10501\nweb10500\nweb10487\nweb10486\nweb10485\nweb10484\nweb10483\nweb10481\nweb10480\nweb10478\nweb10477\nweb10476\nweb10474\nweb10473\nweb10453\nweb10452\nweb10427\nweb10425\nweb10420\nweb10418\nweb10417\nweb10416\nweb10414\nweb10413\nweb10412\nweb10411\nweb10410\nweb10407\nweb10406\nweb10405\nweb10404\nweb10401\nweb10400\nweb10388\nweb10387\nweb10386\nweb10384\nweb10383\nweb10382\nbk05\nbk03\nweb10376\nweb10374\nweb10373\nweb10371\nweb10370\nweb10368\nweb10367\nweb10366\nweb10364\nweb10363\nweb10361\nweb10360\nweb10357\nweb10355\nweb10354\nweb10353\nweb10351\nweb10350\nweb10348\nweb10347\nweb10346\nweb10344\nweb10343\nweb10342\nweb10341\nweb10337\nweb10336\nweb10335\nweb10334\nweb10333\nweb10331\nweb10330\nweb10328\nweb10327\nweb10326\nweb10324\nweb10323\nweb10322\nweb10321\nweb10320\nweb10317\nweb10316\nweb10315\nweb10314\nweb10313\nweb10311\nweb11575\ncp02backup\nweb10250\nweb10246\nweb10245\nweb10244\nweb10243\nweb10241\nweb10240\nweb10238\nweb10237\nweb10236\nweb10234\nweb10233\nweb10232\nweb10231\nweb10230\nweb10227\nweb10226\nweb10225\nweb10224\nweb10223\nweb10221\nweb10220\nweb10218\nweb10217\nweb10216\nweb10214\nweb10213\nweb10212\nweb10211\nweb10210\ncp02int\nweb10206\nurbanhome\nweb12894\nweb10203\nweb10201\nweb10200\nweb10188\nweb10184\nweb10183\nweb10182\nweb10181\nweb10180\nweb10177\nweb10176\nweb10174\nweb10173\nweb10171\nweb10170\nweb10168\nweb10167\nweb10166\nweb10164\nweb10163\nweb10162\nweb10161\nweb10160\nweb10155\nweb10154\nweb10151\nweb10150\nweb10148\nweb10147\nweb10146\nweb10144\nweb10143\nweb10142\nweb10141\nweb10140\nweb10137\nweb10136\nweb10135\nweb10134\nweb10133\nweb10131\nweb10130\nweb10128\nweb10127\nweb10126\ncmbuilder\nweb10124\nweb12419\nweb11728\nweb11729\nweb11719\nubr01swd\nweb12895\ndbsearch03dev\nweb11596\nrtp01qa\nweb10123\ncollectorky\noh-mysql-02\nweb10818\nweb11735\nweb10122\nweb10121\nweb12896\nweb10120\ncp08dev\nweb10117\nprointernal\nweb10116\ndotla768\nlconline\ntabul\nweb10115\nweb11989\nweb10114\nweb10113\nweb10111\nweb10110\nweb10108\nweb10107\nweb10106\nweb10104\nweb10103\nweb10102\nweb10101\nweb10100\nweb10087\nweb10085\nweb10084\nweb10083\nweb10081\nweb10080\nweb10078\nweb10077\nweb10076\nweb10074\nweb10073\nsm100\nsea10\nweb10072\ncrafty01\nweb10071\nweb10070\nweb10067\nweb10066\nweb10065\nweb10064\nweb10063\nweb11739\nweb10061\ndbsearch0pro02qa\nweb10060\nweb10058\nweb10057\nweb10056\nweb10054\nweb11742\nweb10053\nweb10052\nweb10051\nweb11748\nautoscout24\nweb11749\nhighlander\nvmhosting\nweb10822\nweb12295\nweb12289\nweb12899\ngrandmom\nweb11878\nweb10824\npresentations\nsmoky\nred2\ntsst\npgtest\nptech\nfps.eu1\nfps.tc1\nfps.wg1\nweb12822\nweb12912\nnewky\nupload01qa\ndbadmin01qa-6120\npromonet\nweb11247\nasoft54\nftwright\nweb12262\nweb12914\nupload03qa\ndbadmin01db\nlegacy20022test\ndirectory1\nitn\nhps01\nkwtest\nhps02\nweb10919\nmchproxy02\nleukemia\nnet27sub02a\ndocstest\nrj2707368\nnet27sub02b\nnet27sub02c\nnet27sub02d\nweb10829\nweb12797\nns1dev\nrgt\nweb11737\nppcm\ndbadmin01perfext\nwww.wiwi\nky-mysql-01-qa\nweb11832\ndbprosearch01\nweb10050\nweb10047\nweb10046\nweb10045\ndbprosearch01tmp\nweb10043\ncw01qa\nweb10041\nweb10037\nweb10036\nweb10034\nweb10033\nweb10032\nweb10031\nweb10030\nweb10027\nweb10026\nweb10025\nweb10024\nweb10020\nweb10018\nweb10017\nweb10016\nweb10014\nweb10013\nweb10012\npowerkyalt\nweb11564\nweb11726\nweb10778\nweb11561\nweb11559\nweb11685\nnet29sub06web\ndbprosearch02\nwebback07\nwebback04\nwebback03\nwebback02\nwebback01\nweb13108\ngregz\nweb11555\nweb13097\ncp02dev\nweb12864\nweb11554\nweb13106\ntrade9957-test\nweb13095\nweb10099\nweb13094\nweb10098\nweb10097\nwebdesignpc\nweb13102\nweb12195\nweb10095\nweb13089\nweb11955\nweb10094\nweb10380\nweb11232\nthirdwriteback01int\nweb12589\nweb11419\nweb12299\ndb02dev\ncp01backup\nweb10089\nweb13084\nweb11954\nweb11539\nweb13081\ndb03perf-6120\nweb13079\nweb13078\nintmci9\nts25kycb\nintmci3\nts20kycb\nintmci1\nrouternet4ky\ncollector1-6120\nts14kycb\nweb10079\nweb11299\nnet29sub05web\nweb10510\nweb10772\nweb11529\nweb13072\nweb10381\ncp01dev\nupload03dev\ncheckmate9\ncheckmate8\ncheckmate7\ncheckmate5\ncheckmate2\nweb12204\nweb13063\nweb10165\nweb11520\nweb12049\nweb10769\nweb13061\ndbhps02db\nweb13059\ndb01dev\nweb11515\nws03dev\nweb10062\nweb12048\nicpmchat02dev\nweb12178\nweb13052\nolddocs\nweb12948\nrcollector2\nnet29sub04web\nweb12946\nweb12944\nrouternet0ky\nweb12941\nweb13039\nweb11902\nweb11945\nweb12938\nweb12937\ndemo1398\ndemo1390\nweb10042\nweb11409\nweb11946\ncs01qa\nweb12935\nicheckdocs\nweb10039\nweb12934\nweb12932\nweb12046\nts27kycb\nweb12931\nweb11398\ndbsearch04\ndbsearch01\nweb13029\nweb12309\nweb11943\ndbsearch01-6120\nu1204c\nicpmchat01dev\nimail03\nimail02\ndbhps01-6120\nmmoem01qa\ndemo1015\ndemo1012\ndemo1011\ndemo1010\ndemo1006\nweb11938\nweb12849\ndemo01qa\nupload01ete\nweb10028\nweb12314\nweb12920\nweb12848\nweb13018\nweb10023\nweb10752\nweb12917\ndbsearch01devbknet\nnewdocs\nweb12916\nweb11829\nweb13014\nweb11395\ncplogin04\nsupportweb02\ncplogin02\ncplogin01\nimapp01qa\nweb13012\nweb12039\nweb10759\nweb12911\nweb12792\nweb12909\nweb12279\nweb12846\nweb12897\nweb12906\nweb12038\nweb12294\nweb10758\nweb12905\nxbcast01qa\nweb11615\nweb11449\ncompatible3\ncompatible2\nweb12891\nweb11937\nwinnttestpc\nreports6000\ndbhps02dbtmp\ndbbiddata01qa-6120\ntrade9956-test\ndbadmin02-6120\nweb12885\nweb11722\nweb11922\nweb11396\ndbapp04db\ncpprosearchoh\nnet29sub02web\ncpprosearchky\nweb11439\nweb12882\nweb12879\nweb13098\nweb12035\ndbapp01qa\nweb10969\nweb10390\ndbapp01db\ntrade9951-test\nweb11934\nweb11430\nweb11428\ncpprosearch06\ncpprohomeky\nurgnet2\npowerlink8\npowerlink7\npowerlink6\npowerlink5\npowerlink4\npowerlink3\npowerlink2\nweb11391\nweb12189\nuploaddev\nreports04\nweb11843\ncpprohome04\ncpprohome03\ncpprohome02\ncpprohome01\ndb01dev-6120\nweb12925\nweb12196\nweb10392\nweb12820\nweb11364\nky2\ncarpt\nimmaster01tst\nweb11619\ndb5ext\nwebadmin01ete\nsupportimail\nweb10194\nwebadmin01dev\nweb11344\nloggingoh\nweb11825\nicpmnode02dev\nweb11373\nweb11845\nts07\nthirdwriteback01qa\nbk05dev\nweb11917\nweb12779\nidevdocs\nweb10999\nweb12778\nweb12777\nweb11334\nweb12278\ndefendermx03bb\nweb10998\nnet29sub03web\ncal01dev\nweb11329\nweb12192\nbenchweb01\ncw09web030\nweb11328\ndefendermx02bb\nprooh\ncw09web021\nweb12769\nfilesender\ncw09web020\nweb10393\nproky\nweb11915\nweb10916\nweb12277\ndbadmin02db\ncw09web010\ndefendermx01bb\nweb11298\nweb13123\nweb11369\nweb10396\nweb12598\nweb11849\nweb10397\nweb10189\nweb12765\nweb11851\nweb12927\nweb10398\nweb11852\nweb10399\nweb12939\ndbadmin01qa\npetros\nwebadmin01\nrouternet5ky\ndefendermx00bb\nbs01dev\ndbprosearch02tmpdb\nmmoem01dev\nweb11249\nstudev02\nweb12276\nloggingdb\nweb11390\nweb11862\ngaj\nweb12930\ncp02prod\nweb10419\nzgh\nweb11811\nweb11839\nwhatasite\nweb11319\nweb11368\nmzj\nweb11864\nsalem1\nweb11317\ngzw\nweb12758\nweb11865\nweb11913\nweb10423\nweb12929\nxbcast01demo\nweb10424\nperf-route-ds3\nweb11951\nweb11818\nweb11870\nweb11872\nkhaled1\nweb10429\nweb10995\ncpprohome01qa\nwww.mongolia\nicpmnode01dev\nweb11893\ndbapp04\nweb11875\ncpprohome02qa\nweb11693\ncheckdocs\nbriandev\nweb11877\nweb11835\npw01ete\nabaco1\nxbcast01ete\nweb11658\nweb11639\nweb12949\nweb11880\ncpanel4\nweb11882\npdns4\ntaban\ncal01qa\nqatest5\ncannotorder\nqatest4\nweb11702\nweb11884\nweb11885\nmehr\nskyy2011\nws61\nqatest2\nrouternet9ky\nappcgi1\nweb10732\nweb11219\nweb10509\nappcgi2\nws71\nweb11310\nweb11887\nweb11888\nnet29sub13sysadmin\nmm01\nweb12751\ndbprosearch01-6120\nblogadmin\nbasman\ndbsearch01db\ndbsearch01qa-6120\nweb11900\nanderson2\ncpbidproc01dev\nweb11297\nweb12001\nrouternet8ky\nweb12945\nweb11296\nws02qa\nweb13099\nweb11931\nweb11295\njeremydev606\nweb11959\nweb11294\nrouternet7ky\nweb11293\nweb11599\nimnode01tst\nrouternet6ky\nrouternet28\nrouternet26\nrouternet23\nrouternet21\nrouternet19\nrouternet18\nrouternet17\nrouternet16\nrouternet10\nweb11910\nweb10992\nweb12739\nrecimnode01\nrecimnode02\nrecimnode03\nweb11908\ndigiline\nupload01dev\nnasim\nrecimnode04\nrecimnode05\nrecimnode06\nrecimnode07\nweb12003\nweb12004\ndidattica\nweb12266\nweb11905\nvideoconferenza\nweb10991\ndbsearch01qadbperf\nweb12006\nrouternet3ky\nrtp01\nweb11907\nweb11399\nmooc\nweb12008\nweb12734\nweb12733\nweb10849\nweb12129\nweb12009\nrogerlaptopwin98\nweb12815\nweb11911\nweb11894\nweb10011\ncpprohome01prod\nweb11279\nweb11912\ncronweb02\ncronweb01\nweb12732\nrouternet2ky\nweb12918\nweb12306\nweb11897\nweb12729\nweb10015\nweb12269\narddb\njaysen\nweb11089\nrouternet1ky\nweb11275\nweb10798\nweb11362\naraupload\nalpacas\nweb12013\nweb10019\nweb10021\ncpprohomeoh\nweb12926\nweb12725\nweb11906\ncp02perf\nweb11271\nweb10022\nwww.s0\nweb11914\nweb10029\nweb12015\nweb10035\nweb10464\nweb10038\nweb10040\nweb11269\nweb12185\nweb11930\nweb12719\nweb11895\nkentuckyserver\ncplogin03\nweb12717\nreports5000\nweb10749\nwebim2104\nwebim2103\nwebim2102\nwebim2101\nwebim2100\nweb11359\nweb11263\nwebim04\nwebim03\nwebim02\ncollector2-6120\nts24kycb\nweb11904\nrouternet28g\nrouternet28f\nts18kycb\nweb12420\nweb11261\nts19kycb\nweb11259\nts13kycb\nweb11950\nfpofc\nwebconfig01qa\nweb11903\nextmci1\nweb11549\nweb10985\ndbprosearch01qa\ndbsearch04db\nweb11253\nweb12799\ncpprosearch02qa\ndbprosearch02db\ncp08dev5\nweb11251\nbk01net\nweb13092\nweb12002\ndbprosearch02dbnet\ncpprosearch01qa\ndbprosearch01db\ndbsearch01qa\nws02dev\ncw09web029\ncw09web028\ncw09web027\ncw09web026\ncw09web025\ncw09web024\ncw09web023\ncw09web022\ntelnetserver\ncw09web019\ncw09web018\ncw09web017\ncw09web016\ncw09web015\ncw09web014\ncw09web013\ncw09web012\ncw09web011\ncw09web009\ncw09web008\ncw09web007\ncw09web006\ncw09web005\ncw09web004\ncw09web003\ncw09web002\ncw09web001\nweb12798\nweb11901\ndemo1014\nweb11242\nweb12807\nweb12028\nweb11239\nweb11890\ndemo1013\nweb11238\nthirdwriteback01\noxops\ndatafeedext1\nweb12017\nweb12796\nmonitoring01dev\nweb12291\ndatafeed1collector\nweb11276\nweb11230\nweb11227\nweb10980\nweb11379\nweb11225\nweb12794\ndemo1009\nweb11940\nweb12835\nweb10978\nweb12793\nweb11218\nrogerspcupstairs\ndemo1008\nweb12296\nweb11215\nrpt2000\nweb11349\nrtpval01\nweb12802\nnihil\nweb11927\nweb11212\ndemo1007\nweb11211\nweb11891\nweb11076\ndbhps02temp\ndbprosearch01perfext\nweb12648\nweb12290\nweb12255\nweb12790\nweb12643\nweb11713\nweb12254\nns2dev\nweb12639\nweb11819\nweb12525\ncp08dev9\ncp08dev8\ncp08dev7\nneildev02\ncp08dev4\ncp08dev3\ncp08dev2\ncp08dev1\ndefendermx00\nweb12787\nwebimdev\nweb12632\nweb11879\nweb11929\nweb11616\nweb11926\ndemoim\ndbapp01net\nstepmom\ndbbiddata01qa\nweb11595\npaulcdev\nweb12785\nweb12622\nweb12621\ndbprosearch01qa-6120\nweb12249\nweb10970\nweb13122\nweb11692\nweb12615\ndbbiddata01\ntrade9952-test\ndbbuild02dev-6120\nweb12248\nrtp03ete\nimmaster03qa\ncpbidproc01qa\nweb12239\nweb12610\nws01qa\nweb12247\nweb11340\nimmaster01qa\ndefendermx01\nweb11612\nweb12594\nfastparts\ndemo-3\nweb12592\nfpftpserv\nweb12591\nweb12940\nweb12590\nwin98testpc\nweb11925\nweb12588\nweb10827\nchatroomroster01dev\nweb11594\nwinxptestpc\ndb03perf\nweb11609\ndefendermx02\nweb12292\ndbprosearch02tmp-6120-6120\nrtim\ndefendermx03\nweb10964\njeremydev02\nnet28sub12datafeed\nweb11135\nweb11919\nweb11394\nweb11597\nvbsii\ncpprohome03ete\ncc01qa\nweb10199\nwinmetestpc\nwiki01\nweb11698\ndbprosearch02qa-6120\nthirdwriteback01prod\nweb13115\nrweb01\nweb12565\nweb13109\nweb13107\nweb13105\nweb13093\nweb10044\nweb13091\nweb13090\nweb11119\nweb11605\nweb11701\nweb11924\nweb12214\nweb11010\nweb11117\nweb12240\nweb13071\nweb11116\nweb10959\nweb13069\nweb13065\nweb11115\nweb11715\nweb13062\ncpprohome02int\nloggingohnet\nweb13049\nweb12947\nweb11272\nweb13045\nweb12943\nweb12942\nweb13040\ndb01perf\nweb13038\nweb13037\nweb11099\nweb11948\nweb11969\nweb12933\nweb13032\nweb11098\nweb13031\nweb12928\nweb10997\nweb13025\nweb12924\nweb11699\nweb12923\nweb12922\nweb12921\nweb11096\nweb13019\nrtp01ete\nweb12915\nweb11095\nweb11949\nweb12913\nweb12499\nweb10994\nweb12898\nweb12772\nweb10993\nweb12893\nweb12237\nweb12892\nweb11592\nweb12890\nweb12888\nweb11092\ncp3web\nweb11091\ndbhps02-6120\nweb12831\nweb11090\nweb12875\nweb10988\nweb11942\nweb10792\nweb12869\nweb11899\nweb12868\nweb13119\nweb11591\nweb12863\nweb12862\nweb10986\nweb12859\nweb10048\nbadpentiumii\ncpprohome02dev\nweb12855\nweb11085\nweb12852\nweb12850\nweb10984\nweb10983\nweb11327\nweb12842\nweb12839\nweb10982\nclient03perf\nweb11590\nweb12832\nweb12828\nweb11079\nweb12532\nweb12825\nweb11078\nweb10793\nweb10977\nrtnode01dev\nweb12529\nweb12814\ncpprohome01int\npaulc02dev\nweb12809\nweb12808\nweb12795\nweb10975\nweb10974\nweb12495\nweb10972\nweb12194\nweb11587\nweb11069\ngatewayrouter\nweb11708\nweb12759\nweb12791\ncpprosearch04\nweb12519\nweb12752\nweb10966\nweb12749\nweb12275\ncpprohome01ete\nweb12745\nweb10965\nweb12740\ncpprosearch01\nweb13085\nweb12738\nweb10197\nweb10963\nnet27sub03\nweb12829\nweb12730\nweb10962\nweb12724\nweb12722\nweb12718\nweb11649\nweb10960\nweb12712\nweb10958\ncpprohome01dev\nweb10957\nweb12509\nintmci5\nintmci4\nintmci2\nweb10956\nweb10949\nweb12936\nadminback\nweb12505\nweb10952\nweb11889\ntrade9919\ntrade9918\ntrade9917\ntrade9916\ntrade9915\ntrade9914\ntrade9913\ntrade9912\ntrade9911\ntrade9910\nweb12491\nweb10950\nweb12501\nweb12649\npoolmaker2\ncpreportsbackup\nhawkingdialinrouter\nweb12645\nweb12489\nweb12644\ncp01prod\nweb12284\nweb10049\nweb12019\nweb10467\nbwg\nweb10055\ndb02dev-6120\nweb12642\nweb12641\nweb12635\nweb10945\nweb12629\nweb12628\nweb12486\nweb11393\nweb11921\nweb10943\ncp05qa\nqadb3\nweb11582\nweb10059\ndbbuild01devcoll2\nweb12619\nweb12484\nweb12611\nfascache\nweb12022\nweb10469\ndvlabs\nweb12608\nnnssa1\nrcollector1\nweb12597\nweb10940\nweb12596\nweb12482\nweb12595\nweb10068\nweb12593\ndbsearch02devbknet\nweb12602\nweb11038\nweb12600\nbackofgen\ndbprosearch02-6120\nkentucky2\nfn01qa\nweb10937\ndesigner-stg\nweb12585\ncp03qa\nhpsbackup02\nhpsbackup01\nweb10936\nweb12579\nweb12478\nweb12578\nweb12477\nweb11923\nweb12572\nweb10069\nweb12571\nweb12569\nweb10471\nnatalie\nshootingstar\nweb10075\nsuper2\nweb10082\ndbadmin01dbnet\nweb12476\ncp02qa\n5201314\nskel\nweb10086\nweb12567\nwebconfig01\nweb100005\ntrade9900-control\nweb100003\nweb12559\nweb12558\nweb10932\nweb11579\nweb12555\nweb12554\ncp01qa\ncp01bench\nweb12552\nweb12549\nstudev\nweb12545\nweb10928\nweb12539\nweb12538\nweb12534\nweb12533\nweb11928\njwebconfig01\nweb10925\nweb12523\nweb12522\nweb10924\nweb12518\nweb12517\nweb10923\nweb12512\ndbhps02\ndbhps01\nweb12510\nweb12498\nweb12497\nweb12496\nweb11589\nweb12494\nweb12493\nweb12492\nweb12490\nweb12488\nweb10920\nweb12222\nweb12475\nweb12459\nweb12474\njeffmlaptop\nweb11016\nweb12469\nweb12468\nweb12457\nweb12462\ncp08dev6\nweb10799\nweb12458\nweb12456\nrtpnode05ete\ncheckmate4\nweb12453\nweb12455\nweb12449\ncp08dev18\nweb10912\ncomputerinabox\nweb12442\nweb12435\ncp01perf\nweb12219\nweb10939\nweb12448\nweb12418\nicdev\nweb12447\nweb12412\nweb12445\nbackuppc4\nbackuppc3\nbackuppc2\nbackuppc1\nweb10938\nts23kycb\ncp04qa\nweb12439\nweb11920\nts12kycb\ncp02qa002\ncp02qa001\nsnoopyoh\nweb10739\nweb12479\nlupin\nweb10088\ndukakis\nsethu\nrouternet30sub03\nweb11309\nimgcollector1qa\nweb12345\nweb12343\nweb12339\nweb12338\nweb12434\nweb12335\nweb12282\nweb12333\nweb12332\nv23mig\nweb12330\nweb12325\nweb11308\nweb12319\nweb12318\ncpprosearch05\ncpprosearch03\ncttest\nweb12429\ncpprosearch02\nweb12312\nproductsdemo\nweb10090\nweb12310\nweb12428\nweb10091\ndb7netdev\nweb10092\njobfair\nweb12298\nweb11695\ncpbidproc02dev\nnarab462\nweb12297\nweb10093\nweb11918\nweb11403\nweb12304\nky-mysql-01-dev\nweb12293\nweb12215\nweb12300\nweb12288\nweb12425\nweb12424\nweb11569\nweb10105\nweb10389\nweb12422\nweb10096\nweb10109\nupcheckmate03\nweb11812\nky-mysql-01\nweb11568\nweb10112\nweb11841\nweb11869\nweb12029\nweb11389\nfighters\ndbhps01temp-6120\nmeta1\nweb10118\nweb10119\njawknee\nweb11932\nweb10479\nmegap\nusd\nmel01\nweb10125\nweb10129\nweb10132\nmuskoka\npinker\nhomer2\nweb12034\nweb10482\njeremie\norkutthemes\nnapstar\nrogerhome\npge\njaydeep\nunipower\nwebmail.webmail\nbuilder.webmail\nweb10138\nweb10139\nweb10145\nmtf\nneildev\nweb10152\nweb10153\nweb10156\nweb10157\nweb10158\nweb10159\njbz\nweb12919\npt1\nwebinterchange\nweb11941\ngeorge1\nrpt1000\nweb12042\nweb10489\nhpg\nrahuljain\ngpc\nowlseye6\nsizzle\nisrc\nwoodlawn\nserver001\nipv4add6\numbracotest\nmspro\nweb10175\npatch4\nwww.uruguay\navatar2\nunified\nweb10178\nsentral\nweb10179\ndb1net20\nweb10202\nweb10193\nmsv\ncsv\nweb10204\nparking-san-mc\nweb11229\npark-memcached\nweb10495\nfreeproxy\nweb10215\nbiuletyny\naimtestpc\nts15kycb\nweb10496\nluciana\nweb11935\ncpimnode01\ncpimnode02\ndkn\ncpimnode03\ncpimnode04\ncpimnode05\ncpimnode06\ncpimnode07\ncpimnode08\ncmdev2\nweb11697\nweb12950\ndbsearch03devbknet\nparking-tor-mc\ncplogin03ete\ncpprosearch01prod\nweb12139\nweb12268\nweb11961\nweb11962\nts26kycb\nws01qa001\nws01qa002\nws01qa003\nws01qa004\nws01qa005\nnarrabri\nws01qa006\nws01qa007\nws01qa009\nweb10312\ntestim02\ncpbidproc01\ncpbidproc02\nvzxca\nmailstore2\nweb11896\nchild1\nweb10318\nweb10319\ndvredit-crackdb\nportcullis\ntest.cms\nfroth\nweb11967\nweb10325\nweb11968\nweb10329\nweb10332\nbraddev\nweb11970\ndbsearch01dev-6120a\nweb10338\nkiarash\ncfm\nweb10340\nweb10345\nweb10349\ngalahad\nelgar\nweb10352\ntrade9954-test\nweb12415\ncplogin01int\nulysses\nweb10359\nweb11975\nphadmin\nrmi\nrodina\nweb10362\nweb10365\nscottbat\nweb10369\nmcleod\nweb10372\nemin\nbutch\nnwvl\nmahboob\nph4nt0m\ndbadmin01collnet\nweb10375\nweb10377\ndrugon\nbugsy\ndayna\nchss\nohdc\nbarn\nutenti\nvcb\nweb10378\nthunderbird\nblunt\nweb11979\nwebformcc.web.d-dtap\nweb10385\ncheckmate10\nweb10391\nsvevo\nsasika\ncpreports\nweb10402\nelinks\ncafe1\nbilby\nblogmu\njalapeno\nsmiler\nweb10403\nweb10394\nweb11947\nweb10395\nppp4\nweb10408\nwebdav1\ndan2\ndps1\nweb10409\nweb10415\nparaisossecretos\nregus\nweb11984\nweb11429\nweb10421\nweb10422\nweb10990\nweb10426\ntrade9959-test\nweb10428\nweb10430\nweb10545\nweb11988\nweb10454\nweb10549\nweb10455\nweb10456\nweb10457\nfrontpage1\nweb10458\nweb10460\nweb10461\nweb10462\nautoconfig.bd\nwebdisk.bd\nweb10463\nweb10465\nweb10466\nicpmmaster01dev\nweb10468\nweb10470\ndatacenternetoh\nweb11995\nweb10472\nweb10475\ndb5kyint\nweb12609\nweb10488\nweb10490\nweb10491\nweb10492\nautodiscover.bd\nweb11999\nweb10494\nweb10505\nweb10497\nweb10498\nweb10512\ntin-tin\ndb5collectorky\nwiki01qa\nweb12112\nwv\nplaytime\nky-brianweb-01-dev\nalrahma\nweb10518\nfastnnet\nweb10519\nweb12113\nweb10525\nweb10528\nweb10529\nhps01qa\nweb10532\ndbsearch03dev-6120\nweb10538\nweb10539\nweb12118\nweb11289\nweb12123\nweb12125\nwww.phuket\nweb12271\ndbprosearch02tmpdbnet\nweb12127\nwww.mauritius\ndbsearch04-6120\ndemoimmaster01\npadfoot\nweb12132\nweb11898\nhollander2\nz-v-tamngung-20130130-www.mobile\nhollander3\nwww.ketban\nhollander4\nweb12329\ncmsupport\nz-v-tamngung-20130130-www.mobilegame\ntsung0\nweb12138\ndbapp01\nweb12143\nweb10339\nweb11519\nweb12144\nstreamings\ngammoudi5\nweb12145\ntrade9901-control\ndatafeed5\nrouternet0\nrouternet1\nweb12148\nweb12149\ndbsearch01net\nxbcast03ete\nweb12152\nweb10745\nweb11423\ncpimmaster01\ncpimmaster03\ncpimmaster04\nweb11813\nweb11939\nmolitva\nweb12158\nrouternet10ky\nweb12159\nweb11909\nrtmaster01dev\nweb10790\nweb10791\nweb10802\nweb11953\nweb11892\nweb10797\nweb12165\nts11kycb\nweb11252\nts16kycb\nweb10828\nmx2o2\nts22kycb\ndevnetrouter\nmx2o3\nweb12169\nweb10834\ndatafeed3\ncs01dev\nmxo2\nmxo3\nwww.prosper\nwebadmin01perf\ntinnhan\nstylesgiles\nmmoem03\nweb11694\njnb\nwww.tuvangioitinh\nm.nhac\nxbcast01\nipswich\nxbcast03\nweb12179\nweb10989\nweb11001\nnet29sub01web\nweb12182\nautoconfig.survey\nautodiscover.survey\nwww.lamquen\nucow200018\nweb11005\nucow200118\ndtdd\nupcheckmate01\nupcheckmate02\nwww.nhac\nweb10911\nweb11012\nautodiscover.um\nweb10913\nsmsbongda\nweb10914\ndidong\nproducts.demo\nws04dev\nweb10915\nviec\nweb10917\nwww.tinnhan\nintelec\nweb11018\nwww.tuvantamly\nz-v-tamngung-20130130-mobile\nweb11019\nonlinehelp\ndatafeedtest\nweb10921\nweb10922\nweb11025\nz-v-tamngung-20130130-www.javagame\nwww.dtdd\nweb10926\nweb10927\nweb11029\nskn\nweb10931\nucow200218\nweb11032\nweb10933\nlogin01qa\nucow00018\nweb10934\nweb10935\nucow00118\nweb11528\nweb11039\nweb10941\ndbsearch01dev\nweb10942\nucow00218\nweb11043\nweb12190\nmgd\nweb10944\nweb11045\nwww.didong\nz-v-tamngung-20130130-javagame\nkrd\nweb10946\nlemmiwinks\nweb10947\nuploaddev2\nweb10948\nwww.operacje\ntuvangioitinh\nweb12191\nlesath\nvampira\ntuvantamly\nwww.ukr\nwww.ringtone\nlympne\nweb11049\nweb10951\nweb11052\nweb10953\ntest.nhac\nwww2.nhac\nweb10954\nweb10955\nweb11058\nweb11059\nmxserv2\nwww.smsbongda\nz-v-tamngung-20130130-mobilegame\nweb10961\nweb12193\nlamquen\nc-3640-v03-01.rz\nladon-1.rz\nweb11065\nmailrelay-eddev\nmailrelay-edprod\noxford1\nc-asa5520-v03-01.rz\nc-5508-n04-01.rz\nc-5508-v03-02.rz\ndh-ramirlt\nwww.shop1\ncw01qa001\nwebdisk.resellers\nranch\nhughie\nweb10967\nweb10968\nrhdev\nweb10779\nkevindev02\nweb10971\nsupportcenter\nweb11072\nsandal\nacsteam\nweb10973\nweb11691\nperky\nweb10981\nssotest2\narundel\ndmv\ndbsearch01collnet\n0745\nweb12197\nwsftp\ntreasurer\nweb11936\nweb10987\nweb12208\nvirtuality\nevision-test\nweb11088\nfoe\nbs01qa\nweb11102\ntutoriales\nweb11093\nlcezone\nweb12209\nanacreon\n1006\nweb11094\ncw01qa002\nweb11105\nweb11097\nweb11108\nweb11109\nintpt01a\nmchproxy01dev\nweb11120\nweb11122\ndbhps02temp-6120\nnet29sub07proweb\ntrpz\nweb11687\ncollector1qa\ndiseno\nweb11128\nweb11129\nweb11131\nweb12202\nweb11139\nns2.sdns\nns1.sdns\nitanium\nwww.rotor\nweb11148\nweb11149\ntcoh\nweb12225\npowerky\npoweroh\nweb12228\nwlan-switch.dyn\nweb10459\nweb12230\nhost35\nweb12599\njwebconfig01qa\nprod.contentlibrary\nweb12233\nweb12819\nweb12235\nrtp01demo\nweb11265\ncpimmaster02\nweb12242\nrw7\nwebconfig01train\nssqa\npw01qa\nweb11291\nautoconfig.t\nweb11292\nweb12246\nautodiscover.t\nallthegreenhomes\nwlan-switch.inf\ncredix\nrtpmaster01ete\ncs8\nts09\nrtpmaster01\ndadmin\ncs22\nwww.arquitectura\nbegin\nautodiscover.tmp\nwebdisk.tmp\nautoconfig.tmp\nqa-version\nserver1010\nyamyam\nanteprima\nwww.bkr\nwww.aldrin\nanne1\nwww.toplevel\nwww.mmone\nmmone\nmcommerce\ncraven\nrtpmaster03\nvps-107.cp\nweb12256\nprotek\nboneyard\nsteveo\nweb11397\nmalang\ncreepers\ntrpz.dyn\ntrpz.inf\nsuites\ncpprosearch01ete\nwms5\nwms4\nsupportweb01\nintratest\nwww.derecho\nsupportweb03\nims2\nfascm\ncompbio\nl4d\nwms6\nwww.psicologia\nmbl\ntestnode1\nappstest\ncp01prod001\nkaitain\nweb11438\ndha\nmessalina\nagrajag\nlucilla\ngarkbit\ntps1\nprofesores\nplanetree\nweb11440\nlti\ncarthago\ncompost\nmyteam\nfabia\nskyx\ntsung1\npublicaciones\nmockturtle\nsartre\nherbster\nwebdisk.david\niulia\ndb3collectorky\nkirsten1\ncpprosearch01int\nicpmmaster02dev\nhamzeh\nrealcity\nreports01\ndedicatedserver\ndinosaurs\nreports02\nreports03\nreports05\nkronos01\nsrv06\nkronos02\nts04b\nts06b\nstg02\nstg01\njhw\nts07b\nwwwbeta\nts08b\nts09b\nts11b\nts12b\nwebdisk.minecraft\nneerc\nts13b\nts14b\nts15b\nwww.ciekawostki\nciekawostki\njkoecher\ngmail-iweb\nbrightmail\npresd01\npresd02\npresd03\nidelivery10.platform\npresd04\npresd05\npresd09\nts18b\nmonitoringoh\nts19b\ncpprosearch02int\nimages.swid\nqa-route-intmci8\nimgcollector01dev\nclient01dev\ncpprosearch03ete\ndbprosearch01net\nidelivery11.platform\nrtpnode01ete\nws31\nrblack\nberkshire\nws32\nhgxy\nxinh\nhug0318\npcv\nsnieg\nmmtp\nws41\nws42\nevo-master\nwww.bioinformatics\njay.ns\nnewmeleno\na.riten.hn\nws51\nb.riten.hn\nmeleno.in\nc.riten.hn\nd.riten.hn\nlindon\ne.riten.hn\nwww-h\npuppymoon\ndaa2\nfire1\naep\nbankruptcy\nkronos1\nsunny.hn\nmeleno\nwwwmeleno\nnewmeleno.in\nivy.ns\na.sunny.hn\nb.sunny.hn\nriten.hn\nc.sunny.hn\nd.sunny.hn\ne.sunny.hn\nmunin.riten.hn\nnewsat\nwesty\nsuperstore\nkiril\nlocalhost.net\nkns\nrsi\ndhcp04\nyamamoto\nholm\nenv1\nwww.prosfores\nadmin.env1\nmarket3\nws.statm\nmkg-admin\nstatm2\ncas01\nhidayat\nwayfarer\nistra\nhta-prodhost0.sol\nisk\nvakant.kc\nstigmata\nlbi\nmatthijstest\nmarilot1-design\nrandr\neufrasia.bio\nteco45.ae\nrouter-sdi.teseo\nd37pc2.mp\nuniflow\npent-x450.cbm\nb20pc2.bq\ndarker\na37pc2.mor\npc22.icp\nsidirect2.sidi\nfcpc19.far\nws52\ndbapp04-6120\nb20ppc3.bq\nfourhorsemen\nws62\ncl02\nws72\nws81\nws91\nannabelle\nrubis\nws92\ntamtam\ntrade9953-test\ncplogin01prod\ncp08dev12\nsonyericsson\nbiff\ncp8\nalize\nr2000\nmportal\naccueil\ncp9\nurgnet3\nweb11828\ncp7\ncp6\nsql2k3\nsql2k2\nefront\nprelive-admin\new54384r9bcgh3\new54384r9bcgca\new54384r9cxl7w\nweb11916\new54384r95tahl\new53680r9cxfhg\new54384r9d5fkm\new54384r99z0rh\new54384r9abzgm\nwin101\nweb10794\new54384r9cxkf8\nsql2k5\nsql2k4\nsql2k1\new54384r9d4wth\new54384r99nhcl\new54384r9d6hla\new54384r9d6hlw\new53680r9ah4kc0\new54384r9arf7f\new53680r991hl4\ncollectorback\new54384r9ca8rn\ncp08dev19\new53680r9bbvt4\nwiki01dev\nmail.chat\new54384r9cxkyg\new54384r9ca99x\new54391r96vvye\ndata6\nclient02dev\new54391r96vvzv\ntrade9958-test\new54384r95taeb\nweb11859\nweb11874\nweb10817\ndbbuild01dev\new54384r95taee\new54391r98m0p5\nweb10819\nweb10379\nmmoem01\new54384r95taka\nmmoem02\new54384r979gln0\nwww.eburg\nrouternet11ky\njeremyclientdev\new54384r99nht2\nweb11944\new54284r9fd8cb1\nrouternet28sub13sysadmin\nrouternet12ky\nrouternet13ky\nqaweb3\ndbhps01temp\nwww.aga\nweb10835\nrouternet14ky\nclient03dev\ndemoimnode01\nrouternet15ky\nweb10839\new54384r98e15v\nweb10842\nweb12119\ngrodno\nwww.instalator\nurbanlaptop\n1337\nweb10358\nweb10930\ndbbuild02dev\nweb10848\nwww.tournaments\ndbbuild01net\nokr\nweb10850\nrtpnode03ete\nweb12172\nrtpnode01\nrtpnode03\nrtpnode05\nmeier\nts21kycb\nweb12229\nweb10738\nzhitomir\nmercurio2\new54384r99z1wf\nsivaram\new54384r9cxlz30\new53680r9amhxg\new54391r96zpan\nluk\nmeca\nlodestar\nwww.rating\ncbb\new54384r9d5f9n\nsanket\npdn11g-scan\new53680r992l0x\new54384r96rm4f\nadministrativo\ncrecon\ntournaments\new54384r96rm8b\new54384r98kz000\new54284r9ehm2n0\new53680r9d5ctz\new54384r99nham\new54384r99nhdp\new54384r99nhm6\new54384r9ca8h7\new54384r9atcfd\new54384r9d4t3a\nnlplanner\nwww.erevan\new54384r96vtbm\new54384r9d5fep\new54384r99nhwh\new53680r970llk\nkherson\nuzbekistan\new53680r970lly\new53680r970lmv\nmaild\new54384r9aa18v\new54384r9aa19v\new54384r9aa19x\new54384r9aa19y\new53680r99nlh6\new54384r9aa1a7\new54384r9aa1b1\nfeniks\nbaks\new54384r9aa1b6\nwww.mur\nmogilev\new54384r9aa1aw\new54384r96vtge\new54384r96vt63\ntest-p\new54384r96vt97\new54384r96vta6\new54384r96vta9\ntelaviv\new54384r96vte8\new54384r96vtkl\new54384r96vtlm\new54384r96vtv7\nipv4with6\new54384r9ac08e\nviz\new54384r9ac0f1\nlepus\new54384r9ac0da\nns22266\nns24331\new54384r9ac0dt\new54384r9ac0ev\nautoconfig.central\nautodiscover.central\new54384r9ac0ew\new54384r9ac0gt\new54384r9ac0gv\new54384r9ac0gy\new54384r9ac0hz\new54384r9ac0ll\new54384r9ac0nl\nvps130\new54384r9ac0pb\new54384r9ac0pt\new54384r9ac0rc\nvps120\new54384r9ac0wv\nwebsrv1\nmango2\new54384r98m384\new54384r98gdm6\new54384r98gdn7\new54384r98gdr0\new54384r98gdnp\new54384r98m1k3\new54384r9ca8g3\new54384r9bl31t\new54384r9d4wd3\nvps160\new54384r9bcgk7\nvps167\nvps187\nvps178\ntripplanner\nvps159\nvps146\new53680r992x65\new54384r9d4wcr\new54384r9ae2c4\new54384r98kyyd0\new54391r98rhmz\ntxdowtp\new54384r9d4wnd\new54384r99nknz\new54384r9cd2mp\new53680r99v27b\new54384r9bl2ke\new54384r9cl1lc0\njawhara\new54384r9bl3bh\nmoslem\new54384r9arh37\new54384r993neg\new54384r9abzme0\new54384r9c03p60\nip8\nvps046\nvps043\nvps039\nian1\new54384r98kz0a\new53680r981fpb\new54384r98kyca\new54391r99ngb9\new54291r9rg5k1\nvps025\new54384r98ng5f\new54391r99ngen\nvps022\nsjp\new54384r9abzwz\new54384r98nep6\nvps018\new54384r98nena\new54384r9c9hl8\new54243r9f714d\nvps014\new54243r9f713x\new54384r99v3en\new54243r9e8mkh1\nwww.mature\nvps008\nvps007\new54384r99l6gb\nproxmox1\nvps005\nvps004\nvps003\nvps173\new54384r99l6gk\ntime.services\new51fkya60218\new51fkya60254\new54384r99pp4n\new54384r98xy7h\new54384r97ygm5\nsparkhost\nmailman1\np001\new54384r9ca8yx\new53680r9a2177\new53680r9a217p\new54384r99pr0c\new54384r9bkm3d\nmedia8\new54384r9ca9cp\nmedia6\new54384r9cd2pt\new54384r99v3md\new54384r9cd5a9\new54384r9be4p6\new54384r9be4pr\nncs1\nxkb\nwwf\new54384r9be4td\new54384r9be4vv\new54384r98rha1\new54384r9bab0m\new54384r99pt3z\new53680r987ct1\new53680r9a34w8\new54384r9bkn52\new54384r9baaw2\new54384r9ac006\new54391r9bhymp\new54384r99ppag\new54384r9ac011\new54384r99vc66\new54384r99pnxl\new53680r987mrt\new54384r99ppp6\nwww.khabarovsk\new54384r979gll\new53680r987pkc\new53680r987pla\new53680r987pky\new53680r99px0r\new54384r9cd4g7\new53680r989df1\new54384r99vc4g\new54384r9bcf1x\nwww.ulan-ude\new54384r99prk4\new54291r9e8ehw1\nwww.surgut\new54384r9bcf9m\new54384r99prgb\new53680r990he1\new53680r990hfc\new53680r99py2e\new54384r9bcfkh\new53680r978fdb\new54384r99prnt\new53680r9a706g\nwww.dreamweaver\nnaberezhnye-chelny\new53680r99pz0p\new53680r99pz76\new53680r99pz3t\new53680r991hlk\new54384r979gtb\nred1\new54384r99nh73\new54384r99nh82\new54384r99nh8f\nwww.phpbb\nlistas2\new54384r9ca95v\ntest2012\new53680r992l0t\new54384r9b5x46\nhirano\nsimomura\new54384r99nhb5\new54384r99nhrr\nyamamura\new54384r99nkh8\new53680r992krx\new54384r99nkmx\nirifune\naoba\nfujimoto\new54384r99nkpb\nshimomura\nyoda01\new53680r97ent3\ntaira\nhasuda9230\nhanazono\nnaitoclinic\new54384r9bl341\nchuuou\new54384r9aprw5\nyamadaganka\new54384r9bl35z\ninagaki\new54384r9bl37l\nmiyata01\nishimoto\new54384r9aprw9\new54384r9arh24\new54384r99pvpx\nkiyose\new54384r9arh0e\ns4336\nmorinoki\new54384r9bl2dx\new54384r9aprzb\nkirin\new54384r9bl2pc\nyoshimi\nbandgplotter.printer\nnanohana\nkensei\new54384r9cc7f6\new54384r99v3d5\new54384r99v3fa\new54384r99v3mp\new54384r99pp77\nshinobu\nkishi\nkashima\nfukushima01\nsuzuran\nfbc\ngreenpark\nkumagai\nmachino\nishibashi\nmick\new54384r9cd2bt\new54384r99pr11\nsmtp1.net1\new54384r9cd2ht\new54384r99pr5h\new54384r99pt16\new54384r99pnfn\nwww.mw\new54384r99pnle\new54384r99pnlf\ns4335\nbambou\nwww.ge\new54384r99pnkv\new54384r99ppfz\new54384r99prmh\nwww.nf\new54384r9arf64\new54384r99pvkx\new54384r99pvva\new54384r99pvvk\nwebvip\new54384r99pvwt\new54384r99pvzl\new54384r99rm39\nnbdb\new54291r9rmzf4\ngruppo\nrsp\new54384r99rm56\new54384r99rm5y\ncndev\new54384r9arcze\new54384r9arfna\new54384r9argzy\new54384r9arfv5\nberlioz\ns4334\new54384r9argfx\new54384r9arfpz\nneocom\new54384r99z08t\new54384r9bkp7m\new54384r99z48z\new54384r99z0pd\nirfan\new53680r9a6xf7\new53680r9a6xg1\new54384r99ppv0\new53680r9a6xz5\na02\new53680r9b0ach\new53680r9b0ada\ngrenache\new54384r9bkn8a\new54384r99vb58\necrins\new54384r9bkp8a\new54384r99vc1t\new54384r99vc8d\na13\na14\norphee\new54384r9bknhc\new54384r99vah2\na18\nmotte\new54384r99vahe\na22\nsmetana\new54384r99vaz3\ndelos\new54384r99vawt\nv182\nvila\new54384r99vbrx\new54384r99vbtt\nrossini\new54384r99vbvz\nbirman\new54384r99vbxr\new54384r9bmbn7\new53680r9b68ln\new54384r9bmdy1\nnexus1\new54384r9bmdz4\nbabette\nrimbaud\new54384r9bmdxx\na20\new53680r9b806x\new54291r9rdfbr0\new54384r9bkn5e\ndaf\nber\new53853mjeapn2\new54384r99vbeg\new52325r9xz5w9\new54384r9arnh0\ns821\ncrumble\nir1\nnyco\nwillem\nmarocco\nr01\nr02\nardeche\new54384r9bnn0f\nsagarmatha\new54384r9bnn0x\new54384r9arnn6\new54384r9bt7c6\new53680r9b86vk\new54384r99z08f\ns4330\new54384r99xhzt\nadserver1\new54243r9nt1gd\new54384r9dd73l\nshopinvent\new54384r9ca8w5\new54291r9e8eff\new54384r9dd80m\new53680r85pndk\new54384r99prg0\new53680r93z807\ns601\new53680r93z80f\new54384r9dd6zp\npeo\new54384r99vat6\new54384r9bl3ay\nnovell\nerp1\new54384r9ca9lz\nigw\nlmail\new54384r99yzpv\new54384r98e60l\new54384r9atcg0\new54384r9cxly50\new53680r99z1mp\new52241r87235h\new54391r99nghf\nmssql03\new54384r9cxm340\nspm01\nsd04\new54384r9d4whn\new54391r99pw150\nsia2\new54384r9c9k5h\nbiotec\new54291r9h948g0\ns4325\nrss4\ns4120\new54384r99z1vz\nweb320\new54384r9bz7kw\new54384r99vbdw\new54384r99vbpt\new54384r9ac0dd\nweb334\nweb328\nweb324\ns4324\nweb323\nweb322\nweb321\new53680r9c68w2\new53680r9c68wd\new54384r9bkm7m\nbackuper\new54384r99vbrm\new54384r99ppvg\new53680r992kn3\new54384r9cd2l1\new54384r9ac0l3\new54384r9bkn8b\new54384r98m39n\new54384r9bkn9k\new54384r9ac0fn\new53680r992kla\new52241r8mmpaz\new54384r9bkp3a\new54384r99vb59\new53680r8l979b\nwww.qs\new54384r9bac3a\new54384r99vb8p\ns4321\nweb114\new54384r99vbye\new54384r9bzb61\new54384r9ac0r1\new54384r98gdml\n1985\ns4260\new53680r9be0ay0\nqa.contentlibrary\ns4319\new54384r9bzazv\new54384r9bknaf\nalsaher\nkeepyourprivacy\new54384r81gtrl\nhideip-sweden\nfish2\nfloppy\nwtnmodel5\new54384r9cd2l5\nzaq1234\nhideip-ru\new54384r9bknpl\nhideip-australia\new54384r9ca9e3\new54384r99vam8\nl2tp-tk\nl2tp-ru\ninternet1\nl2tp-sg\nl2tp-se\new54384r9ac0y3\new54384r9b5r1p\new54384r9b5w73\nl2tp-sp\nwww.teachers\nl2tp-fr\new54384r9848m9\new54384r99vbmh\nip-tk\nl2tp-ch\nip-ru\npreview-fsc\nip-sg\nip-se\nhideip-spain\new54384r99vawk\new53680r9c6wdl\new53680r9c6wex\new54384r99vbz5\new53680r9be2v20\new53680r9avg2c\new54384r82h6y8\nip-ch\nip-au\new53680r9ah595\new53680r9ah53n\nl2tp-au\new54384r9ca9dw\nhideip-ch\new54384r9cxmdg\new53680r94xpw6\new54384r99nkxt\new54384r9c9hmg\new54384r9ccldz\nhideip-russia\nhideip-turkey\nex54391r99txdr\new54384r9bmbrg\new54384r9b5x73\new54384r82k55z\new53680r9d1mbc\new53680r98rfgy0\nwww.opinie\nlists.h1.nl\new54384r9cxa24\new54384r82dtnd\nbpos-eas\new54384r9cxakz\new54384r9be4tz0\new54384r9cxl43\new54384r9cxl1a\new54384r9cxm43\new54384r9cxm1l\new54384r9cxlcy\new54384r9cxlka\new54384r9cxlr0\new54384r9cxlkp\new54384r9cxmda\new53680r9d5c45\new54384r9cxpev\new53680r99hlwg\new54384r85fp530\new54384r9bl2w9\nmadowtp\new54384r9bl2wb\new53680r97cz9p\norfeo\new54384r99ptbe\new54384r9bkp9e\new54384r9arnv9\new54291r9h948m\new54384r81ttfy\new54384r99v3dl\new54284r9g3w0t\nnportal\new54384r99v3n5\new54243r9hlp9g\new54384r9bl3vw0\new54384r99v3nb\ncomed\nsupport.test\new54384r83p17g\new54243r9hlp830\new54384r9b1xrh\new54384r99vben\new53680r87gddw\new54384r9bmby7\new54384r9clezv0\new54384r9c03dx\nvmc1\nbalrog\new53680r9aa9m5\new53680r9aa9mf\new53680r9aa9xl\new54384r9cc7fk\new53680r98gc97\new54291l1bgc17\new54384r9bl3az\new54384r97lmy2\new54384r97lmy7\new53680r98gcda\new53680r98gcea\new53680r98gcgx\new54384r9aa19z\nvmhost01\nvmhost02\new54384r9ac00n\new54243r9fdrf5\new54243r9fdrec\new54384r9bcgd8\new54243r9phccn0\new54384r9c04kz\new54243r9gd498\new54384r9cd572\new54243r9gd4az\new54384r9cd579\new53680r9aaadk\new54384r99ptbd\new53680r9axv6n\new54384r9dd802\new53680r9ah38a\new53680r9ah3c4\new53680r9c68th0\new53680r9ah5b9\new53680r9ah5fh\new53680r9ah5n0\new53680r9ah4yh\new53680r9ah4zk\new53680r9ack0l\new53680r9acgfx\new54384r96vt7p\new54384r97gwae0\new53680r98ltf6\new53680r98ltg5\new53680r98lth3\ns4311\new53680r98lth7\new53680r98ltkd\ntestcontent\new53680r9aebr5\new53680r9axxb1\new54391r99ngdm\new54384r9ccny4\new54384r99vcg0\new54384r96vt8b\new54384r98nefd\new54384r9bcf430\new54384r99vcf7\new54384r96vtbg\new54384r96vtar\nbsl\nreloaded\new54391r99ty13\new54384r96vtef\nwww.passport\new54384r96vtgn\new53680r9bd61b\ns4310\new54384r96vtt6\new53680r9be09x\new53680r9be0ad\new53680r9be0g9\new54384r98nga1\new53680r9be2v5\new53680r9be2wr\new53680r98rfh8\new53680r98rfhv\new54384r98ngb6\new53680r9ahkz0\new53680r9ahkve\new53680r9ahkvl\new54384r99prbn\new53680r9be7dp\new53680r9be7ev\new54384r9abzgd\new54384r9abzew\new53680r979t3t0\new52429r9vd40t\new54384r99pt9z\new54384r9arfdp\new54384r9ac0f6\new54384r9ac0g4\new54384r9abzmh\new54384r9ac0cp\new54384r9ac0dn\new54384r9ac0k0\new54384r9ac0l4\new54384r9ac0gn\new54384r9ac0n9\new53680r9ar66r\new54384r99ppcn\new54384r9ac0lp\new54384r9ac0nh\new54384r9ac0t9\new53680r9ca23f\new53680r87gdcn\new54384r9argc0\new54384r99vcn5\new54391r99txlr0\new53680r9amhxa\new53680r9amhww\new53680r99nl2l\new53680r99nl8z\new54384r9abzy4\new54384r9b5x4d\new54384r9b5x4e\new54384r9abzr7\new53680r9bk62c\new54384r9b5x5m\new54384r9b5x6h\new54384r9b5x6k\new53680r99nlc2\new53680r99nldc\new53680r99v228\new53680r99v238\new53680r99v253\new53680r99v255\new53680r99v23c\new53680r99v21z\nucs1\new53680r99v28h\new53680r99v28k\new53680r99v28v\new53680r99v28w\new53680r99v386\new53680r9cc7d6\nusdigitalws3\new53680r98xyxc\new53680r99py57\new53680r99py90\new53680r99py5g\new53680r99pz2y\new53680r99pz3r\new53680r99pz8x\new53680r99pyam\new53680r99pyca\new53680r99pyp6\new53680r99pzkp\ngrupo\new53680r99pzlh\new53680r99pyzf\new54391r9c6tlc\new54384r9cd4lh\new54384r9cd4kz\new54384r99vc10\new54384r86gryw\new52429r9vnera1\new54384r9cclcn\new54384r99prfx\new54384r9cd4ra\new53680r99pyen\new53680r9avg24\ns4306\new54291r9fevrn\nsimon2\new53680r9avg2y\new53680r80crra\new52768r82y5e3\new53680r9avn81\new52768r82y4y9\new54391r99txe4\new53680r9btdmh\ns4305\new54384r9cd4vp\niis2\new54284r9fd8fg\new54384r9bl3d1\new54284r9ehm2n\new53680r9bt94r\nas.im\new53680r9amhwd1\new54384r991mr90\new53680r992l0a0\n56bpos-eas\new53680r9bv0eb\nssl30\new53680r9axv6r\nphylab\new54384r9bakvh\new54384r9bz919\new53680r9bw2z2\new53680r979t3c\new53680r99pzaf\new54384r9ccnx7\ntndowtp\new53680r9bteb3\new53680r9bteba\new53680r9btecc\new54291r9fmtt0\nssl15\new54384r9cxa4k\new54384r9ca8r90\new53680r992kl00\new53680r9b7yhf\new54384r9apt1f\new53680r9daym1\new53680r9daym6\new54384r99nhwf0\new53680r9daylv\new54384r9clevh\new54384r9cleyb\new54384r99nkfb0\new54384r9apt4g\new53680r9cmp90\new54384r9apt3z\new53680r970lpb0\new54384r9bcggw\new53680r99nlrx0\new53680r99pykx\new54384r99pvhm\new54384r9c3wyk\new53680r98ltex\new54384r9ard08\new54384r9ca97p\new54243r9p0cvy\new53680r99pylx\new53680r9c68wk\new54243r9p0ct90\new53680r9btyzn\new54384r9848f8\new53680r82avlm\new54384r9848l3\new53680r9dme04\new54384r9ca8pg\new53680r9dmdym\new53680r9dmdyy\ns80\new54384r9c04kk0\new53680r99pzm4\new54384r87rxac\new54384r9cl1lt0\new54384r87rwzv\new53680r9ah52f\new54384r9bl2cw0\new53680r9ah53f\new53680r9ah56m\new54384r9bl2ka0\new54384r9bcf30\new54384r9cd2nc\new53680r9cxffr\new53680r9cxfhx\new54384r9b5wgn\new53680r9czak4\new54384r9cxm95\new53680r9ah4l0\new54384r9arf3l\new54291r9hlez8\new53680r9ah5ez\new54384r9arf4l\new54384r99rm5p\new54384r979gbk\new54384r9arf6k\new54384r979gbx\new54384r979gkv\new54384r9c2meg\new54384r98r75d\new54384r98r75v\new53680r82lalh\new54384r9cd4l0\new54384r96vtd20\new53680r83bzpy\new53680r9aebf60\new54384r9cd2eh1\new54384r9bch2a\new53680r83fbrm\new54391r99ng98\new53680r83rrk9\new54391r980c1h\new54384r9cd4z2\new53680r99pzng\new54384r9bzb48\new54384r9bzc29\new54384r9bzc37\new54384r99ppbv2\new53680r98ltk4\new53680r98ltl6\new54384r9c0497\new54384r9bzc5f\new52429r9tt12p\new54291r9rg5hm\neric8\new54384r9c4hkp\new54384r9c04h6\new54384r88xyyh\new54384r9c04cd\new54384r9abzw6\new54384r99vcl1\new52429r9vd40l\new52429r9vd40m\new54384r9ac0gb0\new54384r98nem3\new53680r98gcb70\new54384r9bzbbz\new54384r98nenl\new54384r9ac0kt0\nephoto\new53680r99pz3c0\new54243r9ne5rv\new54384r98nexb\new52325r9v1va9\new52325r9v1val\nwww.p202\np202\new53680r99px5w\new54384r9ca9bd\new54384r9be4r7\new54384r9848dx\new54384r9848fg\new54384r9848er\new54384r980c1x\new53680r99pza70\new54384r979gt6\new54384r9bcfgf\nwbsld8c0fx2j\new53680r99pyt1\new53680r93mf6f0\new54243r9ne5r9\new54384r9bzb81\new54384r89ywa8\new53680r99pz81\new54384r9bcfv6\nhuizhou\new54384r9a1766\new54384r9a174k\new54384r9a174m\new54384r9a174t\new54384r9a174z\new54384r9a175x\ndstore1\ndstore2\new54384r9a2304\new54384r9a235p\nshare2\new54384r9a17n9\new54243r9fdrgt1\new54384r9a23ry\new54384r9ca9de\new54384r9ca8t2\new54384r9areh10\new54243r9nng6k0\new54291r9r246b\nwbsldh5xkx4j\new54384r9cf5dp1\new54384r987pyw\new54384r9a566p\new53680r9akk8t\new54384r989ebw\new54384r990gmf\new54291r9ma0bm\new54384r9c04dp\nuatwww\new54384r9arhmm\new51fkya59899\new54384r96vt9p0\new54384r99vchf\new54384r991mvd\new54384r989wz3\new54384r9c04n2\new53680r9be08n\new54384r9c9k5y0\new54384r9atcg3\new54384r9ca8t3\new54384r993ne6\new54384r993nlf\new54384r9b08d6\new54384r9b08lt\new54384r9b11k7\new54384r9b09z7\nwebdrive\new54384r9b09zp\nnfs2\new54384r9b13gk\new54384r9b13gr\new54384r9a3yd4\new54384r9a3yk5\new54391r98rhnf0\new54243r9nng8c\new54384r9arf3w\new53680r9be2td\new54384r9b0a45\new53680r99hlx3\ns835\new54384r9a8n2k\new54384r9b5x67\new54384r9bknat\new54384r9be4p7\new53680r98rfgw\new54384r9be4mt\nvz107\new54384r98rhg5\new54384r9c9k51\new54384r9b1y23\new54384r9cxlat\new54384r9a9zyw\new54384r99vchp\nribbondalda\noxo4433\new54384r9c9k9p\new54384r9c0448\new54384r9c040m\new54384r9c041h\new54384r9c044y\new54384r9b1xn6\new54384r9b1xmf\new54384r9b1xv7\new54384r9b1xv9\new54384r9b1xtk\new53680r99pxwd\new54384r9c03db\new54384r9c03gl\new54384r9c03tl\new54384r96vtat\nscidata\new54243r9nz79x\new53680r987cw9\new54391r96zpbk\new54243r9gd4bg2\new54384r99pphd\new54384r9b5r03\new54384r9b5r09\new54384r9b5r37\new53680r87gdga\new53680r87gdgb\new53680r87gdfm\new53680r87gdfy\new54384r9b5w6v\new54384r9b5x4l\new54384r9b5x5l\new54384r9b5x4v\new54384r9b5x4z\new54384r9b5x7a\new54384r9b5x5y\new54384r9b5rzp\narchivemanager\new54384r9b7cbd\new54384r999k880\new54384r9arh2c\new53680r99pyyc\new53680r9arbhb\new54384r99vb3z1\new54384r99vc0b1\new53680r87gzlh\new54384r9848be\new54384r9ac0h7\new54391r99z0w8\new54384r9848el\new54384r99pt3f\new54384r9arnp5\new54384r99pt78\new52429r9wwnt7\new54384r9c2m2t\new54384r9c2m4d\new54384r9c2m5y\new54384r9c1rm2\new54384r9c2mdc\new54384r9c2lx6\new54384r9c2mkp\new53680r970ll8\new54384r99pt86\new53680r98rfgr0\new53680r970lgn\new54384r99vbhm\new53680r987pkh\new53680r987pkm\new52429r9ygkld\new53680r987plk\nlema\new54384r9bkn31\nwebdisk.forms\new54384r9arnx5\new54384r9ca9m5\new54384r9c3wna\new54384r99vavx0\new53680r970llv\new54384r9cd576\new54384r9a5683\new53680r970lpe\new53680r9avg2z0\new54384r9d6hld0\new54384r9c6ph4\new54384r99nk89\new54384r9cxala0\new53680r9b30gc\new54384r989ebv\new54384r98nemn\new54384r9c9hk1\new54384r9arf96\new54384r9c9htf\new54384r98nelz\new54384r9c9hwh\new54384r9c9hxc\new54384r9c9hwy\new54384r9c9hxx\new53680r9ah57k0\new54384r9arnr8\new53680r9cxfkp\naud\nbirt\nxtranet\ndoxa\nsansan\ncostss\nhirohiro\nstrelet\ntokyomonkeys\njintoku\ntousi\npartnershop\nshinfoo\nexecube\nerens\nroboinq\nmicrofix\neco7813\nartifact\nbersbar\nklient2\noodonya\ndpu\ngekisapo1307\nmorgmolmalmo\nyomoyama\nansonweb\nha1228\nbsuki702\ntest004\ntest006\ntest010\npluse01\ntest012\ntest016\ntest017\ntest018\nremediate\nakirag3\nuetenri\ngqrbm055\nsankaku\nzg5\nkyokushin2\nzebu\nwankoroid\nbni\nfotokuma\nsect\ngenco\neiesei\nsuneng\nnetanew2\ndownline2762\nbuilwing\ndatsumou\nmyamya\ntuhan\nsasatani\nrakuchin01\nincense\nno003\nodaatsushi\nkalla\nbirdcage\nnekote\n2hanjp\ngrafica02\nlapisdiva\nsalinger\nleathermall\ncrosswork\ngrafino\ntest013\n81q\n1tax\nryoyoss\nnihonkai\nodicgo\nalpharise\nglowsurf\ntsuyoshioka\nsaokichi\nhirokuni1\naojiru\ndotchimni\njstock\npaulfactory\ntuncay\nkoba\ntsubo1\nsin7021\nunseal\nkanrikyoku\ngoodway\nreshikku\npcnishiya\nwpwp\nxenapptest\nlivedata\nsmile38\ngradius2\ngradius3\nbiei\nrsu\nblueearth\ntokusanhin\ninc02\ndalimitr\nsmile201303\nusefulinfo\nromiromi\nchimeraworks\nmifaso\naddressbook\nant69tr\ncarong\ngaza21\nsuninjang13\ndw012384\ndusangzzang2\nminimarket7\nnhseaftr5422\nwowgusdn\nlaorange1\naxian993\nzegobs2\narcanej1\ngaza212\nkimzang13\nkimzang14\nmoorootr\nyaehu7\nnaiadlove\nbarocamping\nohryuken2\nseb3309\ndressupcartr\nssnongwon\nannzooco\nnosmoking95\ntinyaptr6195\ncromy69\nhsh2124\ndaebok3\njoliejong\nphji1230\nmedifun2\nauntbaby\naraonktr6801\nn1hstar\nkemr1436\nakari24141\njooo761\nvna\nclais\nninnin\nvengence\nlva\nwcache\ndeprep\nbethany\ntimetables\nlawpre\ndongsan501\nbsjbsj791\nabettetr7772\nworldnewspre\nsports7\ncalla6251\ntabletennispre\npiroco2\ncivilliberty\nchristianmusic\nkidexchangepre\nfrenchfoodpre\ncatholicismpre\njobsearchcanada\ncatspre\nretireplan\nislampre\naltmusicpre\nwichitapre\nsoapspre\nusmilitary\nbabyparentingpre\nemailpre\ntattoopre\nhomevideopre\nhartfordpre\ndying\nmacsupport\ngojapanpre\nchristianitypre\npaganwiccanpre\nprofootball\nworldfilmpre\ntorontopre\ndesktoppubpre\nspanishculture\nrockclimbing\ninvestingcanadapre\ncrosswordspre\nracerelations\nheartdiseasepre\ndentistrypre\nhoustonnwpre\ngosouthasia\nldspre\nwebsearchpre\ntoycollecting\nfrenchcaculture\nbudgettravelpre\npalmtopspre\ntucsonpre\nchristianteens\ngermanculture\nwaterskipre\nsouthparkpre\nminiatures\nbicycling\nworldsoccerpre\nintranetspre\nalcoholismpre\nhistory1900s\ninteriordecpre\ncollectstampspre\nbusinesstravel\npennybaycom\nparentingteenspre\natheismpre\naugustagapre\nmicrosoftsoftpre\nchicagowestpre\nunixpre\nvancouverpre\nmodelrailroadpre\nwomen3rdworld\njpkr4\nbobptr2967\nfortron\nsjjiyun\ngocycltr6047\ncross1\nwoojung1151\npapas5\nallergiespre\nimgarden365\nkudos5850\ncoordiplus\npuny10\ncrossg\nalbanypre\navidleeda1\nhgijung\nhairblow\ntprime\nkidswriting\ns1devsunny\nportlandmepre\nmng7772\nkwons2tr5012\nrazypooh\nmax8812\ns2pedu\nmanypanda1\nhongse891\nkwh79021\nkwh79022\ngi0sky\nanimationpre\nsstarhong1\nsstarhong3\nman8334\nlglg02051\nnowkandol1\nmchanman1\nvoguenewyork3\njfriend59tr8223\nmomomoguri\npuntoo\nhymnself\ns807\nwelpiatr7295\nworldpapertech\necopromise\nberry61231\nsnobier\ninaemedi\ndodamsoktr\nmallcorea\nlbs276tr3039\nmj1choco\nhifoods1\nkms0744\ndjh165tr9046\nsmarttr1853\namazine\nmijiwang\nchenyou\njoorok\nshinsm2001\nsnhk2001\nana0202\nad0212\nyjwone1\ncsgood\ntentoy\nmotorbank2\nsaltaquariumpre\nchromcell\ndirectdnp\ngodo197019\njeekeem\ngodo143722\nkizzz09\nohmyggod\nhitouchpen\nrkrn1965\ndecojetr2505\nhighones1\nhighones2\ncartooning\nideabook\nver4fix\nfrenchcaculturepre\npkartitr9472\ngdream2\ngaylifepre\nartsandcraftspre\nstepparenting\nvps3utdell2\nwitnessespre\nnursingpre\nenvironmentpre\nvolleyballpre\nwinepre\ninvestmentclub\ncareerplanning\nmostafa1\nprivateschool\njobsearchtech\nrosespre\nteenexchangepre\nbotanypre\nlasvegaspre\nmin233\nfinefc1\nfinefc3\nfortlauderdalepre\nkssks0509\nseefuture\ndrpojang\ntera1439\nchl8270\nkimdh234\njjfamily2\ndudtn815\npersonalcreditpre\niamleech\nsw83293\ndj76dgb1\noutdoorlook\nilovemommytr\nsaltaquarium\ndlgmlqocjswo1\nfamilymedicinepre\nspeeddog2\nwheeya88\nyoyokids1\ndecorativearts\nnpaper1\nvenus4197\nhairdays\ngratomo2\ngratomo3\nheal2013\ns4freeintsunny\njaguster2\nenamoopackagefix\nhomesenc\ndobero2\nmarketingt\npangicare\nfarmforyou2\nfarmforyou4\nchangwon81\nmgk0416\nbeatcool2\nhtmlpre\njutoyjoy\nfishingmetro\ngoeuropepre\nhumanrightspre\nhhyy7773\ngarfield1\ncabinlee\nallin11\nbeautyswan1\nssyoon1\nkks19911\naltmedicine\ncharlestonpre\ngocanadapre\ncompactiongamespre\nbirdspre\nnetboot\nphilosophypre\nquilting\ninteractfiction\ncandleandsoap\nprochoice\nravehousetechpre\nbuddhismpre\nhorrorfilmpre\nmenseroticapre\naltmedia\n7-12educators\nworldfilm\njavapre\nlamaisontr\nquincemore1\nmaktub0070\ns2frelease\nskanskan42\npowerboat\ncgogol2\necard1tr\nbomuljido2\nkonimi1\nmasami04\nxmlpre\ndlehddls11222\nroleplaygames\ndecorativeartspre\neugenepre\ngoorlando\nmacsupportpre\ngogreecepre\nkidsnetgamespre\nvotechpre\ninvestmentclubpre\nsanantoniopre\ndcpre\nlatinoculturepre\npublishingpre\ngoireland\nmdsuburbspre\nmountainbikepre\namateurphotopre\nwomenserotica\nheatwave\nchineseculture\nactivetravel\njapaneseculturepre\nbluespre\naltreligionpre\ncompreviews\nasianamculture\ncrochetpre\nstartrekpre\nknitting\nweatherpre\nindianculture\ncolumbiascpre\naltreligion\nophthalmologypre\nflyfishingpre\npanicdisorder\nusgovinfopre\nussoccer\ngosanfran\ncompnetworkingpre\nduluthpre\nbackandneckpre\ntallahasseepre\nactionfigurespre\nmilwaukeepre\nproicehockey\ninternetgamespre\nneurosciencepre\nyabookspre\nmovieboxoffice\ns739\nmemcached2\nnapoleon\nhollywoodmoviepre\ninternal1\nprochoicepre\nlesbianerotica\nravehousetech\nbk14\npalmtops\nbbqpre\ns736\nbk13\nbroadcastnews\ndiabetespre\nrw4\nbk12\nchattingpre\ns734\nbk11\ns733\ngoirelandpre\ns731\narchitecturepre\ndepressionpre\namateurerotica\ns728\ns727\ns726\nusnewspaperspre\nfantasyleagues\ngogreece\ns725\nguitarpre\nauthorspre\nmemcached1\ngogermany\nlegalindustrypre\nwebworst\nscottishculturepre\ntvcomedypre\ngonycpre\ns719\ns718\nproskatepre\necotourism\ntaimurasghar\nmena55\nthyroid\nbackandneck\nkidsciencepre\ns715\nquiltingpre\ngotexaspre\n7331\ns713\ns712\npersonalwebpre\nclassictvpre\ngoodnews\nallmychildrenpre\nkyyong\nkgyg2\nsoundmtr5992\nskinhappy\nbase05\nbase04\nwindowspre\njewelrymakingpre\nwomenshealthpre\npascalpre\nsatellitepre\nkurosawa\ngeneralhospital\ncompositepre\neatingdisorderspre\nspacepre\nskitrips\ngeologypre\nokx\npuchillena\ngotexas\nwildflower\ncarinella\ndisabilities\nhiro3\nsimpsonspre\nlesbianeroticapre\nonelifetolive\nicandy\nasianamculturepre\ncountrymusicpre\npdpt\nve1\nairtravelpre\nfile02\ndancemusicpre\nwww.pdpt\nwww.ejournal\nwww.faperta\ncartooningpre\nmailing._domainkey.sunnynews\nwww.odp\npreview.rcw\ndev.rcw\nqa.rcw\nburlingtoniapre\ndev.build\nsunnynews\nmailing._domainkey.info\npalmspringspre\npaintballpre\nlesbianlife\ntechwritingpre\nsubstanceabuse\ncelebrityerotic\nmacospre\nkidscience\nkidspenpals\ndesktopvideopre\nstlouispre\ndenverpre\npaintingpre\nprogressiverock\ninfertility\ncontestspre\nglobalbusinesspre\nfb90\nfb120\nworldnewspaperspre\nfb117\nwatermark\naipre\nburlingtonia\ncdn8\nresourcespace\nsarasotapre\nfb99\ngoaustraliapre\nkoonja9194\nbaroma19\nbaroma24\nskinleader\nmigosa\nkim33003tr\njihomansan\ngoodtime243\ngorenaratr\njeincool\nblueseaj\nmin2m2\nenjoymall\nsammishin\niyyob\nistmalltr\nfinelbs\ncoffeeallday\nmaofamily\nokgood\nmarui8443\ns4intkthkira\ncasiobank\nosesunkr2\nskyman2002\nftsystar\noton22\nlds2007\nbankline\noneorzero9\nwonhyo81\nmedicatr9575\nahch37711\nrexsolbt\nacademy-010\nacademy-011\ngorussia\nfb92\ns634\nworldnewspapers\nchineseculturepre\npregnancypre\ncollectpins\nluga\nballetdance\nbakingpre\nnashvillepre\nalmetevsk\nnovomoskovsk\npirateradiopre\notradnoe\nhuntingpre\nwomensbballpre\ns627\nweaving\nspanishpre\nmultiplespre\nburlingtonvt\nconspiraciespre\ncollectstamps\ngorussiapre\nherbsforhealthpre\nenergyindustry\npuppylinux\ntipster\ns619\nbusinessmajorspre\nwjddladn29871\natheism\nspares\nfishingpre\nxfilespre\ngayerotica\ndetroitpre\nhomerecordingpre\npardus\nwestvillage\nwaterski\nicdiijesus\nyaehu71\neh1025\nkms1992\niloveimc\nacademy-020\ngreen119\nunjm6212\npuppia\nvictorssi1\nacademy-027\nlovelyel2\nacademy-029\ndpzhthf12\nprettyaha\ncakefactory1\njb9709\ngplus7400\nyufron\nheellary\nagrinagrine\nrhrlgus1012\nthis0718\nraffles1\nfreshaquariumpre\ngcsd33009ptn\nblueprint0\nlovepipi\nyongchil2\nabbinewyork\npuppyp\nheeyoung01262\nmr01000\nwonjin1\nch11137\ngpal10141\nkimex\nentratr7837\nzibig8115\nfs1190\nclubhada2\nbhinfo\nbaduncle\ndaon12tr5708\nkoobart\nqwehk7131\nkimchreom\nnthmax\nsoonung11\nsonjh253\nhptc21\nmyhappy10921\ngodotechjsseo\ncandlehouse\nnascarpre\nsoo111\nsoo112\nxartcard\nds497910\npushnpull1\nwhtjdfo0216\nlkp1961\nunifittr9743\nclonezilla\ngoaustralia\ns611\nnetculture\nhronline\ntravelwithkidspre\nbicyclingpre\ntelecomindustrypre\npanicdisorderpre\npittsburghpre\nbeekeepingpre\ngohawaiipre\naccountingpre\nenglishculture\nhomecookingpre\nballetdancepre\nparentingteens\nhomeelectronicpre\nrealestatepre\nasthmapre\nsouthernfood\neconomicspre\npoetrypre\nautoracingpre\nibm03.lsdf\nlibertarianism\nnonfictionpre\nipe\npoliticalhumorpre\nclevelandpre\nmarketingpre\nfortmyerspre\nnutritionpre\nfreebiespre\nspaspre\nweavingpre\nfolkmusicpre\nwww.pse\ndallaspre\ngoeasteurope\nautoconfig.donate\nautodiscover.donate\nwebdisk.donate\nburlingtonvtpre\ncompreviewspre\nwesternmapre\nmultiples\ncasinogamblingpre\ngohawaii\nworcesterpre\nchicagonorth\ngayeroticapre\nwww.archiv\nlancasterpre\nquitsmokingpre\nclassicalmusic\nafroamculture\nuspoliticspre\ninternetgames\nlocalftp\nmanagementpre\nmilf\nroleplaygamespre\nlupuspre\njournalspre\nbabylon5pre\nuspolitics\nlowfatcooking\nbasketrypre\nsickjokes\nconspiracies\ncatloverspre\nportlandor\ndogspre\nmusicvideopre\nnetconferencepre\nportlandme\nromancefiction\nbuffalopre\ngovegaspre\nwww.travelinfo\ntravelinfo\nwomenshistorypre\ns408\nbeadworkpre\ncrosswords\ninvestingcanada\nbodybuildingpre\nstarfire\nrcvehiclespre\ns4361\nrenotahoe\nnetculturepre\nos2pre\netransport\nprotestantism\ndivorcesupportpre\nchesspre\nmontgomerypre\nmailmag\nblog-test\ns4359\ns4271\ncandleandsoappre\nenglishlitpre\nrowingpre\narcticculture\nbritishtv\ndeafnesspre\nonlineshoppingpre\ngolapre\nneworleanspre\nmusicianspre\ncoptv\nsandiegopre\npediatricspre\n1web\nsailingpre\nteenadvicepre\nchronicfatigue\ns260\nbtc-dev\ncollegegradjobs\nhomeparentspre\nrede\ns4341\nwww.ipad\nprotestantismpre\naddpre\nbigdata\nhorseracingpre\nhumorpre\ns4331\nspringfieldilpre\nsewing\nkeyan\ninteriordec\ns4329\nbowlingpre\nbeadwork\n244\nhouston3\nhouston2\ngoitalypre\n232\nslave3\nslave5\nslave6\ncentrum\nbdsmpre\ngeneralhospitalpre\nvintagecarspre\nadmin.beta\ntalkshowspre\npowerboatpre\nyabooks\nlvs02\nportlandorpre\nmars1\nsurfingpre\nsbinformation\nnorthbeach\ngonewengland\n4wheeldrive\ns4262\nbiologypre\ns4314\ncompsimgamespre\nkidscollectingpre\nenergyindustrypre\nhomeschoolingpre\ntoycollectingpre\nartistexchangepre\ncomicbookspre\ns4309\nrunningpre\ngocaribbeanpre\ninventors\nbusinessmajors\nchinesefoodpre\nmemcached\nseniorliving\ngoswitzerland\ncollectdolls\nwindowsnt\ns4304\nwalkingpre\nremotemail\nwww.epiphany\nseniorhealthpre\nwww04\nnewagepre\nadoptionpre\ncouponingpre\nphoenixpre\ns4301\nnorthernnjpre\ngradadmissions\nchildparentingpre\ncruises\nslike\nwichita\nisraeliculturepre\nvisualbasicpre\ncollectdollspre\nspecialchildren\ns4320\nsantabarbarapre\ntelecomindustry\npurchasingpre\ngardeningpre\nmst3kpre\nsacramentopre\nrichard5\ncoloradospringpre\nspelletjes\nmidimusic\narchaeologypre\nagriculturepre\nclassicalmusicpre\nracerelationspre\ntelecommuting\ns4255\ngermanpre\ngosouthamericapre\ns4269\nskapre\nbofa\nmenserotica\nwisuda\nforestrypre\nlore\nwomensgolfpre\nbrighton\nheartdisease\ngoorlandopre\nwww.mma\ngoukpre\ns4254\ngocanada\nqa710proplus3\nkidsastronomypre\ngirlscouts\nchristianhumorpre\nfamilyinternet\ns4264\nhealingpre\ndistancelearn\nchicagowest\ncocktailspre\nteenexchange\nusparkspre\ntennispre\ns4261\ncatlovers\ns4259\nchildparenting\ngradadmissionspre\nlacrossepre\nchinesefood\nwyxy\ngw02\nhonolulupre\nitalianculture\necommercepre\nwomenseroticapre\nfitzgerald\ncanadanews\ndetroitsuburbspre\nurbanlegendspre\nport80\nthemeparkspre\ncraftsforkidspre\ncardgamespre\nspringfieldmopre\nairtravel\ncollectminerals\ns4251\ns4249\narttechpre\nbusinesstravelpre\nkansascitypre\nproicehockeypre\ngoitaly\ntampapre\nsewingpre\ncanadaonline\nfrugallivingpre\ndaycarepre\njazzpre\ns4245\nhamptonroadspre\nhealthcarepre\nwww.ets\ns4250\ngeographypre\ngogermanypre\nprinz\ngaylesissues\nprofootballpre\ns4241\ndetroitsuburbs\ns4239\nhistorymedren\namateurphoto\ns4238\nsantacruzpre\ncouponing\nsportscardspre\ngenealogypre\nsportslegendspre\nirvingpre\nsingleparents\nspringfieldil\nwriterexchange\ns4234\nbowlinggreen\ninventorspre\ns4233\nqa.portal\ntrackandfieldpre\nclassicfilmpre\nstarfish\nenglishculturepre\ncolbasketballpre\nspringfieldmo\nhomeworkhelppre\ns4231\ndistancelearnpre\nphotoweb\ns4229\nchemengineerpre\nmicrosoftsoft\npharmacologypre\ncollegelifepre\nlandscapingpre\nbackpacking\nweddingspre\ngraphicssoftpre\nireport\ngosouthamerica\nheavymetalpre\nhype\nperipherals\ncollectbookspre\ndatingpre\nmev\nusmilitarypre\ninternetradiopre\nradiopre\ntensyoku\ncomicbooks\nspyware\nhistorymedrenpre\nmentalhealthpre\nns1b\ngonyc\ndc01\nmarriagepre\nhomecooking\nusnewspre\nfantasytvpre\nspanishculturepre\njewelrymaking\nvgstrategies\nussoccerpre\nsubstanceabusepre\nufospre\nfantasypre\nmcguide1\nmcguide2\nmcguide3\nceoblog\ntrl\nmcguide4\nseniorhealth\ngosouthasiapre\nwomensgolf\npersonalweb\nprm1\nmartialartspre\ninternetradio\nrodeopre\norangecountypre\naustinpre\ngreenvillepre\nhumanresourcespre\nkidswritingpre\nminiaturespre\nsingleparentspre\nseniorlivingpre\ngocoloradopre\nfotogaleri\nenglishlit\nbuddhism\ncolumbusohpre\namericanhistorypre\nftpacc1\nftpacc2\nreenactment\ns4244\ncolumbiasc\ncricketpre\neastvillagepre\nvpn-gw\nneedlepoint\nbackpackingpre\neastvillage\nnetsecuritypre\nonelifetolivepre\ngymnasticspre\nclassicfilm\ntelecommutingpre\ngermanculturepre\nmexicanfoodpre\nsaltfishingpre\nholocaustpre\nwriterexchangepre\ncraftsforkids\nedmontonpre\nroundup\ns4209\nbusycooks\nmobilepre\nkvm10\nkvm11\nkvm13\nkvm16\ncivillibertypre\nancienthistory\npersonalcredit\nsportsmedicinepre\nprowrestlepre\nk10\nfedo\ns4204\nexoticpetspre\nantiviruspre\nnetconference\ns4203\nscreenwriting\nbritishtheatre\nbarbiedolls\nusnewspapers\nchemengineer\nkidscollecting\nprogressiverockpre\nartforkidspre\nprodutos\ngovegas\nprowrestle\nstepparentingpre\nwomensbball\nfatherhoodpre\njapaneseculture\ns4201\nkidsastronomy\nmidimusicpre\ncareerplanningpre\nafroamculturepre\npirateradio\nquotationspre\nhomerepair\nusparks\ngraphicssoft\nisraeliculture\ncollegeappspre\nfortlauderdale\nsomapre\ns4187\nhollywoodpre\npfsense\nbowlinggreenpre\nfrenchculturepre\naltmusic\nwestvillagepre\ncollectpinspre\ns4185\ncampingpre\ncelebrityeroticpre\ns4184\necologypre\ns4240\nsv59\ncpluspre\nharlempre\nscreenwritingpre\nhollywoodmovie\nanesthesiologypre\nsurgerypre\nfrenchculture\ns4182\nkidsnetgames\nsocialworkpre\nsv65\nsv64\narcticculturepre\ndaysofourlives\nprolifepre\ns4181\nsv58\nsv57\nsv56\nlongislandpre\ns4179\nhorsespre\ncanoepre\nhistory1900spre\n4wheeldrivepre\ngofrance\nmachardware\nparanormalpre\nurbanlegends\nexercisepre\nwebdesignpre\njavascriptpre\njudaismpre\nsv28\ntvschedulespre\nthemeparks\naugustaga\nincestabusepre\ndivorcesupport\ncollegelife\nsv21\nsouthernfoodpre\namateureroticapre\ngosanfranpre\nchicagonorthpre\nbeatlespre\ncatholicism\ns4174\ncincinnatipre\ntalkshows\njobsearchtechpre\naltmediapre\nneedlepointpre\ncostumejewels\ns4171\ncertificationpre\ncostumejewelspre\ns4169\nmbk\np9\nbarbiedollspre\njacksonvillepre\nteenadvice\ndataroom\ncruisespre\ncenter2\nspokanepre\nwww.newdesign\nindustrialmusic\ntvschedules\nceramicspre\narthritispre\ns4164\nrcvehicles\ngojapan\ncoloradospring\ntoledopre\nbismarckpre\nfreelancewrite\nwebworstpre\nmathpre\nvgstrategiespre\ns4161\nboardgamespre\nk-6educators\nwww.freedownload\nsharewarepre\ngomiami\nbboy\nvegetarianpre\ncheesepre\nhoustonpre\nbaking\nprobasketballpre\njapanesepre\ngocaribbean\nbandbpre\nwebdisk.affiliate\nincestabuse\nbasketry\nactionfigures\natlantapre\ninteractfictionpre\nitalianculturepre\nrockclimbingpre\nmarktwainpre\nbirdingpre\ntreasurehuntpre\nbostonsouth\nautomotivepre\ngofrancepre\ns4151\ns4149\nkidexchange\nmodelrailroad\nbirding\nlatinoculture\nsexualitypre\nhans2\ns4145\nwww.senator\ns4144\ntracking2\ntyche\nferonia\nwww.chopin\n05\n04\ns4141\ns4139\nraporty\nappcenter\ns1319\ngoeasteuropepre\nbronxpre\nlowfatcookingpre\nfictionpre\nspecialchildrenpre\nanimalrightspre\njudaism\ngaylife\nknittingpre\nchristianteenspre\nfreelancewritepre\nchronicfatiguepre\nreenactmentpre\nhamptonroads\nartistexchange\ns4131\ns4129\npoliticalhumor\ninfertilitypre\ns92\nweightlosspre\nmovieboxofficepre\ngomiamipre\ngocolorado\nastrologypre\ngaylesissuespre\nbudgettravel\nwomen3rdworldpre\npaganwiccan\nwoodworkingpre\ngameshowspre\nitalianfoodpre\ns4124\nlouisvillepre\nhomeelectronic\ndesktoppub\nbusycookspre\ngonewenglandpre\nentrepreneurspre\nsleepdisorderspre\nsouthbendpre\ncollegeapps\nannapolispre\nbabyparenting\ngeneticspre\nindustrialmusicpre\nhistory1800spre\nlibrarianspre\nsoftballpre\nsbinformationpre\nsickjokespre\nfantasytv\ndeafness\nfinanceservicespre\nwebdisk.myspace\nautodiscover.myspace\nautoconfig.myspace\nnorthbeachpre\nbostonsouthpre\nusgovinfo\ns4111\nancienthistorypre\nkrasnoyarsk6\ns4109\nworldmusicpre\nprivateschoolpre\namateurwrestlepre\noptika\nshareware\nsportsgambling\ngolfpre\nstockspre\n80music\ns1230\nclassictv\ndossier\nlabeltape\nbaisisi\nipia119\ncho01233\nrumebag\nfourmis841\nsunilover1\nnarabio\ns4224\nmagicpre\nrussianculture\nallday\nlaflo\nlecjohn\ncrow778\nabcbike\nhades10\ncap1460\npriel0071\nlegalindustry\nhometime\nsynccitykr\nisstore\nhmsdb1\ndugni00\nbunnysugar\npuredm\niris121\niris122\niris123\nmhrich\nwhitehotae1\nbiznoble\ncho01453\ncho01455\nrimelite2\nindankorea1\ndenis1110\nparhae\nenskorea\ngoswitzerlandpre\nsiruwon\nbk5389\nlance1998\nmiiino\ncoco515\nkensert2\nogi0418\ninvisual001ptn\nkwp\niwebple\ns4intextacy\nnikstyle3\nnikstyle4\nfineway\njss33333\nsmarket2\ncromy691\nalliums\ndoradoel\ncompsimgames\nkkamu\ndarphin801\nkatusa9507\nevan87\nspad11\nandynashley\nssing71\nlsd1982\nseomuho\ncherrybox\nmagictonertr\nundermalltr\ntyta5000\nelle82531\nprobasketball\nyhm19991\nyhm19992\nallstory\nspplus1\ntlsgur755\nwolfkickbox\nlogostaff\nmcubei1\nmcubei2\nsr656310\nsmcnftr\nvoyage71\nhaustyletr\nmegasnc1\nzkdhtm65083\nvelohouse\nlee8dofnb1\nj201331\nlcs2\nbarishoptr\nfrenchpre\nwoongnyu823\njh209700\nduoback2\nckh00224\nduru1004\nphji12301\nbipolarpre\ndiphoad\nmiinkr\ndyingpre\ndelete1984\naraon6\naraon7\nddays0404\nrecycletown3tr3178\nnewshinsa\njdc132003\ns3intb\nkn1905\ns3intp\nbournemouth7\ns3intw\nwelavkr\ncollectmineralspre\nkindjay1\nsamjungshoptr\nm89718971\njwcjyh1\nhwangss771\nsem06052\nbloody127\nbo2848\nassinaturas\nalgovital\nhoneymoonspre\nsurgery7\nsurgery8\nautomobilespre\njamesf9h1\nasylum781\nbisang3\nbisang4\nsoji25\nrock4utr6807\ndream3821\ndream3822\ndream3824\nipaybmhstar\nmyaqua1\njinee4786\ninfedo1\nink8do2\nimshyeon3\nh93063\nwonjin91\nkwonstesets\nmtmkorea\ns2shop\nicefeel\nluxsketch1\ninfeel4\nqort0107\ncoqls1004\naryunyewon\nseokjoop\nmikak1\nofficeinside\nmssi85801\nmarkman\nlsh178\nz007007\nsulem12\njw2389\nnaranlm\nkyungseo\nlpcc2012\ndjkim1\ninduk11-001\ninduk11-002\ninduk11-003\ninduk11-004\ninduk11-005\ninduk11-006\ninduk11-007\ninduk11-008\ninduk11-009\ninduk11-011\ninduk11-012\ninduk11-013\ninduk11-014\ninduk11-015\ninduk11-016\ninduk11-017\ninduk11-018\ninduk11-019\ninduk11-021\ninduk11-022\nbritishtvpre\ndongsajung\ninduk11-025\ninduk11-026\ninduk11-027\ninduk11-028\ninduk11-030\ninduk11-031\ninduk11-032\ninduk11-033\ninduk11-034\ninduk11-035\ninduk11-036\ninduk11-037\ninduk11-038\ninduk11-039\ninduk11-041\ninduk11-042\ninduk11-043\ninduk11-044\ninduk11-045\ntojongage2\ns2skin\nmutualfundspre\nsg2\ndevgodobill\nbeadsborntr\nstringpage\njiincnt\nohandee1\nnasungin3\nnasungin4\neunsun0504\noklee9687\nkis77jjj1\nbadaone1\nsoostore\neudirect2\neudirect3\neudirect5\nlatti\nlauricidin\ncrafthouse1\nmedall12121\npm21001\nhazel101\nwkqldus\ns2patch\nkbldmk1\nduddkek009\nsandol77\nhikaru1616\nbearbird1\nwsfeel\npbmarket\nhaeun95953\nbilliardspool\nhanjin500\nigosancokr3\nigosancokr4\nigosancokr5\npusiul\nkorezontr\ndawon6376\ncromyoung11\ncromyoung12\nnohmk741\nnohmk744\ns2fsrelease\nappletrees\ntoytopdome\nminsokmalltr\njy05071\nksy4065\niamjangme\neint5013\nnaturenbio1\nsojium\ngooddayskt\ndhdsifl\nmeatpow\napples1\nyawarano1\ntakeuns\nhaemosoo\nskfkrhfem\nsnskin\nmorenvy009ptn\neun0107\njhy6065\nd2k54677\nhyoreen1\nmir001\nphill012\n3680sj\nslckorea\nen2free81\nplusjean\nmediheals\nbeerpre\nhermin1004\nvldzmenddl\njobsearchpre\nfirstwood\nnari522\ncatletter\nmarioztr9728\nmmisuk1\nmmisuk2\nmmisuk3\ndlaaldo201\nddingle3\nmikimh\ndesign114\nwishpot88\nboxking\nmjcafe\ngonsen721\ninnerweb2\nlassiette\ndelphipre\ninvisual003ptn\nalicenart2\nalicenart3\nalicenart4\nalicenart5\nalicenart6\nalicenart7\nalicenart8\nalicenart9\nanytoker77\nazm3224\ndogsound\nneukkim\nad4444\nqlxmftiq1\nsleepdisorders\ncoptvpre\njobsearchcanadapre\ncolumbusoh\nscottishculture\ngiraffe\njjh\nretireplanpre\nwww.spc\n7-12educatorspre\ndomaindnszones.spc.comp\nsamstag\nskitripspre\nhistory1700s\ns4221\nforestdnszones.spc.comp\nqlxmftiq2\nqlxmftiq3\njjung1121\nmir276\nkmall\nmjassa\ncollectbooks\nmadmoon1\nkman4045\nokkill\niroomceo\nhwangtojung1\nhwangtojung2\nfissler2011\nbk9846061\nnaneca1\ndhfandb\nhphone3\nhphone4\njopersie15\nhajunbb3291\nscubapre\nwebclipart\ns4354\nallmychildren\nnovocherkassk\nmp3403\nhikosen\njijigo123\nqnaqna\nsjkfree\niceapple\nmir438\nnokchawon\nsd00281\nbluesis2\ncsmaru\nchlgks771\nchlgks772\npcrainz\nynhkm84\nbeautypre\nekdnjs2002133\njirisanak\nberry66001\nberry66002\neumban\ndaejinmat2\ncompense\nthegull7\nhbcommtr6900\noktopcoffee\nmjceo2\narrmani\ndiamanteun\na082010\nmai38317\njijeong\njhsign\nsooj8375271\nlongevity1\nescrowtest\njuellove\nfree2fly1\nfree2fly2\nfree2fly3\nokganji\neve1004\ndivehq\nelight10141\ncaraudiodc\nsh40261\nkimsony03192\ngolfdctr\nqvely8239\ninaba20021\npaulandj\ncockkhn\nyoonjooyul\nl0uis81\nseasun1004\nplscompany1\njp5-rm00000\ncompactiongames\nindianculturepre\nfamilyinternetpre\ndltpwls3621\njvibe\nall4batr2866\nxhprof\nadsonlinepre\ns4219\ncrossstitchpre\ncardgames\nwebdisk.a\nvintagecars\nvotech\ncgmedia2\nhowon17671\nmmagpie2\nmultials\nnstory\nysj2930\nnuchi2\nsol8282\nlinuxhosting51-51\ntubularr\nozkimjo\nhdpn1\ns2pdevp\nsmartnuts\nrkddlfo11\nrebois\nhorrorfilm\nwww.res\ncyberarts1\nddalgi5\nddalgi6\ntony70\njikyjeon28\nddalgee\noitalia3\nactivetravelpre\nyahocamping\nherostock\nlkjk551\nsejin77071\nkimwoo76\njejusambo\nkmkm9\nnadaum\npluseksm\nmimi76\ngotooutdoor\ncollegefootballpre\nuckorea\nnuenara2\ncharmhtr6375\nzaltabike2\nhocorp\nnabut2\ndaidanv\nsubsubpark\nnolboo1\nconstructionpre\njutty\ntextmove\nblackblanc\nulppang1\npbmaul\ntshot12\njmoore\ntttestt\nvangquish\nmobilekr1\nvbsoma8\nvbsoma9\nzeropack\nrookie0907\nlionyoon\nnewbankda\nlovetkt1\nurbook\n0ms\nledok\nenindi193\ncarm1004\nsiyeon1234\nluxbabara\nmomoiatr3079\nsarrah233\nyu04042\nescapolo\nenindi195\nairzol\nlexingtonpre\ncostcatr0911\nfreeguyyck1\necotourismpre\nmichabella1\ndream6644\nadel751\nmind33\ns4devb\njomakorea1\npgl10045\ns4devp\nfgmall1\ns2pdevmcpark\ndkrlehd\nviazoe\nsajubaksa9\nsomani\nwoorimf881\nhairim77\nkimwood2\nmax88121\nmax88122\nenindi209\nsollae\ncf5869\nenamoopackage\ns086428\nhans9494\nlooz781\nlhw01033\nbada66541\nmjpark872\nkohwasop\ndsbkoreatr\ndanmoojy1\ngojack6062\nkwak73kb1\nautonomon1\nlcs15544\nlucas2005\nqwpp123\nkokopening1\nzzimkjh1\nclickoff1\nalekkim\ncutesoli\ndekung1\nk7251203\njjakhs\njw5361\ngaongift\ntea30402\nguk680404\ntoyfun2\njangan4934\nbmbob91\ndisabilitiespre\nkoaid\nwoodrotr8451\ngirlscoutspre\nqwe912-009\nqwe912-011\nenindi219\nmorenvy019ptn\nistory1\nleed201\nhyuninter\nhypermed\nstishotr4379\nmahanpear\ndjmtb1\ntrianni6\ntrianni8\nrosa5042\nqwe912-020\nlhowook\nsay10111\nandrew71\njwy53601\nzeropia3\nzeropia5\nkbncomputer-020\nsjaqua165\ndracula851\ndracula852\nlabnshtr1375\ntrensetter\nhs301301\nmarom10\nmarom12\nmarom13\nmarom14\nmarom15\nmarom16\nmarom17\nmarom18\nmarom20\nmarom21\nmarom22\nkm78020\nsmj9827\nmarom29\ntbalance\ndamaflower\ncbtk10041\nwhxogml\ndimpleskorea\nknots100\njungbrave\njjugly2\ns4freeintkhs\nooinjaoo\ntnrud2006\ntnrud2008\ngaonfurn\narlsatang\nlovetaiwan2\nfiretornado\nwiniworks1\nwiniworks2\naljjaman23\nduatkdgns\nkkddd791\nsong41\norganza111\ntoxshotr9837\nfashionpre\nkentanos\ninkcasting1\nmineta\nlove3cmtr\nhongikav\nsjkukuri1\nitspresent1\ndesigngj\naileen2006\nkogal\njbsim2000\njja09girl\nlepas\nheo2000\nchristianmusicpre\nkheo77\ntscoffee\npartycook1\ngmj09034\ncreatitr4412\ncanuslim\ndom12346\ntakuteru\nclassicrockpre\ncolbasketball\nbenettong\nredmir\ndhdusdk\nieciecieciec\nlionyoon2\noutdoorsman\nyhcompany\ngadmin11\njeju824513\nxc4284\njeju824516\noteem011\nbestgarden\nsyung2kko3\nkbs0006\nicd900tr6382\ncancerpre\ngraphicdesignpre\ncrimepre\nonlinework\nhomerepairpre\nadobe-serialsdb\ncanadaonlinepre\ngameshows\nchemistrypre\nlinuxpre\nfinanceservices\nanas123\nwilkesbarrepre\ndrawsketch\nwargamespre\namateurwrestle\nstare\nbroadcastnewspre\ntechwriting\nspecialedpre\nnowe\nns1.m\ntravelwithkids\nns2.m\nwoodworking\nwww.deporte\naolpre\naltmedicinepre\nk-6educatorspre\nrediffmail\nphiladelphiapre\nfreshaquarium\nromancefictionpre\nnonprofitpre\nchristianhumor\nsportsgamblingpre\ntvcomedy\nbaltimorepre\ncomunitate\nseattlepre\naviationpre\n80musicpre\nwebclipartpre\nmms3\ninsurancepre\nherbsforhealth\nwindowsntpre\nv29\ncapecodpre\nbritishtheatrepre\nstarwarspre\nsmtpc\ntedx\nlibertarianismpre\nfolkartpre\nlesbianlifepre\ndesktopvideo\ncanadanewspre\nhomeparents\nhistory1700spre\nhoustonnw\nmachardwarepre\nhistory1800s\ngoeurope\nperlpre\nmdsuburbs\ncomputerspre\nartforkids\nsaltfishing\neslpre\nscellius\nfantasyleaguespre\niinet\ns1219\nbilliardspoolpre\ndrawsketchpre\ndinkes\nsignet\nbubo\ndaysofourlivespre\nphysicspre\naccess5\naccess4\ns4214\nsportslegends\nfunclub\ncollegegradjobspre\nbwnews\ncompnetworking\nfarmingpre\ntopsales\nkidspenpalspre\nrussianculturepre\nthyroidpre\nmikan\nrenotahoepre\nwesternma\nwestpalmbeachpre\nphysio\nmicros2\nperipheralspre\ngwsmtp09\nwww.uganda\napai\n221\nbesnik\npriority\nfarm1\nwww.arthur\nbaileys\nnazanin\ntaran\nsb2\ndreamsoft\nsiatkowka\nnakaf982\npisa\nmestre\nslarti\ndlw93-2\ndlw7-2\ndlw7-1\ndlw187-2\ndlw187-1\ndlw66-2\ndlw239-2\ndlw239-1\ndlw93-1\nvpn214\ndlw225-2\nvpn193\ndlw225-1\nemusic\ndlw131-2\ndlw131-1\ndlw10-2\npfs\ndlw10-1\ns1216\ndlw85-2\nshanram\ndlw20-2\ndlw85-1\ns4211\ndlw158-2\ngoool\nbeatriz\ndlw20-1\ndlw37-2\ndlw37-1\ndlw6-2\ndlw6-1\ndlw186-2\ndlw186-1\ndlw89-2\noptimum\nemas\ndlw65-2\ndlw65-1\ns4210\nwestdale\ndlw224-2\ndlw224-1\ndlw130-2\ndlw130-1\ndlw66-1\ndlw157-2\ndlw157-1\nidx\ndlw36-2\ndlw36-1\ndlw202-2\ndlw5-2\ndlw5-1\ndlw202-1\ndlw87-1\ndlw185-2\ndlw185-1\ndlw63-1\ndlw64-2\ndlw64-1\ndlw223-2\ndlw223-1\ns.ext\ndlw150-2\ndlw150-1\ndlw128-2\ndlw128-1\ndlw156-2\ndlw156-1\ndlw35-2\ndlw35-1\ndlw90-1\ndlw4-2\ndlw4-1\ndlw184-2\ndlw184-1\ndlw100-2\ndlw100-1\ndlw206-2\ndlw94-2\ndlw206-1\ndlw94-1\ndlw222-2\nbestbuy\ndlw222-1\ndlw127-2\ndlw127-1\npartenaire\ndlw249-2\ndlw249-1\ndlw230-2\ndlw229-1\ndlw155-2\ndlw155-1\ndlw34-2\ndlw34-1\ndlw3-2\ndlw3-1\ndlw183-2\ndlw183-1\ndlw75-2\ndlw75-1\ndlw62-2\ncomputing\ndlw62-1\ndlw221-2\ndlw221-1\ndlw126-2\ncpi\ndlw126-1\ndlw98-2\ndlw98-1\ndlw248-2\ndlw248-1\ndlw154-2\ndlw154-1\ndlw33-2\ndlw33-1\ncacos-m104-i55\ns4134\ndlw2-2\ndlw2-1\ndlw158-1\ndlw182-2\ndlw182-1\ndlw61-2\ndlw61-1\ndlw219-2\ndlw220-1\ndlw79-2\ndlw79-1\ns1210\ndlw125-2\ndlw125-1\ndlw247-2\ndlw247-1\ndlw153-2\ndlw153-1\ndlw139-2\ndlw199-2\ndlw140-1\ndlw32-2\nspamassassin\ndlw32-1\ndlw1-2\ndlw1-1\ndlw181-2\ndlw181-1\ndlw59-2\ndlw59-1\ndlw199-1\ndlw218-2\ndlw218-1\ndlw80-2\ndlw124-2\ndlw124-1\nchapi\ndlw83-1\ndlw246-2\nwww.wcs\ndlw246-1\ndlw84-2\ndlw80-1\ndlw84-1\ndlw152-2\ndesknets\ndlw152-1\ndlw31-2\ndlw31-1\ndlw180-2\ndlw180-1\ndlw220-2\ndlw219-1\ndlw58-2\ndlw58-1\ndlw217-2\ndlw217-1\ndlw123-2\ndlw123-1\ndlw245-2\ndlw245-1\ndlw151-2\ndlw151-1\nwww.sharp\ndlw30-2\ndlw30-1\ndlw201-2\ndlw88-2\ndlw201-1\ndlw88-1\ndlw178-2\ndlw178-1\ndlw57-2\ndlw57-1\ndlw90-2\ndlw216-2\ndlw216-1\ndlw122-2\ndlw122-1\ndlw244-2\nwww.hyundai\ndlw244-1\ndlw149-2\ndlw149-1\ndlw70-2\ndlw70-1\ndlw28-2\ndlw28-1\ndlw177-2\ndlw177-1\ndlw56-2\ndlw56-1\ndlw205-2\ndlw129-2\ndlw205-1\ndlw129-1\ndlw215-2\ndlw215-1\ndlw121-2\ndlw121-1\ndlw243-2\ndlw243-1\ndlw148-2\ndlw148-1\ndlw27-2\ndlw27-1\ndlw176-2\ndlw176-1\ndlw74-2\ndlw74-1\ndlw55-2\ndlw55-1\ndlw214-2\ndlw214-1\ndlw119-2\ndlw119-1\ndlw209-2\ndlw97-2\ndlw209-1\ns1204\ndlw97-1\ndlw242-2\ndlw242-1\ndlw147-2\ndlw147-1\nwww.gdansk\ndlw26-2\ndlw26-1\ndlw175-2\ndlw175-1\nwww.radom\ndlw54-2\ndlw54-1\ndlw213-2\ndlw213-1\ndlw78-2\ndlw78-1\ndlw118-2\ndlw118-1\ndlw241-2\ndlw241-1\ndlw146-2\nlodz\ndlw146-1\ndlw25-2\ndlw25-1\ndlw174-2\ndlw174-1\ndlw53-2\ndlw53-1\ndlw60-2\ndlw212-2\ndlw212-1\ndlw117-2\ntorgi\ndlw117-1\nwww.szczecinek\ndlw240-2\ndlw240-1\ndlw120-2\ndlw120-1\ndlw145-2\ndlw145-1\ndlw24-2\ntychy\ndlw24-1\nwww.wisla\ndlw173-2\ndlw173-1\ndlw52-2\ndlw52-1\ndlw211-2\ndlw211-1\nwww.tychy\ndlw116-2\ndlw116-1\ndlw238-2\ndlw238-1\ndlw144-2\ndlw144-1\ndlw23-2\ndlw23-1\ndlw190-2\ndlw87-2\ndlw189-1\ndlw172-2\ndlw172-1\ndlw51-2\nwww.lublin\ndlw51-1\ndlw210-2\ndlw210-1\ndlw45-2\ndlw115-2\ndlw115-1\ndlw89-1\ndlw237-2\nronnie\ndlw237-1\ndlw143-2\ndlw143-1\ndlw22-2\ns1470\ndlw22-1\ndlw171-2\nrybnik\ndlw171-1\ndlw49-2\ndlw49-1\ndlw194-2\ndlw92-2\ndlw194-1\ndlw92-1\ndlw208-2\ndlw208-1\ndlw114-2\ndlw114-1\ndlw236-2\ndlw236-1\ndlw50-2\ngdynia\ndlw142-2\ndlw142-1\ndlw21-2\ndlw21-1\ndlw169-2\ndlw169-1\nsrem\ndlw73-2\ndlw73-1\ndlw48-2\nwww.srem\ndlw48-1\ndlw60-1\ndlw197-2\ndlw197-1\ndlw113-2\ndlw113-1\ndlw198-2\nsnom\ndlw96-2\ndlw198-1\ndlw96-1\ndlw235-2\ndlw235-1\ndlw141-2\nsieradz\ngdansk\ndlw141-1\ndlw19-2\ndlw19-1\ndeploy.dev\ndlw168-2\ndlw168-1\ndlw83-2\ndlw47-2\nlatte\ndlw47-1\ndlw196-2\ndlw196-1\ndlw179-2\ndlw77-2\ndlw179-1\ndlw77-1\ndlw112-2\ndlw112-1\ndlw234-2\ndlw234-1\ndlw140-2\ndlw139-1\ndlw18-2\ndlw18-1\ndlw167-2\ndlw167-1\ndlw29-1\ndlw46-2\ndlw46-1\ndlw195-2\ndlw195-1\ndlw111-2\ndlw111-1\ndlw233-2\ndlw233-1\ndlw82-2\ndlw82-1\ndlw138-2\ndlw138-1\ndlw17-2\ndlw17-1\ndlw166-2\ndlw166-1\ns4180\ndlw40-2\ndlw40-1\nsulis\ndlw45-1\nszczecinek\ngchq\ndlw204-2\ndlw204-1\ndlw110-2\ndlw110-1\ndlw63-2\ndlw232-2\ndlw232-1\ndlw137-2\ndlw137-1\ndlw16-2\ndlw16-1\ndlw86-2\ndlw86-1\ndlw165-2\nlublin\ndlw165-1\nopole\ndlw44-2\ndlw44-1\ndlw193-2\ndlw203-1\ndlw72-2\ndlw72-1\ndlw231-2\ndlw231-1\ndlw136-2\ndlw136-1\ndlw170-2\ndlw170-1\nwww.gdynia\ndlw15-2\ndlw15-1\ndlw164-2\ndlw164-1\ndlw43-2\ndlw43-1\ndlw203-2\ndlw91-2\ndlw193-1\ndlw91-1\ndlw192-2\ndlw192-1\ndlw71-2\ndlw71-1\ndlw229-2\ndlw230-1\ndlw135-2\ndlw135-1\ndlw14-2\ns4366\ndlw14-1\ndlw163-2\ndlw163-1\ndlw42-2\ndlw42-1\ndlw191-2\ndlw191-1\ndlw69-2\nwinsp\ndlw69-1\ndlw207-2\ndlw95-2\ndlw29-2\ndlw207-1\ndlw95-1\ndlw228-2\ndlw228-1\ndlw134-2\ndlw134-1\ndlw13-2\ndlw13-1\ndlw162-2\newinner\ndlw162-1\ndlw50-1\ndlw41-2\ndlw41-1\ndlw9-2\ndlw9-1\ndlw200-2\ndlw189-2\nintranet-dev\ndlw200-1\nstatic.base\ndlw76-2\ndlw76-1\ndlw68-2\ndlw68-1\ndlw227-2\ndlw227-1\nso5\ns730\n15mof\ndlw190-1\nwww.mod\nchiangmai\nso0\ndlw133-2\ndlw133-1\nmazda3\ndlw99-2\ndlw99-1\ndlw12-2\ndlw12-1\ndlw161-2\nunits\ndlw161-1\ndlw39-2\ndlw39-1\ndlw160-2\ndlw8-2\ndlw8-1\njboss\ndlw160-1\ndlw188-2\ndlw188-1\ndlw67-2\ndlw67-1\ndlw226-2\ndlw226-1\ndlw81-2\ndlw81-1\ndlw132-2\ndlw132-1\ndlw11-2\ndlw11-1\ndlw159-2\ndlw159-1\ndlw38-2\nyukle\ndlw38-1\nwww.dialer\nwww.comsci\nrack12u18\nspace1\njoc\nsss1\nwww.noda\nrack1u36\ngs01\nrack1u20\nrack1u18\narkadas\nrack1u13\nrack14u11\nrack11u36\ncovenant\nrack11u34\nyanshi\nrack26u36\nag2\ncmh\nscrm\nrack6u37\nrack6u32\nrack6u28\nrga\nrack6u30\nx7\nwww.xboxworld\nvsc\nwww.borg\ns4170\nwww.mystery\ndatashare\nsag\nbassline\nwww.divinity\nepsi\nedata\nwww.mylinks\nmux\ns723\napidemo\ncfa2\nwww.jeff\nwww.reese\nvad\nconlang\ncappa\nmonitor5\nmoshe\namnesty\nv1p\ninara\nsheree\ntomoko\nemailb\nwww.brothersinarms\nganbat\nwww.fairtrade\ntrt\nsenni\ncpaneltest\nsik\nwww.afterdark\nwww.nsb\nxboxworld\nbrothersinarms\nequipe\nspdev\nhikvision\nbelvedere\nsandrine\nwww.uwf\ngamesonline\nmickey1\nmickey3\ncvg\ncyb\nwww.mmk\nwww.ikg\nwww.message\nimihotel\npiyush\na-math\nnlt\nfalcone\ns4114\npradana\nmotors\nsharepoint1\nevent2\nfavor\norderhost\nmasterword\nweirdo\nbestwestern\npringles\nminigames\npaczek\ngalilee\nsimpleman\ntemp04\nnyserver\nwww.ut\nwww.fourhorsemen\nmegatherion\nparklands\nhivi\nwww.portrait\nthecoffeeshop\nmywork\njordanian\nserveur1\nfilmer\nphungbinh\nmyslam\nwww.vt\nmitie\ngoodav\nbroad\nspeedsoft\nwww.logiciel\nuwf\ntrg\ntide\nmaa\ntejendra\nbradleys\nikg\nidf\ndemigod\ns4s\nelin\nafterdark\nmagik\nbizzy\ns717\nmikako\nintersoft\nstromboli\nwww.depot\nwww.moodle2\nesx10\nempregos\ncnsrv1\nsauvegarde\nlain\nocean3\nonsen\nmoderation\ns716\nwww.virus\naskus\nstrg\ns4101\npreview15\nhutchinson\ntradewinds\nscraps\nprecise\ncicada\nberita\nmm9\nwww.teszt1\nsuperfly\nbanweb\ngreentree\nikt\nwww.retail\nnight281\noktatas\nwebapps-dev\ncat-test\nvision3630\ntabor\nipaynicekuma2\nipaynicekuma3\nipaynicekuma4\nsunwoogagu\nkgobs3\nzoy4444\ndayluck1\ntong0430\nmandhome\nteamlead\nyeonribbon\nspn\npitstop\ns714\nsulphur\ngooglpis\nbandofbrothers\nsprings\nwww.ipv4\nokaward3904\nmememy315\ndsjeong48\ns2freesetuptest\nprepstest2\nprepstest\ns4159\nmm7\nmm5\nmm3\nprepsprod\nwww.codered\nshortener\nres01\nres02\nhassane\nhassana\nres03\nprojekti\nres04\nantikvar\nres13\nfree10\nmaktaba\nchalk\naacc\nkinetic\nfe3\ns4364\nyejung5\nkeohanpnf\nwaterfall\nad4\nsp2010\nmetalgear\nbizhongikuniv\nmycej83\ndollarbill2\npg4\nwww.fight4fun\nishow\nseptember1\nbo7317\nnezumi\nssorung2da\ncmh5839\nxerox2\nmeti\nindis\nwww.phantom2\nlespo\nfalcon1\nminkmu\nisuzu\nsunrice85\nk34j98s\npoint8798\nyescm11112\nyescm11113\nyescm11114\nyescm11115\nwealthpop\ngcsd33011ptn\nirix503\nprimectr6489\neverei\nfriendshair\niferratr6780\nareumi\nledhaus\ngdero1\napxmfh\nkkh18743\nkkh18747\niferrav4\nsonhak\nbudstory\nsheecho65\ndyl070808\nkbs0426\nhubsmell\nbookgreen\nserverhosting254-39\nsonian\nfins011\nrubicon\nmelody713\nwhitehouse\nchuldori\nthefemme2\nkirin12123\nhairpltr7190\njunad2013\nasadal001ptn\npiclove\nrefarm\nitlife1\nitlife2\nitlife3\nitlife4\nitlife5\nitlife6\nminnot\nreelas\nbuse\nbenjamin791\nukkinjay2\nkibee\njinhs0217\niferra\nyangh1\nsiruboon\nsonjin\ns1intsunny\ncapeasy7\ngodo12099\nxzizi9841\ngibbmi88\nbrood1000y3\ntnevivid\nhellobee4\nhymnself1\nandria10\nandria12\nmaumcompany\nrealusers\ngofud892\ngofud893\nasadal034ptn\ngofud896\nhyemin0602\neducut1\nyangju\ncocobia\nmandulgo2\nmandulgo3\nmassagek1\nthtkdanss2\nthtkdanss4\ntong1210\nifeva2\nvstatitr2400\nzayougrid\ndptmfl1258\nkpgnh\nchunsig75\ncopyplus1\nsoocia\nqwqasa1\nqwqasa2\neunpal01123\ncwtest\ngodo12294\njakal203\nnanumatr5145\nia2do742\nenkcorp\nnineonetwo\nkblue010\ncocodia\nyanji4\nyanji5\nhowsigntr1\nsb6700\nmp7161\nibaekchun\njinne0205\ndosinongup\nieonet\njeoung252\nhw12341\nvier4d\nhirondelle\nsmartself\nbpcosmedi\nqkrwhdals4\nggomjilak9\nkfc0930\nwandobada1\nwandobada2\nkiki1443\nipayno2345\nnyangi1\ngoodnara1\napccoree1\nwowmin723\nfeelnatr6784\njw7570\neliecho\njabjll1\noie\nmorefun011\npsy770706\nraraaqua1\ngooseyeo\nknj07231\nparancorea\naki0000\nhy4512tr8230\ncanari\nsonpre\ndindon\ntherich1234\nhubfarmtr\ndbgnlwo1\nkkomakoala\ngajafishing\nhighkickzny\nsorantr4808\nrunbio1\nnages3\nrunbio3\nnages5\nwhdgur23\nnewcm2\ngreenmoa\nhogine\ncho08181\najajbraj\ncharmhtr9651\nreleases\ngank\njongi2001\ndnjswjd52361\nqueenseating\nakbo241\nywhdtjs\nviprice\nsoonsoo6132\nlci0901\nvz5\njjairan\nzeroscho\nesapyoung1\nhenb1\nnajjooni1\nwhrnlska33\nsangpaemalltr\nskynsnow\ngodo13211\nykaa11021\nsora0311\npeter77\nbodorok\nlee040804\nmarrang\nchm8004\ncanavena\nmiyoun15\nsky2sun5\ngreenpin\nipayfothkc1\nlhhgm\nthaitantawan1\ningang1\nlsm947\nljy9296\nimypen\neprivacy\nepreaching\nmatishop\ngreenpns\nmkhouse\nk0121017\njks1914\nkismet2010\nhwa15381\nhwa15382\ncryout\nregeni\nbypo1234\nbuylcdtr\ncronus\nyooriapa2\nil8540\nclxkclxk2\nyooriapa5\nclxkclxk4\nhellojungwoo\nhelloboy0\ngeorgelee1\ncocolux\ngreensam\nsyc\nme2style\ncgang129\nbaberina1\nleean5103\nsebins5\nariapp\nezer19312\nzmfhqk\njolieugly\ndain130\nmidiclick3\naurore7moi\nsnhk20011\nsnhk20012\ntrophymall\nsmarttest\nbigraon\nssjh7119\nhanbyul\nk96389272\nk96389273\ncake1st\naxigen\ns4intnulbo\nshoemania\ngaggi113\nkali0083\ntdk3776\nejobs\nnowtuning\nnun275\ns2pselfsetuptest\npeterc1\nfootztr1075\ncsj627123\ndelphi1\ncirclepia\nwoojung115\nsullai1\nrusselpark4\nsewinggirls\nsuyedang\nmanplus73\nsummersun\nnorthwind\ntraff\nnava\nimanweb\nhot-live\npre-live-m\nhot-edit\npre-live\nedit-m\npre-edit-m\nhuecard\npre-edit\nsonja\npremium1\nboss0582\nnamseung11\nenglish2\nbbserver\nairwolf\ndiving\nrys\nbramka\nhsn\nwww.basel\nap04\nobgyn\ngrilsexi\npal2\nharel\nandhika\nmar\ntrixie\ncourtney\nvbrick\nssq\npeekaboo\nwww.mody\noffroad\nlaval\nchristina\nsi2\ntarjeta\nds5\nxiaoying\nyacht\nspiegel\nsigem\nds12\nphantom2\ndiplomacy\nvespa\ntotti\ns4160\nkosova\nwww.wptest\npurekids\nmorse\nnorules\nalwakil\natlas1\njlab-tv\nemailtest\nmdmtest\neason\ncristianoronaldo\nsinan\njada\ntechnews\ngameclientapi\nputty\nsunil123\nzxcasd\nncf\nmvh\nmno\nanya\nmodul\ns4230\nkenna\nwww.teamlead\ns4150\nbtw\nvideoportal\nyosri\ndagong\nmavis\nliyan\nvos\nmaili\nlamxung\nwww.roundtable\nkadin\ntamburki\npegasus.cpd\nikram\nqq123\nlessons\nciti\nb2kclan\nwww.sef\nworkbook\nwww.artemis\nwww.ios\ngekko\nlocal-www2\nupgrades\nkalina\nformular\npr0xy\nwww.outofcontrol\nbotox\nrelations\nmanuales\nbadcompany\nnovedades\naltan\nbigfishgames\nwww.torque\nherbert\nabc12\nhuxley\nschumi\nwww.cheers\nreadmore\nades\noldip\ngermania\nhappyfun\nelpunto\nznanie\nfight4fun\ncodered\nrefinance\nneckermann\nwww.testes\ndigitaltv\nmoneymaking\nagent007\nrenegate\nfutures\ntesthost\ngretel\nwert\ngva\nserials\ntekk\nsink\nrips\nokok\nnorm\nkub\nmdk\nlenz\ncriminal\nannika\nexel\nfoam\nfwtest\ncino\nselim\naral\nbela\nalt2\nwww.b2kclan\nrbw\nmtw\ntheconstruct\nphoenixx\nintime\nvien\n4you\nsoftware4free\nkomputer\npanthers\nrao\nwww.sow\nwww.ege\nwww.dnd\ningenius\ns4140\nwesley\nnefertiti\nmorphy\npflege\nwww.theconstruct\nmatrix3\ntoz\npeka\ngoody\nxyw\nwwm\nudt\nssw\ntitan2\nsef\npll\nmoh\ns1476\nkrb\nkoc\nkmk\nkfs\none60\nhsc\njanna\nnonstop\nede\nbbu\nrampage\njava2\ngrob\nwebdisk.mall\nneal\nautodiscover.mall\ngung\nautoconfig.mall\nedutest\nswa\nchis\n0verkill\nautoconfig.php\ns4136\nwebdisk.php\nautodiscover.php\nip23\ndorel\npgb\ngbkh\nkjy\nghweb\nrdp2\ngokhan\nfantasylife\nwebservices1\nsamu\nautoconfig.temp\nwebdisk.temp\nautodiscover.temp\nim7\nim6\nrfid\nnsct\nnoon\nfcss\nkikuchi\narta\ngodel\nvcma\nzingosu6\nzingosu8\nfaramir\neolo\nlod\nlince\nokul\nmailgw01\nwww.bookmark\nelattar\nriptide\nmovie0\nwide2\nwebdisk.responsive\nkango\nsooptr\nsntrade1\nwww.gorzow\nmunki1002\ngorzow\ncocorex\nmds0701\nkooji55\njanghang991\njw8833\npapp\nwww.koszalin\nkoszalin\ntmo\nsyn\nlshdvs\nsjanwhdk221\nparkhw771\nautomotor\npinn\npdev\nwangji9676\neunhasul632\nelifepc\nakarios\nkitty816\nserver252\nmicoffee\nsungyi4234\nfinflix.videocdn\nwi2\nbbs4\neyes\nalarm-r0150-0g-g10-visoralarm-01.security\nwww.gok\ndianying\n4d\nmst-dc\nholmium\nalarm-r0150-0g-g10-visoralarm-02.security\necon01\nlanetli\ngis5\nns.cs\nprofkom\nimx\nsopro\nfido\nmarenostrum\ngis3\ngis4\nlatin\nats2\nkomputery\nekstranett\nocsav\ns1469\nwww.nc\ndbo\ngestio\ncdnt\nbizdirectory\npri7\npri6\npri5\npri4\npri3\npri2\ns4220\naquiles\nciberlynx-wsvn-web2\nemaila\nnewsproxy\nengproxy\ntrial0330\ndl001\nmailmarketing\nwww.112\nresizer\nwww.mpr\ns4130\nhainan\nhole\nomni-rcms1\ngel\nbeda\ndns1outer\nbanner1\nkaixin\nwarsaw\nmobistar\npaloalto\ndiogenes\nautoconfig.marketing\nautodiscover.marketing\nvns3\nmeetingmaker\nfilesharing\njkt6\ncod2\nwvc\nrachelle\nsubfinder\nidm2\ngarry\ntapioca\nsn1per\nidm3\njedi-en\nveryold\nbbdb-scan\nsisdb-sc\necmdb-sc\ntsisdb-sc\ntfmsdb-sc\noahu\nfmsdb-sc\nhalfmoon\nannu\neduphoria\nwebdisk.proyectos\nhost83\nhost55\nout3\nout4\nout5\nout6\niptest\nulisse\nclamps\narrowhead\nsith\nicestorm\nwww.moi\nwettbewerb\ns4350\ntechnique\nchemist\nwww.statistics\njobjob\njogja\nplutone\nauthwireless\ncatest\ns4154\nblackbaud\nipdb\nautoconfig.wedding\nwebdisk.wedding\nautodiscover.wedding\nmadcap\nstei\nalexandr\nfoxbat\nwww.constructii\nthunderbolt\nip2001312196.ice\nnmswas\neasyjob\nwww.pesteri\nhoreca\ncashcow\ndoverie\nponi\nnew-life\nmail.vita\njoylife\npewdy\nhousejj\npescuit\noverdose79\nperte\njimmyalice\nwww.horeca\nqhtrjr0319\nwharkdgks\ntoggi\nhans1502\nksuk8787\ntjdgus2011\nthd0683\nzuhbhsd53\nbrandgo\nzzline\nsalezone\nokmembers\nebebebeb\ng6368\nyang0905\npesteri\nboyandro\nfutureyyh\nlys42343\nconan101\nvaram99\naisarang\nwjdxotjs\ns4119\nokokjoa\nsusss\nrkswl888\nostory\nnview\ndidhd1004\nkks240\nnochen\nbeius\nsealeeyu\nkamilshop\nhosancom\nnov3004\nmonumente\nokmyshop\nomh11\nfaline24\njinejoa\nmino8841\nuni486sk\nsulan18kr\nakflffls\nmissnyacc\nnorthrsoft\ntsports1\nheejin0339\nb.a2\nb.a1\nb.a0\ncjn2424\nnice10300\njanghuk2\njssoft\njino3698\nssipo1\nchanagini7\nrosia\nelboy\ngrayjazz\nmorek0294\nrudgk08\nwnrmfodlg1\nhyojae1005\nneuestyle\nno7rose\nhem7229\ntqny\ntdsbjs\nljs3133\nwildegle\ndud02\nhellen0302\nmihye5575\neydong486\nwww.abram\nmsnrkcs\ntnlvk1\nbrg111\nclstyle21\nuh64\nbong333\ns4152\nrunbeast\nlsdbabo83\nmo1109\ngeunho76\nsgr5641\ntryrex\nwww.stei\nydowne\nlangeriea\nakb2000\nhoattakji\nkkijnh6\njangnan01\ntofurs\nsoul1221\nsee630\npopoki\nbabaon\nchhpig\nprojecttracker\noukzzang\ntourisme\nsetsj2010\nhan3608\ndadaworld\npianoon\nkchol000\nnewpinkboy\ntjcss0\ntjcss8\nsncfelice\nimgtj\nimgtj2\ntjcss2\ntjcss3\nyulevip\ntjcss6\npicup\nimage5\ntjcss\ntjcss1\ntjcss4\ntjcss5\ntjcss7\ntjcss9\nfseason\nschilling\nlaposte\nwebex\ngorira07\nblaine\ncytel\nehdans9426\nmypul\nmbro271\ngolligi\njjp2040\nrlawkdal\ngraceme\nburney007\ns4110\nlh2dream\ncncompany\nhyunchol2\nharace55\nharace33\nwjddud523\npipimo\nsensgirl\npuba\nhw8714\nhappyromi\nckffltiq\nymcm8585\ndalgwang\njkyo521\nmimi3799\nplusinside\nguy2009\ns4368\ns4367\nysgdvgs5\ns4365\nqowo83\ns4363\ns4362\njingo8927\nyanhsgwg\ns4358\ns4356\nyanhsgwa\nboyandro001\ns4353\ns4352\njunpos\nzzeng541\ns4348\nyogoyogo\ns4346\ns4345\nclickjbl\ns4343\ns4342\nkongyh\njakad11\ns4338\ns4337\nbebeheaven\ndkdlfltm12\nloves11\ns4333\ns4332\nthdeockd\nohjung4\ns4328\ns4327\ns4326\nbsh5276\nujhnsgdr13\ns4323\ns4322\nzziccoogo\nvintageny\ns4318\ns4317\ns4316\nhosted2\ns4315\neyefun\nrrnflrrnfl\ns4313\ns4312\nalliebaby\nharace2\nharace1\ns4308\ns4307\ngpwlswkd\nmydv\nny90201812\ncui3545\naion0501\nthrushine\nb991228\ns4303\ns4302\njss647\nzacava\nwwcatw\nclockzone\nyj972\nnoa114\nmuse9\neunsaem\nzltkzltk\ns4273\ns4272\noyi502\no2mall\nhi4363\ns4268\ns4267\ns4266\nkamzi800\ns4265\njhjh012486\ndbmart1\nguzezzang001\nsealeeyu001\nppp-11\nppp-10\njjmobil\ns4263\nallenhan\nhanafood\nnammaecom\ns4258\nf14okppp\ns4257\ns4256\nkiper0119\npolo21c\nwnrmfodlg\ns4253\naeun1009\ns4252\nshoeseller\nthemestory\ns4248\ns4247\ns4246\nrhan12\njuliana\nalgeriano\nruach\ns4243\nfitgam\njapet\navokato\nryu6058\nstudyphp\nshinyo123\ninnerstyle\ns4237\ns4236\ns4235\nkimjk1191\nmarado11\ns4232\njinan4749\nkney1018\ns4228\ns4227\nskp5969\nkingmade\ns4226\ns4225\nsendy77\ns4223\nblair1\ns4222\nttff1030\nbanana2\nrun2run7001\ns4218\ns4217\nsioor\nkk9999\ngsmom100\ns4216\ns4215\nonlharu\ns4213\ns4212\ncoco4652\nakacom\npaypal1\nlovely1st001\ns4208\nirusy08\nfilmtour\ns4207\ns4206\ns4205\nmcmin92\njm2k\np0725\ns4202\njodongam\ncjiyeong\nwjk0529\nilovez\ns4188\njong617\nj007962\ns4186\nmpopov\nsamiros\ndosa3377\nqjnybkesz\nshadowgold\nb2b2\nqjnybkesk\ntlsstory\ns4183\nsoumya\nphernand\nkk7935\ncoolkids\nlys9153000\nduhokfrm\nljh0217\nbeeho3654\nocstest\ns4178\nadamantium\nyanamanhup\ncondom\ngiga220\ns4177\ns4176\ns4175\nkludge\nmonit2\ntomyself\ns4173\ns4172\npau\ndaheeya13\nwowow78\nolntydbsrw\nolntydbsrg\ns4168\ns4167\ns4166\ns4165\nkikibox\nfuscata\nplz\ns4163\nwww.your\nwww.anywhere\ns4162\nrlaghwls\nsorajm\nkanghun789\ns4158\ns4157\nvatenna\ns4156\ns4155\nkeese4\nrenard\ns4153\nggrjuh1\nknan405\nparisapple\ns4148\ns4147\nc101\nsgt783\nwjdduqdl12\nmudeapo7\ns4146\nlg6014\ngm77\nmagictimes\naubade003\nkarakoram\naubade002\nf200\nkidsksmxg\nrang99\nriyaz\nsdavis\nqookace\nccc333\nsechuna\ns4143\ns4142\nkimmigogog\nabdu\npcht2901\naber\ns4138\ns4137\ngosu81\ndlrlals3\ns4135\nannsnamu\ns4133\njoypsp\nmac3d\ndaelimfood\njks2661\nchangttr5949\nsuntechdnc1\nsuntechdnc2\nkimjezara\nalekkim1\nkidscltr9222\ndipopo1\ndipopo2\nzzang79121\nsung27113\nsung27114\nlms0913\nelinfit003ptn\nqhfka767\nitfactory\ntotal7004\nrudgml56541\nrookie11\nwevestyle\njoytac\nfleury00\njoyti1\nrobo1142\ns541129\nthdworms02021\nmedisale\nheehee6375tr\npcm9x1\ncocowa2\nice979001\njh8006202\nmcc6931\nhsc80442\ntjplus2dnob1\nchoccolato\nsera4j2\nkmj19601\ndoguebox\nengdevadmin2\nd61573\nhwajin72423\nanpabak\nokok1428571\nstar918\nyeonsung-010\nclever338\nnjoypp1\ngoededag1\nk1j1k071\nshinjichoi\nyeonsung-015\ndesignbar\nzerotest\nichoco3tr\npicone2\npicone4\nyeonsung-020\npicone6\npicone7\npicone8\nyeonsung-021\nyeonsung-023\ns4132\nbird12311468\nlse0918\nthevillage\nimggirl\namotion3\naudiencekorea\ncocoyaw\nmarseme\nsj6305021\nsj6305022\nmukuge\nadem\nkoream79\ns4128\nadie\nfleader\ns4127\nggro903\norkutadmin\ns4126\nhaha0503\nagha\nahca\ns4125\nartemis.cpd\nmmo20\nahly\ns4123\ns4122\nahoo\niqmart\nsytvfc53\nnicole-screensaver\ntjtls11\ns4118\ns4117\ns4116\ns4115\njsndkerx74\ns4113\nrd01\nwlsdud0739\ns4112\ndataebank\nmodelsuk\ns4108\ns4107\ns4106\npks1279\nban1\ns4105\nwegoshop\nddolggoo\ns4103\ns4102\nyuran07\nnewweapon\nasia0416\nyeonsung-040\nceratec1\nceratec4\nmykang77\nbahy\nukctr001\npkd0911\nhjyco\nbalu\nbbmotors35\nwkaehfl\nmini312\ntwinz2\nifthen\nwlmuhebsdf\ns4351\ns4349\nroy815\neurostar9\nceratec5\nansgmlwns3\ndkf89701\ndesignskin1\ndesignskin2\nworiro\ndesignskin3\nyouprint\nuni2399\nkhhodu\nyeonsung-050\nericflower1\nbukseorak\nsotye0109\nyeonsung-054\nwemako1\ngreendust2\nyeonsung-059\nenfree150\nsoji4148\nbarr\nenfree151\nenfree152\nenfree153\npointed\nlegiocasa00\nyeonsung-069\nalbi\naldi\nqnsghde\ntlrkfh\nalek\nalen\ntheplace001\nbayu\nbambish\nhddvdent\nnaru52\nkimgoon002\nlondon2008\nyeonsung-071\nfinedeal\nyeonsung-072\nyeonsung-073\nkyj01235\nalli\njingaone\nminissuki1\nhyeok111\nhitro\nacasiaaca\nisisshop\nddrgx541q\nmtshoes\nstylenam\nwebmachine\npp0725\ninha212\nmykidsmall\nkakaroka\nf14okpp\nbodria1\nbodria2\nspo119\nlinuxhosting229\nlinuxhosting231\nyeonsung-080\ninsungtr5197\nyeonsung-081\ngoldcarttr\nyeonsung-082\nonly52461\necox3739\nonly52465\nonly52466\nonly52467\nonly52468\nlsy1227\nhananim415\nmgraphy1\nmgraphy2\nammu\nstupa\nqkrehdgml\ns1465\nanja\nanik\ncreed0606\nclamkorea\npeople9\nkp1012\ns1464\nnuguri100\na327751\neyeshape\nfinemart\nlinuxhosting239\ndesignclan003ptn\nlinuxhosting241\nspiao1\nyeonsung-091\nebingo\nyeonsung-093\nlike1539\ndesigngj1\ndodo66991\nwj22741\ndblglobal1\naurorakorea1\nburnoaa1\ncloudcorp\nboardpan4\nvincentmani\nchoi60232\nmjin89\nwhejs88\nkensingtonkorea\nkswieyjkk\nbookdang\nrornwkddl\nfegerri\nmong123\nallsize\neuroco\nuniquecamp\nmsc9870\nhiya888\nbegoddess\nfun64601\nadfasdf\nmisuk5282\nsnikystyle4\nwjyou0818\nlsp123\ns2pintp\nborncompany1\neurom4\najfxlxhr\nrwakeman\nhsyoon75\nleeark4\nhok04162\njynistyle5\nqpswl75\nqueenslook\nnarinim\nscole4874\ngeagea\njkksports\npantsbear\nmadollkr\njmtkdtk\nkatechoi8\nicafetekno\nvenuskwon\npaxvobis0\ndhforhd\nnegasl6721\nhieva\ns1434\nwjdsladl11\njgms38317\ndesigntr7238\nchoah\nsd07081\nsd07082\nantz\nktkang1\nh1n1\nchlwk\nfbwocks\ngagamelxd\nmetavoxtr\njin03130\ncomictone\nos1101\nykm20051\nziinjjb66\nbabytoto09\nomin881\ndarknulbo4\nomin884\ndarknulbo6\nbarbiein\njohculture\nbirdmarine\ndesignlak\nhsblue1\npurpletopaz3\neaw\nwellage\nwhippingc1\npromaltr6451\ncuz\nmrsinabro\nsorexi\ncstamp\nkookis1\nbnbglobal\nwellbag\nshinkee\nlovelydeco2\ngodosoft-007\nmh402\ntheshopsw\ngodosoft-010\nsunwoo11\naqua79\ntwoco4ever3\nmami2\ndoichangfarm\nririringeu\nqqhwk\nsweetfox513\ndendy2002\nscmwoo2\nscarlet2193\nyardin\ngodosoft-020\ntodvhfl\nnownow801\ngodo15782\npro25443\ndralkaitis1\ndralkaitis2\nongame951\nongame952\nceleryang\naznymohc003ptn\nmurrin3\nin4mall8\ngodosoft-030\ncjy8232\nactgagu4\nactgagu6\nactgagu8\nchipmunk1\nprotootr9743\nbokgily\nsansotank\ngodosoft-040\nksu12\ninterhard\nherra1124\nfreebilly1\nktl33\nwj23651\novermimo\nthejamie\ns4intb\ngodosoft-050\ngodo16072\ns4intp\nsalirery\ncwsports1\nhayfine\ngodosoft-054\ngodo16133\nrangin2\nzino1513\ny4utr1891\npromisej\nmissjjtr1425\nmusiccoach\ndrmuscle2\nenvylook1\ncubeqa\ncueplan21\namavilis\nladycode\nadl3910\nazz21362\nchulho975\nkimujuok82\nleeborn\nmiz011\njamesjeon\nlixxi\nkeepsafe001ptn\ntrioutlet\nrusidnew\ngoodoong\nminamine01\nikonet\nkimyune\ncjw001\naref\neptnbhqmwfgvp\ns1c2k3\nwizhomme1\narin\nbichnada\nmuzzima\nleeys1123\nrlaqhrtjs\nbiju\ndmsghk419\nbimi\nthiskim776\nhappy8841\npmillion\ncdc1\ntoyplay\njflove5\ndnss\nintromall\nasem86\nreturn0610\neksmcokr\nheeja\nhottime123\ncafebogner\noknnko11\nkeun0912\nw3w\nwebcg\njilaldance\ndress79\nstting\nhuni0906\nphy1771\nmlstory\nwewe\ns1429\ntjsxo20\nahs234\ngodqhr7755\nan520610\nlaw321444\nhai486\nron7856\ndudfks33\nkdk5428\nkhn1212002\nkhn1212001\ntjdgmlrla\nwithtns\npassion020\ns1430\nrhrhkdvlf\ns1428\noozzoo\ndesignsky\ntrg486\nruru\nyea0317\nallclock\nkingchoon\nktfnh\ngelios\nfortest\nhjkh23\ngb890387\npczoom001\nlhseok\norg333\nhamji\njudasoli\nbestaym\nkt1523\nhong5075\ns1420\nfindlight\ntyty\nwlmuhebst\nnahyenmom\nmintcream\nmegaeunjoo\ntoymall\nmyshirts\nk5227497\nk5227494\nkrnaite\nplanwiz\nreclama\ns1471\nglamgirls\nbluesky556\nchlwkzizi\nlss9775\nlhsij\nlesson\ndc1114\nsoosyy\nmizzleone\nshns551\nladybear\ncultmania\nrobo0672\nsolo1214\nypop77\nfakesmile\nyms7474\nmiggu77\nzwolx8673\nhunlee77\nfriedegg\nnam479\ntnsaldl12\nknight7667\nseon12\nkimjuok82\nhjm705\ntjdtnr64\nstockplaza\nkim831017\nreemax\ndodo2011\nraya144\nqaz4745\nijnjdf78\nsyl9709\ns1410\ngusdk8318\nkoko6\nredox1\ncocoru99\ndoogy7\nilove6155\nrudal65\nwebdisk.honduras\nkogun\ntoppingkr\ns1405\nmintcream001\nbdk\nnihao\ns4k1na\nlty5959\nalsxor84\nautoconfig.radios\nfable123\ncutetiti\ncheonjia\nautoconfig.honduras\ns1402\nwhdbsgml\nminisign\nmaple417\nautodiscover.radios\nsolarpower\nwebdisk.radios\ns1401\nselt22\nehdans512\nrhone\ngajisam\njdsfndh62\njlcorp\nalsgh4860\nninahiyoko\nryuyoung7\ntuningshop\nobzor\namkdh\nbasri0310\njang829\ndepartures\nautodiscover.honduras\nrealgamjao\ncocoii\nkdlwlsl\nwild33\nvuisnjhxy\nboomdiby\nguzezzang\ns4347\nzbjkim\nngbluaknsb\nlovemekso\nkkrtg\nelboys\njgcbwm\nissc\nssss21\ngugigigi\numewede\ntjrwls5\nmkgallery\nctphilos\nbluesoul34\nnixspy75\nwww.consulting\nbaehongbum\nimage7777\nweb499\nnaviyaa\nbone\nwjdtnsl08\naze1\ntowclock\ngengioh\nhvfire\npjy12\nazer\nazha\nwcode78\nkhs4341\nautest\ns1371\nukctr\nclicks.runews\nmihuij\nirani\ncimille79\nkkitime\nffrock\nbwabwatv\ngpdjsdl1\nchor\ns4121\nportalpms\nweb109\nyourajoa\nonoffsale\ngodehak\ndais\nfoka\ndane\nbsnl\nharang09\nps0429\nshlvmj6\ndks8504\nkidsksmx\nkimjovi\ndaya\njayholic\nlhh2121\nnilufar413\nweb1b\nwsxedc\nartweb\nyns8645\npatrol\ndeny\nrace4000\nseriat001\nsweetglam\ncole\nzixvpm02\ndewi\ntopkki\nbirth0531\ncmj0410\nweb64\nbliss220\nwjdtldyd\ntifac\njinihome\ndipu\ngksltkdtk\nlnybksrbz\nlnybksrbh\nfocuspc\ntoonis\nsexytoday\nmin304\nalflspwjd\ndawoud207\ncoolbuddy007\nbodyfriend\nmfcsg\nsspama\nshyh22\nwj6838\njoug200\nrlwmd78\ngilmall\nchp\njeonjisun\njb2110010\nkkoobi\nrealgamja\ndacha\nautoconfig.hr\nautodiscover.hr\nautodiscover.foto\nautoconfig.foto\nsreverse\nmailadmin9\ncoe081\njiny8282\nsdoduk\nwww.tvconectada\ntvconectada\ntba\ngmulco\nkey9614\napi-qa\nticketsystem\napi-prod\na.test\nids01\nevilium\ntmpsolutions\nckmina80\nrkddball\nhotzzang\nljhljhhh\nftpm\nforcar77\ns4339\nrtdata\nsigweb\nmikee\nailos\nsus01\negy1\nserpens\nweek\ndevww\nsicoa\nmetricapublicidad\nvirt4\nenterprise2\nuploadftp\nthaonguyen\nwebdirect\ngfa\nludmila\nsektor\nviktoriya\nwww.traduceri\nwww.imobiliare\ndrem\nkron\nsoki\ngintaras\njoyful\ngoodday\npeaceful\ncarti\ntakahara\nsmbhostverw\nreferate\nvinch\nwww.concurs\nadg\nlisin\nstrela\nwww.felicitari\nwww.referate\nmail.biz\nlek\nwww.retete\nlev\nsupershop\ndaneshnet\ntraduceri\nbullseye\nsubtitrari\nnhm\nrum\nqlife\nftp.med\nrelevant\nsolution1\nfelicitari\npublicitate\nphytotherapy\nnataliya\nwecan\nftp.sport\nmasterpiece\nxoops\nsmbhost\nglorious\nmail.sport\naas\nweb430\nizhevsk13\nftp.love\nmatter\naniz\nmirny\nsuperstars\nfana\nsampo\nability\ncrum\nbulan\nmystar\nyaroslav\nfreeshop\nsergeeva\nminhhai\ncaring\nnubian\ntsh\nvitamin\nvira\ntaim\nshiseido\nlora\ngesund\nluch\nrunet\nneopro\nnira\nvipnet\nbewell\nyesman\nsaludybelleza\nvalentineflowers\nkio\nsharper\nweb94\ntinman\nftp.job\nftp.pro\nrichlife\nallnatural\nwww.u3\nautoconfig.stream\ntransaction\nautodiscover.stream\nmail.look\nmillen\ntr3\nsats\nperspective\ngrande\nvipclub\nautodiscover.tech\nautodiscover.tutorial\nwebdisk.tech\nautoconfig.tutorial\nautoconfig.tech\nlad\nrioweb\nflyer\nrhodium\ninlife\nww20\nwww.angajari\nangajari\nmail.web\nsplendid\nns4-2\nns4-1\nworker1\ns1220\nit01\ndbmail\nentry3\nentry2\nlonglife\nnakagawa\nsunlife\nbox8\nbox7\nwebdisk.designer\nautodiscover.designer\nautoconfig.designer\nbox6\ns1334\nszg\nnomad2\nseimgex\nmail02.gr\nhealth-beauty\nreadme\nwebmail01.gr\npop01.gr\nseieumg\nsaiwmng.is\nsefcmg\npartnerships\nsmtp01.gr\nwww.cameras\n2ch\nnietzsche\nblondi\nvideos2\nnotar\ntable\nemperors\ncdb2\npubsub.jabber\nmedia02\nserver-1\ndatacenter1.cesantia\norcus\ndatacenter1.solicitarclave\ndatacenter1.contingencia\nknet\ntartarus\naandp\navtest\npool-node-tr\nhei\nkmt\nvpn9\n215\nskm\nwebpower\n213\necourses\neurynome\n196\nrtest\n187\natlas2\nwww.auth\n157\nkch\nkof\npothos\n145\n143\n141\ntadpole\nenfer\n190\nmovies3\nwww.uslugi\nluminis\nxtra\nelie\nautoconfig.pt\nautodiscover.pt\ntutoring\nzrenjanin\ncornelius\nsticker\naddm\nwww.sklep2\nues\nhuonglinh\ninterstate\nipcamera\nassd\nhma\nnonlimit\nraps\ndashboards\nonlineco\nsignon\ncampusparty\nwhee\nfarwest\nsettlement\nscrum\nus.mobile\nwww.kumquat\nvicon\norange2\nvigor\ndwar\nemre\ndwin\nfeli\nkebo\nmmb\nteamxtreme\nnetapp2\nffff\nkolab\nsuburban\nukki\nambassador\nwww.ent\npeta\ncaracal\ndyaa\nc203\nkenny1\nwebdisk.italy\nutil3\ncua2\ngamma1\nautodiscover.italy\nmondeo\nautoconfig.italy\nwww.spain\nsocialize\nsocialite\nsanskrit\nbtk\ndominator\nvalidmail\ntritone\nfreeinfo\nreferent\npix-outside\nvpn-gate\namalthee\ntestias\nutilscpo\nplanningweb\nannouncement\nwebdisk.rent\npc23\nwww.renewal\nrealkey\ncloud7\nwww.reb\npgmi\ntarbiyah\nsyariah\nie7\ndocomo\nwww.domain2\nwww.tgp\nthevoice\nerez\nswl\nlocalhost.live\nwww.plaza\nbataysk\nodincovo\nwww.kultura\nwww.67\nwww.lm\nwww.nv\nwww.ekb\nwww.paradise\nwww.smr\ntrsc\nskytest\nwebdisk.coins\nsedi\nautoconfig.coins\nm.blog\nppid\nautodiscover.coins\nprovince\nipphones\natp\nwww.avrora\nwww.kurs\nwww.bat\nwww.moskva\nwww.tx\nname2\nhildegard\nldap00\nsps1\nminecraft2\ncaprica\nskylab\ntuyenct4\nwsd1\nchimaera\nreliant\naceit\nwww-temp\nwww.arl\nnewsflash\nlaulima\nbnm\nwww.course\nikebana\ndisconnect\nsynergist\nprevious\nsearchtest\nbunbury\nmanav\nir2\ndl101\n1970\n9706\ninterest\nbuildserver\nwww.jupiter\nwww.laguna\nspringfield\nsitim\nwww.na\nwww.mysports\nhanover\nwww.newhaven\napigold\nmelville\nsendsms\nwww.gh\nwww.metro\nyuanwei\nwww.tsw\netis\nogrody\nyoungstown\nwww.richmond\nftworth\nrestoran\nwww.myname\nanirban\nwww.wall\nwww.vist\nware\nnorthampton\ndenden\norf\nprincessworld\nwestchester\nwww.anderson\nwww.ssdd\nwww.saif\nwww.safa\njanz\nwaldorf\nfreegroup\nsalisbury\nwww.noor\nkanoon\nwww.brandon\nmoviegalls5\nanhngoc\nduman\ngonzales\nwww.nurse\nvelo\nelect\nwww.lex\nminhnguyen\ntacoma\nbrentwood\nrockville\nuhura\nsepp\nwww.hehe\nmoviegalls4\nmoviegalls3\nfypproject\nmoviegalls2\nvenera\nwww.butler\nonur\nkramer\nmoviegalls1\nwww.cube\noguz\nshareit\nxlsx\nwww.amin\nyap\nhikmet\nviruswall\ntestmoodle\nsuzy\nessa\nbahman\nsplit\nvolunteers\nmneme\nmaindb\npingvin\neses\nbct2\ncaixapreta\ndavood\nexciton\nwienaz\nwww.taobao\ntock\nwebpub\nwww.amoozesh\nlundbeck\nbore\nwww.nts\nessi\nwww.hussein\nartbank\nwww.mgt\nen.service\nthienphong\nstump\ncalci\nwwwv\nwww.danesh\nmaomao\npibid\nwww.darkstar\nmymaster\nhungarian\nautomoto\nfarina\nmanhhung\nmysports\nmeadmin\nserver62\nagahi\nvichy\nm31t\nserver66\nezp\nnas5\nluminary\nrbl1\nthiru\nkonrad\ns1235\nrbl2\nhawaiian\nasse\ninscricao\nwww.zamani\nwww.noclegi\nwww.2009\nnoclegi\nsahin\nwww.1111\ns1231\nrdv\ns1229\nppd\nwww.sunset\nwww.newton\ntwisted\nwww.conquest\nglados\nfansite\nwww.vpp\nssdd\nwouter\nbenoit\nermine\nwww.ssa\nvsphere\nnguyenvanquynh\ninstruction\ntien\nwww.gbp\nwww.env\nwww.elc\nmagictrick\ntage\nwww.fatih\njaipur\nwww.friendship\nwww.ehsan\ngeni\ngenclik\nmersin\nwww.testwebsite\nhoangan\nwww.esra\npotc\ngjxy\nvampir\ndesigo\nreservaciones\nvbnet\nenergetik\ngast020f\nsemih\nwww.soa\npranav\nluana\ncomputer1\nmytestpage\nbingo2\nexecutive\nwww.anand\ncormack\nwww.turan\nwrapper\nsorrow\nwww.million\nintranet-new\nsb3\nsuzuka\nibo\nsn1\nm1m2\nmaserati\nflu\ndtv\negl\nrtrb040\ncsx\ndns101\naam\nwww.pdl\nwww.ahmad\nwww.serv\ndns118\nmib\nweb2013\npancha\nwww.host1\n159\nkitap\nosmanli\nnewbox\nwebdisk.host1\nbarracuda.test\nmamiweb\nzsw\nrec.messagerie\ndev2.messagerie\neid\npp.messagerie\nmessagerie9\nrec2.messagerie\nwww.ims\nwww.results\nwww.result\nftp.upload\nxinwen\nbast\ns1215\n#smtp\nchecking\npicture1\nwilco\ngorgona\nmiddleeast\ns1214\nkurumi\nwsd\ntane\nyss\nmisr\neudoxus\nwww.britneyspears\nzircon\nbeegees\noptusnet\nmx.staging\nchihaya\nshira\nwww.pinkfloyd\nnurse1\nwww.celine\nrosehip\nasama\nlennon\nshigeru\nwww.elvis\ngnr\nfsfc\nawstat\nrollingstones\nironside\nkczx\nwww.u2\ns1209\nwww.who\npublicdns\nwebscan\nwww.gunsnroses\npagseguro\nvdm\nazaan\ndkr\nsmtp140\ns1206\ndark-net\nip-156\nip-150\ngita\ns1205\nwarda\nsmtp148\ninformacje\nsmtp142\nsmtp132\nip-143\nhany\nautodiscover.demo2\nautoconfig.demo2\nwebdisk.demo2\nip-136\nip-130\nwksta2\ntstb056c\ntstb056b\ntstb056a\nip-56\nip-49\ntine\ntstb008c\ntstb008b\ntstb008a\nip-43\nexpertiza\nip-29\nlibmail\nip-23\ne-mailing\nwww.robo\nsuzanne\nip-16\nip-155\nip-148\ngrok\ns1201\nip-142\nip-135\nip-159\nip-62\nip-55\nip-149\npc09\npc07\nweb63\nip-48\npc04\nweb61\nweb60\nip-42\nip-35\nhasu\npaket\nip-154\nip-141\nip-134\nip-61\nluce\nip-54\nautodiscover.in\nwebdisk.in\nautoconfig.in\nip-34\nleen\nip-27\nip-21\nip-160\nip-153\nip-146\ntemptest\nip-59\ngrus\nvols\nip-53\nip-39\nip-33\nioannis\ngmac\nbagdad\nremotedesktop\nip-158\nlutz\nip-152\nip-145\nip-57\nip-50\nip-58\nip-52\nip-25\nddavis\nwww.preprod\nip-18\nip-12\ngcms\ndialin10\ns4270\nip-40\nip-30\nip-157\nip-28\nm7md\nip-144\nip-137\nip-51\nbeta.mobile\nip-44\nautoconfig.ws\necommerce2\nautodiscover.ws\nipartner\nip-17\nip-11\nstream8\nblub\nclarice\nplotter\ncolu\nrohini\ndirecti\nelb\nbasi\nautoconfig.cms\nautodiscover.cms\nfrontend2\ncreasyst\nnayami\nshunwa\ns530\nthe-portal\njmpc\ncwimedia1\nwest01\nwww.ino\nyui\nnanoha\ndialin12\ndialin11\ndialin09\ndialin08\ndialin07\ndialin06\ndialin05\ndialin04\ndialin03\ndialin02\ndialin01\ncolorp\nreceiver\nhaendler\nvindhya\ndbg\nftpapps\nss5\nnet.aa2\nthyme\nczt\nrwanda\nchandrashekhar\nmdata\ntulip.crsc\nallseason.net\nchetana\nspring.net\nct095.eng\nseason.net\nccweb\nzygo\ncompact\nnb2\nautumn.net\ncar13.sci\ninter01.rector\ncar21.elec\ncsr21.eng\ncar21.eng\nwinter.net\nsummer.net\ninter02.rector\ncsr41.rector\nalexr\ntestvis\ncar31.eng\ncar10.net\ninter03.rector\ncsr41.eng\nelec1.elec\nmillenium.crsc\ndaa1\njoshkar-ola\nsergiev-posad\nwww.blagoveshensk\nvaidya\nrekha\nwww.pskov\nvtk\nsolidrock\nj210\nniobium\nmssql8\nmssql9\ngameservers\nrupali\nphosphorus\n2u\nkritika\nnilgiri\npartnersw.ftp\nbiomed\nnvision\npoezd\nsound11\nsound1\npartners2\nkurort\nwww.seotools\nr.mail\nindium\nrealestate.dev\nftpau\nsftp1\nvmi\nsmsadmin\nkollwitz\nstephani\nlgc\nfiles8\nfiles6\nwebreports\nsinclair\nwww.desire\ndev05\niklansemua\ndev08\nsigmanu\ndev11\ndev12\ndev14\nwww.garant\noldintranet\ntest60\ndev15\ntest44\ntest37\nnouvelle\nnetsky\nfyzg\ntest06\nmikul\nlabstats\nibda\nmnet\nicah\nnetgen\nwww.fai\nenemy\nw18\nmanager1\ntest-client\npiacha\nangebote\nhondacity\nnode22\ndevcontrol\nguto\nfree4all\nzwalm\nwinweb02\nmail.exchange\ndaniele\nhoho\noblomov\nwana\nnation\nmx.www\nibi\navconf\neveready\ndookie\ndemocrm\nhopa\nmore2\nadimg1\ninfuse\ney\npem\ndialup-30\ninforme\nwww.turizm\nc-00\ndialup-68\ndialup-69\ndialup-79\ndialup-88\ndialup-89\ntorg\ntrout\ndialup-20\ndialup-21\ndialup-22\ndialup-23\ndialup-24\ndialup-25\ndialup-26\ndialup-27\ndialup-28\ndialup-29\ndialup-31\nselfserv\ndevsql\neasyweb\ndns.cs\naltus\nwinweb03\ndevlinux\nvc8\nflv4\nplaym\nflavius\ndev123\nmade\nspmexp-clu-01\npingifes\ns323\ns327\ns328\ns510\ns4360\ns1129\ns511\ns512\ns514\ns515\ns516\ns517\ns518\ndialup-64\ndialup-65\ndialup-66\ndialup-67\ndialup-70\ndialup-71\ndialup-72\ndialup-73\ndialup-74\ndialup-75\ndialup-76\ndialup-77\ndialup-78\ndialup-80\ndialup-81\ndialup-82\ndialup-83\ndialup-84\ndialup-85\ndialup-86\ndialup-87\ndialup-90\ndialup-91\ndialup-92\ndialup-93\ndialup-94\ndialup-95\nhqglc\ns519\ns521\ns522\nanggrek\ns523\nvideonews\nvue\ns524\ns525\ns526\ns527\nnhx\ns528\nedmond\nwww.maintenance\ntermine\ns529\ns531\ns532\ns533\ns534\nmv2\ns535\ns536\ns537\ns1119\nfiler3\nprinters\nprintshop\nmultivac\nwebreg\nzbx\nautodiscover.site\nthaumas\nautoconfig.site\nnwa\nnotesmail\nrc.webmail\ndelta2\ncserver\ndownloadshop\nhexagon\ndyndns2\ndyndns1\nrhine\njohngreen\ntobago\nbalance1\neit\nwww.bmb\nbhima\nfluege\ntestlive\nusatoday\nvmweb\ns4355\nbsd2\nhunk\nlogintest\nrm1\nboujdour\ntorigin1\ntorigin2\ntorigin3\nlovemode\ndaytona\nshowroom2\nshowroom1\ncoimbra\nsmtpcelular\nmtas\nmtp2\nbramble\njour\ntiraspol\ninam\niloveme\nstevin\ntransform\nwak\nduracell\nigallery\npromo2\ndizi\nmail.co\ncalvino\nimon\nparcel\njena\nyoann\njose81\nizzat\nbari\nrotterdam\njeni\nmacao\ninox\nespecial\nmadras\ncherish\nirfb\ns1477\nlasik\nlovelyyou\nbakery\nqwe123\nleedh\nnbi\neunice\nlovenote\nassemblage\ns1473\nsubaru25\ns1472\nkrys\ngreentea\nkreis\nremon\nallgrow\nbotandesign\ntnd\nkanshou\ns1467\nseikofesta\nhatogamine\ns1466\nwebconf01\nheadspin\nnetzone\nf64\nnoatoshina\ntechnolinks\nikachi\ns1462\nach\npatio\nnesjapan\nbb3\nkosodatemama\nspace5\nmg130s2000\ngclass\npkobo\nmulti64\notoku\nbb4\nbb5\nmarusuko212\nahn\nuranai\nbbi\nstagewww\nkasf\nameblo\nbgm\nlujian\note-telhosting\njellicle\nvhost5\nautoconfig.india\nwebdisk.india\nautodiscover.india\nronronear\nbnb\nccy\nnyantaro\ncei\nwebdisk.clasificados\njoycue\nwebdisk.youtube\nbou\nonsenichigo\ntev\nnrw\npaulette\ndak\nmygw21\nell\npops\ndxb\nbioty\ns1447\necraft\nsocialapps\nmoneybookers\ngge\nhd1\nmailwatch\ns802\ns811\ns810\ns820\ns824\ns823\nktw\nicache\nmokeke\ns818\ns817\ns816\njltffukuoka\nti1\npredict\nwebdisk.whmcs\nunb\nycc\nperpetual\n1banshop\nhea\npumps\nitvn\nwww.radiomaster\ncastanhas\ngenabog\nkean\nelearning2\nhhh\ns1431\njyoutokuji\nkatori\nawoni\ns1427\ns1426\nampersand\nsandhya\ngun\ns1425\nmichinoku\nfunnyface\nhelloman\nsorairo\nshizuku\nprogressive\nsunray-servers\ntomatoclub\nbellamusica\nkel\nlsworld\ns1424\ns1423\ns1422\nsanuking\nhiyos2\nhiyos3\njondon\nkhn\njsl\ns1421\nrewind\nfreefit\nr18\ns1419\ns1418\njtm\nmiz\nmr1\nyakiniku\ncrmweb\ns1417\nakamai\nbw2\ns1416\ns1415\ns1414\nroute66\nphm\ns1413\nais2\nebis\nresical\njole\ndpop\nhaato\nparasolife\njoni\npog\nyeti\nehime311\ntype\nsc4\niekai\nqpr\nriyoukomaki\nmcftp\nchibarevo\ns1407\ns1406\nizer\nkimiyoru\nyulily100\nsdt\nshm\ns1404\nrue\nsnk\ns1403\nhellas\nascii\nryu\n1000noha\ntjo\nbeplus\ntna\nusb\nbellport\ns729\nkimu\nrindesu\nstokes\nsigex\nwus\nfugakudo\nymh\nvalkyrie\nzxx\nstrasbourg\nbum\nwww.tel\nwww.mts\nwww.itc\nnightsky\nhs232c\nautodiscover.singapore\ndkweb\ngotomarket\nmimitsubo\nautoconfig.singapore\nwebdisk.id\nautodiscover.au\nvideowave\nponto\nwebdisk.singapore\njaybee\npharmamarketing\nwolo\nidms\nyasunaga\nunoichika\nchikujyo\naggrenox.edetail\nquonschall\nmm100\neastpoint\nkyani\noracle-colo\naaaaaaaa\nmessy\navwqr374\nmbs47\nwww.icmtest\nstarman\njsn\nthorium\njesuc\nmobilegame\nlunartears\nlovee\nrano\nwebdisk.photogallery\nloveu\nteenbang\nkimaroki\neel\nmills\nmimie\nsilom\nfirejam\nmimmi\nmysupport\nartbox\nnayan\nsample2\nsample3\n39software\nhotfile\nsdmail\namemiya\nkaigyo\nhotgirl\nasmith\nmmmax\nloveplace\nbuddysp\nkelautan\nzeitung\nmercurius\ntrouttimes\neigohikaku\nsunnyside\nwordpresstest\nnadeem\npall\ntakeover\nmachikadokan\nyoshikinet\nichihara\nskeleton\nclowncrown\nhighscore\ngreenleaf\nmems\nfuryuin\nparfait\ntanatos\nbluedesign\nsleepwalker\nzodiak\nwmx\nmrdoo\nnewmonitor\nmythology\nlifeis\nwaiting\nkrit\neastward\nsaqqu\njamiroquai\nenust\nthreee\nobama\nastaro\nviagens\nvendedor\nthrill\nmbah\nkissme\nmar1\nwww.showbiz\ntest2006\nmarketer\nsmo\nmang\nkodeks\nmusso\nfallwind\nshiney\nbrandnew\ndoner\nnnnnn\nvul\ntt1069\nonlyme\nmyacc\npeter2\nagasadek\nmail.av\nmyboo\njuvefan\nmbmb\nmatu\nfordca\nconfigsrv\nstun.techops\nconfigsrv.techops\napartments\nkull\nservicestest\noldsupport\ndoumi\ncdesign\nmeda\none04\none03\none02\none01\nmeky\nfreshair\none07\n1203\none24\nmeat\nknd\nstrobe\nmezo\nlory\nprivilegeclub\ntetsuo\nwenku\nfirstclass\nonoff\ngypsophila\ns1290\nmiho\nexquisite\nsteeze\nrevenda\nnaae\npyrenees\ncalculon\nwww.yn\ndanijel\nmish\nwww.wl\nwww.nx\nwww.gx\nsweetpea\nhitch\nwww.farm\nwww.88\ntisiphone.olymp\nqx\nckworld\ncounseling\nbailang\npipik\nxinhua\ntest222\nluiz\nletterhead\npte\nmaskan\npi24\nneil\nwww.avatars\nlmi\ns710\nwma\nwebsvc\nnesh\nsitu\nmalicious\nmycloud\nradioman\njumble\nmssql11\nchristelle\nsns1\nmosa\nkonga\nhotelparadise\nlyle\nzarabotai\nsome\nn7610\nadmin0\npictureperfect\nniaz\nultra-vpn\nz1z1\ntpeb\ntpex\nvpnbe\nvpnat\ns1233\nnish\nvpnea\ns1232\nvpneb\nmorteza\nwww.una\nlivezilla\nsun333\n3gp\ns1228\ntomochan\ndoubledesign\ns1227\nschatten\ninpress\nraina\ninformationcenter\nsuns\ntomer\nvxml-lb\nrac1\nimpression\ns1222\ns1221\nalert2\ns1218\nalert1\nsatworld\nramwi\nransa\ns1217\nmycv\nnggums\nappleseed\nnoos\ndirectorweb\nwww.directorweb\ns1213\nsitelink\ns1212\nwww.sitelink\ndunhill\ns1211\nintegreat\nws100\ncpma\ns1208\ncavell\nfdb\nmentality\ns1207\nkfir\npc4353a\nmytv\npc115h\ns1203\ns1202\ncr006\nexec01.uus\nmri-dieter.mri\nenterprise.uus\nuus-soc-01-od.uus\nnew2.uus\nhallam_dev\nkoa-as-well\nhallam_ad\njunior06\npc3256a\nspace4\npcn125a\npc3457b\nyhman-gw\npc3458b\npi01\npata\nps115\npc1051\npc1103\nps4101\npc1309\npc1401\npc1405\npc1452\npc1102b\npc162a\npc201m\npc201n\npcn351a\npc1256a\njustdoit\nl3-1\npc1257c\npc4051\norki\npc1403a\nilomail\npc1458a\ns4344\npc1458b\ncdn.greedy\nhealthc1\npattern\nqwert\ndmedia-eg\nmail-gw2\n235.bint3\nvxml-lbn\nregio\nreina\nrenee\nmaru0216\ndror\nmichelle1\npran\nrevin\nnonutilizare\nbengolan3\nten26llc\nmyhouse\nbonobo\ns1134\nrafa\nsomeday\nfoolish\nsanma\nautoconfig.ajuda\nautodiscover.ajuda\nrahu\nraji\nsanne\nsanuk\nwww.lukasz\nfilehost\nsaram\nanalyze\nramy\nsurreal\nraph\ntheology\nwww.cristi\nwww.cosmin\nwww.danco\nstaffnet\ninvincible\nredi\nbonnie\nrein\nimpressions\nsweety\nfore\nthinkpad\nqnoy\nmild\ncore5\nhub1\nshami\npoonam\nrovin\nmadmin\ncarts\ntest1101\nsaad\nrima\nsonetapijk\nwednesday\nel7oup\nfar\nsaha\ntaste\nmechanical\nbe-plus\niraytb\nfukuhara\nnorinet\nvanillabeanz\nhnctphotocb\nsaju\nminase\n4sight\nanelog\nnoguchien\nutbiscuit\nmamezy\nstudiovier\nsata\nn47\ngoodgroove\nsass\ns4340\ngenkotu-dan\nnasutaworks\nhgf\nobamaharumi\npoint136\nkinjyou\nminibird\nusr\nroby\nmiyakon\nsemo\nkomala\nwwz\n9gnote\nroo7\nstarholic\nronn\nicn\ntacacs1\ndesignmaster\nshab\nroro\nrosh\nrory\nkgh\nrosu\nricoh2\nroxi\njsc\nfrigg\njsa\nkkb\nkredo\nwebdisk.magazine\ntaco\nvesal\nldw\nknr\nmaska\nnosmoke\nmbo\nrubi\ntestshare\nlmf\nzhu\nmagento2\nmagentotest\ncomsup\nmmn\nteco\nconv\nodl\nsock\nwww.romania\nrxhl\n0rkutcom\ncustard\ndonovan\necoman\nnop\nramonin\nsamman\ntest100\nmasood\ngreengolf\nd60\npme\novo\nb130\nb110\nz3r0\nrbf\nuandi\nrna\nh159\nthesteamcommunity\nh150\nh140\nh130\ncaixaeconomica\nstraw\nd99\nstrom\nc60\ndream20\nautodiscover.deals\nautoconfig.deals\nallgreat\nversatech\nb80\nhypnose\ntram\ncopanel\na40\nj117\nh215\nh214\nh213\nh158\nislamweb\numax\nh157\nh156\nregistry-serials\nh155\nh154\nupit\nupld\nclientaccess\nh152\nh149\nh148\nh147\nh146\nh145\nwali\nh144\nweoligre\nh143\nh142\npasrvt1\nringtones865\nwww.bundesliga\nvolk\nvpro\nh141\nsilverfox\nh139\nh137\npowertech\npantai\nh136\nwova\nwowo\nh134\nh133\nh132\nyael\nh131\nkousin\nvaibhav\nhoneybee\nallhere\nh123\nchocho\nkumis\nlarozum\ntaher\nwtt\nwwwk\nstaging.m\npikapika\nc211\nwww.tehran\nwww.mirza\nwww.ekat\nsaihi\nwww.akademi\nb202\nb186\ntester12\nfrankie\ndmb\nsympathy\nmapi\nmodoo\nzied\nphotocontest\nwebshell\ngrampus\nyuji\nchuang\nziko\nb141\nzink\nmoneybook\nlibido\nb135\nyuko\nb132\nb131\nchamps\nzond\nb128\nb126\nb125\nb121\nb119\nb118\nb114\nbenreghda\nb113\nb112\nb109\narunkumar\nfukuda\nb107\nb106\nb105\nb104\nb103\ntunel\nsheriff\nb101\nb100\na101\nk22\npratik\ntransactions\nwhitedove\ng25\ng21\ng19\ng15\ng13\ne94\ne91\ne78\ne26\nwindows-serials\nedge02\ne25\nwildrose\ncis0\ne21\ne19\ne18\nwww.guides\ne17\ne16\ne15\nnasza-klasa\ne13\nprotrack\ne11\nd89\npbo\ngreenwood\niproxy3\niproxy2\nimages.beta\ndelivery.stress\nleith.sandbox\ncontrolproxy6\nimages.loadtest\nimages.stress\niidb\ndelivery.beta\ndbbktwin\nidelivery2\nidelivery1\ndelivery.loadtest\nidbbktwin\nicontrolproxy6\nicontrolproxy2\nicontrolproxy1\nadsummit2012\nwww.adsummit2012\ncodename\nd64\nwebdisk.jv\naalam\nnullpoint\nwb3\ntoybox\nmylover\ncherryblossom\nmoonwhite\npocoapoco\ntous\nfacabook\nsleepyhead\nkelmetna\nyourname\nlilian\nc95\nc93\nc92\nc67\nc66\ntalis\nc65\nc63\nc62\ninternasional\nrachid\nraj007\nlaboratorium\nc61\nc57\ngifts4u\nnagaland\nc42\nc41\nwebit\n7amoody\ncaramelo\ndesignstudio\nuntouchable\nundertree\nheotun\nreadymade\nodagiri\nhappychan\nmalhotra\ntheman\nmonophony\nbexo\natak\nrockband\nblee\nhypersonic\nbom2\ndaca\nb44\nwwww2\nb42\ndang\ndaze\nb36\nlavidaesbella\nb34\ncnnc\ntoko2\nk100\nws115\nachil\ndaydream\ndmar\nedom\na34\nmail01.test\nmail02.test\nmail002\nl3\nmail03.test\nl4\ndogo\ndope\nip28\ndraw\napc02\neins\napc01\nfajr\nduet\nnserver\ntopping\ndw2\nnds2\ngams\ns98\ns99\nrakesh\npoverty\nnwww\nstudentweb\ns246\nmangoo\nappmanager\nsmsgratis\nfram\nggrw\namnhac\nmacpro\nwww.lmarsden44.users\nwww.pauldemo\nwww.dariuskrtn.users\nwreck\nwww.plugins\nfugu\nmstest\ngodi\nwebdisk.newsletters\nlicense3\nnederland\nmanyou\ntypo3.sapin.users\ngoon\nwww.daz134.users\nibar\nggi\nidle\nguuu\nhmmm\nprediksi\nfeminine\nwww.joomla.demo2012.users\nsnot\nmingming\nnautica\nmaxa\nsmsdemo\nhuhu\nxswyh\nccie\ncliche\nsunclub\necargo\ndhcp01\njyxy\ntmgc\nnewftp\ninfi\nrcu\nbooklog\nsecu\nhxhg\nwww.antoniom.users\nwww.sheldor.users\njjjj\nbigip\nwww.reiki.users\nirun\nqunar\nkatz\nwww.paigilin.users\nheyyou\nnightshade\njota\nwww.jakarta\nwebcounter\nkualalumpur\nnanjing\njoss\nbbarchive\nppg\nweb-local\njoya\npauldemo\nteam2\nwww.tonyawad.users\nwww.lsg\nwww.ankita.users\nbrilliance\nkito\nlama\nyz.pass\noldimap\nrha\nmmf\nwww.stl\nmarmar\nkody\nmainte1\nimycro.users\ndemo2012.users\nwww.frankstar.users\nbackup1-11\nssl-1\nwww.abdallah.users\nrouter1-main-ex\nsv30a\nmbackup1-1\niahead.users\nfirey.users\nssl-2\nwww.im21.users\nrayalgar.users\ntest25.chris25.users\nwww.sakkoulas.users\nrouter2-backup-ex\nmysql10a\npsychoman\nrouter1-backup\nmysql6a\ntombutlerbowdon.users\nmysql7a\nsv50a\nabanob20.users\nffv1000.users\nmysql8a\nmysql9a\nsv31a\nsv32a\nsv33a\nsv34a\nsv35a\nrouter2-main\nkoki\nwww.rams.users\nrouter2-backup\nrouter2-main-ex\nrouter1-backup-ex\nrouter1-main\nkoku\nrohitwa.users\natera.users\nsa3eedahmed24.users\ntanx\nkoob\ngame8\nwww.mefistofelerion.users\nwww.test25.chris25.users\nbehappy\nksas\ncourts\nrevenue\nspider2\nfoghorn\nffr\nrsan\nextdb\namirdaly\nlinuxv\nmapo\nwww.holway.users\nkunu\nblueline\nextender\nanghel-andrei.users\noice\nlmarsden123.users\nnorthern\nlmarsden44.users\nwww.chris25.users\npressoffice\ndariuskrtn.users\nkobieta\nvolley\nmichelin\nloin\nwww.kobieta\ns0s0\npnw\ndaz134.users\nwww.arh\nwww.srt\nss7\nwww.nica.users\nwww.sa3eedahmed24.users\nsignupsyeah.users\nocreg\nocvalidate\nswieta\nwww.irfan.users\nwww.eis2sip.users\nyayan\nnacc\nwww.uz\nnovipazar\nautoconfig.bancuri\nwww.samm.users\nwww.academic\ntlabrvt1\nautodiscover.bancuri\nwebdisk.bancuri\nmiro\nrushabh1211\nnamo\nslotmachines\noracle-dev\nwww.anghel-andrei.users\nwww.uta\netk\nmoab\ncloud10\nwww.bindas.users\nocr\nreso\nkarcher\nkkp\nankita.users\nhartmann\nmnmn\nnesi\nnewindian.users\nwww.punniamurthi.users\naidycool456.users\ndef\nrohit.users\nneru\nresultados\nmold\nnativelife\neclinic\nwww.maroculous.users\nmobile10\nfris\nmong\npast\nproxy7\nmoth\niine\nskg\ndownloads3\nno11\nuks\nnms1\nt2t2\nstgadmin\nalsalam\nsysdev\nirsdev\naii\nlilboo\ntestluke.users\nmusk\nwww.grimothy.users\njilin\nhefei\ncomunicador\nchengdu\nxiamen\nfbtest\nwww.mailinglist\ntrain2\nwuxi\nhaerbin\nchangsha\nkiddy\nbeavis\ns2test\njian\nwww.phoenixguild\ngargamel\nnosy\nytube\nwww.amy\nroswell\nblog.yasirakel.users\ntianjin\nzibo\nvs15\nchongqing\nsoprano\nblueocean62.users\nfunworld\napp11\neric3\npedo\nfmd\nfsu\nliberation\ngoi\nwebdisk.service\nautodiscover.service\nkiabi\ngraylog\nautodiscover.intranet\nmv1\nautoconfig.intranet\ndataexchange\ndcx\nwww.joergd.users\nloller\npitt\nwww.lmarsden123.users\nwebpoint\nwww.cosanostra\nhighaltitude.users\nus06\npoda\nbowwow\nlibssummers.users\npoom\nyey\nlocalmail\nwww.elysium\npopi\nspell\nsomethingnew\nchillisauce.users\nbj01\nwww.devon\nraha\nwww.basement\nwww.signupsyeah.users\nmail.toy\nmaybee\nsnipershot\ninmail2\nramo\nwww.trial-022e98.users\nwww.yasirakel.users\nrash\ngameinfo\nse02\nvs20\nscreens\nnevercry1.users\nimages9\napologize\nsoora\nboobytrap\nsaem\nmailt\nantoniom.users\nzaphod3\nhopper\nadplacer\nwww.trillian\npinkads\nhotblack\nwww.abimassey.users\nwww.zaphod3\nogc\nwww.lessharma.users\nwww.hotblack\ndedibox\nsavy\nwww.magento.demo2012.users\nwww.paulgwyther.users\nwww.wonko\nwww.jeltz\nsdat\nreiki.users\nkatharsis\nmeno\nmaud\naftershock\nwww.typo3.sapin.users\nroy.wang.users\nhelene\nseen\nwww.aidycool456.users\nwww.ffv1000.users\nsele\nyotsuba\nmail.song99\nroco\nsong99\nnodo3\nnodo1\nroop\nnatur\ntomandjerry\nsmoothie\nfs21\nfs20\naun\nrrrr\nadcbs.users\nfs19\nmail.avgame\ntippspiel\navgame\ntatu\nblu-ray\nreseller1\ncx1\nwww.donkey\ncollaudo\ntazz\nkanna\nsawa\nsnsd\nwww.androidctc.mefistofelerion.users\nvoucher\ntsumo\nonkyo\nbitbit\nnn1\nmh3\nssis\nssuu\nhomenet\nsuni\nsupe\ngrange\nsmtpdel\nfishman\nzappy\nmorethan\ndecade\ntpemail\nwww.bayern\nktest\ntrice\nwww.sphere\ntune\npaigilin.users\nycbf1\nnew-web\nstream12\nsynca\nwebi\nsecureapp\nwien\nhayley\ncrpm\nguadalajara\nmonterrey\nwww.rohitwa.users\nwww.frame\nwww.dad\nwww.cws\nwito\nxboy\nsrv26\nstaging.services\nxoso\nmino\nzero0\nwww.scm\nsrv42\nwww.hod\nzeron\nyoli\nwww.algeria\nbindas.users\nrougugu.users\ndelfi\nbamboobites.users\ndbdb\nzhen\nziya\ncamellia\nzoop\nyomyom\nns261\njxzy\nns152\nlivingtodie\nsvn-source\nhoainam\ntonyawad.users\nwarden\ncuncon\nmagicweb\nnat510\nvip900\nvip600\nwww.blueocean62.users\nefsaneforum\ntrial-022e98.users\nbeshoy55\npreityzinta\nleggings\nmido92\nkakarot\nantitrust\nfilmovi\nfrendz\nbeachboy\ncerisier\nmindstorm\nsupernovice\namir2007\nmervyn\ncorvet\ncorbin\npapermachines\ntra2002\ndracomalfoy\nsylfaen\nblade03\nblade06\nndsunix\nzootycoon\ndreamer30169\ndjc\nexamene\nfreersgold\ndemo24\nportal4\nblade05\nblade07\ndemo28\nabdallah.users\ncdac\nrapidshar\nyeuem\nxnews\nwww.faith\negystar\nmatfiz\noldshop\nwww.massivegreyhound.users\nshanerhodes.users\nyatie\nshankey\nwww.new.newuser.users\nminhdung\nnas0\ntopspot\ne0\nrapier\nwww.ausbildung\nwww.rural\nmanojm\ncustomer1\nwww.b12\nesx02\nfortyouth\nautoconfig.audio\nwebdisk.audio\nrett7.users\nandroidctc.mefistofelerion.users\nkasino\nsd2cx1\nautodiscover.audio\nmamali\nsecuritys\nsd2cx2\nvonline\nwww.libssummers.users\nsd2cx3\nsd2ca1\nsd2ca2\ntoplink\nsd2cx4\nlagiator\nse7\nmagnat\nhegemonia\nshababy\nprayer\ncmtk1\ncmtk2\ncmtk3\nbirk\nugyfelkapu\nspiruharet\nlibyan\nwww.wpeasy.users\nwebdisk.black\npinga\ncheckit\nvedat\nlb-www\nwww.dijinkumar.users\nnanoicom\ndarkshade\nsdb3ko2\nwww.chillisauce.users\nsdb3ko4\nwww.90\ntoual\npaulgwyther.users\nsuzie\nrealdreams\nazizim\nsdb3ko1\najans\nsdb3ko3\nspic\nsexystar\nwww.sipac\nproxy.ccs\nvat\nstaffing\nyoung2\nwww.sigaa\nwebdisk.meteo\nmissingyou\nwww.realbusiness\ndilemma\nalex18\nchiemi\nmail83\nmokka\nfwe\nmail51\nmail48\nwebmail0\nwww153\nwww202\nserv148\nnewuser.users\ngate6\ngrowth\ngrowup\nwww212\nautoconfig.coupon\nautodiscover.coupon\nwebdisk.coupon\njenkins3\njoomla.demo2012.users\nwww215\nmonkey02\nfiledrop\nk1000\ngreatescape\nwardrobe\nphilos\nlessharma.users\nnegro\nfastukhosts.users\nwww200\ncretiveadmin.users\nwhitemoon\nyourdream\naccura\nzxcvb\nmegalodon\nkonoka\ncooler\ngslbdns3\ngslbdns2\ngslbdns1\npps2\nproman\nmr2\nexchange2007\niapple\nnetmaster\ntele2\npavlodar\ntictoc\ndonskoy\nelmi\nshum\nveille\nohrana\nunions\nqbusiness\nbousai\nsloan\nwww.osi-app-new\nsaray\nlinkshare\nswicki\nautoconfig.kino\nwww150\ntestmy\ndb.test\nwebdisk.kino\nautodiscover.kino\nx.www\nlearnmore\nssologin\nengine1\nstarlike\ntoip-cluster\nuzem\nvelona\nwww.atrium\nrealbusiness\ncyber10\nkukku\nwebdisk.faq\nwww.firey.users\njoergd.users\ntriki\nilahiyat\nahmet\nnerima\nwarframe\nhachioji\nenglishgrammar\ngabor\nuxasr01\nradtest\nfef\nincludes\ninsanity\nuntech\nux-mailhost\nwww.krs\nmanama\nolopa\nbusan\ndiklat\ncreamy\nvpn113\ncutebaby\nnapas\nloveit\nagx\nuxwr1\nuxnbacu101\nnetlive\nstarstar\ndema\nwww.iahead.users\nunused\nvisitoradmin\nsmarttv\nwebctdb\nwildcard\nuxpbasa01-pnr\nu1-00-b1-sw03\nyulia\nbeloved\nws185n185\nzerobase\nprison\ntelemedmon\nuxr2\ntll\nslivon\nthb\ndenzil\nrayray\ndcgaming\nna2\nilya\ndilmun\nriche\nreally\nillusionist\npln\ndream2013\nidream\nplanethippo.users\niot\nxwb\ncaliope\nefax\norchard\nthang\njhome\ngoldstar\nwcedge\ndevman\ndesign007\nashtray\nawo\nwww.apc\ndpm\nwww.ukraina\nwww.ramazan\nstage-api\npalmbeach\nsharetest\npr3\ninertia\npr4\npr6\nebichu\nt222\nhwarang\nwww.calls\ndroplet\npr10\nbbs9\npr11\npr12\nuattravel\nnbg\nwww.showman\nrenplace\nanalyst\nshowman\nxserve1\ndistrict\nwww.tijger.users\nnakaji\nftp42\nbrookland\nftp40\nreizen\nftp36\nftp35\nusanet\nftp34\nmail-new\nwww-php\nftp32\nbic\nftp31\nmichael.users\ntheisland\nwww.ieee\nhongda\nwpeasy.users\nhillcrest\nftp41\nkouprey.users\nftp38\nhenderson\nlonelyplanet\nwhs\nftp37\nntest1\niismtp\nlightspeed\nftp39\noracle2\nosceola\nkhs\nswitch4\nfrankstar.users\nwiki1\nwww-stage\nwww.planethippo.users\nwin33\nwin46\ntixiliski.users\ndefinite\noracle3\ndemo29\nwww.qazwsx\nparadiso\nthorin\ntropicana\ndetective\nautoconfig.ad\njmorris\nbelgium\nwww.finland\nautodiscover.ad\nwww.atera.users\nsunny1\npc122\npc123\nwww.austria\nwww.ireland\nchicago3\nwww.norway\nwww.zave10.users\nautodiscover.bt\nchicago4\nwww.lithuania\nchicago5\narttime\nfreeonline\npc251\nsolitude\nsolidarity\nstaycool\nexhub01\nexhub02\nhimalia\nbatist\nwww.bamboobites.users\nshoppingmall\niae\nmacabre\nhost198\nhost197\ninfected\nhost195\nloveletter\neternel\nhost189\nhost184\nnewns1\nhost182\ndokeos\nhost179\nhost178\nintuit\nkillers\natoll\nhost169\nhost168\nhost167\ndladmin\nhost165\nhost164\nhost163\nhost162\nhost161\nhost157\nhost155\nhost154\nhost153\nhost152\nhost151\nloopback-net\nhost149\nhost148\nhost147\neastside\nhost145\nhost141\nhost139\nhost136\nzippo\ndav.ox-sd\nmatra\nhost129\nhost128\njacker\nterni\nomeka\nstacks\napptest1\ndododo\nbermuda\nseabass\nlovelovelove\nvps20\nqwer1\nkhurram\noana\ncalligraphy\napotheke\nmailengine\nfeed1\njoomla15\nwww.erasmus\niwamoto\ngodfrey\nfib\nwww.arte\nwebfree\nwww.note\nvls\nldapmaster\nwww.images3\ndomdom\ntestads\nleporis\nalhimmah\nwww50\ndjclub\nhost200\nhost180\nsamwise\nhost159\ndsvr2\ngroup11\nib1\nmoneymoney\nwww72\nmail.us\nwww60\nwww70\nsr6\ndcf\nsaguaro\nwww76\nwww59\nwww69\nrakon\nhost192\nsr5\nhost187\nhost186\nmojito\ndev-support\nhost207\nhost191\nhost190\nreal1\nhost185\nhost183\nreal4\nwww.demo4\ncef\nscca\nmoodle4\nhorairetele\nhost166\nhost158\nwww.task\ntarantella\nsmtp23\ndispute\nhost156\nwww.jacksonville\ngalaxyworld\nnetmax\nhost142\nhost140\nhost138\neres\napache2\neduserv\nifs\napache1\npc08\nmultigame\nsalvia\ndextro\nsoutheast\nsamsam\nsamsun\nmontes\nmimmo\ntealeaf\nsuper12\nellipso2\nn33\ndp1\ngart\nmashhad\nexistence\nsbc2\npirouette\ndreamy\nj6\nup6\nwww.p1\nautodiscover.calendar\nform2\nautoconfig.calendar\nform5\nhellyeah\njkoecher1\nelog5\nstjohn\nhost160\nlastone\neis5\niag\nbasie\nvil\nartic\ndownload7\nfreefiles\ngliwice\nprintec\nip48\narukikata\nstorytelling\nocn\npicturesque\nindividual\nzucker\nusa3\nimmune\nd1002225\nd1002101\nd1001440\nborder2.nntp.priv\nborder3.nntp.priv\nh89\nh64\nh61\nh58\nh54\nh53\nh52\nh47\nh46\ncrafty1\nh45\nborder1.nntp.priv\nh44\nh42\nwww.vidhyasagar.users\nh39\njoon.lee.users\nh33\nh32\nalpha99\nh31\nh65\nh63\ngcf1-rr.nntp.priv\nalt-relays\nh40\nagroweb2\nborder4.nntp.priv\nh60\ngcf2-rr.nntp.priv\nfafnir\nvanburen\nh59\nnode11\nastat\nchangepoint\nipos\ntijger.users\nvax\nhyperv\nyyc-border\nbonds\nwww.frm\nsnorlax\nldapadmin\nuasdb-scan\nfishbowl\nwww.genealogie\nredwolf\nautoconfig.laptop\nautodiscover.laptop\nwaterwater\nwebdisk.laptop\njejeje\nwww.dave1\ndoghouse\nisildur\nms4idrac\nsol2a\narray\nstatdb\npostfix4\nbweb\npostfix3\nhumancapital\nam2idrac\nwww.mdi.users\ndosya\nlkm\nkars\nms3idrac\nvmserver\nuranus1\nns232\nns212\nam2a\ninternetru\nds437\nms4a\nam1a\nactivenote\ninvftp\nadore\nikou\nslack\nam1idrac\nmedblog\nseed01\nmedianomika\njmw\nkab\nmailstore01\njcb\nsweetdream\nsmup\nkafka\nhydrangea\ne-card\ntiktik\nwuli\nfairfax\nzhongkao\nsmh\nanxiety\nbigworld\ncarrent\naimer\nsendai\nnel\nshisei\nbagel\nfb-apps\ncoldheart\nahuntsic\nhgj\nbeams\nmail.secure\nfinam\nrambler-tier\nnnn-i\nstars7\nmaster1234\nrambler-test\nf116\nwww.con\nnbt\ndududu\nn226\nn202\nmight\ncummings\ne-club\ndrishti\npee\nkulabyte2.lab2\nlive1.blr1\nsmtp-rr.srv\nin2\nsyslog-rr.srv\nwww.manga\nwww.nauka\nwww.rpg\nlive5.bitgravity.cpe\nv2.core3.sfo1\nhttp-rr.srv\nlive2.blr1\nzxc123\nbgp-rr.srv\naxfr-rr.srv\ninfocentre\nwww.trust\nntp-rr.srv\nsberbank\nsnmp-rr.srv\nmysql-rr.srv\ntacacs-rr.srv\njatim\ntftp-rr.srv\ngestor\nrdns-rr.srv\nrav\nwww.astro\nshazam\nldap-rr.srv\nkallum\nkdc-rr.srv\nrenwen\nefriend\nkickstart\narden\nbodyguard\nautodiscover.downloads\ntcdn\nfujitsu\nautoconfig.downloads\nhardik\nkingsfield\nsaveonline\nlololol\ncbi\nqa.tools\nwaitting\ncouture\ntestintranet\nheroine\nlovedream\nmoondance\njabberwocky\navant\nnintendowifi\nsgames\nwithme\nwww.mailman\npromail\nblush\nssr1\nsetup2\nromero\nwebpage\nnetscreen\noceano\ncench\nides\nnoroozi\nelodie\ntimewarp\naniworld\nautoconfig.cars\nwww-beta\nwebdisk.cars\nwww-5\nchata\nautodiscover.cars\nkumsaati\nesporte\nkyouei\nmuscat\nboyet\ncider\nlimelime\nchoya\nequip\ngb3\nmaps2\nvisio2\nvisio1\nggl\nantibes\nagadir\namericas\ngw-mx1\nvps02\ndadan\nnl.test\nluckystrike\nucms\ndigitalclub\ncipot\nterminal-uk\nuk.test\ndaili\npanmog1\ncdh7210\nhispace3\nbybarang1\nplayonline\nteaks2hyun\ns1devsf\neko2\nncre\ngosibook\ncemerald\nrc21com\nkshcow723\nunionptr2870\nsunbow6958\nllux7831\ndemoself\ns1devnj\ns1devsky\ns3freeintsf\ngomooke1\ncutemate\none5303\njr286tr\nomega1\ns1devhn\nangkotr9019\nisaac87\nretonar2\nretonar1\ns3freeintnj\nipaydaejimobile1\nwithpace3\njsy8656\ngo7art8\ngo7art7\ngo7art6\ngo7art4\ndero\nbbolemoosky1\nallgreentng2\npurperi3\ns1devsdg\nipayhybridin\nguqlrnt\nbizcsijang\nyeonsung-060\nkaewoong1\namazontr4268\nvenus2259\ngw-10\nsodosi\nblackbean2\nmielmp\nsanyaco2\nseeun003\nmiga01\nskingifttr\nlovemina\nantikimchi1\nhslv06081\nrksehfrns4\nsnnet7\njejuhbtr\ndoobedtr6434\nsnninc1\npumpkh\nsungeun21\nbizcenter11\nzerogolf\ndamha\njokag\nohs5301\nkillian2\ngdmgnsun\nautotest\nhaesung083\nysuri5\nbctraders\ndirtydelta\npoongcha1\nmanchu99\nsam5284600\neyo14682\nnewadmin\nhacker0\nsey5624\nsnnbyn\ntpoo8350\nbrush\nfoxdiy\nbabywish12101\ngametoday6\nsugolftr\ngametoday1\ndajoajoa2\ndajoajoa1\nrnfanf823\nsony723\njackie2372\nnajjang9\nartwell10041\nhans1544\nssuissui6\nssuissui5\nmi07285\nroastery2\nmi07283\nmi07281\njooh12\np999123\nmyjuyer\nkyoun1230\ncollw3\nbobbymom\nspacenoah\njbs0609\nhampil771\ncardupdate\nsiriusfrog2\nddengali3\ns3freeintsky\nseizerdlek1tr\nsejinkorea\ns1devman\nreagelab\ngodo3d-039\nkcompany1\nreytak\nsgv\nibb\nvvmmvv8881\nnabiggtr7399\ncivis\nhankrlee\ngodo3d-030\nopstree\ns3freeintsdg\nchaiwoon\nwlsdl04181\nnutraone\nbaeksehoon3\ndiolla\nquiltvalley\ngodo3d-020\ndavin\nbeautytr2068\nrendezvous\nsensekw\nansholic1\ncjh05101\nmeatnpeople\ngodo3d-010\niamcontr9499\ndjembe\nlily7979\ninno1121\ninno1116\nneotest2\nmoncrotr8732\nlili1206\nfoxlovely6\njayeonmiin\nblucelee2000\njiae71472\nwellnessia\njonga1\nyim04252\ninterbrain\ndbstksgh09\njnlee\nyh710404882\nyh710404881\nslko10041\npowernike\nnteam3\nnara2nara\nhjretail\ncmchair2\nmoleok20\nhadam85\nmoleok13\nmoleok12\nmyanb17\nmyanb16\nmyanb15\nmyanb13\nmyanb12\nmyanb10\nmrgravy\nphoto-story\nmslalala\ntkdmleh3\ntkdmleh2\nkitweb-010\neg6040\nmlist\nmaycoop1\nlover830\nhelenoh3\ntripleo\nsilverheaven\nkliccmart\nbioskinceo1\ns2mile\ns3freeintman\ncooks\ngaryong4\nplanm70001\nhucheum\nartmusic65\nbananakiwi\ntymca1\npulmoo\naromisua\ndingcs\npowernet1\ninspired\ndesignplus\ncartoon74\ncreep\nkds7606\nkizstar719\nmodainmall\nustivoli\nimdm\nmiz1041\nsmarthand\ns3devw\na01066662966\nhooyoya\ns3devp\ndist1\npartyplace\nds34\nmail.crm\nbenegen\ns3devm\njusihyeon871\ns3devb\nmaxjojo31\nipayspxlwms925\nipayspxlwms922\nipayspxlwms921\nkimchitouch\nnskway\nsmarthan1\ncameostar\nmegapeak2\npvckkk\neyesystem\nsa4318\nsimple9454\nsellstyle\nespoir175\ndcp4300\nwww.iceman\nsparkles\nenshriue2\nenshriue1\npamcom\nokcnc2\nmoser\nds123\nmichaela\nspeed1234\ndjdkz2\nmidpoint\nouruniverse\nbrody\ndonga\nnatural2\nvhost102\nvhost101\napia\ngmini\nahn6244\ntimeless\nphillip1\ns076121\ngac\nlukes\nyt\nassa\nblur\nducks\npannchat\nsmartfree\ntears\nmistica\nwin28\nshibata\nbong\nwebclass\nazel\nrealpro\njoa89\naprilseven1\nspornack\ndusty\nboyz\nwrmb12\nbrat\nwonilcnp\nkanade\nkyunh0\nsport113\nkeunpb\ncmstory\narchv\negold\nwww.999\nkamiya\nblender\nelastic\nmovzeetr6058\ndarkcity\nmp119\nredhatkill1\ngamebobs3\ndaehanmusic\nlsa412\npicupu10041\ndimito\ngawaa2\nkfaa2014\nofficeboy1\nrentalshop\nhuborn4\nhuborn3\nhuborn2\nhuborn1\nyounpark29\nchl4318\njs4u1\nmaryam\ndoogie69\neppie\nkaryban\nhopy5983\nmyoungdesign\nihee08142\nhellomagic\nsijjsijj\nsj50425\nnamph50\nami5407\nrecipe1228\nfoammake\nsoccus\nmidan2\ngodoweb2\nx6\nup2011\ngaile\nwgna61113\ngandu\nshishido\nkoryo\nfixed\nhotsauce\nmoldscooterclub\nbesakura\ntriplek11\nreplay57\ninnocence\ncampingpoint\ndios\nmandala\ntserver\nmisocorp1\ncrmdemo\ntheyasmina\nprovo.tile\nsrvweb\ngodovs16\nwww.za\njomart\ntema76\njsgonno1\nyali8922\nds24\nhucenf\nflyit7771\nhazen\nyounguijung\nhkfishingtr\nbumilion9\nbumilion8\ncfmallcash\nx428ma\npleatsme\nabaoaqu\ndevit\ngurye100\nnannuni85\nkdgtl\ndm2\niocean20121\nbulezou1\nsmpp6\npoliticas\nvsnl\npony0701\nsms07422\nbodynjoy\ndona\nretrofactory\nhepimina\nplusbeam\nlavastone1\nfire2\nteafood2\nmahim\nfourm\nsmart3\ndrill\npartyween4\nhawkeye9\npaleum\nbilety\ngiare\nwjdals5611\ndarkprince\ncat1\ncalverton\nthewestvillage\nvoyager2\nseie5687-089\ngodoshop-040\nrumagirl\njovial\nrmx\ntwelve\ngodoshop-037\nwww.bsec\nbambie\nsilas\nhukiworld\ngodoshop-035\nalchemist\ngodoshop-034\njoodung\ngodoshop-032\nmongo1\ngodoshop-031\ngodoshop-030\ngodoshop-028\ngodoshop-027\ngodoshop-026\ngodoshop-025\ngodoshop-024\ngodoshop-023\nlimjh63061\nhiex\ngodoshop-021\ngodoshop-020\nkekkon\ngodoshop-018\nwww.hiex\ngodoshop-017\ngodoshop-016\nmisba1001\ngodoshop-014\ngodoshop-013\ngodoshop-012\nwww.zel\ngodoshop-011\ngodoshop-010\ngodoshop-008\ngodoshop-007\ngodoshop-006\ngodoshop-005\ngodoshop-004\nfroyo\ngodoshop-003\nwww.thewestvillage\nwww.copper\nwww.xp\nwww.twelve\ncandyfactory\nudo\nautosystem\nnsd1\nsegreto\ngodoshop-002\ngodoshop-001\namts\nlsw4378\nskymoon1\nkimjs28125\nkimjs28123\nigrp\ndaejinclub\nenyo\nseie5687-079\nomdesignkr\nmudra\ndfmaltr5155\njoinmedical\nlnt\neltpark1\ncybermedic1\nmail.jp\nvtf07451\nheros\nmalka\nkcroad1\nkimp2\nnamph40\nseie5687-073\nseie5687-072\nriken\nowa2010\ntamura\nbraxton\ncocco\ndangerous\nseie5687-071\nlhy1pys\nseie5687-070\nkctyb11\npawlitic\ndaniella\ngrain\nseie5687-068\nkidstravel\nhyung05021\nlsc4455\npharmsave\nwosung2\nswpaper1\nonlyyou3\nonlyyou2\nspoonz1\nranju\nnetservice\nj8\nlear\nmguess\nthetop\nseie5687-060\narttest\nitaly2\nitaly1\npolorl28\nbesttour\ngrimm\nachim\nremover\npolorl12\ngonatural\ngmc0072\ndmsql121\nmiainkorea1\nlovehome\nhatena\ns9356s\nchunamujuk1\nuzumaki\nwaterlily\ntesthosting\ndetoxkorea\ninduk1-040\ninduk1-038\nreorder\ninduk1-036\ninduk1-035\ninduk1-034\ninduk1-033\ninduk1-032\ninduk1-031\ninduk1-030\ninduk1-028\ninduk1-027\ninduk1-026\ninduk1-025\ninduk1-024\ninduk1-023\ninduk1-022\ngreenb\ninduk1-021\ninduk1-020\ninduk1-018\ninduk1-017\nlogosmart\nthefacebook\nopportunities\nfindme\ngeophy\nsimbata\nanonym\nsnowwhite\npfa\nmaplezone\ninduk1-015\ninduk1-014\ninduk1-013\ninduk1-012\nnewfoundland\ninduk1-011\n248\nfiddle\ninduk1-010\ninduk1-008\ninduk1-007\nriri\nmyzone\nplutonium\nvendorftp\nhappyman\npp2\nmailcontrol\nratio\ninduk1-006\ninduk1-005\ninduk1-004\nskyweb\nironwood\nnara118\ninduk1-002\ninduk1-001\njpboom\ncellexc\nonlinemedia\nseie5687-040\necoearth\nsmilee\nunivers\nesn\ndole\ncreators\nwww.camelot\ntanada\nazi\njoanne\njokong\nkimbok10\nsisgirl\nparkhawon\nhandostr8771\npeace96902\nizzy08018\nizzy08017\npeoplenbeauty\nmicasatucasa\ndresdenpp1\nkoalamart\nwithaylatr5289\nthecristal\niphonern3\nspec01\nseie5687-030\nsensmall\njomo\nseie5687-028\nnonggigoo\njoven091\nrnlqls06\nzenheist\nnovelty1\ngood3931\ncahaya\ncolorparty002ptn\nbiocospharm\nseie5687-023\nsaku435692\nseie5687-021\nbdsblog3\nmassacre\nwebdisk.chef\ntenichi1049\ndaisuke140\nseie5687-019\ncuwoocuwoo\nhostingblog\nbugtest\nsvadba\njazzy\nsuperadmin\nwebdisk.fashion\nswacom2012\ndotmail\nparceiro\nsktoolz\nemsp12053\nseie5687-012\nwww.wh\npimpin\nmoonstruck\ntamworth\njetty\ncgj\nservertest\nknchintr9652\nchocolat\ntotoro\nwinserver\nkabel\nisty\niwork\nseie5687-011\nahi\nguard2\ntricounty\nmurapic\nloadtesting\nfs9\nnashua\nfacebooktest\nvanessahur\npluse\nmarchen\nserverhosting254-239\nbrowns\nseie5687-009\nh128\nrp2\nkeroo\nblr\nwoodbury\npopov\ngeorgetown\nknigi\ned126861\na-dtap.www\ndev.ident\nrevel\nitsti\nfwupdate\nmspark3\na-dtap.klm\ngiftbaskets\ntenorio\nsankei\nestargolf1\nmspark1\nci.dev\ncollie\nlims7738\nwakalee\nbartlett\nnutter\nchemics\nsommer\nferienhaus\nwebdisk.adm\nmyvpn\ncress\nimstore4\nharada\nprev\nml1\nchoianne-010\nahabeauty\nili7067\nseie5687-001\npepedeluxe1\nmoadesign002ptn\nclark1112\n09jungle\nahn4817\nqtmagpie1\nkkimkki\ntouchptr2555\nyg2213\ninnofoodi\nfruitage2\nkkang75652\naux\nsemele\ngestionemail.pec\nhouchukyo\npos2\ns2fsdevsunny\npeg\nshiga\niyatoy\nshows\npablopark\napolo25\npiao\nx60\nslt\nxfb\ncitylife\nv13\nsamaa\nv7\nsyokunin\nczj\nerebe\nsfj\nnatukorea\noneweb\nhushin2002\nmixuk71\nk2cine1\nyhahsw\ngmgleeyz\nneree\nfzb\nmaruko\nsteropes\nkplaza\njcj\ncourt\njgj\nomykeytr5098\nbrontes\nsaika\nnamph19\nfrontal1\noptima2\nlcy\narrows\noptima1\nfujinokuni\npacksun2\nxen01\ndedale\nbujaok1\neje\nmicaad\nitree\nsusil\nnesting\nsaher\nseohae1\ncms-test\nsearch7\ndajungmotors\nlevanthanh\njohn11\ngentoo\nloyforever3\nmail.store\nloyforever2\nloyforever1\nstock01\nlogger2\nmsg1\nautodiscover.domain\nwedcoupon\nawaji\nbesthost\nwping515\nboxiz0013\nboxiz0012\ndealernet\nghktjdrldjq\npc8\nastech2337\nwww.ies\nubytovanie\nautoconfig.domain\nmgw2\nspak\narin0822\nxyglc\nvw2\nwebdisk.map\nurushi\nitory\nbaoming\ntaihei\nlijun\ndahanoo\ngeryon\nruter\ntkatka33\npagodapan\ngoodhope2\nbillboard\nysxy\niol\nzbb\nwww.rajasthan\nrajasthan\nqu\nsmartfarm\nlamda\ndurian\ninger\niao\nwega\ntyxy\neconomic\nsqlmonitor\nvotus12\njr761\ndhrwngmll2\ndhrwngmll1\nwbw\ncartier07222\nyjcjms2\nicbc\nnetcity\nwebdisk.ecommerce\nsu2230\npalikorea\nairljs2\nreception\nwebcluster\nalways\nairljs1\nitwiki\ndemoofix\ngananhan\nzhibo\nsoban5\nruthie\nfujin\nsoban1\nadsimg\ntell\nwww.nour\nkislovodsk\ngreatmunkoo\npushkino\nmurom\nvillainy\nyushin\nkorolev\nkomsomolsk-na-amure\njengokk5\ncomodoto\npervouralsk\nseiko\nooollooo81\nzooone426\nfilter1141\nbodapnp\nh001\nbeniya\njhsi10044\nessentuki\ndesdemona\nwww.ppma\ngratinus\ndreamlandco\nrsmc\nhlssci\nwww.scarf\nevserver01\nscarf\nag-control\nwjdxodid\ntcvpn\nwww.eat\nkbmtb\nphoto5\npinhole\nelimsori\nitmro\nms0107\nez2\nbockhan\nmd02\nhcglobal\nmd01\nvip254-9\nvip254-8\ntocarpianoadmin\nxn980b51ng3co8ntr\nweblogsadmin\nbakingadmin\nblocs\ndreamdipot\ngusqop\naorwn6971\nsjinsji\njoungage\nsn3\nilove471\nsoul3523\nforceout1\njewelrybouquet\nythsun\ngumigagu\niucon\nmidtiti\nsjsearch\nfreebiesadmin\nhabosae\ncopyrental\noh72184\noh72182\noh72181\nhaemin3425\nmhr\ngaylifeadmin\npowerkjin\nusconservativesadmin\njjaturinamu1\nuseven1\nonline-booking\ngrandparentingadmin\noverce1\nnob\nmwb\nanh-mobile\nanh-t\nipodadmin\ngi414admin\ngamen\nanh-ipad\na-tha-2410-hn\nbornstory\ngosoutheastadmin\nhong1\ngi165admin\njjtech1\ntraveltipsadmin\ndsn\nndt\ngiaithuong1.diemthi\nlistadmin\ngoneworleansadmin\nasumi\nmoneyfor20sadmin\ndistancelearnadmin\naichi\nastrologiaadmin\nlsp\nhnth\nhinhanh1\nurbanlsladmin\nnaracnc3d3\nmhjjyy\nlsc3103\nctc825\nhajung486\npolostar1\nkurage\ngovancouveradmin\nwaterqualityadmin\njayecas.users\ngenki\ndecoy\nmefistofelerion.users\ngi92admin\nmcprepacc1\nwebbuilderify.users\nmassivegreyhound.users\nbitcoinbear.users\nanother.users\ncollegefootballadmin\ngi282admin\nkidsfashionadmin\nmdsuburbsadmin\nsaikyo\nsexoadmin\nwww.tixiliski.users\nbudgetstyleadmin\ngpsadmin\nwww.ddfgfg.users\nsjdns2\npzh\nsjdns1\nfuu\nwww.jacqui.users\ncooperative\nfx1\nbateriaadmin\nasakusa\nuktop40admin\nwww.tombutlerbowdon.users\nbto\nbagus\ndancemusicadmin\nwww.fastukhosts.users\ndineroadmin\nboxall2\nviewtiflow1\ndsyo331\njoocorp\nkato6\ngryphon\ngfgf2001\nistn1\nfamily1\nmil3034\nedorostr3920\noneorzero004ptn\ndc79231\nimpuestosadmin\nleegangju\njnss80\ngi408admin\nmirador\nmoadesign001ptn\nmidong262\nmidong261\nkasma\nitisp\nannason\nel19772\nyjo09061\naa09030903\nkijinceo\nipayjsegn\nhyflux6\nhyflux2\nduggy74\nhemplee1\nsbycs486\neco1004\nsmartedu3\nsmartedu2\nsmartedu1\nabp\noddpactr5315\nmacsadmin\njbj19992\ngardenhada1\ngrimothy.users\nkca\ngi160admin\nhelmet\nctzone\nmdi.users\nchistesadmin\nmaeda\nwww.highaltitude.users\nautonet\nwww.webbuilderify.users\nbbspecial\nasahisouko\nmotivacionadmin\npublishingadmin\nwww.rohit.users\ncoptvadmin\nautoconfig.futbol\nnew.newuser.users\nautoconfig.musica\nautodiscover.futbol\npolkadot\nwww.roy.wang.users\nautodiscover.musica\ntenjin\nmentalhealthadmin\ncompnetworkingadmin\nwww.demo2012.users\ndijinkumar.users\ntelephonyadmin\naao\ngezi\ncouponingadmin\nmacallan\nnat-eduroam\ngi129admin\nfoad\nwebdisk.eshop\nwww.rayalgar.users\nldap-ro\nim21.users\nneelix\nguinness\nautoconfig.eshop\nautodiscover.eshop\nwww-cache-out-all\nwww.testuser.users\nbebidasadmin\nwww.abanob20.users\nstarwarsadmin\nwww.anamul.users\nsearchnode\ngi86admin\nsheldor.users\ndrupal.rohitwa.users\nswc\nrams.users\nnydns2\njjy\nnydns1\nzave10.users\nbirdingadmin\nchat8\nvidhyasagar.users\nchat7\nescience\nwww.jayecas.users\nwww.bitcoinbear.users\nchat6\nyasirakel.users\nchat5\ndzp\ngettingengagedadmin\nwww.tmedia.users\nesstest\nguidepolls\nbizsecurityadmin\nwww.newindian.users\nirfan.users\nvserver11\ndrawsketchadmin\ntestuser.users\nvs36\nskidki\nwww.newuser.users\nwww.blog.yasirakel.users\nchicagoadmin\nwww.drupal.rohitwa.users\nimmigrationadmin\ncruisesadmin\nvideogamessladmin\nchessadmin\nmarriageadmin\ngayteensadmin\ngi403admin\nvgstrategiesadmin\nnica.users\nmilitaryhistoryadmin\ngi154admin\nbritishfoodadmin\nddfgfg.users\ntrabajoadmin\nhydrasearch\nrockclimbingadmin\nusatraveladmin\ngi81admin\nwww.michael.users\ngi271admin\nwww.kouprey.users\nceliacdiseaseadmin\nwww.adcbs.users\ncravens\nmeatandwildgameadmin\nsamm.users\nbssp\ngi490admin\nabimassey.users\nwww.rougugu.users\nteenadviceadmin\nhuntsvilleadmin\nwebmail28\nmagento.demo2012.users\nmmsoundadmin\ngi387admin\nclasstest\nwww.cretiveadmin.users\ngi148admin\ngi450admin\nknittingadmin\ncollegeappsadmin\nholidaytraveladmin\nvserver12\nwww.shanerhodes.users\nvserver10\nwww.joon.lee.users\nbeta.calorieconnection\nvserver3\nwww.testluke.users\nvserver2\nsitebuilder1\nhbh\nwww.imycro.users\nprobe3\ncareerplanningadmin\nbaproductions.users\neastbayadmin\nchris25.users\ntrial-54a4f1.users\nmulticulturalbeautyadmin\nwww.nevercry1.users\ncandleandsoapadmin\nennuevayorkadmin\nwww.rett7.users\nvoice1\nsw7\nwww.another.users\ngi265admin\nwww.widgets\nrubyadmin\npunniamurthi.users\nlondon2012\nhousehomesladmin\neis2sip.users\npersonalwebadmin\ngoeasteuropeadmin\nprmcorp-forum\nrealestatecaadmin\nsouthjerseyadmin\nanamul.users\ngi382admin\nxls\ntmedia.users\nwww.trial-54a4f1.users\nrealitytvadmin\ngi143admin\nmaroculous.users\ngoisraeladmin\nmysterybooksadmin\nboyscoutsadmin\nwww.baproductions.users\nseniorhealthadmin\njacqui.users\nhojasdecalculoadmin\nsugarfreecookingadmin\nbudgettraveladmin\ngi70admin\nholway.users\ngi498admin\ntvstream\npny100038\nlovehope\ngi260admin\nddrmabu2\nseokamzz\ns1shop\nmi07286\nlsjholsj\npaekguy042\ngodoedu48\ngodoedu47\ngodoedu46\ngodoedu45\ngodoedu44\nhnaksi\ngodoedu42\ngodoedu41\ngodoedu40\ngodoedu38\ngodoedu37\ngodoedu36\ngodoedu35\ngodoedu34\ngodoedu33\ngodoedu32\ngodoedu31\ngodoedu29\ngodoedu28\ngodoedu27\nsakkoulas.users\nproskateadmin\npestcontroladmin\nhorrorfilmadmin\nalanadi\nsantarosaadmin\nekip\nwww.ekip\nwww.phpmailer\nus3\npiligrim\nbluesadmin\nwallpaperadmin\ngi376admin\ncorporatedesign\nindianfoodadmin\nvideodev\ngi137admin\nmobiltest\nfriend4ever\ngocentralamericaadmin\nasianamcultureadmin\neddb.team\nwww.workfromhome\ntatuajesadmin\ngodoedu26\ngodoedu25\ngodoedu24\ngodoedu23\ngodoedu22\ngodoedu21\ngodoedu20\ngodoedu18\nj2ydiver\ngodoedu16\ngodoedu15\ngodoedu14\ngodoedu13\ngodoedu12\ngodoedu11\ngodoedu10\nelnino417\njounga88\nmiyjs13\ngehunhun\niks10091\nvoguentr4621\nenovia\nfreshers\nhomepmart\nallart5\nallart4\narumsaegim2\nsoapschool\njarrodlee\nkthkira\nlycos\nbodylink\nkkksi175\nkkksi173\nheasunggo\nmbp\npkteafood\nbonolang\nmailmiso1\nwidesign1\nhotpinky2\nbujacat\nbbmy4861\nskymap11281\ngold8gold1\ndbcjf111\nsnowz123\njadarmbi\nsym14701\ntsgim7015\ntsgim7014\ntsgim7013\ndragonjjw\ntsgim7011\nhealingsoo\nhyang777kr14\nmare15001\npjs8642\njustly2\nimage168\nimage167\nimage166\ndil\nimage164\nwww.magic\nimage162\nyudo93211\nemit1004\nziyun1\nginiginian\nggo9ma1\nmhj104693\ngi9admin\nimage113\nimage112\nimage111\nimage109\nimage108\nimage107\nimage106\nselrana3\nimage104\nimage103\nimage102\nimage101\nimage100\nsesdevsunny\npowerjkl1\ncsakks\nwooritelceo2\nspacejkj1\nisljh\nmiclove1\ndentalland\nzizity\ncd-rom\nwowgulbi3\ndjbank\noeufkorea\njo94511\ngtmen72\nseoes02\nkwons137785\nwinca\nbayi\nlavka\nwww.pressroom\nlauncher\nrehber\nmclist\nuseconomyadmin\ngtalk\npetr\nweirdnewsadmin\nheeland\nws-test\ngi64admin\ngi493admin\nukproxy\ngi254admin\npreemiesadmin\nfeminismoadmin\nkatalepsija\nma2\nma1\nhg3\nrapper\nfl2\npa1\nprabhu\nhome4\nmusicaelectronicaadmin\nyazd\ngoitalyadmin\ngermanfoodadmin\nwww.bushehr\nlifeminders\ngi309admin\nbreastcanceradmin\nruchit\nbombuzal\nbushehr\nwww.devcrm\nottawaadmin\ngi371admin\nbankingadmin\nwww.cable\nwww.lap\ngi132admin\namidala\ngoafricaadmin\nhomeelectronicadmin\nnonprofitadmin\nfilter4\nravehousetechadmin\npresenter\nwww.projekt\nspeckidsladmin\npaperless\ncreditadmin\nsecure.team\ndetroitadmin\nmyk\nuhstree\n30pr1k1\ns120.avatar\ngi4admin\n7h1ck71\ngiftedkidsadmin\nftpuser\npostad.hightech\ngsg-forum\n5vsjz91\nrhyolite\nzimmer\ngi58admin\ndicom\nwm_j_b__ruffin\ngi487admin\nholocaustadmin\ndiorite\ngi248admin\nmachardwareadmin\nwebdisk.img1\nnytstage1\ngroupbuy\nlagos\ngasprice\nweb-1\ncomputadorasmacadmin\njeansadmin\ngi106admin\ngi365admin\ngi126admin\ntheoneman\ncutegirl\nannuitiesadmin\nmobili\ngi396admin\ncoco67\nbuild.pages\ngi196admin\nsigil\ntest124\nsocialinvestingadmin\ndestructor\nnativeamcultureadmin\nintim\nwirelessadmin\nlojavirtual\njustgo\ngi53admin\nmedia04\nsaude\ngi482admin\nipayjugmaru\nheyarech1\njasangbox3\njasangbox2\njasangbox1\ndcjae83\nenjoydog2\nonlymystyle\ncsh168\nhwchunma1\nallmarket2\norang1011\noneorzero003ptn\ncosstore\nwhdlfgh90\nxspiders1\nsmartdev3\nsmartdev2\nguseod\nkch34p1\nhoon3264\nsevenhanse7\njnj3907\nsshnad1\nswtrading\nsweet88aa\nirshj\nzldry77665\nyerangmall\ninsun0917\nchunghonline\nmailspooler\nlimedeco1004\nkwons137553\nsysmax11\nannahra\nlovegolf\ncarrierzone\ngaru12\nhomeplaza\nxrion20121\ngadeuk1\nsgcorp11\ngfriendgs2\nnokyawon\nhyungyu4862\nwinkcg5\njkim0918\nhotaruru\nesumalltr\npagwow\ndhcrace\nmarbbal\ngodotalk\ngskim351\nyogodesign\ngadess6\nyoyojjim1\nwww.garage\nkds3547\nkmksound\nrayull\npkjy1219\ngodosiom\nunisel98\nfjrmal\njasung3\ndazzlingday\ngunwi4989\nht1216\nmomoyagi6\nyurimgolf\nmomoyagi3\napi01\nhanshairtr\nxunmei14\nxunmei13\namashin\nxunmei11\nxunmei10\nmirrato\nhmsolution1\nfizssy\nthegeacock4\niwanora2\nmagicart1\nuncledum5\nuncledum4\nbizcilsan\nmpdpp661\noceanblue2\nsuyi5316\nwww.sahil\nlions777\ndinplus\npighappy\nhadmin.seventeen\noskkage1\njys1994662\njys1994661\nssgulbi\njpl3061\nvanessa1\nmadeangel\naorvhfl9988\ncrikit\nross9006\nvision533\nvision532\njessie1010\nbronzehousetr\nimarketings3\niambylee75\nssk2231\neversell\ncafemaster6\ncafemaster2\nkmrloveu\nkinglionjay1\njooheej1\nrlatjdwk774\nrlatjdwk771\nsunspider7\nsunspider5\nfishing1231\nds49798\nrkarkarka3\nspomate\nrcn854\ndestudy1\nkej8399\nriravava\nseojiho3\nseojiho1\ngabimaru\ns4freedevsunny\nwww.gurgaon\nhoon2203\njjbb1\nlogthink\ncountryman2\njjanjjandc\nsogum92\npkwmyth\njackie23721\nseizerdlek3\nairing2\nskliving\nld0308\npremiummyth\nmorningpond\nfootball1141\npowerhong\npulip123\npowerhome\nlarc1729\ngi243admin\nplay0400\nsky27918311\nsohafancy\nenjoyday7\nkws79381\ncheezsaurus\njin2v\nteenketch1\nsoul1015\nw3bmaster1\nrayndy\njphoenix03\nmaychao\ndio712\ngoldflower771\nbkoutdoor\nantepost\ncurious001ptn\nbbchs123\nword86681\njyk1516\njinwoo792\ncocosin17\nevery091\nujako810\nnemo88883\nryan4ever012\nlovekissye\nmailnew\nqkqh7z\ntem2ya\npoohluna\nmimi5791\ncybergeni0512\njisy0331\nmydccokr1\nyeps001ptn\ncnhotelarv\nwjl1005\nssspsysss6\njjr09251\nnpblegift\nfirstkks1\ngopung7\njhnam\ngopro1\ngcf200\npink1313\ns1devmimi\nlpayton\nksd0913\nscmdemo\nwww.expert\nmymeetr8173\nshoesptr2592\npark1555\nkwons135843\nyeng0827\nnanna519\nvellashoes3\nvellashoes2\ngodoid-030\nbigneovega3\nsnfood\nrokmcajh1\nlannara51\nkerb75\nhuccaci\nanytoy\ngraceskms\ns3intkthkira\nkong078\ngodoid-020\nharcayo1\nmikael30\ndigitalhp\nellipia13\noneorzero001ptn\ndigitalgo\nwodms19472\neverygoods\nhaedolli3\ngayafntr7917\ntmbh811\njoeundm1\ndigitalcp\ns2fsqa\ndigitalck\nwoori54891\ndorositr5538\nwww.protocol\nyeil1101\nhumanbear\nanysky\nsunoak20111\ncentratr2549\nnewframe\nnicenury1\npotterjj2\ncafedavin\nnoblemobile\nfoxlike9220\ncjrosetr0389\nhbsfoodold\nyokurt9330\nermac\nseoul20133\nippum\nbsm7801\np4-all\nnarangbu1\niktc5539\nprodrug1\neventrain2\ngaigalu9\ngaigalu8\ngaigalu7\ngaigalu6\ngaigalu5\ngaigalu4\ngaigalu3\ngaigalu2\ngaigalu1\nkjh12143\ngaram70702\negland\nsoonmin2677\nsemir06152\nsemir06151\nlightvampire1\ntkshop-030\ntkshop-028\ntkshop-027\ntkshop-026\ntkshop-025\ntkshop-024\ntkshop-023\ntkshop-022\ntkshop-020\ntkshop-018\nraycop\ntkshop-016\ntkshop-015\ntkshop-014\ntkshop-013\ntkshop-012\ntkshop-011\ntkshop-010\ntkshop-008\ntkshop-007\ntkshop-006\ntkshop-005\ntkshop-004\ntkshop-003\ntkshop-002\ntkshop-001\nkalee995\ncanstudy\nindasom231\nimarketing071ptn\nsnkc1594\nneeke5435\noeufkorea5\nairpass7\nskyladder14\nbrandfactory\nkds1480\nmiele6363\nhanjubnd\nwww.debate\nskyinfini\nnaturekorea\nschooltr7902\nhym1987\nhorsecore\nanynow\nhanjumalltr\nhklkjs1\nmn7654\njiji05021\ngma21\nlagon2002\ndigital4d\nhavensports\nzerotest-005\nzerotest-004\nzerotest-003\nzerotest-002\nzerotest-001\nphobiasadmin\nthegglim\nok00yeol3\nengdevweb\nmentoree3\nsmassa1\nmentoree1\nkjhzzang102\nkjhzzang101\ncocosheis\nashgirl\ngodopost\nenamooselffs\ninvers132\nhada114\nwoosungdt\nmhm518\nganainfo\nbadamokjang\npjch9472\nchocolab\nwingpet\nellimtrade\nleavemealone2\nkhgd2743\nnekoidea\npurplehands1\nchengik2\nchengik1\nmervert3\nlastchance1\niconsu\nswirlkorea1\njoypaitr9417\nkbng6852\nivycos\nqhdgkduf12\nsmartttr7541\nprankencorea\nkhw0531\njucy421\nt48821tr1906\nmid181\nhanyinjijon1\nlimpass14\nokyk734\nautocaddy12\nwww.model\ngon08232\neatbag12091\ncsoulcompany\nlastfactory8\nkwons134521\nh85550101\nglasslock1\ns4freeintextacy\nfixisterhous\nbee20246\nthsalswo1\ndaewony\nsmilejudo1\ndollspia\nbys6210\nkimilgon103\nshininghairtr\nbronnum\nbadasatr7498\nkaruselli\nrainbow1004\nnetant\ngogotori1\njesusfor\ngreensoccer\nhijkl01\nservantjin\nhym1198\ntheshah\nnetstermnc\nshoppingone\nbarungil\ndigdug\ntsgim70\nimarketing069ptn\ndreamktr4076\nserverhosting254-210\njongyeol\nmwseo86\ncanada79\nbonnie2caret3\nju7023\nyangjumal\njongsoo\nxbtion99\nwww.experts\ncafemaruni\nlauradavis6\njin9805\njini8013\ngogotony2\npeace0945\nopstree2\nopstree1\ngbk20731\nhijungutr\nnggift15\nnggift14\nnggift13\noliveppo111\nnggift10\nmokdori2000\nkeunkim7\npradaas\nsnowin759\nsnowin758\nc4family\nk050326k1\nceltashop\nseungsunme\nkdwood\ngod2691\nhyun29182\nhyun29181\nmrballoon\nhegaon3\nss2inctr0712\ndudtjrdl1243\nsyncbird1\npspadmin\nirewithmall\npys06044\nrabombaram\ncoolmercy\nhwabantr1679\nvkvnflzk7\nbird123\ndoozy2013\nwolfnfox\nvictoriash\njmlotus3\ndecondtr7919\nzazak0200\nlsb7138\nskinnytr4415\npjungmee\nsmnews\nkent90\ncaviar11\nhloety\njan65681\njakespace2\nmhotelarv\nserverhosting130\nsmilechan\ndufmaql\nkdk05131\ndigiwear2013\nelccikorea\nredwolf7401\nbestsupertr\nk217171\nthesalt\nipayjes11052\nowlove79\npoopoo1004\njongu72\nzeusmarket\ns1devjonr\npuma0310\nfitsladmin\nilviet6\nilviet5\nilviet4\nbizcjaegi\nwnsdmlx1\nlureman\nm258ss\nsmart11\nlobchou702\nmantis3171\njinline2000\nampettr0590\nkjh09221\ncpaparky1\nkpmobile\ninptr\nindralee\nchatcentral\njtoh7151\nbeefood2\nwiki1234\ns86017\nmodesto6948\niblind1\npkj3924\nimys1\ncarebank\nserambank\nljc7403\nyoungsun1602\njongeuns772\njongeuns771\nwngks1013\nashelon\negoodnature\nmazdesign\nsmash47\nparkhc005\nzz6kies\nimarketing068ptn\nrvs4me\nhearing1\nrujsh13\nacerokim\nstarwarssi\nhcg32\nryoo711\norigin-mobile.devstage5\nmiracledu\nkpj7422\nkpj7421\nssyannie1\nyuni2901\nking2112k1\nlovol5\nkwons133158\nskytears79\nsera2tr5034\nnyfriend\nsamlim62\ngostmmr1\ndiekun\nbnjey62361\nkim7866\ngmb2002\nbaekjj24\nmchang934\nalcammtr0389\niamjjoon\nsofia409\nkwons132944\nsjae0111\ngogermanyadmin\nwogus1302\ndwpattern\nsmurfet\nseniorhousingadmin\nbemes97\nwezenbag\nblingme\nonchang1\nblueboo\nthepuln\nchowonherb\ndaewang\nharutr1420\nrelationsladmin\nwaikikiboy5\nwwxkorea2\ninkoa\nbaby1433\nnystylist\njonghap\nxsports3\nxsports1\ndksgytjd071\nkate21c\njfarm\nwooritool\ndidrns\ns3devmimi\nrathers0609\nsbh1692\nkdh74331\nbiniwni\nrepair2\nllsell1\ncheece1\ndjembes\nyena54250\nbestmr91\nssomuch1\no8naman16\no8naman14\njongfal\nkoreasansam\nhkfmbooktr\nsagazangg2btr\ncoana91\nmimartco\nhks0610\nneosense\nlifemma\ndinamico\nkyungmin-030\nkyungmin-028\nkyungmin-027\nkyungmin-026\nkyungmin-025\nkyungmin-024\nkyungmin-023\nkyungmin-022\nkyungmin-021\nkyungmin-020\ngroup1\npreview.equisearch\ndisabilityadmin\ngi142admin\nmesse\nnaturelover\npunzer\npromadmin\nquebecadmin\nallstate\nsaltfishingadmin\nzapatosadmin\ngi360admin\npurkat\ngi121admin\nguglzlo\nmanage2\nscotlandadmin\nangelz\nfree8\ntatar\nthyroidsladmin\ngi398admin\nloungearchive-forum\nfilmmakingadmin\nrasol\nkyungmin-018\nkyungmin-017\nkyungmin-016\nsexualityadmin\ninfo123\nmhammede\nsys4\ngi159admin\nchillywilly\nschizophreniaadmin\ngi47admin\nsanswitch\nconliv\nplaysadmin\ngrapple\npuypal\nfatherhoodadmin\nhp-test\nsasserver\npanicdisorderadmin\nkyungmin-015\nkyungmin-014\nkyungmin-013\nkyungmin-012\nkyungmin-011\nkyungmin-010\nkyungmin-008\nkyungmin-007\nkyungmin-006\nkyungmin-005\nkyungmin-004\nnationwide\ngi237admin\nwww.customers\nsamos\nnoc1\nkyungmin-003\nkyungmin-002\nkyungmin-001\nwww.multistore\ndimebag\nmontrealadmin\ncolours\ninfomed\naiman\nmultistore\nwomensladmin\nprescott\ncostumejewelsadmin\neventi\nconcorsi\ndiehard\nsociologyadmin\ndogsadmin\nanissa\nkidsinternetadmin\nhealingadmin\ngolftraveladmin\nabdulaziz\nconsoles\n160by2\nconsejosamoradmin\nwjdals6626\nkim7309\nviolleta1\nrerfan\nvision11011\nserverhosting254-200\nkys901\nthere80\nwatervis1\nyoung1107\np098792\nterracoms2\nyukkuri77\nvinegar2\npacoel\nlovemary4\nkanggoon72\nanegels9\nanegels8\ngojangi4\ngojangi2\ngojangi1\nshpark75071\nilyfe\nkdk03632\nideant\nserverhosting-monitor\nideanj\nimarketing067ptn\nedworld1\neightday1\nkwons132275\ngandg7\ndnp3368\nnewcrystal4\nenrental185\nenrental184\nenrental183\nenrental182\ngunahp\nenrental180\nenrental178\nenrental177\nfoodplat0897\nenrental175\nenrental174\nenrental173\ngagarin\nwww.go4it\nmiddleeastadmin\ngi354admin\nesx16\nwww.ps3\nmedicalsuppliesadmin\nenergyadmin\ngi205admin\nmidlandsadmin\nculturecafrancaiseadmin\ngi42admin\ngi471admin\ntype1diabetesadmin\naltreligionadmin\nshuzai.americanhistory\nallaboutbabyadmin\ndisciplineadmin\nbestmusic\nmensfashionadmin\ninl\npapps\ncyberweb\nmutualfundsadmin\namz\ngi348admin\nvif\nalena\nrugbyadmin\naaabbb\nrezgui\nstroyka\nshizzle\nenrental172\nloverz\nenrental170\nenrental168\nenrental167\ntechnoworld\nfanny\nhawk2\nphuong\nwear\nittest\nenrental166\nenrental165\nenrental164\nenrental163\nit2gpc-039\nit2gpc-038\nenrental160\nit2gpc-036\nit2gpc-035\nit2gpc-034\nit2gpc-033\nit2gpc-032\nit2gpc-031\nit2gpc-030\nit2gpc-028\nit2gpc-027\nit2gpc-026\nit2gpc-025\nit2gpc-024\nit2gpc-023\ntoday09tr6057\nit2gpc-021\nit2gpc-020\nit2gpc-018\nit2gpc-017\nit2gpc-016\nit2gpc-015\nit2gpc-014\nit2gpc-013\nit2gpc-012\nrbmart\nit2gpc-010\nit2gpc-008\nit2gpc-007\nit2gpc-006\nezpoint2\nipaygandalfwr1\nit2gpc-003\nit2gpc-002\nit2gpc-001\nzero21631\ndkmguess\nxacxac1\ncheol1987\nlover5\ndgweb1\nhmdo79\nbipumntr4004\ncacaocoach\nddkcmbb\nhjh0328\nmienki13\nsillabath\nlovej2\nbdangam\nfoavm83\npinkmania\nhurun2002\nmyhome6660\njongtae1987\njk48041\nregenskinmalltr\nfortmyersadmin\ngi110admin\noffice365\nepishon\nexa\ngi480admin\ngoasiaadmin\nprovidenceadmin\nbingbong\nbritishtvadmin\nparamvir\ncommoditiesadmin\nsportsrocket2\nanass\nabbass\nas7ab\nguglzlos\nchrisking\ntawfek\ngreencleaningadmin\nsezer\ngabvirtual\ns001\ncolbasketballadmin\nbintang\ngi36admin\ngi465admin\nparasite\nliteratureintranslationadmin\npodcastingadmin\ngi226admin\nphotoservice\nwww.proyecto\nued\ncommunityserver\nwlp\nwomenshealthsladmin\ninternetgamesadmin\nrickon\nendangeredspeciesadmin\nroca\ngi330admin\ngi130admin\nmd6\nimr\nstraic\nlamaison\nhonoluluadmin\nmd4\ndumbinlove\nkei7167\nrlatnswk241\nided93\nrica\nilplustr8773\nlifeib1\nlonsomeyez7\nagnes0927\nhdbike\nthegeam3\narariyon\ngumgee\nsamsung2528\nmoadenim\nventa21\nn1234u\nmidasclub\nkwons131750\nlovei101\nhnkcoltd\nlovebin5\nfamilyup3\nkkozzam2\nsoda41671\njebl4\nanjunara\njebl2\npinklive1\nladymatr6788\nworldline1\nimiz2\nbiolink1\niltam\njulia701\nyeorimong2\nchoicetech\npopshoes\nhomedvd4\nmencheres2\nyoung5563321\nwinds61\nebestone\ns2pintmimi\nmanu10251\nmysug66\nkyjzz1\ndemofree\nminiorange1\nmiso0530\njnslife1\nhaenamtr9809\ngreenayon1\nbuyinktr6518\nyehdam2\nsprendid71\nwelloskorea\nlikelove0808\nmd3\nsuntree8\nidea08\nmiae07065\nwowgita1\nkangje141\nsweet3273\nwkaxld072\nwkaxld071\ncottiny\nwkaxld067\nkwons131413\nwkaxld064\nwkaxld063\nwkaxld062\nwkaxld061\nwkaxld056\nwkaxld055\nwkaxld054\neliphoneadmin\nwkaxld053\ninterfaith4\ninterfaith3\ninterfaith1\nmedifoodtr\nyoungchang01\njoj159\nwkaxld042\nwkaxld041\nsjhjjang09241\nwkaxld035\nwkaxld034\nbyeyourjune26\nwkaxld032\nbyeyourjune22\nbyeyourjune21\nwkaxld022\ngogumatr6368\nccimart\nwkaxld014\nwkaxld013\nemqodqod13\ncartools77\nwkaxld008\nkibum613\nwkaxld005\nsoj8111\nwkaxld003\nwkaxld002\nwinnerywc\nswkcygbha\nkdh72791\ndfriendd\ndmsrud2131\nbigredkane\nheypon3\ndnftks9du\nskykeep1\njjy6632\nmsa3580\neuropeans001\ns3devh\nnewevery\newok\ndict12\nbrandvideo1\nenbmt77\nschaefer\nmilkhome\ninwoo09\ngi343admin\nimarketing011ptn\noohiro1\nsuntrade\nkoreafarmnet\ncbrr929\nmadkorea\naauxxkorea\nstonektr1082\nkyh43306\nkitweb-020\nstarsign\ntheone5\ncheck00\ngi104admin\nrlatldud331\nmhfishing1\na1bike1\npen201107\nchichoney\ntomatored1\njubzone\nbejjang194\nbejjang193\nbejjang192\nbejjang191\nlsb4101\nshezbag\nbiotrap\nhl3qyetr6194\nnanum79\ndbstksgh091\njks710912\nneoscrap\nyjcase1\naonecare\nalal8334\nrkahfn1\nicovertr3582\njnlee6\njnlee5\njnlee4\njnlee2\njeime207\njmmug\nehwabun\nnecjjang1\nokeedokee\ncomegie3\nhoontop\nbtpspic\nimbag\ncitynlife5\ncitynlife4\nbeautyus\neno0915\nviridis5\nsquareone001ptn\nrcvehiclesadmin\njbseo\nicleen\nmindstore\nwww.selfservice\ncnitech\nsung8815\nbellhyo\nevanjarin\nkwons130569\nkwons129565\nw680727\nfilterdm\npbhfaith\nwinnerspo\ntower12\ntower11\nwebdisk.testsite\nkobu2009\ngi276admin\nspanishfoodadmin\nreon2k1\ns2bike\nysh2030\ntroylee2\nmelodicpia\nbeautyhs\nyhoon0011\nkfccc0\ngodomdb2\nboblbee\nlng4132\ntinymart1\ns3devjonr\nlsmint1023\ntealim\nsjh20821\nnocturne12\nesll00\nmykingdom2\npowernike3\npowernike2\nluxury9746\nhmaum1\nshs51421\ngeoocarina\njyj4599\npagold74\napplimate\njhflower1\npheonix\ntestprepadmin\nnydsosweb6\nnydsosweb5\nnydsosweb4\nnydsosweb3\nsaadmd\nnydsosweb2\nnydsosweb1\nwebmail.staff\ngtw\nrouter1v119.zdv\nvenus2\nthevampirediaries\ninternationaledadmin\ngi31admin\ngi460admin\nelmohajir\nrdr\nsearching\nletsrock\nukhumouradmin\nrouter15v20.zdv\nsurfingadmin\nresidentevil4\ngi221admin\nlovepink\nbirdfluadmin\nminkyou2\nbestkim7\nbestkim4\nrlawntls12\nfacepencil.co.kr\nbestkim1\ngodomail\nbeyondschooladmin\nmana09761\nimarketing065ptn\ncl3\nlsa\ncl2\necosister\ncpswo3\nbellacottage3\nucat\ncl6\ncanadactualiteadmin\nmawahib\ncl4\nffa\nubid\ninfectiousdiseasesadmin\nsafira\natlantaadmin\nhpb\nsportsrocket\ndztimes\nafr\nachref\ncl7\ngi304admin\nenmexicoadmin\nchristianityadmin\nwebcfg\nshewt888888\ndspam\ncharting\nhope2\nvotechadmin\nmenshealth\ngi337admin\nmarinelifeadmin\nbbfamily\nwebdisk.join\ninfofinder\nanjoman\nfolding\nhomerepairadmin\nsakthi\ntutm\nqwerty321\nsameer\nbibleadmin\ne-v07eawm14601.it\nmugshots\nsk-joule-office-4250.its\nantoine\nbaris\ne-ssrgmrrq4.physics\ne-v07faskadmin4.it\nh-s-h001801.humanities\nskincanceradmin\ne-sskd9w583.eps\nsanuki\nseniortraveladmin\nchildrenswriting\ne-swm011902.seaes\narfan\nc-s-148-146.csist\nwww.amal\njett\nh-p4-ax-m4555-146.its\nas2test\nmujo\nh-a07huh005450.it\nftpnew\nbellacottage2\nsmeiwonn\nstata\noutsider7224\nfirstenc1\nkim5058\nstatictest\nhaeyum93\nhmarin\napaya9\napaya8\napaya7\napaya6\napaya5\napaya4\nkim4858\nlouischoi2\njini3792\nmm4mom\nddacco1210\nhuead\nkwons130045\nmoronokimi\nsockspill\ninnoffice\nbiotis2\njini3701\nmulkunamu\nbestyj\nid3812\nshmeditech\npabang\npsshoe\nfocusin35\ndog1036\ngiman018\nschooltr2576\nmanimore1\nmammutyjtr6015\nbestnz\nwww.credit\nynjynj63\nhadam851\nyuseunghun1\ngdtest-052\nckd2131\ncoffeemal3\nmylove1053\nhoyang1999\ngdtest-047\njnkcom\njbiz8\njbiz5\nprfishtr0601\nmessrs7\nwlfjddl46581\njjm4555\ndayroom\ngdtest-040\nyeoinmin414\ndingzzz\ngdtest-037\nopenmd64\nstockhome1\nctw1013\nheadcom1\nneoad1472\nhuaco\ntemptutr\nwaiguo88\ngdtest-030\nnewoni1\nl-v07xx7g6yc5j.it\nc-tr-wm206.csist\nm-a07hdb7jl35j.it\ne-ssr065602.physics\nmailsql\nwindows01\nchef-test\nh-i07huh005110.it\nrizwan\nh-s-h004012.humanities\nl-v07xx3192nkm.it\nwww.wz\nparabolica\ne-s07ska16e001.it\nwww-int\nmail.sp\nabac\nquarto\nwebdisk.encuesta\naustralianfoodadmin\nfamilymedicineadmin\nhealthyheartadmin\nsatpal\nredundante00\nsatria\nredundante01\nfdc12\nfdc30\nmdurohtak\nsaumil\nfdc29\nwilli\nfdc43\nfdc59\ndrm2011\nfdc98\ndervish\ndetecka\npesquisaclima\nwww.pharmacy\nselecao\nportalax\ne-p2-sk-m4555-076.its\nsaymon\nl-s-a000324.it\nparticipante\nmoviestvcanadaadmin\ncheurfa\nh-s-h001400.humanities\ntsqa\ntsrh\naplic\ntswa\nspanishcultureadmin\ngi25admin\necrmqa\nvcalfa\ngi490\nftptemp\ne-d07eawm0275b.it\ne-v07cmcytempa.it\nimages01\nmassinissa\nredteam\nfdc123\npaex\nanhtam\nagendamentosala\naltecrm\nh-p2-ax-cm6030-111.its\ngi454admin\nm-a07bbc7jl35j.it\naleksandrov\narab4ever\nmcl\nc-e-230-029.csist\ncawra\nlembaga\nh-s-h003927.humanities\negowennasb2.it\ndragutzu19\ninfinito\niv\ngi215admin\nsouthamericanfoodadmin\narc3\nliteraturainfantiladmin\ngi339admin\ntget\nsbinfocanadaadmin\natsil\ngi332admin\nredzone\nsvb\nwww.w2p\nque\nmicro8\nmicro7\ntnetworks\ngoparisadmin\nschultz\ncollegeadmin\nwomen3rdworldadmin\nkidscookingadmin\nict3\noris\nqwerqq\nict2\nmotorcyclesadmin\nmonte\nbanvatoi\nstayathomemomsadmin\nregedit\nolympicsadmin\nnaturalbeautyadmin\nbreastcancer\nzerkalo\nibsadmin\nmicro9\nmobinet\nseikei\nsfadka\nstudent7\nnewcms\nseldon\nnguyenhung\ndraugiem\nsde\nform8\ngi480\ndif\nclickmyheart\nm21\ntheartssladmin\nm22\nm24\nm25\nnyfreelist1\nm26\ngi19admin\nm30\ngi448admin\ngi210admin\ngov2\ngameboyadmin\nlkpfdns2\nlkpfdns1\ncivillibertyadmin\nmodamer\ntraduccionadmin\nwww.annunci\nskincareadmin\nguidetraining\nhoai\npolisciadmin\nsettec\nromano\nchildparentingadmin\nwebdisk.cloud\nclassicgamesadmin\nwebdisk.advertising\nstressadmin\nronggo\nnyrelay4\nlb-dns\nholidayinn\nsexbeybe\nvexim\ntesting101\nserverjava\nnyrelay3\nnyrelay2\nkimokimo\nbakersfieldadmin\nkidsmusicadmin\nperfecto\nmoderador\nrose18\nantic\ndevzone\ndkny\nenrico\nmalluwap\nispconfig\ncraftsforkidsadmin\noptin\ncopacel\nrunningadmin\ngrapevine.specials\nshahan\nshahin\ngi326admin\nshakir\nbachho\nspanishadmin\ngochinaadmin\nshamil\nblogwide\nywfas30951\nantilo\njimi12341\nmoonjins2\nwsryou212\nsimazeri\nnaniwajapan2\nohsfss\ngdtest-020\ncontraceptionadmin\nsongee151\napple1772\nautomatic1\ngdtest-016\nchair119\ntworldtr1859\ncynical11\nlinuxand\nwhite1tr8989\na4dc12\nkungjundduk\ngdtest-010\npeterpapa\ngreenbodtr\numinpop1\npunnyshock\ngoldsoccer1\noiioii\nerst30\nddol50\nminuse1\nvonokotr1787\nautodiscover.lync\nbuzzz71\nndwor265\nanpkorea\nyoohj2891\njake0929\ntree4smart\nimarketing064ptn\nmetro71113\ns2pintjonr\ns2prelease\ns1intp\nmanager2015\nvincaserin\nbesnow\nitalianadmin\npartyhong\nnewroinlt\ndirl2000\nsobombee\nhudullini1\nnemosuv1\napollo6\nkkduck21\nysh0505\ngermanhorse\nasadal008ptn\nsorkjoo2\nfptcmfkr1\nhanseol21\nsheeker\nreal2009\ntsshin80\nnerrmoa\nnemocase\njinutech\njdy36383\nkkj13574\nspodaqtr9175\nkgecho1\nivy622\ndibaoi\ncsl0398\nbella26\ndc2347\ns3freeintmimi\ngui5859\njewel8351\ndoctoralex1\nhonjjang2\nhonjjang1\ndadana001\nissuetracker\nhskim\nherbalwife\ndaerimi\nyeinwine\nrenny41\nthence1\nhoonbro\nsung7022\nysun920\nsmandsw\nhappykenny\nbeautifl\nyearimdeco1\nhs1624\nkwtechwin2\nschoolbee1\nst0607\nhs1608\njinah615\nms1intsunny\nabcmusictr\nhades2\nkyoumetr9835\nibsk22\nquad4813\nansimi\nthemeparksadmin\nvegetarianadmin\nperrosadmin\ninternalmedadmin\nsimonandschusteradmin\ngi443admin\njesus923\nmn1126\nkim333a\nstrental\nosong789\nms1devkhs\ngodoedu50\nkyw88371\nyou03161\npakmunsung1\nedailyedu2\nedailyedu1\ncraft5\nbeside\ngaimod\nusoutlets\ngearlounge2\nkkomahouse\nnyshair\nanshim\nskysuf\njnhsds\nttiik04211\ndwarflee1\ntechdata\nfunnkids4\nfunnkids3\nfunnkids2\npointdecal\ndmsgk0728\nasadal029ptn\nseohyange424\namidami8828\nkimchealjoo1\nnapsmalltr\nh780405182\nitdanatr8676\nmiss-chocolate\nub0222\nboysnice791\nkmyungran2\nscfactory\ntodream072\ngniland1\nfineseafood\nbike20003\ntogetit4066\noio486\ndivedicehd\ndosox2n\nindsystem2\nindsystem1\nhipdeux1\nhoolv33\noffician\nh8100210\ngi194admin\nwargamesadmin\njun-jean\nvoice0809\nokgotr3676\nyjs51616\nipayneoart12\nnanrigo\nvyplus\nninety89001ptn\nviopapa1\nkd44573\njenpaulrey\npolishlove\nkonadream\nsmh4866\nsolarzen1\nbadman\nshazzy\npunkrockadmin\nbadrou\nrealestateadmin\nloungebb\ngi321admin\ncampusplacement\npunkmusicadmin\nnewsblog\nwww.demo5\nbanybany\nmekhamata\nsecuritylink\nggupdegi\nultima55101\nanrnf1\ndyingadmin\nsimontasker\nbandbadmin\nngagutr\nmik1171\ndmo\ncustoms\nyahoologinpage\npresentationsoftadmin\nwon30051\nassa5733\nlee11362\ndmsgk0315\nkoreanshop24\ndaytrips1\nrvgolf\nsbk2720b3\ntwowax\nofficeoa\nyhm00001\necoholic\ncheek2cheek1\ncdcomco4\nprmart24\nkim2581\nwooripets\nkbhstar\nysms8167\nlivejin052\npkh2002042\nohmytrader5\nohmytrader3\nserverhosting202-69\nlim65281\ns1setuptest\nconcursosadmin\nraning2580\npeterkhsong\nhive781\ngolfpeoples\nfirstchic\njini01227\nkyo199\ndodkdnjs1\nslowj3\nnuntings2\nnuntings1\nydltmf07101\ngbm33044\nthyme63\nrura98\nmytujana\ncjstk6671\nsolomon4u\npane001\nbenehost\nssong2127\npark0207\nab1315\ndesignpixel\njaguarlim1\njin22yo\ntymca11\nbotzim2\nbotzim1\nyoungkey7\nsuji573\ncotorro\nspace87674\nspace87673\nonefamily\nwww.educatie\namericangreetings\nwww.servicii\ncitate\nvavagirl\ntkcjsdhkdtk1\nminjishoptr\nshoocream\nmysopum\nmorningheim\nnoorymart\nwis2st1\nproyare4\npolodona\ntriplelife\ngagus3\nimarketing062ptn\nredsky06242\nmosaics7\nmtholdings1\nipayungiuma71\nnom03152\nbanikong\ntomogitr7757\nmanyotr3217\nredbetar2\nredbetar1\nmolylove001ptn\njini0902\nhelios1201\ndumpout1\njbkim25804\ngaguae\nwjdals66261\ndlaehd12342\nlooya1\nlemontr2\noihj25\nsmfrei\nipayidreamtown\nilpumctr7356\nindra2k1\nanibigtr5444\nmgarden\nstarhwang\nmj941169\ndobicycle\nojs18071\ncbx9001\nbyjay\nsdeah094\njinwoo7925\ngadimbs\nwleofn10042\nwleofn10041\nokxerox\ntrustline1\nkos1191\nseichong\ndingcs1\nsongother7\nljw0709\nbumilion7\noiuokm3\nlooup3\nuzi1003\nfunnjoy11\nmungmung79\ngangnam7879\ngksdkfhd\ntheklee\nskygg4\nskygg3\nskygg1\ndla8909\ntool2788\nkhc74460\nshyun29\nbaruncorp\nskyduk\nnewbeing03\nganzishop7\ntwomax\nwww.citate\nldy980204\ncsakorea\njreat6027\nhansan00331\ncheeseadev\njejutour\ntwosmedi\njjk29432\nstdevmap\nogambaby\nnewerakr\nbkrheem\npark0063\nkim1452\nmac0615\nenavisave\nhanadool12\nsujipbtr6591\npoloftr6195\nmmcandletr8074\nvip51-159\nchoi7901\nartone2000\nnicezip\ncocokktr7385\ns3freeintjonr\nsathelper\ns3freerelease\ngi190admin\nhave3031\nanonymou\ndbsgmlrudz\nyyh63061\neulnyung\ndcgood3\ns1m2s3\nbaekbooo\nguitarnet1\ntokyoshop\nromancefood\nhijung761\nkonet762\njini0207\nmac0420\nguess182\nguess181\nmk10042\nsmessp\nfeeling0841\nyjh7611\nyoul0411\nokcom02\nshelko\nmfg\nseterecords1\nipattern\nnamts001\nhappyellitr\ngodoshop-039\nimarketing061ptn\ngodoshop-038\ngrandzone\ngodoshop-036\ngodoshop-033\nlsh002486\njeoldatr4599\ntyche862\ngucci21\ngodoshop-029\nsejin9898\ntoppatoppa\ns1devextacy\nhyejin1\njjpfartr7334\nhairsootr\nchi1019\ngodoshop-022\ngodoshop-019\ncozcoz\ncmy22953\ngodoshop-015\nmicostr\nhahajinwoo84\nservicii\nhstar44\ndafm414\ndafm413\nnissistyle\nrhkdsutr4690\nhkorea\nkwon7717\nerosis\ndomaedtr1856\nleejaeheon\nhwrkorea\nnajeeman1\nrich2girl\nanandatr5825\niraf1010\nfamertable3\nfamertable2\nfamertable1\nsonghiii\ntjsgml66371\nkipa1234\nbhhanyang\nsmscenter\nheba0905\ndydghksgl4\ngodo98104\nsodamon\nmmagpie-049\ns43200542\nmigabetr2372\nclearwater1\nwmozart\nsparrowbear1\nbinudduk\nenuri4989\nkdong7\nheejung\nkay1239\nhkoon1\ntourlv1\ngomnfood\nsheonlee\nkwon7425\nartbrotber\narienail\nyjs34601\ngnstore1\niljinkorea2\nfour321001ptn\ngg7772\njje1324\nmajortn\nsimuri121\ncheyun5001ptn\niyoungmi1977\nnewsz\neasyworks1\ngalaxy-dev\ns4freedevnj\nhknuz3\nhorim\naloe0504\ngodotechnari\ntec486\nworldmtb\njin1232\njin1231\nprmart38\nprmart37\nprmart36\npyw3658\nmultex\nprmart33\ninnerweb\nadamgirl\nprmart28\nprmart26\nbjb25404\nbjb25403\nbjb25402\nprmart18\nprmart17\nnerois1\nbdtkorea\nlaskastr7912\nshe135790\nsmarthand1\nwowmin-020\nkorina21\njudy8098\ns3devsf\ncometrue101\ndbwjd66602\ns3devw2\npolobox2\ncooldaegon1\nhdw0002\nwomenshealthadmin\nromeoja3\ns3devnj\nniceman0081\nusu007\nmetrokrtr\nviewzone\nifood\nkc93isc\nblazeguy11\nmobicrtr7531\nimarketing060ptn\ndspkorea\nwowmin-015\nminzoro\ntnr1214\nchaerripo1\nbby8047\ngpfud00\npharos03067\npharos03065\npharos03064\nsonjjang77\npharos03061\njoc911\nenbmt78d\nenbmt78c\ns3devh2\nenbmt78a\nhyperi99\nnajukim4213\nenbmt77d\nenbmt77c\nenbmt77b\nenbmt77a\nissac00\ndudunna\nyup0233tr\nbarry.dev\npsd24002ptn\narmani0823\nzabes07\nisolmgtr0449\nkakaofuck18\nasiana69373\nsh7686790\nastrogate\nwowmin-011\nbniwork\nimarketing009ptn\nyikyupok\nwowmin-010\nlife114\ngmbservice\nmonchouchou\nnanoids\nsheslee\neartprint\ndoheejjang1\nmyphpsql71\nlogthitr2949\ngodofont\nkimchitouch1\nbagpia3\nipaylsh7921\nlks99273\nlks99271\nstylish247\ngootboy\nss10299365\nsd794615\nss10299362\nss10299361\nieonet2013\nyjh6128\nnamwoon\nnewsoul135\nssshimmm2\nssshimmm1\nclear2300\negolfmall1\ncasa2580\nmmagpie-019\nsteaven6\nsteaven5\nsteaven4\nnii25846\nrangin\ncc112a30\ncc112a28\ncc112a21\nlb1laxtest\nohyoungkr\ncc112a11\nikj05184\nmicofus\nwkdeo8605211\nivylandtr\nfreeonlinegames\nredmaster\nweb2.lax\ngoindiaadmin\nweb9.lax\nstartimes2008\nmc.lax\nwind526\niwell4\noprahadmin\nkcsport\nksm51362\nnicehs1\nbluetangboy\nfreekhju3\naga7878\njunho42791\nmetavox2\nmetavox1\nnaturalpromise\nchammidia1\nasa4821943\ndmboshop\nun50251\nhanjinho\nicloset2\nbancet\nbandel\nweb4.lax\nlb2.lax\nlb2laxtest\ndb1.lax\njobs1.lax\nfuture125\nweb6.lax\ndb3.lax\nchorus400\nbdagape\ngododownload\nsung2711\nkwons123452\nsellstyle1\njinwoncctv2\nsajbco1\nboss76772\nibobos\njjsofa2\nhcchae33\ninduk1-029\nyj5575\nmmagpie-009\npolofactory\nbizkim1\nkreesys\nubridge\nlstrade1\nchapter32\nibobo7\nanskintr2156\nmorefun01\nwandobada\ninduk1-019\nazzi425\nimarketing058ptn\ninduk1-016\nwejangtr3554\ngdpants\ndelarei\ndonghun72\nnewav\nthefemme\nsecurityteam\nweb1.lax\nweb8.lax\nlituretr5901\nyootzee\njoomla30\ndpsearch\ntamana\nlowes\ngi437admin\nkansascityadmin\nltest.team\ngi188admin\nwebclipartadmin\nmusicadelmundoadmin\njuguetesadmin\npcworldadmin\nocdadmin\narchaeologyadmin\nsowyen5\nstay4321\npsnavy\ninduk1-003\ndance1004\nkittypaw2\nxofkd002\nnicedob\nicedesign5\nicedesign4\ncutyjina2\nchoi5487\nyain77377\nyain77376\nyain77375\ncristorper\nyain77372\nbluecloset\nnesege1\nfrontier398\nmetermtr9539\nkyh6501\nactto7536\nsongfirm\nvivipetfood\nrooibosmarttr\nqkdrjsgh6\nblessing1\nekdrnqhf\nturnkks2\nheyjed1\ne2n1one\nlagnn081\nsuperdaddy\nysj312\nyhkim7594\newavetechtr\nbabynetwork\niena1\nipaykimhega\ntear32183\ntear32182\ntear32181\nwhddnjs0483\nmanul1009\nmyusim\nweb3.lax\nmfashion1\nalmighty1\nlongupzin\nhjg1122\nbigcoftr9283\ngvten\nilikeshop\ngosteam3\ngosteam2\nfishvalleytr\nmixel77\nwoom2012\nsfglobal3\nbluesee7102\nbluesee7101\njihoon00\ns3intsunny\ntec20206\ntec20205\ntec20204\ntec20203\ntec20202\nculturenet5\nculturenet3\ngi315admin\nbentouif\nweb10.lax\nlb1.lax\ndb4.lax\nyourcloset\nhcj1477\nvldals123\nthegioiso\nweb5.lax\nprincess4u3\njobs2.lax\ndb2.lax\nweb7.lax\nvideojuegosadmin\nforestryadmin\nalzheimersadmin\nhealthcareersadmin\nw800\nbartek\nyule\nw214\nkyungdo\ngodosg-030\nycj0831\nezenbike\nlkfg776\ndonglaep2\nhms9391\nlkfg774\nbinuya4\nmaxion1\nssung2shoptr\nricharoma2\nricharoma1\ngodosg-020\nemodeuntr\nnexus75102\njigging\nknsydmaster\nthegray\nfarmforyou\nibikeboy2\nalinekim\nsky70394\nfindpc\njujuring2\njujuring1\nririkos\nfineds\ngodosg-010\nbell012\ndpmax007\nsoulmie\ngaedle\ntrazenkat1\nstarjung\nvoguenewyork\ngodosg-003\ngi320admin\nconradkwon\ndoslaos\nkpwell1\nmisscrow1\nmininmini\nswgagutr\nitalgagu\njihomamma\nwww.reporter\nimarketing057ptn\ngi235admin\ntarjan381\nwhisenplaza\nra7al\nserverhosting20-253\ns1devp\nbingsugirl73\nserverhosting20-245\ningress-03.mx\ncha033tr2546\nipaykjwook7\nwillgolf\njoa891\nohs530\nserverhosting20-197\nserverhosting20-195\nserverhosting20-192\nserverhosting20-188\nserverhosting20-170\nbmhholdings\nchoicelab1\ndupimall\nmblog\nserverhosting20-137\ntwinz21\nwinner734\nbioskinceo\nanzing999\nkgol0011\ngafilld56\nicdij3\nnamuro1\ngmu\njizone2\nhayantan4\nmaxjojo3\natree4u\nsuhosgi\nskinzone\nijy8282\nzong\nbestcody\nyeeumtr\ndesignfingers\nbbrmom1\nqoehtjd\npsr2x4\nssitmal91\noscal441\nzzubong1\nhommedi\nchrome12\nkwandong\nwilln413\ngi432admin\nhardworking1\ndongoodong\nbobdesign\nsport1131\nakila2013\nannbox\nwithealthtr\ngi183admin\neryberry\naeroc17tr\njoa494\nphotogoodtr\ns3intextacy\nhanamu2011\ntj3651\ngodoedu9\ngodoedu8\ngodoedu7\nhjparkkr\nhojungga1\nenfshop\nhoon392\ngodoedu2\ngodoedu1\nselrana\nbl5253\ngyunwoo287\njinandco\nrodiajp\nyewon09031\npts06061\ndragoner\njejunetr1890\ncreditoadmin\nkiki95811\nknpiano1\nanmira\nelfbada\nzoomcamera\nphonehouse5\nphonehouse4\nspacehue\nemote12\nemote11\nlee24192\nlimgaram2\ncsa251400\nmdpromise\npola1206\nkbk14481\nkmc9556\ncodegears\nmidashjs\ningress-02.mx\nmity0312\nlkm5282\nslr365\nflower2580\nhasimoto27\nebiztr4968\ncubeintnj\noipmaltr6333\nmk05051\njun34784\nleemiddleton\nh1a2n3\nwww.vivasms\nhklkjs\nwashvath\ntwins61\njinaleebbo\nhikiake3\nbbosomtr7474\nvivasms\nfool21c1\nksong83\nschoolfun\nlucky8669\nhakpower\nhpvalley\nwowwoman1\ngyuho9898\ncmstore2\ncmstore1\ngardena1\nworkusa\nmerveil\ndimiwon\niblind\ngodotest-012\nimageshack\nvidaverdeadmin\nparejasadmin\ngodotest-011\nbluevitamin\ngodotest-010\nbimp1234\naromari\nitaliansladmin\ngodotest-007\ncicokorea4\ncicokorea3\nroyaltyadmin\ngi253admin\ningress-01.mx\nbicicletasadmin\nshibuya\nsecportal\ninfohelp\nneverforget\nmurad\na1webmail\ncadadmin\na1mail\nroppongi\nzone100.cepi\nmandarinadmin\njahanara\ngi299admin\nalfian\niden2\nmarketing.team\nmhh1110\njukoline\ngtlife\ndosevent2\nsejin5774\nsejin5773\nkeongdtr7204\nlntnet\nbiomam2\nbiolink\nshutup\ngothailandadmin\nlb.www\npreventbreastcanceradmin\nmiamiadmin\nautodiscover.g\nautoconfig.g\nwww38\nclassiclitadmin\ngi426admin\nbrandenburg\ndietasadmin\nnymph\npriyankachopra\nchelyabinsk-suu-rr03.backbone\nalfa-romeo\ngi177admin\nnicu\nrr02\nmath3\nteleworker-sw-campus\nfinancialaidadmin\nsnapdragon\nbenevita2\nbenevita1\ncplant4\ndooob2kh2\ndgmart\nyipsaac1\ndgmax1\ndaehanmusic1\nkjw5525\nbejjang19\nok258025\nlsa4121\nuchoice\nanna18\nalimotr1558\natonbtr6079\ndakineshop2\nyohanis3\ndbsaytns\nsmh731\niclay\ngododemo\nhostingmanage\nipayticgirl\nswisswatches\nwoorisai\nohlady\nssomina2\nkimeraj1\nartdepeau\nchoin11251\njludia\nbluangelo\nleehansl\nmmmobile3\nyjoung101\nohkids\njung3568\ntennisadmin\nswju555\nschoolbee\nformula1admin\nunisum\nmflady\nahj19752\nahj19751\nlounge.team\njslee369\ntigersm07\nofficeboy11\nmi100942\nbanybany2\njungubox\nhjudew\nwhitehtr0803\nproposals\ncubeinflux\nelitebasic11\ncopymine2\ngilin575\nsindo8710\ntoyfleatr\nenfantstar\ngonewenglandadmin\nparansys3\nipaykonvision\nkinoprida\njikyjeon50\njikyjeon47\njikyjeon46\njikyjeon45\njikyjeon44\njikyjeon43\njikyjeon42\njikyjeon41\njikyjeon40\nswingfire\njikyjeon37\njikyjeon36\njinimall001ptn\njikyjeon33\njikyjeon32\njikyjeon31\njikyjeon30\nguava1\njikyjeon27\njikyjeon26\njikyjeon25\njikyjeon24\njikyjeon21\njikyjeon20\nsunhd20026\njikyjeon17\ndidwogh22\njikyjeon15\njikyjeon14\njikyjeon10\nhlch81\nhkoon\nsimuri12\nfcdesign5\nmrviura\nkokomi2012\nnetlabs\ntimestore228\nimarketing055ptn\nedge52\ntvdramasadmin\nzaengyi3\nzaengyi2\nyy1516\njejuolle\nmetavox\nreactiv1\nicdvd\nlseinlondon\nhkmug\nbbqtown\nyain7737\nmountkorea2\ntaol1000g\nsoritong\nhjs98824\nhjs98822\nmonaco0421\nplusdiettr\nseebuytr3276\nraisis\nthefeel\nenfanbebe\nss2004\nremott1\nhonor\ntravelceo\nmaniastore\nyauoo05051\ngswb2\ncubeintw\nii22ee\ngamecp\nihack\naromero\ndbal1126\ncubeintp\nwellpeople\ncubeinth\nulfarmer\ncubeintb\nnowlovetime2\nsongchoi\nwww.tsm\nvantruongvu\nbhaskar\nphish\nmagicsladmin\nsaunders\nneotech\nmohammd\ncorinth\ngohongkongadmin\nmodelrailroadadmin\nnuclearpoweradmin\nhalstead\ngcreports\nshorty\nnyakamai2\nnyakamai1\nacheron\nrankpeople\ngi294admin\nsanfernandoadmin\nbuddhsladmin\nadra\nthecrims\nosteoarthritisadmin\nfinancecaadmin\ntariko\ntarkis\ncanterbury\nmundojava\ncoeus\nonlinebusinessadmin\nweighttrainingadmin\ngi421admin\ncorrupt\ngi172admin\ndek\nfoodbeverageadmin\nislamsladmin\nsupport-us\nsantoso\nnse\nvictorian\nstart1\npytha3477\nm1300m\nstickers\nmohmmad\nvlasov\nurbanlegendsadmin\nbusinessmajorsadmin\nmediabank\nwww.iep\nsexsladmin\nsocialanxietydisorderadmin\nanhdep\namericanhistoryadmin\nmilimetr\nlms-test\nharlemadmin\ngi98admin\naudioconf\nsnies\nwadas\nenvivo\nwhitehat\nrygby\ngoooals\nwww.artem\nrengeko\nbenyamin\ntmi\ncomunicaciones\nunknown1\nnyquist\ngi288admin\njapaneseadmin\nmedecine\nhumorsladmin\ndgt\nthedexter\nlswebconf\nabdelatif\nnyrelaytest\nafv\nmedschool\nmailsecurity\nloggers\ndanceadmin\nnesetka\nzaryab\ngi405\nlingerieadmin\nouray\nexpertsearch\nwww.manuals\nberilo\npegasus.cc\nwww.tamer\ngi415admin\ngi166admin\neteam\nintranetsadmin\nbgboss\ntpi-pdb-scan\nanupam\nweavingadmin\nanusha\ntaxe\ncytrynko\ncellphonesadmin\nsarki\nwww.taxe\ngi369admin\narthritisadmin\ncalisto\nanyone\ncgi1\nfairfieldcoadmin\njamadmin\nfisc\nlovegate\nriverbend\ngi400\nmifa\nhendrick\nwww.fd\neric7\nsparda\nduel\n357951\npharmaadmin\ncriminologycareersadmin\ntibio\nadminsite\nmachinetoolsadmin\ngiaitriso\ngtools.team\nmyold\ndheeeraj\nnetlove\nchikago\ngiveaway\nenglandseadmin\npalmtree\ngi93admin\ndahmane16\nalbuquerqueadmin\ncefa\nfirewall1\nromanticmoviesadmin\nwww.hpc\nautism\ngi283admin\nnetopto\nanimalcareersadmin\ndallasadmin\ngly\npostresadmin\ncorpuschristiadmin\nsohaib\nherbgardensadmin\npsportal\nexternal2\ngeneralhospitaladmin\narabtv\nsitesearch2\ntravelwithkidsadmin\nnewsdesk\nteqnia\nschooltest\nautoconfig.webstore\nautodiscover.webstore\nbirdsadmin\nwebdisk.webstore\nincestsladmin\nlindsay\nwww.gutachterausschuss\nsquish\ndifference\npunt1bdd\npunt5web\nbankruptcyadmin\narrel1\nhirawan\narrel2\npunt3web\nmail.rebots\nglt\ndnsgrupelpunt\nzdravko\npunt1web\npersuit\nsofiane\npunt2bdd\nnicedogs\nspeedo\nsonice\npunt4web\nacidrain\narrel\npunt2web\npunt3bdd\ngi410admin\nshuzai.militaryhistory\ngi161admin\nspasadmin\nkommunikation\nwashingtondc\nenchicagoadmin\ninformacion\nlegalindustryadmin\nshosho\nwww.zapisy\njabba2\nfamilycraftsadmin\nyogaadmin\nbiggs\nhnptuyen\nhwvaxwp614\nthanos\nsososo\nlegalcareersadmin\nlucky7301\nwitcommerce\nmysille\ndbc2191\ncanoeadmin\nquigon\nccbyungkr\nya09uni\nohjima\nkkimtony\nmansuvv\njijiwoong2\nlinesence\nyegalim\npadosory3\nhihangongjakso\nkwtank\ngreatewoman004ptn\nannasui071\nidgodo-040\nidgodo-038\nlkm3473\nidgodo-036\nidgodo-035\nidgodo-034\nidgodo-033\nidgodo-032\nidgodo-031\nidgodo-029\nidgodo-028\npaddlingadmin\nproxy1d\nclassicpoetryadmin\ngi87admin\npalpatine\ngi277admin\nlostadmin\nenergyindustryadmin\nkdhap\nokcadmin\nsoulro\ngoswadmin\ndooku\ngetenaks\nkooora2\ncontestsadmin\nidgodo-027\nidgodo-026\nidgodo-025\nidgodo-024\nidgodo-023\nidgodo-022\nidgodo-021\nidgodo-020\nidgodo-018\nidgodo-017\nidgodo-016\nidgodo-015\nidgodo-014\nidgodo-013\nidgodo-012\nidgodo-011\nidgodo-009\nidgodo-008\nidgodo-007\nidgodo-006\nidgodo-005\nidgodo-004\nidgodo-003\nidgodo-002\nidgodo-001\nruis4u\nalacmola\nstar38407\nstar38406\nstar38405\nhugreenplus\nstar38403\nstar38402\nstar38401\nchamgaram\nzigzeg\nicas99\nvlc-aacs\nvlc-bluray\ntabletennisadmin\nnewgame\nkhs535-010\nhoodtee\ning37771\nbkml.m\novariancanceradmin\nkhs535-006\nkhs535-005\nkhs535-004\nkhs535-003\nkhs535-002\nkhs535-001\nkmoon70074\ngeosang3\nwhalehh\nminside\njunsic-021\nyrsong06291\nhinokilife\nseesawi1\ncpb56014\nnetzantr2633\ncpb56011\njunsic-019\nworld09\numchichi\nice68\nmallandmall\nfree55661\nfoxyshop3\neqtech\nms1devsunny\ngi394admin\nyym0214\ngrym2\ngrym1\nkurare3\ntandymalltr\nkmh5007\nimarketing054ptn\nssnbackupsvr\nandongsoju\ngodobill\nhwaldo1\nmotm2464\nmebaritr7105\nestella1\ndjsteelkih1\nairwalkmall\nnativeedge\nultrahiya1\nchsong0505\nitac2500\ncoollake2\ncoollake1\nrainykk\nhomenlife\nsizer20131\njunsic-010\ndawoom\ngabang\nckc1407\nihwasports\ntigerlk1\nhuehouse\nwooricat\nwoodcatr1429\nbabysitr0459\nsmilelifeje\nliving2u\narkhe307\nkcy720\nlois99\nleonrider1\ngayacctv\nhana18753\ntdaehan\npetereon1\nskrghk\nnalarizone67\ncl0521\nreweb2\nvogue21c\neasyguitartr\njerum2001\nsqoop113\nsqoop111\ndal1143\ndal1142\nprintout2\njimmychic\nbrbrjbr5\nbrbrjbr4\nwoorigolf\nbrbrjbr1\nzzzoo\nicaffe\nwildfire\npocwebcast\nsoftnet\ngatishna\nashoka\nbaselgold\nyumehinoki\nzetmin4\nfoammake1\nzetmin2\nhlanuep003\nkaspersky-serials\nssc-contentinfo\ngirlspouch\nhlanuep002\nilovedream\nhlanuep001\nashwin\npocmail\nmobilevpn\ncwvvpn\nedrfnep212\nssc-www\nedrfnep211\nhudtest\nalexro\ngooglle\narabnet\nenvoy\nrure10011\npjjpjs1\nljb2644\nibinfo\ncorptt\naaronshin\ndukeland2\ndukeland1\nagain789\ngeddy751\nkimsil7252\nrunning21c1\nwww2saml\ntekocokr1\ndrfswitch\nuneecase\nmdworld1\ntammy8321\nqkqh16171\njhhan7512\nzino15131tr9875\ngodoweb11\nghsenfk\nhhhqnwp007\njen06152\njen06151\nww11721\ngookyuny2\nguandki\nblue05722\njejunet1\nlittlewitch\nhwvanwd1054\nchj1013\npass69084\npass69082\naoh007\nsdh6161\nkidsss1\nsongane1\nvfaccom\nraja88\nhudadak2\nchally0524\nfunfromfun1\nbbsbaby\nckw0467\ngivekorea\ngbs7071\nlls2ll48603\nz4ever1\neatthestyle\nhipet\nnanikr3\nkongirang\nimarketing053ptn\nmanualprime\nnalraribebe\nhope61371\ngoho19721\nezrock2\nsjyshs\noptomamalltr\nchic1215\nbultaewoo5\nbultaewoo4\nbultaewoo2\nbuyheart\ncw1537\ncw1531\njiran0513\nhaninara\nwill02304\nwill02303\nwill02302\npsd24001ptn\ntj0115\nqbike96162\nshcompany1\nfaboosh\nvid1\nantiqpia\nwooyeong3\nwooyeong1\nprendero\nimarketing008ptn\ncallan\ncrimeclub\nrunxrunmalltr\nsaebingagu1\nwjj1876\ncleanshop1\ntj0012\ndal0357\ndaegasports\ncoexmart\njejumitr\nfone51110\niview1\narabweb\nsipxt\nxpsh1104\narabtimes2\ncaz\nsuperdotadosadmin\ngi155admin\nwinnipeg\nxpsh1102\ninetdream2\ncoscar\nremobil\ns3devdarknulbo\nmiocell1\nskagns75\nhill8\nlyspsw1\nbusanedu\nmetaprov\nmanstone\njejumiin\nkst14022\ngrr21\nkjkim68031\ncfmallcash3\ncfmallcash2\nanewface8\nwithusmobile\nxpsh1101\nemall24\npleatsme1\nbinibini1\nhanhee2119\nelannep511\ncashdesign001ptn\nhhhqnrp042\nbumilion19\nbumilion18\nbumilion16\nbumilion12\nayouki20131\nskw620\ninvesttr6501\njs9441\nevol213\nevol211\nyaksontr1850\ngreatewoman002ptn\nlwy0302\nhwiyun\nblackpc-020\nblackpc-018\nblackpc-017\nblackpc-016\nblackpc-015\nblackpc-014\nblackpc-013\nblackpc-012\nblackpc-011\nblackpc-010\nblackpc-008\nblackpc-007\nblackpc-006\nblackpc-005\nblackpc-004\ncino007\nblackpc-002\nblackpc-001\nipcsung\nphonkebi\neheh49363\nyahya1233\nsc55862\nsc55861\noptionsadmin\ngjithqka\npublicrelationsadmin\ngi310admin\ncomidaperuanaadmin\ngofloridaadmin\nupimg\nlounge.contribute\nbusinesstraveladmin\ngi82admin\nterrorismadmin\ngi272admin\ngi40admin\npublication\nadmin2010\ndl360\ntaxesadmin\ndramaticmoviesadmin\ngonewzealandadmin\nbabyshoesadmin\ngi230admin\nkauaiadmin\nsandiegoadmin\nbostonsouthadmin\nhomecookingadmin\ndiyfashionadmin\ngi388admin\ngi149admin\nftpuk\ngi486admin\nclassicrockadmin\nlowcaloriecookingadmin\npowerize\nquotationsadmin\ndetroitsuburbsadmin\ncompsimgamesadmin\nmwsladmin\nhqfailover-css2\ncompactiongamesadmin\nhpc1\nfederalcontractadmin\nonlineretailingadmin\ngi76admin\ngi75admin\ngi266admin\nsweetboy\ntodaysladmin\njpagent\nbabyadmin\nbarmssl\nchristianmusicadmin\nctan\ntabiat\nhighbloodpressureadmin\nheartburnadmin\nhakers\nhollywoodadmin\ndeano\ngyncancersadmin\nmovingadmin\ngi383admin\nftp.members\ngi144admin\nmxc1s\nassistivetechnologyadmin\nthisweeksladmin\nadolescentesadmin\nprowrestlingadmin\nnytoolsmail4\nnytoolsmail3\nwebsql\nbasin\nnytoolsmail2\nnytoolsmail1\nkddb\nxtremesladmin\nprolifeadmin\ngi71admin\nkariyer\nzai\ngi499admin\nmuhendislik\nsjakamai2\ngi261admin\nboxingadmin\nmxc1\nenglandswadmin\nnlsl\nahead\ngi329\ngi333\nnetbeginsladmin\noldradius2\nhindusladmin\ngi377admin\nultra3\ngi138admin\njobsearchcanadaadmin\ncourriel\ngi330\nbibweb\nlawadmin\nukfootballadmin\nbeginnersinvestadmin\nip-reserve-139-126\nnorthbeachadmin\nbaltimoreadmin\ntoysadmin\nmusicsladmin\ndrugsadmin\nmilitarycareersadmin\ngi208admin\nns2v35\nns1v18\ngi65admin\ncurio\ncoolmasti\ngi494admin\ngosanfranadmin\npirateradioadmin\nbasketballadmin\nx28\nx25\ngi325\nx18\nx14\nfreethingstodoadmin\ninternationalinvestadmin\nm08\nfrenchcacultureadmin\nm09\nbdsmadmin\nnurma\nm06\nm05\neor\ngi346admin\ncm.equisearch\nhqfailover-css1\nx64\nhwvaxwp072\nnthhqsmtp2\nchatwrite\ntictac\nentpsl\nhlannwp010\ntotoro5948\nselly19\nselly18\nhaagen11\nacervo\nhlannwp005\nhlannwp003\nweb3dadmin\nhlannwp002\nhlannwp001\ngi372admin\nhlanunp003\nbizpro\nhlanunp002\ngi133admin\nhlanunp001\nanchor\niis-mapping3\ntrunks\ndarklight\nelannep311.exh.prod\ndevilboy\nelannep312\nelannep311\nlugia\nhudboxdemo\ntestswitch\nhlanudp001\naulas\ncybki\nastyle\nhomeschoolingadmin\ndevmobi\npoetryadmin\nsgglb\nhudgatelm\nbtenroll\nhudappsint\nobgynadmin\nhudappsr\nlanswitch\nhhhqnwp001\nnthhqsmtp3\nmoonnet\nhhhqunp003\nhhhqunp001\nresumes\ngi317\nhudgater\nhhhqnrp021\nhhhqnrp020\ndannyboy\npoppy\nmfpilot\ndrgr\nhwvalwd3231\nsustainablelivingadmin\nlouisvilleadmin\ntaras\nelannep313.exh.prod\nauth.portatest\nilannatv001\nlhfailover-css2\nlhfailover-css1\nhlannwp004\noshcgms\ncracked\ngi5admin\nproxy53\nproxy31\neir\nbellona\nafroamcultureadmin\nmazu\nhhhquft001\npictest1\nsftptest\nfedtraveler\nstepan\narchana\nstephy\nconsultingadmin\nmobileenroll\nlansslvpn1\nhomeworktipsadmin\nhostadmin\nhhhqnwd007\nelannep313\npwctest1\nspandan\nsfgis\nhudstarsr\ntest786\nmangusta\neuthd\nlanvpn2\nperipheralsadmin\nlanvpn1\nczqwa\ngi60admin\ngi488admin\nproxylm\nchemistryadmin\nacko\ngi250admin\ninternationaladoptionadmin\nsgvpn\nhwvauwp059\nceejay\nsudeep\nfotografiaadmin\nhamada\nhorluep903\nhlanuep902\nscifiadmin\nhlanuep901\nnthhqsmtp\ncwvglb\nfoiahud\ngi309\nkothari\nwww.ezec\nflirting\nmx39\nbbnbackupsvr\namericanfoodadmin\ntestest\nhudmobiletest\nhwvauwd491\nmaynard\nhudcomp\nhudlist\nmoroccanfoodadmin\nxpsh2104\nxpsh2102\nblogsespanoladmin\ntestrun\nsufyan\nvideocast\nfaizi\nxpsh2101\nbitdefender-crackdb\ncollegeboard\ntesal\nworldfilmadmin\nduhokforum1\ngi308\nmaroctimes\nelannep312.exh.prod\nuiv\nhwvalrp1162\nhudstars\nsulake\nhabbofans\nsome123\nfhadirect\nalarab\nstuffs\nlaksslvpn1\nquizadmin.historynet\nfasda\nportatest\nhudgate\nhhhqunt001\ngreetingcards\nxxeniks\nbtmdm\nmywebhosting\nhorluep003\nclassiccarsadmin\nftplm\nlounge-forum\nhehehe\ngi366admin\nhwvanwt415\nsg125\nlowcarbdietsadmin\nkovardo\nsg124\nsg122\ncessco\nxerblog\nsg121\nsg120\nswapna\nasianhistoryadmin\nsg112\nsg111\nwebdisk.launch\ndev3.www\nsg107\nwww.launch\nofelia\nayesha\nbooker\nfreshaquariumadmin\ngi127admin\nsalafi\ntenisadmin\npauta\nvideoserv\nhairremovaladmin\npinnwand\ngi399admin\nwishop\nsuzane\nkspack2\ncc1115\nanhy00\npotato76062\nzooicl20\nadc79\nmoonsteam2\ntonicyhg\nmaeumsori\nshenring3\nddongbalsa\nfjrzl4758\nhepashopping\nloveholetr\nkmartkorea\nd2icide\ney0506\nbyhom7\nmanucare\neneskorea\nthechae\ncotm974\njunek001ptn\nicaller\nretrofactory1\ndurifishing\nrpmuno1\npetitvelo\nbiologyadmin\nzziny1004\nnaju52tr7662\nnikonpark\nsskim328\nyjun23c\nseuhong999\nhomtoy3\nprestige3\ngate.iitr\njee.iitr\nthebom3\nnakwonguitar\npgadm.iitr\nspanishsladmin\ngi302\ninternetbanking\nmioh25801\nniaplus\nu1trading3\nu1trading2\ncolakids\nsmstory\ns2pdevsky\nmerrymac\nsmstore\nartemoa2\nkang0107\ncheongdam-039\nwarmgrey2\nwarmgrey1\nmario1812\ns2pdevsdg\ncorbu2\neconatr4735\ncheongdam-029\njmet.iitr\nmba.iitr\nangusn\njoont9995\nblanden1\nanguse\nsky19991\nziope014\nziope011\ncubeintsunny\ntouch182\ncheongdam-020\npuzzlebebetr\nchan9485\nsaicorp\nworhkd4\ngustjrr223\nbyeol0486\nallfocus1\ncheongdam-010\nsteamptr6064\nsjtrdco2\nchakra\nwww.iitr\nphotoupload\nmail.iitr\nsyncovh\ndaehan1\nwoolee\nhelloeunji1\nbebiromie\ntieworld\nex8888\nhmmedical1\nkamin711\nhdw01241\nmin0gomin0\njudy0403\nlk11191\nkarajo6\nscentedmen\nkarajo4\nyonghun2\nadminovh\ngest\nadobe-crackdb\nvirtualtour\nhazellemomo\nthecamt\nipayssnchbe\nwww.tsc\ngreatewoman001ptn\negoodesign\nlohas1\nclubtsp1\nsseryun\nthearte\nehdqkd1gh\nbuelin\nmoin21c\nlogjin\nlawhuaaa1\nkyh0080\nzatool2\nqueen6c36\njjanga2010\nindycomics3\ntnrruddk1\nartemin3\nuturn051\ncatholicismadmin\ncore71\nlesswire\nastinpark6\nastinpark3\nodaesanfarm\nyesoobin2031\njoyparty\ngrab3\ngrab2\nfhxjtm12\ndanidud1\ninucare2\nseunghwk\nmuni63\nindomart\nmoneydream\nchan9067\nsky3371\nletier2\napitrading\nbell01\nwww.warning\nmark2164\nmark2162\nyhuj12341\nbigcoftr2817\nquiltscent\ngraypsycho\nlrs0115\nbookinmylife\nlove56742\ns2pdevman\nsweetool1\nprogram11\norbit19795\nimarketing051ptn\ns4intsun\nseed9493\nseed9492\nbirdmarine11333\ndanggal21\nyooohco\nsbarasee\nnatural8426\nkwonss\nkjlee95a2\ncrosscase\nmoifood\njjoonjang\nhanapack\njooho0830\nara8508\nkwons6\njongromedi4\nwonu26\nwonu24\nwonu23\nwonu21\nxn3v4bl9ggh\nyhkim0731\ndidskatlr\nglsbike2\nnamphtr\nlivingnice1\nxwing911\nwonlyo\nhoya8749\namw610\nmyomg1\ns4intsdg\nschg20092\nkjc01kr\nhaanvit7\nzzi33\nfotoware\ninomvala1\nzenithtr4611\nkang23277\ninashop\nkingkong772\nhansung20105\nhansung20104\nhansung20101\nugreen7001\ntheallo\nwoobul\nabcsports1\nyunm2581\nthing\nthewellbaus\nnrfworks\nelectom\nfacednd\nqkrantjd77\nwoodc2\nadoptionadmin\ngi483admin\ntoboju\nfigureskatingadmin\nwpadmin\ndimelee\nwawagift\nyooriapa\nrudxo1\nkkn0428\ndogbakery\ngetmind7\ncubeemom\ngood031004\nkdy8412-009\ngirocall\nmskye51\nmasterblue\nnasa01\nsisleeeun3\nsisleeeun2\ndurihana2\nzyo21\nhalfpangpang\naleatorik1\naneunjuone\nrladlstjq01\nbaggno1\nparis11191\nyyhee3300\nhejan855\nhejan853\nkongstyle14\nhejan851\nenflqn1\nmceshop1\na2golf\nstardu12\nrkeltm0317\njayminapp\nhappyb2012\nseoultree\nwww.clickme\nunitrust1\nnasa02\nekgmlqkr1\nini53533\nini53532\njsu20002\njsu20001\notamin1\nhiyazz\ns1intkthkira\nelimtrade\nyhseom1\nipayidugi\njmgagu\nbusanbank2\numnine\nclubthea\nhexy3\nbeggob\nkkamandol\ndomemart3\nelecpia\nkeh0527\nimarketing049ptn\ntvcomediesadmin\ncher90\n186\ngi244admin\nkancha\nhistory1900sadmin\nforgotten\ncredits\ncfd321\nkidscartoonsadmin\nchetna\nhoneycom142\nkwonsyy-001\nhyunjoon94\ns4intkhs\nmkyungro2\nperformanceartadmin\ngi300\ngi289admin\nonelifetoliveadmin\ncouchcrunch\nnamph49\nnamph48\nnamph47\nnamph44\nnamph43\nnamph42\nnamph41\nnamph39\nnamph38\nnamph37\nnamph35\nnamph34\nnamph33\nnamph32\nnamph31\nnamph29\nnamph28\nnamph27\nnamph26\nnamph25\nnamph24\nnamph23\nnamph22\nbinsbench1\nbuyhalf3\nnamph18\nnamph17\nnamph16\nnamph15\nnamph14\nnamph13\nnamph12\nnamph11\nnamph10\nkec860\njungsiki8\njungsiki7\njungsiki6\njungsiki5\ngodobill2\njhb1044\nhanaro3894\ntpdl1001\nsmc105\nmidas574\nbbosomtr1268\ncanscan2\nwji8039\nmicarewiz\nyumji831\nnouveautes1\nmyc81014\nmyc81013\nspoonz11\nkyg7480\nshoutzzang5\nshoutzzang4\nidman77\ndongja700\nipasscom\ncentrial1\nopatz001\nfoxya331\nrosaflower\nipayjunimall01\negoist139\nmommy10443\ntobi41141\nsella76\nripsoul\ntreenwater2\nyoobooral\npirenze7\nzenhide1\nwondas\nkik8704\ngodo199370\nwonbox\nmucompany\ngeosungnc5\nonemulti8\nonemulti7\ngeosungnc2\ngeosungnc1\nwtrading88\nktk09931\nnaver1968\nakstjr782\nakstjr781\nunigown\nfinancecareersadmin\ngolf4\ndemos2\ncry74stal3\nsjhahm2\nlovely9679\nsorkdmsdud\nunisoft\nsleeky\nprmory\neggirl0034\nyulki83\njulenom2\nssunjun1002\nssunjun1001\nxalomyx4\nseoultile\nerkekorea\nprintmate\nfarmers9\nglass76\nqinfo3\nqinfo1\ngodo199087\nbeesek\nwooree01\nccs10203\nnara2013\nnamodiy\nrkarl1127\nshdy815\ncarbitna\npmj3808\nx-large\nddilbong2\nyabes4u\njebongzzang\ntcctv2\ntcctv1\nky741209\npjinside7\nnfriends\ns3devsunny\ncool87\njimipage\ndharltr3162\njomichael16\njomichael15\njomichael14\njomichael13\njomichael11\nbush2080\nwhitelux0223\nmoon36085\ngogl2\nimarketing048ptn\niamss2\naromacandle1\nkeugkim\ncorinlhw1\ntotostand1\ngloria75\ngloria74\ngloria73\nsinyuntns3\njeyoon0429\nokwatchtr\neoqkr12\ncpla2k6\ncpla2k1\ngloria37\nmylure\ngeeker2\nfifasp\nyeonsung-030\nrosemelia1\nprmanager\nshoesmong9\nshoesmong8\nmarchespublics\nshoesmong7\nshoesmong5\nshoesmong4\njsh167551\nshoesmong2\nshoesmong1\nalwns7\nantoniuse1\ntake2650\nfootbox\nnamseung13\nkj5778\nradkay\nsunrisejr\nhamsukman1\nxn21tr8635\nkinosida2\nmuai50313\nzhenlong98\nbodasadmin\ncubedevw\nlsmnice\ncubedevp\nedana021\ncubedevh\nkweek10882\ncubedevb\nplum33size\npoon5404\nkidslaktr\nstepparentingadmin\nphone4tr3183\ncafeier\nodaemanmul\ngy01142\ngilenge1\nyou81133\nqldrnrdl\nbytherin\ndasanmedi\nfafa3fafa3\ncostcotr8018\nkjb7594\nsoarcom\nsmcommerce\njalgreen2\ntimekorea\nhongik91tr\njjjongs1\nfile0309\nsjgift1\ngodo198146\nmokpofood\nyouhansol5\ngoodday0298\nimarketing050ptn\nholyspi\nohs26251\ngog12\ncellexc1\namga\ngi287\nsmartdragon4\nhighsuccess\nendlless15\nbrandshine\nmom0won1\ngodoedu43\nmrpieinewha\njurmy842\njurmy841\ngolf1sttr\ngodoedu39\nkimsony8\nseiber33\ns1devwheeya88\ndsa08221\nhoon3922\nagnet76\nhoon3921\nskinsale\nhongsi1\ngodoedu30\nhongsan\nvaticanhouse\nhowdisplay\npsclub\ntapmill1\nn5821\nhongsd1\ngmpkb\nbagsaseyo\ngtech1\nhanaro2187\ngodoedu19\npacktory1\ngodoedu17\ndekill1\nxeve12\njs253830\ntotorez\nunco77\nlavender2tr\nimarketing047ptn\nhong7904184\nyjkim1130\nbikerush\nguitarand1\ncape\nalicecoco\nfinal13911\nptg2020\neukim2100\nksuppcts\nggghwe1\nigamenettr\nstarcany\nbluemaster6\nbluemaster5\nmelon2\nmelon1\nsswu20052\njnktra66182\njnktra66181\nmymee1\nwntmvk\ngms9776\nelinfit002ptn\nindependentfilmadmin\nfrenchfoodadmin\ngodoedu-030\naiia1124\njiwoolove4\njiwoolove1\nkjk133\ndaynnitr9735\ngodoedu-023\ndevmap\ncnutsm\nlee07982\nehoh2010\nensheet\nsmith44211\ngodoedu-020\nsang198512\njungyeosa\ngadogolf\nbosuly1\nnandii2\ngodoedu-010\nsem06053\nboasguitar1\nsem06051\ndlcnswk3\nmonter\noraprod\nyunchulwoo791\nqimo20011\ncooky73\npcquinoa\np747715\nwang11111\ngf4946\nbotamedi1\nrunice79\ncomism\nbanzzake\ntksrhkruf\nqwe1090\nmathlove\ndm4leaf\ndongbubio11\nxnells2\nsaengi771\nshj337\neternalblue1\nnffood\ncaga777\nraboom\ndosanet\ngmis3\ncrmart1\nmodurental01\npaintong\nplayhome1\nmasaru202\nhongkal\nrixkorea\njangpantr\njungs337\noutliftr4175\nkdsw28003\ndebien001ptn\nliving365\nuncbag\nbycons\nmelias\nna84972\ndwcho3004545\ncampingrover2\ncampingrover1\njinrose792\ny2k8711\nshdbsrud\nhongo71\ndltmd0829\ntatacompany4\nenwj1234\nongzi0118\nhedgren\nbijoukorea\nyoung76oo\nbosun09\ntikikite\nhyosocorea\nklstory21\ndever2\ntheeden1\nezpyun1\nusenetadmin\nimarketing046ptn\nbrunyeux1\ncanagroup\nhispace1\ndkdleldkdlel1\ngiftzone\nmoongubox\nmaximum1\nmanmin2\nsportsgamblingadmin\nyptech\nhangs0809\nnnbworld\nmysanso\nallder13\nnon3001\nhwanz32\nfunis\nbaehouse\ndnfskfk\nelinfit001ptn\nyoojong\ngodo3d-040\ngodo3d-038\ngodo3d-037\ngodo3d-036\ngodo3d-035\ngodo3d-034\ngodo3d-033\ngodo3d-032\ngodo3d-031\ngodo3d-029\ngi122admin\nus.img\nonlinebrokerageadmin\ngodo3d-028\ngodo3d-027\ngodo3d-026\ngodo3d-025\ngodo3d-024\ngodo3d-023\nautoconfig.co\ndarkrider\nmaquillajeadmin\ngodo3d-022\ngodo3d-021\ngodo3d-019\ngodo3d-018\ngodo3d-017\ngodo3d-016\ngodo3d-015\ngodo3d-014\ngodo3d-013\ngodo3d-012\ngodo3d-011\ngodo3d-009\ngodo3d-008\ngodo3d-007\ngodo3d-006\ngodo3d-005\ngodo3d-004\naiesec\nwebdisk.co\ngodo3d-003\ngodo3d-002\ngodo3d-001\nhubpage1\nwchyun06281\njiwoomessi\nmindtesting\nkkjj09241\nrabine\nsujipbanktr\neqlinc\nnimirrr2\niking783\npassion973\nnalarizone672\nnalarizone671\ndrum4989\ncigarahn1\nfaville\npromise100\nwoorajil\nsagabang7\nsagabang6\nipayhoneyshop1\nbat87442\nsagabang1\npeachoi2\npeachoi1\ns3intnulbo\nrabick\nonoffstore1\nminfabric\nkhskorea4\nnande07\ncsgbboss\nbrbrbr86\njeanmania1\nbsta2tr3009\nmadamyoon\nroi\nblossomandco\nharyoh2\npatamania\netrang73\ndux\nshinilpack\nmusclebeef\ndaebo99\nhfa\ndoowool7\ndoowool2\nhanbell5\ncollage0071\nmoulay2\nrif\nfessu\nimstore3\nxboxdesign\nsuperpasha3\nnvisual\na2core\ndyota2080\ndlwogus1\nvitaminstore\nredlife821\nstreaminglog\nnhretail\nearlychildhoodadmin\nhoustonadmin\nipaybarun0900\nvanessahur1\nmrlighttr\nsorimaru\nromantiquej\nlovems2756\nnbgkorea\nless751\nlygll2091\nbunyoung\ngodo191622\nphonebuy\nsay201231\nnospin\nmira8724\nmyjinan2\nherbncell\nfeel2025\nmanmart\nlemoncandy\nkyung3043\nkyung3041\nbboglee76\nicandoit7a\nrubi82\nmansu382\ntsgim7012\nnani427\nsomsimaepsi\nacnenomore2\nsjskr1\nbyo37441\nemma1981\ndevnavercheck\nhbook\njyp00316\nhwh6366\nthvldkfhfp6\ngodo195737\nsujip-dev\nimarketing045ptn\nlinux4\nmejoos\nkwe3838\nti2214\nshmarket\ndanieljung81\nkimteddy\ngodps6223\nmeeples1\nsimac0603\nxmfkdnak\nessyoon\nenjoyetr1820\njooajoa11\nbiobkj1\nairwalkkorea\ndmsghk1983\nhitguy\nahabeauty1\ngobraziladmin\ns4freedevkthkira\njapanesecultureadmin\nbagstyle1\nskinnyco\nwkan200b\npolebeancci1\nwowavtr7884\noksmoking\n92food\naps3332\nomniremote-crackdb\nmotionpixel5\nkyh22272\nbeaure\ndooderjy\ntotalsds\nsp4510041\nsungcho91\nhwangsj\ncnr1004\nkassanobada\nautocntr8491\nhi-ho\nwww.league\nnagne159\ncrysy2k4\ns0aman\nyeunkim5\nbsretail1\ngood1985\neatbag12092\ngi48admin\ngi477admin\ntoltec\npcf\nanno\nbeatman1\nbeatoy\nimage110\nnemodale\npiaoyj7\nhcbig\nimage105\nharridan2\nbakeryzone\nohhyuk96\nassistking7\ntriratna\nforyoutr6147\ngmdrmslee\ncjk1979\namilove121\nymmink1\ndoremitr8685\nara3080\ndugilb2b\nshowrang\njinyingyu800\nalsso9\npkh0214\nhanshatr0859\nbeasia\nyabamtr\nanart3\nssunworld1\nje78kim9\nunicoh1\nnjmal88\nhwajin0\nmjnamja\nebedding1\n09jungle2\ndhahrry\ncarapass\nanastone\nkhkbest1021\nckw04671\nskijun\ngnookim3\ngnookim1\ntarkko\ncntese\nbikedream\nhana09241\npdk0518\nrivermee3\nsmartsetting\nslackware\neyeglassesadmin\nsrjy1234\nubplus2\nubplus1\ncokes4\ntrustfactory1\ndmd\nquitsmokesladmin\nimarketing044ptn\nskykeep5\nskykeep3\nskykeep2\ngi238admin\npopololo1\nwidephoto\nlotto97961\nsommo7979\nodcmalltr\nmoontk88\nipaynoteari1\nyahoofss\nwnrfla\nvngkt12\ndsbkortr2522\njokkrye\ndawwenter2\ndawwenter1\nhanoc\nrain001\ngi8\ngoldposition1\ngimme51912\ngo2cool2\npe1501\ngodo204620\nminhwan90\nseunghyun97\nfishintr8255\nbrightsk6761\njmagic\netern4283\nselenia\nmongmania\nhthlsy9\nhthlsy8\nhthlsy6\nhthlsy5\nhong1sutr\noddy051\nyouinn42\nedu35\nheadstone012\njihoon1004121\ncarstudio\npartyanimal4\npartyanimal3\npartyanimal2\ntgmedia\nppk\ncooluktr\nmccoywatch\nkansinny\nokbible\nmorffstyle1\nrockordie1\nitself\nskinnwtr1082\nshdnjs1\nt202\nbebecare\ns042833\namberhouse3\nvbsoma-020\nvbsoma-018\nnamjm96\njojun26\njojun25\nfemshoetr4711\njojun21\nvbsoma-015\nbear71\nedu30\nhjp710\nmikeoiya\nkronos012\ntwinssm72\nlissy11042\nlissy11041\nfunchiptr\nnodecore\ngodo194241\ngodo194240\nbeet8838\nlee11361\ncctvclub\nsuguntop\njunghwaw\nheedubu2\ntechtalk-forum\nduji1381\nmedela00\nksh85791\nwlsk003\nivadak\ncjj9937\nip209\ndsignhoo5\nkoreayb15\nyw9000\nkazugb\nmercurium\nseawoong2281\nbyh000\ncoke76\ninjeju\njachin11\nip198\nfshop\nwoodyctr4561\nkyneo7536\nninefirst1\nemofood\ngocaruso\ncsj0035\nairmedi4\nnanacom\nforsellerrelay\nip197\nmantomanjr1\ngi6\nszngsilver\ndaingolf1\ninumber\nyoyohi\ngodo193812\nsksdltmf\nhushin20023\nsmsmile\nhankook72\neyoungrla\nmedibank16132\nmangno2\nwrtoysports1\njunghwa741\nbrother1\nimarketing043ptn\njlcorea1\njs100j\nwk040304\ntotalbus\nsanegatr7906\niblpkotr8975\nsiwon1siwon2\nuc24891\nipayhaircool\nincobbtr1465\nus82go\nkch34p2\nanbd11\ngirlnshop\nmtbzone1\nbyeatopy\nwlfjddl46582\nmehode\ngoodnfs\nbrandywine\nstreetdia\njungo871\njumpgyu1\noops01231\nanjinil\nshy980204\nyhcmidas\npamikyung1\nraeo1004004ptn\njw33world1\nradstore\nalzipmtr2005\npok7204\ngodosg-029\ngodosg-028\ngodosg-027\ngodosg-026\ngodosg-025\ngodosg-024\ngodosg-023\ngodosg-022\ngodosg-021\ngodosg-019\ngodosg-018\ngodosg-017\ngodosg-016\ngodosg-015\ngodosg-014\ngodosg-013\ngodosg-012\ngodosg-011\ngodosg-009\ngodosg-008\ngodosg-007\ngodosg-006\ngodosg-005\ngodosg-004\nhommejk\ngodosg-002\ngodosg-001\nmemorydream\npro109\nparanshop3\ncrs2\nazrael0907\nkidjoo9\ndhadepot\neteamart\nmyshiny1\npstrain\ntoday2421\nvinch701\nhansclupp\nssf80001\ncottsco2011\nogamoktr1404\ngofla0tr9221\nmicaad1\ntysopumtr\nchoh0211\nvivicar\nruddk23141\ndm1159\nipayjehwan0202\nmeareman1\nvinusman\nye01072\nkimstoon2\nkimstoon1\noverdose\nrunescapebetatest\nns29939152\npearlkorea\ncubedevsunny\nhanguomj\ngike1\njeosystem\nkuoo1914\ngateau12\nbk1199\nemedimalltr\nlifeedu-019\nlovesole83\nip195\nip194\nhmsladmin\npeter123\ngameshowsadmin\nmedia-bpo\nyoutubers\nhsb\nsqr\nazozrm\nsudha\nwww.psy\nip191\nazshop\nwowedu\nyasedesa\nip190\npharaoh\neditors\nip183\nshkola\nip180\nip169\nsymbol\natlastest\nip163\ndafaka\nprofcom\nip140\nhomebuyingadmin\nnatadm\nwww.dale\nkms2\nretailindustryadmin\npaladin\nip252\nip251\ndahaya\nsyntax\nitaliancultureadmin\ngermansladmin\nip247\nip246\nhotmailservice\nautoconfig.linkedin\nmentalhsladmin\ndakati\nautodiscover.linkedin\nwww.reklam\nip243\no1.send\nskylark\nip241\nsouthbayadmin\ngi355admin\ngi116admin\nirishcultureadmin\nguideway\njacksonvilleadmin\ntpt\nwestchesteradmin\ngolfadmin\nspj\nfoodreferenceadmin\nip229\ngomexicoadmin\nstylespeak\ndata4\ndanlod\nip224\nchaubathong\nip223\nmvd\nora2\nip222\nip221\nphonecards\nhibuddy\nalisha\nip220\nip218\nexoticpetsadmin\nip216\nip215\ngi43admin\nip212\nstream02\nip211\nontheway\ngi472admin\nip208\nconecta\nnadorino\nip207\nip206\nalojamientos\ngi69admin\ngi233admin\ncorreo1\ncampingadmin\nip192\nip201\ncocinalatinaadmin\nip187\nip186\nhkmail\nns133\nns145\ndbrown\nip185\ndeadman\necomerce\nbilalof\nip184\nsamysoft\ntestesite\nns148\nakulah\nip182\nip181\nip179\nip178\nip177\nns154\nservicelogin\nns157\nip176\nts17b\nhayati\nip174\nip173\nip172\nip171\nip170\nip168\nns167\nns170\nip167\nip166\nns199\nmailmkt\nip165\nraleighdurhamadmin\nitblog\nwww.kst\nns221\nmidimusicadmin\noldblog\nip161\nch3\narmando\nip160\nvasant\nvideomost\nsm14\nsm12\nns220\nsm25\nip148\nvinaconc\nefecan\nns230\nns190\nns240\nbutnow\nns250\nns210\nns204\ncheeseadmin\nns260\nns205\ndafa\nns180\nip146\nip139\nip138\nip136\nsisters\nip133\nip131\nip130\nip121\nmp3test\nip118\nip113\nip219\nip199\nip189\ndelphiadmin\npureumlnt\nrapadmin\nwww.azmoon\nasdfghj\nbbarts\nbujamy56\nrisses0520\ndoreuri\nlifeedu-012\nlifeedu-010\nrelaxchair\nxkqrhfvpstus1\njb34387\njb34386\njb34384\nphonejtr7321\narcmalltr\nkestech\njyuhwan\namigyu\nxn2ztr5941\nvbsoma-010\nsaintvin1\nkgcbee1\npchansol\nanativ21\ncamp60\nmagicgonet1\nsandboy293\nintheliving5\nintheliving3\nbigboy930\nbluesunh2-040\ngateall2\nweppow2\nstorenet\nmoohan21c2\nsaejong0063\nhomme4u\nakak54543\nhcwb031\nmaestro4\nmaestro3\nkhunderjapa\nbluesunh2-030\nimarketing042ptn\nyjy75574\npool5519\nhdauto01\nstorenettest\ngi350admin\nbonaebada1\ngi111admin\nart9403\nmasa3029\nreddesign\nbluesunh2-020\nopenmaeul\nbluesunh2-018\ntaeannet1\nseldesk\nwookjoong\nnoa64101\nksu0921\naudgml8586\nks91554\nezmro\nbluesunh2-006\nojas20128\ngien1\nyah0216\nbluesunh2-004\nojas20124\ntj04016\nguandki5\nguandki2\nguandki1\nbchhome\neugenephil2\neugenephil1\nsanfranciscoadmin\njjoong978\nduluthadmin\ngoodcna\nnoplan\ncrossector\ndpakorea4\ndpakorea3\ndpakorea2\ndpakorea1\nhgh9111\ngf0103\nsang3570\nefinlandia\njad3343\ndominoland5\nwow9173\ndominoland3\ngodo202351\nsolsongju\nmotosadmin\nfos0830\nzzuujjoo\njejucjh3\nnepoung\nhipole\nskywithsea\nsangwoopool\nlohasprime\nstorymt\nsignmul2\nentrada\ndivorcesupportadmin\ngourmetfoodadmin\ncomicsadmin\nvideo77\ngodo192239\ngi37admin\ngi466admin\nftlauderdaleadmin\ngi227admin\nfranchisesadmin\naerospaceadmin\nsiliconvalleyadmin\nkidsbooksadmin\nrcmetr3143\ncmzip2\ndm0107\ncjdgo71\ngimtech212\nm9202\nquantez1\ndangmuji\nn011n\nwikids1\nsewon122\nsimswfcc\nbesthimall1\nmyfran\narin08222\nrhdrkdgml\ncocoluxury1\nsnow2tt1\nkinisia1\nahk0729\nparangsae\ndoremii\nparkmina0318\njoafabric\npadipros1\naftermidnigh\nneubible\ndamoa2171\nediya05051\nsogakjang1\ntontoy13784\nmoms9112\njonggkim01\nhouse2641\nkchair\nkitchenmall\ndustnsdl\ngodoedu-029\ngodoedu-028\ngodoedu-027\ngodoedu-026\ngodoedu-025\ngodoedu-024\nipaykhaksoon\ngodoedu-022\nlee07981\ngodoedu-019\ngodoedu-018\ngodoedu-017\ngodoedu-016\ngodoedu-015\ngodoedu-014\ngodoedu-013\ngodoedu-012\ngodoedu-011\ngodoedu-009\ngodoedu-008\ngodoedu-007\ngodoedu-006\ngodoedu-005\ngodoedu-004\ngodoedu-003\ngodoedu-002\ngodoedu-001\ndahanoo4\ndahanoo1\nksa0403\nteam65071\nezgo3\nkk11569\ncctvpartnertr\ntyjjang\nsinba8tr8703\ndass65982\npagodapan1\nggomi\nimarketing041ptn\nsang3022\nsang3021\nshinyo1232\nkuc0121\nlovelysani5\nlauraashley1\nkhskorea3\nkhskorea2\nkhskorea1\nhyunny7468\nraja883\ngi204admin\nvmde\ngi305admin\nlittlerockadmin\ngonwadmin\nprintscanadmin\nuspoliticsadmin\nxfacfory\nbbcompute\nautodiscover.adserver\nwsw\nautoconfig.adserver\ncontributeadmin\nbsosbos\nallamlatakia\ngi344admin\noreon\ngi105admin\nb365\nb364\ncalle\nb359\nsmtpout5\ndeivid\nb350\nsmtpout3\nb322\nonlineorder\nejercicioadmin\nb316\nrestaurantsadmin\nbiztaxlawadmin\nkidsmathadmin\nwww.newjersey\nwww.connecticut\nnewlywedsadmin\nnorthcarolina\ngadadmin\ndekrow\nmanagementadmin\nwww.alabama\nwww.massachusetts\nbindass\nfrugallivingadmin\nnewmexico\nhomebusinessadmin\nlatinmusicadmin\nwww.arkansas\ngi32admin\nwww.delaware\ndemons\nwww.minnesota\ndsample\nnewscool2\nhighteen\ndoumikorea1\nsungkunc2\nkoryms2\ne-malltr4552\nkjwoo32293\nneverdiesp3\nlabote131\ngi461admin\njytrade\nharugy2\nlee9501\nhaesung20843\noutweltr0931\nbbridge0734\nsheungmo1\nstory62\nskdiwndl1\ngogumagogo2\ncsangsun75\njhcho8420\njhcho8418\nwww.newhampshire\nwww.illinois\ngi222admin\nsteelni1tr\nfoodduck\nwww.vermont\nzzuzz2\nlee9393\njncseller1\nfoodfarm\nclubchamp\nsouthcarolina\nsiwori\nyoung2536\nharueui\ncnsgh334\niconsupply\nsiwood\nksm32601\nno1boiler\nnno12345\nspatherapy\nsojin7475\nprobastr1978\nrhodeisland\nwww.wisconsin\ngenetichong\nmtsports1\nipayhercules001\nthis2157tr\narab-net\njinmax371\nbomto3434\ngodo201251\nes4today\npdstudio\npjhwass\nvision894\nhipet2\nwoonsanhb2\nwoonsanhb1\nhgyjsa1\nhds3406\nalaya2776\nzpii2\naodkorea\nwinksjd1\nwidcase1\nhaoba8tr4026\njames75861\ngosisktr9155\nuss8888\nmyeraf\ncilon79\nluhzenblanc\nbigca4u2\nglffldqnwjr\ndeccario\nbsosabt\nkimshow2\nmrsong21\nbaboking\nblcmath\nnoogle\ndorcus2\nbhhanyang1\nwiclara1\naimys67\ngrandhil1\nhkp2560\nspycoffee1\npick.rap\nfhwmepdlf6\nminkj001\nfhwmepdlf2\nlinenumma12\nkjhmisope\ngodogodo-049\npon2mart\nidealistar2\nkhs9281\nsoapschooltr\nlee07101\njsoo100\nmozart4426\njinsori2\nbyeonghg4\nplumbingadmin\nboxeoadmin\ngodogodo-039\ndailymans\nzigngn4\nzigngn2\ns3intsky\ncoomim77\nkkareu2nara\ndrcorp1\ngodogodo-030\njamongc\nco980329\nfromnongbu\nimarketing039ptn\ncarajsj1\ngodogodo-022\ns3intsdg\nsailingadmin\nsts1\niklanbaris\ngodogodo-019\ntae64802\ntae64801\nguess001001\nljh82403\nkhs8989\niaandp1\neyely\niaey57\nkkdyoon\nlsmfish\ngodogodo-010\ngomputer1\nbuybetter3\nwjh7975\nakxogh\nexmtb\natco6565\ngodogodo-005\nshesgotr9676\nshockyoo\nsangsev\ndesignnice1\nvaionote\nhorroradmin\nbantdoduk\nqnrgoe2224\nub12121\ngi338admin\nmetafaux\nghs04022\nraeo1004001ptn\nmorenvysenior\ngi100admin\nocsedge\ncentralnjadmin\nhaven-forum\nplasticsadmin\nwaterskiadmin\ntoolsdevadmin\nwww.clone\ngi358admin\ndev29s\nbonkorea\nsnowmatr4981\nhkjajae\ncornerb\nsound16\ncttc\ntardis.ntp\nnonno100\nswy9988\ngoobbuy\ndensun\nfinishline1\nyouto1\nitmyth\nseland2\nprintec09\nektl1004v1\njs2proj\nalpskorea\na18burn\nkgh8860\ninooint3\ninooint2\ninooint1\ntjdejrah1\ncosmamtr6185\nttt308091\nmamongs\nilgimae1\nhyj0616\njwy8044\nvdmsv125\nsekkei\nearangel\npinkiegirl\nbikemac1\nmeal1owner\ngodo190245\nchungzz\nrocbi01\nalone0301\nhot95292\nhonai77\nkorbiketr\ngerpm\nkptool1\njm40491\njejucjtr9330\njb1130\naquaclean1142\nyewonnn1\ntory8787\ninhotel2k4\nyouppy\ninhotel2k3\ndadream7\ngerio\nitechkorea1\ns3intman\ngreenstarlab\nakyba1\nand136\neyesore\nhurbnvinu\nracetech1tr\nsardo763\nsyr0247\ngeniusynh\nchunghs\naurora3333\nh9944021\npunkgirl141\ndamin9496\nsisunagency\nlimjaddd\nsj12240\nsang1172\njungfarm\nyasw1109\nmilwaukeeadmin\nuncledum2\npjk8112122\nbboyan1\nsurfingthemag\nbbongc84\neye31\nyesjubang1\ndbswjd12001ptn\ngokimyong51\nvustore123\nmangbae\ngi120admin\nfelttree\njungah2009\nnoriko\nnewdept1\nallthat01\nchamosa\nwlgus0606\nimarketing038ptn\nsisamall-020\nbysooni2\nbeliefstoretr\nhinius\narticandle\nbridgestone\nlion98988\nlion98987\nlion98986\nmunicipalcareersadmin\nlion98984\nzippy0883\nzippy0882\nzippy0881\nbusangirl\nmangjang7\nicon1220\nabout1103\njyhong851\nsisamall-010\ndororo21\nivoguetr3185\ndressmoon\nmimartco4\noxybion\ngi26admin\niamamine002ptn\ncaliella\nsarahmell\nbockhan2\nbockhan1\nicamp4tr\natozsaib\ngi455admin\nruchaga8\nruchaga4\nruchaga3\nsugar003\ngirlsego\nhmhee0130\ndberry001ptn\nkimterry17\nmoduru\nbelldand02\ncocoamilk29\ncocoamilk23\ngtc017\nsado102\nsunrise1\nyeecya2\nyeecya1\nthfactory\nshilla041\nlsw31391\nbadboys532\ntakyp4\ndongkang-015\ndongkang-014\ntakyp1\ndongkang-012\ndongkang-011\ndongkang-009\ndongkang-008\ndongkang-007\ndongkang-006\ndongkang-005\ndongkang-004\ndongkang-003\ndongkang-002\ndongkang-001\nrongee19901\ngodobusan-025\ngodobusan-024\njoy2htak\ngodobusan-022\ngodobusan-021\ngodobusan-020\ngodobusan-018\ngodobusan-017\ngodobusan-015\ngodobusan-014\ngodobusan-013\ngodobusan-012\ngodobusan-011\ngodobusan-010\ngodobusan-008\ngodobusan-007\ngodobusan-006\ngodobusan-005\ngodobusan-004\ngodobusan-003\ngodobusan-002\ncamerasadmin\ngodobusan-001\nseoulitle\nwoowing\ntod01081\nlily0728\ncok2yj\ntj00692\neyetag2\ngagugood\nwin5010\nsuuv1226\ncyan071011\navibookstr\nshoptr6928\nzzzooon4\nsolgartr1956\nmad41303\nsegyeuhak1\nlison982\nsksk0622\ntuinsports\ndynfou\nfpfp883\nbabohtj1\njaehunx1\nlifesaver9\nlifesaver1\ntakuti\nwfishingtr\ngodo188085\ndengol\nkichpony\nkblue0\nyewon0903\ndodan15258\ngi216admin\nckdghks5317\narmarkat3\narmarkat2\nitckorea215\nitckorea213\nitckorea212\ndomain11\nhangreen\nyoungink411\nhansj1128\ndebr1004\nabzapps\ndadajubang\nurizone3\nbbcountry2\ncurtbein\nrainsoul00\ncyj19742\njikyjeon137124\nmaxsavtr0357\nchangwoo0120\nbswoo414001ptn\npungnew9\ngongze1\nj2story\ntouch1822\njwpkg0696\nlifehanbok\nimarketing037ptn\neggstar\nsjmall\nbanilafruits\nldhstudio2\nmissleeshoes2\nmissleeshoes1\nniubung\nchase69002\nchase69001\nhangravi\njikyjeon136869\nych78772\nych78771\nmega70\niamamine001ptn\nmilisitr8615\njean218\nnakim0103\ntopia12342\ntopia12341\nstylelight\nkissmethe21\ncoffeegsc5\nbadwin7\nfmmol\nbadwin3\nbadwin2\ntrueguy211\ngumigagu1\nwunderkammer\nmyclic\ndltkdgusz22\nflux9\nnamdo71\nagafriend2\nhit000\njikyjeon136672\nseolmisoo\nlaurenjoo2\nminneapolisadmin\nfrog0815\namdkyt\ngocamptr\nttouch85\nhhb9397\nknstamp3\nbuelin1\nmandoo1\nlifestylist1\nskidlove3\nagprinses\naws26801\ngo90861\ndudalj1\nusnewspapersadmin\nmunbook\nstaryuja68\ndelsey\nsujung0807\nwebhostingadmin\ndk83666\ntreefrogco3\ntreefrogco2\ntreefrogco1\ndk83661\nchuksan\ncueplan2\nelbtano\npygetec2\nkoino11\nmymiru09184\nvusrmawhd\nhaemin34251\nkwang8481\npenjoby\nduckbai\ntherapycareersadmin\nyesmi10042\n1004sg\nals112911291\nsupplyctr1\nplan20133\ndbs001171\nwork.americangreetings\nrtj01034\nsisusu\nyosong201\nweddingcar1\ntalk11\neverland04\nsongahry1\nkwj123\ngoodgown2\ncoscat3\ncoscat2\nsjanwhdk22\nptuebiz-050\nptuebiz-048\nptuebiz-047\nptuebiz-046\ndressline\nptuebiz-044\nptuebiz-043\nptuebiz-042\nptuebiz-041\nptuebiz-040\nptuebiz-038\nptuebiz-037\nptuebiz-036\nptuebiz-035\nptuebiz-034\nptuebiz-033\nbyminlee\nptuebiz-031\nptuebiz-029\nptuebiz-028\nptuebiz-027\nptuebiz-026\nptuebiz-025\nptuebiz-024\nptuebiz-023\nptuebiz-022\nptuebiz-021\nptuebiz-019\nyvette\nptuebiz-017\nptuebiz-016\nptuebiz-015\nptuebiz-014\nptuebiz-013\nptuebiz-012\nptuebiz-011\nptuebiz-009\nptuebiz-008\nptuebiz-007\nptuebiz-006\ndamulkorea\nptuebiz-004\nptuebiz-003\nptuebiz-002\nptuebiz-001\nramses15\nkagamii2\nkagamii1\nbaksakimchi1\nhighend\nbukku\ns2pintsunny\ninagi99\ngcore\nozled1\nhyun790320\nauteurkim1\nilove3691\nimarketing036ptn\ngomppi1\nnana312\nkiwamimall\nip2001771221.none\ncafepremio\nluxurycity9\ndelt77\ndaljae113\ns4freeintsf\nwlachacha\ndonghan53\nbiny1122\nkundservice\nwow4482\nyasuike\njeju82457\nentertainingadmin\ns4freeintnj\nsamiamseo\nitspresent\nsjkjh2\nmamsarang\ncoroner\njjoodol\ns4freeinthn\nansanmooki6\nansanmooki5\nansanmooki2\ngogofishing1\npcmaker\nserverhosting245\nserverhosting244\nserverhosting243\nserverhosting242\nserverhosting241\nserverhosting239\nserverhosting238\nkidsmotors\nserverhosting236\nserverhosting235\nserverhosting234\nserverhosting233\nserverhosting232\nserverhosting231\nserverhosting229\nserverhosting228\nserverhosting227\nserverhosting226\nserverhosting225\nserverhosting224\nserverhosting223\nserverhosting222\nspatial\nfox9head1\nserverhosting199\nserverhosting198\nserverhosting197\nserverhosting196\nserverhosting195\nserverhosting194\nserverhosting193\nserverhosting192\nserverhosting191\nserverhosting200\nserverhosting188\nserverhosting187\nserverhosting186\nserverhosting185\nserverhosting184\nserverhosting183\nserverhosting182\nserverhosting181\nserverhosting179\nserverhosting178\nserverhosting177\nserverhosting176\nserverhosting175\nserverhosting174\nserverhosting173\nserverhosting172\nfieryguy\nserverhosting170\nserverhosting168\nserverhosting167\nserverhosting166\nserverhosting165\nserverhosting162\nserverhosting161\nserverhosting160\nserverhosting157\nserverhosting156\nserverhosting155\nserverhosting154\nserverhosting153\nserverhosting152\nserverhosting151\nserverhosting149\nserverhosting148\nserverhosting147\nserverhosting146\nmk3477\nserverhosting144\nserverhosting143\nserverhosting142\nserverhosting141\nserverhosting140\nserverhosting138\nserverhosting137\nserverhosting136\nserverhosting135\nserverhosting134\nserverhosting133\nserverhosting132\nserverhosting131\nkdypiano\nyuki2\nserverhosting125\nchlgks77\nserverhosting123\nserverhosting122\nserverhosting121\nserverhosting120\nserverhosting118\nserverhosting117\nserverhosting116\nserverhosting115\nserverhosting114\nserverhosting113\nserverhosting112\nserverhosting111\nserverhosting110\nserverhosting108\nserverhosting107\nserverhosting106\nbuildup66\nserverhosting104\nserverhosting103\nserverhosting102\nserverhosting101\nserverhosting100\nyepia2\nbinco41\neosyun\ncromyoung1\nenjoyholictr\nbaeoun2013\nkbldmk\npfcb2btr9416\nhanqtour2\nkangaloo681\nsmallvtr1168\nkc0505\nbbulai\nteacera1\nnamja5979\nboromaru\neblshop\nitjump\nok907212\nmcubei\nmeeandjoo\nyun6208\nukss12\nwansung2\nwansung1\ngocamera\nfoxdata\ntyfnb07011\nflagoutr7506\nsoonung1\nwoghksbs12\nyeskr872\nkptool2\njulee2722\ntkvkdldj12\nitscamtr7819\nhot2shtr8324\nuicivfer\nanticalf\nstupid13\nghj11243\nbeatcool\nwolimmungu12\ngonysoda8\ngonysoda7\ngonysoda6\ngonysoda5\niamyulmo2\ndm1159tr7350\ncomposer2020\njijangsoo\nsunny8711\nbroadbandadmin\nhighkickz\ntheholyseed\nfootstreet\nallfun\nhomemeat1\nemall244\nkhuart\nimarketing035ptn\ngreenfamilyadmin\nminki65451\nfjqmapwlr\nbau\nainmall\nlee4651\nshcompa\nleejy12292\nbtoall9\nmiraeatr2005\ngabenori\nftforest1\ncity06971\nrhkdwls723\nktk4051\njujutiti\nnew.www\nna73732\nyh71040488\nmyanb9\nairing3\nsminco041\nmyanb3\nsltlwjf2\nsoban9999\nipayecolv1\noldprime\ninul003\nkumsansane\ntotor19181\nviatc011\npbuild5\nohayo\njinhui11202\nminormajor1\nkonkuk-064\npcs1218\nallect\nsyjmom3\nsyjmom1\nheejung2\njobsearchadmin\nwpraitr3844\nmygdgr3491\nanima69\nheejung1\nbdsblog\nksmkoo3\ndkt1234\nmerci21\nip2001311721.nrc.ice\nnaru49494\nroverto\ngreiding3\ntimmy92\ntong043012\ndaun79\ntong043010\ngarnetstory\nkojj073\nkojj072\nscribe\nurbantake3\nleegun19804\nleegun19803\nprotuve4\ncartoman\nmiscel2\ndadajch\nzeezer\nhhsol7\ndreamtime2\njaboshop\njunetek2\njunetek1\nribonbebe3\nhyang777kr7\nsalimsali\nallapp\nartisan85\nwilliamws44\njungang3\njungang2\nmanager84\nkch34p\nhangoeul\nsaeyangint1\nsomang01532\nypp002\nypp001\nautomotr5324\nallbab\nyeoback8\nmyahn7\npdazone\ntbldesign01\ncjihun792\ncjihun791\ngi333admin\ntrynulbo\nstarexon1\nstoneis\nklove76\ngarak\npks82191\nchairbo\nhiki88\nroyalaqua\nsnoopy0712\nindasom23\nmicromtr8776\nvollzzang1\ndap\ngksrudfla1\nkdiden1\nhimoon43141\ncmw1287\ncinemathe\nkoreantea\nnemestar1\nluvmung6\nluvmung3\nbadpoet9\nbadpoet8\nbadpoet7\nbadpoet5\nsooguncafe\nbmpshop\nvpn2gftp\nimarketing034ptn\nlmss042441\nrkdxogh011\nlee3642\ngamzi\nswdps0811\nsnkc001\nlobchou70\nchoisseung\nchonggakpapa\npusary74\nbabylish1\ncoalsk\nking2112k\nchunbak1\nkimsj418\nbigtown7\nhesaidsmart\nbobdodook1\ndoleyetr3930\nnewface22\nnewface21\nxpshx777\ndcbook\nasctaix\ncalla11190\ngurilla\nsytkfkdgo31\nsachajuan\nrlatnswk24\ndnckorea\nlwy03022\nlwy03021\nupmotors\nerumn\nisolmg1\ninhyun44tr\nhyflux11\ncnb57091\nkkaebong\ninsunui\ntherefore1\nisroad\nulife1\nduggy741\ncnn5326\ndomaejoa\neosida\nahwld53\nfoodztr\nasdq001\njjsk26\nauddnjs2\npuppyworksmall\ndjbiart\ncoolmans\nyejin3\nmcsh97\ndlfrnjs9102\ndlalswns14\nzzus70\ndkkj0518\njwjuliashin\nping3059\nperevod\nlee3122\nneosans\nmoung4839\nyuna04791\nallatpay\nfoodzen\ntodream07\nraimtree\nbank1\nohtrade1\nyc0098\nabstrait1\ngagus\nherezzim\npink129-030\nfruitsoban\nfix05\nxenodori2\npet2day\ndpency\nmrherb\nkokory932\ncjyhm\nsunnyhouse\nnicolekimbs\npink129-020\ndpseller\ngahee\nhdwegutr3316\ngraphicn\npink129-012\nantiqland\nkkangtae852\npink129-009\ngg777\na72481\ngspungsun\nilove0702\nilove0701\nna462791\nbluesanitary\ntenorlky2\ndbwjd6660\nanimationadmin\nmoning620\nhqmon\nimarketing033ptn\ngaeun\nacbccc3c\ncc112a8\ndasom7735\ncc112a5\ncc112a4\ncc112a3\ncorelee6\ncc112a1\nuniquebutton\njamomalltr8882\nasanever\nprcup1\nmorenvy028ptn\niamgantr3550\nbaejina\nprori61811\nhjg112\nlightingadmin\njayhome5\nmediasoul\nbada264\nw90226\nlucylove\nswissmall\njizone\nrsho04\ns33h3001\nsuniya10041\nmjs1051\nchhj1017\njspark3661\nmk0505\nwebdevsladmin\noutdooraz\ncstyle2\nyogoyotr6804\ndsr62083\njewbling\nmmmobile\nbbosasi51\nhgk5361\nwooriv4\nqueenslook3\namadas\nwoorioh\ncoopnutr9554\nlivinjs\ngibrocom2\nhyunju0510\ncoscostr0282\ninnohouse2\ninnohouse1\nmorn1020\ncostfetr6892\ncyhealth4\ncyhealth2\ntfarmstr5694\nipaycbk326\nsearchlist.pmy\njhmeditec\ncoollake\ntjdtnrnen\ngyuho771\nwooro22\nhobongtr0513\njsdesign00\nqkqh1617\ntamina\nzeyo12\noutdooreuro1\ndialogic2\nlesha12\nrobean2\nsasari729\nmttech\nparandul10042\nkst1402\nbbosasi\nisb12151\nas1115\nsamohago1\nfoodome\ngreen1004kr1\neduts23213\nclubdica\nsadbluerose\nhangju123\nkapsik\nsilicon63\nqkqh1403\neorect\nftts12272\nbj1003\ngodointerpark\nsuperdhk1\nmetdolkimchi\ngaiasun9\njkd21004\nanaclicom\nho9318\nredtough78\nmanijoa36\nmanijoa34\nmanijoa31\ninfos912\neueverpure2\nkwakjh53\nweert77\ngeddong\nimarketing032ptn\npppman\norzr2me2\nkhs2145\ndarkenen\nktk0993\nakstjr78\ndomemart11\nhnaksi2\ngi404admin\nsinzza\nnetcr61-029\nnetcr61-028\nnetcr61-027\nnetcr61-026\nnetcr61-025\nnetcr61-024\nnetcr61-023\nnetcr61-022\nnetcr61-021\nnetcr61-020\nnetcr61-018\nnetcr61-017\nnetcr61-016\nnetcr61-015\nnetcr61-014\nnetcr61-013\nnetcr61-012\nnetcr61-011\nnetcr61-009\nnetcr61-008\nnetcr61-007\nnetcr61-006\nnetcr61-005\nnetcr61-004\nnetcr61-003\nnetcr61-002\ndns254-4\ndns254-3\nmorenvy027ptn\npinknatr9125\ntinda78\nks75b72\neticket24\nbrion4311\nseo11011\njoinxstudio\nmom0won\nahnjb281\nsilverasun2\nseawari1tr\nheadintr3582\nstylehtr0153\nas0601\njschang9\ntaeky96\nshoptr1282\njellyfish1\ntaeyangkim\nsugarjy\nchan501\nkny1213\nichina98\ndurifishingtr\nkkjj0924\nnohant\nhascos2\nwjsquddnr\nenurictr4861\nppori2\nsalmon6948\nmarys-igloo.powerize\nparabol\nwheeya882\nynskorea\nhue3087\nwineworld\nbackshtr8387\npainfred\nphototile\nanshhans1\nunjung17\nbsbosan\ndaegunet\ndysky\nmoon18451\nlee1136\nilsanrc\nyeye159\nseawoong228\nmoolzil1\ninfomax4\ninfomax1\nhyoseob90\ncoretnt\nyeon0408\njit00400\nhaegung1\ngursung\nmarch322\nyoyo8\nisplan\ndmswn63352\nkhan3815\njun10031\ncucu811\nasianain\nyoon01\nufirst11\nhighandlow\ntaeuki\neugenephil\njssj0515\ngreum07\ncantaville4\nkjmy119\ngkdlfndgl\nmudetppo1\nflaming\nlee0798\ninpiniti1\nsponia95\npkgagu80\nnarintr7342\nbiyosekkai1\neugenephi1\ngjrjsrkd\nouangkn1\ndbstmdwn\nhgyjsa\nmool203331\nkoreamall\nspycoffee\nhujung87\nfghj40\nzpdl161\nimarketing031ptn\nmhke486\nerumn0701\nwjddudejr2\neventplanningadmin\nyyao\nauddlfdu\nisoral\nyewonnn\nbi80002\nbboyan\njphoenix037\njphoenix036\njphoenix035\njphoenix034\njphoenix032\ngagustory\nzexcom\nkthkira3\nkthkira2\nkthkira1\ntabacstation\ney05061\nsweetpack1\nsdphottr4640\nswimnara2\nshj3449\ntnchtr4676\ngdtest-049\ncmdesign16\ncmdesign15\ncmdesign14\ncmdesign13\ncmdesign12\ncmdesign11\ncmdesign10\nbuymi1\njhngyu11151\ntakyp2\nsinsa2\ndongkang-013\nych7877\nseniorlivingadmin\ndongkang-010\njsa0821\nvivianan5\nmultinaratr\nnice7174\ngurdl1207\nyewonb1\npeppercenttr\nplanetm81\nbangang5\ncoreok2\nellisvtr3425\nppoip5\nppoip4\ndudskawnd7\ndudskawnd3\nfoodbay\ndldydtmd\nserserser\nvip254-16\ngodobusan-023\nenstyletr\ngodobusan-019\nvip254-10\nherbkorea\ngodobusan-016\nyubu\ncnt32321\ngodobusan-009\ngkdms92541\nsimwon\ntobewing2\nstyleformen\ncham292\nthechae2\nrudy1248\nbadpoet\nna7282\nhaenim20001\nsoybonita2\nollehdo\naltenergyadmin\nbc20092\nxmanjee1\nvitacatr6990\nluxurytr3289\nminilever\nhmsolutr6091\nleejihyec1\ngatwo1141\nchagal4\nhjspomedi\namarzon2\nkchul9111\nkimdaehyuni\ngt-camp\nbradpato\ngundamhousetr\nftts1227\ncham100\ngnrecycle\nhello21c1\nbomnalecom\nwoong12062\nyoon1\nyellyky2\nyellyky1\nkoorie69\nyang2625\njangmoer\nlovejlovej1\nvpn2crc\ngiftme71\nbaegma2\nrkqjsj1\nagrnco01\ny48199811\ngi21admin\ntazale1\njiyaaa\nkimhyohyoun3\nkimhyohyoun1\nwdbyeon2\nimarketing030ptn\ngatwo114\nsgmania\nhansongcnc\ndyfkrl\ngi449admin\nleeah3573\nleeah3572\nleeah3571\nbboori1\nsnp2009\nmoon17005\nrjsgml56941\na025085\na025083\nhojungga2\nexpertlounge-forum\npetitange\nmorenvy025ptn\niluminox\ngi211admin\nnobujang\nabalico5\nhansgallary\ndaaec112\ngdtest-023\npinkicon4\npinkicon3\naramusic\ntdrp774\namaretto4\ncarstera\nfoodallergiesadmin\nynj6\nakongs\npswzag\nprotool\nbetahome\ntmx0907\njoypolo3\nalike123\neditors.team\nhappy23593\nnoduel\nhappy23581\nany49527\npassimo57\nhahaback21\nkowakorea\njiwon1\nbuybiz\nmir83577\nmir83576\nmir83575\nmir83573\nparkhahang\njs90203\njs90202\nfoteckorea\nmichs372\nbizjapan\nsally7tr9258\nokpack97\nartmania7\nalexno1\nsjk752\npjo4422\ngagastudy\nmiiusnc001ptn\nphilosophybag\nensso\ndycal\natechmall\nhue1104\nrusi1001\nbarbiedollsadmin\nkiztopia\nminilca1\nmagajean\ntrionsun\nkksh7028\njohyomi\ntodayonly1\nzlwhs1231\nbujacat1\njeonginzone\nrcpowetr8500\nfiveray1\nstyx11211\nbody70772\nno1cctv1\njgarden\ndrimi28\ndrimi25\ndrimi23\nvenosan1\nraehyun1\nlastcamping1\nwndhrl\nksfishing\ncpt091117\ndptnfrh21\nbeeradmin\nyepia7\na0250811\nhealingstay\ngranvill\nk8w3s\nfm012\nyogitea10\nwonwoo2\nheatertr4486\nhongmessi\nkoaf4949\nbumilion2005ptn\nkonkuk-069\nkonkuk-068\nkonkuk-067\nkonkuk-066\nkonkuk-065\nsomgulem1\nkonkuk-063\nkonkuk-062\nkonkuk-061\nkonkuk-060\nkonkuk-058\nkonkuk-057\nkonkuk-056\nkonkuk-055\nkonkuk-054\nkonkuk-053\nkonkuk-052\nkonkuk-051\nkonkuk-050\nkonkuk-048\nkonkuk-047\nkonkuk-046\nkonkuk-045\nkonkuk-044\nkonkuk-043\nkonkuk-042\nkonkuk-041\nkonkuk-040\nkonkuk-038\nkonkuk-037\nkonkuk-036\nkonkuk-035\nkonkuk-034\nkonkuk-033\nkonkuk-032\nkonkuk-031\nkonkuk-030\nkonkuk-028\nkonkuk-027\nkonkuk-026\nkonkuk-025\nkonkuk-024\nkonkuk-023\nkonkuk-022\nkonkuk-021\nkonkuk-020\nkonkuk-018\nkonkuk-017\nkonkuk-016\nkonkuk-015\nkonkuk-014\nkonkuk-013\nkonkuk-012\nkonkuk-011\nkonkuk-010\nkonkuk-008\nkonkuk-007\nkonkuk-006\nkonkuk-005\nkonkuk-004\nkonkuk-003\nkonkuk-002\nkonkuk-001\njgh09171\nflykys13093\nimarketing028ptn\ngorillakt1\nflyforest\ndms33281\nberry0007\nmrteddy\nheewoon0\nfalltvadmin\nselfcrab1\njungjs3142\nfeelmedia\ntkfkdgo01\nvuuv01\nqhejrqh\nanykeyezon\nd431214\ndinnovation\nmorenvy024ptn\ncristianosadmin\nbtmobile\ncarpediem01\nrinshua\nydsm\ngiftall\nyejj\nthfwl1911\nkkium1484\nyedo\ntendori1\ngi298admin\nlubu1061\ngunsa1231\njames5272\nlikesam1\ncatcafe3\nmakeoftr4787\nkamnol\nkeyang40049\nkeyang40048\nkeyang40047\nkeyang40046\nljm19671\nkeyang40043\naszx11201\nisofum2\nisofum1\nenglandnwadmin\njcym1537\njcym1535\ncolorshopping\nmdeco6\nseyong10\nasung291\nlabelladea\nhoidap\nfastjun\ndufkddl1191\nmj5358\nakdlfjtr8602\ngi173admin\nhomehealth1\ncarmemorabiliaadmin\nna5284\nddmris\nazazaz3331\nogapylove\npozl0865\nyain\nitk418\ngreen8\nyje4875\nsmtpapps\nmecafitr3291\nlightmodel\nae-admin\nwmcom1577\ngodoshop-009\nsomimom12342\nchemical91\nneoprize2\ntmc8683\ndancompany\ndeehes\nduzon\njkyoonc\njjnara\ngi327admin\nheewon85\nbenefitkorea\njoinusb\nwansocar\nstayawake77\nmoon15193\ndarius211\nkunstler2\nkunstler1\nontiptoe\nbumilion2004ptn\ntnhawaii1\nkamit2\nismine\nipayjola0559\nrudtn119711\neun1590\nwizbook4\nwizbook3\npenblan\nwptndtr5678\nannandy1\nhanxiaojie1\nglobalfood1\nminimaltaste\nhyunyx2\nvividtt1\nimarketing027ptn\ntonerpiatr\nenest\nasepsis4\nwjswn73\nmtb7679\nenfid\nstarfavorite\nbockshot1\ngarsia7\nsummerfunadmin\nho5154\nddos134\nddos133\nmorenvy023ptn\ngary812\ngary811\njeongrh1\nheeflowertr\nurizone1\nk123625\nthings1\nyang0346\ngoeuropeadmin\nskinevent3\ns2pdevsunny\nfeel4\nskarndalsdn2\ncjtrophymall\nprotool1\nyonginmis\niyuneun\nevenmore\nxwave\nsky2000aa\nkibon13\nmario18121\naoupersona2\naoupersona1\noneself01\nkjnet76\neomji7\nycleeforl\ncjcylee7\nericgolf\ncndizn\ntkshop-029\nearlywire4\nya09\nbc16271\nkgswon2\nkgswon1\nohdaejun\nkukujj\nsoccerbu\nminetatr9974\ntkshop-021\nnalee14\nojiland\ngodotechmijung\nlamodem\nleech12208\ntkshop-017\nliveplane2\nwhite5now1\neinein3\nbas03134\nbas03133\nrockwall\ntkshop-009\nsmartdev1\nbobbarabob1\nseirart\nalecas\nyooo782\nwwwmall\ngi439admin\nmonicahair\nkoo6002\nhicodi\nbaitas\ngreendoughnuts\nlivedo3\nshimsb75\nmomipotr6212\ncrazyshaun\njangle65\ntig233\ngi210\ntig232\nchadago\nepdevb\ngi208\nthacker62\nphysicaltherapyadmin\ngi191admin\npungnew1\nbread35tr\nkami44\nbastoni1\ngb098\nlemon8250\ndbwjd1004\nmkphw214\nmkphw213\nsimsimq9\nsimsimq7\nhm50061\nsimsimq5\ncoratex\ndalcomkids\ndaontech1\ntoktokki\ncharlieyeo\nhappyyj86\ngodo177009\nkakti2\nkalito\nsooa5548\naltaicho2\nkkk6099\nhjw8500\nssh83311\nshellac1\nbumilion2003ptn\nesecretr8940\nkoo5586\nipayetlaw\nhyunqok\nrhim1119\nlitta1999\nldy03021\nzespa6\nzespa2\ngodo176770\nsrynn1\nsoulful12\nenjoybike\nshchdud\ncc.m\nevent114\nnaknrak8\nimarketing026ptn\nhk28914\nknight76671\nvnsy\nsjk8402\ngood365food\nss2inctr2004\nahn1222\nmudeuntr7725\ney12191\nvoff\ndoosikl\nspacenowave\nrice9661\nsportsday\nmorenvy022ptn\ndvdva\nhaendel\nchaawoo\nsoccer11\niskra1\nocmart4\nshug00\nheeddong\npringlesk2\nw861104\nbikeshowtr\ncacmall\ntnfusdl81\nweisure00\nsilvercat\neballet1\ndaolnet0072\ndaolnet0071\nredhwang993\nredhwang992\nsjkw0414\nddolyka9\nddolyka8\nshinhwatex5\nsiiyou\nsaltlakecityadmin\nemcpb\np0won01081\nsaicorp3\nsaicorp2\nsaicorp1\nhhkim5112\nyjscac1\nnicekido3\npajama6\npnlenter4\njeongeun\nsinjin77\nkyungmin-009\nremnant1\ngodanbtr8389\nsaehan5340\nautoconfig.whois\ncoolgun83\nvenygood\nc1s1o1\ncana12122\nwkdrns09\ngi15admin\nkemuri82\ncmd79564\nnearndear1\nherbjuicy\nyoonwata\ncommando1\ngi444admin\nskinspecial2\najume1\nstdevos1\ntimeseo\nks75251\ntjytr5406\nnpaper212\nkwakcom4\ntinyeltr2933\nautoplaza1\nelju6\nelju5\nelju3\nelju1\nggamsnet2\nggamsnet1\nasiabridge1\nstarfatr7406\ntotoking3\neastvillageadmin\nphermia\nvium\ntoolemart\nqwe912-016\ncadboy2\ndicovery\nautodiscover.whois\nbwchon\ngustjrr2231\nsykim9403\nglandblue21\nshaians1\nylg2670\nelime\ndespresso\nvasuburbsadmin\ncondance1\nhanzone4\nzeroxl\nplantgallery\ngi195admin\ncleanok\nmj23kr\nsunflower92\nwassadacable\nsin51151\nurer\nsa1004a\nbmw320d\nmahleria\nkotak04411\nfourthb2\nnycdowntownadmin\njinnwon\ndlwngml672\nmissung\nynsgbm\nwjddmlwjd678\nalexno11\nrydesign3\nrydesign2\ninasound\naidpower\niskins\nduwls2651\nuucloud\nmaster375\nkfinco1\nmichiget\nshoptr6378\nyongilpak\nimarketing025ptn\ndbnaksi\npmh0624\nmbsool\nunui\neprincess1\ntyg3\nloveganome\nyeahyayo11\ngd3363\nskorea20101\ncosmogoni\ngray73\nhyungje\nljs3943\nhibini\nmorenvy021ptn\nver5\nver4\ncomprarautosadmin\nink2150\nparkts3242\njbhg1231\ncanopix3\ncnccom\npotape\nwecomarket3\nwecomarket2\njj4ncts\ncncbuy\nonly114\njinana004ptn\nparksee8\nbatekorea\nizzang65\nquiltquilt1\nwjglobal\nerunner2\nnhdcmart\ncorecube\nkey4989\njaemin205\njaemin204\nsmartpremium\nrefurbishadmin\nmissred\nmagicyi1\npdy07911\nyun890804\nnightcoffee\ncookingequipmentadmin\nssinsunwood\njoypartners\nwhtpwls3\nukino3\nlittletommy7\nhappygrim7\nyojan5\nwhats1004\nppippo\nomi0927\nsolmi213\ntryp\ntryb\ndfactory005ptn\nchoijy8767\nhappyzone1\nbassoj\nlibbon3\nho59ho1\nnodazi90902\nmonblank\nmoonares\npszoth8\ndbsthf12\nkuiry0\nhyunant\nenters\nenvious1\nsilrupin2\nprominwoo2\nmdbaby\nbutgod\nskiingadmin\ndandyryu\ncdma\nsoccerestore\nkonkuk-049\nsafeuni\nknou0505\ninteck2\nrugga24\ntaeyonintl1\ndoori91\nwww.3g\nakabelle\nhjkhjk1410\nnailone1\nkodomo\nenteen\nmotor6292\necopyzone2\nyonghun23\nsoho10045\ndspnf\nbumilion2001ptn\nvlclgmd\nthehogeon2\nthehogeon1\nekhan\nai7412tr6555\nredmangchi\nartherot8\nartherot7\nartherot6\nartherot5\nartherot4\npostshtr8475\nbrandmall\ngodo174774\nchimique\ndbsrud10131\ncutygenie\ndsone\nimarketing024ptn\nheavening2\nleehyejin1\ncgolfood1\nymusic13831\nhantmdwls\nryusoyoung\nipaysmartinside4\nariel2023\nkdemall\nh42310031\nmorenvy020ptn\ngreenyou494\nkake28\nbeibet1\nchul0830\ncha03305\njinana003ptn\nyedam21\nsehwadang\ndsmnf\nzalea\narrum486\ncombacom2\njanusre\nbngintl\nyasira1\nnemostory\nphotonart\nalani1\nconadeli\nucpb\ndreiburg\ngurrms84\njjrepublic2\nekcis\nmamapai\nzizibe5\nsseryun1\nsuip\nmoamax4710\nmerrygrin\nsaypc15\nyoungstr6157\nheavenjade\nkitlej1\nziziba7\njcd5144\nt9\noutriger7\nroberto17\nthepose1\nrook1261\nnfmbrisbane\nthe30dtr1835\nbutaha\nch2365\ngi201\nbasecamp65\nmungkle27\nomh8915\nmungkle25\nhongmans7\njlove7k\nboram30031\ngcsd33019ptn\nnaturalmomo2\nssok\ndaejonilbo\nedmport\nkuhsre\nminifix8\ninsun09171\nyii\nohydragon\nnetserv3\nwwwalt\nencoree\nyim9885\nlottoherb\nuxc3007\nhotelsadmin\nmj1205\njjungyk2\npgupnpgdn\nsonicbio12\nincross\npc0905\nwelltuned\nbuffalotr\nsindoha\nled21tr\nwww.verbraucherschutz\nsjwang211\npassionsubit1\nintcln1\nhyr882001\nrjmhouse\ncsb\nvivianan\necoritr5876\nalqorzmf\nhalu08152\nmpizone3\nhanxiaojie\ngi200\natheismadmin\ngi322admin\nassignments\nna1010\nasia63661\nsoho100410\nwkzid2\nwkzid1\nsmdv5000\ndingdong1\nezpro1234\nzeroboard\nkiwi045\ntjwls80\ndev.intranet\ngeuxer2\ngodo58510\naccmania\ndavicom\naudio-bay\nspo4\nssupltr6200\nnice0472\nllim98\nredgrape1\ntlfdj22\nkoizora6\nkoizora5\nimarketing023ptn\nchul0075\nkanku76\npowervk\nrobertpacino1\nspai\nipayamatchday\nsogm\nmirimkim833\nmirimkim832\njoo0575\ngomdodi\nbethelav1\nipaynomad62\nsala70-020\nsala70-018\nsala70-017\nsala70-016\nmorenvy018ptn\nsala70-014\nsala70-013\nsala70-012\nsala70-011\nsala70-010\nsala70-008\nsala70-007\nsala70-006\nsala70-005\nsala70-004\nsala70-003\nsala70-002\nsala70-001\nlavazztr9156\nhanacome4\nyeppy671\nmuyoungs\nslevin4\nneomin21\nppod102\njinana002ptn\nimarketing070ptn\njunss77\ncore741\nddalki0111\njjoojjo\nokabkorea\nojas201212\nojas201211\nojas201210\nlimhj925\nbackshtr0601\nclsrndid\nphotomate\nkss1762\nlmj52501\nkbs60160\nmbj1752\npygetec1\nkmg21216\nndk0719\ngiftlg365\nkaienb\nhak0312\nsoo9236s\nbogosago6\nbascon\njikyjeon\norangesptr3\norangesptr2\norangesptr1\nkhsdad\njoejylimtr\ndscm1\ncartechadmin\nhojung1\ntomatoi5\nyeonsung-090\nvizworks2\nvizworks1\nshowy1\ndla60253\nskjp\ntaylortr6432\nyeonsung-088\nmingihong\nnakiha1\nseven2012\ngcsd33018ptn\nlovegomon\njlsi1459si\npoporu\nenctotal\nhiroeriko\ngodo279\nauctionimg\ngodoedu-021\nkopasi\neijih\nlolipoli\ntsj01080\ngodo275\ntruelinks\nuneec68035\ndrim365\nsincomo\noznara11\nhangingchair\nkrap635\nkrap634\nshplus\nohhora777\nmissc15\nbigpig043\nbehip87\nhoneystyle\nfinalcooo1\nsanta114\nremixcartr\ntrykhs\ncarsmith\ndubero1\nsoojlee71\nuhmting2\nlucedeco\njangfood\nbnckbr22\nheartbroke\njunsic1\nsgtl\nmigafotr9290\ngoyuil\nhost51\nko32288\nko32287\nko32286\naramong1\nko32284\nwlstjs07192\nwlstjs07191\nforpuptr5490\nmihcelob\nenepatr5166\ncstool3\nisungnam\nmemoforyou\nburet6\nhost46\nshinyk06\nnananaksh\nimarketing022ptn\ntest18520\ndesignzibe\nlogient\nseum\npetshopsadmin\ngointsunny\nzzang09061\nkbsvitamin\nflak882\nsuyonga7\nluxfertr8958\nbkc86111\nstrat791\nkoo1411\nmorenvy017ptn\nmetro71114\nlampjeil\nshinyi61\nturiya66\npunchto003\npunchto002\npunchto001\ngollmoo\njinana001ptn\ndesignmaker\nyeonsung-070\nbaxo782\nhealingstay1\ninhee1008\nshoptr\nflyfishingadmin\ndemoselffix\nmirmirtr0954\npersonallog1\nymkm841\nokham621\nkwc0620\njjgolf\ncozyroom1\nho0010\npopino\ndiychoco1\njerryim\ncapotr0570\neuna0910\nssdbr10\nbuj8131\neuroshtr5237\nk8w3s2\nrnjs91315\nmenstime3\nmenstime1\nkemandwb\ntcentetr2067\nclients.pmy\nsuken12282\npopo77\njeonboo2\njeonboo1\nsportsline-ver4\nspbq1234\ndalcom85\nfishingtv9\nmyshop-014\nfishingtv7\nykn0628\nxartcatr6602\nssclan2\npophit\nmin35841\nyhjj3\nsimbaddacase2\nhd55131\nyangcheon2\ny989212712\nuniversoadmin\nhaieland1\nsyj32562\nlwb62741\nldm1217\nbeb\ngcsd33017ptn\njjhdha\ndfactory002ptn\nsa05311\nwiseket1\nmvpp10\nhairintr4904\nmyshop-010\nshda100\nkpshop2\nkpshop1\nkankan1\negtai\nakiapc\nssodesign\ngi10admin\nhouseplus3\nhouseplus2\ns2pdevmimi\nshinwoul\neibe1\npuhaha275\nkkk1311\ngi438admin\ndodocupid\nbbibbi\ncolorline1\nsincez3\njojia692\nsincez1\nsafecomtr\nmineralallga\nlat1255\nasde717\nsksskdi601\nmoorkoreatr\nxcolletr0603\nmalgum1\nsaehan1006\ningemail\nsaehan1003\nptuebiz-049\nspsports\nfastpooo\nptuebiz-045\nghkd1603\nomanmul\nmint67825\nilrang1\nxpop4\nptuebiz-039\ngoldcrtr3577\nvvstore2\nmisowa4\nmisowa3\nmisowa2\nmisowa1\nkrownbtr9246\ncma7539\ndigitalsori\nsortie4\ndesignlink1\nar0012\nptuebiz-032\nphinix2850\nuditlife\nksj83351\nptuebiz-030\nchorong2\nshaudwo\ndesignline5\ngerpfile\nminicong\nptuebiz-020\nchamalook1\nnewsissuesadmin\nhby12201\nimarketing021ptn\ngobigstr\narsenic83\ngports\nyeok78\nptuebiz-010\nkoreadaco\nczeon\ncharlottetownadmin\nptuebiz-005\negreengeo6\nppymangs\njjggoo\nmorenvy016ptn\ndoyoulove\nkf1234\neastline1\nsafewater1\nfriends0447\nkarl2plus\nleech12209\nina2011tr\njiphan\ncyt51\nshawsank1\njohnj213\njjungbal\nclove1\nmvisking\nmysql04\nwnddkddusgml2\nedugreen8\nsansamm1\nsimon3979\nbomi05261\nwebdisk.perm\njeanfarmtr\nroseflo\nselandshoptr\ncabosan\nstudiostyle1\ngpdbs09\nclothe\nreve19851\npup7\nmi7437\nbluesea9311\ntaraswati\nbara38\njlosak1\nhangaram\nmaxlim\napumpkin\nfoxlike929\nrcdh\nfoxlike922\nfoxlike921\nvieltabagyj\nbkcat05251\nehara\no1045295435\nhangilman\nuntitle0\nybibo80\nelance2\nelance1\nmayi17\ngcsd33016ptn\nmaummatr7381\ndfactory001ptn\nbyhemee\njichul5\ngomasil\nbigstons3\nbigstons2\nmayamk\ngskim3015\njinvas\nfrance88281\ngi200admin\nenterlink\nhbtgt0828\nmaxion\npoogaa\ngucciman7\nssncc2010\nsomee5230\ns3freeintextacy\nmail.39\ny12600831\nc653219\nhapsung\nefree\nsiena1\nver3-ext\njinuc1\njeffkim75\nharcayo\nmisomo1\nsinhwa69\ndesign0jang\ndhejrgtr7517\nrsk2577\nmorenvy3\nmorenvy1\ngo4364\nwoodworkingadmin\ntomi1242\ntomi1241\nsigntotr9219\nsinta271\nclick2buy\nzendys\nsamho9352\nvisualpun\nchan88191\nmetroden\nable882\ndainemall\ndongiltr3463\namazondvdtr\ns3freedevsf\njjangkkw\neunamall2\nsunplaza\npung07084\npung07082\nlittlefarmer7\nswkim0831\nlittlefarmer3\nlittlefarmer1\nkoreacake\nxpege\nphiladelphiaadmin\nryuseong\nyeson1\npriest65691\ns3freedevnj\nracerelationsadmin\nsansam31\nmoderntc1\nnt002543\ns3test2\ns3test1\nbionprime\njjm005\naron4097\nhk22827\nhue11044\nfirstaidadmin\ngalbimyoung\nserverhosting\nmorenvy015ptn\nhoon27271\npode\nflyforest1\nhistorymedrenadmin\nchsjin1003\ntibultina1\nchemicalguy\nsteven612\ns2pintnj\nzenco2\ntyvldahf123\njm19851\nluxurycity4\ncervicalcanceradmin\nskhong321\nqltkorea6\negcom\nmiznow\nsuny0286\ndjdental\nsik830\nsrs1275\nswy99881\nteukwootr\njgh0735\njinu34\nmkplaza112\nqazz\nkwonsss\nspdkorea\njja0521\nmisoful\ninjujung3\nburlingtonvtadmin\njayeontr4710\naries29011\nclick71t3\nsvn-fashion\noys12471\nbikon4u\ntendgolf\nedenkorea\nsnghyunkim\nossw\nkwonss2\nkwonskw\nwestside18395\nothe\nkleenup1\ngoldonsmog7\nhuppiness\nclassykr\namin77271\nrcfieldadmin\ngibackin\nyesb2\nyesb1\nsamisound\nhmedical1\nmodernlux\nwlikorea\nwoom012\ns2pinthn\noeeja4\ngodo169165\nhnjiho132\nredstone96\nnamu0369001ptn\nitk9099\nhntile4\nnggift11\ninfobank\ndoobagi2\nkleentek\nsoonetws\njirobotics\njjoonjang1\nyepia\nmky19911\nbanamoon7\nphotohow1\njangcong\ntrust4\nkswigo\nuniquedonut2\ntest15695\nsidmar\nbyoungil81\nrizhao8889\nrepublic391\nte8ayo\nggplaza1\ncoupplan\nqhejrqh2\nqhejrqh1\njinix1\nrnskorea3\nrnskorea2\ndawun0121\nkimzzbcom1\njdb63813\nrnddevsj\nysleeb1\ns2pdevjonr\nsaekcci\nhoustonnwadmin\nsemicolon6\ngoksgo1\nyeain00\nhighallatr\nbau833\nnyhc\naldhr82121\nefolium\ndoomall\nnwwp\nimarketing018ptn\npcnara213\nkoko3817\nmylovecx2\njinhit\nchojinbal\naneuntc3\nfix20244\njjangair\nybhwin1\nmorenvy014ptn\nwillbeok3\nbank9688\nchristianhumoradmin\nkjn18243\nkjn18242\ndocumentariesadmin\nbigcoffee2\nalfoodtr4354\nanswjddbs82\naloe05041\nbums2251\nbau639\nfashiondesignersadmin\njunkg0001\nmotor1004\ngi316admin\ndodoa\narcos001\nkwons71\nmentodream5\nmentodream4\nmentodream3\nkwons55\nkwons54\nkwons50\nkwons43\nquinka0707\nkwons39\nkwons38\nggebi17\nkwons29\nkwons27\nkwons26\nkwons23\nso4879\nwantuphone1\nkwons15\nkwons13\nkwons12\nmbawool\ngjwjd5190\ns3freedevmimi\npk-2\ntstyle1\ninntzone\ncck5846\nhidochtr6423\nkunduun\njoin001\nmetrustyor\nyejin\nskarch\nkjs7494\nserverhosting240\nbaro8949\nserverhosting237\ngaragesadmin\nbumhokim3\ngiftall3\nbumhokim1\ngiftall1\nkimsunjang\nforuricky\nusbrand0301\nnsta\nidea1007\nserverhosting230\nkbk8246\nsekamotr4627\ntx.js.get\nr23\njejy1029\ns1intsky\nnsoa\nfreshd1\nwhitefeel122\nraeslor\njang850314\ncwith\ndraw10033\ngodo168211\nreviewtr3247\nlohasfarm\njindam\ndj6058\nolive10\nohyo\nogolkei\nr17\nr20\nsejinkid\ns1intsdg\nukbul1\npckbook\nipayatop0001\nsohojob2\naspiringirl\nbluesunh7\njinbt4\nnsan\nkaisership3\nbluesunh2\nserverhosting190\nneedfor3\ntreesandshrubsadmin\nxkkangi01\nshmj73\noitalia\nsantintr2102\nekfashion\ndypowetr8234\nmoani001ptn\nserverhosting180\njinana\nid41004\ngowj21\npolishes\nginachoko1\nhair1009\nadamspark1\njangboja\nbangup\ncapecodadmin\nohhi\ndontlee\nserverhosting171\noxenbed2\nserverhosting169\nhdq1121\nynmc89\nwangpanda3\nwangpanda1\nbstjoeun-020\nbstjoeun-018\nbstjoeun-017\nbstjoeun-016\nbstjoeun-015\nbstjoeun-014\nipaywakemedical1\ntoystotr3977\nbstjoeun-011\nbstjoeun-009\nbstjoeun-008\nbstjoeun-007\nbstjoeun-006\ndonia\nbstjoeun-004\nbstjoeun-003\nbstjoeun-002\ncompnet99\nseok5582\nrotifl2\nlatinocultureadmin\nsingimalltr\nsorento800\nworldsocceradmin\nhalu03011\nimarketing017ptn\nrokmc7483\nserverhosting150\nserverhosting145\nddedon\nkwak09791\necwox\npic2942\nyedo1\nedu49\nedu48\nedu47\nedu46\njoo7242\nedu44\nedu43\nedu42\nedu41\nedu40\nedu38\nedu37\nedu36\nmorenvy013ptn\nedu34\nedu33\nedu32\nedu31\nfunnychild\nedu28\nedu27\nbraun\nedu25\nedu24\nedu23\nedu22\ngi433admin\nedu20\nedu18\nedu17\nedu16\nedu15\nedu14\nedu13\nedu12\np13n\nstat10\npern0303\nkidmusics\nmvpp\ntti777\ncwpjn81\nurinong\nwicked0827\nserverhosting124\nminsstory\nchoice00211\nneedlepointadmin\namdesign6\nserverhosting119\namdesign4\n05lead\ndomeketr5519\nmaluwilz1\nhan10711\nseahauto1\nlevisman\nmvie\nmonkie16541\nserverhosting109\niconpower\nmo05199\nmo05198\nmo05197\nmo05196\nmo05195\nmo05194\nmo05193\nparksunjea1\nwishcompany\nserverhosting105\nrafjeon\ns1intman\nmattya\nkkang17011\nanthem025\ndudshdtk4\nxfilesadmin\nzecjojo\nicd9004\nicd9003\ndivxwant5\nshinjiwon\nzzari7\nhansang4862\nzzari3\nsoundforgetr\nxnsytr6592\nprimetest\nhosan111\nmuel\nn2comm\nlovehanna\nspacectr1616\nzoodesign\nkangbk2\nmaidea\nenoliter\ntnzone2\nwico9160\nnixy\ncondo\ngcsd33013ptn\nkk0040008\nbung25\nmattia\nhomenhouse\nmhtoilet\ntnqls2023\nmamacloset1\ntaiguk01\nnikekids\nsejinbiz\nrealpicky1\nreedmall\njesusani\ncookers2\naboobar\nneocla7\nkji135tr4770\nshare88\nnjco\nwww.hbh\ntoodury701\nsadream\nyjcompany81\nroast5286\njerome1\nzzamti\njujudeco\nparkjoye\nlyun\nkiboonup\nliteraturaadmin\nzzange\nrice0905\ngolfzen\ntruan1\ntweety0501\nqwertyu0303\njoinshome\nyoanna\ngutaguta2\ngutaguta1\ndlakswjd81\npackingclub1\nssayer1\nsiason\nhellofilly\nbbodongtr\nujkim7\nxixi21135\nxixi21134\nxixi21133\nxixi21132\nxixi21131\nba2sports\nskmarket247\nskmarket246\nskmarket245\nhostingtest253-170\nskmarket242\nmutu14\nmutu13\nmutu11\ngi184admin\nmot2\nsilinmaum2\napc9\nqueenscloset\nybilion\nmntk\ntetsu1999\nmioggi2011\ndrbodytr\nmjstyle1\nmajuro1\nmontonson1\nhelpmatr3787\nwww.pki\najs707\nbumk22\necoco\ndesigntory\nmorenvy012ptn\nblisscamping\nncs4011\nmeprette2\npoorbotr9474\nbedboy782\nformtabc\nkeyang400423\nkeyang400422\nesusanmul\nupperlady4\nkeyang400411\nkeyang400410\nhapoom333\nhapoom318\ncumni\ngaonnara2\nanytube2\nkslee41\nswshop13\nswshop12\nswshop11\nkookjaets\njjuni225\nhanjh04011\noa4u\nmmix\nmnbc\nkslee01\nshee118\nelaine1\nkennyrtr3273\nnasagirl2\nnasagirl1\nbalanceline\njmmart00\nneobob5\nneobob4\nipaymaximagolf\nsunwoowd1\nneobob1\neversell2\neversell1\njey6766\nhkfishtr2422\nclmart\nt-na\ntdggolf2\ncpftl33\ngotoy7\nmasull\nepari0208\neyaaeyaa1\naqua1151\nhansollife\naderskr\nsbprobio\ns4st\nmegafish\nwoongnyu82\nnetzang69\ninnerweb5\nwksjsn\njunsic-023\njunsic-022\ns4qa\nj1224h1\njunsic-020\njunsic-018\nravie2012\nlinux11\nderkuss070611\nany49521\nsds45002\nwpdmstkfkd82\ncarrots1\nmasss1\njunsic-009\ns3freedevjonr\njunsic-006\ns3qa\ngaylezsladmin\ntndorskfk\njunsic-002\njikku1\ngi500\npoorbotr8843\noldshot\nyhsatti13\nbluebetar\nhaihui\nherbalifemall\ndatanlogic1\nscholarj4\nplasticsurgeryadmin\ngwellkorea1\nsaludreproductivaadmin\nmgs7\na01118a\nhairplustr\nikin0704-010\nhalimmalltr1\nkittysh\nkendoo1004\npascal75\nimarketing015ptn\ndlarlxo\nuriiyatr3460\nwww.controlpanel\nonedesign003ptn\nbkfashionmal\nsehooni\nardorwin5\ndoubleyoubay\njhengsungil\nshuzai.europeanhistory\nadrianmole\naccountingsoftwareadmin\nkoreasound2\ninseo75\ntohwantr6957\nmorenvy011ptn\nnettictr2174\nbacksee\njesus307442\ngranjete\njjangbaegee1\nttmedi1\nddmshop\nhardess802\nsummonworks1\nninefruits\nlietime99\nmdml\nyoonei123\nyooriapa8\nyooriapa7\nyooriapa6\nipaymiha124\nyooriapa4\nyooriapa3\nsaegida\neoasis\nlnbi\njmhn1015\nshop.flyfishing\nmartmoa2\neutti204\njeonlatr4684\nyasoo\nmedi3651\ncuclo\nchwnm20123\nvoltonenm2\nshantih\nlymphomaadmin\nerchjinho\nvictorssi\nmbri\ndldbsdhr\njakujaku1\ncapdialog1\nnanumcafe\nboardktr6805\njoy0120418\nttldrmt1\nujini1\nebizs\ngungantr6670\nmaummind\nleenayoon\nneoncho1\nhspcgreen\nsouskin1\nk3238\nscalix\nwaterptr7232\nleedaeri\nsilra\nspielwiese\ngi477\nwoodmoritr\nmediabus2\n161\nthebaram\nmissmore\nmarske\ntechlene2\nsosl205\ngi476\nnaadia77\ngi474\ns2pqa\nmute74\nfoursbiz05\nkukumada\nleenawon1\ngminter\nheyshotr4633\nice97900\nmysql0\npoint1\ngi470\ndiyya\neveni331\neduhope1\npisirusi1\nliet\nai74123\nsfsdgdsfsdf\ntroikatr1776\nadioslee\nxchres\nroomsearch1\nsmile08142\nsmile08141\nbabycenter\nechohouse\nstudioakka1\ngolfgs1\nmarre1\nelectee1\nchrezotr8204\ncookcore\nbillyksp\nkblue06\ntbaksa\ndesignshop\nipaypurmir81\ngortez\njoo4348\nimarketing014ptn\nmingoon6\nmingoon5\nmingoon3\nmingoon2\nmingoon1\nbadasky\ndbsrnwl2\notw01\njyav\nonedesign002ptn\naya04265\nddanga\nzigprid701\njhshin\nflspent\njwny\nujin70\ninkcasting\nmaroo1\ncelebritynewsadmin\nmorenvy010ptn\nmarom3\nmarom2\neanju\nhappysangja\nfa9390tr4632\nwarship\nmi1640\ndbckdgns1981\n4989119\ndoumzoosio\nwelskitr4589\ngodoid-009\nyu0404\nmart3d\nstar2015z\npazziya\nmobilekr\njuun\nyasan66\nasasjjj\njjung214\nsalomon2\nexitmusic12\njjin871\ngoready2\nthenew452\ncacaka7\nirion1\nbonanza24\nmirz021\nsilkworm1\ngi311admin\nsunwooland2\nbackhee\ngusxo02236\nleej1001\ngusxo02234\nmvp21c\ndive1\ngi290\nkoyh01301\nfops0045\nkkk73324\nkkk73323\nheoshey\nchohwanwoo\ns2pselfrelease\nlaum\nlcbp\nspascal1\ncdb1719\nshim09\nflorytr0668\npark868011\nisak12\nbaracoffee\ncookiepet2\nlogthink1\nmusai1\ngi460\ngcsd33010ptn\nhealthpia1\ncskcs\nacademy-030\nacademy-028\nraypark\nacademy-026\nacademy-025\nacademy-024\nacademy-023\nacademy-022\nacademy-021\nacademy-019\nacademy-018\nacademy-017\nacademy-016\nacademy-015\nacademy-014\nacademy-013\nacademy-012\nmetrigen\nacademy-009\nacademy-008\nacademy-007\nacademy-006\nacademy-005\nacademy-004\nacademy-003\nacademy-002\nacademy-001\nsaramsai42\nbriquetrib1\noperationstechadmin\ngoldsea\ndh9696\nserverhosting254-241\nkcs39014\nthsdudtls\noopsi1156\ncdmacs11\ngi450\nserverhosting254-240\nyaesodam\nmobiledevicesadmin\njeje93kdy\nruffa76\necare10\nksy103\npkwmyth4\npkwmyth3\nfreecphone1\ntotorozzang\njiworld3\nenjoykon\nmoonjw7001\nokwhitelily\nhm35846\nchorc\nnewtroll\nlibrosadmin\nyoustar2\nredmin70\nshcandle3\ngood06084\ngood06083\nbakingtr6528\nkohanee\nukstyle1\ngoldone\ndvdlife1\nho55551\nsoccerdom4\nimarketing013ptn\nchou7\nbigpaprika\nwj22745\nmaryhotr0525\nonedesign001ptn\nhappyliya\nmoon01021\nlth1260\nrlice1234\nmi0728\ngosaib\ntaylormade2\nserverhosting254-229\nmblbumtr8147\ncrok1\nimg22\nmika7073\nedugodo-009\nmorenvy008ptn\ngong1225\nipaykies3341\nebizcom\njio841\nbizcbusan\ndingm\nsinic291\nzespatr3559\neunsil0613\ndoshkorea3\ndoshkorea1\ntomalgim\ntsgolf\nleviolla\nksqms2\ngodevsunny\nmylove4u3\nmylove4u2\nmylove4u1\ngunp75\nityn\nharimeng\nkddk\nimg20\nifishlove\nnewgolf\nkcis\nwin4eva\nimg18\njjww\nwjdwogns628\nistn\nmoonxoxo2\nk320sh1\nrain20722\nisoo\ngcsd33008ptn\nimg17\nmari00\ndhss5\nkthkha\nunibasic1\nshippingadmin\nenjoydog\nchildrensbooksadmin\nwrice\ngoodplusman\njeju57888\nwlsdud6222\njinny38182\nlarc17291\nimg08\ndarkvgirl\nentereins\nyoshikisuny1\ncafemaster\ntnckorea2\njjang2011\nimg07\nddmsal4759\nujako89\nujako86\nlakki2630\nujako84\nalatda77\nfirstled\nsewingclub\nimarketing3\nplay04001\nfriendlykids1\nddomddom\nhoneymoonsadmin\nserverhosting254-209\nvipjuitr4157\nssunshower\nmedi1193\nmedi1192\ngi442\nchrist101125\nfirstju1\nhappy06063\nenjoyday71\nyamakko831\npnk01180809\nimg19\nbbmmart2\npnksol13\ny2bcom1\nplcretail\nshinpei2\nhalladonma1\ntradappy1\nllkmll\ncheezsaurus4\ncheezsaurus3\ncheezsaurus1\nmarket2013\nimarketing012ptn\noceanblue1\nsugarlong1\ngi440\nsltlwjf1\nrusidnew1\nmadetrue\nbrandbaby\nkkma1117\ndearderm\nhanna5291\nwane1277\nfelicidad6\nimys\nsametour\ntrioutlet2\nlawenforcementadmin\na1.pwr.a02.f4s01.logo\nmorenvy007ptn\nucomedia1\ns4intmimi\ndeokjune\nds9324\nserverhosting254-201\nksowlv\no8naman2\nssspsysss7\npaldorok\nssspsysss5\ngreat8403\nssspsysss3\nlixxi2\nlixxi1\nserverhosting254-189\nsaedin3\nsadmin2\ngnoneint1\npnppc001\ndaytur\neightday\nansdudwn12\nmidofood1\ntnxod0430\njebl\njworld2\ndguri\njdis\nclifwear\nahzoa5\nwingworld\nwkaxld07\nwkaxld06\nwkaxld05\nwkaxld04\nwkaxld03\nwkaxld02\nwkaxld01\ncapra782\nnonstop731\nheypon\na1.pwr.a03.f2s02.logo\nshumade\nhealsdak1\nkokozenytr7919\nkskim36\nkskim35\nsina119\nkmyhsid\nhvco\nfurnioffice1\nsimdae1\nautodiscover.entertainment\nhsyo\ngoho69\ndafishing4\nnewyanus76\nboy50402\nknpiantr9201\nruhitr7902\nheadcom\niop2621\njssh0802\nhspm\nuhan2009\nsupeolle2\nipaywelesclub\ngcsd33007ptn\nspace8943\ndj0123\ngi427admin\nserverhosting254-179\nscotland\nlepio00\nals112tr8265\ngoldbal\nmoyhada\nerogizer\ns2pselfdevwheeya88\nadmj\ndwarflee\ntobaccon\needentr\njijon09891\nheylux\nautoconfig.photography\nfarmsea\ndfactory004ptn\nhsdc\ncatstree\naiqing\ny5001242\nsuho91371\nh140498\nheykyu\ncubeqam\ncubeqah\nbzjb1\nugibang\nmallmallmall\ngemspell\nmjstudio\nfarmri1\njeon2001001ptn\nxbogx1\ndcgolf\nhawk21c1\nxgodo\nsmile5457\nsdcran\njeongtel1\njwork71\ntahang64\nitalia2u\ndlenfl86\nenbmt78\njch102310\ngxms\nbagpia\nlgk327583\nberymilk1\nmapget\njjoggumi002ptn\nsosppor1\npionext\njuliet0691\nan19400\nanygear1\nsmartpuppytr\ndoctorphoto\nmorenvy006ptn\nphoebe56651\nyesdaehyun\ntnhawaii02\ntnhawaii01\nhmss\ncrc11\nangela02173\nangela02172\nstyleftr0769\npionet3\npionet2\nartalltr\ndlawk1234\ndlawk1233\ndlawk1232\ndlawk1231\niampartners\nkyoung0915\nkhjin31\nidix\nmilleiber\nknpiano\ngbicom1\nzeejun\nywdeco21\nwonhh74\nautodiscover.antiques\nchinasample\nhjpark4\nhjpark3\nhjpark1\nnebalrokorea\naeroc171\nprimenext\nincubus07231\npekoe44\nchicgirl84\nmentopark\ninsaero\nvyard\na2232682314\nmbkangtr0339\ntopseed\nenggul\nsmoothguy1\nneedlesladmin\nbravolej\nosm5353\ndesignnut1\ncjy05131\ngrym\nwebdisk.beauty\nekfrl1007\ngcsd33006ptn\npower8029\ncounselling\nwebdisk.promo\ntonyhaustr\nprocnc1\nsohokorea30\nmin8938\nautodiscover.financial\noderi2\ntong043014\nbyjen\njhome1\ncw153\nsoundmedia1\nsohokorea19\nscalemart\nserverhosting254-149\nfdoor1\ndpency7\nzeen77\ndragonhwan6\nipayicewindow1\ndragonhwan2\njinwoo7922\njinwoo7921\neofldjf2\neofldjf1\nmenpico\ngold7771\njungpum\nkspack\nilsimdongchetr\nberry6600\nsnrn0111\ngodowebhard\nlbj0202\nhigb\ndameetr5725\nbamboobebe\ncubefnp\nmansa9\nwookh\noxengi\ninsaart\nfrandutr8883\nangel2468\nvnfma215\nrental1\nwssin6w5\nhayfine2\nspecialists\ntraceroute\nglsbike\ns4intsf\nkji59821\nssusdii\nmyfitting\nwoodc\nhelpboy\nspike0330\nbnjmalltr\ns4intnj\nkjbaek1\nhop2yun\neneuropaadmin\nsciencesladmin\nlsinstr\ngi178admin\nsquadsb\nsk92791\ngyoungdug\nimarketing010ptn\ncooky\npanchokmul2\nsoripes\ns4inthn\njjoggumi001ptn\nenfmedix\nsafeboard\nup5907\nmjinst3\nmjinst1\ngi430\nsportsmart\nsullsull\ncplusadmin\nmorenvy005ptn\nhenb\ncindy8121\nkhs535-009\nhyunjoon941\nspromotion\nkdypsn5\nmuns45\nkhs535-008\nsweetforest1\nlyusia\njulaikorea1\nbiketek\npopoiland\nnorang10075\niamsoyoung\nqcidea1\njungs79\npsalms151\nsinchotr5575\ncomo2\nbongsem1004\njsjang693\njsjang692\nijoaau2\nnemodol\norangeave1\nhj1000y1\ndogmanse\nmver12\ngoperuadmin\ndons823\nteatigs1\njwdleho1\nsafecompsladmin\nredbagstory\naserving\namapspace01\nskinmecca\nbioflex1\nstonehous\nemmarttr7025\ns4release\nunto1\nkika0505\ns3devsdg\nbikerak\ngi420\nbalgolla\ncraftcream\nenfid3\nenfid2\nchrisjlee\nsehee50871\nautoconfig.entertainment\njunhair\ngcsd33005ptn\nsheet2\nwebdisk.photography\njcphone\nwlsdud3243\nsoundstreamtrans\nshinhung1\ngaram4292\nsj8410022\ngoodqt\nmeepobtr2122\nmuyoungs2\numjui741\nparkssgood\nbizcdaegu\njungo87\nthestotr5627\nwon55\nnstortr8909\nfox4864862\ntoday242\ncutqueen\ngike\ngjam\nmanjdk\nspio2tr\nmunib1\nalrzldirkwk2\nparkk018\njjungeun1981\nbackup90\ngien\nsnh4u2012\nchindo214\ndnwls21\nsangpetr75636\njeonga12031\nhakmaeul\nssh9751\norichair\ngomuin\nrogellean\njangjunu4\njm10301\nkuc012\nghey\nfeelux\ncafricool1\nzetmin3\ncello2017\nmisojinal\ncoffeeteaadmin\nbackup69\ngftp\nmangno\ngi414\nautodiscover.photography\nkidscollectingadmin\ngi410\nlovelyand7\nannaflora1\ngi398\nypp000\nsinicare\nbackup57\nkrukovo\nkimlleo\nsaskatoonadmin\nsbgs22\nkjr7846\nsasari7217\nsasari7216\nsasari7215\nfeelie\nanewface7\nnndesign2\nanewface5\ngerp\ngomsin\nguitarbugtr\njhl02001\nnasagirl\nlion9898\nrikyjeon\nbancrest\nmooyemart\nhanaro38941\nmorenvy004ptn\nredmanso1\njumoney\nh2fishtr7956\nfootmart\nener18\nener17\ntod0108\nmikilove2\nboanmart3\nboanmart2\ntscorp\nhm5989\ngongzi\nshaina1\ntoyfuntr0890\njjtamna1\nsmc1052\nsmc1051\njhmoon\nserverhosting99\nserverhosting98\nserverhosting97\nserverhosting96\nserverhosting95\nserverhosting94\nserverhosting93\nserverhosting92\ngongte\nsevenbiketr\ngi397\nligtime1\nbware\nkcc75731\nbikeing\ngeniuseh\nreikaz2\ngodo158416\nrevive22\nhama1245\njoinshop\ngi406\nbaekwh\ngi2j\nkoil09091\nunitrust2\nleejy1229\ndanyangok1\nlamanh\nbwlee\nwskang7\nautoconfig.antiques\nwjtsyg\ngasinaeya\nksmkoo\nzecipe\nbaekop\nljm00552\nautoconfig.financial\nwebdisk.financial\ndastard1\nk2worltr2721\nhohyung\nwebdisk.antiques\nsmiledtr3201\nhkm0803\ngi395\ngany\ngcsd33004ptn\nutub1\nkyungmin-029\nesmt\nsesdd9546\ninbeom20023\nvlvl933\ngi404\nkyungmin-019\nbaekby\nstrabbit\nmtvice\ngi403\nnocsunfood\ngi392\nboazfood\nkkk67082\ntopjjoo\nlightree\nroulette\ngi295admin\nnmj851\nespclothing\nemmom1\nleeje1125\nsoyou1221\nbigstarkid\ns2pdevsunny2\nks56906\naone4945\nahzlomall1\nbikefac\nfila0116\nfk5577\ndndauto\nmbk001\nejrdl21391\nahn12221\ngi401\nsilgange\ndasung1\nsunny386\ncaravel73\nwcanopy\nagimanse\nchhubcas2\nlovegate7\nsgirl33\noatopitr7394\npartydress\nimarketing007ptn\nyonginmis1\nsudaebak1\nkssunmin1\ngi389\ndptnfrh2\nuamysoul\nvispelar7\npeopletr3877\nmorenvy003ptn\nbadu78\nynskorea1\ntoolsdev\nkginicis\nyurigudu81\nsonmk1122\nenha\nduuub2\ncoolgen\njsoutlettr\nsouthparkadmin\nranger12881\nautosusadosadmin\nzona671\nteamo1114\njangkn1\ndaontech\nsm5w80\nskykeeper5\nkyc5398\nhcompany\ntrione2\ntrione1\neloi\nwellbest\nkki6564\ngreenmart21\nmocuni4\npoweryongin\njeay0924\nbandykorea\naincom\nsilhihi\naqua982\naqua981\nxotns771\nabrahamsheen1\nthesuptr\nsleepspa\nskylink\nsteamltr5295\npluto0628\nviewzoneintl\nhappyfoot\nkibon131\nw415chdl\nkeelisk1\nhohohomimi9\nhohohomimi8\nhohohomimi7\nhohohomimi6\nhohohomimi4\nhohohomimi3\nhohohomimi2\nhohohomimi1\ngcsd33003ptn\nejnj\ncooldk2\nbadkid\ndebak\naqua792\naqua791\nclary777\nqosse01\nbaru31411\nbluesunh2-039\nbluesunh2-038\nbluesunh2-037\nbluesunh2-036\nbluesunh2-035\nbluesunh2-034\nbluesunh2-033\nchuckman\nbluesunh2-031\nbluesunh2-029\nbluesunh2-028\nbluesunh2-027\nbluesunh2-026\nbluesunh2-025\nbluesunh2-024\nbluesunh2-023\nbluesunh2-022\nbluesunh2-021\nbluesunh2-019\ndauri9\nbluesunh2-017\nbluesunh2-016\nbluesunh2-015\nbluesunh2-014\nbluesunh2-013\nbluesunh2-012\nbluesunh2-011\nbluesunh2-010\nbluesunh2-008\nbluesunh2-007\nojas20129\nbluesunh2-005\nicmkoreatr\nbluesunh2-003\nbluesunh2-002\nbluesunh2-001\nduaeod78\njsh1143\nhgh9112\nlimeplus\ndorangmal\nnanulee21\negoist1391\nwhitehometr\nssb04091\ndo93099\ndo93098\ndo93097\ndo93096\ndo93095\ndo93093\nksd09132\nksd09131\nipayokfoto\ngomcnc\nbuj813\npnksintl\nwishhouse\nwonders\nquarterbag\ngi353admin\ngi380\nchamalook\nwww.40\nbabyrb\nstudiostyle\nkoreacm2\niamymj1\ngomast\ncrom4404\nvodasipi\nes4self\nkjnet761\nosgagu1\ndlqnftiq1\nsplaybill3\nmukmul\nkmk5719\nmacdesign1-010\npoke1007\ndhshop17510\ndlwlsgh03\nkyoulri\nimarketing006ptn\nssk5589\nshinkee1\njwko21c1\nchaos19952\ndandjik2\ndandjik1\nhvi21153\nhvi21152\nripsoul1\nwww.49\nmin21321\nver3-biznet\nkth4989\nluviewtr1058\ncookie2\ncutesarah3\ngoksgo\ngbk2073\nmiffy30412\nrevital1\ndongyang152\ngo1394tr\ndcclub\ntrizen\nwww.47\nmorenvy002ptn\nrossi3\neduo\necocanvas1\nchha9\npirenze71\nwww.46\nash4287\nchocogtr6562\nchangstyle4\nkopasi21\nenrental181\nenrental179\nedu9\nedu8\nedu7\nedu6\nwww.45\nwww.43\ngi374\nwww.41\nsantorini\noutstage\nenrental176\niri750\nsonang79\nenrental171\nedkg\nenrental169\ncookers\nmychoi01\nbbcountry1\nwhataplay2\nwhataplay1\nwww.39\ngolfya\necoi\nenrental162\ndomostyle001ptn\ngold5tr\nenrental161\nwww.38\ngi370\nnc5manager\ncmcr3\npongdang1\ngolfup\ndrjungle\ndepaola1\nenrental156\ncpm2621\nenrental155\nggosijoa\nsafecare8\nsafecare7\nhouseplantsadmin\nsafecare5\nsafecare4\nit2gpc-029\nwnsdmlx\njbk7143\nhotsauce1985\nipaymiha12\ngolhs1004\nprimese3\nprimese2\ncozyrang1\nit2gpc-022\nsw7114\nwww.35\nit2gpc-019\nwww.34\ntecumseh\nsmile0814\ncakelatte\nst06072\ninduk\ngolfgs\ngoaustraliaadmin\ngcsd33002ptn\nit2gpc-011\nit2gpc-009\naimbio\nmalarb\njaks2233\nerrordb\nwww.31\ngi366\nit2gpc-005\nsmpys715g\nit2gpc-004\npocq1004\neumby7\nbongver4\nwldb5568\nkmk5116\njang62510\ndaezanggan1\njulujuly\nns3000\ndimf\ns2freedevwheeya88\nzigwatch\nsun99251\nmorenvy030ptn\ndreamfield1\ndo91\nwww.28\nohdaejun3\nleespocket\nkukujj9\naka082\nsbk\nnonmission\nafroamlitadmin\nsamdo02252\nwww.sbk\npognibiz\nmaxfeel1\nprimehtml\nsoccerboy\nkku19781\ngi422admin\nmistyle1\nswenlee\njunee11\nsoccerbu1\ndbout\nmimineaqua1\npolomixs2\ngolatv\nstudiostory\nselyoun2003\nguitartr6386\nbsfactory\ngi360\nthgus99311\nyyh1204\nbyha\nonlyalice\ncorefit12\ncindy812\nendiettr7344\nnmckorea\ndevu\nimarketing005ptn\njereint\nottchilstore1\naznymohc010ptn\npolomixdb\ndbold\ngi145\ncindy741\ngi470admin\nwalesadmin\nautodiscover.imagegallery\nautoconfig.imagegallery\nbizforge\njh56441\nhessed\nmorenvy001ptn\nwebdisk.imagegallery\nlove05tr\nilrgglho\nkorva52445\nmaket1\nsmile0225\nwooricoop3\ndasung\nty823096\nbanghanbok\ns2pdevwheeya88\ndarknulbo17\nmx100\npapameal1\nleech122011\nsleepy2\npodseowon\nyyu35355\nhgh911\nmakedd\nct04\nboorusu\nenaroo\ngrandplan1\nocktool1\ndbmk2\nbrandtown2\nnanzzangna5\nddcr\ngi350\nprimeins\nlhy699915\ninurface\ncwj0933\ncwj0932\nhyteid\nksjs12\nalsals71791\nqwzxmm\njaeil13701\nbaberina001ptn\ncatsone\ndbmk\nhcseafood\noroanreb2\nbongtooi\ngeosunglife\nwkrkfcl001\njerusalem\ndh88\nhealthplanadmin\ndudwls3498\nzucca1\ngcsd33001ptn\nwizstyle\nmaxbest1\nbestsellersadmin\ncotton3\nhappycyc1\nlove1002\nherbnyoung\ndkhousing2\nsolee1120\nbsm6\nys9914\njjmk123\nchyc\nhanxs71\nmaureenjewel2\nburundi\ntrikke\nbooska1\ndongwon5\ndave2\nskblossom1\nrkdeoaks\nprochoiceadmin\neclipstr\ncollectmineralsadmin\nkingcome\nkyky1\njmelody\nicenerve\nenamoo\nwilywily2\nmh2012\ngfeshoptr\niveloce\ncgod\ngolaadmin\nroyaldtr3914\nleehoon79\nuro4122\nsk8mania\nlwt2013\nbbbusiness\ndasom1\nipaytamarama3\ngodomall-060\nwww.29\nalleyhouse6\ngi339\nqueensadmin\nrayfoto\ngi336\ngi99admin\nfootidea\nyog05192\ngkssk020\nkyhj1022\ngold2523\nimarketing004ptn\npolarsoul\narkas22\ngi140\nautomotec1\ngodomall-050\ntanzania\nenaksi\nsawoo45\nty1029\ngjim0515\nloan2345\nardormin2\nardormin1\nlookihyun\nkoreagolfshop\ndecember12\nhl3qye\ngodomall-039\nboem\ngradschooladmin\ntwinborn1\nbeisboladmin\nbromang\ngugu59203\ndizzy015\ngugu59202\ngugu59201\ngodomall-030\nnovelasadmin\nherse2\nherse1\nvrtra\ndamom\naritani\nyurim0607\na-land\nsriver7410\nlaborsafetyadmin\necojejuwork\ngodomall-020\nlimetree1\ndiycars\nqingeun\naspoon14\naspoon11\nmaini1\nbangsanga\ncjs68\njuni416\njjs4422\njjs4421\ngodomall-010\nnicehong1\nconcertsh1\nshl19551\ngs96604\ngs96603\ngodomall-005\ncwcho77\nherotj\nsossay1022\nnyfactory\nwise69763\ngi290admin\ndjshiva\nkoangjin7242\nhealthinsuranceadmin\npfpenstr7881\ngngnt1008\ncayl\nyoungnam3042\nbobby8088\nbobby8087\nhomeimart1\nfilmnara\nbobby8081\ndbbs1\neng1tr\njunggomaeul\nsens1984\nuiiudesign\nmyanais00\npaegilju\nzenith2734\njarin625\npatme1st\nmanjang10000\nsteng19\narthistoryadmin\naudrnrdl1233\naudrnrdl1232\neumjiwon12\npower2000\nbsshon\njandie1\ngodo55552\nbonibell\narre\ntgyh1004\nmh1225\nsuyonga8\nrdl\npsy23251\ngloomypig\nwebtrans\nherebaba\naqus\ndesignhug1\nfuturetak1\njtapparel2\nneomagicshoptr\nssh4862\nssh4861\npiohan1\ngodoa3-029\ncjifm\nkyungse3573\ntkshop-019\noco823\neurohnj\nbanggitong\nbeez102\nbeez101\nmajisun\nxorudtkdtk\ngodoa3-020\naqr5\nincobb\ngi320\nmichaelkkors1\negreengeo4\negreengeo2\nte0404\ntrackandfieldadmin\nhaoting11\nmameden1\nmmarket\nexhobbytr\ndurnfk\nmirimi9\ngodoa3-010\ncoppa\nfreemo1\nbiotis\ngivesoul9\ngodoa3-005\nsalesops.team\ns2pintsf\nluxlucci\nrithfale25\nhappyclay\nwingk\nasadal020ptn\nhothighest\nchoice511\ntjdghgud\nomero1\nssanc01\nimarketing003ptn\noriontek1\ndongwontc\napci\nchadago5\nid1230\nchadago2\nchadago1\nheadami1004\nforsythia88\nats1212\nmartaza4\nmartaza3\nwinad\nkumin07112\nkumin07111\nflseok3\nflseok2\njung94811\ncatsneo1\nchaoskym0\nufosys1\nkidsclubsadmin\njcl2008\ndaeju\ndongin2\ndongin1\nchorong8293\ncaspian\ntucsonadmin\nwestvillageadmin\nmarketingadmin\norganicstory\nhistoriausaadmin\ndvradmin\ngi310\ngi298\njackal\nmilitarykor1\nrora9326\nyoddanger\nsyyoon\nleevelys\nlanoviagd\ngi307\ndevdf\nshortcake\nsohojob9\nsohojob8\nsohojob7\nsohojob6\nsohojob5\nsohojob4\nsohojob3\nbluesunh8\nsohojob1\nbluesunh4\ncjscn7\nbks1016\ndizzi50\ncjdgo\nknowglobal\nleeaprk2\nclaraj2\nmsc98703\nmsc98702\nmsc98701\niocean2012\nssambo1\nsohokorea003ptn\ntopwatch-trans\nallc\nsoyariel\njg130412\ncafenoli\nkobomo1\nthdnjs8112\njewelrysoo\nnbsaleshop\npdae101\nssaljin\nbaechu0910\nshadirs\nkbcs9771\nxxizee2\nxxizee1\ncatsnara\ngi150admin\ndbakintr5549\nleejihamcos\ne1it32\no2music\ncms8673\ntenatena\ntstkim4\ntstkim2\ntstkim1\njahunbangtr\ngi306\nwonilchoitr\nbbac\ngodochina229\ncellgreenon\nlittlelys061\ngodochina214\ndesignida1\nrxbiketr\nelastica91\nphillife1\ngi305\nfiestasadmin\njsjsjs2\nbayyard1\nemerzency\ndidcksdh331\nhgh5076\nkumhoan1\npkw6862\nijennifer\nleesujae17\nronin9499\nchogood772\nchogood771\njustaromatr\nncr0331\ns4freest\nbokmintoy\naidl\neggtoktr0979\nmynezz2\ndongwon91\ngi304\nherbsj\ns4freeqa\nwebroin\ngogun3\nherbok\nroots3\nsstudio\ncomaharim\npius11151\nseemille\nbota1004\nkimpanjo\nherbjo\nsalarymanbox\nbydharl1\nyhstop-025\nfreedai\ndongang\ndextoon12117\ndaedoosm\nyhstop-022\ninnakmtr8388\nshamu\nkwonbing3\nimarketing002ptn\nyhstop-020\nhanjun06112\nyhstop-017\ngaintelecom\nrpangkjh3\ngi303\nrebirthsr\nenamutr\ngi301\nkrdoctorstr\nhapeach\ncokelabo\nyhstop-010\ncapdocokr\ncamwear1\nsadeabu\ngaigalu17\ngaigalu16\ngaigalu15\ngaigalu14\ngaigalu13\ngaigalu12\ngaigalu11\ngaigalu10\ninnermarket\nloveyu722\ngi167admin\normedic1\nqkrwjdtn113\nqkrwjdtn112\nroori2\nroori1\nyuyounho\nbyesang1\ncguru\nhm0008\ndecore1\nnoobs69131\nshingh29\njuju122786\nkidswritingadmin\nsilveresk3\njump420\nsjblind\nguswls0630\nwkha72\ntourmania\net0124\nsohokorea002ptn\nnmagic2\nnmagic1\nwebtong2\njeillatr9571\nsohokorea29\nsohokorea28\nsohokorea27\nsohokorea26\nsohokorea25\nsohokorea24\nsohokorea23\nsohokorea22\nsohokorea20\nsohokorea18\nsohokorea17\nsohokorea16\nsohokorea15\nsohokorea14\nsohokorea13\nsohokorea12\nsohokorea11\nsohokorea10\ncatsmart\njung302\ntabacconaratr\ntodajung\nysu7100\nacuzzang\nspolandtr\nfoundstore\naegkorea\nahri28\nkoolfella03\nterahtz2\nabec3579\ndh894k\nsospica3\nsospica2\ngooutkorea\nsammarket\nxogud0415\njj72721\njunwhatr\nacecnc011\ntys102714\nawsfreedom\nwannabtr0916\nbrent\nslabest11\nssri48\nmalltest\ngyubin2\ngi416admin\nfingerist7\nglamstarlab\nhjw85001\nuyork\nfinewolf3\nnala\nssangchu\ngon444\nryoo95551\nfilmbank01\nadinplan\nmiran96681\nchho1\nkirisatr\ngbmarket\naldo211\nenamoo1\nhyoroo\nyunojapan\nherbhouse\nyooyk1\ntribalgear2\ngana2000\ndove2\nmacdesign1-009\nmacdesign1-008\nmacdesign1-007\nmacdesign1-006\nmacdesign1-005\nmacdesign1-004\nmacdesign1-003\nmacdesign1-002\nmacdesign1-001\nldhoony2\ndasomco\nincrease3\nmiffy30411\nifagain4\nmanlejjong\ngi280\nj9020721\nimarketing001ptn\nuniflame2013\nprojectb033\ntheavenue\nkksshh99\nsanyangsam1\nptpcomm\nduometis\necoplanet6\nhsnambu\nhhhsolution\ns51022\nwkaxld052\nbigmantr0007\ntjsgml809\nwkaxld051\nshsaa8101\nasahi01\nkisszone\njung0711kr\nsnjfurtr7672\nwkaxld043\nqnibus1\npublicnt\nbpms2\nspechrom0506\naulkorea1\nhelloko\ns3devpekoe\nsm7002\nsm7001\nshelko281\njaeyon27\nleehoon792\nleehoon791\nbanhallawoo\nthezillo\ngodo-11781\nnaigie5\nnaigie3\nsohokorea001ptn\ngodo-11768\nenglishmug\nipaymico7com\nlcd80202\nrwakeman6\nrwakeman5\nrwakeman3\nrwakeman2\nnovocos\neju2013\nmaha09\nwkaxld012\nnobody2\nbuycare1\napexstudio\nbignbigtex\ndpxndkf\npqpq2250\nwkaxld004\nsportsline4u-ver3\nlucegolftr\nchukactr6385\nakfoajfo\nkyyong1\ngnomya\ns3freedevsunny\ncolorman\nrivusdesign\nelnutr\ncfdevel\npersona871\ntruegaon\ncfdevel-anzeigen\nrichgold3\nkimkiki\nofficevendor1\ncfdevel-immo\nlittlean2\nbestbuyusa2\nydptong\nwedps25742\niapplian\nm9611053s\nclassices1\ndventure1\nqortodn\ngodo151041\ncubeintextacy\nskautous\nain100\nbori4\nserverhosting189\ndonnadeco\nimarketing066ptn\ncfdevel-partner\ncfdevel-stellen\nxjunior1\ncdmnte2\nenjoybike1\nevenly229\nmaternityadmin\nparanormsladmin\naile357\ngi276\neko4849\nboova\nicecast\nwordprocessingadmin\nmathlessonsadmin\nphplive\ngi270\nwiggle2\nroseflower1\ngi266\niamss21\nsohokorea\nwaassa1\nturdef\nalren819\nalren818\nfspatch\nshabell\nhanstar\nalren816\niya04052\nmypopcase\nsury2848\ngyilove1\nfabholictr\nrunnersworld3\nrunnersworld2\nraybond\nwoodongeya2\nhenshe\nsilvercat-v4\njoyav1191\nkho8939\ndanuri\nyoungr3\nreslinux247-254\nreslinux247-253\nshoeshouse\ntgifd776\ncoa6071\nwawapcb\ntgifd772\nmemong1\ndbfls7\nsomino58861\nhcjung1117\nke6753\nyumpie963\nyumpie962\npradise3\nmuell1\nrookiehjy\nin4sea4\nsjk84021\nimi13801\nlean06012\nkeydalee\nsoracom\nshoeshosue\nasadal039ptn\ncorelee5\ngood365food1\nodc251\nminkuy06221\nlinkz4\nramhandmade\ntreedn\ncuberelease\napolloeos\njunginsam7\nprimedemo\nnam92952\njj70771\niluly1842\niapplian2\nfieldro\nshoesmongdb\nnyguy111\nabecast01\nfree01022\nprmjung\nhantek2\nagyang\nqorthd2\nqorthd1\nbumystar3\nalsl981206\nguideadmin.metrics\nbbanyong1\nndealtr6026\nasonejkh1\ndesigner17\nyoolose1\nyesjubang\nkkm77777\nloan23451\npinkscy\nhens77\nqwe78221\nsolanin201\nymj810\nakwjr1111\ncos80825\nurbanetr7159\njwandme\ndc894\ncpla2k24\ncpla2k11\nnzshop24tr\ntimelesstime\nbonheur1\ntone20102\nheode2\nheode1\ntailorsuit\nmswest\nmoira1231\nbestgsm18085\npasstwo1\nljs49541\ndapanda114\nhymsl1\nakwjr1000\nhymtb1\ndc821\npravs1003\nfly2820\ndmsdk6029\nmn76541\ngapkids\njayhome6\njanghana7\ndodolfarm1\nvdlove8\ndvdvcd\nhanforyu2\nhanforyu1\ngomoojtr7532\nncpsys1\nbodyx\nromiok\njejuilhak\nsneakersadmin\nkangbo822\nanzelto\nfinedeal1\njplusinfo\nfishingadmin\nagigatr\nuzooin1\ngi262\neth19012\ndlqmsvhddl\njinnwon3\nlinemk\neuropa88\nunnatas7\npluter\nbusanftr5995\ngi94admin\npotowoong\nnaturalalice\njinirose0709\neksvndsk1\nhappysaem4u3\nrosa2007\nsunyaro1\ntai1228\njumflow\njhm08272\nccimartr7337\nkkm7724a\nshoesmong12\nshoesmong11\nshoesmong10\nonlinefair\nhealthcafe\ntopic74\nsky10888\nsiena59582\nsiena59581\nfddsfd\nfashion24\ny4219371\nem2daytr7411\nsimple71\nmnkwear\nyes991113\nflowerstate\nyeowocom\ngi259\ndonbook\noceand\nlegiocasa001\nddung6641\nchungangtr\nchameleonwoman\nopop997911\nhiwin77\nshfreetr1964\nagyangfarm2\nagyangfarm1\nhgh1302\nsm4707\nparentingteensadmin\nando1e1a\nflower72\nedenhill11\nbaby-farm\ndc251\ntouchplus1\njdepot1\nchacer23\nclickit001ptn\npurity194\ngododb\ntake26502\nyoungface\nssonso\nbobai\ntopia07\nsinbiclub3\nboseong341\nseven3\nsenspot205\necofairtradetr\nrubatocare2\nbomdigital\nbonusp2\nbonusp1\ndesigneda1\nwoonsatr1136\nvasooyu\nheadsetkoreatr\njamie32\ndesigncube\njmk7808\neicompany\ngmwear\npecglobal\njinboms\nhunmintr2873\nhyunny76\nmjy10752\nwego4\nwego3\nnelly74\nicreative1\nfunnydeco\nradkay1\nkokoe2\ngoldhase2\nboomin5\nboomin4\nmineedon6\ndoriskintr\nssun587\neliyuri1\ndoufeelme\ngi284admin\nkosobank\ngoodgn2010\nmatsutake1\nhsj1373\nroy0719\nnzlifetr9453\ncjwatch2\nbrooknw1\nline46\njhkwon85\nsdphoto\nriravatr8889\nbabekhj\nshh920428\ndandy7\nrosemart\nmarsch0625\ndandy2\nkddong1\nfohwchoi\naquaritr5907\nrosemari\nhanbyul1\ngoogi813\no2musitr2123\nesladmin\n2meplus\npremier72\npeter9961\nkimhong001ptn\ngodqhrgks\nk7j6k7\nmaybe2012\nicw0073\nmadmax200\nyjo0906\njeon20016\njeon20014\nmirean2\nbsrabbtr5724\nseostephen3\nfinger822\nagil282\ncho110044\nwkdb99\nmadeit\nbaey03191\nmajorbook\nhongilyua\nhjlepotr7846\nluxurysp2\nsamsungitv\nsingme81\nmin12111\nscale114\nmadee1\nprettydari\naidlv4\ntpdud521\ngocost\ncjb33335\nedun1126\nbebewise\nsmedia01\nlimcha\nkitels7\nkitels4\nkitels3\nmiyoung07141\nmastertool8\nmastertool6\nsweetpotato\nsong5844\nimypen2\nlimbo8\nlimbo5\nshuzai.history\nantiquesadmin\nnari5221\nshyun8861\ngagumtr5758\nyjb4023\nrecyclingadmin\nredlineon\nesosi79\nesosi78\nesosi77\nesosi76\nesosi75\nesosi74\nesosi73\nesosi71\nkesjjjang\nmotohouse\ndtuomo\nlilix1\nsesweb\ncubedevnj\naroma1\norange89\nbeanmarket\npscsaws\ngszkimjy1\nhaebaragi\nwithtv\ntryextacy\n79house\nnoriter00x\nseubyy\nqingeun1\njycustom1\nsweetyj\ntnghxmfhvl\niamchudo\ntlawndud1004\nadonia5\nallmedicus\nyets032\nyeawon231\ngoldbat733\ncdicn\njas7725\ncomtive\napplefactory2\nzinepages\ndolcevocal\nismlove486\nbf4949\nntperson\nkkungku\nwkdud14784\npooh72583\nsafecatr8353\nkrlibe\ngodo146856\nyyjkingman1\nyju4uu2\ncomsta9\nbookpot\nambleside62\ngi249\nbachstyle\nes3self\ntruebowl\niprohmc\ninnergongju\nksw87091\nccomz\nkes5850\nwksckakxm\ncirt\nwbweb\nhoo7878\nhowhow3332\ntxdns2\ntxdns1\nblackboard9\nsquared\ngi246\nbbdev\ncamcordersadmin\ngi245\nlibraries\ncakedecoratingadmin\ngoukadmin\ngopuertoricoadmin\nhumanresourcesadmin\ngunyis2\ngi239\nfile023\nmiscarriageadmin\ncpapshtr7934\nbedroomadmin\ngi230\nfarbuytr9058\ndoozycom2\nilgun77\nbsmedi\nkkh5789\nkhy26833\nhanworld\nchatyjjang\nbezclub\nwemake4u\nahnc87\nkitchensense\ntwintreekore\nsgaqua\nshoppingtong\ntreebd\ntncmotor1\nsoyamall\njgy6727\nsinjukushop5\ncdeco\ncompositeadmin\nanytarot\nbjtcoltd1\nmitme841\noto04152\noto04151\nbaby-club\nimpmedia6\nimpmedia5\nimpmedia4\nins98054\nins98053\nhichang\ncambibi1\nsweeple\npooh0220\nckj315\nentro76\npopscoaster\nakasia20004\njohnjacobs5\njohnjacobs1\nthemin76\ndamano\nttlc207\nttlc204\ngi411admin\nttlc202\nsujiyayo3\nsujiyayo2\ndaebagg4tr\ngi162admin\nasuratime\nhanwool3\nsesoft\nnekoidea8\nnekoidea4\nnekoidea3\nnekoidea2\nhanwooda\nkumanbo1\nhot95291\nasas5377141\ntkd02241\nyaoming77\nemdevtest\nhmfood1\nbookkey\nrental1004\nindiplus\nwlsdnr777\njason65\nspeedstackstr\ntngmlolbbl\nyjwone\nsossay10222\nbingsugirl7316583\nvannersky\nonnahana\nvanessa6\nvanessa5\nrubydog\nlsy831114\nheamil1020\nmlisttr\nfoxy1000\nprinseum1\npsj9362\nzese40132\nsatunljs\nkakaku75\nrandynoh\ndakorx\niplant\nnat58164\nteentea\nbueno-shop\nhellofriday\nbpksg1\nboynine\nduka123\nwaahaha-019\nwaahaha-018\nwaahaha-017\nwaahaha-016\nwaahaha-015\nwaahaha-014\nwaahaha-013\nwaahaha-012\nindianapolisadmin\nholidayentertainmentadmin\ngi452admin\nwaahaha-011\nwaahaha-009\ninsectsadmin\nwaahaha-008\ngi219\ngai\nwaahaha-007\ndartsadmin\nplan9\nwaahaha-006\nsecureserve2\ngi199\nwaahaha-005\napi.membership\nwaahaha-004\nwaahaha-003\nwaahaha-002\nacneadmin\nwaahaha-001\nky2900\neom19828\nsbdesign002ptn\ngi207\nes3rent\ntintvillage\njuna771\nanycasetr\nqec\nenvironmentadmin\nsmhyun741\nshafali4\ndonabi4\nautowill\nrora2500\nsandbox6\nmrotec7\nmaimai1\nmariweb-029\nmariweb-028\nmariweb-027\nmariweb-026\nsandbox5\nmariweb-025\nastrologyadmin\ngi196\nmariweb-024\nbreastfeedingadmin\nmariweb-023\ngi195\nwebdisk.test2\nmariweb-022\nmariweb-021\nmariweb-019\nmariweb-018\njobsearchtechadmin\nmariweb-017\nmariweb-016\nmariweb-015\nmariweb-014\ngi194\nshuzai.historymedren\nbenrokorea\ngi193\nw20\nocspool\ndb06\nmariweb-012\nhbsfootr8762\ngi202\nmariweb-009\ngi189\nkugong90\nmariweb-007\nmariweb-006\nmariweb-005\nmariweb-004\ncheerleadingadmin\nmariweb-003\ngi88admin\nmariweb-002\nmariweb-001\nw14\nsamdoic1\nmoterora1\nwildwolf\ntentingkr\nnaiasis\nemcars\ntobe7009\nvoltrun\ntwotwobebe\napt201r001ptn\ndev2-self\nbond20011\nshinwonwood5\nshinwonwood3\nmaano1\nmomo3624\ndiso98380\nfilmtvcareersadmin\nf8018011\nculinarytraveladmin\ngodo145509\nheadin031\nwebmail.login\nsky07012\nbodhi\ngi278admin\nsky07011\nambmembership\ngi185\ns1patch\ngi183\nsikgaek\nwt23456\nsavanna\ndevmini\nsoostyle08\nangelesymilagrosadmin\nq5850117\npsdgogo\ndigilog\nbigeagle42\ndh3311\nmymimin\nclaires\nmstamp\nykm2005\nchammarket\nprojecta3\nprojecta1\nleechandoo3\nfocusing1\nmunia\ndanbi06532\nfathersdayadmin\nsleepdisordersadmin\nm4498m44983\naudwls7117\nipaydurihana7\npartyparana\nfoodlina8\nfoodlina7\nwuriwa1\nadcenter\ngi180\nsyrmhj\nwillsadmin\nshjk1013\nleghorn\ndpwl5312\nlawschooladmin\nmountaineer\njyw3727\nbpmem\nautodiscover.painel\nautoconfig.painel\nwebdisk.painel\ngns2\nwww.ehs\ncitio5\nuppereastsideadmin\ngns1\nhydravg\ngi170\nhelp2\ncitio4\njpboomv4\nvalueitem\npetrel\ngi168\ndocshare\nakabelle02\njmedia2\nkagu\nkursy\nrubberstampingadmin\naboutdssadmin\ndaytradingadmin\njmedia1\nsector2000\naznymohc\nbabi570\nmotelb2b\nmuckping\npeoplelook\nwww.hobart\njunco\nwww.stafford\ncmcrtr7858\nkwons129457\nnotepeople\ngi159\ngi395admin\nstlouisadmin\ngi156admin\narchitectureadmin\ngi150\nlesbianasadmin\nsamheung1\nsmcommerce1\nbrainegg2\nelectionadmin\nbebeadmin\nchronicfatigueadmin\nanimalrightsadmin\nhealthylivingadmin\nmadisonadmin\ngi130\ngi83admin\ngi273admin\nestatement\ncncinc1\nsouladmin\nfunnyhoney\nbebetoy1\nwww.tos\ngi122\nnetforbeginnersadmin\nwww.kita\njugendschutz\ngi120\ncincinnatiadmin\nechanges\ngi393admin\ncandyadmin\ngi110\nhaedolli\nsimple30488\npizzaadmin\ngi101\nvinpaper\ngcny\naldccc1\nafricanhistoryadmin\nairjoon78\nbandwidthadmin\nksg700518\ngi389admin\ngi99\ngi98\ngi97\nmail.it\nlandlord\ngi96\ngi95\ngi94\ngi93\ngi92\ngi91\ngi89\ndefterim\ngi88\nwww.ad1\ns1.lzzh\ngi87\ngi86\ngi85\ngi84\ngi83\nthanhvinh\ncuxiao\ngi82\ngi81\ngi79\ngi78\ngi77\ngi76\nnx2\ngi75\ngi74\ngi73\ngi72\ngi71\npremiere\ngi69\ngi68\ngi67\ngi66\ngi65\ngi64\ngi63\ngi62\ngi61\ngi60\ngi58\ngi57\ngreatoffer\ngi56\ngi55\ngi54\n2for1gift\nglobal3\nantalya\ngi53\neducator\nhatay\npoliticalhumoradmin\ngi51\ngi49\ngi48\nwww.chery\nwww.audi\ngi47\ngi46\ngi45\ngi44\ngi43\nblogs2\ngi42\ngi39\nntu\ngi38\nportsmouth\n3m\nvoluntary\nlmt\ngi37\ngi36\ngi35\ngkh\ngi34\nsalford\ngi33\nglu\ngi32\ngi31\ngi27\ngi26\ngi25\ngi23\ngi22\nbreadbakingadmin\nbpp\ngi19\nimg.narodna\ngi18\nimg.blogs\ngi17\nimg.tabloid\nkaramba\nwww.hud\ngi16\npostgrad\ngi15\ngi14\ngi13\ngi12\nbangor\nwool\ngi11\ngi10\nflowersadmin\ndatingadmin\ngi77admin\ntweenparentingadmin\nsuperbowladmin\ngi267admin\ndeafnessadmin\nburlingtoniaadmin\neqtx\nshuzai.gardening\nhuntingadmin\nufosadmin\nfootballadmin\ngi145admin\npersonalcreditadmin\ncatsadmin\n80musicadmin\nshuzai.britishhistory\npoesiaadmin\nfamilyinternetadmin\ngi329admin\noscarsadmin\ngeologyadmin\nkmx\nhumoradmin\ncollectstampsadmin\ngi72admin\nwww.vids\ngran\ncableadmin\nccm1\ngla\naccessoriesadmin\ngi262admin\ngi259admin\nrc3\nnytools4\nmathadmin\nsouthern\nnikko\narima\nhomefurnishingsadmin\nindustrialmusicadmin\nloungeadmin\nebayadmin\nmomrecommendsadmin\ncancersladmin\nbeadworkadmin\naddadmin\nvancouveradmin\nslp\norigamiadmin\nfinancialplancaadmin\ngi378admin\ncontent.team\ngi139admin\npcosadmin\nwwwftp\nstayingactiveadmin\naffiliates.metrics\nbuscadoresadmin\nautowax3\nmanchesternhadmin\nallforfamily\nzzzcool35\nhugosoft\nbluesky2969\nserverhosting254-254\nmajordomo\nmail-out2\nmail-out1\nwindows2000admin\nimmagini\nserverhosting254-253\nbagheri\nguitarraadmin\nstrefa\n226\nexoticcarsadmin\nserverhosting254-252\nrodeoadmin\nserverhosting254-251\nrza\nweddinginvitationsadmin\ngi66admin\nserverhosting254-249\nserverhosting254-248\nww1.co.za\nwww.els\nserverhosting254-247\ngi495admin\nfeminin\nnashvilleadmin\ngi256admin\nelcanceradmin\npetsladmin\nbif\nserverhosting254-246\nserverhosting254-245\nforextradingadmin\nmustangsadmin\nserverhosting254-244\nunesco\nhifi\naarmssl\nserverhosting254-243\nwebdesignadmin\ncollectsladmin\nbangormeadmin\nserverhosting254-242\nprettyaha2\njarin6252\nhto\ngi373admin\nip17\njarin6251\npalmtopsadmin\napartmentsadmin\ngreekfoodadmin\ncartooningadmin\nserverhosting254-237\nfmr\nserverhosting254-236\ninfo.lounge\ngi6admin\nglusterfs\nwalkingadmin\norigin-download\nadvogados\nautomotiveadmin\nserverhosting254-235\nserverhosting254-234\nserverhosting254-233\ngi61admin\ngi489admin\nserverhosting254-232\nserverhosting254-231\napplehearts9\nmxs2\nbabyproductsadmin\ngi251admin\n712educatorsadmin\nenchileadmin\npilatesadmin\nserverhosting254-228\nserverhosting254-227\ngi179admin\nserverhosting254-226\nserverhosting254-225\nlabweb\nserverhosting254-224\nblogues\nserverhosting254-223\nserverhosting254-222\nwebext\npublicrelations\ndraft2\nwebinterface\nmothersdayadmin\nbusycooksadmin\nimam\nserverhosting254-221\naceh\nserverhosting254-219\nalikhan\northopedicsadmin\ngi367admin\nsemarang\ngi128admin\ncanadateachersadmin\nstrokeadmin\nmedan\nserverhosting254-218\narttrans\nhomeofficeadmin\ngi1admin\ngi207admin\nmountainbikeadmin\nfurnitureadmin\nzipi\njem\nnuevaeraadmin\nserverhosting254-217\nserverhosting254-216\nperun\nserverhosting254-215\nserverhosting254-214\ngi55admin\ngi484admin\ngi245admin\nserverhosting254-213\ngi464admin\nserverhosting254-212\nserverhosting254-211\naskweb\ngo1\nserverhosting254-199\nwebtrader\nmta004\nmta003\nserverhosting254-198\nmta002\nhousekeepingadmin\nshuzai.floridasporstman\nverdetest\ndnssec2\ncss.m\nwww-admin\nwindowsadmin\nserverhosting254-197\nserverhosting254-196\nserverhosting254-195\nserverhosting254-194\nenhanced\nserverhosting254-193\nserverhosting254-192\nsomilee2\nserverhosting254-190\nserverhosting254-188\nserverhosting254-187\nserverhosting254-186\nserverhosting254-185\nserverhosting254-184\nserverhosting254-183\nserverhosting254-182\nserverhosting254-181\njailzotr7394\nserverhosting254-178\nserverhosting254-177\nserverhosting254-176\nkhs640109\npediatricsadmin\nserverhosting254-174\nserverhosting254-173\nserverhosting254-172\nserverhosting254-171\nserverhosting254-170\nnorthernontarioadmin\nserverhosting254-168\nserverhosting254-167\nserverhosting254-166\nserverhosting254-165\nserverhosting254-164\nserverhosting254-163\nserverhosting254-162\nserverhosting254-161\nserverhosting254-160\nserverhosting254-158\nch779\nserverhosting254-156\nserverhosting254-155\nserverhosting254-154\nserverhosting254-153\nserverhosting254-152\nserverhosting254-151\nprettyaeng\nserverhosting254-148\nserverhosting254-147\nserverhosting254-146\nserverhosting254-145\nserverhosting254-144\nserverhosting254-143\nserverhosting254-142\nserverhosting254-141\nserverhosting254-140\nmultisite\nserverhosting254-138\nserverhosting254-137\nserverhosting254-136\nserverhosting254-135\ndesignaide\nserverhosting254-133\nserverhosting254-132\nserverhosting254-131\nserverhosting254-130\nlike02\nversha\nweightlossadmin\nshoe9111\nigosantr\njinsi07123\njinsi07122\njinsi07121\ndugotech2\njxmusictr\nunizone1\nchlrhkdwhd\nhanddud1\ntaijoon9\ntaijoon8\nsero82\ntpfakxm3\nfstyle3\ntpfakxm1\nilpumcrab\natfc1\nsm1026\nsm1025\nlkg2821\nautoaction5\npromusicstory\nucat-er\nmuttagi1222\nartxx\nzlem24tr2876\nmusic104\naiang1\ncholibdong\nzywall\ndicovery2\nbsun20031\ndanggal2\nparkek3399\nsnikorea1\njin020526\ngi362admin\ndaitda\ncurlyseo77\nmegacoffee\ngcsd339\ndakbal\ngcsd337\ngcsd336\ngcsd335\ngcsd334\ngcsd333\ngcsd332\nasr12\narto9\njoeun01\njnttravel1\nqueenas\na7896bv2\nevintage\nwooliad1\ndlatprhkd1\nckh135\nrohoco\ntoshinchotr\nhooskin1\nspreadsheetsadmin\nmorning1010\nndaily1\ndesignaco1\nboojang\ntjdfhr76\npchw8300\nkoomin211\ncisil2\nyhcompany1\nkkh3311\nbony213\nfoodliatr\najh2565\nbebecloset2\naengrani\nshine777\nwings911\nroby1977\nredmist8420\nbediant1\nqadw123\nkkarigirl-019\nkkarigirl-018\nkkarigirl-017\nkkarigirl-016\nkkarigirl-015\nkkarigirl-014\nkkarigirl-013\ngi123admin\nkkarigirl-012\nkkarigirl-011\nkkarigirl-009\ninfos911\nkkarigirl-007\nkkarigirl-006\nkkarigirl-005\ngabang36\nkkarigirl-003\nkkarigirl-002\nkkarigirl-001\nfixpage\nbebetete\nlove2vent\nmh12253\nkorea25691\nchjm53842\nenargentinaadmin\nvector16\nvector15\nvector13\nchicagonorthadmin\nhancommunity\nkperpect\nyedawoomtr\niconbay\nzayu18\ndjdxjfl07\nokyk7310\nwebkey1004\nadventuretraveladmin\nsignstar2\nsignstar1\nkissryou\ngoinfit\ncoinsadmin\ndiso9838\nosk7777\nbobolang\ngloomypig1\nsuyonga10\nvalentinesdayadmin\nbobolala\nnewsinda\npinktailtr\nhick409\nlakanto\ncafeoutlet\nall100tr7242\nnisimshop\niamlsm3\nelpaperie\nksh15142003\npridegolf\ninhakjis3\ninhakjis1\nluxurytr4814\nmecca3622tr\nwlska48\njkwatch\ndrimi\naqus2\nsolian011\npurnnuri2\npurnnuri1\nhnaksi1\njyyuni\nroomnhometr\nvartist\ngunvest\nsignpost\nmooncho51\nvip89\nabehouse2\nbshsky\njustbiococo\nepi6901\nkbase\nfuzone\nnetcr61-030\nbumyul2000\nmetalsadmin\nkukjea1\nbrandshine2\nlily95053\nlily95051\nhww3633\nhww3632\nmotiblue2\nchunjang1\nyou1smile1\nnetcr61-019\ndralkaitis\nchlaytlf\nipaybaobab2011\nwjcwoojeong\nairqualityadmin\nidiomart\nzenastar\nganglia\nmedisale3\nkk446688\nnetcr61-010\n02creative\nksp1488\nroom4500811\nbike4\nmyoyeun\nsandlntr8264\nkyb1093\nmygodman2\nrobert01\nolivemuz\nnetcr61-001\npoohkny90\nnintendoadmin\nfight156091\nshimfood\ngi50admin\namysred1\nh121519\nfixisterhous4\nnoblemetro1\nzzang7912\nhyunism1\nw1nu10041\nysj78716\nysj78715\nmillard\nysj78714\nanyhost\nkangbo821\nwantedher1\nplayclay1\nphanminhchanh\ngi478admin\nowieoe1\nlkj43562\nandrewjkang\njanaworld\nplumgarden\nvarioum1\nmust05782\nyjleejun\ngi239admin\ncomprarcasaadmin\nmemphisadmin\naltrelsladmin\niovesoon\nartbtr3686\ntattva1\nhometheateradmin\ndaewony1\nsweetcloset\ntakeitnow1\nssanta3651\nplovew\ngranbury\nfreightadmin\nmodo10042\nespritshop\nautoting\nduicnc\nsss29991\nblossomj1\nkay98631\nbigj2\nbigj1\nshpor1214\nljp1100\ndgprint1\nwiniworks\nwinxii\nmariashop\ntlatlao\nnectar78\nsjakamai1\nonly4711\nsymy2009\nmadeby42\ninchalbase\ngangzzang00\ntoyhan\ncm.seventeen\nartteck2\nqpit261\nkimsony11\nkimsony10\nautosply\ncmkorea\nlunasy14\njoongsan1\nrealway\nchakhankong1\nkmrush27783\nangeltr9617\nibk4141\nanimalsadmin\nmajisun1\nautonbtr5897\nthdgustn27\nshslion\necovelo2\nfishfriend\nsuajoang\nhong790418\nshaneman\n90srockadmin\nandyeven1\nqlxmftiq\nhidejeeman1\nkkongtol\nfunkyjoo481\nzzinge3\nxxlae000\nrich20081\nnan2han\nlhmarket4\nsmartmov\ngodo142326\ndanawagolf\npkujoon2\nks080108\nbanasun6\nbanasun5\nbanasun4\nexweb7tr4591\nbanasun2\nbyengpung\naliceddm\njjoyful5\njjoyful4\nmaming31563\nmaming31562\ndetoxktr6608\nkitlabtr\nleejiyeproject\njoonggophone1\ndigistar10291\nagri00\nscienctr8825\nmissultr\nindankorea\nzxc764\nswys2101\napron\nmygking1\ns3freeqa\naaid2142\nlhote0\nchunscompany\nppman1111\ncongaru\nwww.ww6\ngodo141977\nbho73\nzzang6886\nthdxoehd1\nqorwngkd\nhoondosa1\nham74241\nposncom\njm8248\nywkimera1\nhans352\nenrental158\nipaykingzoon\njungpotr7702\nkidsactivitiesadmin\nlee590271\nyh78310\navidleeda\nseojun\ngces1033\nconprost\nakari2414\nrandy381\nwithpastel\nsensti\nyellowpisces\nconey12\nconey11\nsmarthud\nwolseong\ncleanat3\ncleanat1\nhongsd73\nhongsd72\nwakyakya2\ns21004v\ndnlemehrm\nlo0olz\nginza006\nhcbig1\njoeunphoto\nwww.wwwww\ntoughsky\nhongsd12\nhongsd11\nmagicmotors\nqwop45\nduwls26511\nicnthok\nhwangjiniw\njayeonmee\nsmarthan\nbsfund\nptocoi3\nptocoi2\ns07612\nhjlee2915\nlstrading1\njcdldlto\nggambu4\nodsnote\npicupu1004\nzms202\nsootdol\ntopaz8625\nhyfood\nsun970815\ndevrelease\nipayunseus\nsonjimall\noj07042\nautosladmin\nksjjjks1\nlagunayang\nadkang992\nsurvivaladmin\nssabari\nviridis4\ninyeok\nsoole821\ndongkis4\nhachikuro\ndlwjdfid\ndoowool\nhoianfl\nseohg1\nagrina89\nthewang121\nedeco1142\namericano1\nballpenmoa1\nscienctr8040\ndarksode3\ndarksode2\nmidong26\nsmartedu\nconely1\nhangsang881\ntsgim707\noapack\nalmaher\ntsgim703\ntsgim702\ntsgim701\ncnst1616\ns2pintsky\nkhc03433\nvdhouse3\nvdhouse1\nbrid076\ngodo141203\ndntwk83\nsmartcs5\nminjin9999\nsmartcs3\nsmartcs2\nsmartcs1\nalmajed\nolzwell\ngeosystem\nmir0014\nunzip\nbigin8642\nnomiri01252\nmijumart\nfgwj532\nshcho2000\njys199466\ns2pintsdg\ns2pdevkthkira\ngodotechyby\nwinink\ntoluene2504\njyh65212\ncavabien\nmain393\nasolution\njclayshop\nibrother\nmothertr4216\nsunmoontex\nthe2102\ngmpcom\nzerobag\nyoungg09the\nziba1\nelfnix\nkishimo\noriongolf\niamkei6\niamkei5\nreglasespanoladmin\npropro69\nthehockey1\nthe7shop2\ngreenmade99\ngrain52392\nsuamplastic\ndanawaba\nsmartacc\neatbag1209\nedenhouse\ngodo140762\nhanawelfare\nmastuoka1\namericahot\nlyh67991\nchadvissel\nmonnani0735\ntherokoh\nogs5795\nbonghang\nbtbgift1\niamamine1\njoeunwoor\nkdw134679\nds22sonia004ptn\nanygear\nmicoffee1\nmanomano1\nnawaf\ngi356admin\nenglishlitadmin\njongsori\njapanrecord1\ngojangi\nhersh80\nkchairtr3504\nipaykauring21\nsildmax3\nsildmax2\nyyoo22\njebeef\nuntoc\ngodotechsky\nkitty8162\ndlsektk2\nwebtootr4979\njdreamer\npengolf1\nwbhouse\nmary0534\ndongwontc1\ngi117admin\ns2pdevoneorzero\nklasf1755\njapanesefoodadmin\nsalescareersadmin\ninwoo2\nherbolle\nbulhandang\nnote4youtr\ncipi22\nmidomall\nchdrkrtbwm32\nkjp8556\njong69994\ncanoeandkayakadmin\nbullyingadmin\nhandsltr5719\ns2pintman\nrealmack1\nsjrjj\ntaoismadmin\nparvez\nrecetasninosadmin\npensieroinc\ngmail2\nmana1071\ndojagiyatr6557\nlivonasia\nhyangcountry2\nnaraenet8\nyamanashi\ntruejisoo1\nbestd\ngodotechptj\ninkeshop\nbebepink\njaemin3961\nbestflasher\nmidimitr4285\nmac330\nwww.for\nwww.eye\npolladmin.seventeen\nbbqadmin\ncamberlin\n1stdol\nenstory\nyishugtr9470\ns4freeintkthkira\nxigoldkr212\naltccatr9318\ngks7531\nhanjt67\nyoumean08\nillumegate13\ns4freesetuptest\nitswattr3663\npjk4256\nmainsqtr8842\npjk4254\npjk4251\nasia54321\ngolfmatr6324\nyks901\ndesignctrl\nchowho1\ngodotechone\nmpumwedm\nyahanbametr\ninjeongwon1\nksc82171\nnaraentr2791\nnaraentr2786\nwing09\nnaraentr2781\nchonbatr6758\njhp0215\npeace09451\nnaraentr2775\ngodo139053\nssadagtr5866\nnewseoul\ntwomo\nopstree23\nopstree22\nopstree21\nwww.aoi\nwjdgus\nactonis1\npeter2277\nnan6446\nhyejin\nbluesunh2-032\nbeautyland1\nm4627225\nclubrenai\nmorenvy029ptn\nfamertable\nhyorisun1\ngfph94461\nheejuz\nbelladdle1\nbokding21\nxorrb0604\nsynack\nkooji551\nprmart3\nprmart2\nprmart1\nwimhh2\nwine21\nnatureaquatr8672\nrubas8412\nyajoongsa\ngodotechloy\npdbsabrina\nqorwldrb\ninvestingeuropeadmin\nstarbeauty\nksw80041\nradiojack\ngodotechlhr\ncorexmall\nsenal2\nds22sonia003ptn\nkyy33821\nyanoritr\nrok142\napi.caloriecount\nguitarplanttr\nannis\nbigecoltd\nkpwell\nhwangkeunho1\nsks0967\nyoungmtbtr\nshhoustr5979\nbl525\nlsg22841\nbrheavy\ndesirable\nlse03081\nhyran031\ngodotechhym\nsinura\ngi44admin\nbluezeta\nfi6096\nfivesix1\nsuhon006ptn\nalicedeco3\nalicedeco2\nohsungad\nlee0932\nocolortr3028\nsdb1604\ngodotechgye\ndesignfactoryfile\nanma1\nanointingm\ncncprint\nlalaone4\ngi473admin\njoosawng1\ntirestore\ndhcurvtr1241\nnaraentr2119\nhyunetre\ngi234admin\ncrevate\nsyyoontr2302\ncoupontr3371\nbinuyatr1512\nbekei\ngorani77\nwondongtns1\nprogressiverockadmin\ncoupleboarder\nassist05132\nassist05131\ncaptin832\nsweetyjeju\ndaein2\nwimall\nedugodo-059\nedugodo-058\nlydiastore\nedugodo-056\nedugodo-055\nedugodo-054\nedugodo-053\nedugodo-052\nedugodo-051\nedugodo-050\nedugodo-048\nedugodo-047\nedugodo-046\nedugodo-045\nedugodo-044\nedugodo-043\nedugodo-042\nedugodo-041\nedugodo-040\nedugodo-038\nedugodo-037\nedugodo-036\nedugodo-035\nedugodo-034\nedugodo-033\nedugodo-032\nedugodo-031\nedugodo-030\nedugodo-028\nedugodo-027\nedugodo-026\nedugodo-025\nedugodo-024\nedugodo-023\nedugodo-022\nmysohotr0910\ngaytraveladmin\nedugodo-019\nedugodo-018\nedugodo-017\nedugodo-016\nedugodo-015\nedugodo-014\nedugodo-013\nedugodo-012\nedugodo-011\nedugodo-010\nedugodo-008\nedugodo-007\nedugodo-006\nedugodo-005\nedugodo-004\nedugodo-003\nedugodo-002\nedugodo-001\nbluesunh2-009\nbabyatr8713\nbsdoye\nmmagpie-039\nwowmin-019\nhb0201j\nwowmin-018\nsonjjam08\nwowmin-017\nheecol\nakfoajfo4\ndaehi1\nakfoajfo3\ngnf1230\nwowmin-014\nwowmin-013\nwowmin-012\nheebum\nmmagpie-029\nwowmin-009\nswancnt\ngi306admin\nairwalkbag\nm491900\nwowmin-006\nhero870\ninduk1-039\nwowmin-005\nssalmaul\nwowmin-004\nwowmin-003\nwowmin-002\njun58012love\nclick7tr2661\nfillgoon\naleatorik\ninduk1-037\ntechdatr4078\nmmagpie-012\njaeyoungbiz\ndjpuer3\ngodo137771\ncretoy1\nzinoent\npkdd9111\nele2779\nwalmartr9308\ngodotechdfk\nprismsystem\nye7605212\nlhs751\nnongsagun\nskanskan41\nchsun7931\nsewingtr8878\ngodotechchy\nacacia36367\ngloria7\ngsdaectr0704\ndbtn1517\nds22sonia002ptn\nwithfootball\ns4freedevextacy\nramarama2\nramarama1\ndaedoktr5956\nsoutheastasianfoodadmin\nliberty16\ndns32\njym12344\nwill34\nlivinglife5\nsshp3385\nkenny68\nmanguitar6\nviewone\nnurseryadmin\nsem0605\nspysman4\nhydm74\nwjglobal1\nswprotech\nbellutr0046\nhongik911\nnoa10001\nkvanes2\nkokacoffee1\ntotokt\nmy7cm4\noufo1\ntreeofhill2\nsjh0177\nbricktechnic\nlonsomeyez11\ndaebok\ndkdleldkdlel\noamart\nstickerbank\njinok523\ncorecube3\nwhalemtr4127\ncorecube1\njsjfeel\nepsetuptest\nredlife82\nugmc33\nsuupgil\nsuhon005ptn\nph565tr5757\ndongateco\nkbncomputer-029\nkbncomputer-028\nbabyutopia\nkbncomputer-026\nkbncomputer-025\nkbncomputer-024\nkbncomputer-023\nkbncomputer-022\nkbncomputer-021\nsannoul1\nkbncomputer-018\nkbncomputer-017\nkbncomputer-016\nkbncomputer-015\nkbncomputer-014\nkbncomputer-013\nbebob\nkbncomputer-011\nkbncomputer-009\nkbncomputer-008\nkbncomputer-007\nkbncomputer-006\nkbncomputer-005\nkbncomputer-004\nkbncomputer-003\nkbncomputer-002\nkbncomputer-001\nfreeimt2\nbeaum\nzpsla52\nzpsla51\ndevjuso\nalto1\nmeatpojang\nbluesunh16\nnaturescent7\nbluesunh12\nbluesunh11\nbluesunh10\ncampnetr3452\nljha1017\nfoxrain7\nurmine212\nwieluxe\necosaver1\natelierf\nbackup74-2nd\nhdmedi\nmisnmari\nsoundnrecording2\njisoo81\ndarkogt\ncb114\nfreejch2\nccamdio\nhjs8603\nkx4123\njhigh11\nasmamatr6103\nkbsharp2\ndlqmssjn002ptn\nredtiger1843\ndami3224\ncressc1\ndlwnsgh04\nvcomm\nartshop4\nrexdectr7541\ndns29\nyunchulwoo79\nyunchulwoo77\nchoiwy0309\nfromysgd\nchocobo85\nraneeman\nceocharles4\nnunbit69\nluxuryfriendly\ns2fdevsunny\nas2as\nalmightygear1\ngodo136812\nrnlbio\nti2posrv\ndpflsskfk051\noosnuyh862\nmyoungshim991\ninduk1-009\nps1203ps2\ngodo86022\nvictoriash1\njoyuneed1\ndns28\ncomlab3\npeter0115\npeter0114\nkptool\nsamwonsm\nszarbo\nhaemosoo1\ninonsan\nyunth84\nds22sonia001ptn\ncomeon19\ndns27\nanybuy1\ndns26\niocean20122\ns1intw\ndns25\nbudgetingadmin\nipetbrand\nwjddudejr1\nrobo74\nirecc5041\nbigpink1\ntrueguy21\nhwang9805\ndanhbaweb\ndbswndudv34\nhwang9801\neraitman2\nteatroadmin\nru3030\nkangjoung282\nata3dphoto\nsupplyctr\nbabara0307\ntoody\nyosong20\nbluework\naweadmin\nkangageu2\nkangageu1\narmario1\ncoolman6761\ns4freeintp\nvincentia\ns4freeintb\notthtr\nrosebibi\ndg4321\nazukis\nhkcorea\nrainbebop1\ncatboy2\nsuhon004ptn\nozmisozo\nindihero\ngigadotr3592\ndigout13\nmetaljin3\nmetaljin2\nultraracing1\nwhgdmsdls1\nallat\nsaeroevent\njujutel\nenst0821\nbj21c\nchoice1588\nsoyariel5\nsoyariel4\nsoyariel1\nentiger\npinah85\norb59\ngoldman1969\nmoteevtr7993\nfunfungirl\norb54\ndo9115434\njohnny421\nelcha1\nv6ralph\nwizday3\ngsgtel-019\nptsdadmin\njyhong85\np65jun\nmorenvy026ptn\nsmarket11\ngranadacnt1\njgreenfarm\ntortex\ndlqmssjn001ptn\nipayobeauti\nstrangecat\nversacehome\ntkmulkorea\nrurico712\nyourday2\ncmdesign9\ncmdesign8\ncmdesign7\ncmdesign6\ncmdesign5\ncmdesign4\ncmdesign3\ncmdesign2\ncmdesign1\nsmarttest3\nsmarttest2\nsmarttest1\nrkdwogks\nhwang9184\nnaamzoon2\njmj5588\ngi351admin\nesajang78\nsensretr5948\ngerpmsg\nkimhyohyoun\nddr222c\nlohaspia\nenhotelarv\nleeah357\nvisualmelody\nbychoi8249\nsweetpack3\nuknew\ninthou\nsayin007\ngnomya1\nmtau01\nvndck\nbungae801\nsquaress82\ngsgtel-009\nhongdaesalon1\nys0831-019\ntonnie1\nys0831-017\nys0831-016\nys0831-015\nys0831-014\nys0831-013\nbawoo\ndecains\ngmdrmalltr\nys0831-008\nys0831-007\nys0831-006\nys0831-005\nys0831-004\nys0831-003\nys0831-002\nbeerline\nsjsmssorjt12\ncellboomcos\nbrotherworkstr\ndosxlrwhgdk\nbaechu09101\nword00521\nodjfnrtm\nrt4403tr4716\nrockxury\nchae64652\nchae64651\nipaycozplaza4\ncyj0921\nurizone\ngi112admin\nstyleeyetr\nartshare\nbeansmade\njailzonetr\ntwowintr7461\nwowpower2000\nkescorp1\njanghs0620\nhyanni\nwjseodns12\ndearosa\nsuhon003ptn\nvsjangho\ndlsl0124\nskorea2010\nsyffb73\nstaygold1st1\nbisniscepat\ndaesinmeat\njsonline\ngreenpr10041\nzmfhqk1\njkut123\nipanes\ns2pintextacy\nopenfishing\nsamsungdica1\ngbeovhs\nstudiosato2\nnesladmin\nfiberopticsadmin\nquickandhealthyadmin\nminingadmin\nwww.keys\ngi38admin\narice82\nmultinara2\ndnfs74791\nseojiho0722\ngi467admin\nnimsikorea\naland\ntonature2\nipaysoulkiss00\nonionmarket\ndanbiftr4724\ntrysf\nsalesdemo\nsaerohtr5219\ninganryu\nkkssyyy\ntrynj\ngi228admin\ndimasqi\nmindoro1\nybk2002\ndbkn8700\nsoonine\ndubero\nafikim58\nukhan\nipaymtwonhyo\nhs1862\ndicaframe\ndaara1\npp49125\nhyunchun\nhyconere\nkbsmart\ngodoshop000-015\ngodoshop000-014\ngodoshop000-013\ngodoshop000-012\ngodoshop000-011\ngodoshop000-009\ngodoshop000-008\ngodoshop000-007\ngodoshop000-006\ngodoshop000-005\ngodoshop000-004\ngodoshop000-003\ngodoshop000-002\ngodoshop000-001\nbioworks\ndcomskin1\nghddotnr11\njoena68\npieen7911\nmisspapa\nfreegine\nxellos1225\ncandyluv213\ncbkbass\nacdcgoo\ndebijou\nchorock\nairtraveladmin\naktionen\ncyj0213\nmonkeystreet\ncaoliotr5340\nmobiple\ntorida\nggstory2\nggstory1\nmky1991\nbanamoon\najoo5\nsjy07051\ndawun012\npcnara21\nsun99424\nubigeotr4072\nsoaphouse\ninnercircle\norangepink1\nukbul\ngodo134606\nkilim2004\njgg1kr\nchoulhak1\njeross\nhegys0207\nbabygirl2\ncotjdtn092\ncotjdtn091\ngackt500\nherbpeople\nheret41\nrache01\nfishlove\nfoll0603\nyunkiri486\nroselian\nz1m0b65\nz1m0b64\nwoori0101\nleoirae4\nbeebeez\nartherot001ptn\njuli451\nmelitta\nnemo-box\nsemicolon87\nrachel789\narise\ncocolulu\nsesladmin\nssodesign001ptn\ngeorgelee11\nderkuss07064\nchoianne-020\nderkuss07062\nderkuss07061\nbizcsuwon\nfreejuick1\nbestbatr0142\nchoianne-011\nchosale\nshopisready\nsooncho\ncaffemuseo1\nuokdc0079\nkracie\nhpauthdream\nmadamepapill\nclxkclxk24\nclxkclxk23\nthine20111\nddr0715\nmaya4000\ntustown\nkcrjjk031\naison\nchungpung1\nghj1123\nheadachesadmin\nkhn3552\ncdmacs9\ncdmacs8\ncdmacs6\ncdmacs2\nhyaj13\niojazz\nuglypuppy\nlandasco\ntkddn511\nnamcheonwood\nmonblank2\nmonblank1\nhjnetwtr1099\nsosobaby\nby2004\nmoon4284001ptn\nyonacat1\ntradappy\nsugarlong\nepdevsunny\nsda34431\nbigthing3\nbigthing2\nbigthing1\nclokemed\nmidofood\nhummel1\njinny10041\nkristingale\nasadal049ptn\nhjs5553\ninsamq\nedrf12342\nedrf12341\nnauridle1\ndbsthf121\nrcd73251\nilovekichen\ngodo133852\npfire\nneoist77\nsinhanlight3\nmksssang57\nsamjung2662\nhdiled\ncjy0513\nsbmaster-015\nsbmaster-014\nsbmaster-013\nsbmaster-012\nsbmaster-011\nsbmaster-009\nsbmaster-008\nsbmaster-007\nsbmaster-006\nsbmaster-005\nsbmaster-004\nggaemuk\nfontmatr6627\nsbmaster-001\nsilkriverfd\nusehacker\nwjdvnatiq7\nhopeelpis1214\ngodo133761\nqcidea\nddres15881\nmakingstyletr\njabiznet\nbbosasiseller\nkem08121\nsehee5087\ndrdori1\nsjh7even\ndreamtime\nndg1111\njm1030\npat50071\nkozola\nrlatkdrjf\nxnittr9142\ns2psetuptest\ngambbong\ngrunamu\nyoung87171\nbadu4\nminzy28\nkisskey1\ntaeyohan\ngs9957\nvisualhip4\nsuomi3tr8442\nsk8923\nblinkisbling\nsolerebkorea\ndurgatm\nredglass2\nsojungs24\ngs9881\nmisslyn1\nandjean\nkozmic\nbodacompany\nbadas\ncomhdtr\nartcook\nviganhu\nbanana64\nmiyoun913\nhj9795\nkws1324\nottchilstore\nhealthynote\ncoff22man\nafsco2\nprada801\nlastchaos\nartcraftsladmin\nmdbaby1\ninfertilityadmin\nhsjun1112\nbubicattr0219\ntexmate\nambergage\nharumemory\nme9273\nxteenman\negreengeo\njsturtle2\ngreenplum\nraontec1\ncomfun4\nmallboom\njudokiss6\nufosys\nkpmobile1\nbluesunh\nwww.hi5\nipayescooo\nhosbinz4\ncihri1\nquizadmin.seventeen\nvadesign\nfarm30\ngimp\ntbjung3\nlenahc2\njaeyoung1\nzirh\nhummingblue1\nmoongift\nfrombin2012\ngoodreview\ndkpingpong\ngodosoft-059\ngodosoft-058\ngodosoft-057\ngodosoft-056\ngodosoft-055\ncbk73768\ngodosoft-053\ngodosoft-052\ngodosoft-051\ngodosoft-049\ngodosoft-048\ngodosoft-047\ngodosoft-046\ngodosoft-045\ngodosoft-044\nnairi\ngodosoft-043\ngodosoft-042\npoolandpatioadmin\ngodosoft-041\ngodosoft-039\ngodosoft-038\ngodosoft-037\ngodosoft-036\nadfines\ngodosoft-035\ngodosoft-034\ngodosoft-033\ngodosoft-032\ngodosoft-031\ngodosoft-029\ngodosoft-028\ngodosoft-027\ngodosoft-026\ngodosoft-025\ngodosoft-024\ngodosoft-023\ngodosoft-022\ngodosoft-021\ngodosoft-019\ngodosoft-018\ngodosoft-017\ngodosoft-016\ncambridgemaadmin\ngodosoft-015\ngodosoft-014\ngodosoft-013\ngodosoft-012\ngodosoft-011\ngodosoft-009\ngodosoft-008\ngamakjae\ngodosoft-006\ngodosoft-005\ngodosoft-004\ngodosoft-003\ngodosoft-002\ngodosoft-001\nms1intkhs\nyooncitr7021\nkozo01\ntiumtech\nilabguide\nimysen\nlittlebe\ntraxacun\nobbs\nherbhong\npoloislands\naaacoffee\nkisssilver\ndametr7277\nsomino5886\ndaesun771\nddingminji\nbabilove\ntrees\necopyzonetr\ntreen\ndlrlghks811\nellinchung\nkim8310k\nua9499\nfaqdesign\nmtes\nyong1830\ninparo1\nprori6181\ntherich1\nwiki12344\nhyung747\nedenhill3\nsfglobtr5110\nthreesisters1\nmineedon\nagiga2\nagiga1\npig200301\nactiongirl\nbileepia2\necofairtrade1\ndoriskin6\nphotickertr\ncanavena1\njameslee922\nshowtime\njwclub748\njwclub742\nnoyou55001ptn\naidl2\nmansoura\nsecuredmail\nmallaqus\njustinny1\nydyo\nkimya\nslasys1\nmoviesadmin\ndiypapa\nmmotorpart\ngodo132406\nsneaker1\nochairtr7416\nsmurp777\njjh19824\njjh19823\nshoulder991\ninnsoo1\nkidzmetr4592\ndumbo8311\nfantfant1\nblueteng\nicedemon\ngi345admin\nbbliving\ngabanna\neunsungbae\nttutt2582\ngodo132316\nsangt1004\nsangt1003\nspirrastore\npeter731\nkimdsjtr0169\ntravelmart\ndlsl851\ntarih\njinsi0712\nwhynot612\nihmeditr4510\niblind11\ntpfakxm\nafrch0\nsvmans1\ndreemee\noidb\njnttravel\nubispo1\nneofootlockertr\nbesyo\nhialice\nsora03111\nyong1360\ns2pdevextacy\nhanasyj1\npjhgreen\nafox773\nbaadshah\nafox772\nsoulmatebed\njongkuk2\nniland120\ns2fsselfdevsunny\ncarebank2\ncarebank1\nsungardkorea\nwaterfall21\nks29973\nvalueon1\nhee530\nksc74182\nrlaxoqhr7\ncomesta\ntopart\ndancershop\nmecca36222\nskynsnow3\nskynsnow2\nfreeman9634\ncocokids\nsookin1\nfunkyjoo48\nyesgo24\nazpeper1\nking99230422\ngoulyeon\nticketman1\nsoole82\ncarolin1\nporntube\niki2626\ncoolkiss1015\nlhmarket7\nlhmarket6\nlhmarket5\nanibig11\nodvelotr3621\nchowon\nlh10922\neightcollect\nr42tr7690\nonesukyu\njapanrecord\nviva12042\nkajinsp\nhwphot\nlowfatcookingadmin\nuhfc2\nflovetr\nwlsrbdus1\nhallawine\nen2free88\nen2free87\nen2free86\nen2free85\nen2free84\nen2free83\nen2free82\ndongasys\nhongo713\nhongo712\nhongo711\neropanda1\nkaiser2\ngi359admin\ntra78\nddorai0702\nknmidal\nmshb13\nmorgandev\nkey94120233\nassist0513\nkey94120231\nhj8136\nmitisyun\nhcorp5\nhcorp4\nyoon0\nkbyggkbygg1\nsmartnara365\nlonsomeyez8\nroots32\nlonsomeyez6\nlonsomeyez5\nbabyforce\nbacaboca\ngoeric79\ntonong\nenwj12341\nenteam2\ntalatula\nnipc6016\nskaudcjf\nsimswf\nsstudio1\nseorabul1609\nzencostr9567\nuni1122\nwondongts1\nchouh1\nredmangchi1\nblueya9\nrhwntjs1\nchool995\npolar885\necinderella\nbizfinanceadmin\npolar884\ndh96962\ndh96961\ndkfqlsh3\njeonil\njeonid\ns2freeqa\njennysoap\nyesfkil\nrenoirart\ninpeed\nfunnkids1\ncandyluv21\nsensenara\nsyeng1\negowrapping\nggstory\nwltjd999\nnoru19631\nhollyhock\nmashile8\nmaya0824\ngoogondo\nchungpung\nfishing7\njjpack\nzaggusa9\nzaggusa7\ngi287admin\nhanaweb\nfilm09tr\nbss699\nbycode2\nwanturoom\nrodemgagu\nhyssop03291\ncctv365\nklstory211\nnewhavenadmin\ncarenet0123\nnet00041\nwildkam1\nsolgreen1\nenvymall\nfreebud1\ngi33admin\ngi462admin\na8544012\ndemofreefix\nhanatoy\njoboksam4\nimarketing063ptn\nbugatti2\nbugatti1\nmillioneyes\ngodo131003\ntifhffld\neshuma\ndaewoonara\nquddusrla2\nquddusrla1\nzangi2\ntotalstr5555\nchefmeal\nchoone\nkbyggkbygg\nhyang2e4\npikimini1\ngodotech05\ngodotech04\ngodotech03\ngodotech02\ngodotech01\ntnwjde\nkmh8766\nautoka1\niw90952\nnytech18\nsivakumar\ntnwo88\ndadaicksun\nzion6333\nadmin.horses\nparan7730\nimarketing029ptn\nyisukrye1\nyjb85582\ngs7228\ncarpedium922\ndesigndemocracy\nstyleinseoul\nsony724\ntestwebserver\nhanasbt\nsonrojj\ndmswn12031\njsung9743\nipayhongdetr\njoyhil1\nacerokim2\nacerokim1\nmoongubox3\npolysuka\ncctx\nworkplan\nmybrandla\ngi223admin\nsigoljang1\nsunmi211\nvigossjean\nkyuso6079\nviki9209\ndreny7171\njongkim882\nmini17495\nlaiic88\ntv365\nmirhkinc\nchinesesladmin\nsenior21\ndragon15251\nbiz9742\ns4freedevp\njhsuh88\ns4freedevb\nbaekfood\nhappypsk1004\nttt911\nsamdaein\ngoodcaremalltr\nmk82324\nneckknead\nccs.m\nclassythe1\nherbbox\ngymnasticsadmin\nbiblejohn\ngounface\nnandamo1\nhappystr7224\ne-yeha\na025088\nkhakis822\nyb07301\nedumost\npkh35001\ntodaymalldev\nmindlerae\nlowepro\nautocos\nagamo\nbaseballadmin\nsinwoo84\nrainbotr6420\ningodoman\nheo38021\nibtkfkdgo\ndwelling00\nautocnc\nmimpikang1\ncartier07223\ntongup2\ncartier07221\ngreenmoa3\ngreenmoa2\nccam2314\nsea11sun2\ntookhanwoo2\nminuya82\nsmreo007\nzhdfyddl\nhyec9778\ndodoteen\npetitmamang\nkdh743tr7167\nemsp12052\norganitr7178\ninoble\npny100044\ngodo130082\npny100042\npny100041\npny100040\nbigbangt5\npny100037\nmcmon\nlkm721231\nsecupc\npny100019\nseungsam534\nbluekhi\nssum331\nhonggift\nsimhu\ntp00781\nkyong12k3\nmistama1\nfreebits\nthd0950\nmhj104692\ntodakorea\nksgolf1\nccny\nnanacotr4958\nsbs2212\nallmarket1\nhanalcd\n5min\njuly6268\nmissbotr1340\ndesign29202\nmir33091\ngreennara\nindibank\nassetad1\nhyderen2\nhyderen1\nsaegilfood\nfinanceservicesadmin\nwww.umbrella\nsimpleplan\natokoreatr\nkoreahobbytr\nhipolee5\njmhyon841\ngkgk1212\nlounge-test\ndgyoon77\nyouarespecial\nkwh8391\nsptcmrh1\nexcelwis\nmanjis10041\nsmash12121\nbluegun\ncredere2009\nseoul266\nglobe3\nshero20001\nmyjuyer1\ngodo99762\nfoodlitr2047\nssukland\nhvdica3\nzootrade\npknara\ncmmgxml\nzambus\ntokyo9\ngs6078\nmagic1tr2987\nlivingartmall\nawesom711\ntotorujjun\nwaahaha-020\nhdcytr\npak4382\nyooncibang\nez1213\nbiottatr9337\nsms9645\njeeyae2\nmcitelecom\ncomputadorasadmin\nzambi3\nipaywonderlisa\nknetdev1\nzandie1\ncindy11142\nteappong\nserverhosting107-156\nbarbieholic\njpoomtr\ngodo128311\nfreebeau\nyayadldl1\ncmos01\nkmh7242\ngjs2ya2\ngjs2ya1\nmagooganshop\nanniy3493\noneupfood1\nbigsmusic1\nyankeetr9528\nparksb220\ntong18171\nenpranihome\nkimschain\noroyoeo1\nsuyue\neod13923\ndecorico\nmikako1505\nbrownmusic\nmarie70541\nica0702\ninnovid\ncertificado\ncircadies1\ntomceo\nwgtrop\ntopwatchtrans\nwnffldhp84\nfactor41\ngeriotr\nranye81s1\nmono85862\nmahasiswa\nmono85861\nsnusptr6247\nbehomme\nrnddev\nmhjar232\nroadwise\nnajuoh\nkocom23\nfat644\neoq2592\nfat641\nleeruli1\nnova121\ntmpdb\nshy0579\nptuebiz-018\nhj71161\nserverhosting33-249\nboysnice792\nsoosan21\nlhj930\nych20102\nych20101\ntrooper\nfunchi\nubiplus\nirises22\ncitysound\nmipds33\nmaryon2\njellyshop\norgio8848\nmscogo\nsweko\nksuhyeon\nspicyyeon\ntomoro1\nhinomura1\narecelcard\nyedam114\nadoll\nlenscare\ntjfflfkd\nokokna1\nhanbitart\nswinpro2\nswinpro1\ngreenmade\nimurak\ncommattr8236\nmcinfra\nmoca771\ntlawo\nshinan12072\njukbox0826\nparagoncys\nzama79\nmarktwainadmin\njuneogi4\ndevice1141\nvoltakorea1\ndopamines\nnaturesvie\npass3097232\nseika\nfsmatetr0262\nwww.websoft\nha1jek2\nnicekido\nbabyhoo2879\nokparty\ndlarkddnr1\ndaedongsa\nheybuilding\nsuun000\nsk3897\nrms004\nlohas500\nparkzicj1\nrabkorea\nsoqlcwns\nwhite5582\ngodo127430\nzion3914\nveilsuit\ngrayleopard\nmirhkinc1\nlys64647\nsoung4016201\ntnwjd483\ngps123-v4\nbackchj61m\njellyp\nsuper9373\nterryreside2\nqusxo6\narenas63\nfsmaster4\nfsmaster2\nacryl\njejuhalla\ninsurancecompanyreviewsadmin\ntnsehd33\ndreamfc\ngi340admin\ncjhlime011\nwinwin20112\nluvhyun812\nrltnr2\nsuri3\nsuri2\npurelock\nherbflora\nbumho741\nsure1\nsmlove1\nong2012\nbackup73-2nd\nedu5011\nhousemade1\nchs915\nfifkorea3\nsosom3\nwww.umc\nsbsports2\njys142\naliassu1\nhisynim\nableinc\nohyesysj\nhjleports\nakld9919a\nejrdka12\nkappa100\npraiselord87\nmsbook\ns4freedevsf\nnamdo0523\nzzarupet1\ntolbae\ngodo98089\nsnj8188\nminkmink74\npassion9731\nblackpc\nmy-web\nbrch3927\nthinkfree772\nblackt1\njyjyok\nblackjn\nipaygspkr3\nvhdldpak12\nwww.guitarhero\ns4freedevhn\nhyewon962\npuremax1\nkwkydoor1\nsweetshadow\nmgmmdl4\npkma00\ncastroledge7\njminhyug\nddos-linux160\nkoss0965\nbusan2good\nfine1224\nthetanpopo\ndecopan741\nshineshoe\ndenimctr4582\nscuba2\nxlove10\nyjgogagu\npyo0325\nizu19811\npurelily\nskycomm3\nskycomm2\nqutin7\ngurrms841\nuniquedonut6\nwww.summer\nguswls06301\nbass792\ngi101admin\njibong9981\nam4582\nciclo2\nact21\nzion2977\nmogaebi1\naromapack\nsigongeshop\nplases\nsshhjjoo\nckhkill\nfanta70\nfaline\nmicrosoftsoftadmin\ncontact2yeon\ns3setuptest\nqudwns36\nrentalpc\ndanacross1\nna52442\njw75701\nmaxkorea1\nmisshera\nomin0531\nhappyag0211\ngodobilldev2\ngodobilldev1\nhsr12352\nna52441\ngloryinkn\njuokled1\nleuny256\nhuhu0821\ngodo126275\nwestyle\njoyel01\njejusc\nmyucstory2\nmyucstory1\nteasle228\nmgraphtr6510\nnjangttr2530\ntpana4\ntpana3\ntpana2\nqfriend\nurijeju721\ngodoacademy\njj060707\nheoja331\njejuif\nverylovely\nslashbak\nmansnonno\nekayak\ngi405admin\nseoinjae1\nfall76\ninnobox\nnystylist1\nkosres\nbjm7x167\nprostatecanceradmin\nutzentr2899\nzion2476\negujjoa\nipayishop01\nminsuke\nendan4513\nlohanlife\ncelebrityeroticadmin\nrealboutique\nsuga1\nwind23472\ncocoritt111\nkont\ngungang\nkoryms\nsonkang092\nojm72722\ndlsdo513\nsonnori\ncsgbboss1\nsupersoft\njudystory\niamzookeepe\nemgreen\nprint1004\nsgfood2\ncometbicycle1\nmystgirl\nlovej1111\nsaenong7\npromade215\nsaenong4\nsaenong2\nvanessa3\nbabo7749\nfulam1\nchildrenstvadmin\nnewcalion\nbabo7727\npurelady\nm7bike\nactorsadmin\ngram400\nsorrjcyxl1\njinyoo103684\nwestso9\nwestso7\nsaynew\nwestso4\nwestso1\nchnsky4\nrodemnamunet\nkhyunt4\nkhyunt1\nscshin\nklover001ptn\nmadamyoon2\nhelpboy1\ngodo96584\nbodmodutr\nnfmbrisbane1\nziani222\nkifood77\nlittlejune\nsssmi\ngetmind4\ngetmind1\nsuh10211\nfbi100\nsubag\nyiyinha248\nmcoamall\ngoodberg3\ngoodberg2\ninvestingglobaladmin\nfood1232\nkkomi301\ncdsaesae2\ncdsaesae1\npr2011\nosj0404\nbabaco0306\nninewishes\njran72711\nzang9180\ndhfl4444\njhp02151161982\ndameetr\nyss0941\nwestore\ngi27admin\nminworam\nyht81101\nmfccafe\nkimura52da\neusebio1\nyesfarm3\nferoxkr\neunhyehan\ni2r025\ngi456admin\nhongmans75\ns6822143\nkkhy08076\nkkhy08075\nstrongbaby1\nbrapra\niq25781\nseongyu22\nginsengnara\ncooldange\ngodo125063\nseacom\nbynu4225\nandbike\nmykika1\nssono\nspace87678\nvmsjune2\na0250810\nmyr1111\nsiyeonb1\nvolaweb\ncocolsports\nucc93\ngergerh\ns3devextacy\nmalfa0529\naegkorea1\nkorrg1\nk6807221\nfm014\nprayk10041\nredwingshoes\ngadangel\neq18aa\nmichinkimchi2\nmichinkimchi1\ntop092\nyangleehair\njunecrtr3729\ngreenmoatr\nnamdointeri\nkangsky2402\nsteek\ncitynetphone\nnagakig\nnt99993\nnt99991\ntiuum\ncampsaver1\notime5\nssyu7852\notime3\notime2\nshallom30\ngi217admin\nimshin\nlab-ware\nnaseeyou1\nkkomange\nkumhoad7400\nlovetournet16\nlunacy71\nhaudxjjh3\nqvp081\nagapa1\ndzkorea\nfacstore\nrisingsu\nta9933\nrpm6400\nhitdeco\nstbiz\nloenstore\nzuzu7967\njihoon1004122\nll2tr4543\njsbae3408\nkorkys\nmer2371\nvbsoma-019\njielkumsok\nvbsoma-017\nvbsoma-016\nleesim31\nvbsoma-014\nvbsoma-013\nminso02\nvbsoma-011\nvbsoma-009\nvbsoma-008\nvbsoma-007\nvbsoma-006\nvbsoma-005\nvbsoma-004\nvbsoma-003\nvbsoma-002\nvbsoma-001\nwinenara\nhalom65\nespacios\nminicarnara\nvioletreetr\nkonkuk-070\nwaahaha-010\nwaffletr7761\nenple\nusliberalsadmin\ngogocar\nsssk005\ncafeluwak\nmonomini1\ngo123\nkonkuk-059\nstorymall\nneo8977\njdy482\nhyunte0615\npureleeyun1\nlky2345\nchinaguide\njinne02051\nltecompany\nicalys\nkonkuk-039\nboy6girl9\nboy6girl8\njadepost1\nbhc2013\nglinda\ndavid1982\nasphodel1\ngreengrimm16001\nkonkuk-029\nptlabo06\nbigstons\nhscommunity\nchoin33\nbadpark\nsimmong4\nsimmong3\nsimmong2\nkonkuk-019\nneverdiesp8\nneverdiesp4\nssgj1\nneverdiesp1\nitalianfoodadmin\ngreenmoa88\nmanomano777\nkpigup\nssey1\nshalombada\nthat2000\nkonkuk-009\nkienforever\nyanji12\njuette18\nsseon843\nsseon842\nnacaoo88\nrabbityjk3\nbomin78\nmj12052\ngodogodo-050\ngodogodo-048\ngodogodo-047\ngodogodo-046\ngodogodo-045\ngodogodo-044\ntoqha0719\ngodogodo-042\ngodogodo-041\ngodogodo-040\ngodogodo-038\ngodogodo-037\ngodogodo-036\ngodogodo-035\ngodogodo-034\ngodogodo-033\ngodogodo-032\ngodogodo-031\ngodogodo-029\ngodogodo-028\ngodogodo-027\ngodogodo-026\ngodogodo-025\ngodogodo-024\ngodogodo-023\nsrobe\ngodogodo-021\ngodogodo-020\ngodogodo-018\ngodogodo-017\ngodogodo-016\ngodogodo-015\ngodogodo-014\ngodogodo-013\ngodogodo-012\ngodogodo-011\ngodogodo-009\ngodogodo-008\ngodogodo-007\ngodogodo-006\nhwa4385\ngodogodo-004\ngodogodo-003\ngodogodo-002\ngodogodo-001\nwarrior1\nwyfe\ndshuni\ncorvettesadmin\nmun0305\ntacocoke3\nrarestone22\nshoestore\ny0017035\nworkingmomsadmin\ninobrid\ngodo94768\nsisamall-025\nsisamall-024\nsisamall-023\nsisamall-022\nsisamall-021\nsisamall-019\nsisamall-018\nsisamall-017\nsisamall-016\nsisamall-015\nsisamall-014\nsisamall-013\nsisamall-012\nsisamall-011\nsisamall-009\nsisamall-008\nsisamall-007\nsisamall-006\nsisamall-005\nsisamall-004\nsisamall-003\nsisamall-002\nsisamall-001\njinnam01\ngumho7033\ngumho7032\nnj00901\npearlsma5\npearlsma4\neztechtool\nckyudong\nnatural365tr\nkshan33\nrlvndqa\nmagicpuppy\nthsui\nlhl1982\ns2pselfdevsunny\nqwe879\ngameshowsure\nwlgus0411\nprime05562\nprime05561\njejufood2\nmagicadmin\nmariweb-030\nsintoboolitr\nwww.sol\nykssk209\ndbflfksp\nsmreo0071\nmariweb-020\njinying7771\nmeatstore\ncmpsnd11\nattybook\nm.development\nmariweb-013\nparkyuri01\nedell2214\nmariweb-011\ndesignhappy\nmariweb-010\nhhjk090\nmariweb-008\nkailas1\nohhifeel1\nbabyonekorea\nquitsmokingadmin\npulmoo1\nwww.smi\nbsmedi1\nj0103s\nwskang71\nhanakwon71\ncoolsangchun\nmusicsesang\nfeha1004\nsoguitar\nviolinbank\nwhite1331\ninicis\nams1237\nblackhairadmin\nme0200\nseinntech\nsgadidas\nbabokachi1\nfrandus\ngreenfund\ncoverqueen\ngi334admin\nucnownet3\nucnownet2\ndalgudayo\ndaumplus5\ndaumplus2\nisshe841\nmsdoye1\ndlaehd12341\nlayetttr6850\ncaribul\nnospin1\nrolex112\njimi1234\nnam0428\nblueland\nywoojoo\nwww.smc\npink129-029\npink129-028\npink129-027\npink129-026\npink129-025\npink129-024\npink129-023\npink129-022\nspiratek\npink129-021\npink129-019\npink129-018\npink129-017\npink129-016\npink129-015\npink129-014\npink129-013\nherherbada\npink129-011\npink129-010\npink129-008\npink129-007\npink129-006\npink129-005\npink129-004\npink129-003\npink129-002\npink129-001\nacasia4\nacasia1\npatiloma3\nflood37\ncontentsweb001ptn\nchoib81\nsyoe1992\ntheprayg\ncjrail1503\nhoeun55\nlsyzizibe\nansdydwk77\nocm8245\nmoon2nn1\nryusc\njygolf\nvitamineya3\nqkznsocm19\nqkznsocm17\nqkznsocm16\nqkznsocm15\nmqnix00272\nwoohaha1212\nwoohaha1211\ndental08011\nraonix17\nilovepcbang\nrina4634\ndaewoong0525\naceoutdoor\nsmilebean4\nfexchange\njacekorea1\nlemoncandy1\nsaiquick\nhana2ju\nyoumi4262\nbuy7942\nyoojimin\nstmediakorea\nsujunggun\nenamoofs\nebookstore\nchon355\nchon354\nbunkers\nchon351\nhera463\nsambsamb4\nsambsamb3\nsambsamb2\nvivianan8\nwww.sit\nvivianan1\nwoohyang\nhadouken\npoplarathome\nrhj66072\nbarreme\nyibok1002\nbunnywtr3877\ncbin777\nmisomommy2\nimpnic\nfan951\ndanahblind\nsj7727\ncrowhell\njsminicam\nalejantr0857\ndalnara\nzaxshop\npyhee74\nmaytwo3516\ndcstore12\ndksckdejr081\nkidsclub1\nleesum0101\nkukujj007ptn\noliveanne1\nliongroup\nhospitaladmin\npsmcreep6\npsmcreep5\npsmcreep4\njjoo12341\nlalahaha7\nfreebits1\ntong12104\nmotorex\nckzks331\ngodo50687\njeeyeon486\nnickyeh2\ncara4422\nhanxiaojie3\nhanxiaojie2\nsudamnet\ngogoko123\nithecompany\nmate1987\nblackzang\ncha8055\nrainbow05\nlcooljl\njuallygirl1\nmoagift\nwindsor7\nssismcss2\nwindsor1\ngodo92959\ntofino\nleeunsoo2\ngoldwinwin\nsayyonara3\nrosebud0314\ndo6803041\nxmflgha1316\nsoraebada\ncuremed\nfactory13\nwiniamando1\nzbatsugar\nmlove2013\nsbj32941\nhileesee1\na482\ngiftcard24\ninmytime\nstriftr2773\nislamnet\nninetwo\nitconsultingadmin\nkmh0662\ndragoniron\nsbs22121\npacoel7\npineintr2455\npacoel3\nkbg1616\niintimatetr\nlexon3\nmiu8209\nscpack\nshairsys2\nfridaytr7648\nhamchom\nemma19813\nemma19812\nssadoo2013\ndadam92002ptn\nzamting00\ngodo121570\nmhworld\nsianfb123\nsianfb122\nfittz0514\nbeagastr2931\nlifell01\nc29042\ntni2005\nurygusl\nboxtv1\neyaaeyaa\nouadms1004\nwdne20102\nkindperson1\njeeyae\ncjscience\nklp2man\ns2fsselfdevwheeya88\ndeepsy11\nartmonos1\nanegels13\nanegels12\nanegels11\nanegels10\nsafeland\nnookyshoptr\nshfksgorl2\ngreennare1\namericalatinaadmin\nire1532\nire1531\nideantb\nonesberrytr\nomokdae2\ngodcadmin\nyjkkkyj2\ntyj0711\nindibank1\nsg13735\nwnrkq2322\nsklg3377\nbasstuba1\nongame95\nboxsquare\nlarge777\njiwon1601\njisabal\nryu3362\neasy71\nleenalee77\nrainboweshoptr\ncharmfnd1\ngocanadaadmin\nminou73\nminou71\nliitto\ny46581\ni2free\nlocobozo14\nsimsimcocall\ndsfood\nchoeran\ngibbmi881\nvalansis\nwnsghk2\nwnsghk1\nnytech011\nuro09828\nuro09827\nuro09826\negujjoa1\nuro09822\ndaedohead\ncha7142\nteaping1\nwooilyo1\nbellabella\njujoonet\njayblood\ntressa\ngamessladmin\nrubana3\nsabakki2\nhwa1538\nyoyo07164\nclef4404\nclickpsh\nrjstkah\nwoalguswls\npdoohan\nhigro814\nkoohip\nxn9ktr9341\ngreenfarm\nclickpos\nkoreacc1321\nkitchensense2\ndandyhong\nsooda\nable881\nnewhelloabc\nshindusik\ndnp33686\ndnp33685\ndnp33682\nfatfatbaby2\nphonebank\nchworld\nwww.sat\nheoshey1212\nimstyle-v4\nlovekssh20\nantivirusadmin\niamstore\ndilly9898\nflorencearoma\nglfood3\niferra2\nthegroup\nsensetime19412\nsib2b777\nds3ebr3\nds3ebr2\nipayibogenalse\ngionara1\nde7521\nswan20084\nwww.equilibrium\nkool77\nkool74\nshjung80\nmanlejjong1\ngani793\nbodacard1\nideaguy\nhanakang\nlovetnb\ndadam92001ptn\nsomac\nohbeeho\nlongdown\nriver0205\njfdesign\njiahyoon\nimom24\nmediffice1\nsddre1\nthiscotr8602\nhjm306164\ncloverisyou\njinubooin\njcommerce\nwidepicture\njuicybam\nnaraeb2b5\nnaraeb2b4\nnaraeb2b2\nnaraeb2b1\nhyoreen\ncntoto762\nyinang\nno6248\nunluv29\nlmgkorea\nhscosmetic\nboyami\nlevelize\nmyifthtr3838\nohandee\nkmg8290\nssy0918\nyjean1\nhi6732\nsm72152\njiniee2001\nttaeyeops11\np16442868\nglennn\ngodo119237\ndbcrktyd\nsamchotr7819\ngodo119190\nson3s\nparfumtr7383\nlwinkl5\nlwinkl1\ntruejisoo\nrolenjoe\ngodo119110\nziucore\ndoongsun76\nkonimi\ncoldr11\ncgogol\nslaimhj\nlovenz1\nexcellent1\nwinwintr8114\nwjdgml04022\nifm1209\nwhatever1\nquarter\nmisso79421\nzsunho\nksw60251\nseoul3000\nkonico\nrhew3373\nrhew3372\nribbonnco\nshinilmusic\njujoocom\niworld21\npuremskim\nhamjimin\nillideg\ncpainsladmin\ninnodesign\nhyunchtr4151\ntwithutr5899\njeehui\nadonis928\ninface\nipitta\nielttr8266\nbarny22\njpory64323\nduometis3\nsafefirst1\nhello2friend\nseul5868\ntjddk007\nysjune1\ncreed26\nsodo3\nnient011\nhiais777\nbethebiz\nnudull1\nlgallery\ndoshkorea\nsoday\nfafarm\njeon9897\nsodam\nartistry2001\nshinykon1\nseongnew2\njuxilove\nhadongm\ntotalsun1\nqusdydgo\nmajor10121\nh82y1548433\njune00531\nsecrettr3719\npommevert\ninterweb\nmjl5923\nxmfkdnak1\ngogimat\ngjalfk1062\nxenonplus4\nxenonplus2\nwssin6w9\nwssin6w8\ngomddange\ncrystal28\ncottony0\npowerkim\nyami9999\nkeiron48002ptn\nhanacome18\nhanacome17\nbolt365\nyesljunu1\nbau6393\nhjkim99\nplelece1\nrain8192\nbuyshock\nkyweb\ndaha4136\nmuyoungs3\nsmsd2\nmuyoungs1\npopsnow\ncacaocoach1\ntkyng555\ngyc9393\nwww.musiczone\nfoodritr2117\nboardkorea\necoskill\nminione301\nxunmei9\nxunmei4\nlollishop\nvision76\nchin5445\nqkrdnjswls131\nsmpre\naliceyul\neversee\njajaja\ndltnstls047\ndltnstls042\nartnartr1382\nhistoryquizzes\nscmdev\nkgy09064\nmmmgooo1\ndesignnaudio\nmiz013\nanaloggo\nbeck981\nduoback1004\nghjp559\nmoon5822\ns2fsselfsetuptest\ndabidang\nhi5425\nquarium\ncltrs5011\nintercom\nhaim1004\ntong043013\nhappybaby1\ndgblind\ndiypronet\ndnsap001\nlauradavis\ntong043011\ncw70672\nvolgali1\nlyunmi\njjellymo\nradiodj\nuisookpark\nminimotors4\nscmall\nminimotors2\nminimotors1\ngownmart\npch93474\ndesingarts3\nhoyoa\ndlscjs27\nheechany761\npublicnt1\ndang3000\nlovej21\ndmstory591\ndksgytjd07\ncheece\npowerfe6\npowerfe5\npowerfe4\npowerfe3\npowerfe2\npowerfe1\n1001mall\nehdchdltm\ngreenchoi\nyhj9475\ntae9290\nzinoljm4\nsynthpark1\nzarabiaj\nyjs4187\nmoacom3\nmoacom2\nmoacom1\nvintage302\nartrack1\nlovei10\ngsme1\nrcarena4\nrcarena2\neunhee461\nexweb8\nfsuri2\nkb4741\nbbanyong\nbabyparentingadmin\ngodo117484\nyaho0627\nlightnara1\nfamilyon\niceworld994\nionhaitr1044\neuropeans00\nserverhosting254-250\nimi8061\nincom1\nrokaf8217\nkopd13093\nuworld1111\ninterkorea\nplanthej5\nplanthej3\nprettyaha1\nserverhosting254-238\nzach32\nkona21\nhersvill\nwangsstr1532\nbeauty1\npkhong147\nmiracltr9261\nkeiron48001ptn\nserverhosting254-230\njdmedi\nmysohome2\nmyhome66601\nghdrbekd1\nruril\nmageel2\nserverhosting254-220\njjanghyuk1231\ndeadhorse.powerize\nkukujj003ptn\nsolletr3301\nttiik0421\nljw57441\nosr777\nbeautec\ngi22admin\nlioncra\nserverhosting254-208\nserverhosting254-207\ngi451admin\nserverhosting254-206\nmyspacelayouts\nblbox119\nserverhosting254-205\nruntoptr\nserverhosting254-204\ntheshitr7447\nbackup72-2nd\nohmytrader\nserverhosting254-203\nbagsa1119\nserverhosting254-202\ncapulus\nlwimall\nserverhosting254-191\nbotzim\ncaw22\ndnridnri123\npinkdangkn1\nwoosukgagu\njoen1120\nguglielmo2\ngdbird1\npsh1310\njusin3333\ngi212admin\ndkfdkqhsl2\nwharl7\nbandyoun\ngodo117022\nserverhosting254-175\nourking121\nkss17621\novis79\naajenny2\nldsmalltr\ngks410\nserverhosting254-169\nseoulflower\ntjsgml6637\nreshkorea2\nforeverkdy1215\nforeverkdy1214\nforeverkdy1213\ndnjsemr02081\nkjokjo6869\nyjs3460\ntinytottr4759\npackfna\nlion27192\nbeaure1\nserverhosting254-159\nchoisakra\njrin6981\ngi30admin\nserverhosting254-157\nwww.wwenews\ndm-bike\nwithtng114\ntigger1\nwestoretr\nserverhosting254-150\nssshimmm\nwellooker\ns4devmimi\nshilladsmalltr\ndbgma11\nphill19772\nbilliardsadmin\nddangwee\nlagon20021\nserverhosting254-139\ntotalsds7\ntotalsds6\nonyaganda1\nturnkks\nlagnn09\nlagnn08\ntotalsds1\ngreenbike\nserverhosting254-134\nsarah2660\ntoyzon\ngjreform\nmkflower\nrumi1\nyo3una\ndrsousu1\nhayantan\nleejinwon87\nfoothealthadmin\nkyeong3919\nhojungga\nzabcho\neunicorn\nhappyday0413\nhasooni2\nsolyeep\nsinbalmall\nno3same3\nenamooselffix\ngiftlg3651\nlbebecom\nhotkrtr4482\ngoogi811\ndkfhddl1286\nchoi24k\nlesvie\ncjb33333\nladytable\njikyjeon9\njikyjeon8\njikyjeon7\nqkr9477\nhwaya3\njikyjeon1\njkpark9000\nhkh8026\ntestedu-003\ntestedu-002\ntestedu-001\nallmychildrenadmin\nnagne1591\nkamangoo2\njaeho0404\nbikeon\nmostive\ncountrymusicadmin\nvedika\ndnstory1\nagnes09271\nmrcafe\njihyuntt\ncool6270\nss102\nss101\ngisadmin\ndukeland\nmarientr3765\nmarientr3763\njaeho0310\nkukujj002ptn\nvortec\ndanbi6510\nmodafamososadmin\ngm00008\nkysgreat1\njk3384\njihyunin\nrevernco\nraykkorea\ntkfkd5353\njjellise\njennyholic92\naa114\ntazal\nhwasss\nwhistlemotor\nwhitelee85\nlegomaniaxtr\nellisvilltr\nnosturbo\nf4040\ntobang\nfinfratr2080\nftshoptr0819\njiny14452\nilsub1\nhaudi3\nchchd5\nchchd4\ngodo87112\nfourth\nhwasin\ndang1191\nwww.eldorado\npadg771\nmodencase\nckhanda\nhanil8807\nuamarket\ndbskk2tr5271\ntrinta302\nsj2290\nfstr07\npurecare\nssadamoll2\nddmsaip82\nrococotr0634\ntcctv\nnam58501\nhayunine\nshoesmong\nnamseung1\ndafm415\ninarai\nnetlinks\nrealhockey1\njeon7075\nminhair\nwww.por\ndodogirl\nssmario1\nuhakinside\nqlwn482\ncararis\nleesan79\najedrezadmin\nnixxxtr0906\nmrmarket\ninaoro\nsbshop\nspeeno5\ndapark94\nsaengi77\njcsoot\nenvy55712\nheat4860\nwnrjstn\nhispace\nhcbig3\npadadac\npen1003\nblooming1\nminhyounga\nssaneon11\nmyjinan\np216212\nnostume1\ntrendi1\npolyhan2\nanjunara1\ntheziatr6193\npishon\nkaidlee\nteappong2\nteappong1\nmusiczone\noldro72\nmisoen0422\nchomi0628\nsbseul\nestoneme2\nssunworld\nbemakakao\ncfmall3\nkwak3709\nnsj1224\nphotomade1\ntrymimi\nlotto9796\ngoldposition\nnavercheck\npurebess\niamsoul2\nljh06874\nljh06873\nljh06871\nfineartadmin\nsnlovely\nwww.graphics\nsseu1234\nshin01181\nkukujj001ptn\ndanzzac\nskgun\nchild5572\nchongmu1024\nrcchamp\nttong044\nostingirl2\nksm3431\ncottontr0542\npopo66zz\nmmagpie-050\nmmagpie-048\nmmagpie-047\nmmagpie-046\nmmagpie-045\nmmagpie-044\nmmagpie-043\nmmagpie-042\nmmagpie-041\nmmagpie-040\nmmagpie-038\nmmagpie-037\nmmagpie-036\nmmagpie-035\nmmagpie-034\nmmagpie-033\nmmagpie-032\nmmagpie-031\nmmagpie-030\nmmagpie-028\nmmagpie-027\nmmagpie-026\nmmagpie-025\nonlylove\nmmagpie-024\nmmagpie-023\nmmagpie-022\nbasilio\ncoloncanceradmin\nmmagpie-021\nmmagpie-020\nmmagpie-018\nmmagpie-017\nmmagpie-016\nmmagpie-015\nmmagpie-014\nmmagpie-013\nswancnf\nmmagpie-011\nmmagpie-010\nmmagpie-008\nmmagpie-007\ngi328admin\ntogames\nmmagpie-006\nmmagpie-005\nchinesecultureadmin\nmmagpie-004\nmmagpie-003\nmmagpie-002\n1100\nmmagpie-001\ngi476admin\noilfreetr\nkdh4715\njustice1233\nseven20121\ndrkein\nhwamong1\ncapsmal\nsjph1\nfreshgarden\njolrida\ndlwhddnr4400\nviolet3x\nfinancialplanadmin\nbosomi\nkimejj1414\nkys17x3\nkys17x2\ns2freerelease\npjh9019\nqkr7903\nferia74\nlucksr78104\nhanil7772\nzizyzix1\nnicecd3862\nshezhome\ncha1850\ncarajsj\nhyokyum\ngolfchaetr\nsch7095\nvictree\nbtsmono2\nsj1234\nkwonmihang\nbc2765\nharry2\nciellight\nnamju815\nipaybbwood\nmdpkang2\npcsimmani\nmoohanfa\nminitar\ncultfilmadmin\nkoo20033\ntoolsjoa3\nekbooktran\nlimh6151\nnewageadmin\nminishe\nmomejon2\nmomejon1\nmissleeshoes\njujh10081\nunderthewind\nkcw30100\neusenstr2920\nminjine\nedmontonadmin\nohfashion\nliveinsoccer4\ne2com\ncoffeehearth\nbigmouse\nrtary\nbackfactory\nnybigmama2\ndecofarm\nksm2766\nsunahouse\ngi192admin\npopshoes3\npopshoes2\nmegacross\nhansung501\nkissme1719\nmomsoutlet1\nasadal050ptn\nspeedbi\nansunyoung11\ntong04309\ntong04308\ntong04307\ntong04306\ntong04305\ntong04304\ntong04303\ntong04301\ncarrusun6\nnaltene1\nchaiz1\nskineva\nmoaba34\nnemestar\nhomendream1\nyoungfly882\nyoungfly881\nhstrading1\nkojavi\nsonhyeran\ndodosense\ntsj010803\ntsj010802\ntsj010801\njid4382\nwebiketr5947\nipayelechorn\nprocycle1\nplcorea\nryung132\nwicked3\nshowrang4\nshowrang3\nubicom2\nagnes07074\nin2diet\nswibin\nkdh3755\nfamilia\nhdk6246\ngagudawoo\nkays0310\ntokyoshoes1\nchacha8606\nluxclub\nssawoona\nporori1121\ntjd4804\noilback3\nspecialedadmin\ndarknulbo5\nleey0333\nomin883\nemileok1\nblueday1\nhuritz\nbetty020\nhtata2013\nksmtmdal\nsj0401\ngwangpiler\nsjm03\nshowdr3\nsopimiran12\namebaworks2\nasrada1\ngcsd338\ngocoloradoadmin\nbomnalco\nbeasia4\nbeasia3\nbeasia2\nchaeks\nstorehouse2\nstorehouse1\nfiveray\nkimnh62561\ndrimi3\ndrimi2\nep1421\nkumsanew\nanypiawp\ngcross\nwww.oks\ngi16admin\nchadol\ngi445admin\nstickoa\nrtjean1\ndoosol1\nserverhosting107-245\nsilverss\nhealthy3\nbluemingky\n09jungletr\nserverhosting107-225\nltc1221\njungin36122\ncodecode\nnext10304\nserverhosting107-201\ndkxmvlf115\ntnhawaii\nsilkn\nserverhosting107-175\ndpan081\ngyounet\nserverhosting107-157\nbae12sh\nserverhosting107-154\nserverhosting107-138\nbc1627\ncaribul18\ncaribul10\nfeel11012\nmi9792hyon\nqkrfodbf2\ncktiger\nhansolvan\nrichman602\nminiii3\nminiii2\nminiii1\nbakoonpro3\nace2525kr\ninplacebo\nanimefans\niljinkorea3\nkiwi121215\nntreeux1\nljsystem\nchowonherb2\nmonosara\nhujun94\nboriya\nasadal048ptn\nsonddam\nbsw02271\nmapia12031\nrssports2\nrssports1\ncad1042\nhjkhjk146\nhaha5502\nuzzbebe\nwnffldhp841\nameliejsohn\ngi206admin\njap4045\niapplian1\nminifix\nezinext\nasia6366\npjmh1234\nhehishim\nredgrape\ngaintkys\nyeppy67\noaky10041\nfsleeco\ngdayadtr\nhanacokr\nhitec91\ntheshitr3463\nchujasong\nweasd4312\nmhchosj\nmotif73\nthe154225\nmoon0925\nwww.nsc\nauthorsadmin\negon07881\nes4free\nrv114tr3544\nleomaltr2861\nminidog\nchicagowestadmin\ncozyroom\nkk7375\nmemsearch\nmaymong12\na328jank\npipoca\nulookmalecom\nshuba\nilrang\nwaitingsky\nrommystory3\nmoonyoung1\nacc114tr\nforhome1\nheon1119\nmodernxx\nnamutrading\nnanang00\nshnpg\nsafecom5\nnl10052\nsafecom3\nsifff\nmanguluv2\nmanguluv1\nsilver75\ncrossstitchadmin\nholystar\njliten2\njliten1\nbr00315\nhealth-i\ncodus8474\ns2pintw\nebaypop9\nebaypop6\noshea2\nharamj\ncbc26161\nisicmaster84\nheritzen7\nheritzen4\nrhrhtlsgp\nwjdgml2\nkjn1824\ndojagiholic\ngoevent\nsnikystyle3\npsywigtr\njkglobal21\ngydmsl91\najflrl831\nksm1048\navlabtr7583\nstudy000\nsoutiger2\nsoutiger1\nkwons222\ntathlon1\nganhedinheiro\nghdejr\ndrice1\ngi255admin\ngotodigital\nsblindtr4686\ncling721\neunmmmi\ncarapass1\nyeppne2\nyeppne1\nhtable1\nlypkmr\nshkim\ntheredclub1\nrooiboskorea\nnysearch\niamshinq2\nvasilius1\nsonido\nrecetasfiestasadmin\nguitartr1175\nprmart34\ngoodstore\nprmart31\nprmart29\ndonnadeco1\nasadal047ptn\nprmart25\nyummibtr6393\nmubjstr6205\ntigi228\nleeheni1\nwoo37721\njelson5\nmplandtr7697\nbluebelt\ncghjlc\ngodo83445\nshimc\nmodesale\neve282mj\nmingoon\nprettysfc\ndesong1\nprmart12\nmhj0035\nwpspw12\ncowalking\nleoug4\nchukachuka5\naart1232\nflyhouse\nahrdus93\nrain2151\nfurunbory\ndujin1004\nplaytitle\ntolive1\nmultisam1\nkky1121\nsuniltoolz\nseongnew4\nseongnew3\ntaemin8101\nseongnew1\nkky1101\ntheminime\neastgagu2\nalthing\ntakuteru1\nzacboard\nhealsdak\nprinart\npower3g5\njwkim21\ngodehdal\nshinyehwi\nbasematr0983\ncastbrain\nskijun2\nskijun1\ngodo111866\nmikimjh1\nsema20001\njuny8075\nwww.fmipa\nsohokorea2\nokyumion\nmogu05015\nkkarigirl-020\nhansoletc\ne2gee\nfancyk4\nfancyk2\nfancyk1\nrookiegirl2\nkkarigirl-010\nkkarigirl-008\nlaminating1\nwelcomebbtr4436\nmikilove\nkkarigirl-004\nlsk8233\nhwani4u1\ncodyand1\ns4freeintmimi\ntjesther\nkimdongeok2\nmykim02062\nlkmnature1\n1001gagu\nisesangkids\npurplecart\nyca8004\nkwen8567\nppjar861\nhappystory\nfantazzi2\njjwp6929\neoqkr7976\nbreakers3\nturkishfoodadmin\nlucasmall\nleontailor\nevenly2210\ncasinogamblingadmin\nexerciseadmin\nsafecare\nprimese\ncomsun777\naone322\nredmay6\nredmay3\nredmay1\njbizweb002ptn\ncafemano3\nmoonsu803\nsawori\ngi323admin\nasadal046ptn\ngreen4kids1\nmuzaki73\nlemonteeflower\nlondontr9096\nhonamfood1\nhaso10246\nhaso10245\nhaso10242\nloveandwe\nsbmug491\nprimeex\nmh12252\nmh12251\nalleyhouse\nm9611053s1\ngoldrightgr\nsambakza\nhaha751000\naspoon7\nruchagtr3159\nzzooni400\njsm9394\nimeux2\nimfs76\nhaieland\nfancy4u\njuslisen8182\njuslisen8181\nkhwon10261\njja09girl6\nchogootr5558\ndanwooc\ndngkfka3608\npower120\nmscogo1\nhanvok\ne1it3\nwww.bluesky\nsouthnine\nbodypeople\nbyuka4454\nillkwon831\nshe-k\ntanksolution\neveyatr4937\ngodo111084\nbbosihae\ndeakug13\ndfriendd1\nbumpertr0601\nmhbooks\nillak79\nsohokorea5\nsohokorea4\nsohokorea3\nsignstars\noldnew2\noldnew1\nfictionadmin\nalspo3o\njj7272\ngonycadmin\njmh0707\ns3devhn\nbooora\nsfoo3\nsm700\ndaedongfood\ngeuxer1\ngodo81935\nactpos6\nowoo4343\njhtech1002\nlabonsella\nhansum\ngkgi36\nboyscouting\nrain0735\nenindi223\nenindi222\nenindi221\nenindi220\nenindi218\nenindi217\nenindi216\nluxpalace\nenindi214\nenindi213\nenindi212\nenindi211\nenindi210\nenindi208\nenindi207\nenindi206\nwomensissuesadmin\nenindi205\nenindi194\noxo7910041\nenindi202\nenindi201\nenindi200\nmp3admin\nimi1380\ngirl2783\nbigredkane1\nlimjd1\nfundoo\nosekun\nboomss\ntyvld011\nhitalk7\nobchungs\nenindi215\nminking10022\npharos03068\nsangginara\nenindi199\nenindi198\nenindi197\nipayksh41451\nagyangfarm\nenindi196\njdepot\nhptoptour\nenindi204\nalpsgom2\nenindi203\ngeosung\nmkad13\njunkno772\nboomin\nenindi192\ndresso\nsury111\nenindi191\nenindi190\ncore0413\nsjy1980\nshygirlj2\nkukuy7551\nkhk8863\ndonnafugata\nlorde\nvolvmr\ngodo109511\naseva\nseoroin3\nseoroin2\nanna7332\nlkw7607\nmst3kadmin\nbooknm\nenbmt78b\ncreep5862\nins9805\ncm36513\ncm36511\nmimoo25\ntphanwoo2\njbizweb001ptn\ngodo81529\nbrown77071\nmjsw2001\nheinzman5\niatoz841\npickupnuri\nmajor001tr\nprettyang\ndonxiote\nasadal045ptn\nj7001021\npopkorn\nendlesrain87\nallenjung\ngodo15013\nbrocante1\ntoolserve\nimfeel\niceworld99\nsytkorea\nanvgagu\nssuper111\nomikorea1\nkoreaittimes\nopencloset\nduipsatr9452\nykchoyoungho1\nsbic1101\nhsmarttr2079\npak110044\nwww.scarlet\nfinedeco\nperfume2u\npeunyang1004\nseri2\nlogin.flyfishing\nthulebox\na19911114\njcodi1\ncatnortr6101\njdh9688\nvictorynana\nboogun\nddprince\ngodo81258\nzhik112\ns3freeintnulbo\ngi11admin\ntointomalltr\nhannam\nblackstar07\nanatma991\nseorm\nuyeah1\nkmrush2778\nelfinmk1\nvonglass\nshosemd\njw58361\ngodo110037\nritz1224\nfunnyfancy\npopklml\nsheet123\nxezza04\ngoyonara\ncoshouse\nrustichouse\nwoodener1\nsophiekim881\nmultipic1\nmaroo007\nksj392221\nkange1082\njjdstore3\nbizcarshop\nhenshe3\nhenshe2\nin0fishing\ndldmswjd682\nmisomobile\ninfo2008\nverashoe\nmaker11233\nsoundwho\nillumegate8\npjk425\ngnointl\nkakaokong\nselus\ngksqlrldjq\nmbc7095\ngi440admin\nhishuh1\niovesoon3\nkids0310\nhailua\ndaonbnb\nroning5\nmagnifik\ndeospot\ngi201admin\nashleydsk\nbook09\ngpddl223\nnineseedtr\nmacouttr5779\nhamse7\nbomuls\nbrotherkorea\nsr11051\nspdental\nmuum1004\npregnancysladmin\nsenq21tr2021\ninwoo091\nroast\ntpwlsrkrn\nsck001\nthismom2\nthismom1\nrobho\nboutigirl5\nparagoncys1\nmizu1206\nhinduismadmin\npupple92921\npucca82\nmptextile\ncmdesign\njjugly21\ndydwn8199\nperformingartsadmin\nasadal044ptn\nchae6465\nuniwith4\nlaflore1\nosama36\njindogift\ngi301admin\ns4freerelease\nlegendblue\nminehg4\nhamong\nbeans00\nteamzeus\njerrysog\nsjy0705\nanyone13\nnanana30008\ninposition\njpmpshop1\ncollegesavingsadmin\ndevtr6545\nsindanmo\nlovealdo7\nbyallie\nhdwestore002ptn\nneoway001ptn\nstylezoa5\ninnorec1\nsuperex\nknmira\nlenahc\ninternavy\nyh870430\nhomerecordingadmin\ncholesteroladmin\ndojavil\nhotelmann2\nbinutgage2\ngivmii\ntess6824\njune5379\nanjumaru73\nfantfant\nwww.mortalkombat\nsvmans\nlalamaison\nverychu\nmallufriends\nsonamu1317\nwithyjs4\nlee5555kh\nsonamu1314\nbluworld\nlhmarket\ndopamines4\ndopamines3\ndopamines2\ndopamines1\nhalujk\npcm3319k\ntldus11021\nyegaboard\nzetbit\nnohsora1\njellytup\nnora00141\ny42193713\ny42193712\ny42193711\nbonge5\ndragon1525\ndogpartr2198\nkli2519\nwww.maplestory\nblak1004\nanmiwonjae\njya802\nghdtjsdud99\nlead0419\nactol21\nmpinc2009\nnicekido2\ngillsung002\nallmarket\nmiraclefish2\nmiraclefish1\nanes5020\ngoyongho\nonestar\nixoustr1734\nkwankyou1\nhthlsy11\nhthlsy10\nbradshaw\nkps6235\nsatta4\nwumuw12\nwumuw11\nwumuw10\nilogan\ntophomme\nsedar\nedutest-003\nedutest-002\nedutest-001\nadnet4\nadnet3\ndesigntr6405\ngoofee74\ninfo0704\ndop3030\nkmungu\nhappymind3651\nmottny\nsiatkids\nuriwa\neleddong20111\nehaesungtr\ndesignpilottr\ninnopole\ndtrend003ptn\nwoo5218\nasadal043ptn\nserverhosting254-180\npageenter2\ncdsaesae\nkwc06203\nkwc06202\nvaluer21\ndltkdrb2202\nstarsign1\nauri22tr6901\ncntcctv\nmexicancultureadmin\nmincoon\ntad8878\nlovetournet3\ntrivistr3679\nbreakset\ntiresadmin\nhappyroomstr\nckwls0707\nadnbiz\ngolfmotion\nshoeptr5574\ndiychoco87\npopo0724\ngnjsclfalska3\nsmj98271\ndrcorp\nsmartsunny\nkm780201\nhdwestore001ptn\nnewdian012\nkkozzatr1147\nbackup71-2nd\nbettysl\ncubicpan1\ndonongwol\nharmonydeco\nha61114\nadmit4\nbaseballkid\nwfr123\nwinzgirl2\ngosuccess\nsuuh75\nmarokiki44\nkhk6362\nsuun0001\nsecho70\ntlssmc\nqorwldrb1\ntree4smart1\nliosnaif001ptn\njennykim\nsalam7777\nidikorea\neuphorie71\nrih21005\nkazetr7485\nykustic\ncharmfnd\nmirae09\nssdbr103\nssdbr101\nokebary2\nirowoon\nmini0762\nakira34991\nhaechowon\nsaywhat\nmirae02\nnpaper213\nyounnam0\nyongyong2k\nchinaweb\npen2011075\npen2011074\npen2011073\neuniett\njwminbak2\natzoootr1292\nteamj0317\nbuyblackberrytr3134\nh82y1536641\nlejybe\nwanghh330\nshopjtr\nbomebi\nysisky2\nlimux21\ntommy20023\ntommy20021\nanyparts\njuheun1105\nhh4088\nhansori7\nemotionno1\ncostarmarket\ntulip7787\nbambara\nimprovn2\nsmartwax\nhttpej\ncc112a31\ndreamwk7\nsevenled\nkoyw0225\nsay79kr\nkimjobo5\nkimjobo4\ntrustkor\nkimjobo2\nhahacoba7\ngomnimtr5839\nalphawill\ngi317admin\nyuooooo\nbos300\ndtrend002ptn\nasadal042ptn\nsj192\ncfmall\npck1977\nurbanoid\nbiotree7\nosarao\nyuni06251\ny4141\nrhkdsus21\nstayathomedadsadmin\nmoto3651\nrsko9210\nrdh74351\nredglass\nkhwanik5\nfdonetr7285\npjh1296\neunhea82\nspbq12342\nspbq12341\nservlet12\nrssports\ndreamsji\ndeazon\nmoto11\ncslighting1\nrin8531\nfishingtv16\ns0428331\nfishingtv11\nwoo3772\nkoi111\nodc2512\nodc2511\nyhp778\nleemaking1\nhellosports\napolo25v4\nabc16164\njdleports\npkr9776\nda2sso1\ncm3743\nehleem\ndapanda\nk1textr4114\nkhwon1026\nwindev18\nbluesunh-001\nlovebicycle\ngydms851\nluluchemical\nbizcincheon\nhukhuk\njuny6340\nneo2885\nstyleyang\ncm3651\nspokhatr0080\njdh990\njwarehouse\nk2juni\nexe03112\nsatang\ndaejunbank\ngps123-v4r\nabsj\nmaxtoto\nadkoko\ntasd121\niaan1004\ndiottica\nenprani\nhobbyandtoy\nink82tr4547\nsignup.mail\nhar107\niope79422\nswam82\nosmosetr7286\nmini103\ns383638\nan194001\nphotos24\nwindowsespanoladmin\ntzmcom1\ncheongon5\nclzlseowkd\nthreeh03011\ndbgma111\nacts96\nwlfmddl6\nwlfmddl4\nwlfmddl2\nwlfmddl1\nfd10813\nwww.kss\ndtrend001ptn\nasadal041ptn\nacts29\nmauntain2001\nun50252\nkyr3089\nucnehandwork\nymfoodtr3901\ncheongnam\nmjcsong\nnhbai2\necorian2\ncsco3040\nswacom\nbooksell3\nbooksell2\nmrcompany\nwesang\nkmerkatz\nlimsurk\nkidsartscraftsadmin\njcreative8\njcreative7\nthyroidadmin\njcreative4\nrex19951\njcreative1\nmrman16\nmrman15\nmrman14\nsoonsou755\nmrman12\nmrman11\napolloeos2\nropatree\nmanualfree\nsaemichan1\nvision97001\ncanonhousetr4170\nsukpopo1\neuromatr3933\nyoumsangwoo\nkicheolpark\nedubooks\nkkh84233\nsdmysong6\nsdmysong4\nbladerpk\negg0419\nzillion3\nmeetree\nzillion1\nnani94401\nsaqa1\nqusxo61\nokeedokee1\nfantary6\nchojisoon1\narenas632\nhspark01\netodayshop\nwonwoo612\nybrenttr5235\nyuseonk1\nmystertr8093\nmoroo1\ncrqdaiwa\nkoaid3\nsvn-season2\nsvn-season1\nmoru82\ntrydeng\nelnoya1\nntree906\ncph1113\ncctvclub1\nnabiggum\nmoses5\njjhdha2\njjhdha1\nthe336\nkobj0706\nwoodpeer1\ntank10081\nvldzmvostl\nwonderstr\nzaizzaiz\nkpc101\nx5dr5\nstylesay\nchdlminji1\npbs9425\nplateros\ngirlscoutsadmin\ngoodsin3\nthdud8848\nvoip3\njoagoltr4470\nmirepaok\ndesignw\nwhtjdms0392\nsoleil1024\ntgs52471\nimagok\nlsed\nwinnerswon\nminajo2\nthecentaur\nbjw1990\nbackpackingadmin\ngi434admin\ndebbnmor\nurzzang4\nurzzang1\nfamilykorea\nustyler1\ntwohaptr2258\nfcss0700\njoe08181\nysboard153\nsdfsdf\ndigity81\nwww.srs\neuneunv\nkog515\newoojoo\njoy740423\neduedu-002\neduedu-001\nljhookart\nkeeka1\nrisma\nasadal040ptn\nbumilion2002ptn\ncyshop\nj2s0408\nurbanworks2\nsuren2\njbseo3\nsoya04071\nwayomedia\nmoriz2\nshongun\ndamano1\njsealing\nfishingshow\nskyanbg3\nnicegam\nkaru1220\nipayatoben1\ngufarm\nyhlayuen\nwcysports\nhosikgi123\noltramania\nbonpeople1\nminam54\nts9492\nmamijjangtr\nhajemt\nwerbew\ndd1999\nprmjung3\nmsr97973\nbrandplanet\njchull\nworldbath3\nthirtday7\ndcjae831\nflorist4\nflorist3\nflorist2\nkonom777\nacts1270\ncellsladmin\nhghong09141\nawy03034\ngoho1972\npetruspark1\nkimjs9374\nghyawr01\ngi185admin\npaolo202\nplaygon\nmedicalofficeadmin\nwww.ldc\nmultikids\njazz75\nbigboycustom\nmmiijjoo2\nm5acnc\narktour012\nwesang2\nlinkbel\nhansu5802\nlhj2425\nsz900831747\nyoyoyo6\nyouoh252\nzfishitr6882\nskdiwndl\ngodo18tr8760\nkal32000\npluscheese\norij79\nedding1\nbojeon\njoungyoon3\norange6716\ngodo75002\nmedusa1599\ndmscjf892\nymoonchan1\njjicoffee1\nseoilfood\nballista2\naux9971\ngi336admin\nwizz\nabzzab\njkkorea2\nsurlira\nhoontech\nloshfinna2\nloshfinna1\nleegonelee3\ntobangfood\nidc06002\namateureroticaadmin\nalsl9812061\nkby3388\ntlswjdgns12\ntlswjdgns11\nceresjane\ncinthea2\nperpetual77\nwearnet\nwellnlife\nbusexpress\nteamevo\ndashuhouse\nbicyclecrew\nstatisticsadmin\nyuildent2\nonepice\nlyhyun2\ngifteabox\nes4rent\ndk04272002\nasadal038ptn\nartnwine\ngojack60621\nanna1203\njchnew\ncleanmobile\nsungkunc\nipayy1684220\nbabycrew1\ndaoncp1\neveelf5\nchs9152\nchs9151\neoqkr0773\ncoloryarn3\nssong49921\nsolmart\nnwwnulbo\nhnmobile\nyeonsung-100\nviridian2\nwon92ko\nminibyuri\nhahobj\ndanpopo\npsdstudio\nwww.tik\nanna0927\nuber7328\nnggri2\nsj162863\nnyrelay\necoperm\norgpbh\ntrio1195\ntrio1193\nstars231\nkyy3382\nlafirst\nxotjd0523\nleeseo2322\nxiao611\nwanjin1\njoatel4\nyesoya2\nwww.villa\nalfo3093\ndkehd71\ngoelrai\nccy0222\ncocdesign\npsychologyadmin\nhukaura\nzizimaa\nahnsj00\njsspace6\njunsic-030\njnsglobal\nkjc7890\ngoodboybsy3\ngoodboybsy1\nhomekimchi\nskgulbi\nsac31\ndodream1\nyoura961\nhens771\nultimateroms\nmiae6941\ndudghktl\nashley715\nstyleup2u\ncooltrack\nfriendog\nvapalux\nsunyub\nhisynim3\nfgns5119\npojangmd\nbbo1029\nch79191\nadhomi\ngbk12031\nnamhunzz\nasphp72\ntotalbtr3290\nmr70042\nsterniqeq\nfromdaniel1\nipayhsomang\nmedicmedia\npojangdr\nluxzero\nu102hyun3\nu102hyun2\ncsj00354\ncsj00353\ncsj00352\ndlfrnstk\nskimxbeen\nhjleports5\npjaeoh7\npjaeoh2\nkongsooni\nsanyum\nmstowel1\nlhsgkrtn\nxoghk03\nwww.aaaaaaaaaa\nkoemtr1622\ndgtong9\ndgtong8\ndgtong7\ndgtong2\naram7074\nlhj1025\npapadaughter1\nsevachrist\nnextgo\nadicok\nluxury97461\nasadal037ptn\npro83132\nhan777\nyshwsdj\ndesignartsmart\npark7270\nshkim5439\npetitmore2\nokidoki9\ngmskin10\nbbabboo183\nbluecarpet\nparkjohns3\ngodo73378\ndannykr\nshonnlee\nadnet7tr9530\nfindgoods\nforestfood1\nseleibe2\nseleibe1\nkmrush27786\nsps49051\npasteryn\nkjytoyou\ndurifitr2595\nshoesbang\nrjckdahf\nkoh0811\npjw306142\nmotelriabed\nbitdrugstore\nmakeupcar\nhun337\neduweb34\ngreenhands1\nbabyve71\nbaiclef1\nkoshmarket\ns4freedevsdg\njollykidz\noleiros\ngill263100\nsanup1\nphonia\nyakplay\ns379103\notimetr1039\np2sung22\npangpang2\nmyshop-029\nmyshop-028\nmyshop-027\nmyshop-026\nmyshop-025\nmyshop-024\nbrotherjj\nmyshop-022\nmyshop-021\nmyshop-019\nmyshop-018\nmyshop-017\nmyshop-016\nmyshop-015\nipaykhtr9885\nmyshop-013\nmyshop-012\nmyshop-011\nmyshop-009\nmyshop-008\nmyshop-007\nmyshop-006\nmyshop-005\nmyshop-004\nmyshop-003\nmyshop-002\nmyshop-001\nallthegate\nlohas0011\nagijagime\nbogok1\nsoccerkoone\nenglishcultureadmin\ngyuri010\nwww.tic\nsim3419\npopdkdl\nwesternunion\nmaxport\nsante2\nsante1\nmounggoong1\ngodo270\nmoonan\ncsnet00\nnurinail1\nbestkim99\nbarack4j4\nlesportsackr\ndnjsgnsgml741\nsinnara1\nmoitie70\nhocsong\nomniherb3\nomniherb2\njaekyumlee\nacticon\nkokundo4\njlp1357\nnpschool\nkate37501\ni68425\nstwood\npluto134340\nnancho911\nanagod1\nboombox811\njun9453\ndouglasmac\nmn22ang\natfox02\ngo04124\nhantara2\nsomang2\nsomang1\nwkdwjdwk11\nbinine00\nnewsz3\nnewsz2\ngi312admin\nrhas2\nimarketing052ptn\nstseller\ndrumman\nprides2\npark6322\npark6321\nasadal036ptn\nbear0235\npopcorp\ntonyaqtr1378\nnewsjw\nminami21\nneedforspeed\nt1inter\nboggisland1\nbeans87\nduruduru\nzillfin2\nddos253-133\nddos253-132\nddos253-131\nseoulem\nswitch001\nicars\nblackmat\nhanmibook\nahorroadmin\nthenow23\nkookmitr2323\nmapline3\nes3today\nhaitnim\nblackkpg\nokkuyng\nsspp800\njes1550\nyeonsil\nfromto\nansholic\nsnoberry2\ngkkoreana5\ndmsdk60291\njyjyok3\njyjyok2\ncheongyewon1\ngaegul211\ns4devtj\npartiniitr\ns4devsf\nbrother12\nlilymag\ndntjr001\nk7k6w35\ns4devnj\nbea60482\nfilternara\nromiys1\nkan1017\nwww.webdemo\nsoljin2\nkoreacarcare1\ni2373720\ns4devhn\ncosmosqaqa3\nk9301251\ntvschedulesadmin\njason9808\nnewoni\nlogic875\nlimoti4\nenter3853\nenter3851\njsm0045\ns3freedevnulbo\nmindhomme\nhousentr9794\nwbdw777\ngkstoalek1\nzeropark6\nsankdy\norilove\nevan1052\npcsupportadmin\nsori50783\nusgovinfoadmin\ndsptools\nntree9061\nji0ij1\nwww.crazychat\npapavov8\nenfgksk1\nlhwfree\nejlove1109\nnews71\norientationbb\nmyoungs9152\nsunhae\nwww.freeworld\ngoscandinaviaadmin\nyoungmusic\ntpijhkim\neunjin11181\npazzihouse\nsangvi\npartners1\nnewksc\nkdg0309\nstarquad4\ngodo100517\nhaemiltr2502\nojh96792\nojh96791\ntabu\nhahoetal70\ndowser\nlyhpjo5050\nqoqo4496\nrkeheo\njykorea\nmarok\ngucci27kr\nkstorch1\ndreamgive\nlimta1351\nmonkie\nchoi760301\nskfl730\nentadmin\nleicanaracom\nhaeorm\nasadal035ptn\nbicicokr\nkmmukg\nhyundai-040\nhyundai-038\nhyundai-037\nhyundai-036\nwww.fcbarcelona\nhyundai-035\nhyundai-034\nhyundai-033\npjb916\nhyundai-031\nhyundai-030\nhyundai-028\nhyundai-027\nhyundai-026\nhyundai-025\nhyundai-024\nhyundai-023\nhyundai-022\nhyundai-021\nhyundai-020\nkyung07201\nhyundai-017\nhyundai-016\nhyundai-015\nhyundai-014\nhyundai-013\nhyundai-012\nhyundai-011\nhyundai-010\nhyundai-008\nhyundai-007\npricedn\nhyundai-005\nhyundai-004\nhyundai-003\nhyundai-002\nhyundai-001\ngi115admin\nkan0245\nkmobis\nwormwood89\neslatti\nleeju7\n2bbu\nwinwin11\nblackbs1\nhyhan2010\nbodyya\ntokitoki88\nsogangtnt\npatbingsu3\ngaon16103\nteradesign1\nsujakssam1\ngautiermall\nmono12\nkinoson\npark5058\nebccenter\necoment\nhaenam\nmonic0\nczeon4\nwpspw1tr8125\nyeonhoj\nxofkd003\nsoccer2002\nnzblueyang2\nrl755\nrl753\nsafecotr7794\nzzipzzuck1\nlimboskin\nyeijak\nedumentor1\nnorinori82261\nwowcouples\npinkstory\nhelloko2\ncoffeecha\nsquashon1\nbabarara041\nlinuxhosting245\nlinuxhosting243\nstickermalltr1180\nlinuxhosting240\nlinuxhosting238\nlinuxhosting237\nlinuxhosting236\nlinuxhosting235\ngi428admin\nlinuxhosting234\nlinuxhosting233\nlinuxhosting232\nphlux1\nlinuxhosting230\ntmp0301\nhellojju\nmicrobridge\nromiok1\nkim7323737\nmulkibel10\nallthatstory\nancrystal\nstylertr7079\ncnrqrh13\ngi180admin\npark4673\nkkw70041\ndltmato1\nwjdtmdgns77\ngraphicssoftadmin\ncarm10041\njmoons007\nstuhamm2\nljkeang73\nljkeang72\ntkdstory\nmisoshop\ncoodgns2\nnewcrc\npicto2\nrladidgus94\njang05051\nsantamonicaadmin\nsebins7\nlinex01\nsebins3\ndinnerfactorytr\nhisekina\nstrobeau\nhomecorea\nimtoyv4\ncolle723\nanymusic\napaya10\nshineshoe1\ndvduck1\nhbckorea1\nvmeet\njhg90wkd\ngreen61611\nhkschul3\nhkschul2\ndosion213\nssongyi17\nslrrent\nbodysktr7751\nleecos\na0221642700\nju27921\npej0620\ngensiro\nnalgai20001\njjh2161\nclassicmotorcyclesadmin\nleechi\nsameun\nadelie\nshop001\ndesignmz\nnatedanji\ngcsd33015ptn\ndanjifood\nsecada1\ns3freeintsunny\nharry7000\nrainboworld\ndaewang01\nfasionbiz\nmvpclub\naidsadmin\ngodo69353\nxn3htr9530\nspxkoreatr\ndesignfx\naurorakorea\nsoleil10244\nsoleil10242\nsoleil10241\nmolylove005ptn\njuwon0622\njhtrend2\nluvpratik\nladycat\nlch66511\ndesignbs\nzeropack2\nzeropack1\nucs337\nkool2741\nsullai\nzzang6881\nwinnerswon2\nttl7812\nbaberina\nquddn4\nkkw7004\nupartners\nneo17304\nneo17303\nneo17302\nneo17301\nurban3822\nzaoln\nwww.soto\nsemonemo\nvangquish4\nvangquish3\nvangquish2\ngeojerc\nhallolupin1\nyyasz10041\nredhairanne\nredfroger\nvnfdlv03031\nkoreachild\nesedog\nbomcmall1\nl3035757\nchoimin20042\njinirose07091\nwww.sora\nlove22431\nkodi0725\nsilstar4\nplusme5\ntoc\nnjtrading2\nnjtrading1\nmazanta3\nalicatr4694\nsamack\nloitraitim\nadel75\nchounghyun2\npandor00\nulppang\nmonitor161\ndowh67\nchoikimine3\njzid1284\nbtylife\npluskey\nhulux0920\nnzmall\nstevehtr8770\nhyenminee\ngo01171\ndesign2h\nsonamu1315\nleehongsuh\nsonamu1313\nledek4\nrebiz\nyonghun22\namare2241\nhappyshook\nyonghun21\nuziuzi4\nyoojin19994\nfairtrade7091\npostictr\ngenfa091\nasadal033ptn\nwww.puskom\njooni12341\nsulem7\nsuyunpuls\nhamo0003\napplyresults\nhacong\nenteam\nduoback\ndream347\npapastoy\ngksmfls1\nboltplaza3\nwww.sips\nsayujung1\ndumelife\nrlaeorua12\ntwoseven\nmolylove004ptn\nartherot2\nclaraestee\ndltksemf\nwww.sica\nsensafeel1\nwww.rose\napnakarachi\nsyspharm1\nrainstone\nalwls10243\nd2gmedia\nnetpod\nmeiko\naddinb\nmilgarujsk3\nminhee25051\nopenorkr\nazmazh8\nazmazh6\nazmazh4\nmulkunamu1\npuny9\npuny4\npuny3\npuny2\nestokorea\nstylistr1696\nnamin2z3\ncitrus10251\njagci326\nrcom2\nrcom1\ndaynight3\nironpin\nedugameschooltr\nvmflwms\nfishingmega\nlybon2\nsan3datr9921\nsali12\njkw23144\nallgreentng\nhollabagtr\nmeganetserve\nsaxoflute\nwandoph\njuheesh\nwww.safe\nledcorp01\ndajoajoa\nruruyang\nfalinux\nbiartmtr9184\naegiyeosi001ptn\ngolfthtr0292\nroadbella\nifoodnet\ncunti72\ncunti71\njwbong\nthewonderful\nmis4244\nkekeker\nuckorea4\nuckorea3\nmaycoop\nssonssu\nsokoon3\nthenmark\nipaydawoo2com\njoungsw\nlcsvvv\nenshriue\nvnak3000\npabang1\nsystech3\nstyle911\npinknana\ncabosan8\nhuborn\naclock\nnzkiwi\ncabosan4\ncabosan2\ngodoweb\nhanraynor\nheejin09\nehgud7642\nssonso1\niseya79\naceeuro1\ntendenciaswebadmin\ned12686\nestargolf\nk2cine\njmadang1\nkmlee7\nabwreq2\ndnpqzh1\nimarketing020ptn\nldwhs82\nrainmakers\nk1like\nfilter114\nnadayos\nuomya1325\ngoorlandoadmin\nimage98\nimage97\nimage96\nasadal032ptn\nhache3\nhache2\nnikkip1\nchangdae3\nchangdae2\nrichwater\nbabywish1210\ngodosup\nbara581\ncantong\nmikum76\ncollectiblesadmin\nssun9804\ngodosoft-060\njasangbox\ncelini\njustla\nritdye\ngodosms\nsungyou1\nwww.pink\ngodotax\ngemnara1\nrcguy\njoy7404233\njoy7404232\njoy7404231\nyoungjo123\ntotalspeaker\noneinno\njj4944\nwekami\nwoon2013\ndcr\nkinglionjay\nolivekong\nicikorea\nasadosadmin\ndajunghan\ngoodsflow\nfsblue\nusall0321\nrojukiss\nnmj1185\nubskin\nkg75932\nkg75931\ngodo67173\nasiasound1\nhbsfoodv4\nqmzp1818\ngideon3012\ngideon3011\noceand2\noceand1\nzazu\naileda\ntkawjdtlrvna3\nchoihyunsoo1\noyerdan\nlatinamericanhistoryadmin\nmaxlim3\nwlgus33451\nbestnz1\nbosaeng\ngogotori\nluvcrystal\nalttut11\ngodopjt\nlsw133090\ndlawlsrkd00\nballetstar\nxn9itr6850\njan6568\nhstp07\nhckorea\nsun40013\nwawo90201\nroseleaf71\nshoon5071\nhungsicjang\noem1982\nshoesyo\nkmkeun\nluxhk242\nkmjpce\npse9023\nbestmnb\nmytime12\nduduworld\nmntk10\nmarylucia\nks1630651\nbabypear\nroaorlrnjsdu\nfoxlike9225\nfoxlike9224\nfoxlike9223\nfoxlike9222\nfoxlike9221\nfoxlike9219\nfoxlike9218\nsvspower3\nomega3egg\nhost09\nlimlhk2\nlimlhk1\nmohico86\njust79\nbyeyourjune2\nbyeyourjune1\ncantico\nharawoo4\nhsr123521\nassayes2\nkhj4817\ngodokys\neyedabom\nk2bioz\nwon3306\nklyhbm8284\nklyhbm8282\nkmiway\nrkahfn\nfuzzy0071\nhost99\ngi296admin\ngodomdb\nlds5876\ncorreradmin\ndkdhtl1\nkoolmobile\ncontemporaryartadmin\ni8e1793\ngoodjoin\nasadal031ptn\nplusmro2\nyoohj333\ngodolee\nhaanul\ndtegsecurity\ntantoos1\ndefaultmedia\ndoctoralex\nswordsbear\nitsbetter\nedailyedu\nmolylove002ptn\ndreamco01\ngi390admin\niamyulmo1\nekzktl791\ncncinccart\nbestgul\nneople1111\nsuji57\nwjd66551\nsuhui2\nzillion2\nadart4\npbs0708\nwww.noel\na369002\nguitarnet\nmiljs93\njetaimtr6840\ncapamax\nwww.niko\nmlineshot2\nmatenmall4\nmatenmall2\nmatenmall1\nhjyoo10011\njejusy1\njbiz10\nseventr\nbattery1st1\njcake5\njcake3\nse000000\njcake1\ndktkrhkswnd\ndiy-shop\ncantaur\nvolky2001ptn\ngrayzone\nsty121\nobmilk1\nsskcr8000\nm2skin\nwosung\nyok9900\naudioandvideo\njichun37\njjimin8718\nlsj2307\nubrich\nnesege\nbass5214\nidgodo-039\nbyhemee2\nbyhemee1\nicoco6801\nhawaiiview\nmayzzzang\ncysticfibrosisadmin\nrenewals\nsevenam\njejusc2\njejusc1\nkimjs1004\nhanme10\njajaemadang2\nhitopic8\nhitopic5\nhitopic4\nettyk86\nhsy819\nnts0311\ngodoedu\ncumashoptr\nghshop\nselebean\nalsanis\nzzukbbang\nyjoung1015\nkwongroup1\nrobottap2\nteddylee20102\nshoesbucks\nrjp011\npointbox3\nhoonklee\nwowmin-016\nhoony81111\ncavatina114\ngododev\njoonggobaksa\ndanbistyle\napple18961\nwoqjf073\nwww.moka\nmonoama3\nyounsunhwa\nbnp04171\nicd\njjm4352\nasadal030ptn\nwww.moha\nbestbed\njtouch1\ndummerce1\nminam322\nidgodo-030\ndass8027\nyrsong0629\nrevoice\nrahsy\nyakroad2\nhainok1\nbrandntr6827\nimg43\njinatman1\niplus20\nsungwonr\nfinancialservicesadmin\ns1intextacy\nukdaycareadmin\ncult03tr1408\nyy99008\nbultaewoo\nyy99004\nitmyhope\njane9006\nkaram2491\nimpressbuy\npark0115\nbaramggi\nkimssy1\nwww.nana\nkimtkid\nwaycosmall\nmb1210\ncaptain761\nwerbew1\niluxbotr3041\nmmm365110\nssysts\nhomeworkhelpadmin\nminne1029\nstylencom\ns2pdevsf\nlk1119\nguweb120\nmorin77\ndd19991\nkook7676\ns2pdevnj\nsunme7071\ngoxneul\nmaditis\nray7055\nbabymoov\nonesports\nibbnyani\ns2pdevhn\npgreen\nkwonskwons\nhap6327\nfenixtr5898\ngd2011\nmceshop\nanycompany3\nbestd24\nviewtiflow\ncobaltray\ndoubleyou1\njejukdc\nchoseoni3\nlittdrg\nhgy78872\nasadal010ptn\nsinanto1\nnnwwssgg\nsaibi1\nstcok15tr7777\nseanews\nall100flower\ncheongdam1\nadam59\nbetinfo\ntubularr1\nserverhosting202-114\nbalggorock2\nbalggorock1\ndjkorea7441\nloveottogi\ngodoedu6\nw4cky\ngodoedu5\nguitarand\nbassertr5514\ngodoedu4\ngodoedu3\nhowlattr5838\nccw9812\njiun1115\njs2538301\nsaintyum\nds54527461\nseodoori1\nparautr7082\nshulintr8114\nssyoon\nsun767\ndnzsky\nysj29301\ngcsd33020ptn\nzpzg94\nverylovely1\nbgarlic\nsimplemind\nhappy4049\noikos10041\ngetsworld6\nljk1766\naojoa20087\nbabylucy\nbbiero1224\npeopleutd1\ndunesu4\ntsgim704\nrose76651\nhillstate\nblue95063\nenkai09721\ntopglass\nbagstyle\nhealingsu\nasadal028ptn\nyellowbus\ndndns12065\ndndns12064\ndndns12061\nambassa8\ngodotest-009\ngodotest-008\nmols1441\ngodotest-006\ngodotest-005\ngodotest-004\ngodotest-003\ngodotest-002\ngodotest-001\nmidistation\npris8\npris6\npris5\ntrustfactory\npaintballadmin\npresentbox\nkimna0403\njinstar\nyellowcap\nygftr3693\nkimsiyeon\ndldyd11521\nvivitar\nkonom7772\ncoffeeschool\ninnocnf4\ngoldberry\ndobuddtr7765\natsumare\nnachoi1\njin51774\nsaintvin\nhoya104\nrecsladmin\njejucs2\nabriny\nii1121ii3\nii1121ii2\nwowmin-008\nleo08212\njejucjh\noncarmalltr\nwavlady365\nektelecom\necofoam\nardorwin58768\nsuhank\ndass6598\nwlfjddl4658\nartnworks\nrainbownature\npsd24\nbst8575\nzzz12994\nandishe\nbanzz33\nnightsky23\ns4intsunny\nrock0813\ngodlove\ndhfmrhf125\npiezoprinter\ninlater\njinsori\ngi151admin\nrecon905\ngoho19722\ndressoo2\nnelly741\nwowmin-007\nosteoin\namigyu3\namigyu2\namigyu1\ndahong0704\nontarioswadmin\njoons791\nstylemana\nwww.loco\nfall766\nnewchina21\nfall763\nhappy-art\nphilos11\nenrental159\nsdkcool\na4dc121\ndesign8883\nstylemam1\ndorazl\nsaintsei\nfourwolf\nisme0220\nmuhanbit\ncheongdam-040\ncheongdam-038\ncheongdam-037\ncheongdam-036\ncheongdam-035\ncheongdam-034\ncheongdam-033\ncheongdam-032\ncheongdam-031\ncheongdam-030\ncheongdam-028\ncheongdam-027\ncheongdam-026\ncheongdam-025\ncheongdam-024\ncheongdam-023\ncheongdam-022\ncheongdam-021\ncheongdam-019\ncheongdam-018\ncheongdam-017\ncheongdam-016\ncheongdam-015\ncheongdam-014\ncheongdam-013\ncheongdam-012\ncheongdam-011\ncheongdam-009\ncheongdam-008\ncheongdam-007\ncheongdam-006\ncheongdam-005\ncheongdam-004\ncheongdam-003\ncheongdam-002\ncheongdam-001\njwpresident7\njwpresident6\njwpresident5\njwpresident3\nlixuanyu\nmega-phone\ngoodgown\neframe\notcgreen\nsweetool2\nkagamii\nalus1209\nwww.mass\ntophana2\ncameramart\nwon0321\nallmirae\nlovetemtr\nsgdbswl\nwdong3\nteacera\njaesoox3\nkdsjhr1\nnemoshtr8535\npkdd91112\nego108\nviatc01\njsk12191\nasadal027ptn\nskygksmf22\nkosrhee\nssun5871\nntm21com\nturboap1\nfoot7010\nhhan8258\nbobdodook\nrecon28r\nem8888\njinhak4733\nkdh710105\nseamart\neukwang\nstoymall\ninnocctv\nwom9035\nchcnc11812\nsojubar\nw8883\nbabylife\nmyfashionny\ngaon08087\ngaon08085\ngaon08084\ngaon08083\ngaon08082\napi0011\nmanijoa3\neueverpure\nseamam1\nsandboy2932\nsandboy2931\nvivianco\nheaton\ny63075411\nedennu1\ndodls531\nppori\nfashionflying\ncampingmall\ngabidream\nkkc1206\noznation\njun1003\nuniphoto2\n02ne\nexelone\na88356337\nming4881\nyskaou4\nhandock1052\ngi423admin\ntourplaza\ninnocasa\nsuhkj1103\nkkc1117\nblastmedia1\namishop3\namishop2\ngi174admin\nnanoex532631\ndoo83891\nfanypink2\nfanypink1\neagle216\nmakingsoom2\nfashionwing1\nbelle625\nyaksunfood\nksmanmoon\nandwhite\nthemotor\nblackcat587\ntayajuka\nsagao5\nnzgaza\nlikerockers\nmymarootr\nsmile81\nrollei2\nrollei1\nmeena\nlacida\nle40971\npapero1201\ngptnr1972\nakkidirect\nbodysktr1050\num.exchange\nipayosshop79\ngodo62724\neunhye7521\nwowmin-001\nsmile06\nshuzai.ancienthistory\nbesound\nchoiyh64\ndnels2003\naltaicho\nadosindong\nwyelec\ncdplex\nbread355\njaja6644\nsamtalmo\nilchulphoto\nseodongik\ns3freedevsky\nipet2000\ninyourtr8448\nneokey\nasadal026ptn\nwoozlim2\nhannara352\nnewdate\ndebali76\nseulbi1\nmogait\nsilver6022\ngi90\ndbsrud1013\ns3freedevsdg\npeliculasadmin\nnikesb1\nhealscompany\nnexen211\ncombacom\nlifeedu-020\nlifeedu-018\nlifeedu-017\nlifeedu-016\nlifeedu-015\nlifeedu-014\nlifeedu-013\nhantech21\nlifeedu-011\nlifeedu-009\nlifeedu-008\nlifeedu-007\nlifeedu-006\nlifeedu-005\nlifeedu-004\nlifeedu-003\nlifeedu-002\nlifeedu-001\nsoho10049\nsoho10048\nsoho10047\nsoho10046\nlinkbee1\nsoho10044\nsoho10043\nsoho10042\nsoho10041\nhbglobal1\nthemoons\nsara1929\ngodo62323\nwoogen91\ndogndog\ngardencity2\ngodo12129\npinbantr9179\nnewyorkstory\naltcgotr5936\nyeonsung-029\ncanoncw\nwlstjs0719\nbmw017\nck7914\nyoyoyo80\npic711\nchrissouth\npatmos1\njijh3246001ptn\nheedihee10314\njhk1233\ndagle91141\nwls2gml2\nlyw66851\nsungkunc3\nchengjiyin\nsungkunc1\nisero11\nkisoo202\ngsgtel1\nksj8335\nkototo527\nlatexravie\nsingleparentsadmin\nfeelcom32\nbluebirdie\nsparras\njsl0118\ndlwotjddms1\npool55192\npool55191\nmorenvy\neugene08042\nkal320001\nwhykiki10042\nmomshanger\nub12122\ndamocos\ngi80\njnhyun7\ngigaro\nthglobiz2\nthglobiz1\nwww.josh\nvivid45553\nbabekhj3\nmichaelcue\ndmdwbsp\nneodsn\nkoreabipum\nsm42591\nking0530\ngi291admin\norij792\nmigogallery\nxpeedy\nphdsys\ndoolho\njki0727\nyjinlab\nipaypop365\nwldus0106\nkhalomsky1\ns1intsf\nsandman01261\nwangpanda\nkim39981\nrokmc756\nwww.inti\nromanplus\ns1intnj\ndoor00\ns3freedevman\nmarkantr2453\nsulgaul1\nsjw1978\nsewon6473\ns1inthn\npackingclub\nxixi2113\ncanon4u\nantidotekr\njsk8634\nwww.jeje\nheeinging\nneobob\na77chosh1\nbam12181\nbivouac4\nacegolfball\nhumanpivot1\ndiosoft6\ndiosoft4\ndkwelltr\nmanager20151\nlbwmk1\nbod21c\njihee121\nasadal025ptn\ncapdialog\ncampingjoa1\nipayraonpets\nhprental\nneobay\nipaygiggolaid1\ndasom9205302\ns817067\nonecomm\ncomaider\nflexakorea1\nensceo\nautorepairadmin\ns3freesetuptest\nlowblow3\nlowblow1\nemall246\nemall245\ncasebotr9054\nemall243\nemall242\nbabyjjan\nkayoyon\nintimo85454\nmc8837dj\nijoayo\nsctaix1\ndoogi3\nnuripltr5732\nthekitchen81\njunipi\nsala70-019\nplayer11\nbye365tr1992\nbora2007\nstdadmin\nlunchbell\nsala70-015\njjm0054\nkim39439\nbaesam03\nmadeun1\nwinex1\ntypesafe\nsala70-009\nsadmi2\ndool22\nhskim67672\njdesigncore\ndlawk123\ngoodfarm\nbananashake\nfremd4\nfremd1\nhelena23201\nkangajtr2483\nsamsin34\nsamsin32\nlololokiki\nsonnpark\ncbu1116\nddakjol1\nnemogg\nweldman1\njubilee79\nwww.jane\nsaeang\nthenelim\nmaybe20124\nmaybe20123\nmaybe20122\nyijisuk\nsasari725\nsasari722\ntonicyhg1\neom3338\nhedgrenmall\ngi70\nperf\necobubs\nogbizcom\nskyaa10042\nspacecyk\ndie09070002ptn\nguirin2\nguirin1\nghdtjddus3\nghdtjddus1\nkimjin71672\nthereturn\negfarm\nblacklabelr\nsoodragon\nwlgmlwjd123\njangjs\nunbeaten\nmdowlsm\ngodo60683\nf1corp3\ndepotstar\ndandjik\ncutesarah\ncanadapcs1\njanest\nicw00732\nicw00731\ns4devkthkira\nmadmax2004\njh5679\nmadmax2002\nmadmax2001\ntongbooks\ndyd2978\ninbusfnb\nmariamagic3\neduts2321\njhj8540\nasadal024ptn\nyah02161\neuropeanhistoryadmin\nnoah0202\nmdg37601\noroanreb\ndiana11\njeon200140\njeon200137\nsnjkorea\ngigameta1\nkimos79\nmodish\nparkinsonsadmin\nchsjin10032\nxwidox1\nart92654\nhellosanso\nmiffy3333\nsik9890\ndonho1\ndrinkbeer\nsik9874\nyoujin0927\njams77\ngi59\nfreeng\nfreemo\npatientsadmin\njandl3\njandl2\nmipi2013\nck5995\nwww.hawk\nkangsmwin1\ncwkimchi2\nlilo0607\nmihwanamdae\nnylong\nvampn2n\nkprosen1\njuly2k\njung75\njinoria\nhaja1133\ntlckr1\nsejinwtc1\nja131007\nkittykitty87\nknifeya\njayinlee1\nmentor4733\nunicare0128\nsadbye\ndakeda72\nkaircotr8614\nserverhosting51-131\nygbori\nhanbest51\ninsummer1\nbabyhanbok\nhl49897\nsteven6121\nnoxnemo8\ncbday3651\nwara6133\ncdnews\nsejungkr\nsslegy23111\nandpetr4271\ndcu0048\ns4freeintsdg\ndventure\nen3r145\nen3r144\nen3r143\nen3r142\nwww.speak\nen3r141\nstlink\njohnkasih\nmachambre1\nrochester1\nforestko\npop12061\ndammee1\nwww.girl\ncanadanewsadmin\npdalsoo1\njune26\nogilvy1004\nsunhill7\nsunhill6\nsunhill1\ns3freedevextacy\neth1901\ngolf1217\nacdong\nkwonsiljang2\nhkscietr5240\nroboholic1\nhtk008\nhtk007\nbobp7234\ncoffeekaffa\ndie09070001ptn\npowerntr8846\nacem11\nsportsmedicineadmin\njewelsmk1\njinasong3\nopengodo\nipaydotr7734\njphotelarv\ngi52\nwellooo1\nhillantr6673\ndolsol\ngi50\njhj17493\njhj17491\ntjsdla9910\nknight38x1\nthlove7\nstkong\nkimhokr8\nkimhokr7\njhbyeol\nhappyskintr5755\ntokkippin\ndejigom1\neshoptr4336\nhenaa55\nyohann8711\njalogi\ntechwarm\ntravelgetsladmin\ndolsan\ndolsam\nkoreagoyang\nkkumee\ndanchoo\nasadal023ptn\nneozen21\nimagemaker001ptn\nsls98tg\nvilli0001\nbluepuffin1\nsik9012\nwocns131\nbogoinfo3\nkkamangddi\ngodo286\ngodo285\ngodo284\ncoolio\ngodo283\ngodo282\ngodo281\ngodo280\ngodo278\ngodo277\ngodo276\ncitybean\ngodo274\ngodo273\ngodo272\ngodo271\ngodo269\ngodo268\ngodo267\nwitheuro\ngisu0101\nkumkangsys\njean4utr3831\njinutech1\nmntadmin\nlimecup\nkhd59251\nxv3080\nweast2\nworkscm\ntinypotr0821\nnaegadeok\ngi417admin\njumall\nwellnlife1\nkimjiman751\ndaesaree\ndk440011\nyou1smile\ndaltone\nfarmparktr1557\ndomeup\nplayclay\npgm2392\nsensorline\ngksqjrn\nbusexpress3\nyesoya\nham20302\ngodo58189\nbeaverty22\nhoondosa\nmijung2\nmijung1\nepisode3tr63230\nbicyclecrew1\nunicorn931\ndenty2804\njulies\ndametalk\nouoii\nchuliz001ptn\nolivedeco\nflowera1051\necobebe\nqhdtjr992\npmeng\nbunnyttr1826\nhappytool\nsunsun03303\nchan05173\nchan05172\nsaprada\ntmpdns253-240\nrealmack\nhsfood2\nhsfood1\nbbss31882\nokyoulove2\nsosjj777\nonebase\nkss1590\nmscctv1983\nlaniboutique\ndfsdfsfds\ncctvsi\nrurunrun\nkswlove\npm-korea\ncookie1\nsean0jr\nssspot\nbebeclara\nskitripsadmin\nwww.dusk\nartskin5\nccumim\nyellow0o1\necocandle\ndingorio2\nactionman\nsangsang5142\nsangsang5141\nssang10055\nssang10054\ndomall\nyoyang1\ngi168admin\nchoqueen60\nminjoo5779\nrlagkstn0513\nbaram222\nipayoneulthe1\nopengodo27\ndoljip\nbluemong7\nbluemong2\nrainskiss\ncoolman676\ncsl03984\npnj1205\nkorviet\nchenhyesam1\nyeskin\ntt808022\nyesjoy\ntt808016\ncyj092\nstoryweb\nasadal022ptn\nstorywax\nskinmell6\nghgo007\nskinmell2\nskinmell1\nsports1004\nsean394\ngogomay2\nace5395\nem4013\nwww.fast\nwww.dota\nftsound\nstkcom\ndnjsen2011\ndome24\nbabybombom22\ndrimpeople3\ndrimpeople2\nvhcjsglftm1\nwww.dodo\njukkee\nhobolee\nwww.edge\nojoagency\nspdkorea2\ngetmind19\nondino1\nglamfit1\nbowlingadmin\nheybread\nirenecompany2\nshopready\nthreesisters\nzzuujjoo4\nmarinesea15\nzzuujjoo2\nzzuujjoo1\nmori009\nc11c\ncyawny\ngodo57164\nget2get\nshin1687\nhaze10042\nfitchnlux\nnowparis6\npeoplepet1\npjshpp1\ncozzyup\nseoys09032\naidlman\notoo6\notoo2\notoo1\ndoldol\nqud5482\nsappira\nallga0051\nwooddanjo\nsssils\nhooncom1\necopiety\ndbswls2087\nsanjunghosu\nenamoossl3\nenamoossl2\nhskime\ndanbee1\nbeantrtr9889\nmaya009\nminji5\nlumenled\nprime1233\nendxldnjs\nx2tank\nkwg24241\nmcoamall2\nmcoamall1\nneulchan\nunionpettr\nhiendcable\nkmansu\nscrooji\nbikon4u2\nosung\niemmedia\ndltkdgns6\nnoodleroad\ndamisoo\npooh11291\njuju24\nskywow7\nzaikan2\nplusditr5407\nwheemory1\nkdjmhh002ptn\njudas5802\nw3344\nwithdoll\nextrimer0303\nanna12211\nhuhu082\nhnarutr6952\nkeviinimi\ncruiizy\nbouncing7\ndnphoto\nlimcha1\notjoa\ncocoritt11\nkaymix7\nfishingart6\nhikorean\nfishingart1\ngoodbest\nqkraudwl\nvaluti3\npolypix\nasadal021ptn\nbreezecoffee2\nsmardi\ndalsik1\ngudwls6572\nkindcom\nk680722\nyooeukim\nbeanshightr\ngi41\nossco\notime\nkmall2\nmailuzza\njinikkoo\nluxurygroup3\nluxurygroup2\naway55\nhaaa8113\nhnfarm2007\ngarryong1\nkitels13\nbonnietr0255\nadilike\nlgnuritr0797\nagatory\ndigitalsalad\nmonickim3\ndoffltm\nmonickim1\ndypower\nrockenespanoladmin\nosj04041\ndanagga\njinying777\nzzana9991\njinilamp\njucibel22\nbt2924\nfisharp\nblnk5959\nkoreabeko1\nysun9201\ntastec1022\ngolugolu2\nhskart\nrjacob\nysun9149\naustech1\nmagicmode4\nsooldoga1\nnenno0701\nwk0916\nxtrongolf2\nwww.crew\ntlc20122\ntlc20121\nzelkova04\nkwc1130\negbecs\nable88\nwnx11282\ngsfantasy\ndawoosf1\nskywin3\nlwinkl\ndhfl44442\ndhfl44441\ns2pintkthkira\nst06071\nroadstter\nhshs0925\njanggabang\npizzer4\nitingroup\nnaviro3\nnaviro2\nnaviro1\nsoulani3\ngi40\ndaejinkorea\njikyjeon49\nzetmin005ptn\nsharpkwon3\nya7897\njikyjeon38\nmoacom\njikyjeon35\nchoish82\njaeheeya2\nwoodytop\nkoran7201\noosame\njikyjeon29\ndkfdkqhsl\nubigeo\nrussellkwon1\nkdy8412-039\nforeverkdy123\nforeverkdy122\nforeverkdy121\nkdjmhh001ptn\nideakeyword\ncgnflower\nshsports\ndjdj49182\nyonex2013\nskyteam7\nskyteam4\njikyjeon19\nkdy8412-029\njikyjeon18\nchamzoun\nwww.creo\ndmarktr3569\nmnijsj\nsteng18\ngameswtr0311\ndang119\nkdy8412-020\nrusyowner1\ngivesoul8\ngivesoul7\ngivesoul1\ngodo55503\nasadal019ptn\nenamooself\ncho39272\ncho39271\nmovenations2\ndjs0210\ntop4556\ndex0562\nikin0704-009\nikin0704-008\nikin0704-007\nikin0704-006\nikin0704-005\nikin0704-004\nikin0704-003\nikin0704-002\nikin0704-001\nnicecd386\ntonydani\ntrauma1\nmisubaok\noiio192\nmichael941\nminworam1\ndkco113\ndal\nnavicnctr\ndhc\njjektg1\nddilbong21\nyhstop-027\nyhstop-026\nk7176k\nyhstop-024\nyhstop-023\nfaholo771\nyhstop-021\nyhstop-019\nyhstop-018\nksbtech\nyhstop-016\nyhstop-015\nyhstop-014\nyhstop-013\nyhstop-012\nyhstop-011\nyhstop-009\nyhstop-008\nyhstop-007\nyhstop-006\nyhstop-005\nyhstop-004\nyhstop-003\nyhstop-002\nyhstop-001\nikai99\nvs63001\ngodogodo-043\npippi\nwww908\nhooni003\nmikimsh\nmanguluv\ndonamona\noshea\nkimjua1\nnabimom\nafak\nguinea1\njuslisen818\nrety58582\nprebebe1\nesosi712\nesosi711\nesosi710\nsentikim76\nmother2328\ntaesanceo\nmikimjh\nsema2000\ndietcoffee1\nwishpot881\nwhitepsm01\nths4750\nhappyotr4976\niisaka\ntnsckd7\nprety0717\ndo20002\nprettypop1111\nmujuwine\nblindview\nmlk1225\nmk81758\nmchat\nys0831-018\nhiplus1\nartemis2009\nlucy172\nj700102\nwolf33403\ndakyung\nsweetie87\nahmi\nvvoo1231\neunijung3\nribbonandtie\ndflex001ptn\nneuroscienceadmin\noliveadam\nmiiinotr0932\ndldmswjd68\ngodo54840\nkim90223\nbmkc01\ngeunsill2\ngeunsill1\neyestar2012\ndebak729\ngo1224\nepopdesign2\nepopdesign1\nsz9008\nben-bat.co.kr\nquad48131\nzetmin004ptn\nsoung0305\ngoddnr1\nknpc2\ns4devsunny\nartrecipe2\nmilitarycontractadmin\nsunrisejr1\ntelecomindustryadmin\nis04211\nmmisuk18\nmmisuk16\nmmisuk15\nusmania\nyoyumheni2\nsalomon4\ndoriskin-v4\ns4setuptest\nnks0081\nys0831-010\nsilverbest1\ngo0921\ndaesintr2934\nbluecabin2\njaehong664\njaehong663\nkirinkyg7\nkirinkyg2\npddental\nsunrisein2\naljjaman25\nkmsjgr77\nappu\niidooltr1903\nchiropracticadmin\ntoilet1\njinklim\npollutionadmin\nsangsang2013\nwww.host2\njetsky82\nvivajenny\ni2r0251\nelibrary1969\nasadal018ptn\nasluxe7814\ndoozycom1\nbooksell\ncanh\nharamdnd\nmbc70951\ntrue0420\nkimiart1\nbok32621\nsugunbank\nqaact\ns68221431\nwkzid\ngoodjob857\nneo152\njunopark1\nanigraph1\nbyun1747\nys0831-001\njaesheen\ncitypet\nsanshoenco\nbabycrew\nkosint1\ngodo54263\ndaon7179\ngainstory\ndoggebe\nmook1030\nsunhye03224\na2core1\nwara1231\nluxian1\nimsli72\nbanchado4\nsejinsign\nmingallerytr2885\nwinnerface898\nwinnerface897\nwinnerface896\nkoreanfoodadmin\nwinnerface895\ncete\nwinnerface894\nwinnerface893\ngo0412\nwgroupe2\nhyuna2003\nyl7732\nbyte011\nhyunminco\nbabycong\ntubepink\ngi29\nduchi77021\nplusjean1\no3ozz6\nkym58062\ndew8100\nzhenyi1\nrealvtr\nhide7674\ngirllovers5\ngirllovers2\nmulkibel4\nhd967234\nroadstar1\nproonan29\nmdc0815\nytotodau\nromiaril7\nennoble\nlaverhan\nwbkorea5\nwbkorea3\nggonara\nhsystem\nyowonil\nlafirst3\nsiyeong25\nsiyeong23\nsiyeong22\nxotjd05237\nxotjd05236\nxotjd05235\nxotjd05231\nsngriver\nxeroxclub1\nheartbeats1\nlast1020\ngenfa09\nluxhera\nsungoltr7233\nnose1727\nhyuna01241\nholybride\ndudeo222\nbngdss79\nleeseo23221\nskytool\nkim33003\nedailyedu12\nmaizon1144\npantocrator\ncraft42\nhjn26242\nenenfjsl\ndaedongsound\nkenj5522\nwoodchang\nmaniacsh3\nmaniacsh1\nddong5626\nwisekids\njapson08\nmir0017\nyejin0707\nmir0015\nauri22\ndfellas6\nflow0479\nwww.cias\nvuelistr9567\nasadal017ptn\nssono2\nssono1\ncampingclub\nhaseo52121\nkchair2\nkchair1\nwithanew\ndeeb\nhjyoo1001\nuchanee1\nyeoily\nxgear0072\neunyicha\nnear10042\njtouch\nmahatma3\nmahatma2\nmahatma1\nyhbloveshy2\nyhbloveshy1\nkimji86\nkgoodtime1\nsbdesign001ptn\ndfsl\nnaviclean\ngreat8401\njkw1915\nbsm07094\nphilippapai1\nthemsel3315\nkjk1331\ndldms0520\nkikibibib\nluxhanu\nsweetple\ncjangcho\nrcskytr\ngshawon\ndoheup\nmyr11111\ndullymt\nnkkomom\nsweetool\nprince3022\nprince3021\ns4devextacy\nleesedesign1\nideaaudition\napplephd\nresinok1\nfantastix1\nhemeelhome1\nmarom19\non32201186\ncabbage23\njihyukbae13\nseconddress\nsharpay1\nsunfung1\ndiybatr2427\nsbgs221\navgood\nljhon00\nkudos\nrealnut\njuese11\nleebrkorea1\nsszang00\ndslrstore\nmaintopv4\nblack17071\ndkwl486\nys27254\ncampingchon\nmmoody\nsddw1234\nbivouac\nuspalmtr0409\nzeus9941\nflexakorea\nopenhub\nglorygagu\nlovelyhangs\nwizard082\narchi5u\nhelena2320\nsmdesign1\norb52\nwarmoviesadmin\nh4ck3r\njagang3\nbytimerobe\nsyg2013\nisunghun\nrnddevsnu\ne10014\nlsh8232\nzetmin002ptn\nhueplus1\nluxmgz\nthunderants\nkwave817\nghghss\nqlss481\nwithskin1\npculture\ngi28\naceshotr1593\ncnc7051\nsoltolove\nonmysky022\nonmysky021\nccotti\nfoxred\npride6733\nboriflower\ndairyfreecookingadmin\nhukaura1\nfabulousfall\nmidorock1\ndhdsifl2\nkapuccino2\nchoianne-025\nchoianne-024\nmediacareersadmin\nchoianne-023\nchoianne-022\nchoianne-021\nchoianne-019\nchoianne-018\nchoianne-017\nchoianne-016\nchoianne-015\nchoianne-014\nchoianne-013\nchoianne-012\napplejoy\nchoianne-009\nchoianne-008\nchoianne-007\nchoianne-006\nchoianne-005\nchoianne-004\nchoianne-003\nchoianne-002\nchoianne-001\nganghun1\nwowzip6\nsoccerbridge\njsspace63\nactioni2\njsspace61\nasadal016ptn\nd-station\nwlfmddl8\ntreestory\nliverpoolkp\ndonakim1\nsunbeltkorea2\nlyncxmpp\ntlc2012\neunsajang\ntyjjang4\naquagarden\nccopain1\ngalaxy101\nsgi3162\nitspoptr1978\nijeshop\nplatinumid1\njeong2012\nalsp0124\ncbk73762\nnakwontr9317\never51685\never51683\nyesthink\nsiyangx\nwww.atom\nggomse\nkimiart\nnaturenbio13\njunopark\nhsgagu1\neuro7961\nhyunju79486\nvavagirl2\nbachstyle1\nmodavintageadmin\ngadangel1\nlsj94102\nhitenbike\ngi24\nhyuna0124\ntrianni5\nssmug1\ngogofree\npeoples12\nsoundplusltdtr\nforencos\ndmonline\nmoney8tr5198\nopenme\ninonos007ptn\ngi21\nggos38\nefolium10\npondomtr2582\ngn7420\nez14174\nez14173\nefolium9\nefolium8\nefolium7\nefolium6\nefolium5\nefolium4\nefolium3\nefolium2\nefolium1\nilmare1130\nvanac76\nflexpower1\nneepac\nneopicnic\nidabank\nfinefactory3\nkosfun1\nsweeteel\nucc106\nhanaro8555\ncarsin101044\nkkohh1\nrobomarket\nyainsim\nkjh700s1\nipayprimrose0021\nmisoarttr\ntkfka0072\nsususu90\nskateboardadmin\nryuit76\ntobeemom8\nlime111\nezerop\ngasaraki\nzetmin001ptn\nlighting10\ngoldenbridge2\nzzuujjoo3\ntgajet4\nrealdie\nalltoskin\nprmydream\nmypett2\nsensegood4\noemparts2\nextremezone\nmintcard\njoyplus0503\nyupkimania\nmetropia\npgapi\nsy4989\ngi20\nlulu1012\nonsmi\nmokjang114\nasadal015ptn\nmhk24912\nndesign739\nhaneul0066\ntny0566\nndesign731\ngoargentinaadmin\npyj3037\nethiopiabet1\nspxkorea\nmine4sw3\nsamjin5468\nvmdlee\nrosecold\ndamibears1\nryuiji1\ndiamond4c\nflowernate3\nditng21\nbittyboy1\nwww.anna\nss2inc3\nssa1092\nopen24\nsbas\nbokbunja80\nidgodo-037\nnagakig2\nnagakig1\nmyoung5383\njam0900\nkekeker1\nmsgr4404\ndbgudwns79\njhj0315\ntjsl901119\nxyclx0124\nksing007\nkeptto001ptn\nsupguy2\npartycs\nidgodo-019\nkimsil725\nsongchang\njswjam\nkdjmhh8\nyhs5011\natma2012\nssyu78522\nabm111\nidgodo-010\nluxeinc\ninonos006ptn\nww1172\nxebec751\njnlbath1\nyuhwa82\no3obbb\npetitchou828\ndivedicehd1\nwww.bell\nhyun8055\ndhflrndl777\nedugodo-060\ndosox2n1\nedugodo-057\nvintagecity\nmoblue3\nonemind08\numakemefeel\nfoxart\ngodo50899\nnamikim0105\nstar38404\nedugodo-049\nsinji2006\ndam2\nfoxbed\nezziroo\nphotojoony2\nsincez2\npjy3588\nmjsmile1\nedugodo-039\ndatastop\njojia691\nwshuztr\nidc0600\nfstyletr3005\njewelleaf\nebeds4957\nseven0770\navenca\nkhk881206\nedugodo-029\ncozyshtr2117\nshinbi921\nluxem23\nmorowind\nkhs535-007\nbaraba123\ngodo50707\ngodo50706\nchbh44\nkimgh29711\nlime1111\nucnehandwork1\nedugodo-021\ngi95admin\nonijuka771\nedugodo-020\nqowognl1\ngaphoto1\ndkfqlsh9\nwww.test1234\ndkfqlsh8\ndkfqlsh7\neunsun272\neunsun271\ndkfqlsh2\nenvylook3\ntkcomm\ngonde2002\nfinival\nmdhsl898\nleesr82\ncafeyteadmin\njuapage\nbstation\ngi285admin\nle8015002ptn\nonkid\nhyuantr0976\nnamhunzz1\nsouthernfoodadmin\nccocca\npondaiso\nsweetdeco\nonurie\npartsda\nsweetclub\nasadal014ptn\nhic24851\nesom85301\njoin2020\nkbsok7788\nuschool1\nheyman\ncnc4721\ns2freedevsunny\nclinique706\nclinique702\ndavin1322\nbumdagu3\nluckysman2\nluckysman1\njdy8591\nshoppingtong2\nlsangi1\nsmcis82822\nsmcis82821\nlovejini123\nlore794\nmkmk514\nsportsabctr\nuossifesoom1\nyemac1\nezdog1\npetiteadmin\ngrc1000\ngvtgswa\npoll75821\nbosongyi\nipaymymoongchi\nbau6392\njaehwy1tr\ncastro77\nseberuse1\nsterniqeq1\nmt4877\ncpb56013\nwoodtory\ncns20101\nsskssg\nacampitr9136\njudikr\nkangluck\ndesignbook5\nsevenmarket\nkks3ho\nexweb6\ninonos005ptn\nhikaru16161\ngodo50141\nssmall\nlavier\ndodu11\ngoldwell\nsporting1\nbeemer76\nhebron212\nhebron211\nseie5687-090\npeeps\nfish153\nsojusocool\nseie5687-088\nssline\nnwwkira\nmmkww5\nsoyoyou\nlapis2\no2vill\nseie5687-087\nmyhottopses12\nany77any771\ncamnara\nyouuyouu2\ns3devkthkira\nsinjukushop10\ngordie\nbonafarm\nfamenity\nsticketr3548\nimpmediatr\nchrisroh15\njacpum\n33store\nzorim922\nedutps\nwww.acer\ns99320671\nnaturei\nwww.abcd\npatchnaratr\nluj4926\nhelmet114tr\nhangilsemi1\nkast\naange1\nponbada\nhobbang0083\ncbwcom\ngodo48694\ndongin991\npeco2\nnutra\nsapin01\nhyun6651\ngodo48659\ngkrthd20\nrealcore\nvbsoma-012\nhbshop2\nrisingsu1\nsoapsadmin\nleeztyle1\nlaunel\npyj1210\nthdgml8652\nanthropologyadmin\ndlfgns316\nkgt18851\npolishlove1\nkobacco4\nkobacco3\nunstudied\nterra63\nnaturalcat\nkerz\njwckong3\nssknit\ndamchon\nasadal013ptn\nzoominmall\nhy-mtb\npgbrl1\nwww.landscape\nfabrica7202\ndodo34\nwxya2\nnaturalall\nfishworld\ndodo12\npatapum\nstarphone\ndownunderugg\nmyeston\nnonsul5\nedupod\natomicsnow\nedutige1\nkaymix002ptn\npsh77701\nxpxltm95\nningstar84\nbusinessinsureadmin\npetpig\nlcyregina2\nlcyregina1\nkwons219\nrkdrn209\ncolorbaduk\nrick83\nany4952\nboardya1\nmusicforum\npjaeoh10\nkwons169\ngaegoory\nqlsxlwl1208\nipayplaye\nrui61781tr\ntrinity001\ngameindustryadmin\nmarley81\ngodo48234\nplaystationadmin\nchangmo20se4\nfujiara\nohowow2\nuna72331\nkwons111\nkklikk\nsktworld\ninonos004ptn\nrksrnajf2\nyogobara1\nps4youkr\nstarus\nforestpeople\nriccio\ngrandparentsadmin\nlux07111\nkimdy21\nfeeltex2\nwelskin1\nfeelingyou\nimbak1\nmac20022\nmklee11291\nsunyata\nhongsamfirst\nozflower\ncandytoy\nbuynz0019\nchunsoul\nstarie\nzeropark\njkcho0405\njimmye4\njimmye3\nyykaze\nhytelecom2\napmglobal\nisaiah43211\npcne2\nhsj001\nhsyimjit4\njade86\nnextnm7\nrose3237\njgbros12\nkillwyj\nmomcook\nduckbill001ptn\ns2fssetuptest\nmmlee2\nammanara\nnstar22\nzyoonliving\nphoneplaza3\nphoneplaza2\nironhytr3789\njoyplus05031\nmungbean1\nkubi\ngi232admin\nimjajatr0379\nminetree002ptn\ncih3385\nidsoon2\nhan8851\nmjss8077\nenjgroup\ny4dot2\neprelease\nsssch3111\nos21c\nseie5687-050\neruzaming23\nroori\nolitt\nfophidden1\nsuperface03\njmrho777\nasadal012ptn\nmypumpkin\neduhoc\ngodo47457\noksem\nbebecare2\nbebecare1\nchunrun1\nyupkimania2\nassets.team\njielkumsok3\njielkumsok2\njielkumsok1\nprofootballadmin\njeinobi\ndode81\nikdesign\ns2fsselfrelease\nhoodia\nboardpan\nolies\ndocglo\nnoeyedeer2\nyejin2\nyejin1\nmp100\nkaymix001ptn\nneoeyen\nyoyomaha\nula5959\nbigdookim2\nnab3\nlastem\nhssohn74\nembarazoypartoadmin\nengdevadmin\nrianfn\nmilc\nboardmtr\nligkorea\nbookookm1\nthiscore1\npeoplefood\nvogcody\nezauto\nokpkr\ncapzzang\nlollypop1\npeterc\nthaitantawan\nydy810\ndnjswjd5236\ninonos003ptn\nironstory\ncdbox1\nhsy9988234\nyoudong50081\nbluecomfort\nhoony2718\nyounga1727\ngi412admin\npearpeach1\nonsnap\nchoijmjy\nvistyle\njadegreen1\nfreshia1\nhseok95\nlaceplaza\ngenetichong2\ngenetichong1\ncbs09581\ncj3651\ngangdoo1\n499645059\nddalgibebe\nscaniakr01\nhrdiary3\nrkrxm87\ndbcity3\npje0802\nheraenglish\nqkqhrlwls1\ndigisys1\nngatetr7925\nwww.todogratis\npreppy1\nhohomimi\npgl1004\nziyegatr1791\nqkfka910\npje0708\ntojongdac\nezbike\ncssh1903\nsandletr2160\nforic7905\nbbo06262\nplscompany\nsungyeon17\nfree2fly\nminetree001ptn\niiiyep\ndoath1\njiin20111\nwebnaeil\nmokjang1141\npomie84\noojjdd\ncriss2879\nheynamu1\nqhrdmsgk\ntopnotch1\nsafetytr4987\nnstal\nkjkorea11\nasadal011ptn\nluxsketch\ndobidu\nsang24601\nceleborn2\njamesf9h\nhyun4441\njmg21402\ncrash0507\ndojangtr3313\nssimmi\nshnjs08111\nyhm1999\nssing7\nhhk7092\nrealbean\nmaisonparis1\njsskjh\nds49799\nlovelyweb3\nds49797\nlch280\nds49794\nds49793\ncyd0609\ncaselogic1\nsodasoo021\nkimhaozhe2\nkimhaozhe1\ndbwjdgkfaja1\nmufc\nargirael\npsports\nhappyngo8282\ntattooing2\ntattooing1\nleftory\ngodo46260\nfoxeye2\nckrheetr6079\ndamam13\nsportstr4798\neratoint5\neratoint4\nsuhan253\nbogsili\ncvsoft\nyajambo\nofficegem\npch0691\ngain251\ninonos002ptn\nluxbaby\nenamoofreefix\nnatto001\nanjn3030\niikala\nsesoft1\njijh3246002ptn\npyj30373\npyj30372\npyj30371\nsuhan116\nimfact0508\nrefresh11\nlonsomeyez10\nhairi1\nretonar\nsustainabilityadmin\nen3f121\ninsami331\nehgud7641\nsjkyong2\nsslweb4\nhaesung08\npoongcha\nmineralco\nvvmmvv888\ngagyo21\npalus\ngoldenage\nmahamalltr\nmodenjeju1\ninsamcall\nvenceremos\nwww.mirrors\ngi59admin\nlondonmob\nbraceinfo2\nwww.excellence\nramin\noemattr3699\nwoodstory1\nbuddhai6\nhnnature\ngsme6\nanxhfptr7954\nthemaker\ngsphonak\nspnskorea\nsaladin006\nxniea4\nxniea2\npafc\njw23891\nthefaith\noopsmimi1\ns3803972\nheechany762\nljcompany2\njmadang\nlpmusic\nuittum4\nuittum3\nbmhouse2\nmajiyabe2\ndongjinds001ptn\nro1003\nrlatjdwn77\nnydmarket1\njssdr1\njsy521\nkafa421\npcko\nkimck77\nofficebay\nhuisoonn\nguweb119\nguweb118\nguweb117\niknow214\nmcyama1\ngodomantis\nsmh45641\nindiplus2\nasadal009ptn\nlookyweb\nserverhosting202-104\npm1023\nsshms2\nwww.sid\nggo9ma\ntaesongf\nl2zone1\ncbsint\nsshnad\njinimage101\ngodo144957\nmeetain\nchoihw21\njindam1\ncollaman1\nicamp4tr7977\nkjkgis014\nkbncomputer-030\ndaisymom\nkbncomputer-027\ndonadona\ncjlim11\nmcloud8642\ncanarywharf3\ncanarywharf2\nlilalim\nkbncomputer-019\ngi163admin\nhymtbold\nlay123\nnarangbu\nnewman60\nsemir0615\nleejiyea54181\nbbliving2\nrlawls01\nkbncomputer-012\nchoo9646\ninonos001ptn\neshoptr4777\nkbncomputer-010\nkenzpeople\nsohojob10\negw8191\nhyun2981\nsophi77\nadamas29\ntwinkleahn\nbsretail\nsuomi37\nnggift9\nnggift8\nnggift7\nnggift6\nnggift5\nnggift4\nnggift3\nnggift2\noliveppo11\nhyun2918\nsyncbird\ngodo44923\nshmedia\nkoongstr3115\nsso119\nsk05843\nsk05842\nbychance486\nsidecom\nisecetr\nanglicanismadmin\nart1gagu\nbabybabar\njusihyeon87\nvpn2gadmin\nonchang\ngodoid-026\nblingi\nansadon\nbabi03191\ndepressionadmin\ninglesina\nhitodachi2\nwww.ebusiness\nshpark7507\nedworld\nskyanbg2\nhsj80261\npo77701\nchungilfarm2\nwellbeing251\ncoqls10041\neshoptr4437\ntoonlee3\nyehdam\nplannetr9495\npoloo79\napple365\njam09002\nhan5878\njini467\nbikinistore3\nkimshosa1\nmatziptr3159\nhyowon1229\nkangil88\npeniel1004\nkygsan1\nozq8\nhyojoong2\nababyo\nhun4032\nyonexjapan5\nyumidavid\njdy3716\nwembstore\nkimbj89\nf16t1253\nesecretgardentr\nkobuworld\nrisingbike\nfox739\nsalesctr0964\ncoordians\nsb6007\nnadaje\nmijumarket2\np10499\nmarineland\nessvalve\nselebetr5470\ngeographyadmin\ngirlingirl\nfunnkids\nbros90071\nindsystem\nwinstory\njhj03151\ndesig11051\nbrowse012\nsmallfarmadmin\nkimh313\nkoh08111\njinseok120\nlisten007\nherbtrees\nxmore1\nmainpark206\nlhj06203\ndswoodlac\ndobidop3\njjk2943\nbydo82412\nkdy8412-040\nkdy8412-038\nkdy8412-037\nkdy8412-036\nkdy8412-035\nkdy8412-034\nkdy8412-033\nkdy8412-032\nkdy8412-031\nkdy8412-030\nkdy8412-028\nkdy8412-027\nkdy8412-026\nkdy8412-025\nkdy8412-024\nkdy8412-023\nx1x1\nkdy8412-022\nkdy8412-021\nkdy8412-019\nkdy8412-018\nkdy8412-017\nkdy8412-016\nkdy8412-015\nkdy8412-014\nkdy8412-013\nkdy8412-012\nkdy8412-011\nkdy8412-010\nkdy8412-008\nkdy8412-007\npostad.sewing\nkdy8412-006\nkdy8412-005\nkdy8412-004\nkdy8412-003\nkdy8412-002\ngi249admin\nkdy8412-001\ndydghksgl\nrma2\nhipgirtr3630\nlaw924\ngolden1295\npeplus\nkaybes1\ndsspotr2418\npolobox\neraecorp\nidsky11\nlkdc3535\nhalifaxadmin\nihkim20004\nihkim20003\nheenam71\nihkim20001\nmascara1\nsoso0808\nohseungkon2\nfmricetr3811\nwkdeo860521\nhiona08\nforce1\nchammidia\natomyctr7292\nbookssladmin\njinee47861\nalpo801\naljjaman\nwoolungnar\nsems\ntear3218\njinho781\nakswkehf1\nmomoihome\nohstylishe1\ndhtown54373\nacecounter\nkkhgh1\nibikeboy\ncotorro1\njeilad2\nipuhaha1\ndesignarts3\nwiso811\nkjmoon973\nsunsim09062\nrooz\njwellday1\nchamsallee1\nghkdvy11\natree3\nmiiragi\nspace876712\nkkang732\ngi90admin\nsaokkum\nspacehs\noohjuwon1\nslow2go21\nkjhmisope2\nkjhmisope1\nhellomaniatr\nndmshop\ngi279admin\nhustler2011\ncasadela\nguide25\nallergiessladmin\nwowzip2\nalicekids124150\nkkhk11\narawon10\nzeus1592\nid410041\nme10921\nreactiv\nmsleesh663\nparpado\nskinhappygeo\nyeetj1\nasadal007ptn\ntlstmdxor772\npon2mart1\npolishes1\nfree5566\nnudienara\nziopack\nkoy0829\nwww.musicman\ntroikakoreatr\nqlqushs\nsmallej2\nartzero\nk1984321\nhotstk5\nhotstk2\nth485001\nm1544tr1530\nnprn1\ntoggi021\ndatamove\nsoh21832\nkjnd1218\ncherryheel\nhotsso6\ncalla7tr9299\nkrr0516\nselandshop\nyj55755\nnanumfood\nwoodmarkers\npowermtr4204\ngm8579\nkjw190\nautomobilesadmin\nbyul9651\nscandinavianfoodadmin\ncjstkek24\nsilvers\nhdmarket\npaganwiccanadmin\ngoblin1\nbangsuk\ngreenmoa884\ngreenmoa883\nnewsnetr8213\njasmine925\ninmigracionadmin\nplus67021\ncontrolman\ngrace60232\ngrace60231\njwckong2\npetsland\nhyun0987\nyuyichoi\nohero\ncnsgh338\ncnsgh337\ncnsgh336\ncnsgh335\nhyun100p\ncnsgh333\nyoungsuhp\nhheawon\ntuning1\nsurgery13\nsurgery12\nsurgery11\nsurgery10\nmojomall1\nms7675\nyiminhee\ntworld2\nonemulti\nomycom\nthesuptr7962\nacemodel2\nphonia3\nphonia2\nlowercholesteroladmin\ntpghk05311\nnsnyc39792\nvino62001\nm1m3y3\nenamoofree\nmarylennox\nbomul90009\ntworing\nnaver062\nlovesjeong\nspdhalsxm\nepqa\ndudcosp2\nzeus0705\nluv4tion1\nm897189712\nbicyclingadmin\nneoeurtr9209\nfndkorea\npersent991\nmvadmin\ncastleb1\ngodo42593\ncompnet991\npoongwoontr\nhhhjjjkkk\nberenice07\ntesas77\nhipark7\nxuxgirl1\nlaciel1\nluckylady\nleezipp\nmalzahar\njayunmart\nfunfromfun2\ngi406admin\ncomtachi\nmirsystem\nnacaoo882\nnacaoo881\nt-pani\nasadal006ptn\nyuhwa821\ntaekyupark\nwww.tam\npinkjjunga1\nkomsunni\nskykeep\ngodo15tr8668\nmoonoogi1\ngodo42440\ngame19653\nsarlira2\nksh8579\nmikibonbon1\nkimsuk3181\nnaebrotr0181\nbank88521\nghayour\nbubbleangel1\nwoodnice\naaa9470\nbianzai\nangeloarte\nezmrotr0665\ndsamples2\ngodo42315\nefreeworld\ntaemiwon44\nfirstblush\nchamvium\nsupaek1\nahjun7111\nhadesway\nalphain\ndlqnsl183\nquffl0613\ngranty\nmoguchonlove\nhanih70\ngomsoman\nsanubis\ngodo42184\nlifeyotr9845\nlongdown1\navenue5\ngulbiwon\nljh8354\nkiansha1\njhcho845\njhcho844\ncostcomarket\nkrepis\nrichkor1\npenmoa\njsmysh\nwww.dcs\ntileart3\nljh8240\ns3intsf\nnonno21\naboutshoe\nzzi33tr\nnonno10\nhsd123\ns3intnj\nheliosji\nkiss9035\ndayoun01\njinyunung\nwww.cmd\nimarketing019ptn\nrany0111\ngofla0101\njhh9866\nkjunggu1\nyeecya\nseezytank\njw20122\nmydiy\nitemssada\nmydiw\neyetag\nimarketing059ptn\nkck33371\nfpfp88\ndsfashion\nceycey801\nkn19051\nhh119tr8019\nannesattic\nwjdwldnjs\ngodoshare2\ngi157admin\nhan2963\ncypark113\ncypark111\nwww.sdi\nthekoitr\nlemonttt2\nbluelink5\nwkahd25\ndshuni5\ngodobackup\ndshuni3\nlannen\nojy5220\ningpp7488\nkorezon\nrexbattr5147\nyecstr\nconceptsmith\nchummy1004\nkjh6312581\nms6336\njpspace3\nmanna2641\ngodoedu49\nvitrosports2\nysm5208\nsomangmalltr\nrheeys\nkdw8881\nasadal005ptn\nninja781\ndltjdwn682\nisensemom11\nhiv2000\nwshoesj\nsojabon\ndivoff82\ncnb5709\nmailike1\nbngcenter\ngodo41390\nonlyu2\nonlyu1\nflag119tr6840\nwww.susan\nogemma3\nogemma2\nsohometr1208\nsunheealsk\nkadian2\nkn35403041\njubangtr5297\ncubesetuptest\nbenrokorea1\nbible4ne1\nemliving\neyelux\nneedss1\nohjoojoo\nhsc345\nfoodkk\nlenmonglass\nwowbizbiz\nlucea64462\ncbj6503\ns3inthn\ndgdg00251\nthepottr4429\neugenephi\nlshyun0202\nvpop\nbathroomsadmin\nwoorihanwoo\nizzle365\napplebarista1\njoy8334\nmoongkl\neugeneph2\neugeneph1\nrongee1990\nalicatr0439\nipaychaesowa1\ntoycorea\nyoung23391\ndddog91\nmiraicej2\ntinaea\nsundaymarket\nsewingadmin\nwildwolf1\nmmeeok\nzona67\nleeneahn\nminyoung3\ngundamhouse5\ngundamhouse2\niktc55391\naudwls\njoo72421\nevendoztr\nfrankkcl\nchai37461\ngodo39838\nskplastic1\nlubu106\ndajutns\nmarkgolf\nhohohaha\ntawn05252\neoakeka13\neoakeka12\neoakeka11\ncsinfotel\ndna4300\nhelp62ne\nusshotr1632\nchanoj98\njhdigitech1\nipaycarpr0112\nbluelife5\nbluelife3\nvsinv55\nyoun22ya2\nfreshblue2\ndlatmdxo\nlemontr21\nnaiasis2\neballet\nloisemall\nmwj4780\nnoi20133\nnoi20132\nnoart\nmoondal\nmwkim\nds09-trans\nkotak0441\nsb12341\ngkdl1111\nmakyung414\nshs1127\nkyuri231\nlprecord\nneoblume3\njeonjinok-003\njeonjinok-002\njygolftr7526\ndlsrnjs1358\nsunge03145\nsunge03144\nasadal004ptn\nsunge03141\nhjw02273\nfood75\nmomtobee\nyedam2\nkevin9001\nhan1661\nsoocol83\njstephanie\nleoncafe1\nartrxtr7959\ntpy8297\nwww.gamerevolution\ncamel76\npcstop1\nhalu0815\ntrysunny\nmideastfoodadmin\ngeuxer\nfirstwave1\niium242001ptn\nitools.team\ndl3094whgdk\nenjoycoffee1\ntobe70091\ncollahaha\nvilli000\nhkc9711\ndpplaza\nfinalcooo\nphotome1\nmisotrees\ncheung62231\njh2097001\nwww.runescape\nbantdoduk1\nrio20003\ncoffeeseed\nmwfss\nhappytgr\nmvpp9\nmvpp8\nmvpp7\nmvpp6\nclassicalmusicadmin\nmvpp5\nmvpp4\nmvpp3\nmvpp2\nmvpp1\nodysseygolf\narums84\nxn2otr1926\ndanparkb\ndposter\nthinkplus\nidio0121\namban3339\nlune12\neinein1\nfoodplan\nsmframe\npuryhouse\npreist1\nsatelliteadmin\ngodo38991\nqkqh80801\njaesheen1\nidmoontr7517\nkjmo23\nhmk50403\nsooyeoun2\ngobigs3\nrichqueen9\nhanderson\nhealthtr1831\ndiva4789\nlovelypink\nibbeoneh2\ndajung1\npsyche3171\nvision12001ptn\nmoitie701\nminsstory2\nminsstory1\nphotohow\nabator83\ndsand261\ndanchooya\naldhr8212\nparklon\ndeblanche\ndetoxpw1\ngolfbank2\nleexcom\nreddj752\njbd04131\nmaxdm3\nginachoko\nkleeu12\nhwhv981\ncubedevextacy\nhalu0301\ndshuni4\na622dday2\ncohanamalltr\nhan1071\nunicityro\nnarae3943\nexmiki\ntime24\njsj77402\ngochicagoadmin\nmklee74\nmell99381\nhsyhan1\nmkqhouse\njejutrust\nhan1014\nmutu9\nssayer\nnukorea100\nmutu2\nwww.rv\ns1intmimi\naramjo2\ns2fsdevwheeya88\nbonkorea2\nbonkorea1\neverhome1\nfuhrer1\nsantaatr9816\nshin202\njopersie13\nlawncareadmin\nakdlxl3\ngsgtel-020\ngsgtel-018\ngsgtel-017\ngsgtel-016\ngsgtel-015\ngsgtel-014\ngsgtel-013\ngsgtel-012\ngsgtel-011\nlee84352\ngsgtel-008\ngsgtel-007\ngsgtel-006\ngsgtel-005\ngsgtel-004\ngsgtel-003\ngsgtel-002\ngsgtel-001\nufo112381\nasadal003ptn\nespanolsladmin\nsoo8407\nmisan1234\nrmsdud9909\ndiyadmin\naldhrwhgdk\nartgroup21\naaa11\nsugar8080\nredstyle76\nhalloweenadmin\ntanic79\nskyho50461\nelsabyelsa\nsbyung4422\npaanmego\nlovelyone1\nodin3\nmeet202\nnick218kim\nilovetoyz\nautochamp\nhappymax\nluvmary\nwastec\njehomme\ngomdontr6981\nsamyuko\nstudygoon1\nhueyounsun7\nbubblestore\nhueyounsun3\njay4114\nfoby004\nwitcommerce1\nplannetr4111\njini07064\njini07063\njini07062\nsdgvictory\ncoffeetr4517\ndasstr0493\nghdiaka1\ndetoxjoa\ncider4567\nchungchowon\nsmm8277\ntlsgur7551\nna995444\njidomatr5165\nnaragu92\npeakswoods\nstdevw5\nstdevw4\nstdevw3\nstdevw2\nstdevw1\ntaerin333\nns707\nfineyes1\nprintmtr8091\nsamoondoh\nsqube4\ncottoyamyam\nhelinara\nkji5982\nwowman21\nzigprid70\ndkfqlsh10\nlhsmkbs\nfishingart\nquezon11\nrurisnaby1\nartlife6\nartlife1\nbnw3835\nodmaru1\nchoibs76\ntime3040\nsorra777\nmega701\nkoreavi\nwt234561\nhappyho2\ntruebeans\nmn22ang1\nparkj21\nbehaptr0410\ndjawdj55\ndjawdj53\ngi84admin\nbandiac\nbabystown\nstarexon\nkodtsite\nhappyhan\njohn316tr\nwowksk88\neyesrue1\ncocobunny\nnaturalline\ncnb3078\noo0103\nhan0011\nbpktoolpia1\nindi-web141\nindi-web140\nindi-web138\nindi-web137\nindi-web136\nindi-web135\nindi-web134\nindi-web133\nindi-web132\nindi-web131\ngi274admin\nmettlertoledo\nwnaks316\nmukie\naltmedicineadmin\nssanot\nms6204\nevendotr7447\ndmfoodtr0677\noobike\nssanmk\nkaulbach5\nwowhouse2\nseomuho1\noxygenmall\nmega325\nasadal002ptn\ntwomomo\nfilcotr7304\nqkrtmddo\nkarisub3\nkarisub2\nkarisub1\nthemadtr3641\nwww.worldofwarcraft\nyeosinmall1\npoplittle1\ncatsin\ngetpda\nfree0530\nlsd19821\ntundra3\nworldmusicadmin\nrbghks1\neclips1\nssh486\nfourleafs\nmonkeystreet1\nochw1\nkkassi\nleejin120\nkanegi85381\ndesignangle\nsohojob\nssambo\nhsk7005\nedgestory\nkdw5701\noje1990\nedinburghadmin\njayeon4\nagas00705\nmungmung795\nmungmung794\nmungmung793\nmungmung792\nmungmung791\nstdev24\nstdev22\nbandi83\nblackpc-019\nsunyoung\nfahsai2\nblackmoo3\nksana11\nteam3point0\nsooya300\nnajs8412\nsohohub\nksumahu\njhko21c1\nblackpc-009\nwater20201\nle8015001ptn\nshjcy1348\ngogoga121\nmarch03111\nredbb10107\nredbb10106\nredbb10105\narmyinsa1\nyeg777\nblackpc-003\nlxh05121\nndaoom\nsinatrano1\nsusan123\nsusan120\nclassices\nyeonsung-099\nyeonsung-098\nyeonsung-097\nyeonsung-096\nyeonsung-095\nyeonsung-094\npolomin17551\nyeonsung-092\nbigsun38051\nyeonsung-089\njohansoo\nyeonsung-087\nyeonsung-086\nyeonsung-085\nyeonsung-084\nyeonsung-083\nnms2223\nstcok19\nyeonsung-079\nyeonsung-078\nyeonsung-077\nyeonsung-076\nyeonsung-075\nyeonsung-074\nstcok12\npondaiso1\nstcok10\njoyav119\nyeonsung-068\nyeonsung-067\nyeonsung-066\nyeonsung-065\nyeonsung-064\nyeonsung-063\nyeonsung-062\nyeonsung-061\nrgbtable\nyeonsung-058\nyeonsung-057\nyeonsung-056\nyeonsung-055\ndiva2763\nyeonsung-053\nyeonsung-052\nyeonsung-051\nyeonsung-049\nyeonsung-048\nyeonsung-047\nyeonsung-046\njournalismadmin\nyeonsung-045\nyeonsung-044\nyeonsung-043\nyeonsung-042\nyeonsung-041\nyeonsung-039\nyeonsung-038\nyeonsung-037\nyeonsung-036\nyeonsung-035\nyeonsung-034\nyeonsung-033\nyeonsung-032\nyeonsung-031\nwaityo3\nyeonsung-028\nyeonsung-027\nyeonsung-026\nyeonsung-025\nyeonsung-024\nhospitalityadmin\nyeonsung-022\nxross01\nyeonsung-019\nyeonsung-018\nyeonsung-017\nyeonsung-016\ncc112a\nyeonsung-014\nyeonsung-013\nyeonsung-012\nyeonsung-011\nyeonsung-009\nyeonsung-008\nyeonsung-007\nyeonsung-006\nyeonsung-005\nyeonsung-004\nyeonsung-003\nyeonsung-002\nyeonsung-001\ns4freedevmimi\nunomito\nsanorm1\nsiena5958\naid09082\nfire881\ndybox7711\nmattox3\nparis05\nn2comm6\nn2comm5\nn2comm3\nhinokid\neliyuri\nvenusbt\nfish6033\njohnny422\nchildrens8\nwholesee\nluvite7116\nbonnie1988\ntas78335\nmamangtr2075\nbuxtest\nkygwings\nurbanx\nsaemartd2\nleejieuna\ndukgun2\nkarismay\nskinustr\nybmidas\nuiyi007\nnaraetek\njcfl9275\nevenfalltr\nskyreins\nsakeimalltr\nyourlim\nwarmer\nserverhosting254-77\nprojecth\nluxurytraveladmin\nserverhosting254-64\nkhc744601\nserverhosting254-52\nlimsh03045\nserverhosting254-43\nwelpia\nserverhosting254-40\ntodaymall\nserverhosting254-36\nagstore\nxlsh23\nunioutlet\nseatline\nrira10291\nssadoo\ndugotech\nsangsangcat\nomrpro\ngaiazone1\nals24681\nlastlove72\nhyou.co.kr\neconian6\neconian5\njapansladmin\nthsqndud1\ndmi9797\ns1intjonr\nmasus990\ndmmpowtr9582\ns1release\nshyun293\nyouhansol\nqwe912-019\nqwe912-018\nqwe912-017\nin4mal\nqwe912-015\nqwe912-014\nqwe912-013\nqwe912-012\nlsg2646\nqwe912-010\nqwe912-008\nqwe912-007\nqwe912-006\nqwe912-005\nqwe912-004\nqwe912-003\nqwe912-002\nqwe912-001\nds5evj\nshinkangco\nlooz784\nlooz783\nbodybuildingadmin\nbrandsil\nqpit26\naks35351\nmoohyun\nkhmedical\noilotaku\nsalenjoy\nhhoow8585\nparkyuri011\nchaosrever\nbrowsersadmin\nbbsports\nhikingadmin\nveffka\ngi401admin\nvipjuice\nsaerom123\nsketch1993\nhdw112006\ncolumbiascadmin\nstsunwoo\npopcone1\nbanner7963\ngodo36074\ndesignclan002ptn\nhjlee215\njaednr2\nnewromi\ncsy11223\nseomsky2\ncs51311\nxigoldkr21\ngreen4all\naroundtable\nstartac1011\nbelajar\nyoung18284\nshjk10131\nchuri4861\ngagooya\ntammy69\ngnfcorea\nciellove83\nfreeover1\nskanskan4\nhksh012\nfeelidea\nmplay20131\nsannoul\nnongbufarm\nesceramic\nastden\nhomenhouse2\nesfreak3\nbjs1979\nxmidas\ngi152admin\ngmdrmatr3060\nkeiangel1\nwansophonetr\nmalddotr0520\njoyuneed\nmkscho\nkjjcyh\nkangageu\ntommyboard\ntradech\nwook0308\nmanjijak004\nmanjijak003\njinhaney\nluji54\njohnny42\nmindsports\nshuzai.history1900s\nbroadcastnewsadmin\nphotoworld\nnativeamericanhistoryadmin\ncanadahistoryadmin\nadnet8\nyhl1239\nfish1tr2605\nistel0701\nm9927254\ntonature\nclassicfilmadmin\nwldms0105\ncolorparty003ptn\ndasoon222\npink29001ptn\ns3intmimi\ncaster07\nshin971111\ngobekjy\ngomsinne\nflyingtr6350\nluna4781\nsjjwe1212\ndnstars84\ngodo102867\neunjungddal\nmmmjbw6\ngreen9629\nrcd7325\nrevimotr0488\njikukak\njhwa211\nkdonggin\nkhalili\nodedesign001ptn\nraontec\nfloraquilt\nkq1219\npurebounty2\nkdykorea2\nms0921\nhomesuda4\nmiiino1\nozzguitar\nbohwa1124\nloosfly\nyafil72701\nonitstyle\nhataesoo2\nlovejini1231\nlskwoan3\nlh1092\niknew06254\nleatherworks\nasitaka7221\nshaeizzang\ni1127724\nrmfpdlq11\nprintmtr5136\nhydrus86\ncoolchoice\ngojapanadmin\nrhkr51451\nwh9022\nbizydp\ncarone\nyongsanoa\ncaros4\nvisualbasicadmin\ndesignclan001ptn\nseob60139\ndyparttr8149\nsunmi21\nblog131\nblog130\naboobar1\npurplelove1\nwholeart\nchannelpc\neuropankorea\nldm523007\ndamwoori\nvdvctr2705\ncasejo\nvdoffice\ninicis1\nkoj24572\nansholic2\ntimetreehue1\nksh2081\nnbreed\nartrxtr3451\ncome3840\nedev\nasksal2\npensive0042\ncuberental140\nkitweb-019\nkitweb-018\nkitweb-017\nkitweb-016\nkitweb-015\nkitweb-014\nkitweb-013\nkitweb-012\nkitweb-011\nkitweb-009\nkitweb-008\nkitweb-007\nkitweb-006\nkitweb-005\nkitweb-004\nkitweb-003\nkitweb-002\nkitweb-001\nsoung401620\nsengju1937\nbiscuit65\nluview2\nssdiarytr\nyouplus\nrui61781\nnavydew2\nnavydew1\npyungyi\nyesmountaintr\ncppower\nskycomm\ndefenseadmin\nusplus\ndaebbang010\ndiva0427\nhotemeil1\narmssl\ncrsharp\nseie5687-099\nseie5687-098\nseie5687-097\nseie5687-096\nseie5687-095\nseie5687-094\nseie5687-093\nseie5687-092\nseie5687-091\nseie5687-100\nk3d2c33\nk3d2c32\nseie5687-086\nseie5687-085\nseie5687-084\nseie5687-083\nseie5687-082\nseie5687-081\nseie5687-080\nwww.terri\nseie5687-078\nseie5687-077\nseie5687-076\nseie5687-075\nseie5687-074\nhannongcc\nalsdlf789\njaeinfarm\nseie5687-069\nhongsamajc\nseie5687-067\nseie5687-066\nseie5687-065\nseie5687-064\nseie5687-063\nseie5687-062\nseie5687-061\nseie5687-059\nseie5687-058\nseie5687-057\nseie5687-056\nseie5687-055\nseie5687-054\nseie5687-053\nseie5687-052\nseie5687-051\nseie5687-049\nseie5687-048\nseie5687-047\nseie5687-046\nseie5687-045\nseie5687-044\nseie5687-043\nseie5687-042\nseie5687-041\nseie5687-039\nseie5687-038\nseie5687-037\nseie5687-036\nseie5687-035\nseie5687-034\nseie5687-033\nseie5687-032\nseie5687-031\nseie5687-029\nwww.victor\ngodo34474\nseie5687-027\nseie5687-026\nseie5687-025\nseie5687-024\nsaku435693\nseie5687-022\nsaku435691\nseie5687-020\nseie5687-018\nseie5687-017\nseie5687-016\nseie5687-015\nseie5687-014\nseie5687-013\ncmb200tr5801\nchunglim\nseie5687-010\nseie5687-008\nseie5687-007\nseie5687-006\nseie5687-005\nseie5687-004\nseie5687-003\nseie5687-002\nkoran21\nkim171802141\nand1364\nbosongyi1\nparan219\nsrhj95\nneverdiesp\nemberhm\ntachhotr1929\noceanfamily\ncosmosseed\nnj0090\nlkc1120\nnewrack\nwepix003ptn\nkiras3\nys0831-020\nehdgl9622\nhanakwon7\nlohason2\nlubicon\nhoyup2\nhoyup1\nsnuspo52347\ns4devsdg\nfullart5\nfullart4\nfullart2\nds2pcw\ncmj8547\nlovelyjudy\ngi78admin\ngagu331\nys0831-012\nesher24\nys0831-011\nys0831-009\nwhn1482\nupgrade8kwb\nmjceo\ncrackman\ndychemi2\nroast52863\nroast52861\ncalicoz\nchanwido8\nchanwido7\nchanwido6\nchanwido5\nchanwido4\ncupyeon1\ncmplus12\nkhyse2\neunsun27\nbluelover55\nshinhyoun\nmob0117\nrextop\ncalibow\njcw75651\nbat1207\nminukorea\nyooho0802\ndl68136\ntofto99\nyuhaenam\nhowsign1\ndamin94961\ngi268admin\nehdgoanf10\nsangkoma\npsworld2\nezziroo1\ncarein\nparkjoye1\ncreamstr5719\nzzangzo\nkwh83911\nwww.terror\nnika20101\ngodoid-029\ngamerspot\ngodoid-028\ngodoid-027\npuretime\ngodoid-025\ngodoid-024\ngodoid-023\ngodoid-022\ngodoid-021\ngodoid-019\ngodoid-018\ngodoid-017\ngodoid-016\ngodoid-015\ngodoid-014\ngodoid-013\ngodoid-012\ngodoid-011\ngodoid-010\ngodoid-008\ngodoid-007\ngodoid-006\ngodoid-005\ngodoid-004\ngodoid-003\ngodoid-002\ngodoid-001\ngoldmommy03\ndodopiggirl\ncoconenne\nsound8224\nivory60\nkiboonup3\nok00yeol5\nok00yeol4\npetcentral4\npetcentral2\nmaneryun\ndollkooo1\nnasoyo1\nmandu10202\ngomiamiadmin\narteadmin\nje79hs\njingu721\ngodo33568\ngreen7804\nzzangfa\nfunnysuper\ndodoham\nwarefile2\nlsg0000\npointbar\nusbhouse1\nbtbgift\ngreenpet114\nzzange2\npys06045\nshoedealertr\npowertr1217\ncolorparty001ptn\ndjjjahwal\nairjoon783\nairjoon782\nairjoon781\ndt0043\ns4devkhs\ntoolsjoa\ngka64711\nljh0625\nivitacost1\nhoparkc2\nkarimi\nydgbb1\nlahatz\nhpstar20011\ncure75\nkikis13\nkkt1227\nminhee4205\n3000ton\nasrada\ncarace\nlilylee1\nyovery1\nfishcatch\ncaribul9\naspris\ncaribul6\ncaribul5\nkwons41\nkji1351\nonggij\nwepix002ptn\nkidsastronomyadmin\nedawool\njjile799\nbizcdaejeon\nsonsubook\ninowater\nttbehan1\ngiftspoon\nnamikkoquilttr\ns3intjonr\nsevenmarket3\nsnd3282\nnanacom2\ns3release\ninoi3357\ncomsaja1\nduck66815\nfazel\ncodyand\n7-12educatorsadmin\nds1lza\naudi88131\nhimomoko\nmrc22\nbbshine2\ngi109admin\nvidan2002\nyeseee1004\ngyorim\nyoul04111\nfromap1\ngraceraiment\nit2gpc-040\ndasincn5\ndasincn4\namahime1\nbizcws\ngobawoo\ncomebine1\nexfron\nit2gpc-037\ngdtest-055\ngdtest-054\ngdtest-053\ncoffeemal5\ngdtest-051\ngdtest-050\ngdtest-048\ncoffeemal1\ngdtest-046\ngdtest-045\ngdtest-044\ngdtest-043\ngdtest-042\ngdtest-041\ngdtest-039\ngdtest-038\njolibabytr\ngdtest-036\ngdtest-035\ngdtest-034\ngdtest-033\ngdtest-032\ngdtest-031\ngdtest-029\ngdtest-028\ngdtest-027\ngdtest-026\ngdtest-025\ngdtest-024\njimi12342\ngdtest-022\ngdtest-021\ngdtest-019\ngdtest-018\ngdtest-017\ncody4man\ngdtest-015\ngdtest-014\ngdtest-013\ngdtest-012\ngdtest-011\ngdtest-009\ngdtest-008\ngdtest-007\ngdtest-006\ngdtest-005\ngdtest-004\ngdtest-003\ngdtest-002\ngdtest-001\ncar7979\nmiracle1201\nkkw29142121495\nabcbike3\nmetro71112\nrose44781\nyuginara\nvoglenza7\napplehearts10\ndamoainc2\nmyloveday76\ncara06\noutsider2\nuamake2\nrecipeformen\nautofactory\njk91792\njk91791\nhautechocotr3818\nmotahari\nnasungin2\nartpia1\nmonitoro4\np098791\ngabangusa\nmonitoro1\nguciogucci\nmonokio\ngoprinting\nhellosra2\npolyflower\nbokdory1004\norangehold4\njangmanho1\nnarabio1\nnecomas\nwhoislover\nteraled\nmayfresh\ninteresia8\ninteresia6\ninteresia4\ninteresia2\nbabyprism1\nyoanna1\nmosac\nhoah441\ngi385admin\nporfavor\nmejiro11191\ndivineworks5\ndivineworks3\nmrherb1\nwepix001ptn\nyong4535\nilovesneaker-trans\nkisstreet\nblackhoon\nwanjin\njhcho8tr5661\ntoto0609\nbabegiraffe1\nkajawine\ncaphjm\nmr7004\nneed232\njoyaudtr1183\nbumhokim2\nterahtz\ngmskin7\ngmskin5\ngmskin4\nactionfiguresadmin\ngodo32207\nsunilv4\ndeartdesign1\nparatopia\ngi146admin\niherbalife\ntex2105\nrumebag7\nrumebag6\nrumebag1\njhchae71\nkswl0626\nnaye01\nmonoful\ncariart1\npark632\ntmdrlfs\njeonjinok-001\nhyj01636\nyoungs2\nmoon3\nluveret\nlgslgs\nlbs8788\nseongbuk\nsmileparty\nonevskorea\nysj1215\nhosogkim\ninduk11-040\nuniqueme\nsun04041\nuppermost0622\nalimoradi\nwake777\nks0801081\nmontage2013\nannaj20121\ninduk11-029\nsigane42\nbizcbucheon\nc-olymp\ncmailreceive\nwangga\nsponiatr3499\nbada88222\neggbbang\nmoncl\ninduk11-024\ninduk11-023\ngeojin\nparkjung962\ndesignaide3\ndesignaide2\ndesignaide1\ninduk11-020\nrovltr3141\nhaessac\nchoimin2004\nksg7939\nmonitor16\ninduk11-010\nhamdp3tr\nsyspharm\nchangcom\nupside1\nunclemulti\ncosmosmall2\ncosmosmall1\nifxeye\ngcsd33014ptn\nsesalo2\nautobiltr\nsesame2\nsesame1\nylife39\nblueking3\nbblocal\ntrueness78\nuslux1\nlemonmall\nhwjhaisr\nexwin20101\nmaurizio\nrealestateprosadmin\nbyeyourjune\nmioggi20111\ndgplus1\nfalconshoptr\nrlaqhdus12\nvalenciano\nthechakhan\ndomainparking\nmtsearch\neasyfile\npassecompose\nswon06161\n09land\njyn7771\ncoolsohot2\nckh5853\nkimsy3\nhaeorums\nen74421\nkjh8347\nnanotometer\nsabatapark\nhskim7201\nclientjh001ptn\ndaoud\nhapoom10041\nwww.graveyard\nii1121ii\nsulem10\nfashionweekadmin\nsuperftr9577\nlcs111985\nryuyangrod\nwww.vendor\nthedark\ntextbooks\nchatserver\nemjstyle3\nzatool4\ngadgetgiftsadmin\nmexicanfoodadmin\nwindowsntadmin\nwww.fernando\npartypoker\nheavymetaladmin\ngi73admin\ngi263admin\nldssladmin\ntatsladmin\nwww.teknik\ngi384admin\nasthmaadmin\nemergingmarketsadmin\nprono\nwww.escorts\nopensourceadmin\nembroideryadmin\nwomenshairadmin\ntwohcnc\nzatool3\nlwj6166\ncano33332\nmonocruz2\npetarian\nkingze\nfeelcos6\nkalpataruhan4\nkalpataruhan3\nwww.rocks\nk6educatorsadmin\nmiguelangel\nlesha121\ns3designskin\nruu70781\ntodayfood\nyabooksadmin\nyjh8505182\nwanasa\nhabb0\ncelebritystyleadmin\nleejiyea5418\nsimon02711\nluciashop\nfeelcom3\nmyssoltr5863\nhumanrightsadmin\nfindwlsfl\nclaudia1004\nbengillee\nstudenttraveladmin\necojoon76\nsaesoltr1810\ntwoweek000\ncozcoz1\nabdev1b\njhun731\nmendoza\nziodeco\ncuticase\nnarapuppy\nbumk222\nmnt21\nsakurasweety7\nglutton\nsakurasweety6\nsakurasweety5\niandsoop\ndandy8613\nserimmf\nmobyj\nreusea\nkimnno\nbluepuffin\nwocns13\njacpum4\njacpum3\njacpum2\nmonixcop\nthisa25\nssbk10942\nssbk10941\nhouze0\nhanumatr4803\ncodica\nshr1217\nkindpc\nilovenamu\nkiddykorea\nwillvi\nphone1001\nwalltv\nlemadang\npettong\nondino\nxhfl098\nkjk517\ncoordicoordi2\nubi9134\nokits211\nenamoossl\nugly7707\nsss0083\nhsj9191\nformtabc1\nilikeshop003ptn\nzyoon\ncho5253\njisungju\ntkdalswnsdl\njinokey01\nplayplay\nheh525\nwldus33841\npawpawkr\nkang8017vs9\nmichael91\nryumin\ngodo30384\npedia1\ngirlsego1\nlhwfree1\nnextone\ncricketadmin\ngi379admin\nsparedb\norganicgardeningadmin\ngi141admin\nthehero\nramansaran\npirtnews\nwww.ricky\ntabletasadmin\ndentistryadmin\nicecreamadmin\ncigarsadmin\ngiopt\njayp\nwww.bussines\nlaundryadmin\nwww.pcgames\nshowslow\ngi67admin\ngi496admin\ngi257admin\ngi429admin\nfinancesadmin\ngoseadmin\ngooglpiz\ngodasky\ninventorsadmin\ncrazzy\nwww.motahari\npublictransportadmin\norangecountyadmin\nthemillionaire\ngi374admin\ntestgb\ngi135admin\nbiomedicineadmin\nheartdiseaseadmin\nintljobsadmin\nukjobsearchadmin\ngi7admin\nlovestar\ngi391admin\nchattingadmin\nretireplanadmin\nwww.funnystuff\n4wheeldriveadmin\ngi62admin\nwebdisk.pruebas\nwww.theempire\nsearch.jabber\nwww.amigos\ntimor\ngi491admin\ngi252admin\nwww.brothers\narmftp\ngogreeceadmin\n55555\nawesomesauce\nbogy\nupperwestsideadmin\nrgarcia\nwww.roger\nenusaadmin\nvhenzo\nmariyasexi\nshuzai.afroamhistory\ncsforum\nevolutionadmin\nksiegarnia\npersonalorganizingadmin\nizh\ntuto\nwww.inmuebles\npuzzlesadmin\ngi220admin\ncarolina\nfacebooka\nnybfreelist1\ngi368admin\nfacebooks\nngraphics\nahl\nblackbirds\nashvini\ngi54admin\nashwini\nlenga\noportunidades\njavaadmin\nelpasoadmin\ntaesang1\ncoomheedo\nedaun00\nhplus7\ndodomint4\noncore\nlavert3\nlavert1\njounnal77\ntwinya\nliesangbong1\nluxyi\nwww.calculus\ndonnland1\ndmdoll\nkilroy\nmdwootr4250\nlomis-v3\nyhbloveshy\nvoc\nturki\ncanceradmin\ngdlist\nstampsadmin\ngmailwebmaster\nstartweb\nregistros\nspecter\nabdalla\npostad.primediaautomotive\npreschoolerparentingadmin\nwww.capa\nwww.archangel\nwww.smiley\nsportscardsadmin\nminorleagueballadmin\nthienha\nwww.skynet\nsrvjumirim\nnea\nsaudi1\nesx11\narabcafe\nstratus\nsrvlpta\ngi2admin\nalex2alex\nvineet\nszxy\nweatheradmin\nnetsecurityadmin\nenglish4all\nprmpix\nwww.liberty\nwww.thereturn\nsosnyt\nvipboy\nhhh01\ngi56admin\ngi485admin\nfarmacia\nwww.muonline\nvinicius\ngustave\nsv71\nbillabong\nteennewsgossipadmin\nmifamilia\ngi246admin\npeloadmin\nreparacionesadmin\nfamososadmin\npixelworld\nwww.terranova\nseafight\nwww.samp\ncontratos\nspread\nnguyenvanha\nmelani444\ncupido\nzyx\nwww.tablet\nabeille\nftpdata\ntheateradmin\narabtube\nretailadmin\npostad.equisearch\nproicehockeyadmin\nwww.terminal\njohnpaul\nwww.capacitacion\n3bnat\ngi89admin\nabdulla\nmueblesadmin\ngi363admin\nlatinfoodadmin\nga3datimes\nbluestone\ngi124admin\nteachingadmin\nmaira\nwww.pablo\nwww.tecno\ntimmytimmy\narabstar\ntnl\nradioindustryadmin\nwww.sergio\nqcc\nmetal13\nfdn\ngi14admin\npeaceandlove\nchildcareadmin\nlongevityadmin\nentrepreneursadmin\nwww.toto\ngi280admin\nfarpoint\nsexygirl\nwww.integra\nabubakar\norlandoadmin\nbussines\nenfermedadescorazonadmin\nmynameis\nclimbingadmin\ngi51admin\ngi479admin\nwebdisk.management\nluckypoem\nprivateschooladmin\nmycache\nimmigsladmin\nacuario\ngi241admin\ngoirelandadmin\ninvestingcanadaadmin\nwww.freezone\ndreamsat\naddictive\nrvtraveladmin\ngi297admin\nwww.zen\ngonorthwestadmin\nassistedlivingadmin\ndixon\nguddu\ncvyrko\ngroup01\ntopgamer\nnysshgateway1\nculinaryartsadmin\nslisar\ndosti\nfotoalbum\nbsosnyt\nba-reggane\nwriterexchangeadmin\ngi357admin\ndosug\nboardgamesadmin\ncyber1\nwww.ssh\ngi118admin\nfreesladmin\nwww.ruda\ndiginto\nfreeupload\nmusicaadmin\nwww.ankieta\ntcmadmin\noutsourcingadmin\nwebone\n13579\nflagstaffadmin\nwww.msm\nwebtec\nwww.neo\nmpendulo\nwww.mis\nhotgirls\nlawoffice\nvidasanaadmin\nwww.min\nlossimpsons\nfolkmusicadmin\nteenhealthadmin\nsaveenergyadmin\nredirecting\ngi45admin\nwww.ito\ngi474admin\ncollegegradjobsadmin\nworkathomemomsadmin\nloinersa\nweihua\nvipxinh\nladiabetesadmin\nfriendshipadmin\nogw\nmysqlread\nwww.imc\naminelove\nabigail\nweller\nwww.ima\nwww.jay\nhip-step-stop\nynote\nyokkaichi-kougai\ngenasite\nwithcom\nmanualidadesadmin\nexperimentosadmin\nhontomo\nirvingadmin\ncoolcrewpar\nndkrouso\nwww.hey\ngi352admin\nwindows-remote\nsteam-community\nwww.hbt\ngi113admin\nwww.gfp\nalgerstar\nenclave\nkapok\nfinancialsoftadmin\nwww.gcm\nzinfo\nyumaadmin\nwww.emo\ncoldfluadmin\nwww.fas\ngi361admin\nwww.dnt\nwww.dks\nwww.freetime\ncuppycake\nmanhattanadmin\ncollegelifeadmin\nreus\nmrmehdi\ndresci\nhanabera\ncleanmypc-serials\nwww.cmt\nranjoy\nlenceriaadmin\nshiro\nusnewsadmin\nusparksadmin\ncommando\nwww.daa\nwww.chm\napnetwork-forum\nraj6\nfree-money\ngamekid\nlinsday\nrosmawati\nneworkut\nwww.cal\nsanjiv\nthedying\nhousewaresadmin\nactividadesfamiliaadmin\nprogres\nislamadmin\nlediscret2006\nfadcav\nfba\nfantom\nwww.bet\ngi39admin\ngi468admin\nwww.bca\nwww.bbf\ngi229admin\nwww.air\nwww.aic\nstudio2\nwww.age\nfungame\nfahmed\nfrederik\nwww.kedr\nbesthotel\nnininho\nteachworld\nwww.tanya\nlogitech\n83181928\nblack11\nphysicsadmin\noptionsfutures\nneurologyadmin\nsweetlove\nwww.night\nradionet\nsosbos\nfarahdesign\naviationadmin\njacki\nestateplanningadmin\ngrammaradmin\narmagedon\ngi140admin\nimadmin\nstarter\nfrenchadmin\nprotestantismadmin\nwww.enrique\nidtheftadmin\ngi107admin\nbrunner\nalternativefuelsadmin\nfreedomx\nsosabt\nlafinca\nbackandneckadmin\neasteuropeanfoodadmin\nfooddrinksladmin\nmaritimeadmin\ngi9\nwww.ingenieria\ncatalin\nuff\njalsa\nmiraesto\nstararabe\nlasaguilas\ngi34admin\nwww.mas\nelecon\numi\ngi7\nfreejobs\ngi463admin\ngi4\ngi3\nwww.reload\ngroup13\nrikkoyt\ngi2\nshadow77\ngi1\ndiabetesandyouadmin\nsabnamtusiba\nislamna\ngi224admin\nsyr\nduhokz\nafifinho\npavlosss\n3dadmin\nbeatlesadmin\ndinosaursadmin\nchinni\nbhavesh\naristoteles\nhijosadmin\nweddingtraditionsadmin\nfbtips\nmarines\nteenfashionadmin\ntcw987654321\ndimitris\nie4search\nalzahraa\nsikhismadmin\ndatabasesadmin\nsecure.horses\ngi341admin\ncs.m\nunforgiven\ngi102admin\npalestine\ntest.game\ngi442admin\nclu\nwebdeveloper\nalcoholsladmin\naboutdss\ntef\nbabyclothesadmin\ndupree\nmanmohan\ndionys\nisaksakl\ntdi\ngi193admin\nenlosangelesadmin\nhusna\nwww.punk\ngi409admin\ngoggle\ncoloradospringadmin\nsjftp1\nincon\ngi209admin\nfannansat\ngi28admin\ntekken\nwww.metin\nmala3eb\nxaryte\ngi457admin\nwww.raptor\nwaf7225\ncontactos\nartstyle\ngi218admin\nsimpsonsadmin\njavascriptadmin\ngi459admin\nenmiamiadmin\nnajm-arab\narquitecturaadmin\nwomeninbusinessadmin\nmadeira\nphongthan\nnewhope\nlearningdisabilitiesadmin\nwww.pretty\nibscrohnsadmin\nmusicedadmin\npuppiesadmin\npipelin\ninteriordecadmin\nbluealgea\ngi335admin\nusedcarsadmin\nbbtravel\nhomevideoadmin\nmarveluniverse\nsummertime\nelectronsladmin\nmusic4life\nkamlesh\nselfhelpbooksadmin\ncrochetadmin\nwww.tests\nhispanosadmin\nlasvegasadmin\niclickadmin\nwww.lay\nspecialchildrenadmin\ncvitky\ngaylatinoadmin\npintura\nbazi\ngi23admin\ndaysofourlivesadmin\ngi213admin\ntahar\nphx\nd1000116\ncookingfortwoadmin\nd1000138\ndarkcode\nsouleater\nwelshcultureadmin\napes\nyoursite\ndecoracionadmin\ndetodounpoco\nnwr\nenelcaribeadmin\nnishant\nwww.androidtablet\npbr\nasis\nhorsesadmin\nergonomicsadmin\nwww.paco\nfreegame\nfreefile\nwinzip-serialsdb\nfreedown\nd1000150\nsearchrank.guide\nvista-crackdb\nmacrobioticadmin\nfreecash\nevaluacion\nwww.blogspace\ngorussiaadmin\nmooncake\nfoodservice\nboby\nwww.novi\npythonadmin\nwww.nota\ncomputerzone\nd1000182\nbowo\nbigabout-ext\nleyendasadmin\nchristiansladmin\nlongislandadmin\nmakeupadmin\nincognita\ni4u2\nmafioso\npianoadmin\ngi17admin\ngi446admin\ntelewest\nwww.angeles\ngi197admin\njazzadmin\ngi292admin\nseattleadmin\ngi324admin\nfishcookingadmin\nelectricaladmin\ndarkgame\necologyadmin\nmisadmin\nahmed2010\ngsreddy\nhomedepot\nfashiontrendsadmin\njuegosadmin\nnahdd123\nhebrewadmin\nwww.rebel\nswimmingadmin\nspecsportssladmin\nblackheart\nmasearch\nkidstvmoviesadmin\nwww.gamingzone\nwomensgolfadmin\nstarforum\nshuzai.demo\nvampireknight\nwww.phenom\njewelrymakingadmin\ncelularesadmin\nkabir\nnutritionadmin\nkidspartiesadmin\ngi12admin\ngi441admin\ngi202admin\ngocaliforniaadmin\nwww.paraguay\nquebeccityadmin\nblast01\ndost\nlim\nroofingadmin\nwww.extrem\nboiseadmin\nlolipop\nwww.lia\nmartialartsadmin\nbkorcan\nfary\nmanisha\nprogramsladmin\nwww.httpwww\ndefault-search1\nssbb\nxango\naccesoriosadmin\nkashyap007\npaypallogin\nsecureyahoo\nonlinegames123\nhomestagingadmin\nmafiahack\nhotmailserver\nshuzai.horses\nwww.anarchy\nwww.zim\ngi318admin\nwww.emerald\ndesktoppubadmin\nvictoriaadmin\nsahiwal\nestudiantes\nwww.ecrc\nwww.callofduty\ndirectv\nangelic\ndirecto\nwholesalersadmin\nwebdisk.manage\nautoconfig.manage\ninteligencia\nauth-smtp.vmail\nbacktoschooladmin\nrafaeloliveira\ngi435admin\nums-auth\ncurbas\njmd\nsmtp.vmail\ngi186admin\nnascaradmin\nlucifer666\nvinayak\nnewcurbas\nauth-smtp\nrsiadmin\nabhisek\nwww.manitoba\nglutenfreecookingadmin\nfrenchsladmin\nvatex\nwww.vanessa\nharm\ntestsecure\nhydroponicsadmin\nwww.robert\ngmbm\ngi134admin\nautomax\nncstest\ngi313admin\nperladmin\nfmso\ncwlounge\nchronist\nkorsan\nartesanos\nwww.navarro\ntechwritingadmin\nwww.petrozavodsk\nkafa\n2609_n_www\nanh-m\nvetmedicineadmin\nandroidtablet\n0907_n_hn.m\nbk.sukien\nnetcultureadmin\ncron02\nvipersky\ncron01\nmohsin\nbk.mst\neshwar\nibro\ncode.m\nkalp\ngi430admin\nsukien2\nsukien3\nguys\nblackstage\nmgj\n0507_n_hn\nwww.sukien\nwpi\nplayfreegames\nmodeltrainsadmin\nblingee\ngi181admin\ngamesforall\norientation-forum\ngovcareersadmin\ntechnologies\nvm104\nvegetalesadmin\nsakblog\nlomejor\nbronxadmin\ndbtest-scan\nrosesadmin\njoule\nenglandneadmin\n55545082\ndinamic\ngendbtest-scan\ngi400admin\nsakeena\nerpdbprod-scan\nterabyte\nvaughn\naskjeeves\neship\ngi189admin\nshuzai.collectdolls\nworldnewsadmin\ncrusher\njhon\nwww.sanantonio\nrugsandcarpetsadmin\njiko\ngatika\ngi307admin\nalcoholismadmin\npregnancyadmin\ndwdbtest-scan\noficinavirtual\nwww.paintball\ndbprod-scan\nebrahem\ngendbprod-scan\nfta\ncinemania\namericanpie\nchristianteensadmin\nlondonadmin\naryan123456\ndiabetessladmin\nbacktoschool\nenvironmental\nerpdbtest-scan\nloggingadmin\ngi424admin\ngi175admin\ngar\nwebsearchadmin\nlosangelesadmin\nfgs\ngosouthasiaadmin\nsbatimes\nvacationhomesadmin\nprimesearch\ngamblesladmin\nwww.element\ntorontoadmin\ngi302admin\nravi1234\nvoipadmin\nwww.independent\nxinxin\nsaltaquariumadmin\ndwdbprod-scan\nnapalm\nemf\nrenotahoeadmin\nmarinos\nsantabarbaraadmin\nyahoo9\ndonations\nhollywoodmovieadmin\nredessocialesadmin\ngi418admin\nmeenakshi\ngi169admin\ngi500admin\nmarkyie\ncarinsuranceadmin\ndirk\ndheeraj\nap9\ncivilengineeradmin\nwhatismyip\nbengalicultureadmin\ngi96admin\nsanyi007\nwww.mig\nwww.switch\nmady\nwww.strike\ngi286admin\ntheroseanneshow\nibdcrohnsadmin\natheismsladmin\nlizzard\ndll\nna20\ntorchwood\nportuguesefoodadmin\nshakespeareadmin\ntriton.dis\nvipadmin\ngolosangelesadmin\nconspiraciesadmin\nsuvsadmin\nyanuar\nwindowssladmin\npurelife\ncpv\ngi413admin\ngi164admin\nwww.wallpaper\ngossipadmin\nturbo2\nyardim\nmartina\ncla\nmatisse\nremediosnaturalesadmin\ntejeradmin\nlifemadeeasyadmin\nbirminghamaladmin\nyaseen\naprenderinternetadmin\npcbiblio\naleman\ncuisine\nslingshot\nnewjil\nyasmin\nkapre\ncmm\nyassin\ncrearte\neatingdisordersadmin\ngi91admin\nkriminal\nstarcom\nstarfes\nswimwearadmin\nwww.descargar\ngi281admin\nstarlik\ndermatologyadmin\ndivorcesladmin\ncomidamexicanaadmin\nsj.js.get\nwww.gomel\nstarsat\nwww.cristianoronaldo\nadmin.flyfishing\npersonalinsureadmin\nbbhealth2\ngi409\njewelryadmin\nlogisticsadmin\nlrss.team\ncukerko\nclcs\ncyberdemon\nfamilybusinessadmin\nsultan\ngohawaiiadmin\nstringer\nmenshairadmin\ndvredit-serials\ngi407admin\ngi158admin\nfoodpreservationadmin\nwww.paul\nare\ndeltaforce\nthaifoodadmin\nwww.thefamily\nmudy\nmobilegamesadmin\nwww.nutrition\nwww.neobux\ngocaribbeanadmin\nmangaadmin\nallexperts\nsanfour\nnehemiah\ncanadamusicadmin\nsuncewap\nmoooon\nsanjeet\nsanjeev\ngi85admin\ngi275admin\npaintingadmin\niadmin.pmy\nflashmania\nceramica\nrandomstuff\nscottishcultureadmin\nakis\nsoftweb\ngi349admin\nguidepolladmin\nhorrorbooksadmin\nencolombiaadmin\ntheend\ngreenlivingadmin\ncukorki\ntextil\ninsideprimedia-forum\ngi402admin\npetsuppliesadmin\nmandawe\ncompreviewsadmin\nwww.bullying\ngi153admin\nosly\nmubaraq\nfutboladmin\nludia8\nnews906\nresinok\nglobal99\nchelseaprany\noldiesadmin\n3dbangla\nmetin2forum\njunje\nsmusic\ngaribaldi\nropaninosadmin\npesca\ngotexasadmin\nvolume\ntheempire\ncigarsladmin\npittsburghadmin\nkoronful\nbaileadmin\nlobbyadmin\nparanormaladmin\ntrucksadmin\ngi80admin\nwww.bandits\nuniqroom\nmarinesby\ncomputersladmin\nwww.lovers\nfororo\ngi270admin\nsunnysk69\nbabylon5admin\nshopmanual\nscw1025\nfreshchan\nbkk730\njolifemme\nzen88282\nzen88281\ndepresionadmin\nkaracoco5\nsqs123\nmrcha321\nnataraza\nymslhs1\nmamalatinaadmin\ngun0216\norigingeoje\n86236\nmiinstory11\nhouseplus\ndesigntoken\nngelpc1\ncandy9\ncrown9022\ntopcook5\ntopcook2\nkym5470\nbacktoschoolfashionadmin\ntodayfeel\nsocee2011\njanghyuk18\nsungiu1\nsunghwa\nhsj8441\ntop40admin\ndcheroes\npoembaseball\nedutige\nvelofltr0443\njhonatan\nihcorp\ncypaper\ngodoshop000-010\nzeusbsj2\nlanos4153\nnavazo\naudwk991\nwww.midgard\nyouinn41\njaworld\nmklee0982\nhytelecom\nfkdlagkfmxm\ndorikorea\ncolemangear\nhpixtr6886\nleadersway\njunggotr7791\nwinshade\nyj3300\naramistr5696\nwww.tnp\ngamistyle1\nreve12\nbstjoeun-019\nilikeshop002ptn\ncaselogic\nmmix6\nshoenettr\nbstjoeun-013\nheyjune1\nbstjoeun-012\nboulderadmin\nyangposs\nwoodstory\nbstjoeun-010\nlsszzi\nhighsora\nihdeco\nlux4u\nbstjoeun-005\nakwlswn\nbyplekorea\ndaisyv4\njinyuk001\nsksk10011\nbstjoeun-001\ndrjungletr\nbth3804\nsugarcare1\nnpshoptr9027\nsmj6242\nsevenwell\nkseongbuk\ncho3927\nihkim2000\njolrida1\nms4747\nmcfoods1\nballtop\njwellday\nwww.tkd\nkobaccotr\nfbiscout\nqueenz67\ndaibokorea\nth48500\ntoggi02\nribbonshopv4\nbbobbodi1\nsuhojjang1\nmultiplesadmin\nlhy5363\nbombom2124\nmyshop-030\nexclu1\neclock\nnzonbf\nmyshop-023\ninwoocomm\ndlqnrnr4\nmyshop-020\nwendt30\ncreator1141\nnator1\nmukuk9tr6244\nenamoofix\nceoyaa\nkjunggu\nkgsmook4\nkgsmook3\nkgsmook1\nlee73772\nrealtitr9751\nkohjeondo2\nhunetdong\nlocohouse1\npark6742\nonblog\nartvus\neugeneph\nyhdiva56\nseuumcom1\nknovita1\nsinhongagu\nartwiz\nbanyflat1\nmarinpet\nmesosuk1\nfireird16\nfireird11\njasaengdang1\nruawhk119\nsice328\nmusic1042\nbj10031\nmegaphone2\nmoses129\npyj12101\nebule1\nthsdkgus\nenfi2389\ngirlngirls\nwowman2\nforuzone1\ngreen2902\nbarolife1\nahemskiss1\nhorseracingadmin\npolomonster\ncoffeegsc4\ncoffeegsc3\ncoffeegsc1\nptypty1\nksk77762\nwww.jackass\nrfc53403\ncar3921\nkjh5640\nwww.rpm\nwww.saa\nbungalow\ncollectpinsadmin\nremy\nmathavang\nyahata\naugustagaadmin\njukstory\ndaisseo\ngi386admin\nyetiman1\ncalldo\nwww.pmm\nbalmers\nmuse8119\nrlatkdtr1002\nmlcast\ndpoint3\ns1devkthkira\nnewlight46\nartryx\nhkent12273\nson7446\nggstory4\nellistar\npauly842\npauly841\ncho3234\nsoyea0529\ngion716\ndalmados\ncashpricedn\ngi147admin\nus3acid\nzzambbang\ndakbam33\nparkyh\nxkrrod\ndkssud588\ncolicehockeyadmin\ncho3146\nnousa971\ntiamo1\nrmfpdlq1\nsangt01\nx86x\nresolutionsadmin\nwww.pcs\nwww.nsn\nwww.nox\ntakamura\nvlounge-forum\nsano\nwww.ngw\nvip90\nalrong11\njehyeub85\nwww.nba\nsih7811\nhejgirl\nksgo7263\nksgo7262\nolspecta1\nhosuko\nedu50\ndryad8221\nedu45\naspera75\njjboaba\nhbnow1001\nkjbird\naruih2\nchorokseum\ncas012\nkpham0503\nedu39\nwinnipegadmin\nhpstar2001\nttbehan\njrjrjr\npomipomi\nedu29\nanyweb002ptn\nilovejoo2\nyagooshoptr\ngolilaking1\ntameus2\nkikifs\nwonu27\nnoble0730\nedu19\nrhdrptns\nartjugg\nairsense1\njb97091\nbiglocust1\nchunbe87\nlovestarlit\nmkjohn\nicysniper5\npil1001\npom50231\ndalky123\nwww.low\nminpower\nencittr\ncarrymtr2154\ndaol0778\nilmare79\njanuary11662\nleemj71\noh19552\nsanfran\nm63200\npetitptr0838\nviscon4\nviscon2\nmegafish1\nblindplus1\ntkk017\nrirosystem\ndonakaran77\nnblt2\nyouinn4\nthreeboard4\nthreeboard2\nthreeboard1\nartkyu\nkkum77777\ndmarket\ntekken986\ntoolmt09\ncalbin6\ncalbin5\ncalbin2\nsogangtr0438\ngiogiaa\nhosoon\njazziscool\njhngyu11152\ntgdometr2527\nswood33\nleemh77\nthinkerk\nluci2\nluci1\nnamublind\nbankmatch\nleonaeyo2\nwainat\nmemorykitv4\nbisto01\nmooas09\narai1103\nanonima123\nairsense\njardinadmin\nheavearth2\nluvbean1\npaulrhim\nartkit\njhngyu1115\nchinadesign\ngcsd3314\ngcsd3311\ngcsd3310\nrlatkdrjf119\ncrabman2\ngomnfood1\npacu4ng1\nt2rtr7289\nmajunil3\nxowls1\ngkstoawltoa\nkimys861\nadream4u\nyouilemv\nleearm0217\nfkgt19801\nheret43\nheret42\ncopdadmin\nkitlabtr7995\nbbhobbies\nbcuwkorealtd\ntakwon2\nncbank1\nasr122\narirang01732\nyoofan4\nmarketingengine\npure081\nrosejang110\npeanutsco\ncrowhell5\ncrowhell3\ncanon7813\ncrowhell1\nuyacco692\ncho2024\nbnutopia1\nnabiritr9900\ncomicztr9477\ndecoline1\nedpchair\nomion1\nwkdtn3007\npjb9162\npjb9161\nuhhng01\nchung131\njoin09151\nwoodkid\nspsh79\nanyweb001ptn\njirisnnm\nlesepy34\nsejin577004ptn\nloakekorea1\ntig234\nnewd\nchonm9122\nbiopioneer4\nqkrrudcjf\nhuencos\nazh1207001ptn\ngnnew5425\nnaroit\nhotelarv\nnambookmusic\njjutwo1\nfashionsmctr\nlavenders\nnarodo\nday12312\nlovemomo82\nwonmee\ncacaoharu2\nercedutr\nzone19741\nsaru\nwww.mat\notinane\ngi74admin\npricedn2\nnjy1281\ngulbia1\nropdacom\npyhee741\nadream4u2\nadream4u1\nkmbabara\nsmartknife\nhoney3139\nredhotman\nipayrosthill\nrealdeep1\nwww.mao\npiosbike\nyuow7531\ntarifa\ngotoday\ndesecret\nladymama\ncakee1\nmrtelecom\ngi198admin\ntsgim7tr7930\ndorothymalltr\ngi264admin\nkns10302\ncz0138tr9701\nyouguy2\nyouguy1\ndemobb\nduke356\ndonghwasys\nmkart\nartbom\nihammer\nderkuss07063\nkwk2381\ndecolight\noperassi1\nfree1261262\nmiss2\nluxury50491\nbumhee147\nto0622\nbaliya2\ndesignstory\nnsd0290\nmiz01\nartand\nwmbaldy\nmiraeppa\nsupremacy1\nmyeston8\nnattskin11\nthing95\nbootintr8750\nhellojungwoo2\nleesum01011\nhellojungwoo1\nleh01091\nhy45122\nwalidos\nsteiner4869\nshine10262\nosooso3\nkimsontr9280\nmggarden\nnahri\nwoman4u3\ngoodkim20042\ngoodkim20041\ndodo6699\nsanga89\njts3200\nbbworksmaste4\nhoscnn\njohnonline\nhongjamong\nsewingateliertr\nbulrogeon\nshoptr1430\nbooriboori\ndokyngo2\ndokyngo1\ngwon10082\ne-weddingcar\nbbocksil\nsky486ym1\nnsd130529\nkikass1\nblogshop1\nwsyoun\nmorning6\nnfarmer\nrepuni\natomicsnow4\nckh0630\natomicsnow2\natomicsnow1\nposiinc00\nnzlandshop\nraraaqua\njemmaroh91\npokeuni\nsejin577003ptn\nasiooy\n2bbu2\nvery0421\nscubaom1\ngsgtel-010\ndecorativeartsadmin\ntuntunkids1\nmimyu\nmandulgo\nbom1004\nleeks10072\nartima6\nmint3\nartima3\nmei12131\nenamoodemo\nkornesia\njikr771\nmhvsg\nnight28\nburstbany\ncol0101\ngoldonsmog6\noneorzero17\noneorzero12\noneorzero11\noneorzero10\nwjdgml21\ns4edu\nkt200505\nlseed\nhotwjddus\nmini0\nmulangsa\nlhy1984\nej1378\nsw8901\nribbonvalley\nmichabella\nhorie1\nlsz1022\nnabut\nshesplus\nbig1301\nhana5249\nbodyya3\nrkdrn2091\nkama1122\nk198432\ndgamdong001ptn\nyoungadultsadmin\ntoilettr4563\nch29952\ngi381admin\neuorganic\nbbbseul\nipaymall\nsay24112\nanttelecom\nhoopcitr6821\ncampingfirst2\ncampingfirst1\nmodernagecut\ndidmontr2712\nnatalri4\nnatalri3\nlemonfish\nacebless2\nmijkr\ngeo821\nartgyp2\nebonghwa\nfuturemediatr\nroby19772\nroby19771\npyw36582\nbodyup6\nbodyup2\ntoysun2\nhwan5855\nnewjjang\njunsic-029\njunsic-028\njunsic-027\njunsic-026\njunsic-025\njunsic-024\ninnerweb4\ninnerweb3\nwww.balance\nfinefamily\ninnerweb1\nany49526\njunsic-017\njunsic-016\njunsic-015\njunsic-014\njunsic-013\njunsic-012\njunsic-011\nkims18418\njunsic-008\njunsic-007\ncooljoon2\njunsic-005\njunsic-004\njunsic-003\nbiggolf1\njunsic-001\ndenis119\ndenis118\ndenis117\ndenis116\nwww.jas\ndenis115\ndenis114\ndenis111\nonky5346\nimex771004\ncho0123\nsmzluv\ngog5202\nsj112911\nmapline4\njy0222\nstylesock\ncok8370\ngaegoory1\njabi8874\nkongstyle15\nkimssang7775\nkongstyle13\nkblue08\nch1005\nkblue05\nkblue01\nthddl8666\nlovelyone7\nes3free\nhighones\nview21001\ndlient\nnordkap8\niloveherb\nhow4u4\nhow4u1\napril20\nsejin577002ptn\ntmddus5411\nje0224\nhwan5487\npopcorntreetr\nspoutltr6391\nicon21phil\nnacodory\nblueskyym1\ns3freeintw\ndemping\ns3freeintp\ns3freeintb\nnakis2\nciplatform1\ncross56221\nthfdbxhd1\ndenveradmin\ntouchdog3\nipayjwmall3\nmiega\niorizia\ns3edu\ncho2001s\npensarangtr\nlifelink6\nhtmladmin\nlifelink4\nlifelink3\nlifelink1\nkama0242\nsaddog74\nonagana\nwigdesigner3\ns4freedevkhs\nromeojang\nch0559\nmonic01\nflyte2\nmya000001ptn\njackmen\ngi20admin\nlovehouse3651\ndasan247001ptn\nbinilatr1277\nkim9hs\ndaenong1\nleeji2k\nmangonamu\nppunia2\nfinelbs5\nsismedia\nfinelbs3\nfinelbs2\nokgolf1\nswpaper\nsandfox\nmadeinreal\nsemicon21\npelletcamp\ngosouthamericaadmin\nnicepick\nbest12295\nbest12294\nsakeimtr9141\ncocosribon\nipayeve58153\ntaewoo32022\ndhrwngmll\nsketch\nluna7658\nstwood1\nmiapc\nabbishop\na01086700679\ns3devsky\nsoftlon\nryoocs\nkjbaek2\nsoekaldi5\nsoekaldi1\nfleamarketadmin\nrhotcool\nzktmxkem122\nherman77\njonejmama1\nkghjl79\nskymap1128\nilovemusic3\ndemomt2\nfairy001\nenjoymall4\nenjoymall3\nbackup89\nbackup88\nbackup84\nbackup83\nbackup82\nnesteggz\nbackup68\nbackup67\nbackup66\nwww.ess\nbackup64\nbackup63\nbackup62\nbackup61\nbackup59\nbackup58\nlovelyand4\nbackup56\nwww.fer\nbackup54\nbackup52\nbackup51\nintorock11\nhmsolution\nanother0\nredstars4004\nwww.fdc\nbaksa77\nsktworld2\nsktworld1\npdfox4\njates2121\nallip600\nqutjin60\ntree9613\nbuja49483\nminovia1\nspolex\naaasss84\ndemor44\nwanggung\nsl1238tr2669\nsh3123015\ndeplant1\nswch4040\nrlawndo613\nkyw01\ngodqhrtoa\ns2fqa\nicarus89\nnatur331\nsejin577001ptn\ngodo23125\nsuperhoya1\nrentop\ngracex82\nhairtoo3\nnewyorker9\nribbonarts\ndaein69414\nkingdisplay\nsoyaco\ntwoace1\nchgoods\nwyh1015\ndirectmall\nyangok331\nrkdrudtjrs\nemlifetr\ntheo06182\ntheo06181\naznymohc009ptn\nwww.fca\nmycom84\nginseng2000\ndownie3\nyukinongup\nksjbank2\noffman21\noffman20\noffman18\nryu858\nwww.cup\nthepnk\nsensrect2\nwww.diy\nflashram\nsulry20\ns3devman\nololaa\ndrmartens\njsh0727\nkyjzz\nadagioepiano\nvaram089\ninterfaith\ngodomall-059\ngodomall-058\ngodomall-057\ngodomall-056\ngodomall-055\ngodomall-054\ngodomall-053\ngodomall-052\ngodomall-051\ngodomall-049\ngodomall-048\ngodomall-047\ngodomall-046\ngodomall-045\ngodomall-044\ngodomall-043\ngodomall-042\ngodomall-041\ngodomall-040\ngodomall-038\ngodomall-037\ngodomall-036\ngodomall-035\ngodomall-034\ngodomall-033\ngodomall-032\ngodomall-031\ngodomall-029\ngodomall-028\ngodomall-027\ngodomall-026\ngodomall-025\ngodomall-024\ngodomall-023\ngodomall-022\ngodomall-021\ngodomall-019\ngodomall-018\ngodomall-017\ngodomall-016\ngodomall-015\ngodomall-014\ngodomall-013\ngodomall-012\ngodomall-011\ngodomall-009\ngodomall-008\ngodomall-007\ngodomall-006\nnanum2\ngodomall-004\ngodomall-003\ngodomall-002\ngodomall-001\ns3devkhs\nnuny78\nparisfrance\ngongze11\nreon2k\nusemix\naramseosan\nkangs2445\ncan337\ngodoa3-030\ngodoa3-028\ngodoa3-027\ngodoa3-026\netiquetteadmin\nwww.eaa\nfirstchoice\ne-store\nwww214\nldschristmasadmin\ngi199admin\nrola\nepilepsyadmin\ndeportesadmin\nshashwat\nshuzai.sewing\nwww.cee\nwertex\ngi68admin\ngi497admin\nldsadmin\ngodoa3-025\ngodoa3-024\ngodoa3-023\ngodoa3-022\ngodoa3-021\ngodoa3-019\ngodoa3-018\ngodoa3-017\ngodoa3-016\ngodoa3-015\ngodoa3-014\ngodoa3-013\ngodoa3-012\ngodoa3-011\ngodoa3-009\ngodoa3-008\ngodoa3-007\ngodoa3-006\nryu18077\ngodoa3-004\ngodoa3-003\ngodoa3-002\ngodoa3-001\njdoutlet\nwanggolf\nartform\neuncho2\ntofino1\ncomfs1004\nmixjs1\nbornstreet1\nyujane21\nqkralwjd94\nheykeung\ngodohomez\nmomv230\nhsj1993\nybmtb1\npequalno1\narablionz\nlilybebe\nsigmini1\narimaltr6888\nskypjhek\nkperpect2\ny0603791\ncdcomco\ndr7799\nqq14121\ntoysale\nandynaudrey\npapassun3\nsw6385\ngoodbutton\nbestshop221\ndlaehd1234\ngi258admin\nsbmaster-010\njsh0258\nenostyle\nvldals1231\nsyprime\nzinsol1\nezcominc\nscrapbookingadmin\nabdou474\neverydaybeautyadmin\nfamilyfitnessadmin\npalmspringsadmin\nwww.amd\nradiovip\nfarmingadmin\nsitech\ncanadaonlineadmin\nsani336\nfrends\ncumurki\nwww.infamous\nsbinformationadmin\nbcom\nminiaturesadmin\ngiggle\nthem\nracquetadmin\ngi375admin\ntibs\nkoraa\ncertificationadmin\ngi136admin\nangelsadmin\ninlineskatingadmin\nblablabla\nloveforever\ninternetradioadmin\nsubas\ntotalsport\nadithya\nhomebasicsadmin\nmoulay\nsportscareersadmin\nwww.estilo\nsune\ndesignsladmin\ntoldmeher\npetroleumadmin\ngi8admin\ngi63admin\ngi492admin\nsura\nwww.llamas\nframes\nmilitaryfamilyadmin\nhabibo\nkidmoneyadmin\nhack15\nhack33\nmusiciansadmin\ninfamouz\nteensadmin\ndjims333\nscifimoviesadmin\nstocksadmin\nbpdadmin\nenbrasiladmin\nfunpower\nmegabyte\ngi370admin\nsasanka\nsoapssladmin\neuropean\ngi131admin\nwww.michael\nhotmailcom\nwww.facebok\ncollectdollsadmin\nstarlines2\nakermoune\nholidaysadmin\nallergiesadmin\ncharlotteadmin\nsaiko\nlandscapingadmin\nmbx\ngi3admin\nadamadmin\ncycles\neconomicsadmin\ngoatlantaadmin\nwara\nravinder\nrestaurantes\nregistered\ncstrikes\nfreelancewriteadmin\ngi57admin\nhammas\nvintageclothingadmin\ngi247admin\nwebo\nhamood\nsilverboy\nswsladmin\nhanlin\nhannan\nk-6educatorsadmin\nwww.magnet\ninternshipsadmin\nparquesdediversionadmin\nsarthak\nfrederictonadmin\nny.js.get\nsnowrides\nwww.pizza\nportlandoradmin\nwww.stephanie\ntampaadmin\neasylife\n15minutefashionadmin\ncharlottesvill\nwww.consultant\nmazika0\ntvcomedyadmin\nwww.papillon\ntriathlonadmin\nwww.lasvegas\nnom\nraviteja\nteenlifesladmin\nivalice\nmarketresearchadmin\nwww.faceboook\ngosouthwestadmin\nwww.tbt\nzerarda2008\nwomenshistoryadmin\nmcspecial1\ncarrerasadmin\ngi364admin\ngi125admin\nhassen\nbullying\nsaludinfantiladmin\ncarsadmin\nm4trix\nwww.metin2\nhdvideo\nelyogaadmin\nusnan\nnailsadmin\nchandrasekhar\nsanantonioadmin\nsoftwaredevadmin\nwww.vg\ncomediansadmin\nximo\nmita\nwww.rk\nsnowboardingadmin\nadmin99\nhealthsladmin\nweaponsadmin\nmauro\nflooringadmin\nwww.oa\nmarouane\nstartimes333\nablistadmin\nkikopolo\ngi52admin\nmayas\nviprasys\ngi481admin\nmoneyover55admin\nquiltingadmin\ngi242admin\nsaobang\ngreennet\nfonari\nhusam\nkudanil\nablist\ncoolbuddy\nanimeadmin\ncrimeadmin\nbulldogs\ngi119admin\nwww.blueteam\nhaven.team\ndutchfoodadmin\npharmacyadmin\nzalizo\nandroidapp\norganicadmin\nbrooklynadmin\ngi170admin\nhomerenovationsadmin\nhilaryduff\nvolleyballadmin\ngi46admin\ngi475admin\ngi236admin\nladygaga\nseasianfoodadmin\nshortstoriesadmin\nkutta\nmagicshop\ngi380admin\nhistory1800sadmin\nnhan\nzoey\ncybermafia\nmeera\nmasterhost\nwww.programas\nxstone\ndrjohn\ngi499\nyourphotos\ngi498\ngi497\ngi496\ntutut\nclarence\nkollywood\ngi495\ngi494\nwww.streetart\ntaj\nflashart\ngi493\nwww.dulce\nvijaykumar\ngi492\ndemonic\ngi491\nretal\nlumberjack\nwww.clima\ngi489\ngi488\ngi487\ngodwin\nmuslims\ngi486\ngogeta\ngi485\nfworld\ngi484\nsani335\nhwan3592\nsbmaster-003\nrebels\npgc\nsbmaster-002\nguess18\nsociales\niconbay1\nppakuns\nnariswater\ngi483\ngi482\ngi481\ngi479\nsubhadeep\nmav\nwww.jordan\ngi478\ntcenter1\nenter3854\naa1\nsksdhkdtn\ndslgstr8532\nvolky2006ptn\npinksuger1\ninfsch2\ninfsch1\nsesintsunny\neggstar1\nwellbeingtowel\ndksro2454\nqodtns\nhamdang1\ndasom77352\nregalos\nfengshuiadmin\ngi475\nmule\nhackeriraq\ngonzalez\ngolane\nwww.boris\ngi473\ngi472\ngi471\nafn\nsalma\nfacebuk\ngoogel\ngi469\ngi468\nwww.hotline\ncomptech\nchatworld\ngi467\ngi466\ngi465\nanimeonline\ngi464\nvirtualcity\ngi463\ngi462\nwww.fox\njack-aceh\nwww.pokemon\ngossip\nmp109\ncontenido\ngi461\nccf\nclemente\ngi459\nwww.congress\nwww.tokiohotel\ngi458\ngi457\ngi456\nimages.b\nmobiclub\ngi455\nwww.theotherside\ngi454\ndelivery.o\ngi453\ngi452\ngi451\ndalia\ngi449\nyogesh\nmarukima\nbadboy123\ngi448\ngbt\ngi447\ndoheejjang\na27974844\nkbm77005\nkbm77002\nkifid2\nmygaras2\nblue1192\nwww.kankan\nmyepicase\nsjlock11\npascal752\npascal751\nflyant\nimarketing016ptn\nbiomta\nzzukppang\nboss7628\ngosteam\nlong4\nsunyaro4\nfour321\nnamuwa\nseechans\nd0tb1t\nzzubong\nsodom1982\ndns51-4\ndns51-3\nhbmart07041\nbaesilri2\nbaesilri1\ngodo21667\nhj2000kk\ngreen12671\nkwil7191\nbiomam\nbrozdist\ndelete01263\nhsdacam\narome1\nreflexkorea\nideaz021\ndns50-4\ngi446\nseralee\nhan92501\ngi445\nacademyshop\naroma4\naroma3\nskyonemoon8\naseva1\nwww.tobi\ngi444\nzaengyi\nmomodd1\nsamjogo\nhwan3049\nnari230410\ndportal\nlovesuho89\nnamph30\ndoshirac\nsehooni1\nvit424\nnamph21\nmerot\nred4sky\nnamph20\nsmartdoc\nallthatkid1\nthednd\nnuno12\neastiger75\nninetyg2\nwelpia2\nwelpia1\nindishoptr\ngsv\nplam\ngi443\nanhquan\nkidsss\ndailymi\nbyonce5\npen2011071tr\nloveintr0102\ngodo21354\ncakent1\nfone5117\ndiso98381\nmm045\nmantralight\nartenis\nwkaxld00002ptn\nhalla4529\nokfishtr6461\nenicostr1\ngpsauto1\nquickbattery\nlohft\npcmpcn\nsogjg86\ntree7584\nssizoo1\nissac001\njuni10981\ngodo21215\nmanyo331\nqueen6c3\noofbird4\noofbird3\noofbird2\nwhitemoon951\ngi441\nplusgajun\ngi439\nkhy8166\nhejan85\nssiznet\nlivelocks3\nrenbow\namore1111\nyesyakim71\nthevassi1\nnamph9\nnamph8\nnamph5\nnamph4\nnamph3\nnamph2\nnamph1\nwonphu2013\nwkseoul\njwj15414\ntranquan\njwj15412\nchyra521\nelsm5101\neurodirect6\ngi438\ngiftodaymart\nsupersim\nyvespotr3947\nzabes072\ncocovenni\nnaxpungtr4570\nvarun089\nupperlady3\nupperlady2\nrmfjadpeh12\ngi437\nsamiri1\nsupersg3\nstarceo\ngi436\njego114\ngi435\ncoqueterra\nmnbnm52\nlodee\ncafertr\ngagsital11\nsaeromedu\nyooa47753\nsirbanny\nyms39401\nckwlgh122\nfristar1\ncaselogicshoptr\nlovestory2\nonstore\nledstyle\nkbs8303\nhwangtosum\njeanmania\ncjymsms2\nhaepal79\nohohoh55\nwjdghks6\nhyde0228\ngymboreei\ni16322\njaypark4\njaypark1\npoohaha21c1\nhoangdeptrai\nwww.rock\njm3\naroma0063\nhanna2012\nhwan2013\nsynergykorea\nartegio\nebedding\nhana0924\nsungje\njungjm49891\nruna0401\nsummary\npursevalley1\nmorffstyle\ncleansafe\ngi434\nhautegallery\nspy007m\nsunjinpet\nadev167\nkhmkjt\nyoutubee\nclubmobile\nwww.korean\ngi433\nplus12193\nnaa\ncuongth2009\nwww.rage\njakob\ngi432\nwww.antonio\ngi431\ngi429\njrn\nyasmina\ngi428\ngi427\ncabalph\nred-dragon\nwww.telefon\ngi426\nwww.searchengineoptimization\ngi425\nwww.amira\ngi424\ngi423\ngi422\ngi421\nwww.jersey\njlcorea\nhoneycom143\nhemohealth\npamikyung\nrcrace\nwabtel\nfishingmetro1\nipaysupplyurs10\njunarian1\nlivingsens1\nwkaxld00001ptn\nkjtop41\ngi419\nhoshino\nsaygolf\nbonaebada\nsanai81\nyangil23\nouranus\nsanai57\ndominoland\ngi418\ngi417\nharvardmarine\nwww.nick\ngi416\nsalmankhan\nms146\ngi415\nllbejll\nvempee3\nwaltz00204\nchj84291\nwww.mona\ndsharp1\nwellhouse\nmoms911\npsd10022\npsd10021\nbbcareers\npurefarm20111\nparsley1\nwndus2422\nimagejan4\nsang230\ntheiluvi\nnewinggo\njagex\ndasanbooks\nworlddigital\nwsw10254\nwsw10252\nsplink\ngurm0001\najjvsl7\nraise\ngi413\nexlife\ncjhwa86\nneobob3\nmcommuni\nneobob2\nsang115\nlinkhouse\nnewdept\nhappygrim73\nhappygrim72\ngi412\nwww.impact\ngi411\nbluebook\ngi399\nhimura\ngi408\nblink182\nalbin\npinpin\nwww.levi\ngi407\nhappygrim71\nunionflower\nallegrouz\neunbeo3o\njmeatman\ngsharpmall\nmikanginc\nssjoun1\ncjws2000\nopusone\nhonbeelsh\nclient792\nclient791\ngi396\ngeolay1\nadoresun1\nkhumalltr\nctnara\nsweeteeleng\nyung3651\nflux91\nbmdcorp\neverydaygreen\neoasise\ngi394\ngi393\nalameda\nreflections\ngroup2\ntana\ngi402\np1r1\ncybertricks\nmarquee\nhisham\ngotoday2\ndbenamoo\njks7292\ngi391\nerlandsen\nyooriapa20\nyooriapa16\nyooriapa15\nyooriapa13\ngi390\nahmedasem\nmoriarty\ngi388\ngi387\nallamerican\nnutting\nxyz123\ngi386\nchewy\ngi385\ngi384\nclothes\noptica\nstararab\nasadullah\nstarcasa\ngi383\nsamirbba\ntfm\ngi382\nharshita\nstarcom2\nschulte\n2rbine\nstardoll\ntja\nyooriapa11\njjh7457\nphenom\ngi381\ngi379\nrhorse58\nsong2000991\nhohs6870\ngi378\ngi377\nremates\ncibertec\nstargirl\ncinkabene\ngi376\nfasebook\nstylentr0015\ngi375\ngi373\ngi372\nmau\ngi371\nwoaini\ngi369\ngi368\ngi367\nstarkora\ngi114admin\ngi365\neartprint1\nzerowox1\nesmailzadeh\ninfopia\nhoroskope\nblackie\ngi364\nstarnet2\n3arabforest\ngi363\ngi362\ngi361\ngi359\nzzinga7777\nhit0043\ntestgodo-003\ntestgodo-002\ntestgodo-001\nmotorplus\nmk211\ncadkdy\nhomeic\nnobelkorea1\noksysy\nkangkosy1\ntheseatr5545\ndigilog1\nrunescape3-beta\ngeosungnc4\ngeosungnc3\njcy80801\nknan4053\nmoltz13\nwitharbina\njentcosm1\nmnbmato\nsoundforum1\ninnohouse\ndanmist1\ncjmarttr\nbumbi1\nsamohago\ngi358\ngeddoi\nmarusol\nhikang93\nwhb\njshak1012\ntkfdkdltsp\nweddingnbaby1\nbomool10141\npetsbtr5164\nfurnipeople\nbaleda2\nrkatkatjd3\nkhs106\nlloom\nbymommaster\npromaltr8853\nkhlife\nthatbe\ndh13571\nmatjoeun\nsnowcathome\nbysummer\nnalgae\nolleh1\natmanhouse\nzi9\nuiseok4\ngodo17925\nmedcos2\nshira81\nyatene\nyespump2\nyijungah1\noizang3\nnanogolf\nkissthehydra\nrauschtr1027\nsshousing\nbigbangt4\nt2002kr1\ngi357\nmjkt84\naznymohc005ptn\ngolfmax1\nyonggary311\nmeditotr1586\nbillyb\nvou\nhyundai-039\nkimjinryeol\ngi356\nbnutopia\njeeyae1\ntaebancosmetic\nltlkorea\nsofoom1\nkoolz18\nkoolz15\nunixmart1\nwww.iq\nhyundai-032\nstaristr8183\nhyundai-029\nvmulti2\nsw2803\nieonet20131\nqqqqq7600\ntourkorea\nf1tr7745\neternal0424\ninfoic2\ngcsd33012ptn\nhyundai-019\nsosomm\nhyundai-018\njungmi803\nintopkorea\naidiishop\nmonavan\nsonaten231\nhyundai-009\nsosom4\nmarketing11\ntotaltrade\nwww.jd\nhyundai-006\nmarumoa\nyein5151\ngi355\nsnailsp\nbimax1\nmarumir\nhka7898\nkbvintage\nmotor629\nmcumart\ndodam16\nhori5000\njjungyk\ndlwlstn12343\nhosikstyle\nemtmaster1\nartbom5\nartbom3\nyonsuart97\ndktak\nnalabi\ngi354\nddalki011\nwikitetr0769\ngi353\njazz2you1\ngi352\ncarsm5252\nmbri1\nggamsiya\nmis0142tr\nviiv6153\ngi351\neros10921\ngodo17272\nmydaisy\nbori25603\nggamtan3\neum9960321\ntjdwns092\ngi349\nmin3584\nso17702\nseolleim\nmotibluetr\npage2940\ndelskin\nmkara1\nyjh61281\nwooridream2\ngi348\nseong9557\nsamhang\nvitamitr3086\nakddong11\noutdoorlook5\nshinwha\nmisomo\nnarsha67\ninfocad\ns3freedevw\nstylesaysmart\ns3freedevp\nroradress\ns3freedevb\ngi347\nunistarlp\nmaxi9\nvenisarmy1\nextra44\nwintop253\nwintop252\nwintop251\ntoytoylego\npka\nfluaos\nmondoudou1\nmisoap\ngi346\nrjmhouse1\ngi345\ncuteysoo\naznymohc004ptn\nattic831\ndream12451\ngi344\nsgsgcbs\nyoual12\nmsraion\ntaddyseo\nnewdctour\nartbike\nlivingquilt\nmiss64\narti112\necoliebe\nnzlandtr4975\nshinter\nmds3515\nvitamitr2648\ngi343\ngi342\najkzz4292\najkzz4291\npnbhfood\nbel13941\nipaysupplyurs9\nipaysupplyurs8\nsmartcs4\ngaonnara\nparkinn\na2amanager3\ngi341\nr4tt1\nnaturaltown6\nwkdrnthd12\ncubist\nupflykorea3\nupflykorea2\ndatanlogic\nflue87\nwww.4u\nujini11\npakch042\npakch041\ndarkrookie78\ndesignsol\nzing212\nmirae021\nshiny02\nmarue\npolaris321\nsam840711\ndesignsmc\nyoursea\nmirtel\nwww.3e\npazzu1\ngi340\nwww.partypoker\ndesigntag\nsd08051\nyurian\nksroh\nebizs1\nzerozin\nmirz02\nsunwooland\nmichellekor\nchaeeunabba2\nanirudh\naquan1\nmaqua\nmisit5\ngi338\nmisit4\narabicsoft\nzioips2\ndwkorea3\nokidoki\nh10516156\ngi337\ngi335\nthaddy\njjang98\nmiso99\nuriiya\ntera14391\nk320sh\namecano\nramosu3\nmaummind1\ntjdgml8004\ngi334\nmouad\ngi397admin\ngi332\ninformate\ngi331\nregister1\ngi328\nfoxhound\ngi327\ngi326\nlupusadmin\naquatech\nstartime\ngi324\nreflect\ngi323\nstartoon\ngi322\ngunjan\ngi321\nwww.aras\ngi319\ngi318\nlakshman\nwww.dta\naddictionsadmin\nemotions\ngi316\ngi315\ngi314\nwww.rebels\njengkoil\ncanadian\ndecember\ngi313\ngi312\ngi311\nfreechips\npowerfull\naloevera\ngi299\nfamillypower\ngi297\nmy123\nconquerors\nfirewolf\ntigertiger\nprofesor\nfreeleech\nzlatko\nhostweb\nwww.restaurant\nwww.douglas\ngi296\none101\nofficefile\ngi295\nidrees\ngi294\nfreewallpapers\nstudies\ngi293\nsuleman\ngi292\ngi291\ngi289\nbodexdas\nqa.myportal\ngi288\nwww.rcm\ngi286\ngi285\nyulong\nwww.royal\ngi284\ngi283\ngi282\ngi281\nkakalot\nshareblog\nmudit\ngi279\ngi278\nmusicfa\ncoolpages\ngi277\ngi275\ngi274\ngi273\ncavake\nwww.iceland\ngi272\nloveofmylife\nwww.hicham\ngi271\nstartunisia\ntest123456\narivolker\nrhapsody\nprofile123\nchillout\ngi269\ngi268\nmusics\nm.video\ngi267\ngi265\ngi264\nfarouk\nmedinfo\ngi263\nsamoloty\nbebobebo\ncyberworld\nmahjong\ngi261\nmyfamily\ngi260\nwww.lemonade\ndoddysal\nhostme\ngi258\norkutnet\ngi257\ngi256\ngi255\ngi254\nhouser\ngi253\ngi252\ngi251\ngi250\nmanish786\ncukinate\ngi248\ndprakash\nredatimes\ngi247\nwww.helpme\nposters\nmega007\ngi244\ntakuya\nal3mlaq\nwww.emilia\nstallion\ngi243\nezekiel\ngi242\nacompany\ngi241\nkhan786\ngi240\nphotolab\ngi238\nchimung\nazmail002\nvinay\ngi237\nfunnythings\ngi236\ngi235\ngi234\nsoundsystem\ngi233\ngi232\ngi231\nrichar\ngi229\nfreesupport\nlipe\ngi228\ngi227\nwww.des\ndanubio\ngi226\nlegende\nhrishi\nnetweb\nmail111\noldworld\ngi225\ncoley\ngi224\na7lam\ngi223\ngi222\ngi221\ngi220\ngi218\ngi217\na7zan\nwww.cnc\ngi216\ncruel123\ngi215\nmmusic\nzouzou\ngi214\njagoda\nwww.friend\ngi213\nsipe\nrobinhood\ngi212\nwww.freetv\nghatipati\npcsafe\nmikerichardson\nfriendsworld\nwww.hospitality\naluminium\ngi211\ngi209\narabsoft\ngi198\ngi197\nsitecore\ngi206\nintegrity\ngi205\ngi204\ncementar\ngi203\ngi192\ngi191\ngi190\ngi188\ntube8\nviswateja\ncirugia\ngi187\nrobinsons\ngi186\nnetwalker\nrealserver\ngi41admin\ntroya\nhuatak\nmixter\ncertika\nsamspade\nsearchengineoptimization\ngi184\ngi469admin\nbarcalona\nantijboura\ngi182\nmistic\ngi181\ngi179\npisby\ngi178\ndreamhack\ngi177\nphpmysql\ngi176\ngi175\ngi174\ngi173\nocco\nwandi\nsfsf\njayson\nwww.abraham\nwww.eureka\nwww.flores\nfasling\ngi172\nvishnuvardhan\ngi171\nachratech\ngi169\ntorre\nlaminate\nwww.evelyn\ngi231admin\nmacipoli\nwww.crema\nimpulso\npromotor\ngi167\namec\nhamoud\ntodojuegos\nsanandres\nwww.backtoschool\ngi166\ngi165\ngi164\ngi163\ndostavko\nmiauto\nwww.bit\ngi162\ngi161\ngi160\ngi158\nwww.ibrahim\ngi157\nwww.aws\npromusic\nmycomputer\nhussam\nwww.gamerz\ngi156\ngi155\ngi154\nguitarhero\ngi153\ngi152\nzuzki\ningame\nskyking\ngi151\nwww.escort\ngi149\nimotok\ngi148\ndavidoff\nwww.wiiworld\ngi147\nwww.ccr\ngi146\ndesktopvideoadmin\ngi144\nhortensia\ngi143\nabadi\nabaja\ngi142\nwiking\ngi141\nabdoo\ngi139\npuremusic\nmelanie\ngi138\ngi137\ngi136\nusman\ngi135\nachat\nimstar\ngi134\nwww.iloveyou\nmyphone\nmohseni\nwww.newspaper\naddie\ngi133\nadept\nadjie\naditi\nvideoclip\ngi132\ngi131\ngi129\nwww.xx\nwww.tz\nwww.tu\ngi128\nbayarbat\nwww.to\ngi127\nwww.rq\nwww.rg\naftab\ngi126\nnetboy\nafzal\nahlam\ngi125\nwww.or\ngi124\ngi123\ngi121\nahrar\ngi119\ngi118\ngi117\nbadin\ngi116\nbahaa\ngi115\ngi114\najith\ngi113\ngi112\ngi111\ngautamkumar\ngi109\nballi\napnafun\ngi108\naizaz\naizen\nbarde\ngi107\ngi106\ngi105\nbatar\ngi104\ngi103\nwww.kt\nmissou15\ngi102\nalex4\nnorthernirelandadmin\ngi100\ninsuranceadmin\nalgno\nalibi\nusmilitaryadmin\naliii\nzanzibar\nwww.iz\nwww.jm\namany\nconstructionadmin\nallam\ngraphicdesignadmin\nwebtrendsadmin\nallie\nartforkidsadmin\nplussizeadmin\nameet\ngi347admin\nclevelandadmin\nwww.ew\ngi108admin\njevans\nwww.er\namjed\nlaborissuesadmin\nsweetpoison\nucat-sl\nanami\nyoungadultbooksadmin\nwww.dt\nemployeebenefitsadmin\nfrenchcultureadmin\nbedda\ngomontrealadmin\ndesmoinesadmin\nwww.dg\nalwrd\nangad\nangga\ninglesadmin\nbipolaradmin\ngi35admin\naskjpartners\nbetans2\nbetans1\nfictionwritingadmin\nucat-gl\ngi225admin\npmsadmin\nfamilyfunadmin\nlungcanceradmin\nchicagosouthadmin\nberta\npreview.seventeen\nantar\nhomesecurityadmin\ngospainadmin\nstage.americangreetings\nmenopauseadmin\ncomicbooksadmin\neathealthsladmin\nshuzai.womenshistory\nllamas\narab1\nyaser\naqila\narbab\nmemo242\nwww.vintage\ngi342admin\ngi49admin\nbidet\nardhi\npowerboatadmin\ngi103admin\nsweetums\nrockstar1\nbeaguide.team\nusforeignpolicyadmin\ncabba\nhernandez\narkay\nbiker\nstartrekadmin\ngi240admin\nfilosofiaadmin\nlesbianlifeadmin\ngi29admin\ncadsf\nsimonsky\ngi458admin\ngi219admin\ndyingsladmin\nasker\nmusicacristianaadmin\ncanadapoliticsadmin\nfaccbook\nasmaa\ngi30\ngofranceadmin\npreschoolersadmin\narwef\nasoft\npurples\nworldsport\nstereosadmin\naustinadmin\ncoffeehouse\nactivetraveladmin\nusana\npoliticaadmin\nwww.original\ncarob\nwww.elites\nwesternmaadmin\npepa\ncave1\ngi24admin\ngamebattles\nblero\nkratos\nwww.photoworld\njohn123\ngi453admin\nchinesefoodadmin\naures\naurum\ngi214admin\ninmuebles\ngi303admin\nadultedadmin\nleandro\nwomensbballadmin\ncontemporarylitadmin\ncezar\nboots\ngi331admin\nawardsadmin\nofficeadmin\nkosherfoodadmin\ncollegehockeyadmin\nussocceradmin\npsoriasisadmin\nfrancia\naltmusicadmin\ntesis\namblogin\ngi18admin\ngi447admin\nazert\nkvartira\npiotr\nrufus\ndiversions\nbraga\ntalkshowsadmin\nmychemicalromance\ntails\ncidar\ndiabetesadmin\nshots\nchoci\nyaziland\nchoki\ncatloversadmin\nazooz\nenperuadmin\nstardays2\ndrumsadmin\ncolumbusohadmin\ndacad\nazumi\ngi325admin\ncindi\nfoodpolicyadmin\ngoamsterdamadmin\nkmusic\nglobalizationadmin\nazzam\nhomesite\ndaima\ntuankiet\ndownsyndromeadmin\nmovieboxofficeadmin\ndalac\ndjk\nancienthistoryadmin\nsubsabsladmin\ngi13admin\ndamin\nfisheryadmin\nclassifieds.history\ngi203admin\nreich\nphilosophyadmin\nenespanaadmin\ngatosadmin\nbbissues\ntheaymane\nwww.phantom\nwww.ia\ndarsh\nbeautyadmin\ntwitteradmin\ngoseasiaadmin\nwww.sac\nminhaconta\nsimpozia\nnanotechadmin\nkalemat\nwww.gl\ndcebe\ndoctorpc\ndavor\ndayan\ngovegasadmin\nmenshealthadmin\ngi319admin\ntaxtimeadmin\nwebcams\ngenealogyadmin\nseniorsladmin\ngi392admin\nbux08\ncomponentsadmin\ndebaj\noaklandadmin\njudaismadmin\ndeepu\ndigesto\nmobileofficeadmin\nafroamhistoryadmin\nbanserver\njuarez\npcfix\nmedisys\nlibertarianismadmin\ncokoo\neastangliaadmin\nsalas\nhwpoll\ndewki\ncontainergardeningadmin\npotteryadmin\nservant\ngi436admin\ngi187admin\ncorpi\nwww.terra\nlamoon\nbudgetdecoratingadmin\nmusix\nmuseo\nweddingsadmin\nkeralam\ngi420admin\nencrucerosadmin\ndilan\nimportexportadmin\ncrkut\ncollaborationadmin\nmotos\ngi314admin\ngi300admin\netfadmin\nafricanculturesadmin\ntech.team\nshuzai.in-fisherman\nbbcultures\nlocalfoodsadmin\nkabaka\nfeeds.beta.nytmy\nnachi\nmenus\npaltalk\nkidclubsadmin\nmentors\nkacang\ngi431admin\ndmail\nkpax\ngi182admin\nphotographyadmin\nmichaele\nmusicamexicanaadmin\ncyganka\nbiotechadmin\nsocialworkadmin\noulfa\nwww.bs\nredvampir\nportablesadmin\ngosanfranciscoadmin\nhepatitisadmin\ndodaj\ncalgaryadmin\ntavera\nwww.geography\nsacramentoadmin\nlatex\nadvertisingadmin\ngermanadmin\nlapaz\ndolar\nhomeparentsadmin\nizone\ndonat\nel7ob\nrichinnyd\nwww.divine\ndoyen\njoyas\nelemailadmin\njohny\njogos\nehome\nlogin12\ngi308admin\nsearch.beta.nytmy\nfafaz\nowais\nwww.cyprus\nfahid\nbbhealth\njudaismsladmin\nbondsadmin\nkathy\nbestofadmin\ntxsearch\nherbsforhealthadmin\nbuddhismadmin\nfalak\nirshad\nfanna\nbejoy\nbismarckadmin\nfara7\nfaqih\nfarad\niskra\ngoswitzerlandadmin\ncocktailsadmin\nheemo\nfbitb\noncologyadmin\nfatik\nwww.tecnicos\ngeneticsadmin\nfauzi\njithin\ngi425admin\nanimatedtvadmin\nfayez\nfazal\nekrem\nduhok\nbeautysupplyadmin\nwasp\njeans\ngi176admin\ncomputersadmin\nelmir\nhumer\nnightcrawler\nmobilecouponsadmin\nelove\nscubaadmin\njavis\ngolondonadmin\nkaname\nartsandcraftsadmin\ntranslations\njacks\njabar\nclks\nbahaiadmin\nwww.create\nkamran\nferas\nigirl\ntourismadmin\nbarto\nfetka\nelectricpoweradmin\nrahma\nalesa\nherbsspicesadmin\nsurgeryadmin\nmacsladmin\nerfan\ngi79admin\nhimanshu\nkarami\nictus\nsuperheroes\nfikri\ngi293admin\nsexcerbobi\nicast\nmasterman\nfiras\nicaro\nspaceadmin\nabhilash\nertin\namarilloadmin\nwww.add\nguitaradmin\nwww.wowinfo\ngraff\ngalib\npainadmin\nneworleansadmin\nfitzy\nshuzai.africanhistory\ndivingadmin\ngardeningadmin\nwww.neptune\ngi269admin\nchemengineeradmin\ngi419admin\nrealptc\nrarediseasesadmin\ngi171admin\nhabbi\nsomaadmin\ntxsshgateway\ngazal\nchildrenshealthadmin\nfamilysladmin\nrandbadmin\nbmcmail3\nmazinkhalil\nlandlordsadmin\nkatrok\nwww.animezone\ngi97admin\nyahoo360\nfname\nnegociosadmin\ncrosswordsadmin\nestec\nfixit\nchandni\ngamex\nalfars\ngamet\ngalax\nfeathers\nwww.coches\nhabboisland\nwww.server3\ndrunk\ngmcj\nwww.thevoid\nstatic.hdw\ntoss\nmoodleold\nwww.promotions\ncurly\nrammstein\ndjmax\nwww.expresso\nfreds\nwww.selenagomez\nalessandro\nsusa\nfrisk\nwww.dinamic\nporki\ndanes\nhacki\ncitec\nhacko\nharay\nhacky\nbross\nwww.theclub\ndamascus\nbonne\nhaise\nhakar\nbline\ncassa\nasnet\nhakki\nbijou\nwww.oldschool\nanunt\nalinea\nhamdi\npalomino\nvdp2\nwm5\nbigmike\nz20\nkenmore\nambar\nwww.webmasters\nalain\nphpmy\nparallel\nbandy\nlop12a6\nbball\nnwp\nsportclub\ngermain\nboualem\nwww.videochat\ngjwap\nwww.chrome\nclaremont\ngmale\nwww.tga\npelco\nwww.brasil\nsekhmet\ntns9\ntns8\ngnews\ntns7\nterraria\ntns6\ngohan\ntns5\ngogol\ntns4\ntns10\nnero10\nmagyar\nwww.encyclopedia\ntecnicos\ngoogl\nwww.maestro\ncerebro\nrocklee\nfrenz\nwww.valentina\npokemonworld\nproweb\nblogspace\ntransportation\nwww.water\nely\nwww.cancer\nwww.miniclip\nwww.turbo\ncyhwyyx\nwww.tsweb\nwww.thesimpsons\ncoldplay\nmegajuegos\nwolfer\nsexygirls\nibda3\nsuhani\nwww.arcade\nwww.smile\nichal\nmindcontrol\nwww.simon\nnhatlinh\ndso\nceleron\nfindfriend\ntranslators\nwww.remix\nidris\ntne\nmetepol\ngamesource\nwww.raman\nweb4you\nwww.rahul\nsendibadtv\nkolumbus\nrafay\nwww.radyo\nwww.animes\nwww.animax\noverkill\nwww.plati\nwww.autoresponder\nobsolete\nwww.oscar\nnidalstyle\nwww.piano\nwiiworld\nmeloode\nzone-ghost\nwww.opera\nbestptc\nraytech\nwww.peter\njadid\nfrederic\nsenegal\nmland\nalnoor\nalhamaty\nwww.ocean\nsantuario\nrockshop\nwww.niche\nwww.albert\nnacho\nseries\njanne\nmarketingonline\ntetsu\nitworks\nwww.society\nmuro\nsonia007\nchebdal\nwww.mazda\nwww.godofwar\njawad\nprv\nwww.laura\nwww.laila\nwww.videoclub\nkristoff\nwww.joker\nlagrange\nstacey\nhunny\nwww.https\njockey\nrunescapeforum\nautismo\ngamemaker\nwww.lincoln\ncheckme\nupton\nwww.igame\nwww.violetta\nwww.ictus\ndoubler\ngigantes\nwww.gtaiv\nmito\njenna\n1direction\nnad\njerin\nintan\nrevenant\nwww.glory\nwww.hakim\nwww.hades\nmedalofhonor\nratki\nwww.habbo\nwww.fresh\niraq8\nwww.active\nwww.ourspace\nmodiran\nwww.etech\nstem\njimmi\nbadgirls\nknightonline\nwww.concept\npopolo\nfranki\nsese\nmysms\nwww.lighthouse\nmaja\nmago\nwww.curso\nwww.eddie\nredz\nmosafer\nkanak\nextasy\nwww.crane\nkamon\nkeshav\nirwin\nwww.cobra\nwww.class\nwww.clans\nwww.chile\nwww.ayoub\nwww.chevy\nwww.cheat\nkatie\nolis\nwww.blink\nwww.askme\nlawa\nkethek\nlaera\nclf\nkikki\ndescargar\nwww.alexa\nmirc\nlino\nwww.toyota\nkedar\njavaworld\niranian\nledo\ndescarga\nkern\ntmtest01\nkaya\nwww.bazar\ngandhi\njlca\nwww.dentist\nempireearth\nns85824\ndznet\nwebmail.deepsron.com\nfeta\nwww.sebastian\nns1.vps2\ndarkmoon\necco\nkhoso\nns2.vps2\nkiman\nkilla\nkingm\ndarkhero\nkingz\ncora\nwww.medalofhonor\ncica\nkanika\nbows\ncapo\narca\nholo\ncomunicate\nenduro\nwww.yuri\njtech\njudgement\nbaccarat\ncarlosr\nfallen\nlatef\njvc01\njoomla3\ntraveling\ncareful\nwww.mario\ncaramba\ncapitan\ndorcas\ncyber7\nbdp\nklotz\ncemolo\ncancion\nknihy\nwww.wtf\nharpreet\nwww.wms\nluckylife\nwebgame\nwww.why\ndineshkumar\nemtoi\nwww.uli\nwww.tomodachi\nkolas\nwww.svm\nwww.sao\nwww.rgp\ncuervo\nsoufiane\ndeathnote\nloikili007\nwwenews\nwww.mrs\nforumnet\nwww.met\nliana\nwww.jessie\nwww.mac\nwww.needforspeed\nwww.kms\nfedaa\njmed\nwww.kia\nxerumide\nwww.jos\nstarpage\nwww.whatever\nmadhu\nduniamaya\nhairstyle\ncreare\nsciencetech\nmal3b\nwww.gts\ncratos\nmahsa\nlirik\nwww.cookie\nwww.tmd\nmajed\nwww.ggg\nwww.dys\nmysteryman\nmortalkombat\nwww.bulldog\nwww.eli\nmall3\nfreez\ndextra\ncompro\ndetodo\nwww.blk\ndesing\nwww.asd\nmandi\nwww.afb\nmandy\nwww.reptiles\nprotektor\nmagictricks\nemedical\neuros\nmanoj\nmannu\nfcall\nmanos\nmansa\nmansi\nmarah\nfaruk\nmark2\ndrxox\nbigfish\nven\nuli\ngoodwork\ntga\ntcr\nsil\nros\nsdn\nrct\ntamlym3ak\nghazali\nbodega\npkr\nvideoclub\nmazin\noli\nksd\ncustomer-service\njus\ncybercity\nkursi\njmt\nvideo15\nixa\nsoliman\nwww.illuminati\nmatban\nmemet\nwww.nicolas\nwww.rentacar\ntimbo\nlokee\nloker\nhbb\nincidencias\nabomosa\nforum2009\nluckyweb\ncamara\neht\nsalvatore\ncnv\nmgl\nvampires\ncfn\ncff\ncfc\nbmp\nwww.daniela\nwww.agricultura\ndiastery\nadt\negeli\nkzone\nwww.easymoney\nwww.carpediem\nbelzebuth\nmp110\nwww.computerfix\nwww.hollywood\nwww.mad\nnadal\nandrex\nbeaute\nnaeem\ncrisis\nburma\namauta\nminou\nventura\nalexei\nnajem\nwww.hackers\nknyexchg\nknysaprout1\nbugsbunny\nmisto\nbarcha\nbarber\nnanou\nmusicweb\nwww.pin\nmkhan\nsomos\nbander\nsolteros\nisem\nmusicislife\nwebdisk.md\ncheat\nabdelghani\nhabbovip\nwww.melissa\nwendell\naguila\nvacaciones\nwww.on\nwww.pspgame\nthelegends\nmouhcine\nmediaplayer\naskme\nlutfi\nwebdisk.cdn2\nartec\nredhill\nactual\nwww.allstars\nwww.veda\nhankook\nanthrax\ncolumbus1\nunitel\nredrum\nnesta\nvendo\nguillermo\nwww.brainstorm\nmonem\nmastergames\ninfocom\nlovemusic\npleyades\nyoyogi\npspgame\nwww.habbomusic\nwww.tips\nwww.michelle\ncom1\nlukoil\nwww.conquerors\ntodogratis\nstreetart\nwww.gamemania\npacifica\nkakamilan\njustchill\nnjoel\npctech\nthunderstorm\ncocacola\nspektrum\nhaseeb\nwww.toledo\nyale\nmulya\nwww.myhome\nwww.dragonball\nvals\nsnet\ntato\nfederal\nsiac\nshai\nlaluna\nsahmed\nropa\nseni\nlamrfe\nagricultura\npatr\nmycar\nnola\nlugo\nyousha\nsalsabil\nkiya\nkits\nkarn\nnoor1\niori\njavi\njams\nnosil\ngyym\nmypic\nidee\ngoma\nsam4u\nglob\ndarkempire\nersa\nsaied\ngabo\nadmix\ndhruv\npacio\npadam\neddi\ncros\ncres\ndien\npalms\ndex1\nbunk\ncrazy1985\nsama7\ndjromeo\nbrea\nceto\ncreat\ncarp\ncamu\nasch\ndidac\narbo\njuanes\naime\nadas\nwww.noname\nokkut\nwww.profit\nguild\ncomputerfix\nahmed12\nmygames\nokrut\nsania\ngreentech\nwww.blacklist\nwmm\nfalloutboy\nvsm\nwebsales\ntbt\nrox\neducadores\npfc\ndreamspace\nnnc\nhumbert\nricardogarcia\nklz\nhttpwww\nphani\nknc\nklk\nlcd\njpc\njfs\nrunescapeforums\nhim\nwwjd\nfpi\nevl\nfez\norkot\norkul\ndvitre\nend\nfae\nedr\ndng\nebg\npiwky\ndekza\nqasta\ndjg\naliali\nbso\n8638521\nbmf\nra3ed\napr\napg\nbdo\namm\njunaid\naby\nowned\ngodigital\npublico\nthecrew\ntimeweb\nratchet\njunjun\nmanagua\nwww.radios\ntrad\ncircassian\nwarhammer\nvermillion\nwww.webchat\nqf\nposti\nvivek123321\nalraqqa\nwww.freelancer\nwww.you\ntrucker\nnarutox\nozono\ndragana\nyut\nmismail\ntph\njurgen\nshor\nprofu\ntio\nsah\nrhp\nrey\nrfc\npsr\nrpc3\npk2\nntr\nola\nramzi\nnsn\nloveorhate\nrasha\nratti\nkkxiaozi\nmvr\nmsr\nmro\nrazer\nsabr\nkmz\njol\njml\ninu\nhoc\ngsi\nhec\npandata\ngmh\nfsr\nshahad\nputri\neti\nppc4\nept\nreema\ndnf\ndhp\nbtr\nclg\nbsp\nmyideas\ndao\nrenda\nbsb\nazr\ncif\ndalex\naliahmad\nalm\nakp\ndavywavy\nagentx\nbag\naia\nafb\nd66\nsabah\npapiro\nnaranjo\nwww.vvv\nju\nsadiq\nsafar\nsafin\nsaida\ncalton\nwww.futurama\n4g\nrishi\n4c\nsakil\nwww.e-commerce\nclipping\nsamad\nhyla\nreademail\nslcam\nfortimail\noferty\nipad1\nwww.garden\nutt\nriyad\ninf2\nsaveearth\npressrelease\nrizki\nj9\nagra\nscada\nlinuxmint\nwww.chennai\nsawaw\nnoida\nsso1\nscoot\ngotr\ntoletol\nlektro\nwww.planning\nwww.acc1\nwww.housing\neia\nsweett\nopenview\nseo11\nwww.startup\nseksi\nco2\nedir\nsimplet\nwww.pstc\nkm1\nsqlweb\nsetyo\nromio\nromka\nintermedia\nwww.road\nwww.disa\nwww.eso\ntws\nwww.doe\nshaan\nshafi\nshaft\nlove177\nwww.csh\nshanu\nshari\ntcdms\nwww.fbm\nfath\nbizinfo\ndorm\nshery\nines\nkuchnia\nhttpd\nfrango\nwwwd\nshone\naccessedge\ntablo\nwww.mrtg\nshared1\nnode0\ntextads\nbobby\nshank\nsaludmental\ntamas\nsharj\nwww.grd\ntabaco\nbugg\ntapan\ndanc\ntarak\ntareq\nwproxy\nonlinegate\njw1\ncans\nlibserver\nfraser\nclippers\nwww.camping\nchampionsleague\nkolchi\nsportsbetting\nnrl\nnbl\nlisty\ndomeniu\nwww.xr\nwww.listy\nxr\nwww.omni\nlabtest\ncatarina\nl212\npazar\nwww.standard\nshida\nvideo123\nkonici\nsoft1\ndopuna\nl209\nadar\nabid\nlogistica\nshoponline\nbegood\nsome1\norice\ncti\nct2\nspidy\nfraktal\ntwww\nmailsend\nnpm\nfpt\ns434\nstarnet4\ns430\nkopral\nthoma\ns420\ns414\nbbk\ns442\ns441\ns439\ntinku\nplaygame\ns438\nwww.versuri\nversuri\ns437\ns436\ns435\ns433\nsuperpixel\ns432\ns431\ntlee2\nrfaxa\ns429\nluminoso\ns428\ns426\nsumer\ns424\ns421\nformations\nvideosex\nwxinlin\ns419\nsaber123\ns418\ns417\ns416\ns415\ns413\ns412\ns411\ns410\ns403\ns402\ns401\ns339\nbiohazard4\nkpreet\ns406\nrendy\ns342\ntalal\ns334\ns333\nlibana\ns331\nthechosenone\naskar\ns315\ns309\ns308\nkenza\ns307\ns306\ns304\ns303\ns302\nttttt\ns301\nnoujoum\nsigmini09\nserdar\nmongol\naldous\ncadou\nwb407\narnet\ns320\nstar50\nwww.mmc\nmailbk\nstar10\nwww.aed\nparas\nwww.consumer\nmla\nsanerdex\nfragile\naed\nvhera\nlightz\nwww.cpe\nvibhu\nwww.mrb\nusama\nalpo\nkomak\nbackup-1\nneza\namiga\nkaker\ntins\ncopia\nroko\nvarsity\nnavdeep\nslr\nrsv\nirp\nviswa\nsombrero\nmobiplanet\ncapacita\nwapbd\nwwwi\ngoldendragon\naser\nwww.aser\nvlado\nfoton\nhojo\nforen\ncubic\ncodon\nmadani\nwww.wind\nconvict\nduesseldorf\nwebku\nrecht\nriverdeep\njohann\nwww.tony\nericl\nwww.emploi\nintercambio\nbevan\naei\nxxq\nwww.grad\nbepro\nshabeer\n973\nprolog\nwww.classified\nautoconfig.shopping\nautodiscover.advertising\nosodaleslam\nautoconfig.assets\nautodiscover.assets\nautoconfig.advertising\nloire\nautodiscover.shopping\naccountmanager\nmaicol\nmbe\nwww.company\nwww.idea\nmahome\ndb13\nshadowx\nwww.riv\nlisboa\nfriday\nvm53\nvm18\nvm17\nstaralarabe\nvm16\ntriskelion\nvm15\nmakeit\nvm19\nxawer\nshafqat\nlivejournal\nvipdosug-ac1\nforte94\nmall50\nmall52\nmall59\nmall61\nmall62\nmall63\nsmtp.be\nmalice\nhsmtp\nmath4\ncheeta\ndivis\nsfecm2\nlittos\nsfecm1\nups2\nmanishjain\nmp3find\nkrusty\nclientstorage\nsvc2\noff6\ntfe1\nmaniek\nmanpda\nproxy.whois\nr4v37t\nwqdxa\nbalan\ncam6\nsfe5\nginko\ntoubib\nsfe1\nnetdot\ntokyo-hot\nbabui\nq23\nq14\nq13\ncrozet\nq12\nq11\naudiodrom\nghost-zone\no14\nmarlin\nchosta\no13\no12\no11\nda20\nwtaty\nsfe2\nshop.new\nmp3list\nvipdosug-ac6\nsarina\nvipdosug-ac5\nvipdosug-ac4\nvipdosug-ac3\nvipdosug-ac2\nyasso\naayushi\nmasoom\nforimage\nyazan\nsigmini\nmail.server\npinterest\nac3\nivrstat\ntest2.shop\noff5\noff4\noff2\noff1\nbill1\ncp-epay\nload.support\noff3\nfr.staging\nes.staging\nwww.inside\nbarencevo\norkutcommunity\nttg\nmickael\nextranet-test\ntravelfree\ntcn\nfacturation\nsql6-replicat\nsql-dell-i30\ntorkica\nsubby\nafonso\neh4-i\nntp-int\nparsa\nftphosting\neurorack\nvaraujo\nthaer\ntibialogin\nbaise\nzahid\nsql2-replicat\ngameloft\nlaurenttest\nludo3\nzargo\nflashtrack\ntunisian-hacker\nzm1\nnewton.phys\nlocalhost.hist\nlocalhost.geol\nkooora\nymail\nlocalhost.chem\nnewbux\nlocalhost.biol\nkumar1\nlocalhost.soc\nhackersun\nlocalhost.psy\nlocalhost.med\nlocalhost.cns\nlocalhost.maths\nnewstaff\nghoghnoos\nlocalhost.ciel\nzeroo\narbuckle\ncherkessk\njm1\nghostbd\nblueeyes\nwww.kis\nquiosque\nxxx4u\nautodiscover.users\nautoconfig.users\nwebdisk.users\nlinuxserver\nkarlos\nbah\ntest1000\nmobsite\nabodi\nwebopac\nvpn100\nassets0\nwww.mapy\ninternode\ngames-online\nfizyka\npolitika\nradman\nwww.mage\npublicsite\nagc\nonlineserver\nappservices\nstratusbeta-pns\nstratusstage-pns\nrajendra\nakrimnet\nmyproxy\nprofilesyahoo\nppccore\ntot3\njm15222\nsmers\nsupertimes\nhawkeye\npanida\nthabet\nzohar\nreham\nvpsisgred\nokazii\ntimur\nrenovat-e3\nmohanagy\napc03\nvikrant\nhnode-iberonet04\nmaguire2\npalace\npakida\nroyalking\nstech\ntrouble\nmusick\nclifton\nstartimes5\nstartimes3\nnetsupport\nministryofsound\nrogermase\nmronline\nrajsite\nloginn\nwqdfa\nsymbian\nmyshare\ngames4you\nkarrox\nrunescape3\nvalentino\nmetal2\nlangzii\nlwfchn\nmfkggi\nrincewind\nmysite1\nsaurav\nguitars\ntahichi\ndownloadvideo\nwinjie0618\nlololo\nwilliams\ndawson\nsuomi\nmyteril\nrapidsharee\nlosans\nsmoka\nmytimes\nzabarom\nshantou\ndesiworld\nmystuff\nelking\nlarachesat\n4islam\neleicao\nmegaonline\nvactin\nsatheesh\nrickyroma\ntoxicity\njesske1990\ndeepanshu\nmichel\nwolfstar\nsmilies\nluiscarlos\nridah\nhoangtan\nhabbomania\nbazooka\ngemstones\nstar-forum\nmylogs\nnounou\nmylist\nmeriberas\nvivekanand\nfatakata\nyasirweb\n4algeria\nkadra\nawfda\nblackfoot\nrifai\nbhavinpatel\nhabbobeta\nmyhack\nmall60\nforumstar\nnejasno\nloginpage\nbisnisonline\nmall51\ncodebase\nfrncisa\nserver100\nserver123\nxxenik\nslimshady\nmirela\nshahbaz\nnoldor\npraneeth\nrahul123\nproxyvn\nnbaztec\nmithun\nneural111\nelattaf\ngandhiji\nelghedir\ngandistq\nanydvd-serials\nsindbad\nthebestforum\nharbour\nsmartconnect\nmetka\nrajkumar\nfreegifts\nteguh\ngmaillogin\nnassim\nmyupload\nsupratim\nnader\ndarkwing\nnazari\npassreset\nhayder\njiangfan\ngiglio\nfacebook22\nrafaell\nbandhan\nirancell\nomany\numang\nt-online\ntestforum1\nmrali\nmadworld\nkissmp3\nversasex\nstartimes22\nstartimes07\ncertified\nshubham\nwhitenoise\nserial88\ndigitech\nkiller1\nnod32-crackdb\nlvivka\nmistery\nsafezone\nbatumki\nmontadana\ntrebor\nbatuhan\nuniqe\nxiao77\naviemore\ntounsi\nsestrada\ndrsonia\ntopreplica\nvenky\njopasaran\nsajal\ntravel1\njohanna\ndetyatko\nbiohazard\nteddybear\ngoldeneyes\nneobux\ntupola\nnorton-serials\naccident\nshobhit\nprasanna\ndz-down\nnitesh\norkutlogin\ndanghuy\nrajatarora\nchlorine\neasyjobs\nkalpana\njakitan\nb8000\noutreach\nhunterxhunter\nfaksoma\nnimesh\ncimislia\nnaveen\ndarbuka\nngetes\ncaqer\nblacksea\nhacktrack\nalbaraa\narab-4ever\nloginorkut\nwasim\nwebtimes\nasuna\npritish\nviyeu\nsouthtown\nabdulla-raid\nthespider\ncarnaval\nwap4u\nprinces\nvipin\nusher\nforum4sobe\nmadina\nsaleswwo\nfeel800628\nsoftech\nppls-y2lab-202.ppls\nsrv105.csg\nhca-netprint-bw8.shca\nhss-hca-0015.shca\ncsg-pps-0011.csg\nmvm-ri-l107136.roslin\nnimbus2\nppls-y2lab-207.ppls\nhss-hca-0009.shca\nngocha\nhss-hca-0021.shca\nppls-y2lab-213.ppls\npsy-adlab07.ppls\nwww-test.epeople-fin.humanresources\ncsg-hr-0021.csg\nsci055.scieng\ncsg-srs-0003.csg\nwapas\nhss-hca-0026.shca\nppls-igel-2-01.ppls\nfunction\nsas-cas-0083.sasg\nprithvi\nnhatky\ncsg-corp-0002.csg\ncsg-as-0000391.csg\nnightstalker\npps-xer3.csg\nclickone\nmvm-ri-d097063.roslin\nmvm-ri-l615158.roslin\ncsg-fin-0091.csg\ndsb-g-1-mfp-reader.ppls\nmvm-ri-d087171.roslin\nsas-cas-0077.sasg\nmadhav\nbillard\nhotmaillogin\ncsg-est-0197.csg\nhss-hca-0032.shca\npasswords\nhotmaill\nparashar\ncsg-fin-0036.csg\nfrisco\nris-valx02.roslin\nppls-pc31.ppls\nhss-hca-0037.shca\nhss-health-l27.health\nsas-cas-0072.sasg\nhca-lab3-mac30.shca\nphhh-g-lab-mfp-col.csg\nkinka\ncsg-fin-0086.csg\nwww-test.vle\nmopeda\nhss-hca-0103.shca\nsas-reg-0163.sasg\ndanniel\naap071.sasg\nnewell\nml-3-openplan-mfp-col.sasg\nmvm-ccbs-060164.ccbs\nccnsm076.ccns\nalberic\nsas-cas-0066.sasg\nglowwebcast.trg\nppls-sem-0001.ppls\nredhacker\ncsg-as-0000781.csg\nmvm-ri-d086168.roslin\nhss-hca-0043.shca\ncsg-fin-0146.csg\nradioplus\nmsprevak-mac.ppls\nhca-lab3-mac24.shca\ncsg-est-0025.csg\nassociations\ncsg-as-0000841.csg\nsas-alumni-0017.sasg\nsci162.scieng\nmegavideo\nuseless\nhss-hca-0048.shca\nsas-cas-0064.sasg\nppls-igel-4-01.ppls\ntravianbest\nkingpin\nsce-coll-0051.scieng\ncsg-est-0075.csg\nharakiri\njack007\n9hps-2-206.csg\nstayfree\nhca-lab3-mac18.shca\nsec06.roslin\nblahblah\nmspace\nltsmeet.lts\nkishore\nwww-beta.events\nvertu\nhss-hca-0054.shca\ncerc-d002.roslin\nsce-coll-0015.scieng\nsci126.scieng\nsas-cas-0055.sasg\nunpef\nvcs-lap-167201.roslin\nmvm-ri-i055152.roslin\nhss-hca-0059.shca\nmvm-ri-d106023.roslin\ntwitt\ncsg-est-0185.csg\nhss-ppls-0005.ppls\nbems-011.csg\nmvm-ri-l076063.roslin\nyoucandoit\nhss-hca-0065.shca\nhss-ppls-0079.ppls\nwww-tmp.vle\nhca-lab3-mac07.shca\nresolution\nmvm-ri-l105188.roslin\nhealth-omq-012.health\nrii-105168.roslin\nbarada\noc-3-corridor-mfp-col-2.csg\ndallas1\nmvm-ri-i075019.roslin\nscico\neeg.ppls\ncsg-est-0245.csg\ncsg-est-0304.csg\nmvm-ri-d116235.roslin\nmoneymaker\nsas-cas-0038.sasg\nhealth-omq-037.health\ntelus\nserviceit\ntralala\nint-jet14.sasg\niknowyou\nhss-ppls-0011.ppls\nhss-hca-0071.shca\nhca-lab3-mac27.shca\nwww-dev.eit.finance\ncuonline\nhss-ppls-0096.ppls\nyu-gi-oh\ncsg-est-0305.csg\ncsg-est-0029.csg\nclaret.ppls\nfuckyeah\nms-dw6-3-pg-mfp-col.health\nhaggis.cache\ncsg-est-0244.csg\nalton.ppls\nsas-cas-0033.sasg\ndropdead\nsci101.scieng\nmvm-ri-d134249.roslin\nmvm-ri-d117194.roslin\ncsg-est-0184.csg\nthemastermind\nmvm-ri-l115187.roslin\nppls-y2lab-131.ppls\n23wpc-g-siteoffice.mfp-bw.csg\nclaudiu\nfreddie\nmvm-ri-l117089.roslin\ndadada\ninvestigator\nhss-ppls-0016.ppls\nhss-health-0120.health\nmercadopago\nmunish\nml-3-reception-mfp-bw.sasg\nroslin-dc2\nmvm-ccbs-060207.ccbs\njaskaran\ninspiron\nhss-hca-0076.shca\nprodent\nsas-cas-0047.sasg\nppls-pgpc37.ppls\noc-1-r210-mfp-col-1.sasg\nreconnect\ncsg-est-0134.csg\nppls-y2lab-125.ppls\ngemilang\naap119.sasg\nhelping\nhss-ppls-0022.ppls\nsas-cas-0022.sasg\nmvm-ri-m107111.roslin\ncsg-est-0074.csg\nhss-hca-0082.shca\nppls-y2lab-119.ppls\ncsg-fin-0205.csg\nlel-power1.ppls\nppls-psy-002.ppls\naligator\nsas-cas-0016.sasg\ncsg-as-0000840.csg\ng2cpx1.ccbs\nbambina\norgasm\nstruga\nscoda\nhss-ppls-0027.ppls\nmvm-ri-i065092.roslin\nreflector\ncsg-est-0024.csg\nppls-y2lab-114.ppls\ncsg-sss-0007.csg\nvcs-127149a.roslin\nmvm-ri-l134242.roslin\ncsg-fin-0145.csg\nsas-cas-0011.sasg\nnasa10\ncsg-as-0000780.csg\niahe-2k3cesrv01.roslin\nfeitian021\nppls-y2lab-108.ppls\nmvm-ri-v105232.roslin\nvcs-126039a.roslin\nsas-cas-0005.sasg\nphstl-2-managers-mfp-bw.csg\nppls-y2lab-103.ppls\nhss-health-l63.health\ndragonfire\ncsg-fin-0035.csg\nalessio\nhss-hca-0087.shca\ndemopc01.ccbs\nmvm-ri-d107205.roslin\nhss-issh-l1.health\nmvm-ri-d115231.roslin\nrii-055147.roslin\namilcar\nris-lx13.roslin\narmas\nmaroc4ever\nris-esxi05.roslin\nsaada\ngfl105247.roslin\ncsg-corp-0001.csg\nvc-g-shop-mfp-bw.sasg\nhca-jpglab-015.shca\nmvm-ri-d107215.roslin\nlect-health-004.health\nhss-hca-0093.shca\nppls-mcguire.ppls\nmvm-ri-d125042.roslin\nsas-chap-0003.sasg\nunblock\nmvm-ri-i055209.roslin\nris-lx03.roslin\nmishra\nsourcecode\nmvm-ri-i065031.roslin\nmanoo\nmishka\nzuikong\nmvm-ri-l085047.roslin\nnajeeb\nfusilli.ppls\nanamuslim\nsuperfoto\nris-lx12.roslin\ncsg-pps-0009.csg\nfblikes\nnpatel\nvis014.sasg\nsas-cam-0026.sasg\nhss-health-l53.health\nsurendra\nebri043198.roslin\nsci019.scieng\nriv-amxmodero.roslin\nmy-world\nvis008.sasg\ntrang\npraveen\nmall17\nmvm-ri-l125245.roslin\nhss-hca-0098.shca\nnadina\nsas-cam-0021.sasg\nmygame\nbeshoy2050\ncsg-hr-0050.csg\nmyfree\nwheeler\nvis003.sasg\nnewhaven.scieng\niad-pc19.iad\nmvm-ri-d127086.roslin\ncsg-cse-0058.csg\nhss-iad-0032.iad\nmikado\nhss-ppls-0044.ppls\nnavin\njackiechan\ncrystalx\nsas-cam-0015.sasg\nmvm-ri-d097174.roslin\nlaptop-gmiller.health\nmvm-ri-l087102.roslin\nwhitesnake\nppls-monmac.ppls\nmymate\ntextiles\nhss-hca-0114.shca\nas-lock-001.csg\nhackman\nris-backup.roslin\ndns1.inf\ncripple\nnewsecure\nhca-jpglab-010.shca\nloginfb\nwww.estores.finance\nmvm-ri-sx01.roslin\nris-vlxweb11.roslin\nhss-ppls-0049.ppls\ndoga\ncsg-cse-0056.csg\nsce-coll-0025.scieng\nmohandsen\nmangal\nmvm-ri-d075153.roslin\nwww-dev.admin.eves.myed\nrajiv123\ncsg-cse-0006.csg\nsas-cam-0004.sasg\ncsg-hr-0052.csg\nairline\nthebridge\ntextbook\nris-ifs3.roslin\nlalolanda\nmvm-ri-d136101.roslin\ncyanide\nhss-hca-0119.shca\nsas-sra-0028.sasg\ncsh-2-2.14-mfp-col-1.csg\nmydesign\nwww-trn.ess.euclid\npps-xer4.csg\nmialee\nholyrood\nhss-ppls-0055.ppls\nppls-printer11.ppls\nhss-hca-0125.shca\nsas-cas-0075.sasg\nsujay\nwolfi\ncitrixweb\nhss-hca-0101.shca\nrim-076017.roslin\nsonyvaio\nwoolf\nrip-brfm5.roslin\nebrd075073.roslin\nlokesh\ncsg-est-0106.csg\nmetals\ncomputerworld\noldbryght\nmvm-ri-d067183.roslin\nhca-mfd-003.shca\nbackground\nhellfire\noc-3-corridor-mfp-col-1.csg\nscarface\nfishies\nms-dw6-g-1-mfp-col.health\nchris.temple-lib-web7\njasonwu\ntempleton-dev\ntemple-lib-web.temple\ngroovyonline\nebri073195.roslin\nlogin7\nhss-health-vaio.health\nlive.dosomething\nsci065.scieng\nstill.temple\ncsg-est-0207.csg\nmotorsport\nipswap\njarvis\nmvm-ri-l115162.roslin\nmoleman\nccintranet\ncsg-est-0243.csg\nmvm-ri-d125087.roslin\nmenber\nppls-y2lab-015.ppls\noldlinode\nint-usbmac11.sasg\ndelphine.temple-lib-web7\ngreatist-legacy\ncivil-rights.temple\nzumba\nmeknes\nmvm-ri-d096140.roslin\nstampy\nfacebookalbum\nmelani\njavachat\ncsg-est-0183.csg\npanela\nsas-leaps-mac1.sasg\nppls-y2lab-009.ppls\nwww.admin.drps\nebri083204.roslin\nsas-reg-0129.sasg\nzstar\nlindo\nmvm-ri-d136045.roslin\ncsg-pps-0012.csg\nppls-printer16.ppls\n5forrhill-c-c20-mfp-col.sasg\nssl38\nzonex\nphcc-g-trades-mfp-bw.csg\nlect-hca-009.shca\nzonda\nip-40.138\nbabait\nppls-y2lab-004.ppls\nppls-igel-3-01.ppls\ncsg-est-0073.csg\nwww.tqintra.dev\nfacebookvideos\nflipbook\nhss-health-0109.health\nclass1\nriv-hd2.roslin\nlect-hca-004.shca\ncsg-fin-0194.csg\nmvm-ri-m126083.roslin\nris-vlxftp01.roslin\ncsg-est-0023.csg\nwww-dev.epeople-fin.humanresources\noldies\nhca-escreen-05.shca\nredhot\nmedhat\ncsg-sss-0006.csg\nbigfm\ncsg-fin-0144.csg\ncsg-as-0000778.csg\nhss-health-l37.health\ncsg-hr-0047.csg\nris-vwlx03.roslin\nmvm-ri-d115195.roslin\ncsg-fin-0084.csg\nhss-health-0023.health\nmvm-ri-d096210.roslin\n13infst-2-openplan-mfp-col.csg\nmvm-ri-d126046.roslin\ndiscounts\nchan-1-gu438-mfp-bw.ccbs\nsrv016.csg\nangrybird\nmvm-ri-d096068.roslin\ntortoise\ndev.services.learn\nsce-coll-0061.scieng\ncsg-saf-0021.csg\namprint.lts\nuhs002.sasg\nmvm-ri-l096142.roslin\nhss-hca-0100.shca\nmvm-ri-d127009.roslin\nhss-health-0107.health\npsy-pc024.ppls\ntest.scieng\nhealth-omq-022.health\ncsg-pps-0008.csg\ned1st.csg\nmvm-ccbs-060423.ccbs\npps-xer1.csg\nforensic\nmermoz\nsrv045.csg\nzsmtp\nwww-dev.myed\nwww.esp.myed\nqmail1\nsas-cas-0020.sasg\nstewartmacair.lts\ncsg-hr-0048.csg\nmvm-ri-m096007.roslin\nmvm-ri-l117232.roslin\nris-pvnb01.roslin\nhss-iad-0031.iad\nsas-bu-0042.sasg\nhss-health-0129.health\ndcmobile\ndns0.inf\nmontezuma\nonline-games\nnotes2\nreg-jet48.sasg\ncsg-cse-0055.csg\nkurama\nwww-dev.suppliers-admin.finance\nwww.psc\nebrsqlsrv2.roslin\nsas-bu-0036.sasg\ncsg-cse-0005.csg\nsas-bu-0031.sasg\nxzone\ngamespot\nhandc-pc66.shca\ncsg-fin-0202.csg\nsas-bu-0025.sasg\nvpn118\nvpn119\nvpn122\nvpn123\nvpn124\nhca-tlab-023.shca\nsas-bu-0020.sasg\nhca-tlab-017.shca\nhss-ppls-0077.ppls\nvpn101\nvpn102\nvpn103\nvpn104\nvpn105\nvpn106\nvpn107\nvpn108\nvpn110\nvpn111\nvpn112\nvpn114\nvpn115\nvpn116\nvpn117\nvpn120\nvpn121\nvpn125\nvpn126\nhss-health-l73.health\nvpn109\ncas-mlb3-013.sasg\nmvm-qmri-0113.roslin\nhca-tlab-012.shca\nauction2\nkusa\nsas-bu-0008.sasg\nmvm-ri-d096114.roslin\npcntterm1.ppls\ncas-mlb3-007.sasg\nmvm-ri-d107225.roslin\nema5.ppls\nhca-tlab-006.shca\nksh\nhealth-lap67.health\nsas-bu-0003.sasg\ncsg-est-0242.csg\ncas-mlb3-002.sasg\nper-jet11.iad\nnexen\nppa011.ppls\nhca-tlab-001.shca\ncsg-est-0182.csg\nmvm-ri-d125240.roslin\nsce-coll-0009.scieng\nmvm-ri-l096177.roslin\nwww-test.courses.myed\nwww.epeople-fin.humanresources\ngetlink\nziani\namaterasu\nmvm-ri-d086044.roslin\nmvm-gf-l115204.roslin\nns-uk\nns-za\ngoogleorkut\nsce-eccc-0002.scieng\nmvm-ri-d127045.roslin\ncsg-fin-0203.csg\nadminstaging\ntetis\nhss-health-l12.health\ncale\njano\ncsg-fin-0125.csg\ncsg-est-0022.csg\nhss-hca-0105.shca\nsas-cas-0008.sasg\nfebe\nhinatabokko\ncsg-corp-0003.csg\ncsg-sss-0005.csg\ncsg-fin-0143.csg\nmvm-ri-d086222.roslin\nsgw1\nbackup-2\nednet-fv\nsgw2\nltsp\nmvm-ri-l067160.roslin\nhss-health-0140.health\nhandc-mhist24.shca\ncsg-fin-0083.csg\nppls-y2lab-210.ppls\nmvm-ri-m125244.roslin\nsce-coll-0035.scieng\nsas-reg-0107.sasg\ncsg-scecc-0001.scieng\ncsg-fin-0033.csg\nphotosite\nsas-reg-0179.sasg\ns-1\niad-pclaptop02.iad\nmvm-ri-d135000.roslin\nkfc\nmvm-ri-d096221.roslin\nhandc-mhist13.shca\nsciengmscs.scieng\nmvm-ri-d067025.roslin\nmvm-ri-i125096.roslin\nrid-vuoe.roslin\nwww-dev.wpmservice.finance\nris-vlxbio01.roslin\nsas-reg-0191.sasg\nphstl-b-postroom-mfp-bw.csg\nhss-hca-0090.shca\ncsg-pps-0007.csg\ngreymatters\nlocalhost.admin\nforhill-1-trades-mfp-col.csg\nsas-reg-0185.sasg\nsrv042.csg\nmvm-ri-l115172.roslin\nhss-health-0104.health\nebrmclsrv1.roslin\nsas-reg-0180.sasg\nhss-ppls-0030.ppls\nmvm-ri-d105038.roslin\nsas-reg-0092.sasg\nmvm-ri-d096150.roslin\nhss-iad-0030.iad\nsas-reg-0174.sasg\nmvm-ri-l137046.roslin\nwww.timetab\nril-115152.roslin\nrid-056189.roslin\ncsg-cse-0054.csg\nmvm-ri-d107161.roslin\ncsg-fin-0032.csg\nsas-reg-0168.sasg\nbbl-dev.vle\npc02.chem\nppls-labds-020.ppls\ncsg-cse-0004.csg\nsaf-laptop6.csg\npc202.chem\nris-vlxweb05.roslin\nmvm-ri-d065137.roslin\nmvm-ri-m115037.roslin\npc203.chem\nsas-reg-0060.sasg\nwrk-laptop13-2.csg\nsas-reg-0157.sasg\nhss-ppls-0209.ppls\nmvm-ri-v086079.roslin\npc93.chem\nhss-health-l47.health\nsas-reg-0152.sasg\nhealth-omq-002.health\nhss-health-0033.health\nmnc\nwww.psr\nhss-ppls-ccace-lbc-01.ppls\nsas-reg-0146.sasg\nsas-leaps-0008.sasg\nphoenix3\nmvm-ri-l097085.roslin\nmvm-ri-d107200.roslin\nmvm-ri-v115215.roslin\ncsg-est-0301.csg\nsas-reg-0141.sasg\nsas-leaps-0003.sasg\nppls-cns-srv1.ppls\ncsg-est-0241.csg\nsas-reg-0135.sasg\nmvm-ri-l096152.roslin\ng2ctmdev1.ccbs\ncsh-2-2.csg\ndarkking\nrim-097065.roslin\ncsg-est-0181.csg\nsas-reg-0130.sasg\nlib1.lib\nhardcore1\ng2cdb2.ccbs\nwww-test.admin.alumni.dev\npc176.chem\nsas-dis-0019.sasg\ncsg-est-0131.csg\nyokai\nsas-reg-0124.sasg\ncsg-est-0140.csg\nwww-test.api.payments\nhealth-omq-032.health\neri268.roslin\npha002.sasg\ncsg-est-0071.csg\nsas-reg-0118.sasg\ncsg-fin-0192.csg\ncsg-as-0000836.csg\nppls-win8-srv1.ppls\ncsg-est-0021.csg\nsas-reg-0113.sasg\nsce-coll-0010.scieng\ncsg-sss-0004.csg\ncsg-fin-0142.csg\ncsg-as-0000776.csg\nhss-ppls-0083.ppls\ndsb-g-1-mfp-col.ppls\nhss-ppls-0199.ppls\nhss-health-0139.health\nwww-dev.fpm.finance\nsas-reg-0097.sasg\nsec01.roslin\nftpadm\ncsg-fin-0082.csg\nraspi1.ccns\nhca-mac044.shca\nlmn\nsas-reg-0102.sasg\nmvm-ri-d077237.roslin\nhca-mac038.shca\nsas-reg-0086.sasg\nmeter-82-186.csg\nhca-mac033.shca\nsas-reg-0081.sasg\nmvm-ri-d116184.roslin\ntapas\nwrk-kbrc-g-office.csg\nhss-hca-0073.shca\nmvm-ri-l127022.roslin\nhca-mac027.shca\nsas-reg-0075.sasg\nwww-test.readrae.planning\nhca-mac022.shca\nmvm-ri-l115146.roslin\npc179.chem\ncsg-pps-0006.csg\nwww-dev.suppliers.finance\npc83.pol\ncsg-fin-0037.csg\nu22\nsas-sra-0010.sasg\nmvm-ri-d126183.roslin\nhss-health-0094.health\nsas-intl-0004.sasg\npc90.pol\nmvm-ri-l106019.roslin\nhca-mac016.shca\nkumako\nsas-reg-0064.sasg\nymcmb\npc92.pol\nppls-onelan.ppls\nmvm-ri-l134240.roslin\npc93.pol\nevet2-pc.ppls\nhca-mac011.shca\nhss-health-0110.health\nsas-reg-0058.sasg\nhss-ppls-0088.ppls\ncsg-hr-0046.csg\nmvm-sbms-130280.ccns\ncsg-est-0265.csg\nnewhaven-webcam.scieng\nhss-iad-0028.iad\nmorcom01b.ppls\nrim-115126.roslin\nmvm-ri-d125250.roslin\nteketeke\ngregg\nsas-reg-0053.sasg\ncsg-cse-0053.csg\ncoolface\nsas-reg-0047.sasg\nwww-dev.miniportfolio.euclid\ngfd065253.roslin\ncassiopee\ncsg-fin-0087.csg\ncsg-cse-0003.csg\nfpweb\nprodweb\nsas-scs-0014.sasg\nyoda2\nwww-dev.dpts.drps\nsas-reg-0042.sasg\ndsb-4-7-mfp-col.ppls\niron1\nsas-cas-0081.sasg\nhss-health-l22.health\nhss-health-0007.health\nsas-reg-0036.sasg\nsas-cam-0030.sasg\nignace\nzacky\njeanne\nlr9569\nhealth-mac002.health\nhss-ppls-0208.ppls\nsas-reg-0069.sasg\nvhosting\nsas-intl-0009.sasg\ncsg-as-0000116.csg\nsas-reg-0031.sasg\nsci156.scieng\nns1.noc\nsce-coll-0045.scieng\nvcs-126011a.roslin\nsas-reg-0025.sasg\nppls-g26-009.ppls\nadrien\ncsg-est-0300.csg\nantonin\nmvm-ri-l096073.roslin\nsas-reg-0020.sasg\ncandidates\nfujino\ncsg-est-0240.csg\nsas-reg-0014.sasg\nebri053199.roslin\nyifan\ncsg-as-0000782.csg\nnetwork3\npplsms12trial.ppls\nmvm-ri-l105183.roslin\nextraction\nhss-ppls-0094.ppls\nsce-coll-0027.scieng\nhealth-omq-006.health\nmedia-cd\ncsg-est-0179.csg\nsas-reg-0008.sasg\nfrancine\nppls-mac028.ppls\ncsg-est-0129.csg\nsas-reg-0003.sasg\ncsg-fin-0147.csg\ncsg-est-0069.csg\neric2\njupiler\ncsg-fin-0201.csg\ncsg-as-0000835.csg\nboulet\nlsystem\nkampus\nhss-health-0114.health\nuberlolz\njean-charles\nvip9\nril-v107107.roslin\nmvm-ri-d095048.roslin\nsas-sra-0021.sasg\nlaure\nmvm-ri-l106055.roslin\nmedia-z\ncsg-sss-0003.csg\ncsg-fin-0141.csg\ncsg-as-0000775.csg\ncsg-hr-0080.csg\nsilvio\nnewhay\nbofh\nmvm-ri-d095226.roslin\ncsg-fin-0031.csg\nppls-igel-5-01.ppls\nmvm-ri-d085135.roslin\nsas-scs-0020.sasg\ncerc1.roslin\npopmedia\nmvm-ri-l087096.roslin\ncsg-as-0000615.csg\nhostingtest\nbaisemoi\nmvm-ri-d097032.roslin\nwww-test.scs.euclid\ntechbase\nsas-cam-0018.sasg\nhss-health-l57.health\nweir-g-17-sfp-bw.scieng\nit.dev\ncsg-est-0026.csg\ncsg-as-unitots2.ppls\nsas-intl-0015.sasg\nmvm-ri-d115225.roslin\nris-lx07.roslin\nppls-g26-015.ppls\nhealth-laptop24.health\nmvm-ri-l097105.roslin\nmvm-ri-d107209.roslin\nnmx1\ncsg-as-0000842.csg\nfresher\nhss-ppls-0110.ppls\nhealth-mac009.health\nbill3\ncsg-fin-0207.csg\nsas-sra-0026.sasg\nfanaticos\nmvm-ri-d137050.roslin\ncsg-est-0076.csg\nwwwfacebookcom\ncsg-est-0095.csg\ndsb-4-7-mfp-bw.ppls\nq20\ncsg-hr-0030.csg\ntermo\nac7\nq30\nwebdisk.h\nleela.tardis\ncsg-hr-0045.csg\nq46\nq31\nq48\nq50\nhss-iad-0027.iad\nalumni1\nxlife\nwww.pubsadmin.recordsmanagement\nmvm-ri-d127029.roslin\nmvm-ri-d107159.roslin\ncsg-hr-0013.csg\nsas-reg-0010.sasg\nwww.courses.myed\nq80\nppls-g26-021.ppls\nyasha\nwww.announce.myed\nsas-sra-0032.sasg\nmarsal\nq90\nyanti\nq98\ncsg-cse-0052.csg\nwww-test.course-bookings.lifelong\no4\no5\nhealth-omq-042.health\n11infst-1-corridor-mfp-bw.csg\nmvm-ri-d115154.roslin\ncsg-fin-0210.csg\nq5\nq6\nq7\ncsh-g-reception-mfp-bw.csg\nq9\nyaniv\nsaf-laptop4.csg\ncsg-est-0136.csg\nsas-intl-0026.sasg\nhss-health-0003.health\nhss-health-l17.health\nics-001.ppls\nmvm-ri-l097034.roslin\nsce-coll-0019.scieng\nhmx\nhss-ppls-0121.ppls\negypt25\nmarkie\nmarisa\ncsg-est-0186.csg\nsas-intl-0032.sasg\nq18\nq19\nsce-coll-0060.scieng\nq22\nyahaa\nq24\nq25\nq26\nq27\nq28\nq29\nq32\nq33\nq34\nmvm-ccns-0097.ccns\nq36\nq37\nq38\nq39\nq41\nq42\nq43\nq44\nq45\nq47\nq49\nq51\nq52\nq54\nq55\nq56\ntempe\nq57\nq58\nq59\nq61\nq62\nq63\nq64\nq65\nq66\nq67\nq68\nq69\nq71\nq72\nq73\nq74\nq75\nq76\nml-3-31-sfp-bw.sasg\nq78\nq79\nq81\nq83\nq84\nq85\nq86\ncsg-est-0190.csg\nq87\nq88\nq89\nq91\nq92\nq93\nq94\nq95\nq96\nq97\nq99\nporto.ppls\nmn2\nris-vlx08.roslin\nhss-ppls-0126.ppls\nresearch-innovation\nac4\nphhh-g-microlab-mfp-bw.csg\nsas-alumni-0023.sasg\nsmtp-6\npsy-alz-nas1.ppls\nq108\nq110\nscm2\ncsg-est-0246.csg\ncsh-2-2.15-mfp-bw.csg\nq120\nmvm-ri-i067176.roslin\nsas-alumni-0055.sasg\nwrath\nsasg-oldcoll-3-r299.is.ed.ac.uk.sasg\ng2cpxdev1.ccbs\ncam8\ncons2\nchp004.sasg\nq130\nmrlonely\nds443\nds454\nds460\nsteve620.ccns\nq40\noc-reg-g116.sasg\nsas-alumni-0050.sasg\nppls-m-vico.ppls\nmx-10\nmx-11\nmx-12\nmx-13\nmx-16\nmx-18\nmx-19\nq53\nkonami\nq160\ng2csrv2.ccbs\nhss-ppls-0132.ppls\nsvc3\nsvc4\nppls-igel-1-01.ppls\nppls-psylib-01.ppls\nris-vtlx01.roslin\ncecelia\nq70\ncd1\nsas-alumni-0044.sasg\nsas-intl-0043.sasg\nq82\nq101\nq102\nq103\nq104\nq105\nq106\nq107\nq109\nq112\nq113\nq114\nq115\nq116\nq117\nq118\nq119\nq121\nq122\nq124\nq125\nq126\nq127\nq128\nq132\nq133\nq135\nq139\nq141\nq142\nq143\nq144\nq145\nq146\nq147\nq148\nq150\nq151\nq152\nq153\nq154\nq155\nq156\nq157\nq158\nq161\nq162\nq129\nq131\nq134\nq136\nq137\nq138\nq140\ncsg-est-0238.csg\nq149\nq159\nq163\noctopus1\nrim-076012.roslin\ncsg-fin-0149.csg\nsas-alumni-0038.sasg\nq111\nmvm-ri-d067177.roslin\ncsg-est-0178.csg\nds376\nmvm-ccbs-060439.ccbs\nsmtp-3\nsmtp-4\nsmtp-5\nsunny123\nris-vlx09.roslin\nbizet\ncsg-cse-0019.csg\nbeaufort\nbillold\nsci060.scieng\nmvm-ri-i045241.roslin\nris-vwindev.roslin\nmvm-ri-l115156.roslin\nmvm-ri-d064175.roslin\nwww-tmptest.star.euclid\npop.be\nmvm-ccns-0092.ccns\nsas-alumni-0027.sasg\ncsg-est-0068.csg\nmfe2\nmvm-ri-d136024.roslin\ncsg-fin-0189.csg\nmalcom\ncsg-as-0000834.csg\nmddb\nds243\nmvm-ccns-0106.ccns\nsas-alumni-0022.sasg\nds303\nds317\nds326\nds346\nds360\nmx-17\nds392\nds394\nmx-20\nds411\nds445\nds450\nds457\nds458\nds459\nds461\nds462\nds463\nds464\nds465\nds466\nambro\nds500\nds501\nhca-netprint-col1.shca\nbabylab3.ppls\ndb17\nhss-ppls-0137.ppls\nmx-5\nmx-6\nmx-7\nmx-8\nmx-9\ncsg-sss-0002.csg\nwebmail.server\nwebmail.corp\ncsg-fin-0140.csg\ncsg-as-0000774.csg\nmvm-ccns-0101.ccns\nsas-alumni-0016.sasg\nhss-hca-0040.shca\nmvm-ri-l106197.roslin\nris-dxi01.roslin\ncsg-fin-0080.csg\nrim-096009.roslin\nmvm-ccns-0085.ccns\nwww.fantasyfootball\nsas-alumni-0011.sasg\ncsg-est-0091.csg\ncsg-eusu-0009.csg\nmvm-ri-m116133.roslin\ncsg-fin-0030.csg\nmvm-ccns-0079.ccns\nvm153\nvm154\ncsg-fin-0090.csg\nsas-alumni-0005.sasg\nwww-dev.pod.drps\nhss-health-l32.health\ncam-mac008.sasg\nrid-046157.roslin\nhss-health-0017.health\nwww-dev.ess.euclid\nmvm-ri-m115200.roslin\ncam-mac003.sasg\nmvm-ccns-0068.ccns\nsce-coll-0055.scieng\nhybridb.scifun\nsas-ssp-0007.sasg\nriv-vc03.roslin\nwww-test.pubs.recordsmanagement\nhss-ppls-0149.ppls\nmvm-ri-d117173.roslin\nmvm-ri-d087114.roslin\nmvm-ccns-0052.ccns\nmvm-ri-i085236.roslin\nvds25\ncsg-hr-0044.csg\ndcn040225.ccbs\nhealth-omq-016.health\nrii-105173.roslin\nhss-iad-0026.iad\nmvm-ri-d116239.roslin\nsm790.ccns\noc-1-221-mfp-col.sasg\ncsg-cse-0051.csg\npsy-g7-pr.ppls\nmvm-ri-d127172.roslin\ncsg-cse-0001.csg\nmvm-ri-d134254.roslin\nhss-ppls-0099.ppls\nhca-jpglab-035.shca\nmvm-ri-d064165.roslin\nmvm-ri-d096053.roslin\nwww.1000\nhss-health-0124.health\nppls-igel-04.ppls\nhcanda-laptop12.shc\nmvm-ccns-0029.ccns\nhca-jpglab-030.shca\nmvm-ri-l115164.roslin\nhca-jpglab-024.shca\ng2ctm1.ccbs\nebr-bcd1.roslin\nmainst\nint-usbmac4.sasg\nvm21\ncsg-est-0237.csg\ng2cweb2.ccbs\nmaimai\nmusicmusic\nhss-health-0086.health\nhca-rc-016.shca\nmvm-ri-v115246.roslin\nppls-printer1.ppls\ndb15\ndb16\nmailbe9r.staffmail\nfreekey\nppls-igel-6-01.ppls\nhca-rc-011.shca\nhca-spglab-046.shca\nhca-jpglab-013.shca\nmvm-ri-d126000.roslin\nidb1\nhss-ppls-0143.ppls\nvm157\ncam-mac009.sasg\nhca-rc-005.shca\nhca-spglab-041.shca\nlaser20.roslin\nqiwi\nmvm-ccbs-060437.ccbs\nris-esx02.roslin\nhss-health-l67.health\nalerte\nmvm-ri-d096119.roslin\nwww.mbe\ncorreio1\nmvm-ri-l115131.roslin\nfreefun\nrip-e02m4.roslin\nebrl065182.roslin\npps078.csg\nmvm-ccbs-060432.ccbs\ncsg-est-0177.csg\nwww.ww2\nmaheen\nmahaba\nhss-health-l29.health\nappleroam.csg\ndailydeals\naswebcast.csg\nris-esxi10.roslin\njds\nskb\nchan086169a.roslin\nhca-spglab-030.shca\nmvm-ri-d107219.roslin\nris-vlxftp.roslin\nmvm-ccbs-060421.ccbs\ncsg-est-0067.csg\nmvm-ccbs-040220.ccbs\ntestfms\np-20\nmvm-ri-d125234.roslin\np-52\ncsg-fin-0188.csg\ncsg-as-0000833.csg\nhoneywell\nhss-health-l54.health\nvongola\nprecision.lts\nwww.bq\nmvm-ccbs-060415.ccbs\nmaffia\nwww.icc\nwww.goto\nsnejana\ncsg-as-0000773.csg\nsra-57gsq-g-203.isg\nbabylab.ppls\nhss-ppls-0148.ppls\nweir-g-corridor-mfp-bw.sasg\ngxy\nxuan\nmvm-ri-d067081.roslin\nhss-ppls-0218.ppls\nmembrane\nris-vwinprn.roslin\nwww.bioprocess\nbye\ncsg-fin-0078.csg\ncam-mac004.sasg\nhca-spglab-007.shca\nproxy.lib\nwfxy\nhss-health-l06.health\nround\nsas-dis-0028.sasg\nmvm-ccbs-060404.ccbs\ncsg-eusu-0008.csg\nhss-ppls-0213.ppls\ncsg-fin-0028.csg\nhss-ppls-adl27.ppls\ncsg-as-0000663.csg\nppls-igel-1-17.ppls\nmvm-ri-d086216.roslin\nbahnhof\ndoc39\nhca-spglab-002.shca\nsas-dis-0023.sasg\nmvm-ccns-0070.ccns\nhss-health-l78.health\nhss-ppls-0197.ppls\nhss-ppls-adl22.ppls\nmikhail\nhealth-lap01.health\nwww.alterego\ndata-nas1.ppls\nsce-coll-0029.scieng\nsas-intl-0059.sasg\nsas-dis-0017.sasg\nebrl033183.roslin\nhss-ppls-0202.ppls\nhoroskop\ntcd\nmvm-ri-i115102.roslin\nkhatri\nhrs045.csg\nsas-dis-0012.sasg\nwww.nrg\nvanhelsing\nhss-ppls-0186.ppls\nmaddox\nmvm-ri-l107222.roslin\nhss-ppls-0013.ppls\nsas-dis-0006.sasg\nhss-ppls-0181.ppls\nppls-mac032.ppls\nmacmac\nhss-ppls-adl05.ppls\nwww.dpts.drps\nsvg\nppls-mac005.ppls\nsas-dis-0001.sasg\nhss-ppls-0175.ppls\nhss-ppls-0154.ppls\nppls-mac026.ppls\nwww.gbs\nebri042174.roslin\nsas-reg-0019.sasg\nustar\nwin98router1.ccns\nmvm-ri-v095247.roslin\nkristi\nmvm-ri-d085034.roslin\namitkumar\narzt\ncsg-cse-0009.csg\ndean-jvcs.scieng\nhss-ppls-0170.ppls\ncsg-hr-0043.csg\nrelay8\ngfl065240.roslin\nmvm-ri-d086121.roslin\nppls-mac021.ppls\nalog\nhss-iad-0025.iad\nmvm-ri-d097077.roslin\nwww.works\nsas-intl-0038.sasg\nebri073210.roslin\nsci070.scieng\nppls-mac015.ppls\ngiac\ncsg-cse-0049.csg\ncmsr\nbolero\nlbc-backup.ppls\nmvm-ri-l115166.roslin\nrii-115146.roslin\nppls-mac011.ppls\nhss-health-0088.health\nrip-brfm9.roslin\nhss-ppls-0158.ppls\nfaeebook\nscifunlaptop6.scifun\nhamer\nppls-mac009.ppls\nauditoria\nintek\nslv12\nsci115.scieng\nhcanda-print13.shca\nmvm-ri-d096144.roslin\nmvm-ri-d136034.roslin\nhss-ppls-0153.ppls\nasterix2\ncaretta\nppls-mac004.ppls\nhss-ppls-0159.ppls\nstudio4\ncsg-est-0239.csg\nmvm-ri-i134156.roslin\nwahed\nris-vwinlic.roslin\ndongchang\ncsg-cse-0059.csg\nris-fas1a-bmc.roslin\ntaxa\ntech-center\nbondi\nhss-ppls-0165.ppls\nmysql2a\nsas-intl-0058.sasg\nvcs-126214a.roslin\ngornik\nlabirint\nppls-igel-1-16.ppls\nhss-ppls-0147.ppls\nmvm-ri-i125030.roslin\nppls-pc151.ppls\nint-usbmac8.sasg\nkula\nucuprinter.ucu\nwebmail.exseed\nvpsadmin\nbrune\nmail-5\nmvm-ri-d136212.roslin\nberk\nfitnes\nmiha\nhss-ppls-0142.ppls\nzeman\nint-usbmac3.sasg\nhss-ppls-0136.ppls\nbabylab2.ppls\nvaleur\nwww.tqtelethon.dev\nsas-intl-0033.sasg\nhss-health-l42.health\nmvm-ccns-srv1.ccns\nhss-ppls-0131.ppls\nhss-health-0027.health\ncsg-est-0206.csg\nsas-intl-0036.sasg\ncsg-est-0236.csg\nmvm-ccbs-060316.ccbs\nmvm-ri-l127148.roslin\nhss-ppls-0125.ppls\nmvm-ri-v115199.roslin\nidobsonvb.csg\nmx1.email\nsas-intl-0031.sasg\nfcms\nurist\ncsg-est-0176.csg\nsas-sra-0036.sasg\nhss-ppls-0119.ppls\ncsh-g-g3-col.csg\nmvm-ri-l115182.roslin\nelec1\nwww.employment\ncsg-est-0180.csg\nebri064179.roslin\nwww.pds\nsas-intl-0025.sasg\ncsg-est-0126.csg\nwww.wrd\nwww.dse\nelec2\nwww.elections\nmvm-ri-i086180.roslin\narisa\nsas-sra-0031.sasg\nupanh\nppls-mac022.ppls\ncsg-hr-0053.csg\nmvm-ri-l096146.roslin\nppls-g26-019.ppls\nsas-intl-0019.sasg\ncsg-est-0066.csg\nmvm-gf-l115163.roslin\nsas-sra-0025.sasg\ncsg-fin-0187.csg\nhss-ppls-0108.ppls\ncsg-as-0000832.csg\nsas-intl-0014.sasg\nris-onelan03.roslin\ncsh-3-3.4b-sfp-bw.sasg\nsas-scs-0018.sasg\nsas-sra-0020.sasg\nsce-coll-0031.scieng\nhealth-omq-026.health\nhss-ppls-0093.ppls\ncsg-as-0000772.csg\nomaha\nhss-ppls-0171.ppls\nppls-g26-008.ppls\nchplap-bg.sasg\nsas-intl-0008.sasg\nsas-scs-0013.sasg\nmvm-ri-d086181.roslin\ncsg-fin-0077.csg\nmvm-ri-m115138.roslin\nppls-g26-003.ppls\nhcanda-pc71.shca\ns248\nsas-intl-0003.sasg\ncsg-eusu-0007.csg\nmvm-ri-d077054.roslin\nsas-scs-0007.sasg\nsas-sra-0008.sasg\ncsg-fin-0027.csg\nhss-ppls-0082.ppls\nebri003227.roslin\nsce-coll-0004.scieng\nwww-test.estores.finance\nhss-health-0134.health\nsas-sra-0003.sasg\ncse-46pleas-1-12.csg\nphoenix.ppls\npc5155\ntuner\nmvm-ri-l107187.roslin\nsas-intl-0039.sasg\nwwms235igel.shca\nwin98router2.ccns\nppls-kuhn.ppls\nspgamers\ntuhin\nhss-ppls-adl01.ppls\nmvm-ri-d126250.roslin\nhss-ppls-0071.ppls\nppls-alistair.ppls\nppls-printer21.ppls\nhss-ppls-0065.ppls\nshahrukhkhan\nppls-igel-7-01.ppls\n46pleas-g-fasic-mfp-bw.csg\nppls-printer15.ppls\ncharlotte.scieng\nhss-ppls-0059.ppls\nbigtree.ppls\nppls-mac027.ppls\nhss-hca-0124.shca\nris-trac01t.roslin\nlect-hca-007.shca\ntsoft\nkpage\nppls-printer10.ppls\nhss-ppls-0054.ppls\nri-dpcs2.roslin\ncsg-est-wmds.csg\nhss-health-l77.health\ncsg-hr-0042.csg\nhss-ppls-0176.ppls\nsas-dis-0002.sasg\nwww-test.research\nsergik\nhss-health-0135.health\ndancersoul\nsextube\nhss-ppls-adl06.ppls\nppls-mac033.ppls\ncsg-pps-0013.csg\nsas-reg-0070.sasg\ntoxik\nfireblack\nmyuser\nsce-coll-0005.scieng\nsrv097.csg\nhss-ppls-0182.ppls\nhss-ppls-0048.ppls\nsas-dis-0007.sasg\nmvm-ccbs-040161.ccns\nsaf081.csg\nwww-test-old.jobs\nhss-ppls-0187.ppls\ntesting1234\nmvm-ri-d086182.roslin\nhcanda-laptop14.shca\ntodoparatupc\nstara\ncsg-est-0309.csg\nhss-ppls-0193.ppls\nhealth-omq-027.health\ntelia\nfrankel\nadult-sex\nsas-dis-0018.sasg\ndata-nas2.ppls\nstarnet1\nhss-iad-0024.iad\njira2\nmvm-ri-d125066.roslin\nhss-ppls-adl23.ppls\ndiscourse\nhss-iad-0019.iad\ncsg-corp-0004.csg\nmvm-ri-m115197.roslin\nhss-ppls-0198.ppls\nhss-hca-0113.shca\nhss-ppls-0043.ppls\nmvm-ri-d076050.roslin\nspoof\ncsg-cse-0048.csg\nmisdev\ncsg-est-0070.csg\nmvm-ri-d137119.roslin\nmgp\nhss-hca-0097.shca\nhss-ppls-0037.ppls\nspiel\napps.sps\nhss-hca-0092.shca\ncam-backup.sasg\nsony1\nmaildev\nwww-dev.admin.alumni.dev\nhss-ppls-0032.ppls\ncsg-fin-0191.csg\nmvm-ri-d136176.roslin\nwrw-1z-19-mfp-bw.shca\nhss-hca-0086.shca\nhss-ppls-0026.ppls\nppls-atl01test.ppls\nsrv-dht-ground-servitors.csg\ngu206hotdesk.lts\nhss-hca-0081.shca\nmvm-ri-v086048.roslin\nwww.overseas\nhss-ppls-0021.ppls\nhss-health-l16.health\nhss-health-0002.health\ngwy\n2004\nhss-hca-0075.shca\nsrv-lap6.isg\nautonation\nhss-ppls-0015.ppls\nwww.logistics\nwww.imode\nsas-princ-0004.sasg\nrip-a00m4.roslin\ncalvintemp.ppls\nhss-hca-0070.shca\nmvm-ri-d137048.roslin\nmvm-ccbs-060434.ccbs\nlovesex\nhss-ppls-0010.ppls\nsce-coll-0040.scieng\nconsole1\nj8017e.ccbs\nhss-ppls-0095.ppls\nrecarga\ncsg-cse-0027.csg\nhss-hca-0064.shca\nhss-ppls-0004.ppls\niad-mac003.iad\nwww-dev.rssjobs.careers\nmvm-ri-d096225.roslin\nsofia2\nvcs-127052a.roslin\nmvm-ri-d117157.roslin\ncsg-est-0125.csg\nevn\nhss-hca-0053.shca\ndrumstanex-g-g4-mfp-col.csg\nsrb\nhealth-omq-001.health\naaao\nabc3\nrid-086208.roslin\nsas-dis-0024.sasg\nkzn\nacci\ncsg-fin-0186.csg\nhss-hca-0047.shca\ncsg-as-0000831.csg\nmvm-gf-l115164.roslin\nebrgeldoc.roslin\nhss-ppls-adl28.ppls\nmvm-ri-l127052.roslin\nvsys\nwlf\nhss-hca-0042.shca\nhss-ppls-0214.ppls\ngiaitri\nbellagio\ncsg-as-0000771.csg\nmvm-ccns-0078-vm2.ccns\naap070.sasg\nhss-hca-0036.shca\ncbweb\nberserker\nfry\nl114\nprodaja\nsas-dis-0029.sasg\nplavi\nl203\nl206\nl207\nmvm-ri-l125095.roslin\ncsg-srs-0005.csg\nhss-health-0108.health\n11infst-g-genoffice-mfp-col.csg\ncsg-fin-0097.csg\nzajecar\naaa2\nris-igel1.roslin\nhss-ppls-0100.ppls\ncsg-fin-0026.csg\nhss-hca-0031.shca\ncsg-as-0000661.csg\ntatties.cache\nhns5\nhns6\naap058.sasg\nwww.apps.disability-office\ncsg-fin-0088.csg\nwww.audyt\nwww.artykuly\n9hpsq-printer1.csg\nhss-ppls-0219.ppls\ntruffaut\nhss-hca-0025.shca\nmvm-ccbs-060411.ccbs\nlinkbuilding\nzenek\nlib-pc-1713.isg\nmaile\nwww.linkbuilding\naudyt\nppls-y2lab-212.ppls\nwww.omniping\nsce-coll-0066.scieng\nhss-hca-0020.shca\nbeverly-pc.ppls\nppls-y2lab-206.ppls\nram-marg-122.ccbs\nhss-hca-0014.shca\nbundesliga\nmvm-ccbs-060135.ccbs\nhca-netprint-bw7.shca\nnickolas\npredators\nsci177.scieng\nint-scanner-01.sasg\nppls-y2lab-201.ppls\ncsg-as-0000783.csg\nraiders\nwww.testa\nvis009.sasg\nvcs-126149a.roslin\nsas-cas-0087.sasg\nhss-ppls-0190.ppls\nbslt\ntawan\ncaba\nhss-health-l13.health\nppls-et1.ppls\nhss-hca-0008.shca\nruchi\nsci018.scieng\nccbb\nhss-health-l52.health\nhca-netprint-bw2.shca\nwlxt\nsas-scs-0009.sasg\nris-lx02.roslin\nhss-hca-0003.shca\nmvm-ri-l107090.roslin\nxbserver\nmvm-ri-d107204.roslin\njwxt1\ncfs1\ncgeng.ppls\nhss-iad-0023.iad\nsas-cas-0071.sasg\nwww.vacancies\ncsg-cse-0047.csg\nsec07.roslin\nnptel\nccnsm075.ccns\ncsg-fin-0148.csg\nsas-cas-0065.sasg\nincubation\nbret\ndns.ee\nhca-lab3-mac23.shca\nms-dw6-1m-8-mfp-bw.health\nmvm-ri-d116082.roslin\nhomesecurity\nwww-test.tqmobile.dev\nmvm-ri-m135039.roslin\nsas-cas-0060.sasg\nhca-lab3-mac17.shca\ncsg-est-0027.csg\nmunicipios\nsiwar\ntamia\nmvm-ri-l127149.roslin\ncsg-fin-0209.csg\nsas-cas-0054.sasg\nmvm-ccbs-060416.ccbs\nwww.clips\nmvm-ri-d115148.roslin\n46pleas-g-communications-mfp-col.csg\nwww.textads\nwww.feed\nhca-lab3-mac12.shca\ncsg-saf-0034.csg\ncsg-est-0315.csg\nromuald\nmvm-ri-d137023.roslin\ncsg-as-0000843.csg\nwww.scs.euclid\nshared3\nsimmi\nliz\nsci125.scieng\nsce-coll-0014.scieng\ncerc-d001.roslin\nmvm-ri-l115222.roslin\nwww-test.admin.careers\ncsg-fin-0198.csg\nwww.ppmd.euclid\ncsg-est-0284.csg\nmvm-ri-v107133.roslin\npie1.lts\nwww.kuchnia\nsidra\ncentrala\nmaret\nmvm-ri-d076059.roslin\nsec05.roslin\nshiba\nmvm-ri-d125147.roslin\nshera\ncourseware\nwww.jt\ncwm1\nsas-cas-0037.sasg\ndog1\nint-jet13.sasg\nmed-000847a.roslin\nmvm-ri-l107196.roslin\ncsg-est-0234.csg\ncsg-fin-0206.csg\nhss-health-0028.health\nwww-dev.transparencyadmin.fec\nrifranking.roslin\nhss-health-0089.health\nwww.advertise\ncsg-est-0174.csg\nppls-y2lab-129.ppls\nsas-cas-0026.sasg\nris-valx01.roslin\nppls-y2lab-124.ppls\nvbs-194252a.roslin\npwb\nsas-cas-0021.sasg\nsheen\ndoc22\nmvm-ri-d115211.roslin\ncsh-g-g21-mfp-col.csg\ncsg-est-0064.csg\nwww.dba\ncsg-est-0077.csg\nppls-y2lab-118.ppls\nmvm-ri-d097062.roslin\ncsg-fin-0185.csg\nsas-cas-0015.sasg\nwww.edunet\ndrumstanex-g-office-mfp-bw.csg\ncsg-as-0000829.csg\nfxnavi\nsci160.scieng\nwww.edm\nhss-health-l43.health\nwww.dof\nwww.dial\nsci054.scieng\nhss-ppls-0139.ppls\nwww.eoc\nwww.tupc\nppls-y2lab-113.ppls\nhappykids\nwww.goodtime\ngeo-cc-003.scieng\nsas-cas-0010.sasg\ncsg-est-0137.csg\nlenova\nronja\nesig\nwww.hac\ncsg-as-0000770.csg\nsummerfun\nwww.urbandesign\nppl001.sasg\ndocweb\nwww.look\nwwms00m05igel.shca\nmail.bote\nwww.antivirus\nwin2000\nmvm-ri-d126187.roslin\nmvm-ri-d096128.roslin\nromel\nhappyhome\nhca-spglab-031.shca\nsetan\nwww.lda\nhca-jpglab-003.shca\nris-vlxweb01.roslin\nppls-y2lab-107.ppls\ncsg-fin-0075.csg\nwww.dome\nsas-cas-0004.sasg\nflea\ncsg-eusu-0005.csg\nwww.course-bookings.lifelong\nwww.pbs\nppls-y2lab-102.ppls\nftp.bote\ngem1\ncsg-as-0000659.csg\nmvm-ri-d064184.roslin\nccnsm003.ccns\n1brsq-1-staffarea-mfp-col.sasg\nhca-spglab-036.shca\nsweetp\ncsg-fin-0190.csg\nwww.mso\nwww.hoping\nmvm-ri-d086058.roslin\nsam-test.roslin\nwrk-jet32.csg\nsas-chap-0002.sasg\nwww.tct\nmvm-ccbs-060020.ccbs\nhss-health-l26.health\nwww.zone\ncsh-g-g6-mfp-col.csg\nwww.sec\nhss-health-0012.health\nisw\nwww.landp\nwww.tac\nsas-cam-0013.sasg\nvis013.sasg\nrid-057084.roslin\nwww.tec\nwww.land\nviera\nwww.xinyi\nwww.msdn\nhealth-mac006.health\nsas-reg-0140.sasg\nsas-cam-0025.sasg\nsci161.scieng\nwww.hw\nvis007.sasg\nhca-rc-001.shca\nncm\ntmu-g-office-mfp-bw.csg\nfatimah\nwww.retire\nsccm13\nsas-cam-0019.sasg\ncsg-hr-0039.csg\nrnd01\nleland\nwww.kolkata\nms-dw6-1-genoffice-mfp-col.health\nsccm14\nsccm16\ncsg-est-0247.csg\nvis002.sasg\nhss-iad-0022.iad\nsas-cam-0014.sasg\nwww.hyderabad\nhca-spglab-042.shca\ncas101.sasg\nsce-coll-0050.scieng\noffprinter1.scifun\nwww.delhi\ncsg-cse-0046.csg\nsas-cam-0008.sasg\n48pleas-1-union-mfp-col.csg\nsardi\nris-boxi.roslin\nhca-rc-006.shca\nrii-105167.roslin\nmyadm\nmvm-ri-i134157.roslin\nsas-cam-0003.sasg\nscifundock.scifun\ng2cwebdev1.ccbs\nppls-igel-b-21a.ppls\nrstest\nris-ilx02.roslin\nhca-jpglab-014.shca\njtinspiron.ccns\nmvm-ri-d136035.roslin\nipad3\nmvm-ri-d086165.roslin\nhca-spglab-047.shca\nsccm15\nmvm-ri-d107210.roslin\nerecording.lts\nmvm-ri-d077038.roslin\nsci100.scieng\nhca-rc-012.shca\nj23\nhula\noin\nois\nntn\nsek\nmvm-ri-d134248.roslin\nmvm-ri-l115186.roslin\nhss-health-0118.health\nhca-mfd-007.shca\ngaus\nmvm-ri-d076095.roslin\nelvs01sq01.roslin\nhca-mfd-002.shca\ndsb-lptp-4.ppls\ncsg-est-0283.csg\neniac\nsamia\nscifunlaptop7.scifun\nwww-dev.org.planning\nmvm-ri-d125093.roslin\nppls-pc7.ppls\nwww.alumni.dev\ncsg-est-0233.csg\nghosting01.roslin\nppls-y2lab-014.ppls\ncsg-est-0187.csg\ncsg-est-0173.csg\nppls-y2lab-008.ppls\ncsg-est-0123.csg\nuranio\nhca-jpglab-019.shca\nlect-hca-008.shca\nppls-y2lab-003.ppls\nhss-health-0090.health\n1a\nhss-health-l62.health\n7gs-g-26-mfp-bw.ppls\nsaini\ncsg-est-0171.csg\nhca-rc-017.shca\nppls-carver-01.ppls\ncsg-est-0063.csg\nlect-hca-003.shca\nris-esxi04.roslin\ncsg-fin-0184.csg\ncsg-as-0000828.csg\nhealth-omq-010.health\nmvm-ri-d096103.roslin\nmvm-ri-l127168.roslin\nmvm-ri-l097109.roslin\nhca-jpglab-025.shca\nlax1\nlect-health-003.health\nlccu\nhca-escreen-04.shca\ncsg-fin-0134.csg\ncsg-hr-0078.csg\ncsg-fin-0074.csg\nwww.adminrae.planning\nmvm-ri-l097130.roslin\ncsg-eusu-0004.csg\ntmp-health-004.health\ncsg-fin-0024.csg\nmvm-ccns-0025.ccns\nriley\nsevendays\ncsg-as-0000658.csg\nmvm-ri-m135049.roslin\ngfl035237.roslin\nwww-test.pure\nwww.oma\nppls-zak.ppls\nuhs001.sasg\nhss-health-l01.health\nrii-115142.roslin\nproducts1\nris-vbiolx01.roslin\nphi-aristotle2.ppls\npsy-pc023.ppls\nsce-coll-0024.scieng\nsas-bu-0052.sasg\ncsg-fin-0169.csg\nmvm-ri-d106209.roslin\nfastservice\nris-ifs2.roslin\nppls-printer7.ppls\nmvm-ri-d136089.roslin\nc85\nc88\nrid-086179.roslin\nmailbe11r.staffmail\nabb\ncsg-hr-0038.csg\nabi\nmvm-ri-m126200.roslin\nhss-iad-0021.iad\nsas-bu-0041.sasg\nacv\ncsg-as-0000859.csg\ncsg-cse-0045.csg\nhss-ppls-0145.ppls\nsas-bu-0035.sasg\nhss-hca-0030.shca\nvcs-126157a.roslin\nwww-test.pubsadmin.recordsmanagement\nagp\nagr\nrodas\nmvm-ri-d116198.roslin\nmvm-ri-d067071.roslin\nsweetgirls\nmvm-ri-d126030.roslin\ncsg-fin-0208.csg\nkazanova\nrip-brfm4.roslin\ncsh-b-b1.5-mfp-bw.csg\nsas-bu-0040.sasg\ncsg-est-0061.csg\nsas-bu-0029.sasg\nwww.eit.finance\nsci064.scieng\nbff\nsas-bu-0024.sasg\nmvm-ri-l115161.roslin\naom\naoo\nppls-deploy-01.ppls\nrii-115141.roslin\nlect-hca-005.shca\nmvm-ri-d125086.roslin\nmvm-ri-l126093.roslin\nml-3-42-mfp-col.sasg\nhca-tlab-022.shca\nsas-bu-0018.sasg\nmvm-ri-d096138.roslin\nmvm-ri-l107145.roslin\nriv-tpiaud.roslin\nmvm-ri-i127149.roslin\nrachael.ppls\nbkn\natu\nhca-tlab-016.shca\nsas-bu-0013.sasg\navi\ncas-mlb3-012.sasg\nmvm-ri-l125159.roslin\naxe\nhca-tlab-011.shca\ngfl065241.roslin\nsas-bu-0007.sasg\nhss-hca-0109.shca\nmvm-ri-l115185.roslin\nbpr\nhca-jpglab-031.shca\nnordine\nmvm-ccns-0031.ccns\ncas-mlb3-006.sasg\nriv-hd1.roslin\ngooglemoney\nhss-health-0030.health\npwn3d\nhca-jpglab-036.shca\nvweb.ppls\nema4.ppls\nhca-tlab-005.shca\nsas-bu-0002.sasg\ncsg-est-0232.csg\nhss-ppls-0089.ppls\nstrozzapreti.ppls\ncas-mlb3-001.sasg\nbeograd\niad-1208.iad\nhss-ppls-0040.ppls\ncsg-est-0172.csg\nhss-health-l36.health\nmailbomber\nris-vwlx02.roslin\nhss-health-0022.health\nstpeter\nrid-076052.roslin\nmvm-ri-d125025.roslin\ncsg-est-0122.csg\ncsg-est-0062.csg\nmvm-ri-d105052.roslin\nsce-coll-0059.scieng\ncsg-cse-0002.csg\ndus\nenc\ncsg-fin-0183.csg\ncsg-as-0000827.csg\nwww-test.employerdatabase.careers\nebri063215.roslin\nebrptdmr.roslin\nwww-dev.drps\nmvm-ccns-0036.ccns\ngab\ntehnologija\ners\ncsg-fin-0133.csg\nmvm-ri-d096245.roslin\nzerberus\nhss-hca-0104.shca\ncse-kiosk2.csg\nsas-cam-0009.sasg\ncsg-fin-0073.csg\nmvm-ri-v105134.roslin\ncsg-srs-0002.csg\ncsg-eusu-0003.csg\nhandc-mhist17.shca\neyi\ncsg-fin-0023.csg\nghh\nfse\nhealth-omq-021.health\nredif\nris-trac01.roslin\nftr\nmvm-ri-d094162.roslin\npunit\ngmx\ngon\ngpl\nsas-reg-0106.sasg\nhandc-mhist12.shca\nmvm-ri-d086175.roslin\nwww-test.wiki\ncsg-cse-0011.csg\nifl\nebri053171.roslin\nhss-health-0128.health\nhandc-mhist01.shca\nsas-reg-0190.sasg\njaz\nmvm-ri-d067021.roslin\nhss-ppls-adl10.ppls\nebrsqlsrv1.roslin\nraven.ppls\nsas-reg-0184.sasg\nitl\nhss-hca-0088.shca\ndata-nas1b.ppls\nsas-reg-0178.sasg\nsce-coll-0020.scieng\nspeedgroup\njmr\ncsg-hr-0037.csg\njmx\nvbs-194198a.roslin\nsas-cas-0082.sasg\nhss-iad-0020.iad\nkme\nkml\nsas-reg-0173.sasg\nsas-intl-0056.sasg\nkoi\nreg-jet1.csg\nsyndicate\nhss-ppls-0028.ppls\nmvm-ri-d126004.roslin\nsas-reg-0091.sasg\nmvm-ccns-0047.ccns\ncsg-cse-0044.csg\nmvm-ri-i064167.roslin\nmvm-ri-d095105.roslin\nsas-reg-0167.sasg\nsci038.scieng\nhss-health-l72.health\nsas-reg-0162.sasg\nmvm-ri-d096113.roslin\nkindzadza\nmvm-ri-d107224.roslin\nwwms227igel.shca\nsas-reg-0156.sasg\ncsg-as-0000684.csg\ndragonz\nhealth-lap66.health\ndragoon\ncor-jet3.csg\ndragon2\ncsg-est-0255.csg\nthunderbolt-display2.scieng\nwww-uat.star.euclid\nsas-reg-0151.sasg\nmvm-ri-d064168.roslin\nmvm-ri-l125134.roslin\nprc\nhaymarket\nrca\ncsg-hr-0054.csg\nmvm-ri-i115103.roslin\nmvm-ri-d084163.roslin\nraged\nmvm-ri-d125238.roslin\nhss-hca-0083.shca\nrog\nrii-087001.roslin\nsets.sps\nwwms236igel.shca\ntfc\nsas-reg-0145.sasg\nsas-leaps-0007.sasg\ncsg-hr-0070.csg\ncsg-fin-0050.csg\nmvm-ccns-0053.ccns\nmvm-ri-d087154.roslin\nswt\nsce-eccc-0001.scieng\neplab1.ppls\nsas-reg-0139.sasg\nsas-leaps-0002.sasg\ntash\nhillier-mac.sasg\nsas-reg-0085.sasg\nhealth-pc94.health\nhss-health-l11.health\ncsg-est-0231.csg\nmvm-ri-d115168.roslin\nwww-dev.estores.finance\ntornado.ee\nsas-reg-0128.sasg\nxio\ng2cdb1.ccbs\ncapturedroslin01.roslin\nsce-coll-0034.scieng\ncsg-est-0121.csg\nqihaa\nsas-reg-0123.sasg\nwww-test.announce.myed\nsowa\nmvm-ri-l127135.roslin\nmvm-ri-d095098.roslin\nautodiscover.exseed\nsas-reg-0117.sasg\ndishnetwork\ncheapshopping\ncsg-fin-0182.csg\nemanuel\nebri053213.roslin\ncsg-as-0000826.csg\nwww-test.alumni.dev\npercheron\natlantia\nmvm-ri-l107226.roslin\nwww.moregames\nhss-ppls-0203.ppls\npspinfo\ncastillo\nadcity\nsas-reg-0112.sasg\nprash\nllano\nmvm-ri-d067024.roslin\nhss-health-0103.health\npsy-adam-moore.ppls\nen-macmini.ppls\nmvm-ri-d117137.roslin\nsas-reg-0096.sasg\ncse-kiosk1.csg\ncsg-fin-0072.csg\nsas-reg-0080.sasg\nwww-dev.ppmd.euclid\ncsg-pps-0014.csg\nwww.artdesign\ncsg-srs-0001.csg\nris-vwinwja.roslin\nsrv098.csg\nhca-mac043.shca\nyourfuture\nsas-reg-0101.sasg\nponco\nmvm-ri-d085106.roslin\nvangogh\nwww.interior\ntran\nbrawler\nwww.thehacker\nwww.oblivion\nmilagro\ncsg-fin-0022.csg\ngeac-annex\nwww.patty\nhca-mac037.shca\nwww.ambiente\ncsg-saf-0008.csg\nwww.classics\nmvm-ccns-0064.ccns\nsci074.scieng\nrii-105220.roslin\nmvm-ccns-0069.ccns\nsce-coll-0052.scieng\nppls-mac-jk.ppls\ntravelguide\nlib-pc-1708.isg\nsas-alumni-0049.sasg\nhss-health-0093.health\nsas-alumni-0001.sasg\nmvm-ri-m125235.roslin\ncam-mac010.sasg\narcl-hpgen7.shca\nhca-mac032.shca\ncsg-corp-0005.csg\nsas-reg-0079.sasg\naec\npsy-kiosk01.ppls\nam5\nags\nuren\najv\nfuckers\nsas-dis-0013.sasg\nbel\nkogepan\ngfl075243.roslin\nhca-mac026.shca\nsas-reg-0074.sasg\ncsg-saf-0026.csg\nestates.csg\nril-115151.roslin\nhca-mac021.shca\nsas-reg-0068.sasg\nhca-tlab-009.shca\nscimac.scieng\nhca-mac015.shca\nsas-reg-0063.sasg\nvhost01.scieng\nrip-b01m4.roslin\nhca-mac009.shca\nsas-reg-0057.sasg\ncsg-hr-0036.csg\nebri023184.roslin\ngeo-cc-006.scieng\nhss-iad-0018.iad\nfun-zone\nanarosa\nmvm-ri-v086078.roslin\nwww.crb\ncnd\nhss-health-l46.health\ncoi\ndgc\nhca-mac004.shca\nsas-reg-0052.sasg\nwww-test.org.planning\nhss-health-0032.health\ncsg-cse-0043.csg\nleven\nsas-alumni-0006.sasg\nmvm-ri-m115214.roslin\nosoft\nlisa.ppls\ncsw\nwww-test.dlhe.careers\nsas-reg-0046.sasg\nchocolates\nmvm-ccns-0081.ccns\nmvm-ri-d077055.roslin\nrip-c01m3.roslin\ncsg-pps-0030.csg\nhealth-lap63.health\nwww-dev.transparency.fec\nsas-reg-0041.sasg\nebri043221.roslin\nsas-cas-0080.sasg\nfcl\nmvm-ri-l125108.roslin\ngreen5\npinki\nfdp\nsas-reg-0035.sasg\nllc-staff-pc2.shca\nsas-alumni-0012.sasg\nmvm-ri-l137152.roslin\nycfc\nmvm-ri-l086031.roslin\nsas-reg-0030.sasg\nmvm-ri-d127018.roslin\nsas-reg-0024.sasg\nhealth-omq-031.health\nlafamilia\ncsg-fin-0109.csg\nmvm-ccns-0086.ccns\nwsprueba\nmvm-ri-d107221.roslin\ngic\neri267.roslin\nwrk014.csg\ncsg-est-0280.csg\nsas-reg-0018.sasg\nhdc\ngnp\ngox\ncsg-est-0205.csg\ntheparty\ncsg-est-0229.csg\nsas-reg-0013.sasg\nsce-coll-0008.scieng\nhrh\nphilo\njac\njad\nrii-045132.roslin\nmvm-ri-l115216.roslin\nsalavirtual\nhtt\ncsh-3-3.7-sfp-bw.sasg\nppls-polar2.ppls\nsas-reg-0007.sasg\nucsisa2.csg\nphp10\ncsg-hr-0049.csg\njhs\nhss-ppls-0039-dsb.ppls\nsas-reg-0002.sasg\nlect-hca-001.shca\njmc\nshilo\njmj\nmvm-ri-d076041.roslin\ncsg-est-0059.csg\ncsg-fin-0181.csg\ncsg-as-0000825.csg\naberdour.ee\nnylon\nccslaptop.scifun\nkmh\nsatin\nlaxman\ncsg-fin-0100.csg\nldu\nris-vlxweb04.roslin\ncsg-est-0009.csg\ncsg-fin-0131.csg\nmvm-ri-l127120.roslin\nmlh\ncsg-as-0000765.csg\nmvm-ri-d096109.roslin\nvbs-194232a.roslin\nmvm-ri-l117190.roslin\nwww-test.rae.planning\nmui\nmost-wanted\nbettyboop\nris-115173.roslin\nppls-printer6.ppls\nhealth-omq-011.health\ncsh-g-g12-sfp-bw.csg\ncsg-fin-0071.csg\nmvm-ri-d107056.roslin\n7brsq-g-1.204-mfp-col.iad\nwww.hesa.star.euclid\nebri073178.roslin\npcl\nomf\nris-esxi11.roslin\nwww.electronica\nwww.electronics\nprecor-demo.csg\nmvm-ri-l127049.roslin\nsas-alumni-0033.sasg\nsty001.csg\ncsg-saf-0057.csg\nraz\nwww-test.etime.finance\nrdx\ncsg-fin-0021.csg\nmvm-ccns-0102.ccns\nsas-reg-0039.sasg\nrix\nwww-test.reward.humanresources\nsel\nhealth-omq-013.health\nmvm-ri-l097129.roslin\nwww-dev.course-bookings.lifelong\nuncharted\nmvm-ri-d057106.roslin\nat-g-office-mfp-bw.csg\nebri013160.roslin\nwww-dev.pubsadmin.recordsmanagement\nmvm-ri-d064178.roslin\nwww.blackfire\ntce\namusement\ncsg-as-0000784.csg\ncsg-as-unitots1.ppls\nmvm-ri-l096186.roslin\nhca-mac010.shca\nssn\nmvm-ri-d076232.roslin\nmvm-ri-m135070.roslin\nuea\nhss-health-0119.health\nmvm-ri-d117233.roslin\nmvm-ri-v125248.roslin\nwww-test.student-experience\nhss-health-0100.health\nhss-health-l21.health\ndsb-et2.ppls\nvll\ncsg-est-0085.csg\ncsg-fin-0150.csg\nhss-health-l68.health\nmvm-ri-d115178.roslin\nhss-health-0006.health\nwse\nwww.hugoboss\nemasonmac.ppls\nwww.boxing\npcline\ncsg-hr-0019.csg\nmaquinaria\ncsg-hr-0035.csg\njayaprakash\nsaf074.csg\nsmartcom\nandrade\nhss-iad-0017.iad\nmvm-ri-l107058.roslin\nwww-test.eves.myed\nelshady\nscieng2.scieng\nhealth-hopepark-print1.health\nris-esx03.roslin\ncsg-cse-0042.csg\nhss-hca-0110.shca\npauls\nsweetdreams\ncubeworld\nsce-coll-0044.scieng\nsprinkler\nhss-hca-0049.shca\nmvm-ri-l096125.roslin\nwww.explore\ngfl035236.roslin\nacac\nmbplvdev2.ccns\nxeroxbd.ccbs\nmvm-ri-l077167.roslin\ncsg-fin-0200.csg\nwww.ess.euclid\ncsg-fin-0171.sasg\nwww.wonderful\nvcs-167225a.roslin\nsas-alumni-0059.sasg\nhealth-omq-005.health\nmvm-ccns-0096.ccns\naila\njuanjo\nyingyang\nsas-alumni-0054.sasg\nmvm-ri-d077041.roslin\nsas-alumni-0048.sasg\nvbs-19475a.roslin\namix\nalvi\ncsg-est-0278.csg\ng2csrv1.ccbs\nmvm-ri-l115181.roslin\nmvm-ccns-0107.ccns\nhss-health-0113.health\ncsg-as-0000844.csg\nb4-et-host.ppls\nhotwear\nbing\npaseo\ncaph\nsaltoftheearth\nwww-dev.star.euclid\navel\nceci\nhss-ppls-0160.ppls\nppls-colwyn.ppls\ncsg-fin-0199.csg\nsas-alumni-0037.sasg\nmvm-ri-l107165.roslin\nparin\nceus\naxon\nmvm-ri-d127112.roslin\ncsg-est-0168.csg\nwaverley-p4\ncsg-sec-0032.csg\nswanston-jvcs.scieng\ncire\nppls-osxsrv-7gs.ppls\ncita\ncsg-fin-0110.csg\ndass\nhealth-lap-029.health\nsas-alumni-0032.sasg\ntommy-lap.trg\nmindgames\ndeck\nkhalifa\ncpam\ncsg-est-0118.csg\ndm4u\nsas-alumni-0028.sasg\naffirm.sps\ncsg-cse-0010.csg\nwebcam.scieng\nrisen\nrim-086213.roslin\ndigitalnet\nsas-alumni-0026.sasg\ncssc\ncsg-est-0058.csg\nzap178a.roslin\nedam\ncsg-fin-0180.csg\nstarlive\ncsg-as-0000824.csg\ncyds\nmvm-ccns-0105.ccns\nmvm-ccns-0091.ccns\nsas-alumni-0021.sasg\ncsg-est-0008.csg\nmvm-ri-d097031.roslin\nfaty\nrbci083206.roslin\ncsg-fin-0130.csg\nemailpro\nmvm-ccns-0090.ccns\nemis\nepsa\nfide\ngabe\nsysinfo\nsas-alumni-0015.sasg\nhss-health-l56.health\nsahid\nccace-media-pc.ppls\nesme\nmvm-ri-l125020.roslin\ngaro\ncsg-fin-0069.csg\ncsg-fin-0096.csg\ncsg-est-0267.csg\nwww-dev.jams.finance\neven\nsas-alumni-0009.sasg\nmvm-ri-d126156.roslin\ngets\nfora\nhabo\nrim-117144.roslin\nhass\ncsg-saf-0056.csg\nbetaversion\nmvm-ri-l097104.roslin\ncsg-fin-0020.csg\ncsg-as-0000777.csg\ncam-mac013.sasg\ngrin\nmypix\nmvm-ccns-0078.ccns\nhoma\ncsg-est-0138.csg\nmvm-ri-l134245.roslin\njaco\nnoris\nikka\natl2-1\njaza\nsas-alumni-0004.sasg\ncam-mac007.sasg\ninso\ncsg-fin-0079.csg\niona\natl2-2\ncam-mac002.sasg\nipop\nmvm-ri-l137162.roslin\nirce\nmvm-ccns-0067.ccns\nkafu\ncsg-as-0000243.csg\nwaverley-p5\nmyers\nghosting02.roslin\nwaverley-p3\nwaverley-p1\nmvm-ri-m116086.roslin\nmvm-ri-d127028.roslin\nkosmetyki\nsaga3\nlalo\natl2-3\natl2-4\nsas-intl-0060.sasg\nbeans.cache\nsas-alumni-0034.sasg\nkoru\nebri093151.roslin\nm.cod\nsas-ssp-0006.sasg\nmvm-ri-i065202.roslin\nnoman\nm.mcp\nhealth-omq-041.health\nris-hpcx01.roslin\neplab4.ppls\nnerv\nnexa\nsas-cas-0076.sasg\nmvm-ri-d086205.roslin\nfranking.sasg\nwww.wpc\nm.vip\nmusi\nmvm-ccns-0093.ccns\npadi\noldcoll-2-corridor-mfp-col-1.csg\nsrv028.csg\nblackdiamond\nnagios2.ppls\nwww.coaching\nmvm-ri-l127092.roslin\nsmartshop\nwww.star.euclid\ngfl-117117.roslin\nmvm-ri-m106026.roslin\nrii-115122.roslin\nopps\ncsg-hr-0034.csg\nwww.gameonline\nsce-coll-0018.scieng\nlindy.ppls\nmvm-ri-i075201.roslin\nhss-iad-0016.iad\npcscifun7.scifun\npsic\nmvm-ccns-0045.ccns\nmvm-ri-l085157.roslin\nresa\nwww.creativity\nsec10.roslin\nsape\ncsg-fin-0089.csg\ncsg-nad-003.csg\ncsg-cse-0041.csg\ncsg-est-0188.csg\nrody\nsert\nmvm-ri-d096194.roslin\ntimeshare\nrope\npenelope.sie\nshey\nmutaz\nstatusuri\nsige\nsigi\ncsg-fin-0029.csg\nsas-alumni-0040.sasg\nis-apps-0094.isg\ntemp-wipe.ppls\nmvm-ri-l137067.roslin\nmvm-ccns-0034.ccns\nherpderp\nsuka\ngfl-117141.roslin\nwww.habbohotel\ncsg-saf-0049.csg\naudiovisual\nmed-000407.isg\nwars\nwww.forsale\nuuuu\niroquois\nmunir\nlordanime\npacwest\ncsg-cse-0029.csg\nyari\nxmac\ned1stcatering.csg\nmvm-ccns-0080.ccns\nhca-jpglab-028.shca\ncsg-est-0248.csg\nzape\nyiyo\nzhan\nnewhaven-gss.scieng\njwhite\ncocacolo\nsas-alumni-0045.sasg\nworkforce\ngeos-d-0036.scieng\nsisco\nnitin\nanimaco\nmvm-ri-l116088.roslin\ntuki\ntopmovies\nmvm-ri-d116203.roslin\nsasg-oldcoll-g-foy-2.sasg\nppls-printer5.ppls\nmvm-ccns-0023.ccns\nmvm-ccbs-060453.ccbs\nmundodigital\nppls-psylib-02.ppls\nhca-jpglab-023.shca\ng2cweb1.ccbs\nhca-rc-015.shca\nwww.megaupload\nhca-jpglab-017.shca\nwww.portugal\ndelarosa\ndextroyer\nwww.steven\nsoporteinformatico\nmvm-ri-l115155.roslin\nwww.atlantis\ng2csrv3.ccbs\nhca-rc-010.shca\nshinyshop\nnikky\njewelery\nemporio\nhca-spglab-045.shca\nris-vblx04.roslin\nmvm-ccbs-060442.ccbs\npostales\nhca-jpglab-012.shca\nmvm-ri-d076064.roslin\nwww.salfor.finance\ntimetoshine\nhca-rc-004.shca\ndontask\nmrgud\nesolution\nwww.muzica9\nhca-spglab-039.shca\nwww.chistes\nbendice\nvis-hp1.sasg\nmegamanx\nmoxie\nhss-health-0125.health\nmvm-ri-i135018.roslin\nhca-jpglab-006.shca\nsas-reg-0029.sasg\ncsg-est-0308.csg\nhelp.sps\nsas-alumni-0051.sasg\nmvm-ri-d134255.roslin\nmonop\nhca-spglab-034.shca\nmvm-ri-d115189.roslin\ncateringopsprint.csg\nhca-jpglab-001.shca\nppls-util.ppls\nebrm073200.roslin\nbahia\nsocialnet\nmvm-ri-d115021.roslin\nbalde\nwrw-g-8-mfp-bw.shca\nwebmail.beta\ndsb-lptp2.ppls\nwww.habboretro\nmonal\nartecultura\nwww.totalwar\ncsg-est-0117.csg\nipv4.beta\ndevreports\nns.beta\nstar4ever\nppls-g26-test.ppls\ncsg-est-0057.csg\nmvm-ccbs-040218.ccbs\nwww.readrae.planning\nabelnf\ncsg-fin-0178.csg\nwww.literature\ncontractors\nwww.smartnet\ncsg-as-0000823.csg\nmvm-ri-i135017.roslin\nhca-spglab-017.shca\nlync2010\nhss-health-0016.health\nmvm-ccbs-060414.ccbs\nsnafu\ncsg-fin-0128.csg\nedgesight\nris-fasdev.roslin\ndarkhacker\nreg-oc-ho.sasg\nelitesports\nwww.cristina\npfp\nhealth-mac011.health\nhca-jpglab-008.shca\nhca-spglab-012.shca\nmdi\nkinera\nrock-2\nantonyo\nsas-dis-0033.sasg\nvbs-lap1948a.roslin\nblackbear\nhss-ppls-0217.ppls\nactecs\ncsg-fin-0068.csg\nmocco\nsas-alumni-0056.sasg\nsce-coll-0054.scieng\nhybrida.scifun\nwww.shakira\nsas-dis-0027.sasg\nmvm-ccbs-060403.ccbs\npat0.roslin\nedunet\nhss-ppls-0212.ppls\neltigre\ncsg-saf-0055.csg\ncsg-fin-0176.csg\ncsg-fin-0018.csg\ncalis\ncampi\nhss-ppls-adl26.ppls\nlukka\nartstudio\nmvm-ri-i066099.roslin\ncsh-2-2.15-bw.csg\nwww.protektor\nluken\nthelion\nvbs-laptop01a.roslin\nwww.playgames\nhss-ppls-0206.ppls\nimportaciones\nwww.alexgames\nwrk-laptop2.csg\nhss-ppls-adl21.ppls\nwww-test.transparency.fec\nsas-dis-0016.sasg\ndeg\nhss-health-0096.health\nhappyfeet\nhss-ppls-0201.ppls\nppls-trans.ppls\nrefused\n20gilmerton-g-office-mfp-col.csg\nnazia\nrayitodeluz\nhabboweb\nwww.parking\nhealth-omq-015.health\nsas-dis-0011.sasg\nwww.fotoalbum\nwww.shemale\nborax\nhss-ppls-0185.ppls\nbienestar\nzyngachips\nhealth-omq-017.health\nbrokendreams\nmvm-ri-d077115.roslin\nlooking\nnasir\nhss-ppls-adl09.ppls\nm.rai\nris-vlxrt.roslin\nsas-dis-0005.sasg\nhss-ppls-0180.ppls\npuzzles\nbandas\nwww-tmpdev.star.euclid\ndarkblood\nms-dw6-2-15-mfp-col.health\nmvm-ccbs-040169.ccbs\nppls-mac031.ppls\npib\nmk13\ncsg-est-0279.csg\nhabbonet\nmk2\nnandi\nhss-ppls-adl04.ppls\nmvm-ri-d077043.roslin\nmvm-ri-d134253.roslin\nbaster\nopensocial\nppls-pc159.ppls\nmiron\nalerta\nhss-ppls-0174.ppls\ncsg-cse-0012.csg\nskyonline\nmyshopping\nwww.practicas\nalivio\ntokunaga\nmvm-ri-d096242.roslin\nmvm-ri-l115191.roslin\nppls-mac025.ppls\nflamenco\nhss-health-0123.health\nppls-pc154.ppls\nwww.transformice\nminna\namigas\nhss-ppls-0168.ppls\ncsg-hr-0033.csg\nteenchat\nrelojes\nmvm-ri-d095131.roslin\nnadav\nnumismatica\nkampala\nppls-mac019.ppls\nwww-test.miniportfolio.euclid\ncasagrande\nbuenavista\nmvm-ri-l107175.roslin\nhss-iad-0015.iad\nmvm-ri-d137169.roslin\nkaffee\nppls-mac014.ppls\nebri063164.roslin\ncsg-cse-0040.csg\nwebmastertools\nsas-intl-0037.sasg\nantrax\necci-jh.scieng\nrim-115171.roslin\nmvm-ccns-0063.ccns\nhss-ppls-0157.ppls\ncsg-fin-0219.csg\nseguros\nppls-mac008.ppls\noldcoll-2-corridor-mfp-col.csg\nwww.lacoste\nsbmacbook.ppls\nappsgt\nwww.cityweb\nsas-intl-0063.sasg\nwww.universe\nsce-coll-0056.scieng\nhss-ppls-0152.ppls\narceus\nppls-mac003.ppls\nhss-iad-0037.iad\nwww.employerdatabase.careers\nsas-intl-0057.sasg\nbda\nminaret.ppls\nwebmsn\nmvm-ri-l094187.roslin\nspace3\nris-esx01.roslin\nhss-ppls-0146.ppls\nsas-mac001.sasg\njzj\nsci033.scieng\nwww.rae.planning\neulib\nold.search\ncsg-est-0230.csg\nhss-health-l66.health\nint-usbmac7.sasg\nloyal\nmailwfe5.staffmail\nmailwfe7.staffmail\nmvm-ri-i005076.roslin\nhss-ppls-0141.ppls\nint-usbmac2.sasg\nmvm-ri-d096107.roslin\nwww-dev.secure.vle\nmvm-ri-d127244.roslin\ncen\nreza1\ncsg-hr-0055.csg\nsas-intl-0046.sasg\nmvm-ri-d107218.roslin\nchd\nlect-health-007.health\nclb\nwww.downloads.euclid\nhss-ppls-0135.ppls\nrid-056021.roslin\ndbz\nservices.learn\nhss-ppls-0129.ppls\nmvm-ri-d125022.roslin\ncylon\nmvm-ri-d125233.roslin\nhss-health-0018.health\nhca-lab3-mac29.shca\ntortilla\nasesor\nhss-health-0138.health\nmvm-ri-l126240.roslin\nmvm-ri-d115201.roslin\ncvc\nsas-intl-0035.sasg\nmvm-ri-l096171.roslin\necu\nwww-test.ess.euclid\nhss-ppls-0124.ppls\nroslin-dc\nsas-intl-0030.sasg\nwww.jams.finance\ncsg-est-0166.csg\ncsg-sec-0029.csg\ndti\nmvm-ri-d067079.roslin\nsas-sra-0035.sasg\nmvm-ccbs-060310.ccbs\nhss-ppls-0118.ppls\nppls-g26-024.ppls\neoc\nsas-intl-0024.sasg\nmonkeys\ncsg-est-0116.csg\nhss-hca-0062.shca\ndigger\nrmsbigsave\nhss-health-l05.health\narturo\nvirtualgames\nsas-sra-0030.sasg\nmvm-ccbs-060294.ccbs\nwww.kira\nflg\nppls-7gs-011.ppls\nwinocular\natenas\nlearnspanish\nppls-g26-018.ppls\ncsg-est-0169.csg\ncapcap\ndoc-e-fil\nsas-reg-0183.sasg\nmetod\nm.people\ncsg-est-0056.csg\ncsg-sec-0033.csg\nwww.usana\npantherplace\ncarols\ncalentamientoglobal\nsas-scs-0023.sasg\nsas-sra-0024.sasg\ncsg-fin-0177.csg\nhss-ppls-0097.ppls\nwww.blackandwhite\ncsg-as-0000822.csg\nibn\nwww.vega\nhlm\nbus-routes\nppls-g26-013.ppls\ncatweb\nmvm-ri-d137037.roslin\nfahrenheit\njck\natomix\nsas-intl-0013.sasg\nicue\nipf\nebri053211.roslin\nwww.borderweb\nitt\nfivestar1\ngtmbigsave\nestadistica\nsearchme\nhabbinfo\ngmsbackpack\nwww.vanguardia\nsce-coll-0028.scieng\ncyberchat\n11infst-1-fsu-mfp-col.csg\nkicker\nsas-sra-0018.sasg\niparent\nlec\npinkribbon\nlio\nkui\ncsg-fin-0127.csg\nhss-ppls-0092.ppls\nppls-g26-007.ppls\nnursietoo.ppls\nsas-intl-0007.sasg\nboombang\necopro\n33bp-g-reception-mfp-bw.sasg\nlsu\nsas-scs-0012.sasg\nsas-sra-0013.sasg\ncsg-fin-0067.csg\nhss-ppls-0086.ppls\nmvm-ri-svcen.roslin\nfreemovies\nppls-g26-002.ppls\nmvm-ri-d096214.roslin\nmvm-ri-d136094.roslin\nsas-intl-0002.sasg\ncsg-saf-0054.csg\nwww.coffeebreak\nsas-scs-0006.sasg\nsas-sra-0007.sasg\ncsg-fin-0017.csg\nnrc\nhss-ppls-0081.ppls\ncsg-as-0000652.csg\npsy-elaine-niven.ppls\ncsg-hr-0061.csg\nhss-health-l33.health\nsas-sra-0002.sasg\nwrw-3-06-mfp-bw.shca\nmvm-ri-d136220.roslin\nwww.watson\nverizon\nwwms313igel.shca\nflawless\nril-026062.roslin\ncsg-pps-0015.csg\ncybersoft\nsrv109.csg\nova\nwww.vital\ncyberstop\nppls-atlab-001.ppls\nmatty\nthemusic\ncsg-hr-0040.csg\nmvm-ri-l117220.roslin\nwww.philosophy\nhss-ppls-0069.ppls\nrip-brfm8.roslin\nwww.freelance\nriv-amxwap.roslin\nrjc\nmvm-ri-d097076.roslin\nppls-printer20.ppls\nebri073208.roslin\nhss-ppls-0064.ppls\ntmu-g-trades-mfp-bw.csg\nsci068.scieng\nmvm-ri-l115165.roslin\nwww.earnmoney\nmarwa\nwww-test.ermis.planning\nshk\nhss-health-0087.health\nrim-107122.roslin\nmasla\ndulce\nppls-printer14.ppls\nbonami\ncsg-as-unitots3.ppls\nlewis-mac.ppls\nmvm-ri-d125091.roslin\nscifunlaptop5.scifun\nmvm-ri-d095032.roslin\ncsg-est-0093.csg\npcs4000-5001.roslin\nmvm-ri-l115159.roslin\nmvm-ri-d076074.roslin\nhss-hca-0123.shca\nsrv026.csg\nppls-polar1.ppls\nstn\nmvm-ri-d077185.roslin\nmvm-ri-m136033.roslin\nvmlgen-pc.ppls\ntml\nsas-intl-0021.sasg\nhss-hca-0117.shca\nfindlove\ncsg-hr-0032.csg\npeffer-g-office-mfp-bw.csg\nhss-ppls-0047.ppls\nchacal\nchacho\nttm\nsas-cam-0020.sasg\nulp\nhss-iad-0014.iad\nnrg5.ppls\ncsg-corp-0006.csg\ncsg-hr-0011.csg\nhss-hca-0112.shca\nchavez\nmvm-ri-l136096.roslin\ncsg-nad-001.csg\nwdb\nhss-ppls-0042.ppls\nboxing\nppls-y2lab-001.ppls\ncsg-saf-0027.csg\nboxnet\ncsg-cse-0038.csg\nscs-onelan.scieng\nmotorcu\nwww.warlords\nmadeleine\nd194135a.roslin\nhss-iad-0010.iad\nwww.landing\nenric\nhss-hca-0096.shca\nppls-tilllptp.ppls\nhss-ppls-0036.ppls\ncsg-fin-0197.csg\nwww.pod.drps\ncsg-est-0060.csg\nhss-ppls-0109.ppls\nxam\nsce-coll-0041.scieng\nmichaeljordan\nhss-health-l41.health\nwww.elegantmodel\nmacad.ppls\nevilempire\nsmartdesign\nmvm-ri-d115208.roslin\ndagmar\nvalles\nhss-ppls-0031.ppls\nppls-hegel.ppls\nvabel\nmarea\nmvm-ri-d107246.roslin\nhss-health-0026.health\narquitecto\nbestchoice\nhss-hca-0085.shca\ncomentarios\nyoel\nhss-ppls-0025.ppls\nmvm-ri-v115198.roslin\nwww-test.ppmd.euclid\nsci175.scieng\nfatos\nwww.fina\nsce-coll-0064.scieng\nclanak\ngoldenstar\nhss-hca-0079.shca\nribbon\ncech\nwww.dinamico\nhss-ppls-0019.ppls\nneurosys\nmeandyou\nwww.laptops\ndjzone\nwww.videogames\nwrk059.csg\nwww.taekwondo\nbungie\nprinter25.ppls\nprismatic\nhss-hca-0074.shca\nwww.demoshop\nhss-health-l50.health\nmac-skype.csg\njantar\nris-vblx06.roslin\nmvm-ri-l115157.roslin\nwww.nintendo\ncifs\nmvm-ri-l096145.roslin\nwww-test.timetab\ncsg-as-0000735.csg\nest-forhill-g-trades2.csg\ngfl075344.roslin\nwww.deltaforce\nsce-coll-0049.scieng\nsas-princ-0003.sasg\nsci061.scieng\ncocina\ncodigo\ncsg-as-sacconference.csg\nartesanias\nmvm-ri-d116071.roslin\nwww.skating\npacifico\ncsg-cse-0034.csg\nwww.ape\nhss-ppls-0008.ppls\nmanar\nsas-scs-0019.sasg\ncsg-est-0225.csg\nris-onelan02.roslin\nwww.cbc\nhss-hca-0063.shca\nhealth-omq-025.health\nmanan\nebri073201.roslin\nhss-ppls-0003.ppls\ncsg-est-0165.csg\nhss-ppls-0104.ppls\nest051.csg\ncsg-sec-0028.csg\nwww.dam\nwww.dcc\nmvm-ri-d067178.roslin\ndevsys\nwww.cpt\nwww.cri\nwww.xl\nhca-lab3-mac25.shca\ncorpuschristi\nmall5\nmall4\nwww.edy\nwww.eet\nhss-hca-0057.shca\ncontactanos\ncortex\nppls-g26-010.ppls\nmall2\nmvm-ri-m115137.roslin\nwww.ems\nlissa\ncsg-as-0000785.csg\nrip-brfm1.roslin\ncsg-est-0115.csg\nint-jet5c.sasg\nsigns\nhss-hca-0052.shca\nsce-coll-0003.scieng\nmainy\nwww.fra\ncsg-fin-0151.csg\ncristovive\ncsg-est-0055.csg\nplazma\nholyrood-le1\nmajda\nholyrood-le0\nwww.reward.humanresources\ncsg-est-0030.csg\ncontrolcenter\nwww-test.events\nhss-health-0133.health\nrim-076013.roslin\nlion1\ncreato\nespf.ppls\nhss-hca-0046.shca\nwww.hun\ncsg-as-0000821.csg\nwww-test.admin.eves.myed\nppls-kiosk-01.ppls\naxa-hrm\ncsg-est-0005.csg\nrip-c02m4.roslin\nwww.boombang\nsas-intl-0010.sasg\nmacka\nctx2\ncsg-fin-0126.csg\ndjdark\nhss-hca-0041.shca\nmvm-ccns-0078-vm1.ccns\nmetsa-ctx\nest026.csg\ncsg-fin-0066.csg\nwww.nostalgia\ndinero\ninditex\nhss-hca-0035.shca\nszukajpracownika\nvbs-194162a.roslin\nescuela\no1.email.praca\nempikbeta\nbdb-1-finance-sfp-bw.ccbs\nris-vlxgw01.roslin\naap063.sasg\nscanner-b62959b.csg\ncsg-saf-0053.csg\nsas-sra-0015.sasg\nboygirl\nextremedream\nwww.corina\nwww.nak\nwww.ned\ncsg-fin-0016.csg\nevaluaciones\nhss-hca-0029.shca\ncsg-as-0000651.csg\nmvm-ri-d086118.roslin\ncamaieu\nsas-reg-0161.sasg\nhca-lab3-mac20.shca\ndjneto\nbluesoft\nwww.oli\nrivoli\nhrkim.ad\nhss-hca-0024.shca\nwww.pim\nwww.osi\nmvm-ri-d107202.roslin\nxpr-touchscreen.shca\nwww.ganoexcel\nbitbyte\nmvm-ccbs-060145.ccbs\nwww.pti\nhrm2\nwww.raw\nofertypracy\nholaholahola\nkv.ad\nri-dpcs1.roslin\nppls-y2lab-211.ppls\nkokos\npp4sspc6.scifun\nwww.nelson\nhss-health-l76.health\nwww.sav\nwww.mifamilia\nwww.sk8\nwww.rac\nwww.sig\nhss-hca-0018.shca\nwww.onedirection\nmailbe12r.staffmail\ntokio\nwww.stc\necosol\nfin210.csg\nmultikino\nppls-mbook01.ppls\nppls-y2lab-205.ppls\ndo.atman-isp\nhss-hca-0013.shca\njbr\ncsg-as-0000845.csg\ntransglobal\nhca-netprint-bw6.shca\nppls-y2lab-200.ppls\ncanizares\nsas-cas-0086.sasg\nvesuvius\nwww.vid\nhss-hca-0007.shca\nerptemp.ppls\nultimategames\nseminario\nmvm-ccns-0030.ccns\nhca-netprint-bw1.shca\nbiggboss\norca.ppls\ncsg-fin-0211.csg\nlemot\nfirenet\nmvm-ri-i115172.roslin\nwww.wot\nmvm-ri-d064173.roslin\nmvm-ri-d067070.roslin\nhca-jpglab-029.shca\nris-vtlx02.roslin\ndmusic\ncsg-hr-0081.csg\nmvm-ri-d125243.roslin\nwww.xyz\njully\nwww.tutorials\ncsg-est-0079.csg\n4life\nrid-056211.roslin\nhss-hca-0002.shca\nkincaids-cctv4.csg\nkb-canon2.csg\nmsantos\nhss-health-0101.health\nalex24\nsas-scs-0008.sasg\ncsg-hr-0031.csg\nwww.vampires\nsatisfaccion\nmvm-ri-d096170.roslin\nautotech\ngalaxia\nsas-sra-0009.sasg\nmileycyrus\nnikolas\nmvm-ri-d086047.roslin\nlib-mac-009.trg\nhss-iad-0013.iad\nwww.worldsport\ncsg-eusu-0001.csg\nmvm-ri-d104172.roslin\nredox\nsas-cas-0069.sasg\ncsg-cse-0037.csg\nstarprogging.ppls\nwww.animemanga\ngameday\ngames11\ngamenew\ngamertv\nwelding\nhss-health-l15.health\nccnsm074.ccns\neljoker\nwww.futbolmundial\nkallisti\nwww.soporteinformatico\nnextgeneration\nsas-reg-0004.sasg\nwww.reading\nhss-health-0001.health\nwww.robotic\nradiostyle\nguidance\nwww.pirate\nnewwave\ncasanet\npsychlaptop.ppls\nwww-test.adminrae.planning\nmvm-ri-l127110.roslin\nfanime\nrankings\nhca-lab3-mac22.shca\nedadfed\nisitech\nrastaman\nms-dw6-2m-0-mfp-col.health\nmvm-ri-l067163.roslin\nsas-cas-0058.sasg\ngfd075245.roslin\nelblog\nwww.numbers\nphstl-g-reception-mfp-bw.csg\nwww.informatika\nsce-coll-0038.scieng\ncatcher\nmvm-ri-i005193.roslin\ncsg-scecc-0004.scieng\nhandbags\nlib-mac-011.isg\nstellamaris\net-dsb-b04.ppls\nsas-cas-0042.sasg\nelixir\nsas-sra-0004.sasg\nthunderbolt-display.scieng\nhca-laptop-006.shca\nrogerio\nris-redi01.roslin\nwwms226igel.shca\nsas-cas-0036.sasg\nsas-reg-0150.sasg\ninsplap.scifun\ncsg-est-0139.csg\ncsg-est-0224.csg\nmvm-ri-l086049.roslin\nlamis\nteu009.csg\nlamer\nwww.playlist\nsas-cas-0031.sasg\ncsg-est-0164.csg\ncsg-sec-0027.csg\nlambo\nppls-y2lab-128.ppls\nccnsm035.ccns\nsas-cas-0070.sasg\nebri053150.roslin\nmvm-ri-l137093.roslin\nepicfail\nonlinesv\nbbox\nsas-cas-0025.sasg\nmvm-ri-i075149.roslin\nandr\nmvm-ri-l115175.roslin\nhss-health-0097.health\ncsg-est-0114.csg\nvijay123\nnetc\njunior12\nasan\narsa\nris-vnlx01.roslin\nwww.webzone\nppls-y2lab-123.ppls\nsas-reg-0009.sasg\nsas-cas-0019.sasg\nlib-pc-1707.isg\nccgh\nworldclub\nbusiness-school\nwww.nextel\nboda\ncsg-est-0054.csg\nppls-y2lab-117.ppls\nmvm-ri-d096206.roslin\nenvole\ngodknows\nstargames\ncsg-fin-0175.csg\nhappyhappy\nhca-jpglab-018.shca\nsas-cas-0014.sasg\ncsg-as-0000820.csg\ncreditos\ncsg-est-0200.csg\nsas-alumni-0058.csg\ndarkhell\nris-vlx10.roslin\ncsg-est-0004.csg\nppls-y2lab-112.ppls\njozef\nedel\nmvm-ri-i085148.roslin\ncsg-as-0000759.csg\nwwms01m20igel.shca\negac\nforums5\njosua\ngatoman\nppls-y2lab-106.ppls\nfede\nmoonster\ncsg-est-0135.csg\nkhanh\nmotoshop\ncsg-fin-0065.csg\ncyberstore\nmiweb\nsas-cas-0003.sasg\nneeps.cache\nmypag\nesma\ngalt\nestudio\ncsg-saf-0052.csg\ngeco\nfoci\nfolk\nppls-y2lab-101.ppls\ndarkzone\ngavilan\nescool\ncsg-fin-0015.csg\nebri023188.roslin\nwww.zoom\nhss-health-l51.health\nwebdisk.student\nwww.smartdesign\nautoconfig.student\nwww.pubs.recordsmanagement\njordy\nmvm-ri-l085045.roslin\nwww.legends\nris-lx01.roslin\ngamess\nlauren-lptop.ppls\nobelisk\nsas-reg-0015.sasg\njags\nebri013159.roslin\nbackup-kbserv2\nmvm-ri-d107203.roslin\nsas-chap-0001.sasg\nwww-dev.admin.drps\nmvm-ri-l134239.roslin\nlelman20.ppls\nketty\nwww.hero\njesu\nipsa\nwww-devupg.myed\nvcs-126125a.roslin\nisam\nsas-cam-0029.sasg\nris-buildlx02.roslin\nsbvm2012.ppls\nirys\nkass\nmvm-ri-l115228.roslin\nwww.animeworld\nvis012.sasg\nmalaika\njomar\navaluos\njmmp\nsas-cam-0024.sasg\nhomosexuales\nmvm-ri-l137156.roslin\nebrilx093139.roslin\nrim-097068.roslin\ntsuki\ncsg-hr-0079.csg\nwww.goddess\nvis006.sasg\ncsg-est-0249.csg\nkincaids-cctv3.csg\nhss-health-0099.health\nlau03.roslin\ncsg-hr-0029.csg\nwww.abcde\nsce-coll-0021.scieng\nhealth-omq-035.health\nlgbt\nkosh\nproxycom\nvis001.sasg\nsamadhi\nhss-iad-0012.iad\nmvm-ri-d107140.roslin\nwinsrv2.ppls\nevelin\nhealth-lap-seminar.health\nsas-cam-0007.sasg\nfloral\nris-ptesxi.roslin\nsce-coll-0013.scieng\ncsg-as-0000209.csg\nsas-cam-0002.sasg\nmvm-ri-l115221.roslin\nppls-imac-01.ppls\nwww.bandy\nwww.banks\nwww.barra\nmusiconline\nmvm-ri-i136255.roslin\nmurali\ncsg-fin-0019.csg\nsec04.roslin\nhca-jpglab-007.shca\nwww.alone\nsas-reg-0021.sasg\nmvm-ri-d096188.roslin\nmvm-ri-l097195.roslin\nsci034.scieng\nmvm-ri-d117131.roslin\nwww.blackboard\nlib-mac-010.isg\nwww.annie\njlink\nmvm-ri-l127231.roslin\ncastelli\nsanchez\nmrcs\nwww.language\nwww.bible\nwww.tata\nmvm-ri-m135069.roslin\nwww.arias\nwww.aries\nhss-ppls-0061.ppls\nhca-mfd-006.shca\nsheridan\nshishi\nmvm-ri-d127198.roslin\ncsg-est-0333.csg\nholyrood-kbserv3\nholyrood-kbserv2\nwww.blast\nhca-mfd-001.shca\nsampler\nexcess\ncsg-est-0310.csg\nsatsuki.ppls\nmvm-ri-d087240.roslin\ngenial\npaes\nhca-spglab-035.shca\nppls-y2lab-018.ppls\ncsg-est-0204.csg\nmvm-ri-d086191.roslin\nmvm-ri-d086207.roslin\nwww.bosch\nris-vwinprn3.roslin\nkatar\nwww-test.disability-office\nwww.parsian\nsas-reg-0026.sasg\nweir-g-105a-mfp-bw.scieng\nppls-y2lab-013.ppls\nwww.ciber\nrii-115129.roslin\ncsg-est-0163.csg\ncsg-sec-0026.csg\nppls-y2lab-007.ppls\nhca-jpglab-002.shca\nvbs-lap-194222a.roslin\npetz\nmarks.sps\nwww.cisco\ncsg-est-0113.csg\nhealth-omq-043.health\ngfd-117143.roslin\nwww-test.office365\nwww.destiny\nppls-y2lab-002.ppls\nwww.decor\nsas-reg-0032.sasg\nwonka\nris-hpc01.roslin\nwww.abcdef\nsec09.roslin\ncsg-est-0053.csg\nnew2008\nrii47245.roslin\nlect-hca-002.shca\ncsh-3-3-7-mfp-bw.sasg\nwww.echelon\ncsg-fin-0174.csg\nwww.diana\nkandy\ncsg-est-0003.csg\nmvm-ri-m135074.roslin\nwww.happiness\nhca-escreen-03.shca\nqixi\ncsg-fin-0124.csg\ncsg-as-0000758.csg\nmvm-ri-m116126.roslin\narres\ncsh-b-b1.9-mfp-col.csg\ntrg-sr2.trg\nesi-tosh.ccbs\nmvm-ri-d067072.roslin\nwww.spl\nhalocombat\nismet\nwww.contactanos\ncsg-as-0000708.csg\nhss-health-l25.health\ncsg-est-0144.csg\nmvm-ri-i075053.roslin\nmvm-ri-v105156.roslin\nwww.wisard.registry\njivan\nsas-reg-0037.sasg\nhss-health-0011.health\ncsg-saf-0051.csg\njithu\nrid-057083.roslin\nhealth-mac005.health\ncsg-fin-0010.csg\nlib-lap-1653.isg\nsci159.scieng\njiten\nsce-coll-0048.scieng\nril-047127.roslin\nkaiba\nhss-hca-0120.shca\nwww.drive\nwww.droid\nshay\nfranck\nsas-reg-0043.sasg\nfrases\nmetroid\nris-vlx01.roslin\nwww.mhm\ncsh-3-3.8-col.sasg\nwww.era.finance\nwww.aslan\nsec08.roslin\nwww.elisa\nwww.emaus\nmvm-ri-l096129.roslin\nmvm-ri-d096234.roslin\ntavo\nwww.emily\nwww.adagio\nnewhaven-jvcs.scieng\nfreepc\njinji\nfrenzy\nteru\nwww.enric\nwww.enter\ncsg-pps-0038.csg\nwww.confort\nmvm-ri-l120711.roslin\npsy-pc022.ppls\nmvm-ri-i135223.roslin\nhss-ppls-0050.ppls\npsy-pc016.ppls\nhabbbo\nhabbix\nhabbuk\nmvm-ri-d104179.roslin\ncsg-cse-0013.csg\nhealth-omq-009.health\nwww.gapps\nsawayaka\nrii-105166.roslin\nmuebles\nwww.lastminute\nisaak\nmesh\nsrv023.csg\nsas-reg-0048.sasg\nkincaids-cctv2.csg\nris-ilx01.roslin\ncsg-est-0084.csg\nsas-bu-0045.sasg\nmvm-ri-p125078.roslin\nlib-mac-007.trg\nmvm-ri-d094190.roslin\nhca-mac001.shca\nhss-iad-0011.iad\nmvm-ri-d107211.roslin\nthemasters\nionut\nwww.survivor\nsas-bu-0039.sasg\ncsg-cse-0063.csg\nhealth-mac001.health\nmvm-ri-d134247.roslin\ncsg-cse-0035.csg\nwww.cooking\nhss-health-0117.health\nsas-bu-0034.sasg\nwww.funny\ninsta\nris-trac01d.roslin\nwww.heart\ncsg-as-0000849.csg\nhealth-omq-020.health\nwww.gogle\nmvm-ri-d126158.roslin\nsas-bu-0028.sasg\npef\nhaoyun\nmvm-ri-d137164.roslin\nlap-temp.csg\nseniors\nmajoo\neventus\nsas-bu-0023.sasg\nmyworlds\nyasui\nuniad\nwrk116.csg\nmanes\nhca-tlab-021.shca\nsas-bu-0017.sasg\nwww-dev.employerdatabase.careers\ncerc4.roslin\nwww.santamonica\nsas-reg-0054.sasg\nhca-mac006.shca\nmvm-ri-l087099.roslin\nris-esxi01.roslin\nwww.messaging\nwebmix\nwww.arteycultura\nindah\nmomo11\nhca-tlab-015.shca\nchecker\nmorcom01.ppls\ngamemania\nwww.restaurante\nlupo\ncsg-est-0034.csg\naston-martin\nsas-bu-0012.sasg\nmvm-ri-d097035.roslin\nimgup\nwww.human\nvelas\nmvm-ri-l104182.roslin\nnsu-union-0001.unison\ncas-mlb3-011.sasg\nhca-tlab-010.shca\nwww.intro\nblueway\nhss-health-l61.health\nsas-bu-0006.sasg\ncsg-est-0272.csg\nwww.kakao\nris-lx11.roslin\ncas-mlb3-005.sasg\nris-lx08.roslin\nhca-spglab-029.shca\ninfinitygroup\nris-esxi03.roslin\nris-devlx.roslin\nftp.srna-mammal.roslin\nhca-tlab-004.shca\nwww.kenzo\nwww.jogos\nramos\nmvm-ri-d126161.roslin\nwww.joshi\nhss-iad-0038.iad\nwww.joyas\nksltop.ppls\norizont\nwww.label\nsas-bu-0001.sasg\nhss-health-l58.health\ncsg-est-0222.csg\nwww.laser\nwww.judas\nrandi\nhss-hca-0108.shca\ncsg-as-0000248.csg\nmvm-ri-l097108.roslin\nmvm-ri-d107213.roslin\ncsg-hr-0056.csg\nhss-hca-00104.shca\nhenrry\ncsg-est-0162.csg\nnakayama\njaved\nroraima\ncsg-eusu-0002.csg\ncsh-g-g22-mfp-bw.csg\nahazlett-pc.ppls\nhss-ppls-0038.ppls\npresenter.csg\nhernan\ncsg-est-0112.csg\ntmp-health-003.health\nwww-dev.ccts.careers\ngolazo\nalejandra\ncsg-est-0052.csg\nwww-test.reporting.euclid\nsas-reg-0059.sasg\nmvm-ri-m116091.roslin\nhca-mac012.shca\ntele3\njarno\ncsg-fin-0173.csg\ncsg-est-0002.csg\nestebanoc\n5forrhill-c-printroom-mfp-col.sasg\nwarzone\nhsoft\nmicke\nspacegames\ncsg-fin-0123.csg\nwww.milan\nppls-shared.ppls\nwww.miweb\nwww.levelup\nlaser11.roslin\ncsg-as-0000757.csg\nmvm-ri-l005145.roslin\nris-vwinrep.roslin\ntaalman01.ppls\nknak\nshalomshalom\nppls-y2lab-109.ppls\nhandc-mac3.shca\nmvm-ri-i117139.roslin\ncsg-fin-0063.csg\ncsg-fin-0105.csg\nwww.neuro\ndsb-lptp-ng.ppls\nwww.nexus\nwww.underworld\ncsg-saf-0050.csg\nwww.motos\nsce-coll-0023.scieng\nwww-test.learn\nnextlevel\ngenka\nchildcare\nsrv051.csg\nwww.alerta\njamil\nris-pvnb01a.roslin\nhss-ppls-0033.ppls\nsas-reg-0065.sasg\nhca-mac017.shca\ncerc2.roslin\nmvm-ri-i093219.roslin\nhca-netprint-bw12.shca\njorgemiguel\nvcs-127104a.roslin\nmvm-ri-i137100.roslin\nwww.noobs\nwww.myjob\nsas-reg-0105.sasg\ncsg-fin-card6.csg\nril-035183.roslin\nsoiree\ncsg-pps-0037.csg\nlib-pc-1579.isg\nwww.pavel\nmeyer\nsas-reg-0188.sasg\nwww.amigas\nmvm-ri-d056248.roslin\nrip-brfm3.roslin\ncsg-hr-0077.csg\ntatan\nmvm-ri-sx06.roslin\ncsg-pps-0016.csg\nsas-reg-0071.sasg\nkincaids-cctv1.csg\nwww.worldwide\nrid-056254.roslin\ncsh-g-g20-mfp-bw.csg\nsci063.scieng\nsas-reg-0177.sasg\nmvm-ri-l115160.roslin\nwww.osaka\nviks\nhss-ppls-0014.ppls\ncsg-hr-0027.csg\nmvm-ri-l085091.roslin\nudm\nlib-mac-006.trg\nwww.planb\nwww.plane\nsas-reg-0076.sasg\nsaf066.csg\nhca-mac028.shca\nmvm-ri-d065136.roslin\npsy-eblic.ppls\nsas-reg-0082.sasg\noverload\nhss-iad-0009.iad\nsas-reg-0172.sasg\nmvm-ri-d126196.roslin\nwww.ozone\nhoots\nmauricio\nrim-086014.roslin\nmvm-ri-d096137.roslin\nwww.secure.vle\nhca-mac034.shca\ngamestore\nhss-ppls-0189.ppls\nwww.bertha\nwww.reich\nfecebook\nguerra\nwww.admin.alumni.dev\nsupercar\nmvm-ri-m125085.roslin\ncsg-as-0000257.csg\nris-sb01.roslin\nsas-reg-0166.sasg\nwww.scary\nwww.apocalypse\nsas-reg-0100.sasg\niclick\njosemaria\nwww.mycareer\nwww.seals\ncgltop.ppls\nideias\nhss-health-0115.health\nwww.shara\nwww.rouse\ndbritmac.ppls\nvcs-126190a.roslin\nirweb\nwww.shoes\ncsg-corp-0007.csg\nwww.socialnetwork\nwww.tarot\npp4sslaptop1.scifun\nsas-reg-0155.sasg\nwww.skype\nmvm-ri-d086067.roslin\nalaan\ncsg-saf-0028.csg\nwww.teach\nwww.snake\nwww.smoke\ngstar\nrip-b02c3.roslin\n5kc-g-siteoffice-mfp-bw.csg\nwww-test.tqintra.dev\nsas-reg-0149.sasg\nhca-mac039.shca\n13-2rc-g-siteoffice-mfp-bw.csg\nxjcmblta\nsci086.scieng\nppls-labds-001.ppls\nwww.stamp\nmvm-ri-l097180.roslin\nhss-health-l35.health\nris-vwlx01.roslin\nthrasher\nmvm-ri-d115193.roslin\ncsg-est-0331.csg\nwww.buyandsell\nsas-reg-0144.sasg\nsas-leaps-0006.sasg\nmvm-ri-d125024.roslin\nmetal25\nmetal14\nmvm-ri-d126135.roslin\nhss-ppls-0207.ppls\nwww.thewarriors\nmvm-ri-d096066.roslin\nsas-reg-0138.sasg\nsas-leaps-0001.sasg\nmetal10\nwww.minegocio\nedneuro-imac.ccns\nhealth-lap30.health\nwww-dust.star.euclid\nsce-coll-0058.scieng\nafterlife\nmvm-ri-d097094.roslin\ncsg-est-0221.csg\nsas-reg-0133.sasg\nmunoz\nhca-copier-xpr.shca\nwww.camila\nhimar\ncsg-est-0161.csg\nsas-reg-0127.sasg\nsas-reg-0093.sasg\nsellout\nwww.chatbook\ncsg-sec-0024.csg\nmvm-ri-d137245.roslin\nris-vwintslm.roslin\nwww.naa\nwww.carlos\nmvm-ri-d127007.roslin\nsas-reg-0122.sasg\nmvm-ri-d094189.roslin\nwww.blanco\nsgrant2013.ccbs\nprogramme\nsce-coll-0030.scieng\nhealth-omq-019.health\ncsg-est-0051.csg\nlamode\nwww.celulares\nmacc\nhca-mac045.shca\nsas-reg-0116.sasg\nrid-057020.roslin\ncsg-fin-0172.csg\nhappydog\nwww.forall\nsas-reg-0111.sasg\ncsg-fin-0122.csg\nutt.ppls\nwww.valentine\ncsg-as-0000756.csg\nhss-ppls-0192.ppls\nhca-mac047.shca\nwww.grafika\nelecom\nsas-reg-0095.sasg\nrockman\nvmet-test.ppls\ngonza\njadore\nrii-pda2.roslin\nmvm-ri-d086162.roslin\ncsg-fin-0092.csg\ncsg-fin-0062.csg\ncsg-as-0000706.csg\ngeneric\nhss-health-0127.health\nhcanda-laptop-dkaufman.shca\nmvm-ri-l065067.roslin\nlovetolove\nhca-mac042.shca\nsas-reg-0090.sasg\ncsg-saf-0048.csg\nmvm-ri-d096173.roslin\nnarcisse\nsas-reg-0078.sasg\nmvm-ri-l107179.roslin\nris-vwlx04.roslin\nhca-mac036.shca\nsas-reg-0084.sasg\nhca-mac031.shca\nwww.myed\ncsg-fin-card5.csg\nsas-princ-0005.sasg\nwww.gordon\nrofl\nextm\nsublimate\ngameshow\nmvm-ri-d085051.roslin\nwww.rosi\njazmin\nmobotix\nvscan2\nvscan1\nolife\nsiba\ncrashbandicoot\ngoldy\nvsproxy\nwww.mmt\nsas-reg-0098.sasg\nherry\nhacer\nmvm-ri-l136185.roslin\nris-ifs.roslin\nhelp3\nmoneytoday\nwww.boxnet\nalfadigital\nhealth-omq-007.health\ngalb\nslap\nffacebookk\ncsg-fin-0152.csg\nwww.hsl\nsas-reg-0114.sasg\nwww.ilk\nekstra\npunky\nwww.magma\nwww.bsl\nministranci\nacies\nadama\nwww.plb\nilk\ncsg-est-0031.csg\nppls-y2lab-206a.ppls\nmvm-ri-d067036.roslin\nplb\nwww.slk\nwww.abc1\nhagar\nkenichi\ncsg-as-0000846.csg\nkreativ\nmvm-ri-v125180.roslin\nwww.ministranci\nsnte\nbacho\nbaile\ncsg-fin-0212.csg\nakane\nwww.galb\nhss-ppls-0020.ppls\nbaner\nwww.ekstra\nhugocastro\nsas-reg-0119.sasg\nap108\nlibertine\nteen-sex\next01\nintima\ncsg-est-0081.csg\nrid-067080.roslin\nmvm-ri-l096127.roslin\nwww.dealers\nposts\ngw-adsl\njetset\nanais\npp4sspc3.scifun\nhss268.ppls\ndarkassassins\ncsg-sec-0004.csg\nmontclair\nbeloo\nflipflop\nberny\nsas-reg-0125.sasg\ncsg-est-0141.csg\ngetaway\nkirikou\ndwn\ndowhome1\nhss-ppls-0195.ppls\nwww.danger\nmastertrack\ndowiepplus\ndasdmail\nasada\nkorokoro\ncacsa\nbitfm\ncaleb\nvirtualx\nhss-hca-0080.shca\ncantu\ncarga\nppls-mac007.ppls\ngismo\ncbtis\nschoolbus\nstoneware\nauris\ndowesp01\ncedro\npersefone\nlmswx\nboden\nlyncext2\ndasd-ttc\nnatwest\ndasd2\ndasd3\nbolix\ndasd4\ngirly\nhafis\ndasd5\nchick\nchipi\nhadis\ncristiana\nsquad\ncinna\nhcanda-ckolotur.shc\nfujimura\ngille\nsce-coll-0046.scieng\ndanis\ngfd\ndanko\ndanty\nnakayoshi\ndatos\nriv-amxnetlinx.roslin\ndasd6\nwww.clicks\ndasd8\nsas-reg-0131.sasg\ncochi\ndasd9\ndmswx\nnateast\ncores\ndasdweb\ntamatama\nwww.hip-hop\ncsg-est-0201.csg\nfredy\ndasdvideo\nmvm-ri-d106054.roslin\ndimex\nhealth-mac003.health\ndasd-sharepoint\nfacedook\ndasdwise\nlesbianas\nrip-brfm10.roslin\nnatdasd\nsas-reg-0136.sasg\nwww.zeta\ntupperware\ndwodm\ndigitalplus\nfranc\nqpteach\ncsg-est-0251.csg\ndonar\nhss-health-0008.health\ndongo\nwww.pakistan\nhss-health-l23.health\nssca1\nrbigc01\nsas-leaps-0004.sasg\nmati\nsecuretibia\nforty\nimageup\nfanni\navacs\nbssd\nrickysfr\nearls.staging\nfstraining\nemaus\nmovpublic.stg\nsas-reg-0142.sasg\navengers\nmaracaibo\nwww.dejavu\nwinmac\nucmall\nexpro\nwww.cronica\ncolecciones\nchristin\nadventcom\njoeys\nucmallnew\nergon\nexpel\nugifit.temp\ngam3r\nkarlim\ngle\ncsg-est-0311.csg\nfpcss\n13infst-g-transport-mfp-col.csg\nwebdisk.green\nsas-leaps-0009.sasg\nesraa\nautodiscover.green\nevery\nautoconfig.green\ngeeko\ngeekz\ngeims\ngfd065254.roslin\ncsh-g-g14-sfp-bw.csg\nmvm-ri-m135072.roslin\nponce\nrim-106001.roslin\nwww.chess\nforja\nforti\nppls-labds-004.ppls\nnagaraju\nhca-mac040.shca\ngigas\nsas-bu-0019.sasg\nsas-reg-0153.sasg\nsas-reg-0158.sasg\nmvm-ri-d117057.roslin\nmvm-ri-c124035.roslin\ngimbo\nezweb\nwindows8test.ppls\nmvm-ri-l097132.roslin\nmvm-ri-d076056.roslin\nessam\nfuria\nsas-reg-0164.sasg\nheber\ncsg-cse-0014.csg\nkashif\nppls-labds-021.ppls\nvest\nrocking\nsas-reg-0169.sasg\nchaimaa\nitinfo\nsci051.scieng\nsas-reg-0175.sasg\ngalah\nhisto\nevaluate\nscifun1.scifun\ncsg-hr-0057.csg\nfinny\nsas-reg-0181.sasg\nlab-copier-xpr23.shca\nicool\ncox.ee\nisrail\nfidel\nkaotic\nhandc-m-titan.shca\nhoola\ndyana\nferro\nferdi\ngypsy\nfendy\nlaw1\nhealth-pc10.health\nwww.dario\nlitho\njabes\njacal\nemule\njafra\nsas-reg-0103.sasg\ncrazygamers\nhubbo\nemmet\ncsg-srs-0004.csg\nsas-reg-0186.sasg\nkamael\nwww-beta.estores.finance\ngoldmember\nebri063182.roslin\ncsg-pps-0017.csg\naaaaaaa.csg\nmvm-ri-d077238.roslin\nupr\nsas-reg-0192.sasg\nkenmon\nmvm-ri-l107193.roslin\njetta\nmrlab\nmoon-light\nhss-hca-0091.shca\nsec02.roslin\nhighnoon\nfares\nwww.teahouse\nwww.free-software\nmvm-ri-d076060.roslin\nhandc-mhist08.shca\nfanta\nkanon\nfaker\nwww2.hcrc\neitai\nitachi\ncsg-corp-0008.csg\nmediaweb\ncsg-saf-0030.csg\nitpro\nbattousai\ncsg-fin-0102.csg\niwant\nparishilton\nsas-alumni-0030.sasg\ncsg-fin-0218.csg\ndrako\nhealth-omq-033.health\ncsg-fin-0103.csg\ncyrex\nnatmark\nhandc-mhist25.shca\nwww.ital\nwww.tequiero\nlacom\nladob\ndolby\nlau01.roslin\nsas-reg-0108.sasg\ntaalman04.ppls\nblackhearts\nfacehack\nwww.viktoria\nhealth-print7.health\nkodai\ncsg-est-0032.csg\ncsg-fin-0213.csg\nsas-cas-0009.sasg\nmexicocity\nwww.lima\nhss-hca-0106.shca\ndu110\ncsg-est-0082.csg\nfisicamoderna\nkrieg\ncsh-1-corridor-mfp-col.csg\nedent\nfaceface\nppls-tms-01.ppls\nmauri\ncsg-sec-0005.csg\nmisi\necell\nlostsoul\nmendo\ndjsky\nmeson\ncsonline\ndjsam\nsecurehost\nmvm-ri-d107191.roslin\nlucio\nwww.i2i\ncsg-est-0142.csg\ndirty\nwww.edison\nppls-psy-test.ppls\nsasg-oldcoll-g-foy.sasg\nchidori\nneuma\nteu006.csg\nultimasnoticias\nmonto\nmvm-ri-l116223.roslin\nwww.supernatural\ndinno\nilovepets\nmsdos\ncsg-est-0192.csg\nhss-health-0034.health\nris-lxpoc01.roslin\nnevermind\nhca-tlab-002.shca\nhandc-pc40.shca\nadana\naydin\nhss-health-l48.health\nfriendsforlife\nconceptos\njhonny\nnoize\nukulele\nthecompany\nsasukeuchiha\nmuhaha\nconny\nfreedoom\ncas-mlb3-003.sasg\nzaqxswcde\nsci015.scieng\ncsg-est-0252.csg\ndesai\nj0k3r\nsas-bu-0004.sasg\nvbs-194176a.roslin\ncinemark\nollin\nsanji\nblue04\nbehemoth\ncnbbs\nmvm-ri-l124238.roslin\nhca-tlab-007.shca\nmateriales\nwww.eas\nelegantmodel\nddddd\nmicroweb\nagustin\nema6.ppls\ncsg-cse-0026.csg\nwww-test.jams.finance\nsas-bu-0010.sasg\nplata\nfastbook\nrim-096018.roslin\nhca-tlab-013.shca\nwww.justice\ndaved\nbloopers\nris-vlxweb06.roslin\njunkie\npolka\niad-1-bw.iad\ndarth\nimpacto\ncas-mlb3-014.sasg\nproma\nclaim\nfriendsforever\nrally\ndarky\nsas-bu-0015.sasg\nseeds\nlifelonglearning\nhca-tlab-018.shca\nbsoft\nril-115153.roslin\ndanil\ndamon\nmotocross\nwww.epicfail\nnatacion\nyeya\nsas-bu-0021.sasg\nsagem\ndamas\nsalvo\nwww.makemoneyonline\njmccpres.csg\nhca-tlab-024.shca\ndalal\ndala3\nmvm-ri-l077088.roslin\nmuerto\nlemans\nseals\nmvm-ri-d126219.roslin\nsas-bu-0026.sasg\nhss-health-0095.health\nwww-test.esp.myed\nazura\nsas-bu-0032.sasg\nmusicone\nwww.fabian\nwww.wpmservice.finance\nebri073216.roslin\nrouge\nayush\nwww.bettyboop\ntaboo\ncsg-cse-0015.csg\nmvm-ri-d107207.roslin\ncolpitts\nchits\nrid-057010.roslin\nrouse\nris-vlxbio02.roslin\nwww.facelook\nmvm-ri-d115109.roslin\nwww-test.rssjobs.careers\nsas-reg-0120.sasg\nwww.avengers\nsas-bu-0043.sasg\nlae\nhss-iad-0041.iad\nblog002\nlittleboy\ncsg-hr-0058.csg\nmvm-ri-d067026.roslin\ncsg-as-0000398.csg\nmvm-ri-l107228.roslin\nchama\nwww.cstrike\nazadi\nsuini\nmvm-ri-l096117.roslin\nmash.cache\nveracruz\nbonga\ntodos\nbolek\ntop40\nwww.demon\ncsg-pps-0018.csg\nceleb\navoid\nslevin\nriwebserv2k3.roslin\nsce-coll-0036.scieng\naus22\nebri053218.roslin\nd112211.sasg\npsy-pc031.ppls\nmayer\nreclutamiento\nmvm-ri-l116230.roslin\naubbs\nassam\ntaalman01-host.ppls\nppls-laptop2.ppls\ncsg-corp-0010.csg\nwally\nmvm-ri-d125179.roslin\nebri043220.roslin\nhss-ppls-0053.ppls\nmaddog\nwebsd\ncallo\nfotoclub\nwww-test.services.adminrae.planning\nwww.recetasdecocina\ndocumentacion\nmagana\nradiomax\ncamap\nbox2.ee\ncsg-fin-0094.csg\nhca-escreen-01.shca\nwww.crystal\ncsg-sec-0021.csg\nmvm-ri-d125241.roslin\nbinay\nwww.heritage\nmvm-ri-i135238.roslin\nchristo\nabraxas\ncsg-est-0033.csg\nbillm\nmalawi\nppls-y2lab-130.ppls\nwww.jasmin\nwilfredo\nasako\nwww.enlace\nh2so4\ncsg-as-0000848.csg\ncontacto\nwespace\ncsg-as-print235.csg\nabcdefghij\ncsg-fin-0214.csg\ncsg-est-0083.csg\nppls-igel-3-02.ppls\nwww.bis\narabi\nsinewave\niad-mac002.iad\nmarcello\napp17\nvbs-195120a.roslin\nqwertyu\ngamersworld\nmatteo\nppls-y2lab-005.ppls\nantik\ncsg-sec-0006.csg\ncsg-est-0143.csg\nahmedabdo\nhss-health-l74.health\nebri003153.roslin\nmed-000658a.roslin\nppls-y2lab-011.ppls\nlaser26.roslin\nteu007.csg\nmvm-ri-l096174.roslin\ncsg-est-0203.csg\ncsg-est-0191.csg\nint-usbmac12.sasg\nppls-y2lab-016.ppls\ncsg-est-0253.csg\nmvm-ri-l106249.roslin\nmvm-ri-m124191.roslin\ncsg-est-0313.csg\nsas-cas-0032.sasg\nhca-mfd-004.shca\ncsg-est-0217.csg\naltec\nrii-115145.roslin\nwww.dlhe.careers\nppls-igel-01.ppls\nhss-health-0131.health\ncsg-as-0000129.csg\nalpen\nebri053173.roslin\npsy-macbook.ppls\nwww.gp\nameen\nmvm-ri-m096008.roslin\nmvm-ri-d077051.roslin\nwww.gz\nwww.jh\nold-www.ppmd.euclid\nsas-cam-0005.sasg\nalist\ncsg-cse-0016.csg\nhealth-omq-023.health\nwww.jw\nsas-cam-0011.sasg\nppls-cns-01.ppls\nwebcity\nalang\nebri043174.roslin\nppls-kiosk02.ppls\nris-lxnbmedia01.roslin\nbarit\ncsg-hr-0010.csg\nsas-cam-0016.sasg\nakess\npsy-f23print.ppls\nhss-iad-0042.iad\nbalam\nrip-d02c4.roslin\nrip-a02m4.roslin\nairam\naims1\nvis004.sasg\ncsg-cse-0050.csg\ncsg-hr-0059.csg\nmvm-ri-d106247.roslin\nmvm-ccbs-060441.ccbs\nssllogin\nmvm-ri-l096143.roslin\ncolour22.roslin\nsas-cam-0022.sasg\nmvm-ri-d125205.roslin\nris-vlx03.roslin\nvis010.sasg\npetrolheads\nwww.etime.finance\nsas-cam-0027.sasg\nsce-coll-0062.scieng\nwww.vs\nvbs-19595a.roslin\nvis015.sasg\nwww.zz\ncsg-pps-0019.csg\nmicha-lap-01.ppls\nhss-hca-0118.shca\nmvm-ri-d096070.roslin\nwww-dev.salfor.finance\nmvm-ri-m115196.roslin\nwww.freedownloads\nmvm-ri-d125027.roslin\npsgames\nxtina\ngiggles\nrid-026105.roslin\nabrar\nhss-health-0024.health\nsas-chap-0004.sasg\nwebdesigns\nextremex\naxlrose\nhss-health-l38.health\npcscifun10.scifun\nwww.lafamilia\npsicodelico\nwww.cbr\nabced\nhss-ppls-0070.ppls\nucu1.ucu\nenlinea\nfingerprint\nwww.stalker\ndsb-pgman-01.ppls\nris-vlxftp02.roslin\nmeimei\ncsg-corp-0011.csg\nmvm-ccns-srv1b.ccns\nsecure0\nbrescia\njbg\nswastik\ncsg-est-0327.csg\nwww.openbook\nwww.blackfriday\nsector7\nppls-y2lab-104.ppls\nmvm-ri-d057005.roslin\nhardrock\nad123\nwww.timeweb\nonlinetv\nmall7\nswapnil\nwww.ctb\nebri083205.roslin\nhellrider\nsas-cas-0006.sasg\nneoworld\nwww.eclipse\nmvm-ri-d087014.roslin\npixelhotel\nhurray\ncsg-fin-0095.csg\nzr\nppls-y2lab-110.ppls\nris-condor01.roslin\nmvm-ri-d077064.roslin\nmvm-ri-d096141.roslin\nsas-cas-0012.sasg\ncsg-fin-0155.csg\nppls-y2lab-115.ppls\nscifunlaptop3.scifun\nmvm-ri-d125088.roslin\nintermax\ng2cpx2.ccbs\nrii-115143.roslin\nmvm-ri-l115163.roslin\nwww.lapagina\ncrazyboy\nsushant\nwww.musicacristiana\nswagger\ncsg-as-0000850.csg\nsas-cas-0017.sasg\nwanna\nanimania\ncsg-fin-0215.csg\nwww.facebook-com\nppls-y2lab-121.ppls\nmikasa\nsas-leaps-0010.sasg\nbooklist\nsci066.scieng\nblackmetal\nmehrdad\n34bp-4-4z3-mfp-bw.sasg\ncardona\npennyauctions\ndsb-2-19-mfp-col.ppls\nwww.wc\nsas-reg-0147.sasg\nradiochat\nsas-cas-0023.sasg\nppls-y2lab-126.ppls\nnakata\nwww.edesign\nacapulco\nbanjarmasin\ngarantias\nhtmail\nrip-brfm6.roslin\nwww.economy\nvitor\nmachoman\ncsg-sec-0007.csg\nwww-test.calum-maclean.celtscot\nfacebooklet\nppls-y2lab-132.ppls\nvalor\nsrikant\nmudanzas\nfacebookapi\nlomas\nvirtualassistant\ncsg-est-0194.csg\nhss-health-l70.health\nsicario\ncsg-fin-0193.csg\narc-printer.ppls\nfacebookconfirmation\nsas-cas-0034.sasg\nexelent\nteddyweb\nwww-test.intra.finance\ncsg-est-0254.csg\noperaciones\nppls-lap-011.ppls\nwww.api.payments\nvox.ppls\nwww.whynot\nsas-cas-0039.sasg\nfacebook123\ntechworld\njaleel\nris-ifs4.roslin\nmywap\nhobbahotel\nwww.freepc\nebrptweb.roslin\nnegros\nmusicmax\nmvm-ri-d086201.roslin\nwww-test.wpmservice.finance\nwapftp\nmvm-ccns-0089.ccns\nucd\naap003.sasg\nfucoidan\nwww.habbux\njaffar\nebri033140.roslin\nsce-coll-0026.scieng\nmvm-ri-d127214.roslin\npuritan\nradiocool\ngfl045238.roslin\njaeger\nhappysun\ncsg-as-0000111.csg\nnetbox\nmysite123\nsas-cas-0056.sasg\nhca-lab3-mac19.shca\nhss-health-l03.health\nsas-cas-0062.sasg\nilovemusic\ncsg-cse-0017.csg\nwww.dmg\nsohil\nsas-cas-0067.sasg\nx919\nkaafox\nm.porno\nhca-lab3-mac31.shca\nmvm-ri-l115179.roslin\ncampeones\nhealth-omq-036.health\nbareback\nsas-cas-0073.sasg\ninnovations\net-temp.ppls\ntequiero\nwww.socrates\nadlabtemp.ppls\nhss-iad-0043.iad\nsunflare\nmasbelleza\njeanpier\nsas-cas-0078.sasg\nwww.metalmilitia\nlect-health-005.health\ncursosgratis\nmvm-ri-d107216.roslin\ncandy123\nmrmoon\nhss-hca-0005.shca\njuanproductions\nhandbag\nsas-cas-0084.sasg\nwww.dhl\nmvm-ri-d126164.roslin\nwww.boletines\nhca-netprint-bw4.shca\nris-esxi06.roslin\nblackmagic\nwww.webcontrol\nmvm-ri-l116238.roslin\nris-lx14.roslin\nwww.goblin\nwww.helios\nhss-hca-0011.shca\nm.sport\nwww.dim\ncsg-pps-0021.csg\npcserver1\nfarzad\nyoutubes\nwww.herbal\nppls-y2lab-203.ppls\njornadas\nclancsw\nthewalkingdead\nhca-netprint-bw9.shca\nmvm-ri-d125026.roslin\nwww.detodoparatodos\nhss-hca-0016.shca\nvikas\nppls-y2lab-208.ppls\ndjlatino\nmagama\nhss-hca-0022.shca\nsas-cas-0059.sasg\nwww.clubdescargas\naaaaaaaaaaa\naap055.sasg\nsas-alumni-0035.sasg\nanonymoushacker\nhss-hca-0027.shca\nmurder\ncsg-corp-0012.csg\ncsg-saf-0033.csg\nsospc\nsaras\nhss-hca-0033.shca\nespada\nwww.grafik\nkittykat\nwww.granma\npaei\ncsg-fin-0046.csg\ndodatki\nwww.mame\npangolin\nbarrio\nmvm-ri-d076097.roslin\nbacardi\nmusicacristiana\naap066.sasg\nwww.mundomagico\nmed-001024.sasg\nwww.hikaru\ncsg-as-0000741.csg\nhss-hca-0038.shca\npkforfun\ncsg-fin-0106.csg\nmakina\nemailupdate\nwww.ground\nzidane\nyunior\ntechzone\nwillian\nris-vlxdb01.roslin\nmercadeo\nhss-health-0121.health\nwww.detodounpoco\nppls-sem-0002.ppls\ncabernet\nxlab-0\nmvm-ri-d134251.roslin\nstudyin\nmixes\ncelulares\nakropolis\nhokey\nhss-hca-0044.shca\nwww.pruebasweb\nsas-intl-temp1.sasg\nstudio6\npaty\ncartel\ntechspot\nwww.multiverse\nhss-ppls-0102.ppls\nwww.atlantida\ncsg-est-0035.csg\natrium-onelan.scieng\nhabbomoney\ncsg-as-0000851.csg\nmapics\nkod\nhackforums\ndigitalsolutions\nmabel.ppls\nsandeman\ncsg-fin-0216.csg\npagina\nmvm-ri-d086167.roslin\ntantan\nwww.hellokitty\nmarilynmonroe\ntolstovki\nclinica\nmvm-ri-d116236.roslin\nccbs-mvm-060142.ccbs\nwww.ted\nhss-hca-0055.shca\nvideomax\nsolucion\nsalida\nrii-105169.roslin\nwww.sharon\nfaninc\njuanita\nmrose\nnai\ncsg-as-0000237.csg\nwww.alan\nnayma\nwww.dofus\nwww.simo\nwww.alto\nlatinos\nwww.amos\ncsg-sec-0008.csg\ncsg-est-0145.csg\nmathiasl\ngunner\nhss-hca-0061.shca\nteu010.csg\nwww.army\nwww.surgery\naquarios\nwww.dsm\ndadadada\nsbvmref.ppls\ncsg-est-0195.csg\nhabboradio\nhca-jpglab-020.shca\nwww.cied\nmvm-ri-d096237.roslin\ncataclysm\nmvm-ri-l126192.roslin\njulia123\nsas-princ-0001.sasg\nstarsale\nhindustan\nhss-ppls-0012.ppls\nmvm-ccbs-060193.ccbs\nppls-card-01.ppls\niijima\nhss-hca-0072.shca\nsas-princ-0006.sasg\nsci163.scieng\nhss-ppls-0017.ppls\nppls-psy-unitots.ppls\npinguino\nwww.shadows\nhss-hca-0077.shca\nmvm-ri-d127239.roslin\nhca-lab3-mac28.shca\nsas-reg-0170.sasg\nomusic\nhealth-mac008.health\nhss-ppls-0107.ppls\ncsg-est-0039.csg\nhss-ppls-0023.ppls\nhss-health-0014.health\nykh\nwrath.ph\nhss-health-l28.health\nppls-psy-003.ppls\nmvm-ri-v116130.roslin\nmvm-sbms-120224.ccns\nmvm-ri-d067113.roslin\nkhoctham\ncsg-est-0109.csg\nparadoks\nwgw\njaejoong\nwww.lk\ncsg-fin-0204.csg\nhss-ppls-0034.ppls\nwww.rh\nmvm-ri-d086061.roslin\nhss-hca-0094.shca\nrim-096006.roslin\nvahid\nfalkon\nsas-intl-0018.sasg\nwww.wy\nprevention\nnesto\nachin\nuserservices\nsas-sra-0029.sasg\nquadra\npineview\ncsg-cse-0018.csg\nfirephoenix\nrbm\nhss-ppls-0039.ppls\namorg\nwww.gore\nmustafa1\nstratos\ncooldownloads\nhss-hca-0099.shca\nnewproject\nbombsquad\njackman\nwww.idee\nebri083185.roslin\nstarboys\nhss-ppls-0045.ppls\nwww.indy\nmvm-ccbs-060236.ccbs\nhumphrey\nappsfacebook\nstarback\npaginaprueba\nwww.jazmin\nsmw\nmvm-ri-d007155.roslin\nwww.iris\nfloresta\nxyz111\nwww.children\nwww.itec\nwww.isra\ncsg-hr-0012.csg\nwww.roman\nhss-hca-0115.shca\nwww.visualbasic\nmvm-ri-l137027.roslin\ngoodmusic\naffect\nwww.micasa\nmvm-ri-l134241.roslin\nhss-iad-0044.iad\nmvm-ri-d106131.roslin\nloa\npur\nhss-ppls-0051.ppls\nwww.renata\nthekillers\ncsg-hr-0062.csg\nhss-hca-0121.shca\nfutureworld\nperiodico\ngameshell\nbrethren\nmotociclismo\nreg-oldcoll-g-rfoyer-dhl-1.csg\ncsg-est-0089.csg\nhss-ppls-0056.ppls\ndeathrun\nwww.maze\nconcepcion\nhss-health-l20.health\nwww.prevencion\nsci056.scieng\nhss-hca-0126.shca\nwww.bicentenario\nnvc\nmvm-sbms-0054.ccns\nhss-iad-0040.iad\nhotnews\ncromarty\nebrptsql.roslin\nhighlights\nwww.nina\nfreeyourmind\nmarumon\nhayashida\ncsg-pps-0022.csg\nwww.esc\nwww.muse\nppls-printer17.ppls\nautohits\nwww.xd\nedogawa\nmailbe10.staffmail\nwww.omar\nloh\ncsg-hr-0041.csg\nmvm-ri-l115194.roslin\nppls-printer23.ppls\nalwayson\nwww.mercury\nlect-hca-010.shca\nppls-ccace-01.ppls\ntestgame\nkgk\ntattoos\nwww.yorkshire\nmvm-ri-l127158.roslin\nhss-ppls-0073.ppls\ndecibel\niadl3.iad\ncommander\nwww.shock\nppls-mac016.ppls\ntemptop\nsemillas\nwww.nasa\nnarutouzumaki\nwww.riot\nsmartcoder\nwww.sal\nhss-ppls-0078.ppls\nlataberna\nsas-sra-0005.sasg\ncsg-corp-0013.csg\nmvm-ri-d106202.roslin\nl2top\nmvm-ri-l106087.roslin\nwww.sims\ndsb-mon1.ppls\nsas-dis-0022.sasg\nifd\nwww.sony\nnbf\nwww.fairyland\nmvm-ri-d106228.roslin\nsanal\nwww.suri\nris-vlx05.roslin\nwww.leisure\nwww.darkorbit\nwww-test.star.euclid\nbackwoods\neverywhere\nfsn\nltn\nnax\nmileva\neasyrider\nveronika\nfussion\nrii-085135.roslin\nwww.casas\nhss-ppls-0084.ppls\nltv\nzentai\nhaddohotel\ncsg-fin-0047.csg\nsas-sra-0011.sasg\nsas-scs-0010.sasg\nsas-intl-0005.sasg\nsce-coll-0016.scieng\nwww.cbtis\nmvm-ri-d096149.roslin\nwww.pegasus\nstewbot.lts\nhss-ppls-0090.ppls\nzelene\nccw\ncsg-fin-0107.csg\nimnotafraid\nsas-sra-0016.sasg\ncobain\nprovac\nsas-scs-0015.sasg\noblivionguild\neasyliving\ngurdeep\nwww.cynthia\nest057.csg\nsas-intl-0011.sasg\nbg4\nhenrique\ntouchme\nbg3\nbg1\nscotsman-kbserv1\nnewhack\nscotsman-kbserv3\nppls-g26-011.ppls\nppls-y2lab-010.ppls\nhessel\nmamita\npenguinshow\npublik\nsnake1\nhss-ppls-0105.ppls\nsas-sra-0022.sasg\nlove8\nsector\nmvm-ri-i136081.roslin\ncsg-est-0119.csg\ncsg-est-0036.csg\npag\nocha\nsas-intl-0016.sasg\ndelfind\nhealth-omq-038.health\neuc024.sasg\ntramites\naspirantes\nppls-g26-016.ppls\nciclismo\nstatement\nwww.nowayout\nhss-ppls-0111.ppls\nmendez\nrsg\ncityville\ncsg-fin-0217.csg\nsweet-dreams\nx-zone\ndelawder\npoli\nwww.environmental\nsas-sra-0027.sasg\ncsg-est-0086.csg\nsas-intl-0029.sasg\neletronica\nsas-intl-0022.sasg\nkuldeep\nppls-g26-022.ppls\nobb\nhss-ppls-0116.ppls\ninformatic\nfairview\nmvm-ri-d086025.roslin\ncybernet\nsas-sra-0033.sasg\nmvm-ri-d116084.roslin\ncsg-sec-0010.csg\ncsg-est-0146.csg\nshelley\nsas-intl-0027.sasg\neurostar\nwww.delux\nms-dw6-1-genoffice-mfp-bw.health\nhss-ppls-0122.ppls\nwww.bluemoon\nroadkill\naudiobook\ntsukahara\nteu011.csg\nwww.f5\ntsadmin\nsas-sra-0038.sasg\ncsg-est-0196.csg\ngreenvillage\nmvm-ri-i115150.roslin\nhss-ppls-0127.ppls\nppls-ma-old.ppls\nspeedupmypc\nblueray\nhealth-lap48.health\nris-esx04-nic2.roslin\nmvm-ri-d107206.roslin\nrgomez\ncsg-est-0199.csg\nzcom\nhss-ppls-0133.ppls\ngehealthcare2.ccbs\nwww-dev.etime.finance\nril-v097033.roslin\ncsg-est-0316.csg\nmuhamad\nwww.je\nblubber\nonlygames\nris-lx04.roslin\nmvm-ri-m125233.roslin\nsas-cas-0040.sasg\nhss-ppls-0138.ppls\nwww.services.adminrae.planning\ng2ctm2.ccbs\nheartless\nsas-intl-0050.sasg\nint-usbmac5.sasg\nkubin\nhss-ppls-0144.ppls\noc-1-r210-mfp-bw.sasg\notherside\nwww.uc\nsas-intl-0055.sasg\nmvm-ri-vbarry.roslin\nmvm-ri-sx02.roslin\nwww.julian\nppls-mac001.ppls\nbouanane\nwfm\nminera\nclubdescargas\nmvm-ri-l136120.roslin\nhss-ppls-0150.ppls\nsabino\nmouse-db.bioservices.aaps\ninfernal\nsrv112.csg\npcsoftware\nsas-intl-0061.sasg\nrid-vrepos.roslin\nppls-mac006.ppls\nhss-ppls-0155.ppls\nmvm-ri-d087030.roslin\nsamael\nthanatos.activedir\ninfo9\ncsg-cse-0020.csg\nppls-mac012.ppls\nwww.softzone\nppls-7gs-058.ppls\nwww.facebook2\nwww.facebookk\noffprinter2.scifun\nhss-ppls-0130.ppls\ndesiree\nscaner\npcserver1-2\nwww.onlineshop\nbreakout\nppls-mac017.ppls\nsichem\ntest2010\nmaike\nharden\nhappy1\nhss-health-0111.health\nsarvesh\nhss-iad-0045.iad\nbradford.lts\nwww.faceebook\nwww.mara\nppls-mac023.ppls\nwww.maggie\nmahen\ncsg-hr-0063.csg\nhss-ppls-0172.ppls\ngfd095246.roslin\nhamzah\nhss-ppls-adl02.ppls\nthunders\nhamza1\nlorenz\nebri003177.roslin\nmvm-ri-d116226.roslin\nlilis\nhss-ppls-0177.ppls\nvmed\nwww.salsa\nhanabi\npab\nmvm-ri-d127201.roslin\ndimensionx\nlunatik\nsas-dis-0003.sasg\nconfort\nhealth-omq-003.health\nppls-mac034.ppls\nwww.madrid\ntyre\ncsg-pps-0023.csg\nhss-ppls-0183.ppls\nsas-dis-0008.sasg\nlacasa\nebr-i500.roslin\nservit\ntwar\ntuku\nmultiverse\ngiorgi\nhss-ppls-0188.ppls\nmvm-ccbs-060380.ccbs\nsas-dis-0014.sasg\nwww.cadillac\nmvm-ri-d106227.roslin\nhss-ppls-0194.ppls\ncsg-fin-card3.csg\nwww.little\nsexual\nppls-pc179.ppls\nsas-dis-0020.sasg\nsyma\ndata-nas3.ppls\nzaadu\nhack3d\nmailfe11.staffmail\nwww.marcos\nhss-ppls-adl24.ppls\nswag\nwww.marina\nhss-hca-0019.shca\nwww.comunicate\nmvm-ri-d127142.roslin\nwww.matrix\nwww.theghost\nwww.dico\ncsg-corp-0014.csg\nfaecbook\ncsg-saf-0035.csg\npasarela\nwww.darkempire\nsce-coll-0042.scieng\nhss-ppls-0210.ppls\nmvm-ccbs-060401.ccbs\nsas-dis-0025.sasg\nscieng0.scieng\nmvm-ri-l067166.roslin\nhss-ppls-0215.ppls\nsas-dis-0031.sasg\nmastergamers\nhss-health-0004.health\nmvm-ri-d115176.roslin\ncsg-fin-0108.csg\nwww.tcr\nmeb\nwww.matematik\nwww.sociales\nhss-health-l18.health\n22-2sciennes-g-siteoffice-mfp-bw.csg\nktnlaser01.roslin\nsoniya\ncordova\ncsg-est-0037.csg\nsone\nmvm-ccbs-060417.ccbs\nfreeup\nwww.abs\nwww.ade\nhoneybone-ltop.ppls\nwww.afs\nsispro\nwww.aki\nstadtplan\nmediaone\nppls-skype.ppls\nwww.ani\ngartner\nmvms\nlmao\nhca-spglab-021.shca\nwww.ark\ncsg-as-0000853.csg\nppls-laby2-002.ppls\nnewhaven-touch.scieng\nsjqy\ntamo\nwww.ccp\ncsg-est-0087.csg\nmvm-ri-d107199.roslin\nwww.cdp\ncoolpage\nsfss\nwww.cle\nhca-spglab-026.shca\ncsg-sec-0011.csg\nstelios\nwww.crc\ncsg-est-0147.csg\nmvm-ccbs-060428.ccbs\nebr-bcd2.roslin\nwww.cst\nwww.cvc\nhca-jpglab-004.shca\nmvm-ri-l127186.roslin\nris-vlxweb02.roslin\nsas-alumni-0039.sasg\nhca-spglab-037.shca\nwww.gci\nhca-rc-002.shca\nwww.gif\nwww.fsm\nmvm-ri-d125068.roslin\nhca-jpglab-009.shca\nmvm-ccbs-060440.ccbs\nwww.gpa\nhca-spglab-043.shca\nhca-rc-007.shca\nebri003158.roslin\nsctc\nris-vlxnbmaster.roslin\nppls-igel-b-21b.ppls\ncsg-est-0317.csg\nwww.jjm\nmvm-ri-d127123.roslin\nwww.memory\nhca-spglab-048.shca\nhca-rc-013.shca\nwww.las\nmvm-ri-d086122.roslin\nwww.micronet\ncsg-saf-0029.csg\nhca-jpglab-021.shca\nhomebanking\nmvm-ccbs-060451.ccbs\nwww.mcr\nmvm-ccns-0021.ccns\nmvm-ri-d105248.roslin\nmvm-ri-l095144.roslin\nhca-jpglab-026.shca\nmvm-ccns-0026.ccns\ntoscana\nppls-printer8.ppls\nwww.mna\ngooggle\nscat\nmvm-ri-v125139.roslin\nwww.mrp\nhca-jpglab-032.shca\nwww.mrx\nwww.a-team\nrite\nwww.pal\nmvm-ri-l137078.roslin\nmvm-ri-l107188.roslin\nterserah\nmvm-ri-d136072.roslin\nslayer\nhca-jpglab-037.shca\nwww.pit\nwww.pkm\nwww-dev.wisard.registry\nwww.rad\nwww-trn.star.euclid\nestadoavatar\nhss-health-0136.health\nphotogroup\nwww.rma\nwww.sdx\nwww.rok\nwww.sfs\ncsg-cse-0021.csg\nwww.sgp\nphhh-mfp-reader.csg\nsce-coll-0006.scieng\nwww.shp\nwww.smt\nwww.sok\nwww.sos\nweir-g-14-mfp-bw.scieng\nnounours\ng2cdbdev1.ccbs\nwww-test.eauthorisations.finance\nwww.mga\nwww.tsh\nbackup-atm\numesh\ncsg-hr-0014.csg\nwww.marvin\nwolfteam\nwww.nora\ncsg-eusu-0006.csg\nhss-iad-0046.iad\nwww.precios\nwww.slipknot\ndarkanime\nmvm-ri-d116252.roslin\nhealth-omq-039.health\nmundoanime\nwww.paranoia\nrj45\ncsg-hr-0064.csg\nwebfrontend-lb.staffmail\nzones\ncmacbookdsb.ppls\nhabboz\nhabbux\nweir-g-11-mfp-bw.scieng\nradiator\nrads\nhealth-omq-028.health\nwww.feri\nmvm-ccns-0054.ccns\nwww.judgement\nwww.victorhugo\neplab2.ppls\nmvm-ri-m086015.roslin\nwww.fakebook\nccbs-mvm-060455.ccbs\ncsg-fin-0059.csg\nmvm-ri-l137150.roslin\nxfactor\ncsg-pps-0024.csg\nibrahem\nmvm-ri-l096148.roslin\nmvm-ccns-0065.ccns\nwww.today\nepis1.scieng\nmateus\nmvm-ri-i115139.roslin\nwww.newstyle\nsolano\ncsg-est-0149.csg\nwww.kosmetyki\nsas-ssp-0015.sasg\nadult-dating\nsce-coll-0067.scieng\nvirtualtuning\nescalante\ncam-mac005.sasg\nwww.chihuahua\nthedie\nooo0\nhss-ppls-0067.ppls\nasdfasdf\nnce\npsy-tmp-phd-01.ppls\nsas-alumni-0002.sasg\nbioinformatica\neso-laptop1.csg\nblackdead\nwww.familia\nwww.pcdoctor\nwww.santander\nblackfire\npjuegos\nwww.playstation\nkhamim\njhyun\nmvm-ri-l127151.roslin\nolaf\nwww.infinity\nmvm-ri-d096075.roslin\ncam-mac011.sasg\ntdt\nmailfe12.staffmail\nmechatronics\nbax\ncsg-corp-0015.csg\nstavros\nchanty\ncsg-saf-0036.csg\nwww.modelo\nwww.exseed\nhss-health-0029.health\nbaracuda\nmasster\nsigmar\nsas-alumni-0007.sasg\nwww.pars\ncsg-fin-0093.csg\nmuch\nmytestsite\nliss\nmvm-ccns-0082.ccns\nwww.jalisco\ncyberdevil\nwww.tango\nsyncmaster\nmetalmilitia\nhss-health-l44.health\nppls-stlaptop.ppls\ncdd\nguevara\nwww.mgr\nantique\nnimi\ncsg-fin-0049.csg\ngeo-cc-004.scieng\nsombras\nsas-alumni-0013.sasg\nmvm-ccns-0087.ccns\ncsg-fin-0099.csg\ncrayola\nluba\nsas-reg-0044.sasg\nwww.guatemala\nlect-cassem-001.sasg\nsas-alumni-0018.sasg\ncsg-fin-0120.csg\nmvm-ccns-0103.ccns\nflicker\nhakan\nwww.sou\nmane\nwrw-01m-30-mfp-bw.shca\ncsh-g-g20-mfp-col.csg\nflashpoint\n10dc-g-siteoffice-mfp-bw.csg\nicerose\nmegapromo\nsherman\nml-3-3-31-sfp-bw.sasg\nlosperros\nladii\nddg\nhss-health-0020.health\nm.english\ncsg-est-0038.csg\nmillions\ncreaweb\nnase\nwww.paramore\nmediosdecomunicacion\nwww.admin.careers\nmusicblog\nmargherita\nwww.nikita\nsportscience\ngnss\nmsanchez\nacs1\nnabd\nsas-alumni-0024.sasg\nmvm-ccns-0098.ccns\ncpo\njesuschrist\nbaru\nnetbanking\nairs\nrituraj\ncsg-as-0000854.csg\niptv1\nebd\nmyusi\ncsgo\nwww.infotech\ncsg-fin-0220.csg\nmsasa\nwww.enfermeria\nmvm-ri-i134158.roslin\nral\nmaza\ncanoa\npinv\nsinfronteras\nrevo\need\ncsg-est-0088.csg\nbaloon\nmailbe8.staffmail\nedy\nshangrila\nmvm-ri-d137147.roslin\nefm\nclayton\nwww.batman\nsas-alumni-0029.sasg\nbasant\nscieng-ps1.scieng\npcassist\nnicolass\ncsh-b-b1.6-mfp-bw.csg\nleod\nwww.banquetes\nmvm-ri-l107153.roslin\nmvm-ri-d136036.roslin\ncsg-sec-0012.csg\nhickory\ncsg-est-0148.csg\nscifunlaptop8.scifun\natticus\nmare\nmvm-ri-d125094.roslin\ndeadlock\nhss-health-0091.health\nsaf030.csg\nalfadesign\nxingyu\nsas-alumni-0019.sasg\nlightyear\nkewl\ncsg-est-0198.csg\nourfriends\njoes\njodi\nixan\nwww.players\nspinoza\nsci072.scieng\nsas-alumni-0041.sasg\nutility1\nsorteos\nwww.anorexia\nantioquia\nkitesurf\nvasilis\nmvm-ccns-0094.ccns\nvarios\nggc\nipsectest\nechizen\nminihacker\ntsm2\nmccc\nmark121\nkathleen\nebri073212.roslin\nebrboxisrv1.roslin\nfsk\njims\nsebas\nxibalba\ncsg-est-0258.csg\nbestsoft\ngfl065242.roslin\nsas-alumni-0046.sasg\ngmk\nwww.mylove\npizzaking\nnetmgr\nwright\nppls-psylib-03.ppls\ntutube\ntutweb\nwww.francais\nwww.mystic\ncsg-cse-0039.csg\nwww.lala\nris-plx02.roslin\nthecrow\ngriffin\ncsg-est-0318.csg\ndinasty\nnegociodigital\nsas-reg-0050.sasg\nendgame\nivas\nsas-alumni-0052.sasg\nwww.dominios\njanu\nzcm\nvictorbravo\nsas-cam-0010.sasg\nkorisnik\nihab\ngopher\nclanforum\ntryit\nanticrisis\npruebaweb\nglobes\nwrk043.csg\nbestgame\nstudioadmin\nodontologia\nwww.parati\nalumno\ncsg-nad-002.csg\noc-2-copyroom-mfp-bw.sasg\nspaceweb\nwww120\nfunn\nwspa\nwww121\nurbana\nhasa\nelitehacker\nviews\njjm\nhillary\nkerk\nsas-alumni-0057.sasg\njkl\nbias\nwww.reporting.euclid\ndoreen\ntorabora\ncows\ncsg-bems-0002.csg\ngewinnspiele\nrelocation\nmvm-ri-d096217.roslin\nwww.docs.sasg\nsce-coll-0032.scieng\nrii-115124.roslin\ncsg-est-0065.csg\nkarna\nnazareth\nsbattemp.ppls\ncsg-cse-0022.csg\nvisita\nwww.santalucia\nshca-laptop-dei.shca\nmvm-ri-d126108.roslin\nmvm-ri-d086218.roslin\nrng\nlightyagami\nwww.lfs\nphi-pythag.ppls\nsolex\nalexgames\nunkoman\nhss-health-l08.health\nnosomosnada\ncsg-hr-0015.csg\nhss-iad-0047.iad\nanimex\nsas-mac002.sasg\nsk8\nwww.miri\nsoltec\nfastmoney\ncsg-hr-0065.csg\nrameshkumar\nppls-mac020.ppls\nverkaufen\nwww.navi\nrim-107087.roslin\ncsg-sec-0030.csg\nwww.alumnos\nbestflowers\ndsb-et1a.ppls\ndon1\nindexhtml\nwww.raja\nmvm-ri-d116110.roslin\nwww.serial\nhuma\nmvm-ri-l076115.roslin\nsvnproto.ppls\nwww.mam\nmvm-ri-d125236.roslin\ncsg-est-0120.csg\necha\ncsg-pps-0025.csg\nkostenlos\nwww.nena\nwww.myproject\nwww-dev.events\nhealth-lap64.health\nwebfox\nril-104171.roslin\npsy-hcn-nas3.ppls\nsci-jet20.iad\nfelicidad\nmateolaptop.ppls\nwww.orbita\nhss-health-l69.health\nsci036.scieng\nwww.primaria\npreview03\nhaka\nris-esx04.roslin\nftp.mobile\nwww-test.exseed\ncsg-fin-0001.csg\ncsg-corp-0016.csg\nmaverick1\npcweb\nrecetasdecocina\ncsg-saf-0037.csg\ndonmez\nperitus\nnde\nsociete\ndfdf\ndisconnected\nappfacebook\ncarlitos\nhyves\nfarideh\nmvm-ri-l127008.roslin\nhss-health-l02.health\nwww.rama\nallsolutions\ncsg-fin-0051.csg\nmailbe8r.staffmail\nonelan.sasg.001.sasg\nmvm-ri-m124186.roslin\nrosarito\ncsg-est-0170.csg\ncsg-fin-0111.csg\ncsg-est-0158.csg\ndsb-4-05-mfp-col.ppls\nm.tr\njaga\nmut\nphonecard\nris-esx03-nic2.roslin\nmvm-ri-m126241.roslin\nstmedia\ncsg-est-0040.csg\nlacosta\nmvm-ri-d096172.roslin\naboutme\ncsg-as-0000855.csg\ntios\ncsg-fin-0221.csg\nrip-colour0102.roslin\nsoftwaredownload\nmvm-ri-d125130.roslin\ncsg-est-0090.csg\nhss-health-0126.health\ncsg-est-0175.csg\ncsg-fin-0196.csg\nbertrand\nplatinium\nnta\nsas-reg-0005.sasg\nsci097.scieng\ncsg-sec-0013.csg\nwww.page\ncsg-est-0150.csg\nfahmi\npca\nmymovies\nwww.drps\nhardstyle\nwww.oviedo\n33bp-basement-b1-mfp-bw.sasg\nacaiberry\nsas-reg-0011.sasg\nwhocares\ncsg-est-0210.csg\nfreeporn\nvallarta\nwww.buscador\nmc-1-siteoffice-mfp-bw.csg\ncsg-est-0202.csg\nspek\nnbn\nvijesti\nmvm-ri-v127006.roslin\nsas-reg-0016.sasg\namad\nwww.arquitecto\nhealth-omq-018.health\nplayback\npmk\nabogado\nintex\nwww.mastergamers\nsuperanimes\nmvm-ri-l105205.roslin\ncsg-est-0259.csg\nrid-115174.roslin\nwww.pipe\nwww-test.salfor.finance\nsas-reg-0022.sasg\nwww.eves.myed\nmvm-ri-d087116.roslin\nwww.madan\nkanchan\n7777\ncsg-est-0320.csg\nmaligno\nhss-ppls-0179.ppls\nkatyperry\npug\ntheanswer\nsas-reg-0027.sasg\nmvm-ri-d096243.roslin\ndbz-episodes\nfreehabbocredits\ncsg-pps-0010.csg\nwww.rasta\nherramientas\nkarthick\nwww.maple\nwww.dreamteam\nwww.sun\nphhh-g-lab-mfp-bw.csg\nwrk104.csg\nuben\ncsg-bems-0003.csg\nwww.prensa\nsas-reg-0033.sasg\nsce-coll-0057.scieng\nwww.prints\ncsg-est-0235.csg\nmvm-ri-m126134.roslin\nsas-reg-0038.sasg\noptik\nwww.rafael\nebrpttse.roslin\nwww.enlaces\nwww.pronet\nplayhard\nwini\nwww.mercado\nwww.anormal\nmvm-ri-d096065.roslin\nmvm-ri-m115202.roslin\nworkpc\nmemberservice\nmvm-ri-d125023.roslin\nsblel1.ppls\nmvm-sbms-130293.ccns\nbusinesscenter\nwww.merry\njehad\nhss-health-0019.health\nhss-health-l34.health\nsoptec\njacaranda\npl-b-catering-mfp-bw.csg\nsitemusic\ncsg-cse-0023.csg\nsce-coll-0039.scieng\ntechnetium.ucs\nhss-ppls-0009.ppls\nelsaka\nkeller\nwww.real\nmvm-sbms-130271.ccns\nblazers\nsas-reg-0049.sasg\nwww.psycho\nhca-mac002.shca\ncsg-hr-0016.csg\necci-3-307-mfp-col.scieng\napi.money\nwww.cristovive\nsas-reg-0055.sasg\nhca-mac007.shca\nfaceeboook\nrealcom\nkicha\nmvm-ri-m095203.roslin\nmvm-ri-l136090.roslin\nbestteam\nqwertyui\nhss-iad-0048.iad\ncsh-1-1.3-mfp-col.csg\nschooldemo\ncsg-hr-0066.csg\nsas-reg-0061.sasg\nnewslist\nanorexia\nmarimba\nml-3-photocopy-mfp-col.sasg\nsas-reg-0066.sasg\nhca-mac018.shca\nwww-test.adminermis.planning\nwww.obb\nwisata\nmvm-ri-d077235.roslin\nsoftwaretest\nmaquina\nelmatador\nwww.regina\nugm\nmvm-ccns-srv1lom.ccns\nmvm-ri-d096136.roslin\nwww.paginaprueba\nwww.juguetes\nserviciosweb\npluto2\ncsg-pps-0026.csg\ngothic\nwww-test.eit.finance\nsystem1\nalarabia\nmvm-sbms-130303.ccns\nsas-reg-0072.sasg\nmartial\nxiomara\nwww-test.forums\nnightowl\nsfp\nmvm-ri-l115158.roslin\ntvc\nprivaters\nwww.mov\nbrowsergames\nsantra\nsas-reg-0077.sasg\nhca-mac029.shca\nking123\nfreegold\nsci062.scieng\nebri073202.roslin\nwww.sexo\nmvm-ri-d077039.roslin\nmvm-ri-d127138.roslin\nhca-mac030.shca\nsas-bu-0009.sasg\nhca-mac035.shca\nmvm-ri-d126027.roslin\nlabib\nwww.epis\nmvm-ri-l116092.roslin\nfbgame\nwww.roxy\noscom\nadim\nwww.shoe\nwww.petcare\nthekiller\ncsg-fin-0002.csg\ncsg-saf-0038.csg\nsas-reg-0088.sasg\njaypee\nsilentkiller\nwww.freechat\nnetworksolutions\nspecialforces\nhca-mac041.shca\nelmas-mac.ppls\nanimeland\nfanfan\nwww.ricardo\nwww.slap\nsusy\nwww.cvresearch\npetcare\nwww.regalos\nvri\nmelu\nopenbook\nphlaptop.ppls\nunipol\naudiomaster\nsolver\nsuspend\nhackersworld\nblacker\ngangxta\nsbimgtest.ppls\nwibawa\nhss-ppls-0191.ppls\nimage170\nmahavir\ncsg-fin-0052.csg\nsas-reg-0094.sasg\nhca-mac046.shca\nhotmarket\nmvm-ri-d116028.roslin\ncsg-fin-0112.csg\nwww.alf\nwww.ami\nworldwid\nshailesh\nmydatabase\nfacbok\nwww.are\nsas-reg-0109.sasg\nwww.cad\nmac24arg.ppls\nwww.asg\nwww.ata\nfatalerror\ntomomitsu\nwww.avm\ntik-tak\nwww.boo\ngoodstuff\ngamehub\nitran\nwww.cim\nlogin111\nwww.transparencyadmin.fec\nris-vlx11.roslin\nvone\nwww.ddr\naquaservice\nwww.cpc\ntmw\nmcfly\nspooks\nwww.dmb\nwww.dnc\nwww.formula\nwww.cvt\nnimbuzz\ndron\nwww.dps\nwww.dsb\ndispenda\nsas-reg-0115.sasg\nwww.fdm\nlogiclab\nwww.fds\nanshuman\nwww.epo\nwww.fic\nwww.flg\nwww.fmc\nwww.flp\niwc\nwww.gep\nf4rr3ll\nmonokawa\nwww.gio\nmvm-ri-l115230.roslin\nbanlist\nrt-test\nhelpinghands\npaypals\nfreecredits\nwww.hrh\nwww.jac\nsce-coll-0022.scieng\nwww.jaz\nsoftworld\ncsg-as-0000856.csg\nmolto\ndouble\nwww.detox\nwww.isa\nwww.isi\ncsg-fin-0222.csg\nbiz3\nfacetoface\nabhinav\nevilboy\nwww.jon\nsas-reg-0121.sasg\nmadhead\ncsg-est-0101.csg\nwww.lou\ngamersclub\nalienware\nwww.mit\nwww.mps\ndondon\nwww.mus\nwww.astra\nwww.uspeh\nwww.ott\nalarm\nwww.psa\nwww.krzyz\nkrzyz\nwww.ren\nkalai\nmvm-ri-l067146.roslin\nwww.ses\nsas-reg-0083.sasg\ncsg-est-0189.csg\nwww.rps\nwww.rrr\nsas-reg-0126.sasg\ncsg-est-0151.csg\nwww.rvr\nwww.sot\nwww.rejestracja\ncyber2\ndigimap\nitbbs\nris-biolx01.roslin\nest-forhill-g-keys.csg\nfacebooook\nwww.engine\nwww.vms\nwww.vsm\ndante.ppls\nsas-reg-0132.sasg\nfacebook32\nfacebook20\ncanggih\nwww.zzz\nwww.singer\nprevencion\nkalinga\ntrotamundos\nryuichi\nnightrider\ncsg-est-0211.csg\nflorin\nlinweb\ngfl035235.roslin\nfotografias\nautodiscover.cse\nbibliotek\njayaram\nwebdisk.cse\nautoconfig.cse\nwww.mileycyrus\nmusicrecords\nblackspider\nsas-reg-0137.sasg\nwww.alcatraz\nsumaho\nmitiendita\nwww.bestofthebest\nzac\nonlinevideo\nwww.pc-gamers\nsecuremail1\npsse\nbuchen\nwww.fanfiction\nmvm-ri-l105053.roslin\nsas-leaps-0005.sasg\nwww.marathon\nsas-reg-0143.sasg\ncsg-est-0321.csg\nwww.pintura\ntruefriends\nsas-leaps-0011.sasg\nsas-reg-0148.sasg\nconsultas\nphstl-b-financeoffice-mfp-bw.csg\noptec\nsyko\nwww.supra\nwww.radiostyle\nmerk\nvinhxuan\nwww.rick\ninfosystems\nwww.ton\nnetcenter\nlect-health-001.health\ntoner\nbase4\nbase3\nbase6\nmvm-ri-d107212.roslin\ndineroextra\ntvt\nbase8\ntraspaso\nall4all\nufd\nbase7\nwww.serialkiller\nbase5\nsas-reg-0154.sasg\nwww.movistar\npetrovic\nris-esxi02.roslin\nvis1.scieng\nris-lx09.roslin\nsorrylove\nwww.fotografias\nmodt\ncoolgames\nowc\nsmarteye\nwww.madagascar\nwww.testtesttest\njustinbieber\nguadalupe\nwww.mercadolibre\nmvm-ri-d115227.roslin\ncommunaute\nppls-chltop.ppls\nwww.pad\nspecialist\nrodolfo\nwww.motocross\nphi-plato.ppls\nfacebo0k\nomp\nheller\nloca\ncsh-g-g21-mfp-bw.csg\ntestarea\nglobalchat\nwlkt\nhss-health-l59.health\nsas-reg-0159.sasg\nwakwak\nsci026.scieng\nrajakumar\nmvm-ri-l094181.roslin\nsas-reg-0165.sasg\nwww.webs\ninjection\nwakaka\nmvm-ri-l087098.roslin\nwww.entrepreneur\ngiftshop\nwww.pepsi\nwww.target\nric67255.roslin\ndisable\nwww.xboxlive\nwww.uriel\ncamila\ncerc3.roslin\ncsg-cse-0024.csg\ncuartoa\nwww.yamato\nwww.monavie\nsv74\nwww.student-experience\nsas-reg-0171.sasg\nfanfics\nriv-vc02.roslin\ncsg-hr-0017.csg\nfastline\nsollid\nhss-iad-0049.iad\nfenerium\nanimelatino\nlibe\ncsg-fin-0101.csg\nmemes\nsuicide\nwww.maristas\nesx12\nsudhakar\ncsg-cse-0057.csg\nmetatron\nspamgw-fb\nmvm-ri-m126231.roslin\nwww.gigabyte\nwww.soluciones\nfinplan\ncsg-hr-0067.csg\nsas-reg-0182.sasg\nwww.tra\nbashayer\nportalcliente\ntumoda\nwww.gamecenter\noverseas\ndartagnan\nwww.newyear\nwww.intra.vacancies\nwww-dev.admin.careers\nwww-beta.myed\nwww.socios\nhss-health-0116.health\ntotalwar\nwww.robin\nrid-096215.roslin\nwww.radiomax\nwww.salvador\nsas-reg-0187.sasg\nashwani\nwww-dev.pubs.recordsmanagement\nblackwolves\ntelevision\nfacebookk\nfacebooki\nytrewq\nbesiktas\nmagistral\nwww.apuntes\nforum.beta\nfaceboock\nrevshare\nsprzedaz\nwep\nbimde\ncsg-est-0209.csg\npemilu\ndipika\nwww.thewalkingdead\nclickhere\nsaral\nwww.recovery\nyouporn\npiccolo\nmvm-ri-d134246.roslin\nwww.fight\ncsclub\nwww.ruben\ncsg-pps-0027.csg\nsas-reg-0104.sasg\nartedigital\nwww.calentamientoglobal\nwrk-jet10.csg\ncoolradio\nwww.bigboss\nppsxer2.csg\nsas-reg-0189.sasg\nwww.prime\nmvm-ri-d086163.roslin\naerosol\nopteron\nhca-netprint-bw11.shca\nfiredragon\nwww.stella\nncis\nthestig\nthespot\ndetodoparatodos\nnightmares\nchatcam\nnasiri\nwww.tqmobile.dev\nhealth-omq-008.health\nsinlimites\nwebdesing\nteenangels\nhss-hca-0102.shca\ncsg-fin-0085.csg\ntupagina\npspstore\ntdcom\ninternetwork\nwww.styles\nhss-health-0105.health\nwww.trinidad\nsolochat\nhandc-mhist15.shca\npromocja\noptimusprime\nwww.mechanics\ncsg-saf-0040.csg\nwww.show\nmvm-ri-m106233.roslin\namirul\npayesh\nfortesting\nppls-macbook2.ppls\ncsg-fin-0053.csg\nhealth-omq-029.health\nrenova\ncsg-fin-0113.csg\nhca-tlab-020.shca\npatrimonio\nwww.summit\ndika\nsce-coll-0047.scieng\nvigo\nthehive\nwww.armenia\nanabella\nsummoner\nzuniga\nmian\nkconspiracy.ppls\nwww.mp3music\nsb2012eval.ppls\nsas-reg-0099.sasg\nradiofm\nthelover\nwww.salem\npropools\ncsg-est-0042.csg\npoop\nwww.trauma\nwww.itsmylife\nclancsi\ngrancanaria\ngustavomartinez\nhealth-mac004.health\nrid-057082.roslin\nwww.raf\nhss-health-0009.health\ncsg-est-0102.csg\nvgs\nhss-health-l24.health\nenternet\npapaz\nwww.liverpool\npcscifun11.scifun\nebri023162.roslin\nwww.gabriel\ndistancia\nprokom\nwww.cfd\ncyberlink\npremiergolf\nsocute\neitin\nwww.mystore\nuidev\nmecal\nc600c\nc600b\napibeta\necal\nuidemo\nuibeta\nichikawa\nwww.tukasa\npsico\nc600a\neitin-email\nhombres\nceitin\ntest.reports\nptp2\nwww.netcom\nwww.arsenal\napiprod\nantoniosantos\nuiprod\nptademo\nog\nsonicteam\njangueo\ncmeitin\noghma\ncsg-as-0000238.csg\nhss-hca-0107.shca\npsoft\nwww.projectx\nwww.oconnor\ntemptation\ncsg-est-0152.csg\nmvm-ri-d117236.roslin\nenriqueiglesias\nsasg-oldcoll-r203.sasg\nwww.dineroextra\nimprenta\nwww.teamo\nwww.radiomix\nmvm-ri-m135073.roslin\nmx99\ncontratacion\nwww.newweb\nwww.sampler\ncsg-est-0212.csg\nwww.refused\nmvm-ri-l106190.roslin\nwww.tekno\nppls-bert2.ppls\nril-106002.roslin\ncas-mlb3-004.sasg\nwww.sofia\ncsg-est-0262.csg\ndreamroad\nsas-bu-0005.sasg\nwww.casino-online\nwww.jennifer\nwww.contactus\nwww.freegames\nhoracio\ndifusion\nhca-tlab-008.shca\nrcmodels\ncas-mlb3-010.sasg\nheadshot\ntodalamusica\nbestportal\nangielski\ngrosik\nwww.rssjobs.careers\nwrk053-2.csg\nelvs01ts02.roslin\ncsg-est-0322.csg\noudev\nwww.megajuegos\nscsn2\npinna\nfoxsports\nsas-bu-0011.sasg\nwww.viktor\nwww.alm\ngisap-ov\nexch7-ov\nfwwlan\ncfmh\njuancarlos\nprimera\nselectron\nwww.promocja\nmvm-ri-d076057.roslin\nhca-tlab-014.shca\nthebeat\ncsg-est-0220.csg\ncas-mlb3-015.sasg\npuebla\nwww-test.downloads.euclid\nphpcoder\nhss-health-l31.health\nsas-bu-0016.sasg\nwww.wagner\nfacebook-login\nsas-bu-0037.sasg\nhca-tlab-019.shca\nsapling\nincentive\nmvm-ri-l115229.roslin\nwrk106.csg\nwww-dev.scs.euclid\nsas-bu-0022.sasg\nwww.sensor\nmvm-ri-d107059.roslin\nwatchmen\nscifun2.scifun\nskd\nohlala\nwww.mountainbike\ncsg-as-0000839.csg\nppls-barbmac.ppls\nredflag\nvideoadmin\nrid-077044.roslin\npolitec\nxmix\nsas-bu-0027.sasg\ncsg-fin-0195.csg\nwww.akropolis\nsas-bu-0033.sasg\nelcloset\naguilas\ncanarias\nppls-y2lab-120.ppls\nwww.todojuegos\ncsg-cse-0025.csg\nsaf064.csg\nsas-bu-0038.sasg\nhss-iad-0001.iad\noffprinter3.scifun\nsas-bu-0044.sasg\ninnovacion\nnouri\nhss-iad-0051.iad\ngraficos\nsumt\nsec03.roslin\nrii-115189.roslin\ntechnomarket\ncsg-hr-0068.csg\nmvm-ri-l115220.roslin\ncsg-as-0000830.csg\nbombay\nsce-coll-0012.scieng\nnt6\nrecargas\nmvm-ri-m106020.roslin\nshua\nvrc\nmikel\nnailart\nshaun.ee\nwww.cul\nwwms01m27igel.shca\nwww.rcmodels\nrip-e01m4.roslin\nsask\nsar7\nwww.blackwolves\npsy-pc021.ppls\nmvm-ri-l127095.roslin\navecamour\nmysterio\ncsg-pps-0028.csg\ncrieff\nwww.industrial\nstelizabethannseton\nmobydick\nmvm-ri-i075016.roslin\nwww.sgs\nwww.nicole\nhealth-omq-034.health\npepi\nfredo\nwww.spectrum\nchabab\nhss-health-l64.health\nordu\nucu4.ucu\nremas\nyoo\nstudent11\nmyit\ntvh\ngourou\nwww.gas\nwww.nouri\nwww.topgames\npitagoras\nwww.evm\nlau02.roslin\nlsbb\nwww.velas\nmexy\nlois\nwww.wizard\nmailbe11.staffmail\nprogreso\nteka\nmvm-ri-d116080.roslin\nprettygirl\ngranados\nloft\nmvm-ri-l096154.roslin\nwww.sombras\nklnm\nimedios\ncsg-fin-0004.csg\nwww.lamoon\ngamearea\nr222\nkedu\na-team\nwww.imperium\njmjm\nyudha\nirus\nwww.acme\njari\nriv-idr8aud.roslin\nwww.agus\nris-buildlx01.roslin\nwww.bara\ncsg-saf-0041.csg\nwww.alba\nwww.bart\nwww.alef\nwww.alma\niedu\nwww.amix\nxzerox\nvoltron\nhati\nebri033186.roslin\ncsg-fin-0054.csg\ncsg-sec-0014.csg\nwww.argo\nisg-lj500.ccns\ndemo.unidesk\nqa.gateway\nesko\ngaad\nwww.slm\ncope\nwww.cctv\nwww.arboretum\npurr\nwww.bomb\nmvm-ri-d107192.roslin\nwww.chao\nemlak\nsinema\ncsg-fin-0114.csg\nwww.chic\nhca-escreen-02.shca\nmaxam\nbotn\nwww.cisa\ncerl\nwww.dart\n7gs-g-5-mfp-col.ppls\nwww.cmcc\nmsj\nwww.vcm\nwww.cody\nwww.desk\njalali\nyaghoobi\ngamehack\nwww.dice\ndlf\nhss-health-0035.health\nplone3.ppls\nsepehri\ndpl\nhss-health-l49.health\nwww.earn\nwww.eden\nwww.eddy\nstasi\ncrazyjane\nbalmoral\nwww.down\ndmccarth-macb.ppls\nastrosoc\nwww.eman\nfairlight\nwww.alessandro\nskap\nwww.fifa\ncsg-est-0043.csg\nwww.find\nwww.gaia\n7gs-g-10-mfp-bw.ppls\nwww.ersa\nwww.gala\nwww.even\nwww.flog\nwww.flor\ncrazylab\nfire-net\nwww.eauthorisations.finance\nwww.foxy\ndisturbed\ncsg-est-0167.csg\nwww-dev.eves.myed\nwww.hair\nabcdefghijklmnopqrstuvwxyz\nwww.hana\ncsg-as-0000858.csg\nbuyung\nlect-hca-006.shca\ncsg-est-0103.csg\nmvm-ri-d116151.roslin\nhaida\nppls-y2lab-006.ppls\nktncolour01.roslin\ncsg-sec-0016.csg\ncsg-est-0153.csg\nwww.jazz\nfrontdesk\nwww.inco\nwww.jeep\neccc001.scieng\nppls-y2lab-012.ppls\nwww.kala\nppls-igel-f-30.ppls\nportoalegre\nwww.jojo\nhealth-lap-023.health\nwww.juan\nwww.judo\nwww.lead\ncsg-est-0213.csg\npsy-haloscopic.ppls\nwww-test.wisard.registry\njharris\nwww.lina\nwww.mane\ngimel\nppls-y2lab-017.ppls\ncookingclass\n32bp-g-corridor-mfp-col.sasg\nwww.mccc\nmvm-ri-d134250.roslin\neldoctor\nwww.mesh\nwww.loki\nhss-ppls-0060.ppls\nwww.long\nhss-health-0106.health\nwww.mian\ncsg-est-0323.csg\ngameplay\nimg50\nimg51\npixelstudios\nebri003189.roslin\nwww.lulu\nminegocio\ninfo21\nvolia\nmvm-ri-m126043.roslin\nwww.mono\nmvm-ri-d077040.roslin\nwww.more\nwww.wanda\nultrapurewater\nwrk107.csg\nweir-g-29corr-mfp-col.scieng\nsausages.cache\nmvm-ri-d086153.roslin\nris-vlxbio03.roslin\nspeles\nwww.pera\nrii-pda1.roslin\nsas-cam-0001.sasg\ndenny.ppls\nsiltop.ppls\nhca-spglab-040.shca\nsas-cam-0006.sasg\nwww.posh\nsaf008.csg\nphil-mcltop.ppls\nwwms126igel.shca\nwww.ropa\nwinsrv1.ppls\nwww.ross\nroyalarmy\nsrv057.csg\nsas-cam-0012.sasg\ncsg-scecc-0003.scieng\nhss-iad-0002.iad\nmvm-ri-i055151.roslin\nwww.snow\nwww.snte\nwww.song\ncsg-hr-0020.csg\nsce-coll-0037.scieng\nwww.iptv\nmvm-ccbs-060001.ccbs\nwww.ssss\nsas-cam-0017.sasg\nwww.tuki\nwww.unik\nwww.vlad\nhss-iad-0052.iad\nvis005.sasg\ncsg-hr-0069.csg\npritchard-lptop.ppls\nmvm-ri-d086224.roslin\nfabiana\nwww.doctorwho\nlibertad\ntwk\nsas-cam-0023.sasg\ngeo-cc-005.scieng\nvis011.sasg\nserafin\ncas115.sasg\navpn\nathletic\nwww.jjj\nhss-health-l14.health\nsas-cam-0028.sasg\nebri103169.roslin\nwww.iss\npitter\nvis016.sasg\nlinko\ncsg-pps-0029.csg\nmvm-ri-d127047.roslin\nretrospect1.ccns\nmvm-gf-l115206.roslin\nmytvonline\nwww.astral\nmvm-ri-l137181.roslin\nmvm-ccbs-060023.ccbs\nsas-chap-0005.sasg\nwww.jol\nmvm-ri-d125242.roslin\nnewhaven-netlinx.scieng\nwww.khb\nhca-rc-009.shca\nglobalsolutions\nusenet\nfanlisting\nwww.peternakan\nppls-m-sonnet.ppls\nwww.think\nppls-y2lab-100.ppls\ncsg-saf-0042.csg\nppls-mac029.ppls\ngeinternalip1.ccbs\nwww.toys\nmaill\nmelvin\nmvm-ri-d096116.roslin\ncsg-fin-0055.csg\nppls-y2lab-105.ppls\nwww.blossom\nrid-096160.roslin\n7gs-g-5-mfp-bw.ppls\nhss-health-l75.health\nwww.tcm\nsas-cas-0007.sasg\nsci042.scieng\ncsg-fin-0115.csg\nhabbocash\nppls-y2lab-111.ppls\nsas-cas-0013.sasg\ncsg-fin-0165.csg\nwww.ksm\nppls-y2lab-116.ppls\nwww.mcb\nwww.aviator\nwww.crearte\ncsg-est-0044.csg\nmvm-ri-d115065.roslin\nwww.mcm\nebri993167.roslin\nhabboking\nhabbolife\ncsg-as-0000860.csg\nelectronica\nwww.sto\nsas-cas-0018.sasg\ncsg-fin-0225.csg\nediciondigital\ncas160.sasg\nppls-y2lab-122.ppls\ncsg-est-0094.csg\nhabboside\nsas-cas-0024.sasg\nimmobiliare\nwww.transparency.fec\nppls-y2lab-127.ppls\nwww.mim\noldhome\ncsg-sec-0017.csg\ncsg-est-0154.csg\nmvm-ri-l137074.roslin\npublimajes\nsas-cas-0030.sasg\nhss-ppls-0076.ppls\nmavi\nwww.everest\nafterschool\nmvm-ri-d126246.roslin\ncsg-est-0214.csg\nvenu\nmassimi-ltop.ppls\nzapateria\nproducciones\nsonder\nactimel\nris-netbackup.roslin\nhss-health-0132.health\ntchoukball\nwww.playstation3\nint-jet11.sasg\nwormwood\nwww.florian\nsas-cas-0035.sasg\nsce-coll-0002.scieng\njonathang\nsas-cas-0041.sasg\nil-mac03.sasg\nmvm-ri-d106010.roslin\nwww.digitalmedia\nwww.msp\ncsg-est-0324.csg\nlaser13-wp.roslin\nmvm-ri-d086178.roslin\nrid-046104.roslin\npruebasweb\ngreendragon\ncsg-corp-0009.csg\nwaterlife\nmlearning\nantibullying\nsiat\nwifiman\nredbeard.ppls\nhealth-omq-024.health\ncsg-hr-0071.csg\nris-onelan01.roslin\nmvm-ri-m086011.roslin\nppls-pc11.ppls\nwww-beta.pure\nneed\nblackhat\ndegrassi\nmvm-ri-d116069.roslin\nearn-money\nvillalobos\nfeb\nsas-cas-0057.sasg\nhca-lab3-mac21.shca\nsas-cas-0063.sasg\nwww.steel\nccnsm073.ccns\nwww.per\nfridge\nwww.warzone\nconnor\nwww.bite\nebri093168.roslin\nhca-lab3-mac26.shca\nwww.tibor\nwww-dev.hesa.star.euclid\nblessed\nsce-coll-0063.scieng\nsci174.scieng\nsas-cas-0068.sasg\nghost3\n0707\nris-pttse.roslin\nmodelos\nsch-admin.ppls\nfbgames\nbestcollection\nsas-reg-0110.sasg\nwww.anonymous\nonlinejobs\nhss-iad-0003.iad\necotours\nmvm-ri-m115207.roslin\nrip-colour0001.roslin\nwebmail.student\nwww.ram\nwww.ottoman\nsas-cas-0074.sasg\nmvm-ri-d125028.roslin\nomega-zcdr.ccns\nhss-health-0025.health\nris-lx10.roslin\nhss-iad-0053.iad\nth14\nris-vwlx05.roslin\nhss-hca-0001.shca\nwww.rex\nhss-health-l40.health\nsas-cas-0079.sasg\nris-vwinftp.roslin\nhss-hca-0006.shca\ngiacmo\nsas-cas-0085.sasg\nhca-netprint-bw5.shca\ndesignhome\nmvm-ri-d136199.roslin\nwww.zafer\nlionold.ppls\nhss-hca-0012.shca\nmainoffprinter.scifun\nvideos1\nhss-health-l60.health\nrafaela\nmailbe10r.staffmail\nbeerworld\necron\nppls-y2lab-204.ppls\nppls-pc50.ppls\nmvm-ccbs-060138.ccbs\nwww.wolfteam\nhss-hca-0017.shca\nprincesa\nsas-reg-0160.sasg\nmvm-ri-i134154.roslin\nmvm-ri-m136032.roslin\nppls-y2lab-209.ppls\nmvm-ri-d077184.roslin\nwww.airsoft\nmbplvdev.ccns\nhss-hca-0023.shca\nsas-sra-0014.sasg\nwww-test.transparencyadmin.fec\nphoenixcorp\nmelchett52.ppls\nscifunlaptop4.scifun\nwww.younes\na12345678\nebri073156.roslin\nhss-hca-0028.shca\nrii-115144.roslin\ncsg-saf-0043.csg\nhca-jpglab-034.shca\naap062.sasg\ncsg-fin-0104.csg\nmvm-ri-i124155.roslin\nsecom\nwww.helen\nhss-hca-0034.shca\ncsg-fin-0056.csg\nmvm-ri-d097075.roslin\naegis\nppls-cm.ppls\nrip-brfm7.roslin\nwww-dev.downloads.euclid\nhss-hca-0039.shca\ncsg-fin-0116.csg\nglamur\nuids\nmvm-ri-l136166.roslin\nwww.sunflowers\nmvm-ri-l105165.roslin\njorgeblanco\nmvm-ccbs-060166.ccbs\nhss-hca-0045.shca\nwww.yugioh\ncsg-fin-0166.csg\ncsg-est-0045.csg\nhss-health-0092.health\nmvm-ri-d067017.roslin\nekspert\nwww.thc\nhss-iad-0029.iad\ncsg-as-0000861.csg\nspritz\nhss-hca-0051.shca\ncsg-fin-0226.csg\ncsg-cse-0007.csg\nwww.portalweb\nhss-ppls-0103.ppls\nvelasco\nwww.vic\nwww.vik\ncsg-est-0105.csg\nhss-hca-0056.shca\nwww.tab\nsas-sra-0019.sasg\ncsg-est-0155.csg\naeros\nscripps\nmvm-ri-i060001.roslin\nwww.miniportfolio.euclid\nhss-ppls-0002.ppls\nmailbe9.staffmail\nwww.miyazaki\nhealth-mac007.health\nhca-jpglab-039.shca\ncsg-est-0215.csg\nhss-ppls-0007.ppls\nodoriko2\ntest-cake\nokurin\nkenpou\nodoriko\ntestshutv\nhss-hca-0067.shca\nlicensing.research-innovation\npiedrahita\nstandalone\nsas-princ-0002.sasg\nbmt\nvcs-157058a.roslin\nmvm-ri-d115162.roslin\nbiz2\nmvm-ccbs-060204.ccbs\nhss-health-l04.health\nprinter24.ppls\nwintest\ncsg-est-0325.csg\nhss-ppls-0018.ppls\nmvm-ccbs-060209.ccbs\nwww.hastane\nailehekimligi\npps-laptop-csh.csg\nmlive\nhss-hca-0078.shca\nzawiercie\ntemp-dcarmel.ppls\nedneuro-mbp.ccns\ntofu\nwww.zawiercie\nsiedlce\nhss-ppls-0024.ppls\nstarwap\nflykit\nppls-g26-014.ppls\nril-047134.roslin\nhss-hca-0084.shca\nparking1\nhss-health-0013.health\ncsg-est-0050.csg\nlync.corp\nppls-psy-004.ppls\nris-vlx07.roslin\nmobilebookwiresvc\nmybip\nbisnes\ndemo.doe\nhss-ppls-0029.ppls\nhss-hca-0089.shca\nhss-ppls-0035.ppls\nlect-health-006.health\nmvm-ri-d107217.roslin\nhss-hca-0095.shca\ndns23\ndns24\nmvm-ri-d096106.roslin\ncsg-cse-0028.csg\nhss-ppls-0041.ppls\ncam-laptop2.csg\nhss-hca-0111.shca\nwww.soc\nmvm-ri-i005075.roslin\nsas-intl-0020.sasg\nhss-health-l65.health\nkiba\nhss-iad-0004.iad\nhss-ppls-0046.ppls\ncsg-hr-0022.csg\njoliette\nhss-hca-0116.shca\nwham\nhss-iad-0054.iad\nhss-ppls-0052.ppls\ns2000\nhealth-pc20-1.health\nreadbook\nmishmash\nwww.nanako\ncsg-hr-0072.csg\nhss-hca-0122.shca\nwww.calum-maclean.celtscot\nrandt\nheavens\nwww.heavens\niwa\nghazi\nlcn\nhss-iad-0039.iad\nsanthoshkumar\nwww.homeandgarden\nkuwa\nexist\nmvm-ri-l005043.roslin\nhss-ppls-0057.ppls\nwww.assist\nm.www\nmvm-ri-l105129.roslin\nppls-g26-020.ppls\nmagadmin\njcmb-pc-1\nwww.hmoob\njcmb-pc-2\njcmb-pc-3\nwwwq\njcmb-pc-4\nccdemo\nwww.0\nbuscar\nhmoob\nkht\nesx24\nmobilia\nesx23\nesx22\nesx21\nwww.version1\nmvm-sbms-0055.ccns\nsas-reg-0176.sasg\nlocal5\nrl2\nnews4\nwww.domain-registration\nwlm\nkorma\nhss-ppls-0114.ppls\ngarlic\ncsg-est-0099.csg\ndirect123\nhue\nsnlaptop.ppls\nipv6test\nhss-ppls-0063.ppls\nmvm-ri-i134180.roslin\nppls-printer18.ppls\nhss-iad-0050.iad\nmvm-ri-d076098.roslin\npalapa\nwww.ccts.careers\nhss-ppls-0068.ppls\ncorpdev\nstage.admin\npalmer\nmailout01\nmvm-ri-l126132.roslin\nsgadmin\ncsg-fin-card1.csg\nbestworld\nppls-printer24.ppls\ncsg-hr-0051.csg\nmediaserver2\nhuduma\nospace\nhadoop1\nhadoop2\nnewreports\nlicenses\nhss-health-0122.health\nseishu\nhss-ppls-0074.ppls\nalgoma\nrefworks\nbooks2\ndataverse\nsas-sra-0001.sasg\nspkt\nmvm-ri-d134252.roslin\npgl\nmvm-ri-d077042.roslin\nscotsman-1\nscotsman-2\npurpose\nmvm-ri-d127170.roslin\nhss-ppls-0080.ppls\nbogor\nwww.ateam\ncsg-fin-0007.csg\npinfo\nijoh\nbengkulu\nsas-sra-0006.sasg\nendah\njambi\nsas-scs-0005.sasg\ncsg-saf-0044.csg\n152\nsrv012.csg\nesist\nftp.server\nweblin\ncommonground\nkarafarini\nglasgow\nsas-intl-0001.sasg\ndarman\nppls-g26-001.ppls\nwebmktg4\nmhrc\nexchangeserver\nhss-ppls-0085.ppls\nip9\nkeshavarz\ncsg-fin-0057.csg\norigin-attach\nwww.lhs\ntemplate2\nfarabi\n520\ntucana\naen\npserver\nihc\nsweeper\nconnect1\nconnect4\nhotdeal\njoomlatest\nhotdeals\nsas-sra-0012.sasg\nrssdev\nsas-scs-0011.sasg\nhealth-omq-014.health\nsas-intl-0006.sasg\nrid-115170.roslin\nmnt\nsarmad\nppls-g26-006.ppls\nmyac\ngku\ntort\nhuffman\nwww.db2\nphppgadmin\nschulweb\nabri\nwel\nwalentynki\nhss-ppls-0101.ppls\nsas-sra-0017.sasg\ngmis\nwww.ile\nwww.cct\nwww.schulen\nsas-scs-0016.sasg\nsas-intl-0012.sasg\nautoconfig.club\nautodiscover.club\neccc-mac001.scieng\nhss-ppls-0120.ppls\ncsg-est-0160.csg\nppls-g26-012.ppls\nhss-ppls-0106.ppls\ne-prihlaska\ncsg-fin-0167.csg\nsas-sra-0023.sasg\nmvm-ri-d086195.roslin\nsearchdemo\nsas-scs-0022.sasg\ncsg-est-0046.csg\nsas-intl-0017.sasg\nautoconfig.card\nmvm-ri-l126193.roslin\nautodiscover.card\nwebdisk.web-hosting\n11infst-1-drawingoffice-mfp-col.csg\nppls-g26-017.ppls\nhss-ppls-0112.ppls\naaaaaaa\nsnihon\nriv-vc01.roslin\nshizuka\nmvm-ri-d084185.roslin\ncsg-est-0096.csg\nsas-intl-0023.sasg\nsce-coll-0065.scieng\nsce-coll-0053.scieng\nsci176.scieng\nmukai\nppls-g26-023.ppls\nnumbertwo\nhss-ppls-0117.ppls\njpns\nsuivi\nsas-sra-0034.sasg\nhiv\nautoconfig.transport\ncomm7\nwww.curs\nmanagers\nwebdisk.transport\nettest.ppls\nautodiscover.transport\nmailguard\ncsg-sec-0020.csg\ncsg-est-0156.csg\nnursie.ppls\nsas-intl-0028.sasg\nhealth-mac010.health\nhss-health-0021.shca\ndaisy.ppls\nris-vdlx01.roslin\nhss-health-0015.health\ncsg-est-0216.csg\nhca-netprint-bw3.shca\nhss-health-l30.health\ncsg-est-0193.csg\nhss-ppls-0128.ppls\nsas-intl-0040.sasg\nchp006.sasg\nhss-ppls-0134.ppls\ncsg-est-0326.csg\nridley\nsas-intl-0045.sasg\nris-winnbevault.roslin\nhss-hca-0010.shca\nhss-ppls-0140.ppls\nsas-intl-0051.sasg\nint-usbmac6.sasg\ncanser\nbrookes\nstir\n1gs-g-corridor-mfp-bw.ccns\ndundee\nnapier\nwww.cla\nngage\npsy-lap-06.ppls\noc-g-reception-mfp-bw.sasg\nsms-studies.ppls\nwgh-worksprinter.csg\ndemo.m\nmailfe10.staffmail\nmvm-ri-d136022.roslin\ndata.hanscom\nwachusett-rhs\nfps-web\nns1.sps\nppls-mac002.ppls\nvybory\nbcu\naru\ncsh-3-3.2-mfp-col.sasg\nhss-ppls-0151.ppls\nris-vblx03.roslin\nmvm-ri-d125079.roslin\nbrd\nsas-intl-0062.sasg\nmvm-ri-l115154.roslin\ntellurium.ucs\nhss-ppls-0156.ppls\nmonah\nsci057.scieng\nredondombp.ccns\ncsg-cse-0030.csg\ngcu\nmvm-ri-l615161.roslin\nbuckingham\nglm\nppls-mac013.ppls\nhss-ppls-0162.ppls\nmvm-ri-d067069.roslin\nhss-iad-0005.iad\nhwu\nppls-mac018.ppls\ncsg-hr-0023.csg\nhss-ppls-0167.ppls\nsas-reg-0193.sasg\nmmu\ncsg-est-0269.csg\nmvm-ri-d115209.roslin\nucw\nas12\nwww.archer\nnwi\ndmu\npresenze\nedinburgh\nppls-mac024.ppls\natel\ncsg-hr-0073.csg\nhss-ppls-0173.ppls\nhss-ppls-adl03.ppls\nppls-mac030.ppls\nhss-ppls-0178.ppls\nhss-ppls-adl08.ppls\nnew-smtp\nris-vlx06.roslin\na500-repo\nuatcms\nmtrade\nrize\nburs\nppls-mac035.ppls\nmalatya\nrii-085136.roslin\nhss-ppls-0184.ppls\nsas-dis-0010.sasg\ncorum\nwgb\nsas-intl-0042.sasg\npipeline01.roslin\nmichaels\nsce-coll-0017.scieng\ncsg-fin-card2.csg\neknowledge\nhss-ppls-0200.ppls\nish\nsas-dis-0015.sasg\nhss-ppls-adl20.ppls\nmvm-ri-d136155.roslin\nmailwfe6.staffmail\nmvm-ri-d086204.roslin\nucu3.ucu\nhss-ppls-0205.ppls\nsas-dis-0021.sasg\ndata-nas4.ppls\nhss-ppls-adl25.ppls\nrelayd1\nhealth-omq-040.health\ncsg-saf-0045.csg\nhss-ppls-0211.ppls\nsas-dis-0026.sasg\nrss1\nebri093197.roslin\nmvm-ri-m116085.roslin\nrip-brfc1.roslin\ncsg-fin-0058.csg\nhss-ppls-0216.ppls\nsas-dis-0032.sasg\ntmp-psy-mac.ppls\ncsg-fin-0118.csg\nsra-mac.sasg\nmvm-ccbs-060413.ccbs\nprovatest\nrip-brfm2.roslin\nwww.admin.eves.myed\nwww.groupware\nserv03\nrid-v076077.roslin\ncsg-fin-0168.csg\nnara.ppls\nspam.cn\ncsg-est-0047.csg\nmvm-ri-l134244.roslin\nhca-spglab-022.shca\nmvm-ri-d107197.roslin\ngfl105249.roslin\ncsg-est-0107.csg\nppls-pc58.ppls\noversea\ndsb-lptp1.ppls\nweihu\ntemphiss.health\ncmfs\nhca-spglab-027.shca\ndsb-pc2.ppls\nv10\nris-lx05.roslin\nmvm-ri-d115223.roslin\nriv-nlinxaud.roslin\nvpn.cn\nhca-spglab-033.shca\nwww.nils\nhca-jpglab-005.shca\nhsu\nmvm-ccbs-060435.ccbs\nwork2\nwww.elma\nwww.arbeitsschutz\nwww.datenschutz\nreklamlar\nhca-spglab-038.shca\narbeitsschutz\nhca-rc-003.shca\nademo\nyonet\nprion\ncadburybeta\nsynthos\nsnipe\ntfbasic\nredpoll\npell\npracodawca\nmcbeta\nris-fas1a.roslin\nwedelbeta\nudtbeta\nrako\nfileserver3\nvpn.au\ndrongo\nhca-jpglab-011.shca\nhca-spglab-044.shca\nehs\nhca-rc-008.shca\nskua\ninflight\nhca-jpglab-016.shca\ntern\nmvm-ccns-0016.ccns\nwww.venue\nlandadmin\ndictionnaire\ncormorant\nmvm-ri-i134169.roslin\nhca-spglab-049.shca\nhca-rc-014.shca\nwrw-01m-26-mfp-bw.shca\nvmo\nhca-jpglab-022.shca\ndcds\ngull\nmvm-ccns-0022.ccns\nkcms\nppls-printer4.ppls\nwrk112.csg\nrodc\nphi-m-mattch.ppls\nip12\nhss-health-0112.health\nfileserver4\ncsg-saf-0039.csg\nhca-jpglab-027.shca\nmvm-ccbs-060457.ccbs\nmvm-ccns-0027.ccns\nmvm-ri-l115180.roslin\npod1\npod2\nw04\nppls-printer9.ppls\nbex\ntest.services.learn\nmacmini-royw.ppls\nwww.bex\nmandr\nw16\nw17\nwww.abbey\nwebaccess2\nhca-jpglab-033.shca\nmvm-ccns-0033.ccns\neflow\nw02\nmvm-ri-d107208.roslin\nflatland\nw05\nw03\nwww.videoblog\nmvm-ri-i125029.roslin\nspam1.cn\nrupert\nmupd4.staffmail\nzachary\nhca-jpglab-038.shca\ncsg-cse-0031.csg\npickup\nvpn-nyc\nhealth-omq-004.health\naxis2\nitis\nmvm-ri-l125249.roslin\nmvm-ri-d104174.roslin\nhss-iad-0006.iad\nvoir\nheaf\nwrw-02m-25-mfp-bw.shca\ndayang\nbusdev\nmybackup\ncsg-hr-0024.csg\nwww-dev.eauthorisations.finance\nmvm-ccns-0049.ccns\neudb\ninterscan\ntsmith\nbsmtp\nfa2\nfa1\nsas-alumni-0010.sasg\nlayton\nianmac-mac.sasg\ncsg-hr-0074.csg\nbox21\ncsg-est-0319.csg\navupdate\njewish\nlion.ppls\nmvm-ccns-0055.ccns\neplab3.ppls\nsce-coll-0043.scieng\nlrc\nhealth-lap14.health\nscieng1.scieng\ndarw-8-810.csg\nmvm-ri-d096051.roslin\ncsg-fin-0070.csg\nkronos2\nmvm-ccns-0066.ccns\nmvm-ri-d086229.roslin\ncam-mac001.sasg\nehud\nhss-health-0005.health\nmvm-ri-l136253.roslin\nmvm-ri-d115177.roslin\n5forhill-4-attic-mfp-col.sasg\nhss-health-l19.health\nmvm-ccns-0072.ccns\nsjohnson\nmvm-ri-d074176.roslin\nsas-ssp-0016.sasg\nrohde-laptop.ppls\ncam-mac006.sasg\nmvm-ri-d115224.roslin\nbs1\nktnlaser02.roslin\nsas-alumni-0003.sasg\ncam-mac012.sasg\nuat-dig\nuat-ftp\ncsg-fin-0009.csg\nuat-online\ncqm\nb08printer.ppls\nuat-start\ncorp-relay\nnonasp-nfusion\no1.pulse\nuat-connect\neccc-0002.scieng\nbert-ltop.ppls\nsas-alumni-0008.sasg\ncsg-fin-0060.csg\nsas-alumni-0014.sasg\nmvm-ccns-0100.ccns\nmvm-ccns-0088.ccns\nguard1\ncsg-as-0000754.csg\ncsg-fin-0119.csg\nmvm-ri-l097128.roslin\nlect-cassem-002.sasg\nsas-alumni-0020.sasg\nmvm-ccns-0104.ccns\nsas-pharm-0001.sasg\ncsg-fin-0170.csg\ncsg-est-0048.csg\nsas-alumni-0025.sasg\ncsg-fin-0129.csg\ncsh-2-2.15-mfp-bw-1.csg\nmvm-ccns-0099.ccns\ndsb-2-19-mfp-bw.ppls\nswitch10\nppls-mac010.ppls\ncmacbook.ppls\nswitch9\ncsg-est-0108.csg\nsas-alumni-0031.sasg\nlinuxpc.roslin\ngrizzly\nflounder\nmvm-ri-d127124.roslin\ncsg-as-0000239.csg\ncsg-sec-0022.csg\nmvm-ri-d086123.roslin\nsneezy\nswitch11\nwinstats\nmvm-ri-d136251.roslin\ncsg-est-0330.csg\ncsg-est-0218.csg\nmailback\nsas-alumni-0042.sasg\ncsg-est-0268.csg\nsas-alumni-0047.sasg\nmvm-ccns-0095.ccns\nmvm-ri-l107189.roslin\ntcms\ncsg-est-0328.csg\nsas-alumni-0053.sasg\ndcs2\nwrk053.csg\ncisco01\nwww-test.tqtelethon.dev\nhss-health-0137.health\nwww-test.ccts.careers\nwww-test.secure.vle\nsce-coll-0007.scieng\ndsb-1-19-mfp-bw.ppls\ncsg-fin-0179.csg\nhandc-mesh02.shca\nhealth-omq-030.health\nhss-iad-0008.iad\nwww.omerta\nmvm-ri-m086016.roslin\ncsg-cse-0032.csg\nms-dw6-2-7-mfp-bw.health\nmaldives\nwww.py\nrinkon04.roslin\ncsg-hr-0009.csg\nkyrgyzstan\ncityd\ngambia\nluxembourg\nsouthafrica\nmvm-ccbs-000002.ccbs\nhaiti\nsuriname\nhss-iad-0007.iad\nanguilla\nhss-health-0010.health\nmvm-ri-d125212.roslin\nftp03\nvbv\necampus2\nderrik\nwww.dreamgirl\nris-vlx04.roslin\nmvm-ri-l125107.roslin\nepis2.scieng\nppls-attest.ppls\nppls-jesper.ppls\nmvm-ri-v096076.roslin\ncsg-hr-0075.csg\nppls-m-tzu.ppls\nhss-hca-0050.shca\nmvm-ri-d107223.roslin\nwww.org.planning\nleilao\nmajalah\ngfl095239.roslin\nmvm-ri-m115213.roslin\n15bp-4-attic-mfp-col-1.sasg\nhss-health-0031.health\ncsg-as-0000475.csg\nicl\nwrk105.csg\nhss-health-l45.health\nwebdisk.www1\nsci012.scieng\no3.email\nhss-ppls-0169.ppls\ncas-lap2-kb.sasg\ncsg-fin-card4.csg\nris-vlxweb03.roslin\ncsg-hr-0060.csg\n7-1enp-g-siteoffice-mfp-bw.csg\nebri053187.roslin\narrnc-is.ccbs\ncsg-fin-0011.csg\ncrdp2\nmailbe12.staffmail\ncsg-saf-0047.csg\nmvm-ri-i134159.roslin\nautoconfig.test1\nrip-d01c4.roslin\nwebdisk.insurance\ncsg-fin-0061.csg\nsra-jet11.sasg\nmvm-ri-d096147.roslin\nonelan.sasg.002.sasg\nautodiscover.arts\nautoconfig.resellers\nautodiscover.resellers\nautodiscover.local\nnbr\nautoconfig.insurance\nmvm-ri-d095036.roslin\nautoconfig.local\nmvm-ltsel21.lts\ncsg-fin-0121.csg\nwebdisk.local\nhss-health-0102.health\nmvm-ri-l115169.roslin\njosephs\nwebdisk.pets\nwww.construction\nmvm-ri-i124161.roslin\nflows\ncsg-est-0049.csg\nhss-hca-0060.shca\ncm1\nwebdisk.arts\nsas-reg-0001.sasg\nnpi777253.ccbs\nleyou\ncsg-est-0110.csg\nsas-reg-0006.sasg\napi-old\nautoconfig.arts\nmvm-ri-d104164.roslin\nautodiscover.insurance\nwww.suppliers\nwww.marine\nub3\nmydomains\ncsg-sec-0023.csg\nimg41\ntestint\ncsg-est-0159.csg\nris-lxbio01.roslin\nsas-reg-0012.sasg\ncsg-est-0219.csg\ncsh-2-2.7-mfp-col.csg\nwww-test.hesa.star.euclid\nsas-reg-0017.sasg\nmvm-ri-d095097.roslin\ncsg-est-0270.csg\nenvy.ph\n256\nshca-laptop-mac1.shca\nstat8\n149\nsas-reg-0023.sasg\ninfini\nsce-coll-0033.scieng\ncsg-est-0329.csg\nhca-tlab-003.shca\nlp3e\n142\nsas-reg-0028.sasg\nwww.eval\nwww.impress\nmvm-ri-d115167.roslin\nadecco\nsas-reg-0034.sasg\nrygel\nhss-health-l10.health\nmvm-ri-d115190.roslin\nsauvignon\nvent\ncsg-pps-0020.csg\n227\nsas-reg-0040.sasg\nmvm-ri-d086042.roslin\nmvm-ri-d116111.roslin\n242\nmail70\nmail100\nmanganese\nsas-reg-0045.sasg\nwww.gpr\nsukusuku\nmvm-ri-m125237.roslin\nmvm-ri-l126244.roslin\ncsg-cse-0033.csg\nmvm-sbms-130272.ccns\nsas-reg-0051.sasg\naagc\ngbpackbell.scieng\nppls-igel-s-38.ppls\nmailbb\nmycpanel\niemail\nsaf065.csg\nhealth-lap65.health\nsas-reg-0056.sasg\nhca-mac008.shca\nmvm-ri-l107118.roslin\nr21\nmvm-ri-d096112.roslin\nmed-000616a.roslin\nwebdisk.ufa\ncsg-hr-0076.csg\nsas-reg-0062.sasg\nhss-health-l71.health\nwebdisk.samara\nwebdisk.kazan\nmvm-ri-l134243.roslin\nmvm-sbms-130288.ccns\nsas-reg-0067.sasg\nhca-mac020.shca\nnetstore\nmvm-ri-d126003.roslin\ncsg-pps-0036.csg\ncas-mlb3-009.sasg\nprofusion\nmail.35\nsas-reg-0073.sasg\nhca-mac025.shca\npsy-actv1.ppls\nautoconfig.subscribe\nautodiscover.subscribe\nwebdisk.subscribe\nwave3\nvergabe\nwww.vergabe\nlivedemo\nseoservices\nphwifiprint\ndemo00\nereserve\nhhwifiprint\nhost73\nhost87\nccwifiprint\nhv1\nt14\nwww.onlinekatalog\ntraci\nbork\npabx\nplataforma\nsvr2\nmbone\nbeard\nktai\nnali\ntauro\nbrighton-hove.foi\nnuernberg\ntilma\nbarrowbc.petitions\naugsburg\nparlvid\nc.tilma\nb.tilma\nguardian.services\na.tilma\nguildford.petitions\nnottinghamshire.petitions\ncitizenconnect.staging\ncitizenconnect\nstedmundsbury.petitions\nwellingborough.petitions\nwestminster.petitions\nplanning.barnet\nsurrey.petitions\ncitizenconnect-uat.staging\ngaze\nasp3\nsbdc1.petitions\nsuffolkcoastal.petitions\nbassetlaw.petitions\nrunnymede.petitions\ndisko\nstevenage.petitions\nbins.barnet\nfpa.staging\ncongbao\nbrighton-hove.foi-register.staging\nthanhtra\nforest-heath.petitions\npassengerfocus.staging\nbarrow.petitions\nwaveney.petitions\nrbwm.petitions\nbarnet.petitions\nmelton.petitions\neastcambs.petitions\ntilma-osm\nmansfield.petitions\nislington.petitions\nsbdc.petitions\nhounslow.petitions\nnewforest.petitions\neast-northamptonshire.petitions\nrushcliffe.petitions\njed.whatdotheyknow.dev\nsalford.petitions\nblackburn.petitions\nipswich.petitions\nlichfield.petitions\nsholland.petitions\nair-test\nwww.d1\ncv1\nspacesoft\nrecman\nbbn\njugend\nwww.statistik\ncrowley\nwww.coroner\nvpn15\nshinho\nblueice\nvpn12\nevaluator\nvpn7\nkonsultant\nvard\nvcse1\nfatest-mbp.cit\nfaitspare_mbp.cit\nwww.libraries\nbluefire\nagava\nncdm\ngreening\nggcc\ntest.mail\nhpss\npasswd\nredhawk\nwww.vis\nvpn14\nwww.university\nwww.summerschool\nwww.tlm\nvpn13\nbadmin\nlinkup\nrocketseed\nzoning\nwww.fax\nbetasite\nproductinfo\nsmds-gw\nbala.cit\nwww.dnn\neweb2\nfajphillip-mp.cit\nballer\ncomdev\nnewdelhi\nsexylove\ninspections\ncoders\nvmd01\nsmtpout4\npingtest\ncopland\nherkules\nl14\nwww.editor\neliminator\nibss\nheartnet\ncctest\nuke\nwww.nowa\nilikepie\nsexylady\nwww.sleep\nwww95\nmedprof\nosv-support\nmotelgw\nsyglc\nsfe\nblogfaro\nclickpb1\nclickpb2\nblogdovictor\nverychic\ndercio\nswvx\nssml\nosv-message\nkvmde\ndebackup\nosv-exchange\nshamtech\nwww.collocation\nmacu\nde-1\nde-2\nwww.hypernet\nflickr.com\ndev2ns\nns10.hyperhosting.gr\nwww.grdomains\nwww.flickr.com\ndv1\nafrodite\ncollocation\nc5p4m4\nsw31\nxen-de\ndebackup-old\ntc22\ntc21\nns9.hyperhosting.gr\ngrdomains\nhost5b\nhypernet\nvideo165\nvideo164\nvideo163\ndefine\nreactor\ntc3\niroda\nbe2\np78\ntheothers\ntstyle\npressclub\njaikumar\nnewsrv\njustin-bieber\nip124\nip125\nip126\nip127\nip128\ngreenmile\nip134\nip135\nip137\nwww.arthouse\nspartak\nip141\nip142\nip143\nip144\nip145\nscriptstest\nws8\nsm8\nip149\nip152\nch1\nwww.pavlodar\nns222\npiko\nns165\nabc1234\nns164\nskater\nsistec\nmanpreet\naliceinwonderland\nfreethings\nwaheed\nns149\nfighter\nstarsteam\nns146\nmail.eu\nvagent\nmimoza\nstream01\ndentista\npornstar\nbino\ndocentia\nmedicalgroup\nmaya2\niraqsong\nreserve2\ngamescenter\nshailendra\nsolucionesdigitales\ndarren\nmmtest\nwhatson\ngaudi\ndanial\ncarpark\nagat\njournalist\ndanang\ndalnet\ntto\ndata13\nzhongwen\nminerals\nsibbs\nvim\nerick\ngplus\nautodiscover.twitter\nwebdisk.linkedin\nautoconfig.twitter\nnelapsi-servers\nbeatmix\ntextart\northanc\nmc2pro\ndaewoo\nblog.lib\nkerdoiv\ninnov\nip150\nprishtina\nchuszz\ngraphix\nfos\naztech\naps1\ncharliebrown\nwarrants\nth-diary\nts02\nqps\npravo\ncity3\ncity1\nwww.sonda\nwww.gryf\nhsmx\nwebedge\ngryf\nsourcing\nvirtualhost\nx200\npriroda\nreferee\nxhamster\nlinux7\nmindhack\nautodiscover.mx\nl19\nbrainz\nmysql58\nwebdisk.mx\nautoconfig.mx\nmysql17\nmysql54\nwebdisk.ru\ncfd125\nmorini\nfotbal\nstab\nmagic2\nshoppers\nfume\nexer\ncennik\ngastronomia\nliuxue\nwww.trader\nccu\nsaeideros\nmtlive\nalip\ndaiko\nofficevpn\nexamenes\ncfdme01\nclients2\nprokat\ncheezy\nfunnel\nebox\ncheche\nkamilo\ncopier\nwww.alliance\nfront21\nali1\ncharli\nexchas\nwww.goldenkey\nasd1234\ngoldenkey\nchachu\napp-1\napp-2\nmailsec\ntragamonedas\nbags\n2fast4you\npili\nbooks1\nloginid\nsg101\nthepearl\ncriminals\nsurfer\nnikunj\ntetsuya\nwebimages\nboonboon\ncybertech\ncedar2\nconstantine\nisadora\nadli\nmx29\nthenexus\nkowalski\nbasher\njharkhand\nmorefun\ntesting12345\nsubodh\nbob123\nsucces\nhomicides\nritu\ncyberking\nvirat\nstereo\nbloggy\ndzalgeria\nsteady\nmaryann\nogma\nstbkat\naveiro\nembla\nstars2\npriscilla\nstar25\ntinky\nnunki\ndigits\ncinedb\ndevmy\nmoviehouse\ngovideo\nmusic4fun\nmedoo\nalphatest\nnewsbox\nvenster\nteranet\ncaoliu\nx55\nspunky\nx77\nhowcom\nx87\nx89\nkpas\npiaf\neurofins\noldptu\ntonekunst\nklinikholmberg\nthaiscanhomes\npurekidsforside\nprodenmark\nx30\nmin-baad\nbygroth-uk\nx12\nx13\nudviklingskompagniet\nx15\nx16\nx17\ndesignedwithpleasure\nx20\nx21\nfuldkorn\nx23\nx24\namroptest\nx26\nx27\nmodel47\nx29\nilearntypo3\nx33\nx34\nx35\nx36\nx37\nx38\nx41\nalbertslundweb\norigin-secure\nkddi\noptimair\nkoelnmesse\nkognitivpraksis\nskraldetrumf\nlivingage\nbreakoutimage\nskysupport\nnannaleschly\nurtekram-fi\nnyhedsbrevholm\nhkiintranet\nuser010\nsundhedsrevolutionen\nsundstafetten\ngespage2\nportail-wifi\ndeltakoncept\ngespage\neric-photo\nurtekram-de\nmodel4\nmodel3\nmodel2\nthysen-nielsen\nconnecting-fields\npintxos-tapas\nadvocatel\ntpoemobil\nisfo\ncurait\nnester\neilersen\ncostakalundborgkaffe\nbornholms\nveins\ndvin\nurtekram\nnageshop\ntand-klinikken\nlhengros\nfamilieopstilling\nsolagergaarden\nscopti\nwhatcanido\nsbf\ntys\nistatistik\nhjernebarnet\ncttm\nskovdyrkerne\nshopteam\nlisereitz\ntryknet\n2900larocca.dk\nstiki\nzen-garden\nmploy\ndosyalar\nsolander\ntopmotion\ndenfriedanskepresse\nholm-old\nimplantatcenter\nhs3\nalt1\nswiftdeposit\ngucuhb\nsecuremobile\nnadine\nmultivaco\nck-travel\nfsfp\nflytteforretning\nebmaalmand\nhrapp\nbookingblotter\nmobilsite\nfwpeak10\nlogistics2\nbirm\nreleaselog\ncodecompliance\namrop\nvendorapp\nactiveinmatestwenty\nbsocrimescene\nmunicipalordinance\nfirecop\npawnshop\nnutana\nwebeocbk\nicereport\nvendorregistration\nbookingregister2\nhrapp2\nbsovpn\ncombilent\nraaschou\nkunstnergaarden\nbookingregister\nsundhedsrev\nmiketest\nvm-1\npallium\nloftlys\nlarocca\nkarrierecafeen\npharmaforce\nfsgh\nnoramobil\nkajvhansen\nurtekramblog\njeton\nminbaad-shop\nsadra\nisy\nspbridge\ntug2\nsancy\nkurfood\ngeolab\nbodyschool\nenallia\nhydrogennet\nel-light\ntartufo\nvzweb1\nonlinefragt\nkryten\nivanmadsen\nbioactive\ninnerpower\numahro\nenalia\nhumanvision\nfrieser\nhoroscopes\nnageold\nnielsahansen\nvinstedet\nmotivaco\nsignuption\nnivaagaard\ntolbod\ndacapo-aps\nrrjny\nwiik\ndesigndev\nkarlshoej\nbovesse\nwwi\nshopinvent-ny\nkomandskab\nwww2007\nurtekram-uk\nkernesund\nsitescreen\nslipslikket\nemediate\nmaintest\ndanskfamilieopstiling\nshopinvest\ncertify\ntpoe\nurtekram-se\ncirculodosmilionarios\nwww.circulodosmilionarios\namalienborg\nen-stillads\nthesociety\naccellion\nbeckett\nteikei\nphotostore\nfs111\ncandra\nnabchelny\nexec73\ncalido\nkanri1\ncalama\nsimson\nhealthadmin\ninvicta\ntherealworld\nairports\ncmsplc\nheathcote-ivory\nryodan\njarjar\nnicenice\ndartington\nmikimotoitalian\nbakerross\nhowiespro\nstaging.bakerross\nmothma\nveers\nmikimotomobile\nfbcomp\npowervamp\nstaging.yellowmoon\nluckyangel\npukkaholland\nmikimotofrench\nhowies-de\npowervampracing\nmikimoto\ndev.yellowmoon\ngymworld\nelectionresults\nmikimotogerman\ndynamix\nmarajade\nsimonsays\nnetwork-services\nbulkpowders\nneeda\nendocott\nmedisin\nbvwindows\ngauntlet\niphone4\nbhutan\nchukshelp\nstaging.bbq\nozzel\nee-1-12-0-2\nbismillah\nteebo2\ntvgstudios\ntarkin2\nanakin2\nstaging.calor\npadme2\nchewbacca2\ndnsin2.in\nsportfish\ncmsplcold\nfarlows\ndooku2\nmobile.yellowmoon\nnps1\ndnsin.in\nasddsa\nmikimoto-old\nmikimotospanish\ntarkin\ngreedo\nenterprisedemo\ndev.calor\nscrubspro\narman2\nmobile.bakerross\ndev.pukkaherbs\nwicket\nscrubsuk\naquino\nbulkhelp\nstaging.pukkaherbs\ndev.bbq\nmikimotorussian\nhowies-test\neffekta\nadmiralblank\nstephenarnold\nmikimotoamerica\nhum\npiett\nsidious2\nelderberry\nbathroomvillage\nbikram\ndziekanat\ndev.bakerross\nlyco\nbrainfood.howies\nmobilefun4kids\nlightingdirect\nlabhut\nhowiesmobile\nlygo\njango2\nmaxxis\nackbar2\nnserver1\nm.calor\nimages12\nbuy-online\nasalam\nstadtbibliothek\npsbank\nesh\nsparsh\nwww.westend\nspania\nwunschkennzeichen\nthenorthface\nlovenight\nnettech\nspam11\nadv1\ncoen\nburan\narafat\ntheodore\nflood\nlovepage\nnetserv\nsoft14\nnetserv2\ncasdev\ntensai\nhadrian\nwireless-dhcp238231.dod\nwebdisk.anunturi\nmail.cs\nreplics\ngilles\ndnsa\nezproxy.lib\npic-upload\nlovelife\nwww.sdc\ntristate\nacidburn\nvlan311.c1.dsl\ndemonoid\nbbdb2\nlivraison\nvinco\npeano.math\nguildwars2\ndns-backup\nmatchdaymail\noldforums\ndarkdivinity\ndrzwi\nwww.minfin\ncreed\nironmail\nzc1\nicy\nparlament\ndocumente\nalbena\ngrandchase\ntse02\nstatistica\nimap5\ntse04\nwww.aac\nwww.surabaya\nwww.bandung\natis\narcims\nskyway\nkickboxing\nsecftp\nwaterman\nworldweb\nmaybach\nsnowboarding\nsocialgame\nwww.armani\ntesla1\nautodiscover.students\nnosik\nmatricula\nrockheart\nmecanica\nhmp\nrgl\ndjblack\nartemisa\nwww.artis\nhuyhoang\nathene\nwww.wellington\nberater\nwww.andromeda\nasistencia\nasia1\ncoolfriends\ndaniel88\ntexasholdem\nyousuf\noab\nwebcaster\nwww.syt\nwww.asia1\nlinares\nupcode\nmackenzie\nreis\nsetec\nmagadan\nphotos1\npackers\nslamet\ntatata\nwi-fi\ngammi\nwww.uniquedesign\nsilverknight\nalhambra\nwww.daflow\nrmtweb\nwww.faccebook\ndaflow\ndemohost\nraytheon\nunicall\ndungeon\nvashdom\nwww.mebel\navis\nenef\nrosreestr\nsmallworld\nlikeaboss\nproekt\nannonce\nremington\nfaceb0ok\nx-games\nessay\npultehomes\nsodapop\nglink\namparo\nautoconfig.dashboard\ndosantos\nautodiscover.dashboard\nmezcal\nflats\ncrafty\ntessera\ngaragedoors\nlab10\nmarcial\nfinearts\nnat14\nseabreeze\noliva\nbharath\neconomie\nvip-web\nlayla\nvoeux\nwww.regions\nfriendsnetwork\nagis10g\nhagen\nkivanet10g\nkassel\nmagdeburg\npotsdam\ndortmund\ntajimi\nint-prezza\nftp.drupal\ndarty\nftp.magento\nmclub\nduisburg\ndarmstadt\nminden\nempretecno\nwww.z2\nmononoke\nafi\nconquer\nhick\ntakeda\nshukri\nfutureman\naoyama\nmadame\nshruti\n4b\nturniej\nzafer\nwww.4b\nbasura\nwww.turniej\nditu\n8000\nkundenservice\nqz\norigen-movil\nwww.progress\nandrew1\ngiordano\nbugfree\nw107\nfinance1\nkdc1\nkdc2\nbasera\ndevilsadvocate\nbarium\n008\nshogun\nkinzig\nwww.of\nisearch\nkalbach\nphpbb2\nnewnews\nffm.members\nrio-de-la-plata\nwwwserv\nsteinbach\nof.members\nwww.hessen\nwesterbach\njangtsekiang\nnidda\nagws\nsonam\nbakili\nwww.logic\nvb3\nkdg\nbbs0\nsearchapi\nbmg\ntestns1\ntestns2\nkhachhang\nshihan\nsomebody\nnet2ftp\nvanhoa\norionweb\nchiva\nportal22\nwww.economic\ncoolcat\ntruelife\nrajeev\nhesoyam\nbadges\nshariq\nsharin\nposeidon02\nasjp\nwaa\nprace\naa2\nshanel\nsinister\ndeven\ncapes\ngabana\ncom-vatk1\ncom-nytk4\ncom-nytk6\npando-dns1\npando-dns2\npando-dns3\npando-rss-vip\naikman\nc1026-services\npando-dummytk\nfcuk\naccessdenied\npando-bliptk1\ncom-cache-vip\nbugs-vip\nglustercl1\ncom-cks-vip\nglustervm1\nglustervm2\nglustervm3\npokaz\nglustervm4\npando-tk1\noffice-dr1\noffice-dr3\ncom-dd\npando-tk2\noffice-dr2\npando-protk1\npando-tk4\nshaddy\npando-dws1\nft-ecomm\nshaadi\ncom-publisher-vip\npando-dd\nx1-ws1\npublisher-vip\ntestssi2\npando-oob\ncom-eutk1\nwanem-20\ncom-nytk1\ncom-nytk2\ncom-nytk3\ncom-nytk5\ncom-nytk7\ncom-nytk8\npando-cache-vip\ngf-test\npreddy\npando-dgr-vip\npando-plustk1\npando-tk3\nx1-sp1\npando-oob-mail\npando-sb1\nx1-tk1\ntahari\npando-ptk1\npando-ptk2\ndsta\nsex-dating\npando-cks-vip\npando-ws-vip\nfla\nib3\nayhan\nnetforce\nesso\nrommel\nwww3stage\naccm\nencuentro\nwmtest\npond9\ncgate\nmail-b\nnmrserver\nmx24\nsofty\nmx22\nsetting\nseci\ncurp\nserhan\ngoszakaz\nsneakcode\nhermsen\nabonnement\nsam123456\nintranettest\nmeis\nwww.sispro\nconcour\nlabinf\njacques\nmobile7\nawais\nwww.renew\nsapa\nnicola\nmyimages\nvenedig\nvitec\nfreemont\ndima7\naxistv\nghetto\nndbs\nwww.freemont\nsvp\nferrets\ntraxx\nrpb\neasyserv\narc2\nandreys\nta3lim\npost1\nsvk\nal3ilm\nimg.cams\nmail.cams\namazinginfo\nassaf\ntechman\neasymail\nbinladen\nitemshop\nonezero\nartix\nwww.whocares\namrica\nsaydon\nucl\nwww.motd\nwww.servlet\nfinans\npdrives\nwastelands\nvedic\nblogfarm\nwww.pj\nquadro\nlabrat\ncountingtweets\ntwittrd\nnyt\nmrpeople\nas24\nadinda\nbellaluna\nsanwar\nautodiscover.postgrad\nwebdisk.invoice\nautodiscover.invoice\ncmsstage\nautoconfig.invoice\nsalinas\nthanxx\nsandip\nmethods\nsanaka\n222222\nwebdisk.reports\nserverbackup\nshohada\nautoconfig.training\nautodiscover.training\nwebdisk.training\nawesomeness\nopenaccess\ndresses\noar\nsaiyan\ng-mail\niet\neastwest\nrenewaltest\ncybertest\nakr\nsafiya\nambika\nsam007\nggb\nlogz\nriet\ncnbc\nglide\naboali\nleonhart\neastman\ngridmon\nspare1\nsnsgwy.zdv\nwm01\nmedizin\nsaanvi\ndomainrenewal\nbest2\nbetac\nrws\nqqqwww\nplaner\nanuncios2\ndianne\nhelpinghand\ndemocrazy\nayeha\nautodiscover.affiliates\nautoconfig.affiliates\nazmoodeh\nautodiscover.testsite\nautoconfig.testsite\ntlg\nanmol\nfinanzen\npitagora\ngopi\nhemanth\nardis\ncatdog\ns4.sq\nfsecure\nrcis\ncsps\nwww.sof\nftech\nns.s\nbramj\n1234567890\ndxpt\nmercury2\npushkar\nxjgl\nmainstream\njp1\njp3\ngabvirtual2\nandie\nsistemas2\ns005\ns003\ncirclek\nskillz\ns004\nrunes\nfile7\nfia\nmail-02\nakuma\nmail-04\nnewcolors\nwww.soup\nrodrigues\nassist5.sq\ntunisia-sat\nkamini\nafg\nafu\nakb\nveer\nqwerty12\ngrundbuch\nmatras\nanons\nhfd\nsport1\njasmina\nautomania\nkmu\nksb\nfileexchange\ntiko\ncyberfox\nb245\nwww.gadgets\ncallmanager2\nglobalservices\nwww.nuts\nmicheal\nvideoconference\ncornetto\nenligne\nguest2\ninformatix\nvisualkei\nsocialgo\nwww.admin2\nvmanager\nristoranti\nblocker\nbahar\nmickeymouse\nbeholder\nviaggi\nracedrivergrid\nsiv\nwebtek\ngiti\nnhp\nfoofighters\nwww.studenten\nalmanara\nmyguitar\ninquery\nseverus\nokadakisho\ntibiia\nvz7\nwoodpecker\nsys5\nsys6\ncelebs\nvz24\nlocalhost.dev\ndds100\ndds101\nfeisbuk\ndaas\ngt4\nmgate\nmarsh\npunkrock\ns6.sq\nfergie\nmail-vip\nrolls-royce\nfairbanks\ndvc\nvipmail\nriverdale\nhera2\nni2\nlib4.lib\nstatecollege\nb.ns.chmail\ndesign4\nd.ns.chmail\nmas1\norigin-signup.mobile.devstage7\nmemberstest\na.ns.chmail\nf.ns.chmail\nnasu\nc.ns.chmail\ne.ns.chmail\nwww.abiturient\nwww.pass\nwww.faces\nwww.alumniforum\nimi\ncolleges\nwww.colleges\nwww.distant\nalumniforum\nceas\npump\nxboxpoints\nlocales\nnazar\nbdb1\nkemi\nwebmail-test\nwww.poem\nrisc\nthewizard\nrazvoj\nt-shirts\ns1.ds\nvarejo\nsa-loadbalancer1\ntestlog\nsa-db1\nsa-workers1\nsa-archive\ntarun\njxpt\nsa-www1\nadmin-2\nnfuse\nm.buy\nseatwave\nangler\nchangeworks\nblackwater\nmeredith\nwww.poisk\nbalashiha\nseker\npeca\ngvll00989\nimg.m\nstaging.mobile\nseiya\nwww.kiosk\ndaiichi\nhtc76\nzdalna\nnewip\ngoldbar\nwww.smax\nwww.publicidade\nussd\nfields\nlineservice\nad-test\nk-1\nexport2\ntest.stats\ntest.exchange\nwww.scotland\ntest.register\ninvoicecentral\napogee\niphone3gs\npdesign\n123asd\npsteam\nshr\nkrasotki\nrashmi\nrashid\nipphone2\nmc3\nmc4\nrapido\nmg3\nioan\nmaquette\ncryptshare\ncasa2\nwebdisk.katalog\neblast\nrtmail\nassist4.sq\nyouthclub\ncamchat\nvideostage\nnte\nhart\nsecuremail2\nmxs1\nnl2\nenhance\nlb-origin\nmail.ci\nwatervdi\ncoawts\ncoabenefits\nwww.test8\nmyatlis\natlis\ncoavdi\nsupportbridge\ncourtview\ncoaspam\natlisdoc\nqls\nsslc\ncatstest\nsjh\njypx\nsjz\nyousendit\ncatsprod\npwops\nwebmailatl\natlopen\natlisdoc2\ncitycouncil\nxrd\ncoaworkaway\nzjy\nxn\nmyatlis2\ncatcrp\natl26\nelmsencoder01\natlis2\nxmail2\nassist6.sq\nrt2\nnyoman\nskripsi\nsimpel\nfnet\nd170\nhjp\ns5.sq\nprobe1\nwebmail8\nwebmail12\nwebmail14\njnf\nwebmail22\nmgh\nmjg\nwebmail30\nwebmail24\nwebmail18\nassist8.sq\nd150\nchangzhou\nd156\njiankang\nd159\nd144\nd145\ndedicated2\nd146\nathkar\nwww.mybb\nwww.topics\nd147\nd149\nd151\nd152\nd153\nd154\nd155\nd157\nd158\nd160\nd161\nd162\nd163\nd164\nd166\nd167\nwww.katalog-stron\nkatalog-stron\nd168\nd169\nsrvmail\nd171\nd172\ngeoff\nprobe2\nshoppay\ninnu\nmlib\n1010\nlibs\ngridui\ntky\nzzc\nsjjx\nwww.yf\nwwt\n10010\ndoxygen\ngec\nezri\nwebdisk.sub\nchris2\nduvel\njcd\nslideshow\nairforce\ngqt\nwww.pobeda\nkansei\nikd\nplat\ntpower\nftp.blogs\ndionis\nsgu\nnavic\nartnet\nxon\nsuslik\nharukaze\nksuzuki3\nopenspace\niseeds\nacb\npostcards\nsuteki\ncaa\nkasaneno\njenni\nchk\norga\ne-district\njsac\nregd\ntomonokai\neapada\nsameti\nhellosensei\ncobanks\neaapada\nhgh\ndaa.aguime\nmatsuya\nnaoto\ndiaries\njah\nsaitama\nhrw\nmottainai\neizo\nglim\nclear1\njpl\nkagawa\nrewrite\ndonut\nehime\ncomco\nheb\nniigata\nmqm\nsofuto\niwate\nminhdang\ndangquang\ngame7\nanhduc\nhanami\nhoangnhan\ngame10\nnhi\nmaigia\nvanity\ngame9\nrichy\ngialong\nisdn\nwww.bratsk\nkoiru\nrankurusu\nperushian\ndooburu\nevery-pokemon-ever\nmatsuura\nfloors\nsystemy\nmarkham\n2play\ntechfaq\nhyperlink\ntmlite\njivko\ntest.mobile\nez1\nmr01\nec-test\nrdn\nwww.lines\nmail.img\nlines\nabis\ncbw\npen\nwbsnhes\napps01\npsystems\notb\necorp\nvopforms\ngranicus\nwebdesktop\netrakit\noth\nunivega\nkuvat\nservices.int\nsaj\nmahad\nrux\nryb\nsop\nkoreii\npriest\ndpf\ntrd\nkukai\ncompanyweb\ntaigame\ntsvb\ntrangchu\nclang\nww01\nthumbs4\note\nms03\nvalidacion\nstatic-3\nfwsm\ntrr\nfp1\nweb-mail\nwebdisk.tracker\nhenan\nwai\nzyzx\nrbj\nkazak\nyoshiya\nwebforms\nvw4\nalfactory\nwww.stmarys\ns8.sq\naerc\nxueke\njfx\ngce\ncrear\narch2\nzulutrade\ndepth\nmoebius\nworksite\nwebdisk.r\nextra3\nallsouls\nyoshimitsu\nnst1\nsample101\nogura\npcshop\ntsearch\npc9\nucupdates\nmapp\nmindscope\nbuyer\nautoconfig.banner\nidgroup\nakind\nyoutuber\nsecure-dev\nesthe\ner3\nautodiscover.banner\nwebdisk.banner\ncoral2\npeyvand\nadmain\ntshop\nmuumi\npressa\npc30\ntrinusduo\npine.wan\ntakku\ndawin\npc19\npt-br\nsaifu\nspare2\neurydice\nlyj\ntact\nassist7.sq\nnakai\nllb\nsmartsolar\nres8.sq\nsample11\nlgb\nlinos\ntelemaque\nolympe\nsample12\nsftest\nmelma\ninfopoint\nater\nisoft\nconcorso\ngdl\nsaito\nneron\ndnl\nfatou\nmoloch\nploiesti\ncrios\nbbdd\npandore\nmathgraph\necole\nsjj\nrrb01\nslj\nrakuchin\nfujiya\nlogstash\nyoutrack\nwww.cro\npersonalmail\nwww.789\nmilehigh\nbackes\nkikuken\nksuzuki4\nmothers\nttac\nuniva\ntempl\npt.dev\nhomestead\nloreto\nfayette\nmuta\ntaiba\njohn1\nvpn.office\nautodiscover.ask\nbruna\nautoconfig.ask\nharrington\nlink2012\ncoastline\nw52\nbirchwood\nres6.sq\niwantyou\ndowneast\npokerface\nbrevard\ndioni\nfats\nsolid1\ntsn\nlise\nlovelove\nhaxball\nsocool\nmlsti\narabesque\ndiimo\ntenryu\nappetite\nmixture\nhillcountry\njjoo\nspellbound\nodell\ninche123\nkatze\nballin\nmedicare\nrivervalley\njixie\nclarks\nduonet\napi6\nkamas\nlicense4\nwww.svadba\nodonto\ncccs\nfeijao\nusi\njeen\ntakagi\nstreamserver\nbattlefield3\nestafeta\nl2l\nsignage\ninset\njoejoe\nstreetball\nimyme\niwai\nlayouts\nserv207\nbroccoli\namoremio\nasterism\nbenxi\nshiv\nftp.uat\npetworld\ndoubled\nultraman\nwowow\nbetula\nres5.sq\nwww.otto\nhorseshoe\nviceversa\ndeadant\n00\njmsa\nonlineapps\n3x\naabbcc\nbcy\nwww.albion\nboulansserie\nwww.ntp\nzps\napathy\ns7.sq\narakawa\nwpress\n333\nllv\nmmx\nlxr\nibps\nlanker\nhorie\nluntan\ntvshop\nletters\nsxt\nlessismore\nxgs\ndiimonet\npersistence\n225\npuchar\nwww.puchar\ngoteam\nmail1a\nmail2a\nbb1.mtq\ngentle\ncoool\nmof\nmajdi\nsisi\nwebdisk.server1\nautodiscover.server1\nwangfeng\nquoka\nspringer\nmachine\nautoconfig.server1\nlag\nkikimimi\nmarverick\nmucchin\nhate\n250\nkondo\nhawthorne\nseasons\nmysql-dev\nappetizer\ngirafe\nhabi\nslhost\ngazelle\ngrove\ncnn\nkikugawa\nours\nbenzy\nsmtown\nrequin\njpress\nthewave\nlinki\nbessel\nmpi2\nmcds\ndoomed\nyangzi\nponta\ndelusion\nksworks\nedger\nwebdisk.html\nmidas777\ntarhely\nminori\nwebsl\nm.secure\nnovato\nispy\nwww.platform\nwww.orbit\nmitsumoto\nhirogaku\napothiki\njptest\nserv48\nserv46\nsubmarine\nwww.bus\nserv44\neraser\nwww.uppic\ndvor\nalum\ntbrown\nradic\nfiberarts\nmoonstar\nserv43\nwww.radic\nhanji\nwww.martian\nserv42\nwww.fornax\nwww.butters\nserv41\nvitamin9\nhanae\nvodokanal\nftp.ns\nmarieke\nwww.qmail\nanakku\nvillain\nmammatus\nftp.ns3\nnamed4\nmarket9\nradar1\nbbcs\nwww.pz\ntalisphere\nwww.fiberarts\nleming\nwww.jjmusic\nsbs01\nwww.rs3\nsweetcelebrations\njjmusic\nsupermoon\nwww.parked\nwww.mmedia\nwww85\nverynice\nwww.jsd\nwoodruffs\nftp.lists\ntelephonie\nwww.radianthealth\nhaccp\nhabit\nradianthealth\nwww.bounce\ngijoe\nwww.jamestest\nweyl\nvenerdi\nautodiscover.notes\nwww.webmarket\nwebdisk.notes\nulva\nwww.shortcuts\nautoconfig.notes\nfree4\nres2.sq\nwww.sweetcelebrations\nsmartdata\nwww.squid\nlosm\nangelique\nmconnect\nmcv\nautoconfig.exchange\nezbiz\nmcdermott\nwebdisk.exchange\nsads\nao.www\ncordial\ngetup\nadtech\nlacolmena\ncayenne\nsamenwerken\naboutus\ndoha\nwww.paper\ndobe\nmydear\nardbeg\nelbruto\nflush\nnavtest\nhumanitarian\ntestuk\nchambre\nmha\nridgeback\nfourseason\norigin-www3\nsv13\narys\ngazel\nhodges\nleica\ngblog\ndigo\nashida\nkofax\nscan01\nredsys\nmorita\nmoco\ntsuchiura\nashiya\ngalle\ndays7\nritmo\ncoli\nthallium\nfurther\nksuzuki5\nok123\nclue\ngrunwald\n8community\nrokas\necook\nwww.monalisa\ndain\nkangin\nds20\ndarma\nmiura\nwww.mywedding\nwww.farmer\nadrenalin\nsgl\nsandc\nbestlink\nres1.sq\nkompas\ndemodemo\ndarkages\njordan3\nrizon\njordans\nfault\nxproject\nfreesia\nmistest\nduong\nmoonbeam\ndisillusion\nswoboda\npeachblossom\nsincity\nlimno\nqwerty123456789\nmaldi\nap2012\ndoran\nmarc2\nvhost103\nvhost104\nmonochrome\ndokdo\nautodiscover.correo\nolivaw\ndodam\ndnine\namit\nafter12\nwebdisk.correo\nautoconfig.correo\nhighquality\nhappy77\ngraviton\nballet\ninthesky\nvgk\necho2\nmodtech\nsuper4\nwww.profi\nbotticelli\ncstar\nshaho\ncontec\nakasha\ngoodmorning\nmejis\nds54\nmunzer\nspareparts\nwolfs\nfifaonline\ndimon\nacetech\ndhome\nemic\nvps201\nautodiscover.fun\ncrave\nacro\ndvorak\nautoconfig.fun\nnbs1\nconst\ncook2\nconco\ncomma\nnewalliance\nchise\nis3\ntriplea\nfeel20\nddos1\ngalleryb\ndebut\nkellycodetectors\n347878-web1\n347879-web2\nsb_0601388345bc6cd8\nsb_0601388345bc450b\nclose\ngearlink\nasumil\nvpngate2\nwebcrm\nfryingpan\nsile\nopac2\nnbs\nintuition\naffection\nsqldev\nquirk\ntestsql\nradagast\nnctest\nvoffice\nea2\ndpms\nasd123456\nres3.sq\nkp2\nxwgk\njwjc\nwww.taiwan\npl.test\nes.test\nwebtrain\nwww.bn\nelysian\nns281\ntabloid\ncreativex\nccftp\nmusicnet\nwosp\nautodiscover.sport\nczaplinek\nwww.wosp\nfrodon\nbarrier\nconges\ngb4\nminerve\nscmail\nassist1.sq\nhschool\ndetailing\njosselin\nldapx\nautodiscover.article\nautoconfig.article\nspace12\nwww.recreation\nwww-6\nwww-7\nliberator\nproxydev\ntestsp\ngws\ncetis\nbohum\nraze\njarek\nmajesty\nmailpro\nznane\nns-slave\ngalleries2\nhr2\nmofa\ncus\nsmok\nmikro\nwww.giochi\nmpay\nmaravillas\nautor\ntunnel1\ninference\nftp.test2\npro02\nminiminilion\nfatura\nattic\ndemosrv\nwww.lis\ntht\ncsg2\nmoat\nwisely\nyongo\nsubway\ne119\ndb001\nhost001\nlogin-test\nqa02-ca.qa\ntamsa\nqa02-va.qa\nprod03-fl.prod.new\nprod03-ca.prod.tools\nqa01-fl.qa.tools\nprod03-ca.prod.new\nprod03-fl.prod\ntm-glb-dns-validate\nsalestools\nqa02-va.qa.legacy\nprod03-ca.prod\nprod03-va.prod\n2271\nqa02-ca.qa.legacy\nqa01-fl.qa\nqa01-fl.qa.legacy\nprod03-va.prod.tools\ns1.sq\ndev.tools\nprod03-fl.prod.tools\nprod03-va.prod.new\ndev.legacy\ngopoiskmedia\nsanko\nwmn\nvmart\njito\nmizan\nwebmail.support\nmonsieur\ncompile\ngangnamstyle\napure\nsmgw\nrmanager\narare\nmemcache\nrt-dev\nsneaker\narang\nfreetest\ngisdev\nspdc\ncas5\nyjy\nfazheng\nwaiyu\nojd\nftp.eu\nonceuponatime\nsmtp-02\nrsync.us\nproduk\nmsbd\noldvpn\nircache\nwww.arhiv\nrussianwomen\nms22\nntp1.srv\ndedicate\nms9\nntp2.srv\negi\nwww.horror\nredakcja\nplikownia\nwww.muzyka\nin3\nsecuredev\nadmin22\nthink3\nwww.exams\nin11\nrest1\nwww.yuva\ncsat\nn234\nwww.kvm\nassist3.sq\nwebdisk.global\nanony\nu4\nv0\nwww.proc\nn50\nda-test\nn66\nsitex\ndevel.int\nbeing\npillowtalk\nn67\nn68\nhp3\nidh\ninformer2\nn71\nestore.local\nipad.local\nneon1\nselina\nandro\nofcgw.012\nbeans\nuxguidelines\ndstyle\ndownloadtubevideos\nbeads\nalong\nipad-app\nbdragon\nwakawaka\namboy\nsg-staging\nsandstorm\ngenyou\naimin\noki\nsmtpenterprise2\njfk\nmadara\nap200\nkogetsu\nrule\nbonheur\nreggae\nctlfrlay\nctlfrcm\nctlfrspt\nctxnorth\nexaminer\nrika\nffx\nkejian\nlishi\nseemeee\nwww.ecard\nwww.value\nheine\nwww.munin\nlandesk\nschiller\nopie\njager\ndaj\naesop\ngxs\nlights\nworldclass\nyouthcenter\nmailin01\nbackupbackup\nsoba\njyj\nkv2\ns2.sq\nwww.livechat\nsensational\nclicktocall\ntimebomb\nbeta.search\nvsb\nnewonline\nstorage01\naudio1\ninteria\nbuss\ndesq\npackaging\nebp\nereport\nmti\nices\nfirefighters\nkweb\npeony\nhomepages\ns3.sq\nwww-uk\nwebdisk.halloween\nfishbone\ninq\nsysdb\nautoconfig.halloween\naerius\nautodiscover.halloween\ndigitel\nleti\nrefrigerator\nfanpage\nexotika\ncpweb01\nfundamentals\nnasdaq\nwnc\nvpn-mtl\naaaa1\ntropical\nsidewinder\nobis\nmgiri\ngandaki\ndosyagonder\nwww.kopia\nseehotel\nemp3\nurbangear\nkoval\nsoporte2\nh02\nmjnet\nmail.media\ndialin26\npg1\nkenshikai\nwww.push\nheimdal\npipes\ndialin29\ntestweb01\ntest212\nlester\nawaken\nplotters\nwtk\nmailing3\nmailing4\nimg.shop\n311\nmotorshow\nftp100\nminimum\narchive.mail\ndialin33\nstarmoon\nwww.kabin\nsuntar\nnine999\nneogroup\nredmoon\nestatico\neasygame\nlogin-dev\nwww.webpro\nsime\nfaa\nwww.faa\nwww.p2\nadminold\nsaveme\nquickr\nn61\nmatest\ndb-old\nn44\ndragonknights\nn17\nmthorpe\ndsa123\nadmintool\ndialin39\ntabriz\nofd\nsasasa\nxxxxxxx\npcprof\nnoaccess\nbattlezone\ntowel\nspacewar\nn69\nvoctest\nonemore\nredbone\nvmware3\nverify1\nsamsan\nhmt\narara\nsoft2\ntoyoshima\nmadteaparty\nsanford\nmiyasaka\nludo1\ninane\ncalgon\nlacie2\nwww.musteri\nmusteri\ntranscripts\navin\nlyapunov\nbluejay\nmacaron\nsmtp21\nprest\nquiniela\nsr4\ndanielh\nripper\nwdesign\norigo\nfifteen\nhello123\nsaehan\nwebmailus\np10\nsip.it\nsr8\nautodiscover.corp\nwww78\nmetaverse\nsipi\ndsvr\nassist2.sq\nseventy\nop1\nroms\nverto\nweasel\nrpgcentral\nnortia\nstats.ads\nwww.rpgcentral\nwebdisk.up\nwww.bloodlust\nwww.sen\nautoconfig.up\nwww.solace\nautodiscover.up\nwww.parse\nfoodsafety\nwc2006\nnews7\nmcash\nnews6\nsys3\nleaders\nwido\nprolab\nblanket\nitrack\nutel\nkbc\nlhotse\nekaterina\nbpj\nres4.sq\nregista\nlovelygirls\nlibmedia\ngrouper\nunitas\ndoyouknow\npuente\nview-security\nsml-104-2931\ngemini4\nwww.foo\nledger\nopenldap\ndobong\nwww.rcc\npva\nmckenzie\nwamp\nhost146\nmarvellous\nswebmail\nremart\nanimaster\naraki\nnisystem\ngk2\nkeid\nweb-stats\nmoodle-test\nmafs\nartshow\nvps21\nvps22\nvps32\nres7.sq\nsumika\ngtk\ntv123\njohni\njinyi\ndhcp5\nmcast\nascend\nnangman\nwebdisk.avia\npc232\npc231\ntradmin\nagena\nproject4\npc224\npc222\npc221\npc188\npc187\nyourday\npc171\nwww.switzerland\ntokimemo\npc151\nwww.sweden\npc103\npc210\npc99\nnetherlands\npc160\nneverending\nsip4\nold-forum\nles2\natkins\npotatochip\nonandon\nrhs\npc203\npc202\nindians\nhampton\necolab\ndewitt\npc201\nkjk\nbrady\nipsentry\nadver\nyouknow\nedutech\nlakewood\nballoon\nnative\nde15\nasin\nwilson1\nsaratoga\nhumming\nanother\nsiker\nmayfly\npro04\nasder\npro03\nvasoula\nufs\nhypercube\nkillzone\nsdesign\ntopliste\nwww.kultur\nwww.iks\nmonimoni\nautoconfig.speedtest\nwebdisk.speedtest\ningenue\nstinger\nautoconfig.kb\nheights\nautodiscover.speedtest\nautodiscover.kb\nroam\nwww.nbg\nhackett\nmelaleuca\nbenibana\nprices\npr5\npr9\nmiracl\npr8\ns244\npr7\ngibraltar\nbiosphere\ncloud01\nwww.02\npakupaku\nvidocq\nalphaomega\nhacksite\nlx2\nredeye\nlatenight\nblackblack\nentreprise\nshiningstar\nwww.association\nedoas\nmoremi\nfaj\nspringday\ncoer\nwebpac\njeffery\nurbane\ngateway3\nadminka\nsummerhouse\nsybase\nbgt\nnetque\ndayou\narial\nbacc\nwebasp\ndirectors\nwww.ntc\nsupremacy\ndqxy\nvtw\ndurov\ngarret\nsmtps.pec\nzerohour\nbluecat\nmedia15\nteensworld\nsmarthome\nevanescence\nweapon\nzaygr\nsokolov\nhighlight\nmaus\nipr\njit\nwatchcat\npowerdown\njustone\nales\nredfox\nslb\nsova\nyin\nrayman\naccom\nfrankfort\ndownland\nwei\ndenpasar\nsoybean\norange1\nsmee\nfresnel\nleek\nkuznetsov\nloveni\nannex2\nalexk\nscrat\nlovein\ngodin\nwebhome\npusdiklat\nmanowar\nelysion\nahimsa\nwww.palermo\nplab\n2gis\nemailarchive\ntrisland\nhost254\nwaggawagga\nthenine\nveracity\ndnsweb\nturnover\nkoikoi\nalamode\nkyobashi\nmotel\nanalyser\nimaps.pec\nparan\nwww.kobe\nueno\nphpmyadmin9\numeda\nwww.shanghai\nsakae\nphpmyadmin7\ntsukuba\nzinnia\nwww.nara\nakiba\nphpmyadmin10\nthucnghiem\nnapster\nvbox1\nuprising\npop3s.pec\nwebdisk.codex\nwebdisk.control\nzimbra01\nlonely\nstockage\nservera\natwork\nautodiscover.free\nwww.exp\nrevues\nbootcamp\nautoconfig.free\ndestinations\nportaleducacional\nvast\nnorther\nimportant\nwww360\nnginx2\nmusicspace\nreaction\nstatic7\nrtmp4wowza\nnsd3\ncostco\nrtmp5red5\nrhsa\nrtmp1red5\nboroda\nrtmp5wowza\nrtmp5host\ndunkan\nrtmp1host\nwhitesoul\ncdn3.cache\ntwiggy\nautoconfig.br\ncdn4.cache\nautodiscover.br\nrtmp4red5\nrtmp3wowza\ncore10\nwebdisk.br\ncdn5.cache\npinkchoco\ncdn2.cache\nmr7\nsoocool\nrtmp4host\nwebsms\nwww.success\nrtmp2host\nsemicolon\naftp\nfortpoint\nbtl\nrtmp3red5\nwikimoodleadmin\nrtmp2wowza\ntwenty\nprserver\nvimeo\nchatme\nyolo\nwww.fmsadmin\ncdn1.cache\nwww.wikimoodleadmin\nrtmp2red5\nrtmp3host\nrtmp1wowza\ntanuki\nhome7\nmukda\nmathsci\ndevile\nagnieszka\nsquiz\noptimist\nhandshake\ndetail\nhiroko\nndroo\nwww270\nmonkey01\ncisweb\nasca\ncarrollton-dvr2\ncarrollton-dvr1\ngpsinfo\natw\nstatistiken\ndientu\nmail52\ngozer\nxxxxxxxxxx\nmail88\nangeltest\ngrotto\narmonia\nmail89\nmichiel\nroutine\nidrissi\nwww.funds\niproject\ncapybara\ncsm1\nmydarling\nwww.jobcenter\njobcenter\nmarielle\nautodiscover.liriklagu\nbsn\nmonsieur64-com\nspoool-cojp\nhilucon-com\nxn--nckxa3g7cq2b5304djmxc-biz\nsundesu-com\nkpc-entertainment-com\ngary01-com\nangesalon-com\nsoundremix-com\nnikibin-biz\nkusai-biz\nad-japan-com\nsishuu-xsrvjp\nen-yukari-com\ntanpopo-eduhk\nlgts-biz\nkurohige-biz\ncosmicray-cojp\nautoconfig.liriklagu\nxsample125-xsrvjp\nmeditationscan-info\nyukihitotrend-com\nkaitaikainou-com\nconsultant-labo-com\ngrit-xsrvjp\nmost-h-com\nmizu-shori-com\nnaniwaku-jp\nofficewill-xsrvjp\nkurofune37-xsrvjp\nreconnection-lightyourfire-jp\niinkaigyo-navi-net\nkyotango-grjp\nsneaktip-tokyo-com\nsunforest-kinoe-cojp\ncatjp-info\nemigocoro-com\nplanclair-com\nwccf-kaitori-com\nsairiyou-cojp\nangels-swing-com\ngakujutsu-com\naroedance-xsrvjp\ndental-mg-com\nunagi-matsukawa-cojp\ns-seeing-cojp\nhyakushojuku-com\nnimurasekizai-com\ntwo-roses22-xsrvjp\nikedahikaru-com\nsqlcore-net\nbibiten-com\nikejin01-xsrvjp\n1yes-me\nrootxx-com\nitaliacity-com\nhinacyan-xsrvjp\nathome-hiei-com\nurayasuconpa-com\nmiyabi-est-com\ntest-xsample35-xserver-com\naibofund-net\ncraftbeer-tokyo-info\nappruns-xsrvjp\nshingen0905-com\ntubo-test-xsrvjp\nxsample208-xsrvjp\nsuomikyoukai-xsrvjp\ntoyama-maguro-cojp\nclinocompass-com\nxinfo530-xsrvjp\neathalal-jp\nasa-kudamono-com\nzero-house-net\nxinfo764-xsrvjp\nkamijin-fanta-info\nluxury-wedding-jp\nhibiyacon-com\no-bje-net\nnap-net-jp\nkenritsu-edu-com\nivis-xsrvjp\ne-laguna-net\nkitagawa-planning-cojp\nnagochare-org\nxsample55-xsrvjp\nnijiironokoe-com\ndoorico-net\nxn--cckcdp5nyc8g2837ahhi954c-jp\nviteras-jp\ngscsrv-xsrvjp\nkaedefa-com\nbattlestar-cojp\neigonokai-jp\njj-office-net\nzqbfcx-com\nxinfo524-xsrvjp\njinbrave-com\najdm-biz\nxsample156-xsrvjp\npison-us\nt-kawai-net\nmatubarabara-xsrvjp\nsudou-h-info\nb-mode02-xsrvjp\nonishilaw-com\ntcds-biz\nximera-jp\nr-mhoot-com\nluifle-com\nhirayama-k-com\ntirell-cojp\npointfort-biz\ntukasak-xsrvjp\nmoneyymmt-com\nkoubesannomiyaconh-com\ns-plat-jp\nxsample302-xsrvjp\nyumepocky-com\nxn--28j4bvdyc334s6knv0o-net\ntrend-toybox-com\nmatsuya-bento-com\nfandp-biz\nngtselect-com\nfd-k-com\nsnowstyle-tv\naa11-me\nginga-card-xsrvjp\nyamaukamaboko-com\npc7-jp\nretorushop-xsrvjp\nhoraiya-cojp\nconsulting-firm-jp\nstepmailmagazine-net\n010system-com\ncrystal-dolphin-jp\ntakanoshinkyu-com\nnaniwaku-com\npmafamily-com\ntest-xinfo757-xserver-com\nwanokurashi-jp\ncompia-info\ntest-xinfo747-xserver-com\nkuma8088-com\nsarasarahair-net\ngundoujo-net\na-jingumae-com\nxn--ruqs6f40az48fx3pk4y-com\nms-kun-com\nx007-biz\nxsample86-xsrvjp\ns-rimo-com\nkogaoseitai-com\nhowssupport-jp\ne-katana-biz\ntest-xinfo727-xserver-com\noverflow-xsrvjp\necokoro-jp\nso-na-ta-net\nflashpool-jp\naspire-co-jp\nwaraok1-xsrvjp\ntest-xinfo717-xserver-com\nhrc-mmc-com\nxinfo555-xsrvjp\nyasuragi-seitai-com\nkanahebi-com\nnagasakishiroari-com\ncleaning-every-jp\ntest-xinfo707-xserver-com\nantiaging-jc-com\npokerface-cojp\ndrepla-kyoto-com\ngomi-cleaners-com\nmenuiun-com\nf-magic-xsrvjp\nfufu-design-jp\ntsuruya-info\njidousuisen-com\ntokkushouzai-com\ndenkisogo-jp\nyama-net-jp\nidb-aaa-cojp\nnariagari63-com\nmachidadecon-com\npe-co-com\nzenkaikyou-orjp\npage-nabe-xsrvjp\nsmile2u-info\ngakugeidaicon-com\nhair-baizu-com\nyumeya-eps-net\ntech-angle-net\nxinfo701-xsrvjp\nkasugaurara-xsrvjp\nbushuya-xsrvjp\noecmikage-jp\naozoranote-com\nxhamx-com\n0all-net\njapan-af-com\nurakata-biz\nveggie-kouso-info\ntopparty-jp\nwebdisk.liriklagu\nmamekichi-xsrvjp\ntwinow-jp\ngan-gan-xsrvjp\nchayamachi-yasuhei-com\nosaka-footballcon-com\ncrerea-info\nxsample312te-xsrvjp\nordering\niruma-shaken-com\ndaibutu-com\npikarin01-com\ny-ecotech-jp\nhimeji-shaken-com\ntopic-path-com\nmailaffiliate-info\nmassage-bed-net\nrekishiya-com\nsuma-pula-com\nberkarte-com\ngekidan-ise-com\nproject-zero-biz\ne-bibi-com\nfutabakikaku-xsrvjp\ntaiyo-shokuhin-com\nsomecco-cojp\nit-walker-com\nonna-hitoritabi-com\nsuemasa-cojp\nrimtam-com\nniji-web-net\nxn--7ck2d4a8083aybt3yv-com\nvalue-stone-com\njapan-smilist-org\nlogo-cookie-com\nwatarai-xsrvjp\nkyusyu-koiki-com\nmitsutaso-com\ntest-xinfo557-xserver-com\nykdgroup-com\npachislot777-jpncom\nxsample228-xsrvjp\nfukuya-gh-jp\ndonguri-nihongo-com\ntest-xinfo547-xserver-com\ndetailflower-com\nfromhimuka-com\nwsugugiya-xsrvjp\nbeatmania-clearlamp-com\nnegishi-nbm-com\nkanankaga-com\ntest-xinfo537-xserver-com\ndaicyu-jp\nimayuu-net\nhoukikougei-com\nhaqbi-com\naurens3-xsrvjp\njibai-biz\ntest-xinfo527-xserver-com\nhiro-emaga-net\nhiraknet-cojp\nngc-office-net\necogunma-jp\nwoodynouen-com\nnakanocon-com\ntest-xinfo517-xserver-com\np-w-name\nrepro-nikibi-info\ncgi-library-com\ndent-miracle-com\nxinfo732-xsrvjp\nxinfo346-xsrvjp\nbonn-jp\ntazaki-info\nmuro-gnomise-com\ntest-xinfo507-xserver-com\ntetsufuku-com\nht-backyard-com\nnishisawa-com\napricotpark-xsrvjp\nmanamazu-net\nlcfp-jp\nxn--n8jwkwb3d155rfvd1osyt9a-com\njpcg-cojp\nyamazumi-info\nkankyotou-jp\ngenkibitorelay-com\nosaka-con-com\nmutsumi-dc-com\nnagoya-cci-xsrvjp\nfriendsnet-biz\nnpo-yulife-com\nsakata5-xsrvjp\nt-plus-p-com\nayakakinoshita-fc-com\nsanuki-hoken-net\ntetsxserverdomain701-com\nap-g-net\nhonetsugi-kenshin-com\nsaeki-ce-xsrvjp\nj-sp-net\nshunan-rh-jp\nxsample124-xsrvjp\nxn--u9jy52g80cpwok9qjzosrpsxue7ghkv-com\nmisawasi-com\ncreva-xsrvjp\ntvkansou-info\nmages-et-cie-com\nlifeworld-cojp\nigarashi-asia\nwkmarch-jp\nmeiyo1-xsrvjp\njuen-info\ntakahide73-com\nkajikazuaki-com\nhachioji-s-o-com\ncityonline\nrobin-s-com\ngcapps-jp\nminobu-sakura-com\nusbmemory-info\nohssebs-cojp\nuniversemove-cojp\nxsvx1015036-xsrvjp\nzxdxdl-com\ngafu-biz\nhyugadsgroup-com\nsjeng\naltervistas-com\nget-wave-com\ndeco-shine-com\ntopix\ngasnukiya-com\nhalla-jp\ngiropponcon-com\nbelpon-com\nsannomiya-yasuhei-com\nkichijoji-de-con-com\nphilknot-com\naritajin-com\nterry-f-com\nplan-do-japan-com\ngreenbird-net-com\nmacco-xsrvjp\ntest-xsample222-xserver-com\nxn--u9jxfma8gra4a5989bhzh976brkn72bo46f-com\narths-net-xsrvjp\nsunnytrend-info\ntest-xinfo357-xserver-com\nseikoshokai-cojp\nfujitaippu-com\nxinfo763-xsrvjp\ntestsp1208274-com\necobaza-com\ndreamcreate-jp\nsinglemalt-club-com\ntest-xinfo347-xserver-com\nxn--ecki4eoz9849l-biz\nwww.daleel\nmacshoppe-com\ngz-burst-xsrvjp\ntestsp1208279-com\ngoku-raku-info\nyonsei-tounyu-com\nxsample54-xsrvjp\nhanabicon-com\nlucky555-xsrvjp\nxn--y8jvc027l5cav97szrms90clsb-com\nsennokyaku-com\nbiznsr-xsrvjp\nnikken-n-com\nsaidaiji-yasu-com\nmtymxykhk-com\ngaka-serizawa-sachiko-com\ntoyota-shigikai-jp\n220088-net\nkouhata-net\nfly-tabitomo-net\ntsunechan-net\nxinfo523-xsrvjp\nekinozusaadet-com\ntestsp1208301-com\nando-furniture-com\nmix-colors-com\nkamejikan-com\nxsample155-xsrvjp\nweegeni-com\nmusashino-rokuto-com\nmeitoku-xsrvjp\ncompa-yado-net\nsalliance-org\narrangebit-com\nnagasawakazami-com\nadoo-mi-cojp\ntokunori-net\nwin-technos-com\nb-nishijin-cojp\ntest-bloom-blooming-com\njoint-elements-com\nhatenumura-com\ncawacon-com\nalliumu-com\nn-plaza-xsrvjp\nseoul-inn-com\nbudoya-jp\nlauderdale-cojp\ne-worldshop-net\nb-and-c-jp\ncaggio-com\nkakeizu-s-jp\nxsample301-xsrvjp\nms-uni-xsrvjp\noffice-kisook-com\ninsideworld-biz\nhimawari-day-xsrvjp\noffice-shiratori-com\noita-kaibutu-xsrvjp\njr7yrc-net\nglow-united-xsrvjp\ntamalll-com\ndiet-trend-net\nmanat0-com\nmirahalo-xsrvjp\ncommunicationss7-info\nnewfrontier-biz\npcfureai-com\nr102-jp\nokazaki-shaken-com\norekuma-net\nshonensanso-com\nmikurencia-com\nndc-office-com\nxinfo350-xsrvjp\nxn--lckxc7c-com\nxsample69-xsrvjp\nnikko-shaken-com\nxinfo342-xsrvjp\nteis-jp\ndenpun-com\nenjoyrose-info\ndreamspaces-org\nprimegate-t-jp\nmobadis-xsrvjp\nweb240\nhm-lab-net\nnakamori-shinji-net\nyoshida-ya-org\nex-profit-biz\ncosmicray-xsrvjp\nlinkstyle33-com\nsoftwaregaming-net\nxn--t8j3b111p8cgqtb3v9a8tm35k-jp\nxsample85-xsrvjp\nmorikumado-com\nimport-lecture-com\nsru-xsrvjp\nbakery-cork-com\nhonyakukonnyaku-com\nzipaddr2-com\nurawacon-com\ntrill\nj-trader-net\narahama-org\ncrapre-net\natnnta-net\nglamoroush-com\nhoukaiji-net\nxsample92-xsrvjp\nxinfo554-xsrvjp\nueno-sr-com\ntai-gee-com\nrevive-kawagoe-net\ntemple3930-com\nnlp-jp-com\ngodiving-jp\nnandemoya-com\nweightlossgains-com\njikkoujitsugen-com\nkeiba-twitter-com\nxn--zck3adi4kpbxc0dh-net\naajd-biz\nazoo-xsrvjp\nmelkare-com\nfindsports-jp\nshonansmile-com\nanela-kilika-com\nb-official-jp\nsukuhiko-xsrvjp\nlacherie-jp\nnetdesoho-com\nikeikegolf-com\nwashokuan-sara-com\ne-iwatate-jp\nwebboo-xsrvjp\nshitakke610-xsrvjp\nnihongi-web-com\nyamazaki-js-jp\njubancon-com\nfinanza-asset-com\nsocket-cojp\nfastingmana-net\nworldoasislife-net\nxsample332-xsrvjp\nliba21-com\nmoromoro-info\nwin5pro-xsrvjp\nnikkai-info\ninfinity-create-jp\njichangwook-jp\nxsample220-xsrvjp\nyoisaito-net\nmituba-xsrvjp\ntender-kaigo-com\nnuc-xsrvjp\nkeb-inc-xsrvjp\nsorano-biz\nlittle-newton-jp\nai-serv-com\nbolly-jp\ncontents-marketing-jp\nductblade-com\nikebukurocon-com\nkumonoyasuragi-net\nnaruhodoshop-com\nudono-com\nyubiz123-com\nwillowtree-jp\nherbest-biz\nhitachinaka-shaken-com\nshatikushota-info\nashiga-body-xsrvjp\nhachimoku-com\nnigarimai-jp\ndreamconcept-gfx-com\nfwdsclub-net\ntest10-xsample30-xserver-com\nultim-jp\nfrenchstylejouy-com\nhkky09hiro-xsrvjp\nemix-cojp\nhuman-kyu-com\nxinfo561-xsrvjp\nomote-xsrvjp\nwww.ibf\nxinfo585-xsrvjp\nshiki-magokoro-jp\nr-sun24-xsrvjp\nterradonorte-xsrvjp\nsakifuji-com\nxn--new-h93bucszlkray7gqe-jp\nxsample227-xsrvjp\npay-off-bills-net\nxn--2-uc7a56k9z0ag5f2zfgq0d-jp\nono-lc-jp\nmaihonya-com\natout-jp\ntef2-net\nr-onward-com\ntest-xsample220-xserver-com\ntanopasopcs-com\ninu-recipi-com\nnorthfacle-com\nprede-com\ncfk-xsrvjp\nnanosolution-cojp\nrj-works-com\nnkginfortec-net\nnuutori777-com\njuri-jpnet\njibundesumaho-com\nzippersoft-jp\nxn--pckam4ohe2b9aya2mf9574hyfduy9g-com\nvstlink-net\nishikawa-nu-acjp\nmaeam-net\nxinfo731-xsrvjp\nripple-k-com\npublafabbrica-com\nsk66-xsrvjp\njun-okawa-com\nxn--68j4bva0f0871b88tc-com\nzimbabwecheapflights-com\nokayama-shaken-senmon-com\nacperience-biz\nrakurinza-com\ndanceahero-jp\napparel-logistics-master-com\nbeachrocket-xsrvjp\navante-act-com\nkaradafactory-com\niqb-cojp\nhr67ekh4-xsrvjp\nathleticgolf-xsrvjp\ntbc-direct-net\nfull-throttles-com\nwillmatch-xsrvjp\nopen777-xsrvjp\nkigyoujin-info\nlets-import-com\npentan-xsrvjp\nxsample123-xsrvjp\nbk-1-com\nprime97-xsrvjp\nroyalsalon-vip-com\nsundubu-xsrvjp\nkeage-jp\nmotto-tokyojp\nxn--w8jm3fycxc-com\nkampo-yamato-xsrvjp\nmizumotoryu-shinto-com\nff-spa-com\nteiyobi-net\nkurashi-kyoiku-com\nm-mindset-xsrvjp\nfp-service-no1-com\nideal-partner-org\nintibali-biz\nmr-webinar-com\nxsample120-xsrvjp\nfxbookmaker-info\nkisarazu-shaken-com\negcg-info\nad-innosence-xsrvjp\nfor-others-com\ndenshibato-net\nnpo-jambo-jp\nmilliona-sd-com\naibrain-orjp\nsoftrance-com\nyamau-xsrvjp\nsiramitsubushi-net\nsmartphonesite-info\nhanshinkaen-green-com\nyosimitu17-com\notokuna-life-com\nakirasblog-com\nhealing-spot-com\nxn--mck0a9jm25le99ae3b91q-com\ninmoss-com\nryo331-com\nalfastart-net\nsuncompany-cojp\ntukasa-saba-jp\nkouchouen-com\nalfactory-xsrvjp\nspecbrothers-com\n1-web-jp\nxn--68jza6c5o5cqhlgz994b-jp\nk-balance-com\nfly-system-biz\nmorebeauty-jp\nxinfo762-xsrvjp\njbiz-cojp\n11desune-com\nfullcollection-jp\ngarden-kinokawa-jp\nkancraft-com\nsugiuravet-com\ngan-bare-jp\nkokko-net-xsrvjp\nr-m3-jp\nnightworkwe3-com\ntoshiki-cc\nmakiko2nd-obog-com\nxn--zck3adi4kpbxc7d2131c5g2au9css5o-jp\nxn--u9j5h1btf1e9236atkap9eil-jp\nxsample53-xsrvjp\nburanara-com\nyotsuba-insatsu-com\nmailbess-com\nweb-business-freeman-review-com\nhataya-ah-com\nraku2-kenko-com\nhageno-ikumou-info\ntri-works-cojp\nyasukuteiiie-jpncom\ntwo-d-net\nyoshikawateien-jp\nyukki-lanakila-creations-com\niruma-mobi\nxinfo522-xsrvjp\na-koike-grjp\nxn--7-hju882iudfymevpi891bvkcm7t-com\ndateformc-com\nzinen-xsrvjp\nxsample154-xsrvjp\nxsample309-xsrvjp\noonishikoumuten-jp\nmerumeru5252-biz\nlions-forum-org\nhotel-yagi-cojp\nsmilehonpo-com\nsunflower-kashiwaya-com\nburapan-xsrvjp\nfloramor-net\nshachu-haku-com\nrbs-xsrvjp\njubancon-net\nn-yomiuri-com\nbattlemusic-net\njbn-xsrvjp\nxinfo706-xsrvjp\nasbmain-net\nzasso-taisaku-com\nbonbon-chouchoux-com\nsv3rd-com\nasayake-jp\nxn--u9j5h1btf1en15qnfb9z6hxg3a-jp\ngenkishop-jp\naajd-net\ncalmcalm-net\nxsample300-xsrvjp\nkikimethod-com\narigatou13-xsrvjp\nartepo-com\nmidjapan-jp\nyokota-camera-com\nnksmmc-xsrvjp\nrakuzanet-jp\nlappi-jp\nminatokobe-hanabicon-com\nacnweb-xsrvjp\nxjs-xsrvjp\nyamatsu-jpncom\nheart-oasis-xsrvjp\nhappyrich8-com\ne-gakki-com\nkumamoto-roumu-com\nja-kumamotoshi-jp\nyamadajimusyo-com\nsubarudayo-com\ntekka-merumaga-com\nxinfo51-xsrvjp\nmckokoro-com\nwww.kwp\nxn--54qq0q0en86ikgxilmjza-biz\npapaben-club-com\nhkazuf53-xsrvjp\ncrazyken-com\ntorisyou-jp\nlhotel-du-lac-com\nsuigekka-jp\nactive60-jp-com\ndaitreck-com\nshutoku-info\nxsample84-xsrvjp\ntakechi-info\nandseeyou-jp\nbjmz-jp\nts1981-xsrvjp\nmeiko-plus-academy-com\ninterior-option-com\n10english-net\nsatelliteworks-asia\nyouvision-jp\nnanosui-com\npison-net\nabiesmikuriyacake-com\nweb-business-freeman-com\nxinfo553-xsrvjp\nsf2727-xsrvjp\ngokugero-com\nj-crew-sc-info\nyakuzaishi-fc-com\nkurema-cojp\ntansan-beauty-com\nhiroshi-project-jp\nsisei-orjp\nbaikyaku-kyoto-life-jp\nxn--1cr778h-com\nbiz4apple-com\nmanten-ff-com\ndonnatokimo-info\nnext-color-xsrvjp\ngouhime-com\nyamada-dc-info\nkokorozashi7-net\nkenmana-xsrvjp\nii-yado-net\nitalian-otto-com\nkusugula-com\nryuka338-xsrvjp\nheian-suzuki-cojp\nshihou-jpnet\nxsample331-xsrvjp\nlamphouse-jp\noriginal1930-com\naiwish-xsrvjp\nkimayu-com\ngrow-up77-com\nchukeikyo-xsrvjp\ndiesel-watchshop-com\nsachis-pocket-com\nmasiki-denchi-cojp\nnice-pc-xsrvjp\nmamma-cojp\nyrnetmind-xsrvjp\nfbms444-xsrvjp\nstudio-hinemos-com\nrakurita-com\nmamegen-com\njapan-cmc-jp\nsure-oil-com\nfuneralville13-com\nxsample218-xsrvjp\nen-job-com\nasia-create-xsrvjp\nperfect-fucoidan-net\necoms-store-xsrvjp\nvisage-group-net\nkaientai-to\ndoronko-rokko-net\nhana-aprico-com\nkagami-town-xsrvjp\njpcrossroads-asp-com\nyasuhiro-tanaka-com\ntemp5\nashiya-grace-com\noutlawdesigner-org\ndiamondlight-cojp\ndropsite-xsrvjp\nvagstp01-jp\nsetdeem-com\nfraise15-com\nmeiyo-is-com\norganic-nana-net\nhairmake-polish-com\nis-style-mode-com\ngrit-inc-com\nhospitalities-cojp\nsilvers-site-org\nwebrent3-xsrvjp\nsawamemo-com\nxn--live-995g-com\ngene-potential-com\nryukou-butsudan-com\ngenko-nyuko-com\npowerfarm-info\nanemptyspace-org\nizumos-info\nenglishosaka-com\nxsample226-xsrvjp\nten10-xsrvjp\nmoneychild-com\ncampus-web-jp\nashitakaasatte-com\nmeteor7-xsrvjp\njunjimu-jp\nhold-chance-party-com\nxn--t8j9b3du706b3ud-net\nkandasr-com\nkobo-cuoluce-com\nnanba-yasuhei-com\nwsp-jp\nevina-biz\nbis-project-com\ncolors-leaf-jp\netoca-net\nseibouan-com\ndaikuru-com\nreopardi-cojp\ngargantia-jp\nonsen1126-net\nor-nitta-com\nsuuudesign-xsrvjp\nnaritareal-com\nxinfo730-xsrvjp\nxinfo344-xsrvjp\nwealthhappy-info\nthroughsky-xsrvjp\nyukitake-jp\nrebcreation-com\ntsuruoka-jc-info\ntamate-jp\naoteapacific-xsrvjp\ntestdomainx324-com\ntakemitsu33-com\nyoshihiko01-com\ninaka-pipe-xsrvjp\nfreedom-benefit-com\nkuroiso-bagel-com\ninging-cojp\ntestdomainx329-com\nkukankaihatsukobo-com\nhara-ringo-net\ninugumi-xsrvjp\nyota8000-com\njtp-corporation-com\nbigone-cojp\ntestdomainx335-com\nla-chouette-fuji-com\nxsample122-xsrvjp\nfujimurabl-com\nbrandbay2012-xsrvjp\nkantan-hp-net\nlittleany-com\npainter\nblogyanwei-com\nhappystylelife-com\nhand7-jp\nfretta-jp\ntest2-xinfo744-xserver-com\nkojima-mf-xsrvjp\noriginalbook-net\nnitii-info\ncamuro-grjp\nhp-tuneup-com\nthreey-net\n6notes-jp\nxn--facebook-9s4goej6w4khkpe-com\nyonago-giken-cojp\nxn--eck3a2bze7g088r1tnu2vn7l46v-com\n2oku-jp\nhunabashi-yabusaki-syaken-com\nendingnote-music-com\na7works-com\nbaisersvoles-net\nstyle-lab-biz\nunited7-xsrvjp\ncraft-mai-jp\ntomioka-suga-shaken-com\nsagi-yattukeyou-com\nnanomi-xsrvjp\nyouvisiondenotest-com\nloran1990-net\nmaru777-xsrvjp\ncan-cara-com\nduzele-com\nnotokids-net\nyuyu-rlx-xsrvjp\nstyliv-com\nopenerp-asia-net\nvisual-exchange-com\ngokugero-xsrvjp\njp789-xsrvjp\nsoola-jp\ncloud-www1-xsrvjp\nelocalgov-xsrvjp\ndenkikai-com\ni-m3-jp\nyosibo54-xsrvjp\nplussoft-cojp\nkokona922-com\nblackyuushi-com\nits-ec-com\nxsample52-xsrvjp\nxn--qckr4fj9ii2a7e-jp\napi-master-com\nchatoran-com\njoy-circle-com\nmurakoh-jp\njiyubito7-xsrvjp\nkassist-xsrvjp\nyui-aragaki-net\neapuranntu-xsrvjp\nxinfo521-xsrvjp\ndreamlife-invitation-biz\ny-guard-com\nyorozuya-system-com\nxsample153-xsrvjp\ndelmot-tea-com\nbizzone-xsrvjp\nnanikowa-com\ncomo-nejp\npla-neta-cojp\nasp-kawahara0202-biz\nsezaki-cho-com\nsakuzei-com\nteccsearch-xsrvjp\nkyoto-shaken-com\nmebel-antique-com\nrubowa-jp\nsidebrains-com\nkaruizawa-silk-com\npazzot-net\ncollabox-xsrvjp\nkeisei-cs-com\nhoudinisportswear-jp\nacmeloo-net\nadmi-biz\ncelebrity-rich-biz\nstarhill-cojp\nodakesyokuhin-cojp\njun25-biz\nheartful-travel-com\nkk-to-bu-cojp\ntailor-yoshidaya-jp\nyamazakiminoru-biz\nhoken-consul-jp\nitousanfujinka-com\ncarve-jp\nnusoft-jp\nuenodecon-com\nkawagoecc-com\nsasakitchen-biz\nfurubayashi-eye-com\nkamo-jinjya-orjp\nh5910lv8000-com\nyurai\ntanagokoro-kyoto-com\ncrerea-net\notonworks-com\nstudio-carrot-com\nus-vocal-info\nmanzashop-net\nslightfeverboy-com\nkou-mei-ok-com\nyukimanta0808-com\notonohachan-com\ntnc-ep-cojp\nkenou-info\nmellow-touch-com\napa-inc-cojp\nsyouhachi-com\nieda-dc-jp\nxsample83-xsrvjp\nyamagatagift-info\ncurrencytradingexpert-org\ntestxdomain305-com\n787navi-com\nrpmoutsourcing-com\nwatchrepair110-com\nhabu-kouji-com\ninfotrek-xsrvjp\nkatsuyama-g-jp\nadropmeet-com\nrep-power-jp\ntestxdomain311-com\nharidekenkou-com\nxinfo552-xsrvjp\nmurakami-kagaku-jp\nnafooe-com\ngotouchi-japan-com\naiwa-f-nejp\nneco-store-com\nn-insurance-cojp\nsanom-net\nfpp-jpnet\ntestxdomain316-com\ntsubomi203-xsrvjp\nglobal-smi-com\nogasa-biz\nism-blue-com\nusadrumshop-com\nmahoo-net\ngrocen-shop-com\nnomiiko-com\nnakayama-kids-com\nwildcard-jp-com\nuruoi-water-com\nmuex-net\nht-backyard-xsrvjp\nyumikp-xsrvjp\nw-life-jp\ntest-xinfo745-xserver-com\nxn--kckky1j2cwa8f1cb-net\nkotomine-event-info\ne2-square-cojp\ntruck-asahi-com\njuggler-jpncom\nmusashinogroup-com\ntototoclub-com\ntest-xinfo735-xserver-com\nxsample329-xsrvjp\nro-haircare-jp\nxn--u9j5h1btf1eo45u111ac9hf95c-com\noo0n-net\nacr-net-xsrvjp\ntest-xinfo725-xserver-com\nyuyasawada-xsrvjp\nclubcafe-gr2-jp\njream-jp\ntest-xinfo715-xserver-com\nmaaaks\nkami-to-nuno-com\nfood07-com\nnormanet-cojp\nolive5-xsrvjp\nodaiba-con-com\ntest-xinfo705-xserver-com\nxsample151-xsrvjp\nart-craft33-com\nvolleyball-coach-info\nliv-design-net\nhimeji-jv-com\nlog-research-com\nshop-pro-jpnet\nhkwspace-xsrvjp\nhikaru114-com\nshonanbank-xsrvjp\nsanda-kokuzo-com\nsalmon007-com\nroumu-sodan-com\n820-co\nmatsuda-siko-xsrvjp\nhorie-yasuhei-com\nchristianpeau-com\nclarity-life-jp\ninter-act-jp\ntsujiguchi-jp\ntmk-xsrvjp\nyujinetwork-info\ntestkimura34php4-com\nsiestarea-com\nrakanka-com\nnipponhomeopathy-com\ntokaibun-com\nhunabashi-coating-com\nvellsheena-jp\nteitoukentouki-com\nlocalfoundation-jp\nxinfo583-xsrvjp\nimagebank-nejp\nxsample225-xsrvjp\ndaisycreate-com\nristoranteilcanto-com\nhitachi-shaken-com\nadd02tv-xsrvjp\nmakinos-biz\nbs-mebius-xsrvjp\nietateru-com\nstakao-net\nxn--t8j0cgq9xucf2ooiyhodz566d8m0a-com\nneko-free-com\ngofun-xsrvjp\nxinfo121a-xsrvjp\ntakuya-yoshimura-jp\ncheck-the-rhyme-com\nmegamatu-net\nlibgarden-com\nhomare001-com\nkjmail-biz\nsell-car-info\nxn--3kqvs447ab16b-net\ngaobu-xsrvjp\ncipiu-com\ntest-xinfo585-xserver-com\nwapos\nkitashinchicon-com\nxinfo728-xsrvjp\nxinfo343-xsrvjp\nstyle-lab-net\nfbms1-xsrvjp\nhigotokou-com\nnouen-chokuhan-com\nn-t-lab-com\nfatal-encount-com\nhanacupid-plus-net\nmyt-p-com\nmyanmar-partners-com\nmed-takaoka-xsrvjp\ntakayuki-1973-com\noffshoring-digest-com\ne-kagayaki-jp\nii-kao-m-com\nishikaitoriya-com\nkzyhsgw-com\ntest-xinfo555-xserver-com\njinbochou-com\nhands-on-it-com\neyomo-xsrvjp\ntrashcan-xsrvjp\ndesign-omakase-com\ntest-xinfo545-xserver-com\niwamoto-clinic-jp\nxinfo737-xsrvjp\nxinfo352-xsrvjp\nnew.new\njunwa-jp\naiaokayama-orjp\ng-orion-com\nkuwabara-dental-com\nwawer\nspinell-biz\ntest-xinfo535-xserver-com\npicocraft-xsrvjp\nwakuwakuart-com\nxsample121-xsrvjp\nchofu-daikokuya-com\nhypr-info\nstory-kobori-com\ntest-xinfo525-xserver-com\nctrans-org\ntest-xinfo515-xserver-com\ntest-xinfo505-xserver-com\nfishing-shopping-com\nstyle-lab-org\ny-jig-com\nm-shinkyuin-com\nsipweb-xsrvjp\nesdirect-shop-com\nwood-roots-com\nh-yoshikawa-com\nsowa-com-com\nhotel-tenjinplace-com\nenjoylifeafi-com\nbgm21-com\nkazuart-cojp\ntest-xsample330-xserver-com\nweb-main-biz\njeffnipplesworld-com\nkakinoshizuku-com\nenduromasa-com\nmitumorisien-com\nrightcure-net\nevis-xsrvjp\ngatturikun-com\nwealthhappy13-info\nhomus-cojp\ngontakun-xsrvjp\nmomo00-com\nconnect-k-com\ninexpenshop-xsrvjp\nxn--eckm3b6d2a9b3gua9f2d2431c1m6a-com\neverythingdoeswell-com\ntest-xsample309-xserver-com\nkanewa-m-com\nmc-ken-cojp\nnail-frosty-net\nxsample333-xsrvjp\nk-go-biz\nchuo-f-com\ntest-xsample300-xserver-com\neaupure-org\ncalibexpress-com\nrsapo-com\nsxscontrol-com\nvd23-xsrvjp\ntakasaki-nagai-shaken-com\ngdchoice-jp\nows-npo-org\nla-maison-courtine-com\ndr-fukuoka-net\npharmacistnavi-net\nflets-jp-com\nshdanavi-com\nkurofunemarketing-com\nslashowy-com\nxn--fdkc8h2az097bv1wbh4e-jp\nbrens-jp\nnichiei-cojp\ntest-aflat-com\nrlize-org\njouhousyouzaimassatu-com\nyukabon-xsrvjp\ntrendwadai-com\nbinarygift-biz\nsiraisi-cojp\nseodelink-com\nsmart-housing-biz\nxinfo519-xsrvjp\nsansak-jp\ngenzankai-xsrvjp\nhomepage-ya-info\ntheyarehogtied-com\nfuturepirate-asia\ntaimai77777-com\nwoody-life-cojp\nrokko-dog-net\ntajimagyu-sushi-com\ntest-xinfo355-xserver-com\nsyakosyoumei-hiroshima-com\navantijapan-com\nsamuraiclick-japan-com\nsaeki-jibika-com\nfelicejapan-net\ntest-xinfo345-xserver-com\ntomenokome-com\ne-pro5-com\nebook-jpnet\nskjioudhcuy656dius-com\njey-string-jp\nkazami-com\nglobal-trendmkt-com\nbusiness-strategy-meeting-com\nkobayashi-og-net\ndesign-the-way-com\nl-com-xsrvjp\nrjbb-xsrvjp\nyahabus-com\ne-maku-com\nxn--yckvb0d4245c-jp\nfrigus-jp\nkireinadiet-com\nxn--i0tq7meooqf-com\ntestxdomain307-com\nginga-card-com\nizu-xsrvjp\nform-com\n4c-session-com\nhaisyanokunitora-com\nkome-shibahara-com\nkyorindo-com\nktscope-com\ninthegarage-jp\nmilumoda-xsrvjp\nkumomakurax8-info\ndowkakoh-cojp\nyamatonadeshiko-biz\nxn--39ja4cb4nqb6d4fu546bkkucpl7d-jp\noita-cando-com\ndaiki-suisan-com\nunfixedsystem-com\nxsample82-xsrvjp\nkataoka-kaikei-orjp\nhok-me\nairakirishima-com\npanopano-jp\njorjia-comtw\ncheerful-xsrvjp\ntaka02dive-xsrvjp\ngoe001up-jp\ntestxserverdomain12030159-com\nm-benz-cojp\ntaxiway-jp\nxinfo551-xsrvjp\nkikusui-sushi-com\nbreak-through-net-com\nlow-cost-jp\nsuemasa-xsrvjp\nsilverrush-jp\nexcy-biz\nxn--u9j0goar6iyfrb7809ddyvakw0e2vh-biz\nmiyake-office-com\nfreeken01-com\ndance-studio-itsuki-net\ntetuzuki-dairi-com\nunpatta-com\n2chomecon-com\na-cnet-cojp\nhirosaki-redapple-com\nkokai-jp\nxsample129-xsrvjp\nsendai-proxy-service-com\nmorii-tatami-jp\njewelrydisk-com\nakabanedecon-com\nkurashikihanpu-com\nparchive-xsrvjp\nhello358charlie-info\nsm-solutions-biz\nanac-jp\nxsample328-xsrvjp\nosakapeer2010-com\nsurg2-twmu-jp\ncubik-com-net\nxn--nckuad2au4azb6dvd8fna2594hb0sc-biz\nkaradano-com\nheart-full-com\npasosuku-com\naiuto-jp\nokazakitokki-cojp\nhonmahajiku-com\nfphokensoudan-com\navatarhp-com\noki-xsrvjp\nu-amon-com\nyamatocool-com\nbabyumiwake-com\nsan-ei-info\nasupro-jp\nmavericks09-com\nrakuyasu-e-net\niizo-info\ntamalink-biz\nstylegate-jp\necollab-cojp\namjinternational-net\nakazukin-xsrvjp\nfan-gate-info\nslot-1game-xsrvjp\nogino-dental-com\nzeal-xsrvjp\nnailstudioasa-com\numedaconh-com\nprime-more-com\nt-tcn-jp\npojiiki-com\nryukyu-goten-com\nyukatajapan-com\ne-janai-com\naicle-bu-com\nisiwatari-com\nv-fort-com\ntui-cojp\nikejiridecon-com\ntoeishinyaku-com\ntanabereform-xsrvjp\nautoconfig.booking\nmorinonaka-net\nenkara-net\nwatanabe-gate-biz\nlesthetic-net\ncomm-w-com\nyurumean-com\nyumyin-com\ntrendmaturi24-net\nsync15-xsrvjp\nliberal-woman-com\nniji-nejp\nsatou666-com\ntcplus-cojp\nmatsu-nomi-com\nnaganocon-com\nshoeip-cojp\nminatoku-kaigoren-com\nwakamatu-biz\nsunbeltpartners-cojp\nneo-create-com\nxinfo582-xsrvjp\nwebdisk.booking\nniiza-syaken-com\nxsample224-xsrvjp\nhiramatsukenzai-com\nharadajun-info\n1100club-jp\nairial0525-xsrvjp\nayumikuro-xsrvjp\njunkbuyer-mac-com\nkyuudann-com\nwebstyle-cojp\nkaitonaka-xsrvjp\nsin-kaisha-jp\nsgsg-jp\ninvest2001-com\nmeichashop-com\nkintenshi-com\nhumanlink-xsrvjp\nvvuvvu-info\nsikumi-jiyuu-com\nsmount-com\nbahamas-freeport-info\nxinfo727-xsrvjp\ncote-to-com\nthesoundofthousands-com\nposy-xsrvjp\nis-token-com\ntatuo-xsrvjp\nyumizclub-com\nmarungai-info\nworldrings-hana-net\nddbistro-com\nkijima-lab-com\nking-soukutu-com\nohmiya-com\ng3company-com\nkitesky-net\nshimizu-motorcycle-com\nkumafukucen-com\njapantrading-cc\nwlb-xsrvjp\nbambisystem-xsrvjp\nvaomusic-com\nbailojapan-com\nigam-info\nmotsuya-olc-com\ncatseye-jpncom\nxn--eckm3b6d2a9b3gua9f2d6658ehctafoz-jp\niine-kawanishi-com\nshonai-ya-com\nkozantyaya-com\nhr67ekh1-xsrvjp\ndreamcreate8-xsrvjp\nautodiscover.booking\nkaigyoushien-com\nroppongi-con-com\nacqwords-com\nhoshino-me\nxsample119-xsrvjp\ntownace-pro-com\narrowcom-net\navantijapan-net\ntrend7shin-com\nyoshiihoikuen-com\nyasooo-net\nheart-furufuru-com\ngoodreform-navi-com\nanimesoku-com\ntc-sanwa-cojp\nxinfo148a-xsrvjp\nhakodate-shi-com\nhss-web-jp\nseijo-dosokai-info\nbass-gatsun-com\npyonchi-info\niloveharajuku-com\nwajoy-xsrvjp\navon-shop-jp\njyuzen-dental-com\ngrand-plan-com\nsakabeclinic-com\nxn--line-yn4ckbymxil606bodya-jp\nfujihomes-com\nehhen-com\nshoda-pack-cojp\nmo4c-com\nanvar\nticketlife-jp\nmizuha-jp\nnakahara-agency-com\nyarukiswitch-biz\nsurge-hair-com\npaint-kumamoto-com\nbi-frecce-com\nchuuka-com\nxinfo124a-xsrvjp\nenpelancer-com\nkindai-mansion-com\njwvaughan-com\nl-guldy-xsrvjp\nmeiyo-biz\nmaod-jp\nilt2-biz\nxinfo586-xsrvjp\nyaseru-asia\nasa-eshop-com\nryugakuseiwork-com\nxinfo758-xsrvjp\nla-confy-com\ncross-share-com\nimagiq-jp\nosaka-denkikouji-com\nsugar-lake-com\nyuri-pharma-xsrvjp\njiyugaokacon-com\nmikihifuka-jp\ntme-i-jp\nieys2-xsrvjp\nentanna-com\nhirotakanet-com\ndo-inaka-com\nkarada-koubou-com\nturuta-jp\nxsample50-xsrvjp\nhayakawa1456-com\nkazu-hirono-xsrvjp\ntsunageru-net\nalmetyevsk\nchuen-navi-xsrvjp\nxinfo549-xsrvjp\nsabo-kanon-jp\nrikuafijyutu-com\nxn--pride-ym4dqj0d4g-com\nxinfo518-xsrvjp\ntest-xinfo716-xserver-com\nilt2-com\ntaku222-com\nhonatsugi-con-com\nxn--u9jxhkb1qu36p2lc-com\nijinjin-xsrvjp\npethelper-tumugi-com\nturigu-ten-com\ng-zipangu-jp\n8010-cojp\nminamisenba-yasu-com\ntheisao-xsrvjp\nmachikado-xsrvjp\nmagropan-xsrvjp\nxn--eck7ake2fza4b-jpnet\nshimatomo-com\nkokkoya-net\nmikasasports-asia\nnon0804-xsrvjp\nrirema-xsrvjp\namc-seiwakai-jp\nhs-dhr-com\n4415-jp\nnamikawa-gear-jp\naccessall-xsrvjp\ntest-xinfo541-xserver-com\nluxury-music-jp\nmembering-jp\nakeru-an-com\nparco-jiyugaoka-cojp\nyellowstone-jp\nxn--zck9awe6d5565ccnra-biz\nsapporo-recycleichiba-com\neikoudo-com\nkondodenki-jp\nzest-camera-02-com\nxn--cckueqa6319czn9a-com\niris-eyelash-com\nuttigogogo-com\ntestament-xsrvjp\nkobadesigns-xsrvjp\nsawata-cojp\ncyber-i01-xsrvjp\nterasaka-xsrvjp\ngh-yanagi-com\nknowhowrecipe-com\nkota-papa-com\nfkuykoukdoa-xsrvjp\nmiryu-ya-com\nvenus-space-com\ngyoseishoshi-shiose-com\nhutako-com\npiano-renshu-com\ne-okinet-com\n9pt-jp\nxn--u8j7b0f9doa5d4g3281ak25ctkc-com\nmystery-room-org\ntest-xinfo534-xserver-com\nfbms33-xsrvjp\njenrobgroup-com\nnetter1-xsrvjp\nsen-ju-com\noffice-sam-com\nsho01-com\nsaiseikai-gotsu-jp\nokakaikei-cojp\nnankankyo-net\nmae-ca-com\nevahs-eternal-com\neigoforth-biz\n7gates-net\nshiraiwamitsugu-com\nkazunobu7878-com\nsylphide-m-xsrvjp\ntuapse\nlagunadental-jp\nmilky-holmes-ofc-com\ntrain55-com\nxsample81-xsrvjp\ntenryosui-com\nfxchips-com\naroma-na-net\ndimitrovgrad\ntom-sawyer-net\nrihabirikan-net\nearth-t-jp\nestax-cojp\ntanaka-group-cojp\nnobukisaito-com\nnabetabebe-com\nhk-teahouse-com\n111e-jp\nhomestyle-bz\nofficetom-xsrvjp\nxinfo550-xsrvjp\nyasumochi-law-net\nmitsutomoltd-com\nxn--zck9awe6d692p972a905d-jp\neccome-jp\nsaitsu-com\ndmd-nejp\nsweet-beauty-jp\nyao-ec-cojp\ntiffany-ogoto-com\nisiscoltd-xsrvjp\nxn--tor55ycb159b1ndz7ifa3356d-biz\ngiulietta1886-com\nsawadayuya-com\nbroslink-cojp\nkayaxiv-net\nfoxhdy-xsrvjp\ntenogeka-com\nw-clutch-cojp\nnail-aries-com\namochi-jp\nkpro93-com\nxn--jdka9gb-net\ndorotonyusekken-info\nfx-crosses-com\ndrbarkus-com\nh-bee-com\nsaika-sports-com\nheart-cushion-com\nsale-xsrvjp\ngucci0122-com\ntokyo-roujin-jp\numaoh-com\ndearmine-net\ncatservant-xsrvjp\ntourgorilla-biz\nhikari-flets-com\naliatokyo-com\nicreative-jp\nkotonoha32-com\nkobeee-com\nmetaltech-8-cojp\nyoshikk-com\nhokuken-xsrvjp\nwebsite83-com\ntvaom-com\nuta1-xsrvjp\nt-intl-cojp\npaintory-com\nhoken-sukkiri-com\nmacross-fanclub-com\nxn--y8j2eb0209aooq-biz\npopcul-net\nmirei-uranai-info\ntukuba-con-com\nsoujukai-net\ni-leaf-hanahata-jp\nkkinjo-com\neco-up2012-com\nwaocon-com\nhandcreation-net\ntoyosudecon-com\necconnexion-xsrvjp\npublishable-biz\nkibino-com\nxinfo581-xsrvjp\nverylen-com\nkyodokun-net\nogataengei-xsrvjp\nrsw01-com\nxsample223-xsrvjp\npleasuregene-xsrvjp\nyagurazushi-com\nc21-ogswr-com\nla-matie-com\nnoa-moving-com\ndenden0375-xsrvjp\ndelsole-bios-com\nbeauty-art-ryo-com\nhaisyanonishikawa-com\nkagayashio-xsrvjp\nwebkentop-com\nshihatsudo-xsrvjp\nki2-xsrvjp\n3dsatsuei-com\nterry-f-p-com\npman-bros-com\nk-ravi-com\nbgtv-xsrvjp\ntatamidani-com\nxsample327-xsrvjp\nmanabu53-com\nbloomspace-kannai-jp\nbalakovo\ncenter53-jp\nuchiwa-ooyabu-com\nkareisyuu-biz\nyou-tak-com\nestage-biz\nogawa-shika-orjp\nxinfo726-xsrvjp\nxinfo341-xsrvjp\nkagawacoop-com\ndokuzimesen-com\nbo-doya-com\nu-archi-cojp\ntabi-con-jp\nworldholdings-jp\ntakayuki-ll-xsrvjp\ndevil8-com\nrisokakaku-com\nmayumbb-com\nakane-e-com\nsefuri-shaken-com\nfucker\nsihousyosi-houjyou-jp\nsyougatuapp-com\nnogami-wedding-jp\nsyosendo-xsrvjp\nkotobayo-tv\nqjin55-com\nsapuri-kenkou-com\nkaigahanbai-com\nxsample118-xsrvjp\nriddlepuzzle-xsrvjp\nmie-sports-orjp\nkanto-clinic-com\nziggy007-net\ngoko-h-com\nhidamari-b-jp\nking13-xsrvjp\ns-kensha-com\ncloverhomes-cojp\nxn--zck3adi4kpbxc7d-biz\nsubete1-com\nwwwxyz-jp\ngaiaokane-xsrvjp\ntakaragi-iin-xsrvjp\nwing7878-com\nhomard-festa-info\nohakanomadoguchi-com\nxn--duz45k-com\narchm-com\nshibano222-biz\nvolzhsky\nyokohama21-com\nnakasuhaken-com\ndddmmm-info\nrelcc-com\nile-jpncom\npaparazzi-tokudane-com\nwubarosiermaschine-com\nstencilhair-com\nshihiro-info\ng-kscom-xsrvjp\nzare-goto-com\nkashiwadecon-com\nevisevis-info\n0906daiki-com\ne-mediasystem-biz\npier-stone-com\nyusukeaoki-biz\nxn--u9j5h1btf1e330r917aok7b5id-com\nshvideo-biz\nboxystyle-com\nminasayo3734-xsrvjp\nclic-clac-jp\njushin-biz\nkelbox-com\ncer-n-net\nxn--ujqp84atlah52f-com\nkoto-note-com\ndenritsu-cojp\ncookiec-com\nbike-ridestar-com\neym-xsrvjp\nfilingcabinetscheap-org\nyual-jp\naquastudy-jp\no-bs-cojp\nhotelgranbois-com\ngong-yoo-jp\naoi-nakamura-net\nxn--news-4c4cuuha3z9b3580f16c-jp\nround-dev-org\nxinfo757-xsrvjp\ntest-xsample318-xserver-com\nhappy3-org\nsansak2-xsrvjp\ntenryosui-net\npallu-jp\nebisuyasan-jp\nnext100-mobi\nheadway-xsrvjp\nall381-com\nhumanlink-r-com\nerika-jpnet\nehimeokayama-com\nbastiani\nal-medic-com\nk-plus-nail-net\negaonojikan-com\ntest-xsample315-xserver-com\nsv0-xsrvjp\nfd02-info\npalmgate-xsrvjp\nyamashow-reform-com\nfindanect-com\ntechnopolice-jp\nkabu-michishirube-com\nyamato-ac-com\nnobuyukieto-com\nkagi-qq-jp\nadsl3\nxinfo517-xsrvjp\nmid-nation-com\ncarole\nsunnyshmail-net\nshigacon-net\nxsample149-xsrvjp\nyuyasawada1-com\nal5586-xsrvjp\nkotosangenkyousitu-com\nporphyria-jp\nenter-word-com\ntokyo-sundubu-net\nfacebook-page-jpncom\nxn--zck3adi4kpbxc7d3858d8zc-com\njstaf-jp\ncosa-xsrvjp\nhimito-com\nseirios-net\nwih-viewer-com\nteryori-jp\njen-xsrvjp\nbid-xsrvjp\ndream-east-info\ntachikawacon-com\nhtn-cc\ncrazykenband-com\nbltc-cojp\nlight01-xsrvjp\ngo33l-com\nhagicyosu-dou-com\n10pipstrader-com\nmaristhand-com\npsychotherapy-jp\nsaykei-com\nsvcdeaf-org\ncressence-salon-com\nnt-mc-com\ndoredoko-xsrvjp\nxn--k9j703lrer-com\nyuhiglass-com\nnakayamaderavet-com\nxinfo127a-xsrvjp\ncl-hearts-com\nyasooo-xsrvjp\nonishia-xsrvjp\nleadea-xsrvjp\nbrixc-com\ntest-xsample31-xserver-com\npit-design-com\nyellow1003-com\nnets-han-com\nfit-leading-cojp\nabccraft-xsrvjp\nmaltholic-com\nmakotonohsan-com\npremier-ballet-com\n1streform-jp\nxn--gdkxar8d4dc-com\nxn--n9j8gnb1bza2am-jp\nishigaki-wedding-jp\ntoryburchoutletv-com\ncepavinis-com\nwoo-yan-net\nhpservice-jp\njs2013-net\nkoara-kids-com\npiececlub-jp\nrisshun-info\nmahalo-web-com\nxsample80-xsrvjp\njapinglish-com\nbellbell-info\nhana-salon-jp\nxinfo103a-xsrvjp\nsuisokan-org\nsansyu-ya-cojp\ntestdomainx322-com\nstudio-angel-net\nba-chi01-com\nxn--zck4ba9kwb1956ag23ad2za-com\nrecolon46-biz\nnishiazabu-con-com\ntokyofanhaus-com\nwattam01-com\nblobiz-xsrvjp\nxinfo548-xsrvjp\npclub-xsrvjp\nintention-xsrvjp\ntaikyoku-en-com\nbeastpets-com\nelement-bz\nokane-antena-com\ntbo38-com\ndaikichido-net\nastone-info\nryugu007-xsrvjp\nsun-face-jp\nmusou-gakuen-com\nphotopierre-com\nsrc123-xsrvjp\nle-kind-com\ns-motoclub-com\nfis-xsrvjp\nstudiomym-com\ns-treat-com\nguiters-biz\npluspeace-net\ndip-dev-net\njhigh-net\nkawaiolaokona-jp\nle-bretagne-com\nangeproduction-net\nfieldofpine-com\nkurumecb-com\necollab-biz\nbasskiti-com\nxsample326-xsrvjp\nnihonweed-cojp\niphone-iresh-com\n3maison-cojp\nhanamine-com\notanjoubi-cake-com\ntij-babysitter-com\n44ok-biz\nxn--9ckkn5226aut1aee3bgbf6ma-jp\nbrandoffkaitori-com\nhro777-com\nhiyoko-f-xsrvjp\nhonmahajiku-xsrvjp\nmikamiyui-com\neikaeika-xsrvjp\nthinkingbirds-jp\nincenx-com\ntoriii-xsrvjp\nkyouritu-f-com\nmms12-jp\niwakuni-ymca-xsrvjp\ntest-xinfo763-xserver-com\nhthththt-com\nyoshino-koumuten-com\nngsk-dha-org\nkumamoto-hp-com\niscle-com\n5rion-jp\nsinsaibashi-com\neasypachi-com\nkampo-yamato-jp\ntest-xinfo743-xserver-com\nimokoi-com\n0257762813-com\nentrust-xsrvjp\namu-web-xsrvjp\nwww.spirit\npetone1-net\nasmik-xsrvjp\ntest-xinfo733-xserver-com\natsuko-coubo-com\nkul-site-com\ntest-xinfo723-xserver-com\ntestsp1208270-com\nhot100fm-com\nxinfo204-xsrvjp\nrehman2039-com\ntest-xinfo713-xserver-com\nl-create-com\nxsample222-xsrvjp\nboribonoeuf-net\ntestsp1208275-com\ntest-xinfo703-xserver-com\nnixon-watchshop-com\nebisucon-com\nxn--ecki4eoz2903cuuwhdt-biz\nmocjp-com\nesthe-core-com\ngori3355-com\nhamakazetarou-com\naigi-net-com\nitp-xsrvjp\nyuminn-xsrvjp\nyuki-inoue-com\nsoylatte-jp\nkorudeo777-com\ntereza-cojp\ntakken-mobi\nmd123-net\nshinkikakutoku-com\nmeiyo-jp\nxinfo725-xsrvjp\nnoni-happy-xsrvjp\ncanal-interior-com\nskeppshult-jp\nnano0321-com\nyuzumo-com\ns-a-jinzai-net\nassist21-orjp\nmeichu-cojp\ntaaf-shinjuku-org\nalphatau-net\nxn--88j6ea1a4250bdrdi9am84bkx5cbp2b8xe-asia\nluciole-classe-com\ngigeinc-com\nkeeno-asia\nuranai2012-biz\ngijiroku-center-cojp\ngreen-2-com\nshimomatsu-com\nhomus1-xsrvjp\nsaiki-nejp\ndik-xsrvjp\nvd23-com\nkaguyahime-f-com\nrichquest-org\nfootballshop-legends-com\nsweet-loveletter-com\nshinjuku-conpa-com\ntoramaru02-xsrvjp\nall-cosme-jp\nmonodukurijapan-com\nxn--cckwaf4jng-com\ner-nerima-com\nfit-hip-com\nu-bike-com\nipnetfarm-com\nprojectexceller-com\nmemory-travel-com\none-mode-jp\nterrapin21-com\nxsample117-xsrvjp\nkigyo-kokuchi-com\nbaketu-cojp\njunko21-com\n7-cs-blog-net\nvakcom-info\nbadgeblackbox-com\ntest-xinfo593-xserver-com\ndaaue-com\neeyorechan-info\ntemplate-party-com\nauc-aifa-com\n100seo-jp\nsentei-kumamoto-com\nyukuru-honten-com\nneoapx2121-xsrvjp\nyukyu-h-com\ntanizawa01-xsrvjp\ntest-xinfo563-xserver-com\nnakatsurutomoko-com\nnakatomo-step-com\neyehorn-net\nnovelsounds-jp\ntest-xinfo553-xserver-com\npuru2-org\nstudio-th-com\ninfinity88-jp\nshoga3-jp\nseoky-xsrvjp\ntest-xinfo543-xserver-com\nkarate-jp-com\nclub-s2-com\neden-japan-jp\nxn--u9jz52g24i4sa42enx9aeir8k1b-net\nm0523t-xsrvjp\nuud-info\ntest-xinfo533-xserver-com\nkoreaichiba-xsrvjp\ndiginfo-xsrvjp\nfacebookapp-xsrvjp\nipaa-nagoya-com\ne-enak-com\nxsample140-xsrvjp\ntheory-ken-xsrvjp\nepa-c-com\ntest-xinfo523-xserver-com\nparama-xsrvjp\nhoujo-cojp\nxinfo756-xsrvjp\nsimple-smile-net\ntest-xinfo513-xserver-com\nmc-sss-com\nslip-case-com\nfl432-com\ntakeuchi-hoken-com\nhiro-guitars-com\nb0\nodairashoukai-jp\ntest-xinfo503-xserver-com\nc-sharing-xsrvjp\n81smile-com\nyod-on-xsrvjp\nxn--pcka3d5a7ly86z14i-biz\nwelcometo-nejp\nnagase-syaken-hikawa-com\nmotionworks-jp\nst-tajima-biz\ntakasakidecon-com\nnightfactory-info\ndental-no1-com\nkaoku-biz\nxsvx1011020-xsrvjp\nkickboxing-kashiwa-com\ntest-xsample327-xserver-com\nharimitsu-cojp\natelier-mamemaki-com\nherbteapresents-com\nmost-adult-xsrvjp\nonara-kusai-com\npachiloca-net\nxinfo516-xsrvjp\ntest-xsample317-xserver-com\nampchan-com\n5-es-com\nsg-transmgr-xsrvjp\ntry-and-buy-net\nxsample148-xsrvjp\nre-sound-jp\ntest-xsample307-xserver-com\nkousikai-net\nesa-sawamura-com\nseikoukai-zushi-orjp\nsuper-compa-net\nakashi-syaken-com\npsclub-jp\nfishmind-jp\nbantyou-org\ng-s-c-cojp\ndesignbatake-jp\n1chou-jp\nteppanteppan-com\nair-victory-jp\nsogacha-com\nace13-info\nmatusitakoumutenn-com\nhatachi-xsrvjp\neishin-ac\nnaluto-net\nintercross-info\nmediaserver1\nyumemarche-com\n1919okinawa-com\nf-maruka-com\nisshisha-com\nyamatoroman-biz\nsmtown-passport-com\nnkk2-xsrvjp\nhukugyou-shoukai-com\n045310-com\nyoppy009-xsrvjp\nimplant\njbja-jp\nrouxdistaff-cojp\nhoaloha-ohanaband-com\npcsidejob-com\nxn--ddkf1h-com\nkoikurozu-com\nblanchett-hair-com\nhondaisuki-com\nwest-m-jp\n6pmn-com\nkoiz-me\nnoh-oshima-com\ntest-xinfo344-xserver-com\nxn--u9j5h1btfxee0254c9vzb-com\ntest-xinfo353-xserver-com\nmurakon-net\nfour-friend-com\nxn--ecki4eoz6990n-net\ndoutonboricon-com\napp48-jp-com\ntest-xinfo343-xserver-com\ndynamiteking-org\nxn--u9j1b755lhwlmhm0pjeia182v-com\npointmaster-biz\nbekotei-jp\nb-trust-systems-com\ntest-xinfo341-xserver-com\nmarkc1\nxsample78-xsrvjp\nkagami-tm-jp\nnanbacon-com\nla3-beam-com\nfitsdiet-com\naugolfjp-llp-com\nsm-link-xsrvjp\nalpalp-xsrvjp\nroyal-body-jp\nwebone-cc\nathome-mj-cojp\nzone-portal-com\notopost-net\nxinfo547-xsrvjp\njp-hyperweb-com\nfr3\nchefclub-com\nginzaconpa-com\nkappou-kikuya-com\ncpk-hh-com\neuroport-ironprint-com\nxn--n8jwa6c-com\nazvogel-com\nadmini-s-com\ngaia0369-com\nnewbabygiftbaskets-net\nkamig-jp\ntag-dake-com\nbarikan-blog-net\nsakamoto-engei-jp\ngocebu-jp\nminato-auto-jp\ntarabya-boschservisi-com\nseach-c-com\nmsinter-pv-com\nventitre-xsrvjp\nwk-apple-asia\nxn--u8je2227b-com\nre-frames-com\nsabureview-com\ntm-ad-cojp\nxsample325-xsrvjp\ndr-suisosui-com\nwebject-biz\ntenjinhanabicon-com\nnara-conh-com\nya-maki-com\ntoyofumikaneko-com\nkazuno-meishi-com\nsantoku-net-xsrvjp\nkengyofx-biz\nkeep-life-com\noffice-sr-net\nwebooman-com\nkyonara10-xsrvjp\nonlinecasinodekanemoti-com\nprimavera1997-com\ntruenature-jp\nvtwins-net\ncelebstyle-japan-com\nowlview-jp\ns-ponii-info\nmuko-shaken-com\ndance-sports-net\nnemlino-jp\ncar-seibi-com\nxn--tdkg5cc9fc7935nm0f-biz\nhito-chiiki-org\nthaisrs-com\ntokyo-ic-xsrvjp\ncradle-to-grave-net\nuji-chara-net\nsoundspice-jp\ntakakurashinji-com\njbiz-xsrvjp\ntsukamoto-dental-net\nalpine-apps-xsrvjp\nascorbic-box-com\nfc01-xsrvjp\nselfish-cm-xsrvjp\nworldcycle-info\nkatsuragigarden-com\nxinfo106a-xsrvjp\nsecondstage-car-com\nsanjyuushi-xsrvjp\nein-xsrvjp\njubjub-jp\ntransfer2\nkandai-mansion-com\nasunaro-grp-jp\nr-pep-com\nsat-mental-net\nwec-future-com\nootani-net\nxinfo560-xsrvjp\ndatsu-colle-com\nboschsecurity-jp-net\nhirosaki-ringo-com\ntkmyume-xsrvjp\nkoutazeroism-xsrvjp\nhaisyahatap-com\nxinfo578-xsrvjp\nnpo-jfta-org\nhispano\nmistgrass-com\nioris-xsrvjp\nxsample221-xsrvjp\nnetter1-com\nkumage-rk-jp\ntestsp120423424-com\nk3-style-com\nhand-yume-com\nminohharmony-com\n6777-jp\ntheoutdoor-jp\nfarfaro-com\npenplus-jp\nkorakudo-com\nmakkoy-xsrvjp\ntakashimabio-com\nfreelifelike-com\n12sunhome-com\nsteak-ichiban-com\nlcs-jikken-com\nspawn-dev-com\nsakura-cosme-com\nw-workhome-com\nteikokusoken-cojp\nmakibi-com\nhachioji-con-com\n0507sun-field-jp\nkankouniiza-xsrvjp\nxinfo724-xsrvjp\nxinfo338-xsrvjp\nstra-ws-com\nadonary-com\nbangnacoupon-com\nidarts-cojp\namalpha12-com\nmagic-gu-com\nfreedom-corp-com\ngz-burst-com\nkawasaki-sougi-net\nrekishi1-xsrvjp\ncoloplfan-com\nfocal-p-xsrvjp\njwebcreation-com\nbloomsbury-photo-com\nseitai-kumeda-com\njobpla-com\njoy-strike-com\nznf-cc\nayuda-biz\ngori2012-xsrvjp\natsumaru-xsrvjp\nsishuu-com\nmakoto2008-net\nem-agency-xsrvjp\ntest-xsample319-xserver-com\nliflow-net\ntint-jp\nchubuoudan-com\nnonhoi-farm-jp\nteiken-xsrvjp\nkishimotosyouten-com\nstyle-lab-xsrvjp\nfisphoto-com\nxsample116-xsrvjp\nooidekan-com\np-pr-info\nxn--pcka3d5a7ly86z14i-net\nwith-planning-jp\ncyber-cubic-com\nhibinotatami-xsrvjp\nkokumotsu-saikan-jp\nfukumachi-cojp\nikawa-xsample50-xserver-com\nartificial-photosynthesis-net\ntestxdomain320-com\nnagoshi01-com\narujanaika-com\nxn--ruqr59dpuht2t50er1m-jp\nazureblue-xsrvjp\nr-mizuno-xsrvjp\ngakushif-com\ninfluentialmen-net\nsamaa-cojp\nsilc-jp\nee-english-com\nsenbokumomoyamadai-doin-jp\ncecodel-org\nssid-xsrvjp\nseibunsha-info\nweb-matrix-jp\nwebarx-cojp\nshikitu-net\ntokusuru-print-com\nmydays-off-com\njapanadvancedmall-cojp\nmusicmmm-xsrvjp\nsanoyas-eng-cojp\ngpc-kyushu-com\nirezumi-ya-sl\nhiro-odecon-com\nkouninkaikeisitoyo-com\nmamasnote-com\naquarela-jp\nniveusjp-com\nlsstatsuta-com\natlantisfalling-com\nahti-jp\nsiw-jp\nfantanet-jp\nharbarlandcon-com\nntc-tool-com\nzero-sys-cojp\nbijincoupon-com\n1day-implant-net\ncouleur2013-com\nminami-yasu-com\njgt-tour-com\nkizan-kouyou-com\nkaiungoods-jp\ncounselornavi-net\ngreen-dental-me\ntrendoffice55-com\ncobee-jpncom\nxn--hckqzd2f3dwc2d3a-com\nkyoubashi-cul-com\nxinfo515-xsrvjp\nfacebook-app-biz\nrunchan-jp\nkeiko12-com\nheimat-ltd-com\nxsample147-xsrvjp\nxn--zck9awe6d418qo4jbw1c-jp\nokumura-sekkei-net\nm-tree-info\ntakatec-info\nlebouquet-bz\nmaiko-hotel-cojp\narklab-biz\naslynx-xsrvjp\nes-lash-jp\narcras-com\nakaike-ss-com\nimage-nail-net\nmisao09110704-xsrvjp\ntsi-xsrvjp\nshinga-cojp\nproxy03\ngeppappixi-xsrvjp\nkaraj\nforest-kk-com\nreitakukai-jp\noki-navi-net\nmikuriya-xsrvjp\neco-imagine-com\nn-rock-xsrvjp\nrakujisha-net\nakion-cojp\ntem-pus-com\ntomtak-com\nfb-jisenkai-com\npowerstone-rin-com\nhealing-spot-xsrvjp\nsousha-net\nripd-info\nkawasaki-syaken-com\nhappybank-cojp\nbr-tokuyama-hcp-com\narakazz-info\n1-1st-com\nwhitoa-com\nroupeiro-com\n12suh-jp\ntakeshi97-com\neconowa-org\nwee-xsrvjp\njrps-org\nrjen-asia\nbilbao-jp\nmohemohe-net\n121btl-com\nrimowa-suitcaseshop-com\nijci-info\nmiyoki-cojp\nomotenashi-job-jp\nonsen1126-xsrvjp\nrinotter-k-xsrvjp\ntsuruda-ganka-com\ntempur-com\nito-consul-com\nkaga-fes-com\ni-lightly-com\nmatsudaiyaku-cojp\ngraphicbeat-xsrvjp\nlbks-jp\nwinningfield-net\nlib-job-com\nt-lostbarrel-xsrvjp\nkyoubashi-yasu-com\nweb-blend-com\nxn--cckc3m9cq08p0u3ai3w-biz\nainsel-info\nxsample77-xsrvjp\nshoppeta1104-xsrvjp\nen-pc-jp\nweb-arte-biz\nuesportal-com\nlaunch-pad-jp\nzigzag-label-com\ng-ks-com\nmistgrass-net\nhacophoto-xsrvjp\npug1-net\nchargercam-com\ncyberdesign-xsrvjp\ncp-av-com\nhigashishinsaibashi-yasu-com\nideaman-nu\nkameyamashachu-nejp\nvaruna-xsrvjp\nmental-h-xsrvjp\nnori1-xsrvjp\nmoba-net-info\nonejustice-biz\nhaniwa02-xsrvjp\ndreamplus-biz\ntukasayou-xsrvjp\nkanayama-cl-com\ngolgol-xsrvjp\nyokadoichi-com\ndjr69-com\nokashinosakai-cojp\ne-hm-life-com\nxn--cckc3m9cq08p0u3ai3w-com\nexpand-muchiuchi-com\nballetstudio-reverance-com\ntestdomainx325-com\nsoylatte-xsrvjp\nhai-saga-jp\njubjub-asia\nhk715-com\nkawano-tm-com\nsocial-game-biz\nbishukan-com\numihair-com\nmtshastajapanhealingfoundation-com\nh-h-lab-com\ntestdomainx331-com\nris2r-com\nk-i-jp\nkimuragosei-cojp\nnissei-cc\nlife3-xsrvjp\nshiraibutsuri-com\nhyper-kenchiku-com\nxsample324-xsrvjp\nmental-cojp\njyokoshoken-cojp\npoco-a-biz\nwww.pardis\ntestdomainx336-com\nmk-financial-xsrvjp\nebook-jp-net\npremium-life-info\ne-takino-com\nxn--kckwar5itb7grc-com\ntestxserverdomain585-com\nashiba-cojp\nshirakabako-biz\ncihs-courage-org\ntaa-xsrvjp\ntouch--me-com\nqtopia-jp\nrto\nlapps-jp\nbig8686-com\nsatellite-seo-com\nmame-no-sato-com\nkaigojoho-hokkaido-jp\nd-linnet-com\nsym-q-xsrvjp\nkagushop-biz\nosakakita-hanabicon-com\naffili8-marketing-com\nlukema3-xsrvjp\nslaves-jp\njoowon-net\nwhiteline-bicycle-com\nayuzak-info\nkuroiso-net\nenecost-cojp\notakuism-net\nkazupk66-com\nrakuikumama-jp\nxn--00-bh4a8cuhme-jp\nsuidousetubi-xsrvjp\ndenoukeiba-com\nolivenoniwa-ookubo-com\nmontejapan-jp\nwww204\nsus-wako-cojp\ncollegehula-com\nmarrrtaru-com\nbistro-vignoble-info\nbonia-jp\nxn--n9jxild6c580r9ygq36b1ocor6evm4b39d-com\njapanflower-net\nprosemi-com\nshimamura-reform-com\npeekaboo-xsrvjp\nxinfo577-xsrvjp\noumigawa-com\nxsample219-xsrvjp\nscryypy-com\nsolare-kenchomae-com\nreito2274-com\ncobaten-com\nsprouts-xsrvjp\nsideway-jp\nyou-our-com\njes-co-jp\nblisslife-jp\nxinfo158a-xsrvjp\naipet-cojp\nyousai-jiten-com\nosnews-org\narcadia-systems-net\ntintlab-com\nxinfo723-xsrvjp\nxinfo337-xsrvjp\ntipmarketer-com\nhatomove-com\nyamaurakensetsu-com\nkieishouji-com\nsr-onetop-xsrvjp\nxn--p8j5cxcyjlcygn342e-com\ndounano-net\nxn--u9j9eud6c3b3bzb3015d38xbyhc-biz\nkagurazaka-con-com\nf-estate-cojp\ntaiyakitei-com\nplusdesign-info\nsoltilo-com\nyuutasiro-com\nsakadesign-xsrvjp\nafortuneteller-biz\naffiliate-negoro-biz\ntokimekihonpo-com\nlib-gate-cojp\nl-deza-com\nkiyoshi1180-com\ntokorozawacon-com\nclincash-com\ntest-html-com\nkimono01-com\nsumahotuuhan-com\nrakutarojp-com\nhapicom-jp\nkita0770-xsrvjp\nxsample115-xsrvjp\ntoolbox-repair-com\njumonji-u-net\nmkcore-com\naspect-dp-jp\nv-softball-info\naomori-me\nfukuokabiz-com\nscale-xsrvjp\nraku-nakano-com\neco-imagine-net\nxinfo109a-xsrvjp\nkakuyasujoho-com\nbelle-cheveu-com\ng-wks-com\nloisir-hakodate-com\nkumamoto-investment-com\nys-square-jp\nzakkanowa-com\nfacebook-app-net\na-business-mail-com\nsmo-labs-net\ndensyoku-net\norb-pro-jp\ntest-xinfo726-xserver-com\njapanesedesigncollectibles-com\nsanjo-b-com\nfullplusca-com\noogai-com\nwestfieldhousebnb-com\numekantei-com\ngreendaikou-com\nfineartstudio-info\nsamuz-net\ntestxdomain301-com\nnote-123-com\niine1-xsrvjp\nmodernforest-xsrvjp\nladykaga-me\nnewentertainer-com\nkamata-con-com\nhokkaido-traveling-com\nigial-com\ndesign-sample-com\nkurumedecon-com\nboy3-net\ntestxdomain306-com\nkouhoukai-jp\ntsukasen-com\nkakazujimai-com\nshinjukuconpa-com\nkurokawaonsen-xsrvjp\nsmartphone-club-info\ne-iwatate-xsrvjp\nkazu-bz\nrakugofan-xsrvjp\nxn--cckagl3fc6czknac2gn3hscza2hzgf0225npksd-com\n39antenna-com\ntestxdomain312-com\nkoshigaya-dc-com\npartyglide-com\naddplaza-net\ng-excellent-com\nmomosign-com\nmiki-soft-com\nbellegraph-com\nn-insurance-xsrvjp\nadman-cojp\necomott-cojp\ntestxdomain317-com\nlomy-thai-com\nanesakiapart-com\nf1-gate-com\nmoicom-xsrvjp\nkeishin-net-net\nsantomiya-jp\nyes-2784-com\nyogurtia-net\nkyotoujigawa-hanabicon-com\ngoyoutashi-jp\nkeyringpics-com\neco-works-jp\njellnail-dvd-com\nxinfo514-xsrvjp\no2ocafe-net\nishiwata-rashi-jp\nshougai-navi-com\nallmato-me\nxn--cckc3m9cq08p0u3ai3w-net\nankul-com\nlovesquare-info\natozwindows-com\nyoshino-i-cojp\ngyakutensaiban-info\nnichiei-sv-xsrvjp\ntomidvd-com\nsakura-marche-info\nindependent4-xsrvjp\napptongs-com\njens-e-jp\nsfa-chitose-com\nfranco-jp\nmermaid-xsrvjp\nshinkodo-jpncom\nittaku-xsrvjp\nmtcr-jp\nxn--yckc3dwa2295ckj8ah82a-com\nxsample35domain-com\njlr-kobe-com\nrinotter01-com\ndream-stone-jp\ntomohirokinoshita-com\nxinfo340-xsrvjp\nadworks24-cojp\nmeo-auto-biz\ntom16-com\nliveinasia-info\nabout-doors-xsrvjp\nyanbaru-jp\nsoulofgold-net\ntekken2-biz\nchisuibrass-com\nxn--ick9dc3e7aa8i-biz\npinkorokakumei-com\ngoodreform-biz\nprobbax-jp-jp\nmedia-producer-net\nmyaru-com\nestenad-bigan-info\nxn--zck9awe6d4687a257a-jp\ngriter-biz\nl-w-xsrvjp\nlisec-orjp\n622334-com\ntestup-net\nrokugo-asia\nkiyoshi17-biz\ndensisyoseki-reader-com\nsaizou01-com\ncamonoe-com\naris-kg-com\nmonozukuri-nippon-com\neasycom-cojp\nnewglasgownovascotia-com\ndayori-net\nasahi-agency-xsrvjp\nnogizakacon-com\nebrietas-org\ntakahata-auto-jp\nmashuk-jp\ninfo-netbiz-com\nquick-eigo-com\nmallorca-western-festival-com\nmatusima-xsrvjp\nvanah-nakatsu-com\nonsenken-jp\nseina-xsrvjp\nfifty7tk0188-xsrvjp\nzakinosuke-com\nkinkmonster-com\natelier-nobara-com\nfcsakuragaoka-com\nkk-sc-net\nxsample76-xsrvjp\nktaiseed-com\nhorie-t-jp\ngavaiyoka-com\noptronics-auction-jp\nxn--t8jo4884a-jp\njsfs-info\nyoikode-xsrvjp\nquesera-yuki-com\narailaws-com\nxinfo545-xsrvjp\nmori-photo-com\nbongyaku-com\ntestsp1205552242-com\nkatuos-com\nautm-hamamatsu-jp\nmedia-producer-org\ncelebrity-pro-am-classics-com\naurens-info\nunder-the-tree-com\nhaco-photo-com\nyuugajapan-com\n1515-tv\nhappyabundance-info\nkm-land-xsrvjp\npackb2b-net\nassorezo-com\ndemo30\nguchikiki-chamomile-com\nsuninlet-com\nshopafroaudio-com\nyuri-medical-jp\nj-forest-com\nasumia-jp\nshinsuke2315-xsrvjp\njakujoen-com\ninfo-movie-com\nhappyrich-biz\nsmtn-jp\nfusenya-biz\nisogube-xsrvjp\nwishcraft-cojp\nuvd6-xsrvjp\npilkasiatkowa-com\nxn--cck0a2a1dug6be8l-com\nhellogoodbye-xsrvjp\nfujinomiya-dry-cojp\nirisartjapan-xsrvjp\nxsample323-xsrvjp\nogasa-xsrvjp\nkm-land-net\nbebit-com\nxinfo379-xsrvjp\nkokoronoisan-com\nkarenaiki-com\nwp-sample-info\nryouridougarecipe-com\nthecomputersolution-net\nxn--39jube-com\nxn--cckwaj0kmd4e9bd-com\nxn--nbkzdraq9b9dtevlv08xj5b1vh-com\nhikarinotane-com\ntre-ca-xsrvjp\nxsample150-xsrvjp\notowa-wedding-jp\nsuperb-cojp\ntomosdeputyservice-com\norugae-com\nihavetogo-asia\nmacha13-com\nsakaisouzoku-com\nfunction-five-com\nhashimoto-schule-com\nsuccessrecipe-biz\nkeihan-exterior-plan-com\ngetphonetic-com\nxn--kckb1c4m-jp\nmatuya-knit-com\naquapress-xsrvjp\nbujutsukarate-com\ngestaltschwarze-info\nekenzai-com\nhsk-archi-xsrvjp\nbestplanning-xsrvjp\ntuuhan1-com\nts-ado-com\nchuo-dc-net\nc-how-biz\ngangnambeauty-jp\n1okuen-com\ngaram-dinnings-com\ncpsjp-com\nbit-com-jp\nhimawari-shinkyuin-com\nkokorono-resort-com\n7go-jp\nzaxtuta-com\nkellch-com\nplan-kimono-com\nfuranotourism-com\nxn--n8jvdsa6soa5jz01vtb9bg6lk11hdbi-jp\nspecialforce2-net\nxinfo576-xsrvjp\nmarathon-festival-medical-net\nsoooooooooon-com\ndesign-cha-com\nroots-eng-com\nyurakucho-con-com\npset-xsrvjp\naquafarm-cojp\nkenaf780-net\nsp-vision-xsrvjp\ngallerybooth-com\nmcls-xsrvjp\nkanagawa-roujin-jp\nwind3000-com\ndaiwakogyo-net\nsoralink-com\ncelemarry-com\nmerumeru5252-xsrvjp\nnet-businesses-biz\nlaneige-info\nearlyservce-com\ngolden-item-xsrvjp\nyururi-web-net\nxinfo722-xsrvjp\ntest-xinfo741-xserver-com\nyutakajutaku-com\ni-seikotsuin-jp\nkomon-se-com\ntest-xinfo731-xserver-com\nfufuzukan-com\nmeimonconsul-com\nniku-kitayoshi-net\nmhplan-net\nconiconi-card-com\ntest-xinfo721-xserver-com\ngranpia-jp\nyo1-xsrvjp\nyumemagic-net\nbloom-blooming-com\ntest-xinfo711-xserver-com\ncvsiy-info\nmoe-jk-com\nblue-drop-xsrvjp\ngyakusenkyo-com\ngyusujicurry-com\ntest-xinfo701-xserver-com\nsamegai-me\nsendai21-com\noffice-akashiya-com\nxn--cckcn4a7gwa5p-com\nxsample114-xsrvjp\nkotsuban-belt-jp\nfudemojihonpo-com\nsamansa-eco-com\ndailymnews-com\nmiurazoen-com\nsleepnightsheep19-com\nfacebookmultilingual-com\nastalive666-com\nbidtest-info\njbn-cc\njishamap-com\nhana--home-com\ntest-xinfo107a-xserver-com\nhired-cojp\nclub-hanasakura-com\nnichihaku-com\ne-fuzzy-jp\njuice-no1-info\ndl-sys-xsrvjp\n1985games-com\ncosmo-mizu-info\nmic-fishing-com\ntriplearrows-jp\nforum6\ndo-ticket-air-com\nbscreate-xsrvjp\ncoco39-com\nhoraiya-net\nvizdev-xsrvjp\nxx00123-com\nasa-pro-net\nhappybirthdaypresent-net\nslim-free-jp\nmimatsu-wd-jp\nfly-journey-net\nsmaho-media-net\natelier-niji-com\nhack-you-org\ntest-xsample312te-xserver-com\nscachan-com\ndogwoodgreensboro-org\nmachipri-com\nhikaku-jouhou-com\nebisu-go-jp\ntest-xinfo591-xserver-com\naddtrust-cojp\nhodou-jp\nart-law-jp\nhakoniwa-toybox-com\ntest-xinfo581-xserver-com\nquafolium-com\ntk0324-xsrvjp\ntaguchi-xsrvjp\nms-cl-com\nsannomiya-yasu-com\nkunikotakahashi-com\nwaganse-jp\nnakamegurocon-com\nbp-labo-com\nr-mansion-net\neco-power-jp\ntest-xinfo561-xserver-com\nuttishop-com\ntest-xinfo551-xserver-com\nkazukasegu-com\nhoriba-gafu-com\njiyugaoka-orjp\nit-serv-jp\nxn--jprz31c82x93etka-com\nxinfo513-xsrvjp\nsousha-jp\naijanren-com\nlandjp-com\ndream-g-info\naglo-shop-jp\nutayuki-com\nroks-xsrvjp\nxsample145-xsrvjp\ngakuho-net\ntest-xinfo531-xserver-com\nblessvery-com\ngunma-kansenjohokyoyu-net\nishiyy-com\ntest-xinfo521-xserver-com\nyotume-com\nbousai-bread-com\ntest-xinfo511-xserver-com\ntsuyamakoyou-xsrvjp\nzz5-biz\nmachiori-xsrvjp\naginfo00-com\nschoolie-jp\narcadia-ex-cojp\nmizunasu-org\nhsfdf119-com\ntest-xinfo501-xserver-com\nxn--n8j4mybtf1e2217b-jp\nshophidamari-com\nntcsd-xsrvjp\nla-neigh-net\namashiro-asia\nkeirin-campaign-com\nwww103\nmatchkk-com\nchiezou-xsrvjp\nnihongo-daisuki-com\nuovo-kyoto-com\nwebstyleair-xsrvjp\nmaruka-nouen-com\npcjp-com\nphine-jp\nkanto3-xsrvjp\nfunabook-com\ngoalkaramiru-com\nolc-xsrvjp\ncafeterrace-syu-jp\narteq-jp\nkaminishi-xsrvjp\ntest-xsample305-xserver-com\ntwinv-info\npagejp-com\nkeicyousou-net\nkashiwada-xsrvjp\nsatotti33-com\nogikubo-magazine-com\n221b-net\nsakematsuri-com\nisseico-xsrvjp\nmrmk3-com\nanotherselect-com\nsoma-bikeseat-com\nat-attain-com\nadmans-xsrvjp\negaodaisuki-jp\nxsample75-xsrvjp\ncowabunga-app-com\nthedcdimension-com\nrengoku-circus-info\nmatusima4494-com\nimonobito-net\nheart-cocktail-net\nyutaget100-com\naotate-com\nsakurado-xsrvjp\ncranky-hb-xsrvjp\nsogo-hone-com\nrokushu-com\nkagayashio-cojp\ntsujishikaiin-com\nyossy01-com\npoplifejapan-org\nswish-xsrvjp\nji-beer-com\nxinfo544-xsrvjp\ntravelingbirder-com\nmalzel-com\ncasablanca-jp\n5on-biz\natplus-cojp\nzanimoenfolie-com\nsailingstyle-cojp\nlovpap-info\ngod-cleaner-com\nomoti-biz\nyoshu-shoji-com\nnishitaka-jp\nfunai-consul-xsrvjp\npees-cc\nxsv-xsrvjp\nggoodnews-com\ntest-xinfo351-xserver-com\nankhresearchinstitute-com\nyullyanna-com\ntechno-pia-com\ntomasuke-com\njc-project-xsrvjp\nmalaz\ndelight-workshop-com\nxsample322-xsrvjp\nkumakko-jp\nxinfo592te-xsrvjp\nxn--qiq69x-saitamajp\ntestdomain1072123-com\n0da-biz\ntabi-yoyaku-com\nkyugoro-xsrvjp\nbvbox-net\nmangoflag-com\nkumashinren-com\nlc-takatori-jp\nmasa-don-com\nandrojapan-xsrvjp\nyoihanko-jp\ndekomechan01-com\ntwo-roses-com\ncloverhomes-jp\nxinfo540-xsrvjp\ntobira5963-xsrvjp\nfs-xuxu-jp\nfreedom555-biz\nkurumacom-xsrvjp\nogoutatamiten-jp\nsuppli-kaiin-com\n1031produce-com\nkote-site-com\nto-ko-ne-com\nigamblingreview-com\nsenkyo-navi-me\nispice-jp\nbeauty-salon-la-alegria-ubecity-com\ncocolable-xsrvjp\nozawaayumu-com\npasoall-com\npinachee-com\nuxf-cojp\ngarlic-onion-com\nattosystem-cojp\nkumitori711-xsrvjp\nnagoya-con-com\npre-style-com\nmeimonedu-cojp\nsakata5-com\ntea-studio-y2-cojp\nshiroyandesu-xsrvjp\nxinfo575-xsrvjp\nokw-snowmobile-com\nrichness-xsrvjp\nkujukushima-visitorcenter-jp\nxsample217-xsrvjp\nenjoy5key-com\nks-corporation-jp\naction24-jp\nyumekanau-k-com\nohnoseikotsu-com\nmizuhokai-jp\nlopple-xsrvjp\nbesty-ichigomilk-info\nw-bukkyo-jp\nxn--z9j3g6bzc7bxc8c4074d4nud-biz\nabundance13-info\nds-shikinoie-cojp\nvendium-net\nnetapp1\nemoto-dental-net\nannouncement-xsrvjp\nkurose-info\ndreamaffilistyl-com\nhs-group-cojp\nlinx-corporation-cojp\ntoyota-kansenkyo-com\ntsuruhashicon-com\ntanakashika-com\nfkohuman-com\n114tx-net\nskeidai-3l-com\nfudousan-nagano-com\npaperhousesha-cojp\nrikon-bengoshi110ban-com\nthinkplanet-xsrvjp\nxinfo721-xsrvjp\nserver-ptsd-xsrvjp\nnorth-giken-net\nkataigi-xsrvjp\nxinfo566-xsrvjp\nturning-point-biz\nbattlespirits-kaitori-com\nbenriya-net\nminken-net-com\nshidou-seitai-com\nmz-corp-jp\ngotanda-mien-org\nvalueup-info\nsyousuke-jp\nmiu111-xsrvjp\ntouho-yamawa-cojp\nyouvision-info\notokukasegu-xsrvjp\nxn--6oq618aoxf4r6al3h-biz\ngakuseievent-xsrvjp\ne-douguya-info\naiheart-jp\nxsample79-xsrvjp\nlibertyandmoney-com\numehara-biz\nxsample60-xsrvjp\ntryangle-sys-com\nxsample113-xsrvjp\ntest-xinfo109a-xserver-com\nextreamposition-com\nmiki-mobi\ntestxserverdomain120301356-com\nfukensan-jp\nwonderparty-net\ntest-xinfo108a-xserver-com\ntribuddha-xsrvjp\nmisato-kome-net\n7and6-net\nholiday-homestay-com\ngojo-aijien-net\nnagasaki-sam-com\nm-davide-net\naroma-shikaku-com\nlyl-jp\nportalshake-com\nre-pair-biz\ntest-xinfo106a-xserver-com\nidumi-g-cojp\nxn--28jzf747o512b-jp\ntest-xinfo105a-xserver-com\npacoten-xsrvjp\nyamada-tatami-jp\nignis-nejp\nsharedsoft-xsrvjp\ndhcp1a\nxn--pcka4lj0a1as2jf5847fr93b-net\nbbboso-jp\nshinsaibashi-con-com\nmikado-bekkan-jp\ntestsp120821test-com\npiisko-xsrvjp\nmitumame-jp\ntest-xinfo103a-xserver-com\naiware-distribution-com\nbabybaby2012-net\nweb-shin-xsrvjp\nlondongeisha-com\ntest-xinfo102a-xserver-com\nnioistop-net\nmurakami-b-com\ngoodchance-xsrvjp\namazon9948-xsrvjp\nnds3\ntestxdomain315-com\ntest-xinfo101a-xserver-com\ngofun-p-net\n6230ongaku-com\nofficels3-xsrvjp\nbasekobe-xsrvjp\nthegate-key-com\nasa-hh-com\ncome-x2-com\nhakkou2-xsrvjp\nbfesca-com\nuni-space-com\nsanwakougei-com\nunhwa-cojp\nmyt-p-info\ninfinite-as-com\nglobalimporter-jp\n33abundance-com\nxn--a-5fu2f3a-com\nzepto-jp\nmachiako-san-xsrvjp\nbethpage-jp\n4ssb-com\nfusacorp-xsrvjp\nlai-inc-jp\nxn--k-pfuybek0nvb2cue-com\nyoshixx-com\nkekoberry-com\nenomad-jp\nxinfo512-xsrvjp\nafl-design-com\nwakouki-com\nxsample144-xsrvjp\nmogabrook-jp\nstarvictory-com\ndatusara-net\njin-1999-xsrvjp\no9obank2-xsrvjp\nrakuzanet-xsrvjp\nmekakushi-fence-com\nfukuchiyama-shaken-com\nfreelife100-com\nindependent2-xsrvjp\nchibadecon-com\nnfo-bridge-xsrvjp\ncarelearning-jp\nys-office-xsrvjp\nmeguminosono-net\npromotion-writer-biz\nlifecore-cts-com\nadvanbill-com\ntakamiyaki-jp\neaglebowl-jp\nsie-ric-com\ntabi-17-info\ndeceuninck-thyssenpolymer-com\ntest-xinfo539-xserver-com\nmetaltex-jp\ndouble-in-com\ntestbsoy-info\nt-marunouchicon-com\nzaidan-zenyokukyo-com\nkyoka-biz\nm-nakamura-biz\ntestsp1203334243-com\nluggage-mania-com\nwhynotme-xsrvjp\noh-bento-com\nlipostore-xsrvjp\nbecasse-jp\n1create-es-com\nclsc-biz\nkaguray-com\ntestdomainx327-com\nguitarland-hagoromo-com\njosei-kigyou-info\nbwest-net\ncyrano-studio-com\nxn--pcksd1bza2ae0c0qsen902bcxvc-net\ncne\nocatcon-com\nhoneycomb-tani-com\nbrowniedesign-xsrvjp\napps-f-net\nmaruxen-jp\ntakarakujimeteor-com\ngo-youtatsu-com\nlc-takatori-com\nafiri-navi-com\nkateru-jp\nhzm-jp\nnetpost-biz\na-itc-xsrvjp\ntetsuro-matsumoto-com\nkenpo-cojp\nnijino65-info\nkandadecon-com\npowerstones-jpncom\nhomecare-net-it-com\nsanom-xsrvjp\nminami-skh-com\nnear-sendai-com\nxsample74-xsrvjp\nxn--zck9awe6dr30vedfmxiwrkn2c-jp\nikecon-xsrvjp\nliberators-jp\ntomochiku-com\nsi-man-com\nshihou-jp-com\nyumemorita614-com\ncuoluce-com\nbunbunshop-net\nxinfo543-xsrvjp\nboatrace-tokoname-com\njapanflower-jp\ncyber-intelligence-jp\nkawaoto-jp\natrapas-net\nnoizumi-org\ntomihata-dc-com\nsunkujira-pj-com\nkouei-wellcab-net\nhokuroku-com\nclub-zex-jp\nosakanaichiba-net\nstylemart-jp\nclarity-xsrvjp\nleadea-org\nfukuoka-shaken-com\natomic-synergy-cojp\nunc-xsrvjp\nacnekill-jp\narugeki-net\nesanyasou-com\niphoen-net\ne-kurozu-com\nantidote\nadcee-jp\nevis-jp\ntonbi1-xsrvjp\noutmatch-jp\nnasdebarraca-com\nmagokoroichi-com\nhosokawa-k-net\nxsample321-xsrvjp\naisai-home-jp\nelitedance-jp\nttcom-jp\necho1456ms-xsrvjp\nhoscoco-com\nshouhinhikaku-com\nshiseikan-biz\nserver08-xsrvjp\ntaste-technology-com\nmorito-xsrvjp\nrunjapan-net\nsdj7-com\niki-shokusai-com\nkumacafe-com\nirohamai-com\nogreservice-com\ntheisaoharikyuu-jp\nsokuhoyo-xsrvjp\nkanankaga-xsrvjp\nzappa-st\njdg-toyohashi-com\nyeast-cojp\nmiebbf-com\nxn--z8j2b6je2iphpbxa6it546f-com\nwaterbottlepeople-com\nnmas-xsrvjp\nmultipharma-cojp\ndenritsu-solar-com\noyaizu-xsrvjp\nmantanya-com\npandwitch-ishikiri-jp\nclavor-xsrvjp\namihata-com\ntonkatsutei-com\nstudio-kawamura-com\nyumepi-com\nsoft999-xsrvjp\nk2s-xsrvjp\nferu-g-com\nfit-labo-jp\nqhm-lab-info\ntestdomainx328-com\ntrusty-co-jp\nbrandingbox-net\ntestmail-xsrvjp\ncalintjp-xsrvjp\nadachisekiyu-com\nokabe-medical-com\nmoneychild-xsrvjp\noffice-sugiyama-com\nxinfo574-xsrvjp\nsozokobo-xsrvjp\nh-osaka-jp\nkansai55-com\nsteer-wimax-jp\ntestxdomain319-com\njbg-ongakuin-com\nxn--u9jtfobzbycc5c2d5a7kxky383a900c-biz\nfd01-info\njsn-hokkaido-com\nitukinosato-com\nikoh-jp\ngchaoo-com\nschonbu-com\nhandsome-xsrvjp\njobcrew-jp\n2waraji-com\ne-hanjyo-com\nmayser-jp\ny-jig-xsrvjp\nmm2850-xsrvjp\ndiamond-dust-jp\naoi-cosmetic-net\nhatsuneya-net\ncds-xsrvjp\nlc-g-jp\nballanconsulting-net\ntanabe12-xsrvjp\nkamei-acjp\nshinwa-sprt-jp\nroots-eshop-com\npendet-com\nxinfo719-xsrvjp\nca-room-com\nteppouya-com\nkoba-labo-info\ncreli-com\nhibino-tatami-com\nlushlife237-com\nddhouse-xsrvjp\ngen-mu\n4976-jp\nfujibaba-xsrvjp\nkaradalab-xsrvjp\nxn--zck9awe6d872rezhp3y9g1f-jp\nabinvestag-com\nlistforless-sc-com\ncgi-kudoshoten-com\nbla-cojp\nmicrya-com\nheartful-trust-jp\nseibudai-com\nrootx-xsrvjp\nxsample112-xsrvjp\nhoritaclub-com\nfujii-nouen-cojp\np-ch-info\nreframe-jp-com\ne053-com\nmagnolia-coffee-com\nmienaidaigaku-com\ntosuseitai-com\nsakaikunmeidou-com\npurple-stitch-net\njap-xsrvjp\ncrossabi-xsrvjp\nosakasouzoku-net\ntakkensyuninsya-info\nsinminato-com\nikujiikumen-com\nhayatombo-com\nteisuiyu-xsrvjp\nla-cle-jp\nxsvx1023248-xsrvjp\nxn--fdkc8h2a1876bp0k-net\nhatomaga-com\nfdo3-com\nalpa-sys-cojp\nreibee-com\nsyakarikiya-com\nkvit-xsrvjp\ntomomo-jp\nbaytradingclothing-com\ndoris-spanish-com\ncaleb098-com\ngolden-angel111-jp\ndsplus002-xsrvjp\nliucompany-xsrvjp\nxn--w8j6ctc930wo9za2qf-com\ny-matanity-com\nnakayama-shouji-jp\ne-nichido-net\nseconddreamstage-biz\nwithyou7-com\nplanju-cojp\na-itc-info\nmeimon-edu-jp\nxn--88j6ea1a3393bcta3o5g868o374cpxo-biz\nasia-create-jp\ntechsupport-jp\noirastar-com\nsatoyama-land-com\nddwh-xsrvjp\nlove-phantom-xsrvjp\niteya-office-com\nmollymaidjapan-cojp\nfujiyoshiya-xsrvjp\nabout-a-stitch-com\ncasa-bebel-com\nacehive-cojp\nafilife-com\nxinfo759-xsrvjp\naijinkai-xsrvjp\nshimizu-ya-jp\nxsample160-xsrvjp\nkanemitsu-gaku-com\nikkyu-me\njunk-buyer-com\ngoldcard-web-com\ntkms3256-xsrvjp\nozkuni-com\nxinfo511-xsrvjp\nnetjapan-xsrvjp\nseven-to\nxsample143-xsrvjp\nankhcloud-com\nkisoku2784-com\njyuushou-com\nitabashi-shaken-com\njiw-fc-jp\nsuzuran21-com\nad-income-com\nsosakujo-xsrvjp\nhypnoroom-cielbleu-com\nlineishikawa-com\ndailyrootsfinder-com\nnposalvage-com\nshinjukucon-com\njmb-orjp\ngaogofing-info\nuesaka\no-yoga-jp\nkashuestyle-xsrvjp\nnikorinoie-com\nmugendou-xsrvjp\ndr-support-jp\nhappy-cre-com\ntech-web-info\nkabu-sokuhou-com\nxm-net-com\nkomachi-akita-com\nlinadream-net\nkabuatoz-xsrvjp\nbit-blog-jp\ndodorufin-xsrvjp\nhonki-mode-com\nus-vocal-biz\nneo-hair-com\nemurashika-jp\nalive-marketing-com\nhubcafe-jp\ndbm1\nroyz-fc-com\nrom4-xsrvjp\nkikanshi-web-xsrvjp\nkishinjyuku-com\nmaido-ari-xsrvjp\nariakesangyo-xsrvjp\neinstein-net-cojp\nxn--cckcdp5nyc8g2745a3y4a-biz\nrainbowwin-net\ntest-xinfo759-xserver-com\nkatakome-com\nat-breeder-net\ncoursfrancaisparinternet-com\nguchikiki-biz\n2han10-net\nyou-yu-com\nbono-table-cojp\nxn--dckix0be3bww9s3erh-net\neyecen-xsrvjp\nch01\ntestsp1208271-com\nhm99qq-xsrvjp\ngambarou-com\ne-mikan-xsrvjp\nus-vocal-com\nbows1989-xsrvjp\nnoto-p-com\nhoneytokyo-azukaritai-com\nxsample73-xsrvjp\nquick-worker-xsrvjp\ntestsp1208276-com\nhatalab-org\nyoshiki201-com\nkototama-himehiko-com\nkumano-jinjya-com\nnakamedecon-com\nyoridoko-net\nbreeze-xsrvjp\nxinfo542-xsrvjp\nzentokyo-orjp\nfukuta-shoji-com\nkyouzon-xsrvjp\nm-ins-cojp\nrobotkiyosaki-com\nstorage-jp-com\nkanoya-in\nmiserve-xsrvjp\nfreeillustclub-net\nfree-style24-com\ncore-japan-net\nyamamoto-gyosei-com\nkvit-cojp\notsu-shaken-com\nsun-apricot-com\nphotofixx-com\nequal-825-com\nshiomishika-jp\ndips-a-jp\nasanet-xsrvjp\nhiraknet-com\naxis-training-jp\nkankyo-mirai-com\nvietnamfes-jp\nxinfo710-xsrvjp\nxn--t8j0a6ivbyo0d2h2g2785a340f-jp\nhappychance-xsrvjp\nimo-syaken-com\nfuto18-com\nwakuwakudayori-com\ngakki-kaitorihonpo-com\nrainbow-br-com\nmypre01-xsrvjp\njiten8-net\njdatabank-com\nfukutomi-yutaka-com\nsho-ichinose-info\nthadogpound-net\no2cloud-cojp\nkobe-arima-jp\nmovie-monroe-jp\nxinfo168a-xsrvjp\nbelpon-jp\nyabagawa-com\nokayamacon-com\norion-dispatch-com\nluvisto-net\ns-e-r-jp\ncolor-shikaku-com\ntokai2x4-com\nsikakustyle-net\nyoruan-xsrvjp\nroidshop-biz\ntanshinbox-com\npalace-iwaya-jp\natn38-net\npuku89-com\nunique-sunaba-com\nkoutsujiko110ban-com\n2012parallelworldexpress-com\nkanbanmitumori-navi-com\nzala-tribune-com\nh-colors-com\nyeti-net-com\ncentlaw-xsrvjp\ntest-xinfo729-xserver-com\nguchi-talk-com\nfpnomori-com\nbody-shaving-com\nkazuok66-xsrvjp\nnavit-j-net\nki-ketsu-sui-com\nxn--eckd5a1es53u4s4bnvb-com\nku-kan-jp\n6sasi-com\ntestdomainx339-com\ntest-xinfo739-xserver-com\niikamo-me\nr09-jp\nnanela-com\nsyu0128-com\nmayuzo-com\nc-throb-cojp\nw-angelica-com\ntoeic-technic-info\nxinfo573-xsrvjp\nwebkohbo20-net\nmobile-pc-jp\ngrandeborsa-com\nnrj-acjp\ncent-law-com\nahb-rs-jp\nfussa-net\nakb48ob-com\nkenkouni-xsrvjp\nmurphy-xsrvjp\nilt2-xsrvjp\nshoukichi-staging-org\ngreenerfaqs-com\nwhitestar7-com\nsumabu-com\nevent-kyuden-xsrvjp\nskao-info\ncitabria-xsrvjp\nxinfo120a-xsrvjp\nsmakl-net\ntoshiyuki-biz\noshie-k-com\ntest-xinfo720-xserver-com\nbcsv1-xsrvjp\nhaklak-com\nshiga-kaigotaiken-jp\nxinfo718-xsrvjp\nsupertaikyu-com\ntokuringi-com\ncrystallize-jp\nminami-cl-com\nitiman-net\nyamatoyo-cojp\nelimsmile-jp\nkansya888-com\npier-s-com\nflaviahair-com\noriginalbook-xsrvjp\nkolocle-com\ndonald1\nmogmog-xsrvjp\nktskk-com\nxn--vcsu3i28mez0b-biz\ndeliver-xsrvjp\nalpep-com\nnetbus-jp\nparts-depot-jp\nkotoba-gift-com\nikeconnight-com\nrameatlantique-com\nniigata-tmc-com\ntest-xinfo710-xserver-com\nserver9-xsrvjp\nxsample111-xsrvjp\ncyberdesign-cojp\nxsvx1009156-xsrvjp\ninaba-koji-com\nsweets-orjp\naircon-clean-com\nnccard-xsrvjp\nmythoswork-biz\nhana-mido-com\nwedding-maria-com\nsatohya-com\nwilldrive-net\nsoudan1-com\nmizu-fiore-xsrvjp\nx-side-net\nsumi-orthod-com\ntest-xinfo738-xserver-com\naraimotors-com\njars-jp\nminani2468-xsrvjp\ntest-xinfo728-xserver-com\ngioncon-com\na-site-me\nrom10-xsrvjp\ntest-xinfo718-xserver-com\nsaiyou55-com\nmignonette-jp\nwhitecrow\na-lash-com\nahsma3662-xsrvjp\nsal-nejp\nkashiwa-vocal-info\ntest-xinfo708-xserver-com\nmonifihi-xsrvjp\nbaseballshop-legends-com\nokazaky-xsrvjp\ntitti-orjp\ndreambuild2011-com\nhayspec-com\nhyse-biz\nalta-marea-jp\nhotelkensaku-info\nnetshop-studio-com\nhikage-xsrvjp\nsoulofgold-xsrvjp\nadnacom-jp\njinyublog-net\nmizukakifu-com\nidolrevolution-jp\ndecome2012-biz\nsunace-biz\nsunburst-n-cojp\nxn--zck9awe6d5989b6fc-jp\nkotox100-com\nhello-mystyle-com\neyecen-com\na-sapo-jp\nsabotenya-com\nsakihi-xsrvjp\nsugenosato-com\npc8137\nm1182-com\nkirara-shinyuri-com\nkagari-jewelry-com\nskjmd-com\nariege-patrick-immo-com\nmokuteki-net\nnextone-srv-xsrvjp\nh-tb-biz\nxinfo510-xsrvjp\n13abundance-com\nt-aliveestate-cojp\nonesmileoffice-com\nxsample142-xsrvjp\nfunteamhs-cojp\nshepard-navi-com\ntochi-bus-com\nsupamankazu-com\ntv-valve-cojp\nkikuimo-sato-com\nimg-jp\nyamaiku-com\nmatsuda-siko-com\nkitpas-com\nchirashi-print-net\nsvnl-info\nxn--hckp3ac2l-jp\nstylejam-xsrvjp\nsolvic-net\nadomi-xsrvjp\nuchihamono-xsrvjp\nmeichu-biz\ntomson1-xsrvjp\nikebukuro-con-com\ntestxserverspdomain121030-com\nlovelyjazzchan-com\nnijinotane-xsrvjp\ndogs-fvh-net\ntennoujicon-com\nguruguru-gourmet-com\ntest-xinfo558-xserver-com\nbuschool-xsrvjp\nochaukeya-com\ne-plant-me\nncare-m-ch-jp\nbaistone-jp\nkumamiya-com\nkukumu-g-com\ntest-xinfo548-xserver-com\nluna-shine-net\noirasekiyoraka-com\nsimple-work-net\ntest-xinfo538-xserver-com\nthedodo-jp\nmisato-mariage-com\nfruit-garlic-com\ntest-xinfo528-xserver-com\ndancestudio123-com\nyunomi-us\nkazumis-biz\nxinfo339-xsrvjp\nhonzo-mall-aichijp\nmk0088\ndai-anshin-com\nawesomediet-net\nxn--asp-ei4btb8qwj6169acyva-com\nfree-way-xsrvjp\naandgweb-cojp\nexformation-jp\nshimada-clinic-jp\ntest-xinfo508-xserver-com\nyagishika-jp\nflm13-jp\n5oku-com\nnanela-net\nnlight-xsrvjp\nxsample72-xsrvjp\nkaradacure-com\nipi-radio-info\nmore-com-xsrvjp\nproject99-xsrvjp\nslowliving-conz\nhanryu-eikoh-com\nobubutea-com\ntest-xsample333-xserver-com\ninatani-shika-com\nnittokyo-xsrvjp\nkondo-shoten-xsrvjp\nxsample90-xsrvjp\nxinfo541-xsrvjp\nbenefix-cojp\ntrendtrend-info\nwonder-poems-com\nrinrin3-jp\ntakumi-qol-com\nst0p-net\nnakai-iin-net\na-cue-com\ngardensite-xsrvjp\nkenu-xsrvjp\nbeautycosmer-com\nsakaedecon-com\nmasa-keiba-com\nkitasenjudecon-com\nbiztask-net\ntest-xsample303-xserver-com\nr-creatives-com\n4nen-com\nlensman-jp\nrumi-kg-com\nhokenbooks-com\nxn--7-kgu4es24uf5q-jp\npentalab-cojp\nfleurshair-com\nzero-free-xsrvjp\nomotesandou-net\nrooky-jp\nf-cre-com\nsmirnoff77-xsrvjp\ntamai-chuo-com\nyumeflower-com\nbon-marriage-com\nregalsense-com\nstudio-ibis-com\ncarhonpo-com\ndental-com\nxn--u9j360h32opa140d-com\nhiroshimade-com\nsedai50-net\ns-publish-com\nsprachschule-xsrvjp\nhuman-respect-cojp\nbookend-xsrvjp\nlbm-xsrvjp\ngacchiri-jp\nrakunadiet-com\ngenkigoo-com\ncentrair-bluechip-com\nchayamachicon-com\ncosmicengine-biz\nzenta-tv\nkazart-jp\nxinfo595-xsrvjp\n2102-jp\nyou-yu-xsrvjp\nube-shaken-com\nsasaki2228-xsrvjp\ntest-xinfo358-xserver-com\nceltislab-net\ndaigo555-info\nxn--t8j0a6ivbyo0d2h2g-jp\nherbkenkyujo-spur-jp\nmikami-masa-jp\nkusakaya-jp\ntest-xinfo348-xserver-com\nautoflex2000-com\ntwds-jp\ntamabayashi-cojp\ngokujyouwagyu-com\ndigital-sensation-jp\niijimakazunao-com\nwano-tv\ntaka-afiri-xsrvjp\nhanyuxuexiban-com\nfamilyhall-kounandai-com\nichikawa-shaken-com\ntoriikengo-com\ninpres-jp\nhomepage-desite-info\nxinfo572-xsrvjp\nlongtail-seo-jp\nhappystyle555-com\nsorasys-com\ntennouji-yasu-com\nasobigokoro-info\nstemflag-com\nharuri-jp\ntyube-yokkaichi-syaken-com\nxinfo761te-xsrvjp\n4-home-teeth-whitening-com\nyamazakishika-jp\nteen-affair-com\nsaiminjuku-com\nisc-kansai-com\nhotel-yagi-xsrvjp\nkameoka-trust-shaken-com\nyuanchuang-hk-net\naginc50-com\nsaitama-tokiwa-shaken-com\nfujieda-info\n1plus1-cojp\nec-aichitriennale-info\nkrk6868-com\nsomeiyoshino-com\nxinfo717-xsrvjp\nxinfo332-xsrvjp\nmb-mori-com\nhanaya-3a-com\nrasc-xsrvjp\nmuj-orjp\ntc-legal-net\nyou-creative-com\nontic-to\nspa-thai-com\nolimpiade\nticketsoko-xsrvjp\ncarecreates-com\nkazu-alohi-apopo-info\nayatocom-net\ntoyoda-eri-com\nsenmon-web-com\nm-shien-com\nkaitori-kan-com\nsancha-de-con-com\nktimz-xsrvjp\ncustom-fk-xsrvjp\nmacco-cojp\nkijpn-com\ninotaka-xsrvjp\nmatthew-mcconaughey-org\nzy-x-com\nmagic-sense-com\nlader-xsrvjp\npointkeyword-com\ngiocondos-com\nomise-org\nxsample109-xsrvjp\nakazukin-cojp\nbobble-asia\ntakasumi-com\nevolution365-net\nkobe-syaken-com\nmulti-pure-info\nshinagawadecon-com\ntheliksun-com\nbistorot-le-reve-com\nsoba-kochi-com\nreibee-xsrvjp\ncosmo-s-net\nsekiryu-xsrvjp\numenomochi-com\nsentaku-llc-cojp\ntetsuzan-xsrvjp\nneo-ah-com\nd-stage-xsrvjp\ncd-ok-com\nxn--vck5d6ae0cyc7801bnpyb-jp\nmed-takaoka-jp\nyamako-f-com\nyamato-h-com\nallsedori-com\nxinfo123a-xsrvjp\nniwaya-info\nragress-com\ntokushima-syaken-com\ngs-yumekoubou-com\nhiyoshi-net-com\npacg-jp\nmusashinogolf-com\ntaguchi-tax-jp\nlifeup-nejp\njnome-jp\nonamae-taiso-com\nxsample310-xsrvjp\nfurumoripopopiano-com\nyanaibrands-xsrvjp\nchintai-jpn-com\notakaland-com\nb-life-id-com\nplanclair-xsrvjp\nehon-app-com\ntestdomainx321-com\ni-loceo-com\nseo-tail-com\nfellows-japan-com\nmonodzukurikidsfund-org\nxn--u9j5h1btf1e613xpbuzkc252m-jp\ntanaka-iin-jp\npalais-riviere-com\nhimawari-day-com\ntestdomainx326-com\neport1984-xsrvjp\nxinfo508-xsrvjp\nartbird-jp\ncanalsalon-com\nmahounoikuji-jp\ntrno-biz\nkaratsujuku-com\nfacebook-connection-com\nhibimarche-net\nxsample141-xsrvjp\nymsthrs-com\nsuper-raku-net\ntestdomainx332-com\nzipaddr-com\ndeaikei-max-net\noita-golf-com\nmsr-pro-com\ntetta-jp\nla-lu-ce-com\ntestdomainx337-com\nsunadesignlab-net\nretoru-com\nluxury-photo-jp\nyoichiro01-net\nkyokuto-h-com\nyourmenucreations-com\nph-sister-com\ntokyo-sk-com\nisitaka-mokko-com\nxn--ppc-773bzqgah5a30akezjj654f-com\nhub-create-com\nn-chemitech-com\ntitania-cojp\nambient-nejp\nthisistrend-com\nsayaka-dp-com\nb-map-jpncom\ncappee-net\nmobile-japan-ok-com\nkyoto-alice-com\nito-coffee-com\nrjen-cojp\ntms-first-xsrvjp\nwaocon-test-com\nhiver-shop-net\nshowtimes-xsrvjp\nrefresh-kaatsu-com\npenplustown-com\njyutaku-k-cojp\nrgh-jp\nweb-kaisha-com\n510office-jp\nkousyu-fukuoka-com\nadtec-xsrvjp\nlevpiece-jp\nfuwairu-com\nnews9plus2-com\n1-3-cojp\ndirect321-xsrvjp\ntsuge-seitaiin-net\nheroicstory-biz\nninbai-nejp\nupat-jp\nidessey-com\ntestsp1208445524-com\nsasazukadecon-com\nkenko-ya-xsrvjp\n753st-net\naspix-archives-com\nxsample71-xsrvjp\nxsv08-xsrvjp\nkawagoecon-com\nkan-ki-jp\nmakitt-biz\nshusaku-sasada-com\nnaisou-mitumori-com\nivy616-com\nactginza-cojp\nkazelu-jp\nclementia-inc-com\nthedykeenies-com\nsports1230-com\nncef-manel-com\nonomichi-bbs-com\nxinfo539-xsrvjp\nesukei-xsrvjp\ntidalism-com\nbrandbank-cojp\ntomsonking-com\ntest-xinfo560-xserver-com\nkanamonokouhou-com\nlamb-cloud-com\nautospeed-jp\nbisamobi-net\nuruoi-gel-com\noita-mbbl-jp\nfd-works-com\nhifu-mi-com\nshinryo-info\n1writing-com\nmishimashika-com\nsyoknin-com\nazzip-azzip-com\nnaturalcurlist-org\ntest-xsample304-xserver-com\ndreamwarp-jp\noveragain1059-com\nmail-pal-com\ntensai21-com\ntomakomai-shaken-com\ntsubamesanjo-jc-orjp\nmusashi-soil-com\ntest-xinfo595-xserver-com\nkanto3-com\ntottoko-net\nakirazx-xsrvjp\nxsample317-xsrvjp\nk-flat-net\nincenx-xsrvjp\nsabu-official-com\nrena-nounen-net\nmisuno-net\ntaiten-hoikuen-com\npaint-fukuoka-com\naimistone-com\nosamukubota-net\ntest-xinfo550-xserver-com\nvient-net-xsrvjp\nbeta-beauty-xsrvjp\nag-ent-net\nvvfm-net\ne-conomyhotels-jp\nhiroshimakoigokoro-jp\nvalues-break-com\nchiangmailanna-spa-com\nhamamatsucon-com\nxsample216-xsrvjp\nokinawanoni-juice-jp\nfukuoka-ot-com\ngkconsul-xsrvjp\npachinkoslot-biz\nf-kimono-com\nkanjyou-com\ndesign-cube-jp\ncapelli-di-arte-com\nheart-oasis-com\niidabashi-kagura-com\npolepoleti-me\na-rec-com\nfbapple-info\nthe-greatful-life-com\ncafebar-cross-com\negao-c-a-com\nxn--elq250e1mhg47a-jp\ngengochoukakushiken-com\nnetbusiness-jpnet\ninfo-camp-xsrvjp\nhandsome-web-net\nphoto-prime-com\naishin-housing-com\nontheroad-jp\nforcearound-com\nkazuno-com\ndaimyou-net\nm-gene-com\nepatrol-info\ntestxdomain302-com\nyumimega-com\npc11112\npc11111\ngrooverider-net\naf-binary-biz\nwg995-com\naoba-fudousan-net\ngeek-boys-com\ninfo-utu-aid-com\nxsample213-xsrvjp\nfresh-terrace-com\nyuyu104-com\naoivvu-info\ntestxdomain313-com\nmilumoda-net\ncareebyte-com\nfk-kenchiku-com\ntestxdomain318-com\npcgiken-xsrvjp\ndesite-jp\nxsvx1022093-xsrvjp\nouensha-oita-net\nmanmaru0701-xsrvjp\nxinfo716-xsrvjp\ntanimotoyoshiaki-jp\ntest-xinfo530-xserver-com\nkitchenfactory-ac-com\nulvac-es-cojp\necocker-jp\nmpgd-net\nkcs-fc-info\naichi-roujin-jp\nburningrain-net\naprs-jp\nmusics-xsrvjp\ndoyu-ichihara-jp\ngolfbar-star-jp\nsbproject-xsrvjp\ngokoushokuhin-com\npc103-com\nmhplan1-biz\ncyber-ec-xsrvjp\nxn--gmqq3i52e2nhgrdevx-biz\npiropi55-xsrvjp\nhighest999air-info\nisuppo-xsrvjp\nniigata-shaken-com\nsylvieann-com\nosakabeshinkyuin-com\nactors-u-com\nlli-insurance-com\nxn--ickhj5b7d6fua4f-com\nforty-one-biz\nshinshu-comprehensive-jp\nlototrial-jp\ndaikitkgs-com\nsinzan-cojp\njiko-pr-jp\nnature-v-com\notogr-net\nkmasato-com\ncolumbus-in-phil-org\nsswd-jp\na-pu-pu-com\nxsample108-xsrvjp\nlifeart-nyan-com\nakasakadecon-com\nsatomisou-net\ntest-xinfo519-xserver-com\ngloseq5-info\nfairy-kiss-jp\nsimon01-com\ncareer-searcher-info\nogataengei-com\ntugunari55-xsrvjp\nrickun0401-com\nasentia-cojp\nbotaniquelife-com\naxceed-tax-com\nseigyobako-com\nyuya00yuya-com\nsekatu-com\nsakaizyukuanimationclubmemberonly-com\nvaomusic-xsrvjp\nkuranomachikado-com\nanshin-jutaku-com\nmdex-xsrvjp\nwings-shop-com\nsyadan-net\nofficels-xsrvjp\nunited-smiles-com\ncostech-xsrvjp\nhousewand7stone-com\ninter56-com\nbiyoujyuku-info\nces-ent-com\nfukushikikai-com\nburse\nfavori-tokyo-com\nhizanaoshikata-com\ntest-xinfo509-xserver-com\nmothercloud-biz\nryou1212-com\na3s3f23rsadfasf-com\nkiwanda-jp\nkando-honda-jp\npbear-jp\nxinfo720-xsrvjp\nhiguma-xsrvjp\nriquan-cojp\nxn--88j6ea1a3393bcta1uk721ac9l-asia\nvalueyume-com\ngimix-tv\nsunao-corp-com\nn-hoikukai-jp\nsuzuki-jun-xsrvjp\nno1eigo-biz\ntazima-net\nout-sourcing-cojp\nbookbooth-jp\ncssnite-sapporo-jp\nblockfun-net\ncia-j-com\ncloveregg-com\nmt-japan2-xsrvjp\nkoishi0105-com\nawaji-mandai-jp\nneko22-com\nah-tokyo-com\ngarden-one-net\nmichimoto-cl-com\nxinfo507-xsrvjp\npcnet-nejp\nsmsfacil-net\nminshuku-toshiya-com\nbrainphantasm-com\nkatteni-kanko-com\nsatoshi001-com\nxsample139-xsrvjp\nfukamayu-com\nm-hico-com\nsukegawa-office-com\ntenjinsita-com\ninterwindow-cojp\naplan-cojp\nhikakuichiran-com\nxn--av-693a1dpa20aaa2gsa2gd1bd4a8bzooolevh5230egdpb-com\nnsbz-net\nkawai-orjp\npref-shizuokajp\nnoble-trust-com\nnfa-g-com\nhelp-cashing-com\nunited-studio-com\nnogiya-com\nshijyou-karasumacon-com\npeeeeeee7-com\nkatokoyodo-com\nbkk-bz\nkikaku-keiei-com\ntu-han-shop-com\ngasenenews-citygas-com\nubijin-com\njin-cycle-xsrvjp\nxinfo126a-xsrvjp\nzenkaikyou-xsrvjp\nsatoshi001-xsrvjp\ngoenno-wa-com\ntakatori38-xsrvjp\nganbanchip-com\nfujiishinji-com\ngicland-cojp\nxsample51-xsrvjp\nfbms22-xsrvjp\nwebya-3-com\n4mr-method-com\nkogure21-cojp\nkushida-koumuten-jp\nshibuyacon-com\nweb-design-office-net\nodawaracon-com\nleffervescence-jp\ncamp-map-com\njohosyozai-biz\nzone-portal-info\ntestdomainx340-com\nxsample57-xsrvjp\nxsample70-xsrvjp\nequipment-com\nyushoya-com\nlayer-s-com\nxinfo102a-xsrvjp\nasuka-fujiwara-jp\ntsujikawa-net\nc3d-xsrvjp\nokonomi-sugino-com\nbeniiche-jp\nkokushi-musou-com\ntwchain-com\njapinglish-xsrvjp\nnyankox2-xsrvjp\nsuper-sozai-com\nxinfo538-xsrvjp\negao-kondo-com\nproject-mm-com\nillust-bag-com\nmothers-inc-com\ngluonz-com\nkindaikobo-com\nakiraclub-xsrvjp\nmusic-ikehara-net\nsanwahd-net\ngame1mart-com\ntyube-nisshin-syaken-com\nenyuu-ji-com\ndougamarketing-com\nalcarentacarny-com\ntest2-xinfo745-xserver-com\nnext-commu-xsrvjp\ninuzakura-xsrvjp\nsaksrv7-com\nkouichi541-com\nbalboa-trading-com\nbutugu-net-com\nnational-st-com\ntrendprichan-info\ncom-alpha-com\nv-glame-jp\nokawari-japan-com\npcmania\ntomiget-com\nspica-bs-jp\ninkyo-nyuudo-xsrvjp\nxsample316-xsrvjp\nonshinan-xsrvjp\nshizenkeitai-tamura-com\nndai-xsrvjp\nkyoubashicon-com\nsocial-tour-com\nxn--eckm3b6d2a9b3gua9f2dz124ebp0a-jp\nshinko-denki-xsrvjp\ntest-xsample314-xserver-com\nii-anbai-xsrvjp\nfischer-golf-com\ngion-yasu-com\nenglish-box-com\nedocon-jp\nxn--vekz09jiqk-com\nictsg-net\nkaiwajyutu-net\nmirumirukogao-com\nstdesign-jp\nfriends-ah-net\nhigashiumeda-yasu-com\ndolphin50-com\nktmn-biz\ntkdore-xsrvjp\nbe-flat-xsrvjp\nteam-cellacise-com\njnapcdc-com\ni-photokg-com\nzen-clean-com\nxn--4gq539c5gsb3a-com\nzzz00zzz-com\nukiuki-shopping-biz\nrokkosan-net\ns-click-net\nvachao-com\nreo825-net\nnobletrustfb-xsrvjp\nobentoutei-xsrvjp\njeo-stylist-com\n38hawaii-com\ntanimoto-ironworks-com\nxn--n8j9cqo2a0nk59oghe-com\npoco-a-poco-tokyo-com\ngiang\njeb-bz\n1010teisuiyu-net\npluss295-xsrvjp\nfreepiero-xsrvjp\njoemaguiredesign-com\nkaoru-nioi-com\njapanflower-xsrvjp\nkkkanri-xsrvjp\nappliyakun-xsrvjp\nhunabashi-rentacar-com\nxsample212-xsrvjp\ncambodia-today-com\nowl-office-com\n18teen-jp\ne-fugu-com\nkitakyucon-jp\ndenkiya-me\nmaemukikotoba-net\nmatsudatetakayuki-com\ntest-xsample34-xserver-com\nsrv-350-net\ndaisyo-biz\nhosoda-nousan-cojp\nadusamdodo-info\nkodomokai-jp\nmito-con-com\nbamboo-i-cojp\nkagamix-xsrvjp\nyumiz-jp\naspmanblog-info\nwebdesign-jp-net\nrwive-com\nallthezeal-com\nxinfo715-xsrvjp\n20pips-com\nsetagaya-jpnet\nianextproject-net\nkatazome-style-com\nohanashi-rosecafe-com\nbarbie-c-com\nuniversal-joy-net\ntcp-makeup-jp\nsada-office-jp\nmizutama-tv\nalohabeststyle-com\name-ha-biz\ncbhomefield-com\nl-communication-net\nasaicrop-com\n1lunch-marketing-com\nangie-xsrvjp\nmajcalmami-com\ndekogang-xsrvjp\ntoho-premium2012-jp\nxinfo735-xsrvjp\ndeko-gang-com\nheart-cs-com\nxinfo349-xsrvjp\ntsuiteru-cojp\numedacon-com\n012-vc\npets-e-com\npalca-xsrvjp\nmafu29-com\nairsplan-xsrvjp\nxsample107-xsrvjp\nclover-realestate-com\nsonic-labo-com\nlesson5-com\nmicreate-jp\nchokubai-com\nmoritagakuen-edjp\nf-kizuna-com\nxn--88j6ea1a0780bctddtas67ckx5cbp2b8xe-asia\nsendai-con-com\nsolarnavi-net\nura-keizai-com\nvivloom-com\nhama-shou-cojp\nhanacel-com\nezomac-com\nportal5\nmuura50-com\nshinbashidecon-com\nai523-com\nyuta77-com\nynny-xsrvjp\nrinohome-com\nhale29014129-xsrvjp\nxn--pckwb0cua2ei-jp\njoyplaza-cojp\nkaradano-xsrvjp\ndesignroom-xsrvjp\ntukasayou-com\nkasahara-shika-com\nnail-shikaku-com\ncont-p-com\njapanphoenix-xsrvjp\nohnojyousousai-cojp\ncsss-jp\ngallery-dan-com\nsho-info-com\ntest-xinfo766-xserver-com\nlocreo-jp\nwaisu-net\niyashi-no-ma-com\nsym-sym-net\ntynsystem-xsrvjp\ntest-xinfo756-xserver-com\nshukutoku-yoyaku-com\nkizuna0615-xsrvjp\nsato-club-com\nromandeal-com\nacai-tripleberry-com\nchain12step-xsrvjp\nisilon2\ndelico\nkashiwa-kaburaki-shaken-com\ntest-xinfo746-xserver-com\nxn--b9j2a1gzmkb4n-com\ncosmo-group-info\nyumetrain-jp\nneko-nikuq-net\nmitsuandjigens-com\nnh-purelyshop-com\nmamorigami-com\ntest-xinfo736-xserver-com\nisilon1\nshintaroubiz-com\nibako28-xsrvjp\nsaka-design-com\nmiu-flower-com\ntamagomura-com\nshioyama-info\ndrsmart-biz\nkitaya-dental-clinic-com\nblooming-dear-com\nb-life-mail-com\nsokuyokudou-com\ninoue-orjp\nmmsharon-xsrvjp\nkouchanservice-jp\nleapair-net\nhamamatsu-con-com\nsunnan-cojp\nbusiness88-biz\ntest-xinfo706-xserver-com\nxinfo506-xsrvjp\nhumans-y-com\nxsample138-xsrvjp\nrunimagine-com\nlevel3-xsrvjp\nohtsubo-clinic-jp\neskobe-com\numeda-yasu-com\nxn--dckiy8ad8fl0jub0bzhub-com\nk-tominaga-net\nasp-rsv-jp\nplatinacon-com\nfmharo-cojp\ngomi-calendar-info\nlapps-xsrvjp\nsportscosme-com\nthaicom-cojp\nherbnoaruseikatsu-com\ntti-i-cojp\nestem-group-com\n4x4-cojp\napp-producer-net\nclearstone-jp\nogatanouen-xsrvjp\nmaca-xsrvjp\ntectron-jp\nnishii-com\nweb-bz-com\nweb2tokyo-net\naseanfes-jp\naxiomaticmagazine-com\nsnd-xsrvjp\nsfy-cojp\nnet-oyaji-com\nhiro3237-xsrvjp\nep-coat-com\nacnalumni-com\nganriki-jp-net\nkeitai-custom-com\nauction-daiko-net\nhamamatsu-bankin-com\nag-tax-orjp\nyumegoal-com\ntest-xinfo586-xserver-com\nmatsukun0-com\nheavenshemp-com\nusuge-chiryou-info\ns-suppli-cojp\nsym-q-com\ndekitate-site-com\nmilkywayproject-com\nshimizu-esperanza-biz\ntk-ikebukuro-xsrvjp\nseo358-com\nmariko-cook-com\nxsample68-xsrvjp\ntest-xinfo566-xserver-com\ndoll-kaitai-com\nsuisolife-com\ntekunaka-com\noride-jp\nxn--eckp2gt04l48ehp0a8v3ams3b-com\nkashimako-com\ntest-xinfo556-xserver-com\nyoshikawa-wedding-com\nfacebook01-xsrvjp\nlearning-playce-com\ntest-xinfo546-xserver-com\nxinfo537-xsrvjp\nsamec-ct-com\ncultivate-xsrvjp\nmiraira-affiliate-com\ninfopremier-jp\nre-seul-com\nxsample169-xsrvjp\nseo-ex-com\ngamegekiyasu-com\neitai-org\ntest-xinfo536-xserver-com\nhi-as-eco-jp\nsuper-propolis-com\nadmac-jp\nxn--edktc2a4827cket59b-com\nstrider-jp\nmokkinsedori-com\nxn--p8judqlpc9fsf-jp\ntest-xinfo526-xserver-com\ntest-xsample227-xserver-com\npeicolor-jp\nnaisyhoku-biz\nkihodo-jp\nsg119\norganic-tshirts-net\nsakaicon-com\nthe-hoken-com\ntest-xinfo516-xserver-com\nlove-project-net\nuedakaihatsu-com\nyutaka-style-com\nxn--tdkl0c-com\nokusurifujin-com\nyamanisi-info\ninfodesign-jpn-net\ntest-xinfo506-xserver-com\nusami001-xsrvjp\ntsuchiura-info\nnattoku-naitei-jp\ntabiji-org\nhiratacy-com\nanblend-jp\nxsample315-xsrvjp\nuchiyama-gg-cojp\njs-ps-orjp\ntest-xsample221-xserver-com\ne-biss-jp\nrep81-com\nmedia-producer-jp\nsyoueibms-com\nfootball-fukuyama-com\ncharites-nail-com\npronto-xsrvjp\nblossom-hotel-com\nxinfo129a-xsrvjp\nxn--pckwbo6k815nvjfp43bt81d-jp\ntest-xinfo360-xserver-com\nunamu-ch-xsrvjp\nyamatoya-cleaning-com\nsmile-com-net\nfishtone-com\nkscompany-xsrvjp\ntakanorik66-xsrvjp\nashula-king-com\nfenikkusu-com\nold-domain-sale-com\ntest-xsample301-xserver-com\ninovation-xsrvjp\ntest-xinfo356-xserver-com\npenmaru3cg-com\ne-takara-com\nnlight-info\nblend-blog-com\nhoraiya-jp\nmatkaa-com\naki-takahashi-net\nmorisige-hotel-jp\nzest-camera-info\nkyu-be-info\nc-road-jp\nxsample99-xsrvjp\ndreamrice-jp\nxinfo105a-xsrvjp\nunicco-kyotojp\npisces678-com\nsg118\nfast-lifestyle-info\nkoyasan-xsrvjp\ngallery-mura-com\njscoach-com\nyositaro-xsrvjp\nomphalos-xsrvjp\ntest-xinfo350-xserver-com\nfreedomshigoto-com\nbuilderyoshi-xsrvjp\nhunabashi-shaken-com\ndilshad\nmasahome-cojp\nxsample211-xsrvjp\nweb2sendai-com\nmy-esu-com\nkasyu-jp\ndesignex-jp\ncatacrico-jp\n1tokkun-com\ns-ogikubo-net\nfudekoubou-com\ncocomo-interior-com\nmeirin-seni-cojp\ncadio-biz\ntoraikatz-xsrvjp\nsunlight-cleaning-jp\nsekkotsu-in\njapan-italia-com\ntoitoitoi-net\nraggachina-com\nd-strage-jp\ntoresenkeiba-com\nkyoumihonten-cojp\nsingi-biz\nnakagawa39-com\nbizm-ag\nhachiouji-shaken-com\ntest-xinfo346-xserver-com\ncitabria-cojp\nget1000man-com\nxinfo714-xsrvjp\ncopasystem-xsrvjp\noptimization-service-com\nkichijoji-con-com\nryom-design-com\nmoto888-net\nsmaphosticker-com\nshop-degree-jp\nmatsmile-jp\nbellness-com\nana-pr-jp\nnakano-suginami-syaken-com\neikaiwakoushi-com\ntycoon-com-com\nstudiog-xsrvjp\nbacksnet-com\nxsample106-xsrvjp\nami-amie-jp\nmaruka-uchiyama-com\nkindlenotukaikata-com\nwine-ec\nasmec-cojp\nabikobar-com\nmclamego-com\nuni-axis-com\nunking\nhiroisatoru-com\nkekkonsite-biz\ntomybikepark-com\naomori-wats-com\nsp-c-org\nxn--n8j4mybtf1e613xwn2bc64b-jp\nhorie-yasu-com\ntenjinplace-com\nh-s-xsrvjp\nlyrical-works-com\nedogawa-town-com\nlifejam-jp\ncar-uni-com\ninfozapper-biz\nneo-hair-jp\nhakkou-sushi-jp\nkagoshima-syaken-com\nniwadani-cojp\ndash-man-jp\nsinn9-com\nminoru7227-xsrvjp\nkudoken4-xsrvjp\nshop-orb-com\nmoney-sense-net\ndeveloper-xsrvjp\ntakariha02dive-com\ndegu-factory-com\nhaima-tonosato-com\n7082abc-com\ncool-rock-com\nstorageroom-jp\nxn--tckybd3guczb1829b7ghx6trhlupd-jp\notera-net\nstampp2-xsrvjp\nhomepark-xsrvjp\nipl-soft-xsrvjp\nu66-info\nrom-test-net\nsea-design-cojp\nzin-blue025z-com\nyume-affiliate-com\ninfo-z-net\ntwitterjp-net\nxinfo359-xsrvjp\nnet-sidejob-com\nxn--ccktea4bylb8496czbtysx-com\nxn--veky30o2gq-com\nhotel-kiyosato-com\ntontonton-jp\nfumisedori-com\nmr-pages-com\nhaggis-on-whey-com\nmomokuri-xsrvjp\ngobousei-info\n7memo-com\nxn--eckyb5bg3k-com\nfour-d-org\nchunichi-kodomojuku-com\nhappyplan-net-com\nalicestone-xsrvjp\nchangethemindandworld-com\nsilky-closet-com\nbutsujuji-xsrvjp\nrb-apps-com\natozrentacar-com\nfp-partners-com\nfukuzawa-xsrvjp\nwebpro-xsrvjp\ntest-xinfo-xserver342-com\nimmm21-com\ngourmet-circus-jp\nkumiyama-shaken-com\nqqpm5cb89-xsrvjp\nnarashino-jp\nshibajimusho-orjp\nxinfo505-xsrvjp\nsuper-arts-com\nmoebiarc-com\nace-pro-air-jp\niwaken-studio-com\ntuchi-con-com\nxsample137-xsrvjp\nyokoyan201-com\nhomepark-cojp\nplus-a-me\nkounotori-honpo-jp\nsteelkogyo-com\nmatsudocon-com\nijinjin-com\ntskym-jp\nkyouikukoyou-org\ngrapparetto-xsrvjp\nsylph-biz\nmoriokw-com\ndoroawa-sekken-info\nuenode-con-com\ncocoro-esthetics-com\napple-pie2-com\npclibs-com\nasahi-pack-com\nzumi-xsrvjp\naquacube-xsrvjp\naugking-lab-info\nclsc-jp\nyuri-pharma-com\notoku-tsuhan-com\naplaninc-xsrvjp\naaronbrowne-jp\nhishi-ki-cojp\nxn--pck2bza7489c4ld-com\nfujibus-cojp\naffiliate-school-net\ndenden0375-com\npainting-mouse-com\nlc-takatori-xsrvjp\ntajima-takamiya-com\nmusubinoayumi-com\nlahal-net\ndaim-global-com\ne-sakaki-com\nultraseo-net\nmfun-jp\nunhwa-mobi\nyuu-shi-kai-com\ncelebstyle-xsrvjp\ntoyoda-wedding-com\npages-xsrvjp\nmusashino-hp-jp\nmachiko-biz\nh-water-net\ne-gokai-jp\nxsample67-xsrvjp\nhkwj-cojp\nmed-plan-jp\nfurano-areaguide-com\nsweets-sakai-com\nzombie-star-com\ntoretate-net\nreveassocie-com\ne-bene-com\nyod-on-com\nmorito-k-cojp\nmerveille-ushimado-com\nvanah-kawagoe-com\nmeichu-jp\nbody-tc-info\niaso-supple-com\notaniah-com\nkokusan-takegami-com\nxinfo536-xsrvjp\ncdr-jp\nxn--vck8crcy307btiva-jpnet\nsocpartners-xsrvjp\nseo-clare-com\ntest-xinfo767-xserver-com\nxsample168-xsrvjp\nvakcom-xsrvjp\narata0613-com\nokashinosakai-xsrvjp\nutamaro-denki-com\ntaikokk-com\nxdock-net\ndbmagic-biz\nadvance-chirouka-com\nonishi-amimono-com\np-c-rescue-com\ndaikanyama-con-com\nriddlepuzzle-com\nnews-share-xsrvjp\napt-japan-com\nkitashinchi-yasu-com\nkankoku-keitai-com\nxn--gps-pg2j70g-net\nnihoneco-org\ne-interiorshop-com\notoxxxoto-net\nalohi-apopo-biz\nxinfo766-xsrvjp\ntanba-shaken-com\ni-mao-net\njf-aji-net\niphoneer-jp\ngraphium66-xsrvjp\nonejam-biz\nmaki-nameart-com\ntoriikengo-xsrvjp\nxsample314-xsrvjp\nt340-com\nmessage-japan-com\nsonicwave-nejp\nexistence-inc-com\ngrandeporte-net\nkk-union-biz\nkobeco-net\ngyousename-com\nshinseikai-dental-com\nreito2274-xsrvjp\ndoi-chiro-com\naristo-net-cojp\nyoshi-affili-com\nsaisinstar-com\ncontrax-cojp\nwebeer-info\nlogorin-com\nchristmas-giftcards-com\nlittle-ribbon-com\ngranmacoltd-com\ngoemon-the-web-com\ntaguchikaikei-com\nxinfo729-xsrvjp\nsoleado-t-xsrvjp\nsuzuki-kobo-com\nmusee-biz\nkagaloli-jp\nthe10-biz\ncui-cojp\nyou-photo-com\ntake-c2009-com\noz-ucar-jp\nariakesangyo-cojp\ndestiny01-xsrvjp\nxsample98-xsrvjp\nkaisekislot-com\nmakusora-jp\ntakanawa-clinic-com\nbecoca-xsrvjp\nstkmwdzm7-com\njunkoh-jp\nsub-click-xsrvjp\ntest-willgate-com\nncyell-com\npetanque-asia\nkudo114-com\ntest-xinfo592te-xserver-com\nyldc-org\n0nq-net\nadvance-ec-jp\nkartepost-com\nmachiori-jp\nion-ginza-com\nfaxdm-org\nxsample210-xsrvjp\nxcely-ht-com\ndrawiz-jp\nmasu-kazu-com\ntekkyo-biz\nversa-jp\ngeihoku-minsyuku-kamioka-com\nmonifihi-com\naha-online-shop-com\nj-sweat-com\nafirieitoshu-xsrvjp\nsocial-sendai-jp\nxinfo157a-xsrvjp\nyamada-ot-xsrvjp\nxn--88j2foda3h0b8ny00x2i5adx6d-jp\nkensaku-xsrvjp\nguccionliner-com\nokusamaya-com\nkompetis-com\nminds-farm-com\nled-kumamoto-com\nishi-kura-jp\nxn--n8jtcugwh9cqhlg845v6k6d-com\nmolamo-labs-com\nxinfo713-xsrvjp\naround-jpn-com\nstock-capital-com\ntrust-rb-com\n2580-org\ninfonich-cojp\ntomoyan11-info\nxn--gps-rm0e442jhgp-com\nblack007-biz\nk-thp-xsrvjp\ntagukaikei-xsrvjp\nondrecords-com\notakeiki-com\ntanmo-net\nbonne-chance-co\nmusashikoyamacon-com\nxn--kckk7aw5tpb8c-com\nopus77-xsrvjp\nootone-reien-com\nsakai-manekin-com\nkaigyojunbi-com\nuniversalcitycon-com\nosaka-roujin-jp\nenjoystreet-jp\ntest-xinfo591te-xserver-com\nxn--m-u8ts56nvoza-biz\nxn--3dsll-z53dvhlb9bwe97aphtgm016cftxa1m0b-com\ncleangreen-nagoya-com\nsolare-muromi-com\nharmonicsdesign-cojp\nxsample105-xsrvjp\nshop-authentic-com\nxn--b9j6am4izjxd2h2gq122d-jp\nteam-6eco-com\nsg117\nxn--qckq9mc4ac-com\nmaebashicon-net\nuni-p-net\nesaki-onlineshop-com\nwebaxel-jp\nmeigetudou-com\ntomkatsy-xsrvjp\nk2rinc-jp\nxinfo108a-xsrvjp\nwoof-jp\nshirahamafuminori-com\ncentral-medical-cojp\ndaikaen-mishima-com\nxn--vckg5a9g8fj6937cw1bjtsha205u-com\n2chinfo-com\neuroport-cutting-com\nkobeya-me\nars-town-com\nhold-chance-xsrvjp\nbcc-xsrvjp\nxn--u9j0c604kneons8a-com\nwakaba-f-net\nslimtaikei-com\nglow-united-com\ntestdomainx330-com\nkanngosi-kyuzinn-com\noyaizu-cojp\nyousworld-com\ngenkuu-jp\ncs-delight-cojp\nxn--u9j1hsdzb9d9bv308dff9c-net\nsilk-jubai-com\npcfureaiforest-com\nxn--eck6e6b987uy7i-jp\ntestsp1208272-com\nnishinocho-com\nsiriasu-info\nlatour-jp\nsps-mg-xsrvjp\nautm-hama-xsrvjp\nkouenjin-xsrvjp\nigakubu-guide-com\nbouquet-de-bianca-jp\nevent-kyuden-jp\ntestsp1208277-com\nxsvx1019774-xsrvjp\nxinfo744-xsrvjp\nxinfo358-xsrvjp\nfuriahau-com\none-kyoto-jp\nopt-01-com\npatec-xsrvjp\ndigital-global-agency-com\ns-eiken-com\ntosa-kanran-xsrvjp\n5june-com\ngantarou-com\njiin-xsrvjp\nstarfield00-biz\npet-hatakeshimeji-com\nayu-aclass-com\nmarushige-chicken-com\nfluentgarden-com\nxsample35-xsrvjp\nexercise-and-diet-net\nstoredx-net\nym-advice-com\nsg116\nmatsugenn-com\niineclub-com\nfreeman-affiliatekouza-com\nokusurishop-com\nyumekanaeyo-com\nxinfo504-xsrvjp\nkimuracooking-net\nmcprogram-com\navante-act-cojp\nxsample136-xsrvjp\nwakuwaku-tsuhan-com\nxn--gckg0b0b8evmbbb4044fll9bk5iqk9i-com\ntassmania-biz\nkana-xsrvjp\ntongdee-com\nmma-xsrvjp\npha08069-xsrvjp\nsanfuroa-com\nhiro042928-com\nlinxstone-com\ndokokanocafe-com\nt-bs-net\narcadiafp-net\n1000goku-net\ntpz-xsrvjp\niine-p6-info\ntaxiyoyaku-com\nchuchu3-com\ntsubasa114-com\npongsitgolden-com\nmotomachi-yasu-com\nd-rentacar-com\ntouhokumiyage-cojp\nfudousan-neta-com\ntnknbyk0103-xsrvjp\nreclaimthestreets-net\nnext11-xsrvjp\neishin-re-com\nmikasasports-cojp\niloveyou-fc-com\nnextstage-produce-com\ngklineconsulting-com\nhouki-ganka-com\nc-bz-net\nkitchen-kyoto-com\ndlappli-com\nchiken-navi-jp\nlingua-franca-jp\nstella-sr-net\nwebkohbo10-net\npapa3-com\nnin-fan-net\nalohi-apopo-net\nit-osaka-jp\ntakayukikawase-com\nheat-tech-biz\nm28-xsrvjp\noptsa-cojp\nrelaxstart-net\nmidenaru-biz\nyoutubejp-xsrvjp\ntsuhan-faq-com\ntoyoriken-cojp\n9nine-fan-net\nurayasusunclinic-jp\nshimabara-shaken-com\nx-system-biz\nkyougakukan-jp\nnaka2220-xsrvjp\nhiro-design-jp\nnaturezo-jp\nryokounokensakudayo-biz\nwakeshoten-cojp\nnote-sp-com\nxsample66-xsrvjp\ntenalux-jp\nkokkororen-com\nlight-hous-com\nalabrava-com\ncarcenter-khoki-com\nyama1pm-com\nxn--nbk1d7buav9cududsezd4619b-com\n2cv-club-com\nxinfo360-xsrvjp\nxinfo535-xsrvjp\nrmtop-jp\nxsample167-xsrvjp\nfutekigou-xsrvjp\nizumi-k1-jp\nhokkaido-ra-jp\nnews-trend-jp\nsv2nd-com\nancreate-jp\nyumepi-net\nroom-worker-com\nnedlize-us\nkishiwada-syaken-com\nlabellart-com\njunpa-com\ntsuruya015-xsrvjp\n8project-jp\nmendokorosato-com\nmaccarina-cojp\nmiyanur-com\nonshinan-com\nsato-bankin-jp\nkomazawa-ttc-com\namritara-com\nxn--pckuae6a2167c95i-biz\ngaiji-movie-jp\nonlinestoreexchange-com\nipasso-jp\nxsample313-xsrvjp\ns340-com\nwassalon-jp\nlotopj-xsrvjp\ntyokkan-com\nrunchan-net\ntomtrade-xsrvjp\n1fineday-biz\nat-iroha-xsrvjp\nsuntruss-cojp\nnaret-jp\nisotope25jun-xsrvjp\nwakuwakudouga-com\nchouju-orjp\nwebtest-client-com\ntennenzinen-com\nmorita-shika-net\nshirafuji-xsrvjp\nfutekigo-com\nukuuku-com\nharta\nmiyama-satoko-com\nmikuyaproject-com\ntouch-japan-net\neastshining-com\ngen-en-monitor-com\nejan-biz\nspock-xsrvjp\njptravel-asia\nkurohigehonpo-com\ntsbizs-com\nseiwakoumuten-com\ncw-shonan-info\nkurofune37-com\nyumerita7769-com\nmietakun-com\nadamforcongress-com\nchibakogao-com\n8one-jp\neasyfreemind-com\nxsample97-xsrvjp\nmooncom-jp\ntechnaceres-com\ne-sanoshopping-com\nmorioka-ind-cojp\nsinsihuku-club-com\nmk-bikelove-com\nisochugoku-cojp\nsato-bankin-xsrvjp\nfureai-navi-com\nyo111-net\npasoigusa-com\nfriendship-jr-com\nrs12-xsrvjp\niphoneworldmap-com\nshiranecycle-com\ndeltazulu-xsrvjp\nsohjusha-cojp\nelection-xsrvjp\nsteels-jp\nstoreworks-jp\nkasegu888-com\nyao-en-com\nprofit-gym-jp\nfujishina-com\nskw777-com\nshabering-com\nkaiyoutei-com\nwakasa-obama-jp\ngatherlink-net\nno1-marketingcoach-com\natagosan-xsrvjp\nclub-rize-com\nmiteyan-com\nhokkaido-shikinoaji-com\nhitokoto1221-com\nzen-platform-jp\nxinfo712-xsrvjp\nsi-a-net\njey-string-net\njyosyu-udon-jp\nraisuhatakefuji-com\ncocoro-rhythm-com\nmm-style-net\nlearve-jp\nteam-sns-jp\ncontrax-xsrvjp\ndidier\nnobuaki-xsrvjp\nimaizumi-dc-com\nsamurai-ticket-com\nminamoto-jitsugyo-com\nxn--mdko7702aecw-com\nsouzirou-com\nwebworkroom-com\nkanagawaku-net\nsouzoku-houki-org\nhumainus-info\nmusashikosugicon-com\ngsxsetp1-com\nfujir-net\nmcprogram-net\nmarketing-mindset-com\nta-93-com\nxxxkawaii-info\ndanceconnection-jp\njyuku-me\npridejapan-net\nmahalo-love-com\ntokyo-skytree-navi-com\nst-angelina-com\nnovartis-app-xsrvjp\nsnok-com\nsaikinokai-com\nsosyaken-jp\ngeinouch-com\nxn--48j7bzfzeohwa4c1c7a5ah7pd1297hupq830awta860ojid-net\nvegaworld-xsrvjp\njinpu-kai-jp\nimaccer-com\nchuyo-denon-cojp\nmarufuku-nouen-com\nsenbeido-kyoto-com\nkenko-dna-com\nyoubook-xsrvjp\nminobusan-trail-com\noffice-koh-com\nsekizawa-biz\ntohoku-chuo-com\nexercisediet-xsrvjp\nkamikamihobby-net\nlooping-jp\nfussa-shaken-com\nwilliamhill-japan-info\noisii-takoyaki-com\nhangahokkaido-com\nyokamon-biz\nmomokane-com\nracersnavi-com\nlight-kan-com\npiaaplus-com\nyarujan-xsrvjp\nohisamahouse-xsrvjp\natomvetme-com\nduelmasters-kaitori-com\noo0n-xsrvjp\n3d-printers-jp\ntkt-center-xsrvjp\nsg115\nhikari-ntt-com\npartsya-com\nbest-fresh-net\nlastier-com\nnikken-ltd-cojp\npkcreek-com\nm-takato-com\nopen-chirashi-com\nchamrocca-com\natamidecon-com\nyama-toku-com\nsancoa-hbs-com\nsunrise-inc-com\ngoodchance-biz\nseminar-jp-info\nyu-i-net\nxinfo743-xsrvjp\nxinfo357-xsrvjp\nsalon-lyn-com\nminoritougei-com\ncreclamitaka-com\nsakicorp-com\nhoryukai-com\nkaztas-com\nfukuyama-mokukei-com\nshiseibi-jp\nstupidproxy-com\nxsample34-xsrvjp\nwings-consulting-jp\nceltislab-xsrvjp\nthefukugyou-com\njamselection-com\nhyuma2010-com\nonotoukisokuryou-com\nkk-hinode-cojp\ngraceflowerart-com\nchip-pe\nsokabe-biz\nstrelicarski-savez-srbije-org\niboji-net\nwashizucleaning-com\ndysczs-com\nyanheejapan-info\nsurgery-iwate-med-jp\nxinfo503-xsrvjp\ntokyowill-lionsclub-org\nkagula-xsrvjp\ndaimon-cl-com\nxsample135-xsrvjp\nnlp-island-jp\nlfamille-com\ntest-xinfo764-xserver-com\nrefresh-kaatsu-jp\nhondainsatsu-com\noffice-ogawa-biz\nso-na-507-com\nsakura-0322-xsrvjp\nbizsp-net\nxn--n9jtb0cui4i1f2488azjtak97d-net\nnishikawa-camera-com\nfujimura-shika-com\nyokohamaconpa-com\nise-lotasclub-shaken-com\nswagger-co-com\nkyokawaseikeigeka-com\nkudamonooyasai-com\necatch-mhss-net\nnanba-dance-com\nchoishimichi-com\nspoiler\ndenritsu-lighting-com\ntest-xinfo734-xserver-com\nsg114\nuecyan-net\nthebluesky-xsrvjp\nmaruyo-xxx1-com\ntakahashi-jun-com\ntest-xinfo724-xserver-com\nr-sun24-com\nhamamatsu-coating-com\npc-katekyo-com\ng-laser-net\njas-pet-com\ntest-xinfo714-xserver-com\nwebkikaku-com\nrarewater-biz\ndeecrea-com\ndearmine-jp\nmiecon-net\ntest-xinfo704-xserver-com\ninter-plan-jp\ninfowinwin-net\nshinafu-jp\ntetsutabi-xsrvjp\nmiraikentiku-com\ntobie0508-com\neajpn-com\ntest5150-asia\nks-holdings-com\nhazama-design-com\niworkin-asia\nmao-mao-cojp\nmietakun-net\nhijirinone-com\nd-cruies-com\na-gaienmae-com\nxn--kckj3dudb-biz\niscn-xsrvjp\ngolfcraftjapan-com\nsun-i-org\nkawasho-hl-jp\ne-youkan-com\ninfinityinfo-xsrvjp\nmurisoku1-biz\nitukinosato-xsrvjp\nxsample65-xsrvjp\nstudio-phiz-com\ntheunbookables-com\ni-arc-com\nonly1fashion-com\nitajiki-com\n990933-com\nmichiga-com\nasdageorgeclothingrange-com\nw-catalog-net\nsg113\nshoprakuten-com\nxinfo534-xsrvjp\nxn--p8j0c259m22li4s-net\nxsample166-xsrvjp\neggconsul-com\nsoranoao-xsrvjp\nageo-shaken-com\nisujkn-com\npricewave-net\nxn--yckc2auxd4b1246f4y1b-jp\nxinfo591te-xsrvjp\nchiffoncolor-com\ndesignote-jp\nasebyebye-info\ntest-xinfo594-xserver-com\nxn--nckg8jh0ek1dbb7f7459eehdhr8gg18a977c-net\nosho-fragrance-com\n13office-com\nsarobetu-info\npitchshifter-net\noc1-xsrvjp\nrakudoku-akashi-com\nxsample320-xsrvjp\nyukendou-com\nadmaterial-cojp\nkomazawacon-com\nnanba-yasu-com\nnanmoku-net\njapanese-movie-info\norihu-net\nlunion-biz\nsantoku-net-cojp\nkashinotakanori-com\ndokuritujison-com\nmirakuruza-com\npmc-cr-jp\ntaikai-jp\njanzzysbar-com\njats-cojp\ndaily-speech-com\ntrade-king-biz\ntest-xinfo554-xserver-com\nthaiivf-com\njp-alna-com\nmake-sms-com\ntest-xinfo544-xserver-com\nrehabilitation-jp\nxn--49s538bm8ux8c-net\ni-utsuwa-com\nsmaphoappli-factory-info\ngreen-cycle-biz\numai-yo-com\nintrepid-project-org\njoshin-xsrvjp\nxn--line-tk4c0cf2ooiyhod-jp\nalpinawater-info\notogr-shizuoka-net\nshougaihoken-info\nmunakata-cl-jp\ntest-xinfo524-xserver-com\nve-g-com\nfreeinfoapp-com\nxn--pckhnj8ayp6atu7e2djb-com\nmeiyu-ip-jp\nkenkou-bi-biz\nhakurin-com\ntest-xinfo514-xserver-com\npalulu-jp\nbarpolaris-com\nadic-orjp\ntrust-solution-jp\ntest-xinfo504-xserver-com\nxsample96-xsrvjp\ntosakanran-com\nhyuga-daiichihotel-com\nkonwakai-jp\nxn--fa-og4aod4a8v-com\nlongsmart-mobi\nm-design-xsrvjp\nxn--5ckhs7czfb6c0dd-com\natstyle-xsrvjp\ntese0903-com\noda-estate-com\ncsw-jyuken-com\ndreammanager-info\nsg109\nosaka-shaken-senmon-com\njardin-favori-com\natelier7-jp\nyatsutakamikoshi-com\naimistone-xsrvjp\nrs11-xsrvjp\nanomaly-cojp\ntmp-inc-com\nxsample207-xsrvjp\nhandsfreedigitalcamera-com\nkaorigikoubou-cojp\ntokeishop-jp\ncrp-sapporo-com\neuroport-cameo-com\nnihonbashiconpa-com\nsuna-lab-com\ntest-xsample308-xserver-com\ntrimworks-jp\nkawaramachi-yasu-com\nbrowser-check-jp\nmerrittmurals-com\nsakuyafb-xsrvjp\ncardboard-art-com\nmnmj-asia\nkyushugodo-jp\ntokudax-com\naltechjp-com\ntestsp1208319-com\ncamonoe-jp\nyumesiokaze-com\nxn--lurea-mm4dysia-jp\ninaka-nakoudo-com\nxinfo711-xsrvjp\ntcmic-net\nw-shinkyu-com\nmssrv-org\nchugeikanko-com\nxn--3kqu3oh0b77g34dt2lxzn4mre5ohlvlx1c-com\nfrou-frou-org\nh2works-jp\nxn--akb-fu0e63gwsk9wi4dt38bp4bk6ivrnww8e2uwcils-com\nhoukon50-com\ngreen-dental-info\nchayamachi-yasu-com\ntestdomainx333-com\ninfinitewisdom8-com\nrucksackspace-com\neigo-joutatsu-net\nsg106\neuropa-artist-com\nrocohouse-jp\nkingrocker7-com\nafwd081028-xsrvjp\ntestdomainx338-com\nyushonokai-com\nxn--ihqw3zba21d-biz\ntest-xinfo761te-xserver-com\ntomimido28-com\nirinamihira-net\nizunousagi-jp\nnomikaisiyouze-com\nxsample103-xsrvjp\nion-ceramic-com\ncentral-bldg-clean-com\ntest-xinfo354-xserver-com\ngolfshoshinsya-com\npochitama-jp\nhtz8513-xsrvjp\nkoura-takeshi-com\nkangoshi-service-com\nthemanwhomarriedhimself-com\ntenshoko-com\nhamamatsuchocon-com\nfukudashika-jp\nringo-no-ki-com\ndensai-s-com\nkaisen-fan-com\nheartwing-info\ne-joho-com\ncivil-design-net\nlife21inc-com\ntani-you-com\nvilla3-jp\nchoanshin-com\nsyugaa0415-com\ncrapre-kawasaki-net\nwakayama-yasu-com\nto-ritsu-cojp\ntomonphoto-com\nakashisyuhan-com\ntwproducts-jp\nxinfo156a-xsrvjp\nfuneralville-xsrvjp\nsakaearumi-cojp\nmakibi-xsrvjp\nsweep-aside-com\njiin-net\nkouenjin-com\nfushigiplate-com\nroc-cojp\nkansaibridal-com\nf-magic-com\n4tune-nejp\nmikagesushi-net\nryouhei0206-com\nphotoria-jp\nydental-com\nakihonda-com\nsasanobu2228-com\nmanwatching2010-com\nxinfo742-xsrvjp\nxinfo356-xsrvjp\nateam-cojp\nsmilinghpj-org\nsmartphone-affili-com\nam-shika-com\nsni-tobitakyu-orjp\nofc-osaka-com\nrealize-iboc-com\nadvance-soleil-com\nsannou-r-jp\nkotobus-com\nbbq-con-com\nhopewill-net\nasbestos-jp\nxn--1sq130aw9j5qh-com\ndunan123-xsrvjp\nkirikui-com\nnakasendo-cycle-com\nxinfo739-xsrvjp\nyachimata-ds-com\natsushitagawa-com\nguitarstylist-com\nxinfo502-xsrvjp\nxsample134-xsrvjp\nparallel-xsrvjp\ndouble-moon-info\nmankintan-net\ninvside-jp\nsnag-golf-net\nfaith-hair-jp\nbs-saori-com\nli-ta-jp\ndalmatian-jp\nactionscript4flash-com\n5con-jp\nust-tsu-jp\nstudio-zeal-com\noffice-nis-com\nohta-cl-com\np-con-net\nsekisondb-xsrvjp\nmcrownroyal-xsrvjp\nmentalcafe-net\nyumesake-com\ntokubetu-orjp\nhobbymall-xsrvjp\noita-syaken-com\ninuno-cage-com\njones5672-com\npsychicno9-com\nmarei-me\ninc88-xsrvjp\nmocolife-xsrvjp\nabundance3313-com\nmasudaya-net\nnews24s-asia\nkatesippey-com\npha10074-xsrvjp\ntsi-p-com\nraysfactory-jp\nxsample335-xsrvjp\nmoki\ntenmabashicon-com\norionxserver-xsrvjp\nnmtjapan-com\nfutami-xsrvjp\nradia-xsrvjp\ntestxdomain303-com\nguggenheim-m-com\nnikibitosayonara-com\nkis-s-com\nlush-xsrvjp\natelier-stellar-com\na-cherry-blossom-com\nishimorikusa-com\ntestxdomain308-com\nmei-san-cojp\nkawaramachi-yasuhei-com\nitb-cojp\nyoshi0308-com\nxsample64-xsrvjp\nuchiyama-kikou-jp\nnaown-jp\nk-fukuda-dental-clinic-com\nrhrinks-com\nhotshot358-net\nnextplan-info\ntestxdomain314-com\nkyasshinngu-info\nlockonshop-xsrvjp\nnh-pma-com\nxinfo533-xsrvjp\ntrd2-xsrvjp\ntre-ca-com\n39city-net\nxsample165-xsrvjp\nshopuu-sedori-com\nsensatsu-com\nnetwork-jp-com\ntabekuru-net\nstayconnecticut-com\nall-cosme-xsrvjp\nokuei-com\n0250587150-com\nrokusetsu-com\nonlyrealinfo-com\ngakuseievent-com\nitanaka0722-com\nmakaino-com\nnotch502-xsrvjp\nopus77-net\nthe-secret3-com\nglittering-stars-com\nrumi-ne2-xsrvjp\nlien365-com\ntora2011-xsrvjp\nhanashite-sukkiri-com\ngamajapan-com\nsapporo2jyou-net\nmsg-philos-jp\nfresh-yamamoto-jp\nshinseikai-d-xsrvjp\nplus-q-net\nmoriya-cooking-jp\ncatsway-net\ndreamer-xsrvjp\ntrendstars-biz\nlead-next-com\nxsample311-xsrvjp\nshinshu-u-acjp\ntwitter-xsrvjp\nawamori-cojp\ntrophyqueen-jp\nkenko-ya-jp\ncrystalfallsmotel-com\nu-tan-jp\nnakajima-reiji-com\nfujix-corp-com\ni4wave-com\npaikaji1-cojp\n4mix-cocktail-com\nfukuikaikei-com\nfun-music-school-biz\nxsample215-xsrvjp\ndancealive-tv\nkeihan-green-com\nkintaroueco-com\njtreasures-com\nmensfaltusyon-info\nvenus-times-xsrvjp\ntresrey-d-com\nchina-phs-com\nnmaj-xsrvjp\nsenryukensetsu-com\nflicks-cojp\nwp-affiliate-info\nnas-recovery-jp\nkibune1923-com\nproject-ex-net\nrotier-xsrvjp\npazpaz7-com\nwhity-whity-net\ntoufu-yamato-com\nsisei-jp\nxsample95-xsrvjp\nbitclay-com\nt8-itakura-xsrvjp\nsubaru-juku-jp\ncbc-canada-com\nrichesse-hij-com\ntokei-akashiya-com\nty-plan-net\ntest62-xsrvjp\nmarupuri-jp\ngmunion-xsrvjp\ndetopush-com\nholidayclothesforwomen-com\nontamashop-com\nmr-clean-net\nwano-xsrvjp\nsuper-r-xsrvjp\nphiloballet-com\nnichibei-xsrvjp\nxsample206-xsrvjp\nbabyraids-net\naoyama-nail-com\neiken-home-com\ngalaxy-universe-com\nsg103\nstart-trust-jp\ndog-yamamoto-net\niwamun-xsrvjp\ntakada4976-com\nstech-pro-cojp\nosaka-transport-cojp\nblacksanta-cojp\nmvhits-com\nharajukudecon-com\nkingburak-net\nbnca-jp\nyamatoya21-jp\nle-reve-nail-com\nmtplace-biz\ncrecer-client-com\nwebessentials-biz\nwebbingstudio-com\nsps-mg-com\ncreate-o-com\nrusty2-com\nxinfo709-xsrvjp\nmfimp-com\nkonkatsu28-com\nsect-xsrvjp\npropodentalex-net\nbio-s-net\nxn--y8jua4a3aa5irgf4841fknvi-asia\nkasegujoho-com\nnordic-showcase-com\npower-rips-com\nsatoshi002-com\nzero-family-com\nfamicom-market-jp\narths-net-cojp\nmomose-orjp\ntestsp1201231231-com\ngolftool-net\nminamihorie-yasu-com\nyanehoken-com\nplaisir-beauty-com\ngalenhall-jp\nkaresansui-biz\nrestaurant-rumi-com\nhosomi-kogyo-cojp\nmugendou-osaka-com\nsg102\nkoubou-imaya-com\nsatotti-xsrvjp\n0507landbrain-com\nxsample102-xsrvjp\nryomolive-net\niwakuni-ymca-jp\nba373-xsrvjp\noptronics-ebook-com\ntrend7777-com\nrenkon777-com\nenflor-net\nkoshibasaki-com\ndiemilch-com\nfreelifec-com\nhandworkcafe-jp\n3dphoto-ar-com\nmorisitaya-com\nxinfo369-xsrvjp\nwtte-xsrvjp\nsea730-com\nnkohichi-com\npremiersoundfactory-com\nta-me-shi-te-net\ntestxdomain300-com\ntohan-co-com\nvin-nerd-com\npcsubnet-com\ncreate01-xsrvjp\ncrimp-jp\nyrnetmind-net\nvivify-xsrvjp\nc-how-jp\nomotesandou-h-net\naffiliate-matutake-com\nconcaragan-com\nglobalshopper4u-com\ncuisine-xsrvjp\nsept-couleur-com\ncontech-jp\nkouboukujyaku-com\nxinfo741-xsrvjp\nxinfo355-xsrvjp\nxn--u8jua8gqbf5b9c-com\ncolmn-cojp\nhoc-jp-com\nkumachan-info\nxn--ehqvz02f3w2b4ha256p-com\nmic-fishing-xsrvjp\nmegumibaby-com\nxinfo107a-xsrvjp\nnazegroup-jp\nbig8787-net\nsapporoshi-shaken-com\nelle-jt-net\nstrongroove-com\nsss-mizuno-cojp\nmiyasaka-ss-com\nmc-academy-info\nfrancheeno-com\nallmymate-com\nnichido-monthly-net\negbaism-com\nxinfo501-xsrvjp\ntoko-08campaign-com\nlakalomi-com\npokertips4beginners-com\nasaichuzo-xsrvjp\nk-tanigawa-com\nrokusetsu-net\nxsample133-xsrvjp\nfujigaoka-service-com\nprimo-st-com\nmy-nemuri-jp\nwalker-id-com\nnpo-panda-jp\nwakasho-xsrvjp\nthykm-net\nmmaru-biz\njtta2013-org\ngoodkyoto-com\ncesiumkafun-com\ntakitoh-com\nebmtrading-com\nkodokai-net\nkon-gene-com\nkk-morita-ss-cojp\ncorocorooon-com\nsskgroup-info\niwaki-shaken-com\nmidpalm-com\nnetcross-usr-xsrvjp\ntrader7-net\nikealife-net\nvege-tore-com\nnagoya-cci-com\npoca-ket-com\nsweet-emotion-net\nikefuku-xsrvjp\nult-japan-com\nenes-cojp\nlongwin-cojp\nnetdegungun-com\nmoney369-net\nfs-lifeworks-com\nmartinique-barreau-com\nkishimoto-hideo-jp\nkamoike-com\nseruraito-info\nsym-sym-xsrvjp\nstillkid-net\n851-jp\nsandaekimae-com\nkyoutani358-jp\ndiamond13-info\ncenturion-club-com\ncomleading-qrs-com\nlifecyclopedia-jp\ngateau-shirahama-com\nsoryusha-com\nlibary-tv\n9demo-info\nrosn-info\nys-grp-com\nhqt-jp\niharats-xsrvjp\nmarry-port-com\ni-friends-biz\nxsample63-xsrvjp\nakadon-biz\namilove-net\ndaisei-loginsystem-net\nuotake-jp\nwealth13-info\nse7en\nm-tresor-info\ncentury21cosmoland-net\nkasaiportal-com\nbluewings-xsrvjp\nmechanic-recruit-tsu-com\n82905236-com\nxinfo532-xsrvjp\nc-ty-jp\nxsample164-xsrvjp\nkomaya-info\nfauvizme-xsrvjp\nniiza-net\nsubaru-chuhan-jp\nlearningplay-xsrvjp\nkijuna-net\nkamig-cojp\n2d6y-jp\nnet-newstyle-jp\nyoiko-sakuragumi-com\ngeo-plan-cojp\nnewday-r-xsrvjp\nphahp-info\nhii-peple-com\nxn--a-geuzc8b9bxq-com\nakibeach666-com\nxn--ockc3d5hu632b-com\ntoco2dog-com\nhappy-777-biz\nreal-aide-com\navenier6288-com\naki2844-com\nxenoland-net\nitkids-jp\nheadandhand-xsrvjp\nmiyazu-net\nfugetsu-sapporo-cojp\ndragon-cross-xsrvjp\nowlinone-xsrvjp\ntm-ms-com\nsci-jpnet\nokusuripet-com\nsk-design-cojp\nyo-affiliate-info\nexcel-ins-jp\nphoenipro2-xsrvjp\nzgmfx20a-com\nallaboutplumbing-inc-com\naul-jp\nsuuu-design-com\ngarage-candle-com\noniku-xsrvjp\ntest-xinfo768-xserver-com\nlamb-cloud-xsrvjp\noffice-eql-com\nkoufu-con-com\nnpo-jcia-com\nnetapp2b\nuks-cc\nmiyako-aquaticadventure-com\nlakalomi-jp\nzaitakujosi-com\nxdock-xsrvjp\nestenadsonic-mobi\ninsatu-hikaku-com\ntest-xinfo765-xserver-com\nwabisabi-ya-com\nxsample94-xsrvjp\nmd-trunk-box-com\nvital-life-cojp\ndesign-memo-net\nkusatsujuku-jp\ntestsiefafasdf121219-com\nsw201212-com\nlegend-mj-com\nasaichuzo-com\nfleugel-xsrvjp\nxn--u9j282gwio42bb83h-com\nxinfo563-xsrvjp\nroom-coating-com\nr-union-org\nnayamikokuhuku-com\ncelebstyle-jp\nlivetp-com\nmrise-xsrvjp\noyayubi-cojp\ntest-xinfo758-xserver-com\ngasenenews-xsrvjp\nborn-in-the-darkforest-com\ncredi-hikkoshi-com\n108-octo-com\nnayaminai-net\nhfog-info\narafor-com\nulife-reform-com\nkyoryu-shougi-com\nmuramatsunews-info\na2unit-com\nshikishiki-com\nbaseballgear-jp\nconsult-semi-com\nsesame123-net\nkurahashi-hifuka-com\nsasahaya8-xsrvjp\nootani-xsrvjp\ngolden-item-cojp\nyutaking-com\nxinfo708-xsrvjp\nxn--z8j2bwkxag2fvhmi9cc9847r-com\nrafjp-org\nmholi-com\nsuzutech-com\nrimosuke-net\nerena-ono-net\niowanazkids-org\ndn-net-cojp\nkyabaraku-jp\nkeihin-technical-com\njosho-kiryu-com\nyou242-com\naruz-shop-com\nsaisokunews-com\nmitsukawa-net\nhairsupple-jp\nrt-planning-com\nhoken-partner-com\narbel-xsrvjp\nb-garden-com\nryu-tan1945-com\ntest2-xinfo701-xserver-com\nwellnext-info\nxn--ols92risjhpv-asia\nksl-auction-com\nhanaoka-dc-net\nrom9-xsrvjp\nxsample101-xsrvjp\nxxsunflowerxx-com\nnoto-xsrvjp\ntcplus-xsrvjp\nxn--u9j5h1btf1es15qifb9z6hcj5d-jp\ntsunagaru-ktq-com\nmyhome-uehara-com\nakihisakondo-fc-net\nbmarket-inc-com\nbestplanning-nejp\nkessetsu-net\nfly-sky-asia\nmeiyobiz-xsrvjp\ntjvm01-com\nlapilos-pure-com\nyoyakuweb-net\nimmersion-xsrvjp\naval-jp\njpzekken-com\nkichijoji-unmei-com\nfuku-sui-net\nhamacon-cojp\nbestlife-ytf-cojp\nxinfo594-xsrvjp\nmutsumi-rental-com\nxn--eck7alg1e2b-biz\nyoungmate-jp\nthrob-xsrvjp\nanpeiji-net\nxn--u9j5h1btf1e613xwr2drrjbqs-com\nmiyagikankou-xsrvjp\nhys-inc-com\nnananasalon-com\ncrerea-d-com\nm-shop-net\ndr-hiro-com\nexcelpon-com\ndelta-group-xsrvjp\nezcite-net\ntest-xsample30-xserver-com\nneo708-xsrvjp\nall-dietary-supplements-net\nx1gg-com\nkeb-xsrvjp\nxn--u9j0c2f2crdwc2cwdv219fiuc-biz\nxsample330-xsrvjp\nsatyrise-xsrvjp\nrt-planning-xsrvjp\ncutout-jag-com\nxinfo740-xsrvjp\nxinfo354-xsrvjp\nshigeno-motors-com\noisii-wan-info\nkeepcool-biz\nyuukyuu-com\nmemokore-com\nkenko-coffee-com\ngood113-com\nrealgrow-cojp\nxn--68je3c7dsev110a6cu7y0e6xk71t-jp\nworldwidejob-info\nxsample31-xsrvjp\nmicro-powder-cojp\nt-moving-com\ndesignbnk-com\nryouguchi-salon-com\njapanese-goods-biz\nnexenta1\nfbmarketing-lecture-com\nharipanda-com\nfnettest-com\nnabeshika-com\nflysky-xsrvjp\nheartfultrust-xsrvjp\nxsample132-xsrvjp\nliveplus-xsrvjp\nashibatobi-orjp\nhp-omakase-com\naugace81-com\nsrsrsrno-1-com\ntalkwith-jp\nxn--u9jb5p4ctkpbzdu307a19ai49kda-jp\neasy-pace-com\nsky-aff-com\n6348-cojp\nm-styles-jp\nkazoorock-com\nja-suzuka-orjp\nmtb-production-info\ntrd-xsrvjp\nwwvision-xsrvjp\nontaya-com\nxn--vck0et49h-com\nkenkou-dajya-com\nbunkagakuin-net\nsutekini-net\nblackma-n-com\nomiyacon-com\nengtests-cojp\nmayub0628-com\nlink-face-com\nhoken-opinion-com\ngessyu50man-com\nuduki65-com\nkusuki-biz\nmacbook-fan-com\nwillowtree-xsrvjp\nckb-xsrvjp\nciel-c-jp\nuedafumio-xsrvjp\ntakaranoyado-com\nxsample209-xsrvjp\ntest-xinfo762-xserver-com\ntarinukarte-com\nshirasaki-hifuka-com\nyushoya-net\nmekikijuku-jp\nve-gate-com\nyoneharu-net\nkoube-shaken-com\ndolphin-watch-net\npanarl-cojp\nsweet-w-com\ntest-xinfo742-xserver-com\nmuw-do-com\nsedorinomirai-com\nxn--zckqft4pu73w8go-jp\nravenrileyisahottie-com\nbiyakusalon-com\ntest-xinfo732-xserver-com\nxsample62-xsrvjp\nxn--30r99m89hxoam8ze2n05l-biz\nnetviewer\nkite-misawa-com\najajajajajaw-xsrvjp\nteruhito-thank-com\nyuasisu-net\ntest-xinfo722-xserver-com\ntest-xinfo702-xserver-com\nk-kotani-com\nikebukuro-tk-com\ntem-baby-com\ntest-xinfo712-xserver-com\nxinfo531-xsrvjp\ncpa-museum-com\nxn--icko4ae3d6o-jp\nxsample163-xsrvjp\neishinjuku-xsrvjp\noriginaltshirt-jp\nvision-industries-cojp\ncandy-0210-xsrvjp\nsonicjob-com\nbijinkan1988-com\nykd-cojp\nappliyakun-net\nimperial-bms-com\njiko-jitugen-info\ntprint-info\nmatsushitasatomi-com\nremedier-net\nrakupa-com\nwp-customize-net\ntatsuokw-com\ncodes-a-com\ns-unit-xsrvjp\ndreamtoma-com\nhaatm-net\nsky-afiri-com\nsisan-unnyou-asia\nhawaiiwater-tohoku-com\ngoods1-com\nalex-ah-com\nyouvision-biz\nisa-grjp\nxsample308-xsrvjp\nfumitan-net\nkizimun-net\nmachinaka-link-net\nkaradalab-jp\nsptm-i-xsrvjp\n653655-com\nd-salescopy-com\namano38-com\na-cue-info\nkawaramachi-ponto-com\nfujiwara-ahp-com\ngarden2495-xsrvjp\nsky-afiri-xsrvjp\nmodernchild-jp-com\ny-studio-jp\nkimanmakoubou-kikori-com\nmonnickendam-dia-com\nfirewing-xsrvjp\nplan-menkyo-com\nassam89-net\ntest-xinfo592-xserver-com\nsupport-surunara-com\nnobunobu981-xsrvjp\nhyugads-xsrvjp\njoin-with-jp\nosusume-net-com\ntkitano-com\nkaigyo-kekkon-com\nyokosuka-shaken-com\nkeituiherunia-com\natrapas1-xsrvjp\nxsample93-xsrvjp\nteru-dental-com\nkyo-kure-com\nreal-trade-cojp\ncredoseitai-xsrvjp\nnew-figyua-com\ntest-xinfo562-xserver-com\nseiko-kaiun-com\ngoogoojapan-xsrvjp\njorro-design-com\nxn--v8jvcby2l2b4hqftnh804cpktafq8h-net\nland-create-cojp\nguitar-shop-cojp\nfrosty-school-com\ntest-xinfo552-xserver-com\nyunifurerm-com\nxinfo562-xsrvjp\nmeishi-plus-com\nclipmusic-cojp\nsap-inc-cojp\nxn--line-ym4cqkvg9752bcyva-jp\nsenior-care-cojp\ncrazywedding-jp\ndreamstage-weekly-net\ntest-xinfo542-xserver-com\ntoruscloud-com\nsatoo-biz\nokeya2525-xsrvjp\nbrand-shop-xsrvjp\nyuzuruhassamu-biz\nikkyu-seikotu-com\npet-academy-com\ntest-xinfo532-xserver-com\nnadia-bz\nportal-website-biz\nheart-flow-com\nmasu-okazu-com\nhidamarinet-com\ntest-xinfo522-xserver-com\nalienfunnypot-com\nnetwork-hikari-com\nskystream-info\nkessai-ikkatsuhikaku-com\ntakepon7-com\ntest-xinfo512-xserver-com\nl-bamboo-com\npdevelop-xsrvjp\nkenshoukan-com\nsugaoreiko-com\nofficesakura-com\ntech-angle-xsrvjp\nxinfo707-xsrvjp\ntest-xinfo502-xserver-com\nfusa-cojp\nmodelcase-net\ng-factory-xsrvjp\nxn--vsqv9lppf53f-com\nxhtml5-jp\nkeihan-ophelia-com\n2week-info\nbrand-repair-com\nmmm-cx\nunicolabo-jp\nyokkaichi-mj-com\nmy-powerspot-com\nbtest-xsrvjp\nkoba-i-xsrvjp\nminacom-xsrvjp\nt-eigo-com\nndu-ec-com\norganicvegereview-com\nplusone-ps-com\nyuki0509-com\ntest-xsample326-xserver-com\nbamstest-com\npeace-shop-com\nhikaku-creditcard-net\nnano69-jp\nchokki-com\nohimesama-info\ndjtomo-com\npopcorn-papa-com\nlife-go-info\nsofuken-com\ntest-xsample306-xserver-com\nyokoi-site-studio-cojp\ntmc-labo-com\nrom8-xsrvjp\ntmi-st-com\nbranduce-xsrvjp\nsunnysh-xsrvjp\nkurt120-xsrvjp\ntsuyahime-org\nanti-aging-club-net\npropeller-pigs-com\nshuihubook-com\none-sky-net\nmkksh-jp\ntechnosound-cojp\nyumaishodo-xsrvjp\nb33-org\nsayuu-jp\nkiyotaki3-com\ntontonlife-com\nnetokaru-com\ntenpoo-xsrvjp\nxsvx1019633-xsrvjp\nakitacon-com\nxinfo593-xsrvjp\nxsvx1013269-xsrvjp\nselection-up-com\nkuma4864-com\njandc-xsrvjp\ndaieltuto-info\nhanjyo-info\ngarasunosato-com\ndirectoryfound-com\nmy-days-off-com\nstorey-s-com\nland-21-com\nxinfo122a-xsrvjp\nxn--t8j3b4ef5oa1c8e1srau1b8r-jp\nkyara-jpncom\neuroport-stika-com\ntest-xinfo352-xserver-com\nyt-kaikei-com\nsnaptokyo-jp\ncollect-xsrvjp\nxinfo353-xsrvjp\nhiserve-cojp\ntokyodegibe-xsrvjp\nrockeys-biz\nii-kao-com\nayabeshi-jp\ntoint-net\nainsel-xsrvjp\nfumika-shimizu-net\nmhousing-jp\ntakatora7-com\nhoriecon-com\nmachikado-tokyojp\nthe-kobetsu-com\nmdt-cms-net\nsakiyama-bc-com\ninfolma-xsrvjp\ninnervision-xsrvjp\nappri-ya-com\ncrimage-jp\nspringwater-h-com\nenglishfamiliar-com\ns-d-h-com\nwoorom-com\nakasaka-eyes-com\nxinfo546-xsrvjp\nchibadiet-m-com\nmizu-shori-xsrvjp\nxn--3-4eu4ewb4f-jp\nxsample131-xsrvjp\nmatusima9656-com\narga1039-xsrvjp\nartoria-xsrvjp\nbigtrout80up-xsrvjp\nxn--navi-ul4c1e8bg9i0h4h-jp\njtta2012-org\nkoneko-navi-com\nstella-si-com\nkyoto-ennosato-com\nnijiironotane-com\nstudiobibi-cojp\nshahotaiou-com\nryokanichinoi-com\ne-crom-com\nxinfo509-xsrvjp\nbaat-memory-com\ndumpvars-com\ns-atoz-com\ncbs-datsumou-com\npackuntyo-xsrvjp\nseifuku-labo-com\ncozy-cafe-grace-com\nyasui-press-com\nherbest-college-com\nshi-gyo-com\nbijin007-com\nharaganka-orjp\nhigh-top-jp\nbluemurder-biz\nrea-lizar-com\ntahatsu-net\npitat-nabari-xsrvjp\nbeautybeast-cafe-com\nyoruslim-info\nkayama-sakaki-cojp\nsagawa-construction-com\nhomebs-net\nsumizoku-com\nalive-corp-cojp\nsaikounosumai-com\ntiger-dragon-org\nxn--0ck0d1a2et21sbko82s-com\ntcigp-net\ntestxdomain310-com\nhochzeit-profis-com\nbonn0815-info\nmedical-chain-orjp\nkoizumi-orjp\nxn--t8jg7fsgvi0d2h2g-jp\nagir-osaka-com\nadman-jp\njsotop-com\nseiko-kaiun-net\nxsample61-xsrvjp\nmuryo-offer-com\nqdcop-com\nlsecretservice-com\ntoushirou-web-com\nfukushi9000-com\nht-produce-xsrvjp\ntakeshi-dream-biz\nxn--eck2csav0byit522b1t9a6fk2u5d-biz\nxn--cgi-qs9d423tgelegd-net\nabundance33-info\nsemco-okuda-com\nxinfo529-xsrvjp\nktt-school-jp\np-fine-biz\nxsample162-xsrvjp\nsuccessmindset-info\nyu-momo-com\nichinoi-jp\nmaru8maru8-com\nakizukiminami-com\nutahutah-com\nonokan-jp\ng-freak-com\nnewbiz-task-com\ntestsaba-hiroo-prime-com\nweilaigongben-com\nwirelesspencamera-net\ncycle-force-com\nneltutokasegu-biz\nrlifesupport-com\ncattly-com\nrose-royale-com\nraytenor-com\nerb-xsrvjp\nukiukishop-xsrvjp\nlogue-jp\neffort-corp-jp\nline2-tv\nshinku-ya-jp\npadm-jp\nreject2-net\nj-alliance-com\nmoe-jk-xsrvjp\npeace-shop-xsrvjp\nakb48akb84-jp\necomado-net\nworks-jobs-com\nfirstitpro-com\nkeiba-info-net\nkjyu-art-com\nxsample307-xsrvjp\npro-13-info\nearthpolish-com\nkyoto-kyoto-net\nadworks-design-com\nboribon-net\nnakasuhaken-xsrvjp\nasayoko-net\npokkarigumo-com\ngetti-info\nmachida-shaken-com\nyukaisoukai-com\nclinic-webseminar-com\nlocalstock-jpnet\ninternet-agent-net\npopran-net\nsato-iin-info\nvanguard-kaitori-com\nfrench-code-com\ndecormaison-jp\njagdd-net\ninuyamachuohospital-orjp\ntess211-xsrvjp\nsugita-photo-jp\ninexpenshop-com\nkoshigaya-con-com\nshin-ei-kan-com\nofficek-s-com\nxn--nckgh0pyb4cb0662e3ze8mpt2h2w6bmjzaoh9a-net\nwebzou-info\nbarakamon-com\ndef-hair-com\nstudio-arai-com\nnnn00001-com\nseiryuunouen-com\none-piececollection-com\ntakada-babadecon-com\nrikoh-s-com\nkawagoe-com\nrelaxrich-com\nyands-jp\ndoutonbori-yasu-com\ntestsp1208273-com\nm-credo-cojp\ntouch-express-net\nsympret-com\nkyoeihomes-com\nrio3\n1024-cojp\nshantishanti-info\ni-exec-jp\ndct-japan-cojp\nkyotanba-dog-com\nsuzuna-web-com\nfullsato-jp\ntestsp1208278-com\nxsample203-xsrvjp\nwedding-pipi-com\nasukamura-jp\ninfo-abaku-com\n805-ch\nrengenosato-cojp\nregal3-bg-com\nexcelsuke-com\nfukushimadance-higashimatsuyama-jp\n66sk-org\ns-pro4-com\nsekainomadopower-com\nkagoshima-shaken-com\nyou-rec-cojp\noverload-xsrvjp\nfujir-biz\nyusyutu-business-info\ngirlslovin-com\nbeppy-xsrvjp\nslabri-com\nfuusui-kantei-com\nxn--y8jl1nr86je03c-net\ntakagi-jds-com\nseizen-zouyo-net\np-fucoidan-xsrvjp\nsiota0913-com\ni-country-cojp\nparts1-amagasaki-com\nxn--u9j5h1btf1e9236ag6b1v8idc0a-jp\nyuyasawada-com\ntoxictwostep-com\nyouclub-jp\nkootec-jp\nsakashita-s-jp\nk2style-jp\nchintaisoudan-com\nbanyan-therapystyle-com\nmoemore-jp\nnovus-dairiten-jp\nmiduho-seikotsuin-jp\niroha-affi-com\ne-goyoukiki-com\nxn--pcktab2b3dta2oze-jp\nh-kazama-net\nsnowflakes-xsrvjp\nmeadow\nske-xsrvjp\nkumanomai-com\nkotohogi2672-com\noumi-tankai-shaken-com\ntouchkun-com\nabe-iin-org\nmichinoeki-totsukawago-com\nmasturbatiomenu-com\nafoi23j4ofadf-com\nrise-p-info\nmhcolors-com\nsawhde-com\nunitedstyle-cojp\nakahori-print-cojp\nnetbizch-com\ntetta-xsrvjp\nofficetecchan-com\nxn--54q764c9gar1l-biz\nkotog-jp\namb21-com\ncalender55-com\nclover-factoring-jp\nmove-s-jp\nminamo-ichiba-com\nphp-factory-net\nsuiso-water-com\nateam-xsrvjp\n225nikkei-biz\necoaichi-com\ngrandia-cojp\nyukinanjo-com\nseitouen-net\nwisdomdesign-jp\nhxgjp-com\nxinfo592-xsrvjp\nhomepage-sokkurisan-com\nxn--t8j3b4ef5mpcvq0dvb-jp\nbanbankasegu-com\nterada-jpnet\ntakenakawasai-com\nosaka-gentei-com\nseasea-jpnet\nccrcjapan-com\notoriyosecurry-com\nsafety-finance-com\nsearch-c-com\nkizuna-cafe-jp\nofficesam-xsrvjp\nncare-a-ch-jp\nongakujan-com\nfurano-kankou-com\nxsample204-xsrvjp\nit-success-net\nmelissa-acp-com\njeunesse-espoir-com\npost-announcement-com\nhahacom-jp\nryuka338-com\nxn--eckle2a3a6k5eucvec7hu028b33tg-net\nosanpo-shopping-com\ncross-farm-com\njoy-space-xsrvjp\nhsk-archi-cojp\nroks-dev-com\nnikemercurialvapors-com\nimaizumi-gardens-com\nposao\ntakahirofree-com\nr93yu1130-xsrvjp\npr-jp-com\nnakayoshi-hoikuen-com\nnewral-info\nrocket-english-com\nat-cynthia-com\nhokodate-jp\nhokutokeibi-xsrvjp\nbicimp-xsrvjp\ntennoujiconh-com\nfgroup-jp\ngreen-ceremony-com\nchip-clip-com\narigatougozaimasu33-com\nxsample130-xsrvjp\nsample1\ni-exo-com\nmaruni-seiki-com\nskincare-style-info\nit-force-info\nnekretnine\nlgtv-cmp-xsrvjp\ntashiro-ent-jp\nneostage-info\nvixell-net\nhandsfreevideorecorder-com\nsp-shoppro-com\nsanwa-de-com\nozak-cojp\nslimfan-xsrvjp\nremaria-com\ntowatowa-cojp\nfacebook-lab-biz\ngrowniche1-xsrvjp\nmahae-cojp\natopy-stop-jp\nreisyu-xsrvjp\nfirstitpro-net\naffirieman-biz\nburlesque-style-com\nvegaworld-biz\nmonochro-org\nakashiyanet-xsrvjp\nyasutom-com\ncom10mo-com\nms-garlands-com\nsoc-p-cojp\ntranspace-jp\nnamba-ten-jp\nsanneisya-com\nrisktec-jp\nj-premier-com\nikel-cojp\nkazukuniyuri-xsrvjp\nhow-to-wordpress-biz\nngc205-biz\nmiracle-fun-com\nhinoshin-com\ndq-sei-com\nmeasurement-labo-cojp\nbluetiida-xsrvjp\nxinfo125a-xsrvjp\nrocksocks-jp\ncamp-sej-com\ntakamatsucon-net\nshin-ei-kan-net\necoa3-com\nhappylifeysh-net\nyukakun-com\nshinkyuin-com\nkansaibridal-xsrvjp\nxn--98j8ah3e9333bwksbg2d-net\nsumideny-xsrvjp\nxinfo768-xsrvjp\nmuraki-ltd-cojp\nalohatherapy2002-com\ntryday-xsrvjp\npatine-jp\npearl-house-com\ntest-xinfo518-xserver-com\nkawaoto-xsrvjp\nsprout-grjp\nbest-future-net\nvontesi-com\naidparty-xsrvjp\ntestxserverdomain363-com\nlineaworks-net\nnavi49-xsrvjp\nxsample319-xsrvjp\nm-davide-xsrvjp\nbose-xsrvjp\nuranai-uranau-com\nasa-eirakusou-com\n11code-net\nxsample59-xsrvjp\n4get1self-com\nautogalaxy-jp\nxinfo101a-xsrvjp\nheavendays-net\nbest-relation-com\nshinhwa-fc-jp\ntsukurie-jp\nujiharablog-com\ntradeli-com\naries8-com\ninfor-mations-com\nhunabashi-bankin-com\noekaki-factory-com\nnature-jpnet\ninugumi-net\ntrust-cars-com\nlancers-high-info\nkitanihon-xsrvjp\nxn--t8j4aa4nt10m093dusc-com\nxinfo528-xsrvjp\ngift-campaign-net\nmint-rua-com\nmagni-hyogo-com\nxsample161-xsrvjp\nsptm-so-au-com\nys-office-cojp\nhighkicktattoo-com\ntohotv-jp\ncocoro-kiku-com\nhanakobo-juran-net\nheavy-rotation-jp\nyoi-hanarabi-jp\nperfume-mens-info\nyscube-com\nmydays-off-xsrvjp\ngk-asiapremier-com\noita-eikosha-cojp\nkenkoumai-com\nfreeofferfreelife-com\nlscart-xsrvjp\nxsvx1024554-xsrvjp\nkyushubiz-com\noffice-tsh-net\ndreamv1-com\nkite-image-cojp\nforvisionaries-com\nwebbing-hp-com\nkigyouka7-xsrvjp\npictonico-com\nxsample306-xsrvjp\nringo33-xsrvjp\nsocial-marketing-orjp\ntestkimuraphp5-com\ndatumo-asia\nebook-fj-com\nmin-han-net\nj-c-y-com\nmitamachicon-com\nstation-fc-com\nnet-kigyou-info\noffice-koi-com\nhasegawa-r-com\n1stcreate-com\nlibero-3star-cojp\nmokotarou-com\nhaitai-cojp\nmashike-winery-jp\nmatsuiisamu-com\nfutaba-dd-jp\nrleia-net\nartplayer-jp\nkatadukeichiban-com\nfoodening-jp\ndez-cojp\nrio1\ntmdu-mo-com\ndabetabe-xsrvjp\nxn--x8jc3d5hp94mb34d3m4a-jp\nsekainomado100-com\nxn--eckg4cd6wc6i-com\n1tomodati-com\nkessetsu-xsrvjp\nthegoldenratio-net\n1jsma-com\np-answer-com\ntmc-labo4-xsrvjp\nireba-pikako-jp\nxinfo559-xsrvjp\norganiccolors-jp\npulse-group-biz\nxsample202-xsrvjp\ndirecsion-com\nsunny-gem-jp\nnaps-web-jp\nsitifukujin-xsrvjp\nsaiko-tei-com\ninafami-com\nchikyukazoku2020-com\nwebris-net\nlinesystem-jp\nmydoykadoya-com\nworthliving-cojp\nyossi01-com\nridestar-xsrvjp\nlight01-com\nesprituals-com\nphantom7-xsrvjp\nxn--t8jxd7cyb-jp\nxinfo705-xsrvjp\ninterior-mk-com\neffectorweb-com\nxn--24-zb4aym5cqhlgl55v9p2b-jp\nwelcomeroom-net\nafdiscovery-com\n3soeurs-com\ndjc-xtension-xsrvjp\nbejilife-info\nkondo-shoten-cojp\nyushonokai-xsrvjp\nnakain-com\n29mailmaga-com\nstocktonspringsme-com\nj-online-jp\ndream-mt-xsrvjp\nknc-xsrvjp\nxn--cckl9b3gza2011c8f9e-biz\nolao-jp\nkazoorock-xsrvjp\nxn--p8jn4h6d6kxd2h2g-jp\nyakuzenn-com\njporg-net\nbiyouch-com\nxn--ddk0a0ev93mf5jpqm7g9a01bjvzkyih1est2f-com\nprimetime-kozaru-com\n532up-jp\nryouhei-rea10naru-com\ntest-xsample320-xserver-com\nsukedai-net\nthefirststep-info\nxn--hck9an9sbc3455c1ye8x1mr56a-net\ndogtraining-f-com\nnomadaffiri-com\nrokkomokko66-xsrvjp\ntest-xsample316-xserver-com\nseo-don-tatsumi-com\ndear-wig-com\nmailsien-net\nichiko-oki-jp\nzipanguhunter-com\ntestsp12042343332-com\nxinfo591-xsrvjp\nkencyomae-matsuya-com\nkamig-xsrvjp\nkaorumorita-info\nariga10noie-com\nwhiteblackdesign-com\nxn--gckvas0t2a-biz\ntest-xsample313-xserver-com\nte-cross-com\nmachicom-tokusyu-com\nsatukou-com\ndr-monroe-jp\naustralie\nsronetgw-com\npgengo-com\nuggstovlarforsaljning-com\nmachi-link-info\nxn--yckc2auxd4b6564dogvcf7g-jp\nmiyazuke-com\nenergize-cojp\nmaedaphoto-net\nxn--58j5bk8cwnpc8czq6095c-jp\nxn--pckj3hf8gj-biz\nkoubou-imaya-xsrvjp\ntest-xsample310-xserver-com\nyoloport-com\ndebcheebo-com\nthinkingtest-xsrvjp\nkurihara0999-biz\nadsky-jp\nnakazawa-sekkei-com\nxinfo736-xsrvjp\nxinfo351-xsrvjp\nuwakaishop-com\nkawahara0202-com\nxn--bcke3b8a3d7d8jlc4234hersb-com\nharajiri-com\nebrietas-xsrvjp\ns-a-biz\nfujiyoshiya-online-com\nwaocon-xsrvjp\nhibio-orjp\nhmmr0403-xsrvjp\ncnvsx-com\nyoutube-club-com\nmed-infom-com\nmoko-lp-net\nlogo-r-jp\nxn--u9ju31pa341jhjg-com\nnxi-xsrvjp\nart-repair-com\nineed-jp\nnakazono-kensetsu-cojp\njpinfo-you-com\ncolorwirecraft-com\nogata-h-com\nseoplus-jp\napbot-info\nnanomi-me\nrideout-biz\nfelice2004-net\nshihatsudo-orjp\ns-kouenji-net\nsunbridal-jp\nxsample128-xsrvjp\nujilc50th-net\ndiginfostation-jp\namigo-latinshop-com\ngo-nagomi-com\nmidorimushi-kenko-com\nkijima-xsrvjp\nshiobara-arai-shaken-com\ngoodlistener-biz\nteradox-jp\njinvtm-com\nmahou-awa-com\nneco-inc-com\nanet-inc-jp\nputtyo-com\nkitaurasenkou-com\nxinfo760-xsrvjp\nxn--18j3fvcefx9ttdwi0233e-com\nsuginami-town-net\nlilacgray-com\nyaeyama-yacht-club-com\nrucion-com\n5489-in\ntyube-ichinomiya-syaken-com\nacda-jp\nfisland-info\nnpo-nsa-jp\nggoodnews-xsrvjp\nryokufu-sya-com\nkbr1971-com\ntaiyo3333-com\ncuibap\nhonmakale-xsrvjp\nwvroadbuilders-com\nsbjel-info\nfollowmatic-info\neco-easy-jp\nk-handc-com\nk-decoration-com\nslackline-xsrvjp\nsyufudada-com\nacr-net-com\npasokonlife-com\nunion-bz\nsatisaffili-com\ngshuhou-com\nplan-lasik-com\nhollywood-air-jp\nmarutakeya-com\nanc58749-xsrvjp\nmikanno-com\nxinfo767-xsrvjp\nyss-school-jp\nmitsuo-tosou-com\nyamato-pub-jp\nkumasyasui-com\npatec-tech-jp\nmadangler-jp\nhawk01-com\nshinbangumi-net\nyamamototatami-com\nspeedarea-biz\ngebo-affili-info\ntenposhuukyaku-jp\nbicycle-stage-com\ncrane-xsrvjp\nwellsrich-xsrvjp\nxn--n8jub7qsb3inewa4c7463e-biz\nyata-garasu-info\nsporture-tv\nclarenet-biz\nxsample58-xsrvjp\njunkbuyer-form-com\nvois-net-jp\nhowto-manual-net\nsynchronote-net\ntsukeobi-com\nnpo-polano-orjp\nhs-eternalstudio-com\narihiro-gallery-com\nweboons-com\ngrandhill-net\nhair-climb-info\nkouritu-info\nxn--48j1ar8krh1b6dyk4649eygh-com\nhp1980-com\nxinfo527-xsrvjp\npepentel-com\ntestdomainx323-com\nhokkorisan-net\ngoken-g-cojp\nxsample159-xsrvjp\ngomutimes-cojp\njunction-xsrvjp\nfinefeatherheads-jp\ntanaka-stn-cojp\nnightresort-com\nlavous-com\nnamgite-com\ntest-xinfo760-xserver-com\nhananotakumi-net\nxn--1rw4k17v0yq-biz\ntikabou-biz\nfc-kyoto-info\nmms-xsrvjp\ngashintei-com\nazure-style-com\ndevayoko-com\nxsample318-xsrvjp\nyokosakata-com\ntestdomainx334-com\nmaki-nao-com\nmegurocon-com\ntest-xinfo740-xserver-com\njyokoshoken-xsrvjp\nzero-school-com\nkyoualice-com\neraberu-hoken-com\npino-books-info\nsawada-cooking-net\nfreedomken02-com\ntest-xinfo730-xserver-com\nbest-book-biz\nsmatre-news-com\nrapislazuli0678-com\nxsample305-xsrvjp\nn-hakko-com\ntora-corp-net\ntokupri-xsrvjp\ndadada000-xsrvjp\ntest-xinfo719-xserver-com\nxn--38j9do54hodfw8a26fyr7e-com\ndreamsguide-net\ngojune-xsrvjp\ntransurl-xsrvjp\ntitan4\nxn--h9j8c2b370ru87b3rya-com\najiwaiya-gen-com\ntest-xinfo709-xserver-com\nxinfo128a-xsrvjp\nhorsedealeronline-com\nsowa-com-xsrvjp\nyumegift-net\nspecs-jp\nbeau-magasin-com\ncode-r-xsrvjp\nwakakusa-call-com\nnagomi-gh-jp\nad-car-jp\nretoto-com\ndash2012-xsrvjp\nysvs-xsrvjp\nbeachbreaktx-com\nwa-ipi-com\nitasui-xsrvjp\nchaos-grjp\nakebono-seitai-com\ntatsukawa-dental-net\nturu503-com\nonestead-com\nwithin24-biz\npontajapan-com\nwecop-net\nvoiceapp-xsrvjp\nsachinoka-com\naplanning-info\nporce-in\nf01fuji01-xsrvjp\nxn--4gr53rqoa84h99wywlvrxf7n-net\nmachi-shirube-net\ndevrm-net\nline-t-com\nhyphening-com\nsan-ten-net\ntokushima-shaken-com\nbath-paint-com\ntachikichi6-com\nworldrings-net\nrisounopapa-com\nclasstream-jp\nxinfo558-xsrvjp\nsakurafubuki-xsrvjp\nmorisige2356-com\nkami01-com\ndatsu-genpatsu-info\naaa-icons-com\ntanimuratakahiko-com\nrougo-asia\nsusweb-cojp\nsatoshop-com\nbest-3-biz\nnaritatomisato-hp-jp\nr313-net\ni-himawari-cojp\nalice-pg-com\ntatsuyafukuda-com\nxn--swqq1zt9i4xa94dl3f-net\nouenryoku-net\nkinkipesodan-xsrvjp\nimagebank-cojp\ncycle-esaka-com\nmysticalbullmastiffs-com\nmarukin-ad-jp\nitoshima-in\ntamai-tsuriclub-com\nvinhlong\nxinfo520-xsrvjp\ne-oguni-com\nhamuchiri-xsrvjp\nxinfo704-xsrvjp\ntechno-factory-com\nisamuhazama-info\neuroport-craftrobo-com\nkumosukedango-jp\nminoru-asia\nair-studio-jp\npluton-jp\nrigakunishi-com\ntest-xinfo559-xserver-com\naruz-saifukaban-net\nprocess-1-cojp\nsmtown-passport-jp\nto-1-info\ntest-xinfo549-xserver-com\nherbery-jp\nfbms55-xsrvjp\nj-officeweb-jp\ngiulietta-xsrvjp\nfstory-jp\ntest-xinfo540-xserver-com\nkawaisakusen-com\ntakatori38-com\nmikelab-xsrvjp\ntest-xinfo529-xserver-com\nxsvx1016120-xsrvjp\niinet-n-com\nfacts-xsrvjp\nrom5-xsrvjp\nblend-shop-com\nymtenjin-jp\nmatsuda-ph-com\ntest-xinfo520-xserver-com\ntest-xsample226-xserver-com\nktscopex-xsrvjp\nsabre-jp\nnaritetu-xsrvjp\na-pf-com\nminaoshi-1-com\nshinsaibashi-yasu-com\ntest-xinfo510-xserver-com\nmint-rua-xsrvjp\nenecost-com\nropponginohaha-com\namaeco-com\nplatform-xsrvjp\nji-ji-affiliate-com\nseminar-kasui-com\nlsecret-info\nssr-orangetantei-com\nfrantz-fanon-com\ngentei-kumanavi-com\nre-use-biz\naononet-xsrvjp\nrisshun-net\ntknd-info\nhandshake-orjp\ntula-xsrvjp\nnagoya-adm-com\npiers2011-com\nsmzh-xsrvjp\nsokuhoukan-info\nfurano-melon-jp\nosakabijin-com\nyumemaga-com\nhunabashi-taiya-com\njita-premium-com\ngogobusiness-info\ntestxdomain304-com\ncosplaytravel-net\nlockone-service-com\nclass-shonan-com\ncareer-staff-com\ndk-daiko-com\ngreaterpittsburghciogroup-org\nikebanaohara-com\nsv1st-com\ntestxdomain309-com\nnet-cross-com\ntassmania-xsrvjp\ndigital-crest-tv\nzenyokukyo-xsrvjp\nspsjapan-com\nenchan0408-com\nbbphp-net\n500yen-net\nshigesg-com\neastadventure-jp\nxn--y8jp0mua-jp\ntanio-hoken-cojp\nmamanurse-com\nwscape-xsrvjp\ntsumekusa-net\nxn--uckg3gj1hd8c0399cdf1bux7bxfd5ub-com\nbisamobi-xsrvjp\ndcsblog-xsrvjp\niyasinoamore-com\ntm-ad-xsrvjp\nnaotjewelry-com\nchapter-xsrvjp\nnosyoko-jp\nworldwalker-jpnet\nsaiseisuru-info\ntobiken-divetofree-net\nxn--88j6ea1a3393bhfatv1xi104a0ln8if-biz\nxn--cckj1c2j2bwf6044bomgf76b-net\nuoshige-biz\nkyoto-rentacar-com\nnki-print-com\nhotta-ganka-com\ncancionvivaradio-com\nbavi-plh-com\nhmhits-com\ntkt-center-info\nwaisu-xsrvjp\ncs-delight-xsrvjp\nfairyparadise-com\nk2k2-jp\nprenew-xsrvjp\ngifu-notiku-com\nsol-tec-cojp\nsorahime-com\ndb08\ngates-xsrvjp\nxinfo738-xsrvjp\nsoooooooooon-xsrvjp\nmarukyo-net-cojp\nkimono-united-com\ndenebola-jp\n4-lips-com\ne-melon-net\ncocowa-net\nyasumuro-plan-net\napurituru-com\nxsample127-xsrvjp\nnapoleon-hill-jp\natelier-iki-com\nfushimiyoujien-jp\nbikkurimeisi-com\ntest-xinfo359-xserver-com\nfine-one-jp\nnishiumeda-yasu-com\nchaigo-info\nsmile-switch-net\nsidebrains-xsrvjp\ntest-xinfo349-xserver-com\nshinnihon-koukoku-tokyojp\nwhyling-jp\nkinshichodecon-com\ntakagi-biken-net\ntest-xinfo342-xserver-com\nyamamu-net\nbayshin-craft-com\nke-tai2-com\nair-i-xsrvjp\ngolfwalker-jp\nxn--zckwa8eyf040sre5d-jp\ntanu3355-xsrvjp\nsmedic-xsrvjp\nroi-pro-net\neurotexjapan-com\nfukuokare-com\nshiminuki-takedaya-com\naplan-house-com\nseisenryo-jp\nnmf-acjp\nmagokoro-ticket-com\ntd-honeywife-com\nbroslink-net\nfans-xsrvjp\nwintechnos-xsrvjp\njunjimu-net\nuggeinkaufenboots-com\nmt-east-com\nkoubesannomiyacon-com\ngrk55-com\nktstv-cojp\nlookphotography-net\nhanagasa-net\nkouta-zero-ism-com\nxn--n8jub3du45qx2ykjyeow-com\nkamineko-info\nmaru01-com\nhoumu-jpnet\nhatakeyama-dc-com\nlockey-group-com\nohariko-onaoshi-com\nwindows-nt40-com\nkishokai-orjp\ngolfer-apps-com\nenshunavi-xsrvjp\nd-k-o-info\nflowertriangle-com\ninfonity-jp-com\nariake-oak-jp\nu-fphoken-com\ntryforce2000-com\nhiyoko-f-jp\nkikoijapan-jp\nxn--dcklt3fn2gyc8fzfz425ac76g-com\neaselhome-jp\nsakuragaokacon-com\npicoslab-com\njack-o-lantern-in\nryumeikan-tokyo-jp\npongsityume-com\nkotoni-copint-com\nfutamura-orjp\ngamification-marketing-com\nself-shop-com\npitat-nabari-com\nxinfo526-xsrvjp\nxn--i8s707c3pk-com\nxn--cckyb9em8gz324b8q4a-com\ntax-adviser-info\nxsample158-xsrvjp\njouhoumax-net\nnccard-nejp\ngyousei-jp\nkizunakeikaku-com\nb-partners-xsrvjp\nsaintegenevieve-org\nyamashiro-onsen-com\nxn--eckwb2en5f611vnxq34uzyntm0b3z9b-biz\nfukugo-jp\nxn--n8j0ao7f9a7304bz1zayk3ai7h-com\nogikubo-i-com\nhino-comu-com\nsurutan01-xsrvjp\nxn--u9jz52gfmk3iag51dizovw7adwx-net\neigode5-com\nsatonoria-com\nfavori-tokyo-xsrvjp\nelieze-com\nbasketballshop-legends-com\nonishi-housing-cojp\nxn--yckc0gk6h-com\ntaiyok-cojp\nhiro-ok-org\ncpa-library-com\nxsample304-xsrvjp\nmotherlip-net\nkosodate-saitamajp\nkawata-s-com\nyonehouse-jp\nsyuluxnxn-xsrvjp\nmovie-sign-com\nissinmaru-com\nafter3-in\ntsukumo-biz\nkk-uchikoshi-jp\nohimachi-net\nsolare-hirao-com\nbookend-cojp\nuxf-xsrvjp\nj-acp-com\nxsample214-xsrvjp\nnikibichiryou-info\nart1922-xsrvjp\nspainbar-gracia-com\nyoppi-asmec-com\nmenuetto-net\ngooddealing-com\nxsvx1020066-xsrvjp\ntoukai-shaken-com\nhp-mail-org\naliciaadamsalpaca-cojp\nneko-z-com\nmm-design-jp\ntakuryu-jp\ngetmoney-2swordstyle-com\nbellrin-com\nkbit-cojp\nkawaehonpo-jp\nxsample88-xsrvjp\nwebstyle-xsrvjp\nkonosoranohana-jp\nitamiakira-jp\nmushinashi-kaiteki-com\nnisinihon-info\ndensiteikan-com\nsophora-xsrvjp\nlcc-sky-com\ninaka-pipe-net\nsodsugar-com\nysai-xsrvjp\ntsuyakuguide-org\nohashi-eye-jp\nxinfo557-xsrvjp\nyiizhu-com\nnichido-monthly-tokyo-net\nhotbook-biz\nstudiokakita-com\necomohonyaku-net\nkuroda-studio-com\nxn--cckwcxetd-jpnet\nmorise-kaigo-com\ntdg-okayama-xsrvjp\ngucciz03-com\nkobeco-xsrvjp\nlivuhey-com\nauctionsite55-com\nkakogawa-matsuricon-com\n1102k-com\nstandup07-com\neco-h-cojp\nbluefreeuk-com\nw-server-jp\nid-cmp-com\ntakajin0524-xsrvjp\nkakushin-group-com\ndragoon75-com\ngasho-an-com\ndesignam-com\nyokoya-xsrvjp\nxinfo703-xsrvjp\ne-buy-cojp\nkoukokai-jp\nmatsumura-parts-com\nskytown-jp\nbuilderyoshi-com\ntenkokuart-com\nla-beaute-info\ngion-kyoto-net\nfuture-c-net-jp\nmatsuiseijyo-com\nsonejapan-com\nsnopiek-com\naemk-orjp\nla-mariage-cojp\nlouis777-com\nkeih87-com\ny-motomachi-com\ninnosence-xsrvjp\nbizcube-jp\nshumiplus-net\nhibinoiro-net\ndesign-symph-xsrvjp\naccettazione\nkawakamiya-com\nhtwing-com\n450k-net\npalca-jp\nii-anbai-net\nviolinjp-com\ndougaldrich-com\nllpbookend-cojp\nlivre-jp\nlifeinnovation-jp\nkishiike-com\nxn--v6qz1w6gr96i6dfrk9a-com\nmentor0511-com\njunkbuyer-ipad-com\nxn--2-jeum8gra4a4456m88i-biz\nhirayama0925-xsrvjp\nhirokouren-kango-net\ntaikou-kensetsu-com\nhatakawa-aijien-com\ncurtain-semi-com\ntomomist-net\nkawaimagokoro-cl-net\nnippon-wine-com\nishis-piecemontee-com\nkenbungaku-com\nkitano-sumai-jp\nnotch-cojp\nguramu-net\ntensodo-xsrvjp\nair-upt-e-com\nexcel-xsrvjp\nconferlist-jp\nxsvx1011070-xsrvjp\nncp-acjp\ntmre-jp\nxsvx1014136-xsrvjp\nsinmiura-jp\npurple-dahlia-scene-com\nxsample231-xsrvjp\nunveil-xsrvjp\n29014-info\niwate-megabank-org\nfriendear-net\nxn--u9jz52go0jr6al94bizovw7ajzq-net\nnksj-car-com\ntanuchan-in\nihara-web-net\nmoekoosawa-com\njapanpage-jp\nyutakakk-xsrvjp\nvegelife-kouso-info\ntakatora-xsrvjp\nia-project-mobi\no-bikers-jp\nfly-solotravel-net\nhokkaido-partners-cojp\ntakenogakkou-xsrvjp\nshirobei-com\nkumagayacon-com\nishida-s-net\nxinfo734-xsrvjp\nxinfo348-xsrvjp\nebizou-info\nxn--u9j8frbzkk62uxef9lo-com\ntorijiman-cock-com\nxn--t8j4aa4nwj5byg4ih4e4eb6496q264d-com\nxn--czr78lt57a-jp\natnworks-xsrvjp\nlabayj-com\njapandental-cojp\nyouvision-xsrvjp\nkokorozashi-jpncom\nhealth-support-japan-com\nyuto-nakagawa-com\nxn--w8j3k0bua1eyf0cz786bewa-com\ncinselhaz-com\nnara-con-com\nxn--fx-mg4avc2gyk-biz\ngreen-pocket-toshima-com\nas-job-com\nchapt-info\nmarket1-xsrvjp\nnats-planning-com\nkandkcollection-com\nchayamachiconh-com\nfa-style-com\npremiermember-jp\nsg110\ndreamstage-info\nnoto180-com\nsuperdice-net\nxsample126-xsrvjp\ntula-cojp\nbur-juman-com\nip-agent-biz\ncreative-h-cojp\npw-wedding-com\nryuuseinogotoku-trend-com\nshoukichi-org\nnishikawa-shika-jp\nrom-jsys-com\nskampermusic-com\notopost-xsrvjp\ncpe-s-com\nwincul-cojp\ngluck-jp-net\nikeikehiroshi-com\nclinicalart-atelier-nae-com\njapandental-xsrvjp\npopteen-jp\nxn--ecki1b5br0ae8iyd3due-jpnet\nkango-fair-com\nmembersite-xsrvjp\nfirst8-xsrvjp\ncpa-toyohara-com\ndosakan-net\nebisuconpa-com\nkiyox-com\nonoue-tatami-net\na-zu-net\nshimokita-con-com\nizunet-jp\nac6162-com\nplustest-xsrvjp\nwcd-xsrvjp\ndesign-pack-net\nm2k-xsrvjp\nhiroshima-cu-net\nwadai01-com\n4ta9-com\nmaido-navi-com\nhando-law-com\nmugenprtest-com\nnaomicious-com\notanjoubi-xsrvjp\nxinfo765-xsrvjp\nxinfo380-xsrvjp\nhealth-beauty-no1-com\npt-algarve-com\nypj-jp\nsuzukisanfujinka-com\nwith-music-net\ncnet105-xsrvjp\nbear007xp-xsrvjp\neasternstudiesdatabase-com\nkizna-club-com\ncolkdesign-jp\nyscube-xsrvjp\nbiz-abroad-net\nyuri-akitajp\nnyudani-net\nm884-com\nhimono-hashidate-com\nxsample56-xsrvjp\nnovum-jp\nayumi-k-xsrvjp\nfunabashicon-biz\nr93yu1130-com\nokiattend-com\numeda-yasuhei-com\nxsample230-xsrvjp\nmailinfo1-xsrvjp\n49764mominoki-net\nkoreaichiba-jp\naffiliatecenter-net\ndogrun-navi-com\nxinfo525-xsrvjp\nclubking-xsrvjp\nunveil-cojp\nhirano-unyu-cojp\nu-801-com\nvalidate-js-com\nxsample157-xsrvjp\nnm-archiseeds-cojp\ntotoka-jpncom\nd-fuctory-com\ng25krishna-info\njimoez-com\nb-town-jp\nmocomocolife-com\nxn--n8jubz39q56dpy2a01gj60a-com\ntenpoukaku-jp\nsi-himeji-cojp\nminamoya-info\nobatec-jp\nsharedsoft-com\ndrcaco-jp\nbni-kinshachi-com\ncocoon-wave-com\ntenmabashi-yasu-com\nprenup-hiroshima-com\nelm-gakuen-com\nsonejapan-net\nxsample303-xsrvjp\ntakezo-jack-com\nbihadadou-xsrvjp\nbonic-info\nmensato-xsrvjp\ndr-monroe-cojp\ntk-housing-jp\nkumamotoshi-shaken-com\ncharis-arts-com\nxn--qcklm0bzd1dvkk82tdv9au53b-com\ngekiumawin-com\nkt-manage-xsrvjp\nolao-org\nxsample146-xsrvjp\njp-harg-jp\ntujitaiga-info\nleo-house-com\nslackline-jp\nlearning-with-me\nafi-hisyo-com\nvaluation-cojp\nan-aim-com\nmisyukudecon-com\ntmatoba-xsrvjp\nrouet-jp\nchinzao-com\nokitokuski-com\nkosuge-shimazono-com\na-mue-cojp\njqa\nsanpachi-cojp\ntachikawa-town-net\nmudage-asia\nbennpi-asia\nxsample87-xsrvjp\nniigata-tatami-jp\nfujihomes-xsrvjp\ntkrd-biz\nyamatsu-kk-cojp\nxsample110-xsrvjp\nsyowasangyo-jp\nwebelement-jp\nsaori-mizuno-xsrvjp\ntakayamaseika-cojp\nctwpromotion-xsrvjp\nfirstitpro-jp\nover-flow-net\nxinfo556-xsrvjp\nlopple-jp\nsenkyo-goods-com\ncodenight-com\nfours-cc\njmp7-com\ntorunkmr-xsrvjp\ne-hda-jp\ninforeport-jp\nsaito-takao-com\ninterplan-xsrvjp\nryokan-kaikou-net\nmayumi-fukasawa-biz\nshimane-u-xsrvjp\niris-scarlet-info\nsallp-xsrvjp\nxn--qckyd1cv50v-jp\nmusic-spark-com\nishibashiblog-com\nsynx-in\nnetbisiness-saikou-biz\nsstechno-cojp\ndamedamefx-com\nafs-net-com\nred-con-xsrvjp\nraimu-nagasaki-com\ntoda-shaken-com\nkoike1265-com\nshikitsu-net\ndai1cred-com\nesute-tv\nxinfo702-xsrvjp\ntakaranoyume-xsrvjp\nkuushitsu99-com\nkogakusatei-otasuketai-net\nxsample334-xsrvjp\nkontown-jp\neasy-style-jp\nofficebeans-net\nhiroakix10-xsrvjp\nbd-gs\nssijp-net\nsevennananana-info\ntokuyama-rh-jp\nfunabashi-xsrvjp\npccqq-com\niyashi-kotsubu-com\ngranheart-jp\npfolios-com\ntecjapan-biz\ntukkysedori-com\nclear-healing-info\nwakeyumeup-biz\nwtte-info\nsaimuseiri-hotline-info\njolijoli-jp\nnanbaconh-com\nkamikawa-xsrvjp\ndr-monroe-biz\n330hm-niigata-cojp\ncredoseitai-com\ndoublesteal-xsrvjp\nsmbanana-jp\nsakamotokogyo-com\ntyrant\niris-accounting-com\nsaitama-souma-shaken-com\nhyugaginou-com\ntenderlove-pcb-biz\njapantn-xsrvjp\nxsample229-xsrvjp\nmiyukinoko-com\nshahzad\nsakai-yasu-com\nkaminaritei-cojp\nikegaku-org\nyu-touch-com\nsyoujiki-com\neikeis-com\nkakeru-net\n2ch-kakunou-com\nyodoyabashift-com\ntomochige-com\nxinfo159a-xsrvjp\nshoppingphone2-info\nenkadestar-xsrvjp\noverload-nejp\ngyouza-cojp\nviewland-jp\nthe-xlive-com\nishizo-com\ndoghug-jp\ntamuranouen-jp\nxinfo733-xsrvjp\nxinfo347-xsrvjp\nclayblock-info\ntechno-energy-jp\nxn--n8jl84alc9fsf5446c-com\ncorepan-com\nfreedrapery-com\ngalpachi-tv\nmariage-space-com\ncocowa-store-com\nsantam-jp\ntouenji-jp\npharmaco\nhellohello\nhome5\nns301\nz3\nns242\nkakeibo\ncurling\nwebdisk.ls\nyubi\nftp46\nmwtest\nssl0\nzerr\ntest-mobile\nmutsumi\nkibinago\nabsinthe\ndeeper\nbrenna\nwww.bellevue\nzelos\nspace8\nyaho\nxero\nein\nsunshineboy\nchartreux\nsrv51\nbluewhale\ntida\nmasai\ngenso\nturnos\nkind\nrembrandt\nsmilehome\nwhim\nlifehacker\nresidential\nweby\nwww.repo\nmsn04\nwlsy\nintradoc\ndds112\nwww.peach\nycbf8\nhimitsu\nvitoria\nsuap\nresults3\nvery\ntwix\ndetsad\nunit\ngubernator\npereselenie\ntete\nctmx\nkands\ngakushi\ntakeru\nmahoroba\nwww.funtime\nwww.preschool\npreschool\nwww.others\nwww.preteen\npreteen\nhighwind\nnambu\ngulf\ntott\nudin\nteaparty\nmh4\ntkog\nmaruzen\nkuruma\ntion\nneustadt\ndevz\nnss1\nwww.okami\nsnaps\nwww.personals\nhijiri\nimg.new\nsoda\nglobalwarming\nslit\nwww.greencard\nsuk\ntbox\njtc\nkcj\nmacca\nkyoka\nsinsa\nsiso\nwww.izumi\nstepup\nsiho\njusthere\nvilya\nkatsuno\nroya\nboard2\nrowo\nyamatai\nshaa\nfs32\npdesk\ntokidoki\nkawabata\nnodo2\nnmk\nnodo6\nnodo7\nnodo8\nnodo9\nnodo10\nnodo11\ntakanashi\nnodo13\nnodo14\nhks\nflt\nappmobile\nseah\nversailles\nangelle\nazurite\nbkc\ngudrun\nteamfortress2\naol2\ncraftcrazy\nkamal12\nwww.craftcrazy\nsant\nberthe\nsbbs\nsylvie\nsoftwareinfo\nwww.softwareinfo\nburatino\nsan3\nzork\nsna\nwww.69\nprint2\nwww.62\nwebfax\nrian\nwww.58\nwww.57\nwww.54\nwww.03\nwww.01\nqnet\nanita1\nzakshop\ncourierjournal\ngilgamesh\nupgrading\nirregular\nfreeshare\nwww.autocad\nvs11\nberenson\nmazika\nsoss\nthenewage\ndarkrealm\npray\ngamgam\npote\nwebdisk.learn\nus02\nus03\nwww.desaparecidos\nguizza\nmuscle\nppc3\nppc2\nprince93\naccademia\navco\nspxw\njxzyk\npipi\njuso\njyxx\nvalcea\ndesaparecidos\nhawks\nanimeclub\npiel\norai\noraa\nmaw\nidi\nwww1.n\nredis1.n\ndb1.n\noooo\nworkers1.n\ndairen\npeoo\nbikers\ncfa\nrv1\nphpinfo\nwww.comune\nwww.hosted\nprinceofpersia\nicont\nwww.was\npaky\npala\nrcl\nchaoyang\nwww.wolfpack\nwww.nwa\nwww.igs\nwardo\ntestwap\nbello\nzhongshan\nhuabei\nparus\nminzdrav\nyuncheng\nlanzhou\nust\nwaves\nxtreme2\nminsport\nhangzhou\nnong\nkinomax\nminobr\nautenticador\nspamwall\nsiping\nguilin\nautodiscover.property\nfpga\nshijiazhuang\nmurf\nnewpro\npfj\nmumu\nryanm\nmubi\nniza\nabtest\nobey\nycopy\npusatsukan\nwww.publications\nbendahari\nezra\nelectrical\nsitedev\nmond\nnode02\nuweb1\npusatislam\nneti\ncil\npusatkesihatan\nmiqbal\ndwa\nfbdev\nproductie\ncere\nkeselamatan\nbids\nsibnet\nbumbum\nyoitsme\nmob1\nshapley\nioncube\nlure\nzim1\nautoconfig.espanol\nmmm3\nautodiscover.espanol\nwebdisk.espanol\nwww.deutsch\nluny\npendaftar\nluco\nredac\nmjmj\nmso\nmiru\nintsys\nautoconfig.stiri\nwww.question\nphpmyadmin.test\nautodiscover.stiri\nmimp\nmiky\nwww.philos\nwebdisk.stiri\nmx2-out\nautoconfig.s1\nautodiscover.s1\nnabi\nmiga\nabramo\nlona\nkawaly\nwww.2b\ndowcipy\nwww.ping\nhiltonhead\nkatalog2\nimprezy\npcn\ndenim\nmela\nautodiscover.team\ndownloadcenter\nautoconfig.team\ndzzw\nprenota\nolc\nktkr\ntelnet2\nlfe\nconference2\ntopspin\nmamu\nmalo\nmagi\nkrol\ncrussell\nmaed\nfoods\nquill\nmarron\nforexreviews\nwww.imgs\npitch\nsteamboat\nkyoshin\nd02\naventail\nmbanking\nssl21\nwebmail6\nseattle2\nssbprod\njuna\ngdg\ngway\nautodiscover.edu\nlaon\nlfa\nmyservices\nbuildbot\nwww.usosweb\nwww.mbp\nizzy\nkidz\nphpfox\nwww.tokyo\nmilionar\nmiliardar\nuus\njoon\njong\nethiopia\nkillroy\nkep2\nyarrow\nmail.c\npublikacje\nuniba-gw\ntellmemore\nkarb\nwapgame\ntestowy\nhjxy\nebook1\nsjy\nirim\nflynet\nimmi\nmasterminds\nicar\nhusi\nvms02\nmanawa\nmystere\nvms03\np03\nmonsite\nthorax\nhuge\nmailwall\njaun\nassalam\nautomatic\nlavigne\nip69\ninfo-tech\niax\nhoot\npstutorials\nsanu\ntravaux\nuyu\niden\ntestdir\ntestmap\nautoconfig.dvd\ngumi\nautodiscover.dvd\nguma\nibon\nhiya\norderdesk\ndcg\ngrip\nwoori\nmanten\ngpis\nabstest\nnsmail\nitalie\nduitsland\nmanner\nauthorize\nmanman\ngkgk\nwpdev\ndata01\nwww.front\nneighbor\ninmemoriam\notic\nhibiki\nexpt\nfois\nmandoo\nmi5\nxp1\ns250\novis\nwas3\naweb\ncassettetape\nfairytales\nmmedia10\napd\nenvi\nelle\nl226\ninfocomp\naquario\nbetavmadmin\nfhweb\nl007\nl004\ndorr\nimages1e\neerr\nadvantage2\nc119\nc129\nc249\nip11\na23\nny-site2\na35\na36\na37\na38\na39\na41\na42\na43\na44\na88\nwebdisk.2013\nrahuls\neazy\nmama11\ngamesd\nwww.wbg\nnoscript\nbyun\ncord\ncomo\ncoil\nderf\ndirektori\npemilu2009\ncobi\ntoolserver\nquad2\nbubi\ndask\nquad1\nrbh\nproxie\nkph\nazzi\nhideout\nbetavmadmin1\nciel\naxyz\nchie\nchee\nb54\nchap\nidl\nb56\nauna\nb58\nbot1\nbois\nb62\neurope1\nb64\nbeta-inventory1\ntera01\nawin\nb68\natto\naszx\nccem\nbetavminventory\nb78\nsp2digital\nlioness\nch20\nswh\nch13\nb87\nb88\nbion\nart2\naple\nb96\nanen\namam\nrmm1a\najun\naeve\nwww.arhiva\nrmm1e\naeco\nacre\nacle\ntsubaki\nwonderboys\naang\nabad\nmbs01\nnml\njdesign\ndecoder\nrmmglx0\nsasamoto\naube\nsaturday\nrmmglx1\nd211\ncareerfit\nproba1\nrmmglx2\nonboard\nwebcm\npahan\nadminapi\ndpus\nrmm2u\ninventory2\nupload2u\nlooloo\nkesehatan\nhoja\nc77\ndemolink\norson\nwww-tst\nhellos\nc001\nbetavmad\nxenserver3\nmyvalentine\nmol\ndistribute\nwildwild\nxenserver4\ntoytoy\nmarrakech\nmahogany\nevil666\nurmom\nd38\nd52\nmi-lvs1\nd57\nd58\nd59\nny-site1\nd62\nd63\nsliders\nd65\nimages1u\nd68\nd69\nd71\nd72\nd73\nd74\nd75\nd76\nd77\nd78\nd79\nd81\nd82\nd83\nd84\nd85\nd86\nd87\nd88\ndpreports\nd94\nd98\nright-click\nmoonwalker\ntumbleweed\ne14\ncci4admin\nmbase\npref\ncis2\ncreditosgratis\npjocuri\nmanchesterunited\nverus\nskydrive\nadam20\ni18n\nimages2u\ndelhtca06\ninvetalcom\ne99\neurasia\nf15\ndelhtca05\nemobile\ng18\ndelhtca03\nministry\ndelhtca02\ncm8testdigital\nh92\nh93\nh94\nh95\nh96\nh97\nh98\nh99\nj24\nrmm1u\nk23\nl11\nupload1e\na102\na103\na104\na105\na106\na111\nnorthridge\nw28\nny-lvs1\nm73\nm70\npramod\nny-lvs2\npradee\nzonedirector\nlongtime\nwww.mikail\ntvbox\nbetavmad1\ncci4ad\nupload1u\nb116\npa-lvs1\npa-lvs2\ngamesplanet\nbtest1\nwww.offtopic\nzolb\nmms.noscript\nyuli\nyugi\nthequeen\nwww.evdenevenakliyat\nlongtail\nmail.ucakbileti\nwww.chivalry\nxyzx\nhealer\nwrangler\nwe2\npapercup\nnewsmail\nb150\noperahouse\nwww.turkforum\njyoung\nwww.west\ntoon\nwww.haxball\nhighcolor\nb160\nb162\nb163\nzary\nb190\nwww.highschoolmusical\nb240\nc110\nc111\nc112\nc113\nc114\nc115\nc116\nzis\nwww.the-best\nc118\nc120\nc121\nc122\nsingo\nc124\nc125\nc126\nc127\nc130\nc157\nmail.android\nc212\nc213\nc216\nc241\nc242\nc243\nc244\ntokki\nc248\nxtc\npentagon\nwartime\nallfree\nf105\nf106\nf109\nf112\nparamount\nf168\nyese\nwweb\nh102\nh103\nh104\nh105\nh106\nh107\nh108\nh110\nh112\nh114\nh115\nhoneydew\nh117\nh118\nh119\nh121\nh122\nyeah\ntakashi\nh125\nyala\nmacvpn\nmaninder\nchaterbox\nwww.ilahi\nh135\nvyas\nuzu\nxela\nh138\nfuentes\nparole\nwww.eyebook\npartho\nwapi\npathak\nonlinejob\nvish\npoweruser\nrs01\nh151\nwadi\nh153\ndeadline\ndoktor\ntung\nvara\nh211\nh212\nvanu\nvani\nszyx\nh217\nh218\nh219\nh222\nf250\ni123\ni124\ni125\ni131\nthecracker\nsuffolk\nk139\ntestprojects\na59\nimmo\nmegumi\nsyw\nb60\nb70\nservicemaster\nb90\ntomm\ne104\ngreenish\nambroise\nc90\nluminous\npayday\nd70\nd80\nsuju\nsukh\nturbo1\ntb2\nh109\nmeitan\nh124\nstim\nwww.badcompany\ntiwi\npaxton\ntitle\nstarx\npchelp\nreminiscence\nh220\na205\nssad\npaypol\nwww.hifi\nsensations\nb159\nryuk\nspsp\npainel2\nanchovy\ncometa\nchicha\nsory\npazuzu\nspfm\nanonymous2\nsoga\nsmps\nns.img\ntest.my\nomaker\nrongcheng\nchirashi\ncreeper\nsource2\nxgeneration\nonurair\nruma\natyourservice\nadldap\nbiznet\nfireheart\nthy\njstreet\nskol\nlmy\nlnk\nws05\necredit\nsunexpress\nanadolujet\nborajet\ntaky\nautoconfig.bm\nmacherie\nwebftp2\nautodiscover.bm\nshut\nkkt\nwebdisk.bm\nwww.renaissance\ns1025\ns1026\ns1027\nsidi\nkickass\nsid1\ntheagency\nrots\ns1028\ns1011a\ns1011b\nteeth\nini\njee\nfq\next00\nmydb\njby\ncoretest\nteam5\nromy\ns1032\nshindou\ns1033\ns1034\nsens\ns1035\nselo\ns1036\ns1012a\nroan\ngse\ns1012b\ns737ipmi\ns1013a\ns1013b\ns4348ipmi\ns1014a\nskyofking\nhatred\ns1014b\ns101a\ns101b\ngks\nriya\nslime\ns4354ipmi\ns1015a\nsakr\nhag\ns102a\nevv\nsajt\ncarlyle\ns1031\npolyglot\nwfl\ns1016a\nsaim\ns103a\nrbg\nuniq10\nflowerpower\ns103b\ns1017a\nitsmine\nyoghurt\ntasak\npartyanimal\nbeta2013\nwmin\nstride\nmobile-device\nmortgageapp-pa\ndocumatix-slc\npropointslave\ndocumatix-den\nmail5.mail\nmail4.mail\nmail3.mail\nclick1.mail\nmail2.mail\nmail7.mail\nmyarticles\nmail1.mail\nmail6.mail\ns1017b\nk55\ngeovany\ns1102\nironport01\ndhk\ns104a\nwebdisk.123\nboring\nscandal\nshock\ninton\nnoproblem\nchachacha\ns1105\nshiri\nskyblack\n12345678\ns1106\njworld\nrida\ngdz\ns1107\nmandark\nceylon\ns1108\nwebsitehosting\ns1018a\nrere\ns1018b\noneandonly\nsevgi\ns1112\nwebdisk.me\nrena\nmelancholy\nsoapbox\nfeed2\ns1113\nseory\ns1114\npinata\nws190\ntrickster\nws203\nws195\nws199\nws200\nws194\nsekai\ns1115\nws120\ninterlude\nws179\nmomofuku\nws183\nws184\nws185\nws186\nws187\nws188\nws189\ns1116\nws193\nws196\nws197\nws198\nrye\nws180\nclamav\ns1117\nsnl\nmytest1\ns1118\ns1019a\nhamham\ns1019b\nscoop\nscene\ns1122\ns1123\ns106a\npop.test\ns106c\nvide\ns1127\ns1128\nsugar03\ns1021a\nbmfresh\ns1021b\npros\nrafi\nwww.back\nfurukawa\ns1132\nmysql21\ngoodshop\ns1133\nboiler\nradh\ns1135\ns1136\nstoryteller\nhmaster\nyoungjin\nmanni\ns1138\nchoopa\ns1022a\n8.ab1\npras\nfreeid\nprag\nmichelle2\nfwp\nconnectra\ns1022b\nmoran3\nltm\nhollyweb\naviram\ns207ipmi\ns108a\npoma\ncontinent\ns1023a\n1.ab1\n1.ab4\npogo\niomega\nhitachino\n2.ab4\nouma\ns1023b\ns1334ipmi\nosun\npixe\ngoodmail\n3.ab1\nvideoz\nqais\nbidon\npips\nwebdisk.pro\nassociates\nmicro6\nmicro5\nmicro4\nmicro3\nshirka\ns1024a\nw00w\nw00t\ns1024b\nopic\ns111a\ns902a\npero\ns1025a\ns1025b\ns112a\ns112b\ns1026a\ns1026b\ns213ipmi\ns113a\ns113b\npaps\ns1027a\nflex3\nflex2\nokay\ns1027b\nupw\npaki\nrab\nscamper\nlazare\ns114a\ns114b\ns114c\ntusa\ntrinity2\nlea1\nbkmain\nmasquerade\nnetwise\ndoron\n31337\nmss2\nparkiet\ns1028a\ntwyla\ncotopaxi\npc158\npuchi\nanir\nsonny2\nnomen\nmylab\nrzadmin\ns115a\nnosa\ns115b\ns-gcclientadmin\neaglegatefa\nmmconline\ns-gcglobaladmin\namericansentinel\nglobalview\ns-gcwebserver\nneci\nglobalcampus\nreportservices\ns-gcwebservice\npophost\ns115c\ncosc\nnomi\nstripe\nbbsm\nnnnn\ns1029a\ns1223\ns116a\ns116b\nsurvival\nhazmat\nwww.hrd\nbuilder.login\nsunmail\nfabrica\nranga\nwithlove\nwww.hazmat\nnavigare\nmums\nstefanie\ns116c\nwww.livezilla\nepbx\nmuni\ndobbie\nrabin\nmuko\nbkp3\nmuki\nstore8\nmuka\nfcs2\ns1031a\nemptiness\npainel3\nbdirect\nacri\nportaledu5\ns1031b\ndnsnowy\nmsky\nplanete\ns117a\ns117b\ns1236\ns1237\ns1238\ns1240\ns1032b\ndatenbank\ns1242\nwww.belka\nps137\nps136\nwww.grc\nsuffix\ngoaway\ns1243\npopol\ngoodgame\ns118a\ns118b\nmoti\nmosh\nmssql10\nbloomberg\ns1033a\nfree24\ns1033b\ncampusnet\ns120a\natlas1b\nnetz\natlas2b\nlqfb\ntase\nout33\ns119b\nblumen\npassive\ntw1\nmoju\nseasonsgreetings2012\nsecureportal\ns4111ipmi\nmohd\nostar\ntreasure\nbeautifulgirls\ns1034a\ns1034b\nhortus\nvendorportal\nblooming\ns121a\ns121b\nneek\nmaringa\ns1035a\nmail1-uk\ns1035b\ns122a\nlsn\nkfq\nboz\ns122b\nwithyou\ns1323ipmi\nlayback\nkvm2-1\nkvm2-2\nkvm2-3\nliya\nmfp\nnapo\nnang\nperfection\njnj\nsk01\napplepie\ns123a\ns1test\nwww.010\ns123b\nwww.kf\nsynchron\ntest12345678\nwww.pv\nwww.sw\nwww.sz\nt168\npennylane\nwww.xz\ns1351ipmi\noptimal\nwww.yx\nwww.yy\nwww.zx\nwebdisk.jd\nsunglass\nappellini\nhanjie\ndatabassano\ns1037b\ns1302\nsitetest\nwww.gk\nlavish\ns1303\nhjys\ns1304\ns1305\nweld\nloth\nloni\ns1306\nopus2\nopus1\nwww.66\n0701\ntissue\n0912\ns1307\nwww.xj\ns1308\nwww.shy\nwww.zang\nzang\ns1038a\nciaociao\nanimecity\nollie\nembrace\nwmsaiglive\nkeypartner\ns1311\nmeko\ns1312\ns1313\nkusu\ns1314\nredribbon\ntrickstar\nsoundwave\ns1315\ndirector2\nsdev\nfont\nmed1\nperido\ns1316\ntwdvd\nmail.vul\nblackswan\nmail.3d-sex-and-zen\nmail.pornhub\n6k\npornhub\nxvdieo\nrouter01\n4399\ns1317\ns1318\nkudy\nmail.4399\nmail.xh\nmail.bbs-tw\nmail.ben10\ninstagram\nmail.twdvd\nmawi\nmail.xveedeo\nnoway\ns1039a\nmail.fungo\ns1039b\ndisscuss4u\n666pic\nmail.666pic\n3d-sex-and-zen\ncontabil\nmail.01\npoki\n999av\ns1322\n636\ns1323\nmail.ff\ns126a\nmail.qk\ns1325\nmail.thisav\nmail.tube\nmail.xvideos\nedulis\ntoyworld\ndiscuss4u\nfoodie\nlanice\nsantateresa\nmail.xvdieo\nwagdy\ngraylady\nmail.6k\nmail.u6\nthisav\nkkclub\nmail.kkclub\nbbs-tw\nblackpink\nmail.ut\nmail.zgame\nmail.999av\nxveedeo\nmail.tt1069\ngreengreen\nmail.disscuss4u\nandantino\nmail.sex169\nmail.discuss4u\ns1326\nmail.redtube\ns1327\nhdcctv\narecont\niqeyeedge1\nopssecurity\niqeye\nvivotek\nzseries\namericandynamics\nstardot\ncodero\nsserieslite\ns-series-demo\nevapi\naxisedge4\naxisedge3\naxisedge2\naxisedge1\nevwebtest\nexacqsecurity\nadtrac\nfourboard\nsanyo\niqeyeedge2\nkermit30\ncesars\nlaurac\ns1328\ns1329\nhilltop\ntest77\ns1331\nmontblanc\ns1332\nbetaforum\nnewskin\nbreaker\ngso\ns1333\nnismo\nmahi\ns127a\ns1335\nclayworks\nqueserasera\nbluejam\ngna\nteardrops\njurist\ns1336\npillars\nnicki\nwimax\ns1337\npallet\ns1338\nkoon\nmailbak\ns1339\ngeopia\ntouhoku\ndazzling\ngolfclub\nnewsa\nrbldns\nwsdy\nselection\nfukfuk\nzeropage\nnella\nblackhand\ns1341\nabaris\ns1342\ns128a\nsimak\nkaimin\ngender\ns128b\ns1346\nminero\nlusty\nmichelangelo\ns1347\naconite\ncreativeweb\ns1348\nphone7\ndisabled\ntent\ns1350\nleng\ns1351\ns1352\nnaver\nnagara\ntrams\nfogbugz\nmixed\nnamoo\nslxsync\nqa.congressional\nisbnws\ntest.pubeasy\ntestbed1.congressional\nmpe-web\nnebula-dc4\nimageweb\nbeta.bows\ns1353\nmarimari\ntestbed2.congressional\nbeta.isbnws\nmydiary\npubtrack\nsyndetics\nsecurenfuse\nolbers\nprediction\nleka\nseventeen\ns129a\ntakenaka\nsunsoft\nmailorder\namedia\nserverreg\ns129b\nolink\nneogene\nldapprod\ndr-vpn\nlearntest\nadmin111\nstudent-dev\nworldpeace\ns1356\nauth-dev\nshine99\ncloudcity\ns1357\ns1358\nlotte\naixin\nitedu\nebl\ns1359\nbberry\ns1361\ns1362\ninfoblox\nmbs2\nstarlet\nneuf\nthefly\nmonello\nphantasma\nmoji\ns1363\nshimoda\nwww.rw\ns1364\ns1365\ns1366\ns1367\ns1368\nyacy\npdu-a1-1\napmail\npdu-a1-2\nthebox\njportal\nmuttley\ns1372\nbackroom\nautoconfig.au\nmutant\nblauer\ns1373\ns1374\nduckduck\nmaid\ns1375\nbreed\ncvsup\ns132c\nmeetu\nhaitham\ns1362ipmi\nbgw\nyorokobi\nlumi\ns133a\nwww.mil\necohouse\nkwang\nlame\nwebdisk.origin\ndiv\nbridgit\nmartinique\nnorisuke\nmislab\nysl\nbehavior\nmpx\nwebhost4\nvagues\ns133b\nyks\nyhk\nasdfas\nhal9000\nthinkagain\nnari\nparkman\nwmi\nxax\ncarmel\nstore3\nstore4\nstore5\nwad\nhone\ntyc\nbasestation\nuhc\nresource1\num2\ntob\nhoco\ntmh\nsfd\nhkit\nspz\nsolitaire\nzed\ntgw\ns133f\nwins02\ns1391\nattis\ns1392\nneuronet\ngoogoo\ns1395\ncas6\ndill\nhypnotherapy\nlisp\ns1408\ndirectmail\ncostume\nrook\ns1399\njord\njsbach\ns1411\nmbook\nmaybe\njoyfull\nw0w\npok\nsudhi\ns1412\nown\notf\nparaiba\nwww.norilsk\ndmitry\npjm\ndinc\npel\nallergy\ncalec\nnoo\nmyb\njuiced\nds2012\natama\nchun\nwakako\nvanquish\nbucuresti\nnmm\nbw1\nwebdreams\nodi\node\nnkc\nno9\npsnext\nkeno\ntopaze\nwiser\nnn2\nmnj\nnee\nluv\nmmd\nmyfreedom\ndlinks\nmjh\nfrogger\nnaruho\nkus\nmaruo\nsmtp03-out\nliv\nkow\nansy\nfarmhouse\nmerami\njoce\nkeka\naff1\nker\njoh\nkdw\nnozawa\nhisashi\nnagios01\nhyp\nkrolik\nhyj\nfunakoshi\nine\nhsj\npinkpearl\njai\nauth02\nauth03\nmarvin2\niie\npitcrew\niez\nsunray3\nmanara\ngwmobile\niaa\nwebreporter\nkronus\nmoose\ns1367ipmi\ns1432\ndc1.ad\ns137b\nmiv\nms0\nher\nhdw\nhek\nhdp\ngnf\nlinebreak\nhdk\nhappytrading\ntasuke\nhuckle\ncisco8\nautodiscover.whmcs\ns1437\nhci\nautoconfig.status\nn26\ns1438\nn21\nhai\nautodiscover.maps\nbakchos\ns1439\nautodiscover.status\nautoconfig.whmcs\nmanja\nautoconfig.maps\nwebdisk.maps\nynb\nduvar\ncvport\ns1441\nrjh\nicache2\nmisite\nwww.sevastopol\ns1442\ns1443\ns138a\nbebeto\ndbserv\ns138b\nastore\nkshop\nopen2\n24x7\nexe\neur\nbdw\ns138c\nproject5\nbf8\nepl\ns1448\ns1449\nnextworld\nfam\nrenovatio\ncsh\nmrgreen\nnewgen\ns1451\nkbot\nsoest\nayo\nkaza\nangelstar\nautodiscover.youtube\nautoconfig.youtube\ndomen\ntranshelp\ns1452\ns1453\nwww.uv\ns140a\nspecialevents\nwww.correio\nlls\npocas\ns139b\nvhost6\ns1456\nblg\ns1457\ntwcprod\ntdgdev\ndragun\nh2s\nkeriomail\ngridjoyweb1\nsshstaging\nohsuf\nsshprod\npromoaid\nablogs\naot\nseoplink\nkarm\nwebact\ns1458\ns1459\naee\ns1461\nspaceship\ns1463\nworldgames\ns141a\noaweb\ns141b\nd90\nfineday\nrabbitman\ns1468\nbo2\npdu-a2-1\nseong\nsamhan\ngingko\ngayline\npdu-a2-2\nlethe\nbenzaiten\nkano\nazmoodehcomplex\nlefty\ns1107ipmi\nleeco\nnarciso\njitu\nlovesick\nsnowflowers\ntest00\nkako\nwebtop\nbmaster\ns142b\nkahn\njudai\nisha\ns1101\nwww.worldgames\narashi\nkadi\ns1478\ns1479\nmagrathea\ns1481\njial\ns1482\ns1483\nsuva\ntta3\ncadiz\nonc\nsibiu\nwww.amsterdam\njshop\nzmta\nstanford\nwlan-gw\ns143a\nicecube\ns143b\nhampshire\ntd01\nwww.reservations\ntondu\ns1480b\ns806b\ns144a\ntarragona\nkimek\ntopanga\njbh\nducati\nnsj\nwebhouse\niphone4s\nmaputo\ns144b\ns1104\nizmir\nleefamily\ns527ipmi\ncranberry\ncworks\nlarisa\nservices1\nwebdisk.sklep\nsakura39\ntenten\ntenshi\nkhaki\ns746\nwr1\nwl3\naitken\nshowroom3\nswitch7\ndallas2\nmidge\nhomburg\nhappymondays\nalbarr\nassociate\npatz\nscotte\nstas\nmattk\naar\ns427ipmi\npro1\ns1113ipmi\npsv\nmailvip\nlyncpool01\ns4315b\nkiki.ads\nns-test\nexternal1\ndh10\npubtest\nwebfarm\ns4144ipmi\ns1110\nautodiscover.mob\ns630a\nautoconfig.mob\nfrauen\ns1111\nwww.frauen\nwww.52\nwww.63\nmersey\nbfl\nilja\njays\ns533ipmi\npleione\nbeta-www\ns642ipmi\ngalinka\ns1328ipmi\ns1118ipmi\nmoneysaver\ns1474\nvsphere1\nwebct1\nmailer6\nsteen\nclinical\ncimarron\ntouchnet\nikki\nworth\ngrenada\nrayleigh\nmalthus\ns4149ipmi\ns622ipmi\ns153a\ncasweb\ns814ipmi\nvpn-inside\nosteo\ndts2\ncwserver\nchambers\ns4316b\nmisentry\ns1029\nhildebrand\nkcn\nbelloc\ns1390ipmi\ns1124ipmi\ns156a\ns156b\nwww.kokomo\nshopping2\nwww.megami\nxpert\nredm\nadportal\ns1013ipmi\nilluminate\ns4142a\nconsulthts\nvmview\npakwest\npakwestx\ns1124\nconsulthtsx\nwlzx\nblog-en\ns819ipmi\ns1471ipmi\niheb\ngjzx\ns1126\nwserv\ns913\ns4317a\nmailhub3\nmailhub4\ns1405ipmi\ns50a\ns1129ipmi\ns729a\ns4161ipmi\ns1131\ns825ipmi\ns163a\ns163b\ns195\ndev.media\nsecure12\nsecure02\npassport1\nicrm\nstrato\nimmo1\nmysecure\ncloudsupport\nrust\ntease\neliana\nhost-2\nrecruiters\narquitetura\ns4330a\ns1209a\npop-gw\nocsinventory-ng\nbabi\ns1209b\ns1411ipmi\nircd\nsuckhoe\ns4270ipmi\ns1135ipmi\ninternalcrm\ns4130b\nvps2.serverel.com\nsanit\ns4166ipmi\ns831ipmi\nwebrep\ns4318b\naow\nlyncadmin\ns4333ipmi\ns1140\nswu\ndev200\ns1416ipmi\niees\ncalamari\ns4230ipmi\ns4220a\ns708ipmi\ns4172ipmi\nsold\nwebweb\ns834ipmi\ns734a\neftp\nbarbi\njohnjohn\nhellgate\nserver-8\nbittern\nserver-6\navocet\nserver-5\nserver-4\nmiyakawa\nwebforum\neasytrack\nadnet2\nkgn\ns836ipmi\ntfh\npma3\ns285ipmi\nfaleconosco\nweegee\ntdp\nmailgw02\nbaltimoredc\ns934ipmi\nshukatsu\ncamil\nftp.p\nhscm\nwww.outdoors\ns173a\ns173b\nautodiscover.invest\nwebdisk.invest\nautoconfig.invest\nrangoon\noai\ndanielw\ns1422ipmi\ns4320b\nwww.comps\nmaigret\nras06\ns320a\nwpmu\nnode21\nvshield\nnetapp01\nras05\niradio\ncitrix02\nras01\nras02\nhastur\nsynology\ns801\nsiw\ns4179ipmi\ns4177ipmi\nlindsey\ntabs\nwww.dog\ns175a\nwww.igri\nlasvegas.dev\npauling\nagent1\ns175b\ngiskard\ns842ipmi\ns176a\nadvs\nyingjie\nimg.blog\ns176b\nsage3\nthor2\nsan01\ns301ipmi\nfootprints01\ngrot\ns1101a\nhind\ns1101b\njbbs\ns1369\ns320b\ngepetto\nthalamus\nathens.dev\nphoenix.dev\nrivka\ntest43\ns1102a\ntest45\ns167ipmi\ntest50\ns4132b\nyttrium\nk02\nquaoar\ncyclades\neducation2\ns1401a\ns1103a\nsaucer\ns4183ipmi\ndev07\ncross-reference\ndcdctest\nusso\nmehqnotes4\ns1391b\nussotest\ntest-psearch\nglomis\nprotector2\ns1104a\nmehqnotes1\nmehqnotes2\nglomis-rep\nimsrv1\nsmartbomtest\nmobile2.dev\nhqmailsrv1\ncross-reference2\nmuratavoip\nsmartbom\nquotetest\nocenter\nmesjnotes1\ndcdc\ns1105a\ncampanhas\ns1105b\ns920\ngalaxy1\ns4365ipmi\nsm153\nthestudio\nman01\ns1106a\nosirix\ns1106b\nivanhoe\ns1107a\nsnarf\nosmium\nokane\ns4188ipmi\nkazunori\nwww.americanstudies\ncybercrime\nsound2\nsound5\ns1018ipmi\nsound6\nsound7\nsound8\nsoundx\ns1108a\ns185a\nsound10\nsoury\ns1402a\ntesttest1\ncidep\nfarfalla\npiata\nmargus\nwww.tfb\ntfb\ndonbot\nboxy\ntinnytim\ncrushinator\ncoilette\nmail-p\nsource1\nsource3\nmotis\nvdt\nbackup04\nwww.loadtest\niexternaldb\nkorund\nsoscenter\noweb\nmonkey12\nservices.dev\ns1110a\nnei\ns312ipmi\nsnip\ncisco4-2\nnjn\ns186a\ndaa3\ns186b\ns186c\ncarolan\ns1111a\nmidias\nlcp4\nlcp3\ns303ipmi\nlcp2\ns1438ipmi\nnancy1\ngrapes2\ns1112a\nportmaster\nvally\npdu9\njtb\ndrteeth\ns822\nintmed\nduckie\nket\ns4204ipmi\ninfra11\ns1113a\nportier\nsynaps\nboadicea\ninfra10\ns1470ipmi\nlodging\ns190a\ns190b\nhoian\ns1114a\ns317ipmi\nvinno\ns1115a\ns620a\nmailadm\nhospitalists\nbhsftp\nphysicianupdates\ns1444ipmi\nextmail1\nphysicianupdate\na380\ncenp\nepicproxy\nextmail2\nbpa2\nquarantine51\nmdportal\ntowerpacs\nellen2\nssstage\nresidency\nveena\nwebdisk.devel\ng-star\ndo1\nmaccer\nmstock\nmotech\nread2\nflyspray\nnicolash\nmackie\ncjp\ns202a\nlscs\ns1393a\ns1116a\nblazar\nmedgen2\nnotepc\nyorozu\nsantoku\ntopkapi\ndialin13\ncc5\ndialin14\nnegima\nkasturi\ndialin15\ndialin16\ndialin17\ndialin18\ncasiopea\ndialin19\ndialin21\ndialin22\ndialin23\ndialin24\ndialin25\ndialin27\ndialin28\ndialin32\ndialin34\ndialin37\ns1393b\nnugo\nvmwww\ncappella\nauva\nlcp1\nnabiki\nshadok\ns4209ipmi\necommerce1\ns830\ns1117a\ns204a\nparc\nidmap\ns1429ipmi\npartner-test\ns1118a\nbulk2\ns323ipmi\ns205a\ndebs1\ns1120a\ns1120b\nmobileqa1\ndialin20\ndialin30\ndialin31\n420\nz8\nciscolab\ns1449ipmi\ndialin35\ndialin36\ndialin38\ns206b\ndialin40\nhelo\ndialin41\ndialin42\nfogo\ns1121a\nftir\nbedford\npurifier\ns1121b\ns207a\ns207b\nflights\neuclides\nold-blog\nconf2013\ns1122a\nfiber\ndiffy\ns1122b\ndreamline\ns208a\npushpin\ns1394a\neames\ns1123a\nkrab\ns1123b\ns1394b\nmwanza\nluno\nfeline\ns209a\npaytest\ns210c\ns842b\nprod01\ns1124a\ns1124b\ns4110a\ns211a\npc05\npc06\neeepc\nretoure\nwww.kunde\ns1455ipmi\nwww.intern\ns1125a\nlectures\ns1125b\ngutscheine\ns842\ns1126a\ns1126b\npurl\ndom11\nsbin\nsvn5\nnewbeta\ns213b\nsmtp153\nrood\n206.182.105.184.mtx.apn-outbound\nmalindi\ns1127a\ns1127b\nsmtp180\n184.182.105.184.mtx.pascal\ntira\nns-svwh\nsmtp160\n189.182.105.184.mtx.pascal\nbartel\ns609ipmi\ngeochron\neu-ns\noutscan-200\noutscan-202\nmailspike\noutscan-201\noutscan\n201.182.105.184.mtx.outscan\noutscan-231\noutscan-232\noutscan-233\noutscan-230\noutscan-235\noutscan-237\noutscan-238\noutscan-239\nhostkarma-eu\n204.182.105.184.mtx.outscan\ns214a\nsmtp174\ns334ipmi\noutscan-real\n205.182.105.184.mtx.apn-outbound\nsmtp177\nspamstore\nappletree-outbound\nsmtp129\nsmtp131\ns1340ipmi\nsmtp133\nsmtp134\nsmtp135\nsmtp136\nsmtp137\nretry2\nsmtp139\nsmtp141\ns1128a\nsmtp143\nsmtp144\nsmtp145\nsmtp146\nsmtp147\nzamowienia\nsmtp149\n209.182.105.184.mtx.apn-outbound\nsmtp152\nsmtp154\nsmtp155\nsmtp156\nsmtp157\nsmtp158\nsmtp159\nsmtp161\nsmtp162\ns1128b\nsmtp163\nsmtp164\nsmtp165\nsmtp166\nsmtp167\nsmtp168\nsmtp169\nsmtp171\nsmtp172\nsmtp173\ns215a\nsmtp175\nsmtp176\njef-admin\nsmtp178\nsmtp179\nsmtp181\nsmtp182\ndigiweb-outbound\nsmtp184\nsmtp185\nsmtp186\ns1405a\ngenerals\nsmtp189\nsmtp188\nsmtp190\nob-230\nob-232\nob-233\nob-234\nob-235\ns1461ipmi\nob-236\nob-237\nob-238\napn-outbound\nns-prgmr\nhostingsource\n185.182.105.184.mtx.pascal\nmailspike2\n182.182.105.184.mtx.pascal\nsmtp183\nns-t3n\n3a\ns1130b\nbpel\n200.182.105.184.mtx.outscan\noutscan-236\n203.182.105.184.mtx.outscan\ns1395b\n208.182.105.184.mtx.apn-outbound\ns216a\nob-231\n180.182.105.184.mtx.pascal\napn-outbound-205\napn-outbound-206\napn-outbound-207\napn-outbound-208\napn-outbound-209\n183.182.105.184.mtx.pascal\nmailview\nob-239\nsegan\n188.182.105.184.mtx.pascal\nsmtp187\nnick1\nnick3\n187.182.105.184.mtx.pascal\nneonova-outbound\nt3n\noutscan-backup\nsmtp130\nspamd0\ns4226ipmi\nsmtp151\n207.182.105.184.mtx.apn-outbound\nrbl0\nrbl3\nrbl4\nrbl5\nrbl6\nrbl7\nrbl8\nrbl9\n181.182.105.184.mtx.pascal\ns1131a\nubuntulinux\noutscan-234\n202.182.105.184.mtx.outscan\nsmtp138\n186.182.105.184.mtx.pascal\nsugar01\noutscan-203\noutscan-204\nsugar02\nbobdylan\nkyy\nhostingsource-195\nhostingsource-196\nhostingsource-197\nhostingsource-198\nduran\ns1131b\ndummy3\ndummy4\nwww.robbie\nsmtp191\nmasscheck\ns217a\nsmtp150\nmakeweb\ns217b\nwww.ozzy\nwww.biblioteka\nddns3\nwww.beatles\nstones\ngino\nwww.abba\ngdns1\ngdns2\ncgi01\nbelgia\ns1132b\nwww.ledzeppelin\ns615ipmi\nwww.rem\ns218a\ns218b\ns339ipmi\ncelinedion\ndialup3\nnewsold\ngigs\nwww.s12\nthedoors\nwww.bonjovi\nwww.britney\npresley\nayame\nazuma\ns1133a\ns1133b\nroselle\ns1133c\naerosmith\ndatabank\nselab\nledzeppelin\nac-dc\ns219a\nap10\nwww.tori\ns1466ipmi\nshamash\nwww.celinedion\ns1134a\nstpexch\nhadoop01\nhadoop02\nhadoop03\ns1134b\nkoji\ntrui\ns1134c\ns221a\nspirits\ngw-test\nwyvern\nwww.middleeast\ns221b\nwww.mum\nwayf\ns221d\ns4232ipmi\nincarose\nwww.yss\njobstest\nsafehaven\ns1135a\nsubscription\nwww.dobre\ncmssandbox\ndobre\ntdh\ns1135b\n#pop3\nvideo10\nvideo11\nxchange1\nftp.wap\ns222a\nbase10\nbase14\nbase13\nbase11\nbase09\nbase08\nfreshman\nbase07\narthistory\nbase06\ngwh\nitcnet\nfotobuch\nalid\nwebdisk.host3\nwww.cruise\ncsharp\n4a\nftpwork\nrelaunch2\nsingle\nfurien\ntransporter\ns1406a\nifi\npilkada\nhoaipk\nnabeel\nhadish\nwww.mos\napunts\nlatihan\nwww.paypal\nwww.host3\ngitit\nwww.christine\ns4127ipmi\nkunduz\ndns178\nrenderer\ns1136a\nalexpc\ncarioca\ndns114\ndns112\ndns111\ncolo2\nseotool\nsubasta\nwww.train\nkaolin\ndns105\ndns104\ns1136b\nwww.pisa\nabt\ndns103\ndns102\nerikm\ngtr\nrepeater\nzys\nega\ncyh\ns1396b\nt1ns\nkarine\ncbh\nkennethv\ns223a\nlicserv1\nf50\nntop\ns223b\nroberta\nflits\niwm\nksn\ncommunicationsftp\nkzr\nwww.arif\nwww.basic\nsites2\ns224a\nnur\nvenpur\ns4331ipmi\never4\nlachesis\ngjacll\neddspermits\nthietke\nwba\ncjis-dr\ncjis-webdev\ns1472ipmi\niskender\ntulipa\ns1030a\ngenix\nejury\ns1138b\nveliyayla\nwww.journey\ngeezer\nmusab\nwww.walker\npdinfo-new\nmetal123\nstmichel\nwww.she\ns1206ipmi\nwww.chatchat\nwww.bugtrack\nlabelle\npostdoctor\nshorouk\ns225a\npecora\nwww.surajit\nsanjesh\neddsplanreviewdev\nqlvb\nminhhoang\nwww.badminton\ndwrarcgis\nourlove\nwww.seminar\ns225b\njcats\nwww.cihan\nwww.rental\ns1140a\ns1140b\nwww.asptest\nphimviet\nxfire\nmarket24\nessits\nwww.kolaypara\ndebs2\ngwinnettftp\nsanitationftp\nsaeid\neddspermitsdev\nsadeh\nsacom\ncharlot\nzag\nwww.programci\nemployeeaccess\ns226d\npdinfo\noperator1\nuperform\nwww.cosmo\nticaret\ngcecc\nmerkez\ns902ipmi\nabbasi\ns748ipmi\nonshop\nbiodata\nwww.giaitriviet\nwww.lazaro\nwebsite1\ncjis\nindigentdefense\nwif\ns626ipmi\ncomputerfreaks\nwww.webapp\nwww.pharma\ns1224\ns1225\nrith\ns1407a\nwww.filmclub\nshel\nmeloen\nsilver2\nbhavik\ns931\ns1209ipmi\neddsplanreview\nsadegh\ns1407b\nfruits\nboudoir\nwww.bon\nwww.cso\nbiofuel\nartemis2\nzatopek\nprovid\ndaingean\nframboise\ncortez\ngabbro\nwww.babacan\nkayseri\nmonkey11\nmohpc\ndev-m\ntwitch\ns1212ipmi\nfiller\nwww.tpc\nwww.salimi\nwww.ttt\nwww.addons\nhooba\neponline\ntestowe\ns230a\nkevindm\nportobello\nwww.sample\ns230b\nwowza1\ns4243ipmi\npromedia\npatrickb\nempower\ntrunghieu\nveolia\nwebpanel\nsalaam\neskimo\nwww.lojavirtual\nsnappy\nmoller\nquiksilver\ncengiz\nwww.yusuf\nnhacpro\nthanhvn\npalmon\nwww.mymoney\nwww.tiny\nwww.artgallery\nprzepisy\nwww.haber\ns907ipmi\naverhuls\ntempdemo\nthesis1\nwww.1234\ns510a\ncharisma\npcounter\nwww.yellowpages\ns233a\ns1219a\nwww.hasan\nwww.automoto\ns1483ipmi\nwww.election\ngoldmane\ncografya\nmark109\ns1217ipmi\nlede\nfractal\nboreas\nwrzuta\ns234b\nhulshout\nsimay\nieper\nbrecht\nhutech\ns720ipmi\ngo4\nwww.teksty\nwww.egysoft\nsalessupport\nrims\nstinky\ns4248ipmi\nmicron\nhaylaz\nwww.dostlarfm\nwww.healthy\ns235a\nthaian\nthong\npot\ns235b\ntale\nmdbs\ndiederik\nprevail\nnas6\nhdgh\nserver79\nwww.experimental\nserver68\ntvg\nwaw\nwww.furkan\nikbox\nwww.info1\nnet02\nserver65\nstar6\ns510b\nxss\ns913ipmi\nvdh\ngays\nsufi\ntoofan\ns1440a\nhieumu\nserver54\ns237a\nhqfw\namigos4ever\nfurkan\nwww.jimbo\nwww.restoran\nserver36\nakhil\nwww.astrology\nwww.pdfs\npishro\ns237b\npond1\nnas7\ns1032a\nwww.earthquake\njustnews\nwww.gara\nwebsolution\ns238a\nutf8\nwww.citrix\nbeos\ns1223ipmi\ningilizce\nwww.daemon\ns1241\ns1120ipmi\nbijay\nhomewiki\nmotif\ns4254ipmi\nmaciek\nbluey\ngmusic\ns239a\nscenic\ns240b\nthunghiem\nwww.iranit\nwww.daugia\ns934\ntantale\nwww.800\ns241a\ns241b\nwinterfell\nseyhan\nfluor\nrimsky\namid\ntopol\nberg\naosa\nara3\nsk2\nboro\nteszt3\nwww.malik\nazin\niranit\nbuty\ncompanies\nwww.marta\ns241c\nlunca\nns2.cloud\ndimi\nwiera\nwww.gomobile\ndev.my\nns1.cloud\nvario\ns1345ipmi\ns242a\ns1410a\nquickplace\nspaniel\nwikidev\neisk\nfox5\nquasimodo\ntatara\njapo\ninfohub\ns1410b\ns243a\nthanhtrung\nmahesh\nfizi\nwww.fathi\ns1228ipmi\nwww.sendsms\nmarcio\nextranet-dev\nnissim\nmiramar\nebdaa\nyehia\ns4330b\ns4259ipmi\ns901\nwww.okyanus\nwww.asso\nneel\nwww.azad\nitcyber\ncreativesoft\nbestanden\nwww.buty\nophrys\ns630ipmi\nwww.bahonar\nberkeley\ns924ipmi\nmad-dog\nwww.egov\nwww.clearwater\nslon\nower\nwww.enes\ncent\nwww.hh\nwww.qd\nwww.etis\namozesh\npackard\nauburn\nsaud\ns206a\ns4222a\nsgfs\ns1222a\nsika\nmitra\nhuseyin\nwpg\nwww.japo\netab\npicsgall1\npoldi\nsouthside\ns119a\ns1234ipmi\nwww.joko\ns120b\nwww.nab\ns4265ipmi\ncoolfish\nwww.myhost\ngadi\nhoriba\nwww.knightonlineworld\nwscr\nwww.mira\nwww.spartan\ngalls777\nwww.myapp\ndzup\ngargantua\nwww.omid\ns1029ipmi\ns908\nwww.workspace\nnotos\nwww.oyun\ns810a\ns910\nwww.pages\nshalin\nsevdagul\nforestpark\nmaihama\nwww.soap\nwww.brisbane\njusttest\nbrin\nsitest\nanhtung\ncomponent\npostadmin\ns407a\nchakwal\ncarson\ns1240ipmi\ns253a\ns253b\nleith\nwww.aksehir\ns4271ipmi\ns528ipmi\nwww.hme\nfblogin\ns4143a\ns935ipmi\nwww.intermed\nwww.apollo\ns255a\ncisco5-1\nwww.seattle\ns118ipmi\nwww.plesk\nsupplement\nmedford\nwww.frederick\nmelike\nwww.tampa\nmahmoudi\ncarp1\ntestme\nkolaypara\nwww.peterborough\nseguimiento\nconroe\ntruongpro\nwww.tpl\nfilo\nestat\ns331b\nevanston\nstgeorge\nrealmadrid4ever\ncoventry\ngiaitriviet\nnokiazone\nwww.prism\nwww.pibid\nwww.yas\ntelemed\nhoangdinh\nleading\nbrampton\ns1412b\nwww.sanjesh\nbrookvale\nbentre\nalisveris\ncanton\ns256a\ns256b\nhabesha\nsarasota\nbraintree\ns919\nwww.newcity\nvandai\ns921\nclovis\nwww.easymetin2\ns258a\nstudentinfo\nwww.centurion\nwww.rohit\nchantilly\ns258b\ns941ipmi\nfacebbook\nrichmondhill\nisams\nwww.shree\nwww.noavaran\ndover\nwww.site2\nsoftline\nwww.tales\nbestwishes\nchatham\nmarietta\nmehmetali\nwww.sohbet\ns260a\nchemgio\nprakash\navanish\negitimci\ns260b\ns823z\n1964\ns4178b\ncf3\nsantarosa\ncompsci\ns240ipmi\ns420ipmi\ns224ipmi\narlington\ns262a\ns262b\nbayside\nserv6\ns941\nlinuxsrv\nhillview\nstpetersburg\ns930\nhumanities\nwifi-portal\ns1450b\nkimbo\ns264a\nwww.clinton\ncxy\ns1391ipmi\nhermitage\nartarmon\nzikao\ns405ipmi\nautodiscover.ru\ns1036a\ngold.chem\nstowarzyszenie\nwwwssl\nkumu\ns130ipmi\nsmtp00\nframework\ns265a\nwww.epscor\nuhsp\ns265b\ns1036b\ns265d\nteax\ns942\nwww.shelby\npftest\ns4260a\nedytor\nastro11\nframeworks\ndebata\ns266a\nmeadows\nlogistyka\ncms-dev\nfuturesite\nbak184\ns1420a\nex4200-1\nex4200-2\nfuturetech\nihs\nvika\nsimferopol\ns610\npetruk\ns4240ipmi\nsudak\nmodtools\nvcs2\nstargate2\nvcs1\nwww.prashant\nburiram\ns134a\nphichit\ns411ipmi\nproxy29\ns409ipmi\nbima\ns270a\nwebdisk.pagerank\ns270b\ns940\ns312b\ns1102ipmi\nsdb1\nwww.fortuna\nwww.astrakhan\nmerchandise\nautodiscover.pagerank\nautodiscover.offer\nautoconfig.offer\nwww.hebrew\nolimpic\ns271a\nautoconfig.pagerank\ns271b\ns1037a\nseomedia\norigin-image\ntestcss\nplatinum1\nwww.podolsk\nblogstaging\nwww.rybinsk\ns4303ipmi\nmysql.web\ntest.intranet\nsolman\ns1305b\ns272a\noskol\nwww.nova\nmail.mailtest\nwebmx\ns272b\ns1301\ntripoli\nnavy\nkerokero\nhost98\ns501b\nmtx\ns134b\ns1040a\nmisfits\ns416ipmi\ns141ipmi\ndesignpark\nie6\nsiakad\ngozinesh\ns1226b\nwww.aig\nhed\ncepe\ncloud8\neci\nbtt\npartner.test\ns124a\nscorpion2\ns102393ipmi\nscorpion1\ns1002ipmi\nmirada\ns4308ipmi\ns276a\ns276b\nmedialib\ns4116ipmi\nstangel\nwww.maharashtra\nkarnataka\ns1201a\ninpac\nquant\nmaharashtra\ns1201b\ns4112a\nentrepreneurship\nvirage\nautoconfig.money\nwebdisk.money\ngc2006\ns603ipmi\nautodiscover.money\ns1202a\nmalayalam\nwebdisk.songs\nautoconfig.songs\nautodiscover.songs\ntinymce\ns1202b\ns278a\nautodiscover.egypt\nnzz\ns278b\nwdm083\nwebdisk.japan\ns1038b\ns1203a\nsmalls\nautoconfig.japan\ns1203b\ndhcp-1\nautodiscover.japan\ncr2\njette\nwebdisk.egypt\nhbi\ns1007ipmi\nautoconfig.egypt\ns1204a\nwwwdr\ngwtest\nnim\nmail.alumni\ns1204b\nsw14-1\ndirect1\ngwmta2\ntestzone\nphyslab\namms\nmail.student\npascasarjana\nforumsdev\ns4314ipmi\nmini3\ns1205a\ns1205b\nimmanuel\ninkubator\nhuey\nttu262114\ns703ipmi\nbrk\nservice7\nmmt\ns1206a\ncnap\nstarfleet\ns1206b\ns1416b\nstations\nmcp2\nou\nflix\ns1207a\nm.account\ns1207b\ns1208a\ntctest\nwebg\nemir\nzblog\nlatam\nhdb\ns1208b\notd\nantena3\nwapuk\nwapus\nhendri\ns285a\nmegafon2\nttu275560\ns285b\ns1321\nfrequency\ns1210a\nradius7\ns1210b\nsepa\nantero\ntj3\nlogindev\nrapor\ntmp2\ns4360ipmi\ns1228a\nwww.ja\nautoconfig.nl\nlowcost\nlov\ndeca\ns1211a\nrestorani\ns1211b\nwingspan\ns433ipmi\nwebdisk.nl\nautodiscover.nl\ns1409\nluna2\nproaction\ns287b\nwww.freeads\ns1324\ns1212a\nskatt\neproxy\ns1212b\nwww.atendimento\nzerg\ncheqa\njaci\nmusicvideos\nprojectserver\ninfierno\ns288a\n206\ns288b\ns1213a\nkpg\ngelendjik\nautoconfig.ca\nautodiscover.ca\nwebdisk.ca\n147\ns1213b\ns731ipmi\nsinau\np21\n158\ns4325ipmi\n174\n179\n181\ngaragestore\n183\n184\ns1214a\nbox29\nnd209\naither\npythia\n194\nts-cat4900-gw\nvm004\ns1214b\nreservoir\ns301a\ns1340a\ns1215a\nweb-forward\nksj\nzwierzaki\nnarty\nwww.narty\nhttp7-00\nbeta.preprod\nwdb7\ntest-equinix\nnocache.promo\nhb03-preprodwwwphp01\nhttp6\nhttp7\nhttp8\nhttp9\nhttp3-00\nrueduco20\nwdb5\ndevphp1\nhttp1-00\nhb06-smtp01\ncdn.preprod\nhttp10\nhttp11\nhttp12\nhttp13\nwdb7-00\nwdb7-10\nnocache.ressources\nhttp13-00\nssl.preprod\nhb05-smtp01\ntest-iliad\nhb01-smtp01\nhb01-smtp02\nwdb5-00\nwdb5-10\nhttp9-00\nhttp11-00\nhttp11-01\neptica.preprod\nkhk\nwww.0001\nprovide\ns1215b\nappointments\nkef\nskh\nbrandcentre\ns1406ipmi\nucv\nlins\ns438ipmi\nrelaydump\nrelaybackup\ns163ipmi\nharveys\npartsweb\nwww.reminder\nwww.contador\nmetcalfes\nnt3\ns1216a\ns1216b\nnt2\ns303a\ndevgit\ns303b\ns1229a\ntula1\nstar-sat\nnana123\ns1290ipmi\ndaru\ns1217a\nsinitsa\ns1217b\ns1024ipmi\nantarctica\nwebsys\nrmsdemo\ntmpftp\nclickheat\nmobiel\ndevtools\nsmarthealth\nzerno\nafina\nmail.strela\nmail.med\nvehicle\ns1229b\ndiadema\nagent-test\nwapadmin\nanalyse\ns304b\nwww.szg\nxia\ncssource\ns218ipmi\ns1340b\nsummercamp\nwebmail.s\ns1218a\nmysql28\nftp.s\ns1218b\ns4149b\ninoue\ns305a\ns305b\nteacher1\nvr1\ntimisoara\nconstanta\nwg11\nsikora\ns1220a\nns4-3\ns1220b\nhp3000\neserver\ns719ipmi\nwg3\nwg5\nssbdev\nwg6\nunta\nwg7\nspyro2\nmanage-vps\nmailrescue\nshopftp\ns306a\nrelay100\nbox5vm2\nserval\ndruid\nveranda\nmailhosting\npaid\nmg80\nfakel\nwssl\nskip\nbox5vm4\nenews2\ns1356ipmi\narama\nthis\nmail.love\nwhserver\nevgenia\nwwwp\nvilena\nbox10\njastreb\nworldvision\ns516ipmi\nsnms\nshox\ns1221a\nnd187\nftp.black\nmandela\nbiashara\nnd200\nsail\nnotary\nbetterlife\nhealthyliving\nauhans2\ndxbans2\nauhans1\ndxbans1\nnd191\npuls\nwww1a\nwww2a\nwww3a\nftp.god\nnd192\ntatjana\nklv\ngcms.qatools\ncms.qatools\nwwapp.qatools2\ngcmsadmin.qatools\npreview.qatools\nww30.psqa\nwwapp.qatools\ncms.qatools2\nnd203\nweb1702\ns1221b\nweb912\nweb914\nweb915\nweb916\nweb917\nweb918\nweb920\nweb921\nweb922\nweb923\nweb924\nweb925\nweb926\nnd196\nweb930\nweb931\nnd208\nweb932\nweb933\nweb934\nweb935\nweb936\nweb937\nweb938\nweb940\nweb941\nweb942\nweb943\nweb945\nweb946\nweb947\nweb948\nweb950\nweb951\nweb952\nweb1239\nweb954\nweb955\nweb957\nweb958\nweb960\nweb961\nweb962\nweb963\nweb964\nweb333\nweb967\nweb968\nweb970\nweb971\nweb972\nweb973\nweb974\nweb975\nweb976\nweb977\ntest6359\nweb980\nweb981\nweb982\nweb983\nweb984\nweb985\nweb986\nweb987\nweb988\nweb991\nweb992\nweb993\nweb994\nweb995\nweb996\nnd210\nweb997\nvm003\nweb1249\nweb1253\nweb913\nnuni\nweb1259\nchas\ndobro\nweb919\npani\nnd212\nweb1266\nweb338\nweb1269\nweb1699\nfactor\nweb927\nweb1273\nweb929\nweb340\nweb1280\nweb1286\nweb1288\nweb944\nweb1290\nweb1291\nweb1293\nweb1294\nweb949\nweb1295\nweb1296\nweb1297\nweb953\nweb1298\nweb1299\nnd214\nweb956\nweb959\nweb346\nweb965\nweb966\nweb1323\nnd215\nweb969\nnd216\nweb1330\nweb979\ncbia\nweb1339\ngud\nweb990\nweb1349\nweb353\nweb998\nweb999\nalga\nweb1359\nweb1370\nnd190\nweb1379\nweb360\nweb1389\nweb1391\nweb1393\nweb1394\nweb1405\nweb1406\nweb1397\nweb1398\nweb1410\nweb1428\nnd204\nweb1430\nnado\ntest6394\nmija\ns307a\nweb1440\ns1305ipmi\nweb1449\ns1222b\nmail.black\ntest6399\nmail.happy\nwaterford\nkrim\nnaira\nbehealth\nlagu\nfortunate\nfeelgood\nweb1530\nnake\ns1030ipmi\ns308a\nweb386\nweb1539\nkedr\ns4336ipmi\ndudi\nduch\nweb1549\nlavinia\nbusinesshouse\nweb390\nweb1560\nweb391\nweb1565\ns139ipmi\nsv374\nifly\nrados\nweb1569\nweb1572\nsvetlana\nweb394\nweb1578\nweb1579\nourlife\nmillioner\nweb395\nweb549\nweb1585\ns1223a\nweb406\nweb1589\nweb1591\nweb1592\nweb1603\ngalo\nweb1594\nweb397\ns1223b\nweb1595\nweb1596\nweb1597\nweb1608\ngain\nweb1599\nweb398\ngago\nmail.total\nweb410\nweb1620\nwoz\ngreenpower\ns309a\nweb1628\nweb1630\ns310b\ns932ipmi\nweb1639\ns1224a\nwmp2\nweb416\nweb1650\nwww.eep\neep\nnarek\nweb1660\ns1224b\nweb419\nweb1669\nbrzeg\nmail.piter\nweb1679\ns725ipmi\nweb423\ns311a\ns311b\nweb1688\nweb1689\nweb1701\nweb539\ns1344\nweb1693\nweb1694\nweb1705\nweb1696\nweb1697\nalya\nweb1698\nweb1709\nwellnesslife\ns1225a\nbady\nweb1719\ns1225b\ns1345\ndorian\nweb1730\nsapfir\ns312a\nweb1740\nstroke\nmail.ural\nmakarova\nweb1749\ns1419a\nposition\nmerri\nweb436\nfbcc\nallworld\nwelly\nserp\nws03dev000\ns620\nweb439\nkostanay\nlvis\nmuslima\nweb1819\ns1226a\nweb219\ngame24\nwita\nweb1849\nmail.vip\nftp.freedom\ns1311ipmi\nzas\ns1420b\nweb456\ns1410ipmi\nkulik\nweb1828\ncurs-valutar\nuse\nweb1829\ns1035ipmi\nweb459\nmasini\nrvp\ntest6489\ns313b\nlaif\nweb2023\nweb1924\nweb2025\nweb1926\nweb1927\npowerstation\nweb1928\nweb2030\nqaz\nplg\nweb1931\nweb2032\nweb1933\nmail.god\nweb1934\nweb1935\ns4342ipmi\nweb1936\nweb1937\nweb2038\nltd\nweb2039\nweb1941\nweb1839\nweb1943\nweb1944\ns1227a\nweb2045\ns1227b\nweb470\nweb1946\nweb1947\nweb1948\ns4122ipmi\nwww.feminin\ns314a\nmargo\nweb1958\ntest6498\nweb1959\ns314b\nwellcom\nweb473\nweb1964\nweb1965\ngiv\nsuplementy\ns601ipmi\nweb1969\ns1349\nweb475\nakt\nweb1978\nweb476\nweb1979\nvipstar\nbao\ns1228b\ngradina\nvilma\nweb1990\ns315a\ns1230a\nlidya\nweb479\ngreenway\nweb2616\nwww.poze\nweb2115\ns1230b\nftp.sakura\nftp.deal\nweb483\nfady\nejay\nsoli\nweb2128\nwww.curs-valutar\nweb2129\nbest1\nrodnik\ns316a\nweb2139\nwww.dictionar\ntaishin\nvella\nviktorija\nweb1858\naniya\nweb2149\nweb488\nzdorovje\ns316b\nter\nweb2160\nweb491\nwww.i1\nkakimoto\nbeautylife\ns4347ipmi\nweb492\ns1231a\nvirt1\nweb2169\nweb493\nhealthlibrary\nkatrin\ns1231b\nweb494\ns1316ipmi\nweb495\nehms\nweb1866\nshoppingcart\nweb2188\nweb506\nweb2190\ns317a\nweb2191\nweb2619\nweb2193\nweb2194\nmilena\nweb497\nelizaveta\nweb2195\nerror2\nweb2196\nzs1\nweb2197\nsmjy\nweb2198\nwww.sbe\nweb2209\nweb498\ns317b\nsyl\nartikel\naliga\ns1354\ns1232a\nweb509\ns1232b\ns1355\nplain\njabber2\ntestcp\nlavie\nweb1873\ns318a\nweb2229\ngavan\nree\nnaso\nweb2239\ns1421a\ntest6292\nhealthandbeauty\nnarayana\ns1233a\nsasc\neger\nweb2249\ndood\nreceitas\nweb2251\negel\nweb2258\nweb2259\nweb2265\nweb520\nbeleza\nholger\nweb2269\ns1233b\ns319a\nweb2278\nweb2279\nweb2285\nva1-middev01\nweb2288\nweb2300\nweb2291\nweb2293\nweb525\nweb2294\nweb2295\nweb1886\nweb2296\nweb2297\nweb2308\nweb526\nweb2309\nbcrtfl1-inqa01\nstngva1-dc01\nweb1888\nweb1900\nstngva1-an01\nweb529\nweb1901\nweb2328\nweb2329\nweb1902\ndev03-web\nweb1903\nweb2339\nweb533\nweb1904\nqa02-web\nidsfeed\nweb2348\nweb2349\nweb1905\nremedy1-21\nar-dev\nweb1906\nbcrtfl1-arsbx02\nbcrtfl1-arsbx01\nweb1907\nabtools\nstngva1-ar07\nstngva1-ar06\nweb1908\nstngva1-ar05\nstngva1-ar04\nstngva1-ar03\nstngva1-ar02\nweb540\nbcrtfl1-wdev02\nweb1911\nbcrtfl1-wdev01\nweb1912\nbcrtfl1-rqa01\nweb1913\nweb223\nar-qa\nweb1914\nweb378\nweb1915\nweb2890\nbcrtfl1-arqa02\nweb2016\nbcrtfl1-arqa01\nweb546\nnccqa1\nids09\nweb1917\napi_portal_dev\nweb1918\nweb1889\ndevrvip\nweb2430\nbcrtfl1-indev01\nweb2019\nwebp1\nweb550\nstngva1-web02\nweb2437\nweb1921\nstngva1-web01\nweb2439\nar-prod\nweb1922\nweb2445\nfisheyedev\nstngva1-dc03\nweb1923\nweb2449\nbcrtfl1-ardev02\nweb2458\nweb1925\nbcrtfl1-ardev01\napi_web_dev\nweb2469\ncomvault\napi-web-dev\nweb2479\nweb2029\nweb2483\nstngva1-rkm02\nvirtual-vr\nweb2500\nweb2491\nweb2492\nweb2493\nweb1932\nweb2494\nweb2495\nweb2496\nweb2497\nweb2498\nweb2509\nweb1899\nweb2528\nweb2529\nstngva1-wqa01\nvbi1\nweb1938\nweb2539\nweb1940\nstngva1-rkm01\nstngva1-in01\nweb2549\nvmop\nweb1942\nweb380\nweb2560\nweb2566\nqa04-web\nweb2569\nweb1945\nweb2573\nremedyreply\ndev-greenhopper\nturkiye\nweb2580\nstngva1-wdev01\ntmpids04\narsdocs\nweb2586\nweb2588\nweb2590\nstngva1-dhb02\nweb2049\nweb2593\nweb2594\nweb2595\nstngva1-dhb01\nweb2597\nweb2598\nweb2609\nfl1-middev01\nweb1952\ngreenhopper\nwebp2\nremedy1-18\nbcrtfl1-wqa01\nvdsm-devmail\nqa05-web\nweb2630\nweb1950\nportal-net-sb01\nweb2639\ntmpids05\nfl1-midqa01\nb.test\nweb2649\nstngva1-ar08\nva1-midqa01\nrkm\napi_webi_dev\nrr2\nstngva1-ar01\nrkm-prod\nweb610\nweb2719\nweb1972\nartfac\nweb2729\nweb1892\nweb2749\ndev-fisheye\nweb393\nids04\nids03\nweb2760\nids02\nweb2764\nweb2769\nbot.search\nweb2779\nqawebp2\nweb2790\nweb2791\nweb2792\nweb2793\nweb2794\nc.test\nweb2795\nweb2796\nweb2797\nweb2798\nweb2809\nremedy-qa\ndev-jira\nweb2819\nweb1989\nweb629\nqawebp1\nweb2830\nwidgetmanager\nweb2915\nweb2839\nweb2849\nwidget00\ns319b\nclient00.chat\nweb2916\nweb329\nweb119\nweb1893\nweb2917\nircip1\nweb1310\nircbot.search\nweb2909\nweb1909\nweb2923\nweb2924\nweb2925\nparteneri\nweb2926\nweb2927\nwww.parteneri\nweb2928\nweb3029\nclientsearch\nweb2931\nweb2918\nweb2119\nweb2933\nweb2934\nweb2935\nweb2936\nweb650\nweb2937\nweb2938\nweb3039\nweb2941\nweb2942\nweb2943\nmy.chat\nweb2944\nweb2945\nweb2946\nweb2947\nweb2948\nweb3049\nwbf-mdm\nmx-10-brighthouse\nweb3060\nweb2920\nevserver1\nweb3068\nweb3069\nweb656\nremote-filter\nweb-dmz01\nweb489\nco-op\nweb3079\nweb660\nweb2921\nweb3088\nweb3090\nweb3091\nweb3092\nweb3093\nweb3094\nwbf-mobilesurf\nweb3095\nweb3096\nweb3097\nweb3098\nweb3109\nircip4\nweb663\nsha2\nircip2\nweb3120\nweb2922\nweb3139\nweb668\nweb1894\nircip3\nweb3149\nweb359\nweb3158\nweb3159\nnetgraphs\nweb3169\nwebdisk.foto\nweb675\nweb609\nweb3179\nweb676\nweb3200\nweb3191\nweb3192\nweb3193\nweb3194\nweb3195\nweb3196\nweb679\nweb3197\nweb3198\nweb3209\ns1234a\nweb3219\nweb683\nweb3228\nweb3229\ncherries\ns1234b\ns185ipmi\nweb3239\ns321a\nwww.dacha\nweb339\nweb3249\nweb2159\nweb690\ns1360\ns1235b\nweb693\ngraves\nkundenbereich\nrs4\nweb706\ndon4\nweb1895\nweb2919\ns507a\ns1322ipmi\ns322a\ndodi\nweb699\ns322b\ntest98\nedi2\npdu10-1\npdu10-2\nweb519\ns323a\nk219\ns323b\ns1237a\ncric\ns1237b\nweb57\nweb58\ns324a\nweb66\nweb67\nweb68\ns324b\nweb71\nweb72\nweb73\nweb74\nweb84\ndiaa\ncoob\ndevb\nweb2950\ns511ipmi\ns1238a\ndesh\ns1238b\nlitecommerce\ns325a\njunkyard\ndela\nweb3b\ns1422a\nmail.ufa\ns1239a\ns1240b\nwebdisk.library\ncisco6-2\nweb2298\nweb2299\ns1327ipmi\ns235ipmi\ns1241a\nclad\ndara\ns1241b\ndami\ndaff\ndado\nweb2315\nweb2319\nweb2322\ns4124ipmi\nrbg-web2\nweb3059\nchileanplants\ns0-0-0.gw1\ns0-0-0.gw2\ndevcelebratelife\nlo0.gw2\nlo0.gw1\ngw-internal\ncongotrees\nfa0-0.gw2\nfa0-0.gw1\ndevgreenpages\ngreenpages\nweb649\nbriz\nchon\nayub\ns327a\ns327b\ns1370\nsellers\ns1242b\nreyco\ns328a\nportonovo\nzamin\npaddock\nvmhost\ns328b\nmarija\nwww.vak\nbozo\ntest.service\ns747ipmi\ns1243a\ns1243b\ns206ipmi\nazam\ns331a\ns1333ipmi\ns132a\ns63a\ns4241ipmi\nweb928\nwww.fastcash\ns4364ipmi\ns332a\nbefragung\ns1376\npdu11-2\npdu11-3\ns333a\ns334a\nconsent\napc5-bad\nweb2939\nofferta\ns335a\nvgm\ns1338ipmi\ns1020\nweb403\ncisco1-1test\ns336b\ns1235a\ns646ipmi\nbling\ns337a\ns1219ipmi\nweb2419\ns1424b\ns339a\ns339b\nbecker\ns339c\ns1344ipmi\ns604ipmi\ns341a\ns4109ipmi\ns1390\ns511a\ns342a\npdu12-1\nvsetovary\npdu12-2\ns1236a\ns1393\ns1010a\ns1236b\ns1394\ns1350ipmi\ns705\ns1396\ns1006ipmi\ns1397\ns504ipmi\ns710a\ndl53\ndltotal\ndlfiber2\ns228ipmi\nwertyuiop\ns435f\ns4313ipmi\ndlpaintcopy\ndlfiber\npoc01\ndltefal\ndlplato\ndlpaint2copy\ndltefal2\ndltank\ndl42\ndltank3\ndl43\ndlpress2\ndlmatrix2\ndl44\ndlpacman2\ndlplato3\ndltotal2\ndlpaint5\ndlpaint\ndltank2\ndlplato2\ndlmatrix\ndlpaint2\ndlpaint3\ndlpaint4\ns1355ipmi\nvideo19\ns927\ndl52\nrouter2a\nrouter2b\ns4121ipmi\ns135a\naway\ns135b\nfsb\ns509ipmi\npdu13-1\npdu13-2\ns1426b\ns1361ipmi\nsp10\ns241ipmi\ns742ipmi\ns4126ipmi\nonline-shop\nbizon\ns435ipmi\ns617a\ns4220b\ns515ipmi\nbak11\ns136a\ncatz\ns1366ipmi\ns1101ipmi\ns4223ipmi\ns702ipmi\ns4132ipmi\ns4347a\nvpnhq\ns521ipmi\ns514a\npdu14-1\npdu14-2\npdu14-3\nonestep\ns1372ipmi\ns1106ipmi\naspx\n999999\ns1240a\narza\ns1433\nciara\ns1239b\ns137a\nbilliard\nstasik\ns802ipmi\nreinout\nweb2429\nwww.reinout\ns1436\ns4356b\ns326a\ns1112ipmi\ns1440\ns4143ipmi\ns4133ipmi\ns807ipmi\ns532ipmi\ntest6249\ntest6251\ntest6252\ntest6256\ntest6258\ns256ipmi\nasid\ntest6263\ns1444\ns4358ipmi\ntest6265\ntest6267\nweb389\ntest6269\ns1445\ntest6272\nwww.demo01\narne\ns901a\ntest6279\ns1430a\ntest6284\ntest6285\ntest6290\ntest6302\nasar\ntest6294\ntest6306\ntest6297\ntest6308\ntest6309\ntest6319\nweb2929\ntest6327\nweb1006\ntest6331\ntest6332\ns1117ipmi\nweb978\nweb392\ntest6335\ns1446\ns1430b\ns4350a\ntest6349\ntest6356\ntest6360\ntest6361\ntest6366\ntest6368\ntest6369\ntest6372\nbigg\ns4148ipmi\ntest6379\nctw\nweb2459\nweb989\ntest6390\ns4350b\ntest6391\ntest6392\ntest6393\ntest6404\ns813ipmi\nweb1019\ns1450\ntest6409\ns537ipmi\ntest6413\nweb939\nsg0\ntest6419\ns262ipmi\ns1290a\ns1290b\ntest6429\ns1242a\ntest6438\ns1123ipmi\ntest6439\ns1301b\ntmp4\ns139a\ntest6449\ns4154ipmi\ns1302a\nappy\ns1302b\ns140b\nweb396\ns640\nanup\ns1303a\ntest6459\ns1303b\ntest6461\nansh\ns4259a\nbeno\ncisco1-2bad\ns1304a\ns1304b\ns1394ipmi\ns1305a\ntest6469\ns1128ipmi\ns4159ipmi\ntest6472\ns1306a\ns1306b\ns1435\ns4259b\ns1307a\ns1307b\ntmp6\ns1308a\ns1308b\ntest6479\namro\nbeep\ncisco7-1\nanda\ntest6490\ns1399ipmi\ntest6491\ns1310a\ntest6492\ntest6494\ns1310b\ntest6495\ntest6506\ntest6497\ntest6508\ntest6499\nanam\ns1134ipmi\ns329a\ns707ipmi\ns1311a\nhayes\ns1311b\nalmi\ns743ipmi\ns1312a\ns1312b\ns829ipmi\ns1373ipmi\ns278ipmi\ns1313a\ns1313b\ns1415ipmi\nweb409\ns1314b\nweb2490\nakil\ns1140ipmi\ns401a\ns142a\ns1315a\ns1315b\ns1475\ns402a\nbant\ns1316a\ns1316b\najit\ns835ipmi\ns403a\ns1317a\ncarotte\ns1009a\nforum126\ns404a\nkiwi2\ns1318a\ns1421ipmi\nmodem1\ns405a\ns1320a\ns1320b\ngeode\ns406a\naiai\nweb2179\nafcc\npoc02\nadit\nadik\ns1321a\nabus\ns1321b\ns1010b\ns1484\nabii\ns1322a\ns1322b\nabdi\nabbs\ns408a\naa11\npconline\ntelenor\ncisco2-1bad\njira.dev\ngm2\nit0\ns1323a\ns1323b\ns1426ipmi\ns409a\ns1324a\ns1324b\neau\nwww.ri\ns411a\ncarl3\nhl01\ns1325a\ns1325b\ns412a\nhandicap\ns1326a\nnat144\nnat146\ns1326b\ns305ipmi\nip204-110\nthehunter\ns413a\nageforum\ns413b\npdu11-1\ncmpunk\ns1327a\ns1327b\nbastia\npaypall\ntaranis\ns1432ipmi\ns414a\nthesee\nmiage\ns1328a\ntest-support\nkazino\ns1328b\ns415a\nauch\ns1329a\nsapir\ns1329b\nraisin\ns1201ipmi\nsmartkey\neminent\ns1331a\ns1331b\nweb2499\ns311ipmi\ns417a\nhumboldt\ns1109\ns1332a\ns1332b\ncassis\nweb2932\ns1437ipmi\ns418b\nws01qanet009\ns1333a\ns1333b\nvisioconf\ns419a\ns4203ipmi\nrion\nelsayed\ns1334a\ns1334b\ns4150a\ns421a\nppp-12\nweb2519\nppp-13\nppp-14\nppp-15\nsuze\ns1335a\ns1335b\nperceval\ns316ipmi\netoiles\ns1336a\ns1336b\npdu4-1\ns423a\ns1443ipmi\nweb366\ns1337a\ns1337b\ns424a\ns4150b\nwww.parser\ns4208ipmi\nbotiga\nmediaworld\nweb670\nweb1859\ns1338a\ns1338b\ntestededns\ns425a\ns1339a\ns1339b\ns426a\ns322ipmi\ns1341a\ns1341b\ns427a\ns427b\ns1448ipmi\ns1342a\ns1342b\ns428a\ns4214ipmi\ns1343a\ns1343b\ns429a\ns430b\nws02qa005\nws02qa006\ns1344a\ns1344b\ns431a\ns327ipmi\ns1345a\ns1345b\ns432a\ns1454ipmi\ns1346a\nweb199\ns1346b\nuaz\ns433a\nweb1100\ns4219ipmi\ns1347a\nweb1093\ns1347b\ns434a\ns434b\ns4170a\ns1348a\ncp05qa001\ncp05qa002\ns1348b\ncp05qa003\ncp05qa004\ns4170b\ns435a\ncp05qa006\ncp05qa007\ns435b\nweb1020\nweb1099\nweb2189\ns333ipmi\ns4338a\nip204-115\ns1349a\ns1349b\ncommunity-test\ns929ipmi\ns336a\nweb349\nweb496\ns1459ipmi\nip204-116\ns1351a\ns1351b\ns437a\ns101393ipmi\nweb2559\ns1352a\nagent2\nds922\nds0210\ns1352b\nsacem\ns1352c\nweb2192\ns4104ipmi\ns525b\ns1353a\ns1353b\ns439a\ns439b\ns338ipmi\ns1354a\nweb1919\ns1354b\ns441a\ns441b\nweb379\nweb3189\nweb1130\ns4329ipmi\ns1355a\ns1355b\ns808ipmi\ns442a\ncisco1-1old\ns1356a\ns1356b\ns1439b\ns4360a\ns1357a\ntestbn\ns1357b\nweb1220\nweb2579\ns924a\ns619ipmi\ns-1001001\ns-1001002\ns-1001003\nip204-118\nmac3\neurolines\nwebagent\ns-1001004\nwebengine\neuroline\ns1359a\ns1360b\nweb689\ns1205ipmi\ns1361a\ns1361b\ns4236ipmi\nweb2589\ncisco1-1\ncisco1-2\ns901ipmi\ns625ipmi\ns1363a\nweb2591\ns1363b\ns338a\nweb2592\ns4305b\ns1364a\ns1364b\nweb399\ns1476ipmi\ns1211ipmi\ns217ipmi\ns1120\ns1365a\nweb2596\ns1365b\ns718ipmi\ns4242ipmi\nweb429\nweb2599\nweb2199\ns4105ipmi\ns1366a\ns1366b\ns906ipmi\ns631ipmi\ns1367a\ns1367b\ns917a\ns1368a\ns1368b\ns1482ipmi\ncisco8-1\ns1216ipmi\ns1369a\ns1370b\nasak\ns1442b\ns340a\ns430a\ns1371a\ns1371b\ns912ipmi\ncisco2-1\ncisco2-2\ns339d\nip204-119\ns1373a\ns1373b\ns1455\ns1222ipmi\ns1374a\ns1374b\ns4253ipmi\nip204-121\ns4150ipmi\ns1375a\ns1375b\ns906a\ns1376a\nip204-122\ns1376b\ns906b\ns318b\ns911a\ns1227ipmi\ns530a\ns4258ipmi\ns745ipmi\ns529b\ns4110ipmi\ns923ipmi\ns1317ipmi\ncisco3-1\nip204-124\ncisco3-2\ns4335ipmi\ns4340a\ns1233ipmi\ns907b\ns4264ipmi\ns1480ipmi\ns928ipmi\ns531a\ns112ipmi\ns4340b\ns404ipmi\ns102396b\nholod\ns720a\ns1238ipmi\ns1460\ns4269ipmi\ns1390a\ns1390b\ns1440ipmi\ns908b\ns1391a\ns117ipmi\ncisco4-1\ns1392b\ns223ipmi\ns724ipmi\ns1403a\ns1403b\ns1404a\ns1404b\ns940ipmi\nvip-club\ns1395a\nvalid\nvalia\ns1405b\ns123ipmi\nmyvision\ns910a\nzdorovie\nsmilelife\nvipgroup\ns1396a\nmail.world\npdu1-1\npdu1-2\nkamchatka\ntovar\nbonappetit\nviet\ns909b\ns173ipmi\neticaret\nlees\ns1397a\ndbprod\ncandidate\ns1397b\ns1456b\nflashlight\ns1130\ns1408a\nbasis\ns1408b\naceware\ns1399a\ns1399b\ns128ipmi\ns910ipmi\ncareless\nce1\ndwtest\ns1411a\ncline\nstarfighter\nweb159\ndbtest\ns1411b\nweb2623\nslpda2\ns1412a\nflogger\ncisco5-2\ns4155ipmi\noasis2\nwebsp\ndigitallife\ns634ipmi\nweb696\nweb2629\nwww.static2\ns1413a\ncszx\n21st\nccip\njsjxy\ndevl\nwww.devl\nwebdisk.devl\nautoconfig.devl\nautodiscover.devl\ns1413b\nchenkuo\nabdulrehman\ns911b\nkk888\ntelsis\ntuthanika\nds110\ntopspeed\nrathna\nstpatrick\nstarfoot\ns4263a\nrucker\ndevecser\ndev.linksoflindon\nwww.fundraising\ns1414a\nlinksoflondon\ns1414b\nmailrelay4\nyucca\ns134ipmi\nmailrelay3\nfrans\nfsi\nrubidium\nstrange\nhelion\nbrinda\nstarker\ns1310ipmi\nvpn-6\ns1415a\ntushar\ns1415b\npotassium\nleopold\nisaias\nsenecio\ns502a\nfatman\nmerritt\nmicael\ngedeon\nhuashan\ns502b\npablito\nout9\nkarnaugh\ns1416a\npdu2-1\npdu2-2\nhost60\nip204-130\ns4302ipmi\nmatias\nhost84\nhost54\nhost47\nhost48\nhost49\ns503a\nhost56\nhost57\nhost59\nhost61\nhost62\nhost63\nout7\ns503b\nout10\ns4115ipmi\nout8\nwww.myjobs\nmyjobs\nmoises\njateng\nlyncfe\nznc\nldn\ns1417a\ns1417b\nhaiyu\nftpserv\ns504a\ntestserv\ns504b\ns4180a\ns1418a\nwww.rsonline\nfms3\ns1418b\ns415ipmi\nsis1\ns4180b\ns505a\ns140ipmi\ns102392ipmi\ns1419b\nfluke\ns4341ipmi\ns4352a\ns506a\ns506b\nqutaiba\nakpinar\ns820ipmi\njianyi\ns1001ipmi\nwww.muir\nshopp\ns1421b\nikea\nmail-m\ns4307ipmi\ncisco6-1\nwww.marcin\nlmu1\ndcomalumni\ntest-gateway\nblenc03sl04\nblenc01sl08\ns1422b\nlmufedserv\ndsolmediasite\nchangemypassword\nmediasiteiis\navstmobile\nmediasitewms\nteststudent\ns508a\ns1423a\nwebdisk.mailing\ns1423b\ns421ipmi\ns509a\npointer\ns509b\ns1424a\ngjjl\nyiliao\nwww.web2\npm04-1\npm03-1\nmop\ns102397ipmi\npkpk\ncisco-res1\ncisco-res3\ndaweb\nskazka\nanhkhoa\nnzs\ns511b\nyag\nai100\ns4301ipmi\ns1425a\ns1425b\ns512a\ns1450a\nmbox2\ns1426a\npdu3-1\npdu3-2\ngalias\nmail.29\nsmsh\nesite\nwww.obmen\ngpweb\ns513a\nwww.demo6\ns1427a\nsanchar\ns1427b\ns426ipmi\ns330a\ns1428a\ns1428b\ns515a\nrd02\ns1429a\ns1429b\ns1012ipmi\ns516a\ns730ipmi\ns4318ipmi\nsrv-1\ns1431a\nss13\ns1431b\ns517a\nsr12\nxxbs\nwww.zy\ns517b\nwww.ln\nwww.jc\nwww.material\ns1432a\nmdm2\ncisco7-2\ncisco7-3\ns1395ipmi\ndajie\nwebmail.film\nwww.komputery\nns.film\ns518a\nmail.film\ngermany2\ns432ipmi\ns156ipmi\necon03\ns1433a\necon02\nmail.ap\nklemens\nzmx\nusk\ncalendrier\nshadow1\nthuvien\nmacewindu\nzenworks\nspecial3\nspecial2\ns1433b\ns519a\nip204-114\ndouzi\ns520b\ns1339ipmi\nacf\ns1434a\ns1434b\ns1017ipmi\ns521a\nsitebrand\nxenpig\nwww.miner\ns521b\ns4324ipmi\ns1435a\ns1435b\nvaccine\njpmalltest\ninqshare\nwww.delo\ns522a\ns522b\ns1436a\nsa12\noldcms\ns1436b\ntkt\npdu4-2\nbbs5\nvpos\nigrs\nmobilecity\nuwallet\ns713ipmi\nppsm\ns523a\ndirectadmin\ns523b\ns437ipmi\nlnd1\nolna\nsng1\ns1030\ns1437a\ns1437b\ns524a\ns524b\ns1438a\ns1438b\ns1023ipmi\nwolontariat\ns1452a\ns102392a\ns1439a\ntestcore\nkomfort\ns1440b\nteacherstore\nscg-pub\ntnsmtp\nwww.nd\ngp1\nfuzoku\ns1452b\nhorizont\ns526a\nbalaji\nautoconfig.bookmark\ns526b\njimmy01\nautodiscover.bookmark\nliew\nwebdisk.bookmark\nlibo\ns1441a\ncgiirc\ns1441b\nsv533\ndarkover\ns527a\ns527b\ns1442a\nazazel\ncisco8-2\nesus\ns528a\ns528b\nsipproxy\nvz02\nwildman\ns1443a\ns1443b\njsyl\ns1304ipmi\ns529a\nkiri\ns1028ipmi\njab\nbackupmail2\nscanmail\ns1444a\nsmtp-gw2\ns1444b\ns1039ipmi\ns436e\ns531b\ns1445a\ns1445b\ns532a\nsubmission\nff14-new\nsnappring\neclipsofeden\nonepiece-musou2\nseimado\n3dsgirlsmode\nchaos-heroes\ndivinesoul\nsuparoboux\nys-celceta\ngranado-espada\nparutena\nhekiku-grace\ns532b\npokemon-magunagate\nonepiece-romancedawn\npuzfanwiki-3246\ndungeonhero\nguiltgear-plusr\narche-age\nclass9\ncastlevania-makyou\nbiohazard6\nmapleland\nfightersclub\ndragon-quest7\nextroopers\nrustyhearts\nxn--3ds-z63b4f2a1b0dw667e\nmamesangoku\ndragonpoker\nkoisurukyabajogp\ns1446a\ntoukiden\nluigi-mansion\nlivetalk\ns1446b\npdu5-2\ns533a\nfaqs\neducloud\nisen\ns533b\ns1447a\nyxb\njwc2\ns1447b\nverve\ntestss\nbian\ns1309ipmi\nchenyi\nbizz\nd03\nhung\ns534a\nlarochelle\ndcgou\ns534b\ns1034ipmi\ns1448a\ns1448b\ns535a\narzamas\nphotonet\nvidau\nvidas\negloo\ns535b\ns1449a\ns1449b\ns536a\ns536b\nbalajitech\ns729ipmi\ns4264b\nhitc\nsmartlab\ns1451a\nshahty\nchelny\nwww.state\nosmp\nfest\nnav2\ntitan3\ntimkiem\namss\nkorek\nhiba\nmryellow\namazigh\nstabilo\nspeedgame\nflippy\n1st\ns1451b\nwww.knights\nabaddon\nbbbb\nmanojk\ns537a\nbbe\ns537b\nbwd\ncrv\nkraz\ncisco9-1\ncisco9-2\ns4306ipmi\ngue\ns1315ipmi\nitu\ns1040ipmi\ns1453a\ns1453b\ns4346ipmi\ns1454a\nu-s\nfregat\ns1454b\nplp\nrdi\nredbaron\ns4120a\nrwh\nsmz\ns510ipmi\ns1455a\ns1455b\nttv\nboas\nwiw\nstrannik\ns1456a\npdu6-1\ngleysmo\npdu6-2\nnulled\nolorin\nsanctus\ntrafford\nwuhuan\nggmm\nsmirnoff\nwww.genetics\ns1321ipmi\ns234ipmi\ns1457a\nlazio\nadis77\nwiseguy\nwww.secured\ns1457b\ns735ipmi\ns4352ipmi\nlinh\nsals\ns1458a\ngood4u\nkernelpanic\npatievn\nhacker1991\npdu13-3\nacrobat\nsofd\nsparks\ns741ipmi\ns1459a\ns1459b\nwww.ihb\ngrav\nwww.kcb\ns190ipmi\ns1461a\ndyxx\nwww.wee\nmobitest\ns1461b\ns1326ipmi\nwww.fishi\nxphone\nnarcotic\n51av\nrevealer\nufuk\ndesignor\nvaka\ns1462a\nhailin\ns1462b\ns4357ipmi\ns1463a\nalexs\nchaseman\nadw\nburglar\ncge\ngranplus\nesxi2\nxdns\nxdot\nfun-forum\nmanal\nfiz\naudioman\ns1463b\nlingdu\ns930a\njia\nfree-hosting\nkmw\ns4342b\na1234567890\nyhwyxl\nrak\ns621ipmi\ngmaiil\nsailormoon\ntriangulum\nsyk\nfalc\nuob\nyojoy\nxcn\nwww.fortune\nwww.robson\nwww.testdomain\nmomk\nfellini\nyszm\nbigmama\nthegladiator\nwww.fontane\ncray\ndadafarid\nshahram\nexpress1\npaddington\ns1464a\nwww.nassau\nn0n4m3\nap28\nwww.lessons\ns1464b\nscenery\ns915ipmi\nanse\narad\ns1480\ncato\nnofuture\nallyouneed\ns1465a\ns1465b\ns1332ipmi\nwww.marek\ncmon\nbuzu\ncotl\nj2me\ncvrd\ndobo\nczom\nfars\ndxsj\nepix\ngant\nangelos\ns1466a\nexco\npdu7-1\npdu7-2\npdu7-3\ngobi\nalhayah\nmygallery\npoesie\no51k\nhlzx\nhmsn\nhpjs\nhtpc\nkodi\ns920b\nme10\nlinx\nmenz\nnaba\ncory\nensi\nmmss\nnemi\ns4363ipmi\ns1467a\nkuk\ns1467b\ns1468a\ndaher\norcamentos\nrew2\nminhthanh\ns1468b\nsaja\nsex5\nkbo\ns730a\nsmis\ns1469a\ncloe\nthom\nssmm\ns1469b\ns1337ipmi\ntoya\nugur\nvima\nvlin\ndarc\npossum\ns1471a\nwfjt\nwika\ngsb123\nwong\nmianfei\nwww.tardis\nxuhu\ns1471b\nzhao\nqidian\nefserver\nytuu\ns4368ipmi\ndsquared\ns287a\nasperger\nhhzwly\ns1472a\npeko\nacess\nroflcopter\nkompendium\nwww.pussy\nguildwars\nstarlite\nwww.remax\ns1472b\nws01qanet001\nws01qanet002\nws01qanet003\nws01qanet004\nwww.hotspot\nws01qanet006\nws01qanet007\nws01qanet008\nws01qanet010\ns921a\nthisandthat\nrayden\ns1473a\nteam-elite\nlixinghua\nwww.openerp\nbackupftp\npeak\ns1473b\ns216ipmi\ns1474a\nmenfan\ns1474b\ndeluxer\ns330ipmi\ntechstore\nbux4\ns1343ipmi\ns1475b\ns1476a\nmybus\notherland\njwforum\nskys215\npdu8-1\ncerbero\noutlawz\nlaotse\nbenni\nhuang1qi2\nclaro\nsabeur\nsuprema\npdu8-2\nhuaiji\njsrong\nalik\nsex8\nabydos\npdu8-3\njishui\nshia\ny1y2\nwww.webserver\ns1477a\ns1477b\nparcerias\ndanilo1051\nlovecards\nyyhns\ncassy\ns1478a\nwww.vitalis\ns1478b\ns922a\ns1479a\nhotsprings\ns1348ipmi\nairen\nbasty\nalexd\ns1458b\nhycssq\ngbren\nsensiz\ndjaligator\nconfixx\ns1481a\ns1481b\nweb2219\ncally\ns4114ipmi\nlegendkiller\ns1482a\nhtonline\nchary\ns1482b\nshaded\ntman\nburak\nzied212\nbagger\nmadeline\nhackbase\none23\nstor11\ngalaxytool\nmaggio\ns503ipmi\ntastypear\nmerrigan\nfrostmourne\nsigned\nra7el\ndudul\ns1483a\ndzbbs\ntime2kill\nhomeboy\netang\nganja\ns1483b\nflagi\ns1484a\ns1484b\ngifty\ns1354ipmi\nwww.kan\nhk008\nandpey\ns239ipmi\ns734b\nhekui\ngohsy\ns742b\nmiles\ns4119ipmi\ns1460a\nprenew\npdu9-1\ngrunt\ncrossline\npuyizhen\nfilehosting\npdu9-2\nmediator\njanan\nsmilie\nmtgw\naolzol\npartnerzy\nshabbir\nmementomori\ns508ipmi\nmediaportal\nisola\nwww.ontheroad\nxbpjzx\ns233ipmi\nkewell\ndilys\nmikj\nkicks\nklbbs\nterrox\nrockitman\nwww.whitehouse\n51xx\nbir\nwww.gekko\ns1360ipmi\nbml\ns4125ipmi\nmanno\ns735a\nmanus\nmatis\nzkb\ns514ipmi\nmbyte\ns238ipmi\npre2\nlucky110\nanimeforum\ns640ipmi\nsteffi\nlosty\nkeyshop\ndwf\ns1365ipmi\nlujun\nt-rex\ns4131ipmi\ncaowei\ncapone\nninad\nmrtom\nsdv\ncassie\nhkt\nmutou\nhaikal\nnnsky\nnosek\nraptimes\nmysky\ndominika\nfishi\nut1\npaoli\nmadhur\nblackwood\npreferences\njudson\nmhk\ns519ipmi\nplany\nrsleech\nmuk\ns1371ipmi\ns1105ipmi\nfager\ns4136ipmi\nxinxi\nwww.garrison\nproxi\nqq163\nuoit\nx2828\nblf\nboondock\ns4319ipmi\ns440ipmi\ninplay\nfantasy88\nrls\nsahan\ndreambox\nhome-business\ndreamfly\ns410ipmi\nschat\nscorp\nleminh\nbonker\nbrt\nshima\nadmin.t\npartner.t\ns801ipmi\ns525ipmi\nzdjecia\ns1376ipmi\nqazqaz\nslava\ns1111ipmi\nuta\nslobo\nsecuritas\nlsav\ns-1003002a\nsneki\ns4310a\nzithromax\nsnoox\nsonos\nyangjian\nwebcomp\nsorin\ngwen\nwls\nturkforum\nfreewebhost\nwebdisk.wptest\nsiggy\nhoss\ns4142ipmi\ns737a\nmylaner\ntolar\ntestboard\nautoconfig.wptest\nfafa1688\nbkvpn\nrbd\nvanem\nvassa\nreferenzen\nautodiscover.wptest\nwebspell\ncity80\nsccf\ndanime\ndapengtx\nmagier\nwhity\ns601a\nweb169\ns601b\nweb1229\nwww.suspended\ns806ipmi\ns-1003004a\ndavidb\nweb3129\ncego\nwiingaard\nmits\nwx123\nmarcop\ns707\nxiong\ns531ipmi\nweb2889\nmarten\nsiem\nwww.feng\n00001\ns602a\nwww.goya\nuploadserver\ntheville\ns602b\nxssmw\ns255ipmi\ntheoc\nds9\nmonge\ns926a\netudiant\nfennec\naeronaut\ns603a\np4p\ncaillou\nweb2759\nwww.sign\nchimere\ncocoty\ns4310b\nnoora\napresentacao\nweb719\nacamatzu\nklemmster\nweb2489\nsq4\ngungnir\nweb1260\nthescream\ntest6389\ns1116ipmi\ncontao\ntheband\ns1460b\nmerlyn\ns604a\ns4147ipmi\nppr\nasw\narf\npal4\ns-1003007a\n4seasons\nweb2940\nweb659\ngame-cheats\ns605a\nhabboch\nmsn1\ns-1003008a\ns536ipmi\ntpvpn\nxiaocharm\nbjunioren\nweb1860\novid\nringerfotos\novh1\ns607a\npatos\nweb2739\ns607b\n51free\ns4337ipmi\nweb1289\nstarmedia\ncursed\nashuohu\nbdd\nweb1302\nraddex\ns1122ipmi\nweb1303\npa2.lync\nmotorhome\nweb1600\nespaceclient\nimail1\ns608a\npa1.lync\nhcw\nmimir\ns746ipmi\ns4153ipmi\npb1.lync\nlsmods\ntestcitrix\ns609a\nwww.traff\ns4266a\nonlineuk\nshahar\nnassau\ncalico\nmichael87\ns610e\npb2.lync\ndownunder\nweb1309\nweltwind\nmultiplayer\ns610f\nperfectworld\n7seven\ntianxin\ns817ipmi\norar\nelite-hacker\nndlm46\ns611a\nerol\ntorn-ams5\nfree4you\nstreamline\nweb1316\nkalinin\ns266ipmi\ns611f\ns733ipmi\nkairu\nweb1319\nvautour\ns612a\ns612e\ns1403ipmi\nweb669\nxiaoxi\ns1127ipmi\ns613a\nzenzen\nphproxy\ns4227ipmi\ns613e\ns613f\ns4158ipmi\ns614a\nlostcity\ns614b\nmiyamoto\nseyuhai\nmomo90\ncp05qa009\neagleone\ns743b\nweb1329\ns823ipmi\ncandykey\nesr\nkintaro\ndragao\npdu14-4\ncarparking\ntechnix\nheadstrong\ns272ipmi\nxiaoyao\nweb2289\nvisao\nbaihua\nipost\npittbull\nwww.minigolf\nsmtps3\nsmtps2\nme1\ns616a\ns616b\nzhiliao\nads5\nmymoodle\ntie-up\nfarmgw\ngmg\nsohu\npermanent\nweb1869\nhuasende\nmydriver\nblacklotus\ntest-select\nwww.referenzen\nmy-dev\nad5\nimg-test\nkami001\ngb1\ntest-column\nmakarov\ns1408ipmi\ns1130ipmi\nmulder\ns1133ipmi\njiangfei\ningredients\ncsserver\nsasquatch\nguckstdu\netienne\nweb2789\ntest6296\nbluestorm\nmursel\nwireshark\ns617b\nlitocaa\neastree\nwww.cupid\ns4122a\ncccp\nmissyou\ntest6247\ntest6248\ntest6250\nalexius\ntest6253\ntest6254\ntest6255\ns4164ipmi\ntest6257\ntest6259\ntest6261\ntest6262\ns618a\ntest6264\ntest6266\nres09\ntest6270\ntest6271\ntest6273\ntest6274\ntest6275\ntest6276\ntest6277\ntest6280\ntest6281\ntest6282\ntest6283\nres07\ntest6287\ntest6288\ntest6300\ntest6301\ntest6293\ntest6304\ntest6305\nres06\ntest6307\ncisco4-1-bad\ntest6310\ntest6311\ntest6312\ntest6313\ntest6314\ntest6315\ntest6320\ntest6322\ntest6323\ntest6324\ntest6325\nres05\ntest6328\ntest6330\ns619a\ntest6333\ntest6334\ntest6336\ntest6337\ntest6338\ntest6340\ntest6341\nweb524\ns619b\ntest6350\ntest6351\ntest6352\ntest6353\ntest6354\ntest6355\ntest6357\ns932a\ns621a\ntest6358\ns741b\ns709a\ntest6362\ntest6363\ntest6364\ntest6365\nres10\ntest6370\ntest6371\ndude123\ntest6373\ntest6374\ntest6375\ntest6376\ntest6377\ntest6378\ntest6380\ntest6381\ntest6382\ntest6383\ntest6384\ntest6385\nliuxing\ntest6388\ntest6400\ntest6401\ntest6402\ntest6403\nnobelman\ntest6405\ntest6406\ntest6397\ntest6408\ns1414ipmi\ntest6410\ntest6411\ntest6412\nweb2799\ntest6414\ntest6415\ntest6417\ntest6418\ntest6420\ntest6421\ntest6422\ntest6423\ntest6424\ntest6425\ntest6427\ntest6428\ntest6430\ntest6431\ntest6432\ntest6433\ntest6434\ntest6435\ns622a\ntest6440\ntest6441\ntest6442\ntest6443\ntest6444\ntest6445\ntest6446\ntest6447\ntest6448\ntest6450\ntest6451\ntest6452\ntest6453\ntest6454\ntest6455\ntest6456\ntest6457\ntest6458\ntest6460\ntest6462\ntest6463\ntest6464\ntest6465\ntest6466\ntest6467\ntest6468\ntest6470\ntest6471\nthl\ntest6474\ntest6475\ntest6476\ntest6477\ntest6478\ntest6480\ntest6481\ntest6482\ntest6486\ntest6487\ntest6488\ntest6500\ntest6501\ntest6502\ntest6493\ntest6504\ntest6505\ns1138ipmi\ntest6507\ns1466b\ns4169ipmi\ns4137ipmi\nvh01\nfaul\nbeatbreak\neoin\ndistrib\nblackriver\nmynick\nerdzan\nthesilence\ndemopage\nequity\nfinanz\nvh02\nwqdman\nblackspace\nbalint\ns624a\ncello\ns624b\ntraderportal\nbasalt\nlikenoother\nzzm270782357\ndaxiongmao\npedroferreira\ns920a\ndaylite\njatek\nsandstone\npams\ns4246ipmi\nweb196\ns625a\ns1419ipmi\nwiki-dev\nfms5\ns626a\nesm5\nweb469\nesm6\nesm7\nweb2829\nesm8\nesm9\nesm10\ns626b\nwebdisk.sitebuilder\nftp.gallery\ns4175ipmi\nst17\nst24\nst25\nst27\nst31\nst9\nst19\nst30\nagility\ns627b\nykc\nikuei\nkoutoku\ntoyokawa\nweb198\ngbcp\npanopto\nthing2\nuphinh\nedari\nzirconia\ntestfiles\nwmiller\nsuchart\nalexi\nakmal\ns4208a\nstaging.dev\nbabyx\nhammoud\nlazerpoint\nhy1\ngoo\nadhoc\npru\ns628a\nekatalog\ns840ipmi\nepbx2\nsynxis\nlonghorn\nsisu\ns931a\nweb2302\nweb1390\ngiangnt\ns4353ipmi\njffnms\ns288ipmi\ns600\nweb534\nweb1392\nweb1880\nwwwwwww\nmultidevice\nbluesun\nfringe\nweb1929\nnpp\nkinen\ns630b\nweb1399\ns4108ipmi\nvalverde\nsm69\ns1425ipmi\nsalak\ns632a\ndocworks\nsakusaku\nwebhelp\nhisho\ns4181ipmi\ns4311a\nnewapi\ns633a\nweb2859\nmins\nsomphong\nchekui\nanicet\nwww.collections\ns633b\nmtest2\nweb1420\ns526ipmi\nenvoi\nmailsv1\nocean11\nweb59\ns743a\nns1.dec\nwww.futures\nizu\ns610ipmi\ns304ipmi\nfmat\nproofs\npatientclinic\nmyminicity\nwww.thenews\nwww.gamersparadise\ns4101a\nwww.sparky\nheartrhythmclinic\nwww.theda\nmaytinh\nmalin\ntamam\nweb2869\ntalib\nladyp\nhashim\nregulators\nwww.starz\nwww.noorsat\nphillyskaters\ns4101b\nansarysa\nwww.abood\nblackwatch\nricksplace\nwww.adnan\nlegio\nwww.bandofbrothers\naffguild\ncardiosurgery\nweb69\ns202ipmi\ns635a\n6rb\nnumerology\npavlovic\nhorseheaven\nwww.godlike\nzhangbo\nwww.newengland\nmyvoice\nsiteweb\nwww.regulators\nlve\nrohclan\nterrafirma\nwww.alternativeenergy\nicemage\nwww.testingplace\nweb2879\nwww.thedoghouse\nr131gzhbxci3cnaq2to9878u6mx7asr7vepltmpq\nbaladna\nwww.kidney\nwww.trick\nscionsoffate\ns2s\negr\ns1431ipmi\nblazed\netw\ns4102b\nigt\napplicants\nconfused\nweb79\nwww.sithacademy\ns636a\ns4103a\ns4103b\nt3m\nnoh\nowe\npsq\nrcr\nrfm\ns637a\nwww.blackwatch\nrow\nwww.theway\nwww.ricksplace\ntheburrow\nvd3\nwthfwcluster\nwal\ns4104a\nwgr\nwww.playtime\nwww.numerology\ntl1\nhpclub\nweb2900\njustforkicks\nweb2891\nweb220\nwthfwmgmt\nhamami\nweb2892\nwww.sacredrealm\nweb2893\nwthadfs\nweb2894\nwww.xerxes\nweb1890\nwww.amipest\namipest\nweb2895\ns4104b\nthebus\nwww.thetardis\nweb2896\ns1427ipmi\nanimefreak\ndiablerie\nhooligans\nweb2897\nihotblack\nthesithacademy\nshadesofink\nwww.magnacarta\nweb2898\nsaihu\ns726ipmi\nweb2899\ndoglovers\nweb1891\nbiteme\nwww.cappa\nweb2911\nwww.dbadmintrillian\ncesar1\nweb2912\nselva\nwww.roughnecks\nsaicomputers\nhigherground\nweb2913\ns638a\nthenewfrontier\n360clan\nwww.jediknights\nwww.week4\nweb2914\nwww.renegades\nweb1000\nweb1001\nweb1002\nweb1003\nweb1004\nweb1005\nweb1007\nweb1008\nweb1010\nweb1011\nweb1012\nweb1014\nweb1015\nweb1016\ns309ipmi\nweb1017\nweb1018\nwww.animefreak\nweb1022\nweb1023\nweb1024\nweb1025\nweb1026\nweb1027\nweb1028\nweb1030\nweb1031\nweb1032\nweb1033\nweb1034\nweb1035\nweb1036\nweb1037\nweb1038\nweb1040\nweb1041\nweb1042\nweb1043\nweb1044\nweb1045\nweb1047\nweb1048\nweb1049\nweb1051\nweb1052\nweb1053\nweb1054\nweb1055\nweb1056\nweb1057\nweb1058\nweb1060\nweb1061\nweb1062\nweb1063\nweb1064\nweb1065\nweb1066\nweb1067\nweb1068\nweb1069\nweb1071\nweb1072\nweb1074\nweb1075\nweb1076\nweb1077\nweb1078\nweb1079\nweb1081\nweb1082\nweb1083\nweb1084\nweb1085\nweb1087\nwww.crhs\nweb1090\nweb1091\nweb1092\nweb1094\nweb1095\nweb1106\nsmartphones\nweb1097\nweb1098\nweb1110\nsplitinfinity\nweb1112\nweb1113\nweb1114\nweb1115\nwww.comworld\nweb1117\nweb1118\nweb1120\nweb1121\nweb1122\nweb1124\ns4105b\nweb1125\nweb1126\nwww.wesam\nweb1128\nvideoplanet\nweb1132\nweb1133\nweb1134\nweb1135\nweb1136\nweb1137\nweb1138\nweb1140\nweb1141\nweb1142\nweb1143\nweb1144\nweb1145\nweb1146\nweb1147\nweb1148\nweb1150\nwww.blazed\nweb3019\nwww.nintendowifi\npwm\nwww.bones\nweb1211\nweb1212\nweb1213\nweb1214\nweb1215\nweb1216\nweb1217\nweb1218\nweb1221\nweb1222\nweb1223\nweb1224\nweb1225\nweb1227\nweb1228\nweb1230\nweb1231\nweb1232\nweb1233\nweb1234\nweb1235\nweb1236\nweb1237\nweb1238\nweb1240\nweb1241\nweb1242\nweb1243\nweb1244\nweb1245\nweb1246\nweb1247\nweb1248\nweb1250\nweb1251\nweb1252\nweb1254\nweb1255\nweb1256\nweb1257\nweb1258\nweb1261\nweb1262\nweb1263\nweb1264\nweb1265\nweb1267\nweb1268\nweb1270\nweb1271\nweb1272\nweb1274\nweb1275\nweb1276\nweb1277\nweb1278\nweb1279\nweb1281\nweb1282\nweb1283\nweb1284\nweb1285\nweb1287\nleosplace\nweb1300\nweb1301\nweb1292\nweb1304\nweb1305\nweb1306\nweb1307\nweb1308\nweb1311\nweb1312\nweb1313\nweb1314\nweb1315\nweb1317\nweb1318\nweb1320\nweb1321\nweb1322\nweb1324\nweb1325\nweb1326\nweb1327\nweb1328\nweb1331\nweb1332\nweb1333\nweb1334\nweb1335\nweb1336\nweb1337\nweb1338\nweb1340\nweb1341\nweb1342\nweb1343\nweb1344\nweb1345\nweb1346\nweb1347\nweb1348\nweb1350\nweb1351\nweb1352\nweb1353\nweb1354\nweb1355\nweb1356\nweb1357\nweb1358\nweb1360\nweb1361\nweb1362\nweb1363\nweb1364\nweb1365\ns639a\nweb1366\nweb1367\nweb1368\nweb1369\nweb1371\nweb1372\nweb1373\nweb1374\nweb1375\nweb1376\nweb1377\nweb1378\nweb1380\nweb1381\nweb1382\nweb1383\nweb1384\nweb1385\nweb1386\nweb1387\nweb1388\nweb1400\nweb1401\nweb1402\nweb1403\nweb1404\nweb1395\nweb1396\nweb1407\nweb1408\nweb1409\nweb1411\nweb1412\nweb1413\nweb1414\nweb1415\nweb1416\nweb1417\nweb1418\nweb1419\nweb1421\nweb1422\nweb1423\nweb1424\nweb1425\nweb1426\nweb1427\nwww.gamedev\nweb1429\nweb1431\nweb1432\nweb1433\nweb1434\nweb1435\nweb1436\nweb1437\nweb1438\nweb1439\nweb1441\nweb1442\nweb1443\nweb1444\nweb1445\nweb1446\nweb1447\nweb1448\nweb1450\nhostile\nweb363\nwww.desouza\nretouching\nweb2930\nweb1511\nweb1512\nweb1513\nweb1514\nweb1515\nweb1516\nweb1517\nweb1518\nweb1520\nweb1521\nweb1522\ns4106a\nweb1523\nweb1524\nweb1525\nweb1526\nweb1527\nweb1528\nweb1531\nweb1532\nweb1533\nweb1534\nweb1535\nweb1536\nweb1537\nweb1538\nweb1540\nweb1541\nweb1542\nweb1543\nweb1544\nweb1545\nweb1546\nweb1547\nweb1548\nweb1550\nweb1551\nweb1552\nweb1553\nweb1554\nweb1555\nweb1556\nweb1557\nweb1558\nweb1559\nweb1561\nweb1562\nweb1563\nweb1564\nthorns\nweb1566\nweb1567\nweb1568\nweb1570\nweb1571\ntheprence\nweb1573\nweb1574\nweb1575\nweb1576\nweb1577\nmanna\nweb1580\nweb1581\nweb1582\nweb1583\nweb1584\nwww.dbzuniverse\nweb1586\nweb1587\nweb1588\nweb1601\nweb1602\nweb1593\nweb1604\nweb1605\nweb1606\nweb1607\nweb1598\nweb1609\nweb1611\nweb1612\nweb1613\nweb1614\nwww.chums\nweb1616\nweb1617\nweb1618\nweb1619\nweb1621\nweb1622\nweb1623\nweb1624\nweb1625\nweb1626\nweb1627\nrealms\nweb1629\nweb1631\nweb1632\nweb1633\nweb1634\nweb1635\nweb1636\nweb1637\nweb1638\nweb1640\nweb1641\nweb1642\nweb1643\nweb1644\nweb1645\nweb1646\nweb1647\nweb1648\ns1436ipmi\nweb1649\nweb1651\nweb1652\nweb1653\nweb1654\nweb1655\nweb1656\nweb1657\nweb1658\nweb1659\nweb1661\nweb1662\nweb1663\nweb1664\nweb1665\nweb1666\nweb1667\nweb1668\nweb1670\nweb1671\ns740a\nweb1672\nweb1673\nweb1674\nweb1675\nweb1676\nweb1677\nweb1678\nweb1680\nweb1681\nweb1682\nweb1683\nweb1684\nweb1685\nweb1686\nweb1687\nwww.zamalek\nweb1690\nweb1691\nweb1692\nweb1703\nweb1704\nweb1695\nweb1706\nweb1707\nweb1708\nweb1710\nweb1711\nweb1712\nweb1713\nweb1714\nweb1715\nweb1716\nweb1717\nweb1718\nweb1720\nweb1721\nweb1722\nweb1723\nweb1724\nweb1725\nweb1726\nweb1727\nweb1728\nweb1729\nweb1731\nweb1732\nweb1733\nweb1734\nweb1735\nweb1736\nweb1737\nweb1738\nweb1739\nweb1741\nweb1742\nweb1743\nweb1744\nweb1745\nweb1746\nweb1747\nweb1748\nweb1750\nnightriders\nphonebill\nweb1910\nweb1896\nemarati\nweb490\nweb1811\nweb1812\nweb1813\nweb1814\nweb1815\nweb1816\nweb1817\nweb1818\nweb1820\nweb1821\nweb1822\nweb1823\nweb1824\nweb1825\nweb1826\nweb1827\nwww.epay\nweb1830\nweb1831\nweb1832\nweb1833\nweb1834\nweb1835\nweb1836\nweb1837\nweb1838\nweb1840\nweb1841\nweb1842\nweb1843\nweb1844\ns744a\nweb1845\nweb1846\nweb1847\nweb1848\nweb1850\nweb1851\nweb1852\nweb1853\nweb1854\nweb1855\nweb1856\nweb1857\nmacgyver\nweb1861\nweb1862\nweb1863\nweb1864\nweb1865\nweb1867\nweb1868\nweb1870\nweb1871\nweb1872\nweb1874\nweb1875\nweb1876\nweb1877\nweb1878\nweb1881\nweb1882\nweb1883\nweb1884\nweb1885\nweb1887\nthetardis\nweb2000\nweb2001\nweb2002\nweb2003\nweb2004\ns641a\n6688\nyourweb\nweb2014\nweb2015\nweb2017\nweb2018\nwww.insanesanity\nweb2021\nweb2022\nweb2024\nmolham\nweb2026\nweb2027\nweb2028\nweb2031\nchicanorap\nweb2033\nweb2034\nweb2035\nweb2036\nweb2037\nwww.mysample\nweb2040\nweb2041\nweb2042\nweb2043\nweb2044\nthedoghouse\nweb2046\nweb2047\nweb2048\nweb2050\nweb1951\nws01qanet005\nweb1953\nweb1954\nweb1955\nweb1956\nweb1957\nromane\nweb1960\nweb1961\nweb1962\nweb1963\nweb1897\nanimeuniverse\nweb1966\nweb1967\nweb1968\nweb1970\nweb1971\nwww.thedeathsquad\nweb1973\nweb1974\nweb1975\nweb1976\nweb1977\ntoby\nweb1980\nweb1981\nweb1982\nweb1983\nweb1984\nweb1985\nweb1986\nweb1987\nweb1988\nweb1991\nweb1992\nweb1993\nweb1994\nweb1995\nweb1996\nweb1997\nweb1998\nweb1999\nweb2111\nweb2112\nweb2113\nweb2114\nweb2116\nweb2117\nweb2118\nweb2120\nweb2121\nweb2122\nweb2123\nweb2124\nweb2125\nweb2126\nweb2127\nmilkman\nweb2130\nweb2131\nweb2132\nweb2133\nweb2134\nweb2135\nweb2136\nweb2137\nweb2138\nweb2140\nweb2141\nweb2142\nweb2143\nweb2144\nweb2145\nweb2146\nweb2147\nweb2148\nweb2150\nweb2151\nweb2152\nweb2153\nweb2154\nweb2155\nweb2156\nweb2157\nweb2158\nweb2161\nweb2162\nweb2163\nweb2164\nweb2165\nweb2166\nweb2167\nweb2168\nweb2170\nweb2171\nweb2172\nweb2173\nweb2174\nweb2175\nweb2176\nweb2177\nweb2178\nweb2180\nweb2181\nweb2182\nweb2183\nweb2184\nweb2185\nweb2186\nweb2187\nwww.puddles\nweb2200\nweb2201\nweb2202\nweb2203\nweb2204\nweb2205\nweb2206\nweb2207\nweb2208\nweb2210\nweb2211\nweb2212\nweb2213\nweb2214\nweb2215\nweb2216\nweb2217\nweb2218\nweb2220\nweb2221\nweb2222\nweb2223\nweb2224\nweb2225\nweb2226\nweb2227\nweb2228\nweb2230\nweb2231\nweb2232\nweb2233\nweb2234\nweb2235\nweb2236\nweb2237\nweb2238\nweb2240\nweb2241\nweb2242\nweb2243\nweb2244\nweb2245\nweb2246\nweb2247\nweb2248\nweb2250\nweb1898\nweb2252\nweb2253\nweb2254\nweb2255\nweb2256\nweb2257\nfreebieworld\nweb2260\nweb2261\nweb2262\nweb2263\nweb2264\ns4107a\nweb2266\nweb2267\nweb2268\nweb2270\nweb2271\nwww.kurdistan\nweb2273\nweb2274\nweb2275\nweb2276\nweb2277\nwhitecliffs\nweb2280\nweb2281\nweb2282\nweb2283\nweb2284\ns4107b\nweb2286\nweb2287\nmercenaries\nweb2301\nwww.weareafamily\nweb2303\nweb2304\nweb2305\nweb2306\nweb2307\ntemp09\nweb2310\nweb2311\nweb2312\nweb2313\nweb2314\nurbanchaos\nweb2316\nweb2317\nweb2318\nweb2320\nweb2321\nsunt\nweb2323\nweb2324\nweb2325\nweb2326\nweb2327\nwww.gatelords\nweb2330\nweb2331\nweb2332\nweb2333\nweb2334\nweb2335\nweb2336\nweb2337\nweb2338\nweb2340\nweb2341\nweb2342\nweb2343\nweb2344\nweb2345\nweb2346\nweb2347\nwww.newhorizon\nweb2350\nwww.crimsonrose\nwww.darkbrotherhood\ns4202ipmi\nweb2272\ns642a\nweb2411\nweb2412\nweb2413\nweb2414\nweb2415\nweb2416\nweb2417\nweb2418\nweb2420\nweb2421\nweb2422\nweb2423\nweb2424\nweb2425\nweb2426\nweb2427\nweb2428\nweb2431\nweb2432\nweb2433\nweb2434\nweb2435\nweb2436\nmadhatters\nweb2438\nweb2440\nweb2441\nweb2442\nweb2443\nweb2444\nweb2446\nweb2447\nweb2448\nweb2450\nweb2451\nweb2452\nweb2453\nweb2454\ns1470a\nweb2455\nweb2456\nweb2457\nchickens\nweb2460\nweb2461\nweb2462\nweb2463\nweb2464\nweb2465\nweb2466\nweb2467\nweb2468\nweb2470\nweb2471\nweb2472\nweb2473\nweb2474\nweb2475\nweb2476\nweb2477\nweb2478\nweb2480\nweb2481\nweb2482\nweb2484\nweb2485\nweb2486\nweb2487\nweb2488\nweb2501\nweb2502\nweb2503\nweb2504\nweb2505\nweb2506\nweb2507\nweb2508\nweb2510\nweb2511\nweb2512\nweb2513\nweb2514\nweb2515\nweb2516\nweb2517\nweb2518\nweb2520\nweb2521\nweb2522\nweb2523\nweb2524\nweb2525\nweb2526\nweb2527\nwww.payback\nweb2530\nweb2531\nweb2532\nweb2533\nweb2534\nweb2535\nweb2536\nweb2537\nweb2538\nweb2540\nweb2541\nweb2542\nweb2543\nweb2544\nweb2545\nweb2546\nweb2547\nweb2548\nweb2550\nweb2551\nweb2552\nweb2553\nweb2554\nweb2555\nweb2556\nweb2557\nweb2558\nweb2561\nweb2562\nweb2563\nweb2564\nweb2565\nweb2567\nweb2568\nweb2570\nweb2571\nweb2572\nweb2574\nweb2575\nweb2576\nweb2577\nweb2578\nweb2581\nweb2582\nweb2583\nweb2584\nweb2585\nweb2587\ndaniel2\nweb2600\nweb2601\nweb2602\nweb2603\nweb2604\nweb2605\nweb2606\nweb2607\nweb2608\nweb2610\nweb2611\nweb2612\nweb2613\nweb2614\nweb2615\nweb2617\nweb2618\nweb2620\nweb2621\nweb2622\nweb2624\nweb2625\nweb2626\nweb2627\nweb2628\nweb2631\nweb2632\nweb2633\nweb2634\nweb2635\nweb2636\nweb2637\nweb2638\nweb2640\nweb2641\nweb2642\nweb2643\nweb2644\nweb2645\nweb2646\nweb2647\nweb2648\nweb2650\nweb1519\ns4108b\nweb2711\nweb2712\nweb2713\nweb2714\nweb2715\nweb2716\nweb2717\nweb2718\nweb2720\nweb2721\nweb2722\nweb2723\nweb2724\nweb2725\nweb2726\nweb2727\nweb2728\nweb2730\nweb2731\nweb2732\nweb2733\nweb2734\nweb2735\nweb2736\nweb2737\nweb2738\nweb2740\nweb2741\nweb2742\nweb2743\nweb2744\nweb2745\nweb2746\nweb2747\nweb2748\nweb2750\nweb2751\nweb2752\nweb2753\nweb2754\nweb2755\nweb2756\nweb2757\nweb2758\nweb2761\nweb2762\nweb2763\nweb2765\nweb2766\nweb2767\nweb2768\nweb2770\nweb2771\nweb2772\nweb2773\nweb2774\nweb2775\nweb2776\nweb2777\nweb2778\nweb2780\nweb2781\nweb2782\nweb2783\nweb2784\nweb2785\nweb2786\nweb2787\nweb2788\nweb2800\nweb2801\nweb2802\nweb2803\nweb2804\nweb2805\nweb2806\nweb2807\nweb2808\nweb2810\nweb2811\nweb2812\nweb2813\nweb2814\nweb2815\nweb2816\nweb2817\nweb2818\nweb2820\nweb2821\nweb2822\nweb2823\nweb2824\nweb2825\nweb2826\nweb2827\ns933a\nweb2828\nweb2831\nweb2832\nweb2833\nweb2834\nweb2835\ns642e\nweb2836\nweb2837\nweb2838\nweb2840\nweb2841\nweb2842\nweb2843\nweb2844\nweb2845\nweb2846\nweb2847\nweb2848\nweb2850\nweb2851\nweb2852\nweb2853\nweb2854\nweb2855\nweb2856\nweb2857\nweb2858\nweb2860\nweb2861\nweb2862\nweb2863\nweb2864\nweb2865\nweb2866\nweb2867\nweb2868\nweb2870\nweb2871\nweb2872\nweb2873\nweb2874\nweb2875\nweb2876\nweb2877\nweb2878\nweb2880\nweb2881\nweb2882\nweb2883\nweb2884\nweb2885\nweb2886\nweb2887\nweb2888\nweb2901\nweb2902\nweb2903\nweb2904\nweb2905\nweb2906\nweb2907\nweb2908\nweb2910\nweb3011\nweb3012\nweb3013\nweb3014\nweb3015\nweb3016\nweb3017\nweb3018\nweb3020\nweb3021\nweb3022\nweb3023\nweb3024\nweb3025\nweb3026\nweb3027\nweb3028\nweb3030\nweb3031\ns642f\nweb3032\nweb3033\nweb3034\nweb3035\nweb3036\nweb3037\nweb3038\nweb3040\nweb3041\nweb3042\nweb3043\nweb3044\nweb3045\nweb3046\nweb3047\nweb3048\nweb3050\nweb3051\nweb3052\nweb3053\nweb3054\nweb3055\nweb3056\nweb3057\nweb3058\nweb3061\nweb3062\nweb3063\nweb3064\nweb3065\nweb3066\nweb3067\ntriggerhappy\nweb3070\nweb3071\nweb3072\nweb3073\nweb3074\nweb3075\nweb3076\nweb3077\nweb3078\nweb3080\nweb3081\nweb3082\nweb3083\nweb3084\nweb3085\nweb3086\nweb3087\nfaisal1\nweb3100\nweb3101\nweb3102\nweb3103\nweb3104\nweb3105\nweb3106\nweb3107\nweb3108\nweb3110\nweb3111\nweb3112\nweb3113\nweb3114\nweb3115\nweb3116\nweb3117\nweb3118\nweb1529\nweb3121\nweb3122\nweb3123\nweb3124\nweb3125\nweb3126\nweb3127\nweb3128\nweb3131\nweb3132\nweb3133\nweb3134\nweb3135\nweb3136\nweb3137\nweb3138\nweb3140\nweb3141\nweb3142\nweb3143\nweb3144\nweb3145\nweb3146\nweb3147\nweb3148\nweb3150\nweb3151\nweb3152\nweb3153\nweb3154\nweb3155\nweb3156\nweb3157\nmesfichiers\nweb3160\nweb3161\nweb3162\nweb3163\nweb3164\nweb3165\nweb3166\nweb3167\nweb3168\nweb3170\nweb3171\nweb3172\nweb3173\nweb3174\nweb3175\nweb3176\nweb3177\nweb3178\nweb3180\nweb3181\nweb3182\nweb3183\nweb3184\nweb3185\nweb3186\nweb3187\nweb3188\nweb3201\nweb3202\nweb3203\nweb3204\nweb3205\nweb3206\nweb3207\nweb3208\nweb3210\nweb3211\nweb3212\nweb3213\nweb3214\nweb3215\nweb3216\nweb3217\nweb3218\nweb3220\nweb3221\nweb3222\nweb3223\nweb3224\nweb3225\nweb3226\nweb3227\ns1470b\nweb3230\nweb3231\nweb3232\nweb3233\nweb3234\nweb3235\nweb3236\nweb3237\nweb3238\nweb3240\nweb3241\nweb3242\nweb3243\nweb3244\nweb3245\nweb3246\nweb3247\nweb3248\nweb3250\ns4109a\nwww.chicanorap\nwww.coffeetalk\nelmagic\nrealdeal\nwww.daedalus\n2222\nwww.erepublik\nwww.freeforall\nfsgroup\nizaphod\nfabulations\namonline\nglr\n1212\nwww.rst\nagoraphobia\nfragglerock\nwww.acrossthepond\nwww.urbanchaos\ns315ipmi\nwww.bluray\npps01\nchildrenofthenight\nwww.oddfellow\nwww.handson\nwww.madhatters\ns4111a\nwww.theelites\ndbadminmarvin\nwww.hangman\nthechosenfew\nwww.zappa\nwww.chooseme\nwww.elsaedy\nnoorsat\npoema\nnadim\ns4111b\nskyf\nm38\ntheswarmwar\nwww.elves\nwww.amnesty\nwww.wargods\nwww.sailor\npatiyut\nwutang\nwww.abf\nwww.theimperiallegion\ntm2\ncics\ns1442ipmi\nwww.bcr\nwww.btw\nmobilepalace\nwww.crg\nwww.dla\narchimede\nwww.dkt\nconservatoire\nwww.dow\nwww.egr\nwww.kamensk-uralskiy\nwww.eoa\nweb2292\nwww.etw\nwww.postyourstuff\nwww.yerbamate\nwww.hos\nelitewarriors\nwww.jak\ns712ipmi\nvremeto\nwww.justus\nserenityguild\nwww.maa\nwww.lod\nsondos\nwww.salama\nmailgw3\ns-1003007\nwww.mog\nwww.noh\nwww.ork\nwww.owe\nwww.ppt\nwww.psq\nteremok\nwww.sc2\nwww.rov\nwww.row\nwww.islarti\ns-1003008\nwww.trg\ncricri\nwww.uhs\nwww.vba\nwww.trt\nkupon\nwww.funit\ns4112b\nwww.wgr\nwww.zmm\nnumerique\nwww.moneymaking\nwww.ahlamontada\nvoodoocrew\ns4207ipmi\nwww.soundsource\nffforum\nsher\ns721\nwww.chatroom\nwww.footballforum\nwww.scionsoffate\nwww.superc\njustus\nblendedlearning\nwww.thesithacademy\nfunkytown\nwww.contacts\nhamada2010\npavlik\nwww.warpigs\nrelic\ns646a\nwww.htmltest\nsanane\nwolfclan\nwww.morrow\nwww.chatterbox\nwww.justforkicks\ndch\nmoviemagic\nsportlife\nwww.hastings\ns4113a\nbrokenstraw\nawf\nwww.voodoocrew\nsuperc\nwww.satsat\nthaifood\nwww.spiders\nwww.deviance\nwww.1001\nbeardeddragons\nfighterace\nrevue\nwww.totaleclipse\ns4113b\nwww.sweets\nwww.phillyskaters\n4jesus\nwww.haste\nceridian\nyerbamate\nwww.havoc\ns4114a\nwww.highschool\nwwwtm\ns4114b\nnorris\nstopsmoking\nwww.moviemagic\neworkshop\ns321ipmi\nsamra\ns744b\nwww.higherground\nwww.rednecks\ntesto\nadulthood\nmontest\nwww.primrose\nwww.thebus\nwww.fighterace\nwww.hivemind\nfootyfans\nwww.ladyp\ndesouza\ns4115a\nwww.guardians\nwww.adulthood\nwww.4all\nwww.azerty\ndkt\nchatalot\nzik\nfootballfrenzy\nwww.catalyst\nwww.back2back\ntherefuge\nwww.rainclan\nzamalek\nformas\nflyingcircus\nteamworkshop\nmyislam\nluntai\ntherebellion\npalstine\nliverpoolfans\nmohamedzaki\nwww.thenewfrontier\nldgaming\ncomworld\nwww.sharpie\nwww.diablerie\nnobilis\nkonoki\nwww.ihotblack\nmyles\nwww.iford\nwww.stickwar\nwww.thepit\ntheda\ncreativecorner\nwww.doglovers\ninsaneasylum\ntheimperiallegion\ns4115b\nwww.horseheaven\nwww.printing\ncavaliers\nwww.noob\nkatoteros\nwww.simulation\nwww.fathers\ncamelia\nwww.lunaris\ntcf\nkodclan\nwww.shadesofink\ntt9\nuhs\nwww.numberone\nurd\nbat2\ngangstaparadise\nalfnan\nweb1916\nwww.deathinc\nwww.leosplace\ndeathscythe\np005\nmadcows\ns934a\nwww.splitinfinity\ns1447ipmi\nwww.xsquad\nexiledro\ns101390a\nyoudecide\nwww.programmersparadise\nwww.hybrid\ns4116a\nwww.elders\nnarutorpg\nwww.anrforum\ns4116b\nwww.sellit\ntrick\nalkamar\nalaseer\nwww.parklands\nwww.dynamite\nbader\ndarkhearts\nwww.beardeddragons\nxsquad\nwww.elhamd\nhaflinger\nwww.townline\ncisco12-2\nsori\nsejours\nalmot\nelsaedy\nwww.nightriders\nelders\nmystik2\nwww.thechosenfew\nwww.nwoclan\nsportsnetwork\nwww.animeuniverse\ntheartofwar\ndivers\ns4213ipmi\nwww.starcity\nwww.revelation\nwargods\nfuturefiction\nroughnecks\nweb3089\nexohax\nturkteam\nhot1\nwww.chaotic\nelhamd\nwww.darkhearts\nwww.dungeons\ndevgames\nfables\nwww.alibaba\nuserbars\nislarti\ntheasylum\nback2back\nanhlam\nwww.footballfrenzy\nslaughter\nwww.selfish\nkimvan\nwww.wolfclan\ns4117a\nwww.kiran\ns4117b\nchooseme\nwarpigs\nnumberone\nnoursat\nwww.legionofdarkness\nwww.chatter\nlegionnaire\nstmichaels\ns4118a\nsktao\ns4118b\nwww.sportsbetting\ns326ipmi\nweek4\nprogrammersparadise\ns4119a\nsandanski\nwww.prisonbreak\nwww.hesham\nfoxscape\nwoodbine\nlegionofdarkness\njedimasters\neclips\nwww.creativecorner\nwww.fabulations\nbattleroyale\nadsa\nbd16\nwww.agoraphobia\nchums\nparinya\nbedo\nsriram\natef\ncctb\ns4119b\nwww.dbadminmarvin\ninsanesanity\nmicrosoftwindows\nsteg\nws123\nclanex\nwww.emoney\nzms\nazhr\nwww.liviu\nmehrshad\nwww.discussion\nwww.6rb\ns1453ipmi\ns4121a\nmilla\nwr3an\nbaljeet\nhabilar\nmapdev\nwww.thegods\norangebox\nknuckles\ns4121b\nfade\nduha\ns3eed\nwww.tribalwars\nvpn-us-west\nth1\nwww.roadtrips\nhomeschool\nweareafamily\nwww.marwan\nwww.theswarmwar\ns4218ipmi\nwww.stigmata\nwww.rstools\nwww.nutter\nwww.serenityguild\nwww.theunderworld\nhoda\nwww.guesswho\nhtfc\nhupt\nthedon\nwww.blendedlearning\ns4213b\ngali\ns4103ipmi\ns4122b\nwww.group4\nlexo\nwww.abdo\nwww.karnage\nkannan\nwww.mitie\nwww.funkytown\nshimmy\nwww.alaa\nwww.bedo\nvpn-au\nwww.lovehome\nmasrya\nthegreatescape\nwww.aucc\nwww.srsm\nalsace\nwww.equinox\nnewp\nwww.habilar\ns4123a\nwww.chen\nflanders\nwww.cogs\ns4123b\nrednecks\ns332ipmi\nwww.dmo3\ntsj\nvendome\ns4124a\ntoh\nwww.therebellion\nsharpie\nwww.thesims\ns4124b\ns306ipmi\nwww.entity\nqne\nwww.liverpoolfans\nwww.dust\nwww.b3\noui\nakhbar\npshl\ns1458ipmi\nwww.gaza\ns419ipmi\npwnd\nfootballforum\ntestxml\ns4125a\nbjbjbj\nsimplehelp\ns4125b\nwww.hala\ngdw\nthesims\nsithacademy\ns101392ipmi\nwww.software4free\nfederer\nrsps\ns4224ipmi\nwww.hood\nsrsm\nwww.htfc\nsuba\nwww.insaneasylum\nca2\nrainclan\nwww.iman\neuroleague\nentity\nreal4ever\nsacredrealm\nwww.faithless\npatterson\nsmarttech\ns4126a\ns4126b\nwww.dystopia\nxintuo\nxaoc\nwww.aliman\nsoundsource\ns4127a\nwww.chitchat\nelves\ntollfree\nswapitshop\nwww.mizo\ns4127b\nwww.nate\nwww.mofo\nwww.affguild\nwww.nita\ns613ipmi\ns337ipmi\ns4128a\nstickwar\nweb2949\nwww.hiking\nwww.katoteros\ns4128b\nmyfirstforum\ns101392a\ns4129a\nminime\nwww.none\nwww.yourhealth\nallsaints\nwww.talent\nwww.euroleague\nwww.denial\nclass2d\nthoughtcrime\nsumana\nwww.sart\ncoton\nwww.serc\nwww.sportsnetwork\nmancave\ns4129b\nsite4u\nhiking\njediknights\nwww.swapitshop\nleonjackson\nwww.alsadr\ndeathinc\nwww.tigerclan\ntigerclan\nwww.void\ndbadmintrillian\nwww.mohamedzaki\ns4229ipmi\nforgottencoast\ntestingplace\nwww.abdelrahman\ndbzuniverse\nweb3099\nwww.rohclan\nwww.childrenofthenight\nwww.slarti\nanrforum\nwww.baladna\nwww.cavaliers\nwww.ultras\ns4131a\ntapion\nking1\nalsadr\nwww.thehill\nweb186\ns4131b\nwww.demigod\ns4132a\naliance\ntheunderworld\ntownline\ns1433ipmi\ns618ipmi\ns4133a\ns4133b\ns1469ipmi\ns4134a\ns1204ipmi\ns717ipmi\ns4235ipmi\ns4135a\ns4135b\ns937a\ns4136a\ns4136b\ns624ipmi\nrouter1ipmi\ns4137a\ns4137b\ns1475ipmi\ns4138a\ns4138b\ns1210ipmi\ns4139a\ns4139b\nwww.lotto\ns4141a\ns4141b\nwww.forward\ns905ipmi\ns629ipmi\ns1475a\ns4142b\ns938a\ns1481ipmi\ns4143b\ns1215ipmi\ns4144a\ns4144b\ns4145a\ns4145b\ns911ipmi\ntpsmtp\nfcmi\ntmsg2\nwebhr\nirmtrade\napitwca\ntpsmtp2\ngoldtwca\ns635ipmi\ntmsg\nwebrtqt03\nwebrtqt01\nwebrtqt\nbctrade\nwebrtqt05\nwebrtqt04\ns4146a\nelearnap\nwebrtqt02\nrmtrade\nnbclient1\ns4146b\ns1303ipmi\ns4147a\ns4147b\norders2\nnetops\ngwanak\nwww.nsw\ns1221ipmi\ns745b\nwandoo\ntmp1\ns185b\ns4148a\ns4148b\ns4252ipmi\ntmp8\nlubin\ntmp9\nwww.jaroslaw\ns1476b\ns4149a\ns229ipmi\nwww.ostroda\ns916ipmi\nwww.znin\ns607ipmi\nwww.gliwice\ns641ipmi\nznin\ns4151a\ns4151b\nwww.wolsztyn\ns1109a\ns4152a\ns4152b\nslupsk\ns1226ipmi\ns4153a\ns4153b\ns4257ipmi\ns4154a\nostroda\nmarki\nrt3\nwww.debica\nwww.osiek\ns4154b\ns922ipmi\ns640a\nwww.brzozow\nhel\nthw\ns4155a\ns4155b\ns4156a\nmieszkowice\nmilakowo\ns4156b\nchorzele\npiaseczno\navaya\ns1232ipmi\nbrzozow\ns1309\ns701a\ns4157a\ns4157b\ns4360b\ns4263ipmi\ns702a\ns4158a\ns4158b\ns927ipmi\ns703a\ns1130a\nosiek\nwww.gizycko\ns4159b\nkolbuszowa\ns111ipmi\nnightline\ns704a\ns4161a\nwww.rzeszow\ns4161b\norneta\nwww.rozan\ns1237ipmi\ns705a\ns222ipmi\nwww.bialystok\ns4162b\ngizycko\ns4268ipmi\nwww.lubaczow\ns824ipmi\ns706a\ns4163a\nwww.turek\nwww.gostyn\ns4163b\ns933ipmi\ns707a\ns4164a\ns4164b\nwww.milakowo\nwww.chorzele\ns116ipmi\ns708a\ns4165a\nczestochowa\ns4165b\ns1243ipmi\nnintendoland\ns4166a\ns4166b\nwww.mielec\ns711a\ns4167a\nlesko\ns4167b\ns4322ipmi\ns712a\ns1480a\ns4168b\ns1479b\ns122ipmi\ns4169a\nstrzyzow\nropczyce\nturek\ns4169b\ns908ipmi\nwww.lesko\ns714a\ns4171a\ns4171b\ns715a\ns4172a\ns4172b\ns716a\ns4173a\ns4173b\nwww.jaslo\nwww.slupsk\nwww.ilawa\nwww.tarnobrzeg\ns640b\ns403ipmi\ns717a\ns4174a\ns4174b\ns4366ipmi\ns718a\ns4175a\ns4175b\nlubaczow\ns740\ns719a\ns4176a\ns4176b\ns721a\ns4177a\ns4177b\ns408ipmi\njaroslaw\ns722a\ns4178a\ns133ipmi\ntarnobrzeg\ns635b\njaslo\ns4340ipmi\ns723a\nilawa\nwww.scp\ns4179a\ns4179b\nwolsztyn\ns818ipmi\ns724a\ns4181a\ns4181b\ns746b\ns725a\nwww.strzyzow\nwww.ropczyce\ns4182a\noldsmtp\ns4182b\ns414ipmi\ns4183a\ns4183b\ngostyn\ns102391ipmi\nwww.orneta\ns727a\ns4184a\ns4184b\ns728a\ns4185a\npd1\ns4185b\ns918ipmi\ns409\nwww.kolbuszowa\ns4186a\nmielec\ns4186b\ns731a\ns4187a\ns4187b\ns144ipmi\ns713a\ns102396ipmi\ns732a\ns4188a\ns4188b\ns227ipmi\ns1005ipmi\nwww.livescores\nftp.old\nftp.game\ns733a\noftp2\nlocalnet\nperiwinkle\ns4312ipmi\ns1020a\nmailin1\nvalerian\ns4201a\nnmr\nmailin2\nrsl\ns4201b\ns701ipmi\ns1404ipmi\ns4202a\ns4202b\ns736a\ngridview\ns4203a\ns4203b\ns505ipmi\ns1011ipmi\nrushmore\nshasta\ns4204a\ns4204b\ns4317ipmi\nd2l\ns738a\ns4205a\ns4205b\ns706ipmi\ns4206a\ns4206b\ns431ipmi\ns741a\npetition\ns4207a\ns4207b\ns742a\ns1016ipmi\nanc1\ns4208b\ns4323ipmi\ns4160ipmi\ns4314a\nrelais2\ns4209a\ns4209b\nwww.ultimate\nglobal1\ns4320a\ntalento2\ncrossroad\ns4211a\ns4211b\nautoconfig.library\nautodiscover.library\ns436ipmi\ns4226b\ns745a\nchapo\ns4212a\nwww.harley\ns4212b\ns746a\nwebdisk.cp\ns4213a\ncoimbatore\ns1022ipmi\nwww.coimbatore\ns4314b\nparent\ns4328ipmi\nzacharias\nsportmaster\ns747a\ns4120ipmi\ngeab\ns4214b\ns620b\nstrand\nmazars\nharlequin\nbenq\nxlnt\ns748a\ne-butik\nfns\noneoff\nalfa3\ns4215a\ns4215b\ns442ipmi\nsamhall\ns525a\nquestionmark\ns4216a\nwebgui\nprocom\nxcri\ns4216b\nwww.fencing\ns902b\ncisco3-1bad\ns4159a\ns4217b\ns1027ipmi\ns4334ipmi\ninfoserv\ns4218a\ns4218b\ns4219a\ns4219b\ns723ipmi\ns4221a\ns4221b\ns4160b\ns1119a\nwww.bestdeals\nbestdeals\ns1308ipmi\ns4222b\newr\ns1033ipmi\ns4339ipmi\ns4223a\ns4223b\ns4224a\nvss2\nwebdisk.tm\nautoconfig.tm\nautodiscover.tm\ns1450ipmi\ns728ipmi\ns747b\ns4225a\ns4226a\ns1314ipmi\ns1038ipmi\nvpn-us\ns4345ipmi\ns4227a\ns4228a\ns4228b\ns734ipmi\ns1409ipmi\ns4229a\ns4230b\ns1309a\nimages-nc\nimages-na\nimages-ns\nimages-ni\nimages-no\nimages-ng\ns930ipmi\ns1309b\ns4231a\ns4230a\ns1319ipmi\ns4215ipmi\ns4232a\ns4232b\nrefill\ncompliance\nkob11\ns4168a\ns739ipmi\ns1359ipmi\ns919ipmi\ns4235a\ncathaylife\nchinatrust\ns1325ipmi\ns735\ns4236a\ns4356ipmi\ns4165ipmi\ns720\ns4237a\ns4237b\nwww.f1\nvpn201\nvpn205\nwww.country\nvpn200\nvpn202\nvpn203\nvpn204\ns337b\ns4238a\ns4238b\ns1320ipmi\nfialka\nselfish\nwww.konvict\nwww.limelight\nwww.diplomacy\nroyston\nfunit\nlodi\nredtoblack\ndtw\ns4239a\ndli\nfma\nwww.pnt\ns4239b\nlim1\ns1331ipmi\nwww.youdecide\ngnome\nwww.mrm\nthedeathsquad\nwww.skp\ns422ipmi\ndungeons\nangelhaven\nwww.deathscythe\nwww.nomore\ncrimsonrose\ns4241a\nstela\nwww.ldgaming\nwww.battleroyale\njodie\nwww.6arab\nwww.redtoblack\ns4241b\ngatelords\nsliver\ns4362ipmi\nwww.factory\nwww.rawan\ntelethon\nprodotti\nwww.360clan\npolska\nthegods\ns4242a\nwww.recon\nics2\nmuzammil\ns4242b\nrateme\ndarkbrotherhood\nwww.angelhaven\nwww.ravenous\nsias\nexp3\nwww.futurefiction\niford\ns4243a\ns4243b\ns803ipmi\ns4244a\ns210a\nmail-int\ns1336ipmi\niod\ns4245a\ns4245b\ns4367ipmi\ns4102ipmi\ns4246a\ns4246b\naccess6\ns4247a\ns4247b\ninspektorat\ns215ipmi\ns4248a\nuci\ns4248b\ns1230ipmi\ns1342ipmi\nweb1920\ns4249a\ntopman\noutfit\ns4249b\nwallis\nptk\ns4107ipmi\ns4251a\ns4233a\ns4252a\nr15\ns4252b\nnexus2\ns320ipmi\nv14\ns221ipmi\ns4253a\nv15\nv11\nv20\nv24\ns4253b\ns1347ipmi\nlinode1\nlinode2\nlinode3\nlinode4\nlinode5\nlinode6\nipaddress2web\nwww.winxp\norochi\ns4254a\ns4254b\ns740ipmi\norkutt\ns4113ipmi\ns4255a\ns4255b\ns823y\ns4256a\nnomina\ns4256b\ns1314a\ns502ipmi\ns226ipmi\ns801a\ns4257a\nldap5\nrootdir\ns4234a\ns1432b\nwww.projetos\n6dkj\ns748b\ns1353ipmi\ns4258a\ns4258b\ns4221ipmi\ns803a\ns4118ipmi\ns4250ipmi\ns804a\ns4261a\ns4261b\ns507ipmi\ns232ipmi\ns4262a\ngraphics3\next1\ns4262b\ns806a\nsslgw\ns1358ipmi\ns4263b\ns4171ipmi\nautoconfig.a\ns4264a\nintegracja\nautodiscover.a\ns213a\ns4320ipmi\ns808a\nmagnolie\ns4265a\ns4265b\ns833ipmi\ns513ipmi\ns809a\ncampari\ns237ipmi\ns4266b\ns811a\ns4267a\ns1364ipmi\npinklady\nwww.hum\ns812a\ns4268a\ns4268b\ns4129ipmi\ns813a\ns4269a\ns4269b\ns1226\ns518ipmi\ns814a\ns4271a\ns4271b\ns812ipmi\ns815a\ns4272a\ns4272b\ns1369ipmi\ns813x\ns1104ipmi\ns813z\ns816a\ns4273a\ns4273b\ns4135ipmi\ns1010ipmi\nweb3119\narchitect\ns817a\ns524ipmi\ns819a\ns820b\ns1375ipmi\ns1110ipmi\ns1317b\ns4141ipmi\ns822a\nppmail\ns822b\nadminer\ns520ipmi\ns2b\nvps.serverel.com\ns529ipmi\ns904a\ns824a\nipmi14-2\ns1129a\ns1115ipmi\nsbl\ns825a\nrscomp\nbaykal\ns825b\ns1129b\ns-108\ns-110\ns826a\npotok\ns826b\ns904b\ns811ipmi\nwww.citforum\ns827b\ns4162a\ns260ipmi\ns828a\ns828b\ns1121ipmi\ns829b\ns4152ipmi\ns831a\ns831b\ns816ipmi\ns832b\ns638b\ns265ipmi\ns833a\ns833b\ns1319a\ns1402ipmi\ns1319b\ns1126ipmi\ns4240a\ns4176ipmi\ns-201\ns835a\ns4302a\ns4302b\ns926b\ns4303a\ns4303b\ns271ipmi\ns837a\ns4304a\ns4304b\ns1132a\ns1397ipmi\ns838a\ns4305a\ns1132ipmi\ns732\ns4163ipmi\ns4306a\ns4306b\ns4307a\ns4307b\ns276ipmi\ns842a\ns4308a\ns4308b\ns340ipmi\ns1413ipmi\ns4309a\ns4309b\ns4240b\ns4168ipmi\ns4311b\ns4312a\ns4312b\ngreenhotel\ns4313a\nftp.survey\ns4313b\n06\n07\nwww.trac\nsegway\n08\nvbg\ns1418ipmi\ns220a\nwww.greenhotel\nwww.segway\ns340b\nellada\ns4315a\ns4174ipmi\ns4316a\ns219d\ns838ipmi\ncisco3-2bad\neximstats\ns287ipmi\ns4317b\ns4318a\ns1424ipmi\ntest.static\ndwg\ns4319a\ns4319b\nmatos\ns4321a\ns4321b\ndarkdragon\n9999\nstj\ns4322a\ns-34a\ns410a\ns4323a\ns4323b\ns1430ipmi\ns4324a\ns4324b\nautodiscover.accounts\ns711ipmi\ns4185ipmi\nautoconfig.account\ns1239\nwebdisk.accounts\ns4344ipmi\ns4325a\ns4325b\ns4326a\ns4326b\ns308ipmi\ns602\nautodiscover.account\ns905b\ns4327a\ns4327b\ns1435ipmi\ns4244b\ns4328a\nwww.knowledgebase\ns4328b\ns4182ipmi\ns4201ipmi\ns4329a\ns4329b\ns4331a\nautoconfig.accounts\ns4331b\ns314ipmi\ns4332a\ns4332b\ns1441ipmi\ns4333a\ns4333b\ns4206ipmi\ns119ipmi\ns4334a\ns4334b\nsv60\ns4335a\ns4335b\ns319ipmi\ns4336a\nprawo\ns4336b\ns1446ipmi\ns4337a\nxds\nsv18\ns4337b\nsv22\nsv23\nsv24\nsv25\nsv26\nsv27\nsv29\ns4130a\nweb3130\ns4212ipmi\nipmi-a1-1\nipmi-a1-2\nsv36\nsv37\nsv38\ns1040b\ns4338b\ns4339a\ns4339b\ns325ipmi\nsv61\nsv62\nsv63\ns4341a\ns4341b\ns1452ipmi\nmail2b\ns4342a\np11\np12\nrajneesh\ns328ipmi\ns4217ipmi\ns4343a\ns4343b\nnimda\ns4344a\ns4344b\ns606ipmi\ns1138a\ns1401b\ns331ipmi\ns4345a\nrachael\ncache4\nautodiscover.top\nautoconfig.thumbs\nwebdisk.click\ns4345b\ns1457ipmi\nwebdisk.thumbs\ns4346a\nautodiscover.click\ns4346b\nwww.konto\ns101391ipmi\nautoconfig.ny\nwebdisk.ny\nautoconfig.top\nautodiscover.ny\nwebdisk.top\nkvm25\nautodiscover.thumbs\nautoconfig.click\ns4347b\nipmi-a2-1\nwww.trojans\namesmtp\nlocalhost.shop\nipmi-a2-2\nkvm24\ns4348a\ns4348b\ns612ipmi\nbonitasprings\ns336ipmi\nwww.worms\nk13\ns4349a\ns4349b\ns1463ipmi\ns4351a\ns4351b\ns4237ipmi\ns716ipmi\nkvm18\ns4228ipmi\nastest\ns4352b\ns4353a\ns4353b\nkvm17\ns617ipmi\ns342ipmi\ns4354a\ns226a\ns4359ipmi\ns226b\nkvm22\ns1468ipmi\ns4355b\ngeodaten\ns1203ipmi\ns4304ipmi\nshaiya\ninterbase\ns4187ipmi\ndl104\ndl103\ndl102\ns4356a\ns4234ipmi\ns4357a\nlutsk\ns4357b\ns102390a\ns102390b\ns623ipmi\nipmi-a3-1\nipmi-a3-2\ns4358a\ns4358b\ns102391a\ns102391b\ns903a\ns4359a\ncoldwellbanker\ns1474ipmi\ns1330a\ns1208ipmi\ns102392b\ns1330b\ns4361a\ns4250a\ns4239ipmi\ns102393a\ns102393b\ns4250b\ns905a\nmonitor01\nwork1\ns4362a\ns4362b\nmob01\ns102394a\nwebdisk.test123\nautoconfig.test123\nautodiscover.test123\ns102394b\ns628ipmi\ns416a\ntrojans\nfilesend\ns4363a\ns4363b\ns530b\ns102395a\ns102395b\ns907a\ns4364a\ns4364b\ns1479ipmi\nstats.test\ns102396a\ns1214ipmi\ns908a\nauto2\ns4365a\ns4365b\ns4245ipmi\ns102397a\ns102397b\ns1454\ns909a\ns4366a\ns4366b\ns138ipmi\ns909ipmi\ns4367a\ns4367b\ns520a\ns912a\ns4368a\ns4368b\nack\ns1220ipmi\ns913b\ns4251ipmi\ns914a\ns914b\nstjoseph\ns1477ipmi\ns606a\ns915a\ns639ipmi\ns916a\ns916b\ns1225ipmi\ns917b\ndpanel\ns636ipmi\ns1392a\ns918a\ns918b\ns921ipmi\ns418a\ns919b\ns830a\ns804\ns921b\ns1402b\ns1231ipmi\ns922b\ns-91a\ns722ipmi\ns4262ipmi\ns923a\ns923b\ns924b\ns925a\ns925b\ns1040\ns420a\ns1236ipmi\ns-95a\ns420b\ns4267ipmi\nusability\ntelemarketing\ns927a\ns927b\ns928a\ngw04\ns928b\ns929a\ns115ipmi\nbauk\ns931b\nfik\ns1242ipmi\ns4273ipmi\ns932b\ns632ipmi\nsmartcampus\ns933b\ns937ipmi\ns1464ipmi\nairi\noia\nsnmptn\ns934b\ns121ipmi\ns610a\nbapsi\nwww.bars\ndivas\ns935a\ns935b\ns808\npsw\ns936a\ns936b\nlocal2\ns4210b\nautoservicio\ns937b\neclectic\ns4210ipmi\ns402ipmi\ns938b\ns422a\ns941a\ns941b\ns942a\ns942b\nvdev\nvweb2\nmqa\nwww.aj\ns642b\ns407ipmi\ns234a\ns611e\ns827ipmi\ns423b\ns938ipmi\ns413ipmi\ns137ipmi\ns102390ipmi\ns4305ipmi\ns4257b\nwebadv\ns1393ipmi\ns425ipmi\ns418ipmi\ns143ipmi\ns102395ipmi\ns424b\ns1004ipmi\ns424c\ns4311ipmi\ns613b\ns4354b\ndigitalpub\nfeedfetcher\ns424ipmi\ns802a\ns412ipmi\ns4157ipmi\ns1009ipmi\ns4316ipmi\ngravitron\ns637ipmi\nmedia-ext\ns4210a\nedi1\ns705ipmi\ns429ipmi\nliquidweb\ns1015ipmi\nwwwi1\nregie\nproline\nwwwi2\nclipper\ns426b\nwwwi3\ns920ipmi\ns1021ipmi\nrails2\n238\ns805b\nweb1590\ns4327ipmi\nholytrinity\nssf\ns441ipmi\ns1302ipmi\nskillsoft\ns1026ipmi\ns1307ipmi\ns805a\ns1032ipmi\ns4338ipmi\ns240a\ns727ipmi\nslashcode\ntkc\ns176ipmi\ns4160a\ns1313ipmi\ns1037ipmi\ncommunity-resources\ns319\nraritan1\nraritan3\nweb373\ns230ipmi\ns1318ipmi\ns4349ipmi\ns738ipmi\nlucru\nclubforum\nwww.ucom\ns807a\nwww.hdd\nwww.musicclub\narcserv1\ns1324ipmi\ns823b\ns4355ipmi\ns242b\ns404\ns405\ns242c\ns407\nns2.barrie\nlocalnnf\nwms7\ns423\ns1329ipmi\ns741\nsmtp-temp\nclouddevnnf\ndevnnf\ncloudnnf\ns208ipmi\ns828ipmi\ns827\ns4310ipmi\ns1335ipmi\ns4322b\nvigilantes\nwww.webnews\ns4180ipmi\nbdh\nmi1\ns4101ipmi\nsimpleviewftp\ns501\nsaptest\nhomo\ndildo\nxtive\ns502\ns503\nnewdevapps\npromo3\ns504\ns505\ns506\ns507\ns508\ns214ipmi\ns1341ipmi\ns4260ipmi\nwww.speakup\ns4106ipmi\ns47a\ns47b\nafk\naph\nblt\nrange\ns219ipmi\nurm\nifg\ns49a\ns50b\ns49c\ns50d\ns1346ipmi\ns4220ipmi\ns4112ipmi\ns811b\nsuita\ns53c\ns501ipmi\nonlinetutor\ns4267b\nimd\ns4140a\ns225ipmi\ns603\ns604\nenquiry\ns605\ns606\ninbtest\ns607\ns608\ns609\nmoblin\natl-sql-serv.dc02\npcos\ns612\ns1352ipmi\ns614\nimageupload\norigin-staging\ns615\ns616\ns617\ns618\nxandros\ns621\nslax\nknoppix\ns4170ipmi\ns623\ns4117ipmi\ns625\ns626\ncheatcode\naznakaevo\ntestv3\nhabboville\ns623a\ns629\ns631\nkirishi\ns632\ns633\nchns\nrtd\ns635\natd\ncdn7\ncdn6\ncdn0\ns636\ns637\ns638\nfb0\ns506ipmi\nsechs\nacademi\nlivraria\ns641\nremote01.co\nremote02.co\nwolfman.co\ncocatnt06.co\ncocatnt18.co\nlibrary.co\ns642\nidd\ns231ipmi\ns646\ns58d\ns1357ipmi\ns4134b\ns522ipmi\ns4123ipmi\nwww.bpm\nfti\ns4130ipmi\nastoc\ns608ipmi\ns512ipmi\ns236ipmi\ns63b\ns63c\ns701\npueraria\ns702\ns703\nns7.x\ns704\ns1363ipmi\ns706\nreport.dev\ns435e\ns708\ninternal230.dev\nfundir\ns709\ns711\ns1350a\nns4.x\nns3.l\ns4128ipmi\nnugget\npdu5-1\nftp201\nrw3\ns1350b\ns722\ns4270a\n6789\ninternal201\ns724\n6666\ninternalfc.dev\nweb1610\nweb2290\nrebates\nweb431\nwebupload201\nmasseffect\nmicrochip\ns4270b\nadmin201\ns517ipmi\ns242ipmi\ninternal.dev\nftp202\nwebupload202\ninternalru.dev\ns737\nns2.x\ns738\nesc123\ns436a\ns742\ns743\ns744\ndhcp-37-29\ns745\nhost-209-149-115-165\nhost-209-149-115-60\nhost-209-149-115-93\nhost-209-149-115-96\nhost-209-149-115-209\nhost-209-149-115-160\nhost-209-149-115-158\nhost-209-149-114-251\nhost-209-149-115-90\nhost-209-149-114-249\nhost-209-149-115-89\nhost-209-149-114-247\nhost-209-149-115-152\nhost-209-149-115-77\nhost-209-149-115-143\nhost-209-149-116-7\nhost-209-149-115-228\nhost-209-149-115-150\nhost-209-149-114-99\nhost-209-149-114-98\nhost-209-149-114-97\nhost-209-149-114-96\nhost-209-149-114-95\nhost-209-149-114-94\nhost-209-149-114-93\nhost-209-149-114-9\nhost-209-149-114-91\nhost-209-149-114-89\nhost-209-149-114-88\nhost-209-149-114-87\nhost-209-149-114-86\nhost-209-149-114-8\nhost-209-149-114-84\nhost-209-149-114-83\nhost-209-149-114-82\ntisiphone\nhost-209-149-114-81\nhost-209-149-114-79\nhost-209-149-114-240\nbu01\nhost-209-149-114-77\nhost-209-149-114-38\nhost-209-149-114-75\nhost-209-149-114-74\nhost-209-149-114-73\nhost-209-149-114-6\nhost-209-149-114-71\nbio313\ns1368ipmi\ns747\nhost-209-149-114-69\nhost-209-149-114-68\nhost-209-149-114-67\nhost-209-149-114-209\nhost-209-149-114-5\nhost-209-149-114-64\nhost-209-149-114-63\nhost-209-149-114-62\nhost-209-149-114-61\nhost-209-149-114-59\nhost-209-149-114-4\ncharpac\nhost-209-149-114-57\nhost-209-149-114-56\nhost-209-149-114-55\nhost-209-149-114-54\nhost-209-149-114-53\nhost-209-149-114-3\nhost-209-149-114-51\ns748\ns1103ipmi\ns4134ipmi\ns1460ipmi\nhrlaser\ns523ipmi\ns436f\ns4140b\nhost-209-149-114-49\ns814b\ns1374ipmi\nhost-209-149-114-48\nhost-209-149-114-47\nhost-209-149-114-46\nhost-209-149-114-234\nhost-209-149-114-44\nweb1615\nhost-209-149-114-43\nhost-209-149-114-42\nhost-209-149-114-41\nhost-209-149-114-39\nhost-209-149-114-233\nhost-209-149-114-37\nhost-209-149-114-36\nhost-209-149-114-35\nhost-209-149-114-34\nhost-209-149-114-33\ns1108ipmi\ns803\nsuzuki2\ns744ipmi\ns805\ns806\ns4139ipmi\ns809\ns812\ns813\ns814\nhost-209-149-114-232\nhost-209-149-114-31\nhost-209-149-114-29\nhost-209-149-112-255\nhost-209-149-112-254\nhost-209-149-112-253\nhost-209-149-112-252\nhost-209-149-112-251\nhost-209-149-112-250\nhost-209-149-112-248\nhost-209-149-112-247\nhost-209-149-112-246\nhost-209-149-112-245\nhost-209-149-112-244\nhost-209-149-112-243\nhost-209-149-112-242\nhost-209-149-112-241\nhost-209-149-112-239\nhost-209-149-112-238\nhost-209-149-112-237\nhost-209-149-112-236\nhost-209-149-112-235\nhost-209-149-112-234\nhost-209-149-112-233\nhost-209-149-112-232\nhost-209-149-112-231\nhost-209-149-112-229\nhost-209-149-112-228\nhost-209-149-112-227\nhost-209-149-112-226\nhost-209-149-112-225\nhost-209-149-112-224\nhost-209-149-112-223\nhost-209-149-112-222\nhost-209-149-112-221\nhost-209-149-112-219\nhost-209-149-112-218\nhost-209-149-112-217\nhost-209-149-112-216\nhiraki\nhost-209-149-112-215\nhost-209-149-112-214\nhost-209-149-112-213\nhost-209-149-112-212\nhost-209-149-112-211\nhost-209-149-112-210\nhost-209-149-112-198\nhost-209-149-112-197\nhost-209-149-112-196\nhost-209-149-112-205\nhost-209-149-112-194\nhost-209-149-112-193\nhost-209-149-112-192\nhost-209-149-112-191\nhost-209-149-112-189\nhost-209-149-112-188\nhost-209-149-112-187\nhost-209-149-112-186\nhost-209-149-112-185\nhost-209-149-112-184\nhost-209-149-112-183\nhost-209-149-112-182\ns815\nhost-209-149-112-181\nhost-209-149-112-180\nhost-209-149-112-178\nhost-209-149-112-177\nhost-209-149-112-176\nhost-209-149-112-175\ns819\nhost-209-149-112-174\nhost-209-149-112-173\ndscp1\nhost-209-149-112-172\ncva\nhost-209-149-112-171\npdb1\nhost-209-149-112-170\nwww.parents\nhost-209-149-112-168\nyourgames\nacrossthepond\nhost-209-149-112-167\nhost-209-149-112-166\nhost-209-149-112-165\nhost-209-149-112-164\ns804ipmi\nhost-209-149-112-163\nhost-209-149-112-162\nhost-209-149-112-161\nhost-209-149-112-160\nhost-209-149-112-158\nhost-209-149-112-157\nhost-209-149-112-156\nhost-209-149-112-155\nhost-209-149-112-154\nhost-209-149-112-153\nhost-209-149-112-152\nhost-209-149-112-151\nhost-209-149-112-150\nhost-209-149-112-148\nhost-209-149-112-147\nhost-209-149-112-146\nhost-209-149-112-145\nsonorous\nhost-209-149-112-144\nhost-209-149-112-143\nhost-209-149-112-142\nzorin\nhost-209-149-112-141\nksys\nhost-209-149-112-140\nhost-209-149-112-138\nkimono\npontvisio\npstage\nafaf\nhost-209-149-112-137\nhost-209-149-112-136\nhost-209-149-112-135\nhost-209-149-112-134\nikkome\nakamal\nhost-209-149-112-133\nhost-209-149-112-132\nhost-209-149-112-131\nhost-209-149-112-130\nhost-209-149-112-128\nhost-209-149-112-127\nhost-209-149-112-126\nhost-209-149-112-125\nhost-209-149-112-124\nvere\nhost-209-149-112-123\nhost-209-149-112-122\nhost-209-149-112-121\nhost-209-149-112-120\nhost-209-149-112-118\nmprobst\nucats\nhost-209-149-112-117\nhost-209-149-112-116\nhost-209-149-112-115\nmega10\nhost-209-149-112-114\nhost-209-149-112-113\nfujiwara\njest\nhost-209-149-112-112\napex2\nhost-209-149-112-111\nhost-209-149-112-110\nhost-209-149-112-108\nhost-209-149-112-107\nhost-209-149-112-106\nhost-209-149-112-105\nhost-209-149-112-104\nhost-209-149-112-103\nems01\nhost-209-149-112-102\nhost-209-149-112-101\nhost-209-149-112-100\nmancini\nbiomet\nhost-209-149-114-206\nhibo\nhost-209-149-115-112\nhost-209-149-114-205\nhost-209-149-114-204\nweb1930\ncomit\nconceptmart\nhost-209-149-115-110\nhost-209-149-112-209\nghsaedge\nhost-209-149-114-202\nhost-209-149-114-201\nghswebedge\nhost-209-149-114-190\nhost-209-149-115-207\nhost-209-149-115-200\nhost-209-149-115-104\nhost-209-149-115-45\nvocalise\nhost-209-149-115-87\nhost-209-149-115-86\nhost-209-149-115-85\nhost-209-149-115-84\nlocals\ndomingo\nhost-209-149-115-83\nhost-209-149-114-182\nhost-209-149-116-29\nhost-209-149-115-81\nhost-209-149-114-180\nhost-209-149-116-27\nhost-209-149-115-78\nhost-209-149-116-26\nhost-209-149-115-136\nbc03\npharmacist\nhost-209-149-114-177\nhost-209-149-115-29\nhost-209-149-115-76\nhost-209-149-115-75\nhost-209-149-116-23\nhost-209-149-115-62\nhost-209-149-114-58\nhost-209-149-116-30\nhost-209-149-115-73\nhost-209-149-115-222\nhost-209-149-115-72\nhost-209-149-115-202\nhost-209-149-116-20\nhost-209-149-115-71\nbrainbus\nhost-209-149-114-170\nhost-209-149-115-59\nhost-209-149-115-68\nhost-209-149-115-130\nhost-209-149-116-16\nleciel\nhost-209-149-115-215\nhost-209-149-115-208\nepforum\nhost-209-149-115-66\nhost-209-149-116-14\ncaruso\nsniegs\nhost-209-149-115-65\nhost-209-149-114-164\ngamay\nestaticos\nhost-209-149-115-50\ndiario\nweb513\nweb516\nhost-209-149-115-63\nhost-209-149-115-198\nfw0\nwww.games2\nhost-209-149-115-206\nhost-209-149-116-10\nhost-209-149-115-61\nhost-209-149-114-230\nitorapp\nhost-209-149-114-160\nhost-209-149-115-58\nhost-209-149-115-57\nhost-209-149-115-213\nhost-209-149-113-250\nhost-209-149-114-155\nhost-209-149-114-154\nhost-209-149-115-53\nhost-209-149-115-37\nhost-209-149-115-74\nhost-209-149-115-52\nhost-209-149-115-212\ncfusion\nhost-209-149-114-150\nhost-209-149-115-48\nhost-209-149-115-47\nhost-209-149-115-46\nhost-209-149-113-240\nhost-209-149-114-7\nhost-209-149-115-221\nhost-209-149-115-44\nhost-209-149-115-43\nhost-209-149-114-142\nhost-209-149-114-141\nhost-209-149-114-92\nhost-209-149-114-139\nhost-209-149-114-140\nhost-209-149-114-138\nhost-209-149-114-225\nhost-209-149-114-90\ngmmcgrnappisc01.gmmc\nhost-209-149-114-137\nhost-209-149-114-136\nhost-209-149-115-92\nhost-209-149-113-230\nhost-209-149-114-20\nhost-209-149-114-135\nhost-209-149-114-134\nhost-209-149-114-85\nhost-209-149-114-133\nhost-209-149-114-132\nonlinem\nhost-209-149-113-225\nhost-209-149-115-31\nuscsomgapp\nntpc\nhost-209-149-114-130\nhost-209-149-114-50\nhost-209-149-115-28\nhost-209-149-115-197\nhost-209-149-114-80\nhost-209-149-115-27\nhost-209-149-114-78\nhost-209-149-115-26\nhost-209-149-113-220\nhost-209-149-115-79\nhost-209-149-115-25\nhost-209-149-114-76\nhost-209-149-115-24\nhost-209-149-115-23\nhost-209-149-115-196\nsecurelink\nhost-209-149-115-22\nhost-209-149-115-21\nhost-209-149-114-72\nhost-209-149-114-120\nhost-209-149-115-18\nhost-209-149-115-120\nhost-209-149-114-70\nhost-209-149-114-117\nspectron\nhost-209-149-115-205\nhost-209-149-115-220\nhost-209-149-115-16\nhost-209-149-113-209\nradius-1\nhost-209-149-115-15\nhost-209-149-114-66\nhost-209-149-113-208\nhost-209-149-115-14\nhost-209-149-114-65\nchem3\nhost-209-149-113-207\nhost-209-149-115-13\nhost-209-149-113-98\nhost-209-149-113-206\nhost-209-149-116-28\nhost-209-149-115-12\nhost-209-149-115-204\nhost-209-149-116-25\nhost-209-149-116-24\nhost-209-149-113-205\nhost-209-149-116-22\nhost-209-149-115-11\nhost-209-149-114-220\nhost-209-149-116-18\nhost-209-149-116-17\nhost-209-149-113-204\ns1420ipmi\ns1349ipmi\ns825\nhost-209-149-116-15\ns826\ns253ipmi\ns828\ns829\ns831\ns832\ns833\ns834\ns836\ns837\nhost-209-149-114-110\nhost-209-149-116-13\ns838\ns840\ns1114ipmi\ns4225ipmi\ns4145ipmi\ns815b\nhost-209-149-116-12\ns809ipmi\ns534ipmi\ns1370ipmi\ns258ipmi\ns438a\ns1119ipmi\ns813y\ns304a\ns627a\nrender2\ns4151ipmi\ns902\nhost-209-149-116-11\nhost-209-149-113-203\nhost-209-149-114-60\ns903\ns904\ns905\nhost-209-149-113-202\nhost-209-149-114-45\ns906\ns907\nhost-209-149-113-201\nhost-209-149-115-203\ns4251b\ns909\ns912\nhost-209-149-113-190\nhost-209-149-115-42\nhost-209-149-115-67\nhost-209-149-115-192\nhost-209-149-114-52\nhost-209-149-113-183\nhost-209-149-115-88\nhost-209-149-113-99\ns815ipmi\nhost-209-149-113-97\nhost-209-149-113-96\nrutherford\nhost-209-149-113-95\ns914\nhost-209-149-113-94\ns915\nhost-209-149-113-93\nhost-209-149-113-92\nhost-209-149-113-91\nhost-209-149-113-89\nwebgroup\nhost-209-149-113-88\ns916\nhost-209-149-113-87\ns917\nhost-209-149-113-86\ns918\nhost-209-149-113-85\ns264ipmi\nappraisal\nkaur\nhost-209-149-113-180\ns1330ipmi\nhost-209-149-113-83\nfesztivity\nhost-209-149-113-82\nopenbravo\nmanage1\nhost-209-149-113-81\nmlp.fantasy\nhost-209-149-113-79\nhost-209-149-113-78\nportalantiguo\nconsultpermcarga\nviajeroseguro\nmapale\nsiginvias\nhost-209-149-113-77\nhost-209-149-113-76\nhost-209-149-113-75\nhost-209-149-113-74\ns922\nhost-209-149-113-73\nhost-209-149-113-72\nhost-209-149-113-71\ns923\nhost-209-149-113-69\ntest6289\ns924\ns926\nhost-209-149-113-68\nhost-209-149-113-67\ns928\ns929\nhost-209-149-113-66\nimagestorage\ns1401ipmi\ns932\nhost-209-149-113-65\ns933\ns1125ipmi\nhost-209-149-113-64\nhost-209-149-113-63\ns935\ns936\nhost-209-149-113-62\ns937\npartnertest\ns938\ngrade\ns4355a\nref1\ns440a\nhost-209-149-113-61\ns4156ipmi\ns501a\ns614ipmi\ns821ipmi\ns270ipmi\nhost-209-149-113-59\nhost-209-149-113-58\nhost-209-149-113-57\nwww-24\nwww-23\nhost-209-149-113-56\nwww-21\nhost-209-149-113-55\ns4361ipmi\nhost-209-149-113-54\nhost-209-149-113-53\nhost-209-149-113-52\nhost-209-149-113-51\nhost-209-149-113-49\nhost-209-149-113-48\nhost-209-149-113-47\nhost-209-149-113-46\nhost-209-149-113-45\nhost-209-149-113-44\nhost-209-149-113-43\nhost-209-149-113-42\nhost-209-149-113-41\nhost-209-149-113-39\nhost-209-149-113-38\nhost-209-149-113-37\ns1396ipmi\ns1131ipmi\nhost-209-149-113-36\nhost-209-149-113-35\nhost-209-149-113-34\nwww-10\nhost-209-149-113-33\nhost-209-149-113-32\ns4162ipmi\nwww-12\nwww-20\nhost-209-149-113-31\nhost-209-149-113-29\nhost-209-149-113-28\nhost-209-149-113-27\nweb1879\nhost-209-149-113-26\nhost-209-149-113-25\new53680r99pzgc\ns830ipmi\nhost-209-149-113-170\nwww-11\nhost-209-149-113-23\ndocdir\ndlink1\nhost-209-149-113-21\neas2\ndlink2\ndlink3\nhost-209-149-113-19\nhost-209-149-113-18\nhost-209-149-113-17\nhost-209-149-113-16\nhost-209-149-113-15\nhost-209-149-113-14\nhost-209-149-113-13\nhost-209-149-113-12\nhost-209-149-113-11\nhost-209-149-113-10\ndlink4\nhost-209-149-114-32\nhost-209-149-114-40\ns826ipmi\ns1239ipmi\ns1412ipmi\ns1136ipmi\ns629a\ns1406b\ns4167ipmi\ns1465ipmi\ns818a\ns834b\ns1417ipmi\ns4173ipmi\ns4120b\ns837ipmi\ns631a\ns1423ipmi\ns820a\ns4231ipmi\ns710ipmi\ns4178ipmi\ns313a\ns302ipmi\ns612f\ns1428ipmi\ns1310\ns1109ipmi\ns4184ipmi\nhyman\nhost-209-149-114-30\ns821a\nhb2\ns912b\nhost-209-149-114-28\nhost-209-149-113-80\nhost-209-149-114-27\ns307ipmi\ns255b\nhost-209-149-113-160\ns4138ipmi\nhost-209-149-114-26\ns1434ipmi\ns620ipmi\ns904ipmi\nprodigy\ns4217a\ns313ipmi\ns1358a\ns1439ipmi\nhost-209-149-114-25\nhost-209-149-115-254\nhost-209-149-115-253\ns1358b\ns4205ipmi\nbiomedic\ns1019ipmi\nhost-209-149-115-252\ns318ipmi\nhost-209-149-115-251\ns919a\nhost-209-149-115-249\nhost-209-149-114-24\ns634a\ns1445ipmi\ns805ipmi\ns634b\nhost-209-149-115-247\ncisco10-1\nhost-209-149-115-246\ncisco10-2\nhost-209-149-115-245\nhost-209-149-115-244\nhost-209-149-115-243\ns4211ipmi\ns1360a\nhost-209-149-112-249\nhost-209-149-115-241\nhost-209-149-115-239\nhost-209-149-115-238\nhost-209-149-115-237\nhost-209-149-115-236\ntest6298\nhost-209-149-114-22\ns823a\ntest6299\nweb619\nhost-209-149-115-234\nweb623\nweb626\nweb630\nhost-209-149-115-233\nweb3190\nweb636\nhost-209-149-115-232\nweb639\nhost-209-149-115-231\nweb643\nhost-209-149-115-229\nnoether\nhost-209-149-114-21\nhost-209-149-115-227\nhost-209-149-115-226\nhost-209-149-115-225\nhost-209-149-115-224\nhost-209-149-115-223\nhost-209-149-114-19\nhost-209-149-113-90\nhost-209-149-115-219\nhost-209-149-115-218\nhost-209-149-115-217\nhost-209-149-115-216\nhost-209-149-114-18\nhost-209-149-115-214\nhost-209-149-113-70\naslonline\nhost-209-149-115-132\nhost-209-149-115-211\nhost-209-149-115-199\nhost-209-149-114-17\ngmmcgrnappisc01\nhost-209-149-113-150\nhost-209-149-115-195\nenctech\nhost-209-149-115-194\nhost-209-149-115-193\nweb1009\nhost-209-149-114-16\nhost-209-149-115-191\nhost-209-149-115-189\nhost-209-149-115-188\nhost-209-149-115-187\nhost-209-149-115-186\nhost-209-149-114-15\nhost-209-149-115-184\nhost-209-149-115-183\nhost-209-149-115-182\nkamery\nhost-209-149-115-181\nhost-209-149-115-179\nhost-209-149-114-14\nhost-209-149-115-177\nweb1013\nhost-209-149-115-176\nhost-209-149-115-175\nhost-209-149-115-174\nhost-209-149-115-173\nlending\nhost-209-149-114-13\nhost-209-149-115-171\nmail.dev2\nhost-209-149-115-169\ns4224b\ns1359b\nhost-209-149-114-203\ns530ipmi\ns324ipmi\ns739a\nhost-209-149-115-167\nhost-209-149-115-166\ns1451ipmi\ns4216ipmi\ns4102a\ns605ipmi\nhost-209-149-114-12\nhost-209-149-115-164\nhost-209-149-115-163\nhost-209-149-115-162\nhost-209-149-115-161\nhost-209-149-115-159\nhost-209-149-114-11\nvideocms\nhost-209-149-115-157\nhost-209-149-115-156\ns329ipmi\nhost-209-149-115-155\nhost-209-149-115-154\nhost-209-149-115-153\nhost-209-149-114-10\nhost-209-149-115-151\nhost-209-149-115-149\nhost-209-149-115-148\nhost-209-149-115-147\nhost-209-149-115-146\nhost-209-149-115-145\nhost-209-149-115-144\nhost-209-149-113-60\nhost-209-149-115-142\nhost-209-149-115-141\ns1456ipmi\nhost-209-149-115-10\nhost-209-149-115-138\nhost-209-149-115-137\nhost-209-149-113-140\ns509\nhost-209-149-115-135\nhost-209-149-115-134\nhost-209-149-115-133\nhost-209-149-114-208\nhost-209-149-115-131\ns101390ipmi\ns715ipmi\nhost-209-149-115-129\nhost-209-149-115-128\nhidaka\nhost-209-149-115-127\nvmhost04\nlogin.beta\nhost-209-149-115-126\nhost-209-149-115-125\nironport04\nironport03\nhost-209-149-115-124\nhost-209-149-115-123\nhost-209-149-115-122\nhost-209-149-115-121\nhost-209-149-115-119\nhost-209-149-115-118\nhost-209-149-115-117\nlogin.test\ns4222ipmi\nvmax\nhost-209-149-115-116\nweb1029\nhost-209-149-115-115\nweb1949\nhost-209-149-115-114\nhost-209-149-115-113\nhost-209-149-112-230\nhost-209-149-115-111\nhost-209-149-115-109\nhs01\nhost-209-149-115-108\ncisco11-1\nuter\nhost-209-149-115-107\nhost-209-149-115-106\nhost-209-149-115-105\nsecuritybackup\nhost-209-149-115-103\nhost-209-149-115-102\ncoppola\nhost-209-149-115-101\nhost-209-149-115-100\ncisco11-2\nhost-209-149-114-207\nhost-209-149-115-39\nhost-209-149-113-50\ns611ipmi\nhost-209-149-114-210\ns335ipmi\ns1462ipmi\ntorn-ams2\nhacienda\nhost-209-149-113-129\ncp05qa005\ns4260b\nhost-209-149-112-3\ns4186ipmi\nhost-209-149-115-56\nhost-209-149-112-1\nstaging.intranet\nhost-209-149-113-126\ns1362a\ns1362b\nhost-209-149-112-220\nhost-209-149-115-69\nhost-209-149-113-84\nhost-209-149-115-55\ns616ipmi\nhost-209-149-113-40\nhost-209-149-113-120\nhost-209-149-112-90\nhost-209-149-115-54\ns341ipmi\nhost-209-149-112-199\ns714ipmi\nweb3199\ns1467ipmi\nweb1039\nwww.dvds\ns913a\ns1202ipmi\ns4330ipmi\ns823x\naccounts1\ns4233ipmi\ns4146ipmi\ns1320\ns-109\ns637b\ncisco12-1\ns101390b\ncisco12-3\ns101391a\ns101391b\ns1473ipmi\ns1207ipmi\ns101392b\nhost-209-149-112-208\nweb700\nhost-209-149-112-207\ns4238ipmi\ns101393a\ns101393b\nweb691\nweb1046\ns1219b\ns903ipmi\nweb692\ns627ipmi\ns310ipmi\nhost-209-149-112-206\ns1478ipmi\ns1213ipmi\nweb703\nsunet\ns827a\nfotos1\nweb694\ns4244ipmi\ns535ipmi\ns633ipmi\ncisco13-1\nhost-209-149-112-195\nhost-209-149-113-30\nweb1050\nweb695\ncisco13-2\ncisco13-3\ncisco13-4\ns810ipmi\ns1484ipmi\ns1218ipmi\ns4249ipmi\ns639b\ns914ipmi\ns4106b\n3333\ns638ipmi\ns926ipmi\ncp05qa008\nweb697\ns1224ipmi\ncobacoba\ns220ipmi\nweb698\nweb709\ncp05qa010\nweb713\nweb1059\nmariachi\ns4255ipmi\nweb720\nns1.barrie\nweb721\ns103ipmi\nweb726\nweb1073\nweb729\nmathlab3\nweb1086\ns641b\nweb1088\nweb1089\nweb1101\nsva\nweb1102\nweb1103\ns50c\ns1229ipmi\ns4359b\nweb1104\nweb124\nweb1105\nweb1096\nweb1107\nbfa\njamsession\ns829a\nweb1108\ns4261ipmi\ns830b\nweb164\ns264b\nweb174\ns4140ipmi\ns925ipmi\ns1235ipmi\ns4266ipmi\ns129ipmi\nweb200\ns4108a\ns910b\ns4256ipmi\nhost-209-149-112-204\nweb221\nweb222\nweb1119\nweb228\nweb1123\nweb1939\nhost-209-149-113-110\nhost-209-149-112-79\ns931ipmi\ns114ipmi\nhost-209-149-112-203\nweb1129\ntest6339\ns1241ipmi\ns4272ipmi\ns1001b\ns936ipmi\nweb325\nweb327\nhost-209-149-116-9\nweb331\nweb332\nhost-209-149-116-8\nweb335\nweb336\nweb337\nweb341\nweb342\nweb343\nweb344\nweb345\nweb347\nweb348\nmunin2\nweb350\nweb351\nweb352\nweb1139\nweb354\nweb355\nweb357\nweb358\nweb361\nweb362\nweb364\nweb365\nweb367\nweb368\nweb370\nweb371\nweb372\nweb374\nweb375\nweb376\nweb377\nweb381\nweb382\nweb383\nweb384\nweb385\nweb387\nweb388\nweb400\nweb401\nweb402\nweb404\nweb405\nweb407\ns803b\nweb411\nweb412\nweb413\nweb414\nweb415\nweb417\nweb418\nweb420\nweb421\nweb422\nweb1149\nswta\nweb424\nweb425\nweb426\nweb427\nweb428\nweb432\nweb433\nweb434\nweb435\ns1330\nweb437\nweb438\nweb452\nweb453\nweb454\nweb455\nweb457\nweb458\nweb460\nweb461\nweb462\nweb463\nweb464\nweb465\nweb466\nweb467\nweb468\nhost-209-149-115-82\nweb471\nweb472\nweb474\ns120ipmi\nweb477\nweb478\nweb480\nweb481\nweb482\nweb484\nweb485\nweb486\nweb487\nweb501\nweb502\nweb503\nweb504\nweb505\nweb507\nweb508\nweb510\nweb511\nweb512\ngrace2\nweb514\nweb515\nweb517\nweb518\nweb521\nweb522\nweb523\ns4110b\ns832a\nweb527\nweb528\nweb530\nweb531\nweb532\nweb535\nweb536\nomfg\nweb537\nweb538\nweb541\nweb542\nweb543\ns4350ipmi\nweb544\nweb545\nweb547\ns266b\nweb548\nhost-209-149-112-202\nweb607\nweb608\nweb611\nweb612\nhost-209-149-116-5\nweb613\nweb614\nweb615\nweb616\nweb617\nweb618\nweb620\nweb621\narchitekt\nnew-test\nweb622\nweb624\nhost-209-149-116-4\nweb625\nweb627\nweb628\nweb631\nweb632\nweb633\nweb634\ns942ipmi\nweb635\nweb637\nweb638\nweb640\nweb641\nweb642\nweb644\nweb645\nweb646\nweb647\nweb648\nweb651\nweb652\nweb653\nweb654\nweb655\nweb657\nweb658\nweb661\nweb662\nhost-209-149-116-2\nweb664\nweb665\nweb666\nweb667\nweb671\nweb672\nweb673\nweb674\nweb677\nweb678\nweb680\nweb681\nweb682\npweb\nweb684\nweb685\ncloudy\nweb686\nweb687\nweb688\nweb701\nweb702\nweb704\nweb705\nweb707\nweb708\nweb710\nweb711\nweb712\nweb714\nhost-209-149-115-201\nweb715\nweb716\nweb718\ns1002a\nweb722\nweb723\nweb724\nweb725\nweb727\nweb728\nweb730\nweb326\ns401ipmi\nweb1219\nweb1700\ns204d\nweb330\nweb1226\ns4351ipmi\ncyjy\nzzxx\ns736ipmi\nhost-209-149-112-201\nhost-209-149-112-200\nhost-209-149-113-24\nhost-209-149-115-38\nsdesk\nsko\nldi\nmyhp\nhost-209-149-113-22\nccaa\nvidistar\ns1370a\nghsavedge\ns1369b\ns406ipmi\ngalactic\nhost-209-149-113-20\ns131ipmi\ns4247ipmi\ns1003b\ns1392ipmi\ns834a\nhost-209-149-112-70\nnaumen\ns4301a\ns1409a\ns4301b\ns726a\ns-201a\ns602ipmi\nwww.japanese\ns417ipmi\nwww.french\ns613\nhost-209-149-115-70\ngiresun\npinot\npelvoux\nhost-209-149-115-49\nvercors\nfaucon\nhost-209-149-112-179\nhost-209-149-114-200\nhost-209-149-115-9\nr03\ns142ipmi\ns186ipmi\nhost-209-149-115-8\ns102394ipmi\npaquerette\ns1409b\ns1003ipmi\nfred1\npanthere\ns646b\nensigate\ns4309ipmi\ns238b\nhost-209-149-115-7\nmalte\ns832ipmi\ns1372a\nvanoise\ns4361b\nsambuy\ngodot\ns1372b\ns423ipmi\nhakka\ncocktail\nhanuman\ns4105a\ns622\nhost-209-149-115-6\ns1008ipmi\nhost-209-149-115-5\nhost-209-149-115-4\nhost-209-149-115-3\nhost-209-149-115-2\nmoring\ntopnotch\nhost-209-149-115-1\ns4315ipmi\ns624\nclass8\ngroseille\nhost-209-149-115-0\ncola\ns704ipmi\nbeaumont\nr-viallet1\nv125\nnefer\ns428ipmi\ns430ipmi\ns836a\ns628\ns822ipmi\na19\na17\ns1014ipmi\na15\njarl\ns630\ns4321ipmi\nhost-209-149-112-59\nhost-209-149-115-98\na07\nsphynx1\na06\nbalboa\ngazon\na05\nmics\na04\na03\ns709ipmi\nhost-209-149-112-169\ntraverse\ndarhan\nfangio\nhost-209-149-115-140\nbrenner\nhost-209-149-112-55\nneb\nhost-209-149-115-91\nmjollnir\nhost-209-149-116-6\nrude\nhost-209-149-114-255\nmtp1\namorgos\nhost-209-149-114-254\nhost-209-149-114-253\nandaman\nhost-209-149-114-252\nalbator\nhost-209-149-114-23\ns434ipmi\nkayak\ngmmcnfuseisc01.gmmc\npatator\nhost-209-149-114-248\nhost-209-149-112-49\nhost-209-149-114-246\nhost-209-149-114-245\nhost-209-149-114-244\nwww.stable\nafex\ngetitnow\nwww.getitnow\nhost-209-149-114-243\nwww.afex\nhost-209-149-114-242\nhost-209-149-114-241\nhost-209-149-114-239\nhost-209-149-114-238\ns1340\nhost-209-149-114-237\nmacs\ns1020ipmi\ns4326ipmi\nxtender\ns915b\nhost-209-149-114-236\nhost-209-149-114-235\nhost-209-149-114-2\ns837b\nhost-209-149-114-1\nhost-209-149-114-0\nhost-209-149-114-231\nhost-209-149-114-229\nwww.cx\nhost-209-149-114-228\nhost-209-149-114-227\nhost-209-149-114-226\nwww.kp\nhost-209-149-112-159\nhost-209-149-114-224\nhost-209-149-114-223\nwww.tn\nhost-209-149-114-222\nwww.li\ns639\nwww.oscommerce\nhost-209-149-114-221\nmail.trash\nhost-209-149-114-219\nasano\nhost-209-149-114-218\nhost-209-149-114-217\nmidorikodomo\nhost-209-149-114-216\nhost-209-149-114-215\nhost-209-149-114-214\nhost-209-149-114-213\ns439ipmi\nhost-209-149-114-212\nhost-209-149-114-211\nhost-209-149-114-199\ns1301ipmi\nshinoda\ns1025ipmi\nfunayama\nhost-209-149-114-198\nhost-209-149-114-197\nokuda\nhost-209-149-114-196\nhost-209-149-114-195\nbaldur\nhost-209-149-114-194\ns732ipmi\nhost-209-149-114-193\nhost-209-149-114-192\nhost-209-149-114-191\nhost-209-149-114-189\nwww.podpora\nshirasaki\ndoujin\nhost-209-149-114-188\nhost-209-149-114-187\ns4332ipmi\nkufa\nganka\nhost-209-149-114-186\nsagawa\nhost-209-149-114-185\nhost-209-149-114-184\nhost-209-149-114-183\ngmmccsgisc01.gmmc\nhost-209-149-114-181\nhost-209-149-114-179\nhost-209-149-114-178\nmiyoshi\nsasakinaika\nsousei\ns721ipmi\ns1407ipmi\nhost-209-149-112-39\nmotomura\nmaruyama\nlibstats\nhananoki\nhost-209-149-114-176\nhost-209-149-114-175\ntakizawa\ns101390\nkawada\ns101391\ns101392\nshibasaki\nhost-209-149-114-174\ns101393\ntsubakigaoka\nshigeta\nhost-209-149-114-173\nhost-209-149-114-172\nmysql3.sgmanaged.com\nturukawa\ns1306ipmi\nhost-209-149-114-171\ns1001a\nnishikawa\njuku\nhost-209-149-114-169\nhost-209-149-114-168\nsuzumura\n1206\nhost-209-149-114-167\nmizonokuchi\ns1031ipmi\ns4214a\nhost-209-149-114-166\ns1002b\nhost-209-149-114-165\nhost-209-149-114-163\ns1343\nhost-209-149-114-162\nhost-209-149-114-161\ns1003a\ns1301a\nhost-209-149-114-159\ns175ipmi\ns1004a\njpo1\nhost-209-149-114-158\nhost-209-149-114-157\nhost-209-149-114-156\nhost-209-149-112-149\ns1004b\nhost-209-149-113-210\nhost-209-149-114-153\nhost-209-149-114-152\ns917ipmi\nlogon2\nhost-209-149-114-151\nhost-209-149-114-149\nhost-209-149-114-148\ns1312ipmi\nwww.dominio\nhost-209-149-114-147\nmarcon\ns1005a\nhost-209-149-114-146\nwww.tolyatti\ns1005b\nnizhniy-tagil\nhost-209-149-114-145\ns1036ipmi\nwww.photoshop\ns310a\ns4343ipmi\nhost-209-149-114-144\nhost-209-149-114-143\nhost-209-149-113-9\ns840a\nhost-209-149-113-8\nhost-209-149-113-7\n1346\ns1006a\ns505b\ns1007a\ns1003\ns1005\nhost-209-149-113-6\nhost-209-149-113-5\ns1006\nhost-209-149-113-4\nhost-209-149-113-3\ns1007\ninns\ns1008a\nsipeg\nhost-209-149-113-2\nwww.rostov-na-donu\nhost-209-149-113-1\nhd2\nhost-209-149-113-0\ncyw\ns1009b\nhost-209-149-114-131\nhost-209-149-114-129\nhost-209-149-114-128\nncs2\nhost-209-149-114-127\nhost-209-149-114-126\ns1021\nscreensavers\nob2\nhost-209-149-114-125\nhost-209-149-114-124\nhost-209-149-114-123\nmonkeybutt\nmedia9\ncvm1\nhost-209-149-114-122\nhost-209-149-114-121\nhost-209-149-114-119\nhost-209-149-114-118\nhost-209-149-112-30\nhost-209-149-114-116\nhost-209-149-114-115\nhost-209-149-114-114\nhotornot\nhost-209-149-114-113\nrss8\nautoconfig.oldsite\nhost-209-149-114-112\nhost-209-149-114-111\nhost-209-149-114-109\nhost-209-149-114-108\nhost-209-149-114-107\nhost-209-149-114-106\nhost-209-149-114-105\ndashboard2\nautodiscover.oldsite\nhost-209-149-114-104\nhost-209-149-114-103\nhost-209-149-114-102\nhost-209-149-114-101\nhost-209-149-114-100\nrappelz\nhost-209-149-112-139\ngatewayproxy\nhost-209-149-115-41\nlyncextweb\ncmaster\nghslink\nhost-209-149-112-20\nnewspapers\nhost-209-149-112-9\nhost-209-149-112-8\ncircles\ntoe\nimage03\nimage02\nhost-209-149-112-7\nhost-209-149-112-6\nvps035\nhost-209-149-112-5\nvps037\nhost-209-149-112-4\nvps041\nhost-209-149-112-99\nhost-209-149-112-98\nhost-209-149-112-97\nhost-209-149-112-96\nhost-209-149-112-95\nhost-209-149-112-94\nranjeet\nhost-209-149-112-93\nip25\nip24\nip22\nip21\nmyespace\nip16\nfeed3\nhost-209-149-112-92\nfif\nhost-209-149-112-91\nrouterbackup\nhost-209-149-112-89\nhost-209-149-112-88\nwww.tutos\nvps121\nvps123\ngseweryn\nhost-209-149-112-87\nhost-209-149-112-86\ncaphus\nhost-209-149-112-85\nhost-209-149-112-84\ncountyline\nhost-209-149-112-83\nhost-209-149-112-82\nfilter01\nhost-209-149-112-81\nhost-209-149-112-80\nsb01\nwap01\nhost-209-149-112-78\nhost-209-149-112-77\nhost-209-149-112-76\nhost-209-149-112-75\nvps040\nhost-209-149-112-74\nhost-209-149-112-73\nhost-209-149-112-72\nhost-209-149-112-71\nhost-209-149-112-69\nhost-209-149-112-68\nrouterwifi\nhost-209-149-112-67\nfns1\nvps122\nlecerta\nhost-209-149-112-66\nhost-209-149-112-65\nhost-209-149-112-64\nfrom-atm\nfreitag\ncauta\nhost-209-149-112-63\nhost-209-149-112-62\npictor\nspex\nhost-209-149-112-61\nnortheast\nwmb\nfrom-gts\nhp3050\npreviews\nhost-209-149-112-60\nhost-209-149-112-58\nslserver\nhost-209-149-112-57\nhost-209-149-112-56\nhost-209-149-112-54\nwc4\nhost-209-149-112-53\nwww.siberia\ncorrus\nfns2\nwww.arkhangelsk\nwww.entekhabat\nprestasklep\nhp1522\nkoenig\nburg\nhost-209-149-112-52\ntjumen\nentekhabat\nhost-209-149-112-51\ncentralka\nwww.odesa\nkolpino\ntweglinska\nwww.stuttgart\nrejestracja.scs\nsagita\nwww.finlandia\nemon\nwww.estonia\natm-ksk\nhost-209-149-112-50\nberdyansk\ndulo\ndgma\neconomicas\nwww.phystech\nsklep_test\nsinxron\nteresardp\nhost-209-149-112-48\nwww.latvia\nnlpro\nkishinev\nwww.nightclub\nwirelesscontroller\nhost-209-149-112-47\nkharkiv\nhost-209-149-112-46\nternopol\nrdp3\nak-to-ksk\nwww.hse\nwww.dnepr\nleopoldina\nwww.reflex\nhost-209-149-112-45\nvyatka\nhost-209-149-112-44\nksk-to-ak\nfinlandia\nmarica\nteresardp2\nhost-209-149-112-43\nwww.msu\nbooth\nwww.viborg\nwww.kirovograd\ncampos\nalbus\nviborg\nwww.derbent\nquested\nwww.volga\nomega7\nautoconfig.stamps\nwww.ehr\nsaintpetersburg\nhost-209-149-112-42\naviv\nwebdisk.stamps\nmendes\nvinnica\ncev\nhost-209-149-112-41\nwww.uzbekistan\nhuodong\ncej\nwww.tuts\nhost-209-149-112-40\nphystech\nautodiscover.stamps\nautoconfig.host2\nautodiscover.host2\nwww.prague\nmgu\nwww.ukraine\nwww.new-york\ndro\nwww.umnik\nhost-209-149-112-38\nhost-209-149-112-37\nhost-209-149-112-36\nhermod\nhost-209-149-112-35\nwww.vyborg\nwww.petersburg\nhost-209-149-112-34\numnik\ncoi1\nrovno\nhost-209-149-112-33\n123a\nhost-209-149-112-32\nhost-209-149-112-31\nhost-209-149-112-29\nwww.luk\nhost-209-149-112-28\nenformatik\nh3c\nwww.albus\nhost-209-149-112-27\nhost-209-149-112-26\nhost30\nhost-209-149-112-25\nhost-209-149-112-24\nvalentines\nsocial1\ncryptonector\ndata7\nhost-209-149-112-23\nhost-209-149-112-22\nunql\ndarcy\nhost-209-149-112-21\nserv15\nmichelson\nhost-209-149-112-19\nhost-209-149-112-18\nhost-209-149-112-17\nhost-209-149-112-16\nsb02\nhost-209-149-112-15\nhost-209-149-112-14\nhost-209-149-112-13\nhost-209-149-112-12\nhost-209-149-112-11\naxia\nhost-209-149-112-10\nhost-209-149-115-51\nhost-209-149-115-36\nsolusvm1\nssl-test\n64studio\nhost-209-149-115-250\nhost-209-149-115-248\nhost-209-149-115-80\ncl04\ncl03\ncustomers2\nhost-209-149-112-109\nhost-209-149-115-64\nhost-209-149-115-35\nghscontent\nhost-209-149-115-242\nofficetracker\nhost-209-149-115-240\nhost-209-149-115-30\nhost-209-149-115-34\ntherejects\nwww.theartofwar\ndfserver\nhost-209-149-116-1\nsymfony\nhost-209-149-113-200\nhost-209-149-112-129\ndspc\nplayready\nhost-209-149-115-235\noldserver\nghsedge\nhost-209-149-115-33\nresolver3\nunicampus\nhost-209-149-115-19\nhost-209-149-115-230\nhomeaccess\npatrons\nhost-209-149-115-32\nhost-209-149-112-2\nwww.ravens\nlostsouls\ncorail\ndiable\nwww.almuslim\nhost-209-149-115-210\nhost-209-149-115-95\npcencryption\nbego\ncp10\nwww.angelsofdeath\narago\nwww.sadia\nhost-209-149-113-255\nwww.sadik\nnbd\nhost-209-149-113-254\nhost-209-149-113-253\nwww.salah\noddfellow\nhost-209-149-113-252\namgm\nhost-209-149-113-251\nhost-209-149-113-249\nhost-209-149-113-248\nhost-209-149-113-247\nhost-209-149-113-246\nwww.iwonko\nhost-209-149-113-245\nhost-209-149-113-244\nhost-209-149-113-243\nhost-209-149-113-242\nhost-209-149-113-241\nhost-209-149-113-239\njazan\nwww.sandanski\ntheelites\nsafeguard\nwww.ayman\nait3\ndolph\ntestserver5\nwww.realdeal\nhousekeeper\nravens\nwww.forgottencoast\nbusinesstechnology\nwww.theforum\nhost-209-149-113-238\nofferte\nhost-209-149-113-237\nhost-209-149-113-236\npresentatie\nhost-209-149-113-235\nwww.therejects\nhost-209-149-113-234\nwww.tur\nvcsmtp\nwww.naughty\nhost-209-149-113-233\npostyourstuff\nwww.attorneybrisbane\niwonko\nhashembaddad\nwww.salvation\nhost-209-149-113-232\nxbox36o\nwww.maarouf\nwww.jedimasters\nhost-209-149-113-231\nkonferens\nnsider\nattorneybrisbane\nwww.lostandfound\nwww.toontown\nwww.faisal1\nhost-209-149-113-229\nhost-209-149-113-228\nwww.lucky13\nivpn\nwww.elmagic\nnexusforums\nebrahim\nwww.christianity\nabc4\nwww.izaphod\nbraca\nwowguild\npoinx\ncas02\nhost-209-149-113-227\nhost-209-149-113-226\nutility5\ngmmcctxwebisc05.gmmc\nhost-209-149-113-224\nhost-209-149-113-223\njxxy\nbg2\nhost-209-149-113-222\nfetch\nhost-209-149-113-221\nwww.inc\nmypanel\nhost-209-149-113-219\nhost-209-149-113-218\nocca\nhost-209-149-113-217\nnortech\nhost-209-149-113-216\nenviro\nkna\nlietuva\ntools2\ntinar\nobits\nwww.ligamistrzow\nligamistrzow\nt001\nvn1\nbossa\nneotelecom\ncompletel\nhost-209-149-113-215\ndrywall\nwebdisk.casino\nradis\nr10\nhost-209-149-113-214\ngeisha\nhost-209-149-113-213\nradius02\ndhcp05\nhost-209-149-113-212\nautoconfig.resources\nautodiscover.resources\nhost-209-149-113-211\nwebdisk.resources\ntfl\nbluefish\nhost-209-149-113-199\nhost-209-149-113-198\nultima2\nhanley\nsasha0\nwheelers\nhost-209-149-113-197\nvenik\nlocalhost.nano\nizida\nhost-209-149-113-196\nhost-209-149-113-195\npolimer\nautoconfig.thailand\nautodiscover.thailand\nhost-209-149-113-194\nelbrus\nwww.commerce\nhost-209-149-113-193\nhost-209-149-113-192\nhost-209-149-113-191\nhost-209-149-113-189\nhost-209-149-113-188\nhost-209-149-113-187\nhost-209-149-113-186\nhost-209-149-113-185\nhost-209-149-113-184\nwebdisk.islam\nautoconfig.islam\ngmmcctxcsgisc01.gmmc\nhost-209-149-113-182\nhost-209-149-113-181\nautodiscover.islam\nbaze\nhost-209-149-113-179\nmailgva\nautodiscover.board\nwende\nautoconfig.board\nwishes\ndarkblue\nwhistleblower\nhost-209-149-113-178\ndui\nxcache\nhost-209-149-113-177\nhost-209-149-113-176\nhost-209-149-113-175\nhost-209-149-113-174\nwww.acp\nhost-209-149-113-173\nhost-209-149-113-172\nhost-209-149-113-171\nhost-209-149-113-169\nhost-209-149-113-168\nhost-209-149-113-167\nhost-209-149-113-166\nhost-209-149-113-165\nhost-209-149-113-164\nhost-209-149-113-163\nhost-209-149-113-162\nhost-209-149-113-161\nhost-209-149-113-159\nsoha\nhost-209-149-113-158\nhost-209-149-113-157\nhost-209-149-113-156\nhost-209-149-113-155\nmysqldumper\nvaluation\nclipart\nwww.webhost\ndudley\nhost-209-149-113-154\ntristar\nhost-209-149-113-153\nr1softbackup1\nwgy\nflv3\npth\nrpsp\nxle\nlingqcentral-de\nmonitorizacion\nowatest\nhost-209-149-113-152\nlingqcentral-cs\nlingqcentral-ru\nlingqcentral-en\nhost-209-149-113-151\nlingqcentral-th\nwww.delivery.platform\nlingqcentral-es\nhost-209-149-113-149\nked\nlingqcentral-sv\nblogsetup\nlingqcentral-tr\ngoogle-translate\nhost-209-149-113-148\nlingqcentral-fr\nhost-209-149-113-147\nmx15\nmx16\nlingqcentral-zh-tw\nlingqcentral-ja\nhost-209-149-113-146\nhost-209-149-113-145\nlingqcentral-hu\nstaging.community\nlingqcentral-zh-cn\nchogori\nlingqcentral-it\nhost-209-149-113-144\nlingqcentral-ko\nlingqcentral-lt\nhost-209-149-113-143\nlingqcentral-lv\nlingqcentral-nl\nlingqcentral-beta\nlingqcentral-ar\nlingqcentral-pl\nhost-209-149-113-142\nwww.apitest\ntennant\nshopdev\ndonald6\ndonald5\nhost-209-149-113-141\nsql03\nlingqcentral-pt\nformazione\nnarzedzia\nhost-209-149-113-139\naberfoyle\ndifferenttan\nmidy1dev\nchatterbirds-qa\nfullrefund\neltelby\nseriouscallersonly\ngaghalfrunt\noffler\nofetta\ncendrawasih\nhost-209-149-113-138\nfenchurch\nhotblackdesiato\npolyhymnia\nbobjobdev\nithoughthewaswithyou\nhost-209-149-113-137\ngoyourownway\nkidzglobal\nasnaf\ndoji\nethicsgradient\nhowandaland\nkarluvmost\nblartversenwald\nipl\nkirsten-host\nhost-209-149-113-136\nperrycox\nshahrdari\nbasicspi\nsomuchforsubtlety\nprazskyhrad\nnotwantedonvoyage\ncargocult\narthurdent\nvstore\ngallagher\nvps.unilux\nhost-209-149-113-135\nkirsten2\nuninvitedguest\njaundicedoutlook\nredalien\nelliott\noidong\ngiediprime\nforeigner\ncallioper\nmendeddrum\niuliar\ndeathsdomain\nstemcell\ndjelibeybi\neccentricagallumbits\ntradesurplus\nwuziprack\ndedicatedservers\nbrentcrude\nsb-us1\ndolcefarniente\niqgeek\nspacemonster\nbigsexybeast\nhost-209-149-113-134\ndpcs01\nhummakavula\nsb-at1\nsb-at2\nhelenar\nbackups.unilux\ndresseduptoparty\ndavid2\nchatterbirds-dev\nlimitingfactor\nmedialibrary\nnervousenergyr\nbacula-s1\nbabelfish\ngalaxyfx-vps\nhildesheim\nhost-209-149-113-133\ndomitia\nngs01\nstaremesto\nepunk\nporcia\nmountlofty\nlofty\nserviceforhosting\njustpassingthrough\ntiamatr\ndns-br\nwww.acm\nmiriel\nwww.redes\nmagnumderby\nworralorrasurfa\nedgeofseventeen\nlth-ns2\nprostetnicvogonjeltz\nhost-209-149-113-132\nyounaughtymonsters\nhost-209-149-113-131\nhost-209-149-113-130\npalyang\nlucillar\nsb-us2\nnineveh\narresteddevelopment\nsalusasecundus\nw31fmt2\nsocalpai\nelliotreid\nfreeserver\nwww.naturaleza\nciat\nlth-ns1\ndishoftheday\nwunderwuzis\nhumerdev\nbobkelso\nonlyslightlybent\nlivefeed\nmelian\ntriadian\nmidy2dev\nveetvoojagig\ncant\nkarluvmostr\ndormouse\ncyrener\nnervousenergy\nmelqart\ntwoflower\nclearairturbulence\nfateamenabletochange\ntheshaymen\ncarthage\nyoodenvranx\nangelface\nhalletcove\nhost-209-149-113-128\nfeanor\nignacio\nunfortunateconflictofevidence\nnofixedabode\nenviroinfo\npompeia\nwww2.epunk\nnetworkclean\ncoventgarden\ncg-gw-prg1\norienta\nsecurecommercesite\nmsx001\nsnapshot1\nzarniwoopvanharl\nhost-209-149-113-127\nverylittlegravitasindeed\nyoullthankmelater\ncoffeenostra\nfortytwo\nghsms\novz-s1\nhost-209-149-113-125\nnevertalktostrangers\nmdh\ncongenitaloptimist\nwelliwasintheneighbourhood\nporkbellies\nfinetillyoucamealong\ncosifantutte\naphroditer\ncarthagor\njustreadtheinstructions\nwunziprack\nllamedos\nzaphodbeeblebrox\nhost-209-149-113-124\nbidev\nlobsangludd\nhanovere\nirregularapocalypse\nmalastrana\nhost-209-149-113-123\nchatterbirds\nbidpunk-db\nnomoremrniceguy\nlovina\nsubtleshiftinemphasis\nkrtek\nwaterstones\nabrissbirne\nhost-209-149-113-122\ntacticalgrace\nspinningtop\nattitudeadjuster\nwww.ciat\nhurlingfrootmig\nemupoint\npico1\nhost-209-149-113-121\nhighurtenflurst\nbiddingbedangdev\ncg-gw-fmt2\nankhmorpork\nsecureserver\ngrowthr\nprostheticconscience\ndonttrythisathome\nblandford\nproblemchild\nv-cust-vps168\npartialphoticboundary\nldexw3h\ntrintagula\nnowwetryitmyway\nfoocity\nwowbagger\nfrankexchangeofviews\nlallafa\nrhiannonr\nprazskejaro\ncygnusx1\nstrangerheremyself\narmchairtraveller\ntheshades\nashipwithaview\nns1-praha\nkashnkari\nhost-209-149-113-119\nofcourseistillloveyou\nbennybunny\nvirtualprivateserver\nhanoverer\nreospeedwagon\nhost-209-149-113-118\nutro\nwww.policy\ncultural\ndivisions\nhelios2\nhost-209-149-113-117\nfabro\noastest\nhost-209-149-113-116\ndhcp0\nhost-209-149-113-115\nsslvpn1\nwebdisk.malaysia\nsqtest\nhost-209-149-113-114\nhost-209-149-113-113\nautoconfig.malaysia\nams1\nams3\nclamp\nautodiscover.malaysia\npol1\nwww.inst\nhost-209-149-113-112\nhost-209-149-113-111\nwww.tutoriales\nhost-209-149-113-109\nhost-209-149-113-108\nhopkins\nwww.real-estate\ncitech\nwebdisk.scratchcard\nwebdisk.flash\nautoconfig.journal\nwww.hopkins\nfinancial-planning\nhedwig\nautodiscover.journal\nwww.periodismo\nmailmems\nabsensi\nhost-209-149-113-107\nwww.trials\nhost-209-149-113-106\nawr\nhost-209-149-113-105\nhost-209-149-113-104\nhost-209-149-113-103\ndemoblog\ncui\nhost-209-149-113-102\nhost-209-149-113-101\npanel4\nrbk\nhost-209-149-113-100\nhost-209-149-115-190\nonu\nbolsatrabajo\nhost-209-149-115-94\npresnya\nhost-209-149-115-185\ncloudm\nhost-209-149-115-40\nhost-209-149-115-180\nrodica\nhost-209-149-115-178\nyna\nysd\nsaladeprensa\nhost-209-149-115-99\nopinasantafe\ncoreo\ncoordsantafe\njalalpa\nterritorialsanangel\ntolteca\nplanparcialsantafe\nimg.php\nhost-209-149-115-139\nhost-209-149-112-119\nhost-209-149-115-20\nhost-209-149-115-172\nsomgftp\nkoran\nhost-209-149-115-170\nhost-209-149-115-168\nip220-116\nip220-193\ncs10\nip220-194\nip204-9\nip204-7\ncs14\ncs21\nhost-209-149-115-97\ncs29\nhost-209-149-115-17\nmyvps\ncs9\nip204-5\nip204-4\ninscripciones\nintercambios\nsmtp.zimbra\nautoconfig.toko\nd1-7\nd1-6\nip204-99\npoaui\nhipernet\nwebdisk.imobiliaria\nimobiliaria\nwebdisk.projetos\nautodiscover.toko\ninternal202\nvoyance\nnaturaleza\nip204-98\ninterspire\nip204-97\nip204-96\nip204-95\nip204-94\nsendit\nwww.dent\nip204-93\nip204-92\ncommune\nip204-89\nip204-88\nkerrigan\nip204-87\nip204-86\nip204-85\nip204-84\nip204-83\nip204-82\nip204-81\nip204-79\nip204-78\nip204-77\nip204-76\nip204-75\nip204-74\nip204-73\ntw.member\ntw.portal\ntw.class\nip204-72\nip204-71\nhost36\nwww.nutricion\nlekarstva\nip204-68\ntulum\nns1.x\nip204-67\nip204-66\nip204-65\nstuweb\nip204-64\ncard1\nkxx\nip204-63\nip204-62\njosie\nns3.x\nip204-61\nip204-59\nparkes\ngebuilding.hol\nupsmon\nleach\nns5.x\nns6.x\nip204-58\nalex7\nip204-57\nautoconfig.art\nkhp\nip204-56\ncuthbert\nip204-55\ndecs\nautodiscover.art\nip204-54\nip204-53\nip204-52\nprintserver2\nip204-51\nip204-49\nlinux03\nip204-48\nventuri\nip204-47\nip204-46\ngiftcards\nerecord\ndeianira\nip204-45\nip204-44\nssotest3\nip204-41\nip204-39\nip204-38\ncornell\nhelicon\nkeylogger\nip204-37\nip204-35\nwww.newsroom\nwww.premier\nvdesk\nwww.intercambios\nip204-34\nip204-33\nip204-32\nip204-31\nalderaan\nwww.frontpage\nip204-27\nip204-26\nwww.slots\ntaw\ntdd\nkurzy\nfotokonyv\nkpe\nqubit\nip204-25\nkroeber\nip204-24\nwww88\nwww109\ncdu\njueves\nwww243\nip204-22\nbigfarm\nwww89\nip204-21\nip204-19\nip204-18\nip204-17\nip204-15\nwww.bigfarm\ndevelopment1\nip204-14\nstreamtest\nyudian\nwww.sqladmin\nactivecollab\nbeta15\nbladerunner\nwebdisk.s1\nsmtpext\nbrel\ntrium\nwww.cgi\nautodiscover.stats\nsirius2\nautoconfig.stats\nnavneet\nfangorn\nlocal1\nsawneeexc10b\nsawneeexc\nsawneearcsrv\nkrc\nsawneecas2\nsawneecas1\nsawneearcgis\nsawneeexc07\nsawneesftp\nsawneeexcfrt\nwww.cazari\ncazari\nsawneemail\nsawneeecx10a\nsawneelync\nray1122\neao\ndhcp253\ndhcp252\ndhcp251\ndhcp250\ndhcp248\ndhcp247\ndhcp246\ndhcp245\ndhcp244\ndhcp243\ndhcp242\ndhcp241\ndhcp239\ndhcp238\ndhcp237\ndhcp236\ndhcp235\ndhcp234\ndhcp233\ndhcp232\ndhcp231\ndhcp229\ndhcp228\ndhcp227\ndhcp226\ndhcp225\ndhcp224\ndhcp223\ndhcp222\ndhcp221\ndhcp219\ndhcp218\ndhcp217\ndhcp216\ndhcp215\ndhcp214\ndhcp213\ndhcp212\ndhcp199\ndhcp198\ndhcp197\ndhcp196\ndhcp195\ndhcp204\ndhcp203\ndmn\ndhcp192\ndhcp200\nmeteoweb\nburwood\ndhcp249\ndhcp240\ndhcp230\ndhcp220\ndhcp211\ndhcp210\ndhcp208\ndhcp207\ndhcp206\ndhcp205\ndhcp194\ndhcp193\ndhcp202\ndhcp201\naristote\nyeu\ndhcp209\nmaslo\nsnb\nhi-fi\nwebsite-promotion\nwww.website-promotion\nwww.web-designing\nweb-designing\ncarlisle\naboshop\nqwerty1234\ngame4\n400\nsuddenattack\nfb-app\nip204-13\nchuangye\nalberich\nip204-12\ncorwin\neridanus\nmihir\nasiansensation\nsexmovies\nsteak\nnetx\nccadmin\nwww.mpl\nmailserver4\nhardcoremovie\nautodiscover.oh\nwebdisk.oh\nautoconfig.oh\nsmtp-bigip\njezebel\ntomkat\nbluetooth\n88say\ndiscuzx\nwww.vpc\nip204-240\nip220-198\nip204-6\nsp5\ntimr\ntestapp1\nip204-70\nip204-43\nip204-30\nip204-28\nip204-23\nip204-10\nsecureforms\nhardcorehentai\nip220-166\nip204-204\nip204-203\ntinhdonphuong\nshare1\nip204-190\nsmut\nip204-91\nip204-90\nip204-80\nip204-69\nip204-60\nip220-156\nip204-50\nip204-42\nip204-40\nip204-36\nip204-29\nip204-16\nip220-188\nip220-187\nip220-184\nip220-182\nip220-181\nip220-179\nip220-177\nip220-172\nip220-169\nip220-168\nip220-167\nip220-165\nip220-164\nip220-161\nip220-160\nip220-158\nip220-155\nip220-153\nip220-113\nmegsons\nip220-191\nwge\nwct\nip220-190\nip220-140\nip220-171\nip220-152\nwww.wi\nip220-149\nip220-144\nip220-139\nip220-136\nseocat\nqisserver\nip220-133\nip220-131\nip220-128\nfalstaff\nip220-126\nip220-122\nelnath\nsupport-dev\nip220-117\nsupport-ext\nnavidad\nip220-109\nip220-107\nip220-124\nbild\nofi\nip220-106\nnol\n1208\nbaldrick\nip220-100\npayslip\nip204-210\nlockss\nspare-16\nspare-17\nspare-18\nip204-150\nip220-119\nip204-192\nxantia\ncollaboratori\nip204-182\nscuba1\nip204-163\nip204-158\nditracker\nbetaonline\nmobilenow\nip220-115\nip204-254\nip204-253\nip204-252\nip204-251\nip204-248\nip204-247\nip204-245\nyds2\nip204-243\nip204-242\nip204-241\nip204-239\nip204-237\nip204-235\nip204-234\nip204-232\nip204-231\nip204-229\nip204-228\nip204-225\nip204-224\nip204-223\nip204-219\nip204-218\nip204-217\nip204-215\nip204-214\nip204-213\nip204-179\nip204-177\nip204-175\nip204-174\nip204-173\nip204-172\nbdn\nbunya\ncommand\nip204-171\nsociologia\nmalone\nip204-167\nhosting7\noldsearch\nip204-165\nip204-162\nip204-159\nip204-157\nportsnap\nip204-155\nip204-152\nikon\nip204-151\nip204-147\nip204-143\nbsl110\nsipus\nip204-141\nip204-139\nip204-137\nace01\nip204-133\nip204-132\nip204-131\nip204-129\nip204-128\nip204-127\nip204-126\nwww-cache\nv800\nip204-123\nbanyan\npoodle\nrhun\nsapdb\nip204-113\nip204-112\nip204-111\norigin-extras\nip204-108\ncontributestage\nip204-107\nip204-106\nip204-104\nip204-103\nisl\nip204-102\ngcp\nip204-101\nhartree\ngamemaster\nip204-100\nip220-110\nv002\nip204-250\nsusanita\nsamba1\nip220-129\nip204-246\nssl48\nchaucer\nssl27\nssl25\nssl23\nssl19\nssl17\nstubbs\nip204-238\nip220-189\nip220-186\nip220-185\nip220-180\nip220-176\nip220-175\nramsey\nip220-173\nscrabble\nip220-163\nip220-148\nphalanx\nip220-147\nmanasseh\nkrym\nperfmon\nip220-145\nip220-141\nip220-138\nip220-134\nip220-127\nip220-125\nip220-123\nip220-121\nip220-118\nip220-114\nip220-111\nip220-105\nip220-104\nip220-102\nip220-101\nip204-212\nip204-209\nwww.cbt\nip204-208\nip204-207\nip204-206\nip204-205\nip204-249\nip204-201\nip204-244\nip204-236\nip204-233\nip204-230\nadminv3\nip204-227\nip204-226\nip204-222\nip204-221\nalu\ntylerc\nd136\ndistr-2-out\nfw2-ext\ncms-old\nip204-220\npark3\npns1\nip204-216\nfw1-ext\ngeorgian\nminichat\nsung\nnmo\nhabboonline\nanitha\nip204-211\nclones\namazinggrace\nalperen\nip204-199\ntraining3\nwww.espana\nurbanp\nardent\nip204-198\nfpro\ndavidlee\nvulcan2\nssl50\ntexas2\nmatche\nip204-197\nonlive\nvisp\nserver101\nmelc\nip204-196\nyangzhou\nlone\ncc7\nblx\nlite3\nip204-195\nip204-194\nip204-193\nflooding\nd143\npeipei\nip204-202\nreklamy\nnmt\nbyrd\nnvg\nip204-191\nos8\npga\ntestestest\nip204-189\nmispel\nip204-188\nrsn\nneustar\nsww\nip204-187\nwh1\nimap.mail\ncrazy123\nvisacard\nautoloan\nip204-186\nip204-185\nip204-184\nvauxhall\nnowandzen\nonfire\nip204-183\nmike1\nforeclosures\nspec1\narthur2\ntestbox\nkikaku\ndcmail2\nip220-196\nip204-181\nip204-180\nhkb\nbullets\ndetektiv\npoker2\nnetad\nxmedia\npatt\ninformant\nhm1\nhosted.by\nteszt2\ne002\nops1\ntraining5\nip204-178\nsoroosh\nmarket13\nip204-169\nmunro\nip204-168\nip204-166\nsabamail\nnezarat\nip204-164\nip204-176\nsepid\nmcb-erp\nbluemaple\nssl49\nredpandaplus\nip204-161\nhszh\nip204-160\nmcdonald\nip204-156\ntitan5\nnewzone\ncs0\npeek2\nlist2\nip220-120\nip220-197\nloretta\nip204-154\naurion\nwww.siva\nip204-153\necom2\nip204-146\ntest987\nccmail\nip204-145\ncoldfusion\nip204-144\nip204-142\nencom\nusers1\nit033605\nserver108\njanus1\njanus2\nip204-140\nstorm8\nip204-138\nip204-136\nmtest1\nnavigation\nip204-200\nip204-8\nwww.domainnames\ndottie\nsystem68\ndomainnames\nwww.showyourcolours\nsfp1\nip204-135\nsuper5\nhudsons\nip204-134\nshowyourcolours\nrogerfederer\nhaider\ngamegame\nteamon2\nwww.apollon\ncessna\nremoteapps\nmsx002\nip204-170\nip204-125\nacadmin\nbolla\npaulsen\ntipweb\ngoodwill\napro\njc1\nsp12\nip204-120\nip204-109\nsugiyama1\nip204-105\nnichop\nip204-117\nip204-149\nhazelnut\naccess11\nns2.cs\nhitech1\nns2.cc\nip204-148\nemail5\nwww.forumtest\nkoko10\ningatlan\ntbsoc\ntake-survey\n"
  },
  {
    "path": "docker/agent/Dockerfile",
    "content": "# ============================================\n# XingRin Agent - 轻量心跳上报镜像\n# 用途：心跳上报 + 负载监控 + 版本检查\n# 基础镜像：Alpine Linux (~5MB)\n# 最终大小：~10MB\n# ============================================\n\nFROM alpine:3.19\n\n# 构建参数：版本号\nARG IMAGE_TAG=unknown\n\n# 安装必要工具\nRUN apk add --no-cache \\\n    bash \\\n    curl \\\n    procps\n\n# 复制 agent 脚本\nCOPY backend/scripts/worker-deploy/agent.sh /app/agent.sh\nRUN chmod +x /app/agent.sh\n\n# 将版本号写入环境变量（运行时可用）\nENV IMAGE_TAG=${IMAGE_TAG}\n\n# 工作目录\nWORKDIR /app\n\n# 默认命令\nCMD [\"bash\", \"/app/agent.sh\"]\n"
  },
  {
    "path": "docker/docker-compose.dev.yml",
    "content": "services:\n  # PostgreSQL（可选，使用远程数据库时不启动）\n  # 本地模式: docker compose --profile local-db up -d\n  # 远程模式: docker compose up -d（需配置 DB_HOST 为远程地址）\n  # 使用自定义镜像，预装 pg_ivm 扩展\n  postgres:\n    profiles: [\"local-db\"]\n    build:\n      context: ./postgres\n      dockerfile: Dockerfile\n    image: ${DOCKER_USER:-yyhuni}/xingrin-postgres:${IMAGE_TAG:-dev}\n    restart: always\n    environment:\n      POSTGRES_DB: ${DB_NAME}\n      POSTGRES_USER: ${DB_USER}\n      POSTGRES_PASSWORD: ${DB_PASSWORD}\n    volumes:\n      - postgres_data:/var/lib/postgresql/data\n      - ./postgres/init-user-db.sh:/docker-entrypoint-initdb.d/init-user-db.sh\n    ports:\n      - \"${DB_PORT}:5432\"\n    command: >\n      postgres\n      -c shared_preload_libraries=pg_ivm\n    healthcheck:\n      test: [\"CMD-SHELL\", \"pg_isready -U ${DB_USER}\"]\n      interval: 5s\n      timeout: 5s\n      retries: 5\n\n  redis:\n    image: redis:7-alpine\n    restart: always\n    healthcheck:\n      test: [\"CMD\", \"redis-cli\", \"ping\"]\n      interval: 5s\n      timeout: 5s\n      retries: 5\n\n  server:\n    build:\n      context: ..\n      dockerfile: docker/server/Dockerfile\n    restart: always\n    env_file:\n      - .env\n    environment:\n      - IMAGE_TAG=${IMAGE_TAG:-dev}\n    ports:\n      - \"8888:8888\"\n    depends_on:\n      redis:\n        condition: service_healthy\n    volumes:\n      # 统一挂载数据目录\n      - /opt/xingrin:/opt/xingrin\n      - /var/run/docker.sock:/var/run/docker.sock\n    # OOM 优先级：-500 保护核心服务\n    oom_score_adj: -500\n    healthcheck:\n      # 使用专门的健康检查端点（无需认证）\n      test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:8888/api/health/\"]\n      interval: 30s\n      timeout: 10s\n      retries: 3\n      start_period: 60s\n\n  # Agent：心跳上报 + 负载监控 + 版本检查\n  agent:\n    build:\n      context: ..\n      dockerfile: docker/agent/Dockerfile\n      args:\n        IMAGE_TAG: ${IMAGE_TAG:-dev}\n    restart: always\n    environment:\n      - SERVER_URL=http://server:8888\n      - WORKER_NAME=Local-Worker\n      - IS_LOCAL=true\n      - IMAGE_TAG=${IMAGE_TAG:-dev}\n      - WORKER_API_KEY=${WORKER_API_KEY}\n    depends_on:\n      server:\n        condition: service_healthy\n    volumes:\n      - /proc:/host/proc:ro\n\n  frontend:\n    build:\n      context: ..\n      dockerfile: docker/frontend/Dockerfile\n      args:\n        IMAGE_TAG: ${IMAGE_TAG:-dev}\n    restart: always\n    # OOM 优先级：-500 保护 Web 界面\n    oom_score_adj: -500\n    depends_on:\n      server:\n        condition: service_healthy\n\n  nginx:\n    build:\n      context: ..\n      dockerfile: docker/nginx/Dockerfile\n    restart: always\n    # OOM 优先级：-500 保护入口网关\n    oom_score_adj: -500\n    depends_on:\n      server:\n        condition: service_healthy\n      frontend:\n        condition: service_started\n    ports:\n      - \"8083:8083\"\n    volumes:\n      # SSL 证书挂载（方便更新）\n      - ./nginx/ssl:/etc/nginx/ssl:ro\n\n  # Worker：扫描任务执行容器（开发模式下构建）\n  worker:\n    build:\n      context: ..\n      dockerfile: docker/worker/Dockerfile\n    image: docker-worker:${IMAGE_TAG:-latest}-dev\n    restart: \"no\"\n    volumes:\n      - /opt/xingrin:/opt/xingrin\n    command: echo \"Worker image built for development\"\n\nvolumes:\n  postgres_data:\n\nnetworks:\n  default:\n    name: xingrin_network  # 固定网络名，不随目录名变化\n"
  },
  {
    "path": "docker/docker-compose.yml",
    "content": "# ============================================\n# 生产环境配置 - 使用 Docker Hub 预构建镜像\n# ============================================\n# 用法: docker compose up -d\n# \n# 开发环境请使用: docker compose -f docker-compose.dev.yml up -d\n# ============================================\n\nservices:\n  # PostgreSQL（可选，使用远程数据库时不启动）\n  # 使用自定义镜像，预装 pg_ivm 扩展\n  postgres:\n    profiles: [\"local-db\"]\n    build:\n      context: ./postgres\n      dockerfile: Dockerfile\n    image: ${DOCKER_USER:-yyhuni}/xingrin-postgres:${IMAGE_TAG:?IMAGE_TAG is required}\n    restart: always\n    environment:\n      POSTGRES_DB: ${DB_NAME}\n      POSTGRES_USER: ${DB_USER}\n      POSTGRES_PASSWORD: ${DB_PASSWORD}\n    volumes:\n      - postgres_data:/var/lib/postgresql/data\n      - ./postgres/init-user-db.sh:/docker-entrypoint-initdb.d/init-user-db.sh\n    ports:\n      - \"${DB_PORT}:5432\"\n    command: >\n      postgres\n      -c shared_preload_libraries=pg_ivm\n    healthcheck:\n      test: [\"CMD-SHELL\", \"pg_isready -U ${DB_USER}\"]\n      interval: 5s\n      timeout: 5s\n      retries: 5\n\n  redis:\n    image: redis:7-alpine\n    restart: always\n    healthcheck:\n      test: [\"CMD\", \"redis-cli\", \"ping\"]\n      interval: 5s\n      timeout: 5s\n      retries: 5\n\n  server:\n    image: ${DOCKER_USER:-yyhuni}/xingrin-server:${IMAGE_TAG:?IMAGE_TAG is required}\n    restart: always\n    env_file:\n      - .env\n    environment:\n      - IMAGE_TAG=${IMAGE_TAG}\n    depends_on:\n      redis:\n        condition: service_healthy\n    volumes:\n      # 统一挂载数据目录\n      - /opt/xingrin:/opt/xingrin\n      # Docker Socket 挂载：允许 Django 服务器执行本地 docker 命令（用于本地 Worker 任务分发）\n      - /var/run/docker.sock:/var/run/docker.sock\n    # OOM 优先级：-500 降低被 OOM Killer 选中的概率，保护核心服务\n    oom_score_adj: -500\n    healthcheck:\n      # 使用专门的健康检查端点（无需认证）\n      test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:8888/api/health/\"]\n      interval: 30s\n      timeout: 10s\n      retries: 3\n      start_period: 60s\n\n  # ============================================\n  # Agent：轻量心跳上报 + 负载监控（~10MB）\n  # 扫描任务通过 task_distributor 分发到动态容器\n  # ============================================\n  \n  agent:\n    image: ${DOCKER_USER:-yyhuni}/xingrin-agent:${IMAGE_TAG:?IMAGE_TAG is required}\n    container_name: xingrin-agent\n    restart: always\n    environment:\n      - SERVER_URL=http://server:8888\n      - WORKER_NAME=Local-Worker\n      - IS_LOCAL=true\n      - IMAGE_TAG=${IMAGE_TAG}\n      - WORKER_API_KEY=${WORKER_API_KEY}\n    depends_on:\n      server:\n        condition: service_healthy\n    volumes:\n      - /proc:/host/proc:ro\n\n  frontend:\n    image: ${DOCKER_USER:-yyhuni}/xingrin-frontend:${IMAGE_TAG:?IMAGE_TAG is required}\n    restart: always\n    # OOM 优先级：-500 保护 Web 界面\n    oom_score_adj: -500\n    depends_on:\n      server:\n        condition: service_healthy\n\n  nginx:\n    image: ${DOCKER_USER:-yyhuni}/xingrin-nginx:${IMAGE_TAG:?IMAGE_TAG is required}\n    restart: always\n    # OOM 优先级：-500 保护入口网关\n    oom_score_adj: -500\n    depends_on:\n      server:\n        condition: service_healthy\n      frontend:\n        condition: service_started\n    ports:\n      - \"8083:8083\"\n    volumes:\n      - ./nginx/ssl:/etc/nginx/ssl:ro\n\nvolumes:\n  postgres_data:\n\nnetworks:\n  default:\n    name: xingrin_network  # 固定网络名，不随目录名变化\n"
  },
  {
    "path": "docker/frontend/Dockerfile",
    "content": "# 前端 Next.js Dockerfile\n# 使用多阶段构建 + BuildKit 缓存优化\n\n# ==================== 依赖安装阶段 ====================\nFROM node:20-alpine AS deps\nWORKDIR /app\n\n# 安装 pnpm\nRUN corepack enable && corepack prepare pnpm@latest --activate\n\n# 复制依赖文件\nCOPY frontend/package.json frontend/pnpm-lock.yaml ./\n\n# 安装依赖（使用 BuildKit 缓存加速）\nRUN --mount=type=cache,target=/root/.local/share/pnpm/store \\\n    pnpm install --frozen-lockfile\n\n# ==================== 构建阶段 ====================\nFROM node:20-alpine AS builder\nWORKDIR /app\n\nRUN corepack enable && corepack prepare pnpm@latest --activate\n\n# 复制依赖\nCOPY --from=deps /app/node_modules ./node_modules\nCOPY frontend/ ./\n\n# 设置环境变量（构建时使用）\nARG NEXT_PUBLIC_API_URL\nARG IMAGE_TAG=unknown\nENV NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL}\nENV NEXT_PUBLIC_VERSION=${IMAGE_TAG}\n# Docker 内部网络使用服务名 server 作为后端地址\nENV API_HOST=server\n\n# 构建（使用 BuildKit 缓存加速）\nRUN --mount=type=cache,target=/app/.next/cache \\\n    pnpm build\n\n# ==================== 运行阶段 ====================\nFROM node:20-alpine AS runner\nWORKDIR /app\n\nENV NODE_ENV=production\n\n# 创建非 root 用户\nRUN addgroup --system --gid 1001 nodejs\nRUN adduser --system --uid 1001 nextjs\n\n# 复制构建产物\nCOPY --from=builder /app/public ./public\nCOPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./\nCOPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static\n\nUSER nextjs\n\nEXPOSE 3000\n\nENV PORT=3000\nENV HOSTNAME=\"0.0.0.0\"\n\nCMD [\"node\", \"server.js\"]\n"
  },
  {
    "path": "docker/nginx/Dockerfile",
    "content": "FROM nginx:1.27-alpine\n\n# 复制 nginx 配置和证书\nCOPY docker/nginx/nginx.conf /etc/nginx/nginx.conf\nCOPY docker/nginx/ssl /etc/nginx/ssl\n"
  },
  {
    "path": "docker/nginx/nginx.conf",
    "content": "worker_processes auto;\nevents { worker_connections 1024; }\n\nhttp {\n  include       /etc/nginx/mime.types;\n  default_type  application/octet-stream;\n  sendfile      on;\n  keepalive_timeout 65;\n\n  # 上游服务\n  upstream backend {\n    server server:8888;\n  }\n\n  upstream frontend {\n    server frontend:3000;\n  }\n\n  # HTTPS 反代（将证书放在 /docker/nginx/ssl 下映射到 /etc/nginx/ssl）\n  server {\n    listen 8083 ssl http2;\n    server_name _;\n\n    ssl_certificate     /etc/nginx/ssl/fullchain.pem;\n    ssl_certificate_key /etc/nginx/ssl/privkey.pem;\n    ssl_protocols       TLSv1.2 TLSv1.3;\n    ssl_ciphers         HIGH:!aNULL:!MD5;\n\n    client_max_body_size 50m;\n\n    # HTTP 请求到 HTTPS 端口时自动跳转\n    error_page 497 =301 https://$host:$server_port$request_uri;\n\n    # 指纹特征 - 用于 FOFA/Shodan 等搜索引擎识别\n    add_header X-Powered-By \"Xingrin ASM\" always;\n\n    location /api/ {\n      proxy_set_header Host $host;\n      proxy_set_header X-Real-IP $remote_addr;\n      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n      proxy_read_timeout 300s;  # 5分钟，支持大数据量导出\n      proxy_send_timeout 300s;\n      proxy_pass http://backend;\n    }\n\n    # WebSocket 反代\n    location /ws/ {\n      proxy_pass http://backend;\n      proxy_http_version 1.1;\n      proxy_set_header Upgrade $http_upgrade;\n      proxy_set_header Connection \"upgrade\";\n      proxy_set_header Host $host;\n      proxy_set_header X-Real-IP $remote_addr;\n      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n      proxy_read_timeout 86400;  # 24小时，防止 WebSocket 超时\n    }\n\n    # 前端反代\n    location / {\n      proxy_set_header Host $host;\n      proxy_set_header X-Real-IP $remote_addr;\n      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n      proxy_set_header X-Forwarded-Proto $scheme;\n      proxy_pass http://frontend;\n    }\n  }\n}\n"
  },
  {
    "path": "docker/nginx/ssl/README.md",
    "content": "此处放置你的 SSL 证书文件，例如：\nfullchain.pem\nprivkey.pem\n"
  },
  {
    "path": "docker/postgres/Dockerfile",
    "content": "FROM postgres:15\n\n# 安装编译依赖\nRUN apt-get update && apt-get install -y \\\n    build-essential \\\n    postgresql-server-dev-15 \\\n    git \\\n    && rm -rf /var/lib/apt/lists/*\n\n# 编译安装 pg_ivm\nRUN git clone https://github.com/sraoss/pg_ivm.git /tmp/pg_ivm \\\n    && cd /tmp/pg_ivm \\\n    && make \\\n    && make install \\\n    && rm -rf /tmp/pg_ivm\n\n# 配置 shared_preload_libraries\n# 注意: 这个配置会在容器启动时被应用\nRUN echo \"shared_preload_libraries = 'pg_ivm'\" >> /usr/share/postgresql/postgresql.conf.sample\n"
  },
  {
    "path": "docker/postgres/init-user-db.sh",
    "content": "#!/bin/bash\nset -e\n\n# 创建应用数据库（生产 + 开发）\n# 使用条件创建避免与 POSTGRES_DB 自动创建的数据库冲突\npsql -v ON_ERROR_STOP=1 --username \"$POSTGRES_USER\" --dbname \"postgres\" <<-EOSQL\n\tSELECT 'CREATE DATABASE xingrin' WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'xingrin')\\gexec\n\tSELECT 'CREATE DATABASE xingrin_dev' WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'xingrin_dev')\\gexec\n\tGRANT ALL PRIVILEGES ON DATABASE xingrin TO \"$POSTGRES_USER\";\n\tGRANT ALL PRIVILEGES ON DATABASE xingrin_dev TO \"$POSTGRES_USER\";\nEOSQL\n\n# 启用 pg_trgm 扩展（用于文本模糊搜索索引）\npsql -v ON_ERROR_STOP=1 --username \"$POSTGRES_USER\" --dbname \"xingrin\" <<-EOSQL\n\tCREATE EXTENSION IF NOT EXISTS pg_trgm;\nEOSQL\n\npsql -v ON_ERROR_STOP=1 --username \"$POSTGRES_USER\" --dbname \"xingrin_dev\" <<-EOSQL\n\tCREATE EXTENSION IF NOT EXISTS pg_trgm;\nEOSQL\n"
  },
  {
    "path": "docker/restart.sh",
    "content": "#!/bin/bash\nset -e\n\ncd \"$(dirname \"$0\")\"\nsource \"./scripts/common.sh\"\ninit_docker_env_with_env_check\n\n# 颜色\nCYAN='\\033[0;36m'\nGREEN='\\033[0;32m'\nNC='\\033[0m'\n\necho -e \"${CYAN}[RESTART]${NC} 重启服务...\"\n\n# 尝试重启两种模式的容器\nif [ -f \"docker-compose.yml\" ]; then\n    ${COMPOSE_CMD} -f docker-compose.yml restart 2>/dev/null || true\nfi\nif [ -f \"docker-compose.dev.yml\" ]; then\n    ${COMPOSE_CMD} -f docker-compose.dev.yml restart 2>/dev/null || true\nfi\n\necho -e \"${GREEN}[OK]${NC} 服务已重启\"\n"
  },
  {
    "path": "docker/scripts/common.sh",
    "content": "#!/bin/bash\n# 公共函数库 - 被其他脚本 source 引用\n\n# ==================== 颜色定义 ====================\nRED='\\033[0;31m'\nGREEN='\\033[0;32m'\nYELLOW='\\033[1;33m'\nNC='\\033[0m'\n\n# ==================== 日志函数 ====================\nlog_info() { echo -e \"${GREEN}[INFO]${NC} $1\"; }\nlog_warn() { echo -e \"${YELLOW}[WARN]${NC} $1\"; }\nlog_error() { echo -e \"${RED}[ERROR]${NC} $1\"; }\n\n# ==================== Docker 环境检查 ====================\ncheck_docker() {\n    if ! command -v docker >/dev/null 2>&1; then\n        log_error \"未检测到 docker 命令，请先安装 Docker。\"\n        exit 1\n    fi\n\n    if ! docker info >/dev/null 2>&1; then\n        log_error \"Docker 守护进程未运行，请先启动 Docker。\"\n        exit 1\n    fi\n}\n\n# ==================== Docker Compose 命令检测 ====================\ndetect_compose_cmd() {\n    if docker compose version >/dev/null 2>&1; then\n        COMPOSE_CMD=\"docker compose\"\n    elif command -v docker-compose >/dev/null 2>&1; then\n        COMPOSE_CMD=\"docker-compose\"\n    else\n        log_error \"未检测到 docker-compose 或 docker compose。\"\n        exit 1\n    fi\n    export COMPOSE_CMD\n}\n\n# ==================== 环境变量文件检查 ====================\ncheck_env_file() {\n    if [ ! -f .env ]; then\n        log_error \"未找到 .env 配置文件。\"\n        echo \"   请先根据 .env.example 创建 .env 文件。\"\n        exit 1\n    fi\n}\n\n# ==================== 数据库配置检测 ====================\ndetect_db_profile() {\n    DB_HOST=$(grep -E \"^DB_HOST=\" .env | cut -d'=' -f2 | tr -d ' \"'\"'\" || echo \"postgres\")\n    \n    if [[ \"$DB_HOST\" == \"postgres\" || \"$DB_HOST\" == \"localhost\" || \"$DB_HOST\" == \"127.0.0.1\" ]]; then\n        echo \"[DB] 使用本地 PostgreSQL 容器\"\n        PROFILE_ARG=\"--profile local-db\"\n    else\n        echo \"[DB] 使用远程 PostgreSQL: $DB_HOST\"\n        PROFILE_ARG=\"\"\n    fi\n    export PROFILE_ARG\n}\n\n\n# ==================== 获取 docker 目录路径 ====================\nget_docker_dir() {\n    # common.sh 位于 docker/scripts/，所以 docker 目录是上一级\n    local script_dir=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\n    echo \"$(dirname \"$script_dir\")\"\n}\n\n# ==================== 初始化检查（一次性调用） ====================\ninit_docker_env() {\n    DOCKER_DIR=\"$(get_docker_dir)\"\n    cd \"$DOCKER_DIR\"\n    check_docker\n    detect_compose_cmd\n    export DOCKER_DIR\n}\n\ninit_docker_env_with_env_check() {\n    init_docker_env\n    check_env_file\n}\n"
  },
  {
    "path": "docker/scripts/init-data.sh",
    "content": "#!/bin/bash\n#\n# 数据初始化脚本（公共模块）\n#\n# 包含：\n#   - 数据库迁移\n#   - 初始化默认引擎配置\n#   - 初始化字典\n#   - 初始化 Nuclei 模板仓库\n#\n# 被以下脚本调用：\n#   - install.sh（安装时）\n#   - start.sh（启动时）\n#   - update.sh（更新时）\n#\n\nset -e\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nDOCKER_DIR=\"$(dirname \"$SCRIPT_DIR\")\"\ncd \"$DOCKER_DIR\"\n\n# 颜色输出\nGREEN='\\033[0;32m'\nYELLOW='\\033[1;33m'\nBLUE='\\033[0;34m'\nCYAN='\\033[0;36m'\nBOLD='\\033[1m'\nNC='\\033[0m'\n\nlog_info() { echo -e \"    ${GREEN}OK${NC} $1\"; }\nlog_warn() { echo -e \"    ${YELLOW}!${NC} $1\"; }\nlog_step() { echo -e \"  ${CYAN}>>${NC} $1\"; }\n\n# 检查服务是否运行\ncheck_server() {\n    # 使用 docker compose ps 的 --format 选项获取服务状态\n    # 这种方式不依赖容器名称格式，只检查服务名\n    if ! docker compose ps --format '{{.Service}} {{.State}}' 2>/dev/null | grep -E \"^server\\s+running\" > /dev/null; then\n        echo \"Server 容器未运行，跳过数据初始化\"\n        return 1\n    fi\n    return 0\n}\n\n# 等待服务就绪\nwait_for_server() {\n    log_info \"等待 Server 服务就绪...\"\n    local max_attempts=30\n    local attempt=0\n    \n    while [ $attempt -lt $max_attempts ]; do\n        if docker compose exec -T server python backend/manage.py check &>/dev/null; then\n            log_info \"Server 服务已就绪\"\n            return 0\n        fi\n        attempt=$((attempt + 1))\n        sleep 2\n    done\n    \n    log_warn \"等待 Server 服务超时\"\n    return 1\n}\n\n# 数据库迁移\nrun_migrations() {\n    log_step \"执行数据库迁移...\"\n    \n    # 迁移文件应手动生成并提交到仓库，这里只执行 migrate\n    docker compose exec -T server python backend/manage.py migrate --noinput\n    log_info \"数据库迁移完成\"\n}\n\n# 初始化引擎配置\ninit_engine_config() {\n    log_step \"初始化引擎配置...\"\n    docker compose exec -T server python backend/manage.py shell -c \"\nfrom apps.engine.models import ScanEngine\nfrom pathlib import Path\n\nyaml_path = Path('/app/backend/apps/scan/configs/engine_config_example.yaml')\nif not yaml_path.exists():\n    print('未找到配置文件，跳过')\n    exit(0)\n\nnew_config = yaml_path.read_text()\n\n# 检查是否已有 full scan 引擎\nengine = ScanEngine.objects.filter(name='full scan').first()\nif engine:\n    # 直接覆盖为最新配置\n    engine.configuration = new_config\n    engine.save(update_fields=['configuration'])\n    print(f'已更新引擎配置: {engine.name}')\nelse:\n    # 创建引擎\n    engine = ScanEngine.objects.create(\n        name='full scan',\n        configuration=new_config,\n    )\n    print(f'已创建引擎: {engine.name}')\n\"\n    log_info \"引擎配置初始化完成\"\n}\n\n# 初始化字典\ninit_wordlists() {\n    log_step \"初始化字典...\"\n    docker compose exec -T server python backend/manage.py init_wordlists\n    log_info \"字典初始化完成\"\n}\n\n# 初始化指纹库\ninit_fingerprints() {\n    log_step \"初始化指纹库...\"\n    docker compose exec -T server python backend/manage.py init_fingerprints\n    log_info \"指纹库初始化完成\"\n}\n\n# 初始化 Nuclei 模板仓库\ninit_nuclei_templates() {\n    log_step \"初始化 Nuclei 模板仓库...\"\n    # 只创建数据库记录，git clone 由 install.sh 在容器外完成（支持 Git 加速）\n    docker compose exec -T server python backend/manage.py init_nuclei_templates\n    log_info \"Nuclei 模板仓库初始化完成\"\n}\n\n# 初始化 admin 用户\ninit_admin_user() {\n    log_step \"初始化 admin 用户...\"\n    docker compose exec -T server python backend/manage.py init_admin\n    log_info \"admin 用户初始化完成\"\n}\n\n# 主函数\nmain() {\n    # 解析参数\n    DEV_MODE=false\n    SKIP_MIGRATION=false\n    \n    while [[ $# -gt 0 ]]; do\n        case $1 in\n            --dev) DEV_MODE=true; shift ;;\n            --skip-migration) SKIP_MIGRATION=true; shift ;;\n            *) shift ;;\n        esac\n    done\n\n    echo \"\"\n    echo -e \"${BOLD}${BLUE}────────────────────────────────────────${NC}\"\n    echo -e \"${BOLD}${BLUE}  数据初始化${NC}\"\n    echo -e \"${BOLD}${BLUE}────────────────────────────────────────${NC}\"\n    echo \"\"\n\n    if ! check_server; then\n        return 1\n    fi\n\n    wait_for_server || return 1\n\n    if [ \"$SKIP_MIGRATION\" = \"false\" ]; then\n        run_migrations\n    fi\n    \n    init_engine_config\n    init_wordlists\n    init_fingerprints\n    init_nuclei_templates\n    init_admin_user\n\n    echo \"\"\n    echo -e \"  ${GREEN}数据初始化完成${NC}\"\n    echo \"\"\n}\n\n# 如果直接执行此脚本\nif [[ \"${BASH_SOURCE[0]}\" == \"${0}\" ]]; then\n    main \"$@\"\nfi\n"
  },
  {
    "path": "docker/scripts/install-pg-ivm.sh",
    "content": "#!/bin/bash\n# pg_ivm 一键安装脚本（用于远程自建 PostgreSQL 服务器）\n# 要求: PostgreSQL 13+ 版本\nset -e\n\necho \"==========================================\"\necho \"pg_ivm 一键安装脚本\"\necho \"要求: PostgreSQL 13+ 版本\"\necho \"==========================================\"\necho \"\"\n\n# 检查是否以 root 运行\nif [ \"$EUID\" -ne 0 ]; then\n    echo \"错误: 请使用 sudo 运行此脚本\"\n    exit 1\nfi\n\n# 检测 PostgreSQL 版本\ndetect_pg_version() {\n    if command -v psql &> /dev/null; then\n        psql --version | grep -oP '\\d+' | head -1\n    elif [ -n \"$PG_VERSION\" ]; then\n        echo \"$PG_VERSION\"\n    else\n        echo \"15\"\n    fi\n}\n\nPG_VERSION=${PG_VERSION:-$(detect_pg_version)}\n\n# 检测 PostgreSQL\nif ! command -v psql &> /dev/null; then\n    echo \"错误: 未检测到 PostgreSQL，请先安装 PostgreSQL\"\n    exit 1\nfi\n\necho \"检测到 PostgreSQL 版本: $PG_VERSION\"\n\n# 检查版本要求\nif [ \"$PG_VERSION\" -lt 13 ]; then\n    echo \"错误: pg_ivm 要求 PostgreSQL 13+ 版本，当前版本: $PG_VERSION\"\n    exit 1\nfi\n\n# 安装编译依赖\necho \"\"\necho \"[1/4] 安装编译依赖...\"\nif command -v apt-get &> /dev/null; then\n    apt-get update -qq\n    apt-get install -y -qq build-essential postgresql-server-dev-${PG_VERSION} git\nelif command -v yum &> /dev/null; then\n    yum install -y gcc make git postgresql${PG_VERSION}-devel\nelse\n    echo \"错误: 不支持的包管理器，请手动安装编译依赖\"\n    exit 1\nfi\necho \"✓ 编译依赖安装完成\"\n\n# 编译安装 pg_ivm\necho \"\"\necho \"[2/4] 编译安装 pg_ivm...\"\nrm -rf /tmp/pg_ivm\ngit clone --quiet https://github.com/sraoss/pg_ivm.git /tmp/pg_ivm\ncd /tmp/pg_ivm\nmake -s\nmake install -s\nrm -rf /tmp/pg_ivm\necho \"✓ pg_ivm 编译安装完成\"\n\n# 配置 shared_preload_libraries\necho \"\"\necho \"[3/4] 配置 shared_preload_libraries...\"\n\nPG_CONF_DIRS=(\n    \"/etc/postgresql/${PG_VERSION}/main\"\n    \"/var/lib/pgsql/${PG_VERSION}/data\"\n    \"/var/lib/postgresql/data\"\n)\n\nPG_CONF_DIR=\"\"\nfor dir in \"${PG_CONF_DIRS[@]}\"; do\n    if [ -d \"$dir\" ]; then\n        PG_CONF_DIR=\"$dir\"\n        break\n    fi\ndone\n\nif [ -z \"$PG_CONF_DIR\" ]; then\n    echo \"警告: 未找到 PostgreSQL 配置目录，请手动配置 shared_preload_libraries\"\n    echo \"在 postgresql.conf 中添加: shared_preload_libraries = 'pg_ivm'\"\nelse\n    if grep -q \"shared_preload_libraries.*pg_ivm\" \"$PG_CONF_DIR/postgresql.conf\" 2>/dev/null; then\n        echo \"✓ shared_preload_libraries 已配置\"\n    else\n        if [ -d \"$PG_CONF_DIR/conf.d\" ]; then\n            echo \"shared_preload_libraries = 'pg_ivm'\" > \"$PG_CONF_DIR/conf.d/pg_ivm.conf\"\n            echo \"✓ 配置已写入 $PG_CONF_DIR/conf.d/pg_ivm.conf\"\n        else\n            if grep -q \"^shared_preload_libraries\" \"$PG_CONF_DIR/postgresql.conf\"; then\n                sed -i \"s/^shared_preload_libraries = '\\(.*\\)'/shared_preload_libraries = '\\1,pg_ivm'/\" \"$PG_CONF_DIR/postgresql.conf\"\n            else\n                echo \"shared_preload_libraries = 'pg_ivm'\" >> \"$PG_CONF_DIR/postgresql.conf\"\n            fi\n            echo \"✓ 配置已写入 $PG_CONF_DIR/postgresql.conf\"\n        fi\n    fi\nfi\n\n# 重启 PostgreSQL\necho \"\"\necho \"[4/4] 重启 PostgreSQL...\"\nif systemctl is-active --quiet postgresql; then\n    systemctl restart postgresql\n    echo \"✓ PostgreSQL 已重启\"\nelif systemctl is-active --quiet postgresql-${PG_VERSION}; then\n    systemctl restart postgresql-${PG_VERSION}\n    echo \"✓ PostgreSQL 已重启\"\nelse\n    echo \"警告: 无法自动重启 PostgreSQL，请手动重启\"\nfi\n\necho \"\"\necho \"==========================================\"\necho \"✓ pg_ivm 安装完成\"\necho \"==========================================\"\necho \"\"\necho \"验证安装:\"\necho \"  psql -U postgres -c \\\"CREATE EXTENSION IF NOT EXISTS pg_ivm;\\\"\"\necho \"\"\n"
  },
  {
    "path": "docker/scripts/setup-swap.sh",
    "content": "#!/bin/bash\n#\n# Ubuntu/Debian 一键开启交换分区脚本\n# 用法: sudo ./setup-swap.sh [大小GB]\n# 示例: sudo ./setup-swap.sh 4  # 创建 4GB 交换分区\n#       sudo ./setup-swap.sh     # 默认创建与内存相同大小的交换分区\n#\n\nset -e\n\n# 颜色定义\nRED='\\033[0;31m'\nGREEN='\\033[0;32m'\nYELLOW='\\033[1;33m'\nNC='\\033[0m'\n\nlog_info() { echo -e \"${GREEN}[INFO]${NC} $1\"; }\nlog_warn() { echo -e \"${YELLOW}[WARN]${NC} $1\"; }\nlog_error() { echo -e \"${RED}[ERROR]${NC} $1\"; }\n\n# 检查 root 权限\nif [ \"$EUID\" -ne 0 ]; then\n    log_error \"请使用 sudo 运行此脚本\"\n    exit 1\nfi\n\n# 检查是否已有交换分区\nCURRENT_SWAP_KB=$(grep SwapTotal /proc/meminfo | awk '{print $2}')\nCURRENT_SWAP_GB=$(awk \"BEGIN {printf \\\"%.0f\\\", $CURRENT_SWAP_KB / 1024 / 1024}\")\nif [ \"$CURRENT_SWAP_GB\" -gt 0 ]; then\n    log_warn \"系统已有 ${CURRENT_SWAP_GB}GB 交换分区\"\n    swapon --show\n    read -p \"是否继续添加新的交换分区？(y/N) \" -r\n    if [[ ! $REPLY =~ ^[Yy]$ ]]; then\n        log_info \"已取消\"\n        exit 0\n    fi\nfi\n\n# 获取系统内存大小（GB，四舍五入）\nTOTAL_MEM_KB=$(grep MemTotal /proc/meminfo | awk '{print $2}')\nTOTAL_MEM_GB=$(awk \"BEGIN {printf \\\"%.0f\\\", $TOTAL_MEM_KB / 1024 / 1024}\")\n\n# 确定交换分区大小\nif [ -n \"$1\" ]; then\n    SWAP_SIZE_GB=$1\nelse\n    # 默认与内存相同，最小 1GB，最大 8GB\n    SWAP_SIZE_GB=$TOTAL_MEM_GB\n    [ \"$SWAP_SIZE_GB\" -lt 1 ] && SWAP_SIZE_GB=1\n    [ \"$SWAP_SIZE_GB\" -gt 8 ] && SWAP_SIZE_GB=8\nfi\n\nSWAP_FILE=\"/swapfile_xingrin\"\n\nlog_info \"系统内存: ${TOTAL_MEM_GB}GB\"\nlog_info \"将创建 ${SWAP_SIZE_GB}GB 交换分区: $SWAP_FILE\"\n\n# 检查磁盘空间（向下取整，保守估计）\nAVAILABLE_GB=$(df / | tail -1 | awk '{printf \"%.0f\", $4/1024/1024}')\nif [ \"$AVAILABLE_GB\" -lt \"$SWAP_SIZE_GB\" ]; then\n    log_error \"磁盘空间不足！可用: ${AVAILABLE_GB}GB，需要: ${SWAP_SIZE_GB}GB\"\n    exit 1\nfi\n\n# 创建交换文件\nlog_info \"正在创建交换文件（可能需要几分钟）...\"\ndd if=/dev/zero of=$SWAP_FILE bs=1G count=$SWAP_SIZE_GB status=progress\n\n# 设置权限\nchmod 600 $SWAP_FILE\n\n# 格式化为交换分区\nmkswap $SWAP_FILE\n\n# 启用交换分区\nswapon $SWAP_FILE\n\n# 添加到 fstab（开机自动挂载）\nif ! grep -q \"$SWAP_FILE\" /etc/fstab; then\n    echo \"$SWAP_FILE none swap sw 0 0\" >> /etc/fstab\n    log_info \"已添加到 /etc/fstab，开机自动启用\"\nfi\n\n# 优化 swappiness（降低交换倾向，优先使用内存）\nSWAPPINESS=10\nif ! grep -q \"vm.swappiness\" /etc/sysctl.conf; then\n    echo \"vm.swappiness=$SWAPPINESS\" >> /etc/sysctl.conf\nfi\nsysctl vm.swappiness=$SWAPPINESS >/dev/null\n\nlog_info \"交换分区创建成功！\"\necho \"\"\necho \"当前交换分区状态:\"\nswapon --show\necho \"\"\nfree -h\n"
  },
  {
    "path": "docker/scripts/setup-system-monitor.sh",
    "content": "#!/bin/bash\n# 系统监控初始化脚本：8G Swap + Netdata + OOM 保护\n# 需要 root 权限运行\n\nset -e\n\nSWAP_SIZE=\"8G\"\nSWAP_FILE=\"/swapfile\"\n\necho \"========== 系统监控初始化 ==========\"\n\n# 1. 设置 Swap\necho \"[1/3] 配置 ${SWAP_SIZE} Swap...\"\nif swapon --show | grep -q \"${SWAP_FILE}\"; then\n    echo \"  Swap 已存在，跳过\"\nelse\n    fallocate -l ${SWAP_SIZE} ${SWAP_FILE}\n    chmod 600 ${SWAP_FILE}\n    mkswap ${SWAP_FILE}\n    swapon ${SWAP_FILE}\n    \n    # 添加到 fstab（如果不存在）\n    if ! grep -q \"${SWAP_FILE}\" /etc/fstab; then\n        echo \"${SWAP_FILE} none swap sw 0 0\" >> /etc/fstab\n    fi\n    echo \"  Swap 配置完成\"\nfi\n\n# 2. 安装 Netdata\necho \"[2/3] 安装 Netdata...\"\nif command -v netdata &> /dev/null; then\n    echo \"  Netdata 已安装，跳过\"\nelse\n    curl -fsSL https://get.netdata.cloud/kickstart.sh -o /tmp/netdata-kickstart.sh\n    bash /tmp/netdata-kickstart.sh --non-interactive --stable-channel\n    rm -f /tmp/netdata-kickstart.sh\n    echo \"  Netdata 安装完成\"\nfi\n\n# 3. 设置 Netdata OOM 保护\necho \"[3/3] 配置 OOM 保护...\"\nOOM_CONF_DIR=\"/etc/systemd/system/netdata.service.d\"\nOOM_CONF_FILE=\"${OOM_CONF_DIR}/oom.conf\"\n\nif [ -f \"${OOM_CONF_FILE}\" ]; then\n    echo \"  OOM 保护已配置，跳过\"\nelse\n    mkdir -p ${OOM_CONF_DIR}\n    cat > ${OOM_CONF_FILE} << 'EOF'\n[Service]\nOOMScoreAdjust=-1000\nEOF\n    systemctl daemon-reload\n    systemctl restart netdata\n    echo \"  OOM 保护配置完成\"\nfi\n\necho \"\"\necho \"========== 配置完成 ==========\"\necho \"Swap:    $(swapon --show --bytes | awk 'NR==2{print $3/1024/1024/1024 \" GB\"}')\"\necho \"Netdata: http://$(hostname -I | awk '{print $1}'):19999\"\necho \"\"\n"
  },
  {
    "path": "docker/scripts/test-pg-ivm.sh",
    "content": "#!/bin/bash\n# pg_ivm 安装验证测试\n# 在 Docker 容器中测试 install-pg-ivm.sh 的安装流程\nset -e\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"$0\")\" && pwd)\"\nCONTAINER_NAME=\"pg_ivm_test_$$\"\nIMAGE_NAME=\"postgres:15\"\n\necho \"==========================================\"\necho \"pg_ivm 安装验证测试\"\necho \"==========================================\"\n\n# 清理函数\ncleanup() {\n    echo \"\"\n    echo \"[清理] 删除测试容器...\"\n    docker rm -f \"$CONTAINER_NAME\" 2>/dev/null || true\n}\ntrap cleanup EXIT\n\n# 1. 启动临时容器\necho \"\"\necho \"[1/5] 启动临时 PostgreSQL 容器...\"\ndocker run -d --name \"$CONTAINER_NAME\" \\\n    -e POSTGRES_PASSWORD=test \\\n    -e POSTGRES_USER=postgres \\\n    -e POSTGRES_DB=testdb \\\n    -e PG_VERSION=15 \\\n    \"$IMAGE_NAME\"\n\necho \"等待 PostgreSQL 启动...\"\nsleep 10\n\nif ! docker ps | grep -q \"$CONTAINER_NAME\"; then\n    echo \"错误: 容器启动失败\"\n    exit 1\nfi\n\n# 2. 复制并执行安装脚本\necho \"\"\necho \"[2/5] 执行 pg_ivm 安装脚本...\"\ndocker cp \"$SCRIPT_DIR/install-pg-ivm.sh\" \"$CONTAINER_NAME:/tmp/install-pg-ivm.sh\"\n\n# 在容器内模拟安装（跳过 systemctl 重启，手动重启容器）\ndocker exec \"$CONTAINER_NAME\" bash -c \"\nset -e\nexport PG_VERSION=15\n\necho '安装编译依赖...'\napt-get update -qq\napt-get install -y -qq build-essential postgresql-server-dev-15 git\n\necho '编译安装 pg_ivm...'\nrm -rf /tmp/pg_ivm\ngit clone --quiet https://github.com/sraoss/pg_ivm.git /tmp/pg_ivm\ncd /tmp/pg_ivm\nmake -s\nmake install -s\nrm -rf /tmp/pg_ivm\necho '✓ pg_ivm 编译安装完成'\n\"\n\n# 3. 配置 shared_preload_libraries 并重启\necho \"\"\necho \"[3/5] 配置 shared_preload_libraries...\"\ndocker exec \"$CONTAINER_NAME\" bash -c \"\necho \\\"shared_preload_libraries = 'pg_ivm'\\\" >> /var/lib/postgresql/data/postgresql.conf\n\"\necho \"重启 PostgreSQL...\"\ndocker restart \"$CONTAINER_NAME\"\nsleep 8\n\n# 4. 验证扩展是否可用\necho \"\"\necho \"[4/5] 验证 pg_ivm 扩展...\"\ndocker exec \"$CONTAINER_NAME\" psql -U postgres -d testdb -c \"CREATE EXTENSION IF NOT EXISTS pg_ivm;\" > /dev/null 2>&1\n\nEXTENSION_EXISTS=$(docker exec \"$CONTAINER_NAME\" psql -U postgres -d testdb -t -c \"SELECT COUNT(*) FROM pg_extension WHERE extname = 'pg_ivm';\")\nif [ \"$(echo $EXTENSION_EXISTS | tr -d ' ')\" != \"1\" ]; then\n    echo \"错误: pg_ivm 扩展未正确加载\"\n    exit 1\nfi\necho \"✓ pg_ivm 扩展已加载\"\n\n# 5. 测试 IMMV 功能\necho \"\"\necho \"[5/5] 测试 IMMV 增量更新功能...\"\ndocker exec \"$CONTAINER_NAME\" psql -U postgres -d testdb -c \"\nCREATE TABLE test_table (id SERIAL PRIMARY KEY, name TEXT, value INTEGER);\nSELECT pgivm.create_immv('test_immv', 'SELECT id, name, value FROM test_table');\nINSERT INTO test_table (name, value) VALUES ('test1', 100);\nINSERT INTO test_table (name, value) VALUES ('test2', 200);\n\" > /dev/null 2>&1\n\nIMMV_COUNT=$(docker exec \"$CONTAINER_NAME\" psql -U postgres -d testdb -t -c \"SELECT COUNT(*) FROM test_immv;\")\nif [ \"$(echo $IMMV_COUNT | tr -d ' ')\" != \"2\" ]; then\n    echo \"错误: IMMV 增量更新失败，期望 2 行，实际 $(echo $IMMV_COUNT | tr -d ' ') 行\"\n    exit 1\nfi\necho \"✓ IMMV 增量更新正常 (2 行数据)\"\n\n# 测试更新\ndocker exec \"$CONTAINER_NAME\" psql -U postgres -d testdb -c \"UPDATE test_table SET value = 150 WHERE name = 'test1';\" > /dev/null 2>&1\nUPDATED_VALUE=$(docker exec \"$CONTAINER_NAME\" psql -U postgres -d testdb -t -c \"SELECT value FROM test_immv WHERE name = 'test1';\")\nif [ \"$(echo $UPDATED_VALUE | tr -d ' ')\" != \"150\" ]; then\n    echo \"错误: IMMV 更新同步失败\"\n    exit 1\nfi\necho \"✓ IMMV 更新同步正常\"\n\n# 测试删除\ndocker exec \"$CONTAINER_NAME\" psql -U postgres -d testdb -c \"DELETE FROM test_table WHERE name = 'test2';\" > /dev/null 2>&1\nIMMV_COUNT_AFTER=$(docker exec \"$CONTAINER_NAME\" psql -U postgres -d testdb -t -c \"SELECT COUNT(*) FROM test_immv;\")\nif [ \"$(echo $IMMV_COUNT_AFTER | tr -d ' ')\" != \"1\" ]; then\n    echo \"错误: IMMV 删除同步失败\"\n    exit 1\nfi\necho \"✓ IMMV 删除同步正常\"\n\necho \"\"\necho \"==========================================\"\necho \"✓ 所有测试通过\"\necho \"==========================================\"\necho \"\"\necho \"pg_ivm 安装验证成功，可以继续构建自定义 PostgreSQL 镜像\"\n"
  },
  {
    "path": "docker/server/Dockerfile",
    "content": "FROM python:3.10-slim-bookworm\n\nWORKDIR /app\n\n# 安装系统依赖 (用于编译某些 Python 包)\nRUN apt-get update && apt-get install -y \\\n    gcc \\\n    libpq-dev \\\n    curl \\\n    git \\\n    && rm -rf /var/lib/apt/lists/*\n\n# 安装 Docker CLI（用于本地 Worker 任务分发）\n# 只安装 docker-ce-cli，避免安装完整 Docker 引擎\nRUN apt-get update && \\\n    apt-get install -y ca-certificates gnupg && \\\n    install -m 0755 -d /etc/apt/keyrings && \\\n    curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \\\n    chmod a+r /etc/apt/keyrings/docker.gpg && \\\n    echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian bookworm stable\" > /etc/apt/sources.list.d/docker.list && \\\n    apt-get update && \\\n    apt-get install -y docker-ce-cli && \\\n    rm -rf /var/lib/apt/lists/*\n\n# 安装 uv（超快的 Python 包管理器）\nRUN pip install uv\n\n# 安装 Python 依赖（使用 uv 并行下载，速度快 10-100 倍）\nCOPY backend/requirements.txt .\nRUN --mount=type=cache,target=/root/.cache/uv \\\n    uv pip install --system -r requirements.txt\n\n# 复制后端代码\nCOPY backend /app/backend\nENV PYTHONPATH=/app/backend\n\n# 暴露端口\n# 8888: Django/uvicorn\nEXPOSE 8888\n\n# 复制启动脚本\nCOPY docker/server/start.sh /app/start.sh\nRUN chmod +x /app/start.sh\n\nCMD [\"/app/start.sh\"]\n"
  },
  {
    "path": "docker/server/start.sh",
    "content": "#!/bin/bash\nset -e\n\necho \"[START] 启动 XingRin Server...\"\n\n# 1. 执行数据库迁移（迁移文件应提交到仓库，这里只执行 migrate）\necho \"  [1/3] 执行数据库迁移...\"\ncd /app/backend\npython manage.py migrate --noinput\necho \"  ✓ 数据库迁移完成\"\n\necho \"  [1.1/3] 初始化默认扫描引擎...\"\npython manage.py init_default_engine --force\necho \"  ✓ 默认扫描引擎已就绪\"\n\necho \"  [1.2/3] 初始化默认目录字典...\"\npython manage.py init_wordlists\necho \"  ✓ 默认目录字典已就绪\"\n\necho \"  [1.3/3] 初始化默认指纹库...\"\npython manage.py init_fingerprints\necho \"  ✓ 默认指纹库已就绪\"\n\n# 2. 启动 Django uvicorn 服务 (ASGI)\n# 定时任务由内置 APScheduler 处理，在 Django 启动时自动启动\necho \"  [2/3] 启动 Django uvicorn (ASGI)...\"\nuvicorn config.asgi:application --host 0.0.0.0 --port 8888\n"
  },
  {
    "path": "docker/start.sh",
    "content": "#!/bin/bash\nset -e\n\ncd \"$(dirname \"$0\")\"\n\n# 颜色定义\nRED='\\033[0;31m'\nGREEN='\\033[0;32m'\nYELLOW='\\033[1;33m'\nBLUE='\\033[0;34m'\nCYAN='\\033[0;36m'\nBOLD='\\033[1m'\nNC='\\033[0m'\n\n# 解析参数\nWITH_FRONTEND=true\nDEV_MODE=false\nQUIET_MODE=false\nfor arg in \"$@\"; do\n    case $arg in\n        --no-frontend) WITH_FRONTEND=false ;;\n        --dev) DEV_MODE=true ;;\n        --quiet) QUIET_MODE=true ;;\n    esac\ndone\n\n# 选择 compose 文件\nif [ \"$DEV_MODE\" = true ]; then\n    COMPOSE_FILE=\"docker-compose.dev.yml\"\n    echo -e \"${YELLOW}[MODE]${NC} 开发模式 - 本地构建镜像\"\nelse\n    COMPOSE_FILE=\"docker-compose.yml\"\n    echo -e \"${GREEN}[MODE]${NC} 生产模式 - 使用 Docker Hub 镜像\"\nfi\n\n# 检查 Docker 环境\nif ! command -v docker >/dev/null 2>&1; then\n    echo -e \"${RED}[ERROR]${NC} 未检测到 docker 命令，请先安装 Docker\"\n    exit 1\nfi\n\nif ! docker info >/dev/null 2>&1; then\n    echo -e \"${RED}[ERROR]${NC} Docker 守护进程未运行，请先启动 Docker\"\n    exit 1\nfi\n\nif docker compose version >/dev/null 2>&1; then\n    COMPOSE_CMD=\"docker compose\"\nelif command -v docker-compose >/dev/null 2>&1; then\n    COMPOSE_CMD=\"docker-compose\"\nelse\n    echo -e \"${RED}[ERROR]${NC} 未检测到 docker compose，请先安装\"\n    exit 1\nfi\n\n# 检查配置文件\nif [ ! -f .env ]; then\n    echo -e \"${RED}[ERROR]${NC} 未找到 .env 配置文件\"\n    echo \"    请先复制 .env.example 为 .env 并配置\"\n    exit 1\nfi\n\n# 确保数据目录存在\nDATA_DIR=\"/opt/xingrin\"\nif [ ! -d \"$DATA_DIR/results\" ] || [ ! -d \"$DATA_DIR/logs\" ]; then\n    echo -e \"${CYAN}[INIT]${NC} 创建数据目录: $DATA_DIR\"\n    sudo mkdir -p \"$DATA_DIR/results\" \"$DATA_DIR/logs\"\n    sudo chmod -R 755 \"$DATA_DIR\"\nfi\n\n# 读取数据库配置\nDB_HOST=$(grep -E \"^DB_HOST=\" .env | cut -d'=' -f2 | tr -d ' \"'\"'\" || echo \"postgres\")\n\nif [[ \"$DB_HOST\" == \"postgres\" || \"$DB_HOST\" == \"localhost\" || \"$DB_HOST\" == \"127.0.0.1\" ]]; then\n    echo -e \"${CYAN}[DB]${NC} 使用本地 PostgreSQL 容器\"\n    PROFILE_ARG=\"--profile local-db\"\nelse\n    echo -e \"${CYAN}[DB]${NC} 使用远程 PostgreSQL: $DB_HOST\"\n    PROFILE_ARG=\"\"\nfi\n\n# 启动服务（启用 BuildKit 缓存 + 并行构建加速）\nexport DOCKER_BUILDKIT=1\nexport COMPOSE_DOCKER_CLI_BUILD=1\nexport BUILDKIT_INLINE_CACHE=1\n\n# 使用指定的 compose 文件\nCOMPOSE_ARGS=\"-f ${COMPOSE_FILE} ${PROFILE_ARG}\"\n\nSERVICES=\"$(${COMPOSE_CMD} ${COMPOSE_ARGS} config --services)\"\nservice_exists() {\n    echo \"$SERVICES\" | grep -qx \"$1\"\n}\n\nBACKEND_SERVICES=()\nfor s in redis server agent; do\n    if service_exists \"$s\"; then\n        BACKEND_SERVICES+=(\"$s\")\n    fi\ndone\n\n# 如果使用本地数据库，先启动 postgres 并等待健康\nstart_postgres_first() {\n    if [ -n \"$PROFILE_ARG\" ]; then\n        echo -e \"${CYAN}[DB]${NC} 启动 PostgreSQL 容器...\"\n        ${COMPOSE_CMD} ${COMPOSE_ARGS} up -d postgres\n        echo -e \"${CYAN}[DB]${NC} 等待 PostgreSQL 就绪...\"\n        local max_wait=30\n        local count=0\n        while [ $count -lt $max_wait ]; do\n            if ${COMPOSE_CMD} ${COMPOSE_ARGS} exec -T postgres pg_isready -U postgres >/dev/null 2>&1; then\n                echo -e \"${GREEN}[DB]${NC} PostgreSQL 已就绪\"\n                return 0\n            fi\n            sleep 1\n            count=$((count + 1))\n        done\n        echo -e \"${YELLOW}[WARN]${NC} PostgreSQL 等待超时，继续启动其他服务...\"\n    fi\n}\n\necho \"\"\nif [ \"$DEV_MODE\" = true ]; then\n    # 开发模式：本地构建\n    if [ \"$WITH_FRONTEND\" = true ]; then\n        echo -e \"${CYAN}[BUILD]${NC} 并行构建镜像...\"\n        ${COMPOSE_CMD} ${COMPOSE_ARGS} build --parallel\n        start_postgres_first\n        echo -e \"${CYAN}[START]${NC} 启动全部服务...\"\n        ${COMPOSE_CMD} ${COMPOSE_ARGS} up -d\n    else\n        echo -e \"${CYAN}[BUILD]${NC} 并行构建后端镜像...\"\n        ${COMPOSE_CMD} ${COMPOSE_ARGS} build --parallel \"${BACKEND_SERVICES[@]}\"\n        start_postgres_first\n        echo -e \"${CYAN}[START]${NC} 启动后端服务...\"\n        ${COMPOSE_CMD} ${COMPOSE_ARGS} up -d \"${BACKEND_SERVICES[@]}\"\n    fi\nelse\n    # 生产模式：拉取 Docker Hub 镜像\n    # pull 后 up -d 会自动检测镜像变化并重建容器\n    if [ \"$WITH_FRONTEND\" = true ]; then\n        echo -e \"${CYAN}[PULL]${NC} 拉取最新镜像...\"\n        ${COMPOSE_CMD} ${COMPOSE_ARGS} pull\n        start_postgres_first\n        echo -e \"${CYAN}[START]${NC} 启动全部服务...\"\n        ${COMPOSE_CMD} ${COMPOSE_ARGS} up -d\n    else\n        echo -e \"${CYAN}[PULL]${NC} 拉取后端镜像...\"\n        ${COMPOSE_CMD} ${COMPOSE_ARGS} pull \"${BACKEND_SERVICES[@]}\"\n        start_postgres_first\n        echo -e \"${CYAN}[START]${NC} 启动后端服务...\"\n        ${COMPOSE_CMD} ${COMPOSE_ARGS} up -d \"${BACKEND_SERVICES[@]}\"\n    fi\nfi\necho -e \"${GREEN}[OK]${NC} 服务已启动\"\n\n# 数据初始化\nif [ \"$DEV_MODE\" = true ]; then\n    ./scripts/init-data.sh --dev\nelse\n    ./scripts/init-data.sh\nfi\n\n# 静默模式下不显示结果（由调用方显示）\nif [ \"$QUIET_MODE\" = true ]; then\n    exit 0\nfi\n\n# 获取访问地址\nPUBLIC_HOST=$(grep \"^PUBLIC_HOST=\" .env 2>/dev/null | cut -d= -f2)\nif [ -n \"$PUBLIC_HOST\" ] && [ \"$PUBLIC_HOST\" != \"server\" ]; then\n    ACCESS_HOST=\"$PUBLIC_HOST\"\nelse\n    ACCESS_HOST=\"localhost\"\nfi\n\n# 显示结果\necho \"\"\necho -e \"${BOLD}${GREEN}════════════════════════════════════════${NC}\"\necho -e \"${BOLD}${GREEN}  服务启动成功！${NC}\"\necho -e \"${BOLD}${GREEN}════════════════════════════════════════${NC}\"\necho \"\"\necho -e \"${BOLD}访问地址${NC}\"\nif [ \"$WITH_FRONTEND\" = true ]; then\n    echo -e \"  XingRin:  ${CYAN}https://${ACCESS_HOST}:8083/${NC}\"\n    echo -e \"  ${YELLOW}(HTTP 会自动跳转到 HTTPS)${NC}\"\nelse\n    echo -e \"  API:      ${CYAN}通过前端或 nginx 访问（后端未暴露 8888）${NC}\"\n    echo \"\"\n    echo -e \"${YELLOW}[TIP]${NC} 前端未启动，请手动运行:\"\n    echo \"      cd frontend && pnpm dev\"\nfi\necho \"\"\n"
  },
  {
    "path": "docker/stop.sh",
    "content": "#!/bin/bash\nset -e\n\ncd \"$(dirname \"$0\")\"\nsource \"./scripts/common.sh\"\ninit_docker_env\n\n# 颜色\nCYAN='\\033[0;36m'\nGREEN='\\033[0;32m'\nNC='\\033[0m'\n\necho -e \"${CYAN}[STOP]${NC} 停止服务...\"\n\n# 尝试停止两种模式的容器（生产模式和开发模式）\nif [ -f \"docker-compose.yml\" ]; then\n    ${COMPOSE_CMD} -f docker-compose.yml down 2>/dev/null || true\nfi\nif [ -f \"docker-compose.dev.yml\" ]; then\n    ${COMPOSE_CMD} -f docker-compose.dev.yml down 2>/dev/null || true\nfi\n\necho -e \"${GREEN}[OK]${NC} 服务已停止\"\n"
  },
  {
    "path": "docker/worker/Dockerfile",
    "content": "# 第一阶段：使用 Go 官方镜像编译工具\nFROM golang:1.24 AS go-builder\n\nENV GOPROXY=https://goproxy.cn,direct\n# Naabu 需要 CGO 和 libpcap\nENV CGO_ENABLED=1\n\n# 安装编译依赖（libpcap-dev 用于 naabu，git/build-essential 用于编译 massdns）\nRUN apt-get update && apt-get install -y \\\n    libpcap-dev \\\n    git \\\n    build-essential \\\n    && rm -rf /var/lib/apt/lists/*\n\n# 安装 massdns（puredns 依赖）\nRUN git clone https://github.com/blechschmidt/massdns.git /tmp/massdns && \\\n    cd /tmp/massdns && \\\n    make && \\\n    cp bin/massdns /usr/local/bin/massdns\n\n# 安装 ProjectDiscovery 等 Go 工具（需要 CGO 的工具如 naabu）\nRUN go install -v github.com/projectdiscovery/httpx/cmd/httpx@latest && \\\n    go install -v github.com/projectdiscovery/naabu/v2/cmd/naabu@latest && \\\n    go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest && \\\n    go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest && \\\n    go install -v github.com/projectdiscovery/katana/cmd/katana@latest && \\\n    go install -v github.com/tomnomnom/assetfinder@latest && \\\n    go install -v github.com/ffuf/ffuf/v2@latest && \\\n    go install -v github.com/d3mondev/puredns/v2@latest && \\\n    go install -v github.com/yyhuni/xingfinger@latest\n\n# 安装漏洞扫描器\nRUN go install github.com/hahwul/dalfox/v2@latest\n\n# 第二阶段：运行时镜像\nFROM ubuntu:24.04\n\n# 避免交互式提示\nENV DEBIAN_FRONTEND=noninteractive\n\n# 设置工作目录\nWORKDIR /app\n\n# 1. 安装基础工具和 Python\n# 注意：ARM64 使用 ports.ubuntu.com，可能存在镜像同步延迟，需要重试机制\nRUN apt-get update && \\\n    apt-get install -y --no-install-recommends \\\n    python3 \\\n    python3-pip \\\n    python3-venv \\\n    pipx \\\n    git \\\n    curl \\\n    wget \\\n    unzip \\\n    jq \\\n    tmux \\\n    nmap \\\n    masscan \\\n    libpcap-dev \\\n    ca-certificates \\\n    fonts-liberation \\\n    libnss3 \\\n    libxss1 \\\n    libasound2t64 \\\n    || (rm -rf /var/lib/apt/lists/* && apt-get update && apt-get install -y --no-install-recommends \\\n    python3 python3-pip python3-venv pipx git curl wget unzip jq tmux nmap masscan libpcap-dev \\\n    ca-certificates fonts-liberation libnss3 libxss1 libasound2t64) \\\n    && rm -rf /var/lib/apt/lists/*\n\n# 安装 Chromium（通过 Playwright 安装，支持 ARM64 和 AMD64）\n# Ubuntu 24.04 的 chromium-browser 是 snap 过渡包，Docker 中不可用\nRUN pip install playwright --break-system-packages && \\\n    playwright install chromium && \\\n    apt-get update && \\\n    playwright install-deps chromium && \\\n    rm -rf /var/lib/apt/lists/*\n\n# 设置 Chrome 路径供 httpx 等工具使用（Playwright 安装位置）\nENV CHROME_PATH=/root/.cache/ms-playwright/chromium-*/chrome-linux/chrome\n# 创建软链接确保 httpx 的 -system-chrome 能找到浏览器\nRUN CHROME_BIN=$(find /root/.cache/ms-playwright -name chrome -type f 2>/dev/null | head -1) && \\\n    ln -sf \"$CHROME_BIN\" /usr/bin/chromium-browser && \\\n    ln -sf \"$CHROME_BIN\" /usr/bin/chromium && \\\n    ln -sf \"$CHROME_BIN\" /usr/bin/chrome && \\\n    ln -sf \"$CHROME_BIN\" /usr/bin/google-chrome-stable\n\n# 建立 python 软链接\nRUN ln -s /usr/bin/python3 /usr/bin/python\n\n# 2. 使用 pipx 安装 Python 扫描工具\nENV PATH=\"/root/.local/bin:$PATH\"\nRUN pipx install uro && \\\n    pipx install waymore && \\\n    pipx install dnsgen\n\n# 3. 安装 Sublist3r（Python 脚本工具，放在 /usr/local/share 标准目录）\nRUN git clone https://github.com/aboul3la/Sublist3r.git /usr/local/share/Sublist3r && \\\n    pip3 install --no-cache-dir -r /usr/local/share/Sublist3r/requirements.txt --break-system-packages\n\n# 4. 从 go-builder 阶段复制 Go 环境和编译好的工具\n# 创建项目专用工具目录（符合 FHS 标准，/opt 用于独立软件包）\n# 避免与系统工具或 Python 包冲突，避免被 /opt/xingrin 挂载覆盖\nRUN mkdir -p /opt/xingrin-tools/bin\n\nENV GOPATH=/root/go\nENV GOPROXY=https://goproxy.cn,direct\n\nCOPY --from=go-builder /usr/local/go /usr/local/go\n\n# 从 go-builder 复制扫描工具到专用目录（避免与系统工具或 Python 包冲突）\nCOPY --from=go-builder /go/bin/* /opt/xingrin-tools/bin/\nCOPY --from=go-builder /usr/local/bin/massdns /opt/xingrin-tools/bin/massdns\n\n# 将专用工具目录添加到 PATH（优先级高于 /usr/local/bin，避免冲突）\nENV PATH=/opt/xingrin-tools/bin:/usr/local/go/bin:/usr/local/bin:$PATH:$GOPATH/bin\n\n# 5. 安装 uv（ Python 包管理器）并安装 Python 依赖\nCOPY backend/requirements.txt .\nRUN pip install uv --break-system-packages && \\\n    uv pip install --system -r requirements.txt --break-system-packages && \\\n    rm -f /usr/local/lib/python3.*/dist-packages/argparse.py && \\\n    rm -rf /usr/local/lib/python3.*/dist-packages/__pycache__/argparse* && \\\n    rm -rf /root/.cache/uv && \\\n    apt-get clean && \\\n    rm -rf /var/lib/apt/lists/*\n\n# 6. 设置 Prefect 配置目录（避免 home 目录不存在的警告）\nENV PREFECT_HOME=/app/.prefect\nRUN mkdir -p /app/.prefect\n\n# 7. 复制后端代码\nCOPY backend /app/backend\nENV PYTHONPATH=/app/backend\n\n# 工作目录设置为 backend，方便运行 python -m 命令\nWORKDIR /app/backend\n\n# 默认命令（实际由 TaskDistributor 指定具体脚本）\nCMD [\"python\", \"--version\"]\n"
  },
  {
    "path": "docker-push.sh",
    "content": "#!/bin/bash\n\n# 目前采用github action自动版本构建，用\n# git tag v1.0.9\n# git push origin v1.0.9\n# ============================================\n# Docker Hub 镜像推送脚本\n# 用途：构建并推送所有服务镜像到 Docker Hub\n\n# 多架构构建：./docker-push.sh -p linux/amd64,linux/arm64 worker\n# ============================================\n\nset -e\n\n# 启用 BuildKit（支持高级缓存功能）\nexport DOCKER_BUILDKIT=1\n\n# ==================== 配置 ====================\n# 切换到脚本所在目录（项目根目录）\nSCRIPT_DIR=\"$(cd \"$(dirname \"$0\")\" && pwd)\"\n\n# 从 Git Tag 获取版本号（必须有 tag 才能构建）\nget_version() {\n    local tag\n    tag=$(git describe --tags --exact-match 2>/dev/null)\n    if [ -n \"$tag\" ]; then\n        echo \"$tag\"\n    else\n        echo -e \"\\033[0;31m[ERROR]\\033[0m 当前 commit 没有 Git Tag，无法构建\"\n        echo \"    请先打 tag: git tag v1.x.x && git push --tags\"\n        exit 1\n    fi\n}\n\nGIT_VERSION=$(get_version)\n\n# Docker Hub 用户名（修改为你的用户名）\nDOCKER_USER=\"${DOCKER_USER:-yyhuni}\"\n# 镜像版本标签（从 Git Tag 获取）\nVERSION=\"$GIT_VERSION\"\n# 是否推送（默认 yes，设为 no 则只构建不推送）\nPUSH=\"${PUSH:-yes}\"\n# 构建平台（默认当前架构，可设为 linux/amd64,linux/arm64 进行多架构构建）\nPLATFORM=\"${PLATFORM:-}\"\n\n# 镜像列表\nIMAGES=(\n    \"xingrin-server:docker/server/Dockerfile\"\n    \"xingrin-frontend:docker/frontend/Dockerfile\"\n    \"xingrin-nginx:docker/nginx/Dockerfile\"\n    \"xingrin-worker:docker/worker/Dockerfile\"\n    \"xingrin-agent:docker/agent/Dockerfile\"\n)\n\n# 颜色\nRED='\\033[0;31m'\nGREEN='\\033[0;32m'\nYELLOW='\\033[0;33m'\nBLUE='\\033[0;34m'\nNC='\\033[0m'\n\nlog_info() { echo -e \"${BLUE}[INFO]${NC} $1\"; }\nlog_success() { echo -e \"${GREEN}[OK]${NC} $1\"; }\nlog_warn() { echo -e \"${YELLOW}[WARN]${NC} $1\"; }\nlog_error() { echo -e \"${RED}[ERROR]${NC} $1\"; }\n\n# ==================== 帮助信息 ====================\nshow_help() {\n    cat << EOF\n用法: $0 [选项] [镜像名...]\n\n版本号从 Git Tag 自动获取，无 tag 时使用 dev-<commit>。\n\n选项:\n  -u, --user USER      Docker Hub 用户名 (默认: $DOCKER_USER)\n  -p, --platform PLAT  构建平台 (如: linux/amd64,linux/arm64)\n  --no-push            只构建不推送\n  -h, --help           显示帮助\n\n镜像名 (可选，不指定则构建全部):\n  server    后端服务\n  frontend  前端服务\n  nginx     Nginx 反向代理\n  worker    扫描 Worker\n  agent     心跳上报 Agent（轻量）\n\n示例:\n  $0                             # 构建并推送所有镜像\n  $0 server frontend             # 只构建 server 和 frontend\n  $0 --no-push                   # 只构建不推送\n  $0 -p linux/amd64,linux/arm64  # 多架构构建\n\n环境变量:\n  DOCKER_USER   Docker Hub 用户名\n  PUSH          是否推送 (yes/no)\n  PLATFORM      构建平台\nEOF\n    exit 0\n}\n\n# ==================== 解析参数 ====================\nSELECTED_IMAGES=()\n\nwhile [[ $# -gt 0 ]]; do\n    case $1 in\n        -u|--user)\n            DOCKER_USER=\"$2\"\n            shift 2\n            ;;\n        -p|--platform)\n            PLATFORM=\"$2\"\n            shift 2\n            ;;\n        --no-push)\n            PUSH=\"no\"\n            shift\n            ;;\n        -h|--help)\n            show_help\n            ;;\n        server|frontend|nginx|worker|agent)\n            SELECTED_IMAGES+=(\"$1\")\n            shift\n            ;;\n        *)\n            log_error \"未知参数: $1\"\n            show_help\n            ;;\n    esac\ndone\n\n# ==================== 检查 Docker 登录 ====================\ncheck_docker_login() {\n    if [ \"$PUSH\" = \"yes\" ]; then\n        log_info \"检查 Docker Hub 登录状态...\"\n        if ! docker info 2>/dev/null | grep -q \"Username\"; then\n            log_warn \"未登录 Docker Hub，请先执行: docker login\"\n            read -p \"是否现在登录？(y/n) \" -n 1 -r\n            echo\n            if [[ $REPLY =~ ^[Yy]$ ]]; then\n                docker login\n            else\n                log_error \"需要登录才能推送镜像\"\n                exit 1\n            fi\n        fi\n        log_success \"Docker Hub 已登录\"\n    fi\n}\n\n# ==================== 构建镜像 ====================\nbuild_image() {\n    local name=$1\n    local dockerfile=$2\n    local full_name=\"${DOCKER_USER}/${name}:${VERSION}\"\n    \n    log_info \"构建镜像: $full_name\"\n    log_info \"  Dockerfile: $dockerfile\"\n    \n    # 构建命令\n    local build_cmd=\"docker build\"\n    \n    # 多架构构建使用 buildx\n    if [ -n \"$PLATFORM\" ]; then\n        build_cmd=\"docker buildx build --platform $PLATFORM\"\n        if [ \"$PUSH\" = \"yes\" ]; then\n            build_cmd=\"$build_cmd --push\"\n        fi\n    fi\n    \n    # 执行构建（只打版本标签，不打 latest）\n    $build_cmd \\\n        -t \"$full_name\" \\\n        -f \"$dockerfile\" \\\n        .\n    \n    if [ $? -eq 0 ]; then\n        log_success \"构建成功: $full_name\"\n    else\n        log_error \"构建失败: $full_name\"\n        exit 1\n    fi\n    \n    # 推送（非 buildx 模式）\n    if [ \"$PUSH\" = \"yes\" ] && [ -z \"$PLATFORM\" ]; then\n        log_info \"推送镜像: $full_name\"\n        docker push \"$full_name\"\n        log_success \"推送成功: $full_name\"\n    fi\n}\n\n# ==================== 主流程 ====================\nmain() {\n    echo \"\"\n    echo \"==========================================\"\n    echo \"  Docker Hub 镜像构建与推送\"\n    echo \"==========================================\"\n    echo \"\"\n    log_info \"用户: $DOCKER_USER\"\n    log_warn \"版本: ${VERSION}\"\n    log_info \"推送: $PUSH\"\n    [ -n \"$PLATFORM\" ] && log_info \"平台: $PLATFORM\"\n    echo \"\"\n    \n    # 确认版本号，防止误覆盖\n    if [ \"$PUSH\" = \"yes\" ]; then\n        echo -e \"${YELLOW}[!] 请确认版本号 ${VERSION} 是否正确${NC}\"\n        echo -e \"${YELLOW}    如需修改，请打新的 Git Tag: git tag v1.x.x${NC}\"\n        echo -e \"${RED}    覆盖版本号会导致所有用户的旧版本拉取出现问题！！！${NC}\"\n        read -p \"确认推送？(y/N) \" -n 1 -r\n        echo\n        if [[ ! $REPLY =~ ^[Yy]$ ]]; then\n            log_info \"已取消\"\n            exit 0\n        fi\n    fi\n    \n    check_docker_login\n    \n    # 切换到项目根目录\n    cd \"$(dirname \"$0\")\"\n    \n    # 如果指定了特定镜像，只构建那些\n    if [ ${#SELECTED_IMAGES[@]} -gt 0 ]; then\n        for sel in \"${SELECTED_IMAGES[@]}\"; do\n            for item in \"${IMAGES[@]}\"; do\n                name=\"${item%%:*}\"\n                dockerfile=\"${item##*:}\"\n                if [[ \"$name\" == \"xingrin-$sel\" ]]; then\n                    build_image \"$name\" \"$dockerfile\"\n                fi\n            done\n        done\n    else\n        # 构建所有镜像\n        for item in \"${IMAGES[@]}\"; do\n            name=\"${item%%:*}\"\n            dockerfile=\"${item##*:}\"\n            build_image \"$name\" \"$dockerfile\"\n        done\n    fi\n    \n    echo \"\"\n    echo \"==========================================\"\n    log_success \"  完成！\"\n    echo \"==========================================\"\n    echo \"\"\n    \n    if [ \"$PUSH\" = \"yes\" ]; then\n        log_info \"镜像已推送到 Docker Hub:\"\n        for item in \"${IMAGES[@]}\"; do\n            name=\"${item%%:*}\"\n            echo \"  - docker pull ${DOCKER_USER}/${name}:${VERSION}\"\n        done\n    fi\n}\n\nmain\n"
  },
  {
    "path": "docs/README.md",
    "content": "# XingRin - 星环 技术文档\n\n## 文档目录\n\n### 架构设计\n- [版本管理架构](./version-management.md) - Git Tag 驱动的自动化版本管理系统\n- [安全检测模板架构](./nuclei-template-architecture.md) - 检测模板仓库的存储、同步、分发机制\n- [字典文件架构](./wordlist-architecture.md) - 字典文件的存储、同步、分发机制\n\n### 开发指南\n- [快速开始](./quick-start.md) - 一键安装和部署指南\n- API 文档（🚧 待补充）\n- 开发环境搭建（🚧 待补充）\n\n### 运维手册\n- 故障排查（待补充）\n- 性能优化（待补充）\n- 监控告警（待补充）\n\n## 快速导航\n\n### 常见问题\n- **版本不一致**：参考 [版本管理 - 故障排查](./version-management.md#故障排查)\n- **镜像拉取失败**：检查网络和 Docker Hub 连接\n- **远程 Worker 部署**：参考版本管理文档中的部署流程\n\n### 核心概念\n- **IMAGE_TAG**：版本锁定机制，确保所有组件版本一致\n- **--pull=missing**：镜像拉取策略，优先使用本地缓存\n- **task_distributor**：负载感知任务分发器\n\n## 贡献指南\n\n### 文档更新\n1. 新增功能时同步更新相关文档\n2. 使用 Mermaid 图表描述复杂流程\n3. 提供具体的命令示例和配置\n\n### 文档规范\n- 使用中文编写\n- 代码块标注语言类型\n- 重要概念使用**粗体**标注\n- 提供完整的示例和说明\n"
  },
  {
    "path": "docs/nuclei-template-architecture.md",
    "content": "# Nuclei 模板管理架构\n\n本文档介绍 XingRin 中 Nuclei 模板的存储、同步和使用机制。\n\n## 目录结构\n\n```\n/opt/xingrin/nuclei-repos/\n├── nuclei-templates/       # 官方模板仓库（按仓库名命名）\n│   ├── .git/\n│   ├── http/\n│   ├── network/\n│   └── ...\n└── custom-repo/            # 自定义模板仓库\n```\n\n## 一、存储位置\n\n| 配置项 | 默认值 | 说明 |\n|--------|--------|------|\n| `NUCLEI_TEMPLATES_REPOS_BASE_DIR` | `/opt/xingrin/nuclei-repos` | 模板仓库根目录 |\n\n每个模板仓库会在根目录下创建独立子目录，目录名由仓库名称 slugify 生成。\n\n## 二、数据模型\n\n```\nNucleiTemplateRepo\n├── id            # 仓库 ID\n├── name          # 仓库名称（用于前端展示和 Worker 查询）\n├── repo_url      # Git 仓库地址\n├── local_path    # 本地克隆路径（自动生成）\n├── commit_hash   # 当前同步的 commit hash\n└── last_synced_at # 最后同步时间\n```\n\n## 三、Server 端同步流程\n\n1. 用户在前端添加模板仓库（填写名称和 Git URL）\n2. 点击「同步」触发 `NucleiTemplateRepoService.refresh_repo()`\n3. 首次同步：`git clone --depth 1`（浅克隆，节省空间）\n4. 后续同步：`git pull --ff-only`（快进合并）\n5. 同步成功后更新数据库：`commit_hash`、`last_synced_at`\n\n```\n┌──────────────────────────────────────────────────────────────────────────┐\n│                           Server 容器                                     │\n│                                                                          │\n│  ┌─────────────────────────────────────────────────────────────────┐    │\n│  │                        前端 UI                                   │    │\n│  │  ┌──────────────┐    ┌──────────────┐    ┌──────────────┐       │    │\n│  │  │ 添加仓库     │    │ 同步仓库     │    │ 浏览模板     │       │    │\n│  │  │ name + url   │    │ 点击刷新     │    │ 目录树       │       │    │\n│  │  └──────┬───────┘    └──────┬───────┘    └──────────────┘       │    │\n│  └─────────┼───────────────────┼───────────────────────────────────┘    │\n│            │                   │                                         │\n│            ▼                   ▼                                         │\n│  ┌─────────────────────────────────────────────────────────────────┐    │\n│  │                  NucleiTemplateRepoViewSet                       │    │\n│  │         POST /api/nuclei/repos/  |  POST .../refresh/            │    │\n│  └─────────────────────────────┬───────────────────────────────────┘    │\n│                                │                                         │\n│                                ▼                                         │\n│  ┌─────────────────────────────────────────────────────────────────┐    │\n│  │                NucleiTemplateRepoService                         │    │\n│  │                                                                  │    │\n│  │  ┌────────────────────┐    ┌────────────────────────────────┐   │    │\n│  │  │ ensure_local_path()│    │ refresh_repo()                 │   │    │\n│  │  │ 生成本地目录路径   │    │ 执行 Git 同步                  │   │    │\n│  │  └────────────────────┘    └───────────────┬────────────────┘   │    │\n│  └────────────────────────────────────────────┼────────────────────┘    │\n│                                               │                          │\n│                               ┌───────────────┴───────────────┐         │\n│                               │                               │         │\n│                               ▼                               ▼         │\n│                    ┌─────────────────────┐      ┌─────────────────────┐ │\n│                    │ 首次同步（无 .git） │      │ 后续同步（有 .git） │ │\n│                    └──────────┬──────────┘      └──────────┬──────────┘ │\n│                               │                            │            │\n│                               ▼                            ▼            │\n│                    ┌─────────────────────┐      ┌─────────────────────┐ │\n│                    │ git clone --depth 1 │      │ git pull --ff-only  │ │\n│                    │ <repo_url>          │      │                     │ │\n│                    └──────────┬──────────┘      └──────────┬──────────┘ │\n│                               │                            │            │\n│                               └──────────────┬─────────────┘            │\n│                                              │                          │\n│                                              ▼                          │\n│                    ┌─────────────────────────────────────────────────┐  │\n│                    │ git rev-parse HEAD                              │  │\n│                    │ 获取当前 commit hash                            │  │\n│                    └──────────────────────────┬──────────────────────┘  │\n│                                               │                         │\n│                                               ▼                         │\n│  ┌─────────────────────────────────────────────────────────────────┐   │\n│  │                      PostgreSQL 数据库                           │   │\n│  │                                                                  │   │\n│  │  UPDATE nuclei_template_repo SET                                 │   │\n│  │      local_path = '/opt/xingrin/nuclei-repos/xxx',               │   │\n│  │      commit_hash = 'abc123...',                                  │   │\n│  │      last_synced_at = NOW()                                      │   │\n│  │  WHERE id = ?                                                    │   │\n│  └─────────────────────────────────────────────────────────────────┘   │\n│                                                                          │\n│  ┌─────────────────────────────────────────────────────────────────┐   │\n│  │                      文件系统                                    │   │\n│  │  /opt/xingrin/nuclei-repos/                                      │   │\n│  │  ├── nuclei-templates/     # 官方模板                            │   │\n│  │  │   ├── .git/                                                   │   │\n│  │  │   ├── http/                                                   │   │\n│  │  │   ├── network/                                                │   │\n│  │  │   └── ...                                                     │   │\n│  │  └── custom-repo/          # 自定义模板                          │   │\n│  └─────────────────────────────────────────────────────────────────┘   │\n│                                                                          │\n└──────────────────────────────────────────────────────────────────────────┘\n                                    │\n                                    │ git clone / pull\n                                    ▼\n                         ┌─────────────────────┐\n                         │   GitHub / GitLab   │\n                         │   远程 Git 仓库     │\n                         └─────────────────────┘\n```\n\n## 四、Worker 端同步流程\n\nWorker 执行扫描任务时，通过 `ensure_nuclei_templates_local()` 确保本地模板与 Server 版本一致：\n\n1. 从数据库查询仓库记录，获取 `repo_url` 和 `commit_hash`\n2. 检查本地是否存在仓库目录\n   - 不存在：`git clone --depth 1`\n   - 存在：比较本地 commit hash 与 Server 的 `commit_hash`\n3. 如果 commit 不一致：`git fetch` + `git checkout <commit_hash>`\n4. 返回本地模板目录路径，供 nuclei 命令使用\n\n```\n┌──────────────────────────────────────────────────────────────────────────┐\n│                           Worker 容器                                     │\n│                                                                          │\n│  ┌─────────────┐                                                         │\n│  │  扫描任务   │                                                         │\n│  │  开始执行   │                                                         │\n│  └──────┬──────┘                                                         │\n│         │                                                                │\n│         ▼                                                                │\n│  ┌─────────────────────────┐      ┌─────────────────────────────────┐   │\n│  │ ensure_nuclei_          │      │           PostgreSQL            │   │\n│  │ templates_local()       │─────▶│  查询 NucleiTemplateRepo 表     │   │\n│  │                         │      │  获取 repo_url, commit_hash     │   │\n│  └───────────┬─────────────┘      └─────────────────────────────────┘   │\n│              │                                                           │\n│              ▼                                                           │\n│  ┌─────────────────────────┐                                            │\n│  │ 检查本地 .git 目录      │                                            │\n│  └───────────┬─────────────┘                                            │\n│              │                                                           │\n│      ┌───────┴───────┐                                                  │\n│      │               │                                                  │\n│      ▼               ▼                                                  │\n│  ┌────────┐    ┌────────────┐                                           │\n│  │ 不存在 │    │   存在     │                                           │\n│  └───┬────┘    └─────┬──────┘                                           │\n│      │               │                                                  │\n│      ▼               ▼                                                  │\n│  ┌────────────┐  ┌─────────────────────┐                                │\n│  │ git clone  │  │ 比较 commit hash    │                                │\n│  │ --depth 1  │  │ local vs server     │                                │\n│  └─────┬──────┘  └──────────┬──────────┘                                │\n│        │                    │                                           │\n│        │            ┌───────┴───────┐                                   │\n│        │            │               │                                   │\n│        │            ▼               ▼                                   │\n│        │      ┌──────────┐   ┌──────────────┐                           │\n│        │      │  一致    │   │   不一致     │                           │\n│        │      │ 直接使用 │   │              │                           │\n│        │      └────┬─────┘   └───────┬──────┘                           │\n│        │           │                 │                                  │\n│        │           │                 ▼                                  │\n│        │           │         ┌──────────────────┐                       │\n│        │           │         │ git fetch origin │                       │\n│        │           │         │ git checkout     │                       │\n│        │           │         │ <commit_hash>    │                       │\n│        │           │         └────────┬─────────┘                       │\n│        │           │                  │                                 │\n│        ▼           ▼                  ▼                                 │\n│  ┌─────────────────────────────────────────────────────────────────┐   │\n│  │              返回本地模板目录路径                                │   │\n│  │         /opt/xingrin/nuclei-repos/<repo-name>/                  │   │\n│  └─────────────────────────────────────────────────────────────────┘   │\n│                                    │                                    │\n│                                    ▼                                    │\n│  ┌─────────────────────────────────────────────────────────────────┐   │\n│  │                    执行 nuclei 扫描                              │   │\n│  │         nuclei -t /opt/xingrin/nuclei-repos/xxx/ -l targets.txt │   │\n│  └─────────────────────────────────────────────────────────────────┘   │\n│                                                                          │\n└──────────────────────────────────────────────────────────────────────────┘\n```\n\n## 五、版本一致性保证\n\n- Server 同步时记录 `commit_hash`\n- Worker 使用前检查本地 hash 是否与 Server 一致\n- 不一致时自动同步到指定 commit\n- 确保所有节点使用相同版本的模板\n\n## 六、配置项\n\n在 `docker/.env` 或环境变量中配置：\n\n```bash\n# Nuclei 模板仓库根目录\nNUCLEI_TEMPLATES_REPOS_BASE_DIR=/opt/xingrin/nuclei-repos\n```\n\n## 七、常见问题\n\n### Q: Worker 报错「未找到模板仓库」？\n\nA: 需要先在 Server 端添加并同步模板仓库，Worker 通过数据库查询仓库信息。\n\n### Q: 如何添加自定义模板仓库？\n\nA: 在前端「Nuclei 模板」页面点击添加，填写仓库名称和 Git URL，然后点击同步即可。\n\n### Q: 模板更新后 Worker 如何获取最新版本？\n\nA: 在 Server 端点击「同步」更新模板，Worker 下次执行扫描时会检测到 commit hash 不一致并自动同步。\n"
  },
  {
    "path": "docs/plans/2026-03-08-oss-readiness-design.md",
    "content": "# XingRin OSS Readiness Design\n\n**Background**\n\nXingRin is an actively maintained open-source attack surface management and authorized security automation project. The repository currently has a standards issue: the root `LICENSE` file is GPL-3.0, while the public README still advertises `PolyForm NC`. This mismatch creates ambiguity for contributors, users, and external programs that evaluate open-source eligibility.\n\n**Goal**\n\nMake the repository clearly and consistently open source, reduce adoption friction, and improve its presentation for open-source program applications such as Codex for OSS.\n\n**Non-Goals**\n\n- No product feature changes\n- No backend or frontend behavior changes\n- No infrastructure refactors\n- No legal customizations beyond selecting a standard OSI-style license\n\n## Approach Options\n\n### Option 1: Keep GPL-3.0 and clean inconsistencies\n\nPros:\n- Lowest legal change risk\n- No relicensing concern if additional contributors exist\n- Still qualifies as a standard open-source license\n\nCons:\n- Higher downstream adoption friction\n- Less aligned with the stated goal of lowering usage barriers\n\n### Option 2: Relicense to MIT and clean inconsistencies **(Recommended)**\n\nPros:\n- Lowest friction for users, contributors, and evaluators\n- Simple, familiar, and unambiguous\n- Best fit for “make OSS status obvious and permissive” goal\n\nCons:\n- Removes copyleft protection\n- Requires confidence that relicensing authority is clear\n\n### Option 3: Relicense to Apache-2.0 and clean inconsistencies\n\nPros:\n- Permissive like MIT\n- Includes explicit patent grant language\n- Friendly for organizations evaluating adoption\n\nCons:\n- Slightly more complex than MIT\n- Provides little extra benefit for this repository’s immediate application goal\n\n## Chosen Design\n\nAdopt `MIT` as the single repository license and perform a full consistency cleanup.\n\n## Scope of Changes\n\n1. Replace the root `LICENSE` with MIT.\n2. Update README license badge and legal wording.\n3. Add clear “authorized/defensive use only” wording without adding non-open-source usage restrictions.\n4. Add `SECURITY.md` with reporting guidance.\n5. Add `CONTRIBUTING.md` with contribution process and relicensing note.\n6. Add `CODE_OF_CONDUCT.md` using a standard community format.\n7. Tighten README positioning for open-source maintenance and legitimate security workflows.\n8. Update repository metadata files that expose license information.\n\n## Risks and Mitigations\n\n- **Risk: accidental contradiction between permissive license and usage policy**  \n  Mitigation: keep “authorized use only” as project policy and ethics guidance, not as extra legal restrictions beyond MIT.\n\n- **Risk: relicensing history ambiguity**  \n  Mitigation: note contribution licensing expectations in `CONTRIBUTING.md`; rely on maintainer confirmation that substantive contributions are solely owned.\n\n- **Risk: repository still looks ambiguous to reviewers**  \n  Mitigation: align badge, license file, README language, and community docs in one pass.\n\n## Validation\n\n- Search repository for legacy license strings such as `PolyForm`, `Noncommercial`, and stale GPL wording references.\n- Confirm all newly added markdown files are present and coherent.\n- Optionally update GitHub repository metadata (description/topics/homepage) to better match the cleaned positioning.\n"
  },
  {
    "path": "docs/plans/2026-03-08-oss-readiness.md",
    "content": "# XingRin OSS Readiness Implementation Plan\n\n> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.\n\n**Goal:** Make the XingRin repository clearly permissive, internally consistent, and better presented for open-source program applications.\n\n**Architecture:** This change is documentation- and metadata-driven. It standardizes licensing, removes contradictory repository messaging, adds baseline community files, and improves public positioning without changing runtime behavior.\n\n**Tech Stack:** Markdown, GitHub repository metadata, standard MIT license text\n\n---\n\n### Task 1: Add repository planning artifacts\n\n**Files:**\n- Create: `docs/plans/2026-03-08-oss-readiness-design.md`\n- Create: `docs/plans/2026-03-08-oss-readiness.md`\n\n**Step 1:** Create the approved design document.\n**Step 2:** Create the implementation plan.\n**Step 3:** Verify both files render as plain markdown.\n\n### Task 2: Replace the repository license\n\n**Files:**\n- Modify: `LICENSE`\n- Check: `frontend/package.json`\n\n**Step 1:** Replace GPL-3.0 text with MIT.\n**Step 2:** Confirm any manifest-level license field is consistent.\n**Step 3:** Search for stale GPL references.\n\n### Task 3: Clean README licensing and positioning\n\n**Files:**\n- Modify: `README.md`\n\n**Step 1:** Replace the stale license badge.\n**Step 2:** Update the project positioning to emphasize open-source, authorized, defensive use.\n**Step 3:** Refresh the maintenance/rewrite wording so it reads like active open-source stewardship.\n**Step 4:** Keep feature content intact while removing contradictory or high-risk phrasing where possible.\n\n### Task 4: Add baseline community and security docs\n\n**Files:**\n- Create: `SECURITY.md`\n- Create: `CONTRIBUTING.md`\n- Create: `CODE_OF_CONDUCT.md`\n\n**Step 1:** Add vulnerability reporting instructions.\n**Step 2:** Add contribution workflow and licensing expectations.\n**Step 3:** Add a standard code of conduct.\n\n### Task 5: Validate repository consistency\n\n**Files:**\n- Check: `README.md`\n- Check: `LICENSE`\n- Check: `SECURITY.md`\n- Check: `CONTRIBUTING.md`\n- Check: `CODE_OF_CONDUCT.md`\n\n**Step 1:** Search for `PolyForm`, `Noncommercial`, and stale GPL references.\n**Step 2:** Confirm new docs are linked or discoverable.\n**Step 3:** Review final public-facing text for clarity.\n\n### Task 6: Update GitHub metadata if beneficial\n\n**Files:**\n- External: GitHub repository settings via `gh api`\n\n**Step 1:** Update repository description if the current description is too tool-centric or ambiguous.\n**Step 2:** Keep topics aligned with authorized security and asset management.\n**Step 3:** Verify metadata reflects the README positioning.\n"
  },
  {
    "path": "docs/quick-start.md",
    "content": "# 🚀 XingRin - 星环 快速开始\n\n## 系统要求\n\n### 硬件要求\n- **CPU**: 2 核心以上\n- **内存**: 4GB 以上\n- **存储**: 20GB 可用空间\n- **网络**: 互联网连接（用于拉取 Docker 镜像）\n\n### 软件要求\n- **操作系统**: Ubuntu 18.04+ / Debian 10+\n- **权限**: sudo 管理员权限\n- **端口要求**: 需要开放以下端口\n  - `8083` - HTTPS 访问（主要访问端口）\n  - `5432` - PostgreSQL 数据库（如使用本地数据库且有远程 Worker）\n  - 后端 API 仅容器内监听 8888，由 nginx 反代到 8083，对公网无需放行 8888\n  - Redis 仅在 Docker 内部网络使用，无需对外开放\n\n## 一键安装\n\n### 1. 下载项目\n```bash\ngit clone https://github.com/你的用户名/xingrin.git\ncd xingrin\n```\n\n### 2. 执行安装\n```bash\n# 生产环境安装\nsudo ./install.sh\n\n# 开发环境安装（本地构建镜像）\nsudo ./install.sh --dev\n\n# 只安装后端（前端单独部署）\nsudo ./install.sh --no-frontend\n```\n\n### 3. 访问系统\n安装完成后，访问：\n- **Web 界面**: https://你的服务器IP:8083/\n\n**默认账号**：\n- 用户名: `admin`\n- 密码: `admin`\n\n⚠️ **首次登录后请立即修改密码！**\n\n## ☁️ 云服务器部署注意事项\n\n### 端口安全组配置\n**阿里云/腾讯云/华为云等云服务器默认开启安全策略，需要手动放行端口！**\n\n#### 必须放行的端口\n```\n8083  - HTTPS 访问（主要访问端口）\n5432  - PostgreSQL（如使用本地数据库且有远程 Worker）\n```\n\n#### 推荐方案\n- **国外 VPS**：如 Vultr、DigitalOcean、Linode 等，默认开放所有端口，无需额外配置\n- **国内云服务器**：需要在安全组中手动放行端口，否则无法正常访问\n\n⚠️ **重要提醒**：端口未放行会导致：\n- 无法访问 Web 界面\n- 扫描功能异常\n- 远程 Worker 连接失败\n\n## 安装过程说明\n\n### 自动安装内容\n```mermaid\ngraph TD\n    A[执行 install.sh] --> B[检查系统环境]\n    B --> C[安装 Docker]\n    C --> D[生成配置文件]\n    D --> E[拉取 Docker 镜像]\n    E --> F[启动服务]\n    F --> G[安装完成]\n    \n    style A fill:#e1f5fe\n    style G fill:#e8f5e8\n```\n\n### 安装步骤详解\n1. **环境检查**: 检测操作系统、安装缺失的基础命令\n2. **Docker 安装**: 自动安装 Docker 和 docker-compose\n3. **配置生成**: 创建 `.env` 配置文件，生成随机密钥\n4. **数据库配置**: 支持本地 PostgreSQL 或远程数据库\n5. **SSL 证书**: 自动生成自签名 HTTPS 证书\n6. **服务启动**: 启动所有容器服务\n\n## 服务管理\n\n### 常用命令\n```bash\n# 启动服务\n./start.sh\n\n# 停止服务\n./stop.sh\n\n# 重启服务\n./restart.sh\n\n# 卸载系统\n./uninstall.sh\n```\n\n### 服务状态检查\n```bash\n# 查看容器状态\ndocker ps\n\n# 查看服务日志\ndocker logs xingrin-server\ndocker logs xingrin-frontend\ndocker logs xingrin-nginx\ndocker logs xingrin-agent\n\n# 查看系统资源\ndocker stats\n```\n\n## 配置说明\n\n### 主要配置文件\n```\ndocker/.env              # 主配置文件\ndocker/nginx/ssl/        # SSL 证书目录\n/opt/xingrin/results/    # 扫描结果存储\n/opt/xingrin/logs/       # 系统日志存储\n```\n\n### 重要配置项\n```bash\n# 数据库配置\nDB_HOST=postgres         # 数据库地址\nDB_PORT=5432            # 数据库端口\nDB_NAME=xingrin         # 数据库名称\nDB_USER=postgres        # 数据库用户\nDB_PASSWORD=随机生成     # 数据库密码\n\n# 服务配置\nSERVER_PORT=8888        # 后端容器内部端口（仅 Docker 内网监听）\nPUBLIC_HOST=server      # 对外访问地址（远程 Worker 用，配置外网 IP 或域名）\nDEBUG=False             # 调试模式\n\n# 版本配置\nIMAGE_TAG=v1.0.0        # 镜像版本（自动设置）\n```\n\n## 远程 Worker 部署\n\n### 1. 主服务器添加节点\n1. 登录 Web 界面\n2. 进入 **系统管理** → **Worker 节点**\n3. 点击 **添加节点**，填写远程服务器信息：\n   - 节点名称\n   - IP 地址\n   - SSH 端口（默认 22）\n   - SSH 用户名\n   - SSH 密码\n\n### 2. 一键部署\n点击 **部署** 按钮，系统会自动：\n1. SSH 连接到远程服务器\n2. 安装 Docker 环境\n3. 拉取 Worker 镜像\n4. 启动 Agent 容器\n\n### 3. 验证部署\n- 节点状态显示为 **在线**\n- 可以看到节点的 CPU、内存负载\n- 任务分发时会自动选择最优节点\n\n## 故障排查\n\n### 常见问题\n\n#### 1. 端口被占用\n```bash\n# 检查端口占用\nsudo netstat -tlnp | grep :8083\n\n# 停止占用端口的服务\nsudo systemctl stop apache2  # 如果是 Apache\nsudo systemctl stop nginx    # 如果是 Nginx\n```\n\n#### 2. Docker 权限问题\n```bash\n# 添加用户到 docker 组\nsudo usermod -aG docker $USER\n\n# 重新登录或执行\nnewgrp docker\n```\n\n#### 3. 服务启动失败\n```bash\n# 查看详细错误日志\ndocker logs xingrin-server --tail 50\n\n# 检查配置文件\ncat docker/.env\n\n# 重新生成配置\ncp docker/.env.example docker/.env\n# 重新配置后启动\n```\n\n### 日志查看\n```bash\n# 实时查看日志\ndocker logs -f xingrin-server\ndocker logs -f xingrin-agent\n\n# 查看最近日志\ndocker logs --tail 100 xingrin-server\ndocker logs --tail 100 xingrin-agent\n\n# 查看系统日志\ntail -f /opt/xingrin/logs/*.log\n```\n\n\n## 下一步\n\n安装完成后，建议阅读：\n- [版本管理文档](./version-management.md) - 了解系统更新机制\n- [API 文档](./api.md) - 集成开发接口（🚧 待完善）\n- [最佳实践](./best-practices.md) - 使用建议和优化（🚧 待完善）\n\n## 获得帮助\n\n- 📖 [技术文档](./README.md)\n- 🐛 [问题反馈](https://github.com/你的用户名/xingrin/issues)\n- 💬 [讨论区](https://github.com/你的用户名/xingrin/discussions)\n- 📧 联系邮箱: your-email@example.com"
  },
  {
    "path": "docs/scan-flow-architecture.md",
    "content": "# 扫描流程架构\n\n## 完整扫描流程\n\n```mermaid\nflowchart TB\n    START[Start Scan]\n    TARGET[Input Target]\n    \n    START --> TARGET\n    \n    subgraph STAGE1[\"Stage 1: Discovery Sequential\"]\n        direction TB\n        \n        subgraph SUB[\"Subdomain Discovery\"]\n            direction TB\n            SUBFINDER[subfinder]\n            AMASS[amass]\n            SUBLIST3R[sublist3r]\n            ASSETFINDER[assetfinder]\n            MERGE[Merge & Deduplicate]\n            BRUTEFORCE[puredns bruteforce<br/>Dictionary Attack]\n            MUTATE[dnsgen + puredns<br/>Mutation Generation]\n            RESOLVE[puredns resolve<br/>Alive Verification]\n            \n            SUBFINDER --> MERGE\n            AMASS --> MERGE\n            SUBLIST3R --> MERGE\n            ASSETFINDER --> MERGE\n            MERGE --> BRUTEFORCE\n            BRUTEFORCE --> MUTATE\n            MUTATE --> RESOLVE\n        end\n        \n        subgraph PORT[\"Port Scan\"]\n            NAABU[naabu<br/>Port Discovery]\n        end\n        \n        subgraph SITE[\"Site Scan\"]\n            HTTPX1[httpx<br/>Web Service Detection]\n        end\n        \n        subgraph FINGER[\"Fingerprint Detect\"]\n            XINGFINGER[xingfinger<br/>Tech Stack Detection]\n        end\n        \n        RESOLVE --> NAABU\n        NAABU --> HTTPX1\n        HTTPX1 --> XINGFINGER\n    end\n    \n    TARGET --> SUBFINDER\n    TARGET --> AMASS\n    TARGET --> SUBLIST3R\n    TARGET --> ASSETFINDER\n    \n    subgraph STAGE2[\"Stage 2: URL Collection Parallel\"]\n        direction TB\n        \n        subgraph URL[\"URL Fetch\"]\n            direction TB\n            WAYMORE[waymore<br/>Historical URLs]\n            KATANA[katana<br/>Crawler]\n            URO[uro<br/>URL Deduplication]\n            HTTPX2[httpx<br/>Alive Verification]\n            \n            WAYMORE --> URO\n            KATANA --> URO\n            URO --> HTTPX2\n        end\n        \n        subgraph DIR[\"Directory Scan\"]\n            FFUF[ffuf<br/>Directory Bruteforce]\n        end\n    end\n    \n    XINGFINGER --> WAYMORE\n    XINGFINGER --> KATANA\n    XINGFINGER --> FFUF\n    \n    subgraph STAGE3[\"Stage 3: Screenshot Sequential\"]\n        direction TB\n        SCREENSHOT[Playwright<br/>Page Screenshot]\n    end\n    \n    HTTPX2 --> SCREENSHOT\n    FFUF --> SCREENSHOT\n    \n    subgraph STAGE4[\"Stage 4: Security Checks\"]\n        direction TB\n        \n        subgraph VULN[\"Security Checks\"]\n            direction LR\n            DALFOX[dalfox<br/>XSS Check]\n            NUCLEI[nuclei<br/>Security Check]\n        end\n    end\n    \n    SCREENSHOT --> DALFOX\n    SCREENSHOT --> NUCLEI\n    \n    DALFOX --> FINISH\n    NUCLEI --> FINISH\n    \n    FINISH[Scan Complete]\n    \n    style START fill:#ff9999\n    style FINISH fill:#99ff99\n    style TARGET fill:#ffcc99\n    style STAGE1 fill:#e6f3ff\n    style STAGE2 fill:#fff4e6\n    style STAGE3 fill:#ffe6f0\n```\n\n## 执行阶段定义\n\n```python\n# backend/apps/scan/configs/command_templates.py\n# Stage 1: 资产发现 - 子域名 → 端口 → 站点探测 → 指纹识别\n# Stage 2: URL 收集 - URL 获取 + 目录扫描（并行）\n# Stage 3: 截图 - 在 URL 收集完成后执行，捕获更多发现的页面\n# Stage 4: 安全检测 - 最后执行\nEXECUTION_STAGES = [\n    {'mode': 'sequential', 'flows': ['subdomain_discovery', 'port_scan', 'site_scan', 'fingerprint_detect']},\n    {'mode': 'parallel', 'flows': ['url_fetch', 'directory_scan']},\n    {'mode': 'sequential', 'flows': ['screenshot']},\n    {'mode': 'sequential', 'flows': ['vuln_scan']},\n]\n```\n\n## 各阶段输出\n\n| Flow | 工具 | 输出表 |\n|------|------|--------|\n| subdomain_discovery | subfinder, amass, sublist3r, assetfinder, puredns | Subdomain |\n| port_scan | naabu | HostPortMapping |\n| site_scan | httpx | WebSite |\n| fingerprint_detect | xingfinger | WebSite.tech（更新） |\n| url_fetch | waymore, katana, uro, httpx | Endpoint |\n| directory_scan | ffuf | Directory |\n| screenshot | Playwright | Screenshot |\n| vuln_scan | dalfox, nuclei | SecurityFinding |\n"
  },
  {
    "path": "docs/version-management.md",
    "content": "# XingRin - 星环 版本管理架构\n\n## 概述\n\nXingRin - 星环 采用基于 Git Tag 的自动化版本管理系统，确保所有组件（主服务器、远程 Worker）使用一致的版本，避免兼容性问题。\n\n## 核心原理\n\n### 版本号来源\n- **单一版本源**：Git Tag（如 `v1.1.0`）\n- **版本文件**：`VERSION` 文件由 CI 自动维护\n- **环境变量**：`IMAGE_TAG` 锁定运行时版本\n\n### 版本一致性保证\n```\nGit Tag → CI 构建镜像 → VERSION 文件 → IMAGE_TAG → 所有节点统一版本\n```\n\n## 完整发布流程\n\n```mermaid\ngraph TD\n    A[开发完成] --> B[git commit & push]\n    B --> C[git tag v1.1.0]\n    C --> D[git push --tags]\n    D --> E[GitHub Actions 触发]\n    E --> F[构建 5 个镜像]\n    F --> G[推送到 Docker Hub]\n    G --> H[更新 VERSION 文件]\n    H --> I[commit 回 main 分支]\n    \n    style E fill:#e1f5fe\n    style F fill:#f3e5f5\n    style G fill:#e8f5e8\n```\n\n### 镜像构建矩阵\n| 镜像 | 用途 | 标签 |\n|------|------|------|\n| `xingrin-server` | 主服务器 | `v1.1.0` + `latest` |\n| `xingrin-frontend` | 前端界面 | `v1.1.0` + `latest` |\n| `xingrin-nginx` | 反向代理 | `v1.1.0` + `latest` |\n| `xingrin-worker` | 任务执行 | `v1.1.0` + `latest` |\n| `xingrin-agent` | 心跳监控 | `v1.1.0` + `latest` |\n\n## 用户部署流程\n\n### 初始安装\n```mermaid\ngraph TD\n    A[用户下载代码] --> B[sudo ./install.sh]\n    B --> C[读取 VERSION 文件]\n    C --> D[写入 docker/.env]\n    D --> E[IMAGE_TAG=v1.1.0]\n    E --> F[拉取对应版本镜像]\n    F --> G[启动服务]\n    \n    style C fill:#fff3e0\n    style E fill:#e8f5e8\n```\n\n### 版本更新\n```mermaid\ngraph TD\n    A[./update.sh] --> B[git pull 拉取新代码]\n    B --> C[读取新 VERSION 文件]\n    C --> D[更新 IMAGE_TAG=v1.2.0]\n    D --> E[重启服务]\n    E --> F[使用新版本镜像]\n    \n    style C fill:#fff3e0\n    style D fill:#e8f5e8\n```\n\n## 任务分发架构\n\n### 镜像版本管理\n```mermaid\ngraph LR\n    A[主服务器] --> B[task_distributor]\n    B --> C[本地 Worker]\n    B --> D[远程 Worker 1]\n    B --> E[远程 Worker N]\n    \n    F[settings.IMAGE_TAG] --> B\n    B --> G[yyhuni/xingrin-worker:v1.1.0]\n    G --> C\n    G --> D\n    G --> E\n    \n    style F fill:#e1f5fe\n    style G fill:#f3e5f5\n```\n\n### 执行流程对比\n\n| 场景 | 镜像拉取策略 | 说明 |\n|------|-------------|------|\n| **本地 Worker** | `--pull=missing` | 主服务器本机执行，使用本地镜像 |\n| **远程 Worker** | `--pull=missing` | SSH 到远程执行，使用远程本地镜像 |\n\n## 镜像拉取策略\n\n### 安装时预拉取\n```bash\n# 主服务器安装\ndocker compose up -d  # 拉取所有服务镜像\n\n# 远程 Worker 安装  \ndocker pull yyhuni/xingrin-worker:v1.1.0  # 预拉取 worker 镜像\n```\n\n### 执行时策略\n```bash\n# 任务执行时\ndocker run --pull=missing yyhuni/xingrin-worker:v1.1.0\n```\n\n**`--pull=missing` 行为**：\n- ✅ 本地有镜像 → 直接使用，不检查网络\n- ✅ 本地无镜像 → 从 Docker Hub 拉取\n- ✅ 版本更新后 → 自动拉取新版本\n\n## 版本同步机制\n\n### 主服务器更新\n```mermaid\nsequenceDiagram\n    participant U as 用户\n    participant S as 主服务器\n    participant H as Docker Hub\n    participant W as 远程 Worker\n    \n    U->>S: ./update.sh\n    S->>S: git pull (新 VERSION)\n    S->>S: IMAGE_TAG=v1.2.0\n    S->>S: 重启服务\n    \n    Note over S: 分发任务时\n    S->>W: SSH docker run worker:v1.2.0\n    W->>H: 本地无 v1.2.0，拉取镜像\n    H->>W: 返回 v1.2.0 镜像\n    W->>W: 执行任务\n```\n\n### 版本一致性保证\n1. **主服务器**：`IMAGE_TAG` 锁定版本\n2. **远程 Worker**：按需拉取对应版本\n3. **自动同步**：update.sh 统一更新版本号\n\n## Agent 自动更新机制\n\n### 概述\n\nAgent 是运行在每个 Worker 节点上的轻量级心跳服务（~10MB），负责上报节点状态和负载信息。当主服务器更新后，Agent 需要同步更新以保持版本一致。\n\n### 版本检测流程\n\n```mermaid\nsequenceDiagram\n    participant A as Agent\n    participant S as Server\n    participant H as Docker Hub\n    \n    A->>S: POST /api/workers/{id}/heartbeat/\n    Note right of A: {\"cpu\": 50, \"mem\": 60, \"version\": \"v1.0.8\"}\n    \n    S->>S: 比较 agent_version vs IMAGE_TAG\n    \n    alt 版本匹配\n        S->>A: {\"status\": \"ok\", \"need_update\": false}\n    else 版本不匹配 (远程 Worker)\n        S->>S: 设置状态为 updating\n        S->>A: {\"status\": \"ok\", \"need_update\": true}\n        S-->>H: SSH: docker pull agent:v1.0.19\n        S-->>A: SSH: 重启 agent 容器\n    else 版本不匹配 (本地 Worker)\n        S->>S: 设置状态为 outdated\n        S->>A: {\"status\": \"ok\", \"need_update\": true}\n        Note over S: 需用户手动 ./update.sh\n    end\n```\n\n### Worker 状态流转\n\n| 场景 | 状态变化 | 说明 |\n|------|---------|------|\n| 首次心跳 | `pending/deploying` → `online` | Agent 启动成功 |\n| 远程 Worker 版本不匹配 | `online` → `updating` → `online` | 服务端自动 SSH 更新 |\n| 远程 Worker 更新失败 | `updating` → `outdated` | SSH 执行失败 |\n| 本地 Worker 版本不匹配 | `online` → `outdated` | 需手动 update.sh |\n| 版本匹配 | `updating/outdated` → `online` | 恢复正常 |\n\n### 更新触发条件\n\n1. **远程 Worker**：服务端检测到版本不匹配时，自动通过 SSH 执行更新\n2. **本地 Worker**：用户执行 `./update.sh` 时，docker-compose 会拉取新镜像并重启\n\n### 防重复机制\n\n使用 Redis 锁防止同一 Worker 在 60 秒内重复触发更新：\n```\nlock_key = f\"agent_update_lock:{worker_id}\"\nredis.set(lock_key, \"1\", nx=True, ex=60)\n```\n\n### 相关文件\n\n| 文件 | 作用 |\n|------|------|\n| `backend/apps/engine/views/worker_views.py` | 心跳 API，版本检测和更新触发 |\n| `backend/scripts/worker-deploy/agent.sh` | Agent 心跳脚本，上报版本号 |\n| `backend/scripts/worker-deploy/start-agent.sh` | Agent 启动脚本 |\n| `docker/agent/Dockerfile` | Agent 镜像构建，注入 IMAGE_TAG |\n\n## 开发环境配置\n\n### 本地开发测试\n```bash\n# docker/.env 中添加（开发模式会自动设置）\nTASK_EXECUTOR_IMAGE=docker-worker:v1.1.0-dev  # 指向本地构建镜像\n```\n\n### 开发模式启动\n```bash\n# 使用本地构建镜像（自动构建并标记为 ${VERSION}-dev）\n./install.sh --dev\n./start.sh --dev\n```\n\n## 配置文件说明\n\n### VERSION 文件\n```\nv1.1.0\n```\n- 由 CI 自动维护\n- 用户安装时读取此文件\n\n### docker/.env\n```bash\nIMAGE_TAG=v1.1.0                    # 锁定版本\nTASK_EXECUTOR_IMAGE=                # 可选：覆盖镜像名\n```\n\n### settings.py 逻辑\n```python\nif IMAGE_TAG:\n    # 主服务器：构建镜像名\n    TASK_EXECUTOR_IMAGE = f'{DOCKER_USER}/xingrin-worker:{IMAGE_TAG}'\nelse:\n    # Worker 容器：不需要此配置\n    TASK_EXECUTOR_IMAGE = ''\n```\n\n## Agent 自动更新机制\n\n### 概述\n\nAgent 是运行在每个 Worker 节点上的轻量级心跳服务，负责上报节点状态和负载信息。当主服务器更新后，Agent 需要同步更新以保持版本一致。\n\n### 版本检测流程\n\n### 版本不一致问题\n**症状**：任务执行失败，兼容性错误\n\n**排查**：\n```bash\n# 检查主服务器版本\ncat VERSION\ngrep IMAGE_TAG docker/.env\n\n# 检查远程 Worker 镜像\nssh worker_host \"docker images | grep xingrin-worker\"\n```\n\n**解决**：\n```bash\n# 主服务器更新\n./update.sh\n\n# 远程 Worker 会自动拉取新版本（下次任务执行时）\n```\n\n### 镜像拉取失败\n**症状**：`docker run` 报错，无法拉取镜像\n\n**排查**：\n```bash\n# 检查网络连接\ndocker pull yyhuni/xingrin-worker:v1.1.0\n\n# 检查版本是否存在\ncurl -s https://hub.docker.com/v2/repositories/yyhuni/xingrin-worker/tags/\n```\n\n## 最佳实践\n\n### 版本发布\n1. ✅ 严格遵循语义化版本（v1.2.3）\n2. ✅ 有改动必须更新版本号\n3. ✅ 通过 CI 自动构建，不手动推送\n4. ✅ 测试版本使用 `-dev.x` 后缀\n\n### 部署运维\n1. ✅ 定期执行 `./update.sh` 获取更新\n2. ✅ 监控 Docker Hub 镜像拉取状态\n3. ✅ 备份重要配置文件（.env）\n4. ✅ 使用 `docker system prune` 清理旧镜像\n\n### 开发调试\n1. ✅ 本地测试使用 `--dev` 模式（自动构建 `docker-worker:${VERSION}-dev`）\n2. ✅ 远程测试先推送测试版本到 Hub\n3. ✅ 生产环境避免使用 `latest` 标签，始终使用明确版本号\n4. ✅ 开发环境使用 `-dev` 后缀区分开发版本\n5. ✅ 版本回滚通过修改 `IMAGE_TAG` 实现"
  },
  {
    "path": "docs/wordlist-architecture.md",
    "content": "# 字典文件管理架构\n\n本文档介绍 XingRin 中字典文件的存储、同步和使用机制。\n\n## 目录结构\n\n```\n/opt/xingrin/wordlists/\n├── common.txt              # 通用字典\n├── subdomains.txt          # 子域名字典\n├── directories.txt         # 目录字典\n└── ...\n```\n\n## 一、存储位置\n\n| 配置项 | 默认值 | 说明 |\n|--------|--------|------|\n| `WORDLISTS_BASE_PATH` | `/opt/xingrin/wordlists` | 字典文件存储目录 |\n\n## 二、数据模型\n\n```\nWordlist\n├── id          # 字典 ID\n├── name        # 字典名称（唯一，用于查询）\n├── description # 描述\n├── file_path   # 文件绝对路径\n├── file_size   # 文件大小（字节）\n├── line_count  # 行数\n└── file_hash   # SHA256 哈希值（用于校验）\n```\n\n## 三、Server 端上传流程\n\n1. 用户在前端上传字典文件\n2. `WordlistService.create_wordlist()` 处理：\n   - 保存文件到 `WORDLISTS_BASE_PATH` 目录\n   - 计算 SHA256 哈希值\n   - 统计文件大小和行数\n   - 创建数据库记录\n\n```mermaid\nflowchart TB\n    subgraph SERVER[\"🖥️ Server 容器\"]\n        direction TB\n        \n        subgraph UI[\"前端 UI\"]\n            direction LR\n            UPLOAD[\"📤 上传字典<br/>选择文件\"]\n            EDIT[\"✏️ 编辑内容<br/>在线修改\"]\n            DELETE[\"🗑️ 删除字典\"]\n        end\n        \n        UPLOAD --> API\n        EDIT --> API\n        \n        subgraph API[\"API 层\"]\n            VIEWSET[\"WordlistViewSet<br/>POST /api/wordlists/<br/>PUT .../content/\"]\n        end\n        \n        API --> SERVICE\n        \n        subgraph SERVICE[\"业务逻辑层\"]\n            CREATE[\"create_wordlist()<br/>创建字典\"]\n            UPDATE[\"update_wordlist_content()<br/>更新字典内容\"]\n        end\n        \n        CREATE --> PROCESS\n        UPDATE --> PROCESS\n        \n        subgraph PROCESS[\"处理流程\"]\n            direction TB\n            STEP1[\"1️⃣ 保存文件到<br/>/opt/xingrin/wordlists/\"]\n            STEP2[\"2️⃣ 计算 SHA256 哈希值\"]\n            STEP3[\"3️⃣ 统计文件大小和行数\"]\n            STEP4[\"4️⃣ 创建/更新数据库记录\"]\n            \n            STEP1 --> STEP2\n            STEP2 --> STEP3\n            STEP3 --> STEP4\n        end\n        \n        STEP4 --> DB\n        STEP1 --> FS\n        \n        subgraph DB[\"💾 PostgreSQL 数据库\"]\n            DBRECORD[\"INSERT INTO wordlist<br/>name: 'subdomains'<br/>file_path: '/opt/xingrin/wordlists/subdomains.txt'<br/>file_size: 1024000<br/>line_count: 50000<br/>file_hash: 'sha256...'\"]\n        end\n        \n        subgraph FS[\"📁 文件系统\"]\n            FILES[\"/opt/xingrin/wordlists/<br/>├── common.txt<br/>├── subdomains.txt<br/>└── directories.txt\"]\n        end\n    end\n    \n    style SERVER fill:#e6f3ff\n    style UI fill:#fff4e6\n    style API fill:#f0f0f0\n    style SERVICE fill:#d4edda\n    style PROCESS fill:#ffe6f0\n    style DB fill:#cce5ff\n    style FS fill:#e2e3e5\n```\n\n## 四、Worker 端获取流程\n\nWorker 执行扫描任务时，通过 `ensure_wordlist_local()` 获取字典：\n\n1. 根据字典名称查询数据库，获取 `file_path` 和 `file_hash`\n2. 检查本地是否存在字典文件\n   - 存在且 hash 匹配：直接使用\n   - 存在但 hash 不匹配：重新下载\n   - 不存在：从 Server API 下载\n3. 下载地址：`GET /api/wordlists/download/?wordlist=<name>`\n4. 返回本地字典文件路径\n\n```mermaid\nflowchart TB\n    subgraph WORKER[\"🔧 Worker 容器\"]\n        direction TB\n        \n        START[\"🎯 扫描任务<br/>需要字典\"]\n        \n        START --> ENSURE\n        \n        ENSURE[\"ensure_wordlist_local()<br/>参数: wordlist_name\"]\n        \n        ENSURE --> QUERY\n        \n        QUERY[\"📊 查询 PostgreSQL<br/>获取 file_path, file_hash\"]\n        \n        QUERY --> CHECK\n        \n        CHECK{\"🔍 检查本地文件<br/>/opt/xingrin/wordlists/\"}\n        \n        CHECK -->|不存在| DOWNLOAD\n        CHECK -->|存在| HASH\n        \n        HASH[\"🔐 计算本地文件 SHA256<br/>与数据库 hash 比较\"]\n        \n        HASH -->|一致| USE\n        HASH -->|不一致| DOWNLOAD\n        \n        DOWNLOAD[\"📥 从 Server API 下载<br/>GET /api/wordlists/download/?wordlist=name\"]\n        \n        DOWNLOAD --> SERVER\n        \n        SERVER[\"🌐 HTTP Request\"]\n        \n        SERVER -.请求.-> API[\"Server (Django)<br/>返回文件内容\"]\n        API -.响应.-> SERVER\n        \n        SERVER --> SAVE\n        \n        SAVE[\"💾 保存到本地<br/>/opt/xingrin/wordlists/filename\"]\n        \n        SAVE --> RETURN\n        \n        USE[\"✅ 直接使用\"] --> RETURN\n        \n        RETURN[\"📂 返回本地字典文件路径<br/>/opt/xingrin/wordlists/subdomains.txt\"]\n        \n        RETURN --> EXEC\n        \n        EXEC[\"🚀 执行扫描工具<br/>puredns bruteforce -w /opt/xingrin/wordlists/xxx.txt\"]\n    end\n    \n    style WORKER fill:#e6f3ff\n    style START fill:#fff4e6\n    style CHECK fill:#ffe6f0\n    style HASH fill:#ffe6f0\n    style USE fill:#d4edda\n    style DOWNLOAD fill:#f8d7da\n    style RETURN fill:#d4edda\n    style EXEC fill:#cce5ff\n```\n\n## 五、Hash 校验机制\n\n- 上传时计算 SHA256 并存入数据库\n- Worker 使用前校验本地文件 hash\n- 不匹配时自动重新下载\n- 确保所有节点使用相同内容的字典\n\n## 六、本地 Worker vs 远程 Worker\n\n本地 Worker 和远程 Worker 获取字典的方式相同：\n\n1. 从数据库查询字典元数据（file_hash）\n2. 检查本地缓存是否存在且 hash 匹配\n3. 不匹配则通过 HTTP API 下载\n\n**注意**：Worker 容器只挂载了 `results` 和 `logs` 目录，没有挂载 `wordlists` 目录，所以字典文件需要通过 API 下载。\n\n```mermaid\nsequenceDiagram\n    participant W as Worker (本地/远程)\n    participant DB as PostgreSQL\n    participant S as Server API\n    participant FS as 本地缓存\n    \n    W->>DB: 1️⃣ 查询数据库获取 file_hash\n    DB-->>W: 返回 file_hash\n    \n    W->>FS: 2️⃣ 检查本地缓存\n    \n    alt 存在且 hash 匹配\n        FS-->>W: ✅ 直接使用\n    else 不存在或不匹配\n        W->>S: 3️⃣ GET /api/wordlists/download/\n        S-->>W: 4️⃣ 返回文件内容\n        W->>FS: 5️⃣ 保存到本地缓存<br/>/opt/xingrin/wordlists/\n        FS-->>W: ✅ 使用缓存文件\n    end\n    \n    Note over W,FS: 本地 Worker 优势：<br/>• 网络延迟更低（容器内网络）<br/>• 缓存可复用（同一宿主机多次任务）\n```\n\n### 本地 Worker 的优势\n\n虽然获取方式相同，但本地 Worker 有以下优势：\n- 网络延迟更低（容器内网络）\n- 下载后的缓存可复用（同一宿主机上的多次任务）\n\n## 七、配置项\n\n在 `docker/.env` 或环境变量中配置：\n\n```bash\n# 字典文件存储目录\nWORDLISTS_PATH=/opt/xingrin/wordlists\n\n# Server 地址（Worker 用于下载文件）\nPUBLIC_HOST=your-server-ip  # 远程 Worker 会通过 https://{PUBLIC_HOST}/api 访问\nSERVER_PORT=8888  # 后端容器内部端口，仅 Docker 内网监听\n```\n\n## 八、常见问题\n\n### Q: 字典文件更新后 Worker 没有使用新版本？\n\nA: 更新字典内容后会重新计算 hash，Worker 下次使用时会检测到 hash 不匹配并重新下载。\n\n### Q: 远程 Worker 下载文件失败？\n\nA: 检查：\n1. `PUBLIC_HOST` 是否配置为 Server 的外网 IP 或域名\n2. Nginx 8083 (HTTPS) 是否可达（远程 Worker 通过 nginx 访问后端）\n3. Worker 到 Server 的网络是否通畅\n\n### Q: 如何批量导入字典？\n\nA: 目前只支持通过前端逐个上传，后续可能支持批量导入功能。\n"
  },
  {
    "path": "frontend/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.*\n.yarn/*\n!.yarn/patches\n!.yarn/plugins\n!.yarn/releases\n!.yarn/versions\n\n# testing\n/coverage\n\n# next.js\n/.next/\n/out/\n\n# production\n/build\n\n# misc\n.DS_Store\n*.pem\n\n# debug\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n.pnpm-debug.log*\n\n# env files (can opt-in for committing if needed)\n.env*\n\n# vercel\n.vercel\n\n# typescript\n*.tsbuildinfo\nnext-env.d.ts\n\ncertificates"
  },
  {
    "path": "frontend/app/[locale]/dashboard/data.json",
    "content": "[\n  {\n    \"id\": 1,\n    \"header\": \"Cover page\",\n    \"type\": \"Cover page\",\n    \"status\": \"In Process\",\n    \"target\": \"18\",\n    \"limit\": \"5\",\n    \"reviewer\": \"Eddie Lake\"\n  },\n  {\n    \"id\": 2,\n    \"header\": \"Table of contents\",\n    \"type\": \"Table of contents\",\n    \"status\": \"Done\",\n    \"target\": \"29\",\n    \"limit\": \"24\",\n    \"reviewer\": \"Eddie Lake\"\n  },\n  {\n    \"id\": 3,\n    \"header\": \"Executive summary\",\n    \"type\": \"Narrative\",\n    \"status\": \"Done\",\n    \"target\": \"10\",\n    \"limit\": \"13\",\n    \"reviewer\": \"Eddie Lake\"\n  },\n  {\n    \"id\": 4,\n    \"header\": \"Technical approach\",\n    \"type\": \"Narrative\",\n    \"status\": \"Done\",\n    \"target\": \"27\",\n    \"limit\": \"23\",\n    \"reviewer\": \"Jamik Tashpulatov\"\n  },\n  {\n    \"id\": 5,\n    \"header\": \"Design\",\n    \"type\": \"Narrative\",\n    \"status\": \"In Process\",\n    \"target\": \"2\",\n    \"limit\": \"16\",\n    \"reviewer\": \"Jamik Tashpulatov\"\n  },\n  {\n    \"id\": 6,\n    \"header\": \"Capabilities\",\n    \"type\": \"Narrative\",\n    \"status\": \"In Process\",\n    \"target\": \"20\",\n    \"limit\": \"8\",\n    \"reviewer\": \"Jamik Tashpulatov\"\n  },\n  {\n    \"id\": 7,\n    \"header\": \"Integration with existing systems\",\n    \"type\": \"Narrative\",\n    \"status\": \"In Process\",\n    \"target\": \"19\",\n    \"limit\": \"21\",\n    \"reviewer\": \"Jamik Tashpulatov\"\n  },\n  {\n    \"id\": 8,\n    \"header\": \"Innovation and Advantages\",\n    \"type\": \"Narrative\",\n    \"status\": \"Done\",\n    \"target\": \"25\",\n    \"limit\": \"26\",\n    \"reviewer\": \"Assign reviewer\"\n  },\n  {\n    \"id\": 9,\n    \"header\": \"Overview of EMR's Innovative Solutions\",\n    \"type\": \"Technical content\",\n    \"status\": \"Done\",\n    \"target\": \"7\",\n    \"limit\": \"23\",\n    \"reviewer\": \"Assign reviewer\"\n  },\n  {\n    \"id\": 10,\n    \"header\": \"Advanced Algorithms and Machine Learning\",\n    \"type\": \"Narrative\",\n    \"status\": \"Done\",\n    \"target\": \"30\",\n    \"limit\": \"28\",\n    \"reviewer\": \"Assign reviewer\"\n  },\n  {\n    \"id\": 11,\n    \"header\": \"Adaptive Communication Protocols\",\n    \"type\": \"Narrative\",\n    \"status\": \"Done\",\n    \"target\": \"9\",\n    \"limit\": \"31\",\n    \"reviewer\": \"Assign reviewer\"\n  },\n  {\n    \"id\": 12,\n    \"header\": \"Advantages Over Current Technologies\",\n    \"type\": \"Narrative\",\n    \"status\": \"Done\",\n    \"target\": \"12\",\n    \"limit\": \"0\",\n    \"reviewer\": \"Assign reviewer\"\n  },\n  {\n    \"id\": 13,\n    \"header\": \"Past Performance\",\n    \"type\": \"Narrative\",\n    \"status\": \"Done\",\n    \"target\": \"22\",\n    \"limit\": \"33\",\n    \"reviewer\": \"Assign reviewer\"\n  },\n  {\n    \"id\": 14,\n    \"header\": \"Customer Feedback and Satisfaction Levels\",\n    \"type\": \"Narrative\",\n    \"status\": \"Done\",\n    \"target\": \"15\",\n    \"limit\": \"34\",\n    \"reviewer\": \"Assign reviewer\"\n  },\n  {\n    \"id\": 15,\n    \"header\": \"Implementation Challenges and Solutions\",\n    \"type\": \"Narrative\",\n    \"status\": \"Done\",\n    \"target\": \"3\",\n    \"limit\": \"35\",\n    \"reviewer\": \"Assign reviewer\"\n  },\n  {\n    \"id\": 16,\n    \"header\": \"Security Measures and Data Protection Policies\",\n    \"type\": \"Narrative\",\n    \"status\": \"In Process\",\n    \"target\": \"6\",\n    \"limit\": \"36\",\n    \"reviewer\": \"Assign reviewer\"\n  },\n  {\n    \"id\": 17,\n    \"header\": \"Scalability and Future Proofing\",\n    \"type\": \"Narrative\",\n    \"status\": \"Done\",\n    \"target\": \"4\",\n    \"limit\": \"37\",\n    \"reviewer\": \"Assign reviewer\"\n  },\n  {\n    \"id\": 18,\n    \"header\": \"Cost-Benefit Analysis\",\n    \"type\": \"Plain language\",\n    \"status\": \"Done\",\n    \"target\": \"14\",\n    \"limit\": \"38\",\n    \"reviewer\": \"Assign reviewer\"\n  },\n  {\n    \"id\": 19,\n    \"header\": \"User Training and Onboarding Experience\",\n    \"type\": \"Narrative\",\n    \"status\": \"Done\",\n    \"target\": \"17\",\n    \"limit\": \"39\",\n    \"reviewer\": \"Assign reviewer\"\n  },\n  {\n    \"id\": 20,\n    \"header\": \"Future Development Roadmap\",\n    \"type\": \"Narrative\",\n    \"status\": \"Done\",\n    \"target\": \"11\",\n    \"limit\": \"40\",\n    \"reviewer\": \"Assign reviewer\"\n  },\n  {\n    \"id\": 21,\n    \"header\": \"System Architecture Overview\",\n    \"type\": \"Technical content\",\n    \"status\": \"In Process\",\n    \"target\": \"24\",\n    \"limit\": \"18\",\n    \"reviewer\": \"Maya Johnson\"\n  },\n  {\n    \"id\": 22,\n    \"header\": \"Risk Management Plan\",\n    \"type\": \"Narrative\",\n    \"status\": \"Done\",\n    \"target\": \"15\",\n    \"limit\": \"22\",\n    \"reviewer\": \"Carlos Rodriguez\"\n  },\n  {\n    \"id\": 23,\n    \"header\": \"Compliance Documentation\",\n    \"type\": \"Legal\",\n    \"status\": \"In Process\",\n    \"target\": \"31\",\n    \"limit\": \"27\",\n    \"reviewer\": \"Sarah Chen\"\n  },\n  {\n    \"id\": 24,\n    \"header\": \"API Documentation\",\n    \"type\": \"Technical content\",\n    \"status\": \"Done\",\n    \"target\": \"8\",\n    \"limit\": \"12\",\n    \"reviewer\": \"Raj Patel\"\n  },\n  {\n    \"id\": 25,\n    \"header\": \"User Interface Mockups\",\n    \"type\": \"Visual\",\n    \"status\": \"In Process\",\n    \"target\": \"19\",\n    \"limit\": \"25\",\n    \"reviewer\": \"Leila Ahmadi\"\n  },\n  {\n    \"id\": 26,\n    \"header\": \"Database Schema\",\n    \"type\": \"Technical content\",\n    \"status\": \"Done\",\n    \"target\": \"22\",\n    \"limit\": \"20\",\n    \"reviewer\": \"Thomas Wilson\"\n  },\n  {\n    \"id\": 27,\n    \"header\": \"Testing Methodology\",\n    \"type\": \"Technical content\",\n    \"status\": \"In Process\",\n    \"target\": \"17\",\n    \"limit\": \"14\",\n    \"reviewer\": \"Assign reviewer\"\n  },\n  {\n    \"id\": 28,\n    \"header\": \"Deployment Strategy\",\n    \"type\": \"Narrative\",\n    \"status\": \"Done\",\n    \"target\": \"26\",\n    \"limit\": \"30\",\n    \"reviewer\": \"Eddie Lake\"\n  },\n  {\n    \"id\": 29,\n    \"header\": \"Budget Breakdown\",\n    \"type\": \"Financial\",\n    \"status\": \"In Process\",\n    \"target\": \"13\",\n    \"limit\": \"16\",\n    \"reviewer\": \"Jamik Tashpulatov\"\n  },\n  {\n    \"id\": 30,\n    \"header\": \"Market Analysis\",\n    \"type\": \"Research\",\n    \"status\": \"Done\",\n    \"target\": \"29\",\n    \"limit\": \"32\",\n    \"reviewer\": \"Sophia Martinez\"\n  },\n  {\n    \"id\": 31,\n    \"header\": \"Competitor Comparison\",\n    \"type\": \"Research\",\n    \"status\": \"In Process\",\n    \"target\": \"21\",\n    \"limit\": \"19\",\n    \"reviewer\": \"Assign reviewer\"\n  },\n  {\n    \"id\": 32,\n    \"header\": \"Maintenance Plan\",\n    \"type\": \"Technical content\",\n    \"status\": \"Done\",\n    \"target\": \"16\",\n    \"limit\": \"23\",\n    \"reviewer\": \"Alex Thompson\"\n  },\n  {\n    \"id\": 33,\n    \"header\": \"User Personas\",\n    \"type\": \"Research\",\n    \"status\": \"In Process\",\n    \"target\": \"27\",\n    \"limit\": \"24\",\n    \"reviewer\": \"Nina Patel\"\n  },\n  {\n    \"id\": 34,\n    \"header\": \"Accessibility Compliance\",\n    \"type\": \"Legal\",\n    \"status\": \"Done\",\n    \"target\": \"18\",\n    \"limit\": \"21\",\n    \"reviewer\": \"Assign reviewer\"\n  },\n  {\n    \"id\": 35,\n    \"header\": \"Performance Metrics\",\n    \"type\": \"Technical content\",\n    \"status\": \"In Process\",\n    \"target\": \"23\",\n    \"limit\": \"26\",\n    \"reviewer\": \"David Kim\"\n  },\n  {\n    \"id\": 36,\n    \"header\": \"Disaster Recovery Plan\",\n    \"type\": \"Technical content\",\n    \"status\": \"Done\",\n    \"target\": \"14\",\n    \"limit\": \"17\",\n    \"reviewer\": \"Jamik Tashpulatov\"\n  },\n  {\n    \"id\": 37,\n    \"header\": \"Third-party Integrations\",\n    \"type\": \"Technical content\",\n    \"status\": \"In Process\",\n    \"target\": \"25\",\n    \"limit\": \"28\",\n    \"reviewer\": \"Eddie Lake\"\n  },\n  {\n    \"id\": 38,\n    \"header\": \"User Feedback Summary\",\n    \"type\": \"Research\",\n    \"status\": \"Done\",\n    \"target\": \"20\",\n    \"limit\": \"15\",\n    \"reviewer\": \"Assign reviewer\"\n  },\n  {\n    \"id\": 39,\n    \"header\": \"Localization Strategy\",\n    \"type\": \"Narrative\",\n    \"status\": \"In Process\",\n    \"target\": \"12\",\n    \"limit\": \"19\",\n    \"reviewer\": \"Maria Garcia\"\n  },\n  {\n    \"id\": 40,\n    \"header\": \"Mobile Compatibility\",\n    \"type\": \"Technical content\",\n    \"status\": \"Done\",\n    \"target\": \"28\",\n    \"limit\": \"31\",\n    \"reviewer\": \"James Wilson\"\n  },\n  {\n    \"id\": 41,\n    \"header\": \"Data Migration Plan\",\n    \"type\": \"Technical content\",\n    \"status\": \"In Process\",\n    \"target\": \"19\",\n    \"limit\": \"22\",\n    \"reviewer\": \"Assign reviewer\"\n  },\n  {\n    \"id\": 42,\n    \"header\": \"Quality Assurance Protocols\",\n    \"type\": \"Technical content\",\n    \"status\": \"Done\",\n    \"target\": \"30\",\n    \"limit\": \"33\",\n    \"reviewer\": \"Priya Singh\"\n  },\n  {\n    \"id\": 43,\n    \"header\": \"Stakeholder Analysis\",\n    \"type\": \"Research\",\n    \"status\": \"In Process\",\n    \"target\": \"11\",\n    \"limit\": \"14\",\n    \"reviewer\": \"Eddie Lake\"\n  },\n  {\n    \"id\": 44,\n    \"header\": \"Environmental Impact Assessment\",\n    \"type\": \"Research\",\n    \"status\": \"Done\",\n    \"target\": \"24\",\n    \"limit\": \"27\",\n    \"reviewer\": \"Assign reviewer\"\n  },\n  {\n    \"id\": 45,\n    \"header\": \"Intellectual Property Rights\",\n    \"type\": \"Legal\",\n    \"status\": \"In Process\",\n    \"target\": \"17\",\n    \"limit\": \"20\",\n    \"reviewer\": \"Sarah Johnson\"\n  },\n  {\n    \"id\": 46,\n    \"header\": \"Customer Support Framework\",\n    \"type\": \"Narrative\",\n    \"status\": \"Done\",\n    \"target\": \"22\",\n    \"limit\": \"25\",\n    \"reviewer\": \"Jamik Tashpulatov\"\n  },\n  {\n    \"id\": 47,\n    \"header\": \"Version Control Strategy\",\n    \"type\": \"Technical content\",\n    \"status\": \"In Process\",\n    \"target\": \"15\",\n    \"limit\": \"18\",\n    \"reviewer\": \"Assign reviewer\"\n  },\n  {\n    \"id\": 48,\n    \"header\": \"Continuous Integration Pipeline\",\n    \"type\": \"Technical content\",\n    \"status\": \"Done\",\n    \"target\": \"26\",\n    \"limit\": \"29\",\n    \"reviewer\": \"Michael Chen\"\n  },\n  {\n    \"id\": 49,\n    \"header\": \"Regulatory Compliance\",\n    \"type\": \"Legal\",\n    \"status\": \"In Process\",\n    \"target\": \"13\",\n    \"limit\": \"16\",\n    \"reviewer\": \"Assign reviewer\"\n  },\n  {\n    \"id\": 50,\n    \"header\": \"User Authentication System\",\n    \"type\": \"Technical content\",\n    \"status\": \"Done\",\n    \"target\": \"28\",\n    \"limit\": \"31\",\n    \"reviewer\": \"Eddie Lake\"\n  },\n  {\n    \"id\": 51,\n    \"header\": \"Data Analytics Framework\",\n    \"type\": \"Technical content\",\n    \"status\": \"In Process\",\n    \"target\": \"21\",\n    \"limit\": \"24\",\n    \"reviewer\": \"Jamik Tashpulatov\"\n  },\n  {\n    \"id\": 52,\n    \"header\": \"Cloud Infrastructure\",\n    \"type\": \"Technical content\",\n    \"status\": \"Done\",\n    \"target\": \"16\",\n    \"limit\": \"19\",\n    \"reviewer\": \"Assign reviewer\"\n  },\n  {\n    \"id\": 53,\n    \"header\": \"Network Security Measures\",\n    \"type\": \"Technical content\",\n    \"status\": \"In Process\",\n    \"target\": \"29\",\n    \"limit\": \"32\",\n    \"reviewer\": \"Lisa Wong\"\n  },\n  {\n    \"id\": 54,\n    \"header\": \"Project Timeline\",\n    \"type\": \"Planning\",\n    \"status\": \"Done\",\n    \"target\": \"14\",\n    \"limit\": \"17\",\n    \"reviewer\": \"Eddie Lake\"\n  },\n  {\n    \"id\": 55,\n    \"header\": \"Resource Allocation\",\n    \"type\": \"Planning\",\n    \"status\": \"In Process\",\n    \"target\": \"27\",\n    \"limit\": \"30\",\n    \"reviewer\": \"Assign reviewer\"\n  },\n  {\n    \"id\": 56,\n    \"header\": \"Team Structure and Roles\",\n    \"type\": \"Planning\",\n    \"status\": \"Done\",\n    \"target\": \"20\",\n    \"limit\": \"23\",\n    \"reviewer\": \"Jamik Tashpulatov\"\n  },\n  {\n    \"id\": 57,\n    \"header\": \"Communication Protocols\",\n    \"type\": \"Planning\",\n    \"status\": \"In Process\",\n    \"target\": \"15\",\n    \"limit\": \"18\",\n    \"reviewer\": \"Assign reviewer\"\n  },\n  {\n    \"id\": 58,\n    \"header\": \"Success Metrics\",\n    \"type\": \"Planning\",\n    \"status\": \"Done\",\n    \"target\": \"30\",\n    \"limit\": \"33\",\n    \"reviewer\": \"Eddie Lake\"\n  },\n  {\n    \"id\": 59,\n    \"header\": \"Internationalization Support\",\n    \"type\": \"Technical content\",\n    \"status\": \"In Process\",\n    \"target\": \"23\",\n    \"limit\": \"26\",\n    \"reviewer\": \"Jamik Tashpulatov\"\n  },\n  {\n    \"id\": 60,\n    \"header\": \"Backup and Recovery Procedures\",\n    \"type\": \"Technical content\",\n    \"status\": \"Done\",\n    \"target\": \"18\",\n    \"limit\": \"21\",\n    \"reviewer\": \"Assign reviewer\"\n  },\n  {\n    \"id\": 61,\n    \"header\": \"Monitoring and Alerting System\",\n    \"type\": \"Technical content\",\n    \"status\": \"In Process\",\n    \"target\": \"25\",\n    \"limit\": \"28\",\n    \"reviewer\": \"Daniel Park\"\n  },\n  {\n    \"id\": 62,\n    \"header\": \"Code Review Guidelines\",\n    \"type\": \"Technical content\",\n    \"status\": \"Done\",\n    \"target\": \"12\",\n    \"limit\": \"15\",\n    \"reviewer\": \"Eddie Lake\"\n  },\n  {\n    \"id\": 63,\n    \"header\": \"Documentation Standards\",\n    \"type\": \"Technical content\",\n    \"status\": \"In Process\",\n    \"target\": \"27\",\n    \"limit\": \"30\",\n    \"reviewer\": \"Jamik Tashpulatov\"\n  },\n  {\n    \"id\": 64,\n    \"header\": \"Release Management Process\",\n    \"type\": \"Planning\",\n    \"status\": \"Done\",\n    \"target\": \"22\",\n    \"limit\": \"25\",\n    \"reviewer\": \"Assign reviewer\"\n  },\n  {\n    \"id\": 65,\n    \"header\": \"Feature Prioritization Matrix\",\n    \"type\": \"Planning\",\n    \"status\": \"In Process\",\n    \"target\": \"19\",\n    \"limit\": \"22\",\n    \"reviewer\": \"Emma Davis\"\n  },\n  {\n    \"id\": 66,\n    \"header\": \"Technical Debt Assessment\",\n    \"type\": \"Technical content\",\n    \"status\": \"Done\",\n    \"target\": \"24\",\n    \"limit\": \"27\",\n    \"reviewer\": \"Eddie Lake\"\n  },\n  {\n    \"id\": 67,\n    \"header\": \"Capacity Planning\",\n    \"type\": \"Planning\",\n    \"status\": \"In Process\",\n    \"target\": \"21\",\n    \"limit\": \"24\",\n    \"reviewer\": \"Jamik Tashpulatov\"\n  },\n  {\n    \"id\": 68,\n    \"header\": \"Service Level Agreements\",\n    \"type\": \"Legal\",\n    \"status\": \"Done\",\n    \"target\": \"26\",\n    \"limit\": \"29\",\n    \"reviewer\": \"Assign reviewer\"\n  }\n]\n"
  },
  {
    "path": "frontend/app/[locale]/dashboard/page.tsx",
    "content": "import { DashboardStatCards } from \"@/components/dashboard/dashboard-stat-cards\"\nimport { AssetTrendChart } from \"@/components/dashboard/asset-trend-chart\"\nimport { VulnSeverityChart } from \"@/components/dashboard/vuln-severity-chart\"\nimport { DashboardDataTable } from \"@/components/dashboard/dashboard-data-table\"\n\n/**\n * Dashboard page component\n * This is the main dashboard page of the application, containing cards, charts and data tables\n * Layout structure has been moved to the root layout component\n */\nexport default function Page() {\n  return (\n    // Content area containing cards, charts and data tables\n    <div className=\"flex flex-col gap-4 py-4 md:gap-6 md:py-6\">\n      {/* Top statistics cards */}\n      <DashboardStatCards />\n\n      {/* Chart area - Trend chart + Vulnerability distribution */}\n      <div className=\"grid gap-4 px-4 lg:px-6 @xl/main:grid-cols-2\">\n        {/* Asset trend line chart */}\n        <AssetTrendChart />\n\n        {/* Vulnerability severity distribution */}\n        <VulnSeverityChart />\n      </div>\n\n      {/* Vulnerabilities / Scan history tab */}\n      <div className=\"px-4 lg:px-6\">\n        <DashboardDataTable />\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/layout.tsx",
    "content": "import type React from \"react\"\nimport type { Metadata } from \"next\"\nimport { NextIntlClientProvider } from 'next-intl'\nimport { getMessages, setRequestLocale, getTranslations } from 'next-intl/server'\nimport { notFound } from 'next/navigation'\nimport { locales, localeHtmlLang, type Locale } from '@/i18n/config'\n\n// Import global style files\nimport \"../globals.css\"\n// Import Noto Sans SC local font\nimport \"@fontsource/noto-sans-sc/400.css\"\nimport \"@fontsource/noto-sans-sc/500.css\"\nimport \"@fontsource/noto-sans-sc/700.css\"\n// Import color themes\nimport \"@/styles/themes/bubblegum.css\"\nimport \"@/styles/themes/quantum-rose.css\"\nimport \"@/styles/themes/clean-slate.css\"\nimport \"@/styles/themes/cosmic-night.css\"\nimport \"@/styles/themes/vercel.css\"\nimport \"@/styles/themes/vercel-dark.css\"\nimport \"@/styles/themes/violet-bloom.css\"\nimport \"@/styles/themes/cyberpunk-1.css\"\nimport { Suspense } from \"react\"\nimport Script from \"next/script\"\nimport { QueryProvider } from \"@/components/providers/query-provider\"\nimport { ThemeProvider } from \"@/components/providers/theme-provider\"\nimport { UiI18nProvider } from \"@/components/providers/ui-i18n-provider\"\n\n// Import common layout components\nimport { RoutePrefetch } from \"@/components/route-prefetch\"\nimport { RouteProgress } from \"@/components/route-progress\"\nimport { AuthLayout } from \"@/components/auth/auth-layout\"\n\n// Dynamically generate metadata\nexport async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise<Metadata> {\n  const { locale } = await params\n  const t = await getTranslations({ locale, namespace: 'metadata' })\n  \n  return {\n    title: t('title'),\n    description: t('description'),\n    keywords: t('keywords').split(',').map(k => k.trim()),\n    generator: \"Xingrin ASM Platform\",\n    authors: [{ name: \"yyhuni\" }],\n    openGraph: {\n      title: t('ogTitle'),\n      description: t('ogDescription'),\n      type: \"website\",\n      locale: locale === 'zh' ? 'zh_CN' : 'en_US',\n    },\n    robots: {\n      index: true,\n      follow: true,\n    },\n  }\n}\n\n// Use Noto Sans SC + system font fallback, fully loaded locally\nconst fontConfig = {\n  className: \"font-sans\",\n  style: {\n    fontFamily: \"'Noto Sans SC', system-ui, -apple-system, PingFang SC, Hiragino Sans GB, Microsoft YaHei, sans-serif\"\n  }\n}\n\n// Generate static parameters, support all languages\nexport function generateStaticParams() {\n  return locales.map((locale) => ({ locale }))\n}\n\ninterface Props {\n  children: React.ReactNode\n  params: Promise<{ locale: string }>\n}\n\n/**\n * Language layout component\n * Wraps all pages, provides internationalization context\n */\nexport default async function LocaleLayout({\n  children,\n  params,\n}: Props) {\n  const { locale } = await params\n\n  // Validate locale validity\n  if (!locales.includes(locale as Locale)) {\n    notFound()\n  }\n\n  // Enable static rendering\n  setRequestLocale(locale)\n\n  // Load translation messages\n  const messages = await getMessages()\n\n  return (\n    <html lang={localeHtmlLang[locale as Locale]} suppressHydrationWarning>\n      <body className={fontConfig.className} style={fontConfig.style}>\n        {/* Load external scripts */}\n        <Script\n          src=\"https://tweakcn.com/live-preview.min.js\"\n          strategy=\"beforeInteractive\"\n          crossOrigin=\"anonymous\"\n        />\n        {/* Route loading progress bar */}\n        <Suspense fallback={null}>\n          <RouteProgress />\n        </Suspense>\n        {/* ThemeProvider provides theme switching functionality */}\n        <ThemeProvider\n          attribute=\"class\"\n          defaultTheme=\"dark\"\n          enableSystem\n          disableTransitionOnChange\n        >\n          {/* NextIntlClientProvider provides internationalization context */}\n          <NextIntlClientProvider messages={messages}>\n            {/* QueryProvider provides React Query functionality */}\n            <QueryProvider>\n              {/* UiI18nProvider provides UI component translations */}\n              <UiI18nProvider>\n                {/* Route prefetch */}\n                <RoutePrefetch />\n                {/* AuthLayout handles authentication and sidebar display */}\n                <AuthLayout>\n                  {children}\n                </AuthLayout>\n              </UiI18nProvider>\n            </QueryProvider>\n          </NextIntlClientProvider>\n        </ThemeProvider>\n      </body>\n    </html>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/login/layout.tsx",
    "content": "import type { Metadata } from \"next\"\nimport { getTranslations } from \"next-intl/server\"\n\ntype Props = {\n  params: Promise<{ locale: string }>\n}\n\nexport async function generateMetadata({ params }: Props): Promise<Metadata> {\n  const { locale } = await params\n  const t = await getTranslations({ locale, namespace: \"auth\" })\n\n  return {\n    title: t(\"pageTitle\"),\n    description: t(\"pageDescription\"),\n  }\n}\n\n/**\n * Login page layout\n * Does not include sidebar and header\n */\nexport default function LoginLayout({\n  children,\n}: {\n  children: React.ReactNode\n}) {\n  return children\n}\n"
  },
  {
    "path": "frontend/app/[locale]/login/page.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { useRouter } from \"next/navigation\"\nimport { useTranslations } from \"next-intl\"\nimport Lottie from \"lottie-react\"\nimport securityAnimation from \"@/public/animations/Security000-Purple.json\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Card, CardContent } from \"@/components/ui/card\"\nimport {\n  Field,\n  FieldGroup,\n  FieldLabel,\n} from \"@/components/ui/field\"\nimport { Spinner } from \"@/components/ui/spinner\"\nimport { useLogin, useAuth } from \"@/hooks/use-auth\"\nimport { useRoutePrefetch } from \"@/hooks/use-route-prefetch\"\n\nexport default function LoginPage() {\n  // Preload all page components on login page\n  useRoutePrefetch()\n  const router = useRouter()\n  const { data: auth, isLoading: authLoading } = useAuth()\n  const { mutate: login, isPending } = useLogin()\n  const t = useTranslations(\"auth\")\n  \n  const [username, setUsername] = React.useState(\"\")\n  const [password, setPassword] = React.useState(\"\")\n\n  // If already logged in, redirect to dashboard\n  React.useEffect(() => {\n    if (auth?.authenticated) {\n      router.push(\"/dashboard/\")\n    }\n  }, [auth, router])\n\n  const handleSubmit = (e: React.FormEvent) => {\n    e.preventDefault()\n    login({ username, password })\n  }\n\n  // Show spinner while loading\n  if (authLoading) {\n    return (\n      <div className=\"flex min-h-svh w-full flex-col items-center justify-center gap-4 bg-background\">\n        <Spinner className=\"size-8 text-primary\" />\n        <p className=\"text-muted-foreground text-sm\" suppressHydrationWarning>loading...</p>\n      </div>\n    )\n  }\n\n  // Don't show login page if already logged in\n  if (auth?.authenticated) {\n    return null\n  }\n\n  return (\n    <div className=\"login-bg flex min-h-svh flex-col p-6 md:p-10\">\n      {/* Main content area */}\n      <div className=\"flex-1 flex items-center justify-center\">\n        <div className=\"w-full max-w-sm md:max-w-4xl\">\n          <Card className=\"overflow-hidden p-0\">\n            <CardContent className=\"grid p-0 md:grid-cols-2\">\n              <form className=\"p-6 md:p-8\" onSubmit={handleSubmit}>\n                <FieldGroup>\n                  {/* Fingerprint identifier - for FOFA/Shodan and other search engines to identify */}\n                  <meta name=\"generator\" content=\"Xingrin ASM Platform\" />\n                  <div className=\"flex flex-col items-center gap-2 text-center\">\n                    <h1 className=\"text-2xl font-bold\">{t(\"title\")}</h1>\n                    <p className=\"text-sm text-muted-foreground mt-1\">\n                      {t(\"subtitle\")}\n                    </p> \n                  </div>\n                  <Field>\n                    <FieldLabel htmlFor=\"username\">{t(\"username\")}</FieldLabel>\n                    <Input\n                      id=\"username\"\n                      type=\"text\"\n                      placeholder={t(\"usernamePlaceholder\")}\n                      value={username}\n                      onChange={(e) => setUsername(e.target.value)}\n                      required\n                      autoFocus\n                    />\n                  </Field>\n                  <Field>\n                    <FieldLabel htmlFor=\"password\">{t(\"password\")}</FieldLabel>\n                    <Input\n                      id=\"password\"\n                      type=\"password\"\n                      placeholder={t(\"passwordPlaceholder\")}\n                      value={password}\n                      onChange={(e) => setPassword(e.target.value)}\n                      required\n                    />\n                  </Field>\n                  <Field>\n                    <Button type=\"submit\" className=\"w-full\" disabled={isPending}>\n                      {isPending ? t(\"loggingIn\") : t(\"login\")}\n                    </Button>\n                  </Field>\n                </FieldGroup>\n              </form>\n              <div className=\"bg-primary/5 relative hidden md:flex md:items-center md:justify-center\">\n                <div className=\"text-center p-4\">\n                  <Lottie \n                    animationData={securityAnimation} \n                    loop={true}\n                    className=\"w-96 h-96 mx-auto\"\n                  />\n                </div>\n              </div>\n            </CardContent>\n          </Card>\n        </div>\n      </div>\n      \n      {/* Version number - fixed at the bottom of the page */}\n      <div className=\"flex-shrink-0 text-center py-4\">\n        <p className=\"text-xs text-muted-foreground\">\n          {process.env.NEXT_PUBLIC_VERSION || 'dev'}\n        </p>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/organization/[id]/page.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { OrganizationDetailView } from \"@/components/organization/organization-detail-view\"\n\n/**\n * Organization detail page\n * Displays organization statistics and asset list\n */\nexport default function OrganizationDetailPage({\n  params,\n}: {\n  params: Promise<{ id: string }>\n}) {\n  const resolvedParams = React.use(params)\n\n  return (\n    <div className=\"flex flex-col gap-4 py-4 md:gap-6 md:py-6\">\n      <OrganizationDetailView organizationId={resolvedParams.id} />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/organization/page.tsx",
    "content": "\"use client\"\n\n// Import organization management component\nimport { OrganizationList } from \"@/components/organization/organization-list\"\n// Import icons\nimport { Building2 } from \"lucide-react\"\nimport { useTranslations } from \"next-intl\"\n\n/**\n * Organization management page\n * Sub-page under asset management that displays organization list and related operations\n */\nexport default function OrganizationPage() {\n  const t = useTranslations(\"pages.organization\")\n\n  return (\n    // Content area containing organization management features\n    <div className=\"flex flex-col gap-4 py-4 md:gap-6 md:py-6\">\n      {/* Page header */}\n      <div className=\"flex items-center justify-between px-4 lg:px-6\">\n        <div>\n          <h2 className=\"text-2xl font-bold tracking-tight flex items-center gap-2\">\n            <Building2 />\n            {t(\"title\")}\n          </h2>\n          <p className=\"text-muted-foreground\">\n            {t(\"description\")}\n          </p>\n        </div>\n      </div>\n\n      {/* Organization list component */}\n      <div className=\"px-4 lg:px-6\">\n        <OrganizationList />\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/page.tsx",
    "content": "import { redirect } from 'next/navigation';\nimport { defaultLocale } from '@/i18n/config';\n\nexport default function Home() {\n  // Redirect directly to dashboard page (with language prefix)\n  redirect(`/${defaultLocale}/dashboard/`);\n}\n"
  },
  {
    "path": "frontend/app/[locale]/scan/engine/page.tsx",
    "content": "\"use client\"\n\nimport React, { useState, useMemo } from \"react\"\nimport { Settings, Search, Pencil, Trash2, Check, X, Plus } from \"lucide-react\"\nimport * as yaml from \"js-yaml\"\nimport Editor from \"@monaco-editor/react\"\nimport { useTranslations } from \"next-intl\"\nimport { useColorTheme } from \"@/hooks/use-color-theme\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { ScrollArea } from \"@/components/ui/scroll-area\"\nimport { Separator } from \"@/components/ui/separator\"\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\"\nimport { EngineEditDialog, EngineCreateDialog } from \"@/components/scan/engine\"\nimport { useEngines, useCreateEngine, useUpdateEngine, useDeleteEngine } from \"@/hooks/use-engines\"\nimport { cn } from \"@/lib/utils\"\nimport type { ScanEngine } from \"@/types/engine.types\"\nimport { MasterDetailSkeleton } from \"@/components/ui/master-detail-skeleton\"\n\n/** Feature configuration item definition - corresponds to YAML configuration structure */\nconst FEATURE_LIST = [\n  { key: \"subdomain_discovery\" },\n  { key: \"port_scan\" },\n  { key: \"site_scan\" },\n  { key: \"fingerprint_detect\" },\n  { key: \"directory_scan\" },\n  { key: \"screenshot\" },\n  { key: \"url_fetch\" },\n  { key: \"vuln_scan\" },\n] as const\n\ntype FeatureKey = typeof FEATURE_LIST[number][\"key\"]\n\n/** Parse engine configuration to get enabled features */\nfunction parseEngineFeatures(engine: ScanEngine): Record<FeatureKey, boolean> {\n  const defaultFeatures: Record<FeatureKey, boolean> = {\n    subdomain_discovery: false,\n    port_scan: false,\n    site_scan: false,\n    fingerprint_detect: false,\n    directory_scan: false,\n    screenshot: false,\n    url_fetch: false,\n    vuln_scan: false,\n  }\n\n  if (!engine.configuration) return defaultFeatures\n\n  try {\n    const config = yaml.load(engine.configuration) as Record<string, unknown>\n    if (!config) return defaultFeatures\n\n    return {\n      subdomain_discovery: !!config.subdomain_discovery,\n      port_scan: !!config.port_scan,\n      site_scan: !!config.site_scan,\n      fingerprint_detect: !!config.fingerprint_detect,\n      directory_scan: !!config.directory_scan,\n      screenshot: !!config.screenshot,\n      url_fetch: !!config.url_fetch,\n      vuln_scan: !!config.vuln_scan,\n    }\n  } catch {\n    return defaultFeatures\n  }\n}\n\n/** Calculate the number of enabled features */\nfunction countEnabledFeatures(engine: ScanEngine) {\n  const features = parseEngineFeatures(engine)\n  return Object.values(features).filter(Boolean).length\n}\n\n/**\n * Scan engine page\n */\nexport default function ScanEnginePage() {\n  const [selectedId, setSelectedId] = useState<number | null>(null)\n  const [searchQuery, setSearchQuery] = useState(\"\")\n  const [editingEngine, setEditingEngine] = useState<ScanEngine | null>(null)\n  const [isEditDialogOpen, setIsEditDialogOpen] = useState(false)\n  const [isCreateDialogOpen, setIsCreateDialogOpen] = useState(false)\n  const [deleteDialogOpen, setDeleteDialogOpen] = useState(false)\n  const [engineToDelete, setEngineToDelete] = useState<ScanEngine | null>(null)\n\n  const { currentTheme } = useColorTheme()\n  \n  // Internationalization\n  const tCommon = useTranslations(\"common\")\n  const tConfirm = useTranslations(\"common.confirm\")\n  const tNav = useTranslations(\"navigation\")\n  const tEngine = useTranslations(\"scan.engine\")\n\n  // API Hooks\n  const { data: engines = [], isLoading } = useEngines()\n  const createEngineMutation = useCreateEngine()\n  const updateEngineMutation = useUpdateEngine()\n  const deleteEngineMutation = useDeleteEngine()\n\n  // Filter engine list\n  const filteredEngines = useMemo(() => {\n    if (!searchQuery.trim()) return engines\n    const query = searchQuery.toLowerCase()\n    return engines.filter((e) => e.name.toLowerCase().includes(query))\n  }, [engines, searchQuery])\n\n  // Selected engine\n  const selectedEngine = useMemo(() => {\n    if (!selectedId) return null\n    return engines.find((e) => e.id === selectedId) || null\n  }, [selectedId, engines])\n\n  // Selected engine's feature status\n  const selectedFeatures = useMemo(() => {\n    if (!selectedEngine) return null\n    return parseEngineFeatures(selectedEngine)\n  }, [selectedEngine])\n\n  const handleEdit = (engine: ScanEngine) => {\n    setEditingEngine(engine)\n    setIsEditDialogOpen(true)\n  }\n\n  const handleSaveYaml = async (engineId: number, yamlContent: string) => {\n    await updateEngineMutation.mutateAsync({\n      id: engineId,\n      data: { configuration: yamlContent },\n    })\n  }\n\n  const handleDelete = (engine: ScanEngine) => {\n    setEngineToDelete(engine)\n    setDeleteDialogOpen(true)\n  }\n\n  const confirmDelete = () => {\n    if (!engineToDelete) return\n    deleteEngineMutation.mutate(engineToDelete.id, {\n      onSuccess: () => {\n        if (selectedId === engineToDelete.id) {\n          setSelectedId(null)\n        }\n        setDeleteDialogOpen(false)\n        setEngineToDelete(null)\n      },\n    })\n  }\n\n  const handleCreateEngine = async (name: string, yamlContent: string) => {\n    await createEngineMutation.mutateAsync({\n      name,\n      configuration: yamlContent,\n    })\n  }\n\n  // Loading state\n  if (isLoading) {\n    return <MasterDetailSkeleton title={tNav(\"scanEngine\")} listItemCount={4} />\n  }\n\n  return (\n    <div className=\"flex flex-col h-full\">\n      {/* Top: Title + Search + Create button */}\n      <div className=\"flex items-center justify-between gap-4 px-4 py-4 lg:px-6\">\n        <h1 className=\"text-2xl font-bold shrink-0\">{tNav(\"scanEngine\")}</h1>\n        <div className=\"flex items-center gap-2 flex-1 max-w-md\">\n          <div className=\"relative flex-1\">\n            <Search className=\"absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n            <Input\n              placeholder={tEngine(\"searchPlaceholder\")}\n              value={searchQuery}\n              onChange={(e) => setSearchQuery(e.target.value)}\n              className=\"pl-8\"\n            />\n          </div>\n        </div>\n        <Button onClick={() => setIsCreateDialogOpen(true)}>\n          <Plus className=\"h-4 w-4 mr-1\" />\n          {tEngine(\"createEngine\")}\n        </Button>\n      </div>\n\n      <Separator />\n\n      {/* Main: Left list + Right details */}\n      <div className=\"flex flex-1 min-h-0\">\n        {/* Left: Engine list */}\n        <div className=\"w-72 lg:w-80 border-r flex flex-col\">\n          <div className=\"px-4 py-3 border-b\">\n            <h2 className=\"text-sm font-medium text-muted-foreground\">\n              {tEngine(\"engineList\")} ({filteredEngines.length})\n            </h2>\n          </div>\n          <ScrollArea className=\"flex-1\">\n            {isLoading ? (\n              <div className=\"p-4 text-sm text-muted-foreground\">{tCommon(\"loading\")}</div>\n            ) : filteredEngines.length === 0 ? (\n              <div className=\"p-4 text-sm text-muted-foreground\">\n                {searchQuery ? tEngine(\"noMatchingEngine\") : tEngine(\"noEngines\")}\n              </div>\n            ) : (\n              <div className=\"p-2\">\n                {filteredEngines.map((engine) => (\n                  <button\n                    key={engine.id}\n                    onClick={() => setSelectedId(engine.id)}\n                    className={cn(\n                      \"w-full text-left rounded-lg px-3 py-2.5 transition-colors\",\n                      selectedId === engine.id\n                        ? \"bg-primary/10 text-primary\"\n                        : \"hover:bg-muted\"\n                    )}\n                  >\n                    <div className=\"font-medium text-sm truncate\">\n                      {engine.name}\n                    </div>\n                    <div className=\"text-xs text-muted-foreground mt-0.5\">\n                      {tEngine(\"featuresEnabled\", { count: countEnabledFeatures(engine) })}\n                    </div>\n                  </button>\n                ))}\n              </div>\n            )}\n          </ScrollArea>\n        </div>\n\n        {/* Right: Engine details */}\n        <div className=\"flex-1 flex flex-col min-w-0\">\n          {selectedEngine && selectedFeatures ? (\n            <>\n              {/* Details header */}\n              <div className=\"px-6 py-4 border-b\">\n                <div className=\"flex items-start gap-3\">\n                  <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-primary/10 shrink-0\">\n                    <Settings className=\"h-5 w-5 text-primary\" />\n                  </div>\n                  <div className=\"min-w-0 flex-1\">\n                    <h2 className=\"text-lg font-semibold truncate\">\n                      {selectedEngine.name}\n                    </h2>\n                    <p className=\"text-sm text-muted-foreground mt-0.5\">\n                      {tEngine(\"updatedAt\")} {new Date(selectedEngine.updatedAt).toLocaleString()}\n                    </p>\n                  </div>\n                  <Badge variant=\"outline\">\n                    {tEngine(\"featuresCount\", { count: countEnabledFeatures(selectedEngine) })}\n                  </Badge>\n                </div>\n              </div>\n\n              {/* Details content */}\n              <div className=\"flex-1 flex flex-col min-h-0 p-6 gap-6\">\n                {/* Feature status */}\n                <div className=\"shrink-0\">\n                  <h3 className=\"text-sm font-medium mb-3\">{tEngine(\"enabledFeatures\")}</h3>\n                  <div className=\"rounded-lg border\">\n                    <div className=\"grid grid-cols-3 gap-px bg-muted\">\n                      {FEATURE_LIST.map((feature) => {\n                        const enabled = selectedFeatures[feature.key as keyof typeof selectedFeatures]\n                        return (\n                          <div\n                            key={feature.key}\n                            className={cn(\n                              \"flex items-center gap-2 px-3 py-2.5 bg-background\",\n                              enabled ? \"text-foreground\" : \"text-muted-foreground\"\n                            )}\n                          >\n                            {enabled ? (\n                              <Check className=\"h-4 w-4 text-green-600 shrink-0\" />\n                            ) : (\n                              <X className=\"h-4 w-4 text-muted-foreground/50 shrink-0\" />\n                            )}\n                            <span className=\"text-sm truncate\">{tEngine(`features.${feature.key}`)}</span>\n                          </div>\n                        )\n                      })}\n                    </div>\n                  </div>\n                </div>\n\n                {/* Configuration preview */}\n                {selectedEngine.configuration && (\n                  <div className=\"flex-1 flex flex-col min-h-0\">\n                    <h3 className=\"text-sm font-medium mb-3 shrink-0\">{tEngine(\"configPreview\")}</h3>\n                    <div className=\"flex-1 rounded-lg border overflow-hidden min-h-0\">\n                      <Editor\n                        height=\"100%\"\n                        defaultLanguage=\"yaml\"\n                        value={selectedEngine.configuration}\n                        options={{\n                          readOnly: true,\n                          minimap: { enabled: false },\n                          fontSize: 12,\n                          lineNumbers: \"off\",\n                          scrollBeyondLastLine: false,\n                          automaticLayout: true,\n                          folding: true,\n                          wordWrap: \"on\",\n                          padding: { top: 12, bottom: 12 },\n                        }}\n                        theme={currentTheme.isDark ? \"vs-dark\" : \"light\"}\n                      />\n                    </div>\n                  </div>\n                )}\n              </div>\n\n              {/* Action buttons */}\n              <div className=\"px-6 py-4 border-t flex items-center gap-2\">\n                <Button\n                  variant=\"outline\"\n                  size=\"sm\"\n                  onClick={() => handleEdit(selectedEngine)}\n                >\n                  <Pencil className=\"h-4 w-4 mr-1.5\" />\n                  {tEngine(\"editConfig\")}\n                </Button>\n                <div className=\"flex-1\" />\n                <Button\n                  variant=\"outline\"\n                  size=\"sm\"\n                  className=\"text-destructive hover:text-destructive\"\n                  onClick={() => handleDelete(selectedEngine)}\n                  disabled={deleteEngineMutation.isPending}\n                >\n                  <Trash2 className=\"h-4 w-4 mr-1.5\" />\n                  {tCommon(\"actions.delete\")}\n                </Button>\n              </div>\n            </>\n          ) : (\n            // Unselected state\n            <div className=\"flex-1 flex items-center justify-center\">\n              <div className=\"text-center text-muted-foreground\">\n                <Settings className=\"h-12 w-12 mx-auto mb-3 opacity-50\" />\n                <p className=\"text-sm\">{tEngine(\"selectEngineHint\")}</p>\n              </div>\n            </div>\n          )}\n        </div>\n      </div>\n\n      {/* Edit engine dialog */}\n      <EngineEditDialog\n        engine={editingEngine}\n        open={isEditDialogOpen}\n        onOpenChange={setIsEditDialogOpen}\n        onSave={handleSaveYaml}\n      />\n\n      {/* Create engine dialog */}\n      <EngineCreateDialog\n        open={isCreateDialogOpen}\n        onOpenChange={setIsCreateDialogOpen}\n        onSave={handleCreateEngine}\n      />\n\n      {/* Delete confirmation dialog */}\n      <AlertDialog open={deleteDialogOpen} onOpenChange={setDeleteDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{tConfirm(\"deleteTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {tConfirm(\"deleteEngineMessage\", { name: engineToDelete?.name ?? \"\" })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"actions.cancel\")}</AlertDialogCancel>\n            <AlertDialogAction \n              onClick={confirmDelete} \n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n              disabled={deleteEngineMutation.isPending}\n            >\n              {deleteEngineMutation.isPending ? tConfirm(\"deleting\") : tCommon(\"actions.delete\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n    </div>\n  )\n}\n\n"
  },
  {
    "path": "frontend/app/[locale]/scan/history/[id]/directories/page.tsx",
    "content": "\"use client\"\n\nimport { useParams } from \"next/navigation\"\nimport { DirectoriesView } from \"@/components/directories/directories-view\"\n\nexport default function ScanDirectoriesPage() {\n  const { id } = useParams<{ id: string }>()\n  const scanId = Number(id)\n\n  return (\n    <div className=\"px-4 lg:px-6\">\n      <DirectoriesView scanId={scanId} />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/scan/history/[id]/endpoints/page.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { useParams } from \"next/navigation\"\nimport { EndpointsDetailView } from \"@/components/endpoints\"\n\nexport default function ScanHistoryEndpointsPage() {\n  const { id } = useParams<{ id: string }>()\n\n  return (\n    <div className=\"px-4 lg:px-6\">\n      <EndpointsDetailView scanId={parseInt(id)} />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/scan/history/[id]/ip-addresses/page.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { useParams } from \"next/navigation\"\nimport { IPAddressesView } from \"@/components/ip-addresses\"\n\nexport default function ScanHistoryIPsPage() {\n  const { id } = useParams<{ id: string }>()\n\n  return (\n    <div className=\"px-4 lg:px-6\">\n      <IPAddressesView scanId={Number(id)} />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/scan/history/[id]/layout.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { usePathname, useParams } from \"next/navigation\"\nimport Link from \"next/link\"\nimport { Target, LayoutDashboard, Package, Image, ShieldAlert } from \"lucide-react\"\nimport { Tabs, TabsList, TabsTrigger } from \"@/components/ui/tabs\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Skeleton } from \"@/components/ui/skeleton\"\nimport { useScan } from \"@/hooks/use-scans\"\nimport { useTranslations } from \"next-intl\"\n\nexport default function ScanHistoryLayout({\n  children,\n}: {\n  children: React.ReactNode\n}) {\n  const { id } = useParams<{ id: string }>()\n  const pathname = usePathname()\n  const { data: scanData, isLoading } = useScan(parseInt(id))\n  const t = useTranslations(\"scan.history\")\n\n  // Get primary navigation active tab\n  const getPrimaryTab = () => {\n    if (pathname.includes(\"/overview\")) return \"overview\"\n    if (pathname.includes(\"/screenshots\")) return \"screenshots\"\n    if (pathname.includes(\"/vulnerabilities\")) return \"vulnerabilities\"\n    // All asset pages fall under \"assets\"\n    if (\n      pathname.includes(\"/websites\") ||\n      pathname.includes(\"/subdomain\") ||\n      pathname.includes(\"/ip-addresses\") ||\n      pathname.includes(\"/endpoints\") ||\n      pathname.includes(\"/directories\")\n    ) {\n      return \"assets\"\n    }\n    return \"overview\"\n  }\n\n  // Get secondary navigation active tab (for assets)\n  const getSecondaryTab = () => {\n    if (pathname.includes(\"/websites\")) return \"websites\"\n    if (pathname.includes(\"/subdomain\")) return \"subdomain\"\n    if (pathname.includes(\"/ip-addresses\")) return \"ip-addresses\"\n    if (pathname.includes(\"/endpoints\")) return \"endpoints\"\n    if (pathname.includes(\"/directories\")) return \"directories\"\n    return \"websites\"\n  }\n\n  // Check if we should show secondary navigation\n  const showSecondaryNav = getPrimaryTab() === \"assets\"\n\n  const basePath = `/scan/history/${id}`\n  const primaryPaths = {\n    overview: `${basePath}/overview/`,\n    assets: `${basePath}/websites/`, // Default to websites when clicking assets\n    screenshots: `${basePath}/screenshots/`,\n    vulnerabilities: `${basePath}/vulnerabilities/`,\n  }\n\n  const secondaryPaths = {\n    websites: `${basePath}/websites/`,\n    subdomain: `${basePath}/subdomain/`,\n    \"ip-addresses\": `${basePath}/ip-addresses/`,\n    endpoints: `${basePath}/endpoints/`,\n    directories: `${basePath}/directories/`,\n  }\n\n  // Get counts for each tab from scan data\n  const summary = scanData?.summary as any\n  const counts = {\n    subdomain: summary?.subdomains || 0,\n    endpoints: summary?.endpoints || 0,\n    websites: summary?.websites || 0,\n    directories: summary?.directories || 0,\n    screenshots: summary?.screenshots || 0,\n    vulnerabilities: summary?.vulnerabilities?.total || 0,\n    \"ip-addresses\": summary?.ips || 0,\n  }\n\n  // Calculate total assets count\n  const totalAssets = counts.websites + counts.subdomain + counts[\"ip-addresses\"] + counts.endpoints + counts.directories\n\n  // Loading state\n  if (isLoading) {\n    return (\n      <div className=\"flex flex-col gap-4 py-4 md:gap-6 md:py-6\">\n        {/* Header skeleton */}\n        <div className=\"flex items-center gap-2 px-4 lg:px-6\">\n          <Skeleton className=\"h-4 w-16\" />\n          <span className=\"text-muted-foreground\">/</span>\n          <Skeleton className=\"h-4 w-32\" />\n        </div>\n        {/* Tabs skeleton */}\n        <div className=\"flex gap-1 px-4 lg:px-6\">\n          <Skeleton className=\"h-9 w-20\" />\n          <Skeleton className=\"h-9 w-20\" />\n          <Skeleton className=\"h-9 w-24\" />\n        </div>\n      </div>\n    )\n  }\n\n  return (\n    <div className=\"flex flex-col gap-4 py-4 md:gap-6 md:py-6 h-full\">\n      {/* Header: Page label + Scan info */}\n      <div className=\"flex items-center gap-2 text-sm px-4 lg:px-6\">\n        <span className=\"text-muted-foreground\">{t(\"breadcrumb.scanHistory\")}</span>\n        <span className=\"text-muted-foreground\">/</span>\n        <span className=\"font-medium flex items-center gap-1.5\">\n          <Target className=\"h-4 w-4\" />\n          {(scanData?.target as any)?.name || t(\"taskId\", { id })}\n        </span>\n      </div>\n\n      {/* Primary navigation */}\n      <div className=\"px-4 lg:px-6\">\n        <Tabs value={getPrimaryTab()}>\n          <TabsList>\n            <TabsTrigger value=\"overview\" asChild>\n              <Link href={primaryPaths.overview} className=\"flex items-center gap-1.5\">\n                <LayoutDashboard className=\"h-4 w-4\" />\n                {t(\"tabs.overview\")}\n              </Link>\n            </TabsTrigger>\n            <TabsTrigger value=\"assets\" asChild>\n              <Link href={primaryPaths.assets} className=\"flex items-center gap-1.5\">\n                <Package className=\"h-4 w-4\" />\n                {t(\"tabs.assets\")}\n                {totalAssets > 0 && (\n                  <Badge variant=\"secondary\" className=\"ml-1.5 h-5 min-w-5 rounded-full px-1.5 text-xs\">\n                    {totalAssets}\n                  </Badge>\n                )}\n              </Link>\n            </TabsTrigger>\n            <TabsTrigger value=\"screenshots\" asChild>\n              <Link href={primaryPaths.screenshots} className=\"flex items-center gap-1.5\">\n                <Image className=\"h-4 w-4\" />\n                {t(\"tabs.screenshots\")}\n                {counts.screenshots > 0 && (\n                  <Badge variant=\"secondary\" className=\"ml-1.5 h-5 min-w-5 rounded-full px-1.5 text-xs\">\n                    {counts.screenshots}\n                  </Badge>\n                )}\n              </Link>\n            </TabsTrigger>\n            <TabsTrigger value=\"vulnerabilities\" asChild>\n              <Link href={primaryPaths.vulnerabilities} className=\"flex items-center gap-1.5\">\n                <ShieldAlert className=\"h-4 w-4\" />\n                {t(\"tabs.vulnerabilities\")}\n                {counts.vulnerabilities > 0 && (\n                  <Badge variant=\"secondary\" className=\"ml-1.5 h-5 min-w-5 rounded-full px-1.5 text-xs\">\n                    {counts.vulnerabilities}\n                  </Badge>\n                )}\n              </Link>\n            </TabsTrigger>\n          </TabsList>\n        </Tabs>\n      </div>\n\n      {/* Secondary navigation (only for assets) */}\n      {showSecondaryNav && (\n        <div className=\"flex items-center px-4 lg:px-6\">\n          <Tabs value={getSecondaryTab()} className=\"w-full\">\n            <TabsList variant=\"underline\">\n              <TabsTrigger value=\"websites\" variant=\"underline\" asChild>\n                <Link href={secondaryPaths.websites} className=\"flex items-center gap-0.5\">\n                  Websites\n                  {counts.websites > 0 && (\n                    <Badge variant=\"secondary\" className=\"ml-1.5 h-5 min-w-5 rounded-full px-1.5 text-xs\">\n                      {counts.websites}\n                    </Badge>\n                  )}\n                </Link>\n              </TabsTrigger>\n              <TabsTrigger value=\"subdomain\" variant=\"underline\" asChild>\n                <Link href={secondaryPaths.subdomain} className=\"flex items-center gap-0.5\">\n                  Subdomains\n                  {counts.subdomain > 0 && (\n                    <Badge variant=\"secondary\" className=\"ml-1.5 h-5 min-w-5 rounded-full px-1.5 text-xs\">\n                      {counts.subdomain}\n                    </Badge>\n                  )}\n                </Link>\n              </TabsTrigger>\n              <TabsTrigger value=\"ip-addresses\" variant=\"underline\" asChild>\n                <Link href={secondaryPaths[\"ip-addresses\"]} className=\"flex items-center gap-0.5\">\n                  IPs\n                  {counts[\"ip-addresses\"] > 0 && (\n                    <Badge variant=\"secondary\" className=\"ml-1.5 h-5 min-w-5 rounded-full px-1.5 text-xs\">\n                      {counts[\"ip-addresses\"]}\n                    </Badge>\n                  )}\n                </Link>\n              </TabsTrigger>\n              <TabsTrigger value=\"endpoints\" variant=\"underline\" asChild>\n                <Link href={secondaryPaths.endpoints} className=\"flex items-center gap-0.5\">\n                  URLs\n                  {counts.endpoints > 0 && (\n                    <Badge variant=\"secondary\" className=\"ml-1.5 h-5 min-w-5 rounded-full px-1.5 text-xs\">\n                      {counts.endpoints}\n                    </Badge>\n                  )}\n                </Link>\n              </TabsTrigger>\n              <TabsTrigger value=\"directories\" variant=\"underline\" asChild>\n                <Link href={secondaryPaths.directories} className=\"flex items-center gap-0.5\">\n                  Directories\n                  {counts.directories > 0 && (\n                    <Badge variant=\"secondary\" className=\"ml-1.5 h-5 min-w-5 rounded-full px-1.5 text-xs\">\n                      {counts.directories}\n                    </Badge>\n                  )}\n                </Link>\n              </TabsTrigger>\n            </TabsList>\n          </Tabs>\n        </div>\n      )}\n\n      {/* Sub-page content */}\n      {children}\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/scan/history/[id]/overview/page.tsx",
    "content": "\"use client\"\n\nimport { useParams } from \"next/navigation\"\nimport { ScanOverview } from \"@/components/scan/history/scan-overview\"\n\n/**\n * Scan overview page\n * Displays scan statistics and summary information\n */\nexport default function ScanOverviewPage() {\n  const { id } = useParams<{ id: string }>()\n  const scanId = Number(id)\n\n  return (\n    <div className=\"flex-1 flex flex-col min-h-0 px-4 lg:px-6\">\n      <ScanOverview scanId={scanId} />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/scan/history/[id]/page.tsx",
    "content": "\"use client\"\n\nimport { useParams, useRouter } from \"next/navigation\"\nimport { useEffect } from \"react\"\n\nexport default function ScanHistoryDetailPage() {\n  const { id } = useParams<{ id: string }>()\n  const router = useRouter()\n\n  useEffect(() => {\n    router.replace(`/scan/history/${id}/overview/`)\n  }, [id, router])\n\n  return null\n}\n"
  },
  {
    "path": "frontend/app/[locale]/scan/history/[id]/screenshots/page.tsx",
    "content": "\"use client\"\n\nimport { useParams } from \"next/navigation\"\nimport { ScreenshotsGallery } from \"@/components/screenshots/screenshots-gallery\"\n\nexport default function ScanScreenshotsPage() {\n  const { id } = useParams<{ id: string }>()\n  const scanId = Number(id)\n\n  return (\n    <div className=\"px-4 lg:px-6\">\n      <ScreenshotsGallery scanId={scanId} />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/scan/history/[id]/subdomain/page.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { useParams } from \"next/navigation\"\nimport { SubdomainsDetailView } from \"@/components/subdomains\"\n\nexport default function ScanHistorySubdomainPage() {\n  const { id } = useParams<{ id: string }>()\n\n  return (\n    <div className=\"px-4 lg:px-6\">\n      <SubdomainsDetailView scanId={parseInt(id)} />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/scan/history/[id]/vulnerabilities/page.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { useParams } from \"next/navigation\"\nimport { VulnerabilitiesDetailView } from \"@/components/vulnerabilities\"\n\nexport default function ScanHistoryVulnerabilitiesPage() {\n  const { id } = useParams<{ id: string }>()\n\n  return (\n    <div className=\"px-4 lg:px-6\">\n      <VulnerabilitiesDetailView scanId={Number(id)} />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/scan/history/[id]/websites/page.tsx",
    "content": "\"use client\"\n\nimport { useParams } from \"next/navigation\"\nimport { WebSitesView } from \"@/components/websites/websites-view\"\n\nexport default function ScanWebSitesPage() {\n  const { id } = useParams<{ id: string }>()\n  const scanId = Number(id)\n\n  return (\n    <div className=\"px-4 lg:px-6\">\n      <WebSitesView scanId={scanId} />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/scan/history/page.tsx",
    "content": "\"use client\"\n\nimport { useTranslations } from \"next-intl\"\nimport { IconRadar } from \"@tabler/icons-react\"\nimport { ScanHistoryList } from \"@/components/scan/history/scan-history-list\"\nimport { ScanHistoryStatCards } from \"@/components/scan/history/scan-history-stat-cards\"\n\n/**\n * Scan history page\n * Displays historical records of all scan tasks\n */\nexport default function ScanHistoryPage() {\n  const t = useTranslations(\"scan.history\")\n\n  return (\n    <div className=\"@container/main flex flex-col gap-4 py-4 md:gap-6 md:py-6\">\n      {/* Page title */}\n      <div className=\"flex items-center gap-3 px-4 lg:px-6\">\n        <IconRadar className=\"size-8 text-primary\" />\n        <div>\n          <h1 className=\"text-3xl font-bold\">{t(\"title\")}</h1>\n          <p className=\"text-muted-foreground\">{t(\"description\")}</p>\n        </div>\n      </div>\n\n      {/* Statistics cards */}\n      <div className=\"px-4 lg:px-6\">\n        <ScanHistoryStatCards />\n      </div>\n\n      {/* Scan history list */}\n      <div className=\"px-4 lg:px-6\">\n        <ScanHistoryList />\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/scan/scheduled/page.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { useTranslations } from \"next-intl\"\nimport { ScheduledScanDataTable } from \"@/components/scan/scheduled/scheduled-scan-data-table\"\nimport { createScheduledScanColumns } from \"@/components/scan/scheduled/scheduled-scan-columns\"\nimport { CreateScheduledScanDialog } from \"@/components/scan/scheduled/create-scheduled-scan-dialog\"\nimport { EditScheduledScanDialog } from \"@/components/scan/scheduled/edit-scheduled-scan-dialog\"\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\"\nimport { \n  useScheduledScans, \n  useDeleteScheduledScan, \n  useToggleScheduledScan \n} from \"@/hooks/use-scheduled-scans\"\nimport type { ScheduledScan } from \"@/types/scheduled-scan.types\"\nimport { DataTableSkeleton } from \"@/components/ui/data-table-skeleton\"\n\n/**\n * Scheduled scan page\n * Manage scheduled scan task configuration\n */\nexport default function ScheduledScanPage() {\n  const [createDialogOpen, setCreateDialogOpen] = React.useState(false)\n  const [editDialogOpen, setEditDialogOpen] = React.useState(false)\n  const [editingScheduledScan, setEditingScheduledScan] = React.useState<ScheduledScan | null>(null)\n  const [deleteDialogOpen, setDeleteDialogOpen] = React.useState(false)\n  const [deletingScheduledScan, setDeletingScheduledScan] = React.useState<ScheduledScan | null>(null)\n  \n  // Internationalization\n  const tColumns = useTranslations(\"columns\")\n  const tCommon = useTranslations(\"common\")\n  const tScan = useTranslations(\"scan\")\n  const tConfirm = useTranslations(\"common.confirm\")\n\n  // Build translation object\n  const translations = React.useMemo(() => ({\n    columns: {\n      taskName: tColumns(\"scheduledScan.taskName\"),\n      scanEngine: tColumns(\"scheduledScan.scanEngine\"),\n      cronExpression: tColumns(\"scheduledScan.cronExpression\"),\n      scope: tColumns(\"scheduledScan.scope\"),\n      status: tColumns(\"common.status\"),\n      nextRun: tColumns(\"scheduledScan.nextRun\"),\n      runCount: tColumns(\"scheduledScan.runCount\"),\n      lastRun: tColumns(\"scheduledScan.lastRun\"),\n    },\n    actions: {\n      editTask: tScan(\"editTask\"),\n      delete: tCommon(\"actions.delete\"),\n      openMenu: tCommon(\"actions.openMenu\"),\n    },\n    status: {\n      enabled: tCommon(\"status.enabled\"),\n      disabled: tCommon(\"status.disabled\"),\n    },\n    cron: {\n      everyMinute: tScan(\"cron.everyMinute\"),\n      everyNMinutes: tScan.raw(\"cron.everyNMinutes\") as string,\n      everyHour: tScan.raw(\"cron.everyHour\") as string,\n      everyNHours: tScan.raw(\"cron.everyNHours\") as string,\n      everyDay: tScan.raw(\"cron.everyDay\") as string,\n      everyWeek: tScan.raw(\"cron.everyWeek\") as string,\n      everyMonth: tScan.raw(\"cron.everyMonth\") as string,\n      weekdays: tScan.raw(\"cron.weekdays\") as string[],\n    },\n  }), [tColumns, tCommon, tScan])\n  \n  // Pagination state\n  const [page, setPage] = React.useState(1)\n  const [pageSize, setPageSize] = React.useState(10)\n\n  // Search state\n  const [searchQuery, setSearchQuery] = React.useState(\"\")\n  const [isSearching, setIsSearching] = React.useState(false)\n\n  const handleSearchChange = (value: string) => {\n    setIsSearching(true)\n    setSearchQuery(value)\n    setPage(1)\n  }\n  \n  // Use actual API\n  const { data, isLoading, isFetching, refetch } = useScheduledScans({ page, pageSize, search: searchQuery || undefined })\n\n  // Reset search state when request completes\n  React.useEffect(() => {\n    if (!isFetching && isSearching) {\n      setIsSearching(false)\n    }\n  }, [isFetching, isSearching])\n  const { mutate: deleteScheduledScan } = useDeleteScheduledScan()\n  const { mutate: toggleScheduledScan } = useToggleScheduledScan()\n\n  const scheduledScans = data?.results || []\n  const total = data?.total || 0\n  const totalPages = data?.totalPages || 1\n\n  // Format date\n  const formatDate = React.useCallback((dateString: string) => {\n    const date = new Date(dateString)\n    return date.toLocaleString(\"zh-CN\", {\n      year: \"numeric\",\n      month: \"2-digit\",\n      day: \"2-digit\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n    })\n  }, [])\n\n  // Edit task\n  const handleEdit = React.useCallback((scan: ScheduledScan) => {\n    setEditingScheduledScan(scan)\n    setEditDialogOpen(true)\n  }, [])\n\n  // Delete task (open confirmation dialog)\n  const handleDelete = React.useCallback((scan: ScheduledScan) => {\n    setDeletingScheduledScan(scan)\n    setDeleteDialogOpen(true)\n  }, [])\n\n  // Confirm delete task\n  const confirmDelete = React.useCallback(() => {\n    if (deletingScheduledScan) {\n      deleteScheduledScan(deletingScheduledScan.id)\n      setDeleteDialogOpen(false)\n      setDeletingScheduledScan(null)\n    }\n  }, [deletingScheduledScan, deleteScheduledScan])\n\n  // Toggle task enabled status\n  const handleToggleStatus = React.useCallback((scan: ScheduledScan, enabled: boolean) => {\n    toggleScheduledScan({ id: scan.id, isEnabled: enabled })\n  }, [toggleScheduledScan])\n\n  // Page change handler\n  const handlePageChange = React.useCallback((newPage: number) => {\n    setPage(newPage)\n  }, [])\n\n  // Page size change handler\n  const handlePageSizeChange = React.useCallback((newPageSize: number) => {\n    setPageSize(newPageSize)\n    setPage(1) // Reset to first page\n  }, [])\n\n  // Add new task\n  const handleAddNew = React.useCallback(() => {\n    setCreateDialogOpen(true)\n  }, [])\n\n  // Create column definition\n  const columns = React.useMemo(\n    () =>\n      createScheduledScanColumns({\n        formatDate,\n        handleEdit,\n        handleDelete,\n        handleToggleStatus,\n        t: translations,\n      }),\n    [formatDate, handleEdit, handleDelete, handleToggleStatus, translations]\n  )\n\n  if (isLoading) {\n    return (\n      <div className=\"flex flex-col gap-4 py-4 md:gap-6 md:py-6\">\n        <div className=\"flex items-center justify-between px-4 lg:px-6\">\n          <div>\n            <h1 className=\"text-3xl font-bold\">{tScan(\"scheduled.title\")}</h1>\n            <p className=\"text-muted-foreground mt-1\">{tScan(\"scheduled.description\")}</p>\n          </div>\n        </div>\n        <DataTableSkeleton\n          toolbarButtonCount={2}\n          rows={5}\n          columns={6}\n        />\n      </div>\n    )\n  }\n\n  return (\n    <div className=\"flex flex-col gap-4 py-4 md:gap-6 md:py-6\">\n      {/* Page title */}\n      <div className=\"px-4 lg:px-6\">\n        <div>\n          <h1 className=\"text-3xl font-bold\">{tScan(\"scheduled.title\")}</h1>\n          <p className=\"text-muted-foreground mt-1\">{tScan(\"scheduled.description\")}</p>\n        </div>\n      </div>\n\n      {/* Data table */}\n      <div className=\"px-4 lg:px-6\">\n        <ScheduledScanDataTable\n          data={scheduledScans}\n          columns={columns}\n          onAddNew={handleAddNew}\n          searchPlaceholder={tScan(\"scheduled.searchPlaceholder\")}\n          searchValue={searchQuery}\n          onSearch={handleSearchChange}\n          isSearching={isSearching}\n          addButtonText={tScan(\"scheduled.createTitle\")}\n          page={page}\n          pageSize={pageSize}\n          total={total}\n          totalPages={totalPages}\n          onPageChange={handlePageChange}\n          onPageSizeChange={handlePageSizeChange}\n        />\n      </div>\n\n      {/* Create scheduled scan dialog */}\n      <CreateScheduledScanDialog\n        open={createDialogOpen}\n        onOpenChange={setCreateDialogOpen}\n        onSuccess={() => refetch()}\n      />\n\n      {/* Edit scheduled scan dialog */}\n      <EditScheduledScanDialog\n        open={editDialogOpen}\n        onOpenChange={setEditDialogOpen}\n        scheduledScan={editingScheduledScan}\n        onSuccess={() => refetch()}\n      />\n\n      {/* Delete confirmation dialog */}\n      <AlertDialog open={deleteDialogOpen} onOpenChange={setDeleteDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{tConfirm(\"deleteTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {tConfirm(\"deleteScheduledScanMessage\", { name: deletingScheduledScan?.name ?? \"\" })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"actions.cancel\")}</AlertDialogCancel>\n            <AlertDialogAction onClick={confirmDelete} className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\">\n              {tCommon(\"actions.delete\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/search/page.tsx",
    "content": "import { SearchPage } from \"@/components/search\"\n\nexport default function Search() {\n  return <SearchPage />\n}\n"
  },
  {
    "path": "frontend/app/[locale]/settings/api-keys/page.tsx",
    "content": "\"use client\"\n\nimport React, { useState, useEffect } from 'react'\nimport { IconEye, IconEyeOff, IconWorldSearch, IconRadar2 } from '@tabler/icons-react'\n\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Switch } from '@/components/ui/switch'\nimport { Separator } from '@/components/ui/separator'\nimport { Badge } from '@/components/ui/badge'\nimport { Skeleton } from '@/components/ui/skeleton'\nimport { useApiKeySettings, useUpdateApiKeySettings } from '@/hooks/use-api-key-settings'\nimport type { ApiKeySettings } from '@/types/api-key-settings.types'\n\n// 密码输入框组件（带显示/隐藏切换）\nfunction PasswordInput({ value, onChange, placeholder, disabled }: {\n  value: string\n  onChange: (value: string) => void\n  placeholder?: string\n  disabled?: boolean\n}) {\n  const [show, setShow] = useState(false)\n  return (\n    <div className=\"relative\">\n      <Input\n        type={show ? 'text' : 'password'}\n        value={value}\n        onChange={(e) => onChange(e.target.value)}\n        placeholder={placeholder}\n        disabled={disabled}\n        className=\"pr-10\"\n      />\n      <button\n        type=\"button\"\n        onClick={() => setShow(!show)}\n        className=\"absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground\"\n      >\n        {show ? <IconEyeOff className=\"h-4 w-4\" /> : <IconEye className=\"h-4 w-4\" />}\n      </button>\n    </div>\n  )\n}\n\n// Provider 配置定义\nconst PROVIDERS = [\n  {\n    key: 'fofa',\n    name: 'FOFA',\n    description: '网络空间测绘平台，提供全球互联网资产搜索',\n    icon: IconWorldSearch,\n    color: 'text-blue-500',\n    bgColor: 'bg-blue-500/10',\n    fields: [\n      { name: 'email', label: '邮箱', type: 'text', placeholder: 'your@email.com' },\n      { name: 'apiKey', label: 'API Key', type: 'password', placeholder: '输入 FOFA API Key' },\n    ],\n    docUrl: 'https://fofa.info/api',\n  },\n  {\n    key: 'hunter',\n    name: 'Hunter (鹰图)',\n    description: '奇安信威胁情报平台，提供网络空间资产测绘',\n    icon: IconRadar2,\n    color: 'text-orange-500',\n    bgColor: 'bg-orange-500/10',\n    fields: [\n      { name: 'apiKey', label: 'API Key', type: 'password', placeholder: '输入 Hunter API Key' },\n    ],\n    docUrl: 'https://hunter.qianxin.com/',\n  },\n  {\n    key: 'shodan',\n    name: 'Shodan',\n    description: '全球最大的互联网设备搜索引擎',\n    icon: IconWorldSearch,\n    color: 'text-red-500',\n    bgColor: 'bg-red-500/10',\n    fields: [\n      { name: 'apiKey', label: 'API Key', type: 'password', placeholder: '输入 Shodan API Key' },\n    ],\n    docUrl: 'https://developer.shodan.io/',\n  },\n  {\n    key: 'censys',\n    name: 'Censys',\n    description: '互联网资产搜索和监控平台',\n    icon: IconWorldSearch,\n    color: 'text-purple-500',\n    bgColor: 'bg-purple-500/10',\n    fields: [\n      { name: 'apiId', label: 'API ID', type: 'text', placeholder: '输入 Censys API ID' },\n      { name: 'apiSecret', label: 'API Secret', type: 'password', placeholder: '输入 Censys API Secret' },\n    ],\n    docUrl: 'https://search.censys.io/api',\n  },\n  {\n    key: 'zoomeye',\n    name: 'ZoomEye (钟馗之眼)',\n    description: '知道创宇网络空间搜索引擎',\n    icon: IconWorldSearch,\n    color: 'text-green-500',\n    bgColor: 'bg-green-500/10',\n    fields: [\n      { name: 'apiKey', label: 'API Key', type: 'password', placeholder: '输入 ZoomEye API Key' },\n    ],\n    docUrl: 'https://www.zoomeye.org/doc',\n  },\n  {\n    key: 'securitytrails',\n    name: 'SecurityTrails',\n    description: 'DNS 历史记录和子域名数据平台',\n    icon: IconWorldSearch,\n    color: 'text-cyan-500',\n    bgColor: 'bg-cyan-500/10',\n    fields: [\n      { name: 'apiKey', label: 'API Key', type: 'password', placeholder: '输入 SecurityTrails API Key' },\n    ],\n    docUrl: 'https://securitytrails.com/corp/api',\n  },\n  {\n    key: 'threatbook',\n    name: 'ThreatBook (微步在线)',\n    description: '威胁情报平台，提供域名和 IP 情报查询',\n    icon: IconWorldSearch,\n    color: 'text-indigo-500',\n    bgColor: 'bg-indigo-500/10',\n    fields: [\n      { name: 'apiKey', label: 'API Key', type: 'password', placeholder: '输入 ThreatBook API Key' },\n    ],\n    docUrl: 'https://x.threatbook.com/api',\n  },\n  {\n    key: 'quake',\n    name: 'Quake (360)',\n    description: '360 网络空间测绘系统',\n    icon: IconWorldSearch,\n    color: 'text-teal-500',\n    bgColor: 'bg-teal-500/10',\n    fields: [\n      { name: 'apiKey', label: 'API Key', type: 'password', placeholder: '输入 Quake API Key' },\n    ],\n    docUrl: 'https://quake.360.net/quake/#/help',\n  },\n]\n\n// 默认配置\nconst DEFAULT_SETTINGS: ApiKeySettings = {\n  fofa: { enabled: false, email: '', apiKey: '' },\n  hunter: { enabled: false, apiKey: '' },\n  shodan: { enabled: false, apiKey: '' },\n  censys: { enabled: false, apiId: '', apiSecret: '' },\n  zoomeye: { enabled: false, apiKey: '' },\n  securitytrails: { enabled: false, apiKey: '' },\n  threatbook: { enabled: false, apiKey: '' },\n  quake: { enabled: false, apiKey: '' },\n}\n\nexport default function ApiKeysSettingsPage() {\n  const { data: settings, isLoading } = useApiKeySettings()\n  const updateMutation = useUpdateApiKeySettings()\n  \n  const [formData, setFormData] = useState<ApiKeySettings>(DEFAULT_SETTINGS)\n  const [hasChanges, setHasChanges] = useState(false)\n\n  // 当数据加载完成后，更新表单数据\n  useEffect(() => {\n    if (settings) {\n      setFormData({ ...DEFAULT_SETTINGS, ...settings })\n      setHasChanges(false)\n    }\n  }, [settings])\n\n  const updateProvider = (providerKey: string, field: string, value: any) => {\n    setFormData(prev => ({\n      ...prev,\n      [providerKey]: {\n        ...prev[providerKey as keyof ApiKeySettings],\n        [field]: value,\n      }\n    }))\n    setHasChanges(true)\n  }\n\n  const handleSave = async () => {\n    updateMutation.mutate(formData)\n    setHasChanges(false)\n  }\n\n  const enabledCount = Object.values(formData).filter((p: any) => p?.enabled).length\n\n  if (isLoading) {\n    return (\n      <div className=\"p-4 md:p-6 space-y-6\">\n        <div>\n          <Skeleton className=\"h-8 w-48\" />\n          <Skeleton className=\"h-4 w-96 mt-2\" />\n        </div>\n        <div className=\"grid gap-4\">\n          {[1, 2, 3].map((i) => (\n            <Skeleton key={i} className=\"h-24 w-full\" />\n          ))}\n        </div>\n      </div>\n    )\n  }\n\n  return (\n    <div className=\"p-4 md:p-6 space-y-6\">\n      {/* 页面标题 */}\n      <div>\n        <div className=\"flex items-center gap-2\">\n          <h1 className=\"text-2xl font-semibold\">API 密钥配置</h1>\n          {enabledCount > 0 && (\n            <Badge variant=\"secondary\">{enabledCount} 个已启用</Badge>\n          )}\n        </div>\n        <p className=\"text-muted-foreground mt-1\">\n          配置第三方数据源的 API 密钥，用于增强子域名发现能力。启用后将在 subfinder 扫描时自动使用。\n        </p>\n      </div>\n\n      {/* Provider 卡片列表 */}\n      <div className=\"grid gap-4\">\n        {PROVIDERS.map((provider) => {\n          const data = formData[provider.key as keyof ApiKeySettings] || {}\n          const isEnabled = (data as any)?.enabled || false\n\n          return (\n            <Card key={provider.key}>\n              <CardHeader className=\"pb-4\">\n                <div className=\"flex items-center justify-between\">\n                  <div className=\"flex items-center gap-3\">\n                    <div className={`flex h-10 w-10 items-center justify-center rounded-lg ${provider.bgColor}`}>\n                      <provider.icon className={`h-5 w-5 ${provider.color}`} />\n                    </div>\n                    <div>\n                      <div className=\"flex items-center gap-2\">\n                        <CardTitle className=\"text-base\">{provider.name}</CardTitle>\n                        {isEnabled && <Badge variant=\"outline\" className=\"text-xs text-green-600\">已启用</Badge>}\n                      </div>\n                      <CardDescription>{provider.description}</CardDescription>\n                    </div>\n                  </div>\n                  <Switch\n                    checked={isEnabled}\n                    onCheckedChange={(checked) => updateProvider(provider.key, 'enabled', checked)}\n                  />\n                </div>\n              </CardHeader>\n\n              {/* 展开的配置表单 */}\n              {isEnabled && (\n                <CardContent className=\"pt-0\">\n                  <Separator className=\"mb-4\" />\n                  <div className=\"space-y-4\">\n                    {provider.fields.map((field) => (\n                      <div key={field.name} className=\"space-y-2\">\n                        <label className=\"text-sm font-medium\">{field.label}</label>\n                        {field.type === 'password' ? (\n                          <PasswordInput\n                            value={(data as any)[field.name] || ''}\n                            onChange={(value) => updateProvider(provider.key, field.name, value)}\n                            placeholder={field.placeholder}\n                          />\n                        ) : (\n                          <Input\n                            type=\"text\"\n                            value={(data as any)[field.name] || ''}\n                            onChange={(e) => updateProvider(provider.key, field.name, e.target.value)}\n                            placeholder={field.placeholder}\n                          />\n                        )}\n                      </div>\n                    ))}\n                    <p className=\"text-xs text-muted-foreground\">\n                      获取 API Key：\n                      <a \n                        href={provider.docUrl} \n                        target=\"_blank\" \n                        rel=\"noopener noreferrer\"\n                        className=\"text-primary hover:underline ml-1\"\n                      >\n                        {provider.docUrl}\n                      </a>\n                    </p>\n                  </div>\n                </CardContent>\n              )}\n            </Card>\n          )\n        })}\n      </div>\n\n      {/* 保存按钮 */}\n      <div className=\"flex justify-end\">\n        <Button \n          onClick={handleSave} \n          disabled={updateMutation.isPending || !hasChanges}\n        >\n          {updateMutation.isPending ? '保存中...' : '保存配置'}\n        </Button>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/settings/blacklist/page.tsx",
    "content": "\"use client\"\n\nimport React, { useState, useEffect } from \"react\"\nimport { useTranslations } from \"next-intl\"\nimport { AlertTriangle, Loader2, Ban } from \"lucide-react\"\nimport { Button } from \"@/components/ui/button\"\nimport { Textarea } from \"@/components/ui/textarea\"\nimport { Skeleton } from \"@/components/ui/skeleton\"\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from \"@/components/ui/card\"\nimport { useGlobalBlacklist, useUpdateGlobalBlacklist } from \"@/hooks/use-global-blacklist\"\n\n/**\n * Global blacklist settings page\n */\nexport default function GlobalBlacklistPage() {\n  const t = useTranslations(\"pages.settings.blacklist\")\n  \n  const [blacklistText, setBlacklistText] = useState(\"\")\n  const [hasChanges, setHasChanges] = useState(false)\n\n  const { data, isLoading, error } = useGlobalBlacklist()\n  const updateBlacklist = useUpdateGlobalBlacklist()\n\n  // Initialize text when data loads\n  useEffect(() => {\n    if (data?.patterns) {\n      setBlacklistText(data.patterns.join(\"\\n\"))\n      setHasChanges(false)\n    }\n  }, [data])\n\n  // Handle text change\n  const handleTextChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n    setBlacklistText(e.target.value)\n    setHasChanges(true)\n  }\n\n  // Handle save\n  const handleSave = () => {\n    const patterns = blacklistText\n      .split(\"\\n\")\n      .map((line) => line.trim())\n      .filter((line) => line.length > 0)\n\n    updateBlacklist.mutate(\n      { patterns },\n      {\n        onSuccess: () => {\n          setHasChanges(false)\n        },\n      }\n    )\n  }\n\n  if (isLoading) {\n    return (\n      <div className=\"flex flex-1 flex-col gap-4 p-4\">\n        <div className=\"space-y-2\">\n          <Skeleton className=\"h-8 w-48\" />\n          <Skeleton className=\"h-4 w-96\" />\n        </div>\n        <Skeleton className=\"h-[400px] w-full\" />\n      </div>\n    )\n  }\n\n  if (error) {\n    return (\n      <div className=\"flex flex-1 flex-col items-center justify-center py-12\">\n        <AlertTriangle className=\"h-10 w-10 text-destructive mb-4\" />\n        <p className=\"text-muted-foreground\">{t(\"loadError\")}</p>\n      </div>\n    )\n  }\n\n  return (\n    <div className=\"flex flex-1 flex-col gap-4 p-4\">\n      {/* Page header */}\n      <div>\n        <h1 className=\"text-2xl font-bold\">{t(\"title\")}</h1>\n        <p className=\"text-muted-foreground\">{t(\"description\")}</p>\n      </div>\n\n      {/* Blacklist card */}\n      <Card>\n        <CardHeader>\n          <div className=\"flex items-center gap-2\">\n            <Ban className=\"h-5 w-5 text-muted-foreground\" />\n            <CardTitle>{t(\"card.title\")}</CardTitle>\n          </div>\n          <CardDescription>{t(\"card.description\")}</CardDescription>\n        </CardHeader>\n        <CardContent className=\"space-y-4\">\n          {/* Rules hint */}\n          <div className=\"flex flex-wrap items-center gap-x-4 gap-y-2 text-sm text-muted-foreground\">\n            <span className=\"font-medium text-foreground\">{t(\"rules.title\")}:</span>\n            <span><code className=\"bg-muted px-1.5 py-0.5 rounded text-xs\">*.gov</code> {t(\"rules.domain\")}</span>\n            <span><code className=\"bg-muted px-1.5 py-0.5 rounded text-xs\">*cdn*</code> {t(\"rules.keyword\")}</span>\n            <span><code className=\"bg-muted px-1.5 py-0.5 rounded text-xs\">192.168.1.1</code> {t(\"rules.ip\")}</span>\n            <span><code className=\"bg-muted px-1.5 py-0.5 rounded text-xs\">10.0.0.0/8</code> {t(\"rules.cidr\")}</span>\n          </div>\n\n          {/* Scope hint */}\n          <div className=\"rounded-lg border bg-muted/50 p-3 text-sm\">\n            <p className=\"text-muted-foreground\">{t(\"scopeHint\")}</p>\n          </div>\n\n          {/* Input */}\n          <Textarea\n            value={blacklistText}\n            onChange={handleTextChange}\n            placeholder={t(\"placeholder\")}\n            className=\"min-h-[320px] font-mono text-sm\"\n          />\n\n          {/* Save button */}\n          <div className=\"flex justify-end\">\n            <Button\n              onClick={handleSave}\n              disabled={!hasChanges || updateBlacklist.isPending}\n            >\n              {updateBlacklist.isPending && (\n                <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n              )}\n              {t(\"save\")}\n            </Button>\n          </div>\n        </CardContent>\n      </Card>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/settings/notifications/page.tsx",
    "content": "\"use client\"\n\nimport React from 'react'\nimport { useForm } from 'react-hook-form'\nimport { useTranslations } from 'next-intl'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport * as z from 'zod'\nimport { IconBrandDiscord, IconMail, IconBrandSlack, IconScan, IconShieldCheck, IconWorld, IconSettings } from '@tabler/icons-react'\n\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Switch } from '@/components/ui/switch'\nimport { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form'\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\nimport { Separator } from '@/components/ui/separator'\nimport { Badge } from '@/components/ui/badge'\nimport { useNotificationSettings, useUpdateNotificationSettings } from '@/hooks/use-notification-settings'\n\nexport default function NotificationSettingsPage() {\n  const t = useTranslations(\"settings.notifications\")\n  const { data, isLoading } = useNotificationSettings()\n  const updateMutation = useUpdateNotificationSettings()\n\n  // Schema with translations\n  const schema = z\n    .object({\n      discord: z.object({\n        enabled: z.boolean(),\n        webhookUrl: z.string().url(t(\"discord.urlInvalid\")).or(z.literal('')),\n      }),\n      wecom: z.object({\n        enabled: z.boolean(),\n        webhookUrl: z.string().url(t(\"wecom.urlInvalid\")).or(z.literal('')),\n      }),\n      categories: z.object({\n        scan: z.boolean(),\n        vulnerability: z.boolean(),\n        asset: z.boolean(),\n        system: z.boolean(),\n      }),\n    })\n    .superRefine((val, ctx) => {\n      if (val.discord.enabled) {\n        if (!val.discord.webhookUrl || val.discord.webhookUrl.trim() === '') {\n          ctx.addIssue({\n            code: z.ZodIssueCode.custom,\n            message: t(\"discord.requiredError\"),\n            path: ['discord', 'webhookUrl'],\n          })\n        }\n      }\n      if (val.wecom.enabled) {\n        if (!val.wecom.webhookUrl || val.wecom.webhookUrl.trim() === '') {\n          ctx.addIssue({\n            code: z.ZodIssueCode.custom,\n            message: t(\"wecom.requiredError\"),\n            path: ['wecom', 'webhookUrl'],\n          })\n        }\n      }\n    })\n\n  const NOTIFICATION_CATEGORIES = [\n    {\n      key: 'scan' as const,\n      label: t(\"categories.scan\"),\n      description: t(\"categories.scanDesc\"),\n      icon: IconScan,\n    },\n    {\n      key: 'vulnerability' as const,\n      label: t(\"categories.vulnerability\"),\n      description: t(\"categories.vulnerabilityDesc\"),\n      icon: IconShieldCheck,\n    },\n    {\n      key: 'asset' as const,\n      label: t(\"categories.asset\"),\n      description: t(\"categories.assetDesc\"),\n      icon: IconWorld,\n    },\n    {\n      key: 'system' as const,\n      label: t(\"categories.system\"),\n      description: t(\"categories.systemDesc\"),\n      icon: IconSettings,\n    },\n  ]\n\n  const form = useForm<z.infer<typeof schema>>({\n    resolver: zodResolver(schema),\n    values: data ?? {\n      discord: { enabled: false, webhookUrl: '' },\n      wecom: { enabled: false, webhookUrl: '' },\n      categories: {\n        scan: true,\n        vulnerability: true,\n        asset: true,\n        system: false,\n      },\n    },\n  })\n\n  const onSubmit = (values: z.infer<typeof schema>) => {\n    updateMutation.mutate(values)\n  }\n\n  const discordEnabled = form.watch('discord.enabled')\n  const wecomEnabled = form.watch('wecom.enabled')\n\n  return (\n    <div className=\"p-4 md:p-6 space-y-6\">\n      <div>\n        <h1 className=\"text-2xl font-semibold\">{t(\"pageTitle\")}</h1>\n        <p className=\"text-muted-foreground mt-1\">{t(\"pageDesc\")}</p>\n      </div>\n\n      <Tabs defaultValue=\"channels\" className=\"w-full\">\n        <TabsList>\n          <TabsTrigger value=\"channels\">{t(\"tabs.channels\")}</TabsTrigger>\n          <TabsTrigger value=\"preferences\">{t(\"tabs.preferences\")}</TabsTrigger>\n        </TabsList>\n\n        <Form {...form}>\n          <form onSubmit={form.handleSubmit(onSubmit)}>\n            {/* Push channels tab */}\n            <TabsContent value=\"channels\" className=\"space-y-4 mt-4\">\n              {/* Discord card */}\n              <Card>\n                <CardHeader className=\"pb-4\">\n                  <div className=\"flex items-center justify-between\">\n                    <div className=\"flex items-center gap-3\">\n                      <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-[#5865F2]/10\">\n                        <IconBrandDiscord className=\"h-5 w-5 text-[#5865F2]\" />\n                      </div>\n                      <div>\n                        <CardTitle className=\"text-base\">{t(\"discord.title\")}</CardTitle>\n                        <CardDescription>{t(\"discord.description\")}</CardDescription>\n                      </div>\n                    </div>\n                    <FormField\n                      control={form.control}\n                      name=\"discord.enabled\"\n                      render={({ field }) => (\n                        <FormControl>\n                          <Switch \n                            checked={field.value} \n                            onCheckedChange={field.onChange} \n                            disabled={isLoading || updateMutation.isPending} \n                          />\n                        </FormControl>\n                      )}\n                    />\n                  </div>\n                </CardHeader>\n                {discordEnabled && (\n                  <CardContent className=\"pt-0\">\n                    <Separator className=\"mb-4\" />\n                    <FormField\n                      control={form.control}\n                      name=\"discord.webhookUrl\"\n                      render={({ field }) => (\n                        <FormItem>\n                          <FormLabel>{t(\"discord.webhookLabel\")}</FormLabel>\n                          <FormControl>\n                            <Input \n                              placeholder={t(\"discord.webhookPlaceholder\")} \n                              {...field} \n                              disabled={isLoading || updateMutation.isPending} \n                            />\n                          </FormControl>\n                          <FormDescription>\n                            {t(\"discord.webhookHelp\")}\n                          </FormDescription>\n                          <FormMessage />\n                        </FormItem>\n                      )}\n                    />\n                  </CardContent>\n                )}\n              </Card>\n\n              {/* Email - Coming soon */}\n              <Card className=\"opacity-60\">\n                <CardHeader className=\"pb-4\">\n                  <div className=\"flex items-center justify-between\">\n                    <div className=\"flex items-center gap-3\">\n                      <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-muted\">\n                        <IconMail className=\"h-5 w-5 text-muted-foreground\" />\n                      </div>\n                      <div>\n                        <div className=\"flex items-center gap-2\">\n                          <CardTitle className=\"text-base\">{t(\"emailChannel.title\")}</CardTitle>\n                          <Badge variant=\"secondary\" className=\"text-xs\">{t(\"emailChannel.comingSoon\")}</Badge>\n                        </div>\n                        <CardDescription>{t(\"emailChannel.description\")}</CardDescription>\n                      </div>\n                    </div>\n                    <Switch disabled />\n                  </div>\n                </CardHeader>\n              </Card>\n\n              {/* 企业微信 */}\n              <Card>\n                <CardHeader className=\"pb-4\">\n                  <div className=\"flex items-center justify-between\">\n                    <div className=\"flex items-center gap-3\">\n                      <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-[#07C160]/10\">\n                        <IconBrandSlack className=\"h-5 w-5 text-[#07C160]\" />\n                      </div>\n                      <div>\n                        <CardTitle className=\"text-base\">{t(\"wecom.title\")}</CardTitle>\n                        <CardDescription>{t(\"wecom.description\")}</CardDescription>\n                      </div>\n                    </div>\n                    <FormField\n                      control={form.control}\n                      name=\"wecom.enabled\"\n                      render={({ field }) => (\n                        <FormControl>\n                          <Switch\n                            checked={field.value}\n                            onCheckedChange={field.onChange}\n                            disabled={isLoading || updateMutation.isPending}\n                          />\n                        </FormControl>\n                      )}\n                    />\n                  </div>\n                </CardHeader>\n                {wecomEnabled && (\n                  <CardContent className=\"pt-0\">\n                    <Separator className=\"mb-4\" />\n                    <FormField\n                      control={form.control}\n                      name=\"wecom.webhookUrl\"\n                      render={({ field }) => (\n                        <FormItem>\n                          <FormLabel>{t(\"wecom.webhookLabel\")}</FormLabel>\n                          <FormControl>\n                            <Input\n                              placeholder={t(\"wecom.webhookPlaceholder\")}\n                              {...field}\n                              disabled={isLoading || updateMutation.isPending}\n                            />\n                          </FormControl>\n                          <FormDescription>\n                            {t(\"wecom.webhookHelp\")}\n                          </FormDescription>\n                          <FormMessage />\n                        </FormItem>\n                      )}\n                    />\n                  </CardContent>\n                )}\n              </Card>\n            </TabsContent>\n\n            {/* Notification preferences tab */}\n            <TabsContent value=\"preferences\" className=\"mt-4\">\n              <Card>\n                <CardHeader>\n                  <CardTitle className=\"text-base\">{t(\"categories.title\")}</CardTitle>\n                  <CardDescription>{t(\"categories.description\")}</CardDescription>\n                </CardHeader>\n                <CardContent className=\"space-y-1\">\n                  {NOTIFICATION_CATEGORIES.map((category) => (\n                    <FormField\n                      key={category.key}\n                      control={form.control}\n                      name={`categories.${category.key}`}\n                      render={({ field }) => (\n                        <FormItem className=\"flex items-center justify-between py-3 border-b last:border-b-0\">\n                          <div className=\"flex items-center gap-3\">\n                            <div className=\"flex h-9 w-9 items-center justify-center rounded-lg bg-muted\">\n                              <category.icon className=\"h-4 w-4 text-muted-foreground\" />\n                            </div>\n                            <div>\n                              <FormLabel className=\"text-sm font-medium cursor-pointer\">\n                                {category.label}\n                              </FormLabel>\n                              <FormDescription className=\"text-xs\">\n                                {category.description}\n                              </FormDescription>\n                            </div>\n                          </div>\n                          <FormControl>\n                            <Switch \n                              checked={field.value} \n                              onCheckedChange={field.onChange}\n                              disabled={isLoading || updateMutation.isPending}\n                            />\n                          </FormControl>\n                        </FormItem>\n                      )}\n                    />\n                  ))}\n                </CardContent>\n              </Card>\n            </TabsContent>\n\n            {/* Save button */}\n            <div className=\"flex justify-end mt-6\">\n              <Button type=\"submit\" disabled={updateMutation.isPending || isLoading}>\n                {t(\"saveSettings\")}\n              </Button>\n            </div>\n          </form>\n        </Form>\n      </Tabs>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/settings/system-logs/page.tsx",
    "content": "\"use client\"\n\nimport { SystemLogsView } from \"@/components/settings/system-logs\"\n\nexport default function SystemLogsPage() {\n  return (\n    <div className=\"flex flex-1 flex-col p-4 h-full\">\n      <SystemLogsView />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/settings/workers/page.tsx",
    "content": "\"use client\"\n\nimport { WorkerList } from \"@/components/settings/workers\"\nimport { useTranslations } from \"next-intl\"\n\nexport default function WorkersPage() {\n  const t = useTranslations(\"pages.workers\")\n\n  return (\n    <div className=\"flex flex-1 flex-col gap-4 p-4\">\n      <div className=\"flex items-center justify-between\">\n        <div>\n          <h1 className=\"text-2xl font-bold tracking-tight\">{t(\"title\")}</h1>\n          <p className=\"text-muted-foreground\">\n            {t(\"description\")}\n          </p>\n        </div>\n      </div>\n      <WorkerList />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/target/[id]/details/page.tsx",
    "content": "\"use client\"\n\nimport { useParams, useRouter } from \"next/navigation\"\nimport { useEffect } from \"react\"\n\n/**\n * Target detail page (compatible with old routes)\n * Automatically redirects to overview page\n */\nexport default function TargetDetailsPage() {\n  const { id } = useParams<{ id: string }>()\n  const router = useRouter()\n\n  useEffect(() => {\n    // Redirect to overview page\n    router.replace(`/target/${id}/overview/`)\n  }, [id, router])\n\n  return null\n}\n\n"
  },
  {
    "path": "frontend/app/[locale]/target/[id]/directories/page.tsx",
    "content": "\"use client\"\n\nimport { useParams } from \"next/navigation\"\nimport { DirectoriesView } from \"@/components/directories/directories-view\"\n\nexport default function TargetDirectoriesPage() {\n  const { id } = useParams<{ id: string }>()\n  const targetId = Number(id)\n\n  return (\n    <div className=\"px-4 lg:px-6\">\n      <DirectoriesView targetId={targetId} />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/target/[id]/endpoints/page.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { useParams } from \"next/navigation\"\nimport { EndpointsDetailView } from \"@/components/endpoints\"\n\n/**\n * Target endpoints page\n * Displays endpoint details under the target\n */\nexport default function TargetEndpointsPage() {\n  const { id } = useParams<{ id: string }>()\n\n  return (\n    <div className=\"px-4 lg:px-6\">\n      <EndpointsDetailView targetId={parseInt(id)} />\n    </div>\n  )\n}\n\n"
  },
  {
    "path": "frontend/app/[locale]/target/[id]/ip-addresses/page.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { useParams } from \"next/navigation\"\nimport { IPAddressesView } from \"@/components/ip-addresses\"\n\nexport default function TargetIPsPage() {\n  const { id } = useParams<{ id: string }>()\n\n  return (\n    <div className=\"px-4 lg:px-6\">\n      <IPAddressesView targetId={Number(id)} />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/target/[id]/layout.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { usePathname, useParams } from \"next/navigation\"\nimport Link from \"next/link\"\nimport { Target, LayoutDashboard, Package, Image, ShieldAlert, Settings } from \"lucide-react\"\nimport { Skeleton } from \"@/components/ui/skeleton\"\nimport { Tabs, TabsList, TabsTrigger } from \"@/components/ui/tabs\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { useTarget } from \"@/hooks/use-targets\"\nimport { useTranslations } from \"next-intl\"\n\n/**\n * Target detail layout\n * Two-level navigation: Overview / Assets / Vulnerabilities\n * Assets has secondary navigation for different asset types\n */\nexport default function TargetLayout({\n  children,\n}: {\n  children: React.ReactNode\n}) {\n  const { id } = useParams<{ id: string }>()\n  const pathname = usePathname()\n  const t = useTranslations(\"pages.targetDetail\")\n\n  // Use React Query to get target data\n  const {\n    data: target,\n    isLoading,\n    error\n  } = useTarget(Number(id))\n\n  // Get primary navigation active tab\n  const getPrimaryTab = () => {\n    if (pathname.includes(\"/overview\")) return \"overview\"\n    if (pathname.includes(\"/screenshots\")) return \"screenshots\"\n    if (pathname.includes(\"/vulnerabilities\")) return \"vulnerabilities\"\n    if (pathname.includes(\"/settings\")) return \"settings\"\n    // All asset pages fall under \"assets\"\n    if (\n      pathname.includes(\"/websites\") ||\n      pathname.includes(\"/subdomain\") ||\n      pathname.includes(\"/ip-addresses\") ||\n      pathname.includes(\"/endpoints\") ||\n      pathname.includes(\"/directories\")\n    ) {\n      return \"assets\"\n    }\n    return \"overview\"\n  }\n\n  // Get secondary navigation active tab (for assets)\n  const getSecondaryTab = () => {\n    if (pathname.includes(\"/websites\")) return \"websites\"\n    if (pathname.includes(\"/subdomain\")) return \"subdomain\"\n    if (pathname.includes(\"/ip-addresses\")) return \"ip-addresses\"\n    if (pathname.includes(\"/endpoints\")) return \"endpoints\"\n    if (pathname.includes(\"/directories\")) return \"directories\"\n    return \"websites\"\n  }\n\n  // Check if we should show secondary navigation\n  const showSecondaryNav = getPrimaryTab() === \"assets\"\n\n  // Tab path mapping\n  const basePath = `/target/${id}`\n  const primaryPaths = {\n    overview: `${basePath}/overview/`,\n    assets: `${basePath}/websites/`, // Default to websites when clicking assets\n    screenshots: `${basePath}/screenshots/`,\n    vulnerabilities: `${basePath}/vulnerabilities/`,\n    settings: `${basePath}/settings/`,\n  }\n\n  const secondaryPaths = {\n    websites: `${basePath}/websites/`,\n    subdomain: `${basePath}/subdomain/`,\n    \"ip-addresses\": `${basePath}/ip-addresses/`,\n    endpoints: `${basePath}/endpoints/`,\n    directories: `${basePath}/directories/`,\n  }\n\n  // Get counts for each tab from target data\n  const counts = {\n    subdomain: (target as any)?.summary?.subdomains || 0,\n    endpoints: (target as any)?.summary?.endpoints || 0,\n    websites: (target as any)?.summary?.websites || 0,\n    directories: (target as any)?.summary?.directories || 0,\n    vulnerabilities: (target as any)?.summary?.vulnerabilities?.total || 0,\n    \"ip-addresses\": (target as any)?.summary?.ips || 0,\n    screenshots: (target as any)?.summary?.screenshots || 0,\n  }\n\n  // Calculate total assets count\n  const totalAssets = counts.websites + counts.subdomain + counts[\"ip-addresses\"] + counts.endpoints + counts.directories\n\n  // Loading state\n  if (isLoading) {\n    return (\n      <div className=\"flex flex-col gap-4 py-4 md:gap-6 md:py-6\">\n        {/* Header skeleton */}\n        <div className=\"flex items-center gap-2 px-4 lg:px-6\">\n          <Skeleton className=\"h-4 w-16\" />\n          <span className=\"text-muted-foreground\">/</span>\n          <Skeleton className=\"h-4 w-32\" />\n        </div>\n        {/* Tabs skeleton */}\n        <div className=\"flex gap-1 px-4 lg:px-6\">\n          <Skeleton className=\"h-9 w-20\" />\n          <Skeleton className=\"h-9 w-20\" />\n          <Skeleton className=\"h-9 w-24\" />\n        </div>\n      </div>\n    )\n  }\n\n  // Error state\n  if (error) {\n    return (\n      <div className=\"flex flex-col gap-4 py-4 md:gap-6 md:py-6\">\n        <div className=\"flex items-center justify-center py-12\">\n          <div className=\"text-center\">\n            <Target className=\"mx-auto text-destructive mb-4\" />\n            <h3 className=\"text-lg font-semibold mb-2\">{t(\"error.title\")}</h3>\n            <p className=\"text-muted-foreground\">\n              {error.message || t(\"error.message\")}\n            </p>\n          </div>\n        </div>\n      </div>\n    )\n  }\n\n  if (!target) {\n    return (\n      <div className=\"flex flex-col gap-4 py-4 md:gap-6 md:py-6\">\n        <div className=\"flex items-center justify-center py-12\">\n          <div className=\"text-center\">\n            <Target className=\"mx-auto text-muted-foreground mb-4\" />\n            <h3 className=\"text-lg font-semibold mb-2\">{t(\"notFound.title\")}</h3>\n            <p className=\"text-muted-foreground\">\n              {t(\"notFound.message\", { id })}\n            </p>\n          </div>\n        </div>\n      </div>\n    )\n  }\n\n  return (\n    <div className=\"flex flex-col gap-4 py-4 md:gap-6 md:py-6\">\n      {/* Header: Page label + Target name */}\n      <div className=\"flex items-center gap-2 text-sm px-4 lg:px-6\">\n        <span className=\"text-muted-foreground\">{t(\"breadcrumb.targetDetail\")}</span>\n        <span className=\"text-muted-foreground\">/</span>\n        <span className=\"font-medium flex items-center gap-1.5\">\n          <Target className=\"h-4 w-4\" />\n          {target.name}\n        </span>\n      </div>\n\n      {/* Primary navigation */}\n      <div className=\"px-4 lg:px-6\">\n        <Tabs value={getPrimaryTab()}>\n          <TabsList>\n            <TabsTrigger value=\"overview\" asChild>\n              <Link href={primaryPaths.overview} className=\"flex items-center gap-1.5\">\n                <LayoutDashboard className=\"h-4 w-4\" />\n                {t(\"tabs.overview\")}\n              </Link>\n            </TabsTrigger>\n            <TabsTrigger value=\"assets\" asChild>\n              <Link href={primaryPaths.assets} className=\"flex items-center gap-1.5\">\n                <Package className=\"h-4 w-4\" />\n                {t(\"tabs.assets\")}\n                {totalAssets > 0 && (\n                  <Badge variant=\"secondary\" className=\"ml-1.5 h-5 min-w-5 rounded-full px-1.5 text-xs\">\n                    {totalAssets}\n                  </Badge>\n                )}\n              </Link>\n            </TabsTrigger>\n            <TabsTrigger value=\"screenshots\" asChild>\n              <Link href={primaryPaths.screenshots} className=\"flex items-center gap-1.5\">\n                <Image className=\"h-4 w-4\" />\n                {t(\"tabs.screenshots\")}\n                {counts.screenshots > 0 && (\n                  <Badge variant=\"secondary\" className=\"ml-1.5 h-5 min-w-5 rounded-full px-1.5 text-xs\">\n                    {counts.screenshots}\n                  </Badge>\n                )}\n              </Link>\n            </TabsTrigger>\n            <TabsTrigger value=\"vulnerabilities\" asChild>\n              <Link href={primaryPaths.vulnerabilities} className=\"flex items-center gap-1.5\">\n                <ShieldAlert className=\"h-4 w-4\" />\n                {t(\"tabs.vulnerabilities\")}\n                {counts.vulnerabilities > 0 && (\n                  <Badge variant=\"secondary\" className=\"ml-1.5 h-5 min-w-5 rounded-full px-1.5 text-xs\">\n                    {counts.vulnerabilities}\n                  </Badge>\n                )}\n              </Link>\n            </TabsTrigger>\n            <TabsTrigger value=\"settings\" asChild>\n              <Link href={primaryPaths.settings} className=\"flex items-center gap-1.5\">\n                <Settings className=\"h-4 w-4\" />\n                {t(\"tabs.settings\")}\n              </Link>\n            </TabsTrigger>\n          </TabsList>\n        </Tabs>\n      </div>\n\n      {/* Secondary navigation (only for assets) */}\n      {showSecondaryNav && (\n        <div className=\"flex items-center px-4 lg:px-6\">\n          <Tabs value={getSecondaryTab()} className=\"w-full\">\n            <TabsList variant=\"underline\">\n              <TabsTrigger value=\"websites\" variant=\"underline\" asChild>\n                <Link href={secondaryPaths.websites} className=\"flex items-center gap-0.5\">\n                  Websites\n                  {counts.websites > 0 && (\n                    <Badge variant=\"secondary\" className=\"ml-1.5 h-5 min-w-5 rounded-full px-1.5 text-xs\">\n                      {counts.websites}\n                    </Badge>\n                  )}\n                </Link>\n              </TabsTrigger>\n              <TabsTrigger value=\"subdomain\" variant=\"underline\" asChild>\n                <Link href={secondaryPaths.subdomain} className=\"flex items-center gap-0.5\">\n                  Subdomains\n                  {counts.subdomain > 0 && (\n                    <Badge variant=\"secondary\" className=\"ml-1.5 h-5 min-w-5 rounded-full px-1.5 text-xs\">\n                      {counts.subdomain}\n                    </Badge>\n                  )}\n                </Link>\n              </TabsTrigger>\n              <TabsTrigger value=\"ip-addresses\" variant=\"underline\" asChild>\n                <Link href={secondaryPaths[\"ip-addresses\"]} className=\"flex items-center gap-0.5\">\n                  IPs\n                  {counts[\"ip-addresses\"] > 0 && (\n                    <Badge variant=\"secondary\" className=\"ml-1.5 h-5 min-w-5 rounded-full px-1.5 text-xs\">\n                      {counts[\"ip-addresses\"]}\n                    </Badge>\n                  )}\n                </Link>\n              </TabsTrigger>\n              <TabsTrigger value=\"endpoints\" variant=\"underline\" asChild>\n                <Link href={secondaryPaths.endpoints} className=\"flex items-center gap-0.5\">\n                  URLs\n                  {counts.endpoints > 0 && (\n                    <Badge variant=\"secondary\" className=\"ml-1.5 h-5 min-w-5 rounded-full px-1.5 text-xs\">\n                      {counts.endpoints}\n                    </Badge>\n                  )}\n                </Link>\n              </TabsTrigger>\n              <TabsTrigger value=\"directories\" variant=\"underline\" asChild>\n                <Link href={secondaryPaths.directories} className=\"flex items-center gap-0.5\">\n                  Directories\n                  {counts.directories > 0 && (\n                    <Badge variant=\"secondary\" className=\"ml-1.5 h-5 min-w-5 rounded-full px-1.5 text-xs\">\n                      {counts.directories}\n                    </Badge>\n                  )}\n                </Link>\n              </TabsTrigger>\n            </TabsList>\n          </Tabs>\n        </div>\n      )}\n\n      {/* Sub-page content */}\n      {children}\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/target/[id]/overview/page.tsx",
    "content": "\"use client\"\n\nimport { useParams } from \"next/navigation\"\nimport { TargetOverview } from \"@/components/target/target-overview\"\n\n/**\n * Target overview page\n * Displays target statistics and summary information\n */\nexport default function TargetOverviewPage() {\n  const { id } = useParams<{ id: string }>()\n  const targetId = Number(id)\n\n  return (\n    <div className=\"px-4 lg:px-6\">\n      <TargetOverview targetId={targetId} />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/target/[id]/page.tsx",
    "content": "\"use client\"\n\nimport { useParams, useRouter } from \"next/navigation\"\nimport { useEffect } from \"react\"\n\n/**\n * Target detail default page\n * Automatically redirects to overview page\n */\nexport default function TargetDetailPage() {\n  const { id } = useParams<{ id: string }>()\n  const router = useRouter()\n\n  useEffect(() => {\n    // Redirect to overview page\n    router.replace(`/target/${id}/overview/`)\n  }, [id, router])\n\n  return null\n}\n\n"
  },
  {
    "path": "frontend/app/[locale]/target/[id]/screenshots/page.tsx",
    "content": "\"use client\"\n\nimport { useParams } from \"next/navigation\"\nimport { ScreenshotsGallery } from \"@/components/screenshots/screenshots-gallery\"\n\nexport default function ScreenshotsPage() {\n  const { id } = useParams<{ id: string }>()\n  const targetId = Number(id)\n\n  return (\n    <div className=\"px-4 lg:px-6\">\n      <ScreenshotsGallery targetId={targetId} />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/target/[id]/settings/page.tsx",
    "content": "\"use client\"\n\nimport { useParams } from \"next/navigation\"\nimport { TargetSettings } from \"@/components/target/target-settings\"\n\n/**\n * Target settings page\n * Contains blacklist configuration and other settings\n */\nexport default function TargetSettingsPage() {\n  const { id } = useParams<{ id: string }>()\n  const targetId = Number(id)\n\n  return (\n    <div className=\"px-4 lg:px-6\">\n      <TargetSettings targetId={targetId} />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/target/[id]/subdomain/page.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { useParams } from \"next/navigation\"\nimport { SubdomainsDetailView } from \"@/components/subdomains\"\n\nexport default function TargetSubdomainPage() {\n  const { id } = useParams<{ id: string }>()\n\n  return (\n    <div className=\"px-4 lg:px-6\">\n      <SubdomainsDetailView targetId={parseInt(id)} />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/target/[id]/vulnerabilities/page.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { useParams } from \"next/navigation\"\nimport { VulnerabilitiesDetailView } from \"@/components/vulnerabilities\"\n\n/**\n * Target vulnerabilities page\n * Displays vulnerability details under the target\n */\nexport default function TargetVulnerabilitiesPage() {\n  const { id } = useParams<{ id: string }>()\n\n  return (\n    <div className=\"px-4 lg:px-6\">\n      <VulnerabilitiesDetailView targetId={parseInt(id)} />\n    </div>\n  )\n}\n\n"
  },
  {
    "path": "frontend/app/[locale]/target/[id]/websites/page.tsx",
    "content": "\"use client\"\n\nimport { useParams } from \"next/navigation\"\nimport { WebSitesView } from \"@/components/websites/websites-view\"\n\nexport default function WebSitesPage() {\n  const { id } = useParams<{ id: string }>()\n  const targetId = Number(id)\n\n  return (\n    <div className=\"px-4 lg:px-6\">\n      <WebSitesView targetId={targetId} />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/target/page.tsx",
    "content": "\"use client\"\n\nimport { AllTargetsDetailView } from \"@/components/target/all-targets-detail-view\"\nimport { Target } from \"lucide-react\"\nimport { useTranslations } from \"next-intl\"\n\nexport default function AllTargetsPage() {\n  const t = useTranslations(\"pages.target\")\n\n  return (\n    <div className=\"flex flex-col gap-4 py-4 md:gap-6 md:py-6\">\n      {/* Page header */}\n      <div className=\"flex items-center justify-between px-4 lg:px-6\">\n        <div>\n          <h2 className=\"text-2xl font-bold tracking-tight flex items-center gap-2\">\n            <Target />\n            {t(\"title\")}\n          </h2>\n          <p className=\"text-muted-foreground\">\n            {t(\"description\")}\n          </p>\n        </div>\n      </div>\n\n      {/* Content area */}\n      <div className=\"px-4 lg:px-6\">\n        <AllTargetsDetailView />\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/tools/config/custom/page.tsx",
    "content": "/**\n * Custom tools page\n * Display and manage custom scanning scripts and tools\n */\nexport default function CustomToolsPage() {\n  // Tool configuration feature has been deprecated, this page is kept as placeholder to avoid broken historical links\n  return null\n}\n"
  },
  {
    "path": "frontend/app/[locale]/tools/config/opensource/page.tsx",
    "content": "/**\n * Open source tools page\n * Display and manage open source scanning tools\n */\nexport default function OpensourceToolsPage() {\n  // Tool configuration feature has been deprecated, this page is kept as placeholder to avoid broken historical links\n  return null\n}\n"
  },
  {
    "path": "frontend/app/[locale]/tools/config/page.tsx",
    "content": "\"use client\"\n\n/**\n * Tool configuration page\n * Display and manage scanning tool sets (open source tools and custom tools)\n */\nexport default function ToolConfigPage() {\n  // Tool configuration feature has been deprecated, this page is kept as placeholder to avoid broken historical links\n  return null\n}\n"
  },
  {
    "path": "frontend/app/[locale]/tools/fingerprints/arl/page.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { ARLFingerprintView } from \"@/components/fingerprints\"\n\nexport default function ARLFingerprintPage() {\n  return (\n    <div className=\"px-4 lg:px-6\">\n      <ARLFingerprintView />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/tools/fingerprints/ehole/page.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { EholeFingerprintView } from \"@/components/fingerprints\"\n\nexport default function EholeFingerprintPage() {\n  return (\n    <div className=\"px-4 lg:px-6\">\n      <EholeFingerprintView />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/tools/fingerprints/fingerprinthub/page.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { FingerPrintHubFingerprintView } from \"@/components/fingerprints\"\n\nexport default function FingerPrintHubFingerprintPage() {\n  return (\n    <div className=\"px-4 lg:px-6\">\n      <FingerPrintHubFingerprintView />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/tools/fingerprints/fingers/page.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { FingersFingerprintView } from \"@/components/fingerprints\"\n\nexport default function FingersFingerprintPage() {\n  return (\n    <div className=\"px-4 lg:px-6\">\n      <FingersFingerprintView />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/tools/fingerprints/goby/page.tsx",
    "content": "\"use client\"\n\nimport { GobyFingerprintView } from \"@/components/fingerprints\"\n\nexport default function GobyFingerprintsPage() {\n  return (\n    <div className=\"px-4 lg:px-6\">\n      <GobyFingerprintView />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/tools/fingerprints/layout.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { usePathname } from \"next/navigation\"\nimport Link from \"next/link\"\nimport { Fingerprint, HelpCircle } from \"lucide-react\"\nimport { Tabs, TabsList, TabsTrigger } from \"@/components/ui/tabs\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Skeleton } from \"@/components/ui/skeleton\"\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipProvider,\n  TooltipTrigger,\n} from \"@/components/ui/tooltip\"\nimport { useFingerprintStats } from \"@/hooks/use-fingerprints\"\nimport { useTranslations } from \"next-intl\"\n\n/**\n * Fingerprint management layout\n * Provides tab navigation to switch between different fingerprint libraries\n */\nexport default function FingerprintsLayout({\n  children,\n}: {\n  children: React.ReactNode\n}) {\n  const pathname = usePathname()\n  const { data: stats, isLoading } = useFingerprintStats()\n  const t = useTranslations(\"tools.fingerprints\")\n\n  // Get currently active tab\n  const getActiveTab = () => {\n    if (pathname.includes(\"/ehole\")) return \"ehole\"\n    if (pathname.includes(\"/goby\")) return \"goby\"\n    if (pathname.includes(\"/wappalyzer\")) return \"wappalyzer\"\n    if (pathname.includes(\"/fingers\")) return \"fingers\"\n    if (pathname.includes(\"/fingerprinthub\")) return \"fingerprinthub\"\n    if (pathname.includes(\"/arl\")) return \"arl\"\n    return \"ehole\"\n  }\n\n  // Tab path mapping\n  const basePath = \"/tools/fingerprints\"\n  const tabPaths = {\n    ehole: `${basePath}/ehole/`,\n    goby: `${basePath}/goby/`,\n    wappalyzer: `${basePath}/wappalyzer/`,\n    fingers: `${basePath}/fingers/`,\n    fingerprinthub: `${basePath}/fingerprinthub/`,\n    arl: `${basePath}/arl/`,\n  }\n\n  // Fingerprint library counts\n  const counts = {\n    ehole: stats?.ehole || 0,\n    goby: stats?.goby || 0,\n    wappalyzer: stats?.wappalyzer || 0,\n    fingers: stats?.fingers || 0,\n    fingerprinthub: stats?.fingerprinthub || 0,\n    arl: stats?.arl || 0,\n  }\n\n  if (isLoading) {\n    return (\n      <div className=\"flex flex-col gap-4 py-4 md:gap-6 md:py-6\">\n        <div className=\"flex items-center justify-between px-4 lg:px-6\">\n          <div className=\"space-y-2\">\n            <Skeleton className=\"h-7 w-32\" />\n            <Skeleton className=\"h-4 w-48\" />\n          </div>\n        </div>\n        <div className=\"px-4 lg:px-6\">\n          <Skeleton className=\"h-10 w-96\" />\n        </div>\n      </div>\n    )\n  }\n\n  return (\n    <div className=\"flex flex-col gap-4 py-4 md:gap-6 md:py-6\">\n      {/* Page header */}\n      <div className=\"flex items-center justify-between px-4 lg:px-6\">\n        <div>\n          <h2 className=\"text-2xl font-bold tracking-tight flex items-center gap-2\">\n            <Fingerprint className=\"h-6 w-6\" />\n            {t(\"title\")}\n          </h2>\n          <p className=\"text-muted-foreground\">{t(\"pageDescription\")}</p>\n        </div>\n      </div>\n\n      {/* Tabs navigation */}\n      <div className=\"flex items-center justify-between px-4 lg:px-6\">\n        <div className=\"flex items-center gap-3\">\n          <Tabs value={getActiveTab()} className=\"w-full\">\n            <TabsList>\n              <TabsTrigger value=\"ehole\" asChild>\n                <Link href={tabPaths.ehole} className=\"flex items-center gap-0.5\">\n                  EHole\n                  {counts.ehole > 0 && (\n                    <Badge variant=\"secondary\" className=\"ml-1.5 h-5 min-w-5 rounded-full px-1.5 text-xs\">\n                      {counts.ehole}\n                    </Badge>\n                  )}\n                </Link>\n              </TabsTrigger>\n              <TabsTrigger value=\"goby\" asChild>\n                <Link href={tabPaths.goby} className=\"flex items-center gap-0.5\">\n                  Goby\n                  {counts.goby > 0 && (\n                    <Badge variant=\"secondary\" className=\"ml-1.5 h-5 min-w-5 rounded-full px-1.5 text-xs\">\n                      {counts.goby}\n                    </Badge>\n                  )}\n                </Link>\n              </TabsTrigger>\n              <TabsTrigger value=\"wappalyzer\" asChild>\n                <Link href={tabPaths.wappalyzer} className=\"flex items-center gap-0.5\">\n                  Wappalyzer\n                  {counts.wappalyzer > 0 && (\n                    <Badge variant=\"secondary\" className=\"ml-1.5 h-5 min-w-5 rounded-full px-1.5 text-xs\">\n                      {counts.wappalyzer}\n                    </Badge>\n                  )}\n                </Link>\n              </TabsTrigger>\n              <TabsTrigger value=\"fingers\" asChild>\n                <Link href={tabPaths.fingers} className=\"flex items-center gap-0.5\">\n                  Fingers\n                  {counts.fingers > 0 && (\n                    <Badge variant=\"secondary\" className=\"ml-1.5 h-5 min-w-5 rounded-full px-1.5 text-xs\">\n                      {counts.fingers}\n                    </Badge>\n                  )}\n                </Link>\n              </TabsTrigger>\n              <TabsTrigger value=\"fingerprinthub\" asChild>\n                <Link href={tabPaths.fingerprinthub} className=\"flex items-center gap-0.5\">\n                  FingerPrintHub\n                  {counts.fingerprinthub > 0 && (\n                    <Badge variant=\"secondary\" className=\"ml-1.5 h-5 min-w-5 rounded-full px-1.5 text-xs\">\n                      {counts.fingerprinthub}\n                    </Badge>\n                  )}\n                </Link>\n              </TabsTrigger>\n              <TabsTrigger value=\"arl\" asChild>\n                <Link href={tabPaths.arl} className=\"flex items-center gap-0.5\">\n                  ARL\n                  {counts.arl > 0 && (\n                    <Badge variant=\"secondary\" className=\"ml-1.5 h-5 min-w-5 rounded-full px-1.5 text-xs\">\n                      {counts.arl}\n                    </Badge>\n                  )}\n                </Link>\n              </TabsTrigger>\n            </TabsList>\n          </Tabs>\n\n          <TooltipProvider>\n            <Tooltip>\n              <TooltipTrigger asChild>\n                <HelpCircle className=\"h-4 w-4 text-muted-foreground cursor-help\" />\n              </TooltipTrigger>\n              <TooltipContent side=\"right\" className=\"max-w-sm whitespace-pre-line\">\n                {t(\"helpText\")}\n              </TooltipContent>\n            </Tooltip>\n          </TooltipProvider>\n        </div>\n      </div>\n\n      {/* Sub-page content */}\n      {children}\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/tools/fingerprints/page.tsx",
    "content": "\"use client\"\n\nimport { redirect } from \"next/navigation\"\n\n/**\n * Fingerprint management homepage - Redirect to EHole\n */\nexport default function FingerprintsPage() {\n  redirect(\"/tools/fingerprints/ehole/\")\n}\n"
  },
  {
    "path": "frontend/app/[locale]/tools/fingerprints/wappalyzer/page.tsx",
    "content": "\"use client\"\n\nimport { WappalyzerFingerprintView } from \"@/components/fingerprints\"\n\nexport default function WappalyzerFingerprintsPage() {\n  return (\n    <div className=\"px-4 lg:px-6\">\n      <WappalyzerFingerprintView />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/tools/nuclei/[repoId]/page.tsx",
    "content": "\"use client\"\n\nimport { useEffect, useMemo, useState } from \"react\"\nimport Editor from \"@monaco-editor/react\"\nimport Link from \"next/link\"\nimport { useParams } from \"next/navigation\"\nimport {\n  ChevronDown,\n  ChevronRight,\n  FileText,\n  Folder,\n  ArrowLeft,\n  Search,\n  RefreshCw,\n  AlertTriangle,\n  Tag,\n  User,\n} from \"lucide-react\"\nimport { useColorTheme } from \"@/hooks/use-color-theme\"\nimport { ScrollArea } from \"@/components/ui/scroll-area\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Separator } from \"@/components/ui/separator\"\nimport {\n  useNucleiRepoTree,\n  useNucleiRepoContent,\n  useRefreshNucleiRepo,\n  useNucleiRepo,\n} from \"@/hooks/use-nuclei-repos\"\nimport type { NucleiTemplateTreeNode } from \"@/types/nuclei.types\"\nimport { cn } from \"@/lib/utils\"\nimport { useTranslations } from \"next-intl\"\n\ninterface FlattenedNode extends NucleiTemplateTreeNode {\n  level: number\n}\n\n/** Parse YAML content to extract template information */\nfunction parseTemplateInfo(content: string) {\n  const info: {\n    id?: string\n    name?: string\n    severity?: string\n    tags?: string[]\n    author?: string\n  } = {}\n\n  // Simple regex extraction, no full YAML parsing\n  const idMatch = content.match(/^id:\\s*(.+)$/m)\n  if (idMatch) info.id = idMatch[1].trim()\n\n  const nameMatch = content.match(/^\\s*name:\\s*(.+)$/m)\n  if (nameMatch) info.name = nameMatch[1].trim()\n\n  const severityMatch = content.match(/^\\s*severity:\\s*(.+)$/m)\n  if (severityMatch) info.severity = severityMatch[1].trim().toLowerCase()\n\n  const tagsMatch = content.match(/^\\s*tags:\\s*(.+)$/m)\n  if (tagsMatch) info.tags = tagsMatch[1].split(\",\").map((t) => t.trim())\n\n  const authorMatch = content.match(/^\\s*author:\\s*(.+)$/m)\n  if (authorMatch) info.author = authorMatch[1].trim()\n\n  return info\n}\n\n/** Severity level corresponding colors */\nfunction getSeverityColor(severity?: string) {\n  switch (severity) {\n    case \"critical\":\n      return \"bg-red-100 text-red-700 border-red-200\"\n    case \"high\":\n      return \"bg-orange-100 text-orange-700 border-orange-200\"\n    case \"medium\":\n      return \"bg-yellow-100 text-yellow-700 border-yellow-200\"\n    case \"low\":\n      return \"bg-blue-100 text-blue-700 border-blue-200\"\n    case \"info\":\n      return \"bg-gray-100 text-gray-700 border-gray-200\"\n    default:\n      return \"bg-gray-100 text-gray-600 border-gray-200\"\n  }\n}\n\nexport default function NucleiRepoDetailPage() {\n  const params = useParams()\n  const repoId = params?.repoId as string\n\n  const [selectedPath, setSelectedPath] = useState<string | null>(null)\n  const [expandedPaths, setExpandedPaths] = useState<string[]>([])\n  const [searchQuery, setSearchQuery] = useState(\"\")\n  const [editorValue, setEditorValue] = useState<string>(\"\")\n\n  const { currentTheme } = useColorTheme()\n  const t = useTranslations(\"tools.nuclei\")\n  const tCommon = useTranslations(\"common\")\n\n  const numericRepoId = repoId ? Number(repoId) : null\n\n  const { data: tree, isLoading, isError } = useNucleiRepoTree(numericRepoId)\n  const { data: templateContent, isLoading: isLoadingContent } = useNucleiRepoContent(numericRepoId, selectedPath)\n  const { data: repoDetail } = useNucleiRepo(numericRepoId)\n  const refreshMutation = useRefreshNucleiRepo()\n\n  // Expanded nodes and filtered nodes\n  const nodes: FlattenedNode[] = useMemo(() => {\n    const result: FlattenedNode[] = []\n    const expandedSet = new Set(expandedPaths)\n    const query = searchQuery.toLowerCase().trim()\n\n    const visit = (items: NucleiTemplateTreeNode[] | undefined, level: number) => {\n      if (!items) return\n      for (const item of items) {\n        const isFolder = item.type === \"folder\"\n        const isFile = item.type === \"file\"\n        const isTemplateFile =\n          isFile && (item.name.endsWith(\".yaml\") || item.name.endsWith(\".yml\"))\n\n        if (!isFolder && !isTemplateFile) {\n          continue\n        }\n\n        // Search filter\n        if (query && isFile && !item.name.toLowerCase().includes(query)) {\n          continue\n        }\n\n        result.push({ ...item, level })\n\n        if (isFolder && item.children && item.children.length > 0) {\n          // Expand all folders when searching, otherwise follow expandedPaths\n          if (query || expandedSet.has(item.path)) {\n            visit(item.children, level + 1)\n          }\n        }\n      }\n    }\n\n    visit(tree, 0)\n    return result\n  }, [tree, expandedPaths, searchQuery])\n\n  useEffect(() => {\n    if (!tree || tree.length === 0) return\n    if (expandedPaths.length > 0) return\n\n    const rootFolders = tree\n      .filter((item) => item.type === \"folder\")\n      .map((item) => item.path)\n\n    if (rootFolders.length > 0) {\n      setExpandedPaths(rootFolders)\n    }\n  }, [tree, expandedPaths])\n\n  useEffect(() => {\n    if (templateContent) {\n      setEditorValue(templateContent.content)\n    } else {\n      setEditorValue(\"\")\n    }\n  }, [templateContent?.path])\n\n  const toggleFolder = (path: string) => {\n    setExpandedPaths((prev) =>\n      prev.includes(path) ? prev.filter((p) => p !== path) : [...prev, path]\n    )\n  }\n\n  const repoDisplayName = repoDetail?.name || t(\"repoName\", { id: repoId })\n\n  // Parse current template information\n  const templateInfo = useMemo(() => {\n    if (!templateContent?.content) return null\n    return parseTemplateInfo(templateContent.content)\n  }, [templateContent?.content])\n\n  return (\n    <div className=\"flex flex-col h-full\">\n      {/* Top: Back + Title + Search + Sync */}\n      <div className=\"flex items-center gap-4 px-4 py-4 lg:px-6\">\n        <Link href=\"/tools/nuclei/\">\n          <Button variant=\"ghost\" size=\"sm\" className=\"gap-1.5\">\n            <ArrowLeft className=\"h-4 w-4\" />\n            {t(\"back\")}\n          </Button>\n        </Link>\n        <h1 className=\"text-xl font-bold truncate\">{repoDisplayName}</h1>\n        <div className=\"flex items-center gap-2 flex-1 max-w-md ml-auto\">\n          <div className=\"relative flex-1\">\n            <Search className=\"absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n            <Input\n              placeholder={t(\"searchPlaceholder\")}\n              value={searchQuery}\n              onChange={(e) => setSearchQuery(e.target.value)}\n              className=\"pl-8\"\n            />\n          </div>\n        </div>\n        <Button\n          variant=\"outline\"\n          size=\"sm\"\n          onClick={() => numericRepoId && refreshMutation.mutate(numericRepoId)}\n          disabled={refreshMutation.isPending || !numericRepoId}\n        >\n          <RefreshCw className={cn(\"h-4 w-4 mr-1.5\", refreshMutation.isPending && \"animate-spin\")} />\n          {refreshMutation.isPending ? t(\"syncing\") : t(\"sync\")}\n        </Button>\n      </div>\n\n      <Separator />\n\n      {/* Main: Left directory + Right content */}\n      <div className=\"flex flex-1 min-h-0\">\n        {/* Left: Template directory */}\n        <div className=\"w-72 lg:w-80 border-r flex flex-col\">\n          <div className=\"px-4 py-3 border-b\">\n            <h2 className=\"text-sm font-medium text-muted-foreground\">\n              {t(\"templateDirectory\")} {nodes.filter((n) => n.type === \"file\").length > 0 && \n                `(${t(\"templateCount\", { count: nodes.filter((n) => n.type === \"file\").length })})`}\n            </h2>\n          </div>\n          <ScrollArea className=\"flex-1\">\n            {isLoading ? (\n              <div className=\"p-4 text-sm text-muted-foreground\">{tCommon(\"status.loading\")}</div>\n            ) : isError || nodes.length === 0 ? (\n              <div className=\"p-4 text-sm text-muted-foreground\">\n                {searchQuery ? t(\"noMatchingTemplate\") : t(\"noTemplateOrLoadFailed\")}\n              </div>\n            ) : (\n              <div className=\"p-2\">\n                {nodes.map((node) => {\n                  const isFolder = node.type === \"folder\"\n                  const isFile = node.type === \"file\"\n                  const isActive = isFile && node.path === selectedPath\n                  const isExpanded = isFolder && expandedPaths.includes(node.path)\n\n                  return (\n                    <button\n                      key={node.path}\n                      type=\"button\"\n                      onClick={() => {\n                        if (isFolder) {\n                          toggleFolder(node.path)\n                        } else if (isFile) {\n                          setSelectedPath(node.path)\n                        }\n                      }}\n                      className={cn(\n                        \"flex w-full items-center gap-1.5 rounded-md px-2 py-1.5 text-left text-sm transition-colors\",\n                        isFolder && \"font-medium\",\n                        isActive\n                          ? \"bg-primary/10 text-primary\"\n                          : \"hover:bg-muted\"\n                      )}\n                      style={{ paddingLeft: 8 + node.level * 16 }}\n                    >\n                      {isFolder ? (\n                        <>\n                          {isExpanded ? (\n                            <ChevronDown className=\"h-3.5 w-3.5 shrink-0\" />\n                          ) : (\n                            <ChevronRight className=\"h-3.5 w-3.5 shrink-0\" />\n                          )}\n                          <Folder className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n                        </>\n                      ) : (\n                        <>\n                          <span className=\"w-3.5\" />\n                          <FileText className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n                        </>\n                      )}\n                      <span className=\"truncate\">{node.name}</span>\n                    </button>\n                  )\n                })}\n              </div>\n            )}\n          </ScrollArea>\n        </div>\n\n        {/* Right: Template content */}\n        <div className=\"flex-1 flex flex-col min-w-0\">\n          {selectedPath && templateContent ? (\n            <>\n              {/* Template header */}\n              <div className=\"px-6 py-4 border-b\">\n                <div className=\"flex items-start gap-3\">\n                  <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-primary/10 shrink-0\">\n                    <FileText className=\"h-5 w-5 text-primary\" />\n                  </div>\n                  <div className=\"min-w-0 flex-1\">\n                    <h2 className=\"text-lg font-semibold truncate\">\n                      {templateContent.name}\n                    </h2>\n                    <p className=\"text-xs text-muted-foreground truncate mt-0.5\">\n                      {templateContent.path}\n                    </p>\n                  </div>\n                  {templateInfo?.severity && (\n                    <Badge\n                      variant=\"outline\"\n                      className={cn(\"shrink-0 capitalize\", getSeverityColor(templateInfo.severity))}\n                    >\n                      {templateInfo.severity}\n                    </Badge>\n                  )}\n                </div>\n              </div>\n\n              {/* Code editor */}\n              <div className=\"flex-1 min-h-0\">\n                <Editor\n                  height=\"100%\"\n                  defaultLanguage=\"yaml\"\n                  value={editorValue}\n                  options={{\n                    minimap: { enabled: false },\n                    fontSize: 13,\n                    lineNumbers: \"on\",\n                    scrollBeyondLastLine: false,\n                    automaticLayout: true,\n                    readOnly: true,\n                    padding: { top: 16 },\n                  }}\n                  theme={currentTheme.isDark ? \"vs-dark\" : \"light\"}\n                />\n              </div>\n\n              {/* Template information */}\n              {templateInfo && (templateInfo.tags || templateInfo.author) && (\n                <div className=\"px-6 py-3 border-t flex items-center gap-4 text-sm\">\n                  {templateInfo.tags && templateInfo.tags.length > 0 && (\n                    <div className=\"flex items-center gap-2\">\n                      <Tag className=\"h-4 w-4 text-muted-foreground\" />\n                      <div className=\"flex gap-1 flex-wrap\">\n                        {templateInfo.tags.slice(0, 5).map((tag) => (\n                          <Badge key={tag} variant=\"secondary\" className=\"text-xs\">\n                            {tag}\n                          </Badge>\n                        ))}\n                        {templateInfo.tags.length > 5 && (\n                          <Badge variant=\"secondary\" className=\"text-xs\">\n                            +{templateInfo.tags.length - 5}\n                          </Badge>\n                        )}\n                      </div>\n                    </div>\n                  )}\n                  {templateInfo.author && (\n                    <div className=\"flex items-center gap-1.5 text-muted-foreground\">\n                      <User className=\"h-4 w-4\" />\n                      <span>{templateInfo.author}</span>\n                    </div>\n                  )}\n                </div>\n              )}\n            </>\n          ) : (\n            // Unselected state\n            <div className=\"flex-1 flex items-center justify-center\">\n              <div className=\"text-center text-muted-foreground\">\n                <FileText className=\"h-12 w-12 mx-auto mb-3 opacity-50\" />\n                <p className=\"text-sm\">{t(\"selectTemplate\")}</p>\n                <p className=\"text-xs mt-1\">{t(\"useSearch\")}</p>\n              </div>\n            </div>\n          )}\n        </div>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/tools/nuclei/page.tsx",
    "content": "\"use client\"\n\nimport Link from \"next/link\"\nimport { useState, useMemo, type FormEvent } from \"react\"\nimport { GitBranch, Search, RefreshCw, Settings, Trash2, FolderOpen, Plus } from \"lucide-react\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport { Button } from \"@/components/ui/button\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Input } from \"@/components/ui/input\"\nimport { ScrollArea } from \"@/components/ui/scroll-area\"\nimport { Separator } from \"@/components/ui/separator\"\nimport { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from \"@/components/ui/dialog\"\nimport { Label } from \"@/components/ui/label\"\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\"\nimport {\n  useNucleiRepos,\n  useCreateNucleiRepo,\n  useDeleteNucleiRepo,\n  useRefreshNucleiRepo,\n  useUpdateNucleiRepo,\n  type NucleiRepo,\n} from \"@/hooks/use-nuclei-repos\"\nimport { cn } from \"@/lib/utils\"\nimport { MasterDetailSkeleton } from \"@/components/ui/master-detail-skeleton\"\nimport { getDateLocale } from \"@/lib/date-utils\"\n\n/** Format time display */\nfunction formatDateTime(isoString: string | null, locale: string) {\n  if (!isoString) return \"-\"\n  try {\n    return new Date(isoString).toLocaleString(getDateLocale(locale))\n  } catch {\n    return isoString\n  }\n}\n\nexport default function NucleiReposPage() {\n  const [selectedId, setSelectedId] = useState<number | null>(null)\n  const [searchQuery, setSearchQuery] = useState(\"\")\n  const [createDialogOpen, setCreateDialogOpen] = useState(false)\n  const [newName, setNewName] = useState(\"\")\n  const [newRepoUrl, setNewRepoUrl] = useState(\"\")\n\n  const [editDialogOpen, setEditDialogOpen] = useState(false)\n  const [editingRepo, setEditingRepo] = useState<NucleiRepo | null>(null)\n  const [editRepoUrl, setEditRepoUrl] = useState(\"\")\n  const [deleteDialogOpen, setDeleteDialogOpen] = useState(false)\n  const [repoToDelete, setRepoToDelete] = useState<NucleiRepo | null>(null)\n\n  // Internationalization\n  const tCommon = useTranslations(\"common\")\n  const tConfirm = useTranslations(\"common.confirm\")\n  const t = useTranslations(\"pages.nuclei\")\n  const locale = useLocale()\n\n  // API Hooks\n  const { data: repos, isLoading, isError } = useNucleiRepos()\n  const createMutation = useCreateNucleiRepo()\n  const deleteMutation = useDeleteNucleiRepo()\n  const refreshMutation = useRefreshNucleiRepo()\n  const updateMutation = useUpdateNucleiRepo()\n\n  // Filter repository list\n  const filteredRepos = useMemo(() => {\n    if (!repos) return []\n    if (!searchQuery.trim()) return repos\n    const query = searchQuery.toLowerCase()\n    return repos.filter(\n      (r) =>\n        r.name.toLowerCase().includes(query) ||\n        r.repoUrl?.toLowerCase().includes(query)\n    )\n  }, [repos, searchQuery])\n\n  // Selected repository\n  const selectedRepo = useMemo(() => {\n    if (!selectedId || !repos) return null\n    return repos.find((r) => r.id === selectedId) || null\n  }, [selectedId, repos])\n\n  const resetCreateForm = () => {\n    setNewName(\"\")\n    setNewRepoUrl(\"\")\n  }\n\n  const resetEditForm = () => {\n    setEditingRepo(null)\n    setEditRepoUrl(\"\")\n  }\n\n  const handleCreateSubmit = (event: FormEvent) => {\n    event.preventDefault()\n    const name = newName.trim()\n    const repoUrl = newRepoUrl.trim()\n    if (!name || !repoUrl) return\n\n    createMutation.mutate(\n      { name, repoUrl },\n      {\n        onSuccess: () => {\n          resetCreateForm()\n          setCreateDialogOpen(false)\n        },\n      }\n    )\n  }\n\n  const handleRefresh = (repoId: number) => {\n    refreshMutation.mutate(repoId)\n  }\n\n  const handleDelete = (repo: NucleiRepo) => {\n    setRepoToDelete(repo)\n    setDeleteDialogOpen(true)\n  }\n\n  const confirmDelete = () => {\n    if (!repoToDelete) return\n    deleteMutation.mutate(repoToDelete.id, {\n      onSuccess: () => {\n        if (selectedId === repoToDelete.id) {\n          setSelectedId(null)\n        }\n        setDeleteDialogOpen(false)\n        setRepoToDelete(null)\n      },\n    })\n  }\n\n  const openEditDialog = (repo: NucleiRepo) => {\n    setEditingRepo(repo)\n    setEditRepoUrl(repo.repoUrl || \"\")\n    setEditDialogOpen(true)\n  }\n\n  const handleEditSubmit = (event: FormEvent) => {\n    event.preventDefault()\n    if (!editingRepo) return\n    const repoUrl = editRepoUrl.trim()\n    if (!repoUrl) return\n\n    updateMutation.mutate(\n      { id: editingRepo.id, repoUrl },\n      {\n        onSuccess: () => {\n          resetEditForm()\n          setEditDialogOpen(false)\n        },\n      }\n    )\n  }\n\n  // Loading state\n  if (isLoading) {\n    return <MasterDetailSkeleton title={t(\"title\")} listItemCount={3} />\n  }\n\n  return (\n    <div className=\"flex flex-col h-full\">\n      {/* Top: Title + Search + Add button */}\n      <div className=\"flex items-center justify-between gap-4 px-4 py-4 lg:px-6\">\n        <h1 className=\"text-2xl font-bold shrink-0\">{t(\"title\")}</h1>\n        <div className=\"flex items-center gap-2 flex-1 max-w-md\">\n          <div className=\"relative flex-1\">\n            <Search className=\"absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n            <Input\n              placeholder={t(\"searchPlaceholder\")}\n              value={searchQuery}\n              onChange={(e) => setSearchQuery(e.target.value)}\n              className=\"pl-8\"\n            />\n          </div>\n        </div>\n        <Button onClick={() => setCreateDialogOpen(true)}>\n          <Plus className=\"h-4 w-4\" />\n          {t(\"addRepo\")}\n        </Button>\n      </div>\n\n      <Separator />\n\n      {/* Main: Left list + Right details */}\n      <div className=\"flex flex-1 min-h-0\">\n        {/* Left: Repository list */}\n        <div className=\"w-72 lg:w-80 border-r flex flex-col\">\n          <div className=\"px-4 py-3 border-b\">\n            <h2 className=\"text-sm font-medium text-muted-foreground\">\n              {t(\"listTitle\")} ({filteredRepos.length})\n            </h2>\n          </div>\n          <ScrollArea className=\"flex-1\">\n            {isLoading ? (\n              <div className=\"p-4 text-sm text-muted-foreground\">{t(\"loading\")}</div>\n            ) : isError ? (\n              <div className=\"p-4 text-sm text-red-500\">{t(\"loadFailed\")}</div>\n            ) : filteredRepos.length === 0 ? (\n              <div className=\"p-4 text-sm text-muted-foreground\">\n                {searchQuery ? t(\"noMatch\") : t(\"noData\")}\n              </div>\n            ) : (\n              <div className=\"p-2\">\n                {filteredRepos.map((repo) => (\n                  <button\n                    key={repo.id}\n                    onClick={() => setSelectedId(repo.id)}\n                    className={cn(\n                      \"w-full text-left rounded-lg px-3 py-2.5 transition-colors\",\n                      selectedId === repo.id\n                        ? \"bg-primary/10 text-primary\"\n                        : \"hover:bg-muted\"\n                    )}\n                  >\n                    <div className=\"flex items-center gap-2\">\n                      <span className=\"font-medium text-sm truncate flex-1\">\n                        {repo.name}\n                      </span>\n                      {repo.lastSyncedAt ? (\n                        <Badge variant=\"outline\" className=\"bg-green-50 text-green-700 border-green-200 text-xs shrink-0\">\n                          {t(\"synced\")}\n                        </Badge>\n                      ) : (\n                        <Badge variant=\"outline\" className=\"text-xs shrink-0\">\n                          {t(\"notSynced\")}\n                        </Badge>\n                      )}\n                    </div>\n                    <div className=\"text-xs text-muted-foreground mt-0.5 truncate\">\n                      {repo.lastSyncedAt\n                        ? `${t(\"syncedAt\")} ${formatDateTime(repo.lastSyncedAt, locale)}`\n                        : t(\"notSyncedYet\")}\n                    </div>\n                  </button>\n                ))}\n              </div>\n            )}\n          </ScrollArea>\n        </div>\n\n        {/* Right: Repository details */}\n        <div className=\"flex-1 flex flex-col min-w-0\">\n          {selectedRepo ? (\n            <>\n              {/* Details header */}\n              <div className=\"px-6 py-4 border-b\">\n                <div className=\"flex items-start gap-3\">\n                  <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-primary/10 shrink-0\">\n                    <GitBranch className=\"h-5 w-5 text-primary\" />\n                  </div>\n                  <div className=\"min-w-0 flex-1\">\n                    <div className=\"flex items-center gap-2\">\n                      <h2 className=\"text-lg font-semibold truncate\">\n                        {selectedRepo.name}\n                      </h2>\n                      {selectedRepo.lastSyncedAt ? (\n                        <Badge variant=\"outline\" className=\"bg-green-50 text-green-700 border-green-200\">\n                          {t(\"synced\")}\n                        </Badge>\n                      ) : (\n                        <Badge variant=\"outline\">{t(\"notSynced\")}</Badge>\n                      )}\n                    </div>\n                  </div>\n                </div>\n              </div>\n\n              {/* Details content */}\n              <ScrollArea className=\"flex-1\">\n                <div className=\"p-6 space-y-6\">\n                  {/* Statistics information */}\n                  <div className=\"rounded-lg border\">\n                    <div className=\"grid grid-cols-2 divide-x\">\n                      <div className=\"p-4\">\n                        <div className=\"text-xs text-muted-foreground\">{t(\"status\")}</div>\n                        <div className=\"text-lg font-semibold mt-1\">\n                          {selectedRepo.lastSyncedAt ? t(\"synced\") : t(\"notSynced\")}\n                        </div>\n                      </div>\n                      <div className=\"p-4\">\n                        <div className=\"text-xs text-muted-foreground\">{t(\"lastSync\")}</div>\n                        <div className=\"text-lg font-semibold mt-1\">\n                          {selectedRepo.lastSyncedAt\n                            ? formatDateTime(selectedRepo.lastSyncedAt, locale)\n                            : \"-\"}\n                        </div>\n                      </div>\n                    </div>\n                    <Separator />\n                    <div className=\"p-4 space-y-3\">\n                      <div className=\"text-sm\">\n                        <span className=\"text-muted-foreground\">{t(\"gitUrl\")}</span>\n                        <div className=\"font-mono text-xs mt-1 break-all bg-muted p-2 rounded\">\n                          {selectedRepo.repoUrl}\n                        </div>\n                      </div>\n                      {selectedRepo.localPath && (\n                        <div className=\"text-sm\">\n                          <span className=\"text-muted-foreground\">{t(\"localPath\")}</span>\n                          <div className=\"font-mono text-xs mt-1 break-all bg-muted p-2 rounded\">\n                            {selectedRepo.localPath}\n                          </div>\n                        </div>\n                      )}\n                      {selectedRepo.commitHash && (\n                        <div className=\"text-sm\">\n                          <span className=\"text-muted-foreground\">{t(\"commit\")}</span>\n                          <div className=\"font-mono text-xs mt-1 break-all bg-muted p-2 rounded\">\n                            {selectedRepo.commitHash}\n                          </div>\n                        </div>\n                      )}\n                    </div>\n                  </div>\n                </div>\n              </ScrollArea>\n\n              {/* Action buttons */}\n              <div className=\"px-6 py-4 border-t flex items-center gap-2\">\n                <Button\n                  variant=\"outline\"\n                  size=\"sm\"\n                  onClick={() => handleRefresh(selectedRepo.id)}\n                  disabled={refreshMutation.isPending}\n                >\n                  <RefreshCw className={cn(\"h-4 w-4 mr-1.5\", refreshMutation.isPending && \"animate-spin\")} />\n                  {refreshMutation.isPending ? t(\"syncing\") : t(\"syncRepo\")}\n                </Button>\n                <Button\n                  variant=\"outline\"\n                  size=\"sm\"\n                  onClick={() => openEditDialog(selectedRepo)}\n                >\n                  <Settings className=\"h-4 w-4 mr-1.5\" />\n                  {t(\"editConfig\")}\n                </Button>\n                <Link href={`/tools/nuclei/${selectedRepo.id}/`}>\n                  <Button size=\"sm\">\n                    <FolderOpen className=\"h-4 w-4 mr-1.5\" />\n                    {t(\"manageTemplates\")}\n                  </Button>\n                </Link>\n                <div className=\"flex-1\" />\n                <Button\n                  variant=\"outline\"\n                  size=\"sm\"\n                  className=\"text-destructive hover:text-destructive\"\n                  onClick={() => handleDelete(selectedRepo)}\n                  disabled={deleteMutation.isPending}\n                >\n                  <Trash2 className=\"h-4 w-4 mr-1.5\" />\n                  {t(\"delete\")}\n                </Button>\n              </div>\n            </>\n          ) : (\n            // Unselected state\n            <div className=\"flex-1 flex items-center justify-center\">\n              <div className=\"text-center text-muted-foreground\">\n                <GitBranch className=\"h-12 w-12 mx-auto mb-3 opacity-50\" />\n                <p className=\"text-sm\">{t(\"selectHint\")}</p>\n              </div>\n            </div>\n          )}\n        </div>\n      </div>\n\n      <Dialog open={createDialogOpen} onOpenChange={(open) => {\n        setCreateDialogOpen(open)\n        if (!open) {\n          resetCreateForm()\n        }\n      }}>\n        <DialogContent className=\"sm:max-w-md\">\n          <DialogHeader>\n            <DialogTitle>{t(\"addDialog.title\")}</DialogTitle>\n          </DialogHeader>\n          <form className=\"space-y-4\" onSubmit={handleCreateSubmit}>\n            <div className=\"space-y-2\">\n              <Label htmlFor=\"nuclei-repo-name\">{t(\"addDialog.repoName\")}</Label>\n              <Input\n                id=\"nuclei-repo-name\"\n                type=\"text\"\n                placeholder={t(\"addDialog.repoNamePlaceholder\")}\n                value={newName}\n                onChange={(event) => setNewName(event.target.value)}\n              />\n            </div>\n\n            <div className=\"space-y-2\">\n              <Label htmlFor=\"nuclei-repo-url\">{t(\"addDialog.gitUrl\")}</Label>\n              <Input\n                id=\"nuclei-repo-url\"\n                type=\"text\"\n                placeholder={t(\"addDialog.gitUrlPlaceholder\")}\n                value={newRepoUrl}\n                onChange={(event) => setNewRepoUrl(event.target.value)}\n              />\n            </div>\n\n            {/* Currently only public repositories are supported, no authentication method and credential configuration provided here */}\n\n            <DialogFooter>\n              <Button\n                type=\"button\"\n                variant=\"outline\"\n                onClick={() => setCreateDialogOpen(false)}\n                disabled={createMutation.isPending}\n              >\n                {t(\"addDialog.cancel\")}\n              </Button>\n              <Button\n                type=\"submit\"\n                disabled={!newName.trim() || !newRepoUrl.trim() || createMutation.isPending}\n              >\n                {createMutation.isPending ? t(\"addDialog.creating\") : t(\"addDialog.confirm\")}\n              </Button>\n            </DialogFooter>\n          </form>\n        </DialogContent>\n      </Dialog>\n\n      <Dialog\n        open={editDialogOpen}\n        onOpenChange={(open) => {\n          setEditDialogOpen(open)\n          if (!open) {\n            resetEditForm()\n          }\n        }}\n      >\n        <DialogContent className=\"sm:max-w-md\">\n          <DialogHeader>\n            <DialogTitle>{t(\"editDialog.title\")}</DialogTitle>\n          </DialogHeader>\n          <form className=\"space-y-4\" onSubmit={handleEditSubmit}>\n            <div className=\"space-y-1 text-sm text-muted-foreground\">\n              <span className=\"font-medium\">{t(\"editDialog.repoName\")}</span>\n              <span>{editingRepo?.name ?? \"\"}</span>\n            </div>\n\n            <div className=\"space-y-2\">\n              <Label htmlFor=\"edit-nuclei-repo-url\">{t(\"editDialog.gitUrl\")}</Label>\n              <Input\n                id=\"edit-nuclei-repo-url\"\n                type=\"text\"\n                placeholder={t(\"editDialog.gitUrlPlaceholder\")}\n                value={editRepoUrl}\n                onChange={(event) => setEditRepoUrl(event.target.value)}\n              />\n            </div>\n\n            {/* Editing also no longer supports configuring authentication method/credentials, only allows modifying Git address */}\n\n            <DialogFooter>\n              <Button\n                type=\"button\"\n                variant=\"outline\"\n                onClick={() => setEditDialogOpen(false)}\n                disabled={updateMutation.isPending}\n              >\n                {t(\"editDialog.cancel\")}\n              </Button>\n              <Button\n                type=\"submit\"\n                disabled={!editRepoUrl.trim() || updateMutation.isPending}\n              >\n                {updateMutation.isPending ? t(\"editDialog.saving\") : t(\"editDialog.save\")}\n              </Button>\n            </DialogFooter>\n          </form>\n        </DialogContent>\n      </Dialog>\n\n      {/* Delete confirmation dialog */}\n      <AlertDialog open={deleteDialogOpen} onOpenChange={setDeleteDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{tConfirm(\"deleteTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {tConfirm(\"deleteNucleiRepoMessage\", { name: repoToDelete?.name ?? \"\" })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"actions.cancel\")}</AlertDialogCancel>\n            <AlertDialogAction \n              onClick={confirmDelete} \n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n              disabled={deleteMutation.isPending}\n            >\n              {deleteMutation.isPending ? tConfirm(\"deleting\") : tCommon(\"actions.delete\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/tools/page.tsx",
    "content": "\"use client\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from \"@/components/ui/card\"\nimport { PackageOpen, Settings, ArrowRight } from \"lucide-react\"\nimport Link from \"next/link\"\nimport { useTranslations } from \"next-intl\"\n\n/**\n * Tools overview page\n * Displays entry points for open source tools and custom tools\n */\nexport default function ToolsPage() {\n  const t = useTranslations(\"pages.tools\")\n  const tCommon = useTranslations(\"common\")\n\n  // Feature modules\n  const modules = [\n    {\n      title: t(\"wordlists.title\"),\n      description: t(\"wordlists.description\"),\n      href: \"/tools/wordlists/\",\n      icon: PackageOpen,\n      status: \"available\",\n      stats: {\n        total: \"-\",\n        active: \"-\",\n      },\n    },\n    {\n      title: t(\"nuclei.title\"),\n      description: t(\"nuclei.description\"),\n      href: \"/tools/nuclei/\",\n      icon: Settings,\n      status: \"available\",\n      stats: {\n        total: \"-\",\n        active: \"-\",\n      },\n    },\n  ]\n\n  return (\n    <div className=\"flex flex-col gap-4 py-4 md:gap-6 md:py-6\">\n      {/* Page header */}\n      <div className=\"flex items-center justify-between px-4 lg:px-6\">\n        <div>\n          <h2 className=\"text-2xl font-bold tracking-tight\">{t(\"title\")}</h2>\n          <p className=\"text-muted-foreground\">\n            {t(\"description\")}\n          </p>\n        </div>\n      </div>\n\n      {/* Statistics cards */}\n      <div className=\"px-4 lg:px-6\">\n        <div className=\"grid gap-4 md:grid-cols-2\">\n          {modules.map((module) => (\n            <Card key={module.title} className=\"relative hover:shadow-lg transition-shadow\">\n              <CardHeader>\n                <div className=\"flex items-center justify-between\">\n                  <div className=\"flex items-center space-x-2\">\n                    <module.icon className=\"h-5 w-5\" />\n                    <CardTitle className=\"text-lg\">{module.title}</CardTitle>\n                  </div>\n                  {module.status === \"coming-soon\" && (\n                    <span className=\"text-xs bg-yellow-100 text-yellow-800 px-2 py-1 rounded-full\">\n                      {t(\"comingSoon\")}\n                    </span>\n                  )}\n                </div>\n                <CardDescription>{module.description}</CardDescription>\n              </CardHeader>\n              <CardContent>\n                <div className=\"space-y-4\">\n                  {/* Statistics information */}\n                  <div className=\"flex items-center gap-6 text-sm\">\n                    <div>\n                      <span className=\"text-muted-foreground\">{t(\"stats.total\")}</span>\n                      <span className=\"font-semibold ml-1\">{module.stats.total}</span>\n                    </div>\n                    <div>\n                      <span className=\"text-muted-foreground\">{t(\"stats.active\")}</span>\n                      <span className=\"font-semibold ml-1 text-green-600\">{module.stats.active}</span>\n                    </div>\n                  </div>\n\n                  {/* Action buttons */}\n                  {module.status === \"available\" ? (\n                    <Link href={module.href}>\n                      <Button className=\"w-full\">\n                        {t(\"enterManagement\")}\n                        <ArrowRight className=\"h-4 w-4\" />\n                      </Button>\n                    </Link>\n                  ) : (\n                    <Button disabled className=\"w-full\">\n                      {t(\"comingSoon\")}\n                    </Button>\n                  )}\n                </div>\n              </CardContent>\n            </Card>\n          ))}\n        </div>\n      </div>\n\n      {/* Quick actions */}\n      <div className=\"px-4 lg:px-6\">\n        <Card>\n          <CardHeader>\n            <CardTitle>{t(\"quickActions.title\")}</CardTitle>\n            <CardDescription>\n              {t(\"quickActions.description\")}\n            </CardDescription>\n          </CardHeader>\n          <CardContent>\n            <div className=\"flex flex-wrap gap-2\">\n              <Link href=\"/tools/wordlists/\">\n                <Button variant=\"outline\" size=\"sm\">\n                  <PackageOpen className=\"h-4 w-4\" />\n                  {t(\"wordlists.title\")}\n                </Button>\n              </Link>\n            </div>\n          </CardContent>\n        </Card>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/tools/wordlists/page.tsx",
    "content": "\"use client\"\n\nimport { useState, useMemo } from \"react\"\nimport { FileText, Search, Trash2, Pencil } from \"lucide-react\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { ScrollArea } from \"@/components/ui/scroll-area\"\nimport { Separator } from \"@/components/ui/separator\"\nimport { useWordlists, useDeleteWordlist } from \"@/hooks/use-wordlists\"\nimport { WordlistEditDialog } from \"@/components/tools/wordlist-edit-dialog\"\nimport { WordlistUploadDialog } from \"@/components/tools/wordlist-upload-dialog\"\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\"\nimport { toast } from \"sonner\"\nimport { cn } from \"@/lib/utils\"\nimport type { Wordlist } from \"@/types/wordlist.types\"\nimport { MasterDetailSkeleton } from \"@/components/ui/master-detail-skeleton\"\nimport { getDateLocale } from \"@/lib/date-utils\"\n\nexport default function WordlistsPage() {\n  const [selectedId, setSelectedId] = useState<number | null>(null)\n  const [searchQuery, setSearchQuery] = useState(\"\")\n  const [editingWordlist, setEditingWordlist] = useState<Wordlist | null>(null)\n  const [isEditDialogOpen, setIsEditDialogOpen] = useState(false)\n  const [deleteDialogOpen, setDeleteDialogOpen] = useState(false)\n  const [wordlistToDelete, setWordlistToDelete] = useState<Wordlist | null>(null)\n\n  // Internationalization\n  const tCommon = useTranslations(\"common\")\n  const tConfirm = useTranslations(\"common.confirm\")\n  const tNav = useTranslations(\"navigation\")\n  const t = useTranslations(\"pages.wordlists\")\n  const locale = useLocale()\n\n  const { data, isLoading } = useWordlists({ page: 1, pageSize: 1000 })\n  const deleteMutation = useDeleteWordlist()\n\n  // Filter wordlist list\n  const filteredWordlists = useMemo(() => {\n    if (!data?.results) return []\n    if (!searchQuery.trim()) return data.results\n    const query = searchQuery.toLowerCase()\n    return data.results.filter(\n      (w) =>\n        w.name.toLowerCase().includes(query) ||\n        w.description?.toLowerCase().includes(query)\n    )\n  }, [data?.results, searchQuery])\n\n  // Selected wordlist\n  const selectedWordlist = useMemo(() => {\n    if (!selectedId || !data?.results) return null\n    return data.results.find((w) => w.id === selectedId) || null\n  }, [selectedId, data?.results])\n\n  const handleEdit = (wordlist: Wordlist) => {\n    setEditingWordlist(wordlist)\n    setIsEditDialogOpen(true)\n  }\n\n  const handleCopyId = (id: number) => {\n    navigator.clipboard.writeText(String(id))\n    toast.success(t(\"idCopied\"))\n  }\n\n  const handleDelete = (wordlist: Wordlist) => {\n    setWordlistToDelete(wordlist)\n    setDeleteDialogOpen(true)\n  }\n\n  const confirmDelete = () => {\n    if (!wordlistToDelete) return\n    deleteMutation.mutate(wordlistToDelete.id, {\n      onSuccess: () => {\n        if (selectedId === wordlistToDelete.id) {\n          setSelectedId(null)\n        }\n        setDeleteDialogOpen(false)\n        setWordlistToDelete(null)\n      },\n    })\n  }\n\n  const formatFileSize = (bytes?: number) => {\n    if (bytes === undefined) return \"-\"\n    if (bytes < 1024) return `${bytes} B`\n    if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n    return `${(bytes / (1024 * 1024)).toFixed(1)} MB`\n  }\n\n  // Loading state\n  if (isLoading) {\n    return <MasterDetailSkeleton title={tNav(\"wordlists\")} listItemCount={5} />\n  }\n\n  return (\n    <div className=\"flex flex-col h-full\">\n      {/* Top: Title + Search + Upload button */}\n      <div className=\"flex items-center justify-between gap-4 px-4 py-4 lg:px-6\">\n        <h1 className=\"text-2xl font-bold shrink-0\">{t(\"title\")}</h1>\n        <div className=\"flex items-center gap-2 flex-1 max-w-md\">\n          <div className=\"relative flex-1\">\n            <Search className=\"absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n            <Input\n              placeholder={t(\"searchPlaceholder\")}\n              value={searchQuery}\n              onChange={(e) => setSearchQuery(e.target.value)}\n              className=\"pl-8\"\n            />\n          </div>\n        </div>\n        <WordlistUploadDialog />\n      </div>\n\n      <Separator />\n\n      {/* Main: Left list + Right details */}\n      <div className=\"flex flex-1 min-h-0\">\n        {/* Left: Wordlist list */}\n        <div className=\"w-72 lg:w-80 border-r flex flex-col\">\n          <div className=\"px-4 py-3 border-b\">\n            <h2 className=\"text-sm font-medium text-muted-foreground\">\n              {t(\"listTitle\")} ({filteredWordlists.length})\n            </h2>\n          </div>\n          <ScrollArea className=\"flex-1\">\n            {isLoading ? (\n              <div className=\"p-4 text-sm text-muted-foreground\">{t(\"loading\")}</div>\n            ) : filteredWordlists.length === 0 ? (\n              <div className=\"p-4 text-sm text-muted-foreground\">\n                {searchQuery ? t(\"noMatch\") : t(\"noData\")}\n              </div>\n            ) : (\n              <div className=\"p-2\">\n                {filteredWordlists.map((wordlist) => (\n                  <button\n                    key={wordlist.id}\n                    onClick={() => setSelectedId(wordlist.id)}\n                    className={cn(\n                      \"w-full text-left rounded-lg px-3 py-2.5 transition-colors\",\n                      selectedId === wordlist.id\n                        ? \"bg-primary/10 text-primary\"\n                        : \"hover:bg-muted\"\n                    )}\n                  >\n                    <div className=\"font-medium text-sm truncate\">\n                      {wordlist.name}\n                    </div>\n                    <div className=\"text-xs text-muted-foreground mt-0.5\">\n                      {wordlist.lineCount?.toLocaleString() ?? \"-\"} {t(\"lines\")} · {formatFileSize(wordlist.fileSize)}\n                    </div>\n                  </button>\n                ))}\n              </div>\n            )}\n          </ScrollArea>\n        </div>\n\n        {/* Right: Wordlist details */}\n        <div className=\"flex-1 flex flex-col min-w-0\">\n          {selectedWordlist ? (\n            <>\n              {/* Details header */}\n              <div className=\"px-6 py-4 border-b\">\n                <div className=\"flex items-start gap-3\">\n                  <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-primary/10 shrink-0\">\n                    <FileText className=\"h-5 w-5 text-primary\" />\n                  </div>\n                  <div className=\"min-w-0 flex-1\">\n                    <h2 className=\"text-lg font-semibold truncate\">\n                      {selectedWordlist.name}\n                    </h2>\n                    {selectedWordlist.description && (\n                      <p className=\"text-sm text-muted-foreground mt-0.5\">\n                        {selectedWordlist.description}\n                      </p>\n                    )}\n                  </div>\n                </div>\n              </div>\n\n              {/* Details content */}\n              <ScrollArea className=\"flex-1\">\n                <div className=\"p-6 space-y-6\">\n                  {/* Basic information */}\n                  <div className=\"rounded-lg border\">\n                    <div className=\"grid grid-cols-2 divide-x\">\n                      <div className=\"p-4\">\n                        <div className=\"text-xs text-muted-foreground\">{t(\"rows\")}</div>\n                        <div className=\"text-lg font-semibold mt-1\">\n                          {selectedWordlist.lineCount?.toLocaleString() ?? \"-\"}\n                        </div>\n                      </div>\n                      <div className=\"p-4\">\n                        <div className=\"text-xs text-muted-foreground\">{t(\"size\")}</div>\n                        <div className=\"text-lg font-semibold mt-1\">\n                          {formatFileSize(selectedWordlist.fileSize)}\n                        </div>\n                      </div>\n                    </div>\n                    <Separator />\n                    <div className=\"p-4 space-y-3\">\n                      <div className=\"flex justify-between text-sm\">\n                        <span className=\"text-muted-foreground\">{t(\"id\")}</span>\n                        <span className=\"font-mono\">{selectedWordlist.id}</span>\n                      </div>\n                      <div className=\"flex justify-between text-sm\">\n                        <span className=\"text-muted-foreground\">{t(\"updatedAt\")}</span>\n                        <span>\n                          {new Date(selectedWordlist.updatedAt).toLocaleString(getDateLocale(locale))}\n                        </span>\n                      </div>\n                      {selectedWordlist.fileHash && (\n                        <div className=\"text-sm\">\n                          <span className=\"text-muted-foreground\">{t(\"hash\")}</span>\n                          <div className=\"font-mono text-xs mt-1 break-all bg-muted p-2 rounded\">\n                            {selectedWordlist.fileHash}\n                          </div>\n                        </div>\n                      )}\n                    </div>\n                  </div>\n                </div>\n              </ScrollArea>\n\n              {/* Action buttons */}\n              <div className=\"px-6 py-4 border-t flex items-center gap-2\">\n                <Button\n                  variant=\"outline\"\n                  size=\"sm\"\n                  onClick={() => handleEdit(selectedWordlist)}\n                >\n                  <Pencil className=\"h-4 w-4 mr-1.5\" />\n                  {t(\"editContent\")}\n                </Button>\n                <div className=\"flex-1\" />\n                <Button\n                  variant=\"outline\"\n                  size=\"sm\"\n                  className=\"text-destructive hover:text-destructive\"\n                  onClick={() => handleDelete(selectedWordlist)}\n                  disabled={deleteMutation.isPending}\n                >\n                  <Trash2 className=\"h-4 w-4 mr-1.5\" />\n                  {t(\"delete\")}\n                </Button>\n              </div>\n            </>\n          ) : (\n            // Unselected state\n            <div className=\"flex-1 flex items-center justify-center\">\n              <div className=\"text-center text-muted-foreground\">\n                <FileText className=\"h-12 w-12 mx-auto mb-3 opacity-50\" />\n                <p className=\"text-sm\">{t(\"selectHint\")}</p>\n              </div>\n            </div>\n          )}\n        </div>\n      </div>\n\n      {/* Edit dialog */}\n      <WordlistEditDialog\n        wordlist={editingWordlist}\n        open={isEditDialogOpen}\n        onOpenChange={setIsEditDialogOpen}\n      />\n\n      {/* Delete confirmation dialog */}\n      <AlertDialog open={deleteDialogOpen} onOpenChange={setDeleteDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{tConfirm(\"deleteTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {tConfirm(\"deleteWordlistMessage\", { name: wordlistToDelete?.name ?? \"\" })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"actions.cancel\")}</AlertDialogCancel>\n            <AlertDialogAction \n              onClick={confirmDelete} \n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n              disabled={deleteMutation.isPending}\n            >\n              {deleteMutation.isPending ? tConfirm(\"deleting\") : tCommon(\"actions.delete\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/[locale]/vulnerabilities/page.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { useTranslations } from \"next-intl\"\nimport { VulnerabilitiesDetailView } from \"@/components/vulnerabilities\"\n\n/**\n * All vulnerabilities page\n * Displays all vulnerabilities in the system\n */\nexport default function VulnerabilitiesPage() {\n  const t = useTranslations(\"vulnerabilities\")\n\n  return (\n    <div className=\"flex flex-col gap-4 py-4 md:gap-6 md:py-6\">\n      {/* Page header */}\n      <div className=\"flex items-center justify-between px-4 lg:px-6\">\n        <div>\n          <h2 className=\"text-2xl font-bold tracking-tight\">{t(\"title\")}</h2>\n          <p className=\"text-muted-foreground\">{t(\"description\")}</p>\n        </div>\n      </div>\n\n      {/* Vulnerability list */}\n      <div className=\"px-4 lg:px-6\">\n        <VulnerabilitiesDetailView />\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/app/globals.css",
    "content": "@import \"tailwindcss\";\n@import \"tw-animate-css\";\n@import \"@xterm/xterm/css/xterm.css\";\n@import \"../styles/themes/index.css\";\n\n@custom-variant dark (&:is(.dark *));\n\n@theme inline {\n  --color-background: var(--background);\n  --color-foreground: var(--foreground);\n  --color-sidebar-ring: var(--sidebar-ring);\n  --color-sidebar-border: var(--sidebar-border);\n  --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);\n  --color-sidebar-accent: var(--sidebar-accent);\n  --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);\n  --color-sidebar-primary: var(--sidebar-primary);\n  --color-sidebar-foreground: var(--sidebar-foreground);\n  --color-sidebar: var(--sidebar);\n  --color-chart-5: var(--chart-5);\n  --color-chart-4: var(--chart-4);\n  --color-chart-3: var(--chart-3);\n  --color-chart-2: var(--chart-2);\n  --color-chart-1: var(--chart-1);\n  --color-ring: var(--ring);\n  --color-input: var(--input);\n  --color-border: var(--border);\n  --color-destructive: var(--destructive);\n  --color-accent-foreground: var(--accent-foreground);\n  --color-accent: var(--accent);\n  --color-muted-foreground: var(--muted-foreground);\n  --color-muted: var(--muted);\n  --color-secondary-foreground: var(--secondary-foreground);\n  --color-secondary: var(--secondary);\n  --color-primary-foreground: var(--primary-foreground);\n  --color-primary: var(--primary);\n  --color-popover-foreground: var(--popover-foreground);\n  --color-popover: var(--popover);\n  --color-card-foreground: var(--card-foreground);\n  --color-card: var(--card);\n  --radius-sm: calc(var(--radius) - 4px);\n  --radius-md: calc(var(--radius) - 2px);\n  --radius-lg: var(--radius);\n  --radius-xl: calc(var(--radius) + 4px);\n  --font-sans: 'Noto Sans SC', system-ui, -apple-system, PingFang SC, sans-serif;\n  --font-mono: 'JetBrains Mono', 'Fira Code', Consolas, monospace;\n  --font-serif: Georgia, 'Noto Serif SC', serif;\n  --tracking-tighter: calc(var(--tracking-normal) - 0.05em);\n  --tracking-tight: calc(var(--tracking-normal) - 0.025em);\n  --tracking-wide: calc(var(--tracking-normal) + 0.025em);\n  --tracking-wider: calc(var(--tracking-normal) + 0.05em);\n  --tracking-widest: calc(var(--tracking-normal) + 0.1em);\n  --tracking-normal: var(--tracking-normal);\n  --shadow-2xl: var(--shadow-2xl);\n  --shadow-xl: var(--shadow-xl);\n  --shadow-lg: var(--shadow-lg);\n  --shadow-md: var(--shadow-md);\n  --shadow: var(--shadow);\n  --shadow-sm: var(--shadow-sm);\n  --shadow-xs: var(--shadow-xs);\n  --shadow-2xs: var(--shadow-2xs);\n  --spacing: var(--spacing);\n  --letter-spacing: var(--letter-spacing);\n  --shadow-offset-y: var(--shadow-offset-y);\n  --shadow-offset-x: var(--shadow-offset-x);\n  --shadow-spread: var(--shadow-spread);\n  --shadow-blur: var(--shadow-blur);\n  --shadow-opacity: var(--shadow-opacity);\n  --color-shadow-color: var(--shadow-color);\n  --color-destructive-foreground: var(--destructive-foreground);\n}\n\n/* 基础主题 - Vercel 风格 (黑白灰) */\n/* 只在没有设置 data-theme 时应用默认样式 */\n:root:not([data-theme]),\n[data-theme=\"vercel\"] {\n  --radius: 0.5rem;\n  --background: oklch(0.9900 0 0);\n  --foreground: oklch(0 0 0);\n  --card: oklch(1 0 0);\n  --card-foreground: oklch(0 0 0);\n  --popover: oklch(0.9900 0 0);\n  --popover-foreground: oklch(0 0 0);\n  --primary: oklch(0 0 0);\n  --primary-foreground: oklch(1 0 0);\n  --secondary: oklch(0.9400 0 0);\n  --secondary-foreground: oklch(0 0 0);\n  --muted: oklch(0.9700 0 0);\n  --muted-foreground: oklch(0.4400 0 0);\n  --accent: oklch(0.9400 0 0);\n  --accent-foreground: oklch(0 0 0);\n  --destructive: oklch(0.6300 0.1900 23.0300);\n  --destructive-foreground: oklch(1 0 0);\n  --border: oklch(0.9200 0 0);\n  --input: oklch(0.9400 0 0);\n  --ring: oklch(0 0 0);\n  --chart-1: oklch(0.8100 0.1700 75.3500);\n  --chart-2: oklch(0.5500 0.2200 264.5300);\n  --chart-3: oklch(0.7200 0 0);\n  --chart-4: oklch(0.9200 0 0);\n  --chart-5: oklch(0.5600 0 0);\n  --sidebar: oklch(0.9900 0 0);\n  --sidebar-foreground: oklch(0 0 0);\n  --sidebar-primary: oklch(0 0 0);\n  --sidebar-primary-foreground: oklch(1 0 0);\n  --sidebar-accent: oklch(0.9400 0 0);\n  --sidebar-accent-foreground: oklch(0 0 0);\n  --sidebar-border: oklch(0.9400 0 0);\n  --sidebar-ring: oklch(0 0 0);\n  --font-sans: 'Noto Sans SC', system-ui, -apple-system, PingFang SC, Hiragino Sans GB, Microsoft YaHei, sans-serif;\n  --font-serif: Georgia, serif;\n  --font-mono: 'JetBrains Mono', 'Fira Code', Consolas, monospace;\n  --shadow-color: hsl(0 0% 0%);\n  --shadow-opacity: 0.18;\n  --shadow-blur: 2px;\n  --shadow-spread: 0px;\n  --shadow-offset-x: 0px;\n  --shadow-offset-y: 1px;\n  --letter-spacing: 0em;\n  --spacing: 0.25rem;\n  --shadow-2xs: 0px 1px 2px 0px hsl(0 0% 0% / 0.09);\n  --shadow-xs: 0px 1px 2px 0px hsl(0 0% 0% / 0.09);\n  --shadow-sm: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 1px 2px -1px hsl(0 0% 0% / 0.18);\n  --shadow: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 1px 2px -1px hsl(0 0% 0% / 0.18);\n  --shadow-md: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 2px 4px -1px hsl(0 0% 0% / 0.18);\n  --shadow-lg: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 4px 6px -1px hsl(0 0% 0% / 0.18);\n  --shadow-xl: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 8px 10px -1px hsl(0 0% 0% / 0.18);\n  --shadow-2xl: 0px 1px 2px 0px hsl(0 0% 0% / 0.45);\n  --tracking-normal: 0em;\n}\n\n/* 基础主题 - 暗色模式 (Vercel 风格) */\n[data-theme=\"vercel\"].dark,\n:root:not([data-theme]).dark {\n  --background: oklch(0 0 0);\n  --foreground: oklch(1 0 0);\n  --card: oklch(0.1400 0 0);\n  --card-foreground: oklch(1 0 0);\n  --popover: oklch(0.1800 0 0);\n  --popover-foreground: oklch(1 0 0);\n  --primary: oklch(1 0 0);\n  --primary-foreground: oklch(0 0 0);\n  --secondary: oklch(0.2500 0 0);\n  --secondary-foreground: oklch(1 0 0);\n  --muted: oklch(0.2300 0 0);\n  --muted-foreground: oklch(0.7200 0 0);\n  --accent: oklch(0.3200 0 0);\n  --accent-foreground: oklch(1 0 0);\n  --destructive: oklch(0.6900 0.2000 23.9100);\n  --destructive-foreground: oklch(0 0 0);\n  --border: oklch(0.2600 0 0);\n  --input: oklch(0.3200 0 0);\n  --ring: oklch(0.7200 0 0);\n  --chart-1: oklch(0.8100 0.1700 75.3500);\n  --chart-2: oklch(0.5800 0.2100 260.8400);\n  --chart-3: oklch(0.5600 0 0);\n  --chart-4: oklch(0.4400 0 0);\n  --chart-5: oklch(0.9200 0 0);\n  --sidebar: oklch(0.1800 0 0);\n  --sidebar-foreground: oklch(1 0 0);\n  --sidebar-primary: oklch(1 0 0);\n  --sidebar-primary-foreground: oklch(0 0 0);\n  --sidebar-accent: oklch(0.3200 0 0);\n  --sidebar-accent-foreground: oklch(1 0 0);\n  --sidebar-border: oklch(0.3200 0 0);\n  --sidebar-ring: oklch(0.7200 0 0);\n}\n\n@layer base {\n\n  html,\n  body {\n    height: 100%;\n  }\n\n  * {\n    @apply border-border outline-ring/50;\n  }\n\n  body {\n    @apply bg-background text-foreground;\n    /* 禁止页面级滚动，滚动交给主内容容器 */\n    overflow: hidden;\n    letter-spacing: var(--tracking-normal);\n  }\n\n  /* 全局滚动条样式 - Webkit 浏览器 (Chrome, Safari, Edge) */\n  ::-webkit-scrollbar {\n    width: 10px;\n    height: 10px;\n  }\n\n  ::-webkit-scrollbar-track {\n    background: transparent;\n  }\n\n  ::-webkit-scrollbar-thumb {\n    background: oklch(0.708 0 0 / 0.3);\n    border-radius: 5px;\n    border: 2px solid transparent;\n    background-clip: padding-box;\n  }\n\n  ::-webkit-scrollbar-thumb:hover {\n    background: oklch(0.708 0 0 / 0.5);\n    border-radius: 5px;\n    border: 2px solid transparent;\n    background-clip: padding-box;\n  }\n\n  /* 暗色主题下的滚动条 */\n  .dark ::-webkit-scrollbar-thumb {\n    background: oklch(0.556 0 0 / 0.4);\n    border-radius: 5px;\n    border: 2px solid transparent;\n    background-clip: padding-box;\n  }\n\n  .dark ::-webkit-scrollbar-thumb:hover {\n    background: oklch(0.556 0 0 / 0.6);\n    border-radius: 5px;\n    border: 2px solid transparent;\n    background-clip: padding-box;\n  }\n\n  /* Firefox 滚动条样式 */\n  * {\n    scrollbar-width: thin;\n    scrollbar-color: oklch(0.708 0 0 / 0.3) transparent;\n  }\n\n  .dark * {\n    scrollbar-color: oklch(0.556 0 0 / 0.4) transparent;\n  }\n\n  /* 隐藏滚动条但保持可滚动 */\n  .scrollbar-hide {\n    -ms-overflow-style: none;\n    /* IE and Edge */\n    scrollbar-width: none;\n    /* Firefox */\n  }\n\n  .scrollbar-hide::-webkit-scrollbar {\n    display: none;\n    /* Chrome, Safari and Opera */\n  }\n\n}\n\n/* 登录页背景 - 使用主题色适配亮暗模式 */\n.login-bg {\n  position: relative;\n  background-color: var(--background);\n}\n\n.login-bg::before {\n  content: '';\n  position: absolute;\n  inset: 0;\n  background-color: var(--primary);\n  opacity: 0.04;\n  mask-image: url(\"data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23000' fill-opacity='1'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n  -webkit-mask-image: url(\"data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23000' fill-opacity='1'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n  mask-size: 60px 60px;\n  -webkit-mask-size: 60px 60px;\n  pointer-events: none;\n  z-index: 0;\n}\n\n.login-bg > * {\n  position: relative;\n  z-index: 1;\n}\n\n/* 通知铃铛摇晃动画 */\n@keyframes wiggle {\n  0%, 100% {\n    transform: rotate(0deg);\n  }\n  15% {\n    transform: rotate(15deg);\n  }\n  30% {\n    transform: rotate(-12deg);\n  }\n  45% {\n    transform: rotate(8deg);\n  }\n  60% {\n    transform: rotate(-5deg);\n  }\n  75% {\n    transform: rotate(2deg);\n  }\n}\n\n/* 进度条条纹动画 */\n@keyframes progress-stripes {\n  from {\n    background-position: 1rem 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n\n.progress-striped {\n  background-image: linear-gradient(\n    45deg,\n    rgba(255, 255, 255, 0.15) 25%,\n    transparent 25%,\n    transparent 50%,\n    rgba(255, 255, 255, 0.15) 50%,\n    rgba(255, 255, 255, 0.15) 75%,\n    transparent 75%,\n    transparent\n  );\n  background-size: 1rem 1rem;\n  animation: progress-stripes 1s linear infinite;\n}\n\n/* 闪电闪烁动画 - 快速扫描按钮 */\n@keyframes flash {\n  0%, 90%, 100% {\n    opacity: 1;\n    transform: scale(1);\n    filter: drop-shadow(0 0 2px rgba(250, 204, 21, 0.4));\n  }\n  93% {\n    opacity: 1;\n    transform: scale(1.3);\n    filter: drop-shadow(0 0 8px rgba(250, 204, 21, 0.8));\n  }\n  96% {\n    opacity: 0.6;\n    transform: scale(1);\n    filter: drop-shadow(0 0 2px rgba(250, 204, 21, 0.4));\n  }\n}\n\n/* 按钮整体发光动画 */\n@keyframes glow {\n  0%, 85%, 100% {\n    box-shadow: 0 0 0 transparent;\n  }\n  90% {\n    box-shadow: 0 0 12px oklch(from var(--primary) l c h / 0.5), 0 0 24px oklch(from var(--primary) l c h / 0.3);\n  }\n  95% {\n    box-shadow: 0 0 4px oklch(from var(--primary) l c h / 0.2);\n  }\n}\n\n.animate-glow {\n  animation: glow 3s ease-in-out infinite;\n}\n\n/* 边框流光动画 */\n@keyframes border-flow {\n  0% {\n    transform: translateX(-100%) rotate(0deg);\n  }\n  100% {\n    transform: translateX(100%) rotate(0deg);\n  }\n}\n\n.animate-border-flow {\n  animation: border-flow 2s linear infinite;\n}"
  },
  {
    "path": "frontend/app/layout.tsx",
    "content": "import type React from \"react\"\n\n/**\n * Root layout component\n * This is the outermost layout, actual content is handled by [locale]/layout.tsx\n */\nexport default function RootLayout({\n  children,\n}: Readonly<{\n  children: React.ReactNode\n}>) {\n  return children\n}\n"
  },
  {
    "path": "frontend/components/about-dialog.tsx",
    "content": "\"use client\"\n\nimport { useState } from 'react'\nimport { useTranslations } from 'next-intl'\nimport { useQueryClient } from '@tanstack/react-query'\nimport {\n  IconRadar,\n  IconRefresh,\n  IconExternalLink,\n  IconBrandGithub,\n  IconMessageReport,\n  IconBook,\n  IconFileText,\n  IconCheck,\n  IconArrowUp,\n} from '@tabler/icons-react'\n\nimport {\n  Dialog,\n  DialogContent,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from '@/components/ui/dialog'\nimport { Button } from '@/components/ui/button'\nimport { Separator } from '@/components/ui/separator'\nimport { Badge } from '@/components/ui/badge'\nimport { useVersion } from '@/hooks/use-version'\nimport { VersionService } from '@/services/version.service'\nimport type { UpdateCheckResult } from '@/types/version.types'\n\ninterface AboutDialogProps {\n  children: React.ReactNode\n}\n\nexport function AboutDialog({ children }: AboutDialogProps) {\n  const t = useTranslations('about')\n  const { data: versionData } = useVersion()\n  const queryClient = useQueryClient()\n\n  const [isChecking, setIsChecking] = useState(false)\n  const [updateResult, setUpdateResult] = useState<UpdateCheckResult | null>(null)\n  const [checkError, setCheckError] = useState<string | null>(null)\n\n  const handleCheckUpdate = async () => {\n    setIsChecking(true)\n    setCheckError(null)\n    try {\n      const result = await VersionService.checkUpdate()\n      setUpdateResult(result)\n      queryClient.setQueryData(['check-update'], result)\n    } catch {\n      setCheckError(t('checkFailed'))\n    } finally {\n      setIsChecking(false)\n    }\n  }\n\n  const currentVersion = updateResult?.currentVersion || versionData?.version || '-'\n  const latestVersion = updateResult?.latestVersion\n  const hasUpdate = updateResult?.hasUpdate\n\n  return (\n    <Dialog>\n      <DialogTrigger asChild>\n        {children}\n      </DialogTrigger>\n      <DialogContent className=\"sm:max-w-md\">\n        <DialogHeader>\n          <DialogTitle>{t('title')}</DialogTitle>\n        </DialogHeader>\n\n        <div className=\"space-y-6\">\n          {/* Logo and name */}\n          <div className=\"flex flex-col items-center py-4\">\n            <div className=\"flex h-16 w-16 items-center justify-center rounded-2xl bg-primary/10 mb-3\">\n              <IconRadar className=\"h-8 w-8 text-primary\" />\n            </div>\n            <h2 className=\"text-xl font-semibold\">XingRin</h2>\n            <p className=\"text-sm text-muted-foreground\">{t('description')}</p>\n          </div>\n\n          {/* Version info */}\n          <div className=\"rounded-lg border p-4 space-y-3\">\n            <div className=\"flex items-center justify-between\">\n              <span className=\"text-sm text-muted-foreground\">{t('currentVersion')}</span>\n              <span className=\"font-mono text-sm\">{currentVersion}</span>\n            </div>\n\n            {updateResult && (\n              <div className=\"flex items-center justify-between\">\n                <span className=\"text-sm text-muted-foreground\">{t('latestVersion')}</span>\n                <div className=\"flex items-center gap-2\">\n                  <span className=\"font-mono text-sm\">{latestVersion}</span>\n                  {hasUpdate ? (\n                    <Badge variant=\"default\" className=\"gap-1\">\n                      <IconArrowUp className=\"h-3 w-3\" />\n                      {t('updateAvailable')}\n                    </Badge>\n                  ) : (\n                    <Badge variant=\"secondary\" className=\"gap-1\">\n                      <IconCheck className=\"h-3 w-3\" />\n                      {t('upToDate')}\n                    </Badge>\n                  )}\n                </div>\n              </div>\n            )}\n\n            {checkError && (\n              <p className=\"text-sm text-destructive\">{checkError}</p>\n            )}\n\n            <div className=\"flex gap-2\">\n              <Button\n                variant=\"outline\"\n                size=\"sm\"\n                className=\"flex-1\"\n                onClick={handleCheckUpdate}\n                disabled={isChecking}\n              >\n                <IconRefresh className={`h-4 w-4 mr-2 ${isChecking ? 'animate-spin' : ''}`} />\n                {isChecking ? t('checking') : t('checkUpdate')}\n              </Button>\n\n              {hasUpdate && updateResult?.releaseUrl && (\n                <Button\n                  variant=\"default\"\n                  size=\"sm\"\n                  className=\"flex-1\"\n                  asChild\n                >\n                  <a href={updateResult.releaseUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n                    <IconExternalLink className=\"h-4 w-4 mr-2\" />\n                    {t('viewRelease')}\n                  </a>\n                </Button>\n              )}\n            </div>\n\n            {hasUpdate && (\n              <div className=\"rounded-md bg-muted p-3 text-sm text-muted-foreground\">\n                <p>{t('updateHint')}</p>\n                <code className=\"mt-1 block rounded bg-background px-2 py-1 font-mono text-xs\">\n                  sudo ./update.sh\n                </code>\n              </div>\n            )}\n          </div>\n\n          <Separator />\n\n          {/* Links */}\n          <div className=\"grid grid-cols-2 gap-2\">\n            <Button variant=\"ghost\" size=\"sm\" className=\"justify-start\" asChild>\n              <a href=\"https://github.com/yyhuni/xingrin\" target=\"_blank\" rel=\"noopener noreferrer\">\n                <IconBrandGithub className=\"h-4 w-4 mr-2\" />\n                GitHub\n              </a>\n            </Button>\n            <Button variant=\"ghost\" size=\"sm\" className=\"justify-start\" asChild>\n              <a href=\"https://github.com/yyhuni/xingrin/releases\" target=\"_blank\" rel=\"noopener noreferrer\">\n                <IconFileText className=\"h-4 w-4 mr-2\" />\n                {t('changelog')}\n              </a>\n            </Button>\n            <Button variant=\"ghost\" size=\"sm\" className=\"justify-start\" asChild>\n              <a href=\"https://github.com/yyhuni/xingrin/issues\" target=\"_blank\" rel=\"noopener noreferrer\">\n                <IconMessageReport className=\"h-4 w-4 mr-2\" />\n                {t('feedback')}\n              </a>\n            </Button>\n            <Button variant=\"ghost\" size=\"sm\" className=\"justify-start\" asChild>\n              <a href=\"https://github.com/yyhuni/xingrin#readme\" target=\"_blank\" rel=\"noopener noreferrer\">\n                <IconBook className=\"h-4 w-4 mr-2\" />\n                {t('docs')}\n              </a>\n            </Button>\n          </div>\n\n          {/* Footer */}\n          <p className=\"text-center text-xs text-muted-foreground\">\n            © 2025 XingRin · MIT License\n          </p>\n        </div>\n      </DialogContent>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "frontend/components/app-sidebar.tsx",
    "content": "\"use client\" // Mark as client component, can use browser APIs and interactive features\n\n// Import React library\nimport type * as React from \"react\"\n// Import various icons from Tabler Icons library\nimport {\n  IconDashboard, // Dashboard icon\n  IconListDetails, // List details icon\n  IconSettings, // Settings icon\n  IconUsers, // Users icon\n  IconChevronRight, // Right arrow icon\n  IconRadar, // Radar scan icon\n  IconTool, // Tool icon\n  IconServer, // Server icon\n  IconTerminal2, // Terminal icon\n  IconBug, // Vulnerability icon\n  IconSearch, // Search icon\n  IconKey, // API Key icon\n  IconBan, // Blacklist icon\n  IconInfoCircle, // About icon\n} from \"@tabler/icons-react\"\n// Import internationalization hook\nimport { useTranslations } from 'next-intl'\n// Import internationalization navigation components\nimport { Link, usePathname } from '@/i18n/navigation'\n\n// Import custom navigation components\nimport { NavSystem } from \"@/components/nav-system\"\nimport { NavUser } from \"@/components/nav-user\"\nimport { AboutDialog } from \"@/components/about-dialog\"\n// Import sidebar UI components\nimport {\n  Sidebar,\n  SidebarContent,\n  SidebarFooter,\n  SidebarHeader,\n  SidebarMenu,\n  SidebarMenuButton,\n  SidebarMenuItem,\n  SidebarMenuSub,\n  SidebarMenuSubButton,\n  SidebarMenuSubItem,\n  SidebarGroup,\n  SidebarGroupContent,\n  SidebarGroupLabel,\n  SidebarRail,\n} from \"@/components/ui/sidebar\"\n// Import collapsible component\nimport {\n  Collapsible,\n  CollapsibleContent,\n  CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\n\n/**\n * Application sidebar component\n * Displays the main navigation menu of the application, including user info, main menu, documents and secondary menu\n * Supports expand and collapse functionality for submenus\n * @param props - All properties of the Sidebar component\n */\nexport function AppSidebar({ ...props }: React.ComponentProps<typeof Sidebar>) {\n  const t = useTranslations('navigation')\n  const pathname = usePathname()\n  const normalize = (p: string) => (p !== \"/\" && p.endsWith(\"/\") ? p.slice(0, -1) : p)\n  const current = normalize(pathname)\n\n  // User information\n  const user = {\n    name: \"admin\",\n    email: \"admin@admin.com\",\n    avatar: \"\",\n  }\n\n  // Main navigation menu items - using translations\n  const navMain = [\n    {\n      title: t('dashboard'),\n      url: \"/dashboard/\",\n      icon: IconDashboard,\n    },\n    {\n      title: t('search'),\n      url: \"/search/\",\n      icon: IconSearch,\n    },\n    {\n      title: t('organization'),\n      url: \"/organization/\",\n      icon: IconUsers,\n    },\n    {\n      title: t('target'),\n      url: \"/target/\",\n      icon: IconListDetails,\n    },\n    {\n      title: t('vulnerabilities'),\n      url: \"/vulnerabilities/\",\n      icon: IconBug,\n    },\n    {\n      title: t('scan'),\n      url: \"/scan/\",\n      icon: IconRadar,\n      items: [\n        {\n          title: t('scanHistory'),\n          url: \"/scan/history/\",\n        },\n        {\n          title: t('scheduledScan'),\n          url: \"/scan/scheduled/\",\n        },\n        {\n          title: t('scanEngine'),\n          url: \"/scan/engine/\",\n        },\n      ],\n    },\n    {\n      title: t('tools'),\n      url: \"/tools/\",\n      icon: IconTool,\n      items: [\n        {\n          title: t('wordlists'),\n          url: \"/tools/wordlists/\",\n        },\n        {\n          title: t('fingerprints'),\n          url: \"/tools/fingerprints/\",\n        },\n        {\n          title: t('nucleiTemplates'),\n          url: \"/tools/nuclei/\",\n        },\n      ],\n    },\n  ]\n\n  // System settings related menu items\n  const documents = [\n    {\n      name: t('workers'),\n      url: \"/settings/workers/\",\n      icon: IconServer,\n    },\n    {\n      name: t('systemLogs'),\n      url: \"/settings/system-logs/\",\n      icon: IconTerminal2,\n    },\n    {\n      name: t('notifications'),\n      url: \"/settings/notifications/\",\n      icon: IconSettings,\n    },\n    {\n      name: t('apiKeys'),\n      url: \"/settings/api-keys/\",\n      icon: IconKey,\n    },\n    {\n      name: t('globalBlacklist'),\n      url: \"/settings/blacklist/\",\n      icon: IconBan,\n    },\n  ]\n\n  return (\n    // collapsible=\"icon\" means the sidebar can be collapsed to icon-only mode\n    <Sidebar collapsible=\"icon\" {...props}>\n      {/* Sidebar header */}\n      <SidebarHeader>\n        <SidebarMenu>\n          <SidebarMenuItem>\n            <SidebarMenuButton \n              asChild\n              className=\"data-[slot=sidebar-menu-button]:!p-1.5\"\n            >\n              <Link href=\"/\">\n                <IconRadar className=\"!size-5\" />\n                <span className=\"text-base font-semibold\">XingRin</span>\n              </Link>\n            </SidebarMenuButton>\n          </SidebarMenuItem>\n        </SidebarMenu>\n      </SidebarHeader>\n\n      {/* Sidebar main content area */}\n      <SidebarContent>\n        {/* Main navigation menu */}\n        <SidebarGroup>\n          <SidebarGroupLabel>{t('mainFeatures')}</SidebarGroupLabel>\n          <SidebarGroupContent>\n            <SidebarMenu>\n              {navMain.map((item) => {\n                const navUrl = normalize(item.url)\n                const isActive = navUrl === \"/\" ? current === \"/\" : current === navUrl || current.startsWith(navUrl + \"/\")\n                const hasSubItems = item.items && item.items.length > 0\n\n                if (!hasSubItems) {\n                  return (\n                    <SidebarMenuItem key={item.title}>\n                      <SidebarMenuButton asChild isActive={isActive}>\n                        <Link href={item.url}>\n                          <item.icon />\n                          <span>{item.title}</span>\n                        </Link>\n                      </SidebarMenuButton>\n                    </SidebarMenuItem>\n                  )\n                }\n\n                return (\n                  <Collapsible\n                    key={item.title}\n                    defaultOpen={isActive}\n                    className=\"group/collapsible\"\n                  >\n                    <SidebarMenuItem>\n                      <CollapsibleTrigger asChild>\n                        <SidebarMenuButton isActive={isActive}>\n                          <item.icon />\n                          <span>{item.title}</span>\n                          <IconChevronRight className=\"ml-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90\" />\n                        </SidebarMenuButton>\n                      </CollapsibleTrigger>\n                      <CollapsibleContent>\n                        <SidebarMenuSub>\n                          {item.items?.map((subItem) => {\n                            const subUrl = normalize(subItem.url)\n                            const isSubActive = current === subUrl || current.startsWith(subUrl + \"/\")\n                            return (\n                              <SidebarMenuSubItem key={subItem.title}>\n                                <SidebarMenuSubButton\n                                  asChild\n                                  isActive={isSubActive}\n                                >\n                                  <Link href={subItem.url}>\n                                    <span>{subItem.title}</span>\n                                  </Link>\n                                </SidebarMenuSubButton>\n                              </SidebarMenuSubItem>\n                            )\n                          })}\n                        </SidebarMenuSub>\n                      </CollapsibleContent>\n                    </SidebarMenuItem>\n                  </Collapsible>\n                )\n              })}\n            </SidebarMenu>\n          </SidebarGroupContent>\n        </SidebarGroup>\n        \n        {/* System settings navigation menu */}\n        <NavSystem items={documents} />\n        {/* About system button */}\n        <SidebarGroup className=\"mt-auto\">\n          <SidebarGroupContent>\n            <SidebarMenu>\n              <SidebarMenuItem>\n                <AboutDialog>\n                  <SidebarMenuButton>\n                    <IconInfoCircle />\n                    <span>{t('about')}</span>\n                  </SidebarMenuButton>\n                </AboutDialog>\n              </SidebarMenuItem>\n            </SidebarMenu>\n          </SidebarGroupContent>\n        </SidebarGroup>\n      </SidebarContent>\n\n      {/* Sidebar footer */}\n      <SidebarFooter>\n        <NavUser user={user} />\n      </SidebarFooter>\n      <SidebarRail />\n    </Sidebar>\n  )\n}\n"
  },
  {
    "path": "frontend/components/auth/auth-guard.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { useRouter, usePathname } from \"next/navigation\"\nimport { useAuth } from \"@/hooks/use-auth\"\nimport { LoadingState } from \"@/components/loading-spinner\"\n\n// Public routes that don't require authentication\nconst PUBLIC_ROUTES = [\"/login\"]\n// Skip authentication via environment variable (pnpm dev:noauth)\nconst SKIP_AUTH = process.env.NEXT_PUBLIC_SKIP_AUTH === 'true'\n\ninterface AuthGuardProps {\n  children: React.ReactNode\n}\n\n/**\n * Authentication guard component\n * Protects routes that require login\n */\nexport function AuthGuard({ children }: AuthGuardProps) {\n  const router = useRouter()\n  const pathname = usePathname()\n  const { data: auth, isLoading } = useAuth()\n\n  // Check if it's a public route\n  const isPublicRoute = PUBLIC_ROUTES.some((route) => \n    pathname.startsWith(route)\n  )\n\n  React.useEffect(() => {\n    // Skip processing in skip auth mode\n    if (SKIP_AUTH) return\n    // Skip processing during loading or for public routes\n    if (isLoading || isPublicRoute) return\n\n    // Redirect to login page if not authenticated\n    if (!auth?.authenticated) {\n      router.push(\"/login/\")\n    }\n  }, [auth, isLoading, isPublicRoute, router])\n\n  // Skip auth mode\n  if (SKIP_AUTH) {\n    return <>{children}</>\n  }\n\n  // Show loading during authentication check\n  if (isLoading) {\n    return <LoadingState message=\"loading...\" />\n  }\n\n  // Render public routes directly\n  if (isPublicRoute) {\n    return <>{children}</>\n  }\n\n  // Don't render content if not authenticated (waiting for redirect)\n  if (!auth?.authenticated) {\n    return <LoadingState message=\"loading...\" />\n  }\n\n  // Render content if authenticated\n  return <>{children}</>\n}\n"
  },
  {
    "path": "frontend/components/auth/auth-layout.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { usePathname } from \"next/navigation\"\nimport { useTranslations } from \"next-intl\"\nimport { AppSidebar } from \"@/components/app-sidebar\"\nimport { SiteHeader } from \"@/components/site-header\"\nimport { SidebarInset, SidebarProvider } from \"@/components/ui/sidebar\"\nimport { Toaster } from \"@/components/ui/sonner\"\nimport { LoadingState } from \"@/components/loading-spinner\"\nimport { Suspense } from \"react\"\nimport { useAuth } from \"@/hooks/use-auth\"\nimport { useRouter } from \"next/navigation\"\n\n// Public routes that don't require authentication (without locale prefix)\nconst PUBLIC_ROUTES = [\"/login\"]\n\ninterface AuthLayoutProps {\n  children: React.ReactNode\n}\n\n/**\n * Check if the current path is a public route\n * Handles internationalized paths like /en/login, /zh/login\n */\nfunction isPublicPath(pathname: string): boolean {\n  // Remove locale prefix (e.g., /en/login -> /login, /zh/login -> /login)\n  const pathWithoutLocale = pathname.replace(/^\\/[a-z]{2}(?=\\/|$)/, '')\n  return PUBLIC_ROUTES.some((route) => \n    pathWithoutLocale === route || pathWithoutLocale.startsWith(`${route}/`)\n  )\n}\n\n/**\n * Authentication layout component\n * Decides whether to show sidebar based on login status and route\n */\nexport function AuthLayout({ children }: AuthLayoutProps) {\n  const pathname = usePathname()\n  const router = useRouter()\n  const { data: auth, isLoading } = useAuth()\n  const tCommon = useTranslations(\"common\")\n\n  // Check if it's a public route (login page)\n  const isPublicRoute = isPublicPath(pathname)\n\n  // Redirect to login page if not authenticated (useEffect must be before all conditional returns)\n  React.useEffect(() => {\n    if (!isLoading && !auth?.authenticated && !isPublicRoute) {\n      router.push(\"/login/\")\n    }\n  }, [auth, isLoading, isPublicRoute, router])\n\n  // If it's login page, render content directly (without sidebar)\n  if (isPublicRoute) {\n    return (\n      <>\n        {children}\n        <Toaster />\n      </>\n    )\n  }\n\n  // Loading or not authenticated\n  if (isLoading || !auth?.authenticated) {\n    return <LoadingState message=\"loading...\" />\n  }\n\n  // Authenticated - show full layout (with sidebar)\n  return (\n    <SidebarProvider\n      style={\n        {\n          \"--sidebar-width\": \"calc(var(--spacing) * 70)\",\n          \"--header-height\": \"calc(var(--spacing) * 11)\",\n        } as React.CSSProperties\n      }\n    >\n      <AppSidebar />\n      <SidebarInset className=\"flex min-h-0 flex-col h-svh\">\n        <SiteHeader />\n        <div className=\"flex flex-col flex-1 min-h-0 overflow-y-auto\">\n          <div className=\"@container/main flex-1 min-h-0 flex flex-col gap-2\">\n            <Suspense fallback={<LoadingState message={tCommon(\"status.pageLoading\")} />}>\n              {children}\n            </Suspense>\n            <Toaster />\n          </div>\n        </div>\n      </SidebarInset>\n    </SidebarProvider>\n  )\n}\n"
  },
  {
    "path": "frontend/components/auth/change-password-dialog.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { useTranslations } from \"next-intl\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n} from \"@/components/ui/dialog\"\nimport { useChangePassword } from \"@/hooks/use-auth\"\nimport { getErrorMessage } from \"@/lib/api-client\"\n\ninterface ChangePasswordDialogProps {\n  open: boolean\n  onOpenChange: (open: boolean) => void\n}\n\nexport function ChangePasswordDialog({ open, onOpenChange }: ChangePasswordDialogProps) {\n  const t = useTranslations(\"auth.changePassword\")\n  \n  const [oldPassword, setOldPassword] = React.useState(\"\")\n  const [newPassword, setNewPassword] = React.useState(\"\")\n  const [confirmPassword, setConfirmPassword] = React.useState(\"\")\n  const [error, setError] = React.useState(\"\")\n  \n  const { mutate: changePassword, isPending } = useChangePassword()\n\n  const handleSubmit = (e: React.FormEvent) => {\n    e.preventDefault()\n    setError(\"\")\n    \n    if (newPassword !== confirmPassword) {\n      setError(t(\"passwordMismatch\"))\n      return\n    }\n    \n    if (newPassword.length < 4) {\n      setError(t(\"passwordTooShort\", { min: 4 }))\n      return\n    }\n    \n    changePassword(\n      { oldPassword, newPassword },\n      {\n        onSuccess: () => {\n          onOpenChange(false)\n          setOldPassword(\"\")\n          setNewPassword(\"\")\n          setConfirmPassword(\"\")\n        },\n        onError: (err: unknown) => {\n          setError(getErrorMessage(err))\n        },\n      }\n    )\n  }\n\n  return (\n    <Dialog open={open} onOpenChange={onOpenChange}>\n      <DialogContent className=\"sm:max-w-[400px]\">\n        <DialogHeader>\n          <DialogTitle>{t(\"title\")}</DialogTitle>\n          <DialogDescription>{t(\"desc\")}</DialogDescription>\n        </DialogHeader>\n        <form onSubmit={handleSubmit}>\n          <div className=\"grid gap-4 py-4\">\n            <div className=\"grid gap-2\">\n              <Label htmlFor=\"oldPassword\">{t(\"currentPassword\")}</Label>\n              <Input\n                id=\"oldPassword\"\n                type=\"password\"\n                value={oldPassword}\n                onChange={(e) => setOldPassword(e.target.value)}\n                required\n                autoFocus\n              />\n            </div>\n            <div className=\"grid gap-2\">\n              <Label htmlFor=\"newPassword\">{t(\"newPassword\")}</Label>\n              <Input\n                id=\"newPassword\"\n                type=\"password\"\n                value={newPassword}\n                onChange={(e) => setNewPassword(e.target.value)}\n                required\n              />\n            </div>\n            <div className=\"grid gap-2\">\n              <Label htmlFor=\"confirmPassword\">{t(\"confirmPassword\")}</Label>\n              <Input\n                id=\"confirmPassword\"\n                type=\"password\"\n                value={confirmPassword}\n                onChange={(e) => setConfirmPassword(e.target.value)}\n                required\n              />\n            </div>\n            {error && (\n              <p className=\"text-sm text-destructive\">{error}</p>\n            )}\n          </div>\n          <DialogFooter>\n            <Button type=\"button\" variant=\"outline\" onClick={() => onOpenChange(false)}>\n              {t(\"cancel\")}\n            </Button>\n            <Button type=\"submit\" disabled={isPending}>\n              {isPending ? t(\"saving\") : t(\"save\")}\n            </Button>\n          </DialogFooter>\n        </form>\n      </DialogContent>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "frontend/components/auth/index.ts",
    "content": "export { AuthGuard } from \"./auth-guard\"\nexport { AuthLayout } from \"./auth-layout\"\nexport { ChangePasswordDialog } from \"./change-password-dialog\"\n"
  },
  {
    "path": "frontend/components/color-theme-switcher.tsx",
    "content": "\"use client\"\n\nimport { useColorTheme, COLOR_THEMES, ColorThemeId } from \"@/hooks/use-color-theme\"\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\"\nimport { Button } from \"@/components/ui/button\"\nimport { IconPalette, IconCheck } from \"@tabler/icons-react\"\nimport { useTranslations } from \"next-intl\"\n\n/**\n * Color theme switcher\n */\nexport function ColorThemeSwitcher() {\n  const { theme, setTheme, mounted } = useColorTheme()\n  const t = useTranslations(\"common.theme\")\n\n  if (!mounted) {\n    return (\n      <Button variant=\"ghost\" size=\"icon\" className=\"h-8 w-8\">\n        <IconPalette className=\"h-4 w-4\" />\n      </Button>\n    )\n  }\n\n  return (\n    <DropdownMenu>\n      <DropdownMenuTrigger asChild>\n        <Button variant=\"ghost\" size=\"icon\" className=\"h-8 w-8\">\n          <IconPalette className=\"h-4 w-4\" />\n          <span className=\"sr-only\">{t(\"switchColor\")}</span>\n        </Button>\n      </DropdownMenuTrigger>\n      <DropdownMenuContent align=\"end\">\n        {COLOR_THEMES.map((t) => (\n          <DropdownMenuItem\n            key={t.id}\n            onClick={() => {\n              console.log('Switching theme to:', t.id)\n              setTheme(t.id as ColorThemeId)\n            }}\n            className=\"flex items-center gap-2\"\n          >\n            {/* Color preview blocks */}\n            <div className=\"flex items-center gap-1\">\n              {t.colors.map((c, i) => (\n                <span\n                  key={i}\n                  className=\"h-4 w-4 rounded border border-black/10 dark:border-white/20\"\n                  style={{ backgroundColor: c }}\n                />\n              ))}\n            </div>\n            <span>{t.name}</span>\n            {theme === t.id && <IconCheck className=\"ml-auto h-4 w-4\" />}\n          </DropdownMenuItem>\n        ))}\n      </DropdownMenuContent>\n    </DropdownMenu>\n  )\n}\n"
  },
  {
    "path": "frontend/components/common/bulk-add-urls-dialog.tsx",
    "content": "\"use client\"\n\nimport React, { useState, useRef } from \"react\"\nimport { Plus, Link } from \"lucide-react\"\nimport { useTranslations } from \"next-intl\"\n\nimport { Button } from \"@/components/ui/button\"\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from \"@/components/ui/dialog\"\nimport { Label } from \"@/components/ui/label\"\nimport { Textarea } from \"@/components/ui/textarea\"\nimport { LoadingSpinner } from \"@/components/loading-spinner\"\nimport { URLValidator, type TargetType } from \"@/lib/url-validator\"\nimport { useBulkCreateEndpoints } from \"@/hooks/use-endpoints\"\nimport { useBulkCreateWebsites } from \"@/hooks/use-websites\"\nimport { useBulkCreateDirectories } from \"@/hooks/use-directories\"\n\nexport type AssetType = 'endpoint' | 'website' | 'directory'\n\ninterface BulkAddUrlsDialogProps {\n  targetId: number\n  assetType: AssetType\n  targetName?: string      // Target name (used for URL matching validation)\n  targetType?: TargetType  // Target type (domain/ip/cidr)\n  open?: boolean\n  onOpenChange?: (open: boolean) => void\n  onSuccess?: () => void\n}\n\nconst ASSET_TYPE_LABELS: Record<AssetType, { title: string; description: string; placeholder: string }> = {\n  endpoint: {\n    title: 'Bulk Add Endpoints',\n    description: 'Enter endpoint URL list, one per line.',\n    placeholder: `Please enter endpoint URLs, one per line\nExample:\nhttps://example.com/api/v1\nhttps://example.com/api/v2\nhttps://example.com/login`,\n  },\n  website: {\n    title: 'Bulk Add Websites',\n    description: 'Enter website URL list, one per line.',\n    placeholder: `Please enter website URLs, one per line\nExample:\nhttps://example.com\nhttps://www.example.com\nhttps://api.example.com`,\n  },\n  directory: {\n    title: 'Bulk Add Directories',\n    description: 'Enter directory URL list, one per line.',\n    placeholder: `Please enter directory URLs, one per line\nExample:\nhttps://example.com/admin\nhttps://example.com/api\nhttps://example.com/uploads`,\n  },\n}\n\n/**\n * Bulk add URLs dialog component\n * \n * Supports three asset types: Endpoints, Websites, Directories.\n * Provides text input with line numbers, supports real-time validation and error hints.\n */\nexport function BulkAddUrlsDialog({\n  targetId,\n  assetType,\n  targetName,\n  targetType,\n  open: externalOpen,\n  onOpenChange: externalOnOpenChange,\n  onSuccess,\n}: BulkAddUrlsDialogProps) {\n  const tBulkAdd = useTranslations(\"bulkAdd.common\")\n  \n  // Dialog open/close state\n  const [internalOpen, setInternalOpen] = useState(false)\n  const open = externalOpen !== undefined ? externalOpen : internalOpen\n  const setOpen = externalOnOpenChange || setInternalOpen\n\n  // Form data state\n  const [inputText, setInputText] = useState(\"\")\n\n  // Validation result state\n  const [validationResult, setValidationResult] = useState<{\n    validCount: number\n    invalidCount: number\n    duplicateCount: number\n    mismatchedCount: number\n    firstError?: { index: number; url: string; error: string }\n    firstMismatch?: { index: number; url: string }\n  } | null>(null)\n\n  // Line number column and textarea refs (for synchronized scrolling)\n  const lineNumbersRef = useRef<HTMLDivElement | null>(null)\n  const textareaRef = useRef<HTMLTextAreaElement | null>(null)\n\n  // Use bulk create mutations\n  const bulkCreateEndpoints = useBulkCreateEndpoints()\n  const bulkCreateWebsites = useBulkCreateWebsites()\n  const bulkCreateDirectories = useBulkCreateDirectories()\n\n  // Select corresponding mutation based on asset type\n  const getMutation = () => {\n    switch (assetType) {\n      case 'endpoint':\n        return bulkCreateEndpoints\n      case 'website':\n        return bulkCreateWebsites\n      case 'directory':\n        return bulkCreateDirectories\n    }\n  }\n\n  const mutation = getMutation()\n  const labels = ASSET_TYPE_LABELS[assetType]\n\n  // Handle input changes\n  const handleInputChange = (value: string) => {\n    setInputText(value)\n\n    // Parse and validate\n    const parsed = URLValidator.parse(value)\n    if (parsed.length === 0) {\n      setValidationResult(null)\n      return\n    }\n\n    const result = URLValidator.validateBatch(parsed, targetName, targetType)\n    setValidationResult({\n      validCount: result.validCount,\n      invalidCount: result.invalidCount,\n      duplicateCount: result.duplicateCount,\n      mismatchedCount: result.mismatchedCount,\n      firstError: result.invalidItems[0]\n        ? {\n            index: result.invalidItems[0].index,\n            url: result.invalidItems[0].url,\n            error: result.invalidItems[0].error || tBulkAdd(\"formatInvalid\"),\n          }\n        : undefined,\n      firstMismatch: result.mismatchedItems[0]\n        ? {\n            index: result.mismatchedItems[0].index,\n            url: result.mismatchedItems[0].url,\n          }\n        : undefined,\n    })\n  }\n\n  // Handle form submission\n  const handleSubmit = async (e: React.FormEvent) => {\n    e.preventDefault()\n\n    if (!inputText.trim()) return\n    if (!validationResult || validationResult.validCount === 0) return\n\n    // Parse valid URLs\n    const parsed = URLValidator.parse(inputText)\n    const result = URLValidator.validateBatch(parsed)\n\n    mutation.mutate(\n      { targetId, urls: result.urls },\n      {\n        onSuccess: () => {\n          // Reset form\n          setInputText(\"\")\n          setValidationResult(null)\n          // Close dialog\n          setOpen(false)\n          // Call external callback\n          onSuccess?.()\n        },\n      }\n    )\n  }\n\n  // Handle dialog close\n  const handleOpenChange = (newOpen: boolean) => {\n    if (!mutation.isPending) {\n      setOpen(newOpen)\n      if (!newOpen) {\n        setInputText(\"\")\n        setValidationResult(null)\n      }\n    }\n  }\n\n  // Synchronized scrolling\n  const handleTextareaScroll = (e: React.UIEvent<HTMLTextAreaElement>) => {\n    if (lineNumbersRef.current) {\n      lineNumbersRef.current.scrollTop = e.currentTarget.scrollTop\n    }\n  }\n\n  // Calculate line count\n  const lineCount = Math.max(inputText.split(\"\\n\").length, 8)\n\n  // Form validation: valid count > 0, invalid count = 0, mismatch count = 0 (except CIDR type)\n  const hasMismatchError = validationResult !== null && \n    validationResult.mismatchedCount > 0 && \n    targetType !== 'cidr'  // CIDR type cannot be validated on frontend, don't block submission\n  \n  const isFormValid =\n    inputText.trim().length > 0 &&\n    validationResult !== null &&\n    validationResult.validCount > 0 &&\n    validationResult.invalidCount === 0 &&\n    !hasMismatchError\n\n  return (\n    <Dialog open={open} onOpenChange={handleOpenChange}>\n      {externalOpen === undefined && (\n        <DialogTrigger asChild>\n          <Button size=\"sm\" variant=\"outline\">\n            <Plus className=\"h-4 w-4\" />\n            Bulk Add\n          </Button>\n        </DialogTrigger>\n      )}\n\n      <DialogContent className=\"sm:max-w-[650px] max-h-[90vh] overflow-y-auto\">\n        <DialogHeader>\n          <DialogTitle className=\"flex items-center space-x-2\">\n            <Link className=\"h-5 w-5\" />\n            <span>{labels.title}</span>\n          </DialogTitle>\n          <DialogDescription>\n            {labels.description}\n          </DialogDescription>\n        </DialogHeader>\n\n        <form onSubmit={handleSubmit}>\n          <div className=\"grid gap-4 py-4\">\n            <div className=\"grid gap-2\">\n              <Label htmlFor=\"urls\">\n                URL List <span className=\"text-destructive\">*</span>\n              </Label>\n              <div className=\"flex border rounded-md overflow-hidden h-[220px]\">\n                {/* Line number column */}\n                <div className=\"flex-shrink-0 w-12 border-r bg-muted/50\">\n                  <div\n                    ref={lineNumbersRef}\n                    className=\"py-3 px-2 text-right font-mono text-xs text-muted-foreground leading-[1.4] h-full overflow-y-auto scrollbar-hide\"\n                  >\n                    {Array.from({ length: lineCount }, (_, i) => (\n                      <div key={i + 1} className=\"h-[20px]\">\n                        {i + 1}\n                      </div>\n                    ))}\n                  </div>\n                </div>\n                {/* Input box */}\n                <div className=\"flex-1 overflow-hidden\">\n                  <Textarea\n                    ref={textareaRef}\n                    id=\"urls\"\n                    value={inputText}\n                    onChange={(e) => handleInputChange(e.target.value)}\n                    onScroll={handleTextareaScroll}\n                    placeholder={labels.placeholder}\n                    disabled={mutation.isPending}\n                    className=\"font-mono h-full overflow-y-auto resize-none border-0 focus-visible:ring-0 focus-visible:ring-offset-0 leading-[1.4] text-sm py-3\"\n                    style={{ lineHeight: \"20px\" }}\n                  />\n                </div>\n              </div>\n\n              {/* Validation summary */}\n              {validationResult && (\n                <div className=\"text-xs space-y-1\">\n                  <div className=\"text-muted-foreground\">\n                    Valid: {validationResult.validCount} items\n                    {validationResult.duplicateCount > 0 && (\n                      <span className=\"text-yellow-600 ml-2\">\n                        Duplicate: {validationResult.duplicateCount} items\n                      </span>\n                    )}\n                    {validationResult.invalidCount > 0 && (\n                      <span className=\"text-destructive ml-2\">\n                        Invalid: {validationResult.invalidCount} items\n                      </span>\n                    )}\n                    {validationResult.mismatchedCount > 0 && (\n                      <span className=\"text-destructive ml-2\">\n                        Mismatched: {validationResult.mismatchedCount} items\n                      </span>\n                    )}\n                  </div>\n                  {validationResult.firstError && (\n                    <div className=\"text-destructive\">\n                      Line {validationResult.firstError.index + 1}: &quot;\n                      {validationResult.firstError.url.length > 50 \n                        ? validationResult.firstError.url.substring(0, 50) + '...'\n                        : validationResult.firstError.url}&quot; -{\" \"}\n                      {validationResult.firstError.error}\n                    </div>\n                  )}\n                  {validationResult.firstMismatch && !validationResult.firstError && (\n                    <div className=\"text-destructive\">\n                      Line {validationResult.firstMismatch.index + 1}: &quot;\n                      {validationResult.firstMismatch.url.length > 50 \n                        ? validationResult.firstMismatch.url.substring(0, 50) + '...'\n                        : validationResult.firstMismatch.url}&quot; - \n                      URL does not belong to target {targetName}, please remove before submitting\n                    </div>\n                  )}\n                </div>\n              )}\n            </div>\n          </div>\n\n          <DialogFooter>\n            <Button\n              type=\"button\"\n              variant=\"outline\"\n              onClick={() => handleOpenChange(false)}\n              disabled={mutation.isPending}\n            >\n              Cancel\n            </Button>\n            <Button\n              type=\"submit\"\n              disabled={mutation.isPending || !isFormValid}\n            >\n              {mutation.isPending ? (\n                <>\n                  <LoadingSpinner />\n                  Creating...\n                </>\n              ) : (\n                <>\n                  <Plus className=\"h-4 w-4\" />\n                  Bulk Add\n                </>\n              )}\n            </Button>\n          </DialogFooter>\n        </form>\n      </DialogContent>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "frontend/components/common/smart-filter-input.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { IconSearch } from \"@tabler/icons-react\"\nimport { useTranslations } from \"next-intl\"\nimport {\n  Command,\n  CommandEmpty,\n  CommandGroup,\n  CommandItem,\n  CommandList,\n} from \"@/components/ui/command\"\nimport {\n  Popover,\n  PopoverContent,\n  PopoverAnchor,\n} from \"@/components/ui/popover\"\nimport { Button } from \"@/components/ui/button\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Input } from \"@/components/ui/input\"\n\n// Available filter field definitions\nexport interface FilterField {\n  key: string\n  label: string\n  description: string\n}\n\n// Predefined field configurations, pages can choose to use\nexport const PREDEFINED_FIELDS: Record<string, FilterField> = {\n  ip: { key: \"ip\", label: \"IP\", description: \"IP address\" },\n  port: { key: \"port\", label: \"Port\", description: \"Port number\" },\n  host: { key: \"host\", label: \"Host\", description: \"Hostname\" },\n  domain: { key: \"domain\", label: \"Domain\", description: \"Domain name\" },\n  url: { key: \"url\", label: \"URL\", description: \"Full URL\" },\n  status: { key: \"status\", label: \"Status\", description: \"HTTP status code\" },\n  title: { key: \"title\", label: \"Title\", description: \"Page title\" },\n  source: { key: \"source\", label: \"Source\", description: \"Data source\" },\n  path: { key: \"path\", label: \"Path\", description: \"URL path\" },\n  severity: { key: \"severity\", label: \"Severity\", description: \"Vulnerability severity\" },\n  name: { key: \"name\", label: \"Name\", description: \"Name\" },\n  type: { key: \"type\", label: \"Type\", description: \"Type\" },\n}\n\n// Get translated predefined fields\nexport function getTranslatedFields(t: (key: string) => string): Record<string, FilterField> {\n  return {\n    ip: { key: \"ip\", label: \"IP\", description: t(\"fields.ip\") },\n    port: { key: \"port\", label: \"Port\", description: t(\"fields.port\") },\n    host: { key: \"host\", label: \"Host\", description: t(\"fields.host\") },\n    domain: { key: \"domain\", label: \"Domain\", description: t(\"fields.domain\") },\n    url: { key: \"url\", label: \"URL\", description: t(\"fields.url\") },\n    status: { key: \"status\", label: \"Status\", description: t(\"fields.status\") },\n    title: { key: \"title\", label: \"Title\", description: t(\"fields.title\") },\n    source: { key: \"source\", label: \"Source\", description: t(\"fields.source\") },\n    path: { key: \"path\", label: \"Path\", description: t(\"fields.path\") },\n    severity: { key: \"severity\", label: \"Severity\", description: t(\"fields.severity\") },\n    name: { key: \"name\", label: \"Name\", description: t(\"fields.name\") },\n    type: { key: \"type\", label: \"Type\", description: t(\"fields.type\") },\n  }\n}\n\n// Default fields (IP Addresses page)\nconst DEFAULT_FIELDS: FilterField[] = [\n  PREDEFINED_FIELDS.ip,\n  PREDEFINED_FIELDS.port,\n  PREDEFINED_FIELDS.host,\n]\n\n// History storage key\nconst FILTER_HISTORY_KEY = 'smart_filter_history'\nconst MAX_HISTORY_PER_FIELD = 10\n\n// Get history values for a field\nfunction getFieldHistory(field: string): string[] {\n  if (typeof window === 'undefined') return []\n  try {\n    const history = JSON.parse(localStorage.getItem(FILTER_HISTORY_KEY) || '{}')\n    return history[field] || []\n  } catch {\n    return []\n  }\n}\n\n// Save a value to field history\nfunction saveFieldHistory(field: string, value: string) {\n  if (typeof window === 'undefined' || !value.trim()) return\n  try {\n    const history = JSON.parse(localStorage.getItem(FILTER_HISTORY_KEY) || '{}')\n    const fieldHistory = (history[field] || []).filter((v: string) => v !== value)\n    fieldHistory.unshift(value)\n    history[field] = fieldHistory.slice(0, MAX_HISTORY_PER_FIELD)\n    localStorage.setItem(FILTER_HISTORY_KEY, JSON.stringify(history))\n  } catch {\n    // ignore\n  }\n}\n\n// Extract field-value pairs from query and save to history\nfunction saveQueryHistory(query: string) {\n  const regex = /(\\w+)(==|!=|=)\"([^\"]+)\"/g\n  let match\n  while ((match = regex.exec(query)) !== null) {\n    const [, field, , value] = match\n    saveFieldHistory(field, value)\n  }\n}\n\n// Parse filter expression (FOFA style)\ninterface ParsedFilter {\n  field: string\n  operator: string\n  value: string\n  raw: string\n}\n\nfunction parseFilterExpression(input: string): ParsedFilter[] {\n  const filters: ParsedFilter[] = []\n  // Match FOFA style: field=\"value\", field==\"value\", field!=\"value\"\n  // == exact match, = fuzzy match, != not equals\n  // Support comma-separated multiple values: port=\"80,443,8080\"\n  const regex = /(\\w+)(==|!=|=)\"([^\"]+)\"/g\n  let match\n\n  while ((match = regex.exec(input)) !== null) {\n    const [raw, field, operator, value] = match\n    filters.push({ field, operator, value, raw })\n  }\n\n  return filters\n}\n\ninterface SmartFilterInputProps {\n  /** Available filter fields, uses default fields if not provided */\n  fields?: FilterField[]\n  /** Combination examples (complete examples using logical operators) */\n  examples?: string[]\n  placeholder?: string\n  /** Controlled mode: current filter value */\n  value?: string\n  onSearch?: (filters: ParsedFilter[], rawQuery: string) => void\n  className?: string\n}\n\nexport function SmartFilterInput({\n  fields = DEFAULT_FIELDS,\n  examples,\n  placeholder,\n  value,\n  onSearch,\n  className,\n}: SmartFilterInputProps) {\n  const t = useTranslations(\"filter\")\n  const [open, setOpen] = React.useState(false)\n  const [inputValue, setInputValue] = React.useState(value ?? \"\")\n  const inputRef = React.useRef<HTMLInputElement>(null)\n  const ghostRef = React.useRef<HTMLSpanElement>(null)\n  const listRef = React.useRef<HTMLDivElement>(null)\n  const savedScrollTop = React.useRef<number | null>(null)\n  const hasInitialized = React.useRef(false)\n\n  // Calculate ghost text suggestion\n  const ghostText = React.useMemo(() => {\n    if (!inputValue) return \"\"\n    \n    // Get the last word/token being typed\n    const lastSpaceIndex = inputValue.lastIndexOf(' ')\n    const currentToken = lastSpaceIndex === -1 ? inputValue : inputValue.slice(lastSpaceIndex + 1)\n    const lowerToken = currentToken.toLowerCase()\n    \n    // If empty token after space, check if previous expression is complete\n    if (!currentToken && inputValue.trim()) {\n      // Check if last expression is complete (ends with \")\n      if (inputValue.trimEnd().endsWith('\"')) {\n        return '&& '\n      }\n      return \"\"\n    }\n    \n    if (!currentToken) return \"\"\n    \n    // Priority 1: Field name completion (no = in token)\n    if (!currentToken.includes('=') && !currentToken.includes('!')) {\n      // Find matching field first\n      const matchingField = fields.find(f => \n        f.key.toLowerCase().startsWith(lowerToken) && \n        f.key.toLowerCase() !== lowerToken\n      )\n      if (matchingField) {\n        return matchingField.key.slice(currentToken.length) + '=\"'\n      }\n      \n      // If exact match of field name, suggest =\" \n      const exactField = fields.find(f => f.key.toLowerCase() === lowerToken)\n      if (exactField) {\n        return '=\"'\n      }\n      \n      // Priority 2: Logical operators (only if no field matches)\n      if ('&&'.startsWith(currentToken) && currentToken.startsWith('&')) {\n        return '&&'.slice(currentToken.length) + ' '\n      }\n      if ('||'.startsWith(currentToken) && currentToken.startsWith('|')) {\n        return '||'.slice(currentToken.length) + ' '\n      }\n      // 'and' / 'or' only if no field name starts with these\n      if (!matchingField) {\n        if ('and'.startsWith(lowerToken) && lowerToken.length > 0 && !fields.some(f => f.key.toLowerCase().startsWith(lowerToken))) {\n          return 'and'.slice(lowerToken.length) + ' '\n        }\n        if ('or'.startsWith(lowerToken) && lowerToken.length > 0 && !fields.some(f => f.key.toLowerCase().startsWith(lowerToken))) {\n          return 'or'.slice(lowerToken.length) + ' '\n        }\n      }\n      \n      return \"\"\n    }\n    \n    // Check if typing ! for != operator\n    if (currentToken.match(/^(\\w+)!$/)) {\n      return '=\"'\n    }\n    \n    // Check if typing = and might want == \n    const singleEqMatch = currentToken.match(/^(\\w+)=$/)\n    if (singleEqMatch) {\n      // Suggest \" for fuzzy match (most common)\n      return '\"'\n    }\n    \n    // Check if typed == or != (no opening quote yet)\n    const doubleOpMatch = currentToken.match(/^(\\w+)(==|!=)$/)\n    if (doubleOpMatch) {\n      return '\"'\n    }\n    \n    // Check if typing a value (has = and opening quote)\n    const eqMatch = currentToken.match(/^(\\w+)(==|!=|=)\"([^\"]*)$/)\n    if (eqMatch) {\n      const [, field, , partialValue] = eqMatch\n      // Get history for this field\n      const history = getFieldHistory(field)\n      // Find matching history value\n      const matchingValue = history.find(v => \n        v.toLowerCase().startsWith(partialValue.toLowerCase()) &&\n        v.toLowerCase() !== partialValue.toLowerCase()\n      )\n      if (matchingValue) {\n        return matchingValue.slice(partialValue.length) + '\"'\n      }\n      // If value has content but no closing quote, suggest closing quote\n      if (partialValue.length > 0) {\n        return '\"'\n      }\n    }\n    \n    // Check if a complete expression just finished (ends with \")\n    if (currentToken.match(/^\\w+(==|!=|=)\"[^\"]+\"$/)) {\n      return ' && '\n    }\n    \n    return \"\"\n  }, [inputValue, fields])\n\n  // Synchronize external value changes\n  React.useEffect(() => {\n    if (value !== undefined) {\n      setInputValue(value)\n    }\n  }, [value])\n\n  // When Popover opens, restore scroll position (scroll to top on first open)\n  React.useEffect(() => {\n    if (open) {\n      const restoreScroll = () => {\n        if (listRef.current) {\n          if (!hasInitialized.current) {\n            // First open, scroll to top\n            listRef.current.scrollTop = 0\n            hasInitialized.current = true\n          } else if (savedScrollTop.current !== null) {\n            // Later restore saved scroll position\n            listRef.current.scrollTop = savedScrollTop.current\n          }\n        }\n      }\n      // Execute immediately\n      restoreScroll()\n      // Delayed execution to ensure Popover animation completes\n      const timer = setTimeout(restoreScroll, 50)\n      return () => clearTimeout(timer)\n    } else {\n      // Save scroll position when Popover closes\n      if (listRef.current) {\n        savedScrollTop.current = listRef.current.scrollTop\n      }\n    }\n  }, [open])\n\n  // Generate default placeholder (use first example or field combination)\n  const defaultPlaceholder = React.useMemo(() => {\n    if (examples && examples.length > 0) {\n      return examples[0]\n    }\n    // Use fields to generate simple example\n    return fields.slice(0, 2).map(f => `${f.key}=\"...\"`).join(\" && \")\n  }, [fields, examples])\n\n  // Parse current input\n  const parsedFilters = parseFilterExpression(inputValue)\n\n  // Get current word being typed\n  const getCurrentWord = () => {\n    const words = inputValue.split(/\\s+/)\n    return words[words.length - 1] || \"\"\n  }\n\n  const currentWord = getCurrentWord()\n\n  // Determine whether to show field suggestions (FOFA style uses = instead of :)\n  const showFieldSuggestions = !currentWord.includes(\"=\")\n\n  // Handle selecting suggestion (FOFA style: field=\"\"), then close popover\n  const handleSelectSuggestion = (suggestion: string) => {\n    const words = inputValue.split(/\\s+/)\n    words[words.length - 1] = suggestion\n    const newValue = words.join(\" \")\n    setInputValue(newValue)\n    setOpen(false)\n    inputRef.current?.blur()\n  }\n\n  // Handle search\n  const handleSearch = () => {\n    // Save query values to history\n    saveQueryHistory(inputValue)\n    onSearch?.(parsedFilters, inputValue)\n    setOpen(false)\n  }\n\n  // Accept ghost text suggestion\n  const acceptGhostText = () => {\n    if (ghostText) {\n      setInputValue(inputValue + ghostText)\n      return true\n    }\n    return false\n  }\n\n  // Handle keyboard events\n  const handleKeyDown = (e: React.KeyboardEvent) => {\n    if (e.key === \"Tab\" && ghostText) {\n      e.preventDefault()\n      acceptGhostText()\n    }\n    if (e.key === \"Enter\" && !e.shiftKey) {\n      e.preventDefault()\n      handleSearch()\n    }\n    if (e.key === \"Escape\") {\n      setOpen(false)\n    }\n    // Right arrow at end of input accepts ghost text\n    if (e.key === \"ArrowRight\" && ghostText) {\n      const input = inputRef.current\n      if (input && input.selectionStart === input.value.length) {\n        e.preventDefault()\n        acceptGhostText()\n      }\n    }\n  }\n\n  // Append example to input box (not overwrite), then close popover\n  const handleAppendExample = (example: string) => {\n    const trimmed = inputValue.trim()\n    const newValue = trimmed ? `${trimmed} ${example}` : example\n    setInputValue(newValue)\n    setOpen(false)\n    inputRef.current?.blur()\n  }\n\n  return (\n    <div className={className}>\n      <div className=\"flex items-center gap-2\">\n        <Popover open={open} onOpenChange={setOpen} modal={false}>\n          <PopoverAnchor asChild>\n            <div className=\"relative flex-1\">\n              <Input\n                ref={inputRef}\n                type=\"text\"\n                value={inputValue}\n                onChange={(e) => {\n                  setInputValue(e.target.value)\n                  if (!open) setOpen(true)\n                }}\n                onFocus={() => setOpen(true)}\n                onBlur={(e) => {\n                  // If focus moves to inside Popover or input itself, don't close\n                  const relatedTarget = e.relatedTarget as HTMLElement | null\n                  if (relatedTarget?.closest('[data-radix-popper-content-wrapper]')) {\n                    return\n                  }\n                  // Delay close to let CommandItem's onSelect execute first\n                  setTimeout(() => setOpen(false), 150)\n                }}\n                onKeyDown={handleKeyDown}\n                placeholder={placeholder || defaultPlaceholder}\n                className=\"h-8 w-full font-mono text-sm\"\n              />\n              {/* Ghost text overlay */}\n              {ghostText && (\n                <div \n                  className=\"absolute inset-0 flex items-center pointer-events-none overflow-hidden px-3\"\n                  aria-hidden=\"true\"\n                >\n                  <span className=\"font-mono text-sm\">\n                    <span className=\"invisible\">{inputValue}</span>\n                    <span ref={ghostRef} className=\"text-muted-foreground/40\">{ghostText}</span>\n                  </span>\n                </div>\n              )}\n            </div>\n          </PopoverAnchor>\n        <PopoverContent\n          className=\"w-[var(--radix-popover-trigger-width)] p-0\"\n          align=\"start\"\n          side=\"bottom\"\n          sideOffset={4}\n          collisionPadding={16}\n          onOpenAutoFocus={(e) => e.preventDefault()}\n          onCloseAutoFocus={(e) => e.preventDefault()}\n          onPointerDownOutside={(e) => {\n            // If clicking on input box, don't close popover\n            if (inputRef.current?.contains(e.target as Node)) {\n              e.preventDefault()\n            }\n          }}\n        >\n          <Command>\n            <CommandList ref={listRef}>\n              {/* Preview of parsed filter conditions */}\n              {parsedFilters.length > 0 && (\n                <CommandGroup heading={t(\"groups.activeFilters\")}>\n                  <div className=\"flex flex-wrap gap-1 px-2 py-1\">\n                    {parsedFilters.map((filter, i) => (\n                      <Badge key={i} variant=\"secondary\" className=\"text-xs font-mono\">\n                        {filter.raw}\n                      </Badge>\n                    ))}\n                  </div>\n                </CommandGroup>\n              )}\n\n              {/* Available fields */}\n              {showFieldSuggestions && (\n                <CommandGroup heading={t(\"groups.availableFields\")}>\n                  <div className=\"flex flex-wrap gap-1 px-2 py-1\">\n                    {fields.filter(\n                      (f) => !currentWord || f.key.startsWith(currentWord.toLowerCase())\n                    ).map((field) => (\n                      <Badge \n                        key={field.key} \n                        variant=\"outline\" \n                        className=\"text-xs font-mono cursor-pointer hover:bg-accent\"\n                        onClick={() => handleSelectSuggestion(`${field.key}=\"`)}\n                      >\n                        {field.key}\n                      </Badge>\n                    ))}\n                  </div>\n                </CommandGroup>\n              )}\n\n              {/* Syntax help */}\n              <CommandGroup heading={t(\"groups.syntax\")}>\n                <div className=\"px-2 py-1.5 text-xs text-muted-foreground space-y-2\">\n                  {/* Match operators */}\n                  <div className=\"space-y-1\">\n                    <div className=\"font-medium text-foreground/80\">{t(\"syntax.operators\")}</div>\n                    <div className=\"grid grid-cols-[auto_1fr] gap-x-3 gap-y-0.5\">\n                      <code className=\"bg-muted px-1 rounded\">=</code>\n                      <span>{t(\"syntax.containsFuzzy\")}</span>\n                      <code className=\"bg-muted px-1 rounded\">==</code>\n                      <span>{t(\"syntax.exactMatch\")}</span>\n                      <code className=\"bg-muted px-1 rounded\">!=</code>\n                      <span>{t(\"syntax.notEquals\")}</span>\n                    </div>\n                  </div>\n                  {/* Logical operators */}\n                  <div className=\"space-y-1 pt-1 border-t border-muted\">\n                    <div className=\"font-medium text-foreground/80\">{t(\"syntax.logic\")}</div>\n                    <div className=\"grid grid-cols-[auto_1fr] gap-x-3 gap-y-0.5\">\n                      <span><code className=\"bg-muted px-1 rounded\">||</code> <code className=\"bg-muted px-1 rounded\">or</code></span>\n                      <span>{t(\"syntax.matchAny\")}</span>\n                      <span><code className=\"bg-muted px-1 rounded\">&&</code> <code className=\"bg-muted px-1 rounded\">and</code> <code className=\"bg-muted px-1 rounded\">space</code></span>\n                      <span>{t(\"syntax.matchAll\")}</span>\n                    </div>\n                  </div>\n                </div>\n              </CommandGroup>\n\n              {/* Examples */}\n              {examples && examples.length > 0 && (\n                <CommandGroup heading={t(\"groups.examples\")}>\n                  {examples.map((example, i) => (\n                    <CommandItem\n                      key={i}\n                      value={example}\n                      onSelect={() => handleAppendExample(example)}\n                    >\n                      <code className=\"text-xs\">{example}</code>\n                    </CommandItem>\n                  ))}\n                </CommandGroup>\n              )}\n\n              <CommandEmpty>{t(\"empty\")}</CommandEmpty>\n            </CommandList>\n          </Command>\n        </PopoverContent>\n      </Popover>\n        <Button variant=\"outline\" size=\"sm\" onClick={handleSearch}>\n          <IconSearch className=\"h-4 w-4\" />\n        </Button>\n      </div>\n    </div>\n  )\n}\n\nexport { parseFilterExpression, DEFAULT_FIELDS, type ParsedFilter }\n"
  },
  {
    "path": "frontend/components/dashboard/asset-distribution-chart.tsx",
    "content": "\"use client\"\n\nimport { useMemo } from \"react\"\nimport { Bar, BarChart, Cell, LabelList, XAxis, YAxis } from \"recharts\"\nimport { useAssetStatistics } from \"@/hooks/use-dashboard\"\nimport {\n  Card,\n  CardContent,\n  CardDescription,\n  CardHeader,\n  CardTitle,\n} from \"@/components/ui/card\"\nimport {\n  ChartConfig,\n  ChartContainer,\n  ChartTooltip,\n  ChartTooltipContent,\n} from \"@/components/ui/chart\"\nimport { Skeleton } from \"@/components/ui/skeleton\"\nimport { useTranslations } from \"next-intl\"\n\n// Use CSS variables, follow theme changes\nconst COLORS = {\n  subdomain: \"var(--chart-1)\",\n  ip: \"var(--chart-2)\",\n  endpoint: \"var(--chart-3)\",\n  website: \"var(--chart-4)\",\n}\n\nexport function AssetDistributionChart() {\n  const { data, isLoading } = useAssetStatistics()\n  const t = useTranslations(\"dashboard.assetDistribution\")\n\n  const chartConfig = useMemo(() => ({\n    count: {\n      label: t(\"count\"),\n    },\n    subdomain: {\n      label: t(\"subdomains\"),\n      color: COLORS.subdomain,\n    },\n    ip: {\n      label: t(\"ipAddresses\"),\n      color: COLORS.ip,\n    },\n    endpoint: {\n      label: t(\"endpoints\"),\n      color: COLORS.endpoint,\n    },\n    website: {\n      label: t(\"websites\"),\n      color: COLORS.website,\n    },\n  } satisfies ChartConfig), [t])\n\n  const chartData = useMemo(() => [\n    { name: t(\"subdomains\"), count: data?.totalSubdomains ?? 0, fill: COLORS.subdomain },\n    { name: t(\"ipAddresses\"), count: data?.totalIps ?? 0, fill: COLORS.ip },\n    { name: t(\"endpoints\"), count: data?.totalEndpoints ?? 0, fill: COLORS.endpoint },\n    { name: t(\"websites\"), count: data?.totalWebsites ?? 0, fill: COLORS.website },\n  ], [data, t])\n\n  const total = chartData.reduce((sum, item) => sum + item.count, 0)\n\n  return (\n    <Card>\n      <CardHeader>\n        <CardTitle>{t(\"title\")}</CardTitle>\n        <CardDescription>{t(\"description\")}</CardDescription>\n      </CardHeader>\n      <CardContent>\n        {isLoading ? (\n          <div className=\"space-y-4\">\n            <Skeleton className=\"h-8 w-full\" />\n            <Skeleton className=\"h-8 w-4/5\" />\n            <Skeleton className=\"h-8 w-3/5\" />\n            <Skeleton className=\"h-8 w-2/5\" />\n          </div>\n        ) : (\n          <>\n          <ChartContainer config={chartConfig} className=\"aspect-auto h-[160px] w-full\">\n            <BarChart\n              accessibilityLayer\n              data={chartData}\n              layout=\"vertical\"\n              margin={{ left: 0, right: 30 }}\n            >\n              <YAxis\n                dataKey=\"name\"\n                type=\"category\"\n                tickLine={false}\n                tickMargin={10}\n                axisLine={false}\n                width={50}\n              />\n              <XAxis dataKey=\"count\" type=\"number\" hide />\n              <ChartTooltip\n                cursor={false}\n                content={<ChartTooltipContent hideLabel />}\n              />\n              <Bar\n                dataKey=\"count\"\n                layout=\"vertical\"\n                radius={4}\n              >\n                {chartData.map((entry, index) => (\n                  <Cell key={`cell-${index}`} fill={entry.fill} />\n                ))}\n                <LabelList\n                  dataKey=\"count\"\n                  position=\"right\"\n                  offset={8}\n                  className=\"fill-foreground\"\n                  fontSize={12}\n                />\n              </Bar>\n            </BarChart>\n          </ChartContainer>\n          <div className=\"mt-3 pt-3 border-t flex items-center justify-end gap-1.5 text-sm\">\n            <span className=\"text-muted-foreground\">{t(\"totalAssets\")}:</span>\n            <span className=\"font-semibold\">{total}</span>\n          </div>\n          </>\n        )}\n      </CardContent>\n    </Card>\n  )\n}\n"
  },
  {
    "path": "frontend/components/dashboard/asset-trend-chart.tsx",
    "content": "\"use client\"\n\nimport { useState, useMemo } from \"react\"\nimport { CartesianGrid, Line, LineChart, XAxis, YAxis } from \"recharts\"\nimport { useStatisticsHistory } from \"@/hooks/use-dashboard\"\nimport type { StatisticsHistoryItem } from \"@/types/dashboard.types\"\nimport { useTranslations } from \"next-intl\"\n\n/**\n * Fill missing date data, ensure always returning complete days\n * Based on the earliest record date, fill backwards, missing dates filled with 0\n */\nfunction fillMissingDates(data: StatisticsHistoryItem[] | undefined, days: number): StatisticsHistoryItem[] {\n  if (!data || data.length === 0) return []\n  \n  // Build mapping from date to data\n  const dataMap = new Map(data.map(item => [item.date, item]))\n  \n  // Find the earliest date\n  const earliestDate = new Date(data[0].date)\n  \n  // Generate complete date list (starting from days-1 days before earliest date)\n  const result: StatisticsHistoryItem[] = []\n  const startDate = new Date(earliestDate)\n  startDate.setDate(startDate.getDate() - (days - data.length))\n  \n  for (let i = 0; i < days; i++) {\n    const currentDate = new Date(startDate)\n    currentDate.setDate(startDate.getDate() + i)\n    const dateStr = currentDate.toISOString().split('T')[0]\n    \n    const existing = dataMap.get(dateStr)\n    if (existing) {\n      result.push(existing)\n    } else {\n      // Fill missing dates with 0\n      result.push({\n        date: dateStr,\n        totalTargets: 0,\n        totalSubdomains: 0,\n        totalIps: 0,\n        totalEndpoints: 0,\n        totalWebsites: 0,\n        totalVulns: 0,\n        totalAssets: 0,\n      })\n    }\n  }\n  \n  return result\n}\nimport {\n  Card,\n  CardContent,\n  CardDescription,\n  CardHeader,\n  CardTitle,\n} from \"@/components/ui/card\"\nimport {\n  ChartConfig,\n  ChartContainer,\n} from \"@/components/ui/chart\"\nimport { Skeleton } from \"@/components/ui/skeleton\"\n\n// Data series key type\ntype SeriesKey = 'totalSubdomains' | 'totalIps' | 'totalEndpoints' | 'totalWebsites'\n\n// All series\nconst ALL_SERIES: SeriesKey[] = ['totalSubdomains', 'totalIps', 'totalEndpoints', 'totalWebsites']\n\nexport function AssetTrendChart() {\n  const { data: rawData, isLoading } = useStatisticsHistory(7)\n  const [activeData, setActiveData] = useState<StatisticsHistoryItem | null>(null)\n  const t = useTranslations(\"dashboard.assetTrend\")\n  \n  // Dynamically configure chartConfig using translations\n  const chartConfig = useMemo(() => ({\n    totalSubdomains: {\n      label: t(\"subdomains\"),\n      color: \"#3b82f6\", // Blue\n    },\n    totalIps: {\n      label: t(\"ips\"),\n      color: \"#f97316\", // Orange\n    },\n    totalEndpoints: {\n      label: t(\"endpoints\"),\n      color: \"#eab308\", // Yellow\n    },\n    totalWebsites: {\n      label: t(\"websites\"),\n      color: \"#22c55e\", // Green\n    },\n  } satisfies ChartConfig), [t])\n  \n  // Visible series state (show all by default)\n  const [visibleSeries, setVisibleSeries] = useState<Set<SeriesKey>>(new Set(ALL_SERIES))\n  \n  // Currently hovered line\n  const [hoveredLine, setHoveredLine] = useState<SeriesKey | null>(null)\n  \n  // Toggle series visibility\n  const toggleSeries = (key: SeriesKey) => {\n    setVisibleSeries(prev => {\n      const next = new Set(prev)\n      if (next.has(key)) {\n        // Keep at least one visible\n        if (next.size > 1) {\n          next.delete(key)\n        }\n      } else {\n        next.add(key)\n      }\n      return next\n    })\n  }\n\n  // Fill missing dates, ensure always showing 7 days\n  const data = useMemo(() => fillMissingDates(rawData, 7), [rawData])\n\n  // Format date display\n  const formatDate = (dateStr: string) => {\n    const date = new Date(dateStr)\n    return `${date.getMonth() + 1}/${date.getDate()}`\n  }\n\n  // Format large numbers (1K, 1M etc.)\n  const formatNumber = (value: number) => {\n    if (value >= 1000000) {\n      return `${(value / 1000000).toFixed(1)}M`\n    }\n    if (value >= 1000) {\n      return `${(value / 1000).toFixed(1)}K`\n    }\n    return value.toString()\n  }\n\n  // Get latest data (use latest value from raw data)\n  const latest = rawData && rawData.length > 0 ? rawData[rawData.length - 1] : null\n  \n  // Display data: show hovered data when hovering, otherwise show latest data\n  const displayData = activeData || latest\n\n  return (\n    <Card>\n      <CardHeader>\n        <CardTitle>{t(\"title\")}</CardTitle>\n        <CardDescription>{t(\"description\")}</CardDescription>\n      </CardHeader>\n      <CardContent>\n        {isLoading ? (\n          <div className=\"space-y-4\">\n            <Skeleton className=\"h-[180px] w-full\" />\n          </div>\n        ) : !rawData || rawData.length === 0 ? (\n          <div className=\"flex items-center justify-center h-[180px] text-muted-foreground\">\n            {t(\"noData\")}\n          </div>\n        ) : (\n          <>\n            <ChartContainer config={chartConfig} className=\"aspect-auto h-[160px] w-full\">\n              <LineChart\n                accessibilityLayer\n                data={data}\n                margin={{ left: 0, right: 12, top: 12, bottom: 0 }}\n                onMouseMove={(state) => {\n                  if (state?.activePayload?.[0]?.payload) {\n                    setActiveData(state.activePayload[0].payload)\n                  }\n                }}\n                onMouseLeave={() => setActiveData(null)}\n              >\n                <CartesianGrid vertical={false} strokeDasharray=\"3 3\" />\n                <XAxis\n                  dataKey=\"date\"\n                  tickLine={false}\n                  axisLine={false}\n                  tickMargin={8}\n                  tickFormatter={formatDate}\n                  fontSize={12}\n                />\n                <YAxis\n                  tickLine={false}\n                  axisLine={false}\n                  tickMargin={8}\n                  width={45}\n                  fontSize={12}\n                  tickFormatter={formatNumber}\n                />\n                {visibleSeries.has('totalSubdomains') && (\n                  <Line\n                    dataKey=\"totalSubdomains\"\n                    type=\"monotone\"\n                    stroke=\"var(--color-totalSubdomains)\"\n                    strokeWidth={hoveredLine === 'totalSubdomains' ? 4 : 2}\n                    dot={{ r: 3, fill: \"var(--color-totalSubdomains)\" }}\n                    style={{ cursor: 'pointer', transition: 'stroke-width 0.15s' }}\n                    onClick={() => toggleSeries('totalSubdomains')}\n                    onMouseEnter={() => setHoveredLine('totalSubdomains')}\n                    onMouseLeave={() => setHoveredLine(null)}\n                  />\n                )}\n                {visibleSeries.has('totalIps') && (\n                  <Line\n                    dataKey=\"totalIps\"\n                    type=\"monotone\"\n                    stroke=\"var(--color-totalIps)\"\n                    strokeWidth={hoveredLine === 'totalIps' ? 4 : 2}\n                    dot={{ r: 3, fill: \"var(--color-totalIps)\" }}\n                    style={{ cursor: 'pointer', transition: 'stroke-width 0.15s' }}\n                    onClick={() => toggleSeries('totalIps')}\n                    onMouseEnter={() => setHoveredLine('totalIps')}\n                    onMouseLeave={() => setHoveredLine(null)}\n                  />\n                )}\n                {visibleSeries.has('totalEndpoints') && (\n                  <Line\n                    dataKey=\"totalEndpoints\"\n                    type=\"monotone\"\n                    stroke=\"var(--color-totalEndpoints)\"\n                    strokeWidth={hoveredLine === 'totalEndpoints' ? 4 : 2}\n                    dot={{ r: 3, fill: \"var(--color-totalEndpoints)\" }}\n                    style={{ cursor: 'pointer', transition: 'stroke-width 0.15s' }}\n                    onClick={() => toggleSeries('totalEndpoints')}\n                    onMouseEnter={() => setHoveredLine('totalEndpoints')}\n                    onMouseLeave={() => setHoveredLine(null)}\n                  />\n                )}\n                {visibleSeries.has('totalWebsites') && (\n                  <Line\n                    dataKey=\"totalWebsites\"\n                    type=\"monotone\"\n                    stroke=\"var(--color-totalWebsites)\"\n                    strokeWidth={hoveredLine === 'totalWebsites' ? 4 : 2}\n                    dot={{ r: 3, fill: \"var(--color-totalWebsites)\" }}\n                    style={{ cursor: 'pointer', transition: 'stroke-width 0.15s' }}\n                    onClick={() => toggleSeries('totalWebsites')}\n                    onMouseEnter={() => setHoveredLine('totalWebsites')}\n                    onMouseLeave={() => setHoveredLine(null)}\n                  />\n                )}\n              </LineChart>\n            </ChartContainer>\n            <div className=\"mt-3 pt-3 border-t flex flex-wrap items-center justify-between gap-x-4 gap-y-1.5 text-sm\">\n              <span className=\"text-muted-foreground text-xs\">\n                {activeData ? formatDate(activeData.date) : t(\"current\")}\n              </span>\n              <div className=\"flex items-center gap-3\">\n                <button\n                  type=\"button\"\n                  onClick={() => toggleSeries('totalSubdomains')}\n                  className={`flex items-center gap-1.5 px-2 py-1 rounded-md transition-all hover:bg-muted ${\n                    !visibleSeries.has('totalSubdomains') ? 'opacity-40' : ''\n                  }`}\n                >\n                  <div \n                    className={`h-2.5 w-2.5 rounded-full ${!visibleSeries.has('totalSubdomains') ? 'bg-muted-foreground' : ''}`} \n                    style={{ backgroundColor: visibleSeries.has('totalSubdomains') ? \"#3b82f6\" : undefined }} \n                  />\n                  <span className={`text-muted-foreground ${!visibleSeries.has('totalSubdomains') ? 'line-through' : ''}`}>{t(\"subdomains\")}</span>\n                  <span className=\"font-medium\">{displayData?.totalSubdomains ?? 0}</span>\n                </button>\n                <button\n                  type=\"button\"\n                  onClick={() => toggleSeries('totalIps')}\n                  className={`flex items-center gap-1.5 px-2 py-1 rounded-md transition-all hover:bg-muted ${\n                    !visibleSeries.has('totalIps') ? 'opacity-40' : ''\n                  }`}\n                >\n                  <div \n                    className={`h-2.5 w-2.5 rounded-full ${!visibleSeries.has('totalIps') ? 'bg-muted-foreground' : ''}`} \n                    style={{ backgroundColor: visibleSeries.has('totalIps') ? \"#f97316\" : undefined }} \n                  />\n                  <span className={`text-muted-foreground ${!visibleSeries.has('totalIps') ? 'line-through' : ''}`}>{t(\"ips\")}</span>\n                  <span className=\"font-medium\">{displayData?.totalIps ?? 0}</span>\n                </button>\n                <button\n                  type=\"button\"\n                  onClick={() => toggleSeries('totalEndpoints')}\n                  className={`flex items-center gap-1.5 px-2 py-1 rounded-md transition-all hover:bg-muted ${\n                    !visibleSeries.has('totalEndpoints') ? 'opacity-40' : ''\n                  }`}\n                >\n                  <div \n                    className={`h-2.5 w-2.5 rounded-full ${!visibleSeries.has('totalEndpoints') ? 'bg-muted-foreground' : ''}`} \n                    style={{ backgroundColor: visibleSeries.has('totalEndpoints') ? \"#eab308\" : undefined }} \n                  />\n                  <span className={`text-muted-foreground ${!visibleSeries.has('totalEndpoints') ? 'line-through' : ''}`}>{t(\"endpoints\")}</span>\n                  <span className=\"font-medium\">{displayData?.totalEndpoints ?? 0}</span>\n                </button>\n                <button\n                  type=\"button\"\n                  onClick={() => toggleSeries('totalWebsites')}\n                  className={`flex items-center gap-1.5 px-2 py-1 rounded-md transition-all hover:bg-muted ${\n                    !visibleSeries.has('totalWebsites') ? 'opacity-40' : ''\n                  }`}\n                >\n                  <div \n                    className={`h-2.5 w-2.5 rounded-full ${!visibleSeries.has('totalWebsites') ? 'bg-muted-foreground' : ''}`} \n                    style={{ backgroundColor: visibleSeries.has('totalWebsites') ? \"#22c55e\" : undefined }} \n                  />\n                  <span className={`text-muted-foreground ${!visibleSeries.has('totalWebsites') ? 'line-through' : ''}`}>{t(\"websites\")}</span>\n                  <span className=\"font-medium\">{displayData?.totalWebsites ?? 0}</span>\n                </button>\n              </div>\n            </div>\n          </>\n        )}\n      </CardContent>\n    </Card>\n  )\n}\n"
  },
  {
    "path": "frontend/components/dashboard/dashboard-activity-tabs.tsx",
    "content": "\"use client\"\n\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\"\nimport { VulnerabilitiesDetailView } from \"@/components/vulnerabilities/vulnerabilities-detail-view\"\nimport { ScanHistoryList } from \"@/components/scan/history\"\nimport { IconBug, IconRadar } from \"@tabler/icons-react\"\n\nexport function DashboardActivityTabs() {\n  return (\n    <Tabs defaultValue=\"vulnerabilities\" className=\"w-full\">\n      <TabsList className=\"mb-4\">\n        <TabsTrigger value=\"vulnerabilities\" className=\"gap-1.5\">\n          <IconBug className=\"h-4 w-4\" />\n          漏洞\n        </TabsTrigger>\n        <TabsTrigger value=\"scans\" className=\"gap-1.5\">\n          <IconRadar className=\"h-4 w-4\" />\n          扫描历史\n        </TabsTrigger>\n      </TabsList>\n      \n      <TabsContent value=\"vulnerabilities\" className=\"mt-0\">\n        <VulnerabilitiesDetailView hideToolbar />\n      </TabsContent>\n      <TabsContent value=\"scans\" className=\"mt-0\">\n        <ScanHistoryList hideToolbar />\n      </TabsContent>\n    </Tabs>\n  )\n}\n"
  },
  {
    "path": "frontend/components/dashboard/dashboard-data-table.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { IconBug, IconRadar } from \"@tabler/icons-react\"\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\"\nimport { Skeleton } from \"@/components/ui/skeleton\"\nimport { UnifiedDataTable } from \"@/components/ui/data-table\"\nimport { useAllVulnerabilities } from \"@/hooks/use-vulnerabilities\"\nimport { useScans } from \"@/hooks/use-scans\"\nimport { VulnerabilityDetailDialog } from \"@/components/vulnerabilities/vulnerability-detail-dialog\"\nimport { createVulnerabilityColumns } from \"@/components/vulnerabilities/vulnerabilities-columns\"\nimport { createScanHistoryColumns } from \"@/components/scan/history/scan-history-columns\"\nimport { ScanProgressDialog, buildScanProgressData, type ScanProgressData } from \"@/components/scan/scan-progress-dialog\"\nimport { getScan } from \"@/services/scan.service\"\nimport { useRouter } from \"next/navigation\"\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\"\nimport { toast } from \"sonner\"\nimport { deleteScan, stopScan } from \"@/services/scan.service\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport { getDateLocale } from \"@/lib/date-utils\"\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\"\nimport type { Vulnerability } from \"@/types/vulnerability.types\"\nimport type { ScanRecord } from \"@/types/scan.types\"\nimport type { PaginationInfo } from \"@/types/common.types\"\n\nexport function DashboardDataTable() {\n  const router = useRouter()\n  const queryClient = useQueryClient()\n  const t = useTranslations()\n  const locale = useLocale()\n  const [activeTab, setActiveTab] = React.useState(\"scans\")\n  \n  // 漏洞详情弹窗\n  const [selectedVuln, setSelectedVuln] = React.useState<Vulnerability | null>(null)\n  const [vulnDialogOpen, setVulnDialogOpen] = React.useState(false)\n  \n  // 扫描进度弹窗\n  const [progressData, setProgressData] = React.useState<ScanProgressData | null>(null)\n  const [progressDialogOpen, setProgressDialogOpen] = React.useState(false)\n  \n  // 删除确认弹窗\n  const [deleteDialogOpen, setDeleteDialogOpen] = React.useState(false)\n  const [scanToDelete, setScanToDelete] = React.useState<ScanRecord | null>(null)\n  \n  // 停止确认弹窗\n  const [stopDialogOpen, setStopDialogOpen] = React.useState(false)\n  const [scanToStop, setScanToStop] = React.useState<ScanRecord | null>(null)\n  \n  // 分页状态\n  const [vulnPagination, setVulnPagination] = React.useState({ pageIndex: 0, pageSize: 10 })\n  const [scanPagination, setScanPagination] = React.useState({ pageIndex: 0, pageSize: 10 })\n\n  // 获取漏洞数据\n  const vulnQuery = useAllVulnerabilities({\n    page: vulnPagination.pageIndex + 1,\n    pageSize: vulnPagination.pageSize,\n  })\n  \n  // 获取扫描数据\n  const scanQuery = useScans({\n    page: scanPagination.pageIndex + 1,\n    pageSize: scanPagination.pageSize,\n  })\n\n  // 删除扫描的 mutation\n  const deleteMutation = useMutation({\n    mutationFn: deleteScan,\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: ['scans'] })\n    },\n  })\n\n  // 停止扫描的 mutation\n  const stopMutation = useMutation({\n    mutationFn: stopScan,\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: ['scans'] })\n    },\n  })\n\n  const vulnerabilities = vulnQuery.data?.vulnerabilities ?? []\n  const scans = scanQuery.data?.results ?? []\n\n  // 格式化日期\n  const formatDate = (dateString: string): string => {\n    return new Date(dateString).toLocaleString(getDateLocale(locale), {\n      year: \"numeric\",\n      month: \"numeric\",\n      day: \"numeric\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\",\n      hour12: false,\n    })\n  }\n\n  // 点击漏洞行\n  const handleVulnRowClick = React.useCallback((vuln: Vulnerability) => {\n    setSelectedVuln(vuln)\n    setVulnDialogOpen(true)\n  }, [])\n\n  // 漏洞列定义\n  const vulnColumns = React.useMemo(\n    () => createVulnerabilityColumns({\n      formatDate,\n      handleViewDetail: handleVulnRowClick,\n      t: {\n        columns: {\n          severity: t('columns.vulnerability.severity'),\n          source: t('columns.vulnerability.source'),\n          vulnType: t('columns.vulnerability.vulnType'),\n          url: t('columns.common.url'),\n          createdAt: t('columns.common.createdAt'),\n        },\n        actions: {\n          details: t('common.actions.details'),\n          selectAll: t('common.actions.selectAll'),\n          selectRow: t('common.actions.selectRow'),\n        },\n        tooltips: {\n          vulnDetails: t('tooltips.vulnDetails'),\n        },\n        severity: {\n          critical: t('severity.critical'),\n          high: t('severity.high'),\n          medium: t('severity.medium'),\n          low: t('severity.low'),\n          info: t('severity.info'),\n        },\n      },\n    }),\n    [handleVulnRowClick, t]\n  )\n\n  // 扫描进度查看\n  const handleViewProgress = React.useCallback(async (scan: ScanRecord) => {\n    try {\n      const fullScan = await getScan(scan.id)\n      const data = buildScanProgressData(fullScan)\n      setProgressData(data)\n      setProgressDialogOpen(true)\n    } catch (error) {\n      console.error(\"获取扫描详情失败:\", error)\n    }\n  }, [])\n\n  // 处理删除扫描\n  const handleDelete = React.useCallback((scan: ScanRecord) => {\n    setScanToDelete(scan)\n    setDeleteDialogOpen(true)\n  }, [])\n\n  // 确认删除\n  const confirmDelete = async () => {\n    if (!scanToDelete) return\n    setDeleteDialogOpen(false)\n    try {\n      await deleteMutation.mutateAsync(scanToDelete.id)\n      toast.success(t('common.status.success'))\n    } catch (error) {\n      toast.error(t('common.status.error'))\n      console.error('删除失败:', error)\n    } finally {\n      setScanToDelete(null)\n    }\n  }\n\n  // 处理停止扫描\n  const handleStop = React.useCallback((scan: ScanRecord) => {\n    setScanToStop(scan)\n    setStopDialogOpen(true)\n  }, [])\n\n  // 确认停止\n  const confirmStop = async () => {\n    if (!scanToStop) return\n    setStopDialogOpen(false)\n    try {\n      await stopMutation.mutateAsync(scanToStop.id)\n      toast.success(t('common.status.success'))\n    } catch (error) {\n      toast.error(t('common.status.error'))\n      console.error('停止扫描失败:', error)\n    } finally {\n      setScanToStop(null)\n    }\n  }\n\n  // 扫描列定义\n  const scanColumns = React.useMemo(\n    () => createScanHistoryColumns({\n      formatDate,\n      navigate: (path: string) => router.push(path),\n      handleDelete,\n      handleStop,\n      handleViewProgress,\n      t: {\n        columns: {\n          target: t('columns.scanHistory.target'),\n          summary: t('columns.scanHistory.summary'),\n          engineName: t('columns.scanHistory.engineName'),\n          workerName: t('columns.scanHistory.workerName'),\n          createdAt: t('columns.common.createdAt'),\n          status: t('columns.common.status'),\n          progress: t('columns.scanHistory.progress'),\n        },\n        actions: {\n          snapshot: t('common.actions.snapshot'),\n          stopScan: t('scan.stopScan'),\n          delete: t('common.actions.delete'),\n          openMenu: t('common.actions.openMenu'),\n          selectAll: t('common.actions.selectAll'),\n          selectRow: t('common.actions.selectRow'),\n        },\n        tooltips: {\n          targetDetails: t('tooltips.targetDetails'),\n          viewProgress: t('tooltips.viewProgress'),\n        },\n        status: {\n          cancelled: t('common.status.cancelled'),\n          completed: t('common.status.completed'),\n          failed: t('common.status.failed'),\n          initiated: t('common.status.pending'),\n          running: t('common.status.running'),\n        },\n        summary: {\n          subdomains: t('columns.scanHistory.subdomains'),\n          websites: t('columns.scanHistory.websites'),\n          ipAddresses: t('columns.scanHistory.ipAddresses'),\n          endpoints: t('columns.scanHistory.endpoints'),\n          vulnerabilities: t('columns.scanHistory.vulnerabilities'),\n        },\n      },\n    }),\n    [router, handleViewProgress, handleDelete, handleStop, t]\n  )\n\n  // 漏洞分页信息\n  const vulnPaginationInfo: PaginationInfo = {\n    total: vulnQuery.data?.pagination?.total ?? 0,\n    page: vulnPagination.pageIndex + 1,\n    pageSize: vulnPagination.pageSize,\n    totalPages: vulnQuery.data?.pagination?.totalPages ?? 1,\n  }\n\n  // 扫描分页信息\n  const scanPaginationInfo: PaginationInfo = {\n    total: scanQuery.data?.total ?? 0,\n    page: scanPagination.pageIndex + 1,\n    pageSize: scanPagination.pageSize,\n    totalPages: scanQuery.data?.totalPages ?? 1,\n  }\n\n  return (\n    <>\n      <VulnerabilityDetailDialog\n        vulnerability={selectedVuln}\n        open={vulnDialogOpen}\n        onOpenChange={setVulnDialogOpen}\n      />\n      {progressData && (\n        <ScanProgressDialog\n          open={progressDialogOpen}\n          onOpenChange={setProgressDialogOpen}\n          data={progressData}\n        />\n      )}\n\n      {/* 删除确认对话框 */}\n      <AlertDialog open={deleteDialogOpen} onOpenChange={setDeleteDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{t('common.confirm.deleteTitle')}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {t('common.confirm.deleteMessage')}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{t('common.actions.cancel')}</AlertDialogCancel>\n            <AlertDialogAction \n              onClick={confirmDelete} \n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n            >\n              {t('common.actions.delete')}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n\n      {/* 停止扫描确认对话框 */}\n      <AlertDialog open={stopDialogOpen} onOpenChange={setStopDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{t('common.confirm.title')}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {t('common.confirm.deleteMessage')}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{t('common.actions.cancel')}</AlertDialogCancel>\n            <AlertDialogAction \n              onClick={confirmStop} \n              className=\"bg-primary text-primary-foreground hover:bg-primary/90\"\n            >\n              {t('scan.stopScan')}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n      \n      <Tabs value={activeTab} onValueChange={setActiveTab} className=\"w-full\">\n        {/* 漏洞表格 */}\n        <TabsContent value=\"vulnerabilities\" className=\"mt-0\">\n          {vulnQuery.isLoading ? (\n            <div className=\"space-y-2\">\n              {[...Array(5)].map((_, i) => <Skeleton key={i} className=\"h-12 w-full\" />)}\n            </div>\n          ) : (\n            <UnifiedDataTable\n              data={vulnerabilities}\n              columns={vulnColumns}\n              getRowId={(row) => String(row.id)}\n              enableRowSelection={false}\n              pagination={vulnPagination}\n              onPaginationChange={setVulnPagination}\n              paginationInfo={vulnPaginationInfo}\n              emptyMessage={t('common.status.noData')}\n              toolbarLeft={\n                <TabsList>\n                  <TabsTrigger value=\"scans\" className=\"gap-1.5\">\n                    <IconRadar className=\"h-4 w-4\" />\n                    {t('navigation.scanHistory')}\n                  </TabsTrigger>\n                  <TabsTrigger value=\"vulnerabilities\" className=\"gap-1.5\">\n                    <IconBug className=\"h-4 w-4\" />\n                    {t('navigation.vulnerabilities')}\n                  </TabsTrigger>\n                </TabsList>\n              }\n              showAddButton={false}\n              showBulkDelete={false}\n            />\n          )}\n        </TabsContent>\n\n        {/* 扫描历史表格 */}\n        <TabsContent value=\"scans\" className=\"mt-0\">\n          {scanQuery.isLoading ? (\n            <div className=\"space-y-2\">\n              {[...Array(5)].map((_, i) => <Skeleton key={i} className=\"h-12 w-full\" />)}\n            </div>\n          ) : (\n            <UnifiedDataTable\n              data={scans}\n              columns={scanColumns}\n              getRowId={(row) => String(row.id)}\n              enableRowSelection={false}\n              enableAutoColumnSizing\n              pagination={scanPagination}\n              onPaginationChange={setScanPagination}\n              paginationInfo={scanPaginationInfo}\n              emptyMessage={t('common.status.noData')}\n              toolbarLeft={\n                <TabsList>\n                  <TabsTrigger value=\"scans\" className=\"gap-1.5\">\n                    <IconRadar className=\"h-4 w-4\" />\n                    {t('navigation.scanHistory')}\n                  </TabsTrigger>\n                  <TabsTrigger value=\"vulnerabilities\" className=\"gap-1.5\">\n                    <IconBug className=\"h-4 w-4\" />\n                    {t('navigation.vulnerabilities')}\n                  </TabsTrigger>\n                </TabsList>\n              }\n              showAddButton={false}\n              showBulkDelete={false}\n            />\n          )}\n        </TabsContent>\n      </Tabs>\n    </>\n  )\n}\n"
  },
  {
    "path": "frontend/components/dashboard/dashboard-scan-history.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { useRouter } from \"next/navigation\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport { ScanHistoryDataTable } from \"@/components/scan/history/scan-history-data-table\"\nimport { createScanHistoryColumns } from \"@/components/scan/history/scan-history-columns\"\nimport { useScans } from \"@/hooks/use-scans\"\nimport { DataTableSkeleton } from \"@/components/ui/data-table-skeleton\"\nimport { getDateLocale } from \"@/lib/date-utils\"\nimport type { ScanRecord } from \"@/types/scan.types\"\nimport type { ColumnDef } from \"@tanstack/react-table\"\n\nexport function DashboardScanHistory() {\n  const [pagination, setPagination] = React.useState({ pageIndex: 0, pageSize: 5 })\n  const router = useRouter()\n  const locale = useLocale()\n\n  // 国际化\n  const tColumns = useTranslations(\"columns\")\n  const tCommon = useTranslations(\"common\")\n  const tTooltips = useTranslations(\"tooltips\")\n  const tScan = useTranslations(\"scan\")\n\n  // 构建翻译对象\n  const translations = React.useMemo(() => ({\n    columns: {\n      target: tColumns(\"scanHistory.target\"),\n      summary: tColumns(\"scanHistory.summary\"),\n      engineName: tColumns(\"scanHistory.engineName\"),\n      workerName: tColumns(\"scanHistory.workerName\"),\n      createdAt: tColumns(\"common.createdAt\"),\n      status: tColumns(\"common.status\"),\n      progress: tColumns(\"scanHistory.progress\"),\n    },\n    actions: {\n      snapshot: tCommon(\"actions.snapshot\"),\n      stopScan: tScan(\"stopScan\"),\n      delete: tCommon(\"actions.delete\"),\n      openMenu: tCommon(\"actions.openMenu\"),\n      selectAll: tCommon(\"actions.selectAll\"),\n      selectRow: tCommon(\"actions.selectRow\"),\n    },\n    tooltips: {\n      targetDetails: tTooltips(\"targetDetails\"),\n      viewProgress: tTooltips(\"viewProgress\"),\n    },\n    status: {\n      cancelled: tCommon(\"status.cancelled\"),\n      completed: tCommon(\"status.completed\"),\n      failed: tCommon(\"status.failed\"),\n      initiated: tCommon(\"status.pending\"),\n      running: tCommon(\"status.running\"),\n    },\n    summary: {\n      subdomains: tColumns(\"scanHistory.subdomains\"),\n      websites: tColumns(\"scanHistory.websites\"),\n      ipAddresses: tColumns(\"scanHistory.ipAddresses\"),\n      endpoints: tColumns(\"scanHistory.endpoints\"),\n      vulnerabilities: tColumns(\"scanHistory.vulnerabilities\"),\n    },\n  }), [tColumns, tCommon, tTooltips, tScan])\n\n  const { data, isLoading } = useScans({\n    page: pagination.pageIndex + 1,\n    pageSize: pagination.pageSize,\n    status: 'running',\n  })\n\n  const formatDate = React.useCallback((dateString: string) => new Date(dateString).toLocaleString(getDateLocale(locale), { hour12: false }), [locale])\n  const navigate = React.useCallback((path: string) => router.push(path), [router])\n  const handleDelete = React.useCallback(() => {}, [])\n  const handleStop = React.useCallback((scan: ScanRecord) => {\n    // 仪表盘列表暂时不提供停止逻辑，实现时可在此调用对应的停止扫描接口\n  }, [])\n\n  const columns = React.useMemo(\n    () => createScanHistoryColumns({ formatDate, navigate, handleDelete, handleStop, t: translations }) as ColumnDef<ScanRecord>[],\n    [formatDate, navigate, handleDelete, handleStop, translations]\n  )\n\n  if (isLoading && !data) {\n    return (\n      <DataTableSkeleton\n        withPadding={false}\n        toolbarButtonCount={2}\n        rows={4}\n        columns={3}\n      />\n    )\n  }\n\n  const paginationInfo = data\n    ? { total: data.total, page: data.page, pageSize: data.pageSize, totalPages: data.totalPages }\n    : undefined\n\n  return (\n    <ScanHistoryDataTable\n      data={data?.results ?? []}\n      columns={columns}\n      hideToolbar\n      hidePagination\n      pagination={pagination}\n      setPagination={setPagination}\n      paginationInfo={paginationInfo}\n      onPaginationChange={setPagination}\n    />\n  )\n}\n"
  },
  {
    "path": "frontend/components/dashboard/dashboard-scheduled-scans.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { useRouter } from \"next/navigation\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport { ScheduledScanDataTable } from \"@/components/scan/scheduled/scheduled-scan-data-table\"\nimport { createScheduledScanColumns } from \"@/components/scan/scheduled/scheduled-scan-columns\"\nimport { useScheduledScans } from \"@/hooks/use-scheduled-scans\"\nimport { DataTableSkeleton } from \"@/components/ui/data-table-skeleton\"\nimport { getDateLocale } from \"@/lib/date-utils\"\n\nexport function DashboardScheduledScans() {\n  const [pagination, setPagination] = React.useState({ page: 1, pageSize: 10 })\n  const [searchQuery, setSearchQuery] = React.useState(\"\")\n  const [isSearching, setIsSearching] = React.useState(false)\n  const router = useRouter()\n  const locale = useLocale()\n\n  // Internationalization\n  const tColumns = React.useMemo(() => useTranslations(\"columns\"), [])\n  const tCommon = React.useMemo(() => useTranslations(\"common\"), [])\n  const tScan = React.useMemo(() => useTranslations(\"scan\"), [])\n\n  // Build translation object\n  const translations = React.useMemo(() => ({\n    columns: {\n      taskName: tColumns(\"scheduledScan.taskName\"),\n      scanEngine: tColumns(\"scheduledScan.scanEngine\"),\n      cronExpression: tColumns(\"scheduledScan.cronExpression\"),\n      scope: tColumns(\"scheduledScan.scope\"),\n      status: tColumns(\"common.status\"),\n      nextRun: tColumns(\"scheduledScan.nextRun\"),\n      runCount: tColumns(\"scheduledScan.runCount\"),\n      lastRun: tColumns(\"scheduledScan.lastRun\"),\n    },\n    actions: {\n      editTask: tScan(\"editTask\"),\n      delete: tCommon(\"actions.delete\"),\n      openMenu: tCommon(\"actions.openMenu\"),\n    },\n    status: {\n      enabled: tCommon(\"status.enabled\"),\n      disabled: tCommon(\"status.disabled\"),\n    },\n    cron: {\n      everyMinute: tScan(\"cron.everyMinute\"),\n      everyNMinutes: tScan.raw(\"cron.everyNMinutes\") as string,\n      everyHour: tScan.raw(\"cron.everyHour\") as string,\n      everyNHours: tScan.raw(\"cron.everyNHours\") as string,\n      everyDay: tScan.raw(\"cron.everyDay\") as string,\n      everyWeek: tScan.raw(\"cron.everyWeek\") as string,\n      everyMonth: tScan.raw(\"cron.everyMonth\") as string,\n      weekdays: tScan.raw(\"cron.weekdays\") as string[],\n    },\n  }), [tColumns, tCommon, tScan])\n\n  const handleSearchChange = (value: string) => {\n    setIsSearching(true)\n    setSearchQuery(value)\n    setPagination((prev) => ({ ...prev, page: 1 }))\n  }\n\n  const { data, isLoading, isFetching } = useScheduledScans({\n    page: pagination.page,\n    pageSize: pagination.pageSize,\n    search: searchQuery || undefined,\n  })\n\n  React.useEffect(() => {\n    if (!isFetching && isSearching) {\n      setIsSearching(false)\n    }\n  }, [isFetching, isSearching])\n\n  const formatDate = (dateString: string) => new Date(dateString).toLocaleString(getDateLocale(locale), { hour12: false })\n  const handleEdit = () => router.push(`/scan/scheduled/`)\n  const handleDelete = () => {}\n  const handleToggleStatus = () => {}\n\n  const columns = React.useMemo(\n    () =>\n      createScheduledScanColumns({\n        formatDate,\n        handleEdit,\n        handleDelete,\n        handleToggleStatus,\n        t: translations,\n      }),\n    [formatDate, handleEdit, translations]\n  )\n\n  if (isLoading && !data) {\n    return (\n      <DataTableSkeleton\n        withPadding={false}\n        toolbarButtonCount={2}\n        rows={4}\n        columns={3}\n      />\n    )\n  }\n\n  const list = data?.results ?? []\n\n  return (\n    <ScheduledScanDataTable\n      data={list}\n      columns={columns}\n      searchPlaceholder={tScan(\"scheduled.searchPlaceholder\")}\n      searchValue={searchQuery}\n      onSearch={handleSearchChange}\n      isSearching={isSearching}\n      page={pagination.page}\n      pageSize={pagination.pageSize}\n      total={data?.total || 0}\n      totalPages={data?.totalPages || 1}\n      onPageChange={(page) => setPagination((prev) => ({ ...prev, page }))}\n      onPageSizeChange={(pageSize) => setPagination({ page: 1, pageSize })}\n    />\n  )\n}\n"
  },
  {
    "path": "frontend/components/dashboard/dashboard-stat-cards.tsx",
    "content": "\"use client\"\n\nimport { useAssetStatistics } from \"@/hooks/use-dashboard\"\nimport { Card, CardAction, CardDescription, CardFooter, CardHeader, CardTitle } from \"@/components/ui/card\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Skeleton } from \"@/components/ui/skeleton\"\nimport { IconTarget, IconStack2, IconBug, IconPlayerPlay, IconTrendingUp, IconTrendingDown } from \"@tabler/icons-react\"\nimport { useTranslations } from \"next-intl\"\nimport { useLocale } from \"next-intl\"\n\nfunction TrendBadge({ change }: { change: number }) {\n  if (change === 0) return null\n  \n  const isPositive = change > 0\n  return (\n    <Badge \n      variant=\"outline\" \n      className={isPositive \n        ? \"text-[#238636] dark:text-[#3fb950] border-[#238636]/20 bg-[#238636]/10\" \n        : \"text-[#da3633] dark:text-[#f85149] border-[#da3633]/20 bg-[#da3633]/10\"\n      }\n    >\n      {isPositive ? <IconTrendingUp className=\"size-3 mr-1\" /> : <IconTrendingDown className=\"size-3 mr-1\" />}\n      {isPositive ? '+' : ''}{change}\n    </Badge>\n  )\n}\n\nfunction StatCard({\n  title,\n  value,\n  change,\n  icon,\n  footer,\n  loading,\n}: {\n  title: string\n  value: string | number\n  change?: number\n  icon: React.ReactNode\n  footer: string\n  loading?: boolean\n}) {\n  return (\n    <Card className=\"@container/card\">\n      <CardHeader>\n        <CardDescription className=\"flex items-center gap-2\">\n          {icon}\n          {title}\n        </CardDescription>\n        {loading ? (\n          <Skeleton className=\"h-8 w-24\" />\n        ) : (\n          <CardTitle className=\"text-2xl font-semibold tabular-nums @[250px]/card:text-3xl\">\n            {typeof value === 'number' ? value.toLocaleString() : value}\n          </CardTitle>\n        )}\n        {!loading && change !== undefined && (\n          <CardAction>\n            <TrendBadge change={change} />\n          </CardAction>\n        )}\n      </CardHeader>\n      <CardFooter className=\"flex-col items-start gap-1.5 text-sm\">\n        <div className=\"text-muted-foreground\">{footer}</div>\n      </CardFooter>\n    </Card>\n  )\n}\n\nfunction formatUpdateTime(dateStr: string | null, locale: string, noDataText: string) {\n  if (!dateStr) return noDataText\n  const date = new Date(dateStr)\n  return date.toLocaleString(locale === 'zh' ? 'zh-CN' : 'en-US', {\n    month: '2-digit',\n    day: '2-digit',\n    hour: '2-digit',\n    minute: '2-digit',\n  })\n}\n\nexport function DashboardStatCards() {\n  const { data, isLoading } = useAssetStatistics()\n  const t = useTranslations(\"dashboard.statCards\")\n  const locale = useLocale()\n\n  return (\n    <div className=\"flex flex-col gap-2 px-4 lg:px-6\">\n      <div className=\"grid grid-cols-1 gap-4 @xl/main:grid-cols-2 @5xl/main:grid-cols-4\">\n        <StatCard\n          title={t(\"assetsFound\")}\n          value={data?.totalAssets ?? 0}\n          change={data?.changeAssets}\n          icon={<IconStack2 className=\"size-4\" />}\n          loading={isLoading}\n          footer={t(\"assetsFooter\")}\n        />\n        <StatCard\n          title={t(\"vulnsFound\")}\n          value={data?.totalVulns ?? 0}\n          change={data?.changeVulns}\n          icon={<IconBug className=\"size-4\" />}\n          loading={isLoading}\n          footer={t(\"vulnsFooter\")}\n        />\n        <StatCard\n          title={t(\"monitoredTargets\")}\n          value={data?.totalTargets ?? 0}\n          change={data?.changeTargets}\n          icon={<IconTarget className=\"size-4\" />}\n          loading={isLoading}\n          footer={t(\"targetsFooter\")}\n        />\n        <StatCard\n          title={t(\"runningScans\")}\n          value={data?.runningScans ?? 0}\n          icon={<IconPlayerPlay className=\"size-4\" />}\n          loading={isLoading}\n          footer={t(\"scansFooter\")}\n        />\n      </div>\n      <div className=\"flex items-center gap-3 mt-1 -mb-2 text-xs text-muted-foreground\">\n        <div className=\"flex-1 border-t\" />\n        <span>{t(\"updatedAt\", { time: formatUpdateTime(data?.updatedAt ?? null, locale, t(\"noData\")) })}</span>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/dashboard/recent-vulnerabilities.tsx",
    "content": "\"use client\"\n\nimport { useMemo } from \"react\"\nimport { useQuery } from \"@tanstack/react-query\"\nimport Link from \"next/link\"\nimport { useRouter } from \"next/navigation\"\nimport { VulnerabilityService } from \"@/services/vulnerability.service\"\nimport {\n  Card,\n  CardContent,\n  CardDescription,\n  CardHeader,\n  CardTitle,\n} from \"@/components/ui/card\"\nimport {\n  Table,\n  TableBody,\n  TableCell,\n  TableHead,\n  TableHeader,\n  TableRow,\n} from \"@/components/ui/table\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Skeleton } from \"@/components/ui/skeleton\"\nimport { IconExternalLink } from \"@tabler/icons-react\"\nimport type { VulnerabilitySeverity } from \"@/types/vulnerability.types\"\nimport { useTranslations } from \"next-intl\"\nimport { useLocale } from \"next-intl\"\n\n// Unified vulnerability severity color configuration (consistent with charts)\nconst severityStyles: Record<VulnerabilitySeverity, string> = {\n  critical: \"bg-[#da3633]/10 text-[#da3633] border border-[#da3633]/20 dark:text-[#f85149]\",\n  high: \"bg-[#d29922]/10 text-[#d29922] border border-[#d29922]/20\",\n  medium: \"bg-[#d4a72c]/10 text-[#d4a72c] border border-[#d4a72c]/20\",\n  low: \"bg-[#238636]/10 text-[#238636] border border-[#238636]/20 dark:text-[#3fb950]\",\n  info: \"bg-[#848d97]/10 text-[#848d97] border border-[#848d97]/20\",\n}\n\nexport function RecentVulnerabilities() {\n  const router = useRouter()\n  const t = useTranslations(\"dashboard.recentVulns\")\n  const tSeverity = useTranslations(\"severity\")\n  const tColumns = useTranslations(\"columns\")\n  const locale = useLocale()\n  \n  const formatTime = (dateStr: string) => {\n    const date = new Date(dateStr)\n    return date.toLocaleString(locale === 'zh' ? 'zh-CN' : 'en-US', {\n      month: \"2-digit\",\n      day: \"2-digit\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n    })\n  }\n\n  const severityConfig = useMemo(() => ({\n    critical: { label: tSeverity(\"critical\"), className: severityStyles.critical },\n    high: { label: tSeverity(\"high\"), className: severityStyles.high },\n    medium: { label: tSeverity(\"medium\"), className: severityStyles.medium },\n    low: { label: tSeverity(\"low\"), className: severityStyles.low },\n    info: { label: tSeverity(\"info\"), className: severityStyles.info },\n  }), [tSeverity])\n\n  const { data, isLoading } = useQuery({\n    queryKey: [\"dashboard\", \"recent-vulnerabilities\"],\n    queryFn: () => VulnerabilityService.getAllVulnerabilities({ page: 1, pageSize: 5 }),\n  })\n\n  const vulnerabilities = data?.results ?? []\n\n  return (\n    <Card>\n      <CardHeader className=\"flex flex-row items-center justify-between\">\n        <div>\n          <CardTitle>{t(\"title\")}</CardTitle>\n          <CardDescription>{t(\"description\")}</CardDescription>\n        </div>\n        <Link \n          href=\"/vulnerabilities/\" \n          className=\"text-sm text-muted-foreground hover:text-foreground transition-colors flex items-center gap-1\"\n        >\n          {t(\"viewAll\")}\n          <IconExternalLink className=\"h-3.5 w-3.5\" />\n        </Link>\n      </CardHeader>\n      <CardContent>\n        {isLoading ? (\n          <div className=\"space-y-3\">\n            {[...Array(5)].map((_, i) => (\n              <Skeleton key={i} className=\"h-10 w-full\" />\n            ))}\n          </div>\n        ) : vulnerabilities.length === 0 ? (\n          <div className=\"text-center text-muted-foreground py-8\">\n            {t(\"noData\")}\n          </div>\n        ) : (\n          <div className=\"rounded-md border\">\n            <Table>\n              <TableHeader>\n                <TableRow>\n                  <TableHead>{tColumns(\"common.status\")}</TableHead>\n                  <TableHead>{tColumns(\"vulnerability.source\")}</TableHead>\n                  <TableHead>{tColumns(\"common.type\")}</TableHead>\n                  <TableHead>{tColumns(\"common.url\")}</TableHead>\n                  <TableHead>{tColumns(\"common.createdAt\")}</TableHead>\n                </TableRow>\n              </TableHeader>\n              <TableBody>\n                {vulnerabilities.map((vuln: any) => (\n                  <TableRow \n                    key={vuln.id}\n                    className=\"cursor-pointer hover:bg-muted/50\"\n                    onClick={() => router.push(`/vulnerabilities/?id=${vuln.id}`)}\n                  >\n                    <TableCell>\n                      <Badge className={severityConfig[vuln.severity as VulnerabilitySeverity]?.className}>\n                        {severityConfig[vuln.severity as VulnerabilitySeverity]?.label ?? vuln.severity}\n                      </Badge>\n                    </TableCell>\n                    <TableCell>\n                      <Badge variant=\"outline\">{vuln.source}</Badge>\n                    </TableCell>\n                    <TableCell className=\"font-medium max-w-[120px] truncate\">\n                      {vuln.vulnType}\n                    </TableCell>\n                    <TableCell className=\"text-muted-foreground text-xs max-w-[200px] truncate\">\n                      {vuln.url}\n                    </TableCell>\n                    <TableCell className=\"text-muted-foreground text-xs whitespace-nowrap\">\n                      {formatTime(vuln.createdAt)}\n                    </TableCell>\n                  </TableRow>\n                ))}\n              </TableBody>\n            </Table>\n          </div>\n        )}\n      </CardContent>\n    </Card>\n  )\n}\n"
  },
  {
    "path": "frontend/components/dashboard/vuln-severity-chart.tsx",
    "content": "\"use client\"\n\nimport { useMemo } from \"react\"\nimport { Pie, PieChart, Cell, Label } from \"recharts\"\nimport { useAssetStatistics } from \"@/hooks/use-dashboard\"\nimport {\n  Card,\n  CardContent,\n  CardDescription,\n  CardHeader,\n  CardTitle,\n} from \"@/components/ui/card\"\nimport {\n  ChartConfig,\n  ChartContainer,\n  ChartTooltip,\n  ChartTooltipContent,\n} from \"@/components/ui/chart\"\nimport { Skeleton } from \"@/components/ui/skeleton\"\nimport { useTranslations } from \"next-intl\"\n\n// 漏洞严重程度使用固定语义化颜色\nconst SEVERITY_COLORS = {\n  critical: \"#dc2626\", // 红色\n  high: \"#f97316\", // 橙色\n  medium: \"#eab308\", // 黄色\n  low: \"#3b82f6\", // 蓝色\n  info: \"#6b7280\", // 灰色\n}\n\nexport function VulnSeverityChart() {\n  const { data, isLoading } = useAssetStatistics()\n  const t = useTranslations(\"dashboard.vulnDistribution\")\n  const tSeverity = useTranslations(\"severity\")\n\n  const chartConfig = useMemo(() => ({\n    count: {\n      label: \"Count\",\n    },\n    critical: {\n      label: tSeverity(\"critical\"),\n      color: SEVERITY_COLORS.critical,\n    },\n    high: {\n      label: tSeverity(\"high\"),\n      color: SEVERITY_COLORS.high,\n    },\n    medium: {\n      label: tSeverity(\"medium\"),\n      color: SEVERITY_COLORS.medium,\n    },\n    low: {\n      label: tSeverity(\"low\"),\n      color: SEVERITY_COLORS.low,\n    },\n    info: {\n      label: tSeverity(\"info\"),\n      color: SEVERITY_COLORS.info,\n    },\n  } satisfies ChartConfig), [tSeverity])\n\n  const vulnData = data?.vulnBySeverity\n  const allData = useMemo(() => [\n    { severity: \"critical\", count: vulnData?.critical ?? 0, fill: SEVERITY_COLORS.critical },\n    { severity: \"high\", count: vulnData?.high ?? 0, fill: SEVERITY_COLORS.high },\n    { severity: \"medium\", count: vulnData?.medium ?? 0, fill: SEVERITY_COLORS.medium },\n    { severity: \"low\", count: vulnData?.low ?? 0, fill: SEVERITY_COLORS.low },\n    { severity: \"info\", count: vulnData?.info ?? 0, fill: SEVERITY_COLORS.info },\n  ], [vulnData])\n  // 饼图只显示有数据的\n  const chartData = allData.filter(item => item.count > 0)\n\n  const total = allData.reduce((sum, item) => sum + item.count, 0)\n\n  return (\n    <Card>\n      <CardHeader>\n        <CardTitle>{t(\"title\")}</CardTitle>\n        <CardDescription>{t(\"description\")}</CardDescription>\n      </CardHeader>\n      <CardContent>\n        {isLoading ? (\n          <div className=\"flex items-center justify-center h-[180px]\">\n            <Skeleton className=\"h-[120px] w-[120px] rounded-full\" />\n          </div>\n        ) : total === 0 ? (\n          <div className=\"flex items-center justify-center h-[180px] text-muted-foreground\">\n            {t(\"noData\")}\n          </div>\n        ) : (\n          <div className=\"flex flex-col items-center gap-4\">\n            <ChartContainer config={chartConfig} className=\"aspect-square h-[140px]\">\n              <PieChart>\n                <ChartTooltip\n                  content={<ChartTooltipContent nameKey=\"severity\" hideLabel />}\n                />\n                <Pie\n                  data={chartData}\n                  dataKey=\"count\"\n                  nameKey=\"severity\"\n                  innerRadius={45}\n                  outerRadius={70}\n                  paddingAngle={2}\n                >\n                  {chartData.map((entry) => (\n                    <Cell key={entry.severity} fill={entry.fill} />\n                  ))}\n                  <Label\n                    content={({ viewBox }) => {\n                      if (viewBox && \"cx\" in viewBox && \"cy\" in viewBox) {\n                        return (\n                          <text\n                            x={viewBox.cx}\n                            y={viewBox.cy}\n                            textAnchor=\"middle\"\n                            dominantBaseline=\"middle\"\n                          >\n                            <tspan\n                              x={viewBox.cx}\n                              y={viewBox.cy}\n                              className=\"fill-foreground text-2xl font-bold\"\n                            >\n                              {total}\n                            </tspan>\n                            <tspan\n                              x={viewBox.cx}\n                              y={(viewBox.cy || 0) + 18}\n                              className=\"fill-muted-foreground text-xs\"\n                            >\n                              {t(\"vulns\")}\n                            </tspan>\n                          </text>\n                        )\n                      }\n                    }}\n                  />\n                </Pie>\n              </PieChart>\n            </ChartContainer>\n            <div className=\"mt-3 pt-3 border-t flex flex-wrap justify-end gap-x-4 gap-y-1.5 text-sm\">\n              {allData.map((item) => (\n                <div key={item.severity} className=\"flex items-center gap-1.5\">\n                  <div \n                    className=\"h-2.5 w-2.5 rounded-full\" \n                    style={{ backgroundColor: item.fill }}\n                  />\n                  <span className={item.count > 0 ? \"text-foreground\" : \"text-muted-foreground\"}>\n                    {chartConfig[item.severity as keyof typeof chartConfig]?.label}\n                  </span>\n                  <span className={item.count > 0 ? \"font-medium\" : \"text-muted-foreground\"}>{item.count}</span>\n                </div>\n              ))}\n            </div>\n          </div>\n        )}\n      </CardContent>\n    </Card>\n  )\n}\n"
  },
  {
    "path": "frontend/components/directories/directories-columns.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { ColumnDef } from \"@tanstack/react-table\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { DataTableColumnHeader } from \"@/components/ui/data-table/column-header\"\nimport { ExpandableCell } from \"@/components/ui/data-table/expandable-cell\"\nimport type { Directory } from \"@/types/directory.types\"\n\n// Translation type definitions\nexport interface DirectoryTranslations {\n  columns: {\n    url: string\n    status: string\n    length: string\n    words: string\n    lines: string\n    contentType: string\n    duration: string\n    createdAt: string\n  }\n  actions: {\n    selectAll: string\n    selectRow: string\n  }\n}\n\ninterface CreateColumnsProps {\n  formatDate: (date: string) => string\n  t: DirectoryTranslations\n}\n\n/**\n * HTTP status code badge component\n */\nfunction StatusBadge({ status }: { status: number | null }) {\n  if (!status) return <span className=\"text-muted-foreground\">-</span>\n\n  let className = \"\"\n\n  if (status >= 200 && status < 300) {\n    className = \"bg-green-500/10 text-green-700 dark:text-green-400 hover:bg-green-500/20\"\n  } else if (status >= 300 && status < 400) {\n    className = \"bg-blue-500/10 text-blue-700 dark:text-blue-400 hover:bg-blue-500/20\"\n  } else if (status >= 400 && status < 500) {\n    className = \"bg-yellow-500/10 text-yellow-700 dark:text-yellow-400 hover:bg-yellow-500/20\"\n  } else if (status >= 500) {\n    className = \"bg-red-500/10 text-red-700 dark:text-red-400 hover:bg-red-500/20\"\n  }\n\n  return (\n    <Badge variant=\"default\" className={className}>\n      {status}\n    </Badge>\n  )\n}\n\n/**\n * Format duration (nanoseconds to milliseconds)\n */\nfunction formatDuration(nanoseconds: number | null): string {\n  if (nanoseconds === null) return \"-\"\n  const milliseconds = nanoseconds / 1000000\n  return `${milliseconds.toFixed(2)} ms`\n}\n\n/**\n * Create directory table column definitions\n */\nexport function createDirectoryColumns({\n  formatDate,\n  t,\n}: CreateColumnsProps): ColumnDef<Directory>[] {\n  return [\n    {\n      id: \"select\",\n      size: 40,\n      minSize: 40,\n      maxSize: 40,\n      enableResizing: false,\n      header: ({ table }) => (\n        <Checkbox\n          checked={\n            table.getIsAllPageRowsSelected() ||\n            (table.getIsSomePageRowsSelected() && \"indeterminate\")\n          }\n          onCheckedChange={(value) => table.toggleAllPageRowsSelected(!!value)}\n          aria-label={t.actions.selectAll}\n        />\n      ),\n      cell: ({ row }) => (\n        <Checkbox\n          checked={row.getIsSelected()}\n          onCheckedChange={(value) => row.toggleSelected(!!value)}\n          aria-label={t.actions.selectRow}\n        />\n      ),\n      enableSorting: false,\n      enableHiding: false,\n    },\n    {\n      accessorKey: \"url\",\n      size: 400,\n      minSize: 200,\n      maxSize: 800,\n      meta: { title: t.columns.url },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.url} />\n      ),\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"url\")} />\n      ),\n    },\n    {\n      accessorKey: \"status\",\n      size: 80,\n      minSize: 60,\n      maxSize: 120,\n      enableResizing: false,\n      meta: { title: t.columns.status },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.status} />\n      ),\n      cell: ({ row }) => <StatusBadge status={row.getValue(\"status\")} />,\n    },\n    {\n      accessorKey: \"contentLength\",\n      size: 100,\n      minSize: 80,\n      maxSize: 150,\n      meta: { title: t.columns.length },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.length} />\n      ),\n      cell: ({ row }) => {\n        const length = row.getValue(\"contentLength\") as number | null\n        return <span>{length !== null ? length.toLocaleString() : \"-\"}</span>\n      },\n    },\n    {\n      accessorKey: \"words\",\n      size: 80,\n      minSize: 60,\n      maxSize: 120,\n      meta: { title: t.columns.words },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.words} />\n      ),\n      cell: ({ row }) => {\n        const words = row.getValue(\"words\") as number | null\n        return <span>{words !== null ? words.toLocaleString() : \"-\"}</span>\n      },\n    },\n    {\n      accessorKey: \"lines\",\n      size: 80,\n      minSize: 60,\n      maxSize: 120,\n      meta: { title: t.columns.lines },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.lines} />\n      ),\n      cell: ({ row }) => {\n        const lines = row.getValue(\"lines\") as number | null\n        return <span>{lines !== null ? lines.toLocaleString() : \"-\"}</span>\n      },\n    },\n    {\n      accessorKey: \"contentType\",\n      size: 120,\n      minSize: 80,\n      maxSize: 200,\n      enableResizing: false,\n      meta: { title: t.columns.contentType },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.contentType} />\n      ),\n      cell: ({ row }) => {\n        const contentType = row.getValue(\"contentType\") as string\n        return contentType ? (\n          <Badge variant=\"outline\">{contentType}</Badge>\n        ) : (\n          <span className=\"text-muted-foreground\">-</span>\n        )\n      },\n    },\n    {\n      accessorKey: \"duration\",\n      size: 100,\n      minSize: 80,\n      maxSize: 150,\n      meta: { title: t.columns.duration },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.duration} />\n      ),\n      cell: ({ row }) => {\n        const duration = row.getValue(\"duration\") as number | null\n        return <span className=\"text-muted-foreground\">{formatDuration(duration)}</span>\n      },\n    },\n    {\n      accessorKey: \"createdAt\",\n      size: 150,\n      minSize: 120,\n      maxSize: 200,\n      enableResizing: false,\n      meta: { title: t.columns.createdAt },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.createdAt} />\n      ),\n      cell: ({ row }) => {\n        const date = row.getValue(\"createdAt\") as string\n        return <span className=\"text-muted-foreground\">{formatDate(date)}</span>\n      },\n    },\n  ]\n}\n"
  },
  {
    "path": "frontend/components/directories/directories-data-table.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport type { ColumnDef } from \"@tanstack/react-table\"\nimport { useTranslations } from \"next-intl\"\nimport { UnifiedDataTable } from \"@/components/ui/data-table\"\nimport type { FilterField } from \"@/components/common/smart-filter-input\"\nimport type { Directory } from \"@/types/directory.types\"\nimport type { PaginationInfo } from \"@/types/common.types\"\nimport type { DownloadOption } from \"@/types/data-table.types\"\n\n// Directory page filter field configuration\nconst DIRECTORY_FILTER_FIELDS: FilterField[] = [\n  { key: \"url\", label: \"URL\", description: \"Directory URL\" },\n  { key: \"status\", label: \"Status\", description: \"HTTP status code\" },\n]\n\n// Directory page filter examples\nconst DIRECTORY_FILTER_EXAMPLES = [\n  'url=\"/admin\" && status=\"200\"',\n  'url=\"/api/*\" || url=\"/config/*\"',\n  'status=\"200\" && url!=\"/index.html\"',\n]\n\ninterface DirectoriesDataTableProps {\n  data: Directory[]\n  columns: ColumnDef<Directory>[]\n  // Smart filter\n  filterValue?: string\n  onFilterChange?: (value: string) => void\n  isSearching?: boolean\n  pagination?: { pageIndex: number; pageSize: number }\n  setPagination?: React.Dispatch<React.SetStateAction<{ pageIndex: number; pageSize: number }>>\n  paginationInfo?: PaginationInfo\n  onPaginationChange?: (pagination: { pageIndex: number; pageSize: number }) => void\n  onBulkDelete?: () => void\n  onSelectionChange?: (selectedRows: Directory[]) => void\n  // Download callback functions\n  onDownloadAll?: () => void\n  onDownloadSelected?: () => void\n  onBulkAdd?: () => void\n}\n\nexport function DirectoriesDataTable({\n  data = [],\n  columns,\n  filterValue,\n  onFilterChange,\n  isSearching = false,\n  pagination,\n  setPagination,\n  paginationInfo,\n  onPaginationChange,\n  onBulkDelete,\n  onSelectionChange,\n  onDownloadAll,\n  onDownloadSelected,\n  onBulkAdd,\n}: DirectoriesDataTableProps) {\n  const t = useTranslations(\"common.status\")\n  const tActions = useTranslations(\"common.actions\")\n  const tDownload = useTranslations(\"common.download\")\n  const [selectedRows, setSelectedRows] = React.useState<Directory[]>([])\n\n  // Handle smart filter search\n  const handleSmartSearch = (rawQuery: string) => {\n    if (onFilterChange) {\n      onFilterChange(rawQuery)\n    }\n  }\n\n  // Handle selection change\n  const handleSelectionChange = (rows: Directory[]) => {\n    setSelectedRows(rows)\n    onSelectionChange?.(rows)\n  }\n\n  // Download options\n  const downloadOptions: DownloadOption[] = []\n  if (onDownloadAll) {\n    downloadOptions.push({\n      key: \"all\",\n      label: tDownload(\"all\"),\n      onClick: onDownloadAll,\n    })\n  }\n  if (onDownloadSelected) {\n    downloadOptions.push({\n      key: \"selected\",\n      label: tDownload(\"selected\"),\n      onClick: onDownloadSelected,\n      disabled: (count) => count === 0,\n    })\n  }\n\n  return (\n    <UnifiedDataTable\n      data={data}\n      columns={columns}\n      getRowId={(row) => String(row.id)}\n      // Pagination\n      pagination={pagination}\n      setPagination={setPagination}\n      paginationInfo={paginationInfo}\n      onPaginationChange={onPaginationChange}\n      // Smart filter\n      searchMode=\"smart\"\n      searchValue={filterValue}\n      onSearch={handleSmartSearch}\n      isSearching={isSearching}\n      filterFields={DIRECTORY_FILTER_FIELDS}\n      filterExamples={DIRECTORY_FILTER_EXAMPLES}\n      // Selection\n      onSelectionChange={handleSelectionChange}\n      // Bulk operations\n      onBulkDelete={onBulkDelete}\n      bulkDeleteLabel={tActions(\"delete\")}\n      showAddButton={false}\n      // Bulk add button\n      onBulkAdd={onBulkAdd}\n      bulkAddLabel={tActions(\"add\")}\n      // Download\n      downloadOptions={downloadOptions.length > 0 ? downloadOptions : undefined}\n      // Empty state\n      emptyMessage={t(\"noData\")}\n    />\n  )\n}\n"
  },
  {
    "path": "frontend/components/directories/directories-view.tsx",
    "content": "\"use client\"\n\nimport React, { useCallback, useMemo, useState, useEffect } from \"react\"\nimport { AlertTriangle } from \"lucide-react\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport { DirectoriesDataTable } from \"./directories-data-table\"\nimport { createDirectoryColumns } from \"./directories-columns\"\nimport { DataTableSkeleton } from \"@/components/ui/data-table-skeleton\"\nimport { Button } from \"@/components/ui/button\"\nimport { useTargetDirectories, useScanDirectories } from \"@/hooks/use-directories\"\nimport { useTarget } from \"@/hooks/use-targets\"\nimport { DirectoryService } from \"@/services/directory.service\"\nimport { BulkAddUrlsDialog } from \"@/components/common/bulk-add-urls-dialog\"\nimport { ConfirmDialog } from \"@/components/ui/confirm-dialog\"\nimport { getDateLocale } from \"@/lib/date-utils\"\nimport type { TargetType } from \"@/lib/url-validator\"\nimport type { Directory } from \"@/types/directory.types\"\nimport { toast } from \"sonner\"\n\nexport function DirectoriesView({\n  targetId,\n  scanId,\n}: {\n  targetId?: number\n  scanId?: number\n}) {\n  const [pagination, setPagination] = useState({\n    pageIndex: 0,\n    pageSize: 10,\n  })\n  const [selectedDirectories, setSelectedDirectories] = useState<Directory[]>([])\n  const [bulkAddDialogOpen, setBulkAddDialogOpen] = useState(false)\n  const [deleteDialogOpen, setDeleteDialogOpen] = useState(false)\n  const [isDeleting, setIsDeleting] = useState(false)\n\n  const [filterQuery, setFilterQuery] = useState(\"\")\n  const [isSearching, setIsSearching] = useState(false)\n\n  // Internationalization\n  const tColumns = useTranslations(\"columns\")\n  const tCommon = useTranslations(\"common\")\n  const tToast = useTranslations(\"toast\")\n  const tStatus = useTranslations(\"common.status\")\n  const locale = useLocale()\n\n  // Build translation object\n  const translations = useMemo(() => ({\n    columns: {\n      url: tColumns(\"common.url\"),\n      status: tColumns(\"common.status\"),\n      length: tColumns(\"directory.length\"),\n      words: tColumns(\"directory.words\"),\n      lines: tColumns(\"directory.lines\"),\n      contentType: tColumns(\"endpoint.contentType\"),\n      duration: tColumns(\"directory.duration\"),\n      createdAt: tColumns(\"common.createdAt\"),\n    },\n    actions: {\n      selectAll: tCommon(\"actions.selectAll\"),\n      selectRow: tCommon(\"actions.selectRow\"),\n    },\n  }), [tColumns, tCommon])\n\n  // Get target info (for URL matching validation)\n  const { data: target } = useTarget(targetId || 0, { enabled: !!targetId })\n\n  const handleFilterChange = (value: string) => {\n    setIsSearching(true)\n    setFilterQuery(value)\n    setPagination((prev) => ({ ...prev, pageIndex: 0 }))\n  }\n\n  const targetQuery = useTargetDirectories(\n    targetId || 0,\n    {\n      page: pagination.pageIndex + 1,\n      pageSize: pagination.pageSize,\n      filter: filterQuery || undefined,\n    },\n    { enabled: !!targetId }\n  )\n\n  const scanQuery = useScanDirectories(\n    scanId || 0,\n    {\n      page: pagination.pageIndex + 1,\n      pageSize: pagination.pageSize,\n      filter: filterQuery || undefined,\n    },\n    { enabled: !!scanId }\n  )\n\n  const activeQuery = targetId ? targetQuery : scanQuery\n  const { data, isLoading, isFetching, error, refetch } = activeQuery\n\n  useEffect(() => {\n    if (!isFetching && isSearching) {\n      setIsSearching(false)\n    }\n  }, [isFetching, isSearching])\n\n  const formatDate = useCallback((dateString: string) => {\n    return new Date(dateString).toLocaleString(getDateLocale(locale), {\n      year: \"numeric\",\n      month: \"2-digit\",\n      day: \"2-digit\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\",\n      hour12: false,\n    })\n  }, [locale])\n\n  const columns = useMemo(\n    () =>\n      createDirectoryColumns({\n        formatDate,\n        t: translations,\n      }),\n    [formatDate, translations]\n  )\n\n  const directories: Directory[] = useMemo(() => {\n    if (!data?.results) return []\n    return data.results\n  }, [data])\n\n  const paginationInfo = data\n    ? {\n      total: data.total,\n      page: data.page,\n      pageSize: data.pageSize,\n      totalPages: data.totalPages,\n    }\n    : undefined\n\n  const handleSelectionChange = useCallback((selectedRows: Directory[]) => {\n    setSelectedDirectories(selectedRows)\n  }, [])\n\n  // Format date as YYYY-MM-DD HH:MM:SS (consistent with backend)\n  const formatDateForCSV = (dateString: string): string => {\n    if (!dateString) return ''\n    const date = new Date(dateString)\n    const year = date.getFullYear()\n    const month = String(date.getMonth() + 1).padStart(2, '0')\n    const day = String(date.getDate()).padStart(2, '0')\n    const hours = String(date.getHours()).padStart(2, '0')\n    const minutes = String(date.getMinutes()).padStart(2, '0')\n    const seconds = String(date.getSeconds()).padStart(2, '0')\n    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`\n  }\n\n  // CSV escape\n  const escapeCSV = (value: string | number | boolean | null | undefined): string => {\n    if (value === null || value === undefined) return ''\n    const str = String(value)\n    if (str.includes(',') || str.includes('\"') || str.includes('\\n')) {\n      return `\"${str.replace(/\"/g, '\"\"')}\"`\n    }\n    return str\n  }\n\n  // Convert nanoseconds to milliseconds\n  const formatDurationNsToMs = (durationNs: number | null | undefined): string => {\n    if (durationNs === null || durationNs === undefined) return ''\n    return String(Math.floor(durationNs / 1_000_000))\n  }\n\n  // Generate CSV content\n  const generateCSV = (items: Directory[]): string => {\n    const BOM = '\\ufeff'\n    const headers = [\n      'url', 'status', 'content_length', 'words',\n      'lines', 'content_type', 'duration', 'created_at'\n    ]\n    \n    const rows = items.map(item => [\n      escapeCSV(item.url),\n      escapeCSV(item.status),\n      escapeCSV(item.contentLength),\n      escapeCSV(item.words),\n      escapeCSV(item.lines),\n      escapeCSV(item.contentType),\n      escapeCSV(formatDurationNsToMs(item.duration)),\n      escapeCSV(formatDateForCSV(item.createdAt))\n    ].join(','))\n    \n    return BOM + [headers.join(','), ...rows].join('\\n')\n  }\n\n  // Handle download all directories\n  const handleDownloadAll = async () => {\n    try {\n      let blob: Blob | null = null\n\n      if (scanId) {\n        const data = await DirectoryService.exportDirectoriesByScanId(scanId)\n        blob = data\n      } else if (targetId) {\n        const data = await DirectoryService.exportDirectoriesByTargetId(targetId)\n        blob = data\n      } else {\n        if (!directories || directories.length === 0) {\n          return\n        }\n        const csvContent = generateCSV(directories)\n        blob = new Blob([csvContent], { type: \"text/csv;charset=utf-8\" })\n      }\n\n      if (!blob) return\n\n      const url = URL.createObjectURL(blob)\n      const a = document.createElement(\"a\")\n      const prefix = scanId ? `scan-${scanId}` : targetId ? `target-${targetId}` : \"directories\"\n      a.href = url\n      a.download = `${prefix}-directories-${Date.now()}.csv`\n      document.body.appendChild(a)\n      a.click()\n      document.body.removeChild(a)\n      URL.revokeObjectURL(url)\n    } catch (error) {\n      console.error(\"Failed to download directory list\", error)\n      toast.error(tToast(\"downloadFailed\"))\n    }\n  }\n\n  // Handle download selected directories\n  const handleDownloadSelected = () => {\n    if (selectedDirectories.length === 0) {\n      return\n    }\n    const csvContent = generateCSV(selectedDirectories)\n    const blob = new Blob([csvContent], { type: \"text/csv;charset=utf-8\" })\n    const url = URL.createObjectURL(blob)\n    const a = document.createElement(\"a\")\n    const prefix = scanId ? `scan-${scanId}` : targetId ? `target-${targetId}` : \"directories\"\n    a.href = url\n    a.download = `${prefix}-directories-selected-${Date.now()}.csv`\n    document.body.appendChild(a)\n    a.click()\n    document.body.removeChild(a)\n    URL.revokeObjectURL(url)\n  }\n\n  // Handle bulk delete\n  const handleBulkDelete = async () => {\n    if (selectedDirectories.length === 0) return\n    \n    setIsDeleting(true)\n    try {\n      const ids = selectedDirectories.map(d => d.id)\n      const result = await DirectoryService.bulkDelete(ids)\n      toast.success(tToast(\"deleteSuccess\", { count: result.deletedCount }))\n      setSelectedDirectories([])\n      setDeleteDialogOpen(false)\n      refetch()\n    } catch (error) {\n      console.error(\"Failed to delete directories\", error)\n      toast.error(tToast(\"deleteFailed\"))\n    } finally {\n      setIsDeleting(false)\n    }\n  }\n\n  if (error) {\n    return (\n      <div className=\"flex flex-col items-center justify-center py-12\">\n        <div className=\"rounded-full bg-destructive/10 p-3 mb-4\">\n          <AlertTriangle className=\"h-10 w-10 text-destructive\" />\n        </div>\n        <h3 className=\"text-lg font-semibold mb-2\">{tStatus(\"error\")}</h3>\n        <p className=\"text-muted-foreground text-center mb-4\">\n          {tStatus(\"error\")}\n        </p>\n        <Button onClick={() => refetch()}>{tCommon(\"actions.retry\")}</Button>\n      </div>\n    )\n  }\n\n  if (isLoading && !data) {\n    return (\n      <DataTableSkeleton\n        toolbarButtonCount={2}\n        rows={6}\n        columns={5}\n      />\n    )\n  }\n\n  return (\n    <>\n      <DirectoriesDataTable\n        data={directories}\n        columns={columns}\n        filterValue={filterQuery}\n        onFilterChange={handleFilterChange}\n        isSearching={isSearching}\n        pagination={pagination}\n        setPagination={setPagination}\n        paginationInfo={paginationInfo}\n        onPaginationChange={setPagination}\n        onSelectionChange={handleSelectionChange}\n        onDownloadAll={handleDownloadAll}\n        onDownloadSelected={handleDownloadSelected}\n        onBulkDelete={targetId ? () => setDeleteDialogOpen(true) : undefined}\n        onBulkAdd={targetId ? () => setBulkAddDialogOpen(true) : undefined}\n      />\n\n      {/* Bulk add dialog */}\n      {targetId && (\n        <BulkAddUrlsDialog\n          targetId={targetId}\n          assetType=\"directory\"\n          targetName={target?.name}\n          targetType={target?.type as TargetType}\n          open={bulkAddDialogOpen}\n          onOpenChange={setBulkAddDialogOpen}\n          onSuccess={() => refetch()}\n        />\n      )}\n\n      {/* Delete confirmation dialog */}\n      <ConfirmDialog\n        open={deleteDialogOpen}\n        onOpenChange={setDeleteDialogOpen}\n        title={tCommon(\"actions.confirmDelete\")}\n        description={tCommon(\"actions.deleteConfirmMessage\", { count: selectedDirectories.length })}\n        onConfirm={handleBulkDelete}\n        loading={isDeleting}\n        variant=\"destructive\"\n      />\n    </>\n  )\n}\n"
  },
  {
    "path": "frontend/components/disk/disk-stat-cards.tsx",
    "content": "\"use client\"\n\nimport { useTranslations } from \"next-intl\"\nimport { useDiskStats } from '@/hooks/use-disk'\nimport { Card, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'\nimport { Skeleton } from '@/components/ui/skeleton'\nimport { IconDatabase } from '@tabler/icons-react'\nimport { formatBytes } from '@/lib/utils'\n\nfunction StatCard({ title, value, icon, loading }: { title: string; value: string | number; icon: React.ReactNode; loading?: boolean }) {\n  return (\n    <Card className=\"@container/card\">\n      <CardHeader>\n        <CardDescription className=\"flex items-center gap-2\">\n          {icon}\n          {title}\n        </CardDescription>\n        {loading ? (\n          <Skeleton className=\"h-8 w-24\" />\n        ) : (\n          <CardTitle className=\"text-2xl font-semibold tabular-nums @[250px]/card:text-3xl\">\n            {value}\n          </CardTitle>\n        )}\n      </CardHeader>\n    </Card>\n  )\n}\n\nexport function DiskStatCards() {\n  const { data, isLoading } = useDiskStats()\n  const t = useTranslations(\"disk\")\n\n  return (\n    <div className=\"grid grid-cols-1 gap-4 px-4 lg:px-6 @xl/main:grid-cols-3\">\n      <StatCard title={t(\"totalCapacity\")} value={formatBytes(data?.totalBytes ?? 0)} icon={<IconDatabase />} loading={isLoading} />\n      <StatCard title={t(\"used\")} value={formatBytes(data?.usedBytes ?? 0)} icon={<IconDatabase />} loading={isLoading} />\n      <StatCard title={t(\"available\")} value={formatBytes(data?.freeBytes ?? 0)} icon={<IconDatabase />} loading={isLoading} />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/endpoints/endpoints-columns.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { ColumnDef } from \"@tanstack/react-table\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport { DataTableColumnHeader } from \"@/components/ui/data-table/column-header\"\nimport type { Endpoint } from \"@/types/endpoint.types\"\nimport { ExpandableCell, ExpandableTagList } from \"@/components/ui/data-table/expandable-cell\"\n\n// Translation type definitions\nexport interface EndpointTranslations {\n  columns: {\n    url: string\n    host: string\n    title: string\n    status: string\n    contentLength: string\n    location: string\n    webServer: string\n    contentType: string\n    technologies: string\n    responseBody: string\n    vhost: string\n    gfPatterns: string\n    responseHeaders: string\n    responseTime: string\n    createdAt: string\n  }\n  actions: {\n    selectAll: string\n    selectRow: string\n  }\n}\n\ninterface CreateColumnsProps {\n  formatDate: (dateString: string) => string\n  t: EndpointTranslations\n}\n\nfunction HttpStatusBadge({ statusCode }: { statusCode: number | null | undefined }) {\n  if (statusCode === null || statusCode === undefined) {\n    return (\n      <Badge variant=\"outline\" className=\"text-muted-foreground px-2 py-1 font-mono\">\n        -\n      </Badge>\n    )\n  }\n\n  const getStatusVariant = (code: number): \"default\" | \"secondary\" | \"destructive\" | \"outline\" => {\n    if (code >= 200 && code < 300) {\n      return \"outline\"\n    } else if (code >= 300 && code < 400) {\n      return \"secondary\"\n    } else if (code >= 400 && code < 500) {\n      return \"default\"\n    } else if (code >= 500) {\n      return \"destructive\"\n    } else {\n      return \"secondary\"\n    }\n  }\n\n  const variant = getStatusVariant(statusCode)\n\n  return (\n    <Badge variant={variant} className=\"px-2 py-1 font-mono tabular-nums\">\n      {statusCode}\n    </Badge>\n  )\n}\n\nexport function createEndpointColumns({\n  formatDate,\n  t,\n}: CreateColumnsProps): ColumnDef<Endpoint>[] {\n  return [\n    {\n      id: \"select\",\n      size: 40,\n      minSize: 40,\n      maxSize: 40,\n      enableResizing: false,\n      header: ({ table }) => (\n        <Checkbox\n          checked={\n            table.getIsAllPageRowsSelected() ||\n            (table.getIsSomePageRowsSelected() && \"indeterminate\")\n          }\n          onCheckedChange={(value) => table.toggleAllPageRowsSelected(!!value)}\n          aria-label={t.actions.selectAll}\n        />\n      ),\n      cell: ({ row }) => (\n        <Checkbox\n          checked={row.getIsSelected()}\n          onCheckedChange={(value) => row.toggleSelected(!!value)}\n          aria-label={t.actions.selectRow}\n        />\n      ),\n      enableSorting: false,\n      enableHiding: false,\n    },\n    {\n      accessorKey: \"url\",\n      meta: { title: t.columns.url },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.url} />\n      ),\n      size: 400,\n      minSize: 200,\n      maxSize: 700,\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"url\")} />\n      ),\n    },\n    {\n      accessorKey: \"host\",\n      meta: { title: t.columns.host },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.host} />\n      ),\n      size: 200,\n      minSize: 100,\n      maxSize: 300,\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"host\")} />\n      ),\n    },\n    {\n      accessorKey: \"title\",\n      meta: { title: t.columns.title },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.title} />\n      ),\n      size: 150,\n      minSize: 100,\n      maxSize: 300,\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"title\")} />\n      ),\n    },\n    {\n      accessorKey: \"statusCode\",\n      meta: { title: t.columns.status },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.status} />\n      ),\n      size: 80,\n      minSize: 60,\n      maxSize: 100,\n      cell: ({ row }) => {\n        const status = row.getValue(\"statusCode\") as number | null | undefined\n        return <HttpStatusBadge statusCode={status} />\n      },\n    },\n    {\n      accessorKey: \"contentLength\",\n      meta: { title: t.columns.contentLength },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.contentLength} />\n      ),\n      size: 100,\n      minSize: 80,\n      maxSize: 150,\n      cell: ({ row }) => {\n        const len = row.getValue(\"contentLength\") as number | null | undefined\n        if (len === null || len === undefined) {\n          return <span className=\"text-muted-foreground text-sm\">-</span>\n        }\n        return <span className=\"font-mono tabular-nums\">{new Intl.NumberFormat().format(len)}</span>\n      },\n    },\n    {\n      accessorKey: \"location\",\n      meta: { title: t.columns.location },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.location} />\n      ),\n      size: 150,\n      minSize: 100,\n      maxSize: 300,\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"location\")} />\n      ),\n    },\n    {\n      accessorKey: \"webserver\",\n      meta: { title: t.columns.webServer },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.webServer} />\n      ),\n      size: 120,\n      minSize: 80,\n      maxSize: 200,\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"webserver\")} />\n      ),\n    },\n    {\n      accessorKey: \"contentType\",\n      meta: { title: t.columns.contentType },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.contentType} />\n      ),\n      size: 120,\n      minSize: 80,\n      maxSize: 200,\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"contentType\")} />\n      ),\n    },\n    {\n      accessorKey: \"tech\",\n      meta: { title: t.columns.technologies },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.technologies} />\n      ),\n      size: 200,\n      minSize: 150,\n      cell: ({ row }) => {\n        const tech = (row.getValue(\"tech\") as string[] | null | undefined) || []\n        return (\n          <ExpandableTagList\n            items={tech}\n            maxLines={2}\n            variant=\"outline\"\n          />\n        )\n      },\n    },\n    {\n      accessorKey: \"responseBody\",\n      meta: { title: t.columns.responseBody },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.responseBody} />\n      ),\n      size: 350,\n      minSize: 250,\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"responseBody\")} />\n      ),\n    },\n    {\n      accessorKey: \"responseHeaders\",\n      meta: { title: t.columns.responseHeaders },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.responseHeaders} />\n      ),\n      size: 250,\n      minSize: 150,\n      maxSize: 400,\n      cell: ({ row }) => {\n        const headers = row.getValue(\"responseHeaders\") as string | null | undefined\n        if (!headers) return <span className=\"text-muted-foreground text-sm\">-</span>\n        return <ExpandableCell value={headers} maxLines={3} />\n      },\n    },\n    {\n      accessorKey: \"vhost\",\n      meta: { title: t.columns.vhost },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.vhost} />\n      ),\n      size: 80,\n      minSize: 60,\n      maxSize: 100,\n      cell: ({ row }) => {\n        const vhost = row.getValue(\"vhost\") as boolean | null | undefined\n        if (vhost === null || vhost === undefined) return <span className=\"text-sm text-muted-foreground\">-</span>\n        return <span className=\"text-sm font-mono\">{vhost ? \"true\" : \"false\"}</span>\n      },\n    },\n    {\n      accessorKey: \"gfPatterns\",\n      meta: { title: t.columns.gfPatterns },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.gfPatterns} />\n      ),\n      size: 150,\n      minSize: 100,\n      maxSize: 250,\n      cell: ({ row }) => {\n        const patterns = (row.getValue(\"gfPatterns\") as string[] | null | undefined) || []\n        return (\n          <ExpandableTagList\n            items={patterns}\n            maxLines={2}\n            variant=\"secondary\"\n          />\n        )\n      },\n      enableSorting: false,\n    },\n    {\n      accessorKey: \"responseTime\",\n      meta: { title: t.columns.responseTime },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.responseTime} />\n      ),\n      size: 100,\n      minSize: 80,\n      maxSize: 150,\n      cell: ({ row }) => {\n        const rt = row.getValue(\"responseTime\") as number | null | undefined\n        if (rt === null || rt === undefined) {\n          return <span className=\"text-muted-foreground text-sm\">-</span>\n        }\n        const formatted = `${rt.toFixed(4)}s`\n        return <span className=\"font-mono text-emerald-600 dark:text-emerald-400\">{formatted}</span>\n      },\n    },\n    {\n      accessorKey: \"createdAt\",\n      meta: { title: t.columns.createdAt },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.createdAt} />\n      ),\n      size: 150,\n      minSize: 120,\n      maxSize: 200,\n      cell: ({ row }) => {\n        const createdAt = row.getValue(\"createdAt\") as string | undefined\n        return <div className=\"text-sm\">{createdAt ? formatDate(createdAt) : \"-\"}</div>\n      },\n    },\n  ]\n}\n"
  },
  {
    "path": "frontend/components/endpoints/endpoints-data-table.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport type { ColumnDef } from \"@tanstack/react-table\"\nimport { useTranslations } from \"next-intl\"\nimport { UnifiedDataTable } from \"@/components/ui/data-table\"\nimport type { FilterField } from \"@/components/common/smart-filter-input\"\nimport type { DownloadOption, PaginationState } from \"@/types/data-table.types\"\nimport type { PaginationInfo } from \"@/types/common.types\"\n\n// Endpoint page filter field configuration\nconst ENDPOINT_FILTER_FIELDS: FilterField[] = [\n  { key: \"url\", label: \"URL\", description: \"Endpoint URL\" },\n  { key: \"host\", label: \"Host\", description: \"Hostname\" },\n  { key: \"title\", label: \"Title\", description: \"Page title\" },\n  { key: \"status\", label: \"Status\", description: \"HTTP status code\" },\n  { key: \"tech\", label: \"Tech\", description: \"Technologies\" },\n  { key: \"responseHeaders\", label: \"Headers\", description: \"Response headers\" },\n]\n\n// Endpoint page filter examples\nconst ENDPOINT_FILTER_EXAMPLES = [\n  'url=\"/api/*\" && status=\"200\"',\n  'host=\"api.example.com\" || host=\"admin.example.com\"',\n  'title=\"Dashboard\" && status!=\"404\"',\n  'tech=\"php\" || tech=\"wordpress\"',\n]\n\ninterface EndpointsDataTableProps<TData extends { id: number | string }, TValue> {\n  columns: ColumnDef<TData, TValue>[]\n  data: TData[]\n  // Smart filter\n  filterValue?: string\n  onFilterChange?: (value: string) => void\n  isSearching?: boolean\n  onAddNew?: () => void\n  addButtonText?: string\n  onSelectionChange?: (selectedRows: TData[]) => void\n  onBulkDelete?: () => void\n  pagination?: { pageIndex: number; pageSize: number }\n  onPaginationChange?: (pagination: { pageIndex: number; pageSize: number }) => void\n  totalCount?: number\n  totalPages?: number\n  onDownloadAll?: () => void\n  onDownloadSelected?: () => void\n  onBulkAdd?: () => void\n}\n\nexport function EndpointsDataTable<TData extends { id: number | string }, TValue>({\n  columns,\n  data,\n  filterValue,\n  onFilterChange,\n  isSearching = false,\n  onAddNew,\n  addButtonText = \"Add\",\n  onSelectionChange,\n  onBulkDelete,\n  pagination: externalPagination,\n  onPaginationChange,\n  totalCount,\n  totalPages,\n  onDownloadAll,\n  onDownloadSelected,\n  onBulkAdd,\n}: EndpointsDataTableProps<TData, TValue>) {\n  const t = useTranslations(\"common.status\")\n  const tActions = useTranslations(\"common.actions\")\n  const tDownload = useTranslations(\"common.download\")\n  \n  const [internalPagination, setInternalPagination] = React.useState<PaginationState>({\n    pageIndex: 0,\n    pageSize: 10,\n  })\n\n  const pagination = externalPagination || internalPagination\n\n  // Handle smart filter search\n  const handleSmartSearch = (rawQuery: string) => {\n    if (onFilterChange) {\n      onFilterChange(rawQuery)\n    }\n  }\n\n  // Handle pagination change\n  const handlePaginationChange = (newPagination: PaginationState) => {\n    if (onPaginationChange) {\n      onPaginationChange(newPagination)\n    } else {\n      setInternalPagination(newPagination)\n    }\n  }\n\n  // Build paginationInfo\n  const paginationInfo: PaginationInfo | undefined = externalPagination && totalCount ? {\n    total: totalCount,\n    totalPages: totalPages || Math.ceil(totalCount / pagination.pageSize),\n    page: pagination.pageIndex + 1,\n    pageSize: pagination.pageSize,\n  } : undefined\n\n  // Download options\n  const downloadOptions: DownloadOption[] = []\n  if (onDownloadAll) {\n    downloadOptions.push({\n      key: \"all\",\n      label: tDownload(\"all\"),\n      onClick: onDownloadAll,\n    })\n  }\n  if (onDownloadSelected) {\n    downloadOptions.push({\n      key: \"selected\",\n      label: tDownload(\"selected\"),\n      onClick: onDownloadSelected,\n      disabled: (count) => count === 0,\n    })\n  }\n\n  return (\n    <UnifiedDataTable\n      data={data}\n      columns={columns as ColumnDef<TData>[]}\n      getRowId={(row) => String(row.id)}\n      // Pagination\n      pagination={pagination}\n      setPagination={onPaginationChange ? undefined : setInternalPagination}\n      paginationInfo={paginationInfo}\n      onPaginationChange={handlePaginationChange}\n      // Smart filter\n      searchMode=\"smart\"\n      searchValue={filterValue}\n      onSearch={handleSmartSearch}\n      isSearching={isSearching}\n      filterFields={ENDPOINT_FILTER_FIELDS}\n      filterExamples={ENDPOINT_FILTER_EXAMPLES}\n      // Selection\n      onSelectionChange={onSelectionChange}\n      // Bulk operations\n      onBulkDelete={onBulkDelete}\n      bulkDeleteLabel={tActions(\"delete\")}\n      onAddNew={onAddNew}\n      addButtonLabel={addButtonText}\n      // Bulk add button\n      onBulkAdd={onBulkAdd}\n      bulkAddLabel={tActions(\"add\")}\n      // Download\n      downloadOptions={downloadOptions.length > 0 ? downloadOptions : undefined}\n      // Empty state\n      emptyMessage={t(\"noData\")}\n    />\n  )\n}\n"
  },
  {
    "path": "frontend/components/endpoints/endpoints-detail-view.tsx",
    "content": "\"use client\"\n\nimport React, { useState, useMemo } from \"react\"\nimport { AlertTriangle } from \"lucide-react\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport { useTargetEndpoints, useTarget } from \"@/hooks/use-targets\"\nimport { useDeleteEndpoint, useScanEndpoints } from \"@/hooks/use-endpoints\"\nimport { EndpointsDataTable } from \"./endpoints-data-table\"\nimport { createEndpointColumns } from \"./endpoints-columns\"\nimport { LoadingSpinner } from \"@/components/loading-spinner\"\nimport { DataTableSkeleton } from \"@/components/ui/data-table-skeleton\"\nimport { BulkAddUrlsDialog } from \"@/components/common/bulk-add-urls-dialog\"\nimport { ConfirmDialog } from \"@/components/ui/confirm-dialog\"\nimport { getDateLocale } from \"@/lib/date-utils\"\nimport type { TargetType } from \"@/lib/url-validator\"\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\"\nimport type { Endpoint } from \"@/types/endpoint.types\"\nimport { EndpointService } from \"@/services/endpoint.service\"\nimport { toast } from \"sonner\"\n\n/**\n * Target endpoint detail view component\n * Used to display and manage the endpoint list under a target\n */\nexport function EndpointsDetailView({\n  targetId,\n  scanId,\n}: {\n  targetId?: number\n  scanId?: number\n}) {\n  const [deleteDialogOpen, setDeleteDialogOpen] = useState(false)\n  const [endpointToDelete, setEndpointToDelete] = useState<Endpoint | null>(null)\n  const [selectedEndpoints, setSelectedEndpoints] = useState<Endpoint[]>([])\n  const [bulkAddDialogOpen, setBulkAddDialogOpen] = useState(false)\n  const [bulkDeleteDialogOpen, setBulkDeleteDialogOpen] = useState(false)\n  const [isDeleting, setIsDeleting] = useState(false)\n\n  // Pagination state management\n  const [pagination, setPagination] = useState({\n    pageIndex: 0,\n    pageSize: 10\n  })\n\n  const [filterQuery, setFilterQuery] = useState(\"\")\n  const [isSearching, setIsSearching] = useState(false)\n\n  // Internationalization\n  const tColumns = useTranslations(\"columns\")\n  const tCommon = useTranslations(\"common\")\n  const tToast = useTranslations(\"toast\")\n  const tConfirm = useTranslations(\"common.confirm\")\n  const locale = useLocale()\n\n  // Build translation object\n  const translations = useMemo(() => ({\n    columns: {\n      url: tColumns(\"common.url\"),\n      host: tColumns(\"endpoint.host\"),\n      title: tColumns(\"endpoint.title\"),\n      status: tColumns(\"common.status\"),\n      contentLength: tColumns(\"endpoint.contentLength\"),\n      location: tColumns(\"endpoint.location\"),\n      webServer: tColumns(\"endpoint.webServer\"),\n      contentType: tColumns(\"endpoint.contentType\"),\n      technologies: tColumns(\"endpoint.technologies\"),\n      responseBody: tColumns(\"endpoint.responseBody\"),\n      vhost: tColumns(\"endpoint.vhost\"),\n      gfPatterns: tColumns(\"endpoint.gfPatterns\"),\n      responseHeaders: tColumns(\"endpoint.responseHeaders\"),\n      responseTime: tColumns(\"endpoint.responseTime\"),\n      createdAt: tColumns(\"common.createdAt\"),\n    },\n    actions: {\n      selectAll: tCommon(\"actions.selectAll\"),\n      selectRow: tCommon(\"actions.selectRow\"),\n    },\n  }), [tColumns, tCommon])\n\n  // Get target info (for URL matching validation)\n  const { data: target } = useTarget(targetId || 0, { enabled: !!targetId })\n\n  const handleFilterChange = (value: string) => {\n    setIsSearching(true)\n    setFilterQuery(value)\n    setPagination((prev) => ({ ...prev, pageIndex: 0 }))\n  }\n\n  // Delete related hooks\n  const deleteEndpoint = useDeleteEndpoint()\n\n  // Use React Query to fetch endpoint data: prioritize by targetId, then by scanId (historical snapshot)\n  const targetEndpointsQuery = useTargetEndpoints(targetId || 0, {\n    page: pagination.pageIndex + 1,\n    pageSize: pagination.pageSize,\n    filter: filterQuery || undefined,\n  }, { enabled: !!targetId })\n\n  const scanEndpointsQuery = useScanEndpoints(\n    scanId || 0,\n    {\n      page: pagination.pageIndex + 1,\n      pageSize: pagination.pageSize,\n    },\n    { enabled: !!scanId },\n    filterQuery || undefined,\n  )\n\n  const {\n    data,\n    isLoading,\n    isFetching,\n    error,\n    refetch,\n  } = targetId ? targetEndpointsQuery : scanEndpointsQuery\n\n  React.useEffect(() => {\n    if (!isFetching && isSearching) {\n      setIsSearching(false)\n    }\n  }, [isFetching, isSearching])\n\n  // Helper function - format date\n  const formatDate = React.useCallback((dateString: string): string => {\n    return new Date(dateString).toLocaleString(getDateLocale(locale), {\n      year: \"numeric\",\n      month: \"numeric\",\n      day: \"numeric\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\",\n      hour12: false,\n    })\n  }, [locale])\n\n\n  // Confirm delete endpoint\n  const confirmDelete = async () => {\n    if (!endpointToDelete) return\n\n    setDeleteDialogOpen(false)\n    setEndpointToDelete(null)\n\n    deleteEndpoint.mutate(endpointToDelete.id)\n  }\n\n  // Handle pagination change\n  const handlePaginationChange = (newPagination: { pageIndex: number; pageSize: number }) => {\n    setPagination(newPagination)\n  }\n\n  const handleSelectionChange = React.useCallback((selectedRows: Endpoint[]) => {\n    setSelectedEndpoints(selectedRows)\n  }, [])\n\n  // Create column definitions\n  const endpointColumns = useMemo(\n    () =>\n      createEndpointColumns({\n        formatDate,\n        t: translations,\n      }),\n    [formatDate, translations]\n  )\n\n  // Format date as YYYY-MM-DD HH:MM:SS (consistent with backend)\n  const formatDateForCSV = (dateString: string): string => {\n    if (!dateString) return ''\n    const date = new Date(dateString)\n    const year = date.getFullYear()\n    const month = String(date.getMonth() + 1).padStart(2, '0')\n    const day = String(date.getDate()).padStart(2, '0')\n    const hours = String(date.getHours()).padStart(2, '0')\n    const minutes = String(date.getMinutes()).padStart(2, '0')\n    const seconds = String(date.getSeconds()).padStart(2, '0')\n    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`\n  }\n\n  // CSV escape\n  const escapeCSV = (value: string | number | boolean | null | undefined): string => {\n    if (value === null || value === undefined) return ''\n    const str = String(value)\n    if (str.includes(',') || str.includes('\"') || str.includes('\\n')) {\n      return `\"${str.replace(/\"/g, '\"\"')}\"`\n    }\n    return str\n  }\n\n  // Format array as comma-separated string\n  const formatArrayForCSV = (arr: string[] | undefined): string => {\n    if (!arr || arr.length === 0) return ''\n    return arr.join(',')\n  }\n\n  // Generate CSV content\n  const generateCSV = (items: Endpoint[]): string => {\n    const BOM = '\\ufeff'\n    const headers = [\n      'url', 'host', 'location', 'title', 'status_code',\n      'content_length', 'content_type', 'webserver', 'tech',\n      'response_body', 'vhost', 'matched_gf_patterns', 'created_at'\n    ]\n    \n    const rows = items.map(item => [\n      escapeCSV(item.url),\n      escapeCSV(item.host),\n      escapeCSV(item.location),\n      escapeCSV(item.title),\n      escapeCSV(item.statusCode),\n      escapeCSV(item.contentLength),\n      escapeCSV(item.contentType),\n      escapeCSV(item.webserver),\n      escapeCSV(formatArrayForCSV(item.tech)),\n      escapeCSV(item.responseBody),\n      escapeCSV(item.vhost),\n      escapeCSV(formatDateForCSV(item.createdAt ?? ''))\n    ].join(','))\n    \n    return BOM + [headers.join(','), ...rows].join('\\n')\n  }\n\n  // Download all endpoint URLs\n  const handleDownloadAll = async () => {\n    try {\n      let blob: Blob | null = null\n\n      if (scanId) {\n        const data = await EndpointService.exportEndpointsByScanId(scanId)\n        blob = data\n      } else if (targetId) {\n        const data = await EndpointService.exportEndpointsByTargetId(targetId)\n        blob = data\n      } else {\n        const endpoints: Endpoint[] = (data as any)?.endpoints || []\n        if (!endpoints || endpoints.length === 0) {\n          return\n        }\n        const csvContent = generateCSV(endpoints)\n        blob = new Blob([csvContent], { type: \"text/csv;charset=utf-8\" })\n      }\n\n      if (!blob) return\n\n      const url = URL.createObjectURL(blob)\n      const a = document.createElement(\"a\")\n      const prefix = scanId ? `scan-${scanId}` : targetId ? `target-${targetId}` : \"endpoints\"\n      a.href = url\n      a.download = `${prefix}-endpoints-${Date.now()}.csv`\n      document.body.appendChild(a)\n      a.click()\n      document.body.removeChild(a)\n      URL.revokeObjectURL(url)\n    } catch (error) {\n      console.error(\"Failed to download endpoint list\", error)\n      toast.error(tToast(\"downloadFailed\"))\n    }\n  }\n\n  // Download selected endpoint URLs\n  const handleDownloadSelected = () => {\n    if (selectedEndpoints.length === 0) {\n      return\n    }\n    const csvContent = generateCSV(selectedEndpoints)\n    const blob = new Blob([csvContent], { type: \"text/csv;charset=utf-8\" })\n    const url = URL.createObjectURL(blob)\n    const a = document.createElement(\"a\")\n    const prefix = scanId ? `scan-${scanId}` : targetId ? `target-${targetId}` : \"endpoints\"\n    a.href = url\n    a.download = `${prefix}-endpoints-selected-${Date.now()}.csv`\n    document.body.appendChild(a)\n    a.click()\n    document.body.removeChild(a)\n    URL.revokeObjectURL(url)\n  }\n\n  // Handle bulk delete\n  const handleBulkDelete = async () => {\n    if (selectedEndpoints.length === 0) return\n    \n    setIsDeleting(true)\n    try {\n      const ids = selectedEndpoints.map(e => e.id)\n      const result = await EndpointService.bulkDelete(ids)\n      toast.success(tToast(\"deleteSuccess\", { count: result.deletedCount }))\n      setSelectedEndpoints([])\n      setBulkDeleteDialogOpen(false)\n      refetch()\n    } catch (error) {\n      console.error(\"Failed to delete endpoints\", error)\n      toast.error(tToast(\"deleteFailed\"))\n    } finally {\n      setIsDeleting(false)\n    }\n  }\n\n  // Error state\n  if (error) {\n    return (\n      <div className=\"flex flex-col items-center justify-center py-12\">\n        <div className=\"rounded-full bg-destructive/10 p-3 mb-4\">\n          <AlertTriangle className=\"h-10 w-10 text-destructive\" />\n        </div>\n        <h3 className=\"text-lg font-semibold mb-2\">{tCommon(\"status.error\")}</h3>\n        <p className=\"text-muted-foreground text-center mb-4\">\n          {error.message || tCommon(\"status.error\")}\n        </p>\n        <button\n          onClick={() => refetch()}\n          className=\"px-4 py-2 bg-primary text-primary-foreground rounded-md hover:bg-primary/90\"\n        >\n          {tCommon(\"actions.retry\")}\n        </button>\n      </div>\n    )\n  }\n\n  // Loading state (only show skeleton on first load)\n  if (isLoading && !data) {\n    return (\n      <DataTableSkeleton\n        toolbarButtonCount={2}\n        rows={6}\n        columns={5}\n      />\n    )\n  }\n\n  return (\n    <>\n      <EndpointsDataTable\n        data={data?.endpoints || []}\n        columns={endpointColumns}\n        filterValue={filterQuery}\n        onFilterChange={handleFilterChange}\n        isSearching={isSearching}\n        pagination={pagination}\n        onPaginationChange={handlePaginationChange}\n        totalCount={data?.pagination?.total || 0}\n        totalPages={data?.pagination?.totalPages || 1}\n        onSelectionChange={handleSelectionChange}\n        onDownloadAll={handleDownloadAll}\n        onDownloadSelected={handleDownloadSelected}\n        onBulkDelete={targetId ? () => setBulkDeleteDialogOpen(true) : undefined}\n        onBulkAdd={targetId ? () => setBulkAddDialogOpen(true) : undefined}\n      />\n\n      {/* Bulk add dialog */}\n      {targetId && (\n        <BulkAddUrlsDialog\n          targetId={targetId}\n          assetType=\"endpoint\"\n          targetName={target?.name}\n          targetType={target?.type as TargetType}\n          open={bulkAddDialogOpen}\n          onOpenChange={setBulkAddDialogOpen}\n          onSuccess={() => refetch()}\n        />\n      )}\n\n      {/* Bulk delete confirmation dialog */}\n      <ConfirmDialog\n        open={bulkDeleteDialogOpen}\n        onOpenChange={setBulkDeleteDialogOpen}\n        title={tConfirm(\"deleteTitle\")}\n        description={tCommon(\"actions.deleteConfirmMessage\", { count: selectedEndpoints.length })}\n        onConfirm={handleBulkDelete}\n        loading={isDeleting}\n        variant=\"destructive\"\n      />\n\n      {/* Single delete confirmation dialog */}\n      <AlertDialog open={deleteDialogOpen} onOpenChange={setDeleteDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{tConfirm(\"deleteTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {tConfirm(\"deleteMessage\")}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"actions.cancel\")}</AlertDialogCancel>\n            <AlertDialogAction\n              onClick={confirmDelete}\n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n              disabled={deleteEndpoint.isPending}\n            >\n              {deleteEndpoint.isPending ? (\n                <>\n                  <LoadingSpinner />\n                  {tCommon(\"status.loading\")}\n                </>\n              ) : (\n                tCommon(\"actions.delete\")\n              )}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n    </>\n  )\n}\n"
  },
  {
    "path": "frontend/components/endpoints/index.ts",
    "content": "export { EndpointsDetailView } from './endpoints-detail-view'\nexport { EndpointsDataTable } from './endpoints-data-table'\nexport { createEndpointColumns } from './endpoints-columns'\n"
  },
  {
    "path": "frontend/components/fingerprints/arl-fingerprint-columns.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { ColumnDef } from \"@tanstack/react-table\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport { DataTableColumnHeader } from \"@/components/ui/data-table/column-header\"\nimport { ExpandableCell, ExpandableMonoCell } from \"@/components/ui/data-table/expandable-cell\"\nimport type { ARLFingerprint } from \"@/types/fingerprint.types\"\n\ninterface ColumnOptions {\n  formatDate: (date: string) => string\n}\n\n\n/**\n * Create ARL fingerprint table column definitions\n */\nexport function createARLFingerprintColumns({\n  formatDate,\n}: ColumnOptions): ColumnDef<ARLFingerprint>[] {\n  return [\n    {\n      id: \"select\",\n      header: ({ table }) => (\n        <Checkbox\n          checked={\n            table.getIsAllPageRowsSelected() ||\n            (table.getIsSomePageRowsSelected() && \"indeterminate\")\n          }\n          onCheckedChange={(value) => table.toggleAllPageRowsSelected(!!value)}\n          aria-label=\"Select all\"\n        />\n      ),\n      cell: ({ row }) => (\n        <Checkbox\n          checked={row.getIsSelected()}\n          onCheckedChange={(value) => row.toggleSelected(!!value)}\n          aria-label=\"Select row\"\n        />\n      ),\n      enableSorting: false,\n      enableHiding: false,\n      enableResizing: false,\n      size: 40,\n    },\n    {\n      accessorKey: \"name\",\n      meta: { title: \"Name\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Name\" />\n      ),\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"name\")} maxLines={2} />\n      ),\n      enableResizing: true,\n      size: 250,\n    },\n    {\n      accessorKey: \"rule\",\n      meta: { title: \"Rule\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Rule\" />\n      ),\n      cell: ({ row }) => <ExpandableMonoCell value={row.getValue(\"rule\")} maxLines={3} />,\n      enableResizing: true,\n      size: 500,\n    },\n    {\n      accessorKey: \"createdAt\",\n      meta: { title: \"Created\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Created\" />\n      ),\n      cell: ({ row }) => {\n        const date = row.getValue(\"createdAt\") as string\n        return (\n          <div className=\"text-sm text-muted-foreground\">\n            {formatDate(date)}\n          </div>\n        )\n      },\n      enableResizing: false,\n      size: 160,\n    },\n  ]\n}\n"
  },
  {
    "path": "frontend/components/fingerprints/arl-fingerprint-data-table.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport type { ColumnDef } from \"@tanstack/react-table\"\nimport {\n  IconChevronDown,\n  IconTrash,\n  IconDownload,\n  IconUpload,\n  IconPlus,\n  IconSettings,\n} from \"@tabler/icons-react\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuSeparator,\n  DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\"\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\"\nimport { UnifiedDataTable } from \"@/components/ui/data-table\"\nimport type { FilterField } from \"@/components/common/smart-filter-input\"\nimport type { ARLFingerprint } from \"@/types/fingerprint.types\"\nimport type { PaginationInfo } from \"@/types/common.types\"\nimport { useTranslations } from \"next-intl\"\n\nconst ARL_FILTER_EXAMPLES = [\n  'name=\"Apache\"',\n  'name==\"Nginx\"',\n  'name=\"WordPress\"',\n]\n\ninterface ARLFingerprintDataTableProps {\n  data: ARLFingerprint[]\n  columns: ColumnDef<ARLFingerprint>[]\n  onSelectionChange?: (selectedRows: ARLFingerprint[]) => void\n  filterValue?: string\n  onFilterChange?: (value: string) => void\n  isSearching?: boolean\n  onAddSingle?: () => void\n  onAddImport?: () => void\n  onExport?: () => void\n  onBulkDelete?: () => void\n  onDeleteAll?: () => void\n  totalCount?: number\n  pagination?: { pageIndex: number; pageSize: number }\n  paginationInfo?: PaginationInfo\n  onPaginationChange?: (pagination: { pageIndex: number; pageSize: number }) => void\n}\n\nexport function ARLFingerprintDataTable({\n  data = [],\n  columns,\n  onSelectionChange,\n  filterValue,\n  onFilterChange,\n  isSearching = false,\n  onAddSingle,\n  onAddImport,\n  onExport,\n  onBulkDelete,\n  onDeleteAll,\n  totalCount = 0,\n  pagination: externalPagination,\n  paginationInfo,\n  onPaginationChange,\n}: ARLFingerprintDataTableProps) {\n  const [selectedCount, setSelectedCount] = React.useState(0)\n  const [exportDialogOpen, setExportDialogOpen] = React.useState(false)\n  const [bulkDeleteDialogOpen, setBulkDeleteDialogOpen] = React.useState(false)\n  const [deleteAllDialogOpen, setDeleteAllDialogOpen] = React.useState(false)\n  const t = useTranslations(\"tools.fingerprints\")\n  const tCommon = useTranslations(\"common.actions\")\n\n  const arlFilterFields: FilterField[] = React.useMemo(() => [\n    { key: \"name\", label: \"Name\", description: t(\"filter.arl.name\") },\n  ], [t])\n\n  const handleSmartSearch = (rawQuery: string) => {\n    if (onFilterChange) {\n      onFilterChange(rawQuery)\n    }\n  }\n\n  const handleSelectionChange = (rows: ARLFingerprint[]) => {\n    setSelectedCount(rows.length)\n    onSelectionChange?.(rows)\n  }\n\n  const toolbarRightContent = (\n    <>\n      <DropdownMenu>\n        <DropdownMenuTrigger asChild>\n          <Button variant=\"outline\" size=\"sm\">\n            <IconSettings className=\"h-4 w-4\" />\n            {t(\"actions.operations\")}\n            <IconChevronDown className=\"h-4 w-4\" />\n          </Button>\n        </DropdownMenuTrigger>\n        <DropdownMenuContent align=\"end\" className=\"w-48\">\n          {onExport && (\n            <DropdownMenuItem onClick={() => setExportDialogOpen(true)}>\n              <IconDownload className=\"h-4 w-4\" />\n              {t(\"actions.exportAll\")} (YAML)\n            </DropdownMenuItem>\n          )}\n          <DropdownMenuSeparator />\n          {onBulkDelete && (\n            <DropdownMenuItem \n              onClick={() => setBulkDeleteDialogOpen(true)}\n              disabled={selectedCount === 0}\n              className=\"text-destructive focus:text-destructive\"\n            >\n              <IconTrash className=\"h-4 w-4\" />\n              {t(\"actions.deleteSelected\")} ({selectedCount})\n            </DropdownMenuItem>\n          )}\n          {onDeleteAll && (\n            <DropdownMenuItem \n              onClick={() => setDeleteAllDialogOpen(true)}\n              className=\"text-destructive focus:text-destructive\"\n            >\n              <IconTrash className=\"h-4 w-4\" />\n              {t(\"actions.deleteAll\")}\n            </DropdownMenuItem>\n          )}\n        </DropdownMenuContent>\n      </DropdownMenu>\n\n      {(onAddSingle || onAddImport) && (\n        <DropdownMenu>\n          <DropdownMenuTrigger asChild>\n            <Button size=\"sm\">\n              <IconPlus className=\"h-4 w-4\" />\n              {t(\"actions.addFingerprint\")}\n              <IconChevronDown className=\"h-4 w-4\" />\n            </Button>\n          </DropdownMenuTrigger>\n          <DropdownMenuContent align=\"end\" className=\"w-40\">\n            {onAddSingle && (\n              <DropdownMenuItem onClick={onAddSingle}>\n                <IconPlus className=\"h-4 w-4\" />\n                {t(\"actions.addSingle\")}\n              </DropdownMenuItem>\n            )}\n            {onAddImport && (\n              <DropdownMenuItem onClick={onAddImport}>\n                <IconUpload className=\"h-4 w-4\" />\n                {t(\"actions.importFile\")} (YAML)\n              </DropdownMenuItem>\n            )}\n          </DropdownMenuContent>\n        </DropdownMenu>\n      )}\n    </>\n  )\n\n  return (\n    <>\n      <UnifiedDataTable\n        data={data}\n        columns={columns}\n        getRowId={(row) => String(row.id)}\n        pagination={externalPagination}\n        paginationInfo={paginationInfo}\n        onPaginationChange={onPaginationChange}\n        searchMode=\"smart\"\n        searchValue={filterValue}\n        onSearch={handleSmartSearch}\n        isSearching={isSearching}\n        filterFields={arlFilterFields}\n        filterExamples={ARL_FILTER_EXAMPLES}\n        onSelectionChange={handleSelectionChange}\n        showBulkDelete={false}\n        showAddButton={false}\n        emptyMessage=\"No results\"\n        toolbarRight={toolbarRightContent}\n      />\n\n      <AlertDialog open={exportDialogOpen} onOpenChange={setExportDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{t(\"dialogs.exportTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {t(\"dialogs.exportDesc\", { count: totalCount })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"cancel\")}</AlertDialogCancel>\n            <AlertDialogAction onClick={() => { onExport?.(); setExportDialogOpen(false); }}>\n              {t(\"dialogs.confirmExport\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n\n      <AlertDialog open={bulkDeleteDialogOpen} onOpenChange={setBulkDeleteDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{t(\"dialogs.deleteSelectedTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {t(\"dialogs.deleteSelectedDesc\", { count: selectedCount })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"cancel\")}</AlertDialogCancel>\n            <AlertDialogAction \n              onClick={() => { onBulkDelete?.(); setBulkDeleteDialogOpen(false); }}\n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n            >\n              {t(\"dialogs.confirmDelete\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n\n      <AlertDialog open={deleteAllDialogOpen} onOpenChange={setDeleteAllDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{t(\"dialogs.deleteAllTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {t(\"dialogs.deleteAllDesc\", { count: totalCount })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"cancel\")}</AlertDialogCancel>\n            <AlertDialogAction \n              onClick={() => { onDeleteAll?.(); setDeleteAllDialogOpen(false); }}\n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n            >\n              {t(\"dialogs.confirmDelete\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n    </>\n  )\n}\n"
  },
  {
    "path": "frontend/components/fingerprints/arl-fingerprint-dialog.tsx",
    "content": "\"use client\"\n\nimport React, { useEffect } from \"react\"\nimport { useForm } from \"react-hook-form\"\nimport { toast } from \"sonner\"\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n} from \"@/components/ui/dialog\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { Textarea } from \"@/components/ui/textarea\"\nimport {\n  useCreateARLFingerprint,\n  useUpdateARLFingerprint,\n} from \"@/hooks/use-fingerprints\"\nimport type { ARLFingerprint } from \"@/types/fingerprint.types\"\nimport { useTranslations } from \"next-intl\"\n\ninterface ARLFingerprintDialogProps {\n  open: boolean\n  onOpenChange: (open: boolean) => void\n  fingerprint?: ARLFingerprint | null\n  onSuccess?: () => void\n}\n\ninterface FormData {\n  name: string\n  rule: string\n}\n\nexport function ARLFingerprintDialog({\n  open,\n  onOpenChange,\n  fingerprint,\n  onSuccess,\n}: ARLFingerprintDialogProps) {\n  const isEdit = !!fingerprint\n  const t = useTranslations(\"tools.fingerprints\")\n  const tCommon = useTranslations(\"common.actions\")\n\n  const createMutation = useCreateARLFingerprint()\n  const updateMutation = useUpdateARLFingerprint()\n\n  const {\n    register,\n    handleSubmit,\n    reset,\n    formState: { errors, isSubmitting },\n  } = useForm<FormData>({\n    defaultValues: {\n      name: \"\",\n      rule: \"\",\n    },\n  })\n\n  useEffect(() => {\n    if (fingerprint) {\n      reset({\n        name: fingerprint.name,\n        rule: fingerprint.rule,\n      })\n    } else {\n      reset({\n        name: \"\",\n        rule: \"\",\n      })\n    }\n  }, [fingerprint, reset])\n\n  const onSubmit = async (data: FormData) => {\n    const payload = {\n      name: data.name.trim(),\n      rule: data.rule.trim(),\n    }\n\n    try {\n      if (isEdit && fingerprint) {\n        await updateMutation.mutateAsync({ id: fingerprint.id, data: payload })\n        toast.success(t(\"toast.updateSuccess\"))\n      } else {\n        await createMutation.mutateAsync(payload)\n        toast.success(t(\"toast.createSuccess\"))\n      }\n      onOpenChange(false)\n      onSuccess?.()\n    } catch (error: any) {\n      toast.error(error.message || (isEdit ? t(\"toast.updateFailed\") : t(\"toast.createFailed\")))\n    }\n  }\n\n  return (\n    <Dialog open={open} onOpenChange={onOpenChange}>\n      <DialogContent className=\"sm:max-w-[600px] max-h-[80vh] overflow-y-auto\">\n        <DialogHeader>\n          <DialogTitle>{isEdit ? t(\"arl.editTitle\") : t(\"arl.addTitle\")}</DialogTitle>\n          <DialogDescription>\n            {isEdit ? t(\"arl.editDesc\") : t(\"arl.addDesc\")}\n          </DialogDescription>\n        </DialogHeader>\n\n        <form onSubmit={handleSubmit(onSubmit)} className=\"space-y-4\">\n          {/* Name */}\n          <div className=\"space-y-2\">\n            <Label htmlFor=\"name\">{t(\"form.name\")} *</Label>\n            <Input\n              id=\"name\"\n              placeholder={t(\"form.arlNamePlaceholder\")}\n              {...register(\"name\", { required: t(\"form.nameRequired\") })}\n            />\n            {errors.name && (\n              <p className=\"text-sm text-destructive\">{errors.name.message}</p>\n            )}\n          </div>\n\n          {/* Rule */}\n          <div className=\"space-y-2\">\n            <Label htmlFor=\"rule\">{t(\"form.arlRule\")} *</Label>\n            <Textarea\n              id=\"rule\"\n              placeholder={t(\"form.arlRulePlaceholder\")}\n              className=\"font-mono text-sm min-h-[120px]\"\n              {...register(\"rule\", { required: t(\"form.arlRuleRequired\") })}\n            />\n            <p className=\"text-xs text-muted-foreground\">\n              {t(\"form.arlRuleHint\")}\n            </p>\n            {errors.rule && (\n              <p className=\"text-sm text-destructive\">{errors.rule.message}</p>\n            )}\n          </div>\n\n          <DialogFooter>\n            <Button type=\"button\" variant=\"outline\" onClick={() => onOpenChange(false)}>\n              {tCommon(\"cancel\")}\n            </Button>\n            <Button type=\"submit\" disabled={isSubmitting}>\n              {isSubmitting ? \"...\" : isEdit ? tCommon(\"save\") : tCommon(\"create\")}\n            </Button>\n          </DialogFooter>\n        </form>\n      </DialogContent>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "frontend/components/fingerprints/arl-fingerprint-view.tsx",
    "content": "\"use client\"\n\nimport React, { useState, useMemo } from \"react\"\nimport { AlertTriangle } from \"lucide-react\"\nimport { toast } from \"sonner\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport {\n  useARLFingerprints,\n  useBulkDeleteARLFingerprints,\n  useDeleteAllARLFingerprints,\n} from \"@/hooks/use-fingerprints\"\nimport { FingerprintService } from \"@/services/fingerprint.service\"\nimport { ARLFingerprintDataTable } from \"./arl-fingerprint-data-table\"\nimport { createARLFingerprintColumns } from \"./arl-fingerprint-columns\"\nimport { ARLFingerprintDialog } from \"./arl-fingerprint-dialog\"\nimport { ImportFingerprintDialog } from \"./import-fingerprint-dialog\"\nimport { DataTableSkeleton } from \"@/components/ui/data-table-skeleton\"\nimport { getDateLocale } from \"@/lib/date-utils\"\nimport type { ARLFingerprint } from \"@/types/fingerprint.types\"\n\nexport function ARLFingerprintView() {\n  const tFingerprints = useTranslations(\"tools.fingerprints\")\n  const locale = useLocale()\n  \n  const [selectedFingerprints, setSelectedFingerprints] = useState<ARLFingerprint[]>([])\n  const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 10 })\n  const [filterQuery, setFilterQuery] = useState(\"\")\n  const [isSearching, setIsSearching] = useState(false)\n  const [addDialogOpen, setAddDialogOpen] = useState(false)\n  const [importDialogOpen, setImportDialogOpen] = useState(false)\n\n  const { data, isLoading, isFetching, error, refetch } = useARLFingerprints({\n    page: pagination.pageIndex + 1,\n    pageSize: pagination.pageSize,\n    filter: filterQuery || undefined,\n  })\n\n  const bulkDeleteMutation = useBulkDeleteARLFingerprints()\n  const deleteAllMutation = useDeleteAllARLFingerprints()\n\n  React.useEffect(() => {\n    if (!isFetching && isSearching) {\n      setIsSearching(false)\n    }\n  }, [isFetching, isSearching])\n\n  const handleFilterChange = (value: string) => {\n    setIsSearching(true)\n    setFilterQuery(value)\n    setPagination((prev) => ({ ...prev, pageIndex: 0 }))\n  }\n\n  const formatDate = (dateString: string): string => {\n    return new Date(dateString).toLocaleString(getDateLocale(locale), {\n      year: \"numeric\",\n      month: \"numeric\",\n      day: \"numeric\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      hour12: false,\n    })\n  }\n\n  const handleExport = async () => {\n    try {\n      const blob = await FingerprintService.exportARLFingerprints()\n      const url = URL.createObjectURL(blob)\n      const a = document.createElement(\"a\")\n      a.href = url\n      a.download = `arl-fingerprints-${Date.now()}.yaml`\n      document.body.appendChild(a)\n      a.click()\n      document.body.removeChild(a)\n      URL.revokeObjectURL(url)\n      toast.success(tFingerprints(\"toast.exportSuccess\"))\n    } catch (error: any) {\n      toast.error(error.message || tFingerprints(\"toast.exportFailed\"))\n    }\n  }\n\n  const handleBulkDelete = async () => {\n    if (selectedFingerprints.length === 0) return\n    try {\n      const ids = selectedFingerprints.map((f) => f.id)\n      const result = await bulkDeleteMutation.mutateAsync(ids)\n      toast.success(tFingerprints(\"toast.deleteSuccess\", { count: result.deleted }))\n      setSelectedFingerprints([])\n    } catch (error: any) {\n      toast.error(error.message || tFingerprints(\"toast.deleteFailed\"))\n    }\n  }\n\n  const handleDeleteAll = async () => {\n    try {\n      const result = await deleteAllMutation.mutateAsync()\n      toast.success(tFingerprints(\"toast.deleteSuccess\", { count: result.deleted }))\n    } catch (error: any) {\n      toast.error(error.message || tFingerprints(\"toast.deleteFailed\"))\n    }\n  }\n\n  const columns = useMemo(\n    () => createARLFingerprintColumns({ formatDate }),\n    []\n  )\n\n  const fingerprints: ARLFingerprint[] = useMemo(() => {\n    if (!data?.results) return []\n    return data.results\n  }, [data])\n\n  const total = data?.total ?? 0\n  const page = data?.page ?? 1\n  const serverPageSize = data?.pageSize ?? 10\n  const totalPages = data?.totalPages ?? 1\n  \n  const paginationInfo = useMemo(() => ({\n    total,\n    page,\n    pageSize: serverPageSize,\n    totalPages,\n  }), [total, page, serverPageSize, totalPages])\n\n  if (error) {\n    return (\n      <div className=\"flex flex-col items-center justify-center py-12\">\n        <div className=\"rounded-full bg-destructive/10 p-3 mb-4\">\n          <AlertTriangle className=\"h-10 w-10 text-destructive\" />\n        </div>\n        <h3 className=\"text-lg font-semibold mb-2\">{tFingerprints(\"loadFailed\")}</h3>\n        <p className=\"text-muted-foreground text-center mb-4\">\n          {error.message || tFingerprints(\"loadError\")}\n        </p>\n        <button\n          onClick={() => refetch()}\n          className=\"px-4 py-2 bg-primary text-primary-foreground rounded-md hover:bg-primary/90\"\n        >\n          {tFingerprints(\"reload\")}\n        </button>\n      </div>\n    )\n  }\n\n  if (isLoading && !data) {\n    return <DataTableSkeleton toolbarButtonCount={3} rows={6} columns={4} />\n  }\n\n  return (\n    <>\n      <ARLFingerprintDataTable\n        data={fingerprints}\n        columns={columns}\n        onSelectionChange={setSelectedFingerprints}\n        filterValue={filterQuery}\n        onFilterChange={handleFilterChange}\n        isSearching={isSearching}\n        onAddSingle={() => setAddDialogOpen(true)}\n        onAddImport={() => setImportDialogOpen(true)}\n        onExport={handleExport}\n        onBulkDelete={handleBulkDelete}\n        onDeleteAll={handleDeleteAll}\n        totalCount={data?.total || 0}\n        pagination={pagination}\n        paginationInfo={paginationInfo}\n        onPaginationChange={setPagination}\n      />\n\n      <ARLFingerprintDialog\n        open={addDialogOpen}\n        onOpenChange={setAddDialogOpen}\n        onSuccess={() => refetch()}\n      />\n\n      <ImportFingerprintDialog\n        open={importDialogOpen}\n        onOpenChange={setImportDialogOpen}\n        fingerprintType=\"arl\"\n        acceptedFileTypes=\".yaml,.yml,.json\"\n        onSuccess={() => refetch()}\n      />\n    </>\n  )\n}\n"
  },
  {
    "path": "frontend/components/fingerprints/ehole-fingerprint-columns.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { ColumnDef } from \"@tanstack/react-table\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { DataTableColumnHeader } from \"@/components/ui/data-table/column-header\"\nimport { ExpandableCell } from \"@/components/ui/data-table/expandable-cell\"\nimport { ChevronDown, ChevronUp } from \"lucide-react\"\nimport { useTranslations } from \"next-intl\"\nimport type { EholeFingerprint } from \"@/types/fingerprint.types\"\n\ninterface ColumnOptions {\n  formatDate: (date: string) => string\n}\n\n/**\n * Keyword list cell - displays 3 by default, expandable for more\n */\nfunction KeywordListCell({ keywords }: { keywords: string[] }) {\n  const t = useTranslations(\"tooltips\")\n  const [expanded, setExpanded] = React.useState(false)\n  \n  if (!keywords || keywords.length === 0) return <span className=\"text-muted-foreground\">-</span>\n  \n  const displayKeywords = expanded ? keywords : keywords.slice(0, 3)\n  const hasMore = keywords.length > 3\n  \n  return (\n    <div className=\"flex flex-col gap-1\">\n      <div className=\"font-mono text-xs space-y-0.5\">\n        {displayKeywords.map((kw, idx) => (\n          <div key={idx} className={expanded ? \"break-all\" : \"truncate\"}>\n            {kw}\n          </div>\n        ))}\n      </div>\n      {hasMore && (\n        <button\n          onClick={() => setExpanded(!expanded)}\n          className=\"text-xs text-primary hover:underline self-start flex items-center gap-1\"\n        >\n          {expanded ? (\n            <>\n              <ChevronUp className=\"h-3 w-3\" />\n              {t(\"collapse\")}\n            </>\n          ) : (\n            <>\n              <ChevronDown className=\"h-3 w-3\" />\n              {t(\"expand\")}\n            </>\n          )}\n        </button>\n      )}\n    </div>\n  )\n}\n\n/**\n * Create EHole fingerprint table column definitions\n */\nexport function createEholeFingerprintColumns({\n  formatDate,\n}: ColumnOptions): ColumnDef<EholeFingerprint>[] {\n  return [\n    {\n      id: \"select\",\n      header: ({ table }) => (\n        <Checkbox\n          checked={\n            table.getIsAllPageRowsSelected() ||\n            (table.getIsSomePageRowsSelected() && \"indeterminate\")\n          }\n          onCheckedChange={(value) => table.toggleAllPageRowsSelected(!!value)}\n          aria-label=\"Select all\"\n        />\n      ),\n      cell: ({ row }) => (\n        <Checkbox\n          checked={row.getIsSelected()}\n          onCheckedChange={(value) => row.toggleSelected(!!value)}\n          aria-label=\"Select row\"\n        />\n      ),\n      enableSorting: false,\n      enableHiding: false,\n      enableResizing: false,\n      size: 40,\n    },\n    {\n      accessorKey: \"cms\",\n      meta: { title: \"CMS\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"CMS\" />\n      ),\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"cms\")} maxLines={2} />\n      ),\n      enableResizing: true,\n      size: 200,\n    },\n    {\n      accessorKey: \"method\",\n      meta: { title: \"Method\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Method\" />\n      ),\n      cell: ({ row }) => {\n        const method = row.getValue(\"method\") as string\n        return (\n          <Badge variant=\"outline\" className=\"font-mono text-xs\">\n            {method}\n          </Badge>\n        )\n      },\n      enableResizing: false,\n      size: 120,\n    },\n    {\n      accessorKey: \"location\",\n      meta: { title: \"Location\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Location\" />\n      ),\n      cell: ({ row }) => {\n        const location = row.getValue(\"location\") as string\n        return (\n          <Badge variant=\"secondary\" className=\"font-mono text-xs\">\n            {location}\n          </Badge>\n        )\n      },\n      enableResizing: false,\n      size: 100,\n    },\n    {\n      accessorKey: \"keyword\",\n      meta: { title: \"Keyword\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Keyword\" />\n      ),\n      cell: ({ row }) => <KeywordListCell keywords={row.getValue(\"keyword\") || []} />,\n      enableResizing: true,\n      size: 300,\n    },\n    {\n      accessorKey: \"type\",\n      meta: { title: \"Type\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Type\" />\n      ),\n      cell: ({ row }) => {\n        const type = row.getValue(\"type\") as string\n        if (!type || type === \"-\") return \"-\"\n        return <Badge variant=\"outline\">{type}</Badge>\n      },\n      enableResizing: false,\n      size: 100,\n    },\n    {\n      accessorKey: \"isImportant\",\n      meta: { title: \"Important\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Important\" />\n      ),\n      cell: ({ row }) => {\n        const isImportant = row.getValue(\"isImportant\")\n        return <span>{String(isImportant)}</span>\n      },\n      enableResizing: false,\n      size: 100,\n    },\n    {\n      accessorKey: \"createdAt\",\n      meta: { title: \"Created\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Created\" />\n      ),\n      cell: ({ row }) => {\n        const date = row.getValue(\"createdAt\") as string\n        return (\n          <div className=\"text-sm text-muted-foreground\">\n            {formatDate(date)}\n          </div>\n        )\n      },\n      enableResizing: false,\n      size: 160,\n    },\n  ]\n}\n"
  },
  {
    "path": "frontend/components/fingerprints/ehole-fingerprint-data-table.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport type { ColumnDef } from \"@tanstack/react-table\"\nimport {\n  IconChevronDown,\n  IconTrash,\n  IconDownload,\n  IconUpload,\n  IconPlus,\n  IconSettings,\n} from \"@tabler/icons-react\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuSeparator,\n  DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\"\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\"\nimport { UnifiedDataTable } from \"@/components/ui/data-table\"\nimport type { FilterField } from \"@/components/common/smart-filter-input\"\nimport type { EholeFingerprint } from \"@/types/fingerprint.types\"\nimport type { PaginationInfo } from \"@/types/common.types\"\nimport { useTranslations } from \"next-intl\"\n\nconst EHOLE_FILTER_EXAMPLES = [\n  'cms=\"WordPress\"',\n  'type==\"CMS\"',\n  'method=\"keyword\" location=\"body\"',\n  'isImportant=\"true\"',\n]\n\ninterface EholeFingerprintDataTableProps {\n  data: EholeFingerprint[]\n  columns: ColumnDef<EholeFingerprint>[]\n  onSelectionChange?: (selectedRows: EholeFingerprint[]) => void\n  filterValue?: string\n  onFilterChange?: (value: string) => void\n  isSearching?: boolean\n  onAddSingle?: () => void\n  onAddImport?: () => void\n  onExport?: () => void\n  onBulkDelete?: () => void\n  onDeleteAll?: () => void\n  totalCount?: number\n  pagination?: { pageIndex: number; pageSize: number }\n  paginationInfo?: PaginationInfo\n  onPaginationChange?: (pagination: { pageIndex: number; pageSize: number }) => void\n}\n\nexport function EholeFingerprintDataTable({\n  data = [],\n  columns,\n  onSelectionChange,\n  filterValue,\n  onFilterChange,\n  isSearching = false,\n  onAddSingle,\n  onAddImport,\n  onExport,\n  onBulkDelete,\n  onDeleteAll,\n  totalCount = 0,\n  pagination: externalPagination,\n  paginationInfo,\n  onPaginationChange,\n}: EholeFingerprintDataTableProps) {\n  const [selectedCount, setSelectedCount] = React.useState(0)\n  const [exportDialogOpen, setExportDialogOpen] = React.useState(false)\n  const [bulkDeleteDialogOpen, setBulkDeleteDialogOpen] = React.useState(false)\n  const [deleteAllDialogOpen, setDeleteAllDialogOpen] = React.useState(false)\n  const t = useTranslations(\"tools.fingerprints\")\n  const tCommon = useTranslations(\"common.actions\")\n\n  // EHole filter field configuration (using translations)\n  const eholeFilterFields: FilterField[] = React.useMemo(() => [\n    { key: \"cms\", label: \"CMS\", description: t(\"filter.ehole.cms\") },\n    { key: \"method\", label: \"Method\", description: t(\"filter.ehole.method\") },\n    { key: \"location\", label: \"Location\", description: t(\"filter.ehole.location\") },\n    { key: \"type\", label: \"Type\", description: t(\"filter.ehole.type\") },\n    { key: \"isImportant\", label: \"Important\", description: t(\"filter.ehole.isImportant\") },\n  ], [t])\n\n  const handleSmartSearch = (rawQuery: string) => {\n    if (onFilterChange) {\n      onFilterChange(rawQuery)\n    }\n  }\n\n  const handleSelectionChange = (rows: EholeFingerprint[]) => {\n    setSelectedCount(rows.length)\n    onSelectionChange?.(rows)\n  }\n\n  // Custom toolbar right-side buttons\n  const toolbarRightContent = (\n    <>\n      {/* Operations menu */}\n      <DropdownMenu>\n        <DropdownMenuTrigger asChild>\n          <Button variant=\"outline\" size=\"sm\">\n            <IconSettings className=\"h-4 w-4\" />\n            {t(\"actions.operations\")}\n            <IconChevronDown className=\"h-4 w-4\" />\n          </Button>\n        </DropdownMenuTrigger>\n        <DropdownMenuContent align=\"end\" className=\"w-48\">\n          {onExport && (\n            <DropdownMenuItem onClick={() => setExportDialogOpen(true)}>\n              <IconDownload className=\"h-4 w-4\" />\n              {t(\"actions.exportAll\")}\n            </DropdownMenuItem>\n          )}\n          <DropdownMenuSeparator />\n          {onBulkDelete && (\n            <DropdownMenuItem \n              onClick={() => setBulkDeleteDialogOpen(true)}\n              disabled={selectedCount === 0}\n              className=\"text-destructive focus:text-destructive\"\n            >\n              <IconTrash className=\"h-4 w-4\" />\n              {t(\"actions.deleteSelected\")} ({selectedCount})\n            </DropdownMenuItem>\n          )}\n          {onDeleteAll && (\n            <DropdownMenuItem \n              onClick={() => setDeleteAllDialogOpen(true)}\n              className=\"text-destructive focus:text-destructive\"\n            >\n              <IconTrash className=\"h-4 w-4\" />\n              {t(\"actions.deleteAll\")}\n            </DropdownMenuItem>\n          )}\n        </DropdownMenuContent>\n      </DropdownMenu>\n\n      {/* Add fingerprint */}\n      {(onAddSingle || onAddImport) && (\n        <DropdownMenu>\n          <DropdownMenuTrigger asChild>\n            <Button size=\"sm\">\n              <IconPlus className=\"h-4 w-4\" />\n              {t(\"actions.addFingerprint\")}\n              <IconChevronDown className=\"h-4 w-4\" />\n            </Button>\n          </DropdownMenuTrigger>\n          <DropdownMenuContent align=\"end\" className=\"w-40\">\n            {onAddSingle && (\n              <DropdownMenuItem onClick={onAddSingle}>\n                <IconPlus className=\"h-4 w-4\" />\n                {t(\"actions.addSingle\")}\n              </DropdownMenuItem>\n            )}\n            {onAddImport && (\n              <DropdownMenuItem onClick={onAddImport}>\n                <IconUpload className=\"h-4 w-4\" />\n                {t(\"actions.importFile\")}\n              </DropdownMenuItem>\n            )}\n          </DropdownMenuContent>\n        </DropdownMenu>\n      )}\n    </>\n  )\n\n  return (\n    <>\n      <UnifiedDataTable\n        data={data}\n        columns={columns}\n        getRowId={(row) => String(row.id)}\n        // Pagination\n        pagination={externalPagination}\n        paginationInfo={paginationInfo}\n        onPaginationChange={onPaginationChange}\n        // Smart filter\n        searchMode=\"smart\"\n        searchValue={filterValue}\n        onSearch={handleSmartSearch}\n        isSearching={isSearching}\n        filterFields={eholeFilterFields}\n        filterExamples={EHOLE_FILTER_EXAMPLES}\n        // Selection\n        onSelectionChange={handleSelectionChange}\n        // Bulk operations - use custom buttons\n        showBulkDelete={false}\n        showAddButton={false}\n        // Empty state\n        emptyMessage=\"No results\"\n        // Custom toolbar buttons\n        toolbarRight={toolbarRightContent}\n      />\n\n      {/* Export confirmation dialog */}\n      <AlertDialog open={exportDialogOpen} onOpenChange={setExportDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{t(\"dialogs.exportTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {t(\"dialogs.exportDesc\", { count: totalCount })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"cancel\")}</AlertDialogCancel>\n            <AlertDialogAction onClick={() => { onExport?.(); setExportDialogOpen(false); }}>\n              {t(\"dialogs.confirmExport\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n\n      {/* Delete selected confirmation dialog */}\n      <AlertDialog open={bulkDeleteDialogOpen} onOpenChange={setBulkDeleteDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{t(\"dialogs.deleteSelectedTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {t(\"dialogs.deleteSelectedDesc\", { count: selectedCount })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"cancel\")}</AlertDialogCancel>\n            <AlertDialogAction \n              onClick={() => { onBulkDelete?.(); setBulkDeleteDialogOpen(false); }}\n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n            >\n              {t(\"dialogs.confirmDelete\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n\n      {/* Delete all confirmation dialog */}\n      <AlertDialog open={deleteAllDialogOpen} onOpenChange={setDeleteAllDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{t(\"dialogs.deleteAllTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {t(\"dialogs.deleteAllDesc\", { count: totalCount })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"cancel\")}</AlertDialogCancel>\n            <AlertDialogAction \n              onClick={() => { onDeleteAll?.(); setDeleteAllDialogOpen(false); }}\n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n            >\n              {t(\"dialogs.confirmDelete\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n    </>\n  )\n}\n"
  },
  {
    "path": "frontend/components/fingerprints/ehole-fingerprint-dialog.tsx",
    "content": "\"use client\"\n\nimport React, { useEffect } from \"react\"\nimport { useForm } from \"react-hook-form\"\nimport { toast } from \"sonner\"\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n} from \"@/components/ui/dialog\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from \"@/components/ui/select\"\nimport {\n  useCreateEholeFingerprint,\n  useUpdateEholeFingerprint,\n} from \"@/hooks/use-fingerprints\"\nimport type { EholeFingerprint } from \"@/types/fingerprint.types\"\nimport { useTranslations } from \"next-intl\"\n\ninterface EholeFingerprintDialogProps {\n  open: boolean\n  onOpenChange: (open: boolean) => void\n  fingerprint?: EholeFingerprint | null\n  onSuccess?: () => void\n}\n\ninterface FormData {\n  cms: string\n  method: string\n  location: string\n  keyword: string\n  type: string\n  isImportant: boolean\n}\n\nconst METHOD_OPTIONS = [\n  { value: \"keyword\", label: \"keyword\" },\n  { value: \"faviconhash\", label: \"faviconhash\" },\n  { value: \"icon_hash\", label: \"icon_hash\" },\n  { value: \"header\", label: \"header\" },\n]\n\nconst LOCATION_OPTIONS = [\n  { value: \"body\", label: \"body\" },\n  { value: \"header\", label: \"header\" },\n  { value: \"title\", label: \"title\" },\n]\n\nexport function EholeFingerprintDialog({\n  open,\n  onOpenChange,\n  fingerprint,\n  onSuccess,\n}: EholeFingerprintDialogProps) {\n  const isEdit = !!fingerprint\n  const t = useTranslations(\"tools.fingerprints\")\n  const tCommon = useTranslations(\"common.actions\")\n  const tColumns = useTranslations(\"columns.fingerprint\")\n\n  const createMutation = useCreateEholeFingerprint()\n  const updateMutation = useUpdateEholeFingerprint()\n\n  const {\n    register,\n    handleSubmit,\n    reset,\n    setValue,\n    watch,\n    formState: { errors, isSubmitting },\n  } = useForm<FormData>({\n    defaultValues: {\n      cms: \"\",\n      method: \"keyword\",\n      location: \"body\",\n      keyword: \"\",\n      type: \"-\",\n      isImportant: false,\n    },\n  })\n\n  useEffect(() => {\n    if (fingerprint) {\n      reset({\n        cms: fingerprint.cms,\n        method: fingerprint.method,\n        location: fingerprint.location,\n        keyword: fingerprint.keyword.join(\", \"),\n        type: fingerprint.type || \"-\",\n        isImportant: fingerprint.isImportant,\n      })\n    } else {\n      reset({\n        cms: \"\",\n        method: \"keyword\",\n        location: \"body\",\n        keyword: \"\",\n        type: \"-\",\n        isImportant: false,\n      })\n    }\n  }, [fingerprint, reset])\n\n  const onSubmit = async (data: FormData) => {\n    const keywordArray = data.keyword\n      .split(\",\")\n      .map((k) => k.trim())\n      .filter((k) => k.length > 0)\n\n    if (keywordArray.length === 0) {\n      toast.error(t(\"form.keywordRequired\"))\n      return\n    }\n\n    const payload = {\n      cms: data.cms.trim(),\n      method: data.method,\n      location: data.location,\n      keyword: keywordArray,\n      type: data.type || \"-\",\n      isImportant: data.isImportant,\n    }\n\n    try {\n      if (isEdit && fingerprint) {\n        await updateMutation.mutateAsync({ id: fingerprint.id, data: payload })\n        toast.success(t(\"toast.updateSuccess\"))\n      } else {\n        await createMutation.mutateAsync(payload)\n        toast.success(t(\"toast.createSuccess\"))\n      }\n      onOpenChange(false)\n      onSuccess?.()\n    } catch (error: any) {\n      toast.error(error.message || (isEdit ? t(\"toast.updateFailed\") : t(\"toast.createFailed\")))\n    }\n  }\n\n  const method = watch(\"method\")\n  const location = watch(\"location\")\n  const isImportant = watch(\"isImportant\")\n\n  return (\n    <Dialog open={open} onOpenChange={onOpenChange}>\n      <DialogContent className=\"sm:max-w-[600px] max-h-[80vh] overflow-y-auto\">\n        <DialogHeader>\n          <DialogTitle>{isEdit ? t(\"ehole.editTitle\") : t(\"ehole.addTitle\")}</DialogTitle>\n          <DialogDescription>\n            {isEdit ? t(\"ehole.editDesc\") : t(\"ehole.addDesc\")}\n          </DialogDescription>\n        </DialogHeader>\n\n        <form onSubmit={handleSubmit(onSubmit)} className=\"space-y-4\">\n          {/* CMS 名称 */}\n          <div className=\"space-y-2\">\n            <Label htmlFor=\"cms\">{tColumns(\"cms\")} *</Label>\n            <Input\n              id=\"cms\"\n              placeholder={t(\"form.cmsPlaceholder\")}\n              {...register(\"cms\", { required: t(\"form.cmsRequired\") })}\n            />\n            {errors.cms && (\n              <p className=\"text-sm text-destructive\">{errors.cms.message}</p>\n            )}\n          </div>\n\n          {/* 匹配方式 & 匹配位置 */}\n          <div className=\"grid grid-cols-2 gap-4\">\n            <div className=\"space-y-2\">\n              <Label>{tColumns(\"method\")} *</Label>\n              <Select value={method} onValueChange={(v) => setValue(\"method\", v)}>\n                <SelectTrigger>\n                  <SelectValue />\n                </SelectTrigger>\n                <SelectContent>\n                  {METHOD_OPTIONS.map((opt) => (\n                    <SelectItem key={opt.value} value={opt.value}>\n                      {opt.label}\n                    </SelectItem>\n                  ))}\n                </SelectContent>\n              </Select>\n            </div>\n\n            <div className=\"space-y-2\">\n              <Label>{t(\"form.location\")} *</Label>\n              <Select value={location} onValueChange={(v) => setValue(\"location\", v)}>\n                <SelectTrigger>\n                  <SelectValue />\n                </SelectTrigger>\n                <SelectContent>\n                  {LOCATION_OPTIONS.map((opt) => (\n                    <SelectItem key={opt.value} value={opt.value}>\n                      {opt.label}\n                    </SelectItem>\n                  ))}\n                </SelectContent>\n              </Select>\n            </div>\n          </div>\n\n          {/* 关键词 */}\n          <div className=\"space-y-2\">\n            <Label htmlFor=\"keyword\">{tColumns(\"keyword\")} *</Label>\n            <Input\n              id=\"keyword\"\n              placeholder={t(\"form.keywordPlaceholder\")}\n              {...register(\"keyword\", { required: t(\"form.keywordRequired\") })}\n            />\n            {errors.keyword && (\n              <p className=\"text-sm text-destructive\">{errors.keyword.message}</p>\n            )}\n          </div>\n\n          {/* 类型 & 重点资产 */}\n          <div className=\"grid grid-cols-2 gap-4\">\n            <div className=\"space-y-2\">\n              <Label htmlFor=\"type\">{tColumns(\"type\") || \"Type\"}</Label>\n              <Input\n                id=\"type\"\n                placeholder={t(\"form.typePlaceholder\")}\n                {...register(\"type\")}\n              />\n            </div>\n\n            <div className=\"space-y-2\">\n              <Label>{t(\"form.mark\")}</Label>\n              <div className=\"flex items-center space-x-2 h-9\">\n                <Checkbox\n                  id=\"isImportant\"\n                  checked={isImportant}\n                  onCheckedChange={(checked) => setValue(\"isImportant\", !!checked)}\n                />\n                <Label htmlFor=\"isImportant\" className=\"cursor-pointer font-normal\">\n                  {tColumns(\"important\")}\n                </Label>\n              </div>\n            </div>\n          </div>\n\n          <DialogFooter>\n            <Button type=\"button\" variant=\"outline\" onClick={() => onOpenChange(false)}>\n              {tCommon(\"cancel\")}\n            </Button>\n            <Button type=\"submit\" disabled={isSubmitting}>\n              {isSubmitting ? \"...\" : isEdit ? tCommon(\"save\") : tCommon(\"create\")}\n            </Button>\n          </DialogFooter>\n        </form>\n      </DialogContent>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "frontend/components/fingerprints/ehole-fingerprint-view.tsx",
    "content": "\"use client\"\n\nimport React, { useState, useMemo } from \"react\"\nimport { AlertTriangle } from \"lucide-react\"\nimport { toast } from \"sonner\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport {\n  useEholeFingerprints,\n  useBulkDeleteEholeFingerprints,\n  useDeleteAllEholeFingerprints,\n} from \"@/hooks/use-fingerprints\"\nimport { FingerprintService } from \"@/services/fingerprint.service\"\nimport { EholeFingerprintDataTable } from \"./ehole-fingerprint-data-table\"\nimport { createEholeFingerprintColumns } from \"./ehole-fingerprint-columns\"\nimport { EholeFingerprintDialog } from \"./ehole-fingerprint-dialog\"\nimport { ImportFingerprintDialog } from \"./import-fingerprint-dialog\"\nimport { DataTableSkeleton } from \"@/components/ui/data-table-skeleton\"\nimport { getDateLocale } from \"@/lib/date-utils\"\nimport type { EholeFingerprint } from \"@/types/fingerprint.types\"\n\nexport function EholeFingerprintView() {\n  const tFingerprints = useTranslations(\"tools.fingerprints\")\n  const locale = useLocale()\n  \n  const [selectedFingerprints, setSelectedFingerprints] = useState<EholeFingerprint[]>([])\n  const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 10 })\n  const [filterQuery, setFilterQuery] = useState(\"\")\n  const [isSearching, setIsSearching] = useState(false)\n  const [addDialogOpen, setAddDialogOpen] = useState(false)\n  const [importDialogOpen, setImportDialogOpen] = useState(false)\n\n  // Query data\n  const { data, isLoading, isFetching, error, refetch } = useEholeFingerprints({\n    page: pagination.pageIndex + 1,\n    pageSize: pagination.pageSize,\n    filter: filterQuery || undefined,\n  })\n\n  // Mutations\n  const bulkDeleteMutation = useBulkDeleteEholeFingerprints()\n  const deleteAllMutation = useDeleteAllEholeFingerprints()\n\n  // Search state\n  React.useEffect(() => {\n    if (!isFetching && isSearching) {\n      setIsSearching(false)\n    }\n  }, [isFetching, isSearching])\n\n  const handleFilterChange = (value: string) => {\n    setIsSearching(true)\n    setFilterQuery(value)\n    setPagination((prev) => ({ ...prev, pageIndex: 0 }))\n  }\n\n  // Format date\n  const formatDate = (dateString: string): string => {\n    return new Date(dateString).toLocaleString(getDateLocale(locale), {\n      year: \"numeric\",\n      month: \"numeric\",\n      day: \"numeric\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      hour12: false,\n    })\n  }\n\n  // Export\n  const handleExport = async () => {\n    try {\n      const blob = await FingerprintService.exportEholeFingerprints()\n      const url = URL.createObjectURL(blob)\n      const a = document.createElement(\"a\")\n      a.href = url\n      a.download = `ehole-fingerprints-${Date.now()}.json`\n      document.body.appendChild(a)\n      a.click()\n      document.body.removeChild(a)\n      URL.revokeObjectURL(url)\n      toast.success(tFingerprints(\"toast.exportSuccess\"))\n    } catch (error: any) {\n      toast.error(error.message || tFingerprints(\"toast.exportFailed\"))\n    }\n  }\n\n  // Bulk delete\n  const handleBulkDelete = async () => {\n    if (selectedFingerprints.length === 0) return\n\n    try {\n      const ids = selectedFingerprints.map((f) => f.id)\n      const result = await bulkDeleteMutation.mutateAsync(ids)\n      toast.success(tFingerprints(\"toast.deleteSuccess\", { count: result.deleted }))\n      setSelectedFingerprints([])\n    } catch (error: any) {\n      toast.error(error.message || tFingerprints(\"toast.deleteFailed\"))\n    }\n  }\n\n  // Delete all\n  const handleDeleteAll = async () => {\n    try {\n      const result = await deleteAllMutation.mutateAsync()\n      toast.success(tFingerprints(\"toast.deleteSuccess\", { count: result.deleted }))\n    } catch (error: any) {\n      toast.error(error.message || tFingerprints(\"toast.deleteFailed\"))\n    }\n  }\n\n  // Column definitions\n  const columns = useMemo(\n    () => createEholeFingerprintColumns({ formatDate }),\n    []\n  )\n\n  // Transform data\n  const fingerprints: EholeFingerprint[] = useMemo(() => {\n    if (!data?.results) return []\n    return data.results\n  }, [data])\n\n  // Stabilize paginationInfo reference to avoid unnecessary re-renders\n  const total = data?.total ?? 0\n  const page = data?.page ?? 1\n  const serverPageSize = data?.pageSize ?? 10\n  const totalPages = data?.totalPages ?? 1\n  \n  const paginationInfo = useMemo(() => ({\n    total,\n    page,\n    pageSize: serverPageSize,\n    totalPages,\n  }), [total, page, serverPageSize, totalPages])\n\n  // Error state\n  if (error) {\n    return (\n      <div className=\"flex flex-col items-center justify-center py-12\">\n        <div className=\"rounded-full bg-destructive/10 p-3 mb-4\">\n          <AlertTriangle className=\"h-10 w-10 text-destructive\" />\n        </div>\n        <h3 className=\"text-lg font-semibold mb-2\">{tFingerprints(\"loadFailed\")}</h3>\n        <p className=\"text-muted-foreground text-center mb-4\">\n          {error.message || tFingerprints(\"loadError\")}\n        </p>\n        <button\n          onClick={() => refetch()}\n          className=\"px-4 py-2 bg-primary text-primary-foreground rounded-md hover:bg-primary/90\"\n        >\n          {tFingerprints(\"reload\")}\n        </button>\n      </div>\n    )\n  }\n\n  // Loading state\n  if (isLoading && !data) {\n    return <DataTableSkeleton toolbarButtonCount={3} rows={6} columns={7} />\n  }\n\n  return (\n    <>\n      <EholeFingerprintDataTable\n        data={fingerprints}\n        columns={columns}\n        onSelectionChange={setSelectedFingerprints}\n        filterValue={filterQuery}\n        onFilterChange={handleFilterChange}\n        isSearching={isSearching}\n        onAddSingle={() => setAddDialogOpen(true)}\n        onAddImport={() => setImportDialogOpen(true)}\n        onExport={handleExport}\n        onBulkDelete={handleBulkDelete}\n        onDeleteAll={handleDeleteAll}\n        totalCount={data?.total || 0}\n        pagination={pagination}\n        paginationInfo={paginationInfo}\n        onPaginationChange={setPagination}\n      />\n\n      {/* Add fingerprint dialog */}\n      <EholeFingerprintDialog\n        open={addDialogOpen}\n        onOpenChange={setAddDialogOpen}\n        onSuccess={() => refetch()}\n      />\n\n      {/* Import fingerprint dialog */}\n      <ImportFingerprintDialog\n        open={importDialogOpen}\n        onOpenChange={setImportDialogOpen}\n        onSuccess={() => refetch()}\n      />\n    </>\n  )\n}\n"
  },
  {
    "path": "frontend/components/fingerprints/fingerprinthub-fingerprint-columns.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { ColumnDef } from \"@tanstack/react-table\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { DataTableColumnHeader } from \"@/components/ui/data-table/column-header\"\nimport { ExpandableCell, ExpandableMonoCell } from \"@/components/ui/data-table/expandable-cell\"\nimport { ChevronDown, ChevronUp } from \"lucide-react\"\nimport { useTranslations } from \"next-intl\"\nimport type { FingerPrintHubFingerprint } from \"@/types/fingerprint.types\"\n\ninterface ColumnOptions {\n  formatDate: (date: string) => string\n}\n\n/**\n * Severity badge with color coding (matching Vulnerabilities style)\n */\nfunction SeverityBadge({ severity }: { severity: string }) {\n  const severityConfig: Record<string, { className: string }> = {\n    critical: { className: \"bg-[#da3633]/10 text-[#da3633] border border-[#da3633]/20 dark:text-[#f85149]\" },\n    high: { className: \"bg-[#d29922]/10 text-[#d29922] border border-[#d29922]/20\" },\n    medium: { className: \"bg-[#d4a72c]/10 text-[#d4a72c] border border-[#d4a72c]/20\" },\n    low: { className: \"bg-[#238636]/10 text-[#238636] border border-[#238636]/20 dark:text-[#3fb950]\" },\n    info: { className: \"bg-[#848d97]/10 text-[#848d97] border border-[#848d97]/20\" },\n  }\n  \n  const config = severityConfig[severity?.toLowerCase()] || severityConfig.info\n  \n  return (\n    <Badge className={config.className}>\n      {severity || \"info\"}\n    </Badge>\n  )\n}\n\n/**\n * Tags list cell - displays tags with expand/collapse\n */\nfunction TagListCell({ tags }: { tags: string }) {\n  const t = useTranslations(\"tooltips\")\n  const [expanded, setExpanded] = React.useState(false)\n  \n  if (!tags) return <span className=\"text-muted-foreground\">-</span>\n  \n  const tagArray = tags.split(\",\").map(t => t.trim())\n  const displayTags = expanded ? tagArray : tagArray.slice(0, 3)\n  const hasMore = tagArray.length > 3\n  \n  return (\n    <div className=\"flex flex-col gap-1\">\n      <div className=\"flex flex-wrap gap-1\">\n        {displayTags.map((tag, idx) => (\n          <Badge key={idx} variant=\"secondary\" className=\"text-xs\">\n            {tag}\n          </Badge>\n        ))}\n      </div>\n      {hasMore && (\n        <button\n          onClick={() => setExpanded(!expanded)}\n          className=\"text-xs text-primary hover:underline self-start flex items-center gap-1\"\n        >\n          {expanded ? (\n            <>\n              <ChevronUp className=\"h-3 w-3\" />\n              {t(\"collapse\")}\n            </>\n          ) : (\n            <>\n              <ChevronDown className=\"h-3 w-3\" />\n              {t(\"expand\")}\n            </>\n          )}\n        </button>\n      )}\n    </div>\n  )\n}\n\n/**\n * Metadata cell - displays vendor, product, verified and queries\n */\nfunction MetadataCell({ metadata }: { metadata: any }) {\n  const t = useTranslations(\"tooltips\")\n  const [expanded, setExpanded] = React.useState(false)\n  \n  if (!metadata || Object.keys(metadata).length === 0) {\n    return <span className=\"text-muted-foreground\">-</span>\n  }\n  \n  const items: { key: string; value: any }[] = []\n  Object.entries(metadata).forEach(([key, value]) => {\n    items.push({ key, value })\n  })\n  \n  const displayItems = expanded ? items : items.slice(0, 2)\n  const hasMore = items.length > 2\n  \n  return (\n    <div className=\"flex flex-col gap-1 w-full\">\n      <div className=\"font-mono text-xs space-y-0.5 w-full\">\n        {displayItems.map((item, idx) => (\n          <div key={idx} className={expanded ? \"break-all w-full\" : \"truncate w-full\"}>\n            \"{item.key}\": {JSON.stringify(item.value)}\n          </div>\n        ))}\n      </div>\n      {hasMore && (\n        <button\n          onClick={() => setExpanded(!expanded)}\n          className=\"text-xs text-primary hover:underline self-start inline-flex items-center gap-0.5\"\n        >\n          {expanded ? (\n            <>\n              <ChevronUp className=\"h-3 w-3\" />\n              <span>{t(\"collapse\")}</span>\n            </>\n          ) : (\n            <>\n              <ChevronDown className=\"h-3 w-3\" />\n              <span>{t(\"expand\")}</span>\n            </>\n          )}\n        </button>\n      )}\n    </div>\n  )\n}\n\n/**\n * HTTP matchers cell - displays detailed HTTP rules in JSON format\n */\nfunction HttpMatchersCell({ http }: { http: any[] }) {\n  const t = useTranslations(\"tooltips\")\n  const [expanded, setExpanded] = React.useState(false)\n  \n  if (!http || http.length === 0) return <span className=\"text-muted-foreground\">-</span>\n  \n  // Extract key fields from http matchers\n  const httpItems: { key: string; value: any }[] = []\n  const hasMultiple = http.length > 1\n  http.forEach((item, idx) => {\n    const prefix = hasMultiple ? `[${idx}].` : \"\"\n    if (item.path) httpItems.push({ key: `${prefix}path`, value: item.path })\n    if (item.method) httpItems.push({ key: `${prefix}method`, value: item.method })\n    if (item.matchers) httpItems.push({ key: `${prefix}matchers`, value: item.matchers })\n  })\n  \n  const displayItems = expanded ? httpItems : httpItems.slice(0, 2)\n  const hasMore = httpItems.length > 2\n  \n  return (\n    <div className=\"flex flex-col gap-1 w-full\">\n      <div className=\"font-mono text-xs space-y-0.5 w-full\">\n        {displayItems.map((item, idx) => (\n          <div key={idx} className={expanded ? \"break-all w-full\" : \"truncate w-full\"}>\n            \"{item.key}\": {JSON.stringify(item.value)}\n          </div>\n        ))}\n      </div>\n      {hasMore && (\n        <button\n          onClick={() => setExpanded(!expanded)}\n          className=\"text-xs text-primary hover:underline self-start inline-flex items-center gap-0.5\"\n        >\n          {expanded ? (\n            <>\n              <ChevronUp className=\"h-3 w-3\" />\n              <span>{t(\"collapse\")}</span>\n            </>\n          ) : (\n            <>\n              <ChevronDown className=\"h-3 w-3\" />\n              <span>{t(\"expand\")}</span>\n            </>\n          )}\n        </button>\n      )}\n    </div>\n  )\n}\n\n/**\n * Create FingerPrintHub fingerprint table column definitions\n */\nexport function createFingerPrintHubFingerprintColumns({\n  formatDate,\n}: ColumnOptions): ColumnDef<FingerPrintHubFingerprint>[] {\n  return [\n    {\n      id: \"select\",\n      header: ({ table }) => (\n        <Checkbox\n          checked={\n            table.getIsAllPageRowsSelected() ||\n            (table.getIsSomePageRowsSelected() && \"indeterminate\")\n          }\n          onCheckedChange={(value) => table.toggleAllPageRowsSelected(!!value)}\n          aria-label=\"Select all\"\n        />\n      ),\n      cell: ({ row }) => (\n        <Checkbox\n          checked={row.getIsSelected()}\n          onCheckedChange={(value) => row.toggleSelected(!!value)}\n          aria-label=\"Select row\"\n        />\n      ),\n      enableSorting: false,\n      enableHiding: false,\n      enableResizing: false,\n      size: 40,\n    },\n    {\n      accessorKey: \"fpId\",\n      meta: { title: \"FP ID\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"FP ID\" />\n      ),\n      cell: ({ row }) => (\n        <ExpandableMonoCell value={row.getValue(\"fpId\")} maxLines={1} />\n      ),\n      enableResizing: true,\n      size: 200,\n    },\n    {\n      accessorKey: \"name\",\n      meta: { title: \"Name\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Name\" />\n      ),\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"name\")} maxLines={2} />\n      ),\n      enableResizing: true,\n      size: 200,\n    },\n    {\n      accessorKey: \"author\",\n      meta: { title: \"Author\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Author\" />\n      ),\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"author\")} maxLines={1} />\n      ),\n      enableResizing: true,\n      size: 120,\n    },\n    {\n      accessorKey: \"severity\",\n      meta: { title: \"Severity\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Severity\" />\n      ),\n      cell: ({ row }) => <SeverityBadge severity={row.getValue(\"severity\")} />,\n      enableResizing: false,\n      size: 100,\n    },\n    {\n      accessorKey: \"tags\",\n      meta: { title: \"Tags\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Tags\" />\n      ),\n      cell: ({ row }) => <TagListCell tags={row.getValue(\"tags\") || \"\"} />,\n      enableResizing: true,\n      size: 200,\n    },\n    {\n      accessorKey: \"metadata\",\n      meta: { title: \"Metadata\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Metadata\" />\n      ),\n      cell: ({ row }) => <MetadataCell metadata={row.getValue(\"metadata\") || {}} />,\n      enableResizing: true,\n      size: 300,\n    },\n    {\n      accessorKey: \"http\",\n      meta: { title: \"HTTP\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"HTTP\" />\n      ),\n      cell: ({ row }) => <HttpMatchersCell http={row.getValue(\"http\") || []} />,\n      enableResizing: true,\n      size: 350,\n    },\n    {\n      accessorKey: \"sourceFile\",\n      meta: { title: \"Source File\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Source File\" />\n      ),\n      cell: ({ row }) => (\n        <ExpandableMonoCell value={row.getValue(\"sourceFile\")} maxLines={1} />\n      ),\n      enableResizing: true,\n      size: 200,\n    },\n    {\n      accessorKey: \"createdAt\",\n      meta: { title: \"Created\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Created\" />\n      ),\n      cell: ({ row }) => {\n        const date = row.getValue(\"createdAt\") as string\n        return (\n          <div className=\"text-sm text-muted-foreground\">\n            {formatDate(date)}\n          </div>\n        )\n      },\n      enableResizing: false,\n      size: 160,\n    },\n  ]\n}\n"
  },
  {
    "path": "frontend/components/fingerprints/fingerprinthub-fingerprint-data-table.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport type { ColumnDef } from \"@tanstack/react-table\"\nimport {\n  IconChevronDown,\n  IconTrash,\n  IconDownload,\n  IconUpload,\n  IconPlus,\n  IconSettings,\n} from \"@tabler/icons-react\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuSeparator,\n  DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\"\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\"\nimport { UnifiedDataTable } from \"@/components/ui/data-table\"\nimport type { FilterField } from \"@/components/common/smart-filter-input\"\nimport type { FingerPrintHubFingerprint } from \"@/types/fingerprint.types\"\nimport type { PaginationInfo } from \"@/types/common.types\"\nimport { useTranslations } from \"next-intl\"\n\nconst FINGERPRINTHUB_FILTER_EXAMPLES = [\n  'name=\"Apache\"',\n  'severity=\"high\"',\n  'author=\"pdteam\"',\n  'fpId=\"apache-detect\"',\n]\n\ninterface FingerPrintHubFingerprintDataTableProps {\n  data: FingerPrintHubFingerprint[]\n  columns: ColumnDef<FingerPrintHubFingerprint>[]\n  onSelectionChange?: (selectedRows: FingerPrintHubFingerprint[]) => void\n  filterValue?: string\n  onFilterChange?: (value: string) => void\n  isSearching?: boolean\n  onAddSingle?: () => void\n  onAddImport?: () => void\n  onExport?: () => void\n  onBulkDelete?: () => void\n  onDeleteAll?: () => void\n  totalCount?: number\n  pagination?: { pageIndex: number; pageSize: number }\n  paginationInfo?: PaginationInfo\n  onPaginationChange?: (pagination: { pageIndex: number; pageSize: number }) => void\n}\n\nexport function FingerPrintHubFingerprintDataTable({\n  data = [],\n  columns,\n  onSelectionChange,\n  filterValue,\n  onFilterChange,\n  isSearching = false,\n  onAddSingle,\n  onAddImport,\n  onExport,\n  onBulkDelete,\n  onDeleteAll,\n  totalCount = 0,\n  pagination: externalPagination,\n  paginationInfo,\n  onPaginationChange,\n}: FingerPrintHubFingerprintDataTableProps) {\n  const [selectedCount, setSelectedCount] = React.useState(0)\n  const [exportDialogOpen, setExportDialogOpen] = React.useState(false)\n  const [bulkDeleteDialogOpen, setBulkDeleteDialogOpen] = React.useState(false)\n  const [deleteAllDialogOpen, setDeleteAllDialogOpen] = React.useState(false)\n  const t = useTranslations(\"tools.fingerprints\")\n  const tCommon = useTranslations(\"common.actions\")\n\n  // FingerPrintHub filter field configuration\n  const filterFields: FilterField[] = React.useMemo(() => [\n    { key: \"fpId\", label: \"ID\", description: t(\"filter.fingerprinthub.fpId\") },\n    { key: \"name\", label: \"Name\", description: t(\"filter.fingerprinthub.name\") },\n    { key: \"author\", label: \"Author\", description: t(\"filter.fingerprinthub.author\") },\n    { key: \"severity\", label: \"Severity\", description: t(\"filter.fingerprinthub.severity\") },\n  ], [t])\n\n  const handleSmartSearch = (rawQuery: string) => {\n    if (onFilterChange) {\n      onFilterChange(rawQuery)\n    }\n  }\n\n  const handleSelectionChange = (rows: FingerPrintHubFingerprint[]) => {\n    setSelectedCount(rows.length)\n    onSelectionChange?.(rows)\n  }\n\n  const toolbarRightContent = (\n    <>\n      <DropdownMenu>\n        <DropdownMenuTrigger asChild>\n          <Button variant=\"outline\" size=\"sm\">\n            <IconSettings className=\"h-4 w-4\" />\n            {t(\"actions.operations\")}\n            <IconChevronDown className=\"h-4 w-4\" />\n          </Button>\n        </DropdownMenuTrigger>\n        <DropdownMenuContent align=\"end\" className=\"w-48\">\n          {onExport && (\n            <DropdownMenuItem onClick={() => setExportDialogOpen(true)}>\n              <IconDownload className=\"h-4 w-4\" />\n              {t(\"actions.exportAll\")}\n            </DropdownMenuItem>\n          )}\n          <DropdownMenuSeparator />\n          {onBulkDelete && (\n            <DropdownMenuItem \n              onClick={() => setBulkDeleteDialogOpen(true)}\n              disabled={selectedCount === 0}\n              className=\"text-destructive focus:text-destructive\"\n            >\n              <IconTrash className=\"h-4 w-4\" />\n              {t(\"actions.deleteSelected\")} ({selectedCount})\n            </DropdownMenuItem>\n          )}\n          {onDeleteAll && (\n            <DropdownMenuItem \n              onClick={() => setDeleteAllDialogOpen(true)}\n              className=\"text-destructive focus:text-destructive\"\n            >\n              <IconTrash className=\"h-4 w-4\" />\n              {t(\"actions.deleteAll\")}\n            </DropdownMenuItem>\n          )}\n        </DropdownMenuContent>\n      </DropdownMenu>\n\n      {(onAddSingle || onAddImport) && (\n        <DropdownMenu>\n          <DropdownMenuTrigger asChild>\n            <Button size=\"sm\">\n              <IconPlus className=\"h-4 w-4\" />\n              {t(\"actions.addFingerprint\")}\n              <IconChevronDown className=\"h-4 w-4\" />\n            </Button>\n          </DropdownMenuTrigger>\n          <DropdownMenuContent align=\"end\" className=\"w-40\">\n            {onAddSingle && (\n              <DropdownMenuItem onClick={onAddSingle}>\n                <IconPlus className=\"h-4 w-4\" />\n                {t(\"actions.addSingle\")}\n              </DropdownMenuItem>\n            )}\n            {onAddImport && (\n              <DropdownMenuItem onClick={onAddImport}>\n                <IconUpload className=\"h-4 w-4\" />\n                {t(\"actions.importFile\")}\n              </DropdownMenuItem>\n            )}\n          </DropdownMenuContent>\n        </DropdownMenu>\n      )}\n    </>\n  )\n\n  return (\n    <>\n      <UnifiedDataTable\n        data={data}\n        columns={columns}\n        getRowId={(row) => String(row.id)}\n        pagination={externalPagination}\n        paginationInfo={paginationInfo}\n        onPaginationChange={onPaginationChange}\n        searchMode=\"smart\"\n        searchValue={filterValue}\n        onSearch={handleSmartSearch}\n        isSearching={isSearching}\n        filterFields={filterFields}\n        filterExamples={FINGERPRINTHUB_FILTER_EXAMPLES}\n        onSelectionChange={handleSelectionChange}\n        showBulkDelete={false}\n        showAddButton={false}\n        emptyMessage=\"No results\"\n        toolbarRight={toolbarRightContent}\n      />\n\n      <AlertDialog open={exportDialogOpen} onOpenChange={setExportDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{t(\"dialogs.exportTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {t(\"dialogs.exportDesc\", { count: totalCount })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"cancel\")}</AlertDialogCancel>\n            <AlertDialogAction onClick={() => { onExport?.(); setExportDialogOpen(false); }}>\n              {t(\"dialogs.confirmExport\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n\n      <AlertDialog open={bulkDeleteDialogOpen} onOpenChange={setBulkDeleteDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{t(\"dialogs.deleteSelectedTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {t(\"dialogs.deleteSelectedDesc\", { count: selectedCount })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"cancel\")}</AlertDialogCancel>\n            <AlertDialogAction \n              onClick={() => { onBulkDelete?.(); setBulkDeleteDialogOpen(false); }}\n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n            >\n              {t(\"dialogs.confirmDelete\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n\n      <AlertDialog open={deleteAllDialogOpen} onOpenChange={setDeleteAllDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{t(\"dialogs.deleteAllTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {t(\"dialogs.deleteAllDesc\", { count: totalCount })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"cancel\")}</AlertDialogCancel>\n            <AlertDialogAction \n              onClick={() => { onDeleteAll?.(); setDeleteAllDialogOpen(false); }}\n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n            >\n              {t(\"dialogs.confirmDelete\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n    </>\n  )\n}\n"
  },
  {
    "path": "frontend/components/fingerprints/fingerprinthub-fingerprint-dialog.tsx",
    "content": "\"use client\"\n\nimport React, { useEffect } from \"react\"\nimport { useForm } from \"react-hook-form\"\nimport { toast } from \"sonner\"\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n} from \"@/components/ui/dialog\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { Textarea } from \"@/components/ui/textarea\"\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from \"@/components/ui/select\"\nimport {\n  useCreateFingerPrintHubFingerprint,\n  useUpdateFingerPrintHubFingerprint,\n} from \"@/hooks/use-fingerprints\"\nimport type { FingerPrintHubFingerprint } from \"@/types/fingerprint.types\"\nimport { useTranslations } from \"next-intl\"\n\ninterface FingerPrintHubFingerprintDialogProps {\n  open: boolean\n  onOpenChange: (open: boolean) => void\n  fingerprint?: FingerPrintHubFingerprint | null\n  onSuccess?: () => void\n}\n\ninterface FormData {\n  fpId: string\n  name: string\n  author: string\n  tags: string\n  severity: string\n  metadata: string\n  http: string\n  sourceFile: string\n}\n\nconst SEVERITY_OPTIONS = [\n  { value: \"info\", label: \"Info\" },\n  { value: \"low\", label: \"Low\" },\n  { value: \"medium\", label: \"Medium\" },\n  { value: \"high\", label: \"High\" },\n  { value: \"critical\", label: \"Critical\" },\n]\n\nexport function FingerPrintHubFingerprintDialog({\n  open,\n  onOpenChange,\n  fingerprint,\n  onSuccess,\n}: FingerPrintHubFingerprintDialogProps) {\n  const isEdit = !!fingerprint\n  const t = useTranslations(\"tools.fingerprints\")\n  const tCommon = useTranslations(\"common.actions\")\n\n  const createMutation = useCreateFingerPrintHubFingerprint()\n  const updateMutation = useUpdateFingerPrintHubFingerprint()\n\n  const {\n    register,\n    handleSubmit,\n    reset,\n    setValue,\n    watch,\n    formState: { errors, isSubmitting },\n  } = useForm<FormData>({\n    defaultValues: {\n      fpId: \"\",\n      name: \"\",\n      author: \"\",\n      tags: \"\",\n      severity: \"info\",\n      metadata: \"{}\",\n      http: \"[]\",\n      sourceFile: \"\",\n    },\n  })\n\n  useEffect(() => {\n    if (fingerprint) {\n      reset({\n        fpId: fingerprint.fpId,\n        name: fingerprint.name,\n        author: fingerprint.author || \"\",\n        tags: fingerprint.tags || \"\",\n        severity: fingerprint.severity || \"info\",\n        metadata: JSON.stringify(fingerprint.metadata || {}, null, 2),\n        http: JSON.stringify(fingerprint.http || [], null, 2),\n        sourceFile: fingerprint.sourceFile || \"\",\n      })\n    } else {\n      reset({\n        fpId: \"\",\n        name: \"\",\n        author: \"\",\n        tags: \"\",\n        severity: \"info\",\n        metadata: \"{}\",\n        http: \"[]\",\n        sourceFile: \"\",\n      })\n    }\n  }, [fingerprint, reset])\n\n  const onSubmit = async (data: FormData) => {\n    // Parse metadata JSON\n    let metadataObj: any\n    try {\n      metadataObj = JSON.parse(data.metadata)\n      if (typeof metadataObj !== \"object\" || Array.isArray(metadataObj)) {\n        toast.error(t(\"form.metadataObjectRequired\"))\n        return\n      }\n    } catch (e) {\n      toast.error(t(\"form.metadataJsonInvalid\"))\n      return\n    }\n\n    // Parse http JSON\n    let httpArray: any[]\n    try {\n      httpArray = JSON.parse(data.http)\n      if (!Array.isArray(httpArray)) {\n        toast.error(t(\"form.httpArrayRequired\"))\n        return\n      }\n    } catch (e) {\n      toast.error(t(\"form.httpJsonInvalid\"))\n      return\n    }\n\n    const payload = {\n      fpId: data.fpId.trim(),\n      name: data.name.trim(),\n      author: data.author.trim(),\n      tags: data.tags.trim(),\n      severity: data.severity,\n      metadata: metadataObj,\n      http: httpArray,\n      sourceFile: data.sourceFile.trim(),\n    }\n\n    try {\n      if (isEdit && fingerprint) {\n        await updateMutation.mutateAsync({ id: fingerprint.id, data: payload })\n        toast.success(t(\"toast.updateSuccess\"))\n      } else {\n        await createMutation.mutateAsync(payload)\n        toast.success(t(\"toast.createSuccess\"))\n      }\n      onOpenChange(false)\n      onSuccess?.()\n    } catch (error: any) {\n      toast.error(error.message || (isEdit ? t(\"toast.updateFailed\") : t(\"toast.createFailed\")))\n    }\n  }\n\n  const severity = watch(\"severity\")\n\n  return (\n    <Dialog open={open} onOpenChange={onOpenChange}>\n      <DialogContent className=\"sm:max-w-[700px] max-h-[85vh] overflow-y-auto\">\n        <DialogHeader>\n          <DialogTitle>{isEdit ? t(\"fingerprinthub.editTitle\") : t(\"fingerprinthub.addTitle\")}</DialogTitle>\n          <DialogDescription>\n            {isEdit ? t(\"fingerprinthub.editDesc\") : t(\"fingerprinthub.addDesc\")}\n          </DialogDescription>\n        </DialogHeader>\n\n        <form onSubmit={handleSubmit(onSubmit)} className=\"space-y-4\">\n          {/* FP ID & Name */}\n          <div className=\"grid grid-cols-2 gap-4\">\n            <div className=\"space-y-2\">\n              <Label htmlFor=\"fpId\">{t(\"form.fpId\")} *</Label>\n              <Input\n                id=\"fpId\"\n                placeholder={t(\"form.fpIdPlaceholder\")}\n                {...register(\"fpId\", { required: t(\"form.fpIdRequired\") })}\n              />\n              {errors.fpId && (\n                <p className=\"text-sm text-destructive\">{errors.fpId.message}</p>\n              )}\n            </div>\n\n            <div className=\"space-y-2\">\n              <Label htmlFor=\"name\">{t(\"form.name\")} *</Label>\n              <Input\n                id=\"name\"\n                placeholder={t(\"form.namePlaceholder\")}\n                {...register(\"name\", { required: t(\"form.nameRequired\") })}\n              />\n              {errors.name && (\n                <p className=\"text-sm text-destructive\">{errors.name.message}</p>\n              )}\n            </div>\n          </div>\n\n          {/* Author & Severity */}\n          <div className=\"grid grid-cols-2 gap-4\">\n            <div className=\"space-y-2\">\n              <Label htmlFor=\"author\">{t(\"form.author\")}</Label>\n              <Input\n                id=\"author\"\n                placeholder={t(\"form.authorPlaceholder\")}\n                {...register(\"author\")}\n              />\n            </div>\n\n            <div className=\"space-y-2\">\n              <Label>{t(\"form.severity\")}</Label>\n              <Select value={severity} onValueChange={(v) => setValue(\"severity\", v)}>\n                <SelectTrigger>\n                  <SelectValue />\n                </SelectTrigger>\n                <SelectContent>\n                  {SEVERITY_OPTIONS.map((opt) => (\n                    <SelectItem key={opt.value} value={opt.value}>\n                      {opt.label}\n                    </SelectItem>\n                  ))}\n                </SelectContent>\n              </Select>\n            </div>\n          </div>\n\n          {/* Tags */}\n          <div className=\"space-y-2\">\n            <Label htmlFor=\"tags\">{t(\"form.tags\")}</Label>\n            <Input\n              id=\"tags\"\n              placeholder={t(\"form.tagsPlaceholder\")}\n              {...register(\"tags\")}\n            />\n          </div>\n\n          {/* HTTP Matchers (JSON) */}\n          <div className=\"space-y-2\">\n            <Label htmlFor=\"http\">{t(\"form.http\")} *</Label>\n            <Textarea\n              id=\"http\"\n              placeholder={t(\"form.httpPlaceholder\")}\n              className=\"font-mono text-sm min-h-[150px]\"\n              {...register(\"http\", { required: t(\"form.httpRequired\") })}\n            />\n            {errors.http && (\n              <p className=\"text-sm text-destructive\">{errors.http.message}</p>\n            )}\n          </div>\n\n          {/* Metadata (JSON) */}\n          <div className=\"space-y-2\">\n            <Label htmlFor=\"metadata\">{t(\"form.metadata\")}</Label>\n            <Textarea\n              id=\"metadata\"\n              placeholder={t(\"form.metadataPlaceholder\")}\n              className=\"font-mono text-sm min-h-[80px]\"\n              {...register(\"metadata\")}\n            />\n          </div>\n\n          {/* Source File */}\n          <div className=\"space-y-2\">\n            <Label htmlFor=\"sourceFile\">{t(\"form.sourceFile\")}</Label>\n            <Input\n              id=\"sourceFile\"\n              placeholder={t(\"form.sourceFilePlaceholder\")}\n              {...register(\"sourceFile\")}\n            />\n          </div>\n\n          <DialogFooter>\n            <Button type=\"button\" variant=\"outline\" onClick={() => onOpenChange(false)}>\n              {tCommon(\"cancel\")}\n            </Button>\n            <Button type=\"submit\" disabled={isSubmitting}>\n              {isSubmitting ? \"...\" : isEdit ? tCommon(\"save\") : tCommon(\"create\")}\n            </Button>\n          </DialogFooter>\n        </form>\n      </DialogContent>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "frontend/components/fingerprints/fingerprinthub-fingerprint-view.tsx",
    "content": "\"use client\"\n\nimport React, { useState, useMemo } from \"react\"\nimport { AlertTriangle } from \"lucide-react\"\nimport { toast } from \"sonner\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport {\n  useFingerPrintHubFingerprints,\n  useBulkDeleteFingerPrintHubFingerprints,\n  useDeleteAllFingerPrintHubFingerprints,\n} from \"@/hooks/use-fingerprints\"\nimport { FingerprintService } from \"@/services/fingerprint.service\"\nimport { FingerPrintHubFingerprintDataTable } from \"./fingerprinthub-fingerprint-data-table\"\nimport { createFingerPrintHubFingerprintColumns } from \"./fingerprinthub-fingerprint-columns\"\nimport { FingerPrintHubFingerprintDialog } from \"./fingerprinthub-fingerprint-dialog\"\nimport { ImportFingerprintDialog } from \"./import-fingerprint-dialog\"\nimport { DataTableSkeleton } from \"@/components/ui/data-table-skeleton\"\nimport { getDateLocale } from \"@/lib/date-utils\"\nimport type { FingerPrintHubFingerprint } from \"@/types/fingerprint.types\"\n\nexport function FingerPrintHubFingerprintView() {\n  const tFingerprints = useTranslations(\"tools.fingerprints\")\n  const locale = useLocale()\n  \n  const [selectedFingerprints, setSelectedFingerprints] = useState<FingerPrintHubFingerprint[]>([])\n  const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 10 })\n  const [filterQuery, setFilterQuery] = useState(\"\")\n  const [isSearching, setIsSearching] = useState(false)\n  const [addDialogOpen, setAddDialogOpen] = useState(false)\n  const [importDialogOpen, setImportDialogOpen] = useState(false)\n\n  const { data, isLoading, isFetching, error, refetch } = useFingerPrintHubFingerprints({\n    page: pagination.pageIndex + 1,\n    pageSize: pagination.pageSize,\n    filter: filterQuery || undefined,\n  })\n\n  const bulkDeleteMutation = useBulkDeleteFingerPrintHubFingerprints()\n  const deleteAllMutation = useDeleteAllFingerPrintHubFingerprints()\n\n  React.useEffect(() => {\n    if (!isFetching && isSearching) {\n      setIsSearching(false)\n    }\n  }, [isFetching, isSearching])\n\n  const handleFilterChange = (value: string) => {\n    setIsSearching(true)\n    setFilterQuery(value)\n    setPagination((prev) => ({ ...prev, pageIndex: 0 }))\n  }\n\n  const formatDate = (dateString: string): string => {\n    return new Date(dateString).toLocaleString(getDateLocale(locale), {\n      year: \"numeric\",\n      month: \"numeric\",\n      day: \"numeric\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      hour12: false,\n    })\n  }\n\n  const handleExport = async () => {\n    try {\n      const blob = await FingerprintService.exportFingerPrintHubFingerprints()\n      const url = URL.createObjectURL(blob)\n      const a = document.createElement(\"a\")\n      a.href = url\n      a.download = `fingerprinthub-fingerprints-${Date.now()}.json`\n      document.body.appendChild(a)\n      a.click()\n      document.body.removeChild(a)\n      URL.revokeObjectURL(url)\n      toast.success(tFingerprints(\"toast.exportSuccess\"))\n    } catch (error: any) {\n      toast.error(error.message || tFingerprints(\"toast.exportFailed\"))\n    }\n  }\n\n  const handleBulkDelete = async () => {\n    if (selectedFingerprints.length === 0) return\n    try {\n      const ids = selectedFingerprints.map((f) => f.id)\n      const result = await bulkDeleteMutation.mutateAsync(ids)\n      toast.success(tFingerprints(\"toast.deleteSuccess\", { count: result.deleted }))\n      setSelectedFingerprints([])\n    } catch (error: any) {\n      toast.error(error.message || tFingerprints(\"toast.deleteFailed\"))\n    }\n  }\n\n  const handleDeleteAll = async () => {\n    try {\n      const result = await deleteAllMutation.mutateAsync()\n      toast.success(tFingerprints(\"toast.deleteSuccess\", { count: result.deleted }))\n    } catch (error: any) {\n      toast.error(error.message || tFingerprints(\"toast.deleteFailed\"))\n    }\n  }\n\n  const columns = useMemo(\n    () => createFingerPrintHubFingerprintColumns({ formatDate }),\n    []\n  )\n\n  const fingerprints: FingerPrintHubFingerprint[] = useMemo(() => {\n    if (!data?.results) return []\n    return data.results\n  }, [data])\n\n  const total = data?.total ?? 0\n  const page = data?.page ?? 1\n  const serverPageSize = data?.pageSize ?? 10\n  const totalPages = data?.totalPages ?? 1\n  \n  const paginationInfo = useMemo(() => ({\n    total,\n    page,\n    pageSize: serverPageSize,\n    totalPages,\n  }), [total, page, serverPageSize, totalPages])\n\n  if (error) {\n    return (\n      <div className=\"flex flex-col items-center justify-center py-12\">\n        <div className=\"rounded-full bg-destructive/10 p-3 mb-4\">\n          <AlertTriangle className=\"h-10 w-10 text-destructive\" />\n        </div>\n        <h3 className=\"text-lg font-semibold mb-2\">{tFingerprints(\"loadFailed\")}</h3>\n        <p className=\"text-muted-foreground text-center mb-4\">\n          {error.message || tFingerprints(\"loadError\")}\n        </p>\n        <button\n          onClick={() => refetch()}\n          className=\"px-4 py-2 bg-primary text-primary-foreground rounded-md hover:bg-primary/90\"\n        >\n          {tFingerprints(\"reload\")}\n        </button>\n      </div>\n    )\n  }\n\n  if (isLoading && !data) {\n    return <DataTableSkeleton toolbarButtonCount={3} rows={6} columns={8} />\n  }\n\n  return (\n    <>\n      <FingerPrintHubFingerprintDataTable\n        data={fingerprints}\n        columns={columns}\n        onSelectionChange={setSelectedFingerprints}\n        filterValue={filterQuery}\n        onFilterChange={handleFilterChange}\n        isSearching={isSearching}\n        onAddSingle={() => setAddDialogOpen(true)}\n        onAddImport={() => setImportDialogOpen(true)}\n        onExport={handleExport}\n        onBulkDelete={handleBulkDelete}\n        onDeleteAll={handleDeleteAll}\n        totalCount={data?.total || 0}\n        pagination={pagination}\n        paginationInfo={paginationInfo}\n        onPaginationChange={setPagination}\n      />\n\n      <FingerPrintHubFingerprintDialog\n        open={addDialogOpen}\n        onOpenChange={setAddDialogOpen}\n        onSuccess={() => refetch()}\n      />\n\n      <ImportFingerprintDialog\n        open={importDialogOpen}\n        onOpenChange={setImportDialogOpen}\n        fingerprintType=\"fingerprinthub\"\n        onSuccess={() => refetch()}\n      />\n    </>\n  )\n}\n"
  },
  {
    "path": "frontend/components/fingerprints/fingers-fingerprint-columns.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { ColumnDef } from \"@tanstack/react-table\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { DataTableColumnHeader } from \"@/components/ui/data-table/column-header\"\nimport { ExpandableCell } from \"@/components/ui/data-table/expandable-cell\"\nimport { ChevronDown, ChevronUp } from \"lucide-react\"\nimport { useTranslations } from \"next-intl\"\nimport type { FingersFingerprint } from \"@/types/fingerprint.types\"\n\ninterface ColumnOptions {\n  formatDate: (date: string) => string\n}\n\n/**\n * Tag list cell - displays tags as badges\n */\nfunction TagListCell({ tags }: { tags: string[] }) {\n  const t = useTranslations(\"tooltips\")\n  const [expanded, setExpanded] = React.useState(false)\n  \n  if (!tags || tags.length === 0) return <span className=\"text-muted-foreground\">-</span>\n  \n  const displayTags = expanded ? tags : tags.slice(0, 3)\n  const hasMore = tags.length > 3\n  \n  return (\n    <div className=\"flex flex-col gap-1\">\n      <div className=\"flex flex-wrap gap-1\">\n        {displayTags.map((tag, idx) => (\n          <Badge key={idx} variant=\"secondary\" className=\"text-xs\">\n            {tag}\n          </Badge>\n        ))}\n      </div>\n      {hasMore && (\n        <button\n          onClick={() => setExpanded(!expanded)}\n          className=\"text-xs text-primary hover:underline self-start flex items-center gap-1\"\n        >\n          {expanded ? (\n            <>\n              <ChevronUp className=\"h-3 w-3\" />\n              {t(\"collapse\")}\n            </>\n          ) : (\n            <>\n              <ChevronDown className=\"h-3 w-3\" />\n              {t(\"expand\")}\n            </>\n          )}\n        </button>\n      )}\n    </div>\n  )\n}\n\n/**\n * Extract rule items from rules array\n */\ninterface RuleItem {\n  key: string\n  value: any\n}\n\nfunction extractRuleItems(rules: any[]): RuleItem[] {\n  const items: RuleItem[] = []\n  \n  rules.forEach((rule) => {\n    if (rule.regexps) {\n      Object.entries(rule.regexps).forEach(([key, value]) => {\n        items.push({ key, value })\n      })\n    }\n  })\n  \n  return items\n}\n\n/**\n * Rules cell - displays rules in JSON format (matching Wappalyzer style)\n */\nfunction RulesCell({ rules }: { rules: any[] }) {\n  const t = useTranslations(\"tooltips\")\n  const [expanded, setExpanded] = React.useState(false)\n  const ruleItems = extractRuleItems(rules)\n  \n  if (ruleItems.length === 0) {\n    return <span className=\"text-muted-foreground\">-</span>\n  }\n  \n  const displayItems = expanded ? ruleItems : ruleItems.slice(0, 2)\n  const hasMore = ruleItems.length > 2\n  \n  return (\n    <div className=\"flex flex-col gap-1 w-full\">\n      <div className=\"font-mono text-xs space-y-0.5 w-full\">\n        {displayItems.map((item, idx) => (\n          <div key={idx} className={expanded ? \"break-all w-full\" : \"truncate w-full\"}>\n            \"{item.key}\": {JSON.stringify(item.value)}\n          </div>\n        ))}\n      </div>\n      {hasMore && (\n        <button\n          onClick={() => setExpanded(!expanded)}\n          className=\"text-xs text-primary hover:underline self-start inline-flex items-center gap-0.5\"\n        >\n          {expanded ? (\n            <>\n              <ChevronUp className=\"h-3 w-3\" />\n              <span>{t(\"collapse\")}</span>\n            </>\n          ) : (\n            <>\n              <ChevronDown className=\"h-3 w-3\" />\n              <span>{t(\"expand\")}</span>\n            </>\n          )}\n        </button>\n      )}\n    </div>\n  )\n}\n\n/**\n * Port list cell - displays ports\n */\nfunction PortListCell({ ports }: { ports: number[] }) {\n  if (!ports || ports.length === 0) return <span className=\"text-muted-foreground\">-</span>\n  return (\n    <div className=\"flex flex-wrap gap-1\">\n      {ports.slice(0, 5).map((port, idx) => (\n        <Badge key={idx} variant=\"outline\" className=\"font-mono text-xs\">\n          {port}\n        </Badge>\n      ))}\n      {ports.length > 5 && (\n        <Badge variant=\"secondary\" className=\"text-xs\">\n          +{ports.length - 5}\n        </Badge>\n      )}\n    </div>\n  )\n}\n\n/**\n * Create Fingers fingerprint table column definitions\n */\nexport function createFingersFingerprintColumns({\n  formatDate,\n}: ColumnOptions): ColumnDef<FingersFingerprint>[] {\n  return [\n    {\n      id: \"select\",\n      header: ({ table }) => (\n        <Checkbox\n          checked={\n            table.getIsAllPageRowsSelected() ||\n            (table.getIsSomePageRowsSelected() && \"indeterminate\")\n          }\n          onCheckedChange={(value) => table.toggleAllPageRowsSelected(!!value)}\n          aria-label=\"Select all\"\n        />\n      ),\n      cell: ({ row }) => (\n        <Checkbox\n          checked={row.getIsSelected()}\n          onCheckedChange={(value) => row.toggleSelected(!!value)}\n          aria-label=\"Select row\"\n        />\n      ),\n      enableSorting: false,\n      enableHiding: false,\n      enableResizing: false,\n      size: 40,\n    },\n    {\n      accessorKey: \"focus\",\n      meta: { title: \"Focus\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Focus\" />\n      ),\n      cell: ({ row }) => {\n        const focus = row.getValue(\"focus\") as boolean\n        return (\n          <span className={focus ? \"text-foreground\" : \"text-muted-foreground\"}>\n            {String(focus)}\n          </span>\n        )\n      },\n      enableResizing: false,\n      size: 80,\n    },\n    {\n      accessorKey: \"name\",\n      meta: { title: \"Name\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Name\" />\n      ),\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"name\")} maxLines={2} />\n      ),\n      enableResizing: true,\n      size: 200,\n    },\n    {\n      accessorKey: \"link\",\n      meta: { title: \"Link\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Link\" />\n      ),\n      cell: ({ row }) => {\n        const link = row.getValue(\"link\") as string\n        if (!link) return <span className=\"text-muted-foreground\">-</span>\n        return (\n          <a \n            href={link} \n            target=\"_blank\" \n            rel=\"noopener noreferrer\"\n            className=\"text-primary hover:underline\"\n          >\n            <ExpandableCell value={link} variant=\"url\" maxLines={1} />\n          </a>\n        )\n      },\n      enableResizing: true,\n      size: 200,\n    },\n    {\n      accessorKey: \"rule\",\n      meta: { title: \"Rule\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Rule\" />\n      ),\n      cell: ({ row }) => <RulesCell rules={row.getValue(\"rule\") || []} />,\n      enableResizing: true,\n      size: 300,\n    },\n    {\n      accessorKey: \"tag\",\n      meta: { title: \"Tag\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Tag\" />\n      ),\n      cell: ({ row }) => <TagListCell tags={row.getValue(\"tag\") || []} />,\n      enableResizing: true,\n      size: 200,\n    },\n    {\n      accessorKey: \"defaultPort\",\n      meta: { title: \"Default Port\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Default Port\" />\n      ),\n      cell: ({ row }) => <PortListCell ports={row.getValue(\"defaultPort\") || []} />,\n      enableResizing: true,\n      size: 150,\n    },\n    {\n      accessorKey: \"createdAt\",\n      meta: { title: \"Created\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Created\" />\n      ),\n      cell: ({ row }) => {\n        const date = row.getValue(\"createdAt\") as string\n        return (\n          <div className=\"text-sm text-muted-foreground\">\n            {formatDate(date)}\n          </div>\n        )\n      },\n      enableResizing: false,\n      size: 160,\n    },\n  ]\n}\n"
  },
  {
    "path": "frontend/components/fingerprints/fingers-fingerprint-data-table.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport type { ColumnDef } from \"@tanstack/react-table\"\nimport {\n  IconChevronDown,\n  IconTrash,\n  IconDownload,\n  IconUpload,\n  IconPlus,\n  IconSettings,\n} from \"@tabler/icons-react\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuSeparator,\n  DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\"\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\"\nimport { UnifiedDataTable } from \"@/components/ui/data-table\"\nimport type { FilterField } from \"@/components/common/smart-filter-input\"\nimport type { FingersFingerprint } from \"@/types/fingerprint.types\"\nimport type { PaginationInfo } from \"@/types/common.types\"\nimport { useTranslations } from \"next-intl\"\n\nconst FINGERS_FILTER_EXAMPLES = [\n  'name=\"Apache\"',\n  'focus=\"true\"',\n  'link=\"http\"',\n  'name=\"nginx\" focus=\"true\"',\n]\n\ninterface FingersFingerprintDataTableProps {\n  data: FingersFingerprint[]\n  columns: ColumnDef<FingersFingerprint>[]\n  onSelectionChange?: (selectedRows: FingersFingerprint[]) => void\n  filterValue?: string\n  onFilterChange?: (value: string) => void\n  isSearching?: boolean\n  onAddSingle?: () => void\n  onAddImport?: () => void\n  onExport?: () => void\n  onBulkDelete?: () => void\n  onDeleteAll?: () => void\n  totalCount?: number\n  pagination?: { pageIndex: number; pageSize: number }\n  paginationInfo?: PaginationInfo\n  onPaginationChange?: (pagination: { pageIndex: number; pageSize: number }) => void\n}\n\nexport function FingersFingerprintDataTable({\n  data = [],\n  columns,\n  onSelectionChange,\n  filterValue,\n  onFilterChange,\n  isSearching = false,\n  onAddSingle,\n  onAddImport,\n  onExport,\n  onBulkDelete,\n  onDeleteAll,\n  totalCount = 0,\n  pagination: externalPagination,\n  paginationInfo,\n  onPaginationChange,\n}: FingersFingerprintDataTableProps) {\n  const [selectedCount, setSelectedCount] = React.useState(0)\n  const [exportDialogOpen, setExportDialogOpen] = React.useState(false)\n  const [bulkDeleteDialogOpen, setBulkDeleteDialogOpen] = React.useState(false)\n  const [deleteAllDialogOpen, setDeleteAllDialogOpen] = React.useState(false)\n  const t = useTranslations(\"tools.fingerprints\")\n  const tCommon = useTranslations(\"common.actions\")\n\n  // Fingers filter field configuration\n  const fingersFilterFields: FilterField[] = React.useMemo(() => [\n    { key: \"name\", label: \"Name\", description: t(\"filter.fingers.name\") },\n    { key: \"focus\", label: \"Focus\", description: t(\"filter.fingers.focus\") },\n    { key: \"link\", label: \"Link\", description: t(\"filter.fingers.link\") },\n  ], [t])\n\n  const handleSmartSearch = (rawQuery: string) => {\n    if (onFilterChange) {\n      onFilterChange(rawQuery)\n    }\n  }\n\n  const handleSelectionChange = (rows: FingersFingerprint[]) => {\n    setSelectedCount(rows.length)\n    onSelectionChange?.(rows)\n  }\n\n  // Custom toolbar right-side buttons\n  const toolbarRightContent = (\n    <>\n      {/* Operations menu */}\n      <DropdownMenu>\n        <DropdownMenuTrigger asChild>\n          <Button variant=\"outline\" size=\"sm\">\n            <IconSettings className=\"h-4 w-4\" />\n            {t(\"actions.operations\")}\n            <IconChevronDown className=\"h-4 w-4\" />\n          </Button>\n        </DropdownMenuTrigger>\n        <DropdownMenuContent align=\"end\" className=\"w-48\">\n          {onExport && (\n            <DropdownMenuItem onClick={() => setExportDialogOpen(true)}>\n              <IconDownload className=\"h-4 w-4\" />\n              {t(\"actions.exportAll\")}\n            </DropdownMenuItem>\n          )}\n          <DropdownMenuSeparator />\n          {onBulkDelete && (\n            <DropdownMenuItem \n              onClick={() => setBulkDeleteDialogOpen(true)}\n              disabled={selectedCount === 0}\n              className=\"text-destructive focus:text-destructive\"\n            >\n              <IconTrash className=\"h-4 w-4\" />\n              {t(\"actions.deleteSelected\")} ({selectedCount})\n            </DropdownMenuItem>\n          )}\n          {onDeleteAll && (\n            <DropdownMenuItem \n              onClick={() => setDeleteAllDialogOpen(true)}\n              className=\"text-destructive focus:text-destructive\"\n            >\n              <IconTrash className=\"h-4 w-4\" />\n              {t(\"actions.deleteAll\")}\n            </DropdownMenuItem>\n          )}\n        </DropdownMenuContent>\n      </DropdownMenu>\n\n      {/* Add fingerprint */}\n      {(onAddSingle || onAddImport) && (\n        <DropdownMenu>\n          <DropdownMenuTrigger asChild>\n            <Button size=\"sm\">\n              <IconPlus className=\"h-4 w-4\" />\n              {t(\"actions.addFingerprint\")}\n              <IconChevronDown className=\"h-4 w-4\" />\n            </Button>\n          </DropdownMenuTrigger>\n          <DropdownMenuContent align=\"end\" className=\"w-40\">\n            {onAddSingle && (\n              <DropdownMenuItem onClick={onAddSingle}>\n                <IconPlus className=\"h-4 w-4\" />\n                {t(\"actions.addSingle\")}\n              </DropdownMenuItem>\n            )}\n            {onAddImport && (\n              <DropdownMenuItem onClick={onAddImport}>\n                <IconUpload className=\"h-4 w-4\" />\n                {t(\"actions.importFile\")}\n              </DropdownMenuItem>\n            )}\n          </DropdownMenuContent>\n        </DropdownMenu>\n      )}\n    </>\n  )\n\n  return (\n    <>\n      <UnifiedDataTable\n        data={data}\n        columns={columns}\n        getRowId={(row) => String(row.id)}\n        pagination={externalPagination}\n        paginationInfo={paginationInfo}\n        onPaginationChange={onPaginationChange}\n        searchMode=\"smart\"\n        searchValue={filterValue}\n        onSearch={handleSmartSearch}\n        isSearching={isSearching}\n        filterFields={fingersFilterFields}\n        filterExamples={FINGERS_FILTER_EXAMPLES}\n        onSelectionChange={handleSelectionChange}\n        showBulkDelete={false}\n        showAddButton={false}\n        emptyMessage=\"No results\"\n        toolbarRight={toolbarRightContent}\n      />\n\n      {/* Export confirmation dialog */}\n      <AlertDialog open={exportDialogOpen} onOpenChange={setExportDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{t(\"dialogs.exportTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {t(\"dialogs.exportDesc\", { count: totalCount })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"cancel\")}</AlertDialogCancel>\n            <AlertDialogAction onClick={() => { onExport?.(); setExportDialogOpen(false); }}>\n              {t(\"dialogs.confirmExport\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n\n      {/* Delete selected confirmation dialog */}\n      <AlertDialog open={bulkDeleteDialogOpen} onOpenChange={setBulkDeleteDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{t(\"dialogs.deleteSelectedTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {t(\"dialogs.deleteSelectedDesc\", { count: selectedCount })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"cancel\")}</AlertDialogCancel>\n            <AlertDialogAction \n              onClick={() => { onBulkDelete?.(); setBulkDeleteDialogOpen(false); }}\n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n            >\n              {t(\"dialogs.confirmDelete\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n\n      {/* Delete all confirmation dialog */}\n      <AlertDialog open={deleteAllDialogOpen} onOpenChange={setDeleteAllDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{t(\"dialogs.deleteAllTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {t(\"dialogs.deleteAllDesc\", { count: totalCount })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"cancel\")}</AlertDialogCancel>\n            <AlertDialogAction \n              onClick={() => { onDeleteAll?.(); setDeleteAllDialogOpen(false); }}\n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n            >\n              {t(\"dialogs.confirmDelete\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n    </>\n  )\n}\n"
  },
  {
    "path": "frontend/components/fingerprints/fingers-fingerprint-dialog.tsx",
    "content": "\"use client\"\n\nimport React, { useEffect } from \"react\"\nimport { useForm } from \"react-hook-form\"\nimport { toast } from \"sonner\"\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n} from \"@/components/ui/dialog\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport { Textarea } from \"@/components/ui/textarea\"\nimport {\n  useCreateFingersFingerprint,\n  useUpdateFingersFingerprint,\n} from \"@/hooks/use-fingerprints\"\nimport type { FingersFingerprint } from \"@/types/fingerprint.types\"\nimport { useTranslations } from \"next-intl\"\n\ninterface FingersFingerprintDialogProps {\n  open: boolean\n  onOpenChange: (open: boolean) => void\n  fingerprint?: FingersFingerprint | null\n  onSuccess?: () => void\n}\n\ninterface FormData {\n  name: string\n  link: string\n  rule: string\n  tag: string\n  focus: boolean\n  defaultPort: string\n}\n\nexport function FingersFingerprintDialog({\n  open,\n  onOpenChange,\n  fingerprint,\n  onSuccess,\n}: FingersFingerprintDialogProps) {\n  const isEdit = !!fingerprint\n  const t = useTranslations(\"tools.fingerprints\")\n  const tCommon = useTranslations(\"common.actions\")\n\n  const createMutation = useCreateFingersFingerprint()\n  const updateMutation = useUpdateFingersFingerprint()\n\n  const {\n    register,\n    handleSubmit,\n    reset,\n    setValue,\n    watch,\n    formState: { errors, isSubmitting },\n  } = useForm<FormData>({\n    defaultValues: {\n      name: \"\",\n      link: \"\",\n      rule: \"[]\",\n      tag: \"\",\n      focus: false,\n      defaultPort: \"\",\n    },\n  })\n\n  useEffect(() => {\n    if (fingerprint) {\n      reset({\n        name: fingerprint.name,\n        link: fingerprint.link || \"\",\n        rule: JSON.stringify(fingerprint.rule || [], null, 2),\n        tag: (fingerprint.tag || []).join(\", \"),\n        focus: fingerprint.focus || false,\n        defaultPort: (fingerprint.defaultPort || []).join(\", \"),\n      })\n    } else {\n      reset({\n        name: \"\",\n        link: \"\",\n        rule: \"[]\",\n        tag: \"\",\n        focus: false,\n        defaultPort: \"\",\n      })\n    }\n  }, [fingerprint, reset])\n\n  const onSubmit = async (data: FormData) => {\n    // Parse rule JSON\n    let ruleArray: any[]\n    try {\n      ruleArray = JSON.parse(data.rule)\n      if (!Array.isArray(ruleArray)) {\n        toast.error(t(\"form.ruleArrayRequired\"))\n        return\n      }\n    } catch (e) {\n      toast.error(t(\"form.ruleJsonInvalid\"))\n      return\n    }\n\n    // Parse tags\n    const tagArray = data.tag\n      .split(\",\")\n      .map((t) => t.trim())\n      .filter((t) => t.length > 0)\n\n    // Parse ports\n    const portArray = data.defaultPort\n      .split(\",\")\n      .map((p) => parseInt(p.trim(), 10))\n      .filter((p) => !isNaN(p))\n\n    const payload = {\n      name: data.name.trim(),\n      link: data.link.trim(),\n      rule: ruleArray,\n      tag: tagArray,\n      focus: data.focus,\n      defaultPort: portArray,\n    }\n\n    try {\n      if (isEdit && fingerprint) {\n        await updateMutation.mutateAsync({ id: fingerprint.id, data: payload })\n        toast.success(t(\"toast.updateSuccess\"))\n      } else {\n        await createMutation.mutateAsync(payload)\n        toast.success(t(\"toast.createSuccess\"))\n      }\n      onOpenChange(false)\n      onSuccess?.()\n    } catch (error: any) {\n      toast.error(error.message || (isEdit ? t(\"toast.updateFailed\") : t(\"toast.createFailed\")))\n    }\n  }\n\n  const focus = watch(\"focus\")\n\n  return (\n    <Dialog open={open} onOpenChange={onOpenChange}>\n      <DialogContent className=\"sm:max-w-[600px] max-h-[80vh] overflow-y-auto\">\n        <DialogHeader>\n          <DialogTitle>{isEdit ? t(\"fingers.editTitle\") : t(\"fingers.addTitle\")}</DialogTitle>\n          <DialogDescription>\n            {isEdit ? t(\"fingers.editDesc\") : t(\"fingers.addDesc\")}\n          </DialogDescription>\n        </DialogHeader>\n\n        <form onSubmit={handleSubmit(onSubmit)} className=\"space-y-4\">\n          {/* Name */}\n          <div className=\"space-y-2\">\n            <Label htmlFor=\"name\">{t(\"form.name\")} *</Label>\n            <Input\n              id=\"name\"\n              placeholder={t(\"form.namePlaceholder\")}\n              {...register(\"name\", { required: t(\"form.nameRequired\") })}\n            />\n            {errors.name && (\n              <p className=\"text-sm text-destructive\">{errors.name.message}</p>\n            )}\n          </div>\n\n          {/* Link */}\n          <div className=\"space-y-2\">\n            <Label htmlFor=\"link\">{t(\"form.link\")}</Label>\n            <Input\n              id=\"link\"\n              placeholder={t(\"form.linkPlaceholder\")}\n              {...register(\"link\")}\n            />\n          </div>\n\n          {/* Rule (JSON) */}\n          <div className=\"space-y-2\">\n            <Label htmlFor=\"rule\">{t(\"form.rule\")} *</Label>\n            <Textarea\n              id=\"rule\"\n              placeholder={t(\"form.rulePlaceholder\")}\n              className=\"font-mono text-sm min-h-[120px]\"\n              {...register(\"rule\", { required: t(\"form.ruleRequired\") })}\n            />\n            {errors.rule && (\n              <p className=\"text-sm text-destructive\">{errors.rule.message}</p>\n            )}\n          </div>\n\n          {/* Tags & Focus */}\n          <div className=\"grid grid-cols-2 gap-4\">\n            <div className=\"space-y-2\">\n              <Label htmlFor=\"tag\">{t(\"form.tag\")}</Label>\n              <Input\n                id=\"tag\"\n                placeholder={t(\"form.tagPlaceholder\")}\n                {...register(\"tag\")}\n              />\n            </div>\n\n            <div className=\"space-y-2\">\n              <Label>{t(\"form.mark\")}</Label>\n              <div className=\"flex items-center space-x-2 h-9\">\n                <Checkbox\n                  id=\"focus\"\n                  checked={focus}\n                  onCheckedChange={(checked) => setValue(\"focus\", !!checked)}\n                />\n                <Label htmlFor=\"focus\" className=\"cursor-pointer font-normal\">\n                  {t(\"form.focusLabel\")}\n                </Label>\n              </div>\n            </div>\n          </div>\n\n          {/* Default Ports */}\n          <div className=\"space-y-2\">\n            <Label htmlFor=\"defaultPort\">{t(\"form.defaultPort\")}</Label>\n            <Input\n              id=\"defaultPort\"\n              placeholder={t(\"form.defaultPortPlaceholder\")}\n              {...register(\"defaultPort\")}\n            />\n          </div>\n\n          <DialogFooter>\n            <Button type=\"button\" variant=\"outline\" onClick={() => onOpenChange(false)}>\n              {tCommon(\"cancel\")}\n            </Button>\n            <Button type=\"submit\" disabled={isSubmitting}>\n              {isSubmitting ? \"...\" : isEdit ? tCommon(\"save\") : tCommon(\"create\")}\n            </Button>\n          </DialogFooter>\n        </form>\n      </DialogContent>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "frontend/components/fingerprints/fingers-fingerprint-view.tsx",
    "content": "\"use client\"\n\nimport React, { useState, useMemo } from \"react\"\nimport { AlertTriangle } from \"lucide-react\"\nimport { toast } from \"sonner\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport {\n  useFingersFingerprints,\n  useBulkDeleteFingersFingerprints,\n  useDeleteAllFingersFingerprints,\n} from \"@/hooks/use-fingerprints\"\nimport { FingerprintService } from \"@/services/fingerprint.service\"\nimport { FingersFingerprintDataTable } from \"./fingers-fingerprint-data-table\"\nimport { createFingersFingerprintColumns } from \"./fingers-fingerprint-columns\"\nimport { FingersFingerprintDialog } from \"./fingers-fingerprint-dialog\"\nimport { ImportFingerprintDialog } from \"./import-fingerprint-dialog\"\nimport { DataTableSkeleton } from \"@/components/ui/data-table-skeleton\"\nimport { getDateLocale } from \"@/lib/date-utils\"\nimport type { FingersFingerprint } from \"@/types/fingerprint.types\"\n\nexport function FingersFingerprintView() {\n  const tFingerprints = useTranslations(\"tools.fingerprints\")\n  const locale = useLocale()\n  \n  const [selectedFingerprints, setSelectedFingerprints] = useState<FingersFingerprint[]>([])\n  const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 10 })\n  const [filterQuery, setFilterQuery] = useState(\"\")\n  const [isSearching, setIsSearching] = useState(false)\n  const [addDialogOpen, setAddDialogOpen] = useState(false)\n  const [importDialogOpen, setImportDialogOpen] = useState(false)\n\n  // Query data\n  const { data, isLoading, isFetching, error, refetch } = useFingersFingerprints({\n    page: pagination.pageIndex + 1,\n    pageSize: pagination.pageSize,\n    filter: filterQuery || undefined,\n  })\n\n  // Mutations\n  const bulkDeleteMutation = useBulkDeleteFingersFingerprints()\n  const deleteAllMutation = useDeleteAllFingersFingerprints()\n\n  // Search state\n  React.useEffect(() => {\n    if (!isFetching && isSearching) {\n      setIsSearching(false)\n    }\n  }, [isFetching, isSearching])\n\n  const handleFilterChange = (value: string) => {\n    setIsSearching(true)\n    setFilterQuery(value)\n    setPagination((prev) => ({ ...prev, pageIndex: 0 }))\n  }\n\n  // Format date\n  const formatDate = (dateString: string): string => {\n    return new Date(dateString).toLocaleString(getDateLocale(locale), {\n      year: \"numeric\",\n      month: \"numeric\",\n      day: \"numeric\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      hour12: false,\n    })\n  }\n\n  // Export\n  const handleExport = async () => {\n    try {\n      const blob = await FingerprintService.exportFingersFingerprints()\n      const url = URL.createObjectURL(blob)\n      const a = document.createElement(\"a\")\n      a.href = url\n      a.download = `fingers-fingerprints-${Date.now()}.json`\n      document.body.appendChild(a)\n      a.click()\n      document.body.removeChild(a)\n      URL.revokeObjectURL(url)\n      toast.success(tFingerprints(\"toast.exportSuccess\"))\n    } catch (error: any) {\n      toast.error(error.message || tFingerprints(\"toast.exportFailed\"))\n    }\n  }\n\n  // Bulk delete\n  const handleBulkDelete = async () => {\n    if (selectedFingerprints.length === 0) return\n\n    try {\n      const ids = selectedFingerprints.map((f) => f.id)\n      const result = await bulkDeleteMutation.mutateAsync(ids)\n      toast.success(tFingerprints(\"toast.deleteSuccess\", { count: result.deleted }))\n      setSelectedFingerprints([])\n    } catch (error: any) {\n      toast.error(error.message || tFingerprints(\"toast.deleteFailed\"))\n    }\n  }\n\n  // Delete all\n  const handleDeleteAll = async () => {\n    try {\n      const result = await deleteAllMutation.mutateAsync()\n      toast.success(tFingerprints(\"toast.deleteSuccess\", { count: result.deleted }))\n    } catch (error: any) {\n      toast.error(error.message || tFingerprints(\"toast.deleteFailed\"))\n    }\n  }\n\n  // Column definitions\n  const columns = useMemo(\n    () => createFingersFingerprintColumns({ formatDate }),\n    []\n  )\n\n  // Transform data\n  const fingerprints: FingersFingerprint[] = useMemo(() => {\n    if (!data?.results) return []\n    return data.results\n  }, [data])\n\n  // Stabilize paginationInfo reference\n  const total = data?.total ?? 0\n  const page = data?.page ?? 1\n  const serverPageSize = data?.pageSize ?? 10\n  const totalPages = data?.totalPages ?? 1\n  \n  const paginationInfo = useMemo(() => ({\n    total,\n    page,\n    pageSize: serverPageSize,\n    totalPages,\n  }), [total, page, serverPageSize, totalPages])\n\n  // Error state\n  if (error) {\n    return (\n      <div className=\"flex flex-col items-center justify-center py-12\">\n        <div className=\"rounded-full bg-destructive/10 p-3 mb-4\">\n          <AlertTriangle className=\"h-10 w-10 text-destructive\" />\n        </div>\n        <h3 className=\"text-lg font-semibold mb-2\">{tFingerprints(\"loadFailed\")}</h3>\n        <p className=\"text-muted-foreground text-center mb-4\">\n          {error.message || tFingerprints(\"loadError\")}\n        </p>\n        <button\n          onClick={() => refetch()}\n          className=\"px-4 py-2 bg-primary text-primary-foreground rounded-md hover:bg-primary/90\"\n        >\n          {tFingerprints(\"reload\")}\n        </button>\n      </div>\n    )\n  }\n\n  // Loading state\n  if (isLoading && !data) {\n    return <DataTableSkeleton toolbarButtonCount={3} rows={6} columns={7} />\n  }\n\n  return (\n    <>\n      <FingersFingerprintDataTable\n        data={fingerprints}\n        columns={columns}\n        onSelectionChange={setSelectedFingerprints}\n        filterValue={filterQuery}\n        onFilterChange={handleFilterChange}\n        isSearching={isSearching}\n        onAddSingle={() => setAddDialogOpen(true)}\n        onAddImport={() => setImportDialogOpen(true)}\n        onExport={handleExport}\n        onBulkDelete={handleBulkDelete}\n        onDeleteAll={handleDeleteAll}\n        totalCount={data?.total || 0}\n        pagination={pagination}\n        paginationInfo={paginationInfo}\n        onPaginationChange={setPagination}\n      />\n\n      {/* Add fingerprint dialog */}\n      <FingersFingerprintDialog\n        open={addDialogOpen}\n        onOpenChange={setAddDialogOpen}\n        onSuccess={() => refetch()}\n      />\n\n      {/* Import fingerprint dialog */}\n      <ImportFingerprintDialog\n        open={importDialogOpen}\n        onOpenChange={setImportDialogOpen}\n        fingerprintType=\"fingers\"\n        onSuccess={() => refetch()}\n      />\n    </>\n  )\n}\n"
  },
  {
    "path": "frontend/components/fingerprints/goby-fingerprint-columns.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { ColumnDef } from \"@tanstack/react-table\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport { DataTableColumnHeader } from \"@/components/ui/data-table/column-header\"\nimport { ExpandableCell, ExpandableMonoCell } from \"@/components/ui/data-table/expandable-cell\"\nimport { ChevronDown, ChevronUp } from \"lucide-react\"\nimport { useTranslations } from \"next-intl\"\nimport type { GobyFingerprint } from \"@/types/fingerprint.types\"\n\ninterface ColumnOptions {\n  formatDate: (date: string) => string\n}\n\n/**\n * Rule details cell component - displays raw JSON data\n */\nfunction RuleDetailsCell({ rules }: { rules: any[] }) {\n  const t = useTranslations(\"tooltips\")\n  const [expanded, setExpanded] = React.useState(false)\n  \n  if (!rules || rules.length === 0) return <span className=\"text-muted-foreground\">-</span>\n  \n  const displayRules = expanded ? rules : rules.slice(0, 2)\n  const hasMore = rules.length > 2\n  \n  return (\n    <div className=\"flex flex-col gap-1\">\n      <div className=\"font-mono text-xs space-y-0.5\">\n        {displayRules.map((r, idx) => (\n          <div key={idx} className={expanded ? \"break-all\" : \"truncate\"}>\n            {JSON.stringify(r)}\n          </div>\n        ))}\n      </div>\n      {hasMore && (\n        <button\n          onClick={() => setExpanded(!expanded)}\n          className=\"text-xs text-primary hover:underline self-start flex items-center gap-1\"\n        >\n          {expanded ? (\n            <>\n              <ChevronUp className=\"h-3 w-3\" />\n              {t(\"collapse\")}\n            </>\n          ) : (\n            <>\n              <ChevronDown className=\"h-3 w-3\" />\n              {t(\"expand\")}\n            </>\n          )}\n        </button>\n      )}\n    </div>\n  )\n}\n\n/**\n * Create Goby fingerprint table column definitions\n */\nexport function createGobyFingerprintColumns({\n  formatDate,\n}: ColumnOptions): ColumnDef<GobyFingerprint>[] {\n  return [\n    {\n      id: \"select\",\n      header: ({ table }) => (\n        <Checkbox\n          checked={\n            table.getIsAllPageRowsSelected() ||\n            (table.getIsSomePageRowsSelected() && \"indeterminate\")\n          }\n          onCheckedChange={(value) => table.toggleAllPageRowsSelected(!!value)}\n          aria-label=\"Select all\"\n        />\n      ),\n      cell: ({ row }) => (\n        <Checkbox\n          checked={row.getIsSelected()}\n          onCheckedChange={(value) => row.toggleSelected(!!value)}\n          aria-label=\"Select row\"\n        />\n      ),\n      enableSorting: false,\n      enableHiding: false,\n      enableResizing: false,\n      size: 40,\n    },\n    {\n      accessorKey: \"name\",\n      meta: { title: \"Name\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Name\" />\n      ),\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"name\")} maxLines={2} />\n      ),\n      enableResizing: true,\n      size: 200,\n    },\n    {\n      accessorKey: \"logic\",\n      meta: { title: \"Logic\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Logic\" />\n      ),\n      cell: ({ row }) => (\n        <ExpandableMonoCell value={row.getValue(\"logic\")} maxLines={1} />\n      ),\n      enableResizing: false,\n      size: 100,\n    },\n    {\n      accessorKey: \"rule\",\n      meta: { title: \"Rules\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Rules\" />\n      ),\n      cell: ({ row }) => {\n        const rules = row.getValue(\"rule\") as any[]\n        return <span>{rules?.length || 0}</span>\n      },\n      enableResizing: false,\n      size: 80,\n    },\n    {\n      id: \"ruleDetails\",\n      meta: { title: \"Rule Details\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Rule Details\" />\n      ),\n      cell: ({ row }) => <RuleDetailsCell rules={row.original.rule || []} />,\n      enableResizing: true,\n      size: 300,\n    },\n    {\n      accessorKey: \"createdAt\",\n      meta: { title: \"Created\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Created\" />\n      ),\n      cell: ({ row }) => {\n        const date = row.getValue(\"createdAt\") as string\n        return (\n          <div className=\"text-sm text-muted-foreground\">\n            {formatDate(date)}\n          </div>\n        )\n      },\n      enableResizing: false,\n      size: 160,\n    },\n  ]\n}\n"
  },
  {
    "path": "frontend/components/fingerprints/goby-fingerprint-data-table.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport type { ColumnDef } from \"@tanstack/react-table\"\nimport {\n  IconChevronDown,\n  IconTrash,\n  IconDownload,\n  IconUpload,\n  IconPlus,\n  IconSettings,\n} from \"@tabler/icons-react\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuSeparator,\n  DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\"\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\"\nimport { UnifiedDataTable } from \"@/components/ui/data-table\"\nimport type { FilterField } from \"@/components/common/smart-filter-input\"\nimport type { GobyFingerprint } from \"@/types/fingerprint.types\"\nimport type { PaginationInfo } from \"@/types/common.types\"\nimport { useTranslations } from \"next-intl\"\n\nconst GOBY_FILTER_EXAMPLES = [\n  'name=\"Apache\"',\n  'name==\"Nginx\"',\n  'logic=\"a||b\"',\n]\n\ninterface GobyFingerprintDataTableProps {\n  data: GobyFingerprint[]\n  columns: ColumnDef<GobyFingerprint>[]\n  onSelectionChange?: (selectedRows: GobyFingerprint[]) => void\n  filterValue?: string\n  onFilterChange?: (value: string) => void\n  isSearching?: boolean\n  onAddSingle?: () => void\n  onAddImport?: () => void\n  onExport?: () => void\n  onBulkDelete?: () => void\n  onDeleteAll?: () => void\n  totalCount?: number\n  pagination?: { pageIndex: number; pageSize: number }\n  paginationInfo?: PaginationInfo\n  onPaginationChange?: (pagination: { pageIndex: number; pageSize: number }) => void\n}\n\nexport function GobyFingerprintDataTable({\n  data = [],\n  columns,\n  onSelectionChange,\n  filterValue,\n  onFilterChange,\n  isSearching = false,\n  onAddSingle,\n  onAddImport,\n  onExport,\n  onBulkDelete,\n  onDeleteAll,\n  totalCount = 0,\n  pagination: externalPagination,\n  paginationInfo,\n  onPaginationChange,\n}: GobyFingerprintDataTableProps) {\n  const [selectedCount, setSelectedCount] = React.useState(0)\n  const [exportDialogOpen, setExportDialogOpen] = React.useState(false)\n  const [bulkDeleteDialogOpen, setBulkDeleteDialogOpen] = React.useState(false)\n  const [deleteAllDialogOpen, setDeleteAllDialogOpen] = React.useState(false)\n  const t = useTranslations(\"tools.fingerprints\")\n  const tCommon = useTranslations(\"common.actions\")\n\n  // Goby filter field configuration (using translations)\n  const gobyFilterFields: FilterField[] = React.useMemo(() => [\n    { key: \"name\", label: \"Name\", description: t(\"filter.goby.product\") },\n    { key: \"logic\", label: \"Logic\", description: t(\"filter.goby.logic\") },\n  ], [t])\n\n  const handleSmartSearch = (rawQuery: string) => {\n    if (onFilterChange) {\n      onFilterChange(rawQuery)\n    }\n  }\n\n  const handleSelectionChange = (rows: GobyFingerprint[]) => {\n    setSelectedCount(rows.length)\n    onSelectionChange?.(rows)\n  }\n\n  // Custom toolbar right-side buttons\n  const toolbarRightContent = (\n    <>\n      {/* Operations menu */}\n      <DropdownMenu>\n        <DropdownMenuTrigger asChild>\n          <Button variant=\"outline\" size=\"sm\">\n            <IconSettings className=\"h-4 w-4\" />\n            {t(\"actions.operations\")}\n            <IconChevronDown className=\"h-4 w-4\" />\n          </Button>\n        </DropdownMenuTrigger>\n        <DropdownMenuContent align=\"end\" className=\"w-48\">\n          {onExport && (\n            <DropdownMenuItem onClick={() => setExportDialogOpen(true)}>\n              <IconDownload className=\"h-4 w-4\" />\n              {t(\"actions.exportAll\")}\n            </DropdownMenuItem>\n          )}\n          <DropdownMenuSeparator />\n          {onBulkDelete && (\n            <DropdownMenuItem \n              onClick={() => setBulkDeleteDialogOpen(true)}\n              disabled={selectedCount === 0}\n              className=\"text-destructive focus:text-destructive\"\n            >\n              <IconTrash className=\"h-4 w-4\" />\n              {t(\"actions.deleteSelected\")} ({selectedCount})\n            </DropdownMenuItem>\n          )}\n          {onDeleteAll && (\n            <DropdownMenuItem \n              onClick={() => setDeleteAllDialogOpen(true)}\n              className=\"text-destructive focus:text-destructive\"\n            >\n              <IconTrash className=\"h-4 w-4\" />\n              {t(\"actions.deleteAll\")}\n            </DropdownMenuItem>\n          )}\n        </DropdownMenuContent>\n      </DropdownMenu>\n\n      {/* Add fingerprint */}\n      {(onAddSingle || onAddImport) && (\n        <DropdownMenu>\n          <DropdownMenuTrigger asChild>\n            <Button size=\"sm\">\n              <IconPlus className=\"h-4 w-4\" />\n              {t(\"actions.addFingerprint\")}\n              <IconChevronDown className=\"h-4 w-4\" />\n            </Button>\n          </DropdownMenuTrigger>\n          <DropdownMenuContent align=\"end\" className=\"w-40\">\n            {onAddSingle && (\n              <DropdownMenuItem onClick={onAddSingle}>\n                <IconPlus className=\"h-4 w-4\" />\n                {t(\"actions.addSingle\")}\n              </DropdownMenuItem>\n            )}\n            {onAddImport && (\n              <DropdownMenuItem onClick={onAddImport}>\n                <IconUpload className=\"h-4 w-4\" />\n                {t(\"actions.importFile\")}\n              </DropdownMenuItem>\n            )}\n          </DropdownMenuContent>\n        </DropdownMenu>\n      )}\n    </>\n  )\n\n  return (\n    <>\n      <UnifiedDataTable\n        data={data}\n        columns={columns}\n        getRowId={(row) => String(row.id)}\n        // Pagination\n        pagination={externalPagination}\n        paginationInfo={paginationInfo}\n        onPaginationChange={onPaginationChange}\n        // Smart filter\n        searchMode=\"smart\"\n        searchValue={filterValue}\n        onSearch={handleSmartSearch}\n        isSearching={isSearching}\n        filterFields={gobyFilterFields}\n        filterExamples={GOBY_FILTER_EXAMPLES}\n        // Selection\n        onSelectionChange={handleSelectionChange}\n        // Bulk operations - use custom buttons\n        showBulkDelete={false}\n        showAddButton={false}\n        // Empty state\n        emptyMessage=\"No results\"\n        // Custom toolbar buttons\n        toolbarRight={toolbarRightContent}\n      />\n\n      {/* Export confirmation dialog */}\n      <AlertDialog open={exportDialogOpen} onOpenChange={setExportDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{t(\"dialogs.exportTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {t(\"dialogs.exportDesc\", { count: totalCount })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"cancel\")}</AlertDialogCancel>\n            <AlertDialogAction onClick={() => { onExport?.(); setExportDialogOpen(false); }}>\n              {t(\"dialogs.confirmExport\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n\n      {/* Delete selected confirmation dialog */}\n      <AlertDialog open={bulkDeleteDialogOpen} onOpenChange={setBulkDeleteDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{t(\"dialogs.deleteSelectedTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {t(\"dialogs.deleteSelectedDesc\", { count: selectedCount })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"cancel\")}</AlertDialogCancel>\n            <AlertDialogAction \n              onClick={() => { onBulkDelete?.(); setBulkDeleteDialogOpen(false); }}\n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n            >\n              {t(\"dialogs.confirmDelete\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n\n      {/* Delete all confirmation dialog */}\n      <AlertDialog open={deleteAllDialogOpen} onOpenChange={setDeleteAllDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{t(\"dialogs.deleteAllTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {t(\"dialogs.deleteAllDesc\", { count: totalCount })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"cancel\")}</AlertDialogCancel>\n            <AlertDialogAction \n              onClick={() => { onDeleteAll?.(); setDeleteAllDialogOpen(false); }}\n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n            >\n              {t(\"dialogs.confirmDelete\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n    </>\n  )\n}\n"
  },
  {
    "path": "frontend/components/fingerprints/goby-fingerprint-dialog.tsx",
    "content": "\"use client\"\n\nimport React, { useEffect } from \"react\"\nimport { useForm, useFieldArray } from \"react-hook-form\"\nimport { toast } from \"sonner\"\nimport { IconPlus, IconTrash } from \"@tabler/icons-react\"\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n} from \"@/components/ui/dialog\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from \"@/components/ui/select\"\nimport {\n  useCreateGobyFingerprint,\n  useUpdateGobyFingerprint,\n} from \"@/hooks/use-fingerprints\"\nimport type { GobyFingerprint, GobyRule } from \"@/types/fingerprint.types\"\nimport { useTranslations } from \"next-intl\"\n\ninterface GobyFingerprintDialogProps {\n  open: boolean\n  onOpenChange: (open: boolean) => void\n  fingerprint?: GobyFingerprint | null\n  onSuccess?: () => void\n}\n\ninterface FormData {\n  name: string\n  logic: string\n  rule: GobyRule[]\n}\n\nconst LABEL_OPTIONS = [\n  { value: \"title\", label: \"title\" },\n  { value: \"header\", label: \"header\" },\n  { value: \"body\", label: \"body\" },\n  { value: \"server\", label: \"server\" },\n  { value: \"banner\", label: \"banner\" },\n  { value: \"port\", label: \"port\" },\n  { value: \"protocol\", label: \"protocol\" },\n  { value: \"cert\", label: \"cert\" },\n]\n\nexport function GobyFingerprintDialog({\n  open,\n  onOpenChange,\n  fingerprint,\n  onSuccess,\n}: GobyFingerprintDialogProps) {\n  const isEdit = !!fingerprint\n  const t = useTranslations(\"tools.fingerprints\")\n  const tCommon = useTranslations(\"common.actions\")\n  const tColumns = useTranslations(\"columns.fingerprint\")\n\n  const createMutation = useCreateGobyFingerprint()\n  const updateMutation = useUpdateGobyFingerprint()\n\n  const {\n    register,\n    handleSubmit,\n    reset,\n    control,\n    setValue,\n    watch,\n    formState: { errors, isSubmitting },\n  } = useForm<FormData>({\n    defaultValues: {\n      name: \"\",\n      logic: \"a\",\n      rule: [{ label: \"title\", feature: \"\", is_equal: true }],\n    },\n  })\n\n  const { fields, append, remove } = useFieldArray({\n    control,\n    name: \"rule\",\n  })\n\n  useEffect(() => {\n    if (fingerprint) {\n      reset({\n        name: fingerprint.name,\n        logic: fingerprint.logic,\n        rule: fingerprint.rule.length > 0 \n          ? fingerprint.rule \n          : [{ label: \"title\", feature: \"\", is_equal: true }],\n      })\n    } else {\n      reset({\n        name: \"\",\n        logic: \"a\",\n        rule: [{ label: \"title\", feature: \"\", is_equal: true }],\n      })\n    }\n  }, [fingerprint, reset])\n\n  const onSubmit = async (data: FormData) => {\n    if (data.rule.length === 0) {\n      toast.error(t(\"form.logicRequired\"))\n      return\n    }\n\n    const payload = {\n      name: data.name.trim(),\n      logic: data.logic.trim(),\n      rule: data.rule,\n    }\n\n    try {\n      if (isEdit && fingerprint) {\n        await updateMutation.mutateAsync({ id: fingerprint.id, data: payload })\n        toast.success(t(\"toast.updateSuccess\"))\n      } else {\n        await createMutation.mutateAsync(payload)\n        toast.success(t(\"toast.createSuccess\"))\n      }\n      onOpenChange(false)\n      onSuccess?.()\n    } catch (error: any) {\n      toast.error(error.message || (isEdit ? t(\"toast.updateFailed\") : t(\"toast.createFailed\")))\n    }\n  }\n\n  const addRule = () => {\n    const nextLabel = String.fromCharCode(97 + fields.length)\n    append({ label: \"title\", feature: \"\", is_equal: true })\n  }\n\n  const watchedRules = watch(\"rule\")\n\n  return (\n    <Dialog open={open} onOpenChange={onOpenChange}>\n      <DialogContent className=\"sm:max-w-[600px] max-h-[80vh] overflow-y-auto\">\n        <DialogHeader>\n          <DialogTitle>{isEdit ? t(\"goby.editTitle\") : t(\"goby.addTitle\")}</DialogTitle>\n          <DialogDescription>\n            {isEdit ? t(\"goby.editDesc\") : t(\"goby.addDesc\")}\n          </DialogDescription>\n        </DialogHeader>\n\n        <form onSubmit={handleSubmit(onSubmit)} className=\"space-y-4\">\n          {/* Product name & Logic expression */}\n          <div className=\"grid grid-cols-2 gap-4\">\n            <div className=\"space-y-2\">\n              <Label htmlFor=\"name\">{tColumns(\"name\") || \"Name\"} *</Label>\n              <Input\n                id=\"name\"\n                placeholder={t(\"form.namePlaceholder\")}\n                {...register(\"name\", { required: t(\"form.nameRequired\") })}\n              />\n              {errors.name && (\n                <p className=\"text-sm text-destructive\">{errors.name.message}</p>\n              )}\n            </div>\n\n            <div className=\"space-y-2\">\n              <Label htmlFor=\"logic\">{tColumns(\"logic\")} *</Label>\n              <Input\n                id=\"logic\"\n                placeholder={t(\"form.logicPlaceholder\")}\n                {...register(\"logic\", { required: t(\"form.logicRequired\") })}\n              />\n              {errors.logic && (\n                <p className=\"text-sm text-destructive\">{errors.logic.message}</p>\n              )}\n            </div>\n          </div>\n\n          {/* Rule list */}\n          <div className=\"space-y-2\">\n            <div className=\"flex items-center justify-between\">\n              <Label>{tColumns(\"rules\")} *</Label>\n              <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={addRule}>\n                <IconPlus className=\"h-4 w-4\" />\n                {tCommon(\"add\")}\n              </Button>\n            </div>\n            \n            <div className=\"space-y-2\">\n              {fields.map((field, index) => (\n                <div key={field.id} className=\"flex items-center gap-2 p-3 border rounded-md bg-muted/30\">\n                  <div className=\"w-24\">\n                    <Select \n                      value={watchedRules[index]?.label || \"title\"} \n                      onValueChange={(v) => setValue(`rule.${index}.label`, v)}\n                    >\n                      <SelectTrigger className=\"h-8\">\n                        <SelectValue />\n                      </SelectTrigger>\n                      <SelectContent>\n                        {LABEL_OPTIONS.map((opt) => (\n                          <SelectItem key={opt.value} value={opt.value}>\n                            {opt.label}\n                          </SelectItem>\n                        ))}\n                      </SelectContent>\n                    </Select>\n                  </div>\n                  <div className=\"flex-1\">\n                    <Input\n                      {...register(`rule.${index}.feature` as const, { required: true })}\n                      placeholder={t(\"form.featurePlaceholder\")}\n                      className=\"h-8\"\n                    />\n                  </div>\n                  <div className=\"flex items-center gap-1\">\n                    <Checkbox\n                      checked={watchedRules[index]?.is_equal ?? true}\n                      onCheckedChange={(checked) => setValue(`rule.${index}.is_equal`, !!checked)}\n                    />\n                    <span className=\"text-xs text-muted-foreground\">Match</span>\n                  </div>\n                  <Button\n                    type=\"button\"\n                    variant=\"ghost\"\n                    size=\"sm\"\n                    onClick={() => remove(index)}\n                    disabled={fields.length <= 1}\n                    className=\"h-8 w-8 p-0\"\n                  >\n                    <IconTrash className=\"h-4 w-4 text-destructive\" />\n                  </Button>\n                </div>\n              ))}\n            </div>\n          </div>\n\n          <DialogFooter>\n            <Button type=\"button\" variant=\"outline\" onClick={() => onOpenChange(false)}>\n              {tCommon(\"cancel\")}\n            </Button>\n            <Button type=\"submit\" disabled={isSubmitting}>\n              {isSubmitting ? \"...\" : isEdit ? tCommon(\"save\") : tCommon(\"create\")}\n            </Button>\n          </DialogFooter>\n        </form>\n      </DialogContent>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "frontend/components/fingerprints/goby-fingerprint-view.tsx",
    "content": "\"use client\"\n\nimport React, { useState, useMemo } from \"react\"\nimport { AlertTriangle } from \"lucide-react\"\nimport { toast } from \"sonner\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport {\n  useGobyFingerprints,\n  useBulkDeleteGobyFingerprints,\n  useDeleteAllGobyFingerprints,\n} from \"@/hooks/use-fingerprints\"\nimport { FingerprintService } from \"@/services/fingerprint.service\"\nimport { GobyFingerprintDataTable } from \"./goby-fingerprint-data-table\"\nimport { createGobyFingerprintColumns } from \"./goby-fingerprint-columns\"\nimport { GobyFingerprintDialog } from \"./goby-fingerprint-dialog\"\nimport { ImportFingerprintDialog } from \"./import-fingerprint-dialog\"\nimport { DataTableSkeleton } from \"@/components/ui/data-table-skeleton\"\nimport { getDateLocale } from \"@/lib/date-utils\"\nimport type { GobyFingerprint } from \"@/types/fingerprint.types\"\n\nexport function GobyFingerprintView() {\n  const [selectedFingerprints, setSelectedFingerprints] = useState<GobyFingerprint[]>([])\n  const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 10 })\n  const [filterQuery, setFilterQuery] = useState(\"\")\n  const [isSearching, setIsSearching] = useState(false)\n  const [addDialogOpen, setAddDialogOpen] = useState(false)\n  const [importDialogOpen, setImportDialogOpen] = useState(false)\n\n  const tFingerprints = useTranslations(\"tools.fingerprints\")\n  const locale = useLocale()\n\n  // Query data\n  const { data, isLoading, isFetching, error, refetch } = useGobyFingerprints({\n    page: pagination.pageIndex + 1,\n    pageSize: pagination.pageSize,\n    filter: filterQuery || undefined,\n  })\n\n  // Mutations\n  const bulkDeleteMutation = useBulkDeleteGobyFingerprints()\n  const deleteAllMutation = useDeleteAllGobyFingerprints()\n\n  // Search state\n  React.useEffect(() => {\n    if (!isFetching && isSearching) {\n      setIsSearching(false)\n    }\n  }, [isFetching, isSearching])\n\n  const handleFilterChange = (value: string) => {\n    setIsSearching(true)\n    setFilterQuery(value)\n    setPagination((prev) => ({ ...prev, pageIndex: 0 }))\n  }\n\n  // Format date\n  const formatDate = (dateString: string): string => {\n    return new Date(dateString).toLocaleString(getDateLocale(locale), {\n      year: \"numeric\",\n      month: \"numeric\",\n      day: \"numeric\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      hour12: false,\n    })\n  }\n\n  // Export\n  const handleExport = async () => {\n    try {\n      const blob = await FingerprintService.exportGobyFingerprints()\n      const url = URL.createObjectURL(blob)\n      const a = document.createElement(\"a\")\n      a.href = url\n      a.download = `goby-fingerprints-${Date.now()}.json`\n      document.body.appendChild(a)\n      a.click()\n      document.body.removeChild(a)\n      URL.revokeObjectURL(url)\n      toast.success(tFingerprints(\"toast.exportSuccess\"))\n    } catch (error: any) {\n      toast.error(error.message || tFingerprints(\"toast.exportFailed\"))\n    }\n  }\n\n  // Bulk delete\n  const handleBulkDelete = async () => {\n    if (selectedFingerprints.length === 0) return\n\n    try {\n      const ids = selectedFingerprints.map((f) => f.id)\n      const result = await bulkDeleteMutation.mutateAsync(ids)\n      toast.success(tFingerprints(\"toast.deleteSuccess\", { count: result.deleted }))\n      setSelectedFingerprints([])\n    } catch (error: any) {\n      toast.error(error.message || tFingerprints(\"toast.deleteFailed\"))\n    }\n  }\n\n  // Delete all\n  const handleDeleteAll = async () => {\n    try {\n      const result = await deleteAllMutation.mutateAsync()\n      toast.success(tFingerprints(\"toast.deleteSuccess\", { count: result.deleted }))\n    } catch (error: any) {\n      toast.error(error.message || tFingerprints(\"toast.deleteFailed\"))\n    }\n  }\n\n  // Column definitions\n  const columns = useMemo(\n    () => createGobyFingerprintColumns({ formatDate }),\n    []\n  )\n\n  // Transform data\n  const fingerprints: GobyFingerprint[] = useMemo(() => {\n    if (!data?.results) return []\n    return data.results\n  }, [data])\n\n  // Stabilize paginationInfo reference to avoid unnecessary re-renders\n  const total = data?.total ?? 0\n  const page = data?.page ?? 1\n  const serverPageSize = data?.pageSize ?? 10\n  const totalPages = data?.totalPages ?? 1\n  \n  const paginationInfo = useMemo(() => ({\n    total,\n    page,\n    pageSize: serverPageSize,\n    totalPages,\n  }), [total, page, serverPageSize, totalPages])\n\n  // Error state\n  if (error) {\n    return (\n      <div className=\"flex flex-col items-center justify-center py-12\">\n        <div className=\"rounded-full bg-destructive/10 p-3 mb-4\">\n          <AlertTriangle className=\"h-10 w-10 text-destructive\" />\n        </div>\n        <h3 className=\"text-lg font-semibold mb-2\">{tFingerprints(\"loadFailed\")}</h3>\n        <p className=\"text-muted-foreground text-center mb-4\">\n          {error.message || tFingerprints(\"loadError\")}\n        </p>\n        <button\n          onClick={() => refetch()}\n          className=\"px-4 py-2 bg-primary text-primary-foreground rounded-md hover:bg-primary/90\"\n        >\n          {tFingerprints(\"reload\")}\n        </button>\n      </div>\n    )\n  }\n\n  // Loading state\n  if (isLoading && !data) {\n    return <DataTableSkeleton toolbarButtonCount={3} rows={6} columns={6} />\n  }\n\n  return (\n    <>\n      <GobyFingerprintDataTable\n        data={fingerprints}\n        columns={columns}\n        onSelectionChange={setSelectedFingerprints}\n        filterValue={filterQuery}\n        onFilterChange={handleFilterChange}\n        isSearching={isSearching}\n        onAddSingle={() => setAddDialogOpen(true)}\n        onAddImport={() => setImportDialogOpen(true)}\n        onExport={handleExport}\n        onBulkDelete={handleBulkDelete}\n        onDeleteAll={handleDeleteAll}\n        totalCount={data?.total || 0}\n        pagination={pagination}\n        paginationInfo={paginationInfo}\n        onPaginationChange={setPagination}\n      />\n\n      {/* Add fingerprint dialog */}\n      <GobyFingerprintDialog\n        open={addDialogOpen}\n        onOpenChange={setAddDialogOpen}\n        onSuccess={() => refetch()}\n      />\n\n      {/* Import fingerprint dialog */}\n      <ImportFingerprintDialog\n        open={importDialogOpen}\n        onOpenChange={setImportDialogOpen}\n        onSuccess={() => refetch()}\n        fingerprintType=\"goby\"\n      />\n    </>\n  )\n}\n"
  },
  {
    "path": "frontend/components/fingerprints/import-fingerprint-dialog.tsx",
    "content": "\"use client\"\n\nimport React, { useState } from \"react\"\nimport { toast } from \"sonner\"\nimport { useTranslations } from \"next-intl\"\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n} from \"@/components/ui/dialog\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n  Dropzone,\n  DropzoneContent,\n  DropzoneEmptyState,\n} from \"@/components/ui/dropzone\"\nimport {\n  useImportEholeFingerprints,\n  useImportGobyFingerprints,\n  useImportWappalyzerFingerprints,\n  useImportFingersFingerprints,\n  useImportFingerPrintHubFingerprints,\n  useImportARLFingerprints,\n} from \"@/hooks/use-fingerprints\"\n\ntype FingerprintType = \"ehole\" | \"goby\" | \"wappalyzer\" | \"fingers\" | \"fingerprinthub\" | \"arl\"\n\ninterface ImportFingerprintDialogProps {\n  open: boolean\n  onOpenChange: (open: boolean) => void\n  onSuccess?: () => void\n  fingerprintType?: FingerprintType\n  acceptedFileTypes?: string\n}\n\nexport function ImportFingerprintDialog({\n  open,\n  onOpenChange,\n  onSuccess,\n  fingerprintType = \"ehole\",\n  acceptedFileTypes = \".json\",\n}: ImportFingerprintDialogProps) {\n  const [files, setFiles] = useState<File[]>([])\n  const t = useTranslations(\"tools.fingerprints\")\n  const tCommon = useTranslations(\"common.actions\")\n  const tToast = useTranslations(\"toast\")\n  \n  const eholeImportMutation = useImportEholeFingerprints()\n  const gobyImportMutation = useImportGobyFingerprints()\n  const wappalyzerImportMutation = useImportWappalyzerFingerprints()\n  const fingersImportMutation = useImportFingersFingerprints()\n  const fingerprinthubImportMutation = useImportFingerPrintHubFingerprints()\n  const arlImportMutation = useImportARLFingerprints()\n\n  // Fingerprint type configuration\n  const FINGERPRINT_CONFIG: Record<FingerprintType, {\n    title: string\n    description: string\n    formatHint: string\n    validate: (json: any) => { valid: boolean; error?: string }\n  }> = {\n    ehole: {\n      title: t(\"import.eholeTitle\"),\n      description: t(\"import.eholeDesc\"),\n      formatHint: t.raw(\"import.eholeFormatHint\") as string,\n      validate: (json) => {\n        if (!json.fingerprint) {\n          return { valid: false, error: t(\"import.eholeInvalidMissing\") }\n        }\n        if (!Array.isArray(json.fingerprint)) {\n          return { valid: false, error: t(\"import.eholeInvalidArray\") }\n        }\n        if (json.fingerprint.length === 0) {\n          return { valid: false, error: t(\"import.emptyData\") }\n        }\n        const first = json.fingerprint[0]\n        if (!first.cms || !first.keyword) {\n          return { valid: false, error: t(\"import.eholeInvalidFields\") }\n        }\n        return { valid: true }\n      },\n    },\n    goby: {\n      title: t(\"import.gobyTitle\"),\n      description: t(\"import.gobyDesc\"),\n      formatHint: t.raw(\"import.gobyFormatHint\") as string,\n      validate: (json) => {\n        // Support both array and object formats\n        if (Array.isArray(json)) {\n          if (json.length === 0) {\n            return { valid: false, error: t(\"import.emptyData\") }\n          }\n          const first = json[0]\n          if (!first.product || !first.rule) {\n            return { valid: false, error: t(\"import.gobyInvalidFields\") }\n          }\n        } else if (typeof json === \"object\" && json !== null) {\n          if (Object.keys(json).length === 0) {\n            return { valid: false, error: t(\"import.emptyData\") }\n          }\n        } else {\n          return { valid: false, error: t(\"import.gobyInvalidFormat\") }\n        }\n        return { valid: true }\n      },\n    },\n    wappalyzer: {\n      title: t(\"import.wappalyzerTitle\"),\n      description: t(\"import.wappalyzerDesc\"),\n      formatHint: t.raw(\"import.wappalyzerFormatHint\") as string,\n      validate: (json) => {\n        // Support array format\n        if (Array.isArray(json)) {\n          if (json.length === 0) {\n            return { valid: false, error: t(\"import.emptyData\") }\n          }\n          return { valid: true }\n        }\n        // Support object format (apps or technologies)\n        const apps = json.apps || json.technologies\n        if (apps) {\n          if (typeof apps !== \"object\" || Array.isArray(apps)) {\n            return { valid: false, error: t(\"import.wappalyzerInvalidApps\") }\n          }\n          if (Object.keys(apps).length === 0) {\n            return { valid: false, error: t(\"import.emptyData\") }\n          }\n          return { valid: true }\n        }\n        // Direct object format\n        if (typeof json === \"object\" && json !== null) {\n          if (Object.keys(json).length === 0) {\n            return { valid: false, error: t(\"import.emptyData\") }\n          }\n          return { valid: true }\n        }\n        return { valid: false, error: t(\"import.wappalyzerInvalidFormat\") }\n      },\n    },\n    fingers: {\n      title: t(\"import.fingersTitle\"),\n      description: t(\"import.fingersDesc\"),\n      formatHint: t.raw(\"import.fingersFormatHint\") as string,\n      validate: (json) => {\n        if (!Array.isArray(json)) {\n          return { valid: false, error: t(\"import.fingersInvalidArray\") }\n        }\n        if (json.length === 0) {\n          return { valid: false, error: t(\"import.emptyData\") }\n        }\n        const first = json[0]\n        if (!first.name || !first.rule) {\n          return { valid: false, error: t(\"import.fingersInvalidFields\") }\n        }\n        return { valid: true }\n      },\n    },\n    fingerprinthub: {\n      title: t(\"import.fingerprinthubTitle\"),\n      description: t(\"import.fingerprinthubDesc\"),\n      formatHint: t.raw(\"import.fingerprinthubFormatHint\") as string,\n      validate: (json) => {\n        if (!Array.isArray(json)) {\n          return { valid: false, error: t(\"import.fingerprinthubInvalidArray\") }\n        }\n        if (json.length === 0) {\n          return { valid: false, error: t(\"import.emptyData\") }\n        }\n        const first = json[0]\n        if (!first.id || !first.info) {\n          return { valid: false, error: t(\"import.fingerprinthubInvalidFields\") }\n        }\n        return { valid: true }\n      },\n    },\n    arl: {\n      title: t(\"import.arlTitle\"),\n      description: t(\"import.arlDesc\"),\n      formatHint: t.raw(\"import.arlFormatHint\") as string,\n      validate: (json) => {\n        // ARL supports both YAML and JSON, validation is done on backend\n        if (!Array.isArray(json)) {\n          return { valid: false, error: t(\"import.arlInvalidArray\") }\n        }\n        if (json.length === 0) {\n          return { valid: false, error: t(\"import.emptyData\") }\n        }\n        const first = json[0]\n        if (!first.name || !first.rule) {\n          return { valid: false, error: t(\"import.arlInvalidFields\") }\n        }\n        return { valid: true }\n      },\n    },\n  }\n\n  const config = FINGERPRINT_CONFIG[fingerprintType]\n  \n  const importMutation = {\n    ehole: eholeImportMutation,\n    goby: gobyImportMutation,\n    wappalyzer: wappalyzerImportMutation,\n    fingers: fingersImportMutation,\n    fingerprinthub: fingerprinthubImportMutation,\n    arl: arlImportMutation,\n  }[fingerprintType]\n\n  // Determine accepted file types based on fingerprint type\n  const getAcceptConfig = (): Record<string, string[]> => {\n    if (fingerprintType === \"arl\") {\n      return { \n        \"application/json\": [\".json\"],\n        \"application/x-yaml\": [\".yaml\", \".yml\"],\n        \"text/yaml\": [\".yaml\", \".yml\"],\n      }\n    }\n    return { \"application/json\": [\".json\"] }\n  }\n\n  const handleDrop = (acceptedFiles: File[]) => {\n    setFiles(acceptedFiles)\n  }\n\n  const handleImport = async () => {\n    if (files.length === 0) {\n      toast.error(tToast(\"selectFileFirst\"))\n      return\n    }\n\n    const file = files[0]\n    const isYamlFile = file.name.endsWith('.yaml') || file.name.endsWith('.yml')\n\n    // Skip frontend validation for YAML files (ARL), let backend handle it\n    if (!isYamlFile) {\n      // Frontend basic validation for JSON files\n      try {\n        const text = await file.text()\n        let json: any\n\n        // Try standard JSON first\n        try {\n          json = JSON.parse(text)\n        } catch {\n          // If standard JSON fails, try JSONL format (for goby)\n          if (fingerprintType === \"goby\") {\n            const lines = text.trim().split('\\n').filter(line => line.trim())\n            if (lines.length === 0) {\n              toast.error(t(\"import.emptyData\"))\n              return\n            }\n            // Parse each line as JSON\n            json = lines.map((line, index) => {\n              try {\n                return JSON.parse(line)\n              } catch {\n                throw new Error(`Line ${index + 1}: Invalid JSON`)\n              }\n            })\n          } else {\n            throw new Error(\"Invalid JSON\")\n          }\n        }\n\n        const validation = config.validate(json)\n        if (!validation.valid) {\n          toast.error(validation.error)\n          return\n        }\n      } catch (e: any) {\n        toast.error(e.message || tToast(\"invalidJsonFile\"))\n        return\n      }\n    }\n\n    // Validation passed, submit to backend\n    try {\n      const result = await importMutation.mutateAsync(file)\n      toast.success(t(\"import.importSuccessDetail\", { created: result.created, failed: result.failed }))\n      setFiles([])\n      onOpenChange(false)\n      onSuccess?.()\n    } catch (error: any) {\n      toast.error(error.message || tToast(\"importFailed\"))\n    }\n  }\n\n  const handleClose = (open: boolean) => {\n    if (!open) {\n      setFiles([])\n    }\n    onOpenChange(open)\n  }\n\n  return (\n    <Dialog open={open} onOpenChange={handleClose}>\n      <DialogContent className=\"sm:max-w-[500px]\">\n        <DialogHeader>\n          <DialogTitle>{config.title}</DialogTitle>\n          <DialogDescription>\n            {config.description}\n          </DialogDescription>\n        </DialogHeader>\n\n        <div className=\"py-4\">\n          <Dropzone\n            src={files}\n            onDrop={handleDrop}\n            accept={getAcceptConfig()}\n            maxFiles={1}\n            maxSize={50 * 1024 * 1024}  // 50MB\n            onError={(error) => toast.error(error.message)}\n          >\n            <DropzoneEmptyState />\n            <DropzoneContent />\n          </Dropzone>\n\n          <p className=\"text-xs text-muted-foreground mt-3\">\n            {t(\"import.supportedFormat\")}{\" \"}\n            <code className=\"bg-muted px-1 rounded\">\n              {config.formatHint}\n            </code>\n          </p>\n        </div>\n\n        <DialogFooter>\n          <Button variant=\"outline\" onClick={() => handleClose(false)}>\n            {tCommon(\"cancel\")}\n          </Button>\n          <Button\n            onClick={handleImport}\n            disabled={files.length === 0 || importMutation.isPending}\n          >\n            {importMutation.isPending ? t(\"import.importing\") : tCommon(\"import\")}\n          </Button>\n        </DialogFooter>\n      </DialogContent>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "frontend/components/fingerprints/index.ts",
    "content": "// EHole\nexport { EholeFingerprintView } from \"./ehole-fingerprint-view\"\nexport { EholeFingerprintDataTable } from \"./ehole-fingerprint-data-table\"\nexport { createEholeFingerprintColumns } from \"./ehole-fingerprint-columns\"\nexport { EholeFingerprintDialog } from \"./ehole-fingerprint-dialog\"\nexport { ImportFingerprintDialog } from \"./import-fingerprint-dialog\"\n\n// Goby\nexport { GobyFingerprintView } from \"./goby-fingerprint-view\"\nexport { GobyFingerprintDataTable } from \"./goby-fingerprint-data-table\"\nexport { createGobyFingerprintColumns } from \"./goby-fingerprint-columns\"\nexport { GobyFingerprintDialog } from \"./goby-fingerprint-dialog\"\n\n// Wappalyzer\nexport { WappalyzerFingerprintView } from \"./wappalyzer-fingerprint-view\"\nexport { WappalyzerFingerprintDataTable } from \"./wappalyzer-fingerprint-data-table\"\nexport { createWappalyzerFingerprintColumns } from \"./wappalyzer-fingerprint-columns\"\nexport { WappalyzerFingerprintDialog } from \"./wappalyzer-fingerprint-dialog\"\n\n// Fingers\nexport { FingersFingerprintView } from \"./fingers-fingerprint-view\"\nexport { FingersFingerprintDataTable } from \"./fingers-fingerprint-data-table\"\nexport { createFingersFingerprintColumns } from \"./fingers-fingerprint-columns\"\nexport { FingersFingerprintDialog } from \"./fingers-fingerprint-dialog\"\n\n// FingerPrintHub\nexport { FingerPrintHubFingerprintView } from \"./fingerprinthub-fingerprint-view\"\nexport { FingerPrintHubFingerprintDataTable } from \"./fingerprinthub-fingerprint-data-table\"\nexport { createFingerPrintHubFingerprintColumns } from \"./fingerprinthub-fingerprint-columns\"\nexport { FingerPrintHubFingerprintDialog } from \"./fingerprinthub-fingerprint-dialog\"\n\n// ARL\nexport { ARLFingerprintView } from \"./arl-fingerprint-view\"\nexport { ARLFingerprintDataTable } from \"./arl-fingerprint-data-table\"\nexport { createARLFingerprintColumns } from \"./arl-fingerprint-columns\"\nexport { ARLFingerprintDialog } from \"./arl-fingerprint-dialog\"\n"
  },
  {
    "path": "frontend/components/fingerprints/wappalyzer-fingerprint-columns.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { ColumnDef } from \"@tanstack/react-table\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport { DataTableColumnHeader } from \"@/components/ui/data-table/column-header\"\nimport { ExpandableCell, ExpandableMonoCell } from \"@/components/ui/data-table/expandable-cell\"\nimport { ChevronDown, ChevronUp } from \"lucide-react\"\nimport { useTranslations } from \"next-intl\"\nimport type { WappalyzerFingerprint } from \"@/types/fingerprint.types\"\n\ninterface ColumnOptions {\n  formatDate: (date: string) => string\n}\n\ninterface RuleItem {\n  key: string\n  value: any\n}\n\n/**\n * Extract all rules from fingerprint (keeping original format)\n */\nfunction extractRules(fp: WappalyzerFingerprint): RuleItem[] {\n  const rules: RuleItem[] = []\n  const ruleKeys = ['cookies', 'headers', 'scriptSrc', 'js', 'meta', 'html'] as const\n  \n  for (const key of ruleKeys) {\n    const value = fp[key]\n    if (value && (Array.isArray(value) ? value.length > 0 : Object.keys(value).length > 0)) {\n      rules.push({ key, value })\n    }\n  }\n  \n  return rules\n}\n\n/**\n * Rules list cell - displays raw JSON format\n */\nfunction RulesCell({ fp }: { fp: WappalyzerFingerprint }) {\n  const t = useTranslations(\"tooltips\")\n  const [expanded, setExpanded] = React.useState(false)\n  const rules = extractRules(fp)\n  \n  if (rules.length === 0) {\n    return <span className=\"text-muted-foreground\">-</span>\n  }\n  \n  const displayRules = expanded ? rules : rules.slice(0, 2)\n  const hasMore = rules.length > 2\n  \n  return (\n    <div className=\"flex flex-col gap-1\">\n      <div className=\"font-mono text-xs space-y-0.5\">\n        {displayRules.map((rule, idx) => (\n          <div key={idx} className={expanded ? \"break-all\" : \"truncate\"}>\n            \"{rule.key}\": {JSON.stringify(rule.value)}\n          </div>\n        ))}\n      </div>\n      {hasMore && (\n        <button\n          onClick={() => setExpanded(!expanded)}\n          className=\"text-xs text-primary hover:underline self-start inline-flex items-center gap-0.5\"\n        >\n          {expanded ? (\n            <>\n              <ChevronUp className=\"h-3 w-3\" />\n              <span>{t(\"collapse\")}</span>\n            </>\n          ) : (\n            <>\n              <ChevronDown className=\"h-3 w-3\" />\n              <span>{t(\"expand\")}</span>\n            </>\n          )}\n        </button>\n      )}\n    </div>\n  )\n}\n\n/**\n * Create Wappalyzer fingerprint table column definitions\n */\nexport function createWappalyzerFingerprintColumns({\n  formatDate,\n}: ColumnOptions): ColumnDef<WappalyzerFingerprint>[] {\n  return [\n    {\n      id: \"select\",\n      header: ({ table }) => (\n        <Checkbox\n          checked={\n            table.getIsAllPageRowsSelected() ||\n            (table.getIsSomePageRowsSelected() && \"indeterminate\")\n          }\n          onCheckedChange={(value) => table.toggleAllPageRowsSelected(!!value)}\n          aria-label=\"Select all\"\n        />\n      ),\n      cell: ({ row }) => (\n        <Checkbox\n          checked={row.getIsSelected()}\n          onCheckedChange={(value) => row.toggleSelected(!!value)}\n          aria-label=\"Select row\"\n        />\n      ),\n      enableSorting: false,\n      enableHiding: false,\n      enableResizing: false,\n      size: 40,\n    },\n    {\n      accessorKey: \"name\",\n      meta: { title: \"Name\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Name\" />\n      ),\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"name\")} maxLines={2} />\n      ),\n      enableResizing: true,\n      size: 180,\n    },\n    {\n      accessorKey: \"cats\",\n      meta: { title: \"Categories\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Categories\" />\n      ),\n      cell: ({ row }) => {\n        const cats = row.getValue(\"cats\") as number[]\n        if (!cats || cats.length === 0) return <span className=\"text-muted-foreground\">-</span>\n        return <ExpandableMonoCell value={JSON.stringify(cats)} maxLines={1} />\n      },\n      enableResizing: true,\n      size: 100,\n    },\n    {\n      id: \"rules\",\n      meta: { title: \"Rules\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Rules\" />\n      ),\n      cell: ({ row }) => <RulesCell fp={row.original} />,\n      enableResizing: true,\n      size: 350,\n    },\n    {\n      accessorKey: \"implies\",\n      meta: { title: \"Implies\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Implies\" />\n      ),\n      cell: ({ row }) => {\n        const implies = row.getValue(\"implies\") as string[]\n        if (!implies || implies.length === 0) return <span className=\"text-muted-foreground\">-</span>\n        return <ExpandableMonoCell value={implies.join(\", \")} maxLines={1} />\n      },\n      enableResizing: true,\n      size: 150,\n    },\n    {\n      accessorKey: \"description\",\n      meta: { title: \"Description\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Description\" />\n      ),\n      cell: ({ row }) => <ExpandableCell value={row.getValue(\"description\")} maxLines={2} />,\n      enableResizing: true,\n      size: 250,\n    },\n    {\n      accessorKey: \"website\",\n      meta: { title: \"Website\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Website\" />\n      ),\n      cell: ({ row }) => <ExpandableCell value={row.getValue(\"website\")} variant=\"url\" maxLines={1} />,\n      enableResizing: true,\n      size: 180,\n    },\n    {\n      accessorKey: \"cpe\",\n      meta: { title: \"CPE\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"CPE\" />\n      ),\n      cell: ({ row }) => (\n        <ExpandableMonoCell value={row.getValue(\"cpe\")} maxLines={1} />\n      ),\n      enableResizing: true,\n      size: 150,\n    },\n    {\n      accessorKey: \"createdAt\",\n      meta: { title: \"Created\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Created\" />\n      ),\n      cell: ({ row }) => {\n        const date = row.getValue(\"createdAt\") as string\n        return (\n          <div className=\"text-sm text-muted-foreground\">\n            {formatDate(date)}\n          </div>\n        )\n      },\n      enableResizing: false,\n      size: 160,\n    },\n  ]\n}\n"
  },
  {
    "path": "frontend/components/fingerprints/wappalyzer-fingerprint-data-table.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport type { ColumnDef } from \"@tanstack/react-table\"\nimport { useTranslations } from \"next-intl\"\nimport {\n  IconChevronDown,\n  IconTrash,\n  IconDownload,\n  IconUpload,\n  IconPlus,\n  IconSettings,\n} from \"@tabler/icons-react\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuSeparator,\n  DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\"\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\"\nimport { UnifiedDataTable } from \"@/components/ui/data-table\"\nimport type { FilterField } from \"@/components/common/smart-filter-input\"\nimport type { WappalyzerFingerprint } from \"@/types/fingerprint.types\"\nimport type { PaginationInfo } from \"@/types/common.types\"\n\nconst WAPPALYZER_FILTER_EXAMPLES = [\n  'name=\"WordPress\"',\n  'name==\"React\"',\n  'website=\"wordpress.org\"',\n  'cpe=\"wordpress\"',\n]\n\ninterface WappalyzerFingerprintDataTableProps {\n  data: WappalyzerFingerprint[]\n  columns: ColumnDef<WappalyzerFingerprint>[]\n  onSelectionChange?: (selectedRows: WappalyzerFingerprint[]) => void\n  filterValue?: string\n  onFilterChange?: (value: string) => void\n  isSearching?: boolean\n  onAddSingle?: () => void\n  onAddImport?: () => void\n  onExport?: () => void\n  onBulkDelete?: () => void\n  onDeleteAll?: () => void\n  totalCount?: number\n  pagination?: { pageIndex: number; pageSize: number }\n  paginationInfo?: PaginationInfo\n  onPaginationChange?: (pagination: { pageIndex: number; pageSize: number }) => void\n}\n\nexport function WappalyzerFingerprintDataTable({\n  data = [],\n  columns,\n  onSelectionChange,\n  filterValue,\n  onFilterChange,\n  isSearching = false,\n  onAddSingle,\n  onAddImport,\n  onExport,\n  onBulkDelete,\n  onDeleteAll,\n  totalCount = 0,\n  pagination: externalPagination,\n  paginationInfo,\n  onPaginationChange,\n}: WappalyzerFingerprintDataTableProps) {\n  const t = useTranslations(\"tools.fingerprints\")\n  const tCommon = useTranslations(\"common.actions\")\n  const [selectedCount, setSelectedCount] = React.useState(0)\n  const [exportDialogOpen, setExportDialogOpen] = React.useState(false)\n  const [bulkDeleteDialogOpen, setBulkDeleteDialogOpen] = React.useState(false)\n  const [deleteAllDialogOpen, setDeleteAllDialogOpen] = React.useState(false)\n\n  // Wappalyzer filter field configuration (using translations)\n  const wappalyzerFilterFields: FilterField[] = React.useMemo(() => [\n    { key: \"name\", label: \"Name\", description: t(\"filter.wappalyzer.name\") },\n    { key: \"website\", label: \"Website\", description: t(\"filter.wappalyzer.website\") },\n    { key: \"cpe\", label: \"CPE\", description: t(\"filter.wappalyzer.cpe\") },\n  ], [t])\n\n  const handleSmartSearch = (rawQuery: string) => {\n    if (onFilterChange) {\n      onFilterChange(rawQuery)\n    }\n  }\n\n  const handleSelectionChange = (rows: WappalyzerFingerprint[]) => {\n    setSelectedCount(rows.length)\n    onSelectionChange?.(rows)\n  }\n\n  // Custom toolbar right-side buttons\n  const toolbarRightContent = (\n    <>\n      {/* Operations menu */}\n      <DropdownMenu>\n        <DropdownMenuTrigger asChild>\n          <Button variant=\"outline\" size=\"sm\">\n            <IconSettings className=\"h-4 w-4\" />\n            {t(\"actions.operations\")}\n            <IconChevronDown className=\"h-4 w-4\" />\n          </Button>\n        </DropdownMenuTrigger>\n        <DropdownMenuContent align=\"end\" className=\"w-48\">\n          {onExport && (\n            <DropdownMenuItem onClick={() => setExportDialogOpen(true)}>\n              <IconDownload className=\"h-4 w-4\" />\n              {t(\"actions.exportAll\")}\n            </DropdownMenuItem>\n          )}\n          <DropdownMenuSeparator />\n          {onBulkDelete && (\n            <DropdownMenuItem \n              onClick={() => setBulkDeleteDialogOpen(true)}\n              disabled={selectedCount === 0}\n              className=\"text-destructive focus:text-destructive\"\n            >\n              <IconTrash className=\"h-4 w-4\" />\n              {t(\"actions.deleteSelected\")} ({selectedCount})\n            </DropdownMenuItem>\n          )}\n          {onDeleteAll && (\n            <DropdownMenuItem \n              onClick={() => setDeleteAllDialogOpen(true)}\n              className=\"text-destructive focus:text-destructive\"\n            >\n              <IconTrash className=\"h-4 w-4\" />\n              {t(\"actions.deleteAll\")}\n            </DropdownMenuItem>\n          )}\n        </DropdownMenuContent>\n      </DropdownMenu>\n\n      {/* Add fingerprint */}\n      {(onAddSingle || onAddImport) && (\n        <DropdownMenu>\n          <DropdownMenuTrigger asChild>\n            <Button size=\"sm\">\n              <IconPlus className=\"h-4 w-4\" />\n              {t(\"actions.addFingerprint\")}\n              <IconChevronDown className=\"h-4 w-4\" />\n            </Button>\n          </DropdownMenuTrigger>\n          <DropdownMenuContent align=\"end\" className=\"w-40\">\n            {onAddSingle && (\n              <DropdownMenuItem onClick={onAddSingle}>\n                <IconPlus className=\"h-4 w-4\" />\n                {t(\"actions.addSingle\")}\n              </DropdownMenuItem>\n            )}\n            {onAddImport && (\n              <DropdownMenuItem onClick={onAddImport}>\n                <IconUpload className=\"h-4 w-4\" />\n                {t(\"actions.importFile\")}\n              </DropdownMenuItem>\n            )}\n          </DropdownMenuContent>\n        </DropdownMenu>\n      )}\n    </>\n  )\n\n  return (\n    <>\n      <UnifiedDataTable\n        data={data}\n        columns={columns}\n        getRowId={(row) => String(row.id)}\n        // Pagination\n        pagination={externalPagination}\n        paginationInfo={paginationInfo}\n        onPaginationChange={onPaginationChange}\n        // Smart filter\n        searchMode=\"smart\"\n        searchValue={filterValue}\n        onSearch={handleSmartSearch}\n        isSearching={isSearching}\n        filterFields={wappalyzerFilterFields}\n        filterExamples={WAPPALYZER_FILTER_EXAMPLES}\n        // Selection\n        onSelectionChange={handleSelectionChange}\n        // Bulk operations - use custom buttons\n        showBulkDelete={false}\n        showAddButton={false}\n        // Empty state\n        emptyMessage=\"No results\"\n        // Custom toolbar buttons\n        toolbarRight={toolbarRightContent}\n      />\n\n      {/* Export confirmation dialog */}\n      <AlertDialog open={exportDialogOpen} onOpenChange={setExportDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{t(\"dialogs.exportTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {t(\"dialogs.exportDesc\", { count: totalCount })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"cancel\")}</AlertDialogCancel>\n            <AlertDialogAction onClick={() => { onExport?.(); setExportDialogOpen(false); }}>\n              {t(\"dialogs.confirmExport\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n\n      {/* Delete selected confirmation dialog */}\n      <AlertDialog open={bulkDeleteDialogOpen} onOpenChange={setBulkDeleteDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{t(\"dialogs.deleteSelectedTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {t(\"dialogs.deleteSelectedDesc\", { count: selectedCount })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"cancel\")}</AlertDialogCancel>\n            <AlertDialogAction \n              onClick={() => { onBulkDelete?.(); setBulkDeleteDialogOpen(false); }}\n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n            >\n              {t(\"dialogs.confirmDelete\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n\n      {/* Delete all confirmation dialog */}\n      <AlertDialog open={deleteAllDialogOpen} onOpenChange={setDeleteAllDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{t(\"dialogs.deleteAllTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {t(\"dialogs.deleteAllDesc\", { count: totalCount })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"cancel\")}</AlertDialogCancel>\n            <AlertDialogAction \n              onClick={() => { onDeleteAll?.(); setDeleteAllDialogOpen(false); }}\n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n            >\n              {t(\"dialogs.confirmDelete\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n    </>\n  )\n}\n"
  },
  {
    "path": "frontend/components/fingerprints/wappalyzer-fingerprint-dialog.tsx",
    "content": "\"use client\"\n\nimport React, { useEffect } from \"react\"\nimport { useForm } from \"react-hook-form\"\nimport { useTranslations } from \"next-intl\"\nimport { toast } from \"sonner\"\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n} from \"@/components/ui/dialog\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { Textarea } from \"@/components/ui/textarea\"\nimport {\n  useCreateWappalyzerFingerprint,\n  useUpdateWappalyzerFingerprint,\n} from \"@/hooks/use-fingerprints\"\nimport type { WappalyzerFingerprint } from \"@/types/fingerprint.types\"\n\ninterface WappalyzerFingerprintDialogProps {\n  open: boolean\n  onOpenChange: (open: boolean) => void\n  fingerprint?: WappalyzerFingerprint | null\n  onSuccess?: () => void\n}\n\ninterface FormData {\n  name: string\n  cats: string\n  description: string\n  website: string\n  cpe: string\n  cookies: string\n  headers: string\n  scriptSrc: string\n  js: string\n  meta: string\n  html: string\n  implies: string\n}\n\nexport function WappalyzerFingerprintDialog({\n  open,\n  onOpenChange,\n  fingerprint,\n  onSuccess,\n}: WappalyzerFingerprintDialogProps) {\n  const t = useTranslations(\"tools.fingerprints\")\n  const tCommon = useTranslations(\"common.actions\")\n  const isEdit = !!fingerprint\n\n  const createMutation = useCreateWappalyzerFingerprint()\n  const updateMutation = useUpdateWappalyzerFingerprint()\n\n  const {\n    register,\n    handleSubmit,\n    reset,\n    formState: { errors, isSubmitting },\n  } = useForm<FormData>({\n    defaultValues: {\n      name: \"\",\n      cats: \"\",\n      description: \"\",\n      website: \"\",\n      cpe: \"\",\n      cookies: \"{}\",\n      headers: \"{}\",\n      scriptSrc: \"\",\n      js: \"\",\n      meta: \"{}\",\n      html: \"\",\n      implies: \"\",\n    },\n  })\n\n  useEffect(() => {\n    if (fingerprint) {\n      reset({\n        name: fingerprint.name,\n        cats: fingerprint.cats?.join(\", \") || \"\",\n        description: fingerprint.description || \"\",\n        website: fingerprint.website || \"\",\n        cpe: fingerprint.cpe || \"\",\n        cookies: JSON.stringify(fingerprint.cookies || {}, null, 2),\n        headers: JSON.stringify(fingerprint.headers || {}, null, 2),\n        scriptSrc: fingerprint.scriptSrc?.join(\", \") || \"\",\n        js: fingerprint.js?.join(\", \") || \"\",\n        meta: JSON.stringify(fingerprint.meta || {}, null, 2),\n        html: fingerprint.html?.join(\", \") || \"\",\n        implies: fingerprint.implies?.join(\", \") || \"\",\n      })\n    } else {\n      reset({\n        name: \"\",\n        cats: \"\",\n        description: \"\",\n        website: \"\",\n        cpe: \"\",\n        cookies: \"{}\",\n        headers: \"{}\",\n        scriptSrc: \"\",\n        js: \"\",\n        meta: \"{}\",\n        html: \"\",\n        implies: \"\",\n      })\n    }\n  }, [fingerprint, reset])\n\n  const parseArray = (str: string): string[] => {\n    return str.split(\",\").map(s => s.trim()).filter(s => s.length > 0)\n  }\n\n  const parseNumberArray = (str: string): number[] => {\n    return str.split(\",\").map(s => parseInt(s.trim(), 10)).filter(n => !isNaN(n))\n  }\n\n  const parseJson = (str: string): Record<string, any> => {\n    try {\n      return JSON.parse(str)\n    } catch {\n      return {}\n    }\n  }\n\n  const onSubmit = async (data: FormData) => {\n    const payload = {\n      name: data.name.trim(),\n      cats: parseNumberArray(data.cats),\n      description: data.description.trim(),\n      website: data.website.trim(),\n      cpe: data.cpe.trim(),\n      cookies: parseJson(data.cookies),\n      headers: parseJson(data.headers),\n      scriptSrc: parseArray(data.scriptSrc),\n      js: parseArray(data.js),\n      meta: parseJson(data.meta),\n      html: parseArray(data.html),\n      implies: parseArray(data.implies),\n    }\n\n    try {\n      if (isEdit && fingerprint) {\n        await updateMutation.mutateAsync({ id: fingerprint.id, data: payload })\n        toast.success(t(\"toast.updateSuccess\"))\n      } else {\n        await createMutation.mutateAsync(payload)\n        toast.success(t(\"toast.createSuccess\"))\n      }\n      onOpenChange(false)\n      onSuccess?.()\n    } catch (error: any) {\n      toast.error(error.message || (isEdit ? t(\"toast.updateFailed\") : t(\"toast.createFailed\")))\n    }\n  }\n\n  return (\n    <Dialog open={open} onOpenChange={onOpenChange}>\n      <DialogContent className=\"sm:max-w-[600px] max-h-[80vh] overflow-y-auto\">\n        <DialogHeader>\n          <DialogTitle>{isEdit ? t(\"wappalyzer.editTitle\") : t(\"wappalyzer.addTitle\")}</DialogTitle>\n          <DialogDescription>\n            {isEdit ? t(\"wappalyzer.editDesc\") : t(\"wappalyzer.addDesc\")}\n          </DialogDescription>\n        </DialogHeader>\n\n        <form onSubmit={handleSubmit(onSubmit)} className=\"space-y-4\">\n          {/* Basic information */}\n          <div className=\"grid grid-cols-2 gap-4\">\n            <div className=\"space-y-2\">\n              <Label htmlFor=\"name\">{t(\"form.appNamePlaceholder\").split(\"：\")[0]} *</Label>\n              <Input\n                id=\"name\"\n                placeholder={t(\"form.appNamePlaceholder\")}\n                {...register(\"name\", { required: t(\"form.appNameRequired\") })}\n              />\n              {errors.name && (\n                <p className=\"text-sm text-destructive\">{errors.name.message}</p>\n              )}\n            </div>\n\n            <div className=\"space-y-2\">\n              <Label htmlFor=\"cats\">{t(\"category\")}</Label>\n              <Input\n                id=\"cats\"\n                placeholder={t(\"form.catsPlaceholder\")}\n                {...register(\"cats\")}\n              />\n            </div>\n          </div>\n\n          <div className=\"grid grid-cols-2 gap-4\">\n            <div className=\"space-y-2\">\n              <Label htmlFor=\"website\">{tCommon(\"website\")}</Label>\n              <Input\n                id=\"website\"\n                placeholder=\"https://example.com\"\n                {...register(\"website\")}\n              />\n            </div>\n\n            <div className=\"space-y-2\">\n              <Label htmlFor=\"cpe\">CPE</Label>\n              <Input\n                id=\"cpe\"\n                placeholder=\"cpe:/a:vendor:product\"\n                {...register(\"cpe\")}\n              />\n            </div>\n          </div>\n\n          <div className=\"space-y-2\">\n            <Label htmlFor=\"description\">{tCommon(\"description\")}</Label>\n            <Textarea\n              id=\"description\"\n              placeholder={t(\"form.descPlaceholder\")}\n              rows={2}\n              {...register(\"description\")}\n            />\n          </div>\n\n          {/* Detection rules */}\n          <div className=\"space-y-1\">\n            <Label className=\"text-sm font-medium\">{t(\"form.detectionRules\")}</Label>\n            <p className=\"text-xs text-muted-foreground\">{t(\"form.detectionRulesHint\")}</p>\n          </div>\n\n          <div className=\"grid grid-cols-2 gap-4\">\n            <div className=\"space-y-2\">\n              <Label htmlFor=\"cookies\">{t(\"form.cookies\")}</Label>\n              <Textarea\n                id=\"cookies\"\n                placeholder='{\"name\": \"pattern\"}'\n                rows={2}\n                className=\"font-mono text-xs\"\n                {...register(\"cookies\")}\n              />\n            </div>\n\n            <div className=\"space-y-2\">\n              <Label htmlFor=\"headers\">{t(\"form.headers\")}</Label>\n              <Textarea\n                id=\"headers\"\n                placeholder='{\"X-Powered-By\": \"pattern\"}'\n                rows={2}\n                className=\"font-mono text-xs\"\n                {...register(\"headers\")}\n              />\n            </div>\n          </div>\n\n          <div className=\"grid grid-cols-2 gap-4\">\n            <div className=\"space-y-2\">\n              <Label htmlFor=\"scriptSrc\">{t(\"form.scriptUrl\")}</Label>\n              <Input\n                id=\"scriptSrc\"\n                placeholder=\"pattern1, pattern2\"\n                className=\"font-mono text-xs\"\n                {...register(\"scriptSrc\")}\n              />\n            </div>\n\n            <div className=\"space-y-2\">\n              <Label htmlFor=\"js\">{t(\"form.jsVariables\")}</Label>\n              <Input\n                id=\"js\"\n                placeholder=\"window.var1, window.var2\"\n                className=\"font-mono text-xs\"\n                {...register(\"js\")}\n              />\n            </div>\n          </div>\n\n          <div className=\"space-y-2\">\n            <Label htmlFor=\"meta\">{t(\"form.metaTags\")} (JSON)</Label>\n            <Textarea\n              id=\"meta\"\n              placeholder='{\"generator\": [\"pattern\"]}'\n              rows={2}\n              className=\"font-mono text-xs\"\n              {...register(\"meta\")}\n            />\n          </div>\n\n          <div className=\"grid grid-cols-2 gap-4\">\n            <div className=\"space-y-2\">\n              <Label htmlFor=\"html\">{t(\"form.htmlContent\")}</Label>\n              <Input\n                id=\"html\"\n                placeholder=\"pattern1, pattern2\"\n                className=\"font-mono text-xs\"\n                {...register(\"html\")}\n              />\n            </div>\n\n            <div className=\"space-y-2\">\n              <Label htmlFor=\"implies\">{t(\"form.implies\")}</Label>\n              <Input\n                id=\"implies\"\n                placeholder=\"PHP, MySQL\"\n                {...register(\"implies\")}\n              />\n            </div>\n          </div>\n\n          <DialogFooter>\n            <Button type=\"button\" variant=\"outline\" onClick={() => onOpenChange(false)}>\n              {tCommon(\"cancel\")}\n            </Button>\n            <Button type=\"submit\" disabled={isSubmitting}>\n              {isSubmitting ? tCommon(\"saving\") : isEdit ? tCommon(\"update\") : tCommon(\"create\")}\n            </Button>\n          </DialogFooter>\n        </form>\n      </DialogContent>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "frontend/components/fingerprints/wappalyzer-fingerprint-view.tsx",
    "content": "\"use client\"\n\nimport React, { useState, useMemo } from \"react\"\nimport { AlertTriangle } from \"lucide-react\"\nimport { toast } from \"sonner\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport {\n  useWappalyzerFingerprints,\n  useBulkDeleteWappalyzerFingerprints,\n  useDeleteAllWappalyzerFingerprints,\n} from \"@/hooks/use-fingerprints\"\nimport { FingerprintService } from \"@/services/fingerprint.service\"\nimport { WappalyzerFingerprintDataTable } from \"./wappalyzer-fingerprint-data-table\"\nimport { createWappalyzerFingerprintColumns } from \"./wappalyzer-fingerprint-columns\"\nimport { WappalyzerFingerprintDialog } from \"./wappalyzer-fingerprint-dialog\"\nimport { ImportFingerprintDialog } from \"./import-fingerprint-dialog\"\nimport { DataTableSkeleton } from \"@/components/ui/data-table-skeleton\"\nimport { getDateLocale } from \"@/lib/date-utils\"\nimport type { WappalyzerFingerprint } from \"@/types/fingerprint.types\"\n\nexport function WappalyzerFingerprintView() {\n  const [selectedFingerprints, setSelectedFingerprints] = useState<WappalyzerFingerprint[]>([])\n  const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 10 })\n  const [filterQuery, setFilterQuery] = useState(\"\")\n  const [isSearching, setIsSearching] = useState(false)\n  const [addDialogOpen, setAddDialogOpen] = useState(false)\n  const [importDialogOpen, setImportDialogOpen] = useState(false)\n\n  const tFingerprints = useTranslations(\"tools.fingerprints\")\n  const locale = useLocale()\n\n  // Query data\n  const { data, isLoading, isFetching, error, refetch } = useWappalyzerFingerprints({\n    page: pagination.pageIndex + 1,\n    pageSize: pagination.pageSize,\n    filter: filterQuery || undefined,\n  })\n\n  // Mutations\n  const bulkDeleteMutation = useBulkDeleteWappalyzerFingerprints()\n  const deleteAllMutation = useDeleteAllWappalyzerFingerprints()\n\n  // Search state\n  React.useEffect(() => {\n    if (!isFetching && isSearching) {\n      setIsSearching(false)\n    }\n  }, [isFetching, isSearching])\n\n  const handleFilterChange = (value: string) => {\n    setIsSearching(true)\n    setFilterQuery(value)\n    setPagination((prev) => ({ ...prev, pageIndex: 0 }))\n  }\n\n  // Format date\n  const formatDate = (dateString: string): string => {\n    return new Date(dateString).toLocaleString(getDateLocale(locale), {\n      year: \"numeric\",\n      month: \"numeric\",\n      day: \"numeric\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      hour12: false,\n    })\n  }\n\n  // Export\n  const handleExport = async () => {\n    try {\n      const blob = await FingerprintService.exportWappalyzerFingerprints()\n      const url = URL.createObjectURL(blob)\n      const a = document.createElement(\"a\")\n      a.href = url\n      a.download = `wappalyzer-fingerprints-${Date.now()}.json`\n      document.body.appendChild(a)\n      a.click()\n      document.body.removeChild(a)\n      URL.revokeObjectURL(url)\n      toast.success(tFingerprints(\"toast.exportSuccess\"))\n    } catch (error: any) {\n      toast.error(error.message || tFingerprints(\"toast.exportFailed\"))\n    }\n  }\n\n  // Bulk delete\n  const handleBulkDelete = async () => {\n    if (selectedFingerprints.length === 0) return\n\n    try {\n      const ids = selectedFingerprints.map((f) => f.id)\n      const result = await bulkDeleteMutation.mutateAsync(ids)\n      toast.success(tFingerprints(\"toast.deleteSuccess\", { count: result.deleted }))\n      setSelectedFingerprints([])\n    } catch (error: any) {\n      toast.error(error.message || tFingerprints(\"toast.deleteFailed\"))\n    }\n  }\n\n  // Delete all\n  const handleDeleteAll = async () => {\n    try {\n      const result = await deleteAllMutation.mutateAsync()\n      toast.success(tFingerprints(\"toast.deleteSuccess\", { count: result.deleted }))\n    } catch (error: any) {\n      toast.error(error.message || tFingerprints(\"toast.deleteFailed\"))\n    }\n  }\n\n  // Column definitions\n  const columns = useMemo(\n    () => createWappalyzerFingerprintColumns({ formatDate }),\n    []\n  )\n\n  // Transform data\n  const fingerprints: WappalyzerFingerprint[] = useMemo(() => {\n    if (!data?.results) return []\n    return data.results\n  }, [data])\n\n  // Stabilize paginationInfo reference to avoid unnecessary re-renders\n  const total = data?.total ?? 0\n  const page = data?.page ?? 1\n  const serverPageSize = data?.pageSize ?? 10\n  const totalPages = data?.totalPages ?? 1\n  \n  const paginationInfo = useMemo(() => ({\n    total,\n    page,\n    pageSize: serverPageSize,\n    totalPages,\n  }), [total, page, serverPageSize, totalPages])\n\n  // Error state\n  if (error) {\n    return (\n      <div className=\"flex flex-col items-center justify-center py-12\">\n        <div className=\"rounded-full bg-destructive/10 p-3 mb-4\">\n          <AlertTriangle className=\"h-10 w-10 text-destructive\" />\n        </div>\n        <h3 className=\"text-lg font-semibold mb-2\">{tFingerprints(\"loadFailed\")}</h3>\n        <p className=\"text-muted-foreground text-center mb-4\">\n          {error.message || tFingerprints(\"loadError\")}\n        </p>\n        <button\n          onClick={() => refetch()}\n          className=\"px-4 py-2 bg-primary text-primary-foreground rounded-md hover:bg-primary/90\"\n        >\n          {tFingerprints(\"reload\")}\n        </button>\n      </div>\n    )\n  }\n\n  // Loading state\n  if (isLoading && !data) {\n    return <DataTableSkeleton toolbarButtonCount={3} rows={6} columns={7} />\n  }\n\n  return (\n    <>\n      <WappalyzerFingerprintDataTable\n        data={fingerprints}\n        columns={columns}\n        onSelectionChange={setSelectedFingerprints}\n        filterValue={filterQuery}\n        onFilterChange={handleFilterChange}\n        isSearching={isSearching}\n        onAddSingle={() => setAddDialogOpen(true)}\n        onAddImport={() => setImportDialogOpen(true)}\n        onExport={handleExport}\n        onBulkDelete={handleBulkDelete}\n        onDeleteAll={handleDeleteAll}\n        totalCount={data?.total || 0}\n        pagination={pagination}\n        paginationInfo={paginationInfo}\n        onPaginationChange={setPagination}\n      />\n\n      {/* Add fingerprint dialog */}\n      <WappalyzerFingerprintDialog\n        open={addDialogOpen}\n        onOpenChange={setAddDialogOpen}\n        onSuccess={() => refetch()}\n      />\n\n      {/* Import fingerprint dialog */}\n      <ImportFingerprintDialog\n        open={importDialogOpen}\n        onOpenChange={setImportDialogOpen}\n        onSuccess={() => refetch()}\n        fingerprintType=\"wappalyzer\"\n      />\n    </>\n  )\n}\n"
  },
  {
    "path": "frontend/components/ip-addresses/index.ts",
    "content": "export { IPAddressesView } from \"./ip-addresses-view\"\n"
  },
  {
    "path": "frontend/components/ip-addresses/ip-addresses-columns.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { ColumnDef } from \"@tanstack/react-table\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport { Badge } from \"@/components/ui/badge\"\nimport {\n  Popover,\n  PopoverContent,\n  PopoverTrigger,\n} from \"@/components/ui/popover\"\nimport { DataTableColumnHeader } from \"@/components/ui/data-table/column-header\"\nimport type { IPAddress } from \"@/types/ip-address.types\"\nimport { ExpandableCell } from \"@/components/ui/data-table/expandable-cell\"\n\n// Translation type definitions\nexport interface IPAddressTranslations {\n  columns: {\n    ipAddress: string\n    hosts: string\n    createdAt: string\n    openPorts: string\n  }\n  actions: {\n    selectAll: string\n    selectRow: string\n  }\n  tooltips: {\n    allHosts: string\n    allOpenPorts: string\n  }\n}\n\ninterface CreateColumnsProps {\n  formatDate: (value: string) => string\n  t: IPAddressTranslations\n}\n\nexport function createIPAddressColumns({\n  formatDate,\n  t,\n}: CreateColumnsProps): ColumnDef<IPAddress>[] {\n  return [\n    {\n      id: \"select\",\n      size: 40,\n      minSize: 40,\n      maxSize: 40,\n      enableResizing: false,\n      header: ({ table }) => (\n        <Checkbox\n          checked={\n            table.getIsAllPageRowsSelected() ||\n            (table.getIsSomePageRowsSelected() && \"indeterminate\")\n          }\n          onCheckedChange={(value) => table.toggleAllPageRowsSelected(!!value)}\n          aria-label={t.actions.selectAll}\n        />\n      ),\n      cell: ({ row }) => (\n        <Checkbox\n          checked={row.getIsSelected()}\n          onCheckedChange={(value) => row.toggleSelected(!!value)}\n          aria-label={t.actions.selectRow}\n        />\n      ),\n      enableSorting: false,\n      enableHiding: false,\n    },\n    {\n      accessorKey: \"ip\",\n      size: 150,\n      minSize: 100,\n      maxSize: 200,\n      meta: { title: t.columns.ipAddress },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.ipAddress} />\n      ),\n      cell: ({ row }) => (\n        <ExpandableCell value={row.original.ip} />\n      ),\n    },\n    {\n      accessorKey: \"hosts\",\n      size: 200,\n      minSize: 150,\n      maxSize: 350,\n      meta: { title: t.columns.hosts },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.hosts} />\n      ),\n      cell: ({ getValue }) => {\n        const hosts = getValue<string[]>()\n        if (!hosts || hosts.length === 0) {\n          return <span className=\"text-muted-foreground\">-</span>\n        }\n        \n        const displayHosts = hosts.slice(0, 3)\n        const hasMore = hosts.length > 3\n        \n        return (\n          <div className=\"flex flex-col gap-1\">\n            {displayHosts.map((host, index) => (\n              <ExpandableCell key={index} value={host} maxLines={1} />\n            ))}\n            {hasMore && (\n              <Popover>\n                <PopoverTrigger asChild>\n                  <Badge variant=\"secondary\" className=\"text-xs w-fit cursor-pointer hover:bg-muted\">\n                    +{hosts.length - 3} more\n                  </Badge>\n                </PopoverTrigger>\n                <PopoverContent className=\"w-80 p-3\">\n                  <div className=\"space-y-2\">\n                    <h4 className=\"font-medium text-sm\">{t.tooltips.allHosts} ({hosts.length})</h4>\n                    <div className=\"flex flex-col gap-1 max-h-48 overflow-y-auto\">\n                      {hosts.map((host, index) => (\n                        <span key={index} className=\"text-sm break-all\">\n                          {host}\n                        </span>\n                      ))}\n                    </div>\n                  </div>\n                </PopoverContent>\n              </Popover>\n            )}\n          </div>\n        )\n      },\n    },\n    {\n      accessorKey: \"createdAt\",\n      size: 150,\n      minSize: 120,\n      maxSize: 200,\n      enableResizing: false,\n      meta: { title: t.columns.createdAt },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.createdAt} />\n      ),\n      cell: ({ getValue }) => {\n        const value = getValue<string | undefined>()\n        return value ? formatDate(value) : \"-\"\n      },\n    },\n    {\n      accessorKey: \"ports\",\n      size: 250,\n      minSize: 150,\n      meta: { title: t.columns.openPorts },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.openPorts} />\n      ),\n      cell: ({ getValue }) => {\n        const ports = getValue<number[]>()\n        \n        if (!ports || ports.length === 0) {\n          return <span className=\"text-muted-foreground\">-</span>\n        }\n\n        const sortedPorts = [...ports].sort((a, b) => a - b)\n        const displayPorts = sortedPorts.slice(0, 8)\n        const hasMore = sortedPorts.length > 8\n\n        return (\n          <div className=\"flex flex-wrap items-center gap-1.5\">\n            {displayPorts.map((port, index) => (\n              <Badge \n                key={index} \n                variant=\"outline\"\n                className=\"text-xs font-mono\"\n              >\n                {port}\n              </Badge>\n            ))}\n            {hasMore && (\n              <Popover>\n                <PopoverTrigger asChild>\n                  <Badge variant=\"secondary\" className=\"text-xs cursor-pointer hover:bg-muted\">\n                    +{sortedPorts.length - 8} more\n                  </Badge>\n                </PopoverTrigger>\n                <PopoverContent className=\"w-80 p-3\">\n                  <div className=\"space-y-2\">\n                    <h4 className=\"font-medium text-sm\">{t.tooltips.allOpenPorts} ({sortedPorts.length})</h4>\n                    <div className=\"flex flex-wrap gap-1.5 max-h-48 overflow-y-auto\">\n                      {sortedPorts.map((port, index) => (\n                        <Badge \n                          key={index} \n                          variant=\"outline\"\n                          className=\"text-xs font-mono\"\n                        >\n                          {port}\n                        </Badge>\n                      ))}\n                    </div>\n                  </div>\n                </PopoverContent>\n              </Popover>\n            )}\n          </div>\n        )\n      },\n    },\n  ]\n}\n"
  },
  {
    "path": "frontend/components/ip-addresses/ip-addresses-data-table.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport type { ColumnDef } from \"@tanstack/react-table\"\nimport { useTranslations } from \"next-intl\"\nimport { UnifiedDataTable } from \"@/components/ui/data-table\"\nimport { PREDEFINED_FIELDS, type FilterField } from \"@/components/common/smart-filter-input\"\nimport type { IPAddress } from \"@/types/ip-address.types\"\nimport type { PaginationInfo } from \"@/types/common.types\"\nimport type { DownloadOption } from \"@/types/data-table.types\"\n\n// IP address page filter field configuration\nconst IP_ADDRESS_FILTER_FIELDS: FilterField[] = [\n  PREDEFINED_FIELDS.ip,\n  PREDEFINED_FIELDS.port,\n  PREDEFINED_FIELDS.host,\n]\n\n// IP address page filter examples\nconst IP_ADDRESS_FILTER_EXAMPLES = [\n  'ip=\"192.168.1.*\" && port=\"80\"',\n  'port=\"443\" || port=\"8443\"',\n  'host=\"api.example.com\" && port!=\"22\"',\n]\n\ninterface IPAddressesDataTableProps {\n  data: IPAddress[]\n  columns: ColumnDef<IPAddress>[]\n  filterValue?: string\n  onFilterChange?: (value: string) => void\n  pagination?: { pageIndex: number; pageSize: number }\n  setPagination?: React.Dispatch<React.SetStateAction<{ pageIndex: number; pageSize: number }>>\n  paginationInfo?: PaginationInfo\n  onPaginationChange?: (pagination: { pageIndex: number; pageSize: number }) => void\n  onBulkDelete?: () => void\n  onSelectionChange?: (selectedRows: IPAddress[]) => void\n  onDownloadAll?: () => void\n  onDownloadSelected?: () => void\n}\n\nexport function IPAddressesDataTable({\n  data = [],\n  columns,\n  filterValue = \"\",\n  onFilterChange,\n  pagination,\n  setPagination,\n  paginationInfo,\n  onPaginationChange,\n  onBulkDelete,\n  onSelectionChange,\n  onDownloadAll,\n  onDownloadSelected,\n}: IPAddressesDataTableProps) {\n  const t = useTranslations(\"common.status\")\n  const tDownload = useTranslations(\"common.download\")\n  const tActions = useTranslations(\"common.actions\")\n  \n  // Smart search handler\n  const handleSmartSearch = (rawQuery: string) => {\n    onFilterChange?.(rawQuery)\n  }\n\n  // Download options\n  const downloadOptions: DownloadOption[] = []\n  if (onDownloadAll) {\n    downloadOptions.push({\n      key: \"all\",\n      label: tDownload(\"all\"),\n      onClick: onDownloadAll,\n    })\n  }\n  if (onDownloadSelected) {\n    downloadOptions.push({\n      key: \"selected\",\n      label: tDownload(\"selected\"),\n      onClick: onDownloadSelected,\n      disabled: (count) => count === 0,\n    })\n  }\n\n  return (\n    <UnifiedDataTable\n      data={data}\n      columns={columns}\n      getRowId={(row) => row.ip}\n      // Pagination\n      pagination={pagination}\n      setPagination={setPagination}\n      paginationInfo={paginationInfo}\n      onPaginationChange={onPaginationChange}\n      // Smart filter\n      searchMode=\"smart\"\n      searchValue={filterValue}\n      onSearch={handleSmartSearch}\n      filterFields={IP_ADDRESS_FILTER_FIELDS}\n      filterExamples={IP_ADDRESS_FILTER_EXAMPLES}\n      // Selection\n      onSelectionChange={onSelectionChange}\n      // Bulk operations\n      onBulkDelete={onBulkDelete}\n      bulkDeleteLabel={tActions(\"delete\")}\n      showAddButton={false}\n      // Download\n      downloadOptions={downloadOptions.length > 0 ? downloadOptions : undefined}\n      // Empty state\n      emptyMessage={t(\"noData\")}\n    />\n  )\n}\n"
  },
  {
    "path": "frontend/components/ip-addresses/ip-addresses-view.tsx",
    "content": "\"use client\"\n\nimport React, { useCallback, useMemo, useState } from \"react\"\nimport { AlertTriangle } from \"lucide-react\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport { IPAddressesDataTable } from \"./ip-addresses-data-table\"\nimport { createIPAddressColumns } from \"./ip-addresses-columns\"\nimport { DataTableSkeleton } from \"@/components/ui/data-table-skeleton\"\nimport { Button } from \"@/components/ui/button\"\nimport { useTargetIPAddresses, useScanIPAddresses } from \"@/hooks/use-ip-addresses\"\nimport { ConfirmDialog } from \"@/components/ui/confirm-dialog\"\nimport { getDateLocale } from \"@/lib/date-utils\"\nimport type { IPAddress } from \"@/types/ip-address.types\"\nimport { IPAddressService } from \"@/services/ip-address.service\"\nimport { toast } from \"sonner\"\n\nexport function IPAddressesView({\n  targetId,\n  scanId,\n}: {\n  targetId?: number\n  scanId?: number\n}) {\n  const [pagination, setPagination] = useState({\n    pageIndex: 0,\n    pageSize: 10,\n  })\n  const [selectedIPAddresses, setSelectedIPAddresses] = useState<IPAddress[]>([])\n  const [filterQuery, setFilterQuery] = useState(\"\")\n  const [deleteDialogOpen, setDeleteDialogOpen] = useState(false)\n  const [isDeleting, setIsDeleting] = useState(false)\n\n  // Internationalization\n  const tColumns = useTranslations(\"columns\")\n  const tCommon = useTranslations(\"common\")\n  const tTooltips = useTranslations(\"tooltips\")\n  const tToast = useTranslations(\"toast\")\n  const tStatus = useTranslations(\"common.status\")\n  const locale = useLocale()\n\n  // Build translation object\n  const translations = useMemo(() => ({\n    columns: {\n      ipAddress: tColumns(\"ipAddress.ipAddress\"),\n      hosts: tColumns(\"ipAddress.hosts\"),\n      createdAt: tColumns(\"common.createdAt\"),\n      openPorts: tColumns(\"ipAddress.openPorts\"),\n    },\n    actions: {\n      selectAll: tCommon(\"actions.selectAll\"),\n      selectRow: tCommon(\"actions.selectRow\"),\n    },\n    tooltips: {\n      allHosts: tTooltips(\"allHosts\"),\n      allOpenPorts: tTooltips(\"allOpenPorts\"),\n    },\n  }), [tColumns, tCommon, tTooltips])\n\n  const handleFilterChange = (value: string) => {\n    setFilterQuery(value)\n    setPagination((prev) => ({ ...prev, pageIndex: 0 }))\n  }\n\n  const targetQuery = useTargetIPAddresses(\n    targetId || 0,\n    {\n      page: pagination.pageIndex + 1,\n      pageSize: pagination.pageSize,\n      filter: filterQuery || undefined,\n    },\n    { enabled: !!targetId }\n  )\n\n  const scanQuery = useScanIPAddresses(\n    scanId || 0,\n    {\n      page: pagination.pageIndex + 1,\n      pageSize: pagination.pageSize,\n      filter: filterQuery || undefined,\n    },\n    { enabled: !!scanId }\n  )\n\n  const activeQuery = targetId ? targetQuery : scanQuery\n  const { data, isLoading, error, refetch } = activeQuery\n\n  const formatDate = useCallback((dateString: string) => {\n    return new Date(dateString).toLocaleString(getDateLocale(locale), {\n      year: \"numeric\",\n      month: \"2-digit\",\n      day: \"2-digit\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\",\n      hour12: false,\n    })\n  }, [locale])\n\n  const columns = useMemo(\n    () =>\n      createIPAddressColumns({\n        formatDate,\n        t: translations,\n      }),\n    [formatDate, translations]\n  )\n\n  const ipAddresses: IPAddress[] = useMemo(() => {\n    return data?.results ?? []\n  }, [data])\n\n  const paginationInfo = data\n    ? {\n      total: data.total,\n      page: data.page,\n      pageSize: data.pageSize,\n      totalPages: data.totalPages,\n    }\n    : undefined\n  const handleSelectionChange = useCallback((selectedRows: IPAddress[]) => {\n    setSelectedIPAddresses(selectedRows)\n  }, [])\n\n  // Handle download all IP addresses\n  const handleDownloadAll = async () => {\n    try {\n      let blob: Blob | null = null\n\n      if (scanId) {\n        blob = await IPAddressService.exportIPAddressesByScanId(scanId)\n      } else if (targetId) {\n        blob = await IPAddressService.exportIPAddressesByTargetId(targetId)\n      } else {\n        if (!ipAddresses || ipAddresses.length === 0) {\n          return\n        }\n        // Frontend CSV generation (fallback when no scanId/targetId)\n        const csvContent = generateCSV(ipAddresses)\n        blob = new Blob([csvContent], { type: \"text/csv;charset=utf-8\" })\n      }\n\n      if (!blob) return\n\n      const url = URL.createObjectURL(blob)\n      const a = document.createElement(\"a\")\n      const prefix = scanId ? `scan-${scanId}` : targetId ? `target-${targetId}` : \"ip-addresses\"\n      a.href = url\n      a.download = `${prefix}-ip-addresses-${Date.now()}.csv`\n      document.body.appendChild(a)\n      a.click()\n      document.body.removeChild(a)\n      URL.revokeObjectURL(url)\n    } catch (error) {\n      console.error(\"Failed to download IP address list\", error)\n      toast.error(tToast(\"downloadFailed\"))\n    }\n  }\n\n  // Format date as YYYY-MM-DD HH:MM:SS (consistent with backend)\n  const formatDateForCSV = (dateString: string): string => {\n    if (!dateString) return ''\n    const date = new Date(dateString)\n    const year = date.getFullYear()\n    const month = String(date.getMonth() + 1).padStart(2, '0')\n    const day = String(date.getDate()).padStart(2, '0')\n    const hours = String(date.getHours()).padStart(2, '0')\n    const minutes = String(date.getMinutes()).padStart(2, '0')\n    const seconds = String(date.getSeconds()).padStart(2, '0')\n    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`\n  }\n\n  // Generate CSV content (original format: one row per host+port combination)\n  const generateCSV = (items: IPAddress[]): string => {\n    const BOM = '\\ufeff'\n    const headers = ['ip', 'host', 'port', 'created_at']\n    \n    const escapeCSV = (value: string): string => {\n      if (value.includes(',') || value.includes('\"') || value.includes('\\n')) {\n        return `\"${value.replace(/\"/g, '\"\"')}\"`\n      }\n      return value\n    }\n    \n    // Expand aggregated data to original format: one row per (ip, host, port) combination\n    const rows: string[] = []\n    for (const item of items) {\n      for (const host of item.hosts) {\n        for (const port of item.ports) {\n          rows.push([\n            escapeCSV(item.ip),\n            escapeCSV(host),\n            escapeCSV(String(port)),\n            escapeCSV(formatDateForCSV(item.createdAt))\n          ].join(','))\n        }\n      }\n    }\n    \n    return BOM + [headers.join(','), ...rows].join('\\n')\n  }\n\n  // Handle download selected IP addresses\n  const handleDownloadSelected = () => {\n    if (selectedIPAddresses.length === 0) {\n      return\n    }\n    \n    const csvContent = generateCSV(selectedIPAddresses)\n    const blob = new Blob([csvContent], { type: \"text/csv;charset=utf-8\" })\n    const url = URL.createObjectURL(blob)\n    const a = document.createElement(\"a\")\n    const prefix = scanId ? `scan-${scanId}` : targetId ? `target-${targetId}` : \"ip-addresses\"\n    a.href = url\n    a.download = `${prefix}-ip-addresses-selected-${Date.now()}.csv`\n    document.body.appendChild(a)\n    a.click()\n    document.body.removeChild(a)\n    URL.revokeObjectURL(url)\n  }\n\n  // Handle bulk delete\n  const handleBulkDelete = async () => {\n    if (selectedIPAddresses.length === 0) return\n    \n    setIsDeleting(true)\n    try {\n      // IP addresses are aggregated, pass IP strings instead of IDs\n      const ips = selectedIPAddresses.map(ip => ip.ip)\n      const result = await IPAddressService.bulkDelete(ips)\n      toast.success(tToast(\"deleteSuccess\", { count: result.deletedCount }))\n      setSelectedIPAddresses([])\n      setDeleteDialogOpen(false)\n      refetch()\n    } catch (error) {\n      console.error(\"Failed to delete IP addresses\", error)\n      toast.error(tToast(\"deleteFailed\"))\n    } finally {\n      setIsDeleting(false)\n    }\n  }\n\n  if (error) {\n    return (\n      <div className=\"flex flex-col items-center justify-center py-12\">\n        <div className=\"rounded-full bg-destructive/10 p-3 mb-4\">\n          <AlertTriangle className=\"h-10 w-10 text-destructive\" />\n        </div>\n        <h3 className=\"text-lg font-semibold mb-2\">{tStatus(\"error\")}</h3>\n        <p className=\"text-muted-foreground text-center mb-4\">\n          {error.message || tStatus(\"error\")}\n        </p>\n        <Button onClick={() => refetch()}>{tCommon(\"actions.retry\")}</Button>\n      </div>\n    )\n  }\n\n  if (isLoading && !data) {\n    return (\n      <DataTableSkeleton\n        toolbarButtonCount={1}\n        rows={6}\n        columns={4}\n      />\n    )\n  }\n\n  return (\n    <>\n      <IPAddressesDataTable\n        data={ipAddresses}\n        columns={columns}\n        filterValue={filterQuery}\n        onFilterChange={handleFilterChange}\n        pagination={pagination}\n        setPagination={setPagination}\n        paginationInfo={paginationInfo}\n        onSelectionChange={handleSelectionChange}\n        onDownloadAll={handleDownloadAll}\n        onDownloadSelected={handleDownloadSelected}\n        onBulkDelete={targetId ? () => setDeleteDialogOpen(true) : undefined}\n      />\n\n      {/* Delete confirmation dialog */}\n      <ConfirmDialog\n        open={deleteDialogOpen}\n        onOpenChange={setDeleteDialogOpen}\n        title={tCommon(\"actions.confirmDelete\")}\n        description={tCommon(\"actions.deleteConfirmMessage\", { count: selectedIPAddresses.length })}\n        onConfirm={handleBulkDelete}\n        loading={isDeleting}\n        variant=\"destructive\"\n      />\n    </>\n  )\n}\n"
  },
  {
    "path": "frontend/components/language-switcher.tsx",
    "content": "'use client'\n\nimport { useLocale, useTranslations } from 'next-intl'\nimport { usePathname, useRouter } from '@/i18n/navigation'\nimport { locales, localeNames, type Locale } from '@/i18n/config'\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu'\nimport { Button } from '@/components/ui/button'\nimport { IconLanguage, IconCheck } from '@tabler/icons-react'\n\n/**\n * Language switcher component\n * Displays current language, click to switch to other supported languages\n */\nexport function LanguageSwitcher() {\n  const locale = useLocale() as Locale\n  const router = useRouter()\n  const pathname = usePathname()\n  const tCommon = useTranslations(\"common\")\n\n  const handleLocaleChange = (newLocale: Locale) => {\n    if (newLocale !== locale) {\n      router.replace(pathname, { locale: newLocale })\n    }\n  }\n\n  return (\n    <DropdownMenu>\n      <DropdownMenuTrigger asChild>\n        <Button variant=\"ghost\" size=\"icon\" className=\"h-8 w-8\">\n          <IconLanguage className=\"h-4 w-4\" />\n          <span className=\"sr-only\">{tCommon(\"theme.switchLanguage\")}</span>\n        </Button>\n      </DropdownMenuTrigger>\n      <DropdownMenuContent align=\"end\">\n        {locales.map((l) => (\n          <DropdownMenuItem\n            key={l}\n            onClick={() => handleLocaleChange(l)}\n            className=\"flex items-center justify-between\"\n          >\n            <span>{localeNames[l]}</span>\n            {locale === l && <IconCheck className=\"h-4 w-4 ml-2\" />}\n          </DropdownMenuItem>\n        ))}\n      </DropdownMenuContent>\n    </DropdownMenu>\n  )\n}\n"
  },
  {
    "path": "frontend/components/loading-spinner.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport { Spinner } from \"@/components/ui/spinner\"\n\ninterface LoadingSpinnerProps {\n  size?: \"sm\" | \"md\" | \"lg\"\n  className?: string\n}\n\n/**\n * Unified loading animation component\n * \n * Features:\n * - Three sizes: sm(16px), md(24px), lg(32px)\n * - Supports custom styles\n * - Uses Tailwind CSS animations\n */\nexport function LoadingSpinner({ size = \"sm\", className }: LoadingSpinnerProps) {\n  const sizeMap = {\n    sm: \"size-4\",\n    md: \"size-6\", \n    lg: \"size-8\"\n  }\n\n  return <Spinner className={cn(sizeMap[size], className)} />\n}\n\ninterface LoadingStateProps {\n  message?: string\n  size?: \"sm\" | \"md\" | \"lg\"\n  className?: string\n}\n\n/**\n * Loading state component with text\n * \n * Used for page-level loading state display\n */\nexport function LoadingState({ \n  message, \n  size = \"md\", \n  className \n}: LoadingStateProps) {\n  const sizeMap = {\n    sm: \"size-4\",\n    md: \"size-6\", \n    lg: \"size-8\"\n  }\n\n  return (\n    <div className={cn(\"flex items-center justify-center min-h-[200px] h-screen w-full\", className)}>\n      <div className=\"flex flex-col items-center space-y-4\">\n        <Spinner className={sizeMap[size]} />\n        <p className=\"text-sm text-muted-foreground\">{message}</p>\n      </div>\n    </div>\n  )\n}\n\n\ninterface LoadingOverlayProps {\n  isLoading: boolean\n  message?: string\n  children: React.ReactNode\n}\n\n/**\n * Loading overlay component\n * \n * Displays loading overlay on existing content\n */\nexport function LoadingOverlay({ \n  isLoading, \n  message, \n  children \n}: LoadingOverlayProps) {\n  return (\n    <div className=\"relative\">\n      {children}\n      {isLoading && (\n        <div className=\"absolute inset-0 bg-background/80 backdrop-blur-sm flex items-center justify-center z-50\">\n          <div className=\"flex flex-col items-center space-y-2\">\n            <LoadingSpinner size=\"lg\" />\n            <p className=\"text-sm text-muted-foreground\">{message}</p>\n          </div>\n        </div>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/nav-secondary.tsx",
    "content": "\"use client\" // Mark as client component, can use browser APIs and interactive features\n\n// Import React library\nimport * as React from \"react\"\n// Import icon type\nimport { type Icon } from \"@tabler/icons-react\"\n\n// Import sidebar related components\nimport {\n  SidebarGroup,        // Sidebar group\n  SidebarGroupContent, // Sidebar group content\n  SidebarMenu,         // Sidebar menu\n  SidebarMenuButton,   // Sidebar menu button\n  SidebarMenuItem,     // Sidebar menu item\n} from '@/components/ui/sidebar'\n\n/**\n * Secondary navigation component\n * Displays secondary navigation menu items, typically used for settings, help, etc.\n * \n * @param {Object} props - Component properties\n * @param {Array} props.items - Navigation items array\n * @param {string} props.items[].title - Navigation item title\n * @param {string} props.items[].url - Navigation item link\n * @param {Icon} props.items[].icon - Navigation item icon\n * @param {...any} props - Other properties passed to SidebarGroup\n */\nexport function NavSecondary({\n  items,\n  ...props  // Other properties passed to SidebarGroup\n}: {\n  items: {\n    title: string  // Navigation item title\n    url: string    // Navigation item URL\n    icon: Icon     // Navigation item icon\n  }[]\n} & React.ComponentPropsWithoutRef<typeof SidebarGroup>) {\n  return (\n    <SidebarGroup {...props}>  {/* Pass all other properties */}\n      {/* Sidebar group content */}\n      <SidebarGroupContent>\n        {/* Sidebar menu */}\n        <SidebarMenu>\n          {/* Iterate through secondary navigation items */}\n          {items.map((item) => (\n            <SidebarMenuItem key={item.title}>\n              {/* Navigation menu button, rendered as link using asChild */}\n              <SidebarMenuButton asChild>\n                <a href={item.url}>              {/* Navigation link */}\n                  <item.icon />                   {/* Navigation item icon */}\n                  <span>{item.title}</span>       {/* Navigation item title */}\n                </a>\n              </SidebarMenuButton>\n            </SidebarMenuItem>\n          ))}\n        </SidebarMenu>\n      </SidebarGroupContent>\n    </SidebarGroup>\n  )\n}\n"
  },
  {
    "path": "frontend/components/nav-system.tsx",
    "content": "\"use client\"\n\nimport { type Icon } from \"@tabler/icons-react\"\nimport { useTranslations } from \"next-intl\"\n\nimport { Link, usePathname } from \"@/i18n/navigation\"\n\nimport {\n  SidebarGroup,\n  SidebarGroupLabel,\n  SidebarMenu,\n  SidebarMenuButton,\n  SidebarMenuItem,\n} from \"@/components/ui/sidebar\"\n\nexport function NavSystem({\n  items,\n}: {\n  items: {\n    name: string\n    url: string\n    icon: Icon\n  }[]\n}) {\n  const pathname = usePathname()\n  const tNav = useTranslations(\"navigation\")\n  const normalize = (p: string) => (p !== \"/\" && p.endsWith(\"/\") ? p.slice(0, -1) : p)\n  const current = normalize(pathname)\n\n  return (\n    <SidebarGroup className=\"group-data-[collapsible=icon]:hidden\">\n      <SidebarGroupLabel>{tNav(\"settings\")}</SidebarGroupLabel>\n      <SidebarMenu>\n        {items.map((item) => {\n          const navUrl = normalize(item.url)\n          const isActive = current === navUrl || current.startsWith(navUrl + \"/\")\n\n          return (\n            <SidebarMenuItem key={item.name}>\n              <SidebarMenuButton asChild isActive={isActive}>\n                <Link href={item.url}>\n                  <item.icon />\n                  <span>{item.name}</span>\n                </Link>\n              </SidebarMenuButton>\n            </SidebarMenuItem>\n          )\n        })}\n      </SidebarMenu>\n    </SidebarGroup>\n  )\n}\n"
  },
  {
    "path": "frontend/components/nav-user.tsx",
    "content": "\"use client\" // Mark as client component, can use browser APIs and interactive features\n\nimport React from \"react\"\n// Import icon components\nimport {\n  IconDotsVertical,  // Vertical three-dot icon\n  IconKey,           // Key icon\n  IconLogout,        // Logout icon\n} from \"@tabler/icons-react\"\n\n// Import avatar related components\nimport {\n  Avatar,        // Avatar container\n  AvatarFallback, // Avatar fallback display\n  AvatarImage,   // Avatar image\n} from '@/components/ui/avatar'\n// Import dropdown menu related components\nimport {\n  DropdownMenu,          // Dropdown menu container\n  DropdownMenuContent,   // Dropdown menu content\n  DropdownMenuItem,      // Dropdown menu item\n  DropdownMenuLabel,     // Dropdown menu label\n  DropdownMenuSeparator, // Dropdown menu separator\n  DropdownMenuTrigger,   // Dropdown menu trigger\n} from '@/components/ui/dropdown-menu'\n// Import sidebar related components\nimport {\n  SidebarMenu,       // Sidebar menu\n  SidebarMenuButton, // Sidebar menu button\n  SidebarMenuItem,   // Sidebar menu item\n  useSidebar,        // Sidebar Hook\n} from '@/components/ui/sidebar'\nimport { useAuth, useLogout } from '@/hooks/use-auth'\nimport { ChangePasswordDialog } from '@/components/auth/change-password-dialog'\n\n/**\n * User navigation component\n * Displays user information and user-related action menu\n * \n * @param {Object} props - Component properties\n * @param {Object} props.user - User information\n * @param {string} props.user.name - User name\n * @param {string} props.user.email - User email\n * @param {string} props.user.avatar - User avatar URL\n */\nexport function NavUser({\n  user,\n}: {\n  user: {\n    name: string   // User name\n    email: string  // User email\n    avatar: string // User avatar URL\n  }\n}) {\n  const { isMobile } = useSidebar() // Get mobile state\n  const { data: auth } = useAuth()\n  const { mutate: logout, isPending: isLoggingOut } = useLogout()\n  const [showChangePassword, setShowChangePassword] = React.useState(false)\n  \n  // Use real username (if logged in)\n  const displayName = auth?.user?.username || user.name\n\n  return (\n    <>\n    <ChangePasswordDialog \n      open={showChangePassword} \n      onOpenChange={setShowChangePassword} \n    />\n    <SidebarMenu>\n      <SidebarMenuItem>\n        {/* User dropdown menu */}\n        <DropdownMenu>\n          {/* Dropdown menu trigger */}\n          <DropdownMenuTrigger asChild>\n            <SidebarMenuButton\n              size=\"lg\"                                                    // Large size\n              className=\"data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground\" // Style when open\n            >\n              {/* User avatar */}\n              <Avatar className=\"h-8 w-8 rounded-lg grayscale\">         {/* 8x8 size, rounded, grayscale */}\n                <AvatarImage src={user.avatar} alt={user.name} />       {/* User avatar image */}\n                <AvatarFallback className=\"rounded-lg\">CN</AvatarFallback> {/* Fallback display */}\n              </Avatar>\n              {/* User information area */}\n              <div className=\"grid flex-1 text-left text-sm leading-tight\">\n                <span className=\"truncate font-medium\">{displayName}</span>  {/* User name */}\n                <span className=\"text-muted-foreground truncate text-xs\">  {/* User email */}\n                  {/* {user.email} */}\n                </span>\n              </div>\n              {/* Three-dot menu icon */}\n              <IconDotsVertical className=\"ml-auto size-4\" />           {/* Auto left margin, 4x4 size */}\n            </SidebarMenuButton>\n          </DropdownMenuTrigger>\n          {/* Dropdown menu content */}\n          <DropdownMenuContent\n            className=\"rounded-lg\"                                     // Rounded corners\n            side={isMobile ? \"bottom\" : \"right\"}                        // Bottom on mobile, right on desktop\n            align=\"end\"                                                 // End alignment\n            sideOffset={4}                                             // 4px offset\n          >\n            {/* User information label */}\n            <DropdownMenuLabel className=\"p-0 font-normal\">           {/* No padding, normal font */}\n              <div className=\"flex items-center gap-2 px-1 py-1.5 text-left text-sm\">\n                {/* User avatar */}\n                <Avatar className=\"h-8 w-8 rounded-lg\">\n                  <AvatarImage src={user.avatar} alt={user.name} />     {/* User avatar image */}\n                  <AvatarFallback className=\"rounded-lg\">CN</AvatarFallback> {/* Fallback display */}\n                </Avatar>\n                {/* User information */}\n                <div className=\"grid flex-1 text-left text-sm leading-tight\">\n                  <span className=\"truncate font-medium\">{displayName}</span>  {/* User name */}\n                  <span className=\"text-muted-foreground truncate text-xs\">  {/* User email */}\n                    {/* {user.email} */}\n                  </span>\n                </div>\n              </div>\n            </DropdownMenuLabel>\n            {/* Separator */}\n            <DropdownMenuSeparator />\n            {/* Change password */}\n            <DropdownMenuItem onClick={() => setShowChangePassword(true)}>\n              <IconKey />\n              Change Password\n            </DropdownMenuItem>\n            {/* Logout option */}\n            <DropdownMenuItem \n              onClick={() => logout()}\n              disabled={isLoggingOut}\n            >\n              <IconLogout />\n              {isLoggingOut ? 'Logging out...' : 'Logout'}\n            </DropdownMenuItem>\n          </DropdownMenuContent>\n        </DropdownMenu>\n      </SidebarMenuItem>\n    </SidebarMenu>\n    </>\n  )\n}\n"
  },
  {
    "path": "frontend/components/notifications/index.ts",
    "content": "/**\n * Notification center module exports\n */\n\nexport { NotificationDrawer } from './notification-drawer'\n"
  },
  {
    "path": "frontend/components/notifications/notification-drawer.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { useTranslations } from \"next-intl\"\nimport { Bell, AlertTriangle, Activity, Info, Server, BellOff, Wifi, WifiOff, CheckCheck, Loader2 } from \"lucide-react\"\nimport { Button } from \"@/components/ui/button\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { ScrollArea } from \"@/components/ui/scroll-area\"\nimport { Skeleton } from \"@/components/ui/skeleton\"\nimport {\n  Sheet,\n  SheetContent,\n  SheetHeader,\n  SheetTitle,\n  SheetTrigger,\n} from \"@/components/ui/sheet\"\nimport { cn } from \"@/lib/utils\"\nimport { transformBackendNotification, useNotificationSSE } from \"@/hooks/use-notification-sse\"\nimport { useMarkAllAsRead, useNotifications } from \"@/hooks/use-notifications\"\nimport type { Notification, NotificationType, NotificationSeverity } from \"@/types/notification.types\"\n\n/**\n * Notification drawer component\n * A side panel that slides out from the right, displaying detailed notification information\n */\n\n/** Connection status indicator */\nfunction ConnectionStatus({ isConnected, t }: { isConnected: boolean, t: ReturnType<typeof useTranslations> }) {\n  return (\n    <div className=\"flex items-center gap-1.5\">\n      <span className=\"relative flex h-2 w-2\">\n        {isConnected && (\n          <span className=\"absolute inline-flex h-full w-full animate-ping rounded-full bg-emerald-400 opacity-75\" />\n        )}\n        <span className={cn(\n          \"relative inline-flex h-2 w-2 rounded-full\",\n          isConnected ? \"bg-emerald-500\" : \"bg-gray-400\"\n        )} />\n      </span>\n      <span className=\"text-xs text-muted-foreground\">\n        {isConnected ? t(\"status.realtime\") : t(\"status.offline\")}\n      </span>\n    </div>\n  )\n}\n\n/** Notification skeleton screen */\nfunction NotificationSkeleton() {\n  return (\n    <div className=\"space-y-2\">\n      {[1, 2, 3].map((i) => (\n        <div key={i} className=\"rounded-md border p-3\">\n          <div className=\"flex items-start gap-2.5\">\n            <Skeleton className=\"h-5 w-5 rounded-full\" />\n            <div className=\"flex-1 space-y-2\">\n              <Skeleton className=\"h-4 w-3/4\" />\n              <Skeleton className=\"h-3 w-full\" />\n              <Skeleton className=\"h-3 w-1/2\" />\n            </div>\n          </div>\n        </div>\n      ))}\n    </div>\n  )\n}\n\n/** Time grouping helper function */\nfunction getTimeGroup(dateStr?: string): 'today' | 'yesterday' | 'earlier' {\n  if (!dateStr) return 'earlier'\n  const date = new Date(dateStr)\n  const now = new Date()\n  const today = new Date(now.getFullYear(), now.getMonth(), now.getDate())\n  const yesterday = new Date(today.getTime() - 24 * 60 * 60 * 1000)\n  \n  if (date >= today) return 'today'\n  if (date >= yesterday) return 'yesterday'\n  return 'earlier'\n}\n\nexport function NotificationDrawer() {\n  const t = useTranslations(\"notificationDrawer\")\n  const [open, setOpen] = React.useState(false)\n  const [activeFilter, setActiveFilter] = React.useState<NotificationType | 'all'>('all')\n  const queryParams = React.useMemo(() => ({ pageSize: 100 }), [])\n  const { data: notificationResponse, isLoading: isHistoryLoading } = useNotifications(queryParams)\n  const { mutate: markAllAsRead, isPending: isMarkingAll } = useMarkAllAsRead()\n\n  // Filter tab configuration\n  const filterTabs: { value: NotificationType | 'all'; label: string; icon?: React.ReactNode }[] = [\n    { value: 'all', label: t(\"filters.all\") },\n    { value: 'scan', label: t(\"filters.scan\"), icon: <Activity className=\"h-3 w-3\" /> },\n    { value: 'vulnerability', label: t(\"filters.vulnerability\"), icon: <AlertTriangle className=\"h-3 w-3\" /> },\n    { value: 'asset', label: t(\"filters.asset\"), icon: <Server className=\"h-3 w-3\" /> },\n    { value: 'system', label: t(\"filters.system\"), icon: <Info className=\"h-3 w-3\" /> },\n  ]\n\n  // Category title mapping\n  const categoryTitleMap: Record<NotificationType, string> = {\n    scan: t(\"categories.scan\"),\n    vulnerability: t(\"categories.vulnerability\"),\n    asset: t(\"categories.asset\"),\n    system: t(\"categories.system\"),\n  }\n\n  // Time group labels\n  const timeGroupLabels = {\n    today: t(\"timeGroups.today\"),\n    yesterday: t(\"timeGroups.yesterday\"),\n    earlier: t(\"timeGroups.earlier\"),\n  }\n\n  // SSE real-time notifications\n  const { notifications: sseNotifications, isConnected, markNotificationsAsRead } = useNotificationSSE()\n\n  const [historyNotifications, setHistoryNotifications] = React.useState<Notification[]>([])\n\n  React.useEffect(() => {\n    if (!notificationResponse?.results) return\n    const backendNotifications = notificationResponse.results ?? []\n    setHistoryNotifications(backendNotifications.map(transformBackendNotification))\n  }, [notificationResponse])\n\n  // Merge SSE and API notifications, SSE takes priority\n  const allNotifications = React.useMemo(() => {\n    const seen = new Set<number>()\n    const merged: Notification[] = []\n\n    for (const notification of sseNotifications) {\n      if (!seen.has(notification.id)) {\n        merged.push(notification)\n        seen.add(notification.id)\n      }\n    }\n\n    for (const notification of historyNotifications) {\n      if (!seen.has(notification.id)) {\n        merged.push(notification)\n        seen.add(notification.id)\n      }\n    }\n\n    return merged.sort((a, b) => {\n      const aTime = a.createdAt ? new Date(a.createdAt).getTime() : 0\n      const bTime = b.createdAt ? new Date(b.createdAt).getTime() : 0\n      return bTime - aTime\n    })\n  }, [historyNotifications, sseNotifications])\n\n  // Unread notification count\n  const unreadCount = allNotifications.filter(n => n.unread).length\n\n  const unreadByType = React.useMemo<Record<NotificationType | 'all', number>>(() => {\n    const counts: Record<NotificationType | 'all', number> = {\n      all: 0,\n      scan: 0,\n      vulnerability: 0,\n      asset: 0,\n      system: 0,\n    }\n\n    allNotifications.forEach(notification => {\n      if (!notification.unread) return\n      counts.all += 1\n      if (counts[notification.type] !== undefined) {\n        counts[notification.type] += 1\n      }\n    })\n\n    return counts\n  }, [allNotifications])\n\n  // Filtered notification list\n  const filteredNotifications = React.useMemo(() => {\n    if (activeFilter === 'all') return allNotifications\n    return allNotifications.filter(n => n.type === activeFilter)\n  }, [allNotifications, activeFilter])\n\n  // Get notification icon\n  const severityIconClassMap: Record<NotificationSeverity, string> = {\n    critical: \"text-[#da3633] dark:text-[#f85149]\",\n    high: \"text-[#d29922]\",\n    medium: \"text-[#d4a72c]\",\n    low: \"text-[#848d97]\",\n  }\n\n  const getNotificationIcon = (type: NotificationType, severity?: NotificationSeverity) => {\n    const severityClass = severity ? severityIconClassMap[severity] : \"text-gray-500\"\n\n    if (type === \"vulnerability\") {\n      return <AlertTriangle className={cn(\"h-5 w-5\", severityClass)} />\n    }\n    if (type === \"scan\") {\n      return <Activity className={cn(\"h-5 w-5\", severityClass)} />\n    }\n    if (type === \"asset\") {\n      return <Server className={cn(\"h-5 w-5\", severityClass)} />\n    }\n    return <Info className={cn(\"h-5 w-5\", severityClass)} />\n  }\n\n  const severityCardClassMap: Record<NotificationSeverity, string> = {\n    critical: \"border-[#da3633]/30 bg-[#da3633]/5 hover:bg-[#da3633]/10 dark:border-[#f85149]/30 dark:bg-[#f85149]/5 dark:hover:bg-[#f85149]/10\",\n    high: \"border-[#d29922]/30 bg-[#d29922]/5 hover:bg-[#d29922]/10 dark:border-[#d29922]/30 dark:bg-[#d29922]/5 dark:hover:bg-[#d29922]/10\",\n    medium: \"border-[#d4a72c]/30 bg-[#d4a72c]/5 hover:bg-[#d4a72c]/10 dark:border-[#d4a72c]/30 dark:bg-[#d4a72c]/5 dark:hover:bg-[#d4a72c]/10\",\n    low: \"border-[#848d97]/30 bg-[#848d97]/5 hover:bg-[#848d97]/10 dark:border-[#848d97]/30 dark:bg-[#848d97]/5 dark:hover:bg-[#848d97]/10\",\n  }\n\n  const getNotificationCardClasses = (severity?: NotificationSeverity) => {\n    if (!severity) {\n      return \"border-border bg-card hover:bg-accent/50\"\n    }\n    return cn(\"border-border\", severityCardClassMap[severity] ?? \"\")\n  }\n\n  const handleMarkAll = React.useCallback(() => {\n    if (allNotifications.length === 0 || isMarkingAll) return\n    markAllAsRead(undefined, {\n      onSuccess: () => {\n        // Update history notification status\n        setHistoryNotifications(prev => prev.map(notification => ({ ...notification, unread: false })))\n        // Update SSE real-time notification status\n        markNotificationsAsRead()\n      },\n    })\n  }, [allNotifications.length, isMarkingAll, markAllAsRead, markNotificationsAsRead])\n\n  // Group notifications by time\n  const groupedNotifications = React.useMemo(() => {\n    const groups: Record<'today' | 'yesterday' | 'earlier', Notification[]> = {\n      today: [],\n      yesterday: [],\n      earlier: [],\n    }\n    \n    filteredNotifications.forEach(notification => {\n      const group = getTimeGroup(notification.createdAt)\n      groups[group].push(notification)\n    })\n    \n    return groups\n  }, [filteredNotifications])\n\n  // Render single notification card\n  const renderNotificationCard = (notification: Notification) => (\n    <div\n      key={notification.id}\n      className={cn(\n        \"group relative rounded-lg border p-3 transition-all duration-200 overflow-hidden\",\n        \"hover:shadow-sm hover:scale-[1.01]\",\n        getNotificationCardClasses(notification.severity)\n      )}\n    >\n      {notification.unread && (\n        <span className=\"absolute right-2 bottom-2 h-2 w-2 rounded-full bg-primary\" aria-hidden />\n      )}\n      <div className=\"flex items-start gap-3\">\n        <div className={cn(\n          \"mt-0.5 p-1.5 rounded-full shrink-0\",\n          notification.severity === 'critical' && \"bg-[#da3633]/10 dark:bg-[#f85149]/10\",\n          notification.severity === 'high' && \"bg-[#d29922]/10\",\n          notification.severity === 'medium' && \"bg-[#d4a72c]/10\",\n          (!notification.severity || notification.severity === 'low') && \"bg-muted\"\n        )}>\n          {getNotificationIcon(notification.type, notification.severity)}\n        </div>\n        <div className=\"flex-1 min-w-0 overflow-hidden\">\n          {/* Category title + time */}\n          <div className=\"flex items-center justify-between gap-2 mb-1\">\n            <span className=\"text-xs font-medium text-muted-foreground\">\n              {categoryTitleMap[notification.type]}\n            </span>\n            <span className=\"text-xs text-muted-foreground tabular-nums shrink-0\">\n              {notification.time}\n            </span>\n          </div>\n          {/* Notification title */}\n          <p className=\"text-sm font-semibold leading-snug truncate\">\n            {notification.title}\n          </p>\n          {/* Notification description - supports line breaks */}\n          <p className=\"text-xs text-muted-foreground mt-1 whitespace-pre-line break-all line-clamp-4\">\n            {notification.description}\n          </p>\n        </div>\n      </div>\n    </div>\n  )\n\n  // Render notification list (with time grouping)\n  const renderNotificationList = () => {\n    const hasAny = filteredNotifications.length > 0\n    \n    if (!hasAny) {\n      return (\n        <div className=\"flex flex-col items-center justify-center h-40 text-muted-foreground\">\n          <BellOff className=\"h-10 w-10 mb-2 opacity-50\" />\n          <p className=\"text-sm\">{t(\"empty\")}</p>\n        </div>\n      )\n    }\n\n    return (\n      <div className=\"space-y-4\">\n        {(['today', 'yesterday', 'earlier'] as const).map(group => {\n          const items = groupedNotifications[group]\n          if (items.length === 0) return null\n          \n          return (\n            <div key={group}>\n              <h3 className=\"sticky top-0 z-10 text-xs font-medium text-muted-foreground mb-2 px-1 py-1 backdrop-blur bg-background/90\">\n                {timeGroupLabels[group]}\n              </h3>\n              <div className=\"space-y-2\">\n                {items.map(renderNotificationCard)}\n              </div>\n            </div>\n          )\n        })}\n      </div>\n    )\n  }\n\n  return (\n    <Sheet open={open} onOpenChange={setOpen}>\n      <SheetTrigger asChild>\n        <Button variant=\"ghost\" size=\"icon\" className=\"relative group\">\n          <Bell className=\"h-5 w-5\" />\n          {unreadCount > 0 && (\n            <>\n              <span className=\"absolute -top-0.5 -right-0.5 h-4 w-4 rounded-full bg-destructive animate-ping opacity-75\" />\n              <Badge \n                variant=\"destructive\" \n                className=\"absolute -top-0.5 -right-0.5 h-4 min-w-4 rounded-full p-0 text-[10px] flex items-center justify-center\"\n              >\n                {unreadCount > 99 ? '99+' : unreadCount}\n              </Badge>\n            </>\n          )}\n          <span className=\"sr-only\">{t(\"title\")}</span>\n        </Button>\n      </SheetTrigger>\n      <SheetContent className=\"w-full sm:max-w-[440px] p-0 flex flex-col gap-0\">\n        <SheetHeader className=\"border-b px-4 py-1.5\">\n          <div className=\"flex items-center justify-between gap-2\">\n            <SheetTitle className=\"text-sm font-semibold\">{t(\"title\")}</SheetTitle>\n            <div className=\"flex items-center gap-2\">\n              <button\n                onClick={handleMarkAll}\n                disabled={isMarkingAll || allNotifications.length === 0}\n                className=\"text-xs text-primary hover:text-primary/80 hover:underline underline-offset-2 disabled:opacity-50 disabled:cursor-not-allowed disabled:no-underline transition-colors\"\n                title={t(\"markAllAsRead\")}\n              >\n                {isMarkingAll ? <Loader2 className=\"h-3.5 w-3.5 animate-spin\" /> : t(\"markAllRead\")}\n              </button>\n            </div>\n          </div>\n        </SheetHeader>\n\n        {/* Category filter tabs */}\n        <div className=\"flex gap-1 px-3 py-1.5 border-b overflow-x-auto\">\n          {filterTabs.map((tab) => (\n            <button\n              key={tab.value}\n              onClick={() => setActiveFilter(tab.value)}\n              className={cn(\n                \"inline-flex items-center gap-1 px-2.5 py-1 rounded-full text-xs font-medium transition-all whitespace-nowrap\",\n                activeFilter === tab.value\n                  ? \"bg-primary text-primary-foreground shadow-sm\"\n                  : \"bg-muted text-muted-foreground hover:bg-accent hover:text-accent-foreground\"\n              )}\n            >\n              {tab.icon}\n              {tab.label}\n              {unreadByType[tab.value] > 0 && (\n                <span\n                  className={cn(\n                    \"ml-1 h-1.5 w-1.5 rounded-full\",\n                    activeFilter === tab.value ? \"bg-primary-foreground\" : \"bg-primary\"\n                  )}\n                />\n              )}\n            </button>\n          ))}\n        </div>\n\n        <ScrollArea className=\"flex-1\">\n          <div className=\"p-3\">\n            {isHistoryLoading && allNotifications.length === 0 ? (\n              <NotificationSkeleton />\n            ) : (\n              renderNotificationList()\n            )}\n          </div>\n        </ScrollArea>\n      </SheetContent>\n    </Sheet>\n  )\n}\n"
  },
  {
    "path": "frontend/components/organization/add-organization-dialog.tsx",
    "content": "\"use client\"\n\nimport React, { useState, useRef, useMemo } from \"react\"\nimport { Plus, Building2, Target } from \"lucide-react\"\nimport { useForm } from \"react-hook-form\"\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport * as z from \"zod\"\nimport { useTranslations } from \"next-intl\"\n\nimport { Button } from \"@/components/ui/button\"\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from \"@/components/ui/dialog\"\nimport { Input } from \"@/components/ui/input\"\nimport { Textarea } from \"@/components/ui/textarea\"\nimport { LoadingSpinner } from \"@/components/loading-spinner\"\nimport { TargetValidator } from \"@/lib/target-validator\"\nimport {\n  Form,\n  FormControl,\n  FormDescription,\n  FormField,\n  FormItem,\n  FormLabel,\n  FormMessage,\n} from \"@/components/ui/form\"\n\nimport { useCreateOrganization } from \"@/hooks/use-organizations\"\nimport { useBatchCreateTargets } from \"@/hooks/use-targets\"\n\nimport type { Organization } from \"@/types/organization.types\"\n\ninterface AddOrganizationDialogProps {\n  onAdd?: (organization: Organization) => void\n  open?: boolean\n  onOpenChange?: (open: boolean) => void\n}\n\nexport function AddOrganizationDialog({ \n  onAdd, \n  open: externalOpen, \n  onOpenChange: externalOnOpenChange \n}: AddOrganizationDialogProps) {\n  const t = useTranslations(\"organization.dialog\")\n  const tValidation = useTranslations(\"organization.validation\")\n\n  const formSchema = z.object({\n    name: z.string()\n      .min(2, { message: tValidation(\"nameMin\", { min: 2 }) })\n      .max(50, { message: tValidation(\"nameMax\", { max: 50 }) }),\n    description: z.string().max(200, { message: tValidation(\"descMax\", { max: 200 }) }).optional(),\n    targets: z.string().optional(),\n  })\n\n  type FormValues = z.infer<typeof formSchema>\n\n  const [internalOpen, setInternalOpen] = useState(false)\n  const open = externalOpen !== undefined ? externalOpen : internalOpen\n  const setOpen = externalOnOpenChange || setInternalOpen\n\n  const lineNumbersRef = useRef<HTMLDivElement | null>(null)\n  const textareaRef = useRef<HTMLTextAreaElement | null>(null)\n\n  const createOrganization = useCreateOrganization()\n  const batchCreateTargets = useBatchCreateTargets()\n  \n  const form = useForm<FormValues>({\n    resolver: zodResolver(formSchema),\n    defaultValues: {\n      name: \"\",\n      description: \"\",\n      targets: \"\",\n    },\n  })\n\n  const targetsText = form.watch(\"targets\") || \"\"\n\n  const targetValidation = useMemo(() => {\n    const lines = targetsText\n      .split(\"\\n\")\n      .map((s) => s.trim())\n      .filter((s) => s.length > 0)\n\n    if (lines.length === 0) {\n      return { count: 0, invalid: [] }\n    }\n\n    const results = TargetValidator.validateTargetBatch(lines)\n    const invalid = results\n      .filter((r) => !r.isValid)\n      .map((r) => ({ index: r.index, originalTarget: r.originalTarget, error: r.error || tValidation(\"targetInvalid\"), type: r.type }))\n    \n    return { count: lines.length, invalid }\n  }, [targetsText, tValidation])\n\n  const handleTextareaScroll = (e: React.UIEvent<HTMLTextAreaElement>) => {\n    if (lineNumbersRef.current) {\n      lineNumbersRef.current.scrollTop = e.currentTarget.scrollTop\n    }\n  }\n\n  const onSubmit = (values: FormValues) => {\n    if (targetValidation.invalid.length > 0) return\n\n    createOrganization.mutate(\n      {\n        name: values.name.trim(),\n        description: values.description?.trim() || \"\",\n      },\n      {\n        onSuccess: (newOrganization) => {\n          if (values.targets && values.targets.trim()) {\n            const targetList = values.targets\n              .split(\"\\n\")\n              .map(line => line.trim())\n              .filter(line => line.length > 0)\n              .map(name => ({ name }))\n\n            if (targetList.length > 0) {\n              batchCreateTargets.mutate(\n                { targets: targetList, organizationId: newOrganization.id },\n                {\n                  onSuccess: () => {\n                    form.reset()\n                    setOpen(false)\n                    if (onAdd) onAdd(newOrganization)\n                  }\n                }\n              )\n            } else {\n              form.reset()\n              setOpen(false)\n              if (onAdd) onAdd(newOrganization)\n            }\n          } else {\n            form.reset()\n            setOpen(false)\n            if (onAdd) onAdd(newOrganization)\n          }\n        }\n      }\n    )\n  }\n\n  const handleOpenChange = (newOpen: boolean) => {\n    if (!createOrganization.isPending && !batchCreateTargets.isPending) {\n      setOpen(newOpen)\n      if (!newOpen) form.reset()\n    }\n  }\n\n  const isFormValid = form.formState.isValid && targetValidation.invalid.length === 0\n  const isSubmitting = createOrganization.isPending || batchCreateTargets.isPending\n\n  return (\n    <Dialog open={open} onOpenChange={handleOpenChange}>\n      {externalOpen === undefined && (\n        <DialogTrigger asChild>\n          <Button size=\"sm\">\n            <Plus />\n            {t(\"addButton\")}\n          </Button>\n        </DialogTrigger>\n      )}\n      \n      <DialogContent className=\"sm:max-w-[650px] max-h-[90vh] overflow-y-auto\">\n        <DialogHeader>\n          <DialogTitle className=\"flex items-center space-x-2\">\n            <Building2 />\n            <span>{t(\"addTitle\")}</span>\n          </DialogTitle>\n          <DialogDescription>{t(\"addDesc\")}</DialogDescription>\n        </DialogHeader>\n        \n        <Form {...form}>\n          <form onSubmit={form.handleSubmit(onSubmit)}>\n            <div className=\"grid gap-4 py-4\">\n              <FormField\n                control={form.control}\n                name=\"name\"\n                render={({ field }) => (\n                  <FormItem>\n                    <FormLabel>\n                      {t(\"orgName\")} <span className=\"text-destructive\">*</span>\n                    </FormLabel>\n                    <FormControl>\n                      <Input\n                        placeholder={t(\"orgNamePlaceholder\")}\n                        disabled={isSubmitting}\n                        maxLength={50}\n                        {...field}\n                      />\n                    </FormControl>\n                    <FormDescription>\n                      {t(\"characters\", { count: field.value.length, max: 50 })}\n                    </FormDescription>\n                    <FormMessage />\n                  </FormItem>\n                )}\n              />\n              \n              <FormField\n                control={form.control}\n                name=\"description\"\n                render={({ field }) => (\n                  <FormItem>\n                    <FormLabel>{t(\"orgDesc\")}</FormLabel>\n                    <FormControl>\n                      <Textarea\n                        placeholder={t(\"orgDescPlaceholder\")}\n                        disabled={isSubmitting}\n                        rows={3}\n                        maxLength={200}\n                        {...field}\n                      />\n                    </FormControl>\n                    <FormDescription>\n                      {t(\"characters\", { count: (field.value || \"\").length, max: 200 })}\n                    </FormDescription>\n                    <FormMessage />\n                  </FormItem>\n                )}\n              />\n\n              <FormField\n                control={form.control}\n                name=\"targets\"\n                render={({ field }) => (\n                  <FormItem>\n                    <FormLabel className=\"flex items-center space-x-2\">\n                      <Target className=\"h-4 w-4\" />\n                      <span>{t(\"addTargets\")}</span>\n                    </FormLabel>\n                    <FormControl>\n                      <div className=\"relative border rounded-md overflow-hidden bg-background\">\n                        <div className=\"flex h-[324px]\">\n                          <div className=\"flex-shrink-0 w-12 bg-muted/30 border-r select-none overflow-hidden\">\n                            <div \n                              ref={lineNumbersRef}\n                              className=\"py-3 px-2 text-right font-mono text-xs text-muted-foreground leading-[1.4] h-full overflow-y-auto scrollbar-hide\"\n                            >\n                              {Array.from({ length: Math.max(field.value?.split('\\n').length || 1, 15) }, (_, i) => (\n                                <div key={i + 1} className=\"h-[20px]\">{i + 1}</div>\n                              ))}\n                            </div>\n                          </div>\n                          <Textarea\n                            {...field}\n                            ref={(e) => { field.ref(e); textareaRef.current = e }}\n                            onScroll={handleTextareaScroll}\n                            placeholder={t(\"targetsPlaceholder\")}\n                            disabled={isSubmitting}\n                            className=\"font-mono h-full overflow-y-auto resize-none border-0 focus-visible:ring-0 focus-visible:ring-offset-0 leading-[1.4] text-sm py-3\"\n                            style={{ lineHeight: '20px' }}\n                          />\n                        </div>\n                      </div>\n                    </FormControl>\n                    <FormDescription>\n                      {t(\"targetCount\", { count: targetValidation.count })}\n                      {targetValidation.invalid.length > 0 && (\n                        <span className=\"text-destructive ml-2\">\n                          | {t(\"invalidCount\", { count: targetValidation.invalid.length })}\n                        </span>\n                      )}\n                    </FormDescription>\n                    {targetValidation.invalid.length > 0 && (\n                      <div className=\"text-xs text-destructive\">\n                        {t(\"invalidExample\", { \n                          line: targetValidation.invalid[0].index + 1, \n                          target: targetValidation.invalid[0].originalTarget, \n                          error: targetValidation.invalid[0].error \n                        })}\n                      </div>\n                    )}\n                    <FormMessage />\n                  </FormItem>\n                )}\n              />\n            </div>\n            \n            <DialogFooter>\n              <Button type=\"button\" variant=\"outline\" onClick={() => handleOpenChange(false)} disabled={isSubmitting}>\n                {t(\"cancel\")}\n              </Button>\n              <Button type=\"submit\" disabled={isSubmitting || !isFormValid}>\n                {isSubmitting ? (\n                  <>\n                    <LoadingSpinner/>\n                    {createOrganization.isPending ? t(\"creating\") : t(\"creatingTargets\")}\n                  </>\n                ) : (\n                  <>\n                    <Plus />\n                    {t(\"create\")}\n                  </>\n                )}\n              </Button>\n            </DialogFooter>\n          </form>\n        </Form>\n      </DialogContent>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "frontend/components/organization/edit-organization-dialog.tsx",
    "content": "\"use client\"\n\nimport React, { useEffect } from \"react\"\nimport { Edit, Building2 } from \"lucide-react\"\nimport { useForm } from \"react-hook-form\"\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport * as z from \"zod\"\nimport { useTranslations } from \"next-intl\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { LoadingSpinner } from \"@/components/loading-spinner\"\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n} from \"@/components/ui/dialog\"\nimport { Input } from \"@/components/ui/input\"\nimport { Textarea } from \"@/components/ui/textarea\"\nimport {\n  Form,\n  FormControl,\n  FormDescription,\n  FormField,\n  FormItem,\n  FormLabel,\n  FormMessage,\n} from \"@/components/ui/form\"\n\nimport { useUpdateOrganization } from \"@/hooks/use-organizations\"\n\nimport type { Organization } from \"@/types/organization.types\"\n\ninterface EditOrganizationDialogProps {\n  organization: Organization\n  open: boolean\n  onOpenChange: (open: boolean) => void\n  onEdit: (organization: Organization) => void\n}\n\nexport function EditOrganizationDialog({ \n  organization, \n  open, \n  onOpenChange, \n  onEdit \n}: EditOrganizationDialogProps) {\n  const t = useTranslations(\"organization.dialog\")\n  const tValidation = useTranslations(\"organization.validation\")\n\n  const formSchema = z.object({\n    name: z.string()\n      .min(2, { message: tValidation(\"nameMin\", { min: 2 }) })\n      .max(50, { message: tValidation(\"nameMax\", { max: 50 }) }),\n    description: z.string().max(200, { message: tValidation(\"descMax\", { max: 200 }) }).optional(),\n  })\n\n  type FormValues = z.infer<typeof formSchema>\n\n  const updateOrganization = useUpdateOrganization()\n\n  const form = useForm<FormValues>({\n    resolver: zodResolver(formSchema),\n    defaultValues: {\n      name: organization?.name || \"\",\n      description: organization?.description || \"\",\n    },\n  })\n\n  useEffect(() => {\n    if (organization) {\n      form.reset({\n        name: organization.name || \"\",\n        description: organization.description || \"\",\n      })\n    }\n  }, [organization, form])\n\n  const hasChanges = form.formState.isDirty\n\n  const onSubmit = (values: FormValues) => {\n    updateOrganization.mutate(\n      {\n        id: Number(organization.id),\n        data: {\n          name: values.name.trim(),\n          description: values.description?.trim() || \"\",\n        }\n      },\n      {\n        onSuccess: (updatedOrganization) => {\n          onEdit(updatedOrganization)\n          onOpenChange(false)\n        }\n      }\n    )\n  }\n\n  const handleOpenChange = (newOpen: boolean) => {\n    if (!updateOrganization.isPending) {\n      onOpenChange(newOpen)\n    }\n  }\n\n  const handleReset = () => {\n    form.reset({\n      name: organization.name || \"\",\n      description: organization.description || \"\",\n    })\n  }\n\n  return (\n    <Dialog open={open} onOpenChange={handleOpenChange}>\n      <DialogContent className=\"sm:max-w-[425px]\">\n        <DialogHeader>\n          <DialogTitle className=\"flex items-center space-x-2\">\n            <Building2 />\n            <span>{t(\"editTitle\")}</span>\n          </DialogTitle>\n          <DialogDescription>{t(\"editDesc\")}</DialogDescription>\n        </DialogHeader>\n        \n        <Form {...form}>\n          <form onSubmit={form.handleSubmit(onSubmit)}>\n            <div className=\"grid gap-4 py-4\">\n              <FormField\n                control={form.control}\n                name=\"name\"\n                render={({ field }) => (\n                  <FormItem>\n                    <FormLabel>\n                      {t(\"orgName\")} <span className=\"text-destructive\">*</span>\n                    </FormLabel>\n                    <FormControl>\n                      <Input\n                        placeholder={t(\"orgNamePlaceholder\")}\n                        disabled={updateOrganization.isPending}\n                        maxLength={50}\n                        {...field}\n                      />\n                    </FormControl>\n                    <FormDescription>\n                      {t(\"characters\", { count: field.value.length, max: 50 })}\n                    </FormDescription>\n                    <FormMessage />\n                  </FormItem>\n                )}\n              />\n              \n              <FormField\n                control={form.control}\n                name=\"description\"\n                render={({ field }) => (\n                  <FormItem>\n                    <FormLabel>{t(\"orgDesc\")}</FormLabel>\n                    <FormControl>\n                      <Textarea\n                        placeholder={t(\"orgDescPlaceholder\")}\n                        disabled={updateOrganization.isPending}\n                        rows={3}\n                        maxLength={200}\n                        {...field}\n                      />\n                    </FormControl>\n                    <FormDescription>\n                      {t(\"characters\", { count: (field.value || \"\").length, max: 200 })}\n                    </FormDescription>\n                    <FormMessage />\n                  </FormItem>\n                )}\n              />\n\n              {hasChanges && (\n                <div className=\"text-xs text-amber-600 bg-amber-50 dark:bg-amber-950/20 p-2 rounded\">\n                  {t(\"changesDetected\")}\n                </div>\n              )}\n            </div>\n            \n            <DialogFooter className=\"gap-2\">\n              <Button \n                type=\"button\" \n                variant=\"outline\" \n                onClick={() => handleOpenChange(false)}\n                disabled={updateOrganization.isPending}\n              >\n                {t(\"cancel\")}\n              </Button>\n              \n              {hasChanges && (\n                <Button \n                  type=\"button\" \n                  variant=\"ghost\" \n                  onClick={handleReset}\n                  disabled={updateOrganization.isPending}\n                >\n                  {t(\"reset\")}\n                </Button>\n              )}\n              \n              <Button \n                type=\"submit\" \n                disabled={updateOrganization.isPending || !form.formState.isValid || !hasChanges}\n              >\n                {updateOrganization.isPending ? (\n                  <>\n                    <LoadingSpinner/>\n                    {t(\"updating\")}\n                  </>\n                ) : (\n                  <>\n                    <Edit/>\n                    {t(\"update\")}\n                  </>\n                )}\n              </Button>\n            </DialogFooter>\n          </form>\n        </Form>\n      </DialogContent>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "frontend/components/organization/index.ts",
    "content": "/**\n * Organization Components - 统一导出\n */\nexport { OrganizationList } from './organization-list'\nexport { OrganizationDataTable } from './organization-data-table'\nexport { createOrganizationColumns } from './organization-columns'\nexport { OrganizationDetailView } from './organization-detail-view'\nexport { AddOrganizationDialog } from './add-organization-dialog'\nexport { EditOrganizationDialog } from './edit-organization-dialog'\n\n"
  },
  {
    "path": "frontend/components/organization/organization-columns.tsx",
    "content": "\"use client\"\n\nimport { ColumnDef } from \"@tanstack/react-table\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport { Button } from \"@/components/ui/button\"\nimport { Badge } from \"@/components/ui/badge\"\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuSeparator,\n  DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\"\nimport { MoreHorizontal, Play, Calendar, Edit, Trash2, Eye } from \"lucide-react\"\nimport { DataTableColumnHeader } from \"@/components/ui/data-table/column-header\"\nimport { ExpandableCell } from \"@/components/ui/data-table/expandable-cell\"\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipProvider,\n  TooltipTrigger,\n} from \"@/components/ui/tooltip\"\nimport Link from \"next/link\"\n\nimport type { Organization } from \"@/types/organization.types\"\n\n// Translation type definitions\nexport interface OrganizationTranslations {\n  columns: {\n    organization: string\n    description: string\n    totalTargets: string\n    added: string\n  }\n  actions: {\n    scheduleScan: string\n    editOrganization: string\n    delete: string\n    openMenu: string\n    selectAll: string\n    selectRow: string\n  }\n  tooltips: {\n    targetSummary: string\n    initiateScan: string\n  }\n}\n\n// Column creation function parameter types\ninterface CreateColumnsProps {\n  formatDate: (dateString: string) => string\n  navigate: (path: string) => void\n  handleEdit: (org: Organization) => void\n  handleDelete: (org: Organization) => void\n  handleInitiateScan: (org: Organization) => void\n  handleScheduleScan: (org: Organization) => void\n  t: OrganizationTranslations\n}\n\n/**\n * Organization row actions component\n */\nfunction OrganizationRowActions({ \n  onScheduleScan,\n  onEdit, \n  onDelete,\n  t,\n}: {\n  onScheduleScan: () => void\n  onEdit: () => void\n  onDelete: () => void\n  t: OrganizationTranslations\n}) {\n  return (\n    <DropdownMenu>\n      <DropdownMenuTrigger asChild>\n        <Button\n          variant=\"ghost\"\n          className=\"flex h-8 w-8 p-0 data-[state=open]:bg-muted\"\n        >\n          <MoreHorizontal />\n          <span className=\"sr-only\">{t.actions.openMenu}</span>\n        </Button>\n      </DropdownMenuTrigger>\n      <DropdownMenuContent align=\"end\">\n        <DropdownMenuItem onClick={onScheduleScan}>\n          <Calendar />\n          {t.actions.scheduleScan}\n        </DropdownMenuItem>\n        <DropdownMenuSeparator />\n        <DropdownMenuItem onClick={onEdit}>\n          <Edit />\n          {t.actions.editOrganization}\n        </DropdownMenuItem>\n        <DropdownMenuItem \n          onClick={onDelete}\n          className=\"text-destructive focus:text-destructive\"\n        >\n          <Trash2 />\n          {t.actions.delete}\n        </DropdownMenuItem>\n      </DropdownMenuContent>\n    </DropdownMenu>\n  )\n}\n\n/**\n * Create organization table column definitions\n */\nexport const createOrganizationColumns = ({\n  formatDate,\n  navigate,\n  handleEdit,\n  handleDelete,\n  handleInitiateScan,\n  handleScheduleScan,\n  t,\n}: CreateColumnsProps): ColumnDef<Organization>[] => [\n  {\n    id: \"select\",\n    size: 40,\n    minSize: 40,\n    maxSize: 40,\n    enableResizing: false,\n    header: ({ table }) => (\n      <Checkbox\n        checked={\n          table.getIsAllPageRowsSelected() ||\n          (table.getIsSomePageRowsSelected() && \"indeterminate\")\n        }\n        onCheckedChange={(value) => table.toggleAllPageRowsSelected(!!value)}\n        aria-label={t.actions.selectAll}\n      />\n    ),\n    cell: ({ row }) => (\n      <Checkbox\n        checked={row.getIsSelected()}\n        onCheckedChange={(value) => row.toggleSelected(!!value)}\n        aria-label={t.actions.selectRow}\n      />\n    ),\n    enableSorting: false,\n    enableHiding: false,\n  },\n  {\n    accessorKey: \"name\",\n    size: 200,\n    minSize: 150,\n    meta: { title: t.columns.organization },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.organization} />\n    ),\n    cell: ({ row }) => {\n      const organization = row.original\n      return (\n        <div className=\"flex-1 min-w-0\">\n          <Link \n            href={`/organization/${organization.id}`}\n            className=\"text-sm font-medium hover:text-primary hover:underline underline-offset-2 transition-colors break-all leading-relaxed whitespace-normal\"\n          >\n            {row.getValue(\"name\")}\n          </Link>\n        </div>\n      )\n    },\n  },\n  {\n    accessorKey: \"description\",\n    size: 300,\n    minSize: 200,\n    meta: { title: t.columns.description },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.description} />\n    ),\n    cell: ({ row }) => (\n      <ExpandableCell value={row.getValue(\"description\")} variant=\"muted\" />\n    ),\n  },\n  {\n    accessorKey: \"targetCount\",\n    size: 120,\n    minSize: 80,\n    meta: { title: t.columns.totalTargets },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.totalTargets} />\n    ),\n    cell: ({ row }) => {\n      const targetCount = row.original.targetCount ?? 0\n      return (\n        <div className=\"text-sm\">\n          <Badge variant=\"secondary\" className=\"text-xs\">\n            {targetCount}\n          </Badge>\n        </div>\n      )\n    },\n  },\n  {\n    accessorKey: \"createdAt\",\n    size: 150,\n    minSize: 120,\n    meta: { title: t.columns.added },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.added} />\n    ),\n    cell: ({ row }) => {\n      const createdAt = row.getValue(\"createdAt\") as string | undefined\n      const isZeroTime = createdAt && (\n        createdAt === \"0001-01-01T00:00:00Z\" ||\n        createdAt.startsWith(\"0001-01-01\")\n      )\n\n      return (\n        <div className=\"text-sm text-muted-foreground\">\n          {createdAt && !isZeroTime ? formatDate(createdAt) : (\n            <span className=\"text-muted-foreground\">-</span>\n          )}\n        </div>\n      )\n    },\n  },\n  {\n    id: \"actions\",\n    size: 120,\n    minSize: 120,\n    maxSize: 120,\n    enableResizing: false,\n    cell: ({ row }) => (\n      <div className=\"flex items-center gap-1\">\n        <TooltipProvider delayDuration={300}>\n          <Tooltip>\n            <TooltipTrigger asChild>\n              <Button\n                variant=\"ghost\"\n                size=\"icon\"\n                className=\"h-8 w-8\"\n                onClick={() => navigate(`/organization/${row.original.id}`)}\n              >\n                <Eye className=\"h-4 w-4\" />\n              </Button>\n            </TooltipTrigger>\n            <TooltipContent side=\"top\">\n              <p className=\"text-xs\">{t.tooltips.targetSummary}</p>\n            </TooltipContent>\n          </Tooltip>\n        </TooltipProvider>\n\n        <TooltipProvider delayDuration={300}>\n          <Tooltip>\n            <TooltipTrigger asChild>\n              <Button\n                variant=\"ghost\"\n                size=\"icon\"\n                className=\"h-8 w-8\"\n                onClick={() => handleInitiateScan(row.original)}\n              >\n                <Play className=\"h-4 w-4\" />\n              </Button>\n            </TooltipTrigger>\n            <TooltipContent side=\"top\">\n              <p className=\"text-xs\">{t.tooltips.initiateScan}</p>\n            </TooltipContent>\n          </Tooltip>\n        </TooltipProvider>\n\n        <OrganizationRowActions\n          onScheduleScan={() => handleScheduleScan(row.original)}\n          onEdit={() => handleEdit(row.original)}\n          onDelete={() => handleDelete(row.original)}\n          t={t}\n        />\n      </div>\n    ),\n    enableSorting: false,\n    enableHiding: false,\n  },\n]\n"
  },
  {
    "path": "frontend/components/organization/organization-data-table.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { useTranslations } from \"next-intl\"\nimport { IconSearch, IconLoader2 } from \"@tabler/icons-react\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { UnifiedDataTable } from \"@/components/ui/data-table\"\nimport type { OrganizationDataTableProps } from \"@/types/organization.types\"\n\nexport function OrganizationDataTable({\n  data,\n  columns,\n  onAddNew,\n  onBulkDelete,\n  onSelectionChange,\n  searchPlaceholder,\n  searchColumn = \"name\",\n  searchValue,\n  onSearch,\n  isSearching,\n  pagination: externalPagination,\n  paginationInfo,\n  onPaginationChange,\n}: OrganizationDataTableProps) {\n  const t = useTranslations(\"organization\")\n  const tActions = useTranslations(\"common.actions\")\n  // 本地搜索输入状态（只在回车或点击按钮时触发搜索）\n  const [localSearchValue, setLocalSearchValue] = React.useState(searchValue ?? \"\")\n  \n  React.useEffect(() => {\n    setLocalSearchValue(searchValue ?? \"\")\n  }, [searchValue])\n\n  const handleSearchSubmit = () => {\n    if (onSearch) {\n      onSearch(localSearchValue)\n    }\n  }\n\n  const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n    if (e.key === 'Enter') {\n      handleSearchSubmit()\n    }\n  }\n\n  // 默认排序\n  const defaultSorting = [{ id: \"createdAt\", desc: true }]\n\n  return (\n    <UnifiedDataTable\n      data={data}\n      columns={columns}\n      getRowId={(row) => String(row.id)}\n      // 分页\n      pagination={externalPagination}\n      paginationInfo={paginationInfo}\n      onPaginationChange={onPaginationChange}\n      // 选择\n      onSelectionChange={onSelectionChange}\n      // 批量操作\n      onBulkDelete={onBulkDelete}\n      bulkDeleteLabel={tActions(\"delete\")}\n      onAddNew={onAddNew}\n      addButtonLabel={t(\"addOrganization\")}\n      // 排序\n      defaultSorting={defaultSorting}\n      // 空状态\n      emptyMessage={t(\"noResults\")}\n      // 自定义搜索框\n      toolbarLeft={\n        <div className=\"flex items-center space-x-2\">\n          <Input\n            placeholder={searchPlaceholder ?? t(\"searchPlaceholder\")}\n            value={localSearchValue}\n            onChange={(e) => setLocalSearchValue(e.target.value)}\n            onKeyDown={handleKeyDown}\n            className=\"h-8 max-w-sm\"\n          />\n          <Button variant=\"outline\" size=\"sm\" onClick={handleSearchSubmit} disabled={isSearching}>\n            {isSearching ? (\n              <IconLoader2 className=\"h-4 w-4 animate-spin\" />\n            ) : (\n              <IconSearch className=\"h-4 w-4\" />\n            )}\n          </Button>\n        </div>\n      }\n    />\n  )\n}\n"
  },
  {
    "path": "frontend/components/organization/organization-detail-view.tsx",
    "content": "\"use client\"\n\nimport React, { useState, useMemo } from \"react\"\nimport { useRouter } from \"next/navigation\"\nimport { Building2, AlertTriangle } from \"lucide-react\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport { TargetsDataTable } from \"./targets/targets-data-table\"\nimport { createTargetColumns } from \"./targets/targets-columns\"\nimport { AddTargetDialog } from \"./targets/add-target-dialog\"\nimport { LoadingSpinner } from \"@/components/loading-spinner\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Skeleton } from \"@/components/ui/skeleton\"\nimport { getDateLocale } from \"@/lib/date-utils\"\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\"\nimport { useOrganization, useOrganizationTargets, useUnlinkTargetsFromOrganization } from \"@/hooks/use-organizations\"\nimport type { Target } from \"@/types/target.types\"\nimport { toast } from \"sonner\"\n\n/**\n * Organization detail view component\n * Displays organization statistics and target list\n */\nexport function OrganizationDetailView({\n  organizationId\n}: {\n  organizationId: string\n}) {\n  const [selectedTargets, setSelectedTargets] = useState<Target[]>([])\n  const [isAddDialogOpen, setIsAddDialogOpen] = useState(false)\n  const [deleteDialogOpen, setDeleteDialogOpen] = useState(false)\n  const [targetToDelete, setTargetToDelete] = useState<Target | null>(null)\n  const [bulkDeleteDialogOpen, setBulkDeleteDialogOpen] = useState(false)\n\n  // Internationalization\n  const tColumns = useTranslations(\"columns\")\n  const tCommon = useTranslations(\"common\")\n  const tTooltips = useTranslations(\"tooltips\")\n  const tTarget = useTranslations(\"target\")\n  const tConfirm = useTranslations(\"common.confirm\")\n  const tOrg = useTranslations(\"organization\")\n  const locale = useLocale()\n\n  // Build translation object\n  const translations = useMemo(() => ({\n    columns: {\n      targetName: tColumns(\"target.target\"),\n      type: tColumns(\"common.type\"),\n    },\n    actions: {\n      selectAll: tCommon(\"actions.selectAll\"),\n      selectRow: tCommon(\"actions.selectRow\"),\n    },\n    tooltips: {\n      viewDetails: tTooltips(\"viewDetails\"),\n      unlinkTarget: tTooltips(\"unlinkTarget\"),\n      clickToCopy: tTooltips(\"clickToCopy\"),\n      copied: tTooltips(\"copied\"),\n    },\n    types: {\n      domain: tTarget(\"types.domain\"),\n      ip: tTarget(\"types.ip\"),\n      cidr: tTarget(\"types.cidr\"),\n    },\n  }), [tColumns, tCommon, tTooltips, tTarget])\n\n  // Pagination state\n  const [pagination, setPagination] = useState({\n    pageIndex: 0,\n    pageSize: 10,\n  })\n\n  // Search state\n  const [searchQuery, setSearchQuery] = useState(\"\")\n  const [isSearching, setIsSearching] = useState(false)\n\n  const handleSearchChange = (value: string) => {\n    setIsSearching(true)\n    setSearchQuery(value)\n    setPagination((prev) => ({ ...prev, pageIndex: 0 }))\n  }\n\n  // Use unlink targets mutation\n  const unlinkTargets = useUnlinkTargetsFromOrganization()\n\n  // Use React Query to get organization basic info\n  const {\n    data: organization,\n    isLoading: isLoadingOrg,\n    error: orgError,\n  } = useOrganization(parseInt(organizationId))\n\n  // Use React Query to get organization's target list\n  const {\n    data: targetsData,\n    isLoading: isLoadingTargets,\n    isFetching: isFetchingTargets,\n    error: targetsError,\n    refetch\n  } = useOrganizationTargets(\n    parseInt(organizationId),\n    {\n      page: pagination.pageIndex + 1,\n      pageSize: pagination.pageSize,\n      search: searchQuery || undefined,\n    }\n  )\n\n  // Reset search state when request completes\n  React.useEffect(() => {\n    if (!isFetchingTargets && isSearching) {\n      setIsSearching(false)\n    }\n  }, [isFetchingTargets, isSearching])\n\n  const isLoading = isLoadingOrg || isLoadingTargets\n  const error = orgError || targetsError\n\n  // Helper function - format date\n  const formatDate = (dateString: string): string => {\n    return new Date(dateString).toLocaleString(getDateLocale(locale), {\n      year: \"numeric\",\n      month: \"numeric\",\n      day: \"numeric\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\",\n      hour12: false,\n    })\n  }\n\n  // Navigation function\n  const router = useRouter()\n  const navigate = (path: string) => {\n    router.push(path)\n  }\n\n  // Handle unlink target\n  const handleDeleteTarget = (target: Target) => {\n    setTargetToDelete(target)\n    setDeleteDialogOpen(true)\n  }\n\n  // Confirm unlink target\n  const confirmDelete = async () => {\n    if (!targetToDelete) return\n\n    setDeleteDialogOpen(false)\n    const targetId = targetToDelete.id\n    setTargetToDelete(null)\n\n    // Call unlink API\n    unlinkTargets.mutate({\n      organizationId: parseInt(organizationId),\n      targetIds: [targetId]\n    })\n  }\n\n  // Handle bulk unlink\n  const handleBulkDelete = () => {\n    if (selectedTargets.length === 0) {\n      return\n    }\n    setBulkDeleteDialogOpen(true)\n  }\n\n  // Confirm bulk unlink\n  const confirmBulkDelete = async () => {\n    if (selectedTargets.length === 0) return\n\n    const targetIds = selectedTargets.map(target => target.id)\n\n    setBulkDeleteDialogOpen(false)\n    setSelectedTargets([])\n\n    // Call bulk unlink API\n    unlinkTargets.mutate({\n      organizationId: parseInt(organizationId),\n      targetIds\n    })\n  }\n\n  // Handle add target\n  const handleAddTarget = () => {\n    setIsAddDialogOpen(true)\n  }\n\n  // Handle add success\n  const handleAddSuccess = () => {\n    setIsAddDialogOpen(false)\n    refetch()\n  }\n\n  // Handle pagination change\n  const handlePaginationChange = (newPagination: { pageIndex: number; pageSize: number }) => {\n    setPagination(newPagination)\n    setSelectedTargets([])\n  }\n\n  // Create column definitions\n  const targetColumns = useMemo(\n    () =>\n      createTargetColumns({\n        formatDate,\n        navigate,\n        handleDelete: handleDeleteTarget,\n        t: translations,\n      }),\n    [formatDate, navigate, handleDeleteTarget, translations]\n  )\n\n  // Error state\n  if (error) {\n    return (\n      <div className=\"flex flex-col items-center justify-center py-12\">\n        <div className=\"rounded-full bg-destructive/10 p-3 mb-4\">\n          <AlertTriangle className=\"h-10 w-10 text-destructive\" />\n        </div>\n        <h3 className=\"text-lg font-semibold mb-2\">{tCommon(\"status.loadFailed\")}</h3>\n        <p className=\"text-muted-foreground text-center mb-4\">\n          {error.message || tCommon(\"status.loadError\")}\n        </p>\n        <button\n          onClick={() => refetch()}\n          className=\"px-4 py-2 bg-primary text-primary-foreground rounded-md hover:bg-primary/90\"\n        >\n          {tCommon(\"actions.reload\")}\n        </button>\n      </div>\n    )\n  }\n\n  // Loading state\n  if (isLoading) {\n    return (\n      <div className=\"flex flex-col gap-4 px-4 lg:px-6\">\n        {/* Page header skeleton */}\n        <div className=\"space-y-2\">\n          <div className=\"flex items-center gap-2\">\n            <Skeleton className=\"h-8 w-8 rounded-md\" />\n            <Skeleton className=\"h-8 w-64\" />\n          </div>\n          <Skeleton className=\"h-4 w-96\" />\n        </div>\n\n        {/* Table skeleton */}\n        <Skeleton className=\"h-96 w-full\" />\n      </div>\n    )\n  }\n\n  if (!organization) {\n    return (\n      <div className=\"flex flex-col items-center justify-center py-12\">\n        <Building2 className=\"mx-auto text-muted-foreground mb-4 h-12 w-12\" />\n        <h3 className=\"text-lg font-semibold mb-2\">{tOrg(\"notFound\")}</h3>\n        <p className=\"text-muted-foreground\">{tOrg(\"notFoundDesc\", { id: organizationId })}</p>\n      </div>\n    )\n  }\n\n  // Calculate statistics\n  const stats = {\n    totalTargets: targetsData?.total || 0,\n  }\n\n  return (\n    <>\n      {/* Page header - simplified version */}\n      <div className=\"px-4 lg:px-6\">\n        <div className=\"flex items-start justify-between\">\n          <div className=\"space-y-1\">\n            <h2 className=\"text-2xl font-bold tracking-tight flex items-center gap-2\">\n              <Building2 className=\"h-6 w-6\" />\n              {organization.name}\n            </h2>\n            <p className=\"text-muted-foreground\">\n              {organization.description || tOrg(\"noDescription\")}\n            </p>\n            <div className=\"flex items-center gap-4 text-sm text-muted-foreground pt-1\">\n              <span>{tOrg(\"createdAt\", { date: formatDate(organization.createdAt) })}</span>\n              <span>·</span>\n              <span>{tOrg(\"targetCountLabel\", { count: stats.totalTargets })}</span>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      {/* Target list */}\n      <div className=\"px-4 lg:px-6\">\n        <TargetsDataTable\n          data={targetsData?.results || []}\n          columns={targetColumns}\n          onAddNew={handleAddTarget}\n          onBulkDelete={handleBulkDelete}\n          onSelectionChange={setSelectedTargets}\n          searchPlaceholder={tColumns(\"target.target\")}\n          searchValue={searchQuery}\n          onSearch={handleSearchChange}\n          isSearching={isSearching}\n          addButtonText={tCommon(\"actions.add\")}\n          pagination={pagination}\n          setPagination={setPagination}\n          paginationInfo={targetsData ? {\n            total: targetsData.total,\n            page: targetsData.page,\n            pageSize: targetsData.pageSize,\n            totalPages: targetsData.totalPages,\n          } : undefined}\n          onPaginationChange={handlePaginationChange}\n        />\n      </div>\n\n      {/* Add target dialog */}\n      <AddTargetDialog\n        organizationId={parseInt(organizationId)}\n        organizationName={organization.name}\n        onAdd={handleAddSuccess}\n        open={isAddDialogOpen}\n        onOpenChange={setIsAddDialogOpen}\n      />\n\n      {/* Unlink confirmation dialog */}\n      <AlertDialog open={deleteDialogOpen} onOpenChange={setDeleteDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{tConfirm(\"unlinkTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {tConfirm(\"unlinkTargetMessage\", { name: targetToDelete?.name ?? \"\" })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"actions.cancel\")}</AlertDialogCancel>\n            <AlertDialogAction\n              onClick={confirmDelete}\n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n            >\n              {tConfirm(\"confirmUnlink\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n\n      {/* Bulk unlink confirmation dialog */}\n      <AlertDialog open={bulkDeleteDialogOpen} onOpenChange={setBulkDeleteDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{tConfirm(\"bulkUnlinkTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {tConfirm(\"bulkUnlinkTargetMessage\", { count: selectedTargets.length })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <div className=\"mt-2 p-2 bg-muted rounded-md max-h-96 overflow-y-auto\">\n            <ul className=\"text-sm space-y-1\">\n              {selectedTargets.map((target) => (\n                <li key={target.id} className=\"flex items-center\">\n                  <span className=\"font-medium\">{target.name}</span>\n                  {target.description && (\n                    <span className=\"text-muted-foreground ml-2\">- {target.description}</span>\n                  )}\n                </li>\n              ))}\n            </ul>\n          </div>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"actions.cancel\")}</AlertDialogCancel>\n            <AlertDialogAction\n              onClick={confirmBulkDelete}\n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n            >\n              {tConfirm(\"confirmUnlinkCount\", { count: selectedTargets.length })}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n    </>\n  )\n}\n"
  },
  {
    "path": "frontend/components/organization/organization-list.tsx",
    "content": "\"use client\"\n\nimport React, { useState, useMemo, useCallback, useEffect } from \"react\"\nimport { useRouter } from \"next/navigation\"\nimport { Trash2, Plus, Building2 } from \"lucide-react\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport { getDateLocale } from \"@/lib/date-utils\"\n\n// 导入 UI 组件\nimport { Button } from \"@/components/ui/button\"\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\"\nimport { LoadingSpinner } from \"@/components/loading-spinner\"\nimport { DataTableSkeleton } from \"@/components/ui/data-table-skeleton\"\n\n// 导入数据表格组件\nimport { OrganizationDataTable } from \"./organization-data-table\"\nimport { createOrganizationColumns } from \"./organization-columns\"\n\n// 导入业务组件\nimport { AddOrganizationDialog } from \"./add-organization-dialog\"\nimport { EditOrganizationDialog } from \"./edit-organization-dialog\"\nimport { InitiateScanDialog } from \"@/components/scan/initiate-scan-dialog\"\nimport { CreateScheduledScanDialog } from \"@/components/scan/scheduled/create-scheduled-scan-dialog\"\n\n// 导入 React Query Hooks\nimport {\n  useOrganizations,\n  useDeleteOrganization,\n  useBatchDeleteOrganizations,\n  useUpdateOrganization,\n} from \"@/hooks/use-organizations\"\n\n// 导入类型定义\nimport type { Organization } from \"@/types/organization.types\"\n\n/**\n * 组织列表组件（使用 React Query）\n * \n * 功能特性：\n * 1. 统一的 Loading 状态管理\n * 2. 自动缓存和重新验证\n * 3. 乐观更新\n * 4. 自动错误处理\n * 5. 更好的用户体验\n */\nexport function OrganizationList() {\n  // 国际化\n  const tColumns = useTranslations(\"columns\")\n  const tCommon = useTranslations(\"common\")\n  const tTooltips = useTranslations(\"tooltips\")\n  const tConfirm = useTranslations(\"common.confirm\")\n  const locale = useLocale()\n  \n  // 构建翻译对象\n  const translations = useMemo(() => ({\n    columns: {\n      organization: tColumns(\"organization.organization\"),\n      description: tColumns(\"common.description\"),\n      totalTargets: tColumns(\"organization.totalTargets\"),\n      added: tColumns(\"organization.added\"),\n    },\n    actions: {\n      scheduleScan: tTooltips(\"scheduleScan\"),\n      editOrganization: tCommon(\"actions.edit\"),\n      delete: tCommon(\"actions.delete\"),\n      openMenu: tCommon(\"actions.openMenu\"),\n      selectAll: tCommon(\"actions.selectAll\"),\n      selectRow: tCommon(\"actions.selectRow\"),\n    },\n    tooltips: {\n      targetSummary: tTooltips(\"targetSummary\"),\n      initiateScan: tTooltips(\"initiateScan\"),\n    },\n  }), [tColumns, tCommon, tTooltips])\n\n  // 状态管理\n  const [deleteDialogOpen, setDeleteDialogOpen] = useState(false)\n  const [editDialogOpen, setEditDialogOpen] = useState(false)\n  const [addDialogOpen, setAddDialogOpen] = useState(false)\n  const [initiateScanDialogOpen, setInitiateScanDialogOpen] = useState(false)\n  const [scheduleScanDialogOpen, setScheduleScanDialogOpen] = useState(false)\n  const [organizationToDelete, setOrganizationToDelete] = useState<Organization | null>(null)\n  const [organizationToEdit, setOrganizationToEdit] = useState<Organization | null>(null)\n  const [organizationToScan, setOrganizationToScan] = useState<Organization | null>(null)\n  const [organizationToSchedule, setOrganizationToSchedule] = useState<Organization | null>(null)\n  const [selectedOrganizations, setSelectedOrganizations] = useState<Organization[]>([])\n  const [bulkDeleteDialogOpen, setBulkDeleteDialogOpen] = useState(false)\n  \n  // 分页状态\n  const [pagination, setPagination] = useState({\n    pageIndex: 0,  // 0-based for react-table\n    pageSize: 10,\n  })\n\n  const [searchQuery, setSearchQuery] = useState(\"\")\n  const [isSearching, setIsSearching] = useState(false)\n\n  const handleSearchChange = (value: string) => {\n    setIsSearching(true)\n    setSearchQuery(value)\n    setPagination((prev) => ({ ...prev, pageIndex: 0 }))\n  }\n\n  // 使用 React Query 获取组织数据\n  const {\n    data,\n    isLoading,\n    isFetching,\n    error,\n    refetch\n  } = useOrganizations({\n    page: pagination.pageIndex + 1, // 转换为 1-based\n    pageSize: pagination.pageSize,\n    search: searchQuery || undefined,\n  }, { enabled: true })\n\n  useEffect(() => {\n    if (!isFetching && isSearching) {\n      setIsSearching(false)\n    }\n  }, [isFetching, isSearching])\n\n  // Mutations\n  const deleteOrganization = useDeleteOrganization()\n  const batchDeleteOrganizations = useBatchDeleteOrganizations()\n  const updateOrganization = useUpdateOrganization()\n\n  // 辅助函数 - 格式化日期\n  const formatDate = useCallback((dateString: string): string => {\n    return new Date(dateString).toLocaleString(getDateLocale(locale), {\n      year: \"numeric\",\n      month: \"numeric\", \n      day: \"numeric\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\",\n      hour12: false,\n    })\n  }, [locale])\n\n  // 处理删除操作\n  const handleDelete = useCallback((org: Organization) => {\n    setOrganizationToDelete(org)\n    setDeleteDialogOpen(true)\n  }, [])\n\n  // 处理编辑操作\n  const handleEdit = useCallback((org: Organization) => {\n    setOrganizationToEdit(org)\n    setEditDialogOpen(true)\n  }, [])\n\n  // 处理发起扫描操作\n  const handleInitiateScan = useCallback((org: Organization) => {\n    setOrganizationToScan(org)\n    setInitiateScanDialogOpen(true)\n  }, [])\n\n  // 处理计划扫描操作\n  const handleScheduleScan = useCallback((org: Organization) => {\n    setOrganizationToSchedule(org)\n    setScheduleScanDialogOpen(true)\n  }, [])\n\n  // 导航到详情页面（使用 Next.js 客户端路由）\n  const router = useRouter()\n  const navigate = useCallback((path: string) => {\n    router.push(path)\n  }, [router])\n\n  // 创建列定义\n  const columns = useMemo(() =>\n    createOrganizationColumns({ \n      formatDate, \n      navigate, \n      handleEdit, \n      handleDelete,\n      handleInitiateScan,\n      handleScheduleScan,\n      t: translations,\n    }),\n    [formatDate, navigate, handleEdit, handleDelete, handleInitiateScan, handleScheduleScan, translations]\n  )\n\n  // 确认删除组织\n  const confirmDelete = async () => {\n    if (!organizationToDelete) return\n\n    setDeleteDialogOpen(false)\n    setOrganizationToDelete(null)\n    \n    // 使用 React Query 的删除 mutation（自动乐观更新）\n    deleteOrganization.mutate(Number(organizationToDelete.id))\n  }\n\n  // 编辑组织成功回调\n  const handleOrganizationEdited = (updatedOrganization: Organization) => {\n    // 只需要关闭对话框，React Query 已经在 dialog 中处理了更新\n    setEditDialogOpen(false)\n    setOrganizationToEdit(null)\n  }\n\n  // 批量删除处理函数\n  const handleBulkDelete = () => {\n    if (selectedOrganizations.length === 0) {\n      return\n    }\n    setBulkDeleteDialogOpen(true)\n  }\n\n  // 确认批量删除\n  const confirmBulkDelete = async () => {\n    if (selectedOrganizations.length === 0) return\n\n    const deletedIds = selectedOrganizations.map(org => Number(org.id))\n    \n    setBulkDeleteDialogOpen(false)\n    setSelectedOrganizations([])\n    \n    // 使用 React Query 的批量删除 mutation（自动乐观更新）\n    batchDeleteOrganizations.mutate(deletedIds)\n  }\n\n  // 处理分页变化\n  const handlePaginationChange = (newPagination: { pageIndex: number; pageSize: number }) => {\n    setPagination(newPagination)\n  }\n\n  // 错误状态\n  if (error) {\n    return (\n      <div className=\"flex flex-col items-center justify-center py-12\">\n        <div className=\"rounded-full bg-destructive/10 p-3 mb-4\">\n          <Trash2 className=\"text-destructive\" />\n        </div>\n        <h3 className=\"text-lg font-semibold mb-2\">{tCommon(\"status.error\")}</h3>\n        <p className=\"text-muted-foreground text-center mb-4\">\n          {error.message}\n        </p>\n        <Button variant=\"outline\" onClick={() => refetch()}>\n          {tCommon(\"actions.retry\")}\n        </Button>\n      </div>\n    )\n  }\n\n  // 加载状态\n  if (isLoading) {\n    return <OrganizationListSkeleton />\n  }\n\n  // 数据为空检查\n  if (!data) {\n    return <OrganizationListSkeleton />\n  }\n\n  return (\n    <div className=\"space-y-4\">\n      {/* 主要内容 */}\n      <OrganizationDataTable\n        data={data.organizations}\n        columns={columns}\n        onAddNew={() => setAddDialogOpen(true)}\n        onBulkDelete={handleBulkDelete}\n        onSelectionChange={setSelectedOrganizations}\n        searchPlaceholder={tColumns(\"organization.organization\")}\n        searchColumn=\"name\"\n        searchValue={searchQuery}\n        onSearch={handleSearchChange}\n        isSearching={isSearching}\n        pagination={pagination}\n        setPagination={setPagination}\n        paginationInfo={data.pagination}\n        onPaginationChange={handlePaginationChange}\n      />\n\n      {/* 删除确认对话框 */}\n      <AlertDialog open={deleteDialogOpen} onOpenChange={setDeleteDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{tConfirm(\"deleteTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {tConfirm(\"deleteOrgMessage\", { name: organizationToDelete?.name ?? \"\" })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"actions.cancel\")}</AlertDialogCancel>\n            <AlertDialogAction \n              onClick={confirmDelete} \n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n              disabled={deleteOrganization.isPending}\n            >\n              {deleteOrganization.isPending ? (\n                <>\n                  <LoadingSpinner/>\n                  {tConfirm(\"deleting\")}\n                </>\n              ) : (\n                tCommon(\"actions.delete\")\n              )}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n\n      {/* 编辑组织对话框 */}\n      {organizationToEdit && (\n        <EditOrganizationDialog\n          organization={organizationToEdit}\n          open={editDialogOpen}\n          onOpenChange={setEditDialogOpen}\n          onEdit={handleOrganizationEdited}\n        />\n      )}\n\n      {/* 批量删除确认对话框 */}\n      <AlertDialog open={bulkDeleteDialogOpen} onOpenChange={setBulkDeleteDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{tConfirm(\"bulkDeleteTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {tConfirm(\"bulkDeleteOrgMessage\", { count: selectedOrganizations.length })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          {/* 组织列表容器 - 固定最大高度并支持滚动 */}\n          <div className=\"mt-2 p-2 bg-muted rounded-md max-h-96 overflow-y-auto\">\n            <ul className=\"text-sm space-y-1\">\n              {selectedOrganizations.map((org) => (\n                <li key={org.id} className=\"flex items-center\">\n                  <span className=\"font-medium\">{org.name}</span>\n                  {org.description && (\n                    <span className=\"ml-2 text-muted-foreground\">- {org.description}</span>\n                  )}\n                </li>\n              ))}\n            </ul>\n          </div>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"actions.cancel\")}</AlertDialogCancel>\n            <AlertDialogAction \n              onClick={confirmBulkDelete} \n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n              disabled={batchDeleteOrganizations.isPending}\n            >\n              {batchDeleteOrganizations.isPending ? (\n                <>\n                  <LoadingSpinner/>\n                  {tConfirm(\"deleting\")}\n                </>\n              ) : (\n                tConfirm(\"deleteOrgCount\", { count: selectedOrganizations.length })\n              )}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n\n      {/* 添加组织对话框 */}\n      <AddOrganizationDialog \n        open={addDialogOpen}\n        onOpenChange={setAddDialogOpen}\n        onAdd={() => {\n          // React Query 会自动刷新数据，不需要手动处理\n          setAddDialogOpen(false)\n        }} \n      />\n\n      {/* 发起扫描对话框 */}\n      <InitiateScanDialog\n        organization={organizationToScan}\n        organizationId={organizationToScan?.id}\n        open={initiateScanDialogOpen}\n        onOpenChange={setInitiateScanDialogOpen}\n        onSuccess={() => {\n          setOrganizationToScan(null)\n        }}\n      />\n\n      {/* 定时扫描对话框 */}\n      <CreateScheduledScanDialog\n        open={scheduleScanDialogOpen}\n        onOpenChange={setScheduleScanDialogOpen}\n        presetOrganizationId={organizationToSchedule?.id}\n        presetOrganizationName={organizationToSchedule?.name}\n        onSuccess={() => {\n          setOrganizationToSchedule(null)\n        }}\n      />\n    </div>\n  )\n}\n\nfunction OrganizationListSkeleton() {\n  return (\n    <DataTableSkeleton toolbarButtonCount={2} rows={6} columns={4} />\n  )\n}\n"
  },
  {
    "path": "frontend/components/organization/targets/add-target-dialog.tsx",
    "content": "\"use client\"\n\nexport { LinkTargetDialog as AddTargetDialog } from \"./link-target-dialog\"\n\n"
  },
  {
    "path": "frontend/components/organization/targets/index.ts",
    "content": "/**\n * Organization Targets Components - 统一导出\n */\nexport { TargetsDataTable } from './targets-data-table'\nexport { createTargetColumns } from './targets-columns'\nexport { TargetsDetailView } from './targets-detail-view'\nexport { AddTargetDialog } from './add-target-dialog'\nexport { LinkTargetDialog } from './link-target-dialog'\n\n"
  },
  {
    "path": "frontend/components/organization/targets/link-target-dialog.tsx",
    "content": "\"use client\"\n\nimport React, { useState, useRef, useMemo } from \"react\"\nimport { Plus, Target, Building2, Loader2 } from \"lucide-react\"\nimport { useForm } from \"react-hook-form\"\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport * as z from \"zod\"\nimport { useTranslations } from \"next-intl\"\n\n// 导入 UI 组件\nimport { Button } from \"@/components/ui/button\"\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from \"@/components/ui/dialog\"\nimport { Label } from \"@/components/ui/label\"\nimport { Textarea } from \"@/components/ui/textarea\"\nimport { LoadingSpinner } from \"@/components/loading-spinner\"\nimport { TargetValidator } from \"@/lib/target-validator\"\nimport {\n  Form,\n  FormControl,\n  FormDescription,\n  FormField,\n  FormItem,\n  FormLabel,\n  FormMessage,\n} from \"@/components/ui/form\"\n\n// 导入 React Query Hooks\nimport { useBatchCreateTargets } from \"@/hooks/use-targets\"\n\n// 导入类型定义\nimport type { BatchCreateResponse } from \"@/types/api-response.types\"\n\n// 组件属性类型定义\ninterface LinkTargetDialogProps {\n  organizationId: number                                     // 组织ID（固定，不可修改）\n  organizationName: string                                   // 组织名称\n  onAdd?: (result: BatchCreateResponse) => void              // 添加成功回调，返回批量创建的统计信息\n  open?: boolean                                             // 外部控制对话框开关状态\n  onOpenChange?: (open: boolean) => void                     // 外部控制对话框开关回调\n}\n\n/**\n * 关联目标对话框组件（使用 React Query）\n * \n * 功能特性：\n * 1. 批量输入目标并关联到组织\n * 2. 自动创建不存在的目标\n * 3. 自动管理提交状态\n * 4. 自动错误处理和成功提示\n * 5. 固定组织ID，不可修改\n */\nexport function LinkTargetDialog({ \n  organizationId,\n  organizationName,\n  onAdd,\n  open: externalOpen, \n  onOpenChange: externalOnOpenChange,\n}: LinkTargetDialogProps) {\n  const t = useTranslations(\"organization.linkTarget\")\n  const tCommon = useTranslations(\"common\")\n  const tTarget = useTranslations(\"target\")\n\n  // 表单验证 Schema - 使用翻译\n  const formSchema = useMemo(() => z.object({\n    targets: z.string()\n      .min(1, { message: t(\"validation.required\") })\n      .refine(\n        (val) => {\n          const lines = val.split('\\n').map(l => l.trim()).filter(l => l.length > 0)\n          return lines.length > 0\n        },\n        { message: t(\"validation.required\") }\n      ),\n  }), [t])\n\n  // 对话框开关状态 - 支持外部控制\n  const [internalOpen, setInternalOpen] = useState(false)\n  const open = externalOpen !== undefined ? externalOpen : internalOpen\n  const setOpen = externalOnOpenChange || setInternalOpen\n  \n  // 行号列和输入框的 ref（用于同步滚动）\n  const lineNumbersRef = useRef<HTMLDivElement | null>(null)\n  const textareaRef = useRef<HTMLTextAreaElement | null>(null)\n  \n  // 使用 React Query 的批量创建目标 mutation\n  const batchCreateTargets = useBatchCreateTargets()\n  \n  type FormValues = z.infer<typeof formSchema>\n  \n  // 初始化表单\n  const form = useForm<FormValues>({\n    resolver: zodResolver(formSchema),\n    defaultValues: {\n      targets: \"\",\n    },\n  })\n  \n  // 监听表单值变化\n  const targetsText = form.watch(\"targets\")\n\n  // 实时验证目标\n  const targetValidation = useMemo(() => {\n    const lines = targetsText\n      .split(\"\\n\")\n      .map((s) => s.trim())\n      .filter((s) => s.length > 0)\n\n    if (lines.length === 0) {\n      return {\n        count: 0,\n        invalid: []\n      }\n    }\n\n    const results = TargetValidator.validateTargetBatch(lines)\n    const invalid = results\n      .filter((r) => !r.isValid)\n      .map((r) => ({ index: r.index, originalTarget: r.originalTarget, error: r.error || t(\"validation.invalidFormat\"), type: r.type }))\n    \n    return {\n      count: lines.length,\n      invalid\n    }\n  }, [targetsText])\n\n\n  // 处理表单提交\n  const onSubmit = (values: FormValues) => {\n    // 检查是否有无效目标\n    if (targetValidation.invalid.length > 0) {\n      return\n    }\n\n    // 解析目标列表（每行一个目标）\n    const targetList = values.targets\n      .split(\"\\n\")\n      .map(line => line.trim())\n      .filter(line => line.length > 0)\n      .map(name => ({\n        name,\n      }))\n\n    if (targetList.length === 0) {\n      return\n    }\n\n    // 使用 React Query mutation\n    batchCreateTargets.mutate(\n      {\n        targets: targetList,\n        organizationId: organizationId,\n      },\n      {\n        onSuccess: (batchCreateResult) => {\n          // 重置表单\n          form.reset()\n          \n          // 关闭对话框\n          setOpen(false)\n          \n          // 调用外部回调（如果提供）\n          if (onAdd) {\n            // 将批量创建结果适配为通用的 BatchCreateResponse 结构\n            const adaptedResult: BatchCreateResponse = {\n              message: batchCreateResult.message,\n              requestedCount:\n                batchCreateResult.createdCount +\n                batchCreateResult.reusedCount +\n                batchCreateResult.failedCount,\n              createdCount: batchCreateResult.createdCount,\n              existedCount: batchCreateResult.reusedCount,\n              skippedCount: 0,\n              skippedDomains: batchCreateResult.failedTargets.map((item) => ({\n                name: item.name,\n                reason: item.reason,\n              })),\n            }\n\n            onAdd(adaptedResult)\n          }\n        }\n      }\n    )\n  }\n\n  // 处理对话框关闭\n  const handleOpenChange = (newOpen: boolean) => {\n    if (!batchCreateTargets.isPending) {\n      setOpen(newOpen)\n      if (!newOpen) {\n        // 关闭时重置表单\n        form.reset()\n      }\n    }\n  }\n\n  // 表单验证\n  const isFormValid = form.formState.isValid && targetValidation.invalid.length === 0\n  \n  // 同步输入框和行号列的滚动\n  const handleTextareaScroll = (e: React.UIEvent<HTMLTextAreaElement>) => {\n    if (lineNumbersRef.current) {\n      lineNumbersRef.current.scrollTop = e.currentTarget.scrollTop\n    }\n  }\n\n  return (\n    <Dialog open={open} onOpenChange={handleOpenChange}>\n      {/* 触发按钮 - 仅在非外部控制时显示 */}\n      {externalOpen === undefined && (\n        <DialogTrigger asChild>\n          <Button size=\"sm\" variant=\"secondary\">\n            <Plus />\n            {tTarget(\"addTarget\")}\n          </Button>\n        </DialogTrigger>\n      )}\n      \n      {/* 对话框内容 */}\n      <DialogContent className=\"sm:max-w-[650px] max-h-[90vh] overflow-y-auto\">\n        <DialogHeader>\n          <DialogTitle className=\"flex items-center space-x-2\">\n            <Target />\n            <span>{t(\"title\")}</span>\n          </DialogTitle>\n          <DialogDescription>\n            {t(\"description\", { name: organizationName })}\n          </DialogDescription>\n        </DialogHeader>\n        \n        {/* 表单 */}\n        <Form {...form}>\n          <form onSubmit={form.handleSubmit(onSubmit)}>\n            <div className=\"grid gap-4 py-4\">\n              {/* 目标输入框 - 支持多行，带行号 */}\n              <FormField\n                control={form.control}\n                name=\"targets\"\n                render={({ field }) => (\n                  <FormItem>\n                    <FormLabel>\n                      {t(\"targetLabel\")} <span className=\"text-destructive\">*</span>\n                    </FormLabel>\n                    <FormControl>\n                      <div className=\"relative border rounded-md overflow-hidden bg-background\">\n                        <div className=\"flex h-[324px]\">\n                          {/* 行号列 - 固定显示15行 */}\n                          <div className=\"flex-shrink-0 w-12 bg-muted/30 border-r select-none overflow-hidden\">\n                            <div \n                              ref={lineNumbersRef}\n                              className=\"py-3 px-2 text-right font-mono text-xs text-muted-foreground leading-[1.4] h-full overflow-y-auto scrollbar-hide\"\n                            >\n                              {Array.from({ length: Math.max(field.value.split('\\n').length, 15) }, (_, i) => (\n                                <div key={i + 1} className=\"h-[20px]\">\n                                  {i + 1}\n                                </div>\n                              ))}\n                            </div>\n                          </div>\n                          {/* 输入框 - 固定高度显示15行 */}\n                          <Textarea\n                            {...field}\n                            ref={(e) => {\n                              field.ref(e)\n                              textareaRef.current = e\n                            }}\n                            onScroll={handleTextareaScroll}\n                            placeholder={t(\"placeholder\")}\n                            disabled={batchCreateTargets.isPending}\n                            className=\"font-mono h-full overflow-y-auto resize-none border-0 focus-visible:ring-0 focus-visible:ring-offset-0 leading-[1.4] text-sm py-3\"\n                            style={{ lineHeight: '20px' }}\n                          />\n                        </div>\n                      </div>\n                    </FormControl>\n                    <FormDescription>\n                      {t(\"targetCount\", { count: targetValidation.count })}\n                      {targetValidation.invalid.length > 0 && (\n                        <span className=\"text-destructive ml-2\">\n                          | {t(\"invalidCount\", { count: targetValidation.invalid.length })}\n                        </span>\n                      )}\n                    </FormDescription>\n                    {targetValidation.invalid.length > 0 && (\n                      <div className=\"text-xs text-destructive\">\n                        {t(\"invalidExample\", { line: targetValidation.invalid[0].index + 1, target: targetValidation.invalid[0].originalTarget, error: targetValidation.invalid[0].error })}\n                      </div>\n                    )}\n                    <FormMessage />\n                  </FormItem>\n                )}\n              />\n\n            {/* 所属组织（只读显示） */}\n            <div className=\"grid gap-2\">\n              <Label className=\"flex items-center space-x-2\">\n                <Building2 />\n                <span>{t(\"organizationLabel\")}</span>\n              </Label>\n              <div className=\"flex items-center gap-2 px-3 py-2 border rounded-md bg-muted/50\">\n                <Building2 className=\"h-4 w-4 text-muted-foreground\" />\n                <span className=\"font-medium\">{organizationName}</span>\n              </div>\n            </div>\n            </div>\n          \n          {/* 对话框底部按钮 */}\n          <DialogFooter>\n            <Button \n              type=\"button\" \n              variant=\"outline\" \n              onClick={() => handleOpenChange(false)}\n              disabled={batchCreateTargets.isPending}\n            >\n              {tCommon(\"actions.cancel\")}\n            </Button>\n            <Button \n              type=\"submit\" \n              disabled={batchCreateTargets.isPending || !isFormValid}\n            >\n              {batchCreateTargets.isPending ? (\n                <>\n                  <LoadingSpinner/>\n                  {t(\"creating\")}\n                </>\n              ) : (\n                <>\n                  <Plus />\n                  {t(\"createTarget\")}\n                </>\n              )}\n            </Button>\n          </DialogFooter>\n          </form>\n        </Form>\n      </DialogContent>\n    </Dialog>\n  )\n}\n\n"
  },
  {
    "path": "frontend/components/organization/targets/targets-columns.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { ColumnDef } from \"@tanstack/react-table\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport { Button } from \"@/components/ui/button\"\nimport { Badge } from \"@/components/ui/badge\"\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipProvider,\n  TooltipTrigger,\n} from \"@/components/ui/tooltip\"\nimport { Eye, Trash2, Copy, Check } from \"lucide-react\"\nimport { DataTableColumnHeader } from \"@/components/ui/data-table/column-header\"\nimport type { Target } from \"@/types/target.types\"\nimport { toast } from \"sonner\"\n\n// 翻译类型定义\nexport interface OrgTargetsTranslations {\n  columns: {\n    targetName: string\n    type: string\n  }\n  actions: {\n    selectAll: string\n    selectRow: string\n  }\n  tooltips: {\n    viewDetails: string\n    unlinkTarget: string\n    clickToCopy: string\n    copied: string\n  }\n  types: {\n    domain: string\n    ip: string\n    cidr: string\n  }\n}\n\ninterface CreateColumnsProps {\n  formatDate: (dateString: string) => string\n  navigate: (path: string) => void\n  handleDelete: (target: Target) => void\n  t: OrgTargetsTranslations\n}\n\n/**\n * 目标行操作组件\n */\nfunction TargetRowActions({\n  target,\n  onView,\n  onDelete,\n  t,\n}: {\n  target: Target\n  onView: () => void\n  onDelete: () => void\n  t: OrgTargetsTranslations\n}) {\n  return (\n    <div className=\"flex items-center gap-1\">\n      <TooltipProvider delayDuration={300}>\n        <Tooltip>\n          <TooltipTrigger asChild>\n            <Button\n              variant=\"ghost\"\n              size=\"icon\"\n              className=\"h-8 w-8\"\n              onClick={onView}\n            >\n              <Eye className=\"h-4 w-4\" />\n            </Button>\n          </TooltipTrigger>\n          <TooltipContent side=\"top\">\n            <p className=\"text-xs\">{t.tooltips.viewDetails}</p>\n          </TooltipContent>\n        </Tooltip>\n      </TooltipProvider>\n\n      <TooltipProvider delayDuration={300}>\n        <Tooltip>\n          <TooltipTrigger asChild>\n            <Button\n              variant=\"ghost\"\n              size=\"icon\"\n              className=\"h-8 w-8 text-destructive hover:text-destructive\"\n              onClick={onDelete}\n            >\n              <Trash2 className=\"h-4 w-4\" />\n            </Button>\n          </TooltipTrigger>\n          <TooltipContent side=\"top\">\n            <p className=\"text-xs\">{t.tooltips.unlinkTarget}</p>\n          </TooltipContent>\n        </Tooltip>\n      </TooltipProvider>\n    </div>\n  )\n}\n\n/**\n * 目标名称单元格组件\n */\nfunction TargetNameCell({ \n  name, \n  targetId, \n  navigate,\n  t,\n}: { \n  name: string\n  targetId: number\n  navigate: (path: string) => void\n  t: OrgTargetsTranslations\n}) {\n  const [copied, setCopied] = React.useState(false)\n  \n  const handleCopy = async (e: React.MouseEvent) => {\n    e.stopPropagation()\n    try {\n      await navigator.clipboard.writeText(name)\n      setCopied(true)\n      toast.success(t.tooltips.copied)\n      setTimeout(() => setCopied(false), 2000)\n    } catch {\n      // Fallback\n    }\n  }\n  \n  return (\n    <div className=\"group flex items-start gap-1 flex-1 min-w-0\">\n      <button\n        onClick={() => navigate(`/target/${targetId}/overview/`)}\n        className=\"text-sm font-medium hover:text-primary hover:underline underline-offset-2 transition-colors cursor-pointer text-left break-all leading-relaxed whitespace-normal\"\n      >\n        {name}\n      </button>\n      <TooltipProvider delayDuration={300}>\n        <Tooltip>\n          <TooltipTrigger asChild>\n            <Button\n              variant=\"ghost\"\n              size=\"icon\"\n              className={`h-6 w-6 flex-shrink-0 hover:bg-accent transition-opacity ${\n                copied ? 'opacity-100' : 'opacity-0 group-hover:opacity-100'\n              }`}\n              onClick={handleCopy}\n            >\n              {copied ? (\n                <Check className=\"h-3.5 w-3.5 text-green-600 dark:text-green-400\" />\n              ) : (\n                <Copy className=\"h-3.5 w-3.5 text-muted-foreground\" />\n              )}\n            </Button>\n          </TooltipTrigger>\n          <TooltipContent side=\"top\">\n            <p className=\"text-xs\">{copied ? t.tooltips.copied : t.tooltips.clickToCopy}</p>\n          </TooltipContent>\n        </Tooltip>\n      </TooltipProvider>\n    </div>\n  )\n}\n\n/**\n * 创建目标表格列定义\n */\nexport const createTargetColumns = ({\n  formatDate,\n  navigate,\n  handleDelete,\n  t,\n}: CreateColumnsProps): ColumnDef<Target>[] => [\n  {\n    id: \"select\",\n    size: 40,\n    minSize: 40,\n    maxSize: 40,\n    enableResizing: false,\n    header: ({ table }) => (\n      <Checkbox\n        checked={\n          table.getIsAllPageRowsSelected() ||\n          (table.getIsSomePageRowsSelected() && \"indeterminate\")\n        }\n        onCheckedChange={(value) => table.toggleAllPageRowsSelected(!!value)}\n        aria-label={t.actions.selectAll}\n      />\n    ),\n    cell: ({ row }) => (\n      <Checkbox\n        checked={row.getIsSelected()}\n        onCheckedChange={(value) => row.toggleSelected(!!value)}\n        aria-label={t.actions.selectRow}\n      />\n    ),\n    enableSorting: false,\n    enableHiding: false,\n  },\n  {\n    accessorKey: \"name\",\n    size: 350,\n    minSize: 250,\n    meta: { title: t.columns.targetName },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.targetName} />\n    ),\n    cell: ({ row }) => (\n      <TargetNameCell\n        name={row.getValue(\"name\") as string}\n        targetId={row.original.id}\n        navigate={navigate}\n        t={t}\n      />\n    ),\n  },\n  {\n    accessorKey: \"type\",\n    size: 100,\n    minSize: 80,\n    meta: { title: t.columns.type },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.type} />\n    ),\n    cell: ({ row }) => {\n      const type = row.getValue(\"type\") as string | null\n      if (!type) {\n        return <span className=\"text-sm text-muted-foreground\">-</span>\n      }\n      const typeMap: Record<string, { label: string; variant: \"default\" | \"secondary\" | \"outline\" }> = {\n        domain: { label: t.types.domain, variant: \"default\" },\n        ip: { label: t.types.ip, variant: \"secondary\" },\n        cidr: { label: t.types.cidr, variant: \"outline\" },\n      }\n      const typeInfo = typeMap[type] || { label: type, variant: \"secondary\" as const }\n      return (\n        <Badge variant={typeInfo.variant}>\n          {typeInfo.label}\n        </Badge>\n      )\n    },\n  },\n  {\n    id: \"actions\",\n    size: 80,\n    minSize: 80,\n    maxSize: 80,\n    enableResizing: false,\n    cell: ({ row }) => (\n      <TargetRowActions\n        target={row.original}\n        onView={() => navigate(`/target/${row.original.id}/overview/`)}\n        onDelete={() => handleDelete(row.original)}\n        t={t}\n      />\n    ),\n    enableSorting: false,\n    enableHiding: false,\n  },\n]\n"
  },
  {
    "path": "frontend/components/organization/targets/targets-data-table.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { IconSearch, IconLoader2, IconPlus } from \"@tabler/icons-react\"\nimport { useTranslations } from \"next-intl\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { UnifiedDataTable } from \"@/components/ui/data-table\"\nimport type { ColumnDef } from \"@tanstack/react-table\"\nimport type { Target } from \"@/types/target.types\"\nimport type { PaginationInfo } from \"@/types/common.types\"\n\ninterface TargetsDataTableProps {\n  data: Target[]\n  columns: ColumnDef<Target>[]\n  onAddNew?: () => void\n  onAddHover?: () => void\n  onBulkDelete?: () => void\n  onSelectionChange?: (selectedRows: Target[]) => void\n  searchPlaceholder?: string\n  searchValue?: string\n  onSearch?: (value: string) => void\n  isSearching?: boolean\n  addButtonText?: string\n  pagination?: { pageIndex: number; pageSize: number }\n  setPagination?: React.Dispatch<React.SetStateAction<{ pageIndex: number; pageSize: number }>>\n  paginationInfo?: PaginationInfo\n  onPaginationChange?: (pagination: { pageIndex: number; pageSize: number }) => void\n}\n\n/**\n * 目标数据表格组件 (organization 版本)\n * 使用 UnifiedDataTable 统一组件\n */\nexport function TargetsDataTable({\n  data = [],\n  columns,\n  onAddNew,\n  onAddHover,\n  onBulkDelete,\n  onSelectionChange,\n  searchPlaceholder,\n  searchValue,\n  onSearch,\n  isSearching = false,\n  addButtonText,\n  pagination: externalPagination,\n  setPagination: setExternalPagination,\n  paginationInfo,\n  onPaginationChange,\n}: TargetsDataTableProps) {\n  const t = useTranslations(\"common.status\")\n  const tTarget = useTranslations(\"target\")\n  \n  // 本地搜索输入状态\n  const [localSearchValue, setLocalSearchValue] = React.useState(searchValue || \"\")\n\n  React.useEffect(() => {\n    setLocalSearchValue(searchValue || \"\")\n  }, [searchValue])\n\n  const handleSearchSubmit = () => {\n    if (onSearch) {\n      onSearch(localSearchValue)\n    }\n  }\n\n  const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n    if (e.key === \"Enter\") {\n      handleSearchSubmit()\n    }\n  }\n\n  // 自定义添加按钮（支持 onAddHover）\n  const addButton = onAddNew ? (\n    <Button onClick={onAddNew} onMouseEnter={onAddHover} size=\"sm\">\n      <IconPlus className=\"h-4 w-4\" />\n      {addButtonText || tTarget(\"createTarget\")}\n    </Button>\n  ) : undefined\n\n  return (\n    <UnifiedDataTable\n      data={data}\n      columns={columns}\n      getRowId={(row) => String(row.id)}\n      // 分页\n      pagination={externalPagination}\n      setPagination={setExternalPagination}\n      paginationInfo={paginationInfo}\n      onPaginationChange={onPaginationChange}\n      // 选择\n      onSelectionChange={onSelectionChange}\n      // 批量操作\n      showBulkDelete={false}\n      showAddButton={false}\n      // 空状态\n      emptyMessage={t(\"noData\")}\n      // 自定义工具栏\n      toolbarLeft={\n        <div className=\"flex items-center space-x-2\">\n          <Input\n            placeholder={searchPlaceholder || tTarget(\"title\")}\n            value={localSearchValue}\n            onChange={(e) => setLocalSearchValue(e.target.value)}\n            onKeyDown={handleKeyDown}\n            className=\"h-8 max-w-sm\"\n          />\n          <Button variant=\"outline\" size=\"sm\" onClick={handleSearchSubmit} disabled={isSearching}>\n            {isSearching ? (\n              <IconLoader2 className=\"h-4 w-4 animate-spin\" />\n            ) : (\n              <IconSearch className=\"h-4 w-4\" />\n            )}\n          </Button>\n        </div>\n      }\n      toolbarRight={addButton}\n    />\n  )\n}\n"
  },
  {
    "path": "frontend/components/organization/targets/targets-detail-view.tsx",
    "content": "\"use client\"\n\nimport React, { useState, useMemo } from \"react\"\nimport { AlertTriangle } from \"lucide-react\"\nimport { useRouter } from \"next/navigation\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport { toast } from \"sonner\"\nimport { TargetsDataTable } from \"./targets-data-table\"\nimport { createTargetColumns } from \"./targets-columns\"\nimport { AddTargetDialog } from \"./add-target-dialog\"\nimport { LoadingSpinner } from \"@/components/loading-spinner\"\nimport { DataTableSkeleton } from \"@/components/ui/data-table-skeleton\"\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\"\nimport { useOrganization, useUnlinkTargetsFromOrganization } from \"@/hooks/use-organizations\"\nimport { useTargets } from \"@/hooks/use-targets\"\nimport { getDateLocale } from \"@/lib/date-utils\"\nimport type { Target } from \"@/types/target.types\"\n\n/**\n * 组织目标详情视图组件（使用 React Query）\n * 用于显示和管理组织下的目标列表\n * 支持通过组织ID获取数据\n */\nexport function OrganizationTargetsDetailView({\n  organizationId\n}: {\n  organizationId: string\n}) {\n  const [selectedTargets, setSelectedTargets] = useState<Target[]>([])\n  const [isAddDialogOpen, setIsAddDialogOpen] = useState(false)\n  const [deleteDialogOpen, setDeleteDialogOpen] = useState(false)\n  const [targetToDelete, setTargetToDelete] = useState<Target | null>(null)\n  const [bulkDeleteDialogOpen, setBulkDeleteDialogOpen] = useState(false)\n\n  // 国际化\n  const tColumns = useTranslations(\"columns\")\n  const tCommon = useTranslations(\"common\")\n  const tTooltips = useTranslations(\"tooltips\")\n  const tTarget = useTranslations(\"target\")\n  const tConfirm = useTranslations(\"common.confirm\")\n  const tOrg = useTranslations(\"organization\")\n  const locale = useLocale()\n\n  // 构建翻译对象\n  const translations = useMemo(() => ({\n    columns: {\n      targetName: tColumns(\"target.target\"),\n      type: tColumns(\"common.type\"),\n    },\n    actions: {\n      selectAll: tCommon(\"actions.selectAll\"),\n      selectRow: tCommon(\"actions.selectRow\"),\n    },\n    tooltips: {\n      viewDetails: tTooltips(\"viewDetails\"),\n      unlinkTarget: tTooltips(\"unlinkTarget\"),\n      clickToCopy: tTooltips(\"clickToCopy\"),\n      copied: tTooltips(\"copied\"),\n    },\n    types: {\n      domain: tTarget(\"types.domain\"),\n      ip: tTarget(\"types.ip\"),\n      cidr: tTarget(\"types.cidr\"),\n    },\n  }), [tColumns, tCommon, tTooltips, tTarget])\n\n  // 使用解除关联 mutation\n  const unlinkTargets = useUnlinkTargetsFromOrganization()\n\n  // 分页状态\n  const [pagination, setPagination] = useState({\n    pageIndex: 0,\n    pageSize: 10,\n  })\n\n  // 使用 React Query 获取组织基本信息\n  const {\n    data: organization,\n    isLoading: isLoadingOrg,\n    error: orgError,\n  } = useOrganization(parseInt(organizationId))\n\n  // 使用 React Query 获取目标列表（过滤组织）\n  const {\n    data: targetsData,\n    isLoading: isLoadingTargets,\n    error: targetsError,\n    refetch\n  } = useTargets({\n    page: pagination.pageIndex + 1,\n    pageSize: pagination.pageSize,\n    organizationId: parseInt(organizationId),\n  })\n\n  const isLoading = isLoadingOrg || isLoadingTargets\n  const error = orgError || targetsError\n\n  // 辅助函数 - 格式化日期\n  const formatDate = (dateString: string): string => {\n    return new Date(dateString).toLocaleString(getDateLocale(locale), {\n      year: \"numeric\",\n      month: \"numeric\",\n      day: \"numeric\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\",\n      hour12: false,\n    })\n  }\n\n  // 导航函数（使用 Next.js 客户端路由）\n  const router = useRouter()\n  const navigate = (path: string) => {\n    router.push(path)\n  }\n\n  // 处理解除关联目标\n  const handleDeleteTarget = (target: Target) => {\n    setTargetToDelete(target)\n    setDeleteDialogOpen(true)\n  }\n\n  // 确认解除关联目标\n  const confirmDelete = async () => {\n    if (!targetToDelete) return\n\n    setDeleteDialogOpen(false)\n    const targetId = targetToDelete.id\n    setTargetToDelete(null)\n\n    // 调用解除关联 API\n    unlinkTargets.mutate({\n      organizationId: parseInt(organizationId),\n      targetIds: [targetId]\n    })\n  }\n\n  // 处理批量解除关联\n  const handleBulkDelete = () => {\n    if (selectedTargets.length === 0) {\n      return\n    }\n    setBulkDeleteDialogOpen(true)\n  }\n\n  // 确认批量解除关联\n  const confirmBulkDelete = async () => {\n    if (selectedTargets.length === 0) return\n\n    const targetIds = selectedTargets.map(target => target.id)\n\n    setBulkDeleteDialogOpen(false)\n    setSelectedTargets([])\n\n    // 调用批量解除关联 API\n    unlinkTargets.mutate({\n      organizationId: parseInt(organizationId),\n      targetIds\n    })\n  }\n\n  // 处理添加目标\n  const handleAddTarget = () => {\n    setIsAddDialogOpen(true)\n  }\n\n  // 处理添加成功\n  const handleAddSuccess = () => {\n    setIsAddDialogOpen(false)\n    // 刷新目标列表\n    refetch()\n  }\n\n  // 处理分页变化\n  const handlePaginationChange = (newPagination: { pageIndex: number; pageSize: number }) => {\n    setPagination(newPagination)\n    // 清空选中状态\n    setSelectedTargets([])\n  }\n\n  // 创建列定义\n  const targetColumns = useMemo(\n    () =>\n      createTargetColumns({\n        formatDate,\n        navigate,\n        handleDelete: handleDeleteTarget,\n        t: translations,\n      }),\n    [formatDate, navigate, handleDeleteTarget, translations]\n  )\n\n  // 错误状态\n  if (error) {\n    return (\n      <div className=\"flex flex-col items-center justify-center py-12\">\n        <div className=\"rounded-full bg-destructive/10 p-3 mb-4\">\n          <AlertTriangle className=\"h-10 w-10 text-destructive\" />\n        </div>\n        <h3 className=\"text-lg font-semibold mb-2\">{tCommon(\"status.error\")}</h3>\n        <p className=\"text-muted-foreground text-center mb-4\">\n          {error.message}\n        </p>\n        <button\n          onClick={() => refetch()}\n          className=\"px-4 py-2 bg-primary text-primary-foreground rounded-md hover:bg-primary/90\"\n        >\n          {tCommon(\"actions.retry\")}\n        </button>\n      </div>\n    )\n  }\n\n  // 加载状态\n  if (isLoading) {\n    return (\n      <DataTableSkeleton\n        toolbarButtonCount={3}\n        rows={6}\n        columns={4}\n      />\n    )\n  }\n\n  if (!organization) {\n    return (\n      <div className=\"flex flex-col items-center justify-center py-12\">\n        <p className=\"text-muted-foreground\">{tOrg(\"notFound\")}</p>\n      </div>\n    )\n  }\n\n  return (\n    <>\n      <TargetsDataTable\n        data={targetsData?.targets || []}\n        columns={targetColumns}\n        onAddNew={handleAddTarget}\n        onBulkDelete={handleBulkDelete}\n        onSelectionChange={setSelectedTargets}\n        searchPlaceholder={tColumns(\"target.target\")}\n        addButtonText={tCommon(\"actions.add\")}\n        pagination={pagination}\n        setPagination={setPagination}\n        paginationInfo={targetsData ? {\n          total: targetsData.total,\n          page: targetsData.page,\n          pageSize: targetsData.pageSize,\n          totalPages: targetsData.totalPages,\n        } : undefined}\n        onPaginationChange={handlePaginationChange}\n      />\n\n      {/* 添加目标对话框 */}\n      <AddTargetDialog\n        organizationId={parseInt(organizationId)}\n        organizationName={organization.name}\n        onAdd={handleAddSuccess}\n        open={isAddDialogOpen}\n        onOpenChange={setIsAddDialogOpen}\n      />\n\n      {/* 解除关联确认对话框 */}\n      <AlertDialog open={deleteDialogOpen} onOpenChange={setDeleteDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{tConfirm(\"unlinkTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {tConfirm(\"unlinkTargetMessage\", { name: targetToDelete?.name ?? \"\" })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"actions.cancel\")}</AlertDialogCancel>\n            <AlertDialogAction\n              onClick={confirmDelete}\n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n            >\n              {tConfirm(\"confirmUnlink\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n\n      {/* 批量解除关联确认对话框 */}\n      <AlertDialog open={bulkDeleteDialogOpen} onOpenChange={setBulkDeleteDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{tConfirm(\"bulkUnlinkTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {tConfirm(\"bulkUnlinkTargetMessage\", { count: selectedTargets.length })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          {/* 目标列表容器 - 固定最大高度并支持滚动 */}\n          <div className=\"mt-2 p-2 bg-muted rounded-md max-h-96 overflow-y-auto\">\n            <ul className=\"text-sm space-y-1\">\n              {selectedTargets.map((target) => (\n                <li key={target.id} className=\"flex items-center\">\n                  <span className=\"font-medium\">{target.name}</span>\n                  {target.description && (\n                    <span className=\"text-muted-foreground ml-2\">- {target.description}</span>\n                  )}\n                </li>\n              ))}\n            </ul>\n          </div>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"actions.cancel\")}</AlertDialogCancel>\n            <AlertDialogAction\n              onClick={confirmBulkDelete}\n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n            >\n              {tConfirm(\"confirmUnlinkCount\", { count: selectedTargets.length })}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n    </>\n  )\n}\n\nexport { OrganizationTargetsDetailView as TargetsDetailView }\n"
  },
  {
    "path": "frontend/components/providers/index.ts",
    "content": "/**\n * Provider Components - Unified exports\n */\nexport { ThemeProvider } from './theme-provider'\nexport { QueryProvider } from './query-provider'\n\n"
  },
  {
    "path": "frontend/components/providers/query-provider.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\"\nimport { ReactQueryDevtools } from \"@tanstack/react-query-devtools\"\n\n// Create QueryClient instance\nconst queryClient = new QueryClient({\n  defaultOptions: {\n    queries: {\n      // Data expires immediately, refetch when switching pages\n      staleTime: 0,\n      // Cache time (5 minutes) - keep short-term cache for quick returns\n      gcTime: 5 * 60 * 1000,\n      // Retry configuration\n      retry: (failureCount, error: unknown) => {\n        // Don't retry 4xx errors\n        const err = error as { response?: { status?: number } }\n        if (err?.response?.status && err.response.status >= 400 && err.response.status < 500) {\n          return false\n        }\n        // Retry up to 3 times\n        return failureCount < 3\n      },\n      // Retry delay (exponential backoff)\n      retryDelay: (attemptIndex) => Math.min(1000 * 2 ** attemptIndex, 30000),\n      // Auto refresh when window regains focus - users see latest data when switching back\n      refetchOnWindowFocus: true,\n      // Don't auto refresh on network reconnect - avoid excessive requests from network fluctuations\n      refetchOnReconnect: false,\n    },\n    mutations: {\n      // Mutation retry configuration\n      retry: (failureCount, error: unknown) => {\n        // Don't retry 4xx errors\n        const err = error as { response?: { status?: number } }\n        if (err?.response?.status && err.response.status >= 400 && err.response.status < 500) {\n          return false\n        }\n        // Retry up to 2 times\n        return failureCount < 2\n      },\n    },\n  },\n})\n\ninterface QueryProviderProps {\n  children: React.ReactNode\n}\n\n/**\n * React Query Provider component\n * \n * Features:\n * 1. Provides global QueryClient instance\n * 2. Configures default query and mutation options\n * 3. Enables DevTools in development environment\n */\nexport function QueryProvider({ children }: QueryProviderProps) {\n  return (\n    <QueryClientProvider client={queryClient}>\n      {children}\n      {/* Only show DevTools in development environment */}\n      {process.env.NODE_ENV === 'development' && (\n        <ReactQueryDevtools \n          initialIsOpen={false}\n          buttonPosition=\"bottom-right\"\n        />\n      )}\n    </QueryClientProvider>\n  )\n}\n"
  },
  {
    "path": "frontend/components/providers/theme-provider.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { ThemeProvider as NextThemesProvider } from \"next-themes\"\n\n/**\n * Theme provider component\n * Based on next-themes for automatic system theme switching\n * Supports light, dark, and system-follow modes\n */\nexport function ThemeProvider({\n  children,\n  ...props\n}: React.ComponentProps<typeof NextThemesProvider>) {\n  return <NextThemesProvider {...props}>{children}</NextThemesProvider>\n}\n"
  },
  {
    "path": "frontend/components/providers/ui-i18n-provider.tsx",
    "content": "\"use client\"\n\nimport { useTranslations } from \"next-intl\"\nimport { ExpandableI18nProvider } from \"@/components/ui/data-table/expandable-cell\"\n\n/**\n * UI components i18n provider\n * Provides translations for common UI components like expandable cells\n */\nexport function UiI18nProvider({ children }: { children: React.ReactNode }) {\n  const t = useTranslations(\"tooltips\")\n\n  return (\n    <ExpandableI18nProvider expand={t(\"expand\")} collapse={t(\"collapse\")}>\n      {children}\n    </ExpandableI18nProvider>\n  )\n}\n"
  },
  {
    "path": "frontend/components/route-prefetch.tsx",
    "content": "'use client'\n\nimport { useRoutePrefetch } from '@/hooks/use-route-prefetch'\n\n/**\n * Route prefetch component\n * Automatically prefetches JS/CSS resources for commonly used pages after app startup\n * This is an invisible component, only used to execute prefetch logic\n */\nexport function RoutePrefetch() {\n  useRoutePrefetch()\n  return null\n}\n"
  },
  {
    "path": "frontend/components/route-progress.tsx",
    "content": "\"use client\"\n\nimport { useEffect, useState, useCallback, useRef } from \"react\"\nimport { usePathname, useSearchParams } from \"next/navigation\"\nimport { cn } from \"@/lib/utils\"\n\n/**\n * Route loading progress bar component\n * \n * Monitors Next.js App Router route changes and displays top progress bar animation\n */\nexport function RouteProgress() {\n  const pathname = usePathname()\n  const searchParams = useSearchParams()\n  const [progress, setProgress] = useState(0)\n  const [isVisible, setIsVisible] = useState(false)\n  const isFirstRender = useRef(true)\n\n  const intervalRef = useRef<NodeJS.Timeout | null>(null)\n\n  const startProgress = useCallback(() => {\n    setIsVisible(true)\n    setProgress(0)\n    \n    // Use interval for smooth increment\n    let currentProgress = 0\n    intervalRef.current = setInterval(() => {\n      currentProgress += Math.random() * 10 + 5 // Increase by 5-15% each time\n      if (currentProgress >= 90) {\n        currentProgress = 90 // Max 90%, wait for completion\n        if (intervalRef.current) {\n          clearInterval(intervalRef.current)\n          intervalRef.current = null\n        }\n      }\n      setProgress(currentProgress)\n    }, 100)\n  }, [])\n\n  const completeProgress = useCallback(() => {\n    // Clear ongoing interval\n    if (intervalRef.current) {\n      clearInterval(intervalRef.current)\n      intervalRef.current = null\n    }\n    \n    setProgress(100)\n    // Show 100% briefly after completion, then hide\n    setTimeout(() => {\n      setIsVisible(false)\n      setProgress(0)\n    }, 300)\n  }, [])\n\n  useEffect(() => {\n    // Skip first render\n    if (isFirstRender.current) {\n      isFirstRender.current = false\n      return\n    }\n\n    // Trigger progress bar on route change\n    startProgress()\n    \n    // End progress bar after page load completes\n    const timer = setTimeout(() => completeProgress(), 300)\n    \n    return () => {\n      clearTimeout(timer)\n      if (intervalRef.current) {\n        clearInterval(intervalRef.current)\n        intervalRef.current = null\n      }\n    }\n  }, [pathname, searchParams, startProgress, completeProgress])\n\n  if (!isVisible) return null\n\n  return (\n    <div\n      className={cn(\n        \"fixed top-0 left-0 right-0 z-[99999] h-[3px]\",\n        \"pointer-events-none\"\n      )}\n    >\n      {/* Progress bar background */}\n      <div className=\"absolute inset-0 bg-primary/10\" />\n      \n      {/* Progress bar */}\n      <div\n        className={cn(\n          \"h-full bg-primary transition-all duration-200 ease-out\",\n          \"shadow-[0_0_10px_rgba(99,102,241,0.5)]\"\n        )}\n        style={{ width: `${progress}%` }}\n      />\n      \n      {/* Glow effect */}\n      <div\n        className={cn(\n          \"absolute top-0 right-0 h-full w-24\",\n          \"bg-gradient-to-r from-transparent to-primary/50\",\n          \"opacity-50 blur-sm\",\n          \"transition-all duration-200\"\n        )}\n        style={{ \n          transform: `translateX(${progress < 100 ? '0' : '100%'})`,\n          left: `${Math.max(0, progress - 10)}%`\n        }}\n      />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/scan/engine/engine-columns.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { ColumnDef } from \"@tanstack/react-table\"\nimport { Button } from \"@/components/ui/button\"\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"@/components/ui/tooltip\"\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuSeparator,\n  DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\"\nimport {\n  MoreHorizontal,\n  Trash2,\n  Check,\n  Edit,\n  X as XIcon,\n} from \"lucide-react\"\nimport { DataTableColumnHeader } from \"@/components/ui/data-table/column-header\"\nimport * as yaml from \"js-yaml\"\nimport type { ScanEngine } from \"@/types/engine.types\"\n\n// Translation type definitions\nexport interface EngineTranslations {\n  columns: {\n    engineName: string\n    subdomainDiscovery: string\n    portScan: string\n    siteScan: string\n    directoryScan: string\n    urlFetch: string\n    osint: string\n    vulnerabilityScan: string\n    wafDetection: string\n    screenshot: string\n  }\n  actions: {\n    editEngine: string\n    delete: string\n    openMenu: string\n  }\n  tooltips: {\n    editEngine: string\n  }\n}\n\n/**\n * Parse engine YAML configuration and detect if features are enabled\n */\nfunction parseEngineFeatures(engine: ScanEngine) {\n  if (engine.configuration) {\n    try {\n      const config = yaml.load(engine.configuration) as any\n      return {\n        subdomain_discovery: !!config?.subdomain_discovery,\n        port_scan: !!config?.port_scan,\n        site_scan: !!config?.site_scan,\n        directory_scan: !!config?.directory_scan,\n        url_fetch: !!config?.url_fetch || !!config?.fetch_url,\n        osint: !!config?.osint,\n        vulnerability_scan: !!config?.vulnerability_scan,\n        waf_detection: !!config?.waf_detection,\n        screenshot: !!config?.screenshot,\n      }\n    } catch (error) {\n      console.error(\"Failed to parse YAML configuration:\", error)\n    }\n  }\n  \n  return {\n    subdomain_discovery: false,\n    port_scan: false,\n    site_scan: false,\n    directory_scan: false,\n    url_fetch: false,\n    osint: false,\n    vulnerability_scan: false,\n    waf_detection: false,\n    screenshot: false,\n  }\n}\n\n/**\n * Feature support status component\n */\nfunction FeatureStatus({ enabled }: { enabled?: boolean }) {\n  if (enabled) {\n    return (\n      <div className=\"flex justify-center\">\n        <Check className=\"h-5 w-5 text-chart-4\" />\n      </div>\n    )\n  }\n  return (\n    <div className=\"flex justify-center\">\n      <XIcon className=\"h-5 w-5 text-destructive\" />\n    </div>\n  )\n}\n\ninterface CreateColumnsProps {\n  handleEdit: (engine: ScanEngine) => void\n  handleDelete: (engine: ScanEngine) => void\n  t: EngineTranslations\n}\n\n/**\n * Engine row actions component\n */\nfunction EngineRowActions({\n  onEdit,\n  onDelete,\n  t,\n}: {\n  onEdit: () => void\n  onDelete: () => void\n  t: EngineTranslations\n}) {\n  return (\n    <DropdownMenu>\n      <DropdownMenuTrigger asChild>\n        <Button\n          variant=\"ghost\"\n          className=\"flex h-8 w-8 p-0 data-[state=open]:bg-muted\"\n        >\n          <MoreHorizontal />\n          <span className=\"sr-only\">{t.actions.openMenu}</span>\n        </Button>\n      </DropdownMenuTrigger>\n      <DropdownMenuContent align=\"end\">\n        <DropdownMenuItem onClick={onEdit}>\n          <Edit />\n          {t.actions.editEngine}\n        </DropdownMenuItem>\n        <DropdownMenuSeparator />\n        <DropdownMenuItem\n          onClick={onDelete}\n          className=\"text-destructive focus:text-destructive\"\n        >\n          <Trash2 />\n          {t.actions.delete}\n        </DropdownMenuItem>\n      </DropdownMenuContent>\n    </DropdownMenu>\n  )\n}\n\n/**\n * Create engine table column definitions\n */\nexport const createEngineColumns = ({\n  handleEdit,\n  handleDelete,\n  t,\n}: CreateColumnsProps): ColumnDef<ScanEngine>[] => [\n  {\n    accessorKey: \"name\",\n    size: 200,\n    minSize: 150,\n    maxSize: 350,\n    meta: { title: t.columns.engineName },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.engineName} />\n    ),\n    cell: ({ row }) => {\n      const name = row.getValue(\"name\") as string\n      return (\n        <Tooltip>\n          <TooltipTrigger asChild>\n            <button\n              onClick={() => handleEdit(row.original)}\n              className=\"max-w-[300px] truncate font-medium text-left hover:text-primary hover:underline underline-offset-2 cursor-pointer transition-colors\"\n            >\n              {name}\n            </button>\n          </TooltipTrigger>\n          <TooltipContent>{t.tooltips.editEngine}</TooltipContent>\n        </Tooltip>\n      )\n    },\n  },\n  {\n    id: \"subdomain_discovery\",\n    meta: { title: t.columns.subdomainDiscovery },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.subdomainDiscovery} />\n    ),\n    size: 80,\n    minSize: 60,\n    maxSize: 100,\n    enableResizing: false,\n    cell: ({ row }) => {\n      const features = parseEngineFeatures(row.original)\n      return <FeatureStatus enabled={features.subdomain_discovery} />\n    },\n    enableSorting: false,\n  },\n  {\n    id: \"port_scan\",\n    meta: { title: t.columns.portScan },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.portScan} />\n    ),\n    size: 80,\n    minSize: 60,\n    maxSize: 100,\n    enableResizing: false,\n    cell: ({ row }) => {\n      const features = parseEngineFeatures(row.original)\n      return <FeatureStatus enabled={features.port_scan} />\n    },\n    enableSorting: false,\n  },\n  {\n    id: \"site_scan\",\n    meta: { title: t.columns.siteScan },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.siteScan} />\n    ),\n    size: 80,\n    minSize: 60,\n    maxSize: 100,\n    enableResizing: false,\n    cell: ({ row }) => {\n      const features = parseEngineFeatures(row.original)\n      return <FeatureStatus enabled={features.site_scan} />\n    },\n    enableSorting: false,\n  },\n  {\n    id: \"directory_scan\",\n    meta: { title: t.columns.directoryScan },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.directoryScan} />\n    ),\n    size: 80,\n    minSize: 60,\n    maxSize: 100,\n    enableResizing: false,\n    cell: ({ row }) => {\n      const features = parseEngineFeatures(row.original)\n      return <FeatureStatus enabled={features.directory_scan} />\n    },\n    enableSorting: false,\n  },\n  {\n    id: \"url_fetch\",\n    meta: { title: t.columns.urlFetch },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.urlFetch} />\n    ),\n    size: 80,\n    minSize: 60,\n    maxSize: 100,\n    enableResizing: false,\n    cell: ({ row }) => {\n      const features = parseEngineFeatures(row.original)\n      return <FeatureStatus enabled={features.url_fetch} />\n    },\n    enableSorting: false,\n  },\n  {\n    id: \"osint\",\n    meta: { title: t.columns.osint },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.osint} />\n    ),\n    size: 80,\n    minSize: 60,\n    maxSize: 100,\n    enableResizing: false,\n    cell: ({ row }) => {\n      const features = parseEngineFeatures(row.original)\n      return <FeatureStatus enabled={features.osint} />\n    },\n    enableSorting: false,\n  },\n  {\n    id: \"vulnerability_scan\",\n    meta: { title: t.columns.vulnerabilityScan },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.vulnerabilityScan} />\n    ),\n    size: 80,\n    minSize: 60,\n    maxSize: 100,\n    enableResizing: false,\n    cell: ({ row }) => {\n      const features = parseEngineFeatures(row.original)\n      return <FeatureStatus enabled={features.vulnerability_scan} />\n    },\n    enableSorting: false,\n  },\n  {\n    id: \"waf_detection\",\n    meta: { title: t.columns.wafDetection },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.wafDetection} />\n    ),\n    size: 80,\n    minSize: 60,\n    maxSize: 100,\n    enableResizing: false,\n    cell: ({ row }) => {\n      const features = parseEngineFeatures(row.original)\n      return <FeatureStatus enabled={features.waf_detection} />\n    },\n    enableSorting: false,\n  },\n  {\n    id: \"screenshot\",\n    meta: { title: t.columns.screenshot },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.screenshot} />\n    ),\n    size: 80,\n    minSize: 60,\n    maxSize: 100,\n    enableResizing: false,\n    cell: ({ row }) => {\n      const features = parseEngineFeatures(row.original)\n      return <FeatureStatus enabled={features.screenshot} />\n    },\n    enableSorting: false,\n  },\n  {\n    id: \"actions\",\n    size: 60,\n    minSize: 60,\n    maxSize: 60,\n    enableResizing: false,\n    cell: ({ row }) => (\n      <EngineRowActions\n        onEdit={() => handleEdit(row.original)}\n        onDelete={() => handleDelete(row.original)}\n        t={t}\n      />\n    ),\n    enableSorting: false,\n    enableHiding: false,\n  },\n]\n"
  },
  {
    "path": "frontend/components/scan/engine/engine-create-dialog.tsx",
    "content": "\"use client\"\n\nimport React, { useState } from \"react\"\nimport { FileCode, Save, X, AlertCircle, CheckCircle2 } from \"lucide-react\"\nimport Editor from \"@monaco-editor/react\"\nimport * as yaml from \"js-yaml\"\nimport { useTranslations } from \"next-intl\"\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n} from \"@/components/ui/dialog\"\nimport { Button } from \"@/components/ui/button\"\nimport { Label } from \"@/components/ui/label\"\nimport { Input } from \"@/components/ui/input\"\nimport { toast } from \"sonner\"\nimport { useColorTheme } from \"@/hooks/use-color-theme\"\n\ninterface EngineCreateDialogProps {\n  open: boolean\n  onOpenChange: (open: boolean) => void\n  onSave?: (name: string, yamlContent: string) => Promise<void>\n}\n\n/**\n * Create new engine dialog\n */\nexport function EngineCreateDialog({\n  open,\n  onOpenChange,\n  onSave,\n}: EngineCreateDialogProps) {\n  const t = useTranslations(\"scan.engine.create\")\n  const tToast = useTranslations(\"toast\")\n  const tCommon = useTranslations(\"common.actions\")\n  const [engineName, setEngineName] = useState(\"\")\n  const [yamlContent, setYamlContent] = useState(\"\")\n  const [isSubmitting, setIsSubmitting] = useState(false)\n  const [isEditorReady, setIsEditorReady] = useState(false)\n  const [yamlError, setYamlError] = useState<{ message: string; line?: number; column?: number } | null>(null)\n  const { currentTheme } = useColorTheme()\n  const editorRef = React.useRef<any>(null)\n\n  // Default YAML template\n  const defaultYaml = `# Please write engine configuration YAML here\n# You can refer to configuration examples in engine_config_example.yaml file`;\n\n  // Reset form when dialog opens\n  React.useEffect(() => {\n    if (open) {\n      setEngineName(\"\")\n      setYamlContent(defaultYaml)\n      setYamlError(null)\n    }\n  }, [open])\n\n  // Validate YAML syntax\n  const validateYaml = (content: string) => {\n    if (!content.trim()) {\n      setYamlError(null)\n      return true\n    }\n\n    try {\n      yaml.load(content)\n      setYamlError(null)\n      return true\n    } catch (error) {\n      const yamlError = error as yaml.YAMLException\n      setYamlError({\n        message: yamlError.message,\n        line: yamlError.mark?.line ? yamlError.mark.line + 1 : undefined,\n        column: yamlError.mark?.column ? yamlError.mark.column + 1 : undefined,\n      })\n      return false\n    }\n  }\n\n  // Handle editor content change\n  const handleEditorChange = (value: string | undefined) => {\n    const newValue = value || \"\"\n    setYamlContent(newValue)\n    validateYaml(newValue)\n  }\n\n  // Handle editor mount\n  const handleEditorDidMount = (editor: any) => {\n    editorRef.current = editor\n    setIsEditorReady(true)\n  }\n\n  // Handle save\n  const handleSave = async () => {\n    // Validate engine name\n    if (!engineName.trim()) {\n      toast.error(tToast(\"engineNameRequired\"))\n      return\n    }\n\n    // YAML validation\n    if (!yamlContent.trim()) {\n      toast.error(tToast(\"configRequired\"))\n      return\n    }\n\n    if (!validateYaml(yamlContent)) {\n      toast.error(tToast(\"yamlSyntaxError\"), {\n        description: yamlError?.message,\n      })\n      return\n    }\n\n    setIsSubmitting(true)\n    try {\n      if (onSave) {\n        await onSave(engineName, yamlContent)\n      } else {\n        // TODO: Call actual API to create engine\n        await new Promise(resolve => setTimeout(resolve, 1000))\n      }\n      \n      toast.success(tToast(\"engineCreateSuccess\"), {\n        description: tToast(\"engineCreateSuccessDesc\", { name: engineName }),\n      })\n      onOpenChange(false)\n    } catch (error) {\n      console.error(\"Failed to create engine:\", error)\n      toast.error(tToast(\"engineCreateFailed\"), {\n        description: error instanceof Error ? error.message : tToast(\"unknownError\"),\n      })\n    } finally {\n      setIsSubmitting(false)\n    }\n  }\n\n  // Handle close\n  const handleClose = () => {\n    if (engineName.trim() || yamlContent !== defaultYaml) {\n      const confirmed = window.confirm(t(\"confirmClose\"))\n      if (!confirmed) return\n    }\n    onOpenChange(false)\n  }\n\n  return (\n    <Dialog open={open} onOpenChange={onOpenChange}>\n      <DialogContent className=\"sm:max-w-6xl max-w-[calc(100%-2rem)] h-[90vh] flex flex-col p-0\">\n        <div className=\"flex flex-col h-full\">\n          <DialogHeader className=\"px-6 pt-6 pb-4 border-b\">\n            <DialogTitle className=\"flex items-center gap-2\">\n              <FileCode className=\"h-5 w-5\" />\n              {t(\"title\")}\n            </DialogTitle>\n            <DialogDescription>\n              {t(\"desc\")}\n            </DialogDescription>\n          </DialogHeader>\n\n          <div className=\"flex-1 overflow-hidden px-6 py-4\">\n            <div className=\"flex flex-col h-full gap-4\">\n              {/* Engine name input */}\n              <div className=\"space-y-2\">\n                <Label htmlFor=\"engine-name\">\n                  {t(\"engineName\")} <span className=\"text-destructive\">*</span>\n                </Label>\n                <Input\n                  id=\"engine-name\"\n                  value={engineName}\n                  onChange={(e) => setEngineName(e.target.value)}\n                  placeholder={t(\"engineNamePlaceholder\")}\n                  disabled={isSubmitting}\n                  className=\"max-w-md\"\n                />\n              </div>\n\n              {/* YAML editor */}\n              <div className=\"flex flex-col flex-1 min-h-0 gap-2\">\n                <div className=\"flex items-center justify-between\">\n                  <Label>{t(\"yamlConfig\")}</Label>\n                  {/* Syntax validation status */}\n                  <div className=\"flex items-center gap-2\">\n                    {yamlContent.trim() && (\n                      yamlError ? (\n                        <div className=\"flex items-center gap-1 text-xs text-destructive\">\n                          <AlertCircle className=\"h-3.5 w-3.5\" />\n                          <span>{t(\"syntaxError\")}</span>\n                        </div>\n                      ) : (\n                        <div className=\"flex items-center gap-1 text-xs text-green-600 dark:text-green-400\">\n                          <CheckCircle2 className=\"h-3.5 w-3.5\" />\n                          <span>{t(\"syntaxValid\")}</span>\n                        </div>\n                      )\n                    )}\n                  </div>\n                </div>\n\n                {/* Monaco Editor */}\n                <div className={`border rounded-md overflow-hidden flex-1 ${yamlError ? 'border-destructive' : ''}`}>\n                  <Editor\n                    height=\"100%\"\n                    defaultLanguage=\"yaml\"\n                    value={yamlContent}\n                    onChange={handleEditorChange}\n                    onMount={handleEditorDidMount}\n                    theme={currentTheme.isDark ? \"vs-dark\" : \"light\"}\n                    options={{\n                      minimap: { enabled: false },\n                      fontSize: 13,\n                      lineNumbers: \"on\",\n                      wordWrap: \"off\",\n                      scrollBeyondLastLine: false,\n                      automaticLayout: true,\n                      tabSize: 2,\n                      insertSpaces: true,\n                      formatOnPaste: true,\n                      formatOnType: true,\n                      folding: true,\n                      foldingStrategy: \"indentation\",\n                      showFoldingControls: \"always\",\n                      bracketPairColorization: {\n                        enabled: true,\n                      },\n                      padding: {\n                        top: 16,\n                        bottom: 16,\n                      },\n                      readOnly: isSubmitting,\n                    }}\n                    loading={\n                      <div className=\"flex items-center justify-center h-full\">\n                        <div className=\"flex flex-col items-center gap-2\">\n                          <div className=\"h-8 w-8 animate-spin rounded-full border-4 border-primary border-t-transparent\" />\n                          <p className=\"text-sm text-muted-foreground\">{t(\"loadingEditor\")}</p>\n                        </div>\n                      </div>\n                    }\n                  />\n                </div>\n\n                {/* Error message display */}\n                {yamlError && (\n                  <div className=\"flex items-start gap-2 p-3 bg-destructive/10 border border-destructive/20 rounded-md\">\n                    <AlertCircle className=\"h-4 w-4 text-destructive mt-0.5 flex-shrink-0\" />\n                    <div className=\"flex-1 text-xs\">\n                      <p className=\"font-semibold text-destructive mb-1\">\n                        {yamlError.line && yamlError.column\n                          ? t(\"errorLocation\", { line: yamlError.line, column: yamlError.column })\n                          : tToast(\"yamlSyntaxError\")}\n                      </p>\n                      <p className=\"text-muted-foreground\">{yamlError.message}</p>\n                    </div>\n                  </div>\n                )}\n              </div>\n            </div>\n          </div>\n\n          <DialogFooter className=\"px-6 py-4 border-t gap-2\">\n            <Button\n              type=\"button\"\n              variant=\"outline\"\n              onClick={handleClose}\n              disabled={isSubmitting}\n            >\n              <X className=\"h-4 w-4\" />\n              {tCommon(\"cancel\")}\n            </Button>\n            <Button\n              type=\"button\"\n              onClick={handleSave}\n              disabled={isSubmitting || !engineName.trim() || !!yamlError || !isEditorReady}\n            >\n              {isSubmitting ? (\n                <>\n                  <div className=\"h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent\" />\n                  {t(\"creating\")}\n                </>\n              ) : (\n                <>\n                  <Save className=\"h-4 w-4\" />\n                  {t(\"createEngine\")}\n                </>\n              )}\n            </Button>\n          </DialogFooter>\n        </div>\n      </DialogContent>\n    </Dialog>\n  )\n}\n\n"
  },
  {
    "path": "frontend/components/scan/engine/engine-data-table.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport type { ColumnDef } from \"@tanstack/react-table\"\nimport { useTranslations } from \"next-intl\"\nimport { Input } from \"@/components/ui/input\"\nimport { UnifiedDataTable } from \"@/components/ui/data-table\"\nimport type { ScanEngine } from \"@/types/engine.types\"\n\n// Component props type definitions\ninterface EngineDataTableProps {\n  data: ScanEngine[]\n  columns: ColumnDef<ScanEngine>[]\n  onAddNew?: () => void\n  searchPlaceholder?: string\n  searchColumn?: string\n  addButtonText?: string\n}\n\n/**\n * Scan engine data table component\n * Uses UnifiedDataTable unified component\n */\nexport function EngineDataTable({\n  data = [],\n  columns,\n  onAddNew,\n  searchPlaceholder,\n  addButtonText,\n}: EngineDataTableProps) {\n  const t = useTranslations(\"common.status\")\n  const tEngine = useTranslations(\"scan.engine\")\n  \n  // Local search state\n  const [searchValue, setSearchValue] = React.useState(\"\")\n\n  // Filter data (local filtering)\n  const filteredData = React.useMemo(() => {\n    if (!searchValue) return data\n    return data.filter((item) => {\n      const name = item.name || \"\"\n      return name.toLowerCase().includes(searchValue.toLowerCase())\n    })\n  }, [data, searchValue])\n\n  return (\n    <UnifiedDataTable\n      data={filteredData}\n      columns={columns}\n      getRowId={(row) => String(row.id)}\n      enableRowSelection={false}\n      onAddNew={onAddNew}\n      addButtonLabel={addButtonText || tEngine(\"createEngine\")}\n      showBulkDelete={false}\n      emptyMessage={t(\"noData\")}\n      toolbarLeft={\n        <Input\n          placeholder={searchPlaceholder || tEngine(\"searchPlaceholder\")}\n          value={searchValue}\n          onChange={(e) => setSearchValue(e.target.value)}\n          className=\"max-w-sm h-8\"\n        />\n      }\n    />\n  )\n}\n\n"
  },
  {
    "path": "frontend/components/scan/engine/engine-edit-dialog.tsx",
    "content": "\"use client\"\n\nimport React, { useState, useEffect, useRef } from \"react\"\nimport { FileCode, Save, X, AlertCircle, CheckCircle2, AlertTriangle } from \"lucide-react\"\nimport Editor from \"@monaco-editor/react\"\nimport * as yaml from \"js-yaml\"\nimport { useTranslations } from \"next-intl\"\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n} from \"@/components/ui/dialog\"\nimport { Button } from \"@/components/ui/button\"\nimport { Label } from \"@/components/ui/label\"\nimport { toast } from \"sonner\"\nimport { useColorTheme } from \"@/hooks/use-color-theme\"\nimport type { ScanEngine } from \"@/types/engine.types\"\n\ninterface EngineEditDialogProps {\n  engine: ScanEngine | null\n  open: boolean\n  onOpenChange: (open: boolean) => void\n  onSave?: (engineId: number, yamlContent: string) => Promise<void>\n}\n\n/**\n * Engine configuration edit dialog\n * Uses Monaco Editor to provide VSCode-level editing experience\n */\nexport function EngineEditDialog({\n  engine,\n  open,\n  onOpenChange,\n  onSave,\n}: EngineEditDialogProps) {\n  const t = useTranslations(\"scan.engine.edit\")\n  const tToast = useTranslations(\"toast\")\n  const tCommon = useTranslations(\"common.actions\")\n  const [yamlContent, setYamlContent] = useState(\"\")\n  const [isSubmitting, setIsSubmitting] = useState(false)\n  const [hasChanges, setHasChanges] = useState(false)\n  const [isEditorReady, setIsEditorReady] = useState(false)\n  const [yamlError, setYamlError] = useState<{ message: string; line?: number; column?: number } | null>(null)\n  const { currentTheme } = useColorTheme()\n  const editorRef = useRef<any>(null)\n\n  // Generate sample YAML configuration\n  const generateSampleYaml = (engine: ScanEngine) => {\n    return `# Engine name: ${engine.name}\n\n# ==================== Subdomain Discovery ====================\nsubdomain_discovery:\n  tools:\n    subfinder:\n      enabled: true\n      timeout: 600      # 10 minutes (required)\n      \n    sublist3r:\n      enabled: true\n      timeout: 900      # 15 minutes (required)\n      \n    oneforall:\n      enabled: true\n      timeout: 1200     # 20 minutes (required)\n\n\n# ==================== Port Scan ====================\nport_scan:\n  tools:\n    naabu_active:\n      enabled: true\n      timeout: auto     # Auto calculate\n      threads: 5\n      top-ports: 100\n      rate: 10\n      \n    naabu_passive:\n      enabled: true\n      timeout: auto\n\n\n# ==================== Site Scan ====================\nsite_scan:\n  tools:\n    httpx:\n      enabled: true\n      timeout: auto         # Auto calculate\n      # screenshot: true    # Enable site screenshot (requires Chromium)\n\n\n# ==================== Directory Scan ====================\ndirectory_scan:\n  tools:\n    ffuf:\n      enabled: true\n      timeout: auto                            # Auto calculate timeout\n      wordlist: ~/Desktop/dirsearch_dicc.txt   # Wordlist file path (required)\n      delay: 0.1-2.0\n      threads: 10\n      request_timeout: 10\n      match_codes: 200,201,301,302,401,403\n\n\n# ==================== URL Fetch ====================\nurl_fetch:\n  tools:\n    waymore:\n      enabled: true\n      timeout: auto\n    \n    katana:\n      enabled: true\n      timeout: auto\n      depth: 5\n      threads: 10\n      rate-limit: 30\n      random-delay: 1\n      retry: 2\n      request-timeout: 12\n    \n    uro:\n      enabled: true\n      timeout: auto\n    \n    httpx:\n      enabled: true\n      timeout: auto\n`\n  }\n\n  // When engine changes, update YAML content\n  useEffect(() => {\n    if (engine && open) {\n      // TODO: Get actual YAML configuration from backend API\n      // If engine has configuration use it, otherwise use sample configuration\n      const content = engine.configuration || generateSampleYaml(engine)\n      setYamlContent(content)\n      setHasChanges(false)\n      setYamlError(null)\n    }\n  }, [engine, open])\n\n  // Validate YAML syntax\n  const validateYaml = (content: string) => {\n    if (!content.trim()) {\n      setYamlError(null)\n      return true\n    }\n\n    try {\n      yaml.load(content)\n      setYamlError(null)\n      return true\n    } catch (error) {\n      const yamlError = error as yaml.YAMLException\n      setYamlError({\n        message: yamlError.message,\n        line: yamlError.mark?.line ? yamlError.mark.line + 1 : undefined,\n        column: yamlError.mark?.column ? yamlError.mark.column + 1 : undefined,\n      })\n      return false\n    }\n  }\n\n  // Handle editor content change\n  const handleEditorChange = (value: string | undefined) => {\n    const newValue = value || \"\"\n    setYamlContent(newValue)\n    setHasChanges(true)\n    validateYaml(newValue)\n  }\n\n  // Handle editor mount\n  const handleEditorDidMount = (editor: any) => {\n    editorRef.current = editor\n    setIsEditorReady(true)\n  }\n\n  // Handle save\n  const handleSave = async () => {\n    if (!engine) return\n\n    // YAML validation\n    if (!yamlContent.trim()) {\n      toast.error(tToast(\"configRequired\"))\n      return\n    }\n\n    if (!validateYaml(yamlContent)) {\n      toast.error(tToast(\"yamlSyntaxError\"), {\n        description: yamlError?.message,\n      })\n      return\n    }\n\n    setIsSubmitting(true)\n    try {\n      if (onSave) {\n        await onSave(engine.id, yamlContent)\n      } else {\n        // TODO: Call actual API to save YAML configuration\n        await new Promise(resolve => setTimeout(resolve, 1000))\n      }\n\n      toast.success(tToast(\"configSaveSuccess\"), {\n        description: tToast(\"configSaveSuccessDesc\", { name: engine.name }),\n      })\n      setHasChanges(false)\n      onOpenChange(false)\n    } catch (error) {\n      console.error(\"Failed to save YAML config:\", error)\n      toast.error(tToast(\"configSaveFailed\"), {\n        description: error instanceof Error ? error.message : tToast(\"unknownError\"),\n      })\n    } finally {\n      setIsSubmitting(false)\n    }\n  }\n\n  // Handle close\n  const handleClose = () => {\n    if (hasChanges) {\n      const confirmed = window.confirm(t(\"confirmClose\"))\n      if (!confirmed) return\n    }\n    onOpenChange(false)\n  }\n\n  return (\n    <Dialog open={open} onOpenChange={onOpenChange}>\n      <DialogContent className=\"sm:max-w-6xl max-w-[calc(100%-2rem)] h-[90vh] flex flex-col p-0\">\n        <div className=\"flex flex-col h-full\">\n          <DialogHeader className=\"px-6 pt-6 pb-4 border-b\">\n            <DialogTitle className=\"flex items-center gap-2\">\n              <FileCode className=\"h-5 w-5\" />\n              {t(\"title\", { name: engine?.name ?? \"\" })}\n            </DialogTitle>\n            <DialogDescription>\n              {t(\"desc\")}\n            </DialogDescription>\n          </DialogHeader>\n\n          <div className=\"flex-1 overflow-hidden px-6 py-4\">\n            <div className=\"flex flex-col h-full gap-2\">\n              <div className=\"flex items-center justify-between\">\n                <Label>{t(\"yamlConfig\")}</Label>\n                {/* Syntax validation status */}\n                <div className=\"flex items-center gap-2\">\n                  {yamlContent.trim() && (\n                    yamlError ? (\n                      <div className=\"flex items-center gap-1 text-xs text-destructive\">\n                        <AlertCircle className=\"h-3.5 w-3.5\" />\n                        <span>{t(\"syntaxError\")}</span>\n                      </div>\n                    ) : (\n                      <div className=\"flex items-center gap-1 text-xs text-green-600 dark:text-green-400\">\n                        <CheckCircle2 className=\"h-3.5 w-3.5\" />\n                        <span>{t(\"syntaxValid\")}</span>\n                      </div>\n                    )\n                  )}\n                </div>\n              </div>\n\n              {/* Monaco Editor */}\n              <div className={`border rounded-md overflow-hidden h-full ${yamlError ? 'border-destructive' : ''}`}>\n                <Editor\n                  height=\"100%\"\n                  defaultLanguage=\"yaml\"\n                  value={yamlContent}\n                  onChange={handleEditorChange}\n                  onMount={handleEditorDidMount}\n                  theme={currentTheme.isDark ? \"vs-dark\" : \"light\"}\n                  options={{\n                    minimap: { enabled: false },\n                    fontSize: 13,\n                    lineNumbers: \"on\",\n                    wordWrap: \"off\",\n                    scrollBeyondLastLine: false,\n                    automaticLayout: true,\n                    tabSize: 2,\n                    insertSpaces: true,\n                    formatOnPaste: true,\n                    formatOnType: true,\n                    folding: true,\n                    foldingStrategy: \"indentation\",\n                    showFoldingControls: \"always\",\n                    bracketPairColorization: {\n                      enabled: true,\n                    },\n                    padding: {\n                      top: 16,\n                      bottom: 16,\n                    },\n                    readOnly: isSubmitting,\n                  }}\n                  loading={\n                    <div className=\"flex items-center justify-center h-full\">\n                      <div className=\"flex flex-col items-center gap-2\">\n                        <div className=\"h-8 w-8 animate-spin rounded-full border-4 border-primary border-t-transparent\" />\n                        <p className=\"text-sm text-muted-foreground\">{t(\"loadingEditor\")}</p>\n                      </div>\n                    </div>\n                  }\n                />\n              </div>\n\n              {/* Error message display */}\n              {yamlError && (\n                <div className=\"flex items-start gap-2 p-3 bg-destructive/10 border border-destructive/20 rounded-md\">\n                  <AlertCircle className=\"h-4 w-4 text-destructive mt-0.5 flex-shrink-0\" />\n                  <div className=\"flex-1 text-xs\">\n                    <p className=\"font-semibold text-destructive mb-1\">\n                      {yamlError.line && yamlError.column\n                        ? t(\"errorLocation\", { line: yamlError.line, column: yamlError.column })\n                        : tToast(\"yamlSyntaxError\")}\n                    </p>\n                    <p className=\"text-muted-foreground\">{yamlError.message}</p>\n                  </div>\n                </div>\n              )}\n              <p className=\"flex items-center gap-1 text-xs text-amber-600 dark:text-amber-400\">\n                <AlertTriangle className=\"h-3.5 w-3.5\" />\n                {t(\"unsavedChanges\")}\n              </p>\n            </div>\n          </div>\n\n          <DialogFooter className=\"px-6 py-4 border-t gap-2\">\n            <Button\n              type=\"button\"\n              variant=\"outline\"\n              onClick={handleClose}\n              disabled={isSubmitting}\n            >\n              <X className=\"h-4 w-4\" />\n              {tCommon(\"cancel\")}\n            </Button>\n            <Button\n              type=\"button\"\n              onClick={handleSave}\n              disabled={isSubmitting || !hasChanges || !!yamlError || !isEditorReady}\n            >\n              {isSubmitting ? (\n                <>\n                  <div className=\"h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent\" />\n                  {t(\"saving\")}\n                </>\n              ) : (\n                <>\n                  <Save className=\"h-4 w-4\" />\n                  {t(\"saveConfig\")}\n                </>\n              )}\n            </Button>\n          </DialogFooter>\n        </div>\n      </DialogContent>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "frontend/components/scan/engine/index.ts",
    "content": "/**\n * Scan Engine Components - Unified exports\n */\nexport { EngineDataTable } from './engine-data-table'\nexport { createEngineColumns } from './engine-columns'\nexport { EngineEditDialog } from './engine-edit-dialog'\nexport { EngineCreateDialog } from './engine-create-dialog'\n"
  },
  {
    "path": "frontend/components/scan/engine-preset-selector.tsx",
    "content": "\"use client\"\n\nimport React, { useMemo, useCallback } from \"react\"\nimport { Play, Server, Settings, Zap } from \"lucide-react\"\nimport { useTranslations } from \"next-intl\"\n\nimport { Badge } from \"@/components/ui/badge\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport { cn } from \"@/lib/utils\"\nimport { CAPABILITY_CONFIG, parseEngineCapabilities, mergeEngineConfigurations } from \"@/lib/engine-config\"\n\nimport type { ScanEngine } from \"@/types/engine.types\"\n\nexport interface EnginePreset {\n  id: string\n  label: string\n  description: string\n  icon: React.ComponentType<{ className?: string }>\n  engineIds: number[]\n}\n\ninterface EnginePresetSelectorProps {\n  engines: ScanEngine[]\n  selectedEngineIds: number[]\n  selectedPresetId: string | null\n  onPresetChange: (presetId: string | null) => void\n  onEngineIdsChange: (engineIds: number[]) => void\n  onConfigurationChange: (config: string) => void\n  disabled?: boolean\n  className?: string\n}\n\nexport function EnginePresetSelector({\n  engines,\n  selectedEngineIds,\n  selectedPresetId,\n  onPresetChange,\n  onEngineIdsChange,\n  onConfigurationChange,\n  disabled = false,\n  className,\n}: EnginePresetSelectorProps) {\n  const t = useTranslations(\"scan.initiate\")\n  const tStages = useTranslations(\"scan.progress.stages\")\n\n  // Preset definitions with precise engine filtering\n  const enginePresets = useMemo(() => {\n    if (!engines?.length) return []\n    \n    // Categorize engines by their capabilities\n    const fullScanEngines: number[] = []\n    const reconEngines: number[] = []\n    const vulnEngines: number[] = []\n    \n    engines.forEach(e => {\n      const caps = parseEngineCapabilities(e.configuration || \"\")\n      const hasRecon = caps.includes(\"subdomain_discovery\") || caps.includes(\"port_scan\") || caps.includes(\"site_scan\") || caps.includes(\"directory_scan\") || caps.includes(\"url_fetch\")\n      const hasVuln = caps.includes(\"vuln_scan\")\n      \n      if (hasRecon && hasVuln) {\n        // Full capability engine - only for full scan\n        fullScanEngines.push(e.id)\n      } else if (hasRecon && !hasVuln) {\n        // Recon only engine\n        reconEngines.push(e.id)\n      } else if (hasVuln && !hasRecon) {\n        // Vuln only engine\n        vulnEngines.push(e.id)\n      }\n    })\n    \n    return [\n      {\n        id: \"full\",\n        label: t(\"presets.fullScan\"),\n        description: t(\"presets.fullScanDesc\"),\n        icon: Zap,\n        engineIds: fullScanEngines,\n      },\n      {\n        id: \"recon\",\n        label: t(\"presets.recon\"),\n        description: t(\"presets.reconDesc\"),\n        icon: Server,\n        engineIds: reconEngines,\n      },\n      {\n        id: \"vuln\",\n        label: t(\"presets.vulnScan\"),\n        description: t(\"presets.vulnScanDesc\"),\n        icon: Play,\n        engineIds: vulnEngines,\n      },\n      {\n        id: \"custom\",\n        label: t(\"presets.custom\"),\n        description: t(\"presets.customDesc\"),\n        icon: Settings,\n        engineIds: [],\n      },\n    ]\n  }, [engines, t])\n\n  const selectedEngines = useMemo(() => {\n    if (!selectedEngineIds.length || !engines) return []\n    return engines.filter((e) => selectedEngineIds.includes(e.id))\n  }, [selectedEngineIds, engines])\n\n  const selectedCapabilities = useMemo(() => {\n    if (!selectedEngines.length) return []\n    const allCaps = new Set<string>()\n    selectedEngines.forEach((engine) => {\n      parseEngineCapabilities(engine.configuration || \"\").forEach((cap) => allCaps.add(cap))\n    })\n    return Array.from(allCaps)\n  }, [selectedEngines])\n\n  // Get currently selected preset details\n  const selectedPreset = useMemo(() => {\n    return enginePresets.find(p => p.id === selectedPresetId)\n  }, [enginePresets, selectedPresetId])\n\n  // Get engines for the selected preset\n  const presetEngines = useMemo(() => {\n    if (!selectedPreset || selectedPreset.id === \"custom\") return []\n    return engines?.filter(e => selectedPreset.engineIds.includes(e.id)) || []\n  }, [selectedPreset, engines])\n\n  // Update configuration when engines change\n  const updateConfigurationFromEngines = useCallback((engineIds: number[]) => {\n    if (!engines) return\n    const selectedEngs = engines.filter(e => engineIds.includes(e.id))\n    const mergedConfig = mergeEngineConfigurations(selectedEngs.map(e => e.configuration || \"\"))\n    onConfigurationChange(mergedConfig)\n  }, [engines, onConfigurationChange])\n\n  const handlePresetSelect = useCallback((preset: EnginePreset) => {\n    onPresetChange(preset.id)\n    if (preset.id !== \"custom\") {\n      onEngineIdsChange(preset.engineIds)\n      updateConfigurationFromEngines(preset.engineIds)\n    } else {\n      // Custom mode - keep current selection or clear\n      if (selectedEngineIds.length === 0) {\n        onConfigurationChange(\"\")\n      }\n    }\n  }, [onPresetChange, onEngineIdsChange, updateConfigurationFromEngines, selectedEngineIds.length, onConfigurationChange])\n\n  const handleEngineToggle = useCallback((engineId: number, checked: boolean) => {\n    let newEngineIds: number[]\n    if (checked) {\n      newEngineIds = [...selectedEngineIds, engineId]\n    } else {\n      newEngineIds = selectedEngineIds.filter((id) => id !== engineId)\n    }\n    onEngineIdsChange(newEngineIds)\n    updateConfigurationFromEngines(newEngineIds)\n  }, [selectedEngineIds, onEngineIdsChange, updateConfigurationFromEngines])\n\n  return (\n    <div className={cn(\"flex flex-col h-full\", className)}>\n      <div className=\"flex-1 overflow-y-auto p-6\">\n        {/* Compact preset cards */}\n        <div className=\"grid grid-cols-4 gap-3 mb-4\">\n          {enginePresets.map((preset) => {\n            const isActive = selectedPresetId === preset.id\n            const PresetIcon = preset.icon\n            const matchedEngines = preset.id === \"custom\" \n              ? [] \n              : engines?.filter(e => preset.engineIds.includes(e.id)) || []\n            \n            return (\n              <button\n                key={preset.id}\n                type=\"button\"\n                onClick={() => handlePresetSelect(preset)}\n                disabled={disabled}\n                className={cn(\n                  \"flex flex-col items-center p-3 rounded-lg border-2 text-center transition-all\",\n                  isActive\n                    ? \"border-primary bg-primary/5\"\n                    : \"border-border hover:border-primary/50 hover:bg-muted/30\",\n                  disabled && \"opacity-50 cursor-not-allowed\"\n                )}\n              >\n                <div className={cn(\n                  \"flex h-10 w-10 items-center justify-center rounded-lg mb-2\",\n                  isActive ? \"bg-primary text-primary-foreground\" : \"bg-muted\"\n                )}>\n                  <PresetIcon className=\"h-5 w-5\" />\n                </div>\n                <span className=\"text-sm font-medium\">{preset.label}</span>\n                {preset.id !== \"custom\" && (\n                  <span className=\"text-xs text-muted-foreground mt-1\">\n                    {matchedEngines.length} {t(\"presets.enginesCount\")}\n                  </span>\n                )}\n              </button>\n            )\n          })}\n        </div>\n        \n        {/* Selected preset details */}\n        {selectedPresetId && selectedPresetId !== \"custom\" && (\n          <div className=\"border rounded-lg p-4 bg-muted/10\">\n            <div className=\"flex items-start justify-between mb-3\">\n              <div>\n                <h3 className=\"font-medium\">{selectedPreset?.label}</h3>\n                <p className=\"text-sm text-muted-foreground mt-1\">{selectedPreset?.description}</p>\n              </div>\n            </div>\n            \n            {/* Capabilities */}\n            <div className=\"mb-4\">\n              <h4 className=\"text-xs font-medium text-muted-foreground mb-2\">{t(\"presets.capabilities\")}</h4>\n              <div className=\"flex flex-wrap gap-1.5\">\n                {selectedCapabilities.map((capKey) => {\n                  const config = CAPABILITY_CONFIG[capKey]\n                  return (\n                    <Badge key={capKey} variant=\"outline\" className={cn(\"text-xs\", config?.color)}>\n                      {tStages(capKey)}\n                    </Badge>\n                  )\n                })}\n              </div>\n            </div>\n            \n            {/* Engines list */}\n            <div>\n              <h4 className=\"text-xs font-medium text-muted-foreground mb-2\">{t(\"presets.usedEngines\")}</h4>\n              <div className=\"flex flex-wrap gap-2\">\n                {presetEngines.map((engine) => (\n                  <span key={engine.id} className=\"text-sm px-3 py-1.5 bg-background rounded-md border\">\n                    {engine.name}\n                  </span>\n                ))}\n              </div>\n            </div>\n          </div>\n        )}\n        \n        {/* Custom mode engine selection */}\n        {selectedPresetId === \"custom\" && (\n          <div className=\"border rounded-lg p-4 bg-muted/10\">\n            <div className=\"flex items-start justify-between mb-3\">\n              <div>\n                <h3 className=\"font-medium\">{selectedPreset?.label}</h3>\n                <p className=\"text-sm text-muted-foreground mt-1\">{selectedPreset?.description}</p>\n              </div>\n            </div>\n            \n            {/* Capabilities - dynamically calculated from selected engines */}\n            <div className=\"mb-4\">\n              <h4 className=\"text-xs font-medium text-muted-foreground mb-2\">{t(\"presets.capabilities\")}</h4>\n              <div className=\"flex flex-wrap gap-1.5\">\n                {selectedCapabilities.length > 0 ? (\n                  selectedCapabilities.map((capKey) => {\n                    const config = CAPABILITY_CONFIG[capKey]\n                    return (\n                      <Badge key={capKey} variant=\"outline\" className={cn(\"text-xs\", config?.color)}>\n                        {tStages(capKey)}\n                      </Badge>\n                    )\n                  })\n                ) : (\n                  <span className=\"text-xs text-muted-foreground\">{t(\"presets.noCapabilities\")}</span>\n                )}\n              </div>\n            </div>\n            \n            {/* Engines list - selectable */}\n            <div>\n              <h4 className=\"text-xs font-medium text-muted-foreground mb-2\">{t(\"presets.usedEngines\")}</h4>\n              <div className=\"flex flex-wrap gap-2\">\n                {engines?.map((engine) => {\n                  const isSelected = selectedEngineIds.includes(engine.id)\n                  return (\n                    <label\n                      key={engine.id}\n                      htmlFor={`preset-engine-${engine.id}`}\n                      className={cn(\n                        \"flex items-center gap-2 px-3 py-1.5 rounded-md cursor-pointer transition-all border\",\n                        isSelected\n                          ? \"bg-primary/10 border-primary/30\"\n                          : \"hover:bg-muted/50 border-border\",\n                        disabled && \"opacity-50 cursor-not-allowed\"\n                      )}\n                    >\n                      <Checkbox\n                        id={`preset-engine-${engine.id}`}\n                        checked={isSelected}\n                        onCheckedChange={(checked) => {\n                          handleEngineToggle(engine.id, checked as boolean)\n                        }}\n                        disabled={disabled}\n                        className=\"h-4 w-4\"\n                      />\n                      <span className=\"text-sm\">{engine.name}</span>\n                    </label>\n                  )\n                })}\n              </div>\n            </div>\n          </div>\n        )}\n        \n        {/* Empty state */}\n        {!selectedPresetId && (\n          <div className=\"flex flex-col items-center justify-center py-12 text-muted-foreground\">\n            <Server className=\"h-12 w-12 mb-4 opacity-50\" />\n            <p className=\"text-sm\">{t(\"presets.selectHint\")}</p>\n          </div>\n        )}\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/scan/history/index.ts",
    "content": "/**\n * Scan History Components - Unified exports\n */\nexport { ScanHistoryList } from './scan-history-list'\nexport { ScanHistoryDataTable } from './scan-history-data-table'\nexport { createScanHistoryColumns } from './scan-history-columns'\n\n"
  },
  {
    "path": "frontend/components/scan/history/scan-history-columns.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { ColumnDef } from \"@tanstack/react-table\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport { Button } from \"@/components/ui/button\"\nimport { Badge } from \"@/components/ui/badge\"\nimport type { ScanRecord, ScanStatus } from \"@/types/scan.types\"\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuSeparator,\n  DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\"\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipProvider,\n  TooltipTrigger,\n} from \"@/components/ui/tooltip\"\nimport { \n  MoreHorizontal, \n  Eye, \n  Trash2, \n  StopCircle,\n} from \"lucide-react\"\nimport { DataTableColumnHeader } from \"@/components/ui/data-table/column-header\"\nimport {\n  IconClock,\n  IconCircleCheck,\n  IconCircleX,\n  IconLoader,\n  IconWorld,\n  IconBrowser,\n  IconServer,\n  IconLink,\n  IconBug,\n} from \"@tabler/icons-react\"\n\n// Translation type definitions\nexport interface ScanHistoryTranslations {\n  columns: {\n    target: string\n    summary: string\n    engineName: string\n    workerName: string\n    createdAt: string\n    status: string\n    progress: string\n  }\n  actions: {\n    snapshot: string\n    stopScan: string\n    delete: string\n    openMenu: string\n    selectAll: string\n    selectRow: string\n  }\n  tooltips: {\n    targetDetails: string\n    viewProgress: string\n  }\n  status: {\n    cancelled: string\n    completed: string\n    failed: string\n    initiated: string\n    running: string\n  }\n  summary: {\n    subdomains: string\n    websites: string\n    ipAddresses: string\n    endpoints: string\n    vulnerabilities: string\n  }\n}\n\n/**\n * Status badge component\n */\nfunction StatusBadge({ \n  status, \n  onClick,\n  labels,\n}: { \n  status: ScanStatus\n  onClick?: () => void\n  labels: Record<ScanStatus, string>\n}) {\n  const config: Record<ScanStatus, {\n    icon: React.ComponentType<{ className?: string }>\n    variant: \"secondary\" | \"default\" | \"outline\" | \"destructive\"\n    className?: string\n  }> = {\n    cancelled: {\n      icon: IconCircleX,\n      variant: \"outline\",\n      className: \"bg-[#848d97]/10 text-[#848d97] border-[#848d97]/20 hover:bg-[#848d97]/20 transition-colors\",\n    },\n    completed: {\n      icon: IconCircleCheck,\n      variant: \"outline\",\n      className: \"bg-[#238636]/10 text-[#238636] border-[#238636]/20 hover:bg-[#238636]/20 dark:text-[#3fb950] transition-colors\",\n    },\n    failed: {\n      icon: IconCircleX,\n      variant: \"outline\",\n      className: \"bg-[#da3633]/10 text-[#da3633] border-[#da3633]/20 hover:bg-[#da3633]/20 dark:text-[#f85149] transition-colors\",\n    },\n    initiated: {\n      icon: IconClock,\n      variant: \"outline\",\n      className: \"bg-[#d29922]/10 text-[#d29922] border-[#d29922]/20 hover:bg-[#d29922]/20 transition-colors\",\n    },\n    running: {\n      icon: IconLoader,\n      variant: \"outline\",\n      className: \"bg-[#d29922]/10 text-[#d29922] border-[#d29922]/20 hover:bg-[#d29922]/20 transition-colors\",\n    },\n  }\n\n  const { icon: Icon, variant, className } = config[status]\n  const label = labels[status]\n\n  const badge = (\n    <Badge variant={variant} className={className}>\n      {(status === \"running\" || status === \"initiated\") ? (\n        <span className=\"relative flex h-2 w-2\">\n          <span className=\"absolute inline-flex h-full w-full animate-ping rounded-full bg-current opacity-75\" />\n          <span className=\"relative inline-flex h-2 w-2 rounded-full bg-current\" />\n        </span>\n      ) : (\n        <Icon className=\"h-3.5 w-3.5\" />\n      )}\n      {label}\n      {onClick && <span className=\"ml-0.5 text-xs opacity-60\">›</span>}\n    </Badge>\n  )\n\n  if (onClick) {\n    return (\n      <button \n        onClick={onClick}\n        className=\"cursor-pointer hover:scale-105 transition-transform\"\n      >\n        {badge}\n      </button>\n    )\n  }\n\n  return badge\n}\n\n// Column creation function parameter types\ninterface CreateColumnsProps {\n  formatDate: (dateString: string) => string\n  navigate: (path: string) => void\n  handleDelete: (scan: ScanRecord) => void\n  handleStop: (scan: ScanRecord) => void\n  handleViewProgress?: (scan: ScanRecord) => void\n  t: ScanHistoryTranslations\n  hideTargetColumn?: boolean\n}\n\n/**\n * Create scan history table column definitions\n */\nexport const createScanHistoryColumns = ({\n  formatDate,\n  navigate,\n  handleDelete,\n  handleStop,\n  handleViewProgress,\n  t,\n  hideTargetColumn = false,\n}: CreateColumnsProps): ColumnDef<ScanRecord>[] => {\n  const columns: ColumnDef<ScanRecord>[] = [\n  {\n    id: \"select\",\n    size: 40,\n    minSize: 40,\n    maxSize: 40,\n    enableResizing: false,\n    header: ({ table }) => (\n      <Checkbox\n        checked={\n          table.getIsAllPageRowsSelected() ||\n          (table.getIsSomePageRowsSelected() && \"indeterminate\")\n        }\n        onCheckedChange={(value) => table.toggleAllPageRowsSelected(!!value)}\n        aria-label={t.actions.selectAll}\n      />\n    ),\n    cell: ({ row }) => (\n      <Checkbox\n        checked={row.getIsSelected()}\n        onCheckedChange={(value) => row.toggleSelected(!!value)}\n        aria-label={t.actions.selectRow}\n      />\n    ),\n    enableSorting: false,\n    enableHiding: false,\n  },\n  {\n    accessorKey: \"targetName\",\n    size: 350,\n    minSize: 100,\n    meta: { title: t.columns.target },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.target} />\n    ),\n    cell: ({ row }) => {\n      const targetName = row.getValue(\"targetName\") as string\n      const targetId = row.original.target\n      \n      return (\n        <div className=\"flex-1 min-w-0\">\n          {targetId ? (\n            <Tooltip>\n              <TooltipTrigger asChild>\n                <button\n                  onClick={() => navigate(`/target/${targetId}/details`)}\n                  className=\"text-sm font-medium hover:text-primary hover:underline underline-offset-2 transition-colors cursor-pointer text-left break-all leading-relaxed whitespace-normal\"\n                >\n                  {targetName}\n                </button>\n              </TooltipTrigger>\n              <TooltipContent>{t.tooltips.targetDetails}</TooltipContent>\n            </Tooltip>\n          ) : (\n            <span className=\"text-sm font-medium break-all leading-relaxed whitespace-normal\">\n              {targetName}\n            </span>\n          )}\n        </div>\n      )\n    },\n  },\n  {\n    accessorKey: \"summary\",\n    meta: { title: t.columns.summary },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.summary} />\n    ),\n    size: 290,\n    minSize: 150,\n    cell: ({ row }) => {\n      const summary = (row.getValue(\"summary\") as {\n        subdomains: number\n        websites: number\n        endpoints: number\n        ips: number\n        vulnerabilities: {\n          total: number\n          critical: number\n          high: number\n          medium: number\n          low: number\n        }\n      }) || {}\n\n      const subdomains = summary?.subdomains ?? 0\n      const websites = summary?.websites ?? 0\n      const endpoints = summary?.endpoints ?? 0\n      const ips = summary?.ips ?? 0\n      const vulns = summary?.vulnerabilities?.total ?? 0\n\n      const badges: React.ReactNode[] = []\n\n      if (subdomains > 0) {\n        badges.push(\n          <TooltipProvider delayDuration={300} key=\"subdomains\">\n            <Tooltip>\n              <TooltipTrigger asChild>\n                <Badge \n                  variant=\"outline\"\n                  className=\"bg-blue-500/15 text-blue-600 border-blue-500/30 hover:bg-blue-500/25 dark:text-blue-400 transition-colors gap-1\"\n                >\n                  <IconWorld className=\"h-3 w-3\" />\n                  {subdomains}\n                </Badge>\n              </TooltipTrigger>\n              <TooltipContent side=\"top\">\n                <p className=\"text-xs\">{t.summary.subdomains}</p>\n              </TooltipContent>\n            </Tooltip>\n          </TooltipProvider>\n        )\n      }\n\n      if (websites > 0) {\n        badges.push(\n          <TooltipProvider delayDuration={300} key=\"websites\">\n            <Tooltip>\n              <TooltipTrigger asChild>\n                <Badge \n                  variant=\"outline\"\n                  className=\"bg-emerald-500/15 text-emerald-600 border-emerald-500/30 hover:bg-emerald-500/25 dark:text-emerald-400 transition-colors gap-1\"\n                >\n                  <IconBrowser className=\"h-3 w-3\" />\n                  {websites}\n                </Badge>\n              </TooltipTrigger>\n              <TooltipContent side=\"top\">\n                <p className=\"text-xs\">{t.summary.websites}</p>\n              </TooltipContent>\n            </Tooltip>\n          </TooltipProvider>\n        )\n      }\n\n      if (ips > 0) {\n        badges.push(\n          <TooltipProvider delayDuration={300} key=\"ips\">\n            <Tooltip>\n              <TooltipTrigger asChild>\n                <Badge \n                  variant=\"outline\"\n                  className=\"bg-orange-500/15 text-orange-600 border-orange-500/30 hover:bg-orange-500/25 dark:text-orange-400 transition-colors gap-1\"\n                >\n                  <IconServer className=\"h-3 w-3\" />\n                  {ips}\n                </Badge>\n              </TooltipTrigger>\n              <TooltipContent side=\"top\">\n                <p className=\"text-xs\">{t.summary.ipAddresses}</p>\n              </TooltipContent>\n            </Tooltip>\n          </TooltipProvider>\n        )\n      }\n\n      if (endpoints > 0) {\n        badges.push(\n          <TooltipProvider delayDuration={300} key=\"endpoints\">\n            <Tooltip>\n              <TooltipTrigger asChild>\n                <Badge \n                  variant=\"outline\"\n                  className=\"bg-violet-500/15 text-violet-600 border-violet-500/30 hover:bg-violet-500/25 dark:text-violet-400 transition-colors gap-1\"\n                >\n                  <IconLink className=\"h-3 w-3\" />\n                  {endpoints}\n                </Badge>\n              </TooltipTrigger>\n              <TooltipContent side=\"top\">\n                <p className=\"text-xs\">{t.summary.endpoints}</p>\n              </TooltipContent>\n            </Tooltip>\n          </TooltipProvider>\n        )\n      }\n\n      if (vulns > 0) {\n        badges.push(\n          <TooltipProvider delayDuration={300} key=\"vulnerabilities\">\n            <Tooltip>\n              <TooltipTrigger asChild>\n                <Badge \n                  variant=\"outline\"\n                  className=\"gap-1 bg-red-500/15 text-red-600 border-red-500/30 hover:bg-red-500/25 dark:text-red-400 transition-colors\"\n                >\n                  <IconBug className=\"h-3 w-3\" />\n                  {vulns}\n                </Badge>\n              </TooltipTrigger>\n              <TooltipContent side=\"top\">\n                <p className=\"text-xs font-medium\">\n                  {summary?.vulnerabilities?.critical ?? 0} Critical, {summary?.vulnerabilities?.high ?? 0} High, {summary?.vulnerabilities?.medium ?? 0} Medium {t.summary.vulnerabilities}\n                </p>\n              </TooltipContent>\n            </Tooltip>\n          </TooltipProvider>\n        )\n      }\n\n      return (\n        <div className=\"flex flex-wrap items-center gap-1.5\">\n          {badges.length > 0 ? (\n            badges\n          ) : (\n            <Badge\n              variant=\"outline\"\n              className=\"gap-0 bg-muted/70 text-muted-foreground/80 border-border/40 px-1.5 py-0.5 rounded-full justify-center\"\n            >\n              <span className=\"text-[11px] font-medium leading-none\">-</span>\n              <span className=\"sr-only\">No summary</span>\n            </Badge>\n          )}\n        </div>\n      )\n    },\n    enableSorting: false,\n  },\n  {\n    accessorKey: \"engineNames\",\n    size: 150,\n    minSize: 100,\n    maxSize: 200,\n    enableResizing: false,\n    meta: { title: t.columns.engineName },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.engineName} />\n    ),\n    cell: ({ row }) => {\n      const engineNames = row.getValue(\"engineNames\") as string[] | undefined\n      if (!engineNames || engineNames.length === 0) {\n        return <span className=\"text-muted-foreground text-sm\">-</span>\n      }\n      return (\n        <div className=\"flex flex-wrap gap-1\">\n          {engineNames.map((name, index) => (\n            <Badge key={index} variant=\"secondary\">\n              {name}\n            </Badge>\n          ))}\n        </div>\n      )\n    },\n  },\n  {\n    accessorKey: \"workerName\",\n    size: 120,\n    minSize: 80,\n    maxSize: 180,\n    enableResizing: false,\n    meta: { title: t.columns.workerName },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.workerName} />\n    ),\n    cell: ({ row }) => {\n      const workerName = row.getValue(\"workerName\") as string | null | undefined\n      return (\n        <Badge variant=\"outline\">\n          {workerName || \"-\"}\n        </Badge>\n      )\n    },\n  },\n  {\n    accessorKey: \"createdAt\",\n    size: 150,\n    minSize: 120,\n    maxSize: 200,\n    enableResizing: false,\n    meta: { title: t.columns.createdAt },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.createdAt} />\n    ),\n    cell: ({ row }) => {\n      const createdAt = row.getValue(\"createdAt\") as string\n      return (\n        <div className=\"text-sm text-muted-foreground\">\n          {formatDate(createdAt)}\n        </div>\n      )\n    },\n  },\n  {\n    accessorKey: \"status\",\n    size: 110,\n    minSize: 90,\n    maxSize: 130,\n    enableResizing: false,\n    meta: { title: t.columns.status },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.status} />\n    ),\n    cell: ({ row }) => {\n      const status = row.getValue(\"status\") as ScanStatus\n      return (\n        <StatusBadge \n          status={status} \n          onClick={handleViewProgress ? () => handleViewProgress(row.original) : undefined}\n          labels={t.status}\n        />\n      )\n    },\n  },\n  {\n    accessorKey: \"progress\",\n    meta: { title: t.columns.progress },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.progress} />\n    ),\n    size: 150,\n    minSize: 120,\n    maxSize: 200,\n    cell: ({ row }) => {\n      const progress = row.getValue(\"progress\") as number\n      const status = row.original.status\n      const displayProgress = status === \"completed\" ? 100 : progress\n      \n      return (\n        <div className=\"flex items-center gap-2 min-w-[120px]\">\n          <div className=\"flex-1 h-2 bg-primary/10 rounded-full overflow-hidden border border-border\">\n            <div \n              className={`h-full transition-all ${\n                status === \"completed\" ? \"bg-[#238636]\" : \n                status === \"failed\" ? \"bg-[#da3633]\" : \n                status === \"running\" ? \"bg-[#d29922] progress-striped\" : \n                status === \"cancelled\" ? \"bg-[#848d97]\" :\n                status === \"initiated\" ? \"bg-[#d29922] progress-striped\" :\n                \"bg-muted-foreground/80\"\n              }`}\n              style={{ width: `${displayProgress}%` }}\n            />\n          </div>\n          <span className=\"text-xs text-muted-foreground font-mono w-10\">\n            {displayProgress}%\n          </span>\n        </div>\n      )\n    },\n    enableSorting: false,\n  },\n  {\n    id: \"actions\",\n    size: 120,\n    minSize: 100,\n    maxSize: 150,\n    enableResizing: false,\n    cell: ({ row }) => {\n      const scan = row.original\n      const canStop = scan.status === 'running' || scan.status === 'initiated'\n      \n      return (\n        <div className=\"flex items-center gap-1\">\n          <Button\n            variant=\"ghost\"\n            size=\"sm\"\n            className=\"h-8 px-2 text-xs\"\n            onClick={() => navigate(`/scan/history/${scan.id}/`)}\n          >\n            <Eye className=\"h-3.5 w-3.5 mr-1\" />\n            {t.actions.snapshot}\n          </Button>\n          \n          <DropdownMenu>\n            <DropdownMenuTrigger asChild>\n              <Button\n                variant=\"ghost\"\n                className=\"flex h-8 w-8 p-0 data-[state=open]:bg-muted\"\n              >\n                <MoreHorizontal className=\"h-4 w-4\" />\n                <span className=\"sr-only\">{t.actions.openMenu}</span>\n              </Button>\n            </DropdownMenuTrigger>\n            <DropdownMenuContent align=\"end\">\n              {canStop && (\n                <>\n                  <DropdownMenuItem\n                    onClick={() => handleStop(scan)}\n                    className=\"text-primary focus:text-primary\"\n                  >\n                    <StopCircle />\n                    {t.actions.stopScan}\n                  </DropdownMenuItem>\n                  <DropdownMenuSeparator />\n                </>\n              )}\n              <DropdownMenuItem\n                onClick={() => handleDelete(scan)}\n                className=\"text-destructive focus:text-destructive\"\n              >\n                <Trash2 />\n                {t.actions.delete}\n              </DropdownMenuItem>\n            </DropdownMenuContent>\n          </DropdownMenu>\n        </div>\n      )\n    },\n    enableSorting: false,\n    enableHiding: false,\n  },\n]\n\n  // Filter out targetName column if hideTargetColumn is true\n  if (hideTargetColumn) {\n    return columns.filter(col => (col as any).accessorKey !== 'targetName')\n  }\n\n  return columns\n}\n"
  },
  {
    "path": "frontend/components/scan/history/scan-history-data-table.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport type { ColumnDef } from \"@tanstack/react-table\"\nimport { useTranslations } from \"next-intl\"\nimport { IconSearch, IconLoader2 } from \"@tabler/icons-react\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { UnifiedDataTable } from \"@/components/ui/data-table\"\nimport type { ScanRecord } from \"@/types/scan.types\"\nimport type { PaginationInfo } from \"@/types/common.types\"\n\ninterface ScanHistoryDataTableProps {\n  data: ScanRecord[]\n  columns: ColumnDef<ScanRecord>[]\n  onAddNew?: () => void\n  onBulkDelete?: () => void\n  onSelectionChange?: (selectedRows: ScanRecord[]) => void\n  searchPlaceholder?: string\n  searchValue?: string\n  onSearch?: (value: string) => void\n  isSearching?: boolean\n  addButtonText?: string\n  pagination?: { pageIndex: number; pageSize: number }\n  setPagination?: React.Dispatch<React.SetStateAction<{ pageIndex: number; pageSize: number }>>\n  paginationInfo?: PaginationInfo\n  onPaginationChange?: (pagination: { pageIndex: number; pageSize: number }) => void\n  hideToolbar?: boolean\n  hidePagination?: boolean\n  pageSizeOptions?: number[]\n}\n\n/**\n * Scan history data table component\n * Uses UnifiedDataTable unified component\n */\nexport function ScanHistoryDataTable({\n  data = [],\n  columns,\n  onAddNew,\n  onBulkDelete,\n  onSelectionChange,\n  searchPlaceholder,\n  searchValue,\n  onSearch,\n  isSearching = false,\n  addButtonText,\n  pagination: externalPagination,\n  setPagination: setExternalPagination,\n  paginationInfo,\n  onPaginationChange,\n  hideToolbar = false,\n  hidePagination = false,\n  pageSizeOptions,\n}: ScanHistoryDataTableProps) {\n  const t = useTranslations(\"common.status\")\n  const tScan = useTranslations(\"scan.history\")\n  const tActions = useTranslations(\"common.actions\")\n  \n  // Search local state\n  const [localSearchValue, setLocalSearchValue] = React.useState(searchValue || \"\")\n\n  React.useEffect(() => {\n    setLocalSearchValue(searchValue || \"\")\n  }, [searchValue])\n\n  const handleSearchSubmit = () => {\n    if (onSearch) {\n      onSearch(localSearchValue)\n    }\n  }\n\n  const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n    if (e.key === \"Enter\") {\n      handleSearchSubmit()\n    }\n  }\n\n  return (\n    <UnifiedDataTable\n      data={data}\n      columns={columns}\n      getRowId={(row) => String(row.id)}\n      // Pagination\n      pagination={externalPagination}\n      setPagination={setExternalPagination}\n      paginationInfo={paginationInfo}\n      onPaginationChange={onPaginationChange}\n      hidePagination={hidePagination}\n      pageSizeOptions={pageSizeOptions}\n      // Selection\n      onSelectionChange={onSelectionChange}\n      // Bulk operations\n      onBulkDelete={onBulkDelete}\n      bulkDeleteLabel={tActions(\"delete\")}\n      onAddNew={onAddNew}\n      addButtonLabel={addButtonText || tScan(\"title\")}\n      // Toolbar\n      hideToolbar={hideToolbar}\n      // Empty state\n      emptyMessage={t(\"noData\")}\n      // Auto column sizing\n      enableAutoColumnSizing\n      // Custom search box\n      toolbarLeft={\n        <div className=\"flex items-center space-x-2\">\n          <Input\n            placeholder={searchPlaceholder || tScan(\"searchPlaceholder\")}\n            value={localSearchValue}\n            onChange={(e) => setLocalSearchValue(e.target.value)}\n            onKeyDown={handleKeyDown}\n            className=\"h-8 max-w-sm\"\n          />\n          <Button variant=\"outline\" size=\"sm\" onClick={handleSearchSubmit} disabled={isSearching}>\n            {isSearching ? (\n              <IconLoader2 className=\"h-4 w-4 animate-spin\" />\n            ) : (\n              <IconSearch className=\"h-4 w-4\" />\n            )}\n          </Button>\n        </div>\n      }\n    />\n  )\n}\n"
  },
  {
    "path": "frontend/components/scan/history/scan-history-list.tsx",
    "content": "\"use client\"\n\nimport React, { useState, useMemo } from \"react\"\nimport { useRouter } from \"next/navigation\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport { ScanHistoryDataTable } from \"./scan-history-data-table\"\nimport { createScanHistoryColumns } from \"./scan-history-columns\"\nimport { getDateLocale } from \"@/lib/date-utils\"\nimport type { ScanRecord } from \"@/types/scan.types\"\nimport type { ColumnDef } from \"@tanstack/react-table\"\nimport { DataTableSkeleton } from \"@/components/ui/data-table-skeleton\"\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\"\nimport { toast } from \"sonner\"\nimport { useScans } from \"@/hooks/use-scans\"\nimport { deleteScan, bulkDeleteScans, stopScan, getScan } from \"@/services/scan.service\"\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\"\nimport { ScanProgressDialog, buildScanProgressData, type ScanProgressData } from \"@/components/scan/scan-progress-dialog\"\n\n/**\n * Scan history list component\n * Used to display and manage scan history records\n */\ninterface ScanHistoryListProps {\n  hideToolbar?: boolean\n  targetId?: number  // Filter by target ID\n  pageSize?: number  // Custom page size\n  hideTargetColumn?: boolean  // Hide target column (useful when showing scans for a specific target)\n  pageSizeOptions?: number[]  // Custom page size options\n  hidePagination?: boolean  // Hide pagination completely\n}\n\nexport function ScanHistoryList({ hideToolbar = false, targetId, pageSize: customPageSize, hideTargetColumn = false, pageSizeOptions, hidePagination = false }: ScanHistoryListProps) {\n  const queryClient = useQueryClient()\n  const [selectedScans, setSelectedScans] = useState<ScanRecord[]>([])\n  const [deleteDialogOpen, setDeleteDialogOpen] = useState(false)\n  const [scanToDelete, setScanToDelete] = useState<ScanRecord | null>(null)\n  const [bulkDeleteDialogOpen, setBulkDeleteDialogOpen] = useState(false)\n  const [stopDialogOpen, setStopDialogOpen] = useState(false)\n  const [scanToStop, setScanToStop] = useState<ScanRecord | null>(null)\n\n  // Internationalization\n  const tColumns = useTranslations(\"columns\")\n  const tCommon = useTranslations(\"common\")\n  const tTooltips = useTranslations(\"tooltips\")\n  const tScan = useTranslations(\"scan\")\n  const tToast = useTranslations(\"toast\")\n  const tConfirm = useTranslations(\"common.confirm\")\n  const locale = useLocale()\n\n  // Build translation object\n  const translations = useMemo(() => ({\n    columns: {\n      target: tColumns(\"scanHistory.target\"),\n      summary: tColumns(\"scanHistory.summary\"),\n      engineName: tColumns(\"scanHistory.engineName\"),\n      workerName: tColumns(\"scanHistory.workerName\"),\n      createdAt: tColumns(\"common.createdAt\"),\n      status: tColumns(\"common.status\"),\n      progress: tColumns(\"scanHistory.progress\"),\n    },\n    actions: {\n      snapshot: tCommon(\"actions.snapshot\"),\n      stopScan: tScan(\"stopScan\"),\n      delete: tCommon(\"actions.delete\"),\n      openMenu: tCommon(\"actions.openMenu\"),\n      selectAll: tCommon(\"actions.selectAll\"),\n      selectRow: tCommon(\"actions.selectRow\"),\n    },\n    tooltips: {\n      targetDetails: tTooltips(\"targetDetails\"),\n      viewProgress: tTooltips(\"viewProgress\"),\n    },\n    status: {\n      cancelled: tCommon(\"status.cancelled\"),\n      completed: tCommon(\"status.completed\"),\n      failed: tCommon(\"status.failed\"),\n      initiated: tCommon(\"status.pending\"),\n      running: tCommon(\"status.running\"),\n    },\n    summary: {\n      subdomains: tColumns(\"scanHistory.subdomains\"),\n      websites: tColumns(\"scanHistory.websites\"),\n      ipAddresses: tColumns(\"scanHistory.ipAddresses\"),\n      endpoints: tColumns(\"scanHistory.endpoints\"),\n      vulnerabilities: tColumns(\"scanHistory.vulnerabilities\"),\n    },\n  }), [tColumns, tCommon, tTooltips, tScan])\n  \n  // Progress dialog state\n  const [progressDialogOpen, setProgressDialogOpen] = useState(false)\n  const [progressData, setProgressData] = useState<ScanProgressData | null>(null)\n  \n  // Pagination state\n  const [pagination, setPagination] = useState({\n    pageIndex: 0,\n    pageSize: customPageSize || 10,\n  })\n\n  // Search state\n  const [searchQuery, setSearchQuery] = useState(\"\")\n  const [isSearching, setIsSearching] = useState(false)\n\n  const handleSearchChange = (value: string) => {\n    setIsSearching(true)\n    setSearchQuery(value)\n    setPagination((prev) => ({ ...prev, pageIndex: 0 }))\n  }\n  \n  // Get scan list data\n  const { data, isLoading, isFetching, error } = useScans({\n    page: pagination.pageIndex + 1, // API page numbers start from 1\n    pageSize: pagination.pageSize,\n    search: searchQuery || undefined,\n    target: targetId,\n  })\n\n  // Reset search state when request completes\n  React.useEffect(() => {\n    if (!isFetching && isSearching) {\n      setIsSearching(false)\n    }\n  }, [isFetching, isSearching])\n  \n  // Scan list data\n  const scans = data?.results || []\n  \n  // Delete single scan mutation\n  const deleteMutation = useMutation({\n    mutationFn: deleteScan,\n    onSuccess: () => {\n      // Refresh list data\n      queryClient.invalidateQueries({ queryKey: ['scans'] })\n    },\n  })\n  \n  // Bulk delete mutation\n  const bulkDeleteMutation = useMutation({\n    mutationFn: bulkDeleteScans,\n    onSuccess: () => {\n      // Refresh list data\n      queryClient.invalidateQueries({ queryKey: ['scans'] })\n      // Clear selected items\n      setSelectedScans([])\n    },\n  })\n  \n  // Stop scan mutation\n  const stopMutation = useMutation({\n    mutationFn: stopScan,\n    onSuccess: () => {\n      // Refresh list data\n      queryClient.invalidateQueries({ queryKey: ['scans'] })\n    },\n  })\n\n  // Helper function - format date\n  const formatDate = (dateString: string): string => {\n    return new Date(dateString).toLocaleString(getDateLocale(locale), {\n      year: \"numeric\",\n      month: \"numeric\",\n      day: \"numeric\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\",\n      hour12: false,\n    })\n  }\n\n  // Navigation function\n  const router = useRouter()\n  const navigate = (path: string) => {\n    router.push(path)\n  }\n\n  // Handle delete scan record\n  const handleDeleteScan = (scan: ScanRecord) => {\n    setScanToDelete(scan)\n    setDeleteDialogOpen(true)\n  }\n\n  // Confirm delete scan record\n  const confirmDelete = async () => {\n    if (!scanToDelete) return\n\n    setDeleteDialogOpen(false)\n    \n    try {\n      await deleteMutation.mutateAsync(scanToDelete.id)\n      toast.success(tToast(\"deletedScanRecord\", { name: scanToDelete.targetName }))\n    } catch (error) {\n      toast.error(tToast(\"deleteFailed\"))\n      console.error('Delete failed:', error)\n    } finally {\n      setScanToDelete(null)\n    }\n  }\n\n  // Handle bulk delete\n  const handleBulkDelete = () => {\n    if (selectedScans.length === 0) {\n      return\n    }\n    setBulkDeleteDialogOpen(true)\n  }\n  \n  // Handle stop scan\n  const handleStopScan = (scan: ScanRecord) => {\n    setScanToStop(scan)\n    setStopDialogOpen(true)\n  }\n  \n  // Confirm stop scan\n  const confirmStop = async () => {\n    if (!scanToStop) return\n\n    setStopDialogOpen(false)\n    \n    try {\n      await stopMutation.mutateAsync(scanToStop.id)\n      toast.success(tToast(\"stoppedScan\", { name: scanToStop.targetName }))\n    } catch (error) {\n      toast.error(tToast(\"stopFailed\"))\n      console.error('Stop scan failed:', error)\n    } finally {\n      setScanToStop(null)\n    }\n  }\n  \n  // View scan progress (get latest data for single scan)\n  const handleViewProgress = async (scan: ScanRecord) => {\n    try {\n      // Get latest data for single scan, instead of refreshing entire list\n      const freshScan = await getScan(scan.id)\n      const progressData = buildScanProgressData(freshScan)\n      setProgressData(progressData)\n      setProgressDialogOpen(true)\n    } catch (error) {\n      // If fetch fails, use current data\n      const progressData = buildScanProgressData(scan)\n      setProgressData(progressData)\n      setProgressDialogOpen(true)\n    }\n  }\n\n  // Confirm bulk delete\n  const confirmBulkDelete = async () => {\n    if (selectedScans.length === 0) return\n\n    const deletedIds = selectedScans.map(scan => scan.id)\n    \n    setBulkDeleteDialogOpen(false)\n    \n    try {\n      const result = await bulkDeleteMutation.mutateAsync(deletedIds)\n      toast.success(result.message || tToast(\"bulkDeleteSuccess\", { count: result.deletedCount }))\n    } catch (error) {\n      toast.error(tToast(\"bulkDeleteFailed\"))\n      console.error('Bulk delete failed:', error)\n    }\n  }\n\n\n  // Handle pagination change\n  const handlePaginationChange = (newPagination: { pageIndex: number; pageSize: number }) => {\n    setPagination(newPagination)\n  }\n\n  // Create column definitions\n  const scanColumns = useMemo(\n    () =>\n      createScanHistoryColumns({\n        formatDate,\n        navigate,\n        handleDelete: handleDeleteScan,\n        handleStop: handleStopScan,\n        handleViewProgress,\n        t: translations,\n        hideTargetColumn,\n      }),\n    [navigate, translations, hideTargetColumn]\n  )\n\n  // Error handling\n  if (error) {\n    return (\n      <div className=\"flex flex-col items-center justify-center py-12\">\n        <p className=\"text-destructive mb-4\">{tScan(\"history.loadFailed\")}</p>\n        <button \n          onClick={() => queryClient.invalidateQueries({ queryKey: ['scans'] })}\n          className=\"px-4 py-2 bg-primary text-primary-foreground rounded-md hover:bg-primary/90\"\n        >\n          {tScan(\"history.retry\")}\n        </button>\n      </div>\n    )\n  }\n\n  // Loading state\n  if (isLoading) {\n    return (\n      <DataTableSkeleton\n        toolbarButtonCount={2}\n        rows={6}\n        columns={6}\n        withPadding={false}\n      />\n    )\n  }\n\n  return (\n    <>\n      <ScanHistoryDataTable\n        data={scans}\n        columns={scanColumns as ColumnDef<ScanRecord>[]}\n        onBulkDelete={hideToolbar ? undefined : handleBulkDelete}\n        onSelectionChange={setSelectedScans}\n        searchPlaceholder={tScan(\"history.searchPlaceholder\")}\n        searchValue={searchQuery}\n        onSearch={handleSearchChange}\n        isSearching={isSearching}\n        pagination={pagination}\n        setPagination={setPagination}\n        paginationInfo={{\n          total: data?.total || 0,\n          page: data?.page || 1,\n          pageSize: data?.pageSize || 10,\n          totalPages: data?.totalPages || 1,\n        }}\n        onPaginationChange={handlePaginationChange}\n        hideToolbar={hideToolbar}\n        pageSizeOptions={pageSizeOptions}\n        hidePagination={hidePagination}\n      />\n\n      {/* Delete confirmation dialog */}\n      <AlertDialog open={deleteDialogOpen} onOpenChange={setDeleteDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{tConfirm(\"deleteTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {tConfirm(\"deleteScanMessage\", { name: scanToDelete?.targetName ?? \"\" })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"actions.cancel\")}</AlertDialogCancel>\n            <AlertDialogAction \n              onClick={confirmDelete} \n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n            >\n              {tCommon(\"actions.delete\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n\n      {/* Bulk delete confirmation dialog */}\n      <AlertDialog open={bulkDeleteDialogOpen} onOpenChange={setBulkDeleteDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{tConfirm(\"bulkDeleteTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {tConfirm(\"bulkDeleteScanMessage\", { count: selectedScans.length })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          {/* Scan record list container */}\n          <div className=\"mt-2 p-2 bg-muted rounded-md max-h-96 overflow-y-auto\">\n            <ul className=\"text-sm space-y-1\">\n              {selectedScans.map((scan) => (\n                <li key={scan.id} className=\"flex items-center justify-between\">\n                  <span className=\"font-medium\">{scan.targetName}</span>\n                  <span className=\"text-muted-foreground text-xs\">{scan.engineNames?.join(\", \") || \"-\"}</span>\n                </li>\n              ))}\n            </ul>\n          </div>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"actions.cancel\")}</AlertDialogCancel>\n            <AlertDialogAction \n              onClick={confirmBulkDelete} \n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n            >\n              {tConfirm(\"deleteScanCount\", { count: selectedScans.length })}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n\n      {/* Stop scan confirmation dialog */}\n      <AlertDialog open={stopDialogOpen} onOpenChange={setStopDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{tConfirm(\"stopScanTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {tConfirm(\"stopScanMessage\", { name: scanToStop?.targetName ?? \"\" })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"actions.cancel\")}</AlertDialogCancel>\n            <AlertDialogAction \n              onClick={confirmStop} \n              className=\"bg-primary text-primary-foreground hover:bg-primary/90\"\n            >\n              {tConfirm(\"stopScanAction\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n\n      {/* Scan progress dialog */}\n      <ScanProgressDialog\n        open={progressDialogOpen}\n        onOpenChange={setProgressDialogOpen}\n        data={progressData}\n      />\n    </>\n  )\n}\n"
  },
  {
    "path": "frontend/components/scan/history/scan-history-stat-cards.tsx",
    "content": "\"use client\"\n\nimport { useTranslations } from \"next-intl\"\nimport { Card, CardAction, CardDescription, CardFooter, CardHeader, CardTitle } from \"@/components/ui/card\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Skeleton } from \"@/components/ui/skeleton\"\nimport { \n  IconRadar, \n  IconPlayerPlay, \n  IconBug,\n  IconStack2\n} from \"@tabler/icons-react\"\nimport { useScanStatistics } from \"@/hooks/use-scans\"\n\nfunction StatCard({\n  title,\n  value,\n  icon,\n  loading,\n  footer,\n  badgeText,\n}: {\n  title: string\n  value: string | number\n  icon: React.ReactNode\n  loading?: boolean\n  footer: string\n  badgeText: string\n}) {\n  return (\n    <Card className=\"@container/card\">\n      <CardHeader>\n        <CardDescription className=\"flex items-center gap-2\">\n          {icon}\n          {title}\n        </CardDescription>\n        {loading ? (\n          <Skeleton className=\"h-8 w-24\" />\n        ) : (\n          <CardTitle className=\"text-2xl font-semibold tabular-nums @[250px]/card:text-3xl\">\n            {value}\n          </CardTitle>\n        )}\n        <CardAction>\n          <Badge variant=\"outline\">{badgeText}</Badge>\n        </CardAction>\n      </CardHeader>\n      <CardFooter className=\"flex-col items-start gap-1.5 text-sm\">\n        <div className=\"text-muted-foreground\">{footer}</div>\n      </CardFooter>\n    </Card>\n  )\n}\n\nexport function ScanHistoryStatCards() {\n  const { data, isLoading } = useScanStatistics()\n  const t = useTranslations(\"scan.history.stats\")\n\n  return (\n    <div className=\"*:data-[slot=card]:from-primary/5 *:data-[slot=card]:to-card dark:*:data-[slot=card]:bg-card grid grid-cols-1 gap-4 *:data-[slot=card]:bg-gradient-to-t *:data-[slot=card]:shadow-xs @xl/main:grid-cols-2 @5xl/main:grid-cols-4\">\n      <StatCard\n        title={t(\"totalScans\")}\n        value={data?.total ?? 0}\n        icon={<IconRadar className=\"size-4\" />}\n        loading={isLoading}\n        footer={t(\"allScanTasks\")}\n        badgeText={t(\"all\")}\n      />\n      <StatCard\n        title={t(\"running\")}\n        value={data?.running ?? 0}\n        icon={<IconPlayerPlay className=\"size-4\" />}\n        loading={isLoading}\n        footer={t(\"runningScans\")}\n        badgeText={t(\"all\")}\n      />\n      <StatCard\n        title={t(\"vulnsFound\")}\n        value={data?.totalVulns ?? 0}\n        icon={<IconBug className=\"size-4\" />}\n        loading={isLoading}\n        footer={t(\"completedScansFound\")}\n        badgeText={t(\"all\")}\n      />\n      <StatCard\n        title={t(\"assetsFound\")}\n        value={data?.totalAssets ?? 0}\n        icon={<IconStack2 className=\"size-4\" />}\n        loading={isLoading}\n        footer={t(\"assetTypes\")}\n        badgeText={t(\"all\")}\n      />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/scan/history/scan-overview.tsx",
    "content": "\"use client\"\n\nimport React, { useState } from \"react\"\nimport Link from \"next/link\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport {\n  Globe,\n  Network,\n  Server,\n  Link2,\n  FolderOpen,\n  AlertTriangle,\n  Clock,\n  Calendar,\n  ChevronRight,\n  Target,\n  CheckCircle2,\n  XCircle,\n  Loader2,\n  Cpu,\n  HardDrive,\n} from \"lucide-react\"\nimport {\n  IconCircleCheck,\n  IconCircleX,\n  IconClock,\n} from \"@tabler/icons-react\"\nimport { Card, CardContent, CardHeader, CardTitle } from \"@/components/ui/card\"\nimport { Skeleton } from \"@/components/ui/skeleton\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Switch } from \"@/components/ui/switch\"\nimport { Label } from \"@/components/ui/label\"\nimport { Separator } from \"@/components/ui/separator\"\nimport { Tabs, TabsList, TabsTrigger } from \"@/components/ui/tabs\"\nimport { useScan } from \"@/hooks/use-scans\"\nimport { useScanLogs } from \"@/hooks/use-scan-logs\"\nimport { ScanLogList } from \"@/components/scan/scan-log-list\"\nimport { YamlEditor } from \"@/components/ui/yaml-editor\"\nimport { getDateLocale } from \"@/lib/date-utils\"\nimport { cn } from \"@/lib/utils\"\nimport type { StageStatus } from \"@/types/scan.types\"\n\ninterface ScanOverviewProps {\n  scanId: number\n}\n\n/**\n * Scan overview component\n * Displays statistics cards for the scan results\n */\n// Pulsing dot animation\nfunction PulsingDot({ className }: { className?: string }) {\n  return (\n    <span className={cn(\"relative flex h-3 w-3\", className)}>\n      <span className=\"absolute inline-flex h-full w-full animate-ping rounded-full bg-current opacity-75\" />\n      <span className=\"relative inline-flex h-3 w-3 rounded-full bg-current\" />\n    </span>\n  )\n}\n\n// Stage status icon\nfunction StageStatusIcon({ status }: { status: StageStatus }) {\n  switch (status) {\n    case \"completed\":\n      return <IconCircleCheck className=\"h-5 w-5 text-[#238636] dark:text-[#3fb950]\" />\n    case \"running\":\n      return <PulsingDot className=\"text-[#d29922]\" />\n    case \"failed\":\n      return <IconCircleX className=\"h-5 w-5 text-[#da3633] dark:text-[#f85149]\" />\n    case \"cancelled\":\n      return <IconCircleX className=\"h-5 w-5 text-[#848d97]\" />\n    default:\n      return <IconClock className=\"h-5 w-5 text-muted-foreground\" />\n  }\n}\n\n// Format duration (seconds -> readable string)\nfunction formatStageDuration(seconds?: number): string | undefined {\n  if (seconds === undefined || seconds === null) return undefined\n  if (seconds < 1) return \"<1s\"\n  if (seconds < 60) return `${Math.round(seconds)}s`\n  const minutes = Math.floor(seconds / 60)\n  const secs = Math.round(seconds % 60)\n  return secs > 0 ? `${minutes}m ${secs}s` : `${minutes}m`\n}\n\n// Status priority for sorting (lower = higher priority)\nconst STAGE_STATUS_PRIORITY: Record<StageStatus, number> = {\n  running: 0,\n  pending: 1,\n  completed: 2,\n  failed: 3,\n  cancelled: 4,\n}\n\nexport function ScanOverview({ scanId }: ScanOverviewProps) {\n  const t = useTranslations(\"scan.history.overview\")\n  const tStatus = useTranslations(\"scan.history.status\")\n  const tProgress = useTranslations(\"scan.progress\")\n  const locale = useLocale()\n\n  const { data: scan, isLoading, error } = useScan(scanId)\n  \n  // Check if scan is running (for log polling)\n  const isRunning = scan?.status === 'running' || scan?.status === 'initiated'\n  \n  // Auto-refresh state (default: on when running)\n  const [autoRefresh, setAutoRefresh] = useState(true)\n  \n  // Tab state for logs/config\n  const [activeTab, setActiveTab] = useState<'logs' | 'config'>('logs')\n  \n  // Logs hook\n  const { logs, loading: logsLoading } = useScanLogs({\n    scanId,\n    enabled: !!scan,\n    pollingInterval: isRunning && autoRefresh ? 3000 : 0,\n  })\n\n  // Format date helper\n  const formatDate = (dateString: string | undefined): string => {\n    if (!dateString) return \"-\"\n    return new Date(dateString).toLocaleString(getDateLocale(locale), {\n      year: \"numeric\",\n      month: \"short\",\n      day: \"numeric\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n    })\n  }\n\n  // Calculate duration\n  const formatDuration = (startedAt: string | undefined, completedAt: string | undefined): string => {\n    if (!startedAt) return \"-\"\n    const start = new Date(startedAt)\n    const end = completedAt ? new Date(completedAt) : new Date()\n    const diffMs = end.getTime() - start.getTime()\n    const diffMins = Math.floor(diffMs / 60000)\n    const diffHours = Math.floor(diffMins / 60)\n    const remainingMins = diffMins % 60\n\n    if (diffHours > 0) {\n      return `${diffHours}h ${remainingMins}m`\n    }\n    return `${diffMins}m`\n  }\n\n  // Status style configuration (consistent with scan-history-columns)\n  const SCAN_STATUS_STYLES: Record<string, string> = {\n    running: \"bg-[#d29922]/10 text-[#d29922] border-[#d29922]/20\",\n    cancelled: \"bg-[#848d97]/10 text-[#848d97] border-[#848d97]/20\",\n    completed: \"bg-[#238636]/10 text-[#238636] border-[#238636]/20 dark:text-[#3fb950]\",\n    failed: \"bg-[#da3633]/10 text-[#da3633] border-[#da3633]/20 dark:text-[#f85149]\",\n    initiated: \"bg-[#d29922]/10 text-[#d29922] border-[#d29922]/20\",\n    pending: \"bg-[#d29922]/10 text-[#d29922] border-[#d29922]/20\",\n  }\n\n  // Get status icon\n  const getStatusIcon = (status: string) => {\n    switch (status) {\n      case \"completed\":\n        return { icon: CheckCircle2, animate: false }\n      case \"running\":\n        return { icon: Loader2, animate: true }\n      case \"failed\":\n        return { icon: XCircle, animate: false }\n      case \"cancelled\":\n        return { icon: XCircle, animate: false }\n      case \"pending\":\n      case \"initiated\":\n        return { icon: Loader2, animate: true }\n      default:\n        return { icon: Clock, animate: false }\n    }\n  }\n\n  if (isLoading) {\n    return (\n      <div className=\"space-y-6\">\n        {/* Stats cards skeleton */}\n        <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n          {[...Array(6)].map((_, i) => (\n            <Card key={i}>\n              <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n                <Skeleton className=\"h-4 w-24\" />\n                <Skeleton className=\"h-4 w-4\" />\n              </CardHeader>\n              <CardContent>\n                <Skeleton className=\"h-8 w-16\" />\n              </CardContent>\n            </Card>\n          ))}\n        </div>\n      </div>\n    )\n  }\n\n  if (error || !scan) {\n    return (\n      <div className=\"flex flex-col items-center justify-center py-12\">\n        <AlertTriangle className=\"h-10 w-10 text-destructive mb-4\" />\n        <p className=\"text-muted-foreground\">{t(\"loadError\")}</p>\n      </div>\n    )\n  }\n\n  // Use type assertion for extended properties\n  const scanAny = scan as any\n  const summary = scanAny.summary || {}\n  const vulnSummary = summary.vulnerabilities || { total: 0, critical: 0, high: 0, medium: 0, low: 0 }\n  const statusIconConfig = getStatusIcon(scan.status)\n  const StatusIcon = statusIconConfig.icon\n  const statusStyle = SCAN_STATUS_STYLES[scan.status] || \"bg-muted text-muted-foreground\"\n  const targetId = scanAny.target  // Target ID\n  const targetName = scan.targetName  // Target name\n  const startedAt = scanAny.startedAt || scan.createdAt\n  const completedAt = scanAny.completedAt\n\n  const assetCards = [\n    {\n      title: t(\"cards.websites\"),\n      value: summary.websites || 0,\n      icon: Globe,\n      href: `/scan/history/${scanId}/websites/`,\n    },\n    {\n      title: t(\"cards.subdomains\"),\n      value: summary.subdomains || 0,\n      icon: Network,\n      href: `/scan/history/${scanId}/subdomain/`,\n    },\n    {\n      title: t(\"cards.ips\"),\n      value: summary.ips || 0,\n      icon: Server,\n      href: `/scan/history/${scanId}/ip-addresses/`,\n    },\n    {\n      title: t(\"cards.urls\"),\n      value: summary.endpoints || 0,\n      icon: Link2,\n      href: `/scan/history/${scanId}/endpoints/`,\n    },\n    {\n      title: t(\"cards.directories\"),\n      value: summary.directories || 0,\n      icon: FolderOpen,\n      href: `/scan/history/${scanId}/directories/`,\n    },\n  ]\n\n  return (\n    <div className=\"flex flex-col gap-6 flex-1 min-h-0\">\n      {/* Scan info + Status */}\n      <div className=\"flex items-center justify-between\">\n        <div className=\"flex items-center gap-6 text-sm text-muted-foreground\">\n          {/* Target */}\n          {targetId && targetName && (\n            <Link\n              href={`/target/${targetId}/overview/`}\n              className=\"flex items-center gap-1.5 hover:text-foreground transition-colors\"\n            >\n              <Target className=\"h-4 w-4\" />\n              <span>{targetName}</span>\n            </Link>\n          )}\n          {/* Started at */}\n          <div className=\"flex items-center gap-1.5\">\n            <Calendar className=\"h-4 w-4\" />\n            <span>{t(\"startedAt\")}: {formatDate(startedAt)}</span>\n          </div>\n          {/* Duration */}\n          <div className=\"flex items-center gap-1.5\">\n            <Clock className=\"h-4 w-4\" />\n            <span>{t(\"duration\")}: {formatDuration(startedAt, completedAt)}</span>\n          </div>\n          {/* Engine */}\n          {scan.engineNames && scan.engineNames.length > 0 && (\n            <div className=\"flex items-center gap-1.5\">\n              <Cpu className=\"h-4 w-4\" />\n              <span>{scan.engineNames.join(\", \")}</span>\n            </div>\n          )}\n          {/* Worker */}\n          {scan.workerName && (\n            <div className=\"flex items-center gap-1.5\">\n              <HardDrive className=\"h-4 w-4\" />\n              <span>{scan.workerName}</span>\n            </div>\n          )}\n        </div>\n        {/* Status badge */}\n        <Badge variant=\"outline\" className={statusStyle}>\n          <StatusIcon className={`h-3.5 w-3.5 mr-1.5 ${statusIconConfig.animate ? 'animate-spin' : ''}`} />\n          {tStatus(scan.status)}\n        </Badge>\n      </div>\n\n      {/* Asset statistics cards */}\n      <div>\n        <h3 className=\"text-lg font-semibold mb-4\">{t(\"assetsTitle\")}</h3>\n        <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-5\">\n          {assetCards.map((card) => (\n            <Link key={card.title} href={card.href}>\n              <Card className=\"hover:border-primary/50 transition-colors cursor-pointer\">\n                <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n                  <CardTitle className=\"text-sm font-medium\">{card.title}</CardTitle>\n                  <card.icon className=\"h-4 w-4 text-muted-foreground\" />\n                </CardHeader>\n                <CardContent>\n                  <div className=\"text-2xl font-bold\">{card.value.toLocaleString()}</div>\n                </CardContent>\n              </Card>\n            </Link>\n          ))}\n        </div>\n      </div>\n\n      {/* Stage Progress + Logs - Left-Right Split Layout */}\n      <div className=\"grid gap-4 md:grid-cols-[280px_1fr] flex-1 min-h-0\">\n        {/* Left Column: Stage Progress + Vulnerability Stats */}\n        <div className=\"flex flex-col gap-4 min-h-0\">\n          {/* Stage Progress */}\n          <Card className=\"flex-1 min-h-0\">\n            <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-3\">\n              <CardTitle className=\"text-sm font-medium\">{t(\"stagesTitle\")}</CardTitle>\n              {scan.stageProgress && (\n                <span className=\"text-xs text-muted-foreground\">\n                  {Object.values(scan.stageProgress).filter((p: any) => p.status === \"completed\").length}/\n                  {Object.keys(scan.stageProgress).length} {t(\"stagesCompleted\")}\n                </span>\n              )}\n            </CardHeader>\n            <CardContent className=\"pt-0 flex flex-col flex-1 min-h-0\">\n              {scan.stageProgress && Object.keys(scan.stageProgress).length > 0 ? (\n                <div className=\"space-y-1 flex-1 min-h-0 overflow-y-auto pr-1\">\n                  {Object.entries(scan.stageProgress)\n                    .sort(([, a], [, b]) => {\n                      const progressA = a as any\n                      const progressB = b as any\n                      const priorityA = STAGE_STATUS_PRIORITY[progressA.status as StageStatus] ?? 99\n                      const priorityB = STAGE_STATUS_PRIORITY[progressB.status as StageStatus] ?? 99\n                      if (priorityA !== priorityB) {\n                        return priorityA - priorityB\n                      }\n                      return (progressA.order ?? 0) - (progressB.order ?? 0)\n                    })\n                    .map(([stageName, progress]) => {\n                      const stageProgress = progress as any\n                      const isRunning = stageProgress.status === \"running\"\n                      return (\n                        <div\n                          key={stageName}\n                          className={cn(\n                            \"flex items-center justify-between py-2 px-2 rounded-md transition-colors text-sm\",\n                            isRunning && \"bg-[#d29922]/10 border border-[#d29922]/30\",\n                            stageProgress.status === \"completed\" && \"text-muted-foreground\",\n                            stageProgress.status === \"failed\" && \"bg-[#da3633]/10 text-[#da3633]\",\n                            stageProgress.status === \"cancelled\" && \"text-muted-foreground\",\n                          )}\n                        >\n                          <div className=\"flex items-center gap-2 min-w-0\">\n                            <StageStatusIcon status={stageProgress.status} />\n                            <span className={cn(\"truncate\", isRunning && \"font-medium text-foreground\")}>\n                              {tProgress(`stages.${stageName}`)}\n                            </span>\n                          </div>\n                          <span className=\"text-xs text-muted-foreground font-mono shrink-0 ml-2\">\n                            {stageProgress.status === \"completed\" && stageProgress.duration\n                              ? formatStageDuration(stageProgress.duration)\n                              : stageProgress.status === \"running\"\n                                ? tProgress(\"stage_running\")\n                                : stageProgress.status === \"pending\"\n                                  ? \"--\"\n                                  : \"\"}\n                          </span>\n                        </div>\n                      )\n                    })}\n                </div>\n              ) : (\n                <div className=\"text-sm text-muted-foreground text-center py-4\">\n                  {t(\"noStages\")}\n                </div>\n              )}\n            </CardContent>\n          </Card>\n\n          {/* Vulnerability Stats - Compact */}\n          <Link href={`/scan/history/${scanId}/vulnerabilities/`} className=\"block\">\n            <Card className=\"hover:border-primary/50 transition-colors cursor-pointer\">\n              <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n                <CardTitle className=\"text-sm font-medium\">{t(\"vulnerabilitiesTitle\")}</CardTitle>\n                <ChevronRight className=\"h-4 w-4 text-muted-foreground\" />\n              </CardHeader>\n              <CardContent className=\"pt-0\">\n                <div className=\"flex items-center gap-3 flex-wrap\">\n                  <div className=\"flex items-center gap-1.5\">\n                    <div className=\"w-2.5 h-2.5 rounded-full bg-red-500\" />\n                    <span className=\"text-sm font-medium\">{vulnSummary.critical}</span>\n                  </div>\n                  <div className=\"flex items-center gap-1.5\">\n                    <div className=\"w-2.5 h-2.5 rounded-full bg-orange-500\" />\n                    <span className=\"text-sm font-medium\">{vulnSummary.high}</span>\n                  </div>\n                  <div className=\"flex items-center gap-1.5\">\n                    <div className=\"w-2.5 h-2.5 rounded-full bg-yellow-500\" />\n                    <span className=\"text-sm font-medium\">{vulnSummary.medium}</span>\n                  </div>\n                  <div className=\"flex items-center gap-1.5\">\n                    <div className=\"w-2.5 h-2.5 rounded-full bg-blue-500\" />\n                    <span className=\"text-sm font-medium\">{vulnSummary.low}</span>\n                  </div>\n                  <span className=\"text-xs text-muted-foreground ml-auto\">\n                    {t(\"totalVulns\", { count: vulnSummary.total })}\n                  </span>\n                </div>\n              </CardContent>\n            </Card>\n          </Link>\n        </div>\n\n        {/* Right Column: Logs / Config */}\n        <div className=\"flex flex-col min-h-0 rounded-lg overflow-hidden border\">\n          {/* Tab Header */}\n          <div className=\"flex items-center justify-between px-3 py-2 bg-muted/30 border-b shrink-0\">\n            <Tabs value={activeTab} onValueChange={(v) => setActiveTab(v as 'logs' | 'config')}>\n              <TabsList variant=\"underline\" className=\"h-8 gap-3\">\n                <TabsTrigger variant=\"underline\" value=\"logs\" className=\"text-xs\">{t(\"logsTitle\")}</TabsTrigger>\n                <TabsTrigger variant=\"underline\" value=\"config\" className=\"text-xs\">{t(\"configTitle\")}</TabsTrigger>\n              </TabsList>\n            </Tabs>\n            {/* Auto-refresh toggle (only for logs tab when running) */}\n            {activeTab === 'logs' && isRunning && (\n              <div className=\"flex items-center gap-2\">\n                <Switch\n                  id=\"log-auto-refresh\"\n                  checked={autoRefresh}\n                  onCheckedChange={setAutoRefresh}\n                  className=\"scale-75\"\n                />\n                <Label htmlFor=\"log-auto-refresh\" className=\"text-xs cursor-pointer\">\n                  {t(\"autoRefresh\")}\n                </Label>\n              </div>\n            )}\n          </div>\n          \n          {/* Tab Content */}\n          <div className=\"flex-1 min-h-0\">\n            {activeTab === 'logs' ? (\n              <ScanLogList logs={logs} loading={logsLoading} />\n            ) : (\n              <div className=\"h-full\">\n                {scan.yamlConfiguration ? (\n                  <YamlEditor\n                    value={scan.yamlConfiguration}\n                    onChange={() => {}}\n                    disabled={true}\n                    height=\"100%\"\n                  />\n                ) : (\n                  <div className=\"flex items-center justify-center h-full text-muted-foreground text-sm\">\n                    {t(\"noConfig\")}\n                  </div>\n                )}\n              </div>\n            )}\n          </div>\n          \n          {/* Bottom status bar (only for logs tab) */}\n          {activeTab === 'logs' && (\n            <div className=\"flex items-center px-4 py-2 bg-muted/50 border-t text-xs text-muted-foreground shrink-0\">\n              <span>{logs.length} 条记录</span>\n              {isRunning && autoRefresh && (\n                <>\n                  <Separator orientation=\"vertical\" className=\"h-3 mx-3\" />\n                  <span className=\"flex items-center gap-1.5\">\n                    <span className=\"size-1.5 rounded-full bg-green-500 animate-pulse\" />\n                    每 3 秒刷新\n                  </span>\n                </>\n              )}\n            </div>\n          )}\n        </div>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/scan/initiate-scan-dialog.tsx",
    "content": "\"use client\"\n\nimport React, { useState, useMemo, useCallback } from \"react\"\nimport { Play, Server, Settings, ChevronLeft, ChevronRight } from \"lucide-react\"\nimport { useTranslations } from \"next-intl\"\n\nimport { Button } from \"@/components/ui/button\"\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogHeader,\n  DialogTitle,\n} from \"@/components/ui/dialog\"\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\"\nimport { LoadingSpinner } from \"@/components/loading-spinner\"\nimport { EnginePresetSelector } from \"./engine-preset-selector\"\nimport { ScanConfigEditor } from \"./scan-config-editor\"\n\nimport type { Organization } from \"@/types/organization.types\"\n\nimport { initiateScan } from \"@/services/scan.service\"\nimport { toast } from \"sonner\"\nimport { useEngines } from \"@/hooks/use-engines\"\n\ninterface InitiateScanDialogProps {\n  organization?: Organization | null\n  organizationId?: number\n  targetId?: number\n  targetName?: string\n  open: boolean\n  onOpenChange: (open: boolean) => void\n  onSuccess?: () => void\n}\n\nexport function InitiateScanDialog({\n  organization,\n  organizationId,\n  targetId,\n  targetName,\n  open,\n  onOpenChange,\n  onSuccess,\n}: InitiateScanDialogProps) {\n  const t = useTranslations(\"scan.initiate\")\n  const tToast = useTranslations(\"toast\")\n  const [step, setStep] = useState(1)\n  const [selectedEngineIds, setSelectedEngineIds] = useState<number[]>([])\n  const [isSubmitting, setIsSubmitting] = useState(false)\n  const [selectedPresetId, setSelectedPresetId] = useState<string | null>(null)\n  \n  // Configuration state management\n  const [configuration, setConfiguration] = useState(\"\")\n  const [isConfigEdited, setIsConfigEdited] = useState(false)\n  const [isYamlValid, setIsYamlValid] = useState(true)\n  const [showOverwriteConfirm, setShowOverwriteConfirm] = useState(false)\n  const [pendingConfigChange, setPendingConfigChange] = useState<string | null>(null)\n\n  const { data: engines } = useEngines()\n\n  const steps = [\n    { id: 1, title: t(\"steps.selectEngine\"), icon: Server },\n    { id: 2, title: t(\"steps.editConfig\"), icon: Settings },\n  ]\n\n  const selectedEngines = useMemo(() => {\n    if (!selectedEngineIds.length || !engines) return []\n    return engines.filter((e) => selectedEngineIds.includes(e.id))\n  }, [selectedEngineIds, engines])\n\n  // Handle configuration change from preset selector (may need confirmation)\n  const handlePresetConfigChange = useCallback((value: string) => {\n    if (isConfigEdited && configuration !== value) {\n      setPendingConfigChange(value)\n      setShowOverwriteConfirm(true)\n    } else {\n      setConfiguration(value)\n      setIsConfigEdited(false)\n    }\n  }, [isConfigEdited, configuration])\n\n  // Handle manual config editing\n  const handleManualConfigChange = useCallback((value: string) => {\n    setConfiguration(value)\n    setIsConfigEdited(true)\n  }, [])\n\n  const handleEngineIdsChange = useCallback((engineIds: number[]) => {\n    setSelectedEngineIds(engineIds)\n  }, [])\n\n  const handleOverwriteConfirm = () => {\n    if (pendingConfigChange !== null) {\n      setConfiguration(pendingConfigChange)\n      setIsConfigEdited(false)\n    }\n    setShowOverwriteConfirm(false)\n    setPendingConfigChange(null)\n  }\n\n  const handleOverwriteCancel = () => {\n    setShowOverwriteConfirm(false)\n    setPendingConfigChange(null)\n  }\n\n  const handleYamlValidationChange = (isValid: boolean) => {\n    setIsYamlValid(isValid)\n  }\n\n  const handleInitiate = async () => {\n    if (selectedEngineIds.length === 0) {\n      toast.error(tToast(\"noEngineSelected\"))\n      return\n    }\n    if (!configuration.trim()) {\n      toast.error(tToast(\"emptyConfig\"))\n      return\n    }\n    if (!organizationId && !targetId) {\n      toast.error(tToast(\"paramError\"), { description: tToast(\"paramErrorDesc\") })\n      return\n    }\n    setIsSubmitting(true)\n    try {\n      const response = await initiateScan({\n        organizationId,\n        targetId,\n        configuration,\n        engineIds: selectedEngineIds,\n        engineNames: selectedEngines.map(e => e.name),\n      })\n      \n      // 后端返回 201 说明成功创建扫描任务\n      const scanCount = response.scans?.length || response.count || 0\n      toast.success(tToast(\"scanInitiated\"), {\n        description: response.message || tToast(\"scanInitiatedDesc\", { count: scanCount }),\n      })\n      onSuccess?.()\n      onOpenChange(false)\n      setSelectedEngineIds([])\n      setConfiguration(\"\")\n      setIsConfigEdited(false)\n    } catch (err: unknown) {\n      console.error(\"Failed to initiate scan:\", err)\n      const error = err as { response?: { data?: { error?: { code?: string; message?: string } } } }\n      toast.error(tToast(\"initiateScanFailed\"), {\n        description: error?.response?.data?.error?.message || (err instanceof Error ? err.message : tToast(\"unknownError\")),\n      })\n    } finally {\n      setIsSubmitting(false)\n    }\n  }\n\n  const handleOpenChange = (newOpen: boolean) => {\n    if (!isSubmitting) {\n      onOpenChange(newOpen)\n      if (!newOpen) {\n        setStep(1)\n        setSelectedPresetId(null)\n        setSelectedEngineIds([])\n        setConfiguration(\"\")\n        setIsConfigEdited(false)\n      }\n    }\n  }\n\n  const canProceedToStep2 = selectedPresetId !== null && selectedEngineIds.length > 0\n  const canSubmit = selectedEngineIds.length > 0 && configuration.trim().length > 0 && isYamlValid\n\n  return (\n    <Dialog open={open} onOpenChange={handleOpenChange}>\n      <DialogContent className=\"max-w-[90vw] sm:max-w-[900px] p-0 gap-0\">\n        <DialogHeader className=\"px-6 pt-6 pb-4\">\n          <div className=\"flex items-center justify-between\">\n            <div>\n              <DialogTitle className=\"flex items-center gap-2\">\n                <Play className=\"h-5 w-5\" />\n                {t(\"title\")}\n              </DialogTitle>\n              <DialogDescription className=\"mt-1\">\n                {targetName ? (\n                  <>{t(\"targetDesc\")} <span className=\"font-medium text-foreground\">{targetName}</span></>\n                ) : (\n                  <>{t(\"orgDesc\")} <span className=\"font-medium text-foreground\">{organization?.name}</span></>\n                )}\n              </DialogDescription>\n            </div>\n            {/* Step indicator */}\n            <div className=\"text-sm text-muted-foreground mr-8\">\n              {t(\"stepIndicator\", { current: step, total: steps.length })}\n            </div>\n          </div>\n        </DialogHeader>\n\n        <div className=\"border-t h-[480px] overflow-hidden\">\n          {/* Step 1: Select preset/engines */}\n          {step === 1 && engines && (\n            <EnginePresetSelector\n              engines={engines}\n              selectedEngineIds={selectedEngineIds}\n              selectedPresetId={selectedPresetId}\n              onPresetChange={setSelectedPresetId}\n              onEngineIdsChange={handleEngineIdsChange}\n              onConfigurationChange={handlePresetConfigChange}\n              disabled={isSubmitting}\n            />\n          )}\n\n          {/* Step 2: Edit configuration */}\n          {step === 2 && (\n            <ScanConfigEditor\n              configuration={configuration}\n              onChange={handleManualConfigChange}\n              onValidationChange={handleYamlValidationChange}\n              selectedEngines={selectedEngines}\n              isConfigEdited={isConfigEdited}\n              disabled={isSubmitting}\n            />\n          )}\n        </div>\n\n        <div className=\"px-6 py-4 border-t flex items-center justify-between\">\n          <div className=\"text-sm text-muted-foreground\">\n            {step === 1 && selectedEngineIds.length > 0 && (\n              <span className=\"text-primary\">{t(\"selectedCount\", { count: selectedEngineIds.length })}</span>\n            )}\n          </div>\n          <div className=\"flex gap-2\">\n            {step > 1 && (\n              <Button variant=\"outline\" onClick={() => setStep(step - 1)} disabled={isSubmitting}>\n                <ChevronLeft className=\"h-4 w-4 mr-1\" />\n                {t(\"back\")}\n              </Button>\n            )}\n            {step === 1 ? (\n              <Button onClick={() => setStep(2)} disabled={!canProceedToStep2}>\n                {t(\"next\")}\n                <ChevronRight className=\"h-4 w-4 ml-1\" />\n              </Button>\n            ) : (\n              <Button onClick={handleInitiate} disabled={!canSubmit || isSubmitting}>\n                {isSubmitting ? (\n                  <>\n                    <LoadingSpinner />\n                    {t(\"initiating\")}\n                  </>\n                ) : (\n                  <>\n                    <Play className=\"h-4 w-4\" />\n                    {t(\"startScan\")}\n                  </>\n                )}\n              </Button>\n            )}\n          </div>\n        </div>\n      </DialogContent>\n      \n      {/* Overwrite confirmation dialog */}\n      <AlertDialog open={showOverwriteConfirm} onOpenChange={setShowOverwriteConfirm}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{t(\"overwriteConfirm.title\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {t(\"overwriteConfirm.description\")}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel onClick={handleOverwriteCancel}>\n              {t(\"overwriteConfirm.cancel\")}\n            </AlertDialogCancel>\n            <AlertDialogAction onClick={handleOverwriteConfirm}>\n              {t(\"overwriteConfirm.confirm\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "frontend/components/scan/quick-scan-dialog.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { useTranslations } from \"next-intl\"\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from \"@/components/ui/dialog\"\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\"\nimport { Button } from \"@/components/ui/button\"\nimport { Textarea } from \"@/components/ui/textarea\"\nimport { LoadingSpinner } from \"@/components/loading-spinner\"\nimport { cn } from \"@/lib/utils\"\nimport { toast } from \"sonner\"\nimport { Zap, AlertCircle, ChevronRight, ChevronLeft, Target, Server, Settings } from \"lucide-react\"\nimport { quickScan } from \"@/services/scan.service\"\nimport { TargetValidator } from \"@/lib/target-validator\"\nimport { useEngines } from \"@/hooks/use-engines\"\nimport { EnginePresetSelector } from \"./engine-preset-selector\"\nimport { ScanConfigEditor } from \"./scan-config-editor\"\n\ninterface QuickScanDialogProps {\n  trigger?: React.ReactNode\n}\n\nexport function QuickScanDialog({ trigger }: QuickScanDialogProps) {\n  const t = useTranslations(\"quickScan\")\n  const [open, setOpen] = React.useState(false)\n  const [isSubmitting, setIsSubmitting] = React.useState(false)\n  const [step, setStep] = React.useState(1)\n  \n  const [targetInput, setTargetInput] = React.useState(\"\")\n  const [selectedEngineIds, setSelectedEngineIds] = React.useState<number[]>([])\n  const [selectedPresetId, setSelectedPresetId] = React.useState<string | null>(null)\n  \n  // Configuration state management\n  const [configuration, setConfiguration] = React.useState(\"\")\n  const [isConfigEdited, setIsConfigEdited] = React.useState(false)\n  const [isYamlValid, setIsYamlValid] = React.useState(true)\n  const [showOverwriteConfirm, setShowOverwriteConfirm] = React.useState(false)\n  const [pendingConfigChange, setPendingConfigChange] = React.useState<string | null>(null)\n  \n  const { data: engines } = useEngines()\n  \n  const lineNumbersRef = React.useRef<HTMLDivElement | null>(null)\n  \n  const handleTextareaScroll = (e: React.UIEvent<HTMLTextAreaElement>) => {\n    if (lineNumbersRef.current) {\n      lineNumbersRef.current.scrollTop = e.currentTarget.scrollTop\n    }\n  }\n  \n  const validationResults = React.useMemo(() => {\n    const lines = targetInput.split('\\n')\n    return TargetValidator.validateInputBatch(lines)\n  }, [targetInput])\n  \n  const validInputs = validationResults.filter(r => r.isValid && !r.isEmptyLine)\n  const invalidInputs = validationResults.filter(r => !r.isValid)\n  const hasErrors = invalidInputs.length > 0\n  \n  const selectedEngines = React.useMemo(() => {\n    if (!selectedEngineIds.length || !engines) return []\n    return engines.filter(e => selectedEngineIds.includes(e.id))\n  }, [selectedEngineIds, engines])\n  \n  const resetForm = () => {\n    setTargetInput(\"\")\n    setSelectedEngineIds([])\n    setSelectedPresetId(null)\n    setConfiguration(\"\")\n    setIsConfigEdited(false)\n    setStep(1)\n  }\n  \n  const handleClose = (isOpen: boolean) => {\n    setOpen(isOpen)\n    if (!isOpen) resetForm()\n  }\n  \n  // Handle configuration change from preset selector (may need confirmation)\n  const handlePresetConfigChange = React.useCallback((value: string) => {\n    if (isConfigEdited && configuration !== value) {\n      setPendingConfigChange(value)\n      setShowOverwriteConfirm(true)\n    } else {\n      setConfiguration(value)\n      setIsConfigEdited(false)\n    }\n  }, [isConfigEdited, configuration])\n  \n  // Handle manual config editing\n  const handleManualConfigChange = React.useCallback((value: string) => {\n    setConfiguration(value)\n    setIsConfigEdited(true)\n  }, [])\n  \n  const handleEngineIdsChange = React.useCallback((engineIds: number[]) => {\n    setSelectedEngineIds(engineIds)\n  }, [])\n  \n  const handleOverwriteConfirm = () => {\n    if (pendingConfigChange !== null) {\n      setConfiguration(pendingConfigChange)\n      setIsConfigEdited(false)\n    }\n    setShowOverwriteConfirm(false)\n    setPendingConfigChange(null)\n  }\n  \n  const handleOverwriteCancel = () => {\n    setShowOverwriteConfirm(false)\n    setPendingConfigChange(null)\n  }\n  \n  const handleYamlValidationChange = (isValid: boolean) => {\n    setIsYamlValid(isValid)\n  }\n  \n  const canProceedToStep2 = validInputs.length > 0 && !hasErrors\n  const canProceedToStep3 = selectedPresetId !== null && selectedEngineIds.length > 0\n  const canSubmit = selectedEngineIds.length > 0 && configuration.trim().length > 0 && isYamlValid\n  \n  const handleNext = () => {\n    if (step === 1 && canProceedToStep2) setStep(2)\n    else if (step === 2 && canProceedToStep3) setStep(3)\n  }\n  \n  const handleBack = () => {\n    if (step > 1) setStep(step - 1)\n  }\n  \n  const steps = [\n    { id: 1, title: t(\"step1Title\"), icon: Target },\n    { id: 2, title: t(\"step2Title\"), icon: Server },\n    { id: 3, title: t(\"step3Title\"), icon: Settings },\n  ]\n  \n  const handleSubmit = async () => {\n    if (validInputs.length === 0) {\n      toast.error(t(\"toast.noValidTarget\"))\n      return\n    }\n    if (hasErrors) {\n      toast.error(t(\"toast.hasInvalidInputs\", { count: invalidInputs.length }))\n      return\n    }\n    if (selectedEngineIds.length === 0) {\n      toast.error(t(\"toast.selectEngine\"))\n      return\n    }\n    if (!configuration.trim()) {\n      toast.error(t(\"toast.emptyConfig\"))\n      return\n    }\n    \n    const targets = validInputs.map(r => r.originalInput)\n    \n    setIsSubmitting(true)\n    try {\n      const response = await quickScan({\n        targets: targets.map(name => ({ name })),\n        configuration,\n        engineIds: selectedEngineIds,\n        engineNames: selectedEngines.map(e => e.name),\n      })\n      \n      const { targetStats, scans, count } = response\n      const scanCount = scans?.length || count || 0\n      \n      toast.success(t(\"toast.createSuccess\", { count: scanCount }), {\n        description: targetStats.failed > 0 \n          ? t(\"toast.createSuccessDesc\", { created: targetStats.created, failed: targetStats.failed })\n          : undefined\n      })\n      handleClose(false)\n    } catch (error: unknown) {\n      const err = error as { response?: { data?: { error?: { code?: string; message?: string }; detail?: string } } }\n      toast.error(err?.response?.data?.detail || err?.response?.data?.error?.message || t(\"toast.createFailed\"))\n    } finally {\n      setIsSubmitting(false)\n    }\n  }\n  \n  return (\n    <Dialog open={open} onOpenChange={handleClose}>\n      <DialogTrigger asChild>\n        {trigger || (\n          <div className=\"relative group\">\n            <div className=\"absolute -inset-[1px] rounded-md overflow-hidden\">\n              <div className=\"absolute inset-0 bg-gradient-to-r from-transparent via-primary to-transparent animate-border-flow\" />\n            </div>\n            <Button variant=\"outline\" size=\"sm\" className=\"gap-1.5 relative bg-background border-primary/20\">\n              <Zap className=\"h-4 w-4 text-primary\" />\n              {t(\"title\")}\n            </Button>\n          </div>\n        )}\n      </DialogTrigger>\n      <DialogContent className=\"max-w-[90vw] sm:max-w-[900px] p-0 gap-0\">\n        <DialogHeader className=\"px-6 pt-6 pb-4\">\n          <div className=\"flex items-center justify-between\">\n            <div>\n              <DialogTitle className=\"flex items-center gap-2\">\n                <Zap className=\"h-5 w-5 text-primary\" />\n                {t(\"title\")}\n              </DialogTitle>\n              <DialogDescription className=\"mt-1\">\n                {t(\"description\")}\n              </DialogDescription>\n            </div>\n            {/* Step indicator */}\n            <div className=\"text-sm text-muted-foreground mr-8\">\n              {t(\"stepIndicator\", { current: step, total: steps.length })}\n            </div>\n          </div>\n        </DialogHeader>\n\n        <div className=\"border-t h-[480px] overflow-hidden\">\n          {/* Step 1: Target input */}\n          {step === 1 && (\n            <div className=\"flex flex-col h-full\">\n              <div className=\"px-4 py-3 border-b bg-muted/30 shrink-0\">\n                <h3 className=\"text-sm leading-6\">\n                  <span className=\"font-medium\">{t(\"scanTargets\")}</span>\n                  <span className=\"text-muted-foreground\">：{t(\"supportedFormats\")}</span>\n                </h3>\n              </div>\n              <div className=\"flex-1 flex flex-col overflow-hidden\">\n                <div className=\"flex-1 flex overflow-hidden\">\n                  <div className=\"flex-shrink-0 w-10 bg-muted/30\">\n                    <div ref={lineNumbersRef} className=\"py-3 px-2 text-right font-mono text-xs text-muted-foreground leading-[1.5] h-full overflow-y-auto scrollbar-hide\">\n                      {Array.from({ length: Math.max(targetInput.split('\\n').length, 20) }, (_, i) => (\n                        <div key={i + 1} className=\"h-[21px]\">{i + 1}</div>\n                      ))}\n                    </div>\n                  </div>\n                  <div className=\"flex-1 overflow-hidden\">\n                    <Textarea \n                      value={targetInput} \n                      onChange={(e) => setTargetInput(e.target.value)} \n                      onScroll={handleTextareaScroll} \n                      placeholder={t(\"targetPlaceholder\")} \n                      className=\"font-mono h-full overflow-y-auto resize-none border-0 rounded-none focus-visible:ring-0 focus-visible:ring-offset-0 text-sm py-3 px-3\" \n                      style={{ lineHeight: '21px' }} \n                      autoFocus \n                    />\n                  </div>\n                </div>\n                {hasErrors && (\n                  <div className=\"px-3 py-2 border-t bg-destructive/5 max-h-[60px] overflow-y-auto\">\n                    {invalidInputs.slice(0, 2).map((r) => (\n                      <div key={r.lineNumber} className=\"flex items-center gap-1 text-xs text-destructive\">\n                        <AlertCircle className=\"h-3 w-3 shrink-0\" />\n                        <span>{t(\"lineError\", { lineNumber: r.lineNumber, error: r.error || \"\" })}</span>\n                      </div>\n                    ))}\n                    {invalidInputs.length > 2 && <div className=\"text-xs text-muted-foreground\">{t(\"moreErrors\", { count: invalidInputs.length - 2 })}</div>}\n                  </div>\n                )}\n              </div>\n            </div>\n          )}\n\n          {/* Step 2: Select preset/engines */}\n          {step === 2 && engines && (\n            <EnginePresetSelector\n              engines={engines}\n              selectedEngineIds={selectedEngineIds}\n              selectedPresetId={selectedPresetId}\n              onPresetChange={setSelectedPresetId}\n              onEngineIdsChange={handleEngineIdsChange}\n              onConfigurationChange={handlePresetConfigChange}\n              disabled={isSubmitting}\n            />\n          )}\n\n          {/* Step 3: Edit configuration */}\n          {step === 3 && (\n            <ScanConfigEditor\n              configuration={configuration}\n              onChange={handleManualConfigChange}\n              onValidationChange={handleYamlValidationChange}\n              selectedEngines={selectedEngines}\n              isConfigEdited={isConfigEdited}\n              disabled={isSubmitting}\n            />\n          )}\n        </div>\n\n        <DialogFooter className=\"px-4 py-4 border-t !flex !items-center !justify-between\">\n          <div className=\"text-sm\">\n            {step === 1 && validInputs.length > 0 && (\n              <span className=\"text-primary\">{t(\"validTargets\", { count: validInputs.length })}</span>\n            )}\n            {step === 1 && hasErrors && (\n              <span className=\"text-destructive ml-2\">{t(\"invalidTargets\", { count: invalidInputs.length })}</span>\n            )}\n            {step === 2 && selectedEngineIds.length > 0 && (\n              <span className=\"text-primary\">{t(\"selectedCount\", { count: selectedEngineIds.length })}</span>\n            )}\n          </div>\n          <div className=\"flex gap-2\">\n            {step > 1 && (\n              <Button variant=\"outline\" onClick={handleBack} disabled={isSubmitting}>\n                <ChevronLeft className=\"h-4 w-4 mr-1\" />\n                {t(\"back\")}\n              </Button>\n            )}\n            {step < 3 ? (\n              <Button \n                onClick={handleNext} \n                disabled={step === 1 ? !canProceedToStep2 : !canProceedToStep3}\n              >\n                {t(\"next\")}\n                <ChevronRight className=\"h-4 w-4 ml-1\" />\n              </Button>\n            ) : (\n              <Button onClick={handleSubmit} disabled={!canSubmit || isSubmitting}>\n                {isSubmitting ? (\n                  <>\n                    <LoadingSpinner />\n                    {t(\"creating\")}\n                  </>\n                ) : (\n                  <>\n                    <Zap className=\"h-4 w-4\" />\n                    {t(\"startScan\")}\n                  </>\n                )}\n              </Button>\n            )}\n          </div>\n        </DialogFooter>\n      </DialogContent>\n      \n      {/* Overwrite confirmation dialog */}\n      <AlertDialog open={showOverwriteConfirm} onOpenChange={setShowOverwriteConfirm}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{t(\"overwriteConfirm.title\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {t(\"overwriteConfirm.description\")}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel onClick={handleOverwriteCancel}>\n              {t(\"overwriteConfirm.cancel\")}\n            </AlertDialogCancel>\n            <AlertDialogAction onClick={handleOverwriteConfirm}>\n              {t(\"overwriteConfirm.confirm\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "frontend/components/scan/scan-config-editor.tsx",
    "content": "\"use client\"\n\nimport React, { useMemo } from \"react\"\nimport { useTranslations } from \"next-intl\"\n\nimport { Badge } from \"@/components/ui/badge\"\nimport { YamlEditor } from \"@/components/ui/yaml-editor\"\nimport { cn } from \"@/lib/utils\"\nimport { CAPABILITY_CONFIG, parseEngineCapabilities } from \"@/lib/engine-config\"\n\nimport type { ScanEngine } from \"@/types/engine.types\"\n\ninterface ScanConfigEditorProps {\n  configuration: string\n  onChange: (value: string) => void\n  onValidationChange?: (isValid: boolean) => void\n  selectedEngines?: ScanEngine[]\n  selectedCapabilities?: string[]\n  isConfigEdited?: boolean\n  disabled?: boolean\n  showCapabilities?: boolean\n  className?: string\n}\n\nexport function ScanConfigEditor({\n  configuration,\n  onChange,\n  onValidationChange,\n  selectedEngines = [],\n  selectedCapabilities: propCapabilities,\n  isConfigEdited = false,\n  disabled = false,\n  showCapabilities = true,\n  className,\n}: ScanConfigEditorProps) {\n  const t = useTranslations(\"scan.initiate\")\n  const tStages = useTranslations(\"scan.progress.stages\")\n\n  // Calculate capabilities from selected engines if not provided\n  const capabilities = useMemo(() => {\n    if (propCapabilities) return propCapabilities\n    if (!selectedEngines.length) return []\n    const allCaps = new Set<string>()\n    selectedEngines.forEach((engine) => {\n      parseEngineCapabilities(engine.configuration || \"\").forEach((cap) => allCaps.add(cap))\n    })\n    return Array.from(allCaps)\n  }, [selectedEngines, propCapabilities])\n\n  return (\n    <div className={cn(\"flex flex-col h-full\", className)}>\n      {/* Capabilities header */}\n      {showCapabilities && (\n        <div className=\"px-4 py-2 border-b bg-muted/30 flex items-center gap-2 shrink-0\">\n          {capabilities.length > 0 && (\n            <div className=\"flex flex-wrap gap-1\">\n              {capabilities.map((capKey) => {\n                const config = CAPABILITY_CONFIG[capKey]\n                return (\n                  <Badge key={capKey} variant=\"outline\" className={cn(\"text-xs py-0\", config?.color)}>\n                    {tStages(capKey)}\n                  </Badge>\n                )\n              })}\n            </div>\n          )}\n          {isConfigEdited && (\n            <Badge variant=\"outline\" className=\"ml-auto text-xs\">\n              {t(\"configEdited\")}\n            </Badge>\n          )}\n        </div>\n      )}\n      \n      {/* YAML Editor */}\n      <div className=\"flex-1 overflow-hidden\">\n        <YamlEditor\n          value={configuration}\n          onChange={onChange}\n          disabled={disabled}\n          onValidationChange={onValidationChange}\n        />\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/scan/scan-log-list.tsx",
    "content": "\"use client\"\n\nimport { useMemo, useRef } from \"react\"\nimport { AnsiLogViewer } from \"@/components/settings/system-logs\"\nimport type { ScanLog } from \"@/services/scan.service\"\n\ninterface ScanLogListProps {\n  logs: ScanLog[]\n  loading?: boolean\n}\n\n/**\n * 格式化时间为 HH:mm:ss\n */\nfunction formatTime(isoString: string): string {\n  try {\n    const date = new Date(isoString)\n    const h = String(date.getHours()).padStart(2, '0')\n    const m = String(date.getMinutes()).padStart(2, '0')\n    const s = String(date.getSeconds()).padStart(2, '0')\n    return `${h}:${m}:${s}`\n  } catch {\n    return isoString\n  }\n}\n\n/**\n * 扫描日志列表组件\n * 复用 AnsiLogViewer 组件\n */\nexport function ScanLogList({ logs, loading }: ScanLogListProps) {\n  // 稳定的 content 引用，只有内容真正变化时才更新\n  const contentRef = useRef('')\n  const lastLogCountRef = useRef(0)\n  const lastLogIdRef = useRef<number | null>(null)\n  \n  // 将日志转换为纯文本格式\n  const content = useMemo(() => {\n    if (logs.length === 0) return ''\n    \n    // 检查是否真正需要更新\n    const lastLog = logs[logs.length - 1]\n    if (\n      logs.length === lastLogCountRef.current &&\n      lastLog?.id === lastLogIdRef.current\n    ) {\n      // 日志没有变化，返回缓存的 content\n      return contentRef.current\n    }\n    \n    // 更新缓存\n    lastLogCountRef.current = logs.length\n    lastLogIdRef.current = lastLog?.id ?? null\n    \n    const newContent = logs.map(log => {\n      const time = formatTime(log.createdAt)\n      const levelTag = log.level.toUpperCase()\n      return `[${time}] [${levelTag}] ${log.content}`\n    }).join('\\n')\n    \n    contentRef.current = newContent\n    return newContent\n  }, [logs])\n  \n  if (loading && logs.length === 0) {\n    return (\n      <div className=\"h-full flex items-center justify-center bg-[#1e1e1e] text-[#808080]\">\n        加载中...\n      </div>\n    )\n  }\n  \n  if (logs.length === 0) {\n    return (\n      <div className=\"h-full flex items-center justify-center bg-[#1e1e1e] text-[#808080]\">\n        暂无日志\n      </div>\n    )\n  }\n  \n  return (\n    <div className=\"h-full\">\n      <AnsiLogViewer content={content} />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/scan/scan-progress-dialog.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { useState } from \"react\"\nimport {\n  Dialog,\n  DialogContent,\n  DialogHeader,\n  DialogTitle,\n} from \"@/components/ui/dialog\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Separator } from \"@/components/ui/separator\"\nimport { Tabs, TabsList, TabsTrigger } from \"@/components/ui/tabs\"\nimport {\n  IconCircleCheck,\n  IconLoader,\n  IconClock,\n  IconCircleX,\n  IconPlayerStop,\n} from \"@tabler/icons-react\"\nimport { cn } from \"@/lib/utils\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport type { ScanStage, ScanRecord, StageProgress, StageStatus } from \"@/types/scan.types\"\nimport { useScanLogs } from \"@/hooks/use-scan-logs\"\nimport { ScanLogList } from \"./scan-log-list\"\n\n/**\n * Scan stage details\n */\ninterface StageDetail {\n  stage: ScanStage      // Stage name (from engine_config key)\n  status: StageStatus\n  duration?: string     // Duration, e.g. \"2m30s\"\n  detail?: string       // Additional info, e.g. \"Found 120 subdomains\"\n  resultCount?: number  // Result count\n}\n\n/**\n * Scan progress data\n */\nexport interface ScanProgressData {\n  id: number\n  targetName: string\n  engineNames: string[]\n  status: string\n  progress: number\n  currentStage?: ScanStage\n  startedAt?: string\n  errorMessage?: string  // Error message (present when failed)\n  stages: StageDetail[]\n}\n\ninterface ScanProgressDialogProps {\n  open: boolean\n  onOpenChange: (open: boolean) => void\n  data: ScanProgressData | null\n}\n\n/** Scan status style configuration */\nconst SCAN_STATUS_STYLES: Record<string, string> = {\n  running: \"bg-[#d29922]/10 text-[#d29922] border-[#d29922]/20\",\n  cancelled: \"bg-[#848d97]/10 text-[#848d97] border-[#848d97]/20\",\n  completed: \"bg-[#238636]/10 text-[#238636] border-[#238636]/20 dark:text-[#3fb950]\",\n  failed: \"bg-[#da3633]/10 text-[#da3633] border-[#da3633]/20 dark:text-[#f85149]\",\n  initiated: \"bg-[#d29922]/10 text-[#d29922] border-[#d29922]/20\",\n}\n\n/**\n * Pulsing dot animation (consistent with scan-history)\n */\nfunction PulsingDot({ className }: { className?: string }) {\n  return (\n    <span className={cn(\"relative flex h-3 w-3\", className)}>\n      <span className=\"absolute inline-flex h-full w-full animate-ping rounded-full bg-current opacity-75\" />\n      <span className=\"relative inline-flex h-3 w-3 rounded-full bg-current\" />\n    </span>\n  )\n}\n\n/**\n * Scan status icon (for title, consistent with scan-history status column animation)\n */\nfunction ScanStatusIcon({ status }: { status: string }) {\n  switch (status) {\n    case \"running\":\n      return <PulsingDot className=\"text-[#d29922]\" />\n    case \"completed\":\n      return <IconCircleCheck className=\"h-5 w-5 text-[#238636] dark:text-[#3fb950]\" />\n    case \"cancelled\":\n      return <IconCircleX className=\"h-5 w-5 text-[#848d97]\" />\n    case \"failed\":\n      return <IconCircleX className=\"h-5 w-5 text-[#da3633] dark:text-[#f85149]\" />\n    case \"initiated\":\n      return <PulsingDot className=\"text-[#d29922]\" />\n    default:\n      return <PulsingDot className=\"text-muted-foreground\" />\n  }\n}\n\n/**\n * Scan status badge\n */\nfunction ScanStatusBadge({ status, t }: { status: string; t: (key: string) => string }) {\n  const className = SCAN_STATUS_STYLES[status] || \"bg-muted text-muted-foreground\"\n  const label = t(`status_${status}`)\n  return (\n    <Badge variant=\"outline\" className={className}>\n      {label}\n    </Badge>\n  )\n}\n\n/**\n * Stage status icon\n */\nfunction StageStatusIcon({ status }: { status: StageStatus }) {\n  switch (status) {\n    case \"completed\":\n      return <IconCircleCheck className=\"h-5 w-5 text-[#238636] dark:text-[#3fb950]\" />\n    case \"running\":\n      return <PulsingDot className=\"text-[#d29922]\" />\n    case \"failed\":\n      return <IconCircleX className=\"h-5 w-5 text-[#da3633] dark:text-[#f85149]\" />\n    case \"cancelled\":\n      return <IconCircleX className=\"h-5 w-5 text-[#d29922]\" />\n    default:\n      return <IconClock className=\"h-5 w-5 text-muted-foreground\" />\n  }\n}\n\n/**\n * Single stage row\n */\nfunction StageRow({ stage, t }: { stage: StageDetail; t: (key: string) => string }) {\n  return (\n    <div\n      className={cn(\n        \"flex items-center justify-between py-3 px-4 rounded-lg transition-colors\",\n        stage.status === \"running\" && \"bg-[#d29922]/10 border border-[#d29922]/20\",\n        stage.status === \"completed\" && \"bg-muted/50\",\n        stage.status === \"failed\" && \"bg-[#da3633]/10\",\n        stage.status === \"cancelled\" && \"bg-[#d29922]/10\",\n      )}\n    >\n      <div className=\"flex items-center gap-3\">\n        <StageStatusIcon status={stage.status} />\n        <div>\n          <span className=\"font-medium\">{t(`stages.${stage.stage}`)}</span>\n          {stage.detail && (\n            <p className=\"text-xs text-muted-foreground mt-0.5\">\n              {stage.detail}\n            </p>\n          )}\n        </div>\n      </div>\n      \n      <div className=\"flex items-center gap-3 text-right\">\n        {/* Status/Duration */}\n        {stage.status === \"running\" && (\n          <Badge variant=\"outline\" className=\"bg-[#d29922]/10 text-[#d29922] border-[#d29922]/20\">\n            {t(\"stage_running\")}\n          </Badge>\n        )}\n        {stage.status === \"completed\" && stage.duration && (\n          <span className=\"text-sm text-muted-foreground font-mono\">\n            {stage.duration}\n          </span>\n        )}\n        {stage.status === \"pending\" && (\n          <span className=\"text-sm text-muted-foreground\">{t(\"stage_pending\")}</span>\n        )}\n        {stage.status === \"failed\" && (\n          <Badge variant=\"outline\" className=\"bg-[#da3633]/10 text-[#da3633] border-[#da3633]/20 dark:text-[#f85149]\">\n            {t(\"stage_failed\")}\n          </Badge>\n        )}\n        {stage.status === \"cancelled\" && (\n          <Badge variant=\"outline\" className=\"bg-[#d29922]/10 text-[#d29922] border-[#d29922]/20\">\n            {t(\"stage_cancelled\")}\n          </Badge>\n        )}\n      </div>\n    </div>\n  )\n}\n\n/**\n * Scan progress dialog\n */\nexport function ScanProgressDialog({\n  open,\n  onOpenChange,\n  data,\n}: ScanProgressDialogProps) {\n  const t = useTranslations(\"scan.progress\")\n  const locale = useLocale()\n  const [activeTab, setActiveTab] = useState<'stages' | 'logs'>('stages')\n  \n  // 判断扫描是否正在运行（用于控制轮询）\n  const isRunning = data?.status === 'running' || data?.status === 'initiated'\n  \n  // 日志轮询 Hook\n  const { logs, loading: logsLoading } = useScanLogs({\n    scanId: data?.id ?? 0,\n    enabled: open && activeTab === 'logs' && !!data?.id,\n    pollingInterval: isRunning ? 3000 : 0,  // 运行中时 3s 轮询，否则不轮询\n  })\n  \n  if (!data) return null\n\n  // 固定宽度，切换 Tab 时不变化\n  const dialogWidth = 'sm:max-w-[600px] sm:min-w-[550px]'\n\n  return (\n    <Dialog open={open} onOpenChange={onOpenChange}>\n      <DialogContent className={cn(dialogWidth, \"transition-all duration-200\")}>\n        <DialogHeader>\n          <DialogTitle className=\"flex items-center gap-2\">\n            <ScanStatusIcon status={data.status} />\n            {t(\"title\")}\n          </DialogTitle>\n        </DialogHeader>\n\n        {/* Basic information */}\n        <div className=\"space-y-2\">\n          <div className=\"flex items-center justify-between text-sm\">\n            <span className=\"text-muted-foreground\">{t(\"target\")}</span>\n            <span className=\"font-medium\">{data.targetName}</span>\n          </div>\n          <div className=\"flex items-start justify-between text-sm gap-4\">\n            <span className=\"text-muted-foreground shrink-0\">{t(\"engine\")}</span>\n            <div className=\"flex flex-wrap gap-1.5 justify-end\">\n              {data.engineNames?.length ? (\n                data.engineNames.map((name) => (\n                  <Badge key={name} variant=\"secondary\" className=\"text-xs whitespace-nowrap\">\n                    {name}\n                  </Badge>\n                ))\n              ) : (\n                <span className=\"text-muted-foreground\">-</span>\n              )}\n            </div>\n          </div>\n          {data.startedAt && (\n            <div className=\"flex items-center justify-between text-sm\">\n              <span className=\"text-muted-foreground\">{t(\"startTime\")}</span>\n              <span className=\"font-mono text-xs\">{formatDateTime(data.startedAt, locale)}</span>\n            </div>\n          )}\n          <div className=\"flex items-center justify-between text-sm\">\n            <span className=\"text-muted-foreground\">{t(\"status\")}</span>\n            <ScanStatusBadge status={data.status} t={t} />\n          </div>\n          {/* Error message (shown when failed) */}\n          {data.errorMessage && (\n            <div className=\"mt-2 p-3 bg-destructive/10 border border-destructive/20 rounded-md\">\n              <p className=\"text-sm text-destructive font-medium\">{t(\"errorReason\")}</p>\n              <p className=\"text-sm text-destructive/80 mt-1 break-words\">{data.errorMessage}</p>\n            </div>\n          )}\n        </div>\n\n        <Separator />\n\n        {/* Tab 切换 */}\n        <Tabs value={activeTab} onValueChange={(v) => setActiveTab(v as 'stages' | 'logs')}>\n          <TabsList className=\"grid w-full grid-cols-2\">\n            <TabsTrigger value=\"stages\">{t(\"tab_stages\")}</TabsTrigger>\n            <TabsTrigger value=\"logs\">{t(\"tab_logs\")}</TabsTrigger>\n          </TabsList>\n        </Tabs>\n\n        {/* Tab 内容 */}\n        {activeTab === 'stages' ? (\n          /* Stage list */\n          <div className=\"space-y-2 max-h-[300px] overflow-y-auto\">\n            {data.stages.map((stage) => (\n              <StageRow key={stage.stage} stage={stage} t={t} />\n            ))}\n          </div>\n        ) : (\n          /* Log list */\n          <div className=\"h-[300px] overflow-hidden rounded-md\">\n            <ScanLogList logs={logs} loading={logsLoading} />\n          </div>\n        )}\n      </DialogContent>\n    </Dialog>\n  )\n}\n\n/**\n * Format duration (seconds -> readable string)\n */\nfunction formatDuration(seconds?: number): string | undefined {\n  if (seconds === undefined || seconds === null) return undefined\n  if (seconds < 1) return \"<1s\"\n  if (seconds < 60) return `${Math.round(seconds)}s`\n  const minutes = Math.floor(seconds / 60)\n  const secs = Math.round(seconds % 60)\n  return secs > 0 ? `${minutes}m ${secs}s` : `${minutes}m`\n}\n\n/**\n * Format date time (ISO string -> readable format)\n */\nfunction formatDateTime(isoString?: string, locale: string = \"zh\"): string {\n  if (!isoString) return \"\"\n  try {\n    const date = new Date(isoString)\n    return date.toLocaleString(locale === \"zh\" ? \"zh-CN\" : \"en-US\", {\n      year: \"numeric\",\n      month: \"2-digit\",\n      day: \"2-digit\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\",\n      hour12: false,\n    })\n  } catch {\n    return isoString\n  }\n}\n\n/** Get stage result count from summary */\nfunction getStageResultCount(stageName: string, summary: ScanRecord[\"summary\"]): number | undefined {\n  if (!summary) return undefined\n  switch (stageName) {\n    case \"subdomain_discovery\":\n    case \"subdomainDiscovery\":\n      return summary.subdomains\n    case \"site_scan\":\n    case \"siteScan\":\n      return summary.websites\n    case \"directory_scan\":\n    case \"directoryScan\":\n      return summary.directories\n    case \"url_fetch\":\n    case \"urlFetch\":\n      return summary.endpoints\n    case \"vuln_scan\":\n    case \"vulnScan\":\n      return summary.vulnerabilities?.total\n    default:\n      return undefined\n  }\n}\n\n/**\n * Build ScanProgressData from ScanRecord\n * \n * Stage names come directly from engine_config keys, no mapping needed\n * Stage order follows the order field, consistent with Flow execution order\n */\n// Status priority for sorting (lower = higher priority)\nconst STATUS_PRIORITY: Record<StageStatus, number> = {\n  running: 0,\n  pending: 1,\n  completed: 2,\n  failed: 3,\n  cancelled: 4,\n}\n\nexport function buildScanProgressData(scan: ScanRecord): ScanProgressData {\n  const stages: StageDetail[] = []\n  \n  if (scan.stageProgress) {\n    // Sort by status priority first, then by order\n    const sortedEntries = Object.entries(scan.stageProgress)\n      .sort(([, a], [, b]) => {\n        const priorityA = STATUS_PRIORITY[a.status] ?? 99\n        const priorityB = STATUS_PRIORITY[b.status] ?? 99\n        if (priorityA !== priorityB) {\n          return priorityA - priorityB\n        }\n        return (a.order ?? 0) - (b.order ?? 0)\n      })\n    \n    for (const [stageName, progress] of sortedEntries) {\n      const resultCount = progress.status === \"completed\" \n        ? getStageResultCount(stageName, scan.summary)\n        : undefined\n      \n      stages.push({\n        stage: stageName,\n        status: progress.status,\n        duration: formatDuration(progress.duration),\n        detail: progress.detail || progress.error || progress.reason,\n        resultCount,\n      })\n    }\n  }\n  \n  return {\n    id: scan.id,\n    targetName: scan.targetName,\n    engineNames: scan.engineNames || [],\n    status: scan.status,\n    progress: scan.progress,\n    currentStage: scan.currentStage,\n    startedAt: scan.createdAt,\n    errorMessage: scan.errorMessage,\n    stages,\n  }\n}\n"
  },
  {
    "path": "frontend/components/scan/scheduled/create-scheduled-scan-dialog.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { toast } from \"sonner\"\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogHeader,\n  DialogTitle,\n} from \"@/components/ui/dialog\"\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport {\n  Command,\n  CommandEmpty,\n  CommandGroup,\n  CommandItem,\n  CommandList,\n} from \"@/components/ui/command\"\nimport { Separator } from \"@/components/ui/separator\"\nimport { cn } from \"@/lib/utils\"\nimport {\n  IconX,\n  IconLoader2,\n  IconChevronRight,\n  IconChevronLeft,\n  IconCheck,\n  IconBuilding,\n  IconTarget,\n  IconClock,\n  IconInfoCircle,\n  IconSearch,\n  IconSettings,\n  IconCode,\n} from \"@tabler/icons-react\"\nimport { CronExpressionParser } from \"cron-parser\"\nimport cronstrue from \"cronstrue/i18n\"\nimport { useStep } from \"@/hooks/use-step\"\nimport { useCreateScheduledScan } from \"@/hooks/use-scheduled-scans\"\nimport { useTargets } from \"@/hooks/use-targets\"\nimport { useEngines } from \"@/hooks/use-engines\"\nimport { useOrganizations } from \"@/hooks/use-organizations\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport type { CreateScheduledScanRequest } from \"@/types/scheduled-scan.types\"\nimport type { Target } from \"@/types/target.types\"\nimport type { Organization } from \"@/types/organization.types\"\nimport { EnginePresetSelector } from \"../engine-preset-selector\"\nimport { ScanConfigEditor } from \"../scan-config-editor\"\n\n\ninterface CreateScheduledScanDialogProps {\n  open: boolean\n  onOpenChange: (open: boolean) => void\n  onSuccess?: () => void\n  presetOrganizationId?: number\n  presetOrganizationName?: string\n  presetTargetId?: number\n  presetTargetName?: string\n}\n\ntype SelectionMode = \"organization\" | \"target\"\n\nexport function CreateScheduledScanDialog({\n  open,\n  onOpenChange,\n  onSuccess,\n  presetOrganizationId,\n  presetOrganizationName,\n  presetTargetId,\n  presetTargetName,\n}: CreateScheduledScanDialogProps) {\n  const { mutate: createScheduledScan, isPending } = useCreateScheduledScan()\n  const { data: enginesData } = useEngines()\n  const t = useTranslations(\"scan.scheduled\")\n  const locale = useLocale()\n\n  const CRON_PRESETS = [\n    { label: t(\"presets.everyHour\"), value: \"0 * * * *\" },\n    { label: t(\"presets.daily2am\"), value: \"0 2 * * *\" },\n    { label: t(\"presets.daily4am\"), value: \"0 4 * * *\" },\n    { label: t(\"presets.weekly\"), value: \"0 2 * * 1\" },\n    { label: t(\"presets.monthly\"), value: \"0 2 1 * *\" },\n  ]\n\n  const FULL_STEPS = [\n    { id: 1, title: t(\"steps.basicInfo\"), icon: IconInfoCircle },\n    { id: 2, title: t(\"steps.selectTarget\"), icon: IconTarget },\n    { id: 3, title: t(\"steps.selectEngine\"), icon: IconSettings },\n    { id: 4, title: t(\"steps.editConfig\"), icon: IconCode },\n    { id: 5, title: t(\"steps.scheduleSettings\"), icon: IconClock },\n  ]\n\n  // Preset mode: skip target selection but keep basic info for name editing\n  const PRESET_STEPS = [\n    { id: 1, title: t(\"steps.basicInfo\"), icon: IconInfoCircle },\n    { id: 2, title: t(\"steps.selectEngine\"), icon: IconSettings },\n    { id: 3, title: t(\"steps.editConfig\"), icon: IconCode },\n    { id: 4, title: t(\"steps.scheduleSettings\"), icon: IconClock },\n  ]\n\n  const [orgSearchInput, setOrgSearchInput] = React.useState(\"\")\n  const [targetSearchInput, setTargetSearchInput] = React.useState(\"\")\n  const [orgSearch, setOrgSearch] = React.useState(\"\")\n  const [targetSearch, setTargetSearch] = React.useState(\"\")\n\n  const handleOrgSearch = () => setOrgSearch(orgSearchInput)\n  const handleTargetSearch = () => setTargetSearch(targetSearchInput)\n\n  const { data: organizationsData, isFetching: isOrgFetching } = useOrganizations({ \n    pageSize: 50, \n    search: orgSearch || undefined \n  })\n  const { data: targetsData, isFetching: isTargetFetching } = useTargets({ \n    pageSize: 50, \n    search: targetSearch || undefined \n  })\n\n  const hasPreset = !!(presetOrganizationId || presetTargetId)\n  const steps = hasPreset ? PRESET_STEPS : FULL_STEPS\n  const totalSteps = steps.length\n\n  const [currentStep, { goToNextStep, goToPrevStep, reset: resetStep }] = useStep(totalSteps)\n\n  const [name, setName] = React.useState(\"\")\n  const [engineIds, setEngineIds] = React.useState<number[]>([])\n  const [selectedPresetId, setSelectedPresetId] = React.useState<string | null>(null)\n  const [selectionMode, setSelectionMode] = React.useState<SelectionMode>(\"organization\")\n  const [selectedOrgId, setSelectedOrgId] = React.useState<number | null>(null)\n  const [selectedTargetId, setSelectedTargetId] = React.useState<number | null>(null)\n  const [cronExpression, setCronExpression] = React.useState(\"0 2 * * *\")\n  \n  // Configuration state management\n  const [configuration, setConfiguration] = React.useState(\"\")\n  const [isConfigEdited, setIsConfigEdited] = React.useState(false)\n  const [isYamlValid, setIsYamlValid] = React.useState(true)\n  const [showOverwriteConfirm, setShowOverwriteConfirm] = React.useState(false)\n  const [pendingConfigChange, setPendingConfigChange] = React.useState<string | null>(null)\n\n  React.useEffect(() => {\n    if (open) {\n      if (presetOrganizationId) {\n        setSelectionMode(\"organization\")\n        setSelectedOrgId(presetOrganizationId)\n        setName(presetOrganizationName ? `${presetOrganizationName} - ${t(\"title\")}` : \"\")\n      } else if (presetTargetId) {\n        setSelectionMode(\"target\")\n        setSelectedTargetId(presetTargetId)\n        setName(presetTargetName ? `${presetTargetName} - ${t(\"title\")}` : \"\")\n      }\n    }\n  }, [open, presetOrganizationId, presetOrganizationName, presetTargetId, presetTargetName, t])\n\n  const targets: Target[] = targetsData?.targets || []\n  const engines = enginesData || []\n  const organizations: Organization[] = organizationsData?.organizations || []\n\n  // Get selected engines for display\n  const selectedEngines = React.useMemo(() => {\n    if (!engineIds.length || !engines.length) return []\n    return engines.filter(e => engineIds.includes(e.id))\n  }, [engineIds, engines])\n\n  const resetForm = () => {\n    setName(\"\")\n    setEngineIds([])\n    setSelectedPresetId(null)\n    setSelectionMode(\"organization\")\n    setSelectedOrgId(null)\n    setSelectedTargetId(null)\n    setCronExpression(\"0 2 * * *\")\n    setConfiguration(\"\")\n    setIsConfigEdited(false)\n    resetStep()\n  }\n\n  // Handle configuration change from preset selector (may need confirmation)\n  const handlePresetConfigChange = React.useCallback((value: string) => {\n    if (isConfigEdited && configuration !== value) {\n      setPendingConfigChange(value)\n      setShowOverwriteConfirm(true)\n    } else {\n      setConfiguration(value)\n      setIsConfigEdited(false)\n    }\n  }, [isConfigEdited, configuration])\n\n  // Handle manual config editing\n  const handleManualConfigChange = React.useCallback((value: string) => {\n    setConfiguration(value)\n    setIsConfigEdited(true)\n  }, [])\n\n  const handleEngineIdsChange = React.useCallback((newEngineIds: number[]) => {\n    setEngineIds(newEngineIds)\n  }, [])\n\n  const handleOverwriteConfirm = () => {\n    if (pendingConfigChange !== null) {\n      setConfiguration(pendingConfigChange)\n      setIsConfigEdited(false)\n    }\n    setShowOverwriteConfirm(false)\n    setPendingConfigChange(null)\n  }\n\n  const handleOverwriteCancel = () => {\n    setShowOverwriteConfirm(false)\n    setPendingConfigChange(null)\n  }\n\n  const handleYamlValidationChange = (isValid: boolean) => {\n    setIsYamlValid(isValid)\n  }\n\n  const handleOpenChange = (isOpen: boolean) => {\n    if (!isOpen) resetForm()\n    onOpenChange(isOpen)\n  }\n\n  const handleOrgSelect = (orgId: number) => {\n    setSelectedOrgId(selectedOrgId === orgId ? null : orgId)\n  }\n\n  const handleTargetSelect = (targetId: number) => {\n    setSelectedTargetId(selectedTargetId === targetId ? null : targetId)\n  }\n\n  const validateCurrentStep = (): boolean => {\n    if (hasPreset) {\n      switch (currentStep) {\n        case 1: // Basic info (preset mode)\n          if (!name.trim()) { toast.error(t(\"form.taskNameRequired\")); return false }\n          return true\n        case 2: // Select engine\n          if (!selectedPresetId) { toast.error(t(\"form.scanEngineRequired\")); return false }\n          if (engineIds.length === 0) { toast.error(t(\"form.scanEngineRequired\")); return false }\n          return true\n        case 3: // Edit config\n          if (!configuration.trim()) { toast.error(t(\"form.configurationRequired\")); return false }\n          if (!isYamlValid) { toast.error(t(\"form.yamlInvalid\")); return false }\n          return true\n        case 4: // Schedule\n          const parts = cronExpression.trim().split(/\\s+/)\n          if (parts.length !== 5) { toast.error(t(\"form.cronRequired\")); return false }\n          return true\n        default: return true\n      }\n    }\n\n    switch (currentStep) {\n      case 1: // Basic info\n        if (!name.trim()) { toast.error(t(\"form.taskNameRequired\")); return false }\n        return true\n      case 2: // Select target\n        if (selectionMode === \"organization\") {\n          if (!selectedOrgId) { toast.error(t(\"toast.selectOrganization\")); return false }\n        } else {\n          if (!selectedTargetId) { toast.error(t(\"toast.selectTarget\")); return false }\n        }\n        return true\n      case 3: // Select engine\n        if (!selectedPresetId) { toast.error(t(\"form.scanEngineRequired\")); return false }\n        if (engineIds.length === 0) { toast.error(t(\"form.scanEngineRequired\")); return false }\n        return true\n      case 4: // Edit config\n        if (!configuration.trim()) { toast.error(t(\"form.configurationRequired\")); return false }\n        if (!isYamlValid) { toast.error(t(\"form.yamlInvalid\")); return false }\n        return true\n      case 5: // Schedule\n        const cronParts = cronExpression.trim().split(/\\s+/)\n        if (cronParts.length !== 5) { toast.error(t(\"form.cronRequired\")); return false }\n        return true\n      default: return true\n    }\n  }\n\n  const handleNext = () => { if (validateCurrentStep()) goToNextStep() }\n\n  const handleSubmit = () => {\n    if (!validateCurrentStep()) return\n    const request: CreateScheduledScanRequest = {\n      name: name.trim(),\n      configuration: configuration.trim(),\n      engineIds: engineIds,\n      engineNames: selectedEngines.map(e => e.name),\n      cronExpression: cronExpression.trim(),\n    }\n    if (selectionMode === \"organization\" && selectedOrgId) {\n      request.organizationId = selectedOrgId\n    } else if (selectedTargetId) {\n      request.targetId = selectedTargetId\n    }\n    createScheduledScan(request, {\n      onSuccess: () => { resetForm(); onOpenChange(false); onSuccess?.() },\n      onError: (err: unknown) => {\n        const error = err as { response?: { data?: { error?: { code?: string; message?: string } } } }\n        if (error?.response?.data?.error?.code === 'CONFIG_CONFLICT') {\n          toast.error(t(\"toast.configConflict\"), {\n            description: error.response.data.error.message,\n          })\n        }\n      },\n    })\n  }\n\n  const getCronDescription = (cron: string): string => {\n    try {\n      const parts = cron.trim().split(/\\s+/)\n      if (parts.length !== 5) return t(\"form.invalidExpression\")\n      return cronstrue.toString(cron, { locale: locale === 'zh' ? \"zh_CN\" : \"en\" })\n    } catch { return t(\"form.invalidExpression\") }\n  }\n\n  const getNextExecutions = (cron: string, count: number = 3): string[] => {\n    try {\n      const parts = cron.trim().split(/\\s+/)\n      if (parts.length !== 5) return []\n      const interval = CronExpressionParser.parse(cron, { currentDate: new Date(), tz: \"Asia/Shanghai\" })\n      const results: string[] = []\n      for (let i = 0; i < count; i++) {\n        const next = interval.next()\n        results.push(next.toDate().toLocaleString(locale === 'zh' ? \"zh-CN\" : \"en-US\"))\n      }\n      return results\n    } catch { return [] }\n  }\n\n\n  return (\n    <Dialog open={open} onOpenChange={handleOpenChange}>\n      <DialogContent className=\"max-w-[900px] p-0 gap-0\">\n        <DialogHeader className=\"px-6 pt-6 pb-4\">\n          <div className=\"flex items-center justify-between\">\n            <div>\n              <DialogTitle>{t(\"createTitle\")}</DialogTitle>\n              <DialogDescription className=\"mt-1\">{t(\"createDesc\")}</DialogDescription>\n            </div>\n            {/* Step indicator */}\n            <div className=\"text-sm text-muted-foreground mr-8\">\n              {t(\"stepIndicator\", { current: currentStep, total: totalSteps })}\n            </div>\n          </div>\n        </DialogHeader>\n\n        <div className=\"border-t h-[480px] overflow-hidden\">\n          {/* Step 1: Basic Info + Scan Mode (full mode only) */}\n          {currentStep === 1 && !hasPreset && (\n            <div className=\"p-6 space-y-6 overflow-y-auto h-full\">\n              <div className=\"space-y-2\">\n                <Label htmlFor=\"name\">{t(\"form.taskName\")} *</Label>\n                <Input id=\"name\" placeholder={t(\"form.taskNamePlaceholder\")} value={name} onChange={(e) => setName(e.target.value)} />\n                <p className=\"text-xs text-muted-foreground\">{t(\"form.taskNameDesc\")}</p>\n              </div>\n              <Separator />\n              <div className=\"space-y-3\">\n                <Label>{t(\"form.selectScanMode\")}</Label>\n                <div className=\"grid grid-cols-2 gap-4\">\n                  <div className={cn(\n                    \"flex flex-col items-center gap-3 p-4 border-2 rounded-lg cursor-pointer transition-colors\",\n                    selectionMode === \"organization\" ? \"border-primary bg-primary/5\" : \"border-muted hover:border-muted-foreground/50\"\n                  )} onClick={() => { setSelectionMode(\"organization\"); setSelectedTargetId(null) }}>\n                    <IconBuilding className=\"h-8 w-8\" />\n                    <div className=\"text-center\">\n                      <p className=\"font-medium\">{t(\"form.organizationScan\")}</p>\n                      <p className=\"text-xs text-muted-foreground\">{t(\"form.organizationScanDesc\")}</p>\n                    </div>\n                    {selectionMode === \"organization\" && <IconCheck className=\"h-5 w-5 text-primary\" />}\n                  </div>\n                  <div className={cn(\n                    \"flex flex-col items-center gap-3 p-4 border-2 rounded-lg cursor-pointer transition-colors\",\n                    selectionMode === \"target\" ? \"border-primary bg-primary/5\" : \"border-muted hover:border-muted-foreground/50\"\n                  )} onClick={() => { setSelectionMode(\"target\"); setSelectedOrgId(null) }}>\n                    <IconTarget className=\"h-8 w-8\" />\n                    <div className=\"text-center\">\n                      <p className=\"font-medium\">{t(\"form.targetScan\")}</p>\n                      <p className=\"text-xs text-muted-foreground\">{t(\"form.targetScanDesc\")}</p>\n                    </div>\n                    {selectionMode === \"target\" && <IconCheck className=\"h-5 w-5 text-primary\" />}\n                  </div>\n                </div>\n                <p className=\"text-sm text-muted-foreground\">\n                  {selectionMode === \"organization\" ? t(\"form.organizationScanHint\") : t(\"form.targetScanHint\")}\n                </p>\n              </div>\n            </div>\n          )}\n\n          {/* Step 1: Basic Info (preset mode - name only, target is locked) */}\n          {currentStep === 1 && hasPreset && (\n            <div className=\"p-6 space-y-6 overflow-y-auto h-full\">\n              <div className=\"space-y-2\">\n                <Label htmlFor=\"name\">{t(\"form.taskName\")} *</Label>\n                <Input id=\"name\" placeholder={t(\"form.taskNamePlaceholder\")} value={name} onChange={(e) => setName(e.target.value)} />\n                <p className=\"text-xs text-muted-foreground\">{t(\"form.taskNameDesc\")}</p>\n              </div>\n              <Separator />\n              <div className=\"space-y-3\">\n                <Label>{t(\"form.scanTarget\")}</Label>\n                <div className=\"flex items-center gap-2 p-4 border rounded-lg bg-muted/50\">\n                  <IconTarget className=\"h-5 w-5 text-muted-foreground\" />\n                  <span className=\"font-medium\">{presetTargetName || presetOrganizationName}</span>\n                  <Badge variant=\"secondary\" className=\"ml-auto\">\n                    {presetTargetId ? t(\"form.targetScan\") : t(\"form.organizationScan\")}\n                  </Badge>\n                </div>\n                <p className=\"text-xs text-muted-foreground\">{t(\"form.presetTargetHint\")}</p>\n              </div>\n            </div>\n          )}\n\n          {/* Step 2: Select Target (Organization or Target) */}\n          {currentStep === 2 && !hasPreset && (\n            <div className=\"p-6 space-y-4 overflow-y-auto h-full\">\n              {selectionMode === \"organization\" ? (\n                <>\n                  <Label>{t(\"form.selectOrganization\")}</Label>\n                  <div className=\"flex items-center gap-2 mb-2\">\n                    <Input placeholder={t(\"form.searchOrganization\")} value={orgSearchInput} onChange={(e) => setOrgSearchInput(e.target.value)} onKeyDown={(e) => e.key === \"Enter\" && handleOrgSearch()} className=\"h-9 flex-1\" />\n                    <Button type=\"button\" variant=\"outline\" size=\"icon\" className=\"h-9 w-9\" onClick={handleOrgSearch} disabled={isOrgFetching}>\n                      {isOrgFetching ? <IconLoader2 className=\"h-4 w-4 animate-spin\" /> : <IconSearch className=\"h-4 w-4\" />}\n                    </Button>\n                  </div>\n                  <Command className=\"border rounded-lg\" shouldFilter={false}>\n                    <CommandList className=\"max-h-[250px]\">\n                      {organizations.length === 0 ? <CommandEmpty>{t(\"form.noOrganization\")}</CommandEmpty> : (\n                        <CommandGroup>\n                          {organizations.map((org) => (\n                            <CommandItem key={org.id} value={org.id.toString()} onSelect={() => handleOrgSelect(org.id)} className=\"flex items-center justify-between\">\n                              <div className=\"flex items-center gap-2\">\n                                <Checkbox checked={selectedOrgId === org.id} onCheckedChange={() => handleOrgSelect(org.id)} />\n                                <span>{org.name}</span>\n                              </div>\n                              <span className=\"text-xs text-muted-foreground\">{t(\"form.targetCount\", { count: org.targetCount || 0 })}</span>\n                            </CommandItem>\n                          ))}\n                        </CommandGroup>\n                      )}\n                    </CommandList>\n                  </Command>\n                  {selectedOrgId && (\n                    <div className=\"space-y-2\">\n                      <p className=\"text-sm text-muted-foreground\">{t(\"form.selectedOrganization\")}</p>\n                      <Badge variant=\"secondary\">\n                        {organizations.find((o) => o.id === selectedOrgId)?.name}\n                        <IconX className=\"h-3 w-3 ml-1 cursor-pointer\" onClick={() => setSelectedOrgId(null)} />\n                      </Badge>\n                    </div>\n                  )}\n                </>\n              ) : (\n                <>\n                  <Label>{t(\"form.selectTarget\")}</Label>\n                  <div className=\"flex items-center gap-2 mb-2\">\n                    <Input placeholder={t(\"form.searchTarget\")} value={targetSearchInput} onChange={(e) => setTargetSearchInput(e.target.value)} onKeyDown={(e) => e.key === \"Enter\" && handleTargetSearch()} className=\"h-9 flex-1\" />\n                    <Button type=\"button\" variant=\"outline\" size=\"icon\" className=\"h-9 w-9\" onClick={handleTargetSearch} disabled={isTargetFetching}>\n                      {isTargetFetching ? <IconLoader2 className=\"h-4 w-4 animate-spin\" /> : <IconSearch className=\"h-4 w-4\" />}\n                    </Button>\n                  </div>\n                  <Command className=\"border rounded-lg\" shouldFilter={false}>\n                    <CommandList className=\"max-h-[250px]\">\n                      {targets.length === 0 ? <CommandEmpty>{t(\"form.noTarget\")}</CommandEmpty> : (\n                        <CommandGroup>\n                          {targets.map((target) => (\n                            <CommandItem key={target.id} value={target.id.toString()} onSelect={() => handleTargetSelect(target.id)} className=\"flex items-center justify-between\">\n                              <div className=\"flex items-center gap-2\">\n                                <Checkbox checked={selectedTargetId === target.id} onCheckedChange={() => handleTargetSelect(target.id)} />\n                                <span>{target.name}</span>\n                              </div>\n                              {target.organizations && target.organizations.length > 0 && (\n                                <span className=\"text-xs text-muted-foreground\">{target.organizations.map((o) => o.name).join(\", \")}</span>\n                              )}\n                            </CommandItem>\n                          ))}\n                        </CommandGroup>\n                      )}\n                    </CommandList>\n                  </Command>\n                  {selectedTargetId && (\n                    <div className=\"space-y-2\">\n                      <p className=\"text-sm text-muted-foreground\">{t(\"form.selectedTarget\")}</p>\n                      <Badge variant=\"outline\">\n                        {targets.find((t) => t.id === selectedTargetId)?.name}\n                        <IconX className=\"h-3 w-3 ml-1 cursor-pointer\" onClick={() => setSelectedTargetId(null)} />\n                      </Badge>\n                    </div>\n                  )}\n                </>\n              )}\n            </div>\n          )}\n\n          {/* Step 3 (full) / Step 2 (preset): Select Engine */}\n          {((currentStep === 3 && !hasPreset) || (currentStep === 2 && hasPreset)) && engines.length > 0 && (\n            <EnginePresetSelector\n              engines={engines}\n              selectedEngineIds={engineIds}\n              selectedPresetId={selectedPresetId}\n              onPresetChange={setSelectedPresetId}\n              onEngineIdsChange={handleEngineIdsChange}\n              onConfigurationChange={handlePresetConfigChange}\n              disabled={isPending}\n            />\n          )}\n\n          {/* Step 4 (full) / Step 3 (preset): Edit Configuration */}\n          {((currentStep === 4 && !hasPreset) || (currentStep === 3 && hasPreset)) && (\n            <ScanConfigEditor\n              configuration={configuration}\n              onChange={handleManualConfigChange}\n              onValidationChange={handleYamlValidationChange}\n              selectedEngines={selectedEngines}\n              isConfigEdited={isConfigEdited}\n              disabled={isPending}\n            />\n          )}\n\n          {/* Step 5 (full) / Step 4 (preset): Schedule Settings */}\n          {((currentStep === 5 && !hasPreset) || (currentStep === 4 && hasPreset)) && (\n            <div className=\"p-6 space-y-6 overflow-y-auto h-full\">\n              <div className=\"space-y-2\">\n                <Label>{t(\"form.cronExpression\")} *</Label>\n                <Input placeholder={t(\"form.cronPlaceholder\")} value={cronExpression} onChange={(e) => setCronExpression(e.target.value)} className=\"font-mono\" />\n                <p className=\"text-xs text-muted-foreground\">{t(\"form.cronFormat\")}</p>\n              </div>\n              <div className=\"space-y-2\">\n                <Label className=\"text-muted-foreground\">{t(\"form.quickSelect\")}</Label>\n                <div className=\"flex flex-wrap gap-2\">\n                  {CRON_PRESETS.map((preset) => (\n                    <Badge key={preset.value} variant={cronExpression === preset.value ? \"default\" : \"outline\"} className=\"cursor-pointer\" onClick={() => setCronExpression(preset.value)}>\n                      {preset.label}\n                    </Badge>\n                  ))}\n                </div>\n              </div>\n              <div className=\"rounded-lg border bg-muted/50 p-4 space-y-3\">\n                <div className=\"flex items-center gap-2\">\n                  <IconClock className=\"h-4 w-4 text-muted-foreground\" />\n                  <span className=\"font-medium\">{t(\"form.executionPreview\")}</span>\n                  {cronExpression.trim().split(/\\s+/).length === 5 && (\n                    <Badge variant=\"secondary\" className=\"ml-auto\"><IconCheck className=\"h-3 w-3 mr-1\" />{t(\"form.valid\")}</Badge>\n                  )}\n                </div>\n                <p className=\"text-sm\">{getCronDescription(cronExpression)}</p>\n                <Separator />\n                <div className=\"space-y-1\">\n                  <p className=\"text-xs text-muted-foreground\">{t(\"form.nextExecutionTime\")}</p>\n                  {getNextExecutions(cronExpression).map((time, i) => (\n                    <p key={i} className=\"text-sm\">• {time}{i === 0 && <span className=\"text-muted-foreground ml-2\">{t(\"form.upcoming\")}</span>}</p>\n                  ))}\n                </div>\n              </div>\n            </div>\n          )}\n        </div>\n\n        <div className=\"px-6 py-4 border-t flex justify-between\">\n          <Button variant=\"outline\" onClick={goToPrevStep} disabled={currentStep === 1}>\n            <IconChevronLeft className=\"h-4 w-4 mr-1\" />{t(\"buttons.previous\")}\n          </Button>\n          {currentStep < totalSteps ? (\n            <Button onClick={handleNext}>{t(\"buttons.next\")}<IconChevronRight className=\"h-4 w-4 ml-1\" /></Button>\n          ) : (\n            <Button onClick={handleSubmit} disabled={isPending}>\n              {isPending && <IconLoader2 className=\"h-4 w-4 mr-1 animate-spin\" />}{t(\"buttons.createTask\")}\n            </Button>\n          )}\n        </div>\n      </DialogContent>\n      \n      {/* Overwrite confirmation dialog */}\n      <AlertDialog open={showOverwriteConfirm} onOpenChange={setShowOverwriteConfirm}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{t(\"overwriteConfirm.title\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {t(\"overwriteConfirm.description\")}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel onClick={handleOverwriteCancel}>\n              {t(\"overwriteConfirm.cancel\")}\n            </AlertDialogCancel>\n            <AlertDialogAction onClick={handleOverwriteConfirm}>\n              {t(\"overwriteConfirm.confirm\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "frontend/components/scan/scheduled/edit-scheduled-scan-dialog.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { toast } from \"sonner\"\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n} from \"@/components/ui/dialog\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport { IconX, IconLoader2 } from \"@tabler/icons-react\"\nimport { cn } from \"@/lib/utils\"\nimport { useUpdateScheduledScan } from \"@/hooks/use-scheduled-scans\"\nimport { useTargets } from \"@/hooks/use-targets\"\nimport { useEngines } from \"@/hooks/use-engines\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport type { ScheduledScan, UpdateScheduledScanRequest } from \"@/types/scheduled-scan.types\"\nimport type { ScanEngine } from \"@/types/engine.types\"\nimport type { Target } from \"@/types/target.types\"\n\ninterface EditScheduledScanDialogProps {\n  open: boolean\n  onOpenChange: (open: boolean) => void\n  scheduledScan: ScheduledScan | null\n  onSuccess?: () => void\n}\n\nexport function EditScheduledScanDialog({\n  open,\n  onOpenChange,\n  scheduledScan,\n  onSuccess,\n}: EditScheduledScanDialogProps) {\n  const { mutate: updateScheduledScan, isPending } = useUpdateScheduledScan()\n  const { data: targetsData } = useTargets()\n  const { data: enginesData } = useEngines()\n  const t = useTranslations(\"scan.scheduled\")\n  const tCommon = useTranslations(\"common\")\n  const locale = useLocale()\n\n  const CRON_PRESETS = [\n    { label: t(\"presets.everyMinute\"), value: \"* * * * *\" },\n    { label: t(\"presets.every5Minutes\"), value: \"*/5 * * * *\" },\n    { label: t(\"presets.everyHour\"), value: \"0 * * * *\" },\n    { label: t(\"presets.daily2am\"), value: \"0 2 * * *\" },\n    { label: t(\"presets.daily4am\"), value: \"0 4 * * *\" },\n    { label: t(\"presets.weekly\"), value: \"0 2 * * 1\" },\n    { label: t(\"presets.monthly\"), value: \"0 2 1 * *\" },\n  ]\n\n  const [name, setName] = React.useState(\"\")\n  const [engineIds, setEngineIds] = React.useState<number[]>([])\n  const [selectedTargetId, setSelectedTargetId] = React.useState<number | null>(null)\n  const [cronExpression, setCronExpression] = React.useState(\"\")\n\n  React.useEffect(() => {\n    if (scheduledScan && open) {\n      setName(scheduledScan.name)\n      setEngineIds(scheduledScan.engineIds || [])\n      setSelectedTargetId(scheduledScan.targetId || null)\n      setCronExpression(scheduledScan.cronExpression || \"0 2 * * *\")\n    }\n  }, [scheduledScan, open])\n\n  const handleEngineToggle = (engineId: number, checked: boolean) => {\n    if (checked) {\n      setEngineIds((prev) => [...prev, engineId])\n    } else {\n      setEngineIds((prev) => prev.filter((id) => id !== engineId))\n    }\n  }\n\n  const handleTargetSelect = (targetId: number) => {\n    setSelectedTargetId(selectedTargetId === targetId ? null : targetId)\n  }\n\n  const validateCron = (cron: string): boolean => {\n    const parts = cron.trim().split(/\\s+/)\n    return parts.length === 5\n  }\n\n  const handleSubmit = () => {\n    if (!scheduledScan) return\n\n    if (!name.trim()) {\n      toast.error(t(\"form.taskNameRequired\"))\n      return\n    }\n    if (engineIds.length === 0) {\n      toast.error(t(\"form.scanEngineRequired\"))\n      return\n    }\n    if (scheduledScan.scanMode === 'target' && !selectedTargetId) {\n      toast.error(t(\"toast.selectTarget\"))\n      return\n    }\n    if (!validateCron(cronExpression)) {\n      toast.error(t(\"form.cronRequired\"))\n      return\n    }\n\n    const request: UpdateScheduledScanRequest = {\n      name: name.trim(),\n      engineIds: engineIds,\n      cronExpression: cronExpression.trim(),\n    }\n\n    if (scheduledScan.scanMode === 'target' && selectedTargetId) {\n      request.targetId = selectedTargetId\n    }\n\n    updateScheduledScan(\n      { id: scheduledScan.id, data: request },\n      {\n        onSuccess: () => {\n          onOpenChange(false)\n          onSuccess?.()\n        },\n        onError: (err: unknown) => {\n          const error = err as { response?: { data?: { error?: { code?: string; message?: string } } } }\n          if (error?.response?.data?.error?.code === 'CONFIG_CONFLICT') {\n            toast.error(t(\"toast.configConflict\"), {\n              description: error.response.data.error.message,\n            })\n          }\n        },\n      }\n    )\n  }\n\n  const targets: Target[] = targetsData?.targets || []\n  const engines: ScanEngine[] = enginesData || []\n\n  if (!scheduledScan) return null\n\n  return (\n    <Dialog open={open} onOpenChange={onOpenChange}>\n      <DialogContent className=\"max-w-2xl max-h-[90vh] overflow-y-auto\">\n        <DialogHeader>\n          <DialogTitle>{t(\"editTitle\")}</DialogTitle>\n          <DialogDescription>{t(\"editDesc\")}</DialogDescription>\n        </DialogHeader>\n\n        <div className=\"grid gap-6 py-4\">\n          <div className=\"grid gap-4\">\n            <div className=\"grid gap-2\">\n              <Label htmlFor=\"edit-name\">{t(\"form.taskName\")} *</Label>\n              <Input\n                id=\"edit-name\"\n                placeholder={t(\"form.taskNamePlaceholder\")}\n                value={name}\n                onChange={(e) => setName(e.target.value)}\n              />\n            </div>\n          </div>\n\n          <div className=\"grid gap-2\">\n            <Label>{t(\"form.scanEngine\")} *</Label>\n            {engineIds.length > 0 && (\n              <p className=\"text-xs text-muted-foreground\">{t(\"form.selectedEngines\", { count: engineIds.length })}</p>\n            )}\n            <div className=\"border rounded-md p-3 max-h-[150px] overflow-y-auto space-y-2\">\n              {engines.length === 0 ? (\n                <p className=\"text-sm text-muted-foreground\">{t(\"form.noEngine\")}</p>\n              ) : (\n                engines.map((engine) => (\n                  <label\n                    key={engine.id}\n                    htmlFor={`edit-engine-${engine.id}`}\n                    className={cn(\n                      \"flex items-center gap-3 p-2 rounded-lg cursor-pointer transition-all\",\n                      engineIds.includes(engine.id)\n                        ? \"bg-primary/10 border border-primary/30\"\n                        : \"hover:bg-muted/50 border border-transparent\"\n                    )}\n                  >\n                    <Checkbox\n                      id={`edit-engine-${engine.id}`}\n                      checked={engineIds.includes(engine.id)}\n                      onCheckedChange={(checked) => handleEngineToggle(engine.id, checked as boolean)}\n                    />\n                    <span className=\"text-sm\">{engine.name}</span>\n                  </label>\n                ))\n              )}\n            </div>\n          </div>\n\n          <div className=\"grid gap-2\">\n            <Label>{t(\"form.scanScope\")}</Label>\n            {scheduledScan.scanMode === 'organization' ? (\n              <div className=\"border rounded-md p-3 bg-muted/50\">\n                <div className=\"flex items-center gap-2\">\n                  <Badge variant=\"secondary\">{t(\"form.organizationMode\")}</Badge>\n                  <span className=\"font-medium\">{scheduledScan.organizationName}</span>\n                </div>\n                <p className=\"text-xs text-muted-foreground mt-2\">\n                  {t(\"form.organizationModeHint\")}\n                </p>\n              </div>\n            ) : (\n              <>\n                <div className=\"border rounded-md p-3 max-h-[150px] overflow-y-auto\">\n                  {targets.length === 0 ? (\n                    <p className=\"text-sm text-muted-foreground\">{t(\"form.noAvailableTarget\")}</p>\n                  ) : (\n                    <div className=\"flex flex-wrap gap-2\">\n                      {targets.map((target) => (\n                        <Badge\n                          key={target.id}\n                          variant={selectedTargetId === target.id ? \"default\" : \"outline\"}\n                          className=\"cursor-pointer\"\n                          onClick={() => handleTargetSelect(target.id)}\n                        >\n                          {target.name}\n                          {selectedTargetId === target.id && (\n                            <IconX className=\"h-3 w-3 ml-1\" />\n                          )}\n                        </Badge>\n                      ))}\n                    </div>\n                  )}\n                </div>\n                {selectedTargetId && (\n                  <p className=\"text-xs text-muted-foreground\">\n                    {t(\"form.selected\")}: {targets.find(t => t.id === selectedTargetId)?.name}\n                  </p>\n                )}\n              </>\n            )}\n          </div>\n\n          <div className=\"grid gap-4\">\n            <div className=\"grid gap-2\">\n              <Label>{t(\"form.cronExpression\")} *</Label>\n              <Input\n                placeholder={t(\"form.cronPlaceholder\")}\n                value={cronExpression}\n                onChange={(e) => setCronExpression(e.target.value)}\n                className=\"font-mono\"\n              />\n              <p className=\"text-xs text-muted-foreground\">\n                {t(\"form.cronFormat\")}\n              </p>\n            </div>\n\n            <div className=\"grid gap-2\">\n              <Label className=\"text-xs text-muted-foreground\">{t(\"form.quickSelect\")}</Label>\n              <div className=\"flex flex-wrap gap-2\">\n                {CRON_PRESETS.map((preset) => (\n                  <Badge\n                    key={preset.value}\n                    variant={cronExpression === preset.value ? \"default\" : \"outline\"}\n                    className=\"cursor-pointer\"\n                    onClick={() => setCronExpression(preset.value)}\n                  >\n                    {preset.label}\n                  </Badge>\n                ))}\n              </div>\n            </div>\n          </div>\n        </div>\n\n        <DialogFooter>\n          <Button variant=\"outline\" onClick={() => onOpenChange(false)}>\n            {t(\"buttons.cancel\")}\n          </Button>\n          <Button onClick={handleSubmit} disabled={isPending}>\n            {isPending && <IconLoader2 className=\"h-4 w-4 animate-spin\" />}\n            {t(\"buttons.saveChanges\")}\n          </Button>\n        </DialogFooter>\n      </DialogContent>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "frontend/components/scan/scheduled/index.ts",
    "content": "/**\n * Scheduled Scan Components - Unified exports\n */\nexport { ScheduledScanDataTable } from './scheduled-scan-data-table'\nexport { createScheduledScanColumns } from './scheduled-scan-columns'\nexport { CreateScheduledScanDialog } from './create-scheduled-scan-dialog'\nexport { EditScheduledScanDialog } from './edit-scheduled-scan-dialog'\n\n"
  },
  {
    "path": "frontend/components/scan/scheduled/scheduled-scan-columns.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { ColumnDef } from \"@tanstack/react-table\"\nimport { Button } from \"@/components/ui/button\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Switch } from \"@/components/ui/switch\"\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuSeparator,\n  DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\"\nimport {\n  MoreHorizontal,\n  Trash2,\n  Edit,\n  Building2,\n  Target,\n} from \"lucide-react\"\nimport { DataTableColumnHeader } from \"@/components/ui/data-table/column-header\"\nimport type { ScheduledScan } from \"@/types/scheduled-scan.types\"\n\n// Translation type definitions\nexport interface ScheduledScanTranslations {\n  columns: {\n    taskName: string\n    scanEngine: string\n    cronExpression: string\n    scope: string\n    status: string\n    nextRun: string\n    runCount: string\n    lastRun: string\n  }\n  actions: {\n    editTask: string\n    delete: string\n    openMenu: string\n  }\n  status: {\n    enabled: string\n    disabled: string\n  }\n  cron: {\n    everyMinute: string\n    everyNMinutes: string\n    everyHour: string\n    everyNHours: string\n    everyDay: string\n    everyWeek: string\n    everyMonth: string\n    weekdays: string[]\n  }\n}\n\ninterface CreateColumnsProps {\n  formatDate: (dateString: string) => string\n  handleEdit: (scan: ScheduledScan) => void\n  handleDelete: (scan: ScheduledScan) => void\n  handleToggleStatus: (scan: ScheduledScan, enabled: boolean) => void\n  t: ScheduledScanTranslations\n}\n\n/**\n * Parse Cron expression to human-readable format\n */\nfunction parseCronExpression(cron: string, t: ScheduledScanTranslations): string {\n  if (!cron) return '-'\n  \n  const parts = cron.split(' ')\n  if (parts.length !== 5) return cron\n  \n  const [minute, hour, day, month, weekday] = parts\n  \n  if (minute === '*' && hour === '*' && day === '*' && month === '*' && weekday === '*') {\n    return t.cron.everyMinute\n  }\n  \n  if (minute.startsWith('*/') && hour === '*') {\n    return t.cron.everyNMinutes.replace('{n}', minute.slice(2))\n  }\n  \n  if (minute !== '*' && hour === '*' && day === '*') {\n    return t.cron.everyHour.replace('{minute}', minute)\n  }\n  \n  if (hour.startsWith('*/')) {\n    return t.cron.everyNHours.replace('{n}', hour.slice(2)).replace('{minute}', minute)\n  }\n  \n  if (day === '*' && month === '*' && weekday === '*') {\n    return t.cron.everyDay.replace('{time}', `${hour.padStart(2, '0')}:${minute.padStart(2, '0')}`)\n  }\n  \n  if (day === '*' && month === '*' && weekday !== '*') {\n    const dayName = t.cron.weekdays[parseInt(weekday)] || weekday\n    return t.cron.everyWeek.replace('{day}', dayName).replace('{time}', `${hour.padStart(2, '0')}:${minute.padStart(2, '0')}`)\n  }\n  \n  if (day !== '*' && month === '*' && weekday === '*') {\n    return t.cron.everyMonth.replace('{day}', day).replace('{time}', `${hour.padStart(2, '0')}:${minute.padStart(2, '0')}`)\n  }\n  \n  return cron\n}\n\n/**\n * Scheduled scan row actions component\n */\nfunction ScheduledScanRowActions({\n  onEdit,\n  onDelete,\n  t,\n}: {\n  onEdit: () => void\n  onDelete: () => void\n  t: ScheduledScanTranslations\n}) {\n  return (\n    <DropdownMenu>\n      <DropdownMenuTrigger asChild>\n        <Button\n          variant=\"ghost\"\n          className=\"flex h-8 w-8 p-0 data-[state=open]:bg-muted\"\n        >\n          <MoreHorizontal />\n          <span className=\"sr-only\">{t.actions.openMenu}</span>\n        </Button>\n      </DropdownMenuTrigger>\n      <DropdownMenuContent align=\"end\">\n        <DropdownMenuItem onClick={onEdit}>\n          <Edit />\n          {t.actions.editTask}\n        </DropdownMenuItem>\n        <DropdownMenuSeparator />\n        <DropdownMenuItem\n          onClick={onDelete}\n          className=\"text-destructive focus:text-destructive\"\n        >\n          <Trash2 />\n          {t.actions.delete}\n        </DropdownMenuItem>\n      </DropdownMenuContent>\n    </DropdownMenu>\n  )\n}\n\n/**\n * Create scheduled scan table column definitions\n */\nexport const createScheduledScanColumns = ({\n  formatDate,\n  handleEdit,\n  handleDelete,\n  handleToggleStatus,\n  t,\n}: CreateColumnsProps): ColumnDef<ScheduledScan>[] => [\n  {\n    accessorKey: \"name\",\n    size: 350,\n    minSize: 250,\n    meta: { title: t.columns.taskName },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.taskName} />\n    ),\n    cell: ({ row }) => {\n      const name = row.getValue(\"name\") as string\n      if (!name) return <span className=\"text-muted-foreground text-sm\">-</span>\n\n      return (\n        <div className=\"flex-1 min-w-0\">\n          <span className=\"text-sm font-medium break-all leading-relaxed whitespace-normal\">\n            {name}\n          </span>\n        </div>\n      )\n    },\n  },\n  {\n    accessorKey: \"engineNames\",\n    size: 150,\n    minSize: 100,\n    meta: { title: t.columns.scanEngine },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.scanEngine} />\n    ),\n    cell: ({ row }) => {\n      const engineNames = row.original.engineNames || []\n      if (engineNames.length === 0) {\n        return <span className=\"text-muted-foreground text-sm\">-</span>\n      }\n      return (\n        <div className=\"flex flex-wrap gap-1\">\n          {engineNames.map((name, index) => (\n            <Badge key={index} variant=\"secondary\">\n              {name}\n            </Badge>\n          ))}\n        </div>\n      )\n    },\n  },\n  {\n    accessorKey: \"cronExpression\",\n    meta: { title: t.columns.cronExpression },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.cronExpression} />\n    ),\n    size: 150,\n    minSize: 100,\n    cell: ({ row }) => {\n      const cron = row.original.cronExpression\n      return (\n        <div className=\"flex flex-col gap-1\">\n          <span className=\"text-sm\">\n            {parseCronExpression(cron, t)}\n          </span>\n          <code className=\"text-xs text-muted-foreground font-mono\">\n            {cron}\n          </code>\n        </div>\n      )\n    },\n    enableSorting: false,\n  },\n  {\n    accessorKey: \"scanMode\",\n    meta: { title: t.columns.scope },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.scope} />\n    ),\n    size: 200,\n    minSize: 150,\n    cell: ({ row }) => {\n      const scanMode = row.original.scanMode\n      const organizationName = row.original.organizationName\n      const targetName = row.original.targetName\n      \n      if (scanMode === 'organization' && organizationName) {\n        return (\n          <div className=\"flex items-center gap-2\">\n            <Building2 className=\"h-4 w-4 text-muted-foreground shrink-0\" />\n            <span className=\"text-sm truncate\">{organizationName}</span>\n          </div>\n        )\n      }\n      \n      if (targetName) {\n        return (\n          <div className=\"flex items-center gap-2\">\n            <Target className=\"h-4 w-4 text-muted-foreground shrink-0\" />\n            <span className=\"text-sm font-mono truncate\">{targetName}</span>\n          </div>\n        )\n      }\n      \n      return <span className=\"text-sm text-muted-foreground\">-</span>\n    },\n    enableSorting: false,\n  },\n  {\n    accessorKey: \"isEnabled\",\n    size: 120,\n    minSize: 100,\n    meta: { title: t.columns.status },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.status} />\n    ),\n    cell: ({ row }) => {\n      const isEnabled = row.getValue(\"isEnabled\") as boolean\n      const scan = row.original\n      return (\n        <div className=\"flex items-center gap-2\">\n          <Switch\n            checked={isEnabled}\n            onCheckedChange={(checked: boolean) =>\n              handleToggleStatus(scan, checked)\n            }\n          />\n          <span className=\"text-sm text-muted-foreground\">\n            {isEnabled ? t.status.enabled : t.status.disabled}\n          </span>\n        </div>\n      )\n    },\n  },\n  {\n    accessorKey: \"nextRunTime\",\n    size: 150,\n    minSize: 120,\n    meta: { title: t.columns.nextRun },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.nextRun} />\n    ),\n    cell: ({ row }) => {\n      const nextRunTime = row.getValue(\"nextRunTime\") as string | undefined\n      return (\n        <div className=\"text-sm text-muted-foreground\">\n          {nextRunTime ? formatDate(nextRunTime) : \"-\"}\n        </div>\n      )\n    },\n  },\n  {\n    accessorKey: \"runCount\",\n    size: 80,\n    minSize: 60,\n    meta: { title: t.columns.runCount },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.runCount} />\n    ),\n    cell: ({ row }) => {\n      const count = row.getValue(\"runCount\") as number\n      return (\n        <div className=\"text-sm text-muted-foreground font-mono\">{count}</div>\n      )\n    },\n  },\n  {\n    accessorKey: \"lastRunTime\",\n    size: 150,\n    minSize: 120,\n    meta: { title: t.columns.lastRun },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.lastRun} />\n    ),\n    cell: ({ row }) => {\n      const lastRunTime = row.getValue(\"lastRunTime\") as string | undefined\n      return (\n        <div className=\"text-sm text-muted-foreground\">\n          {lastRunTime ? formatDate(lastRunTime) : \"-\"}\n        </div>\n      )\n    },\n  },\n  {\n    id: \"actions\",\n    size: 60,\n    minSize: 60,\n    maxSize: 60,\n    enableResizing: false,\n    cell: ({ row }) => (\n      <ScheduledScanRowActions\n        onEdit={() => handleEdit(row.original)}\n        onDelete={() => handleDelete(row.original)}\n        t={t}\n      />\n    ),\n    enableSorting: false,\n    enableHiding: false,\n  },\n]\n"
  },
  {
    "path": "frontend/components/scan/scheduled/scheduled-scan-data-table.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport type { ColumnDef } from \"@tanstack/react-table\"\nimport { useTranslations } from \"next-intl\"\nimport { IconSearch, IconLoader2 } from \"@tabler/icons-react\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { UnifiedDataTable } from \"@/components/ui/data-table\"\nimport type { ScheduledScan } from \"@/types/scheduled-scan.types\"\nimport type { PaginationInfo } from \"@/types/common.types\"\n\ninterface ScheduledScanDataTableProps {\n  data: ScheduledScan[]\n  columns: ColumnDef<ScheduledScan>[]\n  onAddNew?: () => void\n  searchPlaceholder?: string\n  searchValue?: string\n  onSearch?: (value: string) => void\n  isSearching?: boolean\n  addButtonText?: string\n  // Server-side pagination related\n  page?: number\n  pageSize?: number\n  total?: number\n  totalPages?: number\n  onPageChange?: (page: number) => void\n  onPageSizeChange?: (pageSize: number) => void\n}\n\n/**\n * Scheduled scan data table component\n * Uses UnifiedDataTable unified component\n */\nexport function ScheduledScanDataTable({\n  data = [],\n  columns,\n  onAddNew,\n  searchPlaceholder,\n  searchValue,\n  onSearch,\n  isSearching = false,\n  addButtonText,\n  page = 1,\n  pageSize = 10,\n  total = 0,\n  totalPages = 1,\n  onPageChange,\n  onPageSizeChange,\n}: ScheduledScanDataTableProps) {\n  const t = useTranslations(\"common.status\")\n  const tScan = useTranslations(\"scan.scheduled\")\n  \n  // Search local state\n  const [localSearchValue, setLocalSearchValue] = React.useState(searchValue || \"\")\n\n  React.useEffect(() => {\n    setLocalSearchValue(searchValue || \"\")\n  }, [searchValue])\n\n  const handleSearchSubmit = () => {\n    if (onSearch) {\n      onSearch(localSearchValue)\n    }\n  }\n\n  const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n    if (e.key === \"Enter\") {\n      handleSearchSubmit()\n    }\n  }\n\n  // Convert to pagination format required by UnifiedDataTable\n  const pagination = { pageIndex: page - 1, pageSize }\n  const paginationInfo: PaginationInfo = {\n    total,\n    totalPages,\n    page,\n    pageSize,\n  }\n\n  const handlePaginationChange = (newPagination: { pageIndex: number; pageSize: number }) => {\n    if (newPagination.pageSize !== pageSize && onPageSizeChange) {\n      onPageSizeChange(newPagination.pageSize)\n    }\n    if (newPagination.pageIndex !== page - 1 && onPageChange) {\n      onPageChange(newPagination.pageIndex + 1)\n    }\n  }\n\n  return (\n    <UnifiedDataTable\n      data={data}\n      columns={columns}\n      getRowId={(row) => String(row.id)}\n      // Pagination\n      pagination={pagination}\n      paginationInfo={paginationInfo}\n      onPaginationChange={handlePaginationChange}\n      // Selection\n      enableRowSelection={false}\n      // Bulk operations\n      showBulkDelete={false}\n      onAddNew={onAddNew}\n      addButtonLabel={addButtonText || tScan(\"createTitle\")}\n      // Empty state\n      emptyMessage={t(\"noData\")}\n      // Custom search box\n      toolbarLeft={\n        <div className=\"flex items-center space-x-2\">\n          <Input\n            placeholder={searchPlaceholder || tScan(\"searchPlaceholder\")}\n            value={localSearchValue}\n            onChange={(e) => setLocalSearchValue(e.target.value)}\n            onKeyDown={handleKeyDown}\n            className=\"h-8 max-w-sm\"\n          />\n          <Button variant=\"outline\" size=\"sm\" onClick={handleSearchSubmit} disabled={isSearching}>\n            {isSearching ? (\n              <IconLoader2 className=\"h-4 w-4 animate-spin\" />\n            ) : (\n              <IconSearch className=\"h-4 w-4\" />\n            )}\n          </Button>\n        </div>\n      }\n    />\n  )\n}\n"
  },
  {
    "path": "frontend/components/screenshots/screenshots-gallery.tsx",
    "content": "\"use client\"\n\nimport React, { useState, useCallback, useMemo } from \"react\"\nimport { AlertTriangle, Image as ImageIcon, ExternalLink, Trash2, X, ChevronLeft, ChevronRight, Search } from \"lucide-react\"\nimport { useTranslations } from \"next-intl\"\nimport { Button } from \"@/components/ui/button\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport { Skeleton } from \"@/components/ui/skeleton\"\nimport { ConfirmDialog } from \"@/components/ui/confirm-dialog\"\nimport { Input } from \"@/components/ui/input\"\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from \"@/components/ui/select\"\nimport {\n  Dialog,\n  DialogContent,\n  DialogTitle,\n} from \"@/components/ui/dialog\"\nimport { VisuallyHidden } from \"@radix-ui/react-visually-hidden\"\nimport { useTargetScreenshots, useScanScreenshots } from \"@/hooks/use-screenshots\"\nimport { ScreenshotService } from \"@/services/screenshot.service\"\nimport { toast } from \"sonner\"\nimport { cn } from \"@/lib/utils\"\n\nconst PAGE_SIZE_OPTIONS = [12, 24, 48]\n\ninterface Screenshot {\n  id: number\n  url: string\n  statusCode: number | null\n  createdAt: string\n}\n\ninterface ScreenshotsGalleryProps {\n  targetId?: number\n  scanId?: number\n}\n\nexport function ScreenshotsGallery({ targetId, scanId }: ScreenshotsGalleryProps) {\n  const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 12 })\n  const [searchInput, setSearchInput] = useState(\"\")  // 输入框的值\n  const [filterQuery, setFilterQuery] = useState(\"\")  // 实际用于查询的值\n  const [selectedIds, setSelectedIds] = useState<Set<number>>(new Set())\n  const [deleteDialogOpen, setDeleteDialogOpen] = useState(false)\n  const [isDeleting, setIsDeleting] = useState(false)\n  const [lightboxOpen, setLightboxOpen] = useState(false)\n  const [lightboxIndex, setLightboxIndex] = useState(0)\n\n  const t = useTranslations(\"pages.screenshots\")\n  const tCommon = useTranslations(\"common\")\n  const tToast = useTranslations(\"toast\")\n\n  // Fetch screenshots\n  const targetQuery = useTargetScreenshots(\n    targetId || 0,\n    { page: pagination.pageIndex + 1, pageSize: pagination.pageSize, filter: filterQuery || undefined },\n    { enabled: !!targetId }\n  )\n\n  const scanQuery = useScanScreenshots(\n    scanId || 0,\n    { page: pagination.pageIndex + 1, pageSize: pagination.pageSize, filter: filterQuery || undefined },\n    { enabled: !!scanId }\n  )\n\n  const activeQuery = targetId ? targetQuery : scanQuery\n  const { data, isLoading, error, refetch } = activeQuery\n\n  const screenshots: Screenshot[] = useMemo(() => data?.results || [], [data])\n  const totalPages = data?.totalPages || 0\n\n  // Selection handlers\n  const toggleSelect = useCallback((id: number) => {\n    setSelectedIds(prev => {\n      const next = new Set(prev)\n      if (next.has(id)) {\n        next.delete(id)\n      } else {\n        next.add(id)\n      }\n      return next\n    })\n  }, [])\n\n  const selectAll = useCallback(() => {\n    if (selectedIds.size === screenshots.length) {\n      setSelectedIds(new Set())\n    } else {\n      setSelectedIds(new Set(screenshots.map(s => s.id)))\n    }\n  }, [screenshots, selectedIds.size])\n\n  // Delete handler\n  const handleBulkDelete = async () => {\n    if (selectedIds.size === 0) return\n    setIsDeleting(true)\n    try {\n      const result = await ScreenshotService.bulkDelete(Array.from(selectedIds))\n      toast.success(tToast(\"deleteSuccess\", { count: result.deletedCount }))\n      setSelectedIds(new Set())\n      setDeleteDialogOpen(false)\n      refetch()\n    } catch (error) {\n      console.error(\"Failed to delete screenshots\", error)\n      toast.error(tToast(\"deleteFailed\"))\n    } finally {\n      setIsDeleting(false)\n    }\n  }\n\n  // Filter handler - 手动触发搜索\n  const handleSearch = () => {\n    setFilterQuery(searchInput)\n    setPagination(prev => ({ ...prev, pageIndex: 0 }))\n  }\n\n  // 回车触发搜索\n  const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n    if (e.key === 'Enter') {\n      handleSearch()\n    }\n  }\n\n  // Handle page size change\n  const handlePageSizeChange = (value: string) => {\n    const newPageSize = parseInt(value, 10)\n    setPagination({ pageIndex: 0, pageSize: newPageSize })\n  }\n\n  // Lightbox handlers\n  const openLightbox = (index: number) => {\n    setLightboxIndex(index)\n    setLightboxOpen(true)\n  }\n\n  const nextImage = () => {\n    setLightboxIndex(prev => (prev + 1) % screenshots.length)\n  }\n\n  const prevImage = () => {\n    setLightboxIndex(prev => (prev - 1 + screenshots.length) % screenshots.length)\n  }\n\n  // Get image URL\n  const getImageUrl = (screenshot: Screenshot) => {\n    if (scanId) {\n      return ScreenshotService.getSnapshotImageUrl(scanId, screenshot.id)\n    }\n    return ScreenshotService.getImageUrl(screenshot.id)\n  }\n\n  // Error state\n  if (error) {\n    return (\n      <div className=\"flex flex-col items-center justify-center py-12\">\n        <div className=\"rounded-full bg-destructive/10 p-3 mb-4\">\n          <AlertTriangle className=\"h-10 w-10 text-destructive\" />\n        </div>\n        <h3 className=\"text-lg font-semibold mb-2\">{tCommon(\"status.error\")}</h3>\n        <p className=\"text-muted-foreground text-center mb-4\">\n          {t(\"loadError\")}\n        </p>\n        <Button onClick={() => refetch()}>{tCommon(\"actions.retry\")}</Button>\n      </div>\n    )\n  }\n\n  // Loading state\n  if (isLoading && !data) {\n    return (\n      <div className=\"space-y-4\">\n        <div className=\"flex items-center gap-4\">\n          <Skeleton className=\"h-10 w-64\" />\n        </div>\n        <div className=\"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4\">\n          {Array.from({ length: 8 }).map((_, i) => (\n            <Skeleton key={i} className=\"aspect-video rounded-lg\" />\n          ))}\n        </div>\n      </div>\n    )\n  }\n\n  // Empty state\n  if (screenshots.length === 0 && !filterQuery) {\n    return (\n      <div className=\"flex flex-col items-center justify-center py-12\">\n        <div className=\"rounded-full bg-muted p-3 mb-4\">\n          <ImageIcon className=\"h-10 w-10 text-muted-foreground\" />\n        </div>\n        <h3 className=\"text-lg font-semibold mb-2\">{t(\"empty.title\")}</h3>\n        <p className=\"text-muted-foreground text-center\">\n          {t(\"empty.description\")}\n        </p>\n      </div>\n    )\n  }\n\n  return (\n    <div className=\"space-y-4\">\n      {/* Toolbar */}\n      <div className=\"flex items-center justify-between gap-4\">\n        <div className=\"flex items-center gap-2\">\n          <Input\n            placeholder={t(\"filterPlaceholder\")}\n            value={searchInput}\n            onChange={(e) => setSearchInput(e.target.value)}\n            onKeyDown={handleKeyDown}\n            className=\"w-64\"\n          />\n          <Button variant=\"outline\" size=\"sm\" onClick={handleSearch}>\n            <Search className=\"h-4 w-4\" />\n          </Button>\n        </div>\n        <div className=\"flex items-center gap-2\">\n          {targetId && selectedIds.size > 0 && (\n            <Button\n              variant=\"destructive\"\n              size=\"sm\"\n              onClick={() => setDeleteDialogOpen(true)}\n            >\n              <Trash2 className=\"h-4 w-4 mr-1\" />\n              {tCommon(\"actions.delete\")} ({selectedIds.size})\n            </Button>\n          )}\n          {screenshots.length > 0 && targetId && (\n            <Button variant=\"outline\" size=\"sm\" onClick={selectAll}>\n              {selectedIds.size === screenshots.length ? tCommon(\"actions.deselectAll\") : tCommon(\"actions.selectAll\")}\n            </Button>\n          )}\n        </div>\n      </div>\n\n      {/* Gallery grid */}\n      <div className=\"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4\">\n        {screenshots.map((screenshot, index) => (\n          <div\n            key={screenshot.id}\n            className={cn(\n              \"group relative aspect-video rounded-lg overflow-hidden border bg-muted cursor-pointer transition-all\",\n              selectedIds.has(screenshot.id) && \"ring-2 ring-primary\"\n            )}\n          >\n            {/* Checkbox */}\n            {targetId && (\n              <div\n                className=\"absolute top-2 left-2 z-10\"\n                onClick={(e) => {\n                  e.stopPropagation()\n                  toggleSelect(screenshot.id)\n                }}\n              >\n                <Checkbox\n                  checked={selectedIds.has(screenshot.id)}\n                  className=\"bg-background/80 backdrop-blur-sm\"\n                />\n              </div>\n            )}\n\n            {/* Image */}\n            <img\n              src={getImageUrl(screenshot)}\n              alt={screenshot.url}\n              className=\"w-full h-full object-cover transition-transform group-hover:scale-105\"\n              onClick={() => openLightbox(index)}\n              loading=\"lazy\"\n            />\n\n            {/* Overlay with URL and status code */}\n            <div className=\"absolute inset-x-0 bottom-0 bg-gradient-to-t from-black/80 to-transparent p-2\">\n              <div className=\"flex items-center gap-2\">\n                {screenshot.statusCode && (\n                  <span className={cn(\n                    \"text-xs px-1.5 py-0.5 rounded font-medium shrink-0\",\n                    screenshot.statusCode >= 200 && screenshot.statusCode < 300 && \"bg-green-500/80 text-white\",\n                    screenshot.statusCode >= 300 && screenshot.statusCode < 400 && \"bg-blue-500/80 text-white\",\n                    screenshot.statusCode >= 400 && screenshot.statusCode < 500 && \"bg-yellow-500/80 text-black\",\n                    screenshot.statusCode >= 500 && \"bg-red-500/80 text-white\"\n                  )}>\n                    {screenshot.statusCode}\n                  </span>\n                )}\n                <p className=\"text-white text-xs truncate\" title={screenshot.url}>\n                  {screenshot.url}\n                </p>\n              </div>\n            </div>\n\n            {/* Hover actions */}\n            <div className=\"absolute top-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity\">\n              <a\n                href={screenshot.url}\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n                onClick={(e) => e.stopPropagation()}\n                className=\"inline-flex items-center justify-center h-8 w-8 rounded-md bg-background/80 backdrop-blur-sm hover:bg-background\"\n              >\n                <ExternalLink className=\"h-4 w-4\" />\n              </a>\n            </div>\n          </div>\n        ))}\n      </div>\n\n      {/* Empty search results */}\n      {screenshots.length === 0 && filterQuery && (\n        <div className=\"flex flex-col items-center justify-center py-12\">\n          <p className=\"text-muted-foreground\">{t(\"noResults\")}</p>\n        </div>\n      )}\n\n      {/* Pagination */}\n      {(totalPages > 1 || (data?.total ?? 0) > 12) && (\n        <div className=\"flex justify-center items-center gap-4\">\n          <div className=\"flex items-center gap-2\">\n            <Button\n              variant=\"outline\"\n              size=\"sm\"\n              onClick={() => setPagination(prev => ({ ...prev, pageIndex: Math.max(0, prev.pageIndex - 1) }))}\n              disabled={pagination.pageIndex === 0}\n            >\n              <ChevronLeft className=\"h-4 w-4\" />\n            </Button>\n            <span className=\"text-sm text-muted-foreground\">\n              {pagination.pageIndex + 1} / {totalPages || 1}\n            </span>\n            <Button\n              variant=\"outline\"\n              size=\"sm\"\n              onClick={() => setPagination(prev => ({ ...prev, pageIndex: Math.min(totalPages - 1, prev.pageIndex + 1) }))}\n              disabled={pagination.pageIndex >= totalPages - 1}\n            >\n              <ChevronRight className=\"h-4 w-4\" />\n            </Button>\n          </div>\n          <Select value={String(pagination.pageSize)} onValueChange={handlePageSizeChange}>\n            <SelectTrigger className=\"w-20 h-8\">\n              <SelectValue />\n            </SelectTrigger>\n            <SelectContent>\n              {PAGE_SIZE_OPTIONS.map(size => (\n                <SelectItem key={size} value={String(size)}>{size}</SelectItem>\n              ))}\n            </SelectContent>\n          </Select>\n        </div>\n      )}\n\n      {/* Lightbox */}\n      <Dialog open={lightboxOpen} onOpenChange={setLightboxOpen}>\n        <DialogContent className=\"max-w-[90vw] max-h-[90vh] p-0 bg-black/95 border-none\">\n          <VisuallyHidden>\n            <DialogTitle>{t(\"lightboxTitle\")}</DialogTitle>\n          </VisuallyHidden>\n          <div className=\"relative w-full h-full flex items-center justify-center\">\n            {/* Close button */}\n            <button\n              onClick={() => setLightboxOpen(false)}\n              className=\"absolute top-4 right-4 z-50 p-2 rounded-full bg-white/10 hover:bg-white/20 transition-colors\"\n            >\n              <X className=\"h-6 w-6 text-white\" />\n            </button>\n\n            {/* Navigation */}\n            {screenshots.length > 1 && (\n              <>\n                <button\n                  onClick={prevImage}\n                  className=\"absolute left-4 z-50 p-2 rounded-full bg-white/10 hover:bg-white/20 transition-colors\"\n                >\n                  <ChevronLeft className=\"h-8 w-8 text-white\" />\n                </button>\n                <button\n                  onClick={nextImage}\n                  className=\"absolute right-4 z-50 p-2 rounded-full bg-white/10 hover:bg-white/20 transition-colors\"\n                >\n                  <ChevronRight className=\"h-8 w-8 text-white\" />\n                </button>\n              </>\n            )}\n\n            {/* Image */}\n            {screenshots[lightboxIndex] && (\n              <div className=\"flex flex-col items-center gap-4 p-8\">\n                <img\n                  src={getImageUrl(screenshots[lightboxIndex])}\n                  alt={screenshots[lightboxIndex].url}\n                  className=\"max-w-full max-h-[70vh] object-contain\"\n                />\n                <div className=\"text-white text-center\">\n                  <p className=\"text-sm opacity-80\">{lightboxIndex + 1} / {screenshots.length}</p>\n                  <div className=\"flex items-center gap-2 justify-center mt-1\">\n                    {screenshots[lightboxIndex].statusCode && (\n                      <span className={cn(\n                        \"text-sm px-2 py-0.5 rounded font-medium\",\n                        screenshots[lightboxIndex].statusCode >= 200 && screenshots[lightboxIndex].statusCode < 300 && \"bg-green-500 text-white\",\n                        screenshots[lightboxIndex].statusCode >= 300 && screenshots[lightboxIndex].statusCode < 400 && \"bg-blue-500 text-white\",\n                        screenshots[lightboxIndex].statusCode >= 400 && screenshots[lightboxIndex].statusCode < 500 && \"bg-yellow-500 text-black\",\n                        screenshots[lightboxIndex].statusCode >= 500 && \"bg-red-500 text-white\"\n                      )}>\n                        {screenshots[lightboxIndex].statusCode}\n                      </span>\n                    )}\n                    <a\n                      href={screenshots[lightboxIndex].url}\n                      target=\"_blank\"\n                      rel=\"noopener noreferrer\"\n                      className=\"text-blue-400 hover:underline flex items-center gap-1\"\n                    >\n                      {screenshots[lightboxIndex].url}\n                      <ExternalLink className=\"h-3 w-3\" />\n                    </a>\n                  </div>\n                </div>\n              </div>\n            )}\n          </div>\n        </DialogContent>\n      </Dialog>\n\n      {/* Delete confirmation */}\n      <ConfirmDialog\n        open={deleteDialogOpen}\n        onOpenChange={setDeleteDialogOpen}\n        title={tCommon(\"actions.confirmDelete\")}\n        description={tCommon(\"actions.deleteConfirmMessage\", { count: selectedIds.size })}\n        onConfirm={handleBulkDelete}\n        loading={isDeleting}\n        variant=\"destructive\"\n      />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/search/index.ts",
    "content": "export { SearchPage } from \"./search-page\"\nexport { SearchResultCard } from \"./search-result-card\"\nexport { SearchPagination } from \"./search-pagination\"\nexport { SearchResultsTable } from \"./search-results-table\"\n"
  },
  {
    "path": "frontend/components/search/search-page.tsx",
    "content": "\"use client\"\n\nimport { useState, useCallback, useMemo, useEffect } from \"react\"\nimport { useSearchParams } from \"next/navigation\"\nimport { motion, AnimatePresence } from \"framer-motion\"\nimport { Search, AlertCircle, History, X, Download } from \"lucide-react\"\nimport { useTranslations } from \"next-intl\"\nimport { toast } from \"sonner\"\nimport { SmartFilterInput, type FilterField } from \"@/components/common/smart-filter-input\"\nimport { SearchPagination } from \"./search-pagination\"\nimport { useAssetSearch } from \"@/hooks/use-search\"\nimport { VulnerabilityDetailDialog } from \"@/components/vulnerabilities/vulnerability-detail-dialog\"\nimport { VulnerabilityService } from \"@/services/vulnerability.service\"\nimport { SearchService } from \"@/services/search.service\"\nimport type { SearchParams, SearchState, Vulnerability as SearchVuln, AssetType } from \"@/types/search.types\"\nimport type { Vulnerability } from \"@/types/vulnerability.types\"\nimport { Alert, AlertDescription } from \"@/components/ui/alert\"\nimport { Button } from \"@/components/ui/button\"\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/ui/select\"\nimport { SearchResultsTable } from \"./search-results-table\"\nimport { SearchResultCard } from \"./search-result-card\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { cn } from \"@/lib/utils\"\n\n// Website 搜索示例\nconst WEBSITE_SEARCH_EXAMPLES = [\n  'host=\"api\"',\n  'title=\"Dashboard\"',\n  'tech=\"nginx\"',\n  'status==\"200\"',\n  'host=\"api\" && status==\"200\"',\n  'tech=\"vue\" || tech=\"react\"',\n  'host=\"admin\" && tech=\"php\" && status==\"200\"',\n  'status!=\"404\"',\n]\n\n// Endpoint 搜索示例\nconst ENDPOINT_SEARCH_EXAMPLES = [\n  'host=\"api\"',\n  'url=\"/api/v1\"',\n  'title=\"Dashboard\"',\n  'tech=\"nginx\"',\n  'status==\"200\"',\n  'host=\"api\" && status==\"200\"',\n  'url=\"/admin\" && status==\"200\"',\n  'tech=\"vue\" || tech=\"react\"',\n]\n\n// 快捷搜索标签\nconst QUICK_SEARCH_TAGS = [\n  { label: 'status==\"200\"', query: 'status==\"200\"' },\n  { label: 'tech=\"nginx\"', query: 'tech=\"nginx\"' },\n  { label: 'tech=\"php\"', query: 'tech=\"php\"' },\n  { label: 'tech=\"vue\"', query: 'tech=\"vue\"' },\n  { label: 'tech=\"react\"', query: 'tech=\"react\"' },\n  { label: 'status==\"403\"', query: 'status==\"403\"' },\n]\n\n// 最近搜索本地存储 key\nconst RECENT_SEARCHES_KEY = 'xingrin_recent_searches'\nconst MAX_RECENT_SEARCHES = 5\n\n// 获取最近搜索记录\nfunction getRecentSearches(): string[] {\n  if (typeof window === 'undefined') return []\n  try {\n    const saved = localStorage.getItem(RECENT_SEARCHES_KEY)\n    return saved ? JSON.parse(saved) : []\n  } catch {\n    return []\n  }\n}\n\n// 保存搜索记录\nfunction saveRecentSearch(query: string) {\n  if (typeof window === 'undefined' || !query.trim()) return\n  try {\n    const searches = getRecentSearches().filter(s => s !== query)\n    searches.unshift(query)\n    localStorage.setItem(\n      RECENT_SEARCHES_KEY,\n      JSON.stringify(searches.slice(0, MAX_RECENT_SEARCHES))\n    )\n  } catch {\n    // ignore\n  }\n}\n\n// 删除搜索记录\nfunction removeRecentSearch(query: string) {\n  if (typeof window === 'undefined') return\n  try {\n    const searches = getRecentSearches().filter(s => s !== query)\n    localStorage.setItem(RECENT_SEARCHES_KEY, JSON.stringify(searches))\n  } catch {\n    // ignore\n  }\n}\n\nexport function SearchPage() {\n  const t = useTranslations('search')\n  const urlSearchParams = useSearchParams()\n  const [searchState, setSearchState] = useState<SearchState>(\"initial\")\n  const [query, setQuery] = useState(\"\")\n  const [assetType, setAssetType] = useState<AssetType>(\"website\")\n  const [searchParams, setSearchParams] = useState<SearchParams>({})\n  const [page, setPage] = useState(1)\n  const [pageSize, setPageSize] = useState(10)\n  const [selectedVuln, setSelectedVuln] = useState<Vulnerability | null>(null)\n  const [vulnDialogOpen, setVulnDialogOpen] = useState(false)\n  const [, setLoadingVuln] = useState(false)\n  const [recentSearches, setRecentSearches] = useState<string[]>([])\n  const [initialQueryProcessed, setInitialQueryProcessed] = useState(false)\n\n  // 加载最近搜索记录\n  useEffect(() => {\n    setRecentSearches(getRecentSearches())\n  }, [])\n\n  // 处理 URL 参数中的搜索查询\n  useEffect(() => {\n    if (initialQueryProcessed) return\n    \n    const q = urlSearchParams.get('q')\n    if (q) {\n      setQuery(q)\n      setSearchParams({ q, asset_type: assetType })\n      setSearchState(\"searching\")\n      saveRecentSearch(q)\n      setRecentSearches(getRecentSearches())\n    }\n    setInitialQueryProcessed(true)\n  }, [urlSearchParams, assetType, initialQueryProcessed])\n\n  // 根据资产类型选择搜索示例\n  const searchExamples = useMemo(() => {\n    return assetType === 'endpoint' ? ENDPOINT_SEARCH_EXAMPLES : WEBSITE_SEARCH_EXAMPLES\n  }, [assetType])\n\n  // 搜索过滤字段配置\n  const SEARCH_FILTER_FIELDS: FilterField[] = [\n    { key: \"host\", label: \"Host\", description: t('fields.host') },\n    { key: \"url\", label: \"URL\", description: t('fields.url') },\n    { key: \"title\", label: \"Title\", description: t('fields.title') },\n    { key: \"tech\", label: \"Tech\", description: t('fields.tech') },\n    { key: \"status\", label: \"Status\", description: t('fields.status') },\n    { key: \"body\", label: \"Body\", description: t('fields.body') },\n    { key: \"header\", label: \"Header\", description: t('fields.header') },\n  ]\n\n  // 使用搜索 Hook\n  const { data, isLoading, error, isFetching } = useAssetSearch(\n    { ...searchParams, page, pageSize },\n    { enabled: searchState === \"results\" || searchState === \"searching\" }\n  )\n\n  const handleSearch = useCallback((_filters: unknown, rawQuery: string) => {\n    if (!rawQuery.trim()) return\n\n    setQuery(rawQuery)\n    setSearchParams({ q: rawQuery, asset_type: assetType })\n    setPage(1)\n    setSearchState(\"searching\")\n    \n    // 保存到最近搜索\n    saveRecentSearch(rawQuery)\n    setRecentSearches(getRecentSearches())\n  }, [assetType])\n\n  // 处理快捷标签点击\n  const handleQuickTagClick = useCallback((tagQuery: string) => {\n    setQuery(tagQuery)\n  }, [])\n\n  // 处理最近搜索点击\n  const handleRecentSearchClick = useCallback((recentQuery: string) => {\n    setQuery(recentQuery)\n    setSearchParams({ q: recentQuery, asset_type: assetType })\n    setPage(1)\n    setSearchState(\"searching\")\n    saveRecentSearch(recentQuery)\n    setRecentSearches(getRecentSearches())\n  }, [assetType])\n\n  // 删除最近搜索\n  const handleRemoveRecentSearch = useCallback((e: React.MouseEvent, searchQuery: string) => {\n    e.stopPropagation()\n    removeRecentSearch(searchQuery)\n    setRecentSearches(getRecentSearches())\n  }, [])\n\n  // 导出状态\n  const [isExporting, setIsExporting] = useState(false)\n\n  // 导出 CSV（调用后端 API 导出全部结果）\n  const handleExportCSV = useCallback(async () => {\n    if (!searchParams.q) return\n    \n    setIsExporting(true)\n    try {\n      await SearchService.exportCSV(searchParams.q, assetType)\n      toast.success(t('exportSuccess'))\n    } catch (error) {\n      console.error('Export failed:', error)\n      toast.error(t('exportFailed'))\n    } finally {\n      setIsExporting(false)\n    }\n  }, [searchParams.q, assetType, t])\n\n  // 当数据加载完成时更新状态\n  if (searchState === \"searching\" && data && !isLoading) {\n    setSearchState(\"results\")\n  }\n\n  const handleAssetTypeChange = useCallback((value: AssetType) => {\n    setAssetType(value)\n    // 清空搜索结果\n    if (searchState === \"results\") {\n      setSearchState(\"initial\")\n      setSearchParams({})\n      setQuery(\"\")\n    }\n  }, [searchState])\n\n  const handlePageChange = useCallback((newPage: number) => {\n    setPage(newPage)\n  }, [])\n\n  const handlePageSizeChange = useCallback((newPageSize: number) => {\n    setPageSize(newPageSize)\n    setPage(1)\n  }, [])\n\n  const handleViewVulnerability = useCallback(async (vuln: SearchVuln) => {\n    if (!vuln.id) return\n    \n    setLoadingVuln(true)\n    try {\n      const fullVuln = await VulnerabilityService.getVulnerabilityById(vuln.id)\n      setSelectedVuln(fullVuln)\n      setVulnDialogOpen(true)\n    } catch {\n      toast.error(t('vulnLoadError'))\n    } finally {\n      setLoadingVuln(false)\n    }\n  }, [t])\n\n  // 资产类型选择器组件\n  const AssetTypeSelector = (\n    <Select value={assetType} onValueChange={handleAssetTypeChange}>\n      <SelectTrigger size=\"sm\" className=\"w-[100px]\">\n        <SelectValue />\n      </SelectTrigger>\n      <SelectContent>\n        <SelectItem value=\"website\">{t('assetTypes.website')}</SelectItem>\n        <SelectItem value=\"endpoint\">{t('assetTypes.endpoint')}</SelectItem>\n      </SelectContent>\n    </Select>\n  )\n\n  return (\n    <div className=\"flex-1 w-full flex flex-col\">\n      <AnimatePresence mode=\"wait\">\n        {searchState === \"initial\" && (\n          <motion.div\n            key=\"initial\"\n            initial={{ opacity: 0, y: 20 }}\n            animate={{ opacity: 1, y: 0 }}\n            exit={{ opacity: 0, y: -50 }}\n            transition={{ duration: 0.3 }}\n            className=\"flex-1 flex flex-col items-center justify-center px-4 relative overflow-hidden\"\n          >\n            {/* 背景装饰 */}\n            <div className=\"absolute inset-0 -z-10 overflow-hidden pointer-events-none\">\n              <div className=\"absolute left-1/2 top-1/4 -translate-x-1/2 h-[400px] w-[600px] rounded-full bg-primary/5 blur-3xl\" />\n              <div className=\"absolute right-1/4 top-1/2 h-[200px] w-[300px] rounded-full bg-primary/3 blur-2xl\" />\n            </div>\n\n            <div className=\"flex flex-col items-center gap-6 w-full max-w-3xl -mt-16\">\n              {/* 标题 */}\n              <div className=\"flex flex-col items-center gap-2\">\n                <div className=\"flex items-center justify-center w-16 h-16 rounded-2xl bg-primary/10 mb-2\">\n                  <Search className=\"h-8 w-8 text-primary\" />\n                </div>\n                <h1 className=\"text-3xl font-semibold text-foreground\">\n                  {t('title')}\n                </h1>\n                <p className=\"text-sm text-muted-foreground\">\n                  {t('hint')}\n                </p>\n              </div>\n\n              {/* 搜索框 */}\n              <div className=\"flex items-center gap-3 w-full\">\n                {AssetTypeSelector}\n                <SmartFilterInput\n                  fields={SEARCH_FILTER_FIELDS}\n                  examples={searchExamples}\n                  placeholder='host=\"api\" && tech=\"nginx\" && status==\"200\"'\n                  value={query}\n                  onSearch={handleSearch}\n                  className=\"flex-1\"\n                />\n              </div>\n\n              {/* 快捷搜索标签 */}\n              <div className=\"flex flex-wrap justify-center gap-2\">\n                {QUICK_SEARCH_TAGS.map((tag) => (\n                  <Badge\n                    key={tag.query}\n                    variant=\"outline\"\n                    className=\"cursor-pointer hover:bg-accent transition-colors px-3 py-1\"\n                    onClick={() => handleQuickTagClick(tag.query)}\n                  >\n                    {tag.label}\n                  </Badge>\n                ))}\n              </div>\n\n              {/* 最近搜索 */}\n              {recentSearches.length > 0 && (\n                <motion.div\n                  initial={{ opacity: 0 }}\n                  animate={{ opacity: 1 }}\n                  transition={{ delay: 0.3 }}\n                  className=\"w-full max-w-xl mt-2\"\n                >\n                  <div className=\"flex items-center gap-2 text-xs text-muted-foreground mb-2\">\n                    <History className=\"h-3.5 w-3.5\" />\n                    <span>{t('recentSearches')}</span>\n                  </div>\n                  <div className=\"flex flex-wrap gap-2\">\n                    {recentSearches.map((search) => (\n                      <Badge\n                        key={search}\n                        variant=\"secondary\"\n                        className={cn(\n                          \"cursor-pointer hover:bg-secondary/80 transition-colors\",\n                          \"pl-3 pr-1.5 py-1 gap-1 group\"\n                        )}\n                        onClick={() => handleRecentSearchClick(search)}\n                      >\n                        <span className=\"font-mono text-xs truncate max-w-[200px]\">{search}</span>\n                        <button\n                          onClick={(e) => handleRemoveRecentSearch(e, search)}\n                          className=\"ml-1 p-0.5 rounded hover:bg-muted-foreground/20 opacity-0 group-hover:opacity-100 transition-opacity\"\n                        >\n                          <X className=\"h-3 w-3\" />\n                        </button>\n                      </Badge>\n                    ))}\n                  </div>\n                </motion.div>\n              )}\n            </div>\n          </motion.div>\n        )}\n\n        {searchState === \"searching\" && isLoading && (\n          <motion.div\n            key=\"searching\"\n            initial={{ opacity: 0 }}\n            animate={{ opacity: 1 }}\n            exit={{ opacity: 0 }}\n            transition={{ duration: 0.2 }}\n            className=\"h-full flex flex-col items-center justify-center\"\n          >\n            <div className=\"flex flex-col items-center gap-4\">\n              <div className=\"animate-spin rounded-full h-8 w-8 border-b-2 border-primary\" />\n              <span className=\"text-muted-foreground\">{t('searching')}</span>\n            </div>\n          </motion.div>\n        )}\n\n        {(searchState === \"results\" || (searchState === \"searching\" && !isLoading)) && (\n          <motion.div\n            key=\"results\"\n            initial={{ opacity: 0 }}\n            animate={{ opacity: 1 }}\n            transition={{ duration: 0.3 }}\n            className=\"h-full flex flex-col\"\n          >\n            {/* 顶部搜索栏 */}\n            <motion.div\n              initial={{ y: -20, opacity: 0 }}\n              animate={{ y: 0, opacity: 1 }}\n              transition={{ duration: 0.3, delay: 0.1 }}\n              className=\"sticky top-0 z-10 bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60 border-b px-4 py-3\"\n            >\n              <div className=\"flex items-center gap-3\">\n                {AssetTypeSelector}\n                <SmartFilterInput\n                  fields={SEARCH_FILTER_FIELDS}\n                  examples={searchExamples}\n                  placeholder='host=\"api\" && tech=\"nginx\" && status==\"200\"'\n                  value={query}\n                  onSearch={handleSearch}\n                  className=\"flex-1\"\n                />\n                <span className=\"text-sm text-muted-foreground whitespace-nowrap\">\n                  {isFetching ? t('loading') : t('resultsCount', { count: data?.total ?? 0 })}\n                </span>\n                <Button\n                  variant=\"outline\"\n                  size=\"sm\"\n                  onClick={handleExportCSV}\n                  disabled={!data?.results || data.results.length === 0 || isExporting}\n                >\n                  <Download className=\"h-4 w-4 mr-1.5\" />\n                  {isExporting ? t('exporting') : t('export')}\n                </Button>\n              </div>\n            </motion.div>\n\n            {/* 错误提示 */}\n            {error && (\n              <div className=\"p-4 w-full\">\n                <Alert variant=\"destructive\">\n                  <AlertCircle className=\"h-4 w-4\" />\n                  <AlertDescription>\n                    {t('error')}\n                  </AlertDescription>\n                </Alert>\n              </div>\n            )}\n\n            {/* 空结果提示 */}\n            {!error && data?.results.length === 0 && (\n              <div className=\"flex-1 flex flex-col items-center justify-center p-4\">\n                <div className=\"text-center\">\n                  <Search className=\"h-12 w-12 text-muted-foreground mx-auto mb-4\" />\n                  <h3 className=\"text-lg font-medium mb-2\">{t('noResults')}</h3>\n                  <p className=\"text-sm text-muted-foreground\">\n                    {t('noResultsHint')}\n                  </p>\n                </div>\n              </div>\n            )}\n\n            {/* 搜索结果 */}\n            {!error && data && data.results.length > 0 && (\n              <>\n                <div className=\"flex-1 overflow-auto p-4\">\n                  {assetType === 'website' ? (\n                    // Website 使用卡片样式\n                    <div className=\"space-y-4 max-w-4xl mx-auto\">\n                      {data.results.map((result) => (\n                        <SearchResultCard\n                          key={result.id}\n                          result={result}\n                          onViewVulnerability={handleViewVulnerability}\n                        />\n                      ))}\n                    </div>\n                  ) : (\n                    // Endpoint 使用表格样式\n                    <SearchResultsTable\n                      results={data.results}\n                      assetType={assetType}\n                      onViewVulnerability={handleViewVulnerability}\n                    />\n                  )}\n                </div>\n\n                {/* 分页控制 */}\n                <div className=\"border-t px-4 py-3\">\n                  <SearchPagination\n                    page={page}\n                    pageSize={pageSize}\n                    total={data.total}\n                    totalPages={data.totalPages}\n                    onPageChange={handlePageChange}\n                    onPageSizeChange={handlePageSizeChange}\n                  />\n                </div>\n              </>\n            )}\n          </motion.div>\n        )}\n      </AnimatePresence>\n\n      {/* 漏洞详情弹窗 - 复用现有组件 */}\n      <VulnerabilityDetailDialog\n        vulnerability={selectedVuln}\n        open={vulnDialogOpen}\n        onOpenChange={setVulnDialogOpen}\n      />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/search/search-pagination.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport {\n  IconChevronLeft,\n  IconChevronRight,\n  IconChevronsLeft,\n  IconChevronsRight,\n} from \"@tabler/icons-react\"\nimport { useTranslations } from 'next-intl'\nimport { Button } from \"@/components/ui/button\"\nimport { Label } from \"@/components/ui/label\"\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from \"@/components/ui/select\"\n\ninterface SearchPaginationProps {\n  page: number\n  pageSize: number\n  total: number\n  totalPages: number\n  onPageChange: (page: number) => void\n  onPageSizeChange: (pageSize: number) => void\n  pageSizeOptions?: number[]\n}\n\nconst DEFAULT_PAGE_SIZE_OPTIONS = [10, 20, 50, 100]\n\n/**\n * 搜索结果分页组件\n */\nexport function SearchPagination({\n  page,\n  pageSize,\n  total,\n  totalPages,\n  onPageChange,\n  onPageSizeChange,\n  pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS,\n}: SearchPaginationProps) {\n  const t = useTranslations('common.pagination')\n\n  const handlePageSizeChange = React.useCallback((value: string) => {\n    onPageSizeChange(Number(value))\n  }, [onPageSizeChange])\n\n  const handleFirstPage = React.useCallback(() => {\n    onPageChange(1)\n  }, [onPageChange])\n\n  const handlePreviousPage = React.useCallback(() => {\n    onPageChange(Math.max(1, page - 1))\n  }, [onPageChange, page])\n\n  const handleNextPage = React.useCallback(() => {\n    onPageChange(Math.min(totalPages, page + 1))\n  }, [onPageChange, page, totalPages])\n\n  const handleLastPage = React.useCallback(() => {\n    onPageChange(totalPages)\n  }, [onPageChange, totalPages])\n\n  const canPreviousPage = page > 1\n  const canNextPage = page < totalPages\n\n  return (\n    <div className=\"flex items-center justify-between\">\n      {/* 总数信息 */}\n      <div className=\"flex-1 text-sm text-muted-foreground\">\n        {t('total', { count: total })}\n      </div>\n\n      {/* 分页控制 */}\n      <div className=\"flex items-center space-x-6 lg:space-x-8\">\n        {/* 每页条数选择 */}\n        <div className=\"flex items-center space-x-2\">\n          <Label htmlFor=\"rows-per-page\" className=\"text-sm font-medium\">\n            {t('rowsPerPage')}\n          </Label>\n          <Select\n            value={`${pageSize}`}\n            onValueChange={handlePageSizeChange}\n          >\n            <SelectTrigger className=\"h-8 w-[90px]\" id=\"rows-per-page\">\n              <SelectValue placeholder={pageSize} />\n            </SelectTrigger>\n            <SelectContent side=\"top\">\n              {pageSizeOptions.map((size) => (\n                <SelectItem key={size} value={`${size}`}>\n                  {size}\n                </SelectItem>\n              ))}\n            </SelectContent>\n          </Select>\n        </div>\n\n        {/* 页码信息 */}\n        <div className=\"flex items-center justify-center text-sm font-medium whitespace-nowrap\">\n          {t('page', { current: page, total: totalPages || 1 })}\n        </div>\n\n        {/* 分页按钮 */}\n        <div className=\"flex items-center space-x-2\">\n          <Button\n            variant=\"outline\"\n            className=\"hidden h-8 w-8 p-0 lg:flex\"\n            onClick={handleFirstPage}\n            disabled={!canPreviousPage}\n          >\n            <span className=\"sr-only\">{t('first')}</span>\n            <IconChevronsLeft className=\"h-4 w-4\" />\n          </Button>\n          <Button\n            variant=\"outline\"\n            className=\"h-8 w-8 p-0\"\n            onClick={handlePreviousPage}\n            disabled={!canPreviousPage}\n          >\n            <span className=\"sr-only\">{t('previous')}</span>\n            <IconChevronLeft className=\"h-4 w-4\" />\n          </Button>\n          <Button\n            variant=\"outline\"\n            className=\"h-8 w-8 p-0\"\n            onClick={handleNextPage}\n            disabled={!canNextPage}\n          >\n            <span className=\"sr-only\">{t('next')}</span>\n            <IconChevronRight className=\"h-4 w-4\" />\n          </Button>\n          <Button\n            variant=\"outline\"\n            className=\"hidden h-8 w-8 p-0 lg:flex\"\n            onClick={handleLastPage}\n            disabled={!canNextPage}\n          >\n            <span className=\"sr-only\">{t('last')}</span>\n            <IconChevronsRight className=\"h-4 w-4\" />\n          </Button>\n        </div>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/search/search-result-card.tsx",
    "content": "\"use client\"\n\nimport { useState, useRef, useEffect } from \"react\"\nimport { ChevronDown, ChevronUp, Eye } from \"lucide-react\"\nimport { useTranslations } from \"next-intl\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\nimport { Card, CardContent } from \"@/components/ui/card\"\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\"\nimport {\n  Collapsible,\n  CollapsibleContent,\n  CollapsibleTrigger,\n} from \"@/components/ui/collapsible\"\nimport {\n  Table,\n  TableBody,\n  TableCell,\n  TableHead,\n  TableHeader,\n  TableRow,\n} from \"@/components/ui/table\"\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipTrigger,\n} from \"@/components/ui/tooltip\"\nimport type { SearchResult, Vulnerability, WebsiteSearchResult } from \"@/types/search.types\"\n\n// 类型守卫：检查是否为 WebsiteSearchResult\nfunction isWebsiteResult(result: SearchResult): result is WebsiteSearchResult {\n  return 'vulnerabilities' in result\n}\n\ninterface SearchResultCardProps {\n  result: SearchResult\n  onViewVulnerability?: (vuln: Vulnerability) => void\n}\n\n// 漏洞严重程度颜色配置\nconst severityColors: Record<string, string> = {\n  critical: \"bg-[#da3633]/10 text-[#da3633] border border-[#da3633]/20 dark:text-[#f85149]\",\n  high: \"bg-[#d29922]/10 text-[#d29922] border border-[#d29922]/20\",\n  medium: \"bg-[#d4a72c]/10 text-[#d4a72c] border border-[#d4a72c]/20\",\n  low: \"bg-[#238636]/10 text-[#238636] border border-[#238636]/20 dark:text-[#3fb950]\",\n  info: \"bg-[#848d97]/10 text-[#848d97] border border-[#848d97]/20\",\n}\n\n// 状态码 Badge variant\nfunction getStatusVariant(status: number | null): \"default\" | \"secondary\" | \"destructive\" | \"outline\" {\n  if (!status) return \"outline\"\n  if (status >= 200 && status < 300) return \"default\"\n  if (status >= 300 && status < 400) return \"secondary\"\n  if (status >= 400) return \"destructive\"\n  return \"outline\"\n}\n\nexport function SearchResultCard({ result, onViewVulnerability }: SearchResultCardProps) {\n  const t = useTranslations('search.card')\n  const [vulnOpen, setVulnOpen] = useState(false)\n  const [techExpanded, setTechExpanded] = useState(false)\n  const [isOverflowing, setIsOverflowing] = useState(false)\n  const containerRef = useRef<HTMLDivElement>(null)\n\n  const formatHeaders = (headers: Record<string, string>) => {\n    return Object.entries(headers)\n      .map(([key, value]) => `${key}: ${value}`)\n      .join(\"\\n\")\n  }\n\n  // 格式化字节数\n  const formatBytes = (bytes: number | null) => {\n    if (bytes === null || bytes === undefined) return null\n    if (bytes < 1024) return `${bytes} B`\n    if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n    return `${(bytes / (1024 * 1024)).toFixed(1)} MB`\n  }\n\n  // 检测内容是否溢出\n  const maxHeight = 26 * 4\n  \n  useEffect(() => {\n    const el = containerRef.current\n    if (!el || techExpanded) return\n\n    const checkOverflow = () => {\n      setIsOverflowing(el.scrollHeight > maxHeight)\n    }\n\n    checkOverflow()\n\n    const resizeObserver = new ResizeObserver(checkOverflow)\n    resizeObserver.observe(el)\n\n    return () => resizeObserver.disconnect()\n  }, [result.technologies, techExpanded, maxHeight])\n\n  const handleViewVulnerability = (vuln: Vulnerability) => {\n    if (onViewVulnerability) {\n      onViewVulnerability(vuln)\n    }\n  }\n\n  return (\n    <Card className=\"overflow-hidden py-0 gap-0\">\n      <CardContent className=\"p-0\">\n        {/* 顶部 URL + Badge 行 */}\n        <div className=\"px-4 py-2 bg-muted/30 border-b space-y-2\">\n          <h3 className=\"font-mono text-sm break-all\">\n            {result.url || result.host}\n          </h3>\n          {/* Badge 行 */}\n          <div className=\"flex flex-wrap items-center gap-2\">\n            <Badge variant={getStatusVariant(result.statusCode)} className=\"font-mono text-xs\">\n              {result.statusCode ?? '-'}\n            </Badge>\n            {result.webserver && (\n              <Badge variant=\"outline\" className=\"font-mono text-xs\">\n                {result.webserver}\n              </Badge>\n            )}\n            {result.contentType && (\n              <Badge variant=\"outline\" className=\"font-mono text-xs\">\n                {result.contentType.split(';')[0]}\n              </Badge>\n            )}\n            {formatBytes(result.contentLength) && (\n              <Badge variant=\"outline\" className=\"font-mono text-xs\">\n                {formatBytes(result.contentLength)}\n              </Badge>\n            )}\n\n          </div>\n        </div>\n\n        {/* 中间左右分栏 */}\n        <div className=\"flex flex-col md:flex-row\">\n          {/* 左侧信息区 */}\n          <div className=\"w-full md:w-[320px] md:shrink-0 px-4 py-3 border-b md:border-b-0 md:border-r flex flex-col\">\n            <div className=\"space-y-1.5 text-sm\">\n              <div className=\"flex items-baseline\">\n                <span className=\"text-muted-foreground w-12 shrink-0\">Title</span>\n                <span className=\"truncate\" title={result.title}>{result.title || '-'}</span>\n              </div>\n              <div className=\"flex items-baseline\">\n                <span className=\"text-muted-foreground w-12 shrink-0\">Host</span>\n                <span className=\"font-mono truncate\" title={result.host}>{result.host || '-'}</span>\n              </div>\n            </div>\n\n            {/* Technologies */}\n            {result.technologies && result.technologies.length > 0 && (\n              <div className=\"mt-3 flex flex-col gap-1\">\n                <div\n                  ref={containerRef}\n                  className=\"flex flex-wrap items-start gap-1 overflow-hidden transition-all duration-200\"\n                  style={{ maxHeight: techExpanded ? \"none\" : `${maxHeight}px` }}\n                >\n                  {result.technologies.map((tech, index) => (\n                    <Badge\n                      key={`${tech}-${index}`}\n                      variant=\"secondary\"\n                      className=\"text-xs\"\n                    >\n                      {tech}\n                    </Badge>\n                  ))}\n                </div>\n                {(isOverflowing || techExpanded) && (\n                  <button\n                    onClick={() => setTechExpanded(!techExpanded)}\n                    className=\"inline-flex items-center gap-0.5 text-xs text-muted-foreground hover:text-foreground transition-colors self-start\"\n                  >\n                    {techExpanded ? (\n                      <>\n                        <ChevronUp className=\"h-3 w-3\" />\n                        <span>{t('collapse')}</span>\n                      </>\n                    ) : (\n                      <>\n                        <ChevronDown className=\"h-3 w-3\" />\n                        <span>{t('expand')}</span>\n                      </>\n                    )}\n                  </button>\n                )}\n              </div>\n            )}\n          </div>\n\n          {/* 右侧 Tab 区 */}\n          <div className=\"w-full md:flex-1 flex flex-col\">\n            <Tabs defaultValue=\"header\" className=\"w-full h-full flex flex-col gap-0\">\n              <TabsList className=\"h-[28px] gap-4 rounded-none border-b bg-transparent px-4 pt-1\">\n                <TabsTrigger \n                  value=\"header\" \n                  className=\"h-full rounded-none border-b-2 border-transparent border-x-0 border-t-0 bg-transparent px-1 text-sm shadow-none focus-visible:ring-0 focus-visible:outline-none data-[state=active]:border-b-primary data-[state=active]:bg-transparent data-[state=active]:shadow-none\"\n                >\n                  Header\n                </TabsTrigger>\n                <TabsTrigger \n                  value=\"body\" \n                  className=\"h-full rounded-none border-b-2 border-transparent border-x-0 border-t-0 bg-transparent px-1 text-sm shadow-none focus-visible:ring-0 focus-visible:outline-none data-[state=active]:border-b-primary data-[state=active]:bg-transparent data-[state=active]:shadow-none\"\n                >\n                  Body\n                </TabsTrigger>\n                {result.location && (\n                  <TabsTrigger \n                    value=\"location\" \n                    className=\"h-full rounded-none border-b-2 border-transparent border-x-0 border-t-0 bg-transparent px-1 text-sm shadow-none focus-visible:ring-0 focus-visible:outline-none data-[state=active]:border-b-primary data-[state=active]:bg-transparent data-[state=active]:shadow-none\"\n                  >\n                    Location\n                  </TabsTrigger>\n                )}\n              </TabsList>\n              <TabsContent value=\"header\" className=\"flex-1 overflow-auto bg-muted/30 px-4 py-2 max-h-[200px]\">\n                <pre className=\"text-xs font-mono whitespace-pre-wrap\">\n                  {result.responseHeaders ? formatHeaders(result.responseHeaders) : '-'}\n                </pre>\n              </TabsContent>\n              <TabsContent value=\"body\" className=\"flex-1 overflow-auto bg-muted/30 px-4 py-2 max-h-[200px]\">\n                <pre className=\"text-xs font-mono whitespace-pre-wrap\">\n                  {result.responseBody || '-'}\n                </pre>\n              </TabsContent>\n              {result.location && (\n                <TabsContent value=\"location\" className=\"flex-1 overflow-auto bg-muted/30 px-4 py-2 max-h-[200px]\">\n                  <pre className=\"text-xs font-mono whitespace-pre-wrap\">\n                    {result.location}\n                  </pre>\n                </TabsContent>\n              )}\n            </Tabs>\n          </div>\n        </div>\n\n        {/* 底部漏洞区 - 仅 Website 类型显示 */}\n        {isWebsiteResult(result) && result.vulnerabilities && result.vulnerabilities.length > 0 && (\n          <div className=\"border-t\">\n            <Collapsible open={vulnOpen} onOpenChange={setVulnOpen}>\n              <CollapsibleTrigger className=\"flex items-center gap-1 px-4 py-2 text-sm text-muted-foreground hover:text-foreground transition-colors w-full\">\n                {vulnOpen ? (\n                  <ChevronDown className=\"size-4\" />\n                ) : (\n                  <ChevronUp className=\"size-4 rotate-90\" />\n                )}\n                <span>{t('vulnerabilities', { count: result.vulnerabilities.length })}</span>\n              </CollapsibleTrigger>\n              <CollapsibleContent>\n                <div className=\"px-4 pb-4\">\n                  <Table className=\"table-fixed\">\n                    <TableHeader>\n                      <TableRow>\n                        <TableHead className=\"text-xs w-[50%]\">{t('vulnName')}</TableHead>\n                        <TableHead className=\"text-xs w-[20%]\">{t('vulnType')}</TableHead>\n                        <TableHead className=\"text-xs w-[20%]\">{t('severity')}</TableHead>\n                        <TableHead className=\"text-xs w-[10%]\"></TableHead>\n                      </TableRow>\n                    </TableHeader>\n                    <TableBody>\n                      {result.vulnerabilities.map((vuln, index) => (\n                        <TableRow key={`${vuln.name}-${index}`}>\n                          <TableCell className=\"text-xs font-medium\">\n                            <Tooltip>\n                              <TooltipTrigger asChild>\n                                <span className=\"truncate block max-w-full cursor-default\">\n                                  {vuln.name}\n                                </span>\n                              </TooltipTrigger>\n                              <TooltipContent side=\"top\" className=\"max-w-[400px]\">\n                                {vuln.name}\n                              </TooltipContent>\n                            </Tooltip>\n                          </TableCell>\n                          <TableCell className=\"text-xs\">\n                            <Tooltip>\n                              <TooltipTrigger asChild>\n                                <span className=\"truncate block max-w-full cursor-default\">\n                                  {vuln.vulnType}\n                                </span>\n                              </TooltipTrigger>\n                              <TooltipContent side=\"top\">\n                                {vuln.vulnType}\n                              </TooltipContent>\n                            </Tooltip>\n                          </TableCell>\n                          <TableCell>\n                            <Badge\n                              variant=\"outline\"\n                              className={`text-xs ${severityColors[vuln.severity] || severityColors.info}`}\n                            >\n                              {vuln.severity}\n                            </Badge>\n                          </TableCell>\n                          <TableCell className=\"text-right\">\n                            <Button\n                              variant=\"ghost\"\n                              size=\"sm\"\n                              className=\"h-7 px-2\"\n                              onClick={() => handleViewVulnerability(vuln)}\n                            >\n                              <Eye className=\"h-3.5 w-3.5\" />\n                            </Button>\n                          </TableCell>\n                        </TableRow>\n                      ))}\n                    </TableBody>\n                  </Table>\n                </div>\n              </CollapsibleContent>\n            </Collapsible>\n          </div>\n        )}\n      </CardContent>\n    </Card>\n  )\n}\n"
  },
  {
    "path": "frontend/components/search/search-results-table.tsx",
    "content": "\"use client\"\n\nimport { useMemo } from \"react\"\nimport { useFormatter } from \"next-intl\"\nimport type { ColumnDef } from \"@tanstack/react-table\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { DataTableColumnHeader, UnifiedDataTable } from \"@/components/ui/data-table\"\nimport { ExpandableCell, ExpandableTagList } from \"@/components/ui/data-table/expandable-cell\"\nimport type { SearchResult, AssetType, Vulnerability, EndpointSearchResult } from \"@/types/search.types\"\n\ninterface SearchResultsTableProps {\n  results: SearchResult[]\n  assetType: AssetType\n  onViewVulnerability?: (vuln: Vulnerability) => void\n}\n\nexport function SearchResultsTable({ results, assetType }: SearchResultsTableProps) {\n  const format = useFormatter()\n\n  const formatDate = (dateString: string) => {\n    return format.dateTime(new Date(dateString), {\n      year: 'numeric',\n      month: '2-digit',\n      day: '2-digit',\n      hour: '2-digit',\n      minute: '2-digit',\n    })\n  }\n\n  // 基础列定义（Website 和 Endpoint 共用）\n  const baseColumns: ColumnDef<SearchResult, unknown>[] = useMemo(() => [\n    {\n      id: \"url\",\n      accessorKey: \"url\",\n      meta: { title: \"URL\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"URL\" />\n      ),\n      size: 350,\n      minSize: 200,\n      maxSize: 600,\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"url\")} />\n      ),\n    },\n    {\n      id: \"host\",\n      accessorKey: \"host\",\n      meta: { title: \"Host\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Host\" />\n      ),\n      size: 180,\n      minSize: 100,\n      maxSize: 250,\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"host\")} />\n      ),\n    },\n    {\n      id: \"title\",\n      accessorKey: \"title\",\n      meta: { title: \"Title\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Title\" />\n      ),\n      size: 150,\n      minSize: 100,\n      maxSize: 300,\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"title\")} />\n      ),\n    },\n    {\n      id: \"statusCode\",\n      accessorKey: \"statusCode\",\n      meta: { title: \"Status\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Status\" />\n      ),\n      size: 80,\n      minSize: 60,\n      maxSize: 100,\n      cell: ({ row }) => {\n        const statusCode = row.getValue(\"statusCode\") as number | null\n        if (!statusCode) return <span className=\"text-muted-foreground\">-</span>\n        \n        let variant: \"default\" | \"secondary\" | \"destructive\" | \"outline\" = \"outline\"\n        if (statusCode >= 200 && statusCode < 300) {\n          variant = \"outline\"\n        } else if (statusCode >= 300 && statusCode < 400) {\n          variant = \"secondary\"\n        } else if (statusCode >= 400 && statusCode < 500) {\n          variant = \"default\"\n        } else if (statusCode >= 500) {\n          variant = \"destructive\"\n        }\n        \n        return <Badge variant={variant} className=\"font-mono\">{statusCode}</Badge>\n      },\n    },\n    {\n      id: \"technologies\",\n      accessorKey: \"technologies\",\n      meta: { title: \"Tech\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Tech\" />\n      ),\n      size: 180,\n      minSize: 120,\n      cell: ({ row }) => {\n        const tech = row.getValue(\"technologies\") as string[] | null\n        if (!tech || tech.length === 0) return <span className=\"text-muted-foreground\">-</span>\n        return <ExpandableTagList items={tech} maxLines={2} variant=\"outline\" />\n      },\n    },\n    {\n      id: \"contentLength\",\n      accessorKey: \"contentLength\",\n      meta: { title: \"Length\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Length\" />\n      ),\n      size: 100,\n      minSize: 80,\n      maxSize: 150,\n      cell: ({ row }) => {\n        const len = row.getValue(\"contentLength\") as number | null\n        if (len === null || len === undefined) return <span className=\"text-muted-foreground\">-</span>\n        return <span className=\"font-mono tabular-nums\">{new Intl.NumberFormat().format(len)}</span>\n      },\n    },\n    {\n      id: \"location\",\n      accessorKey: \"location\",\n      meta: { title: \"Location\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Location\" />\n      ),\n      size: 150,\n      minSize: 100,\n      maxSize: 300,\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"location\")} />\n      ),\n    },\n    {\n      id: \"webserver\",\n      accessorKey: \"webserver\",\n      meta: { title: \"Server\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Server\" />\n      ),\n      size: 120,\n      minSize: 80,\n      maxSize: 200,\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"webserver\")} />\n      ),\n    },\n    {\n      id: \"contentType\",\n      accessorKey: \"contentType\",\n      meta: { title: \"Type\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Type\" />\n      ),\n      size: 120,\n      minSize: 80,\n      maxSize: 200,\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"contentType\")} />\n      ),\n    },\n    {\n      id: \"responseBody\",\n      accessorKey: \"responseBody\",\n      meta: { title: \"Body\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Body\" />\n      ),\n      size: 300,\n      minSize: 200,\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"responseBody\")} maxLines={3} />\n      ),\n    },\n    {\n      id: \"responseHeaders\",\n      accessorKey: \"responseHeaders\",\n      meta: { title: \"Headers\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Headers\" />\n      ),\n      size: 250,\n      minSize: 150,\n      maxSize: 400,\n      cell: ({ row }) => {\n        const headers = row.getValue(\"responseHeaders\") as Record<string, string> | null\n        if (!headers || Object.keys(headers).length === 0) {\n          return <span className=\"text-muted-foreground\">-</span>\n        }\n        const headersStr = Object.entries(headers)\n          .map(([k, v]) => `${k}: ${v}`)\n          .join('\\n')\n        return <ExpandableCell value={headersStr} maxLines={3} />\n      },\n    },\n    {\n      id: \"vhost\",\n      accessorKey: \"vhost\",\n      meta: { title: \"VHost\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"VHost\" />\n      ),\n      size: 80,\n      minSize: 60,\n      maxSize: 100,\n      cell: ({ row }) => {\n        const vhost = row.getValue(\"vhost\") as boolean | null\n        if (vhost === null || vhost === undefined) return <span className=\"text-muted-foreground\">-</span>\n        return <span className=\"font-mono text-sm\">{vhost ? \"true\" : \"false\"}</span>\n      },\n    },\n    {\n      id: \"createdAt\",\n      accessorKey: \"createdAt\",\n      meta: { title: \"Created\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"Created\" />\n      ),\n      size: 150,\n      minSize: 120,\n      maxSize: 200,\n      cell: ({ row }) => {\n        const createdAt = row.getValue(\"createdAt\") as string | null\n        if (!createdAt) return <span className=\"text-muted-foreground\">-</span>\n        return <span className=\"text-sm\">{formatDate(createdAt)}</span>\n      },\n    },\n  ], [formatDate])\n\n  // Endpoint 特有列\n  const endpointColumns: ColumnDef<SearchResult, unknown>[] = useMemo(() => [\n    {\n      id: \"matchedGfPatterns\",\n      accessorKey: \"matchedGfPatterns\",\n      meta: { title: \"GF Patterns\" },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title=\"GF Patterns\" />\n      ),\n      size: 150,\n      minSize: 100,\n      maxSize: 250,\n      cell: ({ row }) => {\n        const patterns = (row.original as EndpointSearchResult).matchedGfPatterns\n        if (!patterns || patterns.length === 0) return <span className=\"text-muted-foreground\">-</span>\n        return <ExpandableTagList items={patterns} maxLines={2} variant=\"secondary\" />\n      },\n    },\n  ], [])\n\n  // 根据资产类型组合列\n  const columns = useMemo(() => {\n    if (assetType === 'endpoint') {\n      // 在 technologies 后面插入 gfPatterns\n      const techIndex = baseColumns.findIndex(col => col.id === 'technologies')\n      const cols = [...baseColumns]\n      cols.splice(techIndex + 1, 0, ...endpointColumns)\n      return cols\n    }\n    return baseColumns\n  }, [assetType, baseColumns, endpointColumns])\n\n  return (\n    <UnifiedDataTable\n      columns={columns}\n      data={results}\n      getRowId={(row) => String(row.id)}\n      hideToolbar\n      hidePagination\n      enableRowSelection={false}\n    />\n  )\n}\n"
  },
  {
    "path": "frontend/components/settings/system-logs/ansi-log-viewer.tsx",
    "content": "\"use client\"\n\nimport { useMemo, useRef, useEffect } from \"react\"\nimport AnsiToHtml from \"ansi-to-html\"\nimport type { LogLevel } from \"./log-toolbar\"\n\ninterface AnsiLogViewerProps {\n  content: string\n  className?: string\n  searchQuery?: string\n  logLevel?: LogLevel\n}\n\n// 日志级别颜色配置\nconst LOG_LEVEL_COLORS: Record<string, string> = {\n  DEBUG: \"#4ec9b0\",    // cyan\n  INFO: \"#6a9955\",     // green\n  WARNING: \"#dcdcaa\",  // yellow\n  WARN: \"#dcdcaa\",     // yellow\n  ERROR: \"#f44747\",    // red\n  CRITICAL: \"#f44747\", // red (bold handled separately)\n}\n\n// 创建 ANSI 转换器实例\nconst ansiConverter = new AnsiToHtml({\n  fg: \"#d4d4d4\",\n  bg: \"#1e1e1e\",\n  newline: false,  // 我们自己处理换行\n  escapeXML: true,\n  colors: {\n    0: \"#1e1e1e\",   // black\n    1: \"#f44747\",   // red\n    2: \"#6a9955\",   // green\n    3: \"#dcdcaa\",   // yellow\n    4: \"#569cd6\",   // blue\n    5: \"#c586c0\",   // magenta\n    6: \"#4ec9b0\",   // cyan\n    7: \"#d4d4d4\",   // white\n    8: \"#808080\",   // bright black\n    9: \"#f44747\",   // bright red\n    10: \"#6a9955\",  // bright green\n    11: \"#dcdcaa\",  // bright yellow\n    12: \"#569cd6\",  // bright blue\n    13: \"#c586c0\",  // bright magenta\n    14: \"#4ec9b0\",  // bright cyan\n    15: \"#ffffff\",  // bright white\n  },\n})\n\n// 检测内容是否包含 ANSI 颜色码\nfunction hasAnsiCodes(text: string): boolean {\n  // ANSI 转义序列通常以 ESC[ 开头（\\x1b[ 或 \\u001b[）\n  return /\\x1b\\[|\\u001b\\[/.test(text)\n}\n\n// 解析纯文本日志内容，为日志级别添加颜色\nfunction colorizeLogContent(content: string): string {\n  // 匹配日志格式:\n  // 1) 系统日志: [2026-01-10 09:51:52] [INFO] [apps.scan.xxx:123] ...\n  // 2) 扫描日志: [09:50:37] [INFO] [subdomain_discovery] ...\n  const logLineRegex = /^(\\[(?:\\d{4}-\\d{2}-\\d{2} )?\\d{2}:\\d{2}:\\d{2}\\]) (\\[(DEBUG|INFO|WARNING|WARN|ERROR|CRITICAL)\\]) (.*)$/i\n  \n  return content\n    .split(\"\\n\")\n    .map((line) => {\n      const match = line.match(logLineRegex)\n      \n      if (match) {\n        const [, timestamp, levelBracket, level, rest] = match\n        const levelUpper = level.toUpperCase()\n        const color = LOG_LEVEL_COLORS[levelUpper] || \"#d4d4d4\"\n        // ansiConverter.toHtml 已经处理了 HTML 转义\n        const escapedTimestamp = ansiConverter.toHtml(timestamp)\n        const escapedLevelBracket = ansiConverter.toHtml(levelBracket)\n        const escapedRest = ansiConverter.toHtml(rest)\n        \n        // 时间戳灰色，日志级别带颜色，其余默认色\n        return `<span style=\"color:#808080\">${escapedTimestamp}</span> <span style=\"color:${color};font-weight:${levelUpper === \"CRITICAL\" ? \"bold\" : \"normal\"}\">${escapedLevelBracket}</span> ${escapedRest}`\n      }\n      \n      // 非标准格式的行，也进行 HTML 转义\n      return ansiConverter.toHtml(line)\n    })\n    .join(\"\\n\")\n}\n\n// 高亮搜索关键词\nfunction highlightSearch(html: string, query: string): string {\n  if (!query.trim()) return html\n\n  // `ansi-to-html` 在 `escapeXML: true` 时，会把非 ASCII 字符（如中文）转成实体：\n  // 例如 \"中文\" => \"&#x4E2D;&#x6587;\"。\n  // 因此这里需要用同样的转义规则来生成可匹配的搜索串。\n  const escapedQueryForHtml = ansiConverter.toHtml(query)\n\n  // 转义正则特殊字符\n  const escapedQuery = escapedQueryForHtml.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")\n  const regex = new RegExp(`(${escapedQuery})`, \"giu\")\n\n  // 在标签外的文本中高亮关键词\n  return html.replace(/(<[^>]+>)|([^<]+)/g, (match, tag, text) => {\n    if (tag) return tag\n    if (text) {\n      return text.replace(\n        regex,\n        '<mark style=\"background:#fbbf24;color:#1e1e1e;border-radius:2px;padding:0 2px\">$1</mark>'\n      )\n    }\n    return match\n  })\n}\n\n// 多种日志格式的级别提取正则\nconst LOG_LEVEL_PATTERNS = [\n  // 标准格式: [2026-01-07 12:00:00] [INFO]\n  /^\\[\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\] \\[(DEBUG|INFO|WARNING|WARN|ERROR|CRITICAL)\\]/i,\n  // 扫描日志格式: [09:50:37] [INFO] [stage]\n  /^\\[\\d{2}:\\d{2}:\\d{2}\\] \\[(DEBUG|INFO|WARNING|WARN|ERROR|CRITICAL)\\]/i,\n  // Prefect 格式: 12:01:50.419 | WARNING | prefect\n  /^[\\d:.]+\\s+\\|\\s+(DEBUG|INFO|WARNING|WARN|ERROR|CRITICAL)\\s+\\|/i,\n  // 简单格式: [INFO] message 或 INFO: message\n  /^(?:\\[)?(DEBUG|INFO|WARNING|WARN|ERROR|CRITICAL)(?:\\])?[:\\s]/i,\n  // Python logging 格式: INFO - message\n  /^(DEBUG|INFO|WARNING|WARN|ERROR|CRITICAL)\\s+-\\s+/i,\n]\n\n// 新日志条目起始模式（无级别但表示新条目开始）\nconst NEW_ENTRY_PATTERNS = [\n  /^\\[\\d+\\/\\d+\\]/, // [1/4], [2/4] 等步骤标记\n  /^\\[CONFIG\\]/i, // [CONFIG] 配置信息\n  /^\\[诊断\\]/, // [诊断] 诊断信息\n  /^={10,}$/, // ============ 分隔线\n  /^\\[\\d{4}-\\d{2}-\\d{2}/, // 时间戳开头 [2026-01-07...\n  /^\\d{2}:\\d{2}:\\d{2}/, // 时间开头 12:01:50...\n  /^\\/[\\w/]+\\.py:\\d+:/, // Python 文件路径 /path/file.py:123:\n]\n\n// 从行中提取日志级别\nfunction extractLogLevel(line: string): string | null {\n  for (const pattern of LOG_LEVEL_PATTERNS) {\n    const match = line.match(pattern)\n    if (match) {\n      return match[1].toUpperCase()\n    }\n  }\n  return null\n}\n\n// 检测是否是新日志条目的起始（无级别）\nfunction isNewEntryStart(line: string): boolean {\n  return NEW_ENTRY_PATTERNS.some((pattern) => pattern.test(line))\n}\n\n// 级别标准化\nfunction normalizeLevel(l: string): string {\n  const upper = l.toUpperCase()\n  if (upper === \"WARNING\") return \"WARN\"\n  if (upper === \"CRITICAL\") return \"ERROR\"\n  return upper\n}\n\n// 根据级别筛选日志行\n// 支持多行日志：非标准格式的行会跟随前一个标准日志行的级别\nfunction filterByLevel(content: string, level: LogLevel): string {\n  if (level === \"all\") return content\n  \n  const targetLevel = normalizeLevel(level)\n  const lines = content.split(\"\\n\")\n  const result: string[] = []\n  // 默认隐藏，直到遇到第一个匹配目标级别的日志行\n  let currentBlockVisible = false\n  \n  for (const line of lines) {\n    const extractedLevel = extractLogLevel(line)\n    if (extractedLevel) {\n      // 这是一个新的日志条目，精确匹配级别\n      const lineLevel = normalizeLevel(extractedLevel)\n      currentBlockVisible = lineLevel === targetLevel\n    } else if (isNewEntryStart(line)) {\n      // 无级别但是新条目开始，隐藏\n      currentBlockVisible = false\n    }\n    // 非标准行跟随前一个日志条目的可见性\n    if (currentBlockVisible) {\n      result.push(line)\n    }\n  }\n  \n  return result.join(\"\\n\")\n}\n\nexport function AnsiLogViewer({ content, className, searchQuery = \"\", logLevel = \"all\" }: AnsiLogViewerProps) {\n  const containerRef = useRef<HTMLPreElement>(null)\n  const isAtBottomRef = useRef(true)  // 跟踪用户是否在底部\n\n  // 解析日志并添加颜色\n  // 支持两种模式：ANSI 颜色码和纯文本日志级别解析\n  const htmlContent = useMemo(() => {\n    if (!content) return \"\"\n    \n    // 先按级别筛选\n    const filteredContent = filterByLevel(content, logLevel)\n    \n    let result: string\n    // 如果包含 ANSI 颜色码，直接转换\n    if (hasAnsiCodes(filteredContent)) {\n      result = ansiConverter.toHtml(filteredContent)\n    } else {\n      // 否则解析日志级别添加颜色\n      result = colorizeLogContent(filteredContent)\n    }\n    \n    // 应用搜索高亮\n    return highlightSearch(result, searchQuery)\n  }, [content, searchQuery, logLevel])\n\n  // 监听滚动事件，检测用户是否在底部\n  useEffect(() => {\n    const container = containerRef.current\n    if (!container) return\n    \n    const handleScroll = () => {\n      const { scrollTop, scrollHeight, clientHeight } = container\n      // 允许 30px 的容差，认为在底部附近\n      isAtBottomRef.current = scrollHeight - scrollTop - clientHeight < 30\n    }\n    \n    container.addEventListener('scroll', handleScroll)\n    return () => container.removeEventListener('scroll', handleScroll)\n  }, [])\n\n  // 只有用户在底部时才自动滚动\n  useEffect(() => {\n    if (containerRef.current && isAtBottomRef.current) {\n      containerRef.current.scrollTop = containerRef.current.scrollHeight\n    }\n  }, [htmlContent])\n\n  return (\n    <pre\n      ref={containerRef}\n      className={className}\n      style={{\n        height: \"100%\",\n        width: \"100%\",\n        margin: 0,\n        padding: \"12px\",\n        overflow: \"auto\",\n        backgroundColor: \"#1e1e1e\",\n        color: \"#d4d4d4\",\n        fontSize: \"12px\",\n        fontFamily: 'Menlo, Monaco, \"Courier New\", monospace',\n        lineHeight: 1.5,\n        whiteSpace: \"pre-wrap\",\n        wordBreak: \"break-all\",\n      }}\n      dangerouslySetInnerHTML={{ __html: htmlContent }}\n    />\n  )\n}\n"
  },
  {
    "path": "frontend/components/settings/system-logs/index.ts",
    "content": "export { SystemLogsView } from \"./system-logs-view\"\nexport { AnsiLogViewer } from \"./ansi-log-viewer\"\n"
  },
  {
    "path": "frontend/components/settings/system-logs/log-toolbar.tsx",
    "content": "\"use client\"\n\nimport { useMemo } from \"react\"\nimport { useTranslations } from \"next-intl\"\nimport { FileText, Search } from \"lucide-react\"\n\nimport {\n  Select,\n  SelectContent,\n  SelectGroup,\n  SelectItem,\n  SelectLabel,\n  SelectTrigger,\n  SelectValue,\n} from \"@/components/ui/select\"\nimport { Input } from \"@/components/ui/input\"\nimport type { LogFile } from \"@/types/system-log.types\"\n\nconst LINE_OPTIONS = [100, 200, 500, 1000, 5000, 10000] as const\n\nexport type LogLevel = \"all\" | \"DEBUG\" | \"INFO\" | \"WARN\" | \"ERROR\"\nexport const LOG_LEVELS: LogLevel[] = [\"all\", \"DEBUG\", \"INFO\", \"WARN\", \"ERROR\"]\n\ninterface LogToolbarProps {\n  files: LogFile[]\n  selectedFile: string\n  lines: number\n  searchQuery: string\n  logLevel: LogLevel\n  onFileChange: (filename: string) => void\n  onLinesChange: (lines: number) => void\n  onSearchChange: (query: string) => void\n  onLogLevelChange: (level: LogLevel) => void\n}\n\nexport function LogToolbar({\n  files,\n  selectedFile,\n  lines,\n  searchQuery,\n  logLevel,\n  onFileChange,\n  onLinesChange,\n  onSearchChange,\n  onLogLevelChange,\n}: LogToolbarProps) {\n  const t = useTranslations(\"settings.systemLogs\")\n\n  // 将文件按分类分组\n  const groupedFiles = useMemo(() => {\n    const systemLogs = files.filter(\n      (f) => f.category === \"system\" || f.category === \"error\" || f.category === \"performance\"\n    )\n    const containerLogs = files.filter((f) => f.category === \"container\")\n    return { systemLogs, containerLogs }\n  }, [files])\n\n  return (\n    <div className=\"flex items-center gap-3 flex-wrap\">\n      {/* 日志文件选择 */}\n      <Select value={selectedFile} onValueChange={onFileChange}>\n        <SelectTrigger className=\"w-[200px]\">\n          <FileText className=\"h-4 w-4 text-muted-foreground\" />\n          <SelectValue placeholder={t(\"toolbar.selectFile\")} />\n        </SelectTrigger>\n        <SelectContent>\n          {groupedFiles.systemLogs.length > 0 && (\n            <SelectGroup>\n              <SelectLabel>{t(\"toolbar.systemLogsGroup\")}</SelectLabel>\n              {groupedFiles.systemLogs.map((file) => (\n                <SelectItem key={file.filename} value={file.filename}>\n                  {file.filename}\n                </SelectItem>\n              ))}\n            </SelectGroup>\n          )}\n          {groupedFiles.containerLogs.length > 0 && (\n            <SelectGroup>\n              <SelectLabel>{t(\"toolbar.containerLogsGroup\")}</SelectLabel>\n              {groupedFiles.containerLogs.map((file) => (\n                <SelectItem key={file.filename} value={file.filename}>\n                  {file.filename}\n                </SelectItem>\n              ))}\n            </SelectGroup>\n          )}\n        </SelectContent>\n      </Select>\n\n      {/* 行数选择 */}\n      <Select value={String(lines)} onValueChange={(v) => onLinesChange(Number(v))}>\n        <SelectTrigger className=\"w-[110px]\">\n          <SelectValue />\n        </SelectTrigger>\n        <SelectContent>\n          {LINE_OPTIONS.map((option) => (\n            <SelectItem key={option} value={String(option)}>\n              {option} {t(\"toolbar.linesUnit\")}\n            </SelectItem>\n          ))}\n        </SelectContent>\n      </Select>\n\n      {/* 日志级别筛选 */}\n      <Select value={logLevel} onValueChange={(v) => onLogLevelChange(v as LogLevel)}>\n        <SelectTrigger className=\"w-[130px]\">\n          <SelectValue />\n        </SelectTrigger>\n        <SelectContent>\n          {LOG_LEVELS.map((level) => (\n            <SelectItem key={level} value={level}>\n              {level === \"all\" ? t(\"toolbar.levelAll\") : level}\n            </SelectItem>\n          ))}\n        </SelectContent>\n      </Select>\n\n      {/* 搜索框 - 居中并扩展 */}\n      <div className=\"relative flex-1 min-w-[280px] max-w-[500px]\">\n        <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n        <Input\n          type=\"text\"\n          placeholder={t(\"toolbar.searchPlaceholder\")}\n          value={searchQuery}\n          onChange={(e) => onSearchChange(e.target.value)}\n          className=\"w-full pl-9 h-9\"\n        />\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/settings/system-logs/system-logs-view.tsx",
    "content": "\"use client\"\n\nimport { useCallback, useEffect, useMemo, useState } from \"react\"\nimport { useTranslations } from \"next-intl\"\nimport { Download } from \"lucide-react\"\n\nimport { Separator } from \"@/components/ui/separator\"\nimport { Switch } from \"@/components/ui/switch\"\nimport { Label } from \"@/components/ui/label\"\nimport { Button } from \"@/components/ui/button\"\nimport { useSystemLogs, useLogFiles } from \"@/hooks/use-system-logs\"\nimport { LogToolbar, type LogLevel } from \"./log-toolbar\"\nimport { AnsiLogViewer } from \"./ansi-log-viewer\"\n\nconst DEFAULT_FILE = \"xingrin.log\"\nconst DEFAULT_LINES = 500\n\nexport function SystemLogsView() {\n  const t = useTranslations(\"settings.systemLogs\")\n\n  // 状态管理\n  const [selectedFile, setSelectedFile] = useState(DEFAULT_FILE)\n  const [lines, setLines] = useState(DEFAULT_LINES)\n  const [autoRefresh, setAutoRefresh] = useState(true)\n  const [searchQuery, setSearchQuery] = useState(\"\")\n  const [logLevel, setLogLevel] = useState<LogLevel>(\"all\")\n\n  // 获取日志文件列表\n  const { data: filesData } = useLogFiles()\n  const files = useMemo(() => filesData?.files ?? [], [filesData?.files])\n\n  // 当文件列表加载完成后，如果当前选中的文件不在列表中，切换到第一个可用文件\n  useEffect(() => {\n    if (files.length > 0 && !files.some((f) => f.filename === selectedFile)) {\n      setSelectedFile(files[0].filename)\n    }\n  }, [files, selectedFile])\n\n  // 获取日志内容\n  const { data: logsData } = useSystemLogs({\n    file: selectedFile,\n    lines,\n    autoRefresh,\n  })\n\n  // 保留 ANSI 颜色码，由 xterm 渲染\n  const content = useMemo(() => {\n    console.log('[SystemLogsView] logsData:', logsData)\n    const result = logsData?.content ?? \"\"\n    console.log('[SystemLogsView] content length:', result.length)\n    return result\n  }, [logsData])\n\n  // 下载日志\n  const handleDownload = useCallback(() => {\n    if (!content) return\n    \n    const blob = new Blob([content], { type: \"text/plain;charset=utf-8\" })\n    const url = URL.createObjectURL(blob)\n    const a = document.createElement(\"a\")\n    a.href = url\n    a.download = selectedFile\n    document.body.appendChild(a)\n    a.click()\n    document.body.removeChild(a)\n    URL.revokeObjectURL(url)\n  }, [content, selectedFile])\n\n  return (\n    <div className=\"flex flex-col gap-3 flex-1 min-h-0\">\n      {/* 紧凑单行工具栏 - 标题融入 */}\n      <div className=\"flex items-center gap-4 flex-wrap\">\n        <h1 className=\"text-lg font-semibold whitespace-nowrap\">{t(\"title\")}</h1>\n        <Separator orientation=\"vertical\" className=\"h-5\" />\n        <LogToolbar\n          files={files}\n          selectedFile={selectedFile}\n          lines={lines}\n          searchQuery={searchQuery}\n          logLevel={logLevel}\n          onFileChange={setSelectedFile}\n          onLinesChange={setLines}\n          onSearchChange={setSearchQuery}\n          onLogLevelChange={setLogLevel}\n        />\n        {/* 下载按钮 */}\n        <Button\n          variant=\"outline\"\n          size=\"sm\"\n          className=\"h-9\"\n          onClick={handleDownload}\n          disabled={!content}\n        >\n          <Download className=\"h-4 w-4 mr-1.5\" />\n          {t(\"toolbar.download\")}\n        </Button>\n      </div>\n\n      {/* 日志查看器 */}\n      <div className=\"flex-1 flex flex-col rounded-lg overflow-hidden border\">\n        <div className=\"flex-1 min-h-[400px] bg-[#1e1e1e]\">\n          {content ? (\n            <AnsiLogViewer content={content} searchQuery={searchQuery} logLevel={logLevel} />\n          ) : (\n            <div className=\"flex items-center justify-center h-full text-muted-foreground\">\n              {t(\"noContent\")}\n            </div>\n          )}\n        </div>\n\n        {/* 底部状态栏 */}\n        <div className=\"flex items-center justify-between px-4 py-2 bg-muted/50 border-t text-xs text-muted-foreground\">\n          <div className=\"flex items-center gap-4\">\n            <span>{lines} {t(\"toolbar.linesUnit\")}</span>\n            <Separator orientation=\"vertical\" className=\"h-3\" />\n            <span>{selectedFile}</span>\n            <Separator orientation=\"vertical\" className=\"h-3\" />\n            <span className=\"flex items-center gap-1.5\">\n              {autoRefresh && (\n                <span className=\"size-1.5 rounded-full bg-green-500 animate-pulse\" />\n              )}\n              {t(\"description\")}\n            </span>\n          </div>\n          {/* 自动刷新开关 */}\n          <div className=\"flex items-center gap-2\">\n            <Switch\n              id=\"auto-refresh\"\n              checked={autoRefresh}\n              onCheckedChange={setAutoRefresh}\n              className=\"scale-75\"\n            />\n            <Label\n              htmlFor=\"auto-refresh\"\n              className=\"text-xs cursor-pointer\"\n            >\n              {t(\"toolbar.autoRefresh\")}\n            </Label>\n          </div>\n        </div>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/settings/workers/deploy-terminal-dialog.tsx",
    "content": "\"use client\"\n\nimport { useState, useEffect, useRef, useCallback } from \"react\"\nimport { useTranslations } from \"next-intl\"\nimport {\n  Dialog,\n  DialogContent,\n} from \"@/components/ui/dialog\"\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\"\nimport { Button } from \"@/components/ui/button\"\nimport { IconRocket, IconEye, IconTrash, IconRefresh } from \"@tabler/icons-react\"\nimport type { WorkerNode } from \"@/types/worker.types\"\n\ninterface DeployTerminalDialogProps {\n  open: boolean\n  onOpenChange: (open: boolean) => void\n  worker: WorkerNode | null\n  onDeployComplete?: () => void\n}\n\n// Auto-generate WebSocket URL based on current page URL\nconst getWsBaseUrl = () => {\n  if (typeof window === 'undefined') return 'ws://localhost:8888'\n  \n  // Prefer environment variable\n  if (process.env.NEXT_PUBLIC_WS_URL) {\n    return process.env.NEXT_PUBLIC_WS_URL\n  }\n  \n  // Auto-generate based on current page protocol and domain\n  const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'\n  const host = window.location.host\n  return `${protocol}//${host}`\n}\n\nexport function DeployTerminalDialog({\n  open,\n  onOpenChange,\n  worker,\n  onDeployComplete,\n}: DeployTerminalDialogProps) {\n  const t = useTranslations(\"settings.workers\")\n  const tCommon = useTranslations(\"common.actions\")\n  const tTerminal = useTranslations(\"settings.workers.terminal\")\n  const [isConnected, setIsConnected] = useState(false)\n  const [error, setError] = useState<string | null>(null)\n  // Local worker state for real-time button display updates\n  const [localStatus, setLocalStatus] = useState<string | null>(null)\n  const [uninstallDialogOpen, setUninstallDialogOpen] = useState(false)\n  \n  // Use local state or passed worker state\n  const currentStatus = localStatus || worker?.status\n  const terminalRef = useRef<HTMLDivElement>(null)\n  const terminalInstanceRef = useRef<any>(null)\n  const fitAddonRef = useRef<any>(null)\n  const wsRef = useRef<WebSocket | null>(null)\n\n  // Initialize xterm\n  const initTerminal = useCallback(async () => {\n    if (!terminalRef.current || terminalInstanceRef.current) return\n    \n    const { Terminal } = await import('@xterm/xterm')\n    const { FitAddon } = await import('@xterm/addon-fit')\n    const { WebLinksAddon } = await import('@xterm/addon-web-links')\n    \n    const terminal = new Terminal({\n      cursorBlink: true,\n      fontSize: 12, // Reduced font size\n      fontFamily: 'Menlo, Monaco, \"Courier New\", monospace',\n      theme: {\n        background: '#1a1b26',\n        foreground: '#a9b1d6',\n        cursor: '#c0caf5',\n        black: '#32344a',\n        red: '#f7768e',\n        green: '#9ece6a',\n        yellow: '#e0af68',\n        blue: '#7aa2f7',\n        magenta: '#ad8ee6',\n        cyan: '#449dab',\n        white: '#787c99',\n      },\n    })\n    \n    const fitAddon = new FitAddon()\n    terminal.loadAddon(fitAddon)\n    terminal.loadAddon(new WebLinksAddon())\n    \n    terminal.open(terminalRef.current)\n    fitAddon.fit()\n    \n    terminalInstanceRef.current = terminal\n    fitAddonRef.current = fitAddon\n    \n    // Show connection prompt\n    terminal.writeln(`\\x1b[90m${tTerminal(\"connecting\")}\\x1b[0m`)\n    \n    // Listen for window resize\n    const handleResize = () => fitAddon.fit()\n    window.addEventListener('resize', handleResize)\n    \n    // Auto-connect WebSocket\n    connectWs()\n    \n    return () => {\n      window.removeEventListener('resize', handleResize)\n    }\n  }, [worker])\n\n  // Connect WebSocket\n  const connectWs = useCallback(() => {\n    if (!worker || !terminalInstanceRef.current) return\n    \n    const terminal = terminalInstanceRef.current\n    // Close existing connection first\n    if (wsRef.current) {\n        wsRef.current.close()\n    }\n    \n    const ws = new WebSocket(`${getWsBaseUrl()}/ws/workers/${worker.id}/deploy/`)\n    ws.binaryType = 'arraybuffer'\n    wsRef.current = ws\n    \n    ws.onopen = () => {\n      terminal.writeln(`\\x1b[32m✓ ${tTerminal(\"wsConnected\")}\\x1b[0m`)\n      // Backend will auto-start SSH connection\n    }\n    \n    ws.onmessage = (event) => {\n      if (event.data instanceof ArrayBuffer) {\n        // Binary data - terminal output\n        const decoder = new TextDecoder()\n        terminal.write(decoder.decode(event.data))\n      } else {\n        // JSON message\n        try {\n          const data = JSON.parse(event.data)\n          if (data.type === 'connected') {\n            setIsConnected(true)\n            setError(null)\n            // Bind terminal input\n            terminal.onData((data: string) => {\n              if (ws.readyState === WebSocket.OPEN) {\n                ws.send(JSON.stringify({ type: 'input', data }))\n              }\n            })\n            // Send terminal size\n            ws.send(JSON.stringify({\n                type: 'resize',\n                cols: terminal.cols,\n                rows: terminal.rows,\n            }))\n          } else if (data.type === 'error') {\n            terminal.writeln(`\\x1b[31m✗ ${data.message}\\x1b[0m`)\n            setError(data.message)\n          } else if (data.type === 'status') {\n            // Update local state to show correct buttons in real-time\n            setLocalStatus(data.status)\n            // Refresh parent component list on any status change\n            onDeployComplete?.()\n          }\n        } catch {\n          // Ignore parse errors\n        }\n      }\n    }\n    \n    ws.onclose = () => {\n      terminal.writeln('')\n      terminal.writeln(`\\x1b[33m${tTerminal(\"connectionClosed\")}\\x1b[0m`)\n      setIsConnected(false)\n    }\n    \n    ws.onerror = () => {\n      terminal.writeln(`\\x1b[31m✗ ${tTerminal(\"wsConnectionFailed\")}\\x1b[0m`)\n      setError(tTerminal(\"connectionFailed\"))\n    }\n  }, [worker, onDeployComplete])\n\n  // Send terminal size change\n  useEffect(() => {\n    if (!isConnected || !wsRef.current || !terminalInstanceRef.current) return\n    \n    const terminal = terminalInstanceRef.current\n    const handleResize = () => {\n      if (wsRef.current?.readyState === WebSocket.OPEN) {\n        wsRef.current.send(JSON.stringify({\n          type: 'resize',\n          cols: terminal.cols,\n          rows: terminal.rows,\n        }))\n      }\n    }\n    \n    terminal.onResize?.(handleResize)\n  }, [isConnected])\n\n  // Initialize when opened\n  useEffect(() => {\n    if (open && worker) {\n      // Delay initialization to ensure DOM is rendered\n      const timer = setTimeout(initTerminal, 100)\n      return () => clearTimeout(timer)\n    }\n  }, [open, worker, initTerminal])\n\n  // Cleanup when closed\n  const handleClose = () => {\n    if (wsRef.current) {\n      wsRef.current.close()\n      wsRef.current = null\n    }\n    if (terminalInstanceRef.current) {\n      terminalInstanceRef.current.dispose()\n      terminalInstanceRef.current = null\n    }\n    fitAddonRef.current = null\n    setIsConnected(false)\n    setError(null)\n    setLocalStatus(null) // Reset local state\n    // Refresh parent component list when closing to ensure state sync\n    onDeployComplete?.()\n    onOpenChange(false)\n  }\n\n  // Execute deploy script (runs in background)\n  const handleDeploy = () => {\n    if (!wsRef.current || !isConnected) return\n    setLocalStatus('deploying') // Immediately update to deploying state\n    onDeployComplete?.() // Refresh parent component list\n    wsRef.current.send(JSON.stringify({ type: 'deploy' }))\n  }\n\n  // View deploy progress (attach to tmux session)\n  const handleAttach = () => {\n    if (!wsRef.current || !isConnected) return\n    wsRef.current.send(JSON.stringify({ type: 'attach' }))\n  }\n\n  // Uninstall Agent (open confirmation dialog)\n  const handleUninstallClick = () => {\n    if (!wsRef.current || !isConnected) return\n    setUninstallDialogOpen(true)\n  }\n\n  // Confirm uninstall\n  const handleUninstallConfirm = () => {\n    if (!wsRef.current || !isConnected) return\n    setUninstallDialogOpen(false)\n    wsRef.current.send(JSON.stringify({ type: 'uninstall' }))\n  }\n\n  return (\n    <Dialog open={open} onOpenChange={handleClose}>\n      <DialogContent className=\"w-[50vw] max-w-[50vw] h-[80vh] flex flex-col p-0 gap-0 overflow-hidden [&>button]:hidden\">\n        {/* Terminal title bar - macOS style */}\n        <div className=\"flex items-center justify-between px-4 py-3 bg-[#1a1b26] border-b border-[#32344a]\">\n          <div className=\"flex items-center gap-3\">\n            {/* Red, yellow, green buttons */}\n            <div className=\"flex items-center gap-1.5\">\n              <button \n                onClick={handleClose}\n                className=\"w-3 h-3 rounded-full bg-[#ff5f56] hover:bg-[#ff5f56]/80 transition-colors\"\n                title={tCommon(\"close\")}\n              />\n              <div className=\"w-3 h-3 rounded-full bg-[#ffbd2e]\" />\n              <div className=\"w-3 h-3 rounded-full bg-[#27c93f]\" />\n            </div>\n            {/* Title */}\n            <span className=\"text-sm text-[#a9b1d6] font-medium\">\n              {worker?.username}@{worker?.ipAddress}\n            </span>\n          </div>\n          <div className=\"flex items-center gap-1.5\">\n            <span className={`w-2 h-2 rounded-full ${isConnected ? 'bg-[#9ece6a]' : 'bg-[#f7768e]'}`} />\n            <span className=\"text-xs text-[#a9b1d6]\">{isConnected ? t(\"terminal.connected\") : t(\"terminal.disconnected\")}</span>\n          </div>\n        </div>\n\n        {/* xterm terminal container */}\n        <div \n          ref={terminalRef} \n          className=\"flex-1 overflow-hidden bg-[#1a1b26]\"\n        />\n\n        {/* Bottom action bar - show different buttons based on status */}\n        <div className=\"flex items-center justify-between px-4 py-3 bg-[#1a1b26] border-t border-[#32344a]\">\n          {/* Left: Status hint */}\n          <div className=\"text-xs text-[#565f89]\">\n            {!isConnected && tTerminal(\"waitingConnection\")}\n            {isConnected && currentStatus === 'pending' && tTerminal(\"pendingHint\")}\n            {isConnected && currentStatus === 'deploying' && tTerminal(\"deployingHint\")}\n            {isConnected && currentStatus === 'online' && tTerminal(\"onlineHint\")}\n            {isConnected && currentStatus === 'offline' && tTerminal(\"offlineHint\")}\n            {isConnected && currentStatus === 'updating' && tTerminal(\"updatingHint\")}\n            {isConnected && currentStatus === 'outdated' && tTerminal(\"outdatedHint\")}\n          </div>\n          \n          {/* Right: Action buttons */}\n          <div className=\"flex items-center gap-2\">\n            {!isConnected && (\n              <button \n                onClick={connectWs}\n                className=\"inline-flex items-center px-3 py-1.5 text-sm rounded-md bg-[#32344a] text-[#a9b1d6] hover:bg-[#414868] transition-colors\"\n              >\n                <IconRefresh className=\"mr-1.5 h-4 w-4\" />\n                {tTerminal(\"reconnect\")}\n              </button>\n            )}\n            {isConnected && worker && (\n              <>\n                {/* Not deployed -> Show \"Start Deploy\" */}\n                {currentStatus === 'pending' && (\n                  <button \n                    onClick={handleDeploy}\n                    className=\"inline-flex items-center px-3 py-1.5 text-sm rounded-md bg-[#7aa2f7] text-[#1a1b26] hover:bg-[#7aa2f7]/80 transition-colors\"\n                  >\n                    <IconRocket className=\"mr-1.5 h-4 w-4\" />\n                    {tTerminal(\"startDeploy\")}\n                  </button>\n                )}\n                \n                {/* Deploying -> Show \"View Progress\" */}\n                {currentStatus === 'deploying' && (\n                  <button \n                    onClick={handleAttach}\n                    className=\"inline-flex items-center px-3 py-1.5 text-sm rounded-md bg-[#7aa2f7] text-[#1a1b26] hover:bg-[#7aa2f7]/80 transition-colors\"\n                  >\n                    <IconEye className=\"mr-1.5 h-4 w-4\" />\n                    {tTerminal(\"viewProgress\")}\n                  </button>\n                )}\n                \n                {/* Updating -> Show \"View Progress\" */}\n                {currentStatus === 'updating' && (\n                  <button \n                    onClick={handleAttach}\n                    className=\"inline-flex items-center px-3 py-1.5 text-sm rounded-md bg-[#e0af68] text-[#1a1b26] hover:bg-[#e0af68]/80 transition-colors\"\n                  >\n                    <IconEye className=\"mr-1.5 h-4 w-4\" />\n                    {tTerminal(\"viewProgress\")}\n                  </button>\n                )}\n                \n                {/* Version outdated -> Show \"Redeploy\" */}\n                {currentStatus === 'outdated' && (\n                  <button \n                    onClick={handleDeploy}\n                    className=\"inline-flex items-center px-3 py-1.5 text-sm rounded-md bg-[#f7768e] text-[#1a1b26] hover:bg-[#f7768e]/80 transition-colors\"\n                  >\n                    <IconRocket className=\"mr-1.5 h-4 w-4\" />\n                    {tTerminal(\"redeploy\")}\n                  </button>\n                )}\n                \n                {/* Deployed (online/offline) -> Show \"Redeploy\" and \"Uninstall\" */}\n                {(currentStatus === 'online' || currentStatus === 'offline') && (\n                  <>\n                    <button \n                      onClick={handleDeploy}\n                      className=\"inline-flex items-center px-3 py-1.5 text-sm rounded-md bg-[#32344a] text-[#a9b1d6] hover:bg-[#414868] transition-colors\"\n                    >\n                      <IconRocket className=\"mr-1.5 h-4 w-4\" />\n                      {tTerminal(\"redeploy\")}\n                    </button>\n                    <button \n                      onClick={handleUninstallClick}\n                      className=\"inline-flex items-center px-3 py-1.5 text-sm rounded-md bg-[#32344a] text-[#f7768e] hover:bg-[#414868] transition-colors\"\n                    >\n                      <IconTrash className=\"mr-1.5 h-4 w-4\" />\n                      {tTerminal(\"uninstall\")}\n                    </button>\n                  </>\n                )}\n              </>\n            )}\n          </div>\n        </div>\n      </DialogContent>\n\n      {/* Uninstall confirmation dialog */}\n      <AlertDialog open={uninstallDialogOpen} onOpenChange={setUninstallDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{t(\"confirmUninstall\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {t(\"confirmUninstallDesc\")}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"cancel\")}</AlertDialogCancel>\n            <AlertDialogAction \n              onClick={handleUninstallConfirm}\n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n            >\n              {tCommon(\"delete\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "frontend/components/settings/workers/index.ts",
    "content": "export { WorkerList } from './worker-list'\nexport { WorkerDialog } from './worker-dialog'\nexport { DeployTerminalDialog } from './deploy-terminal-dialog'\n"
  },
  {
    "path": "frontend/components/settings/workers/worker-dialog.tsx",
    "content": "\"use client\"\n\nimport { useEffect } from \"react\"\nimport { useForm } from \"react-hook-form\"\nimport { useTranslations } from \"next-intl\"\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport * as z from \"zod\"\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n} from \"@/components/ui/dialog\"\nimport {\n  Form,\n  FormControl,\n  FormDescription,\n  FormField,\n  FormItem,\n  FormLabel,\n  FormMessage,\n} from \"@/components/ui/form\"\nimport { Input } from \"@/components/ui/input\"\nimport { Button } from \"@/components/ui/button\"\nimport { useCreateWorker, useUpdateWorker } from \"@/hooks/use-workers\"\nimport type { WorkerNode } from \"@/types/worker.types\"\n\n// Explicitly define form type to resolve type inference issues\ntype FormValues = {\n  name: string\n  ipAddress: string\n  sshPort: number\n  username: string\n  password?: string\n}\n\ninterface WorkerDialogProps {\n  open: boolean\n  onOpenChange: (open: boolean) => void\n  worker?: WorkerNode | null\n}\n\nexport function WorkerDialog({ open, onOpenChange, worker }: WorkerDialogProps) {\n  const t = useTranslations(\"settings.workers\")\n  const tCommon = useTranslations(\"common.actions\")\n  const createWorker = useCreateWorker()\n  const updateWorker = useUpdateWorker()\n  const isEditing = !!worker\n\n  // Form validation Schema - using translations\n  const formSchema = z.object({\n    name: z.string().min(1, t(\"form.nameRequired\")).max(100, t(\"form.nameTooLong\")),\n    ipAddress: z.string()\n      .min(1, t(\"form.ipRequired\"))\n      .regex(\n        /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,\n        t(\"form.ipInvalid\")\n      ),\n    sshPort: z.coerce.number().int().min(1).max(65535),\n    username: z.string().min(1, t(\"form.usernameRequired\")),\n    password: z.string().optional(),\n  })\n  \n  const form = useForm<FormValues>({\n    resolver: zodResolver(formSchema) as any, // Bypass type checking issue\n    defaultValues: {\n      name: \"\",\n      ipAddress: \"\",\n      sshPort: 22,\n      username: \"root\",\n      password: \"\",\n    },\n  })\n\n  // Populate form data\n  useEffect(() => {\n    if (open && worker) {\n      form.reset({\n        name: worker.name,\n        ipAddress: worker.ipAddress,\n        sshPort: worker.sshPort,\n        username: worker.username,\n        password: \"\", // Don't show password when editing\n      })\n    } else if (open && !worker) {\n      form.reset({\n        name: \"\",\n        ipAddress: \"\",\n        sshPort: 22,\n        username: \"root\",\n        password: \"\",\n      })\n    }\n  }, [open, worker, form])\n\n  const onSubmit = async (values: FormValues) => {\n    try {\n      if (isEditing && worker) {\n        await updateWorker.mutateAsync({\n          id: worker.id,\n          data: {\n            name: values.name,\n            sshPort: values.sshPort,\n            username: values.username,\n            password: values.password || undefined, // Don't send if empty\n          }\n        })\n      } else {\n        if (!values.password) {\n          form.setError(\"password\", { message: t(\"form.passwordRequired\") })\n          return\n        }\n        await createWorker.mutateAsync({\n          name: values.name,\n          ipAddress: values.ipAddress,\n          sshPort: values.sshPort,\n          username: values.username,\n          password: values.password,\n        })\n      }\n      form.reset()\n      onOpenChange(false)\n    } catch (error) {\n      // Error already handled in hook\n    }\n  }\n\n  const isPending = createWorker.isPending || updateWorker.isPending\n\n  return (\n    <Dialog open={open} onOpenChange={onOpenChange}>\n      <DialogContent className=\"sm:max-w-[425px]\">\n        <DialogHeader>\n          <DialogTitle>{isEditing ? t(\"editWorker\") : t(\"addWorkerTitle\")}</DialogTitle>\n          <DialogDescription>\n            {isEditing \n              ? t(\"editWorkerDesc\") \n              : t(\"addWorkerDesc\")}\n          </DialogDescription>\n        </DialogHeader>\n        <Form {...form}>\n          <form onSubmit={form.handleSubmit(onSubmit)} className=\"space-y-4\">\n            <FormField\n              control={form.control}\n              name=\"name\"\n              render={({ field }) => (\n                <FormItem>\n                  <FormLabel>{t(\"form.workerName\")}</FormLabel>\n                  <FormControl>\n                    <Input placeholder={t(\"form.workerNamePlaceholder\")} {...field} />\n                  </FormControl>\n                  <FormDescription>\n                    {t(\"form.workerNameDesc\")}\n                  </FormDescription>\n                  <FormMessage />\n                </FormItem>\n              )}\n            />\n            <FormField\n              control={form.control}\n              name=\"ipAddress\"\n              render={({ field }) => (\n                <FormItem>\n                  <FormLabel>{t(\"form.hostIp\")}</FormLabel>\n                  <FormControl>\n                    <Input \n                      placeholder={t(\"form.hostIpPlaceholder\")} \n                      {...field} \n                      disabled={isEditing} // 编辑时 IP 禁用\n                    />\n                  </FormControl>\n                  {isEditing && (\n                    <FormDescription>{t(\"form.ipNotEditable\")}</FormDescription>\n                  )}\n                  <FormMessage />\n                </FormItem>\n              )}\n            />\n            <div className=\"grid grid-cols-2 gap-4\">\n              <FormField\n                control={form.control}\n                name=\"sshPort\"\n                render={({ field }) => (\n                  <FormItem>\n                    <FormLabel>{t(\"form.sshPort\")}</FormLabel>\n                    <FormControl>\n                      <Input type=\"number\" {...field} />\n                    </FormControl>\n                    <FormMessage />\n                  </FormItem>\n                )}\n              />\n              <FormField\n                control={form.control}\n                name=\"username\"\n                render={({ field }) => (\n                  <FormItem>\n                    <FormLabel>{t(\"form.username\")}</FormLabel>\n                    <FormControl>\n                      <Input placeholder={t(\"form.usernamePlaceholder\")} {...field} />\n                    </FormControl>\n                    <FormMessage />\n                  </FormItem>\n                )}\n              />\n            </div>\n            <FormField\n              control={form.control}\n              name=\"password\"\n              render={({ field }) => (\n                <FormItem>\n                  <FormLabel>{t(\"form.password\")}</FormLabel>\n                  <FormControl>\n                    <Input type=\"password\" placeholder={isEditing ? t(\"form.passwordKeepEmpty\") : t(\"form.passwordPlaceholder\")} {...field} />\n                  </FormControl>\n                  <FormDescription>\n                    {isEditing ? t(\"form.passwordEditHint\") : t(\"form.passwordHint\")}\n                  </FormDescription>\n                  <FormMessage />\n                </FormItem>\n              )}\n            />\n            <DialogFooter>\n              <Button\n                type=\"button\"\n                variant=\"outline\"\n                onClick={() => onOpenChange(false)}\n              >\n                {tCommon(\"cancel\")}\n              </Button>\n              <Button type=\"submit\" disabled={isPending}>\n                {isPending \n                  ? (isEditing ? t(\"form.saving\") : t(\"form.creating\")) \n                  : (isEditing ? t(\"form.saveChanges\") : t(\"form.createWorker\"))}\n              </Button>\n            </DialogFooter>\n          </form>\n        </Form>\n      </DialogContent>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "frontend/components/settings/workers/worker-list.tsx",
    "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { useTranslations } from \"next-intl\"\nimport {\n  IconPlus,\n  IconServer,\n  IconTerminal2,\n  IconTrash,\n  IconEdit,\n  IconCloud,\n  IconCloudOff,\n  IconClock,\n} from \"@tabler/icons-react\"\nimport { Button } from \"@/components/ui/button\"\nimport { Status, StatusIndicator, StatusLabel } from \"@/components/ui/shadcn-io/status\"\nimport { Badge } from \"@/components/ui/badge\"\nimport {\n  Card,\n  CardContent,\n  CardDescription,\n  CardHeader,\n  CardTitle,\n} from \"@/components/ui/card\"\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\"\nimport {\n  Banner,\n  BannerIcon,\n  BannerTitle,\n  BannerAction,\n  BannerClose,\n} from \"@/components/ui/shadcn-io/banner\"\nimport { Skeleton } from \"@/components/ui/skeleton\"\nimport { useWorkers, useDeleteWorker } from \"@/hooks/use-workers\"\nimport type { WorkerNode, WorkerStatus } from \"@/types/worker.types\"\nimport { WorkerDialog } from \"./worker-dialog\"\nimport { DeployTerminalDialog } from \"./deploy-terminal-dialog\"\nimport { Rocket } from \"lucide-react\"\n\n// Backend status -> shadcn status mapping\nconst STATUS_MAP: Record<WorkerStatus, 'online' | 'offline' | 'maintenance' | 'degraded'> = {\n  online: 'online',\n  offline: 'offline',\n  pending: 'maintenance',\n  deploying: 'degraded',\n  updating: 'degraded',\n  outdated: 'offline',\n}\n\n// Stats cards component\nfunction StatsCards({ workers, t }: { workers: WorkerNode[], t: ReturnType<typeof useTranslations> }) {\n  const total = workers.length\n  const online = workers.filter(w => w.status === 'online').length\n  const offline = workers.filter(w => w.status === 'offline').length\n  const pending = workers.filter(w => w.status === 'pending').length\n\n  const stats = [\n    { label: t(\"stats.total\"), value: total, icon: IconServer, color: 'text-foreground' },\n    { label: t(\"stats.online\"), value: online, icon: IconCloud, color: 'text-emerald-600' },\n    { label: t(\"stats.offline\"), value: offline, icon: IconCloudOff, color: 'text-red-500' },\n    { label: t(\"stats.pending\"), value: pending, icon: IconClock, color: 'text-amber-500' },\n  ]\n\n  return (\n    <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4 mb-6\">\n      {stats.map((stat) => (\n        <Card key={stat.label} className=\"p-4\">\n          <div className=\"flex items-center gap-3\">\n            <div className={`p-2 rounded-lg bg-muted ${stat.color}`}>\n              <stat.icon className=\"h-5 w-5\" />\n            </div>\n            <div>\n              <p className=\"text-2xl font-bold\">{stat.value}</p>\n              <p className=\"text-xs text-muted-foreground\">{stat.label}</p>\n            </div>\n          </div>\n        </Card>\n      ))}\n    </div>\n  )\n}\n\n// Quick start guide banner\nfunction QuickStartBanner({ t }: { t: ReturnType<typeof useTranslations> }) {\n  const [helpOpen, setHelpOpen] = useState(false)\n\n  const steps = [\n    { step: 1, title: t(\"steps.step1Title\"), desc: t(\"steps.step1Desc\") },\n    { step: 2, title: t(\"steps.step2Title\"), desc: t(\"steps.step2Desc\") },\n    { step: 3, title: t(\"steps.step3Title\"), desc: t(\"steps.step3Desc\") },\n  ]\n\n  return (\n    <>\n      <Banner inset className=\"mb-6\">\n        <BannerIcon icon={Rocket} />\n        <BannerTitle>\n          <span className=\"font-medium\">{t(\"banner.title\")}</span>\n          <span className=\"opacity-90\">{t(\"banner.desc\")}</span>\n        </BannerTitle>\n        <BannerAction onClick={() => setHelpOpen(true)}>\n          {t(\"learnMore\")}\n        </BannerAction>\n        <BannerClose />\n      </Banner>\n\n      <AlertDialog open={helpOpen} onOpenChange={setHelpOpen}>\n        <AlertDialogContent className=\"max-w-lg\">\n          <AlertDialogHeader>\n            <AlertDialogTitle className=\"flex items-center gap-2\">\n              <Rocket className=\"h-5 w-5\" />\n              {t(\"helpDialog.title\")}\n            </AlertDialogTitle>\n            <AlertDialogDescription asChild>\n              <div className=\"space-y-4 text-left\">\n                <p>\n                  {t(\"helpDialog.desc\")}\n                </p>\n                <div className=\"space-y-3\">\n                  {steps.map((item) => (\n                    <div key={item.step} className=\"flex gap-3\">\n                      <div className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-primary text-primary-foreground text-xs font-medium\">\n                        {item.step}\n                      </div>\n                      <div>\n                        <p className=\"font-medium text-sm text-foreground\">{item.title}</p>\n                        <p className=\"text-xs text-muted-foreground\">{item.desc}</p>\n                      </div>\n                    </div>\n                  ))}\n                </div>\n              </div>\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogAction>{t(\"gotIt\")}</AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n    </>\n  )\n}\n\n// Worker card view component\nfunction WorkerCardView({ \n  workers, \n  onEdit, \n  onManage, \n  onDelete,\n  t\n}: { \n  workers: WorkerNode[]\n  onEdit: (w: WorkerNode) => void\n  onManage: (w: WorkerNode) => void\n  onDelete: (w: WorkerNode) => void\n  t: ReturnType<typeof useTranslations>\n}) {\n  return (\n    <div className=\"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4\">\n      {workers.map((worker) => (\n        <Card key={worker.id}>\n          <CardHeader className=\"pb-2\">\n            <div className=\"flex items-start justify-between\">\n              <div className=\"flex items-center gap-3\">\n                <div className=\"p-2 rounded-lg bg-muted\">\n                  <IconServer className=\"h-5 w-5 text-muted-foreground\" />\n                </div>\n                  <div className=\"min-w-0\">\n                    <div className=\"flex items-center gap-2\">\n                      <CardTitle className=\"text-base\">{worker.name}</CardTitle>\n                      {worker.isLocal && (\n                        <Badge variant=\"outline\" className=\"text-xs bg-[#848d97]/10 text-[#848d97] border-[#848d97]/20\">{t(\"local\")}</Badge>\n                      )}\n                    </div>\n                    <Status status={STATUS_MAP[worker.status]} className=\"mt-1\">\n                      <StatusIndicator />\n                      <StatusLabel>{t(`status.${worker.status}`)}</StatusLabel>\n                    </Status>\n                  </div>\n              </div>\n              {/* Local node doesn't show edit and delete buttons */}\n              {!worker.isLocal && (\n                <div className=\"flex gap-1\">\n                  <Button variant=\"ghost\" size=\"icon\" className=\"h-8 w-8\" onClick={() => onEdit(worker)} title={t(\"edit\")}>\n                    <IconEdit className=\"h-4 w-4\" />\n                  </Button>\n                  <Button variant=\"ghost\" size=\"icon\" className=\"h-8 w-8\" onClick={() => onDelete(worker)} title={t(\"delete\")}>\n                    <IconTrash className=\"h-4 w-4 text-destructive\" />\n                  </Button>\n                </div>\n              )}\n            </div>\n          </CardHeader>\n          <CardContent className=\"space-y-3\">\n            {/* All nodes show CPU and memory */}\n            <div className=\"grid grid-cols-2 gap-2 text-sm\">\n              <div className=\"text-center p-2 rounded-lg bg-muted\">\n                <p className=\"text-xs text-muted-foreground\">CPU</p>\n                <p className=\"font-mono font-medium\">\n                  {worker.info?.cpuPercent != null ? `${worker.info.cpuPercent.toFixed(1)}%` : '-'}\n                </p>\n              </div>\n              <div className=\"text-center p-2 rounded-lg bg-muted\">\n                <p className=\"text-xs text-muted-foreground\">{t(\"memory\")}</p>\n                <p className=\"font-mono font-medium\">\n                  {worker.info?.memoryPercent != null ? `${worker.info.memoryPercent.toFixed(1)}%` : '-'}\n                </p>\n              </div>\n            </div>\n            \n            {/* Remote nodes: additionally show connection info and manage button */}\n            {!worker.isLocal && (\n              <>\n                <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n                  <span className=\"font-mono\">{worker.ipAddress}:{worker.sshPort}</span>\n                  <span>•</span>\n                  <span>{worker.username}</span>\n                </div>\n                \n                <Button variant=\"outline\" size=\"sm\" className=\"w-full\" onClick={() => onManage(worker)}>\n                  <IconTerminal2 className=\"h-4 w-4 mr-1.5\" />\n                  {t(\"manageDeploy\")}\n                </Button>\n              </>\n            )}\n          </CardContent>\n        </Card>\n      ))}\n    </div>\n  )\n}\n\n// Empty state component\nfunction EmptyState({ onAdd, t }: { onAdd: () => void, t: ReturnType<typeof useTranslations> }) {\n  return (\n    <div className=\"flex flex-col items-center justify-center py-16 text-center\">\n      <div className=\"p-4 rounded-full bg-muted mb-4\">\n        <IconServer className=\"h-12 w-12 text-muted-foreground\" />\n      </div>\n      <h3 className=\"text-lg font-semibold mb-2\">{t(\"noWorkers\")}</h3>\n      <p className=\"text-sm text-muted-foreground mb-6 max-w-md\">\n        {t(\"noWorkersDesc\")}\n      </p>\n      <Button onClick={onAdd}>\n        <IconPlus className=\"h-4 w-4 mr-2\" />\n        {t(\"addFirstWorker\")}\n      </Button>\n    </div>\n  )\n}\n\nexport function WorkerList() {\n  const t = useTranslations(\"settings.workers\")\n  const tCommon = useTranslations(\"common.actions\")\n  const [page, setPage] = useState(1)\n  const [pageSize] = useState(10)\n  const [workerDialogOpen, setWorkerDialogOpen] = useState(false)\n  const [deleteDialogOpen, setDeleteDialogOpen] = useState(false)\n  const [deployDialogOpen, setDeployDialogOpen] = useState(false)\n  const [selectedWorker, setSelectedWorker] = useState<WorkerNode | null>(null)\n  const [workerToDeploy, setWorkerToDeploy] = useState<WorkerNode | null>(null)\n  const [workerToDelete, setWorkerToDelete] = useState<WorkerNode | null>(null)\n\n  const { data, isLoading, refetch } = useWorkers(page, pageSize)\n  const deleteWorker = useDeleteWorker()\n\n  const workers = data?.results || []\n  const hasWorkers = workers.length > 0\n\n  const handleAdd = () => {\n    setSelectedWorker(null)\n    setWorkerDialogOpen(true)\n  }\n\n  const handleEdit = (worker: WorkerNode) => {\n    setSelectedWorker(worker)\n    setWorkerDialogOpen(true)\n  }\n\n  const handleManage = (worker: WorkerNode) => {\n    setWorkerToDeploy(worker)\n    setDeployDialogOpen(true)\n  }\n\n  const handleDeleteClick = (worker: WorkerNode) => {\n    setWorkerToDelete(worker)\n    setDeleteDialogOpen(true)\n  }\n\n  const handleDeleteConfirm = () => {\n    if (workerToDelete) {\n      deleteWorker.mutate(workerToDelete.id)\n      setDeleteDialogOpen(false)\n      setWorkerToDelete(null)\n    }\n  }\n\n  return (\n    <div className=\"space-y-4\">\n      {/* Quick start guide banner */}\n      <QuickStartBanner t={t} />\n\n      {/* Stats cards - only show when there are Workers */}\n      {hasWorkers && <StatsCards workers={workers} t={t} />}\n\n      {/* Main content card */}\n      <Card>\n        <CardHeader>\n          <div className=\"flex items-center justify-between\">\n            <div>\n              <CardTitle className=\"flex items-center gap-2\">\n                <IconServer className=\"h-5 w-5\" />\n                {t(\"workerNodes\")}\n              </CardTitle>\n              <CardDescription>{t(\"workerNodesDesc\")}</CardDescription>\n            </div>\n            <div className=\"flex items-center gap-2\">\n              <Button size=\"sm\" onClick={handleAdd}>\n                <IconPlus className=\"mr-1 h-4 w-4\" />{t(\"addWorker\")}\n              </Button>\n            </div>\n          </div>\n        </CardHeader>\n        <CardContent>\n          {isLoading ? (\n            <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\n              {[...Array(3)].map((_, i) => <Skeleton key={i} className=\"h-48 w-full rounded-lg\" />)}\n            </div>\n          ) : !hasWorkers ? (\n            <EmptyState onAdd={handleAdd} t={t} />\n          ) : (\n            <WorkerCardView\n              workers={workers}\n              onEdit={handleEdit}\n              onManage={handleManage}\n              onDelete={handleDeleteClick}\n              t={t}\n            />\n          )}\n        </CardContent>\n      </Card>\n\n      {/* Dialogs */}\n      <WorkerDialog \n        open={workerDialogOpen} \n        onOpenChange={setWorkerDialogOpen} \n        worker={selectedWorker}\n      />\n      <DeployTerminalDialog\n        open={deployDialogOpen}\n        onOpenChange={setDeployDialogOpen}\n        worker={workerToDeploy}\n        onDeployComplete={() => refetch()}\n      />\n\n      <AlertDialog open={deleteDialogOpen} onOpenChange={setDeleteDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{t(\"confirmDelete\")}</AlertDialogTitle>\n            <AlertDialogDescription>{t(\"confirmDeleteDesc\", { name: workerToDelete?.name ?? \"\" })}</AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"cancel\")}</AlertDialogCancel>\n            <AlertDialogAction onClick={handleDeleteConfirm} className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\">{tCommon(\"delete\")}</AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/site-header.tsx",
    "content": "import { Button } from \"@/components/ui/button\"\n// Import separator component\nimport { Separator } from \"@/components/ui/separator\"\n// Import sidebar trigger component\nimport { SidebarTrigger } from \"@/components/ui/sidebar\"\n// Import notification drawer component\nimport { NotificationDrawer } from \"@/components/notifications\"\n// Import color theme switcher component\nimport { ColorThemeSwitcher } from \"@/components/color-theme-switcher\"\n// Import quick scan component\nimport { QuickScanDialog } from \"@/components/scan/quick-scan-dialog\"\n// Import language switcher component\nimport { LanguageSwitcher } from \"@/components/language-switcher\"\n\n/**\n * Site header component\n * Displayed at the top of the page, contains sidebar toggle button, page title and external links\n */\nexport function SiteHeader() {\n  return (\n    // header element, uses flex layout to arrange content horizontally\n    <header className=\"flex h-(--header-height) shrink-0 items-center gap-2 border-b transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-(--header-height)\">\n      {/* Content container, takes full width */}\n      <div className=\"flex w-full items-center gap-1 px-4 lg:gap-2 lg:px-6\">\n        {/* Sidebar toggle button, with negative left margin for alignment */}\n        <SidebarTrigger className=\"-ml-1\" />\n\n        {/* Right button area, using ml-auto to push to the right */}\n        <div className=\"ml-auto flex items-center gap-2\">\n          {/* Quick scan button */}\n          <QuickScanDialog />\n          \n          {/* Notification drawer button */}\n          <NotificationDrawer />\n          \n          {/* Color theme switcher button */}\n          <ColorThemeSwitcher />\n          \n          {/* Language switcher button */}\n          <LanguageSwitcher />\n          \n          {/* GitHub link button, hidden on small screens */}\n          <Button variant=\"ghost\" asChild size=\"sm\" className=\"hidden sm:flex\">\n            <a\n              href=\"https://github.com/yyhuni/xingrin\"\n              rel=\"noopener noreferrer\" // Security attribute, prevents new window from accessing original window\n              target=\"_blank\" // Open in new tab\n              className=\"dark:text-foreground\" // Text color in dark mode\n            >\n              GitHub\n            </a>\n          </Button>\n        </div>\n      </div>\n    </header>\n  )\n}\n"
  },
  {
    "path": "frontend/components/subdomains/bulk-add-subdomains-dialog.tsx",
    "content": "\"use client\"\n\nimport React, { useState, useRef } from \"react\"\nimport { Plus, Globe, Loader2 } from \"lucide-react\"\nimport { useTranslations } from \"next-intl\"\n\nimport { Button } from \"@/components/ui/button\"\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from \"@/components/ui/dialog\"\nimport { Label } from \"@/components/ui/label\"\nimport { Textarea } from \"@/components/ui/textarea\"\nimport { LoadingSpinner } from \"@/components/loading-spinner\"\nimport { SubdomainValidator } from \"@/lib/subdomain-validator\"\nimport { useBulkCreateSubdomains } from \"@/hooks/use-subdomains\"\n\ninterface BulkAddSubdomainsDialogProps {\n  targetId: number\n  targetName?: string\n  open?: boolean\n  onOpenChange?: (open: boolean) => void\n  onSuccess?: () => void\n}\n\n/**\n * Bulk add subdomains dialog component\n * \n * Following the design pattern of AddTargetDialog, provides a text input with line numbers,\n * supporting real-time validation and error prompts.\n */\nexport function BulkAddSubdomainsDialog({\n  targetId,\n  targetName,\n  open: externalOpen,\n  onOpenChange: externalOnOpenChange,\n  onSuccess,\n}: BulkAddSubdomainsDialogProps) {\n  const t = useTranslations(\"bulkAdd.subdomain\")\n  const tCommon = useTranslations(\"common.actions\")\n  \n  // Dialog open/close state\n  const [internalOpen, setInternalOpen] = useState(false)\n  const open = externalOpen !== undefined ? externalOpen : internalOpen\n  const setOpen = externalOnOpenChange || setInternalOpen\n\n  // Form data state\n  const [inputText, setInputText] = useState(\"\")\n\n  // Validation result state\n  const [validationResult, setValidationResult] = useState<{\n    validCount: number\n    invalidCount: number\n    duplicateCount: number\n    firstError?: { index: number; subdomain: string; error: string }\n  } | null>(null)\n\n  // Refs for line numbers column and textarea (for synchronized scrolling)\n  const lineNumbersRef = useRef<HTMLDivElement | null>(null)\n  const textareaRef = useRef<HTMLTextAreaElement | null>(null)\n\n  // Use bulk create mutation\n  const bulkCreateSubdomains = useBulkCreateSubdomains()\n\n  // Handle input change\n  const handleInputChange = (value: string) => {\n    setInputText(value)\n\n    // Parse and validate\n    const parsed = SubdomainValidator.parse(value)\n    if (parsed.length === 0) {\n      setValidationResult(null)\n      return\n    }\n\n    const result = SubdomainValidator.validateBatch(parsed)\n    setValidationResult({\n      validCount: result.validCount,\n      invalidCount: result.invalidCount,\n      duplicateCount: result.duplicateCount,\n      firstError: result.invalidItems[0]\n        ? {\n            index: result.invalidItems[0].index,\n            subdomain: result.invalidItems[0].subdomain,\n            error: result.invalidItems[0].error || t(\"formatInvalid\"),\n          }\n        : undefined,\n    })\n  }\n\n  // Handle form submission\n  const handleSubmit = async (e: React.FormEvent) => {\n    e.preventDefault()\n\n    if (!inputText.trim()) return\n    if (!validationResult || validationResult.validCount === 0) return\n\n    // Parse valid subdomains\n    const parsed = SubdomainValidator.parse(inputText)\n    const result = SubdomainValidator.validateBatch(parsed)\n\n    bulkCreateSubdomains.mutate(\n      { targetId, subdomains: result.subdomains },\n      {\n        onSuccess: () => {\n          // Reset form\n          setInputText(\"\")\n          setValidationResult(null)\n          // Close dialog\n          setOpen(false)\n          // Call external callback\n          onSuccess?.()\n        },\n      }\n    )\n  }\n\n  // Handle dialog close\n  const handleOpenChange = (newOpen: boolean) => {\n    if (!bulkCreateSubdomains.isPending) {\n      setOpen(newOpen)\n      if (!newOpen) {\n        setInputText(\"\")\n        setValidationResult(null)\n      }\n    }\n  }\n\n  // Synchronized scrolling\n  const handleTextareaScroll = (e: React.UIEvent<HTMLTextAreaElement>) => {\n    if (lineNumbersRef.current) {\n      lineNumbersRef.current.scrollTop = e.currentTarget.scrollTop\n    }\n  }\n\n  // Calculate line count\n  const lineCount = Math.max(inputText.split(\"\\n\").length, 8)\n\n  // Form validation\n  const isFormValid =\n    inputText.trim().length > 0 &&\n    validationResult !== null &&\n    validationResult.validCount > 0\n\n  return (\n    <Dialog open={open} onOpenChange={handleOpenChange}>\n      {externalOpen === undefined && (\n        <DialogTrigger asChild>\n          <Button size=\"sm\" variant=\"outline\">\n            <Plus className=\"h-4 w-4\" />\n            {t(\"bulkAdd\")}\n          </Button>\n        </DialogTrigger>\n      )}\n\n      <DialogContent className=\"sm:max-w-[650px] max-h-[90vh] overflow-y-auto\">\n        <DialogHeader>\n          <DialogTitle className=\"flex items-center space-x-2\">\n            <Globe className=\"h-5 w-5\" />\n            <span>{t(\"title\")}</span>\n          </DialogTitle>\n          <DialogDescription>\n            {t(\"description\")}\n            {targetName && (\n              <span className=\"block mt-1\">\n                {t(\"belongsTo\")} <code className=\"bg-muted px-1 rounded\">{targetName}</code>\n              </span>\n            )}\n          </DialogDescription>\n        </DialogHeader>\n\n        <form onSubmit={handleSubmit}>\n          <div className=\"grid gap-4 py-4\">\n            <div className=\"grid gap-2\">\n              <Label htmlFor=\"subdomains\">\n                {t(\"label\")} <span className=\"text-destructive\">*</span>\n              </Label>\n              <div className=\"flex border rounded-md overflow-hidden h-[220px]\">\n                {/* Line numbers column */}\n                <div className=\"flex-shrink-0 w-12 border-r bg-muted/50\">\n                  <div\n                    ref={lineNumbersRef}\n                    className=\"py-3 px-2 text-right font-mono text-xs text-muted-foreground leading-[1.4] h-full overflow-y-auto scrollbar-hide\"\n                  >\n                    {Array.from({ length: lineCount }, (_, i) => (\n                      <div key={i + 1} className=\"h-[20px]\">\n                        {i + 1}\n                      </div>\n                    ))}\n                  </div>\n                </div>\n                {/* Input textarea */}\n                <div className=\"flex-1 overflow-hidden\">\n                  <Textarea\n                    ref={textareaRef}\n                    id=\"subdomains\"\n                    value={inputText}\n                    onChange={(e) => handleInputChange(e.target.value)}\n                    onScroll={handleTextareaScroll}\n                    placeholder={t(\"placeholder\")}\n                    disabled={bulkCreateSubdomains.isPending}\n                    className=\"font-mono h-full overflow-y-auto resize-none border-0 focus-visible:ring-0 focus-visible:ring-offset-0 leading-[1.4] text-sm py-3\"\n                    style={{ lineHeight: \"20px\" }}\n                  />\n                </div>\n              </div>\n\n              {/* Validation summary */}\n              {validationResult && (\n                <div className=\"text-xs space-y-1\">\n                  <div className=\"text-muted-foreground\">\n                    {t(\"valid\", { count: validationResult.validCount })}\n                    {validationResult.duplicateCount > 0 && (\n                      <span className=\"text-yellow-600 ml-2\">\n                        {t(\"duplicate\", { count: validationResult.duplicateCount })}\n                      </span>\n                    )}\n                    {validationResult.invalidCount > 0 && (\n                      <span className=\"text-destructive ml-2\">\n                        {t(\"invalid\", { count: validationResult.invalidCount })}\n                      </span>\n                    )}\n                  </div>\n                  {validationResult.firstError && (\n                    <div className=\"text-destructive\">\n                      {t(\"lineError\", {\n                        line: validationResult.firstError.index + 1,\n                        value: validationResult.firstError.subdomain,\n                        error: validationResult.firstError.error,\n                      })}\n                    </div>\n                  )}\n                </div>\n              )}\n            </div>\n          </div>\n\n          <DialogFooter>\n            <Button\n              type=\"button\"\n              variant=\"outline\"\n              onClick={() => handleOpenChange(false)}\n              disabled={bulkCreateSubdomains.isPending}\n            >\n              {tCommon(\"cancel\")}\n            </Button>\n            <Button\n              type=\"submit\"\n              disabled={bulkCreateSubdomains.isPending || !isFormValid}\n            >\n              {bulkCreateSubdomains.isPending ? (\n                <>\n                  <LoadingSpinner />\n                  {t(\"creating\")}\n                </>\n              ) : (\n                <>\n                  <Plus className=\"h-4 w-4\" />\n                  {t(\"bulkAdd\")}\n                </>\n              )}\n            </Button>\n          </DialogFooter>\n        </form>\n      </DialogContent>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "frontend/components/subdomains/index.ts",
    "content": "export { SubdomainsDetailView } from \"./subdomains-detail-view\"\nexport { SubdomainsDataTable } from \"./subdomains-data-table\"\nexport { createSubdomainColumns } from \"./subdomains-columns\"\n"
  },
  {
    "path": "frontend/components/subdomains/subdomains-columns.tsx",
    "content": "\"use client\"\n\nimport { ColumnDef } from \"@tanstack/react-table\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport { DataTableColumnHeader } from \"@/components/ui/data-table/column-header\"\nimport { ExpandableCell } from \"@/components/ui/data-table/expandable-cell\"\nimport type { Subdomain } from \"@/types/subdomain.types\"\n\n// Translation type definitions\nexport interface SubdomainTranslations {\n  columns: {\n    subdomain: string\n    createdAt: string\n  }\n  actions: {\n    selectAll: string\n    selectRow: string\n  }\n}\n\ninterface CreateColumnsProps {\n  formatDate: (dateString: string) => string\n  t: SubdomainTranslations\n}\n\n/**\n * Create subdomain table column definitions\n */\nexport const createSubdomainColumns = ({\n  formatDate,\n  t,\n}: CreateColumnsProps): ColumnDef<Subdomain>[] => [\n  {\n    id: \"select\",\n    size: 40,\n    minSize: 40,\n    maxSize: 40,\n    enableResizing: false,\n    header: ({ table }) => (\n      <Checkbox\n        checked={\n          table.getIsAllPageRowsSelected() ||\n          (table.getIsSomePageRowsSelected() && \"indeterminate\")\n        }\n        onCheckedChange={(value) => table.toggleAllPageRowsSelected(!!value)}\n        aria-label={t.actions.selectAll}\n      />\n    ),\n    cell: ({ row }) => (\n      <Checkbox\n        checked={row.getIsSelected()}\n        onCheckedChange={(value) => row.toggleSelected(!!value)}\n        aria-label={t.actions.selectRow}\n      />\n    ),\n    enableSorting: false,\n    enableHiding: false,\n  },\n  {\n    accessorKey: \"name\",\n    size: 350,\n    minSize: 250,\n    meta: { title: t.columns.subdomain },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.subdomain} />\n    ),\n    cell: ({ row }) => (\n      <ExpandableCell value={row.getValue(\"name\")} />\n    ),\n  },\n  {\n    accessorKey: \"createdAt\",\n    size: 150,\n    minSize: 120,\n    maxSize: 200,\n    enableResizing: false,\n    meta: { title: t.columns.createdAt },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.createdAt} />\n    ),\n    cell: ({ getValue }) => {\n      const value = getValue<string | undefined>()\n      return value ? formatDate(value) : \"-\"\n    },\n  },\n]\n"
  },
  {
    "path": "frontend/components/subdomains/subdomains-data-table.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport type { ColumnDef } from \"@tanstack/react-table\"\nimport { useTranslations } from \"next-intl\"\nimport { UnifiedDataTable } from \"@/components/ui/data-table\"\nimport type { FilterField } from \"@/components/common/smart-filter-input\"\nimport type { Subdomain } from \"@/types/subdomain.types\"\nimport type { PaginationInfo } from \"@/types/common.types\"\nimport type { DownloadOption } from \"@/types/data-table.types\"\n\n// Subdomain page filter field configuration\nconst SUBDOMAIN_FILTER_FIELDS: FilterField[] = [\n  { key: \"name\", label: \"Name\", description: \"Subdomain name\" },\n]\n\n// Subdomain page filter examples\nconst SUBDOMAIN_FILTER_EXAMPLES = [\n  'name=\"api.example.com\"',\n  'name=\"*.test.com\"',\n]\n\n// Component props type definition\ninterface SubdomainsDataTableProps {\n  data: Subdomain[]\n  columns: ColumnDef<Subdomain>[]\n  onAddNew?: () => void\n  onBulkAdd?: () => void\n  onBulkDelete?: () => void\n  onSelectionChange?: (selectedRows: Subdomain[]) => void\n  // Smart filter\n  filterValue?: string\n  onFilterChange?: (value: string) => void\n  isSearching?: boolean\n  addButtonText?: string\n  // Download callback functions\n  onDownloadAll?: () => void\n  onDownloadInteresting?: () => void\n  onDownloadImportant?: () => void\n  onDownloadSelected?: () => void\n  // Server-side pagination support\n  pagination?: { pageIndex: number; pageSize: number }\n  setPagination?: React.Dispatch<React.SetStateAction<{ pageIndex: number; pageSize: number }>>\n  paginationInfo?: PaginationInfo\n  onPaginationChange?: (pagination: { pageIndex: number; pageSize: number }) => void\n}\n\n/**\n * Subdomain data table component\n * Uses UnifiedDataTable unified component\n */\nexport function SubdomainsDataTable({\n  data = [],\n  columns,\n  onAddNew,\n  onBulkAdd,\n  onBulkDelete,\n  onSelectionChange,\n  filterValue,\n  onFilterChange,\n  isSearching = false,\n  addButtonText = \"Add\",\n  onDownloadAll,\n  onDownloadImportant,\n  onDownloadSelected,\n  pagination: externalPagination,\n  setPagination: setExternalPagination,\n  paginationInfo,\n  onPaginationChange,\n}: SubdomainsDataTableProps) {\n  const t = useTranslations(\"common.status\")\n  const tActions = useTranslations(\"common.actions\")\n  const tDownload = useTranslations(\"common.download\")\n  \n  // Handle smart filter search\n  const handleSmartSearch = (rawQuery: string) => {\n    if (onFilterChange) {\n      onFilterChange(rawQuery)\n    }\n  }\n\n  // Download options\n  const downloadOptions: DownloadOption[] = []\n  if (onDownloadAll) {\n    downloadOptions.push({\n      key: \"all\",\n      label: tDownload(\"all\"),\n      onClick: onDownloadAll,\n    })\n  }\n  if (onDownloadSelected) {\n    downloadOptions.push({\n      key: \"selected\",\n      label: tDownload(\"selected\"),\n      onClick: onDownloadSelected,\n      disabled: (count) => count === 0,\n    })\n  }\n  if (onDownloadImportant) {\n    downloadOptions.push({\n      key: \"important\",\n      label: tDownload(\"important\"),\n      onClick: onDownloadImportant,\n    })\n  }\n\n  return (\n    <UnifiedDataTable\n      data={data}\n      columns={columns}\n      getRowId={(row) => String(row.id)}\n      // Pagination\n      pagination={externalPagination}\n      setPagination={setExternalPagination}\n      paginationInfo={paginationInfo}\n      onPaginationChange={onPaginationChange}\n      // Smart filter\n      searchMode=\"smart\"\n      searchValue={filterValue}\n      onSearch={handleSmartSearch}\n      isSearching={isSearching}\n      filterFields={SUBDOMAIN_FILTER_FIELDS}\n      filterExamples={SUBDOMAIN_FILTER_EXAMPLES}\n      // Selection\n      onSelectionChange={onSelectionChange}\n      // Bulk operations\n      onBulkDelete={onBulkDelete}\n      bulkDeleteLabel={tActions(\"delete\")}\n      // Add button\n      onAddNew={onAddNew}\n      addButtonLabel={addButtonText}\n      // Bulk add button\n      onBulkAdd={onBulkAdd}\n      bulkAddLabel={tActions(\"add\")}\n      // Download\n      downloadOptions={downloadOptions.length > 0 ? downloadOptions : undefined}\n      // Empty state\n      emptyMessage={t(\"noData\")}\n    />\n  )\n}\n"
  },
  {
    "path": "frontend/components/subdomains/subdomains-detail-view.tsx",
    "content": "\"use client\"\n\nimport React, { useState, useMemo } from \"react\"\nimport { AlertTriangle } from \"lucide-react\"\nimport { useRouter } from \"next/navigation\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport { useTarget } from \"@/hooks/use-targets\"\nimport {\n  useTargetSubdomains,\n  useScanSubdomains\n} from \"@/hooks/use-subdomains\"\nimport { SubdomainsDataTable } from \"./subdomains-data-table\"\nimport { createSubdomainColumns } from \"./subdomains-columns\"\nimport { DataTableSkeleton } from \"@/components/ui/data-table-skeleton\"\nimport { SubdomainService } from \"@/services/subdomain.service\"\nimport { BulkAddSubdomainsDialog } from \"./bulk-add-subdomains-dialog\"\nimport { ConfirmDialog } from \"@/components/ui/confirm-dialog\"\nimport { getDateLocale } from \"@/lib/date-utils\"\nimport type { Subdomain } from \"@/types/subdomain.types\"\nimport { toast } from \"sonner\"\n\n/**\n * Subdomain detail view component\n * Supports two modes:\n * 1. targetId: Display all subdomains under a target\n * 2. scanId: Display subdomains from scan history\n */\nexport function SubdomainsDetailView({\n  targetId,\n  scanId\n}: {\n  targetId?: number\n  scanId?: number\n}) {\n  const [selectedSubdomains, setSelectedSubdomains] = useState<Subdomain[]>([])\n  const [deleteDialogOpen, setDeleteDialogOpen] = useState(false)\n  const [isDeleting, setIsDeleting] = useState(false)\n\n  // Internationalization\n  const tColumns = useTranslations(\"columns\")\n  const tCommon = useTranslations(\"common\")\n  const tSubdomains = useTranslations(\"subdomains\")\n  const tToast = useTranslations(\"toast\")\n  const locale = useLocale()\n\n  // Build translation object\n  const translations = useMemo(() => ({\n    columns: {\n      subdomain: tColumns(\"subdomain.subdomain\"),\n      createdAt: tColumns(\"common.createdAt\"),\n    },\n    actions: {\n      selectAll: tCommon(\"actions.selectAll\"),\n      selectRow: tCommon(\"actions.selectRow\"),\n    },\n  }), [tColumns, tCommon])\n\n  // Bulk add dialog state\n  const [bulkAddOpen, setBulkAddOpen] = useState(false)\n\n  // Pagination state\n  const [pagination, setPagination] = useState({\n    pageIndex: 0,  // 0-based for react-table\n    pageSize: 10,\n  })\n\n  // Filter state (smart filter syntax)\n  const [filterQuery, setFilterQuery] = useState(\"\")\n  const [isSearching, setIsSearching] = useState(false)\n\n  const handleFilterChange = (value: string) => {\n    setIsSearching(true)\n    setFilterQuery(value)\n    setPagination((prev) => ({ ...prev, pageIndex: 0 }))\n  }\n\n  // Fetch subdomain data based on targetId or scanId (with pagination and filter params)\n  const targetSubdomainsQuery = useTargetSubdomains(\n    targetId || 0,\n    {\n      page: pagination.pageIndex + 1, // Convert to 1-based\n      pageSize: pagination.pageSize,\n      filter: filterQuery || undefined,\n    },\n    { enabled: !!targetId }\n  )\n  const scanSubdomainsQuery = useScanSubdomains(\n    scanId || 0,\n    {\n      page: pagination.pageIndex + 1, // Convert to 1-based\n      pageSize: pagination.pageSize,\n      filter: filterQuery || undefined,\n    },\n    { enabled: !!scanId }\n  )\n\n  // Select the active query result\n  const activeQuery = targetId ? targetSubdomainsQuery : scanSubdomainsQuery\n  const { data: subdomainsData, isLoading, isFetching, error, refetch } = activeQuery\n\n  // Reset search state when request completes\n  React.useEffect(() => {\n    if (!isFetching && isSearching) {\n      setIsSearching(false)\n    }\n  }, [isFetching, isSearching])\n\n  // Get target info (only in targetId mode)\n  const { data: targetData } = useTarget(targetId || 0)\n\n  // Helper function - format date\n  const formatDate = (dateString: string): string => {\n    return new Date(dateString).toLocaleString(getDateLocale(locale), {\n      year: \"numeric\",\n      month: \"numeric\",\n      day: \"numeric\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\",\n      hour12: false,\n    })\n  }\n\n  // Navigation function\n  const router = useRouter()\n  const navigate = (path: string) => {\n    router.push(path)\n  }\n\n  // Handle pagination change\n  const handlePaginationChange = (newPagination: { pageIndex: number; pageSize: number }) => {\n    setPagination(newPagination)\n  }\n\n  // Format date as YYYY-MM-DD HH:MM:SS (consistent with backend)\n  const formatDateForCSV = (dateString: string): string => {\n    if (!dateString) return ''\n    const date = new Date(dateString)\n    const year = date.getFullYear()\n    const month = String(date.getMonth() + 1).padStart(2, '0')\n    const day = String(date.getDate()).padStart(2, '0')\n    const hours = String(date.getHours()).padStart(2, '0')\n    const minutes = String(date.getMinutes()).padStart(2, '0')\n    const seconds = String(date.getSeconds()).padStart(2, '0')\n    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`\n  }\n\n  // CSV escape\n  const escapeCSV = (value: string | number | null | undefined): string => {\n    if (value === null || value === undefined) return ''\n    const str = String(value)\n    if (str.includes(',') || str.includes('\"') || str.includes('\\n')) {\n      return `\"${str.replace(/\"/g, '\"\"')}\"`\n    }\n    return str\n  }\n\n  // Generate CSV content\n  const generateCSV = (items: Subdomain[]): string => {\n    const BOM = '\\ufeff'\n    const headers = ['name', 'created_at']\n    \n    const rows = items.map(item => [\n      escapeCSV(item.name),\n      escapeCSV(formatDateForCSV(item.createdAt))\n    ].join(','))\n    \n    return BOM + [headers.join(','), ...rows].join('\\n')\n  }\n\n  // Handle download all subdomains\n  const handleDownloadAll = async () => {\n    try {\n      let blob: Blob | null = null\n\n      if (scanId) {\n        const data = await SubdomainService.exportSubdomainsByScanId(scanId)\n        blob = data\n      } else if (targetId) {\n        const data = await SubdomainService.exportSubdomainsByTargetId(targetId)\n        blob = data\n      } else {\n        if (!subdomains || subdomains.length === 0) {\n          return\n        }\n        const csvContent = generateCSV(subdomains)\n        blob = new Blob([csvContent], { type: \"text/csv;charset=utf-8\" })\n      }\n\n      if (!blob) return\n\n      const url = URL.createObjectURL(blob)\n      const a = document.createElement(\"a\")\n      const prefix = scanId ? `scan-${scanId}` : targetId ? `target-${targetId}` : \"subdomains\"\n      a.href = url\n      a.download = `${prefix}-subdomains-${Date.now()}.csv`\n      document.body.appendChild(a)\n      a.click()\n      document.body.removeChild(a)\n      URL.revokeObjectURL(url)\n    } catch (error) {\n      console.error(\"Failed to download subdomains\", error)\n    }\n  }\n\n  // Handle download selected subdomains\n  const handleDownloadSelected = () => {\n    if (selectedSubdomains.length === 0) {\n      return\n    }\n    const csvContent = generateCSV(selectedSubdomains)\n    const blob = new Blob([csvContent], { type: \"text/csv;charset=utf-8\" })\n    const url = URL.createObjectURL(blob)\n    const a = document.createElement(\"a\")\n    a.href = url\n    a.download = `subdomains-selected-${scanId ?? targetId ?? \"all\"}-${Date.now()}.csv`\n    document.body.appendChild(a)\n    a.click()\n    document.body.removeChild(a)\n    URL.revokeObjectURL(url)\n  }\n\n  // Handle bulk delete\n  const handleBulkDelete = async () => {\n    if (selectedSubdomains.length === 0) return\n    \n    setIsDeleting(true)\n    try {\n      const ids = selectedSubdomains.map(s => s.id)\n      const result = await SubdomainService.bulkDeleteSubdomains(ids)\n      toast.success(tToast(\"deleteSuccess\", { count: result.deletedCount }))\n      setSelectedSubdomains([])\n      setDeleteDialogOpen(false)\n      refetch()\n    } catch (error) {\n      console.error(\"Failed to delete subdomains\", error)\n      toast.error(tToast(\"deleteFailed\"))\n    } finally {\n      setIsDeleting(false)\n    }\n  }\n\n  // Create column definitions\n  const subdomainColumns = useMemo(\n    () =>\n      createSubdomainColumns({\n        formatDate,\n        t: translations,\n      }),\n    [formatDate, translations]\n  )\n\n  // Convert backend data format to frontend Subdomain type (must be called before conditional rendering)\n  // Note: Backend uses djangorestframework-camel-case to automatically convert field names to camelCase\n  const subdomains: Subdomain[] = useMemo(() => {\n    if (!subdomainsData?.results) return []\n    return subdomainsData.results.map((item: any) => ({\n      id: item.id,\n      name: item.name,\n      createdAt: item.createdAt,  // Created time (already converted to camelCase by backend)\n    }))\n  }, [subdomainsData])\n\n  // Error state\n  if (error) {\n    return (\n      <div className=\"flex flex-col items-center justify-center py-12\">\n        <div className=\"rounded-full bg-destructive/10 p-3 mb-4\">\n          <AlertTriangle className=\"h-10 w-10 text-destructive\" />\n        </div>\n        <h3 className=\"text-lg font-semibold mb-2\">{tSubdomains(\"loadFailed\")}</h3>\n        <p className=\"text-muted-foreground text-center mb-4\">\n          {error.message || tSubdomains(\"loadError\")}\n        </p>\n        <button\n          onClick={() => refetch()}\n          className=\"px-4 py-2 bg-primary text-primary-foreground rounded-md hover:bg-primary/90\"\n        >\n          {tSubdomains(\"reload\")}\n        </button>\n      </div>\n    )\n  }\n\n  // Loading state (only show skeleton on first load, not during search)\n  if (isLoading && !subdomainsData) {\n    return (\n      <DataTableSkeleton\n        toolbarButtonCount={2}\n        rows={6}\n        columns={5}\n      />\n    )\n  }\n\n  return (\n    <>\n      <SubdomainsDataTable\n        data={subdomains}\n        columns={subdomainColumns}\n        onSelectionChange={setSelectedSubdomains}\n        filterValue={filterQuery}\n        onFilterChange={handleFilterChange}\n        isSearching={isSearching}\n        onDownloadAll={handleDownloadAll}\n        onDownloadSelected={handleDownloadSelected}\n        onBulkDelete={targetId ? () => setDeleteDialogOpen(true) : undefined}\n        pagination={pagination}\n        setPagination={setPagination}\n        paginationInfo={{\n          total: subdomainsData?.total || 0,\n          page: subdomainsData?.page || 1,\n          pageSize: subdomainsData?.pageSize || 10,\n          totalPages: subdomainsData?.totalPages || 1,\n        }}\n        onPaginationChange={handlePaginationChange}\n        onBulkAdd={targetId ? () => setBulkAddOpen(true) : undefined}\n      />\n      \n      {/* Bulk add subdomains dialog */}\n      {targetId && (\n        <BulkAddSubdomainsDialog\n          targetId={targetId}\n          targetName={targetData?.name}\n          open={bulkAddOpen}\n          onOpenChange={setBulkAddOpen}\n          onSuccess={() => refetch()}\n        />\n      )}\n\n      {/* Delete confirmation dialog */}\n      <ConfirmDialog\n        open={deleteDialogOpen}\n        onOpenChange={setDeleteDialogOpen}\n        title={tCommon(\"actions.confirmDelete\")}\n        description={tCommon(\"actions.deleteConfirmMessage\", { count: selectedSubdomains.length })}\n        onConfirm={handleBulkDelete}\n        loading={isDeleting}\n        variant=\"destructive\"\n      />\n    </>\n  )\n}\n"
  },
  {
    "path": "frontend/components/target/add-target-dialog.tsx",
    "content": "\"use client\"\n\nimport React, { useState, useRef } from \"react\"\nimport { Plus, Target as TargetIcon, Building2, Loader2, Check, ChevronsUpDown } from \"lucide-react\"\nimport { IconChevronLeft, IconChevronRight, IconChevronsLeft, IconChevronsRight } from \"@tabler/icons-react\"\nimport { useTranslations } from \"next-intl\"\n\n// Import UI components\nimport { Button } from \"@/components/ui/button\"\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from \"@/components/ui/dialog\"\nimport { Label } from \"@/components/ui/label\"\nimport { Textarea } from \"@/components/ui/textarea\"\nimport {\n  Command,\n  CommandDialog,\n  CommandEmpty,\n  CommandGroup,\n  CommandInput,\n  CommandItem,\n  CommandList,\n} from \"@/components/ui/command\"\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from \"@/components/ui/select\"\nimport { cn } from \"@/lib/utils\"\nimport { LoadingSpinner } from \"@/components/loading-spinner\"\nimport { TargetValidator } from \"@/lib/target-validator\"\n\n// Import React Query Hooks\nimport { useOrganizations } from \"@/hooks/use-organizations\"\nimport { useBatchCreateTargets } from \"@/hooks/use-targets\"\nimport { toast } from \"sonner\"\nimport type { BatchCreateTargetsRequest } from \"@/types/target.types\"\n\n// Component props type definition\ninterface AddTargetDialogProps {\n  onAdd?: () => void                                             // Success callback after adding\n  open?: boolean                                                 // External control for dialog open state\n  onOpenChange?: (open: boolean) => void                         // External control for dialog open callback\n  prefetchEnabled?: boolean                                      // Whether to prefetch organization list\n}\n\n/**\n * Add target dialog component (supports organization selection)\n * \n * Features:\n * 1. Batch input targets\n * 2. Optional organization selection\n * 3. Auto-create non-existent targets\n * 4. Auto-manage submission state\n * 5. Auto error handling and success notifications\n */\nexport function AddTargetDialog({ \n  onAdd,\n  open: externalOpen, \n  onOpenChange: externalOnOpenChange,\n  prefetchEnabled,\n}: AddTargetDialogProps) {\n  const t = useTranslations(\"target.dialog\")\n  const tCommon = useTranslations(\"common.actions\")\n  const tPagination = useTranslations(\"common.pagination\")\n  \n  // Dialog open state - supports external control\n  const [internalOpen, setInternalOpen] = useState(false)\n  const open = externalOpen !== undefined ? externalOpen : internalOpen\n  const setOpen = externalOnOpenChange || setInternalOpen\n  const [orgPickerOpen, setOrgPickerOpen] = useState(false)\n  \n  // Form data state\n  const [formData, setFormData] = useState({\n    targets: \"\",  // Target list, one per line\n    organizationId: \"\",  // Selected organization ID\n  })\n  \n  // Organization picker state\n  const [orgSearchQuery, setOrgSearchQuery] = useState(\"\")\n  const [orgPage, setOrgPage] = useState(1)\n  const [orgPageSize, setOrgPageSize] = useState(20)  // Default 20 items per page\n  const pageSizeOptions = [20, 50, 200, 500, 1000]\n  \n  // Validation error state\n  const [invalidTargets, setInvalidTargets] = useState<Array<{ index: number; originalTarget: string; error: string; type?: string }>>([])\n  \n  // Use batch create targets mutation\n  const batchCreateTargets = useBatchCreateTargets()\n  \n  // Refs for line numbers and textarea (for synchronized scrolling)\n  const lineNumbersRef = useRef<HTMLDivElement | null>(null)\n  const textareaRef = useRef<HTMLTextAreaElement | null>(null)\n  \n  // Get organization list (supports pagination)\n  const shouldEnableOrgsQuery = Boolean(prefetchEnabled || orgPickerOpen)\n  const { data: organizationsData, isLoading: isLoadingOrganizations } = useOrganizations(\n    {\n      page: orgPage,\n      pageSize: orgPageSize,  // Dynamic page size\n    },\n    { enabled: shouldEnableOrgsQuery }\n  )\n\n  // Handle input change\n  const handleInputChange = (field: keyof typeof formData, value: string) => {\n    setFormData((prev) => ({\n      ...prev,\n      [field]: value,\n    }))\n\n    if (field === \"targets\") {\n      const lines = value\n        .split(\"\\n\")\n        .map((s) => s.trim())\n        .filter((s) => s.length > 0)\n\n      if (lines.length === 0) {\n        setInvalidTargets([])\n        return\n      }\n\n      const results = TargetValidator.validateTargetBatch(lines)\n      const invalid = results\n        .filter((r) => !r.isValid)\n        .map((r) => ({ index: r.index, originalTarget: r.originalTarget, error: r.error || t(\"invalidFormat\"), type: r.type }))\n      setInvalidTargets(invalid)\n    }\n  }\n  \n  // Calculate target count\n  const targetCount = formData.targets\n    .split(\"\\n\")\n    .map(line => line.trim())\n    .filter(line => line.length > 0).length\n\n  // Handle form submission\n  const handleSubmit = async (e: React.FormEvent) => {\n    e.preventDefault()\n\n    // Form validation\n    if (!formData.targets.trim()) {\n      return\n    }\n\n    if (invalidTargets.length > 0) {\n      return\n    }\n\n    // Parse target list (one target per line)\n    const targetList = formData.targets\n      .split(\"\\n\")\n      .map(line => line.trim())\n      .filter(line => line.length > 0)\n      .map(name => ({\n        name,\n      }))\n\n    if (targetList.length === 0) {\n      return\n    }\n\n    // Assemble request data (organization is optional)\n    const payload: BatchCreateTargetsRequest = {\n      targets: targetList,\n    }\n\n    if (formData.organizationId) {\n      payload.organizationId = parseInt(formData.organizationId, 10)\n    }\n\n    // Call batch create API\n    batchCreateTargets.mutate(\n      payload,\n      {\n        onSuccess: (batchCreateResult) => {\n          // Reset form\n          setFormData({\n            targets: \"\",\n            organizationId: \"\",\n          })\n          setInvalidTargets([])\n          setOrgSearchQuery(\"\")\n          setOrgPage(1)\n          setOrgPageSize(20)\n          \n          // Close dialog\n          setOpen(false)\n          \n          // Call external callback (if provided)\n          if (onAdd) {\n            onAdd()\n          }\n        }\n      }\n    )\n  }\n\n  // Handle dialog close\n  const handleOpenChange = (newOpen: boolean) => {\n    if (!batchCreateTargets.isPending) {\n      setOpen(newOpen)\n      if (!newOpen) {\n        // Reset form when closing\n        setFormData({\n          targets: \"\",\n          organizationId: \"\",\n        })\n        setInvalidTargets([])\n        setOrgSearchQuery(\"\")\n        setOrgPage(1)\n        setOrgPageSize(20)  // Reset to default value\n      }\n    }\n  }\n\n  // Form validation\n  const isFormValid = formData.targets.trim().length > 0 && invalidTargets.length === 0\n  \n  // Synchronize textarea and line numbers scrolling\n  const handleTextareaScroll = (e: React.UIEvent<HTMLTextAreaElement>) => {\n    if (lineNumbersRef.current) {\n      lineNumbersRef.current.scrollTop = e.currentTarget.scrollTop\n    }\n  }\n\n  // Get selected organization name\n  const [selectedOrgName, setSelectedOrgName] = useState(\"\")\n  const selectedOrganization = organizationsData?.organizations.find(\n    org => org.id.toString() === formData.organizationId\n  )\n  \n  // Update selected organization name\n  React.useEffect(() => {\n    if (selectedOrganization) {\n      setSelectedOrgName(selectedOrganization.name)\n    }\n  }, [selectedOrganization])\n  \n  // Filter organization list\n  const filteredOrganizations = React.useMemo(() => {\n    if (!organizationsData?.organizations) return []\n    if (!orgSearchQuery) return organizationsData.organizations\n    return organizationsData.organizations.filter(org => \n      org.name.toLowerCase().includes(orgSearchQuery.toLowerCase())\n    )\n  }, [organizationsData?.organizations, orgSearchQuery])\n  \n  // Handle organization selection\n  const handleSelectOrganization = (orgId: string, orgName: string) => {\n    handleInputChange(\"organizationId\", orgId)\n    setSelectedOrgName(orgName)\n    setOrgPickerOpen(false)\n    setOrgSearchQuery(\"\")\n    setOrgPage(1)\n    setOrgPageSize(20)  // Reset to default value\n  }\n\n  return (\n    <Dialog open={open} onOpenChange={handleOpenChange}>\n      {/* Trigger button - only shown when not externally controlled */}\n      {externalOpen === undefined && (\n        <DialogTrigger asChild>\n          <Button size=\"sm\">\n            <Plus />\n            {t(\"addTarget\")}\n          </Button>\n        </DialogTrigger>\n      )}\n      \n      {/* Dialog content */}\n      <DialogContent className=\"sm:max-w-[650px] max-h-[90vh] overflow-y-auto\">\n        <DialogHeader>\n          <DialogTitle className=\"flex items-center space-x-2\">\n            <TargetIcon />\n            <span>{t(\"addTitle\")}</span>\n          </DialogTitle>\n          <DialogDescription>\n            {t(\"addDesc\")}\n          </DialogDescription>\n        </DialogHeader>\n        \n        {/* Form */}\n        <form onSubmit={handleSubmit}>\n          <div className=\"grid gap-4 py-4\">\n            {/* Target input (supports multiple lines) */}\n            <div className=\"grid gap-2\">\n              <Label htmlFor=\"targets\">\n                {t(\"targetList\")} <span className=\"text-destructive\">*</span>\n              </Label>\n              <div className=\"flex border rounded-md overflow-hidden h-[180px]\">\n                {/* Line numbers column - fixed width */}\n                <div className=\"flex-shrink-0 w-12 border-r bg-muted/50\">\n                  <div \n                    ref={lineNumbersRef}\n                    className=\"py-3 px-2 text-right font-mono text-xs text-muted-foreground leading-[1.4] h-full overflow-y-auto scrollbar-hide\"\n                  >\n                    {Array.from({ length: Math.max(formData.targets.split('\\n').length, 8) }, (_, i) => (\n                      <div key={i + 1} className=\"h-[20px]\">\n                        {i + 1}\n                      </div>\n                    ))}\n                  </div>\n                </div>\n                {/* Input area - takes remaining space */}\n                <div className=\"flex-1 overflow-hidden\">\n                  {/* Input - fixed height showing 8 lines */}\n                  <Textarea\n                    ref={textareaRef}\n                    id=\"targets\"\n                    value={formData.targets}\n                    onChange={(e) => handleInputChange(\"targets\", e.target.value)}\n                    onScroll={handleTextareaScroll}\n                    placeholder={t(\"targetPlaceholder\")}\n                    disabled={batchCreateTargets.isPending}\n                    className=\"font-mono h-full overflow-y-auto resize-none border-0 focus-visible:ring-0 focus-visible:ring-offset-0 leading-[1.4] text-sm py-3\"\n                    style={{ lineHeight: '20px' }}\n                  />\n                </div>\n              </div>\n              <div className=\"text-xs text-muted-foreground\">\n                {t(\"targetCount\", { count: targetCount })}\n              </div>\n              {invalidTargets.length > 0 && (\n                <div className=\"text-xs text-destructive\">\n                  {t(\"invalidCount\", {\n                    count: invalidTargets.length,\n                    line: invalidTargets[0].index + 1,\n                    target: invalidTargets[0].originalTarget,\n                    error: invalidTargets[0].error,\n                  })}\n                </div>\n              )}\n            </div>\n\n            {/* Organization (optional, searchable, paginated) */}\n            <div className=\"grid gap-2\">\n              <Label htmlFor=\"organization\">\n                {t(\"linkOrganization\")}\n              </Label>\n              <Button\n                variant=\"outline\"\n                role=\"combobox\"\n                className=\"w-full justify-between\"\n                onClick={() => setOrgPickerOpen(true)}\n                disabled={batchCreateTargets.isPending || isLoadingOrganizations}\n              >\n                {isLoadingOrganizations ? (\n                  <span className=\"flex items-center gap-2\">\n                    <Loader2 className=\"h-4 w-4 animate-spin\" />\n                    {t(\"loading\")}\n                  </span>\n                ) : formData.organizationId ? (\n                  <span className=\"flex items-center gap-2\">\n                    <Building2 className=\"h-4 w-4\" />\n                    <span className=\"truncate\">{selectedOrgName}</span>\n                  </span>\n                ) : (\n                  t(\"selectOrganization\")\n                )}\n                <ChevronsUpDown className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\n              </Button>\n              <CommandDialog\n                open={orgPickerOpen}\n                onOpenChange={(o) => {\n                  setOrgPickerOpen(o)\n                  if (!o) {\n                    setOrgSearchQuery(\"\")\n                    setOrgPage(1)\n                    setOrgPageSize(20)\n                  }\n                }}\n              >\n                <CommandInput\n                  placeholder={t(\"searchOrganization\")}\n                  value={orgSearchQuery}\n                  onValueChange={(v) => setOrgSearchQuery(v)}\n                />\n                <CommandList className=\"max-h-[300px] overflow-y-auto overscroll-contain\">\n                  {isLoadingOrganizations ? (\n                    <div className=\"py-6 text-center text-sm\">\n                      <Loader2 className=\"mx-auto h-4 w-4 animate-spin\" />\n                    </div>\n                  ) : filteredOrganizations.length === 0 ? (\n                    <CommandEmpty>{t(\"noOrganization\")}</CommandEmpty>\n                  ) : (\n                    <CommandGroup>\n                      <div className=\"grid grid-cols-2 gap-1 p-1\">\n                        {filteredOrganizations.map((org) => (\n                          <CommandItem\n                            key={org.id}\n                            value={org.id.toString()}\n                            onSelect={() => handleSelectOrganization(org.id.toString(), org.name)}\n                            className=\"cursor-pointer\"\n                          >\n                            <Check\n                              className={cn(\n                                \"mr-1 h-3.5 w-3.5 flex-shrink-0\",\n                                formData.organizationId === org.id.toString()\n                                  ? \"opacity-100\"\n                                  : \"opacity-0\"\n                              )}\n                            />\n                            <Building2 className=\"mr-1 h-3.5 w-3.5 flex-shrink-0\" />\n                            <span className=\"font-medium text-sm truncate\">{org.name}</span>\n                          </CommandItem>\n                        ))}\n                      </div>\n                    </CommandGroup>\n                  )}\n                </CommandList>\n                {organizationsData && (\n                  <div className=\"flex items-center justify-between border-t p-2 bg-muted/50\">\n                    <div className=\"text-xs text-muted-foreground\">\n                      {t(\"orgPagination\", {\n                        total: organizationsData.pagination.total,\n                        page: organizationsData.pagination.page,\n                        totalPages: organizationsData.pagination.totalPages,\n                      })}\n                    </div>\n                    <div className=\"flex items-center gap-2\">\n                      <div className=\"flex items-center gap-1\">\n                        <span className=\"text-xs text-muted-foreground\">{t(\"perPage\")}</span>\n                        <Select value={orgPageSize.toString()} onValueChange={(value) => {\n                          setOrgPageSize(Number(value))\n                          setOrgPage(1)\n                        }}>\n                          <SelectTrigger className=\"h-7 w-16 text-xs\">\n                            <SelectValue />\n                          </SelectTrigger>\n                          <SelectContent>\n                            {pageSizeOptions.map((size) => (\n                              <SelectItem key={size} value={size.toString()}>\n                                {size}\n                              </SelectItem>\n                            ))}\n                          </SelectContent>\n                        </Select>\n                      </div>\n                      <div className=\"flex items-center space-x-2\">\n                        <Button\n                          variant=\"outline\"\n                          className=\"hidden h-8 w-8 p-0 lg:flex\"\n                          onClick={() => setOrgPage(1)}\n                          disabled={orgPage === 1 || isLoadingOrganizations}\n                        >\n                          <span className=\"sr-only\">{tPagination(\"first\")}</span>\n                          <IconChevronsLeft />\n                        </Button>\n                        <Button\n                          variant=\"outline\"\n                          className=\"h-8 w-8 p-0\"\n                          onClick={() => setOrgPage(prev => Math.max(1, prev - 1))}\n                          disabled={orgPage === 1 || isLoadingOrganizations}\n                        >\n                          <span className=\"sr-only\">{tPagination(\"previous\")}</span>\n                          <IconChevronLeft />\n                        </Button>\n                        <Button\n                          variant=\"outline\"\n                          className=\"h-8 w-8 p-0\"\n                          onClick={() => setOrgPage(prev => Math.min(organizationsData.pagination.totalPages, prev + 1))}\n                          disabled={orgPage === organizationsData.pagination.totalPages || isLoadingOrganizations}\n                        >\n                          <span className=\"sr-only\">{tPagination(\"next\")}</span>\n                          <IconChevronRight />\n                        </Button>\n                        <Button\n                          variant=\"outline\"\n                          className=\"hidden h-8 w-8 p-0 lg:flex\"\n                          onClick={() => setOrgPage(organizationsData.pagination.totalPages)}\n                          disabled={orgPage === organizationsData.pagination.totalPages || isLoadingOrganizations}\n                        >\n                          <span className=\"sr-only\">{tPagination(\"last\")}</span>\n                          <IconChevronsRight />\n                        </Button>\n                      </div>\n                    </div>\n                  </div>\n                )}\n              </CommandDialog>\n            </div>\n          </div>\n          \n          {/* Dialog footer buttons */}\n          <DialogFooter>\n            <Button \n              type=\"button\" \n              variant=\"outline\" \n              onClick={() => handleOpenChange(false)}\n              disabled={batchCreateTargets.isPending}\n            >\n              {tCommon(\"cancel\")}\n            </Button>\n            <Button \n              type=\"submit\" \n              disabled={batchCreateTargets.isPending || !isFormValid}\n            >\n              {batchCreateTargets.isPending ? (\n                <>\n                  <LoadingSpinner/>\n                  {t(\"creating\")}\n                </>\n              ) : (\n                <>\n                  <Plus />\n                  {t(\"addTarget\")}\n                </>\n              )}\n            </Button>\n          </DialogFooter>\n        </form>\n      </DialogContent>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "frontend/components/target/all-targets-columns.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { ColumnDef } from \"@tanstack/react-table\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuSeparator,\n  DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\"\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipProvider,\n  TooltipTrigger,\n} from \"@/components/ui/tooltip\"\nimport { MoreHorizontal, Eye, Trash2, Play, Calendar, Copy, Check } from \"lucide-react\"\nimport { toast } from \"sonner\"\nimport { DataTableColumnHeader } from \"@/components/ui/data-table/column-header\"\nimport { ExpandableBadgeList } from \"@/components/ui/data-table/expandable-cell\"\nimport type { Target } from \"@/types/target.types\"\n\n// Translation type definitions\nexport interface AllTargetsTranslations {\n  columns: {\n    target: string\n    organization: string\n    addedOn: string\n    lastScanned: string\n  }\n  actions: {\n    scheduleScan: string\n    delete: string\n    selectAll: string\n    selectRow: string\n  }\n  tooltips: {\n    targetDetails: string\n    targetSummary: string\n    initiateScan: string\n    clickToCopy: string\n    copied: string\n  }\n}\n\n/**\n * Copy to clipboard (compatible with HTTP environment)\n */\nasync function copyToClipboard(text: string): Promise<boolean> {\n  try {\n    if (navigator.clipboard && window.isSecureContext) {\n      await navigator.clipboard.writeText(text)\n    } else {\n      const textArea = document.createElement('textarea')\n      textArea.value = text\n      textArea.style.position = 'fixed'\n      textArea.style.left = '-9999px'\n      textArea.style.top = '-9999px'\n      document.body.appendChild(textArea)\n      textArea.focus()\n      textArea.select()\n      document.execCommand('copy')\n      document.body.removeChild(textArea)\n    }\n    return true\n  } catch {\n    return false\n  }\n}\n\ninterface CreateColumnsProps {\n  formatDate: (dateString: string) => string\n  navigate: (path: string) => void\n  handleDelete: (target: Target) => void\n  handleInitiateScan: (target: Target) => void\n  handleScheduleScan: (target: Target) => void\n  t: AllTargetsTranslations\n}\n\n/**\n * Target name cell component\n */\nfunction TargetNameCell({ \n  name, \n  targetId, \n  navigate,\n  t,\n}: { \n  name: string\n  targetId: number\n  navigate: (path: string) => void\n  t: AllTargetsTranslations\n}) {\n  const [copied, setCopied] = React.useState(false)\n  \n  const handleCopy = async (e: React.MouseEvent) => {\n    e.stopPropagation()\n    const success = await copyToClipboard(name)\n    if (success) {\n      setCopied(true)\n      toast.success(t.tooltips.copied)\n      setTimeout(() => setCopied(false), 2000)\n    }\n  }\n  \n  return (\n    <div className=\"group flex items-start gap-1 flex-1 min-w-0\">\n      <Tooltip>\n        <TooltipTrigger asChild>\n          <span\n            onClick={() => navigate(`/target/${targetId}/details`)}\n            className=\"text-sm font-medium hover:text-primary hover:underline underline-offset-2 transition-colors cursor-pointer text-left break-all leading-relaxed whitespace-normal\"\n          >\n            {name}\n          </span>\n        </TooltipTrigger>\n        <TooltipContent>{t.tooltips.targetDetails}</TooltipContent>\n      </Tooltip>\n      <TooltipProvider delayDuration={300}>\n        <Tooltip>\n          <TooltipTrigger asChild>\n            <Button\n              variant=\"ghost\"\n              size=\"icon\"\n              className={`h-6 w-6 flex-shrink-0 hover:bg-accent transition-opacity ${\n                copied ? 'opacity-100' : 'opacity-0 group-hover:opacity-100'\n              }`}\n              onClick={handleCopy}\n            >\n              {copied ? (\n                <Check className=\"h-3.5 w-3.5 text-green-600 dark:text-green-400\" />\n              ) : (\n                <Copy className=\"h-3.5 w-3.5 text-muted-foreground\" />\n              )}\n            </Button>\n          </TooltipTrigger>\n          <TooltipContent side=\"top\">\n            <p className=\"text-xs\">{copied ? t.tooltips.copied : t.tooltips.clickToCopy}</p>\n          </TooltipContent>\n        </Tooltip>\n      </TooltipProvider>\n    </div>\n  )\n}\n\n/**\n * Target row actions component\n */\nfunction TargetRowActions({\n  target,\n  onView,\n  onInitiateScan,\n  onScheduleScan,\n  onDelete,\n  t,\n}: {\n  target: Target\n  onView: () => void\n  onInitiateScan: () => void\n  onScheduleScan: () => void\n  onDelete: () => void\n  t: AllTargetsTranslations\n}) {\n  return (\n    <div className=\"flex items-center gap-1\">\n      <TooltipProvider delayDuration={300}>\n        <Tooltip>\n          <TooltipTrigger asChild>\n            <Button\n              variant=\"ghost\"\n              size=\"icon\"\n              className=\"h-8 w-8\"\n              onClick={onView}\n            >\n              <Eye className=\"h-4 w-4\" />\n            </Button>\n          </TooltipTrigger>\n          <TooltipContent side=\"top\">\n            <p className=\"text-xs\">{t.tooltips.targetSummary}</p>\n          </TooltipContent>\n        </Tooltip>\n      </TooltipProvider>\n\n      <TooltipProvider delayDuration={300}>\n        <Tooltip>\n          <TooltipTrigger asChild>\n            <Button\n              variant=\"ghost\"\n              size=\"icon\"\n              className=\"h-8 w-8\"\n              onClick={onInitiateScan}\n            >\n              <Play className=\"h-4 w-4\" />\n            </Button>\n          </TooltipTrigger>\n          <TooltipContent side=\"top\">\n            <p className=\"text-xs\">{t.tooltips.initiateScan}</p>\n          </TooltipContent>\n        </Tooltip>\n      </TooltipProvider>\n\n      <DropdownMenu>\n        <DropdownMenuTrigger asChild>\n          <Button\n            variant=\"ghost\"\n            className=\"h-8 w-8 p-0 data-[state=open]:bg-muted\"\n          >\n            <MoreHorizontal className=\"h-4 w-4\" />\n          </Button>\n        </DropdownMenuTrigger>\n        <DropdownMenuContent align=\"end\" className=\"w-48\">\n          <DropdownMenuItem onClick={onScheduleScan}>\n            <Calendar />\n            {t.actions.scheduleScan}\n          </DropdownMenuItem>\n          <DropdownMenuSeparator />\n          <DropdownMenuItem\n            onClick={onDelete}\n            className=\"text-destructive focus:text-destructive\"\n          >\n            <Trash2 />\n            {t.actions.delete}\n          </DropdownMenuItem>\n        </DropdownMenuContent>\n      </DropdownMenu>\n    </div>\n  )\n}\n\n/**\n * Create all targets table column definitions\n */\nexport const createAllTargetsColumns = ({\n  formatDate,\n  navigate,\n  handleDelete,\n  handleInitiateScan,\n  handleScheduleScan,\n  t,\n}: CreateColumnsProps): ColumnDef<Target>[] => [\n  {\n    id: \"select\",\n    size: 40,\n    minSize: 40,\n    maxSize: 40,\n    enableResizing: false,\n    header: ({ table }) => (\n      <Checkbox\n        checked={\n          table.getIsAllPageRowsSelected() ||\n          (table.getIsSomePageRowsSelected() && \"indeterminate\")\n        }\n        onCheckedChange={(value) => table.toggleAllPageRowsSelected(!!value)}\n        aria-label={t.actions.selectAll}\n      />\n    ),\n    cell: ({ row }) => (\n      <Checkbox\n        checked={row.getIsSelected()}\n        onCheckedChange={(value) => row.toggleSelected(!!value)}\n        aria-label={t.actions.selectRow}\n      />\n    ),\n    enableSorting: false,\n    enableHiding: false,\n  },\n  {\n    accessorKey: \"name\",\n    size: 350,\n    minSize: 250,\n    meta: { title: t.columns.target },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.target} />\n    ),\n    cell: ({ row }) => (\n      <TargetNameCell\n        name={row.getValue(\"name\") as string}\n        targetId={row.original.id}\n        navigate={navigate}\n        t={t}\n      />\n    ),\n  },\n  {\n    accessorKey: \"organizations\",\n    size: 200,\n    minSize: 150,\n    maxSize: 350,\n    meta: { title: t.columns.organization },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.organization} />\n    ),\n    cell: ({ row }) => {\n      const organizations = row.getValue(\"organizations\") as Array<{ id: number; name: string }> | undefined\n      return (\n        <ExpandableBadgeList\n          items={organizations}\n          maxVisible={2}\n          variant=\"secondary\"\n        />\n      )\n    },\n    enableSorting: false,\n  },\n  {\n    accessorKey: \"createdAt\",\n    size: 150,\n    minSize: 120,\n    maxSize: 200,\n    meta: { title: t.columns.addedOn },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.addedOn} />\n    ),\n    cell: ({ row }) => {\n      const createdAt = row.getValue(\"createdAt\") as string\n      return (\n        <div className=\"text-sm text-muted-foreground\">\n          {formatDate(createdAt)}\n        </div>\n      )\n    },\n  },\n  {\n    accessorKey: \"lastScannedAt\",\n    size: 150,\n    minSize: 120,\n    maxSize: 200,\n    meta: { title: t.columns.lastScanned },\n    header: ({ column }) => (\n      <DataTableColumnHeader column={column} title={t.columns.lastScanned} />\n    ),\n    cell: ({ row }) => {\n      const lastScannedAt = row.original.lastScannedAt\n      if (!lastScannedAt) {\n        return <span className=\"text-sm text-muted-foreground\">-</span>\n      }\n      return (\n        <div className=\"text-sm text-muted-foreground\">\n          {formatDate(lastScannedAt)}\n        </div>\n      )\n    },\n  },\n  {\n    id: \"actions\",\n    size: 120,\n    minSize: 100,\n    maxSize: 150,\n    enableResizing: false,\n    cell: ({ row }) => (\n      <TargetRowActions\n        target={row.original}\n        onView={() => navigate(`/target/${row.original.id}/details`)}\n        onInitiateScan={() => handleInitiateScan(row.original)}\n        onScheduleScan={() => handleScheduleScan(row.original)}\n        onDelete={() => handleDelete(row.original)}\n        t={t}\n      />\n    ),\n    enableSorting: false,\n    enableHiding: false,\n  },\n]\n"
  },
  {
    "path": "frontend/components/target/all-targets-detail-view.tsx",
    "content": "\"use client\"\n\nimport React, { useState, useCallback } from \"react\"\nimport { useRouter } from \"next/navigation\"\nimport { useTranslations } from \"next-intl\"\nimport { createAllTargetsColumns, AllTargetsTranslations } from \"@/components/target/all-targets-columns\"\nimport { TargetsDataTable } from \"@/components/target/targets-data-table\"\nimport { AddTargetDialog } from \"@/components/target/add-target-dialog\"\nimport { InitiateScanDialog } from \"@/components/scan/initiate-scan-dialog\"\nimport { CreateScheduledScanDialog } from \"@/components/scan/scheduled/create-scheduled-scan-dialog\"\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\"\nimport { formatDate } from \"@/lib/utils\"\nimport { LoadingSpinner } from \"@/components/loading-spinner\"\nimport { DataTableSkeleton } from \"@/components/ui/data-table-skeleton\"\nimport { useTargets, useDeleteTarget, useBatchDeleteTargets } from \"@/hooks/use-targets\"\nimport type { Target } from \"@/types/target.types\"\nimport type { Organization } from \"@/types/organization.types\"\n\n/**\n * All targets detail view component\n * Displays a list of all targets in the system, supports search, pagination, delete operations\n */\nexport function AllTargetsDetailView() {\n  const router = useRouter()\n  const tColumns = useTranslations(\"columns\")\n  const tTooltips = useTranslations(\"tooltips\")\n  const tCommon = useTranslations(\"common\")\n  const tConfirm = useTranslations(\"common.confirm\")\n  \n  // Build translation object\n  const translations: AllTargetsTranslations = {\n    columns: {\n      target: tColumns(\"target.target\"),\n      organization: tColumns(\"organization.organization\"),\n      addedOn: tColumns(\"target.addedOn\"),\n      lastScanned: tColumns(\"target.lastScanned\"),\n    },\n    actions: {\n      scheduleScan: tTooltips(\"scheduleScan\"),\n      delete: tCommon(\"actions.delete\"),\n      selectAll: tCommon(\"actions.selectAll\"),\n      selectRow: tCommon(\"actions.selectRow\"),\n    },\n    tooltips: {\n      targetDetails: tTooltips(\"targetDetails\"),\n      targetSummary: tTooltips(\"targetSummary\"),\n      initiateScan: tTooltips(\"initiateScan\"),\n      clickToCopy: tTooltips(\"clickToCopy\"),\n      copied: tTooltips(\"copied\"),\n    },\n  }\n  const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 10 })\n  const [searchQuery, setSearchQuery] = useState(\"\")\n  const [selectedTargets, setSelectedTargets] = useState<Target[]>([])\n  const [isAddDialogOpen, setIsAddDialogOpen] = useState(false)\n  const [deleteDialogOpen, setDeleteDialogOpen] = useState(false)\n  const [targetToDelete, setTargetToDelete] = useState<Target | null>(null)\n  const [bulkDeleteDialogOpen, setBulkDeleteDialogOpen] = useState(false)\n  const [shouldPrefetchOrgs, setShouldPrefetchOrgs] = useState(false)\n  const [initiateScanDialogOpen, setInitiateScanDialogOpen] = useState(false)\n  const [scheduleScanDialogOpen, setScheduleScanDialogOpen] = useState(false)\n  const [targetToScan, setTargetToScan] = useState<Target | null>(null)\n  const [targetToSchedule, setTargetToSchedule] = useState<Target | null>(null)\n\n  // Handle pagination state change\n  const handlePaginationChange = React.useCallback((newPagination: { pageIndex: number, pageSize: number }) => {\n    setPagination(newPagination)\n  }, [])\n\n  const [isSearching, setIsSearching] = React.useState(false)\n\n  const handleSearchChange = (value: string) => {\n    setIsSearching(true)\n    setSearchQuery(value)\n    setPagination((prev) => ({ ...prev, pageIndex: 0 }))\n  }\n\n  // Use API hooks\n  const { data, isLoading, isFetching, error } = useTargets(pagination.pageIndex + 1, pagination.pageSize, undefined, searchQuery || undefined)\n  const deleteTargetMutation = useDeleteTarget()\n  const batchDeleteMutation = useBatchDeleteTargets()\n\n  const targets = data?.results || []\n  const totalCount = data?.total || 0\n\n  React.useEffect(() => {\n    if (!isFetching && isSearching) {\n      setIsSearching(false)\n    }\n  }, [isFetching, isSearching])\n\n  // Handle add target\n  const handleAddTarget = useCallback(() => {\n    setIsAddDialogOpen(true)\n  }, [])\n\n  // Handle delete single target\n  const handleDeleteTarget = useCallback((target: Target) => {\n    setTargetToDelete(target)\n    setDeleteDialogOpen(true)\n  }, [])\n\n  // Confirm delete target\n  const confirmDelete = async () => {\n    if (!targetToDelete) return\n\n    try {\n      await deleteTargetMutation.mutateAsync(targetToDelete.id)\n      setDeleteDialogOpen(false)\n      setTargetToDelete(null)\n    } catch (error) {\n      // Error already handled in hook\n      console.error('Delete failed:', error)\n    }\n  }\n\n  // Handle batch delete\n  const handleBatchDelete = useCallback(() => {\n    if (selectedTargets.length === 0) return\n    setBulkDeleteDialogOpen(true)\n  }, [selectedTargets])\n\n  // Confirm batch delete\n  const confirmBulkDelete = async () => {\n    if (selectedTargets.length === 0) return\n\n    try {\n      await batchDeleteMutation.mutateAsync({\n        ids: selectedTargets.map((t) => t.id),\n      })\n      setBulkDeleteDialogOpen(false)\n      setSelectedTargets([])\n    } catch (error) {\n      // Error already handled in hook\n      console.error('Batch delete failed:', error)\n    }\n  }\n\n  // Handle initiate scan\n  const handleInitiateScan = useCallback((target: Target) => {\n    setTargetToScan(target)\n    setInitiateScanDialogOpen(true)\n  }, [])\n\n  // Handle scheduled scan\n  const handleScheduleScan = useCallback((target: Target) => {\n    setTargetToSchedule(target)\n    setScheduleScanDialogOpen(true)\n  }, [])\n\n  // Create table columns\n  const columns = createAllTargetsColumns({\n    formatDate,\n    navigate: (path: string) => router.push(path),\n    handleDelete: handleDeleteTarget,\n    handleInitiateScan,\n    handleScheduleScan,\n    t: translations,\n  })\n\n  // Loading\n  if (isLoading) {\n    return (\n      <DataTableSkeleton\n        toolbarButtonCount={2}\n        rows={6}\n        columns={5}\n      />\n    )\n  }\n\n  // Error handling\n  if (error) {\n    return (\n      <div className=\"flex items-center justify-center h-64\">\n        <div className=\"text-center\">\n          <p className=\"text-destructive mb-2\">{tCommon(\"status.error\")}</p>\n          <p className=\"text-sm text-muted-foreground\">{error.message}</p>\n        </div>\n      </div>\n    )\n  }\n\n  return (\n    <>\n      <TargetsDataTable\n        data={targets}\n        columns={columns}\n        onAddNew={handleAddTarget}\n        onAddHover={() => setShouldPrefetchOrgs(true)}\n        onBulkDelete={handleBatchDelete}\n        onSelectionChange={setSelectedTargets}\n        searchPlaceholder={tColumns(\"target.target\")}\n        searchValue={searchQuery}\n        onSearch={handleSearchChange}\n        isSearching={isSearching}\n        addButtonText={tCommon(\"actions.add\")}\n        // 分页相关属性\n        pagination={pagination}\n        onPaginationChange={handlePaginationChange}\n        totalCount={totalCount}\n        manualPagination={true}\n      />\n\n      {/* Add target dialog */}\n      <AddTargetDialog\n        onAdd={() => {\n          setIsAddDialogOpen(false)\n        }}\n        open={isAddDialogOpen}\n        onOpenChange={setIsAddDialogOpen}\n        prefetchEnabled={shouldPrefetchOrgs}\n      />\n\n      {/* Delete confirmation dialog */}\n      <AlertDialog open={deleteDialogOpen} onOpenChange={setDeleteDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{tConfirm(\"deleteTargetTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {tConfirm(\"deleteTargetMessage\", { name: targetToDelete?.name ?? \"\" })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"actions.cancel\")}</AlertDialogCancel>\n            <AlertDialogAction\n              onClick={confirmDelete}\n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n              disabled={deleteTargetMutation.isPending}\n            >\n              {deleteTargetMutation.isPending ? (\n                <>\n                  <LoadingSpinner/>\n                  {tConfirm(\"deleting\")}\n                </>\n              ) : (\n                tConfirm(\"confirmDelete\")\n              )}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n\n      {/* Initiate scan dialog */}\n      <InitiateScanDialog\n        organization={\n          targetToScan?.organizations && targetToScan.organizations.length > 0\n            ? {\n                id: targetToScan.organizations[0].id,\n                name: targetToScan.organizations[0].name,\n                targetCount: 1, // Current target\n              } as Organization\n            : null\n        }\n        targetId={targetToScan?.id}\n        targetName={targetToScan?.name}\n        open={initiateScanDialogOpen}\n        onOpenChange={setInitiateScanDialogOpen}\n        onSuccess={() => {\n          setTargetToScan(null)\n        }}\n      />\n\n      {/* Scheduled scan dialog */}\n      <CreateScheduledScanDialog\n        open={scheduleScanDialogOpen}\n        onOpenChange={setScheduleScanDialogOpen}\n        presetTargetId={targetToSchedule?.id}\n        presetTargetName={targetToSchedule?.name}\n        onSuccess={() => {\n          setTargetToSchedule(null)\n        }}\n      />\n\n      {/* Batch delete confirmation dialog */}\n      <AlertDialog open={bulkDeleteDialogOpen} onOpenChange={setBulkDeleteDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{tConfirm(\"bulkDeleteTargetTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {tConfirm(\"bulkDeleteTargetMessage\", { count: selectedTargets.length })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          {/* Target list container - fixed max height with scroll support */}\n          <div className=\"mt-2 p-2 bg-muted rounded-md max-h-96 overflow-y-auto\">\n            <ul className=\"text-sm space-y-1\">\n              {selectedTargets.map((target) => (\n                <li key={target.id} className=\"flex items-center\">\n                  <span className=\"font-medium\">{target.name}</span>\n                  {target.description && (\n                    <span className=\"text-muted-foreground ml-2\">- {target.description}</span>\n                  )}\n                </li>\n              ))}\n            </ul>\n          </div>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"actions.cancel\")}</AlertDialogCancel>\n            <AlertDialogAction\n              onClick={confirmBulkDelete}\n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n              disabled={batchDeleteMutation.isPending}\n            >\n              {batchDeleteMutation.isPending ? (\n                <>\n                  <LoadingSpinner/>\n                  {tConfirm(\"deleting\")}\n                </>\n              ) : (\n                tConfirm(\"deleteTargetCount\", { count: selectedTargets.length })\n              )}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n    </>\n  )\n}\n"
  },
  {
    "path": "frontend/components/target/index.ts",
    "content": "/**\n * Target Components - Unified exports\n */\nexport { TargetsDataTable } from './targets-data-table'\nexport { createAllTargetsColumns } from './all-targets-columns'\nexport { AllTargetsDetailView } from './all-targets-detail-view'\nexport { AddTargetDialog } from './add-target-dialog'\n\n"
  },
  {
    "path": "frontend/components/target/target-overview.tsx",
    "content": "\"use client\"\n\nimport React, { useState } from \"react\"\nimport Link from \"next/link\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport {\n  Globe,\n  Network,\n  Server,\n  Link2,\n  FolderOpen,\n  ShieldAlert,\n  AlertTriangle,\n  Clock,\n  Calendar,\n  ChevronRight,\n  CheckCircle2,\n  PauseCircle,\n  Play,\n} from \"lucide-react\"\nimport { Card, CardContent, CardHeader, CardTitle } from \"@/components/ui/card\"\nimport { Skeleton } from \"@/components/ui/skeleton\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\nimport { useTarget } from \"@/hooks/use-targets\"\nimport { useScheduledScans } from \"@/hooks/use-scheduled-scans\"\nimport { ScanHistoryList } from \"@/components/scan/history/scan-history-list\"\nimport { InitiateScanDialog } from \"@/components/scan/initiate-scan-dialog\"\nimport { getDateLocale } from \"@/lib/date-utils\"\n\ninterface TargetOverviewProps {\n  targetId: number\n}\n\n/**\n * Target overview component\n * Displays statistics cards for the target\n */\nexport function TargetOverview({ targetId }: TargetOverviewProps) {\n  const t = useTranslations(\"pages.targetDetail.overview\")\n  const locale = useLocale()\n\n  const [scanDialogOpen, setScanDialogOpen] = useState(false)\n\n  const { data: target, isLoading, error } = useTarget(targetId)\n  const { data: scheduledScansData, isLoading: isLoadingScans } = useScheduledScans({ \n    targetId, \n    pageSize: 5 \n  })\n\n  const scheduledScans = scheduledScansData?.results || []\n  const totalScheduledScans = scheduledScansData?.total || 0\n  const enabledScans = scheduledScans.filter(s => s.isEnabled)\n\n  // Format date helper\n  const formatDate = (dateString: string | undefined): string => {\n    if (!dateString) return \"-\"\n    return new Date(dateString).toLocaleString(getDateLocale(locale), {\n      year: \"numeric\",\n      month: \"short\",\n      day: \"numeric\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n    })\n  }\n\n  // Format short date for scheduled scans\n  const formatShortDate = (dateString: string | undefined): string => {\n    if (!dateString) return \"-\"\n    const date = new Date(dateString)\n    const now = new Date()\n    const tomorrow = new Date(now)\n    tomorrow.setDate(tomorrow.getDate() + 1)\n    \n    // Check if it's today\n    if (date.toDateString() === now.toDateString()) {\n      return t(\"scheduledScans.today\") + \" \" + date.toLocaleTimeString(getDateLocale(locale), {\n        hour: \"2-digit\",\n        minute: \"2-digit\",\n      })\n    }\n    // Check if it's tomorrow\n    if (date.toDateString() === tomorrow.toDateString()) {\n      return t(\"scheduledScans.tomorrow\") + \" \" + date.toLocaleTimeString(getDateLocale(locale), {\n        hour: \"2-digit\",\n        minute: \"2-digit\",\n      })\n    }\n    // Otherwise show date\n    return date.toLocaleString(getDateLocale(locale), {\n      month: \"short\",\n      day: \"numeric\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n    })\n  }\n\n  // Get next execution time from enabled scans\n  const getNextExecution = () => {\n    const enabledWithNextRun = enabledScans.filter(s => s.nextRunTime)\n    if (enabledWithNextRun.length === 0) return null\n    \n    const sorted = enabledWithNextRun.sort((a, b) => \n      new Date(a.nextRunTime!).getTime() - new Date(b.nextRunTime!).getTime()\n    )\n    return sorted[0]\n  }\n\n  const nextExecution = getNextExecution()\n\n  if (isLoading) {\n    return (\n      <div className=\"space-y-6\">\n        {/* Stats cards skeleton */}\n        <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n          {[...Array(6)].map((_, i) => (\n            <Card key={i}>\n              <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n                <Skeleton className=\"h-4 w-24\" />\n                <Skeleton className=\"h-4 w-4\" />\n              </CardHeader>\n              <CardContent>\n                <Skeleton className=\"h-8 w-16\" />\n              </CardContent>\n            </Card>\n          ))}\n        </div>\n      </div>\n    )\n  }\n\n  if (error || !target) {\n    return (\n      <div className=\"flex flex-col items-center justify-center py-12\">\n        <AlertTriangle className=\"h-10 w-10 text-destructive mb-4\" />\n        <p className=\"text-muted-foreground\">{t(\"loadError\")}</p>\n      </div>\n    )\n  }\n\n  const summary = (target as any).summary || {}\n  const vulnSummary = summary.vulnerabilities || { total: 0, critical: 0, high: 0, medium: 0, low: 0 }\n\n  const assetCards = [\n    {\n      title: t(\"cards.websites\"),\n      value: summary.websites || 0,\n      icon: Globe,\n      href: `/target/${targetId}/websites/`,\n    },\n    {\n      title: t(\"cards.subdomains\"),\n      value: summary.subdomains || 0,\n      icon: Network,\n      href: `/target/${targetId}/subdomain/`,\n    },\n    {\n      title: t(\"cards.ips\"),\n      value: summary.ips || 0,\n      icon: Server,\n      href: `/target/${targetId}/ip-addresses/`,\n    },\n    {\n      title: t(\"cards.urls\"),\n      value: summary.endpoints || 0,\n      icon: Link2,\n      href: `/target/${targetId}/endpoints/`,\n    },\n    {\n      title: t(\"cards.directories\"),\n      value: summary.directories || 0,\n      icon: FolderOpen,\n      href: `/target/${targetId}/directories/`,\n    },\n  ]\n\n  return (\n    <div className=\"space-y-6\">\n      {/* Target info + Initiate Scan button */}\n      <div className=\"flex items-center justify-between\">\n        <div className=\"flex items-center gap-4 text-sm text-muted-foreground\">\n          <div className=\"flex items-center gap-1.5\">\n            <Calendar className=\"h-4 w-4\" />\n            <span>{t(\"createdAt\")}: {formatDate(target.createdAt)}</span>\n          </div>\n          <div className=\"flex items-center gap-1.5\">\n            <Clock className=\"h-4 w-4\" />\n            <span>{t(\"lastScanned\")}: {formatDate(target.lastScannedAt)}</span>\n          </div>\n        </div>\n        <Button onClick={() => setScanDialogOpen(true)}>\n          <Play className=\"h-4 w-4 mr-2\" />\n          {t(\"initiateScan\")}\n        </Button>\n      </div>\n\n      {/* Asset statistics cards */}\n      <div>\n        <h3 className=\"text-lg font-semibold mb-4\">{t(\"assetsTitle\")}</h3>\n        <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-5\">\n          {assetCards.map((card) => (\n            <Link key={card.title} href={card.href}>\n              <Card className=\"hover:border-primary/50 transition-colors cursor-pointer\">\n                <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n                  <CardTitle className=\"text-sm font-medium\">{card.title}</CardTitle>\n                  <card.icon className=\"h-4 w-4 text-muted-foreground\" />\n                </CardHeader>\n                <CardContent>\n                  <div className=\"text-2xl font-bold\">{card.value.toLocaleString()}</div>\n                </CardContent>\n              </Card>\n            </Link>\n          ))}\n        </div>\n      </div>\n\n      {/* Scheduled Scans + Vulnerability Statistics (Two columns) */}\n      <div className=\"grid gap-4 md:grid-cols-2\">\n        {/* Scheduled Scans Card */}\n        <Card className=\"flex flex-col\">\n          <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-3\">\n            <div className=\"flex items-center gap-2\">\n              <Clock className=\"h-4 w-4 text-muted-foreground\" />\n              <CardTitle className=\"text-sm font-medium\">{t(\"scheduledScans.title\")}</CardTitle>\n            </div>\n            <Link href={`/target/${targetId}/settings/`}>\n              <Button variant=\"ghost\" size=\"sm\" className=\"h-7 text-xs\">\n                {t(\"scheduledScans.manage\")}\n                <ChevronRight className=\"h-3 w-3 ml-1\" />\n              </Button>\n            </Link>\n          </CardHeader>\n          <CardContent className=\"flex-1 flex flex-col\">\n            {isLoadingScans ? (\n              <div className=\"space-y-2\">\n                <Skeleton className=\"h-4 w-32\" />\n                <Skeleton className=\"h-4 w-48\" />\n              </div>\n            ) : totalScheduledScans === 0 ? (\n              <div className=\"flex-1 flex flex-col items-center justify-center\">\n                <Clock className=\"h-8 w-8 text-muted-foreground/50 mb-2\" />\n                <p className=\"text-sm text-muted-foreground\">{t(\"scheduledScans.empty\")}</p>\n                <Link href={`/target/${targetId}/settings/`}>\n                  <Button variant=\"link\" size=\"sm\" className=\"mt-1\">\n                    {t(\"scheduledScans.createFirst\")}\n                  </Button>\n                </Link>\n              </div>\n            ) : (\n              <div className=\"space-y-3\">\n                {/* Stats row */}\n                <div className=\"flex items-center gap-4 text-sm\">\n                  <div>\n                    <span className=\"text-muted-foreground\">{t(\"scheduledScans.configured\")}: </span>\n                    <span className=\"font-medium\">{totalScheduledScans}</span>\n                  </div>\n                  <div>\n                    <span className=\"text-muted-foreground\">{t(\"scheduledScans.enabled\")}: </span>\n                    <span className=\"font-medium text-green-600\">{enabledScans.length}</span>\n                  </div>\n                </div>\n                \n                {/* Next execution */}\n                {nextExecution && (\n                  <div className=\"text-sm\">\n                    <span className=\"text-muted-foreground\">{t(\"scheduledScans.nextRun\")}: </span>\n                    <span className=\"font-medium\">{formatShortDate(nextExecution.nextRunTime)}</span>\n                  </div>\n                )}\n\n                {/* Task list - max 2 items */}\n                <div className=\"space-y-2 pt-2 border-t\">\n                  {scheduledScans.slice(0, 2).map((scan) => (\n                    <div key={scan.id} className=\"flex items-center gap-2 text-sm\">\n                      {scan.isEnabled ? (\n                        <CheckCircle2 className=\"h-3.5 w-3.5 text-green-500 shrink-0\" />\n                      ) : (\n                        <PauseCircle className=\"h-3.5 w-3.5 text-muted-foreground shrink-0\" />\n                      )}\n                      <span className={`truncate ${!scan.isEnabled ? 'text-muted-foreground' : ''}`}>\n                        {scan.name}\n                      </span>\n                    </div>\n                  ))}\n                  {totalScheduledScans > 2 && (\n                    <p className=\"text-xs text-muted-foreground\">\n                      {t(\"scheduledScans.more\", { count: totalScheduledScans - 2 })}\n                    </p>\n                  )}\n                </div>\n              </div>\n            )}\n          </CardContent>\n        </Card>\n\n        {/* Vulnerability Statistics Card */}\n        <Link href={`/target/${targetId}/vulnerabilities/`} className=\"block\">\n          <Card className=\"h-full hover:border-primary/50 transition-colors cursor-pointer flex flex-col\">\n            <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-3\">\n              <div className=\"flex items-center gap-2\">\n              <ShieldAlert className=\"h-4 w-4 text-muted-foreground\" />\n                <CardTitle className=\"text-sm font-medium\">{t(\"vulnerabilitiesTitle\")}</CardTitle>\n              </div>\n              <Button variant=\"ghost\" size=\"sm\" className=\"h-7 text-xs\">\n                {t(\"viewAll\")}\n                <ChevronRight className=\"h-3 w-3 ml-1\" />\n              </Button>\n            </CardHeader>\n            <CardContent className=\"space-y-4\">\n              {/* Total count */}\n              <div className=\"flex items-baseline gap-2\">\n                <span className=\"text-3xl font-bold\">{vulnSummary.total}</span>\n                <span className=\"text-sm text-muted-foreground\">{t(\"cards.vulnerabilities\")}</span>\n              </div>\n\n              {/* Severity breakdown */}\n              <div className=\"grid grid-cols-2 gap-3\">\n                <div className=\"flex items-center gap-2\">\n                  <div className=\"w-3 h-3 rounded-full bg-red-500\" />\n                  <span className=\"text-sm text-muted-foreground\">{t(\"severity.critical\")}</span>\n                  <span className=\"text-sm font-medium ml-auto\">{vulnSummary.critical}</span>\n                </div>\n                <div className=\"flex items-center gap-2\">\n                  <div className=\"w-3 h-3 rounded-full bg-orange-500\" />\n                  <span className=\"text-sm text-muted-foreground\">{t(\"severity.high\")}</span>\n                  <span className=\"text-sm font-medium ml-auto\">{vulnSummary.high}</span>\n                </div>\n                <div className=\"flex items-center gap-2\">\n                  <div className=\"w-3 h-3 rounded-full bg-yellow-500\" />\n                  <span className=\"text-sm text-muted-foreground\">{t(\"severity.medium\")}</span>\n                  <span className=\"text-sm font-medium ml-auto\">{vulnSummary.medium}</span>\n                </div>\n                <div className=\"flex items-center gap-2\">\n                  <div className=\"w-3 h-3 rounded-full bg-blue-500\" />\n                  <span className=\"text-sm text-muted-foreground\">{t(\"severity.low\")}</span>\n                  <span className=\"text-sm font-medium ml-auto\">{vulnSummary.low}</span>\n                </div>\n              </div>\n            </CardContent>\n          </Card>\n        </Link>\n      </div>\n\n      {/* Scan history */}\n      <div>\n        <h3 className=\"text-lg font-semibold mb-4\">{t(\"scanHistoryTitle\")}</h3>\n        <ScanHistoryList targetId={targetId} hideToolbar pageSize={5} hideTargetColumn pageSizeOptions={[5, 10, 20, 50, 100]} />\n      </div>\n\n      {/* Initiate Scan Dialog */}\n      <InitiateScanDialog\n        open={scanDialogOpen}\n        onOpenChange={setScanDialogOpen}\n        targetId={targetId}\n        targetName={target.name}\n      />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/target/target-settings.tsx",
    "content": "\"use client\"\n\nimport React, { useState, useEffect } from \"react\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport { AlertTriangle, Loader2, Ban, Clock } from \"lucide-react\"\nimport { Button } from \"@/components/ui/button\"\nimport { Textarea } from \"@/components/ui/textarea\"\nimport { Skeleton } from \"@/components/ui/skeleton\"\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from \"@/components/ui/card\"\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\"\nimport { useTargetBlacklist, useUpdateTargetBlacklist, useTarget } from \"@/hooks/use-targets\"\nimport { useScheduledScans, useToggleScheduledScan, useDeleteScheduledScan } from \"@/hooks/use-scheduled-scans\"\nimport { ScheduledScanDataTable } from \"@/components/scan/scheduled/scheduled-scan-data-table\"\nimport { createScheduledScanColumns } from \"@/components/scan/scheduled/scheduled-scan-columns\"\nimport { CreateScheduledScanDialog } from \"@/components/scan/scheduled/create-scheduled-scan-dialog\"\nimport { EditScheduledScanDialog } from \"@/components/scan/scheduled/edit-scheduled-scan-dialog\"\nimport { DataTableSkeleton } from \"@/components/ui/data-table-skeleton\"\nimport type { ScheduledScan } from \"@/types/scheduled-scan.types\"\n\ninterface TargetSettingsProps {\n  targetId: number\n}\n\n/**\n * Target settings component\n * Contains blacklist configuration and scheduled scans\n */\nexport function TargetSettings({ targetId }: TargetSettingsProps) {\n  const t = useTranslations(\"pages.targetDetail.settings\")\n  const tColumns = useTranslations(\"columns\")\n  const tCommon = useTranslations(\"common\")\n  const tScan = useTranslations(\"scan\")\n  const tConfirm = useTranslations(\"common.confirm\")\n  const locale = useLocale()\n  \n  const [blacklistText, setBlacklistText] = useState(\"\")\n  const [hasChanges, setHasChanges] = useState(false)\n\n  // Scheduled scan states\n  const [createDialogOpen, setCreateDialogOpen] = useState(false)\n  const [editDialogOpen, setEditDialogOpen] = useState(false)\n  const [deleteDialogOpen, setDeleteDialogOpen] = useState(false)\n  const [editingScheduledScan, setEditingScheduledScan] = useState<ScheduledScan | null>(null)\n  const [deletingScheduledScan, setDeletingScheduledScan] = useState<ScheduledScan | null>(null)\n\n  // Pagination state\n  const [page, setPage] = useState(1)\n  const [pageSize, setPageSize] = useState(10)\n  const [searchQuery, setSearchQuery] = useState(\"\")\n  const [isSearching, setIsSearching] = useState(false)\n\n  // Fetch target data for preset name\n  const { data: target } = useTarget(targetId)\n\n  // Fetch blacklist data\n  const { data, isLoading, error } = useTargetBlacklist(targetId)\n  const updateBlacklist = useUpdateTargetBlacklist()\n\n  // Fetch scheduled scans for this target\n  const { \n    data: scheduledScansData, \n    isLoading: isLoadingScans,\n    isFetching,\n    refetch \n  } = useScheduledScans({ \n    targetId, \n    page,\n    pageSize,\n    search: searchQuery || undefined\n  })\n  const { mutate: toggleScheduledScan } = useToggleScheduledScan()\n  const { mutate: deleteScheduledScan } = useDeleteScheduledScan()\n\n  const scheduledScans = scheduledScansData?.results || []\n  const total = scheduledScansData?.total || 0\n  const totalPages = scheduledScansData?.totalPages || 1\n\n  // Build translation object for columns\n  const translations = React.useMemo(() => ({\n    columns: {\n      taskName: tColumns(\"scheduledScan.taskName\"),\n      scanEngine: tColumns(\"scheduledScan.scanEngine\"),\n      cronExpression: tColumns(\"scheduledScan.cronExpression\"),\n      scope: tColumns(\"scheduledScan.scope\"),\n      status: tColumns(\"common.status\"),\n      nextRun: tColumns(\"scheduledScan.nextRun\"),\n      runCount: tColumns(\"scheduledScan.runCount\"),\n      lastRun: tColumns(\"scheduledScan.lastRun\"),\n    },\n    actions: {\n      editTask: tScan(\"editTask\"),\n      delete: tCommon(\"actions.delete\"),\n      openMenu: tCommon(\"actions.openMenu\"),\n    },\n    status: {\n      enabled: tCommon(\"status.enabled\"),\n      disabled: tCommon(\"status.disabled\"),\n    },\n    cron: {\n      everyMinute: tScan(\"cron.everyMinute\"),\n      everyNMinutes: tScan.raw(\"cron.everyNMinutes\") as string,\n      everyHour: tScan.raw(\"cron.everyHour\") as string,\n      everyNHours: tScan.raw(\"cron.everyNHours\") as string,\n      everyDay: tScan.raw(\"cron.everyDay\") as string,\n      everyWeek: tScan.raw(\"cron.everyWeek\") as string,\n      everyMonth: tScan.raw(\"cron.everyMonth\") as string,\n      weekdays: tScan.raw(\"cron.weekdays\") as string[],\n    },\n  }), [tColumns, tCommon, tScan])\n\n  // Initialize text when data loads\n  useEffect(() => {\n    if (data?.patterns) {\n      setBlacklistText(data.patterns.join(\"\\n\"))\n      setHasChanges(false)\n    }\n  }, [data])\n\n  // Reset search state when request completes\n  useEffect(() => {\n    if (!isFetching && isSearching) {\n      setIsSearching(false)\n    }\n  }, [isFetching, isSearching])\n\n  // Handle text change\n  const handleTextChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n    setBlacklistText(e.target.value)\n    setHasChanges(true)\n  }\n\n  // Handle save\n  const handleSave = () => {\n    const patterns = blacklistText\n      .split(\"\\n\")\n      .map((line) => line.trim())\n      .filter((line) => line.length > 0)\n\n    updateBlacklist.mutate(\n      { targetId, patterns },\n      {\n        onSuccess: () => {\n          setHasChanges(false)\n        },\n      }\n    )\n  }\n\n  // Format date\n  const formatDate = React.useCallback((dateString: string) => {\n    const date = new Date(dateString)\n    return date.toLocaleString(locale === \"zh\" ? \"zh-CN\" : \"en-US\", {\n      year: \"numeric\",\n      month: \"2-digit\",\n      day: \"2-digit\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n    })\n  }, [locale])\n\n  // Edit task\n  const handleEdit = React.useCallback((scan: ScheduledScan) => {\n    setEditingScheduledScan(scan)\n    setEditDialogOpen(true)\n  }, [])\n\n  // Delete task (open confirmation dialog)\n  const handleDelete = React.useCallback((scan: ScheduledScan) => {\n    setDeletingScheduledScan(scan)\n    setDeleteDialogOpen(true)\n  }, [])\n\n  // Confirm delete task\n  const confirmDelete = React.useCallback(() => {\n    if (deletingScheduledScan) {\n      deleteScheduledScan(deletingScheduledScan.id)\n      setDeleteDialogOpen(false)\n      setDeletingScheduledScan(null)\n    }\n  }, [deletingScheduledScan, deleteScheduledScan])\n\n  // Toggle task enabled status\n  const handleToggleStatus = React.useCallback((scan: ScheduledScan, enabled: boolean) => {\n    toggleScheduledScan({ id: scan.id, isEnabled: enabled })\n  }, [toggleScheduledScan])\n\n  // Search handler\n  const handleSearchChange = (value: string) => {\n    setIsSearching(true)\n    setSearchQuery(value)\n    setPage(1)\n  }\n\n  // Page change handler\n  const handlePageChange = React.useCallback((newPage: number) => {\n    setPage(newPage)\n  }, [])\n\n  // Page size change handler\n  const handlePageSizeChange = React.useCallback((newPageSize: number) => {\n    setPageSize(newPageSize)\n    setPage(1)\n  }, [])\n\n  // Add new task\n  const handleAddNew = React.useCallback(() => {\n    setCreateDialogOpen(true)\n  }, [])\n\n  // Create column definition (hide scope column since we're filtering by target)\n  const columns = React.useMemo(() => {\n    const allColumns = createScheduledScanColumns({\n      formatDate,\n      handleEdit,\n      handleDelete,\n      handleToggleStatus,\n      t: translations,\n    })\n    // Filter out the scope column since all scans are for this target\n    return allColumns.filter(col => (col as { accessorKey?: string }).accessorKey !== 'scanMode')\n  }, [formatDate, handleEdit, handleDelete, handleToggleStatus, translations])\n\n  if (isLoading) {\n    return (\n      <div className=\"space-y-6\">\n        <div className=\"space-y-2\">\n          <Skeleton className=\"h-6 w-32\" />\n          <Skeleton className=\"h-4 w-96\" />\n        </div>\n        <Skeleton className=\"h-48 w-full\" />\n      </div>\n    )\n  }\n\n  if (error) {\n    return (\n      <div className=\"flex flex-col items-center justify-center py-12\">\n        <AlertTriangle className=\"h-10 w-10 text-destructive mb-4\" />\n        <p className=\"text-muted-foreground\">{t(\"loadError\")}</p>\n      </div>\n    )\n  }\n\n  return (\n    <div className=\"space-y-6\">\n      {/* Blacklist section */}\n      <Card>\n        <CardHeader>\n          <div className=\"flex items-center gap-2\">\n            <Ban className=\"h-5 w-5 text-muted-foreground\" />\n            <CardTitle>{t(\"blacklist.title\")}</CardTitle>\n          </div>\n          <CardDescription>{t(\"blacklist.description\")}</CardDescription>\n        </CardHeader>\n        <CardContent className=\"space-y-4\">\n          {/* Rules hint */}\n          <div className=\"flex flex-wrap items-center gap-x-4 gap-y-2 text-sm text-muted-foreground\">\n            <span className=\"font-medium text-foreground\">{t(\"blacklist.rulesTitle\")}:</span>\n            <span><code className=\"bg-muted px-1.5 py-0.5 rounded text-xs\">*.gov</code> {t(\"blacklist.rules.domainShort\")}</span>\n            <span><code className=\"bg-muted px-1.5 py-0.5 rounded text-xs\">*cdn*</code> {t(\"blacklist.rules.keywordShort\")}</span>\n            <span><code className=\"bg-muted px-1.5 py-0.5 rounded text-xs\">192.168.1.1</code> {t(\"blacklist.rules.ipShort\")}</span>\n            <span><code className=\"bg-muted px-1.5 py-0.5 rounded text-xs\">10.0.0.0/8</code> {t(\"blacklist.rules.cidrShort\")}</span>\n          </div>\n\n          {/* Input */}\n          <Textarea\n            value={blacklistText}\n            onChange={handleTextChange}\n            placeholder={t(\"blacklist.placeholder\")}\n            className=\"min-h-[240px] font-mono text-sm\"\n          />\n\n          {/* Save button */}\n          <div className=\"flex justify-end\">\n            <Button\n              onClick={handleSave}\n              disabled={!hasChanges || updateBlacklist.isPending}\n            >\n              {updateBlacklist.isPending && (\n                <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n              )}\n              {t(\"blacklist.save\")}\n            </Button>\n          </div>\n        </CardContent>\n      </Card>\n\n      {/* Scheduled Scans section */}\n      <Card>\n        <CardHeader>\n          <div className=\"flex items-center gap-2\">\n            <Clock className=\"h-5 w-5 text-muted-foreground\" />\n            <CardTitle>{t(\"scheduledScans.title\")}</CardTitle>\n          </div>\n          <CardDescription>{t(\"scheduledScans.description\")}</CardDescription>\n        </CardHeader>\n        <CardContent>\n          {isLoadingScans ? (\n            <DataTableSkeleton rows={3} columns={6} toolbarButtonCount={1} />\n          ) : (\n            <ScheduledScanDataTable\n              data={scheduledScans}\n              columns={columns}\n              onAddNew={handleAddNew}\n              searchPlaceholder={tScan(\"scheduled.searchPlaceholder\")}\n              searchValue={searchQuery}\n              onSearch={handleSearchChange}\n              isSearching={isSearching}\n              addButtonText={tScan(\"scheduled.createTitle\")}\n              page={page}\n              pageSize={pageSize}\n              total={total}\n              totalPages={totalPages}\n              onPageChange={handlePageChange}\n              onPageSizeChange={handlePageSizeChange}\n            />\n          )}\n        </CardContent>\n      </Card>\n\n      {/* Create Dialog */}\n      <CreateScheduledScanDialog\n        open={createDialogOpen}\n        onOpenChange={setCreateDialogOpen}\n        presetTargetId={targetId}\n        presetTargetName={target?.name}\n        onSuccess={() => refetch()}\n      />\n\n      {/* Edit Dialog */}\n      <EditScheduledScanDialog\n        open={editDialogOpen}\n        onOpenChange={setEditDialogOpen}\n        scheduledScan={editingScheduledScan}\n        onSuccess={() => refetch()}\n      />\n\n      {/* Delete Confirmation Dialog */}\n      <AlertDialog open={deleteDialogOpen} onOpenChange={setDeleteDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{tConfirm(\"deleteTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {tConfirm(\"deleteScheduledScanMessage\", { name: deletingScheduledScan?.name ?? \"\" })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"actions.cancel\")}</AlertDialogCancel>\n            <AlertDialogAction \n              onClick={confirmDelete} \n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n            >\n              {tCommon(\"actions.delete\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/target/targets-data-table.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { IconSearch, IconLoader2 } from \"@tabler/icons-react\"\nimport { useTranslations } from \"next-intl\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { UnifiedDataTable } from \"@/components/ui/data-table\"\nimport type { ColumnDef } from \"@tanstack/react-table\"\nimport type { Target } from \"@/types/target.types\"\nimport type { PaginationInfo } from \"@/types/common.types\"\n\ninterface TargetsDataTableProps {\n  data: Target[]\n  columns: ColumnDef<Target>[]\n  onAddNew?: () => void\n  onAddHover?: () => void\n  onBulkDelete?: () => void\n  onSelectionChange?: (selectedRows: Target[]) => void\n  searchPlaceholder?: string\n  searchValue?: string\n  onSearch?: (value: string) => void\n  isSearching?: boolean\n  addButtonText?: string\n  // Pagination related props\n  pagination?: { pageIndex: number, pageSize: number }\n  onPaginationChange?: (pagination: { pageIndex: number, pageSize: number }) => void\n  totalCount?: number\n  manualPagination?: boolean\n}\n\n/**\n * Targets data table component (target version)\n * Uses UnifiedDataTable unified component\n */\nexport function TargetsDataTable({\n  data = [],\n  columns,\n  onAddNew,\n  onAddHover,\n  onBulkDelete,\n  onSelectionChange,\n  searchPlaceholder,\n  searchValue,\n  onSearch,\n  isSearching = false,\n  addButtonText,\n  pagination: externalPagination,\n  onPaginationChange,\n  totalCount,\n  manualPagination = false,\n}: TargetsDataTableProps) {\n  const t = useTranslations(\"common.status\")\n  const tActions = useTranslations(\"common.actions\")\n  const tTarget = useTranslations(\"target\")\n  \n  // Internal pagination state\n  const [internalPagination, setInternalPagination] = React.useState<{ pageIndex: number, pageSize: number }>({\n    pageIndex: 0,\n    pageSize: 10,\n  })\n\n  // Local search input state\n  const [localSearchValue, setLocalSearchValue] = React.useState(searchValue ?? \"\")\n  \n  React.useEffect(() => {\n    setLocalSearchValue(searchValue ?? \"\")\n  }, [searchValue])\n\n  const handleSearchSubmit = () => {\n    if (onSearch) {\n      onSearch(localSearchValue)\n    }\n  }\n\n  const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n    if (e.key === 'Enter') {\n      handleSearchSubmit()\n    }\n  }\n\n  const pagination = externalPagination || internalPagination\n\n  // Handle pagination state change\n  const handlePaginationChange = (newPagination: { pageIndex: number, pageSize: number }) => {\n    if (onPaginationChange) {\n      onPaginationChange(newPagination)\n    } else {\n      setInternalPagination(newPagination)\n    }\n  }\n\n  // Build paginationInfo\n  const paginationInfo: PaginationInfo | undefined = manualPagination && totalCount ? {\n    total: totalCount,\n    totalPages: Math.ceil(totalCount / pagination.pageSize),\n    page: pagination.pageIndex + 1,\n    pageSize: pagination.pageSize,\n  } : undefined\n\n  return (\n    <UnifiedDataTable\n      data={data}\n      columns={columns}\n      getRowId={(row) => String(row.id)}\n      // Pagination\n      pagination={pagination}\n      setPagination={onPaginationChange ? undefined : setInternalPagination}\n      paginationInfo={paginationInfo}\n      onPaginationChange={handlePaginationChange}\n      // Selection\n      onSelectionChange={onSelectionChange}\n      // Bulk operations\n      onBulkDelete={onBulkDelete}\n      bulkDeleteLabel={tActions(\"delete\")}\n      // Add button\n      onAddNew={onAddNew}\n      onAddHover={onAddHover}\n      addButtonLabel={addButtonText || tTarget(\"addTarget\")}\n      showAddButton={!!onAddNew}\n      // Empty state\n      emptyMessage={t(\"noData\")}\n      // Custom toolbar\n      toolbarLeft={\n        <div className=\"flex items-center space-x-2\">\n          <Input\n            placeholder={searchPlaceholder || tTarget(\"title\")}\n            value={localSearchValue}\n            onChange={(e) => setLocalSearchValue(e.target.value)}\n            onKeyDown={handleKeyDown}\n            className=\"h-8 max-w-sm\"\n          />\n          <Button variant=\"outline\" size=\"sm\" onClick={handleSearchSubmit} disabled={isSearching}>\n            {isSearching ? (\n              <IconLoader2 className=\"h-4 w-4 animate-spin\" />\n            ) : (\n              <IconSearch className=\"h-4 w-4\" />\n            )}\n          </Button>\n        </div>\n      }\n    />\n  )\n}\n"
  },
  {
    "path": "frontend/components/theme-toggle.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { flushSync } from \"react-dom\"\nimport { Moon, Sun } from \"lucide-react\"\nimport { useTheme } from \"next-themes\"\nimport { useTranslations } from \"next-intl\"\nimport { cn } from \"@/lib/utils\"\n\n/**\n * Theme toggle component - Sliding switch style + circular expansion animation\n */\nexport function ThemeToggle() {\n  const { setTheme, resolvedTheme } = useTheme()\n  const [mounted, setMounted] = React.useState(false)\n  const [isToggled, setIsToggled] = React.useState(false)\n  const buttonRef = React.useRef<HTMLButtonElement>(null)\n  const tCommon = useTranslations(\"common\")\n\n  React.useEffect(() => {\n    setMounted(true)\n  }, [])\n\n  React.useEffect(() => {\n    if (mounted) {\n      setIsToggled(resolvedTheme === \"dark\")\n    }\n  }, [resolvedTheme, mounted])\n\n  const handleToggle = async () => {\n    const newIsDark = !isToggled\n    const newTheme = newIsDark ? \"dark\" : \"light\"\n\n    // Don't support View Transitions or user prefers reduced motion, switch directly\n    if (\n      !buttonRef.current ||\n      !('startViewTransition' in document) ||\n      window.matchMedia('(prefers-reduced-motion: reduce)').matches\n    ) {\n      setIsToggled(newIsDark)\n      setTheme(newTheme)\n      return\n    }\n\n    // 1. First let the slider slide (without triggering theme switch)\n    setIsToggled(newIsDark)\n\n    // 2. Wait for slider animation to complete (100ms)\n    await new Promise(r => setTimeout(r, 100))\n\n    // Get button position\n    const { top, left, width, height } = buttonRef.current.getBoundingClientRect()\n    const x = left + width / 2\n    const y = top + height / 2\n    const right = window.innerWidth - left\n    const bottom = window.innerHeight - top\n    const maxRadius = Math.hypot(Math.max(left, right), Math.max(top, bottom))\n\n    // Disable default View Transition animation\n    const style = document.createElement('style')\n    style.textContent = `\n      ::view-transition-old(root),\n      ::view-transition-new(root) {\n        animation: none;\n        mix-blend-mode: normal;\n      }\n    `\n    document.head.appendChild(style)\n\n    // 3. After slider finishes, start View Transition to switch theme\n    const transition = (document as any).startViewTransition(() => {\n      flushSync(() => {\n        setTheme(newTheme)\n      })\n    })\n\n    await transition.ready\n\n    document.documentElement.animate(\n      {\n        clipPath: [\n          `circle(0px at ${x}px ${y}px)`,\n          `circle(${maxRadius}px at ${x}px ${y}px)`,\n        ],\n      },\n      {\n        duration: 500,\n        easing: 'ease-out',\n        pseudoElement: '::view-transition-new(root)',\n      }\n    )\n\n    transition.finished.then(() => {\n      style.remove()\n    })\n  }\n\n  if (!mounted) {\n    return (\n      <div className=\"w-11 h-6 rounded-full bg-gray-200 dark:bg-primary\" />\n    )\n  }\n\n  return (\n    <button\n      ref={buttonRef}\n      onClick={handleToggle}\n      className={cn(\n        \"relative w-11 h-6 rounded-full transition-colors duration-300 focus:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n        isToggled ? \"bg-primary\" : \"bg-gray-200\"\n      )}\n      aria-label={isToggled ? tCommon(\"theme.switchToLight\") : tCommon(\"theme.switchToDark\")}\n    >\n      <div\n        className={cn(\n          \"absolute top-0.5 left-0.5 w-5 h-5 rounded-full shadow-md flex items-center justify-center\",\n          \"transition-all ease-in-out\",\n          isToggled ? \"translate-x-5 bg-primary-foreground\" : \"translate-x-0 bg-white\"\n        )}\n        style={{ transitionDuration: \"100ms\" }}\n      >\n        <Sun \n          className={cn(\n            \"h-3 w-3 absolute transition-all duration-200 text-primary\",\n            isToggled ? \"opacity-0 rotate-90 scale-0\" : \"opacity-100 rotate-0 scale-100\"\n          )} \n        />\n        <Moon \n          className={cn(\n            \"h-3 w-3 absolute transition-all duration-200 text-primary\",\n            isToggled ? \"opacity-100 rotate-0 scale-100\" : \"opacity-0 -rotate-90 scale-0\"\n          )} \n        />\n      </div>\n    </button>\n  )\n}\n"
  },
  {
    "path": "frontend/components/tools/commands/commands-columns.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { ColumnDef } from \"@tanstack/react-table\"\nimport { Command } from \"@/types/command.types\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuSeparator,\n  DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\"\nimport { MoreHorizontal, Eye, Trash2, Copy } from \"lucide-react\"\nimport { DataTableColumnHeader } from \"@/components/ui/data-table/column-header\"\nimport { ExpandableCell } from \"@/components/ui/data-table/expandable-cell\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { toast } from \"sonner\"\n\n// Translation type definitions\nexport interface CommandTranslations {\n  columns: {\n    name: string\n    tool: string\n    commandTemplate: string\n    description: string\n    updatedAt: string\n  }\n  actions: {\n    selectAll: string\n    selectRow: string\n    openMenu: string\n    copyTemplate: string\n    viewDetails: string\n    delete: string\n  }\n  messages: {\n    copied: string\n    copyFailed: string\n  }\n}\n\ninterface CreateColumnsProps {\n  formatDate: (date: string) => string\n  t: CommandTranslations\n}\n\n/**\n * Create command table column definitions\n */\nexport function createCommandColumns({\n  formatDate,\n  t,\n}: CreateColumnsProps): ColumnDef<Command>[] {\n  return [\n    {\n      id: \"select\",\n      size: 40,\n      minSize: 40,\n      maxSize: 40,\n      enableResizing: false,\n      header: ({ table }) => (\n        <Checkbox\n          checked={\n            table.getIsAllPageRowsSelected() ||\n            (table.getIsSomePageRowsSelected() && \"indeterminate\")\n          }\n          onCheckedChange={(value) => table.toggleAllPageRowsSelected(!!value)}\n          aria-label={t.actions.selectAll}\n        />\n      ),\n      cell: ({ row }) => (\n        <Checkbox\n          checked={row.getIsSelected()}\n          onCheckedChange={(value) => row.toggleSelected(!!value)}\n          aria-label={t.actions.selectRow}\n        />\n      ),\n      enableSorting: false,\n      enableHiding: false,\n    },\n    {\n      accessorKey: \"displayName\",\n      size: 200,\n      minSize: 150,\n      meta: { title: t.columns.name },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.name} />\n      ),\n      cell: ({ row }) => {\n        const displayName = row.getValue(\"displayName\") as string\n        const name = row.original.name\n        return (\n          <div className=\"flex flex-col flex-1 min-w-0\">\n            <span className=\"text-sm font-medium break-all leading-relaxed whitespace-normal\">\n              {displayName || name}\n            </span>\n            {displayName && name && displayName !== name && (\n              <span className=\"text-xs text-muted-foreground font-mono break-all leading-relaxed whitespace-normal\">\n                {name}\n              </span>\n            )}\n          </div>\n        )\n      },\n    },\n    {\n      accessorKey: \"tool\",\n      size: 120,\n      minSize: 80,\n      meta: { title: t.columns.tool },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.tool} />\n      ),\n      cell: ({ row }) => {\n        const tool = row.original.tool\n        return (\n          <div className=\"flex items-center gap-2\">\n            {tool ? (\n              <Badge variant=\"outline\">{tool.name}</Badge>\n            ) : (\n              <span className=\"text-muted-foreground text-sm\">-</span>\n            )}\n          </div>\n        )\n      },\n    },\n    {\n      accessorKey: \"commandTemplate\",\n      size: 350,\n      minSize: 250,\n      meta: { title: t.columns.commandTemplate },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.commandTemplate} />\n      ),\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"commandTemplate\")} variant=\"mono\" />\n      ),\n    },\n    {\n      accessorKey: \"description\",\n      size: 250,\n      minSize: 150,\n      meta: { title: t.columns.description },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.description} />\n      ),\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"description\")} variant=\"muted\" />\n      ),\n    },\n    {\n      accessorKey: \"updatedAt\",\n      size: 150,\n      minSize: 120,\n      meta: { title: t.columns.updatedAt },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.updatedAt} />\n      ),\n      cell: ({ row }) => (\n        <div className=\"text-sm text-muted-foreground\">\n          {formatDate(row.getValue(\"updatedAt\"))}\n        </div>\n      ),\n    },\n    {\n      id: \"actions\",\n      size: 60,\n      minSize: 60,\n      maxSize: 60,\n      enableResizing: false,\n      cell: ({ row }) => {\n        const command = row.original\n\n        return (\n          <DropdownMenu>\n            <DropdownMenuTrigger asChild>\n              <Button\n                variant=\"ghost\"\n                className=\"flex h-8 w-8 p-0 data-[state=open]:bg-muted\"\n              >\n                <MoreHorizontal />\n                <span className=\"sr-only\">{t.actions.openMenu}</span>\n              </Button>\n            </DropdownMenuTrigger>\n            <DropdownMenuContent align=\"end\">\n              <DropdownMenuItem\n                onClick={async () => {\n                  try {\n                    await navigator.clipboard.writeText(command.commandTemplate)\n                    toast.success(t.messages.copied)\n                  } catch {\n                    toast.error(t.messages.copyFailed)\n                  }\n                }}\n              >\n                <Copy />\n                {t.actions.copyTemplate}\n              </DropdownMenuItem>\n              <DropdownMenuSeparator />\n              <DropdownMenuItem>\n                <Eye />\n                {t.actions.viewDetails}\n              </DropdownMenuItem>\n              <DropdownMenuItem className=\"text-destructive focus:text-destructive\">\n                <Trash2 />\n                {t.actions.delete}\n              </DropdownMenuItem>\n            </DropdownMenuContent>\n          </DropdownMenu>\n        )\n      },\n      enableSorting: false,\n      enableHiding: false,\n    },\n  ]\n}\n"
  },
  {
    "path": "frontend/components/tools/commands/commands-data-table.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport type { ColumnDef } from \"@tanstack/react-table\"\nimport { useTranslations } from \"next-intl\"\nimport { Input } from \"@/components/ui/input\"\nimport { UnifiedDataTable } from \"@/components/ui/data-table\"\n\ninterface CommandsDataTableProps<TData extends { id: number }> {\n  columns: ColumnDef<TData, any>[]\n  data: TData[]\n  onBulkDelete?: (selectedIds: number[]) => void\n  onAdd?: () => void\n}\n\nexport function CommandsDataTable<TData extends { id: number }>({\n  columns,\n  data,\n  onBulkDelete,\n  onAdd,\n}: CommandsDataTableProps<TData>) {\n  const t = useTranslations(\"tools.commands\")\n  const tCommon = useTranslations(\"common\")\n  \n  // Local search state\n  const [searchValue, setSearchValue] = React.useState(\"\")\n  const [selectedRows, setSelectedRows] = React.useState<TData[]>([])\n\n  // Filter data (local filtering)\n  const filteredData = React.useMemo(() => {\n    if (!searchValue) return data\n    return data.filter((item) => {\n      const displayName = (item as any).displayName || \"\"\n      return displayName.toLowerCase().includes(searchValue.toLowerCase())\n    })\n  }, [data, searchValue])\n\n  // Handle bulk delete\n  const handleBulkDelete = () => {\n    if (onBulkDelete && selectedRows.length > 0) {\n      const selectedIds = selectedRows.map((row) => row.id)\n      onBulkDelete(selectedIds)\n    }\n  }\n\n  return (\n    <UnifiedDataTable\n      data={filteredData}\n      columns={columns}\n      getRowId={(row) => String(row.id)}\n      onSelectionChange={setSelectedRows}\n      onBulkDelete={onBulkDelete ? handleBulkDelete : undefined}\n      onAddNew={onAdd}\n      addButtonLabel={tCommon(\"actions.add\")}\n      bulkDeleteLabel={tCommon(\"actions.delete\")}\n      emptyMessage={tCommon(\"status.noData\")}\n      toolbarLeft={\n        <Input\n          placeholder={t(\"searchPlaceholder\")}\n          value={searchValue}\n          onChange={(e) => setSearchValue(e.target.value)}\n          className=\"max-w-sm h-8\"\n        />\n      }\n    />\n  )\n}\n"
  },
  {
    "path": "frontend/components/tools/commands/index.ts",
    "content": "/**\n * Tool Commands Components - Unified exports\n */\nexport { CommandsDataTable } from './commands-data-table'\nexport { createCommandColumns } from './commands-columns'\nexport type { CommandTranslations } from './commands-columns'\n"
  },
  {
    "path": "frontend/components/tools/config/add-custom-tool-dialog.tsx",
    "content": "\"use client\"\n\nimport React, { useState } from \"react\"\nimport { Wrench } from \"lucide-react\"\nimport { IconPlus } from \"@tabler/icons-react\"\nimport { useTranslations } from \"next-intl\"\n\n// Import UI components\nimport { Button } from \"@/components/ui/button\"\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from \"@/components/ui/dialog\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { Textarea } from \"@/components/ui/textarea\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { LoadingSpinner } from \"@/components/loading-spinner\"\nimport { IconX } from \"@tabler/icons-react\"\nimport { CategoryNameMap, type Tool } from \"@/types/tool.types\"\nimport { useCreateTool, useUpdateTool } from \"@/hooks/use-tools\"\n\n// Component props type definition\ninterface AddCustomToolDialogProps {\n  tool?: Tool                    // Tool data to edit (optional, edit mode when provided)\n  onAdd?: (tool: Tool) => void   // Callback function on successful add (optional)\n  open?: boolean                 // External control for dialog open state\n  onOpenChange?: (open: boolean) => void  // External control callback for dialog open state\n}\n\n/**\n * Add/Edit custom tool dialog component\n */\nexport function AddCustomToolDialog({ \n  tool,\n  onAdd, \n  open: externalOpen, \n  onOpenChange: externalOnOpenChange \n}: AddCustomToolDialogProps) {\n  const t = useTranslations(\"tools.config\")\n  \n  // Determine if in edit mode or add mode\n  const isEditMode = !!tool\n  \n  // Dialog open state - supports external control\n  const [internalOpen, setInternalOpen] = useState(false)\n  const open = externalOpen !== undefined ? externalOpen : internalOpen\n  const setOpen = externalOnOpenChange || setInternalOpen\n  \n  // Form data state - initialize with tool data if in edit mode\n  const [formData, setFormData] = useState({\n    name: tool?.name || \"\",\n    description: tool?.description || \"\",\n    directory: tool?.directory || \"\",\n    categoryNames: tool?.categoryNames || [] as string[],\n  })\n\n  // Use predefined category list\n  const availableCategories = Object.keys(CategoryNameMap)\n\n  // Use React Query create and update tool mutations\n  const createTool = useCreateTool()\n  const updateTool = useUpdateTool()\n\n  // Update form data when tool changes\n  React.useEffect(() => {\n    if (tool) {\n      setFormData({\n        name: tool.name || \"\",\n        description: tool.description || \"\",\n        directory: tool.directory || \"\",\n        categoryNames: tool.categoryNames || [],\n      })\n    }\n  }, [tool])\n\n  // Handle form submission\n  const handleSubmit = async (e: React.FormEvent) => {\n    e.preventDefault()\n\n    // Form validation\n    if (!formData.name.trim() || !formData.directory.trim()) {\n      return\n    }\n\n    const toolData = {\n      name: formData.name.trim(),\n      type: 'custom' as const, // Custom tool\n      description: formData.description.trim() || undefined,\n      directory: formData.directory.trim(),\n      categoryNames: formData.categoryNames.length > 0 ? formData.categoryNames : undefined,\n    }\n\n    const onSuccessCallback = (response: { tool?: Tool }) => {\n      // Reset form\n      setFormData({\n        name: \"\",\n        description: \"\",\n        directory: \"\",\n        categoryNames: [],\n      })\n      \n      // Close dialog\n      setOpen(false)\n      \n      // Call external callback (if provided)\n      if (onAdd && response?.tool) {\n        onAdd(response.tool)\n      }\n    }\n\n    // Choose create or update based on mode\n    if (isEditMode && tool?.id) {\n      // Edit mode: call update API\n      updateTool.mutate(\n        { id: tool.id, data: toolData },\n        { onSuccess: onSuccessCallback }\n      )\n    } else {\n      // Create mode: call create API\n      createTool.mutate(toolData, { onSuccess: onSuccessCallback })\n    }\n  }\n\n  // Handle dialog close - reset form\n  const handleOpenChange = (newOpen: boolean) => {\n    // Don't allow closing while submitting\n    if (!createTool.isPending && !updateTool.isPending) {\n      setOpen(newOpen)\n      if (!newOpen) {\n        // Reset form when dialog closes\n        setFormData({\n          name: \"\",\n          description: \"\",\n          directory: \"\",\n          categoryNames: [],\n        })\n      }\n    }\n  }\n\n  // Handle category tag toggle\n  const handleCategoryToggle = (categoryName: string) => {\n    setFormData((prev) => {\n      const isSelected = prev.categoryNames.includes(categoryName)\n      return {\n        ...prev,\n        categoryNames: isSelected\n          ? prev.categoryNames.filter(c => c !== categoryName)\n          : [...prev.categoryNames, categoryName]\n      }\n    })\n  }\n\n  // Remove category tag\n  const handleCategoryRemove = (categoryName: string) => {\n    setFormData((prev) => ({\n      ...prev,\n      categoryNames: prev.categoryNames.filter(c => c !== categoryName)\n    }))\n  }\n\n  // Form validation - check required fields\n  const isFormValid = \n    formData.name.trim().length > 0 &&\n    formData.directory.trim().length > 0\n\n  return (\n    <Dialog open={open} onOpenChange={handleOpenChange}>\n      {/* Trigger button - only show when not externally controlled */}\n      {externalOpen === undefined && (\n        <DialogTrigger asChild>\n          <Button>\n            <IconPlus className=\"h-5 w-5\" />\n            {t(\"addTool\")}\n          </Button>\n        </DialogTrigger>\n      )}\n      \n      {/* Dialog content */}\n      <DialogContent className=\"sm:max-w-[500px]\">\n        <DialogHeader>\n          <DialogTitle className=\"flex items-center space-x-2\">\n            <Wrench />\n            <span>{isEditMode ? t(\"editCustomTool\") : t(\"addCustomTool\")}</span>\n          </DialogTitle>\n          <DialogDescription>\n            {t(\"customDialogDesc\")}\n          </DialogDescription>\n        </DialogHeader>\n        \n        {/* Form */}\n        <form onSubmit={handleSubmit}>\n          <div className=\"grid gap-6 py-4\">\n            {/* Tool name */}\n            <div className=\"grid gap-2\">\n              <Label htmlFor=\"name\">\n                {t(\"toolName\")} <span className=\"text-red-500\">*</span>\n              </Label>\n              <Input\n                id=\"name\"\n                placeholder={t(\"customToolNamePlaceholder\")}\n                value={formData.name}\n                onChange={(e) => setFormData({ ...formData, name: e.target.value })}\n                disabled={createTool.isPending || updateTool.isPending}\n                required\n              />\n            </div>\n\n            {/* Tool description */}\n            <div className=\"grid gap-2\">\n              <Label htmlFor=\"description\">{t(\"toolDesc\")}</Label>\n              <Textarea\n                id=\"description\"\n                placeholder={t(\"customToolDescPlaceholder\")}\n                value={formData.description}\n                onChange={(e) => setFormData({ ...formData, description: e.target.value })}\n                disabled={createTool.isPending || updateTool.isPending}\n                rows={3}\n              />\n            </div>\n\n            {/* Tool path */}\n            <div className=\"grid gap-2\">\n              <Label htmlFor=\"directory\">\n                {t(\"toolPath\")} <span className=\"text-red-500\">*</span>\n              </Label>\n              <Input\n                id=\"directory\"\n                placeholder={t(\"toolPathPlaceholder\")}\n                value={formData.directory}\n                onChange={(e) => setFormData({ ...formData, directory: e.target.value })}\n                disabled={createTool.isPending || updateTool.isPending}\n                required\n              />\n              <p className=\"text-xs text-muted-foreground\">\n                {t(\"toolPathHint\")}\n              </p>\n            </div>\n\n            {/* Category tags */}\n            <div className=\"grid gap-2\">\n              <Label>{t(\"categoryTags\")}</Label>\n              \n              {/* Selected tags */}\n              {formData.categoryNames.length > 0 && (\n                <div className=\"flex flex-wrap gap-2 p-3 border rounded-md bg-muted/50\">\n                  {formData.categoryNames.map((categoryName) => (\n                    <Badge \n                      key={categoryName} \n                      variant=\"default\"\n                      className=\"flex items-center gap-1 px-2 py-1\"\n                    >\n                      {CategoryNameMap[categoryName] || categoryName}\n                      <button\n                        type=\"button\"\n                        onClick={() => handleCategoryRemove(categoryName)}\n                        disabled={createTool.isPending || updateTool.isPending}\n                        className=\"ml-1 hover:bg-primary/20 rounded-full p-0.5\"\n                      >\n                        <IconX className=\"h-3 w-3\" />\n                      </button>\n                    </Badge>\n                  ))}\n                </div>\n              )}\n\n              {/* Available tags */}\n              <div className=\"flex flex-wrap gap-2 p-3 border rounded-md\">\n                {availableCategories.length > 0 ? (\n                  availableCategories.map((categoryName) => {\n                    const isSelected = formData.categoryNames.includes(categoryName)\n                    return (\n                      <Badge \n                        key={categoryName}\n                        variant={isSelected ? \"secondary\" : \"outline\"}\n                        className=\"cursor-pointer hover:bg-secondary/80 transition-colors\"\n                        onClick={() => handleCategoryToggle(categoryName)}\n                      >\n                        {CategoryNameMap[categoryName] || categoryName}\n                      </Badge>\n                    )\n                  })\n                ) : (\n                  <p className=\"text-sm text-muted-foreground\">{t(\"noCategories\")}</p>\n                )}\n              </div>\n            </div>\n          </div>\n\n          <DialogFooter>\n            <Button \n              type=\"button\" \n              variant=\"outline\" \n              onClick={() => handleOpenChange(false)}\n              disabled={createTool.isPending || updateTool.isPending}\n            >\n              {t(\"cancel\")}\n            </Button>\n            <Button \n              type=\"submit\" \n              disabled={createTool.isPending || updateTool.isPending || !isFormValid}\n            >\n              {(createTool.isPending || updateTool.isPending) ? (\n                <>\n                  <LoadingSpinner/>\n                  {isEditMode ? t(\"saving\") : t(\"creating\")}\n                </>\n              ) : (\n                <>\n                  <IconPlus className=\"h-5 w-5\" />\n                  {isEditMode ? t(\"saveChanges\") : t(\"createTool\")}\n                </>\n              )}\n            </Button>\n          </DialogFooter>\n        </form>\n      </DialogContent>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "frontend/components/tools/config/add-tool-dialog.tsx",
    "content": "\"use client\"\n\nimport React, { useState, useEffect } from \"react\"\nimport { Wrench, AlertTriangle } from \"lucide-react\"\nimport { IconPlus } from \"@tabler/icons-react\"\nimport { useForm } from \"react-hook-form\"\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport * as z from \"zod\"\nimport { useTranslations } from \"next-intl\"\n\n// Import UI components\nimport { Button } from \"@/components/ui/button\"\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from \"@/components/ui/dialog\"\nimport { Input } from \"@/components/ui/input\"\nimport { Textarea } from \"@/components/ui/textarea\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { LoadingSpinner } from \"@/components/loading-spinner\"\nimport { IconX } from \"@tabler/icons-react\"\nimport {\n  Form,\n  FormControl,\n  FormDescription,\n  FormField,\n  FormItem,\n  FormLabel,\n  FormMessage,\n} from \"@/components/ui/form\"\n\n// Import React Query Hook\nimport { useCreateTool, useUpdateTool } from \"@/hooks/use-tools\"\n\n// Import type definitions\nimport type { Tool } from \"@/types/tool.types\"\nimport { CategoryNameMap } from \"@/types/tool.types\"\n\n// Component props type definition\ninterface AddToolDialogProps {\n  tool?: Tool                   // Tool data to edit (optional, edit mode when provided)\n  onAdd?: (tool: Tool) => void  // Callback function on successful add (optional)\n  open?: boolean                // External control for dialog open state\n  onOpenChange?: (open: boolean) => void  // External control callback for dialog open state\n}\n\n/**\n * Auto-generate version query command based on tool name and install command\n */\nfunction generateVersionCommand(toolName: string, installCommand: string): string {\n  if (!toolName) return \"\"\n\n  const lowerName = toolName.toLowerCase().trim()\n  const lowerInstall = installCommand.toLowerCase()\n\n  // Python tools\n  if (lowerInstall.includes(\"python\") || lowerInstall.includes(\".py\")) {\n    return `python ${lowerName}.py -v`\n  }\n\n  // Go tools\n  if (lowerInstall.includes(\"go install\") || lowerInstall.includes(\"go get\")) {\n    return `${lowerName} -version`\n  }\n\n  // Default: try common version commands\n  return `${lowerName} --version`\n}\n\n/**\n * Add tool dialog component (using React Query)\n */\nexport function AddToolDialog({\n  tool,\n  onAdd,\n  open: externalOpen,\n  onOpenChange: externalOnOpenChange\n}: AddToolDialogProps) {\n  const t = useTranslations(\"tools.config\")\n  \n  // Determine if in edit mode or add mode\n  const isEditMode = !!tool\n\n  // Dialog open state - supports external control\n  const [internalOpen, setInternalOpen] = useState(false)\n  const open = externalOpen !== undefined ? externalOpen : internalOpen\n  const setOpen = externalOnOpenChange || setInternalOpen\n\n  // Use predefined category list\n  const availableCategories = Object.keys(CategoryNameMap)\n\n  // Use React Query create and update tool mutations\n  const createTool = useCreateTool()\n  const updateTool = useUpdateTool()\n\n  // Form validation Schema\n  const formSchema = z.object({\n    name: z.string()\n      .min(2, { message: t(\"toolNameMin\") })\n      .max(255, { message: t(\"toolNameMax\") }),\n    repoUrl: z.string().optional().or(z.literal(\"\")),\n    version: z.string().max(100).optional().or(z.literal(\"\")),\n    description: z.string().max(1000).optional().or(z.literal(\"\")),\n    categoryNames: z.array(z.string()),\n    installCommand: z.string().min(1, { message: t(\"installCommandRequired\") }),\n    updateCommand: z.string().min(1, { message: t(\"updateCommandRequired\") }),\n    versionCommand: z.string().min(1, { message: t(\"versionCommandRequired\") }),\n  })\n\n  type FormValues = z.infer<typeof formSchema>\n\n  // Initialize form\n  const form = useForm<FormValues>({\n    resolver: zodResolver(formSchema),\n    defaultValues: {\n      name: tool?.name || \"\",\n      repoUrl: tool?.repoUrl || \"\",\n      version: tool?.version || \"\",\n      description: tool?.description || \"\",\n      categoryNames: tool?.categoryNames || [],\n      installCommand: tool?.installCommand || \"\",\n      updateCommand: tool?.updateCommand || \"\",\n      versionCommand: tool?.versionCommand || \"\",\n    },\n  })\n\n  // Reset form when tool changes\n  useEffect(() => {\n    if (tool) {\n      form.reset({\n        name: tool.name || \"\",\n        repoUrl: tool.repoUrl || \"\",\n        version: tool.version || \"\",\n        description: tool.description || \"\",\n        categoryNames: tool.categoryNames || [],\n        installCommand: tool.installCommand || \"\",\n        updateCommand: tool.updateCommand || \"\",\n        versionCommand: tool.versionCommand || \"\",\n      })\n    }\n  }, [tool, form])\n\n  // Watch form value changes\n  const watchName = form.watch(\"name\")\n  const watchInstallCommand = form.watch(\"installCommand\")\n  const watchVersionCommand = form.watch(\"versionCommand\")\n  const watchCategoryNames = form.watch(\"categoryNames\")\n\n  // Auto-generate version command\n  useEffect(() => {\n    if (watchName && watchInstallCommand && !watchVersionCommand) {\n      const generatedCmd = generateVersionCommand(watchName, watchInstallCommand)\n      form.setValue(\"versionCommand\", generatedCmd)\n    }\n  }, [watchName, watchInstallCommand, watchVersionCommand, form])\n\n  // Handle form submission\n  const onSubmit = (values: FormValues) => {\n    const toolData = {\n      name: values.name.trim(),\n      type: 'opensource' as const,\n      repoUrl: values.repoUrl?.trim() || undefined,\n      version: values.version?.trim() || undefined,\n      description: values.description?.trim() || undefined,\n      categoryNames: values.categoryNames.length > 0 ? values.categoryNames : undefined,\n      installCommand: values.installCommand.trim(),\n      updateCommand: values.updateCommand.trim(),\n      versionCommand: values.versionCommand.trim(),\n    }\n\n    const onSuccessCallback = (response: { tool?: Tool }) => {\n      form.reset()\n      setOpen(false)\n      if (onAdd && response?.tool) {\n        onAdd(response.tool)\n      }\n    }\n\n    if (isEditMode && tool?.id) {\n      updateTool.mutate(\n        { id: tool.id, data: toolData },\n        { onSuccess: onSuccessCallback }\n      )\n    } else {\n      createTool.mutate(toolData, { onSuccess: onSuccessCallback })\n    }\n  }\n\n  // Handle category tag click\n  const handleCategoryToggle = (categoryName: string) => {\n    const current = form.getValues(\"categoryNames\")\n    const isSelected = current.includes(categoryName)\n    form.setValue(\n      \"categoryNames\",\n      isSelected\n        ? current.filter(c => c !== categoryName)\n        : [...current, categoryName]\n    )\n  }\n\n  // Remove category tag\n  const handleCategoryRemove = (categoryName: string) => {\n    const current = form.getValues(\"categoryNames\")\n    form.setValue(\"categoryNames\", current.filter(c => c !== categoryName))\n  }\n\n  // Handle dialog close\n  const handleOpenChange = (newOpen: boolean) => {\n    if (!createTool.isPending && !updateTool.isPending) {\n      setOpen(newOpen)\n      if (!newOpen) {\n        form.reset()\n      }\n    }\n  }\n\n  return (\n    <Dialog open={open} onOpenChange={handleOpenChange}>\n      {externalOpen === undefined && (\n        <DialogTrigger asChild>\n          <Button>\n            <IconPlus className=\"h-5 w-5\" />\n            {t(\"addTool\")}\n          </Button>\n        </DialogTrigger>\n      )}\n\n      <DialogContent className=\"sm:max-w-[700px] max-h-[90vh] overflow-y-auto\">\n        <DialogHeader>\n          <DialogTitle className=\"flex items-center space-x-2\">\n            <Wrench />\n            <span>{isEditMode ? t(\"editTool\") : t(\"addNewTool\")}</span>\n          </DialogTitle>\n          <DialogDescription>\n            {t(\"dialogDesc\")}\n          </DialogDescription>\n        </DialogHeader>\n\n        <Form {...form}>\n          <form onSubmit={form.handleSubmit(onSubmit)}>\n            <div className=\"grid gap-6 py-4\">\n              <div className=\"space-y-4\">\n                <h3 className=\"text-sm font-semibold text-muted-foreground\">{t(\"basicInfo\")}</h3>\n\n                <FormField\n                  control={form.control}\n                  name=\"name\"\n                  render={({ field }) => (\n                    <FormItem>\n                      <FormLabel>{t(\"toolName\")} <span className=\"text-destructive\">*</span></FormLabel>\n                      <FormControl>\n                        <Input\n                          placeholder={t(\"toolNamePlaceholder\")}\n                          disabled={createTool.isPending || updateTool.isPending}\n                          maxLength={255}\n                          {...field}\n                        />\n                      </FormControl>\n                      <FormDescription>{t(\"characters\", { count: field.value.length, max: 255 })}</FormDescription>\n                      <FormMessage />\n                    </FormItem>\n                  )}\n                />\n\n                <FormField\n                  control={form.control}\n                  name=\"repoUrl\"\n                  render={({ field }) => (\n                    <FormItem>\n                      <FormLabel>{t(\"repoUrl\")}</FormLabel>\n                      <FormControl>\n                        <Input\n                          type=\"url\"\n                          placeholder={t(\"repoUrlPlaceholder\")}\n                          disabled={createTool.isPending || updateTool.isPending}\n                          maxLength={512}\n                          {...field}\n                        />\n                      </FormControl>\n                      <FormMessage />\n                    </FormItem>\n                  )}\n                />\n\n                <FormField\n                  control={form.control}\n                  name=\"version\"\n                  render={({ field }) => (\n                    <FormItem>\n                      <FormLabel>{t(\"currentVersion\")}</FormLabel>\n                      <FormControl>\n                        <Input\n                          placeholder={t(\"versionPlaceholder\")}\n                          disabled={createTool.isPending || updateTool.isPending}\n                          maxLength={100}\n                          {...field}\n                        />\n                      </FormControl>\n                      <FormMessage />\n                    </FormItem>\n                  )}\n                />\n\n                <FormField\n                  control={form.control}\n                  name=\"description\"\n                  render={({ field }) => (\n                    <FormItem>\n                      <FormLabel>{t(\"toolDesc\")}</FormLabel>\n                      <FormControl>\n                        <Textarea\n                          placeholder={t(\"toolDescPlaceholder\")}\n                          disabled={createTool.isPending || updateTool.isPending}\n                          rows={3}\n                          maxLength={1000}\n                          {...field}\n                        />\n                      </FormControl>\n                      <FormDescription>{t(\"characters\", { count: (field.value || \"\").length, max: 1000 })}</FormDescription>\n                      <FormMessage />\n                    </FormItem>\n                  )}\n                />\n\n                <div className=\"grid gap-2\">\n                  <FormLabel>{t(\"categoryTags\")}</FormLabel>\n\n                  {watchCategoryNames.length > 0 && (\n                    <div className=\"flex flex-wrap gap-2 p-3 border rounded-md bg-muted/50\">\n                      {watchCategoryNames.map((categoryName) => (\n                        <Badge\n                          key={categoryName}\n                          variant=\"default\"\n                          className=\"flex items-center gap-1 px-2 py-1\"\n                        >\n                          {CategoryNameMap[categoryName] || categoryName}\n                          <button\n                            type=\"button\"\n                            onClick={() => handleCategoryRemove(categoryName)}\n                            disabled={createTool.isPending || updateTool.isPending}\n                            className=\"ml-1 hover:bg-primary/20 rounded-full p-0.5\"\n                          >\n                            <IconX className=\"h-3 w-3\" />\n                          </button>\n                        </Badge>\n                      ))}\n                    </div>\n                  )}\n\n                  <div className=\"flex flex-wrap gap-2 p-3 border rounded-md\">\n                    {availableCategories.length > 0 ? (\n                      availableCategories.map((categoryName) => {\n                        const isSelected = watchCategoryNames.includes(categoryName)\n                        return (\n                          <Badge\n                            key={categoryName}\n                            variant={isSelected ? \"secondary\" : \"outline\"}\n                            className=\"cursor-pointer hover:bg-secondary/80 transition-colors\"\n                            onClick={() => handleCategoryToggle(categoryName)}\n                          >\n                            {CategoryNameMap[categoryName] || categoryName}\n                          </Badge>\n                        )\n                      })\n                    ) : (\n                      <p className=\"text-sm text-muted-foreground\">{t(\"noCategories\")}</p>\n                    )}\n                  </div>\n                </div>\n              </div>\n\n              <div className=\"space-y-4\">\n                <h3 className=\"text-sm font-semibold text-muted-foreground\">{t(\"commandConfig\")}</h3>\n\n                <FormField\n                  control={form.control}\n                  name=\"installCommand\"\n                  render={({ field }) => (\n                    <FormItem>\n                      <FormLabel>{t(\"installCommand\")} <span className=\"text-destructive\">*</span></FormLabel>\n                      <FormControl>\n                        <Textarea\n                          placeholder={t(\"installCommandPlaceholder\")}\n                          disabled={createTool.isPending || updateTool.isPending}\n                          rows={3}\n                          className=\"font-mono text-sm\"\n                          {...field}\n                        />\n                      </FormControl>\n                      <FormDescription className=\"space-y-1\">\n                        <span className=\"block\"><strong>{t(\"installCommandHint\")}</strong></span>\n                        <span className=\"block\">• {t(\"installCommandGit\")} <code className=\"bg-muted px-1 py-0.5 rounded\">git clone https://github.com/user/tool</code></span>\n                        <span className=\"block\">• {t(\"installCommandGo\")} <code className=\"bg-muted px-1 py-0.5 rounded\">go install -v github.com/tool@latest</code></span>\n                        <span className=\"flex items-center gap-1 text-amber-600\">\n                          <AlertTriangle className=\"h-3.5 w-3.5\" />\n                          {t(\"installCommandNote\")}\n                        </span>\n                      </FormDescription>\n                      <FormMessage />\n                    </FormItem>\n                  )}\n                />\n\n                <FormField\n                  control={form.control}\n                  name=\"updateCommand\"\n                  render={({ field }) => (\n                    <FormItem>\n                      <FormLabel>{t(\"updateCommand\")} <span className=\"text-destructive\">*</span></FormLabel>\n                      <FormControl>\n                        <Textarea\n                          placeholder={t(\"updateCommandPlaceholder\")}\n                          disabled={createTool.isPending || updateTool.isPending}\n                          rows={2}\n                          className=\"font-mono text-sm\"\n                          {...field}\n                        />\n                      </FormControl>\n                      <FormDescription className=\"space-y-1\">\n                        <span className=\"block\">• {t(\"updateCommandGitHint\")} <code className=\"bg-muted px-1 py-0.5 rounded\">git pull</code></span>\n                        <span className=\"block\">• {t(\"updateCommandGoHint\")}</span>\n                      </FormDescription>\n                      <FormMessage />\n                    </FormItem>\n                  )}\n                />\n\n                <FormField\n                  control={form.control}\n                  name=\"versionCommand\"\n                  render={({ field }) => (\n                    <FormItem>\n                      <FormLabel>\n                        {t(\"versionCommand\")} <span className=\"text-destructive\">*</span>\n                        {field.value && (\n                          <span className=\"ml-2 text-xs text-muted-foreground font-normal\">\n                            {t(\"versionCommandAutoGenerated\")}\n                          </span>\n                        )}\n                      </FormLabel>\n                      <FormControl>\n                        <Input\n                          placeholder={t(\"versionCommandPlaceholder\")}\n                          disabled={createTool.isPending || updateTool.isPending}\n                          maxLength={500}\n                          className=\"font-mono text-sm\"\n                          {...field}\n                        />\n                      </FormControl>\n                      <FormDescription className=\"space-y-1\">\n                        <span className=\"block\">{t(\"versionCommandHint\")}</span>\n                        <span className=\"block\">• <code className=\"bg-muted px-1 py-0.5 rounded\">toolname -v</code></span>\n                        <span className=\"block\">• <code className=\"bg-muted px-1 py-0.5 rounded\">toolname -V</code></span>\n                        <span className=\"block\">• <code className=\"bg-muted px-1 py-0.5 rounded\">toolname --version</code></span>\n                        <span className=\"block\">• <code className=\"bg-muted px-1 py-0.5 rounded\">python tool_name.py -v</code></span>\n                      </FormDescription>\n                      <FormMessage />\n                    </FormItem>\n                  )}\n                />\n              </div>\n            </div>\n\n            <DialogFooter>\n              <Button\n                type=\"button\"\n                variant=\"outline\"\n                onClick={() => handleOpenChange(false)}\n                disabled={createTool.isPending || updateTool.isPending}\n              >\n                {t(\"cancel\")}\n              </Button>\n              <Button\n                type=\"submit\"\n                disabled={createTool.isPending || updateTool.isPending || !form.formState.isValid}\n              >\n                {(createTool.isPending || updateTool.isPending) ? (\n                  <>\n                    <LoadingSpinner />\n                    {isEditMode ? t(\"saving\") : t(\"creating\")}\n                  </>\n                ) : (\n                  <>\n                    <IconPlus className=\"h-5 w-5\" />\n                    {isEditMode ? t(\"saveChanges\") : t(\"createTool\")}\n                  </>\n                )}\n              </Button>\n            </DialogFooter>\n          </form>\n        </Form>\n      </DialogContent>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "frontend/components/tools/config/custom-tools-list.tsx",
    "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport { Button } from \"@/components/ui/button\"\nimport { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from \"@/components/ui/card\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { IconEdit, IconTrash, IconFolder } from \"@tabler/icons-react\"\nimport { AddCustomToolDialog } from \"@/components/tools/config/add-custom-tool-dialog\"\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\"\nimport { LoadingSpinner } from \"@/components/loading-spinner\"\nimport { CardGridSkeleton } from \"@/components/ui/card-grid-skeleton\"\nimport { CategoryNameMap, type Tool } from \"@/types/tool.types\"\nimport { useTools, useDeleteTool } from \"@/hooks/use-tools\"\nimport { getDateLocale } from \"@/lib/date-utils\"\n\n/**\n * Custom tools list component\n * Display and manage custom scan scripts and tools\n */\nexport function CustomToolsList() {\n  const [editingTool, setEditingTool] = useState<Tool | null>(null)\n  const [isEditDialogOpen, setIsEditDialogOpen] = useState(false)\n  const [toolToDelete, setToolToDelete] = useState<Tool | null>(null)\n  \n  // Internationalization\n  const tCommon = useTranslations(\"common\")\n  const tConfirm = useTranslations(\"common.confirm\")\n  const tConfig = useTranslations(\"tools.config\")\n  const tColumns = useTranslations(\"columns\")\n  const locale = useLocale()\n  \n  // Get tool list (only custom tools)\n  const { data, isLoading, error } = useTools({\n    page: 1,\n    pageSize: 100,\n  })\n\n  // Filter out custom tools\n  const customTools = (data?.tools || []).filter((tool: Tool) => tool.type === 'custom')\n  \n  // Delete tool mutation\n  const deleteTool = useDeleteTool()\n\n  const handleEditTool = (tool: Tool) => {\n    setEditingTool(tool)\n    setIsEditDialogOpen(true)\n  }\n\n  const handleEditDialogClose = (open: boolean) => {\n    setIsEditDialogOpen(open)\n    if (!open) {\n      setEditingTool(null)\n    }\n  }\n\n  const handleDeleteTool = (toolId: number) => {\n    const tool = customTools.find((t: Tool) => t.id === toolId)\n    if (!tool) return\n    setToolToDelete(tool)\n  }\n\n  const confirmDelete = async () => {\n    if (!toolToDelete) return\n    \n    try {\n      await deleteTool.mutateAsync(toolToDelete.id)\n      // Close dialog after successful deletion\n      setToolToDelete(null)\n    } catch (error) {\n      // Error already handled in hook\n    }\n  }\n\n  // Loading state\n  if (isLoading) {\n    return <CardGridSkeleton cards={4} />\n  }\n\n  // Error state\n  if (error) {\n    return (\n      <div className=\"flex items-center justify-center min-h-[400px]\">\n        <div className=\"text-center\">\n          <p className=\"text-destructive\">{tCommon(\"status.error\")}: {error.message}</p>\n        </div>\n      </div>\n    )\n  }\n\n  return (\n    <div className=\"flex flex-col gap-4\">\n      {/* Tool list */}\n      <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-6\">\n        {customTools.map((tool: Tool) => (\n          <Card key={tool.id} className=\"flex flex-col h-full hover:shadow-lg transition-shadow\">\n            <CardHeader>\n              <CardTitle className=\"text-lg truncate\" title={tool.name}>{tool.name}</CardTitle>\n              <CardDescription className=\"line-clamp-2\" title={tool.description || tCommon(\"status.noData\")}>\n                {tool.description || tCommon(\"status.noData\")}\n              </CardDescription>\n              \n              {/* Category tags */}\n              <div className=\"flex flex-wrap gap-1 mt-2\">\n                {tool.categoryNames && tool.categoryNames.length > 0 ? (\n                  <div \n                    className=\"flex flex-wrap gap-1\"\n                    title={tool.categoryNames.map(c => CategoryNameMap[c] || c).join(', ')}\n                  >\n                    {tool.categoryNames.slice(0, 3).map((category: string) => (\n                      <Badge key={category} variant=\"secondary\" className=\"text-xs whitespace-nowrap\">\n                        {CategoryNameMap[category] || category}\n                      </Badge>\n                    ))}\n                    {tool.categoryNames.length > 3 && (\n                      <Badge variant=\"secondary\" className=\"text-xs\">\n                        +{tool.categoryNames.length - 3}\n                      </Badge>\n                    )}\n                  </div>\n                ) : (\n                  <Badge variant=\"outline\" className=\"text-xs text-muted-foreground\">\n                    {tConfig(\"uncategorized\")}\n                  </Badge>\n                )}\n              </div>\n            </CardHeader>\n            <CardContent className=\"flex-1\">\n              <div className=\"space-y-4\">\n                {/* Tool directory */}\n                <div className=\"bg-muted rounded-md p-3\">\n                  <div className=\"flex items-center gap-2 text-sm text-muted-foreground mb-1\">\n                    <IconFolder className=\"h-4 w-4\" />\n                    <span>{tConfig(\"directory\")}</span>\n                  </div>\n                  <code \n                    className=\"text-sm font-mono break-all line-clamp-2\" \n                    title={tool.directory}\n                  >\n                    {tool.directory}\n                  </code>\n                </div>\n\n                {/* Last updated time */}\n                <div className=\"text-sm text-muted-foreground\">\n                  {tColumns(\"common.updatedAt\")}: {new Date(tool.updatedAt).toLocaleDateString(getDateLocale(locale))}\n                </div>\n              </div>\n            </CardContent>\n            <CardFooter className=\"flex gap-2 pt-0\">\n              <Button\n                variant=\"outline\"\n                className=\"flex-1\"\n                onClick={() => handleEditTool(tool)}\n              >\n                <IconEdit className=\"h-4 w-4\" />\n                {tCommon(\"actions.edit\")}\n              </Button>\n              <Button\n                variant=\"outline\"\n                className=\"flex-1\"\n                onClick={() => handleDeleteTool(tool.id)}\n              >\n                <IconTrash className=\"h-4 w-4\" />\n                {tCommon(\"actions.delete\")}\n              </Button>\n            </CardFooter>\n          </Card>\n        ))}\n      </div>\n\n      {/* Empty state */}\n      {customTools.length === 0 && (\n        <div className=\"text-center py-12\">\n          <p className=\"text-muted-foreground\">{tConfig(\"noCustomTools\")}</p>\n        </div>\n      )}\n\n     \n\n      {/* Edit tool dialog */}\n      <AddCustomToolDialog \n        tool={editingTool || undefined}\n        open={isEditDialogOpen}\n        onOpenChange={handleEditDialogClose}\n      />\n\n      {/* Delete confirmation dialog */}\n      <AlertDialog open={!!toolToDelete} onOpenChange={(open) => !open && setToolToDelete(null)}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{tConfirm(\"deleteTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {tConfirm(\"deleteCustomToolMessage\", { name: toolToDelete?.name ?? \"\" })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel disabled={deleteTool.isPending}>{tCommon(\"actions.cancel\")}</AlertDialogCancel>\n            <AlertDialogAction \n              onClick={confirmDelete} \n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n              disabled={deleteTool.isPending}\n            >\n              {deleteTool.isPending ? (\n                <>\n                  <LoadingSpinner/>\n                  {tConfirm(\"deleting\")}\n                </>\n              ) : (\n                tCommon(\"actions.delete\")\n              )}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/tools/config/index.ts",
    "content": "/**\n * Tool Config Components - Unified exports\n */\nexport { ToolCard } from './tool-card'\nexport { OpensourceToolsList } from './opensource-tools-list'\nexport { CustomToolsList } from './custom-tools-list'\nexport { AddToolDialog } from './add-tool-dialog'\nexport { AddCustomToolDialog } from './add-custom-tool-dialog'\n\n"
  },
  {
    "path": "frontend/components/tools/config/opensource-tools-list.tsx",
    "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { useTranslations } from \"next-intl\"\nimport { ToolCard } from \"@/components/tools/config/tool-card\"\nimport { AddToolDialog } from \"@/components/tools/config/add-tool-dialog\"\nimport { useTools, useDeleteTool } from \"@/hooks/use-tools\"\nimport type { Tool } from \"@/types/tool.types\"\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\"\nimport { LoadingSpinner } from \"@/components/loading-spinner\"\nimport { CardGridSkeleton } from \"@/components/ui/card-grid-skeleton\"\n\n/**\n * Open source tools list component\n * Display and manage open source scan tools\n */\nexport function OpensourceToolsList() {\n  const [checkingToolId, setCheckingToolId] = useState<number | null>(null)\n  const [editingTool, setEditingTool] = useState<Tool | null>(null)\n  const [isEditDialogOpen, setIsEditDialogOpen] = useState(false)\n  const [toolToDelete, setToolToDelete] = useState<Tool | null>(null)\n  \n  // Internationalization\n  const tCommon = useTranslations(\"common\")\n  const tConfirm = useTranslations(\"common.confirm\")\n  const tConfig = useTranslations(\"tools.config\")\n  \n  // Get tool list (only open source tools)\n  const { data, isLoading, error } = useTools({\n    page: 1,\n    pageSize: 100,\n  })\n\n  // Filter out open source tools\n  const tools = (data?.tools || []).filter((tool: Tool) => tool.type === 'opensource')\n  \n  // Delete tool mutation\n  const deleteTool = useDeleteTool()\n\n  // Handle check update\n  const handleCheckUpdate = async (toolId: number) => {\n    try {\n      setCheckingToolId(toolId)\n      console.log(\"Checking tool update:\", toolId)\n      \n      // TODO: Call backend API to check update\n      // Simulate async operation\n      await new Promise(resolve => setTimeout(resolve, 2000))\n      \n      console.log(\"Check complete:\", toolId)\n    } catch (error) {\n      console.error(\"Check update failed:\", error)\n    } finally {\n      setCheckingToolId(null)\n    }\n  }\n\n  // Handle edit tool\n  const handleEditTool = (tool: Tool) => {\n    setEditingTool(tool)\n    setIsEditDialogOpen(true)\n  }\n\n  // Edit dialog close callback\n  const handleEditDialogClose = (open: boolean) => {\n    setIsEditDialogOpen(open)\n    if (!open) {\n      setEditingTool(null)\n    }\n  }\n\n  // Handle delete tool\n  const handleDeleteTool = (toolId: number) => {\n    const tool = tools.find((t: Tool) => t.id === toolId)\n    if (!tool) return\n    setToolToDelete(tool)\n  }\n\n  // Confirm delete tool\n  const confirmDelete = async () => {\n    if (!toolToDelete) return\n    \n    try {\n      await deleteTool.mutateAsync(toolToDelete.id)\n      // Close dialog after successful deletion\n      setToolToDelete(null)\n    } catch (error) {\n      // Error already handled in hook\n    }\n  }\n\n  // Loading state\n  if (isLoading) {\n    return <CardGridSkeleton cards={4} />\n  }\n\n  // Error state\n  if (error) {\n    return (\n      <div className=\"flex items-center justify-center min-h-[400px]\">\n        <div className=\"text-center\">\n          <p className=\"text-destructive\">{tCommon(\"status.error\")}: {error.message}</p>\n        </div>\n      </div>\n    )\n  }\n\n  return (\n    <div className=\"flex flex-col gap-4\">\n      {/* Tool list */}\n      <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-6\">\n        {tools.map((tool: Tool) => (\n          <ToolCard \n            key={tool.id} \n            tool={tool}\n            onCheckUpdate={handleCheckUpdate}\n            onEdit={handleEditTool}\n            onDelete={handleDeleteTool}\n            isChecking={checkingToolId === tool.id}\n          />\n        ))}\n      </div>\n      \n      {/* Empty state */}\n      {tools.length === 0 && (\n        <div className=\"text-center py-12\">\n          <p className=\"text-muted-foreground\">{tConfig(\"noTools\")}</p>\n        </div>\n      )}\n\n      {/* Edit tool dialog */}\n      <AddToolDialog \n        tool={editingTool || undefined}\n        open={isEditDialogOpen}\n        onOpenChange={handleEditDialogClose}\n      />\n\n      {/* Delete confirmation dialog */}\n      <AlertDialog open={!!toolToDelete} onOpenChange={(open) => !open && setToolToDelete(null)}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{tConfirm(\"deleteTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {tConfirm(\"deleteToolMessage\", { name: toolToDelete?.name ?? \"\" })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel disabled={deleteTool.isPending}>{tCommon(\"actions.cancel\")}</AlertDialogCancel>\n            <AlertDialogAction \n              onClick={confirmDelete} \n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n              disabled={deleteTool.isPending}\n            >\n              {deleteTool.isPending ? (\n                <>\n                  <LoadingSpinner/>\n                  {tConfirm(\"deleting\")}\n                </>\n              ) : (\n                tCommon(\"actions.delete\")\n              )}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/tools/config/tool-card.tsx",
    "content": "\"use client\"\n\nimport { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from \"@/components/ui/card\"\nimport { Button } from \"@/components/ui/button\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { IconBrandGithub, IconScale, IconRefresh, IconEdit, IconTrash } from \"@tabler/icons-react\"\nimport type { Tool } from \"@/types/tool.types\"\nimport { CategoryNameMap } from \"@/types/tool.types\"\nimport Link from \"next/link\"\nimport { useTranslations } from \"next-intl\"\n\ninterface ToolCardProps {\n  tool: Tool\n  onCheckUpdate?: (toolId: number) => void | Promise<void>\n  onEdit?: (tool: Tool) => void  // Edit tool callback\n  onDelete?: (toolId: number) => void  // Delete tool callback\n  isChecking?: boolean  // Whether checking for updates\n}\n\n/**\n * Highlighted description text component\n * Simply display description text, keep it concise\n */\nfunction HighlightedDescription({ description }: { description: string }) {\n  return <p className=\"line-clamp-4\">{description}</p>\n}\n\n/**\n * Tool card component\n * Display information for a single scan tool\n */\nexport function ToolCard({ tool, onCheckUpdate, onEdit, onDelete, isChecking = false }: ToolCardProps) {\n  const t = useTranslations(\"tools.config\")\n  // Generate capitalized displayName from name\n  const displayName = tool.name.charAt(0).toUpperCase() + tool.name.slice(1)\n  \n  return (\n    <Card className=\"flex flex-col h-full hover:shadow-lg transition-shadow\">\n      <CardHeader className=\" space-y-2\">\n        {/* Tool name */}\n        <CardTitle \n          className=\"text-center text-2xl font-bold truncate px-2\" \n          title={displayName}\n        >\n          {displayName}\n        </CardTitle>\n\n        {/* GitHub/repository link */}\n        <div className=\"flex items-center justify-center\">\n          {tool.repoUrl && (\n            <Link \n              href={tool.repoUrl}\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n              className=\"flex items-center gap-1 text-sm text-primary hover:underline\"\n            >\n              <IconBrandGithub className=\"h-4 w-4\" />\n              <span>{t(\"repository\")}</span>\n            </Link>\n          )}\n        </div>\n\n        {/* Category tags (centered, max 3) */}\n        <div className=\"flex items-center justify-center pt-1\">\n          {tool.categoryNames && tool.categoryNames.length > 0 ? (\n            <div \n              className=\"flex flex-wrap gap-1 justify-center max-w-full\"\n              title={tool.categoryNames.map(c => CategoryNameMap[c] || c).join(', ')}\n            >\n              {tool.categoryNames.slice(0, 3).map((categoryName: string) => (\n                <Badge key={categoryName} variant=\"secondary\" className=\"text-xs whitespace-nowrap\">\n                  {CategoryNameMap[categoryName] || categoryName}\n                </Badge>\n              ))}\n              {tool.categoryNames.length > 3 && (\n                <Badge variant=\"secondary\" className=\"text-xs\">\n                  +{tool.categoryNames.length - 3}\n                </Badge>\n              )}\n            </div>\n          ) : (\n            <Badge variant=\"outline\" className=\"text-xs text-muted-foreground\">\n              {t(\"uncategorized\")}\n            </Badge>\n          )}\n        </div>\n      </CardHeader>\n\n      <CardContent className=\"flex-1 flex flex-col\">\n        {/* Current installed version */}\n        <div className=\"mb-2\">\n          <div className=\"text-xs text-muted-foreground text-center mb-1\">\n            {t(\"currentVersion\")}\n          </div>\n          <div className=\"text-center font-semibold text-base\">\n            {tool.version || 'N/A'}\n          </div>\n        </div>\n\n        {/* Tool description */}\n        <CardDescription \n          className=\"flex-1 text-center line-clamp-3 text-sm leading-snug\"\n          title={tool.description || t(\"noDescription\")}\n        >\n          {tool.description || t(\"noDescription\")}\n        </CardDescription>\n      </CardContent>\n\n      <CardFooter className=\"flex gap-2\">\n        <Button\n          variant=\"default\"\n          className=\"flex-1\"\n          onClick={() => onCheckUpdate?.(tool.id)}\n          disabled={isChecking}\n        >\n          <IconRefresh className={isChecking ? \"animate-spin h-4 w-4\" : \"h-4 w-4\"} />\n          {isChecking ? t(\"checking\") : t(\"checkUpdate\")}\n        </Button>\n        <Button\n          size=\"sm\"\n          variant=\"outline\"\n          onClick={() => onEdit?.(tool)}\n        >\n          <IconEdit className=\"h-4 w-4\" />\n        </Button>\n        <Button\n          size=\"sm\"\n          variant=\"outline\"\n          onClick={() => onDelete?.(tool.id)}\n        >\n          <IconTrash className=\"h-4 w-4\" />\n        </Button>\n      </CardFooter>\n    </Card>\n  )\n}\n"
  },
  {
    "path": "frontend/components/tools/index.ts",
    "content": "export { ToolCard } from './config/tool-card'\nexport { OpensourceToolsList } from './config/opensource-tools-list'\nexport { CustomToolsList } from './config/custom-tools-list'\nexport { AddToolDialog } from './config/add-tool-dialog'\nexport { AddCustomToolDialog } from './config/add-custom-tool-dialog'\n"
  },
  {
    "path": "frontend/components/tools/wordlist-edit-dialog.tsx",
    "content": "\"use client\"\n\nimport React, { useState, useEffect, useRef } from \"react\"\nimport { FileText, Save, X, AlertTriangle } from \"lucide-react\"\nimport Editor from \"@monaco-editor/react\"\nimport { useTranslations } from \"next-intl\"\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n} from \"@/components/ui/dialog\"\nimport { Button } from \"@/components/ui/button\"\nimport { Label } from \"@/components/ui/label\"\nimport { useColorTheme } from \"@/hooks/use-color-theme\"\nimport { useWordlistContent, useUpdateWordlistContent } from \"@/hooks/use-wordlists\"\nimport type { Wordlist } from \"@/types/wordlist.types\"\n\ninterface WordlistEditDialogProps {\n  wordlist: Wordlist | null\n  open: boolean\n  onOpenChange: (open: boolean) => void\n}\n\nexport function WordlistEditDialog({\n  wordlist,\n  open,\n  onOpenChange,\n}: WordlistEditDialogProps) {\n  const t = useTranslations(\"tools.wordlists.editDialog\")\n  \n  const [content, setContent] = useState(\"\")\n  const [hasChanges, setHasChanges] = useState(false)\n  const [isEditorReady, setIsEditorReady] = useState(false)\n  const { currentTheme } = useColorTheme()\n  const editorRef = useRef<any>(null)\n\n  const { data: originalContent, isLoading } = useWordlistContent(\n    open && wordlist ? wordlist.id : null\n  )\n  const updateMutation = useUpdateWordlistContent()\n\n  useEffect(() => {\n    if (originalContent !== undefined && open) {\n      setContent(originalContent)\n      setHasChanges(false)\n    }\n  }, [originalContent, open])\n\n  useEffect(() => {\n    if (!open) {\n      setContent(\"\")\n      setHasChanges(false)\n      setIsEditorReady(false)\n    }\n  }, [open])\n\n  const handleEditorChange = (value: string | undefined) => {\n    const newValue = value || \"\"\n    setContent(newValue)\n    setHasChanges(newValue !== originalContent)\n  }\n\n  const handleEditorDidMount = (editor: any) => {\n    editorRef.current = editor\n    setIsEditorReady(true)\n  }\n\n  const handleSave = async () => {\n    if (!wordlist) return\n\n    updateMutation.mutate(\n      { id: wordlist.id, content },\n      {\n        onSuccess: () => {\n          setHasChanges(false)\n          onOpenChange(false)\n        },\n      }\n    )\n  }\n\n  const handleClose = () => {\n    if (hasChanges) {\n      const confirmed = window.confirm(t(\"confirmClose\"))\n      if (!confirmed) return\n    }\n    onOpenChange(false)\n  }\n\n  const lineCount = content.split(\"\\n\").length\n\n  return (\n    <Dialog open={open} onOpenChange={onOpenChange}>\n      <DialogContent className=\"sm:max-w-6xl max-w-[calc(100%-2rem)] h-[90vh] flex flex-col p-0\">\n        <div className=\"flex flex-col h-full\">\n          <DialogHeader className=\"px-6 pt-6 pb-4 border-b\">\n            <DialogTitle className=\"flex items-center gap-2\">\n              <FileText className=\"h-5 w-5\" />\n              {t(\"title\", { name: wordlist?.name || \"\" })}\n            </DialogTitle>\n            <DialogDescription>{t(\"desc\")}</DialogDescription>\n          </DialogHeader>\n\n          <div className=\"flex-1 overflow-hidden px-6 py-4\">\n            <div className=\"flex flex-col h-full gap-2\">\n              <div className=\"flex items-center justify-between\">\n                <Label>{t(\"content\")}</Label>\n                <div className=\"flex items-center gap-4 text-xs text-muted-foreground\">\n                  <span>{t(\"lines\", { count: lineCount.toLocaleString() })}</span>\n                  {wordlist?.fileHash && (\n                    <span title={wordlist.fileHash}>\n                      {t(\"hash\")}: {wordlist.fileHash.slice(0, 12)}...\n                    </span>\n                  )}\n                </div>\n              </div>\n\n              <div className=\"border rounded-md overflow-hidden h-full\">\n                {isLoading ? (\n                  <div className=\"flex items-center justify-center h-full\">\n                    <div className=\"flex flex-col items-center gap-2\">\n                      <div className=\"h-8 w-8 animate-spin rounded-full border-4 border-primary border-t-transparent\" />\n                      <p className=\"text-sm text-muted-foreground\">{t(\"loading\")}</p>\n                    </div>\n                  </div>\n                ) : (\n                  <Editor\n                    height=\"100%\"\n                    defaultLanguage=\"plaintext\"\n                    value={content}\n                    onChange={handleEditorChange}\n                    onMount={handleEditorDidMount}\n                    theme={currentTheme.isDark ? \"vs-dark\" : \"light\"}\n                    options={{\n                      minimap: { enabled: false },\n                      fontSize: 13,\n                      lineNumbers: \"on\",\n                      wordWrap: \"off\",\n                      scrollBeyondLastLine: false,\n                      automaticLayout: true,\n                      tabSize: 2,\n                      insertSpaces: true,\n                      folding: false,\n                      padding: { top: 16, bottom: 16 },\n                      readOnly: updateMutation.isPending,\n                    }}\n                    loading={\n                      <div className=\"flex items-center justify-center h-full\">\n                        <div className=\"flex flex-col items-center gap-2\">\n                          <div className=\"h-8 w-8 animate-spin rounded-full border-4 border-primary border-t-transparent\" />\n                          <p className=\"text-sm text-muted-foreground\">{t(\"loadingEditor\")}</p>\n                        </div>\n                      </div>\n                    }\n                  />\n                )}\n              </div>\n\n              {hasChanges && (\n                <p className=\"flex items-center gap-1 text-xs text-amber-600 dark:text-amber-400\">\n                  <AlertTriangle className=\"h-3.5 w-3.5\" />\n                  {t(\"unsavedChanges\")}\n                </p>\n              )}\n            </div>\n          </div>\n\n          <DialogFooter className=\"px-6 py-4 border-t gap-2\">\n            <Button\n              type=\"button\"\n              variant=\"outline\"\n              onClick={handleClose}\n              disabled={updateMutation.isPending}\n            >\n              <X className=\"h-4 w-4\" />\n              {t(\"cancel\")}\n            </Button>\n            <Button\n              type=\"button\"\n              onClick={handleSave}\n              disabled={updateMutation.isPending || !hasChanges || !isEditorReady}\n            >\n              {updateMutation.isPending ? (\n                <>\n                  <div className=\"h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent\" />\n                  {t(\"saving\")}\n                </>\n              ) : (\n                <>\n                  <Save className=\"h-4 w-4\" />\n                  {t(\"save\")}\n                </>\n              )}\n            </Button>\n          </DialogFooter>\n        </div>\n      </DialogContent>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "frontend/components/tools/wordlist-upload-dialog.tsx",
    "content": "\"use client\"\n\nimport { useState, type FormEvent } from \"react\"\nimport { Upload, X, FileText } from \"lucide-react\"\nimport { useTranslations } from \"next-intl\"\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n  DialogTrigger,\n} from \"@/components/ui/dialog\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport { useUploadWordlist } from \"@/hooks/use-wordlists\"\nimport { cn } from \"@/lib/utils\"\n\ninterface WordlistUploadDialogProps {\n  trigger?: React.ReactNode\n}\n\nexport function WordlistUploadDialog({ trigger }: WordlistUploadDialogProps) {\n  const t = useTranslations(\"tools.wordlists.uploadDialog\")\n  const tWordlists = useTranslations(\"tools.wordlists\")\n  \n  const [open, setOpen] = useState(false)\n  const [name, setName] = useState(\"\")\n  const [description, setDescription] = useState(\"\")\n  const [file, setFile] = useState<File | null>(null)\n  const [isDragActive, setIsDragActive] = useState(false)\n\n  const uploadMutation = useUploadWordlist()\n\n  const resetForm = () => {\n    setName(\"\")\n    setDescription(\"\")\n    setFile(null)\n  }\n\n  const handleDragOver = (e: React.DragEvent) => {\n    e.preventDefault()\n    setIsDragActive(true)\n  }\n\n  const handleDragLeave = (e: React.DragEvent) => {\n    e.preventDefault()\n    setIsDragActive(false)\n  }\n\n  const handleDrop = (e: React.DragEvent) => {\n    e.preventDefault()\n    setIsDragActive(false)\n    const droppedFile = e.dataTransfer.files[0]\n    if (droppedFile && droppedFile.name.endsWith(\".txt\")) {\n      setFile(droppedFile)\n      if (!name) {\n        setName(droppedFile.name.replace(/\\.[^/.]+$/, \"\"))\n      }\n    }\n  }\n\n  const handleFileSelect = (e: React.ChangeEvent<HTMLInputElement>) => {\n    const selectedFile = e.target.files?.[0]\n    if (selectedFile) {\n      setFile(selectedFile)\n      if (!name) {\n        setName(selectedFile.name.replace(/\\.[^/.]+$/, \"\"))\n      }\n    }\n  }\n\n  const handleSubmit = (e: FormEvent) => {\n    e.preventDefault()\n    if (!name || !file) return\n\n    uploadMutation.mutate(\n      { name, description: description || undefined, file },\n      {\n        onSuccess: () => {\n          resetForm()\n          setOpen(false)\n        },\n      }\n    )\n  }\n\n  const removeFile = () => {\n    setFile(null)\n  }\n\n  const formatFileSize = (bytes: number) => {\n    if (bytes < 1024) return `${bytes} B`\n    if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n    return `${(bytes / (1024 * 1024)).toFixed(1)} MB`\n  }\n\n  return (\n    <Dialog open={open} onOpenChange={(v) => { setOpen(v); if (!v) resetForm() }}>\n      <DialogTrigger asChild>\n        {trigger || (\n          <Button>\n            <Upload className=\"mr-2 h-4 w-4\" />\n            {tWordlists(\"upload\")}\n          </Button>\n        )}\n      </DialogTrigger>\n      <DialogContent className=\"sm:max-w-lg\">\n        <DialogHeader>\n          <DialogTitle>{t(\"title\")}</DialogTitle>\n          <DialogDescription>{t(\"desc\")}</DialogDescription>\n        </DialogHeader>\n\n        <form onSubmit={handleSubmit} className=\"space-y-4\">\n          <div\n            onDragOver={handleDragOver}\n            onDragLeave={handleDragLeave}\n            onDrop={handleDrop}\n            className={cn(\n              \"relative flex flex-col items-center justify-center rounded-lg border-2 border-dashed p-6 transition-colors\",\n              isDragActive\n                ? \"border-primary bg-primary/5\"\n                : \"border-muted-foreground/25 hover:border-muted-foreground/50\",\n              file && \"border-solid border-muted-foreground/25\"\n            )}\n          >\n            {file ? (\n              <div className=\"flex w-full items-center gap-3\">\n                <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-primary/10\">\n                  <FileText className=\"h-5 w-5 text-primary\" />\n                </div>\n                <div className=\"flex-1 min-w-0\">\n                  <p className=\"truncate font-medium text-sm\">{file.name}</p>\n                  <p className=\"text-xs text-muted-foreground\">\n                    {formatFileSize(file.size)}\n                  </p>\n                </div>\n                <Button\n                  type=\"button\"\n                  variant=\"ghost\"\n                  size=\"icon\"\n                  className=\"h-8 w-8 shrink-0\"\n                  onClick={removeFile}\n                >\n                  <X className=\"h-4 w-4\" />\n                </Button>\n              </div>\n            ) : (\n              <>\n                <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-muted\">\n                  <Upload className=\"h-6 w-6 text-muted-foreground\" />\n                </div>\n                <div className=\"mt-3 text-center\">\n                  <p className=\"text-sm font-medium\">{t(\"dragHint\")}</p>\n                  <p className=\"mt-1 text-xs text-muted-foreground\">\n                    {\" \"}\n                    <label className=\"cursor-pointer text-primary hover:underline\">\n                      {t(\"selectFile\")}\n                      <input\n                        type=\"file\"\n                        accept=\".txt\"\n                        className=\"hidden\"\n                        onChange={handleFileSelect}\n                      />\n                    </label>\n                  </p>\n                  <p className=\"mt-2 text-xs text-muted-foreground\">\n                    {t(\"fileHint\")}\n                  </p>\n                </div>\n              </>\n            )}\n          </div>\n\n          <div className=\"grid gap-4 sm:grid-cols-2\">\n            <div className=\"space-y-2\">\n              <Label htmlFor=\"name\">\n                {tWordlists(\"name\")} <span className=\"text-destructive\">*</span>\n              </Label>\n              <Input\n                id=\"name\"\n                value={name}\n                onChange={(e) => setName(e.target.value)}\n                placeholder={t(\"namePlaceholder\")}\n              />\n            </div>\n            <div className=\"space-y-2\">\n              <Label htmlFor=\"description\">{t(\"descLabel\")}</Label>\n              <Input\n                id=\"description\"\n                value={description}\n                onChange={(e) => setDescription(e.target.value)}\n                placeholder={t(\"descPlaceholder\")}\n              />\n            </div>\n          </div>\n\n          <DialogFooter>\n            <Button\n              type=\"button\"\n              variant=\"outline\"\n              onClick={() => setOpen(false)}\n              disabled={uploadMutation.isPending}\n            >\n              {t(\"cancel\")}\n            </Button>\n            <Button\n              type=\"submit\"\n              disabled={uploadMutation.isPending || !file || !name}\n            >\n              {uploadMutation.isPending ? t(\"uploading\") : t(\"uploadButton\")}\n            </Button>\n          </DialogFooter>\n        </form>\n      </DialogContent>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "frontend/components/ui/alert-dialog.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\"\n\nimport { cn } from \"@/lib/utils\"\nimport { buttonVariants } from \"@/components/ui/button\"\n\nfunction AlertDialog({\n  ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\n  return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />\n}\n\nfunction AlertDialogTrigger({\n  ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n  return (\n    <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n  )\n}\n\nfunction AlertDialogPortal({\n  ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n  return (\n    <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n  )\n}\n\nfunction AlertDialogOverlay({\n  className,\n  ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n  return (\n    <AlertDialogPrimitive.Overlay\n      data-slot=\"alert-dialog-overlay\"\n      className={cn(\n        \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-background/80 backdrop-blur-sm\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction AlertDialogContent({\n  className,\n  ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content>) {\n  return (\n    <AlertDialogPortal>\n      <AlertDialogOverlay />\n      <AlertDialogPrimitive.Content\n        data-slot=\"alert-dialog-content\"\n        className={cn(\n          \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\",\n          className\n        )}\n        {...props}\n      />\n    </AlertDialogPortal>\n  )\n}\n\nfunction AlertDialogHeader({\n  className,\n  ...props\n}: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"alert-dialog-header\"\n      className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction AlertDialogFooter({\n  className,\n  ...props\n}: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"alert-dialog-footer\"\n      className={cn(\n        \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction AlertDialogTitle({\n  className,\n  ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n  return (\n    <AlertDialogPrimitive.Title\n      data-slot=\"alert-dialog-title\"\n      className={cn(\"text-lg font-semibold\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction AlertDialogDescription({\n  className,\n  ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n  return (\n    <AlertDialogPrimitive.Description\n      data-slot=\"alert-dialog-description\"\n      className={cn(\"text-muted-foreground text-sm\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction AlertDialogAction({\n  className,\n  ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action>) {\n  return (\n    <AlertDialogPrimitive.Action\n      className={cn(buttonVariants(), className)}\n      {...props}\n    />\n  )\n}\n\nfunction AlertDialogCancel({\n  className,\n  ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel>) {\n  return (\n    <AlertDialogPrimitive.Cancel\n      className={cn(buttonVariants({ variant: \"outline\" }), className)}\n      {...props}\n    />\n  )\n}\n\nexport {\n  AlertDialog,\n  AlertDialogPortal,\n  AlertDialogOverlay,\n  AlertDialogTrigger,\n  AlertDialogContent,\n  AlertDialogHeader,\n  AlertDialogFooter,\n  AlertDialogTitle,\n  AlertDialogDescription,\n  AlertDialogAction,\n  AlertDialogCancel,\n}\n"
  },
  {
    "path": "frontend/components/ui/alert.tsx",
    "content": "import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst alertVariants = cva(\n  \"relative w-full rounded-lg border px-4 py-3 text-sm [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground [&>svg~*]:pl-7\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-background text-foreground\",\n        destructive:\n          \"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n    },\n  }\n)\n\nconst Alert = React.forwardRef<\n  HTMLDivElement,\n  React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>\n>(({ className, variant, ...props }, ref) => (\n  <div\n    ref={ref}\n    role=\"alert\"\n    className={cn(alertVariants({ variant }), className)}\n    {...props}\n  />\n))\nAlert.displayName = \"Alert\"\n\nconst AlertTitle = React.forwardRef<\n  HTMLParagraphElement,\n  React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n  <h5\n    ref={ref}\n    className={cn(\"mb-1 font-medium leading-none tracking-tight\", className)}\n    {...props}\n  />\n))\nAlertTitle.displayName = \"AlertTitle\"\n\nconst AlertDescription = React.forwardRef<\n  HTMLParagraphElement,\n  React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n  <div\n    ref={ref}\n    className={cn(\"text-sm [&_p]:leading-relaxed\", className)}\n    {...props}\n  />\n))\nAlertDescription.displayName = \"AlertDescription\"\n\nexport { Alert, AlertTitle, AlertDescription }\n"
  },
  {
    "path": "frontend/components/ui/avatar.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Avatar({\n  className,\n  ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Root>) {\n  return (\n    <AvatarPrimitive.Root\n      data-slot=\"avatar\"\n      className={cn(\n        \"relative flex size-8 shrink-0 overflow-hidden rounded-full\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction AvatarImage({\n  className,\n  ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n  return (\n    <AvatarPrimitive.Image\n      data-slot=\"avatar-image\"\n      className={cn(\"aspect-square size-full\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction AvatarFallback({\n  className,\n  ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\n  return (\n    <AvatarPrimitive.Fallback\n      data-slot=\"avatar-fallback\"\n      className={cn(\n        \"bg-muted flex size-full items-center justify-center rounded-full\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nexport { Avatar, AvatarImage, AvatarFallback }\n"
  },
  {
    "path": "frontend/components/ui/badge.tsx",
    "content": "import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst badgeVariants = cva(\n  \"inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden\",\n  {\n    variants: {\n      variant: {\n        default:\n          \"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n        secondary:\n          \"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n        destructive:\n          \"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n        outline:\n          \"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n    },\n  }\n)\n\nfunction Badge({\n  className,\n  variant,\n  asChild = false,\n  ...props\n}: React.ComponentProps<\"span\"> &\n  VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n  const Comp = asChild ? Slot : \"span\"\n\n  return (\n    <Comp\n      data-slot=\"badge\"\n      className={cn(badgeVariants({ variant }), className)}\n      {...props}\n    />\n  )\n}\n\nexport { Badge, badgeVariants }\n"
  },
  {
    "path": "frontend/components/ui/button.tsx",
    "content": "import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst buttonVariants = cva(\n  \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n        destructive:\n          \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n        outline:\n          \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n        secondary:\n          \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n        ghost:\n          \"hover:bg-primary/10 hover:text-primary dark:hover:bg-primary/20\",\n        link: \"text-primary underline-offset-4 hover:underline\",\n      },\n      size: {\n        default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n        sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n        lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n        icon: \"size-9\",\n        \"icon-sm\": \"size-8\",\n        \"icon-lg\": \"size-10\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  }\n)\n\nfunction Button({\n  className,\n  variant,\n  size,\n  asChild = false,\n  ...props\n}: React.ComponentProps<\"button\"> &\n  VariantProps<typeof buttonVariants> & {\n    asChild?: boolean\n  }) {\n  const Comp = asChild ? Slot : \"button\"\n\n  return (\n    <Comp\n      data-slot=\"button\"\n      className={cn(buttonVariants({ variant, size, className }))}\n      {...props}\n    />\n  )\n}\n\nexport { Button, buttonVariants }\n"
  },
  {
    "path": "frontend/components/ui/calendar.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport {\n  ChevronDownIcon,\n  ChevronLeftIcon,\n  ChevronRightIcon,\n} from \"lucide-react\"\nimport { DayButton, DayPicker, getDefaultClassNames } from \"react-day-picker\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button, buttonVariants } from \"@/components/ui/button\"\n\nfunction Calendar({\n  className,\n  classNames,\n  showOutsideDays = true,\n  captionLayout = \"label\",\n  buttonVariant = \"ghost\",\n  formatters,\n  components,\n  ...props\n}: React.ComponentProps<typeof DayPicker> & {\n  buttonVariant?: React.ComponentProps<typeof Button>[\"variant\"]\n}) {\n  const defaultClassNames = getDefaultClassNames()\n\n  return (\n    <DayPicker\n      showOutsideDays={showOutsideDays}\n      className={cn(\n        \"bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent\",\n        String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n        String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n        className\n      )}\n      captionLayout={captionLayout}\n      formatters={{\n        formatMonthDropdown: (date) =>\n          date.toLocaleString(\"default\", { month: \"short\" }),\n        ...formatters,\n      }}\n      classNames={{\n        root: cn(\"w-fit\", defaultClassNames.root),\n        months: cn(\n          \"flex gap-4 flex-col md:flex-row relative\",\n          defaultClassNames.months\n        ),\n        month: cn(\"flex flex-col w-full gap-4\", defaultClassNames.month),\n        nav: cn(\n          \"flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between\",\n          defaultClassNames.nav\n        ),\n        button_previous: cn(\n          buttonVariants({ variant: buttonVariant }),\n          \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n          defaultClassNames.button_previous\n        ),\n        button_next: cn(\n          buttonVariants({ variant: buttonVariant }),\n          \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n          defaultClassNames.button_next\n        ),\n        month_caption: cn(\n          \"flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)\",\n          defaultClassNames.month_caption\n        ),\n        dropdowns: cn(\n          \"w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5\",\n          defaultClassNames.dropdowns\n        ),\n        dropdown_root: cn(\n          \"relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md\",\n          defaultClassNames.dropdown_root\n        ),\n        dropdown: cn(\n          \"absolute bg-popover inset-0 opacity-0\",\n          defaultClassNames.dropdown\n        ),\n        caption_label: cn(\n          \"select-none font-medium\",\n          captionLayout === \"label\"\n            ? \"text-sm\"\n            : \"rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5\",\n          defaultClassNames.caption_label\n        ),\n        table: \"w-full border-collapse\",\n        weekdays: cn(\"flex\", defaultClassNames.weekdays),\n        weekday: cn(\n          \"text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none\",\n          defaultClassNames.weekday\n        ),\n        week: cn(\"flex w-full mt-2\", defaultClassNames.week),\n        week_number_header: cn(\n          \"select-none w-(--cell-size)\",\n          defaultClassNames.week_number_header\n        ),\n        week_number: cn(\n          \"text-[0.8rem] select-none text-muted-foreground\",\n          defaultClassNames.week_number\n        ),\n        day: cn(\n          \"relative w-full h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none\",\n          props.showWeekNumber\n            ? \"[&:nth-child(2)[data-selected=true]_button]:rounded-l-md\"\n            : \"[&:first-child[data-selected=true]_button]:rounded-l-md\",\n          defaultClassNames.day\n        ),\n        range_start: cn(\n          \"rounded-l-md bg-accent\",\n          defaultClassNames.range_start\n        ),\n        range_middle: cn(\"rounded-none\", defaultClassNames.range_middle),\n        range_end: cn(\"rounded-r-md bg-accent\", defaultClassNames.range_end),\n        today: cn(\n          \"bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none\",\n          defaultClassNames.today\n        ),\n        outside: cn(\n          \"text-muted-foreground aria-selected:text-muted-foreground\",\n          defaultClassNames.outside\n        ),\n        disabled: cn(\n          \"text-muted-foreground opacity-50\",\n          defaultClassNames.disabled\n        ),\n        hidden: cn(\"invisible\", defaultClassNames.hidden),\n        ...classNames,\n      }}\n      components={{\n        Root: ({ className, rootRef, ...props }) => {\n          return (\n            <div\n              data-slot=\"calendar\"\n              ref={rootRef}\n              className={cn(className)}\n              {...props}\n            />\n          )\n        },\n        Chevron: ({ className, orientation, ...props }) => {\n          if (orientation === \"left\") {\n            return (\n              <ChevronLeftIcon className={cn(\"size-4\", className)} {...props} />\n            )\n          }\n\n          if (orientation === \"right\") {\n            return (\n              <ChevronRightIcon\n                className={cn(\"size-4\", className)}\n                {...props}\n              />\n            )\n          }\n\n          return (\n            <ChevronDownIcon className={cn(\"size-4\", className)} {...props} />\n          )\n        },\n        DayButton: CalendarDayButton,\n        WeekNumber: ({ children, ...props }) => {\n          return (\n            <td {...props}>\n              <div className=\"flex size-(--cell-size) items-center justify-center text-center\">\n                {children}\n              </div>\n            </td>\n          )\n        },\n        ...components,\n      }}\n      {...props}\n    />\n  )\n}\n\nfunction CalendarDayButton({\n  className,\n  day,\n  modifiers,\n  ...props\n}: React.ComponentProps<typeof DayButton>) {\n  const defaultClassNames = getDefaultClassNames()\n\n  const ref = React.useRef<HTMLButtonElement>(null)\n  React.useEffect(() => {\n    if (modifiers.focused) ref.current?.focus()\n  }, [modifiers.focused])\n\n  return (\n    <Button\n      ref={ref}\n      variant=\"ghost\"\n      size=\"icon\"\n      data-day={day.date.toLocaleDateString()}\n      data-selected-single={\n        modifiers.selected &&\n        !modifiers.range_start &&\n        !modifiers.range_end &&\n        !modifiers.range_middle\n      }\n      data-range-start={modifiers.range_start}\n      data-range-end={modifiers.range_end}\n      data-range-middle={modifiers.range_middle}\n      className={cn(\n        \"data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70\",\n        defaultClassNames.day,\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nexport { Calendar, CalendarDayButton }\n"
  },
  {
    "path": "frontend/components/ui/card-grid-skeleton.tsx",
    "content": "import { cn } from \"@/lib/utils\"\nimport { Skeleton } from \"@/components/ui/skeleton\"\n\ninterface CardGridSkeletonProps {\n  cards?: number\n  actionButtonCount?: number\n  showToolbar?: boolean\n  withPadding?: boolean\n  className?: string\n}\n\n/**\n * Generic card grid skeleton screen\n * Suitable for tool lists and other card layouts\n */\nexport function CardGridSkeleton({\n  cards = 4,\n  actionButtonCount = 2,\n  showToolbar = true,\n  withPadding = true,\n  className,\n}: CardGridSkeletonProps) {\n  const containerClass = cn(\n    \"flex flex-col gap-4\",\n    withPadding && \"px-4 lg:px-6\",\n    className\n  )\n\n  return (\n    <div className={containerClass}>\n      {showToolbar && (\n        <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n          <Skeleton className=\"h-9 w-full sm:max-w-sm\" />\n          <div className=\"flex items-center gap-2\">\n            {Array.from({ length: actionButtonCount }).map((_, index) => (\n              <Skeleton key={index} className=\"h-9 w-24\" />\n            ))}\n          </div>\n        </div>\n      )}\n\n      <div className=\"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\">\n        {Array.from({ length: cards }).map((_, index) => (\n          <div key={index} className=\"rounded-lg border bg-card p-4 shadow-sm space-y-4\">\n            <div className=\"space-y-2\">\n              <Skeleton className=\"h-5 w-3/4\" />\n              <Skeleton className=\"h-4 w-full\" />\n            </div>\n            <div className=\"space-y-2\">\n              <Skeleton className=\"h-4 w-1/2\" />\n              <Skeleton className=\"h-16 w-full\" />\n            </div>\n            <div className=\"flex flex-wrap gap-2\">\n              {Array.from({ length: 3 }).map((_, badgeIndex) => (\n                <Skeleton key={badgeIndex} className=\"h-6 w-16 rounded-full\" />\n              ))}\n            </div>\n            <div className=\"flex gap-2\">\n              <Skeleton className=\"h-9 w-full\" />\n              <Skeleton className=\"h-9 w-full\" />\n            </div>\n          </div>\n        ))}\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/ui/card.tsx",
    "content": "import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Card({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"card\"\n      className={cn(\n        \"bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"card-header\"\n      className={cn(\n        \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"card-title\"\n      className={cn(\"leading-none font-semibold\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"card-description\"\n      className={cn(\"text-muted-foreground text-sm\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"card-action\"\n      className={cn(\n        \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"card-content\"\n      className={cn(\"px-6\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"card-footer\"\n      className={cn(\"flex items-center px-6 [.border-t]:pt-6\", className)}\n      {...props}\n    />\n  )\n}\n\nexport {\n  Card,\n  CardHeader,\n  CardFooter,\n  CardTitle,\n  CardAction,\n  CardDescription,\n  CardContent,\n}\n"
  },
  {
    "path": "frontend/components/ui/chart.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as RechartsPrimitive from \"recharts\"\n\nimport { cn } from \"@/lib/utils\"\n\n// Format: { THEME_NAME: CSS_SELECTOR }\nconst THEMES = { light: \"\", dark: \".dark\" } as const\n\nexport type ChartConfig = {\n  [k in string]: {\n    label?: React.ReactNode\n    icon?: React.ComponentType\n  } & (\n    | { color?: string; theme?: never }\n    | { color?: never; theme: Record<keyof typeof THEMES, string> }\n  )\n}\n\ntype ChartContextProps = {\n  config: ChartConfig\n}\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null)\n\nfunction useChart() {\n  const context = React.useContext(ChartContext)\n\n  if (!context) {\n    throw new Error(\"useChart must be used within a <ChartContainer />\")\n  }\n\n  return context\n}\n\nfunction ChartContainer({\n  id,\n  className,\n  children,\n  config,\n  ...props\n}: React.ComponentProps<\"div\"> & {\n  config: ChartConfig\n  children: React.ComponentProps<\n    typeof RechartsPrimitive.ResponsiveContainer\n  >[\"children\"]\n}) {\n  const uniqueId = React.useId()\n  const chartId = `chart-${id || uniqueId.replace(/:/g, \"\")}`\n\n  return (\n    <ChartContext.Provider value={{ config }}>\n      <div\n        data-slot=\"chart\"\n        data-chart={chartId}\n        className={cn(\n          \"[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-polar-grid_line]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_line]:stroke-border flex aspect-video justify-center text-xs [&_.recharts-dot]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-sector]:outline-hidden [&_.recharts-sector]:stroke-transparent [&_.recharts-surface]:outline-hidden\",\n          className\n        )}\n        {...props}\n      >\n        <ChartStyle id={chartId} config={config} />\n        <RechartsPrimitive.ResponsiveContainer>\n          {children}\n        </RechartsPrimitive.ResponsiveContainer>\n      </div>\n    </ChartContext.Provider>\n  )\n}\n\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n  const colorConfig = Object.entries(config).filter(\n    ([, config]) => config.theme || config.color\n  )\n\n  if (!colorConfig.length) {\n    return null\n  }\n\n  return (\n    <style\n      dangerouslySetInnerHTML={{\n        __html: Object.entries(THEMES)\n          .map(\n            ([theme, prefix]) => `\n${prefix} [data-chart=${id}] {\n${colorConfig\n  .map(([key, itemConfig]) => {\n    const color =\n      itemConfig.theme?.[theme as keyof typeof itemConfig.theme] ||\n      itemConfig.color\n    return color ? `  --color-${key}: ${color};` : null\n  })\n  .join(\"\\n\")}\n}\n`\n          )\n          .join(\"\\n\"),\n      }}\n    />\n  )\n}\n\nconst ChartTooltip = RechartsPrimitive.Tooltip\n\nfunction ChartTooltipContent({\n  active,\n  payload,\n  className,\n  indicator = \"dot\",\n  hideLabel = false,\n  hideIndicator = false,\n  label,\n  labelFormatter,\n  labelClassName,\n  formatter,\n  color,\n  nameKey,\n  labelKey,\n}: React.ComponentProps<typeof RechartsPrimitive.Tooltip> &\n  React.ComponentProps<\"div\"> & {\n    hideLabel?: boolean\n    hideIndicator?: boolean\n    indicator?: \"line\" | \"dot\" | \"dashed\"\n    nameKey?: string\n    labelKey?: string\n  }) {\n  const { config } = useChart()\n\n  const tooltipLabel = React.useMemo(() => {\n    if (hideLabel || !payload?.length) {\n      return null\n    }\n\n    const [item] = payload\n    const key = `${labelKey || item?.dataKey || item?.name || \"value\"}`\n    const itemConfig = getPayloadConfigFromPayload(config, item, key)\n    const value =\n      !labelKey && typeof label === \"string\"\n        ? config[label as keyof typeof config]?.label || label\n        : itemConfig?.label\n\n    if (labelFormatter) {\n      return (\n        <div className={cn(\"font-medium\", labelClassName)}>\n          {labelFormatter(value, payload)}\n        </div>\n      )\n    }\n\n    if (!value) {\n      return null\n    }\n\n    return <div className={cn(\"font-medium\", labelClassName)}>{value}</div>\n  }, [\n    label,\n    labelFormatter,\n    payload,\n    hideLabel,\n    labelClassName,\n    config,\n    labelKey,\n  ])\n\n  if (!active || !payload?.length) {\n    return null\n  }\n\n  const nestLabel = payload.length === 1 && indicator !== \"dot\"\n\n  return (\n    <div\n      className={cn(\n        \"border-border/50 bg-background grid min-w-[8rem] items-start gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl\",\n        className\n      )}\n    >\n      {!nestLabel ? tooltipLabel : null}\n      <div className=\"grid gap-1.5\">\n        {payload\n          .filter((item) => item.type !== \"none\")\n          .map((item, index) => {\n            const key = `${nameKey || item.name || item.dataKey || \"value\"}`\n            const itemConfig = getPayloadConfigFromPayload(config, item, key)\n            const indicatorColor = color || item.payload.fill || item.color\n\n            return (\n              <div\n                key={item.dataKey}\n                className={cn(\n                  \"[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5\",\n                  indicator === \"dot\" && \"items-center\"\n                )}\n              >\n                {formatter && item?.value !== undefined && item.name ? (\n                  formatter(item.value, item.name, item, index, item.payload)\n                ) : (\n                  <>\n                    {itemConfig?.icon ? (\n                      <itemConfig.icon />\n                    ) : (\n                      !hideIndicator && (\n                        <div\n                          className={cn(\n                            \"shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)\",\n                            {\n                              \"h-2.5 w-2.5\": indicator === \"dot\",\n                              \"w-1\": indicator === \"line\",\n                              \"w-0 border-[1.5px] border-dashed bg-transparent\":\n                                indicator === \"dashed\",\n                              \"my-0.5\": nestLabel && indicator === \"dashed\",\n                            }\n                          )}\n                          style={\n                            {\n                              \"--color-bg\": indicatorColor,\n                              \"--color-border\": indicatorColor,\n                            } as React.CSSProperties\n                          }\n                        />\n                      )\n                    )}\n                    <div\n                      className={cn(\n                        \"flex flex-1 justify-between leading-none\",\n                        nestLabel ? \"items-end\" : \"items-center\"\n                      )}\n                    >\n                      <div className=\"grid gap-1.5\">\n                        {nestLabel ? tooltipLabel : null}\n                        <span className=\"text-muted-foreground\">\n                          {itemConfig?.label || item.name}\n                        </span>\n                      </div>\n                      {item.value && (\n                        <span className=\"text-foreground font-mono font-medium tabular-nums\">\n                          {item.value.toLocaleString()}\n                        </span>\n                      )}\n                    </div>\n                  </>\n                )}\n              </div>\n            )\n          })}\n      </div>\n    </div>\n  )\n}\n\nconst ChartLegend = RechartsPrimitive.Legend\n\nfunction ChartLegendContent({\n  className,\n  hideIcon = false,\n  payload,\n  verticalAlign = \"bottom\",\n  nameKey,\n}: React.ComponentProps<\"div\"> &\n  Pick<RechartsPrimitive.LegendProps, \"payload\" | \"verticalAlign\"> & {\n    hideIcon?: boolean\n    nameKey?: string\n  }) {\n  const { config } = useChart()\n\n  if (!payload?.length) {\n    return null\n  }\n\n  return (\n    <div\n      className={cn(\n        \"flex items-center justify-center gap-4\",\n        verticalAlign === \"top\" ? \"pb-3\" : \"pt-3\",\n        className\n      )}\n    >\n      {payload\n        .filter((item) => item.type !== \"none\")\n        .map((item) => {\n          const key = `${nameKey || item.dataKey || \"value\"}`\n          const itemConfig = getPayloadConfigFromPayload(config, item, key)\n\n          return (\n            <div\n              key={item.value}\n              className={cn(\n                \"[&>svg]:text-muted-foreground flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3\"\n              )}\n            >\n              {itemConfig?.icon && !hideIcon ? (\n                <itemConfig.icon />\n              ) : (\n                <div\n                  className=\"h-2 w-2 shrink-0 rounded-[2px]\"\n                  style={{\n                    backgroundColor: item.color,\n                  }}\n                />\n              )}\n              {itemConfig?.label}\n            </div>\n          )\n        })}\n    </div>\n  )\n}\n\n// Helper to extract item config from a payload.\nfunction getPayloadConfigFromPayload(\n  config: ChartConfig,\n  payload: unknown,\n  key: string\n) {\n  if (typeof payload !== \"object\" || payload === null) {\n    return undefined\n  }\n\n  const payloadPayload =\n    \"payload\" in payload &&\n    typeof payload.payload === \"object\" &&\n    payload.payload !== null\n      ? payload.payload\n      : undefined\n\n  let configLabelKey: string = key\n\n  if (\n    key in payload &&\n    typeof payload[key as keyof typeof payload] === \"string\"\n  ) {\n    configLabelKey = payload[key as keyof typeof payload] as string\n  } else if (\n    payloadPayload &&\n    key in payloadPayload &&\n    typeof payloadPayload[key as keyof typeof payloadPayload] === \"string\"\n  ) {\n    configLabelKey = payloadPayload[\n      key as keyof typeof payloadPayload\n    ] as string\n  }\n\n  return configLabelKey in config\n    ? config[configLabelKey]\n    : config[key as keyof typeof config]\n}\n\nexport {\n  ChartContainer,\n  ChartTooltip,\n  ChartTooltipContent,\n  ChartLegend,\n  ChartLegendContent,\n  ChartStyle,\n}\n"
  },
  {
    "path": "frontend/components/ui/checkbox.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { CheckIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Checkbox({\n  className,\n  ...props\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n  return (\n    <CheckboxPrimitive.Root\n      data-slot=\"checkbox\"\n      className={cn(\n        \"peer border-input bg-background dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-sm border shadow-xs transition-all outline-none focus-visible:ring-[1px] cursor-pointer disabled:cursor-not-allowed disabled:opacity-50\",\n        className\n      )}\n      {...props}\n    >\n      <CheckboxPrimitive.Indicator\n        data-slot=\"checkbox-indicator\"\n        className=\"flex items-center justify-center text-white transition-none\"\n      >\n        <CheckIcon className=\"size-3.5\" />\n      </CheckboxPrimitive.Indicator>\n    </CheckboxPrimitive.Root>\n  )\n}\n\nexport { Checkbox }\n"
  },
  {
    "path": "frontend/components/ui/collapsible.tsx",
    "content": "\"use client\"\n\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\"\n\nfunction Collapsible({\n  ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.Root>) {\n  return <CollapsiblePrimitive.Root data-slot=\"collapsible\" {...props} />\n}\n\nfunction CollapsibleTrigger({\n  ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>) {\n  return (\n    <CollapsiblePrimitive.CollapsibleTrigger\n      data-slot=\"collapsible-trigger\"\n      {...props}\n    />\n  )\n}\n\nfunction CollapsibleContent({\n  ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>) {\n  return (\n    <CollapsiblePrimitive.CollapsibleContent\n      data-slot=\"collapsible-content\"\n      {...props}\n    />\n  )\n}\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent }\n"
  },
  {
    "path": "frontend/components/ui/command.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { type DialogProps } from \"@radix-ui/react-dialog\"\nimport { MagnifyingGlassIcon } from \"@radix-ui/react-icons\"\nimport { Command as CommandPrimitive } from \"cmdk\"\nimport { useTranslations } from \"next-intl\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Dialog, DialogContent, DialogTitle } from \"@/components/ui/dialog\"\n\nconst Command = React.forwardRef<\n  React.ElementRef<typeof CommandPrimitive>,\n  React.ComponentPropsWithoutRef<typeof CommandPrimitive>\n>(({ className, ...props }, ref) => (\n  <CommandPrimitive\n    ref={ref}\n    className={cn(\n      \"flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground\",\n      className\n    )}\n    {...props}\n  />\n))\nCommand.displayName = CommandPrimitive.displayName\n\ninterface CommandDialogProps extends DialogProps {\n  contentClassName?: string\n}\n\nconst CommandDialog = ({ children, contentClassName, ...props }: CommandDialogProps) => {\n  const t = useTranslations(\"common.ui\")\n  \n  return (\n    <Dialog {...props}>\n      <DialogContent className={cn(\"overflow-hidden p-0 sm:max-w-[500px]\", contentClassName)}>\n        <DialogTitle className=\"sr-only\">{t(\"commandDialog\")}</DialogTitle>\n        <Command className=\"[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n          {children}\n        </Command>\n      </DialogContent>\n    </Dialog>\n  )\n}\n\nconst CommandInput = React.forwardRef<\n  React.ElementRef<typeof CommandPrimitive.Input>,\n  React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>\n>(({ className, ...props }, ref) => (\n  <div className=\"flex items-center border-b px-3\" cmdk-input-wrapper=\"\">\n    <MagnifyingGlassIcon className=\"shrink-0 opacity-50\" />\n    <CommandPrimitive.Input\n      ref={ref}\n      className={cn(\n        \"flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\",\n        className\n      )}\n      {...props}\n    />\n  </div>\n))\n\nCommandInput.displayName = CommandPrimitive.Input.displayName\n\nconst CommandList = React.forwardRef<\n  React.ElementRef<typeof CommandPrimitive.List>,\n  React.ComponentPropsWithoutRef<typeof CommandPrimitive.List>\n>(({ className, ...props }, ref) => (\n  <CommandPrimitive.List\n    ref={ref}\n    className={cn(\"max-h-[300px] overflow-y-auto overflow-x-hidden\", className)}\n    {...props}\n  />\n))\n\nCommandList.displayName = CommandPrimitive.List.displayName\n\nconst CommandEmpty = React.forwardRef<\n  React.ElementRef<typeof CommandPrimitive.Empty>,\n  React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\n>((props, ref) => (\n  <CommandPrimitive.Empty\n    ref={ref}\n    className=\"py-6 text-center text-sm\"\n    {...props}\n  />\n))\n\nCommandEmpty.displayName = CommandPrimitive.Empty.displayName\n\nconst CommandGroup = React.forwardRef<\n  React.ElementRef<typeof CommandPrimitive.Group>,\n  React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\n>(({ className, ...props }, ref) => (\n  <CommandPrimitive.Group\n    ref={ref}\n    className={cn(\n      \"overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground\",\n      className\n    )}\n    {...props}\n  />\n))\n\nCommandGroup.displayName = CommandPrimitive.Group.displayName\n\nconst CommandSeparator = React.forwardRef<\n  React.ElementRef<typeof CommandPrimitive.Separator>,\n  React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n  <CommandPrimitive.Separator\n    ref={ref}\n    className={cn(\"-mx-1 h-px bg-border\", className)}\n    {...props}\n  />\n))\nCommandSeparator.displayName = CommandPrimitive.Separator.displayName\n\nconst CommandItem = React.forwardRef<\n  React.ElementRef<typeof CommandPrimitive.Item>,\n  React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>\n>(({ className, ...props }, ref) => (\n  <CommandPrimitive.Item\n    ref={ref}\n    className={cn(\n      \"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none aria-selected:bg-accent aria-selected:text-accent-foreground data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50\",\n      className\n    )}\n    {...props}\n  />\n))\n\nCommandItem.displayName = CommandPrimitive.Item.displayName\n\nconst CommandShortcut = ({\n  className,\n  ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n  return (\n    <span\n      className={cn(\n        \"ml-auto text-xs tracking-widest text-muted-foreground\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\nCommandShortcut.displayName = \"CommandShortcut\"\n\nexport {\n  Command,\n  CommandDialog,\n  CommandInput,\n  CommandList,\n  CommandEmpty,\n  CommandGroup,\n  CommandItem,\n  CommandSeparator,\n  CommandShortcut,\n}\n"
  },
  {
    "path": "frontend/components/ui/confirm-dialog.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { useTranslations } from \"next-intl\"\nimport {\n  AlertDialog,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\"\nimport { Button } from \"@/components/ui/button\"\n\ninterface ConfirmDialogProps {\n  open: boolean\n  onOpenChange: (open: boolean) => void\n  title: string\n  description: string\n  onConfirm: () => void | Promise<void>\n  loading?: boolean\n  variant?: \"default\" | \"destructive\"\n  confirmText?: string\n  cancelText?: string\n}\n\nexport function ConfirmDialog({\n  open,\n  onOpenChange,\n  title,\n  description,\n  onConfirm,\n  loading = false,\n  variant = \"default\",\n  confirmText,\n  cancelText,\n}: ConfirmDialogProps) {\n  const t = useTranslations(\"common.actions\")\n\n  return (\n    <AlertDialog open={open} onOpenChange={onOpenChange}>\n      <AlertDialogContent>\n        <AlertDialogHeader>\n          <AlertDialogTitle>{title}</AlertDialogTitle>\n          <AlertDialogDescription>{description}</AlertDialogDescription>\n        </AlertDialogHeader>\n        <AlertDialogFooter>\n          <Button\n            variant=\"outline\"\n            onClick={() => onOpenChange(false)}\n            disabled={loading}\n          >\n            {cancelText || t(\"cancel\")}\n          </Button>\n          <Button\n            variant={variant}\n            onClick={onConfirm}\n            disabled={loading}\n          >\n            {loading ? t(\"processing\") : (confirmText || t(\"confirm\"))}\n          </Button>\n        </AlertDialogFooter>\n      </AlertDialogContent>\n    </AlertDialog>\n  )\n}\n"
  },
  {
    "path": "frontend/components/ui/copyable-popover-content.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { Button } from \"@/components/ui/button\"\nimport { Copy, Check } from \"lucide-react\"\nimport { toast } from \"sonner\"\nimport { useTranslations } from \"next-intl\"\n\n/**\n * Copyable Popover content component\n * Displays content directly with a copy button in the top right corner\n */\nexport function CopyablePopoverContent({ \n  value, \n  className = \"\" \n}: { \n  value: string\n  className?: string \n}) {\n  const [copied, setCopied] = React.useState(false)\n  const tToast = useTranslations(\"toast\")\n  \n  const handleCopy = async () => {\n    try {\n      await navigator.clipboard.writeText(value)\n      setCopied(true)\n      toast.success(tToast(\"copied\"))\n      setTimeout(() => setCopied(false), 2000)\n    } catch {\n      toast.error(tToast(\"copyFailed\"))\n    }\n  }\n  \n  return (\n    <div className=\"relative\">\n      <Button\n        variant=\"ghost\"\n        size=\"icon\"\n        className=\"absolute -top-1 -right-1 h-6 w-6 opacity-60 hover:opacity-100\"\n        onClick={handleCopy}\n      >\n        {copied ? (\n          <Check className=\"h-3.5 w-3.5 text-green-600 dark:text-green-400\" />\n        ) : (\n          <Copy className=\"h-3.5 w-3.5\" />\n        )}\n      </Button>\n      <div className={`text-sm break-all pr-6 max-h-48 overflow-y-auto ${className}`}>\n        {value}\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/ui/data-table/column-header.tsx",
    "content": "\"use client\"\n\nimport type { Column } from \"@tanstack/react-table\"\nimport { ChevronUp, ChevronDown, ChevronsUpDown } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\n\ninterface DataTableColumnHeaderProps<TData, TValue> {\n  column: Column<TData, TValue>\n  title: string\n  className?: string\n}\n\n/**\n * Unified column header component\n * \n * Features:\n * - Supports sort indicators\n * - Click to toggle sort direction\n * - Unified styling\n */\nexport function DataTableColumnHeader<TData, TValue>({\n  column,\n  title,\n  className,\n}: DataTableColumnHeaderProps<TData, TValue>) {\n  if (!column.getCanSort()) {\n    return <div className={cn(\"text-left\", className)}>{title}</div>\n  }\n\n  const sorted = column.getIsSorted()\n\n  return (\n    <Button\n      variant=\"ghost\"\n      size=\"sm\"\n      className={cn(\"-ml-3 h-8 data-[state=open]:bg-accent\", className)}\n      onClick={() => column.toggleSorting(sorted === \"asc\")}\n    >\n      <span className=\"whitespace-nowrap\">{title}</span>\n      {sorted === \"desc\" ? (\n        <ChevronDown className=\"ml-2 h-4 w-4 shrink-0\" />\n      ) : sorted === \"asc\" ? (\n        <ChevronUp className=\"ml-2 h-4 w-4 shrink-0\" />\n      ) : (\n        <ChevronsUpDown className=\"ml-2 h-4 w-4 shrink-0\" />\n      )}\n    </Button>\n  )\n}\n"
  },
  {
    "path": "frontend/components/ui/data-table/column-resizer.tsx",
    "content": "\"use client\"\n\nimport type { Header } from \"@tanstack/react-table\"\nimport { cn } from \"@/lib/utils\"\n\ninterface ColumnResizerProps<TData> {\n  header: Header<TData, unknown>\n  className?: string\n}\n\n/**\n * Unified column width adjustment handle component\n * \n * Design specifications:\n * - Clickable area width: 8px (w-2)\n * - Positioned inside the right edge of the column\n * - TableHead needs to add pr-2 to reserve space for resizer\n * - Visual indicator line width: 2px (w-0.5)\n * - Height: 100% fills the table header\n * - Supports mouse and touch events\n * - Double-click to reset column width\n * - Show highlight indicator line on hover\n */\nexport function ColumnResizer<TData>({ header, className }: ColumnResizerProps<TData>) {\n  if (!header.column.getCanResize()) {\n    return null\n  }\n\n  const resizeHandler = header.getResizeHandler()\n\n  return (\n    <div\n      onMouseDown={(e) => {\n        e.preventDefault()\n        e.stopPropagation()\n        resizeHandler(e)\n      }}\n      onTouchStart={(e) => {\n        e.stopPropagation()\n        resizeHandler(e)\n      }}\n      onDoubleClick={(e) => {\n        e.preventDefault()\n        e.stopPropagation()\n        header.column.resetSize()\n      }}\n      className={cn(\n        // Clickable area: 8px wide, positioned at column right edge\n        \"group absolute right-0 top-0 h-full w-2 cursor-col-resize select-none touch-none z-10\",\n        \"flex items-center justify-center\",\n        className\n      )}\n    >\n      {/* Visual indicator line: 2px wide, 80% height, only show on hover or drag */}\n      <div \n        className={cn(\n          \"w-0.5 h-4/5 rounded-full transition-all\",\n          header.column.getIsResizing() \n            ? \"bg-primary opacity-100\" \n            : \"bg-primary/50 opacity-0 group-hover:opacity-100\"\n        )} \n      />\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/ui/data-table/expandable-cell.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { ChevronDown, ChevronUp } from \"lucide-react\"\n\n// ============================================================================\n// i18n Context for expandable components\n// ============================================================================\n\ninterface ExpandableI18n {\n  expand: string\n  collapse: string\n}\n\nconst defaultI18n: ExpandableI18n = {\n  expand: \"Expand\",\n  collapse: \"Collapse\",\n}\n\nconst ExpandableI18nContext = React.createContext<ExpandableI18n>(defaultI18n)\n\n/**\n * Provider for expandable component i18n\n * Wrap your table or page with this to provide translations\n */\nexport function ExpandableI18nProvider({\n  children,\n  expand,\n  collapse,\n}: {\n  children: React.ReactNode\n  expand: string\n  collapse: string\n}) {\n  const value = React.useMemo(() => ({ expand, collapse }), [expand, collapse])\n  return (\n    <ExpandableI18nContext.Provider value={value}>\n      {children}\n    </ExpandableI18nContext.Provider>\n  )\n}\n\nfunction useExpandableI18n() {\n  return React.useContext(ExpandableI18nContext)\n}\n\n// ============================================================================\n// ExpandableCell component\n// ============================================================================\n\nexport interface ExpandableCellProps {\n  /** Value to display */\n  value: string | null | undefined\n  /** Display variant */\n  variant?: \"text\" | \"url\" | \"mono\" | \"muted\"\n  /** Maximum display lines, default 3 */\n  maxLines?: number\n  /** Additional CSS class name */\n  className?: string\n  /** Placeholder when value is empty */\n  placeholder?: string\n  /** Expand button text (overrides context) */\n  expandLabel?: string\n  /** Collapse button text (overrides context) */\n  collapseLabel?: string\n}\n\n/**\n * Unified expandable cell component\n * \n * Features:\n * - Default display up to 3 lines (configurable)\n * - Auto-detect content overflow\n * - Show expand/collapse button only when content overflows\n * - Supports text, url, mono, muted variants\n */\nexport function ExpandableCell({\n  value,\n  variant = \"text\",\n  maxLines = 3,\n  className,\n  placeholder = \"-\",\n  expandLabel,\n  collapseLabel,\n}: ExpandableCellProps) {\n  const i18n = useExpandableI18n()\n  const [expanded, setExpanded] = React.useState(false)\n  const [isOverflowing, setIsOverflowing] = React.useState(false)\n  const contentRef = React.useRef<HTMLDivElement>(null)\n\n  const expand = expandLabel ?? i18n.expand\n  const collapse = collapseLabel ?? i18n.collapse\n\n  // Detect content overflow\n  React.useEffect(() => {\n    const el = contentRef.current\n    if (!el) return\n\n    const checkOverflow = () => {\n      // Compare scrollHeight and clientHeight to determine overflow\n      setIsOverflowing(el.scrollHeight > el.clientHeight + 1)\n    }\n\n    checkOverflow()\n\n    // Listen for window size changes\n    const resizeObserver = new ResizeObserver(checkOverflow)\n    resizeObserver.observe(el)\n\n    return () => resizeObserver.disconnect()\n  }, [value, expanded])\n\n  if (!value) {\n    return <span className=\"text-muted-foreground text-sm\">{placeholder}</span>\n  }\n\n  const lineClampClass = {\n    1: \"line-clamp-1\",\n    2: \"line-clamp-2\",\n    3: \"line-clamp-3\",\n    4: \"line-clamp-4\",\n    5: \"line-clamp-5\",\n    6: \"line-clamp-6\",\n  }[maxLines] || \"line-clamp-3\"\n\n  return (\n    <div className=\"flex flex-col gap-1\">\n      <div\n        ref={contentRef}\n        className={cn(\n          \"text-sm break-all leading-relaxed whitespace-pre-wrap\",\n          variant === \"mono\" && \"font-mono text-xs text-muted-foreground\",\n          variant === \"url\" && \"text-muted-foreground\",\n          variant === \"muted\" && \"text-muted-foreground\",\n          !expanded && lineClampClass,\n          className\n        )}\n      >\n        {value}\n      </div>\n      {(isOverflowing || expanded) && (\n        <button\n          onClick={() => setExpanded(!expanded)}\n          className=\"inline-flex items-center gap-0.5 text-xs text-primary hover:underline self-start\"\n        >\n          {expanded ? (\n            <>\n              <ChevronUp className=\"h-3 w-3\" />\n              <span>{collapse}</span>\n            </>\n          ) : (\n            <>\n              <ChevronDown className=\"h-3 w-3\" />\n              <span>{expand}</span>\n            </>\n          )}\n        </button>\n      )}\n    </div>\n  )\n}\n\n/**\n * URL-specific expandable cell\n */\nexport function ExpandableUrlCell(props: Omit<ExpandableCellProps, \"variant\">) {\n  return <ExpandableCell {...props} variant=\"url\" />\n}\n\n/**\n * Code/monospace font expandable cell\n */\nexport function ExpandableMonoCell(props: Omit<ExpandableCellProps, \"variant\">) {\n  return <ExpandableCell {...props} variant=\"mono\" />\n}\n\n// ============================================================================\n// Badge list related components\n// ============================================================================\n\nexport interface BadgeItem {\n  id: number | string\n  name: string\n}\n\nexport interface ExpandableBadgeListProps {\n  /** Badge item list */\n  items: BadgeItem[] | null | undefined\n  /** Default display count, default 2 */\n  maxVisible?: number\n  /** Badge variant */\n  variant?: \"default\" | \"secondary\" | \"outline\" | \"destructive\"\n  /** Placeholder when value is empty */\n  placeholder?: string\n  /** Additional CSS class name */\n  className?: string\n  /** Callback when Badge is clicked */\n  onItemClick?: (item: BadgeItem) => void\n}\n\n/**\n * Expandable Badge list component\n * \n * Features:\n * - Default display first N Badges (configurable)\n * - Show expand button when exceeding count\n * - Click expand button to show all Badges\n * - Show collapse button after expansion\n */\nexport function ExpandableBadgeList({\n  items,\n  maxVisible = 2,\n  variant = \"secondary\",\n  placeholder = \"-\",\n  className,\n  onItemClick,\n}: ExpandableBadgeListProps) {\n  const i18n = useExpandableI18n()\n  const [expanded, setExpanded] = React.useState(false)\n\n  if (!items || items.length === 0) {\n    return <span className=\"text-sm text-muted-foreground\">{placeholder}</span>\n  }\n\n  const hasMore = items.length > maxVisible\n  const displayItems = expanded ? items : items.slice(0, maxVisible)\n\n  return (\n    <div className={cn(\"flex flex-wrap items-center gap-1\", className)}>\n      {displayItems.map((item) => (\n        <Badge\n          key={item.id}\n          variant={variant}\n          className={cn(\n            \"text-xs\",\n            onItemClick && \"cursor-pointer hover:bg-accent\"\n          )}\n          title={item.name}\n          onClick={onItemClick ? () => onItemClick(item) : undefined}\n        >\n          {item.name}\n        </Badge>\n      ))}\n      {hasMore && (\n        <button\n          onClick={() => setExpanded(!expanded)}\n          className=\"inline-flex items-center gap-0.5 text-xs text-muted-foreground hover:text-foreground transition-colors\"\n        >\n          {expanded ? (\n            <>\n              <ChevronUp className=\"h-3 w-3\" />\n              <span>{i18n.collapse}</span>\n            </>\n          ) : (\n            <>\n              <ChevronDown className=\"h-3 w-3\" />\n              <span>{i18n.expand}</span>\n            </>\n          )}\n        </button>\n      )}\n    </div>\n  )\n}\n\n// ============================================================================\n// String list related components\n// ============================================================================\n\nexport interface ExpandableTagListProps {\n  /** Tag list */\n  items: string[] | null | undefined\n  /** Maximum display lines, default 2 */\n  maxLines?: number\n  /** Badge variant */\n  variant?: \"default\" | \"secondary\" | \"outline\" | \"destructive\"\n  /** Placeholder when value is empty */\n  placeholder?: string\n  /** Additional CSS class name */\n  className?: string\n}\n\n/**\n * Expandable tag list component (for string arrays)\n * \n * Features:\n * - Auto-detect overflow based on line count\n * - Responsive: shows more tags when container is wider\n * - Show expand/collapse button only when content overflows\n */\nexport function ExpandableTagList({\n  items,\n  maxLines = 2,\n  variant = \"outline\",\n  placeholder = \"-\",\n  className,\n}: ExpandableTagListProps) {\n  const i18n = useExpandableI18n()\n  const [expanded, setExpanded] = React.useState(false)\n  const [isOverflowing, setIsOverflowing] = React.useState(false)\n  const containerRef = React.useRef<HTMLDivElement>(null)\n\n  // Detect content overflow\n  React.useEffect(() => {\n    const el = containerRef.current\n    if (!el || expanded) return\n\n    const checkOverflow = () => {\n      setIsOverflowing(el.scrollHeight > el.clientHeight + 1)\n    }\n\n    checkOverflow()\n\n    const resizeObserver = new ResizeObserver(checkOverflow)\n    resizeObserver.observe(el)\n\n    return () => resizeObserver.disconnect()\n  }, [items, expanded])\n\n  if (!items || items.length === 0) {\n    return <span className=\"text-sm text-muted-foreground\">{placeholder}</span>\n  }\n\n  // Line clamp class based on maxLines\n  const lineClampClass = {\n    1: \"line-clamp-1\",\n    2: \"line-clamp-2\",\n    3: \"line-clamp-3\",\n    4: \"line-clamp-4\",\n  }[maxLines] || \"line-clamp-2\"\n\n  return (\n    <div className=\"flex flex-col gap-1\">\n      <div\n        ref={containerRef}\n        className={cn(\n          \"flex flex-wrap items-start gap-1\",\n          !expanded && lineClampClass,\n          className\n        )}\n      >\n        {items.map((item, index) => (\n          <Badge\n            key={`${item}-${index}`}\n            variant={variant}\n            className=\"text-xs\"\n            title={item}\n          >\n            {item}\n          </Badge>\n        ))}\n      </div>\n      {(isOverflowing || expanded) && (\n        <button\n          onClick={() => setExpanded(!expanded)}\n          className=\"inline-flex items-center gap-0.5 text-xs text-muted-foreground hover:text-foreground transition-colors self-start\"\n        >\n          {expanded ? (\n            <>\n              <ChevronUp className=\"h-3 w-3\" />\n              <span>{i18n.collapse}</span>\n            </>\n          ) : (\n            <>\n              <ChevronDown className=\"h-3 w-3\" />\n              <span>{i18n.expand}</span>\n            </>\n          )}\n        </button>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/ui/data-table/index.ts",
    "content": "// Unified data table component exports\nexport { UnifiedDataTable } from \"./unified-data-table\"\nexport { DataTableToolbar } from \"./toolbar\"\nexport { DataTablePagination } from \"./pagination\"\nexport { DataTableColumnHeader } from \"./column-header\"\nexport { ColumnResizer } from \"./column-resizer\"\n\n// Type exports\nexport type {\n  UnifiedDataTableProps,\n  DataTableToolbarProps,\n  DataTablePaginationProps,\n  DataTableColumnHeaderProps,\n  ColumnResizerProps,\n  PaginationState,\n  PaginationInfo,\n  FilterField,\n  DownloadOption,\n  DeleteConfirmationConfig,\n} from \"@/types/data-table.types\"\n"
  },
  {
    "path": "frontend/components/ui/data-table/pagination.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport type { Table } from \"@tanstack/react-table\"\nimport {\n  IconChevronLeft,\n  IconChevronRight,\n  IconChevronsLeft,\n  IconChevronsRight,\n} from \"@tabler/icons-react\"\nimport { useTranslations } from 'next-intl'\nimport { Button } from \"@/components/ui/button\"\nimport { Label } from \"@/components/ui/label\"\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from \"@/components/ui/select\"\nimport { cn } from \"@/lib/utils\"\nimport type { PaginationInfo } from \"@/types/data-table.types\"\n\ninterface DataTablePaginationProps<TData> {\n  table: Table<TData>\n  paginationInfo?: PaginationInfo\n  pageSizeOptions?: number[]\n  className?: string\n}\n\nconst DEFAULT_PAGE_SIZE_OPTIONS = [10, 20, 50, 100, 200, 500, 1000]\n\n/**\n * Unified pagination component\n * \n * Updates pagination state through table.setPageIndex/setPageSize,\n * handled uniformly by useReactTable's onPaginationChange for state synchronization.\n */\nexport function DataTablePagination<TData>({\n  table,\n  paginationInfo,\n  pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS,\n  className,\n}: DataTablePaginationProps<TData>) {\n  const t = useTranslations('common.pagination')\n  const tDataTable = useTranslations('dataTable')\n  const { pageIndex, pageSize } = table.getState().pagination\n  \n  // Server-side pagination mode\n  const isServerSide = !!paginationInfo\n  \n  // Calculate total count and total pages\n  const total = paginationInfo?.total ?? table.getFilteredRowModel().rows.length\n  const totalPages = paginationInfo?.totalPages ?? table.getPageCount()\n  const selectedCount = table.getFilteredSelectedRowModel().rows.length\n\n  // Use useCallback to wrap handler functions to avoid unnecessary re-renders\n  const handlePageSizeChange = React.useCallback((value: string) => {\n    const newPageSize = Number(value)\n    table.setPageSize(newPageSize)\n  }, [table])\n\n  const handleFirstPage = React.useCallback(() => {\n    table.setPageIndex(0)\n  }, [table])\n\n  const handlePreviousPage = React.useCallback(() => {\n    if (isServerSide) {\n      table.setPageIndex(Math.max(0, pageIndex - 1))\n    } else {\n      table.previousPage()\n    }\n  }, [table, isServerSide, pageIndex])\n\n  const handleNextPage = React.useCallback(() => {\n    if (isServerSide) {\n      table.setPageIndex(Math.min(totalPages - 1, pageIndex + 1))\n    } else {\n      table.nextPage()\n    }\n  }, [table, isServerSide, pageIndex, totalPages])\n\n  const handleLastPage = React.useCallback(() => {\n    table.setPageIndex(Math.max(0, totalPages - 1))\n  }, [table, totalPages])\n\n  // For server-side pagination use our calculated values, for client-side pagination use table methods\n  const canPreviousPage = isServerSide ? pageIndex > 0 : table.getCanPreviousPage()\n  const canNextPage = isServerSide ? pageIndex < totalPages - 1 : table.getCanNextPage()\n\n  return (\n    <div className={cn(\"flex items-center justify-between px-2\", className)}>\n      {/* Selected rows info */}\n      <div className=\"flex-1 text-sm text-muted-foreground\">\n        {tDataTable('selected', { count: selectedCount })} / {t('total', { count: total })}\n      </div>\n\n      {/* Pagination controls */}\n      <div className=\"flex items-center space-x-6 lg:space-x-8\">\n        {/* Rows per page selection */}\n        <div className=\"flex items-center space-x-2\">\n          <Label htmlFor=\"rows-per-page\" className=\"text-sm font-medium\">\n            {t('rowsPerPage')}\n          </Label>\n          <Select\n            value={`${pageSize}`}\n            onValueChange={handlePageSizeChange}\n          >\n            <SelectTrigger className=\"h-8 w-[90px]\" id=\"rows-per-page\">\n              <SelectValue placeholder={pageSize} />\n            </SelectTrigger>\n            <SelectContent side=\"top\">\n              {pageSizeOptions.map((size) => (\n                <SelectItem key={size} value={`${size}`}>\n                  {size}\n                </SelectItem>\n              ))}\n            </SelectContent>\n          </Select>\n        </div>\n\n        {/* Page info */}\n        <div className=\"flex items-center justify-center text-sm font-medium whitespace-nowrap\">\n          {t('page', { current: pageIndex + 1, total: totalPages || 1 })}\n        </div>\n\n        {/* Pagination buttons */}\n        <div className=\"flex items-center space-x-2\">\n          <Button\n            variant=\"outline\"\n            className=\"hidden h-8 w-8 p-0 lg:flex\"\n            onClick={handleFirstPage}\n            disabled={!canPreviousPage}\n          >\n            <span className=\"sr-only\">{t('first')}</span>\n            <IconChevronsLeft className=\"h-4 w-4\" />\n          </Button>\n          <Button\n            variant=\"outline\"\n            className=\"h-8 w-8 p-0\"\n            onClick={handlePreviousPage}\n            disabled={!canPreviousPage}\n          >\n            <span className=\"sr-only\">{t('previous')}</span>\n            <IconChevronLeft className=\"h-4 w-4\" />\n          </Button>\n          <Button\n            variant=\"outline\"\n            className=\"h-8 w-8 p-0\"\n            onClick={handleNextPage}\n            disabled={!canNextPage}\n          >\n            <span className=\"sr-only\">{t('next')}</span>\n            <IconChevronRight className=\"h-4 w-4\" />\n          </Button>\n          <Button\n            variant=\"outline\"\n            className=\"hidden h-8 w-8 p-0 lg:flex\"\n            onClick={handleLastPage}\n            disabled={!canNextPage}\n          >\n            <span className=\"sr-only\">{t('last')}</span>\n            <IconChevronsRight className=\"h-4 w-4\" />\n          </Button>\n        </div>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/ui/data-table/toolbar.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { IconSearch, IconLoader2 } from \"@tabler/icons-react\"\nimport { useTranslations } from 'next-intl'\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { SmartFilterInput } from \"@/components/common/smart-filter-input\"\nimport type { FilterField, ParsedFilter } from \"@/components/common/smart-filter-input\"\nimport { cn } from \"@/lib/utils\"\n\ninterface DataTableToolbarProps {\n  // Search mode\n  searchMode?: 'simple' | 'smart'\n  searchPlaceholder?: string\n  searchValue?: string\n  onSearch?: (value: string) => void\n  isSearching?: boolean\n  filterFields?: FilterField[]\n  filterExamples?: string[]\n  \n  // Left custom content\n  leftContent?: React.ReactNode\n  \n  // Right actions\n  children?: React.ReactNode\n  \n  // Styles\n  className?: string\n}\n\n/**\n * Unified toolbar component\n * \n * Features:\n * - Supports both simple search and smart filter modes\n * - Left side search/filter, right side action buttons\n * - Supports custom content slots\n */\nexport function DataTableToolbar({\n  searchMode = 'simple',\n  searchPlaceholder,\n  searchValue = \"\",\n  onSearch,\n  isSearching = false,\n  filterFields,\n  filterExamples,\n  leftContent,\n  children,\n  className,\n}: DataTableToolbarProps) {\n  const t = useTranslations('common.actions')\n  \n  // Use translation as default placeholder\n  const placeholder = searchPlaceholder ?? t('search')\n  \n  // Local search value state (simple mode)\n  const [localSearchValue, setLocalSearchValue] = React.useState(searchValue)\n\n  // Sync external search value\n  React.useEffect(() => {\n    setLocalSearchValue(searchValue)\n  }, [searchValue])\n\n  // Handle simple search submit\n  const handleSimpleSearchSubmit = () => {\n    onSearch?.(localSearchValue)\n  }\n\n  // Handle keyboard events\n  const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n    if (e.key === 'Enter') {\n      handleSimpleSearchSubmit()\n    }\n  }\n\n  // Handle smart filter search\n  const handleSmartSearch = (_filters: ParsedFilter[], rawQuery: string) => {\n    onSearch?.(rawQuery)\n  }\n\n  return (\n    <div className={cn(\"flex items-center justify-between\", className)}>\n      {/* Left: Search/Filter */}\n      <div className=\"flex items-center space-x-2 flex-1 max-w-xl\">\n        {leftContent ? (\n          leftContent\n        ) : searchMode === 'smart' ? (\n          <SmartFilterInput\n            fields={filterFields}\n            examples={filterExamples}\n            placeholder={placeholder}\n            value={searchValue}\n            onSearch={handleSmartSearch}\n            className=\"flex-1\"\n          />\n        ) : (\n          <>\n            <Input\n              placeholder={placeholder}\n              value={localSearchValue}\n              onChange={(e) => setLocalSearchValue(e.target.value)}\n              onKeyDown={handleKeyDown}\n              className=\"h-8 flex-1\"\n            />\n            <Button \n              variant=\"outline\" \n              size=\"sm\" \n              onClick={handleSimpleSearchSubmit} \n              disabled={isSearching}\n            >\n              {isSearching ? (\n                <IconLoader2 className=\"h-4 w-4 animate-spin\" />\n              ) : (\n                <IconSearch className=\"h-4 w-4\" />\n              )}\n            </Button>\n          </>\n        )}\n      </div>\n\n      {/* Right: Action buttons */}\n      {children && (\n        <div className=\"flex items-center space-x-2\">\n          {children}\n        </div>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/ui/data-table/unified-data-table.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport {\n  ColumnFiltersState,\n  ColumnSizingState,\n  flexRender,\n  getCoreRowModel,\n  getFacetedRowModel,\n  getFacetedUniqueValues,\n  getFilteredRowModel,\n  getPaginationRowModel,\n  getSortedRowModel,\n  SortingState,\n  useReactTable,\n  VisibilityState,\n  Updater,\n} from \"@tanstack/react-table\"\nimport { calculateColumnWidths } from \"@/lib/table-utils\"\nimport {\n  IconChevronDown,\n  IconLayoutColumns,\n  IconPlus,\n  IconTrash,\n  IconDownload,\n} from \"@tabler/icons-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport {\n  DropdownMenu,\n  DropdownMenuCheckboxItem,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuLabel,\n  DropdownMenuSeparator,\n  DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\"\nimport {\n  TableBody,\n  TableCell,\n  TableHead,\n  TableHeader,\n  TableRow,\n} from \"@/components/ui/table\"\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\"\nimport { cn } from \"@/lib/utils\"\n\nimport { DataTableToolbar } from \"./toolbar\"\nimport { DataTablePagination } from \"./pagination\"\nimport { ColumnResizer } from \"./column-resizer\"\nimport type {\n  UnifiedDataTableProps,\n  PaginationState,\n} from \"@/types/data-table.types\"\n\n/**\n * Unified data table component\n * \n * Features:\n * - Generic support, type safety\n * - Row selection, sorting, column visibility, column resizing\n * - Client/server-side pagination\n * - Simple search/smart filtering\n * - Bulk operations, download functionality\n * - Confirmation dialogs\n */\nexport function UnifiedDataTable<TData>({\n  // Core data\n  data,\n  columns,\n  getRowId = (row) => String((row as { id?: string | number }).id ?? ''),\n  \n  // Pagination\n  pagination: externalPagination,\n  setPagination: setExternalPagination,\n  paginationInfo,\n  onPaginationChange,\n  hidePagination = false,\n  pageSizeOptions,\n  \n  // Toolbar\n  hideToolbar = false,\n  toolbarLeft,\n  toolbarRight,\n  \n  // Search/Filter\n  searchMode = 'simple',\n  searchPlaceholder,\n  searchValue,\n  onSearch,\n  isSearching,\n  filterFields,\n  filterExamples,\n  \n  // Selection\n  enableRowSelection = true,\n  rowSelection: externalRowSelection,\n  onRowSelectionChange: externalOnRowSelectionChange,\n  onSelectionChange,\n  \n  // Bulk operations\n  onBulkDelete,\n  bulkDeleteLabel = \"Delete\",\n  showBulkDelete = true,\n  \n  // Add operation\n  onAddNew,\n  onAddHover,\n  addButtonLabel = \"Add\",\n  showAddButton = true,\n  \n  // Bulk add operation\n  onBulkAdd,\n  bulkAddLabel = \"Bulk Add\",\n  showBulkAdd = true,\n  \n  // Download operation\n  downloadOptions,\n  \n  // Column control\n  columnVisibility: externalColumnVisibility,\n  onColumnVisibilityChange: externalOnColumnVisibilityChange,\n  \n  // Sorting\n  sorting: externalSorting,\n  onSortingChange: externalOnSortingChange,\n  defaultSorting = [],\n  \n  // Empty state\n  emptyMessage = \"No results\",\n  emptyComponent,\n  \n  // Confirmation dialog\n  deleteConfirmation,\n  \n  // Styles\n  className,\n  tableClassName,\n  \n  // Auto column sizing\n  enableAutoColumnSizing = false,\n}: UnifiedDataTableProps<TData>) {\n  const tActions = useTranslations(\"common.actions\")\n  const locale = useLocale()\n  \n  // Internal state\n  const [internalRowSelection, setInternalRowSelection] = React.useState<Record<string, boolean>>({})\n  const [internalColumnVisibility, setInternalColumnVisibility] = React.useState<VisibilityState>({})\n  const [internalSorting, setInternalSorting] = React.useState<SortingState>(defaultSorting)\n  const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>([])\n  const [columnSizing, setColumnSizing] = React.useState<ColumnSizingState>({})\n  const [autoSizingCalculated, setAutoSizingCalculated] = React.useState(false)\n  const [internalPagination, setInternalPagination] = React.useState<PaginationState>({\n    pageIndex: 0,\n    pageSize: 10,\n  })\n  \n  // Delete confirmation dialog state\n  const [deleteDialogOpen, setDeleteDialogOpen] = React.useState(false)\n\n  // Use external state or internal state\n  const rowSelection = externalRowSelection ?? internalRowSelection\n  const columnVisibility = externalColumnVisibility ?? internalColumnVisibility\n  const sorting = externalSorting ?? internalSorting\n  \n  // Determine whether to use external pagination control\n  const isExternalPagination = !!(externalPagination && (onPaginationChange || setExternalPagination))\n  const pagination = externalPagination ?? internalPagination\n  \n  // Use ref to store the latest pagination value to avoid closure issues\n  const paginationRef = React.useRef(pagination)\n  paginationRef.current = pagination\n  \n  // Pagination update handler\n  const handlePaginationChange = React.useCallback((updater: Updater<PaginationState>) => {\n    const currentPagination = paginationRef.current\n    const newPagination = typeof updater === 'function' ? updater(currentPagination) : updater\n    \n    // No change in value, don't update\n    if (newPagination.pageIndex === currentPagination.pageIndex && \n        newPagination.pageSize === currentPagination.pageSize) {\n      return\n    }\n    \n    if (isExternalPagination) {\n      // External pagination control\n      if (onPaginationChange) {\n        onPaginationChange(newPagination)\n      } else if (setExternalPagination) {\n        setExternalPagination(newPagination)\n      }\n    } else {\n      // Internal pagination control\n      setInternalPagination(newPagination)\n    }\n  }, [isExternalPagination, onPaginationChange, setExternalPagination])\n\n  // Handle state updates (supports Updater pattern)\n  const handleRowSelectionChange = (updater: Updater<Record<string, boolean>>) => {\n    const newValue = typeof updater === 'function' ? updater(rowSelection) : updater\n    if (externalOnRowSelectionChange) {\n      externalOnRowSelectionChange(newValue)\n    } else {\n      setInternalRowSelection(newValue)\n    }\n  }\n\n  const handleSortingChange = (updater: Updater<SortingState>) => {\n    const newValue = typeof updater === 'function' ? updater(sorting) : updater\n    if (externalOnSortingChange) {\n      externalOnSortingChange(newValue)\n    } else {\n      setInternalSorting(newValue)\n    }\n  }\n\n  const handleColumnVisibilityChange = (updater: Updater<VisibilityState>) => {\n    const newValue = typeof updater === 'function' ? updater(columnVisibility) : updater\n    if (externalOnColumnVisibilityChange) {\n      externalOnColumnVisibilityChange(newValue)\n    } else {\n      setInternalColumnVisibility(newValue)\n    }\n  }\n\n  // Filter valid data\n  const validData = React.useMemo(() => {\n    return (data || []).filter(item => item && typeof getRowId(item) !== 'undefined')\n  }, [data, getRowId])\n\n  // Auto column sizing: calculate optimal widths based on content\n  React.useEffect(() => {\n    if (!enableAutoColumnSizing || autoSizingCalculated || validData.length === 0) {\n      return\n    }\n    \n    // Build header labels from column meta\n    const headerLabels: Record<string, string> = {}\n    for (const col of columns) {\n      const colDef = col as { accessorKey?: string; id?: string; meta?: { title?: string } }\n      const colId = colDef.accessorKey || colDef.id\n      if (colId && colDef.meta?.title) {\n        headerLabels[colId] = colDef.meta.title\n      }\n    }\n    \n    const calculatedWidths = calculateColumnWidths({\n      data: validData as Record<string, unknown>[],\n      columns: columns as Array<{\n        accessorKey?: string\n        id?: string\n        size?: number\n        minSize?: number\n        maxSize?: number\n      }>,\n      headerLabels,\n      locale,\n    })\n    \n    if (Object.keys(calculatedWidths).length > 0) {\n      setColumnSizing(calculatedWidths)\n      setAutoSizingCalculated(true)\n    }\n  }, [enableAutoColumnSizing, autoSizingCalculated, validData, columns])\n\n  // Create table instance\n  const table = useReactTable({\n    data: validData,\n    columns,\n    state: {\n      sorting,\n      columnVisibility,\n      rowSelection,\n      columnFilters,\n      pagination,\n      columnSizing,\n    },\n    // Column resizing configuration - following TanStack Table official recommendations\n    enableColumnResizing: true,\n    columnResizeMode: 'onChange',\n    onColumnSizingChange: setColumnSizing,\n    // Default column configuration\n    defaultColumn: {\n      minSize: 50,\n      maxSize: 1000,\n    },\n    pageCount: paginationInfo?.totalPages ?? -1,\n    manualPagination: !!paginationInfo,\n    getRowId,\n    enableRowSelection,\n    onRowSelectionChange: handleRowSelectionChange,\n    onSortingChange: handleSortingChange,\n    onColumnFiltersChange: setColumnFilters,\n    onColumnVisibilityChange: handleColumnVisibilityChange,\n    onPaginationChange: handlePaginationChange,\n    getCoreRowModel: getCoreRowModel(),\n    getFilteredRowModel: getFilteredRowModel(),\n    getPaginationRowModel: getPaginationRowModel(),\n    getSortedRowModel: getSortedRowModel(),\n    getFacetedRowModel: getFacetedRowModel(),\n    getFacetedUniqueValues: getFacetedUniqueValues(),\n  })\n\n  /**\n   * Following TanStack Table's official high-performance approach:\n   * Calculate all column widths once at the table root element, store as CSS variables\n   * Avoid calling column.getSize() on every cell\n   */\n  const columnSizeVars = React.useMemo(() => {\n    const headers = table.getFlatHeaders()\n    const colSizes: Record<string, number> = {}\n    for (let i = 0; i < headers.length; i++) {\n      const header = headers[i]!\n      colSizes[`--header-${header.id}-size`] = header.getSize()\n      colSizes[`--col-${header.column.id}-size`] = header.column.getSize()\n    }\n    return colSizes\n  }, [table.getState().columnSizingInfo, table.getState().columnSizing])\n\n  // Listen for selected row changes\n  const prevRowSelectionRef = React.useRef<Record<string, boolean>>({})\n  React.useEffect(() => {\n    if (onSelectionChange) {\n      // Only call when rowSelection actually changes\n      const prevSelection = prevRowSelectionRef.current\n      const selectionChanged = Object.keys(rowSelection).length !== Object.keys(prevSelection).length ||\n        Object.keys(rowSelection).some(key => rowSelection[key] !== prevSelection[key])\n      \n      if (selectionChanged) {\n        prevRowSelectionRef.current = rowSelection\n        const selectedRows = table.getFilteredSelectedRowModel().rows.map(row => row.original)\n        onSelectionChange(selectedRows)\n      }\n    }\n  }, [rowSelection, onSelectionChange, table])\n\n  // Get selected row count\n  const selectedCount = table.getFilteredSelectedRowModel().rows.length\n\n  // Handle delete confirmation\n  const handleDeleteClick = () => {\n    if (deleteConfirmation) {\n      setDeleteDialogOpen(true)\n    } else {\n      onBulkDelete?.()\n    }\n  }\n\n  const handleDeleteConfirm = () => {\n    setDeleteDialogOpen(false)\n    onBulkDelete?.()\n  }\n\n  // Get column label - only use meta.title, force developers to explicitly define\n  const getColumnLabel = (column: { id: string; columnDef: { meta?: { title?: string } } }) => {\n    // Only use meta.title, return column.id if not defined (to help discover omissions)\n    return column.columnDef.meta?.title ?? column.id\n  }\n\n  // Render download button\n  const renderDownloadButton = () => {\n    if (!downloadOptions || downloadOptions.length === 0) return null\n\n    if (downloadOptions.length === 1) {\n      const option = downloadOptions[0]\n      const isDisabled = typeof option.disabled === 'function' \n        ? option.disabled(selectedCount) \n        : option.disabled\n      return (\n        <Button\n          variant=\"outline\"\n          size=\"sm\"\n          onClick={option.onClick}\n          disabled={isDisabled}\n        >\n          {option.icon || <IconDownload className=\"h-4 w-4\" />}\n          {option.label}\n        </Button>\n      )\n    }\n\n    return (\n      <DropdownMenu>\n        <DropdownMenuTrigger asChild>\n          <Button variant=\"outline\" size=\"sm\">\n            <IconDownload className=\"h-4 w-4\" />\n            {tActions(\"download\")}\n            <IconChevronDown className=\"h-4 w-4\" />\n          </Button>\n        </DropdownMenuTrigger>\n        <DropdownMenuContent align=\"end\">\n          {downloadOptions.map((option) => {\n            const isDisabled = typeof option.disabled === 'function'\n              ? option.disabled(selectedCount)\n              : option.disabled\n            return (\n              <DropdownMenuItem\n                key={option.key}\n                onClick={option.onClick}\n                disabled={isDisabled}\n              >\n                {option.icon || <IconDownload className=\"h-4 w-4\" />}\n                {option.label}\n              </DropdownMenuItem>\n            )\n          })}\n        </DropdownMenuContent>\n      </DropdownMenu>\n    )\n  }\n\n  return (\n    <div className={cn(\"w-full space-y-4\", className)}>\n      {/* Toolbar */}\n      {!hideToolbar && (\n        <DataTableToolbar\n          searchMode={searchMode}\n          searchPlaceholder={searchPlaceholder}\n          searchValue={searchValue}\n          onSearch={onSearch}\n          isSearching={isSearching}\n          filterFields={filterFields}\n          filterExamples={filterExamples}\n          leftContent={toolbarLeft}\n        >\n          {/* Column visibility control */}\n          <DropdownMenu>\n            <DropdownMenuTrigger asChild>\n              <Button variant=\"outline\" size=\"sm\">\n                <IconLayoutColumns className=\"h-4 w-4\" />\n                Columns\n                <IconChevronDown className=\"h-4 w-4\" />\n              </Button>\n            </DropdownMenuTrigger>\n            <DropdownMenuContent align=\"end\">\n              {table\n                .getAllColumns()\n                .filter((column) => typeof column.accessorFn !== \"undefined\" && column.getCanHide())\n                .map((column) => (\n                  <DropdownMenuCheckboxItem\n                    key={column.id}\n                    className=\"capitalize\"\n                    checked={column.getIsVisible()}\n                    onCheckedChange={(value) => column.toggleVisibility(!!value)}\n                  >\n                    {getColumnLabel(column)}\n                  </DropdownMenuCheckboxItem>\n                ))}\n            </DropdownMenuContent>\n          </DropdownMenu>\n\n          {toolbarRight}\n\n          {/* Download button */}\n          {renderDownloadButton()}\n\n          {/* Bulk delete button */}\n          {showBulkDelete && onBulkDelete && (\n            <Button\n              onClick={handleDeleteClick}\n              size=\"sm\"\n              variant=\"outline\"\n              disabled={selectedCount === 0}\n              className={\n                selectedCount === 0\n                  ? \"text-muted-foreground\"\n                  : \"text-destructive hover:text-destructive hover:bg-destructive/10\"\n              }\n            >\n              <IconTrash className=\"h-4 w-4\" />\n              {bulkDeleteLabel}\n            </Button>\n          )}\n\n          {/* Add button */}\n          {showAddButton && onAddNew && (\n            <Button onClick={onAddNew} onMouseEnter={onAddHover} size=\"sm\">\n              <IconPlus className=\"h-4 w-4\" />\n              {addButtonLabel}\n            </Button>\n          )}\n\n          {/* Bulk add button */}\n          {showBulkAdd && onBulkAdd && (\n            <Button onClick={onBulkAdd} size=\"sm\" variant=\"outline\">\n              <IconPlus className=\"h-4 w-4\" />\n              {bulkAddLabel}\n            </Button>\n          )}\n        </DataTableToolbar>\n      )}\n\n      {/* Table - Following TanStack Table official recommendations using CSS variables */}\n      <div className={cn(\"rounded-md border overflow-x-auto\", tableClassName)}>\n        <table \n          className=\"w-full caption-bottom text-sm\"\n          style={{ \n            ...columnSizeVars,\n            minWidth: table.getTotalSize(),\n          }}\n        >\n          <TableHeader>\n            {table.getHeaderGroups().map((headerGroup) => (\n              <TableRow key={headerGroup.id}>\n                {headerGroup.headers.map((header) => (\n                  <TableHead\n                    key={header.id}\n                    colSpan={header.colSpan}\n                    style={{ \n                      width: `calc(var(--header-${header.id}-size) * 1px)`,\n                      minWidth: `calc(var(--header-${header.id}-size) * 1px)`,\n                    }}\n                    className=\"relative group\"\n                  >\n                    {header.isPlaceholder\n                      ? null\n                      : flexRender(header.column.columnDef.header, header.getContext())}\n                    <ColumnResizer header={header} />\n                  </TableHead>\n                ))}\n              </TableRow>\n            ))}\n          </TableHeader>\n          <TableBody>\n            {table.getRowModel().rows?.length ? (\n              table.getRowModel().rows.map((row) => (\n                <TableRow\n                  key={row.id}\n                  data-state={row.getIsSelected() && \"selected\"}\n                  className=\"group\"\n                >\n                  {row.getVisibleCells().map((cell) => (\n                    <TableCell \n                      key={cell.id} \n                      style={{ \n                        width: `calc(var(--col-${cell.column.id}-size) * 1px)`,\n                        minWidth: `calc(var(--col-${cell.column.id}-size) * 1px)`,\n                      }}\n                    >\n                      {flexRender(cell.column.columnDef.cell, cell.getContext())}\n                    </TableCell>\n                  ))}\n                </TableRow>\n              ))\n            ) : (\n              <TableRow>\n                <TableCell colSpan={columns.length} className=\"h-24 text-center\">\n                  {emptyComponent || emptyMessage}\n                </TableCell>\n              </TableRow>\n            )}\n          </TableBody>\n        </table>\n      </div>\n\n      {/* Pagination */}\n      {!hidePagination && (\n        <DataTablePagination\n          table={table}\n          paginationInfo={paginationInfo}\n          pageSizeOptions={pageSizeOptions}\n        />\n      )}\n\n      {/* Delete confirmation dialog */}\n      {deleteConfirmation && (\n        <AlertDialog open={deleteDialogOpen} onOpenChange={setDeleteDialogOpen}>\n          <AlertDialogContent>\n            <AlertDialogHeader>\n              <AlertDialogTitle>\n                {deleteConfirmation.title || \"Confirm Delete\"}\n              </AlertDialogTitle>\n              <AlertDialogDescription>\n                {typeof deleteConfirmation.description === 'function'\n                  ? deleteConfirmation.description(selectedCount)\n                  : deleteConfirmation.description || `Are you sure you want to delete ${selectedCount} selected item(s)? This action cannot be undone.`}\n              </AlertDialogDescription>\n            </AlertDialogHeader>\n            <AlertDialogFooter>\n              <AlertDialogCancel>\n                {deleteConfirmation.cancelLabel || \"Cancel\"}\n              </AlertDialogCancel>\n              <AlertDialogAction\n                onClick={handleDeleteConfirm}\n                className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n              >\n                {deleteConfirmation.confirmLabel || \"Delete\"}\n              </AlertDialogAction>\n            </AlertDialogFooter>\n          </AlertDialogContent>\n        </AlertDialog>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/ui/data-table-skeleton.tsx",
    "content": "import { cn } from \"@/lib/utils\"\nimport { Skeleton } from \"@/components/ui/skeleton\"\n\ninterface DataTableSkeletonProps {\n  statsCount?: number\n  toolbarButtonCount?: number\n  rows?: number\n  columns?: number\n  withSearch?: boolean\n  paginationButtonCount?: number\n  withPadding?: boolean\n  className?: string\n}\n\n/**\n * Generic data table skeleton screen\n * Configurable stats cards, toolbar buttons, table columns, etc.\n */\nexport function DataTableSkeleton({\n  statsCount = 0,\n  toolbarButtonCount = 2,\n  rows = 5,\n  columns = 4,\n  withSearch = true,\n  paginationButtonCount = 3,\n  withPadding = true,\n  className,\n}: DataTableSkeletonProps) {\n  const containerClass = cn(\n    \"space-y-4\",\n    withPadding && \"px-4 lg:px-6\",\n    className\n  )\n\n  const toolbarNeeded = withSearch || toolbarButtonCount > 0\n\n  return (\n    <div className={containerClass}>\n      {statsCount > 0 && (\n        <div className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n          {Array.from({ length: statsCount }).map((_, index) => (\n            <div key={index} className=\"rounded-lg border bg-card p-4 shadow-sm space-y-2\">\n              <Skeleton className=\"h-4 w-24\" />\n              <Skeleton className=\"h-8 w-20\" />\n            </div>\n          ))}\n        </div>\n      )}\n\n      {toolbarNeeded && (\n        <>\n          <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n            {withSearch && <Skeleton className=\"h-9 w-full sm:max-w-sm\" />}\n            {toolbarButtonCount > 0 && (\n              <div className=\"flex items-center gap-2\">\n                {Array.from({ length: toolbarButtonCount }).map((_, index) => (\n                  <Skeleton key={index} className=\"h-9 w-24\" />\n                ))}\n              </div>\n            )}\n          </div>\n          <div\n            className=\"border-b mt-4\"\n            style={{ borderColor: \"var(--sidebar-border)\" }}\n          />\n        </>\n      )}\n\n      <div className=\"overflow-x-auto\">\n        <div\n          className=\"hidden md:flex items-center gap-4 border-b px-2 py-3\"\n          style={{ borderColor: \"var(--sidebar-border)\" }}\n        >\n          {Array.from({ length: columns }).map((_, index) => (\n            <Skeleton key={index} className=\"h-5 flex-1\" />\n          ))}\n        </div>\n\n        <div>\n          {Array.from({ length: rows }).map((_, rowIndex) => (\n            <div\n              key={rowIndex}\n              className={cn(\n                \"flex flex-col gap-3 border-b px-2 py-3 md:flex-row md:items-center md:justify-between\",\n                rowIndex === rows - 1 && \"border-b-0\"\n              )}\n              style={{ borderColor: rowIndex === rows - 1 ? \"transparent\" : \"var(--sidebar)\" }}\n            >\n              {Array.from({ length: Math.max(columns, 3) }).map((_, colIndex) => (\n                <Skeleton\n                  key={colIndex}\n                  className=\"h-5 w-full md:w-1/4\"\n                />\n              ))}\n            </div>\n          ))}\n        </div>\n      </div>\n\n      <div className=\"border-t border-border pt-4 flex flex-col gap-3 md:flex-row md:items-center md:justify-between\">\n        <Skeleton className=\"h-5 w-48\" />\n        <div className=\"flex items-center gap-2\">\n          {Array.from({ length: paginationButtonCount }).map((_, index) => (\n            <Skeleton key={index} className=\"h-8 w-10 rounded-full\" />\n          ))}\n        </div>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/ui/datetime-picker.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { ChevronDownIcon } from \"lucide-react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Calendar } from \"@/components/ui/calendar\"\nimport { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\nimport {\n  Popover,\n  PopoverContent,\n  PopoverTrigger,\n} from \"@/components/ui/popover\"\n\ninterface DateTimePickerProps {\n  value?: Date\n  onChange?: (date: Date | undefined) => void\n  label?: string\n  placeholder?: string\n  minDate?: Date\n}\n\nexport function DateTimePicker({\n  value,\n  onChange,\n  label = \"Execution Time\",\n  placeholder = \"Select date and time\",\n  minDate,\n}: DateTimePickerProps) {\n  const [open, setOpen] = React.useState(false)\n  const [date, setDate] = React.useState<Date | undefined>(value)\n  const [time, setTime] = React.useState<string>(\n    value ? `${String(value.getHours()).padStart(2, \"0\")}:${String(value.getMinutes()).padStart(2, \"0\")}` : \"02:00\"\n  )\n\n  // Merge date and time\n  const updateDateTime = React.useCallback((newDate: Date | undefined, newTime: string) => {\n    if (!newDate) {\n      onChange?.(undefined)\n      return\n    }\n\n    const [hours, minutes] = newTime.split(\":\").map(Number)\n    const dateTime = new Date(newDate)\n    dateTime.setHours(hours || 0, minutes || 0, 0, 0)\n    onChange?.(dateTime)\n  }, [onChange])\n\n  const handleDateChange = (newDate: Date | undefined) => {\n    setDate(newDate)\n    updateDateTime(newDate, time)\n    setOpen(false)\n  }\n\n  const handleTimeChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    setTime(e.target.value)\n    updateDateTime(date, e.target.value)\n  }\n\n  // Format display\n  const displayDate = date\n    ? date.toLocaleDateString(\"zh-CN\", {\n        year: \"numeric\",\n        month: \"2-digit\",\n        day: \"2-digit\",\n      })\n    : placeholder\n\n  return (\n    <div className=\"flex flex-col gap-3\">\n      {label && (\n        <Label className=\"px-1\">{label}</Label>\n      )}\n      <div className=\"flex gap-3\">\n        {/* Date selection */}\n        <Popover open={open} onOpenChange={setOpen}>\n          <PopoverTrigger asChild>\n            <Button\n              variant=\"outline\"\n              className=\"flex-1 justify-between font-normal\"\n            >\n              {displayDate}\n              <ChevronDownIcon className=\"h-4 w-4 opacity-50\" />\n            </Button>\n          </PopoverTrigger>\n          <PopoverContent className=\"w-auto overflow-hidden p-0\" align=\"start\">\n            <Calendar\n              mode=\"single\"\n              selected={date}\n              captionLayout=\"dropdown\"\n              onSelect={handleDateChange}\n              disabled={minDate ? { before: minDate } : undefined}\n            />\n          </PopoverContent>\n        </Popover>\n\n        {/* Time selection */}\n        <Input\n          type=\"time\"\n          value={time}\n          onChange={handleTimeChange}\n          className=\"w-28 bg-background appearance-none [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none\"\n        />\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/ui/dialog.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { XIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Dialog({\n  ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n  return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({\n  ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n  return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({\n  ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n  return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({\n  ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n  return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n  className,\n  ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n  return (\n    <DialogPrimitive.Overlay\n      data-slot=\"dialog-overlay\"\n      className={cn(\n        \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-background/80 backdrop-blur-sm\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction DialogContent({\n  className,\n  children,\n  showCloseButton = true,\n  ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n  showCloseButton?: boolean\n}) {\n  return (\n    <DialogPortal data-slot=\"dialog-portal\">\n      <DialogOverlay />\n      <DialogPrimitive.Content\n        data-slot=\"dialog-content\"\n        className={cn(\n          \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200\",\n          className\n        )}\n        {...props}\n      >\n        {children}\n        {showCloseButton && (\n          <DialogPrimitive.Close\n            data-slot=\"dialog-close\"\n            className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n          >\n            <XIcon />\n            <span className=\"sr-only\">Close</span>\n          </DialogPrimitive.Close>\n        )}\n      </DialogPrimitive.Content>\n    </DialogPortal>\n  )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"dialog-header\"\n      className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"dialog-footer\"\n      className={cn(\n        \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction DialogTitle({\n  className,\n  ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n  return (\n    <DialogPrimitive.Title\n      data-slot=\"dialog-title\"\n      className={cn(\"text-lg leading-none font-semibold\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction DialogDescription({\n  className,\n  ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n  return (\n    <DialogPrimitive.Description\n      data-slot=\"dialog-description\"\n      className={cn(\"text-muted-foreground text-sm\", className)}\n      {...props}\n    />\n  )\n}\n\nexport {\n  Dialog,\n  DialogClose,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogOverlay,\n  DialogPortal,\n  DialogTitle,\n  DialogTrigger,\n}\n"
  },
  {
    "path": "frontend/components/ui/drawer.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Drawer as DrawerPrimitive } from \"vaul\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Drawer({\n  ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Root>) {\n  return <DrawerPrimitive.Root data-slot=\"drawer\" {...props} />\n}\n\nfunction DrawerTrigger({\n  ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Trigger>) {\n  return <DrawerPrimitive.Trigger data-slot=\"drawer-trigger\" {...props} />\n}\n\nfunction DrawerPortal({\n  ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Portal>) {\n  return <DrawerPrimitive.Portal data-slot=\"drawer-portal\" {...props} />\n}\n\nfunction DrawerClose({\n  ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Close>) {\n  return <DrawerPrimitive.Close data-slot=\"drawer-close\" {...props} />\n}\n\nfunction DrawerOverlay({\n  className,\n  ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Overlay>) {\n  return (\n    <DrawerPrimitive.Overlay\n      data-slot=\"drawer-overlay\"\n      className={cn(\n        \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-background/80 backdrop-blur-sm\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction DrawerContent({\n  className,\n  children,\n  ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Content>) {\n  return (\n    <DrawerPortal data-slot=\"drawer-portal\">\n      <DrawerOverlay />\n      <DrawerPrimitive.Content\n        data-slot=\"drawer-content\"\n        className={cn(\n          \"group/drawer-content bg-background fixed z-50 flex h-auto flex-col\",\n          \"data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-lg data-[vaul-drawer-direction=top]:border-b\",\n          \"data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-lg data-[vaul-drawer-direction=bottom]:border-t\",\n          \"data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=right]:sm:max-w-sm\",\n          \"data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=left]:sm:max-w-sm\",\n          className\n        )}\n        {...props}\n      >\n        <div className=\"bg-muted mx-auto mt-4 hidden h-2 w-[100px] shrink-0 rounded-full group-data-[vaul-drawer-direction=bottom]/drawer-content:block\" />\n        {children}\n      </DrawerPrimitive.Content>\n    </DrawerPortal>\n  )\n}\n\nfunction DrawerHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"drawer-header\"\n      className={cn(\n        \"flex flex-col gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-1.5 md:text-left\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction DrawerFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"drawer-footer\"\n      className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction DrawerTitle({\n  className,\n  ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Title>) {\n  return (\n    <DrawerPrimitive.Title\n      data-slot=\"drawer-title\"\n      className={cn(\"text-foreground font-semibold\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction DrawerDescription({\n  className,\n  ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Description>) {\n  return (\n    <DrawerPrimitive.Description\n      data-slot=\"drawer-description\"\n      className={cn(\"text-muted-foreground text-sm\", className)}\n      {...props}\n    />\n  )\n}\n\nexport {\n  Drawer,\n  DrawerPortal,\n  DrawerOverlay,\n  DrawerTrigger,\n  DrawerClose,\n  DrawerContent,\n  DrawerHeader,\n  DrawerFooter,\n  DrawerTitle,\n  DrawerDescription,\n}\n"
  },
  {
    "path": "frontend/components/ui/dropdown-menu.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction DropdownMenu({\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n  return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n  return (\n    <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n  )\n}\n\nfunction DropdownMenuTrigger({\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n  return (\n    <DropdownMenuPrimitive.Trigger\n      data-slot=\"dropdown-menu-trigger\"\n      {...props}\n    />\n  )\n}\n\nfunction DropdownMenuContent({\n  className,\n  sideOffset = 4,\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n  return (\n    <DropdownMenuPrimitive.Portal>\n      <DropdownMenuPrimitive.Content\n        data-slot=\"dropdown-menu-content\"\n        sideOffset={sideOffset}\n        className={cn(\n          \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md\",\n          className\n        )}\n        {...props}\n      />\n    </DropdownMenuPrimitive.Portal>\n  )\n}\n\nfunction DropdownMenuGroup({\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n  return (\n    <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n  )\n}\n\nfunction DropdownMenuItem({\n  className,\n  inset,\n  variant = \"default\",\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n  inset?: boolean\n  variant?: \"default\" | \"destructive\"\n}) {\n  return (\n    <DropdownMenuPrimitive.Item\n      data-slot=\"dropdown-menu-item\"\n      data-inset={inset}\n      data-variant={variant}\n      className={cn(\n        \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-pointer items-center gap-1.5 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction DropdownMenuCheckboxItem({\n  className,\n  children,\n  checked,\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n  return (\n    <DropdownMenuPrimitive.CheckboxItem\n      data-slot=\"dropdown-menu-checkbox-item\"\n      className={cn(\n        \"focus:bg-accent focus:text-accent-foreground relative flex cursor-pointer items-center gap-1.5 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n        className\n      )}\n      checked={checked}\n      {...props}\n    >\n      <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n        <DropdownMenuPrimitive.ItemIndicator>\n          <CheckIcon className=\"size-4\" />\n        </DropdownMenuPrimitive.ItemIndicator>\n      </span>\n      {children}\n    </DropdownMenuPrimitive.CheckboxItem>\n  )\n}\n\nfunction DropdownMenuRadioGroup({\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n  return (\n    <DropdownMenuPrimitive.RadioGroup\n      data-slot=\"dropdown-menu-radio-group\"\n      {...props}\n    />\n  )\n}\n\nfunction DropdownMenuRadioItem({\n  className,\n  children,\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n  return (\n    <DropdownMenuPrimitive.RadioItem\n      data-slot=\"dropdown-menu-radio-item\"\n      className={cn(\n        \"focus:bg-accent focus:text-accent-foreground relative flex cursor-pointer items-center gap-1.5 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n        className\n      )}\n      {...props}\n    >\n      <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n        <DropdownMenuPrimitive.ItemIndicator>\n          <CircleIcon className=\"size-2 fill-current\" />\n        </DropdownMenuPrimitive.ItemIndicator>\n      </span>\n      {children}\n    </DropdownMenuPrimitive.RadioItem>\n  )\n}\n\nfunction DropdownMenuLabel({\n  className,\n  inset,\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n  inset?: boolean\n}) {\n  return (\n    <DropdownMenuPrimitive.Label\n      data-slot=\"dropdown-menu-label\"\n      data-inset={inset}\n      className={cn(\n        \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction DropdownMenuSeparator({\n  className,\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n  return (\n    <DropdownMenuPrimitive.Separator\n      data-slot=\"dropdown-menu-separator\"\n      className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction DropdownMenuShortcut({\n  className,\n  ...props\n}: React.ComponentProps<\"span\">) {\n  return (\n    <span\n      data-slot=\"dropdown-menu-shortcut\"\n      className={cn(\n        \"text-muted-foreground ml-auto text-xs tracking-widest\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction DropdownMenuSub({\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n  return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n  className,\n  inset,\n  children,\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n  inset?: boolean\n}) {\n  return (\n    <DropdownMenuPrimitive.SubTrigger\n      data-slot=\"dropdown-menu-sub-trigger\"\n      data-inset={inset}\n      className={cn(\n        \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8\",\n        className\n      )}\n      {...props}\n    >\n      {children}\n      <ChevronRightIcon className=\"ml-auto size-4\" />\n    </DropdownMenuPrimitive.SubTrigger>\n  )\n}\n\nfunction DropdownMenuSubContent({\n  className,\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n  return (\n    <DropdownMenuPrimitive.SubContent\n      data-slot=\"dropdown-menu-sub-content\"\n      className={cn(\n        \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nexport {\n  DropdownMenu,\n  DropdownMenuPortal,\n  DropdownMenuTrigger,\n  DropdownMenuContent,\n  DropdownMenuGroup,\n  DropdownMenuLabel,\n  DropdownMenuItem,\n  DropdownMenuCheckboxItem,\n  DropdownMenuRadioGroup,\n  DropdownMenuRadioItem,\n  DropdownMenuSeparator,\n  DropdownMenuShortcut,\n  DropdownMenuSub,\n  DropdownMenuSubTrigger,\n  DropdownMenuSubContent,\n}\n"
  },
  {
    "path": "frontend/components/ui/dropzone.tsx",
    "content": "'use client'\n\nimport { UploadIcon } from 'lucide-react'\nimport type { ReactNode } from 'react'\nimport { createContext, useContext } from 'react'\nimport type { DropEvent, DropzoneOptions, FileRejection } from 'react-dropzone'\nimport { useDropzone } from 'react-dropzone'\nimport { useTranslations } from 'next-intl'\nimport { Button } from '@/components/ui/button'\nimport { cn } from '@/lib/utils'\n\ntype DropzoneContextType = {\n  src?: File[]\n  accept?: DropzoneOptions['accept']\n  maxSize?: DropzoneOptions['maxSize']\n  minSize?: DropzoneOptions['minSize']\n  maxFiles?: DropzoneOptions['maxFiles']\n}\n\nconst renderBytes = (bytes: number) => {\n  const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB']\n  let size = bytes\n  let unitIndex = 0\n\n  while (size >= 1024 && unitIndex < units.length - 1) {\n    size /= 1024\n    unitIndex++\n  }\n\n  return `${size.toFixed(2)}${units[unitIndex]}`\n}\n\nconst DropzoneContext = createContext<DropzoneContextType | undefined>(\n  undefined\n)\n\nexport type DropzoneProps = Omit<DropzoneOptions, 'onDrop'> & {\n  src?: File[]\n  className?: string\n  onDrop?: (\n    acceptedFiles: File[],\n    fileRejections: FileRejection[],\n    event: DropEvent\n  ) => void\n  children?: ReactNode\n}\n\nexport const Dropzone = ({\n  accept,\n  maxFiles = 1,\n  maxSize,\n  minSize,\n  onDrop,\n  onError,\n  disabled,\n  src,\n  className,\n  children,\n  ...props\n}: DropzoneProps) => {\n  const { getRootProps, getInputProps, isDragActive } = useDropzone({\n    accept,\n    maxFiles,\n    maxSize,\n    minSize,\n    onError,\n    disabled,\n    onDrop: (acceptedFiles, fileRejections, event) => {\n      if (fileRejections.length > 0) {\n        const message = fileRejections.at(0)?.errors.at(0)?.message\n        onError?.(new Error(message))\n        return\n      }\n\n      onDrop?.(acceptedFiles, fileRejections, event)\n    },\n    ...props,\n  })\n\n  return (\n    <DropzoneContext.Provider\n      key={JSON.stringify(src)}\n      value={{ src, accept, maxSize, minSize, maxFiles }}\n    >\n      <Button\n        className={cn(\n          'relative h-auto w-full flex-col overflow-hidden p-8',\n          isDragActive && 'outline-none ring-2 ring-ring',\n          className\n        )}\n        disabled={disabled}\n        type=\"button\"\n        variant=\"outline\"\n        {...getRootProps()}\n      >\n        <input {...getInputProps()} disabled={disabled} />\n        {children}\n      </Button>\n    </DropzoneContext.Provider>\n  )\n}\n\nconst useDropzoneContext = () => {\n  const context = useContext(DropzoneContext)\n\n  if (!context) {\n    throw new Error('useDropzoneContext must be used within a Dropzone')\n  }\n\n  return context\n}\n\nexport type DropzoneContentProps = {\n  children?: ReactNode\n  className?: string\n}\n\nconst maxLabelItems = 3\n\nexport const DropzoneContent = ({\n  children,\n  className,\n}: DropzoneContentProps) => {\n  const { src } = useDropzoneContext()\n  const t = useTranslations(\"common.dropzone\")\n\n  if (!src || src.length === 0) {\n    return null\n  }\n\n  if (children) {\n    return children\n  }\n\n  return (\n    <div className={cn('flex flex-col items-center justify-center', className)}>\n      <div className=\"flex size-8 items-center justify-center rounded-md bg-muted text-muted-foreground\">\n        <UploadIcon size={16} />\n      </div>\n      <p className=\"my-2 w-full truncate font-medium text-sm\">\n        {src.length > maxLabelItems\n          ? t(\"moreFiles\", { files: src.slice(0, maxLabelItems).map((file) => file.name).join(', '), count: src.length - maxLabelItems })\n          : src.map((file) => file.name).join(', ')}\n      </p>\n      <p className=\"w-full text-wrap text-muted-foreground text-xs\">\n        {t(\"dragOrClickReplace\")}\n      </p>\n    </div>\n  )\n}\n\nexport type DropzoneEmptyStateProps = {\n  children?: ReactNode\n  className?: string\n}\n\nexport const DropzoneEmptyState = ({\n  children,\n  className,\n}: DropzoneEmptyStateProps) => {\n  const { src, accept, maxSize, minSize, maxFiles } = useDropzoneContext()\n  const t = useTranslations(\"common.dropzone\")\n\n  if (src && src.length > 0) {\n    return null\n  }\n\n  if (children) {\n    return children\n  }\n\n  let caption = ''\n\n  if (accept) {\n    caption += t(\"supports\") + ' '\n    caption += Object.keys(accept).join(', ')\n  }\n\n  if (minSize && maxSize) {\n    caption += ` ${t(\"sizeBetween\", { min: renderBytes(minSize), max: renderBytes(maxSize) })}`\n  } else if (minSize) {\n    caption += ` ${t(\"minimum\")} ${renderBytes(minSize)}`\n  } else if (maxSize) {\n    caption += ` ${t(\"maximum\")} ${renderBytes(maxSize)}`\n  }\n\n  return (\n    <div className={cn('flex flex-col items-center justify-center', className)}>\n      <div className=\"flex size-8 items-center justify-center rounded-md bg-muted text-muted-foreground\">\n        <UploadIcon size={16} />\n      </div>\n      <p className=\"my-2 w-full truncate text-wrap font-medium text-sm\">\n        {maxFiles === 1 ? t(\"uploadFile\") : t(\"uploadFiles\")}\n      </p>\n      <p className=\"w-full truncate text-wrap text-muted-foreground text-xs\">\n        {t(\"dragOrClick\")}\n      </p>\n      {caption && (\n        <p className=\"text-wrap text-muted-foreground text-xs mt-1\">{caption}</p>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/ui/field.tsx",
    "content": "\"use client\"\n\nimport { useMemo } from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Label } from \"@/components/ui/label\"\nimport { Separator } from \"@/components/ui/separator\"\n\nfunction FieldSet({ className, ...props }: React.ComponentProps<\"fieldset\">) {\n  return (\n    <fieldset\n      data-slot=\"field-set\"\n      className={cn(\n        \"flex flex-col gap-6\",\n        \"has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction FieldLegend({\n  className,\n  variant = \"legend\",\n  ...props\n}: React.ComponentProps<\"legend\"> & { variant?: \"legend\" | \"label\" }) {\n  return (\n    <legend\n      data-slot=\"field-legend\"\n      data-variant={variant}\n      className={cn(\n        \"mb-3 font-medium\",\n        \"data-[variant=legend]:text-base\",\n        \"data-[variant=label]:text-sm\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction FieldGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"field-group\"\n      className={cn(\n        \"group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nconst fieldVariants = cva(\n  \"group/field flex w-full gap-3 data-[invalid=true]:text-destructive\",\n  {\n    variants: {\n      orientation: {\n        vertical: [\"flex-col [&>*]:w-full [&>.sr-only]:w-auto\"],\n        horizontal: [\n          \"flex-row items-center\",\n          \"[&>[data-slot=field-label]]:flex-auto\",\n          \"has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n        ],\n        responsive: [\n          \"flex-col [&>*]:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto\",\n          \"@md/field-group:[&>[data-slot=field-label]]:flex-auto\",\n          \"@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n        ],\n      },\n    },\n    defaultVariants: {\n      orientation: \"vertical\",\n    },\n  }\n)\n\nfunction Field({\n  className,\n  orientation = \"vertical\",\n  ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof fieldVariants>) {\n  return (\n    <div\n      role=\"group\"\n      data-slot=\"field\"\n      data-orientation={orientation}\n      className={cn(fieldVariants({ orientation }), className)}\n      {...props}\n    />\n  )\n}\n\nfunction FieldContent({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"field-content\"\n      className={cn(\n        \"group/field-content flex flex-1 flex-col gap-1.5 leading-snug\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction FieldLabel({\n  className,\n  ...props\n}: React.ComponentProps<typeof Label>) {\n  return (\n    <Label\n      data-slot=\"field-label\"\n      className={cn(\n        \"group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50\",\n        \"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4\",\n        \"has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary dark:has-data-[state=checked]:bg-primary/10\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction FieldTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"field-label\"\n      className={cn(\n        \"flex w-fit items-center gap-2 text-sm leading-snug font-medium group-data-[disabled=true]/field:opacity-50\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction FieldDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n  return (\n    <p\n      data-slot=\"field-description\"\n      className={cn(\n        \"text-muted-foreground text-sm leading-normal font-normal group-has-[[data-orientation=horizontal]]/field:text-balance\",\n        \"last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5\",\n        \"[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction FieldSeparator({\n  children,\n  className,\n  ...props\n}: React.ComponentProps<\"div\"> & {\n  children?: React.ReactNode\n}) {\n  return (\n    <div\n      data-slot=\"field-separator\"\n      data-content={!!children}\n      className={cn(\n        \"relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2\",\n        className\n      )}\n      {...props}\n    >\n      <Separator className=\"absolute inset-0 top-1/2\" />\n      {children && (\n        <span\n          className=\"bg-background text-muted-foreground relative mx-auto block w-fit px-2\"\n          data-slot=\"field-separator-content\"\n        >\n          {children}\n        </span>\n      )}\n    </div>\n  )\n}\n\nfunction FieldError({\n  className,\n  children,\n  errors,\n  ...props\n}: React.ComponentProps<\"div\"> & {\n  errors?: Array<{ message?: string } | undefined>\n}) {\n  const content = useMemo(() => {\n    if (children) {\n      return children\n    }\n\n    if (!errors?.length) {\n      return null\n    }\n\n    const uniqueErrors = [\n      ...new Map(errors.map((error) => [error?.message, error])).values(),\n    ]\n\n    if (uniqueErrors?.length == 1) {\n      return uniqueErrors[0]?.message\n    }\n\n    return (\n      <ul className=\"ml-4 flex list-disc flex-col gap-1\">\n        {uniqueErrors.map(\n          (error, index) =>\n            error?.message && <li key={index}>{error.message}</li>\n        )}\n      </ul>\n    )\n  }, [children, errors])\n\n  if (!content) {\n    return null\n  }\n\n  return (\n    <div\n      role=\"alert\"\n      data-slot=\"field-error\"\n      className={cn(\"text-destructive text-sm font-normal\", className)}\n      {...props}\n    >\n      {content}\n    </div>\n  )\n}\n\nexport {\n  Field,\n  FieldLabel,\n  FieldDescription,\n  FieldError,\n  FieldGroup,\n  FieldLegend,\n  FieldSeparator,\n  FieldSet,\n  FieldContent,\n  FieldTitle,\n}\n"
  },
  {
    "path": "frontend/components/ui/form.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport {\n  Controller,\n  FormProvider,\n  useFormContext,\n  useFormState,\n  type ControllerProps,\n  type FieldPath,\n  type FieldValues,\n} from \"react-hook-form\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Label } from \"@/components/ui/label\"\n\nconst Form = FormProvider\n\ntype FormFieldContextValue<\n  TFieldValues extends FieldValues = FieldValues,\n  TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n  name: TName\n}\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n  {} as FormFieldContextValue\n)\n\nconst FormField = <\n  TFieldValues extends FieldValues = FieldValues,\n  TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n  ...props\n}: ControllerProps<TFieldValues, TName>) => {\n  return (\n    <FormFieldContext.Provider value={{ name: props.name }}>\n      <Controller {...props} />\n    </FormFieldContext.Provider>\n  )\n}\n\nconst useFormField = () => {\n  const fieldContext = React.useContext(FormFieldContext)\n  const itemContext = React.useContext(FormItemContext)\n  const { getFieldState } = useFormContext()\n  const formState = useFormState({ name: fieldContext.name })\n  const fieldState = getFieldState(fieldContext.name, formState)\n\n  if (!fieldContext) {\n    throw new Error(\"useFormField should be used within <FormField>\")\n  }\n\n  const { id } = itemContext\n\n  return {\n    id,\n    name: fieldContext.name,\n    formItemId: `${id}-form-item`,\n    formDescriptionId: `${id}-form-item-description`,\n    formMessageId: `${id}-form-item-message`,\n    ...fieldState,\n  }\n}\n\ntype FormItemContextValue = {\n  id: string\n}\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n  {} as FormItemContextValue\n)\n\nfunction FormItem({ className, ...props }: React.ComponentProps<\"div\">) {\n  const id = React.useId()\n\n  return (\n    <FormItemContext.Provider value={{ id }}>\n      <div\n        data-slot=\"form-item\"\n        className={cn(\"grid gap-2\", className)}\n        {...props}\n      />\n    </FormItemContext.Provider>\n  )\n}\n\nfunction FormLabel({\n  className,\n  ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n  const { error, formItemId } = useFormField()\n\n  return (\n    <Label\n      data-slot=\"form-label\"\n      data-error={!!error}\n      className={cn(\"data-[error=true]:text-destructive\", className)}\n      htmlFor={formItemId}\n      {...props}\n    />\n  )\n}\n\nfunction FormControl({ ...props }: React.ComponentProps<typeof Slot>) {\n  const { error, formItemId, formDescriptionId, formMessageId } = useFormField()\n\n  return (\n    <Slot\n      data-slot=\"form-control\"\n      id={formItemId}\n      aria-describedby={\n        !error\n          ? `${formDescriptionId}`\n          : `${formDescriptionId} ${formMessageId}`\n      }\n      aria-invalid={!!error}\n      {...props}\n    />\n  )\n}\n\nfunction FormDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n  const { formDescriptionId } = useFormField()\n\n  return (\n    <p\n      data-slot=\"form-description\"\n      id={formDescriptionId}\n      className={cn(\"text-muted-foreground text-sm\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction FormMessage({ className, ...props }: React.ComponentProps<\"p\">) {\n  const { error, formMessageId } = useFormField()\n  const body = error ? String(error?.message ?? \"\") : props.children\n\n  if (!body) {\n    return null\n  }\n\n  return (\n    <p\n      data-slot=\"form-message\"\n      id={formMessageId}\n      className={cn(\"text-destructive text-sm\", className)}\n      {...props}\n    >\n      {body}\n    </p>\n  )\n}\n\nexport {\n  useFormField,\n  Form,\n  FormItem,\n  FormLabel,\n  FormControl,\n  FormDescription,\n  FormMessage,\n  FormField,\n}\n"
  },
  {
    "path": "frontend/components/ui/hover-card.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as HoverCardPrimitive from \"@radix-ui/react-hover-card\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst HoverCard = HoverCardPrimitive.Root\n\nconst HoverCardTrigger = HoverCardPrimitive.Trigger\n\nconst HoverCardContent = React.forwardRef<\n  React.ElementRef<typeof HoverCardPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof HoverCardPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n  <HoverCardPrimitive.Content\n    ref={ref}\n    align={align}\n    sideOffset={sideOffset}\n    className={cn(\n      \"z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n      className\n    )}\n    {...props}\n  />\n))\nHoverCardContent.displayName = HoverCardPrimitive.Content.displayName\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent }\n"
  },
  {
    "path": "frontend/components/ui/input.tsx",
    "content": "import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n  return (\n    <input\n      type={type}\n      data-slot=\"input\"\n      className={cn(\n        \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground bg-background dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border px-3 py-1 text-base shadow-xs transition-all outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n        \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n        \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nexport { Input }\n"
  },
  {
    "path": "frontend/components/ui/label.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Label({\n  className,\n  ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n  return (\n    <LabelPrimitive.Root\n      data-slot=\"label\"\n      className={cn(\n        \"flex items-center gap-1.5 text-sm leading-none font-medium select-none cursor-pointer group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nexport { Label }\n"
  },
  {
    "path": "frontend/components/ui/master-detail-skeleton.tsx",
    "content": "import { Skeleton } from \"@/components/ui/skeleton\"\nimport { Separator } from \"@/components/ui/separator\"\n\ninterface MasterDetailSkeletonProps {\n  /** Number of items in the left list */\n  listItemCount?: number\n  /** Whether to show search box */\n  withSearch?: boolean\n  /** Page title */\n  title?: string\n}\n\n/**\n * Master-detail layout skeleton screen\n * Suitable for scan engines, dictionary management, Nuclei templates and other pages\n */\nexport function MasterDetailSkeleton({\n  listItemCount = 5,\n  withSearch = true,\n  title,\n}: MasterDetailSkeletonProps) {\n  return (\n    <div className=\"flex flex-col h-full\">\n      {/* Header */}\n      <div className=\"flex items-center justify-between gap-4 px-4 py-4 lg:px-6\">\n        {title ? (\n          <h1 className=\"text-2xl font-bold shrink-0\">{title}</h1>\n        ) : (\n          <Skeleton className=\"h-8 w-32\" />\n        )}\n        {withSearch && (\n          <div className=\"flex items-center gap-2 flex-1 max-w-md\">\n            <Skeleton className=\"h-9 w-full\" />\n          </div>\n        )}\n        <Skeleton className=\"h-9 w-24\" />\n      </div>\n\n      <Separator />\n\n      {/* Main content */}\n      <div className=\"flex flex-1 min-h-0\">\n        {/* Left list */}\n        <div className=\"w-72 lg:w-80 border-r flex flex-col\">\n          <div className=\"px-4 py-3 border-b\">\n            <Skeleton className=\"h-4 w-24\" />\n          </div>\n          <div className=\"p-2 space-y-2\">\n            {Array.from({ length: listItemCount }).map((_, index) => (\n              <div key={index} className=\"rounded-lg px-3 py-2.5 space-y-1.5\">\n                <Skeleton className=\"h-4 w-3/4\" />\n                <Skeleton className=\"h-3 w-1/2\" />\n              </div>\n            ))}\n          </div>\n        </div>\n\n        {/* Right details */}\n        <div className=\"flex-1 flex flex-col min-w-0\">\n          <div className=\"px-6 py-4 border-b\">\n            <div className=\"flex items-start gap-3\">\n              <Skeleton className=\"h-10 w-10 rounded-lg\" />\n              <div className=\"flex-1 space-y-2\">\n                <Skeleton className=\"h-5 w-48\" />\n                <Skeleton className=\"h-4 w-32\" />\n              </div>\n            </div>\n          </div>\n          <div className=\"flex-1 p-6 space-y-6\">\n            <div className=\"rounded-lg border p-4 space-y-3\">\n              <div className=\"grid grid-cols-2 gap-4\">\n                <div className=\"space-y-2\">\n                  <Skeleton className=\"h-3 w-16\" />\n                  <Skeleton className=\"h-6 w-24\" />\n                </div>\n                <div className=\"space-y-2\">\n                  <Skeleton className=\"h-3 w-16\" />\n                  <Skeleton className=\"h-6 w-24\" />\n                </div>\n              </div>\n              <Separator />\n              <div className=\"space-y-3\">\n                <Skeleton className=\"h-4 w-full\" />\n                <Skeleton className=\"h-4 w-3/4\" />\n              </div>\n            </div>\n          </div>\n          <div className=\"px-6 py-4 border-t flex items-center gap-2\">\n            <Skeleton className=\"h-8 w-24\" />\n            <div className=\"flex-1\" />\n            <Skeleton className=\"h-8 w-20\" />\n          </div>\n        </div>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/ui/popover.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Popover = PopoverPrimitive.Root\n\nconst PopoverTrigger = PopoverPrimitive.Trigger\n\nconst PopoverAnchor = PopoverPrimitive.Anchor\n\nconst PopoverContent = React.forwardRef<\n  React.ElementRef<typeof PopoverPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> & {\n    container?: HTMLElement | null\n  }\n>(({ className, align = \"center\", sideOffset = 4, container, ...props }, ref) => (\n  <PopoverPrimitive.Portal container={container ?? undefined}>\n    <PopoverPrimitive.Content\n      ref={ref}\n      align={align}\n      sideOffset={sideOffset}\n      className={cn(\n        \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n        className\n      )}\n      {...props}\n    />\n  </PopoverPrimitive.Portal>\n))\nPopoverContent.displayName = PopoverPrimitive.Content.displayName\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n"
  },
  {
    "path": "frontend/components/ui/progress.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Progress({\n  className,\n  value,\n  ...props\n}: React.ComponentProps<typeof ProgressPrimitive.Root>) {\n  return (\n    <ProgressPrimitive.Root\n      data-slot=\"progress\"\n      className={cn(\n        \"bg-primary/20 relative h-2 w-full overflow-hidden rounded-full\",\n        className\n      )}\n      {...props}\n    >\n      <ProgressPrimitive.Indicator\n        data-slot=\"progress-indicator\"\n        className=\"bg-primary h-full w-full flex-1 transition-all\"\n        style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n      />\n    </ProgressPrimitive.Root>\n  )\n}\n\nexport { Progress }\n"
  },
  {
    "path": "frontend/components/ui/radio-group.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\"\nimport { CircleIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction RadioGroup({\n  className,\n  ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {\n  return (\n    <RadioGroupPrimitive.Root\n      data-slot=\"radio-group\"\n      className={cn(\"grid gap-3\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction RadioGroupItem({\n  className,\n  ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {\n  return (\n    <RadioGroupPrimitive.Item\n      data-slot=\"radio-group-item\"\n      className={cn(\n        \"border-input bg-background text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n        className\n      )}\n      {...props}\n    >\n      <RadioGroupPrimitive.Indicator\n        data-slot=\"radio-group-indicator\"\n        className=\"relative flex items-center justify-center\"\n      >\n        <CircleIcon className=\"fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2\" />\n      </RadioGroupPrimitive.Indicator>\n    </RadioGroupPrimitive.Item>\n  )\n}\n\nexport { RadioGroup, RadioGroupItem }\n"
  },
  {
    "path": "frontend/components/ui/scroll-area.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst ScrollArea = React.forwardRef<\n  React.ElementRef<typeof ScrollAreaPrimitive.Root>,\n  React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n  <ScrollAreaPrimitive.Root\n    ref={ref}\n    className={cn(\"relative overflow-hidden\", className)}\n    {...props}\n  >\n    <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n      {children}\n    </ScrollAreaPrimitive.Viewport>\n    <ScrollBar />\n    <ScrollAreaPrimitive.Corner />\n  </ScrollAreaPrimitive.Root>\n))\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName\n\nconst ScrollBar = React.forwardRef<\n  React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n  React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>\n>(({ className, orientation = \"vertical\", ...props }, ref) => (\n  <ScrollAreaPrimitive.ScrollAreaScrollbar\n    ref={ref}\n    orientation={orientation}\n    className={cn(\n      \"flex touch-none select-none transition-colors\",\n      orientation === \"vertical\" &&\n        \"h-full w-2.5 border-l border-l-transparent p-[1px]\",\n      orientation === \"horizontal\" &&\n        \"h-2.5 flex-col border-t border-t-transparent p-[1px]\",\n      className\n    )}\n    {...props}\n  >\n    <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-border\" />\n  </ScrollAreaPrimitive.ScrollAreaScrollbar>\n))\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName\n\nexport { ScrollArea, ScrollBar }\n"
  },
  {
    "path": "frontend/components/ui/select.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Select({\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n  return <SelectPrimitive.Root data-slot=\"select\" {...props} />\n}\n\nfunction SelectGroup({\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n  return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\nfunction SelectValue({\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n  return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\n}\n\nfunction SelectTrigger({\n  className,\n  size = \"default\",\n  children,\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n  size?: \"sm\" | \"default\"\n}) {\n  return (\n    <SelectPrimitive.Trigger\n      data-slot=\"select-trigger\"\n      data-size={size}\n      className={cn(\n        \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive bg-background dark:bg-input/30 hover:bg-accent/50 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n        className\n      )}\n      {...props}\n    >\n      {children}\n      <SelectPrimitive.Icon asChild>\n        <ChevronDownIcon className=\"size-4 opacity-50\" />\n      </SelectPrimitive.Icon>\n    </SelectPrimitive.Trigger>\n  )\n}\n\nfunction SelectContent({\n  className,\n  children,\n  position = \"popper\",\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n  return (\n    <SelectPrimitive.Portal>\n      <SelectPrimitive.Content\n        data-slot=\"select-content\"\n        className={cn(\n          \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\n          position === \"popper\" &&\n            \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n          className\n        )}\n        position={position}\n        {...props}\n      >\n        <SelectScrollUpButton />\n        <SelectPrimitive.Viewport\n          className={cn(\n            \"p-1\",\n            position === \"popper\" &&\n              \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\"\n          )}\n        >\n          {children}\n        </SelectPrimitive.Viewport>\n        <SelectScrollDownButton />\n      </SelectPrimitive.Content>\n    </SelectPrimitive.Portal>\n  )\n}\n\nfunction SelectLabel({\n  className,\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n  return (\n    <SelectPrimitive.Label\n      data-slot=\"select-label\"\n      className={cn(\"text-muted-foreground px-2 py-1.5 text-xs\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction SelectItem({\n  className,\n  children,\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n  return (\n    <SelectPrimitive.Item\n      data-slot=\"select-item\"\n      className={cn(\n        \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-pointer items-center gap-1.5 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-1.5\",\n        className\n      )}\n      {...props}\n    >\n      <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n        <SelectPrimitive.ItemIndicator>\n          <CheckIcon className=\"size-4\" />\n        </SelectPrimitive.ItemIndicator>\n      </span>\n      <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n    </SelectPrimitive.Item>\n  )\n}\n\nfunction SelectSeparator({\n  className,\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n  return (\n    <SelectPrimitive.Separator\n      data-slot=\"select-separator\"\n      className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction SelectScrollUpButton({\n  className,\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n  return (\n    <SelectPrimitive.ScrollUpButton\n      data-slot=\"select-scroll-up-button\"\n      className={cn(\n        \"flex cursor-default items-center justify-center py-1\",\n        className\n      )}\n      {...props}\n    >\n      <ChevronUpIcon className=\"size-4\" />\n    </SelectPrimitive.ScrollUpButton>\n  )\n}\n\nfunction SelectScrollDownButton({\n  className,\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n  return (\n    <SelectPrimitive.ScrollDownButton\n      data-slot=\"select-scroll-down-button\"\n      className={cn(\n        \"flex cursor-default items-center justify-center py-1\",\n        className\n      )}\n      {...props}\n    >\n      <ChevronDownIcon className=\"size-4\" />\n    </SelectPrimitive.ScrollDownButton>\n  )\n}\n\nexport {\n  Select,\n  SelectContent,\n  SelectGroup,\n  SelectItem,\n  SelectLabel,\n  SelectScrollDownButton,\n  SelectScrollUpButton,\n  SelectSeparator,\n  SelectTrigger,\n  SelectValue,\n}\n"
  },
  {
    "path": "frontend/components/ui/separator.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Separator({\n  className,\n  orientation = \"horizontal\",\n  decorative = true,\n  ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n  return (\n    <SeparatorPrimitive.Root\n      data-slot=\"separator\"\n      decorative={decorative}\n      orientation={orientation}\n      className={cn(\n        \"bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nexport { Separator }\n"
  },
  {
    "path": "frontend/components/ui/shadcn-io/banner/index.tsx",
    "content": "'use client';\n\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { type LucideIcon, XIcon } from 'lucide-react';\nimport {\n  type ComponentProps,\n  createContext,\n  type HTMLAttributes,\n  type MouseEventHandler,\n  useContext,\n} from 'react';\nimport { Button } from '@/components/ui/button';\nimport { cn } from '@/lib/utils';\n\ntype BannerContextProps = {\n  show: boolean;\n  setShow: (show: boolean) => void;\n};\n\nexport const BannerContext = createContext<BannerContextProps>({\n  show: true,\n  setShow: () => {},\n});\n\nexport type BannerProps = HTMLAttributes<HTMLDivElement> & {\n  visible?: boolean;\n  defaultVisible?: boolean;\n  onClose?: () => void;\n  inset?: boolean;\n};\n\nexport const Banner = ({\n  children,\n  visible,\n  defaultVisible = true,\n  onClose,\n  className,\n  inset = false,\n  ...props\n}: BannerProps) => {\n  const [show, setShow] = useControllableState({\n    defaultProp: defaultVisible,\n    prop: visible,\n    onChange: onClose,\n  });\n\n  if (!show) {\n    return null;\n  }\n\n  return (\n    <BannerContext.Provider value={{ show, setShow }}>\n      <div\n        className={cn(\n          'flex w-full items-center justify-between gap-2 bg-primary px-4 py-2 text-primary-foreground',\n          inset && 'rounded-lg',\n          className\n        )}\n        {...(props as any)}\n      >\n        {children}\n      </div>\n    </BannerContext.Provider>\n  );\n};\n\nexport type BannerIconProps = HTMLAttributes<HTMLDivElement> & {\n  icon: LucideIcon;\n};\n\nexport const BannerIcon = ({\n  icon: Icon,\n  className,\n  ...props\n}: BannerIconProps) => (\n  <div\n    className={cn(\n      'rounded-full border border-background/20 bg-background/10 p-1 shadow-sm',\n      className\n    )}\n    {...(props as any)}\n  >\n    <Icon size={16} />\n  </div>\n);\n\nexport type BannerTitleProps = HTMLAttributes<HTMLParagraphElement>;\n\nexport const BannerTitle = ({ className, ...props }: BannerTitleProps) => (\n  <p className={cn('flex-1 text-sm', className)} {...(props as any)} />\n);\n\nexport type BannerActionProps = ComponentProps<typeof Button>;\n\nexport const BannerAction = ({\n  variant = 'outline',\n  size = 'sm',\n  className,\n  ...props\n}: BannerActionProps) => (\n  <Button\n    className={cn(\n      'shrink-0 bg-transparent hover:bg-background/10 hover:text-background',\n      className\n    )}\n    size={size}\n    variant={variant}\n    {...(props as any)}\n  />\n);\n\nexport type BannerCloseProps = ComponentProps<typeof Button>;\n\nexport const BannerClose = ({\n  variant = 'ghost',\n  size = 'icon',\n  onClick,\n  className,\n  ...props\n}: BannerCloseProps) => {\n  const { setShow } = useContext(BannerContext);\n\n  const handleClick: MouseEventHandler<HTMLButtonElement> = (e) => {\n    setShow(false);\n    onClick?.(e);\n  };\n\n  return (\n    <Button\n      className={cn(\n        'shrink-0 bg-transparent hover:bg-background/10 hover:text-background',\n        className\n      )}\n      onClick={handleClick}\n      size={size}\n      variant={variant}\n      {...(props as any)}\n    >\n      <XIcon size={18} />\n    </Button>\n  );\n};\n"
  },
  {
    "path": "frontend/components/ui/shadcn-io/status/index.tsx",
    "content": "import type { ComponentProps, HTMLAttributes } from 'react';\nimport { Badge } from '@/components/ui/badge';\nimport { cn } from '@/lib/utils';\n\nexport type StatusProps = ComponentProps<typeof Badge> & {\n  status: 'online' | 'offline' | 'maintenance' | 'degraded';\n};\n\n// GitHub-style status color configuration\nconst statusStyles = {\n  online: 'bg-[#238636]/10 text-[#238636] border-[#238636]/20 dark:text-[#3fb950]',\n  offline: 'bg-[#da3633]/10 text-[#da3633] border-[#da3633]/20 dark:text-[#f85149]',\n  maintenance: 'bg-[#848d97]/10 text-[#848d97] border-[#848d97]/20',\n  degraded: 'bg-[#d29922]/10 text-[#d29922] border-[#d29922]/20',\n};\n\nexport const Status = ({ className, status, ...props }: StatusProps) => (\n  <Badge\n    className={cn('flex items-center gap-2', 'group', status, statusStyles[status], className)}\n    variant=\"outline\"\n    {...(props as any)}\n  />\n);\n\nexport type StatusIndicatorProps = HTMLAttributes<HTMLSpanElement>;\n\nexport const StatusIndicator = ({\n  className,\n  ...props\n}: StatusIndicatorProps) => (\n  <span className={cn('relative flex h-2 w-2', className)} {...(props as any)}>\n    <span\n      className={cn(\n        'absolute inline-flex h-full w-full animate-ping rounded-full opacity-75',\n        'group-[.online]:bg-[#238636] dark:group-[.online]:bg-[#3fb950]',\n        'group-[.offline]:bg-[#da3633] dark:group-[.offline]:bg-[#f85149]',\n        'group-[.maintenance]:bg-[#848d97]',\n        'group-[.degraded]:bg-[#d29922]'\n      )}\n    />\n    <span\n      className={cn(\n        'relative inline-flex h-2 w-2 rounded-full',\n        'group-[.online]:bg-[#238636] dark:group-[.online]:bg-[#3fb950]',\n        'group-[.offline]:bg-[#da3633] dark:group-[.offline]:bg-[#f85149]',\n        'group-[.maintenance]:bg-[#848d97]',\n        'group-[.degraded]:bg-[#d29922]'\n      )}\n    />\n  </span>\n);\n\nexport type StatusLabelProps = HTMLAttributes<HTMLSpanElement>;\n\nexport const StatusLabel = ({\n  className,\n  children,\n  ...props\n}: StatusLabelProps) => (\n  <span className={cn(className)} {...(props as any)}>\n    {children ?? (\n      <>\n        <span className=\"hidden group-[.online]:block\">Online</span>\n        <span className=\"hidden group-[.offline]:block\">Offline</span>\n        <span className=\"hidden group-[.maintenance]:block\">Maintenance</span>\n        <span className=\"hidden group-[.degraded]:block\">Degraded</span>\n      </>\n    )}\n  </span>\n);\n"
  },
  {
    "path": "frontend/components/ui/sheet.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n  return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nfunction SheetTrigger({\n  ...props\n}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n  return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\n}\n\nfunction SheetClose({\n  ...props\n}: React.ComponentProps<typeof SheetPrimitive.Close>) {\n  return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />\n}\n\nfunction SheetPortal({\n  ...props\n}: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n  return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nfunction SheetOverlay({\n  className,\n  ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n  return (\n    <SheetPrimitive.Overlay\n      data-slot=\"sheet-overlay\"\n      className={cn(\n        \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-background/80 backdrop-blur-sm\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction SheetContent({\n  className,\n  children,\n  side = \"right\",\n  ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n  side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n}) {\n  return (\n    <SheetPortal>\n      <SheetOverlay />\n      <SheetPrimitive.Content\n        data-slot=\"sheet-content\"\n        className={cn(\n          \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500\",\n          side === \"right\" &&\n            \"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm\",\n          side === \"left\" &&\n            \"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm\",\n          side === \"top\" &&\n            \"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b\",\n          side === \"bottom\" &&\n            \"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t\",\n          className\n        )}\n        {...props}\n      >\n        {children}\n      </SheetPrimitive.Content>\n    </SheetPortal>\n  )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"sheet-header\"\n      className={cn(\"flex flex-col gap-1.5 p-4\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"sheet-footer\"\n      className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction SheetTitle({\n  className,\n  ...props\n}: React.ComponentProps<typeof SheetPrimitive.Title>) {\n  return (\n    <SheetPrimitive.Title\n      data-slot=\"sheet-title\"\n      className={cn(\"text-foreground font-semibold\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction SheetDescription({\n  className,\n  ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n  return (\n    <SheetPrimitive.Description\n      data-slot=\"sheet-description\"\n      className={cn(\"text-muted-foreground text-sm\", className)}\n      {...props}\n    />\n  )\n}\n\nexport {\n  Sheet,\n  SheetTrigger,\n  SheetClose,\n  SheetContent,\n  SheetHeader,\n  SheetFooter,\n  SheetTitle,\n  SheetDescription,\n}\n"
  },
  {
    "path": "frontend/components/ui/sidebar.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, VariantProps } from \"class-variance-authority\"\nimport { PanelLeftIcon } from \"lucide-react\"\nimport { useTranslations } from \"next-intl\"\n\nimport { useIsMobile } from \"@/hooks/use-mobile\"\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { Separator } from \"@/components/ui/separator\"\nimport {\n  Sheet,\n  SheetContent,\n  SheetDescription,\n  SheetHeader,\n  SheetTitle,\n} from \"@/components/ui/sheet\"\nimport { Skeleton } from \"@/components/ui/skeleton\"\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipProvider,\n  TooltipTrigger,\n} from \"@/components/ui/tooltip\"\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\"\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\nconst SIDEBAR_WIDTH = \"14rem\"\nconst SIDEBAR_WIDTH_MOBILE = \"16rem\"\nconst SIDEBAR_WIDTH_ICON = \"3rem\"\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\"\n\ntype SidebarContextProps = {\n  state: \"expanded\" | \"collapsed\"\n  open: boolean\n  setOpen: (open: boolean) => void\n  openMobile: boolean\n  setOpenMobile: (open: boolean) => void\n  isMobile: boolean\n  toggleSidebar: () => void\n}\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null)\n\nfunction useSidebar() {\n  const context = React.useContext(SidebarContext)\n  if (!context) {\n    throw new Error(\"useSidebar must be used within a SidebarProvider.\")\n  }\n\n  return context\n}\n\nfunction SidebarProvider({\n  defaultOpen = true,\n  open: openProp,\n  onOpenChange: setOpenProp,\n  className,\n  style,\n  children,\n  ...props\n}: React.ComponentProps<\"div\"> & {\n  defaultOpen?: boolean\n  open?: boolean\n  onOpenChange?: (open: boolean) => void\n}) {\n  const isMobile = useIsMobile()\n  const [openMobile, setOpenMobile] = React.useState(false)\n\n  // This is the internal state of the sidebar.\n  // We use openProp and setOpenProp for control from outside the component.\n  const [_open, _setOpen] = React.useState(defaultOpen)\n  const open = openProp ?? _open\n  const setOpen = React.useCallback(\n    (value: boolean | ((value: boolean) => boolean)) => {\n      const openState = typeof value === \"function\" ? value(open) : value\n      if (setOpenProp) {\n        setOpenProp(openState)\n      } else {\n        _setOpen(openState)\n      }\n\n      // This sets the cookie to keep the sidebar state.\n      document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`\n    },\n    [setOpenProp, open]\n  )\n\n  // Helper to toggle the sidebar.\n  const toggleSidebar = React.useCallback(() => {\n    return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open)\n  }, [isMobile, setOpen, setOpenMobile])\n\n  // Adds a keyboard shortcut to toggle the sidebar.\n  React.useEffect(() => {\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (\n        event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n        (event.metaKey || event.ctrlKey)\n      ) {\n        event.preventDefault()\n        toggleSidebar()\n      }\n    }\n\n    window.addEventListener(\"keydown\", handleKeyDown)\n    return () => window.removeEventListener(\"keydown\", handleKeyDown)\n  }, [toggleSidebar])\n\n  // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n  // This makes it easier to style the sidebar with Tailwind classes.\n  const state = open ? \"expanded\" : \"collapsed\"\n\n  const contextValue = React.useMemo<SidebarContextProps>(\n    () => ({\n      state,\n      open,\n      setOpen,\n      isMobile,\n      openMobile,\n      setOpenMobile,\n      toggleSidebar,\n    }),\n    [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n  )\n\n  return (\n    <SidebarContext.Provider value={contextValue}>\n      <TooltipProvider delayDuration={0}>\n        <div\n          data-slot=\"sidebar-wrapper\"\n          style={\n            {\n              \"--sidebar-width\": SIDEBAR_WIDTH,\n              \"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n              ...style,\n            } as React.CSSProperties\n          }\n          className={cn(\n            \"group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full\",\n            className\n          )}\n          {...props}\n        >\n          {children}\n        </div>\n      </TooltipProvider>\n    </SidebarContext.Provider>\n  )\n}\n\nfunction Sidebar({\n  side = \"left\",\n  variant = \"sidebar\",\n  collapsible = \"offcanvas\",\n  className,\n  children,\n  ...props\n}: React.ComponentProps<\"div\"> & {\n  side?: \"left\" | \"right\"\n  variant?: \"sidebar\" | \"floating\" | \"inset\"\n  collapsible?: \"offcanvas\" | \"icon\" | \"none\"\n}) {\n  const { isMobile, state, openMobile, setOpenMobile } = useSidebar()\n\n  if (collapsible === \"none\") {\n    return (\n      <div\n        data-slot=\"sidebar\"\n        className={cn(\n          \"bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col\",\n          className\n        )}\n        {...props}\n      >\n        {children}\n      </div>\n    )\n  }\n\n  if (isMobile) {\n    return (\n      <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n        <SheetContent\n          data-sidebar=\"sidebar\"\n          data-slot=\"sidebar\"\n          data-mobile=\"true\"\n          className=\"bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden\"\n          style={\n            {\n              \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE,\n            } as React.CSSProperties\n          }\n          side={side}\n        >\n          <SheetHeader className=\"sr-only\">\n            <SheetTitle>Sidebar</SheetTitle>\n            <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n          </SheetHeader>\n          <div className=\"flex h-full w-full flex-col\">{children}</div>\n        </SheetContent>\n      </Sheet>\n    )\n  }\n\n  return (\n    <div\n      className=\"group peer text-sidebar-foreground hidden md:block\"\n      data-state={state}\n      data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n      data-variant={variant}\n      data-side={side}\n      data-slot=\"sidebar\"\n    >\n      {/* This is what handles the sidebar gap on desktop */}\n      <div\n        data-slot=\"sidebar-gap\"\n        className={cn(\n          \"relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear\",\n          \"group-data-[collapsible=offcanvas]:w-0\",\n          \"group-data-[side=right]:rotate-180\",\n          variant === \"floating\" || variant === \"inset\"\n            ? \"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]\"\n            : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\"\n        )}\n      />\n      <div\n        data-slot=\"sidebar-container\"\n        className={cn(\n          \"fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex\",\n          side === \"left\"\n            ? \"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]\"\n            : \"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]\",\n          // Adjust the padding for floating and inset variants.\n          variant === \"floating\" || variant === \"inset\"\n            ? \"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]\"\n            : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l\",\n          className\n        )}\n        {...props}\n      >\n        <div\n          data-sidebar=\"sidebar\"\n          data-slot=\"sidebar-inner\"\n          className=\"bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm\"\n        >\n          {children}\n        </div>\n      </div>\n    </div>\n  )\n}\n\nfunction SidebarTrigger({\n  className,\n  onClick,\n  ...props\n}: React.ComponentProps<typeof Button>) {\n  const { toggleSidebar } = useSidebar()\n  const t = useTranslations(\"common.ui\")\n\n  return (\n    <Button\n      data-sidebar=\"trigger\"\n      data-slot=\"sidebar-trigger\"\n      variant=\"ghost\"\n      size=\"icon\"\n      className={cn(\"size-7\", className)}\n      onClick={(event) => {\n        onClick?.(event)\n        toggleSidebar()\n      }}\n      {...props}\n    >\n      <PanelLeftIcon />\n      <span className=\"sr-only\">{t(\"toggleSidebar\")}</span>\n    </Button>\n  )\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<\"button\">) {\n  const { toggleSidebar } = useSidebar()\n  const t = useTranslations(\"common.ui\")\n\n  return (\n    <button\n      data-sidebar=\"rail\"\n      data-slot=\"sidebar-rail\"\n      aria-label={t(\"toggleSidebar\")}\n      tabIndex={-1}\n      onClick={toggleSidebar}\n      title={t(\"toggleSidebar\")}\n      className={cn(\n        \"hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex\",\n        \"in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize\",\n        \"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize\",\n        \"hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full\",\n        \"[[data-side=left][data-collapsible=offcanvas]_&]:-right-2\",\n        \"[[data-side=right][data-collapsible=offcanvas]_&]:-left-2\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<\"main\">) {\n  return (\n    <main\n      data-slot=\"sidebar-inset\"\n      className={cn(\n        \"bg-background relative flex w-full flex-1 flex-col\",\n        \"md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction SidebarInput({\n  className,\n  ...props\n}: React.ComponentProps<typeof Input>) {\n  return (\n    <Input\n      data-slot=\"sidebar-input\"\n      data-sidebar=\"input\"\n      className={cn(\"bg-background h-8 w-full shadow-none\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"sidebar-header\"\n      data-sidebar=\"header\"\n      className={cn(\"flex flex-col gap-2 p-2\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"sidebar-footer\"\n      data-sidebar=\"footer\"\n      className={cn(\"flex flex-col gap-2 p-2\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction SidebarSeparator({\n  className,\n  ...props\n}: React.ComponentProps<typeof Separator>) {\n  return (\n    <Separator\n      data-slot=\"sidebar-separator\"\n      data-sidebar=\"separator\"\n      className={cn(\"bg-sidebar-border mx-2 w-auto\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"sidebar-content\"\n      data-sidebar=\"content\"\n      className={cn(\n        \"flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"sidebar-group\"\n      data-sidebar=\"group\"\n      className={cn(\"relative flex w-full min-w-0 flex-col p-2\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction SidebarGroupLabel({\n  className,\n  asChild = false,\n  ...props\n}: React.ComponentProps<\"div\"> & { asChild?: boolean }) {\n  const Comp = asChild ? Slot : \"div\"\n\n  return (\n    <Comp\n      data-slot=\"sidebar-group-label\"\n      data-sidebar=\"group-label\"\n      className={cn(\n        \"text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n        \"group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction SidebarGroupAction({\n  className,\n  asChild = false,\n  ...props\n}: React.ComponentProps<\"button\"> & { asChild?: boolean }) {\n  const Comp = asChild ? Slot : \"button\"\n\n  return (\n    <Comp\n      data-slot=\"sidebar-group-action\"\n      data-sidebar=\"group-action\"\n      className={cn(\n        \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n        // Increases the hit area of the button on mobile.\n        \"after:absolute after:-inset-2 md:after:hidden\",\n        \"group-data-[collapsible=icon]:hidden\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction SidebarGroupContent({\n  className,\n  ...props\n}: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"sidebar-group-content\"\n      data-sidebar=\"group-content\"\n      className={cn(\"w-full text-sm\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<\"ul\">) {\n  return (\n    <ul\n      data-slot=\"sidebar-menu\"\n      data-sidebar=\"menu\"\n      className={cn(\"flex w-full min-w-0 flex-col gap-1\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<\"li\">) {\n  return (\n    <li\n      data-slot=\"sidebar-menu-item\"\n      data-sidebar=\"menu-item\"\n      className={cn(\"group/menu-item relative\", className)}\n      {...props}\n    />\n  )\n}\n\nconst sidebarMenuButtonVariants = cva(\n  \"peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n  {\n    variants: {\n      variant: {\n        default: \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n        outline:\n          \"bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]\",\n      },\n      size: {\n        default: \"h-8 text-sm\",\n        sm: \"h-7 text-xs\",\n        lg: \"h-12 text-sm group-data-[collapsible=icon]:p-0!\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  }\n)\n\nfunction SidebarMenuButton({\n  asChild = false,\n  isActive = false,\n  variant = \"default\",\n  size = \"default\",\n  tooltip,\n  className,\n  ...props\n}: React.ComponentProps<\"button\"> & {\n  asChild?: boolean\n  isActive?: boolean\n  tooltip?: string | React.ComponentProps<typeof TooltipContent>\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n  const Comp = asChild ? Slot : \"button\"\n  const { isMobile, state } = useSidebar()\n\n  const button = (\n    <Comp\n      data-slot=\"sidebar-menu-button\"\n      data-sidebar=\"menu-button\"\n      data-size={size}\n      data-active={isActive}\n      className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n      {...props}\n    />\n  )\n\n  if (!tooltip) {\n    return button\n  }\n\n  if (typeof tooltip === \"string\") {\n    tooltip = {\n      children: tooltip,\n    }\n  }\n\n  return (\n    <Tooltip>\n      <TooltipTrigger asChild>{button}</TooltipTrigger>\n      <TooltipContent\n        side=\"right\"\n        align=\"center\"\n        hidden={state !== \"collapsed\" || isMobile}\n        {...tooltip}\n      />\n    </Tooltip>\n  )\n}\n\nfunction SidebarMenuAction({\n  className,\n  asChild = false,\n  showOnHover = false,\n  ...props\n}: React.ComponentProps<\"button\"> & {\n  asChild?: boolean\n  showOnHover?: boolean\n}) {\n  const Comp = asChild ? Slot : \"button\"\n\n  return (\n    <Comp\n      data-slot=\"sidebar-menu-action\"\n      data-sidebar=\"menu-action\"\n      className={cn(\n        \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n        // Increases the hit area of the button on mobile.\n        \"after:absolute after:-inset-2 md:after:hidden\",\n        \"peer-data-[size=sm]/menu-button:top-1\",\n        \"peer-data-[size=default]/menu-button:top-1.5\",\n        \"peer-data-[size=lg]/menu-button:top-2.5\",\n        \"group-data-[collapsible=icon]:hidden\",\n        showOnHover &&\n          \"peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 md:opacity-0\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction SidebarMenuBadge({\n  className,\n  ...props\n}: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"sidebar-menu-badge\"\n      data-sidebar=\"menu-badge\"\n      className={cn(\n        \"text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none\",\n        \"peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground\",\n        \"peer-data-[size=sm]/menu-button:top-1\",\n        \"peer-data-[size=default]/menu-button:top-1.5\",\n        \"peer-data-[size=lg]/menu-button:top-2.5\",\n        \"group-data-[collapsible=icon]:hidden\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction SidebarMenuSkeleton({\n  className,\n  showIcon = false,\n  ...props\n}: React.ComponentProps<\"div\"> & {\n  showIcon?: boolean\n}) {\n  // Random width between 50 to 90%.\n  const width = React.useMemo(() => {\n    return `${Math.floor(Math.random() * 40) + 50}%`\n  }, [])\n\n  return (\n    <div\n      data-slot=\"sidebar-menu-skeleton\"\n      data-sidebar=\"menu-skeleton\"\n      className={cn(\"flex h-8 items-center gap-2 rounded-md px-2\", className)}\n      {...props}\n    >\n      {showIcon && (\n        <Skeleton\n          className=\"size-4 rounded-md\"\n          data-sidebar=\"menu-skeleton-icon\"\n        />\n      )}\n      <Skeleton\n        className=\"h-4 max-w-(--skeleton-width) flex-1\"\n        data-sidebar=\"menu-skeleton-text\"\n        style={\n          {\n            \"--skeleton-width\": width,\n          } as React.CSSProperties\n        }\n      />\n    </div>\n  )\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<\"ul\">) {\n  return (\n    <ul\n      data-slot=\"sidebar-menu-sub\"\n      data-sidebar=\"menu-sub\"\n      className={cn(\n        \"border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5\",\n        \"group-data-[collapsible=icon]:hidden\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction SidebarMenuSubItem({\n  className,\n  ...props\n}: React.ComponentProps<\"li\">) {\n  return (\n    <li\n      data-slot=\"sidebar-menu-sub-item\"\n      data-sidebar=\"menu-sub-item\"\n      className={cn(\"group/menu-sub-item relative\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction SidebarMenuSubButton({\n  asChild = false,\n  size = \"md\",\n  isActive = false,\n  className,\n  ...props\n}: React.ComponentProps<\"a\"> & {\n  asChild?: boolean\n  size?: \"sm\" | \"md\"\n  isActive?: boolean\n}) {\n  const Comp = asChild ? Slot : \"a\"\n\n  return (\n    <Comp\n      data-slot=\"sidebar-menu-sub-button\"\n      data-sidebar=\"menu-sub-button\"\n      data-size={size}\n      data-active={isActive}\n      className={cn(\n        \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n        \"data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground\",\n        size === \"sm\" && \"text-xs\",\n        size === \"md\" && \"text-sm\",\n        \"group-data-[collapsible=icon]:hidden\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nexport {\n  Sidebar,\n  SidebarContent,\n  SidebarFooter,\n  SidebarGroup,\n  SidebarGroupAction,\n  SidebarGroupContent,\n  SidebarGroupLabel,\n  SidebarHeader,\n  SidebarInput,\n  SidebarInset,\n  SidebarMenu,\n  SidebarMenuAction,\n  SidebarMenuBadge,\n  SidebarMenuButton,\n  SidebarMenuItem,\n  SidebarMenuSkeleton,\n  SidebarMenuSub,\n  SidebarMenuSubButton,\n  SidebarMenuSubItem,\n  SidebarProvider,\n  SidebarRail,\n  SidebarSeparator,\n  SidebarTrigger,\n  useSidebar,\n}\n"
  },
  {
    "path": "frontend/components/ui/skeleton.tsx",
    "content": "import { cn } from \"@/lib/utils\"\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"skeleton\"\n      className={cn(\"bg-accent animate-pulse rounded-md\", className)}\n      {...props}\n    />\n  )\n}\n\nexport { Skeleton }\n"
  },
  {
    "path": "frontend/components/ui/sonner.tsx",
    "content": "\"use client\"\n\nimport {\n  CircleCheckIcon,\n  InfoIcon,\n  Loader2Icon,\n  OctagonXIcon,\n  TriangleAlertIcon,\n} from \"lucide-react\"\nimport { useTheme } from \"next-themes\"\nimport { Toaster as Sonner, ToasterProps } from \"sonner\"\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n  const { theme = \"system\" } = useTheme()\n\n  return (\n    <Sonner\n      theme={theme as ToasterProps[\"theme\"]}\n      position=\"top-center\" \n      className=\"toaster group\"\n      icons={{\n        success: <CircleCheckIcon className=\"size-4\" />,\n        info: <InfoIcon className=\"size-4\" />,\n        warning: <TriangleAlertIcon className=\"size-4\" />,\n        error: <OctagonXIcon className=\"size-4\" />,\n        loading: <Loader2Icon className=\"size-4 animate-spin\" />,\n      }}\n      style={\n        {\n          \"--normal-bg\": \"var(--popover)\",\n          \"--normal-text\": \"var(--popover-foreground)\",\n          \"--normal-border\": \"var(--border)\",\n          \"--border-radius\": \"var(--radius)\",\n        } as React.CSSProperties\n      }\n      {...props}\n    />\n  )\n}\n\nexport { Toaster }"
  },
  {
    "path": "frontend/components/ui/spinner.tsx",
    "content": "\"use client\"\n\nimport { Loader2Icon } from \"lucide-react\"\nimport { useTranslations } from \"next-intl\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Spinner({ className, ...props }: React.ComponentProps<\"svg\">) {\n  const t = useTranslations(\"common.ui\")\n  \n  return (\n    <Loader2Icon\n      role=\"status\"\n      aria-label={t(\"loading\")}\n      className={cn(\"size-4 animate-spin\", className)}\n      {...props}\n    />\n  )\n}\n\nexport { Spinner }\n"
  },
  {
    "path": "frontend/components/ui/switch.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Switch = React.forwardRef<\n  React.ElementRef<typeof SwitchPrimitives.Root>,\n  React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>\n>(({ className, ...props }, ref) => (\n  <SwitchPrimitives.Root\n    className={cn(\n      \"peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input\",\n      className\n    )}\n    {...props}\n    ref={ref}\n  >\n    <SwitchPrimitives.Thumb\n      className={cn(\n        \"pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0\"\n      )}\n    />\n  </SwitchPrimitives.Root>\n))\nSwitch.displayName = SwitchPrimitives.Root.displayName\n\nexport { Switch }\n"
  },
  {
    "path": "frontend/components/ui/table.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\n  return (\n    <div\n      data-slot=\"table-container\"\n      className=\"relative w-full overflow-x-auto\"\n    >\n      <table\n        data-slot=\"table\"\n        className={cn(\"w-full caption-bottom text-sm\", className)}\n        {...props}\n      />\n    </div>\n  )\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\n  return (\n    <thead\n      data-slot=\"table-header\"\n      className={cn(\"[&_tr]:border-b\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n  return (\n    <tbody\n      data-slot=\"table-body\"\n      className={cn(\"[&_tr:last-child]:border-0\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\n  return (\n    <tfoot\n      data-slot=\"table-footer\"\n      className={cn(\n        \"bg-muted/50 border-t font-medium [&>tr]:last:border-b-0\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n  return (\n    <tr\n      data-slot=\"table-row\"\n      className={cn(\n        \"hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n  return (\n    <th\n      data-slot=\"table-head\"\n      className={cn(\n        \"text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n  return (\n    <td\n      data-slot=\"table-cell\"\n      className={cn(\n        \"p-2 align-middle overflow-hidden [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction TableCaption({\n  className,\n  ...props\n}: React.ComponentProps<\"caption\">) {\n  return (\n    <caption\n      data-slot=\"table-caption\"\n      className={cn(\"text-muted-foreground mt-4 text-sm\", className)}\n      {...props}\n    />\n  )\n}\n\nexport {\n  Table,\n  TableHeader,\n  TableBody,\n  TableFooter,\n  TableHead,\n  TableRow,\n  TableCell,\n  TableCaption,\n}\n"
  },
  {
    "path": "frontend/components/ui/tabs.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Tabs({\n  className,\n  ...props\n}: React.ComponentProps<typeof TabsPrimitive.Root>) {\n  return (\n    <TabsPrimitive.Root\n      data-slot=\"tabs\"\n      className={cn(\"flex flex-col gap-2\", className)}\n      {...props}\n    />\n  )\n}\n\ninterface TabsListProps extends React.ComponentProps<typeof TabsPrimitive.List> {\n  variant?: \"default\" | \"underline\"\n}\n\nfunction TabsList({\n  className,\n  variant = \"default\",\n  ...props\n}: TabsListProps) {\n  return (\n    <TabsPrimitive.List\n      data-slot=\"tabs-list\"\n      className={cn(\n        \"inline-flex w-fit items-center justify-center\",\n        variant === \"default\" && \"bg-muted text-muted-foreground h-9 rounded-lg p-[3px]\",\n        variant === \"underline\" && \"h-10 gap-4 border-b border-border bg-transparent p-0\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\ninterface TabsTriggerProps extends React.ComponentProps<typeof TabsPrimitive.Trigger> {\n  variant?: \"default\" | \"underline\"\n}\n\nfunction TabsTrigger({\n  className,\n  variant = \"default\",\n  ...props\n}: TabsTriggerProps) {\n  return (\n    <TabsPrimitive.Trigger\n      data-slot=\"tabs-trigger\"\n      className={cn(\n        \"inline-flex items-center justify-center gap-1.5 text-sm font-medium whitespace-nowrap cursor-pointer transition-all focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n        variant === \"default\" && \"data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-zinc-500 dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground h-[calc(100%-1px)] flex-1 rounded-md border border-transparent px-2 py-1 focus-visible:ring-[1px] focus-visible:outline-1 data-[state=active]:shadow-sm\",\n        variant === \"underline\" && \"text-muted-foreground data-[state=active]:text-foreground h-10 px-1 pb-3 -mb-px border-b-2 border-transparent data-[state=active]:border-primary rounded-none bg-transparent\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction TabsContent({\n  className,\n  ...props\n}: React.ComponentProps<typeof TabsPrimitive.Content>) {\n  return (\n    <TabsPrimitive.Content\n      data-slot=\"tabs-content\"\n      className={cn(\"flex-1 outline-none\", className)}\n      {...props}\n    />\n  )\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n"
  },
  {
    "path": "frontend/components/ui/textarea.tsx",
    "content": "import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n  return (\n    <textarea\n      data-slot=\"textarea\"\n      className={cn(\n        \"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive bg-background dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border px-3 py-2 text-base shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nexport { Textarea }\n"
  },
  {
    "path": "frontend/components/ui/toggle-group.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\"\nimport { type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\nimport { toggleVariants } from \"@/components/ui/toggle\"\n\nconst ToggleGroupContext = React.createContext<\n  VariantProps<typeof toggleVariants>\n>({\n  size: \"default\",\n  variant: \"default\",\n})\n\nfunction ToggleGroup({\n  className,\n  variant,\n  size,\n  children,\n  ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &\n  VariantProps<typeof toggleVariants>) {\n  return (\n    <ToggleGroupPrimitive.Root\n      data-slot=\"toggle-group\"\n      data-variant={variant}\n      data-size={size}\n      className={cn(\n        \"group/toggle-group flex w-fit items-center rounded-md data-[variant=outline]:shadow-xs\",\n        className\n      )}\n      {...props}\n    >\n      <ToggleGroupContext.Provider value={{ variant, size }}>\n        {children}\n      </ToggleGroupContext.Provider>\n    </ToggleGroupPrimitive.Root>\n  )\n}\n\nfunction ToggleGroupItem({\n  className,\n  children,\n  variant,\n  size,\n  ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> &\n  VariantProps<typeof toggleVariants>) {\n  const context = React.useContext(ToggleGroupContext)\n\n  return (\n    <ToggleGroupPrimitive.Item\n      data-slot=\"toggle-group-item\"\n      data-variant={context.variant || variant}\n      data-size={context.size || size}\n      className={cn(\n        toggleVariants({\n          variant: context.variant || variant,\n          size: context.size || size,\n        }),\n        \"min-w-0 flex-1 shrink-0 rounded-none shadow-none first:rounded-l-md last:rounded-r-md focus:z-10 focus-visible:z-10 data-[variant=outline]:border-l-0 data-[variant=outline]:first:border-l\",\n        className\n      )}\n      {...props}\n    >\n      {children}\n    </ToggleGroupPrimitive.Item>\n  )\n}\n\nexport { ToggleGroup, ToggleGroupItem }\n"
  },
  {
    "path": "frontend/components/ui/toggle.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst toggleVariants = cva(\n  \"inline-flex items-center justify-center gap-1.5 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground cursor-pointer disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[1px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-transparent\",\n        outline:\n          \"border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground\",\n      },\n      size: {\n        default: \"h-9 px-2 min-w-9\",\n        sm: \"h-8 px-1.5 min-w-8\",\n        lg: \"h-10 px-2.5 min-w-10\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  }\n)\n\nfunction Toggle({\n  className,\n  variant,\n  size,\n  ...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> &\n  VariantProps<typeof toggleVariants>) {\n  return (\n    <TogglePrimitive.Root\n      data-slot=\"toggle\"\n      className={cn(toggleVariants({ variant, size, className }))}\n      {...props}\n    />\n  )\n}\n\nexport { Toggle, toggleVariants }\n"
  },
  {
    "path": "frontend/components/ui/tooltip.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction TooltipProvider({\n  delayDuration = 0,\n  ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n  return (\n    <TooltipPrimitive.Provider\n      data-slot=\"tooltip-provider\"\n      delayDuration={delayDuration}\n      {...props}\n    />\n  )\n}\n\nfunction Tooltip({\n  ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n  return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n}\n\nfunction TooltipTrigger({\n  ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n  return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nfunction TooltipContent({\n  className,\n  sideOffset = 0,\n  children,\n  ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n  return (\n    <TooltipPrimitive.Portal>\n      <TooltipPrimitive.Content\n        data-slot=\"tooltip-content\"\n        sideOffset={sideOffset}\n        className={cn(\n          \"bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance\",\n          className\n        )}\n        {...props}\n      >\n        {children}\n        <TooltipPrimitive.Arrow className=\"bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]\" />\n      </TooltipPrimitive.Content>\n    </TooltipPrimitive.Portal>\n  )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n"
  },
  {
    "path": "frontend/components/ui/yaml-editor.tsx",
    "content": "\"use client\"\n\nimport React, { useState, useCallback, useEffect } from \"react\"\nimport Editor from \"@monaco-editor/react\"\nimport * as yaml from \"js-yaml\"\nimport { AlertCircle } from \"lucide-react\"\nimport { useColorTheme } from \"@/hooks/use-color-theme\"\nimport { useTranslations } from \"next-intl\"\nimport { cn } from \"@/lib/utils\"\n\ninterface YamlEditorProps {\n  value: string\n  onChange: (value: string) => void\n  placeholder?: string\n  disabled?: boolean\n  height?: string\n  className?: string\n  onValidationChange?: (isValid: boolean, error?: { message: string; line?: number; column?: number }) => void\n}\n\n/**\n * YAML Editor component with Monaco Editor\n * Provides VSCode-level editing experience with syntax highlighting and validation\n */\nexport function YamlEditor({\n  value,\n  onChange,\n  placeholder,\n  disabled = false,\n  height = \"100%\",\n  className,\n  onValidationChange,\n}: YamlEditorProps) {\n  const t = useTranslations(\"common.yamlEditor\")\n  const { currentTheme } = useColorTheme()\n  const [shouldMount, setShouldMount] = useState(false)\n  const [yamlError, setYamlError] = useState<{ message: string; line?: number; column?: number } | null>(null)\n\n  // Delay mounting to avoid Monaco hitTest error on rapid container changes\n  useEffect(() => {\n    const timer = setTimeout(() => setShouldMount(true), 50)\n    return () => clearTimeout(timer)\n  }, [])\n\n  // Check for duplicate keys in YAML content\n  const checkDuplicateKeys = useCallback((content: string): { key: string; line: number } | null => {\n    const lines = content.split('\\n')\n    const keyStack: { indent: number; keys: Set<string> }[] = [{ indent: -1, keys: new Set() }]\n    \n    for (let i = 0; i < lines.length; i++) {\n      const line = lines[i]\n      // Skip empty lines and comments\n      if (!line.trim() || line.trim().startsWith('#')) continue\n      \n      // Match top-level keys (no leading whitespace, ends with colon)\n      const topLevelMatch = line.match(/^([a-zA-Z_][a-zA-Z0-9_-]*):\\s*(?:#.*)?$/)\n      if (topLevelMatch) {\n        const key = topLevelMatch[1]\n        const currentLevel = keyStack[0]\n        \n        if (currentLevel.keys.has(key)) {\n          return { key, line: i + 1 }\n        }\n        currentLevel.keys.add(key)\n      }\n    }\n    \n    return null\n  }, [])\n\n  // Validate YAML syntax\n  const validateYaml = useCallback((content: string) => {\n    if (!content.trim()) {\n      setYamlError(null)\n      onValidationChange?.(true)\n      return true\n    }\n\n    // First check for duplicate keys\n    const duplicateKey = checkDuplicateKeys(content)\n    if (duplicateKey) {\n      const errorInfo = {\n        message: t(\"duplicateKey\", { key: duplicateKey.key }),\n        line: duplicateKey.line,\n        column: 1,\n      }\n      setYamlError(errorInfo)\n      onValidationChange?.(false, errorInfo)\n      return false\n    }\n\n    try {\n      yaml.load(content)\n      setYamlError(null)\n      onValidationChange?.(true)\n      return true\n    } catch (error) {\n      const yamlException = error as yaml.YAMLException\n      const errorInfo = {\n        message: yamlException.message,\n        line: yamlException.mark?.line ? yamlException.mark.line + 1 : undefined,\n        column: yamlException.mark?.column ? yamlException.mark.column + 1 : undefined,\n      }\n      setYamlError(errorInfo)\n      onValidationChange?.(false, errorInfo)\n      return false\n    }\n  }, [onValidationChange, checkDuplicateKeys, t])\n\n  // Handle editor content change\n  const handleEditorChange = useCallback((newValue: string | undefined) => {\n    const content = newValue || \"\"\n    onChange(content)\n    validateYaml(content)\n  }, [onChange, validateYaml])\n\n  // Handle editor mount\n  const handleEditorDidMount = useCallback(() => {\n    // Validate initial content\n    validateYaml(value)\n  }, [validateYaml, value])\n\n  return (\n    <div className={cn(\"flex flex-col h-full\", className)}>\n      {/* Monaco Editor */}\n      <div className={cn(\"flex-1 overflow-hidden\", yamlError ? 'border-destructive' : '')}>\n        {shouldMount ? (\n          <Editor\n            height={height}\n            defaultLanguage=\"yaml\"\n            value={value}\n            onChange={handleEditorChange}\n            onMount={handleEditorDidMount}\n            theme={currentTheme.isDark ? \"vs-dark\" : \"light\"}\n            options={{\n              minimap: { enabled: false },\n              fontSize: 12,\n              lineNumbers: \"off\",\n              wordWrap: \"off\",\n              scrollBeyondLastLine: false,\n              automaticLayout: true,\n              tabSize: 2,\n              insertSpaces: true,\n              formatOnPaste: true,\n              formatOnType: true,\n              folding: true,\n              foldingStrategy: \"indentation\",\n              showFoldingControls: \"mouseover\",\n              bracketPairColorization: {\n                enabled: true,\n              },\n              padding: {\n                top: 8,\n                bottom: 8,\n              },\n              readOnly: disabled,\n              placeholder: placeholder,\n            }}\n            loading={\n              <div className=\"flex items-center justify-center h-full bg-muted/30\">\n                <div className=\"flex flex-col items-center gap-2\">\n                  <div className=\"h-6 w-6 animate-spin rounded-full border-2 border-primary border-t-transparent\" />\n                  <p className=\"text-xs text-muted-foreground\">{t(\"loading\")}</p>\n                </div>\n              </div>\n            }\n          />\n        ) : (\n          <div className=\"flex items-center justify-center h-full bg-muted/30\">\n            <div className=\"flex flex-col items-center gap-2\">\n              <div className=\"h-6 w-6 animate-spin rounded-full border-2 border-primary border-t-transparent\" />\n              <p className=\"text-xs text-muted-foreground\">{t(\"loading\")}</p>\n            </div>\n          </div>\n        )}\n      </div>\n\n      {/* Error message display */}\n      {yamlError && (\n        <div className=\"flex items-start gap-2 p-2 bg-destructive/10 border-t border-destructive/20\">\n          <AlertCircle className=\"h-3.5 w-3.5 text-destructive mt-0.5 flex-shrink-0\" />\n          <div className=\"flex-1 text-xs\">\n            <p className=\"font-medium text-destructive\">\n              {yamlError.line && yamlError.column\n                ? t(\"errorLocation\", { line: yamlError.line, column: yamlError.column })\n                : t(\"syntaxError\")}\n            </p>\n            <p className=\"text-muted-foreground truncate\">{yamlError.message}</p>\n          </div>\n        </div>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "frontend/components/vulnerabilities/index.ts",
    "content": "export { VulnerabilitiesDetailView } from './vulnerabilities-detail-view'\nexport { VulnerabilitiesDataTable } from './vulnerabilities-data-table'\nexport { createVulnerabilityColumns } from './vulnerabilities-columns'\nexport { VulnerabilityDetailDialog } from './vulnerability-detail-dialog'\n"
  },
  {
    "path": "frontend/components/vulnerabilities/vulnerabilities-columns.tsx",
    "content": "\"use client\"\n\nimport { ColumnDef } from \"@tanstack/react-table\"\nimport { Eye } from \"lucide-react\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport { Button } from \"@/components/ui/button\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"@/components/ui/tooltip\"\nimport { ExpandableUrlCell } from \"@/components/ui/data-table/expandable-cell\"\nimport { DataTableColumnHeader } from \"@/components/ui/data-table/column-header\"\n\nimport type { Vulnerability, VulnerabilitySeverity } from \"@/types/vulnerability.types\"\n\n// Translation type definitions\nexport interface VulnerabilityTranslations {\n  columns: {\n    severity: string\n    source: string\n    vulnType: string\n    url: string\n    createdAt: string\n  }\n  actions: {\n    details: string\n    selectAll: string\n    selectRow: string\n  }\n  tooltips: {\n    vulnDetails: string\n  }\n  severity: {\n    critical: string\n    high: string\n    medium: string\n    low: string\n    info: string\n  }\n}\n\ninterface ColumnActions {\n  formatDate: (date: string) => string\n  handleViewDetail: (vulnerability: Vulnerability) => void\n  t: VulnerabilityTranslations\n}\n\nexport function createVulnerabilityColumns({\n  formatDate,\n  handleViewDetail,\n  t,\n}: ColumnActions): ColumnDef<Vulnerability>[] {\n  // Unified vulnerability severity color configuration\n  const severityConfig: Record<VulnerabilitySeverity, { className: string }> = {\n    critical: { className: \"bg-[#da3633]/10 text-[#da3633] border border-[#da3633]/20 dark:text-[#f85149]\" },\n    high: { className: \"bg-[#d29922]/10 text-[#d29922] border border-[#d29922]/20\" },\n    medium: { className: \"bg-[#d4a72c]/10 text-[#d4a72c] border border-[#d4a72c]/20\" },\n    low: { className: \"bg-[#238636]/10 text-[#238636] border border-[#238636]/20 dark:text-[#3fb950]\" },\n    info: { className: \"bg-[#848d97]/10 text-[#848d97] border border-[#848d97]/20\" },\n  }\n\n  return [\n    {\n      id: \"select\",\n      size: 40,\n      minSize: 40,\n      maxSize: 40,\n      enableResizing: false,\n      header: ({ table }) => (\n        <Checkbox\n          checked={\n            table.getIsAllPageRowsSelected() ||\n            (table.getIsSomePageRowsSelected() && \"indeterminate\")\n          }\n          onCheckedChange={(value) => table.toggleAllPageRowsSelected(!!value)}\n          aria-label={t.actions.selectAll}\n        />\n      ),\n      cell: ({ row }) => (\n        <Checkbox\n          checked={row.getIsSelected()}\n          onCheckedChange={(value) => row.toggleSelected(!!value)}\n          aria-label={t.actions.selectRow}\n        />\n      ),\n      enableSorting: false,\n      enableHiding: false,\n    },\n    {\n      accessorKey: \"severity\",\n      meta: { title: t.columns.severity },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.severity} />\n      ),\n      size: 100,\n      minSize: 80,\n      maxSize: 120,\n      enableResizing: false,\n      cell: ({ row }) => {\n        const severity = row.getValue(\"severity\") as VulnerabilitySeverity\n        const config = severityConfig[severity]\n        return (\n          <Badge className={config.className}>\n            {severity}\n          </Badge>\n        )\n      },\n    },\n    {\n      accessorKey: \"source\",\n      meta: { title: t.columns.source },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.source} />\n      ),\n      size: 100,\n      minSize: 80,\n      maxSize: 150,\n      enableResizing: false,\n      cell: ({ row }) => {\n        const source = row.getValue(\"source\") as string\n        return (\n          <Badge variant=\"outline\">\n            {source}\n          </Badge>\n        )\n      },\n    },\n    {\n      accessorKey: \"vulnType\",\n      meta: { title: t.columns.vulnType },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.vulnType} />\n      ),\n      size: 150,\n      minSize: 100,\n      maxSize: 250,\n      cell: ({ row }) => {\n        const vulnType = row.getValue(\"vulnType\") as string\n        const vulnerability = row.original\n        return (\n          <Tooltip>\n            <TooltipTrigger asChild>\n              <span \n                className=\"font-medium cursor-pointer hover:text-primary hover:underline underline-offset-2 transition-colors\"\n                onClick={() => handleViewDetail(vulnerability)}\n              >\n                {vulnType}\n              </span>\n            </TooltipTrigger>\n            <TooltipContent>{t.tooltips.vulnDetails}</TooltipContent>\n          </Tooltip>\n        )\n      },\n    },\n    {\n      accessorKey: \"url\",\n      meta: { title: t.columns.url },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.url} />\n      ),\n      size: 500,\n      minSize: 300,\n      maxSize: 700,\n      cell: ({ row }) => (\n        <ExpandableUrlCell value={row.original.url} />\n      ),\n    },\n    {\n      accessorKey: \"createdAt\",\n      meta: { title: t.columns.createdAt },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.createdAt} />\n      ),\n      size: 150,\n      minSize: 120,\n      maxSize: 200,\n      enableResizing: false,\n      cell: ({ row }) => {\n        const createdAt = row.getValue(\"createdAt\") as string\n        return (\n          <span className=\"text-sm text-muted-foreground\">\n            {formatDate(createdAt)}\n          </span>\n        )\n      },\n    },\n    {\n      id: \"actions\",\n      header: \"\",\n      size: 80,\n      minSize: 80,\n      maxSize: 80,\n      enableResizing: false,\n      cell: ({ row }) => {\n        const vulnerability = row.original\n\n        return (\n          <div className=\"text-right\">\n            <Button\n              variant=\"ghost\"\n              size=\"sm\"\n              className=\"h-8 px-2\"\n              onClick={() => handleViewDetail(vulnerability)}\n            >\n              <Eye className=\"h-4 w-4 mr-1\" />\n              {t.actions.details}\n            </Button>\n          </div>\n        )\n      },\n    },\n  ]\n}\n"
  },
  {
    "path": "frontend/components/vulnerabilities/vulnerabilities-data-table.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport type { ColumnDef } from \"@tanstack/react-table\"\nimport { useTranslations } from \"next-intl\"\nimport { UnifiedDataTable } from \"@/components/ui/data-table\"\nimport { PREDEFINED_FIELDS, type FilterField } from \"@/components/common/smart-filter-input\"\nimport type { Vulnerability } from \"@/types/vulnerability.types\"\nimport type { PaginationInfo } from \"@/types/common.types\"\nimport type { DownloadOption } from \"@/types/data-table.types\"\n\n// Vulnerability page filter fields\nconst VULNERABILITY_FILTER_FIELDS: FilterField[] = [\n  { key: \"type\", label: \"Type\", description: \"Vulnerability type\" },\n  PREDEFINED_FIELDS.severity,\n  { key: \"source\", label: \"Source\", description: \"Scanner source\" },\n  PREDEFINED_FIELDS.url,\n]\n\n// Vulnerability page examples\nconst VULNERABILITY_FILTER_EXAMPLES = [\n  'type=\"xss\" || type=\"sqli\"',\n  'severity=\"critical\" || severity=\"high\"',\n  'source=\"nuclei\" && severity=\"high\"',\n  'type=\"xss\" && url=\"/api/*\"',\n]\n\ninterface VulnerabilitiesDataTableProps {\n  data: Vulnerability[]\n  columns: ColumnDef<Vulnerability>[]\n  filterValue?: string\n  onFilterChange?: (value: string) => void\n  pagination?: { pageIndex: number; pageSize: number }\n  setPagination?: React.Dispatch<React.SetStateAction<{ pageIndex: number; pageSize: number }>>\n  paginationInfo?: PaginationInfo\n  onPaginationChange?: (pagination: { pageIndex: number; pageSize: number }) => void\n  onBulkDelete?: () => void\n  onSelectionChange?: (selectedRows: Vulnerability[]) => void\n  onDownloadAll?: () => void\n  onDownloadSelected?: () => void\n  hideToolbar?: boolean\n}\n\nexport function VulnerabilitiesDataTable({\n  data = [],\n  columns,\n  filterValue,\n  onFilterChange,\n  pagination,\n  setPagination,\n  paginationInfo,\n  onPaginationChange,\n  onBulkDelete,\n  onSelectionChange,\n  onDownloadAll,\n  onDownloadSelected,\n  hideToolbar = false,\n}: VulnerabilitiesDataTableProps) {\n  const t = useTranslations(\"common.status\")\n  const tDownload = useTranslations(\"common.download\")\n  const tActions = useTranslations(\"common.actions\")\n  \n  // Handle smart filter search\n  const handleFilterSearch = (rawQuery: string) => {\n    onFilterChange?.(rawQuery)\n  }\n\n  // Download options\n  const downloadOptions: DownloadOption[] = []\n  if (onDownloadAll) {\n    downloadOptions.push({\n      key: \"all\",\n      label: tDownload(\"all\"),\n      onClick: onDownloadAll,\n    })\n  }\n  if (onDownloadSelected) {\n    downloadOptions.push({\n      key: \"selected\",\n      label: tDownload(\"selected\"),\n      onClick: onDownloadSelected,\n      disabled: (count) => count === 0,\n    })\n  }\n\n  return (\n    <UnifiedDataTable\n      data={data}\n      columns={columns}\n      getRowId={(row) => String(row.id)}\n      // Pagination\n      pagination={pagination}\n      setPagination={setPagination}\n      paginationInfo={paginationInfo}\n      onPaginationChange={onPaginationChange}\n      // Smart filter\n      searchMode=\"smart\"\n      searchValue={filterValue}\n      onSearch={handleFilterSearch}\n      filterFields={VULNERABILITY_FILTER_FIELDS}\n      filterExamples={VULNERABILITY_FILTER_EXAMPLES}\n      // Selection\n      onSelectionChange={onSelectionChange}\n      // Bulk operations\n      onBulkDelete={onBulkDelete}\n      bulkDeleteLabel={tActions(\"delete\")}\n      showAddButton={false}\n      // Download\n      downloadOptions={downloadOptions.length > 0 ? downloadOptions : undefined}\n      // Toolbar\n      hideToolbar={hideToolbar}\n      // Empty state\n      emptyMessage={t(\"noData\")}\n    />\n  )\n}\n"
  },
  {
    "path": "frontend/components/vulnerabilities/vulnerabilities-detail-view.tsx",
    "content": "\"use client\"\n\nimport React, { useState, useMemo } from \"react\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport { VulnerabilitiesDataTable } from \"./vulnerabilities-data-table\"\nimport { createVulnerabilityColumns } from \"./vulnerabilities-columns\"\nimport { VulnerabilityDetailDialog } from \"./vulnerability-detail-dialog\"\nimport { DataTableSkeleton } from \"@/components/ui/data-table-skeleton\"\nimport { getDateLocale } from \"@/lib/date-utils\"\nimport {\n  AlertDialog,\n  AlertDialogAction,\n  AlertDialogCancel,\n  AlertDialogContent,\n  AlertDialogDescription,\n  AlertDialogFooter,\n  AlertDialogHeader,\n  AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\"\nimport type { Vulnerability } from \"@/types/vulnerability.types\"\nimport { useScanVulnerabilities, useTargetVulnerabilities, useAllVulnerabilities } from \"@/hooks/use-vulnerabilities\"\n\ninterface VulnerabilitiesDetailViewProps {\n  /** Used in scan history page: view vulnerabilities by scan dimension */\n  scanId?: number\n  /** Used in target detail page: view vulnerabilities by target dimension */\n  targetId?: number\n  /** Hide toolbar (search, column controls, etc.) */\n  hideToolbar?: boolean\n}\n\nexport function VulnerabilitiesDetailView({\n  scanId,\n  targetId,\n  hideToolbar = false,\n}: VulnerabilitiesDetailViewProps) {\n  const [selectedVulnerabilities, setSelectedVulnerabilities] = useState<Vulnerability[]>([])\n  const [deleteDialogOpen, setDeleteDialogOpen] = useState(false)\n  const [vulnerabilityToDelete, setVulnerabilityToDelete] = useState<Vulnerability | null>(null)\n  const [bulkDeleteDialogOpen, setBulkDeleteDialogOpen] = useState(false)\n  const [isLoading, setIsLoading] = useState(false)\n  const [detailDialogOpen, setDetailDialogOpen] = useState(false)\n  const [selectedVulnerability, setSelectedVulnerability] = useState<Vulnerability | null>(null)\n\n  const [pagination, setPagination] = useState({\n    pageIndex: 0,\n    pageSize: 10,\n  })\n\n  // Internationalization\n  const tColumns = useTranslations(\"columns\")\n  const tCommon = useTranslations(\"common\")\n  const tTooltips = useTranslations(\"tooltips\")\n  const tSeverity = useTranslations(\"severity\")\n  const tConfirm = useTranslations(\"common.confirm\")\n  const locale = useLocale()\n\n  // Build translation object\n  const translations = useMemo(() => ({\n    columns: {\n      severity: tColumns(\"vulnerability.severity\"),\n      source: tColumns(\"vulnerability.source\"),\n      vulnType: tColumns(\"vulnerability.vulnType\"),\n      url: tColumns(\"common.url\"),\n      createdAt: tColumns(\"common.createdAt\"),\n    },\n    actions: {\n      details: tCommon(\"actions.details\"),\n      selectAll: tCommon(\"actions.selectAll\"),\n      selectRow: tCommon(\"actions.selectRow\"),\n    },\n    tooltips: {\n      vulnDetails: tTooltips(\"vulnDetails\"),\n    },\n    severity: {\n      critical: tSeverity(\"critical\"),\n      high: tSeverity(\"high\"),\n      medium: tSeverity(\"medium\"),\n      low: tSeverity(\"low\"),\n      info: tSeverity(\"info\"),\n    },\n  }), [tColumns, tCommon, tTooltips, tSeverity])\n\n  // Smart filter query\n  const [filterQuery, setFilterQuery] = useState(\"\")\n\n  const handleFilterChange = (value: string) => {\n    setFilterQuery(value)\n    setPagination((prev) => ({ ...prev, pageIndex: 0 }))\n  }\n\n  const paginationParams = {\n    page: pagination.pageIndex + 1,\n    pageSize: pagination.pageSize,\n  }\n\n  // Load by scan dimension (scan history page)\n  const scanQuery = useScanVulnerabilities(\n    scanId ?? 0,\n    paginationParams,\n    { enabled: !!scanId },\n    filterQuery || undefined,\n  )\n\n  // Load by target dimension (target detail page)\n  const targetQuery = useTargetVulnerabilities(\n    targetId ?? 0,\n    paginationParams,\n    { enabled: !!targetId && !scanId },\n    filterQuery || undefined,\n  )\n\n  // Get all vulnerabilities (global vulnerabilities page)\n  const allQuery = useAllVulnerabilities(\n    paginationParams,\n    { enabled: !scanId && !targetId },\n    filterQuery || undefined,\n  )\n\n  // Select which query to use based on parameters\n  const activeQuery = scanId ? scanQuery : targetId ? targetQuery : allQuery\n  const isQueryLoading = activeQuery.isLoading\n\n  const vulnerabilities = activeQuery.data?.vulnerabilities ?? []\n  const paginationInfo = activeQuery.data?.pagination ?? {\n    total: vulnerabilities.length,\n    page: pagination.pageIndex + 1,\n    pageSize: pagination.pageSize,\n    totalPages: 1,\n  }\n\n  const formatDate = (dateString: string): string => {\n    return new Date(dateString).toLocaleString(getDateLocale(locale), {\n      year: \"numeric\",\n      month: \"numeric\",\n      day: \"numeric\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\",\n      hour12: false,\n    })\n  }\n\n  const navigate = (path: string) => {\n    console.log(\"Navigate to:\", path)\n  }\n\n  const handleViewDetail = (vulnerability: Vulnerability) => {\n    setSelectedVulnerability(vulnerability)\n    setDetailDialogOpen(true)\n  }\n\n  const handleDeleteVulnerability = (vulnerability: Vulnerability) => {\n    setVulnerabilityToDelete(vulnerability)\n    setDeleteDialogOpen(true)\n  }\n\n  const confirmDelete = async () => {\n    if (!vulnerabilityToDelete) return\n\n    setDeleteDialogOpen(false)\n    setIsLoading(true)\n\n    setTimeout(() => {\n      console.log(\"Delete vulnerability:\", vulnerabilityToDelete.id)\n      setVulnerabilityToDelete(null)\n      setIsLoading(false)\n    }, 1000)\n  }\n\n  const handleBulkDelete = () => {\n    if (selectedVulnerabilities.length === 0) {\n      return\n    }\n    setBulkDeleteDialogOpen(true)\n  }\n\n  const confirmBulkDelete = async () => {\n    if (selectedVulnerabilities.length === 0) return\n\n    const deletedIds = selectedVulnerabilities.map(vulnerability => vulnerability.id)\n\n    setBulkDeleteDialogOpen(false)\n    setIsLoading(true)\n\n    setTimeout(() => {\n      console.log(\"Bulk delete vulnerabilities:\", deletedIds)\n      setSelectedVulnerabilities([])\n      setIsLoading(false)\n    }, 1000)\n  }\n\n  const handlePaginationChange = (newPagination: { pageIndex: number; pageSize: number }) => {\n    setPagination(newPagination)\n  }\n\n  // Handle download all vulnerabilities\n  const handleDownloadAll = () => {\n    // TODO: Implement download all vulnerabilities functionality\n    console.log('Download all vulnerabilities')\n  }\n\n  // Handle download selected vulnerabilities\n  const handleDownloadSelected = () => {\n    // TODO: Implement download selected vulnerabilities functionality\n    console.log('Download selected vulnerabilities:', selectedVulnerabilities)\n    if (selectedVulnerabilities.length === 0) {\n      return\n    }\n  }\n\n  const vulnerabilityColumns = useMemo(\n    () =>\n      createVulnerabilityColumns({\n        formatDate,\n        handleViewDetail,\n        t: translations,\n      }),\n    [handleViewDetail, translations]\n  )\n\n  if ((isLoading || isQueryLoading) && !activeQuery.data) {\n    return (\n      <DataTableSkeleton\n        toolbarButtonCount={2}\n        rows={6}\n        columns={6}\n      />\n    )\n  }\n\n  return (\n    <>\n      <VulnerabilityDetailDialog\n        vulnerability={selectedVulnerability}\n        open={detailDialogOpen}\n        onOpenChange={setDetailDialogOpen}\n      />\n\n      <VulnerabilitiesDataTable\n        data={vulnerabilities}\n        columns={vulnerabilityColumns}\n        filterValue={filterQuery}\n        onFilterChange={handleFilterChange}\n        pagination={pagination}\n        setPagination={setPagination}\n        paginationInfo={{\n          total: paginationInfo.total,\n          page: paginationInfo.page,\n          pageSize: paginationInfo.pageSize,\n          totalPages: paginationInfo.totalPages,\n        }}\n        onPaginationChange={handlePaginationChange}\n        onSelectionChange={setSelectedVulnerabilities}\n        hideToolbar={hideToolbar}\n      />\n\n      <AlertDialog open={deleteDialogOpen} onOpenChange={setDeleteDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{tConfirm(\"deleteTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {tConfirm(\"deleteVulnMessage\", { name: vulnerabilityToDelete?.vulnType ?? \"\" })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"actions.cancel\")}</AlertDialogCancel>\n            <AlertDialogAction\n              onClick={confirmDelete}\n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n            >\n              {tCommon(\"actions.delete\")}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n\n      <AlertDialog open={bulkDeleteDialogOpen} onOpenChange={setBulkDeleteDialogOpen}>\n        <AlertDialogContent>\n          <AlertDialogHeader>\n            <AlertDialogTitle>{tConfirm(\"bulkDeleteTitle\")}</AlertDialogTitle>\n            <AlertDialogDescription>\n              {tConfirm(\"bulkDeleteVulnMessage\", { count: selectedVulnerabilities.length })}\n            </AlertDialogDescription>\n          </AlertDialogHeader>\n          <div className=\"mt-2 p-2 bg-muted rounded-md max-h-96 overflow-y-auto\">\n            <ul className=\"text-sm space-y-1\">\n              {selectedVulnerabilities.map((vulnerability) => (\n                <li key={vulnerability.id} className=\"flex items-center\">\n                  <span className=\"font-medium\">{vulnerability.vulnType}</span>\n                </li>\n              ))}\n            </ul>\n          </div>\n          <AlertDialogFooter>\n            <AlertDialogCancel>{tCommon(\"actions.cancel\")}</AlertDialogCancel>\n            <AlertDialogAction\n              onClick={confirmBulkDelete}\n              className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n            >\n              {tConfirm(\"deleteVulnCount\", { count: selectedVulnerabilities.length })}\n            </AlertDialogAction>\n          </AlertDialogFooter>\n        </AlertDialogContent>\n      </AlertDialog>\n    </>\n  )\n}\n"
  },
  {
    "path": "frontend/components/vulnerabilities/vulnerability-detail-dialog.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport {\n  Dialog,\n  DialogContent,\n  DialogHeader,\n  DialogTitle,\n} from \"@/components/ui/dialog\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { ScrollArea } from \"@/components/ui/scroll-area\"\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\"\nimport { Button } from \"@/components/ui/button\"\nimport { Copy, Check, Info, FileCode, Terminal, Database, ExternalLink } from \"lucide-react\"\nimport { toast } from \"sonner\"\nimport { getDateLocale } from \"@/lib/date-utils\"\nimport type { Vulnerability, VulnerabilitySeverity } from \"@/types/vulnerability.types\"\n\ninterface SeverityConfigItem {\n  variant: \"default\" | \"secondary\" | \"destructive\" | \"outline\"\n  color: string\n  className: string\n}\n\nconst severityConfig: Record<VulnerabilitySeverity, SeverityConfigItem> = {\n  critical: { variant: \"outline\", color: \"bg-[#da3633]\", className: \"bg-[#da3633]/10 text-[#da3633] border-[#da3633]/20 dark:text-[#f85149]\" },\n  high: { variant: \"outline\", color: \"bg-[#d29922]\", className: \"bg-[#d29922]/10 text-[#d29922] border-[#d29922]/20\" },\n  medium: { variant: \"outline\", color: \"bg-[#d4a72c]\", className: \"bg-[#d4a72c]/10 text-[#d4a72c] border-[#d4a72c]/20\" },\n  low: { variant: \"outline\", color: \"bg-[#238636]\", className: \"bg-[#238636]/10 text-[#238636] border-[#238636]/20 dark:text-[#3fb950]\" },\n  info: { variant: \"outline\", color: \"bg-[#848d97]\", className: \"bg-[#848d97]/10 text-[#848d97] border-[#848d97]/20\" },\n}\n\ninterface VulnerabilityDetailDialogProps {\n  vulnerability: Vulnerability | null\n  open: boolean\n  onOpenChange: (open: boolean) => void\n}\n\n/**\n * Vulnerability detail dialog component - Tab-based layout\n */\nexport function VulnerabilityDetailDialog({\n  vulnerability,\n  open,\n  onOpenChange,\n}: VulnerabilityDetailDialogProps) {\n  const [copiedField, setCopiedField] = React.useState<string | null>(null)\n  const dialogRef = React.useRef<HTMLDivElement>(null)\n  const tToast = useTranslations(\"toast\")\n  const tVuln = useTranslations(\"vulnerabilities.detail\")\n  const tSeverity = useTranslations(\"vulnerabilities.severity\")\n  const locale = useLocale()\n\n  // HTTP-compatible copy implementation (solves Dialog focus trap issue)\n  const copyToClipboard = React.useCallback(async (text: string): Promise<boolean> => {\n    const value = text ?? \"\"\n    // 1) Try Clipboard API first (unconditionally, some browsers allow it on HTTP)\n    if (navigator.clipboard?.writeText) {\n      try {\n        await navigator.clipboard.writeText(value)\n        return true\n      } catch {\n        // Continue to fallback\n      }\n    }\n\n    // 2) HTTP-compatible textarea fallback\n    // Key: Add textarea inside Dialog to avoid focus trap blocking focus\n    try {\n      const container = dialogRef.current || document.body\n      const textArea = document.createElement(\"textarea\")\n      textArea.value = value\n      textArea.style.position = \"fixed\"\n      textArea.style.left = \"-9999px\"\n      textArea.style.top = \"-9999px\"\n      textArea.style.opacity = \"0\"\n      container.appendChild(textArea)\n      textArea.focus()\n      textArea.select()\n      textArea.setSelectionRange(0, textArea.value.length)\n      const success = document.execCommand(\"copy\")\n      container.removeChild(textArea)\n      return success\n    } catch {\n      return false\n    }\n  }, [])\n\n  // Handle copy (HTTP-compatible) - must be declared before conditional return\n  const handleCopy = React.useCallback(async (text: string, field: string) => {\n    const success = await copyToClipboard(text)\n    if (success) {\n      setCopiedField(field)\n      setTimeout(() => setCopiedField(null), 2000)\n      toast.success(tToast(\"copied\"))\n    } else {\n      toast.error(tToast(\"copyFailed\"))\n    }\n  }, [copyToClipboard, tToast])\n\n  if (!vulnerability) return null\n\n  const raw = vulnerability.rawOutput || {}\n\n  const severityConf = severityConfig[vulnerability.severity] || severityConfig.info\n\n  const formatDate = (dateString: string): string => {\n    return new Date(dateString).toLocaleString(getDateLocale(locale), {\n      year: \"numeric\",\n      month: \"2-digit\",\n      day: \"2-digit\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\",\n      hour12: false,\n    })\n  }\n\n  // Extract info from rawOutput\n  const curlCommand = raw[\"curl-command\"] as string | undefined\n  const request = raw.request as string | undefined\n  const response = raw.response as string | undefined\n  const cweId = raw.cwe || raw.info?.classification?.[\"cwe-id\"]?.join(\", \")\n  const cveId = raw.info?.classification?.[\"cve-id\"]\n  const references = raw.info?.reference as string[] | undefined\n  const payload = raw.payload as string | undefined\n  const param = raw.param as string | undefined\n  const evidence = raw.evidence as string | undefined\n  const method = raw.method as string | undefined\n  const infoDesc = raw.info?.description as string | undefined\n\n  // Determine source\n  const isNuclei = vulnerability.source === \"nuclei\"\n  const isDalfox = vulnerability.source === \"dalfox\"\n\n  // Code block component (hover to show copy icon button)\n  const CodeBlock = ({ content, field, maxHeight = \"max-h-64\" }: { content: string; field: string; maxHeight?: string }) => (\n    <div className=\"relative group\">\n      <Button\n        variant=\"ghost\"\n        size=\"icon\"\n        className={`absolute right-2 top-2 z-10 h-6 w-6 hover:bg-accent transition-opacity ${\n          copiedField === field ? 'opacity-100' : 'opacity-0 group-hover:opacity-100'\n        }`}\n        onClick={() => handleCopy(content, field)}\n      >\n        {copiedField === field ? (\n          <Check className=\"h-3.5 w-3.5 text-green-600 dark:text-green-400\" />\n        ) : (\n          <Copy className=\"h-3.5 w-3.5 text-muted-foreground\" />\n        )}\n      </Button>\n      <div className={`bg-muted p-4 rounded-lg overflow-auto ${maxHeight}`}>\n        <pre className=\"text-xs font-mono whitespace-pre-wrap break-all\">{content}</pre>\n      </div>\n    </div>\n  )\n\n  // Content box component (hover to show copy icon button)\n  const ContentBox = ({ title, content, field }: { title: string; content: string; field: string }) => (\n    <div className=\"p-4 rounded-lg border bg-card relative group\">\n      <Button\n        variant=\"ghost\"\n        size=\"icon\"\n        className={`absolute right-3 top-3 z-10 h-6 w-6 hover:bg-accent transition-opacity ${\n          copiedField === field ? 'opacity-100' : 'opacity-0 group-hover:opacity-100'\n        }`}\n        onClick={() => handleCopy(content, field)}\n      >\n        {copiedField === field ? (\n          <Check className=\"h-3.5 w-3.5 text-green-600 dark:text-green-400\" />\n        ) : (\n          <Copy className=\"h-3.5 w-3.5 text-muted-foreground\" />\n        )}\n      </Button>\n      <h3 className=\"font-semibold text-sm mb-2\">{title}</h3>\n      <p className=\"text-sm text-muted-foreground break-all\">{content}</p>\n    </div>\n  )\n\n  // Get translated severity label\n  const getSeverityLabel = (severity: VulnerabilitySeverity): string => {\n    return tSeverity(severity)\n  }\n\n  return (\n    <Dialog open={open} onOpenChange={onOpenChange}>\n      <DialogContent ref={dialogRef} className=\"max-w-4xl max-h-[85vh] p-0 gap-0 overflow-hidden\">\n        {/* Header - pr-10 to leave space for close button */}\n        <div className=\"px-6 py-4 border-b bg-muted/30 pr-12\">\n          <DialogHeader>\n            <div className=\"flex items-center gap-3\">\n              <Badge variant={severityConf.variant} className={`text-sm px-3 py-1 ${severityConf.className}`}>\n                {getSeverityLabel(vulnerability.severity)}\n              </Badge>\n              <DialogTitle className=\"flex-1 text-lg font-semibold truncate\">\n                {vulnerability.vulnType}\n              </DialogTitle>\n              <Badge variant=\"outline\" className=\"text-xs shrink-0\">\n                {vulnerability.source.toUpperCase()}\n              </Badge>\n            </div>\n            {vulnerability.description && (\n              <p className=\"text-sm text-muted-foreground mt-2\">{vulnerability.description}</p>\n            )}\n          </DialogHeader>\n        </div>\n\n        {/* Tab content */}\n        <Tabs defaultValue=\"overview\" className=\"flex-1 flex flex-col\">\n          <div className=\"px-6 pt-2 border-b\">\n            <TabsList className=\"h-10\">\n              <TabsTrigger value=\"overview\" className=\"gap-2\">\n                <Info className=\"h-4 w-4\" />\n                {tVuln(\"tabs.overview\")}\n              </TabsTrigger>\n              <TabsTrigger value=\"evidence\" className=\"gap-2\">\n                <FileCode className=\"h-4 w-4\" />\n                {isNuclei ? tVuln(\"tabs.requestResponse\") : tVuln(\"tabs.evidence\")}\n              </TabsTrigger>\n              {curlCommand && (\n                <TabsTrigger value=\"reproduce\" className=\"gap-2\">\n                  <Terminal className=\"h-4 w-4\" />\n                  {tVuln(\"tabs.reproduce\")}\n                </TabsTrigger>\n              )}\n              <TabsTrigger value=\"raw\" className=\"gap-2\">\n                <Database className=\"h-4 w-4\" />\n                {tVuln(\"tabs.rawData\")}\n              </TabsTrigger>\n            </TabsList>\n          </div>\n\n          <ScrollArea className=\"flex-1 px-6 py-4\">\n            {/* Overview Tab */}\n            <TabsContent value=\"overview\" className=\"mt-0 space-y-6\">\n              {/* Basic info card */}\n              <div className=\"grid gap-4 md:grid-cols-2\">\n                <div className=\"space-y-4 p-4 rounded-lg border bg-card\">\n                  <h3 className=\"font-semibold text-sm flex items-center gap-2\">\n                    <Info className=\"h-4 w-4\" />\n                    {tVuln(\"basicInfo\")}\n                  </h3>\n                  <div className=\"space-y-3 text-sm\">\n                    <div className=\"flex justify-between\">\n                      <span className=\"text-muted-foreground\">ID</span>\n                      <span className=\"font-mono\">{vulnerability.id}</span>\n                    </div>\n                    <div className=\"flex justify-between\">\n                      <span className=\"text-muted-foreground\">{tVuln(\"createdAt\")}</span>\n                      <span>{formatDate(vulnerability.createdAt)}</span>\n                    </div>\n                    <div className=\"flex justify-between\">\n                      <span className=\"text-muted-foreground\">{tVuln(\"severity\")}</span>\n                      <Badge variant={severityConf.variant} className={severityConf.className}>{getSeverityLabel(vulnerability.severity)}</Badge>\n                    </div>\n                    <div className=\"flex justify-between\">\n                      <span className=\"text-muted-foreground\">{tVuln(\"source\")}</span>\n                      <Badge variant=\"outline\">{vulnerability.source.toUpperCase()}</Badge>\n                    </div>\n                    {method && (\n                      <div className=\"flex justify-between\">\n                        <span className=\"text-muted-foreground\">{tVuln(\"httpMethod\")}</span>\n                        <Badge variant=\"outline\">{method}</Badge>\n                      </div>\n                    )}\n                    {param && (\n                      <div className=\"flex justify-between\">\n                        <span className=\"text-muted-foreground\">{tVuln(\"param\")}</span>\n                        <code className=\"text-xs bg-muted px-2 py-1 rounded\">{param}</code>\n                      </div>\n                    )}\n                  </div>\n                </div>\n\n                <div className=\"space-y-4 p-4 rounded-lg border bg-card\">\n                  <h3 className=\"font-semibold text-sm\">{tVuln(\"classification\")}</h3>\n                  <div className=\"space-y-3 text-sm\">\n                    {cweId && (\n                      <div className=\"flex justify-between\">\n                        <span className=\"text-muted-foreground\">CWE</span>\n                        <code className=\"text-xs bg-muted px-2 py-1 rounded\">{cweId}</code>\n                      </div>\n                    )}\n                    {cveId && (\n                      <div className=\"flex justify-between\">\n                        <span className=\"text-muted-foreground\">CVE</span>\n                        <code className=\"text-xs bg-muted px-2 py-1 rounded\">{cveId}</code>\n                      </div>\n                    )}\n                    {vulnerability.cvssScore && (\n                      <div className=\"flex justify-between\">\n                        <span className=\"text-muted-foreground\">CVSS</span>\n                        <Badge variant=\"destructive\">{vulnerability.cvssScore}</Badge>\n                      </div>\n                    )}\n                    {!cweId && !cveId && !vulnerability.cvssScore && (\n                      <p className=\"text-muted-foreground text-xs\">{tVuln(\"noClassification\")}</p>\n                    )}\n                  </div>\n                </div>\n              </div>\n\n              {/* URL */}\n              <ContentBox title={tVuln(\"vulnUrl\")} content={vulnerability.url} field=\"url\" />\n\n              {/* Detailed description */}\n              {infoDesc && (\n                <div className=\"p-4 rounded-lg border bg-card\">\n                  <h3 className=\"font-semibold text-sm mb-2\">{tVuln(\"detailedDesc\")}</h3>\n                  <p className=\"text-sm text-muted-foreground\">{infoDesc}</p>\n                </div>\n              )}\n\n              {/* References */}\n              {references && references.length > 0 && (\n                <div className=\"p-4 rounded-lg border bg-card\">\n                  <h3 className=\"font-semibold text-sm mb-3\">{tVuln(\"references\")}</h3>\n                  <ul className=\"space-y-2\">\n                    {references.map((ref: string, index: number) => (\n                      <li key={index}>\n                        <a \n                          href={ref} \n                          target=\"_blank\" \n                          rel=\"noopener noreferrer\"\n                          className=\"text-sm text-blue-600 hover:underline break-all flex items-center gap-1\"\n                        >\n                          {ref}\n                          <ExternalLink className=\"h-3 w-3 flex-shrink-0\" />\n                        </a>\n                      </li>\n                    ))}\n                  </ul>\n                </div>\n              )}\n            </TabsContent>\n\n            {/* Evidence/Request-Response Tab */}\n            <TabsContent value=\"evidence\" className=\"mt-0 space-y-4\">\n              {isDalfox && (\n                <>\n                  {payload && (\n                    <div>\n                      <h3 className=\"font-semibold text-sm mb-2\">{tVuln(\"evidence.payload\")}</h3>\n                      <CodeBlock content={payload} field=\"payload\" />\n                    </div>\n                  )}\n                  {evidence && (\n                    <div>\n                      <h3 className=\"font-semibold text-sm mb-2\">{tVuln(\"evidence.evidence\")}</h3>\n                      <CodeBlock content={evidence} field=\"evidence\" />\n                    </div>\n                  )}\n                </>\n              )}\n\n              {isNuclei && (\n                <>\n                  {request && (\n                    <div>\n                      <h3 className=\"font-semibold text-sm mb-2\">{tVuln(\"evidence.httpRequest\")}</h3>\n                      <CodeBlock content={request} field=\"request\" maxHeight=\"max-h-80\" />\n                    </div>\n                  )}\n                  {response && (\n                    <div>\n                      <h3 className=\"font-semibold text-sm mb-2\">{tVuln(\"evidence.httpResponse\")}</h3>\n                      <CodeBlock content={response} field=\"response\" maxHeight=\"max-h-80\" />\n                    </div>\n                  )}\n                </>\n              )}\n\n              {!payload && !evidence && !request && !response && (\n                <p className=\"text-muted-foreground text-sm\">{tVuln(\"noEvidence\")}</p>\n              )}\n            </TabsContent>\n\n            {/* Reproduce Tab */}\n            {curlCommand && (\n              <TabsContent value=\"reproduce\" className=\"mt-0 space-y-4\">\n                <div>\n                  <h3 className=\"font-semibold text-sm mb-2\">{tVuln(\"curlCommand\")}</h3>\n                  <p className=\"text-xs text-muted-foreground mb-3\">\n                    {tVuln(\"curlHint\")}\n                  </p>\n                  <CodeBlock content={curlCommand} field=\"curl\" maxHeight=\"max-h-40\" />\n                </div>\n              </TabsContent>\n            )}\n\n            {/* Raw data Tab */}\n            <TabsContent value=\"raw\" className=\"mt-0\">\n              <div>\n                <h3 className=\"font-semibold text-sm mb-2\">{tVuln(\"rawOutput\")}</h3>\n                <p className=\"text-xs text-muted-foreground mb-3\">\n                  {tVuln(\"rawOutputHint\")}\n                </p>\n                <CodeBlock \n                  content={JSON.stringify(raw, null, 2)} \n                  field=\"raw\" \n                  maxHeight=\"max-h-[50vh]\" \n                />\n              </div>\n            </TabsContent>\n          </ScrollArea>\n        </Tabs>\n      </DialogContent>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "frontend/components/websites/websites-columns.tsx",
    "content": "\"use client\"\n\nimport React from \"react\"\nimport { ColumnDef } from \"@tanstack/react-table\"\nimport { Checkbox } from \"@/components/ui/checkbox\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { DataTableColumnHeader } from \"@/components/ui/data-table/column-header\"\nimport type { WebSite } from \"@/types/website.types\"\nimport { ExpandableCell, ExpandableTagList } from \"@/components/ui/data-table/expandable-cell\"\n\n// Translation type definitions\nexport interface WebsiteTranslations {\n  columns: {\n    url: string\n    host: string\n    title: string\n    status: string\n    technologies: string\n    contentLength: string\n    location: string\n    webServer: string\n    contentType: string\n    responseBody: string\n    vhost: string\n    responseHeaders: string\n    createdAt: string\n  }\n  actions: {\n    selectAll: string\n    selectRow: string\n  }\n}\n\ninterface CreateWebSiteColumnsProps {\n  formatDate: (dateString: string) => string\n  t: WebsiteTranslations\n}\n\nexport function createWebSiteColumns({\n  formatDate,\n  t,\n}: CreateWebSiteColumnsProps): ColumnDef<WebSite>[] {\n  return [\n    {\n      id: \"select\",\n      size: 40,\n      minSize: 40,\n      maxSize: 40,\n      enableResizing: false,\n      header: ({ table }) => (\n        <Checkbox\n          checked={\n            table.getIsAllPageRowsSelected() ||\n            (table.getIsSomePageRowsSelected() && \"indeterminate\")\n          }\n          onCheckedChange={(value) => table.toggleAllPageRowsSelected(!!value)}\n          aria-label={t.actions.selectAll}\n        />\n      ),\n      cell: ({ row }) => (\n        <Checkbox\n          checked={row.getIsSelected()}\n          onCheckedChange={(value) => row.toggleSelected(!!value)}\n          aria-label={t.actions.selectRow}\n        />\n      ),\n      enableSorting: false,\n      enableHiding: false,\n    },\n    {\n      accessorKey: \"url\",\n      meta: { title: t.columns.url },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.url} />\n      ),\n      size: 400,\n      minSize: 200,\n      maxSize: 700,\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"url\")} />\n      ),\n    },\n    {\n      accessorKey: \"host\",\n      meta: { title: t.columns.host },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.host} />\n      ),\n      size: 200,\n      minSize: 100,\n      maxSize: 250,\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"host\")} />\n      ),\n    },\n    {\n      accessorKey: \"title\",\n      meta: { title: t.columns.title },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.title} />\n      ),\n      size: 150,\n      minSize: 100,\n      maxSize: 300,\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"title\")} />\n      ),\n    },\n    {\n      accessorKey: \"statusCode\",\n      meta: { title: t.columns.status },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.status} />\n      ),\n      size: 80,\n      minSize: 60,\n      maxSize: 100,\n      enableResizing: false,\n      cell: ({ row }) => {\n        const statusCode = row.getValue(\"statusCode\") as number\n        if (!statusCode) return \"-\"\n        \n        let variant: \"default\" | \"secondary\" | \"destructive\" | \"outline\" = \"default\"\n        if (statusCode >= 200 && statusCode < 300) {\n          variant = \"default\"\n        } else if (statusCode >= 300 && statusCode < 400) {\n          variant = \"secondary\"\n        } else if (statusCode >= 400) {\n          variant = \"destructive\"\n        }\n        \n        return <Badge variant={variant}>{statusCode}</Badge>\n      },\n    },\n    {\n      accessorKey: \"tech\",\n      meta: { title: t.columns.technologies },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.technologies} />\n      ),\n      size: 200,\n      minSize: 150,\n      cell: ({ row }) => {\n        const tech = row.getValue(\"tech\") as string[]\n        return <ExpandableTagList items={tech} maxLines={2} variant=\"outline\" />\n      },\n    },\n    {\n      accessorKey: \"contentLength\",\n      meta: { title: t.columns.contentLength },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.contentLength} />\n      ),\n      size: 100,\n      minSize: 80,\n      maxSize: 150,\n      cell: ({ row }) => {\n        const contentLength = row.getValue(\"contentLength\") as number\n        if (!contentLength) return \"-\"\n        return contentLength.toString()\n      },\n    },\n    {\n      accessorKey: \"location\",\n      meta: { title: t.columns.location },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.location} />\n      ),\n      size: 150,\n      minSize: 100,\n      maxSize: 300,\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"location\")} />\n      ),\n    },\n    {\n      accessorKey: \"webserver\",\n      meta: { title: t.columns.webServer },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.webServer} />\n      ),\n      size: 120,\n      minSize: 80,\n      maxSize: 200,\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"webserver\")} />\n      ),\n    },\n    {\n      accessorKey: \"contentType\",\n      meta: { title: t.columns.contentType },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.contentType} />\n      ),\n      size: 120,\n      minSize: 80,\n      maxSize: 200,\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"contentType\")} />\n      ),\n    },\n    {\n      accessorKey: \"responseBody\",\n      meta: { title: t.columns.responseBody },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.responseBody} />\n      ),\n      size: 350,\n      minSize: 250,\n      cell: ({ row }) => (\n        <ExpandableCell value={row.getValue(\"responseBody\")} />\n      ),\n    },\n    {\n      accessorKey: \"responseHeaders\",\n      meta: { title: t.columns.responseHeaders },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.responseHeaders} />\n      ),\n      size: 250,\n      minSize: 150,\n      maxSize: 400,\n      cell: ({ row }) => {\n        const headers = row.getValue(\"responseHeaders\") as string | null\n        if (!headers) return \"-\"\n        return <ExpandableCell value={headers} maxLines={3} />\n      },\n    },\n    {\n      accessorKey: \"vhost\",\n      meta: { title: t.columns.vhost },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.vhost} />\n      ),\n      size: 80,\n      minSize: 60,\n      maxSize: 100,\n      enableResizing: false,\n      cell: ({ row }) => {\n        const vhost = row.getValue(\"vhost\") as boolean | null\n        if (vhost === null) return \"-\"\n        return (\n          <Badge variant={vhost ? \"default\" : \"secondary\"} className=\"text-xs\">\n            {vhost ? \"true\" : \"false\"}\n          </Badge>\n        )\n      },\n    },\n    {\n      accessorKey: \"createdAt\",\n      meta: { title: t.columns.createdAt },\n      header: ({ column }) => (\n        <DataTableColumnHeader column={column} title={t.columns.createdAt} />\n      ),\n      size: 150,\n      minSize: 120,\n      maxSize: 200,\n      enableResizing: false,\n      cell: ({ row }) => {\n        const createdAt = row.getValue(\"createdAt\") as string\n        return <div className=\"text-sm\">{createdAt ? formatDate(createdAt) : \"-\"}</div>\n      },\n    },\n  ]\n}\n"
  },
  {
    "path": "frontend/components/websites/websites-data-table.tsx",
    "content": "\"use client\"\n\nimport * as React from \"react\"\nimport type { ColumnDef } from \"@tanstack/react-table\"\nimport { useTranslations } from \"next-intl\"\nimport { UnifiedDataTable } from \"@/components/ui/data-table\"\nimport type { FilterField } from \"@/components/common/smart-filter-input\"\nimport type { WebSite } from \"@/types/website.types\"\nimport type { PaginationInfo } from \"@/types/common.types\"\nimport type { DownloadOption } from \"@/types/data-table.types\"\n\n// Website page filter field configuration\nconst WEBSITE_FILTER_FIELDS: FilterField[] = [\n  { key: \"url\", label: \"URL\", description: \"Full URL\" },\n  { key: \"host\", label: \"Host\", description: \"Hostname\" },\n  { key: \"title\", label: \"Title\", description: \"Page title\" },\n  { key: \"status\", label: \"Status\", description: \"HTTP status code\" },\n  { key: \"tech\", label: \"Tech\", description: \"Technologies\" },\n  { key: \"responseHeaders\", label: \"Headers\", description: \"Response headers\" },\n]\n\n// Website page filter examples\nconst WEBSITE_FILTER_EXAMPLES = [\n  'host=\"api.example.com\" && status=\"200\"',\n  'title=\"Login\" || title=\"Admin\"',\n  'url=\"/api/*\" && status!=\"404\"',\n  'tech=\"nginx\" || tech=\"apache\"',\n]\n\ninterface WebSitesDataTableProps {\n  data: WebSite[]\n  columns: ColumnDef<WebSite>[]\n  // Smart filter\n  filterValue?: string\n  onFilterChange?: (value: string) => void\n  isSearching?: boolean\n  pagination?: { pageIndex: number; pageSize: number }\n  setPagination?: React.Dispatch<React.SetStateAction<{ pageIndex: number; pageSize: number }>>\n  paginationInfo?: PaginationInfo\n  onPaginationChange?: (pagination: { pageIndex: number; pageSize: number }) => void\n  onBulkDelete?: () => void\n  onSelectionChange?: (selectedRows: WebSite[]) => void\n  onDownloadAll?: () => void\n  onDownloadSelected?: () => void\n  onBulkAdd?: () => void\n}\n\nexport function WebSitesDataTable({\n  data = [],\n  columns,\n  filterValue,\n  onFilterChange,\n  isSearching = false,\n  pagination,\n  setPagination,\n  paginationInfo,\n  onPaginationChange,\n  onBulkDelete,\n  onSelectionChange,\n  onDownloadAll,\n  onDownloadSelected,\n  onBulkAdd,\n}: WebSitesDataTableProps) {\n  const t = useTranslations(\"common.status\")\n  const tActions = useTranslations(\"common.actions\")\n  const tDownload = useTranslations(\"common.download\")\n  \n  // Handle smart filter search\n  const handleSmartSearch = (rawQuery: string) => {\n    if (onFilterChange) {\n      onFilterChange(rawQuery)\n    }\n  }\n\n  // Download options\n  const downloadOptions: DownloadOption[] = []\n  if (onDownloadAll) {\n    downloadOptions.push({\n      key: \"all\",\n      label: tDownload(\"all\"),\n      onClick: onDownloadAll,\n    })\n  }\n  if (onDownloadSelected) {\n    downloadOptions.push({\n      key: \"selected\",\n      label: tDownload(\"selected\"),\n      onClick: onDownloadSelected,\n      disabled: (count) => count === 0,\n    })\n  }\n\n  return (\n    <UnifiedDataTable\n      data={data}\n      columns={columns}\n      getRowId={(row) => String(row.id)}\n      // Pagination\n      pagination={pagination}\n      setPagination={setPagination}\n      paginationInfo={paginationInfo}\n      onPaginationChange={onPaginationChange}\n      // Smart filter\n      searchMode=\"smart\"\n      searchValue={filterValue}\n      onSearch={handleSmartSearch}\n      isSearching={isSearching}\n      filterFields={WEBSITE_FILTER_FIELDS}\n      filterExamples={WEBSITE_FILTER_EXAMPLES}\n      // Selection\n      onSelectionChange={onSelectionChange}\n      // Bulk operations\n      onBulkDelete={onBulkDelete}\n      bulkDeleteLabel={tActions(\"delete\")}\n      showAddButton={false}\n      // Bulk add button\n      onBulkAdd={onBulkAdd}\n      bulkAddLabel={tActions(\"add\")}\n      // Download\n      downloadOptions={downloadOptions.length > 0 ? downloadOptions : undefined}\n      // Empty state\n      emptyMessage={t(\"noData\")}\n    />\n  )\n}\n"
  },
  {
    "path": "frontend/components/websites/websites-view.tsx",
    "content": "\"use client\"\n\nimport React, { useCallback, useMemo, useState, useEffect } from \"react\"\nimport { AlertTriangle } from \"lucide-react\"\nimport { useTranslations, useLocale } from \"next-intl\"\nimport { WebSitesDataTable } from \"./websites-data-table\"\nimport { createWebSiteColumns } from \"./websites-columns\"\nimport { DataTableSkeleton } from \"@/components/ui/data-table-skeleton\"\nimport { Button } from \"@/components/ui/button\"\nimport { useTargetWebSites, useScanWebSites } from \"@/hooks/use-websites\"\nimport { useTarget } from \"@/hooks/use-targets\"\nimport { WebsiteService } from \"@/services/website.service\"\nimport { BulkAddUrlsDialog } from \"@/components/common/bulk-add-urls-dialog\"\nimport { ConfirmDialog } from \"@/components/ui/confirm-dialog\"\nimport { getDateLocale } from \"@/lib/date-utils\"\nimport type { TargetType } from \"@/lib/url-validator\"\nimport type { WebSite } from \"@/types/website.types\"\nimport { toast } from \"sonner\"\n\nexport function WebSitesView({\n  targetId,\n  scanId,\n}: {\n  targetId?: number\n  scanId?: number\n}) {\n  const [pagination, setPagination] = useState({\n    pageIndex: 0,\n    pageSize: 10,\n  })\n  const [selectedWebSites, setSelectedWebSites] = useState<WebSite[]>([])\n  const [bulkAddDialogOpen, setBulkAddDialogOpen] = useState(false)\n  const [deleteDialogOpen, setDeleteDialogOpen] = useState(false)\n  const [isDeleting, setIsDeleting] = useState(false)\n\n  const [filterQuery, setFilterQuery] = useState(\"\")\n  const [isSearching, setIsSearching] = useState(false)\n\n  // Internationalization\n  const tColumns = useTranslations(\"columns\")\n  const tCommon = useTranslations(\"common\")\n  const tToast = useTranslations(\"toast\")\n  const tStatus = useTranslations(\"common.status\")\n  const locale = useLocale()\n\n  // Build translation object\n  const translations = useMemo(() => ({\n    columns: {\n      url: tColumns(\"common.url\"),\n      host: tColumns(\"website.host\"),\n      title: tColumns(\"endpoint.title\"),\n      status: tColumns(\"common.status\"),\n      technologies: tColumns(\"endpoint.technologies\"),\n      contentLength: tColumns(\"endpoint.contentLength\"),\n      location: tColumns(\"endpoint.location\"),\n      webServer: tColumns(\"endpoint.webServer\"),\n      contentType: tColumns(\"endpoint.contentType\"),\n      responseBody: tColumns(\"endpoint.responseBody\"),\n      vhost: tColumns(\"endpoint.vhost\"),\n      responseHeaders: tColumns(\"website.responseHeaders\"),\n      createdAt: tColumns(\"common.createdAt\"),\n    },\n    actions: {\n      selectAll: tCommon(\"actions.selectAll\"),\n      selectRow: tCommon(\"actions.selectRow\"),\n    },\n  }), [tColumns, tCommon])\n\n  // Get target info (for URL matching validation)\n  const { data: target } = useTarget(targetId || 0, { enabled: !!targetId })\n\n  const handleFilterChange = (value: string) => {\n    setIsSearching(true)\n    setFilterQuery(value)\n    setPagination((prev) => ({ ...prev, pageIndex: 0 }))\n  }\n\n  const targetQuery = useTargetWebSites(\n    targetId || 0,\n    {\n      page: pagination.pageIndex + 1,\n      pageSize: pagination.pageSize,\n      filter: filterQuery || undefined,\n    },\n    { enabled: !!targetId }\n  )\n\n  const scanQuery = useScanWebSites(\n    scanId || 0,\n    {\n      page: pagination.pageIndex + 1,\n      pageSize: pagination.pageSize,\n      filter: filterQuery || undefined,\n    },\n    { enabled: !!scanId }\n  )\n\n  const activeQuery = targetId ? targetQuery : scanQuery\n  const { data, isLoading, isFetching, error, refetch } = activeQuery\n\n  // Reset search state when request completes\n  useEffect(() => {\n    if (!isFetching && isSearching) {\n      setIsSearching(false)\n    }\n  }, [isFetching, isSearching])\n\n  const formatDate = useCallback((dateString: string) => {\n    return new Date(dateString).toLocaleString(getDateLocale(locale), {\n      year: \"numeric\",\n      month: \"2-digit\",\n      day: \"2-digit\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\",\n      hour12: false,\n    })\n  }, [locale])\n\n  const columns = useMemo(\n    () =>\n      createWebSiteColumns({\n        formatDate,\n        t: translations,\n      }),\n    [formatDate, translations]\n  )\n\n  const websites: WebSite[] = useMemo(() => {\n    if (!data?.results) return []\n    return data.results\n  }, [data])\n\n  const paginationInfo = data\n    ? {\n      total: data.total,\n      page: data.page,\n      pageSize: data.pageSize,\n      totalPages: data.totalPages,\n    }\n    : undefined\n\n  const handleSelectionChange = useCallback((selectedRows: WebSite[]) => {\n    setSelectedWebSites(selectedRows)\n  }, [])\n\n  // Format date as YYYY-MM-DD HH:MM:SS (consistent with backend)\n  const formatDateForCSV = (dateString: string): string => {\n    if (!dateString) return ''\n    const date = new Date(dateString)\n    const year = date.getFullYear()\n    const month = String(date.getMonth() + 1).padStart(2, '0')\n    const day = String(date.getDate()).padStart(2, '0')\n    const hours = String(date.getHours()).padStart(2, '0')\n    const minutes = String(date.getMinutes()).padStart(2, '0')\n    const seconds = String(date.getSeconds()).padStart(2, '0')\n    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`\n  }\n\n  // CSV escape\n  const escapeCSV = (value: string | number | boolean | null | undefined): string => {\n    if (value === null || value === undefined) return ''\n    const str = String(value)\n    if (str.includes(',') || str.includes('\"') || str.includes('\\n')) {\n      return `\"${str.replace(/\"/g, '\"\"')}\"`\n    }\n    return str\n  }\n\n  // Format array as comma-separated string\n  const formatArrayForCSV = (arr: string[] | undefined): string => {\n    if (!arr || arr.length === 0) return ''\n    return arr.join(',')\n  }\n\n  // Generate CSV content\n  const generateCSV = (items: WebSite[]): string => {\n    const BOM = '\\ufeff'\n    const headers = [\n      'url', 'host', 'location', 'title', 'status_code',\n      'content_length', 'content_type', 'webserver', 'tech',\n      'response_body', 'vhost', 'created_at'\n    ]\n    \n    const rows = items.map(item => [\n      escapeCSV(item.url),\n      escapeCSV(item.host),\n      escapeCSV(item.location),\n      escapeCSV(item.title),\n      escapeCSV(item.statusCode),\n      escapeCSV(item.contentLength),\n      escapeCSV(item.contentType),\n      escapeCSV(item.webserver),\n      escapeCSV(formatArrayForCSV(item.tech)),\n      escapeCSV(item.responseBody),\n      escapeCSV(item.vhost),\n      escapeCSV(formatDateForCSV(item.createdAt))\n    ].join(','))\n    \n    return BOM + [headers.join(','), ...rows].join('\\n')\n  }\n\n  // Handle download all websites\n  const handleDownloadAll = async () => {\n    try {\n      let blob: Blob | null = null\n\n      if (scanId) {\n        const data = await WebsiteService.exportWebsitesByScanId(scanId)\n        blob = data\n      } else if (targetId) {\n        const data = await WebsiteService.exportWebsitesByTargetId(targetId)\n        blob = data\n      } else {\n        if (!websites || websites.length === 0) {\n          return\n        }\n        const csvContent = generateCSV(websites)\n        blob = new Blob([csvContent], { type: \"text/csv;charset=utf-8\" })\n      }\n\n      if (!blob) return\n\n      const url = URL.createObjectURL(blob)\n      const a = document.createElement(\"a\")\n      const prefix = scanId ? `scan-${scanId}` : targetId ? `target-${targetId}` : \"websites\"\n      a.href = url\n      a.download = `${prefix}-websites-${Date.now()}.csv`\n      document.body.appendChild(a)\n      a.click()\n      document.body.removeChild(a)\n      URL.revokeObjectURL(url)\n    } catch (error) {\n      console.error(\"Failed to download website list\", error)\n      toast.error(tToast(\"downloadFailed\"))\n    }\n  }\n\n  // Handle download selected websites\n  const handleDownloadSelected = () => {\n    if (selectedWebSites.length === 0) {\n      return\n    }\n    const csvContent = generateCSV(selectedWebSites)\n    const blob = new Blob([csvContent], { type: \"text/csv;charset=utf-8\" })\n    const url = URL.createObjectURL(blob)\n    const a = document.createElement(\"a\")\n    const prefix = scanId ? `scan-${scanId}` : targetId ? `target-${targetId}` : \"websites\"\n    a.href = url\n    a.download = `${prefix}-websites-selected-${Date.now()}.csv`\n    document.body.appendChild(a)\n    a.click()\n    document.body.removeChild(a)\n    URL.revokeObjectURL(url)\n  }\n\n  // Handle bulk delete\n  const handleBulkDelete = async () => {\n    if (selectedWebSites.length === 0) return\n    \n    setIsDeleting(true)\n    try {\n      const ids = selectedWebSites.map(w => w.id)\n      const result = await WebsiteService.bulkDelete(ids)\n      toast.success(tToast(\"deleteSuccess\", { count: result.deletedCount }))\n      setSelectedWebSites([])\n      setDeleteDialogOpen(false)\n      refetch()\n    } catch (error) {\n      console.error(\"Failed to delete websites\", error)\n      toast.error(tToast(\"deleteFailed\"))\n    } finally {\n      setIsDeleting(false)\n    }\n  }\n\n  if (error) {\n    return (\n      <div className=\"flex flex-col items-center justify-center py-12\">\n        <div className=\"rounded-full bg-destructive/10 p-3 mb-4\">\n          <AlertTriangle className=\"h-10 w-10 text-destructive\" />\n        </div>\n        <h3 className=\"text-lg font-semibold mb-2\">{tStatus(\"error\")}</h3>\n        <p className=\"text-muted-foreground text-center mb-4\">\n          {tStatus(\"error\")}\n        </p>\n        <Button onClick={() => refetch()}>{tCommon(\"actions.retry\")}</Button>\n      </div>\n    )\n  }\n\n  if (isLoading && !data) {\n    return (\n      <DataTableSkeleton\n        toolbarButtonCount={2}\n        rows={6}\n        columns={5}\n      />\n    )\n  }\n\n  return (\n    <>\n      <WebSitesDataTable\n        data={websites}\n        columns={columns}\n        filterValue={filterQuery}\n        onFilterChange={handleFilterChange}\n        isSearching={isSearching}\n        pagination={pagination}\n        setPagination={setPagination}\n        paginationInfo={paginationInfo}\n        onPaginationChange={setPagination}\n        onSelectionChange={handleSelectionChange}\n        onDownloadAll={handleDownloadAll}\n        onDownloadSelected={handleDownloadSelected}\n        onBulkDelete={targetId ? () => setDeleteDialogOpen(true) : undefined}\n        onBulkAdd={targetId ? () => setBulkAddDialogOpen(true) : undefined}\n      />\n\n      {/* Bulk add dialog */}\n      {targetId && (\n        <BulkAddUrlsDialog\n          targetId={targetId}\n          assetType=\"website\"\n          targetName={target?.name}\n          targetType={target?.type as TargetType}\n          open={bulkAddDialogOpen}\n          onOpenChange={setBulkAddDialogOpen}\n          onSuccess={() => refetch()}\n        />\n      )}\n\n      {/* Delete confirmation dialog */}\n      <ConfirmDialog\n        open={deleteDialogOpen}\n        onOpenChange={setDeleteDialogOpen}\n        title={tCommon(\"actions.confirmDelete\")}\n        description={tCommon(\"actions.deleteConfirmMessage\", { count: selectedWebSites.length })}\n        onConfirm={handleBulkDelete}\n        loading={isDeleting}\n        variant=\"destructive\"\n      />\n    </>\n  )\n}\n"
  },
  {
    "path": "frontend/components.json",
    "content": "{\n  \"$schema\": \"https://ui.shadcn.com/schema.json\",\n  \"style\": \"new-york\",\n  \"rsc\": true,\n  \"tsx\": true,\n  \"tailwind\": {\n    \"config\": \"\",\n    \"css\": \"app/globals.css\",\n    \"baseColor\": \"neutral\",\n    \"cssVariables\": true,\n    \"prefix\": \"\"\n  },\n  \"iconLibrary\": \"lucide\",\n  \"aliases\": {\n    \"components\": \"@/components\",\n    \"utils\": \"@/lib/utils\",\n    \"ui\": \"@/components/ui\",\n    \"lib\": \"@/lib\",\n    \"hooks\": \"@/hooks\"\n  },\n  \"registries\": {}\n}\n"
  },
  {
    "path": "frontend/eslint.config.mjs",
    "content": "import { dirname } from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { FlatCompat } from \"@eslint/eslintrc\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nconst compat = new FlatCompat({\n  baseDirectory: __dirname,\n});\n\nconst eslintConfig = [\n  ...compat.extends(\"next/core-web-vitals\", \"next/typescript\"),\n  {\n    ignores: [\n      \"node_modules/**\",\n      \".next/**\",\n      \"out/**\",\n      \"build/**\",\n      \"next-env.d.ts\",\n    ],\n  },\n];\n\nexport default eslintConfig;\n"
  },
  {
    "path": "frontend/hooks/use-api-key-settings.ts",
    "content": "import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\nimport { ApiKeySettingsService } from '@/services/api-key-settings.service'\nimport type { ApiKeySettings } from '@/types/api-key-settings.types'\nimport { useToastMessages } from '@/lib/toast-helpers'\nimport { getErrorCode } from '@/lib/response-parser'\n\nexport function useApiKeySettings() {\n  return useQuery({\n    queryKey: ['api-key-settings'],\n    queryFn: () => ApiKeySettingsService.getSettings(),\n  })\n}\n\nexport function useUpdateApiKeySettings() {\n  const qc = useQueryClient()\n  const toastMessages = useToastMessages()\n  \n  return useMutation({\n    mutationFn: (data: Partial<ApiKeySettings>) =>\n      ApiKeySettingsService.updateSettings(data),\n    onSuccess: () => {\n      qc.invalidateQueries({ queryKey: ['api-key-settings'] })\n      toastMessages.success('toast.apiKeys.settings.success')\n    },\n    onError: (error: any) => {\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.apiKeys.settings.error')\n    },\n  })\n}\n"
  },
  {
    "path": "frontend/hooks/use-auth.ts",
    "content": "/**\n * Authentication-related hooks\n */\nimport { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'\nimport { useRouter } from 'next/navigation'\nimport { login, logout, getMe, changePassword } from '@/services/auth.service'\nimport { useToastMessages } from '@/lib/toast-helpers'\nimport { getErrorCode } from '@/lib/response-parser'\nimport type { LoginRequest, ChangePasswordRequest } from '@/types/auth.types'\n\n/**\n * Get current user information\n */\nexport function useAuth() {\n  const skipAuth = process.env.NEXT_PUBLIC_SKIP_AUTH === 'true'\n  \n  return useQuery({\n    queryKey: ['auth', 'me'],\n    queryFn: skipAuth \n      ? () => Promise.resolve({ authenticated: true } as Awaited<ReturnType<typeof getMe>>)\n      : getMe,\n    staleTime: 1000 * 60 * 5, // Don't re-request within 5 minutes\n    retry: false,\n  })\n}\n\n/**\n * User login\n */\nexport function useLogin() {\n  const queryClient = useQueryClient()\n  const router = useRouter()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (data: LoginRequest) => login(data),\n    onSuccess: async () => {\n      // Wait for auth query to refresh before redirecting\n      await queryClient.invalidateQueries({ queryKey: ['auth', 'me'] })\n      await queryClient.refetchQueries({ queryKey: ['auth', 'me'] })\n      toastMessages.success('toast.auth.login.success')\n      router.push('/dashboard/')\n    },\n    onError: (error: any) => {\n      const errorCode = getErrorCode(error.response?.data)\n      if (errorCode) {\n        toastMessages.errorFromCode(errorCode)\n      } else {\n        toastMessages.error('auth.loginFailed')\n      }\n    },\n  })\n}\n\n/**\n * User logout\n */\nexport function useLogout() {\n  const queryClient = useQueryClient()\n  const router = useRouter()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: logout,\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: ['auth', 'me'] })\n      toastMessages.success('toast.auth.logout.success')\n      router.push('/login/')\n    },\n    onError: (error: any) => {\n      const errorCode = getErrorCode(error.response?.data)\n      if (errorCode) {\n        toastMessages.errorFromCode(errorCode)\n      } else {\n        toastMessages.error('errors.unknown')\n      }\n    },\n  })\n}\n\n/**\n * Change password\n */\nexport function useChangePassword() {\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (data: ChangePasswordRequest) => changePassword(data),\n    onSuccess: () => {\n      toastMessages.success('toast.auth.changePassword.success')\n    },\n    onError: (error: any) => {\n      const errorCode = getErrorCode(error.response?.data)\n      if (errorCode) {\n        toastMessages.errorFromCode(errorCode)\n      } else {\n        toastMessages.error('toast.auth.changePassword.error')\n      }\n    },\n  })\n}\n"
  },
  {
    "path": "frontend/hooks/use-color-theme.ts",
    "content": "/**\n * 颜色主题切换 hook\n * 管理主题色（不是亮暗模式）\n */\nimport { useEffect, useState, useCallback } from 'react'\nimport { useTheme } from 'next-themes'\n\n// 可用的颜色主题（colors 数组用于预览，isDark 表示是否为暗色主题）\nexport const COLOR_THEMES = [\n  { id: 'vercel', name: 'Vercel', color: '#000000', colors: ['#ffffff', '#000000', '#666666', '#999999'], isDark: false },\n  { id: 'vercel-dark', name: 'Vercel Dark', color: '#000000', colors: ['#000000', '#ffffff', '#333333', '#666666'], isDark: true },\n  { id: 'violet-bloom', name: 'Violet Bloom', color: '#7c3aed', colors: ['#7c3aed', '#8b5cf6', '#a78bfa', '#c4b5fd'], isDark: false },\n  { id: 'bubblegum', name: 'Bubblegum', color: '#d946a8', colors: ['#d946a8', '#ec4899', '#f472b6', '#f9a8d4'], isDark: false },\n  { id: 'quantum-rose', name: 'Quantum Rose', color: '#e11d48', colors: ['#e11d48', '#f43f5e', '#fb7185', '#fda4af'], isDark: false },\n  { id: 'clean-slate', name: 'Clean Slate', color: '#3b82f6', colors: ['#3b82f6', '#60a5fa', '#93c5fd', '#bfdbfe'], isDark: false },\n  { id: 'cosmic-night', name: 'Cosmic Night', color: '#6366f1', colors: ['#1e1b4b', '#6366f1', '#818cf8', '#a5b4fc'], isDark: true },\n  { id: 'cyberpunk-1', name: 'Cyberpunk', color: '#00ffff', colors: ['#0f172a', '#00ffff', '#a855f7', '#ec4899'], isDark: true },\n  { id: 'eva-01', name: 'EVA Unit-01', color: '#9333ea', colors: ['#1a0a2e', '#9333ea', '#22c55e', '#84cc16'], isDark: true },\n] as const\n\nexport type ColorThemeId = typeof COLOR_THEMES[number]['id']\n\nconst STORAGE_KEY = 'color-theme'\n\n/**\n * 获取当前颜色主题\n */\nfunction getStoredTheme(): ColorThemeId {\n  if (typeof window === 'undefined') return 'vercel-dark'\n  return (localStorage.getItem(STORAGE_KEY) as ColorThemeId) || 'vercel-dark'\n}\n\n/**\n * 应用颜色主题到 DOM（仅设置 data-theme）\n */\nfunction applyThemeAttribute(themeId: ColorThemeId) {\n  if (typeof window === 'undefined') return\n  const root = document.documentElement\n  root.setAttribute('data-theme', themeId)\n}\n\n/**\n * 颜色主题 hook\n */\nexport function useColorTheme() {\n  const [theme, setThemeState] = useState<ColorThemeId>('vercel-dark')\n  const [mounted, setMounted] = useState(false)\n  const { setTheme: setNextTheme } = useTheme()\n\n  // 初始化\n  useEffect(() => {\n    const stored = getStoredTheme()\n    setThemeState(stored)\n    applyThemeAttribute(stored)\n    // 同步 next-themes 亮暗模式\n    const themeConfig = COLOR_THEMES.find(t => t.id === stored)\n    setNextTheme(themeConfig?.isDark ? 'dark' : 'light')\n    setMounted(true)\n  }, [setNextTheme])\n\n  // 切换主题\n  const setTheme = useCallback((newTheme: ColorThemeId) => {\n    setThemeState(newTheme)\n    localStorage.setItem(STORAGE_KEY, newTheme)\n    applyThemeAttribute(newTheme)\n    // 同步 next-themes 亮暗模式\n    const themeConfig = COLOR_THEMES.find(t => t.id === newTheme)\n    setNextTheme(themeConfig?.isDark ? 'dark' : 'light')\n  }, [setNextTheme])\n\n  // 获取当前主题信息\n  const currentTheme = COLOR_THEMES.find(t => t.id === theme) || COLOR_THEMES[0]\n\n  return {\n    theme,\n    setTheme,\n    themes: COLOR_THEMES,\n    currentTheme,\n    mounted,\n  }\n}\n"
  },
  {
    "path": "frontend/hooks/use-commands.ts",
    "content": "import { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\"\nimport { CommandService } from \"@/services/command.service\"\nimport type {\n  GetCommandsRequest,\n  CreateCommandRequest,\n  UpdateCommandRequest,\n  GetCommandsResponse,\n  Command,\n} from \"@/types/command.types\"\nimport { useToastMessages } from '@/lib/toast-helpers'\nimport { getErrorCode } from '@/lib/response-parser'\n\n// Mock data\nconst MOCK_COMMANDS: Command[] = [\n  {\n    id: 1,\n    createdAt: \"2024-01-15T10:30:00Z\",\n    updatedAt: \"2024-01-15T10:30:00Z\",\n    toolId: 1,\n    tool: {\n      id: 1,\n      name: \"subfinder\",\n      type: \"opensource\",\n      createdAt: \"2024-01-01T00:00:00Z\",\n      updatedAt: \"2024-01-01T00:00:00Z\",\n      repoUrl: \"https://github.com/projectdiscovery/subfinder\",\n      version: \"v2.6.5\",\n      description: \"Fast passive subdomain enumeration tool\",\n      categoryNames: [\"subdomain\", \"recon\"],\n      directory: \"\",\n      installCommand: \"go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest\",\n      updateCommand: \"go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest\",\n      versionCommand: \"subfinder -version\",\n    },\n    name: \"subdomain_scan\",\n    displayName: \"Subdomain Scan\",\n    description: \"Subdomain scanning using subfinder\",\n    commandTemplate: \"subfinder -d {{domain}} -o {{output}}\",\n  },\n  {\n    id: 2,\n    createdAt: \"2024-01-16T11:20:00Z\",\n    updatedAt: \"2024-01-16T11:20:00Z\",\n    toolId: 2,\n    tool: {\n      id: 2,\n      name: \"nmap\",\n      type: \"opensource\",\n      createdAt: \"2024-01-01T00:00:00Z\",\n      updatedAt: \"2024-01-01T00:00:00Z\",\n      repoUrl: \"https://github.com/nmap/nmap\",\n      version: \"7.94\",\n      description: \"Network exploration tool and security / port scanner\",\n      categoryNames: [\"port\", \"network\"],\n      directory: \"\",\n      installCommand: \"brew install nmap\",\n      updateCommand: \"brew upgrade nmap\",\n      versionCommand: \"nmap --version\",\n    },\n    name: \"port_scan\",\n    displayName: \"Port Scan\",\n    description: \"Port scanning using nmap\",\n    commandTemplate: \"nmap -sV -p- {{target}} -oX {{output}}\",\n  },\n  {\n    id: 3,\n    createdAt: \"2024-01-17T09:15:00Z\",\n    updatedAt: \"2024-01-17T09:15:00Z\",\n    toolId: 1,\n    tool: {\n      id: 1,\n      name: \"subfinder\",\n      type: \"opensource\",\n      createdAt: \"2024-01-01T00:00:00Z\",\n      updatedAt: \"2024-01-01T00:00:00Z\",\n      repoUrl: \"https://github.com/projectdiscovery/subfinder\",\n      version: \"v2.6.5\",\n      description: \"Fast passive subdomain enumeration tool\",\n      categoryNames: [\"subdomain\", \"recon\"],\n      directory: \"\",\n      installCommand: \"go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest\",\n      updateCommand: \"go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest\",\n      versionCommand: \"subfinder -version\",\n    },\n    name: \"fast_subdomain_scan\",\n    displayName: \"Fast Subdomain Scan\",\n    description: \"Fast scanning of common subdomains using subfinder\",\n    commandTemplate: \"subfinder -d {{domain}} -silent -o {{output}}\",\n  },\n  {\n    id: 4,\n    createdAt: \"2024-01-18T14:45:00Z\",\n    updatedAt: \"2024-01-18T14:45:00Z\",\n    toolId: 3,\n    tool: {\n      id: 3,\n      name: \"nuclei\",\n      type: \"opensource\",\n      createdAt: \"2024-01-01T00:00:00Z\",\n      updatedAt: \"2024-01-01T00:00:00Z\",\n      repoUrl: \"https://github.com/projectdiscovery/nuclei\",\n      version: \"v3.1.4\",\n      description: \"Fast and customisable vulnerability scanner\",\n      categoryNames: [\"vulnerability\", \"scanner\"],\n      directory: \"\",\n      installCommand: \"go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest\",\n      updateCommand: \"go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest\",\n      versionCommand: \"nuclei -version\",\n    },\n    name: \"vulnerability_scan\",\n    displayName: \"Vulnerability Scan\",\n    description: \"Vulnerability scanning using nuclei\",\n    commandTemplate: \"nuclei -u {{target}} -severity critical,high,medium -o {{output}}\",\n  },\n  {\n    id: 5,\n    createdAt: \"2024-01-19T16:00:00Z\",\n    updatedAt: \"2024-01-19T16:00:00Z\",\n    toolId: 4,\n    tool: {\n      id: 4,\n      name: \"katana\",\n      type: \"opensource\",\n      createdAt: \"2024-01-01T00:00:00Z\",\n      updatedAt: \"2024-01-01T00:00:00Z\",\n      repoUrl: \"https://github.com/projectdiscovery/katana\",\n      version: \"v1.0.4\",\n      description: \"Next-generation crawling and spidering framework\",\n      categoryNames: [\"crawler\", \"recon\"],\n      directory: \"\",\n      installCommand: \"go install github.com/projectdiscovery/katana/cmd/katana@latest\",\n      updateCommand: \"go install github.com/projectdiscovery/katana/cmd/katana@latest\",\n      versionCommand: \"katana -version\",\n    },\n    name: \"web_crawl\",\n    displayName: \"Web Crawling\",\n    description: \"Web link crawling using katana\",\n    commandTemplate: \"katana -u {{target}} -d 3 -o {{output}}\",\n  },\n  {\n    id: 6,\n    createdAt: \"2024-01-20T10:30:00Z\",\n    updatedAt: \"2024-01-20T10:30:00Z\",\n    toolId: 2,\n    tool: {\n      id: 2,\n      name: \"nmap\",\n      type: \"opensource\",\n      createdAt: \"2024-01-01T00:00:00Z\",\n      updatedAt: \"2024-01-01T00:00:00Z\",\n      repoUrl: \"https://github.com/nmap/nmap\",\n      version: \"7.94\",\n      description: \"Network exploration tool and security / port scanner\",\n      categoryNames: [\"port\", \"network\"],\n      directory: \"\",\n      installCommand: \"brew install nmap\",\n      updateCommand: \"brew upgrade nmap\",\n      versionCommand: \"nmap --version\",\n    },\n    name: \"service_detect\",\n    displayName: \"Service Detection\",\n    description: \"Service version detection using nmap\",\n    commandTemplate: \"nmap -sV {{target}} -oX {{output}}\",\n  },\n  {\n    id: 7,\n    createdAt: \"2024-01-21T13:20:00Z\",\n    updatedAt: \"2024-01-21T13:20:00Z\",\n    toolId: 5,\n    tool: {\n      id: 5,\n      name: \"dirsearch\",\n      type: \"opensource\",\n      createdAt: \"2024-01-01T00:00:00Z\",\n      updatedAt: \"2024-01-01T00:00:00Z\",\n      repoUrl: \"https://github.com/maurosoria/dirsearch\",\n      version: \"v0.4.3\",\n      description: \"Web path scanner\",\n      categoryNames: [\"directory\", \"recon\"],\n      directory: \"\",\n      installCommand: \"pip3 install dirsearch\",\n      updateCommand: \"pip3 install --upgrade dirsearch\",\n      versionCommand: \"dirsearch --version\",\n    },\n    name: \"dir_scan\",\n    displayName: \"Directory Scan\",\n    description: \"Directory scanning using dirsearch\",\n    commandTemplate: \"dirsearch -u {{target}} -e php,html,js -o {{output}}\",\n  },\n  {\n    id: 8,\n    createdAt: \"2024-01-22T15:10:00Z\",\n    updatedAt: \"2024-01-22T15:10:00Z\",\n    toolId: 3,\n    tool: {\n      id: 3,\n      name: \"nuclei\",\n      type: \"opensource\",\n      createdAt: \"2024-01-01T00:00:00Z\",\n      updatedAt: \"2024-01-01T00:00:00Z\",\n      repoUrl: \"https://github.com/projectdiscovery/nuclei\",\n      version: \"v3.1.4\",\n      description: \"Fast and customisable vulnerability scanner\",\n      categoryNames: [\"vulnerability\", \"scanner\"],\n      directory: \"\",\n      installCommand: \"go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest\",\n      updateCommand: \"go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest\",\n      versionCommand: \"nuclei -version\",\n    },\n    name: \"full_vulnerability_scan\",\n    displayName: \"Full Vulnerability Scan\",\n    description: \"Comprehensive vulnerability scanning using nuclei\",\n    commandTemplate: \"nuclei -u {{target}} -t nuclei-templates/ -o {{output}}\",\n  },\n]\n\n/**\n * Get command list (using mock data)\n */\nexport function useCommands(params: GetCommandsRequest = {}) {\n  return useQuery({\n    queryKey: [\"commands\", params],\n    queryFn: async (): Promise<GetCommandsResponse> => {\n      // Simulate network delay\n      await new Promise(resolve => setTimeout(resolve, 500))\n      \n      const page = params.page || 1\n      const pageSize = params.pageSize || 10\n      \n      // If there's toolId filter\n      let filteredCommands = MOCK_COMMANDS\n      if (params.toolId) {\n        filteredCommands = MOCK_COMMANDS.filter(cmd => cmd.toolId === params.toolId)\n      }\n      \n      const totalCount = filteredCommands.length\n      const totalPages = Math.ceil(totalCount / pageSize)\n      const startIndex = (page - 1) * pageSize\n      const endIndex = startIndex + pageSize\n      const commands = filteredCommands.slice(startIndex, endIndex)\n      \n      return {\n        commands,\n        page,\n        pageSize,\n        total: totalCount,\n        totalPages,\n        // Compatible fields (backward compatibility)\n        page_size: pageSize,\n        total_count: totalCount,\n        total_pages: totalPages,\n      }\n    },\n  })\n}\n\n/**\n * Get single command (using mock data)\n */\nexport function useCommand(id: number) {\n  return useQuery({\n    queryKey: [\"command\", id],\n    queryFn: async (): Promise<Command | undefined> => {\n      // Simulate network delay\n      await new Promise(resolve => setTimeout(resolve, 300))\n      return MOCK_COMMANDS.find(cmd => cmd.id === id)\n    },\n    enabled: !!id,\n  })\n}\n\n/**\n * Create command\n */\nexport function useCreateCommand() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (data: CreateCommandRequest) => CommandService.createCommand(data),\n    onSuccess: () => {\n      toastMessages.success('toast.command.create.success')\n      queryClient.invalidateQueries({ queryKey: [\"commands\"] })\n    },\n    onError: (error: any) => {\n      console.error(\"Failed to create command:\", error)\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.command.create.error')\n    },\n  })\n}\n\n/**\n * Update command\n */\nexport function useUpdateCommand() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: ({ id, data }: { id: number; data: UpdateCommandRequest }) =>\n      CommandService.updateCommand(id, data),\n    onSuccess: () => {\n      toastMessages.success('toast.command.update.success')\n      queryClient.invalidateQueries({ queryKey: [\"commands\"] })\n      queryClient.invalidateQueries({ queryKey: [\"command\"] })\n    },\n    onError: (error: any) => {\n      console.error(\"Failed to update command:\", error)\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.command.update.error')\n    },\n  })\n}\n\n/**\n * Delete command\n */\nexport function useDeleteCommand() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (id: number) => CommandService.deleteCommand(id),\n    onSuccess: () => {\n      toastMessages.success('toast.command.delete.success')\n      queryClient.invalidateQueries({ queryKey: [\"commands\"] })\n    },\n    onError: (error: any) => {\n      console.error(\"Failed to delete command:\", error)\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.command.delete.error')\n    },\n  })\n}\n\n/**\n * Batch delete commands (using mock data)\n */\nexport function useBatchDeleteCommands() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: async (ids: number[]) => {\n      // Simulate network delay\n      await new Promise(resolve => setTimeout(resolve, 800))\n      \n      // Filter out deleted commands from mock data\n      const deletedCount = ids.filter(id => \n        MOCK_COMMANDS.some(cmd => cmd.id === id)\n      ).length\n      \n      // Simulate deletion (won't actually delete mock data)\n      return {\n        deletedCount: deletedCount\n      }\n    },\n    onSuccess: (response) => {\n      toastMessages.success('toast.command.delete.bulkSuccess', { count: response.deletedCount || 0 })\n      queryClient.invalidateQueries({ queryKey: [\"commands\"] })\n    },\n    onError: (error: any) => {\n      console.error(\"Failed to batch delete commands:\", error)\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.command.delete.error')\n    },\n  })\n}\n"
  },
  {
    "path": "frontend/hooks/use-dashboard.ts",
    "content": "import { useQuery } from '@tanstack/react-query'\nimport { getDashboardStats, getAssetStatistics, getStatisticsHistory } from '@/services/dashboard.service'\n\nexport function useDashboardStats() {\n  return useQuery({\n    queryKey: ['dashboard', 'stats'],\n    queryFn: () => getDashboardStats(),\n  })\n}\n\n/**\n * Get asset statistics data (pre-aggregated)\n */\nexport function useAssetStatistics() {\n  return useQuery({\n    queryKey: ['asset', 'statistics'],\n    queryFn: getAssetStatistics,\n  })\n}\n\n/**\n * Get statistics history data (for line charts)\n */\nexport function useStatisticsHistory(days: number = 7) {\n  return useQuery({\n    queryKey: ['asset', 'statistics', 'history', days],\n    queryFn: () => getStatisticsHistory(days),\n  })\n}\n"
  },
  {
    "path": "frontend/hooks/use-directories.ts",
    "content": "import { useQuery, useMutation, useQueryClient, keepPreviousData } from '@tanstack/react-query'\nimport { useToastMessages } from '@/lib/toast-helpers'\nimport { getErrorCode } from '@/lib/response-parser'\nimport { DirectoryService } from '@/services/directory.service'\nimport type { Directory, DirectoryListResponse } from '@/types/directory.types'\n\n// API 服务函数\nconst directoryService = {\n  // 获取目标的目录列表\n  getTargetDirectories: async (\n    targetId: number,\n    params: { page: number; pageSize: number; filter?: string }\n  ): Promise<DirectoryListResponse> => {\n    const filterParam = params.filter ? `&filter=${encodeURIComponent(params.filter)}` : ''\n    const response = await fetch(\n      `/api/targets/${targetId}/directories/?page=${params.page}&pageSize=${params.pageSize}${filterParam}`\n    )\n    if (!response.ok) {\n      throw new Error('获取目录列表失败')\n    }\n    return response.json()\n  },\n\n  // 获取扫描的目录列表\n  getScanDirectories: async (\n    scanId: number,\n    params: { page: number; pageSize: number; filter?: string }\n  ): Promise<DirectoryListResponse> => {\n    const filterParam = params.filter ? `&filter=${encodeURIComponent(params.filter)}` : ''\n    const response = await fetch(\n      `/api/scans/${scanId}/directories/?page=${params.page}&pageSize=${params.pageSize}${filterParam}`\n    )\n    if (!response.ok) {\n      throw new Error('获取目录列表失败')\n    }\n    return response.json()\n  },\n\n  // 批量删除目录（支持单个或多个）\n  bulkDeleteDirectories: async (ids: number[]): Promise<{\n    message: string\n    deletedCount: number\n    requestedIds: number[]\n    cascadeDeleted: Record<string, number>\n  }> => {\n    const response = await fetch('/api/directories/bulk-delete/', {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({ ids }),\n    })\n    if (!response.ok) {\n      throw new Error('批量删除目录失败')\n    }\n    return response.json()\n  },\n\n  // 删除单个目录（使用单独的 DELETE API）\n  deleteDirectory: async (directoryId: number): Promise<{\n    message: string\n    directoryId: number\n    directoryUrl: string\n    deletedCount: number\n    deletedDirectories: string[]\n    detail: {\n      phase1: string\n      phase2: string\n    }\n  }> => {\n    const response = await fetch(`/api/directories/${directoryId}/`, {\n      method: 'DELETE',\n    })\n    if (!response.ok) {\n      throw new Error('删除目录失败')\n    }\n    return response.json()\n  },\n}\n\n// 获取目标的目录列表\nexport function useTargetDirectories(\n  targetId: number,\n  params: { page: number; pageSize: number; filter?: string },\n  options?: { enabled?: boolean }\n) {\n  return useQuery({\n    queryKey: ['target-directories', targetId, params],\n    queryFn: () => directoryService.getTargetDirectories(targetId, params),\n    enabled: options?.enabled ?? true,\n    placeholderData: keepPreviousData,\n  })\n}\n\n// 获取扫描的目录列表\nexport function useScanDirectories(\n  scanId: number,\n  params: { page: number; pageSize: number; filter?: string },\n  options?: { enabled?: boolean }\n) {\n  return useQuery({\n    queryKey: ['scan-directories', scanId, params],\n    queryFn: () => directoryService.getScanDirectories(scanId, params),\n    enabled: options?.enabled ?? true,\n    placeholderData: keepPreviousData,\n  })\n}\n\n// 删除单个目录（使用单独的 DELETE API）\nexport function useDeleteDirectory() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: directoryService.deleteDirectory,\n    onMutate: (id) => {\n      toastMessages.loading('common.status.deleting', {}, `delete-directory-${id}`)\n    },\n    onSuccess: (response, id) => {\n      toastMessages.dismiss(`delete-directory-${id}`)\n      toastMessages.success('toast.asset.directory.delete.success')\n      \n      queryClient.invalidateQueries({ queryKey: ['target-directories'] })\n      queryClient.invalidateQueries({ queryKey: ['scan-directories'] })\n      queryClient.invalidateQueries({ queryKey: ['targets'] })\n      queryClient.invalidateQueries({ queryKey: ['scans'] })\n    },\n    onError: (error: any, id) => {\n      toastMessages.dismiss(`delete-directory-${id}`)\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.asset.directory.delete.error')\n    },\n  })\n}\n\n// 批量删除目录（使用统一的批量删除接口）\nexport function useBulkDeleteDirectories() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: directoryService.bulkDeleteDirectories,\n    onMutate: () => {\n      toastMessages.loading('common.status.batchDeleting', {}, 'bulk-delete-directories')\n    },\n    onSuccess: (response) => {\n      toastMessages.dismiss('bulk-delete-directories')\n      toastMessages.success('toast.asset.directory.delete.bulkSuccess', { count: response.deletedCount })\n      \n      queryClient.invalidateQueries({ queryKey: ['target-directories'] })\n      queryClient.invalidateQueries({ queryKey: ['scan-directories'] })\n      queryClient.invalidateQueries({ queryKey: ['targets'] })\n      queryClient.invalidateQueries({ queryKey: ['scans'] })\n    },\n    onError: (error: any) => {\n      toastMessages.dismiss('bulk-delete-directories')\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.asset.directory.delete.error')\n    },\n  })\n}\n\n\n// 批量创建目录（绑定到目标）\nexport function useBulkCreateDirectories() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (data: { targetId: number; urls: string[] }) =>\n      DirectoryService.bulkCreateDirectories(data.targetId, data.urls),\n    onMutate: async () => {\n      toastMessages.loading('common.status.batchCreating', {}, 'bulk-create-directories')\n    },\n    onSuccess: (response, { targetId }) => {\n      toastMessages.dismiss('bulk-create-directories')\n      const { createdCount } = response\n      \n      if (createdCount > 0) {\n        toastMessages.success('toast.asset.directory.create.success', { count: createdCount })\n      } else {\n        toastMessages.warning('toast.asset.directory.create.partialSuccess', { success: 0, skipped: 0 })\n      }\n      \n      queryClient.invalidateQueries({ queryKey: ['target-directories', targetId] })\n      queryClient.invalidateQueries({ queryKey: ['scan-directories'] })\n    },\n    onError: (error: any) => {\n      toastMessages.dismiss('bulk-create-directories')\n      console.error('Failed to bulk create directories:', error)\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.asset.directory.create.error')\n    },\n  })\n}\n"
  },
  {
    "path": "frontend/hooks/use-disk.ts",
    "content": "import { useQuery } from '@tanstack/react-query'\nimport { getDiskStats } from '@/services/disk.service'\n\nexport function useDiskStats() {\n  return useQuery({\n    queryKey: ['system', 'disk-stats'],\n    queryFn: () => getDiskStats(),\n    refetchInterval: 5000,\n  })\n}\n"
  },
  {
    "path": "frontend/hooks/use-endpoints.ts",
    "content": "\"use client\"\n\nimport { useMutation, useQuery, useQueryClient, keepPreviousData } from \"@tanstack/react-query\"\nimport { useToastMessages } from '@/lib/toast-helpers'\nimport { getErrorCode } from '@/lib/response-parser'\nimport { EndpointService } from \"@/services/endpoint.service\"\nimport type { \n  Endpoint, \n  CreateEndpointRequest,\n  UpdateEndpointRequest,\n  GetEndpointsRequest,\n  GetEndpointsResponse,\n  BatchDeleteEndpointsRequest,\n  BatchDeleteEndpointsResponse\n} from \"@/types/endpoint.types\"\n\n// Query Keys\nexport const endpointKeys = {\n  all: ['endpoints'] as const,\n  lists: () => [...endpointKeys.all, 'list'] as const,\n  list: (params: GetEndpointsRequest) => \n    [...endpointKeys.lists(), params] as const,\n  details: () => [...endpointKeys.all, 'detail'] as const,\n  detail: (id: number) => [...endpointKeys.details(), id] as const,\n  byTarget: (targetId: number, params: GetEndpointsRequest) => \n    [...endpointKeys.all, 'target', targetId, params] as const,\n  bySubdomain: (subdomainId: number, params: GetEndpointsRequest) => \n    [...endpointKeys.all, 'subdomain', subdomainId, params] as const,\n  byScan: (scanId: number, params: GetEndpointsRequest) =>\n    [...endpointKeys.all, 'scan', scanId, params] as const,\n}\n\n// 获取单个 Endpoint 详情\nexport function useEndpoint(id: number) {\n  return useQuery({\n    queryKey: endpointKeys.detail(id),\n    queryFn: () => EndpointService.getEndpointById(id),\n    select: (response) => {\n      // RESTful 标准：直接返回数据\n      return response as Endpoint\n    },\n    enabled: !!id,\n  })\n}\n\n// 获取 Endpoint 列表\nexport function useEndpoints(params?: GetEndpointsRequest) {\n  const defaultParams: GetEndpointsRequest = {\n    page: 1,\n    pageSize: 10,\n    ...params\n  }\n  \n  return useQuery({\n    queryKey: endpointKeys.list(defaultParams),\n    queryFn: () => EndpointService.getEndpoints(defaultParams),\n    select: (response) => {\n      // RESTful 标准：直接返回数据\n      return response as GetEndpointsResponse\n    },\n  })\n}\n\n// 根据目标ID获取 Endpoint 列表（使用专用路由）\nexport function useEndpointsByTarget(targetId: number, params?: Omit<GetEndpointsRequest, 'targetId'>, filter?: string) {\n  const defaultParams: GetEndpointsRequest = {\n    page: 1,\n    pageSize: 10,\n    ...params\n  }\n  \n  return useQuery({\n    queryKey: [...endpointKeys.byTarget(targetId, defaultParams), filter],\n    queryFn: () => EndpointService.getEndpointsByTargetId(targetId, defaultParams, filter),\n    select: (response) => {\n      // RESTful 标准：直接返回数据\n      return response as GetEndpointsResponse\n    },\n    enabled: !!targetId,\n    placeholderData: keepPreviousData,\n  })\n}\n\n// 根据扫描ID获取 Endpoint 列表（历史快照）\nexport function useScanEndpoints(scanId: number, params?: Omit<GetEndpointsRequest, 'targetId'>, options?: { enabled?: boolean }, filter?: string) {\n  const defaultParams: GetEndpointsRequest = {\n    page: 1,\n    pageSize: 10,\n    ...params,\n  }\n\n  return useQuery({\n    queryKey: [...endpointKeys.byScan(scanId, defaultParams), filter],\n    queryFn: () => EndpointService.getEndpointsByScanId(scanId, defaultParams, filter),\n    enabled: options?.enabled !== undefined ? options.enabled : !!scanId,\n    select: (response: any) => {\n      // 后端使用通用分页格式：results/total/page/pageSize/totalPages\n      return {\n        endpoints: response.results || [],\n        pagination: {\n          total: response.total || 0,\n          page: response.page || 1,\n          pageSize: response.pageSize || response.page_size || defaultParams.pageSize || 10,\n          totalPages: response.totalPages || response.total_pages || 0,\n        },\n      }\n    },\n    placeholderData: keepPreviousData,\n  })\n}\n\n// 创建 Endpoint（完全自动化）\nexport function useCreateEndpoint() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (data: {\n      endpoints: Array<CreateEndpointRequest>\n    }) => EndpointService.createEndpoints(data),\n    onMutate: async () => {\n      toastMessages.loading('common.status.creating', {}, 'create-endpoint')\n    },\n    onSuccess: (response) => {\n      toastMessages.dismiss('create-endpoint')\n      \n      const { createdCount, existedCount } = response\n      \n      if (existedCount > 0) {\n        toastMessages.warning('toast.asset.endpoint.create.partialSuccess', { \n          success: createdCount, \n          skipped: existedCount \n        })\n      } else {\n        toastMessages.success('toast.asset.endpoint.create.success', { count: createdCount })\n      }\n      \n      queryClient.invalidateQueries({ queryKey: ['endpoints'] })\n    },\n    onError: (error: any) => {\n      toastMessages.dismiss('create-endpoint')\n      console.error('Failed to create endpoint:', error)\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.asset.endpoint.create.error')\n    },\n  })\n}\n\n// 删除单个 Endpoint\nexport function useDeleteEndpoint() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (id: number) => EndpointService.deleteEndpoint(id),\n    onMutate: (id) => {\n      toastMessages.loading('common.status.deleting', {}, `delete-endpoint-${id}`)\n    },\n    onSuccess: (response, id) => {\n      toastMessages.dismiss(`delete-endpoint-${id}`)\n      toastMessages.success('toast.asset.endpoint.delete.success')\n      queryClient.invalidateQueries({ queryKey: ['endpoints'] })\n    },\n    onError: (error: any, id) => {\n      toastMessages.dismiss(`delete-endpoint-${id}`)\n      console.error('Failed to delete endpoint:', error)\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.asset.endpoint.delete.error')\n    },\n  })\n}\n\n// 批量删除 Endpoint\nexport function useBatchDeleteEndpoints() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (data: BatchDeleteEndpointsRequest) => EndpointService.batchDeleteEndpoints(data),\n    onMutate: () => {\n      toastMessages.loading('common.status.batchDeleting', {}, 'batch-delete-endpoints')\n    },\n    onSuccess: (response) => {\n      toastMessages.dismiss('batch-delete-endpoints')\n      const { deletedCount } = response\n      toastMessages.success('toast.asset.endpoint.delete.bulkSuccess', { count: deletedCount })\n      queryClient.invalidateQueries({ queryKey: ['endpoints'] })\n    },\n    onError: (error: any) => {\n      toastMessages.dismiss('batch-delete-endpoints')\n      console.error('Failed to batch delete endpoints:', error)\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.asset.endpoint.delete.error')\n    },\n  })\n}\n\n// 批量创建端点（绑定到目标）\nexport function useBulkCreateEndpoints() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (data: { targetId: number; urls: string[] }) =>\n      EndpointService.bulkCreateEndpoints(data.targetId, data.urls),\n    onMutate: async () => {\n      toastMessages.loading('common.status.batchCreating', {}, 'bulk-create-endpoints')\n    },\n    onSuccess: (response, { targetId }) => {\n      toastMessages.dismiss('bulk-create-endpoints')\n      const { createdCount } = response\n      \n      if (createdCount > 0) {\n        toastMessages.success('toast.asset.endpoint.create.success', { count: createdCount })\n      } else {\n        toastMessages.warning('toast.asset.endpoint.create.partialSuccess', { success: 0, skipped: 0 })\n      }\n      \n      queryClient.invalidateQueries({ queryKey: endpointKeys.byTarget(targetId, {}) })\n      queryClient.invalidateQueries({ queryKey: ['endpoints'] })\n    },\n    onError: (error: any) => {\n      toastMessages.dismiss('bulk-create-endpoints')\n      console.error('Failed to bulk create endpoints:', error)\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.asset.endpoint.create.error')\n    },\n  })\n}\n"
  },
  {
    "path": "frontend/hooks/use-engines.ts",
    "content": "import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'\nimport { useToastMessages } from '@/lib/toast-helpers'\nimport { getErrorCode } from '@/lib/response-parser'\nimport {\n  getEngines,\n  getEngine,\n  createEngine,\n  updateEngine,\n  deleteEngine,\n} from '@/services/engine.service'\nimport type { ScanEngine } from '@/types/engine.types'\n\n/**\n * Get engine list\n */\nexport function useEngines() {\n  return useQuery({\n    queryKey: ['engines'],\n    queryFn: getEngines,\n  })\n}\n\n/**\n * Get engine details\n */\nexport function useEngine(id: number) {\n  return useQuery({\n    queryKey: ['engines', id],\n    queryFn: () => getEngine(id),\n    enabled: !!id,\n  })\n}\n\n/**\n * Create engine\n */\nexport function useCreateEngine() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: createEngine,\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: ['engines'] })\n      toastMessages.success('toast.engine.create.success')\n    },\n    onError: (error: any) => {\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.engine.create.error')\n    },\n  })\n}\n\n/**\n * Update engine\n */\nexport function useUpdateEngine() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: ({ id, data }: { id: number; data: Parameters<typeof updateEngine>[1] }) =>\n      updateEngine(id, data),\n    onSuccess: (_, variables) => {\n      queryClient.invalidateQueries({ queryKey: ['engines'] })\n      queryClient.invalidateQueries({ queryKey: ['engines', variables.id] })\n      toastMessages.success('toast.engine.update.success')\n    },\n    onError: (error: any) => {\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.engine.update.error')\n    },\n  })\n}\n\n/**\n * Delete engine\n */\nexport function useDeleteEngine() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: deleteEngine,\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: ['engines'] })\n      toastMessages.success('toast.engine.delete.success')\n    },\n    onError: (error: any) => {\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.engine.delete.error')\n    },\n  })\n}\n\n"
  },
  {
    "path": "frontend/hooks/use-fingerprints.ts",
    "content": "/**\n * 指纹管理 React Query Hooks\n */\n\nimport { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\"\nimport { FingerprintService } from \"@/services/fingerprint.service\"\nimport type { EholeFingerprint, GobyFingerprint, WappalyzerFingerprint, FingersFingerprint, FingerPrintHubFingerprint, ARLFingerprint, FingerprintStats } from \"@/types/fingerprint.types\"\n\n// Query Keys\nexport const fingerprintKeys = {\n  all: [\"fingerprints\"] as const,\n  stats: () => [...fingerprintKeys.all, \"stats\"] as const,\n  ehole: {\n    all: () => [...fingerprintKeys.all, \"ehole\"] as const,\n    list: (params: any) => [...fingerprintKeys.ehole.all(), \"list\", params] as const,\n    detail: (id: number) => [...fingerprintKeys.ehole.all(), \"detail\", id] as const,\n  },\n  goby: {\n    all: () => [...fingerprintKeys.all, \"goby\"] as const,\n    list: (params: any) => [...fingerprintKeys.goby.all(), \"list\", params] as const,\n    detail: (id: number) => [...fingerprintKeys.goby.all(), \"detail\", id] as const,\n  },\n  wappalyzer: {\n    all: () => [...fingerprintKeys.all, \"wappalyzer\"] as const,\n    list: (params: any) => [...fingerprintKeys.wappalyzer.all(), \"list\", params] as const,\n    detail: (id: number) => [...fingerprintKeys.wappalyzer.all(), \"detail\", id] as const,\n  },\n  fingers: {\n    all: () => [...fingerprintKeys.all, \"fingers\"] as const,\n    list: (params: any) => [...fingerprintKeys.fingers.all(), \"list\", params] as const,\n    detail: (id: number) => [...fingerprintKeys.fingers.all(), \"detail\", id] as const,\n  },\n  fingerprinthub: {\n    all: () => [...fingerprintKeys.all, \"fingerprinthub\"] as const,\n    list: (params: any) => [...fingerprintKeys.fingerprinthub.all(), \"list\", params] as const,\n    detail: (id: number) => [...fingerprintKeys.fingerprinthub.all(), \"detail\", id] as const,\n  },\n  arl: {\n    all: () => [...fingerprintKeys.all, \"arl\"] as const,\n    list: (params: any) => [...fingerprintKeys.arl.all(), \"list\", params] as const,\n    detail: (id: number) => [...fingerprintKeys.arl.all(), \"detail\", id] as const,\n  },\n}\n\n// ==================== EHole Hooks ====================\n\n/**\n * 获取 EHole 指纹列表\n */\nexport function useEholeFingerprints(\n  params: { page?: number; pageSize?: number; filter?: string } = {},\n  options?: { enabled?: boolean }\n) {\n  return useQuery({\n    queryKey: fingerprintKeys.ehole.list(params),\n    queryFn: () => FingerprintService.getEholeFingerprints(params),\n    ...options,\n  })\n}\n\n/**\n * 获取 EHole 指纹详情\n */\nexport function useEholeFingerprint(id: number, options?: { enabled?: boolean }) {\n  return useQuery({\n    queryKey: fingerprintKeys.ehole.detail(id),\n    queryFn: () => FingerprintService.getEholeFingerprint(id),\n    enabled: id > 0 && options?.enabled !== false,\n  })\n}\n\n/**\n * 创建 EHole 指纹\n */\nexport function useCreateEholeFingerprint() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: (data: Omit<EholeFingerprint, 'id' | 'createdAt'>) => \n      FingerprintService.createEholeFingerprint(data),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.ehole.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n/**\n * 更新 EHole 指纹\n */\nexport function useUpdateEholeFingerprint() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: ({ id, data }: { id: number; data: Partial<EholeFingerprint> }) =>\n      FingerprintService.updateEholeFingerprint(id, data),\n    onSuccess: (_, { id }) => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.ehole.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.ehole.detail(id) })\n    },\n  })\n}\n\n/**\n * 删除 EHole 指纹\n */\nexport function useDeleteEholeFingerprint() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: (id: number) => FingerprintService.deleteEholeFingerprint(id),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.ehole.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n/**\n * 批量创建 EHole 指纹\n */\nexport function useBatchCreateEholeFingerprints() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: (fingerprints: Omit<EholeFingerprint, 'id' | 'createdAt'>[]) =>\n      FingerprintService.batchCreateEholeFingerprints(fingerprints),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.ehole.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n/**\n * 文件导入 EHole 指纹\n */\nexport function useImportEholeFingerprints() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: (file: File) => FingerprintService.importEholeFingerprints(file),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.ehole.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n/**\n * 批量删除 EHole 指纹\n */\nexport function useBulkDeleteEholeFingerprints() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: (ids: number[]) => FingerprintService.bulkDeleteEholeFingerprints(ids),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.ehole.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n/**\n * 删除所有 EHole 指纹\n */\nexport function useDeleteAllEholeFingerprints() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: () => FingerprintService.deleteAllEholeFingerprints(),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.ehole.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n// ==================== Goby Hooks ====================\n\n/**\n * 获取 Goby 指纹列表\n */\nexport function useGobyFingerprints(\n  params: { page?: number; pageSize?: number; filter?: string } = {},\n  options?: { enabled?: boolean }\n) {\n  return useQuery({\n    queryKey: fingerprintKeys.goby.list(params),\n    queryFn: () => FingerprintService.getGobyFingerprints(params),\n    ...options,\n  })\n}\n\n/**\n * 获取 Goby 指纹详情\n */\nexport function useGobyFingerprint(id: number, options?: { enabled?: boolean }) {\n  return useQuery({\n    queryKey: fingerprintKeys.goby.detail(id),\n    queryFn: () => FingerprintService.getGobyFingerprint(id),\n    enabled: id > 0 && options?.enabled !== false,\n  })\n}\n\n/**\n * 创建 Goby 指纹\n */\nexport function useCreateGobyFingerprint() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: (data: Omit<GobyFingerprint, 'id' | 'createdAt'>) => \n      FingerprintService.createGobyFingerprint(data),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.goby.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n/**\n * 更新 Goby 指纹\n */\nexport function useUpdateGobyFingerprint() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: ({ id, data }: { id: number; data: Partial<GobyFingerprint> }) =>\n      FingerprintService.updateGobyFingerprint(id, data),\n    onSuccess: (_, { id }) => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.goby.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.goby.detail(id) })\n    },\n  })\n}\n\n/**\n * 删除 Goby 指纹\n */\nexport function useDeleteGobyFingerprint() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: (id: number) => FingerprintService.deleteGobyFingerprint(id),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.goby.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n/**\n * 文件导入 Goby 指纹\n */\nexport function useImportGobyFingerprints() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: (file: File) => FingerprintService.importGobyFingerprints(file),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.goby.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n/**\n * 批量删除 Goby 指纹\n */\nexport function useBulkDeleteGobyFingerprints() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: (ids: number[]) => FingerprintService.bulkDeleteGobyFingerprints(ids),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.goby.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n/**\n * 删除所有 Goby 指纹\n */\nexport function useDeleteAllGobyFingerprints() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: () => FingerprintService.deleteAllGobyFingerprints(),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.goby.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n// ==================== Wappalyzer Hooks ====================\n\n/**\n * 获取 Wappalyzer 指纹列表\n */\nexport function useWappalyzerFingerprints(\n  params: { page?: number; pageSize?: number; filter?: string } = {},\n  options?: { enabled?: boolean }\n) {\n  return useQuery({\n    queryKey: fingerprintKeys.wappalyzer.list(params),\n    queryFn: () => FingerprintService.getWappalyzerFingerprints(params),\n    ...options,\n  })\n}\n\n/**\n * 获取 Wappalyzer 指纹详情\n */\nexport function useWappalyzerFingerprint(id: number, options?: { enabled?: boolean }) {\n  return useQuery({\n    queryKey: fingerprintKeys.wappalyzer.detail(id),\n    queryFn: () => FingerprintService.getWappalyzerFingerprint(id),\n    enabled: id > 0 && options?.enabled !== false,\n  })\n}\n\n/**\n * 创建 Wappalyzer 指纹\n */\nexport function useCreateWappalyzerFingerprint() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: (data: Omit<WappalyzerFingerprint, 'id' | 'createdAt'>) => \n      FingerprintService.createWappalyzerFingerprint(data),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.wappalyzer.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n/**\n * 更新 Wappalyzer 指纹\n */\nexport function useUpdateWappalyzerFingerprint() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: ({ id, data }: { id: number; data: Partial<WappalyzerFingerprint> }) =>\n      FingerprintService.updateWappalyzerFingerprint(id, data),\n    onSuccess: (_, { id }) => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.wappalyzer.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.wappalyzer.detail(id) })\n    },\n  })\n}\n\n/**\n * 删除 Wappalyzer 指纹\n */\nexport function useDeleteWappalyzerFingerprint() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: (id: number) => FingerprintService.deleteWappalyzerFingerprint(id),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.wappalyzer.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n/**\n * 文件导入 Wappalyzer 指纹\n */\nexport function useImportWappalyzerFingerprints() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: (file: File) => FingerprintService.importWappalyzerFingerprints(file),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.wappalyzer.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n/**\n * 批量删除 Wappalyzer 指纹\n */\nexport function useBulkDeleteWappalyzerFingerprints() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: (ids: number[]) => FingerprintService.bulkDeleteWappalyzerFingerprints(ids),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.wappalyzer.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n/**\n * 删除所有 Wappalyzer 指纹\n */\nexport function useDeleteAllWappalyzerFingerprints() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: () => FingerprintService.deleteAllWappalyzerFingerprints(),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.wappalyzer.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n// ==================== Fingers Hooks ====================\n\n/**\n * 获取 Fingers 指纹列表\n */\nexport function useFingersFingerprints(\n  params: { page?: number; pageSize?: number; filter?: string } = {},\n  options?: { enabled?: boolean }\n) {\n  return useQuery({\n    queryKey: fingerprintKeys.fingers.list(params),\n    queryFn: () => FingerprintService.getFingersFingerprints(params),\n    ...options,\n  })\n}\n\n/**\n * 获取 Fingers 指纹详情\n */\nexport function useFingersFingerprint(id: number, options?: { enabled?: boolean }) {\n  return useQuery({\n    queryKey: fingerprintKeys.fingers.detail(id),\n    queryFn: () => FingerprintService.getFingersFingerprint(id),\n    enabled: id > 0 && options?.enabled !== false,\n  })\n}\n\n/**\n * 创建 Fingers 指纹\n */\nexport function useCreateFingersFingerprint() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: (data: Omit<FingersFingerprint, 'id' | 'createdAt'>) => \n      FingerprintService.createFingersFingerprint(data),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.fingers.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n/**\n * 更新 Fingers 指纹\n */\nexport function useUpdateFingersFingerprint() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: ({ id, data }: { id: number; data: Partial<FingersFingerprint> }) =>\n      FingerprintService.updateFingersFingerprint(id, data),\n    onSuccess: (_, { id }) => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.fingers.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.fingers.detail(id) })\n    },\n  })\n}\n\n/**\n * 删除 Fingers 指纹\n */\nexport function useDeleteFingersFingerprint() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: (id: number) => FingerprintService.deleteFingersFingerprint(id),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.fingers.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n/**\n * 文件导入 Fingers 指纹\n */\nexport function useImportFingersFingerprints() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: (file: File) => FingerprintService.importFingersFingerprints(file),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.fingers.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n/**\n * 批量删除 Fingers 指纹\n */\nexport function useBulkDeleteFingersFingerprints() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: (ids: number[]) => FingerprintService.bulkDeleteFingersFingerprints(ids),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.fingers.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n/**\n * 删除所有 Fingers 指纹\n */\nexport function useDeleteAllFingersFingerprints() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: () => FingerprintService.deleteAllFingersFingerprints(),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.fingers.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n// ==================== FingerPrintHub Hooks ====================\n\n/**\n * 获取 FingerPrintHub 指纹列表\n */\nexport function useFingerPrintHubFingerprints(\n  params: { page?: number; pageSize?: number; filter?: string } = {},\n  options?: { enabled?: boolean }\n) {\n  return useQuery({\n    queryKey: fingerprintKeys.fingerprinthub.list(params),\n    queryFn: () => FingerprintService.getFingerPrintHubFingerprints(params),\n    ...options,\n  })\n}\n\n/**\n * 获取 FingerPrintHub 指纹详情\n */\nexport function useFingerPrintHubFingerprint(id: number, options?: { enabled?: boolean }) {\n  return useQuery({\n    queryKey: fingerprintKeys.fingerprinthub.detail(id),\n    queryFn: () => FingerprintService.getFingerPrintHubFingerprint(id),\n    enabled: id > 0 && options?.enabled !== false,\n  })\n}\n\n/**\n * 创建 FingerPrintHub 指纹\n */\nexport function useCreateFingerPrintHubFingerprint() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: (data: Omit<FingerPrintHubFingerprint, 'id' | 'createdAt'>) => \n      FingerprintService.createFingerPrintHubFingerprint(data),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.fingerprinthub.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n/**\n * 更新 FingerPrintHub 指纹\n */\nexport function useUpdateFingerPrintHubFingerprint() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: ({ id, data }: { id: number; data: Partial<FingerPrintHubFingerprint> }) =>\n      FingerprintService.updateFingerPrintHubFingerprint(id, data),\n    onSuccess: (_, { id }) => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.fingerprinthub.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.fingerprinthub.detail(id) })\n    },\n  })\n}\n\n/**\n * 删除 FingerPrintHub 指纹\n */\nexport function useDeleteFingerPrintHubFingerprint() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: (id: number) => FingerprintService.deleteFingerPrintHubFingerprint(id),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.fingerprinthub.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n/**\n * 文件导入 FingerPrintHub 指纹\n */\nexport function useImportFingerPrintHubFingerprints() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: (file: File) => FingerprintService.importFingerPrintHubFingerprints(file),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.fingerprinthub.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n/**\n * 批量删除 FingerPrintHub 指纹\n */\nexport function useBulkDeleteFingerPrintHubFingerprints() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: (ids: number[]) => FingerprintService.bulkDeleteFingerPrintHubFingerprints(ids),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.fingerprinthub.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n/**\n * 删除所有 FingerPrintHub 指纹\n */\nexport function useDeleteAllFingerPrintHubFingerprints() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: () => FingerprintService.deleteAllFingerPrintHubFingerprints(),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.fingerprinthub.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n// ==================== ARL Hooks ====================\n\n/**\n * 获取 ARL 指纹列表\n */\nexport function useARLFingerprints(\n  params: { page?: number; pageSize?: number; filter?: string } = {},\n  options?: { enabled?: boolean }\n) {\n  return useQuery({\n    queryKey: fingerprintKeys.arl.list(params),\n    queryFn: () => FingerprintService.getARLFingerprints(params),\n    ...options,\n  })\n}\n\n/**\n * 获取 ARL 指纹详情\n */\nexport function useARLFingerprint(id: number, options?: { enabled?: boolean }) {\n  return useQuery({\n    queryKey: fingerprintKeys.arl.detail(id),\n    queryFn: () => FingerprintService.getARLFingerprint(id),\n    enabled: id > 0 && options?.enabled !== false,\n  })\n}\n\n/**\n * 创建 ARL 指纹\n */\nexport function useCreateARLFingerprint() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: (data: Omit<ARLFingerprint, 'id' | 'createdAt'>) => \n      FingerprintService.createARLFingerprint(data),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.arl.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n/**\n * 更新 ARL 指纹\n */\nexport function useUpdateARLFingerprint() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: ({ id, data }: { id: number; data: Partial<ARLFingerprint> }) =>\n      FingerprintService.updateARLFingerprint(id, data),\n    onSuccess: (_, { id }) => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.arl.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.arl.detail(id) })\n    },\n  })\n}\n\n/**\n * 删除 ARL 指纹\n */\nexport function useDeleteARLFingerprint() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: (id: number) => FingerprintService.deleteARLFingerprint(id),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.arl.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n/**\n * 文件导入 ARL 指纹\n */\nexport function useImportARLFingerprints() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: (file: File) => FingerprintService.importARLFingerprints(file),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.arl.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n/**\n * 批量删除 ARL 指纹\n */\nexport function useBulkDeleteARLFingerprints() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: (ids: number[]) => FingerprintService.bulkDeleteARLFingerprints(ids),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.arl.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n/**\n * 删除所有 ARL 指纹\n */\nexport function useDeleteAllARLFingerprints() {\n  const queryClient = useQueryClient()\n  return useMutation({\n    mutationFn: () => FingerprintService.deleteAllARLFingerprints(),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.arl.all() })\n      queryClient.invalidateQueries({ queryKey: fingerprintKeys.stats() })\n    },\n  })\n}\n\n// ==================== 统计 Hooks ====================\n\n/**\n * 获取指纹库统计\n */\nexport function useFingerprintStats() {\n  return useQuery({\n    queryKey: fingerprintKeys.stats(),\n    queryFn: () => FingerprintService.getStats(),\n  })\n}\n"
  },
  {
    "path": "frontend/hooks/use-global-blacklist.ts",
    "content": "import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'\nimport { toast } from 'sonner'\nimport { useTranslations } from 'next-intl'\nimport {\n  getGlobalBlacklist,\n  updateGlobalBlacklist,\n  type GlobalBlacklistResponse,\n  type UpdateGlobalBlacklistRequest,\n} from '@/services/global-blacklist.service'\n\nconst QUERY_KEY = ['global-blacklist']\n\n/**\n * Hook to fetch global blacklist\n */\nexport function useGlobalBlacklist() {\n  return useQuery<GlobalBlacklistResponse>({\n    queryKey: QUERY_KEY,\n    queryFn: getGlobalBlacklist,\n  })\n}\n\n/**\n * Hook to update global blacklist\n */\nexport function useUpdateGlobalBlacklist() {\n  const queryClient = useQueryClient()\n  const t = useTranslations('pages.settings.blacklist')\n\n  return useMutation({\n    mutationFn: (data: UpdateGlobalBlacklistRequest) => updateGlobalBlacklist(data),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: QUERY_KEY })\n      toast.success(t('toast.saveSuccess'))\n    },\n    onError: () => {\n      toast.error(t('toast.saveError'))\n    },\n  })\n}\n"
  },
  {
    "path": "frontend/hooks/use-ip-addresses.ts",
    "content": "\"use client\"\n\nimport { useQuery, keepPreviousData } from \"@tanstack/react-query\"\nimport { IPAddressService } from \"@/services/ip-address.service\"\nimport type { GetIPAddressesParams, GetIPAddressesResponse } from \"@/types/ip-address.types\"\n\nconst ipAddressKeys = {\n  all: [\"ip-addresses\"] as const,\n  target: (targetId: number, params: GetIPAddressesParams) =>\n    [...ipAddressKeys.all, \"target\", targetId, params] as const,\n  scan: (scanId: number, params: GetIPAddressesParams) =>\n    [...ipAddressKeys.all, \"scan\", scanId, params] as const,\n}\n\nfunction normalizeParams(params?: GetIPAddressesParams): Required<GetIPAddressesParams> {\n  return {\n    page: params?.page ?? 1,\n    pageSize: params?.pageSize ?? 10,\n    filter: params?.filter ?? \"\",\n  }\n}\n\nexport function useTargetIPAddresses(\n  targetId: number,\n  params?: GetIPAddressesParams,\n  options?: { enabled?: boolean }\n) {\n  const normalizedParams = normalizeParams(params)\n\n  return useQuery({\n    queryKey: ipAddressKeys.target(targetId, normalizedParams),\n    queryFn: () => IPAddressService.getTargetIPAddresses(targetId, normalizedParams),\n    enabled: options?.enabled ?? !!targetId,\n    select: (response: GetIPAddressesResponse) => response,\n    placeholderData: keepPreviousData,\n  })\n}\n\nexport function useScanIPAddresses(\n  scanId: number,\n  params?: GetIPAddressesParams,\n  options?: { enabled?: boolean }\n) {\n  const normalizedParams = normalizeParams(params)\n\n  return useQuery({\n    queryKey: ipAddressKeys.scan(scanId, normalizedParams),\n    queryFn: () => IPAddressService.getScanIPAddresses(scanId, normalizedParams),\n    enabled: options?.enabled ?? !!scanId,\n    select: (response: GetIPAddressesResponse) => response,\n    placeholderData: keepPreviousData,\n  })\n}\n"
  },
  {
    "path": "frontend/hooks/use-mobile.ts",
    "content": "import * as React from \"react\"\n\nconst MOBILE_BREAKPOINT = 768\n\nexport function useIsMobile() {\n  // 初始值设为 false，确保 SSR 和客户端初始渲染一致\n  const [isMobile, setIsMobile] = React.useState<boolean>(false)\n\n  React.useEffect(() => {\n    const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`)\n    const onChange = () => {\n      setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n    }\n    mql.addEventListener(\"change\", onChange)\n    setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n    return () => mql.removeEventListener(\"change\", onChange)\n  }, [])\n\n  return isMobile\n}\n"
  },
  {
    "path": "frontend/hooks/use-notification-settings.ts",
    "content": "import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\nimport { NotificationSettingsService } from '@/services/notification-settings.service'\nimport type { UpdateNotificationSettingsRequest } from '@/types/notification-settings.types'\nimport { useToastMessages } from '@/lib/toast-helpers'\nimport { getErrorCode } from '@/lib/response-parser'\n\nexport function useNotificationSettings() {\n  return useQuery({\n    queryKey: ['notification-settings'],\n    queryFn: () => NotificationSettingsService.getSettings(),\n  })\n}\n\nexport function useUpdateNotificationSettings() {\n  const qc = useQueryClient()\n  const toastMessages = useToastMessages()\n  \n  return useMutation({\n    mutationFn: (data: UpdateNotificationSettingsRequest) =>\n      NotificationSettingsService.updateSettings(data),\n    onSuccess: () => {\n      qc.invalidateQueries({ queryKey: ['notification-settings'] })\n      toastMessages.success('toast.notification.settings.success')\n    },\n    onError: (error: any) => {\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.notification.settings.error')\n    },\n  })\n}\n"
  },
  {
    "path": "frontend/hooks/use-notification-sse.ts",
    "content": "/**\n * WebSocket 实时通知 Hook\n */\n\nimport { useCallback, useEffect, useState, useRef } from 'react'\nimport { useQueryClient } from '@tanstack/react-query'\nimport type { BackendNotification, Notification, BackendNotificationLevel, NotificationSeverity } from '@/types/notification.types'\nimport { getBackendBaseUrl } from '@/lib/env'\nimport { useToastMessages } from '@/lib/toast-helpers'\n\nconst severityMap: Record<BackendNotificationLevel, NotificationSeverity> = {\n  critical: 'critical',\n  high: 'high',\n  medium: 'medium',\n  low: 'low',\n}\n\nconst inferNotificationType = (message: string, category?: string) => {\n  // 优先使用后端返回的 category\n  if (category === 'scan' || category === 'vulnerability' || category === 'asset' || category === 'system') {\n    return category\n  }\n  // 后备：通过消息内容推断\n  if (message?.includes('扫描') || message?.includes('任务')) {\n    return 'scan' as const\n  }\n  if (message?.includes('漏洞')) {\n    return 'vulnerability' as const\n  }\n  return 'system' as const\n}\n\nconst formatTimeAgo = (date: Date): string => {\n  const now = new Date()\n  const diffMs = now.getTime() - date.getTime()\n  const diffMins = Math.floor(diffMs / (1000 * 60))\n  const diffHours = Math.floor(diffMs / (1000 * 60 * 60))\n\n  if (diffMins < 1) return '刚刚'\n  if (diffMins < 60) return `${diffMins} 分钟前`\n  if (diffHours < 24) return `${diffHours} 小时前`\n  return date.toLocaleDateString()\n}\n\nexport const transformBackendNotification = (backendNotification: BackendNotification): Notification => {\n  const createdAtRaw = backendNotification.createdAt ?? backendNotification.created_at\n  const createdDate = createdAtRaw ? new Date(createdAtRaw) : new Date()\n  const isRead = backendNotification.isRead ?? backendNotification.is_read\n  const notification: Notification = {\n    id: backendNotification.id,\n    type: inferNotificationType(backendNotification.message, backendNotification.category),\n    title: backendNotification.title,\n    description: backendNotification.message,\n    time: formatTimeAgo(createdDate),\n    unread: isRead === true ? false : true,\n    severity: severityMap[backendNotification.level] ?? undefined,\n    createdAt: createdDate.toISOString(),\n  }\n  return notification\n}\n\nexport function useNotificationSSE() {\n  const [isConnected, setIsConnected] = useState(false)\n  const [notifications, setNotifications] = useState<Notification[]>([])\n  const wsRef = useRef<WebSocket | null>(null)\n  const queryClient = useQueryClient()\n  const reconnectTimerRef = useRef<NodeJS.Timeout | null>(null)\n  const heartbeatTimerRef = useRef<NodeJS.Timeout | null>(null)\n  const isConnectingRef = useRef(false)\n  const reconnectAttempts = useRef(0)\n  const maxReconnectAttempts = 10\n  const baseReconnectDelay = 1000 // 1秒\n  const toastMessages = useToastMessages()\n\n  const markNotificationsAsRead = useCallback((ids?: number[]) => {\n    setNotifications(prev => prev.map(notification => {\n      if (!ids || ids.includes(notification.id)) {\n        return { ...notification, unread: false }\n      }\n      return notification\n    }))\n  }, [])\n\n  // 启动心跳\n  const startHeartbeat = useCallback(() => {\n    // 清除旧的心跳定时器\n    if (heartbeatTimerRef.current) {\n      clearInterval(heartbeatTimerRef.current)\n    }\n\n    // 每 30 秒发送一次心跳\n    heartbeatTimerRef.current = setInterval(() => {\n      if (wsRef.current?.readyState === WebSocket.OPEN) {\n        console.log('[HEARTBEAT] 发送心跳 ping')\n        wsRef.current.send(JSON.stringify({ type: 'ping' }))\n      }\n    }, 30000) // 30秒\n  }, [])\n\n  // 停止心跳\n  const stopHeartbeat = useCallback(() => {\n    if (heartbeatTimerRef.current) {\n      clearInterval(heartbeatTimerRef.current)\n      heartbeatTimerRef.current = null\n    }\n  }, [])\n\n  // 计算重连延迟（指数退避）\n  const getReconnectDelay = useCallback(() => {\n    const delay = Math.min(baseReconnectDelay * Math.pow(2, reconnectAttempts.current), 30000)\n    return delay\n  }, [])\n\n  // 连接 WebSocket\n  const connect = useCallback(() => {\n    // 防止重复连接\n    if (isConnectingRef.current) {\n      console.log('[SKIP] 已在连接中，跳过')\n      return\n    }\n\n    // 如果已经连接，跳过\n    if (wsRef.current?.readyState === WebSocket.OPEN) {\n      console.log('[SKIP] 已连接，跳过')\n      return\n    }\n\n    isConnectingRef.current = true\n\n    // 关闭旧连接\n    if (wsRef.current && wsRef.current.readyState !== WebSocket.CLOSED) {\n      wsRef.current.close()\n    }\n\n    // 清除重连定时器\n    if (reconnectTimerRef.current) {\n      clearTimeout(reconnectTimerRef.current)\n      reconnectTimerRef.current = null\n    }\n\n    try {\n      // 构造 WebSocket URL\n      const backendUrl = getBackendBaseUrl()\n      const wsProtocol = backendUrl.startsWith('https') ? 'wss' : 'ws'\n      const wsHost = backendUrl.replace(/^https?:\\/\\//, '')\n      const wsUrl = `${wsProtocol}://${wsHost}/ws/notifications/`\n\n      console.log('[CONNECTING] 正在连接 WebSocket:', wsUrl, `(尝试 ${reconnectAttempts.current + 1})`)\n\n      const ws = new WebSocket(wsUrl)\n      wsRef.current = ws\n\n      ws.onopen = () => {\n        console.log('[SUCCESS] WebSocket 连接已建立')\n        setIsConnected(true)\n        isConnectingRef.current = false\n        reconnectAttempts.current = 0 // 重置重连计数\n        // 启动心跳\n        startHeartbeat()\n      }\n\n      ws.onmessage = (event) => {\n        try {\n          const data = JSON.parse(event.data)\n          console.log('[MESSAGE] WebSocket 消息接收:', data)\n\n          if (data.type === 'connected') {\n            console.log('[SUCCESS] WebSocket 连接成功')\n            return\n          }\n\n          if (data.type === 'pong') {\n            // 心跳响应\n            console.log('[HEARTBEAT] 心跳响应')\n            return\n          }\n\n          if (data.type === 'error') {\n            console.error('[ERROR] WebSocket 错误:', data.message)\n            toastMessages.error('toast.notification.connection.error', { message: data.message })\n            return\n          }\n\n          // 处理通知消息\n          if (data.type === 'notification') {\n            console.log('[NOTIFICATION] 处理通知消息 (type=notification)')\n            // 移除 type 字段，获取实际的通知数据\n            const { type, ...payload } = data as any\n\n            if (payload.id && payload.title && payload.message) {\n              console.log('[TRANSFORM] 转换通知:', payload)\n              const notification = transformBackendNotification(payload as BackendNotification)\n              console.log('[UPDATE] 更新通知列表，新通知:', notification)\n              setNotifications(prev => {\n                const updated = [notification, ...prev.slice(0, 49)]\n                console.log('[STATS] 通知列表已更新，总数:', updated.length)\n                return updated\n              })\n\n              queryClient.invalidateQueries({ queryKey: ['notifications'] })\n            } else {\n              console.warn('[WARN] 通知数据不完整:', payload)\n            }\n            return\n          }\n\n          // 备用处理：直接检查通知字段\n          if (data.id && data.title && data.message) {\n            console.log('[NOTIFICATION] 处理通知消息 (直接字段)')\n            const notification = transformBackendNotification(data as BackendNotification)\n\n            // 添加到通知列表\n            console.log('[UPDATE] 更新通知列表，新通知:', notification)\n            setNotifications(prev => {\n              const updated = [notification, ...prev.slice(0, 49)]\n              console.log('[STATS] 通知列表已更新，总数:', updated.length)\n              return updated\n            })\n\n            // 刷新通知查询\n            queryClient.invalidateQueries({ queryKey: ['notifications'] })\n          }\n        } catch (error) {\n          console.error('[ERROR] 解析 WebSocket 消息失败:', error, '原始数据:', event.data)\n        }\n      }\n\n      ws.onerror = () => {\n        // WebSocket onerror 接收的是 Event 对象，不是 Error\n        // 实际的错误信息通常不可用，只能记录连接状态\n        console.warn('[WARN] WebSocket 连接错误，将自动重连')\n        setIsConnected(false)\n        isConnectingRef.current = false\n      }\n\n      ws.onclose = (event) => {\n        console.log('[CLOSED] WebSocket 连接已关闭:', event.code, event.reason)\n        setIsConnected(false)\n        isConnectingRef.current = false\n        // 停止心跳\n        stopHeartbeat()\n\n        // 自动重连（非正常关闭时）\n        if (event.code !== 1000) { // 1000 = 正常关闭\n          if (reconnectAttempts.current < maxReconnectAttempts) {\n            const delay = getReconnectDelay()\n            reconnectAttempts.current++\n            console.log(`[RECONNECT] ${delay / 1000}秒后尝试重连... (第 ${reconnectAttempts.current} 次)`)\n            reconnectTimerRef.current = setTimeout(() => {\n              connect()\n            }, delay)\n          } else {\n            console.error('[ERROR] 已达到最大重连次数，停止重连')\n          }\n        }\n      }\n    } catch (error) {\n      console.error('[ERROR] 创建 WebSocket 失败:', error instanceof Error ? error.message : String(error))\n      setIsConnected(false)\n      isConnectingRef.current = false\n    }\n  }, [queryClient, startHeartbeat, stopHeartbeat, getReconnectDelay, toastMessages])\n\n  // 断开连接\n  const disconnect = useCallback(() => {\n    // 停止心跳\n    stopHeartbeat()\n\n    // 清除重连定时器\n    if (reconnectTimerRef.current) {\n      clearTimeout(reconnectTimerRef.current)\n      reconnectTimerRef.current = null\n    }\n\n    // 重置重连计数\n    reconnectAttempts.current = 0\n    isConnectingRef.current = false\n\n    if (wsRef.current) {\n      wsRef.current.close(1000, 'User disconnect') // 1000 = 正常关闭\n      wsRef.current = null\n    }\n    setIsConnected(false)\n  }, [stopHeartbeat])\n\n  // 清空通知\n  const clearNotifications = () => {\n    setNotifications([])\n  }\n\n  // 组件挂载时连接，卸载时断开\n  // 注意：不依赖 connect/disconnect 避免无限循环\n  useEffect(() => {\n    connect()\n\n    return () => {\n      disconnect()\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [])\n\n  return {\n    isConnected,\n    notifications,\n    connect,\n    disconnect,\n    clearNotifications,\n    markNotificationsAsRead,\n  }\n}\n"
  },
  {
    "path": "frontend/hooks/use-notifications.ts",
    "content": "/**\n * Notification-related React Query hooks\n */\n\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\nimport { NotificationService } from '@/services/notification.service'\nimport type {\n  GetNotificationsRequest,\n} from '@/types/notification.types'\nimport { toast } from 'sonner'\n\n/**\n * Get notification list\n */\nexport function useNotifications(params?: GetNotificationsRequest) {\n  return useQuery({\n    queryKey: ['notifications', params],\n    queryFn: () => NotificationService.getNotifications(params),\n  })\n}\n\n/**\n * Get unread notification count\n */\nexport function useUnreadCount() {\n  return useQuery({\n    queryKey: ['notifications', 'unread-count'],\n    queryFn: () => NotificationService.getUnreadCount(),\n    refetchInterval: 30000, // Auto refresh every 30 seconds\n  })\n}\n\n/**\n * Mark all notifications as read\n */\nexport function useMarkAllAsRead() {\n  const queryClient = useQueryClient()\n\n  return useMutation({\n    mutationFn: () => NotificationService.markAllAsRead(),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: ['notifications'] })\n    },\n    onError: (error: any) => {\n      console.error('Failed to mark all as read:', error)\n    },\n  })\n}\n\n"
  },
  {
    "path": "frontend/hooks/use-nuclei-git-settings.ts",
    "content": "\"use client\"\n\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\"\nimport { useToastMessages } from '@/lib/toast-helpers'\nimport { getErrorCode } from '@/lib/response-parser'\nimport { NucleiGitService } from \"@/services/nuclei-git.service\"\nimport type { UpdateNucleiGitSettingsRequest } from \"@/types/nuclei-git.types\"\n\nexport function useNucleiGitSettings() {\n  return useQuery({\n    queryKey: [\"nuclei\", \"git\", \"settings\"],\n    queryFn: () => NucleiGitService.getSettings(),\n  })\n}\n\nexport function useUpdateNucleiGitSettings() {\n  const qc = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (data: UpdateNucleiGitSettingsRequest) => NucleiGitService.updateSettings(data),\n    onSuccess: () => {\n      qc.invalidateQueries({ queryKey: [\"nuclei\", \"git\", \"settings\"] })\n      toastMessages.success('toast.nucleiGit.settings.success')\n    },\n    onError: (error: any) => {\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.nucleiGit.settings.error')\n    },\n  })\n}\n"
  },
  {
    "path": "frontend/hooks/use-nuclei-repos.ts",
    "content": "/**\n * Nuclei 模板仓库相关 Hooks\n */\n\nimport { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\"\nimport { useToastMessages } from '@/lib/toast-helpers'\nimport { getErrorCode } from '@/lib/response-parser'\nimport { nucleiRepoApi } from \"../services/nuclei-repo.api\"\nimport type { NucleiTemplateTreeNode, NucleiTemplateContent } from \"@/types/nuclei.types\"\n\n// ==================== 仓库 CRUD ====================\n\nexport interface NucleiRepo {\n  id: number\n  name: string\n  repoUrl: string\n  localPath: string\n  commitHash: string | null\n  lastSyncedAt: string | null\n  createdAt: string\n  updatedAt: string\n}\n\n/** 获取仓库列表 */\nexport function useNucleiRepos() {\n  return useQuery<NucleiRepo[]>({\n    queryKey: [\"nuclei-repos\"],\n    queryFn: nucleiRepoApi.listRepos,\n  })\n}\n\n/** 获取单个仓库详情 */\nexport function useNucleiRepo(repoId: number | null) {\n  return useQuery<NucleiRepo>({\n    queryKey: [\"nuclei-repos\", repoId],\n    queryFn: () => nucleiRepoApi.getRepo(repoId!),\n    enabled: !!repoId,\n  })\n}\n\n/** 创建仓库 */\nexport function useCreateNucleiRepo() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: nucleiRepoApi.createRepo,\n    onSuccess: () => {\n      toastMessages.success('toast.nucleiRepo.create.success')\n      queryClient.invalidateQueries({ queryKey: [\"nuclei-repos\"] })\n    },\n    onError: (error: any) => {\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.nucleiRepo.create.error')\n    },\n  })\n}\n\n/** 更新仓库 */\nexport function useUpdateNucleiRepo() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (data: {\n      id: number\n      repoUrl?: string\n    }) => nucleiRepoApi.updateRepo(data.id, { repoUrl: data.repoUrl }),\n    onSuccess: (_data, variables) => {\n      toastMessages.success('toast.nucleiRepo.update.success')\n      queryClient.invalidateQueries({ queryKey: [\"nuclei-repos\"] })\n      queryClient.invalidateQueries({ queryKey: [\"nuclei-repos\", variables.id] })\n    },\n    onError: (error: any) => {\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.nucleiRepo.update.error')\n    },\n  })\n}\n\n/** 删除仓库 */\nexport function useDeleteNucleiRepo() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: nucleiRepoApi.deleteRepo,\n    onSuccess: () => {\n      toastMessages.success('toast.nucleiRepo.delete.success')\n      queryClient.invalidateQueries({ queryKey: [\"nuclei-repos\"] })\n    },\n    onError: (error: any) => {\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.nucleiRepo.delete.error')\n    },\n  })\n}\n\n// ==================== Git 同步 ====================\n\n/** 刷新仓库（Git clone/pull） */\nexport function useRefreshNucleiRepo() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: nucleiRepoApi.refreshRepo,\n    onSuccess: (_data, repoId) => {\n      toastMessages.success('toast.nucleiRepo.sync.success')\n      queryClient.invalidateQueries({ queryKey: [\"nuclei-repos\"] })\n      queryClient.invalidateQueries({ queryKey: [\"nuclei-repos\", repoId] })\n      queryClient.invalidateQueries({ queryKey: [\"nuclei-repo-tree\", repoId] })\n    },\n    onError: (error: any) => {\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.nucleiRepo.sync.error')\n    },\n  })\n}\n\n// ==================== 模板只读 ====================\n\n/** 获取仓库模板目录树 */\nexport function useNucleiRepoTree(repoId: number | null) {\n  return useQuery({\n    queryKey: [\"nuclei-repo-tree\", repoId],\n    queryFn: async () => {\n      const res = await nucleiRepoApi.getTemplateTree(repoId!)\n      return (res.roots ?? []) as NucleiTemplateTreeNode[]\n    },\n    enabled: !!repoId,\n  })\n}\n\n/** 获取模板文件内容 */\nexport function useNucleiRepoContent(repoId: number | null, path: string | null) {\n  return useQuery<NucleiTemplateContent>({\n    queryKey: [\"nuclei-repo-content\", repoId, path],\n    queryFn: () => nucleiRepoApi.getTemplateContent(repoId!, path!),\n    enabled: !!repoId && !!path,\n  })\n}\n"
  },
  {
    "path": "frontend/hooks/use-nuclei-templates.ts",
    "content": "\"use client\"\n\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\"\nimport { useToastMessages } from '@/lib/toast-helpers'\nimport { getErrorCode } from '@/lib/response-parser'\nimport { getNucleiTemplateTree, getNucleiTemplateContent, refreshNucleiTemplates, saveNucleiTemplate, uploadNucleiTemplate } from \"@/services/nuclei.service\"\nimport type { NucleiTemplateTreeNode, NucleiTemplateContent, UploadNucleiTemplatePayload, SaveNucleiTemplatePayload } from \"@/types/nuclei.types\"\n\nexport function useNucleiTemplateTree() {\n  return useQuery<NucleiTemplateTreeNode[]>({\n    queryKey: [\"nuclei\", \"templates\", \"tree\"],\n    queryFn: () => getNucleiTemplateTree(),\n  })\n}\n\nexport function useNucleiTemplateContent(path: string | null) {\n  return useQuery<NucleiTemplateContent>({\n    queryKey: [\"nuclei\", \"templates\", \"content\", path],\n    queryFn: () => getNucleiTemplateContent(path as string),\n    enabled: !!path,\n  })\n}\n\nexport function useRefreshNucleiTemplates() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: () => refreshNucleiTemplates(),\n    onMutate: () => {\n      toastMessages.loading('toast.nucleiTemplate.refresh.loading', {}, 'refresh-nuclei-templates')\n    },\n    onSuccess: () => {\n      toastMessages.dismiss('refresh-nuclei-templates')\n      toastMessages.success('toast.nucleiTemplate.refresh.success')\n      queryClient.invalidateQueries({ queryKey: [\"nuclei\", \"templates\", \"tree\"] })\n    },\n    onError: (error: any) => {\n      toastMessages.dismiss('refresh-nuclei-templates')\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.nucleiTemplate.refresh.error')\n    },\n  })\n}\n\nexport function useUploadNucleiTemplate() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation<void, Error, UploadNucleiTemplatePayload>({\n    mutationFn: (payload) => uploadNucleiTemplate(payload),\n    onMutate: () => {\n      toastMessages.loading('common.status.uploading', {}, 'upload-nuclei-template')\n    },\n    onSuccess: () => {\n      toastMessages.dismiss('upload-nuclei-template')\n      toastMessages.success('toast.nucleiTemplate.upload.success')\n      queryClient.invalidateQueries({ queryKey: [\"nuclei\", \"templates\", \"tree\"] })\n    },\n    onError: (error: any) => {\n      toastMessages.dismiss('upload-nuclei-template')\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.nucleiTemplate.upload.error')\n    },\n  })\n}\n\nexport function useSaveNucleiTemplate() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation<void, Error, SaveNucleiTemplatePayload>({\n    mutationFn: (payload) => saveNucleiTemplate(payload),\n    onMutate: () => {\n      toastMessages.loading('common.actions.saving', {}, 'save-nuclei-template')\n    },\n    onSuccess: (_data, variables) => {\n      toastMessages.dismiss('save-nuclei-template')\n      toastMessages.success('toast.nucleiTemplate.save.success')\n      queryClient.invalidateQueries({ queryKey: [\"nuclei\", \"templates\", \"content\", variables.path] })\n    },\n    onError: (error: any) => {\n      toastMessages.dismiss('save-nuclei-template')\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.nucleiTemplate.save.error')\n    },\n  })\n}\n"
  },
  {
    "path": "frontend/hooks/use-organizations.ts",
    "content": "import { useQuery, useMutation, useQueryClient, keepPreviousData } from '@tanstack/react-query'\nimport { useToastMessages } from '@/lib/toast-helpers'\nimport { getErrorCode } from '@/lib/response-parser'\nimport { OrganizationService } from '@/services/organization.service'\nimport type { Organization, CreateOrganizationRequest, UpdateOrganizationRequest } from '@/types/organization.types'\n\n// Query Keys - Unified query key management\nexport const organizationKeys = {\n  all: ['organizations'] as const,\n  lists: () => [...organizationKeys.all, 'list'] as const,\n  list: (params?: any) => [...organizationKeys.lists(), params] as const,\n  details: () => [...organizationKeys.all, 'detail'] as const,\n  detail: (id: number) => [...organizationKeys.details(), id] as const,\n}\n\n/**\n * Hook for getting organization list\n * \n * Features:\n * - Automatic loading state management\n * - Automatic error handling\n * - Pagination support\n * - Automatic caching and revalidation\n * - Conditional query support (enabled option)\n */\n// Backend is fixed to sort by update time in descending order, does not support custom sorting\nexport function useOrganizations(\n  params: {\n    page?: number\n    pageSize?: number\n    search?: string\n  } = {},\n  options?: {\n    enabled?: boolean\n  }\n) {\n  return useQuery({\n    queryKey: ['organizations', {\n      page: params.page || 1,\n      pageSize: params.pageSize || 10,\n      search: params.search || undefined,\n    }],\n    queryFn: () => OrganizationService.getOrganizations(params || {}),\n    select: (response) => {\n      // Handle DRF pagination response format\n      const page = params.page || 1\n      const pageSize = params.pageSize || 10\n      const total = response.total || response.count || 0\n      const totalPages = Math.ceil(total / pageSize)\n      \n      return {\n        organizations: response.results || [],\n        pagination: {\n          total,\n          page,\n          pageSize,\n          totalPages,\n        }\n      }\n    },\n    enabled: options?.enabled !== undefined ? options.enabled : true,\n    placeholderData: keepPreviousData,\n  })\n}\n\n/**\n * Get single organization details Hook\n */\nexport function useOrganization(id: number) {\n  return useQuery({\n    queryKey: organizationKeys.detail(id),\n    queryFn: () => OrganizationService.getOrganizationById(id),\n    enabled: !!id, // Only execute query when id exists\n  })\n}\n\n/**\n * Get organization's target list Hook\n */\nexport function useOrganizationTargets(\n  id: number,\n  params?: {\n    page?: number\n    pageSize?: number\n    sortBy?: string\n    sortOrder?: 'asc' | 'desc'\n    search?: string\n  },\n  options?: {\n    enabled?: boolean\n  }\n) {\n  return useQuery({\n    queryKey: [...organizationKeys.detail(id), 'targets', params],\n    queryFn: () => OrganizationService.getOrganizationTargets(id, params),\n    enabled: options?.enabled !== undefined ? (options.enabled && !!id) : !!id,\n    placeholderData: keepPreviousData,\n  })\n}\n\n/**\n * Create organization Mutation Hook\n * \n * Features:\n * - Automatic submission state management\n * - Automatic list refresh after success\n * - Automatic success/failure notifications\n */\nexport function useCreateOrganization() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (data: CreateOrganizationRequest) => \n      OrganizationService.createOrganization(data),\n    onMutate: () => {\n      toastMessages.loading('common.status.creating', {}, 'create-organization')\n    },\n    onSuccess: () => {\n      toastMessages.dismiss('create-organization')\n      queryClient.invalidateQueries({ queryKey: ['organizations'] })\n      toastMessages.success('toast.organization.create.success')\n    },\n    onError: (error: any) => {\n      toastMessages.dismiss('create-organization')\n      console.error('Failed to create organization:', error)\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.organization.create.error')\n    },\n  })\n}\n\n/**\n * Update organization Mutation Hook\n */\nexport function useUpdateOrganization() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: ({ id, data }: { id: number; data: UpdateOrganizationRequest }) =>\n      OrganizationService.updateOrganization({ id, ...data }),\n    onMutate: ({ id }) => {\n      toastMessages.loading('common.status.updating', {}, `update-${id}`)\n    },\n    onSuccess: ({ id }) => {\n      toastMessages.dismiss(`update-${id}`)\n      queryClient.invalidateQueries({ queryKey: ['organizations'] })\n      toastMessages.success('toast.organization.update.success')\n    },\n    onError: (error: any, { id }) => {\n      toastMessages.dismiss(`update-${id}`)\n      console.error('Failed to update organization:', error)\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.organization.update.error')\n    },\n  })\n}\n\n/**\n * 删除组织的 Mutation Hook（乐观更新）\n */\nexport function useDeleteOrganization() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (id: number) => OrganizationService.deleteOrganization(id),\n    onMutate: async (deletedId) => {\n      toastMessages.loading('common.status.deleting', {}, `delete-${deletedId}`)\n      \n      await queryClient.cancelQueries({ queryKey: ['organizations'] })\n      const previousData = queryClient.getQueriesData({ queryKey: ['organizations'] })\n\n      queryClient.setQueriesData(\n        { queryKey: ['organizations'] },\n        (old: any) => {\n          if (old?.organizations) {\n            return {\n              ...old,\n              organizations: old.organizations.filter((org: Organization) => org.id !== deletedId)\n            }\n          }\n          return old\n        }\n      )\n\n      return { previousData, deletedId }\n    },\n    onSuccess: (response, deletedId) => {\n      toastMessages.dismiss(`delete-${deletedId}`)\n      const { organizationName } = response\n      toastMessages.success('toast.organization.delete.success', { name: organizationName })\n    },\n    onError: (error: any, deletedId, context) => {\n      toastMessages.dismiss(`delete-${deletedId}`)\n      \n      if (context?.previousData) {\n        context.previousData.forEach(([queryKey, data]) => {\n          queryClient.setQueryData(queryKey, data)\n        })\n      }\n      \n      console.error('Failed to delete organization:', error)\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.organization.delete.error')\n    },\n    onSettled: () => {\n      queryClient.invalidateQueries({ queryKey: ['organizations'] })\n      queryClient.invalidateQueries({ queryKey: ['targets'] })\n    },\n  })\n}\n\n/**\n * 批量删除组织的 Mutation Hook（乐观更新）\n */\nexport function useBatchDeleteOrganizations() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (ids: number[]) => \n      OrganizationService.batchDeleteOrganizations(ids),\n    onMutate: async (deletedIds) => {\n      toastMessages.loading('common.status.batchDeleting', {}, 'batch-delete')\n      \n      await queryClient.cancelQueries({ queryKey: ['organizations'] })\n      const previousData = queryClient.getQueriesData({ queryKey: ['organizations'] })\n\n      queryClient.setQueriesData(\n        { queryKey: ['organizations'] },\n        (old: any) => {\n          if (old?.organizations) {\n            return {\n              ...old,\n              organizations: old.organizations.filter(\n                (org: Organization) => !deletedIds.includes(org.id)\n              )\n            }\n          }\n          return old\n        }\n      )\n\n      return { previousData, deletedIds }\n    },\n    onSuccess: (response) => {\n      toastMessages.dismiss('batch-delete')\n      const { deletedCount } = response\n      toastMessages.success('toast.organization.delete.bulkSuccess', { count: deletedCount })\n    },\n    onError: (error: any, deletedIds, context) => {\n      toastMessages.dismiss('batch-delete')\n      \n      if (context?.previousData) {\n        context.previousData.forEach(([queryKey, data]) => {\n          queryClient.setQueryData(queryKey, data)\n        })\n      }\n      \n      console.error('Failed to batch delete organizations:', error)\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.organization.delete.error')\n    },\n    onSettled: () => {\n      queryClient.invalidateQueries({ queryKey: ['organizations'] })\n      queryClient.invalidateQueries({ queryKey: ['targets'] })\n    },\n  })\n}\n\n\n\n/**\n * 解除组织与目标关联的 Mutation Hook（批量）\n */\nexport function useUnlinkTargetsFromOrganization() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (data: { organizationId: number; targetIds: number[] }) => \n      OrganizationService.unlinkTargetsFromOrganization(data),\n    onMutate: ({ organizationId }) => {\n      toastMessages.loading('common.status.unlinking', {}, `unlink-${organizationId}`)\n    },\n    onSuccess: (response, { organizationId, targetIds }) => {\n      toastMessages.dismiss(`unlink-${organizationId}`)\n      toastMessages.success('toast.target.unlink.bulkSuccess', { count: targetIds.length })\n      \n      queryClient.invalidateQueries({ queryKey: ['targets'] })\n      queryClient.invalidateQueries({ queryKey: ['organizations'] })\n    },\n    onError: (error: any, { organizationId }) => {\n      toastMessages.dismiss(`unlink-${organizationId}`)\n      console.error('Failed to unlink targets:', error)\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.target.unlink.error')\n    },\n  })\n}\n"
  },
  {
    "path": "frontend/hooks/use-route-prefetch.ts",
    "content": "import { useRouter } from 'next/navigation'\nimport { useEffect } from 'react'\n\n/**\n * 路由预加载 Hook\n * 在页面加载完成后，后台预加载其他页面的 JS/CSS 资源\n * 不会发送 API 请求，只加载页面组件\n * @param currentPath 当前页面路径（可选），如果提供则会智能预加载相关动态路由\n */\nexport function useRoutePrefetch(currentPath?: string) {\n  const router = useRouter()\n\n  useEffect(() => {\n    console.log('[START] 路由预加载 Hook 已挂载，开始预加载...')\n\n    // 使用 requestIdleCallback 在浏览器空闲时预加载，不影响当前页面渲染\n    const prefetchRoutes = () => {\n      const routes = [\n        // 仪表盘\n        '/dashboard/',\n        // 组织\n        '/organization/',\n        // 目标\n        '/target/',\n        // 漏洞\n        '/vulnerabilities/',\n        // 扫描\n        '/scan/history/',\n        '/scan/scheduled/',\n        '/scan/engine/',\n        // 工具\n        '/tools/',\n        '/tools/config/',\n        '/tools/config/opensource/',\n        '/tools/config/custom/',\n        '/tools/nuclei/',\n        '/tools/wordlists/',\n        // 指纹管理\n        '/tools/fingerprints/',\n        '/tools/fingerprints/ehole/',\n        '/tools/fingerprints/goby/',\n        '/tools/fingerprints/wappalyzer/',\n        '/tools/fingerprints/fingers/',\n        '/tools/fingerprints/fingerprinthub/',\n        '/tools/fingerprints/arl/',\n        // 设置\n        '/settings/workers/',\n        '/settings/notifications/',\n        '/settings/system-logs/',\n      ]\n\n      routes.forEach((route) => {\n        console.log(`  -> 预加载: ${route}`)\n        router.prefetch(route)\n      })\n\n      // 如果提供了当前路径，智能预加载相关动态路由\n      if (currentPath) {\n        // 如果是目标详情页（如 /target/146），预加载子路由\n        const targetIdMatch = currentPath.match(/\\/target\\/(\\d+)$/)\n        if (targetIdMatch) {\n          const targetId = targetIdMatch[1]\n          const subRoutes = ['subdomain', 'endpoints', 'websites', 'vulnerabilities', 'directories', 'ip-addresses']\n          subRoutes.forEach(sub => {\n            router.prefetch(`/target/${targetId}/${sub}`)\n          })\n          console.log(`  -> 智能预加载目标子路由: /target/${targetId}/*`)\n        }\n        \n        // 如果是扫描历史详情页（如 /scan/history/146），预加载子路由\n        const scanIdMatch = currentPath.match(/\\/scan\\/history\\/(\\d+)$/)\n        if (scanIdMatch) {\n          const scanId = scanIdMatch[1]\n          const subRoutes = ['subdomain', 'endpoints', 'websites', 'vulnerabilities', 'directories', 'ip-addresses']\n          subRoutes.forEach(sub => {\n            router.prefetch(`/scan/history/${scanId}/${sub}`)\n          })\n          console.log(`  -> 智能预加载扫描子路由: /scan/history/${scanId}/*`)\n        }\n      }\n\n      console.log('[DONE] 所有路由预加载请求已发送')\n    }\n\n    // 使用 requestIdleCallback 在浏览器空闲时执行，如果不支持则立即执行\n    if (typeof window !== 'undefined' && 'requestIdleCallback' in window) {\n      const idleId = window.requestIdleCallback(prefetchRoutes)\n      return () => window.cancelIdleCallback(idleId)\n    } else {\n      prefetchRoutes()\n      return\n    }\n  }, [router, currentPath])\n}\n\n/**\n * 智能路由预加载 Hook\n * 根据当前路径，预加载用户可能访问的下一个页面\n * @param currentPath 当前页面路径\n */\nexport function useSmartRoutePrefetch(currentPath: string) {\n  const router = useRouter()\n\n  useEffect(() => {\n    const timer = setTimeout(() => {\n      if (currentPath.includes('/organization')) {\n        // 在组织页面，预加载目标页面\n        router.prefetch('/target/')\n      } else if (currentPath.includes('/target')) {\n        // 在目标页面，预加载扫描和漏洞页面\n        router.prefetch('/scan/history/')\n        router.prefetch('/vulnerabilities/')\n\n        // 如果是目标详情页（如 /target/146），预加载子路由\n        const targetIdMatch = currentPath.match(/\\/target\\/(\\d+)$/)\n        if (targetIdMatch) {\n          const targetId = targetIdMatch[1]\n          const subRoutes = ['subdomain', 'endpoints', 'websites', 'vulnerabilities']\n          subRoutes.forEach(sub => {\n            router.prefetch(`/target/${targetId}/${sub}`)\n          })\n          console.log(`  -> 预加载目标子路由: /target/${targetId}/*`)\n        }\n      } else if (currentPath.includes('/scan/history')) {\n        // 在扫描历史页面，预加载目标页面\n        router.prefetch('/target/')\n        router.prefetch('/vulnerabilities/')\n      } else if (currentPath === '/') {\n        // 在首页，预加载主要页面\n        router.prefetch('/dashboard/')\n        router.prefetch('/organization/')\n      }\n    }, 1500) // 1.5 秒后预加载\n\n    return () => clearTimeout(timer)\n  }, [currentPath, router])\n}\n"
  },
  {
    "path": "frontend/hooks/use-scan-logs.ts",
    "content": "/**\n * 扫描日志轮询 Hook\n * \n * 功能：\n * - 初始加载获取全部日志\n * - 增量轮询获取新日志（3s 间隔）\n * - 扫描结束后停止轮询\n */\n\nimport { useState, useEffect, useCallback, useRef } from 'react'\nimport { getScanLogs, type ScanLog } from '@/services/scan.service'\n\ninterface UseScanLogsOptions {\n  scanId: number\n  enabled?: boolean\n  pollingInterval?: number  // 默认 3000ms\n}\n\ninterface UseScanLogsReturn {\n  logs: ScanLog[]\n  loading: boolean\n  refetch: () => void\n}\n\nexport function useScanLogs({\n  scanId,\n  enabled = true,\n  pollingInterval = 3000,\n}: UseScanLogsOptions): UseScanLogsReturn {\n  const [logs, setLogs] = useState<ScanLog[]>([])\n  const [loading, setLoading] = useState(false)\n  const lastLogId = useRef<number | null>(null)\n  const isMounted = useRef(true)\n  \n  const fetchLogs = useCallback(async (incremental = false) => {\n    if (!enabled || !isMounted.current) return\n    \n    setLoading(true)\n    try {\n      const params: { limit: number; afterId?: number } = { limit: 200 }\n      if (incremental && lastLogId.current !== null) {\n        params.afterId = lastLogId.current\n      }\n      \n      const response = await getScanLogs(scanId, params)\n      const newLogs = response.results\n      \n      if (!isMounted.current) return\n      \n      if (newLogs.length > 0) {\n        // 使用 ID 作为游标，ID 是唯一且自增的，避免时间戳重复导致的重复日志\n        lastLogId.current = newLogs[newLogs.length - 1].id\n        \n        if (incremental) {\n          // 按 ID 去重，防止 React Strict Mode 或竞态条件导致的重复\n          setLogs(prev => {\n            const existingIds = new Set(prev.map(l => l.id))\n            const uniqueNewLogs = newLogs.filter(l => !existingIds.has(l.id))\n            return uniqueNewLogs.length > 0 ? [...prev, ...uniqueNewLogs] : prev\n          })\n        } else {\n          setLogs(newLogs)\n        }\n      }\n    } catch (error) {\n      console.error('Failed to fetch scan logs:', error)\n    } finally {\n      if (isMounted.current) {\n        setLoading(false)\n      }\n    }\n  }, [scanId, enabled])\n  \n  // 初始加载\n  useEffect(() => {\n    isMounted.current = true\n    if (enabled) {\n      // 重置状态\n      setLogs([])\n      lastLogId.current = null\n      fetchLogs(false)\n    }\n    return () => {\n      isMounted.current = false\n    }\n  }, [scanId, enabled, fetchLogs])\n  \n  // 轮询\n  useEffect(() => {\n    if (!enabled) return\n    // pollingInterval <= 0 表示禁用轮询（避免 setInterval(0) 导致高频请求/卡顿）\n    if (!pollingInterval || pollingInterval <= 0) return\n\n    const interval = setInterval(() => {\n      fetchLogs(true) // 增量查询\n    }, pollingInterval)\n\n    return () => clearInterval(interval)\n  }, [enabled, pollingInterval, fetchLogs])\n  \n  const refetch = useCallback(() => {\n    setLogs([])\n    lastLogId.current = null\n    fetchLogs(false)\n  }, [fetchLogs])\n  \n  return { logs, loading, refetch }\n}\n"
  },
  {
    "path": "frontend/hooks/use-scans.ts",
    "content": "import { useQuery, useMutation, useQueryClient, keepPreviousData } from '@tanstack/react-query'\nimport { \n  getScans, \n  getScan, \n  getScanStatistics,\n  quickScan,\n  initiateScan,\n  deleteScan,\n  bulkDeleteScans,\n  stopScan\n} from '@/services/scan.service'\nimport { useToastMessages } from '@/lib/toast-helpers'\nimport { parseResponse, getErrorCode } from '@/lib/response-parser'\nimport type { \n  GetScansParams, \n  QuickScanRequest, \n  InitiateScanRequest \n} from '@/types/scan.types'\n\nexport function useScans(params: GetScansParams = { page: 1, pageSize: 10 }) {\n  return useQuery({\n    queryKey: ['scans', params],\n    queryFn: () => getScans(params),\n    placeholderData: keepPreviousData,\n  })\n}\n\nexport function useRunningScans(page = 1, pageSize = 10) {\n  return useScans({ page, pageSize, status: 'running' })\n}\n\n/**\n * 获取目标的扫描历史\n */\nexport function useTargetScans(targetId: number, pageSize = 5) {\n  return useQuery({\n    queryKey: ['scans', 'target', targetId, pageSize],\n    queryFn: () => getScans({ target: targetId, pageSize }),\n    enabled: !!targetId,\n  })\n}\n\nexport function useScan(id: number) {\n  return useQuery({\n    queryKey: ['scan', id],\n    queryFn: () => getScan(id),\n    enabled: !!id,\n  })\n}\n\n/**\n * 获取扫描统计数据\n */\nexport function useScanStatistics() {\n  return useQuery({\n    queryKey: ['scan-statistics'],\n    queryFn: getScanStatistics,\n  })\n}\n\n/**\n * 快速扫描 mutation hook\n */\nexport function useQuickScan() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (data: QuickScanRequest) => quickScan(data),\n    onSuccess: (response) => {\n      const data = parseResponse<any>(response)\n      if (data) {\n        // 使用 i18n 消息显示成功提示\n        const count = data.scans?.length || data.targetStats?.created || data.count || 0\n        toastMessages.success('toast.scan.quick.success', { count })\n        // 刷新扫描列表\n        queryClient.invalidateQueries({ queryKey: ['scans'] })\n        queryClient.invalidateQueries({ queryKey: ['scan-statistics'] })\n      }\n    },\n    onError: (error: any) => {\n      const errorCode = getErrorCode(error.response?.data)\n      if (errorCode) {\n        toastMessages.errorFromCode(errorCode)\n      } else {\n        toastMessages.error('toast.scan.quick.error')\n      }\n    },\n  })\n}\n\n/**\n * 发起扫描 mutation hook\n */\nexport function useInitiateScan() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (data: InitiateScanRequest) => initiateScan(data),\n    onSuccess: (response) => {\n      const data = parseResponse<any>(response)\n      if (data) {\n        // 使用 i18n 消息显示成功提示\n        toastMessages.success('toast.scan.initiate.success')\n        // 刷新扫描列表\n        queryClient.invalidateQueries({ queryKey: ['scans'] })\n        queryClient.invalidateQueries({ queryKey: ['scan-statistics'] })\n      }\n    },\n    onError: (error: any) => {\n      const errorCode = getErrorCode(error.response?.data)\n      if (errorCode) {\n        toastMessages.errorFromCode(errorCode)\n      } else {\n        toastMessages.error('toast.scan.initiate.error')\n      }\n    },\n  })\n}\n\n/**\n * 删除扫描 mutation hook\n */\nexport function useDeleteScan() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (id: number) => deleteScan(id),\n    onSuccess: (response, id) => {\n      const data = parseResponse<any>(response)\n      // 使用 i18n 消息显示成功提示\n      toastMessages.success('toast.scan.delete.success', { \n        name: `Scan #${id}` \n      })\n      // 刷新扫描列表\n      queryClient.invalidateQueries({ queryKey: ['scans'] })\n      queryClient.invalidateQueries({ queryKey: ['scan-statistics'] })\n    },\n    onError: (error: any) => {\n      const errorCode = getErrorCode(error.response?.data)\n      if (errorCode) {\n        toastMessages.errorFromCode(errorCode)\n      } else {\n        toastMessages.error('toast.deleteFailed')\n      }\n    },\n  })\n}\n\n/**\n * 批量删除扫描 mutation hook\n */\nexport function useBulkDeleteScans() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (ids: number[]) => bulkDeleteScans(ids),\n    onSuccess: (response, ids) => {\n      const data = parseResponse<any>(response)\n      if (data) {\n        // 使用 i18n 消息显示成功提示\n        const count = data.deletedCount || ids.length || 0\n        toastMessages.success('toast.scan.delete.bulkSuccess', { count })\n        // 刷新扫描列表\n        queryClient.invalidateQueries({ queryKey: ['scans'] })\n        queryClient.invalidateQueries({ queryKey: ['scan-statistics'] })\n      }\n    },\n    onError: (error: any) => {\n      const errorCode = getErrorCode(error.response?.data)\n      if (errorCode) {\n        toastMessages.errorFromCode(errorCode)\n      } else {\n        toastMessages.error('toast.bulkDeleteFailed')\n      }\n    },\n  })\n}\n\n/**\n * 停止扫描 mutation hook\n */\nexport function useStopScan() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (id: number) => stopScan(id),\n    onSuccess: (response) => {\n      const data = parseResponse<any>(response)\n      if (data) {\n        // 使用 i18n 消息显示成功提示\n        const count = data.revokedTaskCount || 1\n        toastMessages.success('toast.scan.stop.success', { count })\n        // 刷新扫描列表\n        queryClient.invalidateQueries({ queryKey: ['scans'] })\n        queryClient.invalidateQueries({ queryKey: ['scan-statistics'] })\n      }\n    },\n    onError: (error: any) => {\n      const errorCode = getErrorCode(error.response?.data)\n      if (errorCode) {\n        toastMessages.errorFromCode(errorCode)\n      } else {\n        toastMessages.error('toast.stopFailed')\n      }\n    },\n  })\n}\n"
  },
  {
    "path": "frontend/hooks/use-scheduled-scans.ts",
    "content": "import { useQuery, useMutation, useQueryClient, keepPreviousData } from '@tanstack/react-query'\nimport {\n  getScheduledScans,\n  getScheduledScan,\n  createScheduledScan,\n  updateScheduledScan,\n  deleteScheduledScan,\n  toggleScheduledScan,\n} from '@/services/scheduled-scan.service'\nimport { useToastMessages } from '@/lib/toast-helpers'\nimport { parseResponse, getErrorCode } from '@/lib/response-parser'\nimport type { CreateScheduledScanRequest, UpdateScheduledScanRequest } from '@/types/scheduled-scan.types'\n\n/**\n * 获取定时扫描列表\n */\nexport function useScheduledScans(params: { \n  page?: number\n  pageSize?: number\n  search?: string\n  targetId?: number\n  organizationId?: number \n} = { page: 1, pageSize: 10 }) {\n  return useQuery({\n    queryKey: ['scheduled-scans', params],\n    queryFn: () => getScheduledScans(params),\n    placeholderData: keepPreviousData,\n  })\n}\n\n/**\n * 获取定时扫描详情\n */\nexport function useScheduledScan(id: number) {\n  return useQuery({\n    queryKey: ['scheduled-scan', id],\n    queryFn: () => getScheduledScan(id),\n    enabled: !!id,\n  })\n}\n\n/**\n * 创建定时扫描\n */\nexport function useCreateScheduledScan() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (data: CreateScheduledScanRequest) => createScheduledScan(data),\n    onSuccess: (response) => {\n      const data = parseResponse<any>(response)\n      // 使用 i18n 消息显示成功提示\n      toastMessages.success('toast.scheduledScan.create.success')\n      queryClient.invalidateQueries({ queryKey: ['scheduled-scans'] })\n    },\n    onError: (error: any) => {\n      const errorCode = getErrorCode(error.response?.data)\n      if (errorCode) {\n        toastMessages.errorFromCode(errorCode)\n      } else {\n        toastMessages.error('toast.scheduledScan.create.error')\n      }\n    },\n  })\n}\n\n/**\n * 更新定时扫描\n */\nexport function useUpdateScheduledScan() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: ({ id, data }: { id: number; data: UpdateScheduledScanRequest }) =>\n      updateScheduledScan(id, data),\n    onSuccess: (response) => {\n      const data = parseResponse<any>(response)\n      // 使用 i18n 消息显示成功提示\n      toastMessages.success('toast.scheduledScan.update.success')\n      queryClient.invalidateQueries({ queryKey: ['scheduled-scans'] })\n      queryClient.invalidateQueries({ queryKey: ['scheduled-scan'] })\n    },\n    onError: (error: any) => {\n      const errorCode = getErrorCode(error.response?.data)\n      if (errorCode) {\n        toastMessages.errorFromCode(errorCode)\n      } else {\n        toastMessages.error('toast.scheduledScan.update.error')\n      }\n    },\n  })\n}\n\n/**\n * 删除定时扫描\n */\nexport function useDeleteScheduledScan() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (id: number) => deleteScheduledScan(id),\n    onSuccess: (response) => {\n      const data = parseResponse<any>(response)\n      // 使用 i18n 消息显示成功提示\n      toastMessages.success('toast.scheduledScan.delete.success')\n      queryClient.invalidateQueries({ queryKey: ['scheduled-scans'] })\n    },\n    onError: (error: any) => {\n      const errorCode = getErrorCode(error.response?.data)\n      if (errorCode) {\n        toastMessages.errorFromCode(errorCode)\n      } else {\n        toastMessages.error('toast.scheduledScan.delete.error')\n      }\n    },\n  })\n}\n\n/**\n * 切换定时扫描启用状态\n * 使用乐观更新，避免重新获取数据导致列表重新排序\n */\nexport function useToggleScheduledScan() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: ({ id, isEnabled }: { id: number; isEnabled: boolean }) =>\n      toggleScheduledScan(id, isEnabled),\n    onMutate: async ({ id, isEnabled }) => {\n      // 取消正在进行的查询\n      await queryClient.cancelQueries({ queryKey: ['scheduled-scans'] })\n\n      // 获取当前缓存的所有 scheduled-scans 查询\n      const previousQueries = queryClient.getQueriesData({ queryKey: ['scheduled-scans'] })\n\n      // 乐观更新所有匹配的查询缓存\n      queryClient.setQueriesData(\n        { queryKey: ['scheduled-scans'] },\n        (old: any) => {\n          if (!old?.results) return old\n          return {\n            ...old,\n            results: old.results.map((item: any) =>\n              item.id === id ? { ...item, isEnabled } : item\n            ),\n          }\n        }\n      )\n\n      // 返回上下文用于回滚\n      return { previousQueries }\n    },\n    onSuccess: (response, { isEnabled }) => {\n      const data = parseResponse<any>(response)\n      // 使用 i18n 消息显示成功提示\n      if (isEnabled) {\n        toastMessages.success('toast.scheduledScan.toggle.enabled')\n      } else {\n        toastMessages.success('toast.scheduledScan.toggle.disabled')\n      }\n      // 不调用 invalidateQueries，保持当前排序\n    },\n    onError: (error: any, _variables, context) => {\n      // 回滚到之前的状态\n      if (context?.previousQueries) {\n        context.previousQueries.forEach(([queryKey, data]) => {\n          queryClient.setQueryData(queryKey, data)\n        })\n      }\n      const errorCode = getErrorCode(error.response?.data)\n      if (errorCode) {\n        toastMessages.errorFromCode(errorCode)\n      } else {\n        toastMessages.error('toast.scheduledScan.toggle.error')\n      }\n    },\n  })\n}\n\n"
  },
  {
    "path": "frontend/hooks/use-screenshots.ts",
    "content": "import { useQuery, keepPreviousData } from '@tanstack/react-query'\nimport { ScreenshotService, type PaginatedResponse, type Screenshot, type ScreenshotSnapshot } from '@/services/screenshot.service'\n\n// 获取目标的截图列表\nexport function useTargetScreenshots(\n  targetId: number,\n  params: { page: number; pageSize: number; filter?: string },\n  options?: { enabled?: boolean }\n) {\n  return useQuery({\n    queryKey: ['target-screenshots', targetId, params],\n    queryFn: () => ScreenshotService.getByTarget(targetId, params),\n    enabled: options?.enabled ?? true,\n    placeholderData: keepPreviousData,\n  })\n}\n\n// 获取扫描的截图快照列表\nexport function useScanScreenshots(\n  scanId: number,\n  params: { page: number; pageSize: number; filter?: string },\n  options?: { enabled?: boolean }\n) {\n  return useQuery({\n    queryKey: ['scan-screenshots', scanId, params],\n    queryFn: () => ScreenshotService.getByScan(scanId, params),\n    enabled: options?.enabled ?? true,\n    placeholderData: keepPreviousData,\n  })\n}\n"
  },
  {
    "path": "frontend/hooks/use-search.ts",
    "content": "import { useQuery, keepPreviousData } from '@tanstack/react-query'\nimport { SearchService } from '@/services/search.service'\nimport type { SearchParams, SearchResponse } from '@/types/search.types'\n\n/**\n * 资产搜索 Hook\n * \n * @param params 搜索参数\n * @param options 查询选项\n * @returns 搜索结果\n */\nexport function useAssetSearch(\n  params: SearchParams,\n  options?: { enabled?: boolean }\n) {\n  // 检查是否有有效的搜索查询\n  const hasSearchParams = !!(params.q && params.q.trim())\n\n  return useQuery<SearchResponse>({\n    queryKey: ['asset-search', params],\n    queryFn: () => SearchService.search(params),\n    enabled: (options?.enabled ?? true) && hasSearchParams,\n    placeholderData: keepPreviousData,\n    staleTime: 30000, // 30 秒内不重新请求\n  })\n}\n"
  },
  {
    "path": "frontend/hooks/use-step.ts",
    "content": "\"use client\"\n\nimport { useCallback, useState } from 'react'\nimport type { Dispatch, SetStateAction } from 'react'\n\ntype UseStepActions = {\n  goToNextStep: () => void\n  goToPrevStep: () => void\n  reset: () => void\n  canGoToNextStep: boolean\n  canGoToPrevStep: boolean\n  setStep: Dispatch<SetStateAction<number>>\n}\n\ntype SetStepCallbackType = (step: number | ((step: number) => number)) => void\n\n/**\n * 步骤导航 Hook\n * @param maxStep 最大步骤数\n * @returns [currentStep, actions]\n */\nexport function useStep(maxStep: number): [number, UseStepActions] {\n  const [currentStep, setCurrentStep] = useState(1)\n\n  const canGoToNextStep = currentStep + 1 <= maxStep\n  const canGoToPrevStep = currentStep - 1 > 0\n\n  const setStep = useCallback<SetStepCallbackType>(\n    step => {\n      const newStep = step instanceof Function ? step(currentStep) : step\n\n      if (newStep >= 1 && newStep <= maxStep) {\n        setCurrentStep(newStep)\n        return\n      }\n\n      throw new Error('Step not valid')\n    },\n    [maxStep, currentStep],\n  )\n\n  const goToNextStep = useCallback(() => {\n    if (canGoToNextStep) {\n      setCurrentStep(step => step + 1)\n    }\n  }, [canGoToNextStep])\n\n  const goToPrevStep = useCallback(() => {\n    if (canGoToPrevStep) {\n      setCurrentStep(step => step - 1)\n    }\n  }, [canGoToPrevStep])\n\n  const reset = useCallback(() => {\n    setCurrentStep(1)\n  }, [])\n\n  return [\n    currentStep,\n    {\n      goToNextStep,\n      goToPrevStep,\n      canGoToNextStep,\n      canGoToPrevStep,\n      setStep,\n      reset,\n    },\n  ]\n}\n\nexport type { UseStepActions }\n"
  },
  {
    "path": "frontend/hooks/use-subdomains.ts",
    "content": "\"use client\"\n\nimport { useMutation, useQuery, useQueryClient, keepPreviousData } from \"@tanstack/react-query\"\nimport { useToastMessages } from '@/lib/toast-helpers'\nimport { getErrorCode } from '@/lib/response-parser'\nimport { SubdomainService } from \"@/services/subdomain.service\"\nimport { OrganizationService } from \"@/services/organization.service\"\nimport type { Subdomain, GetSubdomainsResponse, GetAllSubdomainsParams } from \"@/types/subdomain.types\"\nimport type { PaginationParams } from \"@/types/common.types\"\n\n// Query Keys\nexport const subdomainKeys = {\n  all: ['subdomains'] as const,\n  lists: () => [...subdomainKeys.all, 'list'] as const,\n  list: (params: PaginationParams & { organizationId?: string }) => \n    [...subdomainKeys.lists(), params] as const,\n  details: () => [...subdomainKeys.all, 'detail'] as const,\n  detail: (id: number) => [...subdomainKeys.details(), id] as const,\n}\n\n// 获取单个子域名详情\nexport function useSubdomain(id: number) {\n  return useQuery({\n    queryKey: subdomainKeys.detail(id),\n    queryFn: () => SubdomainService.getSubdomainById(id),\n    enabled: !!id,\n  })\n}\n\n// 获取组织的子域名列表\nexport function useOrganizationSubdomains(\n  organizationId: number,\n  params?: { page?: number; pageSize?: number },\n  options?: { enabled?: boolean }\n) {\n  return useQuery({\n    queryKey: ['organizations', 'detail', organizationId, 'subdomains', {\n      page: params?.page,\n      pageSize: params?.pageSize,\n    }],\n    queryFn: () => SubdomainService.getSubdomainsByOrgId(organizationId, {\n      page: params?.page || 1,\n      pageSize: params?.pageSize || 10,\n    }),\n    enabled: options?.enabled !== undefined ? options.enabled : true,\n    select: (response) => ({\n      domains: response.domains || [],\n      pagination: {\n        total: response.total || 0,\n        page: response.page || 1,\n        pageSize: response.pageSize || 10,\n        totalPages: response.totalPages || 0,\n      }\n    }),\n  })\n}\n\n// 创建子域名（绑定到资产）\nexport function useCreateSubdomain() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (data: { domains: Array<{ name: string }>; assetId: number }) =>\n      SubdomainService.createSubdomains(data),\n    onMutate: async () => {\n      toastMessages.loading('common.status.creating', {}, 'create-subdomain')\n    },\n    onSuccess: (response) => {\n      toastMessages.dismiss('create-subdomain')\n      const { createdCount, existedCount, skippedCount = 0 } = response\n      if (skippedCount > 0 || existedCount > 0) {\n        toastMessages.warning('toast.asset.subdomain.create.partialSuccess', { \n          success: createdCount, \n          skipped: (existedCount || 0) + (skippedCount || 0) \n        })\n      } else {\n        toastMessages.success('toast.asset.subdomain.create.success', { count: createdCount })\n      }\n      queryClient.invalidateQueries({ queryKey: ['subdomains'] })\n      queryClient.invalidateQueries({ queryKey: ['assets'] })\n    },\n    onError: (error: any) => {\n      toastMessages.dismiss('create-subdomain')\n      console.error('Failed to create subdomain:', error)\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.asset.subdomain.create.error')\n    },\n  })\n}\n\n// 从组织中移除子域名\nexport function useDeleteSubdomainFromOrganization() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (data: { organizationId: number; targetId: number }) =>\n      OrganizationService.unlinkTargetsFromOrganization({\n        organizationId: data.organizationId,\n        targetIds: [data.targetId],\n      }),\n    onMutate: ({ organizationId, targetId }) => {\n      toastMessages.loading('common.status.removing', {}, `delete-${organizationId}-${targetId}`)\n    },\n    onSuccess: (_response, { organizationId, targetId }) => {\n      toastMessages.dismiss(`delete-${organizationId}-${targetId}`)\n      toastMessages.success('toast.asset.subdomain.delete.success')\n      queryClient.invalidateQueries({ queryKey: ['subdomains'] })\n      queryClient.invalidateQueries({ queryKey: ['organizations'] })\n    },\n    onError: (error: any, { organizationId, targetId }) => {\n      toastMessages.dismiss(`delete-${organizationId}-${targetId}`)\n      console.error('Failed to remove subdomain:', error)\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.asset.subdomain.delete.error')\n    },\n  })\n}\n\n// 批量从组织中移除子域名\nexport function useBatchDeleteSubdomainsFromOrganization() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (data: { organizationId: number; domainIds: number[] }) => \n      SubdomainService.batchDeleteSubdomainsFromOrganization(data),\n    onMutate: ({ organizationId }) => {\n      toastMessages.loading('common.status.batchRemoving', {}, `batch-delete-${organizationId}`)\n    },\n    onSuccess: (response, { organizationId }) => {\n      toastMessages.dismiss(`batch-delete-${organizationId}`)\n      const successCount = response.successCount || 0\n      toastMessages.success('toast.asset.subdomain.delete.bulkSuccess', { count: successCount })\n      queryClient.invalidateQueries({ queryKey: ['subdomains'] })\n      queryClient.invalidateQueries({ queryKey: ['organizations'] })\n    },\n    onError: (error: any, { organizationId }) => {\n      toastMessages.dismiss(`batch-delete-${organizationId}`)\n      console.error('Failed to batch remove subdomains:', error)\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.asset.subdomain.delete.error')\n    },\n  })\n}\n\n// 删除单个子域名（使用单独的 DELETE API）\nexport function useDeleteSubdomain() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (id: number) => SubdomainService.deleteSubdomain(id),\n    onMutate: (id) => {\n      toastMessages.loading('common.status.deleting', {}, `delete-subdomain-${id}`)\n    },\n    onSuccess: (response, id) => {\n      toastMessages.dismiss(`delete-subdomain-${id}`)\n      toastMessages.success('toast.asset.subdomain.delete.success')\n      \n      queryClient.invalidateQueries({ queryKey: ['subdomains'] })\n      queryClient.invalidateQueries({ queryKey: ['targets'] })\n      queryClient.invalidateQueries({ queryKey: ['scans'] })\n      queryClient.invalidateQueries({ queryKey: ['organizations'] })\n    },\n    onError: (error: any, id) => {\n      toastMessages.dismiss(`delete-subdomain-${id}`)\n      console.error('Failed to delete subdomain:', error)\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.asset.subdomain.delete.error')\n    },\n  })\n}\n\n// 批量删除子域名（使用统一的批量删除接口）\nexport function useBatchDeleteSubdomains() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (ids: number[]) => SubdomainService.batchDeleteSubdomains(ids),\n    onMutate: () => {\n      toastMessages.loading('common.status.batchDeleting', {}, 'batch-delete-subdomains')\n    },\n    onSuccess: (response) => {\n      toastMessages.dismiss('batch-delete-subdomains')\n      toastMessages.success('toast.asset.subdomain.delete.bulkSuccess', { count: response.deletedCount })\n      \n      queryClient.invalidateQueries({ queryKey: ['subdomains'] })\n      queryClient.invalidateQueries({ queryKey: ['targets'] })\n      queryClient.invalidateQueries({ queryKey: ['scans'] })\n      queryClient.invalidateQueries({ queryKey: ['organizations'] })\n    },\n    onError: (error: any) => {\n      toastMessages.dismiss('batch-delete-subdomains')\n      console.error('Failed to batch delete subdomains:', error)\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.asset.subdomain.delete.error')\n    },\n  })\n}\n\n// 更新子域名\nexport function useUpdateSubdomain() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: ({ id, data }: { id: number; data: { name?: string; description?: string } }) =>\n      SubdomainService.updateSubdomain({ id, ...data }),\n    onMutate: ({ id }) => {\n      toastMessages.loading('common.status.updating', {}, `update-subdomain-${id}`)\n    },\n    onSuccess: (_response, { id }) => {\n      toastMessages.dismiss(`update-subdomain-${id}`)\n      toastMessages.success('common.status.updateSuccess')\n      queryClient.invalidateQueries({ queryKey: ['subdomains'] })\n      queryClient.invalidateQueries({ queryKey: ['organizations'] })\n    },\n    onError: (error: any, { id }) => {\n      toastMessages.dismiss(`update-subdomain-${id}`)\n      console.error('Failed to update subdomain:', error)\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'common.status.updateFailed')\n    },\n  })\n}\n\n// 获取所有子域名列表\nexport function useAllSubdomains(\n  params: GetAllSubdomainsParams = {},\n  options?: { enabled?: boolean }\n) {\n  return useQuery({\n    queryKey: ['subdomains', 'all', { page: params.page, pageSize: params.pageSize }],\n    queryFn: () => SubdomainService.getAllSubdomains(params),\n    select: (response) => ({\n      domains: response.domains || [],\n      pagination: {\n        total: response.total || 0,\n        page: response.page || 1,\n        pageSize: response.pageSize || 10,\n        totalPages: response.totalPages || 0,\n      }\n    }),\n    enabled: options?.enabled !== undefined ? options.enabled : true,\n  })\n}\n\n// 获取目标的子域名列表\nexport function useTargetSubdomains(\n  targetId: number,\n  params?: { page?: number; pageSize?: number; filter?: string },\n  options?: { enabled?: boolean }\n) {\n  return useQuery({\n    queryKey: ['targets', targetId, 'subdomains', { page: params?.page, pageSize: params?.pageSize, filter: params?.filter }],\n    queryFn: () => SubdomainService.getSubdomainsByTargetId(targetId, params),\n    enabled: options?.enabled !== undefined ? options.enabled : !!targetId,\n    placeholderData: keepPreviousData,\n  })\n}\n\n// 获取扫描的子域名列表\nexport function useScanSubdomains(\n  scanId: number,\n  params?: { page?: number; pageSize?: number; filter?: string },\n  options?: { enabled?: boolean }\n) {\n  return useQuery({\n    queryKey: ['scans', scanId, 'subdomains', { page: params?.page, pageSize: params?.pageSize, filter: params?.filter }],\n    queryFn: () => SubdomainService.getSubdomainsByScanId(scanId, params),\n    enabled: options?.enabled !== undefined ? options.enabled : !!scanId,\n    placeholderData: keepPreviousData,\n  })\n}\n\n// 批量创建子域名（绑定到目标）\nexport function useBulkCreateSubdomains() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (data: { targetId: number; subdomains: string[] }) =>\n      SubdomainService.bulkCreateSubdomains(data.targetId, data.subdomains),\n    onMutate: async () => {\n      toastMessages.loading('common.status.batchCreating', {}, 'bulk-create-subdomains')\n    },\n    onSuccess: (response, { targetId }) => {\n      toastMessages.dismiss('bulk-create-subdomains')\n      const { createdCount, skippedCount = 0, invalidCount = 0, mismatchedCount = 0 } = response\n      const totalSkipped = skippedCount + invalidCount + mismatchedCount\n      \n      if (totalSkipped > 0) {\n        toastMessages.warning('toast.asset.subdomain.create.partialSuccess', { \n          success: createdCount, \n          skipped: totalSkipped \n        })\n      } else if (createdCount > 0) {\n        toastMessages.success('toast.asset.subdomain.create.success', { count: createdCount })\n      } else {\n        toastMessages.warning('toast.asset.subdomain.create.partialSuccess', { \n          success: 0, \n          skipped: 0 \n        })\n      }\n      \n      queryClient.invalidateQueries({ queryKey: ['targets', targetId, 'subdomains'] })\n      queryClient.invalidateQueries({ queryKey: ['subdomains'] })\n    },\n    onError: (error: any) => {\n      toastMessages.dismiss('bulk-create-subdomains')\n      console.error('Failed to bulk create subdomains:', error)\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.asset.subdomain.create.error')\n    },\n  })\n}\n"
  },
  {
    "path": "frontend/hooks/use-system-logs.ts",
    "content": "import { useEffect, useRef } from \"react\"\nimport { useQuery } from \"@tanstack/react-query\"\n\nimport { systemLogService } from \"@/services/system-log.service\"\nimport { useToastMessages } from \"@/lib/toast-helpers\"\n\n/**\n * 获取日志文件列表\n */\nexport function useLogFiles() {\n  return useQuery({\n    queryKey: [\"system\", \"logs\", \"files\"],\n    queryFn: () => systemLogService.getLogFiles(),\n    staleTime: 30 * 1000, // 30秒内不重新请求\n  })\n}\n\n/**\n * 获取日志内容\n */\nexport function useSystemLogs(options?: {\n  file?: string\n  lines?: number\n  enabled?: boolean\n  autoRefresh?: boolean\n}) {\n  const hadErrorRef = useRef(false)\n  const toastMessages = useToastMessages()\n\n  const query = useQuery({\n    queryKey: [\"system\", \"logs\", { file: options?.file ?? null, lines: options?.lines ?? null }],\n    queryFn: () => systemLogService.getSystemLogs({ file: options?.file, lines: options?.lines }),\n    enabled: options?.enabled ?? true,\n    refetchInterval: options?.autoRefresh ? 2000 : false,\n    refetchIntervalInBackground: options?.autoRefresh ?? false,\n    retry: false,\n  })\n\n  useEffect(() => {\n    if (query.isError && !hadErrorRef.current) {\n      hadErrorRef.current = true\n      toastMessages.error('toast.systemLog.fetch.error')\n    }\n\n    if (query.isSuccess && hadErrorRef.current) {\n      hadErrorRef.current = false\n      toastMessages.success('toast.systemLog.fetch.recovered')\n    }\n  }, [query.isError, query.isSuccess, toastMessages])\n\n  return query\n}\n"
  },
  {
    "path": "frontend/hooks/use-targets.ts",
    "content": "/**\n * Targets Hooks - 目标管理相关 hooks\n */\nimport { useQuery, useMutation, useQueryClient, keepPreviousData } from '@tanstack/react-query'\nimport { useToastMessages } from '@/lib/toast-helpers'\nimport { getErrorCode } from '@/lib/response-parser'\nimport {\n  getTargets,\n  getTargetById,\n  createTarget,\n  updateTarget,\n  deleteTarget,\n  batchDeleteTargets,\n  batchCreateTargets,\n  getTargetOrganizations,\n  linkTargetOrganizations,\n  unlinkTargetOrganizations,\n  getTargetEndpoints,\n  getTargetBlacklist,\n  updateTargetBlacklist,\n} from '@/services/target.service'\nimport type {\n  CreateTargetRequest,\n  UpdateTargetRequest,\n  BatchDeleteTargetsRequest,\n  BatchCreateTargetsRequest,\n} from '@/types/target.types'\n\n/**\n * 获取所有目标列表\n * 支持两种调用方式：\n * 1. useTargets(page, pageSize, organizationId) - 直接传参数\n * 2. useTargets({ page, pageSize, organizationId }) - 传对象（已废弃，为了兼容性保留）\n */\nexport function useTargets(\n  pageOrParams: number | { page?: number; pageSize?: number; organizationId?: number; search?: string } = 1,\n  pageSize = 10,\n  organizationId?: number,\n  search?: string\n) {\n  // 处理参数：支持对象参数或独立参数\n  let actualPage: number\n  let actualPageSize: number\n  let actualOrgId: number | undefined\n  let actualSearch: string | undefined\n\n  if (typeof pageOrParams === 'object') {\n    // 对象参数方式（兼容旧代码）\n    actualPage = pageOrParams.page || 1\n    actualPageSize = pageOrParams.pageSize || 10\n    actualOrgId = pageOrParams.organizationId\n    actualSearch = pageOrParams.search\n  } else {\n    // 独立参数方式\n    actualPage = pageOrParams\n    actualPageSize = pageSize\n    actualOrgId = organizationId\n    actualSearch = search\n  }\n\n  return useQuery({\n    queryKey: ['targets', { page: actualPage, pageSize: actualPageSize, organizationId: actualOrgId, search: actualSearch }],\n    queryFn: () => getTargets(actualPage, actualPageSize, actualSearch),\n    select: (response) => {\n      // 如果指定了 organizationId，过滤结果\n      if (actualOrgId) {\n        const filteredResults = response.results.filter(target => \n          target.organizations?.some(org => org.id === actualOrgId)\n        )\n        return {\n          ...response,\n          results: filteredResults,\n          total: filteredResults.length,\n          // 为兼容性添加额外字段\n          count: filteredResults.length,  // 兼容字段\n          targets: filteredResults,\n          page: actualPage,\n          pageSize: actualPageSize,\n          totalPages: Math.ceil(filteredResults.length / actualPageSize),\n        }\n      }\n      \n      // 否则直接返回原始响应，并添加兼容字段\n      return {\n        ...response,\n        targets: response.results,\n        // 后端返回 total，不是 count\n        count: response.total,  // 兼容字段，使用 total 值\n        // 保持原有字段\n        total: response.total,\n        page: response.page,\n        pageSize: response.pageSize,\n        totalPages: response.totalPages,\n      }\n    },\n    placeholderData: keepPreviousData,\n  })\n}\n\n/**\n * 获取单个目标详情\n */\nexport function useTarget(id: number, options?: { enabled?: boolean }) {\n  return useQuery({\n    queryKey: ['targets', id],\n    queryFn: () => getTargetById(id),\n    enabled: options?.enabled !== undefined ? options.enabled : !!id,\n  })\n}\n\n/**\n * 创建目标\n */\nexport function useCreateTarget() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (data: CreateTargetRequest) => createTarget(data),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: ['targets'] })\n      toastMessages.success('toast.target.create.success')\n    },\n    onError: (error: any) => {\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.target.create.error')\n    },\n  })\n}\n\n/**\n * 更新目标\n */\nexport function useUpdateTarget() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: ({ id, data }: { id: number; data: UpdateTargetRequest }) =>\n      updateTarget(id, data),\n    onSuccess: (_, variables) => {\n      queryClient.invalidateQueries({ queryKey: ['targets'] })\n      queryClient.invalidateQueries({ queryKey: ['targets', variables.id] })\n      toastMessages.success('toast.target.update.success')\n    },\n    onError: (error: any) => {\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.target.update.error')\n    },\n  })\n}\n\n/**\n * 删除目标（使用单独的 DELETE API）\n */\nexport function useDeleteTarget() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (id: number) => deleteTarget(id),\n    onMutate: (id) => {\n      toastMessages.loading('common.status.deleting', {}, `delete-target-${id}`)\n    },\n    onSuccess: (response, id) => {\n      toastMessages.dismiss(`delete-target-${id}`)\n      \n      // 显示删除成功信息\n      const { targetName } = response\n      toastMessages.success('toast.target.delete.success', { name: targetName })\n      \n      queryClient.invalidateQueries({ queryKey: ['targets'] })\n      queryClient.invalidateQueries({ queryKey: ['organizations'] })\n    },\n    onError: (error: any, id) => {\n      toastMessages.dismiss(`delete-target-${id}`)\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.target.delete.error')\n    },\n  })\n}\n\n/**\n * 批量删除目标\n */\nexport function useBatchDeleteTargets() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (data: BatchDeleteTargetsRequest) => batchDeleteTargets(data),\n    onSuccess: (response) => {\n      queryClient.invalidateQueries({ queryKey: ['targets'] })\n      toastMessages.success('toast.target.delete.bulkSuccess', { count: response.deletedCount })\n    },\n    onError: (error: any) => {\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.target.delete.error')\n    },\n  })\n}\n\n/**\n * 批量创建目标\n */\nexport function useBatchCreateTargets() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (data: BatchCreateTargetsRequest) => batchCreateTargets(data),\n    onSuccess: (response) => {\n      queryClient.invalidateQueries({ queryKey: ['targets'] })\n      queryClient.invalidateQueries({ queryKey: ['organizations'] })\n      toastMessages.success('toast.target.create.bulkSuccess', { count: response.createdCount || 0 })\n    },\n    onError: (error: any) => {\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.target.create.error')\n    },\n  })\n}\n\n/**\n * 获取目标的组织列表\n */\nexport function useTargetOrganizations(targetId: number, page = 1, pageSize = 10) {\n  return useQuery({\n    queryKey: ['targets', targetId, 'organizations', page, pageSize],\n    queryFn: () => getTargetOrganizations(targetId, page, pageSize),\n    enabled: !!targetId,\n  })\n}\n\n/**\n * 关联目标与组织\n */\nexport function useLinkTargetOrganizations() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: ({ targetId, organizationIds }: { targetId: number; organizationIds: number[] }) =>\n      linkTargetOrganizations(targetId, organizationIds),\n    onSuccess: (_, variables) => {\n      queryClient.invalidateQueries({ queryKey: ['targets', variables.targetId, 'organizations'] })\n      queryClient.invalidateQueries({ queryKey: ['targets', variables.targetId] })\n      toastMessages.success('toast.target.link.success')\n    },\n    onError: (error: any) => {\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.target.link.error')\n    },\n  })\n}\n\n/**\n * 取消目标与组织的关联\n */\nexport function useUnlinkTargetOrganizations() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: ({ targetId, organizationIds }: { targetId: number; organizationIds: number[] }) =>\n      unlinkTargetOrganizations(targetId, organizationIds),\n    onSuccess: (_, variables) => {\n      queryClient.invalidateQueries({ queryKey: ['targets', variables.targetId, 'organizations'] })\n      queryClient.invalidateQueries({ queryKey: ['targets', variables.targetId] })\n      toastMessages.success('toast.target.unlink.success')\n    },\n    onError: (error: any) => {\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.target.unlink.error')\n    },\n  })\n}\n\n/**\n * 获取目标的端点列表\n */\nexport function useTargetEndpoints(\n  targetId: number,\n  params?: {\n    page?: number\n    pageSize?: number\n    filter?: string\n  },\n  options?: {\n    enabled?: boolean\n  }\n) {\n  return useQuery({\n    queryKey: ['targets', 'detail', targetId, 'endpoints', {\n      page: params?.page,\n      pageSize: params?.pageSize,\n      filter: params?.filter,\n    }],\n    queryFn: () => getTargetEndpoints(targetId, params?.page || 1, params?.pageSize || 10, params?.filter),\n    enabled: options?.enabled !== undefined ? options.enabled : !!targetId,\n    select: (response: any) => {\n      // 后端使用通用分页格式：results/total/page/pageSize/totalPages\n      return {\n        endpoints: response.results || response.endpoints || [],\n        pagination: {\n          total: response.total || 0,\n          page: response.page || 1,\n          pageSize: response.pageSize || response.page_size || 10,\n          totalPages: response.totalPages || response.total_pages || 0,\n        }\n      }\n    },\n  })\n}\n\n/**\n * 获取目标的黑名单规则\n */\nexport function useTargetBlacklist(targetId: number) {\n  return useQuery({\n    queryKey: ['targets', targetId, 'blacklist'],\n    queryFn: () => getTargetBlacklist(targetId),\n    enabled: !!targetId,\n  })\n}\n\n/**\n * 更新目标的黑名单规则\n */\nexport function useUpdateTargetBlacklist() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: ({ targetId, patterns }: { targetId: number; patterns: string[] }) =>\n      updateTargetBlacklist(targetId, patterns),\n    onSuccess: (_, variables) => {\n      queryClient.invalidateQueries({ queryKey: ['targets', variables.targetId, 'blacklist'] })\n      toastMessages.success('toast.blacklist.save.success')\n    },\n    onError: (error: any) => {\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.blacklist.save.error')\n    },\n  })\n}\n\n"
  },
  {
    "path": "frontend/hooks/use-tools.ts",
    "content": "\"use client\"\n\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\"\nimport { useToastMessages } from '@/lib/toast-helpers'\nimport { getErrorCode } from '@/lib/response-parser'\nimport { ToolService } from \"@/services/tool.service\"\nimport type { Tool, GetToolsParams, CreateToolRequest, UpdateToolRequest } from \"@/types/tool.types\"\n\n// Query Keys\nexport const toolKeys = {\n  all: ['tools'] as const,\n  lists: () => [...toolKeys.all, 'list'] as const,\n  list: (params: GetToolsParams) => [...toolKeys.lists(), params] as const,\n}\n\n// 获取工具列表\nexport function useTools(params: GetToolsParams = {}) {\n  return useQuery({\n    queryKey: toolKeys.list(params),\n    queryFn: () => ToolService.getTools(params),\n    select: (response) => {\n      // RESTful 标准：直接返回数据\n      return {\n        tools: response.tools || [],\n        pagination: {\n          total: response.total || 0,\n          page: response.page || 1,\n          pageSize: response.pageSize || 10,\n          totalPages: response.totalPages || 0,\n        }\n      }\n    },\n  })\n}\n\n// 创建工具\nexport function useCreateTool() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (data: CreateToolRequest) => ToolService.createTool(data),\n    onMutate: async () => {\n      toastMessages.loading('common.status.creating', {}, 'create-tool')\n    },\n    onSuccess: () => {\n      toastMessages.dismiss('create-tool')\n      toastMessages.success('toast.tool.create.success')\n      queryClient.invalidateQueries({ \n        queryKey: toolKeys.all,\n        refetchType: 'active' \n      })\n    },\n    onError: (error: any) => {\n      toastMessages.dismiss('create-tool')\n      console.error('Failed to create tool:', error)\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.tool.create.error')\n    },\n  })\n}\n\n// 更新工具\nexport function useUpdateTool() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: ({ id, data }: { id: number; data: UpdateToolRequest }) => \n      ToolService.updateTool(id, data),\n    onMutate: async () => {\n      toastMessages.loading('common.status.updating', {}, 'update-tool')\n    },\n    onSuccess: () => {\n      toastMessages.dismiss('update-tool')\n      toastMessages.success('toast.tool.update.success')\n      queryClient.invalidateQueries({ \n        queryKey: toolKeys.all,\n        refetchType: 'active' \n      })\n    },\n    onError: (error: any) => {\n      toastMessages.dismiss('update-tool')\n      console.error('Failed to update tool:', error)\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.tool.update.error')\n    },\n  })\n}\n\n// 删除工具\nexport function useDeleteTool() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (id: number) => ToolService.deleteTool(id),\n    onMutate: async () => {\n      toastMessages.loading('common.status.deleting', {}, 'delete-tool')\n    },\n    onSuccess: () => {\n      toastMessages.dismiss('delete-tool')\n      toastMessages.success('toast.tool.delete.success')\n      queryClient.invalidateQueries({ \n        queryKey: toolKeys.all,\n        refetchType: 'active' \n      })\n    },\n    onError: (error: any) => {\n      toastMessages.dismiss('delete-tool')\n      console.error('Failed to delete tool:', error)\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.tool.delete.error')\n    },\n  })\n}\n"
  },
  {
    "path": "frontend/hooks/use-version.ts",
    "content": "import { useQuery } from '@tanstack/react-query'\nimport { VersionService } from '@/services/version.service'\n\nexport function useVersion() {\n  return useQuery({\n    queryKey: ['version'],\n    queryFn: () => VersionService.getVersion(),\n    staleTime: Infinity,\n  })\n}\n\nexport function useCheckUpdate() {\n  return useQuery({\n    queryKey: ['check-update'],\n    queryFn: () => VersionService.checkUpdate(),\n    enabled: false, // 手动触发\n    staleTime: 5 * 60 * 1000, // 5 分钟缓存\n  })\n}\n"
  },
  {
    "path": "frontend/hooks/use-vulnerabilities.ts",
    "content": "\"use client\"\n\nimport { useQuery, keepPreviousData } from \"@tanstack/react-query\"\n\nimport { VulnerabilityService } from \"@/services/vulnerability.service\"\nimport type {\n  Vulnerability,\n  VulnerabilitySeverity,\n  GetVulnerabilitiesParams,\n} from \"@/types/vulnerability.types\"\nimport type { PaginationInfo } from \"@/types/common.types\"\n\nexport const vulnerabilityKeys = {\n  all: [\"vulnerabilities\"] as const,\n  list: (params: GetVulnerabilitiesParams, filter?: string) =>\n    [...vulnerabilityKeys.all, \"list\", params, filter] as const,\n  byScan: (scanId: number, params: GetVulnerabilitiesParams, filter?: string) =>\n    [...vulnerabilityKeys.all, \"scan\", scanId, params, filter] as const,\n  byTarget: (targetId: number, params: GetVulnerabilitiesParams, filter?: string) =>\n    [...vulnerabilityKeys.all, \"target\", targetId, params, filter] as const,\n}\n\n/** 获取所有漏洞 */\nexport function useAllVulnerabilities(\n  params?: GetVulnerabilitiesParams,\n  options?: { enabled?: boolean },\n  filter?: string,\n) {\n  const defaultParams: GetVulnerabilitiesParams = {\n    page: 1,\n    pageSize: 10,\n    ...params,\n  }\n\n  return useQuery({\n    queryKey: vulnerabilityKeys.list(defaultParams, filter),\n    queryFn: () => VulnerabilityService.getAllVulnerabilities(defaultParams, filter),\n    enabled: options?.enabled ?? true,\n    select: (response: any) => {\n      const items = (response?.results ?? []) as any[]\n\n      const vulnerabilities: Vulnerability[] = items.map((item) => {\n        let severity = (item.severity || \"info\") as\n          | VulnerabilitySeverity\n          | \"unknown\"\n        if (severity === \"unknown\") {\n          severity = \"info\"\n        }\n\n        let cvssScore: number | undefined\n        if (typeof item.cvssScore === \"number\") {\n          cvssScore = item.cvssScore\n        } else if (item.cvssScore != null) {\n          const num = Number(item.cvssScore)\n          cvssScore = Number.isNaN(num) ? undefined : num\n        }\n\n        const createdAt: string = item.createdAt\n\n        return {\n          id: item.id,\n          vulnType: item.vulnType || \"unknown\",\n          url: item.url || \"\",\n          description: item.description || \"\",\n          severity: severity as VulnerabilitySeverity,\n          source: item.source || \"scan\",\n          cvssScore,\n          rawOutput: item.rawOutput || {},\n          createdAt,\n        }\n      })\n\n      const pagination: PaginationInfo = {\n        total: response?.total ?? 0,\n        page: response?.page ?? defaultParams.page ?? 1,\n        pageSize:\n          response?.pageSize ??\n          response?.page_size ??\n          defaultParams.pageSize ??\n          10,\n        totalPages:\n          response?.totalPages ??\n          response?.total_pages ??\n          0,\n      }\n\n      return { vulnerabilities, pagination }\n    },\n    placeholderData: keepPreviousData,\n  })\n}\n\nexport function useScanVulnerabilities(\n  scanId: number,\n  params?: GetVulnerabilitiesParams,\n  options?: { enabled?: boolean },\n  filter?: string,\n) {\n  const defaultParams: GetVulnerabilitiesParams = {\n    page: 1,\n    pageSize: 10,\n    ...params,\n  }\n\n  return useQuery({\n    queryKey: vulnerabilityKeys.byScan(scanId, defaultParams, filter),\n    queryFn: () =>\n      VulnerabilityService.getVulnerabilitiesByScanId(scanId, defaultParams, filter),\n    enabled: options?.enabled !== undefined ? options.enabled : !!scanId,\n    select: (response: any) => {\n      const items = (response?.results ?? []) as any[]\n\n      const vulnerabilities: Vulnerability[] = items.map((item) => {\n        let severity = (item.severity || \"info\") as\n          | VulnerabilitySeverity\n          | \"unknown\"\n        if (severity === \"unknown\") {\n          severity = \"info\"\n        }\n\n        let cvssScore: number | undefined\n        if (typeof item.cvssScore === \"number\") {\n          cvssScore = item.cvssScore\n        } else if (item.cvssScore != null) {\n          const num = Number(item.cvssScore)\n          cvssScore = Number.isNaN(num) ? undefined : num\n        }\n\n        const createdAt: string = item.createdAt\n\n        return {\n          id: item.id,\n          vulnType: item.vulnType || \"unknown\",\n          url: item.url || \"\",\n          description: item.description || \"\",\n          severity: severity as VulnerabilitySeverity,\n          source: item.source || \"scan\",\n          cvssScore,\n          rawOutput: item.rawOutput || {},\n          createdAt,\n        }\n      })\n\n      const pagination: PaginationInfo = {\n        total: response?.total ?? 0,\n        page: response?.page ?? defaultParams.page ?? 1,\n        pageSize:\n          response?.pageSize ??\n          response?.page_size ??\n          defaultParams.pageSize ??\n          10,\n        totalPages:\n          response?.totalPages ??\n          response?.total_pages ??\n          0,\n      }\n\n      return { vulnerabilities, pagination }\n    },\n    placeholderData: keepPreviousData,\n  })\n}\n\nexport function useTargetVulnerabilities(\n  targetId: number,\n  params?: GetVulnerabilitiesParams,\n  options?: { enabled?: boolean },\n  filter?: string,\n) {\n  const defaultParams: GetVulnerabilitiesParams = {\n    page: 1,\n    pageSize: 10,\n    ...params,\n  }\n\n  return useQuery({\n    queryKey: vulnerabilityKeys.byTarget(targetId, defaultParams, filter),\n    queryFn: () =>\n      VulnerabilityService.getVulnerabilitiesByTargetId(targetId, defaultParams, filter),\n    enabled: options?.enabled !== undefined ? options.enabled : !!targetId,\n    select: (response: any) => {\n      const items = (response?.results ?? []) as any[]\n\n      const vulnerabilities: Vulnerability[] = items.map((item) => {\n        let severity = (item.severity || \"info\") as\n          | VulnerabilitySeverity\n          | \"unknown\"\n        if (severity === \"unknown\") {\n          severity = \"info\"\n        }\n\n        let cvssScore: number | undefined\n        if (typeof item.cvssScore === \"number\") {\n          cvssScore = item.cvssScore\n        } else if (item.cvssScore != null) {\n          const num = Number(item.cvssScore)\n          cvssScore = Number.isNaN(num) ? undefined : num\n        }\n\n        const createdAt: string = item.createdAt\n\n        return {\n          id: item.id,\n          vulnType: item.vulnType || \"unknown\",\n          url: item.url || \"\",\n          description: item.description || \"\",\n          severity: severity as VulnerabilitySeverity,\n          source: item.source || \"scan\",\n          target: item.target ?? targetId,\n          cvssScore,\n          rawOutput: item.rawOutput || {},\n          createdAt,\n        }\n      })\n\n      const pagination: PaginationInfo = {\n        total: response?.total ?? 0,\n        page: response?.page ?? defaultParams.page ?? 1,\n        pageSize:\n          response?.pageSize ??\n          response?.page_size ??\n          defaultParams.pageSize ??\n          10,\n        totalPages:\n          response?.totalPages ??\n          response?.total_pages ??\n          0,\n      }\n\n      return { vulnerabilities, pagination }\n    },\n    placeholderData: keepPreviousData,\n  })\n}\n"
  },
  {
    "path": "frontend/hooks/use-websites.ts",
    "content": "import { useQuery, useMutation, useQueryClient, keepPreviousData } from '@tanstack/react-query'\nimport { useToastMessages } from '@/lib/toast-helpers'\nimport { getErrorCode } from '@/lib/response-parser'\nimport { WebsiteService } from '@/services/website.service'\nimport type { WebSite, WebSiteListResponse } from '@/types/website.types'\n\n// API 服务函数\nconst websiteService = {\n  // 获取目标的网站列表\n  getTargetWebSites: async (\n    targetId: number,\n    params: { page: number; pageSize: number; filter?: string }\n  ): Promise<WebSiteListResponse> => {\n    const filterParam = params.filter ? `&filter=${encodeURIComponent(params.filter)}` : ''\n    const response = await fetch(\n      `/api/targets/${targetId}/websites/?page=${params.page}&pageSize=${params.pageSize}${filterParam}`\n    )\n    if (!response.ok) {\n      throw new Error('获取网站列表失败')\n    }\n    return response.json()\n  },\n\n  // 获取扫描的网站列表\n  getScanWebSites: async (\n    scanId: number,\n    params: { page: number; pageSize: number; filter?: string }\n  ): Promise<WebSiteListResponse> => {\n    const filterParam = params.filter ? `&filter=${encodeURIComponent(params.filter)}` : ''\n    const response = await fetch(\n      `/api/scans/${scanId}/websites/?page=${params.page}&pageSize=${params.pageSize}${filterParam}`\n    )\n    if (!response.ok) {\n      throw new Error('获取网站列表失败')\n    }\n    return response.json()\n  },\n\n  // 批量删除网站（支持单个或多个）\n  bulkDeleteWebSites: async (ids: number[]): Promise<{\n    message: string\n    deletedCount: number\n    requestedIds: number[]\n    cascadeDeleted: Record<string, number>\n  }> => {\n    const response = await fetch('/api/websites/bulk-delete/', {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({ ids }),\n    })\n    if (!response.ok) {\n      throw new Error('批量删除网站失败')\n    }\n    return response.json()\n  },\n\n  // 删除单个网站（使用单独的 DELETE API）\n  deleteWebSite: async (websiteId: number): Promise<{\n    message: string\n    websiteId: number\n    websiteUrl: string\n    deletedCount: number\n    deletedWebSites: string[]\n    detail: {\n      phase1: string\n      phase2: string\n    }\n  }> => {\n    const response = await fetch(`/api/websites/${websiteId}/`, {\n      method: 'DELETE',\n    })\n    if (!response.ok) {\n      throw new Error('删除网站失败')\n    }\n    return response.json()\n  },\n}\n\n// 获取目标的网站列表\nexport function useTargetWebSites(\n  targetId: number,\n  params: { page: number; pageSize: number; filter?: string },\n  options?: { enabled?: boolean }\n) {\n  return useQuery({\n    queryKey: ['target-websites', targetId, params],\n    queryFn: () => websiteService.getTargetWebSites(targetId, params),\n    enabled: options?.enabled ?? true,\n    placeholderData: keepPreviousData,\n  })\n}\n\n// 获取扫描的网站列表\nexport function useScanWebSites(\n  scanId: number,\n  params: { page: number; pageSize: number; filter?: string },\n  options?: { enabled?: boolean }\n) {\n  return useQuery({\n    queryKey: ['scan-websites', scanId, params],\n    queryFn: () => websiteService.getScanWebSites(scanId, params),\n    enabled: options?.enabled ?? true,\n    placeholderData: keepPreviousData,\n  })\n}\n\n// 删除单个网站（使用单独的 DELETE API）\nexport function useDeleteWebSite() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: websiteService.deleteWebSite,\n    onMutate: (id) => {\n      toastMessages.loading('common.status.deleting', {}, `delete-website-${id}`)\n    },\n    onSuccess: (response, id) => {\n      toastMessages.dismiss(`delete-website-${id}`)\n      toastMessages.success('toast.asset.website.delete.success')\n      \n      queryClient.invalidateQueries({ queryKey: ['target-websites'] })\n      queryClient.invalidateQueries({ queryKey: ['scan-websites'] })\n      queryClient.invalidateQueries({ queryKey: ['targets'] })\n      queryClient.invalidateQueries({ queryKey: ['scans'] })\n    },\n    onError: (error: any, id) => {\n      toastMessages.dismiss(`delete-website-${id}`)\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.asset.website.delete.error')\n    },\n  })\n}\n\n// 批量删除网站（使用统一的批量删除接口）\nexport function useBulkDeleteWebSites() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: websiteService.bulkDeleteWebSites,\n    onMutate: () => {\n      toastMessages.loading('common.status.batchDeleting', {}, 'bulk-delete-websites')\n    },\n    onSuccess: (response) => {\n      toastMessages.dismiss('bulk-delete-websites')\n      toastMessages.success('toast.asset.website.delete.bulkSuccess', { count: response.deletedCount })\n      \n      queryClient.invalidateQueries({ queryKey: ['target-websites'] })\n      queryClient.invalidateQueries({ queryKey: ['scan-websites'] })\n      queryClient.invalidateQueries({ queryKey: ['targets'] })\n      queryClient.invalidateQueries({ queryKey: ['scans'] })\n    },\n    onError: (error: any) => {\n      toastMessages.dismiss('bulk-delete-websites')\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.asset.website.delete.error')\n    },\n  })\n}\n\n\n// 批量创建网站（绑定到目标）\nexport function useBulkCreateWebsites() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (data: { targetId: number; urls: string[] }) =>\n      WebsiteService.bulkCreateWebsites(data.targetId, data.urls),\n    onMutate: async () => {\n      toastMessages.loading('common.status.batchCreating', {}, 'bulk-create-websites')\n    },\n    onSuccess: (response, { targetId }) => {\n      toastMessages.dismiss('bulk-create-websites')\n      const { createdCount } = response\n      \n      if (createdCount > 0) {\n        toastMessages.success('toast.asset.website.create.success', { count: createdCount })\n      } else {\n        toastMessages.warning('toast.asset.website.create.partialSuccess', { success: 0, skipped: 0 })\n      }\n      \n      queryClient.invalidateQueries({ queryKey: ['target-websites', targetId] })\n      queryClient.invalidateQueries({ queryKey: ['scan-websites'] })\n    },\n    onError: (error: any) => {\n      toastMessages.dismiss('bulk-create-websites')\n      console.error('Failed to bulk create websites:', error)\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.asset.website.create.error')\n    },\n  })\n}\n"
  },
  {
    "path": "frontend/hooks/use-wordlists.ts",
    "content": "\"use client\"\n\nimport { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\"\nimport { useToastMessages } from '@/lib/toast-helpers'\nimport { getErrorCode } from '@/lib/response-parser'\nimport {\n  getWordlists,\n  uploadWordlist,\n  deleteWordlist,\n  getWordlistContent,\n  updateWordlistContent,\n} from \"@/services/wordlist.service\"\nimport type { GetWordlistsResponse, Wordlist } from \"@/types/wordlist.types\"\n\n// Get wordlist list\nexport function useWordlists(params?: { page?: number; pageSize?: number }) {\n  const page = params?.page ?? 1\n  const pageSize = params?.pageSize ?? 10\n\n  return useQuery<GetWordlistsResponse>({\n    queryKey: [\"wordlists\", { page, pageSize }],\n    queryFn: () => getWordlists(page, pageSize),\n  })\n}\n\n// Upload wordlist\nexport function useUploadWordlist() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation<{}, Error, { name: string; description?: string; file: File }>({\n    mutationFn: (payload) => uploadWordlist(payload),\n    onMutate: () => {\n      toastMessages.loading('common.status.uploading', {}, 'upload-wordlist')\n    },\n    onSuccess: () => {\n      toastMessages.dismiss('upload-wordlist')\n      toastMessages.success('toast.wordlist.upload.success')\n      queryClient.invalidateQueries({ queryKey: [\"wordlists\"] })\n    },\n    onError: (error: any) => {\n      toastMessages.dismiss('upload-wordlist')\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.wordlist.upload.error')\n    },\n  })\n}\n\n// Delete wordlist\nexport function useDeleteWordlist() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation<void, Error, number>({\n    mutationFn: (id: number) => deleteWordlist(id),\n    onMutate: (id) => {\n      toastMessages.loading('common.status.deleting', {}, `delete-wordlist-${id}`)\n    },\n    onSuccess: (_data, id) => {\n      toastMessages.dismiss(`delete-wordlist-${id}`)\n      toastMessages.success('toast.wordlist.delete.success')\n      queryClient.invalidateQueries({ queryKey: [\"wordlists\"] })\n    },\n    onError: (error: any, id) => {\n      toastMessages.dismiss(`delete-wordlist-${id}`)\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.wordlist.delete.error')\n    },\n  })\n}\n\n// Get wordlist content\nexport function useWordlistContent(id: number | null) {\n  return useQuery<string>({\n    queryKey: [\"wordlist-content\", id],\n    queryFn: () => getWordlistContent(id!),\n    enabled: id !== null,\n  })\n}\n\n// Update wordlist content\nexport function useUpdateWordlistContent() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation<Wordlist, Error, { id: number; content: string }>({\n    mutationFn: ({ id, content }) => updateWordlistContent(id, content),\n    onMutate: () => {\n      toastMessages.loading('common.actions.saving', {}, 'update-wordlist-content')\n    },\n    onSuccess: (data) => {\n      toastMessages.dismiss('update-wordlist-content')\n      toastMessages.success('toast.wordlist.update.success')\n      queryClient.invalidateQueries({ queryKey: [\"wordlists\"] })\n      queryClient.invalidateQueries({ queryKey: [\"wordlist-content\", data.id] })\n    },\n    onError: (error: any) => {\n      toastMessages.dismiss('update-wordlist-content')\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.wordlist.update.error')\n    },\n  })\n}\n"
  },
  {
    "path": "frontend/hooks/use-workers.ts",
    "content": "/**\n * Worker 节点管理 Hooks\n */\n\nimport { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'\nimport { workerService } from '@/services/worker.service'\nimport type { CreateWorkerRequest, UpdateWorkerRequest } from '@/types/worker.types'\nimport { useToastMessages } from '@/lib/toast-helpers'\nimport { getErrorCode } from '@/lib/response-parser'\n\n// Query Keys\nexport const workerKeys = {\n  all: ['workers'] as const,\n  lists: () => [...workerKeys.all, 'list'] as const,\n  list: (page: number, pageSize: number) => [...workerKeys.lists(), { page, pageSize }] as const,\n  details: () => [...workerKeys.all, 'detail'] as const,\n  detail: (id: number) => [...workerKeys.details(), id] as const,\n}\n\n/**\n * 获取 Worker 列表\n */\nexport function useWorkers(page = 1, pageSize = 10) {\n  return useQuery({\n    queryKey: workerKeys.list(page, pageSize),\n    queryFn: () => workerService.getWorkers(page, pageSize),\n  })\n}\n\n/**\n * 获取单个 Worker 详情\n */\nexport function useWorker(id: number) {\n  return useQuery({\n    queryKey: workerKeys.detail(id),\n    queryFn: () => workerService.getWorker(id),\n    enabled: id > 0,\n  })\n}\n\n/**\n * 创建 Worker\n */\nexport function useCreateWorker() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (data: CreateWorkerRequest) => workerService.createWorker(data),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: workerKeys.lists() })\n      toastMessages.success('toast.worker.create.success')\n    },\n    onError: (error: any) => {\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.worker.create.error')\n    },\n  })\n}\n\n/**\n * 更新 Worker\n */\nexport function useUpdateWorker() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: ({ id, data }: { id: number; data: UpdateWorkerRequest }) =>\n      workerService.updateWorker(id, data),\n    onSuccess: (_: unknown, { id }: { id: number; data: UpdateWorkerRequest }) => {\n      queryClient.invalidateQueries({ queryKey: workerKeys.lists() })\n      queryClient.invalidateQueries({ queryKey: workerKeys.detail(id) })\n      toastMessages.success('toast.worker.update.success')\n    },\n    onError: (error: any) => {\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.worker.update.error')\n    },\n  })\n}\n\n/**\n * 删除 Worker\n */\nexport function useDeleteWorker() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (id: number) => workerService.deleteWorker(id),\n    onSuccess: () => {\n      queryClient.invalidateQueries({ \n        queryKey: workerKeys.lists(),\n        refetchType: 'active',\n      })\n      toastMessages.success('toast.worker.delete.success')\n    },\n    onError: (error: any) => {\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.worker.delete.error')\n    },\n  })\n}\n\n/**\n * 部署 Worker\n */\nexport function useDeployWorker() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (id: number) => workerService.deployWorker(id),\n    onSuccess: (_: unknown, id: number) => {\n      queryClient.invalidateQueries({ queryKey: workerKeys.detail(id) })\n      queryClient.invalidateQueries({ queryKey: workerKeys.lists() })\n      toastMessages.success('toast.worker.deploy.success')\n    },\n    onError: (error: any) => {\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.worker.deploy.error')\n    },\n  })\n}\n\n/**\n * 重启 Worker\n */\nexport function useRestartWorker() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (id: number) => workerService.restartWorker(id),\n    onSuccess: (_: unknown, id: number) => {\n      queryClient.invalidateQueries({ queryKey: workerKeys.detail(id) })\n      queryClient.invalidateQueries({ queryKey: workerKeys.lists() })\n      toastMessages.success('toast.worker.restart.success')\n    },\n    onError: (error: any) => {\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.worker.restart.error')\n    },\n  })\n}\n\n/**\n * 停止 Worker\n */\nexport function useStopWorker() {\n  const queryClient = useQueryClient()\n  const toastMessages = useToastMessages()\n\n  return useMutation({\n    mutationFn: (id: number) => workerService.stopWorker(id),\n    onSuccess: (_: unknown, id: number) => {\n      queryClient.invalidateQueries({ queryKey: workerKeys.detail(id) })\n      queryClient.invalidateQueries({ queryKey: workerKeys.lists() })\n      toastMessages.success('toast.worker.stop.success')\n    },\n    onError: (error: any) => {\n      toastMessages.errorFromCode(getErrorCode(error?.response?.data), 'toast.worker.stop.error')\n    },\n  })\n}\n"
  },
  {
    "path": "frontend/i18n/config.ts",
    "content": "// Internationalization configuration file\n\nexport const locales = ['zh', 'en'] as const;\nexport type Locale = (typeof locales)[number];\n\nexport const defaultLocale: Locale = 'zh';\n\nexport const localeNames: Record<Locale, string> = {\n  zh: '中文',\n  en: 'English',\n};\n\n// HTML lang attribute corresponding to languages\nexport const localeHtmlLang: Record<Locale, string> = {\n  zh: 'zh-CN',\n  en: 'en',\n};\n"
  },
  {
    "path": "frontend/i18n/navigation.ts",
    "content": "// Internationalization navigation helper functions\nimport { createNavigation } from 'next-intl/navigation';\nimport { locales, defaultLocale } from './config';\n\n// Create internationalization navigation tools\nexport const { Link, redirect, usePathname, useRouter, getPathname } = createNavigation({\n  locales,\n  defaultLocale,\n});\n"
  },
  {
    "path": "frontend/i18n/request.ts",
    "content": "// Server-side request configuration\nimport { getRequestConfig } from 'next-intl/server';\nimport { hasLocale } from 'next-intl';\nimport { locales, defaultLocale } from './config';\n\nexport default getRequestConfig(async ({ requestLocale }) => {\n  // Get request language\n  let locale = await requestLocale;\n\n  // Validate if language is supported, use default language if not supported\n  if (!locale || !hasLocale(locales, locale)) {\n    locale = defaultLocale;\n  }\n\n  return {\n    locale,\n    messages: (await import(`../messages/${locale}.json`)).default,\n  };\n});\n"
  },
  {
    "path": "frontend/lib/api-client.ts",
    "content": "/**\n * API client configuration file\n * \n * Core functionality:\n * 1. Unified HTTP request wrapper\n * 2. Unified error handling\n * 3. Request/response logging\n * \n * Naming convention explanation:\n * - Frontend (TypeScript/React): camelCase\n *   Example: pageSize, createdAt, organizationId\n * \n * - Backend (Django/Python): snake_case (model fields)\n *   Example: page_size, created_at, organization_id\n * \n * - API JSON format: camelCase (automatically converted by backend)\n *   Example: pageSize, createdAt, organizationId\n * \n * Naming conversion mechanism:\n * ══════════════════════════════════════════════════════════════════════\n * 【Backend Processing】Django REST Framework + djangorestframework-camel-case\n * ══════════════════════════════════════════════════════════════════════\n * \n * 1. Frontend sends request (camelCase):\n *    { pageSize: 10, sortBy: \"name\" }\n *    \n * 2. Django receives and automatically converts to snake_case:\n *    { page_size: 10, sort_by: \"name\" }\n *    \n * 3. Django processes backend logic (using snake_case model fields)\n * \n * 4. Django returns data automatically converted to camelCase:\n *    { pageSize: 10, createdAt: \"2024-01-01\" }\n *    \n * 5. Frontend uses directly (camelCase):\n *    response.data.pageSize  // [OK] Use directly\n * \n * [NOTE] Key point: Naming conversion is handled uniformly by backend, frontend needs no conversion\n */\n\nimport axios, { AxiosRequestConfig } from 'axios';\n\n/**\n * Create axios instance\n * Configure base URL, timeout and default headers\n */\nconst apiClient = axios.create({\n  baseURL: '/api',  // API base path\n  timeout: 30000,      // 30 second timeout\n  headers: {\n    'Content-Type': 'application/json',\n  },\n  withCredentials: true,  // Send cookies with requests (required for session auth)\n});\n\n/**\n * Request interceptor: Handle preparation work before request\n * \n * Workflow:\n * 1. Ensure URL format is correct (Django requires trailing slash)\n * 2. Log request (for development debugging)\n * \n * Notes:\n * - Naming conversion is handled by backend, frontend needs no conversion\n * - Frontend can directly use camelCase naming\n */\napiClient.interceptors.request.use(\n  (config) => {\n    // Only output debug logs in development environment\n    if (process.env.NODE_ENV === 'development') {\n      console.log('[REQUEST] API Request:', {\n        method: config.method?.toUpperCase(),\n        url: config.url,\n        baseURL: config.baseURL,\n        fullURL: `${config.baseURL}${config.url}`,\n        data: config.data,\n        params: config.params\n      });\n    }\n\n    return config;\n  },\n  (error) => {\n    if (process.env.NODE_ENV === 'development') {\n      console.error('[ERROR] Request Error:', error);\n    }\n    return Promise.reject(error);\n  }\n);\n\n/**\n * Response interceptor: Handle response data\n * \n * Workflow:\n * 1. Log response (for development debugging)\n * 2. Return response data (backend already converted to camelCase)\n * \n * Notes:\n * - Backend has automatically converted snake_case to camelCase\n * - Frontend can use directly, no additional conversion needed\n */\napiClient.interceptors.response.use(\n  (response) => {\n    // Only output debug logs in development environment\n    if (process.env.NODE_ENV === 'development') {\n      console.log('[RESPONSE] API Response:', {\n        status: response.status,\n        statusText: response.statusText,\n        url: response.config.url,\n        data: response.data\n      });\n    }\n\n    return response;\n  },\n  (error) => {\n    // Only output error logs in development environment\n    if (process.env.NODE_ENV === 'development') {\n      // Check if it's an Axios error\n      if (axios.isAxiosError(error)) {\n        console.error('[ERROR] API Error:', {\n          status: error.response?.status,\n          statusText: error.response?.statusText,\n          url: error.config?.url,\n          method: error.config?.method,\n          data: error.response?.data,\n          message: error.message,\n          code: error.code\n        });\n      } else if (error instanceof Error) {\n        // Regular Error object\n        console.error('[ERROR] API Error:', error.message, error.stack);\n      } else {\n        // Unknown error type\n        console.error('[ERROR] API Error: Unknown error', String(error));\n      }\n    }\n\n    // Handle 401 Unauthorized: redirect to login page\n    if (axios.isAxiosError(error) && error.response?.status === 401) {\n      const url = error.config?.url || '';\n      // Exclude auth-related APIs to avoid redirect loops\n      const isAuthApi = url.includes('/auth/login') || \n                        url.includes('/auth/logout') || \n                        url.includes('/auth/me');\n      \n      if (!isAuthApi && typeof window !== 'undefined') {\n        // Clear any cached state and redirect to login\n        window.location.href = '/login';\n      }\n    }\n\n    return Promise.reject(error);\n  }\n);\n\n// Export default axios instance (generally not used directly)\nexport default apiClient;\n\n/**\n * Export common HTTP methods\n * \n * Usage examples:\n * \n * 1. GET request:\n *    api.get('/organizations', { \n *      params: { pageSize: 10, sortBy: 'name' }  // Use camelCase\n *    })\n *    Backend receives: page_size=10&sort_by=name (automatically converted)\n * \n * 2. POST request:\n *    api.post('/organizations/create', {\n *      organizationName: 'test',  // Use camelCase\n *      createdAt: '2024-01-01'\n *    })\n *    Backend receives: organization_name, created_at (automatically converted)\n * \n * 3. Response data (already camelCase):\n *    const response = await api.get('/organizations')\n *    response.data.pageSize  // [OK] Use camelCase directly\n *    response.data.createdAt // [OK] Use camelCase directly\n * \n * Type parameters:\n * - T: Response data type (optional)\n * - config: axios configuration object (optional)\n */\nexport const api = {\n  /**\n   * GET request\n   * @param url - Request path (relative to baseURL)\n   * @param config - axios config, recommend using params for query parameters\n   * @returns Promise<AxiosResponse<T>>\n   */\n  get: <T = unknown>(url: string, config?: AxiosRequestConfig) => apiClient.get<T>(url, config),\n\n  /**\n   * POST request\n   * @param url - Request path (relative to baseURL)\n   * @param data - Request body data (will be automatically converted to snake_case)\n   * @param config - axios config (optional)\n   * @returns Promise<AxiosResponse<T>>\n   */\n  post: <T = unknown>(url: string, data?: unknown, config?: AxiosRequestConfig) => apiClient.post<T>(url, data, config),\n\n  /**\n   * PUT request\n   * @param url - Request path (relative to baseURL)\n   * @param data - Request body data (will be automatically converted to snake_case)\n   * @param config - axios config (optional)\n   * @returns Promise<AxiosResponse<T>>\n   */\n  put: <T = unknown>(url: string, data?: unknown, config?: AxiosRequestConfig) => apiClient.put<T>(url, data, config),\n\n  /**\n   * PATCH request (partial update)\n   * @param url - Request path (relative to baseURL)\n   * @param data - Request body data (will be automatically converted to snake_case)\n   * @param config - axios config (optional)\n   * @returns Promise<AxiosResponse<T>>\n   */\n  patch: <T = unknown>(url: string, data?: unknown, config?: AxiosRequestConfig) => apiClient.patch<T>(url, data, config),\n\n  /**\n   * DELETE request\n   * @param url - Request path (relative to baseURL)\n   * @param config - axios config (optional)\n   * @returns Promise<AxiosResponse<T>>\n   */\n  delete: <T = unknown>(url: string, config?: AxiosRequestConfig) => apiClient.delete<T>(url, config),\n};\n\n/**\n * Error handling utility function\n * \n * Function: Extract user-friendly error messages from error objects\n * \n * Error priority:\n * 1. Request cancelled\n * 2. Request timeout\n * 3. Backend returned error message\n * 4. axios error message\n * 5. Unknown error\n * \n * Usage example:\n * try {\n *   await api.get('/organizations')\n * } catch (error) {\n *   const message = getErrorMessage(error)\n *   toast.error(message)\n * }\n * \n * @param error - Error object (can be any type)\n * @returns User-friendly error message string\n */\nexport const getErrorMessage = (error: unknown): string => {\n  // Request was cancelled (user actively cancelled or component unmounted)\n  if (axios.isCancel(error)) {\n    return 'Request has been cancelled';\n  }\n\n  // Type guard: Check if it's an error object\n  const err = error as {\n    code?: string;\n    response?: { data?: { message?: string; error?: string; detail?: string } };\n    message?: string\n  }\n\n  // Request timeout (over 30 seconds)\n  if (err.code === 'ECONNABORTED') {\n    return 'Request timeout, please try again later';\n  }\n\n  // Backend returned error message (supports multiple formats)\n  if (err.response?.data?.error) {\n    return err.response.data.error;\n  }\n  if (err.response?.data?.message) {\n    return err.response.data.message;\n  }\n  if (err.response?.data?.detail) {\n    return err.response.data.detail;\n  }\n\n  // axios own error message\n  if (err.message) {\n    return err.message;\n  }\n\n  // Fallback error message\n  return 'Unknown error occurred';\n};\n"
  },
  {
    "path": "frontend/lib/date-utils.ts",
    "content": "/**\n * Date formatting utilities with locale support\n * Maps next-intl locale to toLocaleString locale\n */\n\n/**\n * Maps next-intl locale (zh, en) to toLocaleString locale (zh-CN, en-US)\n */\nexport function getDateLocale(locale: string): string {\n  const localeMap: Record<string, string> = {\n    zh: \"zh-CN\",\n    en: \"en-US\",\n  }\n  return localeMap[locale] || \"en-US\"\n}\n\n/**\n * Format date with locale support\n * @param dateString - ISO date string or Date object\n * @param locale - next-intl locale (zh, en)\n * @param options - Intl.DateTimeFormatOptions\n */\nexport function formatDateByLocale(\n  dateString: string | Date | null | undefined,\n  locale: string,\n  options?: Intl.DateTimeFormatOptions\n): string {\n  if (!dateString) return \"-\"\n  try {\n    const date = typeof dateString === \"string\" ? new Date(dateString) : dateString\n    if (isNaN(date.getTime())) return \"-\"\n    \n    const defaultOptions: Intl.DateTimeFormatOptions = {\n      year: \"numeric\",\n      month: \"numeric\",\n      day: \"numeric\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\",\n      hour12: false,\n    }\n    \n    return date.toLocaleString(getDateLocale(locale), options || defaultOptions)\n  } catch {\n    return typeof dateString === \"string\" ? dateString : \"-\"\n  }\n}\n"
  },
  {
    "path": "frontend/lib/domain-validator.ts",
    "content": "import validator from 'validator'\nimport { parse as parseDomain } from 'tldts'\n\n/**\n * Domain validation utility class\n * Uses validator.js for reliable domain validation\n */\n\nexport interface DomainValidationResult {\n  isValid: boolean\n  error?: string\n}\n\nexport class DomainValidator {\n  /**\n   * Validate domain format (e.g. example.com)\n   * @param domain - Domain string to validate\n   * @returns Validation result\n   */\n  static validateDomain(domain: string): DomainValidationResult {\n    // 1. Check if empty\n    if (!domain || domain.trim().length === 0) {\n      return {\n        isValid: false,\n        error: 'Domain cannot be empty'\n      }\n    }\n\n    const trimmedDomain = domain.trim()\n\n    // 2. Check if contains spaces\n    if (trimmedDomain.includes(' ')) {\n      return {\n        isValid: false,\n        error: 'Domain cannot contain spaces'\n      }\n    }\n\n    // 3. Check length (using validator package)\n    if (!validator.isLength(trimmedDomain, { min: 1, max: 253 })) {\n      return {\n        isValid: false,\n        error: 'Domain length cannot exceed 253 characters'\n      }\n    }\n\n    // 4. Use tldts for domain semantic validation (priority)\n    const info = parseDomain(trimmedDomain)\n    if (!info.domain || info.isIp === true) {\n      return {\n        isValid: false,\n        error: 'Invalid domain format'\n      }\n    }\n\n    // 5. Use validator.js isFQDN as fallback to ensure strictness\n    if (!validator.isFQDN(trimmedDomain, {\n      require_tld: true,\n      allow_underscores: false,\n      allow_trailing_dot: false,\n      allow_numeric_tld: false,\n      allow_wildcard: false,\n    })) {\n      return {\n        isValid: false,\n        error: 'Invalid domain format'\n      }\n    }\n\n    return { isValid: true }\n  }\n\n  /**\n   * Validate subdomain format (e.g. www.example.com, api.test.org)\n   * @param subdomain - Subdomain string to validate\n   * @returns Validation result\n   */\n  static validateSubdomain(subdomain: string): DomainValidationResult {\n    // First perform basic domain validation\n    const basicValidation = this.validateDomain(subdomain)\n    if (!basicValidation.isValid) {\n      return basicValidation\n    }\n\n    // Subdomain must contain at least 3 parts (e.g. www.example.com)\n    const labels = subdomain.trim().split('.')\n    if (labels.length < 3) {\n      return {\n        isValid: false,\n        error: 'Subdomain must contain at least 3 parts (e.g. www.example.com)'\n      }\n    }\n\n    return {\n      isValid: true\n    }\n  }\n\n  /**\n   * Batch validate domain list\n   * @param domains - Array of domain strings\n   * @returns Array of validation results\n   */\n  static validateDomainBatch(domains: string[]): Array<DomainValidationResult & { index: number; originalDomain: string }> {\n    return domains.map((domain, index) => ({\n      ...this.validateDomain(domain),\n      index,\n      originalDomain: domain\n    }))\n  }\n\n  /**\n   * Batch validate subdomain list\n   * @param subdomains - Array of subdomain strings\n   * @returns Array of validation results\n   */\n  static validateSubdomainBatch(subdomains: string[]): Array<DomainValidationResult & { index: number; originalDomain: string }> {\n    return subdomains.map((subdomain, index) => ({\n      ...this.validateSubdomain(subdomain),\n      index,\n      originalDomain: subdomain\n    }))\n  }\n\n  /**\n   * Normalize domain (convert to lowercase)\n   */\n  static normalize(domain: string): string | null {\n    const result = this.validateDomain(domain)\n    if (!result.isValid) {\n      return null\n    }\n    return domain.trim().toLowerCase()\n  }\n\n  /**\n   * Extract root domain from subdomain (using PSL - Public Suffix List)\n   * @param subdomain - Subdomain (e.g. www.example.com, blog.github.io)\n   * @returns Root domain (e.g. example.com, blog.github.io) or null\n   * \n   * Examples:\n   * - www.example.com → example.com\n   * - api.test.example.com → example.com\n   * - blog.github.io → blog.github.io (correctly handles public suffix)\n   * - www.bbc.co.uk → bbc.co.uk (correctly handles multi-level TLD)\n   */\n  static extractRootDomain(subdomain: string): string | null {\n    const trimmed = subdomain.trim().toLowerCase()\n    if (!trimmed) return null\n\n    // Use tldts to parse domain\n    const parsed = parseDomain(trimmed)\n    if (!parsed.domain) {\n      return null\n    }\n    return parsed.domain\n  }\n\n  /**\n   * Group subdomain list by root domain\n   * @param subdomains - Subdomain list\n   * @returns { grouped: Map<root domain, subdomain[]>, invalid: invalid subdomains[] }\n   */\n  static groupSubdomainsByRootDomain(subdomains: string[]): {\n    grouped: Map<string, string[]>\n    invalid: string[]\n  } {\n    const grouped = new Map<string, string[]>()\n    const invalid: string[] = []\n    \n    for (const subdomain of subdomains) {\n      const rootDomain = this.extractRootDomain(subdomain)\n      \n      if (!rootDomain) {\n        invalid.push(subdomain)\n        continue\n      }\n      \n      if (!grouped.has(rootDomain)) {\n        grouped.set(rootDomain, [])\n      }\n      \n      grouped.get(rootDomain)!.push(subdomain)\n    }\n    \n    return { grouped, invalid }\n  }\n\n  /**\n   * Check if subdomain belongs to specified root domain\n   * @param subdomain - Subdomain (e.g. www.example.com, api.example.com)\n   * @param rootDomain - Root domain (e.g. example.com)\n   * @returns Whether it belongs to that root domain\n   * \n   * Examples:\n   * - isSubdomainOf('www.example.com', 'example.com') → true\n   * - isSubdomainOf('api.test.example.com', 'example.com') → true\n   * - isSubdomainOf('www.test.com', 'example.com') → false\n   */\n  static isSubdomainOf(subdomain: string, rootDomain: string): boolean {\n    const trimmedSubdomain = subdomain.trim().toLowerCase()\n    const trimmedRootDomain = rootDomain.trim().toLowerCase()\n    \n    if (!trimmedSubdomain || !trimmedRootDomain) {\n      return false\n    }\n    \n    // Extract root domain from subdomain\n    const extractedRoot = this.extractRootDomain(trimmedSubdomain)\n    \n    // Compare extracted root domain with target root domain\n    return extractedRoot === trimmedRootDomain\n  }\n}\n"
  },
  {
    "path": "frontend/lib/endpoint-validator.ts",
    "content": "import validator from 'validator'\nimport { isIP } from 'is-ip'\n\n/**\n * Endpoint validation utility class\n * Provides strict URL format validation\n * Uses validator.js for reliable URL validation\n */\n\nexport interface EndpointValidationResult {\n  isValid: boolean\n  error?: string\n  url?: URL\n}\n\nexport class EndpointValidator {\n  /**\n   * Validate if Endpoint is a valid HTTP/HTTPS URL\n   * @param urlString - URL string to validate\n   * @returns Validation result\n   */\n  static validate(urlString: string): EndpointValidationResult {\n    // 1. Check if empty\n    if (!urlString || urlString.trim().length === 0) {\n      return {\n        isValid: false,\n        error: 'Endpoint cannot be empty'\n      }\n    }\n\n    const trimmedUrl = urlString.trim()\n\n    // 2. Check if contains spaces\n    if (trimmedUrl.includes(' ')) {\n      return {\n        isValid: false,\n        error: 'Endpoint cannot contain spaces'\n      }\n    }\n\n    // 3. Use validator.js for strict validation\n    if (!validator.isURL(trimmedUrl, {\n      protocols: ['http', 'https'],\n      require_protocol: true,\n      require_valid_protocol: true,\n      require_host: true,\n      allow_underscores: false,\n      allow_trailing_dot: false,\n      allow_protocol_relative_urls: false,\n    })) {\n      return {\n        isValid: false,\n        error: 'Invalid Endpoint format, must be a valid HTTP/HTTPS URL'\n      }\n    }\n\n    // 4. Try to parse URL (double validation)\n    let parsedUrl: URL\n    try {\n      parsedUrl = new URL(trimmedUrl)\n    } catch (error) {\n      return {\n        isValid: false,\n        error: 'Invalid Endpoint format, cannot parse'\n      }\n    }\n\n    // 5. Validate protocol\n    if (parsedUrl.protocol !== 'http:' && parsedUrl.protocol !== 'https:') {\n      return {\n        isValid: false,\n        error: 'Only HTTP and HTTPS protocols are supported'\n      }\n    }\n\n    // 6. Validate hostname\n    if (!parsedUrl.hostname || parsedUrl.hostname.length === 0) {\n      return {\n        isValid: false,\n        error: 'Endpoint must contain a valid hostname'\n      }\n    }\n\n    // 7. Check hostname format (domain or IP)\n    if (!this.isValidHostname(parsedUrl.hostname)) {\n      return {\n        isValid: false,\n        error: 'Invalid hostname format'\n      }\n    }\n\n    // 8. Check port number (if any)\n    if (parsedUrl.port && !this.isValidPort(parsedUrl.port)) {\n      return {\n        isValid: false,\n        error: 'Invalid port number (must be 1-65535)'\n      }\n    }\n\n    // 9. Check path (optional, but must be valid if present)\n    if (parsedUrl.pathname && parsedUrl.pathname.includes('..')) {\n      return {\n        isValid: false,\n        error: 'Endpoint path cannot contain \"..\"'\n      }\n    }\n\n    // 10. Check for dangerous characters\n    if (this.containsDangerousCharacters(trimmedUrl)) {\n      return {\n        isValid: false,\n        error: 'Endpoint contains unsafe characters'\n      }\n    }\n\n    return {\n      isValid: true,\n      url: parsedUrl\n    }\n  }\n\n  /**\n   * Batch validate Endpoint list\n   * @param urls - Array of URL strings\n   * @returns Array of validation results\n   */\n  static validateBatch(urls: string[]): Array<EndpointValidationResult & { index: number; originalUrl: string }> {\n    return urls.map((url, index) => ({\n      ...this.validate(url),\n      index,\n      originalUrl: url\n    }))\n  }\n\n  /**\n   * Validate if hostname is valid (domain or IP address)\n   */\n  private static isValidHostname(hostname: string): boolean {\n    // 1) IP validation (supports IPv4/IPv6)\n    if (isIP(hostname)) {\n      return true\n    }\n\n    // 2) Domain validation (using validator's FQDN validation)\n    return validator.isFQDN(hostname, {\n      require_tld: true,\n      allow_underscores: false,\n      allow_trailing_dot: false,\n      allow_numeric_tld: false,\n      allow_wildcard: false,\n    })\n  }\n\n  /**\n   * Validate if port number is valid\n   */\n  private static isValidPort(port: string): boolean {\n    const portNum = parseInt(port, 10)\n    return !isNaN(portNum) && portNum >= 1 && portNum <= 65535\n  }\n\n  /**\n   * Check if URL contains dangerous characters\n   */\n  private static containsDangerousCharacters(url: string): boolean {\n    // Check for control characters\n    const controlCharRegex = /[\\x00-\\x1F\\x7F]/\n    if (controlCharRegex.test(url)) {\n      return true\n    }\n\n    // Check for JavaScript protocol\n    if (url.toLowerCase().includes('javascript:')) {\n      return true\n    }\n\n    // Check for data protocol\n    if (url.toLowerCase().includes('data:')) {\n      return true\n    }\n\n    return false\n  }\n\n  /**\n   * Format Endpoint (normalize)\n   */\n  static normalize(urlString: string): string | null {\n    const result = this.validate(urlString)\n    if (!result.isValid || !result.url) {\n      return null\n    }\n\n    // Return normalized URL\n    return result.url.href\n  }\n\n  /**\n   * Extract parts of Endpoint\n   */\n  static parse(urlString: string): {\n    protocol: string\n    hostname: string\n    port: string\n    pathname: string\n    search: string\n    hash: string\n  } | null {\n    const result = this.validate(urlString)\n    if (!result.isValid || !result.url) {\n      return null\n    }\n\n    return {\n      protocol: result.url.protocol,\n      hostname: result.url.hostname,\n      port: result.url.port,\n      pathname: result.url.pathname,\n      search: result.url.search,\n      hash: result.url.hash\n    }\n  }\n}\n"
  },
  {
    "path": "frontend/lib/engine-config.ts",
    "content": "import {\n  Globe,\n  Network,\n  Monitor,\n  Fingerprint,\n  FolderSearch,\n  Link,\n  ShieldAlert,\n  Shield,\n  Camera,\n  Search,\n  Cpu,\n} from \"lucide-react\"\nimport type { LucideIcon } from \"lucide-react\"\n\n/** Unified capability tag color (using global CSS variables) */\nconst CAPABILITY_COLOR = \"bg-primary/10 text-primary border-primary/20\"\n\n/**\n * Engine capability configuration (using global CSS colors)\n * Used for scan initiation, quick scan and other engine selection interfaces\n */\nexport const CAPABILITY_CONFIG: Record<string, { \n  label: string\n  color: string\n  icon: LucideIcon \n}> = {\n  subdomain_discovery: { label: \"Subdomain Discovery\", color: CAPABILITY_COLOR, icon: Globe },\n  port_scan: { label: \"Port Scan\", color: CAPABILITY_COLOR, icon: Network },\n  site_scan: { label: \"Site Scan\", color: CAPABILITY_COLOR, icon: Monitor },\n  fingerprint_detect: { label: \"Fingerprint Detection\", color: CAPABILITY_COLOR, icon: Fingerprint },\n  directory_scan: { label: \"Directory Scan\", color: CAPABILITY_COLOR, icon: FolderSearch },\n  url_fetch: { label: \"URL Fetch\", color: CAPABILITY_COLOR, icon: Link },\n  vuln_scan: { label: \"Vulnerability Scan\", color: CAPABILITY_COLOR, icon: ShieldAlert },\n  waf_detection: { label: \"WAF Detection\", color: CAPABILITY_COLOR, icon: Shield },\n  screenshot: { label: \"Screenshot\", color: CAPABILITY_COLOR, icon: Camera },\n  osint: { label: \"OSINT\", color: CAPABILITY_COLOR, icon: Search },\n}\n\n/**\n * Get main icon based on engine capabilities\n * Returns the first matching capability icon by priority\n */\nexport function getEngineIcon(capabilities: string[]): LucideIcon {\n  const priorityOrder = [\n    'vuln_scan', \n    'subdomain_discovery', \n    'port_scan', \n    'site_scan', \n    'directory_scan', \n    'url_fetch', \n    'waf_detection', \n    'screenshot', \n    'osint'\n  ]\n  \n  for (const key of priorityOrder) {\n    if (capabilities.includes(key)) {\n      return CAPABILITY_CONFIG[key].icon\n    }\n  }\n  return Cpu\n}\n\n/**\n * Parse engine configuration to get capability list\n * Only matches top-level YAML keys (not comments or nested content)\n */\nexport function parseEngineCapabilities(configuration: string): string[] {\n  if (!configuration) return []\n  \n  try {\n    const capabilities: string[] = []\n    const lines = configuration.split('\\n')\n    \n    Object.keys(CAPABILITY_CONFIG).forEach((key) => {\n      // Match top-level YAML key: starts with the key name followed by colon\n      // Must be at the beginning of a line (no leading whitespace)\n      const pattern = new RegExp(`^${key}\\\\s*:`, 'm')\n      if (pattern.test(configuration)) {\n        capabilities.push(key)\n      }\n    })\n    return capabilities\n  } catch {\n    return []\n  }\n}\n\n/**\n * Merge multiple engine configurations into a single YAML string\n * Simply concatenates configurations with separators\n */\nexport function mergeEngineConfigurations(configurations: string[]): string {\n  const validConfigs = configurations.filter(c => c && c.trim())\n  if (validConfigs.length === 0) return \"\"\n  if (validConfigs.length === 1) return validConfigs[0]\n  return validConfigs.join(\"\\n\\n# ---\\n\\n\")\n}\n"
  },
  {
    "path": "frontend/lib/env.ts",
    "content": "/**\n * Environment variables and runtime configuration utilities\n */\n\nconst DEFAULT_DEV_BACKEND_URL = 'http://localhost:8888'\n\nconst stripTrailingSlash = (url: string) => url.replace(/\\/+$/, '')\n\n/**\n * Get backend base URL (used to bypass Next.js proxy, ensuring SSE and other long connections work)\n */\nexport function getBackendBaseUrl(): string {\n  const envUrl = process.env.NEXT_PUBLIC_BACKEND_URL?.trim()\n  if (envUrl) {\n    return stripTrailingSlash(envUrl)\n  }\n\n  if (typeof window !== 'undefined') {\n    const origin = window.location.origin\n    // In local development, backend runs on port 8888 by default\n    if (window.location.hostname === 'localhost' && window.location.port === '3000') {\n      return stripTrailingSlash(DEFAULT_DEV_BACKEND_URL)\n    }\n    return stripTrailingSlash(origin)\n  }\n\n  return stripTrailingSlash(DEFAULT_DEV_BACKEND_URL)\n}\n\n/**\n * Build backend API URL (automatically handles extra slashes)\n */\nexport function buildBackendUrl(path: string): string {\n  const base = getBackendBaseUrl()\n  const normalizedPath = path.startsWith('/') ? path : `/${path}`\n  return `${base}${normalizedPath}`\n}\n"
  },
  {
    "path": "frontend/lib/error-code-map.ts",
    "content": "/**\n * 错误码到 i18n 键的映射\n * \n * 采用简化方案（参考 Stripe、GitHub 等大厂做法）：\n * - 只映射通用错误码（5-10 个）\n * - 未知错误码使用 errors.unknown\n * - 错误码与后端 ErrorCodes 类保持一致\n * \n * 后端错误码定义: backend/apps/common/error_codes.py\n */\n\n/**\n * 错误码到 i18n 键的映射表\n * \n * 键: 后端返回的错误码（大写字母和下划线）\n * 值: 前端 i18n 键（在 messages/en.json 和 messages/zh.json 中定义）\n */\nexport const ERROR_CODE_MAP: Record<string, string> = {\n  // 通用错误码（8 个，与后端 ErrorCodes 类一致）\n  VALIDATION_ERROR: 'errors.validation',\n  NOT_FOUND: 'errors.notFound',\n  PERMISSION_DENIED: 'errors.permissionDenied',\n  SERVER_ERROR: 'errors.serverError',\n  BAD_REQUEST: 'errors.badRequest',\n  CONFLICT: 'errors.conflict',\n  UNAUTHORIZED: 'errors.unauthorized',\n  RATE_LIMITED: 'errors.rateLimited',\n};\n\n/**\n * 默认错误 i18n 键\n * 用于未知错误码的回退\n */\nexport const DEFAULT_ERROR_KEY = 'errors.unknown';\n\n/**\n * 获取错误码对应的 i18n 键\n * \n * @param code - 后端返回的错误码\n * @returns 对应的 i18n 键，未知错误码返回 'errors.unknown'\n * \n * @example\n * const errorKey = getErrorI18nKey('NOT_FOUND');\n * // 返回: 'errors.notFound'\n * \n * const unknownKey = getErrorI18nKey('SOME_UNKNOWN_ERROR');\n * // 返回: 'errors.unknown'\n */\nexport function getErrorI18nKey(code: string): string {\n  return ERROR_CODE_MAP[code] ?? DEFAULT_ERROR_KEY;\n}\n\n/**\n * 检查错误码是否已知\n * \n * @param code - 后端返回的错误码\n * @returns 如果错误码在映射表中返回 true\n */\nexport function isKnownErrorCode(code: string): boolean {\n  return code in ERROR_CODE_MAP;\n}\n\n/**\n * 获取所有已知的错误码列表\n * \n * @returns 错误码数组\n */\nexport function getAllErrorCodes(): string[] {\n  return Object.keys(ERROR_CODE_MAP);\n}\n"
  },
  {
    "path": "frontend/lib/error-handler.ts",
    "content": "/**\n * Unified error handling utility\n * \n * According to project rule 24:\n * - Success messages: Frontend constructs them\n * - Error messages: Frontend constructs them, providing more specific error reasons\n * - Console logs: Print complete backend response body\n */\n\nimport { toast } from \"sonner\"\n\n/**\n * API error information interface\n */\nexport interface ApiError {\n  response?: {\n    data?: unknown\n  }\n  message?: string\n}\n\n/**\n * Handle mutation errors (generic)\n * @param error Error object\n * @param userMessage Frontend custom user-friendly error message\n * @param toastId Optional toast ID (for dismissing loading toast)\n */\nexport function handleMutationError(\n  error: unknown,\n  userMessage: string,\n  toastId?: string\n) {\n  // Dismiss loading toast (if any)\n  if (toastId) {\n    toast.dismiss(toastId)\n  }\n\n  // Print detailed error information to console\n    console.error('Operation failed:', error)\n    console.error('Backend response:', (error as ApiError)?.response?.data || error)\n\n  // Show frontend custom user-friendly error message\n  toast.error(userMessage)\n}\n\n/**\n * Handle query errors (generic)\n * @param error Error object\n * @param userMessage Frontend custom user-friendly error message\n */\nexport function handleQueryError(error: unknown, userMessage: string) {\n  // Print detailed error information to console\n    console.error('Query failed:', error)\n    console.error('Backend response:', (error as ApiError)?.response?.data || error)\n\n  // Show frontend custom user-friendly error message\n  toast.error(userMessage)\n}\n\n/**\n * Handle success response (generic)\n * @param response Backend response\n * @param successMessage Frontend custom success message\n * @param toastId Optional toast ID (for dismissing loading toast)\n */\nexport function handleSuccess(\n  response: unknown,\n  successMessage: string,\n  toastId?: string\n) {\n  // Dismiss loading toast (if any)\n  if (toastId) {\n    toast.dismiss(toastId)\n  }\n\n  // Print success information to console\n    console.log('Operation successful')\n    console.log('Backend response:', response)\n\n  // Show frontend custom success message\n  toast.success(successMessage)\n}\n\n/**\n * Handle warning response (partial success scenarios)\n * @param response Backend response\n * @param warningMessage Frontend custom warning message\n * @param toastId Optional toast ID (for dismissing loading toast)\n */\nexport function handleWarning(\n  response: unknown,\n  warningMessage: string,\n  toastId?: string\n) {\n  // Dismiss loading toast (if any)\n  if (toastId) {\n    toast.dismiss(toastId)\n  }\n\n  // Print information to console (development environment only)\n  if (process.env.NODE_ENV === 'development') {\n    console.log('Operation partially successful')\n    console.log('Backend response:', response)\n  }\n\n  // Show frontend custom warning message\n  toast.warning(warningMessage)\n}\n\n/**\n * Check if response is successful\n * @param response API response\n * @returns Whether successful\n */\nexport function isSuccessResponse(response: unknown): boolean {\n  return (response as { state?: string })?.state === 'success'\n}\n\n/**\n * Extract data from response\n * @param response API response\n * @param defaultValue Default value\n * @returns Response data\n */\nexport function extractData<T>(response: unknown, defaultValue: T): T {\n  if (isSuccessResponse(response) && (response as { data?: T }).data) {\n    return (response as { data: T }).data\n  }\n  return defaultValue\n}\n"
  },
  {
    "path": "frontend/lib/i18n-format.ts",
    "content": "// Internationalization formatting utility functions\n// Provides localized formatting for dates, numbers, and relative time\n\nimport { useFormatter, useNow, useLocale } from 'next-intl'\n\n/**\n * Date formatting Hook\n * Formats dates according to current locale\n */\nexport function useFormatDate() {\n  const format = useFormatter()\n  const locale = useLocale()\n\n  return {\n    // Format date and time (full format)\n    formatDateTime: (date: Date | string | number | null | undefined) => {\n      if (!date) return '-'\n      const d = typeof date === 'string' || typeof date === 'number' ? new Date(date) : date\n      if (isNaN(d.getTime())) return '-'\n      return format.dateTime(d, {\n        year: 'numeric',\n        month: 'short',\n        day: 'numeric',\n        hour: '2-digit',\n        minute: '2-digit',\n      })\n    },\n\n    // Format date (date only)\n    formatDate: (date: Date | string | number | null | undefined) => {\n      if (!date) return '-'\n      const d = typeof date === 'string' || typeof date === 'number' ? new Date(date) : date\n      if (isNaN(d.getTime())) return '-'\n      return format.dateTime(d, {\n        year: 'numeric',\n        month: 'short',\n        day: 'numeric',\n      })\n    },\n\n    // Format time (time only)\n    formatTime: (date: Date | string | number | null | undefined) => {\n      if (!date) return '-'\n      const d = typeof date === 'string' || typeof date === 'number' ? new Date(date) : date\n      if (isNaN(d.getTime())) return '-'\n      return format.dateTime(d, {\n        hour: '2-digit',\n        minute: '2-digit',\n        second: '2-digit',\n      })\n    },\n\n    // Current locale\n    locale,\n  }\n}\n\n/**\n * Relative time formatting Hook\n * Example: \"2 hours ago\", \"3 days ago\"\n */\nexport function useFormatRelativeTime() {\n  const format = useFormatter()\n  const now = useNow({ updateInterval: 60000 }) // Update every minute\n\n  return (date: Date | string | number | null | undefined) => {\n    if (!date) return '-'\n    const d = typeof date === 'string' || typeof date === 'number' ? new Date(date) : date\n    if (isNaN(d.getTime())) return '-'\n    return format.relativeTime(d, now)\n  }\n}\n\n/**\n * Number formatting Hook\n * Formats numbers according to current locale\n */\nexport function useFormatNumber() {\n  const format = useFormatter()\n\n  return {\n    // Format integer (with thousands separator)\n    formatInteger: (num: number | null | undefined) => {\n      if (num === null || num === undefined) return '-'\n      return format.number(num, { maximumFractionDigits: 0 })\n    },\n\n    // Format decimal\n    formatDecimal: (num: number | null | undefined, decimals = 2) => {\n      if (num === null || num === undefined) return '-'\n      return format.number(num, { \n        minimumFractionDigits: decimals,\n        maximumFractionDigits: decimals,\n      })\n    },\n\n    // Format percentage\n    formatPercent: (num: number | null | undefined, decimals = 1) => {\n      if (num === null || num === undefined) return '-'\n      return format.number(num / 100, { \n        style: 'percent',\n        minimumFractionDigits: decimals,\n        maximumFractionDigits: decimals,\n      })\n    },\n\n    // Format file size\n    formatFileSize: (bytes: number | null | undefined) => {\n      if (bytes === null || bytes === undefined) return '-'\n      const units = ['B', 'KB', 'MB', 'GB', 'TB']\n      let unitIndex = 0\n      let size = bytes\n      while (size >= 1024 && unitIndex < units.length - 1) {\n        size /= 1024\n        unitIndex++\n      }\n      return `${format.number(size, { maximumFractionDigits: 2 })} ${units[unitIndex]}`\n    },\n  }\n}\n"
  },
  {
    "path": "frontend/lib/response-parser.ts",
    "content": "/**\n * API 响应解析器\n * \n * 统一处理后端 API 响应，支持新的标准化响应格式：\n * - 成功响应: 直接返回数据 T（无包装）\n * - 分页响应: { results: T[], total, page, pageSize, totalPages }\n * - 错误响应: { error: { code: string, message?: string, details?: unknown[] } }\n * \n * 注意：后端 success_response() 直接返回数据，不再使用 { data: T } 包装\n * service 层已经通过 res.data 解包 axios 响应，所以 hook 拿到的就是最终数据\n */\n\n/**\n * 标准化错误响应类型\n */\nexport interface ApiErrorResponse {\n  error: {\n    code: string;\n    message?: string;\n    details?: unknown[];\n  };\n}\n\n/**\n * 统一 API 响应类型\n * 成功：直接返回数据 T\n * 错误：{ error: { code, message?, details? } }\n */\nexport type ApiResponse<T = unknown> = T | ApiErrorResponse;\n\n/**\n * 旧版 API 响应类型（向后兼容）\n */\nexport interface LegacyApiResponse<T = unknown> {\n  code: string;\n  state: string;\n  message: string;\n  data?: T;\n}\n\n/**\n * 判断响应是否为错误响应\n * \n * @param response - API 响应对象\n * @returns 如果是错误响应返回 true\n * \n * @example\n * const response = await api.get('/scans');\n * if (isErrorResponse(response)) {\n *   console.error('Error:', response.error.code);\n * }\n */\nexport function isErrorResponse(response: unknown): response is ApiErrorResponse {\n  return (\n    typeof response === 'object' &&\n    response !== null &&\n    'error' in response &&\n    typeof (response as ApiErrorResponse).error === 'object' &&\n    (response as ApiErrorResponse).error !== null &&\n    typeof (response as ApiErrorResponse).error.code === 'string'\n  );\n}\n\n/**\n * 判断响应是否为成功响应（非错误响应）\n * \n * @param response - API 响应对象\n * @returns 如果是成功响应返回 true\n */\nexport function isSuccessResponse(response: unknown): boolean {\n  // 非对象或 null 不是成功响应\n  if (typeof response !== 'object' || response === null) {\n    return false;\n  }\n  \n  // 如果有 error 字段，则不是成功响应\n  if ('error' in response) {\n    return false;\n  }\n  \n  return true;\n}\n\n/**\n * 判断响应是否为旧版格式\n * \n * @param response - API 响应对象\n * @returns 如果是旧版格式返回 true\n */\nexport function isLegacyResponse<T = unknown>(\n  response: unknown\n): response is LegacyApiResponse<T> {\n  return (\n    typeof response === 'object' &&\n    response !== null &&\n    'state' in response &&\n    'code' in response &&\n    typeof (response as LegacyApiResponse).state === 'string'\n  );\n}\n\n/**\n * 判断旧版响应是否为错误\n * \n * @param response - 旧版 API 响应对象\n * @returns 如果是错误响应返回 true\n */\nexport function isLegacyErrorResponse<T = unknown>(\n  response: LegacyApiResponse<T>\n): boolean {\n  return response.state !== 'success';\n}\n\n/**\n * 从响应中解析数据\n * \n * 注意：新格式下，service 层返回的已经是最终数据（后端直接返回，无包装）\n * 此函数主要用于：\n * - 检查是否为错误响应\n * - 兼容旧格式 { state: 'success', data: T }\n * \n * @param response - API 响应对象（通常已经是最终数据）\n * @returns 解析出的数据，如果是错误响应则返回 null\n * \n * @example\n * const response = await quickScan(data);\n * const data = parseResponse<QuickScanResponse>(response);\n * if (data) {\n *   console.log('Scan count:', data.count);\n * }\n */\nexport function parseResponse<T>(response: unknown): T | null {\n  // 处理 null/undefined\n  if (response === null || response === undefined) {\n    return null;\n  }\n  \n  // 处理错误响应 { error: { code, message } }\n  if (isErrorResponse(response)) {\n    return null;\n  }\n  \n  // 处理旧格式响应 { state: 'success', data: T }\n  if (isLegacyResponse<T>(response)) {\n    if (isLegacyErrorResponse(response)) {\n      return null;\n    }\n    return response.data ?? null;\n  }\n  \n  // 新格式：response 本身就是数据（无包装）\n  // service 层已经返回 res.data，所以这里直接返回 response\n  return response as T;\n}\n\n/**\n * 从响应中获取错误码\n * \n * 支持新旧两种响应格式：\n * - 新格式: { error: { code: 'ERROR_CODE' } }\n * - 旧格式: { state: 'error', code: '400' }\n * \n * @param response - API 响应对象\n * @returns 错误码字符串，如果不是错误响应则返回 null\n * \n * @example\n * const response = await api.delete('/scans/123');\n * const errorCode = getErrorCode(response);\n * if (errorCode) {\n *   toast.error(t(`errors.${errorCode}`));\n * }\n */\nexport function getErrorCode(response: unknown): string | null {\n  // 处理新格式错误响应\n  if (isErrorResponse(response)) {\n    return response.error.code;\n  }\n  \n  // 处理旧格式错误响应\n  if (isLegacyResponse(response) && isLegacyErrorResponse(response)) {\n    // 旧格式的 code 是 HTTP 状态码，不是错误码\n    // 返回通用错误码\n    return 'SERVER_ERROR';\n  }\n  \n  return null;\n}\n\n/**\n * 从响应中获取错误消息（用于调试）\n * \n * @param response - API 响应对象\n * @returns 错误消息字符串，如果不是错误响应则返回 null\n */\nexport function getErrorMessage(response: unknown): string | null {\n  // 处理新格式错误响应\n  if (isErrorResponse(response)) {\n    return response.error.message ?? null;\n  }\n  \n  // 处理旧格式错误响应\n  if (isLegacyResponse(response) && isLegacyErrorResponse(response)) {\n    return response.message;\n  }\n  \n  return null;\n}\n\n/**\n * 分页响应元数据类型\n */\nexport interface PaginationMeta {\n  total: number;\n  page: number;\n  pageSize: number;\n  totalPages: number;\n}\n\n/**\n * 从分页响应中获取元数据\n * \n * @param response - API 分页响应对象 { results, total, page, pageSize, totalPages }\n * @returns 分页元数据，如果不是分页响应则返回 null\n */\nexport function getPaginationMeta(response: unknown): PaginationMeta | null {\n  if (\n    typeof response === 'object' &&\n    response !== null &&\n    'total' in response &&\n    'page' in response\n  ) {\n    const r = response as Record<string, unknown>;\n    return {\n      total: r.total as number,\n      page: r.page as number,\n      pageSize: (r.pageSize ?? r.page_size) as number,\n      totalPages: (r.totalPages ?? r.total_pages) as number,\n    };\n  }\n  return null;\n}\n"
  },
  {
    "path": "frontend/lib/subdomain-validator.ts",
    "content": "/**\n * Subdomain validation utility class\n * \n * Provides subdomain parsing and validation functionality for frontend validation during bulk subdomain addition.\n * Note: Whether subdomains match Target name is validated by backend.\n */\n\nexport interface SubdomainValidationResult {\n  isValid: boolean\n  subdomain: string\n  error?: string\n  index: number\n}\n\nexport interface ParseResult {\n  subdomains: string[]\n  validCount: number\n  invalidCount: number\n  duplicateCount: number\n  invalidItems: SubdomainValidationResult[]\n}\n\n// Subdomain format regex: allows letters, numbers, hyphens, separated by dots\nconst SUBDOMAIN_REGEX = /^(?!-)[a-zA-Z0-9-]{1,63}(?<!-)(\\.[a-zA-Z0-9-]{1,63})*$/\n\nexport class SubdomainValidator {\n  /**\n   * Parse input text, only supports newline separation (one subdomain per line)\n   */\n  static parse(input: string): string[] {\n    if (!input || typeof input !== 'string') {\n      return []\n    }\n    \n    return input\n      .split('\\n')\n      .map(s => s.trim().toLowerCase())\n      .filter(s => s.length > 0)\n  }\n\n  /**\n   * Validate single subdomain format (does not validate if it matches Target)\n   */\n  static validate(subdomain: string, index: number = 0): SubdomainValidationResult {\n    const trimmed = subdomain.trim().toLowerCase()\n    \n    // Empty value check\n    if (!trimmed) {\n      return {\n        isValid: false,\n        subdomain: subdomain,\n        error: 'Subdomain cannot be empty',\n        index,\n      }\n    }\n    \n    // Length check (DNS standard limit)\n    if (trimmed.length > 253) {\n      return {\n        isValid: false,\n        subdomain: trimmed,\n        error: 'Subdomain length cannot exceed 253 characters',\n        index,\n      }\n    }\n    \n    // Format check\n    if (!SUBDOMAIN_REGEX.test(trimmed)) {\n      return {\n        isValid: false,\n        subdomain: trimmed,\n        error: 'Invalid subdomain format',\n        index,\n      }\n    }\n    \n    return {\n      isValid: true,\n      subdomain: trimmed,\n      index,\n    }\n  }\n\n  /**\n   * Batch validate and deduplicate\n   */\n  static validateBatch(subdomains: string[]): ParseResult {\n    const seen = new Set<string>()\n    const validSubdomains: string[] = []\n    const invalidItems: SubdomainValidationResult[] = []\n    let duplicateCount = 0\n    \n    subdomains.forEach((subdomain, index) => {\n      const result = this.validate(subdomain, index)\n      \n      if (!result.isValid) {\n        invalidItems.push(result)\n        return\n      }\n      \n      // Duplicate check\n      if (seen.has(result.subdomain)) {\n        duplicateCount++\n        return\n      }\n      \n      seen.add(result.subdomain)\n      validSubdomains.push(result.subdomain)\n    })\n    \n    return {\n      subdomains: validSubdomains,\n      validCount: validSubdomains.length,\n      invalidCount: invalidItems.length,\n      duplicateCount,\n      invalidItems,\n    }\n  }\n}\n"
  },
  {
    "path": "frontend/lib/table-utils.ts",
    "content": "/**\n * Table utility functions\n * Provides column width calculation and other table-related utilities\n */\n\n// Cache for text measurement context\nlet measureContext: CanvasRenderingContext2D | null = null\n\n/**\n * Get or create a canvas context for measuring text width\n */\nfunction getMeasureContext(): CanvasRenderingContext2D {\n  if (!measureContext) {\n    const canvas = document.createElement('canvas')\n    measureContext = canvas.getContext('2d')!\n  }\n  return measureContext\n}\n\n/**\n * Measure text width using canvas\n * @param text - Text to measure\n * @param font - CSS font string (e.g., \"14px Inter, sans-serif\")\n * @returns Text width in pixels\n */\nexport function measureTextWidth(text: string, font: string = '14px Inter, system-ui, sans-serif'): number {\n  const ctx = getMeasureContext()\n  ctx.font = font\n  return ctx.measureText(text).width\n}\n\n/**\n * Options for calculating column widths\n */\nexport interface CalculateColumnWidthsOptions<TData> {\n  /** Table data */\n  data: TData[]\n  /** Column definitions with accessorKey */\n  columns: Array<{\n    accessorKey?: string\n    id?: string\n    size?: number\n    minSize?: number\n    maxSize?: number\n    /** If true, skip auto-sizing for this column */\n    enableAutoSize?: boolean\n  }>\n  /** Font to use for measurement */\n  font?: string\n  /** Padding to add to each cell (in pixels) */\n  cellPadding?: number\n  /** Header font (usually slightly different from cell font) */\n  headerFont?: string\n  /** Header labels for columns (keyed by accessorKey or id) */\n  headerLabels?: Record<string, string>\n  /** Maximum number of rows to sample (for performance) */\n  maxSampleRows?: number\n  /** Locale for date formatting */\n  locale?: string\n}\n\n/**\n * Calculate optimal column widths based on content\n * Returns a map of column id -> calculated width\n */\n/**\n * Check if a string looks like an ISO date\n */\nfunction isISODateString(value: string): boolean {\n  // Match ISO 8601 format: 2024-01-09T12:00:00.000Z or 2024-01-09T12:00:00\n  return /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}/.test(value)\n}\n\n/**\n * Format date for display (matching the app's date format)\n */\nfunction formatDateForMeasurement(dateString: string, locale: string): string {\n  try {\n    return new Date(dateString).toLocaleString(locale, {\n      year: \"numeric\",\n      month: \"numeric\",\n      day: \"numeric\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\",\n      hour12: false,\n    })\n  } catch {\n    return dateString\n  }\n}\n\nexport function calculateColumnWidths<TData extends Record<string, unknown>>({\n  data,\n  columns,\n  font = '14px Inter, system-ui, sans-serif',\n  cellPadding = 32, // Default padding for cell content\n  headerFont = '500 14px Inter, system-ui, sans-serif',\n  headerLabels = {},\n  maxSampleRows = 100,\n  locale = 'zh-CN',\n}: CalculateColumnWidthsOptions<TData>): Record<string, number> {\n  const widths: Record<string, number> = {}\n  \n  // Sample data for performance (don't measure all rows if there are too many)\n  const sampleData = data.slice(0, maxSampleRows)\n  \n  for (const column of columns) {\n    const columnId = column.accessorKey || column.id\n    if (!columnId) continue\n    \n    // Skip columns that explicitly disable auto-sizing\n    if (column.enableAutoSize === false) {\n      if (column.size) {\n        widths[columnId] = column.size\n      }\n      continue\n    }\n    \n    // Start with header width\n    const headerLabel = headerLabels[columnId] || columnId\n    let maxWidth = measureTextWidth(headerLabel, headerFont) + cellPadding\n    \n    // Measure content width for each row\n    for (const row of sampleData) {\n      const value = row[columnId]\n      if (value == null) continue\n      \n      // Convert value to string for measurement\n      let textValue: string\n      if (typeof value === 'string') {\n        // Check if it's a date string and format it\n        if (isISODateString(value)) {\n          textValue = formatDateForMeasurement(value, locale)\n        } else {\n          textValue = value\n        }\n      } else if (typeof value === 'number') {\n        textValue = String(value)\n      } else if (Array.isArray(value)) {\n        // For arrays, join with comma (rough estimate)\n        textValue = value.join(', ')\n      } else if (typeof value === 'object') {\n        // Skip complex objects - they need custom renderers\n        continue\n      } else {\n        textValue = String(value)\n      }\n      \n      const contentWidth = measureTextWidth(textValue, font) + cellPadding\n      maxWidth = Math.max(maxWidth, contentWidth)\n    }\n    \n    // Apply min/max constraints\n    if (column.minSize) {\n      maxWidth = Math.max(maxWidth, column.minSize)\n    }\n    if (column.maxSize) {\n      maxWidth = Math.min(maxWidth, column.maxSize)\n    }\n    \n    widths[columnId] = Math.ceil(maxWidth)\n  }\n  \n  return widths\n}\n\n/**\n * Hook-friendly version that returns initial column sizing state\n */\nexport function getInitialColumnSizing<TData extends Record<string, unknown>>(\n  options: CalculateColumnWidthsOptions<TData>\n): Record<string, number> {\n  // Only run on client side\n  if (typeof window === 'undefined') {\n    return {}\n  }\n  return calculateColumnWidths(options)\n}\n"
  },
  {
    "path": "frontend/lib/target-validator.ts",
    "content": "import validator from 'validator'\nimport { parse as parseDomain } from 'tldts'\n\n/**\n * Target validation utility class\n * Supports validation of four target types: domain, IP, CIDR, URL\n */\n\nexport type InputType = 'url' | 'domain' | 'ip' | 'cidr'\n\nexport interface TargetValidationResult {\n  isValid: boolean\n  error?: string\n  type?: InputType\n  isEmptyLine?: boolean  // Mark empty lines, frontend filters them out and doesn't send\n}\n\nexport class TargetValidator {\n  /**\n   * Validate domain format (e.g. example.com)\n   */\n  static validateDomain(domain: string): TargetValidationResult {\n    if (!domain || domain.trim().length === 0) {\n      return {\n        isValid: false,\n        error: 'Target cannot be empty'\n      }\n    }\n\n    const trimmedDomain = domain.trim()\n\n    if (trimmedDomain.includes(' ')) {\n      return {\n        isValid: false,\n        error: 'Target cannot contain spaces'\n      }\n    }\n\n    if (!validator.isLength(trimmedDomain, { min: 1, max: 253 })) {\n      return {\n        isValid: false,\n        error: 'Target length cannot exceed 253 characters'\n      }\n    }\n\n    const info = parseDomain(trimmedDomain)\n    if (!info.domain || info.isIp === true) {\n      return {\n        isValid: false,\n        error: 'Invalid domain format'\n      }\n    }\n\n    if (!validator.isFQDN(trimmedDomain, {\n      require_tld: true,\n      allow_underscores: false,\n      allow_trailing_dot: false,\n      allow_numeric_tld: false,\n      allow_wildcard: false,\n    })) {\n      return {\n        isValid: false,\n        error: 'Invalid domain format'\n      }\n    }\n\n    return { isValid: true, type: 'domain' }\n  }\n\n  /**\n   * Validate IPv4 address (e.g. 192.168.1.1)\n   */\n  static validateIPv4(ip: string): TargetValidationResult {\n    if (!ip || ip.trim().length === 0) {\n      return {\n        isValid: false,\n        error: 'Target cannot be empty'\n      }\n    }\n\n    const trimmedIP = ip.trim()\n\n    if (!validator.isIP(trimmedIP, 4)) {\n      return {\n        isValid: false,\n        error: 'Invalid IPv4 address format'\n      }\n    }\n\n    return { isValid: true, type: 'ip' }\n  }\n\n  /**\n   * Validate IPv6 address (e.g. 2001:db8::1)\n   */\n  static validateIPv6(ip: string): TargetValidationResult {\n    if (!ip || ip.trim().length === 0) {\n      return {\n        isValid: false,\n        error: 'Target cannot be empty'\n      }\n    }\n\n    const trimmedIP = ip.trim()\n\n    if (!validator.isIP(trimmedIP, 6)) {\n      return {\n        isValid: false,\n        error: 'Invalid IPv6 address format'\n      }\n    }\n\n    return { isValid: true, type: 'ip' }\n  }\n\n  /**\n   * Validate IP address (IPv4 or IPv6)\n   */\n  static validateIP(ip: string): TargetValidationResult {\n    if (!ip || ip.trim().length === 0) {\n      return {\n        isValid: false,\n        error: 'Target cannot be empty'\n      }\n    }\n\n    const trimmedIP = ip.trim()\n\n    if (!validator.isIP(trimmedIP)) {\n      return {\n        isValid: false,\n        error: 'Invalid IP address format'\n      }\n    }\n\n    return { isValid: true, type: 'ip' }\n  }\n\n  /**\n   * Validate CIDR network segment (e.g. 10.0.0.0/8, 192.168.0.0/16)\n   */\n  static validateCIDR(cidr: string): TargetValidationResult {\n    if (!cidr || cidr.trim().length === 0) {\n      return {\n        isValid: false,\n        error: 'Target cannot be empty'\n      }\n    }\n\n    const trimmedCIDR = cidr.trim()\n\n    // Check if contains /\n    if (!trimmedCIDR.includes('/')) {\n      return {\n        isValid: false,\n        error: 'Invalid CIDR format, should contain /'\n      }\n    }\n\n    const [ip, prefix] = trimmedCIDR.split('/')\n\n    // Validate IP part\n    if (!validator.isIP(ip.trim())) {\n      return {\n        isValid: false,\n        error: 'Invalid IP address format in CIDR'\n      }\n    }\n\n    // Validate prefix length\n    const prefixNum = parseInt(prefix, 10)\n    if (isNaN(prefixNum) || prefixNum < 0 || prefixNum > 32) {\n      return {\n        isValid: false,\n        error: 'CIDR prefix length must be between 0-32'\n      }\n    }\n\n    return { isValid: true, type: 'cidr' }\n  }\n\n  /**\n   * Auto-detect target type and validate\n   * Supports: domain, IPv4, IPv6, CIDR\n   */\n  static validateTarget(target: string): TargetValidationResult {\n    if (!target || target.trim().length === 0) {\n      return {\n        isValid: false,\n        error: 'Target cannot be empty'\n      }\n    }\n\n    const trimmedTarget = target.trim()\n\n    // 1. Try CIDR validation first (contains /)\n    if (trimmedTarget.includes('/')) {\n      return this.validateCIDR(trimmedTarget)\n    }\n\n    // 2. Try IP validation\n    if (validator.isIP(trimmedTarget)) {\n      return this.validateIP(trimmedTarget)\n    }\n\n    // 3. Try domain validation\n    return this.validateDomain(trimmedTarget)\n  }\n\n  /**\n   * Batch validate target list\n   */\n  static validateTargetBatch(targets: string[]): Array<TargetValidationResult & { index: number; originalTarget: string }> {\n    return targets.map((target, index) => ({\n      ...this.validateTarget(target),\n      index,\n      originalTarget: target\n    }))\n  }\n\n  // ==================== URL Support Extension ====================\n\n  /**\n   * Detect input type\n   * Used for quick scan input parsing\n   */\n  static detectInputType(input: string): InputType {\n    // URL: contains :// \n    if (input.includes('://')) {\n      return 'url'\n    }\n    \n    // Contains / but not CIDR, treat as URL (URL missing scheme)\n    if (input.includes('/')) {\n      // CIDR format: IP/prefix, e.g. 10.0.0.0/8\n      if (this.looksLikeCidr(input)) {\n        return 'cidr'\n      }\n      return 'url'\n    }\n    \n    // CIDR: matches IP/prefix format\n    if (this.looksLikeCidr(input)) {\n      return 'cidr'\n    }\n    \n    // IP: matches IPv4 format\n    if (this.looksLikeIp(input)) {\n      return 'ip'\n    }\n    \n    // Default to domain\n    return 'domain'\n  }\n\n  /**\n   * Check if it's CIDR format\n   */\n  static looksLikeCidr(input: string): boolean {\n    return /^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\/\\d{1,2}$/.test(input)\n  }\n\n  /**\n   * Check if it's IP address format\n   */\n  static looksLikeIp(input: string): boolean {\n    return /^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/.test(input)\n  }\n\n  /**\n   * Validate URL format\n   * URL must contain scheme (http:// or https://)\n   */\n  static validateUrl(url: string): TargetValidationResult {\n    // Check if contains scheme\n    if (!url.startsWith('http://') && !url.startsWith('https://')) {\n      return { isValid: false, error: 'URL must contain protocol (http:// or https://)' }\n    }\n    \n    try {\n      const parsed = new URL(url)\n      if (!parsed.hostname) {\n        return { isValid: false, error: 'URL must contain hostname' }\n      }\n      return { isValid: true, type: 'url' }\n    } catch {\n      return { isValid: false, error: 'Invalid URL format' }\n    }\n  }\n\n  /**\n   * Extended validation method, supports URL input\n   * Only does type detection and basic format validation, detailed parsing is done by backend\n   */\n  static validateInput(input: string): TargetValidationResult {\n    const trimmed = input.trim()\n    \n    // 1. Skip empty lines, no error\n    if (trimmed.length === 0) {\n      return { isValid: true, type: undefined, isEmptyLine: true }\n    }\n    \n    // 2. Detect input type\n    const inputType = this.detectInputType(trimmed)\n    \n    // 3. Validate based on type\n    switch (inputType) {\n      case 'url':\n        return this.validateUrl(trimmed)\n      case 'ip':\n        return this.validateIP(trimmed)\n      case 'cidr':\n        return this.validateCIDR(trimmed)\n      case 'domain':\n        return this.validateDomain(trimmed)\n      default:\n        return this.validateDomain(trimmed)\n    }\n  }\n\n  /**\n   * Batch validate input (supports URL)\n   */\n  static validateInputBatch(inputs: string[]): Array<TargetValidationResult & { lineNumber: number; originalInput: string }> {\n    return inputs.map((input, index) => ({\n      ...this.validateInput(input),\n      lineNumber: index + 1,\n      originalInput: input\n    }))\n  }\n}\n"
  },
  {
    "path": "frontend/lib/toast-helpers.ts",
    "content": "/**\n * Toast 消息辅助函数\n * \n * 提供 i18n 感知的 toast 消息显示功能：\n * - success(): 显示成功消息\n * - error(): 显示错误消息\n * - errorFromCode(): 根据错误码显示错误消息\n * - loading(): 显示加载消息\n * - dismiss(): 关闭指定 toast\n * \n * 使用方式：\n * ```tsx\n * function MyComponent() {\n *   const toastMessages = useToastMessages();\n *   \n *   const handleDelete = async () => {\n *     try {\n *       await deleteItem(id);\n *       toastMessages.success('toast.item.delete.success', { name: item.name });\n *     } catch (error) {\n *       toastMessages.errorFromCode(getErrorCode(error));\n *     }\n *   };\n * }\n * ```\n */\n\nimport { toast } from 'sonner';\nimport { useTranslations } from 'next-intl';\nimport { getErrorI18nKey, DEFAULT_ERROR_KEY } from './error-code-map';\n\n/**\n * Toast 消息参数类型\n * 支持字符串和数字类型的插值变量\n */\nexport type ToastParams = Record<string, string | number>;\n\n/**\n * Toast 消息 Hook 返回类型\n */\nexport interface ToastMessages {\n  /**\n   * 显示成功消息\n   * @param key - i18n 消息键\n   * @param params - 插值参数\n   * @param toastId - 可选的 toast ID（用于替换或关闭）\n   */\n  success: (key: string, params?: ToastParams, toastId?: string) => void;\n  \n  /**\n   * 显示错误消息\n   * @param key - i18n 消息键\n   * @param params - 插值参数\n   * @param toastId - 可选的 toast ID（用于替换或关闭）\n   */\n  error: (key: string, params?: ToastParams, toastId?: string) => void;\n  \n  /**\n   * 根据错误码显示错误消息\n   * @param code - 后端返回的错误码\n   * @param fallbackKey - 未知错误码的回退键（默认 'errors.unknown'）\n   * @param toastId - 可选的 toast ID（用于替换或关闭）\n   */\n  errorFromCode: (code: string | null, fallbackKey?: string, toastId?: string) => void;\n  \n  /**\n   * 显示加载消息\n   * @param key - i18n 消息键\n   * @param params - 插值参数\n   * @param toastId - toast ID（用于后续关闭）\n   */\n  loading: (key: string, params?: ToastParams, toastId?: string) => void;\n  \n  /**\n   * 显示警告消息\n   * @param key - i18n 消息键\n   * @param params - 插值参数\n   * @param toastId - 可选的 toast ID（用于替换或关闭）\n   */\n  warning: (key: string, params?: ToastParams, toastId?: string) => void;\n  \n  /**\n   * 关闭指定 toast\n   * @param toastId - toast ID\n   */\n  dismiss: (toastId: string) => void;\n}\n\n/**\n * i18n 感知的 Toast 消息 Hook\n * \n * 提供统一的 toast 消息显示接口，自动处理 i18n 翻译和参数插值。\n * \n * @returns ToastMessages 对象，包含 success、error、errorFromCode、loading、warning、dismiss 方法\n * \n * @example\n * ```tsx\n * function DeleteButton({ item }) {\n *   const toastMessages = useToastMessages();\n *   const { mutate: deleteItem } = useDeleteItem();\n *   \n *   const handleDelete = () => {\n *     toastMessages.loading('toast.item.delete.loading', {}, 'delete-item');\n *     \n *     deleteItem(item.id, {\n *       onSuccess: () => {\n *         toastMessages.dismiss('delete-item');\n *         toastMessages.success('toast.item.delete.success', { name: item.name });\n *       },\n *       onError: (error) => {\n *         toastMessages.dismiss('delete-item');\n *         toastMessages.errorFromCode(getErrorCode(error.response?.data));\n *       }\n *     });\n *   };\n *   \n *   return <button onClick={handleDelete}>Delete</button>;\n * }\n * ```\n */\nexport function useToastMessages(): ToastMessages {\n  // 使用根命名空间，允许访问所有翻译键\n  const t = useTranslations();\n  \n  return {\n    success: (key: string, params?: ToastParams, toastId?: string) => {\n      const message = t(key, params);\n      if (toastId) {\n        toast.success(message, { id: toastId });\n      } else {\n        toast.success(message);\n      }\n    },\n    \n    error: (key: string, params?: ToastParams, toastId?: string) => {\n      const message = t(key, params);\n      if (toastId) {\n        toast.error(message, { id: toastId });\n      } else {\n        toast.error(message);\n      }\n    },\n    \n    errorFromCode: (code: string | null, fallbackKey = DEFAULT_ERROR_KEY, toastId?: string) => {\n      const errorKey = code ? getErrorI18nKey(code) : fallbackKey;\n      const message = t(errorKey);\n      if (toastId) {\n        toast.error(message, { id: toastId });\n      } else {\n        toast.error(message);\n      }\n    },\n    \n    loading: (key: string, params?: ToastParams, toastId?: string) => {\n      const message = t(key, params);\n      if (toastId) {\n        toast.loading(message, { id: toastId });\n      } else {\n        toast.loading(message);\n      }\n    },\n    \n    warning: (key: string, params?: ToastParams, toastId?: string) => {\n      const message = t(key, params);\n      if (toastId) {\n        toast.warning(message, { id: toastId });\n      } else {\n        toast.warning(message);\n      }\n    },\n    \n    dismiss: (toastId: string) => {\n      toast.dismiss(toastId);\n    },\n  };\n}\n\n/**\n * 非 Hook 版本的 toast 辅助函数\n * \n * 用于不在 React 组件中的场景（如 API 拦截器）。\n * 注意：这些函数不支持 i18n，只能显示原始字符串。\n * \n * @example\n * ```ts\n * // 在 API 拦截器中使用\n * apiClient.interceptors.response.use(\n *   (response) => response,\n *   (error) => {\n *     if (error.response?.status === 401) {\n *       showToast.error('Session expired, please login again');\n *     }\n *     return Promise.reject(error);\n *   }\n * );\n * ```\n */\nexport const showToast = {\n  success: (message: string, toastId?: string) => {\n    if (toastId) {\n      toast.success(message, { id: toastId });\n    } else {\n      toast.success(message);\n    }\n  },\n  \n  error: (message: string, toastId?: string) => {\n    if (toastId) {\n      toast.error(message, { id: toastId });\n    } else {\n      toast.error(message);\n    }\n  },\n  \n  loading: (message: string, toastId?: string) => {\n    if (toastId) {\n      toast.loading(message, { id: toastId });\n    } else {\n      toast.loading(message);\n    }\n  },\n  \n  warning: (message: string, toastId?: string) => {\n    if (toastId) {\n      toast.warning(message, { id: toastId });\n    } else {\n      toast.warning(message);\n    }\n  },\n  \n  dismiss: (toastId: string) => {\n    toast.dismiss(toastId);\n  },\n};\n"
  },
  {
    "path": "frontend/lib/url-validator.ts",
    "content": "/**\n * URL validation utility class\n * \n * Provides URL parsing and validation functionality for frontend validation when adding URLs in batch.\n * Supports three asset types: Endpoints, Websites, Directories.\n */\n\nexport type TargetType = 'domain' | 'ip' | 'cidr'\n\nexport interface URLValidationResult {\n  isValid: boolean\n  url: string\n  error?: string\n  index: number\n  isMatched?: boolean  // Whether it matches the target (only valid when targetName is provided)\n}\n\nexport interface ParseResult {\n  urls: string[]\n  validCount: number\n  invalidCount: number\n  duplicateCount: number\n  mismatchedCount: number  // Number of URLs that don't match the target\n  invalidItems: URLValidationResult[]\n  mismatchedItems: URLValidationResult[]  // List of URLs that don't match the target\n}\n\n// Maximum URL length\nconst MAX_URL_LENGTH = 2000\n\n// URL format regex: must start with http:// or https://\nconst URL_PROTOCOL_REGEX = /^https?:\\/\\//i\n\nexport class URLValidator {\n  /**\n   * Parse input text, only supports newline separation (one URL per line)\n   */\n  static parse(input: string): string[] {\n    if (!input || typeof input !== 'string') {\n      return []\n    }\n    \n    return input\n      .split('\\n')\n      .map(s => s.trim())\n      .filter(s => s.length > 0)\n  }\n\n  /**\n   * Check if URL hostname matches the target\n   * \n   * Matching rules (simple frontend validation, for hints only, does not block submission):\n   * - Domain type: hostname === targetName or hostname.endsWith('.'+targetName)\n   * - IP type: hostname === targetName\n   * - CIDR type: skip validation (frontend cannot determine if IP is within CIDR range)\n   */\n  static checkMatch(url: string, targetName: string, targetType: TargetType): boolean {\n    // Skip frontend validation for CIDR type\n    if (targetType === 'cidr') {\n      return true\n    }\n    \n    try {\n      const parsed = new URL(url)\n      const hostname = parsed.hostname.toLowerCase()\n      const target = targetName.toLowerCase()\n      \n      if (targetType === 'domain') {\n        // Domain type: hostname equals target or ends with .target\n        return hostname === target || hostname.endsWith('.' + target)\n      } else if (targetType === 'ip') {\n        // IP type: hostname must exactly equal target\n        return hostname === target\n      }\n      \n      return true\n    } catch {\n      return false\n    }\n  }\n\n  /**\n   * Validate single URL format\n   */\n  static validate(url: string, index: number = 0, targetName?: string, targetType?: TargetType): URLValidationResult {\n    const trimmed = url.trim()\n    \n    // Empty value check\n    if (!trimmed) {\n      return {\n        isValid: false,\n        url: url,\n        error: 'URL cannot be empty',\n        index,\n      }\n    }\n    \n    // Length check\n    if (trimmed.length > MAX_URL_LENGTH) {\n      return {\n        isValid: false,\n        url: trimmed,\n        error: `URL length cannot exceed ${MAX_URL_LENGTH} characters`,\n        index,\n      }\n    }\n    \n    // Protocol check\n    if (!URL_PROTOCOL_REGEX.test(trimmed)) {\n      return {\n        isValid: false,\n        url: trimmed,\n        error: 'URL must start with http:// or https://',\n        index,\n      }\n    }\n    \n    // Try to parse URL\n    try {\n      const parsed = new URL(trimmed)\n      if (!parsed.hostname) {\n        return {\n          isValid: false,\n          url: trimmed,\n          error: 'URL must contain hostname',\n          index,\n        }\n      }\n      \n      // Check if it matches the target\n      let isMatched = true\n      if (targetName && targetType) {\n        isMatched = this.checkMatch(trimmed, targetName, targetType)\n      }\n      \n      return {\n        isValid: true,\n        url: trimmed,\n        index,\n        isMatched,\n      }\n    } catch {\n      return {\n        isValid: false,\n        url: trimmed,\n        error: 'Invalid URL format',\n        index,\n      }\n    }\n  }\n\n  /**\n   * Batch validation with deduplication\n   */\n  static validateBatch(urls: string[], targetName?: string, targetType?: TargetType): ParseResult {\n    const seen = new Set<string>()\n    const validUrls: string[] = []\n    const invalidItems: URLValidationResult[] = []\n    const mismatchedItems: URLValidationResult[] = []\n    let duplicateCount = 0\n    \n    urls.forEach((url, index) => {\n      const result = this.validate(url, index, targetName, targetType)\n      \n      if (!result.isValid) {\n        invalidItems.push(result)\n        return\n      }\n      \n      // Deduplication check\n      if (seen.has(result.url)) {\n        duplicateCount++\n        return\n      }\n      \n      seen.add(result.url)\n      validUrls.push(result.url)\n      \n      // Record mismatched URLs (but still add to valid list)\n      if (result.isMatched === false) {\n        mismatchedItems.push(result)\n      }\n    })\n    \n    return {\n      urls: validUrls,\n      validCount: validUrls.length,\n      invalidCount: invalidItems.length,\n      duplicateCount,\n      mismatchedCount: mismatchedItems.length,\n      invalidItems,\n      mismatchedItems,\n    }\n  }\n}\n"
  },
  {
    "path": "frontend/lib/utils.ts",
    "content": "import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs))\n}\n\n/**\n * Format date time\n * @param date Date string or Date object\n * @returns Formatted date time string\n */\nexport function formatDate(date: string | Date | null | undefined): string {\n  if (!date) return \"-\"\n  \n  try {\n    const d = typeof date === \"string\" ? new Date(date) : date\n    return new Intl.DateTimeFormat(\"zh-CN\", {\n      year: \"numeric\",\n      month: \"2-digit\",\n      day: \"2-digit\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\",\n      hour12: false,\n    }).format(d)\n  } catch (error) {\n    return \"-\"\n  }\n}\n\nexport function formatBytes(bytes: number, decimals = 2): string {\n  if (!Number.isFinite(bytes) || bytes < 0) return \"-\"\n  if (bytes === 0) return \"0 B\"\n  const k = 1024\n  const dm = decimals < 0 ? 0 : decimals\n  const sizes = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\"]\n  const i = Math.min(Math.floor(Math.log(bytes) / Math.log(k)), sizes.length - 1)\n  const val = bytes / Math.pow(k, i)\n  return `${parseFloat(val.toFixed(dm))} ${sizes[i]}`\n}\n"
  },
  {
    "path": "frontend/messages/en.json",
    "content": "{\n  \"columns\": {\n    \"common\": {\n      \"name\": \"Name\",\n      \"description\": \"Description\",\n      \"createdAt\": \"Created At\",\n      \"updatedAt\": \"Updated At\",\n      \"status\": \"Status\",\n      \"actions\": \"Actions\",\n      \"type\": \"Type\",\n      \"url\": \"URL\"\n    },\n    \"scanHistory\": {\n      \"target\": \"Target\",\n      \"summary\": \"Summary\",\n      \"engineName\": \"Engine Name\",\n      \"workerName\": \"Worker Node\",\n      \"progress\": \"Progress\",\n      \"subdomains\": \"Subdomains\",\n      \"websites\": \"Websites\",\n      \"ipAddresses\": \"IP Addresses\",\n      \"endpoints\": \"Endpoints\",\n      \"vulnerabilities\": \"Vulnerabilities\"\n    },\n    \"vulnerability\": {\n      \"severity\": \"Severity\",\n      \"source\": \"Source\",\n      \"vulnType\": \"Vuln Type\"\n    },\n    \"organization\": {\n      \"organization\": \"Organization\",\n      \"totalTargets\": \"Total Targets\",\n      \"added\": \"Added\"\n    },\n    \"target\": {\n      \"target\": \"Target\",\n      \"addedOn\": \"Added On\",\n      \"lastScanned\": \"Last Scanned\"\n    },\n    \"subdomain\": {\n      \"subdomain\": \"Subdomain\"\n    },\n    \"ipAddress\": {\n      \"ipAddress\": \"IP Address\",\n      \"hosts\": \"Hosts\",\n      \"openPorts\": \"Open Ports\",\n      \"allHosts\": \"All Hosts\",\n      \"allOpenPorts\": \"All Open Ports\"\n    },\n    \"endpoint\": {\n      \"title\": \"Title\",\n      \"host\": \"Host\",\n      \"contentLength\": \"Content Length\",\n      \"location\": \"Location\",\n      \"webServer\": \"Web Server\",\n      \"contentType\": \"Content Type\",\n      \"technologies\": \"Technologies\",\n      \"responseBody\": \"Response Body\",\n      \"vhost\": \"VHost\",\n      \"gfPatterns\": \"GF Patterns\",\n      \"responseHeaders\": \"Response Headers\",\n      \"responseTime\": \"Response Time\"\n    },\n    \"website\": {\n      \"host\": \"Host\",\n      \"responseHeaders\": \"Response Headers\"\n    },\n    \"directory\": {\n      \"length\": \"Length\",\n      \"words\": \"Words\",\n      \"lines\": \"Lines\",\n      \"duration\": \"Duration\"\n    },\n    \"engine\": {\n      \"engineName\": \"Engine Name\",\n      \"subdomainDiscovery\": \"Subdomain Discovery\",\n      \"portScan\": \"Port Scan\",\n      \"siteScan\": \"Site Scan\",\n      \"directoryScan\": \"Directory Scan\",\n      \"urlFetch\": \"URL Fetch\",\n      \"osint\": \"OSINT\",\n      \"vulnerabilityScan\": \"Vulnerability Scan\",\n      \"wafDetection\": \"WAF Detection\",\n      \"screenshot\": \"Screenshot\"\n    },\n    \"scheduledScan\": {\n      \"taskName\": \"Task Name\",\n      \"scanEngine\": \"Scan Engine\",\n      \"cronExpression\": \"Cron Expression\",\n      \"scope\": \"Scope\",\n      \"nextRun\": \"Next Run\",\n      \"runCount\": \"Run Count\",\n      \"lastRun\": \"Last Run\"\n    },\n    \"fingerprint\": {\n      \"name\": \"Name\",\n      \"cats\": \"Categories\",\n      \"rules\": \"Rules\",\n      \"implies\": \"Implies\",\n      \"website\": \"Website\",\n      \"cpe\": \"CPE\",\n      \"created\": \"Created\",\n      \"logic\": \"Logic\",\n      \"ruleDetails\": \"Rule Details\",\n      \"cms\": \"CMS\",\n      \"method\": \"Method\",\n      \"keyword\": \"Keyword\",\n      \"type\": \"Type\",\n      \"important\": \"Important\"\n    },\n    \"command\": {\n      \"tool\": \"Tool\",\n      \"commandTemplate\": \"Command Template\"\n    }\n  },\n  \"tooltips\": {\n    \"targetDetails\": \"Target Details\",\n    \"viewProgress\": \"Click to view progress details\",\n    \"targetSummary\": \"Target Summary\",\n    \"initiateScan\": \"Initiate Scan\",\n    \"scheduleScan\": \"Schedule Scan\",\n    \"editEngine\": \"Edit Engine\",\n    \"viewDetails\": \"View Details\",\n    \"unlinkTarget\": \"Unlink Target\",\n    \"clickToCopy\": \"Click to copy\",\n    \"expand\": \"Expand\",\n    \"collapse\": \"Collapse\",\n    \"vulnDetails\": \"Vulnerability Details\",\n    \"copied\": \"Copied\",\n    \"allHosts\": \"All Hosts\",\n    \"allOpenPorts\": \"All Open Ports\"\n  },\n  \"severity\": {\n    \"critical\": \"Critical\",\n    \"high\": \"High\",\n    \"medium\": \"Medium\",\n    \"low\": \"Low\",\n    \"info\": \"Info\"\n  },\n  \"common\": {\n    \"actions\": {\n      \"save\": \"Save\",\n      \"saving\": \"Saving...\",\n      \"cancel\": \"Cancel\",\n      \"delete\": \"Delete\",\n      \"edit\": \"Edit\",\n      \"add\": \"Add\",\n      \"create\": \"Create\",\n      \"update\": \"Update\",\n      \"search\": \"Search\",\n      \"refresh\": \"Refresh\",\n      \"export\": \"Export\",\n      \"import\": \"Import\",\n      \"confirm\": \"Confirm\",\n      \"close\": \"Close\",\n      \"submit\": \"Submit\",\n      \"reset\": \"Reset\",\n      \"copy\": \"Copy\",\n      \"download\": \"Download\",\n      \"upload\": \"Upload\",\n      \"view\": \"View\",\n      \"details\": \"Details\",\n      \"back\": \"Back\",\n      \"next\": \"Next\",\n      \"previous\": \"Previous\",\n      \"start\": \"Start\",\n      \"stop\": \"Stop\",\n      \"pause\": \"Pause\",\n      \"resume\": \"Resume\",\n      \"retry\": \"Retry\",\n      \"snapshot\": \"Details\",\n      \"openMenu\": \"Open menu\",\n      \"selectAll\": \"Select all\",\n      \"deselectAll\": \"Deselect all\",\n      \"selectRow\": \"Select row\",\n      \"website\": \"Website\",\n      \"description\": \"Description\",\n      \"processing\": \"Processing...\",\n      \"confirmDelete\": \"Confirm Delete\",\n      \"deleteConfirmMessage\": \"Are you sure you want to delete {count} selected items? This action cannot be undone.\"\n    },\n    \"yamlEditor\": {\n      \"syntaxError\": \"Syntax Error\",\n      \"syntaxValid\": \"Syntax Valid\",\n      \"errorLocation\": \"Line {line}, Column {column}\",\n      \"loading\": \"Loading editor...\",\n      \"duplicateKey\": \"Duplicate key '{key}' found. Later values will override earlier ones. Please remove duplicates.\"\n    },\n    \"theme\": {\n      \"switchToLight\": \"Switch to light mode\",\n      \"switchToDark\": \"Switch to dark mode\",\n      \"switchLanguage\": \"Switch language\",\n      \"switchColor\": \"Switch theme color\"\n    },\n    \"download\": {\n      \"all\": \"Download All\",\n      \"selected\": \"Download Selected\",\n      \"important\": \"Download Important\"\n    },\n    \"ui\": {\n      \"toggleSidebar\": \"Toggle Sidebar\",\n      \"loading\": \"Loading\",\n      \"commandDialog\": \"Command Dialog\"\n    },\n    \"dropzone\": {\n      \"uploadFile\": \"Upload file\",\n      \"uploadFiles\": \"Upload files\",\n      \"dragOrClick\": \"Drag files here or click to select\",\n      \"dragOrClickReplace\": \"Drag or click to replace files\",\n      \"moreFiles\": \"{files} and {count} more files\",\n      \"supports\": \"Supports\",\n      \"minimum\": \"minimum\",\n      \"maximum\": \"maximum\",\n      \"sizeBetween\": \"size between {min} and {max}\"\n    },\n    \"status\": {\n      \"loading\": \"Loading...\",\n      \"pageLoading\": \"Loading page...\",\n      \"success\": \"Operation successful\",\n      \"error\": \"Operation failed\",\n      \"noData\": \"No data\",\n      \"pending\": \"Pending\",\n      \"running\": \"Running\",\n      \"completed\": \"Completed\",\n      \"failed\": \"Failed\",\n      \"cancelled\": \"Cancelled\",\n      \"active\": \"Active\",\n      \"inactive\": \"Inactive\",\n      \"enabled\": \"Enabled\",\n      \"disabled\": \"Disabled\",\n      \"creating\": \"Creating...\",\n      \"updating\": \"Updating...\",\n      \"deleting\": \"Deleting...\",\n      \"removing\": \"Removing...\",\n      \"unlinking\": \"Unlinking...\",\n      \"batchCreating\": \"Batch creating...\",\n      \"batchDeleting\": \"Batch deleting...\",\n      \"batchRemoving\": \"Batch removing...\",\n      \"updateSuccess\": \"Update successful\",\n      \"updateFailed\": \"Update failed\",\n      \"uploading\": \"Uploading...\"\n    },\n    \"pagination\": {\n      \"page\": \"Page {current} of {total}\",\n      \"rowsPerPage\": \"Rows per page\",\n      \"total\": \"{count} total\",\n      \"first\": \"First\",\n      \"last\": \"Last\",\n      \"previous\": \"Previous\",\n      \"next\": \"Next\",\n      \"goTo\": \"Go to\"\n    },\n    \"time\": {\n      \"justNow\": \"Just now\",\n      \"minutesAgo\": \"{count} minutes ago\",\n      \"hoursAgo\": \"{count} hours ago\",\n      \"daysAgo\": \"{count} days ago\",\n      \"weeksAgo\": \"{count} weeks ago\",\n      \"monthsAgo\": \"{count} months ago\",\n      \"yearsAgo\": \"{count} years ago\"\n    },\n    \"confirm\": {\n      \"title\": \"Confirm Action\",\n      \"deleteTitle\": \"Confirm Delete\",\n      \"deleteMessage\": \"Are you sure you want to delete? This action cannot be undone.\",\n      \"bulkDeleteTitle\": \"Confirm Bulk Delete\",\n      \"bulkDeleteMessage\": \"Are you sure you want to delete {count} selected items? This action cannot be undone.\",\n      \"unlinkTitle\": \"Confirm Unlink\",\n      \"unlinkMessage\": \"Are you sure you want to unlink? This will only remove the association, the data itself will not be deleted.\",\n      \"bulkUnlinkTitle\": \"Confirm Bulk Unlink\",\n      \"bulkUnlinkMessage\": \"Are you sure you want to unlink {count} selected items? The data itself will not be deleted.\",\n      \"stopTitle\": \"Confirm Stop\",\n      \"stopMessage\": \"Are you sure you want to stop this task?\",\n      \"yes\": \"Yes\",\n      \"no\": \"No\",\n      \"deleteVulnMessage\": \"This action cannot be undone. This will permanently delete vulnerability \\\"{name}\\\" and its related data.\",\n      \"bulkDeleteVulnMessage\": \"This action cannot be undone. This will permanently delete the following {count} vulnerabilities and their related data.\",\n      \"deleteVulnCount\": \"Delete {count} vulnerabilities\",\n      \"deleteScanMessage\": \"This action cannot be undone. This will permanently delete scan record \\\"{name}\\\" and its related data.\",\n      \"bulkDeleteScanMessage\": \"This action cannot be undone. This will permanently delete the following {count} scan records and their related data.\",\n      \"deleteScanCount\": \"Delete {count} records\",\n      \"stopScanTitle\": \"Confirm Stop Scan\",\n      \"stopScanMessage\": \"Are you sure you want to stop scan task \\\"{name}\\\"? The scan will be aborted, but collected data will be preserved.\",\n      \"stopScanAction\": \"Stop Scan\",\n      \"deleteOrgMessage\": \"This will permanently delete organization \\\"{name}\\\" and unlink its domains. The domains themselves will not be deleted.\",\n      \"bulkDeleteOrgMessage\": \"This will permanently delete the following {count} organizations and unlink their domains. The domains themselves will not be deleted.\",\n      \"deleteOrgCount\": \"Delete {count} organizations\",\n      \"deleting\": \"Deleting...\",\n      \"deleteToolMessage\": \"This action cannot be undone. This will permanently delete opensource tool \\\"{name}\\\" and its configuration.\",\n      \"deleteCustomToolMessage\": \"This action cannot be undone. This will permanently delete custom tool \\\"{name}\\\" and its configuration.\",\n      \"deleteTargetTitle\": \"Confirm Delete Target\",\n      \"deleteTargetMessage\": \"This action cannot be undone. This will permanently delete target \\\"{name}\\\" and all its associated data.\",\n      \"bulkDeleteTargetTitle\": \"Confirm Bulk Delete Targets\",\n      \"bulkDeleteTargetMessage\": \"This action cannot be undone. This will permanently delete the following {count} targets and all their associated data.\",\n      \"deleteTargetCount\": \"Confirm delete {count} targets\",\n      \"confirmDelete\": \"Confirm Delete\",\n      \"confirmUnlink\": \"Confirm Unlink\",\n      \"confirmUnlinkCount\": \"Confirm unlink {count} items\",\n      \"unlinkTargetMessage\": \"Are you sure you want to unlink target \\\"{name}\\\" from this organization? This will only remove the association, the target itself will not be deleted.\",\n      \"bulkUnlinkTargetMessage\": \"This will unlink the following {count} targets from this organization. The targets themselves will not be deleted.\",\n      \"deleteScheduledScanMessage\": \"Are you sure you want to delete scheduled scan task \\\"{name}\\\"? This action cannot be undone.\",\n      \"deleteEngineMessage\": \"Are you sure you want to delete engine \\\"{name}\\\"? This action cannot be undone.\",\n      \"deleteNucleiRepoMessage\": \"Are you sure you want to delete repository \\\"{name}\\\"? This action cannot be undone.\",\n      \"deleteWordlistMessage\": \"Are you sure you want to delete wordlist \\\"{name}\\\"? This action cannot be undone.\"\n    }\n  },\n  \"navigation\": {\n    \"mainFeatures\": \"Main Features\",\n    \"dashboard\": \"Dashboard\",\n    \"search\": \"Search\",\n    \"organization\": \"Organization\",\n    \"target\": \"Targets\",\n    \"vulnerabilities\": \"Vulnerabilities\",\n    \"scan\": \"Scan\",\n    \"scanHistory\": \"Scan History\",\n    \"scheduledScan\": \"Scheduled Scan\",\n    \"scanEngine\": \"Scan Engine\",\n    \"tools\": \"Tools\",\n    \"wordlists\": \"Wordlists\",\n    \"fingerprints\": \"Fingerprints\",\n    \"nucleiTemplates\": \"Nuclei Templates\",\n    \"settings\": \"Settings\",\n    \"workers\": \"Workers\",\n    \"systemLogs\": \"System Logs\",\n    \"notifications\": \"Notifications\",\n    \"apiKeys\": \"API Keys\",\n    \"globalBlacklist\": \"Global Blacklist\",\n    \"about\": \"About\"\n  },\n  \"search\": {\n    \"title\": \"Asset Search\",\n    \"hint\": \"Click search box to view available fields and syntax. Plain text defaults to hostname search\",\n    \"searching\": \"Searching...\",\n    \"loading\": \"Loading...\",\n    \"resultsCount\": \"Found {count} results\",\n    \"error\": \"Search failed, please try again later\",\n    \"noResults\": \"No matching assets found\",\n    \"noResultsHint\": \"Try adjusting your search criteria\",\n    \"vulnLoadError\": \"Failed to load vulnerability details\",\n    \"recentSearches\": \"Recent Searches\",\n    \"export\": \"Export\",\n    \"exporting\": \"Exporting...\",\n    \"exportSuccess\": \"Export successful\",\n    \"exportFailed\": \"Export failed\",\n    \"stats\": {\n      \"vulnerabilities\": \"Vulnerabilities\"\n    },\n    \"assetTypes\": {\n      \"website\": \"Website\",\n      \"endpoint\": \"Endpoint\"\n    },\n    \"fields\": {\n      \"host\": \"Hostname\",\n      \"url\": \"URL address\",\n      \"title\": \"Page title\",\n      \"tech\": \"Technology stack\",\n      \"status\": \"HTTP status code\",\n      \"body\": \"Response body content\",\n      \"header\": \"Response header content\"\n    },\n    \"table\": {\n      \"url\": \"URL\",\n      \"host\": \"Host\",\n      \"title\": \"Title\",\n      \"status\": \"Status\",\n      \"technologies\": \"Technologies\",\n      \"contentLength\": \"Content Length\",\n      \"location\": \"Location\",\n      \"webserver\": \"Web Server\",\n      \"contentType\": \"Content Type\",\n      \"responseBody\": \"Response Body\",\n      \"responseHeaders\": \"Response Headers\",\n      \"vhost\": \"VHost\",\n      \"createdAt\": \"Created At\",\n      \"gfPatterns\": \"GF Patterns\"\n    },\n    \"card\": {\n      \"title\": \"Title\",\n      \"expand\": \"Expand\",\n      \"collapse\": \"Collapse\",\n      \"vulnerabilities\": \"Vulnerabilities ({count})\",\n      \"vulnName\": \"Vulnerability Name\",\n      \"severity\": \"Severity\",\n      \"source\": \"Source\",\n      \"vulnType\": \"Vuln Type\"\n    },\n    \"vulnDetail\": {\n      \"title\": \"Vulnerability Details\",\n      \"name\": \"Vulnerability Name\",\n      \"source\": \"Source\",\n      \"type\": \"Vulnerability Type\",\n      \"url\": \"Vulnerability URL\"\n    }\n  },\n  \"dashboard\": {\n    \"title\": \"Dashboard\",\n    \"stats\": {\n      \"totalTargets\": \"Total Targets\",\n      \"totalVulnerabilities\": \"Total Vulnerabilities\",\n      \"activeScans\": \"Active Scans\",\n      \"completedScans\": \"Completed Scans\",\n      \"totalOrganizations\": \"Total Organizations\",\n      \"totalSubdomains\": \"Total Subdomains\",\n      \"totalEndpoints\": \"Total Endpoints\",\n      \"totalWebsites\": \"Total Websites\"\n    },\n    \"statCards\": {\n      \"assetsFound\": \"Assets Found\",\n      \"vulnsFound\": \"Vulnerabilities Found\",\n      \"monitoredTargets\": \"Monitored Targets\",\n      \"runningScans\": \"Running Scans\",\n      \"assetsFooter\": \"Subdomains + IPs + Endpoints + Websites\",\n      \"vulnsFooter\": \"All vulnerabilities from scans\",\n      \"targetsFooter\": \"Total targets added\",\n      \"scansFooter\": \"Currently running tasks\",\n      \"updatedAt\": \"Updated at {time}\",\n      \"noData\": \"No data\"\n    },\n    \"assetTrend\": {\n      \"title\": \"Asset Trend\",\n      \"description\": \"Updated hourly · Click line or legend to hide/show\",\n      \"noData\": \"No historical data\",\n      \"current\": \"Current\",\n      \"subdomains\": \"Subdomains\",\n      \"ips\": \"IPs\",\n      \"endpoints\": \"Endpoints\",\n      \"websites\": \"Websites\"\n    },\n    \"assetDistribution\": {\n      \"title\": \"Asset Distribution\",\n      \"description\": \"Asset count by type\",\n      \"totalAssets\": \"Total Assets\",\n      \"subdomains\": \"Subdomains\",\n      \"ipAddresses\": \"IP Addresses\",\n      \"endpoints\": \"Endpoints\",\n      \"websites\": \"Websites\",\n      \"count\": \"Count\"\n    },\n    \"vulnDistribution\": {\n      \"title\": \"Vulnerability Distribution\",\n      \"description\": \"By severity level\",\n      \"noData\": \"No vulnerability data\",\n      \"vulns\": \"Vulns\"\n    },\n    \"recentVulns\": {\n      \"title\": \"Recent Vulnerabilities\",\n      \"description\": \"Recently discovered security vulnerabilities\",\n      \"viewAll\": \"View All\",\n      \"noData\": \"No vulnerability data\"\n    }\n  },\n  \"dataTable\": {\n    \"columns\": \"Columns\",\n    \"filter\": \"Filter\",\n    \"selected\": \"{count} selected\",\n    \"noResults\": \"No results found\",\n    \"selectAll\": \"Select all\",\n    \"deselectAll\": \"Deselect all\",\n    \"showColumns\": \"Show columns\",\n    \"hideColumns\": \"Hide columns\",\n    \"sortAsc\": \"Sort ascending\",\n    \"sortDesc\": \"Sort descending\",\n    \"clearSort\": \"Clear sort\",\n    \"clearFilter\": \"Clear filter\"\n  },\n  \"filter\": {\n    \"fields\": {\n      \"ip\": \"IP address\",\n      \"port\": \"Port number\",\n      \"host\": \"Hostname\",\n      \"domain\": \"Domain name\",\n      \"url\": \"Full URL\",\n      \"status\": \"HTTP status code\",\n      \"title\": \"Page title\",\n      \"source\": \"Data source\",\n      \"path\": \"URL path\",\n      \"severity\": \"Vulnerability severity\",\n      \"name\": \"Name\",\n      \"type\": \"Type\"\n    },\n    \"syntax\": {\n      \"operators\": \"Operators\",\n      \"containsFuzzy\": \"contains (fuzzy)\",\n      \"exactMatch\": \"exact match\",\n      \"notEquals\": \"not equals\",\n      \"logic\": \"Logic\",\n      \"matchAny\": \"match any\",\n      \"matchAll\": \"match all\"\n    },\n    \"groups\": {\n      \"activeFilters\": \"Active filters\",\n      \"availableFields\": \"Available fields\",\n      \"syntax\": \"Syntax\",\n      \"examples\": \"Examples\"\n    },\n    \"empty\": \"Type to filter...\",\n    \"descriptions\": {\n      \"directoryUrl\": \"Directory URL\",\n      \"subdomainName\": \"Subdomain name\",\n      \"endpointUrl\": \"Endpoint URL\",\n      \"vulnType\": \"Vulnerability type\",\n      \"scannerSource\": \"Scanner source\"\n    }\n  },\n  \"validation\": {\n    \"required\": \"This field is required\",\n    \"invalidEmail\": \"Please enter a valid email\",\n    \"invalidUrl\": \"Please enter a valid URL\",\n    \"invalidDomain\": \"Please enter a valid domain\",\n    \"invalidIp\": \"Please enter a valid IP address\",\n    \"minLength\": \"Minimum {min} characters required\",\n    \"maxLength\": \"Maximum {max} characters allowed\",\n    \"minValue\": \"Minimum value is {min}\",\n    \"maxValue\": \"Maximum value is {max}\",\n    \"pattern\": \"Invalid format\"\n  },\n  \"auth\": {\n    \"title\": \"XingRin\",\n    \"subtitle\": \"Automated Asset Discovery & Vulnerability Scanning Platform\",\n    \"login\": \"Login\",\n    \"pageTitle\": \"Login - XingRin | Attack Surface Management\",\n    \"pageDescription\": \"XingRin - Attack Surface Management (ASM) Platform, providing automated asset discovery and vulnerability scanning\",\n    \"loggingIn\": \"Logging in...\",\n    \"logout\": \"Logout\",\n    \"username\": \"Username\",\n    \"usernamePlaceholder\": \"Enter username\",\n    \"password\": \"Password\",\n    \"passwordPlaceholder\": \"Enter password\",\n    \"rememberMe\": \"Remember me\",\n    \"forgotPassword\": \"Forgot password\",\n    \"loginSuccess\": \"Login successful\",\n    \"loginFailed\": \"Login failed\",\n    \"logoutSuccess\": \"Logged out successfully\",\n    \"sessionExpired\": \"Session expired, please login again\",\n    \"changePassword\": {\n      \"title\": \"Change Password\",\n      \"desc\": \"Enter your current password and new password\",\n      \"currentPassword\": \"Current Password\",\n      \"newPassword\": \"New Password\",\n      \"confirmPassword\": \"Confirm New Password\",\n      \"passwordMismatch\": \"New password and confirmation do not match\",\n      \"passwordTooShort\": \"New password must be at least {min} characters\",\n      \"cancel\": \"Cancel\",\n      \"save\": \"Save\",\n      \"saving\": \"Saving...\"\n    }\n  },\n  \"organization\": {\n    \"title\": \"Organization Management\",\n    \"name\": \"Organization Name\",\n    \"description\": \"Description\",\n    \"addOrganization\": \"Add Organization\",\n    \"createOrganization\": \"Create Organization\",\n    \"editOrganization\": \"Edit Organization\",\n    \"deleteOrganization\": \"Delete Organization\",\n    \"searchPlaceholder\": \"Search organization name...\",\n    \"noResults\": \"No organizations\",\n    \"targetCount\": \"Target Count\",\n    \"notFound\": \"Organization Not Found\",\n    \"notFoundDesc\": \"Organization with ID {id} not found\",\n    \"noDescription\": \"No description\",\n    \"createdAt\": \"Created at {date}\",\n    \"targetCountLabel\": \"{count} targets\",\n    \"dialog\": {\n      \"addTitle\": \"Add New Organization\",\n      \"addDesc\": \"Fill in organization information to add to the system. You can also add targets. Fields marked with * are required.\",\n      \"editTitle\": \"Edit Organization\",\n      \"editDesc\": \"Modify organization basic information. Fields marked with * are required.\",\n      \"addButton\": \"Add Organization\",\n      \"orgName\": \"Organization Name\",\n      \"orgNamePlaceholder\": \"Enter organization name\",\n      \"orgDesc\": \"Organization Description\",\n      \"orgDescPlaceholder\": \"Enter organization description (optional)\",\n      \"addTargets\": \"Add Targets (optional)\",\n      \"targetsPlaceholder\": \"Enter targets, one per line\\nSupports domain, IP, CIDR\\nExample:\\nexample.com\\n192.168.1.1\\n10.0.0.0/8\",\n      \"targetCount\": \"{count} targets\",\n      \"invalidCount\": \"{count} invalid\",\n      \"invalidExample\": \"e.g., Line {line}: \\\"{target}\\\" - {error}\",\n      \"cancel\": \"Cancel\",\n      \"create\": \"Create Organization\",\n      \"creating\": \"Creating organization...\",\n      \"creatingTargets\": \"Creating targets...\",\n      \"update\": \"Update Organization\",\n      \"updating\": \"Updating...\",\n      \"reset\": \"Reset\",\n      \"changesDetected\": \"Changes detected, click update to save\",\n      \"characters\": \"{count}/{max} characters\"\n    },\n    \"validation\": {\n      \"nameMin\": \"Organization name must be at least {min} characters\",\n      \"nameMax\": \"Organization name cannot exceed {max} characters\",\n      \"descMax\": \"Description cannot exceed {max} characters\",\n      \"targetInvalid\": \"Invalid target format\"\n    },\n    \"linkTarget\": {\n      \"title\": \"Add Targets to Organization\",\n      \"description\": \"Enter targets to link to \\\"{name}\\\". Supports batch adding, one target per line. Fields marked with * are required.\",\n      \"targetLabel\": \"Targets\",\n      \"organizationLabel\": \"Organization\",\n      \"placeholder\": \"Enter targets, one per line\\nSupports domain, IP, CIDR\\nExample:\\nexample.com\\n192.168.1.1\\n10.0.0.0/8\",\n      \"targetCount\": \"{count} targets\",\n      \"invalidCount\": \"{count} invalid\",\n      \"invalidExample\": \"e.g., Line {line}: \\\"{target}\\\" - {error}\",\n      \"creating\": \"Creating...\",\n      \"createTarget\": \"Create Targets\",\n      \"validation\": {\n        \"required\": \"Please enter at least one target\",\n        \"invalidFormat\": \"Invalid target format\"\n      }\n    }\n  },\n  \"target\": {\n    \"title\": \"Target Management\",\n    \"name\": \"Target Name\",\n    \"domain\": \"Domain\",\n    \"description\": \"Description\",\n    \"addTarget\": \"Add Target\",\n    \"createTarget\": \"Create Target\",\n    \"editTarget\": \"Edit Target\",\n    \"deleteTarget\": \"Delete Target\",\n    \"organization\": \"Organization\",\n    \"types\": {\n      \"domain\": \"Domain\",\n      \"ip\": \"IP\",\n      \"cidr\": \"CIDR\"\n    },\n    \"dialog\": {\n      \"addTitle\": \"Add Target\",\n      \"addDesc\": \"Enter targets and link to organization. Supports batch adding, one target per line. Fields marked with * are required.\",\n      \"targetList\": \"Target List\",\n      \"targetPlaceholder\": \"Enter targets, one per line\\nSupports domain, IP, CIDR\\nExample:\\nexample.com\\n192.168.1.1\\n10.0.0.0/8\",\n      \"targetCount\": \"{count} targets\",\n      \"invalidCount\": \"{count} invalid targets, e.g., Line {line}: \\\"{target}\\\" - {error}\",\n      \"invalidFormat\": \"Invalid target format\",\n      \"linkOrganization\": \"Link Organization (optional)\",\n      \"selectOrganization\": \"Select organization\",\n      \"searchOrganization\": \"Search organization...\",\n      \"noOrganization\": \"No organization found\",\n      \"loading\": \"Loading...\",\n      \"orgPagination\": \"{total} organizations · Page {page} / {totalPages}\",\n      \"perPage\": \"Per page:\",\n      \"creating\": \"Creating...\",\n      \"addTarget\": \"Add Target\"\n    }\n  },\n  \"scan\": {\n    \"title\": \"Scan\",\n    \"startScan\": \"Start Scan\",\n    \"stopScan\": \"Stop Scan\",\n    \"scanType\": \"Scan Type\",\n    \"scanStatus\": \"Scan Status\",\n    \"scanProgress\": \"Scan Progress\",\n    \"scanResult\": \"Scan Result\",\n    \"editTask\": \"Edit Task\",\n    \"initiate\": {\n      \"title\": \"Initiate Scan\",\n      \"targetDesc\": \"For target\",\n      \"orgDesc\": \"For organization\",\n      \"selectEngine\": \"select scan engine\",\n      \"selectEngineTitle\": \"Select Engine\",\n      \"selectEngineHint\": \"Select an engine on the left to view configuration\",\n      \"loading\": \"Loading...\",\n      \"loadFailed\": \"Failed to load\",\n      \"noEngines\": \"No engines available\",\n      \"capabilities\": \"{count} capabilities\",\n      \"noConfig\": \"No config\",\n      \"initiating\": \"Initiating...\",\n      \"startScan\": \"Start Scan\",\n      \"selectedCount\": \"{count} engines selected\",\n      \"configTitle\": \"Scan Configuration\",\n      \"configEdited\": \"Edited\",\n      \"stepIndicator\": \"Step {current}/{total}\",\n      \"back\": \"Back\",\n      \"next\": \"Next\",\n      \"steps\": {\n        \"selectEngine\": \"Select Engine\",\n        \"editConfig\": \"Edit Config\"\n      },\n      \"presets\": {\n        \"title\": \"Quick Select\",\n        \"fullScan\": \"Full Scan\",\n        \"fullScanDesc\": \"Complete security assessment covering asset discovery to vulnerability detection\",\n        \"recon\": \"Reconnaissance\",\n        \"reconDesc\": \"Discover and identify target assets including subdomains, ports, sites and fingerprints\",\n        \"vulnScan\": \"Vulnerability Scan\",\n        \"vulnScanDesc\": \"Detect security vulnerabilities on known assets\",\n        \"custom\": \"Custom\",\n        \"customDesc\": \"Manually select engine combination\",\n        \"customHint\": \"Click to manually select engines\",\n        \"selectHint\": \"Please select a scan preset\",\n        \"selectEngines\": \"Select Engines\",\n        \"enginesCount\": \"engines\",\n        \"capabilities\": \"Capabilities\",\n        \"usedEngines\": \"Used Engines\",\n        \"noCapabilities\": \"Please select engines\"\n      },\n      \"overwriteConfirm\": {\n        \"title\": \"Overwrite Configuration\",\n        \"description\": \"You have manually edited the configuration. Changing engines will overwrite your changes. Continue?\",\n        \"cancel\": \"Cancel\",\n        \"confirm\": \"Overwrite\"\n      }\n    },\n    \"cron\": {\n      \"everyMinute\": \"Every minute\",\n      \"everyNMinutes\": \"Every {n} minutes\",\n      \"everyHour\": \"Every hour at {minute}\",\n      \"everyNHours\": \"Every {n} hours at {minute}\",\n      \"everyDay\": \"Every day at {time}\",\n      \"everyWeek\": \"Every {day} at {time}\",\n      \"everyMonth\": \"Every month on day {day} at {time}\",\n      \"weekdays\": [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]\n    },\n    \"history\": {\n      \"title\": \"Scan History\",\n      \"description\": \"View and manage all scan task records\",\n      \"startTime\": \"Start Time\",\n      \"endTime\": \"End Time\",\n      \"duration\": \"Duration\",\n      \"status\": \"Status\",\n      \"searchPlaceholder\": \"Search target name...\",\n      \"loadFailed\": \"Failed to load scan history\",\n      \"retry\": \"Retry\",\n      \"taskId\": \"Scan Task ID: {id}\",\n      \"breadcrumb\": {\n        \"scanHistory\": \"Scan History\"\n      },\n      \"tabs\": {\n        \"overview\": \"Overview\",\n        \"assets\": \"Assets\",\n        \"screenshots\": \"Screenshots\",\n        \"vulnerabilities\": \"Vulnerabilities\"\n      },\n      \"status\": {\n        \"completed\": \"Completed\",\n        \"running\": \"Running\",\n        \"failed\": \"Failed\",\n        \"pending\": \"Pending\",\n        \"cancelled\": \"Cancelled\",\n        \"initiated\": \"Waiting\"\n      },\n      \"overview\": {\n        \"loadError\": \"Failed to load scan data\",\n        \"startedAt\": \"Started\",\n        \"duration\": \"Duration\",\n        \"assetsTitle\": \"Discovered Assets\",\n        \"vulnerabilitiesTitle\": \"Vulnerabilities\",\n        \"stagesTitle\": \"Scan Progress\",\n        \"stagesCompleted\": \"completed\",\n        \"logsTitle\": \"Scan Logs\",\n        \"configTitle\": \"Configuration\",\n        \"autoRefresh\": \"Auto Refresh\",\n        \"noConfig\": \"No configuration available\",\n        \"noStages\": \"No stage progress available\",\n        \"totalFound\": \"total found\",\n        \"totalVulns\": \"{count} total\",\n        \"viewAll\": \"View All\",\n        \"cards\": {\n          \"websites\": \"Websites\",\n          \"subdomains\": \"Subdomains\",\n          \"ips\": \"IP Addresses\",\n          \"urls\": \"URLs\",\n          \"directories\": \"Directories\",\n          \"vulnerabilities\": \"Vulnerabilities\"\n        },\n        \"severity\": {\n          \"critical\": \"Critical\",\n          \"high\": \"High\",\n          \"medium\": \"Medium\",\n          \"low\": \"Low\"\n        }\n      },\n      \"stats\": {\n        \"totalScans\": \"Total Scans\",\n        \"running\": \"Running\",\n        \"vulnsFound\": \"Vulns Found\",\n        \"assetsFound\": \"Assets Found\",\n        \"allScanTasks\": \"All scan tasks\",\n        \"runningScans\": \"Running scans\",\n        \"completedScansFound\": \"Found in completed scans\",\n        \"assetTypes\": \"Subdomains + IPs + Endpoints + Websites\",\n        \"all\": \"All\"\n      }\n    },\n    \"progress\": {\n      \"title\": \"Scan Progress\",\n      \"target\": \"Target\",\n      \"engine\": \"Engine\",\n      \"startTime\": \"Start Time\",\n      \"status\": \"Status\",\n      \"errorReason\": \"Error Reason\",\n      \"totalProgress\": \"Total Progress\",\n      \"tab_stages\": \"Stages\",\n      \"tab_logs\": \"Logs\",\n      \"status_running\": \"Scanning\",\n      \"status_cancelled\": \"Cancelled\",\n      \"status_completed\": \"Completed\",\n      \"status_failed\": \"Failed\",\n      \"status_initiated\": \"Waiting\",\n      \"stage_running\": \"Running\",\n      \"stage_pending\": \"Pending\",\n      \"stage_failed\": \"Failed\",\n      \"stage_cancelled\": \"Cancelled\",\n      \"stages\": {\n        \"subdomainDiscovery\": \"Subdomain Discovery\",\n        \"portScan\": \"Port Scan\",\n        \"siteScan\": \"Site Scan\",\n        \"fingerprintDetect\": \"Fingerprint Detection\",\n        \"directoryScan\": \"Directory Scan\",\n        \"urlFetch\": \"URL Fetch\",\n        \"vulnScan\": \"Vulnerability Scan\",\n        \"subdomain_discovery\": \"Subdomain Discovery\",\n        \"port_scan\": \"Port Scan\",\n        \"site_scan\": \"Site Scan\",\n        \"fingerprint_detect\": \"Fingerprint Detection\",\n        \"directory_scan\": \"Directory Scan\",\n        \"url_fetch\": \"URL Fetch\",\n        \"vuln_scan\": \"Vulnerability Scan\",\n        \"screenshot\": \"Screenshot\"\n      }\n    },\n    \"scheduled\": {\n      \"title\": \"Scheduled Scan\",\n      \"description\": \"Configure and manage scheduled scan tasks\",\n      \"searchPlaceholder\": \"Search task name...\",\n      \"cronExpression\": \"Cron Expression\",\n      \"nextRun\": \"Next Run\",\n      \"lastRun\": \"Last Run\",\n      \"enabled\": \"Enabled\",\n      \"disabled\": \"Disabled\",\n      \"createTitle\": \"Create Scheduled Scan\",\n      \"createDesc\": \"Configure scheduled scan task and set execution plan\",\n      \"editTitle\": \"Edit Scheduled Scan\",\n      \"editDesc\": \"Modify scheduled scan task configuration\",\n      \"stepIndicator\": \"Step {current}/{total}\",\n      \"steps\": {\n        \"basicInfo\": \"Basic Info\",\n        \"scanMode\": \"Scan Mode\",\n        \"selectTarget\": \"Select Target\",\n        \"selectEngine\": \"Select Engine\",\n        \"editConfig\": \"Edit Config\",\n        \"scheduleSettings\": \"Schedule Settings\"\n      },\n      \"form\": {\n        \"taskName\": \"Task Name\",\n        \"taskNamePlaceholder\": \"e.g., Daily Security Scan\",\n        \"taskNameDesc\": \"Set an easily identifiable name for the scheduled task\",\n        \"taskNameRequired\": \"Please enter task name\",\n        \"scanEngine\": \"Scan Engine\",\n        \"scanEnginePlaceholder\": \"Select scan engine\",\n        \"scanEngineDesc\": \"Select engine to auto-fill configuration, or edit directly\",\n        \"scanEngineRequired\": \"Please select a scan engine\",\n        \"configuration\": \"Scan Configuration\",\n        \"configurationPlaceholder\": \"Enter YAML scan configuration...\",\n        \"configurationDesc\": \"YAML format scan configuration, select engine to auto-fill or edit manually\",\n        \"configurationRequired\": \"Please enter scan configuration\",\n        \"yamlInvalid\": \"Invalid YAML configuration, please check syntax\",\n        \"configEdited\": \"Edited\",\n        \"selectScanMode\": \"Select Scan Mode\",\n        \"organizationScan\": \"Organization Scan\",\n        \"organizationScanDesc\": \"Select organization, dynamically fetch all targets at execution\",\n        \"targetScan\": \"Target Scan\",\n        \"targetScanDesc\": \"Select fixed target list for scanning\",\n        \"organizationScanHint\": \"Organization Scan: Dynamically fetches all targets under the organization at each execution, newly added targets will also be scanned\",\n        \"targetScanHint\": \"Target Scan: Scans a fixed target list, newly added targets will not be scanned\",\n        \"selectOrganization\": \"Select Organization\",\n        \"selectTarget\": \"Select Scan Target\",\n        \"searchOrganization\": \"Search organization name...\",\n        \"searchTarget\": \"Search target name...\",\n        \"noOrganization\": \"No organization found\",\n        \"noTarget\": \"No target found\",\n        \"targetCount\": \"{count} targets\",\n        \"selectedOrganization\": \"Organization selected, will dynamically scan all targets under this organization at execution\",\n        \"selectedTarget\": \"Target selected\",\n        \"cronExpression\": \"Cron Expression\",\n        \"cronPlaceholder\": \"min hour day month week (e.g., 0 2 * * *)\",\n        \"cronFormat\": \"Format: min(0-59) hour(0-23) day(1-31) month(1-12) week(0-6, 0=Sunday)\",\n        \"cronRequired\": \"Invalid Cron expression format, requires 5 parts: min hour day month week\",\n        \"quickSelect\": \"Quick Select\",\n        \"executionPreview\": \"Execution Preview\",\n        \"valid\": \"Valid\",\n        \"nextExecutionTime\": \"Next execution time:\",\n        \"upcoming\": \"(upcoming)\",\n        \"invalidExpression\": \"Invalid expression\",\n        \"scanScope\": \"Scan Scope\",\n        \"organizationMode\": \"Organization Scan\",\n        \"organizationModeHint\": \"In organization scan mode, all targets under this organization will be dynamically fetched at execution\",\n        \"noAvailableTarget\": \"No available targets\",\n        \"noEngine\": \"No engines available\",\n        \"noConfig\": \"No config\",\n        \"capabilitiesCount\": \"{count} capabilities\",\n        \"selected\": \"Selected\",\n        \"selectedEngines\": \"{count} engines selected\",\n        \"scanTarget\": \"Scan Target\",\n        \"presetTargetHint\": \"Target is preset and cannot be changed. To scan other targets, create from the global scheduled scans page.\"\n      },\n      \"presets\": {\n        \"everyHour\": \"Every Hour\",\n        \"daily2am\": \"Daily at 2 AM\",\n        \"daily4am\": \"Daily at 4 AM\",\n        \"weekly\": \"Weekly Monday at 2 AM\",\n        \"monthly\": \"Monthly 1st at 2 AM\",\n        \"everyMinute\": \"Every Minute\",\n        \"every5Minutes\": \"Every 5 Minutes\"\n      },\n      \"buttons\": {\n        \"previous\": \"Previous\",\n        \"next\": \"Next\",\n        \"createTask\": \"Create Task\",\n        \"saveChanges\": \"Save Changes\",\n        \"cancel\": \"Cancel\"\n      },\n      \"toast\": {\n        \"selectOrganization\": \"Please select an organization\",\n        \"selectTarget\": \"Please select a scan target\",\n        \"configConflict\": \"Configuration conflict\"\n      },\n      \"overwriteConfirm\": {\n        \"title\": \"Overwrite Configuration\",\n        \"description\": \"You have manually edited the configuration. Changing engines will overwrite your changes. Do you want to continue?\",\n        \"cancel\": \"Cancel\",\n        \"confirm\": \"Overwrite\"\n      }\n    },\n    \"engine\": {\n      \"title\": \"Scan Engine\",\n      \"name\": \"Engine Name\",\n      \"type\": \"Engine Type\",\n      \"config\": \"Configuration\",\n      \"searchPlaceholder\": \"Search engines...\",\n      \"createEngine\": \"Create Engine\",\n      \"engineList\": \"Engine List\",\n      \"noMatchingEngine\": \"No matching engine found\",\n      \"noEngines\": \"No engines yet, please create one\",\n      \"featuresEnabled\": \"{count} features enabled\",\n      \"featuresCount\": \"{count} features\",\n      \"updatedAt\": \"Updated at\",\n      \"enabledFeatures\": \"Enabled Features\",\n      \"configPreview\": \"Configuration Preview\",\n      \"editConfig\": \"Edit Config\",\n      \"selectEngineHint\": \"Select an engine from the left to view details\",\n      \"features\": {\n        \"subdomain_discovery\": \"Subdomain Discovery\",\n        \"port_scan\": \"Port Scan\",\n        \"site_scan\": \"Site Scan\",\n        \"fingerprint_detect\": \"Fingerprint Detection\",\n        \"directory_scan\": \"Directory Scan\",\n        \"screenshot\": \"Screenshot\",\n        \"url_fetch\": \"URL Fetch\",\n        \"vuln_scan\": \"Vulnerability Scan\"\n      },\n      \"create\": {\n        \"title\": \"Create Scan Engine\",\n        \"desc\": \"Create a new scan engine configuration using Monaco Editor to edit YAML config files with syntax highlighting, auto-completion and error hints.\",\n        \"engineName\": \"Engine Name\",\n        \"engineNamePlaceholder\": \"Enter engine name, e.g., Full Scan Engine\",\n        \"yamlConfig\": \"YAML Configuration\",\n        \"syntaxError\": \"Syntax Error\",\n        \"syntaxValid\": \"Syntax Valid\",\n        \"loadingEditor\": \"Loading editor...\",\n        \"errorLocation\": \"Line {line}, Column {column}\",\n        \"confirmClose\": \"You have unsaved changes, are you sure you want to close?\",\n        \"creating\": \"Creating...\",\n        \"createEngine\": \"Create Engine\"\n      },\n      \"edit\": {\n        \"title\": \"Edit Engine Config - {name}\",\n        \"desc\": \"Edit engine YAML configuration using Monaco Editor with syntax highlighting, auto-completion and error hints.\",\n        \"yamlConfig\": \"YAML Configuration\",\n        \"syntaxError\": \"Syntax Error\",\n        \"syntaxValid\": \"Syntax Valid\",\n        \"loadingEditor\": \"Loading editor...\",\n        \"errorLocation\": \"Line {line}, Column {column}\",\n        \"unsavedChanges\": \"You have unsaved changes\",\n        \"confirmClose\": \"You have unsaved changes, are you sure you want to close?\",\n        \"saving\": \"Saving...\",\n        \"saveConfig\": \"Save Configuration\"\n      }\n    }\n  },\n  \"vulnerability\": {\n    \"title\": \"Vulnerabilities\",\n    \"name\": \"Vulnerability Name\",\n    \"severity\": \"Severity\",\n    \"critical\": \"Critical\",\n    \"high\": \"High\",\n    \"medium\": \"Medium\",\n    \"low\": \"Low\",\n    \"info\": \"Info\",\n    \"status\": \"Status\",\n    \"open\": \"Open\",\n    \"confirmed\": \"Confirmed\",\n    \"fixed\": \"Fixed\",\n    \"falsePositive\": \"False Positive\",\n    \"description\": \"Description\",\n    \"solution\": \"Solution\",\n    \"reference\": \"Reference\"\n  },\n  \"tools\": {\n    \"title\": \"Tools\",\n    \"wordlists\": {\n      \"title\": \"Wordlists\",\n      \"name\": \"Wordlist Name\",\n      \"type\": \"Type\",\n      \"count\": \"Entry Count\",\n      \"upload\": \"Upload Wordlist\",\n      \"download\": \"Download Wordlist\",\n      \"uploadDialog\": {\n        \"title\": \"Upload Wordlist\",\n        \"desc\": \"Upload wordlist file, workers will download as needed after backend saves it\",\n        \"dragHint\": \"Drag file here\",\n        \"selectFile\": \"Select file\",\n        \"fileHint\": \"Supports .txt files, max 50MB\",\n        \"namePlaceholder\": \"e.g., Common directories\",\n        \"descPlaceholder\": \"e.g., Based on dirsearch\",\n        \"descLabel\": \"Description (optional)\",\n        \"cancel\": \"Cancel\",\n        \"uploading\": \"Uploading...\",\n        \"uploadButton\": \"Upload Wordlist\"\n      },\n      \"editDialog\": {\n        \"title\": \"Edit Wordlist - {name}\",\n        \"desc\": \"Edit wordlist content, one entry per line. Line count, file size and hash will be updated after saving.\",\n        \"content\": \"Wordlist Content\",\n        \"lines\": \"{count} lines\",\n        \"hash\": \"Hash\",\n        \"loading\": \"Loading wordlist content...\",\n        \"loadingEditor\": \"Loading editor...\",\n        \"unsavedChanges\": \"You have unsaved changes\",\n        \"confirmClose\": \"You have unsaved changes, are you sure you want to close?\",\n        \"cancel\": \"Cancel\",\n        \"saving\": \"Saving...\",\n        \"save\": \"Save Wordlist\"\n      }\n    },\n    \"fingerprints\": {\n      \"title\": \"Fingerprints\",\n      \"name\": \"Fingerprint Name\",\n      \"category\": \"Category\",\n      \"import\": \"Import Fingerprints\",\n      \"export\": \"Export Fingerprints\",\n      \"pageDescription\": \"Web fingerprint rule management\",\n      \"helpText\": \"• EHole: Red team asset identification tool, supports keyword, favicon hash and other identification methods\\n• Goby: Attack surface mapping tool, contains a large number of web applications and device fingerprints\\n• Wappalyzer: Browser extension that can identify the technology stack used by websites\\n• Fingers: HTTP fingerprint library with detailed rule matching\\n• FingerPrintHub: Nuclei-style fingerprint templates with HTTP matchers\\n• ARL: Asset Reconnaissance Lighthouse fingerprint rules in YAML format\",\n      \"actions\": {\n        \"operations\": \"Actions\",\n        \"exportAll\": \"Export All Fingerprints\",\n        \"deleteSelected\": \"Delete Selected\",\n        \"deleteAll\": \"Delete All\",\n        \"addFingerprint\": \"Add Fingerprint\",\n        \"addSingle\": \"Add Single\",\n        \"importFile\": \"Import File\"\n      },\n      \"dialogs\": {\n        \"exportTitle\": \"Export All Fingerprints\",\n        \"exportDesc\": \"Export all {count} fingerprints as JSON file.\",\n        \"deleteSelectedTitle\": \"Delete Selected Fingerprints\",\n        \"deleteSelectedDesc\": \"Are you sure you want to delete {count} selected fingerprints? This action cannot be undone.\",\n        \"deleteAllTitle\": \"Delete All Fingerprints\",\n        \"deleteAllDesc\": \"Are you sure you want to delete all {count} fingerprints? This action cannot be undone.\",\n        \"confirmExport\": \"Confirm Export\",\n        \"confirmDelete\": \"Confirm Delete\"\n      },\n      \"ehole\": {\n        \"addTitle\": \"Add EHole Fingerprint\",\n        \"editTitle\": \"Edit EHole Fingerprint\",\n        \"addDesc\": \"Add a new fingerprint rule\",\n        \"editDesc\": \"Modify fingerprint rule configuration\"\n      },\n      \"goby\": {\n        \"addTitle\": \"Add Goby Fingerprint\",\n        \"editTitle\": \"Edit Goby Fingerprint\",\n        \"addDesc\": \"Add a new fingerprint rule\",\n        \"editDesc\": \"Modify fingerprint rule configuration\"\n      },\n      \"wappalyzer\": {\n        \"addTitle\": \"Add Wappalyzer Fingerprint\",\n        \"editTitle\": \"Edit Wappalyzer Fingerprint\",\n        \"addDesc\": \"Add a new fingerprint rule\",\n        \"editDesc\": \"Modify fingerprint rule configuration\"\n      },\n      \"fingers\": {\n        \"addTitle\": \"Add Fingers Fingerprint\",\n        \"editTitle\": \"Edit Fingers Fingerprint\",\n        \"addDesc\": \"Add a new HTTP fingerprint rule\",\n        \"editDesc\": \"Modify fingerprint rule configuration\"\n      },\n      \"fingerprinthub\": {\n        \"addTitle\": \"Add FingerPrintHub Fingerprint\",\n        \"editTitle\": \"Edit FingerPrintHub Fingerprint\",\n        \"addDesc\": \"Add a new Nuclei-style fingerprint template\",\n        \"editDesc\": \"Modify fingerprint template configuration\"\n      },\n      \"arl\": {\n        \"addTitle\": \"Add ARL Fingerprint\",\n        \"editTitle\": \"Edit ARL Fingerprint\",\n        \"addDesc\": \"Add a new ARL fingerprint rule\",\n        \"editDesc\": \"Modify fingerprint rule configuration\"\n      },\n      \"toast\": {\n        \"createSuccess\": \"Created successfully\",\n        \"updateSuccess\": \"Updated successfully\",\n        \"createFailed\": \"Failed to create\",\n        \"updateFailed\": \"Failed to update\",\n        \"exportSuccess\": \"Exported successfully\",\n        \"exportFailed\": \"Failed to export\",\n        \"deleteSuccess\": \"Deleted successfully: {count} items\",\n        \"deleteFailed\": \"Failed to delete\"\n      },\n      \"form\": {\n        \"cmsPlaceholder\": \"e.g., WordPress, Nginx\",\n        \"cmsRequired\": \"CMS name is required\",\n        \"keywordPlaceholder\": \"Multiple keywords separated by commas\",\n        \"keywordRequired\": \"Keyword is required\",\n        \"typePlaceholder\": \"e.g., CMS, Server\",\n        \"namePlaceholder\": \"e.g., Apache, Nginx\",\n        \"nameRequired\": \"Product name is required\",\n        \"logicPlaceholder\": \"e.g., a||b, (a&&b)||c\",\n        \"logicRequired\": \"Logic expression is required\",\n        \"featurePlaceholder\": \"Match feature\",\n        \"appNamePlaceholder\": \"e.g., WordPress, React\",\n        \"appNameRequired\": \"Application name is required\",\n        \"catsPlaceholder\": \"e.g., 1, 6, 12\",\n        \"descPlaceholder\": \"Application description\",\n        \"detectionRules\": \"Detection Rules\",\n        \"detectionRulesHint\": \"Use objects for JSON format, comma-separated for arrays\",\n        \"jsVariables\": \"JS Variables\",\n        \"metaTags\": \"Meta Tags\",\n        \"htmlContent\": \"HTML Content\",\n        \"implies\": \"Implies\",\n        \"cookies\": \"Cookies (JSON)\",\n        \"headers\": \"Headers (JSON)\",\n        \"scriptUrl\": \"Script URL\",\n        \"location\": \"Location\",\n        \"mark\": \"Mark\",\n        \"name\": \"Name\",\n        \"fpId\": \"Fingerprint ID\",\n        \"fpIdPlaceholder\": \"e.g., wordpress-detect\",\n        \"fpIdRequired\": \"Fingerprint ID is required\",\n        \"author\": \"Author\",\n        \"authorPlaceholder\": \"e.g., security-team\",\n        \"severity\": \"Severity\",\n        \"tags\": \"Tags\",\n        \"tagsPlaceholder\": \"e.g., cms, wordpress, php\",\n        \"http\": \"HTTP Matchers\",\n        \"httpPlaceholder\": \"JSON array of HTTP matching rules\",\n        \"httpRequired\": \"HTTP matchers are required\",\n        \"httpArrayRequired\": \"HTTP must be an array\",\n        \"httpJsonInvalid\": \"Invalid HTTP JSON format\",\n        \"metadata\": \"Metadata\",\n        \"metadataPlaceholder\": \"JSON object for metadata\",\n        \"metadataObjectRequired\": \"Metadata must be an object\",\n        \"metadataJsonInvalid\": \"Invalid metadata JSON format\",\n        \"sourceFile\": \"Source File\",\n        \"sourceFilePlaceholder\": \"e.g., wordpress.yaml\",\n        \"link\": \"Reference Link\",\n        \"linkPlaceholder\": \"e.g., https://example.com/docs\",\n        \"rule\": \"Match Rules\",\n        \"rulePlaceholder\": \"JSON array of matching rules\",\n        \"ruleRequired\": \"Match rules are required\",\n        \"ruleArrayRequired\": \"Rules must be an array\",\n        \"ruleJsonInvalid\": \"Invalid rule JSON format\",\n        \"tag\": \"Tags\",\n        \"tagPlaceholder\": \"e.g., cms, framework (comma-separated)\",\n        \"focusLabel\": \"Mark as focus\",\n        \"defaultPort\": \"Default Ports\",\n        \"defaultPortPlaceholder\": \"e.g., 80, 443, 8080 (comma-separated)\",\n        \"arlNamePlaceholder\": \"e.g., Nginx, Apache\",\n        \"arlRule\": \"ARL Rule\",\n        \"arlRulePlaceholder\": \"body=\\\"nginx\\\" || header=\\\"nginx\\\"\",\n        \"arlRuleRequired\": \"ARL rule is required\",\n        \"arlRuleHint\": \"Supports body, header, title matchers. Use || and && to combine conditions\"\n      },\n      \"loadFailed\": \"Failed to load\",\n      \"loadError\": \"Error loading fingerprint data\",\n      \"reload\": \"Reload\",\n      \"filter\": {\n        \"ehole\": {\n          \"cms\": \"Product/CMS name\",\n          \"method\": \"Match method (keyword, faviconhash...)\",\n          \"location\": \"Match location (body, header, title)\",\n          \"type\": \"Category\",\n          \"isImportant\": \"Is important asset (true/false)\"\n        },\n        \"goby\": {\n          \"product\": \"Product name\",\n          \"logic\": \"Logic expression\"\n        },\n        \"wappalyzer\": {\n          \"name\": \"Application name\",\n          \"description\": \"Application description\",\n          \"website\": \"Website URL\",\n          \"cpe\": \"CPE identifier\",\n          \"implies\": \"Dependencies (e.g., PHP, MySQL)\"\n        },\n        \"fingers\": {\n          \"name\": \"Fingerprint name\",\n          \"link\": \"Reference link\",\n          \"tag\": \"Tags\",\n          \"focus\": \"Focus flag (true/false)\",\n          \"defaultPort\": \"Default ports\"\n        },\n        \"fingerprinthub\": {\n          \"fpId\": \"Fingerprint ID\",\n          \"name\": \"Fingerprint name\",\n          \"author\": \"Author\",\n          \"tags\": \"Tags\",\n          \"severity\": \"Severity\"\n        },\n        \"arl\": {\n          \"name\": \"Fingerprint name\",\n          \"rule\": \"Rule content\"\n        }\n      },\n      \"import\": {\n        \"eholeTitle\": \"Import EHole Fingerprints\",\n        \"eholeDesc\": \"Upload EHole format fingerprint file\",\n        \"eholeFormatHint\": \"{\\\"fingerprint\\\": [...]}\",\n        \"eholeInvalidMissing\": \"Invalid EHole format: missing fingerprint field\",\n        \"eholeInvalidArray\": \"Invalid EHole format: fingerprint must be an array\",\n        \"eholeInvalidFields\": \"Invalid EHole format: fingerprint missing required fields (cms, keyword)\",\n        \"gobyTitle\": \"Import Goby Fingerprints\",\n        \"gobyDesc\": \"Upload Goby format fingerprint file\",\n        \"gobyFormatHint\": \"[{...}] or {...}\",\n        \"gobyInvalidFields\": \"Invalid Goby format: fingerprint missing required fields (product, rule)\",\n        \"gobyInvalidFormat\": \"Invalid Goby format: must be array or object\",\n        \"wappalyzerTitle\": \"Import Wappalyzer Fingerprints\",\n        \"wappalyzerDesc\": \"Upload Wappalyzer format fingerprint file\",\n        \"wappalyzerFormatHint\": \"{\\\"apps\\\": {...}} or [{...}]\",\n        \"wappalyzerInvalidApps\": \"Invalid Wappalyzer format: apps/technologies must be an object\",\n        \"wappalyzerInvalidFormat\": \"Invalid Wappalyzer format\",\n        \"fingersTitle\": \"Import Fingers Fingerprints\",\n        \"fingersDesc\": \"Upload Fingers format fingerprint file\",\n        \"fingersFormatHint\": \"[{\\\"name\\\": ..., \\\"rule\\\": [...]}]\",\n        \"fingersInvalidFormat\": \"Invalid Fingers format: must be an array\",\n        \"fingersInvalidArray\": \"Invalid Fingers format: must be an array\",\n        \"fingersInvalidFields\": \"Invalid Fingers format: fingerprint missing required fields (name, rule)\",\n        \"fingerprinthubTitle\": \"Import FingerPrintHub Fingerprints\",\n        \"fingerprinthubDesc\": \"Upload FingerPrintHub format fingerprint file\",\n        \"fingerprinthubFormatHint\": \"[{\\\"id\\\": ..., \\\"info\\\": {...}, \\\"http\\\": [...]}]\",\n        \"fingerprinthubInvalidFormat\": \"Invalid FingerPrintHub format: must be an array\",\n        \"fingerprinthubInvalidArray\": \"Invalid FingerPrintHub format: must be an array\",\n        \"fingerprinthubInvalidFields\": \"Invalid FingerPrintHub format: fingerprint missing required fields\",\n        \"arlTitle\": \"Import ARL Fingerprints\",\n        \"arlDesc\": \"Upload ARL format fingerprint file\",\n        \"arlFormatHint\": \"YAML format with name and rule fields\",\n        \"arlInvalidFormat\": \"Invalid ARL format\",\n        \"arlInvalidArray\": \"Invalid ARL format: must be an array\",\n        \"arlInvalidFields\": \"Invalid ARL format: fingerprint missing required fields (name, rule)\",\n        \"emptyData\": \"Fingerprint data is empty\",\n        \"supportedFormat\": \"Supported format:\",\n        \"importing\": \"Importing...\",\n        \"importSuccessDetail\": \"Import successful: {created} created, {failed} failed\"\n      }\n    },\n    \"nuclei\": {\n      \"title\": \"Nuclei Templates\",\n      \"templateName\": \"Template Name\",\n      \"author\": \"Author\",\n      \"severity\": \"Severity\",\n      \"tags\": \"Tags\",\n      \"selectTemplate\": \"Select a template on the left to view content\",\n      \"useSearch\": \"Or use search to locate quickly\",\n      \"back\": \"Back\",\n      \"searchPlaceholder\": \"Search templates...\",\n      \"syncing\": \"Syncing...\",\n      \"sync\": \"Sync\",\n      \"templateDirectory\": \"Template Directory\",\n      \"templateCount\": \"{count} templates\",\n      \"noMatchingTemplate\": \"No matching templates found\",\n      \"noTemplateOrLoadFailed\": \"No templates or failed to load\",\n      \"repoName\": \"Repository #{id}\"\n    },\n    \"config\": {\n      \"addTool\": \"Add Tool\",\n      \"editTool\": \"Edit Tool\",\n      \"addNewTool\": \"Add New Tool\",\n      \"addCustomTool\": \"Add Custom Tool\",\n      \"editCustomTool\": \"Edit Custom Tool\",\n      \"dialogDesc\": \"Configure scan tool basic info and commands. Fields marked with * are required.\",\n      \"customDialogDesc\": \"Configure custom scan tool basic info. Fields marked with * are required.\",\n      \"basicInfo\": \"Basic Info\",\n      \"commandConfig\": \"Command Config\",\n      \"toolName\": \"Tool Name\",\n      \"toolNamePlaceholder\": \"e.g., Nuclei, Subfinder, HTTPX\",\n      \"toolNameMin\": \"Tool name must be at least 2 characters\",\n      \"toolNameMax\": \"Tool name cannot exceed 255 characters\",\n      \"repoUrl\": \"Repository URL\",\n      \"repoUrlPlaceholder\": \"https://github.com/projectdiscovery/nuclei\",\n      \"currentVersion\": \"Current Installed Version\",\n      \"versionPlaceholder\": \"v3.0.0\",\n      \"toolDesc\": \"Tool Description\",\n      \"toolDescPlaceholder\": \"Describe the tool's features and use cases...\",\n      \"categoryTags\": \"Category Tags\",\n      \"noCategories\": \"No categories available\",\n      \"installCommand\": \"Install Command\",\n      \"installCommandPlaceholder\": \"git clone https://github.com/user/tool\\nor\\ngo install -v github.com/tool@latest\",\n      \"installCommandRequired\": \"Install command is required\",\n      \"installCommandHint\": \"Examples:\",\n      \"installCommandGit\": \"Using git:\",\n      \"installCommandGo\": \"Using go:\",\n      \"installCommandNote\": \"Note: go get is no longer supported, please use go install\",\n      \"updateCommand\": \"Update Command\",\n      \"updateCommandPlaceholder\": \"git pull\\nor\\ngo install -v github.com/tool@latest\",\n      \"updateCommandRequired\": \"Update command is required\",\n      \"updateCommandGitHint\": \"For tools installed via git clone, recommend using\",\n      \"updateCommandGoHint\": \"For tools installed via go install, recommend using the same install command\",\n      \"versionCommand\": \"Version Command\",\n      \"versionCommandPlaceholder\": \"toolname --version\",\n      \"versionCommandRequired\": \"Version command is required\",\n      \"versionCommandAutoGenerated\": \"Auto-generated\",\n      \"versionCommandHint\": \"System will use this command to check tool version. Common formats:\",\n      \"characters\": \"{count}/{max} characters\",\n      \"cancel\": \"Cancel\",\n      \"creating\": \"Creating...\",\n      \"saving\": \"Saving...\",\n      \"createTool\": \"Create Tool\",\n      \"saveChanges\": \"Save Changes\",\n      \"customToolNamePlaceholder\": \"e.g., Custom Port Scanner\",\n      \"customToolDescPlaceholder\": \"Describe the tool's features and use cases...\",\n      \"toolPath\": \"Tool Path\",\n      \"toolPathPlaceholder\": \"e.g., /opt/security-tools/port-scanner\",\n      \"toolPathHint\": \"Directory path where the script or tool is located\",\n      \"repository\": \"Repository\",\n      \"uncategorized\": \"Uncategorized\",\n      \"noDescription\": \"No description\",\n      \"checking\": \"Checking...\",\n      \"checkUpdate\": \"Check Update\",\n      \"noTools\": \"No tools\",\n      \"noCustomTools\": \"No custom tools\",\n      \"directory\": \"Directory\"\n    },\n    \"commands\": {\n      \"searchPlaceholder\": \"Search command name...\"\n    }\n  },\n  \"settings\": {\n    \"title\": \"Settings\",\n    \"workers\": {\n      \"title\": \"Workers\",\n      \"name\": \"Worker Name\",\n      \"status\": \"Status\",\n      \"online\": \"Online\",\n      \"offline\": \"Offline\",\n      \"lastSeen\": \"Last Seen\",\n      \"addWorker\": \"Add Worker\",\n      \"editWorker\": \"Edit Worker\",\n      \"addWorkerTitle\": \"Add Worker\",\n      \"addWorkerDesc\": \"Enter SSH connection info for remote VPS. After adding, you can deploy scanning environment via \\\"Manage Deployment\\\"\",\n      \"editWorkerDesc\": \"Modify SSH connection info\",\n      \"noWorkers\": \"No Workers\",\n      \"noWorkersDesc\": \"Add remote VPS servers as scan workers to enable distributed scanning\",\n      \"addFirstWorker\": \"Add First Worker\",\n      \"confirmDelete\": \"Confirm Delete\",\n      \"confirmDeleteDesc\": \"Are you sure you want to delete worker \\\"{name}\\\"? This action cannot be undone.\",\n      \"confirmUninstall\": \"Confirm Uninstall\",\n      \"confirmUninstallDesc\": \"Are you sure you want to uninstall Agent and delete related containers on the remote host? This will not uninstall Docker.\",\n      \"workerNodes\": \"Worker Nodes\",\n      \"workerNodesDesc\": \"Manage distributed scan workers, support remote deployment and monitoring\",\n      \"local\": \"Local\",\n      \"memory\": \"Memory\",\n      \"manageDeploy\": \"Manage Deployment\",\n      \"edit\": \"Edit\",\n      \"delete\": \"Delete\",\n      \"learnMore\": \"Learn More\",\n      \"gotIt\": \"Got It\",\n      \"stats\": {\n        \"total\": \"Total\",\n        \"online\": \"Online\",\n        \"offline\": \"Offline\",\n        \"pending\": \"Pending\"\n      },\n      \"status\": {\n        \"online\": \"Online\",\n        \"offline\": \"Offline\",\n        \"pending\": \"Pending Deploy\",\n        \"deploying\": \"Deploying\",\n        \"updating\": \"Updating\",\n        \"outdated\": \"Outdated\"\n      },\n      \"helpDialog\": {\n        \"title\": \"What is Distributed Scanning?\",\n        \"desc\": \"Distributed scanning allows you to distribute scan tasks to multiple remote servers (scan workers) for parallel execution, significantly improving scanning efficiency.\"\n      },\n      \"banner\": {\n        \"title\": \"Distributed Scanning:\",\n        \"desc\": \"Add VPS Workers → One-click Deploy → Auto Task Distribution\"\n      },\n      \"steps\": {\n        \"step1Title\": \"Add Worker\",\n        \"step1Desc\": \"Click \\\"Add Worker\\\" button, fill in VPS SSH connection info (IP, port, username, password)\",\n        \"step2Title\": \"Deploy Environment\",\n        \"step2Desc\": \"Click \\\"Manage Deployment\\\" button, system will automatically install Docker and heartbeat agent via SSH\",\n        \"step3Title\": \"Auto Distribution\",\n        \"step3Desc\": \"After deployment, workers will report heartbeat automatically, scan tasks will be distributed based on load\"\n      },\n      \"form\": {\n        \"workerName\": \"Worker Name\",\n        \"workerNamePlaceholder\": \"e.g., Scanner-1\",\n        \"workerNameDesc\": \"Name to identify the worker\",\n        \"nameRequired\": \"Please enter worker name\",\n        \"nameTooLong\": \"Name cannot exceed 100 characters\",\n        \"hostIp\": \"IP Address\",\n        \"hostIpPlaceholder\": \"e.g., 192.168.1.100\",\n        \"ipRequired\": \"Please enter IP address\",\n        \"ipInvalid\": \"Please enter a valid IP address\",\n        \"ipNotEditable\": \"IP address cannot be modified\",\n        \"sshPort\": \"SSH Port\",\n        \"username\": \"Username\",\n        \"usernameRequired\": \"Please enter username\",\n        \"usernamePlaceholder\": \"e.g., root\",\n        \"password\": \"SSH Password\",\n        \"passwordPlaceholder\": \"Enter SSH password\",\n        \"passwordRequired\": \"Please enter SSH password\",\n        \"passwordKeepEmpty\": \"Leave empty to keep unchanged\",\n        \"passwordHint\": \"Password is only used for deployment and will not be stored in plain text\",\n        \"passwordEditHint\": \"Enter new password if you want to change it\",\n        \"creating\": \"Creating...\",\n        \"saving\": \"Saving...\",\n        \"createWorker\": \"Create Worker\",\n        \"saveChanges\": \"Save Changes\"\n      },\n      \"loadFailed\": \"Failed to load\",\n      \"loadError\": \"Error loading worker data\",\n      \"terminal\": {\n        \"connected\": \"Connected\",\n        \"disconnected\": \"Disconnected\",\n        \"connecting\": \"Establishing SSH connection...\",\n        \"wsConnected\": \"WebSocket connected\",\n        \"connectionClosed\": \"Connection closed\",\n        \"connectionFailed\": \"Connection failed\",\n        \"wsConnectionFailed\": \"WebSocket connection failed\",\n        \"waitingConnection\": \"Waiting for connection...\",\n        \"pendingHint\": \"Node not deployed, click the button on the right to start deploying scan environment\",\n        \"deployingHint\": \"Deploying, click to view progress\",\n        \"onlineHint\": \"Node running normally\",\n        \"offlineHint\": \"Node offline, try redeploying\",\n        \"updatingHint\": \"Auto-updating Agent...\",\n        \"outdatedHint\": \"Version outdated, needs update\",\n        \"reconnect\": \"Reconnect\",\n        \"startDeploy\": \"Start Deploy\",\n        \"viewProgress\": \"View Progress\",\n        \"redeploy\": \"Redeploy\",\n        \"uninstall\": \"Uninstall\"\n      }\n    },\n    \"systemLogs\": {\n      \"title\": \"System Logs\",\n      \"description\": \"Auto-refresh every 2 seconds (polling mode)\",\n      \"level\": \"Level\",\n      \"message\": \"Message\",\n      \"timestamp\": \"Timestamp\",\n      \"source\": \"Source\",\n      \"noContent\": \"(No log content)\",\n      \"toolbar\": {\n        \"logFile\": \"Log\",\n        \"selectFile\": \"Select log file\",\n        \"lines\": \"Lines\",\n        \"linesUnit\": \"lines\",\n        \"searchPlaceholder\": \"Search logs...\",\n        \"download\": \"Download\",\n        \"levelAll\": \"All Levels\",\n        \"autoRefresh\": \"Auto Refresh\",\n        \"systemLogsGroup\": \"System Logs\",\n        \"containerLogsGroup\": \"Container Logs\"\n      }\n    },\n    \"notifications\": {\n      \"title\": \"Notification Settings\",\n      \"email\": \"Email Notifications\",\n      \"webhook\": \"Webhook\",\n      \"enabled\": \"Enabled\",\n      \"disabled\": \"Disabled\",\n      \"pageTitle\": \"Notification Settings\",\n      \"pageDesc\": \"Configure notification channels and preferences\",\n      \"tabs\": {\n        \"channels\": \"Channels\",\n        \"preferences\": \"Preferences\"\n      },\n      \"discord\": {\n        \"title\": \"Discord\",\n        \"description\": \"Push notifications to your Discord channel\",\n        \"webhookLabel\": \"Webhook URL\",\n        \"webhookPlaceholder\": \"https://discord.com/api/webhooks/...\",\n        \"webhookHelp\": \"Create a Webhook in Discord channel settings and paste the URL\",\n        \"requiredError\": \"Webhook URL is required when Discord is enabled\",\n        \"urlInvalid\": \"Please enter a valid Discord Webhook URL\"\n      },\n      \"wecom\": {\n        \"title\": \"WeCom\",\n        \"description\": \"Push notifications to WeCom group bot\",\n        \"webhookLabel\": \"Webhook URL\",\n        \"webhookPlaceholder\": \"https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=...\",\n        \"webhookHelp\": \"Add a bot in WeCom group and copy the Webhook URL\",\n        \"requiredError\": \"Webhook URL is required when WeCom is enabled\",\n        \"urlInvalid\": \"Please enter a valid WeCom Webhook URL\"\n      },\n      \"emailChannel\": {\n        \"title\": \"Email\",\n        \"description\": \"Receive notifications via email\",\n        \"comingSoon\": \"Coming Soon\"\n      },\n      \"enterprise\": {\n        \"title\": \"Lark / DingTalk / WeCom\",\n        \"description\": \"Push to enterprise collaboration platforms\"\n      },\n      \"categories\": {\n        \"title\": \"Notification Categories\",\n        \"description\": \"Select notification types you want to receive\",\n        \"scan\": \"Scan Tasks\",\n        \"scanDesc\": \"Scan start, progress, completion, failure notifications\",\n        \"vulnerability\": \"Vulnerability Discovery\",\n        \"vulnerabilityDesc\": \"Notify when security vulnerabilities are found\",\n        \"asset\": \"Asset Discovery\",\n        \"assetDesc\": \"Notify when new subdomains, IPs, ports are found\",\n        \"system\": \"System Messages\",\n        \"systemDesc\": \"System-level notifications and announcements\"\n      },\n      \"saveSettings\": \"Save Settings\"\n    }\n  },\n  \"toast\": {\n    \"copied\": \"Copied\",\n    \"copyFailed\": \"Copy failed\",\n    \"downloadFailed\": \"Download failed\",\n    \"deleteSuccess\": \"Deleted successfully: {count} items\",\n    \"deleteFailed\": \"Delete failed, please retry\",\n    \"deletedScanRecord\": \"Deleted scan record: {name}\",\n    \"stoppedScan\": \"Stopped scan task: {name}\",\n    \"stopFailed\": \"Stop failed, please retry\",\n    \"bulkDeleteSuccess\": \"Deleted {count} scan records\",\n    \"bulkDeleteFailed\": \"Bulk delete failed, please retry\",\n    \"paramError\": \"Parameter error\",\n    \"paramErrorDesc\": \"Organization ID or Target ID is required\",\n    \"scanInitiated\": \"Scan initiated\",\n    \"scanInitiatedDesc\": \"Successfully created {count} scan tasks\",\n    \"initiateScanFailed\": \"Failed to initiate scan\",\n    \"noScansCreated\": \"No scan tasks were created\",\n    \"unknownError\": \"Unknown error\",\n    \"noEngineSelected\": \"Please select at least one scan engine\",\n    \"emptyConfig\": \"Scan configuration cannot be empty\",\n    \"engineNameRequired\": \"Please enter engine name\",\n    \"configRequired\": \"Configuration content is required\",\n    \"yamlSyntaxError\": \"YAML syntax error\",\n    \"engineCreateSuccess\": \"Engine created successfully\",\n    \"engineCreateSuccessDesc\": \"Engine \\\"{name}\\\" has been created\",\n    \"engineCreateFailed\": \"Failed to create engine\",\n    \"configSaveSuccess\": \"Configuration saved successfully\",\n    \"configSaveSuccessDesc\": \"Configuration for engine \\\"{name}\\\" has been updated\",\n    \"configSaveFailed\": \"Failed to save configuration\",\n    \"selectFileFirst\": \"Please select a file first\",\n    \"invalidJsonFile\": \"Invalid JSON file\",\n    \"importSuccess\": \"Import successful\",\n    \"importFailed\": \"Import failed\",\n    \"loadScanHistoryFailed\": \"Failed to load scan history\",\n    \"scan\": {\n      \"quick\": {\n        \"success\": \"Started {count} scan tasks\",\n        \"error\": \"Failed to start scan\"\n      },\n      \"stop\": {\n        \"success\": \"Scan stopped, {count} tasks cancelled\"\n      },\n      \"delete\": {\n        \"success\": \"Deleted scan task: {name}\",\n        \"bulkSuccess\": \"Deleted {count} scan tasks\"\n      },\n      \"initiate\": {\n        \"success\": \"Scan initiated successfully\",\n        \"error\": \"Failed to initiate scan\"\n      }\n    },\n    \"scheduledScan\": {\n      \"create\": {\n        \"success\": \"Scheduled scan created successfully\",\n        \"error\": \"Failed to create scheduled scan\"\n      },\n      \"update\": {\n        \"success\": \"Scheduled scan updated successfully\",\n        \"error\": \"Failed to update scheduled scan\"\n      },\n      \"delete\": {\n        \"success\": \"Scheduled scan deleted successfully\",\n        \"error\": \"Failed to delete scheduled scan\"\n      },\n      \"toggle\": {\n        \"enabled\": \"Scheduled scan enabled\",\n        \"disabled\": \"Scheduled scan disabled\",\n        \"error\": \"Failed to toggle scheduled scan\"\n      }\n    },\n    \"target\": {\n      \"create\": {\n        \"success\": \"Target created successfully\",\n        \"bulkSuccess\": \"Created {count} targets\",\n        \"error\": \"Failed to create target\"\n      },\n      \"update\": {\n        \"success\": \"Target updated successfully\",\n        \"error\": \"Failed to update target\"\n      },\n      \"delete\": {\n        \"success\": \"Target \\\"{name}\\\" deleted\",\n        \"bulkSuccess\": \"Deleted {count} targets\",\n        \"error\": \"Failed to delete target\"\n      },\n      \"link\": {\n        \"success\": \"Target linked to organization\",\n        \"error\": \"Failed to link target\"\n      },\n      \"unlink\": {\n        \"success\": \"Target unlinked from organization\",\n        \"bulkSuccess\": \"Unlinked {count} targets\",\n        \"error\": \"Failed to unlink target\"\n      }\n    },\n    \"organization\": {\n      \"create\": {\n        \"success\": \"Organization created successfully\",\n        \"error\": \"Failed to create organization\"\n      },\n      \"update\": {\n        \"success\": \"Organization updated successfully\",\n        \"error\": \"Failed to update organization\"\n      },\n      \"delete\": {\n        \"success\": \"Organization \\\"{name}\\\" deleted\",\n        \"bulkSuccess\": \"Deleted {count} organizations\",\n        \"error\": \"Failed to delete organization\"\n      }\n    },\n    \"asset\": {\n      \"subdomain\": {\n        \"create\": {\n          \"success\": \"Created {count} subdomains\",\n          \"partialSuccess\": \"Created {success} subdomains, skipped {skipped}\",\n          \"error\": \"Failed to create subdomains\"\n        },\n        \"delete\": {\n          \"success\": \"Subdomain deleted\",\n          \"bulkSuccess\": \"Deleted {count} subdomains\",\n          \"error\": \"Failed to delete subdomain\"\n        }\n      },\n      \"website\": {\n        \"create\": {\n          \"success\": \"Created {count} websites\",\n          \"partialSuccess\": \"Created {success} websites, skipped {skipped}\",\n          \"error\": \"Failed to create websites\"\n        },\n        \"delete\": {\n          \"success\": \"Website deleted\",\n          \"bulkSuccess\": \"Deleted {count} websites\",\n          \"error\": \"Failed to delete website\"\n        }\n      },\n      \"endpoint\": {\n        \"create\": {\n          \"success\": \"Created {count} endpoints\",\n          \"partialSuccess\": \"Created {success} endpoints, skipped {skipped}\",\n          \"error\": \"Failed to create endpoints\"\n        },\n        \"delete\": {\n          \"success\": \"Endpoint deleted\",\n          \"bulkSuccess\": \"Deleted {count} endpoints\",\n          \"error\": \"Failed to delete endpoint\"\n        }\n      },\n      \"directory\": {\n        \"create\": {\n          \"success\": \"Created {count} directories\",\n          \"partialSuccess\": \"Created {success} directories, skipped {skipped}\",\n          \"error\": \"Failed to create directories\"\n        },\n        \"delete\": {\n          \"success\": \"Directory deleted\",\n          \"bulkSuccess\": \"Deleted {count} directories\",\n          \"error\": \"Failed to delete directory\"\n        }\n      }\n    },\n    \"auth\": {\n      \"login\": {\n        \"success\": \"Login successful\"\n      },\n      \"logout\": {\n        \"success\": \"Logged out\"\n      },\n      \"changePassword\": {\n        \"success\": \"Password changed successfully\",\n        \"error\": \"Failed to change password\"\n      }\n    },\n    \"worker\": {\n      \"create\": {\n        \"success\": \"Worker created successfully\",\n        \"error\": \"Failed to create worker\"\n      },\n      \"update\": {\n        \"success\": \"Worker updated successfully\",\n        \"error\": \"Failed to update worker\"\n      },\n      \"delete\": {\n        \"success\": \"Worker deleted successfully\",\n        \"error\": \"Failed to delete worker\"\n      },\n      \"deploy\": {\n        \"success\": \"Worker deployment started\",\n        \"error\": \"Failed to deploy worker\"\n      },\n      \"restart\": {\n        \"success\": \"Worker is restarting\",\n        \"error\": \"Failed to restart worker\"\n      },\n      \"stop\": {\n        \"success\": \"Worker stopped\",\n        \"error\": \"Failed to stop worker\"\n      }\n    },\n    \"nucleiRepo\": {\n      \"create\": {\n        \"success\": \"Repository added successfully\",\n        \"error\": \"Failed to add repository\"\n      },\n      \"update\": {\n        \"success\": \"Repository updated successfully\",\n        \"error\": \"Failed to update repository\"\n      },\n      \"delete\": {\n        \"success\": \"Repository deleted successfully\",\n        \"error\": \"Failed to delete repository\"\n      },\n      \"sync\": {\n        \"success\": \"Repository synced successfully\",\n        \"error\": \"Failed to sync repository\"\n      }\n    },\n    \"wordlist\": {\n      \"upload\": {\n        \"success\": \"Wordlist uploaded successfully\",\n        \"error\": \"Failed to upload wordlist\"\n      },\n      \"update\": {\n        \"success\": \"Wordlist updated successfully\",\n        \"error\": \"Failed to update wordlist\"\n      },\n      \"delete\": {\n        \"success\": \"Wordlist deleted successfully\",\n        \"error\": \"Failed to delete wordlist\"\n      }\n    },\n    \"notification\": {\n      \"settings\": {\n        \"success\": \"Notification settings saved\",\n        \"error\": \"Failed to save notification settings\"\n      },\n      \"markRead\": {\n        \"success\": \"Marked as read\",\n        \"error\": \"Failed to mark as read\"\n      },\n      \"connection\": {\n        \"error\": \"Notification connection error: {message}\"\n      }\n    },\n    \"apiKeys\": {\n      \"settings\": {\n        \"success\": \"API key settings saved\",\n        \"error\": \"Failed to save API key settings\"\n      }\n    },\n    \"tool\": {\n      \"create\": {\n        \"success\": \"Tool created successfully\",\n        \"error\": \"Failed to create tool\"\n      },\n      \"update\": {\n        \"success\": \"Tool updated successfully\",\n        \"error\": \"Failed to update tool\"\n      },\n      \"delete\": {\n        \"success\": \"Tool deleted successfully\",\n        \"error\": \"Failed to delete tool\"\n      }\n    },\n    \"engine\": {\n      \"create\": {\n        \"success\": \"Engine created successfully\",\n        \"error\": \"Failed to create engine\"\n      },\n      \"update\": {\n        \"success\": \"Engine updated successfully\",\n        \"error\": \"Failed to update engine\"\n      },\n      \"delete\": {\n        \"success\": \"Engine deleted successfully\",\n        \"error\": \"Failed to delete engine\"\n      }\n    },\n    \"command\": {\n      \"create\": {\n        \"success\": \"Command created successfully\",\n        \"error\": \"Failed to create command\"\n      },\n      \"update\": {\n        \"success\": \"Command updated successfully\",\n        \"error\": \"Failed to update command\"\n      },\n      \"delete\": {\n        \"success\": \"Command deleted successfully\",\n        \"bulkSuccess\": \"Deleted {count} commands\",\n        \"error\": \"Failed to delete command\"\n      }\n    },\n    \"nucleiTemplate\": {\n      \"refresh\": {\n        \"loading\": \"Syncing templates...\",\n        \"success\": \"Templates synced successfully\",\n        \"error\": \"Failed to sync templates\"\n      },\n      \"upload\": {\n        \"success\": \"Template uploaded successfully\",\n        \"error\": \"Failed to upload template\"\n      },\n      \"save\": {\n        \"success\": \"Template saved successfully\",\n        \"error\": \"Failed to save template\"\n      }\n    },\n    \"nucleiGit\": {\n      \"settings\": {\n        \"success\": \"Git settings saved successfully\",\n        \"error\": \"Failed to save Git settings\"\n      }\n    },\n    \"systemLog\": {\n      \"fetch\": {\n        \"error\": \"Failed to fetch system logs, please check backend\",\n        \"recovered\": \"System log connection recovered\"\n      }\n    },\n    \"blacklist\": {\n      \"save\": {\n        \"success\": \"Blacklist rules saved\",\n        \"error\": \"Failed to save blacklist rules\"\n      }\n    }\n  },\n  \"quickScan\": {\n    \"title\": \"Quick Scan\",\n    \"description\": \"Quickly create scan tasks for multiple targets\",\n    \"steps\": {\n      \"enterTargets\": \"Enter Targets\",\n      \"selectEngine\": \"Select Engine\",\n      \"confirmScan\": \"Confirm Scan\"\n    },\n    \"step1Title\": \"Enter Targets\",\n    \"step2Title\": \"Select Engines\",\n    \"step3Title\": \"Edit Config\",\n    \"stepIndicator\": \"Step {current}/{total}\",\n    \"step1Hint\": \"Enter scan targets in the left input box, one per line\",\n    \"step\": \"Step {current}/{total} · {title}\",\n    \"targetPlaceholder\": \"Enter one target per line, supported formats:\\n\\nDomain: example.com, sub.example.com\\nIP Address: 192.168.1.1, 10.0.0.1\\nCIDR: 192.168.1.0/24, 10.0.0.0/8\\nURL: https://example.com/api/v1\",\n    \"supportedFormats\": \"Supported: Domain, IP, CIDR, URL\",\n    \"validTargets\": \"{count} valid targets\",\n    \"invalidTargets\": \"{count} invalid\",\n    \"selectEngine\": \"Select Engine\",\n    \"noEngines\": \"No engines available\",\n    \"capabilities\": \"{count} capabilities\",\n    \"noConfig\": \"No config\",\n    \"scanTargets\": \"Scan Targets\",\n    \"totalTargets\": \"{count} targets total\",\n    \"previous\": \"Previous\",\n    \"back\": \"Back\",\n    \"next\": \"Next\",\n    \"startScan\": \"Start Scan\",\n    \"creating\": \"Creating...\",\n    \"selectEngineHint\": \"Select an engine on the left to view configuration\",\n    \"moreErrors\": \"{count} more errors...\",\n    \"lineError\": \"Line {lineNumber}: {error}\",\n    \"loading\": \"Loading...\",\n    \"loadFailed\": \"Failed to load\",\n    \"selectedCount\": \"{count} selected\",\n    \"confirmTargets\": \"{count} scan targets\",\n    \"andMore\": \"{count} more...\",\n    \"selectedEngines\": \"Selected Engines\",\n    \"confirmSummary\": \"Will scan {targetCount} targets with {engineCount} engines\",\n    \"configTitle\": \"Scan Configuration\",\n    \"configEdited\": \"Edited\",\n    \"overwriteConfirm\": {\n      \"title\": \"Overwrite Configuration\",\n      \"description\": \"You have manually edited the configuration. Changing engines will overwrite your changes. Continue?\",\n      \"cancel\": \"Cancel\",\n      \"confirm\": \"Overwrite\"\n    },\n    \"toast\": {\n      \"noValidTarget\": \"Please enter at least one valid target\",\n      \"hasInvalidInputs\": \"{count} invalid inputs, please fix before continuing\",\n      \"selectEngine\": \"Please select a scan engine\",\n      \"emptyConfig\": \"Scan configuration cannot be empty\",\n      \"getEnginesFailed\": \"Failed to get engine list\",\n      \"createFailed\": \"Failed to create scan task\",\n      \"createSuccess\": \"Created {count} scan tasks\",\n      \"createSuccessDesc\": \"{created} targets succeeded, {failed} failed\",\n      \"targetsFailed\": \"{count} targets failed\",\n      \"configConflict\": \"Engine configuration conflict\"\n    }\n  },\n  \"notificationDrawer\": {\n    \"title\": \"Notifications\",\n    \"markAllRead\": \"Mark All Read\",\n    \"markAllAsRead\": \"Mark all as read\",\n    \"empty\": \"No notifications\",\n    \"noNotifications\": \"No notifications\",\n    \"filters\": {\n      \"all\": \"All\",\n      \"scan\": \"Scan\",\n      \"vulnerability\": \"Vulnerability\",\n      \"asset\": \"Asset\",\n      \"system\": \"System\"\n    },\n    \"categories\": {\n      \"scan\": \"Scan Tasks\",\n      \"vulnerability\": \"Vulnerability Discovery\",\n      \"asset\": \"Asset Discovery\",\n      \"system\": \"System Messages\"\n    },\n    \"timeGroups\": {\n      \"today\": \"Today\",\n      \"yesterday\": \"Yesterday\",\n      \"earlier\": \"Earlier\"\n    },\n    \"status\": {\n      \"realtime\": \"Live\",\n      \"offline\": \"Offline\"\n    },\n    \"connection\": {\n      \"live\": \"Live\",\n      \"offline\": \"Offline\"\n    }\n  },\n  \"disk\": {\n    \"totalCapacity\": \"Total Capacity\",\n    \"used\": \"Used\",\n    \"available\": \"Available\"\n  },\n  \"subdomains\": {\n    \"loadFailed\": \"Load Failed\",\n    \"loadError\": \"Error loading subdomain data, please retry\",\n    \"reload\": \"Reload\"\n  },\n  \"vulnerabilities\": {\n    \"title\": \"Vulnerability Management\",\n    \"description\": \"View and manage all vulnerabilities found by scans\",\n    \"detail\": {\n      \"vulnUrl\": \"Vulnerability URL\",\n      \"tabs\": {\n        \"overview\": \"Overview\",\n        \"requestResponse\": \"Request/Response\",\n        \"evidence\": \"Evidence\",\n        \"reproduce\": \"Reproduce\",\n        \"rawData\": \"Raw Data\"\n      },\n      \"basicInfo\": \"Basic Info\",\n      \"createdAt\": \"Created At\",\n      \"severity\": \"Severity\",\n      \"source\": \"Source\",\n      \"httpMethod\": \"HTTP Method\",\n      \"param\": \"Parameter\",\n      \"classification\": \"Classification\",\n      \"noClassification\": \"No classification info\",\n      \"detailedDesc\": \"Detailed Description\",\n      \"references\": \"References\",\n      \"noEvidence\": \"No evidence data\",\n      \"curlCommand\": \"CURL Command\",\n      \"curlHint\": \"Copy the following command to terminal to reproduce this vulnerability\",\n      \"rawOutput\": \"Raw Output (JSON)\",\n      \"rawOutputHint\": \"Complete output data from scan tool\",\n      \"evidence\": {\n        \"payload\": \"Payload\",\n        \"evidence\": \"Evidence\",\n        \"httpRequest\": \"HTTP Request\",\n        \"httpResponse\": \"HTTP Response\"\n      }\n    },\n    \"severity\": {\n      \"critical\": \"Critical\",\n      \"high\": \"High\",\n      \"medium\": \"Medium\",\n      \"low\": \"Low\",\n      \"info\": \"Info\"\n    }\n  },\n  \"pages\": {\n    \"organization\": {\n      \"title\": \"Organizations\",\n      \"description\": \"Manage and view all organizations in the system\"\n    },\n    \"target\": {\n      \"title\": \"Targets\",\n      \"description\": \"Manage all targets in the system\"\n    },\n    \"workers\": {\n      \"title\": \"Workers\",\n      \"description\": \"Manage distributed scan workers, supports remote VPS auto-deployment\"\n    },\n    \"wordlists\": {\n      \"title\": \"Wordlist Management\",\n      \"searchPlaceholder\": \"Search wordlists...\",\n      \"listTitle\": \"Wordlist List\",\n      \"loading\": \"Loading...\",\n      \"noMatch\": \"No matching wordlists found\",\n      \"noData\": \"No wordlists yet, please upload first\",\n      \"lines\": \"lines\",\n      \"rows\": \"Rows\",\n      \"size\": \"Size\",\n      \"id\": \"ID\",\n      \"updatedAt\": \"Updated At\",\n      \"hash\": \"Hash\",\n      \"editContent\": \"Edit Content\",\n      \"delete\": \"Delete\",\n      \"selectHint\": \"Select a wordlist on the left to view details\",\n      \"idCopied\": \"ID copied to clipboard\"\n    },\n    \"nuclei\": {\n      \"title\": \"Nuclei Template Repositories\",\n      \"searchPlaceholder\": \"Search repositories...\",\n      \"addRepo\": \"Add Repository\",\n      \"listTitle\": \"Repository List\",\n      \"loading\": \"Loading...\",\n      \"loadFailed\": \"Load failed\",\n      \"noMatch\": \"No matching repositories found\",\n      \"noData\": \"No repositories yet, please add first\",\n      \"synced\": \"Synced\",\n      \"notSynced\": \"Not Synced\",\n      \"syncedAt\": \"Synced at\",\n      \"notSyncedYet\": \"Not synced yet\",\n      \"status\": \"Status\",\n      \"lastSync\": \"Last Sync\",\n      \"gitUrl\": \"Git URL\",\n      \"localPath\": \"Local Path\",\n      \"commit\": \"Commit\",\n      \"syncRepo\": \"Sync Repository\",\n      \"syncing\": \"Syncing...\",\n      \"editConfig\": \"Edit Config\",\n      \"manageTemplates\": \"Manage Templates\",\n      \"delete\": \"Delete\",\n      \"selectHint\": \"Select a repository on the left to view details\",\n      \"addDialog\": {\n        \"title\": \"Add Nuclei Template Repository\",\n        \"repoName\": \"Repository Name\",\n        \"repoNamePlaceholder\": \"e.g., Default Nuclei Official Templates\",\n        \"gitUrl\": \"Git Repository URL\",\n        \"gitUrlPlaceholder\": \"e.g., https://github.com/projectdiscovery/nuclei-templates.git\",\n        \"cancel\": \"Cancel\",\n        \"creating\": \"Creating...\",\n        \"confirm\": \"Confirm Add\"\n      },\n      \"editDialog\": {\n        \"title\": \"Edit Nuclei Repository Config\",\n        \"repoName\": \"Repository Name:\",\n        \"gitUrl\": \"Git Repository URL\",\n        \"gitUrlPlaceholder\": \"e.g., https://github.com/projectdiscovery/nuclei-templates.git\",\n        \"cancel\": \"Cancel\",\n        \"saving\": \"Saving...\",\n        \"save\": \"Save Config\"\n      }\n    },\n    \"tools\": {\n      \"title\": \"Tools\",\n      \"description\": \"Manage auxiliary resources related to scanning, such as wordlists\",\n      \"wordlists\": {\n        \"title\": \"Wordlist Management\",\n        \"description\": \"Manage wordlist files used for directory scanning, etc.\"\n      },\n      \"nuclei\": {\n        \"title\": \"Nuclei Templates\",\n        \"description\": \"Browse local Nuclei template structure and content\"\n      },\n      \"comingSoon\": \"Coming Soon\",\n      \"stats\": {\n        \"total\": \"Total:\",\n        \"active\": \"Active:\"\n      },\n      \"enterManagement\": \"Enter Management\",\n      \"quickActions\": {\n        \"title\": \"Quick Actions\",\n        \"description\": \"Common tool operations\"\n      }\n    },\n    \"screenshots\": {\n      \"filterPlaceholder\": \"Filter by URL...\",\n      \"loadError\": \"Failed to load screenshots\",\n      \"noResults\": \"No screenshots match your filter\",\n      \"lightboxTitle\": \"Screenshot Preview\",\n      \"empty\": {\n        \"title\": \"No Screenshots\",\n        \"description\": \"Screenshots will appear here after running a site scan with screenshot enabled.\"\n      }\n    },\n    \"targetDetail\": {\n      \"noDescription\": \"No description\",\n      \"breadcrumb\": {\n        \"targetDetail\": \"Target Detail\"\n      },\n      \"error\": {\n        \"title\": \"Load Failed\",\n        \"message\": \"An error occurred while fetching target data\"\n      },\n      \"notFound\": {\n        \"title\": \"Target Not Found\",\n        \"message\": \"Target with ID {id} not found\"\n      },\n      \"tabs\": {\n        \"overview\": \"Overview\",\n        \"assets\": \"Assets\",\n        \"screenshots\": \"Screenshots\",\n        \"vulnerabilities\": \"Vulnerabilities\",\n        \"settings\": \"Settings\"\n      },\n      \"settings\": {\n        \"loadError\": \"Failed to load settings\",\n        \"blacklist\": {\n          \"title\": \"Blacklist Rules\",\n          \"description\": \"Assets matching the following rules will be automatically excluded during scanning.\",\n          \"rulesTitle\": \"Supported Rule Types\",\n          \"rules\": {\n            \"domain\": \"Domain wildcard, matches specified suffix\",\n            \"domainShort\": \"Domain\",\n            \"keyword\": \"Keyword match, contains specified string\",\n            \"keywordShort\": \"Keyword\",\n            \"ip\": \"Exact IP address match\",\n            \"ipShort\": \"IP\",\n            \"cidr\": \"Matches IP range\",\n            \"cidrShort\": \"CIDR\"\n          },\n          \"placeholder\": \"Enter rules, one per line\\n\\nExamples:\\n*.gov\\n*.edu\\n*cdn*\\n192.168.0.0/16\\n10.0.0.1\",\n          \"save\": \"Save Rules\"\n        },\n        \"scheduledScans\": {\n          \"title\": \"Scheduled Scans\",\n          \"description\": \"Configure automated scan tasks for this target\",\n          \"create\": \"New Scheduled Scan\",\n          \"empty\": \"No scheduled scans\",\n          \"emptyHint\": \"Click the button above to create a scheduled scan\",\n          \"enabled\": \"Enabled\",\n          \"disabled\": \"Disabled\",\n          \"nextRun\": \"Next run\",\n          \"runCount\": \"Run count\",\n          \"edit\": \"Edit\",\n          \"delete\": \"Delete\",\n          \"cronDaily\": \"Daily at {time}\",\n          \"cronWeekly\": \"Every {day} at {time}\",\n          \"cronMonthly\": \"Monthly on day {day} at {time}\",\n          \"weekdays\": {\n            \"sun\": \"Sunday\",\n            \"mon\": \"Monday\",\n            \"tue\": \"Tuesday\",\n            \"wed\": \"Wednesday\",\n            \"thu\": \"Thursday\",\n            \"fri\": \"Friday\",\n            \"sat\": \"Saturday\"\n          },\n          \"deleteConfirm\": {\n            \"title\": \"Confirm Delete\",\n            \"description\": \"Are you sure you want to delete the scheduled scan \\\"{name}\\\"? This action cannot be undone.\",\n            \"cancel\": \"Cancel\",\n            \"confirm\": \"Delete\"\n          }\n        }\n      },\n      \"overview\": {\n        \"loadError\": \"Failed to load target data\",\n        \"createdAt\": \"Created\",\n        \"lastScanned\": \"Last Scanned\",\n        \"assetsTitle\": \"Assets\",\n        \"vulnerabilitiesTitle\": \"Vulnerabilities\",\n        \"scanHistoryTitle\": \"Scan History\",\n        \"recentScans\": \"Recent Scans\",\n        \"noScans\": \"No scan records\",\n        \"viewAll\": \"View all\",\n        \"cards\": {\n          \"websites\": \"Websites\",\n          \"subdomains\": \"Subdomains\",\n          \"ips\": \"IP Addresses\",\n          \"urls\": \"URLs\",\n          \"directories\": \"Directories\",\n          \"vulnerabilities\": \"Total Vulnerabilities\"\n        },\n        \"severity\": {\n          \"critical\": \"Critical\",\n          \"high\": \"High\",\n          \"medium\": \"Medium\",\n          \"low\": \"Low\"\n        },\n        \"scanStatus\": {\n          \"completed\": \"Completed\",\n          \"running\": \"Running\",\n          \"failed\": \"Failed\",\n          \"cancelled\": \"Cancelled\",\n          \"initiated\": \"Pending\"\n        },\n        \"scheduledScans\": {\n          \"title\": \"Scheduled Scans\",\n          \"manage\": \"Manage\",\n          \"empty\": \"No scheduled scans\",\n          \"createFirst\": \"Create your first scheduled scan\",\n          \"configured\": \"Configured\",\n          \"enabled\": \"Enabled\",\n          \"nextRun\": \"Next run\",\n          \"today\": \"Today\",\n          \"tomorrow\": \"Tomorrow\",\n          \"more\": \"+{count} more\"\n        },\n        \"initiateScan\": \"Initiate Scan\"\n      }\n    },\n    \"nav\": {\n      \"scanEngine\": \"Scan Engine\",\n      \"wordlists\": \"Wordlist Management\"\n    },\n    \"settings\": {\n      \"blacklist\": {\n        \"title\": \"Global Blacklist\",\n        \"description\": \"Configure global blacklist rules. Matching assets will be automatically excluded during scans.\",\n        \"loadError\": \"Failed to load blacklist rules\",\n        \"card\": {\n          \"title\": \"Blacklist Rules\",\n          \"description\": \"These rules apply to all target scans. To configure blacklist for a specific target, go to the target settings page.\"\n        },\n        \"rules\": {\n          \"title\": \"Supported rule types\",\n          \"domain\": \"Domain\",\n          \"keyword\": \"Keyword\",\n          \"ip\": \"IP\",\n          \"cidr\": \"CIDR\"\n        },\n        \"scopeHint\": \"Global rules apply to all targets. Target-level rules can be configured in Target → Settings.\",\n        \"placeholder\": \"Enter rules, one per line\\n\\nExamples:\\n*.gov\\n*.edu\\n*cdn*\\n192.168.0.0/16\\n10.0.0.1\",\n        \"save\": \"Save Rules\",\n        \"toast\": {\n          \"saveSuccess\": \"Blacklist rules saved\",\n          \"saveError\": \"Failed to save blacklist rules\"\n        }\n      }\n    }\n  },\n  \"metadata\": {\n    \"title\": \"Xingrin - Attack Surface Management Platform | ASM\",\n    \"description\": \"Xingrin - Attack Surface Management (ASM) platform, providing automated asset discovery, vulnerability scanning, subdomain enumeration, port scanning, and more. Supports distributed scanning, Nuclei integration, and scheduled tasks.\",\n    \"keywords\": \"ASM, Attack Surface Management, Vulnerability Scanning, Asset Discovery, Bug Bounty, Penetration Testing, Nuclei, Subdomain Enumeration, Security Tools, EASM, Security\",\n    \"ogTitle\": \"Xingrin - Attack Surface Management Platform\",\n    \"ogDescription\": \"Attack Surface Management (ASM) platform providing automated asset discovery and vulnerability scanning\"\n  },\n  \"bulkAdd\": {\n    \"subdomain\": {\n      \"title\": \"Bulk Add Subdomains\",\n      \"description\": \"Enter subdomain list, one per line.\",\n      \"belongsTo\": \"Subdomains must belong to\",\n      \"label\": \"Subdomain List\",\n      \"placeholder\": \"Enter subdomains, one per line\\nExample:\\napi.example.com\\nwww.example.com\\nmail.example.com\",\n      \"valid\": \"Valid: {count}\",\n      \"duplicate\": \"Duplicate: {count}\",\n      \"invalid\": \"Invalid: {count}\",\n      \"lineError\": \"Line {line}: \\\"{value}\\\" - {error}\",\n      \"formatInvalid\": \"Invalid format\",\n      \"creating\": \"Creating...\",\n      \"bulkAdd\": \"Bulk Add\"\n    },\n    \"common\": {\n      \"cancel\": \"Cancel\",\n      \"bulkAdd\": \"Bulk Add\",\n      \"formatInvalid\": \"Invalid format\"\n    }\n  },\n  \"globalSearch\": {\n    \"search\": \"Search\",\n    \"placeholder\": \"Search assets... (host=\\\"api\\\" && tech=\\\"nginx\\\")\",\n    \"noResults\": \"No results found\",\n    \"searchFor\": \"Search for\",\n    \"recent\": \"Recent Searches\",\n    \"quickSearch\": \"Quick Search\",\n    \"hint\": \"Supports FOFA-style syntax\",\n    \"toSearch\": \"to search\"\n  },\n  \"errors\": {\n    \"unknown\": \"Operation failed, please try again later\",\n    \"validation\": \"Invalid input data\",\n    \"notFound\": \"Resource not found\",\n    \"permissionDenied\": \"Permission denied\",\n    \"serverError\": \"Server error, please try again later\",\n    \"badRequest\": \"Invalid request format\",\n    \"conflict\": \"Resource conflict, please check and try again\",\n    \"unauthorized\": \"Please login first\",\n    \"rateLimited\": \"Too many requests, please try again later\"\n  },\n  \"about\": {\n    \"title\": \"About XingRin\",\n    \"description\": \"Attack Surface Management Platform\",\n    \"currentVersion\": \"Current Version\",\n    \"latestVersion\": \"Latest Version\",\n    \"checkUpdate\": \"Check Update\",\n    \"checking\": \"Checking...\",\n    \"checkFailed\": \"Failed to check update, please try again later\",\n    \"updateAvailable\": \"Update Available\",\n    \"upToDate\": \"Up to Date\",\n    \"viewRelease\": \"View Release\",\n    \"updateHint\": \"Run the following command in project root to update:\",\n    \"changelog\": \"Changelog\",\n    \"feedback\": \"Feedback\",\n    \"docs\": \"Documentation\"\n  }\n}\n"
  },
  {
    "path": "frontend/messages/zh.json",
    "content": "{\n  \"columns\": {\n    \"common\": {\n      \"name\": \"Name\",\n      \"description\": \"Description\",\n      \"createdAt\": \"Created At\",\n      \"updatedAt\": \"Updated At\",\n      \"status\": \"Status\",\n      \"actions\": \"Actions\",\n      \"type\": \"Type\",\n      \"url\": \"URL\"\n    },\n    \"scanHistory\": {\n      \"target\": \"Target\",\n      \"summary\": \"Summary\",\n      \"engineName\": \"Engine Name\",\n      \"workerName\": \"Worker Node\",\n      \"progress\": \"Progress\",\n      \"subdomains\": \"Subdomains\",\n      \"websites\": \"Websites\",\n      \"ipAddresses\": \"IP Addresses\",\n      \"endpoints\": \"Endpoints\",\n      \"vulnerabilities\": \"Vulnerabilities\"\n    },\n    \"vulnerability\": {\n      \"severity\": \"Severity\",\n      \"source\": \"Source\",\n      \"vulnType\": \"Vuln Type\"\n    },\n    \"organization\": {\n      \"organization\": \"Organization\",\n      \"totalTargets\": \"Total Targets\",\n      \"added\": \"Added\"\n    },\n    \"target\": {\n      \"target\": \"Target\",\n      \"addedOn\": \"Added On\",\n      \"lastScanned\": \"Last Scanned\"\n    },\n    \"subdomain\": {\n      \"subdomain\": \"Subdomain\"\n    },\n    \"ipAddress\": {\n      \"ipAddress\": \"IP Address\",\n      \"hosts\": \"Hosts\",\n      \"openPorts\": \"Open Ports\",\n      \"allHosts\": \"All Hosts\",\n      \"allOpenPorts\": \"All Open Ports\"\n    },\n    \"endpoint\": {\n      \"title\": \"Title\",\n      \"host\": \"Host\",\n      \"contentLength\": \"Content Length\",\n      \"location\": \"Location\",\n      \"webServer\": \"Web Server\",\n      \"contentType\": \"Content Type\",\n      \"technologies\": \"Technologies\",\n      \"responseBody\": \"Response Body\",\n      \"vhost\": \"VHost\",\n      \"gfPatterns\": \"GF Patterns\",\n      \"responseHeaders\": \"Response Headers\",\n      \"responseTime\": \"Response Time\"\n    },\n    \"website\": {\n      \"host\": \"Host\",\n      \"responseHeaders\": \"Response Headers\"\n    },\n    \"directory\": {\n      \"length\": \"Length\",\n      \"words\": \"Words\",\n      \"lines\": \"Lines\",\n      \"duration\": \"Duration\"\n    },\n    \"engine\": {\n      \"engineName\": \"Engine Name\",\n      \"subdomainDiscovery\": \"Subdomain Discovery\",\n      \"portScan\": \"Port Scan\",\n      \"siteScan\": \"Site Scan\",\n      \"directoryScan\": \"Directory Scan\",\n      \"urlFetch\": \"URL Fetch\",\n      \"osint\": \"OSINT\",\n      \"vulnerabilityScan\": \"Vulnerability Scan\",\n      \"wafDetection\": \"WAF Detection\",\n      \"screenshot\": \"Screenshot\"\n    },\n    \"scheduledScan\": {\n      \"taskName\": \"Task Name\",\n      \"scanEngine\": \"Scan Engine\",\n      \"cronExpression\": \"Cron Expression\",\n      \"scope\": \"Scope\",\n      \"nextRun\": \"Next Run\",\n      \"runCount\": \"Run Count\",\n      \"lastRun\": \"Last Run\"\n    },\n    \"fingerprint\": {\n      \"name\": \"Name\",\n      \"cats\": \"Categories\",\n      \"rules\": \"Rules\",\n      \"implies\": \"Implies\",\n      \"website\": \"Website\",\n      \"cpe\": \"CPE\",\n      \"created\": \"Created\",\n      \"logic\": \"Logic\",\n      \"ruleDetails\": \"Rule Details\",\n      \"cms\": \"CMS\",\n      \"method\": \"Method\",\n      \"keyword\": \"Keyword\",\n      \"type\": \"Type\",\n      \"important\": \"Important\"\n    },\n    \"command\": {\n      \"tool\": \"Tool\",\n      \"commandTemplate\": \"Command Template\"\n    }\n  },\n  \"tooltips\": {\n    \"targetDetails\": \"目标详情\",\n    \"viewProgress\": \"点击查看进度详情\",\n    \"targetSummary\": \"目标摘要\",\n    \"initiateScan\": \"发起扫描\",\n    \"scheduleScan\": \"计划扫描\",\n    \"editEngine\": \"编辑引擎\",\n    \"viewDetails\": \"查看详情\",\n    \"unlinkTarget\": \"解除关联\",\n    \"clickToCopy\": \"点击复制\",\n    \"expand\": \"展开\",\n    \"collapse\": \"收起\",\n    \"vulnDetails\": \"漏洞详情\",\n    \"copied\": \"已复制\",\n    \"allHosts\": \"所有主机\",\n    \"allOpenPorts\": \"所有开放端口\"\n  },\n  \"severity\": {\n    \"critical\": \"严重\",\n    \"high\": \"高危\",\n    \"medium\": \"中危\",\n    \"low\": \"低危\",\n    \"info\": \"信息\"\n  },\n  \"common\": {\n    \"actions\": {\n      \"save\": \"保存\",\n      \"saving\": \"保存中...\",\n      \"cancel\": \"取消\",\n      \"delete\": \"删除\",\n      \"edit\": \"编辑\",\n      \"add\": \"添加\",\n      \"create\": \"创建\",\n      \"update\": \"更新\",\n      \"search\": \"搜索\",\n      \"refresh\": \"刷新\",\n      \"export\": \"导出\",\n      \"import\": \"导入\",\n      \"confirm\": \"确认\",\n      \"close\": \"关闭\",\n      \"submit\": \"提交\",\n      \"reset\": \"重置\",\n      \"copy\": \"复制\",\n      \"download\": \"下载\",\n      \"upload\": \"上传\",\n      \"view\": \"查看\",\n      \"details\": \"详情\",\n      \"back\": \"返回\",\n      \"next\": \"下一步\",\n      \"previous\": \"上一步\",\n      \"start\": \"开始\",\n      \"stop\": \"停止\",\n      \"pause\": \"暂停\",\n      \"resume\": \"继续\",\n      \"retry\": \"重试\",\n      \"snapshot\": \"详情\",\n      \"openMenu\": \"打开菜单\",\n      \"selectAll\": \"全选\",\n      \"deselectAll\": \"取消全选\",\n      \"selectRow\": \"选择行\",\n      \"website\": \"官网\",\n      \"description\": \"描述\",\n      \"processing\": \"处理中...\",\n      \"confirmDelete\": \"确认删除\",\n      \"deleteConfirmMessage\": \"确定要删除选中的 {count} 条记录吗？此操作不可撤销。\"\n    },\n    \"yamlEditor\": {\n      \"syntaxError\": \"语法错误\",\n      \"syntaxValid\": \"语法正确\",\n      \"errorLocation\": \"第 {line} 行，第 {column} 列\",\n      \"loading\": \"加载编辑器...\",\n      \"duplicateKey\": \"发现重复的配置项 '{key}'，后面的配置会覆盖前面的，请删除重复项\"\n    },\n    \"theme\": {\n      \"switchToLight\": \"切换到亮色模式\",\n      \"switchToDark\": \"切换到暗色模式\",\n      \"switchLanguage\": \"切换语言\",\n      \"switchColor\": \"切换主题色\"\n    },\n    \"download\": {\n      \"all\": \"下载全部\",\n      \"selected\": \"下载选中\",\n      \"important\": \"下载重点\"\n    },\n    \"ui\": {\n      \"toggleSidebar\": \"切换侧边栏\",\n      \"loading\": \"加载中\",\n      \"commandDialog\": \"命令对话框\"\n    },\n    \"dropzone\": {\n      \"uploadFile\": \"上传文件\",\n      \"uploadFiles\": \"上传文件\",\n      \"dragOrClick\": \"拖拽文件到此处或点击选择\",\n      \"dragOrClickReplace\": \"拖拽或点击替换文件\",\n      \"moreFiles\": \"{files} 等 {count} 个文件\",\n      \"supports\": \"支持\",\n      \"minimum\": \"最小\",\n      \"maximum\": \"最大\",\n      \"sizeBetween\": \"大小在 {min} 到 {max} 之间\"\n    },\n    \"status\": {\n      \"loading\": \"加载中...\",\n      \"pageLoading\": \"页面加载中...\",\n      \"success\": \"操作成功\",\n      \"error\": \"操作失败\",\n      \"noData\": \"暂无数据\",\n      \"pending\": \"等待中\",\n      \"running\": \"运行中\",\n      \"completed\": \"已完成\",\n      \"failed\": \"失败\",\n      \"cancelled\": \"已取消\",\n      \"active\": \"活跃\",\n      \"inactive\": \"未激活\",\n      \"enabled\": \"已启用\",\n      \"disabled\": \"已禁用\",\n      \"creating\": \"正在创建...\",\n      \"updating\": \"正在更新...\",\n      \"deleting\": \"正在删除...\",\n      \"removing\": \"正在移除...\",\n      \"unlinking\": \"正在解除关联...\",\n      \"batchCreating\": \"正在批量创建...\",\n      \"batchDeleting\": \"正在批量删除...\",\n      \"batchRemoving\": \"正在批量移除...\",\n      \"updateSuccess\": \"更新成功\",\n      \"updateFailed\": \"更新失败\",\n      \"uploading\": \"正在上传...\"\n    },\n    \"pagination\": {\n      \"page\": \"第 {current} 页，共 {total} 页\",\n      \"rowsPerPage\": \"每页显示\",\n      \"total\": \"共 {count} 条\",\n      \"first\": \"首页\",\n      \"last\": \"末页\",\n      \"previous\": \"上一页\",\n      \"next\": \"下一页\",\n      \"goTo\": \"跳转到\"\n    },\n    \"time\": {\n      \"justNow\": \"刚刚\",\n      \"minutesAgo\": \"{count} 分钟前\",\n      \"hoursAgo\": \"{count} 小时前\",\n      \"daysAgo\": \"{count} 天前\",\n      \"weeksAgo\": \"{count} 周前\",\n      \"monthsAgo\": \"{count} 个月前\",\n      \"yearsAgo\": \"{count} 年前\"\n    },\n    \"confirm\": {\n      \"title\": \"确认操作\",\n      \"deleteTitle\": \"确认删除\",\n      \"deleteMessage\": \"确定要删除吗？此操作不可撤销。\",\n      \"bulkDeleteTitle\": \"确认批量删除\",\n      \"bulkDeleteMessage\": \"确定要删除选中的 {count} 项吗？此操作不可撤销。\",\n      \"unlinkTitle\": \"确认解除关联\",\n      \"unlinkMessage\": \"确定要解除关联吗？此操作只会解除关联关系，数据本身不会被删除。\",\n      \"bulkUnlinkTitle\": \"确认批量解除关联\",\n      \"bulkUnlinkMessage\": \"确定要解除选中的 {count} 项的关联吗？数据本身不会被删除。\",\n      \"stopTitle\": \"确认停止\",\n      \"stopMessage\": \"确定要停止此任务吗？\",\n      \"yes\": \"是\",\n      \"no\": \"否\",\n      \"deleteVulnMessage\": \"此操作无法撤销。这将永久删除漏洞 \\\"{name}\\\" 及其相关数据。\",\n      \"bulkDeleteVulnMessage\": \"此操作无法撤销。这将永久删除以下 {count} 个漏洞及其相关数据。\",\n      \"deleteVulnCount\": \"删除 {count} 个漏洞\",\n      \"deleteScanMessage\": \"此操作无法撤销。这将永久删除扫描记录 \\\"{name}\\\" 及其相关数据。\",\n      \"bulkDeleteScanMessage\": \"此操作无法撤销。这将永久删除以下 {count} 个扫描记录及其相关数据。\",\n      \"deleteScanCount\": \"删除 {count} 个记录\",\n      \"stopScanTitle\": \"确认停止扫描\",\n      \"stopScanMessage\": \"确定要停止扫描任务 \\\"{name}\\\" 吗？扫描将会中止，已收集的数据将会保留。\",\n      \"stopScanAction\": \"停止扫描\",\n      \"deleteOrgMessage\": \"此操作将永久删除组织 \\\"{name}\\\" 并解除其与域名的关联。域名本身不会被删除，仍可正常使用。\",\n      \"bulkDeleteOrgMessage\": \"此操作将永久删除以下 {count} 个组织并解除其与域名的关联。域名本身不会被删除，仍可正常使用。\",\n      \"deleteOrgCount\": \"删除 {count} 个组织\",\n      \"deleting\": \"删除中...\",\n      \"deleteToolMessage\": \"此操作无法撤销。这将永久删除开源工具 \\\"{name}\\\" 及其相关配置。\",\n      \"deleteCustomToolMessage\": \"此操作无法撤销。这将永久删除自定义工具 \\\"{name}\\\" 及其相关配置。\",\n      \"deleteTargetTitle\": \"确认删除目标\",\n      \"deleteTargetMessage\": \"此操作无法撤销。这将永久删除目标 \\\"{name}\\\" 及其所有关联数据。\",\n      \"bulkDeleteTargetTitle\": \"确认批量删除目标\",\n      \"bulkDeleteTargetMessage\": \"此操作无法撤销。这将永久删除以下 {count} 个目标及其所有关联数据。\",\n      \"deleteTargetCount\": \"确认删除 {count} 个目标\",\n      \"confirmDelete\": \"确认删除\",\n      \"confirmUnlink\": \"确认解除\",\n      \"confirmUnlinkCount\": \"确认解除 {count} 个关联\",\n      \"unlinkTargetMessage\": \"确定要解除目标 \\\"{name}\\\" 与此组织的关联吗？此操作只会解除关联关系，目标本身不会被删除。\",\n      \"bulkUnlinkTargetMessage\": \"此操作将解除以下 {count} 个目标与此组织的关联。目标本身不会被删除，仍可正常使用。\",\n      \"deleteScheduledScanMessage\": \"确定要删除定时扫描任务 \\\"{name}\\\" 吗？此操作无法撤销。\",\n      \"deleteEngineMessage\": \"确定要删除引擎「{name}」吗？此操作无法撤销。\",\n      \"deleteNucleiRepoMessage\": \"确定要删除仓库「{name}」吗？此操作无法撤销。\",\n      \"deleteWordlistMessage\": \"确定要删除字典「{name}」吗？此操作无法撤销。\"\n    }\n  },\n  \"navigation\": {\n    \"mainFeatures\": \"主要功能\",\n    \"dashboard\": \"仪表盘\",\n    \"search\": \"搜索\",\n    \"organization\": \"组织\",\n    \"target\": \"目标\",\n    \"vulnerabilities\": \"漏洞\",\n    \"scan\": \"扫描\",\n    \"scanHistory\": \"扫描历史\",\n    \"scheduledScan\": \"定时扫描\",\n    \"scanEngine\": \"扫描引擎\",\n    \"tools\": \"工具\",\n    \"wordlists\": \"字典管理\",\n    \"fingerprints\": \"指纹管理\",\n    \"nucleiTemplates\": \"Nuclei 模板\",\n    \"settings\": \"系统设置\",\n    \"workers\": \"扫描节点\",\n    \"systemLogs\": \"系统日志\",\n    \"notifications\": \"通知设置\",\n    \"apiKeys\": \"API 密钥\",\n    \"globalBlacklist\": \"全局黑名单\",\n    \"about\": \"关于系统\"\n  },\n  \"search\": {\n    \"title\": \"资产搜索\",\n    \"hint\": \"点击搜索框查看可用字段和语法，直接输入文本默认搜索主机名\",\n    \"searching\": \"搜索中...\",\n    \"loading\": \"加载中...\",\n    \"resultsCount\": \"找到 {count} 条结果\",\n    \"error\": \"搜索失败，请稍后重试\",\n    \"noResults\": \"未找到匹配的资产\",\n    \"noResultsHint\": \"请尝试调整搜索条件\",\n    \"vulnLoadError\": \"加载漏洞详情失败\",\n    \"recentSearches\": \"最近搜索\",\n    \"export\": \"导出\",\n    \"exporting\": \"导出中...\",\n    \"exportSuccess\": \"导出成功\",\n    \"exportFailed\": \"导出失败\",\n    \"stats\": {\n      \"vulnerabilities\": \"漏洞\"\n    },\n    \"assetTypes\": {\n      \"website\": \"网站\",\n      \"endpoint\": \"URL\"\n    },\n    \"fields\": {\n      \"host\": \"主机名\",\n      \"url\": \"URL 地址\",\n      \"title\": \"页面标题\",\n      \"tech\": \"技术栈\",\n      \"status\": \"HTTP 状态码\",\n      \"body\": \"响应体内容\",\n      \"header\": \"响应头内容\"\n    },\n    \"table\": {\n      \"url\": \"URL\",\n      \"host\": \"主机名\",\n      \"title\": \"标题\",\n      \"status\": \"状态码\",\n      \"technologies\": \"技术栈\",\n      \"contentLength\": \"内容长度\",\n      \"location\": \"跳转地址\",\n      \"webserver\": \"Web 服务器\",\n      \"contentType\": \"内容类型\",\n      \"responseBody\": \"响应体\",\n      \"responseHeaders\": \"响应头\",\n      \"vhost\": \"VHost\",\n      \"createdAt\": \"创建时间\",\n      \"gfPatterns\": \"GF 模式\"\n    },\n    \"card\": {\n      \"title\": \"标题\",\n      \"expand\": \"展开\",\n      \"collapse\": \"收起\",\n      \"vulnerabilities\": \"关联漏洞 ({count})\",\n      \"vulnName\": \"漏洞名称\",\n      \"severity\": \"严重程度\",\n      \"source\": \"来源\",\n      \"vulnType\": \"漏洞类型\"\n    },\n    \"vulnDetail\": {\n      \"title\": \"漏洞详情\",\n      \"name\": \"漏洞名称\",\n      \"source\": \"来源\",\n      \"type\": \"漏洞类型\",\n      \"url\": \"漏洞 URL\"\n    }\n  },\n  \"dashboard\": {\n    \"title\": \"仪表盘\",\n    \"stats\": {\n      \"totalTargets\": \"目标总数\",\n      \"totalVulnerabilities\": \"漏洞总数\",\n      \"activeScans\": \"进行中扫描\",\n      \"completedScans\": \"已完成扫描\",\n      \"totalOrganizations\": \"组织总数\",\n      \"totalSubdomains\": \"子域名总数\",\n      \"totalEndpoints\": \"端点总数\",\n      \"totalWebsites\": \"网站总数\"\n    },\n    \"statCards\": {\n      \"assetsFound\": \"发现资产\",\n      \"vulnsFound\": \"发现漏洞\",\n      \"monitoredTargets\": \"监控目标\",\n      \"runningScans\": \"正在扫描\",\n      \"assetsFooter\": \"子域名 + IP + 端点 + 网站\",\n      \"vulnsFooter\": \"所有扫描发现的漏洞\",\n      \"targetsFooter\": \"已添加的目标总数\",\n      \"scansFooter\": \"当前运行中的任务\",\n      \"updatedAt\": \"统计更新于 {time}\",\n      \"noData\": \"暂无数据\"\n    },\n    \"assetTrend\": {\n      \"title\": \"资产趋势\",\n      \"description\": \"每小时更新 · 点击折线或图例可隐藏/显示\",\n      \"noData\": \"暂无历史数据\",\n      \"current\": \"当前\",\n      \"subdomains\": \"子域名\",\n      \"ips\": \"IP\",\n      \"endpoints\": \"端点\",\n      \"websites\": \"网站\"\n    },\n    \"assetDistribution\": {\n      \"title\": \"资产分布\",\n      \"description\": \"各类资产数量统计\",\n      \"totalAssets\": \"资产总计\",\n      \"subdomains\": \"子域名\",\n      \"ipAddresses\": \"IP地址\",\n      \"endpoints\": \"端点\",\n      \"websites\": \"网站\",\n      \"count\": \"数量\"\n    },\n    \"vulnDistribution\": {\n      \"title\": \"漏洞分布\",\n      \"description\": \"按严重程度统计\",\n      \"noData\": \"暂无漏洞数据\",\n      \"vulns\": \"漏洞\"\n    },\n    \"recentVulns\": {\n      \"title\": \"最近漏洞\",\n      \"description\": \"最近发现的安全漏洞\",\n      \"viewAll\": \"查看全部\",\n      \"noData\": \"暂无漏洞数据\"\n    }\n  },\n  \"dataTable\": {\n    \"columns\": \"列\",\n    \"filter\": \"筛选\",\n    \"selected\": \"已选择 {count} 项\",\n    \"noResults\": \"没有找到结果\",\n    \"selectAll\": \"全选\",\n    \"deselectAll\": \"取消全选\",\n    \"showColumns\": \"显示列\",\n    \"hideColumns\": \"隐藏列\",\n    \"sortAsc\": \"升序\",\n    \"sortDesc\": \"降序\",\n    \"clearSort\": \"清除排序\",\n    \"clearFilter\": \"清除筛选\"\n  },\n  \"filter\": {\n    \"fields\": {\n      \"ip\": \"IP 地址\",\n      \"port\": \"端口号\",\n      \"host\": \"主机名\",\n      \"domain\": \"域名\",\n      \"url\": \"完整 URL\",\n      \"status\": \"HTTP 状态码\",\n      \"title\": \"页面标题\",\n      \"source\": \"数据来源\",\n      \"path\": \"URL 路径\",\n      \"severity\": \"漏洞严重程度\",\n      \"name\": \"名称\",\n      \"type\": \"类型\"\n    },\n    \"syntax\": {\n      \"operators\": \"操作符\",\n      \"containsFuzzy\": \"包含（模糊）\",\n      \"exactMatch\": \"精确匹配\",\n      \"notEquals\": \"不等于\",\n      \"logic\": \"逻辑\",\n      \"matchAny\": \"匹配任意\",\n      \"matchAll\": \"匹配全部\"\n    },\n    \"groups\": {\n      \"activeFilters\": \"当前过滤条件\",\n      \"availableFields\": \"可用字段\",\n      \"syntax\": \"语法\",\n      \"examples\": \"示例\"\n    },\n    \"empty\": \"输入以过滤...\",\n    \"descriptions\": {\n      \"directoryUrl\": \"目录 URL\",\n      \"subdomainName\": \"子域名\",\n      \"endpointUrl\": \"端点 URL\",\n      \"vulnType\": \"漏洞类型\",\n      \"scannerSource\": \"扫描器来源\"\n    }\n  },\n  \"validation\": {\n    \"required\": \"此字段为必填项\",\n    \"invalidEmail\": \"请输入有效的邮箱地址\",\n    \"invalidUrl\": \"请输入有效的 URL\",\n    \"invalidDomain\": \"请输入有效的域名\",\n    \"invalidIp\": \"请输入有效的 IP 地址\",\n    \"minLength\": \"最少需要 {min} 个字符\",\n    \"maxLength\": \"最多允许 {max} 个字符\",\n    \"minValue\": \"最小值为 {min}\",\n    \"maxValue\": \"最大值为 {max}\",\n    \"pattern\": \"格式不正确\"\n  },\n  \"auth\": {\n    \"title\": \"XingRin - 星环\",\n    \"subtitle\": \"自动化资产发现与漏洞扫描平台\",\n    \"login\": \"登录\",\n    \"pageTitle\": \"登录 - 星环 | 攻击面管理平台\",\n    \"pageDescription\": \"星环 (XingRin) - 攻击面管理平台 (ASM)，提供自动化资产发现与漏洞扫描\",\n    \"loggingIn\": \"登录中...\",\n    \"logout\": \"退出登录\",\n    \"username\": \"用户名\",\n    \"usernamePlaceholder\": \"请输入账户名\",\n    \"password\": \"密码\",\n    \"passwordPlaceholder\": \"请输入密码\",\n    \"rememberMe\": \"记住我\",\n    \"forgotPassword\": \"忘记密码\",\n    \"loginSuccess\": \"登录成功\",\n    \"loginFailed\": \"登录失败\",\n    \"logoutSuccess\": \"已退出登录\",\n    \"sessionExpired\": \"会话已过期，请重新登录\",\n    \"changePassword\": {\n      \"title\": \"修改密码\",\n      \"desc\": \"请输入当前密码和新密码\",\n      \"currentPassword\": \"当前密码\",\n      \"newPassword\": \"新密码\",\n      \"confirmPassword\": \"确认新密码\",\n      \"passwordMismatch\": \"新密码与确认密码不一致\",\n      \"passwordTooShort\": \"新密码长度至少 {min} 位\",\n      \"cancel\": \"取消\",\n      \"save\": \"保存\",\n      \"saving\": \"保存中...\"\n    }\n  },\n  \"organization\": {\n    \"title\": \"组织管理\",\n    \"name\": \"组织名称\",\n    \"description\": \"描述\",\n    \"addOrganization\": \"添加组织\",\n    \"createOrganization\": \"创建组织\",\n    \"editOrganization\": \"编辑组织\",\n    \"deleteOrganization\": \"删除组织\",\n    \"searchPlaceholder\": \"搜索组织名称...\",\n    \"noResults\": \"暂无组织\",\n    \"targetCount\": \"目标数量\",\n    \"notFound\": \"组织不存在\",\n    \"notFoundDesc\": \"未找到ID为 {id} 的组织\",\n    \"noDescription\": \"暂无描述\",\n    \"createdAt\": \"创建于 {date}\",\n    \"targetCountLabel\": \"{count} 个目标\",\n    \"dialog\": {\n      \"addTitle\": \"添加新组织\",\n      \"addDesc\": \"填写组织信息以添加到系统中。可以同时添加目标。标有 * 的字段为必填项。\",\n      \"editTitle\": \"编辑组织\",\n      \"editDesc\": \"修改组织的基本信息。标有 * 的字段为必填项。\",\n      \"addButton\": \"添加组织\",\n      \"orgName\": \"组织名称\",\n      \"orgNamePlaceholder\": \"请输入组织名称\",\n      \"orgDesc\": \"组织描述\",\n      \"orgDescPlaceholder\": \"请输入组织描述（可选）\",\n      \"addTargets\": \"添加目标（可选）\",\n      \"targetsPlaceholder\": \"请输入目标，每行一个\\n支持域名、IP、CIDR\\n例如：\\nexample.com\\n192.168.1.1\\n10.0.0.0/8\",\n      \"targetCount\": \"{count} 个目标\",\n      \"invalidCount\": \"{count} 个无效\",\n      \"invalidExample\": \"例如 第 {line} 行: \\\"{target}\\\" - {error}\",\n      \"cancel\": \"取消\",\n      \"create\": \"创建组织\",\n      \"creating\": \"创建组织中...\",\n      \"creatingTargets\": \"批量创建目标中...\",\n      \"update\": \"更新组织\",\n      \"updating\": \"更新中...\",\n      \"reset\": \"重置\",\n      \"changesDetected\": \"检测到变更，点击更新保存修改\",\n      \"characters\": \"{count}/{max} 字符\"\n    },\n    \"validation\": {\n      \"nameMin\": \"组织名称至少需要 {min} 个字符\",\n      \"nameMax\": \"组织名称不能超过 {max} 个字符\",\n      \"descMax\": \"描述不能超过 {max} 个字符\",\n      \"targetInvalid\": \"目标格式无效\"\n    },\n    \"linkTarget\": {\n      \"title\": \"添加目标到组织\",\n      \"description\": \"输入目标并关联到 \\\"{name}\\\"。支持批量添加，每行一个目标。标有 * 的字段为必填项。\",\n      \"targetLabel\": \"目标\",\n      \"organizationLabel\": \"所属组织\",\n      \"placeholder\": \"请输入目标，每行一个\\n支持域名、IP、CIDR\\n例如：\\nexample.com\\n192.168.1.1\\n10.0.0.0/8\",\n      \"targetCount\": \"{count} 个目标\",\n      \"invalidCount\": \"{count} 个无效\",\n      \"invalidExample\": \"例如 第 {line} 行: \\\"{target}\\\" - {error}\",\n      \"creating\": \"创建中...\",\n      \"createTarget\": \"创建目标\",\n      \"validation\": {\n        \"required\": \"请输入至少一个目标\",\n        \"invalidFormat\": \"目标格式无效\"\n      }\n    }\n  },\n  \"target\": {\n    \"title\": \"目标管理\",\n    \"name\": \"目标名称\",\n    \"domain\": \"域名\",\n    \"description\": \"描述\",\n    \"addTarget\": \"添加目标\",\n    \"createTarget\": \"创建目标\",\n    \"editTarget\": \"编辑目标\",\n    \"deleteTarget\": \"删除目标\",\n    \"organization\": \"所属组织\",\n    \"types\": {\n      \"domain\": \"域名\",\n      \"ip\": \"IP\",\n      \"cidr\": \"CIDR\"\n    },\n    \"dialog\": {\n      \"addTitle\": \"添加目标\",\n      \"addDesc\": \"输入目标并关联到组织。支持批量添加，每行一个目标。标有 * 的字段为必填项。\",\n      \"targetList\": \"目标列表\",\n      \"targetPlaceholder\": \"请输入目标，每行一个\\n支持域名、IP、CIDR\\n例如：\\nexample.com\\n192.168.1.1\\n10.0.0.0/8\",\n      \"targetCount\": \"{count} 个目标\",\n      \"invalidCount\": \"{count} 个无效目标，例如 第 {line} 行: \\\"{target}\\\" - {error}\",\n      \"invalidFormat\": \"目标格式无效\",\n      \"linkOrganization\": \"关联组织（可选）\",\n      \"selectOrganization\": \"请选择组织\",\n      \"searchOrganization\": \"搜索组织...\",\n      \"noOrganization\": \"未找到组织\",\n      \"loading\": \"加载中...\",\n      \"orgPagination\": \"共 {total} 个组织 · 第 {page} / {totalPages} 页\",\n      \"perPage\": \"每页:\",\n      \"creating\": \"创建中...\",\n      \"addTarget\": \"添加目标\"\n    }\n  },\n  \"scan\": {\n    \"title\": \"扫描\",\n    \"startScan\": \"开始扫描\",\n    \"stopScan\": \"停止扫描\",\n    \"scanType\": \"扫描类型\",\n    \"scanStatus\": \"扫描状态\",\n    \"scanProgress\": \"扫描进度\",\n    \"scanResult\": \"扫描结果\",\n    \"editTask\": \"编辑任务\",\n    \"initiate\": {\n      \"title\": \"发起扫描\",\n      \"targetDesc\": \"为目标\",\n      \"orgDesc\": \"为组织\",\n      \"selectEngine\": \"选择扫描引擎\",\n      \"selectEngineTitle\": \"选择引擎\",\n      \"selectEngineHint\": \"选择左侧引擎查看配置详情\",\n      \"loading\": \"加载中...\",\n      \"loadFailed\": \"加载失败\",\n      \"noEngines\": \"暂无可用引擎\",\n      \"capabilities\": \"{count} 项能力\",\n      \"noConfig\": \"无配置\",\n      \"initiating\": \"发起中...\",\n      \"startScan\": \"开始扫描\",\n      \"selectedCount\": \"已选择 {count} 个引擎\",\n      \"configTitle\": \"扫描配置\",\n      \"configEdited\": \"已编辑\",\n      \"stepIndicator\": \"步骤 {current}/{total}\",\n      \"back\": \"上一步\",\n      \"next\": \"下一步\",\n      \"steps\": {\n        \"selectEngine\": \"选择引擎\",\n        \"editConfig\": \"编辑配置\"\n      },\n      \"presets\": {\n        \"title\": \"推荐组合\",\n        \"fullScan\": \"全量扫描\",\n        \"fullScanDesc\": \"完整的安全评估，覆盖资产发现到漏洞检测的全部流程\",\n        \"recon\": \"信息收集\",\n        \"reconDesc\": \"发现和识别目标资产，包括子域名、端口、站点和指纹\",\n        \"vulnScan\": \"漏洞扫描\",\n        \"vulnScanDesc\": \"对已知资产进行安全漏洞检测\",\n        \"custom\": \"自定义\",\n        \"customDesc\": \"手动选择引擎组合\",\n        \"customHint\": \"点击选择后手动勾选引擎\",\n        \"selectHint\": \"请选择一个扫描方案\",\n        \"selectEngines\": \"选择引擎\",\n        \"enginesCount\": \"个引擎\",\n        \"capabilities\": \"涉及能力\",\n        \"usedEngines\": \"使用引擎\",\n        \"noCapabilities\": \"请选择引擎\"\n      },\n      \"overwriteConfirm\": {\n        \"title\": \"覆盖配置确认\",\n        \"description\": \"您已手动编辑过配置，切换引擎将覆盖当前配置。是否继续？\",\n        \"cancel\": \"取消\",\n        \"confirm\": \"确认覆盖\"\n      }\n    },\n    \"cron\": {\n      \"everyMinute\": \"每分钟\",\n      \"everyNMinutes\": \"每 {n} 分钟\",\n      \"everyHour\": \"每小时 {minute}分\",\n      \"everyNHours\": \"每 {n} 小时 {minute}分\",\n      \"everyDay\": \"每天 {time}\",\n      \"everyWeek\": \"每{day} {time}\",\n      \"everyMonth\": \"每月{day}号 {time}\",\n      \"weekdays\": [\"周日\", \"周一\", \"周二\", \"周三\", \"周四\", \"周五\", \"周六\"]\n    },\n    \"history\": {\n      \"title\": \"扫描历史\",\n      \"description\": \"查看和管理所有扫描任务记录\",\n      \"startTime\": \"开始时间\",\n      \"endTime\": \"结束时间\",\n      \"duration\": \"耗时\",\n      \"status\": \"状态\",\n      \"searchPlaceholder\": \"搜索目标名称...\",\n      \"loadFailed\": \"加载扫描历史失败\",\n      \"retry\": \"重试\",\n      \"taskId\": \"扫描任务 ID：{id}\",\n      \"breadcrumb\": {\n        \"scanHistory\": \"扫描历史\"\n      },\n      \"tabs\": {\n        \"overview\": \"概览\",\n        \"assets\": \"资产\",\n        \"screenshots\": \"截图\",\n        \"vulnerabilities\": \"漏洞\"\n      },\n      \"status\": {\n        \"completed\": \"已完成\",\n        \"running\": \"扫描中\",\n        \"failed\": \"失败\",\n        \"pending\": \"等待中\",\n        \"cancelled\": \"已取消\",\n        \"initiated\": \"等待中\"\n      },\n      \"overview\": {\n        \"loadError\": \"加载扫描数据失败\",\n        \"startedAt\": \"开始时间\",\n        \"duration\": \"耗时\",\n        \"assetsTitle\": \"发现的资产\",\n        \"vulnerabilitiesTitle\": \"漏洞统计\",\n        \"stagesTitle\": \"扫描进度\",\n        \"stagesCompleted\": \"完成\",\n        \"logsTitle\": \"扫描日志\",\n        \"configTitle\": \"扫描配置\",\n        \"autoRefresh\": \"自动刷新\",\n        \"noConfig\": \"暂无配置信息\",\n        \"noStages\": \"暂无阶段进度\",\n        \"totalFound\": \"个漏洞\",\n        \"totalVulns\": \"共 {count} 个\",\n        \"viewAll\": \"查看全部\",\n        \"cards\": {\n          \"websites\": \"网站\",\n          \"subdomains\": \"子域名\",\n          \"ips\": \"IP 地址\",\n          \"urls\": \"URLs\",\n          \"directories\": \"目录\",\n          \"vulnerabilities\": \"漏洞\"\n        },\n        \"severity\": {\n          \"critical\": \"严重\",\n          \"high\": \"高危\",\n          \"medium\": \"中危\",\n          \"low\": \"低危\"\n        }\n      },\n      \"stats\": {\n        \"totalScans\": \"总扫描数\",\n        \"running\": \"进行中\",\n        \"vulnsFound\": \"发现漏洞\",\n        \"assetsFound\": \"发现资产\",\n        \"allScanTasks\": \"所有扫描任务\",\n        \"runningScans\": \"正在执行的扫描\",\n        \"completedScansFound\": \"已完成扫描发现\",\n        \"assetTypes\": \"子域名 + IP + 端点 + 网站\",\n        \"all\": \"全部\"\n      }\n    },\n    \"progress\": {\n      \"title\": \"扫描进度\",\n      \"target\": \"目标\",\n      \"engine\": \"引擎\",\n      \"startTime\": \"开始时间\",\n      \"status\": \"状态\",\n      \"errorReason\": \"错误原因\",\n      \"totalProgress\": \"总进度\",\n      \"tab_stages\": \"阶段\",\n      \"tab_logs\": \"日志\",\n      \"status_running\": \"扫描中\",\n      \"status_cancelled\": \"已取消\",\n      \"status_completed\": \"已完成\",\n      \"status_failed\": \"失败\",\n      \"status_initiated\": \"等待中\",\n      \"stage_running\": \"进行中\",\n      \"stage_pending\": \"等待中\",\n      \"stage_failed\": \"失败\",\n      \"stage_cancelled\": \"已取消\",\n      \"stages\": {\n        \"subdomainDiscovery\": \"子域名发现\",\n        \"portScan\": \"端口扫描\",\n        \"siteScan\": \"站点扫描\",\n        \"fingerprintDetect\": \"指纹识别\",\n        \"directoryScan\": \"目录扫描\",\n        \"urlFetch\": \"URL 抓取\",\n        \"vulnScan\": \"漏洞扫描\",\n        \"subdomain_discovery\": \"子域名发现\",\n        \"port_scan\": \"端口扫描\",\n        \"site_scan\": \"站点扫描\",\n        \"fingerprint_detect\": \"指纹识别\",\n        \"directory_scan\": \"目录扫描\",\n        \"url_fetch\": \"URL 抓取\",\n        \"vuln_scan\": \"漏洞扫描\",\n        \"screenshot\": \"截图\"\n      }\n    },\n    \"scheduled\": {\n      \"title\": \"定时扫描\",\n      \"description\": \"配置和管理定时扫描任务\",\n      \"searchPlaceholder\": \"搜索任务名称...\",\n      \"cronExpression\": \"Cron 表达式\",\n      \"nextRun\": \"下次执行\",\n      \"lastRun\": \"上次执行\",\n      \"enabled\": \"已启用\",\n      \"disabled\": \"已禁用\",\n      \"createTitle\": \"新建定时扫描\",\n      \"createDesc\": \"配置定时扫描任务，设置执行计划\",\n      \"editTitle\": \"编辑定时扫描\",\n      \"editDesc\": \"修改定时扫描任务配置\",\n      \"stepIndicator\": \"步骤 {current}/{total}\",\n      \"steps\": {\n        \"basicInfo\": \"基本信息\",\n        \"scanMode\": \"扫描模式\",\n        \"selectTarget\": \"选择目标\",\n        \"selectEngine\": \"选择引擎\",\n        \"editConfig\": \"编辑配置\",\n        \"scheduleSettings\": \"调度设置\"\n      },\n      \"form\": {\n        \"taskName\": \"任务名称\",\n        \"taskNamePlaceholder\": \"例如：每日安全巡检\",\n        \"taskNameDesc\": \"为定时任务设置一个易于识别的名称\",\n        \"taskNameRequired\": \"请输入任务名称\",\n        \"scanEngine\": \"扫描引擎\",\n        \"scanEnginePlaceholder\": \"选择扫描引擎\",\n        \"scanEngineDesc\": \"选择引擎可快速填充配置，也可直接编辑配置\",\n        \"scanEngineRequired\": \"请选择扫描引擎\",\n        \"configuration\": \"扫描配置\",\n        \"configurationPlaceholder\": \"请输入 YAML 格式的扫描配置...\",\n        \"configurationDesc\": \"YAML 格式的扫描配置，可选择引擎自动填充或手动编辑\",\n        \"configurationRequired\": \"请输入扫描配置\",\n        \"yamlInvalid\": \"YAML 配置格式错误，请检查语法\",\n        \"configEdited\": \"已编辑\",\n        \"selectScanMode\": \"选择扫描模式\",\n        \"organizationScan\": \"组织扫描\",\n        \"organizationScanDesc\": \"选择组织，执行时动态获取其下所有目标\",\n        \"targetScan\": \"目标扫描\",\n        \"targetScanDesc\": \"选择固定的目标列表进行扫描\",\n        \"organizationScanHint\": \"组织扫描：每次执行时会动态获取组织下的所有目标，新增的目标也会被扫描\",\n        \"targetScanHint\": \"目标扫描：扫描固定的目标列表，后续新增的目标不会被扫描\",\n        \"selectOrganization\": \"选择组织\",\n        \"selectTarget\": \"选择扫描目标\",\n        \"searchOrganization\": \"搜索组织名称...\",\n        \"searchTarget\": \"搜索目标名称...\",\n        \"noOrganization\": \"未找到组织\",\n        \"noTarget\": \"未找到目标\",\n        \"targetCount\": \"{count} 个目标\",\n        \"selectedOrganization\": \"已选择组织，执行时将动态扫描该组织下所有目标\",\n        \"selectedTarget\": \"已选择目标\",\n        \"cronExpression\": \"Cron 表达式\",\n        \"cronPlaceholder\": \"分 时 日 月 周（如：0 2 * * *）\",\n        \"cronFormat\": \"格式：分(0-59) 时(0-23) 日(1-31) 月(1-12) 周(0-6，0=周日)\",\n        \"cronRequired\": \"Cron 表达式格式错误，需要 5 个部分：分 时 日 月 周\",\n        \"quickSelect\": \"快捷选择\",\n        \"executionPreview\": \"执行预览\",\n        \"valid\": \"有效\",\n        \"nextExecutionTime\": \"下次执行时间：\",\n        \"upcoming\": \"(即将执行)\",\n        \"invalidExpression\": \"无效的表达式\",\n        \"scanScope\": \"扫描范围\",\n        \"organizationMode\": \"组织扫描\",\n        \"organizationModeHint\": \"组织扫描模式下，执行时将动态获取该组织下所有目标\",\n        \"noAvailableTarget\": \"暂无可用目标\",\n        \"noEngine\": \"暂无可用引擎\",\n        \"noConfig\": \"无配置\",\n        \"capabilitiesCount\": \"{count} 项能力\",\n        \"selected\": \"已选择\",\n        \"selectedEngines\": \"已选择 {count} 个引擎\",\n        \"scanTarget\": \"扫描目标\",\n        \"presetTargetHint\": \"目标已预设，无法更改。如需扫描其他目标，请从全局定时扫描页面创建。\"\n      },\n      \"presets\": {\n        \"everyHour\": \"每小时\",\n        \"daily2am\": \"每天凌晨2点\",\n        \"daily4am\": \"每天凌晨4点\",\n        \"weekly\": \"每周一凌晨2点\",\n        \"monthly\": \"每月1号凌晨2点\",\n        \"everyMinute\": \"每分钟\",\n        \"every5Minutes\": \"每5分钟\"\n      },\n      \"buttons\": {\n        \"previous\": \"上一步\",\n        \"next\": \"下一步\",\n        \"createTask\": \"创建任务\",\n        \"saveChanges\": \"保存修改\",\n        \"cancel\": \"取消\"\n      },\n      \"toast\": {\n        \"selectOrganization\": \"请选择一个组织\",\n        \"selectTarget\": \"请选择一个扫描目标\",\n        \"configConflict\": \"配置冲突\"\n      },\n      \"overwriteConfirm\": {\n        \"title\": \"覆盖配置确认\",\n        \"description\": \"您已手动编辑了配置，切换引擎将覆盖当前配置。确定要继续吗？\",\n        \"cancel\": \"取消\",\n        \"confirm\": \"确定覆盖\"\n      }\n    },\n    \"engine\": {\n      \"title\": \"扫描引擎\",\n      \"name\": \"引擎名称\",\n      \"type\": \"引擎类型\",\n      \"config\": \"配置\",\n      \"searchPlaceholder\": \"搜索引擎...\",\n      \"createEngine\": \"新建引擎\",\n      \"engineList\": \"引擎列表\",\n      \"noMatchingEngine\": \"未找到匹配的引擎\",\n      \"noEngines\": \"暂无引擎，请先新建\",\n      \"featuresEnabled\": \"{count} 个功能已启用\",\n      \"featuresCount\": \"{count} 个功能\",\n      \"updatedAt\": \"更新于\",\n      \"enabledFeatures\": \"已启用功能\",\n      \"configPreview\": \"配置预览\",\n      \"editConfig\": \"编辑配置\",\n      \"selectEngineHint\": \"选择左侧引擎查看详情\",\n      \"features\": {\n        \"subdomain_discovery\": \"子域名发现\",\n        \"port_scan\": \"端口扫描\",\n        \"site_scan\": \"站点扫描\",\n        \"fingerprint_detect\": \"指纹识别\",\n        \"directory_scan\": \"目录扫描\",\n        \"screenshot\": \"网站截图\",\n        \"url_fetch\": \"URL 抓取\",\n        \"vuln_scan\": \"漏洞扫描\"\n      },\n      \"create\": {\n        \"title\": \"新建扫描引擎\",\n        \"desc\": \"创建新的扫描引擎配置，使用 Monaco Editor 编辑 YAML 配置文件，支持语法高亮、自动补全和错误提示。\",\n        \"engineName\": \"引擎名称\",\n        \"engineNamePlaceholder\": \"请输入引擎名称，例如：全面扫描引擎\",\n        \"yamlConfig\": \"YAML 配置\",\n        \"syntaxError\": \"语法错误\",\n        \"syntaxValid\": \"语法正确\",\n        \"loadingEditor\": \"加载编辑器...\",\n        \"errorLocation\": \"第 {line} 行，第 {column} 列\",\n        \"confirmClose\": \"您有未保存的更改，确定要关闭吗？\",\n        \"creating\": \"创建中...\",\n        \"createEngine\": \"创建引擎\"\n      },\n      \"edit\": {\n        \"title\": \"编辑引擎配置 - {name}\",\n        \"desc\": \"使用 Monaco Editor 编辑引擎的 YAML 配置文件，支持语法高亮、自动补全和错误提示。\",\n        \"yamlConfig\": \"YAML 配置\",\n        \"syntaxError\": \"语法错误\",\n        \"syntaxValid\": \"语法正确\",\n        \"loadingEditor\": \"加载编辑器...\",\n        \"errorLocation\": \"第 {line} 行，第 {column} 列\",\n        \"unsavedChanges\": \"您有未保存的更改\",\n        \"confirmClose\": \"您有未保存的更改，确定要关闭吗？\",\n        \"saving\": \"保存中...\",\n        \"saveConfig\": \"保存配置\"\n      }\n    }\n  },\n  \"vulnerability\": {\n    \"title\": \"漏洞\",\n    \"name\": \"漏洞名称\",\n    \"severity\": \"严重程度\",\n    \"critical\": \"严重\",\n    \"high\": \"高危\",\n    \"medium\": \"中危\",\n    \"low\": \"低危\",\n    \"info\": \"信息\",\n    \"status\": \"状态\",\n    \"open\": \"待处理\",\n    \"confirmed\": \"已确认\",\n    \"fixed\": \"已修复\",\n    \"falsePositive\": \"误报\",\n    \"description\": \"描述\",\n    \"solution\": \"解决方案\",\n    \"reference\": \"参考链接\"\n  },\n  \"tools\": {\n    \"title\": \"工具\",\n    \"wordlists\": {\n      \"title\": \"字典管理\",\n      \"name\": \"字典名称\",\n      \"type\": \"类型\",\n      \"count\": \"条目数\",\n      \"upload\": \"上传字典\",\n      \"download\": \"下载字典\",\n      \"uploadDialog\": {\n        \"title\": \"上传字典\",\n        \"desc\": \"上传字典文件，后端保存后由各个 Worker 按需下载使用\",\n        \"dragHint\": \"拖拽文件到此处\",\n        \"selectFile\": \"选择文件\",\n        \"fileHint\": \"支持 .txt 文件，最大 50MB\",\n        \"namePlaceholder\": \"例如：常用目录字典\",\n        \"descPlaceholder\": \"例如：基于 dirsearch\",\n        \"descLabel\": \"描述（可选）\",\n        \"cancel\": \"取消\",\n        \"uploading\": \"上传中...\",\n        \"uploadButton\": \"上传字典\"\n      },\n      \"editDialog\": {\n        \"title\": \"编辑字典 - {name}\",\n        \"desc\": \"编辑字典内容，每行一个条目。保存后会自动更新行数、文件大小和 Hash 值。\",\n        \"content\": \"字典内容\",\n        \"lines\": \"共 {count} 行\",\n        \"hash\": \"Hash\",\n        \"loading\": \"加载字典内容...\",\n        \"loadingEditor\": \"加载编辑器...\",\n        \"unsavedChanges\": \"您有未保存的更改\",\n        \"confirmClose\": \"您有未保存的更改，确定要关闭吗？\",\n        \"cancel\": \"取消\",\n        \"saving\": \"保存中...\",\n        \"save\": \"保存字典\"\n      }\n    },\n    \"fingerprints\": {\n      \"title\": \"指纹管理\",\n      \"name\": \"指纹名称\",\n      \"category\": \"分类\",\n      \"import\": \"导入指纹\",\n      \"export\": \"导出指纹\",\n      \"pageDescription\": \"Web 指纹识别规则管理\",\n      \"helpText\": \"• EHole: 红队资产识别工具，支持关键词、favicon hash 等识别方式\\n• Goby: 攻击面测绘工具，包含大量 Web 应用和设备指纹\\n• Wappalyzer: 浏览器扩展，可识别网站使用的技术栈\\n• Fingers: HTTP 指纹库，包含详细的规则匹配\\n• FingerPrintHub: Nuclei 风格指纹模板，使用 HTTP 匹配器\\n• ARL: 资产侦察灯塔指纹规则，YAML 格式\",\n      \"actions\": {\n        \"operations\": \"操作\",\n        \"exportAll\": \"导出所有指纹\",\n        \"deleteSelected\": \"删除选中\",\n        \"deleteAll\": \"删除所有\",\n        \"addFingerprint\": \"添加指纹\",\n        \"addSingle\": \"单条添加\",\n        \"importFile\": \"文件导入\"\n      },\n      \"dialogs\": {\n        \"exportTitle\": \"导出所有指纹\",\n        \"exportDesc\": \"将导出所有 {count} 条指纹数据为 JSON 文件。\",\n        \"deleteSelectedTitle\": \"删除选中指纹\",\n        \"deleteSelectedDesc\": \"确定要删除选中的 {count} 条指纹吗？此操作不可撤销。\",\n        \"deleteAllTitle\": \"删除所有指纹\",\n        \"deleteAllDesc\": \"确定要删除所有 {count} 条指纹吗？此操作不可撤销。\",\n        \"confirmExport\": \"确认导出\",\n        \"confirmDelete\": \"确认删除\"\n      },\n      \"ehole\": {\n        \"addTitle\": \"添加 EHole 指纹\",\n        \"editTitle\": \"编辑 EHole 指纹\",\n        \"addDesc\": \"添加新的指纹规则\",\n        \"editDesc\": \"修改指纹规则配置\"\n      },\n      \"goby\": {\n        \"addTitle\": \"添加 Goby 指纹\",\n        \"editTitle\": \"编辑 Goby 指纹\",\n        \"addDesc\": \"添加新的指纹规则\",\n        \"editDesc\": \"修改指纹规则配置\"\n      },\n      \"wappalyzer\": {\n        \"addTitle\": \"添加 Wappalyzer 指纹\",\n        \"editTitle\": \"编辑 Wappalyzer 指纹\",\n        \"addDesc\": \"添加新的指纹规则\",\n        \"editDesc\": \"修改指纹规则配置\"\n      },\n      \"fingers\": {\n        \"addTitle\": \"添加 Fingers 指纹\",\n        \"editTitle\": \"编辑 Fingers 指纹\",\n        \"addDesc\": \"添加新的 HTTP 指纹规则\",\n        \"editDesc\": \"修改指纹规则配置\"\n      },\n      \"fingerprinthub\": {\n        \"addTitle\": \"添加 FingerPrintHub 指纹\",\n        \"editTitle\": \"编辑 FingerPrintHub 指纹\",\n        \"addDesc\": \"添加新的 Nuclei 风格指纹模板\",\n        \"editDesc\": \"修改指纹模板配置\"\n      },\n      \"arl\": {\n        \"addTitle\": \"添加 ARL 指纹\",\n        \"editTitle\": \"编辑 ARL 指纹\",\n        \"addDesc\": \"添加新的 ARL 指纹规则\",\n        \"editDesc\": \"修改指纹规则配置\"\n      },\n      \"toast\": {\n        \"createSuccess\": \"创建成功\",\n        \"updateSuccess\": \"更新成功\",\n        \"createFailed\": \"创建失败\",\n        \"updateFailed\": \"更新失败\",\n        \"exportSuccess\": \"导出成功\",\n        \"exportFailed\": \"导出失败\",\n        \"deleteSuccess\": \"删除成功：{count} 条\",\n        \"deleteFailed\": \"删除失败\"\n      },\n      \"form\": {\n        \"cmsPlaceholder\": \"如：WordPress、Nginx\",\n        \"cmsRequired\": \"CMS 名称不能为空\",\n        \"keywordPlaceholder\": \"多个关键词用逗号分隔\",\n        \"keywordRequired\": \"关键词不能为空\",\n        \"typePlaceholder\": \"如：CMS、Server\",\n        \"namePlaceholder\": \"如：Apache、Nginx\",\n        \"nameRequired\": \"产品名称不能为空\",\n        \"logicPlaceholder\": \"如：a||b、(a&&b)||c\",\n        \"logicRequired\": \"逻辑表达式不能为空\",\n        \"featurePlaceholder\": \"匹配特征\",\n        \"appNamePlaceholder\": \"如：WordPress、React\",\n        \"appNameRequired\": \"应用名称不能为空\",\n        \"catsPlaceholder\": \"如：1, 6, 12\",\n        \"descPlaceholder\": \"应用描述\",\n        \"detectionRules\": \"检测规则\",\n        \"detectionRulesHint\": \"JSON 格式使用对象，数组格式用逗号分隔\",\n        \"jsVariables\": \"JS 变量\",\n        \"metaTags\": \"Meta 标签\",\n        \"htmlContent\": \"HTML 内容\",\n        \"implies\": \"依赖\",\n        \"cookies\": \"Cookies (JSON)\",\n        \"headers\": \"Headers (JSON)\",\n        \"scriptUrl\": \"脚本 URL\",\n        \"location\": \"位置\",\n        \"mark\": \"标记\",\n        \"name\": \"名称\",\n        \"fpId\": \"指纹 ID\",\n        \"fpIdPlaceholder\": \"如：wordpress-detect\",\n        \"fpIdRequired\": \"指纹 ID 不能为空\",\n        \"author\": \"作者\",\n        \"authorPlaceholder\": \"如：security-team\",\n        \"severity\": \"严重程度\",\n        \"tags\": \"标签\",\n        \"tagsPlaceholder\": \"如：cms, wordpress, php\",\n        \"http\": \"HTTP 匹配规则\",\n        \"httpPlaceholder\": \"JSON 数组格式的 HTTP 匹配规则\",\n        \"httpRequired\": \"HTTP 匹配规则不能为空\",\n        \"httpArrayRequired\": \"HTTP 必须是数组格式\",\n        \"httpJsonInvalid\": \"HTTP JSON 格式无效\",\n        \"metadata\": \"元数据\",\n        \"metadataPlaceholder\": \"JSON 对象格式的元数据\",\n        \"metadataObjectRequired\": \"元数据必须是对象格式\",\n        \"metadataJsonInvalid\": \"元数据 JSON 格式无效\",\n        \"sourceFile\": \"来源文件\",\n        \"sourceFilePlaceholder\": \"如：wordpress.yaml\",\n        \"link\": \"参考链接\",\n        \"linkPlaceholder\": \"如：https://example.com/docs\",\n        \"rule\": \"匹配规则\",\n        \"rulePlaceholder\": \"JSON 数组格式的匹配规则\",\n        \"ruleRequired\": \"匹配规则不能为空\",\n        \"ruleArrayRequired\": \"规则必须是数组格式\",\n        \"ruleJsonInvalid\": \"规则 JSON 格式无效\",\n        \"tag\": \"标签\",\n        \"tagPlaceholder\": \"如：cms, framework（逗号分隔）\",\n        \"focusLabel\": \"标记为重点\",\n        \"defaultPort\": \"默认端口\",\n        \"defaultPortPlaceholder\": \"如：80, 443, 8080（逗号分隔）\",\n        \"arlNamePlaceholder\": \"如：Nginx、Apache\",\n        \"arlRule\": \"ARL 规则\",\n        \"arlRulePlaceholder\": \"body=\\\"nginx\\\" || header=\\\"nginx\\\"\",\n        \"arlRuleRequired\": \"ARL 规则不能为空\",\n        \"arlRuleHint\": \"支持 body、header、title 等匹配方式，使用 || 和 && 组合条件\"\n      },\n      \"loadFailed\": \"加载失败\",\n      \"loadError\": \"加载指纹数据时出现错误\",\n      \"reload\": \"重新加载\",\n      \"filter\": {\n        \"ehole\": {\n          \"cms\": \"产品/CMS名称\",\n          \"method\": \"匹配方式 (keyword, faviconhash...)\",\n          \"location\": \"匹配位置 (body, header, title)\",\n          \"type\": \"分类\",\n          \"isImportant\": \"是否重点资产 (true/false)\"\n        },\n        \"goby\": {\n          \"product\": \"产品名称\",\n          \"logic\": \"逻辑表达式\"\n        },\n        \"wappalyzer\": {\n          \"name\": \"应用名称\",\n          \"description\": \"应用描述\",\n          \"website\": \"官网地址\",\n          \"cpe\": \"CPE 标识符\",\n          \"implies\": \"依赖项 (如 PHP, MySQL)\"\n        },\n        \"fingers\": {\n          \"name\": \"指纹名称\",\n          \"link\": \"参考链接\",\n          \"tag\": \"标签\",\n          \"focus\": \"重点标记 (true/false)\",\n          \"defaultPort\": \"默认端口\"\n        },\n        \"fingerprinthub\": {\n          \"fpId\": \"指纹 ID\",\n          \"name\": \"指纹名称\",\n          \"author\": \"作者\",\n          \"tags\": \"标签\",\n          \"severity\": \"严重程度\"\n        },\n        \"arl\": {\n          \"name\": \"指纹名称\",\n          \"rule\": \"规则内容\"\n        }\n      },\n      \"import\": {\n        \"eholeTitle\": \"导入 EHole 指纹\",\n        \"eholeDesc\": \"上传 EHole 格式的指纹文件\",\n        \"eholeFormatHint\": \"{\\\"fingerprint\\\": [...]}\",\n        \"eholeInvalidMissing\": \"无效的 EHole 格式：缺少 fingerprint 字段\",\n        \"eholeInvalidArray\": \"无效的 EHole 格式：fingerprint 必须是数组\",\n        \"eholeInvalidFields\": \"无效的 EHole 格式：指纹缺少必要字段 (cms, keyword)\",\n        \"gobyTitle\": \"导入 Goby 指纹\",\n        \"gobyDesc\": \"上传 Goby 格式的指纹文件\",\n        \"gobyFormatHint\": \"[{...}] 或 {...}\",\n        \"gobyInvalidFields\": \"无效的 Goby 格式：指纹缺少必要字段 (product, rule)\",\n        \"gobyInvalidFormat\": \"无效的 Goby 格式：必须是数组或对象\",\n        \"wappalyzerTitle\": \"导入 Wappalyzer 指纹\",\n        \"wappalyzerDesc\": \"上传 Wappalyzer 格式的指纹文件\",\n        \"wappalyzerFormatHint\": \"{\\\"apps\\\": {...}} 或 [{...}]\",\n        \"wappalyzerInvalidApps\": \"无效的 Wappalyzer 格式：apps/technologies 必须是对象\",\n        \"wappalyzerInvalidFormat\": \"无效的 Wappalyzer 格式\",\n        \"fingersTitle\": \"导入 Fingers 指纹\",\n        \"fingersDesc\": \"上传 Fingers 格式的指纹文件\",\n        \"fingersFormatHint\": \"[{\\\"name\\\": ..., \\\"rule\\\": [...]}]\",\n        \"fingersInvalidFormat\": \"无效的 Fingers 格式：必须是数组\",\n        \"fingersInvalidArray\": \"无效的 Fingers 格式：必须是数组\",\n        \"fingersInvalidFields\": \"无效的 Fingers 格式：指纹缺少必要字段 (name, rule)\",\n        \"fingerprinthubTitle\": \"导入 FingerPrintHub 指纹\",\n        \"fingerprinthubDesc\": \"上传 FingerPrintHub 格式的指纹文件\",\n        \"fingerprinthubFormatHint\": \"[{\\\"id\\\": ..., \\\"info\\\": {...}, \\\"http\\\": [...]}]\",\n        \"fingerprinthubInvalidFormat\": \"无效的 FingerPrintHub 格式：必须是数组\",\n        \"fingerprinthubInvalidArray\": \"无效的 FingerPrintHub 格式：必须是数组\",\n        \"fingerprinthubInvalidFields\": \"无效的 FingerPrintHub 格式：指纹缺少必要字段\",\n        \"arlTitle\": \"导入 ARL 指纹\",\n        \"arlDesc\": \"上传 ARL 格式的指纹文件\",\n        \"arlFormatHint\": \"YAML 格式，包含 name 和 rule 字段\",\n        \"arlInvalidFormat\": \"无效的 ARL 格式\",\n        \"arlInvalidArray\": \"无效的 ARL 格式：必须是数组\",\n        \"arlInvalidFields\": \"无效的 ARL 格式：指纹缺少必要字段 (name, rule)\",\n        \"emptyData\": \"指纹数据为空\",\n        \"supportedFormat\": \"支持的格式：\",\n        \"importing\": \"导入中...\",\n        \"importSuccessDetail\": \"导入成功：创建 {created} 条，失败 {failed} 条\"\n      }\n    },\n    \"nuclei\": {\n      \"title\": \"Nuclei 模板\",\n      \"templateName\": \"模板名称\",\n      \"author\": \"作者\",\n      \"severity\": \"严重程度\",\n      \"tags\": \"标签\",\n      \"selectTemplate\": \"选择左侧模板查看内容\",\n      \"useSearch\": \"或使用搜索快速定位\",\n      \"back\": \"返回\",\n      \"searchPlaceholder\": \"搜索模板...\",\n      \"syncing\": \"同步中...\",\n      \"sync\": \"同步\",\n      \"templateDirectory\": \"模板目录\",\n      \"templateCount\": \"{count} 个模板\",\n      \"noMatchingTemplate\": \"未找到匹配的模板\",\n      \"noTemplateOrLoadFailed\": \"暂无模板或加载失败\",\n      \"repoName\": \"仓库 #{id}\"\n    },\n    \"config\": {\n      \"addTool\": \"添加工具\",\n      \"editTool\": \"编辑工具\",\n      \"addNewTool\": \"添加新工具\",\n      \"addCustomTool\": \"添加自定义工具\",\n      \"editCustomTool\": \"编辑自定义工具\",\n      \"dialogDesc\": \"配置扫描工具的基本信息和执行命令。标有 * 的字段为必填项。\",\n      \"customDialogDesc\": \"配置自定义扫描工具的基本信息。标有 * 的字段为必填项。\",\n      \"basicInfo\": \"基本信息\",\n      \"commandConfig\": \"命令配置\",\n      \"toolName\": \"工具名称\",\n      \"toolNamePlaceholder\": \"例如: Nuclei, Subfinder, HTTPX\",\n      \"toolNameMin\": \"工具名称至少需要 2 个字符\",\n      \"toolNameMax\": \"工具名称不能超过 255 个字符\",\n      \"repoUrl\": \"仓库地址\",\n      \"repoUrlPlaceholder\": \"https://github.com/projectdiscovery/nuclei\",\n      \"currentVersion\": \"当前安装版本\",\n      \"versionPlaceholder\": \"v3.0.0\",\n      \"toolDesc\": \"工具描述\",\n      \"toolDescPlaceholder\": \"描述工具的功能、特点和使用场景...\",\n      \"categoryTags\": \"分类标签\",\n      \"noCategories\": \"暂无可用分类\",\n      \"installCommand\": \"安装命令\",\n      \"installCommandPlaceholder\": \"git clone https://github.com/user/tool\\n或\\ngo install -v github.com/tool@latest\",\n      \"installCommandRequired\": \"安装命令不能为空\",\n      \"installCommandHint\": \"示例：\",\n      \"installCommandGit\": \"使用 git:\",\n      \"installCommandGo\": \"使用 go:\",\n      \"installCommandNote\": \"注意：go get 已不再支持，请使用 go install\",\n      \"updateCommand\": \"更新命令\",\n      \"updateCommandPlaceholder\": \"git pull\\n或\\ngo install -v github.com/tool@latest\",\n      \"updateCommandRequired\": \"更新命令不能为空\",\n      \"updateCommandGitHint\": \"使用 git clone 安装的工具，推荐使用\",\n      \"updateCommandGoHint\": \"使用 go install 安装的工具，推荐使用相同的安装命令\",\n      \"versionCommand\": \"版本查询命令\",\n      \"versionCommandPlaceholder\": \"toolname --version\",\n      \"versionCommandRequired\": \"版本查询命令不能为空\",\n      \"versionCommandAutoGenerated\": \"已自动生成\",\n      \"versionCommandHint\": \"系统会使用此命令检查工具版本并提示更新。常见格式：\",\n      \"characters\": \"{count}/{max} 字符\",\n      \"cancel\": \"取消\",\n      \"creating\": \"创建中...\",\n      \"saving\": \"保存中...\",\n      \"createTool\": \"创建工具\",\n      \"saveChanges\": \"保存修改\",\n      \"customToolNamePlaceholder\": \"例如：自定义端口扫描\",\n      \"customToolDescPlaceholder\": \"描述工具的功能和用途...\",\n      \"toolPath\": \"工具路径\",\n      \"toolPathPlaceholder\": \"例如：/opt/security-tools/port-scanner\",\n      \"toolPathHint\": \"脚本或工具所在的目录路径\",\n      \"repository\": \"仓库\",\n      \"uncategorized\": \"未分类\",\n      \"noDescription\": \"暂无描述\",\n      \"checking\": \"检查中...\",\n      \"checkUpdate\": \"检查更新\",\n      \"noTools\": \"暂无工具\",\n      \"noCustomTools\": \"暂无自定义工具\",\n      \"directory\": \"目录\"\n    },\n    \"commands\": {\n      \"searchPlaceholder\": \"搜索命令名称...\"\n    }\n  },\n  \"settings\": {\n    \"title\": \"设置\",\n    \"workers\": {\n      \"title\": \"扫描节点\",\n      \"name\": \"节点名称\",\n      \"status\": \"状态\",\n      \"online\": \"在线\",\n      \"offline\": \"离线\",\n      \"lastSeen\": \"最后在线\",\n      \"addWorker\": \"添加节点\",\n      \"editWorker\": \"编辑扫描节点\",\n      \"addWorkerTitle\": \"添加扫描节点\",\n      \"addWorkerDesc\": \"输入远程 VPS 的 SSH 连接信息，添加后可通过「管理部署」一键部署扫描环境\",\n      \"editWorkerDesc\": \"修改节点的 SSH 连接信息\",\n      \"noWorkers\": \"暂无扫描节点\",\n      \"noWorkersDesc\": \"添加远程 VPS 服务器作为扫描节点，开始使用分布式扫描功能，提升扫描效率\",\n      \"addFirstWorker\": \"添加第一个节点\",\n      \"confirmDelete\": \"确认删除\",\n      \"confirmDeleteDesc\": \"确定要删除 Worker 节点 \\\"{name}\\\" 吗？此操作不可恢复。\",\n      \"confirmUninstall\": \"确认卸载\",\n      \"confirmUninstallDesc\": \"确定要在远程主机上卸载 Agent 并删除相关容器吗？此操作不会卸载 Docker。\",\n      \"workerNodes\": \"Worker 节点\",\n      \"workerNodesDesc\": \"管理分布式扫描节点，支持远程部署和监控\",\n      \"local\": \"本地\",\n      \"memory\": \"内存\",\n      \"manageDeploy\": \"管理部署\",\n      \"edit\": \"编辑\",\n      \"delete\": \"删除\",\n      \"learnMore\": \"了解更多\",\n      \"gotIt\": \"知道了\",\n      \"stats\": {\n        \"total\": \"总节点\",\n        \"online\": \"在线\",\n        \"offline\": \"离线\",\n        \"pending\": \"等待部署\"\n      },\n      \"status\": {\n        \"online\": \"在线\",\n        \"offline\": \"离线\",\n        \"pending\": \"等待部署\",\n        \"deploying\": \"部署中\",\n        \"updating\": \"更新中\",\n        \"outdated\": \"版本过低\"\n      },\n      \"helpDialog\": {\n        \"title\": \"什么是分布式扫描？\",\n        \"desc\": \"分布式扫描允许你将扫描任务分发到多个远程服务器（扫描节点）上并行执行，显著提高扫描效率。\"\n      },\n      \"banner\": {\n        \"title\": \"分布式扫描：\",\n        \"desc\": \"添加 VPS 节点 → 一键部署 → 任务自动分发\"\n      },\n      \"steps\": {\n        \"step1Title\": \"添加扫描节点\",\n        \"step1Desc\": \"点击\\\"添加节点\\\"按钮，填写 VPS 服务器的 SSH 连接信息（IP、端口、用户名、密码）\",\n        \"step2Title\": \"部署扫描环境\",\n        \"step2Desc\": \"点击\\\"管理部署\\\"按钮，系统会自动通过 SSH 在远程服务器上安装 Docker 和心跳agent\",\n        \"step3Title\": \"自动任务分发\",\n        \"step3Desc\": \"部署完成后节点会自动上报心跳，扫描任务将根据负载自动分发到各节点并行执行\"\n      },\n      \"form\": {\n        \"workerName\": \"节点名称\",\n        \"workerNamePlaceholder\": \"例如: 扫描节点-1\",\n        \"workerNameDesc\": \"用于识别节点的名称\",\n        \"nameRequired\": \"请输入节点名称\",\n        \"nameTooLong\": \"名称不能超过100个字符\",\n        \"hostIp\": \"IP 地址\",\n        \"hostIpPlaceholder\": \"例如: 192.168.1.100\",\n        \"ipRequired\": \"请输入 IP 地址\",\n        \"ipInvalid\": \"请输入有效的 IP 地址\",\n        \"ipNotEditable\": \"IP 地址不可修改\",\n        \"sshPort\": \"SSH 端口\",\n        \"username\": \"用户名\",\n        \"usernameRequired\": \"请输入用户名\",\n        \"usernamePlaceholder\": \"例如: root\",\n        \"password\": \"SSH 密码\",\n        \"passwordPlaceholder\": \"输入 SSH 密码\",\n        \"passwordRequired\": \"请输入 SSH 密码\",\n        \"passwordKeepEmpty\": \"留空保持不变\",\n        \"passwordHint\": \"密码仅用于部署，不会明文存储\",\n        \"passwordEditHint\": \"如需修改密码请输入新密码\",\n        \"creating\": \"创建中...\",\n        \"saving\": \"保存中...\",\n        \"createWorker\": \"创建节点\",\n        \"saveChanges\": \"保存修改\"\n      },\n      \"loadFailed\": \"加载失败\",\n      \"loadError\": \"加载节点数据时出现错误\",\n      \"terminal\": {\n        \"connected\": \"已连接\",\n        \"disconnected\": \"未连接\",\n        \"connecting\": \"正在建立 SSH 连接...\",\n        \"wsConnected\": \"WebSocket 已连接\",\n        \"connectionClosed\": \"连接已关闭\",\n        \"connectionFailed\": \"连接失败\",\n        \"wsConnectionFailed\": \"WebSocket 连接失败\",\n        \"waitingConnection\": \"等待连接...\",\n        \"pendingHint\": \"节点未部署，点击右侧按钮开始部署扫描环境\",\n        \"deployingHint\": \"正在部署中，点击查看进度\",\n        \"onlineHint\": \"节点运行正常\",\n        \"offlineHint\": \"节点离线，可尝试重新部署\",\n        \"updatingHint\": \"正在自动更新 Agent...\",\n        \"outdatedHint\": \"版本过低，需要更新\",\n        \"reconnect\": \"重新连接\",\n        \"startDeploy\": \"开始部署\",\n        \"viewProgress\": \"查看进度\",\n        \"redeploy\": \"重新部署\",\n        \"uninstall\": \"卸载\"\n      }\n    },\n    \"systemLogs\": {\n      \"title\": \"系统日志\",\n      \"description\": \"每 2 秒自动刷新一次（轮询模式）\",\n      \"level\": \"级别\",\n      \"message\": \"消息\",\n      \"timestamp\": \"时间\",\n      \"source\": \"来源\",\n      \"noContent\": \"（暂无日志内容）\",\n      \"toolbar\": {\n        \"logFile\": \"日志\",\n        \"selectFile\": \"选择日志文件\",\n        \"lines\": \"行数\",\n        \"linesUnit\": \"行\",\n        \"searchPlaceholder\": \"搜索日志...\",\n        \"download\": \"下载\",\n        \"levelAll\": \"全部级别\",\n        \"autoRefresh\": \"自动刷新\",\n        \"systemLogsGroup\": \"系统日志\",\n        \"containerLogsGroup\": \"容器日志\"\n      }\n    },\n    \"notifications\": {\n      \"title\": \"通知设置\",\n      \"email\": \"邮件通知\",\n      \"webhook\": \"Webhook\",\n      \"enabled\": \"启用\",\n      \"disabled\": \"禁用\",\n      \"pageTitle\": \"通知设置\",\n      \"pageDesc\": \"配置系统通知的推送渠道和接收偏好\",\n      \"tabs\": {\n        \"channels\": \"推送渠道\",\n        \"preferences\": \"通知偏好\"\n      },\n      \"discord\": {\n        \"title\": \"Discord\",\n        \"description\": \"将通知推送到你的 Discord 频道\",\n        \"webhookLabel\": \"Webhook URL\",\n        \"webhookPlaceholder\": \"https://discord.com/api/webhooks/...\",\n        \"webhookHelp\": \"在 Discord 频道设置中创建 Webhook 并粘贴地址\",\n        \"requiredError\": \"启用 Discord 时必须填写 Webhook URL\",\n        \"urlInvalid\": \"请输入有效的 Discord Webhook URL\"\n      },\n      \"wecom\": {\n        \"title\": \"企业微信\",\n        \"description\": \"将通知推送到企业微信群机器人\",\n        \"webhookLabel\": \"Webhook URL\",\n        \"webhookPlaceholder\": \"https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=...\",\n        \"webhookHelp\": \"在企业微信群中添加机器人，复制 Webhook 地址\",\n        \"requiredError\": \"启用企业微信时必须填写 Webhook URL\",\n        \"urlInvalid\": \"请输入有效的企业微信 Webhook URL\"\n      },\n      \"emailChannel\": {\n        \"title\": \"邮件\",\n        \"description\": \"通过邮件接收通知\",\n        \"comingSoon\": \"即将支持\"\n      },\n      \"enterprise\": {\n        \"title\": \"飞书 / 钉钉 / 企微\",\n        \"description\": \"推送到企业协作平台\"\n      },\n      \"categories\": {\n        \"title\": \"通知分类\",\n        \"description\": \"选择你想要接收的通知类型\",\n        \"scan\": \"扫描任务\",\n        \"scanDesc\": \"扫描启动、进度、完成、失败等通知\",\n        \"vulnerability\": \"漏洞发现\",\n        \"vulnerabilityDesc\": \"发现安全漏洞时通知\",\n        \"asset\": \"资产发现\",\n        \"assetDesc\": \"发现新子域名、IP、端口等资产\",\n        \"system\": \"系统消息\",\n        \"systemDesc\": \"系统级通知和公告\"\n      },\n      \"saveSettings\": \"保存设置\"\n    }\n  },\n  \"toast\": {\n    \"copied\": \"已复制\",\n    \"copyFailed\": \"复制失败\",\n    \"downloadFailed\": \"下载失败\",\n    \"deleteSuccess\": \"删除成功：{count} 条\",\n    \"deleteFailed\": \"删除失败，请重试\",\n    \"deletedScanRecord\": \"已删除扫描记录: {name}\",\n    \"stoppedScan\": \"已停止扫描任务: {name}\",\n    \"stopFailed\": \"停止失败，请重试\",\n    \"bulkDeleteSuccess\": \"已删除 {count} 个扫描记录\",\n    \"bulkDeleteFailed\": \"批量删除失败，请重试\",\n    \"paramError\": \"参数错误\",\n    \"paramErrorDesc\": \"必须提供组织ID或目标ID\",\n    \"scanInitiated\": \"扫描已发起\",\n    \"scanInitiatedDesc\": \"成功创建 {count} 个扫描任务\",\n    \"initiateScanFailed\": \"发起扫描失败\",\n    \"noScansCreated\": \"未创建任何扫描任务\",\n    \"unknownError\": \"未知错误\",\n    \"noEngineSelected\": \"请选择至少一个扫描引擎\",\n    \"emptyConfig\": \"扫描配置不能为空\",\n    \"engineNameRequired\": \"请输入引擎名称\",\n    \"configRequired\": \"配置内容不能为空\",\n    \"yamlSyntaxError\": \"YAML 语法错误\",\n    \"engineCreateSuccess\": \"引擎创建成功\",\n    \"engineCreateSuccessDesc\": \"引擎 \\\"{name}\\\" 已成功创建\",\n    \"engineCreateFailed\": \"引擎创建失败\",\n    \"configSaveSuccess\": \"配置保存成功\",\n    \"configSaveSuccessDesc\": \"引擎 \\\"{name}\\\" 的配置已更新\",\n    \"configSaveFailed\": \"配置保存失败\",\n    \"selectFileFirst\": \"请先选择文件\",\n    \"invalidJsonFile\": \"无效的 JSON 文件\",\n    \"importSuccess\": \"导入成功\",\n    \"importFailed\": \"导入失败\",\n    \"loadScanHistoryFailed\": \"加载扫描历史失败\",\n    \"scan\": {\n      \"quick\": {\n        \"success\": \"已启动 {count} 个扫描任务\",\n        \"error\": \"启动扫描失败\"\n      },\n      \"stop\": {\n        \"success\": \"扫描已停止，已撤销 {count} 个任务\"\n      },\n      \"delete\": {\n        \"success\": \"已删除扫描任务: {name}\",\n        \"bulkSuccess\": \"已删除 {count} 个扫描任务\"\n      },\n      \"initiate\": {\n        \"success\": \"扫描发起成功\",\n        \"error\": \"发起扫描失败\"\n      }\n    },\n    \"scheduledScan\": {\n      \"create\": {\n        \"success\": \"定时扫描创建成功\",\n        \"error\": \"创建定时扫描失败\"\n      },\n      \"update\": {\n        \"success\": \"定时扫描更新成功\",\n        \"error\": \"更新定时扫描失败\"\n      },\n      \"delete\": {\n        \"success\": \"定时扫描删除成功\",\n        \"error\": \"删除定时扫描失败\"\n      },\n      \"toggle\": {\n        \"enabled\": \"定时扫描已启用\",\n        \"disabled\": \"定时扫描已禁用\",\n        \"error\": \"切换定时扫描状态失败\"\n      }\n    },\n    \"target\": {\n      \"create\": {\n        \"success\": \"目标创建成功\",\n        \"bulkSuccess\": \"已创建 {count} 个目标\",\n        \"error\": \"创建目标失败\"\n      },\n      \"update\": {\n        \"success\": \"目标更新成功\",\n        \"error\": \"更新目标失败\"\n      },\n      \"delete\": {\n        \"success\": \"目标 \\\"{name}\\\" 已删除\",\n        \"bulkSuccess\": \"已删除 {count} 个目标\",\n        \"error\": \"删除目标失败\"\n      },\n      \"link\": {\n        \"success\": \"目标已关联到组织\",\n        \"error\": \"关联目标失败\"\n      },\n      \"unlink\": {\n        \"success\": \"目标已从组织解除关联\",\n        \"bulkSuccess\": \"已解除 {count} 个目标的关联\",\n        \"error\": \"解除关联失败\"\n      }\n    },\n    \"organization\": {\n      \"create\": {\n        \"success\": \"组织创建成功\",\n        \"error\": \"创建组织失败\"\n      },\n      \"update\": {\n        \"success\": \"组织更新成功\",\n        \"error\": \"更新组织失败\"\n      },\n      \"delete\": {\n        \"success\": \"组织 \\\"{name}\\\" 已删除\",\n        \"bulkSuccess\": \"已删除 {count} 个组织\",\n        \"error\": \"删除组织失败\"\n      }\n    },\n    \"asset\": {\n      \"subdomain\": {\n        \"create\": {\n          \"success\": \"已创建 {count} 个子域名\",\n          \"partialSuccess\": \"已创建 {success} 个子域名，跳过 {skipped} 个\",\n          \"error\": \"创建子域名失败\"\n        },\n        \"delete\": {\n          \"success\": \"子域名已删除\",\n          \"bulkSuccess\": \"已删除 {count} 个子域名\",\n          \"error\": \"删除子域名失败\"\n        }\n      },\n      \"website\": {\n        \"create\": {\n          \"success\": \"已创建 {count} 个网站\",\n          \"partialSuccess\": \"已创建 {success} 个网站，跳过 {skipped} 个\",\n          \"error\": \"创建网站失败\"\n        },\n        \"delete\": {\n          \"success\": \"网站已删除\",\n          \"bulkSuccess\": \"已删除 {count} 个网站\",\n          \"error\": \"删除网站失败\"\n        }\n      },\n      \"endpoint\": {\n        \"create\": {\n          \"success\": \"已创建 {count} 个端点\",\n          \"partialSuccess\": \"已创建 {success} 个端点，跳过 {skipped} 个\",\n          \"error\": \"创建端点失败\"\n        },\n        \"delete\": {\n          \"success\": \"端点已删除\",\n          \"bulkSuccess\": \"已删除 {count} 个端点\",\n          \"error\": \"删除端点失败\"\n        }\n      },\n      \"directory\": {\n        \"create\": {\n          \"success\": \"已创建 {count} 个目录\",\n          \"partialSuccess\": \"已创建 {success} 个目录，跳过 {skipped} 个\",\n          \"error\": \"创建目录失败\"\n        },\n        \"delete\": {\n          \"success\": \"目录已删除\",\n          \"bulkSuccess\": \"已删除 {count} 个目录\",\n          \"error\": \"删除目录失败\"\n        }\n      }\n    },\n    \"auth\": {\n      \"login\": {\n        \"success\": \"登录成功\"\n      },\n      \"logout\": {\n        \"success\": \"已登出\"\n      },\n      \"changePassword\": {\n        \"success\": \"密码修改成功\",\n        \"error\": \"修改密码失败\"\n      }\n    },\n    \"worker\": {\n      \"create\": {\n        \"success\": \"节点创建成功\",\n        \"error\": \"创建节点失败\"\n      },\n      \"update\": {\n        \"success\": \"节点更新成功\",\n        \"error\": \"更新节点失败\"\n      },\n      \"delete\": {\n        \"success\": \"节点删除成功\",\n        \"error\": \"删除节点失败\"\n      },\n      \"deploy\": {\n        \"success\": \"节点部署已启动\",\n        \"error\": \"部署节点失败\"\n      },\n      \"restart\": {\n        \"success\": \"节点正在重启\",\n        \"error\": \"重启节点失败\"\n      },\n      \"stop\": {\n        \"success\": \"节点已停止\",\n        \"error\": \"停止节点失败\"\n      }\n    },\n    \"nucleiRepo\": {\n      \"create\": {\n        \"success\": \"仓库添加成功\",\n        \"error\": \"添加仓库失败\"\n      },\n      \"update\": {\n        \"success\": \"仓库更新成功\",\n        \"error\": \"更新仓库失败\"\n      },\n      \"delete\": {\n        \"success\": \"仓库删除成功\",\n        \"error\": \"删除仓库失败\"\n      },\n      \"sync\": {\n        \"success\": \"仓库同步成功\",\n        \"error\": \"同步仓库失败\"\n      }\n    },\n    \"wordlist\": {\n      \"upload\": {\n        \"success\": \"字典上传成功\",\n        \"error\": \"上传字典失败\"\n      },\n      \"update\": {\n        \"success\": \"字典更新成功\",\n        \"error\": \"更新字典失败\"\n      },\n      \"delete\": {\n        \"success\": \"字典删除成功\",\n        \"error\": \"删除字典失败\"\n      }\n    },\n    \"notification\": {\n      \"settings\": {\n        \"success\": \"通知设置已保存\",\n        \"error\": \"保存通知设置失败\"\n      },\n      \"markRead\": {\n        \"success\": \"已标记为已读\",\n        \"error\": \"标记已读失败\"\n      },\n      \"connection\": {\n        \"error\": \"通知连接错误: {message}\"\n      }\n    },\n    \"apiKeys\": {\n      \"settings\": {\n        \"success\": \"API 密钥配置已保存\",\n        \"error\": \"保存 API 密钥配置失败\"\n      }\n    },\n    \"tool\": {\n      \"create\": {\n        \"success\": \"工具创建成功\",\n        \"error\": \"创建工具失败\"\n      },\n      \"update\": {\n        \"success\": \"工具更新成功\",\n        \"error\": \"更新工具失败\"\n      },\n      \"delete\": {\n        \"success\": \"工具删除成功\",\n        \"error\": \"删除工具失败\"\n      }\n    },\n    \"engine\": {\n      \"create\": {\n        \"success\": \"引擎创建成功\",\n        \"error\": \"创建引擎失败\"\n      },\n      \"update\": {\n        \"success\": \"引擎更新成功\",\n        \"error\": \"更新引擎失败\"\n      },\n      \"delete\": {\n        \"success\": \"引擎删除成功\",\n        \"error\": \"删除引擎失败\"\n      }\n    },\n    \"command\": {\n      \"create\": {\n        \"success\": \"命令创建成功\",\n        \"error\": \"创建命令失败\"\n      },\n      \"update\": {\n        \"success\": \"命令更新成功\",\n        \"error\": \"更新命令失败\"\n      },\n      \"delete\": {\n        \"success\": \"命令删除成功\",\n        \"bulkSuccess\": \"已删除 {count} 个命令\",\n        \"error\": \"删除命令失败\"\n      }\n    },\n    \"nucleiTemplate\": {\n      \"refresh\": {\n        \"loading\": \"正在同步模板...\",\n        \"success\": \"模板同步成功\",\n        \"error\": \"同步模板失败\"\n      },\n      \"upload\": {\n        \"success\": \"模板上传成功\",\n        \"error\": \"上传模板失败\"\n      },\n      \"save\": {\n        \"success\": \"模板保存成功\",\n        \"error\": \"保存模板失败\"\n      }\n    },\n    \"nucleiGit\": {\n      \"settings\": {\n        \"success\": \"Git 设置保存成功\",\n        \"error\": \"保存 Git 设置失败\"\n      }\n    },\n    \"systemLog\": {\n      \"fetch\": {\n        \"error\": \"系统日志获取失败，请检查后端接口\",\n        \"recovered\": \"系统日志连接已恢复\"\n      }\n    },\n    \"blacklist\": {\n      \"save\": {\n        \"success\": \"黑名单规则已保存\",\n        \"error\": \"保存黑名单规则失败\"\n      }\n    }\n  },\n  \"quickScan\": {\n    \"title\": \"快速扫描\",\n    \"description\": \"快速创建扫描任务，批量扫描多个目标\",\n    \"steps\": {\n      \"enterTargets\": \"输入目标\",\n      \"selectEngine\": \"选择引擎\",\n      \"confirmScan\": \"确认扫描\"\n    },\n    \"step1Title\": \"输入目标\",\n    \"step2Title\": \"选择引擎\",\n    \"step3Title\": \"编辑配置\",\n    \"stepIndicator\": \"步骤 {current}/{total}\",\n    \"step1Hint\": \"在左侧输入框中输入扫描目标，每行一个\",\n    \"step\": \"步骤 {current}/{total} · {title}\",\n    \"targetPlaceholder\": \"每行输入一个目标，支持以下格式：\\n\\n域名: example.com, sub.example.com\\nIP地址: 192.168.1.1, 10.0.0.1\\nCIDR网段: 192.168.1.0/24, 10.0.0.0/8\\nURL: https://example.com/api/v1\",\n    \"supportedFormats\": \"支持 域名、IP、CIDR、URL\",\n    \"validTargets\": \"{count} 个有效目标\",\n    \"invalidTargets\": \"{count} 个无效\",\n    \"selectEngine\": \"选择引擎\",\n    \"noEngines\": \"暂无可用引擎\",\n    \"capabilities\": \"{count} 项能力\",\n    \"noConfig\": \"无配置\",\n    \"scanTargets\": \"扫描目标\",\n    \"totalTargets\": \"共 {count} 个目标\",\n    \"previous\": \"上一步\",\n    \"back\": \"上一步\",\n    \"next\": \"下一步\",\n    \"startScan\": \"开始扫描\",\n    \"creating\": \"创建中...\",\n    \"selectEngineHint\": \"选择左侧引擎查看配置详情\",\n    \"moreErrors\": \"还有 {count} 个错误...\",\n    \"lineError\": \"行 {lineNumber}: {error}\",\n    \"loading\": \"加载中...\",\n    \"loadFailed\": \"加载失败\",\n    \"selectedCount\": \"已选择 {count} 个\",\n    \"confirmTargets\": \"共 {count} 个扫描目标\",\n    \"andMore\": \"还有 {count} 个...\",\n    \"selectedEngines\": \"已选引擎\",\n    \"confirmSummary\": \"将使用 {engineCount} 个引擎扫描 {targetCount} 个目标\",\n    \"configTitle\": \"扫描配置\",\n    \"configEdited\": \"已编辑\",\n    \"overwriteConfirm\": {\n      \"title\": \"覆盖配置确认\",\n      \"description\": \"您已手动编辑过配置，切换引擎将覆盖当前配置。是否继续？\",\n      \"cancel\": \"取消\",\n      \"confirm\": \"确认覆盖\"\n    },\n    \"toast\": {\n      \"noValidTarget\": \"请输入至少一个有效目标\",\n      \"hasInvalidInputs\": \"存在 {count} 个无效输入，请修正后继续\",\n      \"selectEngine\": \"请选择扫描引擎\",\n      \"emptyConfig\": \"扫描配置不能为空\",\n      \"getEnginesFailed\": \"获取引擎列表失败\",\n      \"createFailed\": \"创建扫描任务失败\",\n      \"createSuccess\": \"已创建 {count} 个扫描任务\",\n      \"createSuccessDesc\": \"{created} 个目标成功，{failed} 个失败\",\n      \"targetsFailed\": \"{count} 个目标处理失败\",\n      \"configConflict\": \"引擎配置冲突\"\n    }\n  },\n  \"notificationDrawer\": {\n    \"title\": \"通知\",\n    \"markAllRead\": \"全部已读\",\n    \"markAllAsRead\": \"全部标记为已读\",\n    \"empty\": \"暂无通知\",\n    \"noNotifications\": \"暂无通知\",\n    \"filters\": {\n      \"all\": \"全部\",\n      \"scan\": \"扫描\",\n      \"vulnerability\": \"漏洞\",\n      \"asset\": \"资产\",\n      \"system\": \"系统\"\n    },\n    \"categories\": {\n      \"scan\": \"扫描任务\",\n      \"vulnerability\": \"漏洞发现\",\n      \"asset\": \"资产发现\",\n      \"system\": \"系统消息\"\n    },\n    \"timeGroups\": {\n      \"today\": \"今天\",\n      \"yesterday\": \"昨天\",\n      \"earlier\": \"更早\"\n    },\n    \"status\": {\n      \"realtime\": \"实时\",\n      \"offline\": \"离线\"\n    },\n    \"connection\": {\n      \"live\": \"实时\",\n      \"offline\": \"离线\"\n    }\n  },\n  \"disk\": {\n    \"totalCapacity\": \"总容量\",\n    \"used\": \"已使用\",\n    \"available\": \"可用空间\"\n  },\n  \"subdomains\": {\n    \"loadFailed\": \"加载失败\",\n    \"loadError\": \"加载域名数据时出现错误，请重试\",\n    \"reload\": \"重新加载\"\n  },\n  \"vulnerabilities\": {\n    \"title\": \"漏洞管理\",\n    \"description\": \"查看和管理所有扫描发现的漏洞\",\n    \"detail\": {\n      \"vulnUrl\": \"漏洞 URL\",\n      \"tabs\": {\n        \"overview\": \"概览\",\n        \"requestResponse\": \"请求/响应\",\n        \"evidence\": \"证据\",\n        \"reproduce\": \"复现\",\n        \"rawData\": \"原始数据\"\n      },\n      \"basicInfo\": \"基本信息\",\n      \"createdAt\": \"创建时间\",\n      \"severity\": \"严重性\",\n      \"source\": \"来源\",\n      \"httpMethod\": \"HTTP 方法\",\n      \"param\": \"参数\",\n      \"classification\": \"漏洞分类\",\n      \"noClassification\": \"暂无分类信息\",\n      \"detailedDesc\": \"详细描述\",\n      \"references\": \"参考链接\",\n      \"noEvidence\": \"暂无证据数据\",\n      \"curlCommand\": \"CURL 命令\",\n      \"curlHint\": \"复制以下命令到终端执行，即可复现此漏洞\",\n      \"rawOutput\": \"原始输出 (JSON)\",\n      \"rawOutputHint\": \"扫描工具的完整输出数据\",\n      \"evidence\": {\n        \"payload\": \"Payload\",\n        \"evidence\": \"证据\",\n        \"httpRequest\": \"HTTP 请求\",\n        \"httpResponse\": \"HTTP 响应\"\n      }\n    },\n    \"severity\": {\n      \"critical\": \"严重\",\n      \"high\": \"高危\",\n      \"medium\": \"中危\",\n      \"low\": \"低危\",\n      \"info\": \"信息\"\n    }\n  },\n  \"pages\": {\n    \"organization\": {\n      \"title\": \"组织\",\n      \"description\": \"管理和查看系统中的所有组织信息\"\n    },\n    \"target\": {\n      \"title\": \"目标\",\n      \"description\": \"管理系统中的所有目标信息\"\n    },\n    \"workers\": {\n      \"title\": \"扫描节点\",\n      \"description\": \"管理分布式扫描节点，支持远程 VPS 自动部署\"\n    },\n    \"wordlists\": {\n      \"title\": \"字典管理\",\n      \"searchPlaceholder\": \"搜索字典...\",\n      \"listTitle\": \"字典列表\",\n      \"loading\": \"加载中...\",\n      \"noMatch\": \"未找到匹配的字典\",\n      \"noData\": \"暂无字典，请先上传\",\n      \"lines\": \"行\",\n      \"rows\": \"行数\",\n      \"size\": \"大小\",\n      \"id\": \"ID\",\n      \"updatedAt\": \"更新时间\",\n      \"hash\": \"Hash\",\n      \"editContent\": \"编辑内容\",\n      \"delete\": \"删除\",\n      \"selectHint\": \"选择左侧字典查看详情\",\n      \"idCopied\": \"ID 已复制到剪贴板\"\n    },\n    \"nuclei\": {\n      \"title\": \"Nuclei 模板仓库\",\n      \"searchPlaceholder\": \"搜索仓库...\",\n      \"addRepo\": \"新增仓库\",\n      \"listTitle\": \"仓库列表\",\n      \"loading\": \"加载中...\",\n      \"loadFailed\": \"加载失败\",\n      \"noMatch\": \"未找到匹配的仓库\",\n      \"noData\": \"暂无仓库，请先新增\",\n      \"synced\": \"已同步\",\n      \"notSynced\": \"未同步\",\n      \"syncedAt\": \"同步于\",\n      \"notSyncedYet\": \"尚未同步\",\n      \"status\": \"状态\",\n      \"lastSync\": \"最后同步\",\n      \"gitUrl\": \"Git 地址\",\n      \"localPath\": \"本地路径\",\n      \"commit\": \"Commit\",\n      \"syncRepo\": \"同步仓库\",\n      \"syncing\": \"同步中...\",\n      \"editConfig\": \"编辑配置\",\n      \"manageTemplates\": \"管理模板\",\n      \"delete\": \"删除\",\n      \"selectHint\": \"选择左侧仓库查看详情\",\n      \"addDialog\": {\n        \"title\": \"新增 Nuclei 模板仓库\",\n        \"repoName\": \"仓库名称\",\n        \"repoNamePlaceholder\": \"例如：默认 Nuclei 官方模板\",\n        \"gitUrl\": \"Git 仓库地址\",\n        \"gitUrlPlaceholder\": \"例如：https://github.com/projectdiscovery/nuclei-templates.git\",\n        \"cancel\": \"取消\",\n        \"creating\": \"创建中...\",\n        \"confirm\": \"确认新增\"\n      },\n      \"editDialog\": {\n        \"title\": \"编辑 Nuclei 仓库配置\",\n        \"repoName\": \"仓库名称：\",\n        \"gitUrl\": \"Git 仓库地址\",\n        \"gitUrlPlaceholder\": \"例如：https://github.com/projectdiscovery/nuclei-templates.git\",\n        \"cancel\": \"取消\",\n        \"saving\": \"保存中...\",\n        \"save\": \"保存配置\"\n      }\n    },\n    \"tools\": {\n      \"title\": \"工具\",\n      \"description\": \"管理与扫描相关的辅助资源，如字典等\",\n      \"wordlists\": {\n        \"title\": \"字典管理\",\n        \"description\": \"管理目录扫描等使用的字典文件\"\n      },\n      \"nuclei\": {\n        \"title\": \"Nuclei 模板\",\n        \"description\": \"浏览本地 Nuclei 模板结构及内容\"\n      },\n      \"comingSoon\": \"敬请期待\",\n      \"stats\": {\n        \"total\": \"总数：\",\n        \"active\": \"活跃：\"\n      },\n      \"enterManagement\": \"进入管理\",\n      \"quickActions\": {\n        \"title\": \"快速操作\",\n        \"description\": \"常用的工具操作\"\n      }\n    },\n    \"screenshots\": {\n      \"filterPlaceholder\": \"按 URL 过滤...\",\n      \"loadError\": \"加载截图失败\",\n      \"noResults\": \"没有匹配的截图\",\n      \"lightboxTitle\": \"截图预览\",\n      \"empty\": {\n        \"title\": \"暂无截图\",\n        \"description\": \"启用截图功能进行站点扫描后，截图将显示在这里。\"\n      }\n    },\n    \"targetDetail\": {\n      \"noDescription\": \"暂无描述\",\n      \"breadcrumb\": {\n        \"targetDetail\": \"目标详情\"\n      },\n      \"error\": {\n        \"title\": \"加载失败\",\n        \"message\": \"获取目标数据时出现错误\"\n      },\n      \"notFound\": {\n        \"title\": \"目标不存在\",\n        \"message\": \"未找到ID为 {id} 的目标\"\n      },\n      \"tabs\": {\n        \"overview\": \"概览\",\n        \"assets\": \"资产\",\n        \"screenshots\": \"截图\",\n        \"vulnerabilities\": \"漏洞\",\n        \"settings\": \"设置\"\n      },\n      \"settings\": {\n        \"loadError\": \"加载设置失败\",\n        \"blacklist\": {\n          \"title\": \"黑名单规则\",\n          \"description\": \"扫描时将自动排除匹配以下规则的资产。\",\n          \"rulesTitle\": \"支持的规则类型\",\n          \"rules\": {\n            \"domain\": \"域名通配符，匹配指定后缀\",\n            \"domainShort\": \"域名\",\n            \"keyword\": \"关键词匹配，包含指定字符串\",\n            \"keywordShort\": \"关键词\",\n            \"ip\": \"精确匹配 IP 地址\",\n            \"ipShort\": \"IP\",\n            \"cidr\": \"匹配 IP 网段范围\",\n            \"cidrShort\": \"CIDR\"\n          },\n          \"placeholder\": \"输入规则，每行一个\\n\\n示例：\\n*.gov\\n*.edu\\n*cdn*\\n192.168.0.0/16\\n10.0.0.1\",\n          \"save\": \"保存规则\"\n        },\n        \"scheduledScans\": {\n          \"title\": \"定时扫描\",\n          \"description\": \"为该目标配置自动执行的扫描任务\",\n          \"create\": \"新建定时扫描\",\n          \"empty\": \"暂无定时扫描任务\",\n          \"emptyHint\": \"点击上方按钮创建定时扫描任务\",\n          \"enabled\": \"已启用\",\n          \"disabled\": \"已禁用\",\n          \"nextRun\": \"下次执行\",\n          \"runCount\": \"执行次数\",\n          \"edit\": \"编辑\",\n          \"delete\": \"删除\",\n          \"cronDaily\": \"每天 {time}\",\n          \"cronWeekly\": \"每周{day} {time}\",\n          \"cronMonthly\": \"每月{day}日 {time}\",\n          \"weekdays\": {\n            \"sun\": \"日\",\n            \"mon\": \"一\",\n            \"tue\": \"二\",\n            \"wed\": \"三\",\n            \"thu\": \"四\",\n            \"fri\": \"五\",\n            \"sat\": \"六\"\n          },\n          \"deleteConfirm\": {\n            \"title\": \"确认删除\",\n            \"description\": \"确定要删除定时扫描任务「{name}」吗？此操作无法撤销。\",\n            \"cancel\": \"取消\",\n            \"confirm\": \"删除\"\n          }\n        }\n      },\n      \"overview\": {\n        \"loadError\": \"加载目标数据失败\",\n        \"createdAt\": \"创建时间\",\n        \"lastScanned\": \"最后扫描\",\n        \"assetsTitle\": \"资产统计\",\n        \"vulnerabilitiesTitle\": \"漏洞统计\",\n        \"scanHistoryTitle\": \"扫描历史\",\n        \"recentScans\": \"最近扫描\",\n        \"noScans\": \"暂无扫描记录\",\n        \"viewAll\": \"查看全部\",\n        \"cards\": {\n          \"websites\": \"网站\",\n          \"subdomains\": \"子域名\",\n          \"ips\": \"IP 地址\",\n          \"urls\": \"URL\",\n          \"directories\": \"目录\",\n          \"vulnerabilities\": \"漏洞总数\"\n        },\n        \"severity\": {\n          \"critical\": \"严重\",\n          \"high\": \"高危\",\n          \"medium\": \"中危\",\n          \"low\": \"低危\"\n        },\n        \"scanStatus\": {\n          \"completed\": \"已完成\",\n          \"running\": \"运行中\",\n          \"failed\": \"失败\",\n          \"cancelled\": \"已取消\",\n          \"initiated\": \"等待中\"\n        },\n        \"scheduledScans\": {\n          \"title\": \"定时扫描\",\n          \"manage\": \"管理\",\n          \"empty\": \"暂无定时扫描任务\",\n          \"createFirst\": \"创建第一个定时扫描\",\n          \"configured\": \"已配置\",\n          \"enabled\": \"已启用\",\n          \"nextRun\": \"下次执行\",\n          \"today\": \"今天\",\n          \"tomorrow\": \"明天\",\n          \"more\": \"+{count} 更多\"\n        },\n        \"initiateScan\": \"发起扫描\"\n      }\n    },\n    \"nav\": {\n      \"scanEngine\": \"扫描引擎\",\n      \"wordlists\": \"字典管理\"\n    },\n    \"settings\": {\n      \"blacklist\": {\n        \"title\": \"全局黑名单\",\n        \"description\": \"配置全局黑名单规则，扫描时将自动排除匹配的资产\",\n        \"loadError\": \"加载黑名单规则失败\",\n        \"card\": {\n          \"title\": \"黑名单规则\",\n          \"description\": \"这些规则将应用于所有目标的扫描任务。如需为特定目标配置黑名单，请前往目标设置页面。\"\n        },\n        \"rules\": {\n          \"title\": \"支持的规则类型\",\n          \"domain\": \"域名\",\n          \"keyword\": \"关键词\",\n          \"ip\": \"IP\",\n          \"cidr\": \"CIDR\"\n        },\n        \"scopeHint\": \"全局规则对所有目标生效。目标级规则可在「目标 → 设置」中单独配置。\",\n        \"placeholder\": \"输入规则，每行一个\\n\\n示例：\\n*.gov\\n*.edu\\n*cdn*\\n192.168.0.0/16\\n10.0.0.1\",\n        \"save\": \"保存规则\",\n        \"toast\": {\n          \"saveSuccess\": \"黑名单规则已保存\",\n          \"saveError\": \"保存黑名单规则失败\"\n        }\n      }\n    }\n  },\n  \"metadata\": {\n    \"title\": \"星环 (Xingrin) - 攻击面管理平台 | ASM\",\n    \"description\": \"星环 - 攻击面管理平台 (ASM)，提供自动化资产发现、漏洞扫描、子域名枚举、端口扫描等功能。支持分布式扫描、Nuclei 集成、定时任务。\",\n    \"keywords\": \"ASM, 攻击面管理, 漏洞扫描, 资产发现, Bug Bounty, 渗透测试, Nuclei, 子域名枚举, 安全工具, EASM, 安全\",\n    \"ogTitle\": \"星环 (Xingrin) - 攻击面管理平台\",\n    \"ogDescription\": \"攻击面管理平台 (ASM)，提供自动化资产发现与漏洞扫描\"\n  },\n  \"bulkAdd\": {\n    \"subdomain\": {\n      \"title\": \"批量添加子域名\",\n      \"description\": \"输入子域名列表，每行一个。\",\n      \"belongsTo\": \"子域名必须属于\",\n      \"label\": \"子域名列表\",\n      \"placeholder\": \"请输入子域名，每行一个\\n例如：\\napi.example.com\\nwww.example.com\\nmail.example.com\",\n      \"valid\": \"有效: {count} 个\",\n      \"duplicate\": \"重复: {count} 个\",\n      \"invalid\": \"无效: {count} 个\",\n      \"lineError\": \"第 {line} 行: \\\"{value}\\\" - {error}\",\n      \"formatInvalid\": \"格式无效\",\n      \"creating\": \"创建中...\",\n      \"bulkAdd\": \"批量添加\"\n    },\n    \"common\": {\n      \"cancel\": \"取消\",\n      \"bulkAdd\": \"批量添加\",\n      \"formatInvalid\": \"格式无效\"\n    }\n  },\n  \"globalSearch\": {\n    \"search\": \"搜索\",\n    \"placeholder\": \"搜索资产... (host=\\\"api\\\" && tech=\\\"nginx\\\")\",\n    \"noResults\": \"未找到结果\",\n    \"searchFor\": \"搜索\",\n    \"recent\": \"最近搜索\",\n    \"quickSearch\": \"快捷搜索\",\n    \"hint\": \"支持 FOFA 风格语法\",\n    \"toSearch\": \"搜索\"\n  },\n  \"errors\": {\n    \"unknown\": \"操作失败，请稍后重试\",\n    \"validation\": \"输入数据无效\",\n    \"notFound\": \"资源未找到\",\n    \"permissionDenied\": \"权限不足\",\n    \"serverError\": \"服务器错误，请稍后重试\",\n    \"badRequest\": \"请求格式错误\",\n    \"conflict\": \"资源冲突，请检查后重试\",\n    \"unauthorized\": \"请先登录\",\n    \"rateLimited\": \"请求过于频繁，请稍后重试\"\n  },\n  \"about\": {\n    \"title\": \"关于 XingRin\",\n    \"description\": \"攻击面管理平台\",\n    \"currentVersion\": \"当前版本\",\n    \"latestVersion\": \"最新版本\",\n    \"checkUpdate\": \"检查更新\",\n    \"checking\": \"检查中...\",\n    \"checkFailed\": \"检查更新失败，请稍后重试\",\n    \"updateAvailable\": \"有更新\",\n    \"upToDate\": \"已是最新\",\n    \"viewRelease\": \"查看发布\",\n    \"updateHint\": \"在项目根目录运行以下命令更新：\",\n    \"changelog\": \"更新日志\",\n    \"feedback\": \"问题反馈\",\n    \"docs\": \"使用文档\"\n  }\n}\n"
  },
  {
    "path": "frontend/middleware.ts",
    "content": "import createMiddleware from 'next-intl/middleware';\nimport { locales, defaultLocale } from '@/i18n/config';\n\nexport default createMiddleware({\n  // Supported language list\n  locales,\n  // Default language\n  defaultLocale,\n  // Always show language prefix in URL\n  localePrefix: 'always',\n  // Auto-detect browser language preference\n  localeDetection: true,\n});\n\nexport const config = {\n  // Match all paths, excluding API, static files, Next.js internal paths, etc.\n  matcher: [\n    // Match all paths\n    '/((?!api|_next|_vercel|.*\\\\..*).*)',\n  ],\n};\n"
  },
  {
    "path": "frontend/mock/config.ts",
    "content": "/**\n * Mock 数据配置\n * \n * 使用方式：\n * 1. 在 .env.local 中设置 NEXT_PUBLIC_USE_MOCK=true 启用 mock 数据\n * 2. 或者直接修改下面的 FORCE_MOCK 为 true\n */\n\n// 强制使用 mock 数据（一般保持 false，通过环境变量控制）\nconst FORCE_MOCK = false\n\n// 从环境变量读取 mock 配置\nexport const USE_MOCK = FORCE_MOCK || process.env.NEXT_PUBLIC_USE_MOCK === 'true'\n\n// Mock 数据延迟（模拟网络请求）\nexport const MOCK_DELAY = 300 // ms\n\n/**\n * 模拟网络延迟\n */\nexport function mockDelay(ms: number = MOCK_DELAY): Promise<void> {\n  return new Promise(resolve => setTimeout(resolve, ms))\n}\n"
  },
  {
    "path": "frontend/mock/data/auth.ts",
    "content": "import type { User, MeResponse, LoginResponse, LogoutResponse } from '@/types/auth.types'\n\nexport const mockUser: User = {\n  id: 1,\n  username: 'admin',\n  isStaff: true,\n  isSuperuser: true,\n}\n\nexport const mockMeResponse: MeResponse = {\n  authenticated: true,\n  user: mockUser,\n}\n\nexport const mockLoginResponse: LoginResponse = {\n  message: 'Login successful',\n  user: mockUser,\n}\n\nexport const mockLogoutResponse: LogoutResponse = {\n  message: 'Logout successful',\n}\n"
  },
  {
    "path": "frontend/mock/data/blacklist.ts",
    "content": "/**\n * Blacklist Mock Data\n * \n * 黑名单规则 mock 数据\n * - 全局黑名单：适用于所有 Target\n * - Target 黑名单：仅适用于特定 Target\n */\n\nexport interface BlacklistResponse {\n  patterns: string[]\n}\n\nexport interface UpdateBlacklistRequest {\n  patterns: string[]\n}\n\n// 全局黑名单 mock 数据\nlet mockGlobalBlacklistPatterns: string[] = [\n  '*.gov',\n  '*.edu',\n  '*.mil',\n  '10.0.0.0/8',\n  '172.16.0.0/12',\n  '192.168.0.0/16',\n]\n\n// Target 黑名单 mock 数据（按 targetId 存储）\nconst mockTargetBlacklistPatterns: Record<number, string[]> = {\n  1: ['*.internal.example.com', '192.168.1.0/24'],\n  2: ['cdn.example.com', '*.cdn.*'],\n}\n\n/**\n * 获取全局黑名单\n */\nexport function getMockGlobalBlacklist(): BlacklistResponse {\n  return {\n    patterns: [...mockGlobalBlacklistPatterns],\n  }\n}\n\n/**\n * 更新全局黑名单（全量替换）\n */\nexport function updateMockGlobalBlacklist(data: UpdateBlacklistRequest): BlacklistResponse {\n  mockGlobalBlacklistPatterns = [...data.patterns]\n  return {\n    patterns: mockGlobalBlacklistPatterns,\n  }\n}\n\n/**\n * 获取 Target 黑名单\n */\nexport function getMockTargetBlacklist(targetId: number): BlacklistResponse {\n  return {\n    patterns: mockTargetBlacklistPatterns[targetId] ? [...mockTargetBlacklistPatterns[targetId]] : [],\n  }\n}\n\n/**\n * 更新 Target 黑名单（全量替换）\n */\nexport function updateMockTargetBlacklist(targetId: number, data: UpdateBlacklistRequest): BlacklistResponse {\n  mockTargetBlacklistPatterns[targetId] = [...data.patterns]\n  return {\n    patterns: mockTargetBlacklistPatterns[targetId],\n  }\n}\n"
  },
  {
    "path": "frontend/mock/data/dashboard.ts",
    "content": "import type { AssetStatistics, StatisticsHistoryItem, DashboardStats } from '@/types/dashboard.types'\n\nexport const mockDashboardStats: DashboardStats = {\n  totalTargets: 156,\n  totalSubdomains: 4823,\n  totalEndpoints: 12456,\n  totalVulnerabilities: 89,\n}\n\nexport const mockAssetStatistics: AssetStatistics = {\n  totalTargets: 156,\n  totalSubdomains: 4823,\n  totalIps: 892,\n  totalEndpoints: 12456,\n  totalWebsites: 3421,\n  totalVulns: 89,\n  totalAssets: 21638,\n  runningScans: 3,\n  updatedAt: new Date().toISOString(),\n  // 变化值\n  changeTargets: 12,\n  changeSubdomains: 234,\n  changeIps: 45,\n  changeEndpoints: 567,\n  changeWebsites: 89,\n  changeVulns: -5,\n  changeAssets: 942,\n  // 漏洞严重程度分布\n  vulnBySeverity: {\n    critical: 3,\n    high: 12,\n    medium: 28,\n    low: 34,\n    info: 12,\n  },\n}\n\n// 生成过去 N 天的历史数据\nfunction generateHistoryData(days: number): StatisticsHistoryItem[] {\n  const data: StatisticsHistoryItem[] = []\n  const now = new Date()\n  \n  for (let i = days - 1; i >= 0; i--) {\n    const date = new Date(now)\n    date.setDate(date.getDate() - i)\n    \n    // 模拟逐渐增长的趋势\n    const factor = 1 + (days - i) * 0.02\n    \n    data.push({\n      date: date.toISOString().split('T')[0],\n      totalTargets: Math.floor(140 * factor),\n      totalSubdomains: Math.floor(4200 * factor),\n      totalIps: Math.floor(780 * factor),\n      totalEndpoints: Math.floor(10800 * factor),\n      totalWebsites: Math.floor(2980 * factor),\n      totalVulns: Math.floor(75 * factor),\n      totalAssets: Math.floor(18900 * factor),\n    })\n  }\n  \n  return data\n}\n\nexport const mockStatisticsHistory7Days = generateHistoryData(7)\nexport const mockStatisticsHistory30Days = generateHistoryData(30)\n\nexport function getMockStatisticsHistory(days: number): StatisticsHistoryItem[] {\n  if (days <= 7) return mockStatisticsHistory7Days\n  return generateHistoryData(days)\n}\n"
  },
  {
    "path": "frontend/mock/data/directories.ts",
    "content": "import type { Directory, DirectoryListResponse } from '@/types/directory.types'\n\nexport const mockDirectories: Directory[] = [\n  {\n    id: 1,\n    url: 'https://acme.com/admin',\n    status: 200,\n    contentLength: 12345,\n    words: 1234,\n    lines: 89,\n    contentType: 'text/html',\n    duration: 0.234,\n    websiteUrl: 'https://acme.com',\n    createdAt: '2024-12-28T10:00:00Z',\n  },\n  {\n    id: 2,\n    url: 'https://acme.com/api',\n    status: 301,\n    contentLength: 0,\n    words: 0,\n    lines: 0,\n    contentType: 'text/html',\n    duration: 0.056,\n    websiteUrl: 'https://acme.com',\n    createdAt: '2024-12-28T10:01:00Z',\n  },\n  {\n    id: 3,\n    url: 'https://acme.com/login',\n    status: 200,\n    contentLength: 8765,\n    words: 567,\n    lines: 45,\n    contentType: 'text/html',\n    duration: 0.189,\n    websiteUrl: 'https://acme.com',\n    createdAt: '2024-12-28T10:02:00Z',\n  },\n  {\n    id: 4,\n    url: 'https://acme.com/dashboard',\n    status: 302,\n    contentLength: 0,\n    words: 0,\n    lines: 0,\n    contentType: 'text/html',\n    duration: 0.078,\n    websiteUrl: 'https://acme.com',\n    createdAt: '2024-12-28T10:03:00Z',\n  },\n  {\n    id: 5,\n    url: 'https://acme.com/static/js/app.js',\n    status: 200,\n    contentLength: 456789,\n    words: 12345,\n    lines: 5678,\n    contentType: 'application/javascript',\n    duration: 0.345,\n    websiteUrl: 'https://acme.com',\n    createdAt: '2024-12-28T10:04:00Z',\n  },\n  {\n    id: 6,\n    url: 'https://acme.com/.git/config',\n    status: 200,\n    contentLength: 234,\n    words: 45,\n    lines: 12,\n    contentType: 'text/plain',\n    duration: 0.023,\n    websiteUrl: 'https://acme.com',\n    createdAt: '2024-12-28T10:05:00Z',\n  },\n  {\n    id: 7,\n    url: 'https://acme.com/backup.zip',\n    status: 200,\n    contentLength: 12345678,\n    words: null,\n    lines: null,\n    contentType: 'application/zip',\n    duration: 1.234,\n    websiteUrl: 'https://acme.com',\n    createdAt: '2024-12-28T10:06:00Z',\n  },\n  {\n    id: 8,\n    url: 'https://acme.com/robots.txt',\n    status: 200,\n    contentLength: 567,\n    words: 89,\n    lines: 23,\n    contentType: 'text/plain',\n    duration: 0.034,\n    websiteUrl: 'https://acme.com',\n    createdAt: '2024-12-28T10:07:00Z',\n  },\n  {\n    id: 9,\n    url: 'https://api.acme.com/v1/health',\n    status: 200,\n    contentLength: 45,\n    words: 5,\n    lines: 1,\n    contentType: 'application/json',\n    duration: 0.012,\n    websiteUrl: 'https://api.acme.com',\n    createdAt: '2024-12-28T10:08:00Z',\n  },\n  {\n    id: 10,\n    url: 'https://api.acme.com/swagger-ui.html',\n    status: 200,\n    contentLength: 23456,\n    words: 1234,\n    lines: 234,\n    contentType: 'text/html',\n    duration: 0.267,\n    websiteUrl: 'https://api.acme.com',\n    createdAt: '2024-12-28T10:09:00Z',\n  },\n  {\n    id: 11,\n    url: 'https://techstart.io/wp-admin',\n    status: 302,\n    contentLength: 0,\n    words: 0,\n    lines: 0,\n    contentType: 'text/html',\n    duration: 0.089,\n    websiteUrl: 'https://techstart.io',\n    createdAt: '2024-12-26T08:45:00Z',\n  },\n  {\n    id: 12,\n    url: 'https://techstart.io/wp-login.php',\n    status: 200,\n    contentLength: 4567,\n    words: 234,\n    lines: 78,\n    contentType: 'text/html',\n    duration: 0.156,\n    websiteUrl: 'https://techstart.io',\n    createdAt: '2024-12-26T08:46:00Z',\n  },\n]\n\nexport function getMockDirectories(params?: {\n  page?: number\n  pageSize?: number\n  filter?: string\n  targetId?: number\n  scanId?: number\n}): DirectoryListResponse {\n  const page = params?.page || 1\n  const pageSize = params?.pageSize || 10\n  const filter = params?.filter?.toLowerCase() || ''\n\n  let filtered = mockDirectories\n\n  if (filter) {\n    filtered = filtered.filter(\n      d =>\n        d.url.toLowerCase().includes(filter) ||\n        d.contentType.toLowerCase().includes(filter)\n    )\n  }\n\n  const total = filtered.length\n  const totalPages = Math.ceil(total / pageSize)\n  const start = (page - 1) * pageSize\n  const results = filtered.slice(start, start + pageSize)\n\n  return {\n    results,\n    total,\n    page,\n    pageSize,\n    totalPages,\n  }\n}\n\nexport function getMockDirectoryById(id: number): Directory | undefined {\n  return mockDirectories.find(d => d.id === id)\n}\n"
  },
  {
    "path": "frontend/mock/data/endpoints.ts",
    "content": "import type { Endpoint, GetEndpointsResponse } from '@/types/endpoint.types'\n\nexport const mockEndpoints: Endpoint[] = [\n  {\n    id: 1,\n    url: 'https://acme.com/',\n    method: 'GET',\n    statusCode: 200,\n    title: 'Acme Corporation - Home',\n    contentLength: 45678,\n    contentType: 'text/html; charset=utf-8',\n    responseTime: 0.234,\n    host: 'acme.com',\n    webserver: 'nginx/1.24.0',\n    tech: ['React', 'Next.js', 'Node.js'],\n    createdAt: '2024-12-28T10:00:00Z',\n  },\n  {\n    id: 2,\n    url: 'https://acme.com/login',\n    method: 'GET',\n    statusCode: 200,\n    title: 'Login - Acme',\n    contentLength: 12345,\n    contentType: 'text/html; charset=utf-8',\n    responseTime: 0.156,\n    host: 'acme.com',\n    webserver: 'nginx/1.24.0',\n    tech: ['React', 'Next.js'],\n    createdAt: '2024-12-28T10:01:00Z',\n  },\n  {\n    id: 3,\n    url: 'https://api.acme.com/v1/users',\n    method: 'GET',\n    statusCode: 200,\n    title: '',\n    contentLength: 8923,\n    contentType: 'application/json',\n    responseTime: 0.089,\n    host: 'api.acme.com',\n    webserver: 'nginx/1.24.0',\n    tech: ['Django', 'Python'],\n    gfPatterns: ['api', 'json'],\n    createdAt: '2024-12-28T10:02:00Z',\n  },\n  {\n    id: 4,\n    url: 'https://api.acme.com/v1/products',\n    method: 'GET',\n    statusCode: 200,\n    title: '',\n    contentLength: 23456,\n    contentType: 'application/json',\n    responseTime: 0.145,\n    host: 'api.acme.com',\n    webserver: 'nginx/1.24.0',\n    tech: ['Django', 'Python'],\n    gfPatterns: ['api', 'json'],\n    createdAt: '2024-12-28T10:03:00Z',\n  },\n  {\n    id: 5,\n    url: 'https://acme.io/docs',\n    method: 'GET',\n    statusCode: 200,\n    title: 'Documentation - Acme.io',\n    contentLength: 67890,\n    contentType: 'text/html; charset=utf-8',\n    responseTime: 0.312,\n    host: 'acme.io',\n    webserver: 'cloudflare',\n    tech: ['Vue.js', 'Vitepress'],\n    createdAt: '2024-12-27T14:30:00Z',\n  },\n  {\n    id: 6,\n    url: 'https://acme.io/api/config',\n    method: 'GET',\n    statusCode: 200,\n    title: '',\n    contentLength: 1234,\n    contentType: 'application/json',\n    responseTime: 0.067,\n    host: 'acme.io',\n    webserver: 'cloudflare',\n    tech: ['Node.js', 'Express'],\n    gfPatterns: ['config', 'json'],\n    createdAt: '2024-12-27T14:31:00Z',\n  },\n  {\n    id: 7,\n    url: 'https://techstart.io/',\n    method: 'GET',\n    statusCode: 200,\n    title: 'TechStart - Innovation Hub',\n    contentLength: 34567,\n    contentType: 'text/html; charset=utf-8',\n    responseTime: 0.278,\n    host: 'techstart.io',\n    webserver: 'Apache/2.4.54',\n    tech: ['WordPress', 'PHP'],\n    createdAt: '2024-12-26T08:45:00Z',\n  },\n  {\n    id: 8,\n    url: 'https://techstart.io/admin',\n    method: 'GET',\n    statusCode: 302,\n    title: '',\n    contentLength: 0,\n    contentType: 'text/html',\n    responseTime: 0.045,\n    location: 'https://techstart.io/admin/login',\n    host: 'techstart.io',\n    webserver: 'Apache/2.4.54',\n    tech: ['WordPress', 'PHP'],\n    createdAt: '2024-12-26T08:46:00Z',\n  },\n  {\n    id: 9,\n    url: 'https://globalfinance.com/',\n    method: 'GET',\n    statusCode: 200,\n    title: 'Global Finance - Your Financial Partner',\n    contentLength: 56789,\n    contentType: 'text/html; charset=utf-8',\n    responseTime: 0.456,\n    host: 'globalfinance.com',\n    webserver: 'Microsoft-IIS/10.0',\n    tech: ['ASP.NET', 'C#', 'jQuery'],\n    createdAt: '2024-12-25T16:20:00Z',\n  },\n  {\n    id: 10,\n    url: 'https://globalfinance.com/.git/config',\n    method: 'GET',\n    statusCode: 200,\n    title: '',\n    contentLength: 456,\n    contentType: 'text/plain',\n    responseTime: 0.034,\n    host: 'globalfinance.com',\n    webserver: 'Microsoft-IIS/10.0',\n    gfPatterns: ['git', 'config'],\n    createdAt: '2024-12-25T16:21:00Z',\n  },\n  {\n    id: 11,\n    url: 'https://retailmax.com/',\n    method: 'GET',\n    statusCode: 200,\n    title: 'RetailMax - Shop Everything',\n    contentLength: 89012,\n    contentType: 'text/html; charset=utf-8',\n    responseTime: 0.567,\n    host: 'retailmax.com',\n    webserver: 'nginx/1.22.0',\n    tech: ['React', 'Redux', 'Node.js'],\n    createdAt: '2024-12-21T10:45:00Z',\n  },\n  {\n    id: 12,\n    url: 'https://retailmax.com/product?id=1',\n    method: 'GET',\n    statusCode: 200,\n    title: 'Product Detail - RetailMax',\n    contentLength: 23456,\n    contentType: 'text/html; charset=utf-8',\n    responseTime: 0.234,\n    host: 'retailmax.com',\n    webserver: 'nginx/1.22.0',\n    tech: ['React', 'Redux'],\n    gfPatterns: ['param', 'id'],\n    createdAt: '2024-12-21T10:46:00Z',\n  },\n  {\n    id: 13,\n    url: 'https://healthcareplus.com/',\n    method: 'GET',\n    statusCode: 200,\n    title: 'HealthCare Plus - Digital Health',\n    contentLength: 45678,\n    contentType: 'text/html; charset=utf-8',\n    responseTime: 0.345,\n    host: 'healthcareplus.com',\n    webserver: 'nginx/1.24.0',\n    tech: ['Angular', 'TypeScript'],\n    createdAt: '2024-12-23T11:00:00Z',\n  },\n  {\n    id: 14,\n    url: 'https://edutech.io/',\n    method: 'GET',\n    statusCode: 200,\n    title: 'EduTech - Learn Anywhere',\n    contentLength: 67890,\n    contentType: 'text/html; charset=utf-8',\n    responseTime: 0.289,\n    host: 'edutech.io',\n    webserver: 'cloudflare',\n    tech: ['Vue.js', 'Nuxt.js'],\n    createdAt: '2024-12-22T13:30:00Z',\n  },\n  {\n    id: 15,\n    url: 'https://cloudnine.host/',\n    method: 'GET',\n    statusCode: 200,\n    title: 'CloudNine Hosting',\n    contentLength: 34567,\n    contentType: 'text/html; charset=utf-8',\n    responseTime: 0.178,\n    host: 'cloudnine.host',\n    webserver: 'LiteSpeed',\n    tech: ['PHP', 'Laravel'],\n    createdAt: '2024-12-19T16:00:00Z',\n  },\n]\n\nexport function getMockEndpoints(params?: {\n  page?: number\n  pageSize?: number\n  search?: string\n}): GetEndpointsResponse {\n  const page = params?.page || 1\n  const pageSize = params?.pageSize || 10\n  const search = params?.search?.toLowerCase() || ''\n\n  let filtered = mockEndpoints\n\n  if (search) {\n    filtered = mockEndpoints.filter(\n      ep =>\n        ep.url.toLowerCase().includes(search) ||\n        ep.title.toLowerCase().includes(search) ||\n        ep.host?.toLowerCase().includes(search)\n    )\n  }\n\n  const total = filtered.length\n  const totalPages = Math.ceil(total / pageSize)\n  const start = (page - 1) * pageSize\n  const endpoints = filtered.slice(start, start + pageSize)\n\n  return {\n    endpoints,\n    total,\n    page,\n    pageSize,\n    totalPages,\n  }\n}\n\nexport function getMockEndpointById(id: number): Endpoint | undefined {\n  return mockEndpoints.find(ep => ep.id === id)\n}\n"
  },
  {
    "path": "frontend/mock/data/engines.ts",
    "content": "import type { ScanEngine } from '@/types/engine.types'\n\nexport const mockEngines: ScanEngine[] = [\n  {\n    id: 1,\n    name: 'Full Scan',\n    configuration: `# Full reconnaissance scan\nstages:\n  - name: subdomain_discovery\n    tools:\n      - subfinder\n      - amass\n  - name: port_scan\n    tools:\n      - nmap\n  - name: web_crawling\n    tools:\n      - httpx\n      - katana\n  - name: vulnerability_scan\n    tools:\n      - nuclei\n`,\n    createdAt: '2024-01-15T08:00:00Z',\n    updatedAt: '2024-12-20T10:30:00Z',\n  },\n  {\n    id: 2,\n    name: 'Quick Scan',\n    configuration: `# Quick scan - subdomain and web only\nstages:\n  - name: subdomain_discovery\n    tools:\n      - subfinder\n  - name: web_crawling\n    tools:\n      - httpx\n`,\n    createdAt: '2024-02-10T09:00:00Z',\n    updatedAt: '2024-12-18T14:00:00Z',\n  },\n  {\n    id: 3,\n    name: 'Vulnerability Only',\n    configuration: `# Vulnerability scan only\nstages:\n  - name: vulnerability_scan\n    tools:\n      - nuclei\n    options:\n      severity: critical,high,medium\n`,\n    createdAt: '2024-03-05T11:00:00Z',\n    updatedAt: '2024-12-15T16:20:00Z',\n  },\n  {\n    id: 4,\n    name: 'Subdomain Discovery',\n    configuration: `# Subdomain enumeration only\nstages:\n  - name: subdomain_discovery\n    tools:\n      - subfinder\n      - amass\n      - findomain\n`,\n    createdAt: '2024-04-12T08:30:00Z',\n    updatedAt: '2024-12-10T09:00:00Z',\n  },\n]\n\nexport function getMockEngines(): ScanEngine[] {\n  return mockEngines\n}\n\nexport function getMockEngineById(id: number): ScanEngine | undefined {\n  return mockEngines.find(e => e.id === id)\n}\n"
  },
  {
    "path": "frontend/mock/data/fingerprints.ts",
    "content": "import type {\n  EholeFingerprint,\n  GobyFingerprint,\n  WappalyzerFingerprint,\n  FingersFingerprint,\n  FingerPrintHubFingerprint,\n  ARLFingerprint,\n  FingerprintStats,\n} from '@/types/fingerprint.types'\nimport type { PaginatedResponse } from '@/types/api-response.types'\n\n// ==================== EHole 指纹数据（真实数据示例）====================\nexport const mockEholeFingerprints: EholeFingerprint[] = [\n  {\n    id: 1,\n    cms: '致远OA',\n    method: 'keyword',\n    location: 'body',\n    keyword: ['/seeyon/USER-DATA/IMAGES/LOGIN/login.gif'],\n    isImportant: true,\n    type: 'oa',\n    createdAt: '2024-12-20T10:00:00Z',\n  },\n  {\n    id: 2,\n    cms: '通达OA',\n    method: 'keyword',\n    location: 'body',\n    keyword: ['/static/images/tongda.ico'],\n    isImportant: true,\n    type: 'oa',\n    createdAt: '2024-12-20T10:01:00Z',\n  },\n  {\n    id: 3,\n    cms: 'Nexus Repository Manager',\n    method: 'keyword',\n    location: 'title',\n    keyword: ['Nexus Repository Manager'],\n    isImportant: true,\n    type: 'cloud',\n    createdAt: '2024-12-20T10:02:00Z',\n  },\n  {\n    id: 4,\n    cms: '禅道 zentao',\n    method: 'keyword',\n    location: 'title',\n    keyword: ['Welcome to use zentao'],\n    isImportant: true,\n    type: 'oa',\n    createdAt: '2024-12-20T10:03:00Z',\n  },\n  {\n    id: 5,\n    cms: 'Kibana',\n    method: 'keyword',\n    location: 'title',\n    keyword: ['Kibana'],\n    isImportant: true,\n    type: 'cloud',\n    createdAt: '2024-12-20T10:04:00Z',\n  },\n  {\n    id: 6,\n    cms: 'Spring env',\n    method: 'keyword',\n    location: 'body',\n    keyword: ['Whitelabel Error Page'],\n    isImportant: true,\n    type: 'framework',\n    createdAt: '2024-12-20T10:05:00Z',\n  },\n  {\n    id: 7,\n    cms: '泛微OA',\n    method: 'keyword',\n    location: 'header',\n    keyword: ['ecology_JSessionid'],\n    isImportant: true,\n    type: 'oa',\n    createdAt: '2024-12-20T10:06:00Z',\n  },\n  {\n    id: 8,\n    cms: '用友NC',\n    method: 'keyword',\n    location: 'body',\n    keyword: ['UFIDA', '/nc/servlet/nc.ui.iufo.login.Index'],\n    isImportant: true,\n    type: 'oa',\n    createdAt: '2024-12-20T10:07:00Z',\n  },\n]\n\n// ==================== Goby 指纹数据（真实数据示例）====================\nexport const mockGobyFingerprints: GobyFingerprint[] = [\n  {\n    id: 1,\n    name: 'WebSphere-App-Server',\n    logic: '((a||b) &&c&&d) || (e&&f&&g)',\n    rule: [\n      { label: 'a', feature: 'Server: WebSphere Application Server', is_equal: true },\n      { label: 'b', feature: 'IBM WebSphere Application Server', is_equal: true },\n      { label: 'c', feature: 'couchdb', is_equal: false },\n      { label: 'd', feature: 'drupal', is_equal: false },\n      { label: 'e', feature: 'Server: WebSphere Application Server', is_equal: true },\n      { label: 'f', feature: 'couchdb', is_equal: false },\n      { label: 'g', feature: 'drupal', is_equal: false },\n    ],\n    createdAt: '2024-12-20T10:00:00Z',\n  },\n  {\n    id: 2,\n    name: 'Wing-FTP-Server',\n    logic: 'a||b||c||d',\n    rule: [\n      { label: 'a', feature: 'Server: Wing FTP Server', is_equal: true },\n      { label: 'b', feature: 'Server: Wing FTP Server', is_equal: true },\n      { label: 'c', feature: '/help_javascript.htm', is_equal: true },\n      { label: 'd', feature: 'Wing FTP Server', is_equal: true },\n    ],\n    createdAt: '2024-12-20T10:01:00Z',\n  },\n  {\n    id: 3,\n    name: 'Fortinet-sslvpn',\n    logic: 'a&&b',\n    rule: [\n      { label: 'a', feature: 'fgt_lang', is_equal: true },\n      { label: 'b', feature: '/sslvpn/portal.html', is_equal: true },\n    ],\n    createdAt: '2024-12-20T10:02:00Z',\n  },\n  {\n    id: 4,\n    name: 'D-link-DSL-2640B',\n    logic: 'a||b',\n    rule: [\n      { label: 'a', feature: 'Product : DSL-2640B', is_equal: true },\n      { label: 'b', feature: 'D-Link DSL-2640B', is_equal: true },\n    ],\n    createdAt: '2024-12-20T10:03:00Z',\n  },\n  {\n    id: 5,\n    name: 'Kedacom-NVR',\n    logic: 'a|| (b&&c) ||d',\n    rule: [\n      { label: 'a', feature: 'NVR Station Web', is_equal: true },\n      { label: 'b', feature: 'location=\"index_cn.htm\";', is_equal: true },\n      { label: 'c', feature: 'if(syslan == \"zh-cn\"', is_equal: true },\n      { label: 'd', feature: 'WMS browse NVR', is_equal: true },\n    ],\n    createdAt: '2024-12-20T10:04:00Z',\n  },\n]\n\n// ==================== Wappalyzer 指纹数据（真实数据示例）====================\nexport const mockWappalyzerFingerprints: WappalyzerFingerprint[] = [\n  {\n    id: 1,\n    name: '1C-Bitrix',\n    cats: [1, 6],\n    cookies: { bitrix_sm_guest_id: '', bitrix_sm_last_ip: '', bitrix_sm_sale_uid: '' },\n    headers: { 'set-cookie': 'bitrix_', 'x-powered-cms': 'bitrix site manager' },\n    scriptSrc: ['bitrix(?:\\\\.info/|/js/main/core)'],\n    js: [],\n    implies: ['PHP'],\n    meta: {},\n    html: [],\n    description: '1C-Bitrix is a system of web project management.',\n    website: 'https://www.1c-bitrix.ru',\n    cpe: '',\n    createdAt: '2024-12-20T10:00:00Z',\n  },\n  {\n    id: 2,\n    name: 'React',\n    cats: [12],\n    cookies: {},\n    headers: {},\n    scriptSrc: ['react(?:-dom)?(?:\\\\.min)?\\\\.js'],\n    js: ['React.version'],\n    implies: [],\n    meta: {},\n    html: ['data-reactroot'],\n    description: 'React is a JavaScript library for building user interfaces.',\n    website: 'https://reactjs.org',\n    cpe: 'cpe:/a:facebook:react',\n    createdAt: '2024-12-20T10:01:00Z',\n  },\n  {\n    id: 3,\n    name: 'Vue.js',\n    cats: [12],\n    cookies: {},\n    headers: {},\n    scriptSrc: ['vue(?:\\\\.min)?\\\\.js'],\n    js: ['Vue.version'],\n    implies: [],\n    meta: {},\n    html: ['data-v-'],\n    description: 'Vue.js is a progressive JavaScript framework.',\n    website: 'https://vuejs.org',\n    cpe: 'cpe:/a:vuejs:vue',\n    createdAt: '2024-12-20T10:02:00Z',\n  },\n  {\n    id: 4,\n    name: 'nginx',\n    cats: [22],\n    cookies: {},\n    headers: { server: 'nginx(?:/([\\\\d.]+))?\\\\;version:\\\\1' },\n    scriptSrc: [],\n    js: [],\n    implies: [],\n    meta: {},\n    html: [],\n    description: 'nginx is a web server.',\n    website: 'http://nginx.org/en',\n    cpe: 'cpe:/a:nginx:nginx',\n    createdAt: '2024-12-20T10:03:00Z',\n  },\n  {\n    id: 5,\n    name: 'WordPress',\n    cats: [1, 11],\n    cookies: {},\n    headers: { 'x-pingback': '/xmlrpc\\\\.php$' },\n    scriptSrc: ['/wp-(?:content|includes)/'],\n    js: [],\n    implies: ['PHP', 'MySQL'],\n    meta: { generator: ['WordPress(?: ([\\\\d.]+))?\\\\;version:\\\\1'] },\n    html: ['<link rel=[\"\\']stylesheet[\"\\'] [^>]+/wp-(?:content|includes)/'],\n    description: 'WordPress is a free and open-source CMS.',\n    website: 'https://wordpress.org',\n    cpe: 'cpe:/a:wordpress:wordpress',\n    createdAt: '2024-12-20T10:04:00Z',\n  },\n]\n\n// ==================== Fingers 指纹数据（真实数据示例）====================\nexport const mockFingersFingerprints: FingersFingerprint[] = [\n  {\n    id: 1,\n    name: 'jenkins',\n    link: '',\n    rule: [\n      {\n        favicon_hash: ['81586312'],\n        body: 'Jenkins',\n        header: 'X-Jenkins',\n      },\n    ],\n    tag: ['cloud'],\n    focus: true,\n    defaultPort: [8080],\n    createdAt: '2024-12-20T10:00:00Z',\n  },\n  {\n    id: 2,\n    name: 'gitlab',\n    link: '',\n    rule: [\n      {\n        favicon_hash: ['516963061', '1278323681'],\n        body: 'GitLab',\n        header: '_gitlab_session',\n      },\n    ],\n    tag: ['cloud'],\n    focus: true,\n    defaultPort: [80, 443],\n    createdAt: '2024-12-20T10:01:00Z',\n  },\n  {\n    id: 3,\n    name: 'nacos',\n    link: '',\n    rule: [\n      {\n        body: '<title>Nacos</title>',\n        send_data: '/nacos/',\n      },\n    ],\n    tag: ['cloud'],\n    focus: true,\n    defaultPort: [8848],\n    createdAt: '2024-12-20T10:02:00Z',\n  },\n  {\n    id: 4,\n    name: 'elasticsearch',\n    link: '',\n    rule: [\n      {\n        body: '\"cluster_name\" : \"elasticsearch\"',\n        vuln: 'elasticsearch_unauth',\n      },\n    ],\n    tag: ['cloud'],\n    focus: true,\n    defaultPort: [9200],\n    createdAt: '2024-12-20T10:03:00Z',\n  },\n  {\n    id: 5,\n    name: 'zabbix',\n    link: '',\n    rule: [\n      {\n        favicon_hash: ['892542951'],\n        body: 'images/general/zabbix.ico',\n        header: 'zbx_sessionid',\n        send_data: '/zabbix',\n      },\n    ],\n    tag: ['cloud'],\n    focus: true,\n    defaultPort: [80, 443],\n    createdAt: '2024-12-20T10:04:00Z',\n  },\n]\n\n// ==================== FingerPrintHub 指纹数据（真实数据示例）====================\nexport const mockFingerPrintHubFingerprints: FingerPrintHubFingerprint[] = [\n  {\n    id: 1,\n    fpId: 'apache-tomcat',\n    name: 'Apache Tomcat',\n    author: 'pdteam',\n    tags: 'tech,apache,tomcat',\n    severity: 'info',\n    metadata: {\n      product: 'tomcat',\n      vendor: 'apache',\n      verified: true,\n      shodan_query: 'http.favicon.hash:\"-297069493\"',\n      fofa_query: 'app=\"Apache-Tomcat\"',\n    },\n    http: [\n      {\n        method: 'GET',\n        path: '/',\n        matchers: [\n          { type: 'word', part: 'body', words: ['Apache Tomcat'] },\n          { type: 'status', status: [200] },\n        ],\n      },\n    ],\n    sourceFile: 'http/technologies/apache/apache-tomcat.yaml',\n    createdAt: '2024-12-20T10:00:00Z',\n  },\n  {\n    id: 2,\n    fpId: 'nginx-detect',\n    name: 'Nginx Server',\n    author: 'pdteam',\n    tags: 'tech,nginx',\n    severity: 'info',\n    metadata: {\n      product: 'nginx',\n      vendor: 'nginx',\n      verified: true,\n    },\n    http: [\n      {\n        method: 'GET',\n        path: '/',\n        matchers: [\n          { type: 'regex', part: 'header', regex: ['[Nn]ginx'] },\n        ],\n        extractors: [\n          { type: 'regex', part: 'header', regex: ['nginx/([\\\\d.]+)'], group: 1 },\n        ],\n      },\n    ],\n    sourceFile: 'http/technologies/nginx/nginx-version.yaml',\n    createdAt: '2024-12-20T10:01:00Z',\n  },\n  {\n    id: 3,\n    fpId: 'spring-boot-detect',\n    name: 'Spring Boot',\n    author: 'pdteam',\n    tags: 'tech,spring,java',\n    severity: 'info',\n    metadata: {\n      product: 'spring-boot',\n      vendor: 'vmware',\n      verified: true,\n    },\n    http: [\n      {\n        method: 'GET',\n        path: '/',\n        matchers: [\n          { type: 'word', part: 'body', words: ['Whitelabel Error Page'] },\n        ],\n      },\n    ],\n    sourceFile: 'http/technologies/spring/spring-boot.yaml',\n    createdAt: '2024-12-20T10:02:00Z',\n  },\n]\n\n// ==================== ARL 指纹数据（真实数据示例）====================\nexport const mockARLFingerprints: ARLFingerprint[] = [\n  {\n    id: 1,\n    name: 'Shiro',\n    rule: 'header=\"rememberMe=\"',\n    createdAt: '2024-12-20T10:00:00Z',\n  },\n  {\n    id: 2,\n    name: 'ThinkPHP',\n    rule: 'body=\"ThinkPHP\" || header=\"ThinkPHP\"',\n    createdAt: '2024-12-20T10:01:00Z',\n  },\n  {\n    id: 3,\n    name: 'Fastjson',\n    rule: 'body=\"fastjson\" || body=\"com.alibaba.fastjson\"',\n    createdAt: '2024-12-20T10:02:00Z',\n  },\n  {\n    id: 4,\n    name: 'Weblogic',\n    rule: 'body=\"WebLogic\" || header=\"WebLogic\" || body=\"bea_wls_internal\"',\n    createdAt: '2024-12-20T10:03:00Z',\n  },\n  {\n    id: 5,\n    name: 'JBoss',\n    rule: 'body=\"JBoss\" || header=\"JBoss\" || body=\"jboss.css\"',\n    createdAt: '2024-12-20T10:04:00Z',\n  },\n  {\n    id: 6,\n    name: 'Struts2',\n    rule: 'body=\".action\" || body=\"struts\"',\n    createdAt: '2024-12-20T10:05:00Z',\n  },\n]\n\n// ==================== 统计数据 ====================\nexport const mockFingerprintStats: FingerprintStats = {\n  ehole: 1892,\n  goby: 4567,\n  wappalyzer: 3456,\n  fingers: 2345,\n  fingerprinthub: 8901,\n  arl: 1234,\n}\n\n// ==================== 查询函数 ====================\nexport function getMockEholeFingerprints(params?: {\n  page?: number\n  pageSize?: number\n  filter?: string\n}): PaginatedResponse<EholeFingerprint> {\n  const page = params?.page || 1\n  const pageSize = params?.pageSize || 10\n  const filter = params?.filter?.toLowerCase() || ''\n\n  let filtered = mockEholeFingerprints\n  if (filter) {\n    filtered = filtered.filter(f => f.cms.toLowerCase().includes(filter))\n  }\n\n  const total = filtered.length\n  const totalPages = Math.ceil(total / pageSize)\n  const start = (page - 1) * pageSize\n  const results = filtered.slice(start, start + pageSize)\n\n  return { results, total, page, pageSize, totalPages }\n}\n\nexport function getMockGobyFingerprints(params?: {\n  page?: number\n  pageSize?: number\n  filter?: string\n}): PaginatedResponse<GobyFingerprint> {\n  const page = params?.page || 1\n  const pageSize = params?.pageSize || 10\n  const filter = params?.filter?.toLowerCase() || ''\n\n  let filtered = mockGobyFingerprints\n  if (filter) {\n    filtered = filtered.filter(f => f.name.toLowerCase().includes(filter))\n  }\n\n  const total = filtered.length\n  const totalPages = Math.ceil(total / pageSize)\n  const start = (page - 1) * pageSize\n  const results = filtered.slice(start, start + pageSize)\n\n  return { results, total, page, pageSize, totalPages }\n}\n\nexport function getMockWappalyzerFingerprints(params?: {\n  page?: number\n  pageSize?: number\n  filter?: string\n}): PaginatedResponse<WappalyzerFingerprint> {\n  const page = params?.page || 1\n  const pageSize = params?.pageSize || 10\n  const filter = params?.filter?.toLowerCase() || ''\n\n  let filtered = mockWappalyzerFingerprints\n  if (filter) {\n    filtered = filtered.filter(f => f.name.toLowerCase().includes(filter))\n  }\n\n  const total = filtered.length\n  const totalPages = Math.ceil(total / pageSize)\n  const start = (page - 1) * pageSize\n  const results = filtered.slice(start, start + pageSize)\n\n  return { results, total, page, pageSize, totalPages }\n}\n\nexport function getMockFingersFingerprints(params?: {\n  page?: number\n  pageSize?: number\n  filter?: string\n}): PaginatedResponse<FingersFingerprint> {\n  const page = params?.page || 1\n  const pageSize = params?.pageSize || 10\n  const filter = params?.filter?.toLowerCase() || ''\n\n  let filtered = mockFingersFingerprints\n  if (filter) {\n    filtered = filtered.filter(f => f.name.toLowerCase().includes(filter))\n  }\n\n  const total = filtered.length\n  const totalPages = Math.ceil(total / pageSize)\n  const start = (page - 1) * pageSize\n  const results = filtered.slice(start, start + pageSize)\n\n  return { results, total, page, pageSize, totalPages }\n}\n\nexport function getMockFingerPrintHubFingerprints(params?: {\n  page?: number\n  pageSize?: number\n  filter?: string\n}): PaginatedResponse<FingerPrintHubFingerprint> {\n  const page = params?.page || 1\n  const pageSize = params?.pageSize || 10\n  const filter = params?.filter?.toLowerCase() || ''\n\n  let filtered = mockFingerPrintHubFingerprints\n  if (filter) {\n    filtered = filtered.filter(f => f.name.toLowerCase().includes(filter))\n  }\n\n  const total = filtered.length\n  const totalPages = Math.ceil(total / pageSize)\n  const start = (page - 1) * pageSize\n  const results = filtered.slice(start, start + pageSize)\n\n  return { results, total, page, pageSize, totalPages }\n}\n\nexport function getMockARLFingerprints(params?: {\n  page?: number\n  pageSize?: number\n  filter?: string\n}): PaginatedResponse<ARLFingerprint> {\n  const page = params?.page || 1\n  const pageSize = params?.pageSize || 10\n  const filter = params?.filter?.toLowerCase() || ''\n\n  let filtered = mockARLFingerprints\n  if (filter) {\n    filtered = filtered.filter(f => f.name.toLowerCase().includes(filter))\n  }\n\n  const total = filtered.length\n  const totalPages = Math.ceil(total / pageSize)\n  const start = (page - 1) * pageSize\n  const results = filtered.slice(start, start + pageSize)\n\n  return { results, total, page, pageSize, totalPages }\n}\n\nexport function getMockFingerprintStats(): FingerprintStats {\n  return mockFingerprintStats\n}\n"
  },
  {
    "path": "frontend/mock/data/ip-addresses.ts",
    "content": "import type { IPAddress, GetIPAddressesResponse } from '@/types/ip-address.types'\n\n// 使用函数生成IP地址\nconst ip = (a: number, b: number, c: number, d: number) => `${a}.${b}.${c}.${d}`\n\nexport const mockIPAddresses: IPAddress[] = [\n  {\n    ip: ip(192, 0, 2, 1),\n    hosts: ['router.local', 'gateway.lan'],\n    ports: [80, 443, 22, 53],\n    createdAt: '2024-12-28T10:00:00Z',\n  },\n  {\n    ip: ip(192, 0, 2, 10),\n    hosts: ['api.acme.com', 'backend.acme.com'],\n    ports: [80, 443, 8080, 3306],\n    createdAt: '2024-12-28T10:01:00Z',\n  },\n  {\n    ip: ip(192, 0, 2, 11),\n    hosts: ['web.acme.com', 'www.acme.com'],\n    ports: [80, 443],\n    createdAt: '2024-12-28T10:02:00Z',\n  },\n  {\n    ip: ip(198, 51, 100, 50),\n    hosts: ['db.internal.acme.com'],\n    ports: [3306, 5432, 27017],\n    createdAt: '2024-12-28T10:03:00Z',\n  },\n  {\n    ip: ip(203, 0, 113, 50),\n    hosts: ['cdn.acme.com'],\n    ports: [80, 443],\n    createdAt: '2024-12-28T10:04:00Z',\n  },\n  {\n    ip: ip(198, 51, 100, 10),\n    hosts: ['mail.acme.com', 'smtp.acme.com'],\n    ports: [25, 465, 587, 993, 995],\n    createdAt: '2024-12-28T10:05:00Z',\n  },\n  {\n    ip: ip(192, 0, 2, 100),\n    hosts: ['jenkins.acme.com'],\n    ports: [8080, 50000],\n    createdAt: '2024-12-28T10:06:00Z',\n  },\n  {\n    ip: ip(192, 0, 2, 101),\n    hosts: ['gitlab.acme.com'],\n    ports: [80, 443, 22],\n    createdAt: '2024-12-28T10:07:00Z',\n  },\n  {\n    ip: ip(192, 0, 2, 102),\n    hosts: ['k8s.acme.com', 'kubernetes.acme.com'],\n    ports: [6443, 10250, 10251, 10252],\n    createdAt: '2024-12-28T10:08:00Z',\n  },\n  {\n    ip: ip(192, 0, 2, 103),\n    hosts: ['elastic.acme.com'],\n    ports: [9200, 9300, 5601],\n    createdAt: '2024-12-28T10:09:00Z',\n  },\n  {\n    ip: ip(192, 0, 2, 104),\n    hosts: ['redis.acme.com'],\n    ports: [6379],\n    createdAt: '2024-12-28T10:10:00Z',\n  },\n  {\n    ip: ip(192, 0, 2, 105),\n    hosts: ['mq.acme.com', 'rabbitmq.acme.com'],\n    ports: [5672, 15672],\n    createdAt: '2024-12-28T10:11:00Z',\n  },\n]\n\nexport function getMockIPAddresses(params?: {\n  page?: number\n  pageSize?: number\n  filter?: string\n  targetId?: number\n  scanId?: number\n}): GetIPAddressesResponse {\n  const page = params?.page || 1\n  const pageSize = params?.pageSize || 10\n  const filter = params?.filter?.toLowerCase() || ''\n\n  let filtered = mockIPAddresses\n\n  if (filter) {\n    filtered = filtered.filter(\n      ipAddr =>\n        ipAddr.ip.toLowerCase().includes(filter) ||\n        ipAddr.hosts.some(h => h.toLowerCase().includes(filter))\n    )\n  }\n\n  const total = filtered.length\n  const totalPages = Math.ceil(total / pageSize)\n  const start = (page - 1) * pageSize\n  const results = filtered.slice(start, start + pageSize)\n\n  return {\n    results,\n    total,\n    page,\n    pageSize,\n    totalPages,\n  }\n}\n\nexport function getMockIPAddressByIP(ipStr: string): IPAddress | undefined {\n  return mockIPAddresses.find(addr => addr.ip === ipStr)\n}\n"
  },
  {
    "path": "frontend/mock/data/notification-settings.ts",
    "content": "import type {\n  NotificationSettings,\n  GetNotificationSettingsResponse,\n  UpdateNotificationSettingsResponse,\n} from '@/types/notification-settings.types'\n\nexport const mockNotificationSettings: NotificationSettings = {\n  discord: {\n    enabled: true,\n    webhookUrl: 'https://discord.com/api/webhooks/1234567890/abcdefghijklmnop',\n  },\n  wecom: {\n    enabled: false,\n    webhookUrl: '',\n  },\n  categories: {\n    scan: true,\n    vulnerability: true,\n    asset: true,\n    system: false,\n  },\n}\n\nexport function getMockNotificationSettings(): GetNotificationSettingsResponse {\n  return mockNotificationSettings\n}\n\nexport function updateMockNotificationSettings(\n  settings: NotificationSettings\n): UpdateNotificationSettingsResponse {\n  // 模拟更新设置\n  Object.assign(mockNotificationSettings, settings)\n  \n  return {\n    message: 'Notification settings updated successfully',\n    discord: mockNotificationSettings.discord,\n    wecom: mockNotificationSettings.wecom,\n    categories: mockNotificationSettings.categories,\n  }\n}\n"
  },
  {
    "path": "frontend/mock/data/notifications.ts",
    "content": "import type { BackendNotification, GetNotificationsResponse } from '@/types/notification.types'\n\nexport const mockNotifications: BackendNotification[] = [\n  {\n    id: 1,\n    category: 'vulnerability',\n    title: 'Critical Vulnerability Found',\n    message: 'SQL Injection detected in retailmax.com/product endpoint',\n    level: 'critical',\n    createdAt: '2024-12-29T10:30:00Z',\n    isRead: false,\n  },\n  {\n    id: 2,\n    category: 'scan',\n    title: 'Scan Completed',\n    message: 'Scan for acme.com completed successfully with 23 vulnerabilities found',\n    level: 'medium',\n    createdAt: '2024-12-29T09:00:00Z',\n    isRead: false,\n  },\n  {\n    id: 3,\n    category: 'vulnerability',\n    title: 'High Severity Vulnerability',\n    message: 'XSS vulnerability found in acme.com/search',\n    level: 'high',\n    createdAt: '2024-12-28T16:45:00Z',\n    isRead: true,\n  },\n  {\n    id: 4,\n    category: 'scan',\n    title: 'Scan Failed',\n    message: 'Scan for globalfinance.com failed: Connection timeout',\n    level: 'high',\n    createdAt: '2024-12-28T14:20:00Z',\n    isRead: true,\n  },\n  {\n    id: 5,\n    category: 'asset',\n    title: 'New Subdomains Discovered',\n    message: '15 new subdomains discovered for techstart.io',\n    level: 'low',\n    createdAt: '2024-12-27T11:00:00Z',\n    isRead: true,\n  },\n  {\n    id: 6,\n    category: 'system',\n    title: 'Worker Offline',\n    message: 'Worker node worker-03 is now offline',\n    level: 'medium',\n    createdAt: '2024-12-27T08:30:00Z',\n    isRead: true,\n  },\n  {\n    id: 7,\n    category: 'scan',\n    title: 'Scheduled Scan Started',\n    message: 'Scheduled scan for Acme Corporation started',\n    level: 'low',\n    createdAt: '2024-12-26T06:00:00Z',\n    isRead: true,\n  },\n  {\n    id: 8,\n    category: 'system',\n    title: 'System Update Available',\n    message: 'A new version of the scanner is available',\n    level: 'low',\n    createdAt: '2024-12-25T10:00:00Z',\n    isRead: true,\n  },\n]\n\nexport function getMockNotifications(params?: {\n  page?: number\n  pageSize?: number\n  unread?: boolean\n}): GetNotificationsResponse {\n  const page = params?.page || 1\n  const pageSize = params?.pageSize || 10\n\n  let filtered = mockNotifications\n\n  if (params?.unread) {\n    filtered = filtered.filter(n => !n.isRead)\n  }\n\n  const total = filtered.length\n  const totalPages = Math.ceil(total / pageSize)\n  const start = (page - 1) * pageSize\n  const results = filtered.slice(start, start + pageSize)\n\n  return {\n    results,\n    total,\n    page,\n    pageSize,\n    totalPages,\n  }\n}\n\nexport function getMockUnreadCount(): { count: number } {\n  return {\n    count: mockNotifications.filter(n => !n.isRead).length,\n  }\n}\n"
  },
  {
    "path": "frontend/mock/data/nuclei-templates.ts",
    "content": "import type {\n  NucleiTemplateTreeNode,\n  NucleiTemplateTreeResponse,\n  NucleiTemplateContent,\n} from '@/types/nuclei.types'\n\nexport const mockNucleiTemplateTree: NucleiTemplateTreeNode[] = [\n  {\n    type: 'folder',\n    name: 'cves',\n    path: 'cves',\n    children: [\n      {\n        type: 'folder',\n        name: '2024',\n        path: 'cves/2024',\n        children: [\n          {\n            type: 'file',\n            name: 'CVE-2024-1234.yaml',\n            path: 'cves/2024/CVE-2024-1234.yaml',\n            templateId: 'CVE-2024-1234',\n            severity: 'critical',\n            tags: ['cve', 'rce'],\n          },\n          {\n            type: 'file',\n            name: 'CVE-2024-5678.yaml',\n            path: 'cves/2024/CVE-2024-5678.yaml',\n            templateId: 'CVE-2024-5678',\n            severity: 'high',\n            tags: ['cve', 'sqli'],\n          },\n        ],\n      },\n      {\n        type: 'folder',\n        name: '2023',\n        path: 'cves/2023',\n        children: [\n          {\n            type: 'file',\n            name: 'CVE-2023-9876.yaml',\n            path: 'cves/2023/CVE-2023-9876.yaml',\n            templateId: 'CVE-2023-9876',\n            severity: 'high',\n            tags: ['cve', 'auth-bypass'],\n          },\n        ],\n      },\n    ],\n  },\n  {\n    type: 'folder',\n    name: 'vulnerabilities',\n    path: 'vulnerabilities',\n    children: [\n      {\n        type: 'folder',\n        name: 'generic',\n        path: 'vulnerabilities/generic',\n        children: [\n          {\n            type: 'file',\n            name: 'sqli-error-based.yaml',\n            path: 'vulnerabilities/generic/sqli-error-based.yaml',\n            templateId: 'sqli-error-based',\n            severity: 'high',\n            tags: ['sqli', 'generic'],\n          },\n          {\n            type: 'file',\n            name: 'xss-reflected.yaml',\n            path: 'vulnerabilities/generic/xss-reflected.yaml',\n            templateId: 'xss-reflected',\n            severity: 'medium',\n            tags: ['xss', 'generic'],\n          },\n        ],\n      },\n    ],\n  },\n  {\n    type: 'folder',\n    name: 'technologies',\n    path: 'technologies',\n    children: [\n      {\n        type: 'file',\n        name: 'nginx-version.yaml',\n        path: 'technologies/nginx-version.yaml',\n        templateId: 'nginx-version',\n        severity: 'info',\n        tags: ['tech', 'nginx'],\n      },\n      {\n        type: 'file',\n        name: 'apache-detect.yaml',\n        path: 'technologies/apache-detect.yaml',\n        templateId: 'apache-detect',\n        severity: 'info',\n        tags: ['tech', 'apache'],\n      },\n    ],\n  },\n  {\n    type: 'folder',\n    name: 'exposures',\n    path: 'exposures',\n    children: [\n      {\n        type: 'folder',\n        name: 'configs',\n        path: 'exposures/configs',\n        children: [\n          {\n            type: 'file',\n            name: 'git-config.yaml',\n            path: 'exposures/configs/git-config.yaml',\n            templateId: 'git-config',\n            severity: 'medium',\n            tags: ['exposure', 'git'],\n          },\n          {\n            type: 'file',\n            name: 'env-file.yaml',\n            path: 'exposures/configs/env-file.yaml',\n            templateId: 'env-file',\n            severity: 'high',\n            tags: ['exposure', 'env'],\n          },\n        ],\n      },\n    ],\n  },\n]\n\nexport const mockNucleiTemplateContent: Record<string, NucleiTemplateContent> = {\n  'cves/2024/CVE-2024-1234.yaml': {\n    path: 'cves/2024/CVE-2024-1234.yaml',\n    name: 'CVE-2024-1234.yaml',\n    templateId: 'CVE-2024-1234',\n    severity: 'critical',\n    tags: ['cve', 'rce'],\n    content: `id: CVE-2024-1234\n\ninfo:\n  name: Example RCE Vulnerability\n  author: pdteam\n  severity: critical\n  description: |\n    Example remote code execution vulnerability.\n  reference:\n    - https://example.com/cve-2024-1234\n  tags: cve,cve2024,rce\n\nhttp:\n  - method: POST\n    path:\n      - \"{{BaseURL}}/api/execute\"\n    headers:\n      Content-Type: application/json\n    body: '{\"cmd\": \"id\"}'\n    matchers:\n      - type: word\n        words:\n          - \"uid=\"\n          - \"gid=\"\n        condition: and\n`,\n  },\n  'vulnerabilities/generic/sqli-error-based.yaml': {\n    path: 'vulnerabilities/generic/sqli-error-based.yaml',\n    name: 'sqli-error-based.yaml',\n    templateId: 'sqli-error-based',\n    severity: 'high',\n    tags: ['sqli', 'generic'],\n    content: `id: sqli-error-based\n\ninfo:\n  name: Error Based SQL Injection\n  author: pdteam\n  severity: high\n  tags: sqli,generic\n\nhttp:\n  - method: GET\n    path:\n      - \"{{BaseURL}}/?id=1'\"\n    matchers:\n      - type: word\n        words:\n          - \"SQL syntax\"\n          - \"mysql_fetch\"\n          - \"You have an error\"\n        condition: or\n`,\n  },\n  'technologies/nginx-version.yaml': {\n    path: 'technologies/nginx-version.yaml',\n    name: 'nginx-version.yaml',\n    templateId: 'nginx-version',\n    severity: 'info',\n    tags: ['tech', 'nginx'],\n    content: `id: nginx-version\n\ninfo:\n  name: Nginx Version Detection\n  author: pdteam\n  severity: info\n  tags: tech,nginx\n\nhttp:\n  - method: GET\n    path:\n      - \"{{BaseURL}}/\"\n    matchers:\n      - type: regex\n        part: header\n        regex:\n          - \"nginx/([\\\\d.]+)\"\n    extractors:\n      - type: regex\n        part: header\n        group: 1\n        regex:\n          - \"nginx/([\\\\d.]+)\"\n`,\n  },\n}\n\nexport function getMockNucleiTemplateTree(): NucleiTemplateTreeResponse {\n  return {\n    roots: mockNucleiTemplateTree,\n  }\n}\n\nexport function getMockNucleiTemplateContent(path: string): NucleiTemplateContent | undefined {\n  return mockNucleiTemplateContent[path]\n}\n"
  },
  {
    "path": "frontend/mock/data/organizations.ts",
    "content": "import type { Organization, OrganizationsResponse } from '@/types/organization.types'\n\nexport const mockOrganizations: Organization[] = [\n  {\n    id: 1,\n    name: 'Acme Corporation',\n    description: '全球领先的科技公司，专注于云计算和人工智能领域',\n    createdAt: '2024-01-15T08:30:00Z',\n    updatedAt: '2024-12-28T14:20:00Z',\n    targetCount: 12,\n    domainCount: 156,\n    endpointCount: 2341,\n    targets: [\n      { id: 1, name: 'acme.com' },\n      { id: 2, name: 'acme.io' },\n    ],\n  },\n  {\n    id: 2,\n    name: 'TechStart Inc',\n    description: '创新型初创企业，主营 SaaS 产品开发',\n    createdAt: '2024-02-20T10:15:00Z',\n    updatedAt: '2024-12-27T09:45:00Z',\n    targetCount: 5,\n    domainCount: 78,\n    endpointCount: 892,\n    targets: [\n      { id: 3, name: 'techstart.io' },\n    ],\n  },\n  {\n    id: 3,\n    name: 'Global Finance Ltd',\n    description: '国际金融服务公司，提供银行和投资解决方案',\n    createdAt: '2024-03-10T14:00:00Z',\n    updatedAt: '2024-12-26T16:30:00Z',\n    targetCount: 8,\n    domainCount: 234,\n    endpointCount: 1567,\n    targets: [\n      { id: 4, name: 'globalfinance.com' },\n      { id: 5, name: 'gf-bank.net' },\n    ],\n  },\n  {\n    id: 4,\n    name: 'HealthCare Plus',\n    description: '医疗健康科技公司，专注于数字化医疗解决方案',\n    createdAt: '2024-04-05T09:20:00Z',\n    updatedAt: '2024-12-25T11:10:00Z',\n    targetCount: 6,\n    domainCount: 89,\n    endpointCount: 723,\n    targets: [\n      { id: 6, name: 'healthcareplus.com' },\n    ],\n  },\n  {\n    id: 5,\n    name: 'EduTech Solutions',\n    description: '在线教育平台，提供 K-12 和职业培训课程',\n    createdAt: '2024-05-12T11:45:00Z',\n    updatedAt: '2024-12-24T13:55:00Z',\n    targetCount: 4,\n    domainCount: 45,\n    endpointCount: 456,\n    targets: [\n      { id: 7, name: 'edutech.io' },\n    ],\n  },\n  {\n    id: 6,\n    name: 'RetailMax',\n    description: '电子商务零售平台，覆盖多品类商品销售',\n    createdAt: '2024-06-08T16:30:00Z',\n    updatedAt: '2024-12-23T10:20:00Z',\n    targetCount: 15,\n    domainCount: 312,\n    endpointCount: 4521,\n    targets: [\n      { id: 8, name: 'retailmax.com' },\n      { id: 9, name: 'retailmax.cn' },\n    ],\n  },\n  {\n    id: 7,\n    name: 'CloudNine Hosting',\n    description: '云托管服务提供商，提供 VPS 和专用服务器',\n    createdAt: '2024-07-20T08:00:00Z',\n    updatedAt: '2024-12-22T15:40:00Z',\n    targetCount: 3,\n    domainCount: 67,\n    endpointCount: 389,\n    targets: [\n      { id: 10, name: 'cloudnine.host' },\n    ],\n  },\n  {\n    id: 8,\n    name: 'MediaStream Corp',\n    description: '流媒体内容分发平台，提供视频和音频服务',\n    createdAt: '2024-08-15T12:10:00Z',\n    updatedAt: '2024-12-21T08:25:00Z',\n    targetCount: 7,\n    domainCount: 123,\n    endpointCount: 1234,\n    targets: [\n      { id: 11, name: 'mediastream.tv' },\n    ],\n  },\n]\n\nexport function getMockOrganizations(params?: {\n  page?: number\n  pageSize?: number\n  search?: string\n}): OrganizationsResponse<Organization> {\n  const page = params?.page || 1\n  const pageSize = params?.pageSize || 10\n  const search = params?.search?.toLowerCase() || ''\n\n  // 过滤搜索\n  let filtered = mockOrganizations\n  if (search) {\n    filtered = mockOrganizations.filter(\n      org =>\n        org.name.toLowerCase().includes(search) ||\n        org.description.toLowerCase().includes(search)\n    )\n  }\n\n  // 分页\n  const total = filtered.length\n  const totalPages = Math.ceil(total / pageSize)\n  const start = (page - 1) * pageSize\n  const results = filtered.slice(start, start + pageSize)\n\n  return {\n    results,\n    total,\n    page,\n    pageSize,\n    totalPages,\n  }\n}\n"
  },
  {
    "path": "frontend/mock/data/scans.ts",
    "content": "import type { ScanRecord, GetScansResponse, ScanStatus } from '@/types/scan.types'\nimport type { ScanStatistics } from '@/services/scan.service'\n\nexport const mockScans: ScanRecord[] = [\n  {\n    id: 1,\n    target: 1,\n    targetName: 'acme.com',\n    workerName: 'worker-01',\n    summary: {\n      subdomains: 156,\n      websites: 89,\n      directories: 234,\n      endpoints: 2341,\n      ips: 45,\n      vulnerabilities: {\n        total: 23,\n        critical: 1,\n        high: 4,\n        medium: 8,\n        low: 10,\n      },\n    },\n    engineIds: [1, 2, 3],\n    engineNames: ['Subdomain Discovery', 'Web Crawling', 'Nuclei Scanner'],\n    createdAt: '2024-12-28T10:00:00Z',\n    status: 'completed',\n    progress: 100,\n  },\n  {\n    id: 2,\n    target: 2,\n    targetName: 'acme.io',\n    workerName: 'worker-02',\n    summary: {\n      subdomains: 78,\n      websites: 45,\n      directories: 123,\n      endpoints: 892,\n      ips: 23,\n      vulnerabilities: {\n        total: 12,\n        critical: 0,\n        high: 2,\n        medium: 5,\n        low: 5,\n      },\n    },\n    engineIds: [1, 2],\n    engineNames: ['Subdomain Discovery', 'Web Crawling'],\n    createdAt: '2024-12-27T14:30:00Z',\n    status: 'running',\n    progress: 65,\n    currentStage: 'web_crawling',\n    stageProgress: {\n      subdomain_discovery: {\n        status: 'completed',\n        order: 0,\n        startedAt: '2024-12-27T14:30:00Z',\n        duration: 1200,\n        detail: 'Found 78 subdomains',\n      },\n      web_crawling: {\n        status: 'running',\n        order: 1,\n        startedAt: '2024-12-27T14:50:00Z',\n      },\n    },\n  },\n  {\n    id: 3,\n    target: 3,\n    targetName: 'techstart.io',\n    workerName: 'worker-01',\n    summary: {\n      subdomains: 45,\n      websites: 28,\n      directories: 89,\n      endpoints: 567,\n      ips: 12,\n      vulnerabilities: {\n        total: 8,\n        critical: 0,\n        high: 1,\n        medium: 3,\n        low: 4,\n      },\n    },\n    engineIds: [1, 2, 3],\n    engineNames: ['Subdomain Discovery', 'Web Crawling', 'Nuclei Scanner'],\n    createdAt: '2024-12-26T08:45:00Z',\n    status: 'completed',\n    progress: 100,\n  },\n  {\n    id: 4,\n    target: 4,\n    targetName: 'globalfinance.com',\n    workerName: 'worker-03',\n    summary: {\n      subdomains: 0,\n      websites: 0,\n      directories: 0,\n      endpoints: 0,\n      ips: 0,\n      vulnerabilities: {\n        total: 0,\n        critical: 0,\n        high: 0,\n        medium: 0,\n        low: 0,\n      },\n    },\n    engineIds: [1],\n    engineNames: ['Subdomain Discovery'],\n    createdAt: '2024-12-25T16:20:00Z',\n    status: 'failed',\n    progress: 15,\n    errorMessage: 'Connection timeout: Unable to reach target',\n  },\n  {\n    id: 5,\n    target: 6,\n    targetName: 'healthcareplus.com',\n    workerName: 'worker-02',\n    summary: {\n      subdomains: 34,\n      websites: 0,\n      directories: 0,\n      endpoints: 0,\n      ips: 8,\n      vulnerabilities: {\n        total: 0,\n        critical: 0,\n        high: 0,\n        medium: 0,\n        low: 0,\n      },\n    },\n    engineIds: [1, 2, 3],\n    engineNames: ['Subdomain Discovery', 'Web Crawling', 'Nuclei Scanner'],\n    createdAt: '2024-12-29T09:00:00Z',\n    status: 'running',\n    progress: 25,\n    currentStage: 'subdomain_discovery',\n    stageProgress: {\n      subdomain_discovery: {\n        status: 'running',\n        order: 0,\n        startedAt: '2024-12-29T09:00:00Z',\n      },\n      web_crawling: {\n        status: 'pending',\n        order: 1,\n      },\n      nuclei_scan: {\n        status: 'pending',\n        order: 2,\n      },\n    },\n  },\n  {\n    id: 6,\n    target: 7,\n    targetName: 'edutech.io',\n    workerName: null,\n    summary: {\n      subdomains: 0,\n      websites: 0,\n      directories: 0,\n      endpoints: 0,\n      ips: 0,\n      vulnerabilities: {\n        total: 0,\n        critical: 0,\n        high: 0,\n        medium: 0,\n        low: 0,\n      },\n    },\n    engineIds: [1, 2],\n    engineNames: ['Subdomain Discovery', 'Web Crawling'],\n    createdAt: '2024-12-29T10:30:00Z',\n    status: 'initiated',\n    progress: 0,\n  },\n  {\n    id: 7,\n    target: 8,\n    targetName: 'retailmax.com',\n    workerName: 'worker-01',\n    summary: {\n      subdomains: 89,\n      websites: 56,\n      directories: 178,\n      endpoints: 1234,\n      ips: 28,\n      vulnerabilities: {\n        total: 15,\n        critical: 0,\n        high: 3,\n        medium: 6,\n        low: 6,\n      },\n    },\n    engineIds: [1, 2, 3],\n    engineNames: ['Subdomain Discovery', 'Web Crawling', 'Nuclei Scanner'],\n    createdAt: '2024-12-21T10:45:00Z',\n    status: 'completed',\n    progress: 100,\n  },\n  {\n    id: 8,\n    target: 11,\n    targetName: 'mediastream.tv',\n    workerName: 'worker-02',\n    summary: {\n      subdomains: 67,\n      websites: 0,\n      directories: 0,\n      endpoints: 0,\n      ips: 15,\n      vulnerabilities: {\n        total: 0,\n        critical: 0,\n        high: 0,\n        medium: 0,\n        low: 0,\n      },\n    },\n    engineIds: [1, 2, 3],\n    engineNames: ['Subdomain Discovery', 'Web Crawling', 'Nuclei Scanner'],\n    createdAt: '2024-12-29T08:00:00Z',\n    status: 'running',\n    progress: 45,\n    currentStage: 'web_crawling',\n    stageProgress: {\n      subdomain_discovery: {\n        status: 'completed',\n        order: 0,\n        startedAt: '2024-12-29T08:00:00Z',\n        duration: 900,\n        detail: 'Found 67 subdomains',\n      },\n      web_crawling: {\n        status: 'running',\n        order: 1,\n        startedAt: '2024-12-29T08:15:00Z',\n      },\n      nuclei_scan: {\n        status: 'pending',\n        order: 2,\n      },\n    },\n  },\n]\n\nexport const mockScanStatistics: ScanStatistics = {\n  total: 156,\n  running: 3,\n  completed: 142,\n  failed: 11,\n  totalVulns: 89,\n  totalSubdomains: 4823,\n  totalEndpoints: 12456,\n  totalWebsites: 3421,\n  totalAssets: 21638,\n}\n\nexport function getMockScans(params?: {\n  page?: number\n  pageSize?: number\n  status?: ScanStatus\n  search?: string\n}): GetScansResponse {\n  const page = params?.page || 1\n  const pageSize = params?.pageSize || 10\n  const status = params?.status\n  const search = params?.search?.toLowerCase() || ''\n\n  let filtered = mockScans\n\n  if (status) {\n    filtered = filtered.filter(scan => scan.status === status)\n  }\n\n  if (search) {\n    filtered = filtered.filter(scan =>\n      scan.targetName.toLowerCase().includes(search)\n    )\n  }\n\n  const total = filtered.length\n  const totalPages = Math.ceil(total / pageSize)\n  const start = (page - 1) * pageSize\n  const results = filtered.slice(start, start + pageSize)\n\n  return {\n    results,\n    total,\n    page,\n    pageSize,\n    totalPages,\n  }\n}\n\nexport function getMockScanById(id: number): ScanRecord | undefined {\n  return mockScans.find(scan => scan.id === id)\n}\n"
  },
  {
    "path": "frontend/mock/data/scheduled-scans.ts",
    "content": "import type { ScheduledScan, GetScheduledScansResponse } from '@/types/scheduled-scan.types'\n\nexport const mockScheduledScans: ScheduledScan[] = [\n  {\n    id: 1,\n    name: 'Daily Acme Scan',\n    engineIds: [1],\n    engineNames: ['Full Scan'],\n    organizationId: 1,\n    organizationName: 'Acme Corporation',\n    targetId: null,\n    targetName: null,\n    scanMode: 'organization',\n    cronExpression: '0 2 * * *',\n    isEnabled: true,\n    nextRunTime: '2024-12-30T02:00:00Z',\n    lastRunTime: '2024-12-29T02:00:00Z',\n    runCount: 45,\n    createdAt: '2024-11-15T08:00:00Z',\n    updatedAt: '2024-12-29T02:00:00Z',\n  },\n  {\n    id: 2,\n    name: 'Weekly TechStart Vuln Scan',\n    engineIds: [3],\n    engineNames: ['Vulnerability Only'],\n    organizationId: 2,\n    organizationName: 'TechStart Inc',\n    targetId: null,\n    targetName: null,\n    scanMode: 'organization',\n    cronExpression: '0 3 * * 0',\n    isEnabled: true,\n    nextRunTime: '2025-01-05T03:00:00Z',\n    lastRunTime: '2024-12-29T03:00:00Z',\n    runCount: 12,\n    createdAt: '2024-10-01T10:00:00Z',\n    updatedAt: '2024-12-29T03:00:00Z',\n  },\n  {\n    id: 3,\n    name: 'Hourly API Monitoring',\n    engineIds: [2],\n    engineNames: ['Quick Scan'],\n    organizationId: null,\n    organizationName: null,\n    targetId: 12,\n    targetName: 'api.acme.com',\n    scanMode: 'target',\n    cronExpression: '0 * * * *',\n    isEnabled: true,\n    nextRunTime: '2024-12-29T12:00:00Z',\n    lastRunTime: '2024-12-29T11:00:00Z',\n    runCount: 720,\n    createdAt: '2024-12-01T00:00:00Z',\n    updatedAt: '2024-12-29T11:00:00Z',\n  },\n  {\n    id: 4,\n    name: 'Monthly Full Scan - Finance',\n    engineIds: [1],\n    engineNames: ['Full Scan'],\n    organizationId: 3,\n    organizationName: 'Global Finance Ltd',\n    targetId: null,\n    targetName: null,\n    scanMode: 'organization',\n    cronExpression: '0 0 1 * *',\n    isEnabled: false,\n    nextRunTime: '2025-01-01T00:00:00Z',\n    lastRunTime: '2024-12-01T00:00:00Z',\n    runCount: 6,\n    createdAt: '2024-06-01T08:00:00Z',\n    updatedAt: '2024-12-20T15:00:00Z',\n  },\n  {\n    id: 5,\n    name: 'RetailMax Daily Quick',\n    engineIds: [2, 3],\n    engineNames: ['Quick Scan', 'Vulnerability Only'],\n    organizationId: null,\n    organizationName: null,\n    targetId: 8,\n    targetName: 'retailmax.com',\n    scanMode: 'target',\n    cronExpression: '0 4 * * *',\n    isEnabled: true,\n    nextRunTime: '2024-12-30T04:00:00Z',\n    lastRunTime: '2024-12-29T04:00:00Z',\n    runCount: 30,\n    createdAt: '2024-11-29T09:00:00Z',\n    updatedAt: '2024-12-29T04:00:00Z',\n  },\n]\n\nexport function getMockScheduledScans(params?: {\n  page?: number\n  pageSize?: number\n  search?: string\n}): GetScheduledScansResponse {\n  const page = params?.page || 1\n  const pageSize = params?.pageSize || 10\n  const search = params?.search?.toLowerCase() || ''\n\n  let filtered = mockScheduledScans\n\n  if (search) {\n    filtered = filtered.filter(\n      s =>\n        s.name.toLowerCase().includes(search) ||\n        s.organizationName?.toLowerCase().includes(search) ||\n        s.targetName?.toLowerCase().includes(search)\n    )\n  }\n\n  const total = filtered.length\n  const totalPages = Math.ceil(total / pageSize)\n  const start = (page - 1) * pageSize\n  const results = filtered.slice(start, start + pageSize)\n\n  return {\n    results,\n    total,\n    page,\n    pageSize,\n    totalPages,\n  }\n}\n\nexport function getMockScheduledScanById(id: number): ScheduledScan | undefined {\n  return mockScheduledScans.find(s => s.id === id)\n}\n"
  },
  {
    "path": "frontend/mock/data/search.ts",
    "content": "import type {\n  SearchResponse,\n  WebsiteSearchResult,\n  EndpointSearchResult,\n  AssetType,\n} from '@/types/search.types'\nimport { mockWebsites } from './websites'\nimport { mockEndpoints } from './endpoints'\n\n// 将 Website 转换为搜索结果格式\nfunction websiteToSearchResult(website: typeof mockWebsites[0]): WebsiteSearchResult {\n  return {\n    id: website.id,\n    url: website.url,\n    host: website.host,\n    title: website.title,\n    technologies: website.tech || [],\n    statusCode: website.statusCode,\n    contentLength: website.contentLength,\n    contentType: website.contentType,\n    webserver: website.webserver,\n    location: website.location,\n    vhost: website.vhost,\n    responseHeaders: {},\n    responseBody: website.responseBody || '',\n    createdAt: website.createdAt,\n    targetId: website.target ?? 1,\n    vulnerabilities: [],\n  }\n}\n\n// 将 Endpoint 转换为搜索结果格式\nfunction endpointToSearchResult(endpoint: typeof mockEndpoints[0]): EndpointSearchResult {\n  return {\n    id: endpoint.id,\n    url: endpoint.url,\n    host: endpoint.host || '',\n    title: endpoint.title,\n    technologies: endpoint.tech || [],\n    statusCode: endpoint.statusCode,\n    contentLength: endpoint.contentLength,\n    contentType: endpoint.contentType || '',\n    webserver: endpoint.webserver || '',\n    location: endpoint.location || '',\n    vhost: null,\n    responseHeaders: {},\n    responseBody: '',\n    createdAt: endpoint.createdAt ?? null,\n    targetId: 1,\n    matchedGfPatterns: endpoint.gfPatterns || [],\n  }\n}\n\n// 解析搜索表达式\nfunction parseSearchQuery(query: string): { field: string; operator: string; value: string }[] {\n  const conditions: { field: string; operator: string; value: string }[] = []\n  \n  // 简单解析：field=\"value\" 或 field==\"value\" 或 field!=\"value\"\n  const regex = /(\\w+)(==|!=|=)\"([^\"]+)\"/g\n  let match\n  while ((match = regex.exec(query)) !== null) {\n    conditions.push({\n      field: match[1],\n      operator: match[2],\n      value: match[3],\n    })\n  }\n  \n  return conditions\n}\n\n// 检查记录是否匹配条件\nfunction matchesConditions(\n  record: WebsiteSearchResult | EndpointSearchResult,\n  conditions: { field: string; operator: string; value: string }[]\n): boolean {\n  if (conditions.length === 0) return true\n  \n  return conditions.every(cond => {\n    let fieldValue: string | number | null = null\n    \n    switch (cond.field) {\n      case 'host':\n        fieldValue = record.host\n        break\n      case 'url':\n        fieldValue = record.url\n        break\n      case 'title':\n        fieldValue = record.title\n        break\n      case 'tech':\n        fieldValue = record.technologies.join(',')\n        break\n      case 'status':\n        fieldValue = String(record.statusCode)\n        break\n      default:\n        return true\n    }\n    \n    if (fieldValue === null) return false\n    const strValue = String(fieldValue).toLowerCase()\n    const searchValue = cond.value.toLowerCase()\n    \n    switch (cond.operator) {\n      case '=':\n        return strValue.includes(searchValue)\n      case '==':\n        return strValue === searchValue\n      case '!=':\n        return !strValue.includes(searchValue)\n      default:\n        return true\n    }\n  })\n}\n\nexport function getMockSearchResults(params: {\n  q?: string\n  asset_type?: AssetType\n  page?: number\n  pageSize?: number\n}): SearchResponse {\n  const { q = '', asset_type = 'website', page = 1, pageSize = 10 } = params\n  \n  const conditions = parseSearchQuery(q)\n  \n  let results: (WebsiteSearchResult | EndpointSearchResult)[]\n  \n  if (asset_type === 'website') {\n    results = mockWebsites\n      .map(websiteToSearchResult)\n      .filter(r => matchesConditions(r, conditions))\n  } else {\n    results = mockEndpoints\n      .map(endpointToSearchResult)\n      .filter(r => matchesConditions(r, conditions))\n  }\n  \n  const total = results.length\n  const totalPages = Math.ceil(total / pageSize)\n  const start = (page - 1) * pageSize\n  const paginatedResults = results.slice(start, start + pageSize)\n  \n  return {\n    results: paginatedResults,\n    total,\n    page,\n    pageSize,\n    totalPages,\n    assetType: asset_type,\n  }\n}\n"
  },
  {
    "path": "frontend/mock/data/subdomains.ts",
    "content": "import type { Subdomain, GetAllSubdomainsResponse } from '@/types/subdomain.types'\n\nexport const mockSubdomains: Subdomain[] = [\n  { id: 1, name: 'acme.com', createdAt: '2024-12-28T10:00:00Z' },\n  { id: 2, name: 'www.acme.com', createdAt: '2024-12-28T10:01:00Z' },\n  { id: 3, name: 'api.acme.com', createdAt: '2024-12-28T10:02:00Z' },\n  { id: 4, name: 'admin.acme.com', createdAt: '2024-12-28T10:03:00Z' },\n  { id: 5, name: 'mail.acme.com', createdAt: '2024-12-28T10:04:00Z' },\n  { id: 6, name: 'blog.acme.com', createdAt: '2024-12-28T10:05:00Z' },\n  { id: 7, name: 'shop.acme.com', createdAt: '2024-12-28T10:06:00Z' },\n  { id: 8, name: 'cdn.acme.com', createdAt: '2024-12-28T10:07:00Z' },\n  { id: 9, name: 'static.acme.com', createdAt: '2024-12-28T10:08:00Z' },\n  { id: 10, name: 'dev.acme.com', createdAt: '2024-12-28T10:09:00Z' },\n  { id: 11, name: 'staging.acme.com', createdAt: '2024-12-28T10:10:00Z' },\n  { id: 12, name: 'test.acme.com', createdAt: '2024-12-28T10:11:00Z' },\n  { id: 13, name: 'acme.io', createdAt: '2024-12-27T14:30:00Z' },\n  { id: 14, name: 'docs.acme.io', createdAt: '2024-12-27T14:31:00Z' },\n  { id: 15, name: 'api.acme.io', createdAt: '2024-12-27T14:32:00Z' },\n  { id: 16, name: 'status.acme.io', createdAt: '2024-12-27T14:33:00Z' },\n  { id: 17, name: 'techstart.io', createdAt: '2024-12-26T08:45:00Z' },\n  { id: 18, name: 'www.techstart.io', createdAt: '2024-12-26T08:46:00Z' },\n  { id: 19, name: 'app.techstart.io', createdAt: '2024-12-26T08:47:00Z' },\n  { id: 20, name: 'globalfinance.com', createdAt: '2024-12-25T16:20:00Z' },\n  { id: 21, name: 'www.globalfinance.com', createdAt: '2024-12-25T16:21:00Z' },\n  { id: 22, name: 'secure.globalfinance.com', createdAt: '2024-12-25T16:22:00Z' },\n  { id: 23, name: 'portal.globalfinance.com', createdAt: '2024-12-25T16:23:00Z' },\n  { id: 24, name: 'healthcareplus.com', createdAt: '2024-12-23T11:00:00Z' },\n  { id: 25, name: 'www.healthcareplus.com', createdAt: '2024-12-23T11:01:00Z' },\n  { id: 26, name: 'patient.healthcareplus.com', createdAt: '2024-12-23T11:02:00Z' },\n  { id: 27, name: 'edutech.io', createdAt: '2024-12-22T13:30:00Z' },\n  { id: 28, name: 'learn.edutech.io', createdAt: '2024-12-22T13:31:00Z' },\n  { id: 29, name: 'retailmax.com', createdAt: '2024-12-21T10:45:00Z' },\n  { id: 30, name: 'www.retailmax.com', createdAt: '2024-12-21T10:46:00Z' },\n  { id: 31, name: 'm.retailmax.com', createdAt: '2024-12-21T10:47:00Z' },\n  { id: 32, name: 'api.retailmax.com', createdAt: '2024-12-21T10:48:00Z' },\n  { id: 33, name: 'cloudnine.host', createdAt: '2024-12-19T16:00:00Z' },\n  { id: 34, name: 'panel.cloudnine.host', createdAt: '2024-12-19T16:01:00Z' },\n  { id: 35, name: 'mediastream.tv', createdAt: '2024-12-18T09:30:00Z' },\n  { id: 36, name: 'www.mediastream.tv', createdAt: '2024-12-18T09:31:00Z' },\n  { id: 37, name: 'cdn.mediastream.tv', createdAt: '2024-12-18T09:32:00Z' },\n  { id: 38, name: 'stream.mediastream.tv', createdAt: '2024-12-18T09:33:00Z' },\n]\n\nexport function getMockSubdomains(params?: {\n  page?: number\n  pageSize?: number\n  search?: string\n  organizationId?: number\n}): GetAllSubdomainsResponse {\n  const page = params?.page || 1\n  const pageSize = params?.pageSize || 10\n  const search = params?.search?.toLowerCase() || ''\n\n  let filtered = mockSubdomains\n\n  if (search) {\n    filtered = mockSubdomains.filter(sub =>\n      sub.name.toLowerCase().includes(search)\n    )\n  }\n\n  const total = filtered.length\n  const totalPages = Math.ceil(total / pageSize)\n  const start = (page - 1) * pageSize\n  const domains = filtered.slice(start, start + pageSize)\n\n  return {\n    domains,\n    total,\n    page,\n    pageSize,\n    totalPages,\n  }\n}\n\nexport function getMockSubdomainById(id: number): Subdomain | undefined {\n  return mockSubdomains.find(sub => sub.id === id)\n}\n"
  },
  {
    "path": "frontend/mock/data/system-logs.ts",
    "content": "import type { SystemLogResponse, LogFilesResponse, LogFile } from '@/types/system-log.types'\n\nexport const mockLogFiles: LogFile[] = [\n  {\n    filename: 'xingrin.log',\n    category: 'system',\n    size: 1234567,\n    modifiedAt: '2024-12-28T10:00:00Z',\n  },\n  {\n    filename: 'xingrin-error.log',\n    category: 'error',\n    size: 45678,\n    modifiedAt: '2024-12-28T09:30:00Z',\n  },\n  {\n    filename: 'worker.log',\n    category: 'system',\n    size: 234567,\n    modifiedAt: '2024-12-28T10:00:00Z',\n  },\n  {\n    filename: 'celery.log',\n    category: 'system',\n    size: 567890,\n    modifiedAt: '2024-12-28T09:45:00Z',\n  },\n  {\n    filename: 'nginx-access.log',\n    category: 'system',\n    size: 12345678,\n    modifiedAt: '2024-12-28T10:00:00Z',\n  },\n  {\n    filename: 'nginx-error.log',\n    category: 'error',\n    size: 23456,\n    modifiedAt: '2024-12-28T08:00:00Z',\n  },\n]\n\nexport const mockSystemLogContent = `[2024-12-28 10:00:00] INFO: Server started on port 8000\n[2024-12-28 10:00:01] INFO: Database connection established\n[2024-12-28 10:00:02] INFO: Redis connection established\n[2024-12-28 10:00:03] INFO: Worker node registered: local-worker-1\n[2024-12-28 10:00:05] INFO: Celery worker started with 4 concurrent tasks\n[2024-12-28 10:01:00] INFO: New scan task created: scan-001\n[2024-12-28 10:01:01] INFO: Task scan-001 assigned to worker local-worker-1\n[2024-12-28 10:01:05] INFO: Subdomain enumeration started for target: acme.com\n[2024-12-28 10:02:30] INFO: Found 45 subdomains for acme.com\n[2024-12-28 10:02:31] INFO: Port scanning started for 45 hosts\n[2024-12-28 10:05:00] INFO: Port scanning completed, found 123 open ports\n[2024-12-28 10:05:01] INFO: HTTP probing started for 123 endpoints\n[2024-12-28 10:08:00] INFO: HTTP probing completed, found 89 live websites\n[2024-12-28 10:08:01] INFO: Fingerprint detection started\n[2024-12-28 10:10:00] INFO: Fingerprint detection completed\n[2024-12-28 10:10:01] INFO: Vulnerability scanning started with nuclei\n[2024-12-28 10:15:00] INFO: Vulnerability scanning completed, found 5 vulnerabilities\n[2024-12-28 10:15:01] INFO: Scan task scan-001 completed successfully\n[2024-12-28 10:15:02] INFO: Results saved to database\n[2024-12-28 10:15:03] INFO: Notification sent to Discord webhook`\n\nexport const mockErrorLogContent = `[2024-12-28 08:30:00] ERROR: Connection refused: Redis server not responding\n[2024-12-28 08:30:01] ERROR: Retrying Redis connection in 5 seconds...\n[2024-12-28 08:30:06] INFO: Redis connection recovered\n[2024-12-28 09:15:00] WARNING: High memory usage detected (85%)\n[2024-12-28 09:15:01] INFO: Running garbage collection\n[2024-12-28 09:15:05] INFO: Memory usage reduced to 62%\n[2024-12-28 09:30:00] ERROR: Worker node disconnected: remote-worker-2\n[2024-12-28 09:30:01] WARNING: Reassigning 3 tasks from remote-worker-2\n[2024-12-28 09:30:05] INFO: Tasks reassigned successfully`\n\nexport function getMockLogFiles(): LogFilesResponse {\n  return {\n    files: mockLogFiles,\n  }\n}\n\nexport function getMockSystemLogs(params?: {\n  file?: string\n  lines?: number\n}): SystemLogResponse {\n  const filename = params?.file || 'xingrin.log'\n  const lines = params?.lines || 100\n\n  let content: string\n  if (filename.includes('error')) {\n    content = mockErrorLogContent\n  } else {\n    content = mockSystemLogContent\n  }\n\n  // 模拟行数限制\n  const contentLines = content.split('\\n')\n  const limitedContent = contentLines.slice(-lines).join('\\n')\n\n  return {\n    content: limitedContent,\n  }\n}\n"
  },
  {
    "path": "frontend/mock/data/targets.ts",
    "content": "import type { Target, TargetsResponse, TargetDetail } from '@/types/target.types'\n\nexport const mockTargets: Target[] = [\n  {\n    id: 1,\n    name: 'acme.com',\n    type: 'domain',\n    description: 'Acme Corporation 主站',\n    createdAt: '2024-01-15T08:30:00Z',\n    lastScannedAt: '2024-12-28T10:00:00Z',\n    organizations: [{ id: 1, name: 'Acme Corporation' }],\n  },\n  {\n    id: 2,\n    name: 'acme.io',\n    type: 'domain',\n    description: 'Acme Corporation 开发者平台',\n    createdAt: '2024-01-16T09:00:00Z',\n    lastScannedAt: '2024-12-27T14:30:00Z',\n    organizations: [{ id: 1, name: 'Acme Corporation' }],\n  },\n  {\n    id: 3,\n    name: 'techstart.io',\n    type: 'domain',\n    description: 'TechStart 官网',\n    createdAt: '2024-02-20T10:15:00Z',\n    lastScannedAt: '2024-12-26T08:45:00Z',\n    organizations: [{ id: 2, name: 'TechStart Inc' }],\n  },\n  {\n    id: 4,\n    name: 'globalfinance.com',\n    type: 'domain',\n    description: 'Global Finance 主站',\n    createdAt: '2024-03-10T14:00:00Z',\n    lastScannedAt: '2024-12-25T16:20:00Z',\n    organizations: [{ id: 3, name: 'Global Finance Ltd' }],\n  },\n  {\n    id: 5,\n    name: '192.168.1.0/24',\n    type: 'cidr',\n    description: '内网 IP 段',\n    createdAt: '2024-03-15T11:30:00Z',\n    lastScannedAt: '2024-12-24T09:15:00Z',\n    organizations: [{ id: 3, name: 'Global Finance Ltd' }],\n  },\n  {\n    id: 6,\n    name: 'healthcareplus.com',\n    type: 'domain',\n    description: 'HealthCare Plus 官网',\n    createdAt: '2024-04-05T09:20:00Z',\n    lastScannedAt: '2024-12-23T11:00:00Z',\n    organizations: [{ id: 4, name: 'HealthCare Plus' }],\n  },\n  {\n    id: 7,\n    name: 'edutech.io',\n    type: 'domain',\n    description: 'EduTech 在线教育平台',\n    createdAt: '2024-05-12T11:45:00Z',\n    lastScannedAt: '2024-12-22T13:30:00Z',\n    organizations: [{ id: 5, name: 'EduTech Solutions' }],\n  },\n  {\n    id: 8,\n    name: 'retailmax.com',\n    type: 'domain',\n    description: 'RetailMax 电商主站',\n    createdAt: '2024-06-08T16:30:00Z',\n    lastScannedAt: '2024-12-21T10:45:00Z',\n    organizations: [{ id: 6, name: 'RetailMax' }],\n  },\n  {\n    id: 9,\n    name: '10.0.0.1',\n    type: 'ip',\n    description: '核心服务器 IP',\n    createdAt: '2024-07-01T08:00:00Z',\n    lastScannedAt: '2024-12-20T14:20:00Z',\n    organizations: [{ id: 7, name: 'CloudNine Hosting' }],\n  },\n  {\n    id: 10,\n    name: 'cloudnine.host',\n    type: 'domain',\n    description: 'CloudNine 托管服务',\n    createdAt: '2024-07-20T08:00:00Z',\n    lastScannedAt: '2024-12-19T16:00:00Z',\n    organizations: [{ id: 7, name: 'CloudNine Hosting' }],\n  },\n  {\n    id: 11,\n    name: 'mediastream.tv',\n    type: 'domain',\n    description: 'MediaStream 流媒体平台',\n    createdAt: '2024-08-15T12:10:00Z',\n    lastScannedAt: '2024-12-18T09:30:00Z',\n    organizations: [{ id: 8, name: 'MediaStream Corp' }],\n  },\n  {\n    id: 12,\n    name: 'api.acme.com',\n    type: 'domain',\n    description: 'Acme API 服务',\n    createdAt: '2024-09-01T10:00:00Z',\n    lastScannedAt: '2024-12-17T11:15:00Z',\n    organizations: [{ id: 1, name: 'Acme Corporation' }],\n  },\n]\n\nexport const mockTargetDetails: Record<number, TargetDetail> = {\n  1: {\n    ...mockTargets[0],\n    summary: {\n      subdomains: 156,\n      websites: 89,\n      endpoints: 2341,\n      ips: 45,\n      vulnerabilities: {\n        total: 23,\n        critical: 1,\n        high: 4,\n        medium: 8,\n        low: 10,\n      },\n    },\n  },\n  2: {\n    ...mockTargets[1],\n    summary: {\n      subdomains: 78,\n      websites: 45,\n      endpoints: 892,\n      ips: 23,\n      vulnerabilities: {\n        total: 12,\n        critical: 0,\n        high: 2,\n        medium: 5,\n        low: 5,\n      },\n    },\n  },\n}\n\nexport function getMockTargets(params?: {\n  page?: number\n  pageSize?: number\n  search?: string\n}): TargetsResponse {\n  const page = params?.page || 1\n  const pageSize = params?.pageSize || 10\n  const search = params?.search?.toLowerCase() || ''\n\n  let filtered = mockTargets\n  if (search) {\n    filtered = mockTargets.filter(\n      target =>\n        target.name.toLowerCase().includes(search) ||\n        target.description?.toLowerCase().includes(search)\n    )\n  }\n\n  const total = filtered.length\n  const totalPages = Math.ceil(total / pageSize)\n  const start = (page - 1) * pageSize\n  const results = filtered.slice(start, start + pageSize)\n\n  return {\n    results,\n    total,\n    page,\n    pageSize,\n    totalPages,\n  }\n}\n\nexport function getMockTargetById(id: number): TargetDetail | undefined {\n  if (mockTargetDetails[id]) {\n    return mockTargetDetails[id]\n  }\n  const target = mockTargets.find(t => t.id === id)\n  if (target) {\n    return {\n      ...target,\n      summary: {\n        subdomains: Math.floor(Math.random() * 100) + 10,\n        websites: Math.floor(Math.random() * 50) + 5,\n        endpoints: Math.floor(Math.random() * 1000) + 100,\n        ips: Math.floor(Math.random() * 30) + 5,\n        vulnerabilities: {\n          total: Math.floor(Math.random() * 20) + 1,\n          critical: Math.floor(Math.random() * 2),\n          high: Math.floor(Math.random() * 5),\n          medium: Math.floor(Math.random() * 8),\n          low: Math.floor(Math.random() * 10),\n        },\n      },\n    }\n  }\n  return undefined\n}\n"
  },
  {
    "path": "frontend/mock/data/tools.ts",
    "content": "import type { Tool, GetToolsResponse } from '@/types/tool.types'\n\nexport const mockTools: Tool[] = [\n  {\n    id: 1,\n    name: 'subfinder',\n    type: 'opensource',\n    repoUrl: 'https://github.com/projectdiscovery/subfinder',\n    version: 'v2.6.3',\n    description: 'Fast passive subdomain enumeration tool.',\n    categoryNames: ['subdomain', 'recon'],\n    directory: '/opt/tools/subfinder',\n    installCommand: 'go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest',\n    updateCommand: 'go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest',\n    versionCommand: 'subfinder -version',\n    createdAt: '2024-12-20T10:00:00Z',\n    updatedAt: '2024-12-28T10:00:00Z',\n  },\n  {\n    id: 2,\n    name: 'httpx',\n    type: 'opensource',\n    repoUrl: 'https://github.com/projectdiscovery/httpx',\n    version: 'v1.6.0',\n    description: 'Fast and multi-purpose HTTP toolkit.',\n    categoryNames: ['http', 'recon'],\n    directory: '/opt/tools/httpx',\n    installCommand: 'go install -v github.com/projectdiscovery/httpx/cmd/httpx@latest',\n    updateCommand: 'go install -v github.com/projectdiscovery/httpx/cmd/httpx@latest',\n    versionCommand: 'httpx -version',\n    createdAt: '2024-12-20T10:01:00Z',\n    updatedAt: '2024-12-28T10:01:00Z',\n  },\n  {\n    id: 3,\n    name: 'nuclei',\n    type: 'opensource',\n    repoUrl: 'https://github.com/projectdiscovery/nuclei',\n    version: 'v3.1.0',\n    description: 'Fast and customizable vulnerability scanner.',\n    categoryNames: ['vulnerability'],\n    directory: '/opt/tools/nuclei',\n    installCommand: 'go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest',\n    updateCommand: 'go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest',\n    versionCommand: 'nuclei -version',\n    createdAt: '2024-12-20T10:02:00Z',\n    updatedAt: '2024-12-28T10:02:00Z',\n  },\n  {\n    id: 4,\n    name: 'naabu',\n    type: 'opensource',\n    repoUrl: 'https://github.com/projectdiscovery/naabu',\n    version: 'v2.2.1',\n    description: 'Fast port scanner written in go.',\n    categoryNames: ['port', 'network'],\n    directory: '/opt/tools/naabu',\n    installCommand: 'go install -v github.com/projectdiscovery/naabu/v2/cmd/naabu@latest',\n    updateCommand: 'go install -v github.com/projectdiscovery/naabu/v2/cmd/naabu@latest',\n    versionCommand: 'naabu -version',\n    createdAt: '2024-12-20T10:03:00Z',\n    updatedAt: '2024-12-28T10:03:00Z',\n  },\n  {\n    id: 5,\n    name: 'katana',\n    type: 'opensource',\n    repoUrl: 'https://github.com/projectdiscovery/katana',\n    version: 'v1.0.4',\n    description: 'Next-generation crawling and spidering framework.',\n    categoryNames: ['crawler', 'recon'],\n    directory: '/opt/tools/katana',\n    installCommand: 'go install github.com/projectdiscovery/katana/cmd/katana@latest',\n    updateCommand: 'go install github.com/projectdiscovery/katana/cmd/katana@latest',\n    versionCommand: 'katana -version',\n    createdAt: '2024-12-20T10:04:00Z',\n    updatedAt: '2024-12-28T10:04:00Z',\n  },\n  {\n    id: 6,\n    name: 'ffuf',\n    type: 'opensource',\n    repoUrl: 'https://github.com/ffuf/ffuf',\n    version: 'v2.1.0',\n    description: 'Fast web fuzzer written in Go.',\n    categoryNames: ['directory', 'fuzzer'],\n    directory: '/opt/tools/ffuf',\n    installCommand: 'go install github.com/ffuf/ffuf/v2@latest',\n    updateCommand: 'go install github.com/ffuf/ffuf/v2@latest',\n    versionCommand: 'ffuf -V',\n    createdAt: '2024-12-20T10:05:00Z',\n    updatedAt: '2024-12-28T10:05:00Z',\n  },\n  {\n    id: 7,\n    name: 'amass',\n    type: 'opensource',\n    repoUrl: 'https://github.com/owasp-amass/amass',\n    version: 'v4.2.0',\n    description: 'In-depth attack surface mapping and asset discovery.',\n    categoryNames: ['subdomain', 'recon'],\n    directory: '/opt/tools/amass',\n    installCommand: 'go install -v github.com/owasp-amass/amass/v4/...@master',\n    updateCommand: 'go install -v github.com/owasp-amass/amass/v4/...@master',\n    versionCommand: 'amass -version',\n    createdAt: '2024-12-20T10:06:00Z',\n    updatedAt: '2024-12-28T10:06:00Z',\n  },\n  {\n    id: 8,\n    name: 'xingfinger',\n    type: 'custom',\n    repoUrl: '',\n    version: '1.0.0',\n    description: '自定义指纹识别工具',\n    categoryNames: ['recon'],\n    directory: '/opt/tools/xingfinger',\n    installCommand: '',\n    updateCommand: '',\n    versionCommand: '',\n    createdAt: '2024-12-20T10:07:00Z',\n    updatedAt: '2024-12-28T10:07:00Z',\n  },\n]\n\nexport function getMockTools(params?: {\n  page?: number\n  pageSize?: number\n}): GetToolsResponse {\n  const page = params?.page || 1\n  const pageSize = params?.pageSize || 10\n\n  const total = mockTools.length\n  const totalPages = Math.ceil(total / pageSize)\n  const start = (page - 1) * pageSize\n  const tools = mockTools.slice(start, start + pageSize)\n\n  return {\n    tools,\n    total,\n    page,\n    pageSize,\n    totalPages,\n  }\n}\n\nexport function getMockToolById(id: number): Tool | undefined {\n  return mockTools.find(t => t.id === id)\n}\n"
  },
  {
    "path": "frontend/mock/data/vulnerabilities.ts",
    "content": "import type { Vulnerability, GetVulnerabilitiesResponse, VulnerabilitySeverity } from '@/types/vulnerability.types'\n\nexport const mockVulnerabilities: Vulnerability[] = [\n  {\n    id: 1,\n    target: 1,\n    url: 'https://acme.com/search?q=test',\n    vulnType: 'xss-reflected',\n    severity: 'critical',\n    source: 'dalfox',\n    cvssScore: 9.1,\n    description: 'Reflected XSS in search parameter',\n    rawOutput: {\n      type: 'R',\n      inject_type: 'inHTML-URL',\n      method: 'GET',\n      data: 'https://acme.com/search?q=<script>alert(1)</script>',\n      param: 'q',\n      payload: '<script>alert(1)</script>',\n      evidence: '<script>alert(1)</script>',\n      cwe: 'CWE-79',\n    },\n    createdAt: '2024-12-28T10:30:00Z',\n  },\n  {\n    id: 2,\n    target: 1,\n    url: 'https://api.acme.com/v1/users',\n    vulnType: 'CVE-2024-1234',\n    severity: 'high',\n    source: 'nuclei',\n    cvssScore: 8.5,\n    description: 'SQL Injection in user API endpoint',\n    rawOutput: {\n      'template-id': 'CVE-2024-1234',\n      'matched-at': 'https://api.acme.com/v1/users',\n      host: 'api.acme.com',\n      info: {\n        name: 'SQL Injection',\n        description: 'SQL injection vulnerability in user endpoint',\n        severity: 'high',\n        tags: ['sqli', 'cve'],\n        reference: ['https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-1234'],\n        classification: {\n          'cve-id': 'CVE-2024-1234',\n          'cwe-id': ['CWE-89'],\n        },\n      },\n    },\n    createdAt: '2024-12-28T10:45:00Z',\n  },\n  {\n    id: 3,\n    target: 1,\n    url: 'https://acme.com/login',\n    vulnType: 'xss-stored',\n    severity: 'high',\n    source: 'dalfox',\n    cvssScore: 8.2,\n    description: 'Stored XSS in user profile',\n    rawOutput: {\n      type: 'S',\n      inject_type: 'inHTML-TAG',\n      method: 'POST',\n      param: 'bio',\n      payload: '<img src=x onerror=alert(1)>',\n    },\n    createdAt: '2024-12-27T14:20:00Z',\n  },\n  {\n    id: 4,\n    target: 2,\n    url: 'https://acme.io/api/config',\n    vulnType: 'information-disclosure',\n    severity: 'medium',\n    source: 'nuclei',\n    cvssScore: 5.3,\n    description: 'Exposed configuration file',\n    rawOutput: {\n      'template-id': 'exposed-config',\n      'matched-at': 'https://acme.io/api/config',\n      host: 'acme.io',\n      info: {\n        name: 'Exposed Configuration',\n        description: 'Configuration file accessible without authentication',\n        severity: 'medium',\n        tags: ['exposure', 'config'],\n      },\n    },\n    createdAt: '2024-12-27T15:00:00Z',\n  },\n  {\n    id: 5,\n    target: 3,\n    url: 'https://techstart.io/admin',\n    vulnType: 'open-redirect',\n    severity: 'medium',\n    source: 'nuclei',\n    cvssScore: 4.7,\n    description: 'Open redirect vulnerability',\n    rawOutput: {\n      'template-id': 'open-redirect',\n      'matched-at': 'https://techstart.io/admin?redirect=evil.com',\n      host: 'techstart.io',\n      info: {\n        name: 'Open Redirect',\n        description: 'URL redirect without validation',\n        severity: 'medium',\n        tags: ['redirect'],\n      },\n    },\n    createdAt: '2024-12-26T09:30:00Z',\n  },\n  {\n    id: 6,\n    target: 4,\n    url: 'https://globalfinance.com/.git/config',\n    vulnType: 'git-config-exposure',\n    severity: 'high',\n    source: 'nuclei',\n    cvssScore: 7.5,\n    description: 'Git configuration file exposed',\n    rawOutput: {\n      'template-id': 'git-config',\n      'matched-at': 'https://globalfinance.com/.git/config',\n      host: 'globalfinance.com',\n      info: {\n        name: 'Git Config Exposure',\n        description: 'Git configuration file is publicly accessible',\n        severity: 'high',\n        tags: ['git', 'exposure'],\n      },\n    },\n    createdAt: '2024-12-25T11:15:00Z',\n  },\n  {\n    id: 7,\n    target: 8,\n    url: 'https://retailmax.com/product?id=1',\n    vulnType: 'sqli',\n    severity: 'critical',\n    source: 'nuclei',\n    cvssScore: 9.8,\n    description: 'SQL Injection in product parameter',\n    rawOutput: {\n      'template-id': 'generic-sqli',\n      'matched-at': \"https://retailmax.com/product?id=1'\",\n      host: 'retailmax.com',\n      info: {\n        name: 'SQL Injection',\n        description: 'SQL injection in product ID parameter',\n        severity: 'critical',\n        tags: ['sqli'],\n        classification: {\n          'cwe-id': ['CWE-89'],\n        },\n      },\n    },\n    createdAt: '2024-12-21T12:00:00Z',\n  },\n  {\n    id: 8,\n    target: 1,\n    url: 'https://acme.com/robots.txt',\n    vulnType: 'robots-txt-exposure',\n    severity: 'info',\n    source: 'nuclei',\n    description: 'Robots.txt file found',\n    rawOutput: {\n      'template-id': 'robots-txt',\n      'matched-at': 'https://acme.com/robots.txt',\n      host: 'acme.com',\n      info: {\n        name: 'Robots.txt',\n        description: 'Robots.txt file detected',\n        severity: 'info',\n        tags: ['misc'],\n      },\n    },\n    createdAt: '2024-12-28T10:00:00Z',\n  },\n  {\n    id: 9,\n    target: 2,\n    url: 'https://acme.io/sitemap.xml',\n    vulnType: 'sitemap-exposure',\n    severity: 'info',\n    source: 'nuclei',\n    description: 'Sitemap.xml file found',\n    rawOutput: {\n      'template-id': 'sitemap-xml',\n      'matched-at': 'https://acme.io/sitemap.xml',\n      host: 'acme.io',\n      info: {\n        name: 'Sitemap.xml',\n        description: 'Sitemap.xml file detected',\n        severity: 'info',\n        tags: ['misc'],\n      },\n    },\n    createdAt: '2024-12-27T14:00:00Z',\n  },\n  {\n    id: 10,\n    target: 3,\n    url: 'https://techstart.io/api/v2/debug',\n    vulnType: 'debug-endpoint',\n    severity: 'low',\n    source: 'nuclei',\n    cvssScore: 3.1,\n    description: 'Debug endpoint exposed',\n    rawOutput: {\n      'template-id': 'debug-endpoint',\n      'matched-at': 'https://techstart.io/api/v2/debug',\n      host: 'techstart.io',\n      info: {\n        name: 'Debug Endpoint',\n        description: 'Debug endpoint accessible in production',\n        severity: 'low',\n        tags: ['debug', 'exposure'],\n      },\n    },\n    createdAt: '2024-12-26T10:00:00Z',\n  },\n]\n\nexport function getMockVulnerabilities(params?: {\n  page?: number\n  pageSize?: number\n  targetId?: number\n  severity?: VulnerabilitySeverity\n  search?: string\n}): GetVulnerabilitiesResponse {\n  const page = params?.page || 1\n  const pageSize = params?.pageSize || 10\n  const targetId = params?.targetId\n  const severity = params?.severity\n  const search = params?.search?.toLowerCase() || ''\n\n  let filtered = mockVulnerabilities\n\n  if (targetId) {\n    filtered = filtered.filter(v => v.target === targetId)\n  }\n\n  if (severity) {\n    filtered = filtered.filter(v => v.severity === severity)\n  }\n\n  if (search) {\n    filtered = filtered.filter(\n      v =>\n        v.url.toLowerCase().includes(search) ||\n        v.vulnType.toLowerCase().includes(search) ||\n        v.description?.toLowerCase().includes(search)\n    )\n  }\n\n  const total = filtered.length\n  const totalPages = Math.ceil(total / pageSize)\n  const start = (page - 1) * pageSize\n  const vulnerabilities = filtered.slice(start, start + pageSize)\n\n  return {\n    vulnerabilities,\n    total,\n    page,\n    pageSize,\n    totalPages,\n  }\n}\n\nexport function getMockVulnerabilityById(id: number): Vulnerability | undefined {\n  return mockVulnerabilities.find(v => v.id === id)\n}\n"
  },
  {
    "path": "frontend/mock/data/websites.ts",
    "content": "import type { WebSite, WebSiteListResponse } from '@/types/website.types'\n\nexport const mockWebsites: WebSite[] = [\n  {\n    id: 1,\n    target: 1,\n    url: 'https://acme.com',\n    host: 'acme.com',\n    location: '',\n    title: 'Acme Corporation - Home',\n    webserver: 'nginx/1.24.0',\n    contentType: 'text/html; charset=utf-8',\n    statusCode: 200,\n    contentLength: 45678,\n    responseBody: '<!DOCTYPE html>...',\n    tech: ['React', 'Next.js', 'Node.js', 'Tailwind CSS'],\n    vhost: false,\n    subdomain: 'acme.com',\n    createdAt: '2024-12-28T10:00:00Z',\n  },\n  {\n    id: 2,\n    target: 1,\n    url: 'https://www.acme.com',\n    host: 'www.acme.com',\n    location: 'https://acme.com',\n    title: 'Acme Corporation - Home',\n    webserver: 'nginx/1.24.0',\n    contentType: 'text/html; charset=utf-8',\n    statusCode: 301,\n    contentLength: 0,\n    responseBody: '',\n    tech: [],\n    vhost: false,\n    subdomain: 'www.acme.com',\n    createdAt: '2024-12-28T10:01:00Z',\n  },\n  {\n    id: 3,\n    target: 1,\n    url: 'https://api.acme.com',\n    host: 'api.acme.com',\n    location: '',\n    title: 'Acme API',\n    webserver: 'nginx/1.24.0',\n    contentType: 'application/json',\n    statusCode: 200,\n    contentLength: 234,\n    responseBody: '{\"status\":\"ok\",\"version\":\"1.0\"}',\n    tech: ['Django', 'Python', 'PostgreSQL'],\n    vhost: false,\n    subdomain: 'api.acme.com',\n    createdAt: '2024-12-28T10:02:00Z',\n  },\n  {\n    id: 4,\n    target: 1,\n    url: 'https://admin.acme.com',\n    host: 'admin.acme.com',\n    location: '',\n    title: 'Admin Panel - Acme',\n    webserver: 'nginx/1.24.0',\n    contentType: 'text/html; charset=utf-8',\n    statusCode: 200,\n    contentLength: 23456,\n    responseBody: '<!DOCTYPE html>...',\n    tech: ['React', 'Ant Design'],\n    vhost: false,\n    subdomain: 'admin.acme.com',\n    createdAt: '2024-12-28T10:03:00Z',\n  },\n  {\n    id: 5,\n    target: 2,\n    url: 'https://acme.io',\n    host: 'acme.io',\n    location: '',\n    title: 'Acme Developer Platform',\n    webserver: 'cloudflare',\n    contentType: 'text/html; charset=utf-8',\n    statusCode: 200,\n    contentLength: 56789,\n    responseBody: '<!DOCTYPE html>...',\n    tech: ['Vue.js', 'Vitepress', 'CloudFlare'],\n    vhost: false,\n    subdomain: 'acme.io',\n    createdAt: '2024-12-27T14:30:00Z',\n  },\n  {\n    id: 6,\n    target: 2,\n    url: 'https://docs.acme.io',\n    host: 'docs.acme.io',\n    location: '',\n    title: 'Documentation - Acme.io',\n    webserver: 'cloudflare',\n    contentType: 'text/html; charset=utf-8',\n    statusCode: 200,\n    contentLength: 67890,\n    responseBody: '<!DOCTYPE html>...',\n    tech: ['Vue.js', 'Vitepress'],\n    vhost: false,\n    subdomain: 'docs.acme.io',\n    createdAt: '2024-12-27T14:31:00Z',\n  },\n  {\n    id: 7,\n    target: 3,\n    url: 'https://techstart.io',\n    host: 'techstart.io',\n    location: '',\n    title: 'TechStart - Innovation Hub',\n    webserver: 'Apache/2.4.54',\n    contentType: 'text/html; charset=utf-8',\n    statusCode: 200,\n    contentLength: 34567,\n    responseBody: '<!DOCTYPE html>...',\n    tech: ['WordPress', 'PHP', 'MySQL'],\n    vhost: false,\n    subdomain: 'techstart.io',\n    createdAt: '2024-12-26T08:45:00Z',\n  },\n  {\n    id: 8,\n    target: 4,\n    url: 'https://globalfinance.com',\n    host: 'globalfinance.com',\n    location: '',\n    title: 'Global Finance - Your Financial Partner',\n    webserver: 'Microsoft-IIS/10.0',\n    contentType: 'text/html; charset=utf-8',\n    statusCode: 200,\n    contentLength: 56789,\n    responseBody: '<!DOCTYPE html>...',\n    tech: ['ASP.NET', 'C#', 'jQuery', 'SQL Server'],\n    vhost: false,\n    subdomain: 'globalfinance.com',\n    createdAt: '2024-12-25T16:20:00Z',\n  },\n  {\n    id: 9,\n    target: 6,\n    url: 'https://healthcareplus.com',\n    host: 'healthcareplus.com',\n    location: '',\n    title: 'HealthCare Plus - Digital Health',\n    webserver: 'nginx/1.24.0',\n    contentType: 'text/html; charset=utf-8',\n    statusCode: 200,\n    contentLength: 45678,\n    responseBody: '<!DOCTYPE html>...',\n    tech: ['Angular', 'TypeScript', 'Node.js'],\n    vhost: false,\n    subdomain: 'healthcareplus.com',\n    createdAt: '2024-12-23T11:00:00Z',\n  },\n  {\n    id: 10,\n    target: 7,\n    url: 'https://edutech.io',\n    host: 'edutech.io',\n    location: '',\n    title: 'EduTech - Learn Anywhere',\n    webserver: 'cloudflare',\n    contentType: 'text/html; charset=utf-8',\n    statusCode: 200,\n    contentLength: 67890,\n    responseBody: '<!DOCTYPE html>...',\n    tech: ['Vue.js', 'Nuxt.js', 'PostgreSQL'],\n    vhost: false,\n    subdomain: 'edutech.io',\n    createdAt: '2024-12-22T13:30:00Z',\n  },\n  {\n    id: 11,\n    target: 8,\n    url: 'https://retailmax.com',\n    host: 'retailmax.com',\n    location: '',\n    title: 'RetailMax - Shop Everything',\n    webserver: 'nginx/1.22.0',\n    contentType: 'text/html; charset=utf-8',\n    statusCode: 200,\n    contentLength: 89012,\n    responseBody: '<!DOCTYPE html>...',\n    tech: ['React', 'Redux', 'Node.js', 'MongoDB'],\n    vhost: false,\n    subdomain: 'retailmax.com',\n    createdAt: '2024-12-21T10:45:00Z',\n  },\n  {\n    id: 12,\n    target: 10,\n    url: 'https://cloudnine.host',\n    host: 'cloudnine.host',\n    location: '',\n    title: 'CloudNine Hosting',\n    webserver: 'LiteSpeed',\n    contentType: 'text/html; charset=utf-8',\n    statusCode: 200,\n    contentLength: 34567,\n    responseBody: '<!DOCTYPE html>...',\n    tech: ['PHP', 'Laravel', 'MySQL'],\n    vhost: false,\n    subdomain: 'cloudnine.host',\n    createdAt: '2024-12-19T16:00:00Z',\n  },\n]\n\nexport function getMockWebsites(params?: {\n  page?: number\n  pageSize?: number\n  search?: string\n  targetId?: number\n}): WebSiteListResponse {\n  const page = params?.page || 1\n  const pageSize = params?.pageSize || 10\n  const search = params?.search?.toLowerCase() || ''\n  const targetId = params?.targetId\n\n  let filtered = mockWebsites\n\n  if (targetId) {\n    filtered = filtered.filter(w => w.target === targetId)\n  }\n\n  if (search) {\n    filtered = filtered.filter(\n      w =>\n        w.url.toLowerCase().includes(search) ||\n        w.title.toLowerCase().includes(search) ||\n        w.host.toLowerCase().includes(search)\n    )\n  }\n\n  const total = filtered.length\n  const totalPages = Math.ceil(total / pageSize)\n  const start = (page - 1) * pageSize\n  const results = filtered.slice(start, start + pageSize)\n\n  return {\n    results,\n    total,\n    page,\n    pageSize,\n    totalPages,\n  }\n}\n\nexport function getMockWebsiteById(id: number): WebSite | undefined {\n  return mockWebsites.find(w => w.id === id)\n}\n"
  },
  {
    "path": "frontend/mock/data/wordlists.ts",
    "content": "import type { Wordlist, GetWordlistsResponse } from '@/types/wordlist.types'\n\nexport const mockWordlists: Wordlist[] = [\n  {\n    id: 1,\n    name: 'common-dirs.txt',\n    description: '常用目录字典',\n    fileSize: 45678,\n    lineCount: 4567,\n    fileHash: 'a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6',\n    createdAt: '2024-12-20T10:00:00Z',\n    updatedAt: '2024-12-28T10:00:00Z',\n  },\n  {\n    id: 2,\n    name: 'subdomains-top1million.txt',\n    description: 'Top 100万子域名字典',\n    fileSize: 12345678,\n    lineCount: 1000000,\n    fileHash: 'b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7',\n    createdAt: '2024-12-20T10:01:00Z',\n    updatedAt: '2024-12-28T10:01:00Z',\n  },\n  {\n    id: 3,\n    name: 'api-endpoints.txt',\n    description: 'API 端点字典',\n    fileSize: 23456,\n    lineCount: 2345,\n    fileHash: 'c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8',\n    createdAt: '2024-12-20T10:02:00Z',\n    updatedAt: '2024-12-28T10:02:00Z',\n  },\n  {\n    id: 4,\n    name: 'params.txt',\n    description: '常用参数名字典',\n    fileSize: 8901,\n    lineCount: 890,\n    fileHash: 'd4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9',\n    createdAt: '2024-12-20T10:03:00Z',\n    updatedAt: '2024-12-28T10:03:00Z',\n  },\n  {\n    id: 5,\n    name: 'sensitive-files.txt',\n    description: '敏感文件字典',\n    fileSize: 5678,\n    lineCount: 567,\n    fileHash: 'e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0',\n    createdAt: '2024-12-20T10:04:00Z',\n    updatedAt: '2024-12-28T10:04:00Z',\n  },\n  {\n    id: 6,\n    name: 'raft-large-directories.txt',\n    description: 'RAFT 大型目录字典',\n    fileSize: 987654,\n    lineCount: 98765,\n    fileHash: 'f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1',\n    createdAt: '2024-12-20T10:05:00Z',\n    updatedAt: '2024-12-28T10:05:00Z',\n  },\n]\n\nexport const mockWordlistContent = `admin\napi\nbackup\nconfig\ndashboard\ndebug\ndev\ndocs\ndownload\nfiles\nimages\njs\nlogin\nlogs\nmanager\nprivate\npublic\nstatic\ntest\nupload\nusers\nv1\nv2\nwp-admin\nwp-content`\n\nexport function getMockWordlists(params?: {\n  page?: number\n  pageSize?: number\n}): GetWordlistsResponse {\n  const page = params?.page || 1\n  const pageSize = params?.pageSize || 10\n\n  const total = mockWordlists.length\n  const totalPages = Math.ceil(total / pageSize)\n  const start = (page - 1) * pageSize\n  const results = mockWordlists.slice(start, start + pageSize)\n\n  return {\n    results,\n    total,\n    page,\n    pageSize,\n    totalPages,\n  }\n}\n\nexport function getMockWordlistById(id: number): Wordlist | undefined {\n  return mockWordlists.find(w => w.id === id)\n}\n\nexport function getMockWordlistContent(): string {\n  return mockWordlistContent\n}\n"
  },
  {
    "path": "frontend/mock/data/workers.ts",
    "content": "import type { WorkerNode, WorkersResponse } from '@/types/worker.types'\n\nexport const mockWorkers: WorkerNode[] = [\n  {\n    id: 1,\n    name: 'local-worker',\n    ipAddress: '127.0.0.1',\n    sshPort: 22,\n    username: 'root',\n    status: 'online',\n    isLocal: true,\n    createdAt: '2024-01-01T00:00:00Z',\n    updatedAt: '2024-12-29T10:00:00Z',\n    info: {\n      cpuPercent: 23.5,\n      memoryPercent: 45.2,\n    },\n  },\n  {\n    id: 2,\n    name: 'worker-01',\n    ipAddress: '192.168.1.101',\n    sshPort: 22,\n    username: 'scanner',\n    status: 'online',\n    isLocal: false,\n    createdAt: '2024-06-15T08:00:00Z',\n    updatedAt: '2024-12-29T09:30:00Z',\n    info: {\n      cpuPercent: 56.8,\n      memoryPercent: 72.1,\n    },\n  },\n  {\n    id: 3,\n    name: 'worker-02',\n    ipAddress: '192.168.1.102',\n    sshPort: 22,\n    username: 'scanner',\n    status: 'online',\n    isLocal: false,\n    createdAt: '2024-07-20T10:00:00Z',\n    updatedAt: '2024-12-29T09:45:00Z',\n    info: {\n      cpuPercent: 34.2,\n      memoryPercent: 58.9,\n    },\n  },\n  {\n    id: 4,\n    name: 'worker-03',\n    ipAddress: '192.168.1.103',\n    sshPort: 22,\n    username: 'scanner',\n    status: 'offline',\n    isLocal: false,\n    createdAt: '2024-08-10T14:00:00Z',\n    updatedAt: '2024-12-28T16:00:00Z',\n  },\n]\n\nexport function getMockWorkers(page = 1, pageSize = 10): WorkersResponse {\n  const total = mockWorkers.length\n  const totalPages = Math.ceil(total / pageSize)\n  const start = (page - 1) * pageSize\n  const results = mockWorkers.slice(start, start + pageSize)\n\n  return {\n    results,\n    total,\n    page,\n    pageSize,\n  }\n}\n\nexport function getMockWorkerById(id: number): WorkerNode | undefined {\n  return mockWorkers.find(w => w.id === id)\n}\n"
  },
  {
    "path": "frontend/mock/index.ts",
    "content": "/**\n * Mock 数据统一导出\n * \n * 使用方式：\n * import { USE_MOCK, mockData } from '@/mock'\n * \n * if (USE_MOCK) {\n *   return mockData.dashboard.assetStatistics\n * }\n */\n\nexport { USE_MOCK, MOCK_DELAY, mockDelay } from './config'\n\n// Dashboard\nexport {\n  mockDashboardStats,\n  mockAssetStatistics,\n  mockStatisticsHistory7Days,\n  mockStatisticsHistory30Days,\n  getMockStatisticsHistory,\n} from './data/dashboard'\n\n// Organizations\nexport {\n  mockOrganizations,\n  getMockOrganizations,\n} from './data/organizations'\n\n// Targets\nexport {\n  mockTargets,\n  mockTargetDetails,\n  getMockTargets,\n  getMockTargetById,\n} from './data/targets'\n\n// Scans\nexport {\n  mockScans,\n  mockScanStatistics,\n  getMockScans,\n  getMockScanById,\n} from './data/scans'\n\n// Vulnerabilities\nexport {\n  mockVulnerabilities,\n  getMockVulnerabilities,\n  getMockVulnerabilityById,\n} from './data/vulnerabilities'\n\n// Endpoints\nexport {\n  mockEndpoints,\n  getMockEndpoints,\n  getMockEndpointById,\n} from './data/endpoints'\n\n// Websites\nexport {\n  mockWebsites,\n  getMockWebsites,\n  getMockWebsiteById,\n} from './data/websites'\n\n// Subdomains\nexport {\n  mockSubdomains,\n  getMockSubdomains,\n  getMockSubdomainById,\n} from './data/subdomains'\n\n// Auth\nexport {\n  mockUser,\n  mockMeResponse,\n  mockLoginResponse,\n  mockLogoutResponse,\n} from './data/auth'\n\n// Engines\nexport {\n  mockEngines,\n  getMockEngines,\n  getMockEngineById,\n} from './data/engines'\n\n// Workers\nexport {\n  mockWorkers,\n  getMockWorkers,\n  getMockWorkerById,\n} from './data/workers'\n\n// Notifications\nexport {\n  mockNotifications,\n  getMockNotifications,\n  getMockUnreadCount,\n} from './data/notifications'\n\n// Scheduled Scans\nexport {\n  mockScheduledScans,\n  getMockScheduledScans,\n  getMockScheduledScanById,\n} from './data/scheduled-scans'\n\n// Directories\nexport {\n  mockDirectories,\n  getMockDirectories,\n  getMockDirectoryById,\n} from './data/directories'\n\n// Fingerprints\nexport {\n  mockEholeFingerprints,\n  mockGobyFingerprints,\n  mockWappalyzerFingerprints,\n  mockFingersFingerprints,\n  mockFingerPrintHubFingerprints,\n  mockARLFingerprints,\n  mockFingerprintStats,\n  getMockEholeFingerprints,\n  getMockGobyFingerprints,\n  getMockWappalyzerFingerprints,\n  getMockFingersFingerprints,\n  getMockFingerPrintHubFingerprints,\n  getMockARLFingerprints,\n  getMockFingerprintStats,\n} from './data/fingerprints'\n\n// IP Addresses\nexport {\n  mockIPAddresses,\n  getMockIPAddresses,\n  getMockIPAddressByIP,\n} from './data/ip-addresses'\n\n// Search\nexport {\n  getMockSearchResults,\n} from './data/search'\n\n// Tools\nexport {\n  mockTools,\n  getMockTools,\n  getMockToolById,\n} from './data/tools'\n\n// Wordlists\nexport {\n  mockWordlists,\n  mockWordlistContent,\n  getMockWordlists,\n  getMockWordlistById,\n  getMockWordlistContent,\n} from './data/wordlists'\n\n// Nuclei Templates\nexport {\n  mockNucleiTemplateTree,\n  mockNucleiTemplateContent,\n  getMockNucleiTemplateTree,\n  getMockNucleiTemplateContent,\n} from './data/nuclei-templates'\n\n// System Logs\nexport {\n  mockLogFiles,\n  mockSystemLogContent,\n  mockErrorLogContent,\n  getMockLogFiles,\n  getMockSystemLogs,\n} from './data/system-logs'\n\n// Notification Settings\nexport {\n  mockNotificationSettings,\n  getMockNotificationSettings,\n  updateMockNotificationSettings,\n} from './data/notification-settings'\n\n// Blacklist\nexport {\n  getMockGlobalBlacklist,\n  updateMockGlobalBlacklist,\n  getMockTargetBlacklist,\n  updateMockTargetBlacklist,\n} from './data/blacklist'\n"
  },
  {
    "path": "frontend/next.config.ts",
    "content": "import type { NextConfig } from \"next\";\nimport createNextIntlPlugin from 'next-intl/plugin';\n\nconst withNextIntl = createNextIntlPlugin('./i18n/request.ts');\n\n// Check if running on Vercel\nconst isVercel = process.env.VERCEL === '1';\n\nconst nextConfig: NextConfig = {\n  // Use standalone mode for Docker deployment (not needed on Vercel)\n  ...(isVercel ? {} : { output: 'standalone' }),\n  // Disable Next.js automatic add/remove trailing slash behavior\n  // Let us manually control URL format\n  skipTrailingSlashRedirect: true,\n  // Don't interrupt production build due to ESLint errors (keep lint in dev environment)\n  eslint: {\n    ignoreDuringBuilds: true,\n  },\n  // Allow LAN IP access to dev server (eliminate CORS warnings)\n  allowedDevOrigins: ['192.168.*.*', '10.*.*.*', '172.16.*.*'],\n\n  async rewrites() {\n    // Skip rewrites on Vercel when using mock data\n    if (isVercel) {\n      return [];\n    }\n    // Use server service name in Docker environment, localhost for local development\n    const apiHost = process.env.API_HOST || 'localhost';\n    return [\n      // Only match API paths with trailing slash\n      {\n        source: '/api/:path*/',\n        destination: `http://${apiHost}:8888/api/:path*/`,\n      },\n    ];\n  },\n};\n\nexport default withNextIntl(nextConfig);\n"
  },
  {
    "path": "frontend/package.json",
    "content": "{\n  \"name\": \"xingrin\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"license\": \"MIT\",\n  \"scripts\": {\n    \"dev\": \"next dev --turbopack\",\n    \"dev:mock\": \"NEXT_PUBLIC_USE_MOCK=true next dev --turbopack\",\n    \"dev:noauth\": \"NEXT_PUBLIC_SKIP_AUTH=true next dev --turbopack\",\n    \"build\": \"next build --turbopack\",\n    \"start\": \"next start\",\n    \"lint\": \"eslint\"\n  },\n  \"dependencies\": {\n    \"@dnd-kit/core\": \"^6.3.1\",\n    \"@dnd-kit/modifiers\": \"^9.0.0\",\n    \"@dnd-kit/sortable\": \"^10.0.0\",\n    \"@dnd-kit/utilities\": \"^3.2.2\",\n    \"@fontsource/noto-sans-sc\": \"^5.2.8\",\n    \"@hookform/resolvers\": \"^5.2.2\",\n    \"@monaco-editor/react\": \"^4.7.0\",\n    \"@radix-ui/react-alert-dialog\": \"^1.1.15\",\n    \"@radix-ui/react-avatar\": \"^1.1.10\",\n    \"@radix-ui/react-checkbox\": \"^1.3.3\",\n    \"@radix-ui/react-collapsible\": \"^1.1.12\",\n    \"@radix-ui/react-dialog\": \"^1.1.15\",\n    \"@radix-ui/react-dropdown-menu\": \"^2.1.16\",\n    \"@radix-ui/react-hover-card\": \"^1.1.6\",\n    \"@radix-ui/react-icons\": \"^1.3.2\",\n    \"@radix-ui/react-label\": \"^2.1.7\",\n    \"@radix-ui/react-popover\": \"^1.1.15\",\n    \"@radix-ui/react-progress\": \"^1.1.7\",\n    \"@radix-ui/react-radio-group\": \"^1.3.8\",\n    \"@radix-ui/react-scroll-area\": \"^1.2.10\",\n    \"@radix-ui/react-select\": \"^2.2.6\",\n    \"@radix-ui/react-separator\": \"^1.1.7\",\n    \"@radix-ui/react-slot\": \"^1.2.3\",\n    \"@radix-ui/react-switch\": \"^1.2.6\",\n    \"@radix-ui/react-tabs\": \"^1.1.13\",\n    \"@radix-ui/react-toggle\": \"^1.1.10\",\n    \"@radix-ui/react-toggle-group\": \"^1.1.11\",\n    \"@radix-ui/react-tooltip\": \"^1.2.8\",\n    \"@radix-ui/react-use-controllable-state\": \"^1.2.2\",\n    \"@radix-ui/react-visually-hidden\": \"^1.2.3\",\n    \"@tabler/icons-react\": \"^3.35.0\",\n    \"@tanstack/react-query\": \"^5.90.2\",\n    \"@tanstack/react-table\": \"^8.21.3\",\n    \"@xterm/addon-fit\": \"^0.10.0\",\n    \"@xterm/addon-web-links\": \"^0.11.0\",\n    \"@xterm/xterm\": \"^5.5.0\",\n    \"ansi-to-html\": \"^0.7.2\",\n    \"axios\": \"^1.12.2\",\n    \"camelcase-keys\": \"^10.0.0\",\n    \"class-variance-authority\": \"^0.7.1\",\n    \"clsx\": \"^2.1.1\",\n    \"cmdk\": \"^1.1.1\",\n    \"cron-parser\": \"^5.4.0\",\n    \"cronstrue\": \"^3.9.0\",\n    \"date-fns\": \"^4.1.0\",\n    \"framer-motion\": \"^12.23.26\",\n    \"geist\": \"^1.5.1\",\n    \"is-ip\": \"^5.0.1\",\n    \"js-yaml\": \"^4.1.0\",\n    \"lottie-react\": \"^2.4.1\",\n    \"lucide-react\": \"^0.544.0\",\n    \"next\": \"^15.5.9\",\n    \"next-intl\": \"^4.6.1\",\n    \"next-themes\": \"^0.4.6\",\n    \"nextjs-toploader\": \"^3.9.17\",\n    \"psl\": \"^1.15.0\",\n    \"react\": \"19.1.2\",\n    \"react-day-picker\": \"^9.11.2\",\n    \"react-dom\": \"19.1.2\",\n    \"react-dropzone\": \"^14.3.8\",\n    \"react-hook-form\": \"^7.65.0\",\n    \"recharts\": \"2.15.4\",\n    \"snakecase-keys\": \"^9.0.2\",\n    \"sonner\": \"^2.0.7\",\n    \"tailwind-merge\": \"^3.3.1\",\n    \"tldts\": \"^6.1.86\",\n    \"validator\": \"^13.15.15\",\n    \"vaul\": \"^1.1.2\",\n    \"zod\": \"^4.1.12\"\n  },\n  \"devDependencies\": {\n    \"@eslint/eslintrc\": \"^3\",\n    \"@tailwindcss/postcss\": \"^4\",\n    \"@tanstack/react-query-devtools\": \"^5.90.2\",\n    \"@types/js-yaml\": \"^4.0.9\",\n    \"@types/node\": \"^20.19.19\",\n    \"@types/react\": \"^19\",\n    \"@types/react-dom\": \"^19\",\n    \"@types/validator\": \"^13.15.3\",\n    \"eslint\": \"^9\",\n    \"eslint-config-next\": \"15.5.7\",\n    \"msw\": \"^2.11.6\",\n    \"tailwindcss\": \"^4\",\n    \"tw-animate-css\": \"^1.4.0\",\n    \"typescript\": \"^5\"\n  },\n  \"msw\": {\n    \"workerDirectory\": [\n      \"public\"\n    ]\n  }\n}\n"
  },
  {
    "path": "frontend/postcss.config.mjs",
    "content": "const config = {\n  plugins: [\"@tailwindcss/postcss\"],\n};\n\nexport default config;\n"
  },
  {
    "path": "frontend/public/animations/Security000-Purple.json",
    "content": "{\"v\":\"5.7.7\",\"fr\":30,\"ip\":0,\"op\":91,\"w\":3710,\"h\":3710,\"nm\":\"Cloud Computing Security\",\"ddd\":0,\"assets\":[],\"layers\":[{\"ddd\":0,\"ind\":1,\"ty\":4,\"nm\":\"Arm R\",\"parent\":7,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[328.648,176.87,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[161.776,-9.236,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[-0.759,0.536],[-0.538,-0.76],[0,0],[-0.462,0.908],[-0.832,-0.427],[0.423,-0.829],[76.776,-32.874]],\"o\":[[0,0],[-0.538,-0.759],[0.756,-0.543],[0,0],[74.91,-32.841],[0.421,-0.825],[0.828,0.421],[-0.47,0.92],[0,0]],\"v\":[[-58.1,64.348],[-67.705,50.766],[-67.302,48.419],[-64.956,48.82],[-56.926,60.176],[64.822,-63.188],[67.086,-63.921],[67.82,-61.656],[-56.849,63.812]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0,0,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[135.083,156.696],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.498,0],[0.309,0.243],[-0.576,0.73],[-18.069,45.788],[-0.873,-0.358],[0.34,-0.864],[0.534,-0.674]],\"o\":[[-0.365,0],[-0.729,-0.575],[0.531,-0.673],[0.341,-0.865],[0.865,0.342],[-18.253,46.248],[-0.332,0.421]],\"v\":[[-35.824,58.802],[-36.867,58.44],[-37.144,56.076],[34.247,-57.497],[36.433,-58.444],[37.381,-56.261],[-34.501,58.161]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0,0,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[37.97,59.052],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 2\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":180,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":2,\"ty\":4,\"nm\":\"Arm L Line\",\"parent\":7,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[68.407,217.677,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[11.949,61.788,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0.003,0.926],[-0.199,0.68],[-0.896,-0.26],[0.261,-0.89],[-0.168,-50.776],[0.931,-0.003]],\"o\":[[-0.927,0],[-0.17,-51.272],[0.261,-0.888],[0.892,0.26],[-0.199,0.675],[0.003,0.93],[0,0]],\"v\":[[-9.858,61.442],[-11.541,59.766],[8.218,-60.041],[10.308,-61.182],[11.45,-59.095],[-8.174,59.753],[-9.853,61.442]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0,0,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[11.961,61.692],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":180,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":3,\"ty\":4,\"nm\":\"Laptop\",\"parent\":7,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[-223.819,363.13,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[245.616,162.77,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-5.759,0],[-0.187,0.011],[0,0],[0.303,6.004],[5.984,-0.404],[0,0],[-0.303,-6.005]],\"o\":[[0.186,0],[0,0],[6.004,-0.302],[-0.303,-6.006],[0,0],[-6.003,0.301],[0.295,5.816]],\"v\":[[-121.448,17.218],[-120.889,17.204],[121.989,4.928],[132.312,-6.492],[120.889,-16.815],[-121.989,-4.538],[-132.311,6.883]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.23921568627450981,0.21568627450980393,0.7568627450980392,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[355.694,307.307],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-6.4,-12.92],[-7.234,3.585],[6.401,12.92],[7.235,-3.585]],\"o\":[[6.401,12.921],[7.235,-3.584],[-6.401,-12.921],[-7.235,3.583]],\"v\":[[-13.1,6.489],[11.589,23.394],[13.099,-6.489],[-11.589,-23.394]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.23921568627450981,0.21568627450980393,0.7568627450980392,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[103.245,120.161],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 2\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[12.149,0.831],[0,0],[-3.906,-11.127],[0,0],[-9.275,-0.937],[0,0]],\"o\":[[0,0],[-3.497,-11.664],[0,0],[-11.766,-0.805],[0,0],[3.088,8.796],[0,0],[0,0]],\"v\":[[124.006,153.273],[38.272,-132.642],[12.263,-153.412],[-103.489,-161.333],[-120.1,-139.516],[-24.257,133.531],[-3.997,149.48],[109.989,162.137]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.23921568627450981,0.21568627450980393,0.7568627450980392,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[124.256,162.388],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 3\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":3,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":180,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":4,\"ty\":4,\"nm\":\"Head\",\"parent\":5,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":0,\"s\":[-5]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":45,\"s\":[10]},{\"t\":90,\"s\":[-5]}],\"ix\":10},\"p\":{\"a\":0,\"k\":[43.714,48.794,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[193.754,259.215,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-17.56,-15.287],[20.117,-6.413]],\"o\":[[0,0],[17.561,15.288],[0,0]],\"v\":[[-23.341,11.767],[5.78,-20.03],[-18.915,35.318]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.672988712086,0.661611998315,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[234.411,154.694],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0.401,2.671],[6.167,10.95],[32.401,-17.44],[28.652,15.254],[-73.827,-13.867],[0.21,2.85],[-28.66,9.083],[-6.05,-7.307],[-1.697,2.215],[-32.121,-14.156],[0.437,-10.154],[-2.992,1.377],[-12.485,-15.643],[7.399,-4.917],[0.009,-1.455],[24.587,-27.671],[1.241,2.955],[0,0],[2.162,-0.697]],\"o\":[[-2.571,0.829],[-1.22,-8.123],[0,0],[-32.4,17.438],[-27.934,-14.873],[2.809,0.528],[-0.908,-12.302],[26.821,-8.502],[1.78,2.151],[8.035,-10.49],[26.456,11.659],[-0.142,3.291],[8.102,-3.732],[17.259,21.625],[-1.212,0.806],[-0.07,11.247],[-2.129,2.396],[0,0],[-0.879,-2.094],[0,0]],\"v\":[[55.473,54.233],[49.809,50.743],[39.376,15.596],[10.201,21.492],[-99.516,49.294],[-81.92,-26.563],[-76.738,-31.123],[-47.765,-80.811],[-0.211,-69.898],[6.57,-70.006],[68.545,-88.665],[98.679,-50.556],[104.868,-46.413],[138.488,-36.441],[123.684,8.854],[121.709,12.45],[95.301,100.425],[87.996,99.164],[69.065,54.057],[63.688,51.586]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.23921568627450981,0.21568627450980393,0.7568627450980392,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[155.997,103.071],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 2\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-33.801,-27.059],[-22.243,66.335],[0,0]],\"o\":[[0,0],[33.8,27.059],[0,0],[0,0]],\"v\":[[-84.106,-42.045],[-37.792,73.005],[84.106,13.355],[39.787,-100.064]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.672988712086,0.661611998315,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[166.69,183.974],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 3\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":3,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":180,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":5,\"ty\":4,\"nm\":\"Neck\",\"parent\":7,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[209.141,90.844,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[53.835,111.217,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[3.351,-2.295],[43.932,16.219],[0.435,5.338],[0,0]],\"o\":[[0,0],[1.167,3.889],[-12.253,8.391],[-5.025,-1.855],[0,0],[0,0]],\"v\":[[27.352,-60.18],[52.802,24.703],[49.177,35.099],[-39.032,43.961],[-47.936,32.075],[-53.969,-41.871]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.672988712086,0.661611998315,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[54.218,60.43],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":180,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":6,\"ty\":4,\"nm\":\"Hand R\",\"parent\":1,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[46.053,161.17,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[443.962,45.25,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[32.906,26.019],[148.712,-20.133],[28.58,-12.509],[0,0],[0,0],[-90.219,109.483]],\"o\":[[0,0],[0,0],[-28.579,12.51],[0,0],[0,0],[-7.26,-38.311]],\"v\":[[168.95,-101.529],[-96.078,56.33],[-163.091,33.801],[-230.856,101.529],[-39.91,101.529],[230.856,-14.316]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.672988712086,0.661611998315,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[231.106,101.779],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":180,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":7,\"ty\":4,\"nm\":\"Body\",\"parent\":29,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[974.912,340.998,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[200.98,309.541,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[53.365,54.575],[-8.998,110.579],[19.144,11.357],[-3.134,6.491],[-6.376,1.591],[-100.101,-136.922],[194.9,-187.332]],\"o\":[[0,0],[0,0],[-6.199,-3.677],[14.075,-29.158],[34.656,-8.649],[42.96,58.763],[-62.714,10.209]],\"v\":[[-206.824,214.413],[-155.961,-9.968],[-205.733,-47.649],[-211.139,-65.595],[-105.572,-210.831],[171.314,-150.136],[-32.111,276.85]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.7490196078431373,0.12156862745098039,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[214.523,287.308],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":180,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":8,\"ty\":4,\"nm\":\"Hand L\",\"parent\":7,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[66.852,244.246,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[336.185,15.25,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[90.614,6.968],[180.388,-72.992],[0,0],[0,0],[0,0],[-68.166,138.854]],\"o\":[[0,0],[0,0],[0,0],[0,0],[0,0],[2.252,-4.588]],\"v\":[[102.949,-139.437],[-114.256,118.061],[-178.421,110.499],[-193.562,134.641],[-43.049,139.437],[153.773,-50.376]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.672988712086,0.661611998315,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[193.812,139.687],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":180,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":9,\"ty\":4,\"nm\":\"Leg R\",\"parent\":7,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[182.412,504.738,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[725.756,0.25,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[35.424,-246.39],[-35.303,-3.101],[-76.992,136.348],[0,0],[-52.336,80.538]],\"o\":[[0,0],[0,0],[0,0],[0,0],[94.404,-167.181],[89.852,19.83],[0,0]],\"v\":[[215.844,-216.45],[-126.146,-212.747],[-356.873,195.227],[-327.45,216.45],[-132.381,2.982],[149.05,-88.944],[362.753,-157.03]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0,0,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[363.003,216.7],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":180,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":10,\"ty\":4,\"nm\":\"Shooes R\",\"parent\":9,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[49.042,401.617,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[205.872,0.25,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-9.004,10.234],[-9.322,8.168],[-31.723,4.226],[-25.487,14.805],[61.347,1.698]],\"o\":[[6.033,-6.856],[-3.224,19.326],[32.629,-4.346],[-31.945,27.245],[-13.626,-0.377]],\"v\":[[-72.35,-0.251],[-49.295,-23.15],[-16.119,11.119],[81.355,-28.081],[-60.542,26.383]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.23921568627450981,0.21568627450980393,0.7568627450980392,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[81.604,88.936],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-3.224,19.326],[-70.393,8.628],[0,0],[27.733,-23.651],[32.628,-4.346]],\"o\":[[30.603,-26.815],[0,0],[0,0],[-25.487,14.805],[-31.723,4.225]],\"v\":[[-85.169,13.52],[64.588,-52.015],[88.393,-37.454],[45.481,8.589],[-51.992,47.79]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.23921568627450981,0.21568627450980393,0.7568627450980392,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[117.478,52.265],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 2\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":180,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":11,\"ty\":4,\"nm\":\"Leg L\",\"parent\":7,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[44.798,576.06,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[553.395,396.937,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[41.854,108.787],[0,0],[147.011,24.975],[-107.785,-244.076],[-18.089,11.553],[-2.36,5.806],[0,0],[-33.233,-32.271]],\"o\":[[0,0],[0,0],[0,0],[8.671,19.634],[5.41,-3.456],[0,0],[0,0],[33.233,32.271]],\"v\":[[252.335,70.993],[179.305,70.993],[-191.853,-201.531],[-186.403,173.174],[-135.393,189.978],[-123.738,176.085],[-132.405,-32.316],[92.025,167.179]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0,0,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[294.439,201.781],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":180,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":12,\"ty\":4,\"nm\":\"Shooes L\",\"parent\":11,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[138.183,375.875,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[150.157,19.634,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-15.575,22.49],[-47.84,17.664],[-17.702,12.71],[-0.229,-3.836],[108.4,-17.122],[-2.934,7.699]],\"o\":[[18.854,6.103],[46.284,-17.088],[0.395,3.445],[0,0],[-8.137,1.285],[5.264,-13.815]],\"v\":[[-70.536,-18.196],[4.449,-3.047],[102.844,-54.884],[103.799,-44.005],[-89.213,53.599],[-100.866,39.062]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.23921568627450981,0.21568627450980393,0.7568627450980392,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[104.05,117.285],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-77.566,38.613],[-4.244,-71.199],[108.399,-17.122],[-2.933,7.699]],\"o\":[[0,0],[0,0],[-8.139,1.285],[13.96,-36.633]],\"v\":[[59.542,-81.688],[98.393,-8.657],[-90.254,80.403],[-75.944,17.152]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.23921568627450981,0.21568627450980393,0.7568627450980392,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[109.457,81.937],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 2\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":180,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":13,\"ty\":4,\"nm\":\"Security\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[2457.188,2064.126,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[594.999,698.885,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[11.36,0],[0,0],[-2.653,11.048],[0,0],[-1.62,30.689],[-39.725,2.467],[0,-45.417],[23.133,-13.829]],\"o\":[[2.653,11.046],[0,0],[-11.362,0],[0,0],[-24.27,-14.509],[2.099,-39.745],[46.034,-2.86],[0,28.91],[0,0]],\"v\":[[61.135,105.571],[44.055,127.239],[-44.057,127.239],[-61.137,105.569],[-40.576,19.985],[-79.091,-52.331],[-5.059,-127.081],[79.201,-48.036],[40.573,19.985]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":1,\"ty\":\"sh\",\"ix\":2,\"ks\":{\"a\":0,\"k\":{\"i\":[[26.183,0],[0,0],[0,-26.183],[0,0],[-26.184,0],[0,0],[0,26.184],[0,0]],\"o\":[[0,0],[-26.184,0],[0,0],[0,26.184],[0,0],[26.183,0],[0,0],[0,-26.183]],\"v\":[[213.644,-211.374],[-213.645,-211.374],[-261.056,-163.965],[-261.056,163.963],[-213.645,211.375],[213.644,211.375],[261.054,163.963],[261.054,-163.965]],\"c\":true},\"ix\":2},\"nm\":\"Path 2\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"mm\",\"mm\":1,\"nm\":\"Merge Paths 1\",\"mn\":\"ADBE Vector Filter - Merge\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[595.385,765.304],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":4,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[12.552,0],[0,0],[0,12.552],[0,0],[30.926,0],[0,0],[0,-30.926],[0,0],[12.552,0],[0,0],[0,12.552],[0,0],[-69.989,0],[0,0],[0,-69.99],[0,0]],\"o\":[[0,0],[-12.552,0],[0,0],[0,-30.926],[0,0],[-30.927,0],[0,0],[0,12.552],[0,0],[-12.551,0],[0,0],[0,-69.99],[0,0],[69.99,0],[0,0],[0,12.552]],\"v\":[[182.316,117.926],[157.039,117.926],[134.312,95.199],[134.312,8.801],[78.315,-47.196],[-78.311,-47.196],[-134.308,8.801],[-134.308,95.199],[-157.035,117.926],[-182.312,117.926],[-205.038,95.199],[-205.038,8.801],[-78.311,-117.926],[78.315,-117.926],[205.043,8.801],[205.043,95.199]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[595.383,415.613],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 2\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-2.461,1.262],[0,0],[0,0],[-119.819,160.696],[28.283,322.694],[3.826,0.284],[161.56,107.203],[2.644,-2.373],[133.637,0],[0,0],[1.488,-1.517],[-0.04,-2.096],[0,0],[-64.907,-177.691],[-213.257,-136.323]],\"o\":[[0,0],[0,0],[55.505,-28.528],[160.519,-215.29],[-0.338,-3.834],[-122.739,-9.046],[-2.962,-1.965],[-147.168,131.873],[0,0],[-2.256,0],[-1.466,1.49],[0,0],[2.807,159.984],[72.602,198.749],[2.335,1.493]],\"v\":[[-9.529,619.339],[-8.286,621.759],[-9.529,619.339],[307.827,346.411],[507.111,-464.352],[499.926,-471.459],[-14.402,-618.888],[-23.921,-618.199],[-505.446,-427.299],[-505.449,-427.299],[-511.193,-424.947],[-513.406,-419.384],[-513.023,-397.997],[-442.123,121.001],[-17.308,618.956]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":1,\"ty\":\"sh\",\"ix\":2,\"ks\":{\"a\":0,\"k\":{\"i\":[[2.069,0],[2.173,1.387],[73.026,199.913],[2.82,160.406],[0,0],[-2.498,2.546],[-3.613,0],[0,0],[-146.1,130.913],[-5.032,-3.337],[-122.208,-9.006],[-0.572,-6.506],[161.342,-216.391],[55.842,-28.704]],\"o\":[[-2.498,0],[-214.297,-136.99],[-65.221,-178.547],[0,0],[-0.067,-3.568],[2.519,-2.563],[0,0],[132.713,0],[4.485,-4.02],[160.528,106.514],[6.501,0.481],[28.406,324.065],[-120.502,161.609],[-1.888,0.97]],\"v\":[[-13.073,625.63],[-20.241,623.542],[-447.234,122.866],[-518.465,-397.896],[-518.847,-419.283],[-515.074,-428.763],[-505.563,-432.74],[-505.558,-432.74],[-27.55,-622.253],[-11.394,-623.42],[500.325,-476.884],[512.53,-464.828],[312.19,349.662],[-7.043,624.18]],\"c\":true},\"ix\":2},\"nm\":\"Path 2\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"mm\",\"mm\":1,\"nm\":\"Merge Paths 1\",\"mn\":\"ADBE Vector Filter - Merge\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[595.381,702.828],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 3\",\"np\":4,\"cix\":2,\"bm\":0,\"ix\":3,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-8.301,7.774],[-11.33,-1.019],[-147.757,151.182],[-11.761,-8.789],[-94.558,-5.2],[-2.021,-19.487],[112.155,-53.124],[11.517,7.172],[7.73,335.497]],\"o\":[[8.3,-7.773],[121.174,10.897],[10.26,-10.499],[164.326,122.816],[19.56,1.076],[85.993,830.543],[-12.26,5.807],[-558.973,-348.175],[-0.262,-11.37]],\"v\":[[-596.251,-477.4],[-565.401,-488.019],[-70.391,-686.672],[-29.668,-682.448],[501.605,-528.999],[539.056,-493.263],[-27.866,691.364],[-66.077,689.156],[-608.87,-447.309]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.7490196078431373,0.12156862745098039,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[625.299,697.421],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 4\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":4,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":180,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":14,\"ty\":4,\"nm\":\"Security 4\",\"sr\":1,\"ks\":{\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.5],\"y\":[1]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":60,\"s\":[100]},{\"t\":90,\"s\":[0]}],\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[2457.188,2064.126,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[594.999,698.885,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0,0,0],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":60,\"s\":[100,100,100]},{\"t\":90,\"s\":[130,130,100]}],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-8.301,7.774],[-11.33,-1.019],[-147.757,151.182],[-11.761,-8.789],[-94.558,-5.2],[-2.021,-19.487],[112.155,-53.124],[11.517,7.172],[7.73,335.497]],\"o\":[[8.3,-7.773],[121.174,10.897],[10.26,-10.499],[164.326,122.816],[19.56,1.076],[85.993,830.543],[-12.26,5.807],[-558.973,-348.175],[-0.262,-11.37]],\"v\":[[29.048,220.021],[59.899,209.402],[554.909,10.749],[595.631,14.973],[1126.905,168.422],[1164.356,204.158],[597.433,1388.785],[559.223,1386.577],[16.43,250.112]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.7490196078431373,0.12156862745098039,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false}],\"ip\":60,\"op\":240,\"st\":60,\"bm\":0},{\"ddd\":0,\"ind\":15,\"ty\":4,\"nm\":\"Security 3\",\"sr\":1,\"ks\":{\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.5],\"y\":[1]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":30,\"s\":[100]},{\"t\":60,\"s\":[0]}],\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[2457.188,2064.126,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[594.999,698.885,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0,0,0],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":30,\"s\":[100,100,100]},{\"t\":60,\"s\":[130,130,100]}],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-8.301,7.774],[-11.33,-1.019],[-147.757,151.182],[-11.761,-8.789],[-94.558,-5.2],[-2.021,-19.487],[112.155,-53.124],[11.517,7.172],[7.73,335.497]],\"o\":[[8.3,-7.773],[121.174,10.897],[10.26,-10.499],[164.326,122.816],[19.56,1.076],[85.993,830.543],[-12.26,5.807],[-558.973,-348.175],[-0.262,-11.37]],\"v\":[[29.048,220.021],[59.899,209.402],[554.909,10.749],[595.631,14.973],[1126.905,168.422],[1164.356,204.158],[597.433,1388.785],[559.223,1386.577],[16.43,250.112]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.7490196078431373,0.12156862745098039,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false}],\"ip\":30,\"op\":210,\"st\":30,\"bm\":0},{\"ddd\":0,\"ind\":16,\"ty\":4,\"nm\":\"Security 2\",\"sr\":1,\"ks\":{\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.5],\"y\":[1]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":0,\"s\":[100]},{\"t\":30,\"s\":[0]}],\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[2457.188,2064.126,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[594.999,698.885,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0,0,0],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":0,\"s\":[100,100,100]},{\"t\":30,\"s\":[130,130,100]}],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-8.301,7.774],[-11.33,-1.019],[-147.757,151.182],[-11.761,-8.789],[-94.558,-5.2],[-2.021,-19.487],[112.155,-53.124],[11.517,7.172],[7.73,335.497]],\"o\":[[8.3,-7.773],[121.174,10.897],[10.26,-10.499],[164.326,122.816],[19.56,1.076],[85.993,830.543],[-12.26,5.807],[-558.973,-348.175],[-0.262,-11.37]],\"v\":[[29.048,220.021],[59.899,209.402],[554.909,10.749],[595.631,14.973],[1126.905,168.422],[1164.356,204.158],[597.433,1388.785],[559.223,1386.577],[16.43,250.112]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.7490196078431373,0.12156862745098039,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false}],\"ip\":0,\"op\":180,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":17,\"ty\":4,\"nm\":\"Setting\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":0,\"s\":[0]},{\"t\":90,\"s\":[-360]}],\"ix\":10},\"p\":{\"a\":0,\"k\":[2549.826,1119.711,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[231.589,234.578,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[24.477,0],[2.728,0.214],[17.863,20.883],[-0.004,23.671],[-23.754,20.317],[-36.874,-43.112],[-0.285,-0.338],[-3.048,-5.395],[-0.01,-0.02],[-0.043,-0.079],[-0.079,-0.138],[-0.042,-0.075],[-0.132,-0.243],[0,0],[4.304,5.036],[32.978,-8.111],[11.352,-9.709],[0.003,-26.196],[-14.929,-17.454],[-38.877,33.259],[-5.31,15.863],[0,0],[14.173,-12.122]],\"o\":[[-2.709,0],[-27.397,-2.134],[-16.556,-19.352],[0,-29.047],[43.106,-36.882],[0.29,0.335],[3.998,4.801],[0.012,0.023],[0.046,0.082],[0.079,0.141],[0.043,0.078],[0.136,0.243],[0,0],[-3.12,-5.773],[-23.55,-27.525],[-13.602,3.347],[-21.42,18.326],[0,21.347],[33.256,38.871],[12.779,-10.931],[0,0],[-5.892,17.596],[-18.799,16.083]],\"v\":[[2.813,102.865],[-5.347,102.546],[-75.533,66.852],[-100.187,0.046],[-64.23,-78.201],[80.823,-66.898],[81.684,-65.883],[92.288,-50.539],[92.324,-50.476],[92.459,-50.236],[92.695,-49.815],[92.823,-49.582],[93.221,-48.849],[84.337,-44.049],[73.15,-60.336],[-19.671,-90.07],[-57.667,-70.528],[-90.094,0.039],[-67.86,60.289],[62.958,70.481],[90.607,29.523],[100.188,32.732],[69.52,78.155]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[225.761,236.073],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[6.181,0],[6.027,-8.512],[-13.931,-9.856],[-8.127,1.397],[-4.774,6.746],[1.393,8.147],[6.746,4.774]],\"o\":[[-9.712,0],[-9.856,13.933],[6.749,4.777],[8.15,-1.394],[4.777,-6.749],[-1.395,-8.151],[-5.418,-3.837]],\"v\":[[0.032,-30.941],[-25.274,-17.882],[-17.889,25.262],[5.21,30.506],[25.252,17.881],[30.496,-5.221],[17.871,-25.263]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":1,\"ty\":\"sh\",\"ix\":2,\"ks\":{\"a\":0,\"k\":{\"i\":[[2.327,0],[7.01,4.961],[-13.072,18.476],[-10.806,1.848],[-8.945,-6.332],[-1.848,-10.806],[6.336,-8.949],[10.806,-1.848]],\"o\":[[-8.42,0],[-18.476,-13.075],[6.335,-8.953],[10.81,-1.851],[8.953,6.336],[1.851,10.81],[-6.335,8.952],[-2.341,0.401]],\"v\":[[-0.096,41.059],[-23.722,33.508],[-33.519,-23.714],[-6.935,-40.462],[23.703,-33.509],[40.451,-6.928],[33.497,23.714],[6.917,40.461]],\"c\":true},\"ix\":2},\"nm\":\"Path 2\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"mm\",\"mm\":1,\"nm\":\"Merge Paths 1\",\"mn\":\"ADBE Vector Filter - Merge\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[229.278,236.047],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 2\",\"np\":4,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[1.087,0.472],[0,0],[7.466,14.426],[0,0],[0.77,0.901],[0,0],[1.101,-0.434],[0,0],[15.044,4.782],[0,0],[1.182,0.092],[0,0],[0.471,-1.087],[0,0],[14.426,-7.466],[0,0],[0.9,-0.77],[0,0],[-0.435,-1.103],[0,0],[4.782,-15.044],[0,0],[0.093,-1.18],[0,0],[-1.088,-0.472],[0,0],[-7.466,-14.427],[0,0],[-0.77,-0.901],[0,0],[-1.102,0.435],[0,0],[-15.043,-4.782],[0,0],[-1.181,-0.093],[0,0],[-0.473,1.086],[0,0],[-14.427,7.466],[0,0],[-0.9,0.771],[0,0],[0.433,1.102],[0,0],[-4.783,15.043],[0,0],[-0.093,1.183]],\"o\":[[0.092,-1.181],[0,0],[-2.395,-15.603],[0,0],[0.6,-1.022],[0,0],[-0.772,-0.9],[0,0],[-13.097,-9.61],[0,0],[-0.298,-1.146],[0,0],[-1.181,-0.093],[0,0],[-15.603,2.395],[0,0],[-1.022,-0.601],[0,0],[-0.9,0.769],[0,0],[-9.61,13.097],[0,0],[-1.145,0.299],[0,0],[-0.091,1.181],[0,0],[2.394,15.602],[0,0],[-0.6,1.022],[0,0],[0.77,0.9],[0,0],[13.097,9.611],[0,0],[0.298,1.147],[0,0],[1.181,0.091],[0,0],[15.602,-2.395],[0,0],[1.02,0.599],[0,0],[0.902,-0.771],[0,0],[9.61,-13.097],[0,0],[1.147,-0.298],[0,0]],\"v\":[[179.051,-6.382],[177.389,-9.145],[146.387,-22.612],[131.626,-67.973],[148.734,-97.099],[148.45,-100.312],[122.096,-131.12],[118.966,-131.899],[87.542,-119.509],[45.014,-141.117],[36.511,-173.832],[34.038,-175.9],[-6.382,-179.05],[-9.144,-177.387],[-22.612,-146.386],[-67.974,-131.625],[-97.1,-148.733],[-100.311,-148.449],[-131.121,-122.094],[-131.9,-118.964],[-119.509,-87.542],[-141.118,-45.012],[-173.832,-36.51],[-175.901,-34.039],[-179.051,6.383],[-177.387,9.146],[-146.386,22.613],[-131.626,67.975],[-148.734,97.101],[-148.451,100.312],[-122.095,131.123],[-118.966,131.899],[-87.542,119.51],[-45.014,141.118],[-36.511,173.832],[-34.039,175.903],[6.382,179.052],[9.146,177.389],[22.612,146.388],[67.974,131.626],[97.1,148.736],[100.312,148.45],[131.12,122.096],[131.9,118.968],[119.508,87.542],[141.118,45.015],[173.83,36.511],[175.901,34.039]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.23921568627450981,0.21568627450980393,0.7568627450980392,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[229.268,236.046],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 3\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":3,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.171,0],[0.259,1.66],[0.927,4.303],[-1.817,0.391],[-0.392,-1.815],[-0.701,-4.474],[1.838,-0.286]],\"o\":[[-1.631,0],[-0.678,-4.349],[-0.392,-1.818],[1.849,-0.391],[0.953,4.428],[0.285,1.838],[-0.176,0.026]],\"v\":[[1.26,10.139],[-2.064,7.292],[-4.484,-5.747],[-1.904,-9.748],[2.098,-7.167],[4.59,6.253],[1.781,10.1]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.23921568627450981,0.21568627450980393,0.7568627450980392,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[457.995,192.225],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 4\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":4,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.174,0],[0.259,1.656],[-1.838,0.289],[-9.012,0.381],[-0.075,-1.861],[1.857,-0.079],[8.615,-1.362]],\"o\":[[-1.627,0],[-0.293,-1.838],[8.866,-1.404],[1.861,-0.039],[0.079,1.858],[-8.755,0.368],[-0.177,0.029]],\"v\":[[-62.934,-64.322],[-66.254,-67.162],[-63.457,-71.012],[-36.511,-73.702],[-33.006,-70.48],[-36.229,-66.975],[-62.406,-64.364]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":1,\"ty\":\"sh\",\"ix\":2,\"ks\":{\"a\":0,\"k\":{\"i\":[[1.489,0],[0.289,0.076],[8.654,1.258],[-0.27,1.838],[-1.851,-0.315],[-8.697,-2.308],[0.477,-1.798]],\"o\":[[-0.286,0],[-8.443,-2.242],[-1.841,-0.267],[0.266,-1.845],[8.909,1.296],[1.794,0.476],[-0.401,1.506]],\"v\":[[33.057,-59.397],[32.188,-59.509],[6.423,-64.785],[3.575,-68.599],[7.39,-71.447],[33.918,-66.018],[36.308,-61.899]],\"c\":true},\"ix\":2},\"nm\":\"Path 2\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":2,\"ty\":\"sh\",\"ix\":3,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.502,0],[0.588,1.184],[-1.664,0.828],[-8.49,3.058],[-0.631,-1.749],[1.749,-0.628],[7.808,-3.883]],\"o\":[[-1.24,0],[-0.829,-1.666],[8.045,-3.998],[1.758,-0.624],[0.631,1.749],[-8.245,2.969],[-0.484,0.24]],\"v\":[[-129.458,-43.1],[-132.475,-44.968],[-130.959,-49.481],[-106.045,-60.111],[-101.74,-58.082],[-103.764,-53.775],[-127.961,-43.452]],\"c\":true},\"ix\":2},\"nm\":\"Path 3\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":3,\"ty\":\"sh\",\"ix\":4,\"ks\":{\"a\":0,\"k\":{\"i\":[[1.118,0],[0.558,0.352],[7.87,3.78],[-0.806,1.676],[-1.687,-0.815],[-7.608,-4.806],[0.994,-1.571]],\"o\":[[-0.614,0],[-7.391,-4.671],[-1.677,-0.806],[0.801,-1.677],[8.104,3.893],[1.571,0.996],[-0.64,1.013]],\"v\":[[97.031,-31.471],[95.237,-31.991],[72.24,-44.727],[70.662,-49.218],[75.152,-50.797],[98.833,-37.685],[99.882,-33.04]],\"c\":true},\"ix\":2},\"nm\":\"Path 4\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":4,\"ty\":\"sh\",\"ix\":5,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.834,0],[0.661,0.694],[-1.343,1.282],[-1.394,1.276],[-5.662,4.298],[-1.124,-1.486],[1.483,-1.124],[5.109,-4.662],[1.325,-1.266]],\"o\":[[-0.888,0],[-1.282,-1.348],[1.366,-1.298],[5.26,-4.8],[1.48,-1.127],[1.128,1.479],[-5.497,4.179],[-1.358,1.243],[-0.655,0.621]],\"v\":[[-186.581,-2.921],[-189.017,-3.963],[-188.906,-8.724],[-184.77,-12.587],[-168.312,-26.297],[-163.597,-25.652],[-164.241,-20.938],[-180.229,-7.616],[-184.256,-3.851]],\"c\":true},\"ix\":2},\"nm\":\"Path 5\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":5,\"ty\":\"sh\",\"ix\":6,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.773,0],[0.667,0.783],[1.802,1.976],[4.446,4.155],[-1.269,1.358],[-1.361,-1.272],[-4.226,-4.632],[-1.768,-2.077],[1.414,-1.207]],\"o\":[[-0.949,0],[-1.716,-2.018],[-4.109,-4.501],[-1.357,-1.273],[1.272,-1.361],[4.57,4.278],[1.853,2.029],[1.204,1.417],[-0.634,0.539]],\"v\":[[149.74,14.346],[147.176,13.162],[141.898,7.172],[129.01,-5.873],[128.854,-10.634],[133.614,-10.792],[146.871,2.635],[152.303,8.796],[151.923,13.544]],\"c\":true},\"ix\":2},\"nm\":\"Path 6\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":6,\"ty\":\"sh\",\"ix\":7,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.442,0],[0.546,1.282],[4.334,7.599],[-1.615,0.92],[-0.924,-1.614],[-3.518,-8.282],[1.713,-0.727]],\"o\":[[-1.307,0],[-3.413,-8.042],[-0.92,-1.614],[1.614,-0.921],[4.458,7.825],[0.726,1.709],[-0.428,0.181]],\"v\":[[186.473,73.741],[183.374,71.69],[171.702,48.12],[172.962,43.528],[177.553,44.787],[189.573,69.06],[187.789,73.475]],\"c\":true},\"ix\":2},\"nm\":\"Path 7\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"mm\",\"mm\":1,\"nm\":\"Merge Paths 1\",\"mn\":\"ADBE Vector Filter - Merge\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.23921568627450981,0.21568627450980393,0.7568627450980392,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[257.198,73.991],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 5\",\"np\":9,\"cix\":2,\"bm\":0,\"ix\":5,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[1.118,0],[0.559,0.353],[-0.992,1.575],[-2.633,3.686],[-1.51,-1.079],[1.082,-1.513],[2.35,-3.732]],\"o\":[[-0.614,0],[-1.572,-0.989],[2.417,-3.839],[1.082,-1.509],[1.515,1.081],[-2.558,3.58],[-0.638,1.015]],\"v\":[[-3.747,9.181],[-5.538,8.661],[-6.591,4.019],[1.024,-7.32],[5.719,-8.102],[6.501,-3.407],[-0.896,7.61]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.23921568627450981,0.21568627450980393,0.7568627450980392,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[38.461,105.809],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 6\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":6,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.286,0],[0.4,1.509],[0.904,4.442],[-1.826,0.372],[-0.365,-1.824],[-1.127,-4.254],[1.798,-0.476]],\"o\":[[-1.489,0],[-1.161,-4.376],[-0.372,-1.822],[1.821,-0.371],[0.881,4.314],[0.477,1.795],[-0.29,0.076]],\"v\":[[1.499,10.068],[-1.752,7.564],[-4.862,-5.728],[-2.235,-9.697],[1.732,-7.07],[4.757,5.841],[2.364,9.957]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.23921568627450981,0.21568627450980393,0.7568627450980392,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[5.484,287.625],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 7\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":7,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.621,0],[0.641,1.007],[3.998,8.239],[-1.674,0.812],[-0.812,-1.67],[-4.79,-7.48],[1.568,-1.003]],\"o\":[[-1.107,0],[-4.934,-7.699],[-0.812,-1.674],[1.679,-0.809],[3.883,7.999],[1.003,1.565],[-0.562,0.361]],\"v\":[[-177.388,-37.602],[-180.225,-39.153],[-193.685,-63.169],[-192.126,-67.667],[-187.629,-66.108],[-174.557,-42.782],[-175.576,-38.134]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":1,\"ty\":\"sh\",\"ix\":2,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.799,0],[0.664,0.743],[-1.388,1.237],[0,0],[-5.309,5.967],[-1.39,-1.242],[1.237,-1.387],[6.096,-5.56],[0,0]],\"o\":[[-0.924,0],[-1.239,-1.387],[0,0],[5.921,-5.402],[1.233,-1.397],[1.391,1.237],[-5.461,6.145],[0,0],[-0.644,0.572]],\"v\":[[171.568,10.561],[169.056,9.436],[169.326,4.682],[171.305,2.896],[188.23,-14.235],[192.981,-14.515],[193.26,-9.764],[175.841,7.875],[173.81,9.706]],\"c\":true},\"ix\":2},\"nm\":\"Path 2\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":2,\"ty\":\"sh\",\"ix\":3,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.965,0],[0.628,0.525],[6.309,6.654],[-1.348,1.279],[-1.275,-1.347],[-6.8,-5.678],[1.194,-1.427]],\"o\":[[-0.76,0],[-7,-5.843],[-1.28,-1.351],[1.351,-1.276],[6.132,6.471],[1.426,1.19],[-0.664,0.799]],\"v\":[[-130.452,15.636],[-132.606,14.854],[-152.664,-3.981],[-152.539,-8.741],[-147.779,-8.617],[-128.292,9.686],[-127.866,14.427]],\"c\":true},\"ix\":2},\"nm\":\"Path 3\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":3,\"ty\":\"sh\",\"ix\":4,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.457,0],[0.558,1.249],[-1.696,0.759],[-7.627,4.553],[-0.957,-1.598],[1.597,-0.954],[8.357,-3.735]],\"o\":[[-1.289,0],[-0.76,-1.7],[8.117,-3.626],[1.588,-0.957],[0.953,1.598],[-7.855,4.691],[-0.447,0.2]],\"v\":[[111.992,49.148],[108.915,47.156],[110.614,42.708],[134.344,30.379],[138.961,31.542],[137.797,36.158],[113.363,48.855]],\"c\":true},\"ix\":2},\"nm\":\"Path 4\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":4,\"ty\":\"sh\",\"ix\":5,\"ks\":{\"a\":0,\"k\":{\"i\":[[1.328,0],[0.417,0.168],[8.022,4.419],[-0.897,1.628],[-1.633,-0.891],[-8.219,-3.34],[0.7,-1.723]],\"o\":[[-0.424,0],[-8.463,-3.439],[-1.628,-0.898],[0.898,-1.627],[7.792,4.29],[1.719,0.7],[-0.532,1.306]],\"v\":[[-69.627,52.17],[-70.896,51.923],[-95.738,40.081],[-97.063,35.507],[-92.49,34.183],[-68.358,45.683],[-66.507,50.072]],\"c\":true},\"ix\":2},\"nm\":\"Path 5\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":5,\"ty\":\"sh\",\"ix\":6,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.125,0],[0.194,1.719],[-1.848,0.207],[-8.627,2.006],[-0.421,-1.815],[1.811,-0.42],[9.12,-1.023]],\"o\":[[-1.692,0],[-0.208,-1.848],[8.86,-0.993],[1.795,-0.44],[0.421,1.812],[-8.884,2.068],[-0.128,0.012]],\"v\":[[43.489,67.762],[40.146,64.771],[43.118,61.05],[69.472,56.531],[73.512,59.047],[70.998,63.088],[43.867,67.744]],\"c\":true},\"ix\":2},\"nm\":\"Path 6\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":6,\"ty\":\"sh\",\"ix\":7,\"ks\":{\"a\":0,\"k\":{\"i\":[[1.738,0],[0.089,0.006],[8.959,1.769],[-0.358,1.822],[-1.815,-0.361],[-8.87,-0.697],[0.146,-1.851]],\"o\":[[-0.089,0],[-9.13,-0.72],[-1.825,-0.361],[0.364,-1.824],[8.709,1.723],[1.855,0.148],[-0.137,1.766]],\"v\":[[-0.542,68.477],[-0.809,68.467],[-28.074,64.715],[-30.727,60.76],[-26.772,58.106],[-0.284,61.752],[2.81,65.373]],\"c\":true},\"ix\":2},\"nm\":\"Path 7\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"mm\",\"mm\":1,\"nm\":\"Merge Paths 1\",\"mn\":\"ADBE Vector Filter - Merge\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.23921568627450981,0.21568627450980393,0.7568627450980392,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[213.007,400.392],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 8\",\"np\":9,\"cix\":2,\"bm\":0,\"ix\":8,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[1.15,0],[0.539,0.319],[-0.946,1.601],[-2.002,3.879],[-1.66,-0.848],[0.851,-1.654],[2.331,-3.933]],\"o\":[[-0.582,0],[-1.601,-0.947],[2.263,-3.82],[0.852,-1.65],[1.651,0.852],[-2.062,3.995],[-0.628,1.062]],\"v\":[[-3.264,9.49],[-4.978,9.02],[-6.158,4.407],[0.27,-7.195],[4.806,-8.642],[6.253,-4.105],[-0.365,7.84]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.23921568627450981,0.21568627450980393,0.7568627450980392,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[433.012,346.702],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 9\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":9,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":180,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":18,\"ty\":4,\"nm\":\"Setting\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":0,\"s\":[0]},{\"t\":90,\"s\":[360]}],\"ix\":10},\"p\":{\"a\":0,\"k\":[1976.14,908.807,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[447.134,454.057,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[46.518,0],[5.185,0.404],[33.943,39.682],[0,46.518],[-0.405,5.188],[-39.686,33.945],[-52.063,-4.057],[-33.942,-39.682],[-6.573,-12.168],[0,0],[8.601,10.05],[49.371,3.847],[37.635,-32.186],[3.849,-49.371],[0,-4.882],[-28.984,-33.882],[-49.372,-3.847],[-37.628,32.189],[-10.61,31.697],[0,0],[26.932,-23.037]],\"o\":[[-5.146,0],[-52.065,-4.054],[-30.565,-35.728],[0,-5.148],[4.057,-52.06],[39.676,-33.943],[52.065,4.054],[9.065,10.593],[0,0],[-6.234,-11.54],[-32.189,-37.635],[-49.371,-3.814],[-37.63,32.193],[-0.382,4.918],[0,44.114],[32.19,37.632],[49.407,3.85],[25.542,-21.85],[0,0],[-11.191,33.43],[-35.728,30.563]],\"v\":[[5.391,195.51],[-10.107,194.905],[-143.48,127.08],[-190.434,0.316],[-189.829,-15.189],[-122.001,-148.56],[20.264,-194.907],[153.636,-127.082],[177.203,-92.778],[168.319,-87.978],[145.962,-120.516],[19.482,-184.84],[-115.439,-140.887],[-179.762,-14.403],[-180.335,0.3],[-135.806,120.517],[-9.325,184.838],[125.595,140.885],[180.855,59.034],[190.435,62.243],[132.158,148.558]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[435.86,456.42],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[13.338,0],[3.709,-0.635],[10.034,-14.179],[-29.271,-20.712],[-17.133,2.923],[-10.034,14.179],[2.929,17.122],[14.179,10.034]],\"o\":[[-3.686,0],[-17.122,2.929],[-20.716,29.271],[14.18,10.037],[17.122,-2.929],[10.037,-14.181],[-2.933,-17.122],[-11.11,-7.861]],\"v\":[[0.115,-65.049],[-10.994,-64.099],[-53.106,-37.568],[-37.591,53.084],[10.952,64.101],[53.06,37.57],[64.081,-10.97],[37.546,-53.082]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":1,\"ty\":\"sh\",\"ix\":2,\"ks\":{\"a\":0,\"k\":{\"i\":[[4.258,0],[12.832,9.081],[-23.93,33.817],[-19.782,3.386],[-16.379,-11.589],[-3.383,-19.779],[11.593,-16.379],[19.782,-3.386]],\"o\":[[-15.409,0.004],[-33.817,-23.93],[11.593,-16.382],[19.782,-3.377],[16.383,11.596],[3.387,19.782],[-11.591,16.382],[-4.283,0.733]],\"v\":[[-0.181,75.151],[-43.424,61.329],[-61.352,-43.4],[-12.697,-74.054],[43.378,-61.328],[74.032,-12.676],[61.305,43.402],[12.654,74.056]],\"c\":true},\"ix\":2},\"nm\":\"Path 2\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"mm\",\"mm\":1,\"nm\":\"Merge Paths 1\",\"mn\":\"ADBE Vector Filter - Merge\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[442.639,456.41],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 2\",\"np\":4,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[2.115,0.919],[0,0],[14.534,28.085],[0,0],[1.499,1.753],[0,0],[2.144,-0.845],[0,0],[29.287,9.31],[0,0],[2.298,0.179],[0,0],[0.918,-2.115],[0,0],[28.085,-14.534],[0,0],[1.754,-1.499],[0,0],[-0.846,-2.146],[0,0],[9.309,-29.285],[0,0],[0.179,-2.299],[0,0],[-2.116,-0.919],[0,0],[-14.534,-28.086],[0,0],[-1.499,-1.752],[0,0],[-2.145,0.846],[0,0],[-29.286,-9.309],[0,0],[-2.3,-0.179],[0,0],[-0.92,2.117],[0,0],[-28.085,14.535],[0,0],[-1.752,1.499],[0,0],[0.845,2.146],[0,0],[-9.311,29.284],[0,0],[-0.18,2.3]],\"o\":[[0.179,-2.299],[0,0],[-4.662,-30.373],[0,0],[1.169,-1.989],[0,0],[-1.5,-1.753],[0,0],[-25.497,-18.708],[0,0],[-0.58,-2.232],[0,0],[-2.301,-0.179],[0,0],[-30.374,4.662],[0,0],[-1.989,-1.169],[0,0],[-1.752,1.499],[0,0],[-18.71,25.496],[0,0],[-2.231,0.581],[0,0],[-0.18,2.299],[0,0],[4.662,30.373],[0,0],[-1.167,1.988],[0,0],[1.499,1.753],[0,0],[25.495,18.71],[0,0],[0.579,2.233],[0,0],[2.299,0.178],[0,0],[30.373,-4.663],[0,0],[1.987,1.168],[0,0],[1.753,-1.499],[0,0],[18.709,-25.496],[0,0],[2.232,-0.58],[0,0]],\"v\":[[348.565,-12.424],[345.329,-17.802],[284.976,-44.021],[256.242,-132.327],[289.545,-189.028],[288.993,-195.281],[237.687,-255.256],[231.597,-256.772],[170.421,-232.653],[87.629,-274.719],[71.076,-338.403],[66.265,-342.432],[-12.423,-348.563],[-17.802,-345.328],[-44.02,-284.977],[-132.326,-256.24],[-189.027,-289.545],[-195.28,-288.992],[-255.257,-237.686],[-256.772,-231.594],[-232.651,-170.419],[-274.717,-87.63],[-338.403,-71.076],[-342.433,-66.264],[-348.564,12.425],[-345.328,17.803],[-284.976,44.021],[-256.241,132.329],[-289.547,189.03],[-288.993,195.281],[-237.686,255.259],[-231.595,256.772],[-170.42,232.652],[-87.628,274.719],[-71.076,338.403],[-66.263,342.433],[12.425,348.564],[17.804,345.328],[44.021,284.978],[132.328,256.24],[189.029,289.547],[195.28,288.993],[255.256,237.687],[256.774,231.596],[232.652,170.422],[274.718,87.631],[338.403,71.076],[342.433,66.265]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.23921568627450981,0.21568627450980393,0.7568627450980392,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[442.617,456.41],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 3\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":3,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.171,0],[0.26,1.66],[0.822,4.382],[-1.828,0.342],[-0.342,-1.825],[-0.697,-4.461],[1.838,-0.285]],\"o\":[[-1.631,0],[-0.685,-4.396],[-0.339,-1.828],[1.819,-0.316],[0.829,4.448],[0.285,1.838],[-0.176,0.027]],\"v\":[[1.151,10.129],[-2.172,7.282],[-4.428,-5.885],[-1.736,-9.813],[2.193,-7.121],[4.482,6.243],[1.673,10.09]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.23921568627450981,0.21568627450980393,0.7568627450980392,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[889.192,377.526],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 4\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":4,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.079,0],[0.123,1.772],[-1.855,0.128],[-9.294,0.079],[0,0],[-0.017,-1.848],[1.857,-0.016],[9.104,-0.637]],\"o\":[[-1.752,0],[-0.13,-1.857],[9.245,-0.651],[0,0],[1.848,0],[0.016,1.86],[-9.16,0.079],[-0.082,0.007]],\"v\":[[-74.354,-157.223],[-77.708,-160.353],[-74.587,-163.946],[-46.649,-165.044],[-46.619,-165.044],[-43.252,-161.707],[-46.59,-158.311],[-74.114,-157.233]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":1,\"ty\":\"sh\",\"ix\":2,\"ks\":{\"a\":0,\"k\":{\"i\":[[1.634,0],[0.172,0.026],[9.108,0.829],[-0.167,1.851],[-1.89,-0.174],[-9.173,-1.407],[0.283,-1.837]],\"o\":[[-0.168,0],[-9.041,-1.387],[-1.85,-0.168],[0.171,-1.851],[9.242,0.842],[1.838,0.283],[-0.253,1.667]],\"v\":[[25.987,-153.094],[25.472,-153.133],[-1.874,-156.47],[-4.921,-160.129],[-1.262,-163.177],[26.492,-159.787],[29.31,-155.951]],\"c\":true},\"ix\":2},\"nm\":\"Path 2\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":2,\"ty\":\"sh\",\"ix\":3,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.257,0],[0.364,1.548],[-1.808,0.428],[-9.13,1.562],[-0.312,-1.832],[1.831,-0.313],[8.92,-2.104]],\"o\":[[-1.525,0],[-0.424,-1.808],[9.054,-2.133],[1.874,-0.296],[0.316,1.834],[-8.995,1.538],[-0.26,0.059]],\"v\":[[-146.325,-146.301],[-149.6,-148.895],[-147.095,-152.946],[-119.689,-158.515],[-115.803,-155.766],[-118.55,-151.88],[-145.549,-146.39]],\"c\":true},\"ix\":2},\"nm\":\"Path 3\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":3,\"ty\":\"sh\",\"ix\":4,\"ks\":{\"a\":0,\"k\":{\"i\":[[1.421,0],[0.345,0.112],[8.856,2.282],[-0.463,1.798],[-1.773,-0.461],[-8.82,-2.86],[0.571,-1.768]],\"o\":[[-0.341,0],[-8.689,-2.818],[-1.802,-0.463],[0.464,-1.802],[8.991,2.317],[1.77,0.572],[-0.461,1.424]],\"v\":[[96.795,-136.3],[95.757,-136.464],[69.311,-144.148],[66.888,-148.247],[70.988,-150.67],[97.835,-142.869],[100,-138.628]],\"c\":true},\"ix\":2},\"nm\":\"Path 4\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":4,\"ty\":\"sh\",\"ix\":5,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.43,0],[0.539,1.296],[-1.716,0.717],[-8.798,3.032],[-0.605,-1.759],[1.756,-0.605],[8.426,-3.505]],\"o\":[[-1.319,0],[-0.713,-1.715],[8.551,-3.554],[1.765,-0.601],[0.605,1.759],[-8.666,2.988],[-0.421,0.174]],\"v\":[[-215.586,-123.912],[-218.697,-125.987],[-216.879,-130.389],[-190.731,-140.318],[-186.451,-138.233],[-188.536,-133.952],[-214.294,-124.168]],\"c\":true},\"ix\":2},\"nm\":\"Path 5\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":5,\"ty\":\"sh\",\"ix\":6,\"ks\":{\"a\":0,\"k\":{\"i\":[[1.22,0],[0.494,0.256],[8.374,3.682],[-0.75,1.704],[-1.706,-0.756],[-8.238,-4.251],[0.852,-1.651]],\"o\":[[-0.519,0],[-8.117,-4.185],[-1.703,-0.747],[0.743,-1.703],[8.499,3.735],[1.655,0.852],[-0.598,1.16]],\"v\":[[163.963,-108.306],[162.424,-108.68],[137.574,-120.535],[135.847,-124.971],[140.283,-126.697],[165.508,-114.664],[166.959,-110.13]],\"c\":true},\"ix\":2},\"nm\":\"Path 6\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":6,\"ty\":\"sh\",\"ix\":7,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.609,0],[0.638,1.026],[-1.578,0.983],[-8.177,4.416],[-0.881,-1.63],[1.634,-0.884],[7.759,-4.829]],\"o\":[[-1.124,0],[-0.983,-1.578],[7.874,-4.901],[1.643,-0.891],[0.884,1.638],[-8.058,4.349],[-0.552,0.345]],\"v\":[[-280.312,-90.578],[-283.172,-92.166],[-282.093,-96.802],[-257.902,-110.847],[-253.34,-109.486],[-254.7,-104.922],[-278.536,-91.088]],\"c\":true},\"ix\":2},\"nm\":\"Path 7\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":7,\"ty\":\"sh\",\"ix\":8,\"ks\":{\"a\":0,\"k\":{\"i\":[[1.029,0],[0.605,0.447],[7.656,4.985],[-1.016,1.558],[-1.569,-1.016],[-7.45,-5.537],[1.108,-1.493]],\"o\":[[-0.698,0],[-7.338,-5.455],[-1.559,-1.012],[1.012,-1.556],[7.769,5.059],[1.493,1.108],[-0.661,0.888]],\"v\":[[225.708,-69.803],[223.701,-70.467],[201.106,-86.196],[200.122,-90.854],[204.781,-91.837],[227.719,-75.872],[228.412,-71.161]],\"c\":true},\"ix\":2},\"nm\":\"Path 8\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":8,\"ty\":\"sh\",\"ix\":9,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.785,0],[0.665,0.759],[-1.4,1.222],[-7.338,5.665],[-1.135,-1.467],[1.47,-1.137],[6.901,-6.03]],\"o\":[[-0.938,0],[-1.222,-1.4],[7.007,-6.119],[1.483,-1.131],[1.134,1.473],[-7.233,5.579],[-0.638,0.559]],\"v\":[[-338.812,-47.223],[-341.348,-48.374],[-341.029,-53.124],[-319.413,-70.882],[-314.687,-70.273],[-315.296,-65.549],[-336.597,-48.055]],\"c\":true},\"ix\":2},\"nm\":\"Path 9\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":9,\"ty\":\"sh\",\"ix\":10,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.844,0],[0.66,0.681],[6.776,6.178],[-1.253,1.374],[-1.371,-1.256],[-6.437,-6.638],[1.335,-1.295]],\"o\":[[-0.878,0],[-6.343,-6.539],[-1.374,-1.252],[1.252,-1.381],[6.878,6.273],[1.295,1.335],[-0.654,0.635]],\"v\":[[280.414,-21.832],[277.998,-22.855],[258.229,-42.019],[258.008,-46.776],[262.765,-46.996],[282.83,-27.543],[282.757,-22.783]],\"c\":true},\"ix\":2},\"nm\":\"Path 10\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":10,\"ty\":\"sh\",\"ix\":11,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.97,0],[0.628,0.523],[-1.187,1.431],[-6.371,6.79],[-1.361,-1.272],[1.272,-1.355],[5.82,-7.01]],\"o\":[[-0.756,0],[-1.43,-1.186],[5.908,-7.114],[1.273,-1.357],[1.354,1.276],[-6.283,6.69],[-0.667,0.802]],\"v\":[[-389.644,4.88],[-391.791,4.104],[-392.231,-0.637],[-373.725,-21.593],[-368.964,-21.744],[-368.814,-16.983],[-387.05,3.664]],\"c\":true},\"ix\":2},\"nm\":\"Path 11\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":11,\"ty\":\"sh\",\"ix\":12,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.668,0],[0.655,0.937],[5.701,7.164],[-1.453,1.157],[-1.158,-1.453],[-5.316,-7.595],[1.525,-1.068]],\"o\":[[-1.061,0],[-5.237,-7.479],[-1.157,-1.456],[1.46,-1.164],[5.786,7.276],[1.064,1.522],[-0.585,0.411]],\"v\":[[326.809,34.262],[324.047,32.825],[307.564,10.755],[308.099,6.024],[312.831,6.56],[329.565,28.966],[328.736,33.654]],\"c\":true},\"ix\":2},\"nm\":\"Path 12\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":12,\"ty\":\"sh\",\"ix\":13,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.49,0],[0.579,1.203],[4.458,7.963],[-1.624,0.911],[-0.908,-1.621],[-4.03,-8.384],[1.674,-0.806]],\"o\":[[-1.256,0],[-3.972,-8.259],[-0.907,-1.621],[1.624,-0.901],[4.521,8.081],[0.806,1.677],[-0.47,0.227]],\"v\":[[363.576,97.09],[360.538,95.183],[347.837,70.736],[349.133,66.153],[353.716,67.448],[366.607,92.264],[365.033,96.758]],\"c\":true},\"ix\":2},\"nm\":\"Path 13\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":13,\"ty\":\"sh\",\"ix\":14,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.312,0],[0.431,1.469],[3.109,8.6],[-1.749,0.634],[-0.632,-1.749],[-2.613,-8.91],[1.785,-0.523]],\"o\":[[-1.457,0],[-2.571,-8.775],[-0.632,-1.747],[1.742,-0.639],[3.159,8.726],[0.523,1.785],[-0.317,0.092]],\"v\":[[389.664,165.044],[386.432,162.624],[377.868,136.441],[379.889,132.131],[384.201,134.152],[392.896,160.73],[390.611,164.909]],\"c\":true},\"ix\":2},\"nm\":\"Path 14\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"mm\",\"mm\":1,\"nm\":\"Merge Paths 1\",\"mn\":\"ADBE Vector Filter - Merge\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.23921568627450981,0.21568627450980393,0.7568627450980392,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[487.88,165.294],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 5\",\"np\":16,\"cix\":2,\"bm\":0,\"ix\":5,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[1.118,0],[0.559,0.353],[-0.993,1.572],[-2.525,3.758],[-1.542,-1.042],[1.036,-1.542],[2.37,-3.762]],\"o\":[[-0.615,0],[-1.571,-0.989],[2.404,-3.813],[1.035,-1.542],[1.545,1.039],[-2.492,3.706],[-0.639,1.015]],\"v\":[[-3.669,9.241],[-5.461,8.722],[-6.513,4.08],[0.881,-7.282],[5.553,-8.199],[6.47,-3.528],[-0.818,7.671]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.23921568627450981,0.21568627450980393,0.7568627450980392,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[67.549,208.315],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 6\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":6,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.256,0],[0.364,1.552],[0.901,4.425],[-1.821,0.369],[-0.368,-1.828],[-1.019,-4.34],[1.809,-0.424]],\"o\":[[-1.529,0],[-1.033,-4.406],[-0.371,-1.822],[1.819,-0.368],[0.888,4.36],[0.424,1.812],[-0.259,0.06]],\"v\":[[1.422,10.09],[-1.852,7.493],[-4.756,-5.753],[-2.129,-9.722],[1.839,-7.095],[4.703,5.954],[2.194,10.001]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.23921568627450981,0.21568627450980393,0.7568627450980392,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[5.377,550.784],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 7\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":7,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.424,0],[0.533,1.309],[2.824,8.337],[-1.762,0.595],[-0.598,-1.762],[-3.285,-8.085],[1.722,-0.7]],\"o\":[[-1.329,0],[-3.331,-8.203],[-0.595,-1.759],[1.746,-0.595],[2.782,8.209],[0.7,1.722],[-0.414,0.168]],\"v\":[[-389.817,-124.474],[-392.937,-126.574],[-402.212,-151.501],[-400.101,-155.77],[-395.834,-153.658],[-386.697,-129.105],[-388.551,-124.72]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":1,\"ty\":\"sh\",\"ix\":2,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.589,0],[0.631,1.052],[4.074,7.795],[-1.65,0.862],[-0.862,-1.65],[-4.494,-7.487],[1.594,-0.957]],\"o\":[[-1.144,0],[-4.563,-7.598],[-0.858,-1.647],[1.644,-0.857],[4.011,7.677],[0.957,1.595],[-0.543,0.326]],\"v\":[[-358.867,-62.533],[-361.757,-64.167],[-374.773,-87.365],[-373.346,-91.909],[-368.802,-90.482],[-355.984,-67.633],[-357.137,-63.013]],\"c\":true},\"ix\":2},\"nm\":\"Path 2\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":2,\"ty\":\"sh\",\"ix\":3,\"ks\":{\"a\":0,\"k\":{\"i\":[[1.003,0],[0.615,0.48],[-1.141,1.467],[-4.912,7.137],[-1.526,-1.052],[1.053,-1.528],[5.444,-6.989]],\"o\":[[-0.724,0],[-1.466,-1.141],[5.362,-6.888],[1.059,-1.532],[1.531,1.055],[-4.988,7.25],[-0.664,0.851]],\"v\":[[383.376,-17.693],[381.311,-18.403],[380.723,-23.127],[396.205,-44.263],[400.887,-45.132],[401.754,-40.45],[386.036,-18.991]],\"c\":true},\"ix\":2},\"nm\":\"Path 3\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":3,\"ty\":\"sh\",\"ix\":4,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.76,0],[0.667,0.799],[5.254,7.108],[-1.493,1.108],[-1.105,-1.49],[-5.559,-6.674],[1.431,-1.19]],\"o\":[[-0.966,0],[-5.642,-6.773],[-1.105,-1.496],[1.506,-1.105],[5.175,7.006],[1.19,1.427],[-0.628,0.523]],\"v\":[[-318.754,-6.094],[-321.344,-7.306],[-337.763,-28.227],[-337.056,-32.938],[-332.345,-32.23],[-316.17,-11.614],[-316.604,-6.873]],\"c\":true},\"ix\":2},\"nm\":\"Path 4\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":4,\"ty\":\"sh\",\"ix\":5,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.829,0],[0.664,0.7],[-1.352,1.276],[-5.961,6.316],[-1.352,-1.269],[1.277,-1.351],[6.427,-6.066]],\"o\":[[-0.893,0],[-1.275,-1.355],[6.335,-5.977],[1.279,-1.348],[1.351,1.279],[-6.052,6.407],[-0.652,0.611]],\"v\":[[336.779,33.507],[334.33,32.451],[334.469,27.69],[353.001,9.167],[357.762,9.03],[357.899,13.791],[339.091,32.59]],\"c\":true},\"ix\":2},\"nm\":\"Path 5\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":5,\"ty\":\"sh\",\"ix\":6,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.931,0],[0.641,0.565],[6.276,6.244],[-1.312,1.318],[-1.318,-1.313],[-6.493,-5.747],[1.233,-1.394]],\"o\":[[-0.795,0],[-6.589,-5.833],[-1.318,-1.312],[1.312,-1.315],[6.185,6.147],[1.391,1.233],[-0.668,0.75]],\"v\":[[-270.543,43.613],[-272.775,42.769],[-292.166,24.571],[-292.179,19.811],[-287.419,19.797],[-268.311,37.724],[-268.021,42.479]],\"c\":true},\"ix\":2},\"nm\":\"Path 6\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":6,\"ty\":\"sh\",\"ix\":7,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.657,0],[0.655,0.947],[-1.529,1.056],[-6.862,5.352],[-1.144,-1.467],[1.466,-1.144],[7.269,-5.017]],\"o\":[[-1.069,0],[-1.054,-1.532],[7.164,-4.941],[1.465,-1.141],[1.141,1.466],[-6.967,5.427],[-0.586,0.401]],\"v\":[[282.921,77.082],[280.145,75.628],[281.004,70.944],[302.141,55.432],[306.868,56.018],[306.283,60.745],[284.831,76.487]],\"c\":true},\"ix\":2},\"nm\":\"Path 7\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":7,\"ty\":\"sh\",\"ix\":8,\"ks\":{\"a\":0,\"k\":{\"i\":[[1.108,0],[0.562,0.361],[7.13,5.188],[-1.095,1.506],[-1.502,-1.091],[-7.325,-4.698],[1.003,-1.565]],\"o\":[[-0.621,0],[-7.433,-4.767],[-1.503,-1.094],[1.098,-1.503],[7.019,5.112],[1.565,1.002],[-0.644,1.003]],\"v\":[[-215.349,85.356],[-217.164,84.824],[-239.112,69.819],[-239.852,65.115],[-235.148,64.375],[-213.528,79.156],[-212.512,83.809]],\"c\":true},\"ix\":2},\"nm\":\"Path 8\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":8,\"ty\":\"sh\",\"ix\":9,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.49,0],[0.582,1.206],[-1.677,0.809],[-7.607,4.238],[-0.907,-1.624],[1.624,-0.904],[7.953,-3.83]],\"o\":[[-1.253,0],[-0.806,-1.674],[7.831,-3.771],[1.634,-0.901],[0.905,1.624],[-7.723,4.3],[-0.47,0.227]],\"v\":[[223.052,111.882],[220.014,109.976],[221.589,105.48],[244.855,93.411],[249.435,94.717],[248.13,99.296],[224.508,111.55]],\"c\":true},\"ix\":2},\"nm\":\"Path 9\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":9,\"ty\":\"sh\",\"ix\":10,\"ks\":{\"a\":0,\"k\":{\"i\":[[1.295,0],[0.441,0.194],[7.835,4.021],[-0.849,1.654],[-1.66,-0.849],[-7.973,-3.515],[0.749,-1.7]],\"o\":[[-0.454,0],[-8.094,-3.567],[-1.654,-0.848],[0.851,-1.647],[7.716,3.961],[1.703,0.749],[-0.556,1.259]],\"v\":[[-154.369,118.093],[-155.724,117.806],[-179.727,106.368],[-181.183,101.834],[-176.65,100.378],[-153.008,111.646],[-151.285,116.083]],\"c\":true},\"ix\":2},\"nm\":\"Path 10\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":10,\"ty\":\"sh\",\"ix\":11,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.322,0],[0.441,1.454],[-1.779,0.539],[-8.146,3.001],[-0.643,-1.746],[1.746,-0.645],[8.465,-2.565]],\"o\":[[-1.446,0],[-0.54,-1.778],[8.34,-2.529],[1.739,-0.641],[0.642,1.746],[-8.268,3.047],[-0.327,0.098]],\"v\":[[158.534,137.023],[155.312,134.633],[157.558,130.435],[182.402,122.101],[186.725,124.095],[184.73,128.419],[159.511,136.878]],\"c\":true},\"ix\":2},\"nm\":\"Path 11\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":11,\"ty\":\"sh\",\"ix\":12,\"ks\":{\"a\":0,\"k\":{\"i\":[[1.485,0],[0.289,0.079],[8.377,2.771],[-0.585,1.766],[-1.778,-0.579],[-8.403,-2.246],[0.48,-1.795]],\"o\":[[-0.289,0],[-8.532,-2.279],[-1.766,-0.582],[0.582,-1.762],[8.252,2.728],[1.799,0.48],[-0.401,1.506]],\"v\":[[-89.049,141.051],[-89.92,140.936],[-115.4,133.324],[-117.537,129.07],[-113.283,126.934],[-88.185,134.432],[-85.801,138.552]],\"c\":true},\"ix\":2},\"nm\":\"Path 12\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":12,\"ty\":\"sh\",\"ix\":13,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.154,0],[0.237,1.679],[-1.842,0.259],[-8.522,1.716],[-0.368,-1.821],[1.822,-0.368],[8.746,-1.233]],\"o\":[[-1.654,0],[-0.26,-1.842],[8.616,-1.213],[1.805,-0.366],[0.364,1.822],[-8.65,1.743],[-0.161,0.023]],\"v\":[[90.913,151.932],[87.582,149.036],[90.446,145.232],[116.274,140.817],[120.239,143.453],[117.602,147.418],[91.386,151.899]],\"c\":true},\"ix\":2},\"nm\":\"Path 13\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":13,\"ty\":\"sh\",\"ix\":14,\"ks\":{\"a\":0,\"k\":{\"i\":[[1.696,0],[0.122,0.014],[8.686,1.456],[-0.306,1.831],[-1.824,-0.318],[-8.663,-0.937],[0.201,-1.848]],\"o\":[[-0.122,0],[-8.794,-0.953],[-1.834,-0.31],[0.306,-1.835],[8.562,1.437],[1.848,0.2],[-0.187,1.726]],\"v\":[[-20.99,153.738],[-21.356,153.718],[-47.7,150.088],[-50.465,146.212],[-46.589,143.447],[-20.632,147.024],[-17.647,150.732]],\"c\":true},\"ix\":2},\"nm\":\"Path 14\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":14,\"ty\":\"sh\",\"ix\":15,\"ks\":{\"a\":0,\"k\":{\"i\":[[6.848,0],[1.989,0.027],[-0.022,1.861],[-1.838,0],[0,0],[-8.693,0.394],[-0.082,-1.86],[1.858,-0.085]],\"o\":[[-1.989,0],[-1.857,-0.026],[0.027,-1.841],[0,0],[8.709,0.119],[1.732,-0.119],[0.085,1.858],[-6.839,0.309]],\"v\":[[27.733,156.365],[21.769,156.324],[18.448,152.912],[21.815,149.592],[21.861,149.592],[48.058,149.171],[51.572,152.383],[48.36,155.897]],\"c\":true},\"ix\":2},\"nm\":\"Path 15\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"mm\",\"mm\":1,\"nm\":\"Merge Paths 1\",\"mn\":\"ADBE Vector Filter - Merge\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.23921568627450981,0.21568627450980393,0.7568627450980392,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[417.68,751.499],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 8\",\"np\":17,\"cix\":2,\"bm\":0,\"ix\":8,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[1.184,0],[0.517,0.289],[-0.904,1.624],[-2.039,3.952],[-1.66,-0.848],[0.851,-1.653],[2.2,-3.959]],\"o\":[[-0.552,0],[-1.627,-0.904],[2.167,-3.899],[0.852,-1.65],[1.651,0.852],[-2.072,4.012],[-0.615,1.107]],\"v\":[[-3.179,9.536],[-4.811,9.112],[-6.119,4.536],[0.188,-7.241],[4.723,-8.688],[6.171,-4.151],[-0.234,7.804]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.23921568627450981,0.21568627450980393,0.7568627450980392,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[842.422,666.525],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 9\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":9,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":180,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":19,\"ty\":4,\"nm\":\"Lock\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[1896.529,2431.411,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[86.599,112.545,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[3.757,0],[0,0],[-0.878,3.654],[0,0],[-0.536,10.15],[-13.139,0.816],[0,-15.022],[7.652,-4.574]],\"o\":[[0.878,3.653],[0,0],[-3.758,0],[0,0],[-8.028,-4.799],[0.694,-13.148],[15.227,-0.946],[0,9.563],[0,0]],\"v\":[[20.222,34.92],[14.573,42.088],[-14.573,42.088],[-20.222,34.919],[-13.422,6.61],[-26.161,-17.308],[-1.673,-42.035],[26.198,-15.89],[13.421,6.61]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ind\":1,\"ty\":\"sh\",\"ix\":2,\"ks\":{\"a\":0,\"k\":{\"i\":[[8.661,0],[0,0],[0,-8.66],[0,0],[-8.661,0],[0,0],[0,8.661],[0,0]],\"o\":[[0,0],[-8.661,0],[0,0],[0,8.661],[0,0],[8.661,0],[0,0],[0,-8.66]],\"v\":[[70.667,-69.917],[-70.667,-69.917],[-86.349,-54.234],[-86.349,54.234],[-70.667,69.917],[70.667,69.917],[86.349,54.234],[86.349,-54.234]],\"c\":true},\"ix\":2},\"nm\":\"Path 2\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"mm\",\"mm\":1,\"nm\":\"Merge Paths 1\",\"mn\":\"ADBE Vector Filter - Merge\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[86.599,154.925],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":4,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[4.151,0],[0,0],[0,4.152],[0,0],[10.23,0],[0,0],[0,-10.229],[0,0],[4.152,0],[0,0],[0,4.152],[0,0],[-23.151,0],[0,0],[0,-23.151],[0,0]],\"o\":[[0,0],[-4.152,0],[0,0],[0,-10.229],[0,0],[-10.23,0],[0,0],[0,4.152],[0,0],[-4.151,0],[0,0],[0,-23.151],[0,0],[23.151,0],[0,0],[0,4.152]],\"v\":[[60.304,39.006],[51.943,39.006],[44.425,31.49],[44.425,2.911],[25.903,-15.61],[-25.904,-15.61],[-44.426,2.911],[-44.426,31.49],[-51.944,39.006],[-60.305,39.006],[-67.822,31.49],[-67.822,2.911],[-25.904,-39.006],[25.903,-39.006],[67.822,2.911],[67.822,31.49]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[86.6,39.257],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 2\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":180,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":20,\"ty\":4,\"nm\":\"loading Line 3\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[1667.146,2764.849,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[-0.004,24.662,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":-60,\"s\":[100,100,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":-15,\"s\":[0,100,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":30,\"s\":[100,100,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":75,\"s\":[0,100,100]},{\"t\":120,\"s\":[100,100,100]}],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[2.946,0],[0,0],[0,2.946],[0,0],[-2.946,0],[0,0],[0,-2.946],[0,0]],\"o\":[[0,0],[-2.946,0],[0,0],[0,-2.946],[0,0],[2.946,0],[0,0],[0,2.946]],\"v\":[[157.29,24.661],[-157.295,24.661],[-162.628,19.327],[-162.628,-19.328],[-157.295,-24.661],[157.29,-24.661],[162.624,-19.328],[162.624,19.327]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[162.624,24.662],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":180,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":21,\"ty\":4,\"nm\":\"loading Line 2\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[1667.146,2684.435,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[-0.004,24.665,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":-75,\"s\":[100,100,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":-30,\"s\":[0,100,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":15,\"s\":[100,100,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":60,\"s\":[0,100,100]},{\"t\":105,\"s\":[100,100,100]}],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[2.946,0],[0,0],[0,2.945],[0,0],[-2.945,0],[0,0],[0,-2.946],[0,0]],\"o\":[[0,0],[-2.945,0],[0,0],[0,-2.946],[0,0],[2.946,0],[0,0],[0,2.945]],\"v\":[[269.114,24.661],[-269.12,24.661],[-274.453,19.328],[-274.453,-19.328],[-269.12,-24.661],[269.114,-24.661],[274.448,-19.328],[274.448,19.328]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[274.448,24.665],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":180,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":22,\"ty\":4,\"nm\":\"loading Line 1\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[1665.449,2605.613,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[-0.001,24.663,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":-90,\"s\":[100,100,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":-45,\"s\":[0,100,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":0,\"s\":[100,100,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":45,\"s\":[0,100,100]},{\"t\":90,\"s\":[100,100,100]}],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[2.945,0],[0,0],[0,2.945],[0,0],[-2.946,0],[0,0],[0,-2.946],[0,0]],\"o\":[[0,0],[-2.946,0],[0,0],[0,-2.946],[0,0],[2.945,0],[0,0],[0,2.945]],\"v\":[[269.117,24.663],[-269.117,24.663],[-274.451,19.33],[-274.451,-19.326],[-269.117,-24.659],[269.117,-24.659],[274.45,-19.326],[274.45,19.33]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[274.45,24.661],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":180,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":23,\"ty\":4,\"nm\":\"Doc Line 4\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[1022.39,2843.612,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[0,24.661,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[2.945,0],[0,0],[0,2.945],[0,0],[-2.945,0],[0,0],[0,-2.946],[0,0]],\"o\":[[0,0],[-2.945,0],[0,0],[0,-2.946],[0,0],[2.945,0],[0,0],[0,2.945]],\"v\":[[185.561,24.661],[-185.562,24.661],[-190.895,19.328],[-190.895,-19.328],[-185.562,-24.661],[185.561,-24.661],[190.894,-19.328],[190.894,19.328]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[190.894,24.661],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":180,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":24,\"ty\":4,\"nm\":\"Doc Line 3\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[1021.638,2764.849,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[-0.002,24.662,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[2.945,0],[0,0],[0,2.946],[0,0],[-2.945,0],[0,0],[0,-2.946],[0,0]],\"o\":[[0,0],[-2.945,0],[0,0],[0,-2.946],[0,0],[2.945,0],[0,0],[0,2.946]],\"v\":[[185.561,24.661],[-185.562,24.661],[-190.896,19.327],[-190.896,-19.328],[-185.562,-24.661],[185.561,-24.661],[190.894,-19.328],[190.894,19.327]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[190.894,24.662],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":180,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":25,\"ty\":4,\"nm\":\"Doc Line 2\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[1019.402,2684.435,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[0.002,24.665,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[2.946,0],[0,0],[0,2.945],[0,0],[-2.945,0],[0,0],[0,-2.946],[0,0]],\"o\":[[0,0],[-2.945,0],[0,0],[0,-2.946],[0,0],[2.946,0],[0,0],[0,2.945]],\"v\":[[185.562,24.661],[-185.561,24.661],[-190.894,19.328],[-190.894,-19.328],[-185.561,-24.661],[185.562,-24.661],[190.895,-19.328],[190.895,19.328]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[190.896,24.665],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":180,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":26,\"ty\":4,\"nm\":\"Doc Line 1\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[1018.651,2605.671,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[0.001,24.661,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[2.946,0],[0,0],[0,2.945],[0,0],[-2.945,0],[0,0],[0,-2.946],[0,0]],\"o\":[[0,0],[-2.945,0],[0,0],[0,-2.946],[0,0],[2.946,0],[0,0],[0,2.945]],\"v\":[[376.457,49.322],[5.334,49.322],[0.001,43.989],[0.001,5.333],[5.334,0],[376.457,0],[381.79,5.333],[381.79,43.989]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false}],\"ip\":0,\"op\":180,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":27,\"ty\":4,\"nm\":\"Document Bg\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[1226.408,2697.161,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[317.795,404.108,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[20.658,0],[0,0],[0,20.658],[0,0],[-21.204,-0.811],[0,0],[0,-20.101],[0,0]],\"o\":[[0,0],[-20.658,0],[0,0],[0,-21.219],[0,0],[20.087,0.769],[0,0],[0,20.658]],\"v\":[[280.141,403.467],[-280.14,403.467],[-317.545,366.063],[-317.545,-365.277],[-278.71,-402.655],[281.571,-381.215],[317.546,-343.837],[317.546,366.063]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.23921568627450981,0.21568627450980393,0.7568627450980392,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[317.795,403.716],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":180,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":28,\"ty\":4,\"nm\":\"Laptop\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[1619.189,2712.431,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[895.075,527.973,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-3.109,0],[0,0],[0,3.109],[0,0],[3.111,0],[0,0],[0,-3.11],[0,0]],\"o\":[[0,0],[3.11,0],[0,0],[0,-3.11],[0,0],[-3.109,0],[0,0],[0,3.109]],\"v\":[[-889.171,38.323],[889.171,38.323],[894.825,32.669],[894.825,-32.671],[889.171,-38.324],[-889.171,-38.324],[-894.825,-32.671],[-894.825,32.669]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.23921568627450981,0.21568627450980393,0.7568627450980392,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[895.075,1016.896],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[2.121,0],[0,0],[-0.033,2.147],[0,0],[8.681,8.317],[1.084,-0.051],[0,0],[-0.058,2.148],[-2.288,-0.194],[0,0],[-18.241,-17.477],[-0.078,-16.875],[0,0]],\"o\":[[0,0],[-2.15,-0.031],[0,0],[-0.068,-14.611],[-16.203,-15.524],[0,0],[-2.148,-0.054],[0.056,-2.148],[0,0],[2.826,-0.167],[10.262,9.833],[0,0],[-0.032,2.129]],\"v\":[[253.636,159.681],[253.577,159.681],[249.743,155.731],[253.354,-90.248],[240.171,-124.842],[197.158,-139.523],[-257.295,-151.71],[-261.08,-155.703],[-257.085,-159.487],[197.098,-147.3],[245.556,-130.464],[261.138,-90.21],[257.525,155.847]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[1392.359,234.571],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 2\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[2.121,0],[0,0],[-0.033,2.152],[0,0],[-2.121,0],[0,0],[0.032,-2.151],[0,0]],\"o\":[[0,0],[-2.17,-0.031],[0,0],[0.03,-2.129],[0,0],[2.169,0.031],[0,0],[-0.032,2.129]],\"v\":[[-0.468,36.004],[-0.507,36.004],[-4.361,32.053],[-3.419,-32.17],[0.47,-36.004],[0.508,-36.004],[4.362,-32.055],[3.421,32.169]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[1644.152,515.63],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 3\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":3,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-14.606,0],[0,0],[0,14.605],[0,0],[25.327,-1.012],[0,0],[9.639,-9.614],[-0.341,-13.61]],\"o\":[[0,14.605],[0,0],[14.607,0],[0,0],[-1.404,-47.656],[0,0],[-13.61,-0.364],[-9.639,9.615],[0,0]],\"v\":[[-749.365,433.825],[-722.808,460.383],[732.375,460.383],[758.933,433.825],[770.852,-358.1],[702.34,-421.872],[-719.505,-460.019],[-755.912,-445.526],[-770.511,-409.143]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.7490196078431373,0.12156862745098039,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[900.476,494.029],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 4\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":4,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-15.439,0],[0,0],[0,15.424],[0,0],[33.304,-2.263],[0,0],[13.718,-13.673],[-0.458,-19.355]],\"o\":[[0,15.424],[0,0],[15.438,0],[0,0],[0,-15.423],[0,0],[-19.371,-0.501],[-13.717,13.674],[0,0]],\"v\":[[-782.729,463.232],[-754.658,491.276],[763.332,491.276],[791.403,463.232],[804.035,-409.116],[752.557,-452.389],[-730.99,-490.775],[-782.811,-470.148],[-803.577,-418.425]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.23921568627450981,0.21568627450980393,0.7568627450980392,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[906.126,491.527],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 5\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":5,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":180,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":29,\"ty\":4,\"nm\":\"Cloud\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":0,\"s\":[1855,2079.442,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":45,\"s\":[1855,2129.442,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"t\":90,\"s\":[1855,2079.442,0]}],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[1457.664,834.54,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-72.82,310.808],[-163.923,40.348],[-91.391,-44.95],[-8.398,33.377],[-338.381,0],[0,-411.403],[0.187,-14.317],[-19.556,-3.28],[-6.856,-163.896],[183.708,0],[0,0]],\"o\":[[39.377,-168.069],[112.699,-27.742],[30.312,14.908],[80.789,-321.076],[401.242,0],[0,10.921],[1.421,30.764],[157.204,16.775],[7.871,188.186],[0,0],[-290.889,0]],\"v\":[[-1202.679,156.969],[-870.615,-183.385],[-558.399,-151.289],[-483.669,-186.636],[219.832,-744.911],[946.344,-0.001],[945.944,40.154],[980.021,87.262],[1267.629,400.812],[942.41,744.911],[-756.852,744.911]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.379145573635,0.416115405513,0.963032382142,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[1431.885,923.919],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-81.558,348.1],[-183.592,45.19],[-102.357,-50.344],[-9.407,37.383],[-378.982,0],[0,-460.765],[0.208,-16.034],[-21.901,-3.674],[-7.678,-183.561],[205.75,0],[0,0]],\"o\":[[44.102,-188.235],[126.221,-31.069],[33.948,16.697],[90.482,-359.599],[449.386,0],[0,12.232],[1.591,34.456],[176.069,18.789],[8.817,210.766],[0,0],[-325.792,0]],\"v\":[[-1346.983,175.804],[-975.075,-205.389],[-625.399,-169.442],[-541.701,-209.03],[246.208,-834.291],[1059.891,0],[1059.443,44.973],[1097.609,97.731],[1419.724,448.905],[1055.484,834.291],[-847.662,834.291]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.23921568627450981,0.21568627450980393,0.7568627450980392,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[1428.791,834.541],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 2\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":180,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":30,\"ty\":4,\"nm\":\"Background Shape\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[1876.955,1891.635,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[1473.364,1375.013,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":0,\"s\":[100,100,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":45,\"s\":[110,110,100]},{\"t\":90,\"s\":[100,100,100]}],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[168.339,-402.166],[596.684,93.25],[235.668,213.24],[-365.966,572.834],[-453.695,-11.821],[-329.144,-275.374],[-96.098,-152.478]],\"o\":[[-258.302,617.093],[-97.093,-15.175],[-453.675,-410.503],[266.36,-416.923],[97.727,2.547],[48.346,40.447],[225.657,358.046]],\"v\":[[1262.172,445.366],[-280.871,1314.907],[-879.814,1041.292],[-1064.545,-754.895],[132.986,-1396.336],[934.384,-1102.721],[1185.457,-813.682]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.9450980392156862,0.9333333333333333,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[1430.761,1408.407],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":180,\"st\":0,\"bm\":0}],\"markers\":[]}"
  },
  {
    "path": "frontend/public/mockServiceWorker.js",
    "content": "/* eslint-disable */\n/* tslint:disable */\n\n/**\n * Mock Service Worker.\n * @see https://github.com/mswjs/msw\n * - Please do NOT modify this file.\n */\n\nconst PACKAGE_VERSION = '2.11.6'\nconst INTEGRITY_CHECKSUM = '4db4a41e972cec1b64cc569c66952d82'\nconst IS_MOCKED_RESPONSE = Symbol('isMockedResponse')\nconst activeClientIds = new Set()\n\naddEventListener('install', function () {\n  self.skipWaiting()\n})\n\naddEventListener('activate', function (event) {\n  event.waitUntil(self.clients.claim())\n})\n\naddEventListener('message', async function (event) {\n  const clientId = Reflect.get(event.source || {}, 'id')\n\n  if (!clientId || !self.clients) {\n    return\n  }\n\n  const client = await self.clients.get(clientId)\n\n  if (!client) {\n    return\n  }\n\n  const allClients = await self.clients.matchAll({\n    type: 'window',\n  })\n\n  switch (event.data) {\n    case 'KEEPALIVE_REQUEST': {\n      sendToClient(client, {\n        type: 'KEEPALIVE_RESPONSE',\n      })\n      break\n    }\n\n    case 'INTEGRITY_CHECK_REQUEST': {\n      sendToClient(client, {\n        type: 'INTEGRITY_CHECK_RESPONSE',\n        payload: {\n          packageVersion: PACKAGE_VERSION,\n          checksum: INTEGRITY_CHECKSUM,\n        },\n      })\n      break\n    }\n\n    case 'MOCK_ACTIVATE': {\n      activeClientIds.add(clientId)\n\n      sendToClient(client, {\n        type: 'MOCKING_ENABLED',\n        payload: {\n          client: {\n            id: client.id,\n            frameType: client.frameType,\n          },\n        },\n      })\n      break\n    }\n\n    case 'CLIENT_CLOSED': {\n      activeClientIds.delete(clientId)\n\n      const remainingClients = allClients.filter((client) => {\n        return client.id !== clientId\n      })\n\n      // Unregister itself when there are no more clients\n      if (remainingClients.length === 0) {\n        self.registration.unregister()\n      }\n\n      break\n    }\n  }\n})\n\naddEventListener('fetch', function (event) {\n  const requestInterceptedAt = Date.now()\n\n  // Bypass navigation requests.\n  if (event.request.mode === 'navigate') {\n    return\n  }\n\n  // Opening the DevTools triggers the \"only-if-cached\" request\n  // that cannot be handled by the worker. Bypass such requests.\n  if (\n    event.request.cache === 'only-if-cached' &&\n    event.request.mode !== 'same-origin'\n  ) {\n    return\n  }\n\n  // Bypass all requests when there are no active clients.\n  // Prevents the self-unregistered worked from handling requests\n  // after it's been terminated (still remains active until the next reload).\n  if (activeClientIds.size === 0) {\n    return\n  }\n\n  const requestId = crypto.randomUUID()\n  event.respondWith(handleRequest(event, requestId, requestInterceptedAt))\n})\n\n/**\n * @param {FetchEvent} event\n * @param {string} requestId\n * @param {number} requestInterceptedAt\n */\nasync function handleRequest(event, requestId, requestInterceptedAt) {\n  const client = await resolveMainClient(event)\n  const requestCloneForEvents = event.request.clone()\n  const response = await getResponse(\n    event,\n    client,\n    requestId,\n    requestInterceptedAt,\n  )\n\n  // Send back the response clone for the \"response:*\" life-cycle events.\n  // Ensure MSW is active and ready to handle the message, otherwise\n  // this message will pend indefinitely.\n  if (client && activeClientIds.has(client.id)) {\n    const serializedRequest = await serializeRequest(requestCloneForEvents)\n\n    // Clone the response so both the client and the library could consume it.\n    const responseClone = response.clone()\n\n    sendToClient(\n      client,\n      {\n        type: 'RESPONSE',\n        payload: {\n          isMockedResponse: IS_MOCKED_RESPONSE in response,\n          request: {\n            id: requestId,\n            ...serializedRequest,\n          },\n          response: {\n            type: responseClone.type,\n            status: responseClone.status,\n            statusText: responseClone.statusText,\n            headers: Object.fromEntries(responseClone.headers.entries()),\n            body: responseClone.body,\n          },\n        },\n      },\n      responseClone.body ? [serializedRequest.body, responseClone.body] : [],\n    )\n  }\n\n  return response\n}\n\n/**\n * Resolve the main client for the given event.\n * Client that issues a request doesn't necessarily equal the client\n * that registered the worker. It's with the latter the worker should\n * communicate with during the response resolving phase.\n * @param {FetchEvent} event\n * @returns {Promise<Client | undefined>}\n */\nasync function resolveMainClient(event) {\n  const client = await self.clients.get(event.clientId)\n\n  if (activeClientIds.has(event.clientId)) {\n    return client\n  }\n\n  if (client?.frameType === 'top-level') {\n    return client\n  }\n\n  const allClients = await self.clients.matchAll({\n    type: 'window',\n  })\n\n  return allClients\n    .filter((client) => {\n      // Get only those clients that are currently visible.\n      return client.visibilityState === 'visible'\n    })\n    .find((client) => {\n      // Find the client ID that's recorded in the\n      // set of clients that have registered the worker.\n      return activeClientIds.has(client.id)\n    })\n}\n\n/**\n * @param {FetchEvent} event\n * @param {Client | undefined} client\n * @param {string} requestId\n * @param {number} requestInterceptedAt\n * @returns {Promise<Response>}\n */\nasync function getResponse(event, client, requestId, requestInterceptedAt) {\n  // Clone the request because it might've been already used\n  // (i.e. its body has been read and sent to the client).\n  const requestClone = event.request.clone()\n\n  function passthrough() {\n    // Cast the request headers to a new Headers instance\n    // so the headers can be manipulated with.\n    const headers = new Headers(requestClone.headers)\n\n    // Remove the \"accept\" header value that marked this request as passthrough.\n    // This prevents request alteration and also keeps it compliant with the\n    // user-defined CORS policies.\n    const acceptHeader = headers.get('accept')\n    if (acceptHeader) {\n      const values = acceptHeader.split(',').map((value) => value.trim())\n      const filteredValues = values.filter(\n        (value) => value !== 'msw/passthrough',\n      )\n\n      if (filteredValues.length > 0) {\n        headers.set('accept', filteredValues.join(', '))\n      } else {\n        headers.delete('accept')\n      }\n    }\n\n    return fetch(requestClone, { headers })\n  }\n\n  // Bypass mocking when the client is not active.\n  if (!client) {\n    return passthrough()\n  }\n\n  // Bypass initial page load requests (i.e. static assets).\n  // The absence of the immediate/parent client in the map of the active clients\n  // means that MSW hasn't dispatched the \"MOCK_ACTIVATE\" event yet\n  // and is not ready to handle requests.\n  if (!activeClientIds.has(client.id)) {\n    return passthrough()\n  }\n\n  // Notify the client that a request has been intercepted.\n  const serializedRequest = await serializeRequest(event.request)\n  const clientMessage = await sendToClient(\n    client,\n    {\n      type: 'REQUEST',\n      payload: {\n        id: requestId,\n        interceptedAt: requestInterceptedAt,\n        ...serializedRequest,\n      },\n    },\n    [serializedRequest.body],\n  )\n\n  switch (clientMessage.type) {\n    case 'MOCK_RESPONSE': {\n      return respondWithMock(clientMessage.data)\n    }\n\n    case 'PASSTHROUGH': {\n      return passthrough()\n    }\n  }\n\n  return passthrough()\n}\n\n/**\n * @param {Client} client\n * @param {any} message\n * @param {Array<Transferable>} transferrables\n * @returns {Promise<any>}\n */\nfunction sendToClient(client, message, transferrables = []) {\n  return new Promise((resolve, reject) => {\n    const channel = new MessageChannel()\n\n    channel.port1.onmessage = (event) => {\n      if (event.data && event.data.error) {\n        return reject(event.data.error)\n      }\n\n      resolve(event.data)\n    }\n\n    client.postMessage(message, [\n      channel.port2,\n      ...transferrables.filter(Boolean),\n    ])\n  })\n}\n\n/**\n * @param {Response} response\n * @returns {Response}\n */\nfunction respondWithMock(response) {\n  // Setting response status code to 0 is a no-op.\n  // However, when responding with a \"Response.error()\", the produced Response\n  // instance will have status code set to 0. Since it's not possible to create\n  // a Response instance with status code 0, handle that use-case separately.\n  if (response.status === 0) {\n    return Response.error()\n  }\n\n  const mockedResponse = new Response(response.body, response)\n\n  Reflect.defineProperty(mockedResponse, IS_MOCKED_RESPONSE, {\n    value: true,\n    enumerable: true,\n  })\n\n  return mockedResponse\n}\n\n/**\n * @param {Request} request\n */\nasync function serializeRequest(request) {\n  return {\n    url: request.url,\n    mode: request.mode,\n    method: request.method,\n    headers: Object.fromEntries(request.headers.entries()),\n    cache: request.cache,\n    credentials: request.credentials,\n    destination: request.destination,\n    integrity: request.integrity,\n    redirect: request.redirect,\n    referrer: request.referrer,\n    referrerPolicy: request.referrerPolicy,\n    body: await request.arrayBuffer(),\n    keepalive: request.keepalive,\n  }\n}\n"
  },
  {
    "path": "frontend/services/api-key-settings.service.ts",
    "content": "import { api } from '@/lib/api-client'\nimport type { ApiKeySettings } from '@/types/api-key-settings.types'\n\nexport class ApiKeySettingsService {\n  static async getSettings(): Promise<ApiKeySettings> {\n    const res = await api.get<ApiKeySettings>('/settings/api-keys/')\n    return res.data\n  }\n\n  static async updateSettings(data: Partial<ApiKeySettings>): Promise<ApiKeySettings> {\n    const res = await api.put<ApiKeySettings>('/settings/api-keys/', data)\n    return res.data\n  }\n}\n"
  },
  {
    "path": "frontend/services/auth.service.ts",
    "content": "/**\n * Authentication service\n */\nimport { api } from '@/lib/api-client'\nimport type { \n  LoginRequest, \n  LoginResponse, \n  MeResponse, \n  LogoutResponse,\n  ChangePasswordRequest,\n  ChangePasswordResponse\n} from '@/types/auth.types'\nimport { USE_MOCK, mockDelay, mockLoginResponse, mockLogoutResponse, mockMeResponse } from '@/mock'\n\n/**\n * User login\n */\nexport async function login(data: LoginRequest): Promise<LoginResponse> {\n  if (USE_MOCK) {\n    await mockDelay()\n    return mockLoginResponse\n  }\n  const res = await api.post<LoginResponse>('/auth/login/', data)\n  return res.data\n}\n\n/**\n * User logout\n */\nexport async function logout(): Promise<LogoutResponse> {\n  if (USE_MOCK) {\n    await mockDelay()\n    return mockLogoutResponse\n  }\n  const res = await api.post<LogoutResponse>('/auth/logout/')\n  return res.data\n}\n\n/**\n * Get current user information\n */\nexport async function getMe(): Promise<MeResponse> {\n  if (USE_MOCK) {\n    await mockDelay()\n    return mockMeResponse\n  }\n  const res = await api.get<MeResponse>('/auth/me/')\n  return res.data\n}\n\n/**\n * Change password\n */\nexport async function changePassword(data: ChangePasswordRequest): Promise<ChangePasswordResponse> {\n  if (USE_MOCK) {\n    await mockDelay()\n    return { message: 'Password changed successfully' }\n  }\n  const res = await api.post<ChangePasswordResponse>('/auth/change-password/', data)\n  return res.data\n}\n"
  },
  {
    "path": "frontend/services/command.service.ts",
    "content": "import { api } from \"@/lib/api-client\"\nimport type {\n  Command,\n  GetCommandsRequest,\n  GetCommandsResponse,\n  CreateCommandRequest,\n  UpdateCommandRequest,\n  CommandResponseData,\n  BatchDeleteCommandsResponseData,\n} from \"@/types/command.types\"\n\n/**\n * Command service\n */\nexport class CommandService {\n  /**\n   * Get command list\n   */\n  static async getCommands(\n    params: GetCommandsRequest = {}\n  ): Promise<GetCommandsResponse> {\n    const response = await api.get<GetCommandsResponse>(\n      \"/commands/\",\n      { params }\n    )\n    return response.data\n  }\n\n  /**\n   * Get single command\n   */\n  static async getCommandById(id: number): Promise<CommandResponseData> {\n    const response = await api.get<CommandResponseData>(\n      `/commands/${id}/`\n    )\n    return response.data\n  }\n\n  /**\n   * Create command\n   */\n  static async createCommand(\n    data: CreateCommandRequest\n  ): Promise<CommandResponseData> {\n    const response = await api.post<CommandResponseData>(\n      \"/commands/create/\",\n      data\n    )\n    return response.data\n  }\n\n  /**\n   * Update command\n   */\n  static async updateCommand(\n    id: number,\n    data: UpdateCommandRequest\n  ): Promise<CommandResponseData> {\n    const response = await api.put<CommandResponseData>(\n      `/commands/${id}/`,\n      data\n    )\n    return response.data\n  }\n\n  /**\n   * Delete command\n   */\n  static async deleteCommand(\n    id: number\n  ): Promise<void> {\n    await api.delete(\n      `/commands/${id}/`\n    )\n  }\n\n  /**\n   * Batch delete commands\n   */\n  static async batchDeleteCommands(\n    ids: number[]\n  ): Promise<BatchDeleteCommandsResponseData> {\n    const response = await api.post<BatchDeleteCommandsResponseData>(\n      \"/commands/batch-delete/\",\n      { ids }\n    )\n    return response.data\n  }\n}\n"
  },
  {
    "path": "frontend/services/dashboard.service.ts",
    "content": "import { api } from '@/lib/api-client'\nimport type { DashboardStats, AssetStatistics, StatisticsHistoryItem } from '@/types/dashboard.types'\nimport { USE_MOCK, mockDelay, mockDashboardStats, mockAssetStatistics, getMockStatisticsHistory } from '@/mock'\n\nexport async function getDashboardStats(): Promise<DashboardStats> {\n  if (USE_MOCK) {\n    await mockDelay()\n    return mockDashboardStats\n  }\n  const res = await api.get<DashboardStats>('/dashboard/stats/')\n  return res.data\n}\n\n/**\n * Get asset statistics data (pre-aggregated)\n */\nexport async function getAssetStatistics(): Promise<AssetStatistics> {\n  if (USE_MOCK) {\n    await mockDelay()\n    return mockAssetStatistics\n  }\n  const res = await api.get<AssetStatistics>('/assets/statistics/')\n  return res.data\n}\n\n/**\n * Get statistics history data (for line charts)\n */\nexport async function getStatisticsHistory(days: number = 7): Promise<StatisticsHistoryItem[]> {\n  if (USE_MOCK) {\n    await mockDelay()\n    return getMockStatisticsHistory(days)\n  }\n  const res = await api.get<StatisticsHistoryItem[]>('/assets/statistics/history/', {\n    params: { days }\n  })\n  return res.data\n}\n"
  },
  {
    "path": "frontend/services/directory.service.ts",
    "content": "import { api } from \"@/lib/api-client\"\n\n// Bulk create directories response type\nexport interface BulkCreateDirectoriesResponse {\n  message: string\n  createdCount: number\n}\n\n// Bulk delete response type\nexport interface BulkDeleteResponse {\n  deletedCount: number\n}\n\n/** Directory related API service */\nexport class DirectoryService {\n  /**\n   * Bulk delete directories\n   * POST /api/assets/directories/bulk-delete/\n   */\n  static async bulkDelete(ids: number[]): Promise<BulkDeleteResponse> {\n    const response = await api.post<BulkDeleteResponse>(\n      `/assets/directories/bulk-delete/`,\n      { ids }\n    )\n    return response.data\n  }\n\n  /**\n   * Bulk create directories (bind to target)\n   * POST /api/targets/{target_id}/directories/bulk-create/\n   */\n  static async bulkCreateDirectories(\n    targetId: number,\n    urls: string[]\n  ): Promise<BulkCreateDirectoriesResponse> {\n    const response = await api.post<BulkCreateDirectoriesResponse>(\n      `/targets/${targetId}/directories/bulk-create/`,\n      { urls }\n    )\n    return response.data\n  }\n\n  /** Export all directory URLs by target (text file, one per line) */\n  static async exportDirectoriesByTargetId(targetId: number): Promise<Blob> {\n    const response = await api.get<Blob>(`/targets/${targetId}/directories/export/`, {\n      responseType: \"blob\",\n    })\n    return response.data\n  }\n\n  /** Export all directory URLs by scan task (text file, one per line) */\n  static async exportDirectoriesByScanId(scanId: number): Promise<Blob> {\n    const response = await api.get<Blob>(`/scans/${scanId}/directories/export/`, {\n      responseType: \"blob\",\n    })\n    return response.data\n  }\n}\n"
  },
  {
    "path": "frontend/services/disk.service.ts",
    "content": "import { api } from '@/lib/api-client'\nimport type { DiskStats } from '@/types/disk.types'\n\nexport async function getDiskStats(): Promise<DiskStats> {\n  const res = await api.get<DiskStats>('/system/disk-stats/')\n  return res.data\n}\n"
  },
  {
    "path": "frontend/services/endpoint.service.ts",
    "content": "import { api } from \"@/lib/api-client\"\nimport type { \n  Endpoint, \n  CreateEndpointRequest, \n  UpdateEndpointRequest,\n  GetEndpointsRequest,\n  GetEndpointsResponse,\n  BatchDeleteEndpointsRequest,\n  BatchDeleteEndpointsResponse\n} from \"@/types/endpoint.types\"\nimport { USE_MOCK, mockDelay, getMockEndpoints, getMockEndpointById } from '@/mock'\n\n// Bulk create endpoints response type\nexport interface BulkCreateEndpointsResponse {\n  message: string\n  createdCount: number\n}\n\n// Bulk delete response type\nexport interface BulkDeleteResponse {\n  deletedCount: number\n}\n\nexport class EndpointService {\n\n  /**\n   * Bulk delete endpoints\n   * POST /api/assets/endpoints/bulk-delete/\n   */\n  static async bulkDelete(ids: number[]): Promise<BulkDeleteResponse> {\n    const response = await api.post<BulkDeleteResponse>(\n      `/assets/endpoints/bulk-delete/`,\n      { ids }\n    )\n    return response.data\n  }\n\n  /**\n   * Bulk create endpoints (bind to target)\n   * POST /api/targets/{target_id}/endpoints/bulk-create/\n   */\n  static async bulkCreateEndpoints(\n    targetId: number,\n    urls: string[]\n  ): Promise<BulkCreateEndpointsResponse> {\n    const response = await api.post<BulkCreateEndpointsResponse>(\n      `/targets/${targetId}/endpoints/bulk-create/`,\n      { urls }\n    )\n    return response.data\n  }\n\n  /**\n   * Get single Endpoint details\n   * @param id - Endpoint ID\n   * @returns Promise<Endpoint>\n   */\n  static async getEndpointById(id: number): Promise<Endpoint> {\n    if (USE_MOCK) {\n      await mockDelay()\n      const endpoint = getMockEndpointById(id)\n      if (!endpoint) throw new Error('Endpoint not found')\n      return endpoint\n    }\n    const response = await api.get<Endpoint>(`/endpoints/${id}/`)\n    return response.data\n  }\n\n  /**\n   * Get Endpoint list\n   * @param params - Query parameters\n   * @returns Promise<GetEndpointsResponse>\n   */\n  static async getEndpoints(params: GetEndpointsRequest): Promise<GetEndpointsResponse> {\n    if (USE_MOCK) {\n      await mockDelay()\n      return getMockEndpoints(params)\n    }\n    // api-client.ts automatically converts camelCase params to snake_case\n    const response = await api.get<GetEndpointsResponse>('/endpoints/', {\n      params\n    })\n    return response.data\n  }\n\n  /**\n   * Get Endpoint list by target ID (dedicated route)\n   * @param targetId - Target ID\n   * @param params - Other query parameters\n   * @param filter - Smart filter query string\n   * @returns Promise<GetEndpointsResponse>\n   */\n  static async getEndpointsByTargetId(targetId: number, params: GetEndpointsRequest, filter?: string): Promise<GetEndpointsResponse> {\n    // api-client.ts automatically converts camelCase params to snake_case\n    const response = await api.get<GetEndpointsResponse>(`/targets/${targetId}/endpoints/`, {\n      params: { ...params, filter }\n    })\n    return response.data\n  }\n\n  /**\n   * Get Endpoint list by scan ID (historical snapshot)\n   * @param scanId - Scan task ID\n   * @param params - Pagination and other query parameters\n   * @param filter - Smart filter query string\n   */\n  static async getEndpointsByScanId(\n    scanId: number,\n    params: GetEndpointsRequest,\n    filter?: string,\n  ): Promise<any> {\n    const response = await api.get(`/scans/${scanId}/endpoints/`, {\n      params: { ...params, filter },\n    })\n    return response.data\n  }\n\n  /**\n   * Batch create Endpoints\n   * @param data - Create request object\n   * @param data.endpoints - Endpoint data array\n   * @returns Promise<CreateEndpointsResponse>\n   */\n  static async createEndpoints(data: { endpoints: Array<CreateEndpointRequest> }): Promise<any> {\n    // api-client.ts automatically converts camelCase request body to snake_case\n    const response = await api.post('/endpoints/create/', data)\n    return response.data\n  }\n\n  /**\n   * Delete Endpoint\n   * @param id - Endpoint ID\n   * @returns Promise<void>\n   */\n  static async deleteEndpoint(id: number): Promise<void> {\n    await api.delete(`/endpoints/${id}/`)\n  }\n\n  /**\n   * Batch delete Endpoints\n   * @param data - Batch delete request object\n   * @param data.endpointIds - Endpoint ID list\n   * @returns Promise<BatchDeleteEndpointsResponse>\n   */\n  static async batchDeleteEndpoints(data: BatchDeleteEndpointsRequest): Promise<BatchDeleteEndpointsResponse> {\n    // api-client.ts automatically converts camelCase request body to snake_case\n    const response = await api.post<BatchDeleteEndpointsResponse>('/endpoints/batch-delete/', data)\n    return response.data\n  }\n\n  /** Export all endpoint URLs by target (text file, one per line) */\n  static async exportEndpointsByTargetId(targetId: number): Promise<Blob> {\n    const response = await api.get<Blob>(`/targets/${targetId}/endpoints/export/`, {\n      responseType: 'blob',\n    })\n    return response.data\n  }\n\n  /** Export all endpoint URLs by scan task (text file, one per line) */\n  static async exportEndpointsByScanId(scanId: number): Promise<Blob> {\n    const response = await api.get<Blob>(`/scans/${scanId}/endpoints/export/`, {\n      responseType: 'blob',\n    })\n    return response.data\n  }\n\n}\n"
  },
  {
    "path": "frontend/services/engine.service.ts",
    "content": "import apiClient from '@/lib/api-client'\nimport type { ScanEngine } from '@/types/engine.types'\nimport { USE_MOCK, mockDelay, getMockEngines, getMockEngineById } from '@/mock'\n\n/**\n * Engine API service\n */\n\n/**\n * Get engine list\n */\nexport async function getEngines(): Promise<ScanEngine[]> {\n  if (USE_MOCK) {\n    await mockDelay()\n    return getMockEngines()\n  }\n  // Engines are usually not many, get all\n  const response = await apiClient.get('/engines/', {\n    params: { pageSize: 1000 }\n  })\n  // Backend returns paginated data: { results: [...], total, page, pageSize, totalPages }\n  return response.data.results || response.data\n}\n\n/**\n * Get engine details\n */\nexport async function getEngine(id: number): Promise<ScanEngine> {\n  if (USE_MOCK) {\n    await mockDelay()\n    const engine = getMockEngineById(id)\n    if (!engine) throw new Error('Engine not found')\n    return engine\n  }\n  const response = await apiClient.get(`/engines/${id}/`)\n  return response.data\n}\n\n/**\n * Create engine\n */\nexport async function createEngine(data: {\n  name: string\n  configuration: string\n}): Promise<ScanEngine> {\n  const response = await apiClient.post('/engines/', data)\n  return response.data\n}\n\n/**\n * Update engine\n */\nexport async function updateEngine(\n  id: number,\n  data: Partial<{\n    name: string\n    configuration: string\n  }>\n): Promise<ScanEngine> {\n  const response = await apiClient.patch(`/engines/${id}/`, data)\n  return response.data\n}\n\n/**\n * Delete engine\n */\nexport async function deleteEngine(id: number): Promise<void> {\n  await apiClient.delete(`/engines/${id}/`)\n}\n\n"
  },
  {
    "path": "frontend/services/fingerprint.service.ts",
    "content": "/**\n * Fingerprint management API service\n */\n\nimport apiClient from \"@/lib/api-client\"\nimport type { PaginatedResponse } from \"@/types/api-response.types\"\nimport type { \n  EholeFingerprint,\n  GobyFingerprint,\n  WappalyzerFingerprint,\n  FingersFingerprint,\n  FingerPrintHubFingerprint,\n  ARLFingerprint,\n  BatchCreateResponse, \n  BulkDeleteResponse,\n  FingerprintStats \n} from \"@/types/fingerprint.types\"\n\n// Paginated query parameters\ninterface QueryParams {\n  page?: number\n  pageSize?: number\n  filter?: string\n}\n\nexport const FingerprintService = {\n  // ==================== EHole ====================\n  \n  /**\n   * Get EHole fingerprint list\n   */\n  async getEholeFingerprints(params: QueryParams = {}): Promise<PaginatedResponse<EholeFingerprint>> {\n    const response = await apiClient.get(\"/fingerprints/ehole/\", { params })\n    return response.data\n  },\n\n  /**\n   * Get EHole fingerprint details\n   */\n  async getEholeFingerprint(id: number): Promise<EholeFingerprint> {\n    const response = await apiClient.get(`/fingerprints/ehole/${id}/`)\n    return response.data\n  },\n\n  /**\n   * Create single EHole fingerprint\n   */\n  async createEholeFingerprint(data: Omit<EholeFingerprint, 'id' | 'createdAt'>): Promise<EholeFingerprint> {\n    const response = await apiClient.post(\"/fingerprints/ehole/\", data)\n    return response.data\n  },\n\n  /**\n   * Update EHole fingerprint\n   */\n  async updateEholeFingerprint(id: number, data: Partial<EholeFingerprint>): Promise<EholeFingerprint> {\n    const response = await apiClient.put(`/fingerprints/ehole/${id}/`, data)\n    return response.data\n  },\n\n  /**\n   * Delete single EHole fingerprint\n   */\n  async deleteEholeFingerprint(id: number): Promise<void> {\n    await apiClient.delete(`/fingerprints/ehole/${id}/`)\n  },\n\n  /**\n   * Batch create EHole fingerprints\n   */\n  async batchCreateEholeFingerprints(fingerprints: Omit<EholeFingerprint, 'id' | 'createdAt'>[]): Promise<BatchCreateResponse> {\n    const response = await apiClient.post(\"/fingerprints/ehole/batch_create/\", { fingerprints })\n    return response.data\n  },\n\n  /**\n   * File import EHole fingerprints\n   */\n  async importEholeFingerprints(file: File): Promise<BatchCreateResponse> {\n    const formData = new FormData()\n    formData.append(\"file\", file)\n    const response = await apiClient.post(\"/fingerprints/ehole/import_file/\", formData, {\n      headers: { \"Content-Type\": \"multipart/form-data\" }\n    })\n    return response.data\n  },\n\n  /**\n   * Bulk delete EHole fingerprints\n   */\n  async bulkDeleteEholeFingerprints(ids: number[]): Promise<BulkDeleteResponse> {\n    const response = await apiClient.post(\"/fingerprints/ehole/bulk-delete/\", { ids })\n    return response.data\n  },\n\n  /**\n   * Delete all EHole fingerprints\n   */\n  async deleteAllEholeFingerprints(): Promise<BulkDeleteResponse> {\n    const response = await apiClient.post(\"/fingerprints/ehole/delete-all/\")\n    return response.data\n  },\n\n  /**\n   * Export EHole fingerprints\n   */\n  async exportEholeFingerprints(): Promise<Blob> {\n    const response = await apiClient.get(\"/fingerprints/ehole/export/\", {\n      responseType: \"blob\"\n    })\n    return response.data\n  },\n\n  /**\n   * Get EHole fingerprint count\n   */\n  async getEholeCount(): Promise<number> {\n    const response = await apiClient.get(\"/fingerprints/ehole/\", { params: { pageSize: 1 } })\n    return response.data.total || 0\n  },\n\n  // ==================== Goby ====================\n  \n  /**\n   * Get Goby fingerprint list\n   */\n  async getGobyFingerprints(params: QueryParams = {}): Promise<PaginatedResponse<GobyFingerprint>> {\n    const response = await apiClient.get(\"/fingerprints/goby/\", { params })\n    return response.data\n  },\n\n  /**\n   * 获取 Goby 指纹详情\n   */\n  async getGobyFingerprint(id: number): Promise<GobyFingerprint> {\n    const response = await apiClient.get(`/fingerprints/goby/${id}/`)\n    return response.data\n  },\n\n  /**\n   * 创建单条 Goby 指纹\n   */\n  async createGobyFingerprint(data: Omit<GobyFingerprint, 'id' | 'createdAt'>): Promise<GobyFingerprint> {\n    const response = await apiClient.post(\"/fingerprints/goby/\", data)\n    return response.data\n  },\n\n  /**\n   * 更新 Goby 指纹\n   */\n  async updateGobyFingerprint(id: number, data: Partial<GobyFingerprint>): Promise<GobyFingerprint> {\n    const response = await apiClient.put(`/fingerprints/goby/${id}/`, data)\n    return response.data\n  },\n\n  /**\n   * 删除单条 Goby 指纹\n   */\n  async deleteGobyFingerprint(id: number): Promise<void> {\n    await apiClient.delete(`/fingerprints/goby/${id}/`)\n  },\n\n  /**\n   * 文件导入 Goby 指纹\n   */\n  async importGobyFingerprints(file: File): Promise<BatchCreateResponse> {\n    const formData = new FormData()\n    formData.append(\"file\", file)\n    const response = await apiClient.post(\"/fingerprints/goby/import_file/\", formData, {\n      headers: { \"Content-Type\": \"multipart/form-data\" }\n    })\n    return response.data\n  },\n\n  /**\n   * 批量删除 Goby 指纹\n   */\n  async bulkDeleteGobyFingerprints(ids: number[]): Promise<BulkDeleteResponse> {\n    const response = await apiClient.post(\"/fingerprints/goby/bulk-delete/\", { ids })\n    return response.data\n  },\n\n  /**\n   * 删除所有 Goby 指纹\n   */\n  async deleteAllGobyFingerprints(): Promise<BulkDeleteResponse> {\n    const response = await apiClient.post(\"/fingerprints/goby/delete-all/\")\n    return response.data\n  },\n\n  /**\n   * 导出 Goby 指纹\n   */\n  async exportGobyFingerprints(): Promise<Blob> {\n    const response = await apiClient.get(\"/fingerprints/goby/export/\", {\n      responseType: \"blob\"\n    })\n    return response.data\n  },\n\n  /**\n   * 获取 Goby 指纹数量\n   */\n  async getGobyCount(): Promise<number> {\n    const response = await apiClient.get(\"/fingerprints/goby/\", { params: { pageSize: 1 } })\n    return response.data.total || 0\n  },\n\n  // ==================== Wappalyzer ====================\n  \n  /**\n   * 获取 Wappalyzer 指纹列表\n   */\n  async getWappalyzerFingerprints(params: QueryParams = {}): Promise<PaginatedResponse<WappalyzerFingerprint>> {\n    const response = await apiClient.get(\"/fingerprints/wappalyzer/\", { params })\n    return response.data\n  },\n\n  /**\n   * 获取 Wappalyzer 指纹详情\n   */\n  async getWappalyzerFingerprint(id: number): Promise<WappalyzerFingerprint> {\n    const response = await apiClient.get(`/fingerprints/wappalyzer/${id}/`)\n    return response.data\n  },\n\n  /**\n   * 创建单条 Wappalyzer 指纹\n   */\n  async createWappalyzerFingerprint(data: Omit<WappalyzerFingerprint, 'id' | 'createdAt'>): Promise<WappalyzerFingerprint> {\n    const response = await apiClient.post(\"/fingerprints/wappalyzer/\", data)\n    return response.data\n  },\n\n  /**\n   * 更新 Wappalyzer 指纹\n   */\n  async updateWappalyzerFingerprint(id: number, data: Partial<WappalyzerFingerprint>): Promise<WappalyzerFingerprint> {\n    const response = await apiClient.put(`/fingerprints/wappalyzer/${id}/`, data)\n    return response.data\n  },\n\n  /**\n   * 删除单条 Wappalyzer 指纹\n   */\n  async deleteWappalyzerFingerprint(id: number): Promise<void> {\n    await apiClient.delete(`/fingerprints/wappalyzer/${id}/`)\n  },\n\n  /**\n   * 文件导入 Wappalyzer 指纹\n   */\n  async importWappalyzerFingerprints(file: File): Promise<BatchCreateResponse> {\n    const formData = new FormData()\n    formData.append(\"file\", file)\n    const response = await apiClient.post(\"/fingerprints/wappalyzer/import_file/\", formData, {\n      headers: { \"Content-Type\": \"multipart/form-data\" }\n    })\n    return response.data\n  },\n\n  /**\n   * 批量删除 Wappalyzer 指纹\n   */\n  async bulkDeleteWappalyzerFingerprints(ids: number[]): Promise<BulkDeleteResponse> {\n    const response = await apiClient.post(\"/fingerprints/wappalyzer/bulk-delete/\", { ids })\n    return response.data\n  },\n\n  /**\n   * 删除所有 Wappalyzer 指纹\n   */\n  async deleteAllWappalyzerFingerprints(): Promise<BulkDeleteResponse> {\n    const response = await apiClient.post(\"/fingerprints/wappalyzer/delete-all/\")\n    return response.data\n  },\n\n  /**\n   * 导出 Wappalyzer 指纹\n   */\n  async exportWappalyzerFingerprints(): Promise<Blob> {\n    const response = await apiClient.get(\"/fingerprints/wappalyzer/export/\", {\n      responseType: \"blob\"\n    })\n    return response.data\n  },\n\n  /**\n   * 获取 Wappalyzer 指纹数量\n   */\n  async getWappalyzerCount(): Promise<number> {\n    const response = await apiClient.get(\"/fingerprints/wappalyzer/\", { params: { pageSize: 1 } })\n    return response.data.total || 0\n  },\n\n  // ==================== Fingers ====================\n\n  /**\n   * 获取 Fingers 指纹列表\n   */\n  async getFingersFingerprints(params: QueryParams = {}): Promise<PaginatedResponse<FingersFingerprint>> {\n    const response = await apiClient.get(\"/fingerprints/fingers/\", { params })\n    return response.data\n  },\n\n  /**\n   * 获取 Fingers 指纹详情\n   */\n  async getFingersFingerprint(id: number): Promise<FingersFingerprint> {\n    const response = await apiClient.get(`/fingerprints/fingers/${id}/`)\n    return response.data\n  },\n\n  /**\n   * 创建单条 Fingers 指纹\n   */\n  async createFingersFingerprint(data: Omit<FingersFingerprint, 'id' | 'createdAt'>): Promise<FingersFingerprint> {\n    const response = await apiClient.post(\"/fingerprints/fingers/\", data)\n    return response.data\n  },\n\n  /**\n   * 更新 Fingers 指纹\n   */\n  async updateFingersFingerprint(id: number, data: Partial<FingersFingerprint>): Promise<FingersFingerprint> {\n    const response = await apiClient.put(`/fingerprints/fingers/${id}/`, data)\n    return response.data\n  },\n\n  /**\n   * 删除单条 Fingers 指纹\n   */\n  async deleteFingersFingerprint(id: number): Promise<void> {\n    await apiClient.delete(`/fingerprints/fingers/${id}/`)\n  },\n\n  /**\n   * 文件导入 Fingers 指纹\n   */\n  async importFingersFingerprints(file: File): Promise<BatchCreateResponse> {\n    const formData = new FormData()\n    formData.append(\"file\", file)\n    const response = await apiClient.post(\"/fingerprints/fingers/import_file/\", formData, {\n      headers: { \"Content-Type\": \"multipart/form-data\" }\n    })\n    return response.data\n  },\n\n  /**\n   * 批量删除 Fingers 指纹\n   */\n  async bulkDeleteFingersFingerprints(ids: number[]): Promise<BulkDeleteResponse> {\n    const response = await apiClient.post(\"/fingerprints/fingers/bulk-delete/\", { ids })\n    return response.data\n  },\n\n  /**\n   * 删除所有 Fingers 指纹\n   */\n  async deleteAllFingersFingerprints(): Promise<BulkDeleteResponse> {\n    const response = await apiClient.post(\"/fingerprints/fingers/delete-all/\")\n    return response.data\n  },\n\n  /**\n   * 导出 Fingers 指纹\n   */\n  async exportFingersFingerprints(): Promise<Blob> {\n    const response = await apiClient.get(\"/fingerprints/fingers/export/\", {\n      responseType: \"blob\"\n    })\n    return response.data\n  },\n\n  /**\n   * 获取 Fingers 指纹数量\n   */\n  async getFingersCount(): Promise<number> {\n    const response = await apiClient.get(\"/fingerprints/fingers/\", { params: { pageSize: 1 } })\n    return response.data.total || 0\n  },\n\n  // ==================== FingerPrintHub ====================\n\n  /**\n   * 获取 FingerPrintHub 指纹列表\n   */\n  async getFingerPrintHubFingerprints(params: QueryParams = {}): Promise<PaginatedResponse<FingerPrintHubFingerprint>> {\n    const response = await apiClient.get(\"/fingerprints/fingerprinthub/\", { params })\n    return response.data\n  },\n\n  /**\n   * 获取 FingerPrintHub 指纹详情\n   */\n  async getFingerPrintHubFingerprint(id: number): Promise<FingerPrintHubFingerprint> {\n    const response = await apiClient.get(`/fingerprints/fingerprinthub/${id}/`)\n    return response.data\n  },\n\n  /**\n   * 创建单条 FingerPrintHub 指纹\n   */\n  async createFingerPrintHubFingerprint(data: Omit<FingerPrintHubFingerprint, 'id' | 'createdAt'>): Promise<FingerPrintHubFingerprint> {\n    const response = await apiClient.post(\"/fingerprints/fingerprinthub/\", data)\n    return response.data\n  },\n\n  /**\n   * 更新 FingerPrintHub 指纹\n   */\n  async updateFingerPrintHubFingerprint(id: number, data: Partial<FingerPrintHubFingerprint>): Promise<FingerPrintHubFingerprint> {\n    const response = await apiClient.put(`/fingerprints/fingerprinthub/${id}/`, data)\n    return response.data\n  },\n\n  /**\n   * 删除单条 FingerPrintHub 指纹\n   */\n  async deleteFingerPrintHubFingerprint(id: number): Promise<void> {\n    await apiClient.delete(`/fingerprints/fingerprinthub/${id}/`)\n  },\n\n  /**\n   * 文件导入 FingerPrintHub 指纹\n   */\n  async importFingerPrintHubFingerprints(file: File): Promise<BatchCreateResponse> {\n    const formData = new FormData()\n    formData.append(\"file\", file)\n    const response = await apiClient.post(\"/fingerprints/fingerprinthub/import_file/\", formData, {\n      headers: { \"Content-Type\": \"multipart/form-data\" }\n    })\n    return response.data\n  },\n\n  /**\n   * 批量删除 FingerPrintHub 指纹\n   */\n  async bulkDeleteFingerPrintHubFingerprints(ids: number[]): Promise<BulkDeleteResponse> {\n    const response = await apiClient.post(\"/fingerprints/fingerprinthub/bulk-delete/\", { ids })\n    return response.data\n  },\n\n  /**\n   * 删除所有 FingerPrintHub 指纹\n   */\n  async deleteAllFingerPrintHubFingerprints(): Promise<BulkDeleteResponse> {\n    const response = await apiClient.post(\"/fingerprints/fingerprinthub/delete-all/\")\n    return response.data\n  },\n\n  /**\n   * 导出 FingerPrintHub 指纹\n   */\n  async exportFingerPrintHubFingerprints(): Promise<Blob> {\n    const response = await apiClient.get(\"/fingerprints/fingerprinthub/export/\", {\n      responseType: \"blob\"\n    })\n    return response.data\n  },\n\n  /**\n   * 获取 FingerPrintHub 指纹数量\n   */\n  async getFingerPrintHubCount(): Promise<number> {\n    const response = await apiClient.get(\"/fingerprints/fingerprinthub/\", { params: { pageSize: 1 } })\n    return response.data.total || 0\n  },\n\n  // ==================== ARL ====================\n\n  /**\n   * 获取 ARL 指纹列表\n   */\n  async getARLFingerprints(params: QueryParams = {}): Promise<PaginatedResponse<ARLFingerprint>> {\n    const response = await apiClient.get(\"/fingerprints/arl/\", { params })\n    return response.data\n  },\n\n  /**\n   * 获取 ARL 指纹详情\n   */\n  async getARLFingerprint(id: number): Promise<ARLFingerprint> {\n    const response = await apiClient.get(`/fingerprints/arl/${id}/`)\n    return response.data\n  },\n\n  /**\n   * 创建单条 ARL 指纹\n   */\n  async createARLFingerprint(data: Omit<ARLFingerprint, 'id' | 'createdAt'>): Promise<ARLFingerprint> {\n    const response = await apiClient.post(\"/fingerprints/arl/\", data)\n    return response.data\n  },\n\n  /**\n   * 更新 ARL 指纹\n   */\n  async updateARLFingerprint(id: number, data: Partial<ARLFingerprint>): Promise<ARLFingerprint> {\n    const response = await apiClient.put(`/fingerprints/arl/${id}/`, data)\n    return response.data\n  },\n\n  /**\n   * 删除单条 ARL 指纹\n   */\n  async deleteARLFingerprint(id: number): Promise<void> {\n    await apiClient.delete(`/fingerprints/arl/${id}/`)\n  },\n\n  /**\n   * 文件导入 ARL 指纹（支持 YAML 和 JSON）\n   */\n  async importARLFingerprints(file: File): Promise<BatchCreateResponse> {\n    const formData = new FormData()\n    formData.append(\"file\", file)\n    const response = await apiClient.post(\"/fingerprints/arl/import_file/\", formData, {\n      headers: { \"Content-Type\": \"multipart/form-data\" }\n    })\n    return response.data\n  },\n\n  /**\n   * 批量删除 ARL 指纹\n   */\n  async bulkDeleteARLFingerprints(ids: number[]): Promise<BulkDeleteResponse> {\n    const response = await apiClient.post(\"/fingerprints/arl/bulk-delete/\", { ids })\n    return response.data\n  },\n\n  /**\n   * 删除所有 ARL 指纹\n   */\n  async deleteAllARLFingerprints(): Promise<BulkDeleteResponse> {\n    const response = await apiClient.post(\"/fingerprints/arl/delete-all/\")\n    return response.data\n  },\n\n  /**\n   * 导出 ARL 指纹（YAML 格式）\n   */\n  async exportARLFingerprints(): Promise<Blob> {\n    const response = await apiClient.get(\"/fingerprints/arl/export/\", {\n      responseType: \"blob\"\n    })\n    return response.data\n  },\n\n  /**\n   * 获取 ARL 指纹数量\n   */\n  async getARLCount(): Promise<number> {\n    const response = await apiClient.get(\"/fingerprints/arl/\", { params: { pageSize: 1 } })\n    return response.data.total || 0\n  },\n\n  // ==================== 统计 ====================\n\n  /**\n   * 获取所有指纹库统计\n   */\n  async getStats(): Promise<FingerprintStats> {\n    // 并行获取各指纹库数量\n    const [eholeCount, gobyCount, wappalyzerCount, fingersCount, fingerprinthubCount, arlCount] = await Promise.all([\n      this.getEholeCount(),\n      this.getGobyCount(),\n      this.getWappalyzerCount(),\n      this.getFingersCount(),\n      this.getFingerPrintHubCount(),\n      this.getARLCount(),\n    ])\n    return {\n      ehole: eholeCount,\n      goby: gobyCount,\n      wappalyzer: wappalyzerCount,\n      fingers: fingersCount,\n      fingerprinthub: fingerprinthubCount,\n      arl: arlCount,\n    }\n  },\n}\n"
  },
  {
    "path": "frontend/services/global-blacklist.service.ts",
    "content": "import { api } from '@/lib/api-client'\nimport { USE_MOCK, mockDelay, getMockGlobalBlacklist, updateMockGlobalBlacklist } from '@/mock'\n\nexport interface GlobalBlacklistResponse {\n  patterns: string[]\n}\n\nexport interface UpdateGlobalBlacklistRequest {\n  patterns: string[]\n}\n\n/**\n * Get global blacklist rules\n */\nexport async function getGlobalBlacklist(): Promise<GlobalBlacklistResponse> {\n  if (USE_MOCK) {\n    await mockDelay()\n    return getMockGlobalBlacklist()\n  }\n  const res = await api.get<GlobalBlacklistResponse>('/blacklist/rules/')\n  return res.data\n}\n\n/**\n * Update global blacklist rules (full replace)\n */\nexport async function updateGlobalBlacklist(data: UpdateGlobalBlacklistRequest): Promise<GlobalBlacklistResponse> {\n  if (USE_MOCK) {\n    await mockDelay()\n    return updateMockGlobalBlacklist(data)\n  }\n  const res = await api.put<GlobalBlacklistResponse>('/blacklist/rules/', data)\n  return res.data\n}\n"
  },
  {
    "path": "frontend/services/ip-address.service.ts",
    "content": "import { api } from \"@/lib/api-client\"\nimport type { GetIPAddressesParams, GetIPAddressesResponse } from \"@/types/ip-address.types\"\n\n// Bulk delete response type\nexport interface BulkDeleteResponse {\n  deletedCount: number\n}\n\nexport class IPAddressService {\n  /**\n   * Bulk delete IP addresses\n   * POST /api/assets/ip-addresses/bulk-delete/\n   * Note: IP addresses are aggregated, so we pass IP strings instead of IDs\n   */\n  static async bulkDelete(ips: string[]): Promise<BulkDeleteResponse> {\n    const response = await api.post<BulkDeleteResponse>(\n      `/assets/ip-addresses/bulk-delete/`,\n      { ips }\n    )\n    return response.data\n  }\n\n  static async getTargetIPAddresses(\n    targetId: number,\n    params?: GetIPAddressesParams\n  ): Promise<GetIPAddressesResponse> {\n    const response = await api.get<GetIPAddressesResponse>(`/targets/${targetId}/ip-addresses/`, {\n      params: {\n        page: params?.page || 1,\n        pageSize: params?.pageSize || 10,\n        ...(params?.filter && { filter: params.filter }),\n      },\n    })\n    return response.data\n  }\n\n  static async getScanIPAddresses(\n    scanId: number,\n    params?: GetIPAddressesParams\n  ): Promise<GetIPAddressesResponse> {\n    const response = await api.get<GetIPAddressesResponse>(`/scans/${scanId}/ip-addresses/`, {\n      params: {\n        page: params?.page || 1,\n        pageSize: params?.pageSize || 10,\n        ...(params?.filter && { filter: params.filter }),\n      },\n    })\n    return response.data\n  }\n\n  /** Export all IP addresses by target (text file, one per line) */\n  static async exportIPAddressesByTargetId(targetId: number): Promise<Blob> {\n    const response = await api.get<Blob>(`/targets/${targetId}/ip-addresses/export/`, {\n      responseType: 'blob',\n    })\n    return response.data\n  }\n\n  /** Export all IP addresses by scan task (text file, one per line) */\n  static async exportIPAddressesByScanId(scanId: number): Promise<Blob> {\n    const response = await api.get<Blob>(`/scans/${scanId}/ip-addresses/export/`, {\n      responseType: 'blob',\n    })\n    return response.data\n  }\n}\n"
  },
  {
    "path": "frontend/services/notification-settings.service.ts",
    "content": "import { api } from '@/lib/api-client'\nimport type {\n  GetNotificationSettingsResponse,\n  UpdateNotificationSettingsRequest,\n  UpdateNotificationSettingsResponse,\n} from '@/types/notification-settings.types'\n\nexport class NotificationSettingsService {\n  static async getSettings(): Promise<GetNotificationSettingsResponse> {\n    const res = await api.get<GetNotificationSettingsResponse>('/settings/notifications/')\n    return res.data\n  }\n\n  static async updateSettings(\n    data: UpdateNotificationSettingsRequest\n  ): Promise<UpdateNotificationSettingsResponse> {\n    const res = await api.put<UpdateNotificationSettingsResponse>('/settings/notifications/', data)\n    return res.data\n  }\n}\n"
  },
  {
    "path": "frontend/services/notification.service.ts",
    "content": "/**\n * Notification service\n * Handles all notification-related API requests\n */\n\nimport api from '@/lib/api-client'\nimport type {\n  Notification,\n  GetNotificationsRequest,\n  GetNotificationsResponse,\n} from '@/types/notification.types'\nimport { USE_MOCK, mockDelay, getMockNotifications, getMockUnreadCount } from '@/mock'\n\nexport class NotificationService {\n  /**\n   * Get notification list\n   * 后端返回分页格式: { results, total, page, pageSize, totalPages }\n   */\n  static async getNotifications(\n    params: GetNotificationsRequest = {}\n  ): Promise<GetNotificationsResponse> {\n    if (USE_MOCK) {\n      await mockDelay()\n      return getMockNotifications(params)\n    }\n    const response = await api.get<GetNotificationsResponse>('/notifications/', {\n      params,\n    })\n    return response.data\n  }\n\n  /**\n   * Mark all notifications as read\n   * 后端返回: { updated: number }\n   */\n  static async markAllAsRead(): Promise<{ updated: number }> {\n    if (USE_MOCK) {\n      await mockDelay()\n      return { updated: 2 }\n    }\n    const response = await api.post<{ updated: number }>('/notifications/mark-all-as-read/')\n    return response.data\n  }\n\n  /**\n   * Get unread notification count\n   * 后端返回: { count: number }\n   */\n  static async getUnreadCount(): Promise<{ count: number }> {\n    if (USE_MOCK) {\n      await mockDelay()\n      return getMockUnreadCount()\n    }\n    const response = await api.get<{ count: number }>('/notifications/unread-count/')\n    return response.data\n  }\n}\n"
  },
  {
    "path": "frontend/services/nuclei-git.service.ts",
    "content": "import { api } from \"@/lib/api-client\"\nimport type {\n  GetNucleiGitSettingsResponse,\n  UpdateNucleiGitSettingsRequest,\n  UpdateNucleiGitSettingsResponse,\n} from \"@/types/nuclei-git.types\"\n\nexport class NucleiGitService {\n  static async getSettings(): Promise<GetNucleiGitSettingsResponse> {\n    const res = await api.get<GetNucleiGitSettingsResponse>(\"/settings/nuclei-templates-git/\")\n    return res.data\n  }\n\n  static async updateSettings(\n    data: UpdateNucleiGitSettingsRequest\n  ): Promise<UpdateNucleiGitSettingsResponse> {\n    const res = await api.put<UpdateNucleiGitSettingsResponse>(\"/settings/nuclei-templates-git/\", data)\n    return res.data\n  }\n}\n"
  },
  {
    "path": "frontend/services/nuclei-repo.api.ts",
    "content": "/**\n * Nuclei template repository API\n */\n\nimport { api } from \"@/lib/api-client\"\n\nconst BASE_URL = \"/nuclei/repos/\"\n\nexport interface NucleiRepoResponse {\n  id: number\n  name: string\n  repoUrl: string\n  localPath: string\n  commitHash: string | null\n  lastSyncedAt: string | null\n  createdAt: string\n  updatedAt: string\n}\n\nexport interface CreateRepoPayload {\n  name: string\n  repoUrl: string\n}\n\nexport interface UpdateRepoPayload {\n  repoUrl?: string\n}\n\nexport interface TemplateTreeResponse {\n  roots: Array<{\n    type: \"folder\" | \"file\"\n    name: string\n    path: string\n    children?: Array<{\n      type: \"folder\" | \"file\"\n      name: string\n      path: string\n      children?: unknown[]\n    }>\n  }>\n}\n\nexport interface TemplateContentResponse {\n  path: string\n  name: string\n  content: string\n}\n\n/** Paginated response format */\ninterface PaginatedResponse<T> {\n  results: T[]\n  total: number\n  page: number\n  pageSize: number\n  totalPages: number\n}\n\nexport const nucleiRepoApi = {\n  /** Get repository list */\n  listRepos: async (): Promise<NucleiRepoResponse[]> => {\n    // Repositories are usually not many, get all\n    const response = await api.get<PaginatedResponse<NucleiRepoResponse>>(BASE_URL, {\n      params: { pageSize: 1000 }\n    })\n    // Backend returns paginated format, take results array\n    return response.data.results\n  },\n\n  /** Get single repository */\n  getRepo: async (repoId: number): Promise<NucleiRepoResponse> => {\n    const response = await api.get<NucleiRepoResponse>(`${BASE_URL}${repoId}/`)\n    return response.data\n  },\n\n  /** Create repository */\n  createRepo: async (payload: CreateRepoPayload): Promise<NucleiRepoResponse> => {\n    const response = await api.post<NucleiRepoResponse>(BASE_URL, payload)\n    return response.data\n  },\n\n  /** Update repository (partial update) */\n  updateRepo: async (repoId: number, payload: UpdateRepoPayload): Promise<NucleiRepoResponse> => {\n    const response = await api.patch<NucleiRepoResponse>(`${BASE_URL}${repoId}/`, payload)\n    return response.data\n  },\n\n  /** Delete repository */\n  deleteRepo: async (repoId: number): Promise<void> => {\n    await api.delete(`${BASE_URL}${repoId}/`)\n  },\n\n  /** Refresh repository (Git clone/pull) */\n  refreshRepo: async (repoId: number): Promise<{ message: string; result: unknown }> => {\n    const response = await api.post<{ message: string; result: unknown }>(\n      `${BASE_URL}${repoId}/refresh/`\n    )\n    return response.data\n  },\n\n  /** Get template directory tree */\n  getTemplateTree: async (repoId: number): Promise<TemplateTreeResponse> => {\n    const response = await api.get<TemplateTreeResponse>(\n      `${BASE_URL}${repoId}/templates/tree/`\n    )\n    return response.data\n  },\n\n  /** Get template content */\n  getTemplateContent: async (repoId: number, path: string): Promise<TemplateContentResponse> => {\n    const response = await api.get<TemplateContentResponse>(\n      `${BASE_URL}${repoId}/templates/content/`,\n      { params: { path } }\n    )\n    return response.data\n  },\n}\n"
  },
  {
    "path": "frontend/services/nuclei.service.ts",
    "content": "import { api } from \"@/lib/api-client\"\nimport type {\n  NucleiTemplateTreeNode,\n  NucleiTemplateContent,\n  NucleiTemplateTreeResponse,\n  UploadNucleiTemplatePayload,\n  SaveNucleiTemplatePayload,\n} from \"@/types/nuclei.types\"\n\nexport async function getNucleiTemplateTree(): Promise<NucleiTemplateTreeNode[]> {\n  const response = await api.get<NucleiTemplateTreeResponse>(\"/nuclei/templates/tree/\")\n  return response.data.roots || []\n}\n\nexport async function getNucleiTemplateContent(path: string): Promise<NucleiTemplateContent> {\n  const response = await api.get<NucleiTemplateContent>(\"/nuclei/templates/content/\", {\n    params: { path },\n  })\n  return response.data\n}\n\nexport async function refreshNucleiTemplates(): Promise<void> {\n  await api.post(\"/nuclei/templates/refresh/\")\n}\n\nexport async function saveNucleiTemplate(payload: SaveNucleiTemplatePayload): Promise<void> {\n  await api.post(\"/nuclei/templates/save/\", payload)\n}\n\nexport async function uploadNucleiTemplate(payload: UploadNucleiTemplatePayload): Promise<void> {\n  const formData = new FormData()\n  formData.append(\"scope\", payload.scope)\n  formData.append(\"file\", payload.file)\n\n  await api.post(\"/nuclei/templates/upload/\", formData, {\n    headers: {\n      \"Content-Type\": undefined,\n    },\n  })\n}\n"
  },
  {
    "path": "frontend/services/organization.service.ts",
    "content": "import { api } from \"@/lib/api-client\"\nimport type { Organization, OrganizationsResponse } from \"@/types/organization.types\"\nimport { USE_MOCK, mockDelay, getMockOrganizations, mockOrganizations } from '@/mock'\n\n\nexport class OrganizationService {\n  // ========== Organization basic operations ==========\n\n  /**\n   * Get organization list\n   * @param params - Query parameter object\n   * @param params.page - Current page number, 1-based\n   * @param params.pageSize - Page size\n   * @returns Promise<OrganizationsResponse<Organization>>\n   * @description Backend is fixed to sort by update time in descending order, does not support custom sorting\n   */\n  static async getOrganizations(params?: {\n    page?: number\n    pageSize?: number\n    search?: string\n  }): Promise<OrganizationsResponse<Organization>> {\n    if (USE_MOCK) {\n      await mockDelay()\n      return getMockOrganizations(params)\n    }\n    const response = await api.get<OrganizationsResponse<Organization>>(\n      '/organizations/',\n      { params }\n    )\n    return response.data\n  }\n\n  /**\n   * Get single organization details\n   * @param id - Organization ID\n   * @returns Promise<Organization>\n   */\n  static async getOrganizationById(id: string | number): Promise<Organization> {\n    if (USE_MOCK) {\n      await mockDelay()\n      const org = mockOrganizations.find(o => o.id === Number(id))\n      if (!org) throw new Error('Organization not found')\n      return org\n    }\n    const response = await api.get<Organization>(`/organizations/${id}/`)\n    return response.data\n  }\n\n  /**\n   * Get organization's target list\n   * @param id - Organization ID\n   * @param params - Query parameters\n   * @returns Promise<any>\n   */\n  static async getOrganizationTargets(id: string | number, params?: {\n    page?: number\n    pageSize?: number\n    search?: string\n  }): Promise<any> {\n    const response = await api.get<any>(\n      `/organizations/${id}/targets/`,\n      { params }\n    )\n    return response.data\n  }\n\n  /**\n   * Create new organization\n   * @param data - Organization information object\n   * @param data.name - Organization name\n   * @param data.description - Organization description\n   * @returns Promise<Organization> - Organization information object after successful creation\n   */\n  static async createOrganization(data: {\n    name: string\n    description: string\n  }): Promise<Organization> {\n    const response = await api.post<Organization>('/organizations/', data)\n    return response.data\n  }\n\n  /**\n   * Update organization information\n   * @param data - Organization information object\n   * @param data.id - Organization ID, number or string type\n   * @param data.name - Organization name\n   * @param data.description - Organization description\n   * @returns Promise<Organization> - Organization information object after successful update\n   */\n  static async updateOrganization(data: {\n    id: string | number\n    name: string\n    description: string\n  }): Promise<Organization> {\n    const response = await api.put<Organization>(`/organizations/${data.id}/`, {\n      name: data.name,\n      description: data.description\n    })\n    return response.data\n  }\n  /**\n   * Delete organization (using separate DELETE API)\n   * \n   * @param id - Organization ID, number type\n   * @returns Promise<Delete response>\n   */\n  static async deleteOrganization(id: number): Promise<{\n    message: string\n    organizationId: number\n    organizationName: string\n    deletedCount: number\n    deletedOrganizations: string[]\n    detail: {\n      phase1: string\n      phase2: string\n    }\n  }> {\n    const response = await api.delete<{\n      message: string\n      organizationId: number\n      organizationName: string\n      deletedCount: number\n      deletedOrganizations: string[]\n      detail: {\n        phase1: string\n        phase2: string\n      }\n    }>(`/organizations/${id}/`)\n    return response.data\n  }\n\n  /**\n   * Batch delete organizations\n   * @param organizationIds - Array of organization IDs, number type\n   * @returns Promise<{ message: string; deletedOrganizationCount: number }>\n   * \n   * Note: Deleting organizations will not delete domain entities, only unlink associations\n   */\n  static async batchDeleteOrganizations(organizationIds: number[]): Promise<{\n    message: string\n    deletedCount: number\n    deletedOrganizations: string[]\n  }> {\n    const response = await api.post<{\n      message: string\n      deletedCount: number\n      deletedOrganizations: string[]\n    }>('/organizations/bulk-delete/', {\n      ids: organizationIds  // Backend expects 'ids' parameter\n    })\n    return response.data\n  }\n\n  // ========== Organization and target association operations ==========\n\n  /**\n   * Link target to organization (single)\n   * @param data - Link request object\n   * @param data.organizationId - Organization ID\n   * @param data.targetId - Target ID\n   * @returns Promise<{ message: string }>\n   */\n  static async linkTargetToOrganization(data: {\n    organizationId: number\n    targetId: number\n  }): Promise<{ message: string }> {\n    const response = await api.post<{ message: string }>(\n      `/organizations/${data.organizationId}/targets/`,\n      {\n        targetId: data.targetId  // Interceptor will convert to target_id\n      }\n    )\n    return response.data\n  }\n\n  /**\n   * Remove targets from organization (batch)\n   * @param data - Remove request object\n   * @param data.organizationId - Organization ID\n   * @param data.targetIds - Array of target IDs\n   * @returns Promise<{ unlinkedCount: number; message: string }>\n   */\n  static async unlinkTargetsFromOrganization(data: {\n    organizationId: number\n    targetIds: number[]\n  }): Promise<{ unlinkedCount: number; message: string }> {\n    const response = await api.post<{ unlinkedCount: number; message: string }>(\n      `/organizations/${data.organizationId}/unlink_targets/`,\n      {\n        targetIds: data.targetIds  // Interceptor will convert to target_ids\n      }\n    )\n    return response.data\n  }\n\n}"
  },
  {
    "path": "frontend/services/scan.service.ts",
    "content": "import { api } from '@/lib/api-client'\nimport type { \n  GetScansParams, \n  GetScansResponse,\n  InitiateScanRequest,\n  InitiateScanResponse,\n  QuickScanRequest,\n  QuickScanResponse,\n  ScanRecord\n} from '@/types/scan.types'\nimport { USE_MOCK, mockDelay, getMockScans, getMockScanById, mockScanStatistics } from '@/mock'\n\n/**\n * Get scan list\n */\nexport async function getScans(params?: GetScansParams): Promise<GetScansResponse> {\n  if (USE_MOCK) {\n    await mockDelay()\n    return getMockScans(params)\n  }\n  const res = await api.get<GetScansResponse>('/scans/', { params })\n  return res.data\n}\n\n/**\n * Get single scan details\n * @param id - Scan ID\n * @returns Scan details\n */\nexport async function getScan(id: number): Promise<ScanRecord> {\n  if (USE_MOCK) {\n    await mockDelay()\n    const scan = getMockScanById(id)\n    if (!scan) throw new Error('Scan not found')\n    return scan\n  }\n  const res = await api.get<ScanRecord>(`/scans/${id}/`)\n  return res.data\n}\n\n/**\n * Initiate scan task (for existing targets/organizations)\n * @param data - Scan request parameters\n * @returns Scan task information\n */\nexport async function initiateScan(data: InitiateScanRequest): Promise<InitiateScanResponse> {\n  const res = await api.post<InitiateScanResponse>('/scans/initiate/', data)\n  return res.data\n}\n\n/**\n * Quick scan (automatically create target and scan immediately)\n * @param data - Quick scan request parameters\n * @returns Scan task information\n */\nexport async function quickScan(data: QuickScanRequest): Promise<QuickScanResponse> {\n  const res = await api.post<QuickScanResponse>('/scans/quick/', data)\n  return res.data\n}\n\n/**\n * Delete single scan record\n * @param id - Scan ID\n */\nexport async function deleteScan(id: number): Promise<void> {\n  await api.delete(`/scans/${id}/`)\n}\n\n/**\n * Bulk delete scan records\n * @param ids - Array of scan IDs\n * @returns Deletion result\n */\nexport async function bulkDeleteScans(ids: number[]): Promise<{ message: string; deletedCount: number }> {\n  const res = await api.post<{ message: string; deletedCount: number }>('/scans/bulk-delete/', { ids })\n  return res.data\n}\n\n/**\n * Stop scan task\n * @param id - Scan ID\n * @returns Operation result\n */\nexport async function stopScan(id: number): Promise<{ message: string; revokedTaskCount: number }> {\n  const res = await api.post<{ message: string; revokedTaskCount: number }>(`/scans/${id}/stop/`)\n  return res.data\n}\n\n/**\n * Scan statistics data type\n */\nexport interface ScanStatistics {\n  total: number\n  running: number\n  completed: number\n  failed: number\n  totalVulns: number\n  totalSubdomains: number\n  totalEndpoints: number\n  totalWebsites: number\n  totalAssets: number\n}\n\n/**\n * Get scan statistics data\n * @returns Statistics data\n */\nexport async function getScanStatistics(): Promise<ScanStatistics> {\n  if (USE_MOCK) {\n    await mockDelay()\n    return mockScanStatistics\n  }\n  const res = await api.get<ScanStatistics>('/scans/statistics/')\n  return res.data\n}\n\n/**\n * Scan log entry type\n */\nexport interface ScanLog {\n  id: number\n  level: 'info' | 'warning' | 'error'\n  content: string\n  createdAt: string\n}\n\n/**\n * Get scan logs response type\n */\nexport interface GetScanLogsResponse {\n  results: ScanLog[]\n  hasMore: boolean\n}\n\n/**\n * Get scan logs params type\n */\nexport interface GetScanLogsParams {\n  afterId?: number\n  limit?: number\n}\n\n/**\n * Get scan logs\n * @param scanId - Scan ID\n * @param params - Query parameters (afterId for cursor, limit for max results)\n * @returns Scan logs with hasMore indicator\n */\nexport async function getScanLogs(scanId: number, params?: GetScanLogsParams): Promise<GetScanLogsResponse> {\n  const res = await api.get<GetScanLogsResponse>(`/scans/${scanId}/logs/`, { params })\n  return res.data\n}\n"
  },
  {
    "path": "frontend/services/scheduled-scan.service.ts",
    "content": "import { api } from '@/lib/api-client'\nimport type {\n  GetScheduledScansResponse,\n  ScheduledScan,\n  CreateScheduledScanRequest,\n  UpdateScheduledScanRequest\n} from '@/types/scheduled-scan.types'\nimport { USE_MOCK, mockDelay, getMockScheduledScans, getMockScheduledScanById } from '@/mock'\n\n/**\n * Get scheduled scan list\n */\nexport async function getScheduledScans(params?: { \n  page?: number\n  pageSize?: number\n  search?: string\n  targetId?: number\n  organizationId?: number \n}): Promise<GetScheduledScansResponse> {\n  if (USE_MOCK) {\n    await mockDelay()\n    return getMockScheduledScans(params)\n  }\n  // Convert camelCase to snake_case for query params (djangorestframework-camel-case doesn't convert query params)\n  const apiParams: Record<string, unknown> = {}\n  if (params?.page) apiParams.page = params.page\n  if (params?.pageSize) apiParams.pageSize = params.pageSize\n  if (params?.search) apiParams.search = params.search\n  if (params?.targetId) apiParams.target_id = params.targetId\n  if (params?.organizationId) apiParams.organization_id = params.organizationId\n  \n  const res = await api.get<GetScheduledScansResponse>('/scheduled-scans/', { params: apiParams })\n  return res.data\n}\n\n/**\n * Get scheduled scan details\n */\nexport async function getScheduledScan(id: number): Promise<ScheduledScan> {\n  if (USE_MOCK) {\n    await mockDelay()\n    const scan = getMockScheduledScanById(id)\n    if (!scan) throw new Error('Scheduled scan not found')\n    return scan\n  }\n  const res = await api.get<ScheduledScan>(`/scheduled-scans/${id}/`)\n  return res.data\n}\n\n/**\n * Create scheduled scan\n */\nexport async function createScheduledScan(data: CreateScheduledScanRequest): Promise<{\n  message: string\n  scheduledScan: ScheduledScan\n}> {\n  const res = await api.post<{ message: string; scheduledScan: ScheduledScan }>('/scheduled-scans/', data)\n  return res.data\n}\n\n/**\n * Update scheduled scan\n */\nexport async function updateScheduledScan(id: number, data: UpdateScheduledScanRequest): Promise<{\n  message: string\n  scheduledScan: ScheduledScan\n}> {\n  const res = await api.put<{ message: string; scheduledScan: ScheduledScan }>(`/scheduled-scans/${id}/`, data)\n  return res.data\n}\n\n/**\n * Delete scheduled scan\n */\nexport async function deleteScheduledScan(id: number): Promise<{ message: string; id: number }> {\n  const res = await api.delete<{ message: string; id: number }>(`/scheduled-scans/${id}/`)\n  return res.data\n}\n\n/**\n * Toggle scheduled scan enabled status\n */\nexport async function toggleScheduledScan(id: number, isEnabled: boolean): Promise<{\n  message: string\n  scheduledScan: ScheduledScan\n}> {\n  const res = await api.post<{ message: string; scheduledScan: ScheduledScan }>(\n    `/scheduled-scans/${id}/toggle/`,\n    { isEnabled }\n  )\n  return res.data\n}\n\n"
  },
  {
    "path": "frontend/services/screenshot.service.ts",
    "content": "import { api } from \"@/lib/api-client\"\n\n// Screenshot type\nexport interface Screenshot {\n  id: number\n  url: string\n  statusCode: number | null\n  createdAt: string\n  updatedAt: string\n}\n\n// Screenshot snapshot type (for scan results)\nexport interface ScreenshotSnapshot {\n  id: number\n  url: string\n  statusCode: number | null\n  createdAt: string\n}\n\n// Paginated response\nexport interface PaginatedResponse<T> {\n  results: T[]\n  total: number\n  page: number\n  pageSize: number\n  totalPages: number\n}\n\n// Bulk delete response\nexport interface BulkDeleteResponse {\n  deletedCount: number\n}\n\n/**\n * Screenshot related API service\n */\nexport class ScreenshotService {\n  /**\n   * Get screenshots by target\n   * GET /api/targets/{target_id}/screenshots/\n   */\n  static async getByTarget(\n    targetId: number,\n    params?: { page?: number; pageSize?: number; filter?: string }\n  ): Promise<PaginatedResponse<Screenshot>> {\n    const response = await api.get<PaginatedResponse<Screenshot>>(\n      `/targets/${targetId}/screenshots/`,\n      { params }\n    )\n    return response.data\n  }\n\n  /**\n   * Get screenshot image URL\n   * Returns the URL to fetch the image binary\n   */\n  static getImageUrl(screenshotId: number): string {\n    return `/api/assets/screenshots/${screenshotId}/image/`\n  }\n\n  /**\n   * Get screenshot snapshots by scan\n   * GET /api/scans/{scan_id}/screenshots/\n   */\n  static async getByScan(\n    scanId: number,\n    params?: { page?: number; pageSize?: number; filter?: string }\n  ): Promise<PaginatedResponse<ScreenshotSnapshot>> {\n    const response = await api.get<PaginatedResponse<ScreenshotSnapshot>>(\n      `/scans/${scanId}/screenshots/`,\n      { params }\n    )\n    return response.data\n  }\n\n  /**\n   * Get screenshot snapshot image URL\n   */\n  static getSnapshotImageUrl(scanId: number, snapshotId: number): string {\n    return `/api/scans/${scanId}/screenshots/${snapshotId}/image/`\n  }\n\n  /**\n   * Bulk delete screenshots\n   * POST /api/assets/screenshots/bulk-delete/\n   */\n  static async bulkDelete(ids: number[]): Promise<BulkDeleteResponse> {\n    const response = await api.post<BulkDeleteResponse>(\n      `/assets/screenshots/bulk-delete/`,\n      { ids }\n    )\n    return response.data\n  }\n}\n"
  },
  {
    "path": "frontend/services/search.service.ts",
    "content": "import { api } from \"@/lib/api-client\"\nimport type { SearchParams, SearchResponse, AssetType } from \"@/types/search.types\"\n\n/**\n * 资产搜索 API 服务\n * \n * 搜索语法：\n * - field=\"value\"     模糊匹配（ILIKE %value%）\n * - field==\"value\"    精确匹配\n * - field!=\"value\"    不等于\n * - &&                AND 连接\n * - ||                OR 连接\n * \n * 支持的资产类型：\n * - website: 站点（默认）\n * - endpoint: 端点\n * \n * 示例：\n * - host=\"api\" && tech=\"nginx\"\n * - tech=\"vue\" || tech=\"react\"\n * - status==\"200\" && host!=\"test\"\n */\nexport class SearchService {\n  /**\n   * 搜索资产\n   * GET /api/assets/search/\n   */\n  static async search(params: SearchParams): Promise<SearchResponse> {\n    const queryParams = new URLSearchParams()\n    \n    if (params.q) queryParams.append('q', params.q)\n    if (params.asset_type) queryParams.append('asset_type', params.asset_type)\n    if (params.page) queryParams.append('page', params.page.toString())\n    if (params.pageSize) queryParams.append('pageSize', params.pageSize.toString())\n    \n    const response = await api.get<SearchResponse>(\n      `/assets/search/?${queryParams.toString()}`\n    )\n    return response.data\n  }\n\n  /**\n   * 导出搜索结果为 CSV\n   * GET /api/assets/search/export/\n   * \n   * 使用浏览器原生下载，支持显示下载进度\n   */\n  static async exportCSV(query: string, assetType: AssetType): Promise<void> {\n    const queryParams = new URLSearchParams()\n    queryParams.append('q', query)\n    queryParams.append('asset_type', assetType)\n    \n    // 直接打开下载链接，使用浏览器原生下载管理器\n    // 这样可以显示下载进度，且不会阻塞页面\n    const downloadUrl = `/api/assets/search/export/?${queryParams.toString()}`\n    window.open(downloadUrl, '_blank')\n  }\n}\n"
  },
  {
    "path": "frontend/services/subdomain.service.ts",
    "content": "import { api } from \"@/lib/api-client\"\nimport type { Subdomain, GetSubdomainsParams, GetSubdomainsResponse, GetAllSubdomainsParams, GetAllSubdomainsResponse, GetSubdomainByIDResponse, BatchCreateSubdomainsResponse } from \"@/types/subdomain.types\"\nimport { USE_MOCK, mockDelay, getMockSubdomains, getMockSubdomainById } from '@/mock'\n\n// Bulk create subdomains response type\nexport interface BulkCreateSubdomainsResponse {\n  message: string\n  createdCount: number\n  skippedCount: number\n  invalidCount: number\n  mismatchedCount: number\n  totalReceived: number\n}\n\nexport class SubdomainService {\n  /**\n   * Bulk create subdomains (bind to target)\n   * POST /api/targets/{target_id}/subdomains/bulk-create/\n   */\n  static async bulkCreateSubdomains(\n    targetId: number,\n    subdomains: string[]\n  ): Promise<BulkCreateSubdomainsResponse> {\n    const response = await api.post<BulkCreateSubdomainsResponse>(\n      `/targets/${targetId}/subdomains/bulk-create/`,\n      { subdomains }\n    )\n    return response.data\n  }\n  // ========== Subdomain basic operations ==========\n\n  /**\n   * Bulk create subdomains (bind to assets)\n   */\n  static async createSubdomains(data: {\n    domains: Array<{\n      name: string\n    }>\n    assetId: number\n  }): Promise<BatchCreateSubdomainsResponse> {\n    const response = await api.post<BatchCreateSubdomainsResponse>('/domains/create/', {\n      domains: data.domains,\n      assetId: data.assetId  // [OK] CamelCase, interceptor converts to asset_id\n    })\n    return response.data\n  }\n\n  /**\n   * Get single subdomain details\n   */\n  static async getSubdomainById(id: string | number): Promise<GetSubdomainByIDResponse> {\n    if (USE_MOCK) {\n      await mockDelay()\n      const subdomain = getMockSubdomainById(Number(id))\n      if (!subdomain) throw new Error('Subdomain not found')\n      return subdomain\n    }\n    const response = await api.get<GetSubdomainByIDResponse>(`/domains/${id}/`)\n    return response.data\n  }\n\n  /**\n   * Update subdomain information (PATCH)\n   */\n  static async updateSubdomain(data: {\n    id: number\n    name?: string\n    description?: string\n  }): Promise<Subdomain> {\n    const requestBody: any = {}\n    if (data.name !== undefined) requestBody.name = data.name\n    if (data.description !== undefined) requestBody.description = data.description\n    const response = await api.patch<Subdomain>(`/domains/${data.id}/`, requestBody)\n    return response.data\n  }\n\n  /** Bulk delete subdomains (supports single or multiple, using unified interface) */\n  static async bulkDeleteSubdomains(\n    ids: number[]\n  ): Promise<{\n    message: string\n    deletedCount: number\n    requestedIds: number[]\n    cascadeDeleted: Record<string, number>\n  }> {\n    const response = await api.post<{\n      message: string\n      deletedCount: number\n      requestedIds: number[]\n      cascadeDeleted: Record<string, number>\n    }>(\n      `/assets/subdomains/bulk-delete/`,\n      { ids }\n    )\n    return response.data\n  }\n\n  /** Delete single subdomain (using separate DELETE API) */\n  static async deleteSubdomain(id: number): Promise<{\n    message: string\n    subdomainId: number\n    subdomainName: string\n    deletedCount: number\n    deletedSubdomains: string[]\n    detail: {\n      phase1: string\n      phase2: string\n    }\n  }> {\n    const response = await api.delete<{\n      message: string\n      subdomainId: number\n      subdomainName: string\n      deletedCount: number\n      deletedSubdomains: string[]\n      detail: {\n        phase1: string\n        phase2: string\n      }\n    }>(`/assets/subdomains/${id}/`)\n    return response.data\n  }\n\n  /** Bulk delete subdomains (alias, compatible with old code) */\n  static async batchDeleteSubdomains(ids: number[]): Promise<{\n    message: string\n    deletedCount: number\n    requestedIds: number[]\n    cascadeDeleted: Record<string, number>\n  }> {\n    return this.bulkDeleteSubdomains(ids)\n  }\n\n  /** Batch remove subdomains from organization */\n  static async batchDeleteSubdomainsFromOrganization(data: {\n    organizationId: number\n    domainIds: number[]\n  }): Promise<{\n    message: string\n    successCount: number\n    failedCount: number\n  }> {\n    const response = await api.post<any>(\n      `/organizations/${data.organizationId}/domains/batch-remove/`,\n      {\n        domainIds: data.domainIds, // Interceptor converts to domain_ids\n      }\n    )\n    return response.data\n  }\n\n  /** Get organization's subdomain list (server-side pagination) */\n  static async getSubdomainsByOrgId(\n    organizationId: number,\n    params?: {\n      page?: number\n      pageSize?: number\n    }\n  ): Promise<GetSubdomainsResponse> {\n    const response = await api.get<GetSubdomainsResponse>(\n      `/organizations/${organizationId}/domains/`,\n      {\n        params: {\n          page: params?.page || 1,\n          pageSize: params?.pageSize || 10,\n        }\n      }\n    )\n    return response.data\n  }\n\n  /** Get all subdomains list (server-side pagination) */\n  static async getAllSubdomains(params?: GetAllSubdomainsParams): Promise<GetAllSubdomainsResponse> {\n    if (USE_MOCK) {\n      await mockDelay()\n      return getMockSubdomains(params)\n    }\n    const response = await api.get<GetAllSubdomainsResponse>('/domains/', {\n      params: {\n        page: params?.page || 1,\n        pageSize: params?.pageSize || 10,\n      }\n    })\n    return response.data\n  }\n\n  /** Get target's subdomain list (supports pagination and filtering) */\n  static async getSubdomainsByTargetId(\n    targetId: number,\n    params?: {\n      page?: number\n      pageSize?: number\n      filter?: string\n    }\n  ): Promise<any> {\n    const response = await api.get(`/targets/${targetId}/subdomains/`, {\n      params: {\n        page: params?.page || 1,\n        pageSize: params?.pageSize || 10,\n        ...(params?.filter && { filter: params.filter }),\n      }\n    })\n    return response.data\n  }\n\n  /** Get scan's subdomain list (supports pagination and filtering) */\n  static async getSubdomainsByScanId(\n    scanId: number,\n    params?: {\n      page?: number\n      pageSize?: number\n      filter?: string\n    }\n  ): Promise<{\n    results: Array<{\n      id: number\n      name: string\n      createdAt: string  // Backend automatically converts to camelCase\n      cname: string[]\n      isCdn: boolean     // Backend automatically converts to camelCase\n      cdnName: string    // Backend automatically converts to camelCase\n      ports: Array<{\n        number: number\n        serviceName: string\n        description: string\n        isUncommon: boolean\n      }>\n      ipAddresses: string[]  // IP address list\n    }>\n    total: number\n    page: number\n    pageSize: number     // Backend automatically converts to camelCase\n    totalPages: number   // Backend automatically converts to camelCase\n  }> {\n    const response = await api.get(`/scans/${scanId}/subdomains/`, {\n      params: {\n        page: params?.page || 1,\n        pageSize: params?.pageSize || 10,\n        ...(params?.filter && { filter: params.filter }),\n      }\n    })\n    return response.data as any\n  }\n\n  /** Export all subdomain names by target (text file, one per line) */\n  static async exportSubdomainsByTargetId(targetId: number): Promise<Blob> {\n    const response = await api.get<Blob>(`/targets/${targetId}/subdomains/export/`, {\n      responseType: 'blob',\n    })\n    return response.data\n  }\n\n  /** Export all subdomain names by scan task (text file, one per line) */\n  static async exportSubdomainsByScanId(scanId: number): Promise<Blob> {\n    const response = await api.get<Blob>(`/scans/${scanId}/subdomains/export/`, {\n      responseType: 'blob',\n    })\n    return response.data\n  }\n}\n"
  },
  {
    "path": "frontend/services/system-log.service.ts",
    "content": "import apiClient from \"@/lib/api-client\"\nimport type { SystemLogResponse, LogFilesResponse } from \"@/types/system-log.types\"\n\nconst BASE_URL = \"/system/logs\"\n\nexport const systemLogService = {\n  /**\n   * 获取日志文件列表\n   */\n  async getLogFiles(): Promise<LogFilesResponse> {\n    const response = await apiClient.get<LogFilesResponse>(`${BASE_URL}/files/`)\n    return response.data\n  },\n\n  /**\n   * 获取日志内容\n   */\n  async getSystemLogs(params?: { file?: string; lines?: number }): Promise<SystemLogResponse> {\n    const searchParams = new URLSearchParams()\n\n    if (params?.file != null) {\n      searchParams.set(\"file\", params.file)\n    }\n    if (params?.lines != null) {\n      searchParams.set(\"lines\", String(params.lines))\n    }\n\n    const query = searchParams.toString()\n    const url = query ? `${BASE_URL}/?${query}` : `${BASE_URL}/`\n\n    const response = await apiClient.get<SystemLogResponse>(url)\n    return response.data\n  },\n}\n"
  },
  {
    "path": "frontend/services/target.service.ts",
    "content": "/**\n * Target Service - Target management API\n */\nimport { api } from '@/lib/api-client'\nimport type {\n  Target,\n  TargetsResponse,\n  CreateTargetRequest,\n  UpdateTargetRequest,\n  BatchDeleteTargetsRequest,\n  BatchDeleteTargetsResponse,\n  BatchCreateTargetsRequest,\n  BatchCreateTargetsResponse,\n} from '@/types/target.types'\nimport { USE_MOCK, mockDelay, getMockTargets, getMockTargetById, getMockTargetBlacklist, updateMockTargetBlacklist } from '@/mock'\n\n/**\n * Get all targets list (paginated)\n */\nexport async function getTargets(page = 1, pageSize = 10, search?: string): Promise<TargetsResponse> {\n  if (USE_MOCK) {\n    await mockDelay()\n    return getMockTargets({ page, pageSize, search })\n  }\n  const response = await api.get<TargetsResponse>('/targets/', {\n    params: {\n      page,\n      pageSize,\n      ...(search && { search }),\n    },\n  })\n  return response.data\n}\n\n/**\n * Get single target details\n */\nexport async function getTargetById(id: number): Promise<Target> {\n  if (USE_MOCK) {\n    await mockDelay()\n    const target = getMockTargetById(id)\n    if (!target) throw new Error('Target not found')\n    return target\n  }\n  const response = await api.get<Target>(`/targets/${id}/`)\n  return response.data\n}\n\n/**\n * Create target\n */\nexport async function createTarget(data: CreateTargetRequest): Promise<Target> {\n  const response = await api.post<Target>('/targets/', data)\n  return response.data\n}\n\n/**\n * Update target\n */\nexport async function updateTarget(id: number, data: UpdateTargetRequest): Promise<Target> {\n  const response = await api.patch<Target>(`/targets/${id}/`, data)\n  return response.data\n}\n\n/**\n * Delete single target (using separate DELETE API)\n */\nexport async function deleteTarget(id: number): Promise<{\n  message: string\n  targetId: number\n  targetName: string\n  deletedCount: number\n  deletedTargets: string[]\n  detail: {\n    phase1: string\n    phase2: string\n  }\n}> {\n  const response = await api.delete<{\n    message: string\n    targetId: number\n    targetName: string\n    deletedCount: number\n    deletedTargets: string[]\n    detail: {\n      phase1: string\n      phase2: string\n    }\n  }>(`/targets/${id}/`)\n  return response.data\n}\n\n/**\n * Batch delete targets\n */\nexport async function batchDeleteTargets(\n  data: BatchDeleteTargetsRequest\n): Promise<BatchDeleteTargetsResponse> {\n  const response = await api.post<BatchDeleteTargetsResponse>('/targets/bulk-delete/', data)\n  return response.data\n}\n\n/**\n * Batch create targets\n */\nexport async function batchCreateTargets(\n  data: BatchCreateTargetsRequest\n): Promise<BatchCreateTargetsResponse> {\n  const response = await api.post<BatchCreateTargetsResponse>('/targets/batch_create/', data)\n  return response.data\n}\n\n/**\n * Get target's organization list\n */\nexport async function getTargetOrganizations(id: number, page = 1, pageSize = 10) {\n  const response = await api.get(`/targets/${id}/organizations/`, { params: { page, pageSize } })\n  return response.data\n}\n\n/**\n * Link organizations to target\n */\nexport async function linkTargetOrganizations(\n  id: number,\n  organizationIds: number[]\n): Promise<{ message: string }> {\n  const response = await api.post<{ message: string }>(`/targets/${id}/organizations/`, { organizationIds })\n  return response.data\n}\n\n/**\n * Unlink target from organizations\n */\nexport async function unlinkTargetOrganizations(\n  id: number,\n  organizationIds: number[]\n): Promise<{ message: string }> {\n  const response = await api.post<{ message: string }>(`/targets/${id}/organizations/unlink/`, { organizationIds })\n  return response.data\n}\n\n/**\n * Get target's endpoint list\n */\nexport async function getTargetEndpoints(\n  id: number,\n  page = 1,\n  pageSize = 10,\n  filter?: string\n): Promise<any> {\n  const response = await api.get(`/targets/${id}/endpoints/`, {\n    params: {\n      page,\n      pageSize,\n      ...(filter && { filter }),\n    },\n  })\n  return response.data\n}\n\n/**\n * Get target's blacklist rules\n */\nexport async function getTargetBlacklist(id: number): Promise<{ patterns: string[] }> {\n  if (USE_MOCK) {\n    await mockDelay()\n    return getMockTargetBlacklist(id)\n  }\n  const response = await api.get<{ patterns: string[] }>(`/targets/${id}/blacklist/`)\n  return response.data\n}\n\n/**\n * Update target's blacklist rules (full replace)\n */\nexport async function updateTargetBlacklist(\n  id: number,\n  patterns: string[]\n): Promise<{ count: number }> {\n  if (USE_MOCK) {\n    await mockDelay()\n    const result = updateMockTargetBlacklist(id, { patterns })\n    return { count: result.patterns.length }\n  }\n  const response = await api.put<{ count: number }>(`/targets/${id}/blacklist/`, { patterns })\n  return response.data\n}\n\n"
  },
  {
    "path": "frontend/services/tool.service.ts",
    "content": "import { api } from \"@/lib/api-client\"\nimport type { Tool, GetToolsResponse, CreateToolRequest, UpdateToolRequest, GetToolsParams } from \"@/types/tool.types\"\n\nexport class ToolService {\n  /**\n   * Get tool list\n   * @param params - Query parameter object\n   * @param params.page - Current page number, 1-based\n   * @param params.pageSize - Page size\n   * @returns Promise<GetToolsResponse>\n   * @description Backend is fixed to sort by update time in descending order, does not support custom sorting\n   */\n  static async getTools(params?: GetToolsParams): Promise<GetToolsResponse> {\n    const response = await api.get<GetToolsResponse>(\n      '/tools/',\n      { params }\n    )\n    return response.data\n  }\n\n  /**\n   * Create new tool\n   * @param data - Tool information object\n   * @param data.name - Tool name\n   * @param data.repoUrl - Repository URL\n   * @param data.version - Version number\n   * @param data.description - Tool description\n   * @returns Promise<{ tool: Tool }>\n   */\n  static async createTool(data: CreateToolRequest): Promise<{ tool: Tool }> {\n    const response = await api.post<{ tool: Tool }>('/tools/create/', data)\n    return response.data\n  }\n\n  /**\n   * Update tool\n   * @param id - Tool ID\n   * @param data - Updated tool information (all fields optional)\n   * @returns Promise<{ tool: Tool }>\n   */\n  static async updateTool(id: number, data: UpdateToolRequest): Promise<{ tool: Tool }> {\n    const response = await api.put<{ tool: Tool }>(`/tools/${id}/`, data)\n    return response.data\n  }\n\n  /**\n   * Delete tool\n   * @param id - Tool ID\n   * @returns Promise<void>\n   */\n  static async deleteTool(id: number): Promise<void> {\n    await api.delete(`/tools/${id}/`)\n  }\n}\n"
  },
  {
    "path": "frontend/services/version.service.ts",
    "content": "import { api } from '@/lib/api-client'\nimport type { VersionInfo, UpdateCheckResult } from '@/types/version.types'\n\nexport class VersionService {\n  static async getVersion(): Promise<VersionInfo> {\n    const res = await api.get<VersionInfo>('/system/version/')\n    return res.data\n  }\n\n  static async checkUpdate(): Promise<UpdateCheckResult> {\n    const res = await api.get<UpdateCheckResult>('/system/check-update/')\n    return res.data\n  }\n}\n"
  },
  {
    "path": "frontend/services/vulnerability.service.ts",
    "content": "import { api } from \"@/lib/api-client\"\nimport type { GetVulnerabilitiesParams, Vulnerability } from \"@/types/vulnerability.types\"\nimport { USE_MOCK, mockDelay, getMockVulnerabilities } from '@/mock'\n\nexport class VulnerabilityService {\n  /** Get all vulnerabilities list (used by global vulnerabilities page) */\n  static async getAllVulnerabilities(\n    params: GetVulnerabilitiesParams,\n    filter?: string,\n  ): Promise<any> {\n    if (USE_MOCK) {\n      await mockDelay()\n      return getMockVulnerabilities(params)\n    }\n    const response = await api.get(`/assets/vulnerabilities/`, {\n      params: { ...params, filter },\n    })\n    return response.data\n  }\n\n  /** Get single vulnerability by ID */\n  static async getVulnerabilityById(id: number): Promise<Vulnerability> {\n    const response = await api.get<Vulnerability>(`/assets/vulnerabilities/${id}/`)\n    return response.data\n  }\n\n  /** Get vulnerability snapshot list by scan task (used by scan history page) */\n  static async getVulnerabilitiesByScanId(\n    scanId: number,\n    params: GetVulnerabilitiesParams,\n    filter?: string,\n  ): Promise<any> {\n    const response = await api.get(`/scans/${scanId}/vulnerabilities/`, {\n      params: { ...params, filter },\n    })\n    return response.data\n  }\n\n  /** Get vulnerability asset list by target (used by target details page) */\n  static async getVulnerabilitiesByTargetId(\n    targetId: number,\n    params: GetVulnerabilitiesParams,\n    filter?: string,\n  ): Promise<any> {\n    const response = await api.get(`/targets/${targetId}/vulnerabilities/`, {\n      params: { ...params, filter },\n    })\n    return response.data\n  }\n}\n"
  },
  {
    "path": "frontend/services/website.service.ts",
    "content": "import { api } from \"@/lib/api-client\"\n\n// Bulk create websites response type\nexport interface BulkCreateWebsitesResponse {\n  message: string\n  createdCount: number\n}\n\n// Bulk delete response type\nexport interface BulkDeleteResponse {\n  deletedCount: number\n}\n\n/**\n * Website related API service\n * All frontend website interface calls should be centralized here\n */\nexport class WebsiteService {\n  /**\n   * Bulk delete websites\n   * POST /api/assets/websites/bulk-delete/\n   */\n  static async bulkDelete(ids: number[]): Promise<BulkDeleteResponse> {\n    const response = await api.post<BulkDeleteResponse>(\n      `/assets/websites/bulk-delete/`,\n      { ids }\n    )\n    return response.data\n  }\n  /**\n   * Bulk create websites (bind to target)\n   * POST /api/targets/{target_id}/websites/bulk-create/\n   */\n  static async bulkCreateWebsites(\n    targetId: number,\n    urls: string[]\n  ): Promise<BulkCreateWebsitesResponse> {\n    const response = await api.post<BulkCreateWebsitesResponse>(\n      `/targets/${targetId}/websites/bulk-create/`,\n      { urls }\n    )\n    return response.data\n  }\n\n  /** Export all website URLs by target (text file, one per line) */\n  static async exportWebsitesByTargetId(targetId: number): Promise<Blob> {\n    const response = await api.get<Blob>(`/targets/${targetId}/websites/export/`, {\n      responseType: \"blob\",\n    })\n    return response.data\n  }\n\n  /** Export all website URLs by scan task (text file, one per line) */\n  static async exportWebsitesByScanId(scanId: number): Promise<Blob> {\n    const response = await api.get<Blob>(`/scans/${scanId}/websites/export/`, {\n      responseType: \"blob\",\n    })\n    return response.data\n  }\n}\n"
  },
  {
    "path": "frontend/services/wordlist.service.ts",
    "content": "import apiClient from \"@/lib/api-client\"\nimport type { GetWordlistsResponse, Wordlist } from \"@/types/wordlist.types\"\n\n// Dictionary (Wordlist) API service\n\n// Get wordlist list\nexport async function getWordlists(page = 1, pageSize = 10): Promise<GetWordlistsResponse> {\n  const response = await apiClient.get<GetWordlistsResponse>(\"/wordlists/\", {\n    params: {\n      page,\n      pageSize,\n    },\n  })\n  return response.data\n}\n\n// Upload wordlist file\nexport async function uploadWordlist(payload: {\n  name: string\n  description?: string\n  file: File\n}): Promise<Wordlist> {\n  const formData = new FormData()\n  formData.append(\"name\", payload.name)\n  if (payload.description) {\n    formData.append(\"description\", payload.description)\n  }\n  formData.append(\"file\", payload.file)\n\n  const response = await apiClient.post<Wordlist>(\"/wordlists/\", formData, {\n    headers: {\n      \"Content-Type\": \"multipart/form-data\",\n    },\n  })\n\n  return response.data\n}\n\n// Delete wordlist\nexport async function deleteWordlist(id: number): Promise<void> {\n  await apiClient.delete(`/wordlists/${id}/`)\n}\n\n// Get wordlist content\nexport async function getWordlistContent(id: number): Promise<string> {\n  const response = await apiClient.get<{ content: string }>(`/wordlists/${id}/content/`)\n  return response.data.content\n}\n\n// Update wordlist content\nexport async function updateWordlistContent(id: number, content: string): Promise<Wordlist> {\n  const response = await apiClient.put<Wordlist>(`/wordlists/${id}/content/`, { content })\n  return response.data\n}\n"
  },
  {
    "path": "frontend/services/worker.service.ts",
    "content": "/**\n * Worker node management API service\n */\n\nimport apiClient from '@/lib/api-client'\nimport type {\n  WorkerNode,\n  WorkersResponse,\n  CreateWorkerRequest,\n  UpdateWorkerRequest,\n} from '@/types/worker.types'\nimport { USE_MOCK, mockDelay, getMockWorkers, getMockWorkerById } from '@/mock'\n\nconst BASE_URL = '/workers'\n\nexport const workerService = {\n  /**\n   * Get Worker list\n   */\n  async getWorkers(page = 1, pageSize = 10): Promise<WorkersResponse> {\n    if (USE_MOCK) {\n      await mockDelay()\n      return getMockWorkers(page, pageSize)\n    }\n    const response = await apiClient.get<WorkersResponse>(\n      `${BASE_URL}/?page=${page}&page_size=${pageSize}`\n    )\n    return response.data\n  },\n\n  /**\n   * Get single Worker details\n   */\n  async getWorker(id: number): Promise<WorkerNode> {\n    if (USE_MOCK) {\n      await mockDelay()\n      const worker = getMockWorkerById(id)\n      if (!worker) throw new Error('Worker not found')\n      return worker\n    }\n    const response = await apiClient.get<WorkerNode>(`${BASE_URL}/${id}/`)\n    return response.data\n  },\n\n  /**\n   * Create Worker node\n   */\n  async createWorker(data: CreateWorkerRequest): Promise<WorkerNode> {\n    const response = await apiClient.post<WorkerNode>(`${BASE_URL}/`, {\n      name: data.name,\n      ip_address: data.ipAddress,\n      ssh_port: data.sshPort ?? 22,\n      username: data.username ?? 'root',\n      password: data.password,\n    })\n    return response.data\n  },\n\n  /**\n   * Update Worker node\n   */\n  async updateWorker(id: number, data: UpdateWorkerRequest): Promise<WorkerNode> {\n    const response = await apiClient.patch<WorkerNode>(`${BASE_URL}/${id}/`, {\n      name: data.name,\n      ssh_port: data.sshPort,\n      username: data.username,\n      password: data.password,\n    })\n    return response.data\n  },\n\n  /**\n   * Delete Worker node\n   */\n  async deleteWorker(id: number): Promise<void> {\n    await apiClient.delete(`${BASE_URL}/${id}/`)\n  },\n\n  /**\n   * Deploy Worker node (placeholder implementation, currently only used to eliminate frontend type errors)\n   */\n  async deployWorker(id: number): Promise<never> {\n    return Promise.reject(new Error(`Worker deploy is not implemented for id=${id}`))\n  },\n\n  /**\n   * Restart Worker\n   */\n  async restartWorker(id: number): Promise<{ message: string }> {\n    const response = await apiClient.post<{ message: string }>(`${BASE_URL}/${id}/restart/`)\n    return response.data\n  },\n\n  /**\n   * Stop Worker\n   */\n  async stopWorker(id: number): Promise<{ message: string }> {\n    const response = await apiClient.post<{ message: string }>(`${BASE_URL}/${id}/stop/`)\n    return response.data\n  },\n}\n"
  },
  {
    "path": "frontend/styles/themes/bubblegum.css",
    "content": "/**\n * Bubblegum 主题 - 粉色泡泡糖风格（亮色）\n */\n[data-theme=\"bubblegum\"] {\n  --background: oklch(0.9399 0.0203 345.6985);\n  --foreground: oklch(0.4712 0 0);\n  --card: oklch(0.9498 0.0500 86.8891);\n  --card-foreground: oklch(0.4712 0 0);\n  --popover: oklch(1.0000 0 0);\n  --popover-foreground: oklch(0.4712 0 0);\n  --primary: oklch(0.6209 0.1801 348.1385);\n  --primary-foreground: oklch(1.0000 0 0);\n  --secondary: oklch(0.8095 0.0694 198.1863);\n  --secondary-foreground: oklch(0.3211 0 0);\n  --muted: oklch(0.8800 0.0504 212.0952);\n  --muted-foreground: oklch(0.5795 0 0);\n  --accent: oklch(0.9195 0.0801 87.6670);\n  --accent-foreground: oklch(0.3211 0 0);\n  --destructive: oklch(0.7091 0.1697 21.9551);\n  --destructive-foreground: oklch(1.0000 0 0);\n  --border: oklch(0.6209 0.1801 348.1385);\n  --input: oklch(0.9189 0 0);\n  --ring: oklch(0.7002 0.1597 350.7532);\n  --chart-1: oklch(0.7002 0.1597 350.7532);\n  --chart-2: oklch(0.8189 0.0799 212.0892);\n  --chart-3: oklch(0.9195 0.0801 87.6670);\n  --chart-4: oklch(0.7998 0.1110 348.1791);\n  --chart-5: oklch(0.6197 0.1899 353.9091);\n  --sidebar: oklch(0.9140 0.0424 343.0913);\n  --sidebar-foreground: oklch(0.3211 0 0);\n  --sidebar-primary: oklch(0.6559 0.2118 354.3084);\n  --sidebar-primary-foreground: oklch(1.0000 0 0);\n  --sidebar-accent: oklch(0.8228 0.1095 346.0184);\n  --sidebar-accent-foreground: oklch(0.3211 0 0);\n  --sidebar-border: oklch(0.9464 0.0327 307.1745);\n  --sidebar-ring: oklch(0.6559 0.2118 354.3084);\n  --font-sans: Poppins, sans-serif;\n  --font-serif: Lora, serif;\n  --font-mono: Fira Code, monospace;\n  --radius: 0.4rem;\n  --shadow-color: hsl(325.78 58.18% 56.86% / 0.5);\n  --shadow-2xs: 3px 3px 0px 0px hsl(325.78 58.18% 56.86% / 0.50);\n  --shadow-xs: 3px 3px 0px 0px hsl(325.78 58.18% 56.86% / 0.50);\n  --shadow-sm: 3px 3px 0px 0px hsl(325.78 58.18% 56.86% / 1.00);\n  --shadow: 3px 3px 0px 0px hsl(325.78 58.18% 56.86% / 1.00);\n  --shadow-md: 3px 3px 0px 0px hsl(325.78 58.18% 56.86% / 1.00);\n  --shadow-lg: 3px 3px 0px 0px hsl(325.78 58.18% 56.86% / 1.00);\n  --shadow-xl: 3px 3px 0px 0px hsl(325.78 58.18% 56.86% / 1.00);\n  --shadow-2xl: 3px 3px 0px 0px hsl(325.78 58.18% 56.86% / 1.00);\n  --tracking-normal: 0em;\n  --spacing: 0.25rem;\n}\n"
  },
  {
    "path": "frontend/styles/themes/clean-slate.css",
    "content": "/**\n * Clean Slate 主题 - 简洁蓝灰风格（亮色）\n */\n[data-theme=\"clean-slate\"] {\n  --background: oklch(0.9842 0.0034 247.8575);\n  --foreground: oklch(0.2795 0.0368 260.0310);\n  --card: oklch(1.0000 0 0);\n  --card-foreground: oklch(0.2795 0.0368 260.0310);\n  --popover: oklch(1.0000 0 0);\n  --popover-foreground: oklch(0.2795 0.0368 260.0310);\n  --primary: oklch(0.5854 0.2041 277.1173);\n  --primary-foreground: oklch(1.0000 0 0);\n  --secondary: oklch(0.9276 0.0058 264.5313);\n  --secondary-foreground: oklch(0.3729 0.0306 259.7328);\n  --muted: oklch(0.9670 0.0029 264.5419);\n  --muted-foreground: oklch(0.5510 0.0234 264.3637);\n  --accent: oklch(0.9299 0.0334 272.7879);\n  --accent-foreground: oklch(0.3729 0.0306 259.7328);\n  --destructive: oklch(0.6368 0.2078 25.3313);\n  --destructive-foreground: oklch(1.0000 0 0);\n  --border: oklch(0.8717 0.0093 258.3382);\n  --input: oklch(0.8717 0.0093 258.3382);\n  --ring: oklch(0.5854 0.2041 277.1173);\n  --chart-1: oklch(0.5854 0.2041 277.1173);\n  --chart-2: oklch(0.5106 0.2301 276.9656);\n  --chart-3: oklch(0.4568 0.2146 277.0229);\n  --chart-4: oklch(0.3984 0.1773 277.3662);\n  --chart-5: oklch(0.3588 0.1354 278.6973);\n  --sidebar: oklch(0.9670 0.0029 264.5419);\n  --sidebar-foreground: oklch(0.2795 0.0368 260.0310);\n  --sidebar-primary: oklch(0.5854 0.2041 277.1173);\n  --sidebar-primary-foreground: oklch(1.0000 0 0);\n  --sidebar-accent: oklch(0.9299 0.0334 272.7879);\n  --sidebar-accent-foreground: oklch(0.3729 0.0306 259.7328);\n  --sidebar-border: oklch(0.8717 0.0093 258.3382);\n  --sidebar-ring: oklch(0.5854 0.2041 277.1173);\n  --font-sans: Inter, sans-serif;\n  --font-serif: Merriweather, serif;\n  --font-mono: JetBrains Mono, monospace;\n  --radius: 0.5rem;\n  --shadow-color: hsl(0 0% 0%);\n  --shadow-2xs: 0px 4px 8px -1px hsl(0 0% 0% / 0.05);\n  --shadow-xs: 0px 4px 8px -1px hsl(0 0% 0% / 0.05);\n  --shadow-sm: 0px 4px 8px -1px hsl(0 0% 0% / 0.10);\n  --shadow: 0px 4px 8px -1px hsl(0 0% 0% / 0.10);\n  --shadow-md: 0px 4px 8px -1px hsl(0 0% 0% / 0.10);\n  --shadow-lg: 0px 4px 8px -1px hsl(0 0% 0% / 0.10);\n  --shadow-xl: 0px 4px 8px -1px hsl(0 0% 0% / 0.10);\n  --shadow-2xl: 0px 4px 8px -1px hsl(0 0% 0% / 0.25);\n  --tracking-normal: 0em;\n  --spacing: 0.25rem;\n}\n"
  },
  {
    "path": "frontend/styles/themes/cosmic-night.css",
    "content": "/**\n * Cosmic Night 主题 - 宇宙紫夜风格（暗色）\n */\n[data-theme=\"cosmic-night\"],\n[data-theme=\"cosmic-night\"].dark {\n  --background: oklch(0.1743 0.0227 283.7998);\n  --foreground: oklch(0.9185 0.0257 285.8834);\n  --card: oklch(0.2284 0.0384 282.9324);\n  --card-foreground: oklch(0.9185 0.0257 285.8834);\n  --popover: oklch(0.2284 0.0384 282.9324);\n  --popover-foreground: oklch(0.9185 0.0257 285.8834);\n  --primary: oklch(0.7162 0.1597 290.3962);\n  --primary-foreground: oklch(0.1743 0.0227 283.7998);\n  --secondary: oklch(0.3139 0.0736 283.4591);\n  --secondary-foreground: oklch(0.8367 0.0849 285.9111);\n  --muted: oklch(0.2710 0.0621 281.4377);\n  --muted-foreground: oklch(0.7166 0.0462 285.1741);\n  --accent: oklch(0.3354 0.0828 280.9705);\n  --accent-foreground: oklch(0.9185 0.0257 285.8834);\n  --destructive: oklch(0.6861 0.2061 14.9941);\n  --destructive-foreground: oklch(1.0000 0 0);\n  --border: oklch(0.3261 0.0597 282.5832);\n  --input: oklch(0.3261 0.0597 282.5832);\n  --ring: oklch(0.7162 0.1597 290.3962);\n  --chart-1: oklch(0.7162 0.1597 290.3962);\n  --chart-2: oklch(0.6382 0.1047 274.9117);\n  --chart-3: oklch(0.7482 0.1235 244.7492);\n  --chart-4: oklch(0.7124 0.0977 186.6761);\n  --chart-5: oklch(0.7546 0.1831 346.8124);\n  --sidebar: oklch(0.2284 0.0384 282.9324);\n  --sidebar-foreground: oklch(0.9185 0.0257 285.8834);\n  --sidebar-primary: oklch(0.7162 0.1597 290.3962);\n  --sidebar-primary-foreground: oklch(0.1743 0.0227 283.7998);\n  --sidebar-accent: oklch(0.3354 0.0828 280.9705);\n  --sidebar-accent-foreground: oklch(0.9185 0.0257 285.8834);\n  --sidebar-border: oklch(0.3261 0.0597 282.5832);\n  --sidebar-ring: oklch(0.7162 0.1597 290.3962);\n  --font-sans: Inter, sans-serif;\n  --font-serif: Georgia, serif;\n  --font-mono: JetBrains Mono, monospace;\n  --radius: 0.5rem;\n  --shadow-color: hsl(240 30% 25%);\n  --shadow-2xs: 0px 4px 10px 0px hsl(240 30% 25% / 0.06);\n  --shadow-xs: 0px 4px 10px 0px hsl(240 30% 25% / 0.06);\n  --shadow-sm: 0px 4px 10px 0px hsl(240 30% 25% / 0.12);\n  --shadow: 0px 4px 10px 0px hsl(240 30% 25% / 0.12);\n  --shadow-md: 0px 4px 10px 0px hsl(240 30% 25% / 0.12);\n  --shadow-lg: 0px 4px 10px 0px hsl(240 30% 25% / 0.12);\n  --shadow-xl: 0px 4px 10px 0px hsl(240 30% 25% / 0.12);\n  --shadow-2xl: 0px 4px 10px 0px hsl(240 30% 25% / 0.30);\n  --tracking-normal: 0em;\n  --spacing: 0.25rem;\n}\n"
  },
  {
    "path": "frontend/styles/themes/cyberpunk-1.css",
    "content": "/**\n * Cyberpunk 主题 - 赛博朋克风格（暗色）\n */\n[data-theme=\"cyberpunk-1\"],\n[data-theme=\"cyberpunk-1\"].dark {\n  --background: oklch(0.1786 0.0167 284.5816);\n  --foreground: oklch(0.9085 0.0052 228.8253);\n  --card: oklch(0.2191 0.0214 284.4920);\n  --card-foreground: oklch(0.9085 0.0052 228.8253);\n  --popover: oklch(0.2191 0.0214 284.4920);\n  --popover-foreground: oklch(0.9085 0.0052 228.8253);\n  --primary: oklch(0.9054 0.1546 194.7689);\n  --primary-foreground:  oklch(0.1786 0.0167 284.5816);\n  --secondary: oklch(0.3579 0.1469 302.2195);\n  --secondary-foreground: oklch(0.9085 0.0052 228.8253);\n  --muted: oklch(0.2973 0.0276 284.5974);\n  --muted-foreground: oklch(0.6854 0.0185 229.1283);\n  --accent: oklch(0.4238 0.1894 310.7570);\n  --accent-foreground: oklch(0.9193 0.1285 195.1501);\n  --destructive: oklch(0.6333 0.2001 24.9320);\n  --destructive-foreground: oklch(0.1786 0.0167 284.5816);\n  --border: oklch(0.3418 0.0333 284.5008);\n  --input: oklch(0.2973 0.0276 284.5974);\n  --ring: oklch(0.9054 0.1546 194.7689);\n  --chart-1: oklch(0.9089 0.1478 194.8663);\n  --chart-2: oklch(0.5817 0.2729 300.2277);\n  --chart-3: oklch(0.6702 0.2462 356.4011);\n  --chart-4: oklch(0.8342 0.1594 79.5067);\n  --chart-5: oklch(0.7323 0.2492 142.4953);\n  --sidebar: oklch(0.1483 0.0109 284.9903);\n  --sidebar-foreground: oklch(0.9392 0.0035 228.7981);\n  --sidebar-primary: oklch(0.9065 0.1525 194.7986);\n  --sidebar-primary-foreground: oklch(0.1483 0.0109 284.9903);\n  --sidebar-accent: oklch(0.4238 0.1894 310.7570);\n  --sidebar-accent-foreground: oklch(0.9276 0.1137 195.3712);\n  --sidebar-border: oklch(0.2973 0.0276 284.5974);\n  --sidebar-ring: oklch(0.9065 0.1525 194.7986);\n  --font-sans: \"Exo 2\", sans-serif;\n  --font-serif: Georgia, serif;\n  --font-mono: \"Hack\", monospace;\n  --radius: 0.2rem;\n  --shadow-color: hsl(220 30% 10%);\n  --shadow-2xs: 0px 4px 12px 0px hsl(220 30% 10% / 0.15);\n  --shadow-xs: 0px 4px 12px 0px hsl(220 30% 10% / 0.15);\n  --shadow-sm: 0px 4px 12px 0px hsl(220 30% 10% / 0.30), 0px 1px 2px -1px hsl(220 30% 10% / 0.30);\n  --shadow: 0px 4px 12px 0px hsl(220 30% 10% / 0.30), 0px 1px 2px -1px hsl(220 30% 10% / 0.30);\n  --shadow-md: 0px 4px 12px 0px hsl(220 30% 10% / 0.30), 0px 2px 4px -1px hsl(220 30% 10% / 0.30);\n  --shadow-lg: 0px 4px 12px 0px hsl(220 30% 10% / 0.30), 0px 4px 6px -1px hsl(220 30% 10% / 0.30);\n  --shadow-xl: 0px 4px 12px 0px hsl(220 30% 10% / 0.30), 0px 8px 10px -1px hsl(220 30% 10% / 0.30);\n  --shadow-2xl: 0px 4px 12px 0px hsl(220 30% 10% / 0.75);\n  --tracking-normal: 0.01em;\n  --spacing: 0.25rem;\n}\n"
  },
  {
    "path": "frontend/styles/themes/eva-01.css",
    "content": "/**\n * EVA-01 初号机主题 - 新世纪福音战士（暗色）\n * 经典紫色和荧光绿配色\n */\n[data-theme=\"eva-01\"],\n[data-theme=\"eva-01\"].dark {\n  --background: oklch(0.12 0.04 300);\n  --foreground: oklch(0.92 0.02 300);\n  --card: oklch(0.18 0.05 300);\n  --card-foreground: oklch(0.92 0.02 300);\n  --popover: oklch(0.18 0.05 300);\n  --popover-foreground: oklch(0.92 0.02 300);\n  --primary: oklch(0.50 0.22 300);\n  --primary-foreground: oklch(0.95 0.01 300);\n  --secondary: oklch(0.75 0.25 145);\n  --secondary-foreground: oklch(0.15 0.03 145);\n  --muted: oklch(0.25 0.06 300);\n  --muted-foreground: oklch(0.65 0.04 300);\n  --accent: oklch(0.25 0.06 300);\n  --accent-foreground: oklch(0.65 0.25 300);\n  --destructive: oklch(0.55 0.25 25);\n  --destructive-foreground: oklch(0.95 0.01 25);\n  --border: oklch(0.30 0.08 300);\n  --input: oklch(0.22 0.06 300);\n  --ring: oklch(0.50 0.22 300);\n  --chart-1: oklch(0.50 0.22 300);\n  --chart-2: oklch(0.80 0.28 145);\n  --chart-3: oklch(0.55 0.25 25);\n  --chart-4: oklch(0.70 0.18 60);\n  --chart-5: oklch(0.60 0.20 250);\n  --sidebar: oklch(0.10 0.035 300);\n  --sidebar-foreground: oklch(0.92 0.02 300);\n  --sidebar-primary: oklch(0.50 0.22 300);\n  --sidebar-primary-foreground: oklch(0.95 0.01 300);\n  --sidebar-accent: oklch(0.80 0.28 145);\n  --sidebar-accent-foreground: oklch(0.12 0.04 145);\n  --sidebar-border: oklch(0.25 0.06 300);\n  --sidebar-ring: oklch(0.50 0.22 300);\n  --font-sans: Geist, sans-serif;\n  --font-serif: Georgia, serif;\n  --font-mono: Geist Mono, monospace;\n  --radius: 0.15rem;\n  --shadow-x: 0px;\n  --shadow-y: 1px;\n  --shadow-blur: 2px;\n  --shadow-spread: 0px;\n  --shadow-opacity: 0.20;\n  --shadow-color: hsl(300 40% 5%);\n  --shadow-2xs: 0px 1px 2px 0px hsl(300 40% 5% / 0.10);\n  --shadow-xs: 0px 1px 2px 0px hsl(300 40% 5% / 0.10);\n  --shadow-sm: 0px 1px 2px 0px hsl(300 40% 5% / 0.20), 0px 1px 2px -1px hsl(300 40% 5% / 0.20);\n  --shadow: 0px 1px 2px 0px hsl(300 40% 5% / 0.20), 0px 1px 2px -1px hsl(300 40% 5% / 0.20);\n  --shadow-md: 0px 1px 2px 0px hsl(300 40% 5% / 0.20), 0px 2px 4px -1px hsl(300 40% 5% / 0.20);\n  --shadow-lg: 0px 1px 2px 0px hsl(300 40% 5% / 0.20), 0px 4px 6px -1px hsl(300 40% 5% / 0.20);\n  --shadow-xl: 0px 1px 2px 0px hsl(300 40% 5% / 0.20), 0px 8px 10px -1px hsl(300 40% 5% / 0.20);\n  --shadow-2xl: 0px 1px 2px 0px hsl(300 40% 5% / 0.50);\n  --tracking-normal: 0em;\n  --spacing: 0.25rem;\n}\n"
  },
  {
    "path": "frontend/styles/themes/index.css",
    "content": "/**\n * 主题文件索引\n * 所有颜色主题都在这里引入\n */\n@import \"./vercel-dark.css\";\n@import \"./violet-bloom.css\";\n@import \"./bubblegum.css\";\n@import \"./quantum-rose.css\";\n@import \"./clean-slate.css\";\n@import \"./cosmic-night.css\";\n@import \"./cyberpunk-1.css\";\n@import \"./eva-01.css\";\n"
  },
  {
    "path": "frontend/styles/themes/quantum-rose.css",
    "content": "/**\n * Quantum Rose 主题 - 玫瑰量子风格（亮色）\n */\n[data-theme=\"quantum-rose\"] {\n  --background: oklch(0.9692 0.0192 343.9344);\n  --foreground: oklch(0.4426 0.1653 352.3762);\n  --card: oklch(0.9837 0.0107 339.3288);\n  --card-foreground: oklch(0.4426 0.1653 352.3762);\n  --popover: oklch(0.9837 0.0107 339.3288);\n  --popover-foreground: oklch(0.4426 0.1653 352.3762);\n  --primary: oklch(0.6002 0.2414 0.1348);\n  --primary-foreground: oklch(1.0000 0 0);\n  --secondary: oklch(0.9230 0.0701 326.1273);\n  --secondary-foreground: oklch(0.4426 0.1653 352.3762);\n  --muted: oklch(0.9429 0.0363 344.2604);\n  --muted-foreground: oklch(0.5740 0.1732 352.0544);\n  --accent: oklch(0.8766 0.0828 344.8849);\n  --accent-foreground: oklch(0.4426 0.1653 352.3762);\n  --destructive: oklch(0.5831 0.1911 6.3410);\n  --destructive-foreground: oklch(1.0000 0 0);\n  --border: oklch(0.8881 0.0747 344.3866);\n  --input: oklch(0.9230 0.0701 326.1273);\n  --ring: oklch(0.6002 0.2414 0.1348);\n  --chart-1: oklch(0.6002 0.2414 0.1348);\n  --chart-2: oklch(0.5979 0.1750 345.0378);\n  --chart-3: oklch(0.6009 0.1243 311.7958);\n  --chart-4: oklch(0.5849 0.1178 283.2937);\n  --chart-5: oklch(0.6479 0.1871 267.9684);\n  --sidebar: oklch(0.9629 0.0227 345.7485);\n  --sidebar-foreground: oklch(0.4426 0.1653 352.3762);\n  --sidebar-primary: oklch(0.6002 0.2414 0.1348);\n  --sidebar-primary-foreground: oklch(1.0000 0 0);\n  --sidebar-accent: oklch(0.8766 0.0828 344.8849);\n  --sidebar-accent-foreground: oklch(0.4426 0.1653 352.3762);\n  --sidebar-border: oklch(0.9311 0.0448 343.3135);\n  --sidebar-ring: oklch(0.6002 0.2414 0.1348);\n  --font-sans: Poppins, sans-serif;\n  --font-serif: Playfair Display, serif;\n  --font-mono: Space Mono, monospace;\n  --radius: 0.5rem;\n  --shadow-color: hsl(330 70% 30% / 0.12);\n  --shadow-2xs: 0px 3px 0px 0px hsl(330 70% 30% / 0.09);\n  --shadow-xs: 0px 3px 0px 0px hsl(330 70% 30% / 0.09);\n  --shadow-sm: 0px 3px 0px 0px hsl(330 70% 30% / 0.18);\n  --shadow: 0px 3px 0px 0px hsl(330 70% 30% / 0.18);\n  --shadow-md: 0px 3px 0px 0px hsl(330 70% 30% / 0.18);\n  --shadow-lg: 0px 3px 0px 0px hsl(330 70% 30% / 0.18);\n  --shadow-xl: 0px 3px 0px 0px hsl(330 70% 30% / 0.18);\n  --shadow-2xl: 0px 3px 0px 0px hsl(330 70% 30% / 0.45);\n  --tracking-normal: 0em;\n  --spacing: 0.25rem;\n}\n"
  },
  {
    "path": "frontend/styles/themes/vercel-dark.css",
    "content": "/**\n * Vercel Dark 主题 - Vercel 暗色风格\n */\n[data-theme=\"vercel-dark\"],\n[data-theme=\"vercel-dark\"].dark {\n  --background: oklch(0 0 0);\n  --foreground: oklch(1 0 0);\n  --card: oklch(0.1400 0 0);\n  --card-foreground: oklch(1 0 0);\n  --popover: oklch(0.1800 0 0);\n  --popover-foreground: oklch(1 0 0);\n  --primary: oklch(1 0 0);\n  --primary-foreground: oklch(0 0 0);\n  --secondary: oklch(0.2500 0 0);\n  --secondary-foreground: oklch(1 0 0);\n  --muted: oklch(0.2300 0 0);\n  --muted-foreground: oklch(0.7200 0 0);\n  --accent: oklch(0.3200 0 0);\n  --accent-foreground: oklch(1 0 0);\n  --destructive: oklch(0.6900 0.2000 23.9100);\n  --destructive-foreground: oklch(0 0 0);\n  --border: oklch(0.2600 0 0);\n  --input: oklch(0.3200 0 0);\n  --ring: oklch(0.7200 0 0);\n  --chart-1: oklch(0.8100 0.1700 75.3500);\n  --chart-2: oklch(0.5800 0.2100 260.8400);\n  --chart-3: oklch(0.5600 0 0);\n  --chart-4: oklch(0.4400 0 0);\n  --chart-5: oklch(0.9200 0 0);\n  --sidebar: oklch(0.1800 0 0);\n  --sidebar-foreground: oklch(1 0 0);\n  --sidebar-primary: oklch(1 0 0);\n  --sidebar-primary-foreground: oklch(0 0 0);\n  --sidebar-accent: oklch(0.3200 0 0);\n  --sidebar-accent-foreground: oklch(1 0 0);\n  --sidebar-border: oklch(0.3200 0 0);\n  --sidebar-ring: oklch(0.7200 0 0);\n  --font-sans: Geist, sans-serif;\n  --font-serif: Georgia, serif;\n  --font-mono: Geist Mono, monospace;\n  --radius: 0.5rem;\n  --shadow-color: hsl(0 0% 0%);\n  --shadow-2xs: 0px 1px 2px 0px hsl(0 0% 0% / 0.09);\n  --shadow-xs: 0px 1px 2px 0px hsl(0 0% 0% / 0.09);\n  --shadow-sm: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 1px 2px -1px hsl(0 0% 0% / 0.18);\n  --shadow: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 1px 2px -1px hsl(0 0% 0% / 0.18);\n  --shadow-md: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 2px 4px -1px hsl(0 0% 0% / 0.18);\n  --shadow-lg: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 4px 6px -1px hsl(0 0% 0% / 0.18);\n  --shadow-xl: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 8px 10px -1px hsl(0 0% 0% / 0.18);\n  --shadow-2xl: 0px 1px 2px 0px hsl(0 0% 0% / 0.45);\n  --tracking-normal: 0em;\n  --spacing: 0.25rem;\n}\n"
  },
  {
    "path": "frontend/styles/themes/vercel.css",
    "content": "[data-theme=\"vercel\"] {\n  --background: oklch(0.9900 0 0);\n  --foreground: oklch(0 0 0);\n  --card: oklch(1 0 0);\n  --card-foreground: oklch(0 0 0);\n  --popover: oklch(0.9900 0 0);\n  --popover-foreground: oklch(0 0 0);\n  --primary: oklch(0 0 0);\n  --primary-foreground: oklch(1 0 0);\n  --secondary: oklch(0.9400 0 0);\n  --secondary-foreground: oklch(0 0 0);\n  --muted: oklch(0.9700 0 0);\n  --muted-foreground: oklch(0.4400 0 0);\n  --accent: oklch(0.9400 0 0);\n  --accent-foreground: oklch(0 0 0);\n  --destructive: oklch(0.6300 0.1900 23.0300);\n  --destructive-foreground: oklch(1 0 0);\n  --border: oklch(0.9200 0 0);\n  --input: oklch(0.9400 0 0);\n  --ring: oklch(0 0 0);\n  --chart-1: oklch(0.8100 0.1700 75.3500);\n  --chart-2: oklch(0.5500 0.2200 264.5300);\n  --chart-3: oklch(0.7200 0 0);\n  --chart-4: oklch(0.9200 0 0);\n  --chart-5: oklch(0.5600 0 0);\n  --sidebar: oklch(0.9900 0 0);\n  --sidebar-foreground: oklch(0 0 0);\n  --sidebar-primary: oklch(0 0 0);\n  --sidebar-primary-foreground: oklch(1 0 0);\n  --sidebar-accent: oklch(0.9400 0 0);\n  --sidebar-accent-foreground: oklch(0 0 0);\n  --sidebar-border: oklch(0.9400 0 0);\n  --sidebar-ring: oklch(0 0 0);\n  --font-sans: Geist, sans-serif;\n  --font-serif: Georgia, serif;\n  --font-mono: Geist Mono, monospace;\n  --radius: 0.5rem;\n  --shadow-x: 0px;\n  --shadow-y: 1px;\n  --shadow-blur: 2px;\n  --shadow-spread: 0px;\n  --shadow-opacity: 0.18;\n  --shadow-color: hsl(0 0% 0%);\n  --shadow-2xs: 0px 1px 2px 0px hsl(0 0% 0% / 0.09);\n  --shadow-xs: 0px 1px 2px 0px hsl(0 0% 0% / 0.09);\n  --shadow-sm: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 1px 2px -1px hsl(0 0% 0% / 0.18);\n  --shadow: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 1px 2px -1px hsl(0 0% 0% / 0.18);\n  --shadow-md: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 2px 4px -1px hsl(0 0% 0% / 0.18);\n  --shadow-lg: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 4px 6px -1px hsl(0 0% 0% / 0.18);\n  --shadow-xl: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 8px 10px -1px hsl(0 0% 0% / 0.18);\n  --shadow-2xl: 0px 1px 2px 0px hsl(0 0% 0% / 0.45);\n  --tracking-normal: 0em;\n  --spacing: 0.25rem;\n}\n\n.dark[data-theme=\"vercel\"],\n[data-theme=\"vercel\"].dark {\n  --background: oklch(0 0 0);\n  --foreground: oklch(1 0 0);\n  --card: oklch(0.1400 0 0);\n  --card-foreground: oklch(1 0 0);\n  --popover: oklch(0.1800 0 0);\n  --popover-foreground: oklch(1 0 0);\n  --primary: oklch(1 0 0);\n  --primary-foreground: oklch(0 0 0);\n  --secondary: oklch(0.2500 0 0);\n  --secondary-foreground: oklch(1 0 0);\n  --muted: oklch(0.2300 0 0);\n  --muted-foreground: oklch(0.7200 0 0);\n  --accent: oklch(0.3200 0 0);\n  --accent-foreground: oklch(1 0 0);\n  --destructive: oklch(0.6900 0.2000 23.9100);\n  --destructive-foreground: oklch(0 0 0);\n  --border: oklch(0.2600 0 0);\n  --input: oklch(0.3200 0 0);\n  --ring: oklch(0.7200 0 0);\n  --chart-1: oklch(0.8100 0.1700 75.3500);\n  --chart-2: oklch(0.5800 0.2100 260.8400);\n  --chart-3: oklch(0.5600 0 0);\n  --chart-4: oklch(0.4400 0 0);\n  --chart-5: oklch(0.9200 0 0);\n  --sidebar: oklch(0.1800 0 0);\n  --sidebar-foreground: oklch(1 0 0);\n  --sidebar-primary: oklch(1 0 0);\n  --sidebar-primary-foreground: oklch(0 0 0);\n  --sidebar-accent: oklch(0.3200 0 0);\n  --sidebar-accent-foreground: oklch(1 0 0);\n  --sidebar-border: oklch(0.3200 0 0);\n  --sidebar-ring: oklch(0.7200 0 0);\n  --font-sans: Geist, sans-serif;\n  --font-serif: Georgia, serif;\n  --font-mono: Geist Mono, monospace;\n  --radius: 0.5rem;\n  --shadow-x: 0px;\n  --shadow-y: 1px;\n  --shadow-blur: 2px;\n  --shadow-spread: 0px;\n  --shadow-opacity: 0.18;\n  --shadow-color: hsl(0 0% 0%);\n  --shadow-2xs: 0px 1px 2px 0px hsl(0 0% 0% / 0.09);\n  --shadow-xs: 0px 1px 2px 0px hsl(0 0% 0% / 0.09);\n  --shadow-sm: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 1px 2px -1px hsl(0 0% 0% / 0.18);\n  --shadow: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 1px 2px -1px hsl(0 0% 0% / 0.18);\n  --shadow-md: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 2px 4px -1px hsl(0 0% 0% / 0.18);\n  --shadow-lg: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 4px 6px -1px hsl(0 0% 0% / 0.18);\n  --shadow-xl: 0px 1px 2px 0px hsl(0 0% 0% / 0.18), 0px 8px 10px -1px hsl(0 0% 0% / 0.18);\n  --shadow-2xl: 0px 1px 2px 0px hsl(0 0% 0% / 0.45);\n}"
  },
  {
    "path": "frontend/styles/themes/violet-bloom.css",
    "content": "/**\n * Violet Bloom 主题 - 紫罗兰花朵风格（亮色）\n */\n[data-theme=\"violet-bloom\"] {\n  --background: oklch(0.9940 0 0);\n  --foreground: oklch(0 0 0);\n  --card: oklch(0.9940 0 0);\n  --card-foreground: oklch(0 0 0);\n  --popover: oklch(0.9911 0 0);\n  --popover-foreground: oklch(0 0 0);\n  --primary: oklch(0.5393 0.2713 286.7462);\n  --primary-foreground: oklch(1.0000 0 0);\n  --secondary: oklch(0.9540 0.0063 255.4755);\n  --secondary-foreground: oklch(0.1344 0 0);\n  --muted: oklch(0.9702 0 0);\n  --muted-foreground: oklch(0.4386 0 0);\n  --accent: oklch(0.9393 0.0288 266.3680);\n  --accent-foreground: oklch(0.5445 0.1903 259.4848);\n  --destructive: oklch(0.6290 0.1902 23.0704);\n  --destructive-foreground: oklch(1.0000 0 0);\n  --border: oklch(0.9300 0.0094 286.2156);\n  --input: oklch(0.9401 0 0);\n  --ring: oklch(0 0 0);\n  --chart-1: oklch(0.7459 0.1483 156.4499);\n  --chart-2: oklch(0.5393 0.2713 286.7462);\n  --chart-3: oklch(0.7336 0.1758 50.5517);\n  --chart-4: oklch(0.5828 0.1809 259.7276);\n  --chart-5: oklch(0.5590 0 0);\n  --sidebar: oklch(0.9777 0.0051 247.8763);\n  --sidebar-foreground: oklch(0 0 0);\n  --sidebar-primary: oklch(0 0 0);\n  --sidebar-primary-foreground: oklch(1.0000 0 0);\n  --sidebar-accent: oklch(0.9401 0 0);\n  --sidebar-accent-foreground: oklch(0 0 0);\n  --sidebar-border: oklch(0.9401 0 0);\n  --sidebar-ring: oklch(0 0 0);\n  --font-sans: Plus Jakarta Sans, sans-serif;\n  --font-serif: Lora, serif;\n  --font-mono: IBM Plex Mono, monospace;\n  --radius: 1.4rem;\n  --shadow-color: hsl(0 0% 0%);\n  --shadow-2xs: 0px 2px 3px 0px hsl(0 0% 0% / 0.08);\n  --shadow-xs: 0px 2px 3px 0px hsl(0 0% 0% / 0.08);\n  --shadow-sm: 0px 2px 3px 0px hsl(0 0% 0% / 0.16), 0px 1px 2px -1px hsl(0 0% 0% / 0.16);\n  --shadow: 0px 2px 3px 0px hsl(0 0% 0% / 0.16), 0px 1px 2px -1px hsl(0 0% 0% / 0.16);\n  --shadow-md: 0px 2px 3px 0px hsl(0 0% 0% / 0.16), 0px 2px 4px -1px hsl(0 0% 0% / 0.16);\n  --shadow-lg: 0px 2px 3px 0px hsl(0 0% 0% / 0.16), 0px 4px 6px -1px hsl(0 0% 0% / 0.16);\n  --shadow-xl: 0px 2px 3px 0px hsl(0 0% 0% / 0.16), 0px 8px 10px -1px hsl(0 0% 0% / 0.16);\n  --shadow-2xl: 0px 2px 3px 0px hsl(0 0% 0% / 0.40);\n  --tracking-normal: -0.025em;\n  --spacing: 0.27rem;\n}\n"
  },
  {
    "path": "frontend/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2017\",\n    \"lib\": [\"dom\", \"dom.iterable\", \"esnext\"],\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"strict\": true,\n    \"noEmit\": true,\n    \"esModuleInterop\": true,\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"bundler\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"jsx\": \"preserve\",\n    \"incremental\": true,\n    \"plugins\": [\n      {\n        \"name\": \"next\"\n      }\n    ],\n    \"paths\": {\n      \"@/*\": [\"./*\"]\n    }\n  },\n  \"include\": [\"next-env.d.ts\", \"**/*.ts\", \"**/*.tsx\", \".next/types/**/*.ts\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  },
  {
    "path": "frontend/types/api-key-settings.types.ts",
    "content": "/**\n * API Key 配置类型定义\n * 用于 subfinder 第三方数据源配置\n */\n\n// 单字段 Provider 配置（hunter, shodan, zoomeye, securitytrails, threatbook, quake）\nexport interface SingleFieldProviderConfig {\n  enabled: boolean\n  apiKey: string\n}\n\n// FOFA Provider 配置（email + apiKey）\nexport interface FofaProviderConfig {\n  enabled: boolean\n  email: string\n  apiKey: string\n}\n\n// Censys Provider 配置（apiId + apiSecret）\nexport interface CensysProviderConfig {\n  enabled: boolean\n  apiId: string\n  apiSecret: string\n}\n\n// 完整的 API Key 配置\nexport interface ApiKeySettings {\n  fofa: FofaProviderConfig\n  hunter: SingleFieldProviderConfig\n  shodan: SingleFieldProviderConfig\n  censys: CensysProviderConfig\n  zoomeye: SingleFieldProviderConfig\n  securitytrails: SingleFieldProviderConfig\n  threatbook: SingleFieldProviderConfig\n  quake: SingleFieldProviderConfig\n}\n\n// Provider 类型\nexport type ProviderKey = keyof ApiKeySettings\n\n// Provider 配置联合类型\nexport type ProviderConfig = FofaProviderConfig | CensysProviderConfig | SingleFieldProviderConfig\n"
  },
  {
    "path": "frontend/types/api-response.types.ts",
    "content": "// Common API response types\n//\n// 新响应格式：\n// - 成功响应：直接返回数据 T（无包装）\n// - 分页响应：{ results: T[], total, page, pageSize, totalPages }\n// - 错误响应：{ error: { code, message?, details? } }\n//\n// 注意：旧的 { code, state, message, data } 格式已废弃\n\n/**\n * 错误响应类型\n */\nexport interface ApiErrorResponse {\n  error: {\n    code: string;\n    message?: string;\n    details?: unknown[];\n  };\n}\n\n/**\n * 旧版 API 响应类型（已废弃，仅保留以向后兼容）\n * @deprecated 请直接使用数据类型 T，后端不再使用此包装格式\n */\nexport interface LegacyApiResponse<T = unknown> {\n  code: string;          // HTTP status code, e.g. \"200\", \"400\", \"500\"\n  state: string;         // Business state, e.g. \"success\", \"error\"\n  message: string;       // Response message\n  data?: T;              // Response data\n}\n\n// Common batch create response data (corresponds to backend BaseBatchCreateResponseData)\n// Applicable to: domains, endpoints and other batch create operations\nexport interface BatchCreateResponse {\n  message: string          // Detailed description, e.g. \"Processed 5 domains, created 3 new, 2 existed, 1 skipped\"\n  requestedCount: number   // Total requested count\n  createdCount: number     // Newly created count\n  existedCount: number     // Already existed count\n  skippedCount?: number    // Skipped count (optional)\n  skippedDomains?: Array<{  // Skipped domains list (optional)\n    name: string\n    reason: string\n  }>\n}\n\n\n// Paginated response type\nexport interface PaginatedResponse<T> {\n  results: T[]\n  total: number\n  page: number\n  pageSize: number\n  totalPages?: number\n}\n"
  },
  {
    "path": "frontend/types/auth.types.ts",
    "content": "/**\n * Authentication related type definitions\n */\n\n// User info\nexport interface User {\n  id: number\n  username: string\n  isStaff: boolean\n  isSuperuser: boolean\n}\n\n// Login request\nexport interface LoginRequest {\n  username: string\n  password: string\n}\n\n// Login response\nexport interface LoginResponse {\n  message: string\n  user: User\n}\n\n// Get current user response\nexport interface MeResponse {\n  authenticated: boolean\n  user: User | null\n}\n\n// Logout response\nexport interface LogoutResponse {\n  message: string\n}\n\n// Change password request\nexport interface ChangePasswordRequest {\n  oldPassword: string\n  newPassword: string\n}\n\n// Change password response\nexport interface ChangePasswordResponse {\n  message: string\n}\n"
  },
  {
    "path": "frontend/types/command.types.ts",
    "content": "import { Tool } from \"./tool.types\"\n\n/**\n * Command model\n */\nexport interface Command {\n  id: number\n  createdAt: string\n  updatedAt: string\n  toolId: number\n  tool?: Tool\n  name: string\n  displayName: string\n  description: string\n  commandTemplate: string\n}\n\n/**\n * Get commands list request parameters\n */\nexport interface GetCommandsRequest {\n  page?: number\n  pageSize?: number\n  toolId?: number\n}\n\n/**\n * Get commands list response\n */\nexport interface GetCommandsResponse {\n  commands: Command[]\n  page: number\n  pageSize: number      // Backend returns camelCase format\n  total: number         // Unified total field\n  totalPages: number    // Backend returns camelCase format\n  // Compatibility fields (backward compatible)\n  page_size?: number\n  total_count?: number\n  total_pages?: number\n}\n\n/**\n * Create command request\n */\nexport interface CreateCommandRequest {\n  toolId: number\n  name: string\n  displayName?: string\n  description?: string\n  commandTemplate: string\n}\n\n/**\n * Update command request\n */\nexport interface UpdateCommandRequest {\n  name?: string\n  displayName?: string\n  description?: string\n  commandTemplate?: string\n}\n\n/**\n * Command response data\n */\nexport interface CommandResponseData {\n  command: Command\n}\n\n/**\n * Batch delete commands response data\n */\nexport interface BatchDeleteCommandsResponseData {\n  deletedCount: number\n}\n"
  },
  {
    "path": "frontend/types/common.types.ts",
    "content": "// Common type definitions\n\n// Pagination info interface\nexport interface PaginationInfo {\n  total: number\n  page: number\n  pageSize: number\n  totalPages: number\n}\n\n// Pagination and sorting parameters interface\nexport interface PaginationParams {\n  page?: number\n  pageSize?: number\n  sortBy?: string    // Sort field: id, name, created_at, updated_at (using snake_case)\n  sortOrder?: \"asc\" | \"desc\"  // Sort direction: asc, desc\n  search?: string    // Search keyword\n}\n\n"
  },
  {
    "path": "frontend/types/dashboard.types.ts",
    "content": "export interface DashboardStats {\n  totalTargets: number\n  totalSubdomains: number\n  totalEndpoints: number\n  totalVulnerabilities: number\n}\n\n/**\n * Asset statistics data (pre-aggregated)\n */\nexport interface VulnBySeverity {\n  critical: number\n  high: number\n  medium: number\n  low: number\n  info: number\n}\n\nexport interface AssetStatistics {\n  totalTargets: number\n  totalSubdomains: number\n  totalIps: number\n  totalEndpoints: number\n  totalWebsites: number\n  totalVulns: number\n  totalAssets: number\n  runningScans: number\n  updatedAt: string | null\n  // Change values\n  changeTargets: number\n  changeSubdomains: number\n  changeIps: number\n  changeEndpoints: number\n  changeWebsites: number\n  changeVulns: number\n  changeAssets: number\n  // Vulnerability severity distribution\n  vulnBySeverity: VulnBySeverity\n}\n\n/**\n * Statistics history data (for line charts)\n */\nexport interface StatisticsHistoryItem {\n  date: string\n  totalTargets: number\n  totalSubdomains: number\n  totalIps: number\n  totalEndpoints: number\n  totalWebsites: number\n  totalVulns: number\n  totalAssets: number\n}\n"
  },
  {
    "path": "frontend/types/data-table.types.ts",
    "content": "import type { ColumnDef, SortingState, VisibilityState, Table, Header, Column, RowData } from \"@tanstack/react-table\"\nimport type { ReactNode } from \"react\"\n\n/**\n * Extend TanStack Table's ColumnMeta type\n * Used to store column metadata such as title\n */\ndeclare module '@tanstack/react-table' {\n  interface ColumnMeta<TData extends RowData, TValue> {\n    /** Column title, used for column header and column visibility control */\n    title?: string\n  }\n}\n\n/**\n * Pagination state\n */\nexport interface PaginationState {\n  pageIndex: number\n  pageSize: number\n}\n\n/**\n * Server-side pagination info\n */\nexport interface PaginationInfo {\n  total: number\n  totalPages: number\n  page: number\n  pageSize: number\n}\n\n/**\n * Filter field definition\n * Note: description is required, consistent with SmartFilterInput component\n */\nexport interface FilterField {\n  key: string\n  label: string\n  description: string\n}\n\n/**\n * Download option\n */\nexport interface DownloadOption {\n  key: string\n  label: string\n  icon?: ReactNode\n  onClick: () => void\n  disabled?: boolean | ((selectedCount: number) => boolean)\n}\n\n/**\n * Delete confirmation dialog configuration\n */\nexport interface DeleteConfirmationConfig {\n  title?: string\n  description?: string | ((count: number) => string)\n  confirmLabel?: string\n  cancelLabel?: string\n}\n\n/**\n * Unified data table component props\n */\nexport interface UnifiedDataTableProps<TData> {\n  // Core data\n  data: TData[]\n  columns: ColumnDef<TData, any>[]\n  getRowId?: (row: TData) => string\n  \n  // Pagination\n  pagination?: PaginationState\n  setPagination?: React.Dispatch<React.SetStateAction<PaginationState>>\n  paginationInfo?: PaginationInfo\n  onPaginationChange?: (pagination: PaginationState) => void\n  hidePagination?: boolean\n  pageSizeOptions?: number[]\n  \n  // Toolbar\n  hideToolbar?: boolean\n  toolbarLeft?: ReactNode\n  toolbarRight?: ReactNode\n  \n  // Search/Filter\n  searchMode?: 'simple' | 'smart'\n  searchPlaceholder?: string\n  searchValue?: string\n  onSearch?: (value: string) => void\n  isSearching?: boolean\n  filterFields?: FilterField[]\n  filterExamples?: string[]\n  \n  // Selection\n  enableRowSelection?: boolean\n  rowSelection?: Record<string, boolean>\n  onRowSelectionChange?: (selection: Record<string, boolean>) => void\n  onSelectionChange?: (selectedRows: TData[]) => void\n  \n  // Bulk operations\n  onBulkDelete?: () => void\n  bulkDeleteLabel?: string\n  showBulkDelete?: boolean\n  \n  // Add operation\n  onAddNew?: () => void\n  onAddHover?: () => void\n  addButtonLabel?: string\n  showAddButton?: boolean\n  \n  // Bulk add operation\n  onBulkAdd?: () => void\n  bulkAddLabel?: string\n  showBulkAdd?: boolean\n  \n  // Download operations\n  downloadOptions?: DownloadOption[]\n  \n  // Column control\n  columnVisibility?: VisibilityState\n  onColumnVisibilityChange?: (visibility: VisibilityState) => void\n  \n  // Sorting\n  sorting?: SortingState\n  onSortingChange?: (sorting: SortingState) => void\n  defaultSorting?: SortingState\n  \n  // Empty state\n  emptyMessage?: string\n  emptyComponent?: ReactNode\n  \n  // Confirmation dialog\n  deleteConfirmation?: DeleteConfirmationConfig\n  \n  // Styling\n  className?: string\n  tableClassName?: string\n  \n  // Auto column sizing\n  /** Enable automatic column width calculation based on content */\n  enableAutoColumnSizing?: boolean\n}\n\n/**\n * Toolbar component props\n */\nexport interface DataTableToolbarProps {\n  // Search\n  searchMode?: 'simple' | 'smart'\n  searchPlaceholder?: string\n  searchValue?: string\n  onSearch?: (value: string) => void\n  isSearching?: boolean\n  filterFields?: FilterField[]\n  filterExamples?: string[]\n  \n  // Left side custom content\n  leftContent?: ReactNode\n  \n  // Right side actions\n  children?: ReactNode\n  \n  // Styling\n  className?: string\n}\n\n/**\n * Pagination component props\n */\nexport interface DataTablePaginationProps<TData> {\n  table: Table<TData>\n  paginationInfo?: PaginationInfo\n  pageSizeOptions?: number[]\n  onPaginationChange?: (pagination: PaginationState) => void\n  className?: string\n}\n\n/**\n * Column header component props\n */\nexport interface DataTableColumnHeaderProps<TData, TValue> {\n  column: Column<TData, TValue>\n  title: string\n  className?: string\n}\n\n/**\n * Column resizer component props\n */\nexport interface ColumnResizerProps<TData> {\n  header: Header<TData, unknown>\n  className?: string\n}\n"
  },
  {
    "path": "frontend/types/directory.types.ts",
    "content": "/**\n * Directory related type definitions\n */\n\nexport interface Directory {\n  id: number\n  url: string\n  status: number | null\n  contentLength: number | null  // Backend returns contentLength\n  words: number | null\n  lines: number | null\n  contentType: string\n  duration: number | null\n  websiteUrl: string  // Backend returns websiteUrl\n  createdAt: string  // Backend returns createdAt\n}\n\nexport interface DirectoryFilters {\n  url?: string\n  status?: number\n  contentType?: string\n}\n\nexport interface DirectoryListResponse {\n  results: Directory[]\n  total: number\n  page: number\n  pageSize: number\n  totalPages: number\n}\n"
  },
  {
    "path": "frontend/types/disk.types.ts",
    "content": "export interface DiskStats {\n  totalBytes: number\n  usedBytes: number\n  freeBytes: number\n  usedPercent: number\n}\n"
  },
  {
    "path": "frontend/types/endpoint.types.ts",
    "content": "// Endpoint specific data type definitions\n// Note: Backend returns snake_case, but api-client.ts automatically converts to camelCase\n\nimport type { BatchCreateResponse } from './api-response.types'\n\nexport interface Endpoint {\n  id: number\n  url: string\n\n  // HTTP metadata (may be null in some scenarios)\n  method?: string\n  statusCode: number | null       // Backend: status_code (pointer type, may be null)\n  title: string\n  contentLength: number | null    // Backend: content_length (pointer type, may be null)\n  contentType?: string | null     // Backend: content_type (optional)\n  responseTime?: number | null    // Backend: response_time (in seconds, optional)\n  gfPatterns?: string[] | null    // Backend: matched_gf_patterns, GF pattern matching results\n\n  // Site/endpoint dimension additional info (used by both asset table and snapshot table)\n  host?: string\n  location?: string\n  webserver?: string\n  responseBody?: string\n  tech?: string[]\n  vhost?: boolean | null\n  responseHeaders?: string\n  createdAt?: string\n\n  // Legacy domain association fields (may not exist in some APIs)\n  domainId?: number               // Backend: domain_id\n  subdomainId?: number            // Backend: subdomain_id\n  domain?: string\n  subdomain?: string\n  updatedAt?: string              // Backend: updated_at\n}\n\n// Endpoint list request parameters\n// Backend sorts by update time descending\nexport interface GetEndpointsRequest {\n  page?: number\n  pageSize?: number\n  search?: string\n}\n\n// Endpoint list response data\n// Note: Backend returns snake_case, but api-client.ts automatically converts to camelCase\nexport interface GetEndpointsResponse {\n  endpoints: Endpoint[]\n  total: number\n  page: number\n  pageSize: number      // Backend returns camelCase format\n  totalPages: number    // Backend returns camelCase format\n  // Compatibility fields (backward compatible)\n  page_size?: number\n  total_pages?: number\n}\n\n// Create Endpoint request parameters\nexport interface CreateEndpointRequest {\n  url: string                      // Required\n  method?: string                  // Optional\n  statusCode?: number | null       // Optional\n  title?: string                   // Optional\n  contentLength?: number | null    // Optional\n  contentType?: string | null      // Optional\n  responseTime?: number | null     // Optional\n  gfPatterns?: string[] | null     // Optional, GF pattern matching results\n  domain?: string                  // Optional\n  subdomain?: string               // Optional\n}\n\n// Create Endpoint response (extends common batch create response)\nexport interface CreateEndpointsResponse extends BatchCreateResponse {\n  // Inherited fields: message, requestedCount, createdCount, existedCount\n}\n\n// Update Endpoint request parameters\nexport interface UpdateEndpointRequest {\n  id: number\n  url?: string\n  method?: string\n  statusCode?: number\n  title?: string\n  contentLength?: number\n  contentType?: string | null\n  responseTime?: number | null\n  gfPatterns?: string[] | null\n  domain?: string\n  subdomain?: string\n}\n\n// Batch delete Endpoint request parameters\nexport interface BatchDeleteEndpointsRequest {\n  endpointIds: number[]\n}\n\n// Batch delete Endpoint response data\nexport interface BatchDeleteEndpointsResponse {\n  message: string\n  deletedCount: number\n}\n"
  },
  {
    "path": "frontend/types/engine.types.ts",
    "content": "/**\n * Scan engine type definitions\n * \n * Backend actual return fields: id, name, configuration, created_at, updated_at\n */\n\n// Scan engine interface\nexport interface ScanEngine {\n  id: number\n  name: string\n  configuration?: string   // YAML configuration content\n  createdAt: string\n  updatedAt: string\n}\n\n// Create engine request\nexport interface CreateEngineRequest {\n  name: string\n  configuration: string\n}\n\n// Update engine request\nexport interface UpdateEngineRequest {\n  name?: string\n  configuration?: string\n}\n\n"
  },
  {
    "path": "frontend/types/fingerprint.types.ts",
    "content": "/**\n * Fingerprint related type definitions\n */\n\n// EHole fingerprint type\nexport interface EholeFingerprint {\n  id: number\n  cms: string\n  method: string\n  location: string\n  keyword: string[]\n  isImportant: boolean\n  type: string\n  createdAt: string\n}\n\n// Goby rule type\nexport interface GobyRule {\n  label: string\n  feature: string\n  is_equal: boolean\n}\n\n// Goby fingerprint type\nexport interface GobyFingerprint {\n  id: number\n  name: string\n  logic: string\n  rule: GobyRule[]\n  createdAt: string\n}\n\n// Wappalyzer fingerprint type\nexport interface WappalyzerFingerprint {\n  id: number\n  name: string\n  cats: number[]\n  cookies: Record<string, string>\n  headers: Record<string, string>\n  scriptSrc: string[]\n  js: string[]\n  implies: string[]\n  meta: Record<string, string[]>\n  html: string[]\n  description: string\n  website: string\n  cpe: string\n  createdAt: string\n}\n\n// Fingers rule type\nexport interface FingersRule {\n  regexps?: {\n    regexp: string\n    group?: number\n  }[]\n  vuln?: string\n  version?: string\n  body?: string\n  header?: string\n  title?: string\n  send_data_type?: string\n  send_data?: string\n  favicon_hash?: string[]\n}\n\n// Fingers fingerprint type\nexport interface FingersFingerprint {\n  id: number\n  name: string\n  link: string\n  rule: FingersRule[]\n  tag: string[]\n  focus: boolean\n  defaultPort: number[]\n  createdAt: string\n}\n\n// FingerPrintHub HTTP matcher type\nexport interface FingerPrintHubHttpMatcher {\n  method?: string\n  path?: string\n  matchers?: {\n    type: string\n    part?: string\n    words?: string[]\n    regex?: string[]\n    status?: number[]\n    condition?: string\n  }[]\n  extractors?: {\n    type: string\n    part?: string\n    regex?: string[]\n    group?: number\n  }[]\n}\n\n// FingerPrintHub metadata type\nexport interface FingerPrintHubMetadata {\n  product?: string\n  vendor?: string\n  verified?: boolean\n  shodan_query?: string\n  fofa_query?: string\n}\n\n// FingerPrintHub fingerprint type\nexport interface FingerPrintHubFingerprint {\n  id: number\n  fpId: string\n  name: string\n  author: string\n  tags: string\n  severity: string\n  metadata: FingerPrintHubMetadata\n  http: FingerPrintHubHttpMatcher[]\n  sourceFile: string\n  createdAt: string\n}\n\n// ARL fingerprint type\nexport interface ARLFingerprint {\n  id: number\n  name: string\n  rule: string\n  createdAt: string\n}\n\n// Batch create response\nexport interface BatchCreateResponse {\n  created: number\n  failed: number\n}\n\n// Bulk delete response\nexport interface BulkDeleteResponse {\n  deleted: number\n}\n\n// Fingerprint statistics\nexport interface FingerprintStats {\n  ehole: number\n  goby: number\n  wappalyzer: number\n  fingers: number\n  fingerprinthub: number\n  arl: number\n}\n"
  },
  {
    "path": "frontend/types/ip-address.types.ts",
    "content": "export interface Port {\n  number: number\n  serviceName: string\n  description: string\n  isUncommon: boolean\n}\n\nexport interface IPAddress {\n  ip: string  // IP address (unique identifier)\n  hosts: string[]  // Associated hostname list\n  ports: number[]  // Associated port list\n  createdAt: string  // First creation time\n}\n\nexport interface GetIPAddressesParams {\n  page?: number\n  pageSize?: number\n  filter?: string  // Smart filter syntax string\n}\n\nexport interface GetIPAddressesResponse {\n  results: IPAddress[]\n  total: number\n  page: number\n  pageSize: number\n  totalPages: number\n}\n"
  },
  {
    "path": "frontend/types/notification-settings.types.ts",
    "content": "export interface DiscordSettings {\n  enabled: boolean\n  webhookUrl: string\n}\n\nexport interface WeComSettings {\n  enabled: boolean\n  webhookUrl: string\n}\n\n/** Notification category - corresponds to backend NotificationCategory */\nexport type NotificationCategory = 'scan' | 'vulnerability' | 'asset' | 'system'\n\n/** Notification switches by category */\nexport interface NotificationCategories {\n  scan: boolean        // Scan tasks\n  vulnerability: boolean // Vulnerability discovery\n  asset: boolean       // Asset discovery\n  system: boolean      // System messages\n}\n\nexport interface NotificationSettings {\n  discord: DiscordSettings\n  wecom: WeComSettings\n  categories: NotificationCategories\n}\n\nexport type GetNotificationSettingsResponse = NotificationSettings\n\nexport type UpdateNotificationSettingsRequest = NotificationSettings\n\nexport interface UpdateNotificationSettingsResponse {\n  message: string\n  discord: DiscordSettings\n  wecom: WeComSettings\n  categories: NotificationCategories\n}\n"
  },
  {
    "path": "frontend/types/notification.types.ts",
    "content": "/**\n * Notification type definitions\n */\n\n// Notification type enum (corresponds to backend NotificationCategory)\nexport type NotificationType = \"vulnerability\" | \"scan\" | \"asset\" | \"system\"\n\n// Severity level (corresponds to backend NotificationLevel)\nexport type NotificationSeverity = \"low\" | \"medium\" | \"high\" | \"critical\"\n\n// Backend notification level (consistent with backend)\nexport type BackendNotificationLevel = NotificationSeverity\n\n// Backend notification data format\nexport interface BackendNotification {\n  id: number\n  category?: NotificationType\n  title: string\n  message: string\n  level: BackendNotificationLevel\n  created_at?: string\n  createdAt?: string\n  read_at?: string | null\n  readAt?: string | null\n  is_read?: boolean\n  isRead?: boolean\n}\n\n// Notification interface\nexport interface Notification {\n  id: number\n  type: NotificationType\n  title: string\n  description: string\n  detail?: string\n  time: string\n  unread: boolean\n  severity?: NotificationSeverity\n  createdAt?: string\n}\n\n// Get notifications list request parameters\nexport interface GetNotificationsRequest {\n  page?: number\n  pageSize?: number\n  type?: NotificationType\n  unread?: boolean\n}\n\n// Get notifications list response\nexport interface GetNotificationsResponse {\n  results: BackendNotification[]\n  total: number\n  page: number\n  pageSize: number      // Backend returns camelCase format\n  totalPages: number    // Backend returns camelCase format\n  // Compatibility fields (backward compatible)\n  page_size?: number\n  total_pages?: number\n}\n"
  },
  {
    "path": "frontend/types/nuclei-git.types.ts",
    "content": "export type NucleiGitAuthType = \"none\" | \"token\"\n\nexport interface NucleiGitSettings {\n  repoUrl: string\n  authType: NucleiGitAuthType\n  authToken: string\n}\n\nexport type GetNucleiGitSettingsResponse = NucleiGitSettings\n\nexport type UpdateNucleiGitSettingsRequest = NucleiGitSettings\n\nexport interface UpdateNucleiGitSettingsResponse {\n  message: string\n  settings: NucleiGitSettings\n}\n"
  },
  {
    "path": "frontend/types/nuclei.types.ts",
    "content": "export type NucleiTemplateNodeType = \"folder\" | \"file\"\n\nexport interface NucleiTemplateTreeNode {\n  type: NucleiTemplateNodeType\n  name: string\n  path: string\n  children?: NucleiTemplateTreeNode[]\n  templateId?: string\n  severity?: string\n  tags?: string[]\n}\n\nexport interface NucleiTemplateTreeResponse {\n  roots: NucleiTemplateTreeNode[]\n}\n\nexport interface NucleiTemplateContent {\n  path: string\n  name: string\n  templateId?: string\n  severity?: string\n  tags?: string[]\n  content: string\n}\n\nexport type NucleiTemplateScope = \"custom\" | \"public\"\n\nexport interface UploadNucleiTemplatePayload {\n  scope: NucleiTemplateScope\n  file: File\n}\n\nexport interface SaveNucleiTemplatePayload {\n  path: string\n  content: string\n}\n"
  },
  {
    "path": "frontend/types/organization.types.ts",
    "content": "import { ColumnDef } from \"@tanstack/react-table\"\nimport { PaginationInfo } from \"./common.types\"\n\n// Organization statistics data\nexport interface OrganizationStats {\n  totalDomains?: number    // Total domains count\n  totalEndpoints?: number  // Total endpoints count\n  totalTargets?: number    // Total targets count\n}\n\n// Organization related type definitions (matches backend Organization model)\nexport interface Organization {\n  id: number\n  name: string\n  description: string\n  createdAt: string      // Backend created_at auto-converted to camelCase by Django\n  updatedAt: string      // Backend updated_at\n  // Associated data (added via serializer)\n  targets?: Array<{\n    id: number\n    name: string\n  }>\n  // Statistics data (optional, obtained via aggregate query)\n  stats?: OrganizationStats\n  targetCount?: number   // Target count (for list display)\n  domainCount?: number   // Domain count (for list display)\n  endpointCount?: number // Endpoint count (for list display)\n}\n\n// Organization list response type (matches backend actual response format)\nexport interface OrganizationsResponse<T = Organization> {\n  results: T[]          // Organization data list\n  total: number         // Total record count (backend actual field)\n  page: number          // Current page number\n  pageSize: number      // Page size\n  totalPages: number    // Total pages\n  // Compatibility fields\n  count?: number        // DRF standard field (backward compatible)\n  next?: string | null   // Next page link (DRF standard field)\n  previous?: string | null // Previous page link (DRF standard field)\n  organizations?: T[]\n  pagination?: {\n    total: number\n    page: number\n    pageSize: number\n    totalPages: number\n  }\n}\n\n\n// Create organization request type\nexport interface CreateOrganizationRequest {\n  name: string\n  description: string\n}\n\n// Update organization request type\nexport interface UpdateOrganizationRequest {\n  name: string\n  description: string\n}\n\n// Organization data table component props type definition\nexport interface OrganizationDataTableProps {\n  data: Organization[]                           // Organization data array\n  columns: ColumnDef<Organization>[]             // Column definitions array\n  onAddNew?: () => void                          // Add new organization callback\n  onBulkDelete?: () => void                      // Bulk delete callback\n  onSelectionChange?: (selectedRows: Organization[]) => void  // Selected rows change callback\n  searchPlaceholder?: string                     // Search input placeholder\n  searchColumn?: string                          // Column name to search\n  searchValue?: string                           // Controlled: search input current value (server-side search)\n  onSearch?: (value: string) => void             // Controlled: search input change callback (server-side search)\n  isSearching?: boolean                          // Searching state (show loading animation)\n  // Pagination related props\n  pagination?: {\n    pageIndex: number\n    pageSize: number\n  }\n  setPagination?: (pagination: { pageIndex: number; pageSize: number }) => void\n  paginationInfo?: PaginationInfo\n  onPaginationChange?: (pagination: { pageIndex: number; pageSize: number }) => void\n}\n"
  },
  {
    "path": "frontend/types/psl.d.ts",
    "content": "declare module 'psl' {\n  export interface ParsedDomain {\n    input: string\n    tld: string | null\n    sld: string | null\n    domain: string | null\n    subdomain: string | null\n    listed: boolean\n    error?: Error\n  }\n\n  export function parse(domain: string): ParsedDomain\n  export function get(domain: string): string | null\n  export function isValid(domain: string): boolean\n}\n"
  },
  {
    "path": "frontend/types/scan.types.ts",
    "content": "/**\n * Scan task status enum\n * Consistent with backend ScanStatus\n */\nexport type ScanStatus = \"cancelled\" | \"completed\" | \"failed\" | \"initiated\" | \"running\"\n\n/**\n * Scan stage (dynamic, from engine_config key)\n */\nexport type ScanStage = string\n\n/**\n * Stage progress status\n */\nexport type StageStatus = \"pending\" | \"running\" | \"completed\" | \"failed\" | \"cancelled\"\n\n/**\n * Single stage progress info\n */\nexport interface StageProgressItem {\n  status: StageStatus\n  order: number          // Execution order (starting from 0)\n  startedAt?: string     // ISO time string\n  duration?: number      // Execution duration (seconds)\n  detail?: string        // Completion details\n  error?: string         // Error message\n  reason?: string        // Skip reason\n}\n\n/**\n * Stage progress dictionary (dynamic keys)\n */\nexport type StageProgress = Record<string, StageProgressItem>\n\nexport interface ScanRecord {\n  id: number\n  target?: number              // Target ID (corresponds to backend target)\n  targetName: string           // Target name (corresponds to backend targetName)\n  workerName?: string | null   // Worker node name (corresponds to backend worker_name)\n  summary: {\n    subdomains: number\n    websites: number\n    directories: number\n    endpoints: number\n    ips: number\n    vulnerabilities: {\n      total: number\n      critical: number\n      high: number\n      medium: number\n      low: number\n    }\n  }\n  engineIds: number[]          // Engine ID list (corresponds to backend engine_ids)\n  engineNames: string[]        // Engine name list (corresponds to backend engine_names)\n  createdAt: string            // Creation time (corresponds to backend createdAt)\n  status: ScanStatus\n  errorMessage?: string        // Error message (corresponds to backend errorMessage, has value when failed)\n  progress: number             // 0-100\n  currentStage?: ScanStage     // Current scan stage (only has value in running status)\n  stageProgress?: StageProgress // Stage progress details\n  yamlConfiguration?: string     // YAML configuration string\n}\n\nexport interface GetScansParams {\n  page?: number\n  pageSize?: number\n  status?: ScanStatus\n  search?: string\n  target?: number  // Filter by target ID\n}\n\nexport interface GetScansResponse {\n  results: ScanRecord[]        // Corresponds to backend results field\n  total: number\n  page: number\n  pageSize: number\n  totalPages: number\n}\n\n/**\n * Initiate scan request parameters (for existing target/organization)\n */\nexport interface InitiateScanRequest {\n  organizationId?: number  // Organization ID (choose one)\n  targetId?: number        // Target ID (choose one)\n  configuration: string    // YAML configuration string (required)\n  engineIds: number[]      // Scan engine ID list (required)\n  engineNames: string[]    // Engine name list (required)\n}\n\n/**\n * Quick scan request parameters (auto-create target and scan)\n */\nexport interface QuickScanRequest {\n  targets: { name: string }[]  // Target list\n  configuration: string        // YAML configuration string (required)\n  engineIds: number[]          // Scan engine ID list (required)\n  engineNames: string[]        // Engine name list (required)\n}\n\n/**\n * Quick scan response\n */\nexport interface QuickScanResponse {\n  count: number             // Number of scan tasks created\n  targetStats: {\n    created: number\n    skipped: number\n    failed: number\n  }\n  assetStats: {\n    websites: number\n    endpoints: number\n  }\n  errors: Array<{ input: string; error: string }>\n  scans: ScanTask[]\n}\n\n/**\n * Single scan task info\n */\nexport interface ScanTask {\n  id: number\n  target: number           // Target ID\n  engineIds: number[]      // Engine ID list\n  engineNames: string[]    // Engine name list\n  status: ScanStatus\n  createdAt: string\n  updatedAt: string\n}\n\n/**\n * Initiate scan response\n */\nexport interface InitiateScanResponse {\n  message: string          // Success message\n  count: number            // Number of scan tasks created\n  scans: ScanTask[]        // Scan task list\n}\n"
  },
  {
    "path": "frontend/types/scheduled-scan.types.ts",
    "content": "/**\n * Scheduled scan type definitions\n */\n\n// Scheduled scan status\nexport type ScheduledScanStatus = \"active\" | \"paused\" | \"expired\"\n\n// Scan mode\nexport type ScanMode = 'organization' | 'target'\n\n// Scheduled scan interface\nexport interface ScheduledScan {\n  id: number\n  name: string\n  engineIds: number[] // Associated scan engine ID list\n  engineNames: string[] // Associated scan engine name list\n  organizationId: number | null // Organization ID (organization scan mode)\n  organizationName: string | null // Organization name\n  targetId: number | null // Target ID (target scan mode)\n  targetName: string | null // Target name (target scan mode)\n  scanMode: ScanMode // Scan mode\n  cronExpression: string // Cron expression\n  isEnabled: boolean // Whether enabled\n  nextRunTime?: string // Next run time\n  lastRunTime?: string // Last run time\n  runCount: number // Execution count\n  createdAt: string\n  updatedAt: string\n}\n\n// Create scheduled scan request (organizationId and targetId are mutually exclusive)\nexport interface CreateScheduledScanRequest {\n  name: string\n  configuration: string // YAML configuration string (required)\n  engineIds: number[] // Engine ID list (required)\n  engineNames: string[] // Engine name list (required)\n  organizationId?: number // Organization scan mode\n  targetId?: number // Target scan mode\n  cronExpression: string // Cron expression, format: minute hour day month weekday\n  isEnabled?: boolean\n}\n\n// Update scheduled scan request (organizationId and targetId are mutually exclusive)\nexport interface UpdateScheduledScanRequest {\n  name?: string\n  configuration?: string // YAML configuration string\n  engineIds?: number[] // Engine ID list (optional, for reference)\n  engineNames?: string[] // Engine name list (optional, for reference)\n  organizationId?: number // Organization scan mode (clears targetId when set)\n  targetId?: number // Target scan mode (clears organizationId when set)\n  cronExpression?: string\n  isEnabled?: boolean\n}\n\n// API response\nexport interface GetScheduledScansResponse {\n  results: ScheduledScan[]\n  total: number\n  page: number\n  pageSize: number\n  totalPages: number\n}\n"
  },
  {
    "path": "frontend/types/search.types.ts",
    "content": "// 资产类型\nexport type AssetType = 'website' | 'endpoint'\n\n// Website 搜索结果类型\nexport interface WebsiteSearchResult {\n  id: number\n  url: string\n  host: string\n  title: string\n  technologies: string[]\n  statusCode: number | null\n  contentLength: number | null\n  contentType: string\n  webserver: string\n  location: string\n  vhost: boolean | null\n  responseHeaders: Record<string, string>\n  responseBody: string\n  createdAt: string | null\n  targetId: number\n  vulnerabilities: Vulnerability[]\n}\n\n// Endpoint 搜索结果类型\nexport interface EndpointSearchResult {\n  id: number\n  url: string\n  host: string\n  title: string\n  technologies: string[]\n  statusCode: number | null\n  contentLength: number | null\n  contentType: string\n  webserver: string\n  location: string\n  vhost: boolean | null\n  responseHeaders: Record<string, string>\n  responseBody: string\n  createdAt: string | null\n  targetId: number\n  matchedGfPatterns: string[]\n}\n\n// 通用搜索结果类型（兼容旧代码）\nexport type SearchResult = WebsiteSearchResult | EndpointSearchResult\n\nexport interface Vulnerability {\n  id?: number\n  name: string\n  severity: 'critical' | 'high' | 'medium' | 'low' | 'info' | 'unknown'\n  vulnType: string\n  url?: string\n}\n\n// 搜索状态\nexport type SearchState = 'initial' | 'searching' | 'results'\n\n// 搜索响应类型\nexport interface SearchResponse {\n  results: SearchResult[]\n  total: number\n  page: number\n  pageSize: number\n  totalPages: number\n  assetType: AssetType\n}\n\n// 搜索操作符类型\nexport type SearchOperator = '=' | '==' | '!='\n\n// 单个搜索条件\nexport interface SearchCondition {\n  field: string\n  operator: SearchOperator\n  value: string\n}\n\n// 搜索表达式（支持 AND/OR 组合）\nexport interface SearchExpression {\n  conditions: SearchCondition[]  // 同一组内的条件用 AND 连接\n  orGroups?: SearchExpression[]  // 多组之间用 OR 连接\n}\n\n// 发送给后端的搜索参数\nexport interface SearchParams {\n  q?: string  // 完整的搜索表达式字符串\n  asset_type?: AssetType  // 资产类型\n  page?: number\n  pageSize?: number\n}\n"
  },
  {
    "path": "frontend/types/subdomain.types.ts",
    "content": "import { ColumnDef } from \"@tanstack/react-table\"\nimport { PaginationParams, PaginationInfo } from \"./common.types\"\nimport type { Organization } from \"./organization.types\"\nimport type { BatchCreateResponse } from \"./api-response.types\"\nimport type { Port } from \"./ip-address.types\"\n\n// Subdomain related type definitions (renamed from domain.types.ts)\n\n// Basic subdomain type (consistent with frontend camelCase naming convention)\n// Note: Backend returns snake_case, but response interceptor auto-converts to camelCase\nexport interface Subdomain {\n  id: number\n  name: string\n  createdAt: string  // Creation time\n}\n\n// Get subdomains list request parameters\nexport interface GetSubdomainsParams extends PaginationParams {\n  organizationId: number\n}\n\n// Get subdomains list response (field 'domains' kept consistent with backend)\nexport interface GetSubdomainsResponse {\n  domains: Subdomain[]\n  total: number\n  page: number\n  pageSize: number      // [OK] Using camelCase\n  totalPages: number    // [OK] Using camelCase\n}\n\n// Get all subdomains request parameters\n// Backend sorts by update time descending, custom sorting not supported\nexport interface GetAllSubdomainsParams {\n  page?: number\n  pageSize?: number\n  search?: string\n}\n\n// Get all subdomains response (field 'domains' kept consistent with backend)\nexport interface GetAllSubdomainsResponse {\n  domains: Subdomain[]\n  total: number\n  page: number\n  pageSize: number\n  totalPages: number\n}\n\n// Get single subdomain detail response (backend returns object directly)\nexport type GetSubdomainByIDResponse = Subdomain\n\n// Subdomain data table component props type definition\nexport interface SubdomainDataTableProps {\n  data: Subdomain[]                           // Subdomain data array\n  columns: ColumnDef<Subdomain>[]             // Column definitions array\n  onAddNew?: () => void                       // Add new subdomain callback\n  onBulkDelete?: () => void                   // Bulk delete callback\n  onSelectionChange?: (selectedRows: Subdomain[]) => void  // Selected rows change callback\n  searchPlaceholder?: string                  // Search input placeholder\n  searchColumn?: string                       // Column name to search\n  // Pagination related props\n  pagination?: {\n    pageIndex: number\n    pageSize: number\n  }\n  setPagination?: (pagination: { pageIndex: number; pageSize: number }) => void\n  paginationInfo?: PaginationInfo\n  onPaginationChange?: (pagination: { pageIndex: number; pageSize: number }) => void\n}\n\n// Subdomain batch create response (reuse common type)\nexport type BatchCreateSubdomainsResponse = BatchCreateResponse\n"
  },
  {
    "path": "frontend/types/system-log.types.ts",
    "content": "export interface SystemLogResponse {\n  content: string\n}\n\nexport type LogCategory = 'system' | 'error' | 'performance' | 'container'\n\nexport interface LogFile {\n  filename: string\n  category: LogCategory\n  size: number\n  modifiedAt: string\n}\n\nexport interface LogFilesResponse {\n  files: LogFile[]\n}\n"
  },
  {
    "path": "frontend/types/target.types.ts",
    "content": "/**\n * Target type definitions\n */\n\n/**\n * Target type\n */\nexport type TargetType = 'domain' | 'ip' | 'cidr'\n\n/**\n * Target basic info (for list display)\n */\nexport interface Target {\n  id: number\n  name: string\n  type: TargetType  // Backend field: type\n  description?: string\n  createdAt: string  // Backend field: created_at, auto-converted to createdAt\n  lastScannedAt?: string  // Backend field: last_scanned_at, auto-converted to lastScannedAt\n  // Associated data (added via serializer)\n  organizations?: Array<{\n    id: number\n    name: string\n  }>\n}\n\n/**\n * Target detail info (includes statistics data)\n */\nexport interface TargetDetail extends Target {\n  summary: {\n    subdomains: number\n    websites: number\n    endpoints: number\n    ips: number\n    vulnerabilities: {\n      total: number\n      critical: number\n      high: number\n      medium: number\n      low: number\n    }\n  }\n}\n\n/**\n * Target list response type\n */\nexport interface TargetsResponse {\n  results: Target[]\n  total: number        // Backend returns total, not count\n  page: number         // Current page number\n  pageSize: number     // Page size\n  totalPages: number   // Total pages\n  // Compatibility fields (for backward compatibility)\n  count?: number       // Optional, equivalent to total\n  next?: string | null\n  previous?: string | null\n}\n\n/**\n * Create target request parameters\n */\nexport interface CreateTargetRequest {\n  name: string\n  description?: string\n}\n\n/**\n * Update target request parameters\n */\nexport interface UpdateTargetRequest {\n  name?: string\n  description?: string\n}\n\n/**\n * Batch delete targets request parameters\n */\nexport interface BatchDeleteTargetsRequest {\n  ids: number[]\n}\n\n/**\n * Batch delete targets response\n */\nexport interface BatchDeleteTargetsResponse {\n  deletedCount: number\n  failedIds?: number[]\n}\n\n/**\n * Batch create targets request parameters\n */\nexport interface BatchCreateTargetsRequest {\n  targets: Array<{\n    name: string\n    description?: string\n  }>\n  organizationId?: number  // Optional: associate with specified organization\n}\n\n/**\n * Batch create targets response\n */\nexport interface BatchCreateTargetsResponse {\n  createdCount: number\n  reusedCount: number\n  failedCount: number\n  failedTargets: Array<{\n    name: string\n    reason: string\n  }>\n  message: string\n}\n\n"
  },
  {
    "path": "frontend/types/tool.types.ts",
    "content": "// Tool type enum\nexport type ToolType = 'opensource' | 'custom'\n\n// Tool type definition (matches frontend camelCase converted format)\n// Note: Backend returns snake_case, api-client.ts auto-converts to camelCase\nexport interface Tool {\n  id: number\n  name: string                 // Tool name\n  type: ToolType              // Tool type: opensource/custom (backend: type)\n  repoUrl: string             // Repository URL (backend: repo_url)\n  version: string              // Version number\n  description: string          // Tool description\n  categoryNames: string[]      // Category tags array (backend: category_names)\n  directory: string            // Tool path (backend: directory)\n  installCommand: string       // Install command (backend: install_command)\n  updateCommand: string        // Update command (backend: update_command)\n  versionCommand: string       // Version query command (backend: version_command)\n  createdAt: string           // Backend: created_at\n  updatedAt: string           // Backend: updated_at\n}\n\n// Tool category name to display name mapping\n// All categories reference backend model design document\nexport const CategoryNameMap: Record<string, string> = {\n  subdomain: 'Subdomain Scan',\n  vulnerability: 'Vulnerability Scan',\n  port: 'Port Scan',\n  directory: 'Directory Scan',\n  dns: 'DNS Resolution',\n  http: 'HTTP Probe',\n  crawler: 'Web Crawler',\n  recon: 'Reconnaissance',\n  fuzzer: 'Fuzzing',\n  wordlist: 'Wordlist Generation',\n  screenshot: 'Screenshot Tool',\n  exploit: 'Exploitation',\n  network: 'Network Scan',\n  other: 'Other',\n}\n\n// Tool list response type (api-client.ts auto-converts to camelCase)\nexport interface GetToolsResponse {\n  tools: Tool[]\n  total: number\n  page: number\n  pageSize: number      // Backend returns camelCase format\n  totalPages: number    // Backend returns camelCase format\n  // Compatibility fields (backward compatible)\n  page_size?: number\n  total_pages?: number\n}\n\n// Create tool request type\nexport interface CreateToolRequest {\n  name: string\n  type: ToolType              // Tool type (required)\n  repoUrl?: string\n  version?: string\n  description?: string\n  categoryNames?: string[]    // Category tags array\n  directory?: string          // Tool path (required for custom tools)\n  installCommand?: string     // Install command (required for opensource tools)\n  updateCommand?: string      // Update command (required for opensource tools)\n  versionCommand?: string     // Version query command (required for opensource tools)\n}\n\n// Update tool request type\nexport interface UpdateToolRequest {\n  name?: string\n  type?: ToolType             // Tool type (for command field validation)\n  repoUrl?: string\n  version?: string\n  description?: string\n  categoryNames?: string[]    // Category tags array\n  directory?: string          // Tool path\n  installCommand?: string     // Install command\n  updateCommand?: string      // Update command\n  versionCommand?: string     // Version query command\n}\n\n// Tool query parameters\n// Backend sorts by update time descending, custom sorting not supported\nexport interface GetToolsParams {\n  page?: number\n  pageSize?: number\n}\n\n// Tool filter type\nexport type ToolFilter = 'all' | 'default' | 'custom'\n"
  },
  {
    "path": "frontend/types/version.types.ts",
    "content": "export interface VersionInfo {\n  version: string\n  githubRepo: string\n}\n\nexport interface UpdateCheckResult {\n  currentVersion: string\n  latestVersion: string\n  hasUpdate: boolean\n  releaseUrl: string\n  releaseNotes: string | null\n  publishedAt: string | null\n}\n"
  },
  {
    "path": "frontend/types/vulnerability.types.ts",
    "content": "import { ColumnDef } from \"@tanstack/react-table\"\nimport { PaginationParams, PaginationInfo } from \"./common.types\"\nimport type { BatchCreateResponse } from \"./api-response.types\"\n\n// Vulnerability related type definitions\n\n// Vulnerability severity\nexport type VulnerabilitySeverity = \"critical\" | \"high\" | \"medium\" | \"low\" | \"info\"\n\n// Vulnerability status\nexport type VulnerabilityStatus = \"open\" | \"in_progress\" | \"resolved\" | \"false_positive\" | \"accepted\"\n\n// Tool raw output (JSON)\nexport interface VulnerabilityRawOutput {\n  // Dalfox fields\n  type?: string           // R=Reflected, S=Stored\n  inject_type?: string    // Injection type\n  method?: string         // HTTP method\n  data?: string           // URL\n  param?: string          // Parameter name\n  payload?: string        // Payload\n  evidence?: string       // Evidence\n  cwe?: string            // CWE\n  message_str?: string    // Message\n\n  // Nuclei fields\n  \"template-id\"?: string\n  \"template-path\"?: string\n  \"matched-at\"?: string\n  host?: string\n  request?: string\n  response?: string\n  \"curl-command\"?: string\n  ip?: string\n  info?: {\n    name?: string\n    description?: string\n    severity?: string\n    tags?: string[]\n    reference?: string[]\n    classification?: {\n      \"cve-id\"?: string\n      \"cwe-id\"?: string[]\n    }\n  }\n\n  // Other fields\n  [key: string]: unknown\n}\n\n// Basic vulnerability type (field names match backend DRF serializer output - camelCase format)\nexport interface Vulnerability {\n  id: number\n  target?: number         // Associated target ID\n  url: string             // URL where vulnerability exists\n  vulnType: string        // Vulnerability type (e.g. xss-reflected, template-id)\n  severity: VulnerabilitySeverity\n  source: string          // Vulnerability source (dalfox, nuclei)\n  cvssScore?: number      // CVSS score\n  description?: string    // Simplified description\n  rawOutput?: VulnerabilityRawOutput  // Tool raw output\n  createdAt: string    // Creation time\n}\n\n// Get vulnerabilities list request parameters\nexport interface GetVulnerabilitiesParams extends PaginationParams {\n  targetId?: number\n  domainId?: number\n  endpointId?: number\n  severity?: VulnerabilitySeverity\n  status?: VulnerabilityStatus\n  filter?: string  // Smart filter syntax\n}\n\n// Get vulnerabilities list response\nexport interface GetVulnerabilitiesResponse {\n  vulnerabilities: Vulnerability[]\n  total: number\n  page: number\n  pageSize: number\n  totalPages: number\n}\n\n// Get single vulnerability detail response\nexport type GetVulnerabilityByIDResponse = Vulnerability\n\n// Vulnerability data table component props type definition\nexport interface VulnerabilityDataTableProps {\n  data: Vulnerability[]\n  columns: ColumnDef<Vulnerability>[]\n  onAddNew?: () => void\n  onBulkDelete?: () => void\n  onSelectionChange?: (selectedRows: Vulnerability[]) => void\n  searchPlaceholder?: string\n  searchColumn?: string\n  pagination?: {\n    pageIndex: number\n    pageSize: number\n  }\n  setPagination?: (pagination: { pageIndex: number; pageSize: number }) => void\n  paginationInfo?: PaginationInfo\n  onPaginationChange?: (pagination: { pageIndex: number; pageSize: number }) => void\n}\n\n// Vulnerability batch create response\nexport type BatchCreateVulnerabilitiesResponse = BatchCreateResponse\n\n"
  },
  {
    "path": "frontend/types/website.types.ts",
    "content": "/**\n * WebSite related type definitions\n */\n\nexport interface WebSite {\n  id: number\n  scan?: number\n  target?: number\n  url: string\n  host: string\n  location: string\n  title: string\n  webserver: string\n  contentType: string\n  statusCode: number\n  contentLength: number\n  responseBody: string\n  tech: string[]\n  vhost: boolean | null\n  subdomain: string\n  responseHeaders?: string\n  createdAt: string\n}\n\nexport interface Technology {\n  id: number\n  name: string\n  version?: string\n  category?: string\n}\n\nexport interface WebSiteFilters {\n  url?: string\n  title?: string\n  statusCode?: number\n  webserver?: string\n  contentType?: string\n}\n\nexport interface WebSiteListResponse {\n  results: WebSite[]\n  total: number\n  page: number\n  pageSize: number\n  totalPages: number\n}\n"
  },
  {
    "path": "frontend/types/wordlist.types.ts",
    "content": "// Wordlist related types\n\nimport type { PaginationInfo } from \"@/types/common.types\"\n\n// Wordlist basic info\nexport interface Wordlist {\n  id: number\n  name: string\n  description?: string\n  // File size (bytes), optional, returned by backend\n  fileSize?: number\n  // Line count, for estimating duration, optional, returned by backend\n  lineCount?: number\n  // File SHA-256 hash, for cache validation\n  fileHash?: string\n  createdAt: string\n  updatedAt: string\n}\n\n// Get wordlists list response (follows unified pagination structure)\nexport interface GetWordlistsResponse extends PaginationInfo {\n  results: Wordlist[]\n}\n"
  },
  {
    "path": "frontend/types/worker.types.ts",
    "content": "/**\n * Worker node related type definitions\n */\n\n// Worker status enum (unified between frontend and backend)\nexport type WorkerStatus = 'pending' | 'deploying' | 'online' | 'offline' | 'updating' | 'outdated'\n\n// Worker node\nexport interface WorkerNode {\n  id: number\n  name: string\n  ipAddress: string\n  sshPort: number\n  username: string\n  status: WorkerStatus\n  isLocal: boolean  // Whether it's a local node (inside Docker container)\n  createdAt: string\n  updatedAt?: string\n  info?: {\n    cpuPercent?: number\n    memoryPercent?: number\n  }\n}\n\n// Create Worker request\nexport interface CreateWorkerRequest {\n  name: string\n  ipAddress: string\n  sshPort?: number\n  username?: string\n  password: string\n}\n\n// Update Worker request\nexport interface UpdateWorkerRequest {\n  name?: string\n  sshPort?: number\n  username?: string\n  password?: string\n}\n\n// Worker list response\nexport interface WorkersResponse {\n  results: WorkerNode[]\n  total: number\n  page: number\n  pageSize: number\n}\n\n"
  },
  {
    "path": "frontend/vercel.json",
    "content": "{\n  \"$schema\": \"https://openapi.vercel.sh/vercel.json\",\n  \"framework\": \"nextjs\",\n  \"buildCommand\": \"pnpm build\",\n  \"installCommand\": \"pnpm install\",\n  \"env\": {\n    \"NEXT_PUBLIC_USE_MOCK\": \"true\",\n    \"NEXT_PUBLIC_SKIP_AUTH\": \"true\"\n  }\n}\n"
  },
  {
    "path": "install.sh",
    "content": "#!/bin/bash\nset -e\n\n# ==============================================================================\n# 用法:\n#   sudo ./install.sh                 生产模式（拉取 Docker Hub 镜像）\n#   sudo ./install.sh --dev           开发模式（本地构建 + 调试日志）\n#   sudo ./install.sh --no-frontend   安装并只启动后端\n#   sudo ./install.sh --dev --no-frontend  开发模式 + 只启动后端\n# ==============================================================================\n\n# 解析参数\nSTART_ARGS=\"\"\nDEV_MODE=false\nGIT_MIRROR=\"\"\nfor arg in \"$@\"; do\n    case $arg in\n        --dev) \n            DEV_MODE=true \n            START_ARGS=\"$START_ARGS --dev\"\n            ;;\n        --no-frontend) \n            START_ARGS=\"$START_ARGS --no-frontend\" \n            ;;\n        --mirror)\n            GIT_MIRROR=\"https://gh-proxy.org\"\n            ;;\n        --mirror=*)\n            GIT_MIRROR=\"${arg#*=}\"\n            ;;\n    esac\ndone\n\n# ==============================================================================\n# 颜色定义\n# ==============================================================================\nRED='\\033[0;31m'\nGREEN='\\033[0;32m'\nYELLOW='\\033[0;33m'\nBLUE='\\033[0;34m'\nCYAN='\\033[0;36m'\nBOLD='\\033[1m'\nRESET='\\033[0m'\n\n# ==============================================================================\n# 额外颜色定义\n# ==============================================================================\nMAGENTA='\\033[0;35m'\nDIM='\\033[2m'\nBG_BLUE='\\033[44m'\nBG_CYAN='\\033[46m'\n\n# ==============================================================================\n# 日志函数\n# ==============================================================================\ninfo() {\n    echo -e \"  ${CYAN}▸${RESET} $1\"\n}\n\nsuccess() {\n    echo -e \"  ${GREEN}✔${RESET} $1\"\n}\n\nwarn() {\n    echo -e \"  ${YELLOW}⚠${RESET} $1\"\n}\n\nerror() {\n    echo -e \"  ${RED}✖${RESET} $1\"\n}\n\nstep() {\n    echo -e \"\\n${BOLD}${CYAN}┌── $1${RESET}\"\n}\n\nheader() {\n    echo -e \"\"\n    echo -e \"${BOLD}${BLUE}╔══════════════════════════════════════════════════════════╗${RESET}\"\n    echo -e \"${BOLD}${BLUE}║${RESET}   $1\"\n    echo -e \"${BOLD}${BLUE}╚══════════════════════════════════════════════════════════╝${RESET}\"\n}\n\n# ==============================================================================\n# 显示横幅\n# ==============================================================================\nshow_banner() {\n    clear\n    echo -e \"\"\n    echo -e \"${CYAN}${BOLD}       ██╗  ██╗██╗███╗   ██╗ ██████╗ ██████╗ ██╗███╗   ██╗${RESET}\"\n    echo -e \"${CYAN}       ╚██╗██╔╝██║████╗  ██║██╔════╝ ██╔══██╗██║████╗  ██║${RESET}\"\n    echo -e \"${BLUE}${BOLD}        ╚███╔╝ ██║██╔██╗ ██║██║  ███╗██████╔╝██║██╔██╗ ██║${RESET}\"\n    echo -e \"${BLUE}        ██╔██╗ ██║██║╚██╗██║██║   ██║██╔══██╗██║██║╚██╗██║${RESET}\"\n    echo -e \"${MAGENTA}${BOLD}       ██╔╝ ██╗██║██║ ╚████║╚██████╔╝██║  ██║██║██║ ╚████║${RESET}\"\n    echo -e \"${MAGENTA}       ╚═╝  ╚═╝╚═╝╚═╝  ╚═══╝ ╚═════╝ ╚═╝  ╚═╝╚═╝╚═╝  ╚═══╝${RESET}\"\n    echo -e \"\"\n    echo -e \"${DIM}       ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${RESET}\"\n    echo -e \"${BOLD}         🔒 分布式安全扫描平台  │  一键部署 (Ubuntu)${RESET}\"\n    echo -e \"${DIM}       ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${RESET}\"\n    echo -e \"\"\n}\n\n# ==============================================================================\n# 权限检查\n# ==============================================================================\nif [ \"$EUID\" -ne 0 ]; then\n    error \"请使用 sudo 运行此脚本\"\n    echo -e \"   正确用法: ${BOLD}sudo ./install.sh${RESET}\"\n    exit 1\nfi\n\n# 获取真实用户（通过 sudo 运行时 $SUDO_USER 是真实用户）\nREAL_USER=\"${SUDO_USER:-$USER}\"\n# macOS 没有 getent，使用 dscl 或 ~$USER 替代\nif command -v getent &>/dev/null; then\n    REAL_HOME=$(getent passwd \"$REAL_USER\" | cut -d: -f6)\nelse\n    REAL_HOME=$(eval echo \"~$REAL_USER\")\nfi\n\n# 项目根目录\nROOT_DIR=\"$(cd \"$(dirname \"$0\")\" && pwd)\"\ncd \"$ROOT_DIR\"\n\n# 从 VERSION 文件读取版本号\nVERSION_FILE=\"$ROOT_DIR/VERSION\"\nif [ -f \"$VERSION_FILE\" ]; then\n    APP_VERSION=$(cat \"$VERSION_FILE\" | tr -d '[:space:]')\nelse\n    error \"VERSION 文件不存在，无法确定安装版本\"\n    exit 1\nfi\n\n# 显示标题\nshow_banner\ninfo \"当前用户: ${BOLD}$REAL_USER${RESET}\"\ninfo \"项目路径: ${BOLD}$ROOT_DIR${RESET}\"\ninfo \"安装版本: ${BOLD}$APP_VERSION${RESET}\"\nif [ -n \"$GIT_MIRROR\" ]; then\n    info \"Git 加速: ${BOLD}${GREEN}已启用${RESET} - $GIT_MIRROR\"\nfi\n\n# ==============================================================================\n# 工具函数\n# ==============================================================================\n\n# 生成随机字符串\ngenerate_random_string() {\n    local length=\"${1:-32}\"\n    if command -v openssl >/dev/null 2>&1; then\n        openssl rand -hex \"$length\" 2>/dev/null | cut -c1-\"$length\"\n    else\n        date +%s%N | sha256sum | cut -c1-\"$length\"\n    fi\n}\n\n# 跨平台 sed -i（兼容 macOS 和 Linux）\nsed_inplace() {\n    if [[ \"$OSTYPE\" == \"darwin\"* ]]; then\n        sed -i '' \"$@\"\n    else\n        sed -i \"$@\"\n    fi\n}\n\n# 更新 .env 文件中的某个键\nupdate_env_var() {\n    local file=\"$1\"\n    local key=\"$2\"\n    local value=\"$3\"\n    if grep -q \"^$key=\" \"$file\"; then\n        sed_inplace \"s|^$key=.*|$key=$value|\" \"$file\"\n    else\n        echo \"$key=$value\" >> \"$file\"\n    fi\n}\n\n# 用于保存生成的密码，方便最后显示\nGENERATED_DB_PASSWORD=\"\"\nGENERATED_DJANGO_KEY=\"\"\n\n# 生成自签 HTTPS 证书（使用容器，避免宿主机 openssl 兼容性问题）\ngenerate_self_signed_cert() {\n    local ssl_dir=\"$DOCKER_DIR/nginx/ssl\"\n    local fullchain=\"$ssl_dir/fullchain.pem\"\n    local privkey=\"$ssl_dir/privkey.pem\"\n\n    if [ -f \"$fullchain\" ] && [ -f \"$privkey\" ]; then\n        success \"检测到已有 HTTPS 证书，跳过自签\"\n        return\n    fi\n\n    info \"未检测到 HTTPS 证书，正在生成自签证书（localhost）...\"\n    mkdir -p \"$ssl_dir\"\n\n    # 使用容器生成证书，避免依赖宿主机 openssl 版本\n    if docker run --rm -v \"$ssl_dir:/ssl\" alpine/openssl \\\n        req -x509 -nodes -newkey rsa:2048 -days 365 \\\n        -keyout /ssl/privkey.pem \\\n        -out /ssl/fullchain.pem \\\n        -subj \"/C=CN/ST=NA/L=NA/O=XingRin/CN=localhost\" \\\n        -addext \"subjectAltName=DNS:localhost,IP:127.0.0.1\" \\\n        >/dev/null 2>&1; then\n        success \"自签证书已生成: $ssl_dir\"\n    else\n        warn \"自签证书生成失败，请手动放置证书到 $ssl_dir\"\n    fi\n}\n\n# 自动为 docker/.env 填充敏感变量\nauto_fill_docker_env_secrets() {\n    local env_file=\"$1\"\n    info \"自动生成 DJANGO_SECRET_KEY、DB_PASSWORD 和 WORKER_API_KEY...\"\n    GENERATED_DJANGO_KEY=\"$(generate_random_string 64)\"\n    GENERATED_DB_PASSWORD=\"$(generate_random_string 32)\"\n    GENERATED_WORKER_API_KEY=\"$(generate_random_string 32)\"\n    update_env_var \"$env_file\" \"DJANGO_SECRET_KEY\" \"$GENERATED_DJANGO_KEY\"\n    update_env_var \"$env_file\" \"DB_PASSWORD\" \"$GENERATED_DB_PASSWORD\"\n    update_env_var \"$env_file\" \"WORKER_API_KEY\" \"$GENERATED_WORKER_API_KEY\"\n    success \"密钥生成完成\"\n}\n\n# 配置 Docker 镜像加速\n# 使用国内公共镜像源（pull-through cache 模式，首次拉取会从 Docker Hub 同步）\nconfigure_docker_mirror() {\n    local daemon_json=\"/etc/docker/daemon.json\"\n    \n    # 这些镜像源采用 pull-through cache 模式：\n    # - 首次拉取：从 Docker Hub 获取并缓存\n    # - 后续拉取：直接从缓存返回\n    # - 支持所有公开镜像，包括用户上传的最新镜像\n    local mirrors='[\n        \"https://docker.1ms.run\",\n        \"https://docker.1panel.live\",\n        \"https://hub.rat.dev\",\n        \"https://docker.m.daocloud.io\",\n        \"https://dockerproxy.net\"\n    ]'\n    \n    info \"配置 Docker 镜像加速...\"\n    \n    # 确保 Docker 配置目录存在\n    mkdir -p /etc/docker\n    \n    if [ ! -f \"$daemon_json\" ]; then\n        # 文件不存在，直接创建\n        echo \"{\\\"registry-mirrors\\\": $mirrors}\" | jq '.' > \"$daemon_json\"\n        success \"Docker 镜像加速配置完成\"\n    else\n        # 文件存在，用 jq 合并配置\n        if jq -e '.' \"$daemon_json\" >/dev/null 2>&1; then\n            # 有效的 JSON，合并配置\n            local temp_file=$(mktemp)\n            jq --argjson mirrors \"$mirrors\" '. + {\"registry-mirrors\": $mirrors}' \"$daemon_json\" > \"$temp_file\"\n            mv \"$temp_file\" \"$daemon_json\"\n            success \"Docker 镜像加速配置已合并到现有配置\"\n        else\n            # 无效的 JSON，备份后重新创建\n            warn \"现有 daemon.json 格式无效，已备份为 daemon.json.bak\"\n            cp \"$daemon_json\" \"${daemon_json}.bak\"\n            echo \"{\\\"registry-mirrors\\\": $mirrors}\" | jq '.' > \"$daemon_json\"\n            success \"Docker 镜像加速配置完成\"\n        fi\n    fi\n    \n    # 重启 Docker 使配置生效\n    if systemctl is-active --quiet docker; then\n        info \"重启 Docker 服务...\"\n        systemctl restart docker\n        sleep 2\n        if systemctl is-active --quiet docker; then\n            success \"Docker 服务重启完成\"\n        else\n            warn \"Docker 服务重启失败，请手动检查\"\n        fi\n    fi\n}\n\n# 获取加速后的 Docker 镜像地址（保留函数以兼容现有代码）\nget_accelerated_image() {\n    local image=\"$1\"\n    # 镜像加速通过 daemon.json 的 registry-mirrors 实现\n    # 这里直接返回原始地址\n    echo \"$image\"\n}\n\n# 检测远程 PostgreSQL 是否有 pg_ivm 扩展\ncheck_pg_ivm() {\n    local db_host=\"$1\"\n    local db_port=\"$2\"\n    local db_user=\"$3\"\n    local db_password=\"$4\"\n    local db_name=\"$5\"\n    \n    info \"检测 pg_ivm 扩展...\"\n    \n    # 尝试创建 pg_ivm 扩展\n    if docker run --rm \\\n        -e PGPASSWORD=\"$db_password\" \\\n        postgres:15 \\\n        psql \"postgresql://$db_user@$db_host:$db_port/$db_name\" \\\n        -c \"CREATE EXTENSION IF NOT EXISTS pg_ivm;\" 2>/dev/null; then\n        success \"pg_ivm 扩展已启用\"\n        return 0\n    else\n        echo\n        error \"pg_ivm 扩展未安装或无法启用\"\n        echo\n        echo -e \"${YELLOW}==========================================\"\n        echo -e \"pg_ivm 是必需的扩展，用于增量维护物化视图\"\n        echo -e \"要求: PostgreSQL 13+ 版本\"\n        echo -e \"==========================================${RESET}\"\n        echo\n        echo -e \"请在远程 PostgreSQL 服务器上执行以下命令一键安装:\"\n        echo\n        echo -e \"  ${BOLD}curl -sSL https://raw.githubusercontent.com/yyhuni/xingrin/main/docker/scripts/install-pg-ivm.sh | sudo bash${RESET}\"\n        echo\n        echo -e \"安装完成后，请重新运行 install.sh\"\n        echo -e \"${YELLOW}==========================================${RESET}\"\n        return 1\n    fi\n}\n\n# 显示安装总结信息\nshow_summary() {\n    echo\n    if [ \"$1\" = \"success\" ]; then\n        # 成功 Banner\n        echo -e \"\"\n        echo -e \"${GREEN}${BOLD}    ╔═══════════════════════════════════════════════════╗${RESET}\"\n        echo -e \"${GREEN}${BOLD}    ║                                                   ║${RESET}\"\n        echo -e \"${GREEN}${BOLD}    ║   ██████╗  ██████╗ ███╗   ██╗███████╗██║          ║${RESET}\"\n        echo -e \"${GREEN}${BOLD}    ║   ██╔══██╗██╔═══██╗████╗  ██║██╔════╝██║          ║${RESET}\"\n        echo -e \"${GREEN}${BOLD}    ║   ██║  ██║██║   ██║██╔██╗ ██║█████╗  ██║          ║${RESET}\"\n        echo -e \"${GREEN}${BOLD}    ║   ██║  ██║██║   ██║██║╚██╗██║██╔══╝  ╚═╝          ║${RESET}\"\n        echo -e \"${GREEN}${BOLD}    ║   ██████╔╝╚██████╔╝██║ ╚████║███████╗██║          ║${RESET}\"\n        echo -e \"${GREEN}${BOLD}    ║   ╚═════╝  ╚═════╝ ╚═╝  ╚═══╝╚══════╝╚═╝          ║${RESET}\"\n        echo -e \"${GREEN}${BOLD}    ║                                                   ║${RESET}\"\n        echo -e \"${GREEN}${BOLD}    ║       ✨ XingRin 平台部署成功！                  ║${RESET}\"\n        echo -e \"${GREEN}${BOLD}    ║                                                   ║${RESET}\"\n        echo -e \"${GREEN}${BOLD}    ╚═══════════════════════════════════════════════════╝${RESET}\"\n        echo -e \"\"\n    else\n        header \"安装完成 Summary\"\n    fi\n\n    if [ -f \"$DOCKER_DIR/.env\" ]; then\n        # 从 .env 读取配置用于显示\n        DB_HOST=$(grep \"^DB_HOST=\" \"$DOCKER_DIR/.env\" | cut -d= -f2)\n        DB_USER=$(grep \"^DB_USER=\" \"$DOCKER_DIR/.env\" | cut -d= -f2)\n        DB_PASSWORD=$(grep \"^DB_PASSWORD=\" \"$DOCKER_DIR/.env\" | cut -d= -f2)\n        \n        echo -e \"${DIM}    ──────────────────────────────────────────────────────${RESET}\"\n        echo -e \"    ${YELLOW}🗄  数据库配置${RESET}\"\n        echo -e \"    ${DIM}├─${RESET} 服务器地址: ${BOLD}${DB_HOST:-未知}${RESET}\"\n        echo -e \"    ${DIM}├─${RESET} 用户名:     ${BOLD}${DB_USER:-未知}${RESET}\"\n        echo -e \"    ${DIM}└─${RESET} 密码:       ${BOLD}${DB_PASSWORD:-未知}${RESET}\"\n        echo\n    fi\n\n    # 获取访问地址\n    PUBLIC_HOST=$(grep \"^PUBLIC_HOST=\" \"$DOCKER_DIR/.env\" 2>/dev/null | cut -d= -f2)\n    if [ -n \"$PUBLIC_HOST\" ] && [ \"$PUBLIC_HOST\" != \"server\" ]; then\n        ACCESS_HOST=\"$PUBLIC_HOST\"\n    else\n        ACCESS_HOST=\"localhost\"\n    fi\n    \n    echo -e \"${DIM}    ──────────────────────────────────────────────────────${RESET}\"\n    echo -e \"    ${GREEN}🌐 访问地址${RESET}\"\n    echo -e \"    ${DIM}└─${RESET} XingRin:    ${BOLD}${CYAN}https://${ACCESS_HOST}:8083/${RESET}\"\n    echo\n    \n    echo -e \"${DIM}    ──────────────────────────────────────────────────────${RESET}\"\n    echo -e \"    ${MAGENTA}🔑 默认登录${RESET}\"\n    echo -e \"    ${DIM}├─${RESET} 用户名:     ${BOLD}admin${RESET}\"\n    echo -e \"    ${DIM}└─${RESET} 密码:       ${BOLD}admin${RESET}\"\n    echo -e \"    ${YELLOW}   ⚠  请首次登录后修改密码!${RESET}\"\n    echo\n    \n    if [ \"$1\" = \"success\" ]; then\n        :  # 成功模式，不显示后续命令\n    else\n        echo -e \"${DIM}    ──────────────────────────────────────────────────────${RESET}\"\n        echo -e \"    ${BLUE}🚀 后续命令${RESET}\"\n        echo -e \"    ${DIM}├─${RESET} ./start.sh              ${DIM}# 启动所有服务${RESET}\"\n        echo -e \"    ${DIM}├─${RESET} ./start.sh --no-frontend ${DIM}# 只启动后端${RESET}\"\n        echo -e \"    ${DIM}└─${RESET} ./stop.sh               ${DIM}# 停止所有服务${RESET}\"\n        echo\n    fi\n    \n    echo -e \"${DIM}    ──────────────────────────────────────────────────────${RESET}\"\n    echo -e \"    ${YELLOW}⚠  云服务器端口提醒${RESET}\"\n    echo -e \"    ${DIM}└─${RESET} 某些厂商默认开启安全策略（阿里云/腾讯云/华为云）\"\n    echo -e \"       端口未放行可能导致无法访问，请在云控制台放行: ${BOLD}8083, 5432${RESET}\"\n    echo\n}\n\n# ==============================================================================\n# 安装流程\n# ==============================================================================\n\nstep \"[1/3] 检查基础命令\"\nMISSING_CMDS=()\nfor cmd in git curl jq; do\n    if ! command -v \"$cmd\" >/dev/null 2>&1; then\n        MISSING_CMDS+=(\"$cmd\")\n        warn \"未安装: $cmd\"\n    else\n        success \"已安装: $cmd\"\n    fi\ndone\n\nif [ ${#MISSING_CMDS[@]} -gt 0 ]; then\n    info \"正在安装缺失命令: ${MISSING_CMDS[*]}...\"\n    apt update -qq\n    apt install -y \"${MISSING_CMDS[@]}\"\n    success \"基础命令安装完成\"\nfi\n\nstep \"[2/3] 检查 Docker 环境\"\nif command -v docker >/dev/null 2>&1; then\n    success \"已安装: docker\"\nelse\n    info \"正在安装 Docker...\"\n    \n    # 根据是否启用加速选择下载方式\n    if [ -n \"$GIT_MIRROR\" ]; then\n        # 使用阿里云 Docker 安装脚本（国内加速）\n        info \"使用国内镜像安装 Docker...\"\n        if curl -fsSL https://get.docker.com | sh -s -- --mirror Aliyun; then\n            success \"Docker 安装完成（使用阿里云镜像）\"\n        else\n            warn \"阿里云镜像安装失败，尝试官方源...\"\n            if curl -fsSL https://get.docker.com | sh; then\n                success \"Docker 安装完成\"\n            else\n                error \"Docker 安装失败\"\n                exit 1\n            fi\n        fi\n    else\n        # 默认从官方源下载\n        if curl -fsSL https://get.docker.com | sh; then\n            success \"Docker 安装完成\"\n        else\n            error \"Docker 安装脚本下载失败\"\n            error \"如果您在中国大陆，建议使用 --mirror 参数启用加速\"\n            exit 1\n        fi\n    fi\n    \n    usermod -aG docker \"$REAL_USER\"\n    \n    # 配置 Docker 镜像加速（仅当启用 --mirror 时）\n    if [ -n \"$GIT_MIRROR\" ]; then\n        configure_docker_mirror\n    fi\nfi\n\n# 如果 Docker 已安装但启用了 --mirror，也配置镜像加速\nif [ -n \"$GIT_MIRROR\" ] && command -v docker &>/dev/null; then\n    # 检查是否已配置镜像加速\n    if [ ! -f \"/etc/docker/daemon.json\" ] || ! grep -q \"registry-mirrors\" /etc/docker/daemon.json 2>/dev/null; then\n        configure_docker_mirror\n    fi\nfi\n\n# 检查 docker compose\nif docker compose version >/dev/null 2>&1; then\n    success \"已安装: docker compose\"\nelse\n    info \"正在安装 docker-compose-plugin...\"\n    apt install -y docker-compose-plugin\n    success \"docker compose 安装完成\"\nfi\n\n# ==============================================================================\n# 交换分区配置（仅 Linux）\n# ==============================================================================\nif [[ \"$OSTYPE\" == \"linux-gnu\"* ]]; then\n    # 获取当前内存大小（GB，四舍五入）\n    TOTAL_MEM_KB=$(grep MemTotal /proc/meminfo | awk '{print $2}')\n    TOTAL_MEM_GB=$(awk \"BEGIN {printf \\\"%.0f\\\", $TOTAL_MEM_KB / 1024 / 1024}\")\n    \n    # 获取当前交换分区大小（GB，四舍五入）\n    CURRENT_SWAP_KB=$(grep SwapTotal /proc/meminfo | awk '{print $2}')\n    CURRENT_SWAP_GB=$(awk \"BEGIN {printf \\\"%.0f\\\", $CURRENT_SWAP_KB / 1024 / 1024}\")\n    \n    # 推荐交换分区大小（与内存相同，最小1G，最大8G）\n    RECOMMENDED_SWAP=$TOTAL_MEM_GB\n    [ \"$RECOMMENDED_SWAP\" -lt 1 ] && RECOMMENDED_SWAP=1\n    [ \"$RECOMMENDED_SWAP\" -gt 8 ] && RECOMMENDED_SWAP=8\n    \n    echo \"\"\n    info \"系统内存: ${TOTAL_MEM_GB}GB，当前交换分区: ${CURRENT_SWAP_GB}GB\"\n    \n    # 如果交换分区小于推荐值，提示用户\n    if [ \"$CURRENT_SWAP_GB\" -lt \"$RECOMMENDED_SWAP\" ]; then\n        echo -n -e \"${BOLD}${CYAN}[?] 是否开启 ${RECOMMENDED_SWAP}GB 交换分区？可提升扫描稳定性 (Y/n) ${RESET}\"\n        read -r setup_swap\n        echo\n        if [[ ! $setup_swap =~ ^[Nn]$ ]]; then\n            info \"正在配置 ${RECOMMENDED_SWAP}GB 交换分区...\"\n            if bash \"$ROOT_DIR/docker/scripts/setup-swap.sh\" \"$RECOMMENDED_SWAP\"; then\n                success \"交换分区配置完成\"\n            else\n                warn \"交换分区配置失败，继续安装...\"\n            fi\n        else\n            info \"跳过交换分区配置\"\n        fi\n    else\n        success \"交换分区已足够: ${CURRENT_SWAP_GB}GB\"\n    fi\nfi\n\nstep \"[3/3] 初始化配置\"\n\n# 创建数据目录\ninfo \"创建数据目录...\"\nmkdir -p /opt/xingrin/{results,logs,fingerprints,wordlists,nuclei-repos}\nchmod -R 777 /opt/xingrin\nsuccess \"数据目录已创建: /opt/xingrin/\"\n\nDOCKER_DIR=\"$ROOT_DIR/docker\"\nif [ ! -d \"$DOCKER_DIR\" ]; then\n    error \"未找到 docker 目录，请确认项目结构。\"\n    exit 1\nfi\n\nif [ -f \"$DOCKER_DIR/.env.example\" ]; then\n    cp \"$DOCKER_DIR/.env.example\" \"$DOCKER_DIR/.env\"\n    success \"已创建: docker/.env\"\n    auto_fill_docker_env_secrets \"$DOCKER_DIR/.env\"\n    \n    # 写入版本号（锁定安装时的版本）\n    update_env_var \"$DOCKER_DIR/.env\" \"IMAGE_TAG\" \"$APP_VERSION\"\n    success \"已锁定版本: IMAGE_TAG=$APP_VERSION\"\n    \n    # Git 加速仅用于安装过程，不写入运行时配置\n    # 运行时用户如需加速，可通过代理或其他方式自行配置\n    if [ -n \"$GIT_MIRROR\" ]; then\n        info \"Git 加速已启用（仅用于安装阶段）\"\n    fi\n    \n    # 开发模式：开启调试日志\n    if [ \"$DEV_MODE\" = true ]; then\n        info \"开发模式：开启调试配置...\"\n        update_env_var \"$DOCKER_DIR/.env\" \"DEBUG\" \"True\"\n        update_env_var \"$DOCKER_DIR/.env\" \"LOG_LEVEL\" \"INFO\"\n        update_env_var \"$DOCKER_DIR/.env\" \"ENABLE_COMMAND_LOGGING\" \"true\"\n        success \"已开启: DEBUG=True, LOG_LEVEL=INFO, ENABLE_COMMAND_LOGGING=true\"\n    fi\n    \n    # 询问数据库配置\n    echo \"\"\n    echo -n -e \"${BOLD}${CYAN}[?] 是否使用远程 PostgreSQL 数据库？(y/N) ${RESET}\"\n    read -r use_remote_db\n    echo\n\n    if [[ $use_remote_db =~ ^[Yy]$ ]]; then\n        echo -e \"${CYAN}   请输入远程 PostgreSQL 配置：${RESET}\"\n        \n        # 服务器地址（必填）\n        echo -n -e \"   ${CYAN}服务器地址: ${RESET}\"\n        read -r db_host\n        if [ -z \"$db_host\" ]; then\n            error \"服务器地址不能为空\"\n            exit 1\n        fi\n        \n        # 端口（可选）\n        echo -n -e \"   ${CYAN}端口 [5432]: ${RESET}\"\n        read -r db_port\n        db_port=${db_port:-5432}\n        \n        # 用户名（必填）\n        echo -n -e \"   ${CYAN}用户名: ${RESET}\"\n        read -r db_user\n        if [ -z \"$db_user\" ]; then\n            error \"用户名不能为空\"\n            exit 1\n        fi\n        \n        # 密码（必填）\n        echo -n -e \"   ${CYAN}密码: ${RESET}\"\n        read -r db_password\n        if [ -z \"$db_password\" ]; then\n            error \"密码不能为空\"\n            exit 1\n        fi\n        \n        # 验证远程 PostgreSQL 连接（使用官方 postgres 镜像中的 psql）\n        echo\n        info \"正在验证远程 PostgreSQL 连接...\"\n        # 使用 postgres 默认库验证连接（每个 PostgreSQL 都有这个库）\n        if ! docker run --rm \\\n            -e PGPASSWORD=\"$db_password\" \\\n            postgres:15 \\\n            psql \"postgresql://$db_user@$db_host:$db_port/postgres\" -c 'SELECT 1' >/dev/null 2>&1; then\n            echo\n            error \"无法连接到远程 PostgreSQL，请检查 IP/端口/用户名/密码是否正确\"\n            echo \"       尝试连接: postgresql://$db_user@$db_host:$db_port/postgres\"\n            exit 1\n        fi\n        success \"远程 PostgreSQL 连接验证通过\"\n        \n        # 尝试创建业务数据库（如果不存在）\n        info \"检查并创建数据库...\"\n        db_name=$(grep \"^DB_NAME=\" \"$DOCKER_DIR/.env\" | cut -d= -f2)\n        db_name=${db_name:-xingrin}\n        prefect_db=$(grep \"^PREFECT_DB_NAME=\" \"$DOCKER_DIR/.env\" | cut -d= -f2)\n        prefect_db=${prefect_db:-prefect}\n        \n        docker run --rm -e PGPASSWORD=\"$db_password\" postgres:15 \\\n            psql \"postgresql://$db_user@$db_host:$db_port/postgres\" \\\n            -c \"CREATE DATABASE $db_name;\" 2>/dev/null || true\n        docker run --rm -e PGPASSWORD=\"$db_password\" postgres:15 \\\n            psql \"postgresql://$db_user@$db_host:$db_port/postgres\" \\\n            -c \"CREATE DATABASE $prefect_db;\" 2>/dev/null || true\n        success \"数据库准备完成\"\n        \n        # 检测 pg_ivm 扩展\n        if ! check_pg_ivm \"$db_host\" \"$db_port\" \"$db_user\" \"$db_password\" \"$db_name\"; then\n            exit 1\n        fi\n        \n        sed_inplace \"s/^DB_HOST=.*/DB_HOST=$db_host/\" \"$DOCKER_DIR/.env\"\n        sed_inplace \"s/^DB_PORT=.*/DB_PORT=$db_port/\" \"$DOCKER_DIR/.env\"\n        sed_inplace \"s/^DB_USER=.*/DB_USER=$db_user/\" \"$DOCKER_DIR/.env\"\n        sed_inplace \"s/^DB_PASSWORD=.*/DB_PASSWORD=$db_password/\" \"$DOCKER_DIR/.env\"\n        success \"已配置远程数据库: $db_user@$db_host:$db_port\"\n    else\n        info \"使用本地 PostgreSQL 容器\"\n    fi\n\n    # 是否为远程 VPS 部署（需要从其它机器 / Worker 访问本系统）\n    echo \"\"\n    echo -n -e \"${BOLD}${CYAN}[?] 当前是否为远程 VPS 部署？(y/N) ${RESET}\"\n    read -r set_public_host\n    echo\n    if [[ $set_public_host =~ ^[Yy]$ ]]; then\n        echo -n -e \"   ${CYAN}请输入当前远程 vps 的外网 IP 地址（例如 10.1.1.1）: ${RESET}\"\n        read -r public_host\n        if [ -z \"$public_host\" ]; then\n            warn \"未输入外网ip地址，将保持 .env 中已有的 PUBLIC_HOST（请确保 Worker 能访问该地址）\"\n        else\n            update_env_var \"$DOCKER_DIR/.env\" \"PUBLIC_HOST\" \"$public_host\"\n            success \"已配置对外访问地址: $public_host\"\n        fi\n    else\n        info \"检测为本机 docker 部署，将 PUBLIC_HOST 设置为 server（容器内部访问后端服务名）\"\n        update_env_var \"$DOCKER_DIR/.env\" \"PUBLIC_HOST\" \"server\"\n    fi\nelse\n    error \"未找到 docker/.env.example\"\n    exit 1\nfi\n\n# 准备 HTTPS 证书（无域名也可使用自签）\ngenerate_self_signed_cert\n\n# ==============================================================================\n# 预拉取 Worker 镜像（避免扫描时等待）\n# ==============================================================================\nstep \"预拉取 Worker 镜像...\"\nDOCKER_USER=$(grep \"^DOCKER_USER=\" \"$DOCKER_DIR/.env\" 2>/dev/null | cut -d= -f2)\nDOCKER_USER=${DOCKER_USER:-yyhuni}\nWORKER_IMAGE=\"${DOCKER_USER}/xingrin-worker:${APP_VERSION}\"\n\n# 开发模式下构建本地 worker 镜像\nif [ \"$DEV_MODE\" = true ]; then\n    info \"开发模式：构建本地 Worker 镜像...\"\n    if docker compose -f \"$DOCKER_DIR/docker-compose.dev.yml\" build worker; then\n        # 设置 TASK_EXECUTOR_IMAGE 环境变量指向本地构建的镜像（使用版本号-dev标识）\n        update_env_var \"$DOCKER_DIR/.env\" \"TASK_EXECUTOR_IMAGE\" \"docker-worker:${APP_VERSION}-dev\"\n        success \"本地 Worker 镜像构建完成: docker-worker:${APP_VERSION}-dev\"\n    else\n        error \"开发模式下本地 Worker 镜像构建失败！\"\n        error \"请检查构建错误并修复后重试\"\n        exit 1\n    fi\nelse\n    info \"正在拉取: $WORKER_IMAGE\"\n    \n    # 镜像加速通过 daemon.json 的 registry-mirrors 实现\n    PULL_IMAGE=\"$WORKER_IMAGE\"\n    \n    if [ -n \"$GIT_MIRROR\" ]; then\n        info \"已配置 Docker 镜像加速，拉取将自动走加速通道\"\n    fi\n    \n    if docker pull \"$PULL_IMAGE\"; then\n        success \"Worker 镜像拉取完成\"\n    else\n        error \"Worker 镜像拉取失败，无法继续安装\"\n        error \"镜像地址: $WORKER_IMAGE\"\n        echo\n        if [ -z \"$GIT_MIRROR\" ]; then\n            warn \"如果您在中国大陆，建议使用 --mirror 参数启用加速：\"\n            echo -e \"   ${BOLD}sudo ./install.sh --mirror${RESET}\"\n        else\n            warn \"镜像加速已配置，但拉取仍然失败，可能原因：\"\n            echo -e \"   1. 镜像源暂时不可用，请稍后重试\"\n            echo -e \"   2. 网络连接问题\"\n            echo -e \"   3. 镜像不存在或版本错误\"\n        fi\n        echo\n        exit 1\n    fi\nfi\n\n# ==============================================================================\n# 预下载 Nuclei 模板仓库（在容器外执行，支持 Git 加速）\n# ==============================================================================\nstep \"预下载 Nuclei 模板仓库...\"\nNUCLEI_TEMPLATES_DIR=\"/opt/xingrin/nuclei-repos/nuclei-templates\"\nNUCLEI_TEMPLATES_REPO=\"https://github.com/projectdiscovery/nuclei-templates.git\"\n\n# 确保目录存在\nmkdir -p /opt/xingrin/nuclei-repos\n\nif [ -d \"$NUCLEI_TEMPLATES_DIR/.git\" ]; then\n    info \"Nuclei 模板仓库已存在，跳过下载\"\nelse\n    # 构建 clone URL（如果启用了 Git 加速）\n    if [ -n \"$GIT_MIRROR\" ]; then\n        CLONE_URL=\"${GIT_MIRROR}/${NUCLEI_TEMPLATES_REPO}\"\n        info \"使用 Git 加速下载: $CLONE_URL\"\n    else\n        CLONE_URL=\"$NUCLEI_TEMPLATES_REPO\"\n    fi\n    \n    # 执行 git clone\n    if git clone --depth 1 \"$CLONE_URL\" \"$NUCLEI_TEMPLATES_DIR\"; then\n        success \"Nuclei 模板仓库下载完成\"\n    else\n        warn \"Nuclei 模板仓库下载失败，将在服务启动后重试\"\n        warn \"您也可以稍后在 Web 界面「Nuclei 模板」中手动同步\"\n    fi\nfi\n\n# ==============================================================================\n# 启动服务\n# ==============================================================================\nstep \"正在启动服务...\"\n\"$ROOT_DIR/start.sh\" ${START_ARGS} --quiet\n\n# ==============================================================================\n# 完成总结\n# ==============================================================================\nshow_summary \"success\"\n"
  },
  {
    "path": "restart.sh",
    "content": "#!/bin/bash\n# 重启服务（Docker 部署）\ncd \"$(dirname \"$0\")\"\nexec ./docker/restart.sh\n"
  },
  {
    "path": "start.sh",
    "content": "#!/bin/bash\n# 启动服务（所有服务均在 Docker 中运行）\n#\n# 用法:\n#   ./start.sh                 生产模式 - 拉取 Docker Hub 镜像启动\n#   ./start.sh --dev           开发模式 - 本地构建镜像启动\n#   ./start.sh --no-frontend   只启动后端（前端手动启动）\n#   ./start.sh --dev --no-frontend  开发模式 + 只启动后端\n\ncd \"$(dirname \"$0\")\"\nexec ./docker/start.sh \"$@\"\n"
  },
  {
    "path": "stop.sh",
    "content": "#!/bin/bash\n# 停止服务（所有服务均在 Docker 中运行）\ncd \"$(dirname \"$0\")\"\nexec ./docker/stop.sh \"$@\"\n"
  },
  {
    "path": "uninstall.sh",
    "content": "#!/bin/bash\nset -e\n\n# ==============================================================================\n# 颜色定义\n# ==============================================================================\nRED='\\033[0;31m'\nGREEN='\\033[0;32m'\nYELLOW='\\033[0;33m'\nBLUE='\\033[0;34m'\nCYAN='\\033[0;36m'\nBOLD='\\033[1m'\nRESET='\\033[0m'\n\n# ==============================================================================\n# 日志函数\n# ==============================================================================\ninfo() {\n    echo -e \"${BLUE}[INFO]${RESET} $1\"\n}\n\nsuccess() {\n    echo -e \"${GREEN}[OK]${RESET} $1\"\n}\n\nwarn() {\n    echo -e \"${YELLOW}[WARN]${RESET} $1\"\n}\n\nerror() {\n    echo -e \"${RED}[ERROR]${RESET} $1\"\n}\n\nstep() {\n    echo -e \"\\n${BOLD}${CYAN}>>> $1${RESET}\"\n}\n\nheader() {\n    echo -e \"${BOLD}${BLUE}============================================================${RESET}\"\n    echo -e \"${BOLD}${BLUE}   $1${RESET}\"\n    echo -e \"${BOLD}${BLUE}============================================================${RESET}\"\n}\n\n# ==============================================================================\n# 权限检查\n# ==============================================================================\nif [ \"$EUID\" -ne 0 ]; then\n    error \"请使用 sudo 运行此脚本\"\n    echo -e \"   正确用法: ${BOLD}sudo ./uninstall.sh${RESET}\"\n    exit 1\nfi\n\nROOT_DIR=\"$(cd \"$(dirname \"$0\")\" && pwd)\"\nDOCKER_DIR=\"$ROOT_DIR/docker\"\n\nheader \"XingRin 一键卸载脚本 (Ubuntu)\"\ninfo \"项目路径: ${BOLD}$ROOT_DIR${RESET}\"\n\nif [ ! -d \"$DOCKER_DIR\" ]; then\n    error \"未找到 docker 目录，请确认项目结构。\"\n    exit 1\nfi\n\n# ==============================================================================\n# 1. 停止并删除全部容器/网络\n# ==============================================================================\nstep \"[1/5] 是否停止并删除全部容器/网络？(Y/n)\"\nread -r ans_stop\nans_stop=${ans_stop:-Y}\n\nif [[ $ans_stop =~ ^[Yy]$ ]]; then\n    info \"正在停止并删除容器/网络...\"\n    cd \"$DOCKER_DIR\"\n    if command -v docker compose >/dev/null 2>&1; then\n        COMPOSE_CMD=\"docker compose\"\n    else\n        COMPOSE_CMD=\"docker-compose\"\n    fi\n    \n    # 先强制停止并删除可能占用网络的容器（xingrin-agent 等）\n    docker rm -f xingrin-agent xingrin-watchdog 2>/dev/null || true\n    \n    # 清理所有可能的 XingRin 相关容器\n    docker ps -a | grep -E \"(xingrin|docker-)\" | awk '{print $1}' | xargs -r docker rm -f 2>/dev/null || true\n    \n    # 停止两种模式的容器（不带 -v，volume 在第 5 步单独处理）\n    [ -f \"docker-compose.yml\" ] && ${COMPOSE_CMD} -f docker-compose.yml down 2>/dev/null || true\n    [ -f \"docker-compose.dev.yml\" ] && ${COMPOSE_CMD} -f docker-compose.dev.yml down 2>/dev/null || true\n    \n    # 手动删除网络（以防 compose 未能删除）\n    docker network rm xingrin_network docker_default 2>/dev/null || true\n    \n    success \"容器和网络已停止/删除（如存在）。\"\nelse\n    warn \"已跳过停止/删除容器/网络。\"\nfi\n\n# ==============================================================================\n# 2. 删除 /opt/xingrin 数据目录\n# ==============================================================================\n\nOPT_XINGRIN_DIR=\"/opt/xingrin\"\n\nstep \"[2/5] 是否删除数据目录 ($OPT_XINGRIN_DIR)？(Y/n)\"\necho -e \"   ${YELLOW}包含：扫描结果、日志、指纹库、字典、Nuclei 模板等${RESET}\"\nread -r ans_data\nans_data=${ans_data:-Y}\n\nif [[ $ans_data =~ ^[Yy]$ ]]; then\n    info \"正在删除数据目录...\"\n    rm -rf \"$OPT_XINGRIN_DIR\"\n    success \"已删除 $OPT_XINGRIN_DIR\"\nelse\n    warn \"已保留数据目录。\"\nfi\n\n# ==============================================================================\n# 3. 删除 docker/.env 配置文件\n# ==============================================================================\nENV_FILE=\"$DOCKER_DIR/.env\"\n\nstep \"[3/5] 是否删除配置文件 ($ENV_FILE)？(Y/n)\"\necho -e \"   ${YELLOW}注意：删除后下次安装将生成新的随机密码。${RESET}\"\nread -r ans_env\nans_env=${ans_env:-Y}\n\nif [[ $ans_env =~ ^[Yy]$ ]]; then\n    info \"正在删除配置文件...\"\n    rm -f \"$ENV_FILE\"\n    success \"已删除 $ENV_FILE。\"\nelse\n    warn \"已保留 $ENV_FILE。\"\nfi\n\n# ==============================================================================\n# 4. 删除本地 Postgres 容器及数据卷（如果使用本地 DB）\n# ==============================================================================\nstep \"[4/5] 若使用本地 PostgreSQL 容器：是否删除数据库容器和 volume？(Y/n)\"\nread -r ans_db\nans_db=${ans_db:-Y}\n\nif [[ $ans_db =~ ^[Yy]$ ]]; then\n    info \"尝试删除与 XingRin 相关的 Postgres 容器和数据卷...\"\n    # 删除可能的容器名（不同 compose 版本命名不同）\n    docker rm -f docker-postgres-1 xingrin-postgres postgres 2>/dev/null || true\n    \n    # 删除可能的 volume 名（取决于项目名和 compose 配置）\n    # 先列出要删除的 volume\n    for vol in postgres_data docker_postgres_data xingrin_postgres_data; do\n        if docker volume inspect \"$vol\" >/dev/null 2>&1; then\n            if docker volume rm \"$vol\" 2>/dev/null; then\n                success \"已删除 volume: $vol\"\n            else\n                warn \"无法删除 volume: $vol（可能正在被使用，请先停止所有容器）\"\n            fi\n        fi\n    done\n    success \"本地 Postgres 数据卷清理完成。\"\nelse\n    warn \"已保留本地 Postgres 容器和 volume。\"\nfi\n\nstep \"[5/5] 是否删除与 XingRin 相关的 Docker 镜像？(Y/n)\"\nread -r ans_images\nans_images=${ans_images:-Y}\n\nif [[ $ans_images =~ ^[Yy]$ ]]; then\n    info \"正在删除 Docker 镜像...\"\n    \n    # 从 .env 读取版本号，如果不存在则使用 latest\n    if [ -f \"$DOCKER_DIR/.env\" ]; then\n        DOCKER_USER=$(grep \"^DOCKER_USER=\" \"$DOCKER_DIR/.env\" | cut -d= -f2 || echo \"yyhuni\")\n        IMAGE_TAG=$(grep \"^IMAGE_TAG=\" \"$DOCKER_DIR/.env\" | cut -d= -f2 || echo \"latest\")\n    else\n        DOCKER_USER=\"yyhuni\"\n        IMAGE_TAG=\"latest\"\n    fi\n    \n    # 删除指定版本的镜像\n    docker rmi \"${DOCKER_USER}/xingrin-server:${IMAGE_TAG}\" 2>/dev/null || true\n    docker rmi \"${DOCKER_USER}/xingrin-frontend:${IMAGE_TAG}\" 2>/dev/null || true\n    docker rmi \"${DOCKER_USER}/xingrin-nginx:${IMAGE_TAG}\" 2>/dev/null || true\n    docker rmi \"${DOCKER_USER}/xingrin-agent:${IMAGE_TAG}\" 2>/dev/null || true\n    docker rmi \"${DOCKER_USER}/xingrin-worker:${IMAGE_TAG}\" 2>/dev/null || true\n    \n    # 同时删除 latest 标签（如果存在）\n    if [ \"$IMAGE_TAG\" != \"latest\" ]; then\n        docker rmi \"${DOCKER_USER}/xingrin-server:latest\" 2>/dev/null || true\n        docker rmi \"${DOCKER_USER}/xingrin-frontend:latest\" 2>/dev/null || true\n        docker rmi \"${DOCKER_USER}/xingrin-nginx:latest\" 2>/dev/null || true\n        docker rmi \"${DOCKER_USER}/xingrin-agent:latest\" 2>/dev/null || true\n        docker rmi \"${DOCKER_USER}/xingrin-worker:latest\" 2>/dev/null || true\n    fi\n    \n    docker rmi redis:7-alpine 2>/dev/null || true\n    \n    # 删除本地构建的开发镜像\n    docker rmi docker-server docker-frontend docker-nginx docker-agent docker-worker 2>/dev/null || true\n    docker rmi \"docker-worker:${IMAGE_TAG}-dev\" 2>/dev/null || true\n    \n    success \"Docker 镜像已删除（如存在）。\"\nelse\n    warn \"已保留 Docker 镜像。\"\nfi\n\n# 清理构建缓存（可选，会导致下次构建变慢）\necho \"\"\necho -n -e \"${BOLD}${CYAN}[?] 是否清理 Docker 构建缓存？(y/N) ${RESET}\"\necho -e \"${YELLOW}（清理后下次构建会很慢，一般不需要）${RESET}\"\nread -r ans_cache\nans_cache=${ans_cache:-N}\n\nif [[ $ans_cache =~ ^[Yy]$ ]]; then\n    info \"清理 Docker 构建缓存...\"\n    docker builder prune -af 2>/dev/null || true\n    success \"构建缓存已清理。\"\nelse\n    warn \"已保留构建缓存（推荐）。\"\nfi\n\nsuccess \"卸载流程已完成。\"\n"
  },
  {
    "path": "update.sh",
    "content": "#!/bin/bash\n# ============================================\n# XingRin 系统更新脚本\n# 用途：更新代码 + 同步版本 + 重建镜像 + 重启服务\n# ============================================\n#\n# 更新流程：\n# 1. 停止服务\n# 2. git pull 拉取最新代码\n# 3. 合并 .env 新配置项 + 同步 VERSION\n# 4. 构建/拉取镜像（开发模式构建，生产模式拉取）\n# 5. 启动服务（server 启动时自动执行数据库迁移）\n#\n# 用法:\n#   sudo ./update.sh                 生产模式更新（拉取 Docker Hub 镜像）\n#   sudo ./update.sh --dev           开发模式更新（本地构建镜像）\n#   sudo ./update.sh --no-frontend   更新后只启动后端\n#   sudo ./update.sh --dev --no-frontend     开发环境更新后只启动后端\n\ncd \"$(dirname \"$0\")\"\n\n# 权限检查\nif [ \"$EUID\" -ne 0 ]; then\n    printf \"\\033[0;31m✗ 请使用 sudo 运行此脚本\\033[0m\\n\"\n    printf \"  正确用法: \\033[1msudo ./update.sh\\033[0m\\n\"\n    exit 1\nfi\n\n# 跨平台 sed -i（兼容 macOS 和 Linux）\nsed_inplace() {\n    if [[ \"$OSTYPE\" == \"darwin\"* ]]; then\n        sed -i '' \"$@\"\n    else\n        sed -i \"$@\"\n    fi\n}\n\n# 解析参数判断模式\nDEV_MODE=false\nfor arg in \"$@\"; do\n    case $arg in\n        --dev) DEV_MODE=true ;;\n    esac\ndone\n\n# 颜色定义\nGREEN='\\033[0;32m'\nYELLOW='\\033[1;33m'\nRED='\\033[0;31m'\nBLUE='\\033[0;34m'\nCYAN='\\033[0;36m'\nDIM='\\033[2m'\nBOLD='\\033[1m'\nNC='\\033[0m'\n\n# 日志函数\nlog_step() { printf \"${CYAN}▶${NC} %s\\n\" \"$1\"; }\nlog_ok() { printf \"  ${GREEN}✓${NC} %s\\n\" \"$1\"; }\nlog_info() { printf \"  ${DIM}→${NC} %s\\n\" \"$1\"; }\nlog_warn() { printf \"  ${YELLOW}!${NC} %s\\n\" \"$1\"; }\nlog_error() { printf \"${RED}✗${NC} %s\\n\" \"$1\"; }\n\n# 合并 .env 新配置项（保留用户已有值）\nmerge_env_config() {\n    local example_file=\"docker/.env.example\"\n    local env_file=\"docker/.env\"\n    \n    if [ ! -f \"$example_file\" ] || [ ! -f \"$env_file\" ]; then\n        return\n    fi\n    \n    local new_keys=0\n    \n    while IFS= read -r line || [ -n \"$line\" ]; do\n        [[ -z \"$line\" || \"$line\" =~ ^# ]] && continue\n        local key=\"${line%%=*}\"\n        [[ -z \"$key\" || \"$key\" == \"$line\" ]] && continue\n        \n        if ! grep -q \"^${key}=\" \"$env_file\"; then\n            printf '%s\\n' \"$line\" >> \"$env_file\"\n            log_info \"新增配置: $key\"\n            ((new_keys++))\n        fi\n    done < \"$example_file\"\n    \n    if [ $new_keys -gt 0 ]; then\n        log_ok \"已添加 $new_keys 个新配置项\"\n    else\n        log_ok \"配置已是最新\"\n    fi\n}\n\n# 显示标题\nprintf \"\\n\"\nprintf \"${BOLD}${BLUE}┌────────────────────────────────────────┐${NC}\\n\"\nif [ \"$DEV_MODE\" = true ]; then\n    printf \"${BOLD}${BLUE}│${NC}       ${BOLD}XingRin 系统更新${NC}                 ${BOLD}${BLUE}│${NC}\\n\"\n    printf \"${BOLD}${BLUE}│${NC}       ${DIM}开发模式 · 本地构建${NC}               ${BOLD}${BLUE}│${NC}\\n\"\nelse\n    printf \"${BOLD}${BLUE}│${NC}       ${BOLD}XingRin 系统更新${NC}                 ${BOLD}${BLUE}│${NC}\\n\"\n    printf \"${BOLD}${BLUE}│${NC}       ${DIM}生产模式 · Docker Hub${NC}             ${BOLD}${BLUE}│${NC}\\n\"\nfi\nprintf \"${BOLD}${BLUE}└────────────────────────────────────────┘${NC}\\n\"\nprintf \"\\n\"\n\n# 警告提示\nprintf \"${YELLOW}┌─ 注意事项 ─────────────────────────────┐${NC}\\n\"\nprintf \"${YELLOW}│${NC} • 此功能为测试性功能，可能导致升级失败   ${YELLOW}│${NC}\\n\"\nprintf \"${YELLOW}│${NC} • 升级会覆盖所有默认引擎配置             ${YELLOW}│${NC}\\n\"\nprintf \"${YELLOW}│${NC} • 自定义配置请先备份或创建新引擎         ${YELLOW}│${NC}\\n\"\nprintf \"${YELLOW}│${NC} • 推荐：卸载后重新安装以获得最佳体验     ${YELLOW}│${NC}\\n\"\nprintf \"${YELLOW}└────────────────────────────────────────┘${NC}\\n\"\nprintf \"\\n\"\n\nprintf \"${YELLOW}是否继续更新？${NC} [y/N] \"\nread -r ans_continue\nans_continue=${ans_continue:-N}\n\nif [[ ! $ans_continue =~ ^[Yy]$ ]]; then\n    printf \"\\n${DIM}已取消更新${NC}\\n\"\n    exit 0\nfi\nprintf \"\\n\"\n\n# Step 1: 停止服务\nlog_step \"停止服务...\"\n./stop.sh 2>&1 | sed 's/^/  /'\nlog_ok \"服务已停止\"\n\n# Step 2: 拉取代码\nprintf \"\\n\"\nlog_step \"拉取最新代码...\"\nif git pull --rebase 2>&1 | sed 's/^/  /'; then\n    log_ok \"代码已更新\"\nelse\n    log_error \"git pull 失败，请手动解决冲突后重试\"\n    exit 1\nfi\n\n# Step 3: 检查配置更新 + 版本同步\nprintf \"\\n\"\nlog_step \"同步配置...\"\nmerge_env_config\n\n# 版本同步：从 VERSION 文件更新 IMAGE_TAG\nif [ -f \"VERSION\" ]; then\n    NEW_VERSION=$(cat VERSION | tr -d '[:space:]')\n    if [ -n \"$NEW_VERSION\" ]; then\n        if grep -q \"^IMAGE_TAG=\" \"docker/.env\"; then\n            sed_inplace \"s/^IMAGE_TAG=.*/IMAGE_TAG=$NEW_VERSION/\" \"docker/.env\"\n        else\n            printf '%s\\n' \"IMAGE_TAG=$NEW_VERSION\" >> \"docker/.env\"\n        fi\n        log_ok \"版本同步: $NEW_VERSION\"\n    fi\nfi\n\n# Step 4: 构建/拉取镜像\nprintf \"\\n\"\nlog_step \"更新镜像...\"\n\nif [ \"$DEV_MODE\" = true ]; then\n    # 开发模式：本地构建所有镜像（包括 Worker）\n    log_info \"构建 Worker 镜像...\"\n    \n    # 读取 IMAGE_TAG\n    IMAGE_TAG=$(grep \"^IMAGE_TAG=\" \"docker/.env\" | cut -d'=' -f2)\n    if [ -z \"$IMAGE_TAG\" ]; then\n        IMAGE_TAG=\"dev\"\n    fi\n    \n    # 构建 Worker 镜像（Worker 是临时容器，不在 compose 中，需要单独构建）\n    docker build -t docker-worker -f docker/worker/Dockerfile . 2>&1 | sed 's/^/  /'\n    docker tag docker-worker docker-worker:${IMAGE_TAG} 2>&1 | sed 's/^/  /'\n    log_ok \"Worker 镜像: docker-worker:${IMAGE_TAG}\"\n    \n    log_info \"其他服务镜像将在启动时构建\"\nelse\n    log_info \"镜像将在启动时从 Docker Hub 拉取\"\nfi\n\n# Step 5: 启动服务\nprintf \"\\n\"\nlog_step \"启动服务...\"\n./start.sh \"$@\"\n\n# 完成提示\nprintf \"\\n\"\nprintf \"${GREEN}┌────────────────────────────────────────┐${NC}\\n\"\nprintf \"${GREEN}│${NC}  ${BOLD}${GREEN}✓${NC} ${BOLD}更新完成${NC}                            ${GREEN}│${NC}\\n\"\nprintf \"${GREEN}└────────────────────────────────────────┘${NC}\\n\"\nprintf \"\\n\"\n"
  }
]